<?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>56793</bug_id>
          
          <creation_ts>2011-03-21 18:08:40 -0700</creation_ts>
          <short_desc>[chromium] Move draw implementations to CCLayerImpl for everything except content layers</short_desc>
          <delta_ts>2011-03-25 18:13:15 -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>Other</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="James Robinson">jamesr</assigned_to>
          <cc>abarth</cc>
    
    <cc>enne</cc>
    
    <cc>eric</cc>
    
    <cc>jbauman</cc>
    
    <cc>kbr</cc>
    
    <cc>nduca</cc>
    
    <cc>vangelis</cc>
    
    <cc>vrk</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>371105</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-21 18:08:40 -0700</bug_when>
    <thetext>[chromium] Move draw implementations to CCLayerImpl for everything except content layers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371129</commentid>
    <comment_count>1</comment_count>
      <attachid>86402</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-21 18:40:11 -0700</bug_when>
    <thetext>Created attachment 86402
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371130</commentid>
    <comment_count>2</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-21 18:41:07 -0700</bug_when>
    <thetext>Should be pretty straightforward ;-D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371163</commentid>
    <comment_count>3</comment_count>
      <attachid>86402</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-03-21 20:15:03 -0700</bug_when>
    <thetext>Comment on attachment 86402
Patch

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

&gt; Source/WebCore/ChangeLog:12
&gt; +        and moving the code from each XXXLayerChromium to XXXCCLayerImpl.  In order to render from the CCLayerImpl side all state

XXXCCLayerImpl --&gt; CCXXXLayerImpl? CC feels like a prefix... what does CA do? Is it OpenGLCALayer?

&gt; Source/WebCore/ChangeLog:29
&gt; +        5.) for each LayerChromium in tree order, update the layer&apos;s textures

Is this the step that requires a access to the compositor context?

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:292
&gt; +void LayerChromium::updateToLayer(CCLayerImpl* layer)

should we be calling this commitToLayer?

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:405
&gt; +        m_rootLayer-&gt;createCCLayerImplIfNeeded();

Why do we create the impl right up front on the root layer? Sorry if I&apos;m being daft...

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:471
&gt;  {

Wonders how we can clean up this renderSurfacLayerList/layerList/worldTransform/renderLayer mess... not for this CL, but in the big picture. Maybe we should whiteboard this tomorrow? I&apos;m wondering if we should refactor [in another cl] this monster function into a few functions with smaller and better-contained side effects, even at the penalty of walking the tree a few times.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:485
&gt; +    // RenderSurfaces and we rely on RenderSurfaces being up to date in order to paint contents we have

Is the state dependency here the world transforms? Or is there more?

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:761
&gt; +void LayerRendererChromium::updateContentsTextureRecursive(LayerChromium* layer)

Can we call this updateCompositorResourcesRecursive?

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:781
&gt; +    layer-&gt;updateToLayer(drawLayer);

The first thing I&apos;m going to do in the threading cl is make this yet-another tree walk, e.g. updateToLayerRecursive(...) (commitToLayerRecursive)... can we just make it that way from the start?

Also, when do the replica layers get updatedToLayer? I don&apos;t know much about how masks and replicas work in our system so...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371188</commentid>
    <comment_count>4</comment_count>
      <attachid>86402</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-21 21:11:00 -0700</bug_when>
    <thetext>Comment on attachment 86402
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:12
&gt;&gt; +        and moving the code from each XXXLayerChromium to XXXCCLayerImpl.  In order to render from the CCLayerImpl side all state
&gt; 
&gt; XXXCCLayerImpl --&gt; CCXXXLayerImpl? CC feels like a prefix... what does CA do? Is it OpenGLCALayer?

They do CAOpenGLLayer (see WebGLLayer.h).  I&apos;m not super in love with either naming scheme but CCXXXLayerImpl would be a little more consistent.

&gt;&gt; Source/WebCore/ChangeLog:29
&gt;&gt; +        5.) for each LayerChromium in tree order, update the layer&apos;s textures
&gt; 
&gt; Is this the step that requires a access to the compositor context?

yes

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:292
&gt;&gt; +void LayerChromium::updateToLayer(CCLayerImpl* layer)
&gt; 
&gt; should we be calling this commitToLayer?

I think this will be part of the commit step, but I&apos;m not sure about commit as a verb in this context. updateProperties..() feels more natural than commitProperties..() even though we&apos;ve been referring to this step as the commit phase in design discussions.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:405
&gt;&gt; +        m_rootLayer-&gt;createCCLayerImplIfNeeded();
&gt; 
&gt; Why do we create the impl right up front on the root layer? Sorry if I&apos;m being daft...

this might not be strictly necessary now that you point it out.  setLayerRenderer() which is called on the next line currently defers to the ccLayerImpl in order to clean resources up, so if the ccLayerImpl has to exist - or maybe i can just null check in setLayerRenderer()

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:471

&gt; 
&gt; Wonders how we can clean up this renderSurfacLayerList/layerList/worldTransform/renderLayer mess... not for this CL, but in the big picture. Maybe we should whiteboard this tomorrow? I&apos;m wondering if we should refactor [in another cl] this monster function into a few functions with smaller and better-contained side effects, even at the penalty of walking the tree a few times.

yeah let&apos;s try to figure this out.  the content layer update code is pretty convoluted right now to try to determine a visible region and it has issue anyway so we need to clean it up regardless of this patch.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:485
&gt;&gt; +    // RenderSurfaces and we rely on RenderSurfaces being up to date in order to paint contents we have
&gt; 
&gt; Is the state dependency here the world transforms? Or is there more?

world transforms and the render surface bounds (in order to test visibility).

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:761
&gt;&gt; +void LayerRendererChromium::updateContentsTextureRecursive(LayerChromium* layer)
&gt; 
&gt; Can we call this updateCompositorResourcesRecursive?

whoops! i renamed updateContentsTexture()-&gt;updateCompositorResources() but forgot to rename this one. will do!

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:781
&gt;&gt; +    layer-&gt;updateToLayer(drawLayer);
&gt; 
&gt; The first thing I&apos;m going to do in the threading cl is make this yet-another tree walk, e.g. updateToLayerRecursive(...) (commitToLayerRecursive)... can we just make it that way from the start?
&gt; 
&gt; Also, when do the replica layers get updatedToLayer? I don&apos;t know much about how masks and replicas work in our system so...

as i referred to in the changelog i want to fold all tree walks together.  i think we can get away with folding what you want into this walk for now - let&apos;s chat about it tomorrow.

LayerChromium::updateToLayer() calls updateToLayer() on its replica, mask, and replica mask layers.  i&apos;m not sure how we will represent these relationships exactly in the mirrored CCLayerImpl tree once that exists but once we figure that out it will hopefully be obvious where to put the update call for it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371256</commentid>
    <comment_count>5</comment_count>
      <attachid>86402</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-03-22 00:39:22 -0700</bug_when>
    <thetext>Comment on attachment 86402
Patch

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

Looks good on a first look.  Will take another look tomorrow.

&gt;&gt;&gt; Source/WebCore/ChangeLog:12
&gt;&gt;&gt; +        and moving the code from each XXXLayerChromium to XXXCCLayerImpl.  In order to render from the CCLayerImpl side all state
&gt;&gt; 
&gt;&gt; XXXCCLayerImpl --&gt; CCXXXLayerImpl? CC feels like a prefix... what does CA do? Is it OpenGLCALayer?
&gt; 
&gt; They do CAOpenGLLayer (see WebGLLayer.h).  I&apos;m not super in love with either naming scheme but CCXXXLayerImpl would be a little more consistent.

CCXXXLayerImp sounds better to me too.

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:391
&gt; +{

Why not always create a ccLayerImpl every in the constructor of LayerChromium?

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:471

&gt;&gt; 
&gt;&gt; Wonders how we can clean up this renderSurfacLayerList/layerList/worldTransform/renderLayer mess... not for this CL, but in the big picture. Maybe we should whiteboard this tomorrow? I&apos;m wondering if we should refactor [in another cl] this monster function into a few functions with smaller and better-contained side effects, even at the penalty of walking the tree a few times.
&gt; 
&gt; 

I agree this function in getting out of control.  I&apos;ll help refactoring it. Different CL though.

&gt; Source/WebCore/platform/graphics/chromium/cc/PluginCCLayerImpl.cpp:74
&gt; +static void writeIndent(TextStream&amp; ts, int indent)

The writeIndent method is repeated in all layer type files.  It should either be folded in o the base class or inlined in some common header file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371265</commentid>
    <comment_count>6</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-22 00:48:59 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:391
&gt; &gt; +{
&gt; 
&gt; Why not always create a ccLayerImpl every in the constructor of LayerChromium?

I don&apos;t know the correct runtime (dynamic) type in the constructor of a LayerChromium and I can&apos;t find a good way to get it since virtuals don&apos;t work in constructors.  When we have code to explicitly sync the trees we&apos;ll be constructing the ccLayerImpls lazily so it seemed OK to figure out where I need the null checks now :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371569</commentid>
    <comment_count>7</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-03-22 12:49:17 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:391
&gt; &gt; &gt; +{
&gt; &gt; 
&gt; &gt; Why not always create a ccLayerImpl every in the constructor of LayerChromium?
&gt; 
&gt; I don&apos;t know the correct runtime (dynamic) type in the constructor of a LayerChromium and I can&apos;t find a good way to get it since virtuals don&apos;t work in constructors.  When we have code to explicitly sync the trees we&apos;ll be constructing the ccLayerImpls lazily so it seemed OK to figure out where I need the null checks now :)

Are we really planning on constructing the ccLayerImpls lazily and implicitly? I was under the impression that we were going to sync the tree structure explicitly with &quot;add this child layer&quot; and &quot;remove this layer subtree&quot; changes.

(In reply to comment #4)
&gt; (From update of attachment 86402 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=86402&amp;action=review
&gt;
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:292
&gt; &gt;&gt; +void LayerChromium::updateToLayer(CCLayerImpl* layer)
&gt; &gt; 
&gt; &gt; should we be calling this commitToLayer?
&gt; 
&gt; I think this will be part of the commit step, but I&apos;m not sure about commit as a verb in this context. updateProperties..() feels more natural than commitProperties..() even though we&apos;ve been referring to this step as the commit phase in design discussions.

I&apos;m not sure about the &quot;to&quot; as a preposition in this context.  It just sounds awkward.  Maybe just updateLayer? Or alternatively pushToLayerImpl? &lt;/bikeshedding&gt;

&gt; &gt; Wonders how we can clean up this renderSurfacLayerList/layerList/worldTransform/renderLayer mess... not for this CL, but in the big picture. Maybe we should whiteboard this tomorrow? I&apos;m wondering if we should refactor [in another cl] this monster function into a few functions with smaller and better-contained side effects, even at the penalty of walking the tree a few times.
&gt; 
&gt; yeah let&apos;s try to figure this out.  the content layer update code is pretty convoluted right now to try to determine a visible region and it has issue anyway so we need to clean it up regardless of this patch.

I&apos;m pretty sure we can reasonably abstract this in a way that doesn&apos;t require multiple tree walks.  That might be premature optimization, but it seems silly to be slower if we don&apos;t have to.

&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:485
&gt; &gt;&gt; +    // RenderSurfaces and we rely on RenderSurfaces being up to date in order to paint contents we have
&gt; &gt; 
&gt; &gt; Is the state dependency here the world transforms? Or is there more?
&gt; 
&gt; world transforms and the render surface bounds (in order to test visibility).

Alpha value, for animated transparency on render surfaces?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371617</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-22 13:52:18 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:391
&gt; &gt; &gt; &gt; +{
&gt; &gt; &gt; 
&gt; &gt; &gt; Why not always create a ccLayerImpl every in the constructor of LayerChromium?
&gt; &gt; 
&gt; &gt; I don&apos;t know the correct runtime (dynamic) type in the constructor of a LayerChromium and I can&apos;t find a good way to get it since virtuals don&apos;t work in constructors.  When we have code to explicitly sync the trees we&apos;ll be constructing the ccLayerImpls lazily so it seemed OK to figure out where I need the null checks now :)
&gt; 
&gt; Are we really planning on constructing the ccLayerImpls lazily and implicitly? I was under the impression that we were going to sync the tree structure explicitly with &quot;add this child layer&quot; and &quot;remove this layer subtree&quot; changes.

It&apos;ll be explicit but as part of the commit phase and won&apos;t necessarily happen at a specific point relative to main thread operations (commit scheduling is up to the compositor side).

&gt; 
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 86402 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=86402&amp;action=review
&gt; &gt;
&gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:292
&gt; &gt; &gt;&gt; +void LayerChromium::updateToLayer(CCLayerImpl* layer)
&gt; &gt; &gt; 
&gt; &gt; &gt; should we be calling this commitToLayer?
&gt; &gt; 
&gt; &gt; I think this will be part of the commit step, but I&apos;m not sure about commit as a verb in this context. updateProperties..() feels more natural than commitProperties..() even though we&apos;ve been referring to this step as the commit phase in design discussions.
&gt; 
&gt; I&apos;m not sure about the &quot;to&quot; as a preposition in this context.  It just sounds awkward.  Maybe just updateLayer? Or alternatively pushToLayerImpl? &lt;/bikeshedding&gt;
&gt;

the callsites look like:
&lt;instance of LayerChromium&gt; -&gt; updateToLayer ( &lt;instance of CCLayerImpl&gt; )

updateLayer doesn&apos;t indicate which direction the operation is moving data to me.  pushToLayer would also work but I think the &apos;Impl&apos; is a bit redundant with the type of the parameter.  the only thing i know about prepositions is that they are fun to end sentences with.


&gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:485
&gt; &gt; &gt;&gt; +    // RenderSurfaces and we rely on RenderSurfaces being up to date in order to paint contents we have
&gt; &gt; &gt; 
&gt; &gt; &gt; Is the state dependency here the world transforms? Or is there more?
&gt; &gt; 
&gt; &gt; world transforms and the render surface bounds (in order to test visibility).
&gt; 
&gt; Alpha value, for animated transparency on render surfaces?

We don&apos;t use the alpha value when painting for content layers or the root layer currently.  The bad state dependency is because of uses of render surface stuff in the actual paintContents() call.  We&apos;ll always calculate render surfaces after doing the commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371708</commentid>
    <comment_count>9</comment_count>
      <attachid>86519</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-22 15:21:07 -0700</bug_when>
    <thetext>Created attachment 86519
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371711</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-22 15:24:45 -0700</bug_when>
    <thetext>Changes from patch 1:

*) s/XxxCCLayerImpl/CCXxxLayerImpl/g
*) avoids creating the root layer&apos;s CCLayerImpl eagerly. doing this meant cleaning up the setLayerRenderer path a bit
*) in LayerRendererChromium s/updateContentsTextureRecursive/updateCompositorResourcesRecursive/ to match the LayerChromium call


I didn&apos;t rename updateToLayer because I&apos;m not sure what to rename it to.

I didn&apos;t refactor writeIndent because I forgot...I&apos;ll do that now and upload a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371718</commentid>
    <comment_count>11</comment_count>
      <attachid>86521</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-22 15:30:05 -0700</bug_when>
    <thetext>Created attachment 86521
common writeIndent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371932</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-22 20:08:03 -0700</bug_when>
    <thetext>Sadly at this point this patch conflicts with a few other recent patches to other layer types.  I&apos;ll try to merge it up and repost and can hopefully land it before too many other invasive patches to *LayerChromiums land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372292</commentid>
    <comment_count>13</comment_count>
      <attachid>86652</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-23 11:36:37 -0700</bug_when>
    <thetext>Created attachment 86652
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372293</commentid>
    <comment_count>14</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-23 11:37:40 -0700</bug_when>
    <thetext>Merged up.  The conflicts were mainly with http://trac.webkit.org/changeset/81740 and http://trac.webkit.org/changeset/81737.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373283</commentid>
    <comment_count>15</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-24 20:02:16 -0700</bug_when>
    <thetext>ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373298</commentid>
    <comment_count>16</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-03-24 21:24:12 -0700</bug_when>
    <thetext>If Vangelis can review this I&apos;ll be happy to r+ it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373333</commentid>
    <comment_count>17</comment_count>
      <attachid>86652</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-03-24 23:10:03 -0700</bug_when>
    <thetext>Comment on attachment 86652
Patch

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

Generally looks good to me other than a couple of small comments.

&gt; Source/WebCore/ChangeLog:12
&gt; +        and moving the code from each XXXLayerChromium to XXXCCLayerImpl.  In order to render from the CCLayerImpl side all state

XXXCCLayerImpl -&gt; CCXXXLayerImpl

&gt; Source/WebCore/platform/graphics/chromium/CanvasLayerChromium.cpp:60
&gt; +void CanvasLayerChromium::updateToLayer(CCLayerImpl* layer)

Not a huge fan of the updateToLayer name.  syncCompositorLayer() or something like that maybe?

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:99
&gt; +        m_ccLayerImpl-&gt;cleanupResources();

Should we also call cleanupResources for the associated mask and replica layers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373343</commentid>
    <comment_count>18</comment_count>
      <attachid>86652</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-24 23:24:14 -0700</bug_when>
    <thetext>Comment on attachment 86652
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:12
&gt;&gt; +        and moving the code from each XXXLayerChromium to XXXCCLayerImpl.  In order to render from the CCLayerImpl side all state
&gt; 
&gt; XXXCCLayerImpl -&gt; CCXXXLayerImpl

Good catch. I&apos;ll fix before landing.

&gt;&gt; Source/WebCore/platform/graphics/chromium/CanvasLayerChromium.cpp:60
&gt;&gt; +void CanvasLayerChromium::updateToLayer(CCLayerImpl* layer)
&gt; 
&gt; Not a huge fan of the updateToLayer name.  syncCompositorLayer() or something like that maybe?

I really don&apos;t want to go another round of renames on this unless something is clearly better. syncCompositorLayer() doesn&apos;t give much information about what is going on since the word &quot;sync&quot; does not indicate which direction data is moving in and &quot;compositor&quot; and &quot;layer&quot; are implied (this is compositor code, and the function exists on and takes a layer parameter.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:99
&gt;&gt; +        m_ccLayerImpl-&gt;cleanupResources();
&gt; 
&gt; Should we also call cleanupResources for the associated mask and replica layers?

No need - we call setLayerRenderer() on the mask and replica layers explicitly which triggers a cleanupResources() call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373598</commentid>
    <comment_count>19</comment_count>
      <attachid>86652</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-03-25 10:51:49 -0700</bug_when>
    <thetext>Comment on attachment 86652
Patch

It sounds to me like this is ready to go modulo small fixes to be done upon landing. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373801</commentid>
    <comment_count>20</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-25 17:10:25 -0700</bug_when>
    <thetext>Committed r82006: &lt;http://trac.webkit.org/changeset/82006&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373819</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-25 18:13:15 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/82006 might have broken Leopard Intel Release (Tests)
The following tests are not passing:
plugins/embed-prefers-plugins-for-images.html</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86402</attachid>
            <date>2011-03-21 18:40:11 -0700</date>
            <delta_ts>2011-03-22 15:21:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56793-20110321184010.patch</filename>
            <type>text/plain</type>
            <size>84884</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE1OTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0YzJkZmNiNTQ2N2ZlYzg4
MDAwMmUzOGI0NmE3ODk1ZWVkOWUxNmI0Li5jZWU5NzUzYjZiNmUxMzA5OWQ4MGQ2ZjFjZGE2NjM3
Yzk4NTQxOTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQ3IEBACisyMDExLTAzLTIxICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBNb3ZlIGRyYXcgaW1wbGVtZW50
YXRpb25zIHRvIENDTGF5ZXJJbXBsIGZvciBldmVyeXRoaW5nIGV4Y2VwdCBjb250ZW50IGxheWVy
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY3OTMK
KworICAgICAgICBNb3ZlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGxheWVyJ3MgZHJhdygp
IGZ1bmN0aW9uIGZyb20gTGF5ZXJDaHJvbWl1bSBzdWJjbGFzc2VzIHRvIENDTGF5ZXJJbXBsIHN1
YmNsYXNzZXMgZm9yIAorICAgICAgICBhbGwgbGF5ZXIgdHlwZXMgZXhjZXB0IGNvbnRlbnQgbGF5
ZXJzLiAgVGhpcyBnZXRzIHVzIGNsb3NlciB0byBkZWNvdXBsaW5nIHRoZSBjb21wb3NpdGUgc3Rl
cCBpdHNlbGYgZnJvbSB1cGRhdGluZyB0aGUgbGF5ZXJzLgorCisgICAgICAgIFRoZSBiaWdnZXN0
IGNoYW5nZSBpbiB0aGlzIHBhdGNoIGlzIGFkZGluZyBhIHNldCBvZiBDQ0xheWVySW1wbCBzdWJj
bGFzc2VzIHRvIGltcGxlbWVudCB0aGUgZGlmZmVyZW50IGRyYXdpbmcgcm91dGluZXMKKyAgICAg
ICAgYW5kIG1vdmluZyB0aGUgY29kZSBmcm9tIGVhY2ggWFhYTGF5ZXJDaHJvbWl1bSB0byBYWFhD
Q0xheWVySW1wbC4gIEluIG9yZGVyIHRvIHJlbmRlciBmcm9tIHRoZSBDQ0xheWVySW1wbCBzaWRl
IGFsbCBzdGF0ZQorICAgICAgICBuZWVkZWQgYXQgZHJhdyB0aW1lIGFsc28gaGFzIHRvIGJlIHN5
bmNocm9uaXplZCwgd2hpY2ggaXMgcGVyZm9ybWVkIGluIHVwZGF0ZVRvTGF5ZXIoKS4KKworICAg
ICAgICBPbiB0aGUgTGF5ZXJSZW5kZXJlckNocm9taXVtIHNpZGUgdGhlcmUgYXJlIGEgZmV3IGNo
YW5nZXMuICBJJ3ZlIHNwbGl0IHRoZSB1cGRhdGVDb250ZW50cyBjYWxscyBvbiBMYXllckNocm9t
aXVtcyBpbnRvIHR3byBvcGVyYXRpb25zCisgICAgICAgIHRlbnRhdGl2ZWx5IG5hbWVkICdwYWlu
dENvbnRlbnRzSWZOZWVkZWQnIGFuZCAndXBkYXRlQ29tcG9zaXRvclJlc291cmNlcycuICBwYWlu
dENvbnRlbnRzKCkgaXMgdXNlZCBmb3IgYW55IGNvZGUgdGhhdCBjYWxscyBpbnRvIFdlYktpdCBp
biBvcmRlciB0byBnZW5lcmF0ZQorICAgICAgICBuZXcgcGl4ZWwgZGF0YS4gIEl0J3MgZXhwZWN0
ZWQgdGhhdCB0aGlzIGNhbGwgbWF5IHRha2UgYSBsb25nIHBlcmlvZCBvZiB0aW1lIGFuZCBtYXkg
aW52b2x2ZSAib2RkIiBzaWRlIGVmZmVjdHMuICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkg
aXMgdXNlZCBmb3IKKyAgICAgICAgY29kZSB0aGF0IG5lZWRzIHRvIHVwZGF0ZSB0aGUgY29tcG9z
aXRvcidzIHRleHR1cmUgZGF0YSBvciBvdGhlciBzdGF0ZS4gIEl0IGlzIG5vdCBleHBlY3RlZCB0
aGF0IHRoaXMgY2FsbGJhY2sgd2lsbCB0YWtlIGxvbmcgKHNpbmNlIGl0J3MganVzdCBpbnNlcnRp
bmcKKyAgICAgICAgY29tbWFuZHMgaW50byB0aGUgR0wgY29tbWFuZCBzdHJlYW0sIGlkZWFsbHkp
IGFuZCB0aGlzIGNhbGwgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBhY2Nlc3MgdG8gdGhlIGNvbXBvc2l0
b3IncyBjb250ZXh0LCB1bmxpa2UgcGFpbnRDb250ZW50cygpLgorCisgICAgICAgIFRoZSB1cGRh
dGVBbmREcmF3TGF5ZXJzIGN5Y2xlIG5vdyBsb29rcyBsaWtlIHRoaXM6CisgICAgICAgIDEuKSB1
cGRhdGUgdGhlIHJvb3QgY29udGVudCBsYXllcgorICAgICAgICAyLikgdXBkYXRlIHRoZSByb290
IGxheWVyIHNjcm9sbGJhcnMKKyAgICAgICAgMy4pIGZvciBlYWNoIExheWVyQ2hyb21pdW0gaW4g
dHJlZSBvcmRlcjoKKyAgICAgICAgICBhLikgZW5zdXJlIGEgQ0NMYXllckltcGwgb2YgdGhlIGNv
cnJlY3QgdHlwZSBleGlzdHMgZm9yIHRoaXMgbGF5ZXIKKyAgICAgICAgICBiLikgcHVzaCBhbGwg
ZHJhdyB0aW1lIHByb3BlcnRpZXMgZnJvbSB0aGUgTGF5ZXJDaHJvbWl1bSB0byB0aGUgQ0NMYXll
ckltcGwKKyAgICAgICAgICBjLikgY29uc3RydWN0IHRoZSBhcHByb3ByaWF0ZSBkcmF3IHRyYW5z
Zm9ybXMsIHJlbmRlciBzdXJmYWNlcyBhbmQgcmVuZGVyIHN1cmZhY2Ugei1vcmRlciBzdWJsYXll
ciBsaXN0cworICAgICAgICA0LikgZm9yIGVhY2ggTGF5ZXJDaHJvbWl1bSBpbiB0cmVlIG9yZGVy
LCBwYWludCB0aGUgbGF5ZXIncyBjb250ZW50cworICAgICAgICA1LikgZm9yIGVhY2ggTGF5ZXJD
aHJvbWl1bSBpbiB0cmVlIG9yZGVyLCB1cGRhdGUgdGhlIGxheWVyJ3MgdGV4dHVyZXMKKyAgICAg
ICAgNi4pIGRyYXcgdGhlIHJvb3QgbGF5ZXIgYW5kIGl0cyBzY3JvbGxiYXJzCisgICAgICAgIDcu
KSBmb3IgZWFjaCBDQ0xheWVySW1wbCBpbiByZW5kZXIgc3VyZmFjZSBvcmRlciwgZHJhdyBpdAor
CisgICAgICAgIFN0ZXAgMyBzaG91bGQgcmVhbGx5IGhhcHBlbiBhZnRlciBzdGVwIDUsIGJ1dCBy
aWdodCBub3cgcGFpbnRpbmcgYSBjb250ZW50IGxheWVyIHJlcXVpcmVzIGtub3dsZWRnZSBvZiB0
aGUgcmVuZGVyIHN1cmZhY2UgcHJvcGVydGllcyBhbmQgZHJhdyB0cmFuc2Zvcm1zCisgICAgICAg
IGluIG9yZGVyIHRvIHBhaW50LiAgV2UgYWxzbyBjdXJyZW50bHkgcHVzaCBsYXllciBwcm9wZXJ0
aWVzIGZyb20gTGF5ZXJDaHJvbWl1bS0+Q0NMYXllckltcGxzIHR3aWNlIG5vdyAtIG9uY2UgYXQg
My5iIGFuZCBvbmNlIGFmdGVyIDUgc28gd2UgY2FuIHBpY2sKKyAgICAgICAgdXAgYW55IHRleHR1
cmUgdXBkYXRlcy4gIFRoaXMgd2lsbCBhbHNvIGdldCBmaXhlZCB3aGVuIHRoZSBwYWludCBkZXBl
bmRlbmN5IG9uIHJlbmRlciBzdXJmYWNlcyBpcyByZXNvbHZlZC4KKworICAgICAgICBJIGhhdmVu
J3QgbW9kaWZpZWQgdGhlIHJvb3QgbGF5ZXIgb3IgY29udGVudCBsYXllcnMgaW4gb3JkZXIgdG8g
bWluaW1pemUgY29uZmxpY3RzIHdpdGggdGhlIG90aGVyIHBlbmRpbmcgd29yayBpbiB0aGF0IGFy
ZWEuCisKKyAgICAgICAgVGVzdHM6IGNvbXBvc2l0aW5nLworCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OnVw
ZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVG9MYXllcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpyZXF1aXJlc0NsaXBwZWRVcGRhdGVS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRl
bnRzSWZEaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJD
aHJvbWl1bTo6YmluZENvbnRlbnRzVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJDaHJvbWl1bTo6c2V0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
Ojp1cGRhdGVUb0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmR1bXBM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbElm
TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmNjTGF5ZXJJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmxheWVyUmVuZGVyZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFJvb3RMYXll
cik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3Bl
cnRpZXNBbmRSZW5kZXJTdXJmYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OnBhaW50Q29udGVudHNSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9i
amVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpj
YW52YXNMYXllclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpwbHVnaW5MYXllclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp2aWRlb0xheWVyUkdCQVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjp2aWRlb0xheWVyWVVWUHJvZ3JhbSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpzZXRUZXh0dXJlSWQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVG9MYXllcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5oOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6dGV4dHVyZUlkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVUb0xh
eWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hy
b21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVy
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjp1cGRh
dGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1w
bDo6ZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllcklt
cGw6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SW1wbDo6c2V0QW5jaG9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNl
dEFuY2hvclBvaW50Wik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0TWFza3NU
b0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0T3BhY2l0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0UG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckltcGw6OnNldFByZXNlcnZlczNEKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJJbXBsOjpzZXRTdWJsYXllclRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVySW1wbDo6c2V0VHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DYW52YXNDQ0xheWVySW1wbC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwLgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzQ0NMYXllckltcGw6OkNhbnZhc0NDTGF5ZXJJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc0NDTGF5ZXJJbXBsOjp+Q2FudmFzQ0NMYXllckltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQ0NMYXllckltcGw6OmRyYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6d3JpdGVJbmRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQ0NMYXllckltcGw6
OmR1bXBMYXllclByb3BlcnRpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NhbnZhc0NDTGF5ZXJJbXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uaC4KKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc0NDTGF5ZXJJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzQ0NMYXllckltcGw6OnNldFRleHR1cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNDQ0xheWVySW1wbDo6c2V0UHJlbXVsdGlwbGllZEFscGhhKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9QbHVnaW5DQ0xheWVySW1wbC5jcHA6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hy
b21pdW0uY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luQ0NMYXllckltcGw6OlBsdWdpbkND
TGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkNDTGF5ZXJJbXBsOjp+UGx1Z2lu
Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luQ0NMYXllckltcGw6OmRyYXcp
OgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVJbmRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luQ0NMYXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL1BsdWdpbkNDTGF5ZXJJbXBsLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21p
dW0uaC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkNDTGF5ZXJJbXBsOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luQ0NMYXllckltcGw6OnNldFRleHR1cmVJZCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvVmlkZW9DQ0xheWVySW1wbC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9DQ0xheWVySW1wbDo6VmlkZW9DQ0xheWVySW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0NDTGF5ZXJJbXBsOjp+VmlkZW9DQ0xheWVySW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0NDTGF5ZXJJbXBsOjpzZXRUZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlZpZGVvQ0NMYXllckltcGw6OnNldFRleHR1cmVTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlZpZGVvQ0NMYXllckltcGw6OnNldEZyYW1lU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpWaWRlb0NDTGF5ZXJJbXBsOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVv
Q0NMYXllckltcGw6OmRyYXdZVVYpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9DQ0xheWVySW1w
bDo6ZHJhd1JHQkEpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVJbmRlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6VmlkZW9DQ0xheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvVmlkZW9DQ0xheWVySW1wbC5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvQ0NMYXllckltcGw6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpWaWRlb0NDTGF5ZXJJbXBsOjpzZXRTa2lwc0RyYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6VmlkZW9DQ0xheWVySW1wbDo6c2V0RnJhbWVGb3JtYXQpOgorCiAyMDExLTAzLTIxICBB
bmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBU
b3IgQXJuZSBWZXN0YsO4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDQwNjRlMDU3YTI5Y2JiMTY3M2Qy
YWE5ZDc4Nzk3YzNjYTk5NjAzNGQuLjE2ODVjMDJjNjY1NzI0YWVhMGZlNTMzNDhkOGJkNjQxOTY5
MDZkODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQxODYsNiArNDE4NiwxMiBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DYW52YXND
Q0xheWVySW1wbC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NhbnZhc0NDTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL1BsdWdpbkNDTGF5ZXJJbXBsLmNwcCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvUGx1Z2luQ0NMYXllckltcGwuaCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvVmlkZW9DQ0xheWVySW1wbC5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL1ZpZGVvQ0NMYXllcklt
cGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3Jt
RGF0YUNvY29hLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9lZmwvRm9udEVm
bC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9JY29uRWZsLmNwcCcs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXMyRExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAppbmRleCBhZDk2MWFhNmUzZGQz
ZGM1ZGE3MGY4YTNlNjRhZWFlMjI1MWIzMTI4Li40Y2IxMTlhNGQ3ZThkNzEzNjk2NTliZDIwZmRh
NWYxMWRkNTAxYzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKQEAg
LTU2LDcgKzU2LDcgQEAgQ2FudmFzMkRMYXllckNocm9taXVtOjp+Q2FudmFzMkRMYXllckNocm9t
aXVtKCkKICAgICAgICAgbGF5ZXJSZW5kZXJlckNvbnRleHQoKS0+ZGVsZXRlVGV4dHVyZShtX3Rl
eHR1cmVJZCk7CiB9CiAKLXZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50
c0lmRGlydHkoKQordm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JS
ZXNvdXJjZXMoKQogewogICAgIGlmICghbV9jb250ZW50c0RpcnR5IHx8ICFtX2RyYXdpbmdCdWZm
ZXIpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgKaW5k
ZXggYTE0Y2I5ODNhNWJkMTg1MzViNGE2NDQ3N2ZlNTA0ZWU4ZTJjNDQxMy4uODFiMTE4YzViNWRm
ZTljMzFhMWViMjQ5ZDU5OTJkYjQyNmVkMjA5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNo
cm9taXVtLmgKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENhbnZhczJETGF5ZXJDaHJvbWl1bT4gY3JlYXRlKERyYXdpbmdCdWZmZXIqLCBHcmFwaGljc0xh
eWVyQ2hyb21pdW0qIG93bmVyKTsKICAgICB2aXJ0dWFsIH5DYW52YXMyRExheWVyQ2hyb21pdW0o
KTsKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50c0lmRGlydHkoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOwogCiAgICAgdm9pZCBzZXRUZXh0dXJl
Q2hhbmdlZCgpOwogICAgIHVuc2lnbmVkIHRleHR1cmVJZCgpIGNvbnN0OwpAQCAtNTUsOCArNTUs
NiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IENhbnZhczJETGF5ZXJDaHJvbWl1
bShEcmF3aW5nQnVmZmVyKiwgR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CiAgICAgRHJh
d2luZ0J1ZmZlciogbV9kcmF3aW5nQnVmZmVyOwotCi0gICAgc3RhdGljIHVuc2lnbmVkIG1fc2hh
ZGVyUHJvZ3JhbUlkOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcApp
bmRleCAwMjY0ODY4OTkyNGMxNjA3MTVmZjRjMmI5YzRmODc0ODFmZjhhMTQyLi40YWI2YjQxNzY0
M2U1ZjE4NDk0ZTYzZjc1NzBiZTM3N2I2N2ZhYmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNo
cm9taXVtLmNwcApAQCAtNDAsOCArNDAsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVu
c2lnbmVkIENhbnZhc0xheWVyQ2hyb21pdW06Om1fc2hhZGVyUHJvZ3JhbUlkID0gMDsKLQogQ2Fu
dmFzTGF5ZXJDaHJvbWl1bTo6Q2FudmFzTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21p
dW0qIG93bmVyKQogICAgIDogTGF5ZXJDaHJvbWl1bShvd25lcikKICAgICAsIG1fdGV4dHVyZUNo
YW5nZWQodHJ1ZSkKQEAgLTU0LDIyICs1MiwxOCBAQCBDYW52YXNMYXllckNocm9taXVtOjp+Q2Fu
dmFzTGF5ZXJDaHJvbWl1bSgpCiB7CiB9CiAKLXZvaWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6ZHJh
dygpCitQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBDYW52YXNMYXllckNocm9taXVtOjpjcmVhdGVD
Q0xheWVySW1wbCgpCiB7Ci0gICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7Ci0gICAgY29uc3Qg
Q2FudmFzTGF5ZXJDaHJvbWl1bTo6UHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXIoKS0+
Y2FudmFzTGF5ZXJQcm9ncmFtKCk7Ci0gICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5p
dGlhbGl6ZWQoKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRl
cmVyQ29udGV4dCgpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5i
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpKTsK
LSAgICBHQzNEZW51bSBzZmFjdG9yID0gbV9wcmVtdWx0aXBsaWVkQWxwaGEgPyBHcmFwaGljc0Nv
bnRleHQzRDo6T05FIDogR3JhcGhpY3NDb250ZXh0M0Q6OlNSQ19BTFBIQTsKLSAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+YmxlbmRGdW5jKHNmYWN0b3IsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVf
TUlOVVNfU1JDX0FMUEhBKSk7Ci0gICAgbGF5ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIocHJvZ3Jh
bS0+cHJvZ3JhbSgpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHByb2dy
YW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKLSAgICBkcmF3VGV4
dHVyZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCBj
Y0xheWVySW1wbCgpLT5kcmF3VHJhbnNmb3JtKCksCi0gICAgICAgICAgICAgICAgICAgICBib3Vu
ZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgY2NMYXllckltcGwoKS0+ZHJhd09wYWNp
dHkoKSwKLSAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJp
eExvY2F0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT5mcmFnbWVudFNoYWRl
cigpLmFscGhhTG9jYXRpb24oKSk7CisgICAgcmV0dXJuIENhbnZhc0NDTGF5ZXJJbXBsOjpjcmVh
dGUodGhpcyk7Cit9CisKK3ZvaWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVG9MYXllcihD
Q0xheWVySW1wbCogbGF5ZXIpCit7CisgICAgTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVG9MYXllcihs
YXllcik7CisKKyAgICBDYW52YXNDQ0xheWVySW1wbCogY2FudmFzTGF5ZXIgPSBzdGF0aWNfY2Fz
dDxDYW52YXNDQ0xheWVySW1wbCo+KGxheWVyKTsKKyAgICBjYW52YXNMYXllci0+c2V0VGV4dHVy
ZUlkKG1fdGV4dHVyZUlkKTsKKyAgICBjYW52YXNMYXllci0+c2V0UHJlbXVsdGlwbGllZEFscGhh
KG1fcHJlbXVsdGlwbGllZEFscGhhKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1
bS5oCmluZGV4IGVkM2EwNmY4NzhkNDUzZjBjMmUzMjRkY2JjNDFmNjc4MWY5OTNkYTIuLjUyNDk1
ZmNkYjk5YWVlNDM0OTdlNTEyODg5MTM5NzkzMTgzOTM5MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXll
ckNocm9taXVtLmgKQEAgLTQzLDkgKzQzLDkgQEAgY2xhc3MgQ2FudmFzTGF5ZXJDaHJvbWl1bSA6
IHB1YmxpYyBMYXllckNocm9taXVtIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5DYW52YXNMYXll
ckNocm9taXVtKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhdygpOworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlQ0NMYXllckltcGwoKTsKIAotICAgIHR5cGVkZWYg
UHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4LCBGcmFnbWVudFNoYWRlclJHQkFUZXhG
bGlwQWxwaGE+IFByb2dyYW07CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRvTGF5ZXIoQ0NMYXll
ckltcGwqKTsKIAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENhbnZhc0xheWVyQ2hyb21pdW0o
R3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CkBAIC01NSw5ICs1NSw2IEBAIHByb3RlY3Rl
ZDoKICAgICBib29sIG1fdGV4dHVyZUNoYW5nZWQ7CiAgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7
CiAgICAgYm9vbCBtX3ByZW11bHRpcGxpZWRBbHBoYTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMg
dW5zaWduZWQgbV9zaGFkZXJQcm9ncmFtSWQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5jcHAKaW5kZXggZmM4NTdmMTZhNjdlNjIwN2E4YTgxMmQ4MWJjZGM4MmI1NTIz
MDg4My4uNGVhOWM5MmUxY2FhZDVlZmVjMzNmMmQ5OTEyNjYxZmJmNDAxNTlhNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtNjYsNyArNjYsNyBAQCB2b2lkIENvbnRl
bnRMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKICAgICBtX2NvbnRlbnRzVGV4dHVy
ZS5jbGVhcigpOwogfQogCi1ib29sIENvbnRlbnRMYXllckNocm9taXVtOjpyZXF1aXJlc0NsaXBw
ZWRVcGRhdGVSZWN0KCkgY29uc3QKK2Jvb2wgQ29udGVudExheWVyQ2hyb21pdW06OnJlcXVpcmVz
Q2xpcHBlZFVwZGF0ZVJlY3QoKQogewogICAgIC8vIFRvIGF2b2lkIGFsbG9jYXRpbmcgZXhjZXNz
aXZlbHkgbGFyZ2UgdGV4dHVyZXMsIHN3aXRjaCBpbnRvICJsYXJnZSBsYXllciBtb2RlIiBpZgog
ICAgIC8vIG9uZSBvZiB0aGUgbGF5ZXIncyBkaW1lbnNpb25zIGlzIGxhcmdlciB0aGFuIDIwMDAg
cGl4ZWxzIG9yIHRoZSBzaXplIG9mCkBAIC03Nyw3ICs3Nyw3IEBAIGJvb2wgQ29udGVudExheWVy
Q2hyb21pdW06OnJlcXVpcmVzQ2xpcHBlZFVwZGF0ZVJlY3QoKSBjb25zdAogICAgICAgICAgICAg
fHwgIWxheWVyUmVuZGVyZXIoKS0+Y2hlY2tUZXh0dXJlU2l6ZShib3VuZHMoKSkpOwogfQogCi12
b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQordm9pZCBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQogewogICAgIFJlbmRl
ckxheWVyQmFja2luZyogYmFja2luZyA9IHN0YXRpY19jYXN0PFJlbmRlckxheWVyQmFja2luZyo+
KG1fb3duZXItPmNsaWVudCgpKTsKICAgICBpZiAoIWJhY2tpbmcgfHwgYmFja2luZy0+cGFpbnRp
bmdHb2VzVG9XaW5kb3coKSkKQEAgLTI2OSw2ICsyNjksMTEgQEAgdm9pZCBDb250ZW50TGF5ZXJD
aHJvbWl1bTo6ZHJhdygpCiAgICAgdW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCk7CiB9CiAKK3Zv
aWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKQorewor
ICAgIHVwZGF0ZVRleHR1cmVJZk5lZWRlZCgpOworfQorCiB2b2lkIENvbnRlbnRMYXllckNocm9t
aXVtOjp1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKQogewogICAgIGlmICghbV9za2lwc0RyYXcg
JiYgbV9jb250ZW50c1RleHR1cmUpCkBAIC0yNzcsOCArMjgyLDYgQEAgdm9pZCBDb250ZW50TGF5
ZXJDaHJvbWl1bTo6dW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCkKIAogdm9pZCBDb250ZW50TGF5
ZXJDaHJvbWl1bTo6YmluZENvbnRlbnRzVGV4dHVyZSgpCiB7Ci0gICAgdXBkYXRlVGV4dHVyZUlm
TmVlZGVkKCk7Ci0KICAgICBpZiAoIW1fc2tpcHNEcmF3ICYmIG1fY29udGVudHNUZXh0dXJlKQog
ICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZS0+YmluZFRleHR1cmUoKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNo
cm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250
ZW50TGF5ZXJDaHJvbWl1bS5oCmluZGV4IDYyYmY5ZDFlMmM4NmNhYzU4YTJmYWJhOWMyMjBmZDM4
NDUwYTI4YzEuLmNmMjk2YWI5MDdkNWE3MWNhYTE4ZTRhNTVlMmNkMTgzNzc4YzRiMWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaApAQCAtNTAsNyArNTAsOCBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIH5Db250ZW50TGF5ZXJDaHJvbWl1bSgpOwogCi0gICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRz
SWZEaXJ0eSgpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCk7
CiAgICAgdmlydHVhbCB2b2lkIHVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpOwogICAgIHZpcnR1
YWwgdm9pZCBiaW5kQ29udGVudHNUZXh0dXJlKCk7CiAKQEAgLTYzLDcgKzY0LDcgQEAgcHJvdGVj
dGVkOgogICAgIGV4cGxpY2l0IENvbnRlbnRMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bSogb3duZXIpOwogCiAgICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKLSAg
ICBib29sIHJlcXVpcmVzQ2xpcHBlZFVwZGF0ZVJlY3QoKSBjb25zdDsKKyAgICBib29sIHJlcXVp
cmVzQ2xpcHBlZFVwZGF0ZVJlY3QoKTsKICAgICB2b2lkIHJlc2l6ZVVwbG9hZEJ1ZmZlcihjb25z
dCBJbnRTaXplJik7CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5n
KCkgY29uc3QgeyByZXR1cm4gIkNvbnRlbnRMYXllciI7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hy
b21pdW0uY3BwCmluZGV4IDdjNDIzNjZjZGYwYjUzNWNmM2M1YjI4MDE5MTIzYmNmNTQ3ZjhlYzcu
LjYwYzEzMzJkZjA3MjBjZjAzMmQ0ZTg3ZWQ5YWNlMzg1NWNiMDgyNGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VMYXllckNocm9taXVtLmNwcApAQCAtNjAsNyArNjAsNyBAQCB2b2lkIEltYWdlTGF5ZXJDaHJv
bWl1bTo6c2V0Q29udGVudHMoSW1hZ2UqIGNvbnRlbnRzKQogICAgIHNldE5lZWRzRGlzcGxheSgp
OwogfQogCi12b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KCkK
K3ZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCiB7CiAgICAg
QVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CiAKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBJbWFnZUxh
eWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpCiAgICAgaWYgKHJlcXVpcmVzQ2xp
cHBlZFVwZGF0ZVJlY3QoKSkgewogICAgICAgICAvLyBVc2UgdGhlIGJhc2UgdmVyc2lvbiBvZiB1
cGRhdGVDb250ZW50cyB3aGljaCBkcmF3cyBhIHN1YnNldCBvZiB0aGUKICAgICAgICAgLy8gaW1h
Z2UgdG8gYSBiaXRtYXAsIGFzIHRoZSBwaXhlbCBjb250ZW50cyBjYW4ndCBiZSB1cGxvYWRlZCBk
aXJlY3RseS4KLSAgICAgICAgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZE
aXJ0eSgpOworICAgICAgICBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGly
dHkoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0u
aAppbmRleCBjYzkwNjRkMmNhZTg3NzFlNjlhMTdiNmU4Y2E5NmIxZDE2MjRiZjNjLi42YWRkYWJj
ODRmMDNlZGJiNWJlNmI5Y2U5Nzc0MDA2Y2EwYWU4MzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hy
b21pdW0uaApAQCAtNTAsNyArNTAsNyBAQCBjbGFzcyBJbWFnZUxheWVyQ2hyb21pdW0gOiBwdWJs
aWMgQ29udGVudExheWVyQ2hyb21pdW0gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEltYWdlTGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIg
PSAwKTsKIAotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50c0lmRGlydHkoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoKTsKICAgICB2aXJ0dWFsIGJvb2wgZHJh
d3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50czsgfQogCiAgICAgdm9pZCBzZXRD
b250ZW50cyhJbWFnZSogaW1hZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCBmYTc5MGY5
OTkzYWM5YTI1NjJjMTQzYmE5YzY0ZDE1NjJhZDdlOWQ0Li5lMDZiMzczYmFjODA5MDIxYzE2MjZm
OTI5NzhiMmYwYjA4MDlhMzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtNjIsNiArNjIs
NyBAQCBMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSog
b3duZXIpCiAgICAgOiBtX293bmVyKG93bmVyKQogICAgICwgbV9jb250ZW50c0RpcnR5KGZhbHNl
KQogICAgICwgbV9tYXNrTGF5ZXIoMCkKKyAgICAsIG1fY2NMYXllckltcGwoMCkKICAgICAsIG1f
c3VwZXJsYXllcigwKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fZGVidWdJRChzX25leHRMYXll
ckRlYnVnSUQrKykKQEAgLTc4LDcgKzc5LDYgQEAgTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1
bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQogICAgICwgbV9nZW9tZXRyeUZsaXBwZWQo
ZmFsc2UpCiAgICAgLCBtX25lZWRzRGlzcGxheU9uQm91bmRzQ2hhbmdlKGZhbHNlKQogICAgICwg
bV9kb3VibGVTaWRlZCh0cnVlKQotICAgICwgbV9jY0xheWVySW1wbChDQ0xheWVySW1wbDo6Y3Jl
YXRlKHRoaXMpKQogICAgICwgbV9yZXBsaWNhTGF5ZXIoMCkKIHsKIH0KQEAgLTk1LDcgKzk1LDgg
QEAgTGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0oKQogCiB2b2lkIExheWVyQ2hyb21pdW06
OmNsZWFudXBSZXNvdXJjZXMoKQogewotICAgIG1fY2NMYXllckltcGwtPmNsZWFudXBSZXNvdXJj
ZXMoKTsKKyAgICBpZiAobV9jY0xheWVySW1wbCkKKyAgICAgICAgbV9jY0xheWVySW1wbC0+Y2xl
YW51cFJlc291cmNlcygpOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVy
ZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiByZW5kZXJlcikKQEAgLTI0MSw3ICsyNDIsNiBAQCBM
YXllckNocm9taXVtKiBMYXllckNocm9taXVtOjpzdXBlcmxheWVyKCkgY29uc3QKIHZvaWQgTGF5
ZXJDaHJvbWl1bTo6c2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgbV9uYW1lID0g
bmFtZTsKLSAgICBtX2NjTGF5ZXJJbXBsLT5zZXROYW1lKG5hbWUpOwogfQogCiB2b2lkIExheWVy
Q2hyb21pdW06OnNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCkKQEAg
LTI4OSw2ICsyODksMjYgQEAgdm9pZCBMYXllckNocm9taXVtOjp0b0dMTWF0cml4KGZsb2F0KiBm
bGF0dGVuZWQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogICAgIGZsYXR0ZW5lZFsx
NV0gPSBtLm00NCgpOwogfQogCit2b2lkIExheWVyQ2hyb21pdW06OnVwZGF0ZVRvTGF5ZXIoQ0NM
YXllckltcGwqIGxheWVyKQoreworICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChtX2FuY2hvclBv
aW50KTsKKyAgICBsYXllci0+c2V0QW5jaG9yUG9pbnRaKG1fYW5jaG9yUG9pbnRaKTsKKyAgICBs
YXllci0+c2V0Qm91bmRzKG1fYm91bmRzKTsKKyAgICBsYXllci0+c2V0RG91YmxlU2lkZWQobV9k
b3VibGVTaWRlZCk7CisgICAgbGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMobV9tYXNrc1RvQm91bmRz
KTsKKyAgICBsYXllci0+c2V0TmFtZShtX25hbWUpOworICAgIGxheWVyLT5zZXRPcGFjaXR5KG1f
b3BhY2l0eSk7CisgICAgbGF5ZXItPnNldFBvc2l0aW9uKG1fcG9zaXRpb24pOworICAgIGxheWVy
LT5zZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCgpKTsKKyAgICBsYXllci0+c2V0U3VibGF5ZXJU
cmFuc2Zvcm0obV9zdWJsYXllclRyYW5zZm9ybSk7CisgICAgbGF5ZXItPnNldFRyYW5zZm9ybSht
X3RyYW5zZm9ybSk7CisKKyAgICBpZiAobWFza0xheWVyKCkpCisgICAgICAgIG1hc2tMYXllcigp
LT51cGRhdGVUb0xheWVyKGxheWVyLT5tYXNrTGF5ZXIoKSk7CisgICAgaWYgKHJlcGxpY2FMYXll
cigpKQorICAgICAgICByZXBsaWNhTGF5ZXIoKS0+dXBkYXRlVG9MYXllcihsYXllci0+cmVwbGlj
YUxheWVyKCkpOworfQorCiBHcmFwaGljc0NvbnRleHQzRCogTGF5ZXJDaHJvbWl1bTo6bGF5ZXJS
ZW5kZXJlckNvbnRleHQoKSBjb25zdAogewogICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOwpA
QCAtMzM1LDcgKzM1NSw4IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHVtcExheWVyKFRleHRTdHJl
YW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAogICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwog
ICAgIHRzIDw8IGxheWVyVHlwZUFzU3RyaW5nKCkgPDwgIigiIDw8IG1fbmFtZSA8PCAiKVxuIjsK
ICAgICBkdW1wTGF5ZXJQcm9wZXJ0aWVzKHRzLCBpbmRlbnQrMik7Ci0gICAgbV9jY0xheWVySW1w
bC0+ZHVtcExheWVyUHJvcGVydGllcyh0cywgaW5kZW50KzIpOworICAgIGlmIChtX2NjTGF5ZXJJ
bXBsKQorICAgICAgICBtX2NjTGF5ZXJJbXBsLT5kdW1wTGF5ZXJQcm9wZXJ0aWVzKHRzLCBpbmRl
bnQrMik7CiAgICAgaWYgKG1fcmVwbGljYUxheWVyKSB7CiAgICAgICAgIHdyaXRlSW5kZW50KHRz
LCBpbmRlbnQrMik7CiAgICAgICAgIHRzIDw8ICJSZXBsaWNhOlxuIjsKQEAgLTM2MSw2ICszODIs
MjIgQEAgdm9pZCBMYXllckNocm9taXVtOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0m
IHRzLCBpbnQgaW5kZW50KSBjb25zdAogCiB9CiAKK1Bhc3NSZWZQdHI8Q0NMYXllckltcGw+IExh
eWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkKK3sKKyAgICByZXR1cm4gQ0NMYXllcklt
cGw6OmNyZWF0ZSh0aGlzKTsKK30KKwordm9pZCBMYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVy
SW1wbElmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fY2NMYXllckltcGwpCisgICAgICAgIG1fY2NM
YXllckltcGwgPSBjcmVhdGVDQ0xheWVySW1wbCgpOworfQorCitDQ0xheWVySW1wbCogTGF5ZXJD
aHJvbWl1bTo6Y2NMYXllckltcGwoKQoreworICAgIHJldHVybiBtX2NjTGF5ZXJJbXBsLmdldCgp
OworfQorCiAvLyBCZWdpbiBjYWxscyB0aGF0IGZvcndhcmQgdG8gdGhlIENDTGF5ZXJJbXBsLgog
Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gVGhl
c2UgZXhpc3RzIGp1c3QgZm9yIGRlYnVnZ2luZyAodmlhIGRyYXdEZWJ1Z0JvcmRlcigpKS4KQEAg
LTM3MCwyNSArNDA3LDE1IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0Qm9yZGVyQ29sb3IoY29u
c3QgQ29sb3ImIGNvbG9yKQogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLUNvbG9yIExheWVy
Q2hyb21pdW06OmJvcmRlckNvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jY0xheWVySW1w
bC0+ZGVidWdCb3JkZXJDb2xvcigpOwotfQotCiB2b2lkIExheWVyQ2hyb21pdW06OnNldEJvcmRl
cldpZHRoKGZsb2F0IHdpZHRoKQogewogICAgIG1fY2NMYXllckltcGwtPnNldERlYnVnQm9yZGVy
V2lkdGgod2lkdGgpOwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLWZsb2F0IExheWVyQ2hy
b21pdW06OmJvcmRlcldpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jY0xheWVySW1wbC0+
ZGVidWdCb3JkZXJXaWR0aCgpOwotfQotCiBMYXllclJlbmRlcmVyQ2hyb21pdW0qIExheWVyQ2hy
b21pdW06OmxheWVyUmVuZGVyZXIoKSBjb25zdAogewotICAgIHJldHVybiBtX2NjTGF5ZXJJbXBs
LT5sYXllclJlbmRlcmVyKCk7CisgICAgcmV0dXJuIG1fY2NMYXllckltcGwgPyBtX2NjTGF5ZXJJ
bXBsLT5sYXllclJlbmRlcmVyKCkgOiAwOwogfQogCiAvLyA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggZTlkOWUxZmJk
MDQ0MTNjNGE2MDRiNzBhMmUwN2U4ODBhMGYyZGZkMy4uMmU0OGI5YzcyYjEzNzU0NjkxYjI1MmFl
NmQ5NDc3MTRmY2JkZGQ4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTU2LDE0ICsxNTYsMTQg
QEAgcHVibGljOgogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyB0eXBpY2FsbHkgbmVlZCB0byBiZSBv
dmVyd3JpdHRlbiBieSBkZXJpdmVkIGNsYXNzZXMuCiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29u
dGVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNv
bnRlbnRzSWZEaXJ0eSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0
eSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkgeyB9
CiAgICAgdmlydHVhbCB2b2lkIHVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpIHsgfQogICAgIHZp
cnR1YWwgdm9pZCBiaW5kQ29udGVudHNUZXh0dXJlKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRy
YXcoKSB7IH0KIAogICAgIC8vIFRoZXNlIGV4aXN0cyBqdXN0IGZvciBkZWJ1Z2dpbmcgKHZpYSBk
cmF3RGVidWdCb3JkZXIoKSkuCiAgICAgdm9pZCBzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xvciYp
OwotICAgIENvbG9yIGJvcmRlckNvbG9yKCkgY29uc3Q7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAg
aW50IGRlYnVnSUQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnSUQ7IH0KQEAgLTE3MywxNiArMTcz
LDE3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgbGF5ZXJUcmVlQXNUZXh0KCkgY29uc3Q7CiAKICAg
ICB2b2lkIHNldEJvcmRlcldpZHRoKGZsb2F0KTsKLSAgICBmbG9hdCBib3JkZXJXaWR0aCgpIGNv
bnN0OwogCiAgICAgLy8gRXZlcnl0aGluZyBmcm9tIGhlcmUgZG93biBpbiB0aGUgcHVibGljIHNl
Y3Rpb24gd2lsbCBtb3ZlIHRvIENDTGF5ZXJJbXBsLgotCi0gICAgQ0NMYXllckltcGwqIGNjTGF5
ZXJJbXBsKCkgY29uc3QgeyByZXR1cm4gbV9jY0xheWVySW1wbC5nZXQoKTsgfQorICAgIENDTGF5
ZXJJbXBsKiBjY0xheWVySW1wbCgpOworICAgIHZvaWQgY3JlYXRlQ0NMYXllckltcGxJZk5lZWRl
ZCgpOwogCiAgICAgc3RhdGljIHZvaWQgZHJhd1RleHR1cmVkUXVhZChHcmFwaGljc0NvbnRleHQz
RCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwcm9qZWN0aW9uTWF0cml4LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJNYXRyaXgsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBvcGFjaXR5LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1hdHJpeExvY2F0aW9uLCBpbnQgYWxw
aGFMb2NhdGlvbik7CiAKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVG9MYXllcihDQ0xheWVySW1w
bCopOworCiAgICAgLy8gQmVnaW4gY2FsbHMgdGhhdCBmb3J3YXJkIHRvIHRoZSBDQ0xheWVySW1w
bC4KICAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIoKSBjb25zdDsKICAg
ICAvLyBFbmQgY2FsbHMgdGhhdCBmb3J3YXJkIHRvIHRoZSBDQ0xheWVySW1wbC4KQEAgLTIxNyw2
ICsyMTgsMTEgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3Bvc2l0
aW9uQXR0cmliTG9jYXRpb247CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfdGV4Q29vcmRB
dHRyaWJMb2NhdGlvbjsKIAorICAgIC8vIENvbnN0cnVjdHMgYSBDQ0xheWVySW1wbCBvZiB0aGUg
Y29ycmVjdCBydW50aW1lIHR5cGUgZm9yIHRoaXMgTGF5ZXJDaHJvbWl1bSB0eXBlLgorICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlQ0NMYXllckltcGwoKTsKKworICAg
IC8vIEZvciBub3csIHRoZSBMYXllckNocm9taXVtIGRpcmVjdGx5IG93bnMgaXRzIENDTGF5ZXJJ
bXBsLgorICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9jY0xheWVySW1wbDsKIHByaXZhdGU6CiAg
ICAgdm9pZCBzZXROZWVkc0NvbW1pdCgpOwogCkBAIC0yNjAsOCArMjY2LDYgQEAgcHJpdmF0ZToK
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3N1YmxheWVyVHJhbnNmb3JtOwogCiAgICAgRmxv
YXRSZWN0IG1fZnJhbWU7Ci0gICAgLy8gRm9yIG5vdywgdGhlIExheWVyQ2hyb21pdW0gZGlyZWN0
bHkgb3ducyBpdHMgQ0NMYXllckltcGwuCi0gICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX2NjTGF5
ZXJJbXBsOwogCiAgICAgLy8gUmVwbGljYSBsYXllciB1c2VkIGZvciByZWZsZWN0aW9ucy4KICAg
ICBMYXllckNocm9taXVtKiBtX3JlcGxpY2FMYXllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwCmluZGV4IDNlMzlkODdiNmVhNDMzMmZkOTg2ZjBjMGQ5YzI3NGUzOGZlZDBl
MzQuLjJmMWRkM2MxNjQxNGIzNzdlOWRkMWFmOGYwZjg5OWFlMDg3N2JjYzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtMzAyLDcgKzMwMiw5IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMoVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJl
bmRlclN1cmZhY2VMYXllCiAgICAgLy8gY29uY2VwdCBvZiBhIGxhcmdlIGNvbnRlbnQgbGF5ZXIu
CiAgICAgdXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKG1fcm9vdExheWVyLmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbV9kZWZhdWx0UmVuZGVy
U3VyZmFjZS0+bV9sYXllckxpc3QpOwogCi0gICAgdXBkYXRlQ29udGVudHNSZWN1cnNpdmUobV9y
b290TGF5ZXIuZ2V0KCkpOworICAgIHBhaW50Q29udGVudHNSZWN1cnNpdmUobV9yb290TGF5ZXIu
Z2V0KCkpOworCisgICAgdXBkYXRlQ29udGVudHNUZXh0dXJlUmVjdXJzaXZlKG1fcm9vdExheWVy
LmdldCgpKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29u
c3QgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCkBAIC0zOTks
OCArNDAxLDEwIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVzZW50KCkKIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9t
aXVtPiBsYXllcikKIHsKICAgICBtX3Jvb3RMYXllciA9IGxheWVyOwotICAgIGlmIChtX3Jvb3RM
YXllcikKKyAgICBpZiAobV9yb290TGF5ZXIpIHsKKyAgICAgICAgbV9yb290TGF5ZXItPmNyZWF0
ZUNDTGF5ZXJJbXBsSWZOZWVkZWQoKTsKICAgICAgICAgbV9yb290TGF5ZXItPnNldExheWVyUmVu
ZGVyZXIodGhpcyk7CisgICAgfQogICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVyLT5pbnZhbGlk
YXRlRW50aXJlTGF5ZXIoKTsKICAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXIpCiAg
ICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVyLT5pbnZhbGlkYXRlRW50aXJlTGF5ZXIo
KTsKQEAgLTQ2NSw5ICs0NjksMjMgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmlzTGF5
ZXJWaXNpYmxlKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm0KIC8vIG5lY2Vz
c2FyeSB0cmFuc2Zvcm1hdGlvbnMsIHNjaXNzb3IgcmVjdGFuZ2xlcywgcmVuZGVyIHN1cmZhY2Vz
LCBldGMuCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJl
bmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgcGFyZW50TWF0cml4LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIGxheWVyTGlzdCkKIHsKKyAgICAvLyBNYWtl
IHN1cmUgd2UgaGF2ZSBDQ0xheWVySW1wbHMgZm9yIHRoaXMgc3VidHJlZS4KKyAgICBsYXllci0+
Y3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgpOworICAgIGlmIChsYXllci0+bWFza0xheWVyKCkp
CisgICAgICAgIGxheWVyLT5tYXNrTGF5ZXIoKS0+Y3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgp
OworICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkpCisgICAgICAgIGxheWVyLT5yZXBsaWNh
TGF5ZXIoKS0+Y3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgpOworICAgIGlmIChsYXllci0+cmVw
bGljYUxheWVyKCkgJiYgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSkKKyAgICAg
ICAgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+Y3JlYXRlQ0NMYXllckltcGxJ
Zk5lZWRlZCgpOworCiAgICAgbGF5ZXItPnNldExheWVyUmVuZGVyZXIodGhpcyk7CiAgICAgQ0NM
YXllckltcGwqIGRyYXdMYXllciA9IGxheWVyLT5jY0xheWVySW1wbCgpOwotICAgIGRyYXdMYXll
ci0+dXBkYXRlRnJvbUxheWVyKGxheWVyKTsKKyAgICAvLyBDdXJyZW50bHkgd2UncmUgY2FsbGlu
ZyB1cGRhdGVUb0xheWVyKCkgdHdpY2UgLSBvbmNlIGhlcmUgYW5kIG9uY2UgaW4gdXBkYXRlQ29u
dGVudHNUZXh0dXJlUmVjdXJzaXZlKCkuCisgICAgLy8gV2Ugc2hvdWxkIG9ubHkgY2FsbCB1cGRh
dGVUb0xheWVyKCkgaW4gY29tbWl0LCBidXQgYmVjYXVzZSB3ZSByZWx5IG9uIHRoZSBkcmF3IGxh
eWVyIHN0YXRlIHRvIHVwZGF0ZQorICAgIC8vIFJlbmRlclN1cmZhY2VzIGFuZCB3ZSByZWx5IG9u
IFJlbmRlclN1cmZhY2VzIGJlaW5nIHVwIHRvIGRhdGUgaW4gb3JkZXIgdG8gcGFpbnQgY29udGVu
dHMgd2UgaGF2ZQorICAgIC8vIHRvIHVwZGF0ZSB0aGUgZHJhdyBsYXllcnMgdHdpY2UuCisgICAg
Ly8gRklYTUU6IFJlbW92ZSB0aGlzIGNhbGwgb25jZSBsYXllciB1cGRhdGVzIG5vIGxvbmdlciBk
ZXBlbmQgb24gcmVuZGVyIHN1cmZhY2VzLgorICAgIGxheWVyLT51cGRhdGVUb0xheWVyKGRyYXdM
YXllcik7CiAKICAgICAvLyBDb21wdXRlIHRoZSBuZXcgbWF0cml4IHRyYW5zZm9ybWF0aW9uIHRo
YXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoaXMgbGF5ZXIgYW5kCiAgICAgLy8gYWxsIGl0cyBzdWJs
YXllcnMuIEl0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgdGhlIGxheWVyJ3MgcG9zaXRp
b24KQEAgLTUyMiw4ICs1NDAsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRl
UHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0qIGxheQogICAgIGJvb2wg
dXNlU3VyZmFjZUZvck9wYWNpdHkgPSBkcmF3TGF5ZXItPm9wYWNpdHkoKSAhPSAxICYmICFkcmF3
TGF5ZXItPnByZXNlcnZlczNEKCk7CiAgICAgYm9vbCB1c2VTdXJmYWNlRm9yTWFza2luZyA9IGRy
YXdMYXllci0+bWFza0xheWVyKCk7CiAgICAgYm9vbCB1c2VTdXJmYWNlRm9yUmVmbGVjdGlvbiA9
IGRyYXdMYXllci0+cmVwbGljYUxheWVyKCk7Ci0gICAgaWYgKCgodXNlU3VyZmFjZUZvckNsaXBw
aW5nIHx8IHVzZVN1cmZhY2VGb3JPcGFjaXR5KSAmJiBkcmF3TGF5ZXItPmRlc2NlbmRhbnRzRHJh
d3NDb250ZW50KCkpCi0gICAgICAgIHx8IHVzZVN1cmZhY2VGb3JNYXNraW5nIHx8IHVzZVN1cmZh
Y2VGb3JSZWZsZWN0aW9uKSB7CisgICAgaWYgKHVzZVN1cmZhY2VGb3JNYXNraW5nIHx8IHVzZVN1
cmZhY2VGb3JSZWZsZWN0aW9uIHx8ICgodXNlU3VyZmFjZUZvckNsaXBwaW5nIHx8IHVzZVN1cmZh
Y2VGb3JPcGFjaXR5KSAmJiBkcmF3TGF5ZXItPmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkpKSB7
CiAgICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IGRyYXdMYXll
ci0+cmVuZGVyU3VyZmFjZSgpOwogICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UpCiAgICAgICAg
ICAgICByZW5kZXJTdXJmYWNlID0gZHJhd0xheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CkBA
IC02MzksNiArNjU2LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3Bl
cnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhMYXllckNocm9taXVtKiBsYXkKIAogICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJzID0gbGF5ZXItPmdldFN1Ymxh
eWVycygpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIHN1YmxheWVyc1tpXS0+Y3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgpOwog
ICAgICAgICBDQ0xheWVySW1wbCogc3VibGF5ZXIgPSBzdWJsYXllcnNbaV0tPmNjTGF5ZXJJbXBs
KCk7CiAgICAgICAgIHVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhzdWJsYXllcnNb
aV0uZ2V0KCksIHN1YmxheWVyTWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkZXNjZW5k
YW50cyk7CiAKQEAgLTcyMSwyMyArNzM5LDQ2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1bSogbGF5CiAg
ICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQoJmRlc2NlbmRhbnRzLmF0KHRoaXNMYXllckluZGV4KSwg
ZGVzY2VuZGFudHMuZW5kKCksIGNvbXBhcmVMYXllclopOwogfQogCi12b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIp
Cit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c1JlY3Vyc2l2ZShMYXll
ckNocm9taXVtKiBsYXllcikKIHsKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21p
dW0+ID4mIHN1YmxheWVycyA9IGxheWVyLT5nZXRTdWJsYXllcnMoKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7ICsraSkKLSAgICAgICAgdXBkYXRlQ29udGVu
dHNSZWN1cnNpdmUoc3VibGF5ZXJzW2ldLmdldCgpKTsKKyAgICAgICAgcGFpbnRDb250ZW50c1Jl
Y3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCkpOwogCiAgICAgaWYgKGxheWVyLT5ib3VuZHMoKS5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChsYXllci0+ZHJhd3NDb250ZW50
KCkpCi0gICAgICAgIGxheWVyLT51cGRhdGVDb250ZW50c0lmRGlydHkoKTsKKyAgICAgICAgbGF5
ZXItPnBhaW50Q29udGVudHNJZkRpcnR5KCk7CiAgICAgaWYgKGxheWVyLT5tYXNrTGF5ZXIoKSAm
JiBsYXllci0+bWFza0xheWVyKCktPmRyYXdzQ29udGVudCgpKQotICAgICAgICBsYXllci0+bWFz
a0xheWVyKCktPnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpOworICAgICAgICBsYXllci0+bWFza0xh
eWVyKCktPnBhaW50Q29udGVudHNJZkRpcnR5KCk7CiAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5
ZXIoKSAmJiBsYXllci0+cmVwbGljYUxheWVyKCktPmRyYXdzQ29udGVudCgpKQotICAgICAgICBs
YXllci0+cmVwbGljYUxheWVyKCktPnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpOworICAgICAgICBs
YXllci0+cmVwbGljYUxheWVyKCktPnBhaW50Q29udGVudHNJZkRpcnR5KCk7CiAgICAgaWYgKGxh
eWVyLT5yZXBsaWNhTGF5ZXIoKSAmJiBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigp
ICYmIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPmRyYXdzQ29udGVudCgpKQot
ICAgICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLT51cGRhdGVDb250ZW50
c0lmRGlydHkoKTsKKyAgICAgICAgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+
cGFpbnRDb250ZW50c0lmRGlydHkoKTsKK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnVwZGF0ZUNvbnRlbnRzVGV4dHVyZVJlY3Vyc2l2ZShMYXllckNocm9taXVtKiBsYXllcikKK3sK
KyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHN1YmxheWVycyA9IGxh
eWVyLT5nZXRTdWJsYXllcnMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YmxheWVy
cy5zaXplKCk7ICsraSkKKyAgICAgICAgdXBkYXRlQ29udGVudHNUZXh0dXJlUmVjdXJzaXZlKHN1
YmxheWVyc1tpXS5nZXQoKSk7CisKKyAgICBpZiAobGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgQ0NMYXllckltcGwqIGRyYXdMYXllciA9IGxheWVyLT5j
Y0xheWVySW1wbCgpOworCisgICAgaWYgKGRyYXdMYXllci0+ZHJhd3NDb250ZW50KCkpCisgICAg
ICAgIGRyYXdMYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOworICAgIGlmIChkcmF3
TGF5ZXItPm1hc2tMYXllcigpICYmIGRyYXdMYXllci0+bWFza0xheWVyKCktPmRyYXdzQ29udGVu
dCgpKQorICAgICAgICBkcmF3TGF5ZXItPm1hc2tMYXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKCk7CisgICAgaWYgKGRyYXdMYXllci0+cmVwbGljYUxheWVyKCkgJiYgZHJhd0xheWVy
LT5yZXBsaWNhTGF5ZXIoKS0+ZHJhd3NDb250ZW50KCkpCisgICAgICAgIGRyYXdMYXllci0+cmVw
bGljYUxheWVyKCktPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKKyAgICBpZiAoZHJhd0xh
eWVyLT5yZXBsaWNhTGF5ZXIoKSAmJiBkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5
ZXIoKSAmJiBkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+ZHJhd3NDb250
ZW50KCkpCisgICAgICAgIGRyYXdMYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLT51
cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCk7CisKKyAgICBsYXllci0+dXBkYXRlVG9MYXllcihk
cmF3TGF5ZXIpOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Q29tcG9zaXRl
T2Zmc2NyZWVuKGJvb2wgY29tcG9zaXRlT2Zmc2NyZWVuKQpAQCAtODExLDE2ICs4NTIsMjAgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihDQ0xheWVySW1wbCogbGF5ZXIs
IFJlbmRlclN1cmZhY2VDaHJvbWl1bSoKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
IChsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKQorICAgIGlmIChsYXllci0+Ym91bmRzKCkuaXNF
bXB0eSgpKSB7CisgICAgICAgIGxheWVyLT51bnJlc2VydmVDb250ZW50c1RleHR1cmUoKTsKICAg
ICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIHNldFNjaXNzb3JUb1JlY3QobGF5ZXItPnNjaXNz
b3JSZWN0KCkpOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIGxheWVyIGZhbGxzIHdpdGhpbiB0aGUg
dmlzaWJsZSBib3VuZHMgb2YgdGhlIHBhZ2UuCiAgICAgSW50UmVjdCBsYXllclJlY3QgPSBsYXll
ci0+Z2V0RHJhd1JlY3QoKTsKICAgICBib29sIGlzTGF5ZXJWaXNpYmxlID0gbGF5ZXItPnNjaXNz
b3JSZWN0KCkuaW50ZXJzZWN0cyhsYXllclJlY3QpOwotICAgIGlmICghaXNMYXllclZpc2libGUp
CisgICAgaWYgKCFpc0xheWVyVmlzaWJsZSkgeworICAgICAgICBsYXllci0+dW5yZXNlcnZlQ29u
dGVudHNUZXh0dXJlKCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICAvLyBGSVhNRTog
TmVlZCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgY29tbXVsYXRpdmUgcmVuZGVyIHN1cmZhY2Ug
dHJhbnNmb3JtcyBhbGwgdGhlIHdheSBmcm9tCiAgICAgLy8gICAgICAgIHRoZSBkZWZhdWx0IHJl
bmRlciBzdXJmYWNlIGluIG9yZGVyIHRvIGRldGVybWluZSB2aXNpYmlsaXR5LgpAQCAtODM0LDgg
Kzg3OSwxMCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKENDTGF5ZXJJ
bXBsKiBsYXllciwgUmVuZGVyU3VyZmFjZUNocm9taXVtKgogICAgICAgICBGbG9hdFBvaW50M0Qg
eEF4aXMoaG9yaXpvbnRhbERpci53aWR0aCgpLCBob3Jpem9udGFsRGlyLmhlaWdodCgpLCAwKTsK
ICAgICAgICAgRmxvYXRQb2ludDNEIHlBeGlzKHZlcnRpY2FsRGlyLndpZHRoKCksIHZlcnRpY2Fs
RGlyLmhlaWdodCgpLCAwKTsKICAgICAgICAgRmxvYXRQb2ludDNEIHpBeGlzID0geEF4aXMuY3Jv
c3MoeUF4aXMpOwotICAgICAgICBpZiAoekF4aXMueigpIDwgMCkKKyAgICAgICAgaWYgKHpBeGlz
LnooKSA8IDApIHsKKyAgICAgICAgICAgIGxheWVyLT51bnJlc2VydmVDb250ZW50c1RleHR1cmUo
KTsKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChsYXll
ci0+ZHJhd3NDb250ZW50KCkpCkBAIC05MTMsMTAgKzk2MCwxMCBAQCBib29sIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKQogICAgIG1fc2hhcmVkR2VvbWV0
cnkgPSBhZG9wdFB0cihuZXcgR2VvbWV0cnlCaW5kaW5nKG1fY29udGV4dC5nZXQoKSkpOwogICAg
IG1fYm9yZGVyUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBMYXllckNocm9taXVtOjpCb3JkZXJQcm9n
cmFtKG1fY29udGV4dC5nZXQoKSkpOwogICAgIG1fY29udGVudExheWVyUHJvZ3JhbSA9IGFkb3B0
UHRyKG5ldyBDb250ZW50TGF5ZXJDaHJvbWl1bTo6UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsK
LSAgICBtX2NhbnZhc0xheWVyUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBDYW52YXNMYXllckNocm9t
aXVtOjpQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOwotICAgIG1fdmlkZW9MYXllclJHQkFQcm9n
cmFtID0gYWRvcHRQdHIobmV3IFZpZGVvTGF5ZXJDaHJvbWl1bTo6UkdCQVByb2dyYW0obV9jb250
ZXh0LmdldCgpKSk7Ci0gICAgbV92aWRlb0xheWVyWVVWUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBW
aWRlb0xheWVyQ2hyb21pdW06OllVVlByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7Ci0gICAgbV9w
bHVnaW5MYXllclByb2dyYW0gPSBhZG9wdFB0cihuZXcgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6UHJv
Z3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICBtX2NhbnZhc0xheWVyUHJvZ3JhbSA9IGFkb3B0
UHRyKG5ldyBDYW52YXNDQ0xheWVySW1wbDo6UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKKyAg
ICBtX3ZpZGVvTGF5ZXJSR0JBUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBWaWRlb0NDTGF5ZXJJbXBs
OjpSR0JBUHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICBtX3ZpZGVvTGF5ZXJZVVZQcm9n
cmFtID0gYWRvcHRQdHIobmV3IFZpZGVvQ0NMYXllckltcGw6OllVVlByb2dyYW0obV9jb250ZXh0
LmdldCgpKSk7CisgICAgbV9wbHVnaW5MYXllclByb2dyYW0gPSBhZG9wdFB0cihuZXcgUGx1Z2lu
Q0NMYXllckltcGw6OlByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7CiAgICAgbV9yZW5kZXJTdXJm
YWNlUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OlByb2dyYW0o
bV9jb250ZXh0LmdldCgpKSk7CiAgICAgbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0gPSBhZG9w
dFB0cihuZXcgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpNYXNrUHJvZ3JhbShtX2NvbnRleHQuZ2V0
KCkpKTsKICAgICBtX3RpbGVyUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBMYXllclRpbGVyQ2hyb21p
dW06OlByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5oCmluZGV4IDcwMzdkMDQzYjFmZmU1MGE0YjM2NTBhOTNkZjlkYjc4NWZhY2JkNDYuLjU4
MzIyZjJiMGE3NjM4ZTNlODcwMGYyODE2MzEwMDQ1ZWUwMzc4ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oCkBAIC0zNCwxNiArMzQsMTcgQEAKIAogI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKIAotI2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hyb21pdW0uaCIKICNp
bmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNp
bmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJUaWxlckNocm9taXVtLmgi
Ci0jaW5jbHVkZSAiUGx1Z2luTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlJlbmRlclN1cmZh
Y2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlNrQml0bWFwLmgiCiAjaW5jbHVkZSAiVmlkZW9MYXll
ckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NIZWFkc1VwRGlzcGxheS5oIgorI2luY2x1ZGUg
ImNjL0NhbnZhc0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvUGx1Z2luQ0NMYXllckltcGwu
aCIKKyNpbmNsdWRlICJjYy9WaWRlb0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgpAQCAtMTEwLDEzICsxMTEsMTMgQEAgcHVibGljOgogICAgIGNvbnN0IEdlb21ldHJ5
QmluZGluZyogc2hhcmVkR2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZEdlb21ldHJ5
LmdldCgpOyB9CiAgICAgY29uc3QgTGF5ZXJDaHJvbWl1bTo6Qm9yZGVyUHJvZ3JhbSogYm9yZGVy
UHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyUHJvZ3JhbS5nZXQoKTsgfQogICAgIGNv
bnN0IENvbnRlbnRMYXllckNocm9taXVtOjpQcm9ncmFtKiBjb250ZW50TGF5ZXJQcm9ncmFtKCkg
Y29uc3QgeyByZXR1cm4gbV9jb250ZW50TGF5ZXJQcm9ncmFtLmdldCgpOyB9Ci0gICAgY29uc3Qg
Q2FudmFzTGF5ZXJDaHJvbWl1bTo6UHJvZ3JhbSogY2FudmFzTGF5ZXJQcm9ncmFtKCkgY29uc3Qg
eyByZXR1cm4gbV9jYW52YXNMYXllclByb2dyYW0uZ2V0KCk7IH0KLSAgICBjb25zdCBWaWRlb0xh
eWVyQ2hyb21pdW06OlJHQkFQcm9ncmFtKiB2aWRlb0xheWVyUkdCQVByb2dyYW0oKSBjb25zdCB7
IHJldHVybiBtX3ZpZGVvTGF5ZXJSR0JBUHJvZ3JhbS5nZXQoKTsgfQotICAgIGNvbnN0IFZpZGVv
TGF5ZXJDaHJvbWl1bTo6WVVWUHJvZ3JhbSogdmlkZW9MYXllcllVVlByb2dyYW0oKSBjb25zdCB7
IHJldHVybiBtX3ZpZGVvTGF5ZXJZVVZQcm9ncmFtLmdldCgpOyB9Ci0gICAgY29uc3QgUGx1Z2lu
TGF5ZXJDaHJvbWl1bTo6UHJvZ3JhbSogcGx1Z2luTGF5ZXJQcm9ncmFtKCkgY29uc3QgeyByZXR1
cm4gbV9wbHVnaW5MYXllclByb2dyYW0uZ2V0KCk7IH0KICAgICBjb25zdCBSZW5kZXJTdXJmYWNl
Q2hyb21pdW06OlByb2dyYW0qIHJlbmRlclN1cmZhY2VQcm9ncmFtKCkgY29uc3QgeyByZXR1cm4g
bV9yZW5kZXJTdXJmYWNlUHJvZ3JhbS5nZXQoKTsgfQogICAgIGNvbnN0IFJlbmRlclN1cmZhY2VD
aHJvbWl1bTo6TWFza1Byb2dyYW0qIHJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtLmdldCgpOyB9CiAgICAgY29uc3QgTGF5
ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtKiB0aWxlclByb2dyYW0oKSBjb25zdCB7IHJldHVybiBt
X3RpbGVyUHJvZ3JhbS5nZXQoKTsgfQorICAgIGNvbnN0IENhbnZhc0NDTGF5ZXJJbXBsOjpQcm9n
cmFtKiBjYW52YXNMYXllclByb2dyYW0oKSBjb25zdCB7IHJldHVybiBtX2NhbnZhc0xheWVyUHJv
Z3JhbS5nZXQoKTsgfQorICAgIGNvbnN0IFBsdWdpbkNDTGF5ZXJJbXBsOjpQcm9ncmFtKiBwbHVn
aW5MYXllclByb2dyYW0oKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbkxheWVyUHJvZ3JhbS5nZXQo
KTsgfQorICAgIGNvbnN0IFZpZGVvQ0NMYXllckltcGw6OlJHQkFQcm9ncmFtKiB2aWRlb0xheWVy
UkdCQVByb2dyYW0oKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvTGF5ZXJSR0JBUHJvZ3JhbS5nZXQo
KTsgfQorICAgIGNvbnN0IFZpZGVvQ0NMYXllckltcGw6OllVVlByb2dyYW0qIHZpZGVvTGF5ZXJZ
VVZQcm9ncmFtKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0xheWVyWVVWUHJvZ3JhbS5nZXQoKTsg
fQogCiAgICAgdm9pZCByZXNpemVPbnNjcmVlbkNvbnRlbnQoY29uc3QgSW50U2l6ZSYpOwogCkBA
IC0xMzcsNyArMTM4LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVJvb3RMYXllckNvbnRl
bnRzKCk7CiAgICAgdm9pZCB1cGRhdGVSb290TGF5ZXJTY3JvbGxiYXJzKCk7CiAgICAgdm9pZCB1
cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1bSosIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgbGF5ZXJMaXN0KTsK
LSAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qKTsKKyAgICB2
b2lkIHBhaW50Q29udGVudHNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSopOworICAgIHZvaWQgdXBk
YXRlQ29udGVudHNUZXh0dXJlUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qKTsKIAogICAgIHZvaWQg
ZHJhd0xheWVycyhjb25zdCBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7CiAgICAgdm9pZCBkcmF3TGF5ZXIoQ0NMYXllckltcGwqLCBSZW5kZXJTdXJmYWNlQ2hy
b21pdW0qKTsKQEAgLTIwNSwxMyArMjA3LDEzIEBAIHByaXZhdGU6CiAgICAgT3duUHRyPEdlb21l
dHJ5QmluZGluZz4gbV9zaGFyZWRHZW9tZXRyeTsKICAgICBPd25QdHI8TGF5ZXJDaHJvbWl1bTo6
Qm9yZGVyUHJvZ3JhbT4gbV9ib3JkZXJQcm9ncmFtOwogICAgIE93blB0cjxDb250ZW50TGF5ZXJD
aHJvbWl1bTo6UHJvZ3JhbT4gbV9jb250ZW50TGF5ZXJQcm9ncmFtOwotICAgIE93blB0cjxDYW52
YXNMYXllckNocm9taXVtOjpQcm9ncmFtPiBtX2NhbnZhc0xheWVyUHJvZ3JhbTsKLSAgICBPd25Q
dHI8VmlkZW9MYXllckNocm9taXVtOjpSR0JBUHJvZ3JhbT4gbV92aWRlb0xheWVyUkdCQVByb2dy
YW07Ci0gICAgT3duUHRyPFZpZGVvTGF5ZXJDaHJvbWl1bTo6WVVWUHJvZ3JhbT4gbV92aWRlb0xh
eWVyWVVWUHJvZ3JhbTsKLSAgICBPd25QdHI8UGx1Z2luTGF5ZXJDaHJvbWl1bTo6UHJvZ3JhbT4g
bV9wbHVnaW5MYXllclByb2dyYW07CiAgICAgT3duUHRyPFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6
UHJvZ3JhbT4gbV9yZW5kZXJTdXJmYWNlUHJvZ3JhbTsKICAgICBPd25QdHI8UmVuZGVyU3VyZmFj
ZUNocm9taXVtOjpNYXNrUHJvZ3JhbT4gbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW07CiAgICAg
T3duUHRyPExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbT4gbV90aWxlclByb2dyYW07CisgICAg
T3duUHRyPENhbnZhc0NDTGF5ZXJJbXBsOjpQcm9ncmFtPiBtX2NhbnZhc0xheWVyUHJvZ3JhbTsK
KyAgICBPd25QdHI8VmlkZW9DQ0xheWVySW1wbDo6UkdCQVByb2dyYW0+IG1fdmlkZW9MYXllclJH
QkFQcm9ncmFtOworICAgIE93blB0cjxWaWRlb0NDTGF5ZXJJbXBsOjpZVVZQcm9ncmFtPiBtX3Zp
ZGVvTGF5ZXJZVVZQcm9ncmFtOworICAgIE93blB0cjxQbHVnaW5DQ0xheWVySW1wbDo6UHJvZ3Jh
bT4gbV9wbHVnaW5MYXllclByb2dyYW07CiAKICAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IG1f
dGV4dHVyZU1hbmFnZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXgg
MDAxNzRhYTZlMDk5ZGQ4NTRhYThkNDEwMDY0ZTM1NDc5ZTdiY2IwMC4uNjU1YTQyYmYxNDU1ZjA4
YmJlODc4NWQ4MTNkYzczZDY1NmVmY2UxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1
bS5jcHAKQEAgLTI5LDEwICsyOSwxMCBAQAogCiAjaW5jbHVkZSAiUGx1Z2luTGF5ZXJDaHJvbWl1
bS5oIgogCi0jaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUg
PEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2Mv
UGx1Z2luQ0NMYXllckltcGwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NywzNyAr
NDcsMjIgQEAgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6UGx1Z2luTGF5ZXJDaHJvbWl1bShHcmFwaGlj
c0xheWVyQ2hyb21pdW0qIG93bmVyKQogewogfQogCi12b2lkIFBsdWdpbkxheWVyQ2hyb21pdW06
OnNldFRleHR1cmVJZCh1bnNpZ25lZCBpZCkKK1Bhc3NSZWZQdHI8Q0NMYXllckltcGw+IFBsdWdp
bkxheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkKIHsKLSAgICBtX3RleHR1cmVJZCA9
IGlkOworICAgIHJldHVybiBQbHVnaW5DQ0xheWVySW1wbDo6Y3JlYXRlKHRoaXMpOwogfQogCi12
b2lkIFBsdWdpbkxheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpCit2b2lkIFBs
dWdpbkxheWVyQ2hyb21pdW06OnNldFRleHR1cmVJZCh1bnNpZ25lZCBpZCkKIHsKKyAgICBtX3Rl
eHR1cmVJZCA9IGlkOwogfQogCi12b2lkIFBsdWdpbkxheWVyQ2hyb21pdW06OmRyYXcoKQordm9p
ZCBQbHVnaW5MYXllckNocm9taXVtOjp1cGRhdGVUb0xheWVyKENDTGF5ZXJJbXBsKiBsYXllcikK
IHsKLSAgICBBU1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKLSAgICBjb25zdCBQbHVnaW5MYXllckNo
cm9taXVtOjpQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlcigpLT5wbHVnaW5MYXllclBy
b2dyYW0oKTsKLSAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgpKTsK
LSAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7
Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsK
LSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90
ZXh0dXJlSWQpKTsKLSAgICAKLSAgICAvLyBGSVhNRTogc2V0dGluZyB0aGUgdGV4dHVyZSBwYXJh
bWV0ZXJzIGV2ZXJ5IHRpbWUgaXMgcmVkdW5kYW50LiBNb3ZlIHRoaXMgY29kZSBzb21ld2hlcmUK
LSAgICAvLyB3aGVyZSBpdCB3aWxsIG9ubHkgaGFwcGVuIG9uY2UgcGVyIHRleHR1cmUuCi0gICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVY
VFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
dGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJ
TkVBUikpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKSk7Ci0gICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9X
UkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpKTsKLSAgICAKLSAgICBsYXllclJlbmRlcmVyKCktPnVz
ZVNoYWRlcihwcm9ncmFtLT5wcm9ncmFtKCkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51
bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkp
OwotICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0
aW9uTWF0cml4KCksIGNjTGF5ZXJJbXBsKCktPmRyYXdUcmFuc2Zvcm0oKSwKLSAgICAgICAgICAg
ICAgICAgICAgIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBjY0xheWVySW1w
bCgpLT5kcmF3T3BhY2l0eSgpLAotICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4
U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0t
PmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpKTsKKyAgICBMYXllckNocm9taXVtOjp1
cGRhdGVUb0xheWVyKGxheWVyKTsKKworICAgIFBsdWdpbkNDTGF5ZXJJbXBsKiBwbHVnaW5MYXll
ciA9IHN0YXRpY19jYXN0PFBsdWdpbkNDTGF5ZXJJbXBsKj4obGF5ZXIpOworICAgIHBsdWdpbkxh
eWVyLT5zZXRUZXh0dXJlSWQobV90ZXh0dXJlSWQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXll
ckNocm9taXVtLmgKaW5kZXggYmJmNDUzNzY3NWExMThhN2RiNzlhMjlkZjAyMTdlZWY1N2Y2ZDk2
ZS4uMWYxZjU4MjEyMjQ0ZTYwZWJkM2Y0ODk1MWYxMzk3MjZiOGVlZTQ1YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJv
bWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Bs
dWdpbkxheWVyQ2hyb21pdW0uaApAQCAtMzgsMTkgKzM4LDE5IEBAIGNsYXNzIFBsdWdpbkxheWVy
Q2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8UGx1Z2luTGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bSogb3duZXIgPSAwKTsKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50c0lmRGlydHkoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZHJhdygpOwogCi0gICAgdW5zaWduZWQgdGV4dHVyZUlkKCkgY29u
c3QgeyByZXR1cm4gbV90ZXh0dXJlSWQ7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXll
ckltcGw+IGNyZWF0ZUNDTGF5ZXJJbXBsKCk7CisKICAgICB2b2lkIHNldFRleHR1cmVJZCh1bnNp
Z25lZCB0ZXh0dXJlSWQpOworICAgIHVuc2lnbmVkIHRleHR1cmVJZCgpIGNvbnN0IHsgcmV0dXJu
IG1fdGV4dHVyZUlkOyB9CiAKLSAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRl
clBvc1RleCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4RmxpcEFscGhhPiBQcm9ncmFtOworICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVUb0xheWVyKENDTGF5ZXJJbXBsKik7CiAKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4g
IlBsdWdpbkxheWVyIjsgfQogCiBwcml2YXRlOgotICAgIFBsdWdpbkxheWVyQ2hyb21pdW0oR3Jh
cGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CisgICAgZXhwbGljaXQgUGx1Z2luTGF5ZXJDaHJv
bWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKICAgICB1bnNpZ25lZCBtX3RleHR1
cmVJZDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDAxYmY5NDg4
M2NhNGQxMDU4MTEyYzc3YmE4NjUyOTY1MDgyN2MyMjMuLjVjOWEzYjM0MTk5YmJlOGJmN2RjOTQ2
MTJjMjRkZjhjY2Q1M2JkOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcApAQCAt
MzMsNyArMzMsNiBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpbmNsdWRl
ICJWaWRlb0xheWVyQ2hyb21pdW0uaCIKIAotI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAj
aW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgpAQCAtNDEsMzEgKzQw
LDExIEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiVmlkZW9G
cmFtZUNocm9taXVtLmgiCiAjaW5jbHVkZSAiVmlkZW9GcmFtZVByb3ZpZGVyLmgiCisjaW5jbHVk
ZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9WaWRlb0NDTGF5ZXJJbXBsLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gVGhlc2UgdmFsdWVzIGFyZSBtYWdpYyBudW1iZXJz
IHRoYXQgYXJlIHVzZWQgaW4gdGhlIHRyYW5zZm9ybWF0aW9uCi0vLyBmcm9tIFlVViB0byBSR0Ig
Y29sb3IgdmFsdWVzLgotLy8gVGhleSBhcmUgdGFrZW4gZnJvbSB0aGUgZm9sbG93aW5nIHdlYnBh
Z2U6Ci0vLyBodHRwOi8vd3d3LmZvdXJjYy5vcmcvZmNjeXZyZ2IucGhwCi1jb25zdCBmbG9hdCBW
aWRlb0xheWVyQ2hyb21pdW06Onl1djJSR0JbOV0gPSB7Ci0gICAgMS4xNjRmLCAxLjE2NGYsIDEu
MTY0ZiwKLSAgICAwLmYsIC0uMzkxZiwgMi4wMThmLAotICAgIDEuNTk2ZiwgLS44MTNmLCAwLmYs
Ci19OwotCi0vLyBUaGVzZSB2YWx1ZXMgbWFwIHRvIDE2LCAxMjgsIGFuZCAxMjggcmVzcGVjdGl2
ZWx5LCBhbmQgYXJlIGNvbXB1dGVkCi0vLyBhcyBhIGZyYWN0aW9uIG92ZXIgMjU2IChlLmcuIDE2
IC8gMjU2ID0gMC4wNjI1KS4KLS8vIFRoZXkgYXJlIHVzZWQgaW4gdGhlIFlVViB0byBSR0JBIGNv
bnZlcnNpb24gZm9ybXVsYToKLS8vICAgWSAtIDE2ICAgOiBHaXZlcyAxNiB2YWx1ZXMgb2YgaGVh
ZCBhbmQgZm9vdHJvb20gZm9yIG92ZXJzaG9vdGluZwotLy8gICBVIC0gMTI4ICA6IFR1cm5zIHVu
c2lnbmVkIFUgaW50byBzaWduZWQgVSBbLTEyOCwxMjddCi0vLyAgIFYgLSAxMjggIDogVHVybnMg
dW5zaWduZWQgViBpbnRvIHNpZ25lZCBWIFstMTI4LDEyN10KLWNvbnN0IGZsb2F0IFZpZGVvTGF5
ZXJDaHJvbWl1bTo6eXV2QWRqdXN0WzNdID0gewotICAgIC0wLjA2MjVmLAotICAgIC0wLjVmLAot
ICAgIC0wLjVmLAotfTsKLQogUGFzc1JlZlB0cjxWaWRlb0xheWVyQ2hyb21pdW0+IFZpZGVvTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW9G
cmFtZVByb3ZpZGVyKiBwcm92aWRlcikKIHsKQEAgLTg3LDYgKzY2LDExIEBAIFZpZGVvTGF5ZXJD
aHJvbWl1bTo6flZpZGVvTGF5ZXJDaHJvbWl1bSgpCiAgICAgY2xlYW51cFJlc291cmNlcygpOwog
fQogCitQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBWaWRlb0xheWVyQ2hyb21pdW06OmNyZWF0ZUND
TGF5ZXJJbXBsKCkKK3sKKyAgICByZXR1cm4gVmlkZW9DQ0xheWVySW1wbDo6Y3JlYXRlKHRoaXMp
OworfQorCiB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpCiB7CiAg
ICAgTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpOwpAQCAtMTAxLDcgKzg1LDcgQEAg
dm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQogICAgIH0KIH0KIAot
dm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpCit2b2lkIFZp
ZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpCiB7CiAgICAgaWYg
KCFtX2NvbnRlbnRzRGlydHkpCiAgICAgICAgIHJldHVybjsKQEAgLTE2MCw2ICsxNDQsMjEgQEAg
dm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpCiAgICAgbV9w
cm92aWRlci0+cHV0Q3VycmVudEZyYW1lKGZyYW1lKTsKIH0KIAordm9pZCBWaWRlb0xheWVyQ2hy
b21pdW06OnVwZGF0ZVRvTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQoreworICAgIExheWVyQ2hy
b21pdW06OnVwZGF0ZVRvTGF5ZXIobGF5ZXIpOworCisgICAgVmlkZW9DQ0xheWVySW1wbCogdmlk
ZW9MYXllciA9IHN0YXRpY19jYXN0PFZpZGVvQ0NMYXllckltcGwqPihsYXllcik7CisgICAgdmlk
ZW9MYXllci0+c2V0U2tpcHNEcmF3KG1fc2tpcHNEcmF3KTsKKyAgICB2aWRlb0xheWVyLT5zZXRG
cmFtZUZvcm1hdChtX2ZyYW1lRm9ybWF0KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7
ICsraSkgeworICAgICAgICB2aWRlb0xheWVyLT5zZXRUZXh0dXJlKGksIG1fdGV4dHVyZXNbaV0p
OworICAgICAgICB2aWRlb0xheWVyLT5zZXRUZXh0dXJlU2l6ZShpLCBtX3RleHR1cmVTaXplc1tp
XSk7CisgICAgICAgIHZpZGVvTGF5ZXItPnNldEZyYW1lU2l6ZShpLCBtX2ZyYW1lU2l6ZXNbaV0p
OworICAgIH0KK30KKworCiB1bnNpZ25lZCBWaWRlb0xheWVyQ2hyb21pdW06OmRldGVybWluZVRl
eHR1cmVGb3JtYXQoVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSkKIHsKICAgICBzd2l0Y2ggKGZy
YW1lLT5mb3JtYXQoKSkgewpAQCAtMjM5LDMzICsyMzgsNiBAQCB2b2lkIFZpZGVvTGF5ZXJDaHJv
bWl1bTo6dXBkYXRlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgdW5zaWduZWQg
dGV4dAogICAgIH0KIH0KIAotdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OmRyYXcoKQotewotICAg
IGlmIChtX3NraXBzRHJhdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGxheWVyUmVu
ZGVyZXIoKSk7Ci0gICAgY29uc3QgUkdCQVByb2dyYW0qIHJnYmFQcm9ncmFtID0gbGF5ZXJSZW5k
ZXJlcigpLT52aWRlb0xheWVyUkdCQVByb2dyYW0oKTsKLSAgICBBU1NFUlQocmdiYVByb2dyYW0g
JiYgcmdiYVByb2dyYW0tPmluaXRpYWxpemVkKCkpOwotICAgIGNvbnN0IFlVVlByb2dyYW0qIHl1
dlByb2dyYW0gPSBsYXllclJlbmRlcmVyKCktPnZpZGVvTGF5ZXJZVVZQcm9ncmFtKCk7Ci0gICAg
QVNTRVJUKHl1dlByb2dyYW0gJiYgeXV2UHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7Ci0KLSAgICBz
d2l0Y2ggKG1fZnJhbWVGb3JtYXQpIHsKLSAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6WVYx
MjoKLSAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6WVYxNjoKLSAgICAgICAgZHJhd1lVVih5
dXZQcm9ncmFtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06
OlJHQkE6Ci0gICAgICAgIGRyYXdSR0JBKHJnYmFQcm9ncmFtKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBvdGhlciBwYXRocy4KLSAg
ICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJlbGVh
c2VDdXJyZW50RnJhbWUoKTsKLX0KLQogdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnJlbGVhc2VD
dXJyZW50RnJhbWUoKQogewogICAgIGlmICghbV9jdXJyZW50RnJhbWUpCkBAIC0yNzYsNjQgKzI0
OCw2IEBAIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjpyZWxlYXNlQ3VycmVudEZyYW1lKCkKICAg
ICByZXNldEZyYW1lUGFyYW1ldGVycygpOwogfQogCi12b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6
ZHJhd1lVVihjb25zdCBWaWRlb0xheWVyQ2hyb21pdW06OllVVlByb2dyYW0qIHByb2dyYW0pCi17
Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgp
OwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFMSkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21p
dW06OnlQbGFuZV0pKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTIpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZXNbVmlk
ZW9GcmFtZUNocm9taXVtOjp1UGxhbmVdKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFj
dGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUzKSk7Ci0gICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBt
X3RleHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6dlBsYW5lXSkpOwotCi0gICAgbGF5ZXJSZW5k
ZXJlcigpLT51c2VTaGFkZXIocHJvZ3JhbS0+cHJvZ3JhbSgpKTsKLSAgICB1bnNpZ25lZCB5RnJh
bWVXaWR0aCA9IG1fZnJhbWVTaXplc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnlQbGFuZV0ud2lkdGgo
KTsKLSAgICB1bnNpZ25lZCB5VGV4dHVyZVdpZHRoID0gbV90ZXh0dXJlU2l6ZXNbVmlkZW9GcmFt
ZUNocm9taXVtOjp5UGxhbmVdLndpZHRoKCk7Ci0gICAgLy8gQXJiaXRyYXJpbHkgdGFrZSB0aGUg
dSBzaXplcyBiZWNhdXNlIHUgYW5kIHYgZGltZW5zaW9ucyBhcmUgaWRlbnRpY2FsLgotICAgIHVu
c2lnbmVkIHV2RnJhbWVXaWR0aCA9IG1fZnJhbWVTaXplc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnVQ
bGFuZV0ud2lkdGgoKTsKLSAgICB1bnNpZ25lZCB1dlRleHR1cmVXaWR0aCA9IG1fdGV4dHVyZVNp
emVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6dVBsYW5lXS53aWR0aCgpOwotCi0gICAgZmxvYXQgeVdp
ZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4oeUZyYW1lV2lkdGgpIC8geVRleHR1
cmVXaWR0aDsKLSAgICBmbG9hdCB1dldpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9h
dD4odXZGcmFtZVdpZHRoKSAvIHV2VGV4dHVyZVdpZHRoOwotICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT51bmlmb3JtMWYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkueVdpZHRoU2NhbGVGYWN0b3JM
b2NhdGlvbigpLCB5V2lkdGhTY2FsZUZhY3RvcikpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT51bmlmb3JtMWYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudXZXaWR0aFNjYWxlRmFjdG9yTG9j
YXRpb24oKSwgdXZXaWR0aFNjYWxlRmFjdG9yKSk7Ci0KLSAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkueVRleHR1cmVMb2NhdGlvbigp
LCAxKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFn
bWVudFNoYWRlcigpLnVUZXh0dXJlTG9jYXRpb24oKSwgMikpOwotICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS52VGV4dHVyZUxvY2F0
aW9uKCksIDMpKTsKLQotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2
KHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuY2NNYXRyaXhMb2NhdGlvbigpLCAwLCBjb25zdF9j
YXN0PGZsb2F0Kj4oeXV2MlJHQiksIDEpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5p
Zm9ybTNmdihwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnl1dkFkakxvY2F0aW9uKCksIGNvbnN0
X2Nhc3Q8ZmxvYXQqPih5dXZBZGp1c3QpLCAxKSk7Ci0KLSAgICBkcmF3VGV4dHVyZWRRdWFkKGNv
bnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCBjY0xheWVySW1wbCgp
LT5kcmF3VHJhbnNmb3JtKCksCi0gICAgICAgICAgICAgICAgICAgICBib3VuZHMoKS53aWR0aCgp
LCBib3VuZHMoKS5oZWlnaHQoKSwgY2NMYXllckltcGwoKS0+ZHJhd09wYWNpdHkoKSwKLSAgICAg
ICAgICAgICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCks
Ci0gICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9j
YXRpb24oKSk7Ci0KLSAgICAvLyBSZXNldCBhY3RpdmUgdGV4dHVyZSBiYWNrIHRvIHRleHR1cmUg
MC4KLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRTApKTsKLX0KLQotdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OmRyYXdSR0JB
KGNvbnN0IFZpZGVvTGF5ZXJDaHJvbWl1bTo6UkdCQVByb2dyYW0qIHByb2dyYW0pCi17Ci0gICAg
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOwotICAg
IEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFMCkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnJn
YlBsYW5lXSkpOwotCi0gICAgbGF5ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIocHJvZ3JhbS0+cHJv
Z3JhbSgpKTsKLSAgICB1bnNpZ25lZCBmcmFtZVdpZHRoID0gbV9mcmFtZVNpemVzW1ZpZGVvRnJh
bWVDaHJvbWl1bTo6cmdiUGxhbmVdLndpZHRoKCk7Ci0gICAgdW5zaWduZWQgdGV4dHVyZVdpZHRo
ID0gbV90ZXh0dXJlU2l6ZXNbVmlkZW9GcmFtZUNocm9taXVtOjpyZ2JQbGFuZV0ud2lkdGgoKTsK
LSAgICBmbG9hdCB3aWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZyYW1lV2lk
dGgpIC8gdGV4dHVyZVdpZHRoOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYo
cHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgMCwgMCwgd2lk
dGhTY2FsZUZhY3RvciwgMSkpOwotCi0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0x
aShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7Ci0KLSAg
ICBkcmF3VGV4dHVyZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1h
dHJpeCgpLCBjY0xheWVySW1wbCgpLT5kcmF3VHJhbnNmb3JtKCksCi0gICAgICAgICAgICAgICAg
ICAgICBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgY2NMYXllckltcGwoKS0+
ZHJhd09wYWNpdHkoKSwKLSAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRl
cigpLm1hdHJpeExvY2F0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT5mcmFn
bWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKSk7Ci19Ci0KIHZvaWQgVmlkZW9MYXllckNocm9t
aXVtOjpyZXNldEZyYW1lUGFyYW1ldGVycygpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9
IDA7IHBsYW5lIDwgVmlkZW9GcmFtZUNocm9taXVtOjptYXhQbGFuZXM7IHBsYW5lKyspIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVv
TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVmlkZW9MYXllckNocm9taXVtLmgKaW5kZXggYzY5Y2M3ZWQyZDU2NGIwYjk5NDIyODE0Yzlj
MzA1NTM5MDIxYmQ3Mi4uY2VkYjExMzBkMWJkYzQxY2FjNzU1ODVlNjEzNTc5Y2UyOTBjN2E4YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlk
ZW9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgKQEAgLTQ1LDE2ICs0NSwxNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8VmlkZW9MYXllckNocm9taXVtPiBjcmVhdGUoR3JhcGhp
Y3NMYXllckNocm9taXVtKiBvd25lciA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVmlkZW9GcmFtZVByb3ZpZGVyKiA9IDApOwogICAgIHZpcnR1
YWwgflZpZGVvTGF5ZXJDaHJvbWl1bSgpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50
c0lmRGlydHkoKTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRl
Q0NMYXllckltcGwoKTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3Vy
Y2VzKCk7CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhdygpOwogCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBp
cyBjYWxsZWQgYnkgVmlkZW9GcmFtZVByb3ZpZGVyLiBXaGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxl
ZAogICAgIC8vIHB1dEN1cnJlbnRGcmFtZSgpIG11c3QgYmUgY2FsbGVkIHRvIHJldHVybiB0aGUg
ZnJhbWUgY3VycmVudGx5IGhlbGQuCiAgICAgdm9pZCByZWxlYXNlQ3VycmVudEZyYW1lKCk7CiAK
LSAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFRyYW5zZm9ybSwg
RnJhZ21lbnRTaGFkZXJSR0JBVGV4RmxpcEFscGhhPiBSR0JBUHJvZ3JhbTsKLSAgICB0eXBlZGVm
IFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFlVVlN0cmV0Y2gsIEZyYWdtZW50U2hh
ZGVyWVVWVmlkZW8+IFlVVlByb2dyYW07CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRvTGF5ZXIo
Q0NMYXllckltcGwqKTsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwUmVz
b3VyY2VzKCk7CkBAIC02OSwxNCArNzAsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlUkdC
QUNvbnRlbnRzKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKik7
CiAgICAgdm9pZCBhbGxvY2F0ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCB0
ZXh0dXJlSWQsIGNvbnN0IEludFNpemUmIGRpbWVuc2lvbnMsIHVuc2lnbmVkIHRleHR1cmVGb3Jt
YXQpOwogICAgIHZvaWQgdXBkYXRlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVk
IHRleHR1cmVJZCwgY29uc3QgSW50U2l6ZSYgZGltZW5zaW9ucywgdW5zaWduZWQgdGV4dHVyZUZv
cm1hdCwgY29uc3Qgdm9pZCogZGF0YSk7Ci0gICAgdm9pZCBkcmF3WVVWKGNvbnN0IFlVVlByb2dy
YW0qKTsKLSAgICB2b2lkIGRyYXdSR0JBKGNvbnN0IFJHQkFQcm9ncmFtKik7CiAgICAgdm9pZCBy
ZXNldEZyYW1lUGFyYW1ldGVycygpOwogICAgIHZvaWQgc2F2ZUN1cnJlbnRGcmFtZShWaWRlb0Zy
YW1lQ2hyb21pdW0qKTsKIAotICAgIHN0YXRpYyBjb25zdCBmbG9hdCB5dXYyUkdCWzldOwotICAg
IHN0YXRpYyBjb25zdCBmbG9hdCB5dXZBZGp1c3RbM107Ci0KICAgICBib29sIG1fc2tpcHNEcmF3
OwogICAgIFZpZGVvRnJhbWVDaHJvbWl1bTo6Rm9ybWF0IG1fZnJhbWVGb3JtYXQ7CiAgICAgVmlk
ZW9GcmFtZVByb3ZpZGVyKiBtX3Byb3ZpZGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5j
cHAKaW5kZXggZTgzZDA0NTZhNWM1ZWE1ODJiZmE3MWE0YmQ3NzRkYzY3ZTBlODc1Ny4uN2FiNDNh
OTg2OGYyZDM2MTQ0YjkyMDY4MTJlZDM3ZTZlNjdlZGM5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVy
Q2hyb21pdW0uY3BwCkBAIC01MCw3ICs1MCw3IEBAIFdlYkdMTGF5ZXJDaHJvbWl1bTo6V2ViR0xM
YXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiB7CiB9CiAKLXZvaWQg
V2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQordm9pZCBXZWJHTExh
eWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKQogewogICAgIGlmICghbV9j
b250ZW50c0RpcnR5KQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5o
CmluZGV4IDcwYmU4NzY5MjgzNDZhZTQ2MzQ4NTg5ZjFlYjVlZmI2ZjczODQ0OWQuLjk5YTZiZTMw
N2NjNDZkYjEyNjA2OWFiNDE4MTBhOTRjYTU0NDY1ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJv
bWl1bS5oCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIFdlYkdMTGF5ZXJDaHJvbWl1bSA6IHB1Ymxp
YyBDYW52YXNMYXllckNocm9taXVtIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxX
ZWJHTExheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyID0g
MCk7CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGV4dDsgfQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50c0lmRGlydHkoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOwogCiAgICAgdm9pZCBzZXRD
b250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuY3BwCmluZGV4IGIzODhhNDk0ZGYxNjc4MmI1YjNhYmE0OTRiMWUwOWMwMTAwZjc4YzQu
LjQ0NmM1MzI3MWVkODEwNGRhZTI2ZDI4ODkwOTllYTI4YjBhNzlhNjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySW1wbC5jcHAKQEAgLTEwMSwyNSArMTAxLDYgQEAgQ0NMYXllckltcGwqIENDTGF5ZXJJbXBs
OjpyZXBsaWNhTGF5ZXIoKSBjb25zdAogICAgIHJldHVybiBtX293bmVyLT5yZXBsaWNhTGF5ZXIo
KSA/IG1fb3duZXItPnJlcGxpY2FMYXllcigpLT5jY0xheWVySW1wbCgpIDogMDsKIH0KIAotdm9p
ZCBDQ0xheWVySW1wbDo6dXBkYXRlRnJvbUxheWVyKExheWVyQ2hyb21pdW0qIGxheWVyKQotewot
ICAgIG1fYW5jaG9yUG9pbnQgPSBsYXllci0+YW5jaG9yUG9pbnQoKTsKLSAgICBtX2FuY2hvclBv
aW50WiA9IGxheWVyLT5hbmNob3JQb2ludFooKTsKLSAgICBtX2JvdW5kcyA9IGxheWVyLT5ib3Vu
ZHMoKTsKLSAgICBtX2RvdWJsZVNpZGVkID0gbGF5ZXItPmRvdWJsZVNpZGVkKCk7Ci0gICAgbV9t
YXNrc1RvQm91bmRzID0gbGF5ZXItPm1hc2tzVG9Cb3VuZHMoKTsKLSAgICBtX29wYWNpdHkgPSBs
YXllci0+b3BhY2l0eSgpOwotICAgIG1fcG9zaXRpb24gPSBsYXllci0+cG9zaXRpb24oKTsKLSAg
ICBtX3ByZXNlcnZlczNEID0gbGF5ZXItPnByZXNlcnZlczNEKCk7Ci0gICAgbV9zdWJsYXllclRy
YW5zZm9ybSA9IGxheWVyLT5zdWJsYXllclRyYW5zZm9ybSgpOwotICAgIG1fdHJhbnNmb3JtID0g
bGF5ZXItPnRyYW5zZm9ybSgpOwotCi0gICAgaWYgKG1hc2tMYXllcigpKQotICAgICAgICBtYXNr
TGF5ZXIoKS0+dXBkYXRlRnJvbUxheWVyKG1fb3duZXItPm1hc2tMYXllcigpKTsKLSAgICBpZiAo
cmVwbGljYUxheWVyKCkpCi0gICAgICAgIHJlcGxpY2FMYXllcigpLT51cGRhdGVGcm9tTGF5ZXIo
bV9vd25lci0+cmVwbGljYUxheWVyKCkpOwotfQotCiB2b2lkIENDTGF5ZXJJbXBsOjpzZXRMYXll
clJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogcmVuZGVyZXIpCiB7CiAgICAgbV9sYXll
clJlbmRlcmVyID0gcmVuZGVyZXI7CkBAIC0xMzQsMTMgKzExNSwxNSBAQCBSZW5kZXJTdXJmYWNl
Q2hyb21pdW0qIENDTGF5ZXJJbXBsOjpjcmVhdGVSZW5kZXJTdXJmYWNlKCkKIGJvb2wgQ0NMYXll
ckltcGw6OmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkKIHsKICAgICBjb25zdCBWZWN0b3I8UmVm
UHRyPExheWVyQ2hyb21pdW0+ID4mIHN1YmxheWVycyA9IG1fb3duZXItPmdldFN1YmxheWVycygp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUoKTsgKytpKQorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IHN1YmxheWVyc1tpXS0+Y3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgpOwogICAgICAgICBpZiAo
c3VibGF5ZXJzW2ldLT5jY0xheWVySW1wbCgpLT5kcmF3c0NvbnRlbnQoKSB8fCBzdWJsYXllcnNb
aV0tPmNjTGF5ZXJJbXBsKCktPmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkpCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0vLyBUaGVzZSBi
ZWxvbmcgb24gQ0NMYXllckltcGwsIGJ1dCBzaG91bGQgYmUgc3ViY2xhc2VkIGJ5IGVhY2ggdHlw
ZSBhbmQgbm90IGRlZmVyIHRvIHRoZSBMYXllckNocm9taXVtIHN1YnR5cGVzLgorLy8gVGhlc2Ug
YmVsb25nIG9uIENDTGF5ZXJJbXBsLCBidXQgc2hvdWxkIGJlIG92ZXJyaWRkZW4gYnkgZWFjaCB0
eXBlIGFuZCBub3QgZGVmZXIgdG8gdGhlIExheWVyQ2hyb21pdW0gc3VidHlwZXMuCiBib29sIEND
TGF5ZXJJbXBsOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogewogICAgIHJldHVybiBtX293bmVyLT5k
cmF3c0NvbnRlbnQoKTsKQEAgLTE1MSw2ICsxMzQsMTEgQEAgdm9pZCBDQ0xheWVySW1wbDo6ZHJh
dygpCiAgICAgcmV0dXJuIG1fb3duZXItPmRyYXcoKTsKIH0KIAordm9pZCBDQ0xheWVySW1wbDo6
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpCit7CisgICAgcmV0dXJuIG1fb3duZXItPnVwZGF0
ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKK30KKwogdm9pZCBDQ0xheWVySW1wbDo6dW5yZXNlcnZl
Q29udGVudHNUZXh0dXJlKCkKIHsKICAgICBtX293bmVyLT51bnJlc2VydmVDb250ZW50c1RleHR1
cmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IGUyZjVmOWI0NzlkZjhiMDM2OWViYjA1Y2Nh
ZGY0ODcyMjUwNWQxNTAuLjMxZjBlNmNlMjdiM2YxODJmYWIxODI1ZTU0YzNjNTg1Yzg0NTFmNTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQ0NMYXllckltcGwob3duZXIpKTsKICAgICB9CiAgICAgLy8g
V2hlbiB0aGlzIGNsYXNzIGdldHMgc3ViY2xhc3NlcywgcmVtZW1iZXIgdG8gYWRkICd2aXJ0dWFs
JyBoZXJlLgotICAgIH5DQ0xheWVySW1wbCgpOworICAgIHZpcnR1YWwgfkNDTGF5ZXJJbXBsKCk7
CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgaW50IGRlYnVnSUQoKSBjb25zdCB7IHJldHVybiBtX2Rl
YnVnSUQ7IH0KQEAgLTU5LDI3ICs1OSw0MSBAQCBwdWJsaWM6CiAgICAgQ0NMYXllckltcGwqIG1h
c2tMYXllcigpIGNvbnN0OwogICAgIENDTGF5ZXJJbXBsKiByZXBsaWNhTGF5ZXIoKSBjb25zdDsK
IAotICAgIHZvaWQgZHJhdygpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KCk7CisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKICAgICB2b2lkIHVucmVzZXJ2ZUNv
bnRlbnRzVGV4dHVyZSgpOwogICAgIHZvaWQgYmluZENvbnRlbnRzVGV4dHVyZSgpOwogCiAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoaXMgbGF5ZXIgaGFzIGNvbnRlbnQgdG8gZHJhdy4KLSAgICBi
b29sIGRyYXdzQ29udGVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQo
KSBjb25zdDsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhlIGxheWVyJ3MgZGVz
Y2VuZGFudHMgaGFzIGNvbnRlbnQgdG8gZHJhdy4KICAgICBib29sIGRlc2NlbmRhbnRzRHJhd3ND
b250ZW50KCk7CiAKICAgICB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKIAotICAgIHZvaWQgdXBk
YXRlRnJvbUxheWVyKExheWVyQ2hyb21pdW0qKTsKLQorICAgIHZvaWQgc2V0QW5jaG9yUG9pbnQo
Y29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQpIHsgbV9hbmNob3JQb2ludCA9IGFuY2hvclBv
aW50OyB9CiAgICAgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQoKSBjb25zdCB7IHJldHVy
biBtX2FuY2hvclBvaW50OyB9CisKKyAgICB2b2lkIHNldEFuY2hvclBvaW50WihmbG9hdCBhbmNo
b3JQb2ludFopIHsgbV9hbmNob3JQb2ludFogPSBhbmNob3JQb2ludFo7IH0KICAgICBmbG9hdCBh
bmNob3JQb2ludFooKSBjb25zdCB7IHJldHVybiBtX2FuY2hvclBvaW50WjsgfQorCisgICAgdm9p
ZCBzZXRNYXNrc1RvQm91bmRzKGJvb2wgbWFza3NUb0JvdW5kcykgeyBtX21hc2tzVG9Cb3VuZHMg
PSBtYXNrc1RvQm91bmRzOyB9CiAgICAgYm9vbCBtYXNrc1RvQm91bmRzKCkgY29uc3QgeyByZXR1
cm4gbV9tYXNrc1RvQm91bmRzOyB9CisKKyAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0
eSkgeyBtX29wYWNpdHkgPSBvcGFjaXR5OyB9CiAgICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fb3BhY2l0eTsgfQorCisgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBv
aW50JiBwb3NpdGlvbikgeyBtX3Bvc2l0aW9uID0gcG9zaXRpb247IH0KICAgICBjb25zdCBGbG9h
dFBvaW50JiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KKworICAgIHZv
aWQgc2V0UHJlc2VydmVzM0QoYm9vbCBwcmVzZXJ2ZXMzRCkgeyBtX3ByZXNlcnZlczNEID0gcHJl
c2VydmVzM0Q7IH0KICAgICBib29sIHByZXNlcnZlczNEKCkgY29uc3QgeyByZXR1cm4gbV9wcmVz
ZXJ2ZXMzRDsgfQorCisgICAgdm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgc3VibGF5ZXJUcmFuc2Zvcm0pIHsgbV9zdWJsYXllclRyYW5zZm9ybSA9
IHN1YmxheWVyVHJhbnNmb3JtOyB9CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1
YmxheWVyVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zdWJsYXllclRyYW5zZm9ybTsgfQor
CisgICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5z
Zm9ybSkgeyBtX3RyYW5zZm9ybSA9IHRyYW5zZm9ybTsgfQogICAgIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQogCiAg
ICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkgeyBtX25hbWUgPSBuYW1lOyB9CkBA
IC0xMjQsMTEgKzEzOCwxMiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVy
UHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAKLXByaXZhdGU6Citw
cm90ZWN0ZWQ6CiAgICAgLy8gRm9yIG5vdywgQ0NMYXllcnMgYXJlIG93bmVkIGRpcmVjdGx5IGJ5
IGEgTGF5ZXJDaHJvbWl1bS4KICAgICBMYXllckNocm9taXVtKiBtX293bmVyOwogICAgIGV4cGxp
Y2l0IENDTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qKTsKIAorcHJpdmF0ZToKICAgICAvLyBQcm9w
ZXJ0aWVzIHN5bmNocm9uaXplZCBmcm9tIHRoZSBhc3NvY2lhdGVkIExheWVyQ2hyb21pdW0uCiAg
ICAgRmxvYXRQb2ludCBtX2FuY2hvclBvaW50OwogICAgIGZsb2F0IG1fYW5jaG9yUG9pbnRaOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q2FudmFzQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ2FudmFzQ0NMYXllckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdkMjdiOWJmYzA0
NGU1NjNkMTdkZGMyZTUzMmM3ZGQ5NGM0YTNlY2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DYW52YXNDQ0xheWVySW1wbC5j
cHAKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgImNjL0NhbnZhc0NDTGF5ZXJJ
bXBsLmgiCisKKyNpbmNsdWRlICJDYW52YXNMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitD
YW52YXNDQ0xheWVySW1wbDo6Q2FudmFzQ0NMYXllckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIp
CisgICAgOiBDQ0xheWVySW1wbChvd25lcikKKyAgICAsIG1fdGV4dHVyZUlkKDApCisgICAgLCBt
X3ByZW11bHRpcGxpZWRBbHBoYSh0cnVlKQoreworfQorCitDYW52YXNDQ0xheWVySW1wbDo6fkNh
bnZhc0NDTGF5ZXJJbXBsKCkKK3sKK30KKwordm9pZCBDYW52YXNDQ0xheWVySW1wbDo6ZHJhdygp
Cit7CisgICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CisgICAgY29uc3QgQ2FudmFzQ0NMYXll
ckltcGw6OlByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyKCktPmNhbnZhc0xheWVyUHJv
Z3JhbSgpOworICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwor
ICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0
KCk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkUwKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVJZCkpOworICAgIEdDM0Rl
bnVtIHNmYWN0b3IgPSBtX3ByZW11bHRpcGxpZWRBbHBoYSA/IEdyYXBoaWNzQ29udGV4dDNEOjpP
TkUgOiBHcmFwaGljc0NvbnRleHQzRDo6U1JDX0FMUEhBOworICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT5ibGVuZEZ1bmMoc2ZhY3RvciwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNf
QUxQSEEpKTsKKyAgICBsYXllclJlbmRlcmVyKCktPnVzZVNoYWRlcihwcm9ncmFtLT5wcm9ncmFt
KCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21l
bnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOworICAgIExheWVyQ2hyb21pdW06OmRy
YXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4
KCksIGRyYXdUcmFuc2Zvcm0oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3T3BhY2l0eSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCku
bWF0cml4TG9jYXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
b2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpKTsKKworfQorCisKK3N0YXRp
YyB2b2lkIHdyaXRlSW5kZW50KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KQoreworICAgIGZv
ciAoaW50IGkgPSAwOyBpICE9IGluZGVudDsgKytpKQorICAgICAgICB0cyA8PCAiICAiOworfQor
Cit2b2lkIENhbnZhc0NDTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0m
IHRzLCBpbnQgaW5kZW50KSBjb25zdAoreworICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwor
ICAgIHRzIDw8ICJjYW52YXMgbGF5ZXIgdGV4dHVyZSBpZDogIiA8PCBtX3RleHR1cmVJZCA8PCAi
IHByZW11bHRpcGxpZWQ6ICIgPDwgbV9wcmVtdWx0aXBsaWVkQWxwaGEgPDwgIlxuIjsKKyAgICBD
Q0xheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyh0cywgaW5kZW50KTsKK30KKworfQorCisj
ZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DYW52YXNDQ0xheWVySW1w
bC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ2FudmFz
Q0NMYXllckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMzhiZmNlODljZmMyYWI1ZjExOTVjYmJkZGUxZWFl
ZmFlODA3MzMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ2FudmFzQ0NMYXllckltcGwuaApAQCAtMCwwICsxLDYxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBDYW52YXNDQ0xheWVySW1wbF9oCisjZGVmaW5lIENhbnZhc0NDTGF5ZXJJ
bXBsX2gKKworI2luY2x1ZGUgIlByb2dyYW1CaW5kaW5nLmgiCisjaW5jbHVkZSAiU2hhZGVyQ2hy
b21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIENhbnZhc0NDTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNDQ0xheWVySW1wbD4gY3JlYXRlKExh
eWVyQ2hyb21pdW0qIG93bmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
YW52YXNDQ0xheWVySW1wbChvd25lcikpOworICAgIH0KKyAgICB2aXJ0dWFsIH5DYW52YXNDQ0xh
eWVySW1wbCgpOworCisgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NU
ZXgsIEZyYWdtZW50U2hhZGVyUkdCQVRleEZsaXBBbHBoYT4gUHJvZ3JhbTsKKworICAgIHZpcnR1
YWwgdm9pZCBkcmF3KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhU
ZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFRleHR1cmVJZCh1
bnNpZ25lZCBpZCkgeyBtX3RleHR1cmVJZCA9IGlkOyB9CisgICAgdm9pZCBzZXRQcmVtdWx0aXBs
aWVkQWxwaGEoYm9vbCBwcmVtdWx0aXBsaWVkQWxwaGEpIHsgbV9wcmVtdWx0aXBsaWVkQWxwaGEg
PSBwcmVtdWx0aXBsaWVkQWxwaGE7IH0KK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ2FudmFzQ0NM
YXllckltcGwoTGF5ZXJDaHJvbWl1bSopOworCisgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7Cisg
ICAgYm9vbCBtX3ByZW11bHRpcGxpZWRBbHBoYTsKK307CisKK30KKworI2VuZGlmIC8vIENhbnZh
c0NDTGF5ZXJJbXBsX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvUGx1Z2luQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvUGx1Z2luQ0NMYXllckltcGwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjcyZTQwOTU5Zjc0MDA2NTg1MmQ1ZTg1ZGYzMmM2YTZiZWY2NmI4ZTIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9Q
bHVnaW5DQ0xheWVySW1wbC5jcHAKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUg
ImNjL1BsdWdpbkNDTGF5ZXJJbXBsLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlBsdWdpbkxh
eWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitQbHVnaW5DQ0xheWVySW1wbDo6UGx1Z2luQ0NMYXllckltcGwoTGF5
ZXJDaHJvbWl1bSogb3duZXIpCisgICAgOiBDQ0xheWVySW1wbChvd25lcikKKyAgICAsIG1fdGV4
dHVyZUlkKDApCit7Cit9CisKK1BsdWdpbkNDTGF5ZXJJbXBsOjp+UGx1Z2luQ0NMYXllckltcGwo
KQoreworfQorCit2b2lkIFBsdWdpbkNDTGF5ZXJJbXBsOjpkcmF3KCkKK3sKKyAgICBBU1NFUlQo
bGF5ZXJSZW5kZXJlcigpKTsKKyAgICBjb25zdCBQbHVnaW5DQ0xheWVySW1wbDo6UHJvZ3JhbSog
cHJvZ3JhbSA9IGxheWVyUmVuZGVyZXIoKS0+cGx1Z2luTGF5ZXJQcm9ncmFtKCk7CisgICAgQVNT
RVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7CisgICAgR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyKCktPmNvbnRleHQoKTsKKyAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTAp
KTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKSk7CisKKyAgICAvLyBGSVhNRTogc2V0dGluZyB0
aGUgdGV4dHVyZSBwYXJhbWV0ZXJzIGV2ZXJ5IHRpbWUgaXMgcmVkdW5kYW50LiBNb3ZlIHRoaXMg
Y29kZSBzb21ld2hlcmUKKyAgICAvLyB3aGVyZSBpdCB3aWxsIG9ubHkgaGFwcGVuIG9uY2UgcGVy
IHRleHR1cmUuCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9G
SUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKyAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVB
UikpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdy
YXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VE
R0UpKTsKKworICAgIGxheWVyUmVuZGVyZXIoKS0+dXNlU2hhZGVyKHByb2dyYW0tPnByb2dyYW0o
KSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVu
dFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7CisgICAgTGF5ZXJDaHJvbWl1bTo6ZHJh
d1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgo
KSwgZHJhd1RyYW5zZm9ybSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGRyYXdPcGFjaXR5KCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5t
YXRyaXhMb2NhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJv
Z3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCkpOworfQorCisKK3N0YXRpYyB2
b2lkIHdyaXRlSW5kZW50KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KQoreworICAgIGZvciAo
aW50IGkgPSAwOyBpICE9IGluZGVudDsgKytpKQorICAgICAgICB0cyA8PCAiICAiOworfQorCit2
b2lkIFBsdWdpbkNDTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRz
LCBpbnQgaW5kZW50KSBjb25zdAoreworICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOworICAg
IHRzIDw8ICJwbHVnaW4gbGF5ZXIgdGV4dHVyZSBpZDogIiA8PCBtX3RleHR1cmVJZCA8PCAiXG4i
OworICAgIENDTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKHRzLCBpbmRlbnQpOworfQor
Cit9CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL1BsdWdpbkND
TGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9QbHVnaW5DQ0xheWVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNmYTg0NjUzZTY4YWVhMmQ3MjRlZTkz
M2Q4NDkzYjQ3MDgwZGQ3MjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9QbHVnaW5DQ0xheWVySW1wbC5oCkBAIC0wLDAgKzEs
NjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFBsdWdpbkNDTGF5ZXJJbXBsX2gKKyNkZWZpbmUgUGx1Z2lu
Q0NMYXllckltcGxfaAorCisjaW5jbHVkZSAiUHJvZ3JhbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJT
aGFkZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgUGx1Z2luQ0NMYXllckltcGwgOiBwdWJsaWMgQ0NMYXllcklt
cGwgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsdWdpbkNDTGF5ZXJJbXBsPiBj
cmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFBsdWdpbkNDTGF5ZXJJbXBsKG93bmVyKSk7CisgICAgfQorICAgIHZpcnR1YWwgflBs
dWdpbkNDTGF5ZXJJbXBsKCk7CisKKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNo
YWRlclBvc1RleCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4RmxpcEFscGhhPiBQcm9ncmFtOworCisg
ICAgdmlydHVhbCB2b2lkIGRyYXcoKTsKKworICAgIHZpcnR1YWwgdm9pZCBkdW1wTGF5ZXJQcm9w
ZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKKworICAgIHZvaWQgc2V0VGV4
dHVyZUlkKHVuc2lnbmVkIGlkKSB7IG1fdGV4dHVyZUlkID0gaWQ7IH0KKworcHJpdmF0ZToKKyAg
ICBleHBsaWNpdCBQbHVnaW5DQ0xheWVySW1wbChMYXllckNocm9taXVtKik7CisKKyAgICB1bnNp
Z25lZCBtX3RleHR1cmVJZDsKK307CisKK30KKworI2VuZGlmIC8vIFBsdWdpbkNDTGF5ZXJJbXBs
X2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvVmlkZW9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9WaWRlb0NDTGF5ZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MGY3ZGNh
MDE4ZjQ3YmE1YzQwZGM3YWUwNWFiNWQ3NTAzNzRmZWM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvVmlkZW9DQ0xheWVySW1w
bC5jcHAKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJjYy9WaWRlb0NDTGF5
ZXJJbXBsLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkxh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSAiVmlkZW9MYXllckNocm9taXVtLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhlc2UgdmFsdWVzIGFyZSBtYWdpYyBu
dW1iZXJzIHRoYXQgYXJlIHVzZWQgaW4gdGhlIHRyYW5zZm9ybWF0aW9uCisvLyBmcm9tIFlVViB0
byBSR0IgY29sb3IgdmFsdWVzLgorLy8gVGhleSBhcmUgdGFrZW4gZnJvbSB0aGUgZm9sbG93aW5n
IHdlYnBhZ2U6CisvLyBodHRwOi8vd3d3LmZvdXJjYy5vcmcvZmNjeXZyZ2IucGhwCitjb25zdCBm
bG9hdCBWaWRlb0NDTGF5ZXJJbXBsOjp5dXYyUkdCWzldID0geworICAgIDEuMTY0ZiwgMS4xNjRm
LCAxLjE2NGYsCisgICAgMC5mLCAtLjM5MWYsIDIuMDE4ZiwKKyAgICAxLjU5NmYsIC0uODEzZiwg
MC5mLAorfTsKKworLy8gVGhlc2UgdmFsdWVzIG1hcCB0byAxNiwgMTI4LCBhbmQgMTI4IHJlc3Bl
Y3RpdmVseSwgYW5kIGFyZSBjb21wdXRlZAorLy8gYXMgYSBmcmFjdGlvbiBvdmVyIDI1NiAoZS5n
LiAxNiAvIDI1NiA9IDAuMDYyNSkuCisvLyBUaGV5IGFyZSB1c2VkIGluIHRoZSBZVVYgdG8gUkdC
QSBjb252ZXJzaW9uIGZvcm11bGE6CisvLyAgIFkgLSAxNiAgIDogR2l2ZXMgMTYgdmFsdWVzIG9m
IGhlYWQgYW5kIGZvb3Ryb29tIGZvciBvdmVyc2hvb3RpbmcKKy8vICAgVSAtIDEyOCAgOiBUdXJu
cyB1bnNpZ25lZCBVIGludG8gc2lnbmVkIFUgWy0xMjgsMTI3XQorLy8gICBWIC0gMTI4ICA6IFR1
cm5zIHVuc2lnbmVkIFYgaW50byBzaWduZWQgViBbLTEyOCwxMjddCitjb25zdCBmbG9hdCBWaWRl
b0NDTGF5ZXJJbXBsOjp5dXZBZGp1c3RbM10gPSB7CisgICAgLTAuMDYyNWYsCisgICAgLTAuNWYs
CisgICAgLTAuNWYsCit9OworCitWaWRlb0NDTGF5ZXJJbXBsOjpWaWRlb0NDTGF5ZXJJbXBsKExh
eWVyQ2hyb21pdW0qIG93bmVyKQorICAgIDogQ0NMYXllckltcGwob3duZXIpCit7Cit9CisKK1Zp
ZGVvQ0NMYXllckltcGw6On5WaWRlb0NDTGF5ZXJJbXBsKCkKK3sKKyAgICBjbGVhbnVwUmVzb3Vy
Y2VzKCk7Cit9CisKK3ZvaWQgVmlkZW9DQ0xheWVySW1wbDo6c2V0VGV4dHVyZShzaXplX3QgaSwg
dW5zaWduZWQgdGV4dHVyZUlkKQoreworICAgIEFTU0VSVChpIDwgMyk7CisgICAgbV90ZXh0dXJl
c1tpXSA9IHRleHR1cmVJZDsKK30KKwordm9pZCBWaWRlb0NDTGF5ZXJJbXBsOjpzZXRUZXh0dXJl
U2l6ZShzaXplX3QgaSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBBU1NFUlQoaSA8IDMp
OworICAgIG1fdGV4dHVyZVNpemVzW2ldID0gc2l6ZTsKK30KKwordm9pZCBWaWRlb0NDTGF5ZXJJ
bXBsOjpzZXRGcmFtZVNpemUoc2l6ZV90IGksIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAg
QVNTRVJUKGkgPCAzKTsKKyAgICBtX2ZyYW1lU2l6ZXNbaV0gPSBzaXplOworfQorCit2b2lkIFZp
ZGVvQ0NMYXllckltcGw6OmRyYXcoKQoreworICAgIGlmIChtX3NraXBzRHJhdykKKyAgICAgICAg
cmV0dXJuOworCisgICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CisgICAgY29uc3QgUkdCQVBy
b2dyYW0qIHJnYmFQcm9ncmFtID0gbGF5ZXJSZW5kZXJlcigpLT52aWRlb0xheWVyUkdCQVByb2dy
YW0oKTsKKyAgICBBU1NFUlQocmdiYVByb2dyYW0gJiYgcmdiYVByb2dyYW0tPmluaXRpYWxpemVk
KCkpOworICAgIGNvbnN0IFlVVlByb2dyYW0qIHl1dlByb2dyYW0gPSBsYXllclJlbmRlcmVyKCkt
PnZpZGVvTGF5ZXJZVVZQcm9ncmFtKCk7CisgICAgQVNTRVJUKHl1dlByb2dyYW0gJiYgeXV2UHJv
Z3JhbS0+aW5pdGlhbGl6ZWQoKSk7CisKKyAgICBzd2l0Y2ggKG1fZnJhbWVGb3JtYXQpIHsKKyAg
ICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6WVYxMjoKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJv
bWl1bTo6WVYxNjoKKyAgICAgICAgZHJhd1lVVih5dXZQcm9ncmFtKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OlJHQkE6CisgICAgICAgIGRyYXdSR0JBKHJn
YmFQcm9ncmFtKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gRklY
TUU6IEltcGxlbWVudCBvdGhlciBwYXRocy4KKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFZpZGVvQ0NMYXllckltcGw6OmRyYXdZVVYo
Y29uc3QgVmlkZW9DQ0xheWVySW1wbDo6WVVWUHJvZ3JhbSogcHJvZ3JhbSkKK3sKKyAgICBHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpOworICAg
IEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFMSkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnlQ
bGFuZV0pKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRTIpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZXNbVmlkZW9GcmFt
ZUNocm9taXVtOjp1UGxhbmVdKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUzKSk7CisgICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1
cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6dlBsYW5lXSkpOworCisgICAgbGF5ZXJSZW5kZXJlcigp
LT51c2VTaGFkZXIocHJvZ3JhbS0+cHJvZ3JhbSgpKTsKKyAgICB1bnNpZ25lZCB5RnJhbWVXaWR0
aCA9IG1fZnJhbWVTaXplc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnlQbGFuZV0ud2lkdGgoKTsKKyAg
ICB1bnNpZ25lZCB5VGV4dHVyZVdpZHRoID0gbV90ZXh0dXJlU2l6ZXNbVmlkZW9GcmFtZUNocm9t
aXVtOjp5UGxhbmVdLndpZHRoKCk7CisgICAgLy8gQXJiaXRyYXJpbHkgdGFrZSB0aGUgdSBzaXpl
cyBiZWNhdXNlIHUgYW5kIHYgZGltZW5zaW9ucyBhcmUgaWRlbnRpY2FsLgorICAgIHVuc2lnbmVk
IHV2RnJhbWVXaWR0aCA9IG1fZnJhbWVTaXplc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnVQbGFuZV0u
d2lkdGgoKTsKKyAgICB1bnNpZ25lZCB1dlRleHR1cmVXaWR0aCA9IG1fdGV4dHVyZVNpemVzW1Zp
ZGVvRnJhbWVDaHJvbWl1bTo6dVBsYW5lXS53aWR0aCgpOworCisgICAgZmxvYXQgeVdpZHRoU2Nh
bGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4oeUZyYW1lV2lkdGgpIC8geVRleHR1cmVXaWR0
aDsKKyAgICBmbG9hdCB1dldpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4odXZG
cmFtZVdpZHRoKSAvIHV2VGV4dHVyZVdpZHRoOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51
bmlmb3JtMWYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkueVdpZHRoU2NhbGVGYWN0b3JMb2NhdGlv
bigpLCB5V2lkdGhTY2FsZUZhY3RvcikpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlm
b3JtMWYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudXZXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24o
KSwgdXZXaWR0aFNjYWxlRmFjdG9yKSk7CisKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5p
Zm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkueVRleHR1cmVMb2NhdGlvbigpLCAxKSk7
CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNo
YWRlcigpLnVUZXh0dXJlTG9jYXRpb24oKSwgMikpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS52VGV4dHVyZUxvY2F0aW9uKCks
IDMpKTsKKworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KHByb2dy
YW0tPmZyYWdtZW50U2hhZGVyKCkuY2NNYXRyaXhMb2NhdGlvbigpLCAwLCBjb25zdF9jYXN0PGZs
b2F0Kj4oeXV2MlJHQiksIDEpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTNm
dihwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnl1dkFkakxvY2F0aW9uKCksIGNvbnN0X2Nhc3Q8
ZmxvYXQqPih5dXZBZGp1c3QpLCAxKSk7CisKKyAgICBMYXllckNocm9taXVtOjpkcmF3VGV4dHVy
ZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCBkcmF3
VHJhbnNmb3JtKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHMo
KS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExv
Y2F0aW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT5m
cmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKSk7CisKKyAgICAvLyBSZXNldCBhY3RpdmUg
dGV4dHVyZSBiYWNrIHRvIHRleHR1cmUgMC4KKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0
aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKK30KKwordm9pZCBWaWRl
b0NDTGF5ZXJJbXBsOjpkcmF3UkdCQShjb25zdCBWaWRlb0NDTGF5ZXJJbXBsOjpSR0JBUHJvZ3Jh
bSogcHJvZ3JhbSkKK3sKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVu
ZGVyZXIoKS0+Y29udGV4dCgpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOworICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJl
c1tWaWRlb0ZyYW1lQ2hyb21pdW06OnJnYlBsYW5lXSkpOworCisgICAgbGF5ZXJSZW5kZXJlcigp
LT51c2VTaGFkZXIocHJvZ3JhbS0+cHJvZ3JhbSgpKTsKKyAgICB1bnNpZ25lZCBmcmFtZVdpZHRo
ID0gbV9mcmFtZVNpemVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6cmdiUGxhbmVdLndpZHRoKCk7Cisg
ICAgdW5zaWduZWQgdGV4dHVyZVdpZHRoID0gbV90ZXh0dXJlU2l6ZXNbVmlkZW9GcmFtZUNocm9t
aXVtOjpyZ2JQbGFuZV0ud2lkdGgoKTsKKyAgICBmbG9hdCB3aWR0aFNjYWxlRmFjdG9yID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGZyYW1lV2lkdGgpIC8gdGV4dHVyZVdpZHRoOworICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudGV4VHJhbnNm
b3JtTG9jYXRpb24oKSwgMCwgMCwgd2lkdGhTY2FsZUZhY3RvciwgMSkpOworCisgICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBs
ZXJMb2NhdGlvbigpLCAwKSk7CisKKyAgICBMYXllckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFk
KGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCBkcmF3VHJhbnNm
b3JtKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHMoKS53aWR0
aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9u
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT5mcmFnbWVu
dFNoYWRlcigpLmFscGhhTG9jYXRpb24oKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlSW5kZW50
KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KQoreworICAgIGZvciAoaW50IGkgPSAwOyBpICE9
IGluZGVudDsgKytpKQorICAgICAgICB0cyA8PCAiICAiOworfQorCit2b2lkIFZpZGVvQ0NMYXll
ckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNv
bnN0Cit7CisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CisgICAgdHMgPDwgInZpZGVvIGxh
eWVyXG4iOworICAgIENDTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKHRzLCBpbmRlbnQp
OworfQorCit9CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL1Zp
ZGVvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL1ZpZGVvQ0NMYXllckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZDhmYjY5Y2IxYzk0ZjcyNjYz
NWI0YjZkMWVmYmM3ZDE2NDcyYzA0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvVmlkZW9DQ0xheWVySW1wbC5oCkBAIC0wLDAg
KzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFZpZGVvQ0NMYXllckltcGxfaAorI2RlZmluZSBWaWRl
b0NDTGF5ZXJJbXBsX2gKKworI2luY2x1ZGUgIlByb2dyYW1CaW5kaW5nLmgiCisjaW5jbHVkZSAi
U2hhZGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJWaWRlb0ZyYW1lQ2hyb21pdW0uaCIKKyNpbmNs
dWRlICJjYy9DQ0xheWVySW1wbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFZp
ZGVvRnJhbWVQcm92aWRlcjsKKworY2xhc3MgVmlkZW9DQ0xheWVySW1wbCA6IHB1YmxpYyBDQ0xh
eWVySW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VmlkZW9DQ0xheWVySW1w
bD4gY3JlYXRlKExheWVyQ2hyb21pdW0qIG93bmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBWaWRlb0NDTGF5ZXJJbXBsKG93bmVyKSk7CisgICAgfQorICAgIHZpcnR1YWwg
flZpZGVvQ0NMYXllckltcGwoKTsKKworICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4
U2hhZGVyUG9zVGV4VHJhbnNmb3JtLCBGcmFnbWVudFNoYWRlclJHQkFUZXhGbGlwQWxwaGE+IFJH
QkFQcm9ncmFtOworICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4
WVVWU3RyZXRjaCwgRnJhZ21lbnRTaGFkZXJZVVZWaWRlbz4gWVVWUHJvZ3JhbTsKKworICAgIHZp
cnR1YWwgdm9pZCBkcmF3KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGll
cyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFNraXBzRHJh
dyhib29sIHNraXBzRHJhdykgeyBtX3NraXBzRHJhdyA9IHNraXBzRHJhdzsgfQorICAgIHZvaWQg
c2V0RnJhbWVGb3JtYXQoVmlkZW9GcmFtZUNocm9taXVtOjpGb3JtYXQgZm9ybWF0KSB7IG1fZnJh
bWVGb3JtYXQgPSBmb3JtYXQ7IH0KKyAgICB2b2lkIHNldFRleHR1cmUoc2l6ZV90LCB1bnNpZ25l
ZCk7CisgICAgdm9pZCBzZXRUZXh0dXJlU2l6ZShzaXplX3QsIGNvbnN0IEludFNpemUmKTsKKyAg
ICB2b2lkIHNldEZyYW1lU2l6ZShzaXplX3QsIGNvbnN0IEludFNpemUmKTsKKworcHJpdmF0ZToK
KyAgICBleHBsaWNpdCBWaWRlb0NDTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qKTsKKworICAgIHZv
aWQgZHJhd1lVVihjb25zdCBZVVZQcm9ncmFtKik7CisgICAgdm9pZCBkcmF3UkdCQShjb25zdCBS
R0JBUHJvZ3JhbSopOworCisgICAgc3RhdGljIGNvbnN0IGZsb2F0IHl1djJSR0JbOV07CisgICAg
c3RhdGljIGNvbnN0IGZsb2F0IHl1dkFkanVzdFszXTsKKworICAgIGJvb2wgbV9za2lwc0RyYXc7
CisgICAgVmlkZW9GcmFtZUNocm9taXVtOjpGb3JtYXQgbV9mcmFtZUZvcm1hdDsKKyAgICB1bnNp
Z25lZCBtX3RleHR1cmVzWzNdOworICAgIEludFNpemUgbV90ZXh0dXJlU2l6ZXNbM107CisgICAg
SW50U2l6ZSBtX2ZyYW1lU2l6ZXNbM107Cit9OworCit9CisKKyNlbmRpZiAvLyBWaWRlb0NDTGF5
ZXJJbXBsX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86519</attachid>
            <date>2011-03-22 15:21:07 -0700</date>
            <delta_ts>2011-03-22 15:30:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56793-20110322152106.patch</filename>
            <type>text/plain</type>
            <size>86589</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE1OTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0YzJkZmNiNTQ2N2ZlYzg4
MDAwMmUzOGI0NmE3ODk1ZWVkOWUxNmI0Li42YWNkZGU1YjFjZWQyMzA1MGYzOWEzM2FkZjI1MmJh
NjE4NTY2YTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQ3IEBACisyMDExLTAzLTIxICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBNb3ZlIGRyYXcgaW1wbGVtZW50
YXRpb25zIHRvIENDTGF5ZXJJbXBsIGZvciBldmVyeXRoaW5nIGV4Y2VwdCBjb250ZW50IGxheWVy
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY3OTMK
KworICAgICAgICBNb3ZlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGxheWVyJ3MgZHJhdygp
IGZ1bmN0aW9uIGZyb20gTGF5ZXJDaHJvbWl1bSBzdWJjbGFzc2VzIHRvIENDTGF5ZXJJbXBsIHN1
YmNsYXNzZXMgZm9yIAorICAgICAgICBhbGwgbGF5ZXIgdHlwZXMgZXhjZXB0IGNvbnRlbnQgbGF5
ZXJzLiAgVGhpcyBnZXRzIHVzIGNsb3NlciB0byBkZWNvdXBsaW5nIHRoZSBjb21wb3NpdGUgc3Rl
cCBpdHNlbGYgZnJvbSB1cGRhdGluZyB0aGUgbGF5ZXJzLgorCisgICAgICAgIFRoZSBiaWdnZXN0
IGNoYW5nZSBpbiB0aGlzIHBhdGNoIGlzIGFkZGluZyBhIHNldCBvZiBDQ0xheWVySW1wbCBzdWJj
bGFzc2VzIHRvIGltcGxlbWVudCB0aGUgZGlmZmVyZW50IGRyYXdpbmcgcm91dGluZXMKKyAgICAg
ICAgYW5kIG1vdmluZyB0aGUgY29kZSBmcm9tIGVhY2ggWFhYTGF5ZXJDaHJvbWl1bSB0byBYWFhD
Q0xheWVySW1wbC4gIEluIG9yZGVyIHRvIHJlbmRlciBmcm9tIHRoZSBDQ0xheWVySW1wbCBzaWRl
IGFsbCBzdGF0ZQorICAgICAgICBuZWVkZWQgYXQgZHJhdyB0aW1lIGFsc28gaGFzIHRvIGJlIHN5
bmNocm9uaXplZCwgd2hpY2ggaXMgcGVyZm9ybWVkIGluIHVwZGF0ZVRvTGF5ZXIoKS4KKworICAg
ICAgICBPbiB0aGUgTGF5ZXJSZW5kZXJlckNocm9taXVtIHNpZGUgdGhlcmUgYXJlIGEgZmV3IGNo
YW5nZXMuICBJJ3ZlIHNwbGl0IHRoZSB1cGRhdGVDb250ZW50cyBjYWxscyBvbiBMYXllckNocm9t
aXVtcyBpbnRvIHR3byBvcGVyYXRpb25zCisgICAgICAgIHRlbnRhdGl2ZWx5IG5hbWVkICdwYWlu
dENvbnRlbnRzSWZOZWVkZWQnIGFuZCAndXBkYXRlQ29tcG9zaXRvclJlc291cmNlcycuICBwYWlu
dENvbnRlbnRzKCkgaXMgdXNlZCBmb3IgYW55IGNvZGUgdGhhdCBjYWxscyBpbnRvIFdlYktpdCBp
biBvcmRlciB0byBnZW5lcmF0ZQorICAgICAgICBuZXcgcGl4ZWwgZGF0YS4gIEl0J3MgZXhwZWN0
ZWQgdGhhdCB0aGlzIGNhbGwgbWF5IHRha2UgYSBsb25nIHBlcmlvZCBvZiB0aW1lIGFuZCBtYXkg
aW52b2x2ZSAib2RkIiBzaWRlIGVmZmVjdHMuICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkg
aXMgdXNlZCBmb3IKKyAgICAgICAgY29kZSB0aGF0IG5lZWRzIHRvIHVwZGF0ZSB0aGUgY29tcG9z
aXRvcidzIHRleHR1cmUgZGF0YSBvciBvdGhlciBzdGF0ZS4gIEl0IGlzIG5vdCBleHBlY3RlZCB0
aGF0IHRoaXMgY2FsbGJhY2sgd2lsbCB0YWtlIGxvbmcgKHNpbmNlIGl0J3MganVzdCBpbnNlcnRp
bmcKKyAgICAgICAgY29tbWFuZHMgaW50byB0aGUgR0wgY29tbWFuZCBzdHJlYW0sIGlkZWFsbHkp
IGFuZCB0aGlzIGNhbGwgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBhY2Nlc3MgdG8gdGhlIGNvbXBvc2l0
b3IncyBjb250ZXh0LCB1bmxpa2UgcGFpbnRDb250ZW50cygpLgorCisgICAgICAgIFRoZSB1cGRh
dGVBbmREcmF3TGF5ZXJzIGN5Y2xlIG5vdyBsb29rcyBsaWtlIHRoaXM6CisgICAgICAgIDEuKSB1
cGRhdGUgdGhlIHJvb3QgY29udGVudCBsYXllcgorICAgICAgICAyLikgdXBkYXRlIHRoZSByb290
IGxheWVyIHNjcm9sbGJhcnMKKyAgICAgICAgMy4pIGZvciBlYWNoIExheWVyQ2hyb21pdW0gaW4g
dHJlZSBvcmRlcjoKKyAgICAgICAgICBhLikgZW5zdXJlIGEgQ0NMYXllckltcGwgb2YgdGhlIGNv
cnJlY3QgdHlwZSBleGlzdHMgZm9yIHRoaXMgbGF5ZXIKKyAgICAgICAgICBiLikgcHVzaCBhbGwg
ZHJhdyB0aW1lIHByb3BlcnRpZXMgZnJvbSB0aGUgTGF5ZXJDaHJvbWl1bSB0byB0aGUgQ0NMYXll
ckltcGwKKyAgICAgICAgICBjLikgY29uc3RydWN0IHRoZSBhcHByb3ByaWF0ZSBkcmF3IHRyYW5z
Zm9ybXMsIHJlbmRlciBzdXJmYWNlcyBhbmQgcmVuZGVyIHN1cmZhY2Ugei1vcmRlciBzdWJsYXll
ciBsaXN0cworICAgICAgICA0LikgZm9yIGVhY2ggTGF5ZXJDaHJvbWl1bSBpbiB0cmVlIG9yZGVy
LCBwYWludCB0aGUgbGF5ZXIncyBjb250ZW50cworICAgICAgICA1LikgZm9yIGVhY2ggTGF5ZXJD
aHJvbWl1bSBpbiB0cmVlIG9yZGVyLCB1cGRhdGUgdGhlIGFzc29jaWF0ZSBjb21wb3NpdG9yIHJl
c291cmNlcyAodGV4dHVyZXMsIGV0YykKKyAgICAgICAgNi4pIGRyYXcgdGhlIHJvb3QgbGF5ZXIg
YW5kIGl0cyBzY3JvbGxiYXJzCisgICAgICAgIDcuKSBmb3IgZWFjaCBDQ0xheWVySW1wbCBpbiBy
ZW5kZXIgc3VyZmFjZSBvcmRlciwgZHJhdyBpdAorCisgICAgICAgIFN0ZXAgMyBzaG91bGQgcmVh
bGx5IGhhcHBlbiBhZnRlciBzdGVwIDUsIGJ1dCByaWdodCBub3cgcGFpbnRpbmcgYSBjb250ZW50
IGxheWVyIHJlcXVpcmVzIGtub3dsZWRnZSBvZiB0aGUgcmVuZGVyIHN1cmZhY2UgcHJvcGVydGll
cyBhbmQgZHJhdyB0cmFuc2Zvcm1zCisgICAgICAgIGluIG9yZGVyIHRvIHBhaW50LiAgV2UgYWxz
byBjdXJyZW50bHkgcHVzaCBsYXllciBwcm9wZXJ0aWVzIGZyb20gTGF5ZXJDaHJvbWl1bS0+Q0NM
YXllckltcGxzIHR3aWNlIG5vdyAtIG9uY2UgYXQgMy5iIGFuZCBvbmNlIGFmdGVyIDUgc28gd2Ug
Y2FuIHBpY2sKKyAgICAgICAgdXAgYW55IHRleHR1cmUgdXBkYXRlcy4gIFRoaXMgd2lsbCBhbHNv
IGdldCBmaXhlZCB3aGVuIHRoZSBwYWludCBkZXBlbmRlbmN5IG9uIHJlbmRlciBzdXJmYWNlcyBp
cyByZXNvbHZlZC4KKworICAgICAgICBJIGhhdmVuJ3QgbW9kaWZpZWQgdGhlIHJvb3QgbGF5ZXIg
b3IgY29udGVudCBsYXllcnMgaW4gb3JkZXIgdG8gbWluaW1pemUgY29uZmxpY3RzIHdpdGggdGhl
IG90aGVyIHBlbmRpbmcgd29yayBpbiB0aGF0IGFyZWEuCisKKyAgICAgICAgVGVzdHM6IGNvbXBv
c2l0aW5nLworCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1
bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6dXBk
YXRlVG9MYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nv
bnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNo
cm9taXVtOjpyZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6YmluZENvbnRlbnRzVGV4dHVy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjpwYWlu
dENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VMYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpM
YXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmNsZWFudXBS
ZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjp1cGRhdGVUb0xheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmR1bXBMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpM
YXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OmNjTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OmxheWVyUmVuZGVyZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnBh
aW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnVw
ZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OnNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnBhaW50Q29udGVudHNSZWN1
cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVD
b21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjYW52YXNMYXllclByb2dyYW0pOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpwbHVnaW5MYXllclByb2dyYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWRlb0xheWVyUkdCQVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWRlb0xh
eWVyWVVWUHJvZ3JhbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1
Z2luTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9t
aXVtOjpjcmVhdGVDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNo
cm9taXVtOjpzZXRUZXh0dXJlSWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJv
bWl1bTo6dXBkYXRlVG9MYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJD
aHJvbWl1bTo6dGV4dHVyZUlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNo
cm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVy
Q2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6
VmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVUb0xheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6ZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0QW5jaG9yUG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNldEFuY2hvclBvaW50Wik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0TWFza3NUb0JvdW5kcyk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVySW1wbDo6c2V0T3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1w
bDo6c2V0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNldFByZXNl
cnZlczNEKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRTdWJsYXllclRyYW5z
Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0VHJhbnNmb3JtKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5j
cHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Q0NDYW52YXNMYXll
ckltcGw6OkNDQ2FudmFzTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQ2FudmFzTGF5
ZXJJbXBsOjp+Q0NDYW52YXNMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NDYW52YXNM
YXllckltcGw6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVJbmRlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NDYW52YXNMYXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Bs
dWdpbkxheWVyQ2hyb21pdW0uaC4KKyAgICAgICAgKFdlYkNvcmU6OkNDQ2FudmFzTGF5ZXJJbXBs
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NDYW52YXNMYXllckltcGw6OnNldFRleHR1
cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0NhbnZhc0xheWVySW1wbDo6c2V0UHJlbXVsdGlw
bGllZEFscGhhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Bs
dWdpbkxheWVySW1wbC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwLgorICAgICAgICAoV2ViQ29y
ZTo6Q0NQbHVnaW5MYXllckltcGw6OkNDUGx1Z2luTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUGx1Z2luTGF5ZXJJbXBsOjp+Q0NQbHVnaW5MYXllckltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NQbHVnaW5MYXllckltcGw6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVJ
bmRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5MYXllckltcGw6OmR1bXBMYXllclBy
b3BlcnRpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1
Z2luTGF5ZXJJbXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uaC4KKyAgICAgICAgKFdlYkNvcmU6OkND
UGx1Z2luTGF5ZXJJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5MYXll
ckltcGw6OnNldFRleHR1cmVJZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NW
aWRlb0xheWVySW1wbDo6Q0NWaWRlb0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Zp
ZGVvTGF5ZXJJbXBsOjp+Q0NWaWRlb0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Zp
ZGVvTGF5ZXJJbXBsOjpzZXRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXll
ckltcGw6OnNldFRleHR1cmVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllcklt
cGw6OnNldEZyYW1lU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpk
cmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmRyYXdZVVYpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6ZHJhd1JHQkEpOgorICAgICAgICAoV2Vi
Q29yZTo6d3JpdGVJbmRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6
ZHVtcExheWVyUHJvcGVydGllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDVmlk
ZW9MYXllckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBs
OjpzZXRTa2lwc0RyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6c2V0
RnJhbWVGb3JtYXQpOgorCiAyMDExLTAzLTIxICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUb3IgQXJuZSBWZXN0YsO4LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IDQwNjRlMDU3YTI5Y2JiMTY3M2QyYWE5ZDc4Nzk3YzNjYTk5NjAzNGQuLjFhZTVk
ODYxMWQxYjEwNmYyMmYzZWQ4MWI5YmUzNjExZGY2YTQ4YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTQxODIsMTAgKzQxODIsMTYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllcklt
cGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFk
c1VwRGlzcGxheS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDSGVhZHNVcERpc3BsYXkuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwu
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVv
TGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQ
bGF0Zm9ybURhdGFDb2NvYS5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZWZs
L0ZvbnRFZmwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9lZmwvSWNvbkVm
bC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYWQ5NjFh
YTZlM2RkM2RjNWRhNzBmOGEzZTY0YWVhZTIyNTFiMzEyOC4uNGNiMTE5YTRkN2U4ZDcxMzY5NjU5
YmQyMGZkYTVmMTFkZDUwMWMxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0u
Y3BwCkBAIC01Niw3ICs1Niw3IEBAIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6fkNhbnZhczJETGF5
ZXJDaHJvbWl1bSgpCiAgICAgICAgIGxheWVyUmVuZGVyZXJDb250ZXh0KCktPmRlbGV0ZVRleHR1
cmUobV90ZXh0dXJlSWQpOwogfQogCi12b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29udGVudHNJZkRpcnR5KCkKK3ZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjp1cGRhdGVDb21w
b3NpdG9yUmVzb3VyY2VzKCkKIHsKICAgICBpZiAoIW1fY29udGVudHNEaXJ0eSB8fCAhbV9kcmF3
aW5nQnVmZmVyKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1
bS5oCmluZGV4IGExNGNiOTgzYTViZDE4NTM1YjRhNjQ0NzdmZTUwNGVlOGUyYzQ0MTMuLjgxYjEx
OGM1YjVkZmU5YzMxYTFlYjI0OWQ1OTkyZGI0MjZlZDIwOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJE
TGF5ZXJDaHJvbWl1bS5oCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IGNyZWF0ZShEcmF3aW5nQnVmZmVyKiwgR3Jh
cGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CiAgICAgdmlydHVhbCB+Q2FudmFzMkRMYXllckNo
cm9taXVtKCk7CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHNJZkRpcnR5KCk7CisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKIAogICAgIHZvaWQgc2V0
VGV4dHVyZUNoYW5nZWQoKTsKICAgICB1bnNpZ25lZCB0ZXh0dXJlSWQoKSBjb25zdDsKQEAgLTU1
LDggKzU1LDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBleHBsaWNpdCBDYW52YXMyRExheWVy
Q2hyb21pdW0oRHJhd2luZ0J1ZmZlciosIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwog
ICAgIERyYXdpbmdCdWZmZXIqIG1fZHJhd2luZ0J1ZmZlcjsKLQotICAgIHN0YXRpYyB1bnNpZ25l
ZCBtX3NoYWRlclByb2dyYW1JZDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1
bS5jcHAKaW5kZXggMDI2NDg2ODk5MjRjMTYwNzE1ZmY0YzJiOWM0Zjg3NDgxZmY4YTE0Mi4uNDcz
MTA4NDk0M2IwZTM3ZTcyMDQzNzk3NTlhMjJkZmFiMjNjMjJiMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTQwLDggKzQwLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi11bnNpZ25lZCBDYW52YXNMYXllckNocm9taXVtOjptX3NoYWRlclByb2dyYW1JZCA9IDA7
Ci0KIENhbnZhc0xheWVyQ2hyb21pdW06OkNhbnZhc0xheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXll
ckNocm9taXVtKiBvd25lcikKICAgICA6IExheWVyQ2hyb21pdW0ob3duZXIpCiAgICAgLCBtX3Rl
eHR1cmVDaGFuZ2VkKHRydWUpCkBAIC01NCwyMiArNTIsMTggQEAgQ2FudmFzTGF5ZXJDaHJvbWl1
bTo6fkNhbnZhc0xheWVyQ2hyb21pdW0oKQogewogfQogCi12b2lkIENhbnZhc0xheWVyQ2hyb21p
dW06OmRyYXcoKQorUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gQ2FudmFzTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlQ0NMYXllckltcGwoKQogewotICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOwotICAg
IGNvbnN0IENhbnZhc0xheWVyQ2hyb21pdW06OlByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRl
cmVyKCktPmNhbnZhc0xheWVyUHJvZ3JhbSgpOwotICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dy
YW0tPmluaXRpYWxpemVkKCkpOwotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5
ZXJSZW5kZXJlckNvbnRleHQoKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLSAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVy
ZUlkKSk7Ci0gICAgR0MzRGVudW0gc2ZhY3RvciA9IG1fcHJlbXVsdGlwbGllZEFscGhhID8gR3Jh
cGhpY3NDb250ZXh0M0Q6Ok9ORSA6IEdyYXBoaWNzQ29udGV4dDNEOjpTUkNfQUxQSEE7Ci0gICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBHcmFwaGljc0NvbnRleHQz
RDo6T05FX01JTlVTX1NSQ19BTFBIQSkpOwotICAgIGxheWVyUmVuZGVyZXIoKS0+dXNlU2hhZGVy
KHByb2dyYW0tPnByb2dyYW0oKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0x
aShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7Ci0gICAg
ZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRy
aXgoKSwgY2NMYXllckltcGwoKS0+ZHJhd1RyYW5zZm9ybSgpLAotICAgICAgICAgICAgICAgICAg
ICAgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGNjTGF5ZXJJbXBsKCktPmRy
YXdPcGFjaXR5KCksCi0gICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIo
KS5tYXRyaXhMb2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21l
bnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCkpOworICAgIHJldHVybiBDQ0NhbnZhc0xheWVySW1w
bDo6Y3JlYXRlKHRoaXMpOworfQorCit2b2lkIENhbnZhc0xheWVyQ2hyb21pdW06OnVwZGF0ZVRv
TGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQoreworICAgIExheWVyQ2hyb21pdW06OnVwZGF0ZVRv
TGF5ZXIobGF5ZXIpOworCisgICAgQ0NDYW52YXNMYXllckltcGwqIGNhbnZhc0xheWVyID0gc3Rh
dGljX2Nhc3Q8Q0NDYW52YXNMYXllckltcGwqPihsYXllcik7CisgICAgY2FudmFzTGF5ZXItPnNl
dFRleHR1cmVJZChtX3RleHR1cmVJZCk7CisgICAgY2FudmFzTGF5ZXItPnNldFByZW11bHRpcGxp
ZWRBbHBoYShtX3ByZW11bHRpcGxpZWRBbHBoYSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVy
Q2hyb21pdW0uaAppbmRleCBlZDNhMDZmODc4ZDQ1M2YwYzJlMzI0ZGNiYzQxZjY3ODFmOTkzZGEy
Li41MjQ5NWZjZGI5OWFlZTQzNDk3ZTUxMjg4OTEzOTc5MzE4MzkzOTI5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9t
aXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzTGF5ZXJDaHJvbWl1bS5oCkBAIC00Myw5ICs0Myw5IEBAIGNsYXNzIENhbnZhc0xheWVyQ2hy
b21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q2Fu
dmFzTGF5ZXJDaHJvbWl1bSgpOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoKTsKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZUNDTGF5ZXJJbXBsKCk7CiAKLSAgICB0
eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleCwgRnJhZ21lbnRTaGFkZXJS
R0JBVGV4RmxpcEFscGhhPiBQcm9ncmFtOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUb0xheWVy
KENDTGF5ZXJJbXBsKik7CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDYW52YXNMYXllckNo
cm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwpAQCAtNTUsOSArNTUsNiBAQCBw
cm90ZWN0ZWQ6CiAgICAgYm9vbCBtX3RleHR1cmVDaGFuZ2VkOwogICAgIHVuc2lnbmVkIG1fdGV4
dHVyZUlkOwogICAgIGJvb2wgbV9wcmVtdWx0aXBsaWVkQWxwaGE7Ci0KLXByaXZhdGU6Ci0gICAg
c3RhdGljIHVuc2lnbmVkIG1fc2hhZGVyUHJvZ3JhbUlkOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29u
dGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4IGZjODU3ZjE2YTY3ZTYyMDdhOGE4MTJkODFiY2Rj
ODJiNTUyMzA4ODMuLjRlYTljOTJlMWNhYWQ1ZWZlYzMzZjJkOTkxMjY2MWZiZjQwMTU5YTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRl
bnRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgdm9p
ZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpCiAgICAgbV9jb250ZW50
c1RleHR1cmUuY2xlYXIoKTsKIH0KIAotYm9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cmVxdWly
ZXNDbGlwcGVkVXBkYXRlUmVjdCgpIGNvbnN0Citib29sIENvbnRlbnRMYXllckNocm9taXVtOjpy
ZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCkKIHsKICAgICAvLyBUbyBhdm9pZCBhbGxvY2F0aW5n
IGV4Y2Vzc2l2ZWx5IGxhcmdlIHRleHR1cmVzLCBzd2l0Y2ggaW50byAibGFyZ2UgbGF5ZXIgbW9k
ZSIgaWYKICAgICAvLyBvbmUgb2YgdGhlIGxheWVyJ3MgZGltZW5zaW9ucyBpcyBsYXJnZXIgdGhh
biAyMDAwIHBpeGVscyBvciB0aGUgc2l6ZSBvZgpAQCAtNzcsNyArNzcsNyBAQCBib29sIENvbnRl
bnRMYXllckNocm9taXVtOjpyZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCkgY29uc3QKICAgICAg
ICAgICAgIHx8ICFsYXllclJlbmRlcmVyKCktPmNoZWNrVGV4dHVyZVNpemUoYm91bmRzKCkpKTsK
IH0KIAotdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KCkK
K3ZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKIHsKICAg
ICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSBzdGF0aWNfY2FzdDxSZW5kZXJMYXllckJh
Y2tpbmcqPihtX293bmVyLT5jbGllbnQoKSk7CiAgICAgaWYgKCFiYWNraW5nIHx8IGJhY2tpbmct
PnBhaW50aW5nR29lc1RvV2luZG93KCkpCkBAIC0yNjksNiArMjY5LDExIEBAIHZvaWQgQ29udGVu
dExheWVyQ2hyb21pdW06OmRyYXcoKQogICAgIHVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpOwog
fQogCit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2Vz
KCkKK3sKKyAgICB1cGRhdGVUZXh0dXJlSWZOZWVkZWQoKTsKK30KKwogdm9pZCBDb250ZW50TGF5
ZXJDaHJvbWl1bTo6dW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCkKIHsKICAgICBpZiAoIW1fc2tp
cHNEcmF3ICYmIG1fY29udGVudHNUZXh0dXJlKQpAQCAtMjc3LDggKzI4Miw2IEBAIHZvaWQgQ29u
dGVudExheWVyQ2hyb21pdW06OnVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpCiAKIHZvaWQgQ29u
dGVudExheWVyQ2hyb21pdW06OmJpbmRDb250ZW50c1RleHR1cmUoKQogewotICAgIHVwZGF0ZVRl
eHR1cmVJZk5lZWRlZCgpOwotCiAgICAgaWYgKCFtX3NraXBzRHJhdyAmJiBtX2NvbnRlbnRzVGV4
dHVyZSkKICAgICAgICAgbV9jb250ZW50c1RleHR1cmUtPmJpbmRUZXh0dXJlKCk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uaAppbmRleCA2MmJmOWQxZTJjODZjYWM1OGEyZmFiYTlj
MjIwZmQzODQ1MGEyOGMxLi5jZjI5NmFiOTA3ZDVhNzFjYWExOGU0YTU1ZTJjZDE4Mzc3OGM0YjFl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKQEAgLTUwLDcgKzUwLDggQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCB+Q29udGVudExheWVyQ2hyb21pdW0oKTsKIAotICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVDb250ZW50c0lmRGlydHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRD
b250ZW50c0lmRGlydHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcygpOwogICAgIHZpcnR1YWwgdm9pZCB1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgYmluZENvbnRlbnRzVGV4dHVyZSgpOwogCkBAIC02Myw3ICs2NCw3IEBA
IHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDb250ZW50TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xh
eWVyQ2hyb21pdW0qIG93bmVyKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwUmVzb3VyY2Vz
KCk7Ci0gICAgYm9vbCByZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCkgY29uc3Q7CisgICAgYm9v
bCByZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCk7CiAgICAgdm9pZCByZXNpemVVcGxvYWRCdWZm
ZXIoY29uc3QgSW50U2l6ZSYpOwogCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVB
c1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJDb250ZW50TGF5ZXIiOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VM
YXllckNocm9taXVtLmNwcAppbmRleCA3YzQyMzY2Y2RmMGI1MzVjZjNjNWIyODAxOTEyM2JjZjU0
N2Y4ZWM3Li42MGMxMzMyZGYwNzIwY2YwMzJkNGU4N2VkOWFjZTM4NTVjYjA4MjRmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBJbWFnZUxh
eWVyQ2hyb21pdW06OnNldENvbnRlbnRzKEltYWdlKiBjb250ZW50cykKICAgICBzZXROZWVkc0Rp
c3BsYXkoKTsKIH0KIAotdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZE
aXJ0eSgpCit2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQog
ewogICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOwogCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQg
SW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQogICAgIGlmIChyZXF1
aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCkpIHsKICAgICAgICAgLy8gVXNlIHRoZSBiYXNlIHZlcnNp
b24gb2YgdXBkYXRlQ29udGVudHMgd2hpY2ggZHJhd3MgYSBzdWJzZXQgb2YgdGhlCiAgICAgICAg
IC8vIGltYWdlIHRvIGEgYml0bWFwLCBhcyB0aGUgcGl4ZWwgY29udGVudHMgY2FuJ3QgYmUgdXBs
b2FkZWQgZGlyZWN0bHkuCi0gICAgICAgIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250
ZW50c0lmRGlydHkoKTsKKyAgICAgICAgQ29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVu
dHNJZkRpcnR5KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNo
cm9taXVtLmgKaW5kZXggY2M5MDY0ZDJjYWU4NzcxZTY5YTE3YjZlOGNhOTZiMWQxNjI0YmYzYy4u
NmFkZGFiYzg0ZjAzZWRiYjViZTZiOWNlOTc3NDAwNmNhMGFlODM3MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVt
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VM
YXllckNocm9taXVtLmgKQEAgLTUwLDcgKzUwLDcgQEAgY2xhc3MgSW1hZ2VMYXllckNocm9taXVt
IDogcHVibGljIENvbnRlbnRMYXllckNocm9taXVtIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJbWFnZUxheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0q
IG93bmVyID0gMCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHNJZkRpcnR5KCk7
CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCk7CiAgICAgdmlydHVhbCBi
b29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHM7IH0KIAogICAgIHZv
aWQgc2V0Q29udGVudHMoSW1hZ2UqIGltYWdlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXgg
ZmE3OTBmOTk5M2FjOWEyNTYyYzE0M2JhOWM2NGQxNTYyYWQ3ZTlkNC4uMjkyYjE5YjY0N2UxZjc5
ZTc1OTc3YjhiZGRlMTdjMzFhZDYxMjI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTYy
LDYgKzYyLDcgQEAgTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hy
b21pdW0qIG93bmVyKQogICAgIDogbV9vd25lcihvd25lcikKICAgICAsIG1fY29udGVudHNEaXJ0
eShmYWxzZSkKICAgICAsIG1fbWFza0xheWVyKDApCisgICAgLCBtX2NjTGF5ZXJJbXBsKDApCiAg
ICAgLCBtX3N1cGVybGF5ZXIoMCkKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX2RlYnVnSUQoc19u
ZXh0TGF5ZXJEZWJ1Z0lEKyspCkBAIC03OCw3ICs3OSw2IEBAIExheWVyQ2hyb21pdW06OkxheWVy
Q2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKICAgICAsIG1fZ2VvbWV0cnlG
bGlwcGVkKGZhbHNlKQogICAgICwgbV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZShmYWxzZSkK
ICAgICAsIG1fZG91YmxlU2lkZWQodHJ1ZSkKLSAgICAsIG1fY2NMYXllckltcGwoQ0NMYXllcklt
cGw6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fcmVwbGljYUxheWVyKDApCiB7CiB9CkBAIC05NSw3
ICs5NSw4IEBAIExheWVyQ2hyb21pdW06On5MYXllckNocm9taXVtKCkKIAogdm9pZCBMYXllckNo
cm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKIHsKLSAgICBtX2NjTGF5ZXJJbXBsLT5jbGVhbnVw
UmVzb3VyY2VzKCk7CisgICAgaWYgKG1fY2NMYXllckltcGwpCisgICAgICAgIG1fY2NMYXllcklt
cGwtPmNsZWFudXBSZXNvdXJjZXMoKTsKIH0KIAogdm9pZCBMYXllckNocm9taXVtOjpzZXRMYXll
clJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogcmVuZGVyZXIpCkBAIC0xMDYsOCArMTA3
LDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJD
aHJvbWl1bSogcmVuZGVyZXIpCiAgICAgICAgIGNsZWFudXBSZXNvdXJjZXMoKTsKICAgICAgICAg
c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgfQotCi0gICAgbV9jY0xheWVySW1wbC0+c2V0TGF5ZXJS
ZW5kZXJlcihyZW5kZXJlcik7CisgICAgbV9sYXllclJlbmRlcmVyID0gcmVuZGVyZXI7CiB9CiAK
IHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNDb21taXQoKQpAQCAtMjQxLDcgKzI0MSw2IEBA
IExheWVyQ2hyb21pdW0qIExheWVyQ2hyb21pdW06OnN1cGVybGF5ZXIoKSBjb25zdAogdm9pZCBM
YXllckNocm9taXVtOjpzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBtX25hbWUg
PSBuYW1lOwotICAgIG1fY2NMYXllckltcGwtPnNldE5hbWUobmFtZSk7CiB9CiAKIHZvaWQgTGF5
ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KQpA
QCAtMjg5LDYgKzI4OCwyNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnRvR0xNYXRyaXgoZmxvYXQq
IGZsYXR0ZW5lZCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG0pCiAgICAgZmxhdHRlbmVk
WzE1XSA9IG0ubTQ0KCk7CiB9CiAKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVG9MYXllcihD
Q0xheWVySW1wbCogbGF5ZXIpCit7CisgICAgbGF5ZXItPnNldEFuY2hvclBvaW50KG1fYW5jaG9y
UG9pbnQpOworICAgIGxheWVyLT5zZXRBbmNob3JQb2ludFoobV9hbmNob3JQb2ludFopOworICAg
IGxheWVyLT5zZXRCb3VuZHMobV9ib3VuZHMpOworICAgIGxheWVyLT5zZXREb3VibGVTaWRlZCht
X2RvdWJsZVNpZGVkKTsKKyAgICBsYXllci0+c2V0TGF5ZXJSZW5kZXJlcihtX2xheWVyUmVuZGVy
ZXIuZ2V0KCkpOworICAgIGxheWVyLT5zZXRNYXNrc1RvQm91bmRzKG1fbWFza3NUb0JvdW5kcyk7
CisgICAgbGF5ZXItPnNldE5hbWUobV9uYW1lKTsKKyAgICBsYXllci0+c2V0T3BhY2l0eShtX29w
YWNpdHkpOworICAgIGxheWVyLT5zZXRQb3NpdGlvbihtX3Bvc2l0aW9uKTsKKyAgICBsYXllci0+
c2V0UHJlc2VydmVzM0QocHJlc2VydmVzM0QoKSk7CisgICAgbGF5ZXItPnNldFN1YmxheWVyVHJh
bnNmb3JtKG1fc3VibGF5ZXJUcmFuc2Zvcm0pOworICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0obV90
cmFuc2Zvcm0pOworCisgICAgaWYgKG1hc2tMYXllcigpKQorICAgICAgICBtYXNrTGF5ZXIoKS0+
dXBkYXRlVG9MYXllcihsYXllci0+bWFza0xheWVyKCkpOworICAgIGlmIChyZXBsaWNhTGF5ZXIo
KSkKKyAgICAgICAgcmVwbGljYUxheWVyKCktPnVwZGF0ZVRvTGF5ZXIobGF5ZXItPnJlcGxpY2FM
YXllcigpKTsKK30KKwogR3JhcGhpY3NDb250ZXh0M0QqIExheWVyQ2hyb21pdW06OmxheWVyUmVu
ZGVyZXJDb250ZXh0KCkgY29uc3QKIHsKICAgICBBU1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKQEAg
LTMzNSw3ICszNTUsOCBAQCB2b2lkIExheWVyQ2hyb21pdW06OmR1bXBMYXllcihUZXh0U3RyZWFt
JiB0cywgaW50IGluZGVudCkgY29uc3QKICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKICAg
ICB0cyA8PCBsYXllclR5cGVBc1N0cmluZygpIDw8ICIoIiA8PCBtX25hbWUgPDwgIilcbiI7CiAg
ICAgZHVtcExheWVyUHJvcGVydGllcyh0cywgaW5kZW50KzIpOwotICAgIG1fY2NMYXllckltcGwt
PmR1bXBMYXllclByb3BlcnRpZXModHMsIGluZGVudCsyKTsKKyAgICBpZiAobV9jY0xheWVySW1w
bCkKKyAgICAgICAgbV9jY0xheWVySW1wbC0+ZHVtcExheWVyUHJvcGVydGllcyh0cywgaW5kZW50
KzIpOwogICAgIGlmIChtX3JlcGxpY2FMYXllcikgewogICAgICAgICB3cml0ZUluZGVudCh0cywg
aW5kZW50KzIpOwogICAgICAgICB0cyA8PCAiUmVwbGljYTpcbiI7CkBAIC0zNjEsNiArMzgyLDIy
IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0
cywgaW50IGluZGVudCkgY29uc3QKIAogfQogCitQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBMYXll
ckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCit7CisgICAgcmV0dXJuIENDTGF5ZXJJbXBs
OjpjcmVhdGUodGhpcyk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllcklt
cGxJZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX2NjTGF5ZXJJbXBsKQorICAgICAgICBtX2NjTGF5
ZXJJbXBsID0gY3JlYXRlQ0NMYXllckltcGwoKTsKK30KKworQ0NMYXllckltcGwqIExheWVyQ2hy
b21pdW06OmNjTGF5ZXJJbXBsKCkKK3sKKyAgICByZXR1cm4gbV9jY0xheWVySW1wbC5nZXQoKTsK
K30KKwogLy8gQmVnaW4gY2FsbHMgdGhhdCBmb3J3YXJkIHRvIHRoZSBDQ0xheWVySW1wbC4KIC8v
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vIFRoZXNl
IGV4aXN0cyBqdXN0IGZvciBkZWJ1Z2dpbmcgKHZpYSBkcmF3RGVidWdCb3JkZXIoKSkuCkBAIC0z
NzAsMjUgKzQwNywxNSBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldEJvcmRlckNvbG9yKGNvbnN0
IENvbG9yJiBjb2xvcikKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi1Db2xvciBMYXllckNo
cm9taXVtOjpib3JkZXJDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY2NMYXllckltcGwt
PmRlYnVnQm9yZGVyQ29sb3IoKTsKLX0KLQogdm9pZCBMYXllckNocm9taXVtOjpzZXRCb3JkZXJX
aWR0aChmbG9hdCB3aWR0aCkKIHsKICAgICBtX2NjTGF5ZXJJbXBsLT5zZXREZWJ1Z0JvcmRlcldp
ZHRoKHdpZHRoKTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi1mbG9hdCBMYXllckNocm9t
aXVtOjpib3JkZXJXaWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY2NMYXllckltcGwtPmRl
YnVnQm9yZGVyV2lkdGgoKTsKLX0KLQogTGF5ZXJSZW5kZXJlckNocm9taXVtKiBMYXllckNocm9t
aXVtOjpsYXllclJlbmRlcmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jY0xheWVySW1wbC0+
bGF5ZXJSZW5kZXJlcigpOworICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXIuZ2V0KCk7CiB9CiAK
IC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaAppbmRleCBlOWQ5ZTFmYmQwNDQxM2M0YTYwNGI3MGEyZTA3ZTg4MGEwZjJkZmQz
Li4wNTI5Nzg2MDQwODliOTgwZGYxNmVjZmRhMDUyMWRiZTA1YzZmZDBlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5oCkBAIC0xNTYsMTQgKzE1NiwxNCBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGVzZSBtZXRo
b2RzIHR5cGljYWxseSBuZWVkIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IGRlcml2ZWQgY2xhc3Nlcy4K
ICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHNJZkRpcnR5KCkgeyB9CisgICAgdmlydHVh
bCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdW5yZXNlcnZlQ29u
dGVudHNUZXh0dXJlKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1RleHR1cmUo
KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZHJhdygpIHsgfQogCiAgICAgLy8gVGhlc2UgZXhpc3Rz
IGp1c3QgZm9yIGRlYnVnZ2luZyAodmlhIGRyYXdEZWJ1Z0JvcmRlcigpKS4KICAgICB2b2lkIHNl
dEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJik7Ci0gICAgQ29sb3IgYm9yZGVyQ29sb3IoKSBjb25z
dDsKIAogI2lmbmRlZiBOREVCVUcKICAgICBpbnQgZGVidWdJRCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGVidWdJRDsgfQpAQCAtMTczLDE2ICsxNzMsMTcgQEAgcHVibGljOgogICAgIFN0cmluZyBsYXll
clRyZWVBc1RleHQoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0Qm9yZGVyV2lkdGgoZmxvYXQpOwot
ICAgIGZsb2F0IGJvcmRlcldpZHRoKCkgY29uc3Q7CiAKICAgICAvLyBFdmVyeXRoaW5nIGZyb20g
aGVyZSBkb3duIGluIHRoZSBwdWJsaWMgc2VjdGlvbiB3aWxsIG1vdmUgdG8gQ0NMYXllckltcGwu
Ci0KLSAgICBDQ0xheWVySW1wbCogY2NMYXllckltcGwoKSBjb25zdCB7IHJldHVybiBtX2NjTGF5
ZXJJbXBsLmdldCgpOyB9CisgICAgQ0NMYXllckltcGwqIGNjTGF5ZXJJbXBsKCk7CisgICAgdm9p
ZCBjcmVhdGVDQ0xheWVySW1wbElmTmVlZGVkKCk7CiAKICAgICBzdGF0aWMgdm9pZCBkcmF3VGV4
dHVyZWRRdWFkKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHByb2plY3Rpb25NYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllck1hdHJp
eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBo
ZWlnaHQsIGZsb2F0IG9wYWNpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgbWF0cml4TG9jYXRpb24sIGludCBhbHBoYUxvY2F0aW9uKTsKIAorICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVUb0xheWVyKENDTGF5ZXJJbXBsKik7CisKICAgICAvLyBCZWdpbiBjYWxscyB0aGF0
IGZvcndhcmQgdG8gdGhlIENDTGF5ZXJJbXBsLgogICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSog
bGF5ZXJSZW5kZXJlcigpIGNvbnN0OwogICAgIC8vIEVuZCBjYWxscyB0aGF0IGZvcndhcmQgdG8g
dGhlIENDTGF5ZXJJbXBsLgpAQCAtMjE3LDYgKzIxOCwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIHNfcG9zaXRpb25BdHRyaWJMb2NhdGlvbjsKICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgc190ZXhDb29yZEF0dHJpYkxvY2F0aW9uOwogCisgICAgLy8gQ29uc3Ry
dWN0cyBhIENDTGF5ZXJJbXBsIG9mIHRoZSBjb3JyZWN0IHJ1bnRpbWUgdHlwZSBmb3IgdGhpcyBM
YXllckNocm9taXVtIHR5cGUuCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBj
cmVhdGVDQ0xheWVySW1wbCgpOworCisgICAgLy8gRm9yIG5vdywgdGhlIExheWVyQ2hyb21pdW0g
ZGlyZWN0bHkgb3ducyBpdHMgQ0NMYXllckltcGwuCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBt
X2NjTGF5ZXJJbXBsOwogcHJpdmF0ZToKICAgICB2b2lkIHNldE5lZWRzQ29tbWl0KCk7CiAKQEAg
LTIzNiw2ICsyNDIsOCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPiBtX3N1YmxheWVyczsKICAgICBMYXllckNocm9taXVtKiBtX3N1cGVybGF5ZXI7CiAKKyAg
ICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7CisKICNpZm5k
ZWYgTkRFQlVHCiAgICAgaW50IG1fZGVidWdJRDsKICNlbmRpZgpAQCAtMjYwLDggKzI2OCw2IEBA
IHByaXZhdGU6CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9zdWJsYXllclRyYW5zZm9ybTsK
IAogICAgIEZsb2F0UmVjdCBtX2ZyYW1lOwotICAgIC8vIEZvciBub3csIHRoZSBMYXllckNocm9t
aXVtIGRpcmVjdGx5IG93bnMgaXRzIENDTGF5ZXJJbXBsLgotICAgIFJlZlB0cjxDQ0xheWVySW1w
bD4gbV9jY0xheWVySW1wbDsKIAogICAgIC8vIFJlcGxpY2EgbGF5ZXIgdXNlZCBmb3IgcmVmbGVj
dGlvbnMuCiAgICAgTGF5ZXJDaHJvbWl1bSogbV9yZXBsaWNhTGF5ZXI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCAzZTM5ZDg3YjZlYTQzMzJmZDk4NmYwYzBkOWMy
NzRlMzhmZWQwZTM0Li45NGYwMmY2MWIzYzNhMDBiZDFiYjQ0Mzk4NWZkM2ZlNmVmNDYxZGM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTI3Niw2ICsyNzYsNyBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhd0xheWVycygpCiAKIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMoVmVjdG9yPENDTGF5ZXJJbXBs
Kj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCiB7CisgICAgbV9yb290TGF5ZXItPmNyZWF0ZUND
TGF5ZXJJbXBsSWZOZWVkZWQoKTsKICAgICBDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciA9IG1f
cm9vdExheWVyLT5jY0xheWVySW1wbCgpOwogCiAgICAgaWYgKCFyb290RHJhd0xheWVyLT5yZW5k
ZXJTdXJmYWNlKCkpCkBAIC0zMDIsNyArMzAzLDkgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnVwZGF0ZUxheWVycyhWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWUK
ICAgICAvLyBjb25jZXB0IG9mIGEgbGFyZ2UgY29udGVudCBsYXllci4KICAgICB1cGRhdGVQcm9w
ZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMobV9yb290TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5tX2xheWVy
TGlzdCk7CiAKLSAgICB1cGRhdGVDb250ZW50c1JlY3Vyc2l2ZShtX3Jvb3RMYXllci5nZXQoKSk7
CisgICAgcGFpbnRDb250ZW50c1JlY3Vyc2l2ZShtX3Jvb3RMYXllci5nZXQoKSk7CisKKyAgICB1
cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKG1fcm9vdExheWVyLmdldCgpKTsKIH0K
IAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgVmVjdG9yPEND
TGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCkBAIC00NjUsOSArNDY4LDI5IEBA
IGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppc0xheWVyVmlzaWJsZShMYXllckNocm9taXVt
KiBsYXllciwgY29uc3QgVHJhbnNmb3JtCiAvLyBuZWNlc3NhcnkgdHJhbnNmb3JtYXRpb25zLCBz
Y2lzc29yIHJlY3RhbmdsZXMsIHJlbmRlciBzdXJmYWNlcywgZXRjLgogdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhMYXllckNocm9t
aXVtKiBsYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgVmVj
dG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxDQ0xheWVy
SW1wbCo+JiBsYXllckxpc3QpCiB7CisgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgQ0NMYXllcklt
cGxzIGZvciB0aGlzIHN1YnRyZWUuCisgICAgbGF5ZXItPmNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVk
ZWQoKTsKICAgICBsYXllci0+c2V0TGF5ZXJSZW5kZXJlcih0aGlzKTsKKyAgICBpZiAobGF5ZXIt
Pm1hc2tMYXllcigpKSB7CisgICAgICAgIGxheWVyLT5tYXNrTGF5ZXIoKS0+Y3JlYXRlQ0NMYXll
ckltcGxJZk5lZWRlZCgpOworICAgICAgICBsYXllci0+bWFza0xheWVyKCktPnNldExheWVyUmVu
ZGVyZXIodGhpcyk7CisgICAgfQorICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkpIHsKKyAg
ICAgICAgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5jcmVhdGVDQ0xheWVySW1wbElmTmVlZGVkKCk7
CisgICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+c2V0TGF5ZXJSZW5kZXJlcih0aGlzKTsK
KyAgICB9CisgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSAmJiBsYXllci0+cmVwbGljYUxh
eWVyKCktPm1hc2tMYXllcigpKSB7CisgICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFz
a0xheWVyKCktPmNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVkZWQoKTsKKyAgICAgICAgbGF5ZXItPnJl
cGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJSZW5kZXJlcih0aGlzKTsKKyAgICB9
CisKICAgICBDQ0xheWVySW1wbCogZHJhd0xheWVyID0gbGF5ZXItPmNjTGF5ZXJJbXBsKCk7Ci0g
ICAgZHJhd0xheWVyLT51cGRhdGVGcm9tTGF5ZXIobGF5ZXIpOworICAgIC8vIEN1cnJlbnRseSB3
ZSdyZSBjYWxsaW5nIHVwZGF0ZVRvTGF5ZXIoKSB0d2ljZSAtIG9uY2UgaGVyZSBhbmQgb25jZSBp
biB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKCkuCisgICAgLy8gV2Ugc2hvdWxk
IG9ubHkgY2FsbCB1cGRhdGVUb0xheWVyKCkgaW4gY29tbWl0LCBidXQgYmVjYXVzZSB3ZSByZWx5
IG9uIHRoZSBkcmF3IGxheWVyIHN0YXRlIHRvIHVwZGF0ZQorICAgIC8vIFJlbmRlclN1cmZhY2Vz
IGFuZCB3ZSByZWx5IG9uIFJlbmRlclN1cmZhY2VzIGJlaW5nIHVwIHRvIGRhdGUgaW4gb3JkZXIg
dG8gcGFpbnQgY29udGVudHMgd2UgaGF2ZQorICAgIC8vIHRvIHVwZGF0ZSB0aGUgZHJhdyBsYXll
cnMgdHdpY2UuCisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGNhbGwgb25jZSBsYXllciB1cGRh
dGVzIG5vIGxvbmdlciBkZXBlbmQgb24gcmVuZGVyIHN1cmZhY2VzLgorICAgIGxheWVyLT51cGRh
dGVUb0xheWVyKGRyYXdMYXllcik7CiAKICAgICAvLyBDb21wdXRlIHRoZSBuZXcgbWF0cml4IHRy
YW5zZm9ybWF0aW9uIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoaXMgbGF5ZXIgYW5kCiAgICAg
Ly8gYWxsIGl0cyBzdWJsYXllcnMuIEl0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgdGhl
IGxheWVyJ3MgcG9zaXRpb24KQEAgLTUyMiw4ICs1NDUsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0q
IGxheQogICAgIGJvb2wgdXNlU3VyZmFjZUZvck9wYWNpdHkgPSBkcmF3TGF5ZXItPm9wYWNpdHko
KSAhPSAxICYmICFkcmF3TGF5ZXItPnByZXNlcnZlczNEKCk7CiAgICAgYm9vbCB1c2VTdXJmYWNl
Rm9yTWFza2luZyA9IGRyYXdMYXllci0+bWFza0xheWVyKCk7CiAgICAgYm9vbCB1c2VTdXJmYWNl
Rm9yUmVmbGVjdGlvbiA9IGRyYXdMYXllci0+cmVwbGljYUxheWVyKCk7Ci0gICAgaWYgKCgodXNl
U3VyZmFjZUZvckNsaXBwaW5nIHx8IHVzZVN1cmZhY2VGb3JPcGFjaXR5KSAmJiBkcmF3TGF5ZXIt
PmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkpCi0gICAgICAgIHx8IHVzZVN1cmZhY2VGb3JNYXNr
aW5nIHx8IHVzZVN1cmZhY2VGb3JSZWZsZWN0aW9uKSB7CisgICAgaWYgKHVzZVN1cmZhY2VGb3JN
YXNraW5nIHx8IHVzZVN1cmZhY2VGb3JSZWZsZWN0aW9uIHx8ICgodXNlU3VyZmFjZUZvckNsaXBw
aW5nIHx8IHVzZVN1cmZhY2VGb3JPcGFjaXR5KSAmJiBkcmF3TGF5ZXItPmRlc2NlbmRhbnRzRHJh
d3NDb250ZW50KCkpKSB7CiAgICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3Vy
ZmFjZSA9IGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpOwogICAgICAgICBpZiAoIXJlbmRlclN1
cmZhY2UpCiAgICAgICAgICAgICByZW5kZXJTdXJmYWNlID0gZHJhd0xheWVyLT5jcmVhdGVSZW5k
ZXJTdXJmYWNlKCk7CkBAIC01NjAsMTUgKzU4MiwxMiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0qIGxh
eQogCiAgICAgICAgIGlmIChkcmF3TGF5ZXItPm1hc2tMYXllcigpKSB7CiAgICAgICAgICAgICBy
ZW5kZXJTdXJmYWNlLT5tX21hc2tMYXllciA9IGRyYXdMYXllci0+bWFza0xheWVyKCk7Ci0gICAg
ICAgICAgICBkcmF3TGF5ZXItPm1hc2tMYXllcigpLT5zZXRMYXllclJlbmRlcmVyKHRoaXMpOwog
ICAgICAgICAgICAgZHJhd0xheWVyLT5tYXNrTGF5ZXIoKS0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFj
ZShyZW5kZXJTdXJmYWNlKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZW5kZXJTdXJm
YWNlLT5tX21hc2tMYXllciA9IDA7CiAKLSAgICAgICAgaWYgKGRyYXdMYXllci0+cmVwbGljYUxh
eWVyKCkgJiYgZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkpIHsKLSAgICAg
ICAgICAgIGRyYXdMYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLT5zZXRMYXllclJl
bmRlcmVyKHRoaXMpOworICAgICAgICBpZiAoZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKSAmJiBk
cmF3TGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSkKICAgICAgICAgICAgIGRyYXdM
YXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNl
KHJlbmRlclN1cmZhY2UpOwotICAgICAgICB9CiAKICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdC5hcHBlbmQoZHJhd0xheWVyKTsKICAgICB9IGVsc2UgewpAQCAtNjM5LDYgKzY1OCw3IEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3Vy
ZmFjZXMoTGF5ZXJDaHJvbWl1bSogbGF5CiAKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4mIHN1YmxheWVycyA9IGxheWVyLT5nZXRTdWJsYXllcnMoKTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7ICsraSkgeworICAgICAgICBzdWJs
YXllcnNbaV0tPmNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVkZWQoKTsKICAgICAgICAgQ0NMYXllcklt
cGwqIHN1YmxheWVyID0gc3VibGF5ZXJzW2ldLT5jY0xheWVySW1wbCgpOwogICAgICAgICB1cGRh
dGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoc3VibGF5ZXJzW2ldLmdldCgpLCBzdWJsYXll
ck1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZGVzY2VuZGFudHMpOwogCkBAIC03MjEs
MjMgKzc0MSw0NiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGll
c0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0qIGxheQogICAgICAgICBzdGQ6OnN0YWJs
ZV9zb3J0KCZkZXNjZW5kYW50cy5hdCh0aGlzTGF5ZXJJbmRleCksIGRlc2NlbmRhbnRzLmVuZCgp
LCBjb21wYXJlTGF5ZXJaKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0
ZUNvbnRlbnRzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyKQordm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnBhaW50Q29udGVudHNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIp
CiB7CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJsYXllcnMg
PSBsYXllci0+Z2V0U3VibGF5ZXJzKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJs
YXllcnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHVwZGF0ZUNvbnRlbnRzUmVjdXJzaXZlKHN1Ymxh
eWVyc1tpXS5nZXQoKSk7CisgICAgICAgIHBhaW50Q29udGVudHNSZWN1cnNpdmUoc3VibGF5ZXJz
W2ldLmdldCgpKTsKIAogICAgIGlmIChsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKQotICAgICAgICBsYXll
ci0+dXBkYXRlQ29udGVudHNJZkRpcnR5KCk7CisgICAgICAgIGxheWVyLT5wYWludENvbnRlbnRz
SWZEaXJ0eSgpOwogICAgIGlmIChsYXllci0+bWFza0xheWVyKCkgJiYgbGF5ZXItPm1hc2tMYXll
cigpLT5kcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgbGF5ZXItPm1hc2tMYXllcigpLT51cGRhdGVD
b250ZW50c0lmRGlydHkoKTsKKyAgICAgICAgbGF5ZXItPm1hc2tMYXllcigpLT5wYWludENvbnRl
bnRzSWZEaXJ0eSgpOwogICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkgJiYgbGF5ZXItPnJl
cGxpY2FMYXllcigpLT5kcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgbGF5ZXItPnJlcGxpY2FMYXll
cigpLT51cGRhdGVDb250ZW50c0lmRGlydHkoKTsKKyAgICAgICAgbGF5ZXItPnJlcGxpY2FMYXll
cigpLT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOwogICAgIGlmIChsYXllci0+cmVwbGljYUxheWVy
KCkgJiYgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSAmJiBsYXllci0+cmVwbGlj
YUxheWVyKCktPm1hc2tMYXllcigpLT5kcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgbGF5ZXItPnJl
cGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+dXBkYXRlQ29udGVudHNJZkRpcnR5KCk7CisgICAg
ICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPnBhaW50Q29udGVudHNJZkRp
cnR5KCk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyKQoreworICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJzID0gbGF5ZXItPmdldFN1Ymxh
eWVycygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUoKTsgKytp
KQorICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKHN1YmxheWVyc1tp
XS5nZXQoKSk7CisKKyAgICBpZiAobGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQ0NMYXllckltcGwqIGRyYXdMYXllciA9IGxheWVyLT5jY0xheWVySW1w
bCgpOworCisgICAgaWYgKGRyYXdMYXllci0+ZHJhd3NDb250ZW50KCkpCisgICAgICAgIGRyYXdM
YXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOworICAgIGlmIChkcmF3TGF5ZXItPm1h
c2tMYXllcigpICYmIGRyYXdMYXllci0+bWFza0xheWVyKCktPmRyYXdzQ29udGVudCgpKQorICAg
ICAgICBkcmF3TGF5ZXItPm1hc2tMYXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCk7
CisgICAgaWYgKGRyYXdMYXllci0+cmVwbGljYUxheWVyKCkgJiYgZHJhd0xheWVyLT5yZXBsaWNh
TGF5ZXIoKS0+ZHJhd3NDb250ZW50KCkpCisgICAgICAgIGRyYXdMYXllci0+cmVwbGljYUxheWVy
KCktPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKKyAgICBpZiAoZHJhd0xheWVyLT5yZXBs
aWNhTGF5ZXIoKSAmJiBkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSAmJiBk
cmF3TGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+ZHJhd3NDb250ZW50KCkpCisg
ICAgICAgIGRyYXdMYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLT51cGRhdGVDb21w
b3NpdG9yUmVzb3VyY2VzKCk7CisKKyAgICBsYXllci0+dXBkYXRlVG9MYXllcihkcmF3TGF5ZXIp
OwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Q29tcG9zaXRlT2Zmc2NyZWVu
KGJvb2wgY29tcG9zaXRlT2Zmc2NyZWVuKQpAQCAtODExLDE2ICs4NTQsMjAgQEAgdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIFJlbmRlclN1
cmZhY2VDaHJvbWl1bSoKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChsYXllci0+
Ym91bmRzKCkuaXNFbXB0eSgpKQorICAgIGlmIChsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKSB7
CisgICAgICAgIGxheWVyLT51bnJlc2VydmVDb250ZW50c1RleHR1cmUoKTsKICAgICAgICAgcmV0
dXJuOworICAgIH0KIAogICAgIHNldFNjaXNzb3JUb1JlY3QobGF5ZXItPnNjaXNzb3JSZWN0KCkp
OwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIGxheWVyIGZhbGxzIHdpdGhpbiB0aGUgdmlzaWJsZSBi
b3VuZHMgb2YgdGhlIHBhZ2UuCiAgICAgSW50UmVjdCBsYXllclJlY3QgPSBsYXllci0+Z2V0RHJh
d1JlY3QoKTsKICAgICBib29sIGlzTGF5ZXJWaXNpYmxlID0gbGF5ZXItPnNjaXNzb3JSZWN0KCku
aW50ZXJzZWN0cyhsYXllclJlY3QpOwotICAgIGlmICghaXNMYXllclZpc2libGUpCisgICAgaWYg
KCFpc0xheWVyVmlzaWJsZSkgeworICAgICAgICBsYXllci0+dW5yZXNlcnZlQ29udGVudHNUZXh0
dXJlKCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICAvLyBGSVhNRTogTmVlZCB0byB0
YWtlIGludG8gYWNjb3VudCB0aGUgY29tbXVsYXRpdmUgcmVuZGVyIHN1cmZhY2UgdHJhbnNmb3Jt
cyBhbGwgdGhlIHdheSBmcm9tCiAgICAgLy8gICAgICAgIHRoZSBkZWZhdWx0IHJlbmRlciBzdXJm
YWNlIGluIG9yZGVyIHRvIGRldGVybWluZSB2aXNpYmlsaXR5LgpAQCAtODM0LDggKzg4MSwxMCBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKENDTGF5ZXJJbXBsKiBsYXll
ciwgUmVuZGVyU3VyZmFjZUNocm9taXVtKgogICAgICAgICBGbG9hdFBvaW50M0QgeEF4aXMoaG9y
aXpvbnRhbERpci53aWR0aCgpLCBob3Jpem9udGFsRGlyLmhlaWdodCgpLCAwKTsKICAgICAgICAg
RmxvYXRQb2ludDNEIHlBeGlzKHZlcnRpY2FsRGlyLndpZHRoKCksIHZlcnRpY2FsRGlyLmhlaWdo
dCgpLCAwKTsKICAgICAgICAgRmxvYXRQb2ludDNEIHpBeGlzID0geEF4aXMuY3Jvc3MoeUF4aXMp
OwotICAgICAgICBpZiAoekF4aXMueigpIDwgMCkKKyAgICAgICAgaWYgKHpBeGlzLnooKSA8IDAp
IHsKKyAgICAgICAgICAgIGxheWVyLT51bnJlc2VydmVDb250ZW50c1RleHR1cmUoKTsKICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChsYXllci0+ZHJhd3ND
b250ZW50KCkpCkBAIC05MTMsMTAgKzk2MiwxMCBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKQogICAgIG1fc2hhcmVkR2VvbWV0cnkgPSBhZG9w
dFB0cihuZXcgR2VvbWV0cnlCaW5kaW5nKG1fY29udGV4dC5nZXQoKSkpOwogICAgIG1fYm9yZGVy
UHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBMYXllckNocm9taXVtOjpCb3JkZXJQcm9ncmFtKG1fY29u
dGV4dC5nZXQoKSkpOwogICAgIG1fY29udGVudExheWVyUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKLSAgICBtX2Nh
bnZhc0xheWVyUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBDYW52YXNMYXllckNocm9taXVtOjpQcm9n
cmFtKG1fY29udGV4dC5nZXQoKSkpOwotICAgIG1fdmlkZW9MYXllclJHQkFQcm9ncmFtID0gYWRv
cHRQdHIobmV3IFZpZGVvTGF5ZXJDaHJvbWl1bTo6UkdCQVByb2dyYW0obV9jb250ZXh0LmdldCgp
KSk7Ci0gICAgbV92aWRlb0xheWVyWVVWUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBWaWRlb0xheWVy
Q2hyb21pdW06OllVVlByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7Ci0gICAgbV9wbHVnaW5MYXll
clByb2dyYW0gPSBhZG9wdFB0cihuZXcgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6UHJvZ3JhbShtX2Nv
bnRleHQuZ2V0KCkpKTsKKyAgICBtX2NhbnZhc0xheWVyUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBD
Q0NhbnZhc0xheWVySW1wbDo6UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICBtX3ZpZGVv
TGF5ZXJSR0JBUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBDQ1ZpZGVvTGF5ZXJJbXBsOjpSR0JBUHJv
Z3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICBtX3ZpZGVvTGF5ZXJZVVZQcm9ncmFtID0gYWRv
cHRQdHIobmV3IENDVmlkZW9MYXllckltcGw6OllVVlByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7
CisgICAgbV9wbHVnaW5MYXllclByb2dyYW0gPSBhZG9wdFB0cihuZXcgQ0NQbHVnaW5MYXllcklt
cGw6OlByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7CiAgICAgbV9yZW5kZXJTdXJmYWNlUHJvZ3Jh
bSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OlByb2dyYW0obV9jb250ZXh0
LmdldCgpKSk7CiAgICAgbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0gPSBhZG9wdFB0cihuZXcg
UmVuZGVyU3VyZmFjZUNocm9taXVtOjpNYXNrUHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKICAg
ICBtX3RpbGVyUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBMYXllclRpbGVyQ2hyb21pdW06OlByb2dy
YW0obV9jb250ZXh0LmdldCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmlu
ZGV4IDcwMzdkMDQzYjFmZmU1MGE0YjM2NTBhOTNkZjlkYjc4NWZhY2JkNDYuLjY2N2VkZTIzOTI0
MWRhYjk5MTc0NDViYjgyZTgxZWMzMmE5YTRiYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5oCkBAIC0zNCwxNiArMzQsMTcgQEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKIAotI2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJD
b250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJM
YXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJUaWxlckNocm9taXVtLmgiCi0jaW5jbHVk
ZSAiUGx1Z2luTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1
bS5oIgogI2luY2x1ZGUgIlNrQml0bWFwLmgiCiAjaW5jbHVkZSAiVmlkZW9MYXllckNocm9taXVt
LmgiCisjaW5jbHVkZSAiY2MvQ0NDYW52YXNMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0hl
YWRzVXBEaXNwbGF5LmgiCisjaW5jbHVkZSAiY2MvQ0NQbHVnaW5MYXllckltcGwuaCIKKyNpbmNs
dWRlICJjYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpA
QCAtMTEwLDEzICsxMTEsMTMgQEAgcHVibGljOgogICAgIGNvbnN0IEdlb21ldHJ5QmluZGluZyog
c2hhcmVkR2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZEdlb21ldHJ5LmdldCgpOyB9
CiAgICAgY29uc3QgTGF5ZXJDaHJvbWl1bTo6Qm9yZGVyUHJvZ3JhbSogYm9yZGVyUHJvZ3JhbSgp
IGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyUHJvZ3JhbS5nZXQoKTsgfQogICAgIGNvbnN0IENvbnRl
bnRMYXllckNocm9taXVtOjpQcm9ncmFtKiBjb250ZW50TGF5ZXJQcm9ncmFtKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZW50TGF5ZXJQcm9ncmFtLmdldCgpOyB9Ci0gICAgY29uc3QgQ2FudmFzTGF5
ZXJDaHJvbWl1bTo6UHJvZ3JhbSogY2FudmFzTGF5ZXJQcm9ncmFtKCkgY29uc3QgeyByZXR1cm4g
bV9jYW52YXNMYXllclByb2dyYW0uZ2V0KCk7IH0KLSAgICBjb25zdCBWaWRlb0xheWVyQ2hyb21p
dW06OlJHQkFQcm9ncmFtKiB2aWRlb0xheWVyUkdCQVByb2dyYW0oKSBjb25zdCB7IHJldHVybiBt
X3ZpZGVvTGF5ZXJSR0JBUHJvZ3JhbS5nZXQoKTsgfQotICAgIGNvbnN0IFZpZGVvTGF5ZXJDaHJv
bWl1bTo6WVVWUHJvZ3JhbSogdmlkZW9MYXllcllVVlByb2dyYW0oKSBjb25zdCB7IHJldHVybiBt
X3ZpZGVvTGF5ZXJZVVZQcm9ncmFtLmdldCgpOyB9Ci0gICAgY29uc3QgUGx1Z2luTGF5ZXJDaHJv
bWl1bTo6UHJvZ3JhbSogcGx1Z2luTGF5ZXJQcm9ncmFtKCkgY29uc3QgeyByZXR1cm4gbV9wbHVn
aW5MYXllclByb2dyYW0uZ2V0KCk7IH0KICAgICBjb25zdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06
OlByb2dyYW0qIHJlbmRlclN1cmZhY2VQcm9ncmFtKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJT
dXJmYWNlUHJvZ3JhbS5nZXQoKTsgfQogICAgIGNvbnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6
TWFza1Byb2dyYW0qIHJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtLmdldCgpOyB9CiAgICAgY29uc3QgTGF5ZXJUaWxlckNo
cm9taXVtOjpQcm9ncmFtKiB0aWxlclByb2dyYW0oKSBjb25zdCB7IHJldHVybiBtX3RpbGVyUHJv
Z3JhbS5nZXQoKTsgfQorICAgIGNvbnN0IENDQ2FudmFzTGF5ZXJJbXBsOjpQcm9ncmFtKiBjYW52
YXNMYXllclByb2dyYW0oKSBjb25zdCB7IHJldHVybiBtX2NhbnZhc0xheWVyUHJvZ3JhbS5nZXQo
KTsgfQorICAgIGNvbnN0IENDUGx1Z2luTGF5ZXJJbXBsOjpQcm9ncmFtKiBwbHVnaW5MYXllclBy
b2dyYW0oKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbkxheWVyUHJvZ3JhbS5nZXQoKTsgfQorICAg
IGNvbnN0IENDVmlkZW9MYXllckltcGw6OlJHQkFQcm9ncmFtKiB2aWRlb0xheWVyUkdCQVByb2dy
YW0oKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvTGF5ZXJSR0JBUHJvZ3JhbS5nZXQoKTsgfQorICAg
IGNvbnN0IENDVmlkZW9MYXllckltcGw6OllVVlByb2dyYW0qIHZpZGVvTGF5ZXJZVVZQcm9ncmFt
KCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0xheWVyWVVWUHJvZ3JhbS5nZXQoKTsgfQogCiAgICAg
dm9pZCByZXNpemVPbnNjcmVlbkNvbnRlbnQoY29uc3QgSW50U2l6ZSYpOwogCkBAIC0xMzcsNyAr
MTM4LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKCk7CiAg
ICAgdm9pZCB1cGRhdGVSb290TGF5ZXJTY3JvbGxiYXJzKCk7CiAgICAgdm9pZCB1cGRhdGVQcm9w
ZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1bSosIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgbGF5ZXJMaXN0KTsKLSAgICB2b2lk
IHVwZGF0ZUNvbnRlbnRzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qKTsKKyAgICB2b2lkIHBhaW50
Q29udGVudHNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSopOworICAgIHZvaWQgdXBkYXRlQ29tcG9z
aXRvclJlc291cmNlc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKik7CiAKICAgICB2b2lkIGRyYXdM
YXllcnMoY29uc3QgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3Qp
OwogICAgIHZvaWQgZHJhd0xheWVyKENDTGF5ZXJJbXBsKiwgUmVuZGVyU3VyZmFjZUNocm9taXVt
Kik7CkBAIC0yMDUsMTMgKzIwNywxMyBAQCBwcml2YXRlOgogICAgIE93blB0cjxHZW9tZXRyeUJp
bmRpbmc+IG1fc2hhcmVkR2VvbWV0cnk7CiAgICAgT3duUHRyPExheWVyQ2hyb21pdW06OkJvcmRl
clByb2dyYW0+IG1fYm9yZGVyUHJvZ3JhbTsKICAgICBPd25QdHI8Q29udGVudExheWVyQ2hyb21p
dW06OlByb2dyYW0+IG1fY29udGVudExheWVyUHJvZ3JhbTsKLSAgICBPd25QdHI8Q2FudmFzTGF5
ZXJDaHJvbWl1bTo6UHJvZ3JhbT4gbV9jYW52YXNMYXllclByb2dyYW07Ci0gICAgT3duUHRyPFZp
ZGVvTGF5ZXJDaHJvbWl1bTo6UkdCQVByb2dyYW0+IG1fdmlkZW9MYXllclJHQkFQcm9ncmFtOwot
ICAgIE93blB0cjxWaWRlb0xheWVyQ2hyb21pdW06OllVVlByb2dyYW0+IG1fdmlkZW9MYXllcllV
VlByb2dyYW07Ci0gICAgT3duUHRyPFBsdWdpbkxheWVyQ2hyb21pdW06OlByb2dyYW0+IG1fcGx1
Z2luTGF5ZXJQcm9ncmFtOwogICAgIE93blB0cjxSZW5kZXJTdXJmYWNlQ2hyb21pdW06OlByb2dy
YW0+IG1fcmVuZGVyU3VyZmFjZVByb2dyYW07CiAgICAgT3duUHRyPFJlbmRlclN1cmZhY2VDaHJv
bWl1bTo6TWFza1Byb2dyYW0+IG1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtOwogICAgIE93blB0
cjxMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW0+IG1fdGlsZXJQcm9ncmFtOworICAgIE93blB0
cjxDQ0NhbnZhc0xheWVySW1wbDo6UHJvZ3JhbT4gbV9jYW52YXNMYXllclByb2dyYW07CisgICAg
T3duUHRyPENDVmlkZW9MYXllckltcGw6OlJHQkFQcm9ncmFtPiBtX3ZpZGVvTGF5ZXJSR0JBUHJv
Z3JhbTsKKyAgICBPd25QdHI8Q0NWaWRlb0xheWVySW1wbDo6WVVWUHJvZ3JhbT4gbV92aWRlb0xh
eWVyWVVWUHJvZ3JhbTsKKyAgICBPd25QdHI8Q0NQbHVnaW5MYXllckltcGw6OlByb2dyYW0+IG1f
cGx1Z2luTGF5ZXJQcm9ncmFtOwogCiAgICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiBtX3RleHR1
cmVNYW5hZ2VyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDAwMTc0
YWE2ZTA5OWRkODU0YWE4ZDQxMDA2NGUzNTQ3OWU3YmNiMDAuLmJlOTI4ZGNlNDJjODEwNDYxOWU2
ODFkODY1OWY4ZjA1YmYxNDZlM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3Bw
CkBAIC0yOSwxMCArMjksMTAgQEAKIAogI2luY2x1ZGUgIlBsdWdpbkxheWVyQ2hyb21pdW0uaCIK
IAotI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0QuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlIDxHTEVT
Mi9nbDIuaD4KKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDUGx1
Z2luTGF5ZXJJbXBsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDcsMzcgKzQ3LDIy
IEBAIFBsdWdpbkxheWVyQ2hyb21pdW06OlBsdWdpbkxheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXll
ckNocm9taXVtKiBvd25lcikKIHsKIH0KIAotdm9pZCBQbHVnaW5MYXllckNocm9taXVtOjpzZXRU
ZXh0dXJlSWQodW5zaWduZWQgaWQpCitQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBQbHVnaW5MYXll
ckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCiB7Ci0gICAgbV90ZXh0dXJlSWQgPSBpZDsK
KyAgICByZXR1cm4gQ0NQbHVnaW5MYXllckltcGw6OmNyZWF0ZSh0aGlzKTsKIH0KIAotdm9pZCBQ
bHVnaW5MYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQordm9pZCBQbHVnaW5M
YXllckNocm9taXVtOjpzZXRUZXh0dXJlSWQodW5zaWduZWQgaWQpCiB7CisgICAgbV90ZXh0dXJl
SWQgPSBpZDsKIH0KIAotdm9pZCBQbHVnaW5MYXllckNocm9taXVtOjpkcmF3KCkKK3ZvaWQgUGx1
Z2luTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVG9MYXllcihDQ0xheWVySW1wbCogbGF5ZXIpCiB7Ci0g
ICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7Ci0gICAgY29uc3QgUGx1Z2luTGF5ZXJDaHJvbWl1
bTo6UHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXIoKS0+cGx1Z2luTGF5ZXJQcm9ncmFt
KCk7Ci0gICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7Ci0gICAg
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOwotICAg
IEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKSk7Ci0gICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVy
ZUlkKSk7Ci0gICAgCi0gICAgLy8gRklYTUU6IHNldHRpbmcgdGhlIHRleHR1cmUgcGFyYW1ldGVy
cyBldmVyeSB0aW1lIGlzIHJlZHVuZGFudC4gTW92ZSB0aGlzIGNvZGUgc29tZXdoZXJlCi0gICAg
Ly8gd2hlcmUgaXQgd2lsbCBvbmx5IGhhcHBlbiBvbmNlIHBlciB0ZXh0dXJlLgotICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
TUlOX0ZJTFRFUiwgR0xfTElORUFSKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBh
cmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIp
KTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSkpOwotICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9U
LCBHTF9DTEFNUF9UT19FREdFKSk7Ci0gICAgCi0gICAgbGF5ZXJSZW5kZXJlcigpLT51c2VTaGFk
ZXIocHJvZ3JhbS0+cHJvZ3JhbSgpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9y
bTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKLSAg
ICBkcmF3VGV4dHVyZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1h
dHJpeCgpLCBjY0xheWVySW1wbCgpLT5kcmF3VHJhbnNmb3JtKCksCi0gICAgICAgICAgICAgICAg
ICAgICBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgY2NMYXllckltcGwoKS0+
ZHJhd09wYWNpdHkoKSwKLSAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRl
cigpLm1hdHJpeExvY2F0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT5mcmFn
bWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKSk7CisgICAgTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
VG9MYXllcihsYXllcik7CisKKyAgICBDQ1BsdWdpbkxheWVySW1wbCogcGx1Z2luTGF5ZXIgPSBz
dGF0aWNfY2FzdDxDQ1BsdWdpbkxheWVySW1wbCo+KGxheWVyKTsKKyAgICBwbHVnaW5MYXllci0+
c2V0VGV4dHVyZUlkKG1fdGV4dHVyZUlkKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJv
bWl1bS5oCmluZGV4IGJiZjQ1Mzc2NzVhMTE4YTdkYjc5YTI5ZGYwMjE3ZWVmNTdmNmQ5NmUuLjFm
MWY1ODIxMjI0NGU2MGViZDNmNDg5NTFmMTM5NzI2YjhlZWU0NWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5M
YXllckNocm9taXVtLmgKQEAgLTM4LDE5ICszOCwxOSBAQCBjbGFzcyBQbHVnaW5MYXllckNocm9t
aXVtIDogcHVibGljIExheWVyQ2hyb21pdW0gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFBsdWdpbkxheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93
bmVyID0gMCk7CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHNJZkRpcnR5KCk7Ci0gICAg
dmlydHVhbCB2b2lkIGRyYXcoKTsKIAotICAgIHVuc2lnbmVkIHRleHR1cmVJZCgpIGNvbnN0IHsg
cmV0dXJuIG1fdGV4dHVyZUlkOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBs
PiBjcmVhdGVDQ0xheWVySW1wbCgpOworCiAgICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQg
dGV4dHVyZUlkKTsKKyAgICB1bnNpZ25lZCB0ZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBtX3Rl
eHR1cmVJZDsgfQogCi0gICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NU
ZXgsIEZyYWdtZW50U2hhZGVyUkdCQVRleEZsaXBBbHBoYT4gUHJvZ3JhbTsKKyAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlVG9MYXllcihDQ0xheWVySW1wbCopOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmly
dHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJQbHVn
aW5MYXllciI7IH0KIAogcHJpdmF0ZToKLSAgICBQbHVnaW5MYXllckNocm9taXVtKEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bSogb3duZXIpOworICAgIGV4cGxpY2l0IFBsdWdpbkxheWVyQ2hyb21pdW0o
R3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CiAgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7
CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAppbmRleCAwMWJmOTQ4ODNjYTRk
MTA1ODExMmM3N2JhODY1Mjk2NTA4MjdjMjIzLi5iNzBlNmFlN2YzMDA3NmUyNzEyMDc0NzUzNGE2
ZWJlMmRiYTlkMDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTMzLDcg
KzMzLDYgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaW5jbHVkZSAiVmlk
ZW9MYXllckNocm9taXVtLmgiCiAKLSNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1
ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0Qu
aCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKQEAgLTQxLDMxICs0MCwxMSBA
QAogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlZpZGVvRnJhbWVD
aHJvbWl1bS5oIgogI2luY2x1ZGUgIlZpZGVvRnJhbWVQcm92aWRlci5oIgorI2luY2x1ZGUgImNj
L0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NWaWRlb0xheWVySW1wbC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLS8vIFRoZXNlIHZhbHVlcyBhcmUgbWFnaWMgbnVtYmVycyB0aGF0
IGFyZSB1c2VkIGluIHRoZSB0cmFuc2Zvcm1hdGlvbgotLy8gZnJvbSBZVVYgdG8gUkdCIGNvbG9y
IHZhbHVlcy4KLS8vIFRoZXkgYXJlIHRha2VuIGZyb20gdGhlIGZvbGxvd2luZyB3ZWJwYWdlOgot
Ly8gaHR0cDovL3d3dy5mb3VyY2Mub3JnL2ZjY3l2cmdiLnBocAotY29uc3QgZmxvYXQgVmlkZW9M
YXllckNocm9taXVtOjp5dXYyUkdCWzldID0gewotICAgIDEuMTY0ZiwgMS4xNjRmLCAxLjE2NGYs
Ci0gICAgMC5mLCAtLjM5MWYsIDIuMDE4ZiwKLSAgICAxLjU5NmYsIC0uODEzZiwgMC5mLAotfTsK
LQotLy8gVGhlc2UgdmFsdWVzIG1hcCB0byAxNiwgMTI4LCBhbmQgMTI4IHJlc3BlY3RpdmVseSwg
YW5kIGFyZSBjb21wdXRlZAotLy8gYXMgYSBmcmFjdGlvbiBvdmVyIDI1NiAoZS5nLiAxNiAvIDI1
NiA9IDAuMDYyNSkuCi0vLyBUaGV5IGFyZSB1c2VkIGluIHRoZSBZVVYgdG8gUkdCQSBjb252ZXJz
aW9uIGZvcm11bGE6Ci0vLyAgIFkgLSAxNiAgIDogR2l2ZXMgMTYgdmFsdWVzIG9mIGhlYWQgYW5k
IGZvb3Ryb29tIGZvciBvdmVyc2hvb3RpbmcKLS8vICAgVSAtIDEyOCAgOiBUdXJucyB1bnNpZ25l
ZCBVIGludG8gc2lnbmVkIFUgWy0xMjgsMTI3XQotLy8gICBWIC0gMTI4ICA6IFR1cm5zIHVuc2ln
bmVkIFYgaW50byBzaWduZWQgViBbLTEyOCwxMjddCi1jb25zdCBmbG9hdCBWaWRlb0xheWVyQ2hy
b21pdW06Onl1dkFkanVzdFszXSA9IHsKLSAgICAtMC4wNjI1ZiwKLSAgICAtMC41ZiwKLSAgICAt
MC41ZiwKLX07Ci0KIFBhc3NSZWZQdHI8VmlkZW9MYXllckNocm9taXVtPiBWaWRlb0xheWVyQ2hy
b21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZGVvRnJhbWVQ
cm92aWRlciogcHJvdmlkZXIpCiB7CkBAIC04Nyw2ICs2NiwxMSBAQCBWaWRlb0xheWVyQ2hyb21p
dW06On5WaWRlb0xheWVyQ2hyb21pdW0oKQogICAgIGNsZWFudXBSZXNvdXJjZXMoKTsKIH0KIAor
UGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gVmlkZW9MYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVy
SW1wbCgpCit7CisgICAgcmV0dXJuIENDVmlkZW9MYXllckltcGw6OmNyZWF0ZSh0aGlzKTsKK30K
Kwogdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQogewogICAgIExh
eWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKTsKQEAgLTEwMSw3ICs4NSw3IEBAIHZvaWQg
VmlkZW9MYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKICAgICB9CiB9CiAKLXZvaWQg
VmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQordm9pZCBWaWRlb0xh
eWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKQogewogICAgIGlmICghbV9j
b250ZW50c0RpcnR5KQogICAgICAgICByZXR1cm47CkBAIC0xNjAsNiArMTQ0LDIxIEBAIHZvaWQg
VmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQogICAgIG1fcHJvdmlk
ZXItPnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7CiB9CiAKK3ZvaWQgVmlkZW9MYXllckNocm9taXVt
Ojp1cGRhdGVUb0xheWVyKENDTGF5ZXJJbXBsKiBsYXllcikKK3sKKyAgICBMYXllckNocm9taXVt
Ojp1cGRhdGVUb0xheWVyKGxheWVyKTsKKworICAgIENDVmlkZW9MYXllckltcGwqIHZpZGVvTGF5
ZXIgPSBzdGF0aWNfY2FzdDxDQ1ZpZGVvTGF5ZXJJbXBsKj4obGF5ZXIpOworICAgIHZpZGVvTGF5
ZXItPnNldFNraXBzRHJhdyhtX3NraXBzRHJhdyk7CisgICAgdmlkZW9MYXllci0+c2V0RnJhbWVG
b3JtYXQobV9mcmFtZUZvcm1hdCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kp
IHsKKyAgICAgICAgdmlkZW9MYXllci0+c2V0VGV4dHVyZShpLCBtX3RleHR1cmVzW2ldKTsKKyAg
ICAgICAgdmlkZW9MYXllci0+c2V0VGV4dHVyZVNpemUoaSwgbV90ZXh0dXJlU2l6ZXNbaV0pOwor
ICAgICAgICB2aWRlb0xheWVyLT5zZXRGcmFtZVNpemUoaSwgbV9mcmFtZVNpemVzW2ldKTsKKyAg
ICB9Cit9CisKKwogdW5zaWduZWQgVmlkZW9MYXllckNocm9taXVtOjpkZXRlcm1pbmVUZXh0dXJl
Rm9ybWF0KFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUpCiB7CiAgICAgc3dpdGNoIChmcmFtZS0+
Zm9ybWF0KCkpIHsKQEAgLTIzOSwzMyArMjM4LDYgQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06
OnVwZGF0ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHRleHQK
ICAgICB9CiB9CiAKLXZvaWQgVmlkZW9MYXllckNocm9taXVtOjpkcmF3KCkKLXsKLSAgICBpZiAo
bV9za2lwc0RyYXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChsYXllclJlbmRlcmVy
KCkpOwotICAgIGNvbnN0IFJHQkFQcm9ncmFtKiByZ2JhUHJvZ3JhbSA9IGxheWVyUmVuZGVyZXIo
KS0+dmlkZW9MYXllclJHQkFQcm9ncmFtKCk7Ci0gICAgQVNTRVJUKHJnYmFQcm9ncmFtICYmIHJn
YmFQcm9ncmFtLT5pbml0aWFsaXplZCgpKTsKLSAgICBjb25zdCBZVVZQcm9ncmFtKiB5dXZQcm9n
cmFtID0gbGF5ZXJSZW5kZXJlcigpLT52aWRlb0xheWVyWVVWUHJvZ3JhbSgpOwotICAgIEFTU0VS
VCh5dXZQcm9ncmFtICYmIHl1dlByb2dyYW0tPmluaXRpYWxpemVkKCkpOwotCi0gICAgc3dpdGNo
IChtX2ZyYW1lRm9ybWF0KSB7Ci0gICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OllWMTI6Ci0g
ICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OllWMTY6Ci0gICAgICAgIGRyYXdZVVYoeXV2UHJv
Z3JhbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpSR0JB
OgotICAgICAgICBkcmF3UkdCQShyZ2JhUHJvZ3JhbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgb3RoZXIgcGF0aHMuCi0gICAgICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZWxlYXNlQ3Vy
cmVudEZyYW1lKCk7Ci19Ci0KIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjpyZWxlYXNlQ3VycmVu
dEZyYW1lKCkKIHsKICAgICBpZiAoIW1fY3VycmVudEZyYW1lKQpAQCAtMjc2LDY0ICsyNDgsNiBA
QCB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6cmVsZWFzZUN1cnJlbnRGcmFtZSgpCiAgICAgcmVz
ZXRGcmFtZVBhcmFtZXRlcnMoKTsKIH0KIAotdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OmRyYXdZ
VVYoY29uc3QgVmlkZW9MYXllckNocm9taXVtOjpZVVZQcm9ncmFtKiBwcm9ncmFtKQotewotICAg
IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKLSAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRTEpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjp5
UGxhbmVdKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkUyKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVzW1ZpZGVvRnJh
bWVDaHJvbWl1bTo6dVBsYW5lXSkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMykpOwotICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0
dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnZQbGFuZV0pKTsKLQotICAgIGxheWVyUmVuZGVyZXIo
KS0+dXNlU2hhZGVyKHByb2dyYW0tPnByb2dyYW0oKSk7Ci0gICAgdW5zaWduZWQgeUZyYW1lV2lk
dGggPSBtX2ZyYW1lU2l6ZXNbVmlkZW9GcmFtZUNocm9taXVtOjp5UGxhbmVdLndpZHRoKCk7Ci0g
ICAgdW5zaWduZWQgeVRleHR1cmVXaWR0aCA9IG1fdGV4dHVyZVNpemVzW1ZpZGVvRnJhbWVDaHJv
bWl1bTo6eVBsYW5lXS53aWR0aCgpOwotICAgIC8vIEFyYml0cmFyaWx5IHRha2UgdGhlIHUgc2l6
ZXMgYmVjYXVzZSB1IGFuZCB2IGRpbWVuc2lvbnMgYXJlIGlkZW50aWNhbC4KLSAgICB1bnNpZ25l
ZCB1dkZyYW1lV2lkdGggPSBtX2ZyYW1lU2l6ZXNbVmlkZW9GcmFtZUNocm9taXVtOjp1UGxhbmVd
LndpZHRoKCk7Ci0gICAgdW5zaWduZWQgdXZUZXh0dXJlV2lkdGggPSBtX3RleHR1cmVTaXplc1tW
aWRlb0ZyYW1lQ2hyb21pdW06OnVQbGFuZV0ud2lkdGgoKTsKLQotICAgIGZsb2F0IHlXaWR0aFNj
YWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHlGcmFtZVdpZHRoKSAvIHlUZXh0dXJlV2lk
dGg7Ci0gICAgZmxvYXQgdXZXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHV2
RnJhbWVXaWR0aCkgLyB1dlRleHR1cmVXaWR0aDsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
dW5pZm9ybTFmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnlXaWR0aFNjYWxlRmFjdG9yTG9jYXRp
b24oKSwgeVdpZHRoU2NhbGVGYWN0b3IpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5p
Zm9ybTFmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnV2V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9u
KCksIHV2V2lkdGhTY2FsZUZhY3RvcikpOwotCi0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVu
aWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnlUZXh0dXJlTG9jYXRpb24oKSwgMSkp
OwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRT
aGFkZXIoKS51VGV4dHVyZUxvY2F0aW9uKCksIDIpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkudlRleHR1cmVMb2NhdGlvbigp
LCAzKSk7Ci0KLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihwcm9n
cmFtLT5mcmFnbWVudFNoYWRlcigpLmNjTWF0cml4TG9jYXRpb24oKSwgMCwgY29uc3RfY2FzdDxm
bG9hdCo+KHl1djJSR0IpLCAxKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0z
ZnYocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS55dXZBZGpMb2NhdGlvbigpLCBjb25zdF9jYXN0
PGZsb2F0Kj4oeXV2QWRqdXN0KSwgMSkpOwotCi0gICAgZHJhd1RleHR1cmVkUXVhZChjb250ZXh0
LCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwgY2NMYXllckltcGwoKS0+ZHJh
d1RyYW5zZm9ybSgpLAotICAgICAgICAgICAgICAgICAgICAgYm91bmRzKCkud2lkdGgoKSwgYm91
bmRzKCkuaGVpZ2h0KCksIGNjTGF5ZXJJbXBsKCktPmRyYXdPcGFjaXR5KCksCi0gICAgICAgICAg
ICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAotICAg
ICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9u
KCkpOwotCi0gICAgLy8gUmVzZXQgYWN0aXZlIHRleHR1cmUgYmFjayB0byB0ZXh0dXJlIDAuCi0g
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkUwKSk7Ci19Ci0KLXZvaWQgVmlkZW9MYXllckNocm9taXVtOjpkcmF3UkdCQShjb25z
dCBWaWRlb0xheWVyQ2hyb21pdW06OlJHQkFQcm9ncmFtKiBwcm9ncmFtKQotewotICAgIEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKLSAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RTApKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjpyZ2JQbGFu
ZV0pKTsKLQotICAgIGxheWVyUmVuZGVyZXIoKS0+dXNlU2hhZGVyKHByb2dyYW0tPnByb2dyYW0o
KSk7Ci0gICAgdW5zaWduZWQgZnJhbWVXaWR0aCA9IG1fZnJhbWVTaXplc1tWaWRlb0ZyYW1lQ2hy
b21pdW06OnJnYlBsYW5lXS53aWR0aCgpOwotICAgIHVuc2lnbmVkIHRleHR1cmVXaWR0aCA9IG1f
dGV4dHVyZVNpemVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6cmdiUGxhbmVdLndpZHRoKCk7Ci0gICAg
ZmxvYXQgd2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0PihmcmFtZVdpZHRoKSAv
IHRleHR1cmVXaWR0aDsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKHByb2dy
YW0tPnZlcnRleFNoYWRlcigpLnRleFRyYW5zZm9ybUxvY2F0aW9uKCksIDAsIDAsIHdpZHRoU2Nh
bGVGYWN0b3IsIDEpKTsKLQotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkocHJv
Z3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOwotCi0gICAgZHJh
d1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgo
KSwgY2NMYXllckltcGwoKS0+ZHJhd1RyYW5zZm9ybSgpLAotICAgICAgICAgICAgICAgICAgICAg
Ym91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGNjTGF5ZXJJbXBsKCktPmRyYXdP
cGFjaXR5KCksCi0gICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5t
YXRyaXhMb2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRT
aGFkZXIoKS5hbHBoYUxvY2F0aW9uKCkpOwotfQotCiB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6
cmVzZXRGcmFtZVBhcmFtZXRlcnMoKQogewogICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBw
bGFuZSA8IFZpZGVvRnJhbWVDaHJvbWl1bTo6bWF4UGxhbmVzOyBwbGFuZSsrKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVy
Q2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Zp
ZGVvTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGM2OWNjN2VkMmQ1NjRiMGI5OTQyMjgxNGM5YzMwNTUz
OTAyMWJkNzIuLmNlZGIxMTMwZDFiZGM0MWNhYzc1NTg1ZTYxMzU3OWNlMjkwYzdhOGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oCkBAIC00NSwxNiArNDUsMTcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFZpZGVvTGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bSogb3duZXIgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZpZGVvRnJhbWVQcm92aWRlciogPSAwKTsKICAgICB2aXJ0dWFsIH5W
aWRlb0xheWVyQ2hyb21pdW0oKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHNJZkRp
cnR5KCk7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZUNDTGF5
ZXJJbXBsKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygp
OwogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
Ci0gICAgdmlydHVhbCB2b2lkIGRyYXcoKTsKIAogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2Fs
bGVkIGJ5IFZpZGVvRnJhbWVQcm92aWRlci4gV2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQKICAg
ICAvLyBwdXRDdXJyZW50RnJhbWUoKSBtdXN0IGJlIGNhbGxlZCB0byByZXR1cm4gdGhlIGZyYW1l
IGN1cnJlbnRseSBoZWxkLgogICAgIHZvaWQgcmVsZWFzZUN1cnJlbnRGcmFtZSgpOwogCi0gICAg
dHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXhUcmFuc2Zvcm0sIEZyYWdt
ZW50U2hhZGVyUkdCQVRleEZsaXBBbHBoYT4gUkdCQVByb2dyYW07Ci0gICAgdHlwZWRlZiBQcm9n
cmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXhZVVZTdHJldGNoLCBGcmFnbWVudFNoYWRlcllV
VlZpZGVvPiBZVVZQcm9ncmFtOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUb0xheWVyKENDTGF5
ZXJJbXBsKik7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFJlc291cmNl
cygpOwpAQCAtNjksMTQgKzcwLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVJHQkFDb250
ZW50cyhHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSopOwogICAg
IHZvaWQgYWxsb2NhdGVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgdW5zaWduZWQgdGV4dHVy
ZUlkLCBjb25zdCBJbnRTaXplJiBkaW1lbnNpb25zLCB1bnNpZ25lZCB0ZXh0dXJlRm9ybWF0KTsK
ICAgICB2b2lkIHVwZGF0ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCB0ZXh0
dXJlSWQsIGNvbnN0IEludFNpemUmIGRpbWVuc2lvbnMsIHVuc2lnbmVkIHRleHR1cmVGb3JtYXQs
IGNvbnN0IHZvaWQqIGRhdGEpOwotICAgIHZvaWQgZHJhd1lVVihjb25zdCBZVVZQcm9ncmFtKik7
Ci0gICAgdm9pZCBkcmF3UkdCQShjb25zdCBSR0JBUHJvZ3JhbSopOwogICAgIHZvaWQgcmVzZXRG
cmFtZVBhcmFtZXRlcnMoKTsKICAgICB2b2lkIHNhdmVDdXJyZW50RnJhbWUoVmlkZW9GcmFtZUNo
cm9taXVtKik7CiAKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgeXV2MlJHQls5XTsKLSAgICBzdGF0
aWMgY29uc3QgZmxvYXQgeXV2QWRqdXN0WzNdOwotCiAgICAgYm9vbCBtX3NraXBzRHJhdzsKICAg
ICBWaWRlb0ZyYW1lQ2hyb21pdW06OkZvcm1hdCBtX2ZyYW1lRm9ybWF0OwogICAgIFZpZGVvRnJh
bWVQcm92aWRlciogbV9wcm92aWRlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCmlu
ZGV4IGU4M2QwNDU2YTVjNWVhNTgyYmZhNzFhNGJkNzc0ZGM2N2UwZTg3NTcuLjdhYjQzYTk4Njhm
MmQzNjE0NGI5MjA2ODEyZWQzN2U2ZTY3ZWRjOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9t
aXVtLmNwcApAQCAtNTAsNyArNTAsNyBAQCBXZWJHTExheWVyQ2hyb21pdW06OldlYkdMTGF5ZXJD
aHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQogewogfQogCi12b2lkIFdlYkdM
TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KCkKK3ZvaWQgV2ViR0xMYXllckNo
cm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkKIHsKICAgICBpZiAoIW1fY29udGVu
dHNEaXJ0eSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaAppbmRl
eCA3MGJlODc2OTI4MzQ2YWU0NjM0ODU4OWYxZWI1ZWZiNmY3Mzg0NDlkLi45OWE2YmUzMDdjYzQ2
ZGIxMjYwNjlhYjQxODEwYTk0Y2E1NDQ2NWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0u
aApAQCAtNDUsNyArNDUsNyBAQCBjbGFzcyBXZWJHTExheWVyQ2hyb21pdW0gOiBwdWJsaWMgQ2Fu
dmFzTGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xM
YXllckNocm9taXVtPiBjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lciA9IDApOwog
ICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHNJZkRpcnR5KCk7CisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKIAogICAgIHZvaWQgc2V0Q29udGV4
dChjb25zdCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2Fu
dmFzTGF5ZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MzFhNjQ5OTEzY2YyODZmMjk5NGMxZTUzMmFh
NGQ3ZjA2NDk2ZGQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwCkBAIC0wLDAgKzEsODYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisKKyNpbmNsdWRlICJjYy9DQ0NhbnZhc0xheWVySW1wbC5oIgorCisjaW5jbHVk
ZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0NDYW52YXNMYXllckltcGw6
OkNDQ2FudmFzTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyKQorICAgIDogQ0NMYXllcklt
cGwob3duZXIpCisgICAgLCBtX3RleHR1cmVJZCgwKQorICAgICwgbV9wcmVtdWx0aXBsaWVkQWxw
aGEodHJ1ZSkKK3sKK30KKworQ0NDYW52YXNMYXllckltcGw6On5DQ0NhbnZhc0xheWVySW1wbCgp
Cit7Cit9CisKK3ZvaWQgQ0NDYW52YXNMYXllckltcGw6OmRyYXcoKQoreworICAgIEFTU0VSVChs
YXllclJlbmRlcmVyKCkpOworICAgIGNvbnN0IENDQ2FudmFzTGF5ZXJJbXBsOjpQcm9ncmFtKiBw
cm9ncmFtID0gbGF5ZXJSZW5kZXJlcigpLT5jYW52YXNMYXllclByb2dyYW0oKTsKKyAgICBBU1NF
UlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgpKTsKKyAgICBHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpOworICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkp
OworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpKTsKKyAgICBHQzNEZW51bSBzZmFjdG9yID0gbV9w
cmVtdWx0aXBsaWVkQWxwaGEgPyBHcmFwaGljc0NvbnRleHQzRDo6T05FIDogR3JhcGhpY3NDb250
ZXh0M0Q6OlNSQ19BTFBIQTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmxlbmRGdW5jKHNm
YWN0b3IsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKSk7CisgICAgbGF5
ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIocHJvZ3JhbS0+cHJvZ3JhbSgpKTsKKyAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxl
ckxvY2F0aW9uKCksIDApKTsKKyAgICBMYXllckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFkKGNv
bnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCBkcmF3VHJhbnNmb3Jt
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHMoKS53aWR0aCgp
LCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT5mcmFnbWVudFNo
YWRlcigpLmFscGhhTG9jYXRpb24oKSk7CisKK30KKworCitzdGF0aWMgdm9pZCB3cml0ZUluZGVu
dChUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSAh
PSBpbmRlbnQ7ICsraSkKKyAgICAgICAgdHMgPDwgIiAgIjsKK30KKwordm9pZCBDQ0NhbnZhc0xh
eWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkg
Y29uc3QKK3sKKyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8PCAiY2FudmFz
IGxheWVyIHRleHR1cmUgaWQ6ICIgPDwgbV90ZXh0dXJlSWQgPDwgIiBwcmVtdWx0aXBsaWVkOiAi
IDw8IG1fcHJlbXVsdGlwbGllZEFscGhhIDw8ICJcbiI7CisgICAgQ0NMYXllckltcGw6OmR1bXBM
YXllclByb3BlcnRpZXModHMsIGluZGVudCk7Cit9CisKK30KKworI2VuZGlmIC8vIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOGNiZjhkMTc2MzA2YjgwODdlZDgxZmY3NThlM2NmZTFmZmJkYTFmOQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQ2FudmFzTGF5ZXJJbXBsLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0ND
YW52YXNMYXllckltcGxfaAorI2RlZmluZSBDQ0NhbnZhc0xheWVySW1wbF9oCisKKyNpbmNsdWRl
ICJQcm9ncmFtQmluZGluZy5oIgorI2luY2x1ZGUgIlNoYWRlckNocm9taXVtLmgiCisjaW5jbHVk
ZSAiY2MvQ0NMYXllckltcGwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0Nh
bnZhc0xheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q0NDYW52YXNMYXllckltcGw+IGNyZWF0ZShMYXllckNocm9taXVtKiBvd25l
cikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NDYW52YXNMYXllckltcGwo
b3duZXIpKTsKKyAgICB9CisgICAgdmlydHVhbCB+Q0NDYW52YXNMYXllckltcGwoKTsKKworICAg
IHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4LCBGcmFnbWVudFNoYWRl
clJHQkFUZXhGbGlwQWxwaGE+IFByb2dyYW07CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdygpOwor
CisgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBp
bmRlbnQpIGNvbnN0OworCisgICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQgaWQpIHsgbV90
ZXh0dXJlSWQgPSBpZDsgfQorICAgIHZvaWQgc2V0UHJlbXVsdGlwbGllZEFscGhhKGJvb2wgcHJl
bXVsdGlwbGllZEFscGhhKSB7IG1fcHJlbXVsdGlwbGllZEFscGhhID0gcHJlbXVsdGlwbGllZEFs
cGhhOyB9Citwcml2YXRlOgorICAgIGV4cGxpY2l0IENDQ2FudmFzTGF5ZXJJbXBsKExheWVyQ2hy
b21pdW0qKTsKKworICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOworICAgIGJvb2wgbV9wcmVtdWx0
aXBsaWVkQWxwaGE7Cit9OworCit9CisKKyNlbmRpZiAvLyBDQ0NhbnZhc0xheWVySW1wbF9oCisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCBiMzg4YTQ5NGRmMTY3ODJiNWIzYWJhNDk0YjFl
MDljMDEwMGY3OGM0Li40NDZjNTMyNzFlZDgxMDRkYWUyNmQyODg5MDk5ZWEyOGIwYTc5YTY2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0xMDEsMjUgKzEwMSw2IEBAIENDTGF5ZXJJbXBs
KiBDQ0xheWVySW1wbDo6cmVwbGljYUxheWVyKCkgY29uc3QKICAgICByZXR1cm4gbV9vd25lci0+
cmVwbGljYUxheWVyKCkgPyBtX293bmVyLT5yZXBsaWNhTGF5ZXIoKS0+Y2NMYXllckltcGwoKSA6
IDA7CiB9CiAKLXZvaWQgQ0NMYXllckltcGw6OnVwZGF0ZUZyb21MYXllcihMYXllckNocm9taXVt
KiBsYXllcikKLXsKLSAgICBtX2FuY2hvclBvaW50ID0gbGF5ZXItPmFuY2hvclBvaW50KCk7Ci0g
ICAgbV9hbmNob3JQb2ludFogPSBsYXllci0+YW5jaG9yUG9pbnRaKCk7Ci0gICAgbV9ib3VuZHMg
PSBsYXllci0+Ym91bmRzKCk7Ci0gICAgbV9kb3VibGVTaWRlZCA9IGxheWVyLT5kb3VibGVTaWRl
ZCgpOwotICAgIG1fbWFza3NUb0JvdW5kcyA9IGxheWVyLT5tYXNrc1RvQm91bmRzKCk7Ci0gICAg
bV9vcGFjaXR5ID0gbGF5ZXItPm9wYWNpdHkoKTsKLSAgICBtX3Bvc2l0aW9uID0gbGF5ZXItPnBv
c2l0aW9uKCk7Ci0gICAgbV9wcmVzZXJ2ZXMzRCA9IGxheWVyLT5wcmVzZXJ2ZXMzRCgpOwotICAg
IG1fc3VibGF5ZXJUcmFuc2Zvcm0gPSBsYXllci0+c3VibGF5ZXJUcmFuc2Zvcm0oKTsKLSAgICBt
X3RyYW5zZm9ybSA9IGxheWVyLT50cmFuc2Zvcm0oKTsKLQotICAgIGlmIChtYXNrTGF5ZXIoKSkK
LSAgICAgICAgbWFza0xheWVyKCktPnVwZGF0ZUZyb21MYXllcihtX293bmVyLT5tYXNrTGF5ZXIo
KSk7Ci0gICAgaWYgKHJlcGxpY2FMYXllcigpKQotICAgICAgICByZXBsaWNhTGF5ZXIoKS0+dXBk
YXRlRnJvbUxheWVyKG1fb3duZXItPnJlcGxpY2FMYXllcigpKTsKLX0KLQogdm9pZCBDQ0xheWVy
SW1wbDo6c2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21pdW0qIHJlbmRlcmVyKQog
ewogICAgIG1fbGF5ZXJSZW5kZXJlciA9IHJlbmRlcmVyOwpAQCAtMTM0LDEzICsxMTUsMTUgQEAg
UmVuZGVyU3VyZmFjZUNocm9taXVtKiBDQ0xheWVySW1wbDo6Y3JlYXRlUmVuZGVyU3VyZmFjZSgp
CiBib29sIENDTGF5ZXJJbXBsOjpkZXNjZW5kYW50c0RyYXdzQ29udGVudCgpCiB7CiAgICAgY29u
c3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJsYXllcnMgPSBtX293bmVyLT5n
ZXRTdWJsYXllcnMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YmxheWVycy5zaXpl
KCk7ICsraSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7ICsr
aSkgeworICAgICAgICBzdWJsYXllcnNbaV0tPmNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVkZWQoKTsK
ICAgICAgICAgaWYgKHN1YmxheWVyc1tpXS0+Y2NMYXllckltcGwoKS0+ZHJhd3NDb250ZW50KCkg
fHwgc3VibGF5ZXJzW2ldLT5jY0xheWVySW1wbCgpLT5kZXNjZW5kYW50c0RyYXdzQ29udGVudCgp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotLy8gVGhlc2UgYmVsb25nIG9uIENDTGF5ZXJJbXBsLCBidXQgc2hvdWxkIGJlIHN1YmNsYXNl
ZCBieSBlYWNoIHR5cGUgYW5kIG5vdCBkZWZlciB0byB0aGUgTGF5ZXJDaHJvbWl1bSBzdWJ0eXBl
cy4KKy8vIFRoZXNlIGJlbG9uZyBvbiBDQ0xheWVySW1wbCwgYnV0IHNob3VsZCBiZSBvdmVycmlk
ZGVuIGJ5IGVhY2ggdHlwZSBhbmQgbm90IGRlZmVyIHRvIHRoZSBMYXllckNocm9taXVtIHN1YnR5
cGVzLgogYm9vbCBDQ0xheWVySW1wbDo6ZHJhd3NDb250ZW50KCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9vd25lci0+ZHJhd3NDb250ZW50KCk7CkBAIC0xNTEsNiArMTM0LDExIEBAIHZvaWQgQ0NM
YXllckltcGw6OmRyYXcoKQogICAgIHJldHVybiBtX293bmVyLT5kcmF3KCk7CiB9CiAKK3ZvaWQg
Q0NMYXllckltcGw6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKQoreworICAgIHJldHVybiBt
X293bmVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCk7Cit9CisKIHZvaWQgQ0NMYXllcklt
cGw6OnVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpCiB7CiAgICAgbV9vd25lci0+dW5yZXNlcnZl
Q29udGVudHNUZXh0dXJlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCBlMmY1ZjliNDc5ZGY4
YjAzNjllYmIwNWNjYWRmNDg3MjI1MDVkMTUwLi4zMWYwZTZjZTI3YjNmMTgyZmFiMTgyNWU1NGMz
YzU4NWM4NDUxZjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENDTGF5ZXJJbXBsKG93bmVyKSk7CiAg
ICAgfQogICAgIC8vIFdoZW4gdGhpcyBjbGFzcyBnZXRzIHN1YmNsYXNzZXMsIHJlbWVtYmVyIHRv
IGFkZCAndmlydHVhbCcgaGVyZS4KLSAgICB+Q0NMYXllckltcGwoKTsKKyAgICB2aXJ0dWFsIH5D
Q0xheWVySW1wbCgpOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIGludCBkZWJ1Z0lEKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWJ1Z0lEOyB9CkBAIC01OSwyNyArNTksNDEgQEAgcHVibGljOgogICAgIEND
TGF5ZXJJbXBsKiBtYXNrTGF5ZXIoKSBjb25zdDsKICAgICBDQ0xheWVySW1wbCogcmVwbGljYUxh
eWVyKCkgY29uc3Q7CiAKLSAgICB2b2lkIGRyYXcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdygp
OworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCk7CiAgICAgdm9p
ZCB1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKTsKICAgICB2b2lkIGJpbmRDb250ZW50c1RleHR1
cmUoKTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGxheWVyIGhhcyBjb250ZW50IHRv
IGRyYXcuCi0gICAgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
ZHJhd3NDb250ZW50KCkgY29uc3Q7CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW55IG9mIHRo
ZSBsYXllcidzIGRlc2NlbmRhbnRzIGhhcyBjb250ZW50IHRvIGRyYXcuCiAgICAgYm9vbCBkZXNj
ZW5kYW50c0RyYXdzQ29udGVudCgpOwogCiAgICAgdm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7CiAK
LSAgICB2b2lkIHVwZGF0ZUZyb21MYXllcihMYXllckNocm9taXVtKik7Ci0KKyAgICB2b2lkIHNl
dEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50KSB7IG1fYW5jaG9yUG9p
bnQgPSBhbmNob3JQb2ludDsgfQogICAgIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50KCkg
Y29uc3QgeyByZXR1cm4gbV9hbmNob3JQb2ludDsgfQorCisgICAgdm9pZCBzZXRBbmNob3JQb2lu
dFooZmxvYXQgYW5jaG9yUG9pbnRaKSB7IG1fYW5jaG9yUG9pbnRaID0gYW5jaG9yUG9pbnRaOyB9
CiAgICAgZmxvYXQgYW5jaG9yUG9pbnRaKCkgY29uc3QgeyByZXR1cm4gbV9hbmNob3JQb2ludFo7
IH0KKworICAgIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sIG1hc2tzVG9Cb3VuZHMpIHsgbV9t
YXNrc1RvQm91bmRzID0gbWFza3NUb0JvdW5kczsgfQogICAgIGJvb2wgbWFza3NUb0JvdW5kcygp
IGNvbnN0IHsgcmV0dXJuIG1fbWFza3NUb0JvdW5kczsgfQorCisgICAgdm9pZCBzZXRPcGFjaXR5
KGZsb2F0IG9wYWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgfQogICAgIGZsb2F0IG9wYWNp
dHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KKworICAgIHZvaWQgc2V0UG9zaXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pIHsgbV9wb3NpdGlvbiA9IHBvc2l0aW9uOyB9CiAg
ICAgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9u
OyB9CisKKyAgICB2b2lkIHNldFByZXNlcnZlczNEKGJvb2wgcHJlc2VydmVzM0QpIHsgbV9wcmVz
ZXJ2ZXMzRCA9IHByZXNlcnZlczNEOyB9CiAgICAgYm9vbCBwcmVzZXJ2ZXMzRCgpIGNvbnN0IHsg
cmV0dXJuIG1fcHJlc2VydmVzM0Q7IH0KKworICAgIHZvaWQgc2V0U3VibGF5ZXJUcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtKSB7IG1fc3VibGF5
ZXJUcmFuc2Zvcm0gPSBzdWJsYXllclRyYW5zZm9ybTsgfQogICAgIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBzdWJsYXllclRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VibGF5ZXJU
cmFuc2Zvcm07IH0KKworICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiB0cmFuc2Zvcm0pIHsgbV90cmFuc2Zvcm0gPSB0cmFuc2Zvcm07IH0KICAgICBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFu
c2Zvcm07IH0KIAogICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpIHsgbV9uYW1l
ID0gbmFtZTsgfQpAQCAtMTI0LDExICsxMzgsMTIgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2
b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0Owog
Ci1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIC8vIEZvciBub3csIENDTGF5ZXJzIGFyZSBvd25l
ZCBkaXJlY3RseSBieSBhIExheWVyQ2hyb21pdW0uCiAgICAgTGF5ZXJDaHJvbWl1bSogbV9vd25l
cjsKICAgICBleHBsaWNpdCBDQ0xheWVySW1wbChMYXllckNocm9taXVtKik7CiAKK3ByaXZhdGU6
CiAgICAgLy8gUHJvcGVydGllcyBzeW5jaHJvbml6ZWQgZnJvbSB0aGUgYXNzb2NpYXRlZCBMYXll
ckNocm9taXVtLgogICAgIEZsb2F0UG9pbnQgbV9hbmNob3JQb2ludDsKICAgICBmbG9hdCBtX2Fu
Y2hvclBvaW50WjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4xYjIxNzkxM2NlZGE0YzRjZmZjMzhhZjZjNzBmYTJjOGEzMTJmZTdlCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVn
aW5MYXllckltcGwuY3BwCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJjYy9D
Q1BsdWdpbkxheWVySW1wbC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNp
bmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJQbHVnaW5MYXllckNo
cm9taXVtLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworQ0NQbHVnaW5MYXllckltcGw6OkNDUGx1Z2luTGF5ZXJJbXBsKExheWVyQ2hy
b21pdW0qIG93bmVyKQorICAgIDogQ0NMYXllckltcGwob3duZXIpCisgICAgLCBtX3RleHR1cmVJ
ZCgwKQoreworfQorCitDQ1BsdWdpbkxheWVySW1wbDo6fkNDUGx1Z2luTGF5ZXJJbXBsKCkKK3sK
K30KKwordm9pZCBDQ1BsdWdpbkxheWVySW1wbDo6ZHJhdygpCit7CisgICAgQVNTRVJUKGxheWVy
UmVuZGVyZXIoKSk7CisgICAgY29uc3QgQ0NQbHVnaW5MYXllckltcGw6OlByb2dyYW0qIHByb2dy
YW0gPSBsYXllclJlbmRlcmVyKCktPnBsdWdpbkxheWVyUHJvZ3JhbSgpOworICAgIEFTU0VSVChw
cm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOworICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCk7CisgICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7Cisg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBtX3RleHR1cmVJZCkpOworCisgICAgLy8gRklYTUU6IHNldHRpbmcgdGhlIHRl
eHR1cmUgcGFyYW1ldGVycyBldmVyeSB0aW1lIGlzIHJlZHVuZGFudC4gTW92ZSB0aGlzIGNvZGUg
c29tZXdoZXJlCisgICAgLy8gd2hlcmUgaXQgd2lsbCBvbmx5IGhhcHBlbiBvbmNlIHBlciB0ZXh0
dXJlLgorICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVS
LCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsK
KyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGlj
c0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50
ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7
CisKKyAgICBsYXllclJlbmRlcmVyKCktPnVzZVNoYWRlcihwcm9ncmFtLT5wcm9ncmFtKCkpOwor
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFk
ZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOworICAgIExheWVyQ2hyb21pdW06OmRyYXdUZXh0
dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGRy
YXdUcmFuc2Zvcm0oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5k
cygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3T3BhY2l0eSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4
TG9jYXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0t
PmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpKTsKK30KKworCitzdGF0aWMgdm9pZCB3
cml0ZUluZGVudChUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkKK3sKKyAgICBmb3IgKGludCBp
ID0gMDsgaSAhPSBpbmRlbnQ7ICsraSkKKyAgICAgICAgdHMgPDwgIiAgIjsKK30KKwordm9pZCBD
Q1BsdWdpbkxheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50
IGluZGVudCkgY29uc3QKK3sKKyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8
PCAicGx1Z2luIGxheWVyIHRleHR1cmUgaWQ6ICIgPDwgbV90ZXh0dXJlSWQgPDwgIlxuIjsKKyAg
ICBDQ0xheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyh0cywgaW5kZW50KTsKK30KKworfQor
CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVy
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQ
bHVnaW5MYXllckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NWViNWI3NjM2NDJhNjg5ZDkwZjY0Y2UzMDdh
ZGZmZTNkMWRiZTUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaApAQCAtMCwwICsxLDYwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBDQ1BsdWdpbkxheWVySW1wbF9oCisjZGVmaW5lIENDUGx1Z2luTGF5
ZXJJbXBsX2gKKworI2luY2x1ZGUgIlByb2dyYW1CaW5kaW5nLmgiCisjaW5jbHVkZSAiU2hhZGVy
Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIENDUGx1Z2luTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1BsdWdpbkxheWVySW1wbD4gY3JlYXRl
KExheWVyQ2hyb21pdW0qIG93bmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBDQ1BsdWdpbkxheWVySW1wbChvd25lcikpOworICAgIH0KKyAgICB2aXJ0dWFsIH5DQ1BsdWdp
bkxheWVySW1wbCgpOworCisgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQ
b3NUZXgsIEZyYWdtZW50U2hhZGVyUkdCQVRleEZsaXBBbHBoYT4gUHJvZ3JhbTsKKworICAgIHZp
cnR1YWwgdm9pZCBkcmF3KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGll
cyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFRleHR1cmVJ
ZCh1bnNpZ25lZCBpZCkgeyBtX3RleHR1cmVJZCA9IGlkOyB9CisKK3ByaXZhdGU6CisgICAgZXhw
bGljaXQgQ0NQbHVnaW5MYXllckltcGwoTGF5ZXJDaHJvbWl1bSopOworCisgICAgdW5zaWduZWQg
bV90ZXh0dXJlSWQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBDQ1BsdWdpbkxheWVySW1wbF9oCisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVmlkZW9MYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTM0YjY4MjcwMGE5
NDQwZWE5YTY2OTUyYmNjOTYzYWIyYWUyZmVjMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3Bw
CkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiY2MvQ0NWaWRlb0xheWVySW1w
bC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJMYXllclJl
bmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUg
IlZpZGVvTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRoZXNlIHZhbHVlcyBhcmUgbWFnaWMgbnVtYmVy
cyB0aGF0IGFyZSB1c2VkIGluIHRoZSB0cmFuc2Zvcm1hdGlvbgorLy8gZnJvbSBZVVYgdG8gUkdC
IGNvbG9yIHZhbHVlcy4KKy8vIFRoZXkgYXJlIHRha2VuIGZyb20gdGhlIGZvbGxvd2luZyB3ZWJw
YWdlOgorLy8gaHR0cDovL3d3dy5mb3VyY2Mub3JnL2ZjY3l2cmdiLnBocAorY29uc3QgZmxvYXQg
Q0NWaWRlb0xheWVySW1wbDo6eXV2MlJHQls5XSA9IHsKKyAgICAxLjE2NGYsIDEuMTY0ZiwgMS4x
NjRmLAorICAgIDAuZiwgLS4zOTFmLCAyLjAxOGYsCisgICAgMS41OTZmLCAtLjgxM2YsIDAuZiwK
K307CisKKy8vIFRoZXNlIHZhbHVlcyBtYXAgdG8gMTYsIDEyOCwgYW5kIDEyOCByZXNwZWN0aXZl
bHksIGFuZCBhcmUgY29tcHV0ZWQKKy8vIGFzIGEgZnJhY3Rpb24gb3ZlciAyNTYgKGUuZy4gMTYg
LyAyNTYgPSAwLjA2MjUpLgorLy8gVGhleSBhcmUgdXNlZCBpbiB0aGUgWVVWIHRvIFJHQkEgY29u
dmVyc2lvbiBmb3JtdWxhOgorLy8gICBZIC0gMTYgICA6IEdpdmVzIDE2IHZhbHVlcyBvZiBoZWFk
IGFuZCBmb290cm9vbSBmb3Igb3ZlcnNob290aW5nCisvLyAgIFUgLSAxMjggIDogVHVybnMgdW5z
aWduZWQgVSBpbnRvIHNpZ25lZCBVIFstMTI4LDEyN10KKy8vICAgViAtIDEyOCAgOiBUdXJucyB1
bnNpZ25lZCBWIGludG8gc2lnbmVkIFYgWy0xMjgsMTI3XQorY29uc3QgZmxvYXQgQ0NWaWRlb0xh
eWVySW1wbDo6eXV2QWRqdXN0WzNdID0geworICAgIC0wLjA2MjVmLAorICAgIC0wLjVmLAorICAg
IC0wLjVmLAorfTsKKworQ0NWaWRlb0xheWVySW1wbDo6Q0NWaWRlb0xheWVySW1wbChMYXllckNo
cm9taXVtKiBvd25lcikKKyAgICA6IENDTGF5ZXJJbXBsKG93bmVyKQoreworfQorCitDQ1ZpZGVv
TGF5ZXJJbXBsOjp+Q0NWaWRlb0xheWVySW1wbCgpCit7CisgICAgY2xlYW51cFJlc291cmNlcygp
OworfQorCit2b2lkIENDVmlkZW9MYXllckltcGw6OnNldFRleHR1cmUoc2l6ZV90IGksIHVuc2ln
bmVkIHRleHR1cmVJZCkKK3sKKyAgICBBU1NFUlQoaSA8IDMpOworICAgIG1fdGV4dHVyZXNbaV0g
PSB0ZXh0dXJlSWQ7Cit9CisKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6c2V0VGV4dHVyZVNpemUo
c2l6ZV90IGksIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgQVNTRVJUKGkgPCAzKTsKKyAg
ICBtX3RleHR1cmVTaXplc1tpXSA9IHNpemU7Cit9CisKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6
c2V0RnJhbWVTaXplKHNpemVfdCBpLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIEFTU0VS
VChpIDwgMyk7CisgICAgbV9mcmFtZVNpemVzW2ldID0gc2l6ZTsKK30KKwordm9pZCBDQ1ZpZGVv
TGF5ZXJJbXBsOjpkcmF3KCkKK3sKKyAgICBpZiAobV9za2lwc0RyYXcpCisgICAgICAgIHJldHVy
bjsKKworICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOworICAgIGNvbnN0IFJHQkFQcm9ncmFt
KiByZ2JhUHJvZ3JhbSA9IGxheWVyUmVuZGVyZXIoKS0+dmlkZW9MYXllclJHQkFQcm9ncmFtKCk7
CisgICAgQVNTRVJUKHJnYmFQcm9ncmFtICYmIHJnYmFQcm9ncmFtLT5pbml0aWFsaXplZCgpKTsK
KyAgICBjb25zdCBZVVZQcm9ncmFtKiB5dXZQcm9ncmFtID0gbGF5ZXJSZW5kZXJlcigpLT52aWRl
b0xheWVyWVVWUHJvZ3JhbSgpOworICAgIEFTU0VSVCh5dXZQcm9ncmFtICYmIHl1dlByb2dyYW0t
PmluaXRpYWxpemVkKCkpOworCisgICAgc3dpdGNoIChtX2ZyYW1lRm9ybWF0KSB7CisgICAgY2Fz
ZSBWaWRlb0ZyYW1lQ2hyb21pdW06OllWMTI6CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06
OllWMTY6CisgICAgICAgIGRyYXdZVVYoeXV2UHJvZ3JhbSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpSR0JBOgorICAgICAgICBkcmF3UkdCQShyZ2JhUHJv
Z3JhbSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgb3RoZXIgcGF0aHMuCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKwordm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3WVVWKGNvbnN0
IENDVmlkZW9MYXllckltcGw6OllVVlByb2dyYW0qIHByb2dyYW0pCit7CisgICAgR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyKCktPmNvbnRleHQoKTsKKyAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RTEpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjp5UGxhbmVd
KSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkUyKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVzW1ZpZGVvRnJhbWVDaHJv
bWl1bTo6dVBsYW5lXSkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMykpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlc1tW
aWRlb0ZyYW1lQ2hyb21pdW06OnZQbGFuZV0pKTsKKworICAgIGxheWVyUmVuZGVyZXIoKS0+dXNl
U2hhZGVyKHByb2dyYW0tPnByb2dyYW0oKSk7CisgICAgdW5zaWduZWQgeUZyYW1lV2lkdGggPSBt
X2ZyYW1lU2l6ZXNbVmlkZW9GcmFtZUNocm9taXVtOjp5UGxhbmVdLndpZHRoKCk7CisgICAgdW5z
aWduZWQgeVRleHR1cmVXaWR0aCA9IG1fdGV4dHVyZVNpemVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6
eVBsYW5lXS53aWR0aCgpOworICAgIC8vIEFyYml0cmFyaWx5IHRha2UgdGhlIHUgc2l6ZXMgYmVj
YXVzZSB1IGFuZCB2IGRpbWVuc2lvbnMgYXJlIGlkZW50aWNhbC4KKyAgICB1bnNpZ25lZCB1dkZy
YW1lV2lkdGggPSBtX2ZyYW1lU2l6ZXNbVmlkZW9GcmFtZUNocm9taXVtOjp1UGxhbmVdLndpZHRo
KCk7CisgICAgdW5zaWduZWQgdXZUZXh0dXJlV2lkdGggPSBtX3RleHR1cmVTaXplc1tWaWRlb0Zy
YW1lQ2hyb21pdW06OnVQbGFuZV0ud2lkdGgoKTsKKworICAgIGZsb2F0IHlXaWR0aFNjYWxlRmFj
dG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHlGcmFtZVdpZHRoKSAvIHlUZXh0dXJlV2lkdGg7Cisg
ICAgZmxvYXQgdXZXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHV2RnJhbWVX
aWR0aCkgLyB1dlRleHR1cmVXaWR0aDsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9y
bTFmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnlXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24oKSwg
eVdpZHRoU2NhbGVGYWN0b3IpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFm
KHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnV2V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKCksIHV2
V2lkdGhTY2FsZUZhY3RvcikpOworCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0x
aShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnlUZXh0dXJlTG9jYXRpb24oKSwgMSkpOworICAg
IEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIo
KS51VGV4dHVyZUxvY2F0aW9uKCksIDIpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5p
Zm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkudlRleHR1cmVMb2NhdGlvbigpLCAzKSk7
CisKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihwcm9ncmFtLT5m
cmFnbWVudFNoYWRlcigpLmNjTWF0cml4TG9jYXRpb24oKSwgMCwgY29uc3RfY2FzdDxmbG9hdCo+
KHl1djJSR0IpLCAxKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0zZnYocHJv
Z3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS55dXZBZGpMb2NhdGlvbigpLCBjb25zdF9jYXN0PGZsb2F0
Kj4oeXV2QWRqdXN0KSwgMSkpOworCisgICAgTGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVh
ZChjb250ZXh0LCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwgZHJhd1RyYW5z
Zm9ybSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzKCkud2lk
dGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGRyYXdPcGFjaXR5KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlv
bigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21l
bnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCkpOworCisgICAgLy8gUmVzZXQgYWN0aXZlIHRleHR1
cmUgYmFjayB0byB0ZXh0dXJlIDAuCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7Cit9CisKK3ZvaWQgQ0NWaWRlb0xh
eWVySW1wbDo6ZHJhd1JHQkEoY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6UkdCQVByb2dyYW0qIHBy
b2dyYW0pCit7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVy
KCktPmNvbnRleHQoKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZXNbVmlk
ZW9GcmFtZUNocm9taXVtOjpyZ2JQbGFuZV0pKTsKKworICAgIGxheWVyUmVuZGVyZXIoKS0+dXNl
U2hhZGVyKHByb2dyYW0tPnByb2dyYW0oKSk7CisgICAgdW5zaWduZWQgZnJhbWVXaWR0aCA9IG1f
ZnJhbWVTaXplc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnJnYlBsYW5lXS53aWR0aCgpOworICAgIHVu
c2lnbmVkIHRleHR1cmVXaWR0aCA9IG1fdGV4dHVyZVNpemVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6
cmdiUGxhbmVdLndpZHRoKCk7CisgICAgZmxvYXQgd2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19j
YXN0PGZsb2F0PihmcmFtZVdpZHRoKSAvIHRleHR1cmVXaWR0aDsKKyAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+dW5pZm9ybTRmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnRleFRyYW5zZm9ybUxv
Y2F0aW9uKCksIDAsIDAsIHdpZHRoU2NhbGVGYWN0b3IsIDEpKTsKKworICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9j
YXRpb24oKSwgMCkpOworCisgICAgTGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVhZChjb250
ZXh0LCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwgZHJhd1RyYW5zZm9ybSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzKCkud2lkdGgoKSwg
Ym91bmRzKCkuaGVpZ2h0KCksIGRyYXdPcGFjaXR5KCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFk
ZXIoKS5hbHBoYUxvY2F0aW9uKCkpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZUluZGVudChUZXh0
U3RyZWFtJiB0cywgaW50IGluZGVudCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSAhPSBpbmRl
bnQ7ICsraSkKKyAgICAgICAgdHMgPDwgIiAgIjsKK30KKwordm9pZCBDQ1ZpZGVvTGF5ZXJJbXBs
OjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAor
eworICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOworICAgIHRzIDw8ICJ2aWRlbyBsYXllclxu
IjsKKyAgICBDQ0xheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyh0cywgaW5kZW50KTsKK30K
KworfQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVv
TGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2U3MjJiMmMyZTA3ZWUxYTBjMTI4Mjc2
Mzc2ZTMyZmFiOTRhMDEwMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaApAQCAtMCwwICsxLDc4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBDQ1ZpZGVvTGF5ZXJJbXBsX2gKKyNkZWZpbmUgQ0NWaWRlb0xh
eWVySW1wbF9oCisKKyNpbmNsdWRlICJQcm9ncmFtQmluZGluZy5oIgorI2luY2x1ZGUgIlNoYWRl
ckNocm9taXVtLmgiCisjaW5jbHVkZSAiVmlkZW9GcmFtZUNocm9taXVtLmgiCisjaW5jbHVkZSAi
Y2MvQ0NMYXllckltcGwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBWaWRlb0Zy
YW1lUHJvdmlkZXI7CisKK2NsYXNzIENDVmlkZW9MYXllckltcGwgOiBwdWJsaWMgQ0NMYXllcklt
cGwgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDVmlkZW9MYXllckltcGw+IGNy
ZWF0ZShMYXllckNocm9taXVtKiBvd25lcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ0NWaWRlb0xheWVySW1wbChvd25lcikpOworICAgIH0KKyAgICB2aXJ0dWFsIH5DQ1Zp
ZGVvTGF5ZXJJbXBsKCk7CisKKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRl
clBvc1RleFRyYW5zZm9ybSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4RmxpcEFscGhhPiBSR0JBUHJv
Z3JhbTsKKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFlVVlN0
cmV0Y2gsIEZyYWdtZW50U2hhZGVyWVVWVmlkZW8+IFlVVlByb2dyYW07CisKKyAgICB2aXJ0dWFs
IHZvaWQgZHJhdygpOworCisgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4
dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OworCisgICAgdm9pZCBzZXRTa2lwc0RyYXcoYm9v
bCBza2lwc0RyYXcpIHsgbV9za2lwc0RyYXcgPSBza2lwc0RyYXc7IH0KKyAgICB2b2lkIHNldEZy
YW1lRm9ybWF0KFZpZGVvRnJhbWVDaHJvbWl1bTo6Rm9ybWF0IGZvcm1hdCkgeyBtX2ZyYW1lRm9y
bWF0ID0gZm9ybWF0OyB9CisgICAgdm9pZCBzZXRUZXh0dXJlKHNpemVfdCwgdW5zaWduZWQpOwor
ICAgIHZvaWQgc2V0VGV4dHVyZVNpemUoc2l6ZV90LCBjb25zdCBJbnRTaXplJik7CisgICAgdm9p
ZCBzZXRGcmFtZVNpemUoc2l6ZV90LCBjb25zdCBJbnRTaXplJik7CisKK3ByaXZhdGU6CisgICAg
ZXhwbGljaXQgQ0NWaWRlb0xheWVySW1wbChMYXllckNocm9taXVtKik7CisKKyAgICB2b2lkIGRy
YXdZVVYoY29uc3QgWVVWUHJvZ3JhbSopOworICAgIHZvaWQgZHJhd1JHQkEoY29uc3QgUkdCQVBy
b2dyYW0qKTsKKworICAgIHN0YXRpYyBjb25zdCBmbG9hdCB5dXYyUkdCWzldOworICAgIHN0YXRp
YyBjb25zdCBmbG9hdCB5dXZBZGp1c3RbM107CisKKyAgICBib29sIG1fc2tpcHNEcmF3OworICAg
IFZpZGVvRnJhbWVDaHJvbWl1bTo6Rm9ybWF0IG1fZnJhbWVGb3JtYXQ7CisgICAgdW5zaWduZWQg
bV90ZXh0dXJlc1szXTsKKyAgICBJbnRTaXplIG1fdGV4dHVyZVNpemVzWzNdOworICAgIEludFNp
emUgbV9mcmFtZVNpemVzWzNdOworfTsKKworfQorCisjZW5kaWYgLy8gQ0NWaWRlb0xheWVySW1w
bF9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86521</attachid>
            <date>2011-03-22 15:30:05 -0700</date>
            <delta_ts>2011-03-23 11:36:35 -0700</delta_ts>
            <desc>common writeIndent</desc>
            <filename>bug-56793-20110322153004.patch</filename>
            <type>text/plain</type>
            <size>86558</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE1OTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0YzJkZmNiNTQ2N2ZlYzg4
MDAwMmUzOGI0NmE3ODk1ZWVkOWUxNmI0Li5jM2ZiNGJkOGY2MjZiNWE4Njc4ZjAyMWQ5NTAyYjdk
MWUzNzM4MjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQ0IEBACisyMDExLTAzLTIxICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBNb3ZlIGRyYXcgaW1wbGVtZW50
YXRpb25zIHRvIENDTGF5ZXJJbXBsIGZvciBldmVyeXRoaW5nIGV4Y2VwdCBjb250ZW50IGxheWVy
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY3OTMK
KworICAgICAgICBNb3ZlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGxheWVyJ3MgZHJhdygp
IGZ1bmN0aW9uIGZyb20gTGF5ZXJDaHJvbWl1bSBzdWJjbGFzc2VzIHRvIENDTGF5ZXJJbXBsIHN1
YmNsYXNzZXMgZm9yIAorICAgICAgICBhbGwgbGF5ZXIgdHlwZXMgZXhjZXB0IGNvbnRlbnQgbGF5
ZXJzLiAgVGhpcyBnZXRzIHVzIGNsb3NlciB0byBkZWNvdXBsaW5nIHRoZSBjb21wb3NpdGUgc3Rl
cCBpdHNlbGYgZnJvbSB1cGRhdGluZyB0aGUgbGF5ZXJzLgorCisgICAgICAgIFRoZSBiaWdnZXN0
IGNoYW5nZSBpbiB0aGlzIHBhdGNoIGlzIGFkZGluZyBhIHNldCBvZiBDQ0xheWVySW1wbCBzdWJj
bGFzc2VzIHRvIGltcGxlbWVudCB0aGUgZGlmZmVyZW50IGRyYXdpbmcgcm91dGluZXMKKyAgICAg
ICAgYW5kIG1vdmluZyB0aGUgY29kZSBmcm9tIGVhY2ggWFhYTGF5ZXJDaHJvbWl1bSB0byBYWFhD
Q0xheWVySW1wbC4gIEluIG9yZGVyIHRvIHJlbmRlciBmcm9tIHRoZSBDQ0xheWVySW1wbCBzaWRl
IGFsbCBzdGF0ZQorICAgICAgICBuZWVkZWQgYXQgZHJhdyB0aW1lIGFsc28gaGFzIHRvIGJlIHN5
bmNocm9uaXplZCwgd2hpY2ggaXMgcGVyZm9ybWVkIGluIHVwZGF0ZVRvTGF5ZXIoKS4KKworICAg
ICAgICBPbiB0aGUgTGF5ZXJSZW5kZXJlckNocm9taXVtIHNpZGUgdGhlcmUgYXJlIGEgZmV3IGNo
YW5nZXMuICBJJ3ZlIHNwbGl0IHRoZSB1cGRhdGVDb250ZW50cyBjYWxscyBvbiBMYXllckNocm9t
aXVtcyBpbnRvIHR3byBvcGVyYXRpb25zCisgICAgICAgIHRlbnRhdGl2ZWx5IG5hbWVkICdwYWlu
dENvbnRlbnRzSWZOZWVkZWQnIGFuZCAndXBkYXRlQ29tcG9zaXRvclJlc291cmNlcycuICBwYWlu
dENvbnRlbnRzKCkgaXMgdXNlZCBmb3IgYW55IGNvZGUgdGhhdCBjYWxscyBpbnRvIFdlYktpdCBp
biBvcmRlciB0byBnZW5lcmF0ZQorICAgICAgICBuZXcgcGl4ZWwgZGF0YS4gIEl0J3MgZXhwZWN0
ZWQgdGhhdCB0aGlzIGNhbGwgbWF5IHRha2UgYSBsb25nIHBlcmlvZCBvZiB0aW1lIGFuZCBtYXkg
aW52b2x2ZSAib2RkIiBzaWRlIGVmZmVjdHMuICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkg
aXMgdXNlZCBmb3IKKyAgICAgICAgY29kZSB0aGF0IG5lZWRzIHRvIHVwZGF0ZSB0aGUgY29tcG9z
aXRvcidzIHRleHR1cmUgZGF0YSBvciBvdGhlciBzdGF0ZS4gIEl0IGlzIG5vdCBleHBlY3RlZCB0
aGF0IHRoaXMgY2FsbGJhY2sgd2lsbCB0YWtlIGxvbmcgKHNpbmNlIGl0J3MganVzdCBpbnNlcnRp
bmcKKyAgICAgICAgY29tbWFuZHMgaW50byB0aGUgR0wgY29tbWFuZCBzdHJlYW0sIGlkZWFsbHkp
IGFuZCB0aGlzIGNhbGwgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBhY2Nlc3MgdG8gdGhlIGNvbXBvc2l0
b3IncyBjb250ZXh0LCB1bmxpa2UgcGFpbnRDb250ZW50cygpLgorCisgICAgICAgIFRoZSB1cGRh
dGVBbmREcmF3TGF5ZXJzIGN5Y2xlIG5vdyBsb29rcyBsaWtlIHRoaXM6CisgICAgICAgIDEuKSB1
cGRhdGUgdGhlIHJvb3QgY29udGVudCBsYXllcgorICAgICAgICAyLikgdXBkYXRlIHRoZSByb290
IGxheWVyIHNjcm9sbGJhcnMKKyAgICAgICAgMy4pIGZvciBlYWNoIExheWVyQ2hyb21pdW0gaW4g
dHJlZSBvcmRlcjoKKyAgICAgICAgICBhLikgZW5zdXJlIGEgQ0NMYXllckltcGwgb2YgdGhlIGNv
cnJlY3QgdHlwZSBleGlzdHMgZm9yIHRoaXMgbGF5ZXIKKyAgICAgICAgICBiLikgcHVzaCBhbGwg
ZHJhdyB0aW1lIHByb3BlcnRpZXMgZnJvbSB0aGUgTGF5ZXJDaHJvbWl1bSB0byB0aGUgQ0NMYXll
ckltcGwKKyAgICAgICAgICBjLikgY29uc3RydWN0IHRoZSBhcHByb3ByaWF0ZSBkcmF3IHRyYW5z
Zm9ybXMsIHJlbmRlciBzdXJmYWNlcyBhbmQgcmVuZGVyIHN1cmZhY2Ugei1vcmRlciBzdWJsYXll
ciBsaXN0cworICAgICAgICA0LikgZm9yIGVhY2ggTGF5ZXJDaHJvbWl1bSBpbiB0cmVlIG9yZGVy
LCBwYWludCB0aGUgbGF5ZXIncyBjb250ZW50cworICAgICAgICA1LikgZm9yIGVhY2ggTGF5ZXJD
aHJvbWl1bSBpbiB0cmVlIG9yZGVyLCB1cGRhdGUgdGhlIGFzc29jaWF0ZSBjb21wb3NpdG9yIHJl
c291cmNlcyAodGV4dHVyZXMsIGV0YykKKyAgICAgICAgNi4pIGRyYXcgdGhlIHJvb3QgbGF5ZXIg
YW5kIGl0cyBzY3JvbGxiYXJzCisgICAgICAgIDcuKSBmb3IgZWFjaCBDQ0xheWVySW1wbCBpbiBy
ZW5kZXIgc3VyZmFjZSBvcmRlciwgZHJhdyBpdAorCisgICAgICAgIFN0ZXAgMyBzaG91bGQgcmVh
bGx5IGhhcHBlbiBhZnRlciBzdGVwIDUsIGJ1dCByaWdodCBub3cgcGFpbnRpbmcgYSBjb250ZW50
IGxheWVyIHJlcXVpcmVzIGtub3dsZWRnZSBvZiB0aGUgcmVuZGVyIHN1cmZhY2UgcHJvcGVydGll
cyBhbmQgZHJhdyB0cmFuc2Zvcm1zCisgICAgICAgIGluIG9yZGVyIHRvIHBhaW50LiAgV2UgYWxz
byBjdXJyZW50bHkgcHVzaCBsYXllciBwcm9wZXJ0aWVzIGZyb20gTGF5ZXJDaHJvbWl1bS0+Q0NM
YXllckltcGxzIHR3aWNlIG5vdyAtIG9uY2UgYXQgMy5iIGFuZCBvbmNlIGFmdGVyIDUgc28gd2Ug
Y2FuIHBpY2sKKyAgICAgICAgdXAgYW55IHRleHR1cmUgdXBkYXRlcy4gIFRoaXMgd2lsbCBhbHNv
IGdldCBmaXhlZCB3aGVuIHRoZSBwYWludCBkZXBlbmRlbmN5IG9uIHJlbmRlciBzdXJmYWNlcyBp
cyByZXNvbHZlZC4KKworICAgICAgICBJIGhhdmVuJ3QgbW9kaWZpZWQgdGhlIHJvb3QgbGF5ZXIg
b3IgY29udGVudCBsYXllcnMgaW4gb3JkZXIgdG8gbWluaW1pemUgY29uZmxpY3RzIHdpdGggdGhl
IG90aGVyIHBlbmRpbmcgd29yayBpbiB0aGF0IGFyZWEuCisKKyAgICAgICAgVGVzdHM6IGNvbXBv
c2l0aW5nLworCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1
bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6dXBk
YXRlVG9MYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nv
bnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNo
cm9taXVtOjpyZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6YmluZENvbnRlbnRzVGV4dHVy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjpwYWlu
dENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VMYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpM
YXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmNsZWFudXBS
ZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjp1cGRhdGVUb0xheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmR1bXBMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpM
YXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OmNjTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OmxheWVyUmVuZGVyZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnBh
aW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnVw
ZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OnNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnBhaW50Q29udGVudHNSZWN1
cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVD
b21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjYW52YXNMYXllclByb2dyYW0pOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpwbHVnaW5MYXllclByb2dyYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWRlb0xheWVyUkdCQVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWRlb0xh
eWVyWVVWUHJvZ3JhbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1
Z2luTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9t
aXVtOjpjcmVhdGVDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNo
cm9taXVtOjpzZXRUZXh0dXJlSWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJv
bWl1bTo6dXBkYXRlVG9MYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJD
aHJvbWl1bTo6dGV4dHVyZUlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNo
cm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVy
Q2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6
VmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVUb0xheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6ZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0QW5jaG9yUG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNldEFuY2hvclBvaW50Wik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0TWFza3NUb0JvdW5kcyk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVySW1wbDo6c2V0T3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1w
bDo6c2V0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNldFByZXNl
cnZlczNEKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRTdWJsYXllclRyYW5z
Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0VHJhbnNmb3JtKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5j
cHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Q0NDYW52YXNMYXll
ckltcGw6OkNDQ2FudmFzTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQ2FudmFzTGF5
ZXJJbXBsOjp+Q0NDYW52YXNMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NDYW52YXNM
YXllckltcGw6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NDYW52YXNMYXllckltcGw6OmR1
bXBMYXllclByb3BlcnRpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uaC4KKyAgICAgICAgKFdl
YkNvcmU6OkNDQ2FudmFzTGF5ZXJJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0ND
YW52YXNMYXllckltcGw6OnNldFRleHR1cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0NhbnZh
c0xheWVySW1wbDo6c2V0UHJlbXVsdGlwbGllZEFscGhhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHA6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21p
dW0uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5MYXllckltcGw6OkNDUGx1Z2luTGF5
ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luTGF5ZXJJbXBsOjp+Q0NQbHVnaW5M
YXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5MYXllckltcGw6OmRyYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5MYXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJ
bXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uaC4KKyAgICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luTGF5
ZXJJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5MYXllckltcGw6OnNl
dFRleHR1cmVJZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NW
aWRlb0xheWVySW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVy
SW1wbDo6Q0NWaWRlb0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJ
bXBsOjp+Q0NWaWRlb0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJ
bXBsOjpzZXRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OnNl
dFRleHR1cmVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OnNldEZy
YW1lU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmRyYXdZVVYpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NWaWRlb0xheWVySW1wbDo6ZHJhd1JHQkEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NW
aWRlb0xheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1ZpZGVvTGF5ZXJJbXBsOjpzZXRTa2lwc0RyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRl
b0xheWVySW1wbDo6c2V0RnJhbWVGb3JtYXQpOgorCiAyMDExLTAzLTIxICBBbmRyZWFzIEtsaW5n
ICA8a2xpbmdAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUb3IgQXJuZSBWZXN0
YsO4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDQwNjRlMDU3YTI5Y2JiMTY3M2QyYWE5ZDc4Nzk3YzNj
YTk5NjAzNGQuLjFhZTVkODYxMWQxYjEwNmYyMmYzZWQ4MWI5YmUzNjExZGY2YTQ4YTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKQEAgLTQxODIsMTAgKzQxODIsMTYgQEAKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5
ZXJJbXBsLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NDYW52YXNMYXllckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5
ZXJJbXBsLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VmlkZW9MYXllckltcGwuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbScsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvZWZsL0ZvbnRFZmwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9lZmwvSWNvbkVmbC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5j
cHAKaW5kZXggYWQ5NjFhYTZlM2RkM2RjNWRhNzBmOGEzZTY0YWVhZTIyNTFiMzEyOC4uNGNiMTE5
YTRkN2U4ZDcxMzY5NjU5YmQyMGZkYTVmMTFkZDUwMWMxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMy
RExheWVyQ2hyb21pdW0uY3BwCkBAIC01Niw3ICs1Niw3IEBAIENhbnZhczJETGF5ZXJDaHJvbWl1
bTo6fkNhbnZhczJETGF5ZXJDaHJvbWl1bSgpCiAgICAgICAgIGxheWVyUmVuZGVyZXJDb250ZXh0
KCktPmRlbGV0ZVRleHR1cmUobV90ZXh0dXJlSWQpOwogfQogCi12b2lkIENhbnZhczJETGF5ZXJD
aHJvbWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KCkKK3ZvaWQgQ2FudmFzMkRMYXllckNocm9t
aXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkKIHsKICAgICBpZiAoIW1fY29udGVudHNE
aXJ0eSB8fCAhbV9kcmF3aW5nQnVmZmVyKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hy
b21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
czJETGF5ZXJDaHJvbWl1bS5oCmluZGV4IGExNGNiOTgzYTViZDE4NTM1YjRhNjQ0NzdmZTUwNGVl
OGUyYzQ0MTMuLjgxYjExOGM1YjVkZmU5YzMxYTFlYjI0OWQ1OTkyZGI0MjZlZDIwOTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJE
TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IGNyZWF0ZShEcmF3
aW5nQnVmZmVyKiwgR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CiAgICAgdmlydHVhbCB+
Q2FudmFzMkRMYXllckNocm9taXVtKCk7CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHNJ
ZkRpcnR5KCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsK
IAogICAgIHZvaWQgc2V0VGV4dHVyZUNoYW5nZWQoKTsKICAgICB1bnNpZ25lZCB0ZXh0dXJlSWQo
KSBjb25zdDsKQEAgLTU1LDggKzU1LDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBleHBsaWNp
dCBDYW52YXMyRExheWVyQ2hyb21pdW0oRHJhd2luZ0J1ZmZlciosIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bSogb3duZXIpOwogICAgIERyYXdpbmdCdWZmZXIqIG1fZHJhd2luZ0J1ZmZlcjsKLQotICAg
IHN0YXRpYyB1bnNpZ25lZCBtX3NoYWRlclByb2dyYW1JZDsKIH07CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMDI2NDg2ODk5MjRjMTYwNzE1ZmY0YzJiOWM0Zjg3
NDgxZmY4YTE0Mi4uNDczMTA4NDk0M2IwZTM3ZTcyMDQzNzk3NTlhMjJkZmFiMjNjMjJiMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTQwLDggKzQwLDYgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi11bnNpZ25lZCBDYW52YXNMYXllckNocm9taXVtOjptX3NoYWRl
clByb2dyYW1JZCA9IDA7Ci0KIENhbnZhc0xheWVyQ2hyb21pdW06OkNhbnZhc0xheWVyQ2hyb21p
dW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKICAgICA6IExheWVyQ2hyb21pdW0ob3du
ZXIpCiAgICAgLCBtX3RleHR1cmVDaGFuZ2VkKHRydWUpCkBAIC01NCwyMiArNTIsMTggQEAgQ2Fu
dmFzTGF5ZXJDaHJvbWl1bTo6fkNhbnZhc0xheWVyQ2hyb21pdW0oKQogewogfQogCi12b2lkIENh
bnZhc0xheWVyQ2hyb21pdW06OmRyYXcoKQorUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gQ2FudmFz
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwoKQogewotICAgIEFTU0VSVChsYXllclJl
bmRlcmVyKCkpOwotICAgIGNvbnN0IENhbnZhc0xheWVyQ2hyb21pdW06OlByb2dyYW0qIHByb2dy
YW0gPSBsYXllclJlbmRlcmVyKCktPmNhbnZhc0xheWVyUHJvZ3JhbSgpOwotICAgIEFTU0VSVChw
cm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwotICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKLSAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLSAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIG1fdGV4dHVyZUlkKSk7Ci0gICAgR0MzRGVudW0gc2ZhY3RvciA9IG1fcHJlbXVsdGlw
bGllZEFscGhhID8gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSA6IEdyYXBoaWNzQ29udGV4dDNEOjpT
UkNfQUxQSEE7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBH
cmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSkpOwotICAgIGxheWVyUmVuZGVy
ZXIoKS0+dXNlU2hhZGVyKHByb2dyYW0tPnByb2dyYW0oKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlv
bigpLCAwKSk7Ci0gICAgZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVyKCkt
PnByb2plY3Rpb25NYXRyaXgoKSwgY2NMYXllckltcGwoKS0+ZHJhd1RyYW5zZm9ybSgpLAotICAg
ICAgICAgICAgICAgICAgICAgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGNj
TGF5ZXJJbXBsKCktPmRyYXdPcGFjaXR5KCksCi0gICAgICAgICAgICAgICAgICAgICBwcm9ncmFt
LT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAg
cHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCkpOworICAgIHJldHVybiBD
Q0NhbnZhc0xheWVySW1wbDo6Y3JlYXRlKHRoaXMpOworfQorCit2b2lkIENhbnZhc0xheWVyQ2hy
b21pdW06OnVwZGF0ZVRvTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQoreworICAgIExheWVyQ2hy
b21pdW06OnVwZGF0ZVRvTGF5ZXIobGF5ZXIpOworCisgICAgQ0NDYW52YXNMYXllckltcGwqIGNh
bnZhc0xheWVyID0gc3RhdGljX2Nhc3Q8Q0NDYW52YXNMYXllckltcGwqPihsYXllcik7CisgICAg
Y2FudmFzTGF5ZXItPnNldFRleHR1cmVJZChtX3RleHR1cmVJZCk7CisgICAgY2FudmFzTGF5ZXIt
PnNldFByZW11bHRpcGxpZWRBbHBoYShtX3ByZW11bHRpcGxpZWRBbHBoYSk7CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
c0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaAppbmRleCBlZDNhMDZmODc4ZDQ1M2YwYzJlMzI0ZGNi
YzQxZjY3ODFmOTkzZGEyLi41MjQ5NWZjZGI5OWFlZTQzNDk3ZTUxMjg4OTEzOTc5MzE4MzkzOTI5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXNMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCkBAIC00Myw5ICs0Myw5IEBAIGNsYXNz
IENhbnZhc0xheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CiAg
ICAgdmlydHVhbCB+Q2FudmFzTGF5ZXJDaHJvbWl1bSgpOwogCi0gICAgdmlydHVhbCB2b2lkIGRy
YXcoKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZUNDTGF5ZXJJ
bXBsKCk7CiAKLSAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleCwg
RnJhZ21lbnRTaGFkZXJSR0JBVGV4RmxpcEFscGhhPiBQcm9ncmFtOworICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVUb0xheWVyKENDTGF5ZXJJbXBsKik7CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNp
dCBDYW52YXNMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwpAQCAt
NTUsOSArNTUsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX3RleHR1cmVDaGFuZ2VkOwogICAg
IHVuc2lnbmVkIG1fdGV4dHVyZUlkOwogICAgIGJvb2wgbV9wcmVtdWx0aXBsaWVkQWxwaGE7Ci0K
LXByaXZhdGU6Ci0gICAgc3RhdGljIHVuc2lnbmVkIG1fc2hhZGVyUHJvZ3JhbUlkOwogfTsKIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29udGVudExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4IGZjODU3ZjE2YTY3ZTYy
MDdhOGE4MTJkODFiY2RjODJiNTUyMzA4ODMuLjRlYTljOTJlMWNhYWQ1ZWZlYzMzZjJkOTkxMjY2
MWZiZjQwMTU5YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTY2
LDcgKzY2LDcgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygp
CiAgICAgbV9jb250ZW50c1RleHR1cmUuY2xlYXIoKTsKIH0KIAotYm9vbCBDb250ZW50TGF5ZXJD
aHJvbWl1bTo6cmVxdWlyZXNDbGlwcGVkVXBkYXRlUmVjdCgpIGNvbnN0Citib29sIENvbnRlbnRM
YXllckNocm9taXVtOjpyZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCkKIHsKICAgICAvLyBUbyBh
dm9pZCBhbGxvY2F0aW5nIGV4Y2Vzc2l2ZWx5IGxhcmdlIHRleHR1cmVzLCBzd2l0Y2ggaW50byAi
bGFyZ2UgbGF5ZXIgbW9kZSIgaWYKICAgICAvLyBvbmUgb2YgdGhlIGxheWVyJ3MgZGltZW5zaW9u
cyBpcyBsYXJnZXIgdGhhbiAyMDAwIHBpeGVscyBvciB0aGUgc2l6ZSBvZgpAQCAtNzcsNyArNzcs
NyBAQCBib29sIENvbnRlbnRMYXllckNocm9taXVtOjpyZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0
KCkgY29uc3QKICAgICAgICAgICAgIHx8ICFsYXllclJlbmRlcmVyKCktPmNoZWNrVGV4dHVyZVNp
emUoYm91bmRzKCkpKTsKIH0KIAotdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29u
dGVudHNJZkRpcnR5KCkKK3ZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJ
ZkRpcnR5KCkKIHsKICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSBzdGF0aWNfY2Fz
dDxSZW5kZXJMYXllckJhY2tpbmcqPihtX293bmVyLT5jbGllbnQoKSk7CiAgICAgaWYgKCFiYWNr
aW5nIHx8IGJhY2tpbmctPnBhaW50aW5nR29lc1RvV2luZG93KCkpCkBAIC0yNjksNiArMjY5LDEx
IEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXcoKQogICAgIHVucmVzZXJ2ZUNvbnRl
bnRzVGV4dHVyZSgpOwogfQogCit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb21w
b3NpdG9yUmVzb3VyY2VzKCkKK3sKKyAgICB1cGRhdGVUZXh0dXJlSWZOZWVkZWQoKTsKK30KKwog
dm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCkKIHsK
ICAgICBpZiAoIW1fc2tpcHNEcmF3ICYmIG1fY29udGVudHNUZXh0dXJlKQpAQCAtMjc3LDggKzI4
Miw2IEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVy
ZSgpCiAKIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmJpbmRDb250ZW50c1RleHR1cmUoKQog
ewotICAgIHVwZGF0ZVRleHR1cmVJZk5lZWRlZCgpOwotCiAgICAgaWYgKCFtX3NraXBzRHJhdyAm
JiBtX2NvbnRlbnRzVGV4dHVyZSkKICAgICAgICAgbV9jb250ZW50c1RleHR1cmUtPmJpbmRUZXh0
dXJlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAppbmRleCA2MmJmOWQxZTJj
ODZjYWM1OGEyZmFiYTljMjIwZmQzODQ1MGEyOGMxLi5jZjI5NmFiOTA3ZDVhNzFjYWExOGU0YTU1
ZTJjZDE4Mzc3OGM0YjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKQEAgLTUw
LDcgKzUwLDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+Q29udGVudExheWVyQ2hyb21pdW0o
KTsKIAotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50c0lmRGlydHkoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcygpOwogICAgIHZpcnR1YWwgdm9pZCB1bnJlc2VydmVDb250ZW50
c1RleHR1cmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgYmluZENvbnRlbnRzVGV4dHVyZSgpOwogCkBA
IC02Myw3ICs2NCw3IEBAIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDb250ZW50TGF5ZXJDaHJv
bWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKIAogICAgIHZpcnR1YWwgdm9pZCBj
bGVhbnVwUmVzb3VyY2VzKCk7Ci0gICAgYm9vbCByZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCkg
Y29uc3Q7CisgICAgYm9vbCByZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCk7CiAgICAgdm9pZCBy
ZXNpemVVcGxvYWRCdWZmZXIoY29uc3QgSW50U2l6ZSYpOwogCiAgICAgdmlydHVhbCBjb25zdCBj
aGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJDb250ZW50TGF5ZXIiOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAppbmRleCA3YzQyMzY2Y2RmMGI1MzVjZjNj
NWIyODAxOTEyM2JjZjU0N2Y4ZWM3Li42MGMxMzMyZGYwNzIwY2YwMzJkNGU4N2VkOWFjZTM4NTVj
YjA4MjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTYwLDcgKzYwLDcg
QEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnNldENvbnRlbnRzKEltYWdlKiBjb250ZW50cykK
ICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAotdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnVw
ZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpCit2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250
ZW50c0lmRGlydHkoKQogewogICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOwogCkBAIC02OCw3
ICs2OCw3IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHko
KQogICAgIGlmIChyZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCkpIHsKICAgICAgICAgLy8gVXNl
IHRoZSBiYXNlIHZlcnNpb24gb2YgdXBkYXRlQ29udGVudHMgd2hpY2ggZHJhd3MgYSBzdWJzZXQg
b2YgdGhlCiAgICAgICAgIC8vIGltYWdlIHRvIGEgYml0bWFwLCBhcyB0aGUgcGl4ZWwgY29udGVu
dHMgY2FuJ3QgYmUgdXBsb2FkZWQgZGlyZWN0bHkuCi0gICAgICAgIENvbnRlbnRMYXllckNocm9t
aXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKTsKKyAgICAgICAgQ29udGVudExheWVyQ2hyb21p
dW06OnBhaW50Q29udGVudHNJZkRpcnR5KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VMYXllckNocm9taXVtLmgKaW5kZXggY2M5MDY0ZDJjYWU4NzcxZTY5YTE3YjZlOGNh
OTZiMWQxNjI0YmYzYy4uNmFkZGFiYzg0ZjAzZWRiYjViZTZiOWNlOTc3NDAwNmNhMGFlODM3MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgKQEAgLTUwLDcgKzUwLDcgQEAgY2xhc3MgSW1h
Z2VMYXllckNocm9taXVtIDogcHVibGljIENvbnRlbnRMYXllckNocm9taXVtIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZUxheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGlj
c0xheWVyQ2hyb21pdW0qIG93bmVyID0gMCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29u
dGVudHNJZkRpcnR5KCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCk7
CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVu
dHM7IH0KIAogICAgIHZvaWQgc2V0Q29udGVudHMoSW1hZ2UqIGltYWdlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggZmE3OTBmOTk5M2FjOWEyNTYyYzE0M2JhOWM2NGQxNTYyYWQ3ZTlkNC4u
MjkyYjE5YjY0N2UxZjc5ZTc1OTc3YjhiZGRlMTdjMzFhZDYxMjI4YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5jcHAKQEAgLTYyLDYgKzYyLDcgQEAgTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bShH
cmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQogICAgIDogbV9vd25lcihvd25lcikKICAgICAs
IG1fY29udGVudHNEaXJ0eShmYWxzZSkKICAgICAsIG1fbWFza0xheWVyKDApCisgICAgLCBtX2Nj
TGF5ZXJJbXBsKDApCiAgICAgLCBtX3N1cGVybGF5ZXIoMCkKICNpZm5kZWYgTkRFQlVHCiAgICAg
LCBtX2RlYnVnSUQoc19uZXh0TGF5ZXJEZWJ1Z0lEKyspCkBAIC03OCw3ICs3OSw2IEBAIExheWVy
Q2hyb21pdW06OkxheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKICAg
ICAsIG1fZ2VvbWV0cnlGbGlwcGVkKGZhbHNlKQogICAgICwgbV9uZWVkc0Rpc3BsYXlPbkJvdW5k
c0NoYW5nZShmYWxzZSkKICAgICAsIG1fZG91YmxlU2lkZWQodHJ1ZSkKLSAgICAsIG1fY2NMYXll
ckltcGwoQ0NMYXllckltcGw6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fcmVwbGljYUxheWVyKDAp
CiB7CiB9CkBAIC05NSw3ICs5NSw4IEBAIExheWVyQ2hyb21pdW06On5MYXllckNocm9taXVtKCkK
IAogdm9pZCBMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKIHsKLSAgICBtX2NjTGF5
ZXJJbXBsLT5jbGVhbnVwUmVzb3VyY2VzKCk7CisgICAgaWYgKG1fY2NMYXllckltcGwpCisgICAg
ICAgIG1fY2NMYXllckltcGwtPmNsZWFudXBSZXNvdXJjZXMoKTsKIH0KIAogdm9pZCBMYXllckNo
cm9taXVtOjpzZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogcmVuZGVyZXIp
CkBAIC0xMDYsOCArMTA3LDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRMYXllclJlbmRlcmVy
KExheWVyUmVuZGVyZXJDaHJvbWl1bSogcmVuZGVyZXIpCiAgICAgICAgIGNsZWFudXBSZXNvdXJj
ZXMoKTsKICAgICAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgfQotCi0gICAgbV9jY0xheWVy
SW1wbC0+c2V0TGF5ZXJSZW5kZXJlcihyZW5kZXJlcik7CisgICAgbV9sYXllclJlbmRlcmVyID0g
cmVuZGVyZXI7CiB9CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNDb21taXQoKQpAQCAt
MjQxLDcgKzI0MSw2IEBAIExheWVyQ2hyb21pdW0qIExheWVyQ2hyb21pdW06OnN1cGVybGF5ZXIo
KSBjb25zdAogdm9pZCBMYXllckNocm9taXVtOjpzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkK
IHsKICAgICBtX25hbWUgPSBuYW1lOwotICAgIG1fY2NMYXllckltcGwtPnNldE5hbWUobmFtZSk7
CiB9CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVj
dCYgZGlydHlSZWN0KQpAQCAtMjg5LDYgKzI4OCwyNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnRv
R0xNYXRyaXgoZmxvYXQqIGZsYXR0ZW5lZCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG0p
CiAgICAgZmxhdHRlbmVkWzE1XSA9IG0ubTQ0KCk7CiB9CiAKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6
dXBkYXRlVG9MYXllcihDQ0xheWVySW1wbCogbGF5ZXIpCit7CisgICAgbGF5ZXItPnNldEFuY2hv
clBvaW50KG1fYW5jaG9yUG9pbnQpOworICAgIGxheWVyLT5zZXRBbmNob3JQb2ludFoobV9hbmNo
b3JQb2ludFopOworICAgIGxheWVyLT5zZXRCb3VuZHMobV9ib3VuZHMpOworICAgIGxheWVyLT5z
ZXREb3VibGVTaWRlZChtX2RvdWJsZVNpZGVkKTsKKyAgICBsYXllci0+c2V0TGF5ZXJSZW5kZXJl
cihtX2xheWVyUmVuZGVyZXIuZ2V0KCkpOworICAgIGxheWVyLT5zZXRNYXNrc1RvQm91bmRzKG1f
bWFza3NUb0JvdW5kcyk7CisgICAgbGF5ZXItPnNldE5hbWUobV9uYW1lKTsKKyAgICBsYXllci0+
c2V0T3BhY2l0eShtX29wYWNpdHkpOworICAgIGxheWVyLT5zZXRQb3NpdGlvbihtX3Bvc2l0aW9u
KTsKKyAgICBsYXllci0+c2V0UHJlc2VydmVzM0QocHJlc2VydmVzM0QoKSk7CisgICAgbGF5ZXIt
PnNldFN1YmxheWVyVHJhbnNmb3JtKG1fc3VibGF5ZXJUcmFuc2Zvcm0pOworICAgIGxheWVyLT5z
ZXRUcmFuc2Zvcm0obV90cmFuc2Zvcm0pOworCisgICAgaWYgKG1hc2tMYXllcigpKQorICAgICAg
ICBtYXNrTGF5ZXIoKS0+dXBkYXRlVG9MYXllcihsYXllci0+bWFza0xheWVyKCkpOworICAgIGlm
IChyZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgcmVwbGljYUxheWVyKCktPnVwZGF0ZVRvTGF5ZXIo
bGF5ZXItPnJlcGxpY2FMYXllcigpKTsKK30KKwogR3JhcGhpY3NDb250ZXh0M0QqIExheWVyQ2hy
b21pdW06OmxheWVyUmVuZGVyZXJDb250ZXh0KCkgY29uc3QKIHsKICAgICBBU1NFUlQobGF5ZXJS
ZW5kZXJlcigpKTsKQEAgLTMzNSw3ICszNTUsOCBAQCB2b2lkIExheWVyQ2hyb21pdW06OmR1bXBM
YXllcihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKICAgICB3cml0ZUluZGVudCh0
cywgaW5kZW50KTsKICAgICB0cyA8PCBsYXllclR5cGVBc1N0cmluZygpIDw8ICIoIiA8PCBtX25h
bWUgPDwgIilcbiI7CiAgICAgZHVtcExheWVyUHJvcGVydGllcyh0cywgaW5kZW50KzIpOwotICAg
IG1fY2NMYXllckltcGwtPmR1bXBMYXllclByb3BlcnRpZXModHMsIGluZGVudCsyKTsKKyAgICBp
ZiAobV9jY0xheWVySW1wbCkKKyAgICAgICAgbV9jY0xheWVySW1wbC0+ZHVtcExheWVyUHJvcGVy
dGllcyh0cywgaW5kZW50KzIpOwogICAgIGlmIChtX3JlcGxpY2FMYXllcikgewogICAgICAgICB3
cml0ZUluZGVudCh0cywgaW5kZW50KzIpOwogICAgICAgICB0cyA8PCAiUmVwbGljYTpcbiI7CkBA
IC0zNjEsNiArMzgyLDIyIEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHVtcExheWVyUHJvcGVydGll
cyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKIAogfQogCitQYXNzUmVmUHRyPEND
TGF5ZXJJbXBsPiBMYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCit7CisgICAgcmV0
dXJuIENDTGF5ZXJJbXBsOjpjcmVhdGUodGhpcyk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX2NjTGF5ZXJJbXBsKQor
ICAgICAgICBtX2NjTGF5ZXJJbXBsID0gY3JlYXRlQ0NMYXllckltcGwoKTsKK30KKworQ0NMYXll
ckltcGwqIExheWVyQ2hyb21pdW06OmNjTGF5ZXJJbXBsKCkKK3sKKyAgICByZXR1cm4gbV9jY0xh
eWVySW1wbC5nZXQoKTsKK30KKwogLy8gQmVnaW4gY2FsbHMgdGhhdCBmb3J3YXJkIHRvIHRoZSBD
Q0xheWVySW1wbC4KIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KIC8vIFRoZXNlIGV4aXN0cyBqdXN0IGZvciBkZWJ1Z2dpbmcgKHZpYSBkcmF3RGVidWdC
b3JkZXIoKSkuCkBAIC0zNzAsMjUgKzQwNywxNSBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldEJv
cmRlckNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQog
Ci1Db2xvciBMYXllckNocm9taXVtOjpib3JkZXJDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fY2NMYXllckltcGwtPmRlYnVnQm9yZGVyQ29sb3IoKTsKLX0KLQogdm9pZCBMYXllckNocm9t
aXVtOjpzZXRCb3JkZXJXaWR0aChmbG9hdCB3aWR0aCkKIHsKICAgICBtX2NjTGF5ZXJJbXBsLT5z
ZXREZWJ1Z0JvcmRlcldpZHRoKHdpZHRoKTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi1m
bG9hdCBMYXllckNocm9taXVtOjpib3JkZXJXaWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
Y2NMYXllckltcGwtPmRlYnVnQm9yZGVyV2lkdGgoKTsKLX0KLQogTGF5ZXJSZW5kZXJlckNocm9t
aXVtKiBMYXllckNocm9taXVtOjpsYXllclJlbmRlcmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9jY0xheWVySW1wbC0+bGF5ZXJSZW5kZXJlcigpOworICAgIHJldHVybiBtX2xheWVyUmVuZGVy
ZXIuZ2V0KCk7CiB9CiAKIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCBlOWQ5ZTFmYmQwNDQxM2M0YTYwNGI3MGEy
ZTA3ZTg4MGEwZjJkZmQzLi4wNTI5Nzg2MDQwODliOTgwZGYxNmVjZmRhMDUyMWRiZTA1YzZmZDBl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xNTYsMTQgKzE1NiwxNCBAQCBwdWJsaWM6CiAKICAg
ICAvLyBUaGVzZSBtZXRob2RzIHR5cGljYWxseSBuZWVkIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IGRl
cml2ZWQgY2xhc3Nlcy4KICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHNJZkRpcnR5KCkg
eyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCkgeyB9CisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKSB7IH0KICAgICB2aXJ0dWFsIHZv
aWQgdW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGJpbmRD
b250ZW50c1RleHR1cmUoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZHJhdygpIHsgfQogCiAgICAg
Ly8gVGhlc2UgZXhpc3RzIGp1c3QgZm9yIGRlYnVnZ2luZyAodmlhIGRyYXdEZWJ1Z0JvcmRlcigp
KS4KICAgICB2b2lkIHNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJik7Ci0gICAgQ29sb3IgYm9y
ZGVyQ29sb3IoKSBjb25zdDsKIAogI2lmbmRlZiBOREVCVUcKICAgICBpbnQgZGVidWdJRCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGVidWdJRDsgfQpAQCAtMTczLDE2ICsxNzMsMTcgQEAgcHVibGljOgog
ICAgIFN0cmluZyBsYXllclRyZWVBc1RleHQoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0Qm9yZGVy
V2lkdGgoZmxvYXQpOwotICAgIGZsb2F0IGJvcmRlcldpZHRoKCkgY29uc3Q7CiAKICAgICAvLyBF
dmVyeXRoaW5nIGZyb20gaGVyZSBkb3duIGluIHRoZSBwdWJsaWMgc2VjdGlvbiB3aWxsIG1vdmUg
dG8gQ0NMYXllckltcGwuCi0KLSAgICBDQ0xheWVySW1wbCogY2NMYXllckltcGwoKSBjb25zdCB7
IHJldHVybiBtX2NjTGF5ZXJJbXBsLmdldCgpOyB9CisgICAgQ0NMYXllckltcGwqIGNjTGF5ZXJJ
bXBsKCk7CisgICAgdm9pZCBjcmVhdGVDQ0xheWVySW1wbElmTmVlZGVkKCk7CiAKICAgICBzdGF0
aWMgdm9pZCBkcmF3VGV4dHVyZWRRdWFkKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHByb2plY3Rpb25NYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBsYXllck1hdHJpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0
IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IG9wYWNpdHksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgbWF0cml4TG9jYXRpb24sIGludCBhbHBoYUxvY2F0aW9uKTsKIAor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUb0xheWVyKENDTGF5ZXJJbXBsKik7CisKICAgICAvLyBC
ZWdpbiBjYWxscyB0aGF0IGZvcndhcmQgdG8gdGhlIENDTGF5ZXJJbXBsLgogICAgIExheWVyUmVu
ZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcigpIGNvbnN0OwogICAgIC8vIEVuZCBjYWxscyB0
aGF0IGZvcndhcmQgdG8gdGhlIENDTGF5ZXJJbXBsLgpAQCAtMjE3LDYgKzIxOCwxMSBAQCBwcm90
ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfcG9zaXRpb25BdHRyaWJMb2NhdGlv
bjsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc190ZXhDb29yZEF0dHJpYkxvY2F0aW9uOwog
CisgICAgLy8gQ29uc3RydWN0cyBhIENDTGF5ZXJJbXBsIG9mIHRoZSBjb3JyZWN0IHJ1bnRpbWUg
dHlwZSBmb3IgdGhpcyBMYXllckNocm9taXVtIHR5cGUuCisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOworCisgICAgLy8gRm9yIG5vdywgdGhl
IExheWVyQ2hyb21pdW0gZGlyZWN0bHkgb3ducyBpdHMgQ0NMYXllckltcGwuCisgICAgUmVmUHRy
PENDTGF5ZXJJbXBsPiBtX2NjTGF5ZXJJbXBsOwogcHJpdmF0ZToKICAgICB2b2lkIHNldE5lZWRz
Q29tbWl0KCk7CiAKQEAgLTIzNiw2ICsyNDIsOCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPiBtX3N1YmxheWVyczsKICAgICBMYXllckNocm9taXVtKiBtX3N1
cGVybGF5ZXI7CiAKKyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVu
ZGVyZXI7CisKICNpZm5kZWYgTkRFQlVHCiAgICAgaW50IG1fZGVidWdJRDsKICNlbmRpZgpAQCAt
MjYwLDggKzI2OCw2IEBAIHByaXZhdGU6CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9zdWJs
YXllclRyYW5zZm9ybTsKIAogICAgIEZsb2F0UmVjdCBtX2ZyYW1lOwotICAgIC8vIEZvciBub3cs
IHRoZSBMYXllckNocm9taXVtIGRpcmVjdGx5IG93bnMgaXRzIENDTGF5ZXJJbXBsLgotICAgIFJl
ZlB0cjxDQ0xheWVySW1wbD4gbV9jY0xheWVySW1wbDsKIAogICAgIC8vIFJlcGxpY2EgbGF5ZXIg
dXNlZCBmb3IgcmVmbGVjdGlvbnMuCiAgICAgTGF5ZXJDaHJvbWl1bSogbV9yZXBsaWNhTGF5ZXI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCAzZTM5ZDg3YjZlYTQz
MzJmZDk4NmYwYzBkOWMyNzRlMzhmZWQwZTM0Li45NGYwMmY2MWIzYzNhMDBiZDFiYjQ0Mzk4NWZk
M2ZlNmVmNDYxZGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAg
LTI3Niw2ICsyNzYsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJh
d0xheWVycygpCiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMoVmVj
dG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCiB7CisgICAgbV9yb290
TGF5ZXItPmNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVkZWQoKTsKICAgICBDQ0xheWVySW1wbCogcm9v
dERyYXdMYXllciA9IG1fcm9vdExheWVyLT5jY0xheWVySW1wbCgpOwogCiAgICAgaWYgKCFyb290
RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCkpCkBAIC0zMDIsNyArMzAzLDkgQEAgdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyhWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVu
ZGVyU3VyZmFjZUxheWUKICAgICAvLyBjb25jZXB0IG9mIGEgbGFyZ2UgY29udGVudCBsYXllci4K
ICAgICB1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMobV9yb290TGF5ZXIuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBtX2RlZmF1bHRSZW5kZXJT
dXJmYWNlLT5tX2xheWVyTGlzdCk7CiAKLSAgICB1cGRhdGVDb250ZW50c1JlY3Vyc2l2ZShtX3Jv
b3RMYXllci5nZXQoKSk7CisgICAgcGFpbnRDb250ZW50c1JlY3Vyc2l2ZShtX3Jvb3RMYXllci5n
ZXQoKSk7CisKKyAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKG1fcm9vdExh
eWVyLmdldCgpKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMo
Y29uc3QgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCkBAIC00
NjUsOSArNDY4LDI5IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppc0xheWVyVmlzaWJs
ZShMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHJhbnNmb3JtCiAvLyBuZWNlc3NhcnkgdHJh
bnNmb3JtYXRpb25zLCBzY2lzc29yIHJlY3RhbmdsZXMsIHJlbmRlciBzdXJmYWNlcywgZXRjLgog
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJm
YWNlcyhMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBh
cmVudE1hdHJpeCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IFZlY3RvcjxDQ0xheWVySW1wbCo+JiBsYXllckxpc3QpCiB7CisgICAgLy8gTWFrZSBzdXJlIHdl
IGhhdmUgQ0NMYXllckltcGxzIGZvciB0aGlzIHN1YnRyZWUuCisgICAgbGF5ZXItPmNyZWF0ZUND
TGF5ZXJJbXBsSWZOZWVkZWQoKTsKICAgICBsYXllci0+c2V0TGF5ZXJSZW5kZXJlcih0aGlzKTsK
KyAgICBpZiAobGF5ZXItPm1hc2tMYXllcigpKSB7CisgICAgICAgIGxheWVyLT5tYXNrTGF5ZXIo
KS0+Y3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgpOworICAgICAgICBsYXllci0+bWFza0xheWVy
KCktPnNldExheWVyUmVuZGVyZXIodGhpcyk7CisgICAgfQorICAgIGlmIChsYXllci0+cmVwbGlj
YUxheWVyKCkpIHsKKyAgICAgICAgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5jcmVhdGVDQ0xheWVy
SW1wbElmTmVlZGVkKCk7CisgICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+c2V0TGF5ZXJS
ZW5kZXJlcih0aGlzKTsKKyAgICB9CisgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSAmJiBs
YXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpKSB7CisgICAgICAgIGxheWVyLT5yZXBs
aWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPmNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVkZWQoKTsKKyAg
ICAgICAgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJSZW5kZXJl
cih0aGlzKTsKKyAgICB9CisKICAgICBDQ0xheWVySW1wbCogZHJhd0xheWVyID0gbGF5ZXItPmNj
TGF5ZXJJbXBsKCk7Ci0gICAgZHJhd0xheWVyLT51cGRhdGVGcm9tTGF5ZXIobGF5ZXIpOworICAg
IC8vIEN1cnJlbnRseSB3ZSdyZSBjYWxsaW5nIHVwZGF0ZVRvTGF5ZXIoKSB0d2ljZSAtIG9uY2Ug
aGVyZSBhbmQgb25jZSBpbiB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKCkuCisg
ICAgLy8gV2Ugc2hvdWxkIG9ubHkgY2FsbCB1cGRhdGVUb0xheWVyKCkgaW4gY29tbWl0LCBidXQg
YmVjYXVzZSB3ZSByZWx5IG9uIHRoZSBkcmF3IGxheWVyIHN0YXRlIHRvIHVwZGF0ZQorICAgIC8v
IFJlbmRlclN1cmZhY2VzIGFuZCB3ZSByZWx5IG9uIFJlbmRlclN1cmZhY2VzIGJlaW5nIHVwIHRv
IGRhdGUgaW4gb3JkZXIgdG8gcGFpbnQgY29udGVudHMgd2UgaGF2ZQorICAgIC8vIHRvIHVwZGF0
ZSB0aGUgZHJhdyBsYXllcnMgdHdpY2UuCisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGNhbGwg
b25jZSBsYXllciB1cGRhdGVzIG5vIGxvbmdlciBkZXBlbmQgb24gcmVuZGVyIHN1cmZhY2VzLgor
ICAgIGxheWVyLT51cGRhdGVUb0xheWVyKGRyYXdMYXllcik7CiAKICAgICAvLyBDb21wdXRlIHRo
ZSBuZXcgbWF0cml4IHRyYW5zZm9ybWF0aW9uIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoaXMg
bGF5ZXIgYW5kCiAgICAgLy8gYWxsIGl0cyBzdWJsYXllcnMuIEl0J3MgaW1wb3J0YW50IHRvIHJl
bWVtYmVyIHRoYXQgdGhlIGxheWVyJ3MgcG9zaXRpb24KQEAgLTUyMiw4ICs1NDUsNyBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2Vz
KExheWVyQ2hyb21pdW0qIGxheQogICAgIGJvb2wgdXNlU3VyZmFjZUZvck9wYWNpdHkgPSBkcmF3
TGF5ZXItPm9wYWNpdHkoKSAhPSAxICYmICFkcmF3TGF5ZXItPnByZXNlcnZlczNEKCk7CiAgICAg
Ym9vbCB1c2VTdXJmYWNlRm9yTWFza2luZyA9IGRyYXdMYXllci0+bWFza0xheWVyKCk7CiAgICAg
Ym9vbCB1c2VTdXJmYWNlRm9yUmVmbGVjdGlvbiA9IGRyYXdMYXllci0+cmVwbGljYUxheWVyKCk7
Ci0gICAgaWYgKCgodXNlU3VyZmFjZUZvckNsaXBwaW5nIHx8IHVzZVN1cmZhY2VGb3JPcGFjaXR5
KSAmJiBkcmF3TGF5ZXItPmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkpCi0gICAgICAgIHx8IHVz
ZVN1cmZhY2VGb3JNYXNraW5nIHx8IHVzZVN1cmZhY2VGb3JSZWZsZWN0aW9uKSB7CisgICAgaWYg
KHVzZVN1cmZhY2VGb3JNYXNraW5nIHx8IHVzZVN1cmZhY2VGb3JSZWZsZWN0aW9uIHx8ICgodXNl
U3VyZmFjZUZvckNsaXBwaW5nIHx8IHVzZVN1cmZhY2VGb3JPcGFjaXR5KSAmJiBkcmF3TGF5ZXIt
PmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkpKSB7CiAgICAgICAgIFJlbmRlclN1cmZhY2VDaHJv
bWl1bSogcmVuZGVyU3VyZmFjZSA9IGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpOwogICAgICAg
ICBpZiAoIXJlbmRlclN1cmZhY2UpCiAgICAgICAgICAgICByZW5kZXJTdXJmYWNlID0gZHJhd0xh
eWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CkBAIC01NjAsMTUgKzU4MiwxMiBAQCB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExh
eWVyQ2hyb21pdW0qIGxheQogCiAgICAgICAgIGlmIChkcmF3TGF5ZXItPm1hc2tMYXllcigpKSB7
CiAgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5tX21hc2tMYXllciA9IGRyYXdMYXllci0+bWFz
a0xheWVyKCk7Ci0gICAgICAgICAgICBkcmF3TGF5ZXItPm1hc2tMYXllcigpLT5zZXRMYXllclJl
bmRlcmVyKHRoaXMpOwogICAgICAgICAgICAgZHJhd0xheWVyLT5tYXNrTGF5ZXIoKS0+c2V0VGFy
Z2V0UmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICByZW5kZXJTdXJmYWNlLT5tX21hc2tMYXllciA9IDA7CiAKLSAgICAgICAgaWYgKGRyYXdM
YXllci0+cmVwbGljYUxheWVyKCkgJiYgZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xh
eWVyKCkpIHsKLSAgICAgICAgICAgIGRyYXdMYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXll
cigpLT5zZXRMYXllclJlbmRlcmVyKHRoaXMpOworICAgICAgICBpZiAoZHJhd0xheWVyLT5yZXBs
aWNhTGF5ZXIoKSAmJiBkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSkKICAg
ICAgICAgICAgIGRyYXdMYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLT5zZXRUYXJn
ZXRSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UpOwotICAgICAgICB9CiAKICAgICAgICAgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQoZHJhd0xheWVyKTsKICAgICB9IGVsc2UgewpAQCAt
NjM5LDYgKzY1OCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0
aWVzQW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1bSogbGF5CiAKICAgICBjb25zdCBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHN1YmxheWVycyA9IGxheWVyLT5nZXRTdWJsYXll
cnMoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7ICsraSkg
eworICAgICAgICBzdWJsYXllcnNbaV0tPmNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVkZWQoKTsKICAg
ICAgICAgQ0NMYXllckltcGwqIHN1YmxheWVyID0gc3VibGF5ZXJzW2ldLT5jY0xheWVySW1wbCgp
OwogICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoc3VibGF5ZXJzW2ld
LmdldCgpLCBzdWJsYXllck1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZGVzY2VuZGFu
dHMpOwogCkBAIC03MjEsMjMgKzc0MSw0NiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0qIGxheQogICAg
ICAgICBzdGQ6OnN0YWJsZV9zb3J0KCZkZXNjZW5kYW50cy5hdCh0aGlzTGF5ZXJJbmRleCksIGRl
c2NlbmRhbnRzLmVuZCgpLCBjb21wYXJlTGF5ZXJaKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyKQor
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnBhaW50Q29udGVudHNSZWN1cnNpdmUoTGF5ZXJD
aHJvbWl1bSogbGF5ZXIpCiB7CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVt
PiA+JiBzdWJsYXllcnMgPSBsYXllci0+Z2V0U3VibGF5ZXJzKCk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHVwZGF0ZUNvbnRlbnRz
UmVjdXJzaXZlKHN1YmxheWVyc1tpXS5nZXQoKSk7CisgICAgICAgIHBhaW50Q29udGVudHNSZWN1
cnNpdmUoc3VibGF5ZXJzW2ldLmdldCgpKTsKIAogICAgIGlmIChsYXllci0+Ym91bmRzKCkuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgp
KQotICAgICAgICBsYXllci0+dXBkYXRlQ29udGVudHNJZkRpcnR5KCk7CisgICAgICAgIGxheWVy
LT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOwogICAgIGlmIChsYXllci0+bWFza0xheWVyKCkgJiYg
bGF5ZXItPm1hc2tMYXllcigpLT5kcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgbGF5ZXItPm1hc2tM
YXllcigpLT51cGRhdGVDb250ZW50c0lmRGlydHkoKTsKKyAgICAgICAgbGF5ZXItPm1hc2tMYXll
cigpLT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOwogICAgIGlmIChsYXllci0+cmVwbGljYUxheWVy
KCkgJiYgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5kcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgbGF5
ZXItPnJlcGxpY2FMYXllcigpLT51cGRhdGVDb250ZW50c0lmRGlydHkoKTsKKyAgICAgICAgbGF5
ZXItPnJlcGxpY2FMYXllcigpLT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOwogICAgIGlmIChsYXll
ci0+cmVwbGljYUxheWVyKCkgJiYgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSAm
JiBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLT5kcmF3c0NvbnRlbnQoKSkKLSAg
ICAgICAgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+dXBkYXRlQ29udGVudHNJ
ZkRpcnR5KCk7CisgICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPnBh
aW50Q29udGVudHNJZkRpcnR5KCk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1
cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyKQor
eworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJzID0g
bGF5ZXItPmdldFN1YmxheWVycygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5
ZXJzLnNpemUoKTsgKytpKQorICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJz
aXZlKHN1YmxheWVyc1tpXS5nZXQoKSk7CisKKyAgICBpZiAobGF5ZXItPmJvdW5kcygpLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0NMYXllckltcGwqIGRyYXdMYXllciA9IGxh
eWVyLT5jY0xheWVySW1wbCgpOworCisgICAgaWYgKGRyYXdMYXllci0+ZHJhd3NDb250ZW50KCkp
CisgICAgICAgIGRyYXdMYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOworICAgIGlm
IChkcmF3TGF5ZXItPm1hc2tMYXllcigpICYmIGRyYXdMYXllci0+bWFza0xheWVyKCktPmRyYXdz
Q29udGVudCgpKQorICAgICAgICBkcmF3TGF5ZXItPm1hc2tMYXllcigpLT51cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKCk7CisgICAgaWYgKGRyYXdMYXllci0+cmVwbGljYUxheWVyKCkgJiYgZHJh
d0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+ZHJhd3NDb250ZW50KCkpCisgICAgICAgIGRyYXdMYXll
ci0+cmVwbGljYUxheWVyKCktPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKKyAgICBpZiAo
ZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKSAmJiBkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigpLT5t
YXNrTGF5ZXIoKSAmJiBkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+ZHJh
d3NDb250ZW50KCkpCisgICAgICAgIGRyYXdMYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXll
cigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCk7CisKKyAgICBsYXllci0+dXBkYXRlVG9M
YXllcihkcmF3TGF5ZXIpOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Q29t
cG9zaXRlT2Zmc2NyZWVuKGJvb2wgY29tcG9zaXRlT2Zmc2NyZWVuKQpAQCAtODExLDE2ICs4NTQs
MjAgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihDQ0xheWVySW1wbCog
bGF5ZXIsIFJlbmRlclN1cmZhY2VDaHJvbWl1bSoKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmIChsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKQorICAgIGlmIChsYXllci0+Ym91bmRz
KCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGxheWVyLT51bnJlc2VydmVDb250ZW50c1RleHR1cmUo
KTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIHNldFNjaXNzb3JUb1JlY3QobGF5ZXIt
PnNjaXNzb3JSZWN0KCkpOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIGxheWVyIGZhbGxzIHdpdGhp
biB0aGUgdmlzaWJsZSBib3VuZHMgb2YgdGhlIHBhZ2UuCiAgICAgSW50UmVjdCBsYXllclJlY3Qg
PSBsYXllci0+Z2V0RHJhd1JlY3QoKTsKICAgICBib29sIGlzTGF5ZXJWaXNpYmxlID0gbGF5ZXIt
PnNjaXNzb3JSZWN0KCkuaW50ZXJzZWN0cyhsYXllclJlY3QpOwotICAgIGlmICghaXNMYXllclZp
c2libGUpCisgICAgaWYgKCFpc0xheWVyVmlzaWJsZSkgeworICAgICAgICBsYXllci0+dW5yZXNl
cnZlQ29udGVudHNUZXh0dXJlKCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICAvLyBG
SVhNRTogTmVlZCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgY29tbXVsYXRpdmUgcmVuZGVyIHN1
cmZhY2UgdHJhbnNmb3JtcyBhbGwgdGhlIHdheSBmcm9tCiAgICAgLy8gICAgICAgIHRoZSBkZWZh
dWx0IHJlbmRlciBzdXJmYWNlIGluIG9yZGVyIHRvIGRldGVybWluZSB2aXNpYmlsaXR5LgpAQCAt
ODM0LDggKzg4MSwxMCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKEND
TGF5ZXJJbXBsKiBsYXllciwgUmVuZGVyU3VyZmFjZUNocm9taXVtKgogICAgICAgICBGbG9hdFBv
aW50M0QgeEF4aXMoaG9yaXpvbnRhbERpci53aWR0aCgpLCBob3Jpem9udGFsRGlyLmhlaWdodCgp
LCAwKTsKICAgICAgICAgRmxvYXRQb2ludDNEIHlBeGlzKHZlcnRpY2FsRGlyLndpZHRoKCksIHZl
cnRpY2FsRGlyLmhlaWdodCgpLCAwKTsKICAgICAgICAgRmxvYXRQb2ludDNEIHpBeGlzID0geEF4
aXMuY3Jvc3MoeUF4aXMpOwotICAgICAgICBpZiAoekF4aXMueigpIDwgMCkKKyAgICAgICAgaWYg
KHpBeGlzLnooKSA8IDApIHsKKyAgICAgICAgICAgIGxheWVyLT51bnJlc2VydmVDb250ZW50c1Rl
eHR1cmUoKTsKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlm
IChsYXllci0+ZHJhd3NDb250ZW50KCkpCkBAIC05MTMsMTAgKzk2MiwxMCBAQCBib29sIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKQogICAgIG1fc2hhcmVk
R2VvbWV0cnkgPSBhZG9wdFB0cihuZXcgR2VvbWV0cnlCaW5kaW5nKG1fY29udGV4dC5nZXQoKSkp
OwogICAgIG1fYm9yZGVyUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBMYXllckNocm9taXVtOjpCb3Jk
ZXJQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOwogICAgIG1fY29udGVudExheWVyUHJvZ3JhbSA9
IGFkb3B0UHRyKG5ldyBDb250ZW50TGF5ZXJDaHJvbWl1bTo6UHJvZ3JhbShtX2NvbnRleHQuZ2V0
KCkpKTsKLSAgICBtX2NhbnZhc0xheWVyUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBDYW52YXNMYXll
ckNocm9taXVtOjpQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOwotICAgIG1fdmlkZW9MYXllclJH
QkFQcm9ncmFtID0gYWRvcHRQdHIobmV3IFZpZGVvTGF5ZXJDaHJvbWl1bTo6UkdCQVByb2dyYW0o
bV9jb250ZXh0LmdldCgpKSk7Ci0gICAgbV92aWRlb0xheWVyWVVWUHJvZ3JhbSA9IGFkb3B0UHRy
KG5ldyBWaWRlb0xheWVyQ2hyb21pdW06OllVVlByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7Ci0g
ICAgbV9wbHVnaW5MYXllclByb2dyYW0gPSBhZG9wdFB0cihuZXcgUGx1Z2luTGF5ZXJDaHJvbWl1
bTo6UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICBtX2NhbnZhc0xheWVyUHJvZ3JhbSA9
IGFkb3B0UHRyKG5ldyBDQ0NhbnZhc0xheWVySW1wbDo6UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkp
KTsKKyAgICBtX3ZpZGVvTGF5ZXJSR0JBUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBDQ1ZpZGVvTGF5
ZXJJbXBsOjpSR0JBUHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICBtX3ZpZGVvTGF5ZXJZ
VVZQcm9ncmFtID0gYWRvcHRQdHIobmV3IENDVmlkZW9MYXllckltcGw6OllVVlByb2dyYW0obV9j
b250ZXh0LmdldCgpKSk7CisgICAgbV9wbHVnaW5MYXllclByb2dyYW0gPSBhZG9wdFB0cihuZXcg
Q0NQbHVnaW5MYXllckltcGw6OlByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7CiAgICAgbV9yZW5k
ZXJTdXJmYWNlUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OlBy
b2dyYW0obV9jb250ZXh0LmdldCgpKSk7CiAgICAgbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0g
PSBhZG9wdFB0cihuZXcgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpNYXNrUHJvZ3JhbShtX2NvbnRl
eHQuZ2V0KCkpKTsKICAgICBtX3RpbGVyUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBMYXllclRpbGVy
Q2hyb21pdW06OlByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oCmluZGV4IDcwMzdkMDQzYjFmZmU1MGE0YjM2NTBhOTNkZjlkYjc4NWZhY2Jk
NDYuLjY2N2VkZTIzOTI0MWRhYjk5MTc0NDViYjgyZTgxZWMzMmE5YTRiYzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC0zNCwxNiArMzQsMTcgQEAKIAogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKIAotI2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkludFJlY3Qu
aCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJUaWxlckNocm9t
aXVtLmgiCi0jaW5jbHVkZSAiUGx1Z2luTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlJlbmRl
clN1cmZhY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlNrQml0bWFwLmgiCiAjaW5jbHVkZSAiVmlk
ZW9MYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NDYW52YXNMYXllckltcGwuaCIKICNp
bmNsdWRlICJjYy9DQ0hlYWRzVXBEaXNwbGF5LmgiCisjaW5jbHVkZSAiY2MvQ0NQbHVnaW5MYXll
ckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgpAQCAtMTEwLDEzICsxMTEsMTMgQEAgcHVibGljOgogICAgIGNvbnN0IEdl
b21ldHJ5QmluZGluZyogc2hhcmVkR2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZEdl
b21ldHJ5LmdldCgpOyB9CiAgICAgY29uc3QgTGF5ZXJDaHJvbWl1bTo6Qm9yZGVyUHJvZ3JhbSog
Ym9yZGVyUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyUHJvZ3JhbS5nZXQoKTsgfQog
ICAgIGNvbnN0IENvbnRlbnRMYXllckNocm9taXVtOjpQcm9ncmFtKiBjb250ZW50TGF5ZXJQcm9n
cmFtKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50TGF5ZXJQcm9ncmFtLmdldCgpOyB9Ci0gICAg
Y29uc3QgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6UHJvZ3JhbSogY2FudmFzTGF5ZXJQcm9ncmFtKCkg
Y29uc3QgeyByZXR1cm4gbV9jYW52YXNMYXllclByb2dyYW0uZ2V0KCk7IH0KLSAgICBjb25zdCBW
aWRlb0xheWVyQ2hyb21pdW06OlJHQkFQcm9ncmFtKiB2aWRlb0xheWVyUkdCQVByb2dyYW0oKSBj
b25zdCB7IHJldHVybiBtX3ZpZGVvTGF5ZXJSR0JBUHJvZ3JhbS5nZXQoKTsgfQotICAgIGNvbnN0
IFZpZGVvTGF5ZXJDaHJvbWl1bTo6WVVWUHJvZ3JhbSogdmlkZW9MYXllcllVVlByb2dyYW0oKSBj
b25zdCB7IHJldHVybiBtX3ZpZGVvTGF5ZXJZVVZQcm9ncmFtLmdldCgpOyB9Ci0gICAgY29uc3Qg
UGx1Z2luTGF5ZXJDaHJvbWl1bTo6UHJvZ3JhbSogcGx1Z2luTGF5ZXJQcm9ncmFtKCkgY29uc3Qg
eyByZXR1cm4gbV9wbHVnaW5MYXllclByb2dyYW0uZ2V0KCk7IH0KICAgICBjb25zdCBSZW5kZXJT
dXJmYWNlQ2hyb21pdW06OlByb2dyYW0qIHJlbmRlclN1cmZhY2VQcm9ncmFtKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZW5kZXJTdXJmYWNlUHJvZ3JhbS5nZXQoKTsgfQogICAgIGNvbnN0IFJlbmRlclN1
cmZhY2VDaHJvbWl1bTo6TWFza1Byb2dyYW0qIHJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtLmdldCgpOyB9CiAgICAgY29u
c3QgTGF5ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtKiB0aWxlclByb2dyYW0oKSBjb25zdCB7IHJl
dHVybiBtX3RpbGVyUHJvZ3JhbS5nZXQoKTsgfQorICAgIGNvbnN0IENDQ2FudmFzTGF5ZXJJbXBs
OjpQcm9ncmFtKiBjYW52YXNMYXllclByb2dyYW0oKSBjb25zdCB7IHJldHVybiBtX2NhbnZhc0xh
eWVyUHJvZ3JhbS5nZXQoKTsgfQorICAgIGNvbnN0IENDUGx1Z2luTGF5ZXJJbXBsOjpQcm9ncmFt
KiBwbHVnaW5MYXllclByb2dyYW0oKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbkxheWVyUHJvZ3Jh
bS5nZXQoKTsgfQorICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OlJHQkFQcm9ncmFtKiB2aWRl
b0xheWVyUkdCQVByb2dyYW0oKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvTGF5ZXJSR0JBUHJvZ3Jh
bS5nZXQoKTsgfQorICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OllVVlByb2dyYW0qIHZpZGVv
TGF5ZXJZVVZQcm9ncmFtKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0xheWVyWVVWUHJvZ3JhbS5n
ZXQoKTsgfQogCiAgICAgdm9pZCByZXNpemVPbnNjcmVlbkNvbnRlbnQoY29uc3QgSW50U2l6ZSYp
OwogCkBAIC0xMzcsNyArMTM4LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVJvb3RMYXll
ckNvbnRlbnRzKCk7CiAgICAgdm9pZCB1cGRhdGVSb290TGF5ZXJTY3JvbGxiYXJzKCk7CiAgICAg
dm9pZCB1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1bSosIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIFZlY3RvcjxDQ0xheWVySW1w
bCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgbGF5ZXJM
aXN0KTsKLSAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qKTsK
KyAgICB2b2lkIHBhaW50Q29udGVudHNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSopOworICAgIHZv
aWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKik7CiAK
ICAgICB2b2lkIGRyYXdMYXllcnMoY29uc3QgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1
cmZhY2VMYXllckxpc3QpOwogICAgIHZvaWQgZHJhd0xheWVyKENDTGF5ZXJJbXBsKiwgUmVuZGVy
U3VyZmFjZUNocm9taXVtKik7CkBAIC0yMDUsMTMgKzIwNywxMyBAQCBwcml2YXRlOgogICAgIE93
blB0cjxHZW9tZXRyeUJpbmRpbmc+IG1fc2hhcmVkR2VvbWV0cnk7CiAgICAgT3duUHRyPExheWVy
Q2hyb21pdW06OkJvcmRlclByb2dyYW0+IG1fYm9yZGVyUHJvZ3JhbTsKICAgICBPd25QdHI8Q29u
dGVudExheWVyQ2hyb21pdW06OlByb2dyYW0+IG1fY29udGVudExheWVyUHJvZ3JhbTsKLSAgICBP
d25QdHI8Q2FudmFzTGF5ZXJDaHJvbWl1bTo6UHJvZ3JhbT4gbV9jYW52YXNMYXllclByb2dyYW07
Ci0gICAgT3duUHRyPFZpZGVvTGF5ZXJDaHJvbWl1bTo6UkdCQVByb2dyYW0+IG1fdmlkZW9MYXll
clJHQkFQcm9ncmFtOwotICAgIE93blB0cjxWaWRlb0xheWVyQ2hyb21pdW06OllVVlByb2dyYW0+
IG1fdmlkZW9MYXllcllVVlByb2dyYW07Ci0gICAgT3duUHRyPFBsdWdpbkxheWVyQ2hyb21pdW06
OlByb2dyYW0+IG1fcGx1Z2luTGF5ZXJQcm9ncmFtOwogICAgIE93blB0cjxSZW5kZXJTdXJmYWNl
Q2hyb21pdW06OlByb2dyYW0+IG1fcmVuZGVyU3VyZmFjZVByb2dyYW07CiAgICAgT3duUHRyPFJl
bmRlclN1cmZhY2VDaHJvbWl1bTo6TWFza1Byb2dyYW0+IG1fcmVuZGVyU3VyZmFjZU1hc2tQcm9n
cmFtOwogICAgIE93blB0cjxMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW0+IG1fdGlsZXJQcm9n
cmFtOworICAgIE93blB0cjxDQ0NhbnZhc0xheWVySW1wbDo6UHJvZ3JhbT4gbV9jYW52YXNMYXll
clByb2dyYW07CisgICAgT3duUHRyPENDVmlkZW9MYXllckltcGw6OlJHQkFQcm9ncmFtPiBtX3Zp
ZGVvTGF5ZXJSR0JBUHJvZ3JhbTsKKyAgICBPd25QdHI8Q0NWaWRlb0xheWVySW1wbDo6WVVWUHJv
Z3JhbT4gbV92aWRlb0xheWVyWVVWUHJvZ3JhbTsKKyAgICBPd25QdHI8Q0NQbHVnaW5MYXllcklt
cGw6OlByb2dyYW0+IG1fcGx1Z2luTGF5ZXJQcm9ncmFtOwogCiAgICAgT3duUHRyPFRleHR1cmVN
YW5hZ2VyPiBtX3RleHR1cmVNYW5hZ2VyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0u
Y3BwCmluZGV4IDAwMTc0YWE2ZTA5OWRkODU0YWE4ZDQxMDA2NGUzNTQ3OWU3YmNiMDAuLmJlOTI4
ZGNlNDJjODEwNDYxOWU2ODFkODY1OWY4ZjA1YmYxNDZlM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxh
eWVyQ2hyb21pdW0uY3BwCkBAIC0yOSwxMCArMjksMTAgQEAKIAogI2luY2x1ZGUgIlBsdWdpbkxh
eWVyQ2hyb21pdW0uaCIKIAotI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIK
LSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2lu
Y2x1ZGUgImNjL0NDUGx1Z2luTGF5ZXJJbXBsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNDcsMzcgKzQ3LDIyIEBAIFBsdWdpbkxheWVyQ2hyb21pdW06OlBsdWdpbkxheWVyQ2hyb21p
dW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKIHsKIH0KIAotdm9pZCBQbHVnaW5MYXll
ckNocm9taXVtOjpzZXRUZXh0dXJlSWQodW5zaWduZWQgaWQpCitQYXNzUmVmUHRyPENDTGF5ZXJJ
bXBsPiBQbHVnaW5MYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCiB7Ci0gICAgbV90
ZXh0dXJlSWQgPSBpZDsKKyAgICByZXR1cm4gQ0NQbHVnaW5MYXllckltcGw6OmNyZWF0ZSh0aGlz
KTsKIH0KIAotdm9pZCBQbHVnaW5MYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHko
KQordm9pZCBQbHVnaW5MYXllckNocm9taXVtOjpzZXRUZXh0dXJlSWQodW5zaWduZWQgaWQpCiB7
CisgICAgbV90ZXh0dXJlSWQgPSBpZDsKIH0KIAotdm9pZCBQbHVnaW5MYXllckNocm9taXVtOjpk
cmF3KCkKK3ZvaWQgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVG9MYXllcihDQ0xheWVySW1w
bCogbGF5ZXIpCiB7Ci0gICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7Ci0gICAgY29uc3QgUGx1
Z2luTGF5ZXJDaHJvbWl1bTo6UHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXIoKS0+cGx1
Z2luTGF5ZXJQcm9ncmFtKCk7Ci0gICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlh
bGl6ZWQoKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVy
Q29udGV4dCgpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdMX1RF
WFRVUkUwKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIG1fdGV4dHVyZUlkKSk7Ci0gICAgCi0gICAgLy8gRklYTUU6IHNldHRpbmcgdGhlIHRl
eHR1cmUgcGFyYW1ldGVycyBldmVyeSB0aW1lIGlzIHJlZHVuZGFudC4gTW92ZSB0aGlzIGNvZGUg
c29tZXdoZXJlCi0gICAgLy8gd2hlcmUgaXQgd2lsbCBvbmx5IGhhcHBlbiBvbmNlIHBlciB0ZXh0
dXJlLgotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKSk7Ci0gICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9MSU5FQVIpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVy
aShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSkpOwot
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKSk7Ci0gICAgCi0gICAgbGF5ZXJSZW5k
ZXJlcigpLT51c2VTaGFkZXIocHJvZ3JhbS0+cHJvZ3JhbSgpKTsKLSAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0
aW9uKCksIDApKTsKLSAgICBkcmF3VGV4dHVyZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIo
KS0+cHJvamVjdGlvbk1hdHJpeCgpLCBjY0xheWVySW1wbCgpLT5kcmF3VHJhbnNmb3JtKCksCi0g
ICAgICAgICAgICAgICAgICAgICBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwg
Y2NMYXllckltcGwoKS0+ZHJhd09wYWNpdHkoKSwKLSAgICAgICAgICAgICAgICAgICAgIHByb2dy
YW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCksCi0gICAgICAgICAgICAgICAgICAg
ICBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKSk7CisgICAgTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlVG9MYXllcihsYXllcik7CisKKyAgICBDQ1BsdWdpbkxheWVySW1wbCog
cGx1Z2luTGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ1BsdWdpbkxheWVySW1wbCo+KGxheWVyKTsKKyAg
ICBwbHVnaW5MYXllci0+c2V0VGV4dHVyZUlkKG1fdGV4dHVyZUlkKTsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5
ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
UGx1Z2luTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGJiZjQ1Mzc2NzVhMTE4YTdkYjc5YTI5ZGYwMjE3
ZWVmNTdmNmQ5NmUuLjFmMWY1ODIxMjI0NGU2MGViZDNmNDg5NTFmMTM5NzI2YjhlZWU0NWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdp
bkxheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmgKQEAgLTM4LDE5ICszOCwxOSBAQCBjbGFzcyBQ
bHVnaW5MYXllckNocm9taXVtIDogcHVibGljIExheWVyQ2hyb21pdW0gewogcHVibGljOgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFBsdWdpbkxheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xh
eWVyQ2hyb21pdW0qIG93bmVyID0gMCk7CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHNJ
ZkRpcnR5KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXcoKTsKIAotICAgIHVuc2lnbmVkIHRleHR1
cmVJZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZUlkOyB9CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOworCiAgICAgdm9pZCBzZXRUZXh0
dXJlSWQodW5zaWduZWQgdGV4dHVyZUlkKTsKKyAgICB1bnNpZ25lZCB0ZXh0dXJlSWQoKSBjb25z
dCB7IHJldHVybiBtX3RleHR1cmVJZDsgfQogCi0gICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxW
ZXJ0ZXhTaGFkZXJQb3NUZXgsIEZyYWdtZW50U2hhZGVyUkdCQVRleEZsaXBBbHBoYT4gUHJvZ3Jh
bTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVG9MYXllcihDQ0xheWVySW1wbCopOwogCiBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0
IHsgcmV0dXJuICJQbHVnaW5MYXllciI7IH0KIAogcHJpdmF0ZToKLSAgICBQbHVnaW5MYXllckNo
cm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOworICAgIGV4cGxpY2l0IFBsdWdp
bkxheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CiAgICAgdW5zaWdu
ZWQgbV90ZXh0dXJlSWQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAppbmRl
eCAwMWJmOTQ4ODNjYTRkMTA1ODExMmM3N2JhODY1Mjk2NTA4MjdjMjIzLi5iNzBlNmFlN2YzMDA3
NmUyNzEyMDc0NzUzNGE2ZWJlMmRiYTlkMDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1
bS5jcHAKQEAgLTMzLDcgKzMzLDYgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAjaW5jbHVkZSAiVmlkZW9MYXllckNocm9taXVtLmgiCiAKLSNpbmNsdWRlICJjYy9DQ0xheWVy
SW1wbC5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKQEAg
LTQxLDMxICs0MCwxMSBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1
ZGUgIlZpZGVvRnJhbWVDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlZpZGVvRnJhbWVQcm92aWRlci5o
IgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NWaWRlb0xheWVy
SW1wbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIFRoZXNlIHZhbHVlcyBhcmUgbWFn
aWMgbnVtYmVycyB0aGF0IGFyZSB1c2VkIGluIHRoZSB0cmFuc2Zvcm1hdGlvbgotLy8gZnJvbSBZ
VVYgdG8gUkdCIGNvbG9yIHZhbHVlcy4KLS8vIFRoZXkgYXJlIHRha2VuIGZyb20gdGhlIGZvbGxv
d2luZyB3ZWJwYWdlOgotLy8gaHR0cDovL3d3dy5mb3VyY2Mub3JnL2ZjY3l2cmdiLnBocAotY29u
c3QgZmxvYXQgVmlkZW9MYXllckNocm9taXVtOjp5dXYyUkdCWzldID0gewotICAgIDEuMTY0Ziwg
MS4xNjRmLCAxLjE2NGYsCi0gICAgMC5mLCAtLjM5MWYsIDIuMDE4ZiwKLSAgICAxLjU5NmYsIC0u
ODEzZiwgMC5mLAotfTsKLQotLy8gVGhlc2UgdmFsdWVzIG1hcCB0byAxNiwgMTI4LCBhbmQgMTI4
IHJlc3BlY3RpdmVseSwgYW5kIGFyZSBjb21wdXRlZAotLy8gYXMgYSBmcmFjdGlvbiBvdmVyIDI1
NiAoZS5nLiAxNiAvIDI1NiA9IDAuMDYyNSkuCi0vLyBUaGV5IGFyZSB1c2VkIGluIHRoZSBZVVYg
dG8gUkdCQSBjb252ZXJzaW9uIGZvcm11bGE6Ci0vLyAgIFkgLSAxNiAgIDogR2l2ZXMgMTYgdmFs
dWVzIG9mIGhlYWQgYW5kIGZvb3Ryb29tIGZvciBvdmVyc2hvb3RpbmcKLS8vICAgVSAtIDEyOCAg
OiBUdXJucyB1bnNpZ25lZCBVIGludG8gc2lnbmVkIFUgWy0xMjgsMTI3XQotLy8gICBWIC0gMTI4
ICA6IFR1cm5zIHVuc2lnbmVkIFYgaW50byBzaWduZWQgViBbLTEyOCwxMjddCi1jb25zdCBmbG9h
dCBWaWRlb0xheWVyQ2hyb21pdW06Onl1dkFkanVzdFszXSA9IHsKLSAgICAtMC4wNjI1ZiwKLSAg
ICAtMC41ZiwKLSAgICAtMC41ZiwKLX07Ci0KIFBhc3NSZWZQdHI8VmlkZW9MYXllckNocm9taXVt
PiBWaWRlb0xheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZpZGVvRnJhbWVQcm92aWRlciogcHJvdmlkZXIpCiB7CkBAIC04Nyw2ICs2NiwxMSBAQCBW
aWRlb0xheWVyQ2hyb21pdW06On5WaWRlb0xheWVyQ2hyb21pdW0oKQogICAgIGNsZWFudXBSZXNv
dXJjZXMoKTsKIH0KIAorUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gVmlkZW9MYXllckNocm9taXVt
OjpjcmVhdGVDQ0xheWVySW1wbCgpCit7CisgICAgcmV0dXJuIENDVmlkZW9MYXllckltcGw6OmNy
ZWF0ZSh0aGlzKTsKK30KKwogdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJj
ZXMoKQogewogICAgIExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKTsKQEAgLTEwMSw3
ICs4NSw3IEBAIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKICAg
ICB9CiB9CiAKLXZvaWQgVmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHko
KQordm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKQog
ewogICAgIGlmICghbV9jb250ZW50c0RpcnR5KQogICAgICAgICByZXR1cm47CkBAIC0xNjAsNiAr
MTQ0LDIxIEBAIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHko
KQogICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7CiB9CiAKK3ZvaWQgVmlk
ZW9MYXllckNocm9taXVtOjp1cGRhdGVUb0xheWVyKENDTGF5ZXJJbXBsKiBsYXllcikKK3sKKyAg
ICBMYXllckNocm9taXVtOjp1cGRhdGVUb0xheWVyKGxheWVyKTsKKworICAgIENDVmlkZW9MYXll
ckltcGwqIHZpZGVvTGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ1ZpZGVvTGF5ZXJJbXBsKj4obGF5ZXIp
OworICAgIHZpZGVvTGF5ZXItPnNldFNraXBzRHJhdyhtX3NraXBzRHJhdyk7CisgICAgdmlkZW9M
YXllci0+c2V0RnJhbWVGb3JtYXQobV9mcmFtZUZvcm1hdCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgdmlkZW9MYXllci0+c2V0VGV4dHVyZShpLCBtX3Rl
eHR1cmVzW2ldKTsKKyAgICAgICAgdmlkZW9MYXllci0+c2V0VGV4dHVyZVNpemUoaSwgbV90ZXh0
dXJlU2l6ZXNbaV0pOworICAgICAgICB2aWRlb0xheWVyLT5zZXRGcmFtZVNpemUoaSwgbV9mcmFt
ZVNpemVzW2ldKTsKKyAgICB9Cit9CisKKwogdW5zaWduZWQgVmlkZW9MYXllckNocm9taXVtOjpk
ZXRlcm1pbmVUZXh0dXJlRm9ybWF0KFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUpCiB7CiAgICAg
c3dpdGNoIChmcmFtZS0+Zm9ybWF0KCkpIHsKQEAgLTIzOSwzMyArMjM4LDYgQEAgdm9pZCBWaWRl
b0xheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQs
IHVuc2lnbmVkIHRleHQKICAgICB9CiB9CiAKLXZvaWQgVmlkZW9MYXllckNocm9taXVtOjpkcmF3
KCkKLXsKLSAgICBpZiAobV9za2lwc0RyYXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VS
VChsYXllclJlbmRlcmVyKCkpOwotICAgIGNvbnN0IFJHQkFQcm9ncmFtKiByZ2JhUHJvZ3JhbSA9
IGxheWVyUmVuZGVyZXIoKS0+dmlkZW9MYXllclJHQkFQcm9ncmFtKCk7Ci0gICAgQVNTRVJUKHJn
YmFQcm9ncmFtICYmIHJnYmFQcm9ncmFtLT5pbml0aWFsaXplZCgpKTsKLSAgICBjb25zdCBZVVZQ
cm9ncmFtKiB5dXZQcm9ncmFtID0gbGF5ZXJSZW5kZXJlcigpLT52aWRlb0xheWVyWVVWUHJvZ3Jh
bSgpOwotICAgIEFTU0VSVCh5dXZQcm9ncmFtICYmIHl1dlByb2dyYW0tPmluaXRpYWxpemVkKCkp
OwotCi0gICAgc3dpdGNoIChtX2ZyYW1lRm9ybWF0KSB7Ci0gICAgY2FzZSBWaWRlb0ZyYW1lQ2hy
b21pdW06OllWMTI6Ci0gICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OllWMTY6Ci0gICAgICAg
IGRyYXdZVVYoeXV2UHJvZ3JhbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVmlkZW9GcmFt
ZUNocm9taXVtOjpSR0JBOgotICAgICAgICBkcmF3UkdCQShyZ2JhUHJvZ3JhbSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgb3RoZXIg
cGF0aHMuCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICByZWxlYXNlQ3VycmVudEZyYW1lKCk7Ci19Ci0KIHZvaWQgVmlkZW9MYXllckNocm9taXVt
OjpyZWxlYXNlQ3VycmVudEZyYW1lKCkKIHsKICAgICBpZiAoIW1fY3VycmVudEZyYW1lKQpAQCAt
Mjc2LDY0ICsyNDgsNiBAQCB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6cmVsZWFzZUN1cnJlbnRG
cmFtZSgpCiAgICAgcmVzZXRGcmFtZVBhcmFtZXRlcnMoKTsKIH0KIAotdm9pZCBWaWRlb0xheWVy
Q2hyb21pdW06OmRyYXdZVVYoY29uc3QgVmlkZW9MYXllckNocm9taXVtOjpZVVZQcm9ncmFtKiBw
cm9ncmFtKQotewotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJl
ckNvbnRleHQoKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRTEpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+Ymlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZXNbVmlkZW9G
cmFtZUNocm9taXVtOjp5UGxhbmVdKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2
ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUyKSk7Ci0gICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3Rl
eHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6dVBsYW5lXSkpOwotICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMykpOwotICAg
IEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgbV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnZQbGFuZV0pKTsKLQotICAg
IGxheWVyUmVuZGVyZXIoKS0+dXNlU2hhZGVyKHByb2dyYW0tPnByb2dyYW0oKSk7Ci0gICAgdW5z
aWduZWQgeUZyYW1lV2lkdGggPSBtX2ZyYW1lU2l6ZXNbVmlkZW9GcmFtZUNocm9taXVtOjp5UGxh
bmVdLndpZHRoKCk7Ci0gICAgdW5zaWduZWQgeVRleHR1cmVXaWR0aCA9IG1fdGV4dHVyZVNpemVz
W1ZpZGVvRnJhbWVDaHJvbWl1bTo6eVBsYW5lXS53aWR0aCgpOwotICAgIC8vIEFyYml0cmFyaWx5
IHRha2UgdGhlIHUgc2l6ZXMgYmVjYXVzZSB1IGFuZCB2IGRpbWVuc2lvbnMgYXJlIGlkZW50aWNh
bC4KLSAgICB1bnNpZ25lZCB1dkZyYW1lV2lkdGggPSBtX2ZyYW1lU2l6ZXNbVmlkZW9GcmFtZUNo
cm9taXVtOjp1UGxhbmVdLndpZHRoKCk7Ci0gICAgdW5zaWduZWQgdXZUZXh0dXJlV2lkdGggPSBt
X3RleHR1cmVTaXplc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnVQbGFuZV0ud2lkdGgoKTsKLQotICAg
IGZsb2F0IHlXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHlGcmFtZVdpZHRo
KSAvIHlUZXh0dXJlV2lkdGg7Ci0gICAgZmxvYXQgdXZXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHV2RnJhbWVXaWR0aCkgLyB1dlRleHR1cmVXaWR0aDsKLSAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnlXaWR0aFNj
YWxlRmFjdG9yTG9jYXRpb24oKSwgeVdpZHRoU2NhbGVGYWN0b3IpKTsKLSAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnV2V2lkdGhTY2Fs
ZUZhY3RvckxvY2F0aW9uKCksIHV2V2lkdGhTY2FsZUZhY3RvcikpOwotCi0gICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnlUZXh0dXJl
TG9jYXRpb24oKSwgMSkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkocHJv
Z3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS51VGV4dHVyZUxvY2F0aW9uKCksIDIpKTsKLSAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkudlRl
eHR1cmVMb2NhdGlvbigpLCAzKSk7Ci0KLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9y
bU1hdHJpeDNmdihwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmNjTWF0cml4TG9jYXRpb24oKSwg
MCwgY29uc3RfY2FzdDxmbG9hdCo+KHl1djJSR0IpLCAxKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPnVuaWZvcm0zZnYocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS55dXZBZGpMb2NhdGlv
bigpLCBjb25zdF9jYXN0PGZsb2F0Kj4oeXV2QWRqdXN0KSwgMSkpOwotCi0gICAgZHJhd1RleHR1
cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwgY2NM
YXllckltcGwoKS0+ZHJhd1RyYW5zZm9ybSgpLAotICAgICAgICAgICAgICAgICAgICAgYm91bmRz
KCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGNjTGF5ZXJJbXBsKCktPmRyYXdPcGFjaXR5
KCksCi0gICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhM
b2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIo
KS5hbHBoYUxvY2F0aW9uKCkpOwotCi0gICAgLy8gUmVzZXQgYWN0aXZlIHRleHR1cmUgYmFjayB0
byB0ZXh0dXJlIDAuCi0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7Ci19Ci0KLXZvaWQgVmlkZW9MYXllckNocm9taXVt
OjpkcmF3UkdCQShjb25zdCBWaWRlb0xheWVyQ2hyb21pdW06OlJHQkFQcm9ncmFtKiBwcm9ncmFt
KQotewotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRl
eHQoKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRTApKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNo
cm9taXVtOjpyZ2JQbGFuZV0pKTsKLQotICAgIGxheWVyUmVuZGVyZXIoKS0+dXNlU2hhZGVyKHBy
b2dyYW0tPnByb2dyYW0oKSk7Ci0gICAgdW5zaWduZWQgZnJhbWVXaWR0aCA9IG1fZnJhbWVTaXpl
c1tWaWRlb0ZyYW1lQ2hyb21pdW06OnJnYlBsYW5lXS53aWR0aCgpOwotICAgIHVuc2lnbmVkIHRl
eHR1cmVXaWR0aCA9IG1fdGV4dHVyZVNpemVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6cmdiUGxhbmVd
LndpZHRoKCk7Ci0gICAgZmxvYXQgd2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0
PihmcmFtZVdpZHRoKSAvIHRleHR1cmVXaWR0aDsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
dW5pZm9ybTRmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnRleFRyYW5zZm9ybUxvY2F0aW9uKCks
IDAsIDAsIHdpZHRoU2NhbGVGYWN0b3IsIDEpKTsKLQotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwg
MCkpOwotCi0gICAgZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVyKCktPnBy
b2plY3Rpb25NYXRyaXgoKSwgY2NMYXllckltcGwoKS0+ZHJhd1RyYW5zZm9ybSgpLAotICAgICAg
ICAgICAgICAgICAgICAgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGNjTGF5
ZXJJbXBsKCktPmRyYXdPcGFjaXR5KCksCi0gICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52
ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgcHJv
Z3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCkpOwotfQotCiB2b2lkIFZpZGVv
TGF5ZXJDaHJvbWl1bTo6cmVzZXRGcmFtZVBhcmFtZXRlcnMoKQogewogICAgIGZvciAodW5zaWdu
ZWQgcGxhbmUgPSAwOyBwbGFuZSA8IFZpZGVvRnJhbWVDaHJvbWl1bTo6bWF4UGxhbmVzOyBwbGFu
ZSsrKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGM2OWNjN2VkMmQ1NjRiMGI5
OTQyMjgxNGM5YzMwNTUzOTAyMWJkNzIuLmNlZGIxMTMwZDFiZGM0MWNhYzc1NTg1ZTYxMzU3OWNl
MjkwYzdhOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oCkBAIC00NSwxNiArNDUsMTcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFZpZGVvTGF5ZXJDaHJvbWl1bT4gY3Jl
YXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIgPSAwLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZGVvRnJhbWVQcm92aWRlciogPSAwKTsK
ICAgICB2aXJ0dWFsIH5WaWRlb0xheWVyQ2hyb21pdW0oKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlQ29udGVudHNJZkRpcnR5KCk7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXllcklt
cGw+IGNyZWF0ZUNDTGF5ZXJJbXBsKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9z
aXRvclJlc291cmNlcygpOwogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRyYXcoKTsKIAogICAgIC8vIFRoaXMg
ZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IFZpZGVvRnJhbWVQcm92aWRlci4gV2hlbiB0aGlzIG1ldGhv
ZCBpcyBjYWxsZWQKICAgICAvLyBwdXRDdXJyZW50RnJhbWUoKSBtdXN0IGJlIGNhbGxlZCB0byBy
ZXR1cm4gdGhlIGZyYW1lIGN1cnJlbnRseSBoZWxkLgogICAgIHZvaWQgcmVsZWFzZUN1cnJlbnRG
cmFtZSgpOwogCi0gICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXhU
cmFuc2Zvcm0sIEZyYWdtZW50U2hhZGVyUkdCQVRleEZsaXBBbHBoYT4gUkdCQVByb2dyYW07Ci0g
ICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXhZVVZTdHJldGNoLCBG
cmFnbWVudFNoYWRlcllVVlZpZGVvPiBZVVZQcm9ncmFtOworICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVUb0xheWVyKENDTGF5ZXJJbXBsKik7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQg
Y2xlYW51cFJlc291cmNlcygpOwpAQCAtNjksMTQgKzcwLDkgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHVwZGF0ZVJHQkFDb250ZW50cyhHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IFZpZGVvRnJhbWVD
aHJvbWl1bSopOwogICAgIHZvaWQgYWxsb2NhdGVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwg
dW5zaWduZWQgdGV4dHVyZUlkLCBjb25zdCBJbnRTaXplJiBkaW1lbnNpb25zLCB1bnNpZ25lZCB0
ZXh0dXJlRm9ybWF0KTsKICAgICB2b2lkIHVwZGF0ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Qq
LCB1bnNpZ25lZCB0ZXh0dXJlSWQsIGNvbnN0IEludFNpemUmIGRpbWVuc2lvbnMsIHVuc2lnbmVk
IHRleHR1cmVGb3JtYXQsIGNvbnN0IHZvaWQqIGRhdGEpOwotICAgIHZvaWQgZHJhd1lVVihjb25z
dCBZVVZQcm9ncmFtKik7Ci0gICAgdm9pZCBkcmF3UkdCQShjb25zdCBSR0JBUHJvZ3JhbSopOwog
ICAgIHZvaWQgcmVzZXRGcmFtZVBhcmFtZXRlcnMoKTsKICAgICB2b2lkIHNhdmVDdXJyZW50RnJh
bWUoVmlkZW9GcmFtZUNocm9taXVtKik7CiAKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgeXV2MlJH
Qls5XTsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgeXV2QWRqdXN0WzNdOwotCiAgICAgYm9vbCBt
X3NraXBzRHJhdzsKICAgICBWaWRlb0ZyYW1lQ2hyb21pdW06OkZvcm1hdCBtX2ZyYW1lRm9ybWF0
OwogICAgIFZpZGVvRnJhbWVQcm92aWRlciogbV9wcm92aWRlcjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVy
Q2hyb21pdW0uY3BwCmluZGV4IGU4M2QwNDU2YTVjNWVhNTgyYmZhNzFhNGJkNzc0ZGM2N2UwZTg3
NTcuLjdhYjQzYTk4NjhmMmQzNjE0NGI5MjA2ODEyZWQzN2U2ZTY3ZWRjOTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJv
bWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
V2ViR0xMYXllckNocm9taXVtLmNwcApAQCAtNTAsNyArNTAsNyBAQCBXZWJHTExheWVyQ2hyb21p
dW06OldlYkdMTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQogewog
fQogCi12b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KCkKK3Zv
aWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkKIHsKICAg
ICBpZiAoIW1fY29udGVudHNEaXJ0eSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVy
Q2hyb21pdW0uaAppbmRleCA3MGJlODc2OTI4MzQ2YWU0NjM0ODU4OWYxZWI1ZWZiNmY3Mzg0NDlk
Li45OWE2YmUzMDdjYzQ2ZGIxMjYwNjlhYjQxODEwYTk0Y2E1NDQ2NWY5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21p
dW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJH
TExheWVyQ2hyb21pdW0uaApAQCAtNDUsNyArNDUsNyBAQCBjbGFzcyBXZWJHTExheWVyQ2hyb21p
dW0gOiBwdWJsaWMgQ2FudmFzTGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8V2ViR0xMYXllckNocm9taXVtPiBjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVt
KiBvd25lciA9IDApOwogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJl
dHVybiBtX2NvbnRleHQ7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHNJZkRpcnR5
KCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKIAogICAg
IHZvaWQgc2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
Q2FudmFzTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NDlkMDQ5N2RhMDVj
MjhiMTYwYmQyN2NhZjRkNGU0ZGYzNzQ4NTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3Bw
CkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJjYy9DQ0NhbnZhc0xheWVySW1w
bC5oIgorCisjaW5jbHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0ND
YW52YXNMYXllckltcGw6OkNDQ2FudmFzTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyKQor
ICAgIDogQ0NMYXllckltcGwob3duZXIpCisgICAgLCBtX3RleHR1cmVJZCgwKQorICAgICwgbV9w
cmVtdWx0aXBsaWVkQWxwaGEodHJ1ZSkKK3sKK30KKworQ0NDYW52YXNMYXllckltcGw6On5DQ0Nh
bnZhc0xheWVySW1wbCgpCit7Cit9CisKK3ZvaWQgQ0NDYW52YXNMYXllckltcGw6OmRyYXcoKQor
eworICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOworICAgIGNvbnN0IENDQ2FudmFzTGF5ZXJJ
bXBsOjpQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlcigpLT5jYW52YXNMYXllclByb2dy
YW0oKTsKKyAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgpKTsKKyAg
ICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dCgp
OworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFMCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpKTsKKyAgICBHQzNEZW51
bSBzZmFjdG9yID0gbV9wcmVtdWx0aXBsaWVkQWxwaGEgPyBHcmFwaGljc0NvbnRleHQzRDo6T05F
IDogR3JhcGhpY3NDb250ZXh0M0Q6OlNSQ19BTFBIQTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+YmxlbmRGdW5jKHNmYWN0b3IsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FM
UEhBKSk7CisgICAgbGF5ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIocHJvZ3JhbS0+cHJvZ3JhbSgp
KTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50
U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKKyAgICBMYXllckNocm9taXVtOjpkcmF3
VGV4dHVyZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgp
LCBkcmF3VHJhbnNmb3JtKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1h
dHJpeExvY2F0aW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9n
cmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKSk7CisKK30KKworCit2b2lkIEND
Q2FudmFzTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQg
aW5kZW50KSBjb25zdAoreworICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOworICAgIHRzIDw8
ICJjYW52YXMgbGF5ZXIgdGV4dHVyZSBpZDogIiA8PCBtX3RleHR1cmVJZCA8PCAiIHByZW11bHRp
cGxpZWQ6ICIgPDwgbV9wcmVtdWx0aXBsaWVkQWxwaGEgPDwgIlxuIjsKKyAgICBDQ0xheWVySW1w
bDo6ZHVtcExheWVyUHJvcGVydGllcyh0cywgaW5kZW50KTsKK30KKworfQorCisjZW5kaWYgLy8g
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllcklt
cGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44Y2JmOGQxNzYzMDZiODA4N2VkODFmZjc1OGUzY2ZlMWZmYmRhMWY5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBDQ0NhbnZhc0xheWVySW1wbF9oCisjZGVmaW5lIENDQ2FudmFzTGF5ZXJJbXBsX2gKKwor
I2luY2x1ZGUgIlByb2dyYW1CaW5kaW5nLmgiCisjaW5jbHVkZSAiU2hhZGVyQ2hyb21pdW0uaCIK
KyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIENDQ2FudmFzTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0NhbnZhc0xheWVySW1wbD4gY3JlYXRlKExheWVyQ2hyb21p
dW0qIG93bmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ0NhbnZhc0xh
eWVySW1wbChvd25lcikpOworICAgIH0KKyAgICB2aXJ0dWFsIH5DQ0NhbnZhc0xheWVySW1wbCgp
OworCisgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXgsIEZyYWdt
ZW50U2hhZGVyUkdCQVRleEZsaXBBbHBoYT4gUHJvZ3JhbTsKKworICAgIHZpcnR1YWwgdm9pZCBk
cmF3KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFt
JiwgaW50IGluZGVudCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFRleHR1cmVJZCh1bnNpZ25lZCBp
ZCkgeyBtX3RleHR1cmVJZCA9IGlkOyB9CisgICAgdm9pZCBzZXRQcmVtdWx0aXBsaWVkQWxwaGEo
Ym9vbCBwcmVtdWx0aXBsaWVkQWxwaGEpIHsgbV9wcmVtdWx0aXBsaWVkQWxwaGEgPSBwcmVtdWx0
aXBsaWVkQWxwaGE7IH0KK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ0NDYW52YXNMYXllckltcGwo
TGF5ZXJDaHJvbWl1bSopOworCisgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CisgICAgYm9vbCBt
X3ByZW11bHRpcGxpZWRBbHBoYTsKK307CisKK30KKworI2VuZGlmIC8vIENDQ2FudmFzTGF5ZXJJ
bXBsX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IGIzODhhNDk0ZGYxNjc4MmI1YjNh
YmE0OTRiMWUwOWMwMTAwZjc4YzQuLjk0MTFlNWFlNzJlNWVhMDM3ZTAyNmNlNTE0YWY4ZjJiZTQx
Y2MzZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTEwMSwyNSArMTAxLDYgQEAgQ0NM
YXllckltcGwqIENDTGF5ZXJJbXBsOjpyZXBsaWNhTGF5ZXIoKSBjb25zdAogICAgIHJldHVybiBt
X293bmVyLT5yZXBsaWNhTGF5ZXIoKSA/IG1fb3duZXItPnJlcGxpY2FMYXllcigpLT5jY0xheWVy
SW1wbCgpIDogMDsKIH0KIAotdm9pZCBDQ0xheWVySW1wbDo6dXBkYXRlRnJvbUxheWVyKExheWVy
Q2hyb21pdW0qIGxheWVyKQotewotICAgIG1fYW5jaG9yUG9pbnQgPSBsYXllci0+YW5jaG9yUG9p
bnQoKTsKLSAgICBtX2FuY2hvclBvaW50WiA9IGxheWVyLT5hbmNob3JQb2ludFooKTsKLSAgICBt
X2JvdW5kcyA9IGxheWVyLT5ib3VuZHMoKTsKLSAgICBtX2RvdWJsZVNpZGVkID0gbGF5ZXItPmRv
dWJsZVNpZGVkKCk7Ci0gICAgbV9tYXNrc1RvQm91bmRzID0gbGF5ZXItPm1hc2tzVG9Cb3VuZHMo
KTsKLSAgICBtX29wYWNpdHkgPSBsYXllci0+b3BhY2l0eSgpOwotICAgIG1fcG9zaXRpb24gPSBs
YXllci0+cG9zaXRpb24oKTsKLSAgICBtX3ByZXNlcnZlczNEID0gbGF5ZXItPnByZXNlcnZlczNE
KCk7Ci0gICAgbV9zdWJsYXllclRyYW5zZm9ybSA9IGxheWVyLT5zdWJsYXllclRyYW5zZm9ybSgp
OwotICAgIG1fdHJhbnNmb3JtID0gbGF5ZXItPnRyYW5zZm9ybSgpOwotCi0gICAgaWYgKG1hc2tM
YXllcigpKQotICAgICAgICBtYXNrTGF5ZXIoKS0+dXBkYXRlRnJvbUxheWVyKG1fb3duZXItPm1h
c2tMYXllcigpKTsKLSAgICBpZiAocmVwbGljYUxheWVyKCkpCi0gICAgICAgIHJlcGxpY2FMYXll
cigpLT51cGRhdGVGcm9tTGF5ZXIobV9vd25lci0+cmVwbGljYUxheWVyKCkpOwotfQotCiB2b2lk
IENDTGF5ZXJJbXBsOjpzZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogcmVu
ZGVyZXIpCiB7CiAgICAgbV9sYXllclJlbmRlcmVyID0gcmVuZGVyZXI7CkBAIC0xMzQsMTMgKzEx
NSwxNSBAQCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIENDTGF5ZXJJbXBsOjpjcmVhdGVSZW5kZXJT
dXJmYWNlKCkKIGJvb2wgQ0NMYXllckltcGw6OmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkKIHsK
ICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHN1YmxheWVycyA9IG1f
b3duZXItPmdldFN1YmxheWVycygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5
ZXJzLnNpemUoKTsgKytpKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIHN1YmxheWVyc1tpXS0+Y3JlYXRlQ0NMYXllckltcGxJZk5l
ZWRlZCgpOwogICAgICAgICBpZiAoc3VibGF5ZXJzW2ldLT5jY0xheWVySW1wbCgpLT5kcmF3c0Nv
bnRlbnQoKSB8fCBzdWJsYXllcnNbaV0tPmNjTGF5ZXJJbXBsKCktPmRlc2NlbmRhbnRzRHJhd3ND
b250ZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi0vLyBUaGVzZSBiZWxvbmcgb24gQ0NMYXllckltcGwsIGJ1dCBzaG91bGQgYmUg
c3ViY2xhc2VkIGJ5IGVhY2ggdHlwZSBhbmQgbm90IGRlZmVyIHRvIHRoZSBMYXllckNocm9taXVt
IHN1YnR5cGVzLgorLy8gVGhlc2UgYmVsb25nIG9uIENDTGF5ZXJJbXBsLCBidXQgc2hvdWxkIGJl
IG92ZXJyaWRkZW4gYnkgZWFjaCB0eXBlIGFuZCBub3QgZGVmZXIgdG8gdGhlIExheWVyQ2hyb21p
dW0gc3VidHlwZXMuCiBib29sIENDTGF5ZXJJbXBsOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogewog
ICAgIHJldHVybiBtX293bmVyLT5kcmF3c0NvbnRlbnQoKTsKQEAgLTE1MSw2ICsxMzQsMTEgQEAg
dm9pZCBDQ0xheWVySW1wbDo6ZHJhdygpCiAgICAgcmV0dXJuIG1fb3duZXItPmRyYXcoKTsKIH0K
IAordm9pZCBDQ0xheWVySW1wbDo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpCit7CisgICAg
cmV0dXJuIG1fb3duZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKK30KKwogdm9pZCBD
Q0xheWVySW1wbDo6dW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCkKIHsKICAgICBtX293bmVyLT51
bnJlc2VydmVDb250ZW50c1RleHR1cmUoKTsKQEAgLTIwMCw3ICsxODgsNyBAQCB2b2lkIENDTGF5
ZXJJbXBsOjpkcmF3RGVidWdCb3JkZXIoKQogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5kcmF3
RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9PUCwgNCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX1NIT1JULCA2ICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSkpOwogfQogCi1z
dGF0aWMgdm9pZCB3cml0ZUluZGVudChUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkKK3ZvaWQg
Q0NMYXllckltcGw6OndyaXRlSW5kZW50KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KQogewog
ICAgIGZvciAoaW50IGkgPSAwOyBpICE9IGluZGVudDsgKytpKQogICAgICAgICB0cyA8PCAiICAi
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggZTJmNWY5YjQ3OWRmOGIwMzY5ZWJiMDVjY2FkZjQ4
NzIyNTA1ZDE1MC4uOTZjNGYxYjliM2Q0NmIyZTBlZDQ4ODY4Yjk2OTUwYjJlMDI1YzUxNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5oCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDQ0xheWVySW1wbChvd25lcikpOwogICAgIH0KICAgICAvLyBXaGVu
IHRoaXMgY2xhc3MgZ2V0cyBzdWJjbGFzc2VzLCByZW1lbWJlciB0byBhZGQgJ3ZpcnR1YWwnIGhl
cmUuCi0gICAgfkNDTGF5ZXJJbXBsKCk7CisgICAgdmlydHVhbCB+Q0NMYXllckltcGwoKTsKIAog
I2lmbmRlZiBOREVCVUcKICAgICBpbnQgZGVidWdJRCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdJ
RDsgfQpAQCAtNTksMjcgKzU5LDQxIEBAIHB1YmxpYzoKICAgICBDQ0xheWVySW1wbCogbWFza0xh
eWVyKCkgY29uc3Q7CiAgICAgQ0NMYXllckltcGwqIHJlcGxpY2FMYXllcigpIGNvbnN0OwogCi0g
ICAgdm9pZCBkcmF3KCk7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOwogICAgIHZvaWQgdW5yZXNlcnZlQ29udGVu
dHNUZXh0dXJlKCk7CiAgICAgdm9pZCBiaW5kQ29udGVudHNUZXh0dXJlKCk7CiAKICAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhpcyBsYXllciBoYXMgY29udGVudCB0byBkcmF3LgotICAgIGJvb2wg
ZHJhd3NDb250ZW50KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNv
bnN0OwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGFueSBvZiB0aGUgbGF5ZXIncyBkZXNjZW5k
YW50cyBoYXMgY29udGVudCB0byBkcmF3LgogICAgIGJvb2wgZGVzY2VuZGFudHNEcmF3c0NvbnRl
bnQoKTsKIAogICAgIHZvaWQgY2xlYW51cFJlc291cmNlcygpOwogCi0gICAgdm9pZCB1cGRhdGVG
cm9tTGF5ZXIoTGF5ZXJDaHJvbWl1bSopOwotCisgICAgdm9pZCBzZXRBbmNob3JQb2ludChjb25z
dCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCkgeyBtX2FuY2hvclBvaW50ID0gYW5jaG9yUG9pbnQ7
IH0KICAgICBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1f
YW5jaG9yUG9pbnQ7IH0KKworICAgIHZvaWQgc2V0QW5jaG9yUG9pbnRaKGZsb2F0IGFuY2hvclBv
aW50WikgeyBtX2FuY2hvclBvaW50WiA9IGFuY2hvclBvaW50WjsgfQogICAgIGZsb2F0IGFuY2hv
clBvaW50WigpIGNvbnN0IHsgcmV0dXJuIG1fYW5jaG9yUG9pbnRaOyB9CisKKyAgICB2b2lkIHNl
dE1hc2tzVG9Cb3VuZHMoYm9vbCBtYXNrc1RvQm91bmRzKSB7IG1fbWFza3NUb0JvdW5kcyA9IG1h
c2tzVG9Cb3VuZHM7IH0KICAgICBib29sIG1hc2tzVG9Cb3VuZHMoKSBjb25zdCB7IHJldHVybiBt
X21hc2tzVG9Cb3VuZHM7IH0KKworICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KSB7
IG1fb3BhY2l0eSA9IG9wYWNpdHk7IH0KICAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1
cm4gbV9vcGFjaXR5OyB9CisKKyAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQm
IHBvc2l0aW9uKSB7IG1fcG9zaXRpb24gPSBwb3NpdGlvbjsgfQogICAgIGNvbnN0IEZsb2F0UG9p
bnQmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQorCisgICAgdm9pZCBz
ZXRQcmVzZXJ2ZXMzRChib29sIHByZXNlcnZlczNEKSB7IG1fcHJlc2VydmVzM0QgPSBwcmVzZXJ2
ZXMzRDsgfQogICAgIGJvb2wgcHJlc2VydmVzM0QoKSBjb25zdCB7IHJldHVybiBtX3ByZXNlcnZl
czNEOyB9CisKKyAgICB2b2lkIHNldFN1YmxheWVyVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBzdWJsYXllclRyYW5zZm9ybSkgeyBtX3N1YmxheWVyVHJhbnNmb3JtID0gc3Vi
bGF5ZXJUcmFuc2Zvcm07IH0KICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc3VibGF5
ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3N1YmxheWVyVHJhbnNmb3JtOyB9CisKKyAg
ICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3Jt
KSB7IG1fdHJhbnNmb3JtID0gdHJhbnNmb3JtOyB9CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CiAKICAgICB2
b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKSB7IG1fbmFtZSA9IG5hbWU7IH0KQEAgLTEy
NCwxMSArMTM4LDE0IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkdW1wTGF5ZXJQcm9w
ZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKIAotcHJpdmF0ZToKK3Byb3Rl
Y3RlZDoKICAgICAvLyBGb3Igbm93LCBDQ0xheWVycyBhcmUgb3duZWQgZGlyZWN0bHkgYnkgYSBM
YXllckNocm9taXVtLgogICAgIExheWVyQ2hyb21pdW0qIG1fb3duZXI7CiAgICAgZXhwbGljaXQg
Q0NMYXllckltcGwoTGF5ZXJDaHJvbWl1bSopOwogCisgICAgc3RhdGljIHZvaWQgd3JpdGVJbmRl
bnQoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpOworCitwcml2YXRlOgogICAgIC8vIFByb3BlcnRp
ZXMgc3luY2hyb25pemVkIGZyb20gdGhlIGFzc29jaWF0ZWQgTGF5ZXJDaHJvbWl1bS4KICAgICBG
bG9hdFBvaW50IG1fYW5jaG9yUG9pbnQ7CiAgICAgZmxvYXQgbV9hbmNob3JQb2ludFo7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Bs
dWdpbkxheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGFlZjYzOTg2MWFlMjRk
YTE1ZDljMDYxZDViNmViZGU4MTgyOGJmZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcApA
QCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiY2MvQ0NQbHVnaW5MYXllckltcGwu
aCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSAiUGx1Z2luTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NDUGx1
Z2luTGF5ZXJJbXBsOjpDQ1BsdWdpbkxheWVySW1wbChMYXllckNocm9taXVtKiBvd25lcikKKyAg
ICA6IENDTGF5ZXJJbXBsKG93bmVyKQorICAgICwgbV90ZXh0dXJlSWQoMCkKK3sKK30KKworQ0NQ
bHVnaW5MYXllckltcGw6On5DQ1BsdWdpbkxheWVySW1wbCgpCit7Cit9CisKK3ZvaWQgQ0NQbHVn
aW5MYXllckltcGw6OmRyYXcoKQoreworICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOworICAg
IGNvbnN0IENDUGx1Z2luTGF5ZXJJbXBsOjpQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJl
cigpLT5wbHVnaW5MYXllclByb2dyYW0oKTsKKyAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFt
LT5pbml0aWFsaXplZCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVy
UmVuZGVyZXIoKS0+Y29udGV4dCgpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOworICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0
dXJlSWQpKTsKKworICAgIC8vIEZJWE1FOiBzZXR0aW5nIHRoZSB0ZXh0dXJlIHBhcmFtZXRlcnMg
ZXZlcnkgdGltZSBpcyByZWR1bmRhbnQuIE1vdmUgdGhpcyBjb2RlIHNvbWV3aGVyZQorICAgIC8v
IHdoZXJlIGl0IHdpbGwgb25seSBoYXBwZW4gb25jZSBwZXIgdGV4dHVyZS4KKyAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkxJTkVBUikpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9N
QUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7CisgICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1Q
X1RPX0VER0UpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JB
UF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOworCisgICAgbGF5ZXJSZW5k
ZXJlcigpLT51c2VTaGFkZXIocHJvZ3JhbS0+cHJvZ3JhbSgpKTsKKyAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0
aW9uKCksIDApKTsKKyAgICBMYXllckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFkKGNvbnRleHQs
IGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCBkcmF3VHJhbnNmb3JtKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHMoKS53aWR0aCgpLCBib3Vu
ZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigp
LmFscGhhTG9jYXRpb24oKSk7Cit9CisKKwordm9pZCBDQ1BsdWdpbkxheWVySW1wbDo6ZHVtcExh
eWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKK3sKKyAgICB3
cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8PCAicGx1Z2luIGxheWVyIHRleHR1cmUg
aWQ6ICIgPDwgbV90ZXh0dXJlSWQgPDwgIlxuIjsKKyAgICBDQ0xheWVySW1wbDo6ZHVtcExheWVy
UHJvcGVydGllcyh0cywgaW5kZW50KTsKK30KKworfQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42NWViNWI3NjM2NDJhNjg5ZDkwZjY0Y2UzMDdhZGZmZTNkMWRiZTUwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQ
bHVnaW5MYXllckltcGwuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1BsdWdp
bkxheWVySW1wbF9oCisjZGVmaW5lIENDUGx1Z2luTGF5ZXJJbXBsX2gKKworI2luY2x1ZGUgIlBy
b2dyYW1CaW5kaW5nLmgiCisjaW5jbHVkZSAiU2hhZGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJj
Yy9DQ0xheWVySW1wbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDUGx1Z2lu
TGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDQ1BsdWdpbkxheWVySW1wbD4gY3JlYXRlKExheWVyQ2hyb21pdW0qIG93bmVyKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1BsdWdpbkxheWVySW1wbChvd25l
cikpOworICAgIH0KKyAgICB2aXJ0dWFsIH5DQ1BsdWdpbkxheWVySW1wbCgpOworCisgICAgdHlw
ZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXgsIEZyYWdtZW50U2hhZGVyUkdC
QVRleEZsaXBBbHBoYT4gUHJvZ3JhbTsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3KCk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVu
dCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFRleHR1cmVJZCh1bnNpZ25lZCBpZCkgeyBtX3RleHR1
cmVJZCA9IGlkOyB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ0NQbHVnaW5MYXllckltcGwo
TGF5ZXJDaHJvbWl1bSopOworCisgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7Cit9OworCit9CisK
KyNlbmRpZiAvLyBDQ1BsdWdpbkxheWVySW1wbF9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVy
SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOGIzMmM1MmU5ZmRhOTE5YTQ0MDYwYTM1ZmVmMWNkZGY0ZTVm
MmZkNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCkBAIC0wLDAgKzEsMTg0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorCisjaW5jbHVkZSAiY2MvQ0NWaWRlb0xheWVySW1wbC5oIgorCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJvbWl1bS5oIgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
Ky8vIFRoZXNlIHZhbHVlcyBhcmUgbWFnaWMgbnVtYmVycyB0aGF0IGFyZSB1c2VkIGluIHRoZSB0
cmFuc2Zvcm1hdGlvbgorLy8gZnJvbSBZVVYgdG8gUkdCIGNvbG9yIHZhbHVlcy4KKy8vIFRoZXkg
YXJlIHRha2VuIGZyb20gdGhlIGZvbGxvd2luZyB3ZWJwYWdlOgorLy8gaHR0cDovL3d3dy5mb3Vy
Y2Mub3JnL2ZjY3l2cmdiLnBocAorY29uc3QgZmxvYXQgQ0NWaWRlb0xheWVySW1wbDo6eXV2MlJH
Qls5XSA9IHsKKyAgICAxLjE2NGYsIDEuMTY0ZiwgMS4xNjRmLAorICAgIDAuZiwgLS4zOTFmLCAy
LjAxOGYsCisgICAgMS41OTZmLCAtLjgxM2YsIDAuZiwKK307CisKKy8vIFRoZXNlIHZhbHVlcyBt
YXAgdG8gMTYsIDEyOCwgYW5kIDEyOCByZXNwZWN0aXZlbHksIGFuZCBhcmUgY29tcHV0ZWQKKy8v
IGFzIGEgZnJhY3Rpb24gb3ZlciAyNTYgKGUuZy4gMTYgLyAyNTYgPSAwLjA2MjUpLgorLy8gVGhl
eSBhcmUgdXNlZCBpbiB0aGUgWVVWIHRvIFJHQkEgY29udmVyc2lvbiBmb3JtdWxhOgorLy8gICBZ
IC0gMTYgICA6IEdpdmVzIDE2IHZhbHVlcyBvZiBoZWFkIGFuZCBmb290cm9vbSBmb3Igb3ZlcnNo
b290aW5nCisvLyAgIFUgLSAxMjggIDogVHVybnMgdW5zaWduZWQgVSBpbnRvIHNpZ25lZCBVIFst
MTI4LDEyN10KKy8vICAgViAtIDEyOCAgOiBUdXJucyB1bnNpZ25lZCBWIGludG8gc2lnbmVkIFYg
Wy0xMjgsMTI3XQorY29uc3QgZmxvYXQgQ0NWaWRlb0xheWVySW1wbDo6eXV2QWRqdXN0WzNdID0g
eworICAgIC0wLjA2MjVmLAorICAgIC0wLjVmLAorICAgIC0wLjVmLAorfTsKKworQ0NWaWRlb0xh
eWVySW1wbDo6Q0NWaWRlb0xheWVySW1wbChMYXllckNocm9taXVtKiBvd25lcikKKyAgICA6IEND
TGF5ZXJJbXBsKG93bmVyKQoreworfQorCitDQ1ZpZGVvTGF5ZXJJbXBsOjp+Q0NWaWRlb0xheWVy
SW1wbCgpCit7CisgICAgY2xlYW51cFJlc291cmNlcygpOworfQorCit2b2lkIENDVmlkZW9MYXll
ckltcGw6OnNldFRleHR1cmUoc2l6ZV90IGksIHVuc2lnbmVkIHRleHR1cmVJZCkKK3sKKyAgICBB
U1NFUlQoaSA8IDMpOworICAgIG1fdGV4dHVyZXNbaV0gPSB0ZXh0dXJlSWQ7Cit9CisKK3ZvaWQg
Q0NWaWRlb0xheWVySW1wbDo6c2V0VGV4dHVyZVNpemUoc2l6ZV90IGksIGNvbnN0IEludFNpemUm
IHNpemUpCit7CisgICAgQVNTRVJUKGkgPCAzKTsKKyAgICBtX3RleHR1cmVTaXplc1tpXSA9IHNp
emU7Cit9CisKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6c2V0RnJhbWVTaXplKHNpemVfdCBpLCBj
b25zdCBJbnRTaXplJiBzaXplKQoreworICAgIEFTU0VSVChpIDwgMyk7CisgICAgbV9mcmFtZVNp
emVzW2ldID0gc2l6ZTsKK30KKwordm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3KCkKK3sKKyAg
ICBpZiAobV9za2lwc0RyYXcpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChsYXllclJl
bmRlcmVyKCkpOworICAgIGNvbnN0IFJHQkFQcm9ncmFtKiByZ2JhUHJvZ3JhbSA9IGxheWVyUmVu
ZGVyZXIoKS0+dmlkZW9MYXllclJHQkFQcm9ncmFtKCk7CisgICAgQVNTRVJUKHJnYmFQcm9ncmFt
ICYmIHJnYmFQcm9ncmFtLT5pbml0aWFsaXplZCgpKTsKKyAgICBjb25zdCBZVVZQcm9ncmFtKiB5
dXZQcm9ncmFtID0gbGF5ZXJSZW5kZXJlcigpLT52aWRlb0xheWVyWVVWUHJvZ3JhbSgpOworICAg
IEFTU0VSVCh5dXZQcm9ncmFtICYmIHl1dlByb2dyYW0tPmluaXRpYWxpemVkKCkpOworCisgICAg
c3dpdGNoIChtX2ZyYW1lRm9ybWF0KSB7CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OllW
MTI6CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OllWMTY6CisgICAgICAgIGRyYXdZVVYo
eXV2UHJvZ3JhbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVt
OjpSR0JBOgorICAgICAgICBkcmF3UkdCQShyZ2JhUHJvZ3JhbSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgb3RoZXIgcGF0aHMuCisg
ICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9p
ZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3WVVWKGNvbnN0IENDVmlkZW9MYXllckltcGw6OllVVlBy
b2dyYW0qIHByb2dyYW0pCit7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXll
clJlbmRlcmVyKCktPmNvbnRleHQoKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZl
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpKTsKKyAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4
dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjp5UGxhbmVdKSk7CisgICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUyKSk7CisgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBtX3RleHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6dVBsYW5lXSkpOworICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFMykpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnZQbGFu
ZV0pKTsKKworICAgIGxheWVyUmVuZGVyZXIoKS0+dXNlU2hhZGVyKHByb2dyYW0tPnByb2dyYW0o
KSk7CisgICAgdW5zaWduZWQgeUZyYW1lV2lkdGggPSBtX2ZyYW1lU2l6ZXNbVmlkZW9GcmFtZUNo
cm9taXVtOjp5UGxhbmVdLndpZHRoKCk7CisgICAgdW5zaWduZWQgeVRleHR1cmVXaWR0aCA9IG1f
dGV4dHVyZVNpemVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6eVBsYW5lXS53aWR0aCgpOworICAgIC8v
IEFyYml0cmFyaWx5IHRha2UgdGhlIHUgc2l6ZXMgYmVjYXVzZSB1IGFuZCB2IGRpbWVuc2lvbnMg
YXJlIGlkZW50aWNhbC4KKyAgICB1bnNpZ25lZCB1dkZyYW1lV2lkdGggPSBtX2ZyYW1lU2l6ZXNb
VmlkZW9GcmFtZUNocm9taXVtOjp1UGxhbmVdLndpZHRoKCk7CisgICAgdW5zaWduZWQgdXZUZXh0
dXJlV2lkdGggPSBtX3RleHR1cmVTaXplc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnVQbGFuZV0ud2lk
dGgoKTsKKworICAgIGZsb2F0IHlXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHlGcmFtZVdpZHRoKSAvIHlUZXh0dXJlV2lkdGg7CisgICAgZmxvYXQgdXZXaWR0aFNjYWxlRmFj
dG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHV2RnJhbWVXaWR0aCkgLyB1dlRleHR1cmVXaWR0aDsK
KyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPnZlcnRleFNoYWRl
cigpLnlXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24oKSwgeVdpZHRoU2NhbGVGYWN0b3IpKTsKKyAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPnZlcnRleFNoYWRlcigp
LnV2V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKCksIHV2V2lkdGhTY2FsZUZhY3RvcikpOworCisg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRl
cigpLnlUZXh0dXJlTG9jYXRpb24oKSwgMSkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51
bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS51VGV4dHVyZUxvY2F0aW9uKCksIDIp
KTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50
U2hhZGVyKCkudlRleHR1cmVMb2NhdGlvbigpLCAzKSk7CisKKyAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+dW5pZm9ybU1hdHJpeDNmdihwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmNjTWF0cml4
TG9jYXRpb24oKSwgMCwgY29uc3RfY2FzdDxmbG9hdCo+KHl1djJSR0IpLCAxKSk7CisgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0zZnYocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS55
dXZBZGpMb2NhdGlvbigpLCBjb25zdF9jYXN0PGZsb2F0Kj4oeXV2QWRqdXN0KSwgMSkpOworCisg
ICAgTGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVy
KCktPnByb2plY3Rpb25NYXRyaXgoKSwgZHJhd1RyYW5zZm9ybSgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCks
IGRyYXdPcGFjaXR5KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9n
cmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9u
KCkpOworCisgICAgLy8gUmVzZXQgYWN0aXZlIHRleHR1cmUgYmFjayB0byB0ZXh0dXJlIDAuCisg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkUwKSk7Cit9CisKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd1JHQkEoY29uc3Qg
Q0NWaWRlb0xheWVySW1wbDo6UkdCQVByb2dyYW0qIHByb2dyYW0pCit7CisgICAgR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyKCktPmNvbnRleHQoKTsKKyAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RTApKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjpyZ2JQbGFu
ZV0pKTsKKworICAgIGxheWVyUmVuZGVyZXIoKS0+dXNlU2hhZGVyKHByb2dyYW0tPnByb2dyYW0o
KSk7CisgICAgdW5zaWduZWQgZnJhbWVXaWR0aCA9IG1fZnJhbWVTaXplc1tWaWRlb0ZyYW1lQ2hy
b21pdW06OnJnYlBsYW5lXS53aWR0aCgpOworICAgIHVuc2lnbmVkIHRleHR1cmVXaWR0aCA9IG1f
dGV4dHVyZVNpemVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6cmdiUGxhbmVdLndpZHRoKCk7CisgICAg
ZmxvYXQgd2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0PihmcmFtZVdpZHRoKSAv
IHRleHR1cmVXaWR0aDsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKHByb2dy
YW0tPnZlcnRleFNoYWRlcigpLnRleFRyYW5zZm9ybUxvY2F0aW9uKCksIDAsIDAsIHdpZHRoU2Nh
bGVGYWN0b3IsIDEpKTsKKworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkocHJv
Z3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOworCisgICAgTGF5
ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVyKCktPnBy
b2plY3Rpb25NYXRyaXgoKSwgZHJhd1RyYW5zZm9ybSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGRyYXdP
cGFjaXR5KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52
ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCkpOwor
fQorCit2b2lkIENDVmlkZW9MYXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVh
bSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Cit7CisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7
CisgICAgdHMgPDwgInZpZGVvIGxheWVyXG4iOworICAgIENDTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQ
cm9wZXJ0aWVzKHRzLCBpbmRlbnQpOworfQorCit9CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43ZTcyMmIyYzJlMDdlZTFhMGMxMjgyNzYzNzZlMzJmYWI5NGEwMTAzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRl
b0xheWVySW1wbC5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDVmlkZW9MYXll
ckltcGxfaAorI2RlZmluZSBDQ1ZpZGVvTGF5ZXJJbXBsX2gKKworI2luY2x1ZGUgIlByb2dyYW1C
aW5kaW5nLmgiCisjaW5jbHVkZSAiU2hhZGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJWaWRlb0Zy
YW1lQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFZpZGVvRnJhbWVQcm92aWRlcjsKKworY2xhc3MgQ0NWaWRlb0xh
eWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q0NWaWRlb0xheWVySW1wbD4gY3JlYXRlKExheWVyQ2hyb21pdW0qIG93bmVyKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1ZpZGVvTGF5ZXJJbXBsKG93bmVyKSk7
CisgICAgfQorICAgIHZpcnR1YWwgfkNDVmlkZW9MYXllckltcGwoKTsKKworICAgIHR5cGVkZWYg
UHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4VHJhbnNmb3JtLCBGcmFnbWVudFNoYWRl
clJHQkFUZXhGbGlwQWxwaGE+IFJHQkFQcm9ncmFtOworICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRp
bmc8VmVydGV4U2hhZGVyUG9zVGV4WVVWU3RyZXRjaCwgRnJhZ21lbnRTaGFkZXJZVVZWaWRlbz4g
WVVWUHJvZ3JhbTsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3KCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CisK
KyAgICB2b2lkIHNldFNraXBzRHJhdyhib29sIHNraXBzRHJhdykgeyBtX3NraXBzRHJhdyA9IHNr
aXBzRHJhdzsgfQorICAgIHZvaWQgc2V0RnJhbWVGb3JtYXQoVmlkZW9GcmFtZUNocm9taXVtOjpG
b3JtYXQgZm9ybWF0KSB7IG1fZnJhbWVGb3JtYXQgPSBmb3JtYXQ7IH0KKyAgICB2b2lkIHNldFRl
eHR1cmUoc2l6ZV90LCB1bnNpZ25lZCk7CisgICAgdm9pZCBzZXRUZXh0dXJlU2l6ZShzaXplX3Qs
IGNvbnN0IEludFNpemUmKTsKKyAgICB2b2lkIHNldEZyYW1lU2l6ZShzaXplX3QsIGNvbnN0IElu
dFNpemUmKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBDQ1ZpZGVvTGF5ZXJJbXBsKExheWVy
Q2hyb21pdW0qKTsKKworICAgIHZvaWQgZHJhd1lVVihjb25zdCBZVVZQcm9ncmFtKik7CisgICAg
dm9pZCBkcmF3UkdCQShjb25zdCBSR0JBUHJvZ3JhbSopOworCisgICAgc3RhdGljIGNvbnN0IGZs
b2F0IHl1djJSR0JbOV07CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IHl1dkFkanVzdFszXTsKKwor
ICAgIGJvb2wgbV9za2lwc0RyYXc7CisgICAgVmlkZW9GcmFtZUNocm9taXVtOjpGb3JtYXQgbV9m
cmFtZUZvcm1hdDsKKyAgICB1bnNpZ25lZCBtX3RleHR1cmVzWzNdOworICAgIEludFNpemUgbV90
ZXh0dXJlU2l6ZXNbM107CisgICAgSW50U2l6ZSBtX2ZyYW1lU2l6ZXNbM107Cit9OworCit9CisK
KyNlbmRpZiAvLyBDQ1ZpZGVvTGF5ZXJJbXBsX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86652</attachid>
            <date>2011-03-23 11:36:37 -0700</date>
            <delta_ts>2011-03-25 10:51:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56793-20110323113636.patch</filename>
            <type>text/plain</type>
            <size>85809</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE3NDMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5NzU2NWQxNmRhODZiMTFj
MmE0NzhiYmJiNjIwNWJiNDY4MGIwNGIzLi4xZGNhZTVjNjZiZDI1MTRiZTE0N2I1NmI0ZDk3ZGU5
YTMzMTE1NDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQzIEBACisyMDExLTAzLTIzICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBNb3ZlIGRyYXcgaW1wbGVtZW50
YXRpb25zIHRvIENDTGF5ZXJJbXBsIGZvciBldmVyeXRoaW5nIGV4Y2VwdCBjb250ZW50IGxheWVy
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY3OTMK
KworICAgICAgICBNb3ZlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGxheWVyJ3MgZHJhdygp
IGZ1bmN0aW9uIGZyb20gTGF5ZXJDaHJvbWl1bSBzdWJjbGFzc2VzIHRvIENDTGF5ZXJJbXBsIHN1
YmNsYXNzZXMgZm9yIAorICAgICAgICBhbGwgbGF5ZXIgdHlwZXMgZXhjZXB0IGNvbnRlbnQgbGF5
ZXJzLiAgVGhpcyBnZXRzIHVzIGNsb3NlciB0byBkZWNvdXBsaW5nIHRoZSBjb21wb3NpdGUgc3Rl
cCBpdHNlbGYgZnJvbSB1cGRhdGluZyB0aGUgbGF5ZXJzLgorCisgICAgICAgIFRoZSBiaWdnZXN0
IGNoYW5nZSBpbiB0aGlzIHBhdGNoIGlzIGFkZGluZyBhIHNldCBvZiBDQ0xheWVySW1wbCBzdWJj
bGFzc2VzIHRvIGltcGxlbWVudCB0aGUgZGlmZmVyZW50IGRyYXdpbmcgcm91dGluZXMKKyAgICAg
ICAgYW5kIG1vdmluZyB0aGUgY29kZSBmcm9tIGVhY2ggWFhYTGF5ZXJDaHJvbWl1bSB0byBYWFhD
Q0xheWVySW1wbC4gIEluIG9yZGVyIHRvIHJlbmRlciBmcm9tIHRoZSBDQ0xheWVySW1wbCBzaWRl
IGFsbCBzdGF0ZQorICAgICAgICBuZWVkZWQgYXQgZHJhdyB0aW1lIGFsc28gaGFzIHRvIGJlIHN5
bmNocm9uaXplZCwgd2hpY2ggaXMgcGVyZm9ybWVkIGluIHVwZGF0ZVRvTGF5ZXIoKS4KKworICAg
ICAgICBPbiB0aGUgTGF5ZXJSZW5kZXJlckNocm9taXVtIHNpZGUgdGhlcmUgYXJlIGEgZmV3IGNo
YW5nZXMuICBJJ3ZlIHNwbGl0IHRoZSB1cGRhdGVDb250ZW50cyBjYWxscyBvbiBMYXllckNocm9t
aXVtcyBpbnRvIHR3byBvcGVyYXRpb25zCisgICAgICAgIHRlbnRhdGl2ZWx5IG5hbWVkICdwYWlu
dENvbnRlbnRzSWZOZWVkZWQnIGFuZCAndXBkYXRlQ29tcG9zaXRvclJlc291cmNlcycuICBwYWlu
dENvbnRlbnRzKCkgaXMgdXNlZCBmb3IgYW55IGNvZGUgdGhhdCBjYWxscyBpbnRvIFdlYktpdCBp
biBvcmRlciB0byBnZW5lcmF0ZQorICAgICAgICBuZXcgcGl4ZWwgZGF0YS4gIEl0J3MgZXhwZWN0
ZWQgdGhhdCB0aGlzIGNhbGwgbWF5IHRha2UgYSBsb25nIHBlcmlvZCBvZiB0aW1lIGFuZCBtYXkg
aW52b2x2ZSAib2RkIiBzaWRlIGVmZmVjdHMuICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkg
aXMgdXNlZCBmb3IKKyAgICAgICAgY29kZSB0aGF0IG5lZWRzIHRvIHVwZGF0ZSB0aGUgY29tcG9z
aXRvcidzIHRleHR1cmUgZGF0YSBvciBvdGhlciBzdGF0ZS4gIEl0IGlzIG5vdCBleHBlY3RlZCB0
aGF0IHRoaXMgY2FsbGJhY2sgd2lsbCB0YWtlIGxvbmcgKHNpbmNlIGl0J3MganVzdCBpbnNlcnRp
bmcKKyAgICAgICAgY29tbWFuZHMgaW50byB0aGUgR0wgY29tbWFuZCBzdHJlYW0sIGlkZWFsbHkp
IGFuZCB0aGlzIGNhbGwgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBhY2Nlc3MgdG8gdGhlIGNvbXBvc2l0
b3IncyBjb250ZXh0LCB1bmxpa2UgcGFpbnRDb250ZW50cygpLgorCisgICAgICAgIFRoZSB1cGRh
dGVBbmREcmF3TGF5ZXJzIGN5Y2xlIG5vdyBsb29rcyBsaWtlIHRoaXM6CisgICAgICAgIDEuKSB1
cGRhdGUgdGhlIHJvb3QgY29udGVudCBsYXllcgorICAgICAgICAyLikgdXBkYXRlIHRoZSByb290
IGxheWVyIHNjcm9sbGJhcnMKKyAgICAgICAgMy4pIGZvciBlYWNoIExheWVyQ2hyb21pdW0gaW4g
dHJlZSBvcmRlcjoKKyAgICAgICAgICBhLikgZW5zdXJlIGEgQ0NMYXllckltcGwgb2YgdGhlIGNv
cnJlY3QgdHlwZSBleGlzdHMgZm9yIHRoaXMgbGF5ZXIKKyAgICAgICAgICBiLikgcHVzaCBhbGwg
ZHJhdyB0aW1lIHByb3BlcnRpZXMgZnJvbSB0aGUgTGF5ZXJDaHJvbWl1bSB0byB0aGUgQ0NMYXll
ckltcGwKKyAgICAgICAgICBjLikgY29uc3RydWN0IHRoZSBhcHByb3ByaWF0ZSBkcmF3IHRyYW5z
Zm9ybXMsIHJlbmRlciBzdXJmYWNlcyBhbmQgcmVuZGVyIHN1cmZhY2Ugei1vcmRlciBzdWJsYXll
ciBsaXN0cworICAgICAgICA0LikgZm9yIGVhY2ggTGF5ZXJDaHJvbWl1bSBpbiB0cmVlIG9yZGVy
LCBwYWludCB0aGUgbGF5ZXIncyBjb250ZW50cworICAgICAgICA1LikgZm9yIGVhY2ggTGF5ZXJD
aHJvbWl1bSBpbiB0cmVlIG9yZGVyLCB1cGRhdGUgdGhlIGFzc29jaWF0ZSBjb21wb3NpdG9yIHJl
c291cmNlcyAodGV4dHVyZXMsIGV0YykKKyAgICAgICAgNi4pIGRyYXcgdGhlIHJvb3QgbGF5ZXIg
YW5kIGl0cyBzY3JvbGxiYXJzCisgICAgICAgIDcuKSBmb3IgZWFjaCBDQ0xheWVySW1wbCBpbiBy
ZW5kZXIgc3VyZmFjZSBvcmRlciwgZHJhdyBpdAorCisgICAgICAgIFN0ZXAgMyBzaG91bGQgcmVh
bGx5IGhhcHBlbiBhZnRlciBzdGVwIDUsIGJ1dCByaWdodCBub3cgcGFpbnRpbmcgYSBjb250ZW50
IGxheWVyIHJlcXVpcmVzIGtub3dsZWRnZSBvZiB0aGUgcmVuZGVyIHN1cmZhY2UgcHJvcGVydGll
cyBhbmQgZHJhdyB0cmFuc2Zvcm1zCisgICAgICAgIGluIG9yZGVyIHRvIHBhaW50LiAgV2UgYWxz
byBjdXJyZW50bHkgcHVzaCBsYXllciBwcm9wZXJ0aWVzIGZyb20gTGF5ZXJDaHJvbWl1bS0+Q0NM
YXllckltcGxzIHR3aWNlIG5vdyAtIG9uY2UgYXQgMy5iIGFuZCBvbmNlIGFmdGVyIDUgc28gd2Ug
Y2FuIHBpY2sKKyAgICAgICAgdXAgYW55IHRleHR1cmUgdXBkYXRlcy4gIFRoaXMgd2lsbCBhbHNv
IGdldCBmaXhlZCB3aGVuIHRoZSBwYWludCBkZXBlbmRlbmN5IG9uIHJlbmRlciBzdXJmYWNlcyBp
cyByZXNvbHZlZC4KKworICAgICAgICBJIGhhdmVuJ3QgbW9kaWZpZWQgdGhlIHJvb3QgbGF5ZXIg
b3IgY29udGVudCBsYXllcnMgaW4gb3JkZXIgdG8gbWluaW1pemUgY29uZmxpY3RzIHdpdGggdGhl
IG90aGVyIHBlbmRpbmcgd29yayBpbiB0aGF0IGFyZWEuCisKKyAgICAgICAgVGVzdHM6IGNvbXBv
c2l0aW5nLworCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1
bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6dXBk
YXRlVG9MYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nv
bnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNo
cm9taXVtOjpyZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6YmluZENvbnRlbnRzVGV4dHVy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjpwYWlu
dENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VMYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpM
YXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmNsZWFudXBS
ZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5k
ZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXROYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnVwZGF0ZVRvTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bTo6ZHVtcExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6Y2NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1
bTo6bGF5ZXJSZW5kZXJlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cGFpbnRD
b250ZW50c0lmRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c1JlY3Vyc2l2
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXNSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNhbnZhc0xheWVyUHJvZ3JhbSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnBsdWdpbkxheWVyUHJvZ3JhbSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZGVvTGF5ZXJSR0JBUHJvZ3Jh
bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZGVvTGF5ZXJZ
VVZQcm9ncmFtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5M
YXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06
OmNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21p
dW06OnNldFRleHR1cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVt
Ojp1cGRhdGVUb0xheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Q
bHVnaW5MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9t
aXVtOjp0ZXh0dXJlSWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Zp
ZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21p
dW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJv
bWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpWaWRl
b0xheWVyQ2hyb21pdW06OnVwZGF0ZVRvTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
UGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpDQ0NhbnZhc0xheWVy
SW1wbDo6Q0NDYW52YXNMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NDYW52YXNMYXll
ckltcGw6On5DQ0NhbnZhc0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0NhbnZhc0xh
eWVySW1wbDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0NhbnZhc0xheWVySW1wbDo6ZHVt
cExheWVyUHJvcGVydGllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NDYW52YXNMYXllckltcGwuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5oLgorICAgICAgICAoV2Vi
Q29yZTo6Q0NDYW52YXNMYXllckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Nh
bnZhc0xheWVySW1wbDo6c2V0VGV4dHVyZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQ2FudmFz
TGF5ZXJJbXBsOjpzZXRQcmVtdWx0aXBsaWVkQWxwaGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJJbXBsOjpkZXNjZW5kYW50c0RyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVySW1wbDo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVySW1wbDo6d3JpdGVJbmRlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1w
bDo6c2V0QW5jaG9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNldEFu
Y2hvclBvaW50Wik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0TWFza3NUb0Jv
dW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0T3BhY2l0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckltcGw6OnNldFByZXNlcnZlczNEKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJJbXBsOjpzZXRTdWJsYXllclRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SW1wbDo6c2V0VHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6Q0NQbHVnaW5MYXllckltcGw6OkNDUGx1Z2luTGF5ZXJJbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDUGx1Z2luTGF5ZXJJbXBsOjp+Q0NQbHVnaW5MYXllckltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5MYXllckltcGw6OmRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NQbHVnaW5MYXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVy
Q2hyb21pdW0uaC4KKyAgICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luTGF5ZXJJbXBsOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5MYXllckltcGw6OnNldFRleHR1cmVJZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6Q0NWaWRlb0xh
eWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjp+Q0NWaWRlb0xh
eWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpzZXRUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmRyYXcpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6ZHJhd1lVVik6CisgICAgICAgIChXZWJDb3JlOjpD
Q1ZpZGVvTGF5ZXJJbXBsOjpkcmF3UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5
ZXJJbXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uaC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpzZXRTa2lwc0RyYXcpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NWaWRlb0xheWVySW1wbDo6c2V0RnJhbWVGb3JtYXQpOgorCiAyMDExLTAzLTE3ICBPamFuIFZh
ZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW50dGkgS29p
dmlzdG8uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggM2VlZDNlYTgwY2VlNDgxZmI4OTZmYzE5ZDQwOWU5
OGQyMWFhODI1ZS4uMWFjZDk5ZmMyYjFmYzc2MDAxOTVjYWVhOTZiMjZlMjk4NDQwNzM1YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtMzk4OCwxMCArMzk4OCwxNiBAQAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0u
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNM
YXllckltcGwuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0NhbnZhc0xheWVySW1wbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5M
YXllckltcGwuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NWaWRlb0xheWVySW1wbC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9lZmwvRm9udEVmbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2VmbC9JY29uRWZsLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVt
LmNwcAppbmRleCBhZDk2MWFhNmUzZGQzZGM1ZGE3MGY4YTNlNjRhZWFlMjI1MWIzMTI4Li40Y2Ix
MTlhNGQ3ZThkNzEzNjk2NTliZDIwZmRhNWYxMWRkNTAxYzE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
czJETGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgQ2FudmFzMkRMYXllckNocm9t
aXVtOjp+Q2FudmFzMkRMYXllckNocm9taXVtKCkKICAgICAgICAgbGF5ZXJSZW5kZXJlckNvbnRl
eHQoKS0+ZGVsZXRlVGV4dHVyZShtX3RleHR1cmVJZCk7CiB9CiAKLXZvaWQgQ2FudmFzMkRMYXll
ckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQordm9pZCBDYW52YXMyRExheWVyQ2hy
b21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKQogewogICAgIGlmICghbV9jb250ZW50
c0RpcnR5IHx8ICFtX2RyYXdpbmdCdWZmZXIpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJD
aHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzMkRMYXllckNocm9taXVtLmgKaW5kZXggYTE0Y2I5ODNhNWJkMTg1MzViNGE2NDQ3N2ZlNTA0
ZWU4ZTJjNDQxMy4uODFiMTE4YzViNWRmZTljMzFhMWViMjQ5ZDU5OTJkYjQyNmVkMjA5NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
MkRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4gY3JlYXRlKERy
YXdpbmdCdWZmZXIqLCBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKICAgICB2aXJ0dWFs
IH5DYW52YXMyRExheWVyQ2hyb21pdW0oKTsKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50
c0lmRGlydHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygp
OwogCiAgICAgdm9pZCBzZXRUZXh0dXJlQ2hhbmdlZCgpOwogICAgIHVuc2lnbmVkIHRleHR1cmVJ
ZCgpIGNvbnN0OwpAQCAtNTUsOCArNTUsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4cGxp
Y2l0IENhbnZhczJETGF5ZXJDaHJvbWl1bShEcmF3aW5nQnVmZmVyKiwgR3JhcGhpY3NMYXllckNo
cm9taXVtKiBvd25lcik7CiAgICAgRHJhd2luZ0J1ZmZlciogbV9kcmF3aW5nQnVmZmVyOwotCi0g
ICAgc3RhdGljIHVuc2lnbmVkIG1fc2hhZGVyUHJvZ3JhbUlkOwogfTsKIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJD
aHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXNMYXllckNocm9taXVtLmNwcAppbmRleCAwMjY0ODY4OTkyNGMxNjA3MTVmZjRjMmI5YzRm
ODc0ODFmZjhhMTQyLi40NzMxMDg0OTQzYjBlMzdlNzIwNDM3OTc1OWEyMmRmYWIyM2MyMmIwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52
YXNMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcApAQCAtNDAsOCArNDAsNiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVuc2lnbmVkIENhbnZhc0xheWVyQ2hyb21pdW06Om1fc2hh
ZGVyUHJvZ3JhbUlkID0gMDsKLQogQ2FudmFzTGF5ZXJDaHJvbWl1bTo6Q2FudmFzTGF5ZXJDaHJv
bWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQogICAgIDogTGF5ZXJDaHJvbWl1bShv
d25lcikKICAgICAsIG1fdGV4dHVyZUNoYW5nZWQodHJ1ZSkKQEAgLTU0LDIyICs1MiwxOCBAQCBD
YW52YXNMYXllckNocm9taXVtOjp+Q2FudmFzTGF5ZXJDaHJvbWl1bSgpCiB7CiB9CiAKLXZvaWQg
Q2FudmFzTGF5ZXJDaHJvbWl1bTo6ZHJhdygpCitQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBDYW52
YXNMYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCiB7Ci0gICAgQVNTRVJUKGxheWVy
UmVuZGVyZXIoKSk7Ci0gICAgY29uc3QgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6UHJvZ3JhbSogcHJv
Z3JhbSA9IGxheWVyUmVuZGVyZXIoKS0+Y2FudmFzTGF5ZXJQcm9ncmFtKCk7Ci0gICAgQVNTRVJU
KHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOwotICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotICAg
IEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgbV90ZXh0dXJlSWQpKTsKLSAgICBHQzNEZW51bSBzZmFjdG9yID0gbV9wcmVtdWx0
aXBsaWVkQWxwaGEgPyBHcmFwaGljc0NvbnRleHQzRDo6T05FIDogR3JhcGhpY3NDb250ZXh0M0Q6
OlNSQ19BTFBIQTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmxlbmRGdW5jKHNmYWN0b3Is
IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKSk7Ci0gICAgbGF5ZXJSZW5k
ZXJlcigpLT51c2VTaGFkZXIocHJvZ3JhbS0+cHJvZ3JhbSgpKTsKLSAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0
aW9uKCksIDApKTsKLSAgICBkcmF3VGV4dHVyZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIo
KS0+cHJvamVjdGlvbk1hdHJpeCgpLCBjY0xheWVySW1wbCgpLT5kcmF3VHJhbnNmb3JtKCksCi0g
ICAgICAgICAgICAgICAgICAgICBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwg
Y2NMYXllckltcGwoKS0+ZHJhd09wYWNpdHkoKSwKLSAgICAgICAgICAgICAgICAgICAgIHByb2dy
YW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCksCi0gICAgICAgICAgICAgICAgICAg
ICBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKSk7CisgICAgcmV0dXJu
IENDQ2FudmFzTGF5ZXJJbXBsOjpjcmVhdGUodGhpcyk7Cit9CisKK3ZvaWQgQ2FudmFzTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlVG9MYXllcihDQ0xheWVySW1wbCogbGF5ZXIpCit7CisgICAgTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlVG9MYXllcihsYXllcik7CisKKyAgICBDQ0NhbnZhc0xheWVySW1wbCog
Y2FudmFzTGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ0NhbnZhc0xheWVySW1wbCo+KGxheWVyKTsKKyAg
ICBjYW52YXNMYXllci0+c2V0VGV4dHVyZUlkKG1fdGV4dHVyZUlkKTsKKyAgICBjYW52YXNMYXll
ci0+c2V0UHJlbXVsdGlwbGllZEFscGhhKG1fcHJlbXVsdGlwbGllZEFscGhhKTsKIH0KIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGVkM2EwNmY4NzhkNDUzZjBjMmUzMjRk
Y2JjNDFmNjc4MWY5OTNkYTIuLjUyNDk1ZmNkYjk5YWVlNDM0OTdlNTEyODg5MTM5NzkzMTgzOTM5
MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhc0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgKQEAgLTQzLDkgKzQzLDkgQEAgY2xh
c3MgQ2FudmFzTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBMYXllckNocm9taXVtIHsKIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIH5DYW52YXNMYXllckNocm9taXVtKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
ZHJhdygpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlQ0NMYXll
ckltcGwoKTsKIAotICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4
LCBGcmFnbWVudFNoYWRlclJHQkFUZXhGbGlwQWxwaGE+IFByb2dyYW07CisgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVRvTGF5ZXIoQ0NMYXllckltcGwqKTsKIAogcHJvdGVjdGVkOgogICAgIGV4cGxp
Y2l0IENhbnZhc0xheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CkBA
IC01NSw5ICs1NSw2IEBAIHByb3RlY3RlZDoKICAgICBib29sIG1fdGV4dHVyZUNoYW5nZWQ7CiAg
ICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CiAgICAgYm9vbCBtX3ByZW11bHRpcGxpZWRBbHBoYTsK
LQotcHJpdmF0ZToKLSAgICBzdGF0aWMgdW5zaWduZWQgbV9zaGFkZXJQcm9ncmFtSWQ7CiB9Owog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZmM4NTdmMTZhNjdl
NjIwN2E4YTgxMmQ4MWJjZGM4MmI1NTIzMDg4My4uNGVhOWM5MmUxY2FhZDVlZmVjMzNmMmQ5OTEy
NjYxZmJmNDAxNTlhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAt
NjYsNyArNjYsNyBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2Vz
KCkKICAgICBtX2NvbnRlbnRzVGV4dHVyZS5jbGVhcigpOwogfQogCi1ib29sIENvbnRlbnRMYXll
ckNocm9taXVtOjpyZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCkgY29uc3QKK2Jvb2wgQ29udGVu
dExheWVyQ2hyb21pdW06OnJlcXVpcmVzQ2xpcHBlZFVwZGF0ZVJlY3QoKQogewogICAgIC8vIFRv
IGF2b2lkIGFsbG9jYXRpbmcgZXhjZXNzaXZlbHkgbGFyZ2UgdGV4dHVyZXMsIHN3aXRjaCBpbnRv
ICJsYXJnZSBsYXllciBtb2RlIiBpZgogICAgIC8vIG9uZSBvZiB0aGUgbGF5ZXIncyBkaW1lbnNp
b25zIGlzIGxhcmdlciB0aGFuIDIwMDAgcGl4ZWxzIG9yIHRoZSBzaXplIG9mCkBAIC03Nyw3ICs3
Nyw3IEBAIGJvb2wgQ29udGVudExheWVyQ2hyb21pdW06OnJlcXVpcmVzQ2xpcHBlZFVwZGF0ZVJl
Y3QoKSBjb25zdAogICAgICAgICAgICAgfHwgIWxheWVyUmVuZGVyZXIoKS0+Y2hlY2tUZXh0dXJl
U2l6ZShib3VuZHMoKSkpOwogfQogCi12b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVD
b250ZW50c0lmRGlydHkoKQordm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50
c0lmRGlydHkoKQogewogICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IHN0YXRpY19j
YXN0PFJlbmRlckxheWVyQmFja2luZyo+KG1fb3duZXItPmNsaWVudCgpKTsKICAgICBpZiAoIWJh
Y2tpbmcgfHwgYmFja2luZy0+cGFpbnRpbmdHb2VzVG9XaW5kb3coKSkKQEAgLTI2OSw2ICsyNjks
MTEgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhdygpCiAgICAgdW5yZXNlcnZlQ29u
dGVudHNUZXh0dXJlKCk7CiB9CiAKK3ZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZUNv
bXBvc2l0b3JSZXNvdXJjZXMoKQoreworICAgIHVwZGF0ZVRleHR1cmVJZk5lZWRlZCgpOworfQor
CiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKQog
ewogICAgIGlmICghbV9za2lwc0RyYXcgJiYgbV9jb250ZW50c1RleHR1cmUpCkBAIC0yNzcsOCAr
MjgyLDYgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dW5yZXNlcnZlQ29udGVudHNUZXh0
dXJlKCkKIAogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6YmluZENvbnRlbnRzVGV4dHVyZSgp
CiB7Ci0gICAgdXBkYXRlVGV4dHVyZUlmTmVlZGVkKCk7Ci0KICAgICBpZiAoIW1fc2tpcHNEcmF3
ICYmIG1fY29udGVudHNUZXh0dXJlKQogICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZS0+YmluZFRl
eHR1cmUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCmluZGV4IDYyYmY5ZDFl
MmM4NmNhYzU4YTJmYWJhOWMyMjBmZDM4NDUwYTI4YzEuLmNmMjk2YWI5MDdkNWE3MWNhYTE4ZTRh
NTVlMmNkMTgzNzc4YzRiMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaApAQCAt
NTAsNyArNTAsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5Db250ZW50TGF5ZXJDaHJvbWl1
bSgpOwogCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpOworICAgIHZp
cnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVDb21wb3NpdG9yUmVzb3VyY2VzKCk7CiAgICAgdmlydHVhbCB2b2lkIHVucmVzZXJ2ZUNvbnRl
bnRzVGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCBiaW5kQ29udGVudHNUZXh0dXJlKCk7CiAK
QEAgLTYzLDcgKzY0LDcgQEAgcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENvbnRlbnRMYXllckNo
cm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwogCiAgICAgdmlydHVhbCB2b2lk
IGNsZWFudXBSZXNvdXJjZXMoKTsKLSAgICBib29sIHJlcXVpcmVzQ2xpcHBlZFVwZGF0ZVJlY3Qo
KSBjb25zdDsKKyAgICBib29sIHJlcXVpcmVzQ2xpcHBlZFVwZGF0ZVJlY3QoKTsKICAgICB2b2lk
IHJlc2l6ZVVwbG9hZEJ1ZmZlcihjb25zdCBJbnRTaXplJik7CiAKICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkNvbnRlbnRMYXllciI7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDdjNDIzNjZjZGYwYjUzNWNm
M2M1YjI4MDE5MTIzYmNmNTQ3ZjhlYzcuLjYwYzEzMzJkZjA3MjBjZjAzMmQ0ZTg3ZWQ5YWNlMzg1
NWNiMDgyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAtNjAsNyArNjAs
NyBAQCB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHMoSW1hZ2UqIGNvbnRlbnRz
KQogICAgIHNldE5lZWRzRGlzcGxheSgpOwogfQogCi12b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6
dXBkYXRlQ29udGVudHNJZkRpcnR5KCkKK3ZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpwYWludENv
bnRlbnRzSWZEaXJ0eSgpCiB7CiAgICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CiAKQEAgLTY4
LDcgKzY4LDcgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0
eSgpCiAgICAgaWYgKHJlcXVpcmVzQ2xpcHBlZFVwZGF0ZVJlY3QoKSkgewogICAgICAgICAvLyBV
c2UgdGhlIGJhc2UgdmVyc2lvbiBvZiB1cGRhdGVDb250ZW50cyB3aGljaCBkcmF3cyBhIHN1YnNl
dCBvZiB0aGUKICAgICAgICAgLy8gaW1hZ2UgdG8gYSBiaXRtYXAsIGFzIHRoZSBwaXhlbCBjb250
ZW50cyBjYW4ndCBiZSB1cGxvYWRlZCBkaXJlY3RseS4KLSAgICAgICAgQ29udGVudExheWVyQ2hy
b21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpOworICAgICAgICBDb250ZW50TGF5ZXJDaHJv
bWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaAppbmRleCBjYzkwNjRkMmNhZTg3NzFlNjlhMTdiNmU4
Y2E5NmIxZDE2MjRiZjNjLi42YWRkYWJjODRmMDNlZGJiNWJlNmI5Y2U5Nzc0MDA2Y2EwYWU4Mzcw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUxheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaApAQCAtNTAsNyArNTAsNyBAQCBjbGFzcyBJ
bWFnZUxheWVyQ2hyb21pdW0gOiBwdWJsaWMgQ29udGVudExheWVyQ2hyb21pdW0gewogcHVibGlj
OgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlTGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bSogb3duZXIgPSAwKTsKIAotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVD
b250ZW50c0lmRGlydHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHko
KTsKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZW50czsgfQogCiAgICAgdm9pZCBzZXRDb250ZW50cyhJbWFnZSogaW1hZ2UpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmNwcAppbmRleCBmYTc5MGY5OTkzYWM5YTI1NjJjMTQzYmE5YzY0ZDE1NjJhZDdlOWQ0
Li4yOTJiMTliNjQ3ZTFmNzllNzU5NzdiOGJkZGUxN2MzMWFkNjEyMjhjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmNwcApAQCAtNjIsNiArNjIsNyBAQCBMYXllckNocm9taXVtOjpMYXllckNocm9taXVt
KEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiAgICAgOiBtX293bmVyKG93bmVyKQogICAg
ICwgbV9jb250ZW50c0RpcnR5KGZhbHNlKQogICAgICwgbV9tYXNrTGF5ZXIoMCkKKyAgICAsIG1f
Y2NMYXllckltcGwoMCkKICAgICAsIG1fc3VwZXJsYXllcigwKQogI2lmbmRlZiBOREVCVUcKICAg
ICAsIG1fZGVidWdJRChzX25leHRMYXllckRlYnVnSUQrKykKQEAgLTc4LDcgKzc5LDYgQEAgTGF5
ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQog
ICAgICwgbV9nZW9tZXRyeUZsaXBwZWQoZmFsc2UpCiAgICAgLCBtX25lZWRzRGlzcGxheU9uQm91
bmRzQ2hhbmdlKGZhbHNlKQogICAgICwgbV9kb3VibGVTaWRlZCh0cnVlKQotICAgICwgbV9jY0xh
eWVySW1wbChDQ0xheWVySW1wbDo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9yZXBsaWNhTGF5ZXIo
MCkKIHsKIH0KQEAgLTk1LDcgKzk1LDggQEAgTGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0o
KQogCiB2b2lkIExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQogewotICAgIG1fY2NM
YXllckltcGwtPmNsZWFudXBSZXNvdXJjZXMoKTsKKyAgICBpZiAobV9jY0xheWVySW1wbCkKKyAg
ICAgICAgbV9jY0xheWVySW1wbC0+Y2xlYW51cFJlc291cmNlcygpOwogfQogCiB2b2lkIExheWVy
Q2hyb21pdW06OnNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiByZW5kZXJl
cikKQEAgLTEwNiw4ICsxMDcsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVy
ZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiByZW5kZXJlcikKICAgICAgICAgY2xlYW51cFJlc291
cmNlcygpOwogICAgICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKICAgICB9Ci0KLSAgICBtX2NjTGF5
ZXJJbXBsLT5zZXRMYXllclJlbmRlcmVyKHJlbmRlcmVyKTsKKyAgICBtX2xheWVyUmVuZGVyZXIg
PSByZW5kZXJlcjsKIH0KIAogdm9pZCBMYXllckNocm9taXVtOjpzZXROZWVkc0NvbW1pdCgpCkBA
IC0yNDEsNyArMjQxLDYgQEAgTGF5ZXJDaHJvbWl1bSogTGF5ZXJDaHJvbWl1bTo6c3VwZXJsYXll
cigpIGNvbnN0CiB2b2lkIExheWVyQ2hyb21pdW06OnNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1l
KQogewogICAgIG1fbmFtZSA9IG5hbWU7Ci0gICAgbV9jY0xheWVySW1wbC0+c2V0TmFtZShuYW1l
KTsKIH0KIAogdm9pZCBMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRS
ZWN0JiBkaXJ0eVJlY3QpCkBAIC0yODksNiArMjg4LDI3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6
dG9HTE1hdHJpeChmbG9hdCogZmxhdHRlbmVkLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bSkKICAgICBmbGF0dGVuZWRbMTVdID0gbS5tNDQoKTsKIH0KIAordm9pZCBMYXllckNocm9taXVt
Ojp1cGRhdGVUb0xheWVyKENDTGF5ZXJJbXBsKiBsYXllcikKK3sKKyAgICBsYXllci0+c2V0QW5j
aG9yUG9pbnQobV9hbmNob3JQb2ludCk7CisgICAgbGF5ZXItPnNldEFuY2hvclBvaW50WihtX2Fu
Y2hvclBvaW50Wik7CisgICAgbGF5ZXItPnNldEJvdW5kcyhtX2JvdW5kcyk7CisgICAgbGF5ZXIt
PnNldERvdWJsZVNpZGVkKG1fZG91YmxlU2lkZWQpOworICAgIGxheWVyLT5zZXRMYXllclJlbmRl
cmVyKG1fbGF5ZXJSZW5kZXJlci5nZXQoKSk7CisgICAgbGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMo
bV9tYXNrc1RvQm91bmRzKTsKKyAgICBsYXllci0+c2V0TmFtZShtX25hbWUpOworICAgIGxheWVy
LT5zZXRPcGFjaXR5KG1fb3BhY2l0eSk7CisgICAgbGF5ZXItPnNldFBvc2l0aW9uKG1fcG9zaXRp
b24pOworICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCgpKTsKKyAgICBsYXll
ci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9zdWJsYXllclRyYW5zZm9ybSk7CisgICAgbGF5ZXIt
PnNldFRyYW5zZm9ybShtX3RyYW5zZm9ybSk7CisKKyAgICBpZiAobWFza0xheWVyKCkpCisgICAg
ICAgIG1hc2tMYXllcigpLT51cGRhdGVUb0xheWVyKGxheWVyLT5tYXNrTGF5ZXIoKSk7CisgICAg
aWYgKHJlcGxpY2FMYXllcigpKQorICAgICAgICByZXBsaWNhTGF5ZXIoKS0+dXBkYXRlVG9MYXll
cihsYXllci0+cmVwbGljYUxheWVyKCkpOworfQorCiBHcmFwaGljc0NvbnRleHQzRCogTGF5ZXJD
aHJvbWl1bTo6bGF5ZXJSZW5kZXJlckNvbnRleHQoKSBjb25zdAogewogICAgIEFTU0VSVChsYXll
clJlbmRlcmVyKCkpOwpAQCAtMzM1LDcgKzM1NSw4IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHVt
cExheWVyKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAogICAgIHdyaXRlSW5kZW50
KHRzLCBpbmRlbnQpOwogICAgIHRzIDw8IGxheWVyVHlwZUFzU3RyaW5nKCkgPDwgIigiIDw8IG1f
bmFtZSA8PCAiKVxuIjsKICAgICBkdW1wTGF5ZXJQcm9wZXJ0aWVzKHRzLCBpbmRlbnQrMik7Ci0g
ICAgbV9jY0xheWVySW1wbC0+ZHVtcExheWVyUHJvcGVydGllcyh0cywgaW5kZW50KzIpOworICAg
IGlmIChtX2NjTGF5ZXJJbXBsKQorICAgICAgICBtX2NjTGF5ZXJJbXBsLT5kdW1wTGF5ZXJQcm9w
ZXJ0aWVzKHRzLCBpbmRlbnQrMik7CiAgICAgaWYgKG1fcmVwbGljYUxheWVyKSB7CiAgICAgICAg
IHdyaXRlSW5kZW50KHRzLCBpbmRlbnQrMik7CiAgICAgICAgIHRzIDw8ICJSZXBsaWNhOlxuIjsK
QEAgLTM2MSw2ICszODIsMjIgQEAgdm9pZCBMYXllckNocm9taXVtOjpkdW1wTGF5ZXJQcm9wZXJ0
aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAogCiB9CiAKK1Bhc3NSZWZQdHI8
Q0NMYXllckltcGw+IExheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkKK3sKKyAgICBy
ZXR1cm4gQ0NMYXllckltcGw6OmNyZWF0ZSh0aGlzKTsKK30KKwordm9pZCBMYXllckNocm9taXVt
OjpjcmVhdGVDQ0xheWVySW1wbElmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fY2NMYXllckltcGwp
CisgICAgICAgIG1fY2NMYXllckltcGwgPSBjcmVhdGVDQ0xheWVySW1wbCgpOworfQorCitDQ0xh
eWVySW1wbCogTGF5ZXJDaHJvbWl1bTo6Y2NMYXllckltcGwoKQoreworICAgIHJldHVybiBtX2Nj
TGF5ZXJJbXBsLmdldCgpOworfQorCiAvLyBCZWdpbiBjYWxscyB0aGF0IGZvcndhcmQgdG8gdGhl
IENDTGF5ZXJJbXBsLgogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQogLy8gVGhlc2UgZXhpc3RzIGp1c3QgZm9yIGRlYnVnZ2luZyAodmlhIGRyYXdEZWJ1
Z0JvcmRlcigpKS4KQEAgLTM3MCwyNSArNDA3LDE1IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0
Qm9yZGVyQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9
CiAKLUNvbG9yIExheWVyQ2hyb21pdW06OmJvcmRlckNvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9jY0xheWVySW1wbC0+ZGVidWdCb3JkZXJDb2xvcigpOwotfQotCiB2b2lkIExheWVyQ2hy
b21pdW06OnNldEJvcmRlcldpZHRoKGZsb2F0IHdpZHRoKQogewogICAgIG1fY2NMYXllckltcGwt
PnNldERlYnVnQm9yZGVyV2lkdGgod2lkdGgpOwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAK
LWZsb2F0IExheWVyQ2hyb21pdW06OmJvcmRlcldpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9jY0xheWVySW1wbC0+ZGVidWdCb3JkZXJXaWR0aCgpOwotfQotCiBMYXllclJlbmRlcmVyQ2hy
b21pdW0qIExheWVyQ2hyb21pdW06OmxheWVyUmVuZGVyZXIoKSBjb25zdAogewotICAgIHJldHVy
biBtX2NjTGF5ZXJJbXBsLT5sYXllclJlbmRlcmVyKCk7CisgICAgcmV0dXJuIG1fbGF5ZXJSZW5k
ZXJlci5nZXQoKTsKIH0KIAogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGU5ZDllMWZiZDA0NDEzYzRhNjA0Yjcw
YTJlMDdlODgwYTBmMmRmZDMuLjA1Mjk3ODYwNDA4OWI5ODBkZjE2ZWNmZGEwNTIxZGJlMDVjNmZk
MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTE1NiwxNCArMTU2LDE0IEBAIHB1YmxpYzoKIAog
ICAgIC8vIFRoZXNlIG1ldGhvZHMgdHlwaWNhbGx5IG5lZWQgdG8gYmUgb3ZlcndyaXR0ZW4gYnkg
ZGVyaXZlZCBjbGFzc2VzLgogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50c0lmRGlydHko
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpIHsgfQogICAgIHZpcnR1YWwg
dm9pZCB1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgYmlu
ZENvbnRlbnRzVGV4dHVyZSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkcmF3KCkgeyB9CiAKICAg
ICAvLyBUaGVzZSBleGlzdHMganVzdCBmb3IgZGVidWdnaW5nICh2aWEgZHJhd0RlYnVnQm9yZGVy
KCkpLgogICAgIHZvaWQgc2V0Qm9yZGVyQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICBDb2xvciBi
b3JkZXJDb2xvcigpIGNvbnN0OwogCiAjaWZuZGVmIE5ERUJVRwogICAgIGludCBkZWJ1Z0lEKCkg
Y29uc3QgeyByZXR1cm4gbV9kZWJ1Z0lEOyB9CkBAIC0xNzMsMTYgKzE3MywxNyBAQCBwdWJsaWM6
CiAgICAgU3RyaW5nIGxheWVyVHJlZUFzVGV4dCgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRCb3Jk
ZXJXaWR0aChmbG9hdCk7Ci0gICAgZmxvYXQgYm9yZGVyV2lkdGgoKSBjb25zdDsKIAogICAgIC8v
IEV2ZXJ5dGhpbmcgZnJvbSBoZXJlIGRvd24gaW4gdGhlIHB1YmxpYyBzZWN0aW9uIHdpbGwgbW92
ZSB0byBDQ0xheWVySW1wbC4KLQotICAgIENDTGF5ZXJJbXBsKiBjY0xheWVySW1wbCgpIGNvbnN0
IHsgcmV0dXJuIG1fY2NMYXllckltcGwuZ2V0KCk7IH0KKyAgICBDQ0xheWVySW1wbCogY2NMYXll
ckltcGwoKTsKKyAgICB2b2lkIGNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVkZWQoKTsKIAogICAgIHN0
YXRpYyB2b2lkIGRyYXdUZXh0dXJlZFF1YWQoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgcHJvamVjdGlvbk1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGxheWVyTWF0cml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxv
YXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgb3BhY2l0eSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBtYXRyaXhMb2NhdGlvbiwgaW50IGFscGhhTG9jYXRpb24pOwog
CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRvTGF5ZXIoQ0NMYXllckltcGwqKTsKKwogICAgIC8v
IEJlZ2luIGNhbGxzIHRoYXQgZm9yd2FyZCB0byB0aGUgQ0NMYXllckltcGwuCiAgICAgTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKCkgY29uc3Q7CiAgICAgLy8gRW5kIGNhbGxz
IHRoYXQgZm9yd2FyZCB0byB0aGUgQ0NMYXllckltcGwuCkBAIC0yMTcsNiArMjE4LDExIEBAIHBy
b3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19wb3NpdGlvbkF0dHJpYkxvY2F0
aW9uOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3RleENvb3JkQXR0cmliTG9jYXRpb247
CiAKKyAgICAvLyBDb25zdHJ1Y3RzIGEgQ0NMYXllckltcGwgb2YgdGhlIGNvcnJlY3QgcnVudGlt
ZSB0eXBlIGZvciB0aGlzIExheWVyQ2hyb21pdW0gdHlwZS4KKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8Q0NMYXllckltcGw+IGNyZWF0ZUNDTGF5ZXJJbXBsKCk7CisKKyAgICAvLyBGb3Igbm93LCB0
aGUgTGF5ZXJDaHJvbWl1bSBkaXJlY3RseSBvd25zIGl0cyBDQ0xheWVySW1wbC4KKyAgICBSZWZQ
dHI8Q0NMYXllckltcGw+IG1fY2NMYXllckltcGw7CiBwcml2YXRlOgogICAgIHZvaWQgc2V0TmVl
ZHNDb21taXQoKTsKIApAQCAtMjM2LDYgKzI0Miw4IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFJl
ZlB0cjxMYXllckNocm9taXVtPiA+IG1fc3VibGF5ZXJzOwogICAgIExheWVyQ2hyb21pdW0qIG1f
c3VwZXJsYXllcjsKIAorICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJS
ZW5kZXJlcjsKKwogI2lmbmRlZiBOREVCVUcKICAgICBpbnQgbV9kZWJ1Z0lEOwogI2VuZGlmCkBA
IC0yNjAsOCArMjY4LDYgQEAgcHJpdmF0ZToKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3N1
YmxheWVyVHJhbnNmb3JtOwogCiAgICAgRmxvYXRSZWN0IG1fZnJhbWU7Ci0gICAgLy8gRm9yIG5v
dywgdGhlIExheWVyQ2hyb21pdW0gZGlyZWN0bHkgb3ducyBpdHMgQ0NMYXllckltcGwuCi0gICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiBtX2NjTGF5ZXJJbXBsOwogCiAgICAgLy8gUmVwbGljYSBsYXll
ciB1c2VkIGZvciByZWZsZWN0aW9ucy4KICAgICBMYXllckNocm9taXVtKiBtX3JlcGxpY2FMYXll
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDNlMzlkODdiNmVh
NDMzMmZkOTg2ZjBjMGQ5YzI3NGUzOGZlZDBlMzQuLjk0ZjAyZjYxYjNjM2EwMGJkMWJiNDQzOTg1
ZmQzZmU2ZWY0NjFkYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApA
QCAtMjc2LDYgKzI3Niw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmRE
cmF3TGF5ZXJzKCkKIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyhW
ZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKIHsKKyAgICBtX3Jv
b3RMYXllci0+Y3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgpOwogICAgIENDTGF5ZXJJbXBsKiBy
b290RHJhd0xheWVyID0gbV9yb290TGF5ZXItPmNjTGF5ZXJJbXBsKCk7CiAKICAgICBpZiAoIXJv
b3REcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKQEAgLTMwMiw3ICszMDMsOSBAQCB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKFZlY3RvcjxDQ0xheWVySW1wbCo+JiBy
ZW5kZXJTdXJmYWNlTGF5ZQogICAgIC8vIGNvbmNlcHQgb2YgYSBsYXJnZSBjb250ZW50IGxheWVy
LgogICAgIHVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhtX3Jvb3RMYXllci5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIG1fZGVmYXVsdFJlbmRl
clN1cmZhY2UtPm1fbGF5ZXJMaXN0KTsKIAotICAgIHVwZGF0ZUNvbnRlbnRzUmVjdXJzaXZlKG1f
cm9vdExheWVyLmdldCgpKTsKKyAgICBwYWludENvbnRlbnRzUmVjdXJzaXZlKG1fcm9vdExheWVy
LmdldCgpKTsKKworICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXNSZWN1cnNpdmUobV9yb290
TGF5ZXIuZ2V0KCkpOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
cyhjb25zdCBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKQEAg
LTQ2NSw5ICs0NjgsMjkgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmlzTGF5ZXJWaXNp
YmxlKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm0KIC8vIG5lY2Vzc2FyeSB0
cmFuc2Zvcm1hdGlvbnMsIHNjaXNzb3IgcmVjdGFuZ2xlcywgcmVuZGVyIHN1cmZhY2VzLCBldGMu
CiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1
cmZhY2VzKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
cGFyZW50TWF0cml4LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIGxheWVyTGlzdCkKIHsKKyAgICAvLyBNYWtlIHN1cmUg
d2UgaGF2ZSBDQ0xheWVySW1wbHMgZm9yIHRoaXMgc3VidHJlZS4KKyAgICBsYXllci0+Y3JlYXRl
Q0NMYXllckltcGxJZk5lZWRlZCgpOwogICAgIGxheWVyLT5zZXRMYXllclJlbmRlcmVyKHRoaXMp
OworICAgIGlmIChsYXllci0+bWFza0xheWVyKCkpIHsKKyAgICAgICAgbGF5ZXItPm1hc2tMYXll
cigpLT5jcmVhdGVDQ0xheWVySW1wbElmTmVlZGVkKCk7CisgICAgICAgIGxheWVyLT5tYXNrTGF5
ZXIoKS0+c2V0TGF5ZXJSZW5kZXJlcih0aGlzKTsKKyAgICB9CisgICAgaWYgKGxheWVyLT5yZXBs
aWNhTGF5ZXIoKSkgeworICAgICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPmNyZWF0ZUNDTGF5
ZXJJbXBsSWZOZWVkZWQoKTsKKyAgICAgICAgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5zZXRMYXll
clJlbmRlcmVyKHRoaXMpOworICAgIH0KKyAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpICYm
IGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkpIHsKKyAgICAgICAgbGF5ZXItPnJl
cGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+Y3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgpOwor
ICAgICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLT5zZXRMYXllclJlbmRl
cmVyKHRoaXMpOworICAgIH0KKwogICAgIENDTGF5ZXJJbXBsKiBkcmF3TGF5ZXIgPSBsYXllci0+
Y2NMYXllckltcGwoKTsKLSAgICBkcmF3TGF5ZXItPnVwZGF0ZUZyb21MYXllcihsYXllcik7Cisg
ICAgLy8gQ3VycmVudGx5IHdlJ3JlIGNhbGxpbmcgdXBkYXRlVG9MYXllcigpIHR3aWNlIC0gb25j
ZSBoZXJlIGFuZCBvbmNlIGluIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXNSZWN1cnNpdmUoKS4K
KyAgICAvLyBXZSBzaG91bGQgb25seSBjYWxsIHVwZGF0ZVRvTGF5ZXIoKSBpbiBjb21taXQsIGJ1
dCBiZWNhdXNlIHdlIHJlbHkgb24gdGhlIGRyYXcgbGF5ZXIgc3RhdGUgdG8gdXBkYXRlCisgICAg
Ly8gUmVuZGVyU3VyZmFjZXMgYW5kIHdlIHJlbHkgb24gUmVuZGVyU3VyZmFjZXMgYmVpbmcgdXAg
dG8gZGF0ZSBpbiBvcmRlciB0byBwYWludCBjb250ZW50cyB3ZSBoYXZlCisgICAgLy8gdG8gdXBk
YXRlIHRoZSBkcmF3IGxheWVycyB0d2ljZS4KKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgY2Fs
bCBvbmNlIGxheWVyIHVwZGF0ZXMgbm8gbG9uZ2VyIGRlcGVuZCBvbiByZW5kZXIgc3VyZmFjZXMu
CisgICAgbGF5ZXItPnVwZGF0ZVRvTGF5ZXIoZHJhd0xheWVyKTsKIAogICAgIC8vIENvbXB1dGUg
dGhlIG5ldyBtYXRyaXggdHJhbnNmb3JtYXRpb24gdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhp
cyBsYXllciBhbmQKICAgICAvLyBhbGwgaXRzIHN1YmxheWVycy4gSXQncyBpbXBvcnRhbnQgdG8g
cmVtZW1iZXIgdGhhdCB0aGUgbGF5ZXIncyBwb3NpdGlvbgpAQCAtNTIyLDggKzU0NSw3IEBAIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFj
ZXMoTGF5ZXJDaHJvbWl1bSogbGF5CiAgICAgYm9vbCB1c2VTdXJmYWNlRm9yT3BhY2l0eSA9IGRy
YXdMYXllci0+b3BhY2l0eSgpICE9IDEgJiYgIWRyYXdMYXllci0+cHJlc2VydmVzM0QoKTsKICAg
ICBib29sIHVzZVN1cmZhY2VGb3JNYXNraW5nID0gZHJhd0xheWVyLT5tYXNrTGF5ZXIoKTsKICAg
ICBib29sIHVzZVN1cmZhY2VGb3JSZWZsZWN0aW9uID0gZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIo
KTsKLSAgICBpZiAoKCh1c2VTdXJmYWNlRm9yQ2xpcHBpbmcgfHwgdXNlU3VyZmFjZUZvck9wYWNp
dHkpICYmIGRyYXdMYXllci0+ZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgfHwg
dXNlU3VyZmFjZUZvck1hc2tpbmcgfHwgdXNlU3VyZmFjZUZvclJlZmxlY3Rpb24pIHsKKyAgICBp
ZiAodXNlU3VyZmFjZUZvck1hc2tpbmcgfHwgdXNlU3VyZmFjZUZvclJlZmxlY3Rpb24gfHwgKCh1
c2VTdXJmYWNlRm9yQ2xpcHBpbmcgfHwgdXNlU3VyZmFjZUZvck9wYWNpdHkpICYmIGRyYXdMYXll
ci0+ZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQoKSkpIHsKICAgICAgICAgUmVuZGVyU3VyZmFjZUNo
cm9taXVtKiByZW5kZXJTdXJmYWNlID0gZHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCk7CiAgICAg
ICAgIGlmICghcmVuZGVyU3VyZmFjZSkKICAgICAgICAgICAgIHJlbmRlclN1cmZhY2UgPSBkcmF3
TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKQEAgLTU2MCwxNSArNTgyLDEyIEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMo
TGF5ZXJDaHJvbWl1bSogbGF5CiAKICAgICAgICAgaWYgKGRyYXdMYXllci0+bWFza0xheWVyKCkp
IHsKICAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fbWFza0xheWVyID0gZHJhd0xheWVyLT5t
YXNrTGF5ZXIoKTsKLSAgICAgICAgICAgIGRyYXdMYXllci0+bWFza0xheWVyKCktPnNldExheWVy
UmVuZGVyZXIodGhpcyk7CiAgICAgICAgICAgICBkcmF3TGF5ZXItPm1hc2tMYXllcigpLT5zZXRU
YXJnZXRSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UpOwogICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgIHJlbmRlclN1cmZhY2UtPm1fbWFza0xheWVyID0gMDsKIAotICAgICAgICBpZiAoZHJh
d0xheWVyLT5yZXBsaWNhTGF5ZXIoKSAmJiBkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNr
TGF5ZXIoKSkgewotICAgICAgICAgICAgZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xh
eWVyKCktPnNldExheWVyUmVuZGVyZXIodGhpcyk7CisgICAgICAgIGlmIChkcmF3TGF5ZXItPnJl
cGxpY2FMYXllcigpICYmIGRyYXdMYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpKQog
ICAgICAgICAgICAgZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPnNldFRh
cmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSk7Ci0gICAgICAgIH0KIAogICAgICAgICBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChkcmF3TGF5ZXIpOwogICAgIH0gZWxzZSB7CkBA
IC02MzksNiArNjU4LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3Bl
cnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhMYXllckNocm9taXVtKiBsYXkKIAogICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJzID0gbGF5ZXItPmdldFN1Ymxh
eWVycygpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIHN1YmxheWVyc1tpXS0+Y3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgpOwog
ICAgICAgICBDQ0xheWVySW1wbCogc3VibGF5ZXIgPSBzdWJsYXllcnNbaV0tPmNjTGF5ZXJJbXBs
KCk7CiAgICAgICAgIHVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhzdWJsYXllcnNb
aV0uZ2V0KCksIHN1YmxheWVyTWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkZXNjZW5k
YW50cyk7CiAKQEAgLTcyMSwyMyArNzQxLDQ2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1bSogbGF5CiAg
ICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQoJmRlc2NlbmRhbnRzLmF0KHRoaXNMYXllckluZGV4KSwg
ZGVzY2VuZGFudHMuZW5kKCksIGNvbXBhcmVMYXllclopOwogfQogCi12b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIp
Cit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c1JlY3Vyc2l2ZShMYXll
ckNocm9taXVtKiBsYXllcikKIHsKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21p
dW0+ID4mIHN1YmxheWVycyA9IGxheWVyLT5nZXRTdWJsYXllcnMoKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7ICsraSkKLSAgICAgICAgdXBkYXRlQ29udGVu
dHNSZWN1cnNpdmUoc3VibGF5ZXJzW2ldLmdldCgpKTsKKyAgICAgICAgcGFpbnRDb250ZW50c1Jl
Y3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCkpOwogCiAgICAgaWYgKGxheWVyLT5ib3VuZHMoKS5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChsYXllci0+ZHJhd3NDb250ZW50
KCkpCi0gICAgICAgIGxheWVyLT51cGRhdGVDb250ZW50c0lmRGlydHkoKTsKKyAgICAgICAgbGF5
ZXItPnBhaW50Q29udGVudHNJZkRpcnR5KCk7CiAgICAgaWYgKGxheWVyLT5tYXNrTGF5ZXIoKSAm
JiBsYXllci0+bWFza0xheWVyKCktPmRyYXdzQ29udGVudCgpKQotICAgICAgICBsYXllci0+bWFz
a0xheWVyKCktPnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpOworICAgICAgICBsYXllci0+bWFza0xh
eWVyKCktPnBhaW50Q29udGVudHNJZkRpcnR5KCk7CiAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5
ZXIoKSAmJiBsYXllci0+cmVwbGljYUxheWVyKCktPmRyYXdzQ29udGVudCgpKQotICAgICAgICBs
YXllci0+cmVwbGljYUxheWVyKCktPnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpOworICAgICAgICBs
YXllci0+cmVwbGljYUxheWVyKCktPnBhaW50Q29udGVudHNJZkRpcnR5KCk7CiAgICAgaWYgKGxh
eWVyLT5yZXBsaWNhTGF5ZXIoKSAmJiBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigp
ICYmIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPmRyYXdzQ29udGVudCgpKQot
ICAgICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLT51cGRhdGVDb250ZW50
c0lmRGlydHkoKTsKKyAgICAgICAgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+
cGFpbnRDb250ZW50c0lmRGlydHkoKTsKK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIp
Cit7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJsYXllcnMg
PSBsYXllci0+Z2V0U3VibGF5ZXJzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJs
YXllcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXNSZWN1
cnNpdmUoc3VibGF5ZXJzW2ldLmdldCgpKTsKKworICAgIGlmIChsYXllci0+Ym91bmRzKCkuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDQ0xheWVySW1wbCogZHJhd0xheWVyID0g
bGF5ZXItPmNjTGF5ZXJJbXBsKCk7CisKKyAgICBpZiAoZHJhd0xheWVyLT5kcmF3c0NvbnRlbnQo
KSkKKyAgICAgICAgZHJhd0xheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCk7CisgICAg
aWYgKGRyYXdMYXllci0+bWFza0xheWVyKCkgJiYgZHJhd0xheWVyLT5tYXNrTGF5ZXIoKS0+ZHJh
d3NDb250ZW50KCkpCisgICAgICAgIGRyYXdMYXllci0+bWFza0xheWVyKCktPnVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMoKTsKKyAgICBpZiAoZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKSAmJiBk
cmF3TGF5ZXItPnJlcGxpY2FMYXllcigpLT5kcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgZHJhd0xh
eWVyLT5yZXBsaWNhTGF5ZXIoKS0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOworICAgIGlm
IChkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigpICYmIGRyYXdMYXllci0+cmVwbGljYUxheWVyKCkt
Pm1hc2tMYXllcigpICYmIGRyYXdMYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLT5k
cmF3c0NvbnRlbnQoKSkKKyAgICAgICAgZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xh
eWVyKCktPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKKworICAgIGxheWVyLT51cGRhdGVU
b0xheWVyKGRyYXdMYXllcik7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRD
b21wb3NpdGVPZmZzY3JlZW4oYm9vbCBjb21wb3NpdGVPZmZzY3JlZW4pCkBAIC04MTEsMTYgKzg1
NCwyMCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKENDTGF5ZXJJbXBs
KiBsYXllciwgUmVuZGVyU3VyZmFjZUNocm9taXVtKgogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaWYgKGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpCisgICAgaWYgKGxheWVyLT5ib3Vu
ZHMoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbGF5ZXItPnVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVy
ZSgpOwogICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgc2V0U2Npc3NvclRvUmVjdChsYXll
ci0+c2Npc3NvclJlY3QoKSk7CiAKICAgICAvLyBDaGVjayBpZiB0aGUgbGF5ZXIgZmFsbHMgd2l0
aGluIHRoZSB2aXNpYmxlIGJvdW5kcyBvZiB0aGUgcGFnZS4KICAgICBJbnRSZWN0IGxheWVyUmVj
dCA9IGxheWVyLT5nZXREcmF3UmVjdCgpOwogICAgIGJvb2wgaXNMYXllclZpc2libGUgPSBsYXll
ci0+c2Npc3NvclJlY3QoKS5pbnRlcnNlY3RzKGxheWVyUmVjdCk7Ci0gICAgaWYgKCFpc0xheWVy
VmlzaWJsZSkKKyAgICBpZiAoIWlzTGF5ZXJWaXNpYmxlKSB7CisgICAgICAgIGxheWVyLT51bnJl
c2VydmVDb250ZW50c1RleHR1cmUoKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8v
IEZJWE1FOiBOZWVkIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSBjb21tdWxhdGl2ZSByZW5kZXIg
c3VyZmFjZSB0cmFuc2Zvcm1zIGFsbCB0aGUgd2F5IGZyb20KICAgICAvLyAgICAgICAgdGhlIGRl
ZmF1bHQgcmVuZGVyIHN1cmZhY2UgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHZpc2liaWxpdHkuCkBA
IC04MzQsOCArODgxLDEwIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIo
Q0NMYXllckltcGwqIGxheWVyLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qCiAgICAgICAgIEZsb2F0
UG9pbnQzRCB4QXhpcyhob3Jpem9udGFsRGlyLndpZHRoKCksIGhvcml6b250YWxEaXIuaGVpZ2h0
KCksIDApOwogICAgICAgICBGbG9hdFBvaW50M0QgeUF4aXModmVydGljYWxEaXIud2lkdGgoKSwg
dmVydGljYWxEaXIuaGVpZ2h0KCksIDApOwogICAgICAgICBGbG9hdFBvaW50M0QgekF4aXMgPSB4
QXhpcy5jcm9zcyh5QXhpcyk7Ci0gICAgICAgIGlmICh6QXhpcy56KCkgPCAwKQorICAgICAgICBp
ZiAoekF4aXMueigpIDwgMCkgeworICAgICAgICAgICAgbGF5ZXItPnVucmVzZXJ2ZUNvbnRlbnRz
VGV4dHVyZSgpOwogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQogCiAgICAg
aWYgKGxheWVyLT5kcmF3c0NvbnRlbnQoKSkKQEAgLTkxMywxMCArOTYyLDEwIEBAIGJvb2wgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cygpCiAgICAgbV9zaGFy
ZWRHZW9tZXRyeSA9IGFkb3B0UHRyKG5ldyBHZW9tZXRyeUJpbmRpbmcobV9jb250ZXh0LmdldCgp
KSk7CiAgICAgbV9ib3JkZXJQcm9ncmFtID0gYWRvcHRQdHIobmV3IExheWVyQ2hyb21pdW06OkJv
cmRlclByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7CiAgICAgbV9jb250ZW50TGF5ZXJQcm9ncmFt
ID0gYWRvcHRQdHIobmV3IENvbnRlbnRMYXllckNocm9taXVtOjpQcm9ncmFtKG1fY29udGV4dC5n
ZXQoKSkpOwotICAgIG1fY2FudmFzTGF5ZXJQcm9ncmFtID0gYWRvcHRQdHIobmV3IENhbnZhc0xh
eWVyQ2hyb21pdW06OlByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7Ci0gICAgbV92aWRlb0xheWVy
UkdCQVByb2dyYW0gPSBhZG9wdFB0cihuZXcgVmlkZW9MYXllckNocm9taXVtOjpSR0JBUHJvZ3Jh
bShtX2NvbnRleHQuZ2V0KCkpKTsKLSAgICBtX3ZpZGVvTGF5ZXJZVVZQcm9ncmFtID0gYWRvcHRQ
dHIobmV3IFZpZGVvTGF5ZXJDaHJvbWl1bTo6WVVWUHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsK
LSAgICBtX3BsdWdpbkxheWVyUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBQbHVnaW5MYXllckNocm9t
aXVtOjpQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOworICAgIG1fY2FudmFzTGF5ZXJQcm9ncmFt
ID0gYWRvcHRQdHIobmV3IENDQ2FudmFzTGF5ZXJJbXBsOjpQcm9ncmFtKG1fY29udGV4dC5nZXQo
KSkpOworICAgIG1fdmlkZW9MYXllclJHQkFQcm9ncmFtID0gYWRvcHRQdHIobmV3IENDVmlkZW9M
YXllckltcGw6OlJHQkFQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOworICAgIG1fdmlkZW9MYXll
cllVVlByb2dyYW0gPSBhZG9wdFB0cihuZXcgQ0NWaWRlb0xheWVySW1wbDo6WVVWUHJvZ3JhbSht
X2NvbnRleHQuZ2V0KCkpKTsKKyAgICBtX3BsdWdpbkxheWVyUHJvZ3JhbSA9IGFkb3B0UHRyKG5l
dyBDQ1BsdWdpbkxheWVySW1wbDo6UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKICAgICBtX3Jl
bmRlclN1cmZhY2VQcm9ncmFtID0gYWRvcHRQdHIobmV3IFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6
UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKICAgICBtX3JlbmRlclN1cmZhY2VNYXNrUHJvZ3Jh
bSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJTdXJmYWNlQ2hyb21pdW06Ok1hc2tQcm9ncmFtKG1fY29u
dGV4dC5nZXQoKSkpOwogICAgIG1fdGlsZXJQcm9ncmFtID0gYWRvcHRQdHIobmV3IExheWVyVGls
ZXJDaHJvbWl1bTo6UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgKaW5kZXggNzAzN2QwNDNiMWZmZTUwYTRiMzY1MGE5M2RmOWRiNzg1ZmFj
YmQ0Ni4uNjY3ZWRlMjM5MjQxZGFiOTkxNzQ0NWJiODJlODFlYzMyYTlhNGJjNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTM0LDE2ICszNCwxNyBAQAogCiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCi0jaW5jbHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1
bS5oIgogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiSW50UmVj
dC5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclRpbGVyQ2hy
b21pdW0uaCIKLSNpbmNsdWRlICJQbHVnaW5MYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU3VyZmFjZUNocm9taXVtLmgiCiAjaW5jbHVkZSAiU2tCaXRtYXAuaCIKICNpbmNsdWRlICJW
aWRlb0xheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0NhbnZhc0xheWVySW1wbC5oIgog
I2luY2x1ZGUgImNjL0NDSGVhZHNVcERpc3BsYXkuaCIKKyNpbmNsdWRlICJjYy9DQ1BsdWdpbkxh
eWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDVmlkZW9MYXllckltcGwuaCIKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CkBAIC0xMTAsMTMgKzExMSwxMyBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
R2VvbWV0cnlCaW5kaW5nKiBzaGFyZWRHZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVk
R2VvbWV0cnkuZ2V0KCk7IH0KICAgICBjb25zdCBMYXllckNocm9taXVtOjpCb3JkZXJQcm9ncmFt
KiBib3JkZXJQcm9ncmFtKCkgY29uc3QgeyByZXR1cm4gbV9ib3JkZXJQcm9ncmFtLmdldCgpOyB9
CiAgICAgY29uc3QgQ29udGVudExheWVyQ2hyb21pdW06OlByb2dyYW0qIGNvbnRlbnRMYXllclBy
b2dyYW0oKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRMYXllclByb2dyYW0uZ2V0KCk7IH0KLSAg
ICBjb25zdCBDYW52YXNMYXllckNocm9taXVtOjpQcm9ncmFtKiBjYW52YXNMYXllclByb2dyYW0o
KSBjb25zdCB7IHJldHVybiBtX2NhbnZhc0xheWVyUHJvZ3JhbS5nZXQoKTsgfQotICAgIGNvbnN0
IFZpZGVvTGF5ZXJDaHJvbWl1bTo6UkdCQVByb2dyYW0qIHZpZGVvTGF5ZXJSR0JBUHJvZ3JhbSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9MYXllclJHQkFQcm9ncmFtLmdldCgpOyB9Ci0gICAgY29u
c3QgVmlkZW9MYXllckNocm9taXVtOjpZVVZQcm9ncmFtKiB2aWRlb0xheWVyWVVWUHJvZ3JhbSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9MYXllcllVVlByb2dyYW0uZ2V0KCk7IH0KLSAgICBjb25z
dCBQbHVnaW5MYXllckNocm9taXVtOjpQcm9ncmFtKiBwbHVnaW5MYXllclByb2dyYW0oKSBjb25z
dCB7IHJldHVybiBtX3BsdWdpbkxheWVyUHJvZ3JhbS5nZXQoKTsgfQogICAgIGNvbnN0IFJlbmRl
clN1cmZhY2VDaHJvbWl1bTo6UHJvZ3JhbSogcmVuZGVyU3VyZmFjZVByb2dyYW0oKSBjb25zdCB7
IHJldHVybiBtX3JlbmRlclN1cmZhY2VQcm9ncmFtLmdldCgpOyB9CiAgICAgY29uc3QgUmVuZGVy
U3VyZmFjZUNocm9taXVtOjpNYXNrUHJvZ3JhbSogcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKCkg
Y29uc3QgeyByZXR1cm4gbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0uZ2V0KCk7IH0KICAgICBj
b25zdCBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW0qIHRpbGVyUHJvZ3JhbSgpIGNvbnN0IHsg
cmV0dXJuIG1fdGlsZXJQcm9ncmFtLmdldCgpOyB9CisgICAgY29uc3QgQ0NDYW52YXNMYXllcklt
cGw6OlByb2dyYW0qIGNhbnZhc0xheWVyUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FudmFz
TGF5ZXJQcm9ncmFtLmdldCgpOyB9CisgICAgY29uc3QgQ0NQbHVnaW5MYXllckltcGw6OlByb2dy
YW0qIHBsdWdpbkxheWVyUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luTGF5ZXJQcm9n
cmFtLmdldCgpOyB9CisgICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6UkdCQVByb2dyYW0qIHZp
ZGVvTGF5ZXJSR0JBUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9MYXllclJHQkFQcm9n
cmFtLmdldCgpOyB9CisgICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6WVVWUHJvZ3JhbSogdmlk
ZW9MYXllcllVVlByb2dyYW0oKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvTGF5ZXJZVVZQcm9ncmFt
LmdldCgpOyB9CiAKICAgICB2b2lkIHJlc2l6ZU9uc2NyZWVuQ29udGVudChjb25zdCBJbnRTaXpl
Jik7CiAKQEAgLTEzNyw3ICsxMzgsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlUm9vdExh
eWVyQ29udGVudHMoKTsKICAgICB2b2lkIHVwZGF0ZVJvb3RMYXllclNjcm9sbGJhcnMoKTsKICAg
ICB2b2lkIHVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhMYXllckNocm9taXVtKiwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgVmVjdG9yPENDTGF5ZXJJ
bXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiBsYXll
ckxpc3QpOwotICAgIHZvaWQgdXBkYXRlQ29udGVudHNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSop
OworICAgIHZvaWQgcGFpbnRDb250ZW50c1JlY3Vyc2l2ZShMYXllckNocm9taXVtKik7CisgICAg
dm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qKTsK
IAogICAgIHZvaWQgZHJhd0xheWVycyhjb25zdCBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCk7CiAgICAgdm9pZCBkcmF3TGF5ZXIoQ0NMYXllckltcGwqLCBSZW5k
ZXJTdXJmYWNlQ2hyb21pdW0qKTsKQEAgLTIwNSwxMyArMjA3LDEzIEBAIHByaXZhdGU6CiAgICAg
T3duUHRyPEdlb21ldHJ5QmluZGluZz4gbV9zaGFyZWRHZW9tZXRyeTsKICAgICBPd25QdHI8TGF5
ZXJDaHJvbWl1bTo6Qm9yZGVyUHJvZ3JhbT4gbV9ib3JkZXJQcm9ncmFtOwogICAgIE93blB0cjxD
b250ZW50TGF5ZXJDaHJvbWl1bTo6UHJvZ3JhbT4gbV9jb250ZW50TGF5ZXJQcm9ncmFtOwotICAg
IE93blB0cjxDYW52YXNMYXllckNocm9taXVtOjpQcm9ncmFtPiBtX2NhbnZhc0xheWVyUHJvZ3Jh
bTsKLSAgICBPd25QdHI8VmlkZW9MYXllckNocm9taXVtOjpSR0JBUHJvZ3JhbT4gbV92aWRlb0xh
eWVyUkdCQVByb2dyYW07Ci0gICAgT3duUHRyPFZpZGVvTGF5ZXJDaHJvbWl1bTo6WVVWUHJvZ3Jh
bT4gbV92aWRlb0xheWVyWVVWUHJvZ3JhbTsKLSAgICBPd25QdHI8UGx1Z2luTGF5ZXJDaHJvbWl1
bTo6UHJvZ3JhbT4gbV9wbHVnaW5MYXllclByb2dyYW07CiAgICAgT3duUHRyPFJlbmRlclN1cmZh
Y2VDaHJvbWl1bTo6UHJvZ3JhbT4gbV9yZW5kZXJTdXJmYWNlUHJvZ3JhbTsKICAgICBPd25QdHI8
UmVuZGVyU3VyZmFjZUNocm9taXVtOjpNYXNrUHJvZ3JhbT4gbV9yZW5kZXJTdXJmYWNlTWFza1By
b2dyYW07CiAgICAgT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbT4gbV90aWxlclBy
b2dyYW07CisgICAgT3duUHRyPENDQ2FudmFzTGF5ZXJJbXBsOjpQcm9ncmFtPiBtX2NhbnZhc0xh
eWVyUHJvZ3JhbTsKKyAgICBPd25QdHI8Q0NWaWRlb0xheWVySW1wbDo6UkdCQVByb2dyYW0+IG1f
dmlkZW9MYXllclJHQkFQcm9ncmFtOworICAgIE93blB0cjxDQ1ZpZGVvTGF5ZXJJbXBsOjpZVVZQ
cm9ncmFtPiBtX3ZpZGVvTGF5ZXJZVVZQcm9ncmFtOworICAgIE93blB0cjxDQ1BsdWdpbkxheWVy
SW1wbDo6UHJvZ3JhbT4gbV9wbHVnaW5MYXllclByb2dyYW07CiAKICAgICBPd25QdHI8VGV4dHVy
ZU1hbmFnZXI+IG1fdGV4dHVyZU1hbmFnZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1
bS5jcHAKaW5kZXggMDAxNzRhYTZlMDk5ZGQ4NTRhYThkNDEwMDY0ZTM1NDc5ZTdiY2IwMC4uYmU5
MjhkY2U0MmM4MTA0NjE5ZTY4MWQ4NjU5ZjhmMDViZjE0NmUzYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2lu
TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTI5LDEwICsyOSwxMCBAQAogCiAjaW5jbHVkZSAiUGx1Z2lu
TGF5ZXJDaHJvbWl1bS5oIgogCi0jaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5o
IgotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisj
aW5jbHVkZSAiY2MvQ0NQbHVnaW5MYXllckltcGwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC00NywzNyArNDcsMjIgQEAgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6UGx1Z2luTGF5ZXJDaHJv
bWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQogewogfQogCi12b2lkIFBsdWdpbkxh
eWVyQ2hyb21pdW06OnNldFRleHR1cmVJZCh1bnNpZ25lZCBpZCkKK1Bhc3NSZWZQdHI8Q0NMYXll
ckltcGw+IFBsdWdpbkxheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkKIHsKLSAgICBt
X3RleHR1cmVJZCA9IGlkOworICAgIHJldHVybiBDQ1BsdWdpbkxheWVySW1wbDo6Y3JlYXRlKHRo
aXMpOwogfQogCi12b2lkIFBsdWdpbkxheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0
eSgpCit2b2lkIFBsdWdpbkxheWVyQ2hyb21pdW06OnNldFRleHR1cmVJZCh1bnNpZ25lZCBpZCkK
IHsKKyAgICBtX3RleHR1cmVJZCA9IGlkOwogfQogCi12b2lkIFBsdWdpbkxheWVyQ2hyb21pdW06
OmRyYXcoKQordm9pZCBQbHVnaW5MYXllckNocm9taXVtOjp1cGRhdGVUb0xheWVyKENDTGF5ZXJJ
bXBsKiBsYXllcikKIHsKLSAgICBBU1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKLSAgICBjb25zdCBQ
bHVnaW5MYXllckNocm9taXVtOjpQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlcigpLT5w
bHVnaW5MYXllclByb2dyYW0oKTsKLSAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0
aWFsaXplZCgpKTsKLSAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVy
ZXJDb250ZXh0KCk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR0xf
VEVYVFVSRTApKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR0xfVEVY
VFVSRV8yRCwgbV90ZXh0dXJlSWQpKTsKLSAgICAKLSAgICAvLyBGSVhNRTogc2V0dGluZyB0aGUg
dGV4dHVyZSBwYXJhbWV0ZXJzIGV2ZXJ5IHRpbWUgaXMgcmVkdW5kYW50LiBNb3ZlIHRoaXMgY29k
ZSBzb21ld2hlcmUKLSAgICAvLyB3aGVyZSBpdCB3aWxsIG9ubHkgaGFwcGVuIG9uY2UgcGVyIHRl
eHR1cmUuCi0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpKTsKLSAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19G
SUxURVIsIEdMX0xJTkVBUikpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0
ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKSk7
Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwg
R0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpKTsKLSAgICAKLSAgICBsYXllclJl
bmRlcmVyKCktPnVzZVNoYWRlcihwcm9ncmFtLT5wcm9ncmFtKCkpOwotICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9j
YXRpb24oKSwgMCkpOwotICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJl
cigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGNjTGF5ZXJJbXBsKCktPmRyYXdUcmFuc2Zvcm0oKSwK
LSAgICAgICAgICAgICAgICAgICAgIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgp
LCBjY0xheWVySW1wbCgpLT5kcmF3T3BhY2l0eSgpLAotICAgICAgICAgICAgICAgICAgICAgcHJv
Z3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwKLSAgICAgICAgICAgICAgICAg
ICAgIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpKTsKKyAgICBMYXll
ckNocm9taXVtOjp1cGRhdGVUb0xheWVyKGxheWVyKTsKKworICAgIENDUGx1Z2luTGF5ZXJJbXBs
KiBwbHVnaW5MYXllciA9IHN0YXRpY19jYXN0PENDUGx1Z2luTGF5ZXJJbXBsKj4obGF5ZXIpOwor
ICAgIHBsdWdpbkxheWVyLT5zZXRUZXh0dXJlSWQobV90ZXh0dXJlSWQpOwogfQogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5M
YXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9QbHVnaW5MYXllckNocm9taXVtLmgKaW5kZXggYmJmNDUzNzY3NWExMThhN2RiNzlhMjlkZjAy
MTdlZWY1N2Y2ZDk2ZS4uMWYxZjU4MjEyMjQ0ZTYwZWJkM2Y0ODk1MWYxMzk3MjZiOGVlZTQ1YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1
Z2luTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uaApAQCAtMzgsMTkgKzM4LDE5IEBAIGNsYXNz
IFBsdWdpbkxheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8UGx1Z2luTGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bSogb3duZXIgPSAwKTsKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50
c0lmRGlydHkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhdygpOwogCi0gICAgdW5zaWduZWQgdGV4
dHVyZUlkKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlSWQ7IH0KKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZUNDTGF5ZXJJbXBsKCk7CisKICAgICB2b2lkIHNldFRl
eHR1cmVJZCh1bnNpZ25lZCB0ZXh0dXJlSWQpOworICAgIHVuc2lnbmVkIHRleHR1cmVJZCgpIGNv
bnN0IHsgcmV0dXJuIG1fdGV4dHVyZUlkOyB9CiAKLSAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5n
PFZlcnRleFNoYWRlclBvc1RleCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4RmxpcEFscGhhPiBQcm9n
cmFtOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUb0xheWVyKENDTGF5ZXJJbXBsKik7CiAKIHBy
b3RlY3RlZDoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gIlBsdWdpbkxheWVyIjsgfQogCiBwcml2YXRlOgotICAgIFBsdWdpbkxheWVy
Q2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CisgICAgZXhwbGljaXQgUGx1
Z2luTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKICAgICB1bnNp
Z25lZCBtX3RleHR1cmVJZDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCmlu
ZGV4IGQ5NzA0ZmE4MDk3Mzg4OTY3ZmVjZjBhMTc1NjVjOTNkODJlNTJkZjEuLmZkYWExY2I5MjEw
YjUwNTUzNTEwNGNlZTBjOTg3ZGJhYzY5ODZkZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9t
aXVtLmNwcApAQCAtMzMsNyArMzMsNiBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKICNpbmNsdWRlICJWaWRlb0xheWVyQ2hyb21pdW0uaCIKIAotI2luY2x1ZGUgImNjL0NDTGF5
ZXJJbXBsLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgpA
QCAtNDEsMzEgKzQwLDExIEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5j
bHVkZSAiVmlkZW9GcmFtZUNocm9taXVtLmgiCiAjaW5jbHVkZSAiVmlkZW9GcmFtZVByb3ZpZGVy
LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1ZpZGVvTGF5
ZXJJbXBsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gVGhlc2UgdmFsdWVzIGFyZSBt
YWdpYyBudW1iZXJzIHRoYXQgYXJlIHVzZWQgaW4gdGhlIHRyYW5zZm9ybWF0aW9uCi0vLyBmcm9t
IFlVViB0byBSR0IgY29sb3IgdmFsdWVzLgotLy8gVGhleSBhcmUgdGFrZW4gZnJvbSB0aGUgZm9s
bG93aW5nIHdlYnBhZ2U6Ci0vLyBodHRwOi8vd3d3LmZvdXJjYy5vcmcvZmNjeXZyZ2IucGhwCi1j
b25zdCBmbG9hdCBWaWRlb0xheWVyQ2hyb21pdW06Onl1djJSR0JbOV0gPSB7Ci0gICAgMS4xNjRm
LCAxLjE2NGYsIDEuMTY0ZiwKLSAgICAwLmYsIC0uMzkxZiwgMi4wMThmLAotICAgIDEuNTk2Ziwg
LS44MTNmLCAwLmYsCi19OwotCi0vLyBUaGVzZSB2YWx1ZXMgbWFwIHRvIDE2LCAxMjgsIGFuZCAx
MjggcmVzcGVjdGl2ZWx5LCBhbmQgYXJlIGNvbXB1dGVkCi0vLyBhcyBhIGZyYWN0aW9uIG92ZXIg
MjU2IChlLmcuIDE2IC8gMjU2ID0gMC4wNjI1KS4KLS8vIFRoZXkgYXJlIHVzZWQgaW4gdGhlIFlV
ViB0byBSR0JBIGNvbnZlcnNpb24gZm9ybXVsYToKLS8vICAgWSAtIDE2ICAgOiBHaXZlcyAxNiB2
YWx1ZXMgb2YgaGVhZCBhbmQgZm9vdHJvb20gZm9yIG92ZXJzaG9vdGluZwotLy8gICBVIC0gMTI4
ICA6IFR1cm5zIHVuc2lnbmVkIFUgaW50byBzaWduZWQgVSBbLTEyOCwxMjddCi0vLyAgIFYgLSAx
MjggIDogVHVybnMgdW5zaWduZWQgViBpbnRvIHNpZ25lZCBWIFstMTI4LDEyN10KLWNvbnN0IGZs
b2F0IFZpZGVvTGF5ZXJDaHJvbWl1bTo6eXV2QWRqdXN0WzNdID0gewotICAgIC0wLjA2MjVmLAot
ICAgIC0wLjVmLAotICAgIC0wLjVmLAotfTsKLQogUGFzc1JlZlB0cjxWaWRlb0xheWVyQ2hyb21p
dW0+IFZpZGVvTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3du
ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVmlkZW9GcmFtZVByb3ZpZGVyKiBwcm92aWRlcikKIHsKQEAgLTg4LDYgKzY3LDExIEBA
IFZpZGVvTGF5ZXJDaHJvbWl1bTo6flZpZGVvTGF5ZXJDaHJvbWl1bSgpCiAgICAgZGVsZXRlVGV4
dHVyZXNJblVzZSgpOwogfQogCitQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBWaWRlb0xheWVyQ2hy
b21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkKK3sKKyAgICByZXR1cm4gQ0NWaWRlb0xheWVySW1w
bDo6Y3JlYXRlKHRoaXMpOworfQorCiB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6ZGVsZXRlVGV4
dHVyZXNJblVzZSgpCiB7CiAgICAgaWYgKCFsYXllclJlbmRlcmVyKCkpCkBAIC0xMTAsNyArOTQs
NyBAQCB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpCiAgICAgICAg
IHJlc2V0RnJhbWVQYXJhbWV0ZXJzKCk7CiB9CiAKLXZvaWQgVmlkZW9MYXllckNocm9taXVtOjp1
cGRhdGVDb250ZW50c0lmRGlydHkoKQordm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNv
bXBvc2l0b3JSZXNvdXJjZXMoKQogewogICAgIGlmICghbV9jb250ZW50c0RpcnR5KQogICAgICAg
ICByZXR1cm47CkBAIC0xNzMsNiArMTU3LDE4IEBAIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjp1
cGRhdGVDb250ZW50c0lmRGlydHkoKQogICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShm
cmFtZSk7CiB9CiAKK3ZvaWQgVmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVUb0xheWVyKENDTGF5
ZXJJbXBsKiBsYXllcikKK3sKKyAgICBMYXllckNocm9taXVtOjp1cGRhdGVUb0xheWVyKGxheWVy
KTsKKworICAgIENDVmlkZW9MYXllckltcGwqIHZpZGVvTGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ1Zp
ZGVvTGF5ZXJJbXBsKj4obGF5ZXIpOworICAgIHZpZGVvTGF5ZXItPnNldFNraXBzRHJhdyhtX3Nr
aXBzRHJhdyk7CisgICAgdmlkZW9MYXllci0+c2V0RnJhbWVGb3JtYXQobV9mcmFtZUZvcm1hdCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCisgICAgICAgIHZpZGVvTGF5ZXIt
PnNldFRleHR1cmUoaSwgbV90ZXh0dXJlc1tpXSk7Cit9CisKKwogdW5zaWduZWQgVmlkZW9MYXll
ckNocm9taXVtOjpkZXRlcm1pbmVUZXh0dXJlRm9ybWF0KGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1
bSogZnJhbWUpCiB7CiAgICAgc3dpdGNoIChmcmFtZS0+Zm9ybWF0KCkpIHsKQEAgLTI2NCwzMyAr
MjYwLDYgQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHRleHQKICAgICB9CiB9CiAKLXZvaWQgVmlkZW9M
YXllckNocm9taXVtOjpkcmF3KCkKLXsKLSAgICBpZiAobV9za2lwc0RyYXcpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOwotICAgIGNvbnN0IFJHQkFQcm9n
cmFtKiByZ2JhUHJvZ3JhbSA9IGxheWVyUmVuZGVyZXIoKS0+dmlkZW9MYXllclJHQkFQcm9ncmFt
KCk7Ci0gICAgQVNTRVJUKHJnYmFQcm9ncmFtICYmIHJnYmFQcm9ncmFtLT5pbml0aWFsaXplZCgp
KTsKLSAgICBjb25zdCBZVVZQcm9ncmFtKiB5dXZQcm9ncmFtID0gbGF5ZXJSZW5kZXJlcigpLT52
aWRlb0xheWVyWVVWUHJvZ3JhbSgpOwotICAgIEFTU0VSVCh5dXZQcm9ncmFtICYmIHl1dlByb2dy
YW0tPmluaXRpYWxpemVkKCkpOwotCi0gICAgc3dpdGNoIChtX2ZyYW1lRm9ybWF0KSB7Ci0gICAg
Y2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OllWMTI6Ci0gICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21p
dW06OllWMTY6Ci0gICAgICAgIGRyYXdZVVYoeXV2UHJvZ3JhbSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpSR0JBOgotICAgICAgICBkcmF3UkdCQShyZ2Jh
UHJvZ3JhbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgb3RoZXIgcGF0aHMuCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICByZWxlYXNlQ3VycmVudEZyYW1lKCk7Ci19Ci0KIHZvaWQg
VmlkZW9MYXllckNocm9taXVtOjpyZWxlYXNlQ3VycmVudEZyYW1lKCkKIHsKICAgICBpZiAoIW1f
Y3VycmVudEZyYW1lKQpAQCAtMzAxLDY0ICsyNzAsNiBAQCB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1
bTo6cmVsZWFzZUN1cnJlbnRGcmFtZSgpCiAgICAgcmVzZXRGcmFtZVBhcmFtZXRlcnMoKTsKIH0K
IAotdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OmRyYXdZVVYoY29uc3QgVmlkZW9MYXllckNocm9t
aXVtOjpZVVZQcm9ncmFtKiBwcm9ncmFtKSBjb25zdAotewotICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKLSAgICBUZXh0dXJlIHlUZXh0dXJl
ID0gbV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnlQbGFuZV07Ci0gICAgVGV4dHVyZSB1
VGV4dHVyZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjp1UGxhbmVdOwotICAgIFRl
eHR1cmUgdlRleHR1cmUgPSBtX3RleHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6dlBsYW5lXTsK
LQotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFMSkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgeVRleHR1cmUuaWQpKTsKLSAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTIp
KTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIHVUZXh0dXJlLmlkKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUzKSk7Ci0gICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCB2VGV4dHVyZS5pZCkpOwotCi0gICAgbGF5ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIocHJvZ3Jh
bS0+cHJvZ3JhbSgpKTsKLQotICAgIGZsb2F0IHlXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHlUZXh0dXJlLnZpc2libGVTaXplLndpZHRoKCkpIC8geVRleHR1cmUuc2l6ZS53
aWR0aCgpOwotICAgIC8vIEFyYml0cmFyaWx5IHRha2UgdGhlIHUgc2l6ZXMgYmVjYXVzZSB1IGFu
ZCB2IGRpbWVuc2lvbnMgYXJlIGlkZW50aWNhbC4KLSAgICBmbG9hdCB1dldpZHRoU2NhbGVGYWN0
b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4odVRleHR1cmUudmlzaWJsZVNpemUud2lkdGgoKSkgLyB1
VGV4dHVyZS5zaXplLndpZHRoKCk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0x
Zihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS55V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKCksIHlX
aWR0aFNjYWxlRmFjdG9yKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xZihw
cm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS51dldpZHRoU2NhbGVGYWN0b3JMb2NhdGlvbigpLCB1dldp
ZHRoU2NhbGVGYWN0b3IpKTsKLQotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWko
cHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS55VGV4dHVyZUxvY2F0aW9uKCksIDEpKTsKLSAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCku
dVRleHR1cmVMb2NhdGlvbigpLCAyKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZv
cm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnZUZXh0dXJlTG9jYXRpb24oKSwgMykpOwot
Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYocHJvZ3JhbS0+ZnJh
Z21lbnRTaGFkZXIoKS5jY01hdHJpeExvY2F0aW9uKCksIDAsIGNvbnN0X2Nhc3Q8ZmxvYXQqPih5
dXYyUkdCKSwgMSkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtM2Z2KHByb2dy
YW0tPmZyYWdtZW50U2hhZGVyKCkueXV2QWRqTG9jYXRpb24oKSwgY29uc3RfY2FzdDxmbG9hdCo+
KHl1dkFkanVzdCksIDEpKTsKLQotICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJS
ZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGNjTGF5ZXJJbXBsKCktPmRyYXdUcmFuc2Zv
cm0oKSwKLSAgICAgICAgICAgICAgICAgICAgIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhl
aWdodCgpLCBjY0xheWVySW1wbCgpLT5kcmF3T3BhY2l0eSgpLAotICAgICAgICAgICAgICAgICAg
ICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwKLSAgICAgICAgICAg
ICAgICAgICAgIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpKTsKLQot
ICAgIC8vIFJlc2V0IGFjdGl2ZSB0ZXh0dXJlIGJhY2sgdG8gdGV4dHVyZSAwLgotICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
MCkpOwotfQotCi12b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6ZHJhd1JHQkEoY29uc3QgVmlkZW9M
YXllckNocm9taXVtOjpSR0JBUHJvZ3JhbSogcHJvZ3JhbSkgY29uc3QKLXsKLSAgICBHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7Ci0gICAgVGV4dHVy
ZSB0ZXh0dXJlID0gbV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnJnYlBsYW5lXTsKLQot
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFMCkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZS5pZCkpOwotCi0gICAgbGF5ZXJSZW5k
ZXJlcigpLT51c2VTaGFkZXIocHJvZ3JhbS0+cHJvZ3JhbSgpKTsKLSAgICBmbG9hdCB3aWR0aFNj
YWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRleHR1cmUudmlzaWJsZVNpemUud2lkdGgo
KSkgLyB0ZXh0dXJlLnNpemUud2lkdGgoKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5p
Zm9ybTRmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnRleFRyYW5zZm9ybUxvY2F0aW9uKCksIDAs
IDAsIHdpZHRoU2NhbGVGYWN0b3IsIDEpKTsKLQotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51
bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkp
OwotCi0gICAgZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVyKCktPnByb2pl
Y3Rpb25NYXRyaXgoKSwgY2NMYXllckltcGwoKS0+ZHJhd1RyYW5zZm9ybSgpLAotICAgICAgICAg
ICAgICAgICAgICAgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGNjTGF5ZXJJ
bXBsKCktPmRyYXdPcGFjaXR5KCksCi0gICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0
ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jh
bS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCkpOwotfQotCiB2b2lkIFZpZGVvTGF5
ZXJDaHJvbWl1bTo6cmVzZXRGcmFtZVBhcmFtZXRlcnMoKQogewogICAgIGRlbGV0ZVRleHR1cmVz
SW5Vc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgKaW5kZXggZWYwZDAwMzY4YzYwOGY0
ZjdjZjQzYTcyZDM1MmQzZTM5NTc2ZDJjYy4uMjZhZWMyMmJiZTY5MDNkOTY5ZTkyOGQwZjcwMmI2
MTFkYjRmYmNiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgKQEAgLTUzLDE2ICs1Mywx
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8VmlkZW9MYXllckNocm9taXVtPiBj
cmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lciA9IDAsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW9GcmFtZVByb3ZpZGVyKiA9IDAp
OwogICAgIHZpcnR1YWwgflZpZGVvTGF5ZXJDaHJvbWl1bSgpOwotICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVDb250ZW50c0lmRGlydHkoKTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDQ0xheWVy
SW1wbD4gY3JlYXRlQ0NMYXllckltcGwoKTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21w
b3NpdG9yUmVzb3VyY2VzKCk7CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhdygpOwogCiAgICAgLy8gVGhp
cyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgVmlkZW9GcmFtZVByb3ZpZGVyLiBXaGVuIHRoaXMgbWV0
aG9kIGlzIGNhbGxlZAogICAgIC8vIHB1dEN1cnJlbnRGcmFtZSgpIG11c3QgYmUgY2FsbGVkIHRv
IHJldHVybiB0aGUgZnJhbWUgY3VycmVudGx5IGhlbGQuCiAgICAgdm9pZCByZWxlYXNlQ3VycmVu
dEZyYW1lKCk7CiAKLSAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1Rl
eFRyYW5zZm9ybSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4RmxpcEFscGhhPiBSR0JBUHJvZ3JhbTsK
LSAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFlVVlN0cmV0Y2gs
IEZyYWdtZW50U2hhZGVyWVVWVmlkZW8+IFlVVlByb2dyYW07CisgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZVRvTGF5ZXIoQ0NMYXllckltcGwqKTsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9p
ZCBjbGVhbnVwUmVzb3VyY2VzKCk7CkBAIC03NywxNSArNzgsMTIgQEAgcHJpdmF0ZToKIAogICAg
IGJvb2wgYWxsb2NhdGVUZXh0dXJlc0lmTmVlZGVkKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3Qg
VmlkZW9GcmFtZUNocm9taXVtKiwgdW5zaWduZWQgdGV4dHVyZUZvcm1hdCk7CiAgICAgdm9pZCBh
bGxvY2F0ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCB0ZXh0dXJlSWQsIGNv
bnN0IEludFNpemUmIGRpbWVuc2lvbnMsIHVuc2lnbmVkIHRleHR1cmVGb3JtYXQpIGNvbnN0Owor
CiAgICAgdm9pZCB1cGRhdGVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgdW5zaWduZWQgdGV4
dHVyZUlkLCBjb25zdCBJbnRTaXplJiBkaW1lbnNpb25zLCB1bnNpZ25lZCB0ZXh0dXJlRm9ybWF0
LCBjb25zdCB2b2lkKiBkYXRhKSBjb25zdDsKLSAgICB2b2lkIGRyYXdZVVYoY29uc3QgWVVWUHJv
Z3JhbSopIGNvbnN0OwotICAgIHZvaWQgZHJhd1JHQkEoY29uc3QgUkdCQVByb2dyYW0qKSBjb25z
dDsKKwogICAgIHZvaWQgcmVzZXRGcmFtZVBhcmFtZXRlcnMoKTsKICAgICB2b2lkIHNhdmVDdXJy
ZW50RnJhbWUoVmlkZW9GcmFtZUNocm9taXVtKik7CiAKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQg
eXV2MlJHQls5XTsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgeXV2QWRqdXN0WzNdOwotCiAgICAg
Ym9vbCBtX3NraXBzRHJhdzsKICAgICBWaWRlb0ZyYW1lQ2hyb21pdW06OkZvcm1hdCBtX2ZyYW1l
Rm9ybWF0OwogICAgIFZpZGVvRnJhbWVQcm92aWRlciogbV9wcm92aWRlcjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJH
TExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDdlMzk1MTI0OWExZTk4ZjU0YzA0ZjY0NzcyN2M3MDlj
N2U1OGQwZGUuLjY1MmU3NTI3YTY0ZTMyZGU1MWZiY2RiYzFjMjgwYjY0ZjI4ZWEzMzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcApAQCAtNTEsNyArNTEsNyBAQCBXZWJHTExheWVy
Q2hyb21pdW06OldlYkdMTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVy
KQogewogfQogCi12b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5
KCkKK3ZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkK
IHsKICAgICBpZiAoIW1fY29udGVudHNEaXJ0eSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNo
cm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJH
TExheWVyQ2hyb21pdW0uaAppbmRleCBmOTNjOTcwM2RjOWE3OWFmZjZiZjMyMGE4NzFjMmYwOTg4
Yjg4YzI5Li4zM2RiNzMwMjVkOGY3YjJmMDdjYWU2NDNlY2M2NGFlNGMwYzg2NTI1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVy
Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9XZWJHTExheWVyQ2hyb21pdW0uaApAQCAtNDUsOCArNDUsOCBAQCBjbGFzcyBXZWJHTExheWVy
Q2hyb21pdW0gOiBwdWJsaWMgQ2FudmFzTGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8V2ViR0xMYXllckNocm9taXVtPiBjcmVhdGUoR3JhcGhpY3NMYXllckNo
cm9taXVtKiBvd25lciA9IDApOwogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25z
dCB7IHJldHVybiBtX2NvbnRleHQ7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHNJ
ZkRpcnR5KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFRleHR1cmVVcGRhdGVkKCk7CisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKKyAgICB2b2lkIHNldFRleHR1
cmVVcGRhdGVkKCk7CiAKICAgICB2b2lkIHNldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNjQ5ZDA0OTdkYTA1YzI4YjE2MGJkMjdjYWY0ZDRlNGRmMzc0ODU0OQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
Q2FudmFzTGF5ZXJJbXBsLmNwcApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAi
Y2MvQ0NDYW52YXNMYXllckltcGwuaCIKKworI2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hyb21pdW0u
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0NDQ2FudmFzTGF5ZXJJbXBsOjpDQ0NhbnZhc0xheWVySW1wbChMYXll
ckNocm9taXVtKiBvd25lcikKKyAgICA6IENDTGF5ZXJJbXBsKG93bmVyKQorICAgICwgbV90ZXh0
dXJlSWQoMCkKKyAgICAsIG1fcHJlbXVsdGlwbGllZEFscGhhKHRydWUpCit7Cit9CisKK0NDQ2Fu
dmFzTGF5ZXJJbXBsOjp+Q0NDYW52YXNMYXllckltcGwoKQoreworfQorCit2b2lkIENDQ2FudmFz
TGF5ZXJJbXBsOjpkcmF3KCkKK3sKKyAgICBBU1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKKyAgICBj
b25zdCBDQ0NhbnZhc0xheWVySW1wbDo6UHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXIo
KS0+Y2FudmFzTGF5ZXJQcm9ncmFtKCk7CisgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+
aW5pdGlhbGl6ZWQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJl
bmRlcmVyKCktPmNvbnRleHQoKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKKyAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVy
ZUlkKSk7CisgICAgR0MzRGVudW0gc2ZhY3RvciA9IG1fcHJlbXVsdGlwbGllZEFscGhhID8gR3Jh
cGhpY3NDb250ZXh0M0Q6Ok9ORSA6IEdyYXBoaWNzQ29udGV4dDNEOjpTUkNfQUxQSEE7CisgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBHcmFwaGljc0NvbnRleHQz
RDo6T05FX01JTlVTX1NSQ19BTFBIQSkpOworICAgIGxheWVyUmVuZGVyZXIoKS0+dXNlU2hhZGVy
KHByb2dyYW0tPnByb2dyYW0oKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0x
aShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7CisgICAg
TGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVyKCkt
PnByb2plY3Rpb25NYXRyaXgoKSwgZHJhd1RyYW5zZm9ybSgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGRy
YXdPcGFjaXR5KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFt
LT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCkp
OworCit9CisKKwordm9pZCBDQ0NhbnZhc0xheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyhU
ZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKK3sKKyAgICB3cml0ZUluZGVudCh0cywg
aW5kZW50KTsKKyAgICB0cyA8PCAiY2FudmFzIGxheWVyIHRleHR1cmUgaWQ6ICIgPDwgbV90ZXh0
dXJlSWQgPDwgIiBwcmVtdWx0aXBsaWVkOiAiIDw8IG1fcHJlbXVsdGlwbGllZEFscGhhIDw8ICJc
biI7CisgICAgQ0NMYXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXModHMsIGluZGVudCk7Cit9
CisKK30KKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52
YXNMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGNiZjhkMTc2MzA2YjgwODdlZDgx
ZmY3NThlM2NmZTFmZmJkYTFmOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgKQEAgLTAsMCAr
MSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NDYW52YXNMYXllckltcGxfaAorI2RlZmluZSBDQ0Nh
bnZhc0xheWVySW1wbF9oCisKKyNpbmNsdWRlICJQcm9ncmFtQmluZGluZy5oIgorI2luY2x1ZGUg
IlNoYWRlckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0NhbnZhc0xheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVy
SW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NDYW52YXNMYXllckltcGw+
IGNyZWF0ZShMYXllckNocm9taXVtKiBvd25lcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ0NDYW52YXNMYXllckltcGwob3duZXIpKTsKKyAgICB9CisgICAgdmlydHVhbCB+
Q0NDYW52YXNMYXllckltcGwoKTsKKworICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4
U2hhZGVyUG9zVGV4LCBGcmFnbWVudFNoYWRlclJHQkFUZXhGbGlwQWxwaGE+IFByb2dyYW07CisK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhdygpOworCisgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclBy
b3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OworCisgICAgdm9pZCBzZXRU
ZXh0dXJlSWQodW5zaWduZWQgaWQpIHsgbV90ZXh0dXJlSWQgPSBpZDsgfQorICAgIHZvaWQgc2V0
UHJlbXVsdGlwbGllZEFscGhhKGJvb2wgcHJlbXVsdGlwbGllZEFscGhhKSB7IG1fcHJlbXVsdGlw
bGllZEFscGhhID0gcHJlbXVsdGlwbGllZEFscGhhOyB9Citwcml2YXRlOgorICAgIGV4cGxpY2l0
IENDQ2FudmFzTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qKTsKKworICAgIHVuc2lnbmVkIG1fdGV4
dHVyZUlkOworICAgIGJvb2wgbV9wcmVtdWx0aXBsaWVkQWxwaGE7Cit9OworCit9CisKKyNlbmRp
ZiAvLyBDQ0NhbnZhc0xheWVySW1wbF9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCBi
Mzg4YTQ5NGRmMTY3ODJiNWIzYWJhNDk0YjFlMDljMDEwMGY3OGM0Li45NDExZTVhZTcyZTVlYTAz
N2UwMjZjZTUxNGFmOGYyYmU0MWNjM2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0x
MDEsMjUgKzEwMSw2IEBAIENDTGF5ZXJJbXBsKiBDQ0xheWVySW1wbDo6cmVwbGljYUxheWVyKCkg
Y29uc3QKICAgICByZXR1cm4gbV9vd25lci0+cmVwbGljYUxheWVyKCkgPyBtX293bmVyLT5yZXBs
aWNhTGF5ZXIoKS0+Y2NMYXllckltcGwoKSA6IDA7CiB9CiAKLXZvaWQgQ0NMYXllckltcGw6OnVw
ZGF0ZUZyb21MYXllcihMYXllckNocm9taXVtKiBsYXllcikKLXsKLSAgICBtX2FuY2hvclBvaW50
ID0gbGF5ZXItPmFuY2hvclBvaW50KCk7Ci0gICAgbV9hbmNob3JQb2ludFogPSBsYXllci0+YW5j
aG9yUG9pbnRaKCk7Ci0gICAgbV9ib3VuZHMgPSBsYXllci0+Ym91bmRzKCk7Ci0gICAgbV9kb3Vi
bGVTaWRlZCA9IGxheWVyLT5kb3VibGVTaWRlZCgpOwotICAgIG1fbWFza3NUb0JvdW5kcyA9IGxh
eWVyLT5tYXNrc1RvQm91bmRzKCk7Ci0gICAgbV9vcGFjaXR5ID0gbGF5ZXItPm9wYWNpdHkoKTsK
LSAgICBtX3Bvc2l0aW9uID0gbGF5ZXItPnBvc2l0aW9uKCk7Ci0gICAgbV9wcmVzZXJ2ZXMzRCA9
IGxheWVyLT5wcmVzZXJ2ZXMzRCgpOwotICAgIG1fc3VibGF5ZXJUcmFuc2Zvcm0gPSBsYXllci0+
c3VibGF5ZXJUcmFuc2Zvcm0oKTsKLSAgICBtX3RyYW5zZm9ybSA9IGxheWVyLT50cmFuc2Zvcm0o
KTsKLQotICAgIGlmIChtYXNrTGF5ZXIoKSkKLSAgICAgICAgbWFza0xheWVyKCktPnVwZGF0ZUZy
b21MYXllcihtX293bmVyLT5tYXNrTGF5ZXIoKSk7Ci0gICAgaWYgKHJlcGxpY2FMYXllcigpKQot
ICAgICAgICByZXBsaWNhTGF5ZXIoKS0+dXBkYXRlRnJvbUxheWVyKG1fb3duZXItPnJlcGxpY2FM
YXllcigpKTsKLX0KLQogdm9pZCBDQ0xheWVySW1wbDo6c2V0TGF5ZXJSZW5kZXJlcihMYXllclJl
bmRlcmVyQ2hyb21pdW0qIHJlbmRlcmVyKQogewogICAgIG1fbGF5ZXJSZW5kZXJlciA9IHJlbmRl
cmVyOwpAQCAtMTM0LDEzICsxMTUsMTUgQEAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBDQ0xheWVy
SW1wbDo6Y3JlYXRlUmVuZGVyU3VyZmFjZSgpCiBib29sIENDTGF5ZXJJbXBsOjpkZXNjZW5kYW50
c0RyYXdzQ29udGVudCgpCiB7CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVt
PiA+JiBzdWJsYXllcnMgPSBtX293bmVyLT5nZXRTdWJsYXllcnMoKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7ICsraSkKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHN1YmxheWVycy5zaXplKCk7ICsraSkgeworICAgICAgICBzdWJsYXllcnNbaV0tPmNy
ZWF0ZUNDTGF5ZXJJbXBsSWZOZWVkZWQoKTsKICAgICAgICAgaWYgKHN1YmxheWVyc1tpXS0+Y2NM
YXllckltcGwoKS0+ZHJhd3NDb250ZW50KCkgfHwgc3VibGF5ZXJzW2ldLT5jY0xheWVySW1wbCgp
LT5kZXNjZW5kYW50c0RyYXdzQ29udGVudCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotLy8gVGhlc2UgYmVsb25nIG9uIENDTGF5ZXJJ
bXBsLCBidXQgc2hvdWxkIGJlIHN1YmNsYXNlZCBieSBlYWNoIHR5cGUgYW5kIG5vdCBkZWZlciB0
byB0aGUgTGF5ZXJDaHJvbWl1bSBzdWJ0eXBlcy4KKy8vIFRoZXNlIGJlbG9uZyBvbiBDQ0xheWVy
SW1wbCwgYnV0IHNob3VsZCBiZSBvdmVycmlkZGVuIGJ5IGVhY2ggdHlwZSBhbmQgbm90IGRlZmVy
IHRvIHRoZSBMYXllckNocm9taXVtIHN1YnR5cGVzLgogYm9vbCBDQ0xheWVySW1wbDo6ZHJhd3ND
b250ZW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9vd25lci0+ZHJhd3NDb250ZW50KCk7CkBA
IC0xNTEsNiArMTM0LDExIEBAIHZvaWQgQ0NMYXllckltcGw6OmRyYXcoKQogICAgIHJldHVybiBt
X293bmVyLT5kcmF3KCk7CiB9CiAKK3ZvaWQgQ0NMYXllckltcGw6OnVwZGF0ZUNvbXBvc2l0b3JS
ZXNvdXJjZXMoKQoreworICAgIHJldHVybiBtX293bmVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3Vy
Y2VzKCk7Cit9CisKIHZvaWQgQ0NMYXllckltcGw6OnVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgp
CiB7CiAgICAgbV9vd25lci0+dW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCk7CkBAIC0yMDAsNyAr
MTg4LDcgQEAgdm9pZCBDQ0xheWVySW1wbDo6ZHJhd0RlYnVnQm9yZGVyKCkKICAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+ZHJhd0VsZW1lbnRzKEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1As
IDQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCwgNiAqIHNpemVvZih1bnNpZ25l
ZCBzaG9ydCkpKTsKIH0KIAotc3RhdGljIHZvaWQgd3JpdGVJbmRlbnQoVGV4dFN0cmVhbSYgdHMs
IGludCBpbmRlbnQpCit2b2lkIENDTGF5ZXJJbXBsOjp3cml0ZUluZGVudChUZXh0U3RyZWFtJiB0
cywgaW50IGluZGVudCkKIHsKICAgICBmb3IgKGludCBpID0gMDsgaSAhPSBpbmRlbnQ7ICsraSkK
ICAgICAgICAgdHMgPDwgIiAgIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IGUyZjVmOWI0Nzlk
ZjhiMDM2OWViYjA1Y2NhZGY0ODcyMjUwNWQxNTAuLjk2YzRmMWI5YjNkNDZiMmUwZWQ0ODg2OGI5
Njk1MGIyZTAyNWM1MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtNDksNyArNDksNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NMYXllckltcGwob3duZXIpKTsK
ICAgICB9CiAgICAgLy8gV2hlbiB0aGlzIGNsYXNzIGdldHMgc3ViY2xhc3NlcywgcmVtZW1iZXIg
dG8gYWRkICd2aXJ0dWFsJyBoZXJlLgotICAgIH5DQ0xheWVySW1wbCgpOworICAgIHZpcnR1YWwg
fkNDTGF5ZXJJbXBsKCk7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgaW50IGRlYnVnSUQoKSBjb25z
dCB7IHJldHVybiBtX2RlYnVnSUQ7IH0KQEAgLTU5LDI3ICs1OSw0MSBAQCBwdWJsaWM6CiAgICAg
Q0NMYXllckltcGwqIG1hc2tMYXllcigpIGNvbnN0OwogICAgIENDTGF5ZXJJbXBsKiByZXBsaWNh
TGF5ZXIoKSBjb25zdDsKIAotICAgIHZvaWQgZHJhdygpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3
KCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKICAgICB2
b2lkIHVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpOwogICAgIHZvaWQgYmluZENvbnRlbnRzVGV4
dHVyZSgpOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgbGF5ZXIgaGFzIGNvbnRlbnQg
dG8gZHJhdy4KLSAgICBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2Yg
dGhlIGxheWVyJ3MgZGVzY2VuZGFudHMgaGFzIGNvbnRlbnQgdG8gZHJhdy4KICAgICBib29sIGRl
c2NlbmRhbnRzRHJhd3NDb250ZW50KCk7CiAKICAgICB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsK
IAotICAgIHZvaWQgdXBkYXRlRnJvbUxheWVyKExheWVyQ2hyb21pdW0qKTsKLQorICAgIHZvaWQg
c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQpIHsgbV9hbmNob3JQ
b2ludCA9IGFuY2hvclBvaW50OyB9CiAgICAgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQo
KSBjb25zdCB7IHJldHVybiBtX2FuY2hvclBvaW50OyB9CisKKyAgICB2b2lkIHNldEFuY2hvclBv
aW50WihmbG9hdCBhbmNob3JQb2ludFopIHsgbV9hbmNob3JQb2ludFogPSBhbmNob3JQb2ludFo7
IH0KICAgICBmbG9hdCBhbmNob3JQb2ludFooKSBjb25zdCB7IHJldHVybiBtX2FuY2hvclBvaW50
WjsgfQorCisgICAgdm9pZCBzZXRNYXNrc1RvQm91bmRzKGJvb2wgbWFza3NUb0JvdW5kcykgeyBt
X21hc2tzVG9Cb3VuZHMgPSBtYXNrc1RvQm91bmRzOyB9CiAgICAgYm9vbCBtYXNrc1RvQm91bmRz
KCkgY29uc3QgeyByZXR1cm4gbV9tYXNrc1RvQm91bmRzOyB9CisKKyAgICB2b2lkIHNldE9wYWNp
dHkoZmxvYXQgb3BhY2l0eSkgeyBtX29wYWNpdHkgPSBvcGFjaXR5OyB9CiAgICAgZmxvYXQgb3Bh
Y2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQorCisgICAgdm9pZCBzZXRQb3NpdGlv
bihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikgeyBtX3Bvc2l0aW9uID0gcG9zaXRpb247IH0K
ICAgICBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRp
b247IH0KKworICAgIHZvaWQgc2V0UHJlc2VydmVzM0QoYm9vbCBwcmVzZXJ2ZXMzRCkgeyBtX3By
ZXNlcnZlczNEID0gcHJlc2VydmVzM0Q7IH0KICAgICBib29sIHByZXNlcnZlczNEKCkgY29uc3Qg
eyByZXR1cm4gbV9wcmVzZXJ2ZXMzRDsgfQorCisgICAgdm9pZCBzZXRTdWJsYXllclRyYW5zZm9y
bShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc3VibGF5ZXJUcmFuc2Zvcm0pIHsgbV9zdWJs
YXllclRyYW5zZm9ybSA9IHN1YmxheWVyVHJhbnNmb3JtOyB9CiAgICAgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zdWJsYXll
clRyYW5zZm9ybTsgfQorCisgICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHRyYW5zZm9ybSkgeyBtX3RyYW5zZm9ybSA9IHRyYW5zZm9ybTsgfQogICAgIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3Ry
YW5zZm9ybTsgfQogCiAgICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkgeyBtX25h
bWUgPSBuYW1lOyB9CkBAIC0xMjQsMTEgKzEzOCwxNCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7
CiAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgLy8gRm9yIG5vdywgQ0NMYXllcnMgYXJlIG93
bmVkIGRpcmVjdGx5IGJ5IGEgTGF5ZXJDaHJvbWl1bS4KICAgICBMYXllckNocm9taXVtKiBtX293
bmVyOwogICAgIGV4cGxpY2l0IENDTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qKTsKIAorICAgIHN0
YXRpYyB2b2lkIHdyaXRlSW5kZW50KFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KTsKKworcHJpdmF0
ZToKICAgICAvLyBQcm9wZXJ0aWVzIHN5bmNocm9uaXplZCBmcm9tIHRoZSBhc3NvY2lhdGVkIExh
eWVyQ2hyb21pdW0uCiAgICAgRmxvYXRQb2ludCBtX2FuY2hvclBvaW50OwogICAgIGZsb2F0IG1f
YW5jaG9yUG9pbnRaOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjRhZWY2Mzk4NjFhZTI0ZGExNWQ5YzA2MWQ1YjZlYmRlODE4MjhiZmYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Bs
dWdpbkxheWVySW1wbC5jcHAKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgImNj
L0NDUGx1Z2luTGF5ZXJJbXBsLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgor
I2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlBsdWdpbkxheWVy
Q2hyb21pdW0uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitDQ1BsdWdpbkxheWVySW1wbDo6Q0NQbHVnaW5MYXllckltcGwoTGF5ZXJD
aHJvbWl1bSogb3duZXIpCisgICAgOiBDQ0xheWVySW1wbChvd25lcikKKyAgICAsIG1fdGV4dHVy
ZUlkKDApCit7Cit9CisKK0NDUGx1Z2luTGF5ZXJJbXBsOjp+Q0NQbHVnaW5MYXllckltcGwoKQor
eworfQorCit2b2lkIENDUGx1Z2luTGF5ZXJJbXBsOjpkcmF3KCkKK3sKKyAgICBBU1NFUlQobGF5
ZXJSZW5kZXJlcigpKTsKKyAgICBjb25zdCBDQ1BsdWdpbkxheWVySW1wbDo6UHJvZ3JhbSogcHJv
Z3JhbSA9IGxheWVyUmVuZGVyZXIoKS0+cGx1Z2luTGF5ZXJQcm9ncmFtKCk7CisgICAgQVNTRVJU
KHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyKCktPmNvbnRleHQoKTsKKyAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsK
KyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKSk7CisKKyAgICAvLyBGSVhNRTogc2V0dGluZyB0aGUg
dGV4dHVyZSBwYXJhbWV0ZXJzIGV2ZXJ5IHRpbWUgaXMgcmVkdW5kYW50LiBNb3ZlIHRoaXMgY29k
ZSBzb21ld2hlcmUKKyAgICAvLyB3aGVyZSBpdCB3aWxsIG9ubHkgaGFwcGVuIG9uY2UgcGVyIHRl
eHR1cmUuCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxU
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikp
OworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBo
aWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0Up
KTsKKworICAgIGxheWVyUmVuZGVyZXIoKS0+dXNlU2hhZGVyKHByb2dyYW0tPnByb2dyYW0oKSk7
CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNo
YWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7CisgICAgTGF5ZXJDaHJvbWl1bTo6ZHJhd1Rl
eHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwg
ZHJhd1RyYW5zZm9ybSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91
bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGRyYXdPcGFjaXR5KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRy
aXhMb2NhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jh
bS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCkpOworfQorCisKK3ZvaWQgQ0NQbHVn
aW5MYXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRl
bnQpIGNvbnN0Cit7CisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CisgICAgdHMgPDwgInBs
dWdpbiBsYXllciB0ZXh0dXJlIGlkOiAiIDw8IG1fdGV4dHVyZUlkIDw8ICJcbiI7CisgICAgQ0NM
YXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXModHMsIGluZGVudCk7Cit9CisKK30KKworI2Vu
ZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2lu
TGF5ZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjVlYjViNzYzNjQyYTY4OWQ5MGY2NGNlMzA3YWRmZmUz
ZDFkYmU1MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgKQEAgLTAsMCArMSw2MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQ0NQbHVnaW5MYXllckltcGxfaAorI2RlZmluZSBDQ1BsdWdpbkxheWVySW1w
bF9oCisKKyNpbmNsdWRlICJQcm9ncmFtQmluZGluZy5oIgorI2luY2x1ZGUgIlNoYWRlckNocm9t
aXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDQ1BsdWdpbkxheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NQbHVnaW5MYXllckltcGw+IGNyZWF0ZShMYXll
ckNocm9taXVtKiBvd25lcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NQ
bHVnaW5MYXllckltcGwob3duZXIpKTsKKyAgICB9CisgICAgdmlydHVhbCB+Q0NQbHVnaW5MYXll
ckltcGwoKTsKKworICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4
LCBGcmFnbWVudFNoYWRlclJHQkFUZXhGbGlwQWxwaGE+IFByb2dyYW07CisKKyAgICB2aXJ0dWFs
IHZvaWQgZHJhdygpOworCisgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4
dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OworCisgICAgdm9pZCBzZXRUZXh0dXJlSWQodW5z
aWduZWQgaWQpIHsgbV90ZXh0dXJlSWQgPSBpZDsgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0
IENDUGx1Z2luTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qKTsKKworICAgIHVuc2lnbmVkIG1fdGV4
dHVyZUlkOworfTsKKworfQorCisjZW5kaWYgLy8gQ0NQbHVnaW5MYXllckltcGxfaAorCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Zp
ZGVvTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViMzYxMmI2ZTVjNjVlZTgz
MDg2NjA1NjE1NzkwOTJmNWZlMGM4ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcApAQCAt
MCwwICsxLDE3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgImNjL0NDVmlkZW9MYXllckltcGwuaCIK
KworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJWaWRl
b0xheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGVzZSB2YWx1ZXMgYXJlIG1hZ2ljIG51bWJlcnMgdGhh
dCBhcmUgdXNlZCBpbiB0aGUgdHJhbnNmb3JtYXRpb24KKy8vIGZyb20gWVVWIHRvIFJHQiBjb2xv
ciB2YWx1ZXMuCisvLyBUaGV5IGFyZSB0YWtlbiBmcm9tIHRoZSBmb2xsb3dpbmcgd2VicGFnZToK
Ky8vIGh0dHA6Ly93d3cuZm91cmNjLm9yZy9mY2N5dnJnYi5waHAKK2NvbnN0IGZsb2F0IENDVmlk
ZW9MYXllckltcGw6Onl1djJSR0JbOV0gPSB7CisgICAgMS4xNjRmLCAxLjE2NGYsIDEuMTY0ZiwK
KyAgICAwLmYsIC0uMzkxZiwgMi4wMThmLAorICAgIDEuNTk2ZiwgLS44MTNmLCAwLmYsCit9Owor
CisvLyBUaGVzZSB2YWx1ZXMgbWFwIHRvIDE2LCAxMjgsIGFuZCAxMjggcmVzcGVjdGl2ZWx5LCBh
bmQgYXJlIGNvbXB1dGVkCisvLyBhcyBhIGZyYWN0aW9uIG92ZXIgMjU2IChlLmcuIDE2IC8gMjU2
ID0gMC4wNjI1KS4KKy8vIFRoZXkgYXJlIHVzZWQgaW4gdGhlIFlVViB0byBSR0JBIGNvbnZlcnNp
b24gZm9ybXVsYToKKy8vICAgWSAtIDE2ICAgOiBHaXZlcyAxNiB2YWx1ZXMgb2YgaGVhZCBhbmQg
Zm9vdHJvb20gZm9yIG92ZXJzaG9vdGluZworLy8gICBVIC0gMTI4ICA6IFR1cm5zIHVuc2lnbmVk
IFUgaW50byBzaWduZWQgVSBbLTEyOCwxMjddCisvLyAgIFYgLSAxMjggIDogVHVybnMgdW5zaWdu
ZWQgViBpbnRvIHNpZ25lZCBWIFstMTI4LDEyN10KK2NvbnN0IGZsb2F0IENDVmlkZW9MYXllcklt
cGw6Onl1dkFkanVzdFszXSA9IHsKKyAgICAtMC4wNjI1ZiwKKyAgICAtMC41ZiwKKyAgICAtMC41
ZiwKK307CisKK0NDVmlkZW9MYXllckltcGw6OkNDVmlkZW9MYXllckltcGwoTGF5ZXJDaHJvbWl1
bSogb3duZXIpCisgICAgOiBDQ0xheWVySW1wbChvd25lcikKK3sKK30KKworQ0NWaWRlb0xheWVy
SW1wbDo6fkNDVmlkZW9MYXllckltcGwoKQoreworICAgIGNsZWFudXBSZXNvdXJjZXMoKTsKK30K
Kwordm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpzZXRUZXh0dXJlKHNpemVfdCBpLCBWaWRlb0xheWVy
Q2hyb21pdW06OlRleHR1cmUgdGV4dHVyZSkKK3sKKyAgICBBU1NFUlQoaSA8IDMpOworICAgIG1f
dGV4dHVyZXNbaV0gPSB0ZXh0dXJlOworfQorCit2b2lkIENDVmlkZW9MYXllckltcGw6OmRyYXco
KQoreworICAgIGlmIChtX3NraXBzRHJhdykKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJU
KGxheWVyUmVuZGVyZXIoKSk7CisgICAgY29uc3QgUkdCQVByb2dyYW0qIHJnYmFQcm9ncmFtID0g
bGF5ZXJSZW5kZXJlcigpLT52aWRlb0xheWVyUkdCQVByb2dyYW0oKTsKKyAgICBBU1NFUlQocmdi
YVByb2dyYW0gJiYgcmdiYVByb2dyYW0tPmluaXRpYWxpemVkKCkpOworICAgIGNvbnN0IFlVVlBy
b2dyYW0qIHl1dlByb2dyYW0gPSBsYXllclJlbmRlcmVyKCktPnZpZGVvTGF5ZXJZVVZQcm9ncmFt
KCk7CisgICAgQVNTRVJUKHl1dlByb2dyYW0gJiYgeXV2UHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7
CisKKyAgICBzd2l0Y2ggKG1fZnJhbWVGb3JtYXQpIHsKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJv
bWl1bTo6WVYxMjoKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6WVYxNjoKKyAgICAgICAg
ZHJhd1lVVih5dXZQcm9ncmFtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWaWRlb0ZyYW1l
Q2hyb21pdW06OlJHQkE6CisgICAgICAgIGRyYXdSR0JBKHJnYmFQcm9ncmFtKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBvdGhlciBw
YXRocy4KKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCit2b2lkIENDVmlkZW9MYXllckltcGw6OmRyYXdZVVYoY29uc3QgQ0NWaWRlb0xheWVySW1w
bDo6WVVWUHJvZ3JhbSogcHJvZ3JhbSkgY29uc3QKK3sKKyAgICBHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCA9IGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpOworICAgIFZpZGVvTGF5ZXJDaHJv
bWl1bTo6VGV4dHVyZSB5VGV4dHVyZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjp5
UGxhbmVdOworICAgIFZpZGVvTGF5ZXJDaHJvbWl1bTo6VGV4dHVyZSB1VGV4dHVyZSA9IG1fdGV4
dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjp1UGxhbmVdOworICAgIFZpZGVvTGF5ZXJDaHJvbWl1
bTo6VGV4dHVyZSB2VGV4dHVyZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjp2UGxh
bmVdOworCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkUxKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB5VGV4dHVyZS5pZCkpOworICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFMikpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgdVRleHR1cmUuaWQpKTsKKyAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTMpKTsKKyAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIHZUZXh0dXJlLmlkKSk7CisKKyAgICBsYXllclJlbmRlcmVyKCktPnVzZVNoYWRlcihw
cm9ncmFtLT5wcm9ncmFtKCkpOworCisgICAgZmxvYXQgeVdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0
aWNfY2FzdDxmbG9hdD4oeVRleHR1cmUudmlzaWJsZVNpemUud2lkdGgoKSkgLyB5VGV4dHVyZS5z
aXplLndpZHRoKCk7CisgICAgLy8gQXJiaXRyYXJpbHkgdGFrZSB0aGUgdSBzaXplcyBiZWNhdXNl
IHUgYW5kIHYgZGltZW5zaW9ucyBhcmUgaWRlbnRpY2FsLgorICAgIGZsb2F0IHV2V2lkdGhTY2Fs
ZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pih1VGV4dHVyZS52aXNpYmxlU2l6ZS53aWR0aCgp
KSAvIHVUZXh0dXJlLnNpemUud2lkdGgoKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5p
Zm9ybTFmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnlXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24o
KSwgeVdpZHRoU2NhbGVGYWN0b3IpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9y
bTFmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnV2V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKCks
IHV2V2lkdGhTY2FsZUZhY3RvcikpOworCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZv
cm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnlUZXh0dXJlTG9jYXRpb24oKSwgMSkpOwor
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFk
ZXIoKS51VGV4dHVyZUxvY2F0aW9uKCksIDIpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkudlRleHR1cmVMb2NhdGlvbigpLCAz
KSk7CisKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihwcm9ncmFt
LT5mcmFnbWVudFNoYWRlcigpLmNjTWF0cml4TG9jYXRpb24oKSwgMCwgY29uc3RfY2FzdDxmbG9h
dCo+KHl1djJSR0IpLCAxKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0zZnYo
cHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS55dXZBZGpMb2NhdGlvbigpLCBjb25zdF9jYXN0PGZs
b2F0Kj4oeXV2QWRqdXN0KSwgMSkpOworCisgICAgTGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVk
UXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwgZHJhd1Ry
YW5zZm9ybSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzKCku
d2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGRyYXdPcGFjaXR5KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2Nh
dGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJh
Z21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCkpOworCisgICAgLy8gUmVzZXQgYWN0aXZlIHRl
eHR1cmUgYmFjayB0byB0ZXh0dXJlIDAuCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2
ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7Cit9CisKK3ZvaWQgQ0NWaWRl
b0xheWVySW1wbDo6ZHJhd1JHQkEoY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6UkdCQVByb2dyYW0q
IHByb2dyYW0pIGNvbnN0Cit7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXll
clJlbmRlcmVyKCktPmNvbnRleHQoKTsKKyAgICBWaWRlb0xheWVyQ2hyb21pdW06OlRleHR1cmUg
dGV4dHVyZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjpyZ2JQbGFuZV07CisKKyAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRTApKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmUuaWQpKTsKKworICAgIGxheWVyUmVuZGVy
ZXIoKS0+dXNlU2hhZGVyKHByb2dyYW0tPnByb2dyYW0oKSk7CisgICAgZmxvYXQgd2lkdGhTY2Fs
ZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pih0ZXh0dXJlLnZpc2libGVTaXplLndpZHRoKCkp
IC8gdGV4dHVyZS5zaXplLndpZHRoKCk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZv
cm00Zihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS50ZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCAwLCAw
LCB3aWR0aFNjYWxlRmFjdG9yLCAxKSk7CisKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5p
Zm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsK
KworICAgIExheWVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5k
ZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGRyYXdUcmFuc2Zvcm0oKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdo
dCgpLCBkcmF3T3BhY2l0eSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2Nh
dGlvbigpKTsKK30KKworCit2b2lkIENDVmlkZW9MYXllckltcGw6OmR1bXBMYXllclByb3BlcnRp
ZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Cit7CisgICAgd3JpdGVJbmRlbnQo
dHMsIGluZGVudCk7CisgICAgdHMgPDwgInZpZGVvIGxheWVyXG4iOworICAgIENDTGF5ZXJJbXBs
OjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKHRzLCBpbmRlbnQpOworfQorCit9CisKKyNlbmRpZiAvLyBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42MmY4Nzc4N2U4NWYwMTUxMjBkNzI0YzdmYTI5ZTAyMjg4NzU5NTkzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IENDVmlkZW9MYXllckltcGxfaAorI2RlZmluZSBDQ1ZpZGVvTGF5ZXJJbXBsX2gKKworI2luY2x1
ZGUgIlByb2dyYW1CaW5kaW5nLmgiCisjaW5jbHVkZSAiU2hhZGVyQ2hyb21pdW0uaCIKKyNpbmNs
dWRlICJWaWRlb0ZyYW1lQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJWaWRlb0xheWVyQ2hyb21pdW0u
aCIKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFZpZGVvRnJhbWVQcm92aWRlcjsKKworY2xhc3MgQ0NWaWRlb0xheWVySW1wbCA6IHB1
YmxpYyBDQ0xheWVySW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NWaWRl
b0xheWVySW1wbD4gY3JlYXRlKExheWVyQ2hyb21pdW0qIG93bmVyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1ZpZGVvTGF5ZXJJbXBsKG93bmVyKSk7CisgICAgfQorICAg
IHZpcnR1YWwgfkNDVmlkZW9MYXllckltcGwoKTsKKworICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRp
bmc8VmVydGV4U2hhZGVyUG9zVGV4VHJhbnNmb3JtLCBGcmFnbWVudFNoYWRlclJHQkFUZXhGbGlw
QWxwaGE+IFJHQkFQcm9ncmFtOworICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hh
ZGVyUG9zVGV4WVVWU3RyZXRjaCwgRnJhZ21lbnRTaGFkZXJZVVZWaWRlbz4gWVVWUHJvZ3JhbTsK
KworICAgIHZpcnR1YWwgdm9pZCBkcmF3KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVy
UHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CisKKyAgICB2b2lkIHNl
dFNraXBzRHJhdyhib29sIHNraXBzRHJhdykgeyBtX3NraXBzRHJhdyA9IHNraXBzRHJhdzsgfQor
ICAgIHZvaWQgc2V0RnJhbWVGb3JtYXQoVmlkZW9GcmFtZUNocm9taXVtOjpGb3JtYXQgZm9ybWF0
KSB7IG1fZnJhbWVGb3JtYXQgPSBmb3JtYXQ7IH0KKyAgICB2b2lkIHNldFRleHR1cmUoc2l6ZV90
LCBWaWRlb0xheWVyQ2hyb21pdW06OlRleHR1cmUpOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0
IENDVmlkZW9MYXllckltcGwoTGF5ZXJDaHJvbWl1bSopOworCisgICAgdm9pZCBkcmF3WVVWKGNv
bnN0IFlVVlByb2dyYW0qKSBjb25zdDsKKyAgICB2b2lkIGRyYXdSR0JBKGNvbnN0IFJHQkFQcm9n
cmFtKikgY29uc3Q7CisKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgeXV2MlJHQls5XTsKKyAgICBz
dGF0aWMgY29uc3QgZmxvYXQgeXV2QWRqdXN0WzNdOworCisgICAgYm9vbCBtX3NraXBzRHJhdzsK
KyAgICBWaWRlb0ZyYW1lQ2hyb21pdW06OkZvcm1hdCBtX2ZyYW1lRm9ybWF0OworICAgIFZpZGVv
TGF5ZXJDaHJvbWl1bTo6VGV4dHVyZSBtX3RleHR1cmVzWzNdOworfTsKKworfQorCisjZW5kaWYg
Ly8gQ0NWaWRlb0xheWVySW1wbF9oCisK
</data>
<flag name="review"
          id="78959"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>