<?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>80870</bug_id>
          
          <creation_ts>2012-03-12 12:39:35 -0700</creation_ts>
          <short_desc>[chromium] Use blit instead of copy for canvas presentation</short_desc>
          <delta_ts>2012-03-27 11:19:06 -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>Canvas</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sami Kyostila">skyostil</reporter>
          <assigned_to name="Sami Kyostila">skyostil</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>enne</cc>
    
    <cc>husky</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>reveman</cc>
    
    <cc>senorblanco</cc>
    
    <cc>tomhudson</cc>
    
    <cc>twiz</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>576400</commentid>
    <comment_count>0</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-03-12 12:39:35 -0700</bug_when>
    <thetext>Use glDrawArrays() instead of glCopyTexSubImage2D() to copy the accelerated canvas back buffer to the front buffer, because the latter hits a very expensive slow path on some mobile GPUs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577708</commentid>
    <comment_count>1</comment_count>
      <attachid>131698</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-03-13 13:02:21 -0700</bug_when>
    <thetext>Created attachment 131698
Patch

Still need to write some tests and make WebGL use TextureCopier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580905</commentid>
    <comment_count>2</comment_count>
      <attachid>132368</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-03-16 13:46:46 -0700</bug_when>
    <thetext>Created attachment 132368
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580912</commentid>
    <comment_count>3</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-03-16 13:51:32 -0700</bug_when>
    <thetext>Left out WebGL from this patch as it requires some more involved state gymnastics with the rendering context.

With this patch the Canvas &quot;full clear translation&quot; score in https://github.com/sibblingz/HTML5-Game-Benchmarks improves from ~330 to ~660 on a z600/Quadro FX 380.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581775</commentid>
    <comment_count>4</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2012-03-19 07:36:27 -0700</bug_when>
    <thetext>Very nice.

I&apos;m not sure about TextureCopierTest, as it more or less just lists the commands that the copier issues. Is that really giving us good coverage? It seems like we want to check it actually outputs the right thing, but I guess that&apos;s what (existing) layout tests are for.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581786</commentid>
    <comment_count>5</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-03-19 07:44:06 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I&apos;m not sure about TextureCopierTest, as it more or less just lists the commands that the copier issues. Is that really giving us good coverage? It seems like we want to check it actually outputs the right thing, but I guess that&apos;s what (existing) layout tests are for.

Yeah, I agree the test isn&apos;t ideal. Checking the actual output would require us to run the unit tests on top of a real GL implementation, but as far as I can see that isn&apos;t currently possible.

The existing layout tests do exercise this code when run in GPU mode, so we do have coverage. Perhaps we should just drop TextureCopierTest entirely, or what do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581799</commentid>
    <comment_count>6</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2012-03-19 07:54:22 -0700</bug_when>
    <thetext>There is value in just compiling and running code, to guard against silly compile errors.

Maybe simplify the test by removing some of the methods in the mock? I believe if you don&apos;t add a gmock macro for a method, it will just be totally ignored.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581803</commentid>
    <comment_count>7</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-03-19 07:59:11 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; There is value in just compiling and running code, to guard against silly compile errors.
&gt; 
&gt; Maybe simplify the test by removing some of the methods in the mock? I believe if you don&apos;t add a gmock macro for a method, it will just be totally ignored.

Good idea, I&apos;ll try to reduce the mocked function set to bare essentials.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581810</commentid>
    <comment_count>8</comment_count>
      <attachid>132586</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-03-19 08:10:22 -0700</bug_when>
    <thetext>Created attachment 132586
Patch

- Simplified TextureCopierTest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581828</commentid>
    <comment_count>9</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2012-03-19 08:37:03 -0700</bug_when>
    <thetext>Cool, I like it. Much clearer. Maybe also add a comment explaining that it&apos;s stripped-down, though. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581841</commentid>
    <comment_count>10</comment_count>
      <attachid>132591</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-03-19 09:00:57 -0700</bug_when>
    <thetext>Created attachment 132591
Patch

- Added note to TextureCopierTest explaining the scope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586329</commentid>
    <comment_count>11</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-03-23 07:33:00 -0700</bug_when>
    <thetext>Ping, anyone care to review -- or suggest a reviewer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586468</commentid>
    <comment_count>12</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-03-23 10:33:55 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Ping, anyone care to review -- or suggest a reviewer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586469</commentid>
    <comment_count>13</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-03-23 10:37:41 -0700</bug_when>
    <thetext>This looks like good stuff, but it also overlaps with the work Jeff Timanus is currently doing to support fast texture copies at the command buffer level; see crbug.com/101051.  His work is a bit broader, in that it has to support WebGL-&gt;canvas copies as well.

It might be ok to have both paths (depending on your time horizon), but I thought I&apos;d mention it before diving in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586473</commentid>
    <comment_count>14</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-23 10:41:47 -0700</bug_when>
    <thetext>It is also worth mentioning we&apos;re interested in improving other rectangular blits in the compositor.

http://code.google.com/p/chromium/issues/detail?id=116204

For instance when we blit a surface to its target using LayerRendererChromium::drawTexturedQuad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586478</commentid>
    <comment_count>15</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-03-23 10:49:31 -0700</bug_when>
    <thetext>Sounds like there is lots of potential overlap between this patch and the other two bugs. I&apos;ll talk to Jeff to see if there&apos;s some unification we could do.

In the meantime it would be nice for something like this to get landed since it gives Chrome on Android a modest 60x boost on the benchmark mentioned in comment #3 :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586497</commentid>
    <comment_count>16</comment_count>
      <attachid>132591</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-03-23 11:05:59 -0700</bug_when>
    <thetext>Comment on attachment 132591
Patch

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

Leaving for compositor folks to chime in.

&gt; Source/WebCore/platform/graphics/chromium/ShaderChromium.cpp:427
&gt; +String FragmentShaderRGBATexCopy::getShaderString() const

&lt;bikeshed&gt; I don&apos;t think this class should really have &quot;Copy&quot; in its name.  Maybe just FragmentShaderRGBATex? &lt;/bikeshed&gt;

&gt; Source/WebCore/platform/graphics/chromium/TextureCopier.cpp:51
&gt; +        {0, 0},
&gt; +        {1, 0},
&gt; +        {1, 1},
&gt; +        {0, 1}

You could re-use the same canonical vert buffer above for texcoords, if you don&apos;t mind doing a little math in the vert shader to turn it from 2x2 to unit.  Failing that, you could also interleave verts and texcoords, as the compositor does, which would at least save you some binding calls.

&gt; Source/WebCore/platform/graphics/chromium/TextureCopier.cpp:78
&gt; +    // Note: this code does not restore the viewport, bound program, 2D texture, framebuffer, buffer or blend enable.

I don&apos;t know what assumptions the compositor makes about continuity of GL state; compositor folks should probably verify that this is ok.

&gt; Source/WebCore/platform/graphics/chromium/TextureCopier.cpp:83
&gt; +    GLC(context, context-&gt;clear(GraphicsContext3D::COLOR_BUFFER_BIT));

Why do you need to clear?  Is the draw below not going to write to all pixels?

&gt; Source/WebCore/platform/graphics/chromium/TextureCopier.cpp:109
&gt; +    GLC(context, context-&gt;texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MIN_FILTER, GraphicsContext3D::LINEAR));
&gt; +    GLC(context, context-&gt;texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MAG_FILTER, GraphicsContext3D::LINEAR));

Compositor folks:  check this please (does the compositor assume LINEAR?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586514</commentid>
    <comment_count>17</comment_count>
      <attachid>132591</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-03-23 11:20:25 -0700</bug_when>
    <thetext>Comment on attachment 132591
Patch

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

Thanks Stephen.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ShaderChromium.cpp:427
&gt;&gt; +String FragmentShaderRGBATexCopy::getShaderString() const
&gt; 
&gt; &lt;bikeshed&gt; I don&apos;t think this class should really have &quot;Copy&quot; in its name.  Maybe just FragmentShaderRGBATex? &lt;/bikeshed&gt;

Agreed, I&apos;ll change this.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureCopier.cpp:51
&gt;&gt; +        {0, 1}
&gt; 
&gt; You could re-use the same canonical vert buffer above for texcoords, if you don&apos;t mind doing a little math in the vert shader to turn it from 2x2 to unit.  Failing that, you could also interleave verts and texcoords, as the compositor does, which would at least save you some binding calls.

Good idea. I&apos;ll do the transformation in the vert shader, although that does make the shader a tad less general.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureCopier.cpp:78
&gt;&gt; +    // Note: this code does not restore the viewport, bound program, 2D texture, framebuffer, buffer or blend enable.
&gt; 
&gt; I don&apos;t know what assumptions the compositor makes about continuity of GL state; compositor folks should probably verify that this is ok.

We&apos;ll need to save and restore the state anyway for WebGL, but for now I chose to avoid the round trip.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureCopier.cpp:83
&gt;&gt; +    GLC(context, context-&gt;clear(GraphicsContext3D::COLOR_BUFFER_BIT));
&gt; 
&gt; Why do you need to clear?  Is the draw below not going to write to all pixels?

It&apos;s an optimization hint for tiling GPUs (e.g. Imagination SGX) so they know to discard the framebuffer contents before rendering. I was going to replace this with EXT_discard_framebuffer since tilers generally implement that, but did not around to it yet.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureCopier.cpp:109
&gt;&gt; +    GLC(context, context-&gt;texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MAG_FILTER, GraphicsContext3D::LINEAR));
&gt; 
&gt; Compositor folks:  check this please (does the compositor assume LINEAR?)

AFAIK the compositor resets the filter to linear every time it draws a quad -- which probably should be fixed :P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586623</commentid>
    <comment_count>18</comment_count>
      <attachid>132591</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-23 12:43:46 -0700</bug_when>
    <thetext>Comment on attachment 132591
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureCopier.cpp:78
&gt;&gt;&gt; +    // Note: this code does not restore the viewport, bound program, 2D texture, framebuffer, buffer or blend enable.
&gt;&gt; 
&gt;&gt; I don&apos;t know what assumptions the compositor makes about continuity of GL state; compositor folks should probably verify that this is ok.
&gt; 
&gt; We&apos;ll need to save and restore the state anyway for WebGL, but for now I chose to avoid the round trip.

It looks like you&apos;re making these calls outside of a LayerRendererChromium frame.  We restore viewport, program, texture, framebuffer, buffer, and blend enable before each frame there.  LRC should probably be better documented, but I don&apos;t see anything wrong with this code.

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureCopier.cpp:83
&gt;&gt;&gt; +    GLC(context, context-&gt;clear(GraphicsContext3D::COLOR_BUFFER_BIT));
&gt;&gt; 
&gt;&gt; Why do you need to clear?  Is the draw below not going to write to all pixels?
&gt; 
&gt; It&apos;s an optimization hint for tiling GPUs (e.g. Imagination SGX) so they know to discard the framebuffer contents before rendering. I was going to replace this with EXT_discard_framebuffer since tilers generally implement that, but did not around to it yet.

Maybe you should #ifdef this then? Extraneous clears will hurt on some platforms.

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureCopier.cpp:109
&gt;&gt;&gt; +    GLC(context, context-&gt;texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MAG_FILTER, GraphicsContext3D::LINEAR));
&gt;&gt; 
&gt;&gt; Compositor folks:  check this please (does the compositor assume LINEAR?)
&gt; 
&gt; AFAIK the compositor resets the filter to linear every time it draws a quad -- which probably should be fixed :P

It does set it to linear every time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586657</commentid>
    <comment_count>19</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-03-23 13:08:23 -0700</bug_when>
    <thetext>Haven&apos;t looked at this in detail, but I hope that the ability to do these types of copies is modular such that we can use this for tile blits as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586667</commentid>
    <comment_count>20</comment_count>
      <attachid>132591</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-03-23 13:20:49 -0700</bug_when>
    <thetext>Comment on attachment 132591
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureCopier.cpp:78
&gt;&gt;&gt; +    // Note: this code does not restore the viewport, bound program, 2D texture, framebuffer, buffer or blend enable.
&gt;&gt; 
&gt;&gt; I don&apos;t know what assumptions the compositor makes about continuity of GL state; compositor folks should probably verify that this is ok.
&gt; 
&gt; We&apos;ll need to save and restore the state anyway for WebGL, but for now I chose to avoid the round trip.

Not sure I understand the WebGL comment:  wouldn&apos;t this always be called in the compositor context, even for WebGL?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586699</commentid>
    <comment_count>21</comment_count>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2012-03-23 13:55:18 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; This looks like good stuff, but it also overlaps with the work Jeff Timanus is currently doing to support fast texture copies at the command buffer level; see crbug.com/101051.  His work is a bit broader, in that it has to support WebGL-&gt;canvas copies as well.
&gt; 
&gt; It might be ok to have both paths (depending on your time horizon), but I thought I&apos;d mention it before diving in.

This patch does overlap a bit with my planned work.  I was adding similar functionality to the GPU process to allow for glCopyTexImage-like functionality for BGRA-to-BGRA copies.

The main differences would be that:
  - The extension has to respect the pixel-storage flags during the copy: UNPACK_FLIP_Y_WEBGL, UN​PACK_PREMULTIPLY_ALPHA_WEBGL, ​UNPACK_COLORSPACE_CONVERSION_​WEBGL
  - The context state would be explicitly tracked and preserved in the GPU process.  The extension can be invoked without concern of corrupting bound framebuffers, textures, etc.

In the longer term, I think that the work here could be replaced by a call into this extension.  However, in the near term, I think that this change can go in, because it may be another week or two before I&apos;m able to land my change.

I will be able to lift some of the shader work, and framebuffer initialization/drawing code from this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587580</commentid>
    <comment_count>22</comment_count>
      <attachid>132591</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-03-26 03:38:01 -0700</bug_when>
    <thetext>Comment on attachment 132591
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureCopier.cpp:78
&gt;&gt;&gt;&gt;&gt; +    // Note: this code does not restore the viewport, bound program, 2D texture, framebuffer, buffer or blend enable.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; I don&apos;t know what assumptions the compositor makes about continuity of GL state; compositor folks should probably verify that this is ok.
&gt;&gt;&gt; 
&gt;&gt;&gt; We&apos;ll need to save and restore the state anyway for WebGL, but for now I chose to avoid the round trip.
&gt;&gt; 
&gt;&gt; It looks like you&apos;re making these calls outside of a LayerRendererChromium frame.  We restore viewport, program, texture, framebuffer, buffer, and blend enable before each frame there.  LRC should probably be better documented, but I don&apos;t see anything wrong with this code.
&gt; 
&gt; Not sure I understand the WebGL comment:  wouldn&apos;t this always be called in the compositor context, even for WebGL?

Thanks for the clarification Enne.

I guess I misunderstood how DrawingBuffer was being used with WebGL. If WebGL also uses the compositor context for presentation, then this code should work there as well.

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureCopier.cpp:83
&gt;&gt;&gt;&gt; +    GLC(context, context-&gt;clear(GraphicsContext3D::COLOR_BUFFER_BIT));
&gt;&gt;&gt; 
&gt;&gt;&gt; Why do you need to clear?  Is the draw below not going to write to all pixels?
&gt;&gt; 
&gt;&gt; It&apos;s an optimization hint for tiling GPUs (e.g. Imagination SGX) so they know to discard the framebuffer contents before rendering. I was going to replace this with EXT_discard_framebuffer since tilers generally implement that, but did not around to it yet.
&gt; 
&gt; Maybe you should #ifdef this then? Extraneous clears will hurt on some platforms.

Agreed, I&apos;ll restrict this to OS(ANDROID) for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587588</commentid>
    <comment_count>23</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-03-26 03:55:15 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Haven&apos;t looked at this in detail, but I hope that the ability to do these types of copies is modular such that we can use this for tile blits as well.

The copier itself is modular, but the interface would need some expansion to be useful with tile blitting -- mainly transform and blending support.

I guess fast pathing compatible tile blits to EXT_framebuffer_blit could yield some gains, but I&apos;m also hoping to experiment with packing the tiles into a texture atlas to allow batching several blits into one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587597</commentid>
    <comment_count>24</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-03-26 04:10:27 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; This patch does overlap a bit with my planned work.  I was adding similar functionality to the GPU process to allow for glCopyTexImage-like functionality for BGRA-to-BGRA copies.
&gt; 
&gt; The main differences would be that:
&gt;   - The extension has to respect the pixel-storage flags during the copy: UNPACK_FLIP_Y_WEBGL, UN​PACK_PREMULTIPLY_ALPHA_WEBGL, ​UNPACK_COLORSPACE_CONVERSION_​WEBGL
&gt;   - The context state would be explicitly tracked and preserved in the GPU process.  The extension can be invoked without concern of corrupting bound framebuffers, textures, etc.
&gt; 
&gt; In the longer term, I think that the work here could be replaced by a call into this extension.  However, in the near term, I think that this change can go in, because it may be another week or two before I&apos;m able to land my change.
&gt; 
&gt; I will be able to lift some of the shader work, and framebuffer initialization/drawing code from this change.

Thanks for the update. Doing this in the GPU process sounds like the way to go in the long term. For one, restoring the state will be much cheaper there, and it may avoid the need to expose some extensions all the way to the renderer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587601</commentid>
    <comment_count>25</comment_count>
      <attachid>133772</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-03-26 04:14:49 -0700</bug_when>
    <thetext>Created attachment 133772
Patch

- Remove texcoord vertex buffer
- Only clear destination on Android
- Renamed FragmentShaderRGBATexCopy =&gt; FragmentShaderRGBATex
- Simplified test code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588035</commentid>
    <comment_count>26</comment_count>
      <attachid>133772</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-26 13:04:19 -0700</bug_when>
    <thetext>Comment on attachment 133772
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/TextureCopier.h:68
&gt; +    OwnPtr&lt;BlitProgram&gt; m_blitProgram;

I think you might also need to handle this program&apos;s cleanup in LayerRendererChromium::cleanupSharedObjects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588060</commentid>
    <comment_count>27</comment_count>
      <attachid>133772</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-03-26 13:22:01 -0700</bug_when>
    <thetext>Comment on attachment 133772
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:137
&gt; +    m_frontTexture-&gt;allocate(updater.allocator());

Sorry I didn&apos;t catch this the first time around, but is this allocating a new texture ID each time?  Or calling glTexImage2D?  (I have no idea how the allocator works).  If so, this could be expensive.  Is there a way we could do this only on first call?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588841</commentid>
    <comment_count>28</comment_count>
      <attachid>133772</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-03-27 06:53:47 -0700</bug_when>
    <thetext>Comment on attachment 133772
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:137
&gt;&gt; +    m_frontTexture-&gt;allocate(updater.allocator());
&gt; 
&gt; Sorry I didn&apos;t catch this the first time around, but is this allocating a new texture ID each time?  Or calling glTexImage2D?  (I have no idea how the allocator works).  If so, this could be expensive.  Is there a way we could do this only on first call?

Fair point. In this case m_frontTexture is a ManagedTexture whose allocation lifetime is controlled by a TextureManager. If there is enough GPU memory to go around, m_frontTexture will keep referring to the same GPU texture every time around and allocate() is a no-op.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureCopier.h:68
&gt;&gt; +    OwnPtr&lt;BlitProgram&gt; m_blitProgram;
&gt; 
&gt; I think you might also need to handle this program&apos;s cleanup in LayerRendererChromium::cleanupSharedObjects.

Good catch! Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588843</commentid>
    <comment_count>29</comment_count>
      <attachid>134049</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-03-27 06:54:18 -0700</bug_when>
    <thetext>Created attachment 134049
Patch

- Cleanup TextureCopier in LRC::cleanupSharedObjects()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589040</commentid>
    <comment_count>30</comment_count>
      <attachid>134049</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-03-27 10:49:45 -0700</bug_when>
    <thetext>Comment on attachment 134049
Patch

Looks good.  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589065</commentid>
    <comment_count>31</comment_count>
      <attachid>134049</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-27 11:18:59 -0700</bug_when>
    <thetext>Comment on attachment 134049
Patch

Clearing flags on attachment: 134049

Committed r112286: &lt;http://trac.webkit.org/changeset/112286&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589066</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-27 11:19:06 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131698</attachid>
            <date>2012-03-13 13:02:21 -0700</date>
            <delta_ts>2012-03-16 13:46:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80870-20120313200219.patch</filename>
            <type>text/plain</type>
            <size>34773</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwNDExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGQ3ZGVhNDA5OGEwYzQ2
ODVhNGQwMDBlMmNhNTVhZWM5NTAwYTNmOC4uMGU2ZTk5NDc1YmJkMTgzOTIzYmI1ZWUwZDBkNGEx
MWRjZmNkMjJmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDEyLTAzLTEzICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
VXNlIGJsaXQgaW5zdGVhZCBvZiBjb3B5IGZvciBjYW52YXMgcHJlc2VudGF0aW9uCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDg3MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBnbERyYXdBcnJheXMo
KSBpbnN0ZWFkIG9mIGdsQ29weVRleFN1YkltYWdlMkQoKSB0byBjb3B5IHRoZQorICAgICAgICBh
Y2NlbGVyYXRlZCBjYW52YXMgYmFjayBidWZmZXIgdG8gdGhlIGZyb250IGJ1ZmZlciwgYmVjYXVz
ZSB0aGUgbGF0dGVyCisgICAgICAgIGhpdHMgYSB2ZXJ5IGV4cGVuc2l2ZSBzbG93IHBhdGggb24g
c29tZSBtb2JpbGUgR1BVcy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAg
ICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRM
YXllckNocm9taXVtOjpDYW52YXMyRExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzMkRMYXllckNocm9taXVtOjp+Q2FudmFzMkRMYXllckNocm9taXVtKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNl
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNo
cm9taXVtLmg6CisgICAgICAgIChDYW52YXMyRExheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmpl
Y3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp0ZXh0dXJlQ29waWVyKToKKyAgICAgICAgKExheWVyUmVuZGVyZXJD
aHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmVydGV4U2hhZGVyUG9zVGV4SWRlbnRpdHk6
OmdldFNoYWRlclN0cmluZyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYWdtZW50U2hhZGVyUkdCQVRleENvcHk6OmdldFNoYWRlclN0cmluZyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFZl
cnRleFNoYWRlclBvc1RleElkZW50aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlZlcnRleFNoYWRl
clBvc1RleElkZW50aXR5Ojppbml0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRnJh
Z21lbnRTaGFkZXJSR0JBVGV4Q29weSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGV4dHVyZUNvcGllci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXI6OkFjY2VsZXJhdGVkVGV4dHVy
ZUNvcGllcik6CisgICAgICAgIChXZWJDb3JlOjpBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXI6On5B
Y2NlbGVyYXRlZFRleHR1cmVDb3BpZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZWxlcmF0ZWRU
ZXh0dXJlQ29waWVyOjpjb3B5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UZXh0dXJlQ29waWVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChU
ZXh0dXJlQ29waWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVDb3BpZXI6On5UZXh0dXJl
Q29waWVyKToKKyAgICAgICAgKEFjY2VsZXJhdGVkVGV4dHVyZUNvcGllcik6CisgICAgICAgIChX
ZWJDb3JlOjpBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpkb0NvbW1pdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RleHR1cmVVcGRhdGVyOjpDQ1RleHR1cmVVcGRhdGVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmg6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUZXh0dXJlVXBkYXRlcjo6Y29waWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZCk6CisKIDIwMTIt
MDMtMTEgIFZpY3RvciBDYXJidW5lICA8dmNhcmJ1bmVAYWRvYmUuY29tPgogCiAgICAgICAgIFRo
ZSBtYWluIGNvZGUgc3RydWN0dXJlIGZvciBwbGFjaW5nIGZ1dHVyZSB0ZXh0IHRyYWNrIGN1ZSBy
ZW5kZXJpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOGZlNTcyNDgxNTA2MjA3ODg3
NzZhZThmYjMzNjU1YmVmMzBkYzQ1ZC4uYTk5OTU1NjY3NWY2ODU1MjY5MGI0Y2VmNTc3Y2JhOTkx
ZjM1YjdkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAx
Mi0wMy0xMyAgU2FtaSBLeW9zdGlsYSAgPHNreW9zdGlsQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBbY2hyb21pdW1dIFVzZSBibGl0IGluc3RlYWQgb2YgY29weSBmb3IgY2FudmFzIHByZXNlbnRh
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA4
NzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUT0RP
OiBXcml0ZSBzb21lIG5ldyB0ZXN0cyBmb3IgVGV4dHVyZUNvcGllci4KKworICAgICAgICAqIHRl
c3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzMkRMYXllckNocm9taXVtVGVzdDo6ZnVsbExpZmVjeWNsZVRlc3QpOgorICAgICAgICAqIHRl
c3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorICAgICAgICAoRmFrZVRleHR1cmVDb3Bp
ZXIpOgorICAgICAgICAoV1RGOjpGYWtlVGV4dHVyZUNvcGllcjo6Y29weSk6CisgICAgICAgIChX
VEYpOgorICAgICAgICAoV1RGOjpURVNUKToKKwogMjAxMi0wMy0xMSAgU2hlcmlmZiBCb3QgIDx3
ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGlu
ZyBvdXQgcjExMDM1OS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA3Njg1NzI2NzRmMTVlYjNjOWEwMDIx
MzFiZDA3M2ZlYzExMTRkZTdlLi5hOWQyMGIzZjhjY2U1NTc4OWM2ZjY3MTY3OWNhNzEwZmE5ZTQx
NTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNDA4LDYgKzM0MDgsOCBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhY2tp
bmdUZXh0dXJlQWxsb2NhdG9yLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNw
cCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAppbmRleCA1Yzc5ZjA3NDNi
ODlhNTgzMDFmM2I4ZmIwZWM0NDE1NTEyYTUyYjNmLi5hNjZjYWYzMjdhZjI4YTk0YWFiZGUwODNm
Nzg1YWFlOWU5M2QxOWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAK
QEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgiIC8vIEZvciB0aGUgR0xDKCkgbWFjcm8KKyNpbmNsdWRlICJUZXh0dXJlQ29waWVyLmgi
CiAKICNpbmNsdWRlICJTa0NhbnZhcy5oIgogCkBAIC01NSwxOCArNTYsMTMgQEAgQ2FudmFzMkRM
YXllckNocm9taXVtOjpDYW52YXMyRExheWVyQ2hyb21pdW0oR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIGNvbnN0IEkKICAgICAsIG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9zaXplKHNp
emUpCiAgICAgLCBtX2JhY2tUZXh0dXJlSWQoMCkKLSAgICAsIG1fZmJvKDApCiAgICAgLCBtX3Vz
ZURvdWJsZUJ1ZmZlcmluZyhDQ1Byb3h5OjpoYXNJbXBsVGhyZWFkKCkpCiAgICAgLCBtX2NhbnZh
cygwKQogewotICAgIGlmIChtX3VzZURvdWJsZUJ1ZmZlcmluZykKLSAgICAgICAgR0xDKG1fY29u
dGV4dCwgbV9mYm8gPSBtX2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCkpOwogfQogCiBDYW52
YXMyRExheWVyQ2hyb21pdW06On5DYW52YXMyRExheWVyQ2hyb21pdW0oKQogewotICAgIGlmICht
X3VzZURvdWJsZUJ1ZmZlcmluZyAmJiBtX2ZibykKLSAgICAgICBHTEMobV9jb250ZXh0LCBtX2Nv
bnRleHQtPmRlbGV0ZUZyYW1lYnVmZmVyKG1fZmJvKSk7CiB9CiAKIHZvaWQgQ2FudmFzMkRMYXll
ckNocm9taXVtOjpzZXRUZXh0dXJlSWQodW5zaWduZWQgdGV4dHVyZUlkKQpAQCAtMTQxLDE1ICsx
MzcsOCBAQCB2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dAogICAgIGlmICghbV9iYWNrVGV4dHVyZUlk
IHx8ICFtX2Zyb250VGV4dHVyZSB8fCAhbV9mcm9udFRleHR1cmUtPmlzVmFsaWQobV9zaXplLCBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZnJvbnRU
ZXh0dXJlLT5iaW5kVGV4dHVyZShjb250ZXh0LCB1cGRhdGVyLmFsbG9jYXRvcigpKTsKLQotICAg
IEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSLCBtX2ZibykpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5mcmFtZWJ1
ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IG1fYmFja1RleHR1cmVJZCwgMCkpOwotICAgIC8vIEZJWE1FOiBUaGUgY29weSBvcGVyYXRpb24g
d2lsbCBmYWlsIGlmIHRoZSBtX2JhY2tUZXh0dXJlIGlzIGFsbG9jYXRlZCBhcyBCR1JBIHNpbmNl
IGdsQ29weVRleChTdWIpSW1hZ2UyRCBkb2Vzbid0Ci0gICAgLy8gICAgICAgIHN1cHBvcnQgdGhl
IEJHUkEgZm9ybWF0LiBTZWUgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03NTE0MgotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRChH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgMCwgMCwgbV9zaXplLndpZHRo
KCksIG1fc2l6ZS5oZWlnaHQoKSkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kRnJh
bWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKSk7Ci0gICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPmZsdXNoKCkpOworICAgIG1fZnJvbnRUZXh0dXJlLT5hbGxvY2F0ZSh1
cGRhdGVyLmFsbG9jYXRvcigpKTsKKyAgICB1cGRhdGVyLmNvcGllcigpLT5jb3B5KGNvbnRleHQs
IG1fYmFja1RleHR1cmVJZCwgbV9mcm9udFRleHR1cmUtPnRleHR1cmVJZCgpLCBtX3NpemUpOwog
fQogCiB2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVy
SW1wbCogbGF5ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCmluZGV4IDAzNWEy
YjM3ZTI1ODNkNjY3ZmM2ZjU2NTZiZDZiNTUwMmM3ZDEwNmUuLjE2MWQ1Zjg2YmY1ZjY2NjVmYzg1
NTY4MDk4OGM0YmMwMDBmZTBmZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5o
CkBAIC03Myw3ICs3Myw2IEBAIHByaXZhdGU6CiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29u
dGV4dDsKICAgICBJbnRTaXplIG1fc2l6ZTsKICAgICB1bnNpZ25lZCBtX2JhY2tUZXh0dXJlSWQ7
Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZibzsKICAgICAvLyBXaGVuIG1fdXNlRG91YmxlQnVm
ZmVyaW5nIGlzIHRydWUsIHRoZSBjb21wb3NpdG9yIHdpbGwgZHJhdyB1c2luZyBhIGNvcHkgb2Yg
dGhlCiAgICAgLy8gY2FudmFzJyBiYWNraW5nIHRleHR1cmUuIFRoaXMgb3B0aW9uIHNob3VsZCBi
ZSB1c2VkIHdpdGggdGhlIGNvbXBvc2l0b3IgZG9lc24ndAogICAgIC8vIHN5bmNocm9uaXplIGl0
cyBkcmF3cyB3aXRoIHRoZSBjYW52YXMgdXBkYXRlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwCmluZGV4IDRlZDg5ZmQ5ZTY3YTcyZGY3YjFiMTI0ZmRlY2FiYTI4MmZmNWFh
NGIuLjU1ODIwZGQ1NWI1MDI5MjRkNDJmOWVhYzUzZjY5NWE4MmU4MDQ0NjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUg
IlBsYXRmb3JtQ29sb3IuaCIKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNp
bmNsdWRlICJUZXh0U3RyZWFtLmgiCisjaW5jbHVkZSAiVGV4dHVyZUNvcGllci5oIgogI2luY2x1
ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUg
IlRyYWNraW5nVGV4dHVyZUFsbG9jYXRvci5oIgpAQCAtMTIzNyw2ICsxMjM4LDcgQEAgYm9vbCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkKICAgICBtX3Jl
bmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoVGV4dHVy
ZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dHVyZU1hbmFn
ZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jYXBhYmlsaXRpZXMu
bWF4VGV4dHVyZVNpemUpOworICAgIG1fdGV4dHVyZUNvcGllciA9IEFjY2VsZXJhdGVkVGV4dHVy
ZUNvcGllcjo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSk7CiAgICAgbV9jb250ZW50c1RleHR1cmVB
bGxvY2F0b3IgPSBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I6OmNyZWF0ZShtX2NvbnRleHQuZ2V0
KCkpOwogICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVBbGxvY2F0b3IgPSBUcmFja2luZ1RleHR1
cmVBbGxvY2F0b3I6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpOwogICAgIGlmIChtX2NhcGFiaWxp
dGllcy51c2luZ1RleHR1cmVVc2FnZUhpbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5oCmluZGV4IDkxZmNmNmE1MTYxOTcyN2NhZTZmMzgyMTc2MjY0ZGFjNTdkYTg0MzUuLjU1MWY4
N2Y4MWFlNGMzYzRjZDczODg4M2ZiMDAzZDY4YTU4MzZjNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgi
CiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNs
dWRlICJUZXh0dXJlQ29waWVyLmgiCiAjaW5jbHVkZSAiVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9y
LmgiCiAjaW5jbHVkZSAiVmlkZW9MYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NDYW52
YXNMYXllckltcGwuaCIKQEAgLTU4LDcgKzU5LDYgQEAgY2xhc3MgQ0NMYXllckltcGw7CiBjbGFz
cyBDQ1JlbmRlclBhc3M7CiBjbGFzcyBHZW9tZXRyeUJpbmRpbmc7CiBjbGFzcyBHcmFwaGljc0Nv
bnRleHQzRDsKLWNsYXNzIFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjsKIGNsYXNzIExheWVyUmVu
ZGVyZXJTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyOwogCiBjbGFzcyBMYXllclJl
bmRlcmVyQ2hyb21pdW1DbGllbnQgewpAQCAtMTM5LDYgKzEzOSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGdldEZyYW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYpOwog
CiAgICAgVGV4dHVyZU1hbmFnZXIqIHJlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlcigpIGNvbnN0
IHsgcmV0dXJuIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLmdldCgpOyB9CisgICAgVGV4
dHVyZUNvcGllciogdGV4dHVyZUNvcGllcigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZUNvcGll
ci5nZXQoKTsgfQogICAgIFRleHR1cmVBbGxvY2F0b3IqIHJlbmRlclN1cmZhY2VUZXh0dXJlQWxs
b2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJTdXJmYWNlVGV4dHVyZUFsbG9jYXRvci5n
ZXQoKTsgfQogICAgIFRleHR1cmVBbGxvY2F0b3IqIGNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNUZXh0dXJlQWxsb2NhdG9yLmdldCgpOyB9CiAKQEAg
LTI0Miw2ICsyNDMsNyBAQCBwcml2YXRlOgogICAgIE93blB0cjxDQ1ZpZGVvTGF5ZXJJbXBsOjpT
dHJlYW1UZXh0dXJlUHJvZ3JhbT4gbV9zdHJlYW1UZXh0dXJlTGF5ZXJQcm9ncmFtOwogCiAgICAg
T3duUHRyPFRleHR1cmVNYW5hZ2VyPiBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlcjsKKyAg
ICBPd25QdHI8QWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyPiBtX3RleHR1cmVDb3BpZXI7CiAgICAg
T3duUHRyPFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcj4gbV9jb250ZW50c1RleHR1cmVBbGxvY2F0
b3I7CiAgICAgT3duUHRyPFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcj4gbV9yZW5kZXJTdXJmYWNl
VGV4dHVyZUFsbG9jYXRvcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uY3BwCmluZGV4IDcxZDRkMWZk
MThkOTg2MjFkMmNjNGI0OWFmOWRhZWNkNjE1ZWM3ODcuLjBiYzkxMjc3Mjg5MDc3MDJlZmI5NzFh
ZGE2Zjg5ZmI5MTBhYWVlYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5jcHAKQEAgLTE4OCw2ICsx
ODgsMjAgQEAgVmVydGV4U2hhZGVyUXVhZDo6VmVydGV4U2hhZGVyUXVhZCgpCiB7CiB9CiAKK1N0
cmluZyBWZXJ0ZXhTaGFkZXJQb3NUZXhJZGVudGl0eTo6Z2V0U2hhZGVyU3RyaW5nKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gU0hBREVSKAorICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3Bvc2l0aW9u
OworICAgICAgICBhdHRyaWJ1dGUgdmVjMiBhX3RleENvb3JkOworICAgICAgICB2YXJ5aW5nIHZl
YzIgdl90ZXhDb29yZDsKKyAgICAgICAgdm9pZCBtYWluKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgZ2xfUG9zaXRpb24gPSBhX3Bvc2l0aW9uOworICAgICAgICAgICAgdl90ZXhDb29yZCA9IGFf
dGV4Q29vcmQ7CisgICAgICAgIH0KKyAgICApOworfQorCiB2b2lkIFZlcnRleFNoYWRlclF1YWQ6
OmluaXQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHByb2dyYW0pCiB7CiAg
ICAgbV9tYXRyaXhMb2NhdGlvbiA9IGNvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFt
LCAibWF0cml4Iik7CkBAIC00MTAsNiArNDI0LDIwIEBAIFN0cmluZyBGcmFnbWVudFNoYWRlclJH
QkFUZXhPcGFxdWU6OmdldFNoYWRlclN0cmluZygpIGNvbnN0CiAgICAgKTsKIH0KIAorU3RyaW5n
IEZyYWdtZW50U2hhZGVyUkdCQVRleENvcHk6OmdldFNoYWRlclN0cmluZygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFNIQURFUigKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisgICAg
ICAgIHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOworICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBz
X3RleHR1cmU7CisgICAgICAgIHZvaWQgbWFpbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZl
YzQgdGV4Q29sb3IgPSB0ZXh0dXJlMkQoc190ZXh0dXJlLCB2X3RleENvb3JkKTsKKyAgICAgICAg
ICAgIGdsX0ZyYWdDb2xvciA9IHRleENvbG9yOworICAgICAgICB9CisgICAgKTsKK30KKwogU3Ry
aW5nIEZyYWdtZW50U2hhZGVyUkdCQVRleFN3aXp6bGVBbHBoYTo6Z2V0U2hhZGVyU3RyaW5nKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gU0hBREVSKApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmgKaW5kZXggMmJk
NzYwYTk5ZmM0NjYwNzBjNTZmM2FlMjQxYzJhMjAyYTMzMDZmYS4uYzZhN2YzNjJkZDJhODQ3MDVi
YmY2OGYyMWZjZDI2YTRkMWIxOTc3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5oCkBAIC05NSw2ICs5
NSwxMiBAQCBwcml2YXRlOgogICAgIGludCBtX21hdHJpeExvY2F0aW9uOwogfTsKIAorY2xhc3Mg
VmVydGV4U2hhZGVyUG9zVGV4SWRlbnRpdHkgeworcHVibGljOgorICAgIHZvaWQgaW5pdChHcmFw
aGljc0NvbnRleHQzRCosIHVuc2lnbmVkIHByb2dyYW0pIHsgfQorICAgIFN0cmluZyBnZXRTaGFk
ZXJTdHJpbmcoKSBjb25zdDsKK307CisKIGNsYXNzIFZlcnRleFNoYWRlclBvc1RleFRyYW5zZm9y
bSB7CiBwdWJsaWM6CiAgICAgVmVydGV4U2hhZGVyUG9zVGV4VHJhbnNmb3JtKCk7CkBAIC0yMTMs
NiArMjE5LDExIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgZ2V0U2hhZGVyU3RyaW5nKCkgY29uc3Q7
CiB9OwogCitjbGFzcyBGcmFnbWVudFNoYWRlclJHQkFUZXhDb3B5IDogcHVibGljIEZyYWdtZW50
VGV4T3BhcXVlQmluZGluZyB7CitwdWJsaWM6CisgICAgU3RyaW5nIGdldFNoYWRlclN0cmluZygp
IGNvbnN0OworfTsKKwogLy8gU3dpenpsZXMgdGhlIHJlZCBhbmQgYmx1ZSBjb21wb25lbnQgb2Yg
c2FtcGxlZCB0ZXhlbCB3aXRoIGFscGhhLgogY2xhc3MgRnJhZ21lbnRTaGFkZXJSR0JBVGV4U3dp
enpsZUFscGhhIDogcHVibGljIEZyYWdtZW50VGV4QWxwaGFCaW5kaW5nIHsKIHB1YmxpYzoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1
cmVDb3BpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGV4dHVyZUNvcGllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTVmODg4YTk1ZjRmMzJkZmU5OTY0NjJkYmQ1
OThiMGM1YjBkMWNjYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuY3BwCkBAIC0wLDAgKzEsMTIyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVGV4dHVyZUNv
cGllci5oIgorCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiIC8vIEZvciB0aGUg
R0xDKCkgbWFjcm8KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorQWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyOjpBY2NlbGVyYXRlZFRleHR1
cmVDb3BpZXIoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKKyAgICA6IG1f
Y29udGV4dChjb250ZXh0KQoreworICAgIEdMQyhtX2NvbnRleHQsIG1fZmJvID0gbV9jb250ZXh0
LT5jcmVhdGVGcmFtZWJ1ZmZlcigpKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX3Bvc2l0aW9uQnVm
ZmVyID0gbV9jb250ZXh0LT5jcmVhdGVCdWZmZXIoKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV90
ZXhDb29yZEJ1ZmZlciA9IG1fY29udGV4dC0+Y3JlYXRlQnVmZmVyKCkpOworCisgICAgc3RhdGlj
IGNvbnN0IGZsb2F0IGtQb3NpdGlvbnNbNF1bNF0gPSB7CisgICAgICAgIHstMSwgLTEsIDAsIDF9
LAorICAgICAgICB7IDEsIC0xLCAwLCAxfSwKKyAgICAgICAgeyAxLCAxLCAwLCAxfSwKKyAgICAg
ICAgey0xLCAxLCAwLCAxfQorICAgIH07CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IGtUZXhDb29y
ZHNbNF1bMl0gPSB7CisgICAgICAgIHswLCAwfSwKKyAgICAgICAgezEsIDB9LAorICAgICAgICB7
MSwgMX0sCisgICAgICAgIHswLCAxfQorICAgIH07CisKKyAgICBHTEMobV9jb250ZXh0LmdldCgp
LCBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwg
bV9wb3NpdGlvbkJ1ZmZlcikpOworICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+
YnVmZmVyRGF0YShHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBzaXplb2Yoa1Bvc2l0
aW9ucyksIGtQb3NpdGlvbnMsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVykpOworICAg
IEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6QVJSQVlfQlVGRkVSLCBtX3RleENvb3JkQnVmZmVyKSk7CisgICAgR0xDKG1fY29udGV4
dC5nZXQoKSwgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9C
VUZGRVIsIHNpemVvZihrVGV4Q29vcmRzKSwga1RleENvb3JkcywgR3JhcGhpY3NDb250ZXh0M0Q6
OlNUQVRJQ19EUkFXKSk7CisgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5iaW5k
QnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDApKTsKKworICAgIG1fYmxp
dFByb2dyYW0gPSBhZG9wdFB0cihuZXcgQmxpdFByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7Cisg
ICAgbV9ibGl0UHJvZ3JhbS0+aW5pdGlhbGl6ZShtX2NvbnRleHQuZ2V0KCkpOworfQorCitBY2Nl
bGVyYXRlZFRleHR1cmVDb3BpZXI6On5BY2NlbGVyYXRlZFRleHR1cmVDb3BpZXIoKQoreworICAg
IGlmIChtX3RleENvb3JkQnVmZmVyKQorICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQt
PmRlbGV0ZUJ1ZmZlcihtX3RleENvb3JkQnVmZmVyKSk7CisgICAgaWYgKG1fcG9zaXRpb25CdWZm
ZXIpCisgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGVsZXRlQnVmZmVyKG1fcG9z
aXRpb25CdWZmZXIpKTsKKyAgICBpZiAobV9mYm8pCisgICAgICAgIEdMQyhtX2NvbnRleHQsIG1f
Y29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9mYm8pKTsKK30KKwordm9pZCBBY2NlbGVyYXRl
ZFRleHR1cmVDb3BpZXI6OmNvcHkoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVk
IHNvdXJjZVRleHR1cmVJZCwgdW5zaWduZWQgZGVzdFRleHR1cmVJZCwgY29uc3QgSW50U2l6ZSYg
c2l6ZSkKK3sKKyAgICBUUkFDRV9FVkVOVCgiVGV4dHVyZUNvcGllcjo6Y29weSIsIHRoaXMsIDAp
OworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2ZibykpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5m
cmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBo
aWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIGRlc3RUZXh0dXJlSWQsIDApKTsKKworICAgIC8vIFRPRE86IFVzZSBFWFRfZGlzY2Fy
ZF9mcmFtZWJ1ZmZlciBvciBza2lwIGNsZWFyaW5nIGlmIGl0IGlzbid0IGF2YWlsYWJsZS4KKyAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JV
RkZFUl9CSVQpKTsKKworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgc291cmNlVGV4dHVyZUlkKSk7CisgICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4
dDNEOjpORUFSRVNUKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmko
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKSk7CisKKyAgICAvLyBUT0RP
OiBVc2UgRVhUX2ZyYW1lYnVmZmVyX2JsaXQgaWYgYXZhaWxhYmxlLgorICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT51c2VQcm9ncmFtKG1fYmxpdFByb2dyYW0tPnByb2dyYW0oKSkpOworCisgICAg
Y29uc3QgaW50IGtQb3NpdGlvbkF0dHJpYnV0ZSA9IDA7CisgICAgY29uc3QgaW50IGtUZXhDb29y
ZEF0dHJpYnV0ZSA9IDE7CisKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZEJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3Bvc2l0aW9uQnVmZmVyKSk7CisgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoa1Bvc2l0aW9uQXR0cmli
dXRlLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKSk7CisgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGtQb3NpdGlvbkF0dHJp
YnV0ZSkpOworCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV90ZXhDb29yZEJ1ZmZlcikpOworICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKGtUZXhDb29yZEF0dHJpYnV0ZSwgMiwg
R3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCkpOworICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShrVGV4Q29vcmRBdHRyaWJ1dGUpKTsK
KyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
QVJSQVlfQlVGRkVSLCAwKSk7CisKKyAgICAvLyBOb3RlOiB0aGUgdmlld3BvcnQgaXMgbm90IHJl
c3RvcmVkIGF1dG9tYXRpY2FsbHkgdG8gYXZvaWQgYSByb3VuZC10cmlwIHRvIHRoZSBzZXJ2ZXIu
CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnZpZXdwb3J0KDAsIDAsIHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5kaXNhYmxlKEdyYXBo
aWNzQ29udGV4dDNEOjpCTEVORCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5kcmF3QXJy
YXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIDAsIDQpKTsKKworICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRl
eHQzRDo6TElORUFSKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmko
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKworICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoa1Bvc2l0aW9uQXR0cmlidXRl
KSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShr
VGV4Q29vcmRBdHRyaWJ1dGUpKTsKKworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9n
cmFtKDApKTsKKworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUy
RChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xP
Ul9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDApKTsKKyAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgMCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCkpOworfQorCit9CisKKyNlbmRpZiAv
LyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjdiZGE0YmIwMWZmYmI4OGU3MTJlMjBiOThjYWNlNmJlYzNjNWI5ZQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVD
b3BpZXIuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUZXh0dXJl
Q29waWVyX2gKKyNkZWZpbmUgVGV4dHVyZUNvcGllcl9oCisKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgorI2luY2x1ZGUgIlByb2dyYW1CaW5kaW5nLmgiCisjaW5jbHVkZSAiU2hhZGVy
Q2hyb21pdW0uaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFRleHR1cmVDb3BpZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9p
ZCBjb3B5KEdyYXBoaWNzQ29udGV4dDNEKiwgdW5zaWduZWQgc291cmNlVGV4dHVyZUlkLCB1bnNp
Z25lZCBkZXN0VGV4dHVyZUlkLCBjb25zdCBJbnRTaXplJikgPSAwOworCitwcm90ZWN0ZWQ6Cisg
ICAgdmlydHVhbCB+VGV4dHVyZUNvcGllcigpIHsgfQorfTsKKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKworY2xhc3MgQWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyIDogcHVibGlj
IFRleHR1cmVDb3BpZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFjY2VsZXJhdGVkVGV4
dHVyZUNvcGllcik7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8QWNjZWxlcmF0ZWRU
ZXh0dXJlQ29waWVyPiBjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4
dCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQWNjZWxlcmF0ZWRUZXh0dXJl
Q29waWVyKGNvbnRleHQpKTsKKyAgICB9CisgICAgdmlydHVhbCB+QWNjZWxlcmF0ZWRUZXh0dXJl
Q29waWVyKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29weShHcmFwaGljc0NvbnRleHQzRCosIHVu
c2lnbmVkIHNvdXJjZVRleHR1cmVJZCwgdW5zaWduZWQgZGVzdFRleHR1cmVJZCwgY29uc3QgSW50
U2l6ZSYpOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IEFjY2VsZXJhdGVkVGV4dHVyZUNvcGll
cihQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CisKKyAgICB0eXBlZGVmIFByb2dyYW1C
aW5kaW5nPFZlcnRleFNoYWRlclBvc1RleElkZW50aXR5LCBGcmFnbWVudFNoYWRlclJHQkFUZXhD
b3B5PiBCbGl0UHJvZ3JhbTsKKworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250
ZXh0OworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mYm87CisgICAgUGxhdGZvcm0zRE9iamVjdCBt
X3Bvc2l0aW9uQnVmZmVyOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV90ZXhDb29yZEJ1ZmZlcjsK
KyAgICBPd25QdHI8QmxpdFByb2dyYW0+IG1fYmxpdFByb2dyYW07Cit9OworCisjZW5kaWYgLy8g
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJl
YWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAppbmRleCBiNmZjNzZiNTJlOGJkZjRmZWE5NzU1MGEy
MTZlZjEzMmZmN2I1YmY1Li42Y2Y4ODYzYjRkNjM3ZTZmZWE2YWEzM2ZmNTRmNTQ4MWFhZTgxMjI5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAtMjAwLDcgKzIw
MCw3IEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6ZG9Db21taXQoKQogICAgICAgICBtX2xh
eWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1pdCgpOwogCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC0+YmVnaW5Db21taXRPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7Ci0g
ICAgICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcihtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250
ZW50c1RleHR1cmVBbGxvY2F0b3IoKSk7CisgICAgICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRl
cihtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVBbGxvY2F0b3IoKSwgbV9sYXll
clRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT50ZXh0dXJlQ29waWVyKCkpOwogICAgICAg
ICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMobV9sYXllclRyZWVI
b3N0SW1wbC0+Y29udGV4dCgpLCB1cGRhdGVyKTsKICAgICAgICAgdXBkYXRlci51cGRhdGUobV9s
YXllclRyZWVIb3N0SW1wbC0+Y29udGV4dCgpLCBudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgo
KSk7CiAgICAgICAgIEFTU0VSVCghdXBkYXRlci5oYXNNb3JlVXBkYXRlcygpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVy
ZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAKaW5kZXggNjZlMDhjOGJkOTNmMTgyNmEzOWI1NTNjMjk2
NTBhODNhYzA5ZThlYS4uMGNlMGY2ZDEwOThhNzM5NzdmM2JhZjgyMzJmNzIxNmIwNWU3YWQ3ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUZXh0dXJlVXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAKQEAgLTM3LDggKzM3LDkgQEAgdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DQ1RleHR1cmVVcGRh
dGVyOjpDQ1RleHR1cmVVcGRhdGVyKFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvcikKK0NDVGV4
dHVyZVVwZGF0ZXI6OkNDVGV4dHVyZVVwZGF0ZXIoVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9y
LCBUZXh0dXJlQ29waWVyKiBjb3BpZXIpCiAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCisg
ICAgLCBtX2NvcGllcihjb3BpZXIpCiAgICAgLCBtX2VudHJ5SW5kZXgoMCkKIHsKICAgICBBU1NF
UlQobV9hbGxvY2F0b3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oCmluZGV4IGRiYjUy
YzliYWQyMDQzNGRkYmY3NGM2MjhhNDQ0NWU5ZDdlOTg3ZDIuLmQyOWM2NTg2MWU5MzIzZWNmZjgy
ZGU0MGJjZGJmN2UyNDZiNDk3MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgKQEAg
LTM0LDEwICszNCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDNEOwogY2xhc3MgVGV4dHVyZUFsbG9jYXRvcjsKK2NsYXNzIFRleHR1cmVDb3BpZXI7CiAK
IGNsYXNzIENDVGV4dHVyZVVwZGF0ZXIgewogcHVibGljOgotICAgIENDVGV4dHVyZVVwZGF0ZXIo
VGV4dHVyZUFsbG9jYXRvciopOworICAgIENDVGV4dHVyZVVwZGF0ZXIoVGV4dHVyZUFsbG9jYXRv
ciosIFRleHR1cmVDb3BpZXIqKTsKICAgICB+Q0NUZXh0dXJlVXBkYXRlcigpOwogCiAgICAgdm9p
ZCBhcHBlbmQoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKQEAgLTUxLDYgKzUyLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgY2xlYXIoKTsKIAogICAgIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRv
cigpIHsgcmV0dXJuIG1fYWxsb2NhdG9yOyB9CisgICAgVGV4dHVyZUNvcGllciogY29waWVyKCkg
eyByZXR1cm4gbV9jb3BpZXI7IH0KIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgVXBkYXRlRW50cnkg
ewpAQCAtNjIsNiArNjQsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGFwcGVuZChMYXll
clRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgSW50UmVjdCYgZGVzdFJlY3QsIFZlY3RvcjxVcGRhdGVFbnRyeT4mKTsKIAogICAgIFRleHR1
cmVBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOworICAgIFRleHR1cmVDb3BpZXIqIG1fY29waWVyOwog
ICAgIHNpemVfdCBtX2VudHJ5SW5kZXg7CiAgICAgVmVjdG9yPFVwZGF0ZUVudHJ5PiBtX2VudHJp
ZXM7CiAgICAgVmVjdG9yPFVwZGF0ZUVudHJ5PiBtX3BhcnRpYWxFbnRyaWVzOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RocmVhZFByb3h5LmNwcAppbmRleCA4NDU0ZTIxZmYwODcxMzAxNjc1YjA1MDM2ZWIxNzk2ODVl
OWFmY2YxLi5jZWU1M2U4MjgwODRlZmU5MmY2MDM3NWNmZTZiOTQzMjI2NTdhZTZhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVh
ZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RocmVhZFByb3h5LmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNjL0ND
VGhyZWFkUHJveHkuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVk
ZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2lu
Y2x1ZGUgImNjL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2UuaCIKICNpbmNsdWRlICJjYy9DQ0ZyYW1l
UmF0ZUNvbnRyb2xsZXIuaCIKQEAgLTUwMSw3ICs1MDIsNyBAQCB2b2lkIENDVGhyZWFkUHJveHk6
OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxl
dGlvbgogICAgIG1fY29tbWl0Q29tcGxldGlvbkV2ZW50T25JbXBsVGhyZWFkID0gY29tcGxldGlv
bjsKIAogICAgIEFTU0VSVCghbV9jdXJyZW50VGV4dHVyZVVwZGF0ZXJPbkltcGxUaHJlYWQpOwot
ICAgIG1fY3VycmVudFRleHR1cmVVcGRhdGVyT25JbXBsVGhyZWFkID0gYWRvcHRQdHIobmV3IEND
VGV4dHVyZVVwZGF0ZXIobV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGVudHNUZXh0dXJlQWxsb2Nh
dG9yKCkpKTsKKyAgICBtX2N1cnJlbnRUZXh0dXJlVXBkYXRlck9uSW1wbFRocmVhZCA9IGFkb3B0
UHRyKG5ldyBDQ1RleHR1cmVVcGRhdGVyKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4
dHVyZUFsbG9jYXRvcigpLCBtX2xheWVyVHJlZUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCktPnRl
eHR1cmVDb3BpZXIoKSkpOwogICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlQ29tcG9zaXRvclJl
c291cmNlcyhtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZXh0KCksICptX2N1cnJlbnRUZXh0dXJl
VXBkYXRlck9uSW1wbFRocmVhZCk7CiAKICAgICBtX3NjaGVkdWxlck9uSW1wbFRocmVhZC0+YmVn
aW5GcmFtZUNvbXBsZXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCA1ODBmMTU3OTExYmFj
MGFlZGMwZDgxZWY0OTYwNDVlMWExMTU2NDE4Li5jYmVmMGExNTMzMDkxYTRhNWQ0NTRmZTkxYzky
ZTcyZmUxYzIwNzU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0Nh
bnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNp
bmNsdWRlICJGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUuaCIKICNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJUZXh0dXJl
Q29waWVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJjYy9DQ0Nh
bnZhc0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKQEAg
LTY5LDYgKzcwLDExIEBAIHB1YmxpYzoKICAgICBNT0NLX01FVEhPRDMoZGVsZXRlVGV4dHVyZSwg
dm9pZCh1bnNpZ25lZCwgY29uc3QgSW50U2l6ZSYsIEdDM0RlbnVtKSk7CiB9OwogCitjbGFzcyBN
b2NrVGV4dHVyZUNvcGllciA6IHB1YmxpYyBUZXh0dXJlQ29waWVyIHsKK3B1YmxpYzoKKyAgICBN
T0NLX01FVEhPRDQoY29weSwgdm9pZChHcmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkLCB1bnNp
Z25lZCwgY29uc3QgSW50U2l6ZSYpKTsKK307CisKIH0gLy8gbmFtZXNwYWNlCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTg2LDcgKzkyLDggQEAgcHJvdGVjdGVkOgogICAgICAgICBNb2NrQ2Fu
dmFzQ29udGV4dCYgaW1wbE1vY2sgPSAqc3RhdGljX2Nhc3Q8TW9ja0NhbnZhc0NvbnRleHQqPihH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChpbXBs
Q29udGV4dC5nZXQoKSkpOwogCiAgICAgICAgIE1vY2tUZXh0dXJlQWxsb2NhdG9yIGFsbG9jYXRv
ck1vY2s7Ci0gICAgICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmYWxsb2NhdG9yTW9jayk7
CisgICAgICAgIE1vY2tUZXh0dXJlQ29waWVyIGNvcGllck1vY2s7CisgICAgICAgIENDVGV4dHVy
ZVVwZGF0ZXIgdXBkYXRlcigmYWxsb2NhdG9yTW9jaywgJmNvcGllck1vY2spOwogCiAgICAgICAg
IGNvbnN0IEludFNpemUgc2l6ZSgzMDAsIDE1MCk7CiAgICAgICAgIGNvbnN0IHNpemVfdCBtYXhU
ZXh0dXJlU2l6ZSA9IHNpemUud2lkdGgoKSAqIHNpemUuaGVpZ2h0KCkgKiA0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5j
cHAKaW5kZXggMjUyMzIzMGUwMDVjYjkxZTE1NGQ5MTljYzdlOWM5NjVmMGY5NDEwMy4uN2RmYTk5
ZTQ5MTc5N2JhMGY5N2NjNjExOGJjNGExMjc5NTI1MmRlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0z
MCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudC5oIgogI2lu
Y2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKICNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNs
dWRlICJUZXh0dXJlQ29waWVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNs
dWRlICJXZWJDb21wb3NpdG9yLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5o
IiAvLyBGb3IgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkCkBAIC01NCw2ICs1NSwxMSBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmUodW5zaWduZWQsIGNvbnN0IEludFNp
emUmLCBHQzNEZW51bSkgeyB9CiB9OwogCitjbGFzcyBGYWtlVGV4dHVyZUNvcGllciA6IHB1Ymxp
YyBUZXh0dXJlQ29waWVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgY29weShHcmFwaGlj
c0NvbnRleHQzRCosIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3QgSW50U2l6ZSYpIHsgfQorfTsK
KwogY2xhc3MgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTsKIAogY2xhc3MgRmFrZUxheWVyVGV4dHVy
ZVVwZGF0ZXIgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlciB7CkBAIC0yNDMsNyArMjQ5LDgg
QEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGlydHlUaWxlcykKICAgICBSZWdp
b24gbm9PY2NsdXNpb247CiAKICAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2Nh
dG9yOwotICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvcik7Cisg
ICAgRmFrZVRleHR1cmVDb3BpZXIgdGV4dHVyZUNvcGllcjsKKyAgICBDQ1RleHR1cmVVcGRhdGVy
IHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IsICZ0ZXh0dXJlQ29waWVyKTsKIAogICAgIC8vIFRo
ZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWlu
dHMgdHdvIHRpbGVzLgogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwpA
QCAtMjc5LDcgKzI4Niw4IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaE9jY2x1
ZGVkRGlydHlUaWxlcykKICAgICBSZWdpb24gbm9PY2NsdXNpb247CiAKICAgICBGYWtlVGV4dHVy
ZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9yOwotICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRl
cigmdGV4dHVyZUFsbG9jYXRvcik7CisgICAgRmFrZVRleHR1cmVDb3BpZXIgdGV4dHVyZUNvcGll
cjsKKyAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IsICZ0ZXh0
dXJlQ29waWVyKTsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBp
bnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgogICAgIGxheWVyLT5zZXRCb3Vu
ZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwpAQCAtMzE1LDcgKzMyMyw4IEBAIFRFU1QoVGlsZWRMYXll
ckNocm9taXVtVGVzdCwgcHVzaElkbGVQYWludFRpbGVzKQogICAgIE93blB0cjxGYWtlQ0NUaWxl
ZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgw
KSkpOwogCiAgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKLSAgICBD
Q1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworICAgIEZha2VUZXh0
dXJlQ29waWVyIHRleHR1cmVDb3BpZXI7CisgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0
ZXh0dXJlQWxsb2NhdG9yLCAmdGV4dHVyZUNvcGllcik7CiAKICAgICAvLyBUaGUgdGlsZSBzaXpl
IGlzIDEwMHgxMDAuIFNldHVwIDV4NSB0aWxlcyB3aXRoIG9uZSB2aXNpYmxlIHRpbGUgaW4gdGhl
IGNlbnRlci4KICAgICBJbnRTaXplIGNvbnRlbnRCb3VuZHMoNTAwLCA1MDApOwpAQCAtMzczLDcg
KzM4Miw4IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTWFya2VkRGly
dHlEdXJpbmdQYWludCkKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1w
bChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKIAogICAgIEZha2VUZXh0
dXJlQWxsb2NhdG9yIHRleHR1cmVBbGxvY2F0b3I7Ci0gICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRh
dGVyKCZ0ZXh0dXJlQWxsb2NhdG9yKTsKKyAgICBGYWtlVGV4dHVyZUNvcGllciB0ZXh0dXJlQ29w
aWVyOworICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvciwgJnRl
eHR1cmVDb3BpZXIpOwogICAgIFJlZ2lvbiBub09jY2x1c2lvbjsKIAogICAgIC8vIFRoZSB0aWxl
IHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdv
IHRpbGVzLgpAQCAtNDAxLDcgKzQxMSw4IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwg
cHVzaFRpbGVzTGF5ZXJNYXJrZWREaXJ0eUR1cmluZ1BhaW50T25OZXh0TGF5ZXIpCiAgICAgT3du
UHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllcjJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NU
aWxlZExheWVySW1wbCgwKSkpOwogCiAgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFs
bG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3Ip
OworICAgIEZha2VUZXh0dXJlQ29waWVyIHRleHR1cmVDb3BpZXI7CisgICAgQ0NUZXh0dXJlVXBk
YXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yLCAmdGV4dHVyZUNvcGllcik7CiAgICAgUmVn
aW9uIG5vT2NjbHVzaW9uOwogCiAgICAgbGF5ZXIxLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIw
MCkpOwpAQCAtNDM4LDcgKzQ0OSw4IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVz
aFRpbGVzTGF5ZXJNYXJrZWREaXJ0eUR1cmluZ1BhaW50T25QcmV2aW91c0xheWVyCiAgICAgT3du
UHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllcjJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NU
aWxlZExheWVySW1wbCgwKSkpOwogCiAgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFs
bG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3Ip
OworICAgIEZha2VUZXh0dXJlQ29waWVyIHRleHR1cmVDb3BpZXI7CisgICAgQ0NUZXh0dXJlVXBk
YXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yLCAmdGV4dHVyZUNvcGllcik7CiAgICAgUmVn
aW9uIG5vT2NjbHVzaW9uOwogCiAgICAgbGF5ZXIxLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIw
MCkpOwpAQCAtNDgyLDcgKzQ5NCw4IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRs
ZVBhaW50T3V0T2ZNZW1vcnkpCiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXll
ckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CiAKICAgICBGYWtl
VGV4dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9yOwotICAgIENDVGV4dHVyZVVwZGF0ZXIg
dXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvcik7CisgICAgRmFrZVRleHR1cmVDb3BpZXIgdGV4dHVy
ZUNvcGllcjsKKyAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3Is
ICZ0ZXh0dXJlQ29waWVyKTsKIAogICAgIC8vIFRoaXMgaW52YWxpZGF0ZXMgOSB0aWxlcyBhbmQg
dGhlbiBwYWludHMgb25lIHZpc2libGUgdGlsZS4KICAgICBsYXllci0+c2V0Qm91bmRzKGNvbnRl
bnRCb3VuZHMpOwpAQCAtNTE5LDcgKzUzMiw4IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgaW52YWxpZGF0ZUZyb21QcmVwYXJlKQogICAgIFJlZ2lvbiBub09jY2x1c2lvbjsKIAogICAg
IEZha2VUZXh0dXJlQWxsb2NhdG9yIHRleHR1cmVBbGxvY2F0b3I7Ci0gICAgQ0NUZXh0dXJlVXBk
YXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yKTsKKyAgICBGYWtlVGV4dHVyZUNvcGllciB0
ZXh0dXJlQ29waWVyOworICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9j
YXRvciwgJnRleHR1cmVDb3BpZXIpOwogCiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAw
LCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0d28gdGlsZXMuCiAgICAgbGF5
ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7CkBAIC01NjIsNyArNTc2LDggQEAgVEVT
VChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2ZXJpZnlVcGRhdGVSZWN0V2hlbkNvbnRlbnRCb3Vu
ZHNBcmVTY2FsZWQpCiAgICAgUmVnaW9uIG5vT2NjbHVzaW9uOwogCiAgICAgRmFrZVRleHR1cmVB
bGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIo
JnRleHR1cmVBbGxvY2F0b3IpOworICAgIEZha2VUZXh0dXJlQ29waWVyIHRleHR1cmVDb3BpZXI7
CisgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yLCAmdGV4dHVy
ZUNvcGllcik7CiAKICAgICBJbnRSZWN0IGxheWVyQm91bmRzKDAsIDAsIDMwMCwgMjAwKTsKICAg
ICBJbnRSZWN0IGNvbnRlbnRCb3VuZHMoMCwgMCwgMjAwLCAyNTApOwpAQCAtNjAwLDcgKzYxNSw4
IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmVyaWZ5SW52YWxpZGF0aW9uV2hlbkNv
bnRlbnRzU2NhbGVDaGFuZ2VzKQogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5
ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwogCiAgICAgRmFr
ZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRhdGVy
IHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworICAgIEZha2VUZXh0dXJlQ29waWVyIHRleHR1
cmVDb3BpZXI7CisgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9y
LCAmdGV4dHVyZUNvcGllcik7CiAgICAgUmVnaW9uIG5vT2NjbHVzaW9uOwogCiAgICAgLy8gQ3Jl
YXRlIGEgbGF5ZXIgd2l0aCBvbmUgdGlsZS4KQEAgLTY3Miw3ICs2ODgsOCBAQCBURVNUKFRpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QsIHNraXBzRHJhd0dldHNSZXNldCkKICAgICBjaGlsZExheWVyLT5p
bnZhbGlkYXRlUmVjdChjb250ZW50UmVjdCk7CiAKICAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0
ZXh0dXJlQWxsb2NhdG9yOwotICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFs
bG9jYXRvcik7CisgICAgRmFrZVRleHR1cmVDb3BpZXIgdGV4dHVyZUNvcGllcjsKKyAgICBDQ1Rl
eHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IsICZ0ZXh0dXJlQ29waWVyKTsK
IAogICAgIGNjTGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKHJvb3RMYXllcik7CiAgICAgY2NM
YXllclRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSgzMDAsIDMwMCkpOwpAQCAtNzMy
LDcgKzc0OSw4IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFydGlhbFVwZGF0ZXMp
CiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0KTsKIAogICAgIEZha2VUZXh0
dXJlQWxsb2NhdG9yIHRleHR1cmVBbGxvY2F0b3I7Ci0gICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRh
dGVyKCZ0ZXh0dXJlQWxsb2NhdG9yKTsKKyAgICBGYWtlVGV4dHVyZUNvcGllciB0ZXh0dXJlQ29w
aWVyOworICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvciwgJnRl
eHR1cmVDb3BpZXIpOwogCiAgICAgY2NMYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIobGF5ZXIp
OwogICAgIGNjTGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoMzAwLCAyMDAp
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132368</attachid>
            <date>2012-03-16 13:46:46 -0700</date>
            <delta_ts>2012-03-19 08:10:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80870-20120316204644.patch</filename>
            <type>text/plain</type>
            <size>46293</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwOTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWZiODQ0ZGUzZjIwNzU2
ODVlYzYyY2E5MDBiNTljN2YxMTRkZDg3MC4uNzRiM2JlMjE5NWYxMTI3MzEzMTJmYmE4M2Q1NjYy
ZmI4MmNhNzgzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTAzLTE2ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
QWRkIFRleHR1cmVDb3BpZXIgZm9yIGNvcHlpbmcgdGV4dHVyZSBjb250ZW50cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA4NzAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVj
ZXMgYSBUZXh0dXJlQ29waWVyIGNsYXNzIHdob3NlIGpvYiBpcyB0byBjb3B5IHRoZQorICAgICAg
ICBjb250ZW50cyBmcm9tIG9uZSBHTCB0ZXh0dXJlIHRvIGFub3RoZXIgdXNpbmcgdGhlIG1vc3Qg
ZWZmaWNpZW50IG1lYW5zCisgICAgICAgIGZvciB0aGUgY3VycmVudCBHUFUuIFRoaXMgdmVyc2lv
biB1c2VzIHJlbmRlci10by10ZXh0dXJlIHRvIGRvIHRoZSBjb3B5LAorICAgICAgICBidXQgYSBw
YXRoIGJhc2VkIG9uIEVYVF9mcmFtZWJ1ZmZlcl9ibGl0IGNhbiBiZSBhZGRlZCBsYXRlci4KKwor
ICAgICAgICBUaGUgY2xhc3MgaXMgaW50ZW5kZWQgdG8gcmVwbGFjZSB0aGUgdXNlIG9mIGltYWdl
IHBhdGggb3BlcmF0aW9ucyBzdWNoCisgICAgICAgIGFzIGdsQ29weVRleHtTdWJ9SW1hZ2UyRCBm
b3IgZHVwbGljYXRpbmcgdGV4dHVyZSBjb250ZW50cy4gVGhlIHJlYXNvbiBpcworICAgICAgICB0
aGF0IHN1Y2ggZnVuY3Rpb25zIG1heSBub3QgYmUgdmVyeSB3ZWxsIG9wdGltaXplZCBpbiBzb21l
IC0tIG1haW5seQorICAgICAgICBtb2JpbGUgLS0gR1BVIGRyaXZlcnMuCisKKyAgICAgICAgV2l0
aCB0aGlzIHBhdGNoIHRoZSBuZXcgY29waWVyIGlzIHVzZWQganVzdCBmb3IgQ2FudmFzMkQgbGF5
ZXIKKyAgICAgICAgcHJlc2VudGF0aW9uLCBidXQgYW5vdGhlciBwb3RlbnRpYWwgdXNlIGlzIGZv
ciBXZWJHTCBsYXllciBwcmVzZW50YXRpb24uCisKKyAgICAgICAgVGVzdDogd2Via2l0X3VuaXRf
dGVzdHM6IFRleHR1cmVDb3BpZXJUZXN0CisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6Q2FudmFzMkRMYXll
ckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6fkNh
bnZhczJETGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hy
b21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoQ2FudmFz
MkRMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZUNv
cGllcik6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlZlcnRleFNoYWRlclBvc1RleElkZW50aXR5OjpnZXRTaGFkZXJTdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFnbWVudFNoYWRlclJHQkFUZXhDb3B5
OjpnZXRTaGFkZXJTdHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1NoYWRlckNocm9taXVtLmg6CisgICAgICAgIChWZXJ0ZXhTaGFkZXJQb3NUZXhJZGVudGl0eSk6
CisgICAgICAgIChXZWJDb3JlOjpWZXJ0ZXhTaGFkZXJQb3NUZXhJZGVudGl0eTo6aW5pdCk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZyYWdtZW50U2hhZGVyUkdCQVRleENvcHkpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZWxlcmF0ZWRU
ZXh0dXJlQ29waWVyOjpBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyOjp+QWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2VsZXJhdGVkVGV4dHVyZUNvcGllcjo6Y29weVRleHR1cmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFRleHR1cmVDb3BpZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZUNvcGllcjo6flRleHR1cmVDb3BpZXIpOgorICAgICAgICAo
QWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2VsZXJhdGVk
VGV4dHVyZUNvcGllcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2lu
Z2xlVGhyZWFkUHJveHk6OmRvQ29tbWl0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4
dHVyZVVwZGF0ZXI6OkNDVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoQ0NUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVV
cGRhdGVyOjpjb3BpZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6YmVn
aW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkKToKKwogMjAxMi0wMy0xNSAgRGFuYSBKYW5zZW5z
ICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIE1vdmUgb3ZlcmRy
YXcgbWV0cmljcyBpbnRvIGEgdGVtcGxhdGVkIGNsYXNzIGZvciBib3RoIHBhaW50IGFuZCBkcmF3
IG1ldHJpY3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDcxMjZmM2IxOWYwNTI2ZTdk
YmNlMzRiOWQ2YWY3MmQ2YmU5MjRhMjMuLjQwYzUyMTA4M2VjMDBlYjJkZDI5MWIwMTJkNTZhZWNh
OWZlNDBlMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIw
MTItMDMtMTYgIFNhbWkgS3lvc3RpbGEgIDxza3lvc3RpbEBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgW2Nocm9taXVtXSBBZGQgVGV4dHVyZUNvcGllciBmb3IgY29weWluZyB0ZXh0dXJlIGNvbnRl
bnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDg3
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBu
ZXcgdGVzdCBmb3IgVGV4dHVyZUNvcGllci4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAg
ICAgICAqIHRlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorICAgICAgICAqIHRl
c3RzL1RleHR1cmVDb3BpZXJUZXN0LmNwcDogQWRkZWQuCisgICAgICAgICogdGVzdHMvVGlsZWRM
YXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChGYWtlVGV4dHVyZUNvcGllcik6CisgICAg
ICAgIChXVEY6OkZha2VUZXh0dXJlQ29waWVyOjpjb3B5VGV4dHVyZSk6CisgICAgICAgIChXVEYp
OgorICAgICAgICAoV1RGOjpURVNUKToKKwogMjAxMi0wMy0xNSAgRGFuYSBKYW5zZW5zICA8ZGFu
YWtqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIE1vdmUgb3ZlcmRyYXcgbWV0
cmljcyBpbnRvIGEgdGVtcGxhdGVkIGNsYXNzIGZvciBib3RoIHBhaW50IGFuZCBkcmF3IG1ldHJp
Y3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKaW5kZXggY2RiZWFjOTlkMDI3NjNhNTMxNzhlYjM3MmYyYmFmYThi
OGI5YTdjNi4uYjczMTc2MTk4YzljOTAwNzA3ODc1ODc0MmFjODMyNWNjYmRjMTI4NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQpAQCAtMzQxMyw2ICszNDEzLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYWNraW5nVGV4dHVyZUFs
bG9jYXRvci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Ry
YWNraW5nVGV4dHVyZUFsbG9jYXRvci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGV4dHVyZUNvcGllci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAnLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRM
YXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggM2ZjNjAwMmM4YTIyMDllMzM4NDQ3
Y2RlNDI5MGZlNjA3NTkyYTAwYS4uMDgxNmE4YWYzOWU4NjZkZjhkNzc5MWRlZmFiMjNhMzljYjYw
YTdiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCkBAIC00MCw2ICs0
MCw3IEBACiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIiAvLyBG
b3IgdGhlIEdMQygpIG1hY3JvCisjaW5jbHVkZSAiVGV4dHVyZUNvcGllci5oIgogCiAjaW5jbHVk
ZSAiU2tDYW52YXMuaCIKIApAQCAtNTYsMTggKzU3LDEzIEBAIENhbnZhczJETGF5ZXJDaHJvbWl1
bTo6Q2FudmFzMkRMYXllckNocm9taXVtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNv
bnRlCiAgICAgLCBtX2NvbnRleHRMb3N0KGZhbHNlKQogICAgICwgbV9zaXplKHNpemUpCiAgICAg
LCBtX2JhY2tUZXh0dXJlSWQoMCkKLSAgICAsIG1fZmJvKDApCiAgICAgLCBtX3VzZURvdWJsZUJ1
ZmZlcmluZyhDQ1Byb3h5OjpoYXNJbXBsVGhyZWFkKCkpCiAgICAgLCBtX2NhbnZhcygwKQogewot
ICAgIGlmIChtX3VzZURvdWJsZUJ1ZmZlcmluZykKLSAgICAgICAgR0xDKG1fY29udGV4dCwgbV9m
Ym8gPSBtX2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCkpOwogfQogCiBDYW52YXMyRExheWVy
Q2hyb21pdW06On5DYW52YXMyRExheWVyQ2hyb21pdW0oKQogewotICAgIGlmIChtX3VzZURvdWJs
ZUJ1ZmZlcmluZyAmJiBtX2ZibykKLSAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRl
bGV0ZUZyYW1lYnVmZmVyKG1fZmJvKSk7CiAgICAgaWYgKG1fY29udGV4dCAmJiBsYXllclRyZWVI
b3N0KCkpCiAgICAgICAgIGxheWVyVHJlZUhvc3QoKS0+c3RvcFJhdGVMaW1pdGVyKG1fY29udGV4
dC5nZXQoKSk7CiB9CkBAIC0xMzgsMTUgKzEzNCw4IEBAIHZvaWQgQ2FudmFzMkRMYXllckNocm9t
aXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
CiAgICAgaWYgKCFtX2JhY2tUZXh0dXJlSWQgfHwgIW1fZnJvbnRUZXh0dXJlIHx8ICFtX2Zyb250
VGV4dHVyZS0+aXNWYWxpZChtX3NpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9mcm9udFRleHR1cmUtPmJpbmRUZXh0dXJlKGNvbnRleHQsIHVw
ZGF0ZXIuYWxsb2NhdG9yKCkpOwotCi0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKSk7Ci0gICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9iYWNrVGV4dHVyZUlkLCAwKSk7Ci0gICAgLy8g
RklYTUU6IFRoZSBjb3B5IG9wZXJhdGlvbiB3aWxsIGZhaWwgaWYgdGhlIG1fYmFja1RleHR1cmUg
aXMgYWxsb2NhdGVkIGFzIEJHUkEgc2luY2UgZ2xDb3B5VGV4KFN1YilJbWFnZTJEIGRvZXNuJ3QK
LSAgICAvLyAgICAgICAgc3VwcG9ydCB0aGUgQkdSQSBmb3JtYXQuIFNlZSBidWcgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTQyCi0gICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAw
LCAwLCAwLCAwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7Ci0gICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIDApKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+Zmx1c2goKSk7CisgICAg
bV9mcm9udFRleHR1cmUtPmFsbG9jYXRlKHVwZGF0ZXIuYWxsb2NhdG9yKCkpOworICAgIHVwZGF0
ZXIuY29waWVyKCktPmNvcHlUZXh0dXJlKGNvbnRleHQsIG1fYmFja1RleHR1cmVJZCwgbV9mcm9u
dFRleHR1cmUtPnRleHR1cmVJZCgpLCBtX3NpemUpOwogfQogCiB2b2lkIENhbnZhczJETGF5ZXJD
aHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVy
Q2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhczJETGF5ZXJDaHJvbWl1bS5oCmluZGV4IGNiZDRhZGM5YjliNWQzNzg0NGFkZTgxMTEzMTJm
YWY2M2Y2YjNlMWEuLjE3N2ZhZTUzMTlhMGU1YmMzM2VlNjNiNzA0NjE5MGJmODUxMWQ4ODQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
czJETGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCkBAIC03Miw3ICs3Miw2IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX2NvbnRleHRMb3N0OwogICAgIEludFNpemUgbV9zaXplOwogICAgIHVu
c2lnbmVkIG1fYmFja1RleHR1cmVJZDsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZmJvOwogICAg
IC8vIFdoZW4gbV91c2VEb3VibGVCdWZmZXJpbmcgaXMgdHJ1ZSwgdGhlIGNvbXBvc2l0b3Igd2ls
bCBkcmF3IHVzaW5nIGEgY29weSBvZiB0aGUKICAgICAvLyBjYW52YXMnIGJhY2tpbmcgdGV4dHVy
ZS4gVGhpcyBvcHRpb24gc2hvdWxkIGJlIHVzZWQgd2l0aCB0aGUgY29tcG9zaXRvciBkb2Vzbid0
CiAgICAgLy8gc3luY2hyb25pemUgaXRzIGRyYXdzIHdpdGggdGhlIGNhbnZhcyB1cGRhdGVzLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggYWNmZDc3MjMyYjJkNDRj
YTQwZjllZTcyZjExZWVjZWYwZmM4NTM5My4uMzQ0NWE2MmNiOWRhOTg1ZDA1ODUwODFjYzkxOWIx
ZDRmMmExNWNkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC00
Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1Db2xvci5oIgogI2luY2x1ZGUgIlJlbmRl
clN1cmZhY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKKyNpbmNsdWRlICJU
ZXh0dXJlQ29waWVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJU
cmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmgiCkBAIC0x
MjMwLDYgKzEyMzEsNyBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNo
YXJlZE9iamVjdHMoKQogICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyID0gVGV4dHVy
ZU1hbmFnZXI6OmNyZWF0ZShUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXModmlld3BvcnRT
aXplKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXModmlld3BvcnRTaXpl
KCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2NhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSk7CisgICAgbV90ZXh0dXJlQ29w
aWVyID0gQWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyOjpjcmVhdGUobV9jb250ZXh0LmdldCgpKTsK
ICAgICBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvciA9IFRyYWNraW5nVGV4dHVyZUFsbG9jYXRv
cjo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSk7CiAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZUFs
bG9jYXRvciA9IFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6Y3JlYXRlKG1fY29udGV4dC5nZXQo
KSk7CiAgICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nVGV4dHVyZVVzYWdlSGludCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggYTY4NzZlNWQ1Njc0M2Y0ZTE5NTM2MjI5
MWM2ZTllMDAzZTZmZDZiZC4uMzg1MzRiMWE0ZmMwNDQ4YmYxZDk0N2I5ZjQ1NjE5ZTEwMTVjNjY5
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTM4LDYgKzM4LDcgQEAK
ICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAi
TGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlRleHR1cmVDb3BpZXIuaCIKICNpbmNsdWRlICJU
cmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJWaWRlb0xheWVyQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJjYy9DQ0NhbnZhc0xheWVySW1wbC5oIgpAQCAtNTksNyArNjAsNiBAQCBj
bGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIENDUmVuZGVyUGFzczsKIGNsYXNzIEdlb21ldHJ5Qmlu
ZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwotY2xhc3MgVHJhY2tpbmdUZXh0dXJlQWxs
b2NhdG9yOwogY2xhc3MgTGF5ZXJSZW5kZXJlclN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0Fk
YXB0ZXI7CiAKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCB7CkBAIC0xNDAsNiAr
MTQwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0RnJhbWVidWZmZXJQaXhlbHModm9pZCAqcGl4
ZWxzLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICBUZXh0dXJlTWFuYWdlciogcmVuZGVyU3VyZmFj
ZVRleHR1cmVNYW5hZ2VyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1h
bmFnZXIuZ2V0KCk7IH0KKyAgICBUZXh0dXJlQ29waWVyKiB0ZXh0dXJlQ29waWVyKCkgY29uc3Qg
eyByZXR1cm4gbV90ZXh0dXJlQ29waWVyLmdldCgpOyB9CiAgICAgVGV4dHVyZUFsbG9jYXRvciog
cmVuZGVyU3VyZmFjZVRleHR1cmVBbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclN1
cmZhY2VUZXh0dXJlQWxsb2NhdG9yLmdldCgpOyB9CiAgICAgVGV4dHVyZUFsbG9jYXRvciogY29u
dGVudHNUZXh0dXJlQWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1RleHR1cmVB
bGxvY2F0b3IuZ2V0KCk7IH0KIApAQCAtMjQzLDYgKzI0NCw3IEBAIHByaXZhdGU6CiAgICAgT3du
UHRyPENDVmlkZW9MYXllckltcGw6OlN0cmVhbVRleHR1cmVQcm9ncmFtPiBtX3N0cmVhbVRleHR1
cmVMYXllclByb2dyYW07CiAKICAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IG1fcmVuZGVyU3Vy
ZmFjZVRleHR1cmVNYW5hZ2VyOworICAgIE93blB0cjxBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXI+
IG1fdGV4dHVyZUNvcGllcjsKICAgICBPd25QdHI8VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yPiBt
X2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcjsKICAgICBPd25QdHI8VHJhY2tpbmdUZXh0dXJlQWxs
b2NhdG9yPiBtX3JlbmRlclN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJv
bWl1bS5jcHAKaW5kZXggNzFkNGQxZmQxOGQ5ODYyMWQyY2M0YjQ5YWY5ZGFlY2Q2MTVlYzc4Ny4u
MGJjOTEyNzcyODkwNzcwMmVmYjk3MWFkYTZmODlmYjkxMGFhZWViOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNo
cm9taXVtLmNwcApAQCAtMTg4LDYgKzE4OCwyMCBAQCBWZXJ0ZXhTaGFkZXJRdWFkOjpWZXJ0ZXhT
aGFkZXJRdWFkKCkKIHsKIH0KIAorU3RyaW5nIFZlcnRleFNoYWRlclBvc1RleElkZW50aXR5Ojpn
ZXRTaGFkZXJTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBTSEFERVIoCisgICAgICAgIGF0
dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb247CisgICAgICAgIGF0dHJpYnV0ZSB2ZWMyIGFfdGV4Q29v
cmQ7CisgICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOworICAgICAgICB2b2lkIG1haW4o
KQorICAgICAgICB7CisgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IGFfcG9zaXRpb247CisgICAg
ICAgICAgICB2X3RleENvb3JkID0gYV90ZXhDb29yZDsKKyAgICAgICAgfQorICAgICk7Cit9CisK
IHZvaWQgVmVydGV4U2hhZGVyUXVhZDo6aW5pdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwg
dW5zaWduZWQgcHJvZ3JhbSkKIHsKICAgICBtX21hdHJpeExvY2F0aW9uID0gY29udGV4dC0+Z2V0
VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJtYXRyaXgiKTsKQEAgLTQxMCw2ICs0MjQsMjAgQEAg
U3RyaW5nIEZyYWdtZW50U2hhZGVyUkdCQVRleE9wYXF1ZTo6Z2V0U2hhZGVyU3RyaW5nKCkgY29u
c3QKICAgICApOwogfQogCitTdHJpbmcgRnJhZ21lbnRTaGFkZXJSR0JBVGV4Q29weTo6Z2V0U2hh
ZGVyU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gU0hBREVSKAorICAgICAgICBwcmVjaXNp
b24gbWVkaXVtcCBmbG9hdDsKKyAgICAgICAgdmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7CisgICAg
ICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfdGV4dHVyZTsKKyAgICAgICAgdm9pZCBtYWluKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRChzX3RleHR1cmUs
IHZfdGV4Q29vcmQpOworICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdGV4Q29sb3I7CisgICAg
ICAgIH0KKyAgICApOworfQorCiBTdHJpbmcgRnJhZ21lbnRTaGFkZXJSR0JBVGV4U3dpenpsZUFs
cGhhOjpnZXRTaGFkZXJTdHJpbmcoKSBjb25zdAogewogICAgIHJldHVybiBTSEFERVIoCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXJD
aHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hh
ZGVyQ2hyb21pdW0uaAppbmRleCAyYmQ3NjBhOTlmYzQ2NjA3MGM1NmYzYWUyNDFjMmEyMDJhMzMw
NmZhLi5jNmE3ZjM2MmRkMmE4NDcwNWJiZjY4ZjIxZmNkMjZhNGQxYjE5NzcyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1
bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NoYWRl
ckNocm9taXVtLmgKQEAgLTk1LDYgKzk1LDEyIEBAIHByaXZhdGU6CiAgICAgaW50IG1fbWF0cml4
TG9jYXRpb247CiB9OwogCitjbGFzcyBWZXJ0ZXhTaGFkZXJQb3NUZXhJZGVudGl0eSB7CitwdWJs
aWM6CisgICAgdm9pZCBpbml0KEdyYXBoaWNzQ29udGV4dDNEKiwgdW5zaWduZWQgcHJvZ3JhbSkg
eyB9CisgICAgU3RyaW5nIGdldFNoYWRlclN0cmluZygpIGNvbnN0OworfTsKKwogY2xhc3MgVmVy
dGV4U2hhZGVyUG9zVGV4VHJhbnNmb3JtIHsKIHB1YmxpYzoKICAgICBWZXJ0ZXhTaGFkZXJQb3NU
ZXhUcmFuc2Zvcm0oKTsKQEAgLTIxMyw2ICsyMTksMTEgQEAgcHVibGljOgogICAgIFN0cmluZyBn
ZXRTaGFkZXJTdHJpbmcoKSBjb25zdDsKIH07CiAKK2NsYXNzIEZyYWdtZW50U2hhZGVyUkdCQVRl
eENvcHkgOiBwdWJsaWMgRnJhZ21lbnRUZXhPcGFxdWVCaW5kaW5nIHsKK3B1YmxpYzoKKyAgICBT
dHJpbmcgZ2V0U2hhZGVyU3RyaW5nKCkgY29uc3Q7Cit9OworCiAvLyBTd2l6emxlcyB0aGUgcmVk
IGFuZCBibHVlIGNvbXBvbmVudCBvZiBzYW1wbGVkIHRleGVsIHdpdGggYWxwaGEuCiBjbGFzcyBG
cmFnbWVudFNoYWRlclJHQkFUZXhTd2l6emxlQWxwaGEgOiBwdWJsaWMgRnJhZ21lbnRUZXhBbHBo
YUJpbmRpbmcgewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUNvcGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYTA1
OWQ2M2Y3M2IxMWYzMTE0MzkxYTY3ZTUzNDU2MjQ2MTM0OWI4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUNvcGllci5j
cHAKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJUZXh0dXJlQ29waWVyLmgiCisKKyNpbmNsdWRlICJMYXllclJlbmRlcmVy
Q2hyb21pdW0uaCIgLy8gRm9yIHRoZSBHTEMoKSBtYWNybworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCitBY2NlbGVyYXRlZFRleHR1cmVD
b3BpZXI6OkFjY2VsZXJhdGVkVGV4dHVyZUNvcGllcihQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjb250ZXh0KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCit7CisgICAgR0xDKG1fY29u
dGV4dCwgbV9mYm8gPSBtX2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCkpOworICAgIEdMQyht
X2NvbnRleHQsIG1fcG9zaXRpb25CdWZmZXIgPSBtX2NvbnRleHQtPmNyZWF0ZUJ1ZmZlcigpKTsK
KyAgICBHTEMobV9jb250ZXh0LCBtX3RleENvb3JkQnVmZmVyID0gbV9jb250ZXh0LT5jcmVhdGVC
dWZmZXIoKSk7CisKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQga1Bvc2l0aW9uc1s0XVs0XSA9IHsK
KyAgICAgICAgey0xLCAtMSwgMCwgMX0sCisgICAgICAgIHsgMSwgLTEsIDAsIDF9LAorICAgICAg
ICB7IDEsIDEsIDAsIDF9LAorICAgICAgICB7LTEsIDEsIDAsIDF9CisgICAgfTsKKyAgICBzdGF0
aWMgY29uc3QgZmxvYXQga1RleENvb3Jkc1s0XVsyXSA9IHsKKyAgICAgICAgezAsIDB9LAorICAg
ICAgICB7MSwgMH0sCisgICAgICAgIHsxLCAxfSwKKyAgICAgICAgezAsIDF9CisgICAgfTsKKwor
ICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3Bvc2l0aW9uQnVmZmVyKSk7CisgICAgR0xDKG1fY29u
dGV4dC5nZXQoKSwgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJB
WV9CVUZGRVIsIHNpemVvZihrUG9zaXRpb25zKSwga1Bvc2l0aW9ucywgR3JhcGhpY3NDb250ZXh0
M0Q6OlNUQVRJQ19EUkFXKSk7CisgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5i
aW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fdGV4Q29vcmRCdWZm
ZXIpKTsKKyAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3Jh
cGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgc2l6ZW9mKGtUZXhDb29yZHMpLCBrVGV4Q29v
cmRzLCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpKTsKKyAgICBHTEMobV9jb250ZXh0
LmdldCgpLCBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JV
RkZFUiwgMCkpOworCisgICAgbV9ibGl0UHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBCbGl0UHJvZ3Jh
bShtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICBtX2JsaXRQcm9ncmFtLT5pbml0aWFsaXplKG1fY29u
dGV4dC5nZXQoKSk7Cit9CisKK0FjY2VsZXJhdGVkVGV4dHVyZUNvcGllcjo6fkFjY2VsZXJhdGVk
VGV4dHVyZUNvcGllcigpCit7CisgICAgaWYgKG1fdGV4Q29vcmRCdWZmZXIpCisgICAgICAgIEdM
QyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGVsZXRlQnVmZmVyKG1fdGV4Q29vcmRCdWZmZXIpKTsK
KyAgICBpZiAobV9wb3NpdGlvbkJ1ZmZlcikKKyAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250
ZXh0LT5kZWxldGVCdWZmZXIobV9wb3NpdGlvbkJ1ZmZlcikpOworICAgIGlmIChtX2ZibykKKyAg
ICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihtX2Zibykp
OworfQorCit2b2lkIEFjY2VsZXJhdGVkVGV4dHVyZUNvcGllcjo6Y29weVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHNvdXJjZVRleHR1cmVJZCwgdW5zaWduZWQg
ZGVzdFRleHR1cmVJZCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBUUkFDRV9FVkVOVCgi
VGV4dHVyZUNvcGllcjo6Y29weVRleHR1cmUiLCB0aGlzLCAwKTsKKworICAgIC8vIE5vdGU6IHRo
aXMgY29kZSBkb2VzIG5vdCByZXN0b3JlIHRoZSB2aWV3cG9ydCwgYm91bmQgcHJvZ3JhbSwgMkQg
dGV4dHVyZSwgZnJhbWVidWZmZXIsIGJ1ZmZlciBvciBibGVuZCBlbmFibGUuCisgICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIG1fZmJvKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4
dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6
OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgZGVzdFRl
eHR1cmVJZCwgMCkpOworCisgICAgLy8gVE9ETzogVXNlIEVYVF9kaXNjYXJkX2ZyYW1lYnVmZmVy
IG9yIHNraXAgY2xlYXJpbmcgaWYgaXQgaXNuJ3QgYXZhaWxhYmxlLgorICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCkpOwor
CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBzb3VyY2VUZXh0dXJlSWQpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1Qp
KTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwg
R3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QpKTsKKworICAgIC8vIFRPRE86IFVzZSBFWFRfZnJh
bWVidWZmZXJfYmxpdCBpZiBhdmFpbGFibGUuCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVz
ZVByb2dyYW0obV9ibGl0UHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CisKKyAgICBjb25zdCBpbnQga1Bv
c2l0aW9uQXR0cmlidXRlID0gMDsKKyAgICBjb25zdCBpbnQga1RleENvb3JkQXR0cmlidXRlID0g
MTsKKworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpBUlJBWV9CVUZGRVIsIG1fcG9zaXRpb25CdWZmZXIpKTsKKyAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihrUG9zaXRpb25BdHRyaWJ1dGUsIDQsIEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDApKTsKKyAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoa1Bvc2l0aW9uQXR0cmlidXRlKSk7CisKKyAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJS
QVlfQlVGRkVSLCBtX3RleENvb3JkQnVmZmVyKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PnZlcnRleEF0dHJpYlBvaW50ZXIoa1RleENvb3JkQXR0cmlidXRlLCAyLCBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KGtUZXhDb29yZEF0dHJpYnV0ZSkpOworICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIs
IDApKTsKKworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT52aWV3cG9ydCgwLCAwLCBzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+ZGlzYWJs
ZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCAwLCA0KSk7CisKKyAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkxJTkVBUikpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJh
bWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7CisKKyAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGtQb3NpdGlvbkF0
dHJpYnV0ZSkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5kaXNhYmxlVmVydGV4QXR0cmli
QXJyYXkoa1RleENvb3JkQXR0cmlidXRlKSk7CisKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
dXNlUHJvZ3JhbSgwKSk7CisKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+ZnJhbWVidWZmZXJU
ZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQz
RDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAw
KSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIDApKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+Ymlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApKTsKK30KKworfQorCisj
ZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUNvcGllci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUNvcGllci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmVlNGNiOWM4ZDNmMWJhYTk5MzRhNzkyYmE3NTEwYWQ1YWY0Mzk1OGQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
ZXh0dXJlQ29waWVyLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
VGV4dHVyZUNvcGllcl9oCisjZGVmaW5lIFRleHR1cmVDb3BpZXJfaAorCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJQcm9ncmFtQmluZGluZy5oIgorI2luY2x1ZGUg
IlNoYWRlckNocm9taXVtLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0dXJlQ29waWVyIHsKK3B1YmxpYzoKKyAgICAvLyBD
b3B5IHRoZSBiYXNlIGxldmVsIGNvbnRlbnRzIG9mIHxzb3VyY2VUZXh0dXJlSWR8IHRvIHxkZXN0
VGV4dHVyZUlkfC4gQm90aCB0ZXh0dXJlIG9iamVjdHMKKyAgICAvLyBtdXN0IGJlIGNvbXBsZXRl
IGFuZCBoYXZlIGEgYmFzZSBsZXZlbCBvZiB8c2l6ZXwgZGltZW5zaW9ucy4gVGhlIGNvbG9yIGZv
cm1hdHMgZG8gbm90IG5lZWQKKyAgICAvLyB0byBtYXRjaCwgYnV0IHxkZXN0VGV4dHVyZUlkfCBt
dXN0IGhhdmUgYSByZW5kZXJhYmxlIGZvcm1hdC4KKyAgICB2aXJ0dWFsIHZvaWQgY29weVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCBzb3VyY2VUZXh0dXJlSWQsIHVuc2lnbmVk
IGRlc3RUZXh0dXJlSWQsIGNvbnN0IEludFNpemUmKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2
aXJ0dWFsIH5UZXh0dXJlQ29waWVyKCkgeyB9Cit9OworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorCitjbGFzcyBBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXIgOiBwdWJsaWMgVGV4
dHVyZUNvcGllciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWNjZWxlcmF0ZWRUZXh0dXJl
Q29waWVyKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxBY2NlbGVyYXRlZFRleHR1
cmVDb3BpZXI+IGNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBBY2NlbGVyYXRlZFRleHR1cmVDb3Bp
ZXIoY29udGV4dCkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5BY2NlbGVyYXRlZFRleHR1cmVDb3Bp
ZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCos
IHVuc2lnbmVkIHNvdXJjZVRleHR1cmVJZCwgdW5zaWduZWQgZGVzdFRleHR1cmVJZCwgY29uc3Qg
SW50U2l6ZSYpOworCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgQWNjZWxlcmF0ZWRUZXh0dXJl
Q29waWVyKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsKKworcHJpdmF0ZToKKyAgICB0
eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleElkZW50aXR5LCBGcmFnbWVu
dFNoYWRlclJHQkFUZXhDb3B5PiBCbGl0UHJvZ3JhbTsKKworICAgIFJlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gbV9jb250ZXh0OworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mYm87CisgICAgUGxh
dGZvcm0zRE9iamVjdCBtX3Bvc2l0aW9uQnVmZmVyOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV90
ZXhDb29yZEJ1ZmZlcjsKKyAgICBPd25QdHI8QmxpdFByb2dyYW0+IG1fYmxpdFByb2dyYW07Cit9
OworCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAppbmRleCBiNmZjNzZiNTJl
OGJkZjRmZWE5NzU1MGEyMTZlZjEzMmZmN2I1YmY1Li42Y2Y4ODYzYjRkNjM3ZTZmZWE2YWEzM2Zm
NTRmNTQ4MWFhZTgxMjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNw
cApAQCAtMjAwLDcgKzIwMCw3IEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6ZG9Db21taXQo
KQogICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1pdCgpOwogCiAgICAgICAg
IG1fbGF5ZXJUcmVlSG9zdC0+YmVnaW5Db21taXRPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0
SW1wbC5nZXQoKSk7Ci0gICAgICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcihtX2xheWVyVHJl
ZUhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVBbGxvY2F0b3IoKSk7CisgICAgICAgIENDVGV4dHVy
ZVVwZGF0ZXIgdXBkYXRlcihtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVBbGxv
Y2F0b3IoKSwgbV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT50ZXh0dXJlQ29w
aWVyKCkpOwogICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMobV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGV4dCgpLCB1cGRhdGVyKTsKICAgICAgICAgdXBk
YXRlci51cGRhdGUobV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGV4dCgpLCBudW1lcmljX2xpbWl0
czxzaXplX3Q+OjptYXgoKSk7CiAgICAgICAgIEFTU0VSVCghdXBkYXRlci5oYXNNb3JlVXBkYXRl
cygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAKaW5kZXggNjZlMDhjOGJkOTNm
MTgyNmEzOWI1NTNjMjk2NTBhODNhYzA5ZThlYS4uMGNlMGY2ZDEwOThhNzM5NzdmM2JhZjgyMzJm
NzIxNmIwNWU3YWQ3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAKQEAgLTM3
LDggKzM3LDkgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1DQ1RleHR1cmVVcGRhdGVyOjpDQ1RleHR1cmVVcGRhdGVyKFRleHR1cmVBbGxvY2F0b3IqIGFs
bG9jYXRvcikKK0NDVGV4dHVyZVVwZGF0ZXI6OkNDVGV4dHVyZVVwZGF0ZXIoVGV4dHVyZUFsbG9j
YXRvciogYWxsb2NhdG9yLCBUZXh0dXJlQ29waWVyKiBjb3BpZXIpCiAgICAgOiBtX2FsbG9jYXRv
cihhbGxvY2F0b3IpCisgICAgLCBtX2NvcGllcihjb3BpZXIpCiAgICAgLCBtX2VudHJ5SW5kZXgo
MCkKIHsKICAgICBBU1NFUlQobV9hbGxvY2F0b3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRl
ci5oCmluZGV4IGRiYjUyYzliYWQyMDQzNGRkYmY3NGM2MjhhNDQ0NWU5ZDdlOTg3ZDIuLmQyOWM2
NTg2MWU5MzIzZWNmZjgyZGU0MGJjZGJmN2UyNDZiNDk3MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1
cmVVcGRhdGVyLmgKQEAgLTM0LDEwICszNCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgVGV4dHVyZUFsbG9jYXRvcjsKK2NsYXNzIFRl
eHR1cmVDb3BpZXI7CiAKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXIgewogcHVibGljOgotICAgIEND
VGV4dHVyZVVwZGF0ZXIoVGV4dHVyZUFsbG9jYXRvciopOworICAgIENDVGV4dHVyZVVwZGF0ZXIo
VGV4dHVyZUFsbG9jYXRvciosIFRleHR1cmVDb3BpZXIqKTsKICAgICB+Q0NUZXh0dXJlVXBkYXRl
cigpOwogCiAgICAgdm9pZCBhcHBlbmQoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKQEAgLTUx
LDYgKzUyLDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXIoKTsKIAogICAgIFRleHR1cmVBbGxv
Y2F0b3IqIGFsbG9jYXRvcigpIHsgcmV0dXJuIG1fYWxsb2NhdG9yOyB9CisgICAgVGV4dHVyZUNv
cGllciogY29waWVyKCkgeyByZXR1cm4gbV9jb3BpZXI7IH0KIAogcHJpdmF0ZToKICAgICBzdHJ1
Y3QgVXBkYXRlRW50cnkgewpAQCAtNjIsNiArNjQsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2
b2lkIGFwcGVuZChMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYg
c291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIFZlY3RvcjxVcGRhdGVFbnRyeT4m
KTsKIAogICAgIFRleHR1cmVBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOworICAgIFRleHR1cmVDb3Bp
ZXIqIG1fY29waWVyOwogICAgIHNpemVfdCBtX2VudHJ5SW5kZXg7CiAgICAgVmVjdG9yPFVwZGF0
ZUVudHJ5PiBtX2VudHJpZXM7CiAgICAgVmVjdG9yPFVwZGF0ZUVudHJ5PiBtX3BhcnRpYWxFbnRy
aWVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAppbmRleCBlMmNlNjc1ZTUwNWE3NGExYjg0
NTA0MWZhNjUzMzM4OWE1YTc0MGUyLi40MGM0MjNjNGM5MTQwMmFiMzdjMTE2MmFkYThmZGE0NzU1
MzcxNTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApAQCAtMjcsNiArMjcsNyBAQAog
I2luY2x1ZGUgImNjL0NDVGhyZWFkUHJveHkuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJh
Y2VFdmVudC5oIgogI2luY2x1ZGUgImNjL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2UuaCIKICNpbmNs
dWRlICJjYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaCIKQEAgLTQ4Miw3ICs0ODMsNyBAQCB2b2lk
IENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRp
b25FdmVudCogY29tcGxldGlvbgogICAgIG1fY29tbWl0Q29tcGxldGlvbkV2ZW50T25JbXBsVGhy
ZWFkID0gY29tcGxldGlvbjsKIAogICAgIEFTU0VSVCghbV9jdXJyZW50VGV4dHVyZVVwZGF0ZXJP
bkltcGxUaHJlYWQpOwotICAgIG1fY3VycmVudFRleHR1cmVVcGRhdGVyT25JbXBsVGhyZWFkID0g
YWRvcHRQdHIobmV3IENDVGV4dHVyZVVwZGF0ZXIobV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGVu
dHNUZXh0dXJlQWxsb2NhdG9yKCkpKTsKKyAgICBtX2N1cnJlbnRUZXh0dXJlVXBkYXRlck9uSW1w
bFRocmVhZCA9IGFkb3B0UHRyKG5ldyBDQ1RleHR1cmVVcGRhdGVyKG1fbGF5ZXJUcmVlSG9zdElt
cGwtPmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpLCBtX2xheWVyVHJlZUhvc3RJbXBsLT5sYXll
clJlbmRlcmVyKCktPnRleHR1cmVDb3BpZXIoKSkpOwogICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcyhtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZXh0KCksICpt
X2N1cnJlbnRUZXh0dXJlVXBkYXRlck9uSW1wbFRocmVhZCk7CiAKICAgICBtX3NjaGVkdWxlck9u
SW1wbFRocmVhZC0+YmVnaW5GcmFtZUNvbXBsZXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaQppbmRleCA2YTYzNDE2YjY5ZGIxMjZhMjA5OTNlZmUyYzVjZTEwZGNkZjA1NTFiLi4wMTQx
ZmZlNmM5MDI0NjMzYzNjN2Y3ODVmMDkwYjE5MDc1ZDg2ZmMyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkKQEAgLTExOSw2ICsxMTksNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL1JlZ2lv
blRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9SZW5kZXJUYWJsZUNlbGxUZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bVRlc3QuY3BwJywKKyAg
ICAgICAgICAgICd0ZXN0cy9UZXh0dXJlQ29waWVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rl
c3RzL1RleHR1cmVNYW5hZ2VyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1RpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9UaWxpbmdEYXRhVGVzdC5j
cHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExh
eWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFz
MkRMYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggNmEzZGIwMmE3YjViZGFhZmNhZWRjMWFkNmJl
ODNjMjBjNzQ3MGNhNS4uOWRmNTc1ODVjNjM0OGI1ZmNlNTFhMWY3YTY0N2E3MjFhOTdhOGMyYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hy
b21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJE
TGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRmFrZVdl
YkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
LmgiCiAjaW5jbHVkZSAiUmVnaW9uLmgiCisjaW5jbHVkZSAiVGV4dHVyZUNvcGllci5oIgogI2lu
Y2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgogI2lu
Y2x1ZGUgIldlYktpdC5oIgpAQCAtOTIsNiArOTMsMTEgQEAgcHVibGljOgogICAgIE1PQ0tfTUVU
SE9EMyhkZWxldGVUZXh0dXJlLCB2b2lkKHVuc2lnbmVkLCBjb25zdCBJbnRTaXplJiwgR0MzRGVu
dW0pKTsKIH07CiAKK2NsYXNzIE1vY2tUZXh0dXJlQ29waWVyIDogcHVibGljIFRleHR1cmVDb3Bp
ZXIgeworcHVibGljOgorICAgIE1PQ0tfTUVUSE9ENChjb3B5VGV4dHVyZSwgdm9pZChHcmFwaGlj
c0NvbnRleHQzRCosIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3QgSW50U2l6ZSYpKTsKK307CisK
IGNsYXNzIENhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QgOiBwdWJsaWMgVGVzdCB7CiBwcm90ZWN0
ZWQ6CiAgICAgdm9pZCBmdWxsTGlmZWN5Y2xlVGVzdChib29sIHRocmVhZGVkKQpAQCAtMTAxLDEx
ICsxMDcsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
bWFpbkNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29u
dGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBNb2NrQ2FudmFzQ29udGV4dCgpKSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKICAgICAgICAgUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBpbXBsQ29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IE1v
Y2tDYW52YXNDb250ZXh0KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hv
c3RXaW5kb3cpOwogCi0gICAgICAgIE1vY2tDYW52YXNDb250ZXh0JiBtYWluTW9jayA9ICpzdGF0
aWNfY2FzdDxNb2NrQ2FudmFzQ29udGV4dCo+KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0
cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKG1haW5Db250ZXh0LmdldCgpKSk7Ci0gICAgICAgIE1v
Y2tDYW52YXNDb250ZXh0JiBpbXBsTW9jayA9ICpzdGF0aWNfY2FzdDxNb2NrQ2FudmFzQ29udGV4
dCo+KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNE
KGltcGxDb250ZXh0LmdldCgpKSk7Ci0KICAgICAgICAgTW9ja1RleHR1cmVBbGxvY2F0b3IgYWxs
b2NhdG9yTW9jazsKLSAgICAgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZhbGxvY2F0b3JN
b2NrKTsKKyAgICAgICAgTW9ja1RleHR1cmVDb3BpZXIgY29waWVyTW9jazsKKyAgICAgICAgQ0NU
ZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZhbGxvY2F0b3JNb2NrLCAmY29waWVyTW9jayk7CiAKICAg
ICAgICAgY29uc3QgSW50U2l6ZSBzaXplKDMwMCwgMTUwKTsKIApAQCAtMTIwLDI4ICsxMjQsMTYg
QEAgcHJvdGVjdGVkOgogCiAgICAgICAgIGNvbnN0IFdlYkdMSWQgYmFja1RleHR1cmVJZCA9IDE7
CiAgICAgICAgIGNvbnN0IFdlYkdMSWQgZnJvbnRUZXh0dXJlSWQgPSAyOwotICAgICAgICBjb25z
dCBXZWJHTElkIGZib0lkID0gMzsKICAgICAgICAgewogICAgICAgICAgICAgSW5TZXF1ZW5jZSBz
ZXF1ZW5jZTsKIAogICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBjYW52YXMgYmFja2luZyB0
ZXh0dXJlIGlzIGRvdWJsZWJ1ZmZlcmVkIG9ubHkgd2hlbiB1c2luZyB0aGUgdGhyZWFkZWQKICAg
ICAgICAgICAgIC8vIGNvbXBvc2l0b3IuCiAgICAgICAgICAgICBpZiAodGhyZWFkZWQpIHsKLSAg
ICAgICAgICAgICAgICAvLyBTZXR1cCBDYW52YXMyRExheWVyQ2hyb21pdW0gKG9uIHRoZSBtYWlu
IHRocmVhZCkuCi0gICAgICAgICAgICAgICAgRVhQRUNUX0NBTEwobWFpbk1vY2ssIGNyZWF0ZUZy
YW1lYnVmZmVyKCkpCi0gICAgICAgICAgICAgICAgICAgIC5XaWxsT25jZShSZXR1cm4oZmJvSWQp
KTsKLQogICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0ZXh0dXJlIGFuZCBkbyB0aGUgY29weSAo
b24gdGhlIGltcGwgdGhyZWFkKS4KICAgICAgICAgICAgICAgICBFWFBFQ1RfQ0FMTChhbGxvY2F0
b3JNb2NrLCBjcmVhdGVUZXh0dXJlKHNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKICAg
ICAgICAgICAgICAgICAgICAgLldpbGxPbmNlKFJldHVybihmcm9udFRleHR1cmVJZCkpOwotICAg
ICAgICAgICAgICAgIEVYUEVDVF9DQUxMKGltcGxNb2NrLCBiaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgZnJvbnRUZXh0dXJlSWQpKTsKLSAgICAgICAgICAgICAgICBF
WFBFQ1RfQ0FMTChpbXBsTW9jaywgYmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUiwgZmJvSWQpKTsKLSAgICAgICAgICAgICAgICBFWFBFQ1RfQ0FMTChpbXBsTW9j
aywgZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBH
cmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBiYWNrVGV4dHVyZUlkLCAwKSk7Ci0gICAgICAgICAgICAgICAgRVhQRUNUX0NB
TEwoaW1wbE1vY2ssIGNvcHlUZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCAwLCAwLCAwLCAwLCAwLCAzMDAsIDE1MCkpOwotICAgICAgICAgICAgICAgIEVYUEVDVF9D
QUxMKGltcGxNb2NrLCBiaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCAwKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBUZWFyZG93biBDYW52YXMyRExheWVyQ2hy
b21pdW0uCi0gICAgICAgICAgICAgICAgRVhQRUNUX0NBTEwobWFpbk1vY2ssIGRlbGV0ZUZyYW1l
YnVmZmVyKGZib0lkKSk7CisgICAgICAgICAgICAgICAgRVhQRUNUX0NBTEwoY29waWVyTW9jaywg
Y29weVRleHR1cmUoaW1wbENvbnRleHQuZ2V0KCksIGJhY2tUZXh0dXJlSWQsIGZyb250VGV4dHVy
ZUlkLCBzaXplKSk7CiAKICAgICAgICAgICAgICAgICAvLyBUZWFyZG93biBUZXh0dXJlTWFuYWdl
ci4KICAgICAgICAgICAgICAgICBFWFBFQ1RfQ0FMTChhbGxvY2F0b3JNb2NrLCBkZWxldGVUZXh0
dXJlKGZyb250VGV4dHVyZUlkLCBzaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UZXh0dXJlQ29waWVyVGVzdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RleHR1cmVDb3BpZXJUZXN0LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mNTU4ODAxYTkzOWY3ZGM5MmFiYWM5NDlkMzA2OWQ2OWUxM2RkNDMzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UZXh0dXJlQ29waWVy
VGVzdC5jcHAKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIlRleHR1cmVDb3BpZXIuaCIKKworI2luY2x1ZGUgIkZha2VXZWJH
cmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5o
IgorCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgdGVzdGluZzo6SW5TZXF1ZW5jZTsKK3VzaW5nIHRl
c3Rpbmc6OlJldHVybjsKK3VzaW5nIHRlc3Rpbmc6OlRlc3Q7Cit1c2luZyB0ZXN0aW5nOjpfOwor
CituYW1lc3BhY2UgeworCitjbGFzcyBNb2NrQ29udGV4dCA6IHB1YmxpYyBGYWtlV2ViR3JhcGhp
Y3NDb250ZXh0M0QgeworcHVibGljOgorICAgIE1PQ0tfTUVUSE9EMChjcmVhdGVGcmFtZWJ1ZmZl
ciwgV2ViR0xJZCgpKTsKKyAgICBNT0NLX01FVEhPRDAoY3JlYXRlQnVmZmVyLCBXZWJHTElkKCkp
OworCisgICAgTU9DS19NRVRIT0QyKGJpbmRCdWZmZXIsIHZvaWQoV0dDM0RlbnVtLCBXZWJHTElk
KSk7CisgICAgTU9DS19NRVRIT0Q0KGJ1ZmZlckRhdGEsIHZvaWQoV0dDM0RlbnVtLCBXR0MzRHNp
emVpcHRyLCBjb25zdCB2b2lkKiwgV0dDM0RlbnVtKSk7CisKKyAgICBNT0NLX01FVEhPRDIoYmlu
ZEZyYW1lYnVmZmVyLCB2b2lkKFdHQzNEZW51bSwgV2ViR0xJZCkpOworICAgIE1PQ0tfTUVUSE9E
NShmcmFtZWJ1ZmZlclRleHR1cmUyRCwgdm9pZChXR0MzRGVudW0sIFdHQzNEZW51bSwgV0dDM0Rl
bnVtLCBXZWJHTElkLCBXR0MzRGludCkpOworCisgICAgTU9DS19NRVRIT0QyKGJpbmRUZXh0dXJl
LCB2b2lkKFdHQzNEZW51bSwgV2ViR0xJZCkpOworICAgIE1PQ0tfTUVUSE9EMyh0ZXhQYXJhbWV0
ZXJpLCB2b2lkKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0p
KTsKKworICAgIE1PQ0tfTUVUSE9ENCh2aWV3cG9ydCwgdm9pZChHQzNEaW50IHgsIEdDM0RpbnQg
eSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KSk7CisgICAgTU9DS19NRVRIT0Qx
KGNsZWFyLCB2b2lkKFdHQzNEYml0ZmllbGQpKTsKKyAgICBNT0NLX01FVEhPRDEoZW5hYmxlLCB2
b2lkKFdHQzNEZW51bSkpOworICAgIE1PQ0tfTUVUSE9EMShkaXNhYmxlLCB2b2lkKFdHQzNEZW51
bSkpOworCisgICAgTU9DS19NRVRIT0Q2KHZlcnRleEF0dHJpYlBvaW50ZXIsIHZvaWQoR0MzRHVp
bnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFs
aXplZCwgR0MzRHNpemVpIHN0cmlkZSwgR0MzRGludHB0ciBvZmZzZXQpKTsKKyAgICBNT0NLX01F
VEhPRDEoZW5hYmxlVmVydGV4QXR0cmliQXJyYXksIHZvaWQoR0MzRHVpbnQgaW5kZXgpKTsKKyAg
ICBNT0NLX01FVEhPRDEoZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5LCB2b2lkKEdDM0R1aW50IGlu
ZGV4KSk7CisKKyAgICBNT0NLX01FVEhPRDMoZHJhd0FycmF5cywgdm9pZChHQzNEZW51bSBtb2Rl
LCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQpKTsKKworICAgIE1PQ0tfTUVUSE9EMShk
ZWxldGVGcmFtZWJ1ZmZlciwgdm9pZChXZWJHTElkKSk7CisgICAgTU9DS19NRVRIT0QxKGRlbGV0
ZVRleHR1cmUsIHZvaWQoV2ViR0xJZCkpOworICAgIE1PQ0tfTUVUSE9EMShkZWxldGVCdWZmZXIs
IHZvaWQoV2ViR0xJZCkpOworfTsKKworVEVTVChUZXh0dXJlQ29waWVyVGVzdCwgdGVzdERyYXdB
cnJheXNDb3B5KQoreworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzOwor
ICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3
IE1vY2tDb250ZXh0KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RX
aW5kb3cpOworICAgIE1vY2tDb250ZXh0JiBtb2NrQ29udGV4dCA9ICpzdGF0aWNfY2FzdDxNb2Nr
Q29udGV4dCo+KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29u
dGV4dDNEKGNvbnRleHQuZ2V0KCkpKTsKKworICAgIGludCBmYm9JZCA9IDE7CisgICAgaW50IHBv
c2l0aW9uQnVmZmVySWQgPSAyOworICAgIGludCB0ZXhDb29yZEJ1ZmZlcklkID0gMzsKKyAgICBp
bnQgc291cmNlVGV4dHVyZUlkID0gNDsKKyAgICBpbnQgZGVzdFRleHR1cmVJZCA9IDU7CisgICAg
SW50U2l6ZSBzaXplKDI1NiwgMTI4KTsKKyAgICB7CisgICAgICAgIEluU2VxdWVuY2Ugc2VxdWVu
Y2U7CisKKyAgICAgICAgLy8gVGV4dHVyZUNvcGllciBzZXR1cAorICAgICAgICBFWFBFQ1RfQ0FM
TChtb2NrQ29udGV4dCwgY3JlYXRlRnJhbWVidWZmZXIoKSkKKyAgICAgICAgICAgIC5XaWxsT25j
ZShSZXR1cm4oZmJvSWQpKTsKKyAgICAgICAgRVhQRUNUX0NBTEwobW9ja0NvbnRleHQsIGNyZWF0
ZUJ1ZmZlcigpKQorICAgICAgICAgICAgLldpbGxPbmNlKFJldHVybihwb3NpdGlvbkJ1ZmZlcklk
KSkKKyAgICAgICAgICAgIC5XaWxsT25jZShSZXR1cm4odGV4Q29vcmRCdWZmZXJJZCkpOworICAg
ICAgICBFWFBFQ1RfQ0FMTChtb2NrQ29udGV4dCwgYmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6QVJSQVlfQlVGRkVSLCBwb3NpdGlvbkJ1ZmZlcklkKSk7CisgICAgICAgIEVYUEVDVF9DQUxM
KG1vY2tDb250ZXh0LCBidWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIs
IHNpemVvZihmbG9hdCkgKiAxNiwgXywgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKSk7
CisgICAgICAgIEVYUEVDVF9DQUxMKG1vY2tDb250ZXh0LCBiaW5kQnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpBUlJBWV9CVUZGRVIsIHRleENvb3JkQnVmZmVySWQpKTsKKyAgICAgICAgRVhQRUNU
X0NBTEwobW9ja0NvbnRleHQsIGJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JV
RkZFUiwgc2l6ZW9mKGZsb2F0KSAqIDgsIF8sIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJB
VykpOworICAgICAgICBFWFBFQ1RfQ0FMTChtb2NrQ29udGV4dCwgYmluZEJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAwKSk7CisKKyAgICAgICAgLy8gY29weVRleHR1cmUo
KQorICAgICAgICBFWFBFQ1RfQ0FMTChtb2NrQ29udGV4dCwgYmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgZmJvSWQpKTsKKyAgICAgICAgRVhQRUNUX0NBTEwo
bW9ja0NvbnRleHQsIGZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgZGVzdFRleHR1cmVJZCwgMCkpOworICAgICAgICBFWFBFQ1Rf
Q0FMTChtb2NrQ29udGV4dCwgY2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9C
SVQpKTsKKworICAgICAgICBFWFBFQ1RfQ0FMTChtb2NrQ29udGV4dCwgYmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHNvdXJjZVRleHR1cmVJZCkpOworICAgICAgICBF
WFBFQ1RfQ0FMTChtb2NrQ29udGV4dCwgdGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5FQVJFU1QpKTsKKyAgICAgICAgRVhQRUNUX0NBTEwobW9ja0NvbnRleHQs
IHRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKSk7
CisKKyAgICAgICAgRVhQRUNUX0NBTEwobW9ja0NvbnRleHQsIGJpbmRCdWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgcG9zaXRpb25CdWZmZXJJZCkpOworICAgICAgICBFWFBF
Q1RfQ0FMTChtb2NrQ29udGV4dCwgdmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKSk7CisgICAgICAgIEVYUEVDVF9DQUxMKG1vY2tD
b250ZXh0LCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKSk7CisKKyAgICAgICAgRVhQRUNUX0NB
TEwobW9ja0NvbnRleHQsIGJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZF
UiwgdGV4Q29vcmRCdWZmZXJJZCkpOworICAgICAgICBFWFBFQ1RfQ0FMTChtb2NrQ29udGV4dCwg
dmVydGV4QXR0cmliUG9pbnRlcigxLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNl
LCAwLCAwKSk7CisgICAgICAgIEVYUEVDVF9DQUxMKG1vY2tDb250ZXh0LCBlbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheSgxKSk7CisgICAgICAgIEVYUEVDVF9DQUxMKG1vY2tDb250ZXh0LCBiaW5kQnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDApKTsKKworICAgICAgICBFWFBF
Q1RfQ0FMTChtb2NrQ29udGV4dCwgdmlld3BvcnQoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpKSk7CisgICAgICAgIEVYUEVDVF9DQUxMKG1vY2tDb250ZXh0LCBkaXNhYmxlKEdyYXBo
aWNzQ29udGV4dDNEOjpCTEVORCkpOworICAgICAgICBFWFBFQ1RfQ0FMTChtb2NrQ29udGV4dCwg
ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCAwLCA0KSk7CisKKyAg
ICAgICAgRVhQRUNUX0NBTEwobW9ja0NvbnRleHQsIHRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIs
IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKyAgICAgICAgRVhQRUNUX0NBTEwobW9ja0Nv
bnRleHQsIHRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5F
QVIpKTsKKworICAgICAgICBFWFBFQ1RfQ0FMTChtb2NrQ29udGV4dCwgZGlzYWJsZVZlcnRleEF0
dHJpYkFycmF5KDApKTsKKyAgICAgICAgRVhQRUNUX0NBTEwobW9ja0NvbnRleHQsIGRpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheSgxKSk7CisKKyAgICAgICAgRVhQRUNUX0NBTEwobW9ja0NvbnRleHQs
IGZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgMCwgMCkpOworICAgICAgICBFWFBFQ1RfQ0FMTChtb2NrQ29udGV4dCwgYmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCkpOworICAgICAgICBF
WFBFQ1RfQ0FMTChtb2NrQ29udGV4dCwgYmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIDApKTsKKworICAgICAgICAvLyBUZWFyZG93biBUZXh0dXJlQ29waWVyCisgICAg
ICAgIEVYUEVDVF9DQUxMKG1vY2tDb250ZXh0LCBkZWxldGVCdWZmZXIodGV4Q29vcmRCdWZmZXJJ
ZCkpOworICAgICAgICBFWFBFQ1RfQ0FMTChtb2NrQ29udGV4dCwgZGVsZXRlQnVmZmVyKHBvc2l0
aW9uQnVmZmVySWQpKTsKKyAgICAgICAgRVhQRUNUX0NBTEwobW9ja0NvbnRleHQsIGRlbGV0ZUZy
YW1lYnVmZmVyKGZib0lkKSk7CisgICAgfQorCisgICAgT3duUHRyPEFjY2VsZXJhdGVkVGV4dHVy
ZUNvcGllcj4gY29waWVyKEFjY2VsZXJhdGVkVGV4dHVyZUNvcGllcjo6Y3JlYXRlKGNvbnRleHQp
KTsKKyAgICBjb3BpZXItPmNvcHlUZXh0dXJlKGNvbnRleHQuZ2V0KCksIHNvdXJjZVRleHR1cmVJ
ZCwgZGVzdFRleHR1cmVJZCwgc2l6ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNw
cAppbmRleCAyNTIzMjMwZTAwNWNiOTFlMTU0ZDkxOWNjN2U5Yzk2NWYwZjk0MTAzLi5iNDY4ZmZj
MjAwNTc1ODAxZTM5ZjI3YzBkMzhkNjMzYjNlNzFkYjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTMw
LDYgKzMwLDcgQEAKICNpbmNsdWRlICJGYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50LmgiCiAjaW5j
bHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgorI2luY2x1
ZGUgIlRleHR1cmVDb3BpZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1
ZGUgIldlYkNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5Lmgi
IC8vIEZvciBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQKQEAgLTU0LDYgKzU1LDExIEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVGV4dHVyZSh1bnNpZ25lZCwgY29uc3QgSW50U2l6
ZSYsIEdDM0RlbnVtKSB7IH0KIH07CiAKK2NsYXNzIEZha2VUZXh0dXJlQ29waWVyIDogcHVibGlj
IFRleHR1cmVDb3BpZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3QgSW50U2l6ZSYpIHsg
fQorfTsKKwogY2xhc3MgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTsKIAogY2xhc3MgRmFrZUxheWVy
VGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlciB7CkBAIC0yNDMsNyAr
MjQ5LDggQEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGlydHlUaWxlcykKICAg
ICBSZWdpb24gbm9PY2NsdXNpb247CiAKICAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0ZXh0dXJl
QWxsb2NhdG9yOwotICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRv
cik7CisgICAgRmFrZVRleHR1cmVDb3BpZXIgdGV4dHVyZUNvcGllcjsKKyAgICBDQ1RleHR1cmVV
cGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IsICZ0ZXh0dXJlQ29waWVyKTsKIAogICAg
IC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhl
biBwYWludHMgdHdvIHRpbGVzLgogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIw
MCkpOwpAQCAtMjc5LDcgKzI4Niw4IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVz
aE9jY2x1ZGVkRGlydHlUaWxlcykKICAgICBSZWdpb24gbm9PY2NsdXNpb247CiAKICAgICBGYWtl
VGV4dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9yOwotICAgIENDVGV4dHVyZVVwZGF0ZXIg
dXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvcik7CisgICAgRmFrZVRleHR1cmVDb3BpZXIgdGV4dHVy
ZUNvcGllcjsKKyAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3Is
ICZ0ZXh0dXJlQ29waWVyKTsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28g
dGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgogICAgIGxheWVyLT5z
ZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwpAQCAtMzE1LDcgKzMyMyw4IEBAIFRFU1QoVGls
ZWRMYXllckNocm9taXVtVGVzdCwgcHVzaElkbGVQYWludFRpbGVzKQogICAgIE93blB0cjxGYWtl
Q0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVy
SW1wbCgwKSkpOwogCiAgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsK
LSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworICAgIEZh
a2VUZXh0dXJlQ29waWVyIHRleHR1cmVDb3BpZXI7CisgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRh
dGVyKCZ0ZXh0dXJlQWxsb2NhdG9yLCAmdGV4dHVyZUNvcGllcik7CiAKICAgICAvLyBUaGUgdGls
ZSBzaXplIGlzIDEwMHgxMDAuIFNldHVwIDV4NSB0aWxlcyB3aXRoIG9uZSB2aXNpYmxlIHRpbGUg
aW4gdGhlIGNlbnRlci4KICAgICBJbnRTaXplIGNvbnRlbnRCb3VuZHMoNTAwLCA1MDApOwpAQCAt
MzczLDcgKzM4Miw4IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTWFy
a2VkRGlydHlEdXJpbmdQYWludCkKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxh
eWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKIAogICAgIEZh
a2VUZXh0dXJlQWxsb2NhdG9yIHRleHR1cmVBbGxvY2F0b3I7Ci0gICAgQ0NUZXh0dXJlVXBkYXRl
ciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yKTsKKyAgICBGYWtlVGV4dHVyZUNvcGllciB0ZXh0
dXJlQ29waWVyOworICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRv
ciwgJnRleHR1cmVDb3BpZXIpOwogICAgIFJlZ2lvbiBub09jY2x1c2lvbjsKIAogICAgIC8vIFRo
ZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWlu
dHMgdHdvIHRpbGVzLgpAQCAtNDAxLDcgKzQxMSw4IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVt
VGVzdCwgcHVzaFRpbGVzTGF5ZXJNYXJrZWREaXJ0eUR1cmluZ1BhaW50T25OZXh0TGF5ZXIpCiAg
ICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllcjJJbXBsKGFkb3B0UHRyKG5ldyBG
YWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwogCiAgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4
dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxv
Y2F0b3IpOworICAgIEZha2VUZXh0dXJlQ29waWVyIHRleHR1cmVDb3BpZXI7CisgICAgQ0NUZXh0
dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yLCAmdGV4dHVyZUNvcGllcik7CiAg
ICAgUmVnaW9uIG5vT2NjbHVzaW9uOwogCiAgICAgbGF5ZXIxLT5zZXRCb3VuZHMoSW50U2l6ZSgx
MDAsIDIwMCkpOwpAQCAtNDM4LDcgKzQ0OSw4IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgcHVzaFRpbGVzTGF5ZXJNYXJrZWREaXJ0eUR1cmluZ1BhaW50T25QcmV2aW91c0xheWVyCiAg
ICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllcjJJbXBsKGFkb3B0UHRyKG5ldyBG
YWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwogCiAgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4
dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxv
Y2F0b3IpOworICAgIEZha2VUZXh0dXJlQ29waWVyIHRleHR1cmVDb3BpZXI7CisgICAgQ0NUZXh0
dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yLCAmdGV4dHVyZUNvcGllcik7CiAg
ICAgUmVnaW9uIG5vT2NjbHVzaW9uOwogCiAgICAgbGF5ZXIxLT5zZXRCb3VuZHMoSW50U2l6ZSgx
MDAsIDIwMCkpOwpAQCAtNDgyLDcgKzQ5NCw4IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgaWRsZVBhaW50T3V0T2ZNZW1vcnkpCiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBs
PiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CiAKICAg
ICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9yOwotICAgIENDVGV4dHVyZVVw
ZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvcik7CisgICAgRmFrZVRleHR1cmVDb3BpZXIg
dGV4dHVyZUNvcGllcjsKKyAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxv
Y2F0b3IsICZ0ZXh0dXJlQ29waWVyKTsKIAogICAgIC8vIFRoaXMgaW52YWxpZGF0ZXMgOSB0aWxl
cyBhbmQgdGhlbiBwYWludHMgb25lIHZpc2libGUgdGlsZS4KICAgICBsYXllci0+c2V0Qm91bmRz
KGNvbnRlbnRCb3VuZHMpOwpAQCAtNTE5LDcgKzUzMiw4IEBAIFRFU1QoVGlsZWRMYXllckNocm9t
aXVtVGVzdCwgaW52YWxpZGF0ZUZyb21QcmVwYXJlKQogICAgIFJlZ2lvbiBub09jY2x1c2lvbjsK
IAogICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIHRleHR1cmVBbGxvY2F0b3I7Ci0gICAgQ0NUZXh0
dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yKTsKKyAgICBGYWtlVGV4dHVyZUNv
cGllciB0ZXh0dXJlQ29waWVyOworICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVy
ZUFsbG9jYXRvciwgJnRleHR1cmVDb3BpZXIpOwogCiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAx
MDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0d28gdGlsZXMuCiAg
ICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7CkBAIC01NjIsNyArNTc2LDgg
QEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2ZXJpZnlVcGRhdGVSZWN0V2hlbkNvbnRl
bnRCb3VuZHNBcmVTY2FsZWQpCiAgICAgUmVnaW9uIG5vT2NjbHVzaW9uOwogCiAgICAgRmFrZVRl
eHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRhdGVyIHVw
ZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworICAgIEZha2VUZXh0dXJlQ29waWVyIHRleHR1cmVD
b3BpZXI7CisgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yLCAm
dGV4dHVyZUNvcGllcik7CiAKICAgICBJbnRSZWN0IGxheWVyQm91bmRzKDAsIDAsIDMwMCwgMjAw
KTsKICAgICBJbnRSZWN0IGNvbnRlbnRCb3VuZHMoMCwgMCwgMjAwLCAyNTApOwpAQCAtNjAwLDcg
KzYxNSw4IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmVyaWZ5SW52YWxpZGF0aW9u
V2hlbkNvbnRlbnRzU2NhbGVDaGFuZ2VzKQogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1w
bD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwogCiAg
ICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1cmVV
cGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworICAgIEZha2VUZXh0dXJlQ29waWVy
IHRleHR1cmVDb3BpZXI7CisgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxs
b2NhdG9yLCAmdGV4dHVyZUNvcGllcik7CiAgICAgUmVnaW9uIG5vT2NjbHVzaW9uOwogCiAgICAg
Ly8gQ3JlYXRlIGEgbGF5ZXIgd2l0aCBvbmUgdGlsZS4KQEAgLTY3Miw3ICs2ODgsOCBAQCBURVNU
KFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHNraXBzRHJhd0dldHNSZXNldCkKICAgICBjaGlsZExh
eWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50UmVjdCk7CiAKICAgICBGYWtlVGV4dHVyZUFsbG9j
YXRvciB0ZXh0dXJlQWxsb2NhdG9yOwotICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4
dHVyZUFsbG9jYXRvcik7CisgICAgRmFrZVRleHR1cmVDb3BpZXIgdGV4dHVyZUNvcGllcjsKKyAg
ICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IsICZ0ZXh0dXJlQ29w
aWVyKTsKIAogICAgIGNjTGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKHJvb3RMYXllcik7CiAg
ICAgY2NMYXllclRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSgzMDAsIDMwMCkpOwpA
QCAtNzMyLDcgKzc0OSw4IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFydGlhbFVw
ZGF0ZXMpCiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0KTsKIAogICAgIEZh
a2VUZXh0dXJlQWxsb2NhdG9yIHRleHR1cmVBbGxvY2F0b3I7Ci0gICAgQ0NUZXh0dXJlVXBkYXRl
ciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yKTsKKyAgICBGYWtlVGV4dHVyZUNvcGllciB0ZXh0
dXJlQ29waWVyOworICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRv
ciwgJnRleHR1cmVDb3BpZXIpOwogCiAgICAgY2NMYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIo
bGF5ZXIpOwogICAgIGNjTGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoMzAw
LCAyMDApKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132586</attachid>
            <date>2012-03-19 08:10:22 -0700</date>
            <delta_ts>2012-03-19 09:00:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80870-20120319151020.patch</filename>
            <type>text/plain</type>
            <size>43085</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTc5YjNkNDQ3NWI4YzFm
NjUwZjRhMDhmNTkzYTBmNjU0NDdhMTQ5Yy4uNDgyZGFlY2QxZWJkYTMwZTUxZGYxOWM4NGM2YTg1
YzZjNTFlYWJlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTAzLTE2ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
QWRkIFRleHR1cmVDb3BpZXIgZm9yIGNvcHlpbmcgdGV4dHVyZSBjb250ZW50cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA4NzAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVj
ZXMgYSBUZXh0dXJlQ29waWVyIGNsYXNzIHdob3NlIGpvYiBpcyB0byBjb3B5IHRoZQorICAgICAg
ICBjb250ZW50cyBmcm9tIG9uZSBHTCB0ZXh0dXJlIHRvIGFub3RoZXIgdXNpbmcgdGhlIG1vc3Qg
ZWZmaWNpZW50IG1lYW5zCisgICAgICAgIGZvciB0aGUgY3VycmVudCBHUFUuIFRoaXMgdmVyc2lv
biB1c2VzIHJlbmRlci10by10ZXh0dXJlIHRvIGRvIHRoZSBjb3B5LAorICAgICAgICBidXQgYSBw
YXRoIGJhc2VkIG9uIEVYVF9mcmFtZWJ1ZmZlcl9ibGl0IGNhbiBiZSBhZGRlZCBsYXRlci4KKwor
ICAgICAgICBUaGUgY2xhc3MgaXMgaW50ZW5kZWQgdG8gcmVwbGFjZSB0aGUgdXNlIG9mIGltYWdl
IHBhdGggb3BlcmF0aW9ucyBzdWNoCisgICAgICAgIGFzIGdsQ29weVRleHtTdWJ9SW1hZ2UyRCBm
b3IgZHVwbGljYXRpbmcgdGV4dHVyZSBjb250ZW50cy4gVGhlIHJlYXNvbiBpcworICAgICAgICB0
aGF0IHN1Y2ggZnVuY3Rpb25zIG1heSBub3QgYmUgdmVyeSB3ZWxsIG9wdGltaXplZCBpbiBzb21l
IC0tIG1haW5seQorICAgICAgICBtb2JpbGUgLS0gR1BVIGRyaXZlcnMuCisKKyAgICAgICAgV2l0
aCB0aGlzIHBhdGNoIHRoZSBuZXcgY29waWVyIGlzIHVzZWQganVzdCBmb3IgQ2FudmFzMkQgbGF5
ZXIKKyAgICAgICAgcHJlc2VudGF0aW9uLCBidXQgYW5vdGhlciBwb3RlbnRpYWwgdXNlIGlzIGZv
ciBXZWJHTCBsYXllciBwcmVzZW50YXRpb24uCisKKyAgICAgICAgVGVzdDogd2Via2l0X3VuaXRf
dGVzdHM6IFRleHR1cmVDb3BpZXJUZXN0CisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6Q2FudmFzMkRMYXll
ckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6fkNh
bnZhczJETGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hy
b21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoQ2FudmFz
MkRMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZUNv
cGllcik6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlZlcnRleFNoYWRlclBvc1RleElkZW50aXR5OjpnZXRTaGFkZXJTdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFnbWVudFNoYWRlclJHQkFUZXhDb3B5
OjpnZXRTaGFkZXJTdHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1NoYWRlckNocm9taXVtLmg6CisgICAgICAgIChWZXJ0ZXhTaGFkZXJQb3NUZXhJZGVudGl0eSk6
CisgICAgICAgIChXZWJDb3JlOjpWZXJ0ZXhTaGFkZXJQb3NUZXhJZGVudGl0eTo6aW5pdCk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZyYWdtZW50U2hhZGVyUkdCQVRleENvcHkpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZWxlcmF0ZWRU
ZXh0dXJlQ29waWVyOjpBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyOjp+QWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2VsZXJhdGVkVGV4dHVyZUNvcGllcjo6Y29weVRleHR1cmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFRleHR1cmVDb3BpZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZUNvcGllcjo6flRleHR1cmVDb3BpZXIpOgorICAgICAgICAo
QWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2VsZXJhdGVk
VGV4dHVyZUNvcGllcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2lu
Z2xlVGhyZWFkUHJveHk6OmRvQ29tbWl0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4
dHVyZVVwZGF0ZXI6OkNDVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoQ0NUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVV
cGRhdGVyOjpjb3BpZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6YmVn
aW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkKToKKwogMjAxMi0wMy0xOCAgTWF0dCBGYWxrZW5o
YWdlbiAgPGZhbGtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRmFsbGJhY2sgdG8gY29tbW9u
IHNjcmlwdCB3aGVuIHBlci1zY3JpcHQgZm9udCBzZXR0aW5nIGlzIHRoZSBlbXB0eSBzdHJpbmcK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYzhkNzhmZmFjMjRiNjQyMDZhY2U2NzViYjA2
OTU0ODYyY2I0ZWI1YS4uZjIwZTdhMGE3NmE0NzY3NGE3ZmM0NDk4YmI1MjRmMzhhZjgyYjQxMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMi0wMy0xNiAg
U2FtaSBLeW9zdGlsYSAgPHNreW9zdGlsQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIEFkZCBUZXh0dXJlQ29waWVyIGZvciBjb3B5aW5nIHRleHR1cmUgY29udGVudHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwODcwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIG5ldyB0ZXN0IGZv
ciBUZXh0dXJlQ29waWVyLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVz
dHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgICogdGVzdHMvVGV4dHVy
ZUNvcGllclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9UaWxlZExheWVyQ2hyb21p
dW1UZXN0LmNwcDoKKyAgICAgICAgKEZha2VUZXh0dXJlQ29waWVyKToKKyAgICAgICAgKFdURjo6
RmFrZVRleHR1cmVDb3BpZXI6OmNvcHlUZXh0dXJlKToKKyAgICAgICAgKFdURik6CisgICAgICAg
IChXVEY6OlRFU1QpOgorCiAyMDEyLTAzLTE5ICBLZWlzaGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gRml4IGJ1aWxkIHRoYXQgd2FzIGJyb2tlbiBi
eSByMTExMTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMDZiZjlmMDcwYmY4NmY3ZGViNGYwN2E0MjBm
M2FjZmU5YmJhMmU5Ni4uOWI3N2IxMDUwOTdhNGYxNzI5MWM5N2Q2Y2VjZmVmZjkyZWNjNWI0OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzQzMyw2ICszNDMzLDggQEAKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYWNraW5nVGV4
dHVyZUFsbG9jYXRvci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RyYWNraW5nVGV4dHVyZUFsbG9jYXRvci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUNvcGllci5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAnLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzMkRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNzAwMzgyNmQ3MGUxOGMz
MmFhZGIxODQ2MzIxMjJkYjViMjIxMjcwZC4uMmQ3NjM4ZmJmYjcxY2I3YmRkMGU2NzU0OTFiOTFh
MTFiMmI2ZTNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCkBAIC0z
Nyw2ICszNyw3IEBACiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5o
IiAvLyBGb3IgdGhlIEdMQygpIG1hY3JvCisjaW5jbHVkZSAiVGV4dHVyZUNvcGllci5oIgogI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgImNjL0NDVGV4dHVyZUxheWVy
SW1wbC5oIgogI2luY2x1ZGUgImNjL0NDVGV4dHVyZVVwZGF0ZXIuaCIKQEAgLTU2LDE4ICs1Nywx
MyBAQCBDYW52YXMyRExheWVyQ2hyb21pdW06OkNhbnZhczJETGF5ZXJDaHJvbWl1bShQYXNzUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZQogICAgICwgbV9jb250ZXh0TG9zdChmYWxzZSkK
ICAgICAsIG1fc2l6ZShzaXplKQogICAgICwgbV9iYWNrVGV4dHVyZUlkKDApCi0gICAgLCBtX2Zi
bygwKQogICAgICwgbV91c2VEb3VibGVCdWZmZXJpbmcoQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgp
KQogICAgICwgbV9jYW52YXMoMCkKIHsKLSAgICBpZiAobV91c2VEb3VibGVCdWZmZXJpbmcpCi0g
ICAgICAgIEdMQyhtX2NvbnRleHQsIG1fZmJvID0gbV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZl
cigpKTsKIH0KIAogQ2FudmFzMkRMYXllckNocm9taXVtOjp+Q2FudmFzMkRMYXllckNocm9taXVt
KCkKIHsKLSAgICBpZiAobV91c2VEb3VibGVCdWZmZXJpbmcgJiYgbV9mYm8pCi0gICAgICAgR0xD
KG1fY29udGV4dCwgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihtX2ZibykpOwogICAgIGlm
IChtX2NvbnRleHQgJiYgbGF5ZXJUcmVlSG9zdCgpKQogICAgICAgICBsYXllclRyZWVIb3N0KCkt
PnN0b3BSYXRlTGltaXRlcihtX2NvbnRleHQuZ2V0KCkpOwogfQpAQCAtMTM4LDE1ICsxMzQsOCBA
QCB2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dAogICAgIGlmICghbV9iYWNrVGV4dHVyZUlkIHx8ICFt
X2Zyb250VGV4dHVyZSB8fCAhbV9mcm9udFRleHR1cmUtPmlzVmFsaWQobV9zaXplLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZnJvbnRUZXh0dXJl
LT5iaW5kVGV4dHVyZShjb250ZXh0LCB1cGRhdGVyLmFsbG9jYXRvcigpKTsKLQotICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBtX2ZibykpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5mcmFtZWJ1ZmZlclRl
eHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNE
OjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fYmFj
a1RleHR1cmVJZCwgMCkpOwotICAgIC8vIEZJWE1FOiBUaGUgY29weSBvcGVyYXRpb24gd2lsbCBm
YWlsIGlmIHRoZSBtX2JhY2tUZXh0dXJlIGlzIGFsbG9jYXRlZCBhcyBCR1JBIHNpbmNlIGdsQ29w
eVRleChTdWIpSW1hZ2UyRCBkb2Vzbid0Ci0gICAgLy8gICAgICAgIHN1cHBvcnQgdGhlIEJHUkEg
Zm9ybWF0LiBTZWUgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NTE0MgotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRChHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgMCwgMCwgbV9zaXplLndpZHRoKCksIG1f
c2l6ZS5oZWlnaHQoKSkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kRnJhbWVidWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKSk7Ci0gICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPmZsdXNoKCkpOworICAgIG1fZnJvbnRUZXh0dXJlLT5hbGxvY2F0ZSh1cGRhdGVy
LmFsbG9jYXRvcigpKTsKKyAgICB1cGRhdGVyLmNvcGllcigpLT5jb3B5VGV4dHVyZShjb250ZXh0
LCBtX2JhY2tUZXh0dXJlSWQsIG1fZnJvbnRUZXh0dXJlLT50ZXh0dXJlSWQoKSwgbV9zaXplKTsK
IH0KIAogdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXll
ckltcGwqIGxheWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaAppbmRleCA5MzAy
MjQ2ODRiYmU0ODBhYjg4NjQ1NGVjZDRhYWY1MGZiNTA3NzYxLi5iNWQwYzIzODkxZmIwNWI2MjE4
MjQ5MTAyNTBkNTkwYjhiNzJjNjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0u
aApAQCAtNzIsNyArNzIsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jb250ZXh0TG9zdDsKICAg
ICBJbnRTaXplIG1fc2l6ZTsKICAgICB1bnNpZ25lZCBtX2JhY2tUZXh0dXJlSWQ7Ci0gICAgUGxh
dGZvcm0zRE9iamVjdCBtX2ZibzsKICAgICAvLyBXaGVuIG1fdXNlRG91YmxlQnVmZmVyaW5nIGlz
IHRydWUsIHRoZSBjb21wb3NpdG9yIHdpbGwgZHJhdyB1c2luZyBhIGNvcHkgb2YgdGhlCiAgICAg
Ly8gY2FudmFzJyBiYWNraW5nIHRleHR1cmUuIFRoaXMgb3B0aW9uIHNob3VsZCBiZSB1c2VkIHdp
dGggdGhlIGNvbXBvc2l0b3IgZG9lc24ndAogICAgIC8vIHN5bmNocm9uaXplIGl0cyBkcmF3cyB3
aXRoIHRoZSBjYW52YXMgdXBkYXRlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwCmluZGV4IDI3YjNlZGU1MTMyNTdhN2E5ZjQ2YjlhZTI0OTIxOTZhNmM5NjM5OTAuLmU3ZWMx
M2VhODRhZTM4Y2E0MzcxMzQ2ZGNlMzY1Y2U4Y2FmNWYxZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3Jt
Q29sb3IuaCIKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJU
ZXh0U3RyZWFtLmgiCisjaW5jbHVkZSAiVGV4dHVyZUNvcGllci5oIgogI2luY2x1ZGUgIlRleHR1
cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUgIlRyYWNraW5n
VGV4dHVyZUFsbG9jYXRvci5oIgpAQCAtMTIxNSw2ICsxMjE2LDcgQEAgYm9vbCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkKICAgICBtX3JlbmRlclN1cmZh
Y2VUZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoVGV4dHVyZU1hbmFnZXI6
OmhpZ2hMaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dHVyZU1hbmFnZXI6OnJlY2xh
aW1MaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVy
ZVNpemUpOworICAgIG1fdGV4dHVyZUNvcGllciA9IEFjY2VsZXJhdGVkVGV4dHVyZUNvcGllcjo6
Y3JlYXRlKG1fY29udGV4dC5nZXQoKSk7CiAgICAgbV9jb250ZW50c1RleHR1cmVBbGxvY2F0b3Ig
PSBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpOwogICAg
IG1fcmVuZGVyU3VyZmFjZVRleHR1cmVBbGxvY2F0b3IgPSBUcmFja2luZ1RleHR1cmVBbGxvY2F0
b3I6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpOwogICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2lu
Z1RleHR1cmVVc2FnZUhpbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4
IDUyZWE4N2MxMzNiMTU3ZjFhNWUwYTg4MjBhZGRmNjMxNjFmMDhkNjMuLjg4ZmJmMzY3YmNkMmJi
Mzg2OWUxNTBkZTJiMzU1MTk1YWFhNmVjMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5oCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJUZXh0
dXJlQ29waWVyLmgiCiAjaW5jbHVkZSAiVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmgiCiAjaW5j
bHVkZSAiVmlkZW9MYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NEcmF3UXVhZC5oIgpA
QCAtNTksNyArNjAsNiBAQCBjbGFzcyBDQ1JlbmRlclBhc3M7CiBjbGFzcyBDQ1RleHR1cmVEcmF3
UXVhZDsKIGNsYXNzIEdlb21ldHJ5QmluZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwot
Y2xhc3MgVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOwogY2xhc3MgTGF5ZXJSZW5kZXJlclN3YXBC
dWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXI7CiAKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJv
bWl1bUNsaWVudCB7CkBAIC0xNDAsNiArMTQwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0RnJh
bWVidWZmZXJQaXhlbHModm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICBUZXh0
dXJlTWFuYWdlciogcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyKCkgY29uc3QgeyByZXR1cm4g
bV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIuZ2V0KCk7IH0KKyAgICBUZXh0dXJlQ29waWVy
KiB0ZXh0dXJlQ29waWVyKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlQ29waWVyLmdldCgpOyB9
CiAgICAgVGV4dHVyZUFsbG9jYXRvciogcmVuZGVyU3VyZmFjZVRleHR1cmVBbGxvY2F0b3IoKSBj
b25zdCB7IHJldHVybiBtX3JlbmRlclN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yLmdldCgpOyB9CiAg
ICAgVGV4dHVyZUFsbG9jYXRvciogY29udGVudHNUZXh0dXJlQWxsb2NhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZW50c1RleHR1cmVBbGxvY2F0b3IuZ2V0KCk7IH0KIApAQCAtMjQyLDYgKzI0
Myw3IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPENDVmlkZW9MYXllckltcGw6OlN0cmVhbVRleHR1
cmVQcm9ncmFtPiBtX3N0cmVhbVRleHR1cmVMYXllclByb2dyYW07CiAKICAgICBPd25QdHI8VGV4
dHVyZU1hbmFnZXI+IG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyOworICAgIE93blB0cjxB
Y2NlbGVyYXRlZFRleHR1cmVDb3BpZXI+IG1fdGV4dHVyZUNvcGllcjsKICAgICBPd25QdHI8VHJh
Y2tpbmdUZXh0dXJlQWxsb2NhdG9yPiBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcjsKICAgICBP
d25QdHI8VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yPiBtX3JlbmRlclN1cmZhY2VUZXh0dXJlQWxs
b2NhdG9yOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5jcHAKaW5kZXggNzFkNGQxZmQxOGQ5ODYyMWQy
Y2M0YjQ5YWY5ZGFlY2Q2MTVlYzc4Ny4uMGJjOTEyNzcyODkwNzcwMmVmYjk3MWFkYTZmODlmYjkx
MGFhZWViOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vU2hhZGVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmNwcApAQCAtMTg4LDYgKzE4OCwyMCBAQCBW
ZXJ0ZXhTaGFkZXJRdWFkOjpWZXJ0ZXhTaGFkZXJRdWFkKCkKIHsKIH0KIAorU3RyaW5nIFZlcnRl
eFNoYWRlclBvc1RleElkZW50aXR5OjpnZXRTaGFkZXJTdHJpbmcoKSBjb25zdAoreworICAgIHJl
dHVybiBTSEFERVIoCisgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb247CisgICAgICAg
IGF0dHJpYnV0ZSB2ZWMyIGFfdGV4Q29vcmQ7CisgICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENv
b3JkOworICAgICAgICB2b2lkIG1haW4oKQorICAgICAgICB7CisgICAgICAgICAgICBnbF9Qb3Np
dGlvbiA9IGFfcG9zaXRpb247CisgICAgICAgICAgICB2X3RleENvb3JkID0gYV90ZXhDb29yZDsK
KyAgICAgICAgfQorICAgICk7Cit9CisKIHZvaWQgVmVydGV4U2hhZGVyUXVhZDo6aW5pdChHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgdW5zaWduZWQgcHJvZ3JhbSkKIHsKICAgICBtX21hdHJp
eExvY2F0aW9uID0gY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJtYXRyaXgi
KTsKQEAgLTQxMCw2ICs0MjQsMjAgQEAgU3RyaW5nIEZyYWdtZW50U2hhZGVyUkdCQVRleE9wYXF1
ZTo6Z2V0U2hhZGVyU3RyaW5nKCkgY29uc3QKICAgICApOwogfQogCitTdHJpbmcgRnJhZ21lbnRT
aGFkZXJSR0JBVGV4Q29weTo6Z2V0U2hhZGVyU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
U0hBREVSKAorICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKKyAgICAgICAgdmFyeWlu
ZyB2ZWMyIHZfdGV4Q29vcmQ7CisgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfdGV4dHVyZTsK
KyAgICAgICAgdm9pZCBtYWluKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmVjNCB0ZXhDb2xv
ciA9IHRleHR1cmUyRChzX3RleHR1cmUsIHZfdGV4Q29vcmQpOworICAgICAgICAgICAgZ2xfRnJh
Z0NvbG9yID0gdGV4Q29sb3I7CisgICAgICAgIH0KKyAgICApOworfQorCiBTdHJpbmcgRnJhZ21l
bnRTaGFkZXJSR0JBVGV4U3dpenpsZUFscGhhOjpnZXRTaGFkZXJTdHJpbmcoKSBjb25zdAogewog
ICAgIHJldHVybiBTSEFERVIoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uaAppbmRleCAyYmQ3NjBhOTlmYzQ2
NjA3MGM1NmYzYWUyNDFjMmEyMDJhMzMwNmZhLi5jNmE3ZjM2MmRkMmE4NDcwNWJiZjY4ZjIxZmNk
MjZhNGQxYjE5NzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmgKQEAgLTk1LDYgKzk1LDEyIEBAIHBy
aXZhdGU6CiAgICAgaW50IG1fbWF0cml4TG9jYXRpb247CiB9OwogCitjbGFzcyBWZXJ0ZXhTaGFk
ZXJQb3NUZXhJZGVudGl0eSB7CitwdWJsaWM6CisgICAgdm9pZCBpbml0KEdyYXBoaWNzQ29udGV4
dDNEKiwgdW5zaWduZWQgcHJvZ3JhbSkgeyB9CisgICAgU3RyaW5nIGdldFNoYWRlclN0cmluZygp
IGNvbnN0OworfTsKKwogY2xhc3MgVmVydGV4U2hhZGVyUG9zVGV4VHJhbnNmb3JtIHsKIHB1Ymxp
YzoKICAgICBWZXJ0ZXhTaGFkZXJQb3NUZXhUcmFuc2Zvcm0oKTsKQEAgLTIxMyw2ICsyMTksMTEg
QEAgcHVibGljOgogICAgIFN0cmluZyBnZXRTaGFkZXJTdHJpbmcoKSBjb25zdDsKIH07CiAKK2Ns
YXNzIEZyYWdtZW50U2hhZGVyUkdCQVRleENvcHkgOiBwdWJsaWMgRnJhZ21lbnRUZXhPcGFxdWVC
aW5kaW5nIHsKK3B1YmxpYzoKKyAgICBTdHJpbmcgZ2V0U2hhZGVyU3RyaW5nKCkgY29uc3Q7Cit9
OworCiAvLyBTd2l6emxlcyB0aGUgcmVkIGFuZCBibHVlIGNvbXBvbmVudCBvZiBzYW1wbGVkIHRl
eGVsIHdpdGggYWxwaGEuCiBjbGFzcyBGcmFnbWVudFNoYWRlclJHQkFUZXhTd2l6emxlQWxwaGEg
OiBwdWJsaWMgRnJhZ21lbnRUZXhBbHBoYUJpbmRpbmcgewogcHVibGljOgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUNvcGllci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlQ29w
aWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zYTA1OWQ2M2Y3M2IxMWYzMTE0MzkxYTY3ZTUzNDU2MjQ2MTM0
OWI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGV4dHVyZUNvcGllci5jcHAKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJUZXh0dXJlQ29waWVyLmgiCisK
KyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIgLy8gRm9yIHRoZSBHTEMoKSBtYWNy
bworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCitBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXI6OkFjY2VsZXJhdGVkVGV4dHVyZUNvcGllcihQ
YXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQorICAgIDogbV9jb250ZXh0KGNv
bnRleHQpCit7CisgICAgR0xDKG1fY29udGV4dCwgbV9mYm8gPSBtX2NvbnRleHQtPmNyZWF0ZUZy
YW1lYnVmZmVyKCkpOworICAgIEdMQyhtX2NvbnRleHQsIG1fcG9zaXRpb25CdWZmZXIgPSBtX2Nv
bnRleHQtPmNyZWF0ZUJ1ZmZlcigpKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX3RleENvb3JkQnVm
ZmVyID0gbV9jb250ZXh0LT5jcmVhdGVCdWZmZXIoKSk7CisKKyAgICBzdGF0aWMgY29uc3QgZmxv
YXQga1Bvc2l0aW9uc1s0XVs0XSA9IHsKKyAgICAgICAgey0xLCAtMSwgMCwgMX0sCisgICAgICAg
IHsgMSwgLTEsIDAsIDF9LAorICAgICAgICB7IDEsIDEsIDAsIDF9LAorICAgICAgICB7LTEsIDEs
IDAsIDF9CisgICAgfTsKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQga1RleENvb3Jkc1s0XVsyXSA9
IHsKKyAgICAgICAgezAsIDB9LAorICAgICAgICB7MSwgMH0sCisgICAgICAgIHsxLCAxfSwKKyAg
ICAgICAgezAsIDF9CisgICAgfTsKKworICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4
dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3Bvc2l0aW9u
QnVmZmVyKSk7CisgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5idWZmZXJEYXRh
KEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHNpemVvZihrUG9zaXRpb25zKSwga1Bv
c2l0aW9ucywgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKSk7CisgICAgR0xDKG1fY29u
dGV4dC5nZXQoKSwgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJB
WV9CVUZGRVIsIG1fdGV4Q29vcmRCdWZmZXIpKTsKKyAgICBHTEMobV9jb250ZXh0LmdldCgpLCBt
X2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgc2l6
ZW9mKGtUZXhDb29yZHMpLCBrVGV4Q29vcmRzLCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RS
QVcpKTsKKyAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCkpOworCisgICAgbV9ibGl0UHJvZ3JhbSA9
IGFkb3B0UHRyKG5ldyBCbGl0UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICBtX2JsaXRQ
cm9ncmFtLT5pbml0aWFsaXplKG1fY29udGV4dC5nZXQoKSk7Cit9CisKK0FjY2VsZXJhdGVkVGV4
dHVyZUNvcGllcjo6fkFjY2VsZXJhdGVkVGV4dHVyZUNvcGllcigpCit7CisgICAgaWYgKG1fdGV4
Q29vcmRCdWZmZXIpCisgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGVsZXRlQnVm
ZmVyKG1fdGV4Q29vcmRCdWZmZXIpKTsKKyAgICBpZiAobV9wb3NpdGlvbkJ1ZmZlcikKKyAgICAg
ICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kZWxldGVCdWZmZXIobV9wb3NpdGlvbkJ1ZmZl
cikpOworICAgIGlmIChtX2ZibykKKyAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5k
ZWxldGVGcmFtZWJ1ZmZlcihtX2ZibykpOworfQorCit2b2lkIEFjY2VsZXJhdGVkVGV4dHVyZUNv
cGllcjo6Y29weVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHNv
dXJjZVRleHR1cmVJZCwgdW5zaWduZWQgZGVzdFRleHR1cmVJZCwgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKK3sKKyAgICBUUkFDRV9FVkVOVCgiVGV4dHVyZUNvcGllcjo6Y29weVRleHR1cmUiLCB0aGlz
LCAwKTsKKworICAgIC8vIE5vdGU6IHRoaXMgY29kZSBkb2VzIG5vdCByZXN0b3JlIHRoZSB2aWV3
cG9ydCwgYm91bmQgcHJvZ3JhbSwgMkQgdGV4dHVyZSwgZnJhbWVidWZmZXIsIGJ1ZmZlciBvciBi
bGVuZCBlbmFibGUuCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKSk7CisgICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgZGVzdFRleHR1cmVJZCwgMCkpOworCisgICAgLy8gVE9ETzogVXNl
IEVYVF9kaXNjYXJkX2ZyYW1lYnVmZmVyIG9yIHNraXAgY2xlYXJpbmcgaWYgaXQgaXNuJ3QgYXZh
aWxhYmxlLgorICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQz
RDo6Q09MT1JfQlVGRkVSX0JJVCkpOworCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBzb3VyY2VUZXh0dXJlSWQpKTsK
KyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QpKTsKKwor
ICAgIC8vIFRPRE86IFVzZSBFWFRfZnJhbWVidWZmZXJfYmxpdCBpZiBhdmFpbGFibGUuCisgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPnVzZVByb2dyYW0obV9ibGl0UHJvZ3JhbS0+cHJvZ3JhbSgp
KSk7CisKKyAgICBjb25zdCBpbnQga1Bvc2l0aW9uQXR0cmlidXRlID0gMDsKKyAgICBjb25zdCBp
bnQga1RleENvb3JkQXR0cmlidXRlID0gMTsKKworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5i
aW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fcG9zaXRpb25CdWZm
ZXIpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihrUG9z
aXRpb25BdHRyaWJ1dGUsIDQsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDAp
KTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoa1Bv
c2l0aW9uQXR0cmlidXRlKSk7CisKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZEJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3RleENvb3JkQnVmZmVyKSk7Cisg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoa1RleENvb3JkQXR0
cmlidXRlLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKSk7CisgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGtUZXhDb29yZEF0
dHJpYnV0ZSkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDApKTsKKworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT52aWV3cG9ydCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKKyAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpKTsKKyAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJ
QU5HTEVfRkFOLCAwLCA0KSk7CisKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1l
dGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOworICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRl
eHQzRDo6TElORUFSKSk7CisKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+ZGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KGtQb3NpdGlvbkF0dHJpYnV0ZSkpOworICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoa1RleENvb3JkQXR0cmlidXRlKSk7CisKKyAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbSgwKSk7CisKKyAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCAwLCAwKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApKTsKKyAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIDApKTsKK30KKworfQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGV4dHVyZUNvcGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGV4dHVyZUNvcGllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVlNGNiOWM4ZDNmMWJhYTk5MzRhNzky
YmE3NTEwYWQ1YWY0Mzk1OGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmgKQEAgLTAsMCArMSw3NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgVGV4dHVyZUNvcGllcl9oCisjZGVmaW5lIFRleHR1cmVD
b3BpZXJfaAorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJQcm9n
cmFtQmluZGluZy5oIgorI2luY2x1ZGUgIlNoYWRlckNocm9taXVtLmgiCisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0dXJlQ29w
aWVyIHsKK3B1YmxpYzoKKyAgICAvLyBDb3B5IHRoZSBiYXNlIGxldmVsIGNvbnRlbnRzIG9mIHxz
b3VyY2VUZXh0dXJlSWR8IHRvIHxkZXN0VGV4dHVyZUlkfC4gQm90aCB0ZXh0dXJlIG9iamVjdHMK
KyAgICAvLyBtdXN0IGJlIGNvbXBsZXRlIGFuZCBoYXZlIGEgYmFzZSBsZXZlbCBvZiB8c2l6ZXwg
ZGltZW5zaW9ucy4gVGhlIGNvbG9yIGZvcm1hdHMgZG8gbm90IG5lZWQKKyAgICAvLyB0byBtYXRj
aCwgYnV0IHxkZXN0VGV4dHVyZUlkfCBtdXN0IGhhdmUgYSByZW5kZXJhYmxlIGZvcm1hdC4KKyAg
ICB2aXJ0dWFsIHZvaWQgY29weVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCBz
b3VyY2VUZXh0dXJlSWQsIHVuc2lnbmVkIGRlc3RUZXh0dXJlSWQsIGNvbnN0IEludFNpemUmKSA9
IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5UZXh0dXJlQ29waWVyKCkgeyB9Cit9Owor
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCitjbGFzcyBBY2NlbGVyYXRlZFRl
eHR1cmVDb3BpZXIgOiBwdWJsaWMgVGV4dHVyZUNvcGllciB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c093blB0cjxBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXI+IGNyZWF0ZShQYXNzUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXIoY29udGV4dCkpOworICAgIH0KKyAgICB2aXJ0dWFs
IH5BY2NlbGVyYXRlZFRleHR1cmVDb3BpZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkIHNvdXJjZVRleHR1cmVJZCwgdW5zaWdu
ZWQgZGVzdFRleHR1cmVJZCwgY29uc3QgSW50U2l6ZSYpOworCitwcm90ZWN0ZWQ6CisgICAgZXhw
bGljaXQgQWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+KTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRl
clBvc1RleElkZW50aXR5LCBGcmFnbWVudFNoYWRlclJHQkFUZXhDb3B5PiBCbGl0UHJvZ3JhbTsK
KworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OworICAgIFBsYXRmb3Jt
M0RPYmplY3QgbV9mYm87CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX3Bvc2l0aW9uQnVmZmVyOwor
ICAgIFBsYXRmb3JtM0RPYmplY3QgbV90ZXhDb29yZEJ1ZmZlcjsKKyAgICBPd25QdHI8QmxpdFBy
b2dyYW0+IG1fYmxpdFByb2dyYW07Cit9OworCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFBy
b3h5LmNwcAppbmRleCBiNmZjNzZiNTJlOGJkZjRmZWE5NzU1MGEyMTZlZjEzMmZmN2I1YmY1Li42
Y2Y4ODYzYjRkNjM3ZTZmZWE2YWEzM2ZmNTRmNTQ4MWFhZTgxMjI5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAtMjAwLDcgKzIwMCw3IEBAIHZvaWQgQ0NTaW5n
bGVUaHJlYWRQcm94eTo6ZG9Db21taXQoKQogICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5i
ZWdpbkNvbW1pdCgpOwogCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+YmVnaW5Db21taXRPbklt
cGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7Ci0gICAgICAgIENDVGV4dHVyZVVw
ZGF0ZXIgdXBkYXRlcihtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVBbGxvY2F0
b3IoKSk7CisgICAgICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcihtX2xheWVyVHJlZUhvc3RJ
bXBsLT5jb250ZW50c1RleHR1cmVBbGxvY2F0b3IoKSwgbV9sYXllclRyZWVIb3N0SW1wbC0+bGF5
ZXJSZW5kZXJlcigpLT50ZXh0dXJlQ29waWVyKCkpOwogICAgICAgICBtX2xheWVyVHJlZUhvc3Qt
PnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMobV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGV4dCgp
LCB1cGRhdGVyKTsKICAgICAgICAgdXBkYXRlci51cGRhdGUobV9sYXllclRyZWVIb3N0SW1wbC0+
Y29udGV4dCgpLCBudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSk7CiAgICAgICAgIEFTU0VS
VCghdXBkYXRlci5oYXNNb3JlVXBkYXRlcygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRl
ci5jcHAKaW5kZXggNjZlMDhjOGJkOTNmMTgyNmEzOWI1NTNjMjk2NTBhODNhYzA5ZThlYS4uMGNl
MGY2ZDEwOThhNzM5NzdmM2JhZjgyMzJmNzIxNmIwNWU3YWQ3ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
ZXh0dXJlVXBkYXRlci5jcHAKQEAgLTM3LDggKzM3LDkgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DQ1RleHR1cmVVcGRhdGVyOjpDQ1RleHR1cmVVcGRh
dGVyKFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvcikKK0NDVGV4dHVyZVVwZGF0ZXI6OkNDVGV4
dHVyZVVwZGF0ZXIoVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBUZXh0dXJlQ29waWVyKiBj
b3BpZXIpCiAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCisgICAgLCBtX2NvcGllcihjb3Bp
ZXIpCiAgICAgLCBtX2VudHJ5SW5kZXgoMCkKIHsKICAgICBBU1NFUlQobV9hbGxvY2F0b3IpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oCmluZGV4IGRiYjUyYzliYWQyMDQzNGRkYmY3NGM2
MjhhNDQ0NWU5ZDdlOTg3ZDIuLmQyOWM2NTg2MWU5MzIzZWNmZjgyZGU0MGJjZGJmN2UyNDZiNDk3
MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgKQEAgLTM0LDEwICszNCwxMSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgVGV4
dHVyZUFsbG9jYXRvcjsKK2NsYXNzIFRleHR1cmVDb3BpZXI7CiAKIGNsYXNzIENDVGV4dHVyZVVw
ZGF0ZXIgewogcHVibGljOgotICAgIENDVGV4dHVyZVVwZGF0ZXIoVGV4dHVyZUFsbG9jYXRvciop
OworICAgIENDVGV4dHVyZVVwZGF0ZXIoVGV4dHVyZUFsbG9jYXRvciosIFRleHR1cmVDb3BpZXIq
KTsKICAgICB+Q0NUZXh0dXJlVXBkYXRlcigpOwogCiAgICAgdm9pZCBhcHBlbmQoTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFJlY3QmIGRlc3RSZWN0KTsKQEAgLTUxLDYgKzUyLDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xl
YXIoKTsKIAogICAgIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvcigpIHsgcmV0dXJuIG1fYWxs
b2NhdG9yOyB9CisgICAgVGV4dHVyZUNvcGllciogY29waWVyKCkgeyByZXR1cm4gbV9jb3BpZXI7
IH0KIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgVXBkYXRlRW50cnkgewpAQCAtNjIsNiArNjQsNyBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGFwcGVuZChMYXllclRleHR1cmVVcGRhdGVyOjpU
ZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJl
Y3QsIFZlY3RvcjxVcGRhdGVFbnRyeT4mKTsKIAogICAgIFRleHR1cmVBbGxvY2F0b3IqIG1fYWxs
b2NhdG9yOworICAgIFRleHR1cmVDb3BpZXIqIG1fY29waWVyOwogICAgIHNpemVfdCBtX2VudHJ5
SW5kZXg7CiAgICAgVmVjdG9yPFVwZGF0ZUVudHJ5PiBtX2VudHJpZXM7CiAgICAgVmVjdG9yPFVw
ZGF0ZUVudHJ5PiBtX3BhcnRpYWxFbnRyaWVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApp
bmRleCAzMjdkOWJlMGIxMjBmYjllZmRlZmY4MDUzMTg4MDUzMzA2YWJkYTRiLi5hNmUyZTYyNWYz
NmRjYWIxNDRkZmM3YWNhNjRiM2Y1N2QwOGM3NmFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
LmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNjL0NDVGhyZWFkUHJveHkuaCIKIAog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUgImNjL0NDRGVsYXlC
YXNlZFRpbWVTb3VyY2UuaCIKICNpbmNsdWRlICJjYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaCIK
QEAgLTQ4Miw3ICs0ODMsNyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0
ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbgogICAgIG1fY29tbWl0
Q29tcGxldGlvbkV2ZW50T25JbXBsVGhyZWFkID0gY29tcGxldGlvbjsKIAogICAgIEFTU0VSVCgh
bV9jdXJyZW50VGV4dHVyZVVwZGF0ZXJPbkltcGxUaHJlYWQpOwotICAgIG1fY3VycmVudFRleHR1
cmVVcGRhdGVyT25JbXBsVGhyZWFkID0gYWRvcHRQdHIobmV3IENDVGV4dHVyZVVwZGF0ZXIobV9s
YXllclRyZWVIb3N0SW1wbC0+Y29udGVudHNUZXh0dXJlQWxsb2NhdG9yKCkpKTsKKyAgICBtX2N1
cnJlbnRUZXh0dXJlVXBkYXRlck9uSW1wbFRocmVhZCA9IGFkb3B0UHRyKG5ldyBDQ1RleHR1cmVV
cGRhdGVyKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpLCBt
X2xheWVyVHJlZUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCktPnRleHR1cmVDb3BpZXIoKSkpOwog
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhtX2xheWVyVHJl
ZUhvc3RJbXBsLT5jb250ZXh0KCksICptX2N1cnJlbnRUZXh0dXJlVXBkYXRlck9uSW1wbFRocmVh
ZCk7CiAKICAgICBtX3NjaGVkdWxlck9uSW1wbFRocmVhZC0+YmVnaW5GcmFtZUNvbXBsZXRlKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCA2YTYzNDE2YjY5ZGIxMjZhMjA5OTNl
ZmUyYzVjZTEwZGNkZjA1NTFiLi4wMTQxZmZlNmM5MDI0NjMzYzNjN2Y3ODVmMDkwYjE5MDc1ZDg2
ZmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTExOSw2ICsxMTksNyBAQAog
ICAgICAgICAgICAgJ3Rlc3RzL1JlZ2lvblRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9S
ZW5kZXJUYWJsZUNlbGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvU2Nyb2xsYmFyTGF5
ZXJDaHJvbWl1bVRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9UZXh0dXJlQ29waWVyVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1RleHR1cmVNYW5hZ2VyVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwJywKICAgICAgICAgICAg
ICd0ZXN0cy9UaWxpbmdEYXRhVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggMTRj
OTJhZTlmN2M5MmU5YzdhYTk2MzQ0MzhkYmQ5MjdjZTBjYWQ4Ni4uZWEzZDQwZmZlMDgxMDhiZmQx
OWFkNzI2NTg1ZWM1NDhiOTM0MjNjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAjaW5jbHVkZSAiUmVnaW9uLmgiCisjaW5jbHVk
ZSAiVGV4dHVyZUNvcGllci5oIgogI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVk
ZSAiV2ViQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIldlYktpdC5oIgpAQCAtOTIsNiArOTMsMTEg
QEAgcHVibGljOgogICAgIE1PQ0tfTUVUSE9EMyhkZWxldGVUZXh0dXJlLCB2b2lkKHVuc2lnbmVk
LCBjb25zdCBJbnRTaXplJiwgR0MzRGVudW0pKTsKIH07CiAKK2NsYXNzIE1vY2tUZXh0dXJlQ29w
aWVyIDogcHVibGljIFRleHR1cmVDb3BpZXIgeworcHVibGljOgorICAgIE1PQ0tfTUVUSE9ENChj
b3B5VGV4dHVyZSwgdm9pZChHcmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkLCB1bnNpZ25lZCwg
Y29uc3QgSW50U2l6ZSYpKTsKK307CisKIGNsYXNzIENhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3Qg
OiBwdWJsaWMgVGVzdCB7CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmdWxsTGlmZWN5Y2xlVGVzdChi
b29sIHRocmVhZGVkKQpAQCAtMTAxLDExICsxMDcsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIFJl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbWFpbkNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBN
b2NrQ2FudmFzQ29udGV4dCgpKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9I
b3N0V2luZG93KTsKICAgICAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBpbXBsQ29udGV4
dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdl
YkNvbnRleHQoYWRvcHRQdHIobmV3IE1vY2tDYW52YXNDb250ZXh0KCkpLCBHcmFwaGljc0NvbnRl
eHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOwogCi0gICAgICAgIE1vY2tDYW52YXND
b250ZXh0JiBtYWluTW9jayA9ICpzdGF0aWNfY2FzdDxNb2NrQ2FudmFzQ29udGV4dCo+KEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKG1haW5Db250
ZXh0LmdldCgpKSk7Ci0gICAgICAgIE1vY2tDYW52YXNDb250ZXh0JiBpbXBsTW9jayA9ICpzdGF0
aWNfY2FzdDxNb2NrQ2FudmFzQ29udGV4dCo+KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0
cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKGltcGxDb250ZXh0LmdldCgpKSk7Ci0KICAgICAgICAg
TW9ja1RleHR1cmVBbGxvY2F0b3IgYWxsb2NhdG9yTW9jazsKLSAgICAgICAgQ0NUZXh0dXJlVXBk
YXRlciB1cGRhdGVyKCZhbGxvY2F0b3JNb2NrKTsKKyAgICAgICAgTW9ja1RleHR1cmVDb3BpZXIg
Y29waWVyTW9jazsKKyAgICAgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZhbGxvY2F0b3JN
b2NrLCAmY29waWVyTW9jayk7CiAKICAgICAgICAgY29uc3QgSW50U2l6ZSBzaXplKDMwMCwgMTUw
KTsKIApAQCAtMTIwLDI4ICsxMjQsMTYgQEAgcHJvdGVjdGVkOgogCiAgICAgICAgIGNvbnN0IFdl
YkdMSWQgYmFja1RleHR1cmVJZCA9IDE7CiAgICAgICAgIGNvbnN0IFdlYkdMSWQgZnJvbnRUZXh0
dXJlSWQgPSAyOwotICAgICAgICBjb25zdCBXZWJHTElkIGZib0lkID0gMzsKICAgICAgICAgewog
ICAgICAgICAgICAgSW5TZXF1ZW5jZSBzZXF1ZW5jZTsKIAogICAgICAgICAgICAgLy8gTm90ZSB0
aGF0IHRoZSBjYW52YXMgYmFja2luZyB0ZXh0dXJlIGlzIGRvdWJsZWJ1ZmZlcmVkIG9ubHkgd2hl
biB1c2luZyB0aGUgdGhyZWFkZWQKICAgICAgICAgICAgIC8vIGNvbXBvc2l0b3IuCiAgICAgICAg
ICAgICBpZiAodGhyZWFkZWQpIHsKLSAgICAgICAgICAgICAgICAvLyBTZXR1cCBDYW52YXMyRExh
eWVyQ2hyb21pdW0gKG9uIHRoZSBtYWluIHRocmVhZCkuCi0gICAgICAgICAgICAgICAgRVhQRUNU
X0NBTEwobWFpbk1vY2ssIGNyZWF0ZUZyYW1lYnVmZmVyKCkpCi0gICAgICAgICAgICAgICAgICAg
IC5XaWxsT25jZShSZXR1cm4oZmJvSWQpKTsKLQogICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0
ZXh0dXJlIGFuZCBkbyB0aGUgY29weSAob24gdGhlIGltcGwgdGhyZWFkKS4KICAgICAgICAgICAg
ICAgICBFWFBFQ1RfQ0FMTChhbGxvY2F0b3JNb2NrLCBjcmVhdGVUZXh0dXJlKHNpemUsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBKSkKICAgICAgICAgICAgICAgICAgICAgLldpbGxPbmNlKFJldHVy
bihmcm9udFRleHR1cmVJZCkpOwotICAgICAgICAgICAgICAgIEVYUEVDVF9DQUxMKGltcGxNb2Nr
LCBiaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgZnJvbnRUZXh0dXJl
SWQpKTsKLSAgICAgICAgICAgICAgICBFWFBFQ1RfQ0FMTChpbXBsTW9jaywgYmluZEZyYW1lYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgZmJvSWQpKTsKLSAgICAgICAgICAg
ICAgICBFWFBFQ1RfQ0FMTChpbXBsTW9jaywgZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVO
VDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBiYWNrVGV4dHVyZUlkLCAwKSk7Ci0g
ICAgICAgICAgICAgICAgRVhQRUNUX0NBTEwoaW1wbE1vY2ssIGNvcHlUZXhTdWJJbWFnZTJEKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAwLCAwLCAwLCAwLCAzMDAsIDE1MCkpOwot
ICAgICAgICAgICAgICAgIEVYUEVDVF9DQUxMKGltcGxNb2NrLCBiaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBU
ZWFyZG93biBDYW52YXMyRExheWVyQ2hyb21pdW0uCi0gICAgICAgICAgICAgICAgRVhQRUNUX0NB
TEwobWFpbk1vY2ssIGRlbGV0ZUZyYW1lYnVmZmVyKGZib0lkKSk7CisgICAgICAgICAgICAgICAg
RVhQRUNUX0NBTEwoY29waWVyTW9jaywgY29weVRleHR1cmUoaW1wbENvbnRleHQuZ2V0KCksIGJh
Y2tUZXh0dXJlSWQsIGZyb250VGV4dHVyZUlkLCBzaXplKSk7CiAKICAgICAgICAgICAgICAgICAv
LyBUZWFyZG93biBUZXh0dXJlTWFuYWdlci4KICAgICAgICAgICAgICAgICBFWFBFQ1RfQ0FMTChh
bGxvY2F0b3JNb2NrLCBkZWxldGVUZXh0dXJlKGZyb250VGV4dHVyZUlkLCBzaXplLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9UZXh0dXJlQ29waWVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1RleHR1cmVDb3BpZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MzNmOTZiZWQzZWNkNGRiZjYwOWU4
ODhjZTIxOTQ2MjdmNTRiZTZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9UZXh0dXJlQ29waWVyVGVzdC5jcHAKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVGV4dHVyZUNvcGllci5o
IgorCisjaW5jbHVkZSAiRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2lu
Y2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyB0ZXN0aW5n
OjpJblNlcXVlbmNlOwordXNpbmcgdGVzdGluZzo6VGVzdDsKK3VzaW5nIHRlc3Rpbmc6Ol87CisK
K25hbWVzcGFjZSB7CisKK2NsYXNzIE1vY2tDb250ZXh0IDogcHVibGljIEZha2VXZWJHcmFwaGlj
c0NvbnRleHQzRCB7CitwdWJsaWM6CisgICAgTU9DS19NRVRIT0QyKGJpbmRGcmFtZWJ1ZmZlciwg
dm9pZChXR0MzRGVudW0sIFdlYkdMSWQpKTsKKyAgICBNT0NLX01FVEhPRDModGV4UGFyYW1ldGVy
aSwgdm9pZChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKSk7
CisKKyAgICBNT0NLX01FVEhPRDMoZHJhd0FycmF5cywgdm9pZChHQzNEZW51bSBtb2RlLCBHQzNE
aW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQpKTsKK307CisKK1RFU1QoVGV4dHVyZUNvcGllclRl
c3QsIHRlc3REcmF3QXJyYXlzQ29weSkKK3sKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBhdHRyczsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0
KGFkb3B0UHRyKG5ldyBNb2NrQ29udGV4dCgpKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRp
cmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICBNb2NrQ29udGV4dCYgbW9ja0NvbnRleHQgPSAqc3Rh
dGljX2Nhc3Q8TW9ja0NvbnRleHQqPihHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RX
ZWJHcmFwaGljc0NvbnRleHQzRChjb250ZXh0LmdldCgpKSk7CisKKyAgICB7CisgICAgICAgIElu
U2VxdWVuY2Ugc2VxdWVuY2U7CisKKyAgICAgICAgLy8gY29weVRleHR1cmUoKQorICAgICAgICBF
WFBFQ1RfQ0FMTChtb2NrQ29udGV4dCwgYmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgXykpOworCisgICAgICAgIC8vIE1ha2Ugc3VyZSBsaW5lYXIgZmlsdGVy
aW5nIGlzIGRpc2FibGVkIGR1cmluZyB0aGUgY29weS4KKyAgICAgICAgRVhQRUNUX0NBTEwobW9j
a0NvbnRleHQsIHRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpO
RUFSRVNUKSk7CisgICAgICAgIEVYUEVDVF9DQUxMKG1vY2tDb250ZXh0LCB0ZXhQYXJhbWV0ZXJp
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVCkpOworCisgICAgICAgIEVY
UEVDVF9DQUxMKG1vY2tDb250ZXh0LCBkcmF3QXJyYXlzKF8sIF8sIF8pKTsKKworICAgICAgICAv
LyBMaW5lYXIgZmlsdGVyaW5nIHNob3VsZCBiZSByZXN0b3JlZC4KKyAgICAgICAgRVhQRUNUX0NB
TEwobW9ja0NvbnRleHQsIHRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4
dDNEOjpMSU5FQVIpKTsKKyAgICAgICAgRVhQRUNUX0NBTEwobW9ja0NvbnRleHQsIHRleFBhcmFt
ZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKworICAgICAg
ICAvLyBEZWZhdWx0IGZyYW1lYnVmZmVyIHNob3VsZCBiZSByZXN0b3JlZAorICAgICAgICBFWFBF
Q1RfQ0FMTChtb2NrQ29udGV4dCwgYmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUiwgMCkpOworICAgIH0KKworICAgIGludCBzb3VyY2VUZXh0dXJlSWQgPSAxOwor
ICAgIGludCBkZXN0VGV4dHVyZUlkID0gMjsKKyAgICBJbnRTaXplIHNpemUoMjU2LCAxMjgpOwor
ICAgIE93blB0cjxBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXI+IGNvcGllcihBY2NlbGVyYXRlZFRl
eHR1cmVDb3BpZXI6OmNyZWF0ZShjb250ZXh0KSk7CisgICAgY29waWVyLT5jb3B5VGV4dHVyZShj
b250ZXh0LmdldCgpLCBzb3VyY2VUZXh0dXJlSWQsIGRlc3RUZXh0dXJlSWQsIHNpemUpOworfQor
Cit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggN2VlYmI5NzE0Njg2YWVlMTEzYmUw
MmZhYWU4NTZlNTIwYTY1YzE4Yi4uM2JkMTNmNTViYzAxNDQ2YzU1MGRlNDIyZGU0MDA2YWZjNWRj
MjUwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVy
Q2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRmFrZUND
TGF5ZXJUcmVlSG9zdENsaWVudC5oIgogI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIK
ICNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJUZXh0dXJlQ29waWVyLmgiCiAjaW5jbHVk
ZSAiVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJDb21wb3NpdG9yLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIiAvLyBGb3IgRGVidWdTY29wZWRTZXRJbXBsVGhy
ZWFkCkBAIC03Myw2ICs3NCwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRl
eHR1cmUodW5zaWduZWQsIGNvbnN0IEludFNpemUmLCBHQzNEZW51bSkgeyB9CiB9OwogCitjbGFz
cyBGYWtlVGV4dHVyZUNvcGllciA6IHB1YmxpYyBUZXh0dXJlQ29waWVyIHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIHZvaWQgY29weVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCwg
dW5zaWduZWQsIGNvbnN0IEludFNpemUmKSB7IH0KK307CisKIGNsYXNzIEZha2VUaWxlZExheWVy
Q2hyb21pdW07CiAKIGNsYXNzIEZha2VMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGljIExheWVy
VGV4dHVyZVVwZGF0ZXIgewpAQCAtMjYxLDcgKzI2Nyw4IEBAIFRFU1QoVGlsZWRMYXllckNocm9t
aXVtVGVzdCwgcHVzaERpcnR5VGlsZXMpCiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBs
PiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CiAKICAg
ICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9yOwotICAgIENDVGV4dHVyZVVw
ZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvcik7CisgICAgRmFrZVRleHR1cmVDb3BpZXIg
dGV4dHVyZUNvcGllcjsKKyAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxv
Y2F0b3IsICZ0ZXh0dXJlQ29waWVyKTsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEw
MCwgc28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgogICAgIGxh
eWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwpAQCAtMjk3LDcgKzMwNCw4IEBAIFRF
U1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaE9jY2x1ZGVkRGlydHlUaWxlcykKICAgICBU
ZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1ZGVkOwogCiAgICAgRmFrZVRleHR1cmVBbGxvY2F0
b3IgdGV4dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1
cmVBbGxvY2F0b3IpOworICAgIEZha2VUZXh0dXJlQ29waWVyIHRleHR1cmVDb3BpZXI7CisgICAg
Q0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yLCAmdGV4dHVyZUNvcGll
cik7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNvIHRoaXMgaW52YWxpZGF0
ZXMgYW5kIHRoZW4gcGFpbnRzIHR3byB0aWxlcy4KICAgICBsYXllci0+c2V0Qm91bmRzKEludFNp
emUoMTAwLCAyMDApKTsKQEAgLTM0Myw3ICszNTEsOCBAQCBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIHB1c2hJZGxlUGFpbnRUaWxlcykKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllcklt
cGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKIAog
ICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIHRleHR1cmVBbGxvY2F0b3I7Ci0gICAgQ0NUZXh0dXJl
VXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yKTsKKyAgICBGYWtlVGV4dHVyZUNvcGll
ciB0ZXh0dXJlQ29waWVyOworICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFs
bG9jYXRvciwgJnRleHR1cmVDb3BpZXIpOwogCiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4
MTAwLiBTZXR1cCA1eDUgdGlsZXMgd2l0aCBvbmUgdmlzaWJsZSB0aWxlIGluIHRoZSBjZW50ZXIu
CiAgICAgSW50U2l6ZSBjb250ZW50Qm91bmRzKDUwMCwgNTAwKTsKQEAgLTQwMCw3ICs0MDksOCBA
QCBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc01hcmtlZERpcnR5RHVyaW5n
UGFpbnQpCiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQ
dHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CiAKICAgICBGYWtlVGV4dHVyZUFsbG9j
YXRvciB0ZXh0dXJlQWxsb2NhdG9yOwotICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4
dHVyZUFsbG9jYXRvcik7CisgICAgRmFrZVRleHR1cmVDb3BpZXIgdGV4dHVyZUNvcGllcjsKKyAg
ICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IsICZ0ZXh0dXJlQ29w
aWVyKTsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlk
YXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgogICAgIC8vIEhvd2V2ZXIsIGR1cmluZyB0
aGUgcGFpbnQsIHdlIGludmFsaWRhdGUgb25lIG9mIHRoZSB0aWxlcy4gVGhpcyBzaG91bGQKQEAg
LTQyNyw3ICs0MzcsOCBAQCBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0xh
eWVyTWFya2VkRGlydHlEdXJpbmdQYWludE9uTmV4dExheWVyKQogICAgIE93blB0cjxGYWtlQ0NU
aWxlZExheWVySW1wbD4gbGF5ZXIySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllcklt
cGwoMCkpKTsKIAogICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIHRleHR1cmVBbGxvY2F0b3I7Ci0g
ICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yKTsKKyAgICBGYWtl
VGV4dHVyZUNvcGllciB0ZXh0dXJlQ29waWVyOworICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRl
cigmdGV4dHVyZUFsbG9jYXRvciwgJnRleHR1cmVDb3BpZXIpOwogCiAgICAgbGF5ZXIxLT5zZXRC
b3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwogICAgIGxheWVyMS0+aW52YWxpZGF0ZVJlY3QoSW50
UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwpAQCAtNDYzLDcgKzQ3NCw4IEBAIFRFU1QoVGlsZWRMYXll
ckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTGF5ZXJNYXJrZWREaXJ0eUR1cmluZ1BhaW50T25QcmV2
aW91c0xheWVyCiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllcjJJbXBsKGFk
b3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwogCiAgICAgRmFrZVRleHR1cmVB
bGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIo
JnRleHR1cmVBbGxvY2F0b3IpOworICAgIEZha2VUZXh0dXJlQ29waWVyIHRleHR1cmVDb3BpZXI7
CisgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yLCAmdGV4dHVy
ZUNvcGllcik7CiAKICAgICBsYXllcjEtPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7CiAg
ICAgbGF5ZXIxLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7CkBAIC01
MDUsNyArNTE3LDggQEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRPdXRP
Zk1lbW9yeSkKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9w
dFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKIAogICAgIEZha2VUZXh0dXJlQWxs
b2NhdG9yIHRleHR1cmVBbGxvY2F0b3I7Ci0gICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0
ZXh0dXJlQWxsb2NhdG9yKTsKKyAgICBGYWtlVGV4dHVyZUNvcGllciB0ZXh0dXJlQ29waWVyOwor
ICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvciwgJnRleHR1cmVD
b3BpZXIpOwogCiAgICAgLy8gVGhpcyBpbnZhbGlkYXRlcyA5IHRpbGVzIGFuZCB0aGVuIHBhaW50
cyBvbmUgdmlzaWJsZSB0aWxlLgogICAgIGxheWVyLT5zZXRCb3VuZHMoY29udGVudEJvdW5kcyk7
CkBAIC01NDEsNyArNTU0LDggQEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpbnZhbGlk
YXRlRnJvbVByZXBhcmUpCiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllcklt
cGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CiAKICAgICBGYWtlVGV4
dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9yOwotICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBk
YXRlcigmdGV4dHVyZUFsbG9jYXRvcik7CisgICAgRmFrZVRleHR1cmVDb3BpZXIgdGV4dHVyZUNv
cGllcjsKKyAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IsICZ0
ZXh0dXJlQ29waWVyKTsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhp
cyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgogICAgIGxheWVyLT5zZXRC
b3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwpAQCAtNTgzLDcgKzU5Nyw4IEBAIFRFU1QoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgdmVyaWZ5VXBkYXRlUmVjdFdoZW5Db250ZW50Qm91bmRzQXJlU2Nh
bGVkKQogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllcldpdGhTY2FsZWRCb3VuZHM+IGxheWVyID0g
YWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyV2l0aFNjYWxlZEJvdW5kcyh0ZXh0dXJlTWFuYWdl
ci5nZXQoKSkpOwogCiAgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsK
LSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworICAgIEZh
a2VUZXh0dXJlQ29waWVyIHRleHR1cmVDb3BpZXI7CisgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRh
dGVyKCZ0ZXh0dXJlQWxsb2NhdG9yLCAmdGV4dHVyZUNvcGllcik7CiAKICAgICBJbnRSZWN0IGxh
eWVyQm91bmRzKDAsIDAsIDMwMCwgMjAwKTsKICAgICBJbnRSZWN0IGNvbnRlbnRCb3VuZHMoMCwg
MCwgMjAwLCAyNTApOwpAQCAtNjIxLDcgKzYzNiw4IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVt
VGVzdCwgdmVyaWZ5SW52YWxpZGF0aW9uV2hlbkNvbnRlbnRzU2NhbGVDaGFuZ2VzKQogICAgIE93
blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NU
aWxlZExheWVySW1wbCgwKSkpOwogCiAgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFs
bG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3Ip
OworICAgIEZha2VUZXh0dXJlQ29waWVyIHRleHR1cmVDb3BpZXI7CisgICAgQ0NUZXh0dXJlVXBk
YXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yLCAmdGV4dHVyZUNvcGllcik7CiAKICAgICAv
LyBDcmVhdGUgYSBsYXllciB3aXRoIG9uZSB0aWxlLgogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50
U2l6ZSgxMDAsIDEwMCkpOwpAQCAtNjkyLDcgKzcwOCw4IEBAIFRFU1QoVGlsZWRMYXllckNocm9t
aXVtVGVzdCwgc2tpcHNEcmF3R2V0c1Jlc2V0KQogICAgIGNoaWxkTGF5ZXItPmludmFsaWRhdGVS
ZWN0KGNvbnRlbnRSZWN0KTsKIAogICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIHRleHR1cmVBbGxv
Y2F0b3I7Ci0gICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yKTsK
KyAgICBGYWtlVGV4dHVyZUNvcGllciB0ZXh0dXJlQ29waWVyOworICAgIENDVGV4dHVyZVVwZGF0
ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvciwgJnRleHR1cmVDb3BpZXIpOwogCiAgICAgY2NM
YXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIocm9vdExheWVyKTsKICAgICBjY0xheWVyVHJlZUhv
c3QtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDMwMCwgMzAwKSk7CkBAIC03NTEsNyArNzY4LDgg
QEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwYXJ0aWFsVXBkYXRlcykKICAgICBsYXll
ci0+aW52YWxpZGF0ZVJlY3QoY29udGVudFJlY3QpOwogCiAgICAgRmFrZVRleHR1cmVBbGxvY2F0
b3IgdGV4dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1
cmVBbGxvY2F0b3IpOworICAgIEZha2VUZXh0dXJlQ29waWVyIHRleHR1cmVDb3BpZXI7CisgICAg
Q0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yLCAmdGV4dHVyZUNvcGll
cik7CiAKICAgICBjY0xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihsYXllcik7CiAgICAgY2NM
YXllclRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSgzMDAsIDIwMCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132591</attachid>
            <date>2012-03-19 09:00:57 -0700</date>
            <delta_ts>2012-03-26 04:14:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80870-20120319160055.patch</filename>
            <type>text/plain</type>
            <size>43177</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTc5YjNkNDQ3NWI4YzFm
NjUwZjRhMDhmNTkzYTBmNjU0NDdhMTQ5Yy4uNDgyZGFlY2QxZWJkYTMwZTUxZGYxOWM4NGM2YTg1
YzZjNTFlYWJlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTAzLTE2ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
QWRkIFRleHR1cmVDb3BpZXIgZm9yIGNvcHlpbmcgdGV4dHVyZSBjb250ZW50cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA4NzAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVj
ZXMgYSBUZXh0dXJlQ29waWVyIGNsYXNzIHdob3NlIGpvYiBpcyB0byBjb3B5IHRoZQorICAgICAg
ICBjb250ZW50cyBmcm9tIG9uZSBHTCB0ZXh0dXJlIHRvIGFub3RoZXIgdXNpbmcgdGhlIG1vc3Qg
ZWZmaWNpZW50IG1lYW5zCisgICAgICAgIGZvciB0aGUgY3VycmVudCBHUFUuIFRoaXMgdmVyc2lv
biB1c2VzIHJlbmRlci10by10ZXh0dXJlIHRvIGRvIHRoZSBjb3B5LAorICAgICAgICBidXQgYSBw
YXRoIGJhc2VkIG9uIEVYVF9mcmFtZWJ1ZmZlcl9ibGl0IGNhbiBiZSBhZGRlZCBsYXRlci4KKwor
ICAgICAgICBUaGUgY2xhc3MgaXMgaW50ZW5kZWQgdG8gcmVwbGFjZSB0aGUgdXNlIG9mIGltYWdl
IHBhdGggb3BlcmF0aW9ucyBzdWNoCisgICAgICAgIGFzIGdsQ29weVRleHtTdWJ9SW1hZ2UyRCBm
b3IgZHVwbGljYXRpbmcgdGV4dHVyZSBjb250ZW50cy4gVGhlIHJlYXNvbiBpcworICAgICAgICB0
aGF0IHN1Y2ggZnVuY3Rpb25zIG1heSBub3QgYmUgdmVyeSB3ZWxsIG9wdGltaXplZCBpbiBzb21l
IC0tIG1haW5seQorICAgICAgICBtb2JpbGUgLS0gR1BVIGRyaXZlcnMuCisKKyAgICAgICAgV2l0
aCB0aGlzIHBhdGNoIHRoZSBuZXcgY29waWVyIGlzIHVzZWQganVzdCBmb3IgQ2FudmFzMkQgbGF5
ZXIKKyAgICAgICAgcHJlc2VudGF0aW9uLCBidXQgYW5vdGhlciBwb3RlbnRpYWwgdXNlIGlzIGZv
ciBXZWJHTCBsYXllciBwcmVzZW50YXRpb24uCisKKyAgICAgICAgVGVzdDogd2Via2l0X3VuaXRf
dGVzdHM6IFRleHR1cmVDb3BpZXJUZXN0CisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6Q2FudmFzMkRMYXll
ckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6fkNh
bnZhczJETGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hy
b21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoQ2FudmFz
MkRMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZUNv
cGllcik6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlZlcnRleFNoYWRlclBvc1RleElkZW50aXR5OjpnZXRTaGFkZXJTdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFnbWVudFNoYWRlclJHQkFUZXhDb3B5
OjpnZXRTaGFkZXJTdHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1NoYWRlckNocm9taXVtLmg6CisgICAgICAgIChWZXJ0ZXhTaGFkZXJQb3NUZXhJZGVudGl0eSk6
CisgICAgICAgIChXZWJDb3JlOjpWZXJ0ZXhTaGFkZXJQb3NUZXhJZGVudGl0eTo6aW5pdCk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZyYWdtZW50U2hhZGVyUkdCQVRleENvcHkpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZWxlcmF0ZWRU
ZXh0dXJlQ29waWVyOjpBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyOjp+QWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2VsZXJhdGVkVGV4dHVyZUNvcGllcjo6Y29weVRleHR1cmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFRleHR1cmVDb3BpZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZUNvcGllcjo6flRleHR1cmVDb3BpZXIpOgorICAgICAgICAo
QWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2VsZXJhdGVk
VGV4dHVyZUNvcGllcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2lu
Z2xlVGhyZWFkUHJveHk6OmRvQ29tbWl0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4
dHVyZVVwZGF0ZXI6OkNDVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoQ0NUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVV
cGRhdGVyOjpjb3BpZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6YmVn
aW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkKToKKwogMjAxMi0wMy0xOCAgTWF0dCBGYWxrZW5o
YWdlbiAgPGZhbGtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRmFsbGJhY2sgdG8gY29tbW9u
IHNjcmlwdCB3aGVuIHBlci1zY3JpcHQgZm9udCBzZXR0aW5nIGlzIHRoZSBlbXB0eSBzdHJpbmcK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYzhkNzhmZmFjMjRiNjQyMDZhY2U2NzViYjA2
OTU0ODYyY2I0ZWI1YS4uZjIwZTdhMGE3NmE0NzY3NGE3ZmM0NDk4YmI1MjRmMzhhZjgyYjQxMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMi0wMy0xNiAg
U2FtaSBLeW9zdGlsYSAgPHNreW9zdGlsQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIEFkZCBUZXh0dXJlQ29waWVyIGZvciBjb3B5aW5nIHRleHR1cmUgY29udGVudHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwODcwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIG5ldyB0ZXN0IGZv
ciBUZXh0dXJlQ29waWVyLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVz
dHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgICogdGVzdHMvVGV4dHVy
ZUNvcGllclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9UaWxlZExheWVyQ2hyb21p
dW1UZXN0LmNwcDoKKyAgICAgICAgKEZha2VUZXh0dXJlQ29waWVyKToKKyAgICAgICAgKFdURjo6
RmFrZVRleHR1cmVDb3BpZXI6OmNvcHlUZXh0dXJlKToKKyAgICAgICAgKFdURik6CisgICAgICAg
IChXVEY6OlRFU1QpOgorCiAyMDEyLTAzLTE5ICBLZWlzaGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gRml4IGJ1aWxkIHRoYXQgd2FzIGJyb2tlbiBi
eSByMTExMTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMDZiZjlmMDcwYmY4NmY3ZGViNGYwN2E0MjBm
M2FjZmU5YmJhMmU5Ni4uOWI3N2IxMDUwOTdhNGYxNzI5MWM5N2Q2Y2VjZmVmZjkyZWNjNWI0OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzQzMyw2ICszNDMzLDggQEAKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYWNraW5nVGV4
dHVyZUFsbG9jYXRvci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RyYWNraW5nVGV4dHVyZUFsbG9jYXRvci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUNvcGllci5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAnLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzMkRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNzAwMzgyNmQ3MGUxOGMz
MmFhZGIxODQ2MzIxMjJkYjViMjIxMjcwZC4uMmQ3NjM4ZmJmYjcxY2I3YmRkMGU2NzU0OTFiOTFh
MTFiMmI2ZTNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCkBAIC0z
Nyw2ICszNyw3IEBACiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5o
IiAvLyBGb3IgdGhlIEdMQygpIG1hY3JvCisjaW5jbHVkZSAiVGV4dHVyZUNvcGllci5oIgogI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgImNjL0NDVGV4dHVyZUxheWVy
SW1wbC5oIgogI2luY2x1ZGUgImNjL0NDVGV4dHVyZVVwZGF0ZXIuaCIKQEAgLTU2LDE4ICs1Nywx
MyBAQCBDYW52YXMyRExheWVyQ2hyb21pdW06OkNhbnZhczJETGF5ZXJDaHJvbWl1bShQYXNzUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZQogICAgICwgbV9jb250ZXh0TG9zdChmYWxzZSkK
ICAgICAsIG1fc2l6ZShzaXplKQogICAgICwgbV9iYWNrVGV4dHVyZUlkKDApCi0gICAgLCBtX2Zi
bygwKQogICAgICwgbV91c2VEb3VibGVCdWZmZXJpbmcoQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgp
KQogICAgICwgbV9jYW52YXMoMCkKIHsKLSAgICBpZiAobV91c2VEb3VibGVCdWZmZXJpbmcpCi0g
ICAgICAgIEdMQyhtX2NvbnRleHQsIG1fZmJvID0gbV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZl
cigpKTsKIH0KIAogQ2FudmFzMkRMYXllckNocm9taXVtOjp+Q2FudmFzMkRMYXllckNocm9taXVt
KCkKIHsKLSAgICBpZiAobV91c2VEb3VibGVCdWZmZXJpbmcgJiYgbV9mYm8pCi0gICAgICAgR0xD
KG1fY29udGV4dCwgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihtX2ZibykpOwogICAgIGlm
IChtX2NvbnRleHQgJiYgbGF5ZXJUcmVlSG9zdCgpKQogICAgICAgICBsYXllclRyZWVIb3N0KCkt
PnN0b3BSYXRlTGltaXRlcihtX2NvbnRleHQuZ2V0KCkpOwogfQpAQCAtMTM4LDE1ICsxMzQsOCBA
QCB2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dAogICAgIGlmICghbV9iYWNrVGV4dHVyZUlkIHx8ICFt
X2Zyb250VGV4dHVyZSB8fCAhbV9mcm9udFRleHR1cmUtPmlzVmFsaWQobV9zaXplLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZnJvbnRUZXh0dXJl
LT5iaW5kVGV4dHVyZShjb250ZXh0LCB1cGRhdGVyLmFsbG9jYXRvcigpKTsKLQotICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBtX2ZibykpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5mcmFtZWJ1ZmZlclRl
eHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNE
OjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fYmFj
a1RleHR1cmVJZCwgMCkpOwotICAgIC8vIEZJWE1FOiBUaGUgY29weSBvcGVyYXRpb24gd2lsbCBm
YWlsIGlmIHRoZSBtX2JhY2tUZXh0dXJlIGlzIGFsbG9jYXRlZCBhcyBCR1JBIHNpbmNlIGdsQ29w
eVRleChTdWIpSW1hZ2UyRCBkb2Vzbid0Ci0gICAgLy8gICAgICAgIHN1cHBvcnQgdGhlIEJHUkEg
Zm9ybWF0LiBTZWUgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NTE0MgotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRChHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgMCwgMCwgbV9zaXplLndpZHRoKCksIG1f
c2l6ZS5oZWlnaHQoKSkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kRnJhbWVidWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKSk7Ci0gICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPmZsdXNoKCkpOworICAgIG1fZnJvbnRUZXh0dXJlLT5hbGxvY2F0ZSh1cGRhdGVy
LmFsbG9jYXRvcigpKTsKKyAgICB1cGRhdGVyLmNvcGllcigpLT5jb3B5VGV4dHVyZShjb250ZXh0
LCBtX2JhY2tUZXh0dXJlSWQsIG1fZnJvbnRUZXh0dXJlLT50ZXh0dXJlSWQoKSwgbV9zaXplKTsK
IH0KIAogdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXll
ckltcGwqIGxheWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaAppbmRleCA5MzAy
MjQ2ODRiYmU0ODBhYjg4NjQ1NGVjZDRhYWY1MGZiNTA3NzYxLi5iNWQwYzIzODkxZmIwNWI2MjE4
MjQ5MTAyNTBkNTkwYjhiNzJjNjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0u
aApAQCAtNzIsNyArNzIsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jb250ZXh0TG9zdDsKICAg
ICBJbnRTaXplIG1fc2l6ZTsKICAgICB1bnNpZ25lZCBtX2JhY2tUZXh0dXJlSWQ7Ci0gICAgUGxh
dGZvcm0zRE9iamVjdCBtX2ZibzsKICAgICAvLyBXaGVuIG1fdXNlRG91YmxlQnVmZmVyaW5nIGlz
IHRydWUsIHRoZSBjb21wb3NpdG9yIHdpbGwgZHJhdyB1c2luZyBhIGNvcHkgb2YgdGhlCiAgICAg
Ly8gY2FudmFzJyBiYWNraW5nIHRleHR1cmUuIFRoaXMgb3B0aW9uIHNob3VsZCBiZSB1c2VkIHdp
dGggdGhlIGNvbXBvc2l0b3IgZG9lc24ndAogICAgIC8vIHN5bmNocm9uaXplIGl0cyBkcmF3cyB3
aXRoIHRoZSBjYW52YXMgdXBkYXRlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwCmluZGV4IDI3YjNlZGU1MTMyNTdhN2E5ZjQ2YjlhZTI0OTIxOTZhNmM5NjM5OTAuLmU3ZWMx
M2VhODRhZTM4Y2E0MzcxMzQ2ZGNlMzY1Y2U4Y2FmNWYxZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3Jt
Q29sb3IuaCIKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJU
ZXh0U3RyZWFtLmgiCisjaW5jbHVkZSAiVGV4dHVyZUNvcGllci5oIgogI2luY2x1ZGUgIlRleHR1
cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUgIlRyYWNraW5n
VGV4dHVyZUFsbG9jYXRvci5oIgpAQCAtMTIxNSw2ICsxMjE2LDcgQEAgYm9vbCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkKICAgICBtX3JlbmRlclN1cmZh
Y2VUZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoVGV4dHVyZU1hbmFnZXI6
OmhpZ2hMaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dHVyZU1hbmFnZXI6OnJlY2xh
aW1MaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVy
ZVNpemUpOworICAgIG1fdGV4dHVyZUNvcGllciA9IEFjY2VsZXJhdGVkVGV4dHVyZUNvcGllcjo6
Y3JlYXRlKG1fY29udGV4dC5nZXQoKSk7CiAgICAgbV9jb250ZW50c1RleHR1cmVBbGxvY2F0b3Ig
PSBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpOwogICAg
IG1fcmVuZGVyU3VyZmFjZVRleHR1cmVBbGxvY2F0b3IgPSBUcmFja2luZ1RleHR1cmVBbGxvY2F0
b3I6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpOwogICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2lu
Z1RleHR1cmVVc2FnZUhpbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4
IDUyZWE4N2MxMzNiMTU3ZjFhNWUwYTg4MjBhZGRmNjMxNjFmMDhkNjMuLjg4ZmJmMzY3YmNkMmJi
Mzg2OWUxNTBkZTJiMzU1MTk1YWFhNmVjMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5oCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJUZXh0
dXJlQ29waWVyLmgiCiAjaW5jbHVkZSAiVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmgiCiAjaW5j
bHVkZSAiVmlkZW9MYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NEcmF3UXVhZC5oIgpA
QCAtNTksNyArNjAsNiBAQCBjbGFzcyBDQ1JlbmRlclBhc3M7CiBjbGFzcyBDQ1RleHR1cmVEcmF3
UXVhZDsKIGNsYXNzIEdlb21ldHJ5QmluZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwot
Y2xhc3MgVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOwogY2xhc3MgTGF5ZXJSZW5kZXJlclN3YXBC
dWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXI7CiAKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJv
bWl1bUNsaWVudCB7CkBAIC0xNDAsNiArMTQwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0RnJh
bWVidWZmZXJQaXhlbHModm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICBUZXh0
dXJlTWFuYWdlciogcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyKCkgY29uc3QgeyByZXR1cm4g
bV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIuZ2V0KCk7IH0KKyAgICBUZXh0dXJlQ29waWVy
KiB0ZXh0dXJlQ29waWVyKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlQ29waWVyLmdldCgpOyB9
CiAgICAgVGV4dHVyZUFsbG9jYXRvciogcmVuZGVyU3VyZmFjZVRleHR1cmVBbGxvY2F0b3IoKSBj
b25zdCB7IHJldHVybiBtX3JlbmRlclN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yLmdldCgpOyB9CiAg
ICAgVGV4dHVyZUFsbG9jYXRvciogY29udGVudHNUZXh0dXJlQWxsb2NhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZW50c1RleHR1cmVBbGxvY2F0b3IuZ2V0KCk7IH0KIApAQCAtMjQyLDYgKzI0
Myw3IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPENDVmlkZW9MYXllckltcGw6OlN0cmVhbVRleHR1
cmVQcm9ncmFtPiBtX3N0cmVhbVRleHR1cmVMYXllclByb2dyYW07CiAKICAgICBPd25QdHI8VGV4
dHVyZU1hbmFnZXI+IG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyOworICAgIE93blB0cjxB
Y2NlbGVyYXRlZFRleHR1cmVDb3BpZXI+IG1fdGV4dHVyZUNvcGllcjsKICAgICBPd25QdHI8VHJh
Y2tpbmdUZXh0dXJlQWxsb2NhdG9yPiBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcjsKICAgICBP
d25QdHI8VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yPiBtX3JlbmRlclN1cmZhY2VUZXh0dXJlQWxs
b2NhdG9yOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5jcHAKaW5kZXggNzFkNGQxZmQxOGQ5ODYyMWQy
Y2M0YjQ5YWY5ZGFlY2Q2MTVlYzc4Ny4uMGJjOTEyNzcyODkwNzcwMmVmYjk3MWFkYTZmODlmYjkx
MGFhZWViOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vU2hhZGVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmNwcApAQCAtMTg4LDYgKzE4OCwyMCBAQCBW
ZXJ0ZXhTaGFkZXJRdWFkOjpWZXJ0ZXhTaGFkZXJRdWFkKCkKIHsKIH0KIAorU3RyaW5nIFZlcnRl
eFNoYWRlclBvc1RleElkZW50aXR5OjpnZXRTaGFkZXJTdHJpbmcoKSBjb25zdAoreworICAgIHJl
dHVybiBTSEFERVIoCisgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb247CisgICAgICAg
IGF0dHJpYnV0ZSB2ZWMyIGFfdGV4Q29vcmQ7CisgICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENv
b3JkOworICAgICAgICB2b2lkIG1haW4oKQorICAgICAgICB7CisgICAgICAgICAgICBnbF9Qb3Np
dGlvbiA9IGFfcG9zaXRpb247CisgICAgICAgICAgICB2X3RleENvb3JkID0gYV90ZXhDb29yZDsK
KyAgICAgICAgfQorICAgICk7Cit9CisKIHZvaWQgVmVydGV4U2hhZGVyUXVhZDo6aW5pdChHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgdW5zaWduZWQgcHJvZ3JhbSkKIHsKICAgICBtX21hdHJp
eExvY2F0aW9uID0gY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJtYXRyaXgi
KTsKQEAgLTQxMCw2ICs0MjQsMjAgQEAgU3RyaW5nIEZyYWdtZW50U2hhZGVyUkdCQVRleE9wYXF1
ZTo6Z2V0U2hhZGVyU3RyaW5nKCkgY29uc3QKICAgICApOwogfQogCitTdHJpbmcgRnJhZ21lbnRT
aGFkZXJSR0JBVGV4Q29weTo6Z2V0U2hhZGVyU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
U0hBREVSKAorICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKKyAgICAgICAgdmFyeWlu
ZyB2ZWMyIHZfdGV4Q29vcmQ7CisgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfdGV4dHVyZTsK
KyAgICAgICAgdm9pZCBtYWluKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmVjNCB0ZXhDb2xv
ciA9IHRleHR1cmUyRChzX3RleHR1cmUsIHZfdGV4Q29vcmQpOworICAgICAgICAgICAgZ2xfRnJh
Z0NvbG9yID0gdGV4Q29sb3I7CisgICAgICAgIH0KKyAgICApOworfQorCiBTdHJpbmcgRnJhZ21l
bnRTaGFkZXJSR0JBVGV4U3dpenpsZUFscGhhOjpnZXRTaGFkZXJTdHJpbmcoKSBjb25zdAogewog
ICAgIHJldHVybiBTSEFERVIoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uaAppbmRleCAyYmQ3NjBhOTlmYzQ2
NjA3MGM1NmYzYWUyNDFjMmEyMDJhMzMwNmZhLi5jNmE3ZjM2MmRkMmE4NDcwNWJiZjY4ZjIxZmNk
MjZhNGQxYjE5NzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmgKQEAgLTk1LDYgKzk1LDEyIEBAIHBy
aXZhdGU6CiAgICAgaW50IG1fbWF0cml4TG9jYXRpb247CiB9OwogCitjbGFzcyBWZXJ0ZXhTaGFk
ZXJQb3NUZXhJZGVudGl0eSB7CitwdWJsaWM6CisgICAgdm9pZCBpbml0KEdyYXBoaWNzQ29udGV4
dDNEKiwgdW5zaWduZWQgcHJvZ3JhbSkgeyB9CisgICAgU3RyaW5nIGdldFNoYWRlclN0cmluZygp
IGNvbnN0OworfTsKKwogY2xhc3MgVmVydGV4U2hhZGVyUG9zVGV4VHJhbnNmb3JtIHsKIHB1Ymxp
YzoKICAgICBWZXJ0ZXhTaGFkZXJQb3NUZXhUcmFuc2Zvcm0oKTsKQEAgLTIxMyw2ICsyMTksMTEg
QEAgcHVibGljOgogICAgIFN0cmluZyBnZXRTaGFkZXJTdHJpbmcoKSBjb25zdDsKIH07CiAKK2Ns
YXNzIEZyYWdtZW50U2hhZGVyUkdCQVRleENvcHkgOiBwdWJsaWMgRnJhZ21lbnRUZXhPcGFxdWVC
aW5kaW5nIHsKK3B1YmxpYzoKKyAgICBTdHJpbmcgZ2V0U2hhZGVyU3RyaW5nKCkgY29uc3Q7Cit9
OworCiAvLyBTd2l6emxlcyB0aGUgcmVkIGFuZCBibHVlIGNvbXBvbmVudCBvZiBzYW1wbGVkIHRl
eGVsIHdpdGggYWxwaGEuCiBjbGFzcyBGcmFnbWVudFNoYWRlclJHQkFUZXhTd2l6emxlQWxwaGEg
OiBwdWJsaWMgRnJhZ21lbnRUZXhBbHBoYUJpbmRpbmcgewogcHVibGljOgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUNvcGllci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlQ29w
aWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zYTA1OWQ2M2Y3M2IxMWYzMTE0MzkxYTY3ZTUzNDU2MjQ2MTM0
OWI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGV4dHVyZUNvcGllci5jcHAKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJUZXh0dXJlQ29waWVyLmgiCisK
KyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIgLy8gRm9yIHRoZSBHTEMoKSBtYWNy
bworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCitBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXI6OkFjY2VsZXJhdGVkVGV4dHVyZUNvcGllcihQ
YXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQorICAgIDogbV9jb250ZXh0KGNv
bnRleHQpCit7CisgICAgR0xDKG1fY29udGV4dCwgbV9mYm8gPSBtX2NvbnRleHQtPmNyZWF0ZUZy
YW1lYnVmZmVyKCkpOworICAgIEdMQyhtX2NvbnRleHQsIG1fcG9zaXRpb25CdWZmZXIgPSBtX2Nv
bnRleHQtPmNyZWF0ZUJ1ZmZlcigpKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX3RleENvb3JkQnVm
ZmVyID0gbV9jb250ZXh0LT5jcmVhdGVCdWZmZXIoKSk7CisKKyAgICBzdGF0aWMgY29uc3QgZmxv
YXQga1Bvc2l0aW9uc1s0XVs0XSA9IHsKKyAgICAgICAgey0xLCAtMSwgMCwgMX0sCisgICAgICAg
IHsgMSwgLTEsIDAsIDF9LAorICAgICAgICB7IDEsIDEsIDAsIDF9LAorICAgICAgICB7LTEsIDEs
IDAsIDF9CisgICAgfTsKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQga1RleENvb3Jkc1s0XVsyXSA9
IHsKKyAgICAgICAgezAsIDB9LAorICAgICAgICB7MSwgMH0sCisgICAgICAgIHsxLCAxfSwKKyAg
ICAgICAgezAsIDF9CisgICAgfTsKKworICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4
dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3Bvc2l0aW9u
QnVmZmVyKSk7CisgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5idWZmZXJEYXRh
KEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHNpemVvZihrUG9zaXRpb25zKSwga1Bv
c2l0aW9ucywgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKSk7CisgICAgR0xDKG1fY29u
dGV4dC5nZXQoKSwgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJB
WV9CVUZGRVIsIG1fdGV4Q29vcmRCdWZmZXIpKTsKKyAgICBHTEMobV9jb250ZXh0LmdldCgpLCBt
X2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgc2l6
ZW9mKGtUZXhDb29yZHMpLCBrVGV4Q29vcmRzLCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RS
QVcpKTsKKyAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCkpOworCisgICAgbV9ibGl0UHJvZ3JhbSA9
IGFkb3B0UHRyKG5ldyBCbGl0UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICBtX2JsaXRQ
cm9ncmFtLT5pbml0aWFsaXplKG1fY29udGV4dC5nZXQoKSk7Cit9CisKK0FjY2VsZXJhdGVkVGV4
dHVyZUNvcGllcjo6fkFjY2VsZXJhdGVkVGV4dHVyZUNvcGllcigpCit7CisgICAgaWYgKG1fdGV4
Q29vcmRCdWZmZXIpCisgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGVsZXRlQnVm
ZmVyKG1fdGV4Q29vcmRCdWZmZXIpKTsKKyAgICBpZiAobV9wb3NpdGlvbkJ1ZmZlcikKKyAgICAg
ICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kZWxldGVCdWZmZXIobV9wb3NpdGlvbkJ1ZmZl
cikpOworICAgIGlmIChtX2ZibykKKyAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5k
ZWxldGVGcmFtZWJ1ZmZlcihtX2ZibykpOworfQorCit2b2lkIEFjY2VsZXJhdGVkVGV4dHVyZUNv
cGllcjo6Y29weVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHNv
dXJjZVRleHR1cmVJZCwgdW5zaWduZWQgZGVzdFRleHR1cmVJZCwgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKK3sKKyAgICBUUkFDRV9FVkVOVCgiVGV4dHVyZUNvcGllcjo6Y29weVRleHR1cmUiLCB0aGlz
LCAwKTsKKworICAgIC8vIE5vdGU6IHRoaXMgY29kZSBkb2VzIG5vdCByZXN0b3JlIHRoZSB2aWV3
cG9ydCwgYm91bmQgcHJvZ3JhbSwgMkQgdGV4dHVyZSwgZnJhbWVidWZmZXIsIGJ1ZmZlciBvciBi
bGVuZCBlbmFibGUuCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKSk7CisgICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgZGVzdFRleHR1cmVJZCwgMCkpOworCisgICAgLy8gVE9ETzogVXNl
IEVYVF9kaXNjYXJkX2ZyYW1lYnVmZmVyIG9yIHNraXAgY2xlYXJpbmcgaWYgaXQgaXNuJ3QgYXZh
aWxhYmxlLgorICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQz
RDo6Q09MT1JfQlVGRkVSX0JJVCkpOworCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBzb3VyY2VUZXh0dXJlSWQpKTsK
KyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QpKTsKKwor
ICAgIC8vIFRPRE86IFVzZSBFWFRfZnJhbWVidWZmZXJfYmxpdCBpZiBhdmFpbGFibGUuCisgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPnVzZVByb2dyYW0obV9ibGl0UHJvZ3JhbS0+cHJvZ3JhbSgp
KSk7CisKKyAgICBjb25zdCBpbnQga1Bvc2l0aW9uQXR0cmlidXRlID0gMDsKKyAgICBjb25zdCBp
bnQga1RleENvb3JkQXR0cmlidXRlID0gMTsKKworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5i
aW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fcG9zaXRpb25CdWZm
ZXIpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihrUG9z
aXRpb25BdHRyaWJ1dGUsIDQsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDAp
KTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoa1Bv
c2l0aW9uQXR0cmlidXRlKSk7CisKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZEJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3RleENvb3JkQnVmZmVyKSk7Cisg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoa1RleENvb3JkQXR0
cmlidXRlLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKSk7CisgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGtUZXhDb29yZEF0
dHJpYnV0ZSkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDApKTsKKworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT52aWV3cG9ydCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKKyAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpKTsKKyAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJ
QU5HTEVfRkFOLCAwLCA0KSk7CisKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1l
dGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOworICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRl
eHQzRDo6TElORUFSKSk7CisKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+ZGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KGtQb3NpdGlvbkF0dHJpYnV0ZSkpOworICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoa1RleENvb3JkQXR0cmlidXRlKSk7CisKKyAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbSgwKSk7CisKKyAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCAwLCAwKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApKTsKKyAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIDApKTsKK30KKworfQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGV4dHVyZUNvcGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGV4dHVyZUNvcGllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVlNGNiOWM4ZDNmMWJhYTk5MzRhNzky
YmE3NTEwYWQ1YWY0Mzk1OGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmgKQEAgLTAsMCArMSw3NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgVGV4dHVyZUNvcGllcl9oCisjZGVmaW5lIFRleHR1cmVD
b3BpZXJfaAorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJQcm9n
cmFtQmluZGluZy5oIgorI2luY2x1ZGUgIlNoYWRlckNocm9taXVtLmgiCisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0dXJlQ29w
aWVyIHsKK3B1YmxpYzoKKyAgICAvLyBDb3B5IHRoZSBiYXNlIGxldmVsIGNvbnRlbnRzIG9mIHxz
b3VyY2VUZXh0dXJlSWR8IHRvIHxkZXN0VGV4dHVyZUlkfC4gQm90aCB0ZXh0dXJlIG9iamVjdHMK
KyAgICAvLyBtdXN0IGJlIGNvbXBsZXRlIGFuZCBoYXZlIGEgYmFzZSBsZXZlbCBvZiB8c2l6ZXwg
ZGltZW5zaW9ucy4gVGhlIGNvbG9yIGZvcm1hdHMgZG8gbm90IG5lZWQKKyAgICAvLyB0byBtYXRj
aCwgYnV0IHxkZXN0VGV4dHVyZUlkfCBtdXN0IGhhdmUgYSByZW5kZXJhYmxlIGZvcm1hdC4KKyAg
ICB2aXJ0dWFsIHZvaWQgY29weVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCBz
b3VyY2VUZXh0dXJlSWQsIHVuc2lnbmVkIGRlc3RUZXh0dXJlSWQsIGNvbnN0IEludFNpemUmKSA9
IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5UZXh0dXJlQ29waWVyKCkgeyB9Cit9Owor
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCitjbGFzcyBBY2NlbGVyYXRlZFRl
eHR1cmVDb3BpZXIgOiBwdWJsaWMgVGV4dHVyZUNvcGllciB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c093blB0cjxBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXI+IGNyZWF0ZShQYXNzUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXIoY29udGV4dCkpOworICAgIH0KKyAgICB2aXJ0dWFs
IH5BY2NlbGVyYXRlZFRleHR1cmVDb3BpZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkIHNvdXJjZVRleHR1cmVJZCwgdW5zaWdu
ZWQgZGVzdFRleHR1cmVJZCwgY29uc3QgSW50U2l6ZSYpOworCitwcm90ZWN0ZWQ6CisgICAgZXhw
bGljaXQgQWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+KTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRl
clBvc1RleElkZW50aXR5LCBGcmFnbWVudFNoYWRlclJHQkFUZXhDb3B5PiBCbGl0UHJvZ3JhbTsK
KworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OworICAgIFBsYXRmb3Jt
M0RPYmplY3QgbV9mYm87CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX3Bvc2l0aW9uQnVmZmVyOwor
ICAgIFBsYXRmb3JtM0RPYmplY3QgbV90ZXhDb29yZEJ1ZmZlcjsKKyAgICBPd25QdHI8QmxpdFBy
b2dyYW0+IG1fYmxpdFByb2dyYW07Cit9OworCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFBy
b3h5LmNwcAppbmRleCBiNmZjNzZiNTJlOGJkZjRmZWE5NzU1MGEyMTZlZjEzMmZmN2I1YmY1Li42
Y2Y4ODYzYjRkNjM3ZTZmZWE2YWEzM2ZmNTRmNTQ4MWFhZTgxMjI5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAtMjAwLDcgKzIwMCw3IEBAIHZvaWQgQ0NTaW5n
bGVUaHJlYWRQcm94eTo6ZG9Db21taXQoKQogICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5i
ZWdpbkNvbW1pdCgpOwogCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+YmVnaW5Db21taXRPbklt
cGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7Ci0gICAgICAgIENDVGV4dHVyZVVw
ZGF0ZXIgdXBkYXRlcihtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVBbGxvY2F0
b3IoKSk7CisgICAgICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcihtX2xheWVyVHJlZUhvc3RJ
bXBsLT5jb250ZW50c1RleHR1cmVBbGxvY2F0b3IoKSwgbV9sYXllclRyZWVIb3N0SW1wbC0+bGF5
ZXJSZW5kZXJlcigpLT50ZXh0dXJlQ29waWVyKCkpOwogICAgICAgICBtX2xheWVyVHJlZUhvc3Qt
PnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMobV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGV4dCgp
LCB1cGRhdGVyKTsKICAgICAgICAgdXBkYXRlci51cGRhdGUobV9sYXllclRyZWVIb3N0SW1wbC0+
Y29udGV4dCgpLCBudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSk7CiAgICAgICAgIEFTU0VS
VCghdXBkYXRlci5oYXNNb3JlVXBkYXRlcygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRl
ci5jcHAKaW5kZXggNjZlMDhjOGJkOTNmMTgyNmEzOWI1NTNjMjk2NTBhODNhYzA5ZThlYS4uMGNl
MGY2ZDEwOThhNzM5NzdmM2JhZjgyMzJmNzIxNmIwNWU3YWQ3ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
ZXh0dXJlVXBkYXRlci5jcHAKQEAgLTM3LDggKzM3LDkgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DQ1RleHR1cmVVcGRhdGVyOjpDQ1RleHR1cmVVcGRh
dGVyKFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvcikKK0NDVGV4dHVyZVVwZGF0ZXI6OkNDVGV4
dHVyZVVwZGF0ZXIoVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBUZXh0dXJlQ29waWVyKiBj
b3BpZXIpCiAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCisgICAgLCBtX2NvcGllcihjb3Bp
ZXIpCiAgICAgLCBtX2VudHJ5SW5kZXgoMCkKIHsKICAgICBBU1NFUlQobV9hbGxvY2F0b3IpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oCmluZGV4IGRiYjUyYzliYWQyMDQzNGRkYmY3NGM2
MjhhNDQ0NWU5ZDdlOTg3ZDIuLmQyOWM2NTg2MWU5MzIzZWNmZjgyZGU0MGJjZGJmN2UyNDZiNDk3
MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgKQEAgLTM0LDEwICszNCwxMSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgVGV4
dHVyZUFsbG9jYXRvcjsKK2NsYXNzIFRleHR1cmVDb3BpZXI7CiAKIGNsYXNzIENDVGV4dHVyZVVw
ZGF0ZXIgewogcHVibGljOgotICAgIENDVGV4dHVyZVVwZGF0ZXIoVGV4dHVyZUFsbG9jYXRvciop
OworICAgIENDVGV4dHVyZVVwZGF0ZXIoVGV4dHVyZUFsbG9jYXRvciosIFRleHR1cmVDb3BpZXIq
KTsKICAgICB+Q0NUZXh0dXJlVXBkYXRlcigpOwogCiAgICAgdm9pZCBhcHBlbmQoTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFJlY3QmIGRlc3RSZWN0KTsKQEAgLTUxLDYgKzUyLDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xl
YXIoKTsKIAogICAgIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvcigpIHsgcmV0dXJuIG1fYWxs
b2NhdG9yOyB9CisgICAgVGV4dHVyZUNvcGllciogY29waWVyKCkgeyByZXR1cm4gbV9jb3BpZXI7
IH0KIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgVXBkYXRlRW50cnkgewpAQCAtNjIsNiArNjQsNyBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGFwcGVuZChMYXllclRleHR1cmVVcGRhdGVyOjpU
ZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJl
Y3QsIFZlY3RvcjxVcGRhdGVFbnRyeT4mKTsKIAogICAgIFRleHR1cmVBbGxvY2F0b3IqIG1fYWxs
b2NhdG9yOworICAgIFRleHR1cmVDb3BpZXIqIG1fY29waWVyOwogICAgIHNpemVfdCBtX2VudHJ5
SW5kZXg7CiAgICAgVmVjdG9yPFVwZGF0ZUVudHJ5PiBtX2VudHJpZXM7CiAgICAgVmVjdG9yPFVw
ZGF0ZUVudHJ5PiBtX3BhcnRpYWxFbnRyaWVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApp
bmRleCAzMjdkOWJlMGIxMjBmYjllZmRlZmY4MDUzMTg4MDUzMzA2YWJkYTRiLi5hNmUyZTYyNWYz
NmRjYWIxNDRkZmM3YWNhNjRiM2Y1N2QwOGM3NmFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
LmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNjL0NDVGhyZWFkUHJveHkuaCIKIAog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUgImNjL0NDRGVsYXlC
YXNlZFRpbWVTb3VyY2UuaCIKICNpbmNsdWRlICJjYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaCIK
QEAgLTQ4Miw3ICs0ODMsNyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0
ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbgogICAgIG1fY29tbWl0
Q29tcGxldGlvbkV2ZW50T25JbXBsVGhyZWFkID0gY29tcGxldGlvbjsKIAogICAgIEFTU0VSVCgh
bV9jdXJyZW50VGV4dHVyZVVwZGF0ZXJPbkltcGxUaHJlYWQpOwotICAgIG1fY3VycmVudFRleHR1
cmVVcGRhdGVyT25JbXBsVGhyZWFkID0gYWRvcHRQdHIobmV3IENDVGV4dHVyZVVwZGF0ZXIobV9s
YXllclRyZWVIb3N0SW1wbC0+Y29udGVudHNUZXh0dXJlQWxsb2NhdG9yKCkpKTsKKyAgICBtX2N1
cnJlbnRUZXh0dXJlVXBkYXRlck9uSW1wbFRocmVhZCA9IGFkb3B0UHRyKG5ldyBDQ1RleHR1cmVV
cGRhdGVyKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpLCBt
X2xheWVyVHJlZUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCktPnRleHR1cmVDb3BpZXIoKSkpOwog
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhtX2xheWVyVHJl
ZUhvc3RJbXBsLT5jb250ZXh0KCksICptX2N1cnJlbnRUZXh0dXJlVXBkYXRlck9uSW1wbFRocmVh
ZCk7CiAKICAgICBtX3NjaGVkdWxlck9uSW1wbFRocmVhZC0+YmVnaW5GcmFtZUNvbXBsZXRlKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCA2YTYzNDE2YjY5ZGIxMjZhMjA5OTNl
ZmUyYzVjZTEwZGNkZjA1NTFiLi4wMTQxZmZlNmM5MDI0NjMzYzNjN2Y3ODVmMDkwYjE5MDc1ZDg2
ZmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTExOSw2ICsxMTksNyBAQAog
ICAgICAgICAgICAgJ3Rlc3RzL1JlZ2lvblRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9S
ZW5kZXJUYWJsZUNlbGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvU2Nyb2xsYmFyTGF5
ZXJDaHJvbWl1bVRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9UZXh0dXJlQ29waWVyVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1RleHR1cmVNYW5hZ2VyVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwJywKICAgICAgICAgICAg
ICd0ZXN0cy9UaWxpbmdEYXRhVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggMTRj
OTJhZTlmN2M5MmU5YzdhYTk2MzQ0MzhkYmQ5MjdjZTBjYWQ4Ni4uZWEzZDQwZmZlMDgxMDhiZmQx
OWFkNzI2NTg1ZWM1NDhiOTM0MjNjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAjaW5jbHVkZSAiUmVnaW9uLmgiCisjaW5jbHVk
ZSAiVGV4dHVyZUNvcGllci5oIgogI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVk
ZSAiV2ViQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIldlYktpdC5oIgpAQCAtOTIsNiArOTMsMTEg
QEAgcHVibGljOgogICAgIE1PQ0tfTUVUSE9EMyhkZWxldGVUZXh0dXJlLCB2b2lkKHVuc2lnbmVk
LCBjb25zdCBJbnRTaXplJiwgR0MzRGVudW0pKTsKIH07CiAKK2NsYXNzIE1vY2tUZXh0dXJlQ29w
aWVyIDogcHVibGljIFRleHR1cmVDb3BpZXIgeworcHVibGljOgorICAgIE1PQ0tfTUVUSE9ENChj
b3B5VGV4dHVyZSwgdm9pZChHcmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkLCB1bnNpZ25lZCwg
Y29uc3QgSW50U2l6ZSYpKTsKK307CisKIGNsYXNzIENhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3Qg
OiBwdWJsaWMgVGVzdCB7CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmdWxsTGlmZWN5Y2xlVGVzdChi
b29sIHRocmVhZGVkKQpAQCAtMTAxLDExICsxMDcsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIFJl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbWFpbkNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBN
b2NrQ2FudmFzQ29udGV4dCgpKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9I
b3N0V2luZG93KTsKICAgICAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBpbXBsQ29udGV4
dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdl
YkNvbnRleHQoYWRvcHRQdHIobmV3IE1vY2tDYW52YXNDb250ZXh0KCkpLCBHcmFwaGljc0NvbnRl
eHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOwogCi0gICAgICAgIE1vY2tDYW52YXND
b250ZXh0JiBtYWluTW9jayA9ICpzdGF0aWNfY2FzdDxNb2NrQ2FudmFzQ29udGV4dCo+KEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKG1haW5Db250
ZXh0LmdldCgpKSk7Ci0gICAgICAgIE1vY2tDYW52YXNDb250ZXh0JiBpbXBsTW9jayA9ICpzdGF0
aWNfY2FzdDxNb2NrQ2FudmFzQ29udGV4dCo+KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0
cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKGltcGxDb250ZXh0LmdldCgpKSk7Ci0KICAgICAgICAg
TW9ja1RleHR1cmVBbGxvY2F0b3IgYWxsb2NhdG9yTW9jazsKLSAgICAgICAgQ0NUZXh0dXJlVXBk
YXRlciB1cGRhdGVyKCZhbGxvY2F0b3JNb2NrKTsKKyAgICAgICAgTW9ja1RleHR1cmVDb3BpZXIg
Y29waWVyTW9jazsKKyAgICAgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZhbGxvY2F0b3JN
b2NrLCAmY29waWVyTW9jayk7CiAKICAgICAgICAgY29uc3QgSW50U2l6ZSBzaXplKDMwMCwgMTUw
KTsKIApAQCAtMTIwLDI4ICsxMjQsMTYgQEAgcHJvdGVjdGVkOgogCiAgICAgICAgIGNvbnN0IFdl
YkdMSWQgYmFja1RleHR1cmVJZCA9IDE7CiAgICAgICAgIGNvbnN0IFdlYkdMSWQgZnJvbnRUZXh0
dXJlSWQgPSAyOwotICAgICAgICBjb25zdCBXZWJHTElkIGZib0lkID0gMzsKICAgICAgICAgewog
ICAgICAgICAgICAgSW5TZXF1ZW5jZSBzZXF1ZW5jZTsKIAogICAgICAgICAgICAgLy8gTm90ZSB0
aGF0IHRoZSBjYW52YXMgYmFja2luZyB0ZXh0dXJlIGlzIGRvdWJsZWJ1ZmZlcmVkIG9ubHkgd2hl
biB1c2luZyB0aGUgdGhyZWFkZWQKICAgICAgICAgICAgIC8vIGNvbXBvc2l0b3IuCiAgICAgICAg
ICAgICBpZiAodGhyZWFkZWQpIHsKLSAgICAgICAgICAgICAgICAvLyBTZXR1cCBDYW52YXMyRExh
eWVyQ2hyb21pdW0gKG9uIHRoZSBtYWluIHRocmVhZCkuCi0gICAgICAgICAgICAgICAgRVhQRUNU
X0NBTEwobWFpbk1vY2ssIGNyZWF0ZUZyYW1lYnVmZmVyKCkpCi0gICAgICAgICAgICAgICAgICAg
IC5XaWxsT25jZShSZXR1cm4oZmJvSWQpKTsKLQogICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0
ZXh0dXJlIGFuZCBkbyB0aGUgY29weSAob24gdGhlIGltcGwgdGhyZWFkKS4KICAgICAgICAgICAg
ICAgICBFWFBFQ1RfQ0FMTChhbGxvY2F0b3JNb2NrLCBjcmVhdGVUZXh0dXJlKHNpemUsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBKSkKICAgICAgICAgICAgICAgICAgICAgLldpbGxPbmNlKFJldHVy
bihmcm9udFRleHR1cmVJZCkpOwotICAgICAgICAgICAgICAgIEVYUEVDVF9DQUxMKGltcGxNb2Nr
LCBiaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgZnJvbnRUZXh0dXJl
SWQpKTsKLSAgICAgICAgICAgICAgICBFWFBFQ1RfQ0FMTChpbXBsTW9jaywgYmluZEZyYW1lYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgZmJvSWQpKTsKLSAgICAgICAgICAg
ICAgICBFWFBFQ1RfQ0FMTChpbXBsTW9jaywgZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVO
VDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBiYWNrVGV4dHVyZUlkLCAwKSk7Ci0g
ICAgICAgICAgICAgICAgRVhQRUNUX0NBTEwoaW1wbE1vY2ssIGNvcHlUZXhTdWJJbWFnZTJEKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAwLCAwLCAwLCAwLCAzMDAsIDE1MCkpOwot
ICAgICAgICAgICAgICAgIEVYUEVDVF9DQUxMKGltcGxNb2NrLCBiaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBU
ZWFyZG93biBDYW52YXMyRExheWVyQ2hyb21pdW0uCi0gICAgICAgICAgICAgICAgRVhQRUNUX0NB
TEwobWFpbk1vY2ssIGRlbGV0ZUZyYW1lYnVmZmVyKGZib0lkKSk7CisgICAgICAgICAgICAgICAg
RVhQRUNUX0NBTEwoY29waWVyTW9jaywgY29weVRleHR1cmUoaW1wbENvbnRleHQuZ2V0KCksIGJh
Y2tUZXh0dXJlSWQsIGZyb250VGV4dHVyZUlkLCBzaXplKSk7CiAKICAgICAgICAgICAgICAgICAv
LyBUZWFyZG93biBUZXh0dXJlTWFuYWdlci4KICAgICAgICAgICAgICAgICBFWFBFQ1RfQ0FMTChh
bGxvY2F0b3JNb2NrLCBkZWxldGVUZXh0dXJlKGZyb250VGV4dHVyZUlkLCBzaXplLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9UZXh0dXJlQ29waWVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1RleHR1cmVDb3BpZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNzE3M2MwYTViMzdkMWI4ZWIwOGQ2
Y2IxODJhZDFkMDc0ZTU0ODZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9UZXh0dXJlQ29waWVyVGVzdC5jcHAKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVGV4dHVyZUNvcGllci5o
IgorCisjaW5jbHVkZSAiRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2lu
Y2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyB0ZXN0aW5n
OjpJblNlcXVlbmNlOwordXNpbmcgdGVzdGluZzo6VGVzdDsKK3VzaW5nIHRlc3Rpbmc6Ol87CisK
K25hbWVzcGFjZSB7CisKK2NsYXNzIE1vY2tDb250ZXh0IDogcHVibGljIEZha2VXZWJHcmFwaGlj
c0NvbnRleHQzRCB7CitwdWJsaWM6CisgICAgTU9DS19NRVRIT0QyKGJpbmRGcmFtZWJ1ZmZlciwg
dm9pZChXR0MzRGVudW0sIFdlYkdMSWQpKTsKKyAgICBNT0NLX01FVEhPRDModGV4UGFyYW1ldGVy
aSwgdm9pZChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKSk7
CisKKyAgICBNT0NLX01FVEhPRDMoZHJhd0FycmF5cywgdm9pZChHQzNEZW51bSBtb2RlLCBHQzNE
aW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQpKTsKK307CisKK1RFU1QoVGV4dHVyZUNvcGllclRl
c3QsIHRlc3REcmF3QXJyYXlzQ29weSkKK3sKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBhdHRyczsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0
KGFkb3B0UHRyKG5ldyBNb2NrQ29udGV4dCgpKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRp
cmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICBNb2NrQ29udGV4dCYgbW9ja0NvbnRleHQgPSAqc3Rh
dGljX2Nhc3Q8TW9ja0NvbnRleHQqPihHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RX
ZWJHcmFwaGljc0NvbnRleHQzRChjb250ZXh0LmdldCgpKSk7CisKKyAgICB7CisgICAgICAgIElu
U2VxdWVuY2Ugc2VxdWVuY2U7CisKKyAgICAgICAgLy8gSGVyZSB3ZSBjaGVjayBqdXN0IHNvbWUg
ZXNzZW50aWFsIHByb3BlcnRpZXMgb2YgY29weVRleHR1cmUoKSB0byBhdm9pZCBtaXJyb3Jpbmcg
dGhlIGZ1bGwgaW1wbGVtZW50YXRpb24uCisgICAgICAgIEVYUEVDVF9DQUxMKG1vY2tDb250ZXh0
LCBiaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBfKSk7CisK
KyAgICAgICAgLy8gTWFrZSBzdXJlIGxpbmVhciBmaWx0ZXJpbmcgaXMgZGlzYWJsZWQgZHVyaW5n
IHRoZSBjb3B5LgorICAgICAgICBFWFBFQ1RfQ0FMTChtb2NrQ29udGV4dCwgdGV4UGFyYW1ldGVy
aShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QpKTsKKyAgICAgICAgRVhQ
RUNUX0NBTEwobW9ja0NvbnRleHQsIHRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNz
Q29udGV4dDNEOjpORUFSRVNUKSk7CisKKyAgICAgICAgRVhQRUNUX0NBTEwobW9ja0NvbnRleHQs
IGRyYXdBcnJheXMoXywgXywgXykpOworCisgICAgICAgIC8vIExpbmVhciBmaWx0ZXJpbmcgc2hv
dWxkIGJlIHJlc3RvcmVkLgorICAgICAgICBFWFBFQ1RfQ0FMTChtb2NrQ29udGV4dCwgdGV4UGFy
YW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOworICAgICAg
ICBFWFBFQ1RfQ0FMTChtb2NrQ29udGV4dCwgdGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOworCisgICAgICAgIC8vIERlZmF1bHQgZnJhbWVidWZm
ZXIgc2hvdWxkIGJlIHJlc3RvcmVkCisgICAgICAgIEVYUEVDVF9DQUxMKG1vY2tDb250ZXh0LCBi
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKSk7CisgICAg
fQorCisgICAgaW50IHNvdXJjZVRleHR1cmVJZCA9IDE7CisgICAgaW50IGRlc3RUZXh0dXJlSWQg
PSAyOworICAgIEludFNpemUgc2l6ZSgyNTYsIDEyOCk7CisgICAgT3duUHRyPEFjY2VsZXJhdGVk
VGV4dHVyZUNvcGllcj4gY29waWVyKEFjY2VsZXJhdGVkVGV4dHVyZUNvcGllcjo6Y3JlYXRlKGNv
bnRleHQpKTsKKyAgICBjb3BpZXItPmNvcHlUZXh0dXJlKGNvbnRleHQuZ2V0KCksIHNvdXJjZVRl
eHR1cmVJZCwgZGVzdFRleHR1cmVJZCwgc2l6ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRl
c3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1U
ZXN0LmNwcAppbmRleCA3ZWViYjk3MTQ2ODZhZWUxMTNiZTAyZmFhZTg1NmU1MjBhNjVjMThiLi4z
YmQxM2Y1NWJjMDE0NDZjNTUwZGU0MjJkZTQwMDZhZmM1ZGMyNTBmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAK
QEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJGYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50Lmgi
CiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgor
I2luY2x1ZGUgIlRleHR1cmVDb3BpZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgog
I2luY2x1ZGUgIldlYkNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFBy
b3h5LmgiIC8vIEZvciBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQKQEAgLTczLDYgKzc0LDExIEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVGV4dHVyZSh1bnNpZ25lZCwgY29uc3Qg
SW50U2l6ZSYsIEdDM0RlbnVtKSB7IH0KIH07CiAKK2NsYXNzIEZha2VUZXh0dXJlQ29waWVyIDog
cHVibGljIFRleHR1cmVDb3BpZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3QgSW50U2l6
ZSYpIHsgfQorfTsKKwogY2xhc3MgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTsKIAogY2xhc3MgRmFr
ZUxheWVyVGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlciB7CkBAIC0y
NjEsNyArMjY3LDggQEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGlydHlUaWxl
cykKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihu
ZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKIAogICAgIEZha2VUZXh0dXJlQWxsb2NhdG9y
IHRleHR1cmVBbGxvY2F0b3I7Ci0gICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJl
QWxsb2NhdG9yKTsKKyAgICBGYWtlVGV4dHVyZUNvcGllciB0ZXh0dXJlQ29waWVyOworICAgIEND
VGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvciwgJnRleHR1cmVDb3BpZXIp
OwogCiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVz
IGFuZCB0aGVuIHBhaW50cyB0d28gdGlsZXMuCiAgICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXpl
KDEwMCwgMjAwKSk7CkBAIC0yOTcsNyArMzA0LDggQEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCBwdXNoT2NjbHVkZWREaXJ0eVRpbGVzKQogICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIg
b2NjbHVkZWQ7CiAKICAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9yOwot
ICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvcik7CisgICAgRmFr
ZVRleHR1cmVDb3BpZXIgdGV4dHVyZUNvcGllcjsKKyAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0
ZXIoJnRleHR1cmVBbGxvY2F0b3IsICZ0ZXh0dXJlQ29waWVyKTsKIAogICAgIC8vIFRoZSB0aWxl
IHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdv
IHRpbGVzLgogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwpAQCAtMzQz
LDcgKzM1MSw4IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaElkbGVQYWludFRp
bGVzKQogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRy
KG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwogCiAgICAgRmFrZVRleHR1cmVBbGxvY2F0
b3IgdGV4dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1
cmVBbGxvY2F0b3IpOworICAgIEZha2VUZXh0dXJlQ29waWVyIHRleHR1cmVDb3BpZXI7CisgICAg
Q0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yLCAmdGV4dHVyZUNvcGll
cik7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAuIFNldHVwIDV4NSB0aWxlcyB3
aXRoIG9uZSB2aXNpYmxlIHRpbGUgaW4gdGhlIGNlbnRlci4KICAgICBJbnRTaXplIGNvbnRlbnRC
b3VuZHMoNTAwLCA1MDApOwpAQCAtNDAwLDcgKzQwOSw4IEBAIFRFU1QoVGlsZWRMYXllckNocm9t
aXVtVGVzdCwgcHVzaFRpbGVzTWFya2VkRGlydHlEdXJpbmdQYWludCkKICAgICBPd25QdHI8RmFr
ZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXll
ckltcGwoMCkpKTsKIAogICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIHRleHR1cmVBbGxvY2F0b3I7
Ci0gICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yKTsKKyAgICBG
YWtlVGV4dHVyZUNvcGllciB0ZXh0dXJlQ29waWVyOworICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBk
YXRlcigmdGV4dHVyZUFsbG9jYXRvciwgJnRleHR1cmVDb3BpZXIpOwogCiAgICAgLy8gVGhlIHRp
bGUgc2l6ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0
d28gdGlsZXMuCiAgICAgLy8gSG93ZXZlciwgZHVyaW5nIHRoZSBwYWludCwgd2UgaW52YWxpZGF0
ZSBvbmUgb2YgdGhlIHRpbGVzLiBUaGlzIHNob3VsZApAQCAtNDI3LDcgKzQzNyw4IEBAIFRFU1Qo
VGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTGF5ZXJNYXJrZWREaXJ0eUR1cmluZ1Bh
aW50T25OZXh0TGF5ZXIpCiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllcjJJ
bXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwogCiAgICAgRmFrZVRl
eHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRhdGVyIHVw
ZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworICAgIEZha2VUZXh0dXJlQ29waWVyIHRleHR1cmVD
b3BpZXI7CisgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yLCAm
dGV4dHVyZUNvcGllcik7CiAKICAgICBsYXllcjEtPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAw
KSk7CiAgICAgbGF5ZXIxLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7
CkBAIC00NjMsNyArNDc0LDggQEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGls
ZXNMYXllck1hcmtlZERpcnR5RHVyaW5nUGFpbnRPblByZXZpb3VzTGF5ZXIKICAgICBPd25QdHI8
RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVyMkltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVk
TGF5ZXJJbXBsKDApKSk7CiAKICAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2Nh
dG9yOwotICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvcik7Cisg
ICAgRmFrZVRleHR1cmVDb3BpZXIgdGV4dHVyZUNvcGllcjsKKyAgICBDQ1RleHR1cmVVcGRhdGVy
IHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IsICZ0ZXh0dXJlQ29waWVyKTsKIAogICAgIGxheWVy
MS0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAyMDApKTsKICAgICBsYXllcjEtPmludmFsaWRhdGVS
ZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKQEAgLTUwNSw3ICs1MTcsOCBAQCBURVNUKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE91dE9mTWVtb3J5KQogICAgIE93blB0cjxG
YWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExh
eWVySW1wbCgwKSkpOwogCiAgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRv
cjsKLSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworICAg
IEZha2VUZXh0dXJlQ29waWVyIHRleHR1cmVDb3BpZXI7CisgICAgQ0NUZXh0dXJlVXBkYXRlciB1
cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yLCAmdGV4dHVyZUNvcGllcik7CiAKICAgICAvLyBUaGlz
IGludmFsaWRhdGVzIDkgdGlsZXMgYW5kIHRoZW4gcGFpbnRzIG9uZSB2aXNpYmxlIHRpbGUuCiAg
ICAgbGF5ZXItPnNldEJvdW5kcyhjb250ZW50Qm91bmRzKTsKQEAgLTU0MSw3ICs1NTQsOCBAQCBU
RVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGludmFsaWRhdGVGcm9tUHJlcGFyZSkKICAgICBP
d25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUND
VGlsZWRMYXllckltcGwoMCkpKTsKIAogICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIHRleHR1cmVB
bGxvY2F0b3I7Ci0gICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9y
KTsKKyAgICBGYWtlVGV4dHVyZUNvcGllciB0ZXh0dXJlQ29waWVyOworICAgIENDVGV4dHVyZVVw
ZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvciwgJnRleHR1cmVDb3BpZXIpOwogCiAgICAg
Ly8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVu
IHBhaW50cyB0d28gdGlsZXMuCiAgICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAw
KSk7CkBAIC01ODMsNyArNTk3LDggQEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2ZXJp
ZnlVcGRhdGVSZWN0V2hlbkNvbnRlbnRCb3VuZHNBcmVTY2FsZWQpCiAgICAgUmVmUHRyPEZha2VU
aWxlZExheWVyV2l0aFNjYWxlZEJvdW5kcz4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVk
TGF5ZXJXaXRoU2NhbGVkQm91bmRzKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAKICAgICBGYWtl
VGV4dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9yOwotICAgIENDVGV4dHVyZVVwZGF0ZXIg
dXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvcik7CisgICAgRmFrZVRleHR1cmVDb3BpZXIgdGV4dHVy
ZUNvcGllcjsKKyAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3Is
ICZ0ZXh0dXJlQ29waWVyKTsKIAogICAgIEludFJlY3QgbGF5ZXJCb3VuZHMoMCwgMCwgMzAwLCAy
MDApOwogICAgIEludFJlY3QgY29udGVudEJvdW5kcygwLCAwLCAyMDAsIDI1MCk7CkBAIC02MjEs
NyArNjM2LDggQEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2ZXJpZnlJbnZhbGlkYXRp
b25XaGVuQ29udGVudHNTY2FsZUNoYW5nZXMpCiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJ
bXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CiAK
ICAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9yOwotICAgIENDVGV4dHVy
ZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvcik7CisgICAgRmFrZVRleHR1cmVDb3Bp
ZXIgdGV4dHVyZUNvcGllcjsKKyAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVB
bGxvY2F0b3IsICZ0ZXh0dXJlQ29waWVyKTsKIAogICAgIC8vIENyZWF0ZSBhIGxheWVyIHdpdGgg
b25lIHRpbGUuCiAgICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMTAwKSk7CkBAIC02
OTIsNyArNzA4LDggQEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBza2lwc0RyYXdHZXRz
UmVzZXQpCiAgICAgY2hpbGRMYXllci0+aW52YWxpZGF0ZVJlY3QoY29udGVudFJlY3QpOwogCiAg
ICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1cmVV
cGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworICAgIEZha2VUZXh0dXJlQ29waWVy
IHRleHR1cmVDb3BpZXI7CisgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxs
b2NhdG9yLCAmdGV4dHVyZUNvcGllcik7CiAKICAgICBjY0xheWVyVHJlZUhvc3QtPnNldFJvb3RM
YXllcihyb290TGF5ZXIpOwogICAgIGNjTGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKElu
dFNpemUoMzAwLCAzMDApKTsKQEAgLTc1MSw3ICs3NjgsOCBAQCBURVNUKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIHBhcnRpYWxVcGRhdGVzKQogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250
ZW50UmVjdCk7CiAKICAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9yOwot
ICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvcik7CisgICAgRmFr
ZVRleHR1cmVDb3BpZXIgdGV4dHVyZUNvcGllcjsKKyAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0
ZXIoJnRleHR1cmVBbGxvY2F0b3IsICZ0ZXh0dXJlQ29waWVyKTsKIAogICAgIGNjTGF5ZXJUcmVl
SG9zdC0+c2V0Um9vdExheWVyKGxheWVyKTsKICAgICBjY0xheWVyVHJlZUhvc3QtPnNldFZpZXdw
b3J0U2l6ZShJbnRTaXplKDMwMCwgMjAwKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133772</attachid>
            <date>2012-03-26 04:14:49 -0700</date>
            <delta_ts>2012-03-27 06:54:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80870-20120326121447.patch</filename>
            <type>text/plain</type>
            <size>46595</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMDY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWQ3MWEzYWM5Yzk5Y2M5
ZGRjODc3ZTExMmM1OTM0NGE5NThhMDdlMC4uZDZjZDIxN2U3YTg3MTlkYTdjYjA0NTcxZTFhMDQ3
Y2Y4Zjg2M2Q3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTAzLTE2ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
QWRkIFRleHR1cmVDb3BpZXIgZm9yIGNvcHlpbmcgdGV4dHVyZSBjb250ZW50cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA4NzAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVj
ZXMgYSBUZXh0dXJlQ29waWVyIGNsYXNzIHdob3NlIGpvYiBpcyB0byBjb3B5IHRoZQorICAgICAg
ICBjb250ZW50cyBmcm9tIG9uZSBHTCB0ZXh0dXJlIHRvIGFub3RoZXIgdXNpbmcgdGhlIG1vc3Qg
ZWZmaWNpZW50IG1lYW5zCisgICAgICAgIGZvciB0aGUgY3VycmVudCBHUFUuIFRoaXMgdmVyc2lv
biB1c2VzIHJlbmRlci10by10ZXh0dXJlIHRvIGRvIHRoZSBjb3B5LAorICAgICAgICBidXQgYSBw
YXRoIGJhc2VkIG9uIEVYVF9mcmFtZWJ1ZmZlcl9ibGl0IGNhbiBiZSBhZGRlZCBsYXRlci4KKwor
ICAgICAgICBUaGUgY2xhc3MgaXMgaW50ZW5kZWQgdG8gcmVwbGFjZSB0aGUgdXNlIG9mIGltYWdl
IHBhdGggb3BlcmF0aW9ucyBzdWNoCisgICAgICAgIGFzIGdsQ29weVRleHtTdWJ9SW1hZ2UyRCBm
b3IgZHVwbGljYXRpbmcgdGV4dHVyZSBjb250ZW50cy4gVGhlIHJlYXNvbiBpcworICAgICAgICB0
aGF0IHN1Y2ggZnVuY3Rpb25zIG1heSBub3QgYmUgdmVyeSB3ZWxsIG9wdGltaXplZCBpbiBzb21l
IC0tIG1haW5seQorICAgICAgICBtb2JpbGUgLS0gR1BVIGRyaXZlcnMuCisKKyAgICAgICAgV2l0
aCB0aGlzIHBhdGNoIHRoZSBuZXcgY29waWVyIGlzIHVzZWQganVzdCBmb3IgQ2FudmFzMkQgbGF5
ZXIKKyAgICAgICAgcHJlc2VudGF0aW9uLCBidXQgYW5vdGhlciBwb3RlbnRpYWwgdXNlIGlzIGZv
ciBXZWJHTCBsYXllciBwcmVzZW50YXRpb24uCisKKyAgICAgICAgVGVzdDogd2Via2l0X3VuaXRf
dGVzdHM6IFRleHR1cmVDb3BpZXJUZXN0CisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6Q2FudmFzMkRMYXll
ckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6fkNh
bnZhczJETGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hy
b21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoQ2FudmFz
MkRMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZUNv
cGllcik6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlZlcnRleFNoYWRlclBvc1RleElkZW50aXR5OjpnZXRTaGFkZXJTdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFnbWVudFNoYWRlclJHQkFUZXhDb3B5
OjpnZXRTaGFkZXJTdHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1NoYWRlckNocm9taXVtLmg6CisgICAgICAgIChWZXJ0ZXhTaGFkZXJQb3NUZXhJZGVudGl0eSk6
CisgICAgICAgIChXZWJDb3JlOjpWZXJ0ZXhTaGFkZXJQb3NUZXhJZGVudGl0eTo6aW5pdCk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZyYWdtZW50U2hhZGVyUkdCQVRleENvcHkpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZWxlcmF0ZWRU
ZXh0dXJlQ29waWVyOjpBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyOjp+QWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2VsZXJhdGVkVGV4dHVyZUNvcGllcjo6Y29weVRleHR1cmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFRleHR1cmVDb3BpZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZUNvcGllcjo6flRleHR1cmVDb3BpZXIpOgorICAgICAgICAo
QWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2VsZXJhdGVk
VGV4dHVyZUNvcGllcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2lu
Z2xlVGhyZWFkUHJveHk6OmRvQ29tbWl0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4
dHVyZVVwZGF0ZXI6OkNDVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoQ0NUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVV
cGRhdGVyOjpjb3BpZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6YmVn
aW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkKToKKwogMjAxMi0wMy0yNiAgSWx5YSBUaWtob25v
dnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogcmVw
bGFjZSBpbmRleE9mKCdhIHRleHQnKSA9PT0gMCB3aXRoIFJlZ0V4cCBiZWNhdXNlIGl0IGlzIG11
Y2ggZmFzdGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA1Mjg5ODZlNTAyOTYyZmE4
MjcyM2IzMWYwOWQ5NjhhZmNiZTEzMWQ0Li5jNDRjODllMzViODM3YzAyNDU5NTgwNDYwNmQ4YTA5
MDYzNmY5OGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisy
MDEyLTAzLTE2ICBTYW1pIEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFtjaHJvbWl1bV0gQWRkIFRleHR1cmVDb3BpZXIgZm9yIGNvcHlpbmcgdGV4dHVyZSBjb250
ZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA4
NzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
bmV3IHRlc3QgZm9yIFRleHR1cmVDb3BpZXIuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAg
ICAgICAgKiB0ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcDoKKyAgICAgICAgKiB0
ZXN0cy9UZXh0dXJlQ29waWVyVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL1RpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorICAgICAgICAoRmFrZVRleHR1cmVDb3BpZXIpOgorICAg
ICAgICAoV1RGOjpGYWtlVGV4dHVyZUNvcGllcjo6Y29weVRleHR1cmUpOgorICAgICAgICAoV1RG
KToKKyAgICAgICAgKFdURjo6VEVTVCk6CisKIDIwMTItMDMtMjUgIE5hdCBEdWNhICA8bmR1Y2FA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUm91dGUgd2lsbEJlZ2luRnJhbWUg
ZnJvbSBjb21wb3NpdG9yIHRvIFdlYldpZGdldApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDNkMmVmNzk2
MGQ4Y2ZiYzk2MjJkNGZkNzFmM2E3NDU5YTgzMWI5ZjQuLjhhYzFmODIwMzY1NjEyYmEwMzk0ZGJm
YzNlZTcyMmZlZTU2ZTIwOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1MjQsNiArMzUyNCw4IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUNvcGllci5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFu
YWdlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExh
eWVyQ2hyb21pdW0uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCmlu
ZGV4IDcwMDM4MjZkNzBlMThjMzJhYWRiMTg0NjMyMTIyZGI1YjIyMTI3MGQuLjJkNzYzOGZiZmI3
MWNiN2JkZDBlNjc1NDkxYjkxYTExYjJiNmUzYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXll
ckNocm9taXVtLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENo
cm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXll
clJlbmRlcmVyQ2hyb21pdW0uaCIgLy8gRm9yIHRoZSBHTEMoKSBtYWNybworI2luY2x1ZGUgIlRl
eHR1cmVDb3BpZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRl
ICJjYy9DQ1RleHR1cmVMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1RleHR1cmVVcGRhdGVy
LmgiCkBAIC01NiwxOCArNTcsMTMgQEAgQ2FudmFzMkRMYXllckNocm9taXVtOjpDYW52YXMyRExh
eWVyQ2hyb21pdW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGUKICAgICAsIG1f
Y29udGV4dExvc3QoZmFsc2UpCiAgICAgLCBtX3NpemUoc2l6ZSkKICAgICAsIG1fYmFja1RleHR1
cmVJZCgwKQotICAgICwgbV9mYm8oMCkKICAgICAsIG1fdXNlRG91YmxlQnVmZmVyaW5nKENDUHJv
eHk6Omhhc0ltcGxUaHJlYWQoKSkKICAgICAsIG1fY2FudmFzKDApCiB7Ci0gICAgaWYgKG1fdXNl
RG91YmxlQnVmZmVyaW5nKQotICAgICAgICBHTEMobV9jb250ZXh0LCBtX2ZibyA9IG1fY29udGV4
dC0+Y3JlYXRlRnJhbWVidWZmZXIoKSk7CiB9CiAKIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6fkNh
bnZhczJETGF5ZXJDaHJvbWl1bSgpCiB7Ci0gICAgaWYgKG1fdXNlRG91YmxlQnVmZmVyaW5nICYm
IG1fZmJvKQotICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZm
ZXIobV9mYm8pKTsKICAgICBpZiAobV9jb250ZXh0ICYmIGxheWVyVHJlZUhvc3QoKSkKICAgICAg
ICAgbGF5ZXJUcmVlSG9zdCgpLT5zdG9wUmF0ZUxpbWl0ZXIobV9jb250ZXh0LmdldCgpKTsKIH0K
QEAgLTEzOCwxNSArMTM0LDggQEAgdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNv
bXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQKICAgICBpZiAoIW1f
YmFja1RleHR1cmVJZCB8fCAhbV9mcm9udFRleHR1cmUgfHwgIW1fZnJvbnRUZXh0dXJlLT5pc1Zh
bGlkKG1fc2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX2Zyb250VGV4dHVyZS0+YmluZFRleHR1cmUoY29udGV4dCwgdXBkYXRlci5hbGxvY2F0
b3IoKSk7Ci0KLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pKTsKLSAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBtX2JhY2tUZXh0dXJlSWQsIDApKTsKLSAgICAvLyBGSVhNRTogVGhlIGNv
cHkgb3BlcmF0aW9uIHdpbGwgZmFpbCBpZiB0aGUgbV9iYWNrVGV4dHVyZSBpcyBhbGxvY2F0ZWQg
YXMgQkdSQSBzaW5jZSBnbENvcHlUZXgoU3ViKUltYWdlMkQgZG9lc24ndAotICAgIC8vICAgICAg
ICBzdXBwb3J0IHRoZSBCR1JBIGZvcm1hdC4gU2VlIGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzUxNDIKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+Y29weVRl
eFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDAsIDAsIDAsIDAs
IG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKLSAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCkp
OwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5mbHVzaCgpKTsKKyAgICBtX2Zyb250VGV4dHVy
ZS0+YWxsb2NhdGUodXBkYXRlci5hbGxvY2F0b3IoKSk7CisgICAgdXBkYXRlci5jb3BpZXIoKS0+
Y29weVRleHR1cmUoY29udGV4dCwgbV9iYWNrVGV4dHVyZUlkLCBtX2Zyb250VGV4dHVyZS0+dGV4
dHVyZUlkKCksIG1fc2l6ZSk7CiB9CiAKIHZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpwdXNo
UHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNo
cm9taXVtLmgKaW5kZXggOTMwMjI0Njg0YmJlNDgwYWI4ODY0NTRlY2Q0YWFmNTBmYjUwNzc2MS4u
YjVkMGMyMzg5MWZiMDViNjIxODI0OTEwMjUwZDU5MGI4YjcyYzY3MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9t
aXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzMkRMYXllckNocm9taXVtLmgKQEAgLTcyLDcgKzcyLDYgQEAgcHJpdmF0ZToKICAgICBib29s
IG1fY29udGV4dExvc3Q7CiAgICAgSW50U2l6ZSBtX3NpemU7CiAgICAgdW5zaWduZWQgbV9iYWNr
VGV4dHVyZUlkOwotICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mYm87CiAgICAgLy8gV2hlbiBtX3Vz
ZURvdWJsZUJ1ZmZlcmluZyBpcyB0cnVlLCB0aGUgY29tcG9zaXRvciB3aWxsIGRyYXcgdXNpbmcg
YSBjb3B5IG9mIHRoZQogICAgIC8vIGNhbnZhcycgYmFja2luZyB0ZXh0dXJlLiBUaGlzIG9wdGlv
biBzaG91bGQgYmUgdXNlZCB3aXRoIHRoZSBjb21wb3NpdG9yIGRvZXNuJ3QKICAgICAvLyBzeW5j
aHJvbml6ZSBpdHMgZHJhd3Mgd2l0aCB0aGUgY2FudmFzIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCBjNWY1ZTZhYTkwY2Y3MTEwNTE3YTM1NDA0Nzcz
M2I5NTdjOWU0ZWRiLi5hM2EwN2Y4OGQ5YmMxZjQ5NmI4ZTZmNTdiYjU1YTgyZDNkNGU3YWExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTQ1LDYgKzQ1LDcgQEAK
ICNpbmNsdWRlICJQbGF0Zm9ybUNvbG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9t
aXVtLmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgorI2luY2x1ZGUgIlRleHR1cmVDb3BpZXIu
aCIKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIK
ICNpbmNsdWRlICJUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaCIKQEAgLTEyOTcsNiArMTI5OCw3
IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cygp
CiAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3Jl
YXRlKFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRl
eHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2Fw
YWJpbGl0aWVzLm1heFRleHR1cmVTaXplKTsKKyAgICBtX3RleHR1cmVDb3BpZXIgPSBBY2NlbGVy
YXRlZFRleHR1cmVDb3BpZXI6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpOwogICAgIG1fY29udGVu
dHNUZXh0dXJlQWxsb2NhdG9yID0gVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpjcmVhdGUobV9j
b250ZXh0LmdldCgpKTsKICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yID0gVHJh
Y2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpjcmVhdGUobV9jb250ZXh0LmdldCgpKTsKICAgICBpZiAo
bV9jYXBhYmlsaXRpZXMudXNpbmdUZXh0dXJlVXNhZ2VIaW50KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uaAppbmRleCA2MWMxZDRhODc3YmViY2NmYTVkYTFmZDFkZWI2NDIzMTkyMmEy
YzcxLi40MzU1NDFiNzMyMmNkOTZmNWY0OWEzYmU5NzQ1YmEyNDBlZmRkOGY5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkZs
b2F0UXVhZC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVt
LmgiCisjaW5jbHVkZSAiVGV4dHVyZUNvcGllci5oIgogI2luY2x1ZGUgIlRyYWNraW5nVGV4dHVy
ZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUg
ImNjL0NDRHJhd1F1YWQuaCIKQEAgLTU5LDcgKzYwLDYgQEAgY2xhc3MgQ0NSZW5kZXJQYXNzOwog
Y2xhc3MgQ0NUZXh0dXJlRHJhd1F1YWQ7CiBjbGFzcyBHZW9tZXRyeUJpbmRpbmc7CiBjbGFzcyBH
cmFwaGljc0NvbnRleHQzRDsKLWNsYXNzIFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjsKIGNsYXNz
IExheWVyUmVuZGVyZXJTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyOwogY2xhc3Mg
U2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uOwogCkBAIC0xNDIsNiArMTQyLDcgQEAg
cHVibGljOgogICAgIHZvaWQgZ2V0RnJhbWVidWZmZXJQaXhlbHModm9pZCAqcGl4ZWxzLCBjb25z
dCBJbnRSZWN0Jik7CiAKICAgICBUZXh0dXJlTWFuYWdlciogcmVuZGVyU3VyZmFjZVRleHR1cmVN
YW5hZ2VyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIuZ2V0
KCk7IH0KKyAgICBUZXh0dXJlQ29waWVyKiB0ZXh0dXJlQ29waWVyKCkgY29uc3QgeyByZXR1cm4g
bV90ZXh0dXJlQ29waWVyLmdldCgpOyB9CiAgICAgVGV4dHVyZUFsbG9jYXRvciogcmVuZGVyU3Vy
ZmFjZVRleHR1cmVBbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclN1cmZhY2VUZXh0
dXJlQWxsb2NhdG9yLmdldCgpOyB9CiAgICAgVGV4dHVyZUFsbG9jYXRvciogY29udGVudHNUZXh0
dXJlQWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1RleHR1cmVBbGxvY2F0b3Iu
Z2V0KCk7IH0KIApAQCAtMjQ5LDYgKzI1MCw3IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPENDVmlk
ZW9MYXllckltcGw6OlN0cmVhbVRleHR1cmVQcm9ncmFtPiBtX3N0cmVhbVRleHR1cmVMYXllclBy
b2dyYW07CiAKICAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IG1fcmVuZGVyU3VyZmFjZVRleHR1
cmVNYW5hZ2VyOworICAgIE93blB0cjxBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXI+IG1fdGV4dHVy
ZUNvcGllcjsKICAgICBPd25QdHI8VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yPiBtX2NvbnRlbnRz
VGV4dHVyZUFsbG9jYXRvcjsKICAgICBPd25QdHI8VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yPiBt
X3JlbmRlclN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5jcHAK
aW5kZXggNzFkNGQxZmQxOGQ5ODYyMWQyY2M0YjQ5YWY5ZGFlY2Q2MTVlYzc4Ny4uZDk5NWVkYWRi
ZDQ0YjU0ZTYzMTRhMjNlNzY5NDA0ZDI0OWU3NTJlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmNw
cApAQCAtMTg4LDYgKzE4OCwxOSBAQCBWZXJ0ZXhTaGFkZXJRdWFkOjpWZXJ0ZXhTaGFkZXJRdWFk
KCkKIHsKIH0KIAorU3RyaW5nIFZlcnRleFNoYWRlclBvc1RleElkZW50aXR5OjpnZXRTaGFkZXJT
dHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBTSEFERVIoCisgICAgICAgIGF0dHJpYnV0ZSB2
ZWM0IGFfcG9zaXRpb247CisgICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOworICAgICAg
ICB2b2lkIG1haW4oKQorICAgICAgICB7CisgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IGFfcG9z
aXRpb247CisgICAgICAgICAgICB2X3RleENvb3JkID0gKGFfcG9zaXRpb24ueHkgKyB2ZWMyKDEu
MCkpICogMC41OworICAgICAgICB9CisgICAgKTsKK30KKwogdm9pZCBWZXJ0ZXhTaGFkZXJRdWFk
Ojppbml0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCB1bnNpZ25lZCBwcm9ncmFtKQogewog
ICAgIG1fbWF0cml4TG9jYXRpb24gPSBjb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3Jh
bSwgIm1hdHJpeCIpOwpAQCAtNDEwLDYgKzQyMywxOSBAQCBTdHJpbmcgRnJhZ21lbnRTaGFkZXJS
R0JBVGV4T3BhcXVlOjpnZXRTaGFkZXJTdHJpbmcoKSBjb25zdAogICAgICk7CiB9CiAKK1N0cmlu
ZyBGcmFnbWVudFNoYWRlclJHQkFUZXg6OmdldFNoYWRlclN0cmluZygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIFNIQURFUigKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisgICAgICAg
IHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOworICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3Rl
eHR1cmU7CisgICAgICAgIHZvaWQgbWFpbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsX0Zy
YWdDb2xvciA9IHRleHR1cmUyRChzX3RleHR1cmUsIHZfdGV4Q29vcmQpOworICAgICAgICB9Cisg
ICAgKTsKK30KKwogU3RyaW5nIEZyYWdtZW50U2hhZGVyUkdCQVRleFN3aXp6bGVBbHBoYTo6Z2V0
U2hhZGVyU3RyaW5nKCkgY29uc3QKIHsKICAgICByZXR1cm4gU0hBREVSKApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9t
aXVtLmgKaW5kZXggMmJkNzYwYTk5ZmM0NjYwNzBjNTZmM2FlMjQxYzJhMjAyYTMzMDZmYS4uMGU0
MTk2ODgwMmNjOGNlZDMyNmVjYjY2ZGY0YTlhYmIyN2JiOWRhMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1
bS5oCkBAIC05NSw2ICs5NSwxMiBAQCBwcml2YXRlOgogICAgIGludCBtX21hdHJpeExvY2F0aW9u
OwogfTsKIAorY2xhc3MgVmVydGV4U2hhZGVyUG9zVGV4SWRlbnRpdHkgeworcHVibGljOgorICAg
IHZvaWQgaW5pdChHcmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkIHByb2dyYW0pIHsgfQorICAg
IFN0cmluZyBnZXRTaGFkZXJTdHJpbmcoKSBjb25zdDsKK307CisKIGNsYXNzIFZlcnRleFNoYWRl
clBvc1RleFRyYW5zZm9ybSB7CiBwdWJsaWM6CiAgICAgVmVydGV4U2hhZGVyUG9zVGV4VHJhbnNm
b3JtKCk7CkBAIC0yMTMsNiArMjE5LDExIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgZ2V0U2hhZGVy
U3RyaW5nKCkgY29uc3Q7CiB9OwogCitjbGFzcyBGcmFnbWVudFNoYWRlclJHQkFUZXggOiBwdWJs
aWMgRnJhZ21lbnRUZXhPcGFxdWVCaW5kaW5nIHsKK3B1YmxpYzoKKyAgICBTdHJpbmcgZ2V0U2hh
ZGVyU3RyaW5nKCkgY29uc3Q7Cit9OworCiAvLyBTd2l6emxlcyB0aGUgcmVkIGFuZCBibHVlIGNv
bXBvbmVudCBvZiBzYW1wbGVkIHRleGVsIHdpdGggYWxwaGEuCiBjbGFzcyBGcmFnbWVudFNoYWRl
clJHQkFUZXhTd2l6emxlQWxwaGEgOiBwdWJsaWMgRnJhZ21lbnRUZXhBbHBoYUJpbmRpbmcgewog
cHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGV4dHVyZUNvcGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNWM4NWNiM2UzZTMxZjk1
YTk4OTcwMzQyOTA2YTUxNjA3NWQzY2VmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUNvcGllci5jcHAKQEAgLTAsMCAr
MSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJUZXh0dXJlQ29waWVyLmgiCisKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIg
Ly8gRm9yIHRoZSBHTEMoKSBtYWNybworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCitBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXI6OkFjY2Vs
ZXJhdGVkVGV4dHVyZUNvcGllcihQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0
KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCit7CisgICAgR0xDKG1fY29udGV4dCwgbV9mYm8g
PSBtX2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCkpOworICAgIEdMQyhtX2NvbnRleHQsIG1f
cG9zaXRpb25CdWZmZXIgPSBtX2NvbnRleHQtPmNyZWF0ZUJ1ZmZlcigpKTsKKworICAgIHN0YXRp
YyBjb25zdCBmbG9hdCBrUG9zaXRpb25zWzRdWzRdID0geworICAgICAgICB7LTEsIC0xLCAwLCAx
fSwKKyAgICAgICAgeyAxLCAtMSwgMCwgMX0sCisgICAgICAgIHsgMSwgMSwgMCwgMX0sCisgICAg
ICAgIHstMSwgMSwgMCwgMX0KKyAgICB9OworCisgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9j
b250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fcG9z
aXRpb25CdWZmZXIpKTsKKyAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJ1ZmZl
ckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgc2l6ZW9mKGtQb3NpdGlvbnMp
LCBrUG9zaXRpb25zLCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpKTsKKyAgICBHTEMo
bV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkFSUkFZX0JVRkZFUiwgMCkpOworCisgICAgbV9ibGl0UHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBC
bGl0UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICBtX2JsaXRQcm9ncmFtLT5pbml0aWFs
aXplKG1fY29udGV4dC5nZXQoKSk7Cit9CisKK0FjY2VsZXJhdGVkVGV4dHVyZUNvcGllcjo6fkFj
Y2VsZXJhdGVkVGV4dHVyZUNvcGllcigpCit7CisgICAgaWYgKG1fcG9zaXRpb25CdWZmZXIpCisg
ICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGVsZXRlQnVmZmVyKG1fcG9zaXRpb25C
dWZmZXIpKTsKKyAgICBpZiAobV9mYm8pCisgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4
dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9mYm8pKTsKK30KKwordm9pZCBBY2NlbGVyYXRlZFRleHR1
cmVDb3BpZXI6OmNvcHlUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCB1bnNpZ25l
ZCBzb3VyY2VUZXh0dXJlSWQsIHVuc2lnbmVkIGRlc3RUZXh0dXJlSWQsIGNvbnN0IEludFNpemUm
IHNpemUpCit7CisgICAgVFJBQ0VfRVZFTlQoIlRleHR1cmVDb3BpZXI6OmNvcHlUZXh0dXJlIiwg
dGhpcywgMCk7CisKKyAgICAvLyBOb3RlOiB0aGlzIGNvZGUgZG9lcyBub3QgcmVzdG9yZSB0aGUg
dmlld3BvcnQsIGJvdW5kIHByb2dyYW0sIDJEIHRleHR1cmUsIGZyYW1lYnVmZmVyLCBidWZmZXIg
b3IgYmxlbmQgZW5hYmxlLgorICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kRnJhbWVidWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2ZibykpOworICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIGRlc3RUZXh0dXJlSWQsIDApKTsKKworI2lmIE9TKEFORFJP
SUQpCisgICAgLy8gQ2xlYXIgZGVzdGluYXRpb24gdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBvbiB0
aWxpbmcgR1BVcy4KKyAgICAvLyBUT0RPOiBVc2UgRVhUX2Rpc2NhcmRfZnJhbWVidWZmZXIgb3Ig
c2tpcCBjbGVhcmluZyBpZiBpdCBpc24ndCBhdmFpbGFibGUuCisgICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKSk7CisjZW5k
aWYKKworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgc291cmNlVGV4dHVyZUlkKSk7CisgICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFS
RVNUKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxU
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKSk7CisKKyAgICAvLyBUT0RPOiBVc2UgRVhU
X2ZyYW1lYnVmZmVyX2JsaXQgaWYgYXZhaWxhYmxlLgorICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT51c2VQcm9ncmFtKG1fYmxpdFByb2dyYW0tPnByb2dyYW0oKSkpOworCisgICAgY29uc3QgaW50
IGtQb3NpdGlvbkF0dHJpYnV0ZSA9IDA7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRC
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV9wb3NpdGlvbkJ1ZmZlcikp
OworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKGtQb3NpdGlv
bkF0dHJpYnV0ZSwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCkpOwor
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShrUG9zaXRp
b25BdHRyaWJ1dGUpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZEJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAwKSk7CisKKyAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+dmlld3BvcnQoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CisgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKSk7
CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6
OlRSSUFOR0xFX0ZBTiwgMCwgNCkpOworCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBh
cmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKyAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkxJTkVBUikpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5kaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkoa1Bvc2l0aW9uQXR0cmlidXRlKSk7CisKKyAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+dXNlUHJvZ3JhbSgwKSk7CisKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+ZnJh
bWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGlj
c0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCAwLCAwKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApKTsKKyAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApKTsKK30K
KworfQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUNvcGll
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUNv
cGllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjczYmU1ZWNhZDE2Zjg4NTUyNTExODFkNjUyYjRkZjhjMzg0Yjhi
MDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UZXh0dXJlQ29waWVyLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgVGV4dHVyZUNvcGllcl9oCisjZGVmaW5lIFRleHR1cmVDb3BpZXJfaAorCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJQcm9ncmFtQmluZGluZy5oIgor
I2luY2x1ZGUgIlNoYWRlckNocm9taXVtLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0dXJlQ29waWVyIHsKK3B1YmxpYzoK
KyAgICAvLyBDb3B5IHRoZSBiYXNlIGxldmVsIGNvbnRlbnRzIG9mIHxzb3VyY2VUZXh0dXJlSWR8
IHRvIHxkZXN0VGV4dHVyZUlkfC4gQm90aCB0ZXh0dXJlIG9iamVjdHMKKyAgICAvLyBtdXN0IGJl
IGNvbXBsZXRlIGFuZCBoYXZlIGEgYmFzZSBsZXZlbCBvZiB8c2l6ZXwgZGltZW5zaW9ucy4gVGhl
IGNvbG9yIGZvcm1hdHMgZG8gbm90IG5lZWQKKyAgICAvLyB0byBtYXRjaCwgYnV0IHxkZXN0VGV4
dHVyZUlkfCBtdXN0IGhhdmUgYSByZW5kZXJhYmxlIGZvcm1hdC4KKyAgICB2aXJ0dWFsIHZvaWQg
Y29weVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCBzb3VyY2VUZXh0dXJlSWQs
IHVuc2lnbmVkIGRlc3RUZXh0dXJlSWQsIGNvbnN0IEludFNpemUmKSA9IDA7CisKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIH5UZXh0dXJlQ29waWVyKCkgeyB9Cit9OworCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorCitjbGFzcyBBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXIgOiBw
dWJsaWMgVGV4dHVyZUNvcGllciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWNjZWxlcmF0
ZWRUZXh0dXJlQ29waWVyKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxBY2NlbGVy
YXRlZFRleHR1cmVDb3BpZXI+IGNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBj
b250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBBY2NlbGVyYXRlZFRl
eHR1cmVDb3BpZXIoY29udGV4dCkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5BY2NlbGVyYXRlZFRl
eHR1cmVDb3BpZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRCosIHVuc2lnbmVkIHNvdXJjZVRleHR1cmVJZCwgdW5zaWduZWQgZGVzdFRleHR1cmVJ
ZCwgY29uc3QgSW50U2l6ZSYpOworCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgQWNjZWxlcmF0
ZWRUZXh0dXJlQ29waWVyKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsKKworcHJpdmF0
ZToKKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleElkZW50aXR5
LCBGcmFnbWVudFNoYWRlclJHQkFUZXg+IEJsaXRQcm9ncmFtOworCisgICAgUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZibzsKKyAg
ICBQbGF0Zm9ybTNET2JqZWN0IG1fcG9zaXRpb25CdWZmZXI7CisgICAgT3duUHRyPEJsaXRQcm9n
cmFtPiBtX2JsaXRQcm9ncmFtOworfTsKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94
eS5jcHAKaW5kZXggMmQ5ZTBmMzQxZmU3MjU3ZDM0Nzk4ZjZjZjFiOGQ0ZGY4NTlkMjBiMC4uYzk4
NWJiODAxYjg2Y2MxOWFkYjJlMzk2YmJjMDgzOGIxOTA0NTJkYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKQEAgLTIwMiw3ICsyMDIsNyBAQCB2b2lkIENDU2luZ2xl
VGhyZWFkUHJveHk6OmRvQ29tbWl0KCkKICAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+YmVn
aW5Db21taXQoKTsKIAogICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmJlZ2luQ29tbWl0T25JbXBs
VGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOwotICAgICAgICBDQ1RleHR1cmVVcGRh
dGVyIHVwZGF0ZXIobV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGVudHNUZXh0dXJlQWxsb2NhdG9y
KCkpOworICAgICAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIobV9sYXllclRyZWVIb3N0SW1w
bC0+Y29udGVudHNUZXh0dXJlQWxsb2NhdG9yKCksIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmxheWVy
UmVuZGVyZXIoKS0+dGV4dHVyZUNvcGllcigpKTsKICAgICAgICAgbV9sYXllclRyZWVIb3N0LT51
cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRleHQoKSwg
dXBkYXRlcik7CiAgICAgICAgIHVwZGF0ZXIudXBkYXRlKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNv
bnRleHQoKSwgbnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOwogICAgICAgICBBU1NFUlQo
IXVwZGF0ZXIuaGFzTW9yZVVwZGF0ZXMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIu
Y3BwCmluZGV4IDY2ZTA4YzhiZDkzZjE4MjZhMzliNTUzYzI5NjUwYTgzYWMwOWU4ZWEuLjBjZTBm
NmQxMDk4YTczOTc3ZjNiYWY4MjMyZjcyMTZiMDVlN2FkN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4
dHVyZVVwZGF0ZXIuY3BwCkBAIC0zNyw4ICszNyw5IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NUZXh0dXJlVXBkYXRlcjo6Q0NUZXh0dXJlVXBkYXRl
cihUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IpCitDQ1RleHR1cmVVcGRhdGVyOjpDQ1RleHR1
cmVVcGRhdGVyKFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgVGV4dHVyZUNvcGllciogY29w
aWVyKQogICAgIDogbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICwgbV9jb3BpZXIoY29waWVy
KQogICAgICwgbV9lbnRyeUluZGV4KDApCiB7CiAgICAgQVNTRVJUKG1fYWxsb2NhdG9yKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaAppbmRleCBkYmI1MmM5YmFkMjA0MzRkZGJmNzRjNjI4
YTQ0NDVlOWQ3ZTk4N2QyLi5kMjljNjU4NjFlOTMyM2VjZmY4MmRlNDBiY2RiZjdlMjQ2YjQ5NzA3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RleHR1cmVVcGRhdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oCkBAIC0zNCwxMCArMzQsMTEgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFRleHR1
cmVBbGxvY2F0b3I7CitjbGFzcyBUZXh0dXJlQ29waWVyOwogCiBjbGFzcyBDQ1RleHR1cmVVcGRh
dGVyIHsKIHB1YmxpYzoKLSAgICBDQ1RleHR1cmVVcGRhdGVyKFRleHR1cmVBbGxvY2F0b3IqKTsK
KyAgICBDQ1RleHR1cmVVcGRhdGVyKFRleHR1cmVBbGxvY2F0b3IqLCBUZXh0dXJlQ29waWVyKik7
CiAgICAgfkNDVGV4dHVyZVVwZGF0ZXIoKTsKIAogICAgIHZvaWQgYXBwZW5kKExheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRS
ZWN0JiBkZXN0UmVjdCk7CkBAIC01MSw2ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFy
KCk7CiAKICAgICBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IoKSB7IHJldHVybiBtX2FsbG9j
YXRvcjsgfQorICAgIFRleHR1cmVDb3BpZXIqIGNvcGllcigpIHsgcmV0dXJuIG1fY29waWVyOyB9
CiAKIHByaXZhdGU6CiAgICAgc3RydWN0IFVwZGF0ZUVudHJ5IHsKQEAgLTYyLDYgKzY0LDcgQEAg
cHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBhcHBlbmQoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4
dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0
LCBWZWN0b3I8VXBkYXRlRW50cnk+Jik7CiAKICAgICBUZXh0dXJlQWxsb2NhdG9yKiBtX2FsbG9j
YXRvcjsKKyAgICBUZXh0dXJlQ29waWVyKiBtX2NvcGllcjsKICAgICBzaXplX3QgbV9lbnRyeUlu
ZGV4OwogICAgIFZlY3RvcjxVcGRhdGVFbnRyeT4gbV9lbnRyaWVzOwogICAgIFZlY3RvcjxVcGRh
dGVFbnRyeT4gbV9wYXJ0aWFsRW50cmllczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKaW5k
ZXggZTUxYTc4NDA4MDJlYjljNTYxNzUwNDdmODljNWVjYjcwNzY3ZmE4Ny4uNzc2NTg4YTQyYjRj
MmQ5ZWIyMDAzOWU5YTQ5MThhZTA5MTA3MGU1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5j
cHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjYy9DQ1RocmVhZFByb3h5LmgiCiAKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlICJjYy9DQ0RlbGF5QmFz
ZWRUaW1lU291cmNlLmgiCiAjaW5jbHVkZSAiY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmgiCkBA
IC00ODksNyArNDkwLDcgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQ29tcGxldGVP
bkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24KICAgICBtX2NvbW1pdENv
bXBsZXRpb25FdmVudE9uSW1wbFRocmVhZCA9IGNvbXBsZXRpb247CiAKICAgICBBU1NFUlQoIW1f
Y3VycmVudFRleHR1cmVVcGRhdGVyT25JbXBsVGhyZWFkKTsKLSAgICBtX2N1cnJlbnRUZXh0dXJl
VXBkYXRlck9uSW1wbFRocmVhZCA9IGFkb3B0UHRyKG5ldyBDQ1RleHR1cmVVcGRhdGVyKG1fbGF5
ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpKSk7CisgICAgbV9jdXJy
ZW50VGV4dHVyZVVwZGF0ZXJPbkltcGxUaHJlYWQgPSBhZG9wdFB0cihuZXcgQ0NUZXh0dXJlVXBk
YXRlcihtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVBbGxvY2F0b3IoKSwgbV9s
YXllclRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT50ZXh0dXJlQ29waWVyKCkpKTsKICAg
ICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMobV9sYXllclRyZWVI
b3N0SW1wbC0+Y29udGV4dCgpLCAqbV9jdXJyZW50VGV4dHVyZVVwZGF0ZXJPbkltcGxUaHJlYWQp
OwogCiAgICAgbV9zY2hlZHVsZXJPbkltcGxUaHJlYWQtPmJlZ2luRnJhbWVDb21wbGV0ZSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggODg5NDI5YmQ5MjM4MDFkNjMxNzZmYmQw
MTI2NzA1NDZlMjY4OGU0ZS4uOTQxZjhlOGFmZjNhMmU5ZmVjMjAwZTZjOGEwMDI1ZjY4OTE2YzI3
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC0xMTksNiArMTE5LDcgQEAKICAg
ICAgICAgICAgICd0ZXN0cy9SZWdpb25UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvUmVu
ZGVyVGFibGVDZWxsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1Njcm9sbGJhckxheWVy
Q2hyb21pdW1UZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvVGV4dHVyZUNvcGllclRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9UZXh0dXJlTWFuYWdlclRlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcCcsCiAgICAgICAgICAgICAn
dGVzdHMvVGlsaW5nRGF0YVRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IDE0Yzky
YWU5ZjdjOTJlOWM3YWE5NjM0NDM4ZGJkOTI3Y2UwY2FkODYuLmVhM2Q0MGZmZTA4MTA4YmZkMTlh
ZDcyNjU4NWVjNTQ4YjkzNDIzYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMzEsNiArMzEs
NyBAQAogI2luY2x1ZGUgIkZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgorI2luY2x1ZGUg
IlRleHR1cmVDb3BpZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUg
IldlYkNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKQEAgLTkyLDYgKzkzLDExIEBA
IHB1YmxpYzoKICAgICBNT0NLX01FVEhPRDMoZGVsZXRlVGV4dHVyZSwgdm9pZCh1bnNpZ25lZCwg
Y29uc3QgSW50U2l6ZSYsIEdDM0RlbnVtKSk7CiB9OwogCitjbGFzcyBNb2NrVGV4dHVyZUNvcGll
ciA6IHB1YmxpYyBUZXh0dXJlQ29waWVyIHsKK3B1YmxpYzoKKyAgICBNT0NLX01FVEhPRDQoY29w
eVRleHR1cmUsIHZvaWQoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCwgdW5zaWduZWQsIGNv
bnN0IEludFNpemUmKSk7Cit9OworCiBjbGFzcyBDYW52YXMyRExheWVyQ2hyb21pdW1UZXN0IDog
cHVibGljIFRlc3QgewogcHJvdGVjdGVkOgogICAgIHZvaWQgZnVsbExpZmVjeWNsZVRlc3QoYm9v
bCB0aHJlYWRlZCkKQEAgLTEwMSwxMSArMTA3LDkgQEAgcHJvdGVjdGVkOgogICAgICAgICBSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1haW5Db250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgTW9j
a0NhbnZhc0NvbnRleHQoKSksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9z
dFdpbmRvdyk7CiAgICAgICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gaW1wbENvbnRleHQg
PSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJD
b250ZXh0KGFkb3B0UHRyKG5ldyBNb2NrQ2FudmFzQ29udGV4dCgpKSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKIAotICAgICAgICBNb2NrQ2FudmFzQ29u
dGV4dCYgbWFpbk1vY2sgPSAqc3RhdGljX2Nhc3Q8TW9ja0NhbnZhc0NvbnRleHQqPihHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChtYWluQ29udGV4
dC5nZXQoKSkpOwotICAgICAgICBNb2NrQ2FudmFzQ29udGV4dCYgaW1wbE1vY2sgPSAqc3RhdGlj
X2Nhc3Q8TW9ja0NhbnZhc0NvbnRleHQqPihHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJh
Y3RXZWJHcmFwaGljc0NvbnRleHQzRChpbXBsQ29udGV4dC5nZXQoKSkpOwotCiAgICAgICAgIE1v
Y2tUZXh0dXJlQWxsb2NhdG9yIGFsbG9jYXRvck1vY2s7Ci0gICAgICAgIENDVGV4dHVyZVVwZGF0
ZXIgdXBkYXRlcigmYWxsb2NhdG9yTW9jayk7CisgICAgICAgIE1vY2tUZXh0dXJlQ29waWVyIGNv
cGllck1vY2s7CisgICAgICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmYWxsb2NhdG9yTW9j
aywgJmNvcGllck1vY2spOwogCiAgICAgICAgIGNvbnN0IEludFNpemUgc2l6ZSgzMDAsIDE1MCk7
CiAKQEAgLTEyMCwyOCArMTI0LDE2IEBAIHByb3RlY3RlZDoKIAogICAgICAgICBjb25zdCBXZWJH
TElkIGJhY2tUZXh0dXJlSWQgPSAxOwogICAgICAgICBjb25zdCBXZWJHTElkIGZyb250VGV4dHVy
ZUlkID0gMjsKLSAgICAgICAgY29uc3QgV2ViR0xJZCBmYm9JZCA9IDM7CiAgICAgICAgIHsKICAg
ICAgICAgICAgIEluU2VxdWVuY2Ugc2VxdWVuY2U7CiAKICAgICAgICAgICAgIC8vIE5vdGUgdGhh
dCB0aGUgY2FudmFzIGJhY2tpbmcgdGV4dHVyZSBpcyBkb3VibGVidWZmZXJlZCBvbmx5IHdoZW4g
dXNpbmcgdGhlIHRocmVhZGVkCiAgICAgICAgICAgICAvLyBjb21wb3NpdG9yLgogICAgICAgICAg
ICAgaWYgKHRocmVhZGVkKSB7Ci0gICAgICAgICAgICAgICAgLy8gU2V0dXAgQ2FudmFzMkRMYXll
ckNocm9taXVtIChvbiB0aGUgbWFpbiB0aHJlYWQpLgotICAgICAgICAgICAgICAgIEVYUEVDVF9D
QUxMKG1haW5Nb2NrLCBjcmVhdGVGcmFtZWJ1ZmZlcigpKQotICAgICAgICAgICAgICAgICAgICAu
V2lsbE9uY2UoUmV0dXJuKGZib0lkKSk7Ci0KICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgdGV4
dHVyZSBhbmQgZG8gdGhlIGNvcHkgKG9uIHRoZSBpbXBsIHRocmVhZCkuCiAgICAgICAgICAgICAg
ICAgRVhQRUNUX0NBTEwoYWxsb2NhdG9yTW9jaywgY3JlYXRlVGV4dHVyZShzaXplLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSkpCiAgICAgICAgICAgICAgICAgICAgIC5XaWxsT25jZShSZXR1cm4o
ZnJvbnRUZXh0dXJlSWQpKTsKLSAgICAgICAgICAgICAgICBFWFBFQ1RfQ0FMTChpbXBsTW9jaywg
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGZyb250VGV4dHVyZUlk
KSk7Ci0gICAgICAgICAgICAgICAgRVhQRUNUX0NBTEwoaW1wbE1vY2ssIGJpbmRGcmFtZWJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIGZib0lkKSk7Ci0gICAgICAgICAgICAg
ICAgRVhQRUNUX0NBTEwoaW1wbE1vY2ssIGZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQw
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgYmFja1RleHR1cmVJZCwgMCkpOwotICAg
ICAgICAgICAgICAgIEVYUEVDVF9DQUxMKGltcGxNb2NrLCBjb3B5VGV4U3ViSW1hZ2UyRChHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgMCwgMCwgMzAwLCAxNTApKTsKLSAg
ICAgICAgICAgICAgICBFWFBFQ1RfQ0FMTChpbXBsTW9jaywgYmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCkpOwotCi0gICAgICAgICAgICAgICAgLy8gVGVh
cmRvd24gQ2FudmFzMkRMYXllckNocm9taXVtLgotICAgICAgICAgICAgICAgIEVYUEVDVF9DQUxM
KG1haW5Nb2NrLCBkZWxldGVGcmFtZWJ1ZmZlcihmYm9JZCkpOworICAgICAgICAgICAgICAgIEVY
UEVDVF9DQUxMKGNvcGllck1vY2ssIGNvcHlUZXh0dXJlKGltcGxDb250ZXh0LmdldCgpLCBiYWNr
VGV4dHVyZUlkLCBmcm9udFRleHR1cmVJZCwgc2l6ZSkpOwogCiAgICAgICAgICAgICAgICAgLy8g
VGVhcmRvd24gVGV4dHVyZU1hbmFnZXIuCiAgICAgICAgICAgICAgICAgRVhQRUNUX0NBTEwoYWxs
b2NhdG9yTW9jaywgZGVsZXRlVGV4dHVyZShmcm9udFRleHR1cmVJZCwgc2l6ZSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvVGV4dHVyZUNvcGllclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9U
ZXh0dXJlQ29waWVyVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTcxNzNjMGE1YjM3ZDFiOGViMDhkNmNi
MTgyYWQxZDA3NGU1NDg2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvVGV4dHVyZUNvcGllclRlc3QuY3BwCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlRleHR1cmVDb3BpZXIuaCIK
KworI2luY2x1ZGUgIkZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNs
dWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgdGVzdGluZzo6
SW5TZXF1ZW5jZTsKK3VzaW5nIHRlc3Rpbmc6OlRlc3Q7Cit1c2luZyB0ZXN0aW5nOjpfOworCitu
YW1lc3BhY2UgeworCitjbGFzcyBNb2NrQ29udGV4dCA6IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3ND
b250ZXh0M0QgeworcHVibGljOgorICAgIE1PQ0tfTUVUSE9EMihiaW5kRnJhbWVidWZmZXIsIHZv
aWQoV0dDM0RlbnVtLCBXZWJHTElkKSk7CisgICAgTU9DS19NRVRIT0QzKHRleFBhcmFtZXRlcmks
IHZvaWQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkpOwor
CisgICAgTU9DS19NRVRIT0QzKGRyYXdBcnJheXMsIHZvaWQoR0MzRGVudW0gbW9kZSwgR0MzRGlu
dCBmaXJzdCwgR0MzRHNpemVpIGNvdW50KSk7Cit9OworCitURVNUKFRleHR1cmVDb3BpZXJUZXN0
LCB0ZXN0RHJhd0FycmF5c0NvcHkpCit7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMgYXR0cnM7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChh
ZG9wdFB0cihuZXcgTW9ja0NvbnRleHQoKSksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJl
Y3RseVRvSG9zdFdpbmRvdyk7CisgICAgTW9ja0NvbnRleHQmIG1vY2tDb250ZXh0ID0gKnN0YXRp
Y19jYXN0PE1vY2tDb250ZXh0Kj4oR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2Vi
R3JhcGhpY3NDb250ZXh0M0QoY29udGV4dC5nZXQoKSkpOworCisgICAgeworICAgICAgICBJblNl
cXVlbmNlIHNlcXVlbmNlOworCisgICAgICAgIC8vIEhlcmUgd2UgY2hlY2sganVzdCBzb21lIGVz
c2VudGlhbCBwcm9wZXJ0aWVzIG9mIGNvcHlUZXh0dXJlKCkgdG8gYXZvaWQgbWlycm9yaW5nIHRo
ZSBmdWxsIGltcGxlbWVudGF0aW9uLgorICAgICAgICBFWFBFQ1RfQ0FMTChtb2NrQ29udGV4dCwg
YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgXykpOworCisg
ICAgICAgIC8vIE1ha2Ugc3VyZSBsaW5lYXIgZmlsdGVyaW5nIGlzIGRpc2FibGVkIGR1cmluZyB0
aGUgY29weS4KKyAgICAgICAgRVhQRUNUX0NBTEwobW9ja0NvbnRleHQsIHRleFBhcmFtZXRlcmko
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKSk7CisgICAgICAgIEVYUEVD
VF9DQUxMKG1vY2tDb250ZXh0LCB0ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6TkVBUkVTVCkpOworCisgICAgICAgIEVYUEVDVF9DQUxMKG1vY2tDb250ZXh0LCBk
cmF3QXJyYXlzKF8sIF8sIF8pKTsKKworICAgICAgICAvLyBMaW5lYXIgZmlsdGVyaW5nIHNob3Vs
ZCBiZSByZXN0b3JlZC4KKyAgICAgICAgRVhQRUNUX0NBTEwobW9ja0NvbnRleHQsIHRleFBhcmFt
ZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKyAgICAgICAg
RVhQRUNUX0NBTEwobW9ja0NvbnRleHQsIHRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBo
aWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKworICAgICAgICAvLyBEZWZhdWx0IGZyYW1lYnVmZmVy
IHNob3VsZCBiZSByZXN0b3JlZAorICAgICAgICBFWFBFQ1RfQ0FMTChtb2NrQ29udGV4dCwgYmlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCkpOworICAgIH0K
KworICAgIGludCBzb3VyY2VUZXh0dXJlSWQgPSAxOworICAgIGludCBkZXN0VGV4dHVyZUlkID0g
MjsKKyAgICBJbnRTaXplIHNpemUoMjU2LCAxMjgpOworICAgIE93blB0cjxBY2NlbGVyYXRlZFRl
eHR1cmVDb3BpZXI+IGNvcGllcihBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXI6OmNyZWF0ZShjb250
ZXh0KSk7CisgICAgY29waWVyLT5jb3B5VGV4dHVyZShjb250ZXh0LmdldCgpLCBzb3VyY2VUZXh0
dXJlSWQsIGRlc3RUZXh0dXJlSWQsIHNpemUpOworfQorCit9IC8vIG5hbWVzcGFjZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVz
dC5jcHAKaW5kZXggYzE5YWM0NmQ2NDY3MWZmNGEwNTNlYmE0M2MxMjY5ZGE4ZDU4ZjljZC4uNDdm
Yzg3MGJmOTgwZjQyZTM2ODBiYzdjZTAyZDllZGJjNTYwNjNhNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudC5oIgog
I2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKICNpbmNsdWRlICJSZWdpb24uaCIKKyNp
bmNsdWRlICJUZXh0dXJlQ29waWVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKICNp
bmNsdWRlICJXZWJDb21wb3NpdG9yLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94
eS5oIiAvLyBGb3IgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkCkBAIC03NSw2ICs3NiwxMSBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmUodW5zaWduZWQsIGNvbnN0IElu
dFNpemUmLCBHQzNEZW51bSkgeyB9CiB9OwogCitjbGFzcyBGYWtlVGV4dHVyZUNvcGllciA6IHB1
YmxpYyBUZXh0dXJlQ29waWVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgY29weVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCwgdW5zaWduZWQsIGNvbnN0IEludFNpemUm
KSB7IH0KK307CisKIGNsYXNzIEZha2VUaWxlZExheWVyQ2hyb21pdW07CiAKIGNsYXNzIEZha2VM
YXllclRleHR1cmVVcGRhdGVyIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXIgewpAQCAtMjQz
LDYgKzI0OSwyMyBAQCB2b2lkIEZha2VMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRh
dGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0CiAgICAgKnJlc3VsdGluZ09wYXF1
ZVJlY3QgPSBtX29wYXF1ZVBhaW50UmVjdDsKIH0KIAorY2xhc3MgRmFrZUNDVGV4dHVyZVVwZGF0
ZXIgOiBwdWJsaWMgQ0NUZXh0dXJlVXBkYXRlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgRmFr
ZUNDVGV4dHVyZVVwZGF0ZXIoKQorICAgICAgICA6IENDVGV4dHVyZVVwZGF0ZXIoJm1fdGV4dHVy
ZUFsbG9jYXRvciwgJm1fdGV4dHVyZUNvcGllcikKKyAgICB7CisgICAgfQorCisgICAgRmFrZVRl
eHR1cmVBbGxvY2F0b3ImIHRleHR1cmVBbGxvY2F0b3IoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fdGV4dHVyZUFsbG9jYXRvcjsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBGYWtlVGV4dHVy
ZUFsbG9jYXRvciBtX3RleHR1cmVBbGxvY2F0b3I7CisgICAgRmFrZVRleHR1cmVDb3BpZXIgbV90
ZXh0dXJlQ29waWVyOworfTsKKwogVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGly
dHlUaWxlcykKIHsKICAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0g
VGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOwpA
QCAtMjUwLDggKzI3Myw3IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaERpcnR5
VGlsZXMpCiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgT3du
UHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1Rp
bGVkTGF5ZXJJbXBsKDApKSk7CiAKLSAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxs
b2NhdG9yOwotICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvcik7
CisgICAgRmFrZUNDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcjsKIAogICAgIC8vIFRoZSB0aWxlIHNp
emUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRp
bGVzLgogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwpAQCAtMjg2LDgg
KzMwOCw3IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaE9jY2x1ZGVkRGlydHlU
aWxlcykKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0
cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFj
a2VyIG9jY2x1ZGVkOwogCi0gICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRv
cjsKLSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworICAg
IEZha2VDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXI7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlz
IDEwMHgxMDAsIHNvIHRoaXMgaW52YWxpZGF0ZXMgYW5kIHRoZW4gcGFpbnRzIHR3byB0aWxlcy4K
ICAgICBsYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAyMDApKTsKQEAgLTMzMiw4ICszNTMs
NyBAQCBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hEZWxldGVkVGlsZXMpCiAgICAg
RGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgT3duUHRyPEZha2VDQ1Rp
bGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBs
KDApKSk7CiAKLSAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9yOwotICAg
IENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvcik7CisgICAgRmFrZUND
VGV4dHVyZVVwZGF0ZXIgdXBkYXRlcjsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEw
MCwgc28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgogICAgIGxh
eWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwpAQCAtMzQ2LDcgKzM2Niw3IEBAIFRF
U1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaERlbGV0ZWRUaWxlcykKICAgICBFWFBFQ1Rf
VFJVRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CiAgICAgRVhQRUNUX1RSVUUobGF5ZXJJ
bXBsLT5oYXNUaWxlQXQoMCwgMSkpOwogCi0gICAgdGV4dHVyZU1hbmFnZXItPmV2aWN0QW5kRGVs
ZXRlQWxsVGV4dHVyZXMoJnRleHR1cmVBbGxvY2F0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5l
dmljdEFuZERlbGV0ZUFsbFRleHR1cmVzKCZ1cGRhdGVyLnRleHR1cmVBbGxvY2F0b3IoKSk7CiAg
ICAgdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMoNCoxMDI0KjEwMjQpOwog
ICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRQcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKDQqMTAyNCox
MDI0KTsKIApAQCAtMzc0LDggKzM5NCw3IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwg
cHVzaElkbGVQYWludFRpbGVzKQogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhy
ZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRy
KG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwogCi0gICAgRmFrZVRleHR1cmVBbGxvY2F0
b3IgdGV4dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1
cmVBbGxvY2F0b3IpOworICAgIEZha2VDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXI7CiAKICAgICAv
LyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAuIFNldHVwIDV4NSB0aWxlcyB3aXRoIG9uZSB2aXNp
YmxlIHRpbGUgaW4gdGhlIGNlbnRlci4KICAgICBJbnRTaXplIGNvbnRlbnRCb3VuZHMoNTAwLCA1
MDApOwpAQCAtNDMzLDggKzQ1Miw3IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVz
aFRpbGVzQWZ0ZXJJZGxlUGFpbnRGYWlsZWQpCiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hy
b21pdW0+IGxheWVyMiA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1
cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXll
ckltcGwyKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwogCi0gICAgRmFr
ZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRhdGVy
IHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworICAgIEZha2VDQ1RleHR1cmVVcGRhdGVyIHVw
ZGF0ZXI7CiAKICAgICAvLyBGb3IgdGhpcyB0ZXN0IHdlIGhhdmUgdHdvIGxheWVycy4gbGF5ZXIx
IGV4aGF1c3RzIG1vc3QgdGV4dHVyZSBtZW1vcnksIGxlYXZpbmcgcm9vbSBmb3IgMiBtb3JlIHRp
bGVzIGZyb20KICAgICAvLyBsYXllcjIsIGJ1dCBub3QgYWxsIHRocmVlIHRpbGVzLiBGaXJzdCB3
ZSBwYWludCBsYXllcjEsIGFuZCBvbmUgdGlsZSBmcm9tIGxheWVyMi4gVGhlbiB3aGVuIHdlIGlk
bGUgcGFpbnQKQEAgLTUxNCw4ICs1MzIsNyBAQCBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3Qs
IHB1c2hJZGxlUGFpbnRlZE9jY2x1ZGVkVGlsZXMpCiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5
ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7
CiAgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdWRlZDsKIAotICAgIEZha2VUZXh0dXJl
QWxsb2NhdG9yIHRleHR1cmVBbGxvY2F0b3I7Ci0gICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVy
KCZ0ZXh0dXJlQWxsb2NhdG9yKTsKKyAgICBGYWtlQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyOwog
CiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIG9u
ZSBvY2NsdWRlZCB0aWxlLCBjdWxscyBpdCBkdXJpbmcgcGFpbnQsIGJ1dCBwcmVwYWludHMgaXQu
CiAgICAgb2NjbHVkZWQuc2V0T2NjbHVzaW9uKEludFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKQEAg
LTU0MCw4ICs1NTcsNyBAQCBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc01h
cmtlZERpcnR5RHVyaW5nUGFpbnQpCiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxU
aHJlYWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQ
dHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CiAKLSAgICBGYWtlVGV4dHVyZUFsbG9j
YXRvciB0ZXh0dXJlQWxsb2NhdG9yOwotICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4
dHVyZUFsbG9jYXRvcik7CisgICAgRmFrZUNDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcjsKIAogICAg
IC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhl
biBwYWludHMgdHdvIHRpbGVzLgogICAgIC8vIEhvd2V2ZXIsIGR1cmluZyB0aGUgcGFpbnQsIHdl
IGludmFsaWRhdGUgb25lIG9mIHRoZSB0aWxlcy4gVGhpcyBzaG91bGQKQEAgLTU2Nyw4ICs1ODMs
NyBAQCBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0xheWVyTWFya2VkRGly
dHlEdXJpbmdQYWludE9uTmV4dExheWVyKQogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1w
bD4gbGF5ZXIxSW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKICAg
ICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVyMkltcGwoYWRvcHRQdHIobmV3IEZh
a2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CiAKLSAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0ZXh0
dXJlQWxsb2NhdG9yOwotICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9j
YXRvcik7CisgICAgRmFrZUNDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcjsKIAogICAgIGxheWVyMS0+
c2V0Qm91bmRzKEludFNpemUoMTAwLCAyMDApKTsKICAgICBsYXllcjEtPmludmFsaWRhdGVSZWN0
KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKQEAgLTYwMyw4ICs2MTgsNyBAQCBURVNUKFRpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0xheWVyTWFya2VkRGlydHlEdXJpbmdQYWludE9u
UHJldmlvdXNMYXllcgogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXIxSW1w
bChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKICAgICBPd25QdHI8RmFr
ZUNDVGlsZWRMYXllckltcGw+IGxheWVyMkltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5
ZXJJbXBsKDApKSk7CiAKLSAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9y
OwotICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvcik7CisgICAg
RmFrZUNDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcjsKIAogICAgIGxheWVyMS0+c2V0Qm91bmRzKElu
dFNpemUoMTAwLCAyMDApKTsKICAgICBsYXllcjEtPmludmFsaWRhdGVSZWN0KEludFJlY3QoMCwg
MCwgMTAwLCAyMDApKTsKQEAgLTY0NSw4ICs2NTksNyBAQCBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIGlkbGVQYWludE91dE9mTWVtb3J5KQogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVh
ZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBs
KGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwogCi0gICAgRmFrZVRleHR1
cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0
ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworICAgIEZha2VDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXI7
CiAKICAgICAvLyBUaGlzIGludmFsaWRhdGVzIDkgdGlsZXMgYW5kIHRoZW4gcGFpbnRzIG9uZSB2
aXNpYmxlIHRpbGUuCiAgICAgbGF5ZXItPnNldEJvdW5kcyhjb250ZW50Qm91bmRzKTsKQEAgLTY4
MSw4ICs2OTQsNyBAQCBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludFplcm9T
aXplZExheWVyKQogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAg
IE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtl
Q0NUaWxlZExheWVySW1wbCgwKSkpOwogCi0gICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVy
ZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0
b3IpOworICAgIEZha2VDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXI7CiAKICAgICAvLyBUaGUgbGF5
ZXIncyBib3VuZHMgYXJlIGVtcHR5LgogICAgIEludFJlY3QgY29udGVudFJlY3Q7CkBAIC03MjQs
OCArNzM2LDcgQEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRaZXJvU2l6
ZWRBbmltYXRpbmdMYXllcikKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVh
ZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihu
ZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKIAotICAgIEZha2VUZXh0dXJlQWxsb2NhdG9y
IHRleHR1cmVBbGxvY2F0b3I7Ci0gICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJl
QWxsb2NhdG9yKTsKKyAgICBGYWtlQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyOwogCiAgICAgLy8g
UHJldGVuZCB0aGUgbGF5ZXIgaXMgYW5pbWF0aW5nLgogICAgIGxheWVyLT5zZXREcmF3VHJhbnNm
b3JtSXNBbmltYXRpbmcodHJ1ZSk7CkBAIC03NzMsOCArNzg0LDcgQEAgVEVTVChUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCBpZGxlUGFpbnROb25WaXNpYmxlTGF5ZXJzKQogICAgIERlYnVnU2NvcGVk
U2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1w
bD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwogCi0g
ICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1cmVV
cGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworICAgIEZha2VDQ1RleHR1cmVVcGRh
dGVyIHVwZGF0ZXI7CiAKICAgICAvLyBJbnZhbGlkYXRlIHRoZSBsYXllciBidXQgbWFrZSBub25l
IG9mIGl0IHZpc2libGUsIHNvIG5vdGhpbmcgcGFpbnRzLgogICAgIEludFJlY3QgdmlzaWJsZVJl
Y3Q7CkBAIC04MjgsOCArODM4LDcgQEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxl
UGFpbnROb25WaXNpYmxlQW5pbWF0aW5nTGF5ZXJzKQogICAgIE93blB0cjxUZXh0dXJlTWFuYWdl
cj4gdGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDgwMDAqODAwMCo4LCA4
MDAwKjgwMDAqNCwgMTAyNCk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJl
YWQ7CiAKLSAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9yOwotICAgIEND
VGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvcik7CisgICAgRmFrZUNDVGV4
dHVyZVVwZGF0ZXIgdXBkYXRlcjsKIAogICAgIGludCB0aWxlV2lkdGggPSBGYWtlVGlsZWRMYXll
ckNocm9taXVtOjp0aWxlU2l6ZSgpLndpZHRoKCk7CiAgICAgaW50IHRpbGVIZWlnaHQgPSBGYWtl
VGlsZWRMYXllckNocm9taXVtOjp0aWxlU2l6ZSgpLmhlaWdodCgpOwpAQCAtODg2LDggKzg5NSw3
IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaW52YWxpZGF0ZUZyb21QcmVwYXJlKQog
ICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtl
Q0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVy
SW1wbCgwKSkpOwogCi0gICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsK
LSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworICAgIEZh
a2VDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXI7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEw
MHgxMDAsIHNvIHRoaXMgaW52YWxpZGF0ZXMgYW5kIHRoZW4gcGFpbnRzIHR3byB0aWxlcy4KICAg
ICBsYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAyMDApKTsKQEAgLTkyOCw4ICs5MzYsNyBA
QCBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZlcmlmeVVwZGF0ZVJlY3RXaGVuQ29udGVu
dEJvdW5kc0FyZVNjYWxlZCkKICAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5h
Z2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEw
MjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllcldpdGhTY2FsZWRCb3VuZHM+IGxheWVyID0g
YWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyV2l0aFNjYWxlZEJvdW5kcyh0ZXh0dXJlTWFuYWdl
ci5nZXQoKSkpOwogCi0gICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsK
LSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworICAgIEZh
a2VDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXI7CiAKICAgICBJbnRSZWN0IGxheWVyQm91bmRzKDAs
IDAsIDMwMCwgMjAwKTsKICAgICBJbnRSZWN0IGNvbnRlbnRCb3VuZHMoMCwgMCwgMjAwLCAyNTAp
OwpAQCAtOTY2LDggKzk3Myw3IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmVyaWZ5
SW52YWxpZGF0aW9uV2hlbkNvbnRlbnRzU2NhbGVDaGFuZ2VzKQogICAgIERlYnVnU2NvcGVkU2V0
SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4g
bGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwogCi0gICAg
RmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRh
dGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworICAgIEZha2VDQ1RleHR1cmVVcGRhdGVy
IHVwZGF0ZXI7CiAKICAgICAvLyBDcmVhdGUgYSBsYXllciB3aXRoIG9uZSB0aWxlLgogICAgIGxh
eWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOwpAQCAtMTAzNyw4ICsxMDQzLDcgQEAg
VEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBza2lwc0RyYXdHZXRzUmVzZXQpCiAgICAgcm9v
dExheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50UmVjdCk7CiAgICAgY2hpbGRMYXllci0+aW52
YWxpZGF0ZVJlY3QoY29udGVudFJlY3QpOwogCi0gICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4
dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxv
Y2F0b3IpOworICAgIEZha2VDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXI7CiAKICAgICBjY0xheWVy
VHJlZUhvc3QtPnNldFJvb3RMYXllcihyb290TGF5ZXIpOwogICAgIGNjTGF5ZXJUcmVlSG9zdC0+
c2V0Vmlld3BvcnRTaXplKEludFNpemUoMzAwLCAzMDApKTsKQEAgLTEwOTYsOCArMTEwMSw3IEBA
IFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFydGlhbFVwZGF0ZXMpCiAgICAgbGF5ZXIt
PnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMTUwLCAxNTApKTsKICAgICBsYXllci0+aW52YWxpZGF0
ZVJlY3QoY29udGVudFJlY3QpOwogCi0gICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFs
bG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3Ip
OworICAgIEZha2VDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXI7CiAKICAgICBjY0xheWVyVHJlZUhv
c3QtPnNldFJvb3RMYXllcihsYXllcik7CiAgICAgY2NMYXllclRyZWVIb3N0LT5zZXRWaWV3cG9y
dFNpemUoSW50U2l6ZSgzMDAsIDIwMCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134049</attachid>
            <date>2012-03-27 06:54:18 -0700</date>
            <delta_ts>2012-03-27 11:18:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80870-20120327145416.patch</filename>
            <type>text/plain</type>
            <size>46973</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMjI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDIyOGYzM2YxZDIwNWQw
NjI5Mzg4N2NlYzEyNzVlOGJkM2UwOWM1OS4uMTZhMWJiOWEzYTYwMmE4ZjgxMTE0ZTBkMDZkNDMy
ZDRjMDViYjQzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTAzLTE2ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
QWRkIFRleHR1cmVDb3BpZXIgZm9yIGNvcHlpbmcgdGV4dHVyZSBjb250ZW50cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA4NzAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVj
ZXMgYSBUZXh0dXJlQ29waWVyIGNsYXNzIHdob3NlIGpvYiBpcyB0byBjb3B5IHRoZQorICAgICAg
ICBjb250ZW50cyBmcm9tIG9uZSBHTCB0ZXh0dXJlIHRvIGFub3RoZXIgdXNpbmcgdGhlIG1vc3Qg
ZWZmaWNpZW50IG1lYW5zCisgICAgICAgIGZvciB0aGUgY3VycmVudCBHUFUuIFRoaXMgdmVyc2lv
biB1c2VzIHJlbmRlci10by10ZXh0dXJlIHRvIGRvIHRoZSBjb3B5LAorICAgICAgICBidXQgYSBw
YXRoIGJhc2VkIG9uIEVYVF9mcmFtZWJ1ZmZlcl9ibGl0IGNhbiBiZSBhZGRlZCBsYXRlci4KKwor
ICAgICAgICBUaGUgY2xhc3MgaXMgaW50ZW5kZWQgdG8gcmVwbGFjZSB0aGUgdXNlIG9mIGltYWdl
IHBhdGggb3BlcmF0aW9ucyBzdWNoCisgICAgICAgIGFzIGdsQ29weVRleHtTdWJ9SW1hZ2UyRCBm
b3IgZHVwbGljYXRpbmcgdGV4dHVyZSBjb250ZW50cy4gVGhlIHJlYXNvbiBpcworICAgICAgICB0
aGF0IHN1Y2ggZnVuY3Rpb25zIG1heSBub3QgYmUgdmVyeSB3ZWxsIG9wdGltaXplZCBpbiBzb21l
IC0tIG1haW5seQorICAgICAgICBtb2JpbGUgLS0gR1BVIGRyaXZlcnMuCisKKyAgICAgICAgV2l0
aCB0aGlzIHBhdGNoIHRoZSBuZXcgY29waWVyIGlzIHVzZWQganVzdCBmb3IgQ2FudmFzMkQgbGF5
ZXIKKyAgICAgICAgcHJlc2VudGF0aW9uLCBidXQgYW5vdGhlciBwb3RlbnRpYWwgdXNlIGlzIGZv
ciBXZWJHTCBsYXllciBwcmVzZW50YXRpb24uCisKKyAgICAgICAgVGVzdDogd2Via2l0X3VuaXRf
dGVzdHM6IFRleHR1cmVDb3BpZXJUZXN0CisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6Q2FudmFzMkRMYXll
ckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6fkNh
bnZhczJETGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hy
b21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoQ2FudmFz
MkRMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZUNv
cGllcik6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlZlcnRleFNoYWRlclBvc1RleElkZW50aXR5OjpnZXRTaGFkZXJTdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFnbWVudFNoYWRlclJHQkFUZXhDb3B5
OjpnZXRTaGFkZXJTdHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1NoYWRlckNocm9taXVtLmg6CisgICAgICAgIChWZXJ0ZXhTaGFkZXJQb3NUZXhJZGVudGl0eSk6
CisgICAgICAgIChXZWJDb3JlOjpWZXJ0ZXhTaGFkZXJQb3NUZXhJZGVudGl0eTo6aW5pdCk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZyYWdtZW50U2hhZGVyUkdCQVRleENvcHkpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZWxlcmF0ZWRU
ZXh0dXJlQ29waWVyOjpBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyOjp+QWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2VsZXJhdGVkVGV4dHVyZUNvcGllcjo6Y29weVRleHR1cmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFRleHR1cmVDb3BpZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZUNvcGllcjo6flRleHR1cmVDb3BpZXIpOgorICAgICAgICAo
QWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2VsZXJhdGVk
VGV4dHVyZUNvcGllcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2lu
Z2xlVGhyZWFkUHJveHk6OmRvQ29tbWl0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4
dHVyZVVwZGF0ZXI6OkNDVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoQ0NUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVV
cGRhdGVyOjpjb3BpZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6YmVn
aW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkKToKKwogMjAxMi0wMy0yNyAgSWx5YSBUaWtob25v
dnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogSGVh
cFNuYXBzaG90OiBzcGVlZC11cCBkaXN0YW5jZVRvV2luZG93IGNhbGN1bGF0aW9uLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCBjYmQyNmUwNjgwMTVlOTNiYWEyMTY0YzBhYjA4ODA1ZDBh
OWU1MTAyLi4yOGM0MzJiYTk2Y2ZlMzM2YzgzZWM3M2ExZDBiMTY5NWFmM2IwYWUwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTAzLTE2ICBTYW1pIEt5
b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRk
IFRleHR1cmVDb3BpZXIgZm9yIGNvcHlpbmcgdGV4dHVyZSBjb250ZW50cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA4NzAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgbmV3IHRlc3QgZm9yIFRleHR1
cmVDb3BpZXIuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9DYW52
YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9UZXh0dXJlQ29waWVy
VGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3Qu
Y3BwOgorICAgICAgICAoRmFrZVRleHR1cmVDb3BpZXIpOgorICAgICAgICAoV1RGOjpGYWtlVGV4
dHVyZUNvcGllcjo6Y29weVRleHR1cmUpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6
VEVTVCk6CisKIDIwMTItMDMtMjYgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgRGlzYWJsZSBDQ0xheWVyVHJlZUhvc3RUZXN0U2V0U2luZ2xlTG9z
dENvbnRleHQucnVuTXVsdGlUaHJlYWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOTA4MDM0ZGI5OWUw
OGE0Y2VlYzA3MTZmOTQyYTFjNGE3NjFlN2EzNi4uYzViYTYzN2E1Y2ExZTVkNzBkN2FkMzcwNTE5
ZDU1OTIzZTZkOTRmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzUyNSw2ICszNTI1LDggQEAKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RyYWNraW5nVGV4dHVyZUFsbG9jYXRvci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RyYWNraW5nVGV4dHVyZUFsbG9jYXRvci5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUNvcGllci5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2Vy
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJD
aHJvbWl1bS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXgg
MWQzZDM2OWExMzk1MDMxZWYwZDYwNzJkZjA4YTJlOWQzMjYwZWQyNi4uZmNiZjU0YTc3ZTFkODdi
YThmYWQ5ZDJlMjI3NDU3Y2RhZDVhYWI4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hy
b21pdW0uY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21p
dW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oIiAvLyBGb3IgdGhlIEdMQygpIG1hY3JvCisjaW5jbHVkZSAiVGV4dHVy
ZUNvcGllci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgImNj
L0NDVGV4dHVyZUxheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDVGV4dHVyZVVwZGF0ZXIuaCIK
QEAgLTU2LDE4ICs1NywxMyBAQCBDYW52YXMyRExheWVyQ2hyb21pdW06OkNhbnZhczJETGF5ZXJD
aHJvbWl1bShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZQogICAgICwgbV9jb250
ZXh0TG9zdChmYWxzZSkKICAgICAsIG1fc2l6ZShzaXplKQogICAgICwgbV9iYWNrVGV4dHVyZUlk
KDApCi0gICAgLCBtX2ZibygwKQogICAgICwgbV91c2VEb3VibGVCdWZmZXJpbmcoQ0NQcm94eTo6
aGFzSW1wbFRocmVhZCgpKQogICAgICwgbV9jYW52YXMoMCkKIHsKLSAgICBpZiAobV91c2VEb3Vi
bGVCdWZmZXJpbmcpCi0gICAgICAgIEdMQyhtX2NvbnRleHQsIG1fZmJvID0gbV9jb250ZXh0LT5j
cmVhdGVGcmFtZWJ1ZmZlcigpKTsKIH0KIAogQ2FudmFzMkRMYXllckNocm9taXVtOjp+Q2FudmFz
MkRMYXllckNocm9taXVtKCkKIHsKLSAgICBpZiAobV91c2VEb3VibGVCdWZmZXJpbmcgJiYgbV9m
Ym8pCi0gICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlciht
X2ZibykpOwogICAgIGlmIChtX2NvbnRleHQgJiYgbGF5ZXJUcmVlSG9zdCgpKQogICAgICAgICBs
YXllclRyZWVIb3N0KCktPnN0b3BSYXRlTGltaXRlcihtX2NvbnRleHQuZ2V0KCkpOwogfQpAQCAt
MTM4LDE1ICsxMzQsOCBAQCB2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9z
aXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dAogICAgIGlmICghbV9iYWNr
VGV4dHVyZUlkIHx8ICFtX2Zyb250VGV4dHVyZSB8fCAhbV9mcm9udFRleHR1cmUtPmlzVmFsaWQo
bV9zaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fZnJvbnRUZXh0dXJlLT5iaW5kVGV4dHVyZShjb250ZXh0LCB1cGRhdGVyLmFsbG9jYXRvcigp
KTsKLQotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2ZibykpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIG1fYmFja1RleHR1cmVJZCwgMCkpOwotICAgIC8vIEZJWE1FOiBUaGUgY29weSBv
cGVyYXRpb24gd2lsbCBmYWlsIGlmIHRoZSBtX2JhY2tUZXh0dXJlIGlzIGFsbG9jYXRlZCBhcyBC
R1JBIHNpbmNlIGdsQ29weVRleChTdWIpSW1hZ2UyRCBkb2Vzbid0Ci0gICAgLy8gICAgICAgIHN1
cHBvcnQgdGhlIEJHUkEgZm9ybWF0LiBTZWUgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03NTE0MgotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5jb3B5VGV4U3Vi
SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgMCwgMCwgbV9z
aXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKSk7Ci0g
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmZsdXNoKCkpOworICAgIG1fZnJvbnRUZXh0dXJlLT5h
bGxvY2F0ZSh1cGRhdGVyLmFsbG9jYXRvcigpKTsKKyAgICB1cGRhdGVyLmNvcGllcigpLT5jb3B5
VGV4dHVyZShjb250ZXh0LCBtX2JhY2tUZXh0dXJlSWQsIG1fZnJvbnRUZXh0dXJlLT50ZXh0dXJl
SWQoKSwgbV9zaXplKTsKIH0KIAogdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnB1c2hQcm9w
ZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21p
dW0uaAppbmRleCA5MzAyMjQ2ODRiYmU0ODBhYjg4NjQ1NGVjZDRhYWY1MGZiNTA3NzYxLi5iNWQw
YzIzODkxZmIwNWI2MjE4MjQ5MTAyNTBkNTkwYjhiNzJjNjcyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMy
RExheWVyQ2hyb21pdW0uaApAQCAtNzIsNyArNzIsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9j
b250ZXh0TG9zdDsKICAgICBJbnRTaXplIG1fc2l6ZTsKICAgICB1bnNpZ25lZCBtX2JhY2tUZXh0
dXJlSWQ7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZibzsKICAgICAvLyBXaGVuIG1fdXNlRG91
YmxlQnVmZmVyaW5nIGlzIHRydWUsIHRoZSBjb21wb3NpdG9yIHdpbGwgZHJhdyB1c2luZyBhIGNv
cHkgb2YgdGhlCiAgICAgLy8gY2FudmFzJyBiYWNraW5nIHRleHR1cmUuIFRoaXMgb3B0aW9uIHNo
b3VsZCBiZSB1c2VkIHdpdGggdGhlIGNvbXBvc2l0b3IgZG9lc24ndAogICAgIC8vIHN5bmNocm9u
aXplIGl0cyBkcmF3cyB3aXRoIHRoZSBjYW52YXMgdXBkYXRlcy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGM1ZjVlNmFhOTBjZjcxMTA1MTdhMzU0MDQ3NzMzYjk1
N2M5ZTRlZGIuLjhlZjYzY2RhMWQ0ZTA5OGU4NDc3Mzk3N2YyMDY4ZmU4NWE2YWZkMmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNDUsNiArNDUsNyBAQAogI2lu
Y2x1ZGUgIlBsYXRmb3JtQ29sb3IuaCIKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCisjaW5jbHVkZSAiVGV4dHVyZUNvcGllci5oIgog
I2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2lu
Y2x1ZGUgIlRyYWNraW5nVGV4dHVyZUFsbG9jYXRvci5oIgpAQCAtMTI5Nyw2ICsxMjk4LDcgQEAg
Ym9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkKICAg
ICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUo
VGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dHVy
ZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jYXBhYmls
aXRpZXMubWF4VGV4dHVyZVNpemUpOworICAgIG1fdGV4dHVyZUNvcGllciA9IEFjY2VsZXJhdGVk
VGV4dHVyZUNvcGllcjo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSk7CiAgICAgbV9jb250ZW50c1Rl
eHR1cmVBbGxvY2F0b3IgPSBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I6OmNyZWF0ZShtX2NvbnRl
eHQuZ2V0KCkpOwogICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVBbGxvY2F0b3IgPSBUcmFja2lu
Z1RleHR1cmVBbGxvY2F0b3I6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpOwogICAgIGlmIChtX2Nh
cGFiaWxpdGllcy51c2luZ1RleHR1cmVVc2FnZUhpbnQpCkBAIC0xNjA5LDYgKzE2MTEsNyBAQCB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJlZE9iamVjdHMoKQogICAgIG1f
c3RyZWFtVGV4dHVyZUxheWVyUHJvZ3JhbS5jbGVhcigpOwogICAgIGlmIChtX29mZnNjcmVlbkZy
YW1lYnVmZmVySWQpCiAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGVs
ZXRlRnJhbWVidWZmZXIobV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkKSk7CisgICAgbV90ZXh0dXJl
Q29waWVyLmNsZWFyKCk7CiAKICAgICByZWxlYXNlUmVuZGVyU3VyZmFjZVRleHR1cmVzKCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDYxYzFkNGE4NzdiZWJjY2Zh
NWRhMWZkMWRlYjY0MjMxOTIyYTJjNzEuLjQzNTU0MWI3MzIyY2Q5NmY1ZjQ5YTNiZTk3NDViYTI0
MGVmZGQ4ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC0zOCw2ICsz
OCw3IEBACiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2lu
Y2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJUZXh0dXJlQ29waWVyLmgiCiAjaW5j
bHVkZSAiVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiVmlkZW9MYXllckNo
cm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NEcmF3UXVhZC5oIgpAQCAtNTksNyArNjAsNiBAQCBj
bGFzcyBDQ1JlbmRlclBhc3M7CiBjbGFzcyBDQ1RleHR1cmVEcmF3UXVhZDsKIGNsYXNzIEdlb21l
dHJ5QmluZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwotY2xhc3MgVHJhY2tpbmdUZXh0
dXJlQWxsb2NhdG9yOwogY2xhc3MgTGF5ZXJSZW5kZXJlclN3YXBCdWZmZXJzQ29tcGxldGVDYWxs
YmFja0FkYXB0ZXI7CiBjbGFzcyBTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb247CiAK
QEAgLTE0Miw2ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRGcmFtZWJ1ZmZlclBpeGVs
cyh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIFRleHR1cmVNYW5hZ2VyKiBy
ZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclN1cmZh
Y2VUZXh0dXJlTWFuYWdlci5nZXQoKTsgfQorICAgIFRleHR1cmVDb3BpZXIqIHRleHR1cmVDb3Bp
ZXIoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVDb3BpZXIuZ2V0KCk7IH0KICAgICBUZXh0dXJl
QWxsb2NhdG9yKiByZW5kZXJTdXJmYWNlVGV4dHVyZUFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu
IG1fcmVuZGVyU3VyZmFjZVRleHR1cmVBbGxvY2F0b3IuZ2V0KCk7IH0KICAgICBUZXh0dXJlQWxs
b2NhdG9yKiBjb250ZW50c1RleHR1cmVBbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
bnRzVGV4dHVyZUFsbG9jYXRvci5nZXQoKTsgfQogCkBAIC0yNDksNiArMjUwLDcgQEAgcHJpdmF0
ZToKICAgICBPd25QdHI8Q0NWaWRlb0xheWVySW1wbDo6U3RyZWFtVGV4dHVyZVByb2dyYW0+IG1f
c3RyZWFtVGV4dHVyZUxheWVyUHJvZ3JhbTsKIAogICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4g
bV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXI7CisgICAgT3duUHRyPEFjY2VsZXJhdGVkVGV4
dHVyZUNvcGllcj4gbV90ZXh0dXJlQ29waWVyOwogICAgIE93blB0cjxUcmFja2luZ1RleHR1cmVB
bGxvY2F0b3I+IG1fY29udGVudHNUZXh0dXJlQWxsb2NhdG9yOwogICAgIE93blB0cjxUcmFja2lu
Z1RleHR1cmVBbGxvY2F0b3I+IG1fcmVuZGVyU3VyZmFjZVRleHR1cmVBbGxvY2F0b3I7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NoYWRl
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1NoYWRlckNocm9taXVtLmNwcAppbmRleCA3MWQ0ZDFmZDE4ZDk4NjIxZDJjYzRiNDlhZjlkYWVj
ZDYxNWVjNzg3Li5kOTk1ZWRhZGJkNDRiNTRlNjMxNGEyM2U3Njk0MDRkMjQ5ZTc1MmViIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXJD
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vU2hhZGVyQ2hyb21pdW0uY3BwCkBAIC0xODgsNiArMTg4LDE5IEBAIFZlcnRleFNoYWRlclF1
YWQ6OlZlcnRleFNoYWRlclF1YWQoKQogewogfQogCitTdHJpbmcgVmVydGV4U2hhZGVyUG9zVGV4
SWRlbnRpdHk6OmdldFNoYWRlclN0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNIQURFUigK
KyAgICAgICAgYXR0cmlidXRlIHZlYzQgYV9wb3NpdGlvbjsKKyAgICAgICAgdmFyeWluZyB2ZWMy
IHZfdGV4Q29vcmQ7CisgICAgICAgIHZvaWQgbWFpbigpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGdsX1Bvc2l0aW9uID0gYV9wb3NpdGlvbjsKKyAgICAgICAgICAgIHZfdGV4Q29vcmQgPSAoYV9w
b3NpdGlvbi54eSArIHZlYzIoMS4wKSkgKiAwLjU7CisgICAgICAgIH0KKyAgICApOworfQorCiB2
b2lkIFZlcnRleFNoYWRlclF1YWQ6OmluaXQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVu
c2lnbmVkIHByb2dyYW0pCiB7CiAgICAgbV9tYXRyaXhMb2NhdGlvbiA9IGNvbnRleHQtPmdldFVu
aWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAibWF0cml4Iik7CkBAIC00MTAsNiArNDIzLDE5IEBAIFN0
cmluZyBGcmFnbWVudFNoYWRlclJHQkFUZXhPcGFxdWU6OmdldFNoYWRlclN0cmluZygpIGNvbnN0
CiAgICAgKTsKIH0KIAorU3RyaW5nIEZyYWdtZW50U2hhZGVyUkdCQVRleDo6Z2V0U2hhZGVyU3Ry
aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gU0hBREVSKAorICAgICAgICBwcmVjaXNpb24gbWVk
aXVtcCBmbG9hdDsKKyAgICAgICAgdmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7CisgICAgICAgIHVu
aWZvcm0gc2FtcGxlcjJEIHNfdGV4dHVyZTsKKyAgICAgICAgdm9pZCBtYWluKCkKKyAgICAgICAg
eworICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHNfdGV4dHVyZSwgdl90ZXhD
b29yZCk7CisgICAgICAgIH0KKyAgICApOworfQorCiBTdHJpbmcgRnJhZ21lbnRTaGFkZXJSR0JB
VGV4U3dpenpsZUFscGhhOjpnZXRTaGFkZXJTdHJpbmcoKSBjb25zdAogewogICAgIHJldHVybiBT
SEFERVIoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9TaGFkZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uaAppbmRleCAyYmQ3NjBhOTlmYzQ2NjA3MGM1NmYzYWUy
NDFjMmEyMDJhMzMwNmZhLi4wZTQxOTY4ODAyY2M4Y2VkMzI2ZWNiNjZkZjRhOWFiYjI3YmI5ZGEx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9T
aGFkZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1NoYWRlckNocm9taXVtLmgKQEAgLTk1LDYgKzk1LDEyIEBAIHByaXZhdGU6CiAgICAg
aW50IG1fbWF0cml4TG9jYXRpb247CiB9OwogCitjbGFzcyBWZXJ0ZXhTaGFkZXJQb3NUZXhJZGVu
dGl0eSB7CitwdWJsaWM6CisgICAgdm9pZCBpbml0KEdyYXBoaWNzQ29udGV4dDNEKiwgdW5zaWdu
ZWQgcHJvZ3JhbSkgeyB9CisgICAgU3RyaW5nIGdldFNoYWRlclN0cmluZygpIGNvbnN0OworfTsK
KwogY2xhc3MgVmVydGV4U2hhZGVyUG9zVGV4VHJhbnNmb3JtIHsKIHB1YmxpYzoKICAgICBWZXJ0
ZXhTaGFkZXJQb3NUZXhUcmFuc2Zvcm0oKTsKQEAgLTIxMyw2ICsyMTksMTEgQEAgcHVibGljOgog
ICAgIFN0cmluZyBnZXRTaGFkZXJTdHJpbmcoKSBjb25zdDsKIH07CiAKK2NsYXNzIEZyYWdtZW50
U2hhZGVyUkdCQVRleCA6IHB1YmxpYyBGcmFnbWVudFRleE9wYXF1ZUJpbmRpbmcgeworcHVibGlj
OgorICAgIFN0cmluZyBnZXRTaGFkZXJTdHJpbmcoKSBjb25zdDsKK307CisKIC8vIFN3aXp6bGVz
IHRoZSByZWQgYW5kIGJsdWUgY29tcG9uZW50IG9mIHNhbXBsZWQgdGV4ZWwgd2l0aCBhbHBoYS4K
IGNsYXNzIEZyYWdtZW50U2hhZGVyUkdCQVRleFN3aXp6bGVBbHBoYSA6IHB1YmxpYyBGcmFnbWVu
dFRleEFscGhhQmluZGluZyB7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmJkNjg3YzYxMDc2ZTQ1MmFlN2U5NzEyMjliYzhjMWJhNTc3NTMzYWQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJl
Q29waWVyLmNwcApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIlRleHR1cmVDb3BpZXIuaCIKKworI2luY2x1ZGUgIkxheWVy
UmVuZGVyZXJDaHJvbWl1bS5oIiAvLyBGb3IgdGhlIEdMQygpIG1hY3JvCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK0FjY2VsZXJhdGVk
VGV4dHVyZUNvcGllcjo6QWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyKFBhc3NSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNvbnRleHQpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKK3sKKyAgICBH
TEMobV9jb250ZXh0LCBtX2ZibyA9IG1fY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKSk7Cisg
ICAgR0xDKG1fY29udGV4dCwgbV9wb3NpdGlvbkJ1ZmZlciA9IG1fY29udGV4dC0+Y3JlYXRlQnVm
ZmVyKCkpOworCisgICAgc3RhdGljIGNvbnN0IGZsb2F0IGtQb3NpdGlvbnNbNF1bNF0gPSB7Cisg
ICAgICAgIHstMSwgLTEsIDAsIDF9LAorICAgICAgICB7IDEsIC0xLCAwLCAxfSwKKyAgICAgICAg
eyAxLCAxLCAwLCAxfSwKKyAgICAgICAgey0xLCAxLCAwLCAxfQorICAgIH07CisKKyAgICBHTEMo
bV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkFSUkFZX0JVRkZFUiwgbV9wb3NpdGlvbkJ1ZmZlcikpOworICAgIEdMQyhtX2NvbnRleHQuZ2V0
KCksIG1fY29udGV4dC0+YnVmZmVyRGF0YShHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVS
LCBzaXplb2Yoa1Bvc2l0aW9ucyksIGtQb3NpdGlvbnMsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFU
SUNfRFJBVykpOworICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+YmluZEJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAwKSk7CisKKyAgICBtX2JsaXRQcm9n
cmFtID0gYWRvcHRQdHIobmV3IEJsaXRQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOworICAgIG1f
YmxpdFByb2dyYW0tPmluaXRpYWxpemUobV9jb250ZXh0LmdldCgpKTsKK30KKworQWNjZWxlcmF0
ZWRUZXh0dXJlQ29waWVyOjp+QWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyKCkKK3sKKyAgICBpZiAo
bV9ibGl0UHJvZ3JhbSkKKyAgICAgICAgbV9ibGl0UHJvZ3JhbS0+Y2xlYW51cChtX2NvbnRleHQu
Z2V0KCkpOworICAgIGlmIChtX3Bvc2l0aW9uQnVmZmVyKQorICAgICAgICBHTEMobV9jb250ZXh0
LCBtX2NvbnRleHQtPmRlbGV0ZUJ1ZmZlcihtX3Bvc2l0aW9uQnVmZmVyKSk7CisgICAgaWYgKG1f
ZmJvKQorICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRlbGV0ZUZyYW1lYnVmZmVy
KG1fZmJvKSk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyOjpjb3B5VGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgdW5zaWduZWQgc291cmNlVGV4dHVyZUlkLCB1
bnNpZ25lZCBkZXN0VGV4dHVyZUlkLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIFRSQUNF
X0VWRU5UKCJUZXh0dXJlQ29waWVyOjpjb3B5VGV4dHVyZSIsIHRoaXMsIDApOworCisgICAgLy8g
Tm90ZTogdGhpcyBjb2RlIGRvZXMgbm90IHJlc3RvcmUgdGhlIHZpZXdwb3J0LCBib3VuZCBwcm9n
cmFtLCAyRCB0ZXh0dXJlLCBmcmFtZWJ1ZmZlciwgYnVmZmVyIG9yIGJsZW5kIGVuYWJsZS4KKyAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgbV9mYm8pKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+ZnJhbWVi
dWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBkZXN0VGV4dHVyZUlkLCAwKSk7CisKKyNpZiBPUyhBTkRST0lEKQorICAgIC8vIENsZWFyIGRl
c3RpbmF0aW9uIHRvIGltcHJvdmUgcGVyZm9ybWFuY2Ugb24gdGlsaW5nIEdQVXMuCisgICAgLy8g
VE9ETzogVXNlIEVYVF9kaXNjYXJkX2ZyYW1lYnVmZmVyIG9yIHNraXAgY2xlYXJpbmcgaWYgaXQg
aXNuJ3QgYXZhaWxhYmxlLgorICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5jbGVhcihHcmFwaGlj
c0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCkpOworI2VuZGlmCisKKyAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHNv
dXJjZVRleHR1cmVJZCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJp
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVCkpOworICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQz
RDo6TkVBUkVTVCkpOworCisgICAgLy8gVE9ETzogVXNlIEVYVF9mcmFtZWJ1ZmZlcl9ibGl0IGlm
IGF2YWlsYWJsZS4KKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShtX2JsaXRQ
cm9ncmFtLT5wcm9ncmFtKCkpKTsKKworICAgIGNvbnN0IGludCBrUG9zaXRpb25BdHRyaWJ1dGUg
PSAwOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpBUlJBWV9CVUZGRVIsIG1fcG9zaXRpb25CdWZmZXIpKTsKKyAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihrUG9zaXRpb25BdHRyaWJ1dGUsIDQsIEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDApKTsKKyAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoa1Bvc2l0aW9uQXR0cmlidXRlKSk7CisgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZ
X0JVRkZFUiwgMCkpOworCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnZpZXdwb3J0KDAsIDAs
IHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOworICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIDAsIDQp
KTsKKworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVS
LCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsK
KyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGtQb3Np
dGlvbkF0dHJpYnV0ZSkpOworCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVzZVByb2dyYW0o
MCkpOworCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FU
VEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCkpOworICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCAwKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKSk7Cit9CisKK30KKworI2VuZGlmIC8vIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
M2JlNWVjYWQxNmY4ODU1MjUxMTgxZDY1MmI0ZGY4YzM4NGI4YjA1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUNvcGll
ci5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRleHR1cmVDb3Bp
ZXJfaAorI2RlZmluZSBUZXh0dXJlQ29waWVyX2gKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCisjaW5jbHVkZSAiUHJvZ3JhbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJTaGFkZXJDaHJv
bWl1bS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgVGV4dHVyZUNvcGllciB7CitwdWJsaWM6CisgICAgLy8gQ29weSB0aGUgYmFz
ZSBsZXZlbCBjb250ZW50cyBvZiB8c291cmNlVGV4dHVyZUlkfCB0byB8ZGVzdFRleHR1cmVJZHwu
IEJvdGggdGV4dHVyZSBvYmplY3RzCisgICAgLy8gbXVzdCBiZSBjb21wbGV0ZSBhbmQgaGF2ZSBh
IGJhc2UgbGV2ZWwgb2YgfHNpemV8IGRpbWVuc2lvbnMuIFRoZSBjb2xvciBmb3JtYXRzIGRvIG5v
dCBuZWVkCisgICAgLy8gdG8gbWF0Y2gsIGJ1dCB8ZGVzdFRleHR1cmVJZHwgbXVzdCBoYXZlIGEg
cmVuZGVyYWJsZSBmb3JtYXQuCisgICAgdmlydHVhbCB2b2lkIGNvcHlUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEKiwgdW5zaWduZWQgc291cmNlVGV4dHVyZUlkLCB1bnNpZ25lZCBkZXN0VGV4dHVy
ZUlkLCBjb25zdCBJbnRTaXplJikgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+VGV4
dHVyZUNvcGllcigpIHsgfQorfTsKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
KworY2xhc3MgQWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyIDogcHVibGljIFRleHR1cmVDb3BpZXIg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFjY2VsZXJhdGVkVGV4dHVyZUNvcGllcik7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8QWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyPiBj
cmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgQWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyKGNvbnRleHQp
KTsKKyAgICB9CisgICAgdmlydHVhbCB+QWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyKCk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgY29weVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCBz
b3VyY2VUZXh0dXJlSWQsIHVuc2lnbmVkIGRlc3RUZXh0dXJlSWQsIGNvbnN0IEludFNpemUmKTsK
KworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IEFjY2VsZXJhdGVkVGV4dHVyZUNvcGllcihQYXNz
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBQcm9n
cmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXhJZGVudGl0eSwgRnJhZ21lbnRTaGFkZXJSR0JB
VGV4PiBCbGl0UHJvZ3JhbTsKKworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250
ZXh0OworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mYm87CisgICAgUGxhdGZvcm0zRE9iamVjdCBt
X3Bvc2l0aW9uQnVmZmVyOworICAgIE93blB0cjxCbGl0UHJvZ3JhbT4gbV9ibGl0UHJvZ3JhbTsK
K307CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCmluZGV4IDc2NTI1ODZk
NGYzNWE2MzllZDg2YjY0YTU2YzJmZWJhODdhYmMxMmMuLjFiNDFmN2U3Y2UwNDhjZGIxNWIwOGRi
YWVjMmY5YzdhMzAzNmFhZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHku
Y3BwCkBAIC0yMDIsNyArMjAyLDcgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpkb0NvbW1p
dCgpCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmJlZ2luQ29tbWl0KCk7CiAKICAgICAg
ICAgbV9sYXllclRyZWVIb3N0LT5iZWdpbkNvbW1pdE9uSW1wbFRocmVhZChtX2xheWVyVHJlZUhv
c3RJbXBsLmdldCgpKTsKLSAgICAgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKG1fbGF5ZXJU
cmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpKTsKKyAgICAgICAgQ0NUZXh0
dXJlVXBkYXRlciB1cGRhdGVyKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZUFs
bG9jYXRvcigpLCBtX2xheWVyVHJlZUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCktPnRleHR1cmVD
b3BpZXIoKSk7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcyhtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZXh0KCksIHVwZGF0ZXIpOwogICAgICAgICB1
cGRhdGVyLnVwZGF0ZShtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZXh0KCksIG51bWVyaWNfbGlt
aXRzPHNpemVfdD46Om1heCgpKTsKICAgICAgICAgQVNTRVJUKCF1cGRhdGVyLmhhc01vcmVVcGRh
dGVzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcAppbmRleCA2NmUwOGM4YmQ5
M2YxODI2YTM5YjU1M2MyOTY1MGE4M2FjMDllOGVhLi4wY2UwZjZkMTA5OGE3Mzk3N2YzYmFmODIz
MmY3MjE2YjA1ZTdhZDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcApAQCAt
MzcsOCArMzcsOSBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUNDVGV4dHVyZVVwZGF0ZXI6OkNDVGV4dHVyZVVwZGF0ZXIoVGV4dHVyZUFsbG9jYXRvciog
YWxsb2NhdG9yKQorQ0NUZXh0dXJlVXBkYXRlcjo6Q0NUZXh0dXJlVXBkYXRlcihUZXh0dXJlQWxs
b2NhdG9yKiBhbGxvY2F0b3IsIFRleHR1cmVDb3BpZXIqIGNvcGllcikKICAgICA6IG1fYWxsb2Nh
dG9yKGFsbG9jYXRvcikKKyAgICAsIG1fY29waWVyKGNvcGllcikKICAgICAsIG1fZW50cnlJbmRl
eCgwKQogewogICAgIEFTU0VSVChtX2FsbG9jYXRvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRh
dGVyLmgKaW5kZXggZGJiNTJjOWJhZDIwNDM0ZGRiZjc0YzYyOGE0NDQ1ZTlkN2U5ODdkMi4uZDI5
YzY1ODYxZTkzMjNlY2ZmODJkZTQwYmNkYmY3ZTI0NmI0OTcwNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4
dHVyZVVwZGF0ZXIuaApAQCAtMzQsMTAgKzM0LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBUZXh0dXJlQWxsb2NhdG9yOworY2xhc3Mg
VGV4dHVyZUNvcGllcjsKIAogY2xhc3MgQ0NUZXh0dXJlVXBkYXRlciB7CiBwdWJsaWM6Ci0gICAg
Q0NUZXh0dXJlVXBkYXRlcihUZXh0dXJlQWxsb2NhdG9yKik7CisgICAgQ0NUZXh0dXJlVXBkYXRl
cihUZXh0dXJlQWxsb2NhdG9yKiwgVGV4dHVyZUNvcGllciopOwogICAgIH5DQ1RleHR1cmVVcGRh
dGVyKCk7CiAKICAgICB2b2lkIGFwcGVuZChMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOwpAQCAt
NTEsNiArNTIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhcigpOwogCiAgICAgVGV4dHVyZUFs
bG9jYXRvciogYWxsb2NhdG9yKCkgeyByZXR1cm4gbV9hbGxvY2F0b3I7IH0KKyAgICBUZXh0dXJl
Q29waWVyKiBjb3BpZXIoKSB7IHJldHVybiBtX2NvcGllcjsgfQogCiBwcml2YXRlOgogICAgIHN0
cnVjdCBVcGRhdGVFbnRyeSB7CkBAIC02Miw2ICs2NCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGlj
IHZvaWQgYXBwZW5kKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCwgVmVjdG9yPFVwZGF0ZUVudHJ5
PiYpOwogCiAgICAgVGV4dHVyZUFsbG9jYXRvciogbV9hbGxvY2F0b3I7CisgICAgVGV4dHVyZUNv
cGllciogbV9jb3BpZXI7CiAgICAgc2l6ZV90IG1fZW50cnlJbmRleDsKICAgICBWZWN0b3I8VXBk
YXRlRW50cnk+IG1fZW50cmllczsKICAgICBWZWN0b3I8VXBkYXRlRW50cnk+IG1fcGFydGlhbEVu
dHJpZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmluZGV4IDRjOTg4YmY0YTI0MjcyYjhk
ZTEwOTFmYTE3MWQ5ZGM4MjBlYzlhZDguLjIwYTUwYmJhZDcxYmEzNDI0ZTVjYTI3Njk3Yjc2OGUx
OTQ3Mzk1MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBAIC0yNyw2ICsyNyw3IEBA
CiAjaW5jbHVkZSAiY2MvQ0NUaHJlYWRQcm94eS5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJT
aGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNs
dWRlICJjYy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlLmgiCkBAIC01MDMsNyArNTA0LDcgQEAgdm9p
ZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxUaHJlYWQoQ0NDb21wbGV0
aW9uRXZlbnQqIGNvbXBsZXRpb24KICAgICBtX2NvbW1pdENvbXBsZXRpb25FdmVudE9uSW1wbFRo
cmVhZCA9IGNvbXBsZXRpb247CiAKICAgICBBU1NFUlQoIW1fY3VycmVudFRleHR1cmVVcGRhdGVy
T25JbXBsVGhyZWFkKTsKLSAgICBtX2N1cnJlbnRUZXh0dXJlVXBkYXRlck9uSW1wbFRocmVhZCA9
IGFkb3B0UHRyKG5ldyBDQ1RleHR1cmVVcGRhdGVyKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRl
bnRzVGV4dHVyZUFsbG9jYXRvcigpKSk7CisgICAgbV9jdXJyZW50VGV4dHVyZVVwZGF0ZXJPbklt
cGxUaHJlYWQgPSBhZG9wdFB0cihuZXcgQ0NUZXh0dXJlVXBkYXRlcihtX2xheWVyVHJlZUhvc3RJ
bXBsLT5jb250ZW50c1RleHR1cmVBbGxvY2F0b3IoKSwgbV9sYXllclRyZWVIb3N0SW1wbC0+bGF5
ZXJSZW5kZXJlcigpLT50ZXh0dXJlQ29waWVyKCkpKTsKICAgICBtX2xheWVyVHJlZUhvc3QtPnVw
ZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMobV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGV4dCgpLCAq
bV9jdXJyZW50VGV4dHVyZVVwZGF0ZXJPbkltcGxUaHJlYWQpOwogCiAgICAgbV9zY2hlZHVsZXJP
bkltcGxUaHJlYWQtPmJlZ2luRnJhbWVDb21wbGV0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkKaW5kZXggODg5NDI5YmQ5MjM4MDFkNjMxNzZmYmQwMTI2NzA1NDZlMjY4OGU0ZS4uOTQx
ZjhlOGFmZjNhMmU5ZmVjMjAwZTZjOGEwMDI1ZjY4OTE2YzI3MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCkBAIC0xMTksNiArMTE5LDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9SZWdp
b25UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvUmVuZGVyVGFibGVDZWxsVGVzdC5jcHAn
LAogICAgICAgICAgICAgJ3Rlc3RzL1Njcm9sbGJhckxheWVyQ2hyb21pdW1UZXN0LmNwcCcsCisg
ICAgICAgICAgICAndGVzdHMvVGV4dHVyZUNvcGllclRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9UZXh0dXJlTWFuYWdlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9UaWxlZExh
eWVyQ2hyb21pdW1UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvVGlsaW5nRGF0YVRlc3Qu
Y3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRM
YXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZh
czJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IDE0YzkyYWU5ZjdjOTJlOWM3YWE5NjM0NDM4
ZGJkOTI3Y2UwY2FkODYuLmVhM2Q0MGZmZTA4MTA4YmZkMTlhZDcyNjU4NWVjNTQ4YjkzNDIzYzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckNo
cm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMy
RExheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkZha2VX
ZWJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZS5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgorI2luY2x1ZGUgIlRleHR1cmVDb3BpZXIuaCIKICNp
bmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYkNvbXBvc2l0b3IuaCIKICNp
bmNsdWRlICJXZWJLaXQuaCIKQEAgLTkyLDYgKzkzLDExIEBAIHB1YmxpYzoKICAgICBNT0NLX01F
VEhPRDMoZGVsZXRlVGV4dHVyZSwgdm9pZCh1bnNpZ25lZCwgY29uc3QgSW50U2l6ZSYsIEdDM0Rl
bnVtKSk7CiB9OwogCitjbGFzcyBNb2NrVGV4dHVyZUNvcGllciA6IHB1YmxpYyBUZXh0dXJlQ29w
aWVyIHsKK3B1YmxpYzoKKyAgICBNT0NLX01FVEhPRDQoY29weVRleHR1cmUsIHZvaWQoR3JhcGhp
Y3NDb250ZXh0M0QqLCB1bnNpZ25lZCwgdW5zaWduZWQsIGNvbnN0IEludFNpemUmKSk7Cit9Owor
CiBjbGFzcyBDYW52YXMyRExheWVyQ2hyb21pdW1UZXN0IDogcHVibGljIFRlc3QgewogcHJvdGVj
dGVkOgogICAgIHZvaWQgZnVsbExpZmVjeWNsZVRlc3QoYm9vbCB0aHJlYWRlZCkKQEAgLTEwMSwx
MSArMTA3LDkgQEAgcHJvdGVjdGVkOgogICAgICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IG1haW5Db250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0Nv
bnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgTW9ja0NhbnZhc0NvbnRleHQoKSksIEdy
YXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CiAgICAgICAgIFJl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gaW1wbENvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBN
b2NrQ2FudmFzQ29udGV4dCgpKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9I
b3N0V2luZG93KTsKIAotICAgICAgICBNb2NrQ2FudmFzQ29udGV4dCYgbWFpbk1vY2sgPSAqc3Rh
dGljX2Nhc3Q8TW9ja0NhbnZhc0NvbnRleHQqPihHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4
dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChtYWluQ29udGV4dC5nZXQoKSkpOwotICAgICAgICBN
b2NrQ2FudmFzQ29udGV4dCYgaW1wbE1vY2sgPSAqc3RhdGljX2Nhc3Q8TW9ja0NhbnZhc0NvbnRl
eHQqPihHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQz
RChpbXBsQ29udGV4dC5nZXQoKSkpOwotCiAgICAgICAgIE1vY2tUZXh0dXJlQWxsb2NhdG9yIGFs
bG9jYXRvck1vY2s7Ci0gICAgICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmYWxsb2NhdG9y
TW9jayk7CisgICAgICAgIE1vY2tUZXh0dXJlQ29waWVyIGNvcGllck1vY2s7CisgICAgICAgIEND
VGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmYWxsb2NhdG9yTW9jaywgJmNvcGllck1vY2spOwogCiAg
ICAgICAgIGNvbnN0IEludFNpemUgc2l6ZSgzMDAsIDE1MCk7CiAKQEAgLTEyMCwyOCArMTI0LDE2
IEBAIHByb3RlY3RlZDoKIAogICAgICAgICBjb25zdCBXZWJHTElkIGJhY2tUZXh0dXJlSWQgPSAx
OwogICAgICAgICBjb25zdCBXZWJHTElkIGZyb250VGV4dHVyZUlkID0gMjsKLSAgICAgICAgY29u
c3QgV2ViR0xJZCBmYm9JZCA9IDM7CiAgICAgICAgIHsKICAgICAgICAgICAgIEluU2VxdWVuY2Ug
c2VxdWVuY2U7CiAKICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgY2FudmFzIGJhY2tpbmcg
dGV4dHVyZSBpcyBkb3VibGVidWZmZXJlZCBvbmx5IHdoZW4gdXNpbmcgdGhlIHRocmVhZGVkCiAg
ICAgICAgICAgICAvLyBjb21wb3NpdG9yLgogICAgICAgICAgICAgaWYgKHRocmVhZGVkKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gU2V0dXAgQ2FudmFzMkRMYXllckNocm9taXVtIChvbiB0aGUgbWFp
biB0aHJlYWQpLgotICAgICAgICAgICAgICAgIEVYUEVDVF9DQUxMKG1haW5Nb2NrLCBjcmVhdGVG
cmFtZWJ1ZmZlcigpKQotICAgICAgICAgICAgICAgICAgICAuV2lsbE9uY2UoUmV0dXJuKGZib0lk
KSk7Ci0KICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgdGV4dHVyZSBhbmQgZG8gdGhlIGNvcHkg
KG9uIHRoZSBpbXBsIHRocmVhZCkuCiAgICAgICAgICAgICAgICAgRVhQRUNUX0NBTEwoYWxsb2Nh
dG9yTW9jaywgY3JlYXRlVGV4dHVyZShzaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCiAg
ICAgICAgICAgICAgICAgICAgIC5XaWxsT25jZShSZXR1cm4oZnJvbnRUZXh0dXJlSWQpKTsKLSAg
ICAgICAgICAgICAgICBFWFBFQ1RfQ0FMTChpbXBsTW9jaywgYmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIGZyb250VGV4dHVyZUlkKSk7Ci0gICAgICAgICAgICAgICAg
RVhQRUNUX0NBTEwoaW1wbE1vY2ssIGJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIsIGZib0lkKSk7Ci0gICAgICAgICAgICAgICAgRVhQRUNUX0NBTEwoaW1wbE1v
Y2ssIGZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
R3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgYmFja1RleHR1cmVJZCwgMCkpOwotICAgICAgICAgICAgICAgIEVYUEVDVF9D
QUxMKGltcGxNb2NrLCBjb3B5VGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgMCwgMCwgMCwgMCwgMCwgMzAwLCAxNTApKTsKLSAgICAgICAgICAgICAgICBFWFBFQ1Rf
Q0FMTChpbXBsTW9jaywgYmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUiwgMCkpOwotCi0gICAgICAgICAgICAgICAgLy8gVGVhcmRvd24gQ2FudmFzMkRMYXllckNo
cm9taXVtLgotICAgICAgICAgICAgICAgIEVYUEVDVF9DQUxMKG1haW5Nb2NrLCBkZWxldGVGcmFt
ZWJ1ZmZlcihmYm9JZCkpOworICAgICAgICAgICAgICAgIEVYUEVDVF9DQUxMKGNvcGllck1vY2ss
IGNvcHlUZXh0dXJlKGltcGxDb250ZXh0LmdldCgpLCBiYWNrVGV4dHVyZUlkLCBmcm9udFRleHR1
cmVJZCwgc2l6ZSkpOwogCiAgICAgICAgICAgICAgICAgLy8gVGVhcmRvd24gVGV4dHVyZU1hbmFn
ZXIuCiAgICAgICAgICAgICAgICAgRVhQRUNUX0NBTEwoYWxsb2NhdG9yTW9jaywgZGVsZXRlVGV4
dHVyZShmcm9udFRleHR1cmVJZCwgc2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGV4dHVyZUNvcGllclRlc3Qu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UZXh0dXJlQ29waWVyVGVzdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMTcxNzNjMGE1YjM3ZDFiOGViMDhkNmNiMTgyYWQxZDA3NGU1NDg2ZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGV4dHVyZUNvcGll
clRlc3QuY3BwCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIlRleHR1cmVDb3BpZXIuaCIKKworI2luY2x1ZGUgIkZha2VXZWJH
cmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5o
IgorCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgdGVzdGluZzo6SW5TZXF1ZW5jZTsKK3VzaW5nIHRl
c3Rpbmc6OlRlc3Q7Cit1c2luZyB0ZXN0aW5nOjpfOworCituYW1lc3BhY2UgeworCitjbGFzcyBN
b2NrQ29udGV4dCA6IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgeworcHVibGljOgor
ICAgIE1PQ0tfTUVUSE9EMihiaW5kRnJhbWVidWZmZXIsIHZvaWQoV0dDM0RlbnVtLCBXZWJHTElk
KSk7CisgICAgTU9DS19NRVRIT0QzKHRleFBhcmFtZXRlcmksIHZvaWQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkpOworCisgICAgTU9DS19NRVRIT0QzKGRy
YXdBcnJheXMsIHZvaWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNv
dW50KSk7Cit9OworCitURVNUKFRleHR1cmVDb3BpZXJUZXN0LCB0ZXN0RHJhd0FycmF5c0NvcHkp
Cit7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7CisgICAgUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpj
cmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgTW9ja0NvbnRl
eHQoKSksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7Cisg
ICAgTW9ja0NvbnRleHQmIG1vY2tDb250ZXh0ID0gKnN0YXRpY19jYXN0PE1vY2tDb250ZXh0Kj4o
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoY29u
dGV4dC5nZXQoKSkpOworCisgICAgeworICAgICAgICBJblNlcXVlbmNlIHNlcXVlbmNlOworCisg
ICAgICAgIC8vIEhlcmUgd2UgY2hlY2sganVzdCBzb21lIGVzc2VudGlhbCBwcm9wZXJ0aWVzIG9m
IGNvcHlUZXh0dXJlKCkgdG8gYXZvaWQgbWlycm9yaW5nIHRoZSBmdWxsIGltcGxlbWVudGF0aW9u
LgorICAgICAgICBFWFBFQ1RfQ0FMTChtb2NrQ29udGV4dCwgYmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgXykpOworCisgICAgICAgIC8vIE1ha2Ugc3VyZSBs
aW5lYXIgZmlsdGVyaW5nIGlzIGRpc2FibGVkIGR1cmluZyB0aGUgY29weS4KKyAgICAgICAgRVhQ
RUNUX0NBTEwobW9ja0NvbnRleHQsIHRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNz
Q29udGV4dDNEOjpORUFSRVNUKSk7CisgICAgICAgIEVYUEVDVF9DQUxMKG1vY2tDb250ZXh0LCB0
ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVCkpOwor
CisgICAgICAgIEVYUEVDVF9DQUxMKG1vY2tDb250ZXh0LCBkcmF3QXJyYXlzKF8sIF8sIF8pKTsK
KworICAgICAgICAvLyBMaW5lYXIgZmlsdGVyaW5nIHNob3VsZCBiZSByZXN0b3JlZC4KKyAgICAg
ICAgRVhQRUNUX0NBTEwobW9ja0NvbnRleHQsIHRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKyAgICAgICAgRVhQRUNUX0NBTEwobW9ja0NvbnRl
eHQsIHRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIp
KTsKKworICAgICAgICAvLyBEZWZhdWx0IGZyYW1lYnVmZmVyIHNob3VsZCBiZSByZXN0b3JlZAor
ICAgICAgICBFWFBFQ1RfQ0FMTChtb2NrQ29udGV4dCwgYmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCkpOworICAgIH0KKworICAgIGludCBzb3VyY2VUZXh0
dXJlSWQgPSAxOworICAgIGludCBkZXN0VGV4dHVyZUlkID0gMjsKKyAgICBJbnRTaXplIHNpemUo
MjU2LCAxMjgpOworICAgIE93blB0cjxBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXI+IGNvcGllcihB
Y2NlbGVyYXRlZFRleHR1cmVDb3BpZXI6OmNyZWF0ZShjb250ZXh0KSk7CisgICAgY29waWVyLT5j
b3B5VGV4dHVyZShjb250ZXh0LmdldCgpLCBzb3VyY2VUZXh0dXJlSWQsIGRlc3RUZXh0dXJlSWQs
IHNpemUpOworfQorCit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggYzE5YWM0NmQ2
NDY3MWZmNGEwNTNlYmE0M2MxMjY5ZGE4ZDU4ZjljZC4uNDdmYzg3MGJmOTgwZjQyZTM2ODBiYzdj
ZTAyZDllZGJjNTYwNjNhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5j
bHVkZSAiRmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudC5oIgogI2luY2x1ZGUgIkxheWVyVGV4dHVy
ZVVwZGF0ZXIuaCIKICNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJUZXh0dXJlQ29waWVy
LmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJDb21wb3NpdG9y
LmgiCiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIiAvLyBGb3IgRGVidWdTY29w
ZWRTZXRJbXBsVGhyZWFkCkBAIC03NSw2ICs3NiwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGRlbGV0ZVRleHR1cmUodW5zaWduZWQsIGNvbnN0IEludFNpemUmLCBHQzNEZW51bSkgeyB9
CiB9OwogCitjbGFzcyBGYWtlVGV4dHVyZUNvcGllciA6IHB1YmxpYyBUZXh0dXJlQ29waWVyIHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgY29weVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Qq
LCB1bnNpZ25lZCwgdW5zaWduZWQsIGNvbnN0IEludFNpemUmKSB7IH0KK307CisKIGNsYXNzIEZh
a2VUaWxlZExheWVyQ2hyb21pdW07CiAKIGNsYXNzIEZha2VMYXllclRleHR1cmVVcGRhdGVyIDog
cHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXIgewpAQCAtMjQzLDYgKzI0OSwyMyBAQCB2b2lkIEZh
a2VMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QsIGNvbnN0CiAgICAgKnJlc3VsdGluZ09wYXF1ZVJlY3QgPSBtX29wYXF1ZVBhaW50
UmVjdDsKIH0KIAorY2xhc3MgRmFrZUNDVGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMgQ0NUZXh0dXJl
VXBkYXRlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgRmFrZUNDVGV4dHVyZVVwZGF0ZXIoKQor
ICAgICAgICA6IENDVGV4dHVyZVVwZGF0ZXIoJm1fdGV4dHVyZUFsbG9jYXRvciwgJm1fdGV4dHVy
ZUNvcGllcikKKyAgICB7CisgICAgfQorCisgICAgRmFrZVRleHR1cmVBbGxvY2F0b3ImIHRleHR1
cmVBbGxvY2F0b3IoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdGV4dHVyZUFsbG9jYXRvcjsK
KyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciBtX3RleHR1cmVB
bGxvY2F0b3I7CisgICAgRmFrZVRleHR1cmVDb3BpZXIgbV90ZXh0dXJlQ29waWVyOworfTsKKwog
VEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGlydHlUaWxlcykKIHsKICAgICBPd25Q
dHI8VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0
ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOwpAQCAtMjUwLDggKzI3Myw3IEBAIFRF
U1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaERpcnR5VGlsZXMpCiAgICAgRGVidWdTY29w
ZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJ
bXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CiAK
LSAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9yOwotICAgIENDVGV4dHVy
ZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvcik7CisgICAgRmFrZUNDVGV4dHVyZVVw
ZGF0ZXIgdXBkYXRlcjsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhp
cyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgogICAgIGxheWVyLT5zZXRC
b3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwpAQCAtMjg2LDggKzMwOCw3IEBAIFRFU1QoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgcHVzaE9jY2x1ZGVkRGlydHlUaWxlcykKICAgICBPd25QdHI8RmFr
ZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXll
ckltcGwoMCkpKTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1ZGVkOwogCi0gICAg
RmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRh
dGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworICAgIEZha2VDQ1RleHR1cmVVcGRhdGVy
IHVwZGF0ZXI7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNvIHRoaXMgaW52
YWxpZGF0ZXMgYW5kIHRoZW4gcGFpbnRzIHR3byB0aWxlcy4KICAgICBsYXllci0+c2V0Qm91bmRz
KEludFNpemUoMTAwLCAyMDApKTsKQEAgLTMzMiw4ICszNTMsNyBAQCBURVNUKFRpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QsIHB1c2hEZWxldGVkVGlsZXMpCiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhy
ZWFkIGltcGxUaHJlYWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllcklt
cGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CiAKLSAgICBGYWtlVGV4
dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9yOwotICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBk
YXRlcigmdGV4dHVyZUFsbG9jYXRvcik7CisgICAgRmFrZUNDVGV4dHVyZVVwZGF0ZXIgdXBkYXRl
cjsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlkYXRl
cyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6
ZSgxMDAsIDIwMCkpOwpAQCAtMzQ2LDcgKzM2Niw3IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVt
VGVzdCwgcHVzaERlbGV0ZWRUaWxlcykKICAgICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1Rp
bGVBdCgwLCAwKSk7CiAgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMSkp
OwogCi0gICAgdGV4dHVyZU1hbmFnZXItPmV2aWN0QW5kRGVsZXRlQWxsVGV4dHVyZXMoJnRleHR1
cmVBbGxvY2F0b3IpOworICAgIHRleHR1cmVNYW5hZ2VyLT5ldmljdEFuZERlbGV0ZUFsbFRleHR1
cmVzKCZ1cGRhdGVyLnRleHR1cmVBbGxvY2F0b3IoKSk7CiAgICAgdGV4dHVyZU1hbmFnZXItPnNl
dE1heE1lbW9yeUxpbWl0Qnl0ZXMoNCoxMDI0KjEwMjQpOwogICAgIHRleHR1cmVNYW5hZ2VyLT5z
ZXRQcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKDQqMTAyNCoxMDI0KTsKIApAQCAtMzc0LDggKzM5
NCw3IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaElkbGVQYWludFRpbGVzKQog
ICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtl
Q0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVy
SW1wbCgwKSkpOwogCi0gICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsK
LSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworICAgIEZh
a2VDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXI7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEw
MHgxMDAuIFNldHVwIDV4NSB0aWxlcyB3aXRoIG9uZSB2aXNpYmxlIHRpbGUgaW4gdGhlIGNlbnRl
ci4KICAgICBJbnRTaXplIGNvbnRlbnRCb3VuZHMoNTAwLCA1MDApOwpAQCAtNDMzLDggKzQ1Miw3
IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzQWZ0ZXJJZGxlUGFpbnRG
YWlsZWQpCiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyMiA9IGFkb3B0
UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAg
ICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwyKGFkb3B0UHRyKG5ldyBG
YWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwogCi0gICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4
dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxv
Y2F0b3IpOworICAgIEZha2VDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXI7CiAKICAgICAvLyBGb3Ig
dGhpcyB0ZXN0IHdlIGhhdmUgdHdvIGxheWVycy4gbGF5ZXIxIGV4aGF1c3RzIG1vc3QgdGV4dHVy
ZSBtZW1vcnksIGxlYXZpbmcgcm9vbSBmb3IgMiBtb3JlIHRpbGVzIGZyb20KICAgICAvLyBsYXll
cjIsIGJ1dCBub3QgYWxsIHRocmVlIHRpbGVzLiBGaXJzdCB3ZSBwYWludCBsYXllcjEsIGFuZCBv
bmUgdGlsZSBmcm9tIGxheWVyMi4gVGhlbiB3aGVuIHdlIGlkbGUgcGFpbnQKQEAgLTUxNCw4ICs1
MzIsNyBAQCBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hJZGxlUGFpbnRlZE9jY2x1
ZGVkVGlsZXMpCiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRv
cHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CiAgICAgVGVzdENDT2NjbHVzaW9u
VHJhY2tlciBvY2NsdWRlZDsKIAotICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIHRleHR1cmVBbGxv
Y2F0b3I7Ci0gICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yKTsK
KyAgICBGYWtlQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyOwogCiAgICAgLy8gVGhlIHRpbGUgc2l6
ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIG9uZSBvY2NsdWRlZCB0aWxlLCBjdWxs
cyBpdCBkdXJpbmcgcGFpbnQsIGJ1dCBwcmVwYWludHMgaXQuCiAgICAgb2NjbHVkZWQuc2V0T2Nj
bHVzaW9uKEludFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKQEAgLTU0MCw4ICs1NTcsNyBAQCBURVNU
KFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc01hcmtlZERpcnR5RHVyaW5nUGFpbnQp
CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgT3duUHRyPEZh
a2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5
ZXJJbXBsKDApKSk7CiAKLSAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9y
OwotICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvcik7CisgICAg
RmFrZUNDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcjsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMg
MTAweDEwMCwgc28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgog
ICAgIC8vIEhvd2V2ZXIsIGR1cmluZyB0aGUgcGFpbnQsIHdlIGludmFsaWRhdGUgb25lIG9mIHRo
ZSB0aWxlcy4gVGhpcyBzaG91bGQKQEAgLTU2Nyw4ICs1ODMsNyBAQCBURVNUKFRpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QsIHB1c2hUaWxlc0xheWVyTWFya2VkRGlydHlEdXJpbmdQYWludE9uTmV4dExh
eWVyKQogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXIxSW1wbChhZG9wdFB0
cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRM
YXllckltcGw+IGxheWVyMkltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDAp
KSk7CiAKLSAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9yOwotICAgIEND
VGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvcik7CisgICAgRmFrZUNDVGV4
dHVyZVVwZGF0ZXIgdXBkYXRlcjsKIAogICAgIGxheWVyMS0+c2V0Qm91bmRzKEludFNpemUoMTAw
LCAyMDApKTsKICAgICBsYXllcjEtPmludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAy
MDApKTsKQEAgLTYwMyw4ICs2MTgsNyBAQCBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1
c2hUaWxlc0xheWVyTWFya2VkRGlydHlEdXJpbmdQYWludE9uUHJldmlvdXNMYXllcgogICAgIE93
blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXIxSW1wbChhZG9wdFB0cihuZXcgRmFrZUND
VGlsZWRMYXllckltcGwoMCkpKTsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxh
eWVyMkltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CiAKLSAgICBG
YWtlVGV4dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9yOwotICAgIENDVGV4dHVyZVVwZGF0
ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvcik7CisgICAgRmFrZUNDVGV4dHVyZVVwZGF0ZXIg
dXBkYXRlcjsKIAogICAgIGxheWVyMS0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAyMDApKTsKICAg
ICBsYXllcjEtPmludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKQEAgLTY0
NSw4ICs2NTksNyBAQCBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE91dE9m
TWVtb3J5KQogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93
blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NU
aWxlZExheWVySW1wbCgwKSkpOwogCi0gICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFs
bG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3Ip
OworICAgIEZha2VDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXI7CiAKICAgICAvLyBUaGlzIGludmFs
aWRhdGVzIDkgdGlsZXMgYW5kIHRoZW4gcGFpbnRzIG9uZSB2aXNpYmxlIHRpbGUuCiAgICAgbGF5
ZXItPnNldEJvdW5kcyhjb250ZW50Qm91bmRzKTsKQEAgLTY4MSw4ICs2OTQsNyBAQCBURVNUKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludFplcm9TaXplZExheWVyKQogICAgIERlYnVn
U2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExh
eWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkp
OwogCi0gICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1Rl
eHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworICAgIEZha2VDQ1RleHR1
cmVVcGRhdGVyIHVwZGF0ZXI7CiAKICAgICAvLyBUaGUgbGF5ZXIncyBib3VuZHMgYXJlIGVtcHR5
LgogICAgIEludFJlY3QgY29udGVudFJlY3Q7CkBAIC03MjQsOCArNzM2LDcgQEAgVEVTVChUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRaZXJvU2l6ZWRBbmltYXRpbmdMYXllcikKICAg
ICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFrZUND
VGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllcklt
cGwoMCkpKTsKIAotICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIHRleHR1cmVBbGxvY2F0b3I7Ci0g
ICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yKTsKKyAgICBGYWtl
Q0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyOwogCiAgICAgLy8gUHJldGVuZCB0aGUgbGF5ZXIgaXMg
YW5pbWF0aW5nLgogICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3JtSXNBbmltYXRpbmcodHJ1ZSk7
CkBAIC03NzMsOCArNzg0LDcgQEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFp
bnROb25WaXNpYmxlTGF5ZXJzKQogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhy
ZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRy
KG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwogCi0gICAgRmFrZVRleHR1cmVBbGxvY2F0
b3IgdGV4dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1
cmVBbGxvY2F0b3IpOworICAgIEZha2VDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXI7CiAKICAgICAv
LyBJbnZhbGlkYXRlIHRoZSBsYXllciBidXQgbWFrZSBub25lIG9mIGl0IHZpc2libGUsIHNvIG5v
dGhpbmcgcGFpbnRzLgogICAgIEludFJlY3QgdmlzaWJsZVJlY3Q7CkBAIC04MjgsOCArODM4LDcg
QEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnROb25WaXNpYmxlQW5pbWF0
aW5nTGF5ZXJzKQogICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBU
ZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDgwMDAqODAwMCo4LCA4MDAwKjgwMDAqNCwgMTAyNCk7CiAg
ICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAKLSAgICBGYWtlVGV4dHVy
ZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9yOwotICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRl
cigmdGV4dHVyZUFsbG9jYXRvcik7CisgICAgRmFrZUNDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcjsK
IAogICAgIGludCB0aWxlV2lkdGggPSBGYWtlVGlsZWRMYXllckNocm9taXVtOjp0aWxlU2l6ZSgp
LndpZHRoKCk7CiAgICAgaW50IHRpbGVIZWlnaHQgPSBGYWtlVGlsZWRMYXllckNocm9taXVtOjp0
aWxlU2l6ZSgpLmhlaWdodCgpOwpAQCAtODg2LDggKzg5NSw3IEBAIFRFU1QoVGlsZWRMYXllckNo
cm9taXVtVGVzdCwgaW52YWxpZGF0ZUZyb21QcmVwYXJlKQogICAgIERlYnVnU2NvcGVkU2V0SW1w
bFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5
ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwogCi0gICAgRmFr
ZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRhdGVy
IHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworICAgIEZha2VDQ1RleHR1cmVVcGRhdGVyIHVw
ZGF0ZXI7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNvIHRoaXMgaW52YWxp
ZGF0ZXMgYW5kIHRoZW4gcGFpbnRzIHR3byB0aWxlcy4KICAgICBsYXllci0+c2V0Qm91bmRzKElu
dFNpemUoMTAwLCAyMDApKTsKQEAgLTkyOCw4ICs5MzYsNyBAQCBURVNUKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIHZlcmlmeVVwZGF0ZVJlY3RXaGVuQ29udGVudEJvdW5kc0FyZVNjYWxlZCkKICAg
ICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6
OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtl
VGlsZWRMYXllcldpdGhTY2FsZWRCb3VuZHM+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxl
ZExheWVyV2l0aFNjYWxlZEJvdW5kcyh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogCi0gICAgRmFr
ZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRhdGVy
IHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworICAgIEZha2VDQ1RleHR1cmVVcGRhdGVyIHVw
ZGF0ZXI7CiAKICAgICBJbnRSZWN0IGxheWVyQm91bmRzKDAsIDAsIDMwMCwgMjAwKTsKICAgICBJ
bnRSZWN0IGNvbnRlbnRCb3VuZHMoMCwgMCwgMjAwLCAyNTApOwpAQCAtOTY2LDggKzk3Myw3IEBA
IFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmVyaWZ5SW52YWxpZGF0aW9uV2hlbkNvbnRl
bnRzU2NhbGVDaGFuZ2VzKQogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFk
OwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5l
dyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOwogCi0gICAgRmFrZVRleHR1cmVBbGxvY2F0b3Ig
dGV4dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVB
bGxvY2F0b3IpOworICAgIEZha2VDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXI7CiAKICAgICAvLyBD
cmVhdGUgYSBsYXllciB3aXRoIG9uZSB0aWxlLgogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6
ZSgxMDAsIDEwMCkpOwpAQCAtMTAzNyw4ICsxMDQzLDcgQEAgVEVTVChUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCBza2lwc0RyYXdHZXRzUmVzZXQpCiAgICAgcm9vdExheWVyLT5pbnZhbGlkYXRlUmVj
dChjb250ZW50UmVjdCk7CiAgICAgY2hpbGRMYXllci0+aW52YWxpZGF0ZVJlY3QoY29udGVudFJl
Y3QpOwogCi0gICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKLSAgICBD
Q1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworICAgIEZha2VDQ1Rl
eHR1cmVVcGRhdGVyIHVwZGF0ZXI7CiAKICAgICBjY0xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXll
cihyb290TGF5ZXIpOwogICAgIGNjTGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKEludFNp
emUoMzAwLCAzMDApKTsKQEAgLTEwOTYsOCArMTEwMSw3IEBAIFRFU1QoVGlsZWRMYXllckNocm9t
aXVtVGVzdCwgcGFydGlhbFVwZGF0ZXMpCiAgICAgbGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9p
bnQoMTUwLCAxNTApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoY29udGVudFJlY3QpOwog
Ci0gICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKLSAgICBDQ1RleHR1
cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworICAgIEZha2VDQ1RleHR1cmVV
cGRhdGVyIHVwZGF0ZXI7CiAKICAgICBjY0xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihsYXll
cik7CiAgICAgY2NMYXllclRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSgzMDAsIDIw
MCkpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>