<?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>45069</bug_id>
          
          <creation_ts>2010-09-01 16:18:24 -0700</creation_ts>
          <short_desc>VideoLayerChromium uses GPU YUV to RGB color conversion</short_desc>
          <delta_ts>2010-09-27 17:43:33 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>45912</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Victoria Kirst">vrk</reporter>
          <assigned_to name="Victoria Kirst">vrk</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>hclam</cc>
    
    <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>scherkus</cc>
    
    <cc>tony</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>273093</commentid>
    <comment_count>0</comment_count>
    <who name="Victoria Kirst">vrk</who>
    <bug_when>2010-09-01 16:18:24 -0700</bug_when>
    <thetext>VideoLayerChromium uses GPU YUV to RGB color conversion</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273096</commentid>
    <comment_count>1</comment_count>
      <attachid>66298</attachid>
    <who name="Victoria Kirst">vrk</who>
    <bug_when>2010-09-01 16:19:57 -0700</bug_when>
    <thetext>Created attachment 66298
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273099</commentid>
    <comment_count>2</comment_count>
    <who name="Victoria Kirst">vrk</who>
    <bug_when>2010-09-01 16:25:18 -0700</bug_when>
    <thetext>Hi Vangelis!

Can you take a look at my code utilizing your changes to LayerRendererChromium? It no longer uses the GraphicsContext and instead gets frames from Chromium through the plumbing I created in the last few weeks.

One thing to note: I have only implemented cases for YV12 and RGBA frames, and actually I have not tested the implementation for RGBA frames as I believe we only encounter YV12 frames in the chromium code right now. But we will be using RGBA frames once hardware decode is working, and I wanted to give you an example of what the code looks like when there are multiple file formats implemented.

Thanks, and let me know whatever questions you have!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273100</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-01 16:26:21 -0700</bug_when>
    <thetext>Attachment 66298 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:300:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:311:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 2 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276324</commentid>
    <comment_count>4</comment_count>
      <attachid>66298</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-09-08 23:26:54 -0700</bug_when>
    <thetext>Comment on attachment 66298
Patch

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

Looks good!  A few comments inline.

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:90
&gt; +        &quot;  gl_FragColor = vec4(rgb, 1);                       \n&quot;
I think you still need to pass in an alpha value to the shader so that we can get respect the layer&apos;s opacity.

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:185
&gt; +    if (!frame)
Shouldn&apos;t the required texture size be the size of the frame rather than m_bounds?  m_bounds reflects the size that the layer will be displayed at which could be different than the frame size. You actually seem to ignore the requiredTextureSize value passed into the update*Contents method anyway.

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:215
&gt; +    glActiveTexture(GL_TEXTURE0);
If you remove the glActiveTexture calls from the update methods then you won&apos;t need to call this here either.

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:228
&gt; +            glDeleteTextures(1, &amp;m_vTextureId);
This could be somewhat optimized if you put all 3 texture values in an array and call glDeleteTextures(3, array).  Also, for good measure, maybe put glDeleteTextures within a GLC() macro?

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:241
&gt; +void VideoLayerChromium::createYUVTextures(VideoFrameChromium* frame, const IntSize&amp; requiredTextureSize,
requiredTextureSize isn&apos;t used in this method

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:246
&gt; +    GLC(glActiveTexture(GL_TEXTURE1));
I don&apos;t believe you need to call glActiveTexture here and below.

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:259
&gt; +void VideoLayerChromium::updateYUVTextures(VideoFrameChromium* frame, const IntRect&amp; updateRect)
Do you ever do partial frame updates or is the updateRect always the same as the size of the frame? I&apos;m wondering whether this parameter could be eliminated.

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:263
&gt; +    GLC(glActiveTexture(GL_TEXTURE1));
Same here:  glActiveTexture isn&apos;t necessary.

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:296
&gt; +void VideoLayerChromium::createTexture(unsigned textureId, const void* data, unsigned width, unsigned height, GLenum format)
Maybe better to name this method allocateTexture or initializeTexture as it doesn&apos;t really create a texture?

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:303
&gt; +void VideoLayerChromium::updateTexture(unsigned textureId, const void* data, unsigned xOffset, unsigned yOffset,
it might be more convenient to pass an IntRect here instead of 4 separate values

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:343
&gt; +    glActiveTexture(GL_TEXTURE0);
Maybe this call could be moved in the drawYUV method as drawRGB doesn&apos;t change the active texture.

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.h:49
&gt;      virtual void updateContents();
You should probably also define a destructor which calls glDeleteTexture on all the textures used by the layer, otherwise they will never be freed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278337</commentid>
    <comment_count>5</comment_count>
      <attachid>67440</attachid>
    <who name="Victoria Kirst">vrk</who>
    <bug_when>2010-09-13 11:32:19 -0700</bug_when>
    <thetext>Created attachment 67440
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278342</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-13 11:35:05 -0700</bug_when>
    <thetext>Attachment 67440 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:307:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:317:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 2 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278404</commentid>
    <comment_count>7</comment_count>
      <attachid>67456</attachid>
    <who name="Victoria Kirst">vrk</who>
    <bug_when>2010-09-13 12:34:09 -0700</bug_when>
    <thetext>Created attachment 67456
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278436</commentid>
    <comment_count>8</comment_count>
    <who name="Victoria Kirst">vrk</who>
    <bug_when>2010-09-13 13:29:03 -0700</bug_when>
    <thetext>Thanks so much for the helpful comments, Vangelis! I fixed my code to fit all of your suggestions.

I also made a small but important change: in my original patch, I had forgot to address the stride of the video frames! Unfortunately, it doesn&apos;t seem like there is an easy way to set the stride for the texture in GLES2... the way I&apos;ve seen this done in other GL code is by calling the command glPixelStorei(GL_UNPACK_ALIGNMENT, &lt;stride&gt;);, but GLES2 doesn&apos;t recognize GL_UNPACK_ALIGNMENT. So instead what I do is I allocate textures to the width of the stride, copy the entire data into the texture, then in the vertex shader I adjust the x component of the v_texCoord accordingly to clip off the padding between the edge of the frame and the stride. (Big thanks to Alpha for the idea!) I was planning to talk to Gregg and James to see if they could get the GL_UNPACK_ALIGNMENT parameter working, but if that&apos;s not possible, I think this is an okay solution.

Please take a look at my patch again and let me know what you think!

(In reply to comment #4)
&gt; &gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:90
&gt; I think you still need to pass in an alpha value to the shader so that we can get respect the layer&apos;s opacity.
Done.

&gt; &gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:185
&gt; Shouldn&apos;t the required texture size be the size of the frame rather than m_bounds?  m_bounds reflects the size that the layer will be displayed at which could be different than the frame size.
Done.

&gt; &gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:215
&gt; If you remove the glActiveTexture calls from the update methods then you won&apos;t need to call this here either.
Done (as well as other places mentioned).

&gt; &gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:228
&gt; This could be somewhat optimized if you put all 3 texture values in an array and call glDeleteTextures(3, array).  Also, for good measure, maybe put glDeleteTextures within a GLC() macro?
Done.

&gt; &gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:259
&gt; &gt; +void VideoLayerChromium::updateYUVTextures(VideoFrameChromium* frame, const IntRect&amp; updateRect)
&gt; Do you ever do partial frame updates or is the updateRect always the same as the size of the frame? I&apos;m wondering whether this parameter could be eliminated.
That is a good point! I don&apos;t think we ever do partial frame updates; the whole updateRect/dirtyFrame/etc stuff was mostly carryover from when I was copying most of my logic from LayerChromium. I modified the code (in here and other places as appropriate) to get rid of all the partial frame stuff.

&gt; &gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:296
&gt; Maybe better to name this method allocateTexture or initializeTexture as it doesn&apos;t really create a texture?
Done here and elsewhere.

&gt; &gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:303
&gt; &gt; +void VideoLayerChromium::updateTexture(unsigned textureId, const void* data, unsigned xOffset, unsigned yOffset,
&gt; it might be more convenient to pass an IntRect here instead of 4 separate values
I decided to pass an IntSize for the width and height since the xOffset/yOffset only makes sense for updating partial frames.

&gt; &gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:343
&gt; &gt; +    glActiveTexture(GL_TEXTURE0);
&gt; Maybe this call could be moved in the drawYUV method as drawRGB doesn&apos;t change the active texture.
Done. 

&gt; &gt; WebCore/platform/graphics/chromium/VideoLayerChromium.h:49
&gt; &gt;      virtual void updateContents();
&gt; You should probably also define a destructor which calls glDeleteTexture on all the textures used by the layer, otherwise they will never be freed.
Thanks for the catch! Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281752</commentid>
    <comment_count>9</comment_count>
      <attachid>67456</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-09-20 12:42:22 -0700</bug_when>
    <thetext>Comment on attachment 67456
Patch

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

Looks pretty good. Just a few inline comments.

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:103
&gt; +        &quot;  gl_FragColor = vec4(rgb, alpha);                   \n&quot;

The compositor assumes that layers use premultipled alpha so all the channels need to be multiplied by the alpha value.  You can look at ContentLayerChromium for an example.

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:113
&gt; +        &quot;  gl_FragColor = vec4(texColor.x, texColor.y, texColor.z, texColor.w); \n&quot;

Alpha here?

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:184
&gt; +    if (m_yuvTextures)

Here you should be testing if each individual texture is not 0 before trying to delete it.

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:209
&gt; +    IntSize requiredTextureSize(frame-&gt;stride(VideoFrameChromium::cYPlane), frame-&gt;height());

what about the case of an RGBA frame? Will this give you the right stride?

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:248
&gt; +            GLC(glDeleteTextures(3, static_cast&lt;const GLuint*&gt;(m_yuvTextures)));

Same as before.  You need to make sure that each individual texture id is not equal to zero before deleting.

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:267
&gt; +    IntSize uvDimensions(frame-&gt;stride(VideoFrameChromium::cUPlane), frame-&gt;height() / 2);

Does the integer division by 2 work ok for odd heights?

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:288
&gt; +    ASSERT(frame-&gt;stride(VideoFrameChromium::cYPlane) == m_allocatedTextureSize.width());

VideoFrameChromium::cRGBPlane ?

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:294
&gt; +            glDeleteTextures(1, &amp;m_rgbaTexture);

If you already have a texture ID you can just call allocateTexture() with it and adjust it to its new size.  Is there a reason why you delete it and re-create it?

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:295
&gt; +        m_rgbaTexture = layerRenderer()-&gt;createLayerTexture();

I wonder if the logic here could be simplified by making allocateTexture do only the allocation (passing a NULL pointer for data) and then always calling the updateTexture. That way, if in the future updateTexture() does something different, you won&apos;t have to change how allocateTexture also sends its bits to the texture.

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:317
&gt; +        ASSERT(glGetError() == GL_NO_ERROR);

Any reason why you&apos;re not using the GLC() macro for these two gl calls but rather explicitly call glGetError() ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281860</commentid>
    <comment_count>10</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-20 15:32:23 -0700</bug_when>
    <thetext>Apologies, but https://bugs.webkit.org/show_bug.cgi?id=45912 will require this patch to be regenerated. The transformation to use GraphicsContext3D rather than the command buffer client GL calls directly should be mechanical. Please let me know if you have any problems making the changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281910</commentid>
    <comment_count>11</comment_count>
      <attachid>67456</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-09-20 16:55:29 -0700</bug_when>
    <thetext>Comment on attachment 67456
Patch

One more thing that just occurred to me while looking at another bug:

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

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.h:88
&gt; +    ~VideoLayerChromium();

The destructor should be virtual.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285565</commentid>
    <comment_count>12</comment_count>
      <attachid>68932</attachid>
    <who name="Victoria Kirst">vrk</who>
    <bug_when>2010-09-27 10:48:29 -0700</bug_when>
    <thetext>Created attachment 68932
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285578</commentid>
    <comment_count>13</comment_count>
    <who name="Victoria Kirst">vrk</who>
    <bug_when>2010-09-27 10:56:20 -0700</bug_when>
    <thetext>Thanks for the review. I addressed all vangelis&apos;s comments and I also made the necessary adjustments to work with kbr&apos;s GraphicsContext3D changes. 

I also did a little bit of refactoring of my code to make things cleaner and more generalized. vangelis, I will send you an email briefly detailing these things in case they are unclear!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285711</commentid>
    <comment_count>14</comment_count>
      <attachid>68932</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-09-27 13:44:14 -0700</bug_when>
    <thetext>Comment on attachment 68932
Patch

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

Looking good.  Just a couple of small comments.

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:216
&gt; +        notImplemented();

Should you also be setting m_skipsDraw = true here?

&gt; WebKit/chromium/src/VideoFrameChromiumImpl.cpp:39
&gt; +const unsigned VideoFrameChromium::cMaxPlanes = 3;

Not sure if using the &quot;c&quot; prefix for constants is standard in WebKit.  Is it being used elsewhere too?

&gt; WebKit/chromium/src/VideoFrameChromiumImpl.cpp:121
&gt; +            return IntSize(stride(plane), height() / 2);

Does this work ok with both odd and even height values?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285771</commentid>
    <comment_count>15</comment_count>
      <attachid>68968</attachid>
    <who name="Victoria Kirst">vrk</who>
    <bug_when>2010-09-27 14:58:14 -0700</bug_when>
    <thetext>Created attachment 68968
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285781</commentid>
    <comment_count>16</comment_count>
    <who name="Victoria Kirst">vrk</who>
    <bug_when>2010-09-27 15:02:54 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; &gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:216
&gt; &gt; +        notImplemented();
&gt; 
&gt; Should you also be setting m_skipsDraw = true here?
Good catch, thanks! I should also be releasing the frame and returning from the function.

&gt; &gt; WebKit/chromium/src/VideoFrameChromiumImpl.cpp:39
&gt; &gt; +const unsigned VideoFrameChromium::cMaxPlanes = 3;
&gt; 
&gt; Not sure if using the &quot;c&quot; prefix for constants is standard in WebKit.  Is it being used elsewhere too?
I saw this here: https://cs.corp.google.com/p#chrome/trunk/src/third_party/WebKit/WebCore/platform/text/UnicodeRange.h and here: https://cs.corp.google.com/p#chrome/trunk/src/third_party/WebKit/WebCore/page/FrameView.cpp
But on second look, it seems like *not* using the c-prefix is far more standard. I modified the constants to omit the prefix.


&gt; &gt; WebKit/chromium/src/VideoFrameChromiumImpl.cpp:121
&gt; &gt; +            return IntSize(stride(plane), height() / 2);
&gt; 
&gt; Does this work ok with both odd and even height values?
Yes, should be fine!

Thanks again!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285803</commentid>
    <comment_count>17</comment_count>
      <attachid>68968</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-27 15:28:57 -0700</bug_when>
    <thetext>Comment on attachment 68968
Patch

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

r- for nitpicks but overall looks good

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:44
&gt; +const float VideoLayerChromium::cYUV2RGB[9] = {

add a comment here indicating what these values are. if they are just PFM then note that

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:201
&gt; +    VideoFrameChromium* frame = 0;

Why not just declare this in the initialization 3 lines below?

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:202
&gt; +    bool needsAllocate = false;

this variable looks unused

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:270
&gt; +        if (planeTextureSize != IntSize() &amp;&amp; planeTextureSize != m_textureSizes[plane]) {

There are .isEmpty() and .isZero() functions on IntSize, please use one of those

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:294
&gt; +    } else
&gt; +        m_skipsDraw = true;

Can you leave a FIXME or notImplemented() here or something?  mapTexSubImage2D can fail in the normal course of operation and we should handle it.

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.h:89
&gt; +    explicit VideoLayerChromium(GraphicsLayerChromium* owner, VideoFrameProvider* provider);

nit: no explicit for a two-argument constructor, don&apos;t name the provider argument</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285848</commentid>
    <comment_count>18</comment_count>
      <attachid>68985</attachid>
    <who name="Victoria Kirst">vrk</who>
    <bug_when>2010-09-27 16:08:26 -0700</bug_when>
    <thetext>Created attachment 68985
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285853</commentid>
    <comment_count>19</comment_count>
    <who name="Victoria Kirst">vrk</who>
    <bug_when>2010-09-27 16:11:23 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 68968 [details])

Thanks James! Fixed all that you suggested, and also changed &quot;cYUV2RGB&quot; to &quot;yuv2RGB&quot; to match the style of the other constants.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285859</commentid>
    <comment_count>20</comment_count>
      <attachid>68985</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-27 16:16:17 -0700</bug_when>
    <thetext>Comment on attachment 68985
Patch

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

R=me

&gt; WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:66
&gt; +    , m_yuvWidthScaleFactorLocation(0)
&gt; +    , m_rgbaShaderMatrixLocation(0)
&gt; +    , m_rgbaWidthScaleFactorLocation(0)
&gt; +    , m_ccMatrixLocation(0)
&gt; +    , m_yTextureLocation(0)
&gt; +    , m_uTextureLocation(0)
&gt; +    , m_vTextureLocation(0)
&gt; +    , m_rgbaTextureLocation(0)
&gt; +    , m_yuvAlphaLocation(0)
&gt; +    , m_rgbaAlphaLocation(0)

nit: should these initialize to -1?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285894</commentid>
    <comment_count>21</comment_count>
      <attachid>68985</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-27 16:48:03 -0700</bug_when>
    <thetext>Comment on attachment 68985
Patch

Clearing flags on attachment: 68985

Committed r68447: &lt;http://trac.webkit.org/changeset/68447&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285895</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-27 16:48:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285960</commentid>
    <comment_count>23</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-09-27 17:43:33 -0700</bug_when>
    <thetext>This seems to have broken the Chromium Mac build on the canary bots (just compiler warnings):
http://build.chromium.org/buildbot/waterfall.fyi/builders/Webkit%20Mac%20(webkit.org)/builds/25113/steps/compile/logs/stdio

distcc[35339] ERROR: compile /b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.cpp on codf42.jail/10,lzo,cpp failed
distcc[35339] (dcc_build_somewhere) Warning: remote compilation of &apos;/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.cpp&apos; failed, retrying locally
distcc[35339] Warning: failed to distribute /b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.cpp to codf42.jail/10,lzo,cpp, running locally instead
cc1plus: warnings being treated as errors
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.h: In constructor &apos;WebCore::VideoLayerChromium::SharedValues::SharedValues(WebCore::GraphicsContext3D*)&apos;:
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.h:76:warning: &apos;WebCore::VideoLayerChromium::SharedValues::m_yuvWidthScaleFactorLocation&apos; will be initialized after
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.h:75:warning:   &apos;int WebCore::VideoLayerChromium::SharedValues::m_rgbaShaderMatrixLocation&apos;
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.cpp:52:warning:   when initialized here
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.h:82:warning: &apos;WebCore::VideoLayerChromium::SharedValues::m_ccMatrixLocation&apos; will be initialized after
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.h:78:warning:   &apos;int WebCore::VideoLayerChromium::SharedValues::m_yTextureLocation&apos;
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.cpp:52:warning:   when initialized here
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.h: In constructor &apos;WebCore::VideoLayerChromium::VideoLayerChromium(WebCore::GraphicsLayerChromium*, WebCore::VideoFrameProvider*)&apos;:
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.h:103:warning: &apos;WebCore::VideoLayerChromium::m_skipsDraw&apos; will be initialized after
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.h:101:warning:   &apos;WebCore::VideoFrameChromium::Format WebCore::VideoLayerChromium::m_frameFormat&apos;
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.cpp:173:warning:   when initialized here
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.cpp:179:warning: comparison between signed and unsigned integer expressions
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.cpp: In destructor &apos;virtual WebCore::VideoLayerChromium::~VideoLayerChromium()&apos;:
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.cpp:189:warning: comparison between signed and unsigned integer expressions
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.cpp: In member function &apos;virtual void WebCore::VideoLayerChromium::updateContents()&apos;:
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.cpp:232:warning: comparison between signed and unsigned integer expressions
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.cpp: In static member function &apos;static unsigned int WebCore::VideoLayerChromium::determineTextureFormat(WebCore::VideoFrameChromium*)&apos;:
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.cpp:244:warning: enumeration value &apos;Invalid&apos; not handled in switch
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.cpp:244:warning: enumeration value &apos;RGB555&apos; not handled in switch
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.cpp:244:warning: enumeration value &apos;RGB565&apos; not handled in switch
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.cpp:244:warning: enumeration value &apos;RGB24&apos; not handled in switch
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.cpp:244:warning: enumeration value &apos;RGB32&apos; not handled in switch
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.cpp:244:warning: enumeration value &apos;YV16&apos; not handled in switch
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.cpp:244:warning: enumeration value &apos;NV12&apos; not handled in switch
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.cpp:244:warning: enumeration value &apos;Empty&apos; not handled in switch
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.cpp:244:warning: enumeration value &apos;ASCII&apos; not handled in switch
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.cpp: In member function &apos;bool WebCore::VideoLayerChromium::allocateTexturesIfNeeded(WebCore::GraphicsContext3D*, WebCore::VideoFrameChromium*, unsigned int)&apos;:
/b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.cpp:258:warning: comparison between signed and unsigned integer expressions
distcc[35339] ERROR: compile /b/slave/webkit-rel-mac-webkit-org/build/src/third_party/WebKit/WebCore/WebCore.gyp/../platform/graphics/chromium/VideoLayerChromium.cpp on localhost failed</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66298</attachid>
            <date>2010-09-01 16:19:57 -0700</date>
            <delta_ts>2010-09-13 11:32:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45069-20100901161956.patch</filename>
            <type>text/plain</type>
            <size>29210</size>
            <attacher name="Victoria Kirst">vrk</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MjNlZWU1OWFjYTVkNWQ3MjE1NDkwMzdiMzdiOWQ4Nzk1YmQ0NjE2MC4uZWMyODQzYmI2OTUyYmQ4
MjY5ZGNmNjZlOTI5ZDg0MDdmN2IzNTBjMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NiBAQAorMjAxMC0wOS0wMSAgVmlj
dG9yaWEgS2lyc3QgIDx2cmtAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNb2RpZmllcyBWaWRlb0xheWVyQ2hyb21pdW0gdG8gZG8g
WVVWIHRvIFJHQiBjb2xvciBjb252ZXJzaW9uIGluIHRoZQorICAgICAgICBHUFUuIEFsc28gYWRk
cyBzdXBwb3J0IGZvciBSR0JBIHZpZGVvIGZyYW1lIGZvcm1hdHMsIHRob3VnaCB0aGlzIGNvZGUK
KyAgICAgICAgcGF0aCBpcyBjdXJyZW50bHkgbmV2ZXIgcnVuIGJlY2F1c2UgdGhlIHZpZGVvIGZy
YW1lcyBhcmUgaW4gWVYxMgorICAgICAgICBmb3JtYXQuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTA2OQorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZGVv
TGF5ZXJTaGFyZWRWYWx1ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hy
b21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlZp
ZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp+U2hhcmVkVmFsdWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6VmlkZW9MYXllckNocm9taXVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVZVVZDb250ZW50cyk6CisgICAg
ICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OmNyZWF0ZVlVVlRleHR1cmVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlWVVWVGV4dHVyZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVSR0JBQ29udGVudHMp
OgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzQ29tcGxl
dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6ZHJhdyk6CisgICAg
ICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OmRyYXdZVVYpOgorICAgICAgICAoV2Vi
Q29yZTo6VmlkZW9MYXllckNocm9taXVtOjpkcmF3UkdCQSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3Jl
OjpWaWRlb0xheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpW
aWRlb0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6eXV2U2hhZGVyUHJvZ3JhbSk6CisgICAg
ICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6cmdiYVNoYWRl
clByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjpTaGFyZWRW
YWx1ZXM6Onl1dlNoYWRlck1hdHJpeExvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVv
TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpyZ2JhU2hhZGVyTWF0cml4TG9jYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6OnlUZXh0
dXJlTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjpTaGFy
ZWRWYWx1ZXM6OnVUZXh0dXJlTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXll
ckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6OnZUZXh0dXJlTG9jYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6VmlkZW9MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6OnJnYmFUZXh0dXJlTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6
OmNjTWF0cml4TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVt
OjpTaGFyZWRWYWx1ZXM6OmluaXRpYWxpemVkKToKKwogMjAxMC0wOC0zMSAgSmVyIE5vYmxlICA8
amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCA1MDMzOGQyZDVmNzMyNGU1YTExOWM1MDkxOTBk
ZmVmODY5OGIxNzY5Li4wODQ5OWZkZTQzN2Y5NTE0M2NkZmExZjRkYjA3OTMxMGNhZGM5ZDE2IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC02NzAsNyArNjcwLDggQEAgYm9vbCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkKICAgICBtX2xheWVyU2hh
cmVkVmFsdWVzID0gYWRvcHRQdHIobmV3IExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcygpKTsK
ICAgICBtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlcyA9IGFkb3B0UHRyKG5ldyBDb250ZW50TGF5
ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKCkpOwogICAgIG1fY2FudmFzTGF5ZXJTaGFyZWRWYWx1
ZXMgPSBhZG9wdFB0cihuZXcgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKCkpOwot
ICAgIGlmICghbV9sYXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSB8fCAhbV9jb250ZW50
TGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwgIW1fY2FudmFzTGF5ZXJTaGFyZWRW
YWx1ZXMtPmluaXRpYWxpemVkKCkpIHsKKyAgICBtX3ZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXMgPSBh
ZG9wdFB0cihuZXcgVmlkZW9MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMoKSk7CisgICAgaWYg
KCFtX2xheWVyU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpIHx8ICFtX2NvbnRlbnRMYXllclNo
YXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSB8fCAhbV9jYW52YXNMYXllclNoYXJlZFZhbHVlcy0+
aW5pdGlhbGl6ZWQoKSB8fCAhbV92aWRlb0xheWVyU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgp
KSB7CiAgICAgICAgIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CkBAIC02ODUsNiArNjg2LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmNsZWFudXBTaGFyZWRPYmplY3RzKCkKICAgICBtX2xheWVyU2hhcmVkVmFsdWVzLmNsZWFyKCk7
CiAgICAgbV9jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMuY2xlYXIoKTsKICAgICBtX2NhbnZhc0xh
eWVyU2hhcmVkVmFsdWVzLmNsZWFyKCk7CisgICAgbV92aWRlb0xheWVyU2hhcmVkVmFsdWVzLmNs
ZWFyKCk7CiAKICAgICBpZiAobV9zY3JvbGxTaGFkZXJQcm9ncmFtKSB7CiAgICAgICAgIEdMQyhn
bERlbGV0ZVByb2dyYW0obV9zY3JvbGxTaGFkZXJQcm9ncmFtKSk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aAppbmRleCA4ZjQ0YWZlYmQwYTJjN2I0NzVkMDRiYTQ4NzIzZjFjZGM1NDU1MDkxLi43NGFhNjYx
ODRkOWJiN2QwZTI4ODhmMTkxNzkxM2EwZTBjZDg2ODhiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgK
QEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5ZXJD
aHJvbWl1bS5oIgogI2luY2x1ZGUgIlNrQml0bWFwLmgiCisjaW5jbHVkZSAiVmlkZW9MYXllckNo
cm9taXVtLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtODksNiArOTAsNyBAQCBw
dWJsaWM6CiAgICAgY29uc3QgTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiBsYXllclNoYXJl
ZFZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJTaGFyZWRWYWx1ZXMuZ2V0KCk7IH0KICAg
ICBjb25zdCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiBjb250ZW50TGF5ZXJT
aGFyZWRWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlcy5n
ZXQoKTsgfQogICAgIGNvbnN0IENhbnZhc0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyogY2Fu
dmFzTGF5ZXJTaGFyZWRWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX2NhbnZhc0xheWVyU2hhcmVk
VmFsdWVzLmdldCgpOyB9CisgICAgY29uc3QgVmlkZW9MYXllckNocm9taXVtOjpTaGFyZWRWYWx1
ZXMqIHZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvTGF5ZXJT
aGFyZWRWYWx1ZXMuZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZUxheWVyc1Jl
Y3Vyc2l2ZShMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHBhcmVudE1hdHJpeCwgZmxvYXQgb3BhY2l0eSk7CkBAIC0xNTIsNiArMTU0LDcgQEAgcHJpdmF0
ZToKICAgICBPd25QdHI8TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzPiBtX2xheWVyU2hhcmVk
VmFsdWVzOwogICAgIE93blB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzPiBt
X2NvbnRlbnRMYXllclNoYXJlZFZhbHVlczsKICAgICBPd25QdHI8Q2FudmFzTGF5ZXJDaHJvbWl1
bTo6U2hhcmVkVmFsdWVzPiBtX2NhbnZhc0xheWVyU2hhcmVkVmFsdWVzOworICAgIE93blB0cjxW
aWRlb0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcz4gbV92aWRlb0xheWVyU2hhcmVkVmFsdWVz
OwogCiAgICAgT3duUHRyPEdMRVMyQ29udGV4dD4gbV9nbGVzMkNvbnRleHQ7CiB9OwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21p
dW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hy
b21pdW0uY3BwCmluZGV4IDdmZjk4YjkzZmQwM2FkYTJkYTY4ZmM0ZDFmNmUyOWI1NzQwZmY0YmUu
LmYyYWQzZGViMDIyNDBiZWU2OGNlODQ0YTUyMWVkOGZhMmZiZjNhNzQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1
bS5jcHAKQEAgLTM1LDE5ICszNSwxMTIgQEAKIAogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgotI2luY2x1ZGUgInNraWEv
ZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgorI2luY2x1ZGUgIlZpZGVvRnJhbWVDaHJvbWl1bS5oIgor
I2luY2x1ZGUgIlZpZGVvRnJhbWVQcm92aWRlci5oIgogCiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+
CiAjZGVmaW5lIEdMX0dMRVhUX1BST1RPVFlQRVMKICNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4K
IAotI2lmIFBMQVRGT1JNKFNLSUEpCi0jaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY29uc3QgZmxvYXQgVmlkZW9MYXllckNocm9taXVtOjpjWVVWMlJHQls5XSA9IHsKKyAg
ICAxLmYsIDEuZiwgMS5mLAorICAgIDAuZiwgLS4zNDRmLCAxLjc3MmYsCisgICAgMS40MDNmLCAt
LjcxNGYsIDAuZiwKK307CisKK1ZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpTaGFy
ZWRWYWx1ZXMoKQorICAgIDogbV95dXZTaGFkZXJQcm9ncmFtKDApCisgICAgLCBtX3JnYmFTaGFk
ZXJQcm9ncmFtKDApCisgICAgLCBtX3l1dlNoYWRlck1hdHJpeExvY2F0aW9uKDApCisgICAgLCBt
X3JnYmFTaGFkZXJNYXRyaXhMb2NhdGlvbigwKQorICAgICwgbV9jY01hdHJpeExvY2F0aW9uKDAp
CisgICAgLCBtX3lUZXh0dXJlTG9jYXRpb24oMCkKKyAgICAsIG1fdVRleHR1cmVMb2NhdGlvbigw
KQorICAgICwgbV92VGV4dHVyZUxvY2F0aW9uKDApCisgICAgLCBtX3JnYmFUZXh0dXJlTG9jYXRp
b24oMCkKKyAgICAsIG1faW5pdGlhbGl6ZWQoZmFsc2UpCit7CisgICAgY2hhciB2ZXJ0ZXhTaGFk
ZXJTdHJpbmdbXSA9CisgICAgICAgICJhdHRyaWJ1dGUgdmVjNCBhX3Bvc2l0aW9uOyAgIFxuIgor
ICAgICAgICAiYXR0cmlidXRlIHZlYzIgYV90ZXhDb29yZDsgICBcbiIKKyAgICAgICAgInVuaWZv
cm0gbWF0NCBtYXRyaXg7ICAgICAgICAgXG4iCisgICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhD
b29yZDsgICAgIFxuIgorICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICBcbiIK
KyAgICAgICAgInsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICIgIGds
X1Bvc2l0aW9uID0gbWF0cml4ICogYV9wb3NpdGlvbjsgXG4iCisgICAgICAgICIgIHZfdGV4Q29v
cmQgPSBhX3RleENvb3JkOyAgIFxuIgorICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcbiI7CisKKyAgICBjaGFyIHl1dkZyYWdtZW50U2hhZGVyU3RyaW5nW10gPQorICAgICAg
ICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
biIKKyAgICAgICAgInByZWNpc2lvbiBtZWRpdW1wIGludDsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXG4iCisgICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgeV90ZXh0
dXJlOyAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInVuaWZvcm0gc2FtcGxl
cjJEIHVfdGV4dHVyZTsgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ1bmlm
b3JtIHNhbXBsZXIyRCB2X3RleHR1cmU7ICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAg
ICAgICAidW5pZm9ybSBtYXQzIGNjX21hdHJpeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcbiIKKyAgICAgICAgInZvaWQgbWFpbigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXG4iCisgICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAiICBmbG9hdCB5ID0gdGV4dHVyZTJE
KHlfdGV4dHVyZSwgdl90ZXhDb29yZCkueDsgICAgICBcbiIKKyAgICAgICAgIiAgZmxvYXQgdSA9
IHRleHR1cmUyRCh1X3RleHR1cmUsIHZfdGV4Q29vcmQpLnIgLSAuNTsgXG4iCisgICAgICAgICIg
IGZsb2F0IHYgPSB0ZXh0dXJlMkQodl90ZXh0dXJlLCB2X3RleENvb3JkKS5yIC0gLjU7IFxuIgor
ICAgICAgICAiICB2ZWMzIHJnYiA9IGNjX21hdHJpeCAqIHZlYzMoeSwgdSwgdik7ICAgICAgICAg
ICAgICBcbiIKKyAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChyZ2IsIDEpOyAgICAgICAg
ICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKworICAgIGNoYXIgcmdiYUZyYWdtZW50U2hh
ZGVyU3RyaW5nW10gPQorICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInZhcnlpbmcgdmVjMiB2X3RleENvb3Jk
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ1bmlmb3JtIHNhbXBs
ZXIyRCByZ2JhX3RleHR1cmU7ICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidm9p
ZCBtYWluKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAg
ICAgICAgInsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXG4iCisgICAgICAgICIgIHZlYzQgdGV4Q29sb3IgPSB0ZXh0dXJlMkQocmdiYV90ZXh0dXJl
LCB2ZWMyKHZfdGV4Q29vcmQueCwgMS4wIC0gdl90ZXhDb29yZC55KSk7IFxuIgorICAgICAgICAi
ICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHRleENvbG9yLngsIHRleENvbG9yLnksIHRleENvbG9yLnos
IHRleENvbG9yLncpOyBcbiIKKyAgICAgICAgIn0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXG4iOworCisgICAgbV9yZ2JhU2hhZGVyUHJvZ3JhbSA9
IGNyZWF0ZVNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU3RyaW5nLCByZ2JhRnJhZ21lbnRTaGFk
ZXJTdHJpbmcpOworICAgIGlmICghbV9yZ2JhU2hhZGVyUHJvZ3JhbSkgeworICAgICAgICBMT0df
RVJST1IoIlZpZGVvTGF5ZXJDaHJvbWl1bTogRmFpbGVkIHRvIGNyZWF0ZSByZ2JhIHNoYWRlciBw
cm9ncmFtIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3l1dlNoYWRlclByb2dy
YW0gPSBjcmVhdGVTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclN0cmluZywgeXV2RnJhZ21lbnRT
aGFkZXJTdHJpbmcpOworICAgIGlmICghbV95dXZTaGFkZXJQcm9ncmFtKSB7CisgICAgICAgIExP
R19FUlJPUigiVmlkZW9MYXllckNocm9taXVtOiBGYWlsZWQgdG8gY3JlYXRlIHl1diBzaGFkZXIg
cHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR0xDKG1feXV2U2hhZGVy
TWF0cml4TG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX3l1dlNoYWRlclByb2dyYW0s
ICJtYXRyaXgiKSk7CisgICAgR0xDKG1feVRleHR1cmVMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxv
Y2F0aW9uKG1feXV2U2hhZGVyUHJvZ3JhbSwgInlfdGV4dHVyZSIpKTsKKyAgICBHTEMobV91VGV4
dHVyZUxvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV95dXZTaGFkZXJQcm9ncmFtLCAi
dV90ZXh0dXJlIikpOworICAgIEdMQyhtX3ZUZXh0dXJlTG9jYXRpb24gPSBnbEdldFVuaWZvcm1M
b2NhdGlvbihtX3l1dlNoYWRlclByb2dyYW0sICJ2X3RleHR1cmUiKSk7CisgICAgR0xDKG1fY2NN
YXRyaXhMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1feXV2U2hhZGVyUHJvZ3JhbSwg
ImNjX21hdHJpeCIpKTsKKworICAgIEFTU0VSVChtX3l1dlNoYWRlck1hdHJpeExvY2F0aW9uICE9
IC0xKTsKKyAgICBBU1NFUlQobV95VGV4dHVyZUxvY2F0aW9uICE9IC0xKTsKKyAgICBBU1NFUlQo
bV91VGV4dHVyZUxvY2F0aW9uICE9IC0xKTsKKyAgICBBU1NFUlQobV92VGV4dHVyZUxvY2F0aW9u
ICE9IC0xKTsKKyAgICBBU1NFUlQobV9jY01hdHJpeExvY2F0aW9uICE9IC0xKTsKKworICAgIEdM
QyhtX3JnYmFTaGFkZXJNYXRyaXhMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fcmdi
YVNoYWRlclByb2dyYW0sICJtYXRyaXgiKSk7CisgICAgR0xDKG1fcmdiYVRleHR1cmVMb2NhdGlv
biA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fcmdiYVNoYWRlclByb2dyYW0sICJyZ2JhX3RleHR1
cmUiKSk7CisKKyAgICBBU1NFUlQobV9yZ2JhU2hhZGVyTWF0cml4TG9jYXRpb24gIT0gLTEpOwor
ICAgIEFTU0VSVChtX3JnYmFUZXh0dXJlTG9jYXRpb24gIT0gLTEpOworCisgICAgbV9pbml0aWFs
aXplZCA9IHRydWU7Cit9CisKK1ZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp+U2hh
cmVkVmFsdWVzKCkKK3sKKyAgICBpZiAobV95dXZTaGFkZXJQcm9ncmFtKQorICAgICAgICBHTEMo
Z2xEZWxldGVQcm9ncmFtKG1feXV2U2hhZGVyUHJvZ3JhbSkpOworICAgIGlmIChtX3JnYmFTaGFk
ZXJQcm9ncmFtKQorICAgICAgICBHTEMoZ2xEZWxldGVQcm9ncmFtKG1fcmdiYVNoYWRlclByb2dy
YW0pKTsKK30KKwogUGFzc1JlZlB0cjxWaWRlb0xheWVyQ2hyb21pdW0+IFZpZGVvTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW9GcmFtZVBy
b3ZpZGVyKiBwcm92aWRlcikKIHsKQEAgLTU1LDEzICsxNDgsMTUgQEAgUGFzc1JlZlB0cjxWaWRl
b0xheWVyQ2hyb21pdW0+IFZpZGVvTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bSoKIH0KIAogVmlkZW9MYXllckNocm9taXVtOjpWaWRlb0xheWVyQ2hyb21pdW0oR3Jh
cGhpY3NMYXllckNocm9taXVtKiBvd25lciwgVmlkZW9GcmFtZVByb3ZpZGVyKiBwcm92aWRlcikK
LSAgICA6IENvbnRlbnRMYXllckNocm9taXVtKG93bmVyKQotI2lmIFBMQVRGT1JNKFNLSUEpCi0g
ICAgLCBtX2NhbnZhcygwKQotICAgICwgbV9za2lhQ29udGV4dCgwKQotI2VuZGlmCi0gICAgLCBt
X2dyYXBoaWNzQ29udGV4dCgwKQorICAgIDogTGF5ZXJDaHJvbWl1bShvd25lcikKKyAgICAsIG1f
c2tpcHNEcmF3KHRydWUpCisgICAgLCBtX3lUZXh0dXJlSWQoMCkKKyAgICAsIG1fdVRleHR1cmVJ
ZCgwKQorICAgICwgbV92VGV4dHVyZUlkKDApCisgICAgLCBtX3JnYmFUZXh0dXJlSWQoMCkKKyAg
ICAsIG1fZnJhbWVGb3JtYXQoVmlkZW9GcmFtZUNocm9taXVtOjpJbnZhbGlkKQogICAgICwgbV9w
cm92aWRlcihwcm92aWRlcikKKyAgICAsIG1fYWxsb2NhdGVkVGV4dHVyZVNpemUoSW50U2l6ZSgt
MSwgLTEpKQogewogfQogCkBAIC03MywxMzEgKzE2OCwyMTQgQEAgdm9pZCBWaWRlb0xheWVyQ2hy
b21pdW06OnVwZGF0ZUNvbnRlbnRzKCkKIAogICAgIEFTU0VSVChkcmF3c0NvbnRlbnQoKSk7CiAK
KyAgICBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lID0gMDsKICAgICBJbnRSZWN0IGRpcnR5UmVj
dChtX2RpcnR5UmVjdCk7Ci0gICAgSW50U2l6ZSByZXF1aXJlZFRleHR1cmVTaXplOwotCi0jaWYg
UExBVEZPUk0oU0tJQSkKLSAgICByZXF1aXJlZFRleHR1cmVTaXplID0gbV9ib3VuZHM7CisgICAg
SW50U2l6ZSByZXF1aXJlZFRleHR1cmVTaXplID0gbV9ib3VuZHM7CiAgICAgSW50UmVjdCBib3Vu
ZHNSZWN0KEludFBvaW50KDAsIDApLCBtX2JvdW5kcyk7CisgICAgYm9vbCBjcmVhdGVOZXdUZXh0
dXJlID0gZmFsc2U7CiAKLSAgICAvLyBJZiB0aGUgdGV4dHVyZSBuZWVkcyB0byBiZSByZWFsbG9j
YXRlZCwgdGhlbiB3ZSBtdXN0IHJlZHJhdyB0aGUgZW50aXJlCi0gICAgLy8gY29udGVudHMgb2Yg
dGhlIGxheWVyLgotICAgIGlmIChyZXF1aXJlZFRleHR1cmVTaXplICE9IG1fYWxsb2NhdGVkVGV4
dHVyZVNpemUpCi0gICAgICAgIGRpcnR5UmVjdCA9IGJvdW5kc1JlY3Q7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIC8vIENsaXAgdGhlIGRpcnR5UmVjdCB0byB0aGUgc2l6ZSBvZiB0aGUgbGF5ZXIgdG8g
YXZvaWQgZHJhd2luZyBvdXRzaWRlCi0gICAgICAgIC8vIHRoZSBib3VuZHMgb2YgdGhlIGJhY2tp
bmcgdGV4dHVyZS4KLSAgICAgICAgZGlydHlSZWN0LmludGVyc2VjdChib3VuZHNSZWN0KTsKLSAg
ICB9Ci0KLSAgICBpZiAoIW1fY2FudmFzLmdldCgpCi0gICAgICAgIHx8IGRpcnR5UmVjdC53aWR0
aCgpICE9IG1fY2FudmFzLT5nZXREZXZpY2UoKS0+d2lkdGgoKQotICAgICAgICB8fCBkaXJ0eVJl
Y3QuaGVpZ2h0KCkgIT0gbV9jYW52YXMtPmdldERldmljZSgpLT5oZWlnaHQoKSkgewotICAgICAg
ICBtX2NhbnZhcyA9IG5ldyBza2lhOjpQbGF0Zm9ybUNhbnZhcyhkaXJ0eVJlY3Qud2lkdGgoKSwg
ZGlydHlSZWN0LmhlaWdodCgpLCB0cnVlKTsKLSAgICAgICAgbV9za2lhQ29udGV4dCA9IG5ldyBQ
bGF0Zm9ybUNvbnRleHRTa2lhKG1fY2FudmFzLmdldCgpKTsKLQotI2lmIE9TKFdJTkRPV1MpCi0g
ICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIGdldCB0ZXh0IHRvIHNob3cgdXAgY29ycmVjdGx5
LiBXaXRob3V0IGl0LAotICAgICAgICAvLyBHREkgcmVuZGVycyB3aXRoIHplcm8gYWxwaGEgYW5k
IHRoZSB0ZXh0IGJlY29tZXMgaW52aXNpYmxlLgotICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5LCBz
ZXR0aW5nIHRoaXMgdG8gdHJ1ZSBkaXNhYmxlcyBjbGVhcnR5cGUuCi0gICAgICAgIC8vIEZJWE1F
OiBEb2VzIHRoaXMgdGFrZSB1cyBkb3duIGEgdmVyeSBzbG93IHRleHQgcmVuZGVyaW5nIHBhdGg/
Ci0gICAgICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBpcyBhIHdpbmRvd3Mtb25seSBjYWxsPwot
ICAgICAgICBtX3NraWFDb250ZXh0LT5zZXREcmF3aW5nVG9JbWFnZUJ1ZmZlcih0cnVlKTsKLSNl
bmRpZgotICAgICAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG5ldyBHcmFwaGljc0NvbnRleHQocmVp
bnRlcnByZXRfY2FzdDxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCo+KG1fc2tpYUNvbnRleHQuZ2V0
KCkpKTsKLSAgICB9Ci0KLSAgICAvLyBCcmluZyB0aGUgY2FudmFzIGludG8gdGhlIGNvb3JkaW5h
dGUgc3lzdGVtIG9mIHRoZSBwYWludCByZWN0LgotICAgIG1fY2FudmFzLT50cmFuc2xhdGUoc3Rh
dGljX2Nhc3Q8U2tTY2FsYXI+KC1kaXJ0eVJlY3QueCgpKSwgc3RhdGljX2Nhc3Q8U2tTY2FsYXI+
KC1kaXJ0eVJlY3QueSgpKSk7Ci0KLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgdGVzdCB3aGVu
IHRpbGVkIGxheWVycyBhcmUgaW1wbGVtZW50ZWQuCiAgICAgbV9za2lwc0RyYXcgPSBmYWxzZTsK
KyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgdGVzdCB3aGVuIHRpbGVkIGxheWVycyBhcmUgaW1w
bGVtZW50ZWQuCiAgICAgaWYgKCFsYXllclJlbmRlcmVyKCktPmNoZWNrVGV4dHVyZVNpemUocmVx
dWlyZWRUZXh0dXJlU2l6ZSkpIHsKICAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgdW5zaWduZWQgdGV4dHVyZUlkID0gbV9jb250ZW50c1Rl
eHR1cmU7Ci0gICAgaWYgKCF0ZXh0dXJlSWQpCi0gICAgICAgIHRleHR1cmVJZCA9IGxheWVyUmVu
ZGVyZXIoKS0+Y3JlYXRlTGF5ZXJUZXh0dXJlKCk7CisgICAgZnJhbWUgPSBtX3Byb3ZpZGVyLT5n
ZXRDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICBtX3NraXBzRHJhdyA9
IHRydWU7CisgICAgZWxzZSB7CisgICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIG5lZWRzIHRvIGJl
IHJlYWxsb2NhdGVkLCB0aGVuIHdlIG11c3QgcmVkcmF3IHRoZSBlbnRpcmUKKyAgICAgICAgLy8g
Y29udGVudHMgb2YgdGhlIGxheWVyLgorICAgICAgICBpZiAocmVxdWlyZWRUZXh0dXJlU2l6ZSAh
PSBtX2FsbG9jYXRlZFRleHR1cmVTaXplKSB7CisgICAgICAgICAgICBtX2FsbG9jYXRlZFRleHR1
cmVTaXplID0gbV9ib3VuZHM7CisgICAgICAgICAgICBkaXJ0eVJlY3QgPSBib3VuZHNSZWN0Owor
ICAgICAgICAgICAgY3JlYXRlTmV3VGV4dHVyZSA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLyBDbGlwIHRoZSBkaXJ0eVJlY3QgdG8gdGhlIHNpemUgb2YgdGhlIGxheWVy
IHRvIGF2b2lkIGRyYXdpbmcgb3V0c2lkZQorICAgICAgICAgICAgLy8gdGhlIGJvdW5kcyBvZiB0
aGUgYmFja2luZyB0ZXh0dXJlLgorICAgICAgICAgICAgZGlydHlSZWN0LmludGVyc2VjdChib3Vu
ZHNSZWN0KTsKKyAgICAgICAgfQorCisgICAgICAgIG1fZnJhbWVGb3JtYXQgPSBmcmFtZS0+Zm9y
bWF0KCk7CisgICAgICAgIHN3aXRjaCAobV9mcmFtZUZvcm1hdCkgeworICAgICAgICBjYXNlIFZp
ZGVvRnJhbWVDaHJvbWl1bTo6WVYxMjoKKyAgICAgICAgICAgIHVwZGF0ZVlVVkNvbnRlbnRzKGZy
YW1lLCBkaXJ0eVJlY3QsIGNyZWF0ZU5ld1RleHR1cmUpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpSR0JBOgorICAgICAgICAgICAgdXBkYXRl
UkdCQUNvbnRlbnRzKGZyYW1lLCBkaXJ0eVJlY3QsIGNyZWF0ZU5ld1RleHR1cmUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBGSVhNRTogSW1w
bGVtZW50IG90aGVyIHBhdGhzLgorICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIG1fcHJvdmlkZXItPnB1dEN1cnJl
bnRGcmFtZShmcmFtZSk7CisgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKK30KKwor
dm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZVlVVkNvbnRlbnRzKFZpZGVvRnJhbWVDaHJv
bWl1bSogZnJhbWUsIGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgY3JlYXRlTmV3VGV4
dHVyZSkKK3sKKyAgICBJbnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemUgPSBtX2JvdW5kczsKIAot
ICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlkIG9yIHNpemUgY2hhbmdlZCBzaW5jZSBsYXN0IHRpbWUs
IHRoZW4gd2UgbmVlZCB0byB0ZWxsIEdMCisgICAgLy8gSWYgdGhlIGRpbWVuc2lvbnMgY2hhbmdl
ZCBzaW5jZSBsYXN0IHRpbWUsIHRoZW4gd2UgbmVlZCB0byB0ZWxsIEdMCiAgICAgLy8gdG8gcmUt
YWxsb2NhdGUgYSB0ZXh0dXJlLgotICAgIGlmIChtX2NvbnRlbnRzVGV4dHVyZSAhPSB0ZXh0dXJl
SWQgfHwgcmVxdWlyZWRUZXh0dXJlU2l6ZSAhPSBtX2FsbG9jYXRlZFRleHR1cmVTaXplKQotICAg
ICAgICBjcmVhdGVUZXh0dXJlUmVjdChyZXF1aXJlZFRleHR1cmVTaXplLCBkaXJ0eVJlY3QsIHRl
eHR1cmVJZCk7Ci0gICAgZWxzZQotICAgICAgICB1cGRhdGVUZXh0dXJlUmVjdChkaXJ0eVJlY3Qs
IHRleHR1cmVJZCk7Ci0jZWxzZQotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbm9uLXNraWEgcGF0
aAotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0jZW5kaWYKKyAgICBpZiAoY3JlYXRlTmV3VGV4dHVy
ZSkgeworICAgICAgICBpZiAobV95VGV4dHVyZUlkKSB7CisgICAgICAgICAgICBnbERlbGV0ZVRl
eHR1cmVzKDEsICZtX3lUZXh0dXJlSWQpOworICAgICAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygx
LCAmbV91VGV4dHVyZUlkKTsKKyAgICAgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdlRl
eHR1cmVJZCk7CisgICAgICAgIH0KKworICAgICAgICBtX3lUZXh0dXJlSWQgPSBsYXllclJlbmRl
cmVyKCktPmNyZWF0ZUxheWVyVGV4dHVyZSgpOworICAgICAgICBtX3VUZXh0dXJlSWQgPSBsYXll
clJlbmRlcmVyKCktPmNyZWF0ZUxheWVyVGV4dHVyZSgpOworICAgICAgICBtX3ZUZXh0dXJlSWQg
PSBsYXllclJlbmRlcmVyKCktPmNyZWF0ZUxheWVyVGV4dHVyZSgpOworICAgICAgICBjcmVhdGVZ
VVZUZXh0dXJlcyhmcmFtZSwgcmVxdWlyZWRUZXh0dXJlU2l6ZSwgdXBkYXRlUmVjdCk7CisgICAg
fSBlbHNlCisgICAgICAgIHVwZGF0ZVlVVlRleHR1cmVzKGZyYW1lLCB1cGRhdGVSZWN0KTsKKwor
ICAgIHVwZGF0ZUNvbnRlbnRzQ29tcGxldGVkKCk7CiB9CiAKLXZvaWQgVmlkZW9MYXllckNocm9t
aXVtOjpjcmVhdGVUZXh0dXJlUmVjdChjb25zdCBJbnRTaXplJiByZXF1aXJlZFRleHR1cmVTaXpl
LCBjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCB1bnNpZ25lZCB0ZXh0dXJlSWQpCit2b2lkIFZp
ZGVvTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlWVVWVGV4dHVyZXMoVmlkZW9GcmFtZUNocm9taXVtKiBm
cmFtZSwgY29uc3QgSW50U2l6ZSYgcmVxdWlyZWRUZXh0dXJlU2l6ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KQog
ewotICAgIC8vIFBhaW50IGludG8gZ3JhcGhpY3MgY29udGV4dCBhbmQgZ2V0IGJpdG1hcC4KLSAg
ICBtX293bmVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cygqbV9ncmFwaGljc0NvbnRleHQs
IHVwZGF0ZVJlY3QpOwotICAgIHZvaWQqIHBpeGVscyA9IDA7Ci0gICAgSW50U2l6ZSBiaXRtYXBT
aXplID0gSW50U2l6ZSgpOwotI2lmIFBMQVRGT1JNKFNLSUEpCi0gICAgY29uc3QgU2tCaXRtYXAm
IGJpdG1hcCA9IG1fY2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKLSAg
ICBjb25zdCBTa0JpdG1hcCogc2tpYUJpdG1hcCA9ICZiaXRtYXA7Ci0gICAgQVNTRVJUKHNraWFC
aXRtYXApOwotCi0gICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKCpza2lhQml0bWFwKTsKLSAgICBT
a0JpdG1hcDo6Q29uZmlnIHNraWFDb25maWcgPSBza2lhQml0bWFwLT5jb25maWcoKTsKLSAgICAv
LyBGSVhNRTogRG8gd2UgbmVlZCB0byBzdXBwb3J0IG1vcmUgaW1hZ2UgY29uZmlndXJhdGlvbnM/
Ci0gICAgaWYgKHNraWFDb25maWcgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKSB7Ci0g
ICAgICAgIHBpeGVscyA9IHNraWFCaXRtYXAtPmdldFBpeGVscygpOwotICAgICAgICBiaXRtYXBT
aXplID0gSW50U2l6ZShza2lhQml0bWFwLT53aWR0aCgpLCBza2lhQml0bWFwLT5oZWlnaHQoKSk7
Ci0gICAgfQotI2Vsc2UKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IG5vbi1za2lhIHBhdGgKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotI2VuZGlmCi0gICAgaWYgKCFwaXhlbHMpCi0gICAgICAgIHJl
dHVybjsKKyAgICBBU1NFUlQoZnJhbWUpOwogCi0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCB0ZXh0dXJlSWQpOwotICAgIEFTU0VSVChiaXRtYXBTaXplID09IHJlcXVpcmVkVGV4dHVy
ZVNpemUpOwotICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCByZXF1
aXJlZFRleHR1cmVTaXplLndpZHRoKCksIHJlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCksIDAs
IEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7CisgICAgR0xDKGdsQWN0aXZlVGV4
dHVyZShHTF9URVhUVVJFMSkpOworICAgIGNyZWF0ZVRleHR1cmUobV95VGV4dHVyZUlkLCBmcmFt
ZS0+ZGF0YShWaWRlb0ZyYW1lQ2hyb21pdW06OmNZUGxhbmUpLCBmcmFtZS0+d2lkdGgoKSwgZnJh
bWUtPmhlaWdodCgpLAorICAgICAgICBHTF9MVU1JTkFOQ0UpOwogCi0gICAgbV9jb250ZW50c1Rl
eHR1cmUgPSB0ZXh0dXJlSWQ7Ci0gICAgbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSA9IHJlcXVpcmVk
VGV4dHVyZVNpemU7CisgICAgR0xDKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMikpOworICAg
IGNyZWF0ZVRleHR1cmUobV91VGV4dHVyZUlkLCBmcmFtZS0+ZGF0YShWaWRlb0ZyYW1lQ2hyb21p
dW06OmNVUGxhbmUpLCBmcmFtZS0+d2lkdGgoKSAvIDIsIGZyYW1lLT5oZWlnaHQoKSAvIDIsCisg
ICAgICAgIEdMX0xVTUlOQU5DRSk7CiAKLSAgICB1cGRhdGVDb21wbGV0ZWQoKTsKKyAgICBHTEMo
Z2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUzKSk7CisgICAgY3JlYXRlVGV4dHVyZShtX3ZUZXh0
dXJlSWQsIGZyYW1lLT5kYXRhKFZpZGVvRnJhbWVDaHJvbWl1bTo6Y1ZQbGFuZSksIGZyYW1lLT53
aWR0aCgpIC8gMiwgZnJhbWUtPmhlaWdodCgpIC8gMiwKKyAgICAgICAgR0xfTFVNSU5BTkNFKTsK
IH0KIAotdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVSZWN0KGNvbnN0IElu
dFJlY3QmIHVwZGF0ZVJlY3QsIHVuc2lnbmVkIHRleHR1cmVJZCkKK3ZvaWQgVmlkZW9MYXllckNo
cm9taXVtOjp1cGRhdGVZVVZUZXh0dXJlcyhWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lLCBjb25z
dCBJbnRSZWN0JiB1cGRhdGVSZWN0KQogewotI2lmIFBMQVRGT1JNKFNLSUEpCi0gICAgY29uc3Qg
U2tCaXRtYXAmIGJpdG1hcCA9IG1fY2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKHRy
dWUpOwotICAgIFNrQml0bWFwKiBza2lhQml0bWFwID0gY29uc3RfY2FzdDxTa0JpdG1hcCo+KCZi
aXRtYXApOwotICAgIEFTU0VSVChza2lhQml0bWFwKTsKLQotICAgIFNrQXV0b0xvY2tQaXhlbHMg
bG9jaygqc2tpYUJpdG1hcCk7Ci0gICAgU2tCaXRtYXA6OkNvbmZpZyBza2lhQ29uZmlnID0gc2tp
YUJpdG1hcC0+Y29uZmlnKCk7Ci0KLSAgICBpZiAoc2tpYUNvbmZpZyA9PSBTa0JpdG1hcDo6a0FS
R0JfODg4OF9Db25maWcpIHsKLSAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0
ZXh0dXJlSWQpOwotICAgICAgICB2b2lkKiBtZW0gPSBnbE1hcFRleFN1YkltYWdlMkQoR0xfVEVY
VFVSRV8yRCwgMCwgdXBkYXRlUmVjdC54KCksIHVwZGF0ZVJlY3QueSgpLCB1cGRhdGVSZWN0Lndp
ZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIEdM
X1dSSVRFX09OTFkpOwotICAgICAgICBza2lhQml0bWFwLT5zZXRQaXhlbHMobWVtKTsKLSAgICAg
ICAgbV9vd25lci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoKm1fZ3JhcGhpY3NDb250ZXh0
LCB1cGRhdGVSZWN0KTsKLSAgICAgICAgZ2xVbm1hcFRleFN1YkltYWdlMkQobWVtKTsKKyAgICBB
U1NFUlQoZnJhbWUpOworCisgICAgR0xDKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMSkpOwor
ICAgIHVwZGF0ZVRleHR1cmUobV95VGV4dHVyZUlkLCBmcmFtZS0+ZGF0YShWaWRlb0ZyYW1lQ2hy
b21pdW06OmNZUGxhbmUpLCB1cGRhdGVSZWN0LngoKSwgdXBkYXRlUmVjdC55KCksCisgICAgICAg
IGZyYW1lLT53aWR0aCgpLCBmcmFtZS0+aGVpZ2h0KCksIEdMX0xVTUlOQU5DRSk7CisKKyAgICBH
TEMoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUyKSk7CisgICAgdXBkYXRlVGV4dHVyZShtX3VU
ZXh0dXJlSWQsIGZyYW1lLT5kYXRhKFZpZGVvRnJhbWVDaHJvbWl1bTo6Y1VQbGFuZSksIHVwZGF0
ZVJlY3QueCgpIC8gMiwgdXBkYXRlUmVjdC55KCkgLyAyLAorICAgICAgICBmcmFtZS0+d2lkdGgo
KSAvIDIsIGZyYW1lLT5oZWlnaHQoKSAvIDIsIEdMX0xVTUlOQU5DRSk7CisKKyAgICBHTEMoZ2xB
Y3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUzKSk7CisgICAgdXBkYXRlVGV4dHVyZShtX3ZUZXh0dXJl
SWQsIGZyYW1lLT5kYXRhKFZpZGVvRnJhbWVDaHJvbWl1bTo6Y1ZQbGFuZSksIHVwZGF0ZVJlY3Qu
eCgpIC8gMiwgdXBkYXRlUmVjdC55KCkgLyAyLAorICAgICAgICBmcmFtZS0+d2lkdGgoKSAvIDIs
IGZyYW1lLT5oZWlnaHQoKSAvIDIsIEdMX0xVTUlOQU5DRSk7Cit9CisKK3ZvaWQgVmlkZW9MYXll
ckNocm9taXVtOjp1cGRhdGVSR0JBQ29udGVudHMoVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSwg
Y29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBjcmVhdGVOZXdUZXh0dXJlKQoreworICAg
IEFTU0VSVChmcmFtZSk7CisgICAgSW50U2l6ZSByZXF1aXJlZFRleHR1cmVTaXplID0gbV9ib3Vu
ZHM7CisgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKworICAgIGlmIChjcmVhdGVO
ZXdUZXh0dXJlKSB7CisgICAgICAgIGlmIChtX3JnYmFUZXh0dXJlSWQpCisgICAgICAgICAgICBn
bERlbGV0ZVRleHR1cmVzKDEsICZtX3JnYmFUZXh0dXJlSWQpOworICAgICAgICBtX3JnYmFUZXh0
dXJlSWQgPSBsYXllclJlbmRlcmVyKCktPmNyZWF0ZUxheWVyVGV4dHVyZSgpOworICAgICAgICBj
cmVhdGVUZXh0dXJlKG1fcmdiYVRleHR1cmVJZCwgZnJhbWUtPmRhdGEoVmlkZW9GcmFtZUNocm9t
aXVtOjpjUkdCUGxhbmUpLCBmcmFtZS0+d2lkdGgoKSwKKyAgICAgICAgICAgIGZyYW1lLT5oZWln
aHQoKSwgR0xfUkdCQSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdXBkYXRlVGV4dHVyZShtX3Jn
YmFUZXh0dXJlSWQsIGZyYW1lLT5kYXRhKFZpZGVvRnJhbWVDaHJvbWl1bTo6Y1JHQlBsYW5lKSwg
dXBkYXRlUmVjdC54KCksCisgICAgICAgICAgICB1cGRhdGVSZWN0LnkoKSwgZnJhbWUtPndpZHRo
KCksIGZyYW1lLT5oZWlnaHQoKSwgR0xfUkdCQSk7CiAgICAgfQogCi0gICAgdXBkYXRlQ29tcGxl
dGVkKCk7Ci0jZWxzZQotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbm9uLXNraWEgcGF0aAotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0jZW5kaWYKKyAgICB1cGRhdGVDb250ZW50c0NvbXBsZXRlZCgp
OworfQorCit2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZSh1bnNpZ25lZCB0
ZXh0dXJlSWQsIGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWln
aHQsIEdMZW51bSBmb3JtYXQpCit7CisgICAgR0xDKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgdGV4dHVyZUlkKSk7CisgICAgR0xDKGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIEdMX0xVTUlOQU5DRSwgR0xfVU5TSUdORURfQllURSwg
ZGF0YSkpOworICAgIEFTU0VSVChnbEdldEVycm9yKCkgPT0gMCk7CiB9CiAKLXZvaWQgVmlkZW9M
YXllckNocm9taXVtOjp1cGRhdGVDb21wbGV0ZWQoKQordm9pZCBWaWRlb0xheWVyQ2hyb21pdW06
OnVwZGF0ZVRleHR1cmUodW5zaWduZWQgdGV4dHVyZUlkLCBjb25zdCB2b2lkKiBkYXRhLCB1bnNp
Z25lZCB4T2Zmc2V0LCB1bnNpZ25lZCB5T2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgR0xlbnVtIGZv
cm1hdCkKK3sKKyAgICBHTEMoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlSWQp
KTsKKyAgICB2b2lkKiBtZW0gPSBnbE1hcFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwg
MCwgMCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBHTF9XUklURV9P
TkxZKTsKKyAgICBpZiAobWVtKSB7CisgICAgICAgIG1lbWNweShtZW0sIGRhdGEsIGhlaWdodCAq
IHdpZHRoKTsKKyAgICAgICAgZ2xVbm1hcFRleFN1YkltYWdlMkQobWVtKTsKKyAgICAgICAgQVNT
RVJUKGdsR2V0RXJyb3IoKSA9PSAwKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9za2lwc0RyYXcg
PSB0cnVlOworfQorCit2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNDb21w
bGV0ZWQoKQogewogICAgIG1fZGlydHlSZWN0LnNldFNpemUoRmxvYXRTaXplKCkpOwogICAgIG1f
Y29udGVudHNEaXJ0eSA9IGZhbHNlOwogfQogCit2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6ZHJh
dygpCit7CisgICAgaWYgKG1fc2tpcHNEcmF3KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NF
UlQobGF5ZXJSZW5kZXJlcigpKTsKKyAgICBjb25zdCBWaWRlb0xheWVyQ2hyb21pdW06OlNoYXJl
ZFZhbHVlcyogc3YgPSBsYXllclJlbmRlcmVyKCktPnZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXMoKTsK
KyAgICBBU1NFUlQoc3YgJiYgc3YtPmluaXRpYWxpemVkKCkpOworCisgICAgc3dpdGNoIChtX2Zy
YW1lRm9ybWF0KSB7CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OllWMTI6CisgICAgICAg
IGRyYXdZVVYoc3YpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1
bTo6UkdCQToKKyAgICAgICAgZHJhd1JHQkEoc3YpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG90aGVyIHBhdGhzLgorICAgICAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZ2xBY3RpdmVUZXh0
dXJlKEdMX1RFWFRVUkUwKTsKK30KKwordm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OmRyYXdZVVYo
Y29uc3QgU2hhcmVkVmFsdWVzKiBzdikKK3sKKyAgICBHTEMoZ2xBY3RpdmVUZXh0dXJlKEdMX1RF
WFRVUkUxKSk7CisgICAgR0xDKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV95VGV4dHVy
ZUlkKSk7CisgICAgR0xDKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMikpOworICAgIEdMQyhn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdVRleHR1cmVJZCkpOworICAgIEdMQyhnbEFj
dGl2ZVRleHR1cmUoR0xfVEVYVFVSRTMpKTsKKyAgICBHTEMoZ2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCBtX3ZUZXh0dXJlSWQpKTsKKworICAgIGxheWVyUmVuZGVyZXIoKS0+dXNlU2hhZGVy
KHN2LT55dXZTaGFkZXJQcm9ncmFtKCkpOworICAgIEdMQyhnbFVuaWZvcm0xaShzdi0+eVRleHR1
cmVMb2NhdGlvbigpLCAxKSk7CisgICAgR0xDKGdsVW5pZm9ybTFpKHN2LT51VGV4dHVyZUxvY2F0
aW9uKCksIDIpKTsKKyAgICBHTEMoZ2xVbmlmb3JtMWkoc3YtPnZUZXh0dXJlTG9jYXRpb24oKSwg
MykpOworICAgIEdMQyhnbFVuaWZvcm1NYXRyaXgzZnYoc3YtPmNjTWF0cml4TG9jYXRpb24oKSwg
MSwgR0xfRkFMU0UsIGNZVVYyUkdCKSk7CisKKyAgICBkcmF3VGV4dHVyZWRRdWFkKGxheWVyUmVu
ZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCBkcmF3VHJhbnNmb3JtKCksCisgICAgICAgICAg
ICAgICAgICAgICBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNp
dHkoKSwKKyAgICAgICAgICAgICAgICAgICAgIHN2LT55dXZTaGFkZXJNYXRyaXhMb2NhdGlvbigp
LCAtMSk7Cit9CisKK3ZvaWQgVmlkZW9MYXllckNocm9taXVtOjpkcmF3UkdCQShjb25zdCBTaGFy
ZWRWYWx1ZXMqIHN2KQoreworICAgIEdMQyhnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsK
KyAgICBHTEMoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3JnYmFUZXh0dXJlSWQpKTsK
KworICAgIGxheWVyUmVuZGVyZXIoKS0+dXNlU2hhZGVyKHN2LT5yZ2JhU2hhZGVyUHJvZ3JhbSgp
KTsKKyAgICBHTEMoZ2xVbmlmb3JtMWkoc3YtPnJnYmFUZXh0dXJlTG9jYXRpb24oKSwgMCkpOwor
CisgICAgZHJhd1RleHR1cmVkUXVhZChsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgo
KSwgZHJhd1RyYW5zZm9ybSgpLAorICAgICAgICAgICAgICAgICAgICAgYm91bmRzKCkud2lkdGgo
KSwgYm91bmRzKCkuaGVpZ2h0KCksIGRyYXdPcGFjaXR5KCksCisgICAgICAgICAgICAgICAgICAg
ICBzdi0+cmdiYVNoYWRlck1hdHJpeExvY2F0aW9uKCksIC0xKTsKIH0KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hy
b21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNo
cm9taXVtLmgKaW5kZXggMzUwN2NiMjBjZjE3ZTc5MzMxMmQ2ZWViM2U5NTNiN2Y4Y2ViZjI1OS4u
MzkwNTRlMWJjNjk5OTZlMzEyNmFhZGNmMjk5NmNkMzA2N2JkNDA0NSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5o
CkBAIC0zNywyOCArMzcsNzAgQEAKICNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgog
I2luY2x1ZGUgIlZpZGVvRnJhbWVQcm92aWRlci5oIgogCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gQSBMYXllciB0aGF0IGNvbnRhaW5zIGEgVmlk
ZW8gZWxlbWVudC4KLWNsYXNzIFZpZGVvTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBDb250ZW50TGF5
ZXJDaHJvbWl1bSB7CitjbGFzcyBWaWRlb0xheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJv
bWl1bSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8VmlkZW9MYXllckNocm9taXVt
PiBjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lciA9IDAsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW9GcmFtZVByb3ZpZGVyKiA9
IDApOwotICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSB7IHJldHVybiB0cnVlOyB9CiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKCk7CisgICAgdmlydHVhbCBib29sIGRyYXdz
Q29udGVudCgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZHJhdygpOworCisg
ICAgY2xhc3MgU2hhcmVkVmFsdWVzIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNoYXJlZFZhbHVl
cygpOworICAgICAgICB+U2hhcmVkVmFsdWVzKCk7CisgICAgICAgIHVuc2lnbmVkIHl1dlNoYWRl
clByb2dyYW0oKSBjb25zdCB7IHJldHVybiBtX3l1dlNoYWRlclByb2dyYW07IH0KKyAgICAgICAg
dW5zaWduZWQgcmdiYVNoYWRlclByb2dyYW0oKSBjb25zdCB7IHJldHVybiBtX3JnYmFTaGFkZXJQ
cm9ncmFtOyB9CisgICAgICAgIGludCB5dXZTaGFkZXJNYXRyaXhMb2NhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1feXV2U2hhZGVyTWF0cml4TG9jYXRpb247IH0KKyAgICAgICAgaW50IHJnYmFTaGFk
ZXJNYXRyaXhMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmdiYVNoYWRlck1hdHJpeExvY2F0
aW9uOyB9CisgICAgICAgIGludCB5VGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV95
VGV4dHVyZUxvY2F0aW9uOyB9CisgICAgICAgIGludCB1VGV4dHVyZUxvY2F0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV91VGV4dHVyZUxvY2F0aW9uOyB9CisgICAgICAgIGludCB2VGV4dHVyZUxvY2F0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV92VGV4dHVyZUxvY2F0aW9uOyB9CisgICAgICAgIGludCBy
Z2JhVGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZ2JhVGV4dHVyZUxvY2F0aW9u
OyB9CisgICAgICAgIGludCBjY01hdHJpeExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jY01h
dHJpeExvY2F0aW9uOyB9CisgICAgICAgIGJvb2wgaW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJldHVy
biBtX2luaXRpYWxpemVkOyB9OworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIG1feXV2
U2hhZGVyUHJvZ3JhbTsKKyAgICAgICAgdW5zaWduZWQgbV9yZ2JhU2hhZGVyUHJvZ3JhbTsKKyAg
ICAgICAgaW50IG1feXV2U2hhZGVyTWF0cml4TG9jYXRpb247CisgICAgICAgIGludCBtX3JnYmFT
aGFkZXJNYXRyaXhMb2NhdGlvbjsKKyAgICAgICAgaW50IG1feVRleHR1cmVMb2NhdGlvbjsKKyAg
ICAgICAgaW50IG1fdVRleHR1cmVMb2NhdGlvbjsKKyAgICAgICAgaW50IG1fdlRleHR1cmVMb2Nh
dGlvbjsKKyAgICAgICAgaW50IG1fcmdiYVRleHR1cmVMb2NhdGlvbjsKKyAgICAgICAgaW50IG1f
Y2NNYXRyaXhMb2NhdGlvbjsKKyAgICAgICAgYm9vbCBtX2luaXRpYWxpemVkOworICAgIH07CiAK
IHByaXZhdGU6Ci0gICAgVmlkZW9MYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSog
b3duZXIsIFZpZGVvRnJhbWVQcm92aWRlciopOwotICAgIHZvaWQgY3JlYXRlVGV4dHVyZVJlY3Qo
Y29uc3QgSW50U2l6ZSYgcmVxdWlyZWRUZXh0dXJlU2l6ZSwgY29uc3QgSW50UmVjdCYgdXBkYXRl
UmVjdCwgdW5zaWduZWQgdGV4dHVyZUlkKTsKLSAgICB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KGNv
bnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIHVuc2lnbmVkIHRleHR1cmVJZCk7Ci0gICAgdm9pZCB1
cGRhdGVDb21wbGV0ZWQoKTsKKyAgICBleHBsaWNpdCBWaWRlb0xheWVyQ2hyb21pdW0oR3JhcGhp
Y3NMYXllckNocm9taXVtKiBvd25lciwgVmlkZW9GcmFtZVByb3ZpZGVyKiBwcm92aWRlcik7Cisg
ICAgdm9pZCB1cGRhdGVZVVZDb250ZW50cyhWaWRlb0ZyYW1lQ2hyb21pdW0qLCBjb25zdCBJbnRS
ZWN0JiB1cGRhdGVSZWN0LCBib29sIGNyZWF0ZU5ld1RleHR1cmUpOworICAgIHZvaWQgY3JlYXRl
WVVWVGV4dHVyZXMoVmlkZW9GcmFtZUNocm9taXVtKiwgY29uc3QgSW50U2l6ZSYgcmVxdWlyZWRU
ZXh0dXJlU2l6ZSwgY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCk7CisgICAgdm9pZCB1cGRhdGVZ
VVZUZXh0dXJlcyhWaWRlb0ZyYW1lQ2hyb21pdW0qLCBjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0
KTsKKyAgICB2b2lkIHVwZGF0ZVJHQkFDb250ZW50cyhWaWRlb0ZyYW1lQ2hyb21pdW0qLCBjb25z
dCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29sIGNyZWF0ZU5ld1RleHR1cmUpOworICAgIHZvaWQg
Y3JlYXRlVGV4dHVyZSh1bnNpZ25lZCB0ZXh0dXJlSWQsIGNvbnN0IHZvaWQqIGRhdGEsIHVuc2ln
bmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIEdMZW51bSBmb3JtYXQpOworICAgIHZvaWQgdXBk
YXRlVGV4dHVyZSh1bnNpZ25lZCB0ZXh0dXJlSWQsIGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVk
IHhPZmZzZXQsIHVuc2lnbmVkIHlPZmZzZXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWln
aHQsIEdMZW51bSBmb3JtYXQpOworICAgIHZvaWQgZHJhd1lVVihjb25zdCBTaGFyZWRWYWx1ZXMq
KTsKKyAgICB2b2lkIGRyYXdSR0JBKGNvbnN0IFNoYXJlZFZhbHVlcyopOworICAgIHZvaWQgdXBk
YXRlQ29udGVudHNDb21wbGV0ZWQoKTsKIAotI2lmIFBMQVRGT1JNKFNLSUEpCi0gICAgT3duUHRy
PHNraWE6OlBsYXRmb3JtQ2FudmFzPiBtX2NhbnZhczsKLSAgICBPd25QdHI8UGxhdGZvcm1Db250
ZXh0U2tpYT4gbV9za2lhQ29udGV4dDsKLSNlbmRpZgotICAgIE93blB0cjxHcmFwaGljc0NvbnRl
eHQ+IG1fZ3JhcGhpY3NDb250ZXh0OworICAgIEludFNpemUgbV9hbGxvY2F0ZWRUZXh0dXJlU2l6
ZTsKKyAgICBWaWRlb0ZyYW1lQ2hyb21pdW06OkZvcm1hdCBtX2ZyYW1lRm9ybWF0OworICAgIElu
dFJlY3QgbV91cGRhdGVSZWN0OwogICAgIE93blB0cjxWaWRlb0ZyYW1lUHJvdmlkZXI+IG1fcHJv
dmlkZXI7CisgICAgYm9vbCBtX3NraXBzRHJhdzsKKworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBj
WVVWMlJHQls5XTsKKyAgICB1bnNpZ25lZCBtX3lUZXh0dXJlSWQ7CisgICAgdW5zaWduZWQgbV91
VGV4dHVyZUlkOworICAgIHVuc2lnbmVkIG1fdlRleHR1cmVJZDsKKworICAgIHVuc2lnbmVkIG1f
cmdiYVRleHR1cmVJZDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDQ4M2QxODE3MDk0ZGIxMTdi
ZTI3OWFmMzk0MzA1NzYzYTMyNmRiNGIuLjY4ZTJiNjA4YWJiYzk2YjVjYzA5NjhkZDk4NWRmNWZh
NTk1OTgyNDQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA5LTAxICBWaWN0
b3JpYSBLaXJzdCAgPHZya0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEZpeGluZyBjb25zdGFudHMgaW4gVmlkZW9GcmFtZUNocm9t
aXVtSW1wbCBzbyB0aGF0IGl0IG92ZXJsb2FkcyB0aGUKKyAgICAgICAgVmlkZW9GcmFtZUNocm9t
aXVtIGNvbnN0IGRlY2xhcmF0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ1MDY5CisKKyAgICAgICAgKiBzcmMvVmlkZW9GcmFtZUNocm9taXVt
SW1wbC5jcHA6CisKIDIwMTAtMDgtMzEgIERhdmUgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvVmlkZW9GcmFtZUNocm9taXVtSW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1ZpZGVvRnJhbWVDaHJvbWl1bUltcGwuY3BwCmluZGV4IDJiOTgzMjBhM2NlMDU3NjU1YjY3Y2Qw
YTRjNzhiMWJmYjljMWU4NjMuLjgzM2YxZmZkYmNmZTc5N2M3ZjRhYzZkZmFlN2IzNjQxNTgyNWRh
ZjIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvVmlkZW9GcmFtZUNocm9taXVtSW1w
bC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9WaWRlb0ZyYW1lQ2hyb21pdW1JbXBsLmNw
cApAQCAtMzYsMTUgKzM2LDE1IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1uYW1l
c3BhY2UgV2ViS2l0IHsKK2NvbnN0IHVuc2lnbmVkIFZpZGVvRnJhbWVDaHJvbWl1bTo6Y01heFBs
YW5lcyA9IDM7Citjb25zdCB1bnNpZ25lZCBWaWRlb0ZyYW1lQ2hyb21pdW06OmNOdW1SR0JQbGFu
ZXMgPSAxOworY29uc3QgdW5zaWduZWQgVmlkZW9GcmFtZUNocm9taXVtOjpjUkdCUGxhbmUgPSAw
OworY29uc3QgdW5zaWduZWQgVmlkZW9GcmFtZUNocm9taXVtOjpjTnVtWVVWUGxhbmVzID0gMzsK
K2NvbnN0IHVuc2lnbmVkIFZpZGVvRnJhbWVDaHJvbWl1bTo6Y1lQbGFuZSA9IDA7Citjb25zdCB1
bnNpZ25lZCBWaWRlb0ZyYW1lQ2hyb21pdW06OmNVUGxhbmUgPSAxOworY29uc3QgdW5zaWduZWQg
VmlkZW9GcmFtZUNocm9taXVtOjpjVlBsYW5lID0gMjsKIAotY29uc3QgdW5zaWduZWQgY01heFBs
YW5lcyA9IDM7Ci1jb25zdCB1bnNpZ25lZCBjTnVtUkdCUGxhbmVzID0gMTsKLWNvbnN0IHVuc2ln
bmVkIGNSR0JQbGFuZSA9IDA7Ci1jb25zdCB1bnNpZ25lZCBjTnVtWVVWUGxhbmVzID0gMzsKLWNv
bnN0IHVuc2lnbmVkIGNZUGxhbmUgPSAwOwotY29uc3QgdW5zaWduZWQgY1VQbGFuZSA9IDE7Ci1j
b25zdCB1bnNpZ25lZCBjVlBsYW5lID0gMjsKK25hbWVzcGFjZSBXZWJLaXQgewogCiBXZWJWaWRl
b0ZyYW1lKiBWaWRlb0ZyYW1lQ2hyb21pdW1JbXBsOjp0b1dlYlZpZGVvRnJhbWUoVmlkZW9GcmFt
ZUNocm9taXVtKiB2aWRlb0ZyYW1lKQogewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67440</attachid>
            <date>2010-09-13 11:32:19 -0700</date>
            <delta_ts>2010-09-13 12:34:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45069-20100913113218.patch</filename>
            <type>text/plain</type>
            <size>31416</size>
            <attacher name="Victoria Kirst">vrk</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDVkODhiMjJkOGEzNjdhNGM4ZjdhM2M3NjFiYmNhYmQxNTgxNmFlNC4uZDRmMGU3YTc5YWQ2ZTUw
NjQwYzEwYzI1NzM3OTkzODk1NWI3MGUxOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAxMC0wOS0xMyAgVmlj
dG9yaWEgS2lyc3QgIDx2cmtAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNb2RpZmllcyBWaWRlb0xheWVyQ2hyb21pdW0gdG8gZG8g
WVVWIHRvIFJHQiBjb2xvciBjb252ZXJzaW9uIGluIHRoZQorICAgICAgICBHUFUuIEFsc28gYWRk
cyBzdXBwb3J0IGZvciBSR0JBIHZpZGVvIGZyYW1lIGZvcm1hdHMsIHRob3VnaCB0aGlzIGNvZGUK
KyAgICAgICAgcGF0aCBpcyBjdXJyZW50bHkgbmV2ZXIgcnVuIGJlY2F1c2UgdGhlIHZpZGVvIGZy
YW1lcyBhcmUgaW4gWVYxMgorICAgICAgICBmb3JtYXQuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTA2OQorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZGVv
TGF5ZXJTaGFyZWRWYWx1ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hy
b21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlZp
ZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp+U2hhcmVkVmFsdWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6VmlkZW9MYXllckNocm9taXVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6flZpZGVvTGF5ZXJDaHJvbWl1bSk6Cisg
ICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlWVVWQ29udGVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjphbGxvY2F0ZVlVVlRleHR1cmVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlWVVWVGV4dHVy
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVSR0JBQ29u
dGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjphbGxvY2F0ZVRl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVu
dHNDb21wbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjpkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6ZHJhd1lVVik6CisgICAg
ICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OmRyYXdSR0JBKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAg
KFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp5dXZTaGFkZXJQcm9ncmFt
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpy
Z2JhU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06
OlNoYXJlZFZhbHVlczo6eXV2U2hhZGVyTWF0cml4TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6VmlkZW9MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6OnJnYmFTaGFkZXJNYXRyaXhMb2Nh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVl
czo6eXV2V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVv
TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpyZ2JhV2lkdGhTY2FsZUZhY3RvckxvY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp5
VGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6
U2hhcmVkVmFsdWVzOjp1VGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVv
TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp2VGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp5dXZBbHBoYUxvY2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVz
OjpyZ2JhVGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJv
bWl1bTo6U2hhcmVkVmFsdWVzOjpjY01hdHJpeExvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjppbml0aWFsaXplZCk6CisKIDIwMTAt
MDktMTMgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCA4OTYwODQxMzA5
MDQyMzlhMTg2YjIwNzliMTA3YmRmN2QzMWNhMTMwLi4yZDVjNjVlMWYxOWVkNTY2OGU5MGYwM2E1
YWU3YzQ3M2NkMGEzODE5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC03MDAsNyArNzAw
LDggQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3Rz
KCkKICAgICBtX2xheWVyU2hhcmVkVmFsdWVzID0gYWRvcHRQdHIobmV3IExheWVyQ2hyb21pdW06
OlNoYXJlZFZhbHVlcygpKTsKICAgICBtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlcyA9IGFkb3B0
UHRyKG5ldyBDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKCkpOwogICAgIG1fY2Fu
dmFzTGF5ZXJTaGFyZWRWYWx1ZXMgPSBhZG9wdFB0cihuZXcgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6
U2hhcmVkVmFsdWVzKCkpOwotICAgIGlmICghbV9sYXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6
ZWQoKSB8fCAhbV9jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwgIW1f
Y2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkpIHsKKyAgICBtX3ZpZGVvTGF5
ZXJTaGFyZWRWYWx1ZXMgPSBhZG9wdFB0cihuZXcgVmlkZW9MYXllckNocm9taXVtOjpTaGFyZWRW
YWx1ZXMoKSk7CisgICAgaWYgKCFtX2xheWVyU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpIHx8
ICFtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSB8fCAhbV9jYW52YXNM
YXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSB8fCAhbV92aWRlb0xheWVyU2hhcmVkVmFs
dWVzLT5pbml0aWFsaXplZCgpKSB7CiAgICAgICAgIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC03MTUsNiArNzE2LDcgQEAgdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmNsZWFudXBTaGFyZWRPYmplY3RzKCkKICAgICBtX2xheWVyU2hh
cmVkVmFsdWVzLmNsZWFyKCk7CiAgICAgbV9jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMuY2xlYXIo
KTsKICAgICBtX2NhbnZhc0xheWVyU2hhcmVkVmFsdWVzLmNsZWFyKCk7CisgICAgbV92aWRlb0xh
eWVyU2hhcmVkVmFsdWVzLmNsZWFyKCk7CiAKICAgICBpZiAobV9zY3JvbGxTaGFkZXJQcm9ncmFt
KSB7CiAgICAgICAgIEdMQyhnbERlbGV0ZVByb2dyYW0obV9zY3JvbGxTaGFkZXJQcm9ncmFtKSk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCAyNzQ4MTVmM2ZlMjNjM2IwNzhjNDcwM2U4NDViM2Ji
YzhjMzNlY2JkLi40MTdmZTg4OTA1YmUxMDAyNzQ5NDczYmFkYzMxMzk2YzlhZGQ4ODFhIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmgKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlNrQml0bWFwLmgiCisjaW5j
bHVkZSAiVmlkZW9MYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpA
QCAtOTcsNiArOTgsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgTGF5ZXJDaHJvbWl1bTo6U2hhcmVk
VmFsdWVzKiBsYXllclNoYXJlZFZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJTaGFyZWRW
YWx1ZXMuZ2V0KCk7IH0KICAgICBjb25zdCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFs
dWVzKiBjb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRM
YXllclNoYXJlZFZhbHVlcy5nZXQoKTsgfQogICAgIGNvbnN0IENhbnZhc0xheWVyQ2hyb21pdW06
OlNoYXJlZFZhbHVlcyogY2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBt
X2NhbnZhc0xheWVyU2hhcmVkVmFsdWVzLmdldCgpOyB9CisgICAgY29uc3QgVmlkZW9MYXllckNo
cm9taXVtOjpTaGFyZWRWYWx1ZXMqIHZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXMoKSBjb25zdCB7IHJl
dHVybiBtX3ZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXMuZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICB2
b2lkIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgZmxvYXQgb3BhY2l0eSk7CkBAIC0xNjAs
NiArMTYyLDcgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFs
dWVzPiBtX2xheWVyU2hhcmVkVmFsdWVzOwogICAgIE93blB0cjxDb250ZW50TGF5ZXJDaHJvbWl1
bTo6U2hhcmVkVmFsdWVzPiBtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlczsKICAgICBPd25QdHI8
Q2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzPiBtX2NhbnZhc0xheWVyU2hhcmVkVmFs
dWVzOworICAgIE93blB0cjxWaWRlb0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcz4gbV92aWRl
b0xheWVyU2hhcmVkVmFsdWVzOwogCiAgICAgT3duUHRyPEdMRVMyQ29udGV4dD4gbV9nbGVzMkNv
bnRleHQ7CiB9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGMwZGEyODU2N2IzZmU5YzFkZGU2OTE3
MjI2OGNmNjVkNzI5MjQyN2YuLmVlOGUzMDFlNWZmYmRiYjQ3NmQwM2YxMTkzZTI2YmJhNzRjYWRj
ZWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9M
YXllckNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTM1LDE5ICszNSwxMzEgQEAKIAogI2luY2x1ZGUg
IkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5o
IgotI2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgorI2luY2x1ZGUgIlZpZGVv
RnJhbWVDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlZpZGVvRnJhbWVQcm92aWRlci5oIgogCiAjaW5j
bHVkZSA8R0xFUzIvZ2wyLmg+CiAjZGVmaW5lIEdMX0dMRVhUX1BST1RPVFlQRVMKICNpbmNsdWRl
IDxHTEVTMi9nbDJleHQuaD4KIAotI2lmIFBMQVRGT1JNKFNLSUEpCi0jaW5jbHVkZSAiTmF0aXZl
SW1hZ2VTa2lhLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgotI2VuZGlmCi0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY29uc3QgZmxvYXQgVmlkZW9MYXllckNocm9taXVtOjpj
WVVWMlJHQls5XSA9IHsKKyAgICAxLmYsIDEuZiwgMS5mLAorICAgIDAuZiwgLS4zNDRmLCAxLjc3
MmYsCisgICAgMS40MDNmLCAtLjcxNGYsIDAuZiwKK307CisKK1ZpZGVvTGF5ZXJDaHJvbWl1bTo6
U2hhcmVkVmFsdWVzOjpTaGFyZWRWYWx1ZXMoKQorICAgIDogbV95dXZTaGFkZXJQcm9ncmFtKDAp
CisgICAgLCBtX3JnYmFTaGFkZXJQcm9ncmFtKDApCisgICAgLCBtX3l1dlNoYWRlck1hdHJpeExv
Y2F0aW9uKDApCisgICAgLCBtX3l1dldpZHRoU2NhbGVGYWN0b3JMb2NhdGlvbigwKQorICAgICwg
bV9yZ2JhU2hhZGVyTWF0cml4TG9jYXRpb24oMCkKKyAgICAsIG1fcmdiYVdpZHRoU2NhbGVGYWN0
b3JMb2NhdGlvbigwKQorICAgICwgbV9jY01hdHJpeExvY2F0aW9uKDApCisgICAgLCBtX3lUZXh0
dXJlTG9jYXRpb24oMCkKKyAgICAsIG1fdVRleHR1cmVMb2NhdGlvbigwKQorICAgICwgbV92VGV4
dHVyZUxvY2F0aW9uKDApCisgICAgLCBtX3JnYmFUZXh0dXJlTG9jYXRpb24oMCkKKyAgICAsIG1f
eXV2QWxwaGFMb2NhdGlvbigwKQorICAgICwgbV9pbml0aWFsaXplZChmYWxzZSkKK3sKKyAgICAv
LyBGcmFtZSB0ZXh0dXJlcyBhcmUgYWxsb2NhdGVkIGJhc2VkIG9uIHN0cmlkZSB3aWR0aCwgbm90
IHZpc2libGUgZnJhbWUKKyAgICAvLyB3aWR0aCwgc3VjaCB0aGF0IHRoZXJlIGlzIGEgZ3VhcmFu
dGVlIHRoYXQgdGhlIGZyYW1lIHJvd3MgbGluZSB1cAorICAgIC8vIHByb3Blcmx5IGFuZCBhcmUg
bm90IHNoaWZ0ZWQgYnkgKHN0cmlkZSAtIHdpZHRoKSBwaXhlbHMuIFRvIGhpZGUgdGhlCisgICAg
Ly8gInBhZGRpbmciIHBpeGVscyBiZXR3ZWVuIHRoZSBlZGdlIG9mIHRoZSB2aXNpYmxlIGZyYW1l
IHdpZHRoIGFuZCB0aGUgZW5kCisgICAgLy8gb2YgdGhlIHN0cmlkZSwgd2UgZ2l2ZSB0aGUgc2hh
ZGVyIGEgd2lkdGhTY2FsZUZhY3RvciAoPD0xLjApIG9mIGhvdyBtdWNoCisgICAgLy8gb2YgdGhl
IHdpZHRoIG9mIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSBzaG93biB3aGVuIGRyYXdpbmcgdGhlIHRl
eHR1cmUgb250bworICAgIC8vIHRoZSB2ZXJ0aWNlcy4KKyAgICBjaGFyIHZlcnRleFNoYWRlclN0
cmluZ1tdID0KKyAgICAgICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyAgICAgXG4iCisgICAg
ICAgICJhdHRyaWJ1dGUgdmVjNCBhX3Bvc2l0aW9uOyAgIFxuIgorICAgICAgICAiYXR0cmlidXRl
IHZlYzIgYV90ZXhDb29yZDsgICBcbiIKKyAgICAgICAgInVuaWZvcm0gbWF0NCBtYXRyaXg7ICAg
ICAgICAgXG4iCisgICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgIFxuIgorICAg
ICAgICAidW5pZm9ybSBmbG9hdCB3aWR0aFNjYWxlRmFjdG9yOyAgXG4iCisgICAgICAgICJ2b2lk
IG1haW4oKSAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAieyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcbiIKKyAgICAgICAgIiAgZ2xfUG9zaXRpb24gPSBtYXRyaXggKiBhX3Bvc2l0
aW9uOyBcbiIKKyAgICAgICAgIiAgdl90ZXhDb29yZCA9IHZlYzIod2lkdGhTY2FsZUZhY3RvciAq
IGFfdGV4Q29vcmQueCwgYV90ZXhDb29yZC55KTsgXG4iCisgICAgICAgICJ9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFxuIjsKKworICAgIGNoYXIgeXV2RnJhZ21lbnRTaGFkZXJTdHJpbmdb
XSA9CisgICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFxuIgorICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgaW50OyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInZhcnlpbmcgdmVjMiB2X3RleENvb3Jk
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ1bmlmb3JtIHNhbXBs
ZXIyRCB5X3RleHR1cmU7ICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidW5p
Zm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlOyAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAg
ICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIHZfdGV4dHVyZTsgICAgICAgICAgICAgICAgICAgICAg
ICAgXG4iCisgICAgICAgICJ1bmlmb3JtIGZsb2F0IGFscGhhOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFxuIgorICAgICAgICAidW5pZm9ybSBtYXQzIGNjX21hdHJpeDsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInZvaWQgbWFpbigpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAi
ICBmbG9hdCB5ID0gdGV4dHVyZTJEKHlfdGV4dHVyZSwgdl90ZXhDb29yZCkueDsgICAgICBcbiIK
KyAgICAgICAgIiAgZmxvYXQgdSA9IHRleHR1cmUyRCh1X3RleHR1cmUsIHZfdGV4Q29vcmQpLnIg
LSAuNTsgXG4iCisgICAgICAgICIgIGZsb2F0IHYgPSB0ZXh0dXJlMkQodl90ZXh0dXJlLCB2X3Rl
eENvb3JkKS5yIC0gLjU7IFxuIgorICAgICAgICAiICB2ZWMzIHJnYiA9IGNjX21hdHJpeCAqIHZl
YzMoeSwgdSwgdik7ICAgICAgICAgICAgICBcbiIKKyAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0g
dmVjNChyZ2IsIGFscGhhKTsgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKworICAg
IGNoYXIgcmdiYUZyYWdtZW50U2hhZGVyU3RyaW5nW10gPQorICAgICAgICAicHJlY2lzaW9uIG1l
ZGl1bXAgZmxvYXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInZh
cnlpbmcgdmVjMiB2X3RleENvb3JkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisg
ICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCByZ2JhX3RleHR1cmU7ICAgICAgICAgICAgICAgICAg
ICAgIFxuIgorICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICIgIHZlYzQgdGV4Q29sb3IgPSB0
ZXh0dXJlMkQocmdiYV90ZXh0dXJlLCB2ZWMyKHZfdGV4Q29vcmQueCwgMS4wIC0gdl90ZXhDb29y
ZC55KSk7IFxuIgorICAgICAgICAiICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHRleENvbG9yLngsIHRl
eENvbG9yLnksIHRleENvbG9yLnosIHRleENvbG9yLncpOyBcbiIKKyAgICAgICAgIn0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOworCisgICAg
bV9yZ2JhU2hhZGVyUHJvZ3JhbSA9IGNyZWF0ZVNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU3Ry
aW5nLCByZ2JhRnJhZ21lbnRTaGFkZXJTdHJpbmcpOworICAgIGlmICghbV9yZ2JhU2hhZGVyUHJv
Z3JhbSkgeworICAgICAgICBMT0dfRVJST1IoIlZpZGVvTGF5ZXJDaHJvbWl1bTogRmFpbGVkIHRv
IGNyZWF0ZSByZ2JhIHNoYWRlciBwcm9ncmFtIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBtX3l1dlNoYWRlclByb2dyYW0gPSBjcmVhdGVTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRl
clN0cmluZywgeXV2RnJhZ21lbnRTaGFkZXJTdHJpbmcpOworICAgIGlmICghbV95dXZTaGFkZXJQ
cm9ncmFtKSB7CisgICAgICAgIExPR19FUlJPUigiVmlkZW9MYXllckNocm9taXVtOiBGYWlsZWQg
dG8gY3JlYXRlIHl1diBzaGFkZXIgcHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgR0xDKG1feXV2U2hhZGVyTWF0cml4TG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlv
bihtX3l1dlNoYWRlclByb2dyYW0sICJtYXRyaXgiKSk7CisgICAgR0xDKG1feXV2V2lkdGhTY2Fs
ZUZhY3RvckxvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV95dXZTaGFkZXJQcm9ncmFt
LCAid2lkdGhTY2FsZUZhY3RvciIpKTsKKyAgICBHTEMobV95VGV4dHVyZUxvY2F0aW9uID0gZ2xH
ZXRVbmlmb3JtTG9jYXRpb24obV95dXZTaGFkZXJQcm9ncmFtLCAieV90ZXh0dXJlIikpOworICAg
IEdMQyhtX3VUZXh0dXJlTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX3l1dlNoYWRl
clByb2dyYW0sICJ1X3RleHR1cmUiKSk7CisgICAgR0xDKG1fdlRleHR1cmVMb2NhdGlvbiA9IGds
R2V0VW5pZm9ybUxvY2F0aW9uKG1feXV2U2hhZGVyUHJvZ3JhbSwgInZfdGV4dHVyZSIpKTsKKyAg
ICBHTEMobV9jY01hdHJpeExvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV95dXZTaGFk
ZXJQcm9ncmFtLCAiY2NfbWF0cml4IikpOworICAgIEdMQyhtX3l1dkFscGhhTG9jYXRpb24gPSBn
bEdldFVuaWZvcm1Mb2NhdGlvbihtX3l1dlNoYWRlclByb2dyYW0sICJhbHBoYSIpKTsKKworICAg
IEFTU0VSVChtX3l1dlNoYWRlck1hdHJpeExvY2F0aW9uICE9IC0xKTsKKyAgICBBU1NFUlQobV95
dXZXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24gIT0gLTEpOworICAgIEFTU0VSVChtX3lUZXh0dXJl
TG9jYXRpb24gIT0gLTEpOworICAgIEFTU0VSVChtX3VUZXh0dXJlTG9jYXRpb24gIT0gLTEpOwor
ICAgIEFTU0VSVChtX3ZUZXh0dXJlTG9jYXRpb24gIT0gLTEpOworICAgIEFTU0VSVChtX2NjTWF0
cml4TG9jYXRpb24gIT0gLTEpOworICAgIEFTU0VSVChtX3l1dkFscGhhTG9jYXRpb24gIT0gLTEp
OworCisgICAgR0xDKG1fcmdiYVNoYWRlck1hdHJpeExvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9j
YXRpb24obV9yZ2JhU2hhZGVyUHJvZ3JhbSwgIm1hdHJpeCIpKTsKKyAgICBHTEMobV9yZ2JhVGV4
dHVyZUxvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9yZ2JhU2hhZGVyUHJvZ3JhbSwg
InJnYmFfdGV4dHVyZSIpKTsKKyAgICBHTEMobV9yZ2JhV2lkdGhTY2FsZUZhY3RvckxvY2F0aW9u
ID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9yZ2JhU2hhZGVyUHJvZ3JhbSwgIndpZHRoU2NhbGVG
YWN0b3IiKSk7CisKKyAgICBBU1NFUlQobV9yZ2JhU2hhZGVyTWF0cml4TG9jYXRpb24gIT0gLTEp
OworICAgIEFTU0VSVChtX3JnYmFUZXh0dXJlTG9jYXRpb24gIT0gLTEpOworICAgIEFTU0VSVCht
X3JnYmFXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24gIT0gLTEpOworCisgICAgbV9pbml0aWFsaXpl
ZCA9IHRydWU7Cit9CisKK1ZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp+U2hhcmVk
VmFsdWVzKCkKK3sKKyAgICBpZiAobV95dXZTaGFkZXJQcm9ncmFtKQorICAgICAgICBHTEMoZ2xE
ZWxldGVQcm9ncmFtKG1feXV2U2hhZGVyUHJvZ3JhbSkpOworICAgIGlmIChtX3JnYmFTaGFkZXJQ
cm9ncmFtKQorICAgICAgICBHTEMoZ2xEZWxldGVQcm9ncmFtKG1fcmdiYVNoYWRlclByb2dyYW0p
KTsKK30KKwogUGFzc1JlZlB0cjxWaWRlb0xheWVyQ2hyb21pdW0+IFZpZGVvTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW9GcmFtZVByb3Zp
ZGVyKiBwcm92aWRlcikKIHsKQEAgLTU1LDE0ICsxNjcsMjQgQEAgUGFzc1JlZlB0cjxWaWRlb0xh
eWVyQ2hyb21pdW0+IFZpZGVvTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bSoKIH0KIAogVmlkZW9MYXllckNocm9taXVtOjpWaWRlb0xheWVyQ2hyb21pdW0oR3JhcGhp
Y3NMYXllckNocm9taXVtKiBvd25lciwgVmlkZW9GcmFtZVByb3ZpZGVyKiBwcm92aWRlcikKLSAg
ICA6IENvbnRlbnRMYXllckNocm9taXVtKG93bmVyKQotI2lmIFBMQVRGT1JNKFNLSUEpCi0gICAg
LCBtX2NhbnZhcygwKQotICAgICwgbV9za2lhQ29udGV4dCgwKQotI2VuZGlmCi0gICAgLCBtX2dy
YXBoaWNzQ29udGV4dCgwKQorICAgIDogTGF5ZXJDaHJvbWl1bShvd25lcikKKyAgICAsIG1fc2tp
cHNEcmF3KHRydWUpCisgICAgLCBtX3JnYmFUZXh0dXJlKDApCisgICAgLCBtX2ZyYW1lRm9ybWF0
KFZpZGVvRnJhbWVDaHJvbWl1bTo6SW52YWxpZCkKICAgICAsIG1fcHJvdmlkZXIocHJvdmlkZXIp
CisgICAgLCBtX2FsbG9jYXRlZFRleHR1cmVTaXplKEludFNpemUoLTEsIC0xKSkKIHsKKyAgICBt
X3l1dlRleHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6Y1lQbGFuZV0gPSAwOworICAgIG1feXV2
VGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjpjVVBsYW5lXSA9IDA7CisgICAgbV95dXZUZXh0
dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OmNWUGxhbmVdID0gMDsKK30KKworVmlkZW9MYXllckNo
cm9taXVtOjp+VmlkZW9MYXllckNocm9taXVtKCkKK3sKKyAgICBpZiAobV95dXZUZXh0dXJlcykK
KyAgICAgICAgR0xDKGdsRGVsZXRlVGV4dHVyZXMoMywgc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50
Kj4obV95dXZUZXh0dXJlcykpKTsKKyAgICBpZiAobV9yZ2JhVGV4dHVyZSkKKyAgICAgICAgR0xD
KGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fcmdiYVRleHR1cmUpKTsKIH0KIAogdm9pZCBWaWRlb0xh
eWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKCkKQEAgLTczLDEyNiArMTk1LDE5NyBAQCB2b2lk
IFZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHMoKQogCiAgICAgQVNTRVJUKGRyYXdz
Q29udGVudCgpKTsKIAotICAgIEludFJlY3QgZGlydHlSZWN0KG1fZGlydHlSZWN0KTsKLSAgICBJ
bnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemU7Ci0KLSNpZiBQTEFURk9STShTS0lBKQotICAgIHJl
cXVpcmVkVGV4dHVyZVNpemUgPSBtX2JvdW5kczsKLSAgICBJbnRSZWN0IGJvdW5kc1JlY3QoSW50
UG9pbnQoMCwgMCksIG1fYm91bmRzKTsKLQotICAgIC8vIElmIHRoZSB0ZXh0dXJlIG5lZWRzIHRv
IGJlIHJlYWxsb2NhdGVkLCB0aGVuIHdlIG11c3QgcmVkcmF3IHRoZSBlbnRpcmUKLSAgICAvLyBj
b250ZW50cyBvZiB0aGUgbGF5ZXIuCi0gICAgaWYgKHJlcXVpcmVkVGV4dHVyZVNpemUgIT0gbV9h
bGxvY2F0ZWRUZXh0dXJlU2l6ZSkKLSAgICAgICAgZGlydHlSZWN0ID0gYm91bmRzUmVjdDsKLSAg
ICBlbHNlIHsKLSAgICAgICAgLy8gQ2xpcCB0aGUgZGlydHlSZWN0IHRvIHRoZSBzaXplIG9mIHRo
ZSBsYXllciB0byBhdm9pZCBkcmF3aW5nIG91dHNpZGUKLSAgICAgICAgLy8gdGhlIGJvdW5kcyBv
ZiB0aGUgYmFja2luZyB0ZXh0dXJlLgotICAgICAgICBkaXJ0eVJlY3QuaW50ZXJzZWN0KGJvdW5k
c1JlY3QpOwotICAgIH0KLQotICAgIGlmICghbV9jYW52YXMuZ2V0KCkKLSAgICAgICAgfHwgZGly
dHlSZWN0LndpZHRoKCkgIT0gbV9jYW52YXMtPmdldERldmljZSgpLT53aWR0aCgpCi0gICAgICAg
IHx8IGRpcnR5UmVjdC5oZWlnaHQoKSAhPSBtX2NhbnZhcy0+Z2V0RGV2aWNlKCktPmhlaWdodCgp
KSB7Ci0gICAgICAgIG1fY2FudmFzID0gbmV3IHNraWE6OlBsYXRmb3JtQ2FudmFzKGRpcnR5UmVj
dC53aWR0aCgpLCBkaXJ0eVJlY3QuaGVpZ2h0KCksIHRydWUpOwotICAgICAgICBtX3NraWFDb250
ZXh0ID0gbmV3IFBsYXRmb3JtQ29udGV4dFNraWEobV9jYW52YXMuZ2V0KCkpOworICAgIFZpZGVv
RnJhbWVDaHJvbWl1bSogZnJhbWUgPSAwOworICAgIGJvb2wgbmVlZHNBbGxvY2F0ZSA9IGZhbHNl
OworICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7CiAKLSAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQg
dG8gZ2V0IHRleHQgdG8gc2hvdyB1cCBjb3JyZWN0bHkuCi0gICAgICAgIC8vIEZJWE1FOiBEb2Vz
IHRoaXMgdGFrZSB1cyBkb3duIGEgdmVyeSBzbG93IHRleHQgcmVuZGVyaW5nIHBhdGg/Ci0gICAg
ICAgIG1fc2tpYUNvbnRleHQtPnNldERyYXdpbmdUb0ltYWdlQnVmZmVyKHRydWUpOwotICAgICAg
ICBtX2dyYXBoaWNzQ29udGV4dCA9IG5ldyBHcmFwaGljc0NvbnRleHQocmVpbnRlcnByZXRfY2Fz
dDxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCo+KG1fc2tpYUNvbnRleHQuZ2V0KCkpKTsKKyAgICBm
cmFtZSA9IG1fcHJvdmlkZXItPmdldEN1cnJlbnRGcmFtZSgpOworICAgIGlmICghZnJhbWUpIHsK
KyAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOworICAgICAgICBtX3Byb3ZpZGVyLT5wdXRDdXJy
ZW50RnJhbWUoZnJhbWUpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gQnJpbmcg
dGhlIGNhbnZhcyBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFpbnQgcmVjdC4K
LSAgICBtX2NhbnZhcy0+dHJhbnNsYXRlKHN0YXRpY19jYXN0PFNrU2NhbGFyPigtZGlydHlSZWN0
LngoKSksIHN0YXRpY19jYXN0PFNrU2NhbGFyPigtZGlydHlSZWN0LnkoKSkpOwotCisgICAgSW50
U2l6ZSByZXF1aXJlZFRleHR1cmVTaXplKGZyYW1lLT5zdHJpZGUoVmlkZW9GcmFtZUNocm9taXVt
OjpjWVBsYW5lKSwgZnJhbWUtPmhlaWdodCgpKTsKICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMg
dGVzdCB3aGVuIHRpbGVkIGxheWVycyBhcmUgaW1wbGVtZW50ZWQuCi0gICAgbV9za2lwc0RyYXcg
PSBmYWxzZTsKICAgICBpZiAoIWxheWVyUmVuZGVyZXIoKS0+Y2hlY2tUZXh0dXJlU2l6ZShyZXF1
aXJlZFRleHR1cmVTaXplKSkgewogICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7CisgICAgICAg
IG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICB1bnNpZ25lZCB0ZXh0dXJlSWQgPSBtX2NvbnRlbnRzVGV4dHVyZTsKLSAgICBp
ZiAoIXRleHR1cmVJZCkKLSAgICAgICAgdGV4dHVyZUlkID0gbGF5ZXJSZW5kZXJlcigpLT5jcmVh
dGVMYXllclRleHR1cmUoKTsKKyAgICAvLyBJZiB0aGUgdGV4dHVyZSBuZWVkcyB0byBiZSByZWFs
bG9jYXRlZCwgdGhlbiB3ZSBtdXN0IHJlZHJhdyB0aGUgZW50aXJlCisgICAgLy8gY29udGVudHMg
b2YgdGhlIGxheWVyLgorICAgIGlmIChyZXF1aXJlZFRleHR1cmVTaXplICE9IG1fYWxsb2NhdGVk
VGV4dHVyZVNpemUpIHsKKyAgICAgICAgbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSA9IHJlcXVpcmVk
VGV4dHVyZVNpemU7CisgICAgICAgIG1fZnJhbWVXaWR0aCA9IGZyYW1lLT53aWR0aCgpOworICAg
ICAgICBuZWVkc0FsbG9jYXRlID0gdHJ1ZTsKKyAgICB9CiAKLSAgICAvLyBJZiB0aGUgdGV4dHVy
ZSBpZCBvciBzaXplIGNoYW5nZWQgc2luY2UgbGFzdCB0aW1lLCB0aGVuIHdlIG5lZWQgdG8gdGVs
bCBHTAotICAgIC8vIHRvIHJlLWFsbG9jYXRlIGEgdGV4dHVyZS4KLSAgICBpZiAobV9jb250ZW50
c1RleHR1cmUgIT0gdGV4dHVyZUlkIHx8IHJlcXVpcmVkVGV4dHVyZVNpemUgIT0gbV9hbGxvY2F0
ZWRUZXh0dXJlU2l6ZSkKLSAgICAgICAgY3JlYXRlVGV4dHVyZVJlY3QocmVxdWlyZWRUZXh0dXJl
U2l6ZSwgZGlydHlSZWN0LCB0ZXh0dXJlSWQpOwotICAgIGVsc2UKLSAgICAgICAgdXBkYXRlVGV4
dHVyZVJlY3QoZGlydHlSZWN0LCB0ZXh0dXJlSWQpOwotI2Vsc2UKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50IG5vbi1za2lhIHBhdGgKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotI2VuZGlmCi19Ci0K
LXZvaWQgVmlkZW9MYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlUmVjdChjb25zdCBJbnRTaXpl
JiByZXF1aXJlZFRleHR1cmVTaXplLCBjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCB1bnNpZ25l
ZCB0ZXh0dXJlSWQpCi17Ci0gICAgLy8gUGFpbnQgaW50byBncmFwaGljcyBjb250ZXh0IGFuZCBn
ZXQgYml0bWFwLgotICAgIG1fb3duZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKCptX2dy
YXBoaWNzQ29udGV4dCwgdXBkYXRlUmVjdCk7Ci0gICAgdm9pZCogcGl4ZWxzID0gMDsKLSAgICBJ
bnRTaXplIGJpdG1hcFNpemUgPSBJbnRTaXplKCk7Ci0jaWYgUExBVEZPUk0oU0tJQSkKLSAgICBj
b25zdCBTa0JpdG1hcCYgYml0bWFwID0gbV9jYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRt
YXAoZmFsc2UpOwotICAgIGNvbnN0IFNrQml0bWFwKiBza2lhQml0bWFwID0gJmJpdG1hcDsKLSAg
ICBBU1NFUlQoc2tpYUJpdG1hcCk7Ci0KLSAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soKnNraWFC
aXRtYXApOwotICAgIFNrQml0bWFwOjpDb25maWcgc2tpYUNvbmZpZyA9IHNraWFCaXRtYXAtPmNv
bmZpZygpOwotICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIHN1cHBvcnQgbW9yZSBpbWFnZSBj
b25maWd1cmF0aW9ucz8KLSAgICBpZiAoc2tpYUNvbmZpZyA9PSBTa0JpdG1hcDo6a0FSR0JfODg4
OF9Db25maWcpIHsKLSAgICAgICAgcGl4ZWxzID0gc2tpYUJpdG1hcC0+Z2V0UGl4ZWxzKCk7Ci0g
ICAgICAgIGJpdG1hcFNpemUgPSBJbnRTaXplKHNraWFCaXRtYXAtPndpZHRoKCksIHNraWFCaXRt
YXAtPmhlaWdodCgpKTsKKyAgICBtX2ZyYW1lRm9ybWF0ID0gZnJhbWUtPmZvcm1hdCgpOworICAg
IHN3aXRjaCAobV9mcmFtZUZvcm1hdCkgeworICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpZ
VjEyOgorICAgICAgICB1cGRhdGVZVVZDb250ZW50cyhmcmFtZSwgbmVlZHNBbGxvY2F0ZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpSR0JBOgorICAgICAg
ICB1cGRhdGVSR0JBQ29udGVudHMoZnJhbWUsIG5lZWRzQWxsb2NhdGUpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG90aGVyIHBhdGhz
LgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBicmVhazsKICAgICB9Ci0jZWxz
ZQotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbm9uLXNraWEgcGF0aAotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0jZW5kaWYKLSAgICBpZiAoIXBpeGVscykKLSAgICAgICAgcmV0dXJuOwogCi0gICAg
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlSWQpOwotICAgIEFTU0VSVChiaXRt
YXBTaXplID09IHJlcXVpcmVkVGV4dHVyZVNpemUpOwotICAgIGdsVGV4SW1hZ2UyRChHTF9URVhU
VVJFXzJELCAwLCBHTF9SR0JBLCByZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCksIHJlcXVpcmVk
VGV4dHVyZVNpemUuaGVpZ2h0KCksIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVs
cyk7CisgICAgbV9wcm92aWRlci0+cHV0Q3VycmVudEZyYW1lKGZyYW1lKTsKK30KIAotICAgIG1f
Y29udGVudHNUZXh0dXJlID0gdGV4dHVyZUlkOwotICAgIG1fYWxsb2NhdGVkVGV4dHVyZVNpemUg
PSByZXF1aXJlZFRleHR1cmVTaXplOwordm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZVlV
VkNvbnRlbnRzKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUsIGJvb2wgbmVlZHNBbGxv
Y2F0ZSkKK3sKKyAgICAvLyBJZiB0aGUgZGltZW5zaW9ucyBjaGFuZ2VkIHNpbmNlIGxhc3QgdGlt
ZSwgdGhlbiB3ZSBuZWVkIHRvIHRlbGwgR0wKKyAgICAvLyB0byByZS1hbGxvY2F0ZSBhIHRleHR1
cmUuCisgICAgaWYgKG5lZWRzQWxsb2NhdGUpIHsKKyAgICAgICAgaWYgKG1feXV2VGV4dHVyZXMp
CisgICAgICAgICAgICBHTEMoZ2xEZWxldGVUZXh0dXJlcygzLCBzdGF0aWNfY2FzdDxjb25zdCBH
THVpbnQqPihtX3l1dlRleHR1cmVzKSkpOworICAgICAgICBtX3l1dlRleHR1cmVzW1ZpZGVvRnJh
bWVDaHJvbWl1bTo6Y1lQbGFuZV0gPSBsYXllclJlbmRlcmVyKCktPmNyZWF0ZUxheWVyVGV4dHVy
ZSgpOworICAgICAgICBtX3l1dlRleHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6Y1VQbGFuZV0g
PSBsYXllclJlbmRlcmVyKCktPmNyZWF0ZUxheWVyVGV4dHVyZSgpOworICAgICAgICBtX3l1dlRl
eHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6Y1ZQbGFuZV0gPSBsYXllclJlbmRlcmVyKCktPmNy
ZWF0ZUxheWVyVGV4dHVyZSgpOworICAgICAgICBhbGxvY2F0ZVlVVlRleHR1cmVzKGZyYW1lKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgdXBkYXRlWVVWVGV4dHVyZXMoZnJhbWUpOwogCi0gICAgdXBk
YXRlQ29tcGxldGVkKCk7CisgICAgdXBkYXRlQ29udGVudHNDb21wbGV0ZWQoKTsKIH0KIAotdm9p
ZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVSZWN0KGNvbnN0IEludFJlY3QmIHVw
ZGF0ZVJlY3QsIHVuc2lnbmVkIHRleHR1cmVJZCkKK3ZvaWQgVmlkZW9MYXllckNocm9taXVtOjph
bGxvY2F0ZVlVVlRleHR1cmVzKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUpCiB7Ci0j
aWYgUExBVEZPUk0oU0tJQSkKLSAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gbV9jYW52YXMt
PmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAodHJ1ZSk7Ci0gICAgU2tCaXRtYXAqIHNraWFCaXRt
YXAgPSBjb25zdF9jYXN0PFNrQml0bWFwKj4oJmJpdG1hcCk7Ci0gICAgQVNTRVJUKHNraWFCaXRt
YXApOworICAgIEFTU0VSVChmcmFtZSk7CisgICAgQVNTRVJUKGZyYW1lLT5zdHJpZGUoVmlkZW9G
cmFtZUNocm9taXVtOjpjWVBsYW5lKSA9PSBtX2FsbG9jYXRlZFRleHR1cmVTaXplLndpZHRoKCkp
OworICAgIEFTU0VSVChmcmFtZS0+aGVpZ2h0KCkgPT0gbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZS5o
ZWlnaHQoKSk7CisKKyAgICBJbnRTaXplIHlEaW1lbnNpb25zKGZyYW1lLT5zdHJpZGUoVmlkZW9G
cmFtZUNocm9taXVtOjpjWVBsYW5lKSwgZnJhbWUtPmhlaWdodCgpKTsKKyAgICBhbGxvY2F0ZVRl
eHR1cmUobV95dXZUZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OmNZUGxhbmVdLCBmcmFtZS0+
ZGF0YShWaWRlb0ZyYW1lQ2hyb21pdW06OmNZUGxhbmUpLCB5RGltZW5zaW9ucywgR0xfTFVNSU5B
TkNFKTsKKyAgICBJbnRTaXplIHV2RGltZW5zaW9ucyhmcmFtZS0+c3RyaWRlKFZpZGVvRnJhbWVD
aHJvbWl1bTo6Y1VQbGFuZSksIGZyYW1lLT5oZWlnaHQoKSAvIDIpOworICAgIGFsbG9jYXRlVGV4
dHVyZShtX3l1dlRleHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6Y1VQbGFuZV0sIGZyYW1lLT5k
YXRhKFZpZGVvRnJhbWVDaHJvbWl1bTo6Y1VQbGFuZSksIHV2RGltZW5zaW9ucywgR0xfTFVNSU5B
TkNFKTsKKyAgICBhbGxvY2F0ZVRleHR1cmUobV95dXZUZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21p
dW06OmNWUGxhbmVdLCBmcmFtZS0+ZGF0YShWaWRlb0ZyYW1lQ2hyb21pdW06OmNWUGxhbmUpLCB1
dkRpbWVuc2lvbnMsIEdMX0xVTUlOQU5DRSk7Cit9CiAKLSAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxv
Y2soKnNraWFCaXRtYXApOwotICAgIFNrQml0bWFwOjpDb25maWcgc2tpYUNvbmZpZyA9IHNraWFC
aXRtYXAtPmNvbmZpZygpOwordm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZVlVVlRleHR1
cmVzKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUpCit7CisgICAgQVNTRVJUKGZyYW1l
KTsKKyAgICBBU1NFUlQoZnJhbWUtPnN0cmlkZShWaWRlb0ZyYW1lQ2hyb21pdW06OmNZUGxhbmUp
ID09IG1fYWxsb2NhdGVkVGV4dHVyZVNpemUud2lkdGgoKSk7CisgICAgQVNTRVJUKGZyYW1lLT5o
ZWlnaHQoKSA9PSBtX2FsbG9jYXRlZFRleHR1cmVTaXplLmhlaWdodCgpKTsKIAotICAgIGlmIChz
a2lhQ29uZmlnID09IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZykgewotICAgICAgICBnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmVJZCk7Ci0gICAgICAgIHZvaWQqIG1lbSA9
IGdsTWFwVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB1cGRhdGVSZWN0LngoKSwgdXBk
YXRlUmVjdC55KCksIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwgR0xf
UkdCQSwgR0xfVU5TSUdORURfQllURSwgR0xfV1JJVEVfT05MWSk7Ci0gICAgICAgIHNraWFCaXRt
YXAtPnNldFBpeGVscyhtZW0pOwotICAgICAgICBtX293bmVyLT5wYWludEdyYXBoaWNzTGF5ZXJD
b250ZW50cygqbV9ncmFwaGljc0NvbnRleHQsIHVwZGF0ZVJlY3QpOwotICAgICAgICBnbFVubWFw
VGV4U3ViSW1hZ2UyRChtZW0pOwotICAgIH0KKyAgICBJbnRTaXplIHlEaW1lbnNpb25zKGZyYW1l
LT5zdHJpZGUoVmlkZW9GcmFtZUNocm9taXVtOjpjWVBsYW5lKSwgZnJhbWUtPmhlaWdodCgpKTsK
KyAgICB1cGRhdGVUZXh0dXJlKG1feXV2VGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjpjWVBs
YW5lXSwgZnJhbWUtPmRhdGEoVmlkZW9GcmFtZUNocm9taXVtOjpjWVBsYW5lKSwgeURpbWVuc2lv
bnMsIEdMX0xVTUlOQU5DRSk7CisgICAgSW50U2l6ZSB1dkRpbWVuc2lvbnMoZnJhbWUtPnN0cmlk
ZShWaWRlb0ZyYW1lQ2hyb21pdW06OmNVUGxhbmUpLCBmcmFtZS0+aGVpZ2h0KCkgLyAyKTsKKyAg
ICB1cGRhdGVUZXh0dXJlKG1feXV2VGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjpjVVBsYW5l
XSwgZnJhbWUtPmRhdGEoVmlkZW9GcmFtZUNocm9taXVtOjpjVVBsYW5lKSwgdXZEaW1lbnNpb25z
LCBHTF9MVU1JTkFOQ0UpOworICAgIHVwZGF0ZVRleHR1cmUobV95dXZUZXh0dXJlc1tWaWRlb0Zy
YW1lQ2hyb21pdW06OmNWUGxhbmVdLCBmcmFtZS0+ZGF0YShWaWRlb0ZyYW1lQ2hyb21pdW06OmNW
UGxhbmUpLCB1dkRpbWVuc2lvbnMsIEdMX0xVTUlOQU5DRSk7Cit9CiAKLSAgICB1cGRhdGVDb21w
bGV0ZWQoKTsKLSNlbHNlCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCBub24tc2tpYSBwYXRoCi0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSNlbmRpZgordm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVw
ZGF0ZVJHQkFDb250ZW50cyhjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lLCBib29sIG5l
ZWRzQWxsb2NhdGUpCit7CisgICAgQVNTRVJUKGZyYW1lKTsKKyAgICBBU1NFUlQoZnJhbWUtPnN0
cmlkZShWaWRlb0ZyYW1lQ2hyb21pdW06OmNZUGxhbmUpID09IG1fYWxsb2NhdGVkVGV4dHVyZVNp
emUud2lkdGgoKSk7CisgICAgQVNTRVJUKGZyYW1lLT5oZWlnaHQoKSA9PSBtX2FsbG9jYXRlZFRl
eHR1cmVTaXplLmhlaWdodCgpKTsKKworICAgIEludFNpemUgZnJhbWVEaW1lbnNpb25zKGZyYW1l
LT5zdHJpZGUoVmlkZW9GcmFtZUNocm9taXVtOjpjUkdCUGxhbmUpLCBmcmFtZS0+aGVpZ2h0KCkp
OworICAgIGlmIChuZWVkc0FsbG9jYXRlKSB7CisgICAgICAgIGlmIChtX3JnYmFUZXh0dXJlKQor
ICAgICAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9yZ2JhVGV4dHVyZSk7CisgICAgICAg
IG1fcmdiYVRleHR1cmUgPSBsYXllclJlbmRlcmVyKCktPmNyZWF0ZUxheWVyVGV4dHVyZSgpOwor
ICAgICAgICBhbGxvY2F0ZVRleHR1cmUobV9yZ2JhVGV4dHVyZSwgZnJhbWUtPmRhdGEoVmlkZW9G
cmFtZUNocm9taXVtOjpjUkdCUGxhbmUpLCBmcmFtZURpbWVuc2lvbnMsIEdMX1JHQkEpOworICAg
IH0gZWxzZQorICAgICAgICB1cGRhdGVUZXh0dXJlKG1fcmdiYVRleHR1cmUsIGZyYW1lLT5kYXRh
KFZpZGVvRnJhbWVDaHJvbWl1bTo6Y1JHQlBsYW5lKSwgZnJhbWVEaW1lbnNpb25zLCBHTF9SR0JB
KTsKKworICAgIHVwZGF0ZUNvbnRlbnRzQ29tcGxldGVkKCk7Cit9CisKK3ZvaWQgVmlkZW9MYXll
ckNocm9taXVtOjphbGxvY2F0ZVRleHR1cmUodW5zaWduZWQgdGV4dHVyZUlkLCBjb25zdCB2b2lk
KiBkYXRhLCBjb25zdCBJbnRTaXplJiBkaW1lbnNpb25zLCBHTGVudW0gZm9ybWF0KQoreworICAg
IEdMQyhnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmVJZCkpOworICAgIEdMQyhn
bFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgZm9ybWF0LCBkaW1lbnNpb25zLndpZHRoKCks
IGRpbWVuc2lvbnMuaGVpZ2h0KCksIDAsIEdMX0xVTUlOQU5DRSwgR0xfVU5TSUdORURfQllURSwg
ZGF0YSkpOworICAgIEFTU0VSVChnbEdldEVycm9yKCkgPT0gMCk7Cit9CisKK3ZvaWQgVmlkZW9M
YXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlKHVuc2lnbmVkIHRleHR1cmVJZCwgY29uc3Qgdm9p
ZCogZGF0YSwgY29uc3QgSW50U2l6ZSYgZGltZW5zaW9ucywgR0xlbnVtIGZvcm1hdCkKK3sKKyAg
ICBHTEMoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlSWQpKTsKKyAgICB2b2lk
KiBtZW0gPSBnbE1hcFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgMCwgMCwgZGltZW5z
aW9ucy53aWR0aCgpLCBkaW1lbnNpb25zLmhlaWdodCgpLCBmb3JtYXQsIEdMX1VOU0lHTkVEX0JZ
VEUsIEdMX1dSSVRFX09OTFkpOworICAgIGlmIChtZW0pIHsKKyAgICAgICAgbWVtY3B5KG1lbSwg
ZGF0YSwgZGltZW5zaW9ucy53aWR0aCgpICogZGltZW5zaW9ucy5oZWlnaHQoKSk7CisgICAgICAg
IGdsVW5tYXBUZXhTdWJJbWFnZTJEKG1lbSk7CisgICAgICAgIEFTU0VSVChnbEdldEVycm9yKCkg
PT0gMCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsKIH0KIAotdm9p
ZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBsZXRlZCgpCit2b2lkIFZpZGVvTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlQ29udGVudHNDb21wbGV0ZWQoKQogewogICAgIG1fZGlydHlSZWN0LnNl
dFNpemUoRmxvYXRTaXplKCkpOwogICAgIG1fY29udGVudHNEaXJ0eSA9IGZhbHNlOwogfQogCit2
b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6ZHJhdygpCit7CisgICAgaWYgKG1fc2tpcHNEcmF3KQor
ICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKKyAgICBjb25z
dCBWaWRlb0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyogc3YgPSBsYXllclJlbmRlcmVyKCkt
PnZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXMoKTsKKyAgICBBU1NFUlQoc3YgJiYgc3YtPmluaXRpYWxp
emVkKCkpOworCisgICAgc3dpdGNoIChtX2ZyYW1lRm9ybWF0KSB7CisgICAgY2FzZSBWaWRlb0Zy
YW1lQ2hyb21pdW06OllWMTI6CisgICAgICAgIGRyYXdZVVYoc3YpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6UkdCQToKKyAgICAgICAgZHJhd1JHQkEoc3Yp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IG90aGVyIHBhdGhzLgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKIH0KKwordm9pZCBW
aWRlb0xheWVyQ2hyb21pdW06OmRyYXdZVVYoY29uc3QgU2hhcmVkVmFsdWVzKiBzdikKK3sKKyAg
ICBHTEMoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKSk7CisgICAgR0xDKGdsQmluZFRleHR1
cmUoR0xfVEVYVFVSRV8yRCwgbV95dXZUZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OmNZUGxh
bmVdKSk7CisgICAgR0xDKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMikpOworICAgIEdMQyhn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1feXV2VGV4dHVyZXNbVmlkZW9GcmFtZUNocm9t
aXVtOjpjVVBsYW5lXSkpOworICAgIEdMQyhnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTMpKTsK
KyAgICBHTEMoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3l1dlRleHR1cmVzW1ZpZGVv
RnJhbWVDaHJvbWl1bTo6Y1ZQbGFuZV0pKTsKKworICAgIGxheWVyUmVuZGVyZXIoKS0+dXNlU2hh
ZGVyKHN2LT55dXZTaGFkZXJQcm9ncmFtKCkpOworICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3Ig
PSBzdGF0aWNfY2FzdDxmbG9hdD4obV9mcmFtZVdpZHRoKSAvIG1fYWxsb2NhdGVkVGV4dHVyZVNp
emUud2lkdGgoKTsKKyAgICBHTEMoZ2xVbmlmb3JtMWYoc3YtPnl1dldpZHRoU2NhbGVGYWN0b3JM
b2NhdGlvbigpLCB3aWR0aFNjYWxlRmFjdG9yKSk7CisgICAgR0xDKGdsVW5pZm9ybTFpKHN2LT55
VGV4dHVyZUxvY2F0aW9uKCksIDEpKTsKKyAgICBHTEMoZ2xVbmlmb3JtMWkoc3YtPnVUZXh0dXJl
TG9jYXRpb24oKSwgMikpOworICAgIEdMQyhnbFVuaWZvcm0xaShzdi0+dlRleHR1cmVMb2NhdGlv
bigpLCAzKSk7CisgICAgR0xDKGdsVW5pZm9ybU1hdHJpeDNmdihzdi0+Y2NNYXRyaXhMb2NhdGlv
bigpLCAxLCBHTF9GQUxTRSwgY1lVVjJSR0IpKTsKKworICAgIGRyYXdUZXh0dXJlZFF1YWQobGF5
ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGRyYXdUcmFuc2Zvcm0oKSwKKyAgICAg
ICAgICAgICAgICAgICAgIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3
T3BhY2l0eSgpLAorICAgICAgICAgICAgICAgICAgICAgc3YtPnl1dlNoYWRlck1hdHJpeExvY2F0
aW9uKCksIHN2LT55dXZBbHBoYUxvY2F0aW9uKCkpOworfQorCit2b2lkIFZpZGVvTGF5ZXJDaHJv
bWl1bTo6ZHJhd1JHQkEoY29uc3QgU2hhcmVkVmFsdWVzKiBzdikKK3sKKyAgICBHTEMoZ2xBY3Rp
dmVUZXh0dXJlKEdMX1RFWFRVUkUwKSk7CisgICAgR0xDKGdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgbV9yZ2JhVGV4dHVyZSkpOworCisgICAgbGF5ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIo
c3YtPnJnYmFTaGFkZXJQcm9ncmFtKCkpOworICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IgPSBz
dGF0aWNfY2FzdDxmbG9hdD4obV9mcmFtZVdpZHRoKSAvIG1fYWxsb2NhdGVkVGV4dHVyZVNpemUu
d2lkdGgoKTsKKyAgICBHTEMoZ2xVbmlmb3JtMWYoc3YtPnJnYmFXaWR0aFNjYWxlRmFjdG9yTG9j
YXRpb24oKSwgd2lkdGhTY2FsZUZhY3RvcikpOworICAgIEdMQyhnbFVuaWZvcm0xaShzdi0+cmdi
YVRleHR1cmVMb2NhdGlvbigpLCAwKSk7CisKKyAgICBkcmF3VGV4dHVyZWRRdWFkKGxheWVyUmVu
ZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCBkcmF3VHJhbnNmb3JtKCksCisgICAgICAgICAg
ICAgICAgICAgICBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNp
dHkoKSwKKyAgICAgICAgICAgICAgICAgICAgIHN2LT5yZ2JhU2hhZGVyTWF0cml4TG9jYXRpb24o
KSwgLTEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKICNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaAppbmRleCAzNTA3Y2IyMGNmMTdlNzkz
MzEyZDZlZWIzZTk1M2I3ZjhjZWJmMjU5Li5iMzM3NzUzMjIzODgxMmZhY2YwYmU5MTNmMzUxZjUx
NGFlNDVkODY5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1ZpZGVvTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVmlkZW9MYXllckNocm9taXVtLmgKQEAgLTM3LDI4ICszNyw3NCBAQAogI2luY2x1ZGUg
IkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVmlkZW9GcmFtZVByb3ZpZGVyLmgi
CiAKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBB
IExheWVyIHRoYXQgY29udGFpbnMgYSBWaWRlbyBlbGVtZW50LgotY2xhc3MgVmlkZW9MYXllckNo
cm9taXVtIDogcHVibGljIENvbnRlbnRMYXllckNocm9taXVtIHsKK2NsYXNzIFZpZGVvTGF5ZXJD
aHJvbWl1bSA6IHB1YmxpYyBMYXllckNocm9taXVtIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxWaWRlb0xheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0q
IG93bmVyID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWaWRlb0ZyYW1lUHJvdmlkZXIqID0gMCk7Ci0gICAgdmlydHVhbCBib29sIGRyYXdzQ29u
dGVudCgpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMo
KTsKKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgeyByZXR1cm4gdHJ1ZTsgfQorICAg
IHZpcnR1YWwgdm9pZCBkcmF3KCk7CisKKyAgICBjbGFzcyBTaGFyZWRWYWx1ZXMgeworICAgIHB1
YmxpYzoKKyAgICAgICAgU2hhcmVkVmFsdWVzKCk7CisgICAgICAgIH5TaGFyZWRWYWx1ZXMoKTsK
KyAgICAgICAgdW5zaWduZWQgeXV2U2hhZGVyUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIG1feXV2
U2hhZGVyUHJvZ3JhbTsgfQorICAgICAgICB1bnNpZ25lZCByZ2JhU2hhZGVyUHJvZ3JhbSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmdiYVNoYWRlclByb2dyYW07IH0KKyAgICAgICAgaW50IHl1dlNoYWRl
ck1hdHJpeExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV95dXZTaGFkZXJNYXRyaXhMb2NhdGlv
bjsgfQorICAgICAgICBpbnQgcmdiYVNoYWRlck1hdHJpeExvY2F0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9yZ2JhU2hhZGVyTWF0cml4TG9jYXRpb247IH0KKyAgICAgICAgaW50IHl1dldpZHRoU2Nh
bGVGYWN0b3JMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1feXV2V2lkdGhTY2FsZUZhY3Rvckxv
Y2F0aW9uOyB9CisgICAgICAgIGludCByZ2JhV2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9yZ2JhV2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uOyB9CisgICAgICAgIGlu
dCB5VGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV95VGV4dHVyZUxvY2F0aW9uOyB9
CisgICAgICAgIGludCB1VGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV91VGV4dHVy
ZUxvY2F0aW9uOyB9CisgICAgICAgIGludCB2VGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV92VGV4dHVyZUxvY2F0aW9uOyB9CisgICAgICAgIGludCB5dXZBbHBoYUxvY2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV95dXZBbHBoYUxvY2F0aW9uOyB9CisgICAgICAgIGludCByZ2JhVGV4
dHVyZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZ2JhVGV4dHVyZUxvY2F0aW9uOyB9Cisg
ICAgICAgIGludCBjY01hdHJpeExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jY01hdHJpeExv
Y2F0aW9uOyB9CisgICAgICAgIGJvb2wgaW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiBtX2lu
aXRpYWxpemVkOyB9OworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIG1feXV2U2hhZGVy
UHJvZ3JhbTsKKyAgICAgICAgdW5zaWduZWQgbV9yZ2JhU2hhZGVyUHJvZ3JhbTsKKyAgICAgICAg
aW50IG1feXV2U2hhZGVyTWF0cml4TG9jYXRpb247CisgICAgICAgIGludCBtX3JnYmFTaGFkZXJN
YXRyaXhMb2NhdGlvbjsKKyAgICAgICAgaW50IG1feXV2V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9u
OworICAgICAgICBpbnQgbV9yZ2JhV2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uOworICAgICAgICBp
bnQgbV95VGV4dHVyZUxvY2F0aW9uOworICAgICAgICBpbnQgbV91VGV4dHVyZUxvY2F0aW9uOwor
ICAgICAgICBpbnQgbV92VGV4dHVyZUxvY2F0aW9uOworICAgICAgICBpbnQgbV9yZ2JhVGV4dHVy
ZUxvY2F0aW9uOworICAgICAgICBpbnQgbV9jY01hdHJpeExvY2F0aW9uOworICAgICAgICBpbnQg
bV95dXZBbHBoYUxvY2F0aW9uOworICAgICAgICBib29sIG1faW5pdGlhbGl6ZWQ7CisgICAgfTsK
IAogcHJpdmF0ZToKLSAgICBWaWRlb0xheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVt
KiBvd25lciwgVmlkZW9GcmFtZVByb3ZpZGVyKik7Ci0gICAgdm9pZCBjcmVhdGVUZXh0dXJlUmVj
dChjb25zdCBJbnRTaXplJiByZXF1aXJlZFRleHR1cmVTaXplLCBjb25zdCBJbnRSZWN0JiB1cGRh
dGVSZWN0LCB1bnNpZ25lZCB0ZXh0dXJlSWQpOwotICAgIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3Qo
Y29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgdW5zaWduZWQgdGV4dHVyZUlkKTsKLSAgICB2b2lk
IHVwZGF0ZUNvbXBsZXRlZCgpOworICAgIGV4cGxpY2l0IFZpZGVvTGF5ZXJDaHJvbWl1bShHcmFw
aGljc0xheWVyQ2hyb21pdW0qIG93bmVyLCBWaWRlb0ZyYW1lUHJvdmlkZXIqIHByb3ZpZGVyKTsK
KyAgICB+VmlkZW9MYXllckNocm9taXVtKCk7CisgICAgdm9pZCB1cGRhdGVZVVZDb250ZW50cyhj
b25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qLCBib29sIG5lZWRzQWxsb2NhdGUpOworICAgIHZvaWQg
YWxsb2NhdGVZVVZUZXh0dXJlcyhjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qKTsKKyAgICB2b2lk
IHVwZGF0ZVlVVlRleHR1cmVzKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSopOworICAgIHZvaWQg
dXBkYXRlUkdCQUNvbnRlbnRzKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSosIGJvb2wgbmVlZHNB
bGxvY2F0ZSk7CisgICAgdm9pZCBhbGxvY2F0ZVRleHR1cmUodW5zaWduZWQgdGV4dHVyZUlkLCBj
b25zdCB2b2lkKiBkYXRhLCBjb25zdCBJbnRTaXplJiBkaW1lbnNpb25zLCBHTGVudW0gZm9ybWF0
KTsKKyAgICB2b2lkIHVwZGF0ZVRleHR1cmUodW5zaWduZWQgdGV4dHVyZUlkLCBjb25zdCB2b2lk
KiBkYXRhLCBjb25zdCBJbnRTaXplJiBkaW1lbnNpb25zLCBHTGVudW0gZm9ybWF0KTsKKyAgICB2
b2lkIGRyYXdZVVYoY29uc3QgU2hhcmVkVmFsdWVzKik7CisgICAgdm9pZCBkcmF3UkdCQShjb25z
dCBTaGFyZWRWYWx1ZXMqKTsKKyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzQ29tcGxldGVkKCk7CiAK
LSNpZiBQTEFURk9STShTS0lBKQotICAgIE93blB0cjxza2lhOjpQbGF0Zm9ybUNhbnZhcz4gbV9j
YW52YXM7Ci0gICAgT3duUHRyPFBsYXRmb3JtQ29udGV4dFNraWE+IG1fc2tpYUNvbnRleHQ7Ci0j
ZW5kaWYKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBtX2dyYXBoaWNzQ29udGV4dDsKKyAg
ICBJbnRTaXplIG1fYWxsb2NhdGVkVGV4dHVyZVNpemU7CisgICAgdW5zaWduZWQgbV9mcmFtZVdp
ZHRoOworICAgIFZpZGVvRnJhbWVDaHJvbWl1bTo6Rm9ybWF0IG1fZnJhbWVGb3JtYXQ7CiAgICAg
T3duUHRyPFZpZGVvRnJhbWVQcm92aWRlcj4gbV9wcm92aWRlcjsKKyAgICBib29sIG1fc2tpcHNE
cmF3OworCisgICAgc3RhdGljIGNvbnN0IGZsb2F0IGNZVVYyUkdCWzldOworICAgIHVuc2lnbmVk
IG1feXV2VGV4dHVyZXNbM107CisgICAgdW5zaWduZWQgbV9yZ2JhVGV4dHVyZTsKIH07CiAKIH0K
ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDUzYzE2YzhmYWY2ODMyOTAwNzM2YmU4NzQyZDMzNWU1ZDk3ZTg4Y2Mu
Ljg0ZWE1MDhmZGQ0Y2ZhMjUzOGUzZDRjZGQ5ZmJjZTFlNzFhZTI1ODggMTAwNjQ0Ci0tLSBhL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEzIEBACisyMDEwLTA5LTEzICBWaWN0b3JpYSBLaXJzdCAgPHZya0Bnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZp
eGluZyBjb25zdGFudHMgaW4gVmlkZW9GcmFtZUNocm9taXVtSW1wbCBzbyB0aGF0IGl0IG92ZXJs
b2FkcyB0aGUKKyAgICAgICAgVmlkZW9GcmFtZUNocm9taXVtIGNvbnN0IGRlY2xhcmF0aW9ucy4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDY5CisK
KyAgICAgICAgKiBzcmMvVmlkZW9GcmFtZUNocm9taXVtSW1wbC5jcHA6CisKIDIwMTAtMDktMTMg
IEpvbmF0aGFuIERpeG9uICA8am90aEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgU3RldmUgQmxvY2suCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1ZpZGVvRnJh
bWVDaHJvbWl1bUltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9WaWRlb0ZyYW1lQ2hyb21p
dW1JbXBsLmNwcAppbmRleCAyYjk4MzIwYTNjZTA1NzY1NWI2N2NkMGE0Yzc4YjFiZmI5YzFlODYz
Li44MzNmMWZmZGJjZmU3OTdjN2Y0YWM2ZGZhZTdiMzY0MTU4MjVkYWYyIDEwMDY0NAotLS0gYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1ZpZGVvRnJhbWVDaHJvbWl1bUltcGwuY3BwCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvVmlkZW9GcmFtZUNocm9taXVtSW1wbC5jcHAKQEAgLTM2LDE1ICszNiwx
NSBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotbmFtZXNwYWNlIFdlYktpdCB7Citj
b25zdCB1bnNpZ25lZCBWaWRlb0ZyYW1lQ2hyb21pdW06OmNNYXhQbGFuZXMgPSAzOworY29uc3Qg
dW5zaWduZWQgVmlkZW9GcmFtZUNocm9taXVtOjpjTnVtUkdCUGxhbmVzID0gMTsKK2NvbnN0IHVu
c2lnbmVkIFZpZGVvRnJhbWVDaHJvbWl1bTo6Y1JHQlBsYW5lID0gMDsKK2NvbnN0IHVuc2lnbmVk
IFZpZGVvRnJhbWVDaHJvbWl1bTo6Y051bVlVVlBsYW5lcyA9IDM7Citjb25zdCB1bnNpZ25lZCBW
aWRlb0ZyYW1lQ2hyb21pdW06OmNZUGxhbmUgPSAwOworY29uc3QgdW5zaWduZWQgVmlkZW9GcmFt
ZUNocm9taXVtOjpjVVBsYW5lID0gMTsKK2NvbnN0IHVuc2lnbmVkIFZpZGVvRnJhbWVDaHJvbWl1
bTo6Y1ZQbGFuZSA9IDI7CiAKLWNvbnN0IHVuc2lnbmVkIGNNYXhQbGFuZXMgPSAzOwotY29uc3Qg
dW5zaWduZWQgY051bVJHQlBsYW5lcyA9IDE7Ci1jb25zdCB1bnNpZ25lZCBjUkdCUGxhbmUgPSAw
OwotY29uc3QgdW5zaWduZWQgY051bVlVVlBsYW5lcyA9IDM7Ci1jb25zdCB1bnNpZ25lZCBjWVBs
YW5lID0gMDsKLWNvbnN0IHVuc2lnbmVkIGNVUGxhbmUgPSAxOwotY29uc3QgdW5zaWduZWQgY1ZQ
bGFuZSA9IDI7CituYW1lc3BhY2UgV2ViS2l0IHsKIAogV2ViVmlkZW9GcmFtZSogVmlkZW9GcmFt
ZUNocm9taXVtSW1wbDo6dG9XZWJWaWRlb0ZyYW1lKFZpZGVvRnJhbWVDaHJvbWl1bSogdmlkZW9G
cmFtZSkKIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67456</attachid>
            <date>2010-09-13 12:34:09 -0700</date>
            <delta_ts>2010-09-27 10:48:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45069-20100913123408.patch</filename>
            <type>text/plain</type>
            <size>31486</size>
            <attacher name="Victoria Kirst">vrk</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDVkODhiMjJkOGEzNjdhNGM4ZjdhM2M3NjFiYmNhYmQxNTgxNmFlNC4uZDRmMGU3YTc5YWQ2ZTUw
NjQwYzEwYzI1NzM3OTkzODk1NWI3MGUxOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAxMC0wOS0xMyAgVmlj
dG9yaWEgS2lyc3QgIDx2cmtAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNb2RpZmllcyBWaWRlb0xheWVyQ2hyb21pdW0gdG8gZG8g
WVVWIHRvIFJHQiBjb2xvciBjb252ZXJzaW9uIGluIHRoZQorICAgICAgICBHUFUuIEFsc28gYWRk
cyBzdXBwb3J0IGZvciBSR0JBIHZpZGVvIGZyYW1lIGZvcm1hdHMsIHRob3VnaCB0aGlzIGNvZGUK
KyAgICAgICAgcGF0aCBpcyBjdXJyZW50bHkgbmV2ZXIgcnVuIGJlY2F1c2UgdGhlIHZpZGVvIGZy
YW1lcyBhcmUgaW4gWVYxMgorICAgICAgICBmb3JtYXQuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTA2OQorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZGVv
TGF5ZXJTaGFyZWRWYWx1ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hy
b21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlZp
ZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp+U2hhcmVkVmFsdWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6VmlkZW9MYXllckNocm9taXVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6flZpZGVvTGF5ZXJDaHJvbWl1bSk6Cisg
ICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlWVVWQ29udGVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjphbGxvY2F0ZVlVVlRleHR1cmVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlWVVWVGV4dHVy
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVSR0JBQ29u
dGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjphbGxvY2F0ZVRl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVu
dHNDb21wbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjpkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6ZHJhd1lVVik6CisgICAg
ICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OmRyYXdSR0JBKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAg
KFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp5dXZTaGFkZXJQcm9ncmFt
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpy
Z2JhU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06
OlNoYXJlZFZhbHVlczo6eXV2U2hhZGVyTWF0cml4TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6VmlkZW9MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6OnJnYmFTaGFkZXJNYXRyaXhMb2Nh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVl
czo6eXV2V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVv
TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpyZ2JhV2lkdGhTY2FsZUZhY3RvckxvY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp5
VGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6
U2hhcmVkVmFsdWVzOjp1VGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVv
TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp2VGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp5dXZBbHBoYUxvY2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVz
OjpyZ2JhVGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJv
bWl1bTo6U2hhcmVkVmFsdWVzOjpjY01hdHJpeExvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjppbml0aWFsaXplZCk6CisKIDIwMTAt
MDktMTMgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCA4OTYwODQxMzA5
MDQyMzlhMTg2YjIwNzliMTA3YmRmN2QzMWNhMTMwLi4yZDVjNjVlMWYxOWVkNTY2OGU5MGYwM2E1
YWU3YzQ3M2NkMGEzODE5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC03MDAsNyArNzAw
LDggQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3Rz
KCkKICAgICBtX2xheWVyU2hhcmVkVmFsdWVzID0gYWRvcHRQdHIobmV3IExheWVyQ2hyb21pdW06
OlNoYXJlZFZhbHVlcygpKTsKICAgICBtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlcyA9IGFkb3B0
UHRyKG5ldyBDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKCkpOwogICAgIG1fY2Fu
dmFzTGF5ZXJTaGFyZWRWYWx1ZXMgPSBhZG9wdFB0cihuZXcgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6
U2hhcmVkVmFsdWVzKCkpOwotICAgIGlmICghbV9sYXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6
ZWQoKSB8fCAhbV9jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwgIW1f
Y2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkpIHsKKyAgICBtX3ZpZGVvTGF5
ZXJTaGFyZWRWYWx1ZXMgPSBhZG9wdFB0cihuZXcgVmlkZW9MYXllckNocm9taXVtOjpTaGFyZWRW
YWx1ZXMoKSk7CisgICAgaWYgKCFtX2xheWVyU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpIHx8
ICFtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSB8fCAhbV9jYW52YXNM
YXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSB8fCAhbV92aWRlb0xheWVyU2hhcmVkVmFs
dWVzLT5pbml0aWFsaXplZCgpKSB7CiAgICAgICAgIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC03MTUsNiArNzE2LDcgQEAgdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmNsZWFudXBTaGFyZWRPYmplY3RzKCkKICAgICBtX2xheWVyU2hh
cmVkVmFsdWVzLmNsZWFyKCk7CiAgICAgbV9jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMuY2xlYXIo
KTsKICAgICBtX2NhbnZhc0xheWVyU2hhcmVkVmFsdWVzLmNsZWFyKCk7CisgICAgbV92aWRlb0xh
eWVyU2hhcmVkVmFsdWVzLmNsZWFyKCk7CiAKICAgICBpZiAobV9zY3JvbGxTaGFkZXJQcm9ncmFt
KSB7CiAgICAgICAgIEdMQyhnbERlbGV0ZVByb2dyYW0obV9zY3JvbGxTaGFkZXJQcm9ncmFtKSk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCAyNzQ4MTVmM2ZlMjNjM2IwNzhjNDcwM2U4NDViM2Ji
YzhjMzNlY2JkLi40MTdmZTg4OTA1YmUxMDAyNzQ5NDczYmFkYzMxMzk2YzlhZGQ4ODFhIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmgKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlNrQml0bWFwLmgiCisjaW5j
bHVkZSAiVmlkZW9MYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpA
QCAtOTcsNiArOTgsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgTGF5ZXJDaHJvbWl1bTo6U2hhcmVk
VmFsdWVzKiBsYXllclNoYXJlZFZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJTaGFyZWRW
YWx1ZXMuZ2V0KCk7IH0KICAgICBjb25zdCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFs
dWVzKiBjb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRM
YXllclNoYXJlZFZhbHVlcy5nZXQoKTsgfQogICAgIGNvbnN0IENhbnZhc0xheWVyQ2hyb21pdW06
OlNoYXJlZFZhbHVlcyogY2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBt
X2NhbnZhc0xheWVyU2hhcmVkVmFsdWVzLmdldCgpOyB9CisgICAgY29uc3QgVmlkZW9MYXllckNo
cm9taXVtOjpTaGFyZWRWYWx1ZXMqIHZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXMoKSBjb25zdCB7IHJl
dHVybiBtX3ZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXMuZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICB2
b2lkIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgZmxvYXQgb3BhY2l0eSk7CkBAIC0xNjAs
NiArMTYyLDcgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFs
dWVzPiBtX2xheWVyU2hhcmVkVmFsdWVzOwogICAgIE93blB0cjxDb250ZW50TGF5ZXJDaHJvbWl1
bTo6U2hhcmVkVmFsdWVzPiBtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlczsKICAgICBPd25QdHI8
Q2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzPiBtX2NhbnZhc0xheWVyU2hhcmVkVmFs
dWVzOworICAgIE93blB0cjxWaWRlb0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcz4gbV92aWRl
b0xheWVyU2hhcmVkVmFsdWVzOwogCiAgICAgT3duUHRyPEdMRVMyQ29udGV4dD4gbV9nbGVzMkNv
bnRleHQ7CiB9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGMwZGEyODU2N2IzZmU5YzFkZGU2OTE3
MjI2OGNmNjVkNzI5MjQyN2YuLjczODhkMWUyMjIyZjI2NzVjNGEzZjk1ODdmYjAxOGE0ODQxNDcx
ZTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9M
YXllckNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTM1LDE5ICszNSwxMzEgQEAKIAogI2luY2x1ZGUg
IkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5o
IgotI2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgorI2luY2x1ZGUgIlZpZGVv
RnJhbWVDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlZpZGVvRnJhbWVQcm92aWRlci5oIgogCiAjaW5j
bHVkZSA8R0xFUzIvZ2wyLmg+CiAjZGVmaW5lIEdMX0dMRVhUX1BST1RPVFlQRVMKICNpbmNsdWRl
IDxHTEVTMi9nbDJleHQuaD4KIAotI2lmIFBMQVRGT1JNKFNLSUEpCi0jaW5jbHVkZSAiTmF0aXZl
SW1hZ2VTa2lhLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgotI2VuZGlmCi0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY29uc3QgZmxvYXQgVmlkZW9MYXllckNocm9taXVtOjpj
WVVWMlJHQls5XSA9IHsKKyAgICAxLmYsIDEuZiwgMS5mLAorICAgIDAuZiwgLS4zNDRmLCAxLjc3
MmYsCisgICAgMS40MDNmLCAtLjcxNGYsIDAuZiwKK307CisKK1ZpZGVvTGF5ZXJDaHJvbWl1bTo6
U2hhcmVkVmFsdWVzOjpTaGFyZWRWYWx1ZXMoKQorICAgIDogbV95dXZTaGFkZXJQcm9ncmFtKDAp
CisgICAgLCBtX3JnYmFTaGFkZXJQcm9ncmFtKDApCisgICAgLCBtX3l1dlNoYWRlck1hdHJpeExv
Y2F0aW9uKDApCisgICAgLCBtX3l1dldpZHRoU2NhbGVGYWN0b3JMb2NhdGlvbigwKQorICAgICwg
bV9yZ2JhU2hhZGVyTWF0cml4TG9jYXRpb24oMCkKKyAgICAsIG1fcmdiYVdpZHRoU2NhbGVGYWN0
b3JMb2NhdGlvbigwKQorICAgICwgbV9jY01hdHJpeExvY2F0aW9uKDApCisgICAgLCBtX3lUZXh0
dXJlTG9jYXRpb24oMCkKKyAgICAsIG1fdVRleHR1cmVMb2NhdGlvbigwKQorICAgICwgbV92VGV4
dHVyZUxvY2F0aW9uKDApCisgICAgLCBtX3JnYmFUZXh0dXJlTG9jYXRpb24oMCkKKyAgICAsIG1f
eXV2QWxwaGFMb2NhdGlvbigwKQorICAgICwgbV9pbml0aWFsaXplZChmYWxzZSkKK3sKKyAgICAv
LyBGcmFtZSB0ZXh0dXJlcyBhcmUgYWxsb2NhdGVkIGJhc2VkIG9uIHN0cmlkZSB3aWR0aCwgbm90
IHZpc2libGUgZnJhbWUKKyAgICAvLyB3aWR0aCwgc3VjaCB0aGF0IHRoZXJlIGlzIGEgZ3VhcmFu
dGVlIHRoYXQgdGhlIGZyYW1lIHJvd3MgbGluZSB1cAorICAgIC8vIHByb3Blcmx5IGFuZCBhcmUg
bm90IHNoaWZ0ZWQgYnkgKHN0cmlkZSAtIHdpZHRoKSBwaXhlbHMuIFRvIGhpZGUgdGhlCisgICAg
Ly8gInBhZGRpbmciIHBpeGVscyBiZXR3ZWVuIHRoZSBlZGdlIG9mIHRoZSB2aXNpYmxlIGZyYW1l
IHdpZHRoIGFuZCB0aGUgZW5kCisgICAgLy8gb2YgdGhlIHN0cmlkZSwgd2UgZ2l2ZSB0aGUgc2hh
ZGVyIGEgd2lkdGhTY2FsZUZhY3RvciAoPD0xLjApIG9mIGhvdyBtdWNoCisgICAgLy8gb2YgdGhl
IHdpZHRoIG9mIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSBzaG93biB3aGVuIGRyYXdpbmcgdGhlIHRl
eHR1cmUgb250bworICAgIC8vIHRoZSB2ZXJ0aWNlcy4KKyAgICBjaGFyIHZlcnRleFNoYWRlclN0
cmluZ1tdID0KKyAgICAgICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyAgICAgXG4iCisgICAg
ICAgICJhdHRyaWJ1dGUgdmVjNCBhX3Bvc2l0aW9uOyAgIFxuIgorICAgICAgICAiYXR0cmlidXRl
IHZlYzIgYV90ZXhDb29yZDsgICBcbiIKKyAgICAgICAgInVuaWZvcm0gbWF0NCBtYXRyaXg7ICAg
ICAgICAgXG4iCisgICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgIFxuIgorICAg
ICAgICAidW5pZm9ybSBmbG9hdCB3aWR0aFNjYWxlRmFjdG9yOyAgXG4iCisgICAgICAgICJ2b2lk
IG1haW4oKSAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAieyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcbiIKKyAgICAgICAgIiAgZ2xfUG9zaXRpb24gPSBtYXRyaXggKiBhX3Bvc2l0
aW9uOyBcbiIKKyAgICAgICAgIiAgdl90ZXhDb29yZCA9IHZlYzIod2lkdGhTY2FsZUZhY3RvciAq
IGFfdGV4Q29vcmQueCwgYV90ZXhDb29yZC55KTsgXG4iCisgICAgICAgICJ9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFxuIjsKKworICAgIGNoYXIgeXV2RnJhZ21lbnRTaGFkZXJTdHJpbmdb
XSA9CisgICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFxuIgorICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgaW50OyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInZhcnlpbmcgdmVjMiB2X3RleENvb3Jk
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ1bmlmb3JtIHNhbXBs
ZXIyRCB5X3RleHR1cmU7ICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidW5p
Zm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlOyAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAg
ICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIHZfdGV4dHVyZTsgICAgICAgICAgICAgICAgICAgICAg
ICAgXG4iCisgICAgICAgICJ1bmlmb3JtIGZsb2F0IGFscGhhOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFxuIgorICAgICAgICAidW5pZm9ybSBtYXQzIGNjX21hdHJpeDsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInZvaWQgbWFpbigpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAi
ICBmbG9hdCB5ID0gdGV4dHVyZTJEKHlfdGV4dHVyZSwgdl90ZXhDb29yZCkueDsgICAgICBcbiIK
KyAgICAgICAgIiAgZmxvYXQgdSA9IHRleHR1cmUyRCh1X3RleHR1cmUsIHZfdGV4Q29vcmQpLnIg
LSAuNTsgXG4iCisgICAgICAgICIgIGZsb2F0IHYgPSB0ZXh0dXJlMkQodl90ZXh0dXJlLCB2X3Rl
eENvb3JkKS5yIC0gLjU7IFxuIgorICAgICAgICAiICB2ZWMzIHJnYiA9IGNjX21hdHJpeCAqIHZl
YzMoeSwgdSwgdik7ICAgICAgICAgICAgICBcbiIKKyAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0g
dmVjNChyZ2IsIGFscGhhKTsgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKworICAg
IGNoYXIgcmdiYUZyYWdtZW50U2hhZGVyU3RyaW5nW10gPQorICAgICAgICAicHJlY2lzaW9uIG1l
ZGl1bXAgZmxvYXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInZh
cnlpbmcgdmVjMiB2X3RleENvb3JkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisg
ICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCByZ2JhX3RleHR1cmU7ICAgICAgICAgICAgICAgICAg
ICAgIFxuIgorICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICIgIHZlYzQgdGV4Q29sb3IgPSB0
ZXh0dXJlMkQocmdiYV90ZXh0dXJlLCB2ZWMyKHZfdGV4Q29vcmQueCwgMS4wIC0gdl90ZXhDb29y
ZC55KSk7IFxuIgorICAgICAgICAiICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHRleENvbG9yLngsIHRl
eENvbG9yLnksIHRleENvbG9yLnosIHRleENvbG9yLncpOyBcbiIKKyAgICAgICAgIn0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOworCisgICAg
bV9yZ2JhU2hhZGVyUHJvZ3JhbSA9IGNyZWF0ZVNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU3Ry
aW5nLCByZ2JhRnJhZ21lbnRTaGFkZXJTdHJpbmcpOworICAgIGlmICghbV9yZ2JhU2hhZGVyUHJv
Z3JhbSkgeworICAgICAgICBMT0dfRVJST1IoIlZpZGVvTGF5ZXJDaHJvbWl1bTogRmFpbGVkIHRv
IGNyZWF0ZSByZ2JhIHNoYWRlciBwcm9ncmFtIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBtX3l1dlNoYWRlclByb2dyYW0gPSBjcmVhdGVTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRl
clN0cmluZywgeXV2RnJhZ21lbnRTaGFkZXJTdHJpbmcpOworICAgIGlmICghbV95dXZTaGFkZXJQ
cm9ncmFtKSB7CisgICAgICAgIExPR19FUlJPUigiVmlkZW9MYXllckNocm9taXVtOiBGYWlsZWQg
dG8gY3JlYXRlIHl1diBzaGFkZXIgcHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgR0xDKG1feXV2U2hhZGVyTWF0cml4TG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlv
bihtX3l1dlNoYWRlclByb2dyYW0sICJtYXRyaXgiKSk7CisgICAgR0xDKG1feXV2V2lkdGhTY2Fs
ZUZhY3RvckxvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV95dXZTaGFkZXJQcm9ncmFt
LCAid2lkdGhTY2FsZUZhY3RvciIpKTsKKyAgICBHTEMobV95VGV4dHVyZUxvY2F0aW9uID0gZ2xH
ZXRVbmlmb3JtTG9jYXRpb24obV95dXZTaGFkZXJQcm9ncmFtLCAieV90ZXh0dXJlIikpOworICAg
IEdMQyhtX3VUZXh0dXJlTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX3l1dlNoYWRl
clByb2dyYW0sICJ1X3RleHR1cmUiKSk7CisgICAgR0xDKG1fdlRleHR1cmVMb2NhdGlvbiA9IGds
R2V0VW5pZm9ybUxvY2F0aW9uKG1feXV2U2hhZGVyUHJvZ3JhbSwgInZfdGV4dHVyZSIpKTsKKyAg
ICBHTEMobV9jY01hdHJpeExvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV95dXZTaGFk
ZXJQcm9ncmFtLCAiY2NfbWF0cml4IikpOworICAgIEdMQyhtX3l1dkFscGhhTG9jYXRpb24gPSBn
bEdldFVuaWZvcm1Mb2NhdGlvbihtX3l1dlNoYWRlclByb2dyYW0sICJhbHBoYSIpKTsKKworICAg
IEFTU0VSVChtX3l1dlNoYWRlck1hdHJpeExvY2F0aW9uICE9IC0xKTsKKyAgICBBU1NFUlQobV95
dXZXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24gIT0gLTEpOworICAgIEFTU0VSVChtX3lUZXh0dXJl
TG9jYXRpb24gIT0gLTEpOworICAgIEFTU0VSVChtX3VUZXh0dXJlTG9jYXRpb24gIT0gLTEpOwor
ICAgIEFTU0VSVChtX3ZUZXh0dXJlTG9jYXRpb24gIT0gLTEpOworICAgIEFTU0VSVChtX2NjTWF0
cml4TG9jYXRpb24gIT0gLTEpOworICAgIEFTU0VSVChtX3l1dkFscGhhTG9jYXRpb24gIT0gLTEp
OworCisgICAgR0xDKG1fcmdiYVNoYWRlck1hdHJpeExvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9j
YXRpb24obV9yZ2JhU2hhZGVyUHJvZ3JhbSwgIm1hdHJpeCIpKTsKKyAgICBHTEMobV9yZ2JhVGV4
dHVyZUxvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9yZ2JhU2hhZGVyUHJvZ3JhbSwg
InJnYmFfdGV4dHVyZSIpKTsKKyAgICBHTEMobV9yZ2JhV2lkdGhTY2FsZUZhY3RvckxvY2F0aW9u
ID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9yZ2JhU2hhZGVyUHJvZ3JhbSwgIndpZHRoU2NhbGVG
YWN0b3IiKSk7CisKKyAgICBBU1NFUlQobV9yZ2JhU2hhZGVyTWF0cml4TG9jYXRpb24gIT0gLTEp
OworICAgIEFTU0VSVChtX3JnYmFUZXh0dXJlTG9jYXRpb24gIT0gLTEpOworICAgIEFTU0VSVCht
X3JnYmFXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24gIT0gLTEpOworCisgICAgbV9pbml0aWFsaXpl
ZCA9IHRydWU7Cit9CisKK1ZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp+U2hhcmVk
VmFsdWVzKCkKK3sKKyAgICBpZiAobV95dXZTaGFkZXJQcm9ncmFtKQorICAgICAgICBHTEMoZ2xE
ZWxldGVQcm9ncmFtKG1feXV2U2hhZGVyUHJvZ3JhbSkpOworICAgIGlmIChtX3JnYmFTaGFkZXJQ
cm9ncmFtKQorICAgICAgICBHTEMoZ2xEZWxldGVQcm9ncmFtKG1fcmdiYVNoYWRlclByb2dyYW0p
KTsKK30KKwogUGFzc1JlZlB0cjxWaWRlb0xheWVyQ2hyb21pdW0+IFZpZGVvTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW9GcmFtZVByb3Zp
ZGVyKiBwcm92aWRlcikKIHsKQEAgLTU1LDE0ICsxNjcsMjQgQEAgUGFzc1JlZlB0cjxWaWRlb0xh
eWVyQ2hyb21pdW0+IFZpZGVvTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bSoKIH0KIAogVmlkZW9MYXllckNocm9taXVtOjpWaWRlb0xheWVyQ2hyb21pdW0oR3JhcGhp
Y3NMYXllckNocm9taXVtKiBvd25lciwgVmlkZW9GcmFtZVByb3ZpZGVyKiBwcm92aWRlcikKLSAg
ICA6IENvbnRlbnRMYXllckNocm9taXVtKG93bmVyKQotI2lmIFBMQVRGT1JNKFNLSUEpCi0gICAg
LCBtX2NhbnZhcygwKQotICAgICwgbV9za2lhQ29udGV4dCgwKQotI2VuZGlmCi0gICAgLCBtX2dy
YXBoaWNzQ29udGV4dCgwKQorICAgIDogTGF5ZXJDaHJvbWl1bShvd25lcikKKyAgICAsIG1fc2tp
cHNEcmF3KHRydWUpCisgICAgLCBtX3JnYmFUZXh0dXJlKDApCisgICAgLCBtX2ZyYW1lRm9ybWF0
KFZpZGVvRnJhbWVDaHJvbWl1bTo6SW52YWxpZCkKICAgICAsIG1fcHJvdmlkZXIocHJvdmlkZXIp
CisgICAgLCBtX2FsbG9jYXRlZFRleHR1cmVTaXplKEludFNpemUoLTEsIC0xKSkKIHsKKyAgICBt
X3l1dlRleHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6Y1lQbGFuZV0gPSAwOworICAgIG1feXV2
VGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjpjVVBsYW5lXSA9IDA7CisgICAgbV95dXZUZXh0
dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OmNWUGxhbmVdID0gMDsKK30KKworVmlkZW9MYXllckNo
cm9taXVtOjp+VmlkZW9MYXllckNocm9taXVtKCkKK3sKKyAgICBpZiAobV95dXZUZXh0dXJlcykK
KyAgICAgICAgR0xDKGdsRGVsZXRlVGV4dHVyZXMoMywgc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50
Kj4obV95dXZUZXh0dXJlcykpKTsKKyAgICBpZiAobV9yZ2JhVGV4dHVyZSkKKyAgICAgICAgR0xD
KGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fcmdiYVRleHR1cmUpKTsKIH0KIAogdm9pZCBWaWRlb0xh
eWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKCkKQEAgLTczLDEyNiArMTk1LDE5OSBAQCB2b2lk
IFZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHMoKQogCiAgICAgQVNTRVJUKGRyYXdz
Q29udGVudCgpKTsKIAotICAgIEludFJlY3QgZGlydHlSZWN0KG1fZGlydHlSZWN0KTsKLSAgICBJ
bnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemU7Ci0KLSNpZiBQTEFURk9STShTS0lBKQotICAgIHJl
cXVpcmVkVGV4dHVyZVNpemUgPSBtX2JvdW5kczsKLSAgICBJbnRSZWN0IGJvdW5kc1JlY3QoSW50
UG9pbnQoMCwgMCksIG1fYm91bmRzKTsKLQotICAgIC8vIElmIHRoZSB0ZXh0dXJlIG5lZWRzIHRv
IGJlIHJlYWxsb2NhdGVkLCB0aGVuIHdlIG11c3QgcmVkcmF3IHRoZSBlbnRpcmUKLSAgICAvLyBj
b250ZW50cyBvZiB0aGUgbGF5ZXIuCi0gICAgaWYgKHJlcXVpcmVkVGV4dHVyZVNpemUgIT0gbV9h
bGxvY2F0ZWRUZXh0dXJlU2l6ZSkKLSAgICAgICAgZGlydHlSZWN0ID0gYm91bmRzUmVjdDsKLSAg
ICBlbHNlIHsKLSAgICAgICAgLy8gQ2xpcCB0aGUgZGlydHlSZWN0IHRvIHRoZSBzaXplIG9mIHRo
ZSBsYXllciB0byBhdm9pZCBkcmF3aW5nIG91dHNpZGUKLSAgICAgICAgLy8gdGhlIGJvdW5kcyBv
ZiB0aGUgYmFja2luZyB0ZXh0dXJlLgotICAgICAgICBkaXJ0eVJlY3QuaW50ZXJzZWN0KGJvdW5k
c1JlY3QpOwotICAgIH0KLQotICAgIGlmICghbV9jYW52YXMuZ2V0KCkKLSAgICAgICAgfHwgZGly
dHlSZWN0LndpZHRoKCkgIT0gbV9jYW52YXMtPmdldERldmljZSgpLT53aWR0aCgpCi0gICAgICAg
IHx8IGRpcnR5UmVjdC5oZWlnaHQoKSAhPSBtX2NhbnZhcy0+Z2V0RGV2aWNlKCktPmhlaWdodCgp
KSB7Ci0gICAgICAgIG1fY2FudmFzID0gbmV3IHNraWE6OlBsYXRmb3JtQ2FudmFzKGRpcnR5UmVj
dC53aWR0aCgpLCBkaXJ0eVJlY3QuaGVpZ2h0KCksIHRydWUpOwotICAgICAgICBtX3NraWFDb250
ZXh0ID0gbmV3IFBsYXRmb3JtQ29udGV4dFNraWEobV9jYW52YXMuZ2V0KCkpOworICAgIFZpZGVv
RnJhbWVDaHJvbWl1bSogZnJhbWUgPSAwOworICAgIGJvb2wgbmVlZHNBbGxvY2F0ZSA9IGZhbHNl
OworICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7CiAKLSAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQg
dG8gZ2V0IHRleHQgdG8gc2hvdyB1cCBjb3JyZWN0bHkuCi0gICAgICAgIC8vIEZJWE1FOiBEb2Vz
IHRoaXMgdGFrZSB1cyBkb3duIGEgdmVyeSBzbG93IHRleHQgcmVuZGVyaW5nIHBhdGg/Ci0gICAg
ICAgIG1fc2tpYUNvbnRleHQtPnNldERyYXdpbmdUb0ltYWdlQnVmZmVyKHRydWUpOwotICAgICAg
ICBtX2dyYXBoaWNzQ29udGV4dCA9IG5ldyBHcmFwaGljc0NvbnRleHQocmVpbnRlcnByZXRfY2Fz
dDxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCo+KG1fc2tpYUNvbnRleHQuZ2V0KCkpKTsKKyAgICBm
cmFtZSA9IG1fcHJvdmlkZXItPmdldEN1cnJlbnRGcmFtZSgpOworICAgIGlmICghZnJhbWUpIHsK
KyAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOworICAgICAgICBtX3Byb3ZpZGVyLT5wdXRDdXJy
ZW50RnJhbWUoZnJhbWUpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gQnJpbmcg
dGhlIGNhbnZhcyBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFpbnQgcmVjdC4K
LSAgICBtX2NhbnZhcy0+dHJhbnNsYXRlKHN0YXRpY19jYXN0PFNrU2NhbGFyPigtZGlydHlSZWN0
LngoKSksIHN0YXRpY19jYXN0PFNrU2NhbGFyPigtZGlydHlSZWN0LnkoKSkpOwotCisgICAgSW50
U2l6ZSByZXF1aXJlZFRleHR1cmVTaXplKGZyYW1lLT5zdHJpZGUoVmlkZW9GcmFtZUNocm9taXVt
OjpjWVBsYW5lKSwgZnJhbWUtPmhlaWdodCgpKTsKICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMg
dGVzdCB3aGVuIHRpbGVkIGxheWVycyBhcmUgaW1wbGVtZW50ZWQuCi0gICAgbV9za2lwc0RyYXcg
PSBmYWxzZTsKICAgICBpZiAoIWxheWVyUmVuZGVyZXIoKS0+Y2hlY2tUZXh0dXJlU2l6ZShyZXF1
aXJlZFRleHR1cmVTaXplKSkgewogICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7CisgICAgICAg
IG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICB1bnNpZ25lZCB0ZXh0dXJlSWQgPSBtX2NvbnRlbnRzVGV4dHVyZTsKLSAgICBp
ZiAoIXRleHR1cmVJZCkKLSAgICAgICAgdGV4dHVyZUlkID0gbGF5ZXJSZW5kZXJlcigpLT5jcmVh
dGVMYXllclRleHR1cmUoKTsKKyAgICAvLyBJZiB0aGUgdGV4dHVyZSBuZWVkcyB0byBiZSByZWFs
bG9jYXRlZCwgdGhlbiB3ZSBtdXN0IHJlZHJhdyB0aGUgZW50aXJlCisgICAgLy8gY29udGVudHMg
b2YgdGhlIGxheWVyLgorICAgIGlmIChyZXF1aXJlZFRleHR1cmVTaXplICE9IG1fYWxsb2NhdGVk
VGV4dHVyZVNpemUpIHsKKyAgICAgICAgbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSA9IHJlcXVpcmVk
VGV4dHVyZVNpemU7CisgICAgICAgIG1fZnJhbWVXaWR0aCA9IGZyYW1lLT53aWR0aCgpOworICAg
ICAgICBuZWVkc0FsbG9jYXRlID0gdHJ1ZTsKKyAgICB9CiAKLSAgICAvLyBJZiB0aGUgdGV4dHVy
ZSBpZCBvciBzaXplIGNoYW5nZWQgc2luY2UgbGFzdCB0aW1lLCB0aGVuIHdlIG5lZWQgdG8gdGVs
bCBHTAotICAgIC8vIHRvIHJlLWFsbG9jYXRlIGEgdGV4dHVyZS4KLSAgICBpZiAobV9jb250ZW50
c1RleHR1cmUgIT0gdGV4dHVyZUlkIHx8IHJlcXVpcmVkVGV4dHVyZVNpemUgIT0gbV9hbGxvY2F0
ZWRUZXh0dXJlU2l6ZSkKLSAgICAgICAgY3JlYXRlVGV4dHVyZVJlY3QocmVxdWlyZWRUZXh0dXJl
U2l6ZSwgZGlydHlSZWN0LCB0ZXh0dXJlSWQpOwotICAgIGVsc2UKLSAgICAgICAgdXBkYXRlVGV4
dHVyZVJlY3QoZGlydHlSZWN0LCB0ZXh0dXJlSWQpOwotI2Vsc2UKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50IG5vbi1za2lhIHBhdGgKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotI2VuZGlmCi19Ci0K
LXZvaWQgVmlkZW9MYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlUmVjdChjb25zdCBJbnRTaXpl
JiByZXF1aXJlZFRleHR1cmVTaXplLCBjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCB1bnNpZ25l
ZCB0ZXh0dXJlSWQpCi17Ci0gICAgLy8gUGFpbnQgaW50byBncmFwaGljcyBjb250ZXh0IGFuZCBn
ZXQgYml0bWFwLgotICAgIG1fb3duZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKCptX2dy
YXBoaWNzQ29udGV4dCwgdXBkYXRlUmVjdCk7Ci0gICAgdm9pZCogcGl4ZWxzID0gMDsKLSAgICBJ
bnRTaXplIGJpdG1hcFNpemUgPSBJbnRTaXplKCk7Ci0jaWYgUExBVEZPUk0oU0tJQSkKLSAgICBj
b25zdCBTa0JpdG1hcCYgYml0bWFwID0gbV9jYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRt
YXAoZmFsc2UpOwotICAgIGNvbnN0IFNrQml0bWFwKiBza2lhQml0bWFwID0gJmJpdG1hcDsKLSAg
ICBBU1NFUlQoc2tpYUJpdG1hcCk7Ci0KLSAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soKnNraWFC
aXRtYXApOwotICAgIFNrQml0bWFwOjpDb25maWcgc2tpYUNvbmZpZyA9IHNraWFCaXRtYXAtPmNv
bmZpZygpOwotICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIHN1cHBvcnQgbW9yZSBpbWFnZSBj
b25maWd1cmF0aW9ucz8KLSAgICBpZiAoc2tpYUNvbmZpZyA9PSBTa0JpdG1hcDo6a0FSR0JfODg4
OF9Db25maWcpIHsKLSAgICAgICAgcGl4ZWxzID0gc2tpYUJpdG1hcC0+Z2V0UGl4ZWxzKCk7Ci0g
ICAgICAgIGJpdG1hcFNpemUgPSBJbnRTaXplKHNraWFCaXRtYXAtPndpZHRoKCksIHNraWFCaXRt
YXAtPmhlaWdodCgpKTsKKyAgICBtX2ZyYW1lRm9ybWF0ID0gZnJhbWUtPmZvcm1hdCgpOworICAg
IHN3aXRjaCAobV9mcmFtZUZvcm1hdCkgeworICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpZ
VjEyOgorICAgICAgICB1cGRhdGVZVVZDb250ZW50cyhmcmFtZSwgbmVlZHNBbGxvY2F0ZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpSR0JBOgorICAgICAg
ICB1cGRhdGVSR0JBQ29udGVudHMoZnJhbWUsIG5lZWRzQWxsb2NhdGUpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG90aGVyIHBhdGhz
LgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBicmVhazsKICAgICB9Ci0jZWxz
ZQotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbm9uLXNraWEgcGF0aAotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0jZW5kaWYKLSAgICBpZiAoIXBpeGVscykKLSAgICAgICAgcmV0dXJuOwogCi0gICAg
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlSWQpOwotICAgIEFTU0VSVChiaXRt
YXBTaXplID09IHJlcXVpcmVkVGV4dHVyZVNpemUpOwotICAgIGdsVGV4SW1hZ2UyRChHTF9URVhU
VVJFXzJELCAwLCBHTF9SR0JBLCByZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCksIHJlcXVpcmVk
VGV4dHVyZVNpemUuaGVpZ2h0KCksIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVs
cyk7CisgICAgbV9wcm92aWRlci0+cHV0Q3VycmVudEZyYW1lKGZyYW1lKTsKK30KIAotICAgIG1f
Y29udGVudHNUZXh0dXJlID0gdGV4dHVyZUlkOwotICAgIG1fYWxsb2NhdGVkVGV4dHVyZVNpemUg
PSByZXF1aXJlZFRleHR1cmVTaXplOwordm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZVlV
VkNvbnRlbnRzKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUsIGJvb2wgbmVlZHNBbGxv
Y2F0ZSkKK3sKKyAgICAvLyBJZiB0aGUgZGltZW5zaW9ucyBjaGFuZ2VkIHNpbmNlIGxhc3QgdGlt
ZSwgdGhlbiB3ZSBuZWVkIHRvIHRlbGwgR0wKKyAgICAvLyB0byByZS1hbGxvY2F0ZSBhIHRleHR1
cmUuCisgICAgaWYgKG5lZWRzQWxsb2NhdGUpIHsKKyAgICAgICAgaWYgKG1feXV2VGV4dHVyZXMp
CisgICAgICAgICAgICBHTEMoZ2xEZWxldGVUZXh0dXJlcygzLCBzdGF0aWNfY2FzdDxjb25zdCBH
THVpbnQqPihtX3l1dlRleHR1cmVzKSkpOworICAgICAgICBtX3l1dlRleHR1cmVzW1ZpZGVvRnJh
bWVDaHJvbWl1bTo6Y1lQbGFuZV0gPSBsYXllclJlbmRlcmVyKCktPmNyZWF0ZUxheWVyVGV4dHVy
ZSgpOworICAgICAgICBtX3l1dlRleHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6Y1VQbGFuZV0g
PSBsYXllclJlbmRlcmVyKCktPmNyZWF0ZUxheWVyVGV4dHVyZSgpOworICAgICAgICBtX3l1dlRl
eHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6Y1ZQbGFuZV0gPSBsYXllclJlbmRlcmVyKCktPmNy
ZWF0ZUxheWVyVGV4dHVyZSgpOworICAgICAgICBhbGxvY2F0ZVlVVlRleHR1cmVzKGZyYW1lKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgdXBkYXRlWVVWVGV4dHVyZXMoZnJhbWUpOwogCi0gICAgdXBk
YXRlQ29tcGxldGVkKCk7CisgICAgdXBkYXRlQ29udGVudHNDb21wbGV0ZWQoKTsKIH0KIAotdm9p
ZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVSZWN0KGNvbnN0IEludFJlY3QmIHVw
ZGF0ZVJlY3QsIHVuc2lnbmVkIHRleHR1cmVJZCkKK3ZvaWQgVmlkZW9MYXllckNocm9taXVtOjph
bGxvY2F0ZVlVVlRleHR1cmVzKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUpCiB7Ci0j
aWYgUExBVEZPUk0oU0tJQSkKLSAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gbV9jYW52YXMt
PmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAodHJ1ZSk7Ci0gICAgU2tCaXRtYXAqIHNraWFCaXRt
YXAgPSBjb25zdF9jYXN0PFNrQml0bWFwKj4oJmJpdG1hcCk7Ci0gICAgQVNTRVJUKHNraWFCaXRt
YXApOworICAgIEFTU0VSVChmcmFtZSk7CisgICAgQVNTRVJUKGZyYW1lLT5zdHJpZGUoVmlkZW9G
cmFtZUNocm9taXVtOjpjWVBsYW5lKSA9PSBtX2FsbG9jYXRlZFRleHR1cmVTaXplLndpZHRoKCkp
OworICAgIEFTU0VSVChmcmFtZS0+aGVpZ2h0KCkgPT0gbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZS5o
ZWlnaHQoKSk7CisKKyAgICBJbnRTaXplIHlEaW1lbnNpb25zKGZyYW1lLT5zdHJpZGUoVmlkZW9G
cmFtZUNocm9taXVtOjpjWVBsYW5lKSwgZnJhbWUtPmhlaWdodCgpKTsKKyAgICBhbGxvY2F0ZVRl
eHR1cmUobV95dXZUZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OmNZUGxhbmVdLCBmcmFtZS0+
ZGF0YShWaWRlb0ZyYW1lQ2hyb21pdW06OmNZUGxhbmUpLCB5RGltZW5zaW9ucywgR0xfTFVNSU5B
TkNFKTsKKyAgICBJbnRTaXplIHV2RGltZW5zaW9ucyhmcmFtZS0+c3RyaWRlKFZpZGVvRnJhbWVD
aHJvbWl1bTo6Y1VQbGFuZSksIGZyYW1lLT5oZWlnaHQoKSAvIDIpOworICAgIGFsbG9jYXRlVGV4
dHVyZShtX3l1dlRleHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6Y1VQbGFuZV0sIGZyYW1lLT5k
YXRhKFZpZGVvRnJhbWVDaHJvbWl1bTo6Y1VQbGFuZSksIHV2RGltZW5zaW9ucywgR0xfTFVNSU5B
TkNFKTsKKyAgICBhbGxvY2F0ZVRleHR1cmUobV95dXZUZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21p
dW06OmNWUGxhbmVdLCBmcmFtZS0+ZGF0YShWaWRlb0ZyYW1lQ2hyb21pdW06OmNWUGxhbmUpLCB1
dkRpbWVuc2lvbnMsIEdMX0xVTUlOQU5DRSk7Cit9CiAKLSAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxv
Y2soKnNraWFCaXRtYXApOwotICAgIFNrQml0bWFwOjpDb25maWcgc2tpYUNvbmZpZyA9IHNraWFC
aXRtYXAtPmNvbmZpZygpOwordm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZVlVVlRleHR1
cmVzKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUpCit7CisgICAgQVNTRVJUKGZyYW1l
KTsKKyAgICBBU1NFUlQoZnJhbWUtPnN0cmlkZShWaWRlb0ZyYW1lQ2hyb21pdW06OmNZUGxhbmUp
ID09IG1fYWxsb2NhdGVkVGV4dHVyZVNpemUud2lkdGgoKSk7CisgICAgQVNTRVJUKGZyYW1lLT5o
ZWlnaHQoKSA9PSBtX2FsbG9jYXRlZFRleHR1cmVTaXplLmhlaWdodCgpKTsKIAotICAgIGlmIChz
a2lhQ29uZmlnID09IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZykgewotICAgICAgICBnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmVJZCk7Ci0gICAgICAgIHZvaWQqIG1lbSA9
IGdsTWFwVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB1cGRhdGVSZWN0LngoKSwgdXBk
YXRlUmVjdC55KCksIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwgR0xf
UkdCQSwgR0xfVU5TSUdORURfQllURSwgR0xfV1JJVEVfT05MWSk7Ci0gICAgICAgIHNraWFCaXRt
YXAtPnNldFBpeGVscyhtZW0pOwotICAgICAgICBtX293bmVyLT5wYWludEdyYXBoaWNzTGF5ZXJD
b250ZW50cygqbV9ncmFwaGljc0NvbnRleHQsIHVwZGF0ZVJlY3QpOwotICAgICAgICBnbFVubWFw
VGV4U3ViSW1hZ2UyRChtZW0pOwotICAgIH0KKyAgICBJbnRTaXplIHlEaW1lbnNpb25zKGZyYW1l
LT5zdHJpZGUoVmlkZW9GcmFtZUNocm9taXVtOjpjWVBsYW5lKSwgZnJhbWUtPmhlaWdodCgpKTsK
KyAgICB1cGRhdGVUZXh0dXJlKG1feXV2VGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjpjWVBs
YW5lXSwgZnJhbWUtPmRhdGEoVmlkZW9GcmFtZUNocm9taXVtOjpjWVBsYW5lKSwgeURpbWVuc2lv
bnMsIEdMX0xVTUlOQU5DRSk7CisgICAgSW50U2l6ZSB1dkRpbWVuc2lvbnMoZnJhbWUtPnN0cmlk
ZShWaWRlb0ZyYW1lQ2hyb21pdW06OmNVUGxhbmUpLCBmcmFtZS0+aGVpZ2h0KCkgLyAyKTsKKyAg
ICB1cGRhdGVUZXh0dXJlKG1feXV2VGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjpjVVBsYW5l
XSwgZnJhbWUtPmRhdGEoVmlkZW9GcmFtZUNocm9taXVtOjpjVVBsYW5lKSwgdXZEaW1lbnNpb25z
LCBHTF9MVU1JTkFOQ0UpOworICAgIHVwZGF0ZVRleHR1cmUobV95dXZUZXh0dXJlc1tWaWRlb0Zy
YW1lQ2hyb21pdW06OmNWUGxhbmVdLCBmcmFtZS0+ZGF0YShWaWRlb0ZyYW1lQ2hyb21pdW06OmNW
UGxhbmUpLCB1dkRpbWVuc2lvbnMsIEdMX0xVTUlOQU5DRSk7Cit9CiAKLSAgICB1cGRhdGVDb21w
bGV0ZWQoKTsKLSNlbHNlCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCBub24tc2tpYSBwYXRoCi0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSNlbmRpZgordm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVw
ZGF0ZVJHQkFDb250ZW50cyhjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lLCBib29sIG5l
ZWRzQWxsb2NhdGUpCit7CisgICAgQVNTRVJUKGZyYW1lKTsKKyAgICBBU1NFUlQoZnJhbWUtPnN0
cmlkZShWaWRlb0ZyYW1lQ2hyb21pdW06OmNZUGxhbmUpID09IG1fYWxsb2NhdGVkVGV4dHVyZVNp
emUud2lkdGgoKSk7CisgICAgQVNTRVJUKGZyYW1lLT5oZWlnaHQoKSA9PSBtX2FsbG9jYXRlZFRl
eHR1cmVTaXplLmhlaWdodCgpKTsKKworICAgIEludFNpemUgZnJhbWVEaW1lbnNpb25zKGZyYW1l
LT5zdHJpZGUoVmlkZW9GcmFtZUNocm9taXVtOjpjUkdCUGxhbmUpLCBmcmFtZS0+aGVpZ2h0KCkp
OworICAgIGlmIChuZWVkc0FsbG9jYXRlKSB7CisgICAgICAgIGlmIChtX3JnYmFUZXh0dXJlKQor
ICAgICAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9yZ2JhVGV4dHVyZSk7CisgICAgICAg
IG1fcmdiYVRleHR1cmUgPSBsYXllclJlbmRlcmVyKCktPmNyZWF0ZUxheWVyVGV4dHVyZSgpOwor
ICAgICAgICBhbGxvY2F0ZVRleHR1cmUobV9yZ2JhVGV4dHVyZSwgZnJhbWUtPmRhdGEoVmlkZW9G
cmFtZUNocm9taXVtOjpjUkdCUGxhbmUpLCBmcmFtZURpbWVuc2lvbnMsIEdMX1JHQkEpOworICAg
IH0gZWxzZQorICAgICAgICB1cGRhdGVUZXh0dXJlKG1fcmdiYVRleHR1cmUsIGZyYW1lLT5kYXRh
KFZpZGVvRnJhbWVDaHJvbWl1bTo6Y1JHQlBsYW5lKSwgZnJhbWVEaW1lbnNpb25zLCBHTF9SR0JB
KTsKKworICAgIHVwZGF0ZUNvbnRlbnRzQ29tcGxldGVkKCk7Cit9CisKK3ZvaWQgVmlkZW9MYXll
ckNocm9taXVtOjphbGxvY2F0ZVRleHR1cmUodW5zaWduZWQgdGV4dHVyZUlkLCBjb25zdCB2b2lk
KiBkYXRhLCBjb25zdCBJbnRTaXplJiBkaW1lbnNpb25zLCBHTGVudW0gZm9ybWF0KQoreworICAg
IEdMQyhnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmVJZCkpOworICAgIEdMQyhn
bFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgZm9ybWF0LCBkaW1lbnNpb25zLndpZHRoKCks
IGRpbWVuc2lvbnMuaGVpZ2h0KCksIDAsIEdMX0xVTUlOQU5DRSwgR0xfVU5TSUdORURfQllURSwg
ZGF0YSkpOworICAgIEFTU0VSVChnbEdldEVycm9yKCkgPT0gR0xfTk9fRVJST1IpOwogfQogCi12
b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcGxldGVkKCkKK3ZvaWQgVmlkZW9MYXll
ckNocm9taXVtOjp1cGRhdGVUZXh0dXJlKHVuc2lnbmVkIHRleHR1cmVJZCwgY29uc3Qgdm9pZCog
ZGF0YSwgY29uc3QgSW50U2l6ZSYgZGltZW5zaW9ucywgR0xlbnVtIGZvcm1hdCkKK3sKKyAgICBH
TEMoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlSWQpKTsKKyAgICB2b2lkKiBt
ZW0gPSBnbE1hcFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgMCwgMCwgZGltZW5zaW9u
cy53aWR0aCgpLCBkaW1lbnNpb25zLmhlaWdodCgpLCBmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUs
IEdMX1dSSVRFX09OTFkpOworICAgIGlmIChtZW0pIHsKKyAgICAgICAgbWVtY3B5KG1lbSwgZGF0
YSwgZGltZW5zaW9ucy53aWR0aCgpICogZGltZW5zaW9ucy5oZWlnaHQoKSk7CisgICAgICAgIGds
VW5tYXBUZXhTdWJJbWFnZTJEKG1lbSk7CisgICAgICAgIEFTU0VSVChnbEdldEVycm9yKCkgPT0g
R0xfTk9fRVJST1IpOworICAgIH0gZWxzZQorICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7Cit9
CisKK3ZvaWQgVmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0NvbXBsZXRlZCgpCiB7
CiAgICAgbV9kaXJ0eVJlY3Quc2V0U2l6ZShGbG9hdFNpemUoKSk7CiAgICAgbV9jb250ZW50c0Rp
cnR5ID0gZmFsc2U7CiB9CiAKK3ZvaWQgVmlkZW9MYXllckNocm9taXVtOjpkcmF3KCkKK3sKKyAg
ICBpZiAobV9za2lwc0RyYXcpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChsYXllclJl
bmRlcmVyKCkpOworICAgIGNvbnN0IFZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiBz
diA9IGxheWVyUmVuZGVyZXIoKS0+dmlkZW9MYXllclNoYXJlZFZhbHVlcygpOworICAgIEFTU0VS
VChzdiAmJiBzdi0+aW5pdGlhbGl6ZWQoKSk7CisKKyAgICBzd2l0Y2ggKG1fZnJhbWVGb3JtYXQp
IHsKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6WVYxMjoKKyAgICAgICAgZHJhd1lVVihz
dik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpSR0JBOgor
ICAgICAgICBkcmF3UkdCQShzdik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgb3RoZXIgcGF0aHMuCisgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KIH0KKwordm9pZCBWaWRlb0xheWVyQ2hyb21p
dW06OmRyYXdZVVYoY29uc3QgU2hhcmVkVmFsdWVzKiBzdikKK3sKKyAgICBHTEMoZ2xBY3RpdmVU
ZXh0dXJlKEdMX1RFWFRVUkUxKSk7CisgICAgR0xDKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgbV95dXZUZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OmNZUGxhbmVdKSk7CisgICAgR0xD
KGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMikpOworICAgIEdMQyhnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1feXV2VGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjpjVVBsYW5lXSkp
OworICAgIEdMQyhnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTMpKTsKKyAgICBHTEMoZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3l1dlRleHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6
Y1ZQbGFuZV0pKTsKKworICAgIGxheWVyUmVuZGVyZXIoKS0+dXNlU2hhZGVyKHN2LT55dXZTaGFk
ZXJQcm9ncmFtKCkpOworICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxm
bG9hdD4obV9mcmFtZVdpZHRoKSAvIG1fYWxsb2NhdGVkVGV4dHVyZVNpemUud2lkdGgoKTsKKyAg
ICBHTEMoZ2xVbmlmb3JtMWYoc3YtPnl1dldpZHRoU2NhbGVGYWN0b3JMb2NhdGlvbigpLCB3aWR0
aFNjYWxlRmFjdG9yKSk7CisgICAgR0xDKGdsVW5pZm9ybTFpKHN2LT55VGV4dHVyZUxvY2F0aW9u
KCksIDEpKTsKKyAgICBHTEMoZ2xVbmlmb3JtMWkoc3YtPnVUZXh0dXJlTG9jYXRpb24oKSwgMikp
OworICAgIEdMQyhnbFVuaWZvcm0xaShzdi0+dlRleHR1cmVMb2NhdGlvbigpLCAzKSk7CisgICAg
R0xDKGdsVW5pZm9ybU1hdHJpeDNmdihzdi0+Y2NNYXRyaXhMb2NhdGlvbigpLCAxLCBHTF9GQUxT
RSwgY1lVVjJSR0IpKTsKKworICAgIGRyYXdUZXh0dXJlZFF1YWQobGF5ZXJSZW5kZXJlcigpLT5w
cm9qZWN0aW9uTWF0cml4KCksIGRyYXdUcmFuc2Zvcm0oKSwKKyAgICAgICAgICAgICAgICAgICAg
IGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3T3BhY2l0eSgpLAorICAg
ICAgICAgICAgICAgICAgICAgc3YtPnl1dlNoYWRlck1hdHJpeExvY2F0aW9uKCksIHN2LT55dXZB
bHBoYUxvY2F0aW9uKCkpOworCisgICAgLy8gUmVzZXQgYWN0aXZlIHRleHR1cmUgYmFjayB0byB0
ZXh0dXJlIDAuCisgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKK30KKwordm9pZCBW
aWRlb0xheWVyQ2hyb21pdW06OmRyYXdSR0JBKGNvbnN0IFNoYXJlZFZhbHVlcyogc3YpCit7Cisg
ICAgR0xDKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpOworICAgIEdMQyhnbEJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfMkQsIG1fcmdiYVRleHR1cmUpKTsKKworICAgIGxheWVyUmVuZGVyZXIo
KS0+dXNlU2hhZGVyKHN2LT5yZ2JhU2hhZGVyUHJvZ3JhbSgpKTsKKyAgICBmbG9hdCB3aWR0aFNj
YWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fZnJhbWVXaWR0aCkgLyBtX2FsbG9jYXRl
ZFRleHR1cmVTaXplLndpZHRoKCk7CisgICAgR0xDKGdsVW5pZm9ybTFmKHN2LT5yZ2JhV2lkdGhT
Y2FsZUZhY3RvckxvY2F0aW9uKCksIHdpZHRoU2NhbGVGYWN0b3IpKTsKKyAgICBHTEMoZ2xVbmlm
b3JtMWkoc3YtPnJnYmFUZXh0dXJlTG9jYXRpb24oKSwgMCkpOworCisgICAgZHJhd1RleHR1cmVk
UXVhZChsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwgZHJhd1RyYW5zZm9ybSgp
LAorICAgICAgICAgICAgICAgICAgICAgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0
KCksIGRyYXdPcGFjaXR5KCksCisgICAgICAgICAgICAgICAgICAgICBzdi0+cmdiYVNoYWRlck1h
dHJpeExvY2F0aW9uKCksIC0xKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCiAjZW5k
aWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgKaW5kZXggMzUw
N2NiMjBjZjE3ZTc5MzMxMmQ2ZWViM2U5NTNiN2Y4Y2ViZjI1OS4uYjMzNzc1MzIyMzg4MTJmYWNm
MGJlOTEzZjM1MWY1MTRhZTQ1ZDg2OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oCkBAIC0zNywyOCArMzcsNzQg
QEAKICNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlZpZGVvRnJh
bWVQcm92aWRlci5oIgogCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogLy8gQSBMYXllciB0aGF0IGNvbnRhaW5zIGEgVmlkZW8gZWxlbWVudC4KLWNsYXNz
IFZpZGVvTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBDb250ZW50TGF5ZXJDaHJvbWl1bSB7CitjbGFz
cyBWaWRlb0xheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8VmlkZW9MYXllckNocm9taXVtPiBjcmVhdGUoR3JhcGhpY3NM
YXllckNocm9taXVtKiBvd25lciA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVmlkZW9GcmFtZVByb3ZpZGVyKiA9IDApOwotICAgIHZpcnR1YWwg
Ym9vbCBkcmF3c0NvbnRlbnQoKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZUNvbnRlbnRzKCk7CisgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIHsgcmV0dXJu
IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZHJhdygpOworCisgICAgY2xhc3MgU2hhcmVkVmFs
dWVzIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNoYXJlZFZhbHVlcygpOworICAgICAgICB+U2hh
cmVkVmFsdWVzKCk7CisgICAgICAgIHVuc2lnbmVkIHl1dlNoYWRlclByb2dyYW0oKSBjb25zdCB7
IHJldHVybiBtX3l1dlNoYWRlclByb2dyYW07IH0KKyAgICAgICAgdW5zaWduZWQgcmdiYVNoYWRl
clByb2dyYW0oKSBjb25zdCB7IHJldHVybiBtX3JnYmFTaGFkZXJQcm9ncmFtOyB9CisgICAgICAg
IGludCB5dXZTaGFkZXJNYXRyaXhMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1feXV2U2hhZGVy
TWF0cml4TG9jYXRpb247IH0KKyAgICAgICAgaW50IHJnYmFTaGFkZXJNYXRyaXhMb2NhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fcmdiYVNoYWRlck1hdHJpeExvY2F0aW9uOyB9CisgICAgICAgIGlu
dCB5dXZXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3l1dldpZHRo
U2NhbGVGYWN0b3JMb2NhdGlvbjsgfQorICAgICAgICBpbnQgcmdiYVdpZHRoU2NhbGVGYWN0b3JM
b2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmdiYVdpZHRoU2NhbGVGYWN0b3JMb2NhdGlvbjsg
fQorICAgICAgICBpbnQgeVRleHR1cmVMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1feVRleHR1
cmVMb2NhdGlvbjsgfQorICAgICAgICBpbnQgdVRleHR1cmVMb2NhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fdVRleHR1cmVMb2NhdGlvbjsgfQorICAgICAgICBpbnQgdlRleHR1cmVMb2NhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fdlRleHR1cmVMb2NhdGlvbjsgfQorICAgICAgICBpbnQgeXV2QWxw
aGFMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1feXV2QWxwaGFMb2NhdGlvbjsgfQorICAgICAg
ICBpbnQgcmdiYVRleHR1cmVMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmdiYVRleHR1cmVM
b2NhdGlvbjsgfQorICAgICAgICBpbnQgY2NNYXRyaXhMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fY2NNYXRyaXhMb2NhdGlvbjsgfQorICAgICAgICBib29sIGluaXRpYWxpemVkKCkgY29uc3Qg
eyByZXR1cm4gbV9pbml0aWFsaXplZDsgfTsKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNpZ25l
ZCBtX3l1dlNoYWRlclByb2dyYW07CisgICAgICAgIHVuc2lnbmVkIG1fcmdiYVNoYWRlclByb2dy
YW07CisgICAgICAgIGludCBtX3l1dlNoYWRlck1hdHJpeExvY2F0aW9uOworICAgICAgICBpbnQg
bV9yZ2JhU2hhZGVyTWF0cml4TG9jYXRpb247CisgICAgICAgIGludCBtX3l1dldpZHRoU2NhbGVG
YWN0b3JMb2NhdGlvbjsKKyAgICAgICAgaW50IG1fcmdiYVdpZHRoU2NhbGVGYWN0b3JMb2NhdGlv
bjsKKyAgICAgICAgaW50IG1feVRleHR1cmVMb2NhdGlvbjsKKyAgICAgICAgaW50IG1fdVRleHR1
cmVMb2NhdGlvbjsKKyAgICAgICAgaW50IG1fdlRleHR1cmVMb2NhdGlvbjsKKyAgICAgICAgaW50
IG1fcmdiYVRleHR1cmVMb2NhdGlvbjsKKyAgICAgICAgaW50IG1fY2NNYXRyaXhMb2NhdGlvbjsK
KyAgICAgICAgaW50IG1feXV2QWxwaGFMb2NhdGlvbjsKKyAgICAgICAgYm9vbCBtX2luaXRpYWxp
emVkOworICAgIH07CiAKIHByaXZhdGU6Ci0gICAgVmlkZW9MYXllckNocm9taXVtKEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bSogb3duZXIsIFZpZGVvRnJhbWVQcm92aWRlciopOwotICAgIHZvaWQgY3Jl
YXRlVGV4dHVyZVJlY3QoY29uc3QgSW50U2l6ZSYgcmVxdWlyZWRUZXh0dXJlU2l6ZSwgY29uc3Qg
SW50UmVjdCYgdXBkYXRlUmVjdCwgdW5zaWduZWQgdGV4dHVyZUlkKTsKLSAgICB2b2lkIHVwZGF0
ZVRleHR1cmVSZWN0KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIHVuc2lnbmVkIHRleHR1cmVJ
ZCk7Ci0gICAgdm9pZCB1cGRhdGVDb21wbGV0ZWQoKTsKKyAgICBleHBsaWNpdCBWaWRlb0xheWVy
Q2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lciwgVmlkZW9GcmFtZVByb3ZpZGVy
KiBwcm92aWRlcik7CisgICAgflZpZGVvTGF5ZXJDaHJvbWl1bSgpOworICAgIHZvaWQgdXBkYXRl
WVVWQ29udGVudHMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiwgYm9vbCBuZWVkc0FsbG9jYXRl
KTsKKyAgICB2b2lkIGFsbG9jYXRlWVVWVGV4dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVt
Kik7CisgICAgdm9pZCB1cGRhdGVZVVZUZXh0dXJlcyhjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0q
KTsKKyAgICB2b2lkIHVwZGF0ZVJHQkFDb250ZW50cyhjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0q
LCBib29sIG5lZWRzQWxsb2NhdGUpOworICAgIHZvaWQgYWxsb2NhdGVUZXh0dXJlKHVuc2lnbmVk
IHRleHR1cmVJZCwgY29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50U2l6ZSYgZGltZW5zaW9ucywg
R0xlbnVtIGZvcm1hdCk7CisgICAgdm9pZCB1cGRhdGVUZXh0dXJlKHVuc2lnbmVkIHRleHR1cmVJ
ZCwgY29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50U2l6ZSYgZGltZW5zaW9ucywgR0xlbnVtIGZv
cm1hdCk7CisgICAgdm9pZCBkcmF3WVVWKGNvbnN0IFNoYXJlZFZhbHVlcyopOworICAgIHZvaWQg
ZHJhd1JHQkEoY29uc3QgU2hhcmVkVmFsdWVzKik7CisgICAgdm9pZCB1cGRhdGVDb250ZW50c0Nv
bXBsZXRlZCgpOwogCi0jaWYgUExBVEZPUk0oU0tJQSkKLSAgICBPd25QdHI8c2tpYTo6UGxhdGZv
cm1DYW52YXM+IG1fY2FudmFzOwotICAgIE93blB0cjxQbGF0Zm9ybUNvbnRleHRTa2lhPiBtX3Nr
aWFDb250ZXh0OwotI2VuZGlmCi0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gbV9ncmFwaGlj
c0NvbnRleHQ7CisgICAgSW50U2l6ZSBtX2FsbG9jYXRlZFRleHR1cmVTaXplOworICAgIHVuc2ln
bmVkIG1fZnJhbWVXaWR0aDsKKyAgICBWaWRlb0ZyYW1lQ2hyb21pdW06OkZvcm1hdCBtX2ZyYW1l
Rm9ybWF0OwogICAgIE93blB0cjxWaWRlb0ZyYW1lUHJvdmlkZXI+IG1fcHJvdmlkZXI7CisgICAg
Ym9vbCBtX3NraXBzRHJhdzsKKworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBjWVVWMlJHQls5XTsK
KyAgICB1bnNpZ25lZCBtX3l1dlRleHR1cmVzWzNdOworICAgIHVuc2lnbmVkIG1fcmdiYVRleHR1
cmU7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA1M2MxNmM4ZmFmNjgzMjkwMDczNmJlODc0MmQz
MzVlNWQ5N2U4OGNjLi44NGVhNTA4ZmRkNGNmYTI1MzhlM2Q0Y2RkOWZiY2UxZTcxYWUyNTg4IDEw
MDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wOS0xMyAgVmljdG9yaWEgS2lyc3Qg
IDx2cmtAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBGaXhpbmcgY29uc3RhbnRzIGluIFZpZGVvRnJhbWVDaHJvbWl1bUltcGwgc28g
dGhhdCBpdCBvdmVybG9hZHMgdGhlCisgICAgICAgIFZpZGVvRnJhbWVDaHJvbWl1bSBjb25zdCBk
ZWNsYXJhdGlvbnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NTA2OQorCisgICAgICAgICogc3JjL1ZpZGVvRnJhbWVDaHJvbWl1bUltcGwuY3BwOgor
CiAyMDEwLTA5LTEzICBKb25hdGhhbiBEaXhvbiAgPGpvdGhAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IFN0ZXZlIEJsb2NrLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9WaWRlb0ZyYW1lQ2hyb21pdW1JbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvVmlk
ZW9GcmFtZUNocm9taXVtSW1wbC5jcHAKaW5kZXggMmI5ODMyMGEzY2UwNTc2NTViNjdjZDBhNGM3
OGIxYmZiOWMxZTg2My4uODMzZjFmZmRiY2ZlNzk3YzdmNGFjNmRmYWU3YjM2NDE1ODI1ZGFmMiAx
MDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9WaWRlb0ZyYW1lQ2hyb21pdW1JbXBsLmNw
cAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1ZpZGVvRnJhbWVDaHJvbWl1bUltcGwuY3BwCkBA
IC0zNiwxNSArMzYsMTUgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLW5hbWVzcGFj
ZSBXZWJLaXQgeworY29uc3QgdW5zaWduZWQgVmlkZW9GcmFtZUNocm9taXVtOjpjTWF4UGxhbmVz
ID0gMzsKK2NvbnN0IHVuc2lnbmVkIFZpZGVvRnJhbWVDaHJvbWl1bTo6Y051bVJHQlBsYW5lcyA9
IDE7Citjb25zdCB1bnNpZ25lZCBWaWRlb0ZyYW1lQ2hyb21pdW06OmNSR0JQbGFuZSA9IDA7Citj
b25zdCB1bnNpZ25lZCBWaWRlb0ZyYW1lQ2hyb21pdW06OmNOdW1ZVVZQbGFuZXMgPSAzOworY29u
c3QgdW5zaWduZWQgVmlkZW9GcmFtZUNocm9taXVtOjpjWVBsYW5lID0gMDsKK2NvbnN0IHVuc2ln
bmVkIFZpZGVvRnJhbWVDaHJvbWl1bTo6Y1VQbGFuZSA9IDE7Citjb25zdCB1bnNpZ25lZCBWaWRl
b0ZyYW1lQ2hyb21pdW06OmNWUGxhbmUgPSAyOwogCi1jb25zdCB1bnNpZ25lZCBjTWF4UGxhbmVz
ID0gMzsKLWNvbnN0IHVuc2lnbmVkIGNOdW1SR0JQbGFuZXMgPSAxOwotY29uc3QgdW5zaWduZWQg
Y1JHQlBsYW5lID0gMDsKLWNvbnN0IHVuc2lnbmVkIGNOdW1ZVVZQbGFuZXMgPSAzOwotY29uc3Qg
dW5zaWduZWQgY1lQbGFuZSA9IDA7Ci1jb25zdCB1bnNpZ25lZCBjVVBsYW5lID0gMTsKLWNvbnN0
IHVuc2lnbmVkIGNWUGxhbmUgPSAyOworbmFtZXNwYWNlIFdlYktpdCB7CiAKIFdlYlZpZGVvRnJh
bWUqIFZpZGVvRnJhbWVDaHJvbWl1bUltcGw6OnRvV2ViVmlkZW9GcmFtZShWaWRlb0ZyYW1lQ2hy
b21pdW0qIHZpZGVvRnJhbWUpCiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68932</attachid>
            <date>2010-09-27 10:48:29 -0700</date>
            <delta_ts>2010-09-27 14:58:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45069-20100927104827.patch</filename>
            <type>text/plain</type>
            <size>33915</size>
            <attacher name="Victoria Kirst">vrk</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZGZjMzE0MGNiMGVkMjMxMWI0MTg4MjZhYjEzMjAwOTNjNjAwMjcwOC4uZWEzYzgwYTg5ZmMwNWQ2
OGZhNGY5ZDE3MGIxNDdhZDE2OWNkYzdlMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAxMC0wOS0xMyAgVmlj
dG9yaWEgS2lyc3QgIDx2cmtAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNb2RpZmllcyBWaWRlb0xheWVyQ2hyb21pdW0gdG8gZG8g
WVVWIHRvIFJHQiBjb2xvciBjb252ZXJzaW9uIGluIHRoZQorICAgICAgICBHUFUuIEFsc28gYWRk
cyBzdXBwb3J0IGZvciBSR0JBIHZpZGVvIGZyYW1lIGZvcm1hdHMsIHRob3VnaCB0aGlzIGNvZGUK
KyAgICAgICAgcGF0aCBpcyBjdXJyZW50bHkgbmV2ZXIgcnVuIGJlY2F1c2UgdGhlIHZpZGVvIGZy
YW1lcyBhcmUgaW4gWVYxMgorICAgICAgICBmb3JtYXQuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTA2OQorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZGVv
TGF5ZXJTaGFyZWRWYWx1ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hy
b21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlZp
ZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp+U2hhcmVkVmFsdWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6VmlkZW9MYXllckNocm9taXVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6flZpZGVvTGF5ZXJDaHJvbWl1bSk6Cisg
ICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlWVVWQ29udGVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjphbGxvY2F0ZVlVVlRleHR1cmVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlWVVWVGV4dHVy
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVSR0JBQ29u
dGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjphbGxvY2F0ZVRl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVu
dHNDb21wbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjpkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6ZHJhd1lVVik6CisgICAg
ICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OmRyYXdSR0JBKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAg
KFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp5dXZTaGFkZXJQcm9ncmFt
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpy
Z2JhU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06
OlNoYXJlZFZhbHVlczo6eXV2U2hhZGVyTWF0cml4TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6VmlkZW9MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6OnJnYmFTaGFkZXJNYXRyaXhMb2Nh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVl
czo6eXV2V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVv
TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpyZ2JhV2lkdGhTY2FsZUZhY3RvckxvY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp5
VGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6
U2hhcmVkVmFsdWVzOjp1VGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVv
TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp2VGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp5dXZBbHBoYUxvY2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVz
OjpyZ2JhVGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJv
bWl1bTo6U2hhcmVkVmFsdWVzOjpjY01hdHJpeExvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjppbml0aWFsaXplZCk6CisKIDIwMTAt
MDktMTQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBLZW5uZXRoIFJ1c3NlbGwuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggNmEyMDg4NzYy
NzkzYzVlMDgzOTM0NWE3YTdjOTk2MjIzOWI3ZWRmZC4uMjFjODViYTJlNjY3NWFhM2JkMjQ2ODc2
MWI3YjQ2YTE4ZTY0N2Q3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNzE2LDcgKzcx
Niw4IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0
cygpCiAgICAgbV9sYXllclNoYXJlZFZhbHVlcyA9IGFkb3B0UHRyKG5ldyBMYXllckNocm9taXVt
OjpTaGFyZWRWYWx1ZXMobV9jb250ZXh0LmdldCgpKSk7CiAgICAgbV9jb250ZW50TGF5ZXJTaGFy
ZWRWYWx1ZXMgPSBhZG9wdFB0cihuZXcgQ29udGVudExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVl
cyhtX2NvbnRleHQuZ2V0KCkpKTsKICAgICBtX2NhbnZhc0xheWVyU2hhcmVkVmFsdWVzID0gYWRv
cHRQdHIobmV3IENhbnZhc0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyhtX2NvbnRleHQuZ2V0
KCkpKTsKLSAgICBpZiAoIW1fbGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwgIW1f
Y29udGVudExheWVyU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpIHx8ICFtX2NhbnZhc0xheWVy
U2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpKSB7CisgICAgbV92aWRlb0xheWVyU2hhcmVkVmFs
dWVzID0gYWRvcHRQdHIobmV3IFZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKG1fY29u
dGV4dC5nZXQoKSkpOworICAgIGlmICghbV9sYXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQo
KSB8fCAhbV9jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwgIW1fY2Fu
dmFzTGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwgIW1fdmlkZW9MYXllclNoYXJl
ZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSkgewogICAgICAgICBjbGVhbnVwU2hhcmVkT2JqZWN0cygp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtNzMxLDYgKzczMiw3IEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cygpCiAgICAgbV9sYXll
clNoYXJlZFZhbHVlcy5jbGVhcigpOwogICAgIG1fY29udGVudExheWVyU2hhcmVkVmFsdWVzLmNs
ZWFyKCk7CiAgICAgbV9jYW52YXNMYXllclNoYXJlZFZhbHVlcy5jbGVhcigpOworICAgIG1fdmlk
ZW9MYXllclNoYXJlZFZhbHVlcy5jbGVhcigpOwogCiAgICAgaWYgKG1fc2Nyb2xsU2hhZGVyUHJv
Z3JhbSkgewogICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0o
bV9zY3JvbGxTaGFkZXJQcm9ncmFtKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCBjNzMzMjI4
NjI5M2Y2ZWNkOTYwZjIyODc0MjQ2MzQyZDM3OGQ0ZGU0Li5lYjdkZWEyMzAwNWJiMjMwNThlNGU4
NWM5MTRiNTZlY2MyYTJkOWJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTM5LDYgKzM5LDcg
QEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIlNrQml0bWFwLmgiCisjaW5jbHVkZSAiVmlkZW9MYXllckNocm9taXVtLmgiCiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtMTAyLDYgKzEwMyw3IEBAIHB1YmxpYzoKICAgICBj
b25zdCBMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIGxheWVyU2hhcmVkVmFsdWVzKCkgY29u
c3QgeyByZXR1cm4gbV9sYXllclNoYXJlZFZhbHVlcy5nZXQoKTsgfQogICAgIGNvbnN0IENvbnRl
bnRMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIGNvbnRlbnRMYXllclNoYXJlZFZhbHVlcygp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGVudExheWVyU2hhcmVkVmFsdWVzLmdldCgpOyB9CiAgICAg
Y29uc3QgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiBjYW52YXNMYXllclNoYXJl
ZFZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMuZ2V0KCk7
IH0KKyAgICBjb25zdCBWaWRlb0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyogdmlkZW9MYXll
clNoYXJlZFZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9MYXllclNoYXJlZFZhbHVlcy5n
ZXQoKTsgfQogCiAgICAgdm9pZCByZXNpemVPbnNjcmVlbkNvbnRlbnQoY29uc3QgSW50U2l6ZSYp
OwogCkBAIC0xNzAsNiArMTcyLDcgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8TGF5ZXJDaHJvbWl1
bTo6U2hhcmVkVmFsdWVzPiBtX2xheWVyU2hhcmVkVmFsdWVzOwogICAgIE93blB0cjxDb250ZW50
TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzPiBtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlczsK
ICAgICBPd25QdHI8Q2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzPiBtX2NhbnZhc0xh
eWVyU2hhcmVkVmFsdWVzOworICAgIE93blB0cjxWaWRlb0xheWVyQ2hyb21pdW06OlNoYXJlZFZh
bHVlcz4gbV92aWRlb0xheWVyU2hhcmVkVmFsdWVzOwogCiAgICAgT3duUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBtX2NvbnRleHQ7CiB9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9WaWRlb0ZyYW1lQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVmlkZW9GcmFtZUNocm9taXVtLmgKaW5kZXggYmJkNjc3ZTQ5MTc4ZTE1
MzQyMDBkYjIxNDZjMTM3YzZkNWM1N2RlNS4uMDFkNDI5YTk1MTY1Y2ViN2ExMTIxOGQ2MmM4YmU3
YmEyMzI3NjljMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9WaWRlb0ZyYW1lQ2hyb21pdW0uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1ZpZGVvRnJhbWVDaHJvbWl1bS5oCkBAIC0zMSw2ICszMSw4IEBACiAjaWZuZGVmIFZp
ZGVvRnJhbWVDaHJvbWl1bV9oCiAjZGVmaW5lIFZpZGVvRnJhbWVDaHJvbWl1bV9oCiAKKyNpbmNs
dWRlICJJbnRTaXplLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gQSBjbGFzcyB0aGF0
IHJlcHJlc2VudHMgYSB2aWRlbyBmcmFtZSBpbiBjaHJvbWl1bS4KQEAgLTc0LDYgKzc2LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdW5zaWduZWQgcGxhbmVzKCkgY29uc3QgPSAwOwogICAgIHZp
cnR1YWwgaW50IHN0cmlkZSh1bnNpZ25lZCBwbGFuZSkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
Y29uc3Qgdm9pZCogZGF0YSh1bnNpZ25lZCBwbGFuZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
Y29uc3QgSW50U2l6ZSByZXF1aXJlZFRleHR1cmVTaXplKHVuc2lnbmVkIHBsYW5lKSBjb25zdCA9
IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXgg
MGZiMWJiNDliYTE0YTI3OTYwNmQ3MDhhYjUzMzUzZmQ2ODhkYzA3OS4uYTMzMzZmOTJhMDg5M2Mw
OWZhMDcyZjdmZGJlYjdlZDA3NzkyZjE4MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcApAQCAtMzYsMTUg
KzM2LDEzMiBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5
ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCi0j
aW5jbHVkZSAic2tpYS9leHQvcGxhdGZvcm1fY2FudmFzLmgiCi0KLSNpZiBQTEFURk9STShTS0lB
KQotI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4
dFNraWEuaCIKLSNlbmRpZgorI2luY2x1ZGUgIlZpZGVvRnJhbWVDaHJvbWl1bS5oIgorI2luY2x1
ZGUgIlZpZGVvRnJhbWVQcm92aWRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NvbnN0
IGZsb2F0IFZpZGVvTGF5ZXJDaHJvbWl1bTo6Y1lVVjJSR0JbOV0gPSB7CisgICAgMS5mLCAxLmYs
IDEuZiwKKyAgICAwLmYsIC0uMzQ0ZiwgMS43NzJmLAorICAgIDEuNDAzZiwgLS43MTRmLCAwLmYs
Cit9OworCitWaWRlb0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFsdWVzKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAg
LCBtX3l1dlNoYWRlclByb2dyYW0oMCkKKyAgICAsIG1fcmdiYVNoYWRlclByb2dyYW0oMCkKKyAg
ICAsIG1feXV2U2hhZGVyTWF0cml4TG9jYXRpb24oMCkKKyAgICAsIG1feXV2V2lkdGhTY2FsZUZh
Y3RvckxvY2F0aW9uKDApCisgICAgLCBtX3JnYmFTaGFkZXJNYXRyaXhMb2NhdGlvbigwKQorICAg
ICwgbV9yZ2JhV2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKDApCisgICAgLCBtX2NjTWF0cml4TG9j
YXRpb24oMCkKKyAgICAsIG1feVRleHR1cmVMb2NhdGlvbigwKQorICAgICwgbV91VGV4dHVyZUxv
Y2F0aW9uKDApCisgICAgLCBtX3ZUZXh0dXJlTG9jYXRpb24oMCkKKyAgICAsIG1fcmdiYVRleHR1
cmVMb2NhdGlvbigwKQorICAgICwgbV95dXZBbHBoYUxvY2F0aW9uKDApCisgICAgLCBtX3JnYmFB
bHBoYUxvY2F0aW9uKDApCisgICAgLCBtX2luaXRpYWxpemVkKGZhbHNlKQoreworICAgIC8vIEZy
YW1lIHRleHR1cmVzIGFyZSBhbGxvY2F0ZWQgYmFzZWQgb24gc3RyaWRlIHdpZHRoLCBub3Qgdmlz
aWJsZSBmcmFtZQorICAgIC8vIHdpZHRoLCBzdWNoIHRoYXQgdGhlcmUgaXMgYSBndWFyYW50ZWUg
dGhhdCB0aGUgZnJhbWUgcm93cyBsaW5lIHVwCisgICAgLy8gcHJvcGVybHkgYW5kIGFyZSBub3Qg
c2hpZnRlZCBieSAoc3RyaWRlIC0gd2lkdGgpIHBpeGVscy4gVG8gaGlkZSB0aGUKKyAgICAvLyAi
cGFkZGluZyIgcGl4ZWxzIGJldHdlZW4gdGhlIGVkZ2Ugb2YgdGhlIHZpc2libGUgZnJhbWUgd2lk
dGggYW5kIHRoZSBlbmQKKyAgICAvLyBvZiB0aGUgc3RyaWRlLCB3ZSBnaXZlIHRoZSBzaGFkZXIg
YSB3aWR0aFNjYWxlRmFjdG9yICg8PTEuMCkgb2YgaG93IG11Y2gKKyAgICAvLyBvZiB0aGUgd2lk
dGggb2YgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHNob3duIHdoZW4gZHJhd2luZyB0aGUgdGV4dHVy
ZSBvbnRvCisgICAgLy8gdGhlIHZlcnRpY2VzLgorICAgIGNoYXIgdmVydGV4U2hhZGVyU3RyaW5n
W10gPQorICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7ICAgICBcbiIKKyAgICAgICAg
ImF0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb247ICAgXG4iCisgICAgICAgICJhdHRyaWJ1dGUgdmVj
MiBhX3RleENvb3JkOyAgIFxuIgorICAgICAgICAidW5pZm9ybSBtYXQ0IG1hdHJpeDsgICAgICAg
ICBcbiIKKyAgICAgICAgInZhcnlpbmcgdmVjMiB2X3RleENvb3JkOyAgICAgXG4iCisgICAgICAg
ICJ1bmlmb3JtIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3I7ICBcbiIKKyAgICAgICAgInZvaWQgbWFp
bigpICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFxuIgorICAgICAgICAiICBnbF9Qb3NpdGlvbiA9IG1hdHJpeCAqIGFfcG9zaXRpb247
IFxuIgorICAgICAgICAiICB2X3RleENvb3JkID0gdmVjMih3aWR0aFNjYWxlRmFjdG9yICogYV90
ZXhDb29yZC54LCBhX3RleENvb3JkLnkpOyBcbiIKKyAgICAgICAgIn0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXG4iOworCisgICAgY2hhciB5dXZGcmFnbWVudFNoYWRlclN0cmluZ1tdID0K
KyAgICAgICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXG4iCisgICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBpbnQ7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJE
IHlfdGV4dHVyZTsgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ1bmlmb3Jt
IHNhbXBsZXIyRCB1X3RleHR1cmU7ICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAg
ICAidW5pZm9ybSBzYW1wbGVyMkQgdl90ZXh0dXJlOyAgICAgICAgICAgICAgICAgICAgICAgICBc
biIKKyAgICAgICAgInVuaWZvcm0gZmxvYXQgYWxwaGE7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXG4iCisgICAgICAgICJ1bmlmb3JtIG1hdDMgY2NfbWF0cml4OyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICIgIGZs
b2F0IHkgPSB0ZXh0dXJlMkQoeV90ZXh0dXJlLCB2X3RleENvb3JkKS54OyAgICAgIFxuIgorICAg
ICAgICAiICBmbG9hdCB1ID0gdGV4dHVyZTJEKHVfdGV4dHVyZSwgdl90ZXhDb29yZCkuciAtIC41
OyBcbiIKKyAgICAgICAgIiAgZmxvYXQgdiA9IHRleHR1cmUyRCh2X3RleHR1cmUsIHZfdGV4Q29v
cmQpLnIgLSAuNTsgXG4iCisgICAgICAgICIgIHZlYzMgcmdiID0gY2NfbWF0cml4ICogdmVjMyh5
LCB1LCB2KTsgICAgICAgICAgICAgIFxuIgorICAgICAgICAiICBnbF9GcmFnQ29sb3IgPSB2ZWM0
KHJnYi54LCByZ2IueSwgcmdiLnosIDEuMCkgKiBhbHBoYTsgXG4iCisgICAgICAgICJ9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKworICAg
IGNoYXIgcmdiYUZyYWdtZW50U2hhZGVyU3RyaW5nW10gPQorICAgICAgICAicHJlY2lzaW9uIG1l
ZGl1bXAgZmxvYXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInZh
cnlpbmcgdmVjMiB2X3RleENvb3JkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisg
ICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCByZ2JhX3RleHR1cmU7ICAgICAgICAgICAgICAgICAg
ICAgIFxuIgorICAgICAgICAidW5pZm9ybSBmbG9hdCBhbHBoYTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInZvaWQgbWFpbigpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAiICB2ZWM0IHRl
eENvbG9yID0gdGV4dHVyZTJEKHJnYmFfdGV4dHVyZSwgdmVjMih2X3RleENvb3JkLngsIDEuMCAt
IHZfdGV4Q29vcmQueSkpOyBcbiIKKyAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh0ZXhD
b2xvci54LCB0ZXhDb2xvci55LCB0ZXhDb2xvci56LCB0ZXhDb2xvci53KSAqIGFscGhhOyBcbiIK
KyAgICAgICAgIn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXG4iOworCisgICAgbV9yZ2JhU2hhZGVyUHJvZ3JhbSA9IGNyZWF0ZVNoYWRlclByb2dy
YW0obV9jb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTdHJpbmcsIHJnYmFGcmFnbWVudFNoYWRlclN0cmlu
Zyk7CisgICAgaWYgKCFtX3JnYmFTaGFkZXJQcm9ncmFtKSB7CisgICAgICAgIExPR19FUlJPUigi
VmlkZW9MYXllckNocm9taXVtOiBGYWlsZWQgdG8gY3JlYXRlIHJnYmEgc2hhZGVyIHByb2dyYW0i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1feXV2U2hhZGVyUHJvZ3JhbSA9IGNy
ZWF0ZVNoYWRlclByb2dyYW0obV9jb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTdHJpbmcsIHl1dkZyYWdt
ZW50U2hhZGVyU3RyaW5nKTsKKyAgICBpZiAoIW1feXV2U2hhZGVyUHJvZ3JhbSkgeworICAgICAg
ICBMT0dfRVJST1IoIlZpZGVvTGF5ZXJDaHJvbWl1bTogRmFpbGVkIHRvIGNyZWF0ZSB5dXYgc2hh
ZGVyIHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1feXV2U2hhZGVy
TWF0cml4TG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3l1dlNoYWRl
clByb2dyYW0sICJtYXRyaXgiKTsKKyAgICBtX3l1dldpZHRoU2NhbGVGYWN0b3JMb2NhdGlvbiA9
IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1feXV2U2hhZGVyUHJvZ3JhbSwgIndpZHRo
U2NhbGVGYWN0b3IiKTsKKyAgICBtX3lUZXh0dXJlTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVu
aWZvcm1Mb2NhdGlvbihtX3l1dlNoYWRlclByb2dyYW0sICJ5X3RleHR1cmUiKTsKKyAgICBtX3VU
ZXh0dXJlTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3l1dlNoYWRl
clByb2dyYW0sICJ1X3RleHR1cmUiKTsKKyAgICBtX3ZUZXh0dXJlTG9jYXRpb24gPSBtX2NvbnRl
eHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3l1dlNoYWRlclByb2dyYW0sICJ2X3RleHR1cmUiKTsK
KyAgICBtX2NjTWF0cml4TG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbiht
X3l1dlNoYWRlclByb2dyYW0sICJjY19tYXRyaXgiKTsKKyAgICBtX3l1dkFscGhhTG9jYXRpb24g
PSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3l1dlNoYWRlclByb2dyYW0sICJhbHBo
YSIpOworCisgICAgQVNTRVJUKG1feXV2U2hhZGVyTWF0cml4TG9jYXRpb24gIT0gLTEpOworICAg
IEFTU0VSVChtX3l1dldpZHRoU2NhbGVGYWN0b3JMb2NhdGlvbiAhPSAtMSk7CisgICAgQVNTRVJU
KG1feVRleHR1cmVMb2NhdGlvbiAhPSAtMSk7CisgICAgQVNTRVJUKG1fdVRleHR1cmVMb2NhdGlv
biAhPSAtMSk7CisgICAgQVNTRVJUKG1fdlRleHR1cmVMb2NhdGlvbiAhPSAtMSk7CisgICAgQVNT
RVJUKG1fY2NNYXRyaXhMb2NhdGlvbiAhPSAtMSk7CisgICAgQVNTRVJUKG1feXV2QWxwaGFMb2Nh
dGlvbiAhPSAtMSk7CisKKyAgICBtX3JnYmFTaGFkZXJNYXRyaXhMb2NhdGlvbiA9IG1fY29udGV4
dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1fcmdiYVNoYWRlclByb2dyYW0sICJtYXRyaXgiKTsKKyAg
ICBtX3JnYmFUZXh0dXJlTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbiht
X3JnYmFTaGFkZXJQcm9ncmFtLCAicmdiYV90ZXh0dXJlIik7CisgICAgbV9yZ2JhV2lkdGhTY2Fs
ZUZhY3RvckxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9yZ2JhU2hh
ZGVyUHJvZ3JhbSwgIndpZHRoU2NhbGVGYWN0b3IiKTsKKyAgICBtX3JnYmFBbHBoYUxvY2F0aW9u
ID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9yZ2JhU2hhZGVyUHJvZ3JhbSwgImFs
cGhhIik7CisKKyAgICBBU1NFUlQobV9yZ2JhU2hhZGVyTWF0cml4TG9jYXRpb24gIT0gLTEpOwor
ICAgIEFTU0VSVChtX3JnYmFUZXh0dXJlTG9jYXRpb24gIT0gLTEpOworICAgIEFTU0VSVChtX3Jn
YmFXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24gIT0gLTEpOworICAgIEFTU0VSVChtX3JnYmFBbHBo
YUxvY2F0aW9uICE9IC0xKTsKKworICAgIG1faW5pdGlhbGl6ZWQgPSB0cnVlOworfQorCitWaWRl
b0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6flNoYXJlZFZhbHVlcygpCit7CisgICAgaWYg
KG1feXV2U2hhZGVyUHJvZ3JhbSkKKyAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5k
ZWxldGVQcm9ncmFtKG1feXV2U2hhZGVyUHJvZ3JhbSkpOworICAgIGlmIChtX3JnYmFTaGFkZXJQ
cm9ncmFtKQorICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0o
bV9yZ2JhU2hhZGVyUHJvZ3JhbSkpOworfQorCiBQYXNzUmVmUHRyPFZpZGVvTGF5ZXJDaHJvbWl1
bT4gVmlkZW9MYXllckNocm9taXVtOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25l
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWaWRlb0ZyYW1lUHJvdmlkZXIqIHByb3ZpZGVyKQogewpAQCAtNTIsMTQgKzE2OSwyNSBA
QCBQYXNzUmVmUHRyPFZpZGVvTGF5ZXJDaHJvbWl1bT4gVmlkZW9MYXllckNocm9taXVtOjpjcmVh
dGUoR3JhcGhpY3NMYXllckNocm9taXVtKgogfQogCiBWaWRlb0xheWVyQ2hyb21pdW06OlZpZGVv
TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyLCBWaWRlb0ZyYW1lUHJv
dmlkZXIqIHByb3ZpZGVyKQotICAgIDogQ29udGVudExheWVyQ2hyb21pdW0ob3duZXIpCi0jaWYg
UExBVEZPUk0oU0tJQSkKLSAgICAsIG1fY2FudmFzKDApCi0gICAgLCBtX3NraWFDb250ZXh0KDAp
Ci0jZW5kaWYKLSAgICAsIG1fZ3JhcGhpY3NDb250ZXh0KDApCisgICAgOiBMYXllckNocm9taXVt
KG93bmVyKQorICAgICwgbV9za2lwc0RyYXcodHJ1ZSkKKyAgICAsIG1fZnJhbWVGb3JtYXQoVmlk
ZW9GcmFtZUNocm9taXVtOjpJbnZhbGlkKQogICAgICwgbV9wcm92aWRlcihwcm92aWRlcikKIHsK
KyAgICBmb3IgKGludCBwbGFuZSA9IDA7IHBsYW5lIDwgVmlkZW9GcmFtZUNocm9taXVtOjpjTWF4
UGxhbmVzOyBwbGFuZSsrKSB7CisgICAgICAgIG1fdGV4dHVyZXNbcGxhbmVdID0gMDsKKyAgICAg
ICAgbV90ZXh0dXJlU2l6ZXNbcGxhbmVdID0gSW50U2l6ZSgpOworICAgICAgICBtX2ZyYW1lU2l6
ZXNbcGxhbmVdID0gSW50U2l6ZSgpOworICAgIH0KK30KKworVmlkZW9MYXllckNocm9taXVtOjp+
VmlkZW9MYXllckNocm9taXVtKCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9
IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7CisgICAgZm9yIChpbnQgcGxhbmUgPSAwOyBwbGFuZSA8
IFZpZGVvRnJhbWVDaHJvbWl1bTo6Y01heFBsYW5lczsgcGxhbmUrKykgeworICAgICAgICBpZiAo
bV90ZXh0dXJlc1twbGFuZV0pCisgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+ZGVs
ZXRlVGV4dHVyZShtX3RleHR1cmVzW3BsYW5lXSkpOworICAgIH0KIH0KIAogdm9pZCBWaWRlb0xh
eWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKCkKQEAgLTcwLDEyOSArMTk4LDE3MSBAQCB2b2lk
IFZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHMoKQogCiAgICAgQVNTRVJUKGRyYXdz
Q29udGVudCgpKTsKIAotICAgIEludFJlY3QgZGlydHlSZWN0KG1fZGlydHlSZWN0KTsKLSAgICBJ
bnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemU7Ci0KLSNpZiBQTEFURk9STShTS0lBKQotICAgIHJl
cXVpcmVkVGV4dHVyZVNpemUgPSBtX2JvdW5kczsKLSAgICBJbnRSZWN0IGJvdW5kc1JlY3QoSW50
UG9pbnQoMCwgMCksIG1fYm91bmRzKTsKLQotICAgIC8vIElmIHRoZSB0ZXh0dXJlIG5lZWRzIHRv
IGJlIHJlYWxsb2NhdGVkLCB0aGVuIHdlIG11c3QgcmVkcmF3IHRoZSBlbnRpcmUKLSAgICAvLyBj
b250ZW50cyBvZiB0aGUgbGF5ZXIuCi0gICAgaWYgKHJlcXVpcmVkVGV4dHVyZVNpemUgIT0gbV9h
bGxvY2F0ZWRUZXh0dXJlU2l6ZSkKLSAgICAgICAgZGlydHlSZWN0ID0gYm91bmRzUmVjdDsKLSAg
ICBlbHNlIHsKLSAgICAgICAgLy8gQ2xpcCB0aGUgZGlydHlSZWN0IHRvIHRoZSBzaXplIG9mIHRo
ZSBsYXllciB0byBhdm9pZCBkcmF3aW5nIG91dHNpZGUKLSAgICAgICAgLy8gdGhlIGJvdW5kcyBv
ZiB0aGUgYmFja2luZyB0ZXh0dXJlLgotICAgICAgICBkaXJ0eVJlY3QuaW50ZXJzZWN0KGJvdW5k
c1JlY3QpOwotICAgIH0KLQotICAgIGlmICghbV9jYW52YXMuZ2V0KCkKLSAgICAgICAgfHwgZGly
dHlSZWN0LndpZHRoKCkgIT0gbV9jYW52YXMtPmdldERldmljZSgpLT53aWR0aCgpCi0gICAgICAg
IHx8IGRpcnR5UmVjdC5oZWlnaHQoKSAhPSBtX2NhbnZhcy0+Z2V0RGV2aWNlKCktPmhlaWdodCgp
KSB7Ci0gICAgICAgIG1fY2FudmFzID0gbmV3IHNraWE6OlBsYXRmb3JtQ2FudmFzKGRpcnR5UmVj
dC53aWR0aCgpLCBkaXJ0eVJlY3QuaGVpZ2h0KCksIHRydWUpOwotICAgICAgICBtX3NraWFDb250
ZXh0ID0gbmV3IFBsYXRmb3JtQ29udGV4dFNraWEobV9jYW52YXMuZ2V0KCkpOworICAgIFZpZGVv
RnJhbWVDaHJvbWl1bSogZnJhbWUgPSAwOworICAgIGJvb2wgbmVlZHNBbGxvY2F0ZSA9IGZhbHNl
OworICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7CiAKLSAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQg
dG8gZ2V0IHRleHQgdG8gc2hvdyB1cCBjb3JyZWN0bHkuCi0gICAgICAgIC8vIEZJWE1FOiBEb2Vz
IHRoaXMgdGFrZSB1cyBkb3duIGEgdmVyeSBzbG93IHRleHQgcmVuZGVyaW5nIHBhdGg/Ci0gICAg
ICAgIG1fc2tpYUNvbnRleHQtPnNldERyYXdpbmdUb0ltYWdlQnVmZmVyKHRydWUpOwotICAgICAg
ICBtX2dyYXBoaWNzQ29udGV4dCA9IG5ldyBHcmFwaGljc0NvbnRleHQocmVpbnRlcnByZXRfY2Fz
dDxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCo+KG1fc2tpYUNvbnRleHQuZ2V0KCkpKTsKKyAgICBm
cmFtZSA9IG1fcHJvdmlkZXItPmdldEN1cnJlbnRGcmFtZSgpOworICAgIGlmICghZnJhbWUpIHsK
KyAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOworICAgICAgICBtX3Byb3ZpZGVyLT5wdXRDdXJy
ZW50RnJhbWUoZnJhbWUpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gQnJpbmcg
dGhlIGNhbnZhcyBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFpbnQgcmVjdC4K
LSAgICBtX2NhbnZhcy0+dHJhbnNsYXRlKHN0YXRpY19jYXN0PFNrU2NhbGFyPigtZGlydHlSZWN0
LngoKSksIHN0YXRpY19jYXN0PFNrU2NhbGFyPigtZGlydHlSZWN0LnkoKSkpOworICAgIG1fZnJh
bWVGb3JtYXQgPSBmcmFtZS0+Zm9ybWF0KCk7CisgICAgdW5zaWduZWQgdGV4dHVyZUZvcm1hdCA9
IGRldGVybWluZVRleHR1cmVGb3JtYXQoZnJhbWUpOworICAgIGlmICh0ZXh0dXJlRm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKSB7CisgICAgICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgb3RoZXIgcGF0aHMuCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgfQog
Ci0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHRlc3Qgd2hlbiB0aWxlZCBsYXllcnMgYXJlIGlt
cGxlbWVudGVkLgotICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7Ci0gICAgaWYgKCFsYXllclJlbmRl
cmVyKCktPmNoZWNrVGV4dHVyZVNpemUocmVxdWlyZWRUZXh0dXJlU2l6ZSkpIHsKKyAgICAvLyBB
bGxvY2F0ZSB0ZXh0dXJlcyBmb3IgcGxhbmVzIGlmIHRoZXkgYXJlIG5vdCBhbGxvY2F0ZWQgYWxy
ZWFkeSwgb3IKKyAgICAvLyByZWFsbG9jYXRlIHRleHR1cmVzIHRoYXQgYXJlIHRoZSB3cm9uZyBz
aXplIGZvciB0aGUgZnJhbWUuCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXll
clJlbmRlcmVyQ29udGV4dCgpOworICAgIGJvb2wgdGV4dHVyZXNBbGxvY2F0ZWQgPSBhbGxvY2F0
ZVRleHR1cmVzSWZOZWVkZWQoY29udGV4dCwgZnJhbWUsIHRleHR1cmVGb3JtYXQpOworICAgIGlm
ICghdGV4dHVyZXNBbGxvY2F0ZWQpIHsKICAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOworICAg
ICAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUoZnJhbWUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgdW5zaWduZWQgdGV4dHVyZUlkID0gbV9jb250ZW50c1RleHR1cmU7Ci0g
ICAgaWYgKCF0ZXh0dXJlSWQpCi0gICAgICAgIHRleHR1cmVJZCA9IGxheWVyUmVuZGVyZXIoKS0+
Y3JlYXRlTGF5ZXJUZXh0dXJlKCk7Ci0KLSAgICAvLyBJZiB0aGUgdGV4dHVyZSBpZCBvciBzaXpl
IGNoYW5nZWQgc2luY2UgbGFzdCB0aW1lLCB0aGVuIHdlIG5lZWQgdG8gdGVsbCBHTAotICAgIC8v
IHRvIHJlLWFsbG9jYXRlIGEgdGV4dHVyZS4KLSAgICBpZiAobV9jb250ZW50c1RleHR1cmUgIT0g
dGV4dHVyZUlkIHx8IHJlcXVpcmVkVGV4dHVyZVNpemUgIT0gbV9hbGxvY2F0ZWRUZXh0dXJlU2l6
ZSkKLSAgICAgICAgY3JlYXRlVGV4dHVyZVJlY3QocmVxdWlyZWRUZXh0dXJlU2l6ZSwgZGlydHlS
ZWN0LCB0ZXh0dXJlSWQpOwotICAgIGVsc2UKLSAgICAgICAgdXBkYXRlVGV4dHVyZVJlY3QoZGly
dHlSZWN0LCB0ZXh0dXJlSWQpOwotI2Vsc2UKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IG5vbi1z
a2lhIHBhdGgKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotI2VuZGlmCisgICAgLy8gVXBkYXRlIHRl
eHR1cmUgcGxhbmVzLgorICAgIGZvciAoaW50IHBsYW5lID0gMDsgcGxhbmUgPCBmcmFtZS0+cGxh
bmVzKCk7IHBsYW5lKyspIHsKKyAgICAgICAgQVNTRVJUKGZyYW1lLT5yZXF1aXJlZFRleHR1cmVT
aXplKHBsYW5lKSA9PSBtX3RleHR1cmVTaXplc1twbGFuZV0pOworICAgICAgICB1cGRhdGVUZXh0
dXJlKGNvbnRleHQsIG1fdGV4dHVyZXNbcGxhbmVdLCBmcmFtZS0+cmVxdWlyZWRUZXh0dXJlU2l6
ZShwbGFuZSksIHRleHR1cmVGb3JtYXQsIGZyYW1lLT5kYXRhKHBsYW5lKSk7CisgICAgfQorCisg
ICAgbV9kaXJ0eVJlY3Quc2V0U2l6ZShGbG9hdFNpemUoKSk7CisgICAgbV9jb250ZW50c0RpcnR5
ID0gZmFsc2U7CisgICAgbV9wcm92aWRlci0+cHV0Q3VycmVudEZyYW1lKGZyYW1lKTsKIH0KIAot
dm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVSZWN0KGNvbnN0IEludFNpemUm
IHJlcXVpcmVkVGV4dHVyZVNpemUsIGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIHVuc2lnbmVk
IHRleHR1cmVJZCkKK3Vuc2lnbmVkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6ZGV0ZXJtaW5lVGV4dHVy
ZUZvcm1hdChWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lKQogewotICAgIC8vIFBhaW50IGludG8g
Z3JhcGhpY3MgY29udGV4dCBhbmQgZ2V0IGJpdG1hcC4KLSAgICBtX293bmVyLT5wYWludEdyYXBo
aWNzTGF5ZXJDb250ZW50cygqbV9ncmFwaGljc0NvbnRleHQsIHVwZGF0ZVJlY3QpOwotICAgIHZv
aWQqIHBpeGVscyA9IDA7Ci0gICAgSW50U2l6ZSBiaXRtYXBTaXplID0gSW50U2l6ZSgpOwotI2lm
IFBMQVRGT1JNKFNLSUEpCi0gICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IG1fY2FudmFzLT5n
ZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKLSAgICBjb25zdCBTa0JpdG1hcCogc2tp
YUJpdG1hcCA9ICZiaXRtYXA7Ci0gICAgQVNTRVJUKHNraWFCaXRtYXApOwotCi0gICAgU2tBdXRv
TG9ja1BpeGVscyBsb2NrKCpza2lhQml0bWFwKTsKLSAgICBTa0JpdG1hcDo6Q29uZmlnIHNraWFD
b25maWcgPSBza2lhQml0bWFwLT5jb25maWcoKTsKLSAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0
byBzdXBwb3J0IG1vcmUgaW1hZ2UgY29uZmlndXJhdGlvbnM/Ci0gICAgaWYgKHNraWFDb25maWcg
PT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKSB7Ci0gICAgICAgIHBpeGVscyA9IHNraWFC
aXRtYXAtPmdldFBpeGVscygpOwotICAgICAgICBiaXRtYXBTaXplID0gSW50U2l6ZShza2lhQml0
bWFwLT53aWR0aCgpLCBza2lhQml0bWFwLT5oZWlnaHQoKSk7CisgICAgc3dpdGNoIChmcmFtZS0+
Zm9ybWF0KCkpIHsKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6WVYxMjoKKyAgICAgICAg
cmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U7CisgICAgY2FzZSBWaWRlb0ZyYW1l
Q2hyb21pdW06OlJHQkE6CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsK
ICAgICB9Ci0jZWxzZQotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbm9uLXNraWEgcGF0aAotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0jZW5kaWYKLSAgICBpZiAoIXBpeGVscykKLSAgICAgICAgcmV0
dXJuOworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRTsKK30KIAot
ICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsK
LSAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
dGV4dHVyZUlkKTsKLSAgICBBU1NFUlQoYml0bWFwU2l6ZSA9PSByZXF1aXJlZFRleHR1cmVTaXpl
KTsKLSAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgp
LCByZXF1aXJlZFRleHR1cmVTaXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHBpeGVscyk7Citib29sIFZpZGVv
TGF5ZXJDaHJvbWl1bTo6YWxsb2NhdGVUZXh0dXJlc0lmTmVlZGVkKEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0LCBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lLCB1bnNpZ25lZCB0ZXh0dXJlRm9y
bWF0KQoreworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBBU1NFUlQoZnJhbWUpOworCisgICAg
Zm9yIChpbnQgcGxhbmUgPSAwOyBwbGFuZSA8IGZyYW1lLT5wbGFuZXMoKTsgcGxhbmUrKykgewor
ICAgICAgICBJbnRTaXplIHBsYW5lVGV4dHVyZVNpemUgPSBmcmFtZS0+cmVxdWlyZWRUZXh0dXJl
U2l6ZShwbGFuZSk7CisKKyAgICAgICAgLy8gSWYgdGhlIHJlbmRlcmVyIGNhbm5vdCBoYW5kbGUg
dGhpcyBsYXJnZSBvZiBhIHRleHR1cmUsIHJldHVybiBmYWxzZS4KKyAgICAgICAgLy8gRklYTUU6
IFJlbW92ZSB0aGlzIHRlc3Qgd2hlbiB0aWxlZCBsYXllcnMgYXJlIGltcGxlbWVudGVkLgorICAg
ICAgICBpZiAoIWxheWVyUmVuZGVyZXIoKS0+Y2hlY2tUZXh0dXJlU2l6ZShwbGFuZVRleHR1cmVT
aXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fY29udGVudHNUZXh0dXJl
ID0gdGV4dHVyZUlkOwotICAgIG1fYWxsb2NhdGVkVGV4dHVyZVNpemUgPSByZXF1aXJlZFRleHR1
cmVTaXplOworICAgICAgICBpZiAoIW1fdGV4dHVyZXNbcGxhbmVdKQorICAgICAgICAgICAgbV90
ZXh0dXJlc1twbGFuZV0gPSBsYXllclJlbmRlcmVyKCktPmNyZWF0ZUxheWVyVGV4dHVyZSgpOwog
Ci0gICAgdXBkYXRlQ29tcGxldGVkKCk7CisgICAgICAgIGlmIChwbGFuZVRleHR1cmVTaXplICE9
IEludFNpemUoKSAmJiBwbGFuZVRleHR1cmVTaXplICE9IG1fdGV4dHVyZVNpemVzW3BsYW5lXSkg
eworICAgICAgICAgICAgYWxsb2NhdGVUZXh0dXJlKGNvbnRleHQsIG1fdGV4dHVyZXNbcGxhbmVd
LCBwbGFuZVRleHR1cmVTaXplLCB0ZXh0dXJlRm9ybWF0KTsKKyAgICAgICAgICAgIG1fdGV4dHVy
ZVNpemVzW3BsYW5lXSA9IHBsYW5lVGV4dHVyZVNpemU7CisgICAgICAgICAgICBtX2ZyYW1lU2l6
ZXNbcGxhbmVdID0gSW50U2l6ZShmcmFtZS0+d2lkdGgoKSwgZnJhbWUtPmhlaWdodCgpKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBWaWRlb0xheWVyQ2hy
b21pdW06OnVwZGF0ZVRleHR1cmVSZWN0KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIHVuc2ln
bmVkIHRleHR1cmVJZCkKK3ZvaWQgVmlkZW9MYXllckNocm9taXVtOjphbGxvY2F0ZVRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHRleHR1cmVJZCwgY29uc3QgSW50
U2l6ZSYgZGltZW5zaW9ucywgdW5zaWduZWQgdGV4dHVyZUZvcm1hdCkKIHsKLSNpZiBQTEFURk9S
TShTS0lBKQotICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBtX2NhbnZhcy0+Z2V0RGV2aWNl
KCktPmFjY2Vzc0JpdG1hcCh0cnVlKTsKLSAgICBTa0JpdG1hcCogc2tpYUJpdG1hcCA9IGNvbnN0
X2Nhc3Q8U2tCaXRtYXAqPigmYml0bWFwKTsKLSAgICBBU1NFUlQoc2tpYUJpdG1hcCk7Ci0KLSAg
ICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soKnNraWFCaXRtYXApOwotICAgIFNrQml0bWFwOjpDb25m
aWcgc2tpYUNvbmZpZyA9IHNraWFCaXRtYXAtPmNvbmZpZygpOwotCi0gICAgaWYgKHNraWFDb25m
aWcgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKLSAgICAgICAgY29udGV4
dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmVJZCk7
Ci0gICAgICAgIEFTU0VSVChjb250ZXh0LT5zdXBwb3J0c01hcFN1YkNIUk9NSVVNKCkpOwotICAg
ICAgICB2b2lkKiBtZW0gPSBjb250ZXh0LT5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0oR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0Lnko
KSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLCBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIEdyYXBoaWNzQ29u
dGV4dDNEOjpXUklURV9PTkxZKTsKLSAgICAgICAgc2tpYUJpdG1hcC0+c2V0UGl4ZWxzKG1lbSk7
Ci0gICAgICAgIG1fb3duZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKCptX2dyYXBoaWNz
Q29udGV4dCwgdXBkYXRlUmVjdCk7Ci0gICAgICAgIGNvbnRleHQtPnVubWFwVGV4U3ViSW1hZ2Uy
RENIUk9NSVVNKG1lbSk7Ci0gICAgfQorICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZUlkKSk7CisgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIDAsIHRleHR1cmVGb3JtYXQsIGRpbWVuc2lvbnMud2lkdGgoKSwgZGltZW5zaW9ucy5oZWln
aHQoKSwgMCwgdGV4dHVyZUZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUs
IDApKTsKK30KIAotICAgIHVwZGF0ZUNvbXBsZXRlZCgpOwotI2Vsc2UKLSAgICAvLyBGSVhNRTog
SW1wbGVtZW50IG5vbi1za2lhIHBhdGgKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotI2VuZGlmCit2
b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCwgdW5zaWduZWQgdGV4dHVyZUlkLCBjb25zdCBJbnRTaXplJiBkaW1lbnNpb25zLCB1
bnNpZ25lZCBmb3JtYXQsIGNvbnN0IHZvaWQqIGRhdGEpCit7CisgICAgQVNTRVJUKGNvbnRleHQp
OworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgdGV4dHVyZUlkKSk7CisgICAgdm9pZCogbWVtID0gY29udGV4dC0+bWFw
VGV4U3ViSW1hZ2UyRENIUk9NSVVNKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAw
LCAwLCBkaW1lbnNpb25zLndpZHRoKCksIGRpbWVuc2lvbnMuaGVpZ2h0KCksIGZvcm1hdCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIEdyYXBoaWNzQ29udGV4dDNEOjpXUklURV9P
TkxZKTsKKyAgICBpZiAobWVtKSB7CisgICAgICAgIG1lbWNweShtZW0sIGRhdGEsIGRpbWVuc2lv
bnMud2lkdGgoKSAqIGRpbWVuc2lvbnMuaGVpZ2h0KCkpOworICAgICAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+dW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0obWVtKSk7CisgICAgfSBlbHNlCisg
ICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsKIH0KIAotdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06
OnVwZGF0ZUNvbXBsZXRlZCgpCit2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6ZHJhdygpCiB7Ci0g
ICAgbV9kaXJ0eVJlY3Quc2V0U2l6ZShGbG9hdFNpemUoKSk7Ci0gICAgbV9jb250ZW50c0RpcnR5
ID0gZmFsc2U7CisgICAgaWYgKG1fc2tpcHNEcmF3KQorICAgICAgICByZXR1cm47CisKKyAgICBB
U1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKKyAgICBjb25zdCBWaWRlb0xheWVyQ2hyb21pdW06OlNo
YXJlZFZhbHVlcyogc3YgPSBsYXllclJlbmRlcmVyKCktPnZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXMo
KTsKKyAgICBBU1NFUlQoc3YgJiYgc3YtPmluaXRpYWxpemVkKCkpOworCisgICAgc3dpdGNoICht
X2ZyYW1lRm9ybWF0KSB7CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OllWMTI6CisgICAg
ICAgIGRyYXdZVVYoc3YpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJv
bWl1bTo6UkdCQToKKyAgICAgICAgZHJhd1JHQkEoc3YpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG90aGVyIHBhdGhzLgorICAgICAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgVmlk
ZW9MYXllckNocm9taXVtOjpkcmF3WVVWKGNvbnN0IFNoYXJlZFZhbHVlcyogc3YpCit7CisgICAg
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOworICAg
IEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFMSkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OmNZ
UGxhbmVdKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkUyKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVzW1ZpZGVvRnJh
bWVDaHJvbWl1bTo6Y1VQbGFuZV0pKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZl
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTMpKTsKKyAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4
dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjpjVlBsYW5lXSkpOworCisgICAgbGF5ZXJSZW5kZXJl
cigpLT51c2VTaGFkZXIoc3YtPnl1dlNoYWRlclByb2dyYW0oKSk7CisgICAgdW5zaWduZWQgZnJh
bWVXaWR0aCA9IG1fZnJhbWVTaXplc1tWaWRlb0ZyYW1lQ2hyb21pdW06OmNZUGxhbmVdLndpZHRo
KCk7CisgICAgdW5zaWduZWQgdGV4dHVyZVdpZHRoID0gbV90ZXh0dXJlU2l6ZXNbVmlkZW9GcmFt
ZUNocm9taXVtOjpjWVBsYW5lXS53aWR0aCgpOworICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3Ig
PSBzdGF0aWNfY2FzdDxmbG9hdD4oZnJhbWVXaWR0aCkgLyB0ZXh0dXJlV2lkdGg7CisgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xZihzdi0+eXV2V2lkdGhTY2FsZUZhY3RvckxvY2F0
aW9uKCksIHdpZHRoU2NhbGVGYWN0b3IpKTsKKworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51
bmlmb3JtMWkoc3YtPnlUZXh0dXJlTG9jYXRpb24oKSwgMSkpOworICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT51bmlmb3JtMWkoc3YtPnVUZXh0dXJlTG9jYXRpb24oKSwgMikpOworICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkoc3YtPnZUZXh0dXJlTG9jYXRpb24oKSwgMykpOwor
CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYoc3YtPmNjTWF0cml4
TG9jYXRpb24oKSwgMCwgY29uc3RfY2FzdDxmbG9hdCo+KGNZVVYyUkdCKSwgMSkpOworCisgICAg
ZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRy
aXgoKSwgZHJhd1RyYW5zZm9ybSgpLAorICAgICAgICAgICAgICAgICAgICAgYm91bmRzKCkud2lk
dGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGRyYXdPcGFjaXR5KCksCisgICAgICAgICAgICAgICAg
ICAgICBzdi0+eXV2U2hhZGVyTWF0cml4TG9jYXRpb24oKSwgc3YtPnl1dkFscGhhTG9jYXRpb24o
KSk7CisKKyAgICAvLyBSZXNldCBhY3RpdmUgdGV4dHVyZSBiYWNrIHRvIHRleHR1cmUgMC4KKyAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRTApKTsKIH0KIAordm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OmRyYXdSR0JBKGNvbnN0
IFNoYXJlZFZhbHVlcyogc3YpCit7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBs
YXllclJlbmRlcmVyQ29udGV4dCgpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOworICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0
dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OmNSR0JQbGFuZV0pKTsKKworICAgIGxheWVyUmVuZGVy
ZXIoKS0+dXNlU2hhZGVyKHN2LT5yZ2JhU2hhZGVyUHJvZ3JhbSgpKTsKKyAgICB1bnNpZ25lZCBm
cmFtZVdpZHRoID0gbV9mcmFtZVNpemVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6Y1JHQlBsYW5lXS53
aWR0aCgpOworICAgIHVuc2lnbmVkIHRleHR1cmVXaWR0aCA9IG1fdGV4dHVyZVNpemVzW1ZpZGVv
RnJhbWVDaHJvbWl1bTo6Y1JHQlBsYW5lXS53aWR0aCgpOworICAgIGZsb2F0IHdpZHRoU2NhbGVG
YWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4oZnJhbWVXaWR0aCkgLyB0ZXh0dXJlV2lkdGg7Cisg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xZihzdi0+cmdiYVdpZHRoU2NhbGVGYWN0
b3JMb2NhdGlvbigpLCB3aWR0aFNjYWxlRmFjdG9yKSk7CisKKyAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+dW5pZm9ybTFpKHN2LT5yZ2JhVGV4dHVyZUxvY2F0aW9uKCksIDApKTsKKworICAgIGRy
YXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4
KCksIGRyYXdUcmFuc2Zvcm0oKSwKKyAgICAgICAgICAgICAgICAgICAgIGJvdW5kcygpLndpZHRo
KCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3T3BhY2l0eSgpLAorICAgICAgICAgICAgICAgICAg
ICAgc3YtPnJnYmFTaGFkZXJNYXRyaXhMb2NhdGlvbigpLCBzdi0+cmdiYUFscGhhTG9jYXRpb24o
KSk7CiB9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlmIC8vIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDM1MDdjYjIwY2YxN2U3OTMzMTJk
NmVlYjNlOTUzYjdmOGNlYmYyNTkuLjA4YzM3YTVlN2ZhOWE0OTlkNGY5OTA1YWE3NGM0N2YzZDU3
ZjI1NWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlk
ZW9MYXllckNocm9taXVtLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9WaWRlb0xheWVyQ2hyb21pdW0uaApAQCAtMzQsMzEgKzM0LDc2IEBACiAKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAKLSNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5o
IgorI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJWaWRlb0ZyYW1lUHJvdmlk
ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBBIExheWVyIHRoYXQgY29udGFpbnMg
YSBWaWRlbyBlbGVtZW50LgotY2xhc3MgVmlkZW9MYXllckNocm9taXVtIDogcHVibGljIENvbnRl
bnRMYXllckNocm9taXVtIHsKK2NsYXNzIFZpZGVvTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBMYXll
ckNocm9taXVtIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxWaWRlb0xheWVyQ2hy
b21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyID0gMCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWRlb0ZyYW1lUHJvdmlk
ZXIqID0gMCk7Ci0gICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIHsgcmV0dXJuIHRydWU7
IH0KKyAgICB2aXJ0dWFsIH5WaWRlb0xheWVyQ2hyb21pdW0oKTsKICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlQ29udGVudHMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBkcmF3KCk7CisKKyAgICBjbGFzcyBTaGFyZWRW
YWx1ZXMgeworICAgIHB1YmxpYzoKKyAgICAgICAgZXhwbGljaXQgU2hhcmVkVmFsdWVzKEdyYXBo
aWNzQ29udGV4dDNEKik7CisgICAgICAgIH5TaGFyZWRWYWx1ZXMoKTsKKyAgICAgICAgdW5zaWdu
ZWQgeXV2U2hhZGVyUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIG1feXV2U2hhZGVyUHJvZ3JhbTsg
fQorICAgICAgICB1bnNpZ25lZCByZ2JhU2hhZGVyUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIG1f
cmdiYVNoYWRlclByb2dyYW07IH0KKyAgICAgICAgaW50IHl1dlNoYWRlck1hdHJpeExvY2F0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV95dXZTaGFkZXJNYXRyaXhMb2NhdGlvbjsgfQorICAgICAgICBp
bnQgcmdiYVNoYWRlck1hdHJpeExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZ2JhU2hhZGVy
TWF0cml4TG9jYXRpb247IH0KKyAgICAgICAgaW50IHl1dldpZHRoU2NhbGVGYWN0b3JMb2NhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1feXV2V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uOyB9CisgICAg
ICAgIGludCByZ2JhV2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9y
Z2JhV2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uOyB9CisgICAgICAgIGludCB5VGV4dHVyZUxvY2F0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV95VGV4dHVyZUxvY2F0aW9uOyB9CisgICAgICAgIGludCB1
VGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV91VGV4dHVyZUxvY2F0aW9uOyB9Cisg
ICAgICAgIGludCB2VGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV92VGV4dHVyZUxv
Y2F0aW9uOyB9CisgICAgICAgIGludCB5dXZBbHBoYUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV95dXZBbHBoYUxvY2F0aW9uOyB9CisgICAgICAgIGludCByZ2JhQWxwaGFMb2NhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fcmdiYUFscGhhTG9jYXRpb247IH0KKyAgICAgICAgaW50IHJnYmFUZXh0
dXJlTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JnYmFUZXh0dXJlTG9jYXRpb247IH0KKyAg
ICAgICAgaW50IGNjTWF0cml4TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NjTWF0cml4TG9j
YXRpb247IH0KKyAgICAgICAgYm9vbCBpbml0aWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5p
dGlhbGl6ZWQ7IH07CisgICAgcHJpdmF0ZToKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1f
Y29udGV4dDsKKyAgICAgICAgdW5zaWduZWQgbV95dXZTaGFkZXJQcm9ncmFtOworICAgICAgICB1
bnNpZ25lZCBtX3JnYmFTaGFkZXJQcm9ncmFtOworICAgICAgICBpbnQgbV95dXZTaGFkZXJNYXRy
aXhMb2NhdGlvbjsKKyAgICAgICAgaW50IG1fcmdiYVNoYWRlck1hdHJpeExvY2F0aW9uOworICAg
ICAgICBpbnQgbV95dXZXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb247CisgICAgICAgIGludCBtX3Jn
YmFXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb247CisgICAgICAgIGludCBtX3lUZXh0dXJlTG9jYXRp
b247CisgICAgICAgIGludCBtX3VUZXh0dXJlTG9jYXRpb247CisgICAgICAgIGludCBtX3ZUZXh0
dXJlTG9jYXRpb247CisgICAgICAgIGludCBtX3JnYmFUZXh0dXJlTG9jYXRpb247CisgICAgICAg
IGludCBtX2NjTWF0cml4TG9jYXRpb247CisgICAgICAgIGludCBtX3l1dkFscGhhTG9jYXRpb247
CisgICAgICAgIGludCBtX3JnYmFBbHBoYUxvY2F0aW9uOworICAgICAgICBib29sIG1faW5pdGlh
bGl6ZWQ7CisgICAgfTsKIAogcHJpdmF0ZToKLSAgICBWaWRlb0xheWVyQ2hyb21pdW0oR3JhcGhp
Y3NMYXllckNocm9taXVtKiBvd25lciwgVmlkZW9GcmFtZVByb3ZpZGVyKik7Ci0gICAgdm9pZCBj
cmVhdGVUZXh0dXJlUmVjdChjb25zdCBJbnRTaXplJiByZXF1aXJlZFRleHR1cmVTaXplLCBjb25z
dCBJbnRSZWN0JiB1cGRhdGVSZWN0LCB1bnNpZ25lZCB0ZXh0dXJlSWQpOwotICAgIHZvaWQgdXBk
YXRlVGV4dHVyZVJlY3QoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgdW5zaWduZWQgdGV4dHVy
ZUlkKTsKLSAgICB2b2lkIHVwZGF0ZUNvbXBsZXRlZCgpOworICAgIGV4cGxpY2l0IFZpZGVvTGF5
ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyLCBWaWRlb0ZyYW1lUHJvdmlk
ZXIqIHByb3ZpZGVyKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgZGV0ZXJtaW5lVGV4dHVyZUZvcm1h
dChWaWRlb0ZyYW1lQ2hyb21pdW0qKTsKKyAgICBib29sIGFsbG9jYXRlVGV4dHVyZXNJZk5lZWRl
ZChHcmFwaGljc0NvbnRleHQzRCosIFZpZGVvRnJhbWVDaHJvbWl1bSosIHVuc2lnbmVkIHRleHR1
cmVGb3JtYXQpOworICAgIHZvaWQgdXBkYXRlWVVWQ29udGVudHMoR3JhcGhpY3NDb250ZXh0M0Qq
LCBjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qKTsKKyAgICB2b2lkIHVwZGF0ZVJHQkFDb250ZW50
cyhHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSopOworICAgIHZv
aWQgYWxsb2NhdGVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgdW5zaWduZWQgdGV4dHVyZUlk
LCBjb25zdCBJbnRTaXplJiBkaW1lbnNpb25zLCB1bnNpZ25lZCB0ZXh0dXJlRm9ybWF0KTsKKyAg
ICB2b2lkIHVwZGF0ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCB0ZXh0dXJl
SWQsIGNvbnN0IEludFNpemUmIGRpbWVuc2lvbnMsIHVuc2lnbmVkIHRleHR1cmVGb3JtYXQsIGNv
bnN0IHZvaWQqIGRhdGEpOworICAgIHZvaWQgZHJhd1lVVihjb25zdCBTaGFyZWRWYWx1ZXMqKTsK
KyAgICB2b2lkIGRyYXdSR0JBKGNvbnN0IFNoYXJlZFZhbHVlcyopOwogCi0jaWYgUExBVEZPUk0o
U0tJQSkKLSAgICBPd25QdHI8c2tpYTo6UGxhdGZvcm1DYW52YXM+IG1fY2FudmFzOwotICAgIE93
blB0cjxQbGF0Zm9ybUNvbnRleHRTa2lhPiBtX3NraWFDb250ZXh0OwotI2VuZGlmCi0gICAgT3du
UHRyPEdyYXBoaWNzQ29udGV4dD4gbV9ncmFwaGljc0NvbnRleHQ7CisgICAgc3RhdGljIGNvbnN0
IGZsb2F0IGNZVVYyUkdCWzldOworCisgICAgVmlkZW9GcmFtZUNocm9taXVtOjpGb3JtYXQgbV9m
cmFtZUZvcm1hdDsKICAgICBPd25QdHI8VmlkZW9GcmFtZVByb3ZpZGVyPiBtX3Byb3ZpZGVyOwor
ICAgIGJvb2wgbV9za2lwc0RyYXc7CisgICAgdW5zaWduZWQgbV90ZXh0dXJlc1szXTsKKyAgICBJ
bnRTaXplIG1fdGV4dHVyZVNpemVzWzNdOworICAgIEludFNpemUgbV9mcmFtZVNpemVzWzNdOwog
fTsKIAogfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZTUyZTNiNzYzOGE0NGVkYTdjZDdhZjkyNDcxZGIxN2I2
YTM0NmQ2My4uZjllZjg0MTJhOTYzMzFhMWI3MGYzYWIwMmIxMTM3MmM2ZjYwY2Q5NCAxMDA2NDQK
LS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDktMTMgIFZpY3RvcmlhIEtpcnN0ICA8dnJr
QGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRml4aW5nIGNvbnN0YW50cyBpbiBWaWRlb0ZyYW1lQ2hyb21pdW1JbXBsIHNvIHRoYXQg
aXQgb3ZlcmxvYWRzIHRoZQorICAgICAgICBWaWRlb0ZyYW1lQ2hyb21pdW0gY29uc3QgZGVjbGFy
YXRpb25zLiBBbHNvIGFkZGluZyBsb2dpYyBzdWNoIHRoYXQgYQorICAgICAgICBWaWRlb0ZyYW1l
Q2hyb21pdW0gdW5kZXJzdGFuZHMgd2hhdCBzaXplIGl0cyB0ZXh0dXJlIHNob3VsZCBiZSBiYXNl
ZAorICAgICAgICBvbiBmcmFtZSBmb3JtYXQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00NTA2OQorCisgICAgICAgICogc3JjL1ZpZGVvRnJhbWVDaHJv
bWl1bUltcGwuY3BwOgorCiAyMDEwLTA5LTI2ICBNaWhhaSBQYXJwYXJpdGEgIDxtaWhhaXBAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vc3JjL1ZpZGVvRnJhbWVDaHJvbWl1bUltcGwuY3BwIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9WaWRlb0ZyYW1lQ2hyb21pdW1JbXBsLmNwcAppbmRleCAyYjk4MzIwYTNj
ZTA1NzY1NWI2N2NkMGE0Yzc4YjFiZmI5YzFlODYzLi4zZGU5MmQ2OTg2NDFlZWUxNmRhMTk1MTQ2
YTBlOWViOTdkNTlhMWQ5IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1ZpZGVvRnJh
bWVDaHJvbWl1bUltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvVmlkZW9GcmFtZUNo
cm9taXVtSW1wbC5jcHAKQEAgLTM2LDE1ICszNiwxNSBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAotbmFtZXNwYWNlIFdlYktpdCB7Citjb25zdCB1bnNpZ25lZCBWaWRlb0ZyYW1lQ2hy
b21pdW06OmNNYXhQbGFuZXMgPSAzOworY29uc3QgdW5zaWduZWQgVmlkZW9GcmFtZUNocm9taXVt
OjpjTnVtUkdCUGxhbmVzID0gMTsKK2NvbnN0IHVuc2lnbmVkIFZpZGVvRnJhbWVDaHJvbWl1bTo6
Y1JHQlBsYW5lID0gMDsKK2NvbnN0IHVuc2lnbmVkIFZpZGVvRnJhbWVDaHJvbWl1bTo6Y051bVlV
VlBsYW5lcyA9IDM7Citjb25zdCB1bnNpZ25lZCBWaWRlb0ZyYW1lQ2hyb21pdW06OmNZUGxhbmUg
PSAwOworY29uc3QgdW5zaWduZWQgVmlkZW9GcmFtZUNocm9taXVtOjpjVVBsYW5lID0gMTsKK2Nv
bnN0IHVuc2lnbmVkIFZpZGVvRnJhbWVDaHJvbWl1bTo6Y1ZQbGFuZSA9IDI7CiAKLWNvbnN0IHVu
c2lnbmVkIGNNYXhQbGFuZXMgPSAzOwotY29uc3QgdW5zaWduZWQgY051bVJHQlBsYW5lcyA9IDE7
Ci1jb25zdCB1bnNpZ25lZCBjUkdCUGxhbmUgPSAwOwotY29uc3QgdW5zaWduZWQgY051bVlVVlBs
YW5lcyA9IDM7Ci1jb25zdCB1bnNpZ25lZCBjWVBsYW5lID0gMDsKLWNvbnN0IHVuc2lnbmVkIGNV
UGxhbmUgPSAxOwotY29uc3QgdW5zaWduZWQgY1ZQbGFuZSA9IDI7CituYW1lc3BhY2UgV2ViS2l0
IHsKIAogV2ViVmlkZW9GcmFtZSogVmlkZW9GcmFtZUNocm9taXVtSW1wbDo6dG9XZWJWaWRlb0Zy
YW1lKFZpZGVvRnJhbWVDaHJvbWl1bSogdmlkZW9GcmFtZSkKIHsKQEAgLTEwOCw0ICsxMDgsMjIg
QEAgY29uc3Qgdm9pZCogVmlkZW9GcmFtZUNocm9taXVtSW1wbDo6ZGF0YSh1bnNpZ25lZCBwbGFu
ZSkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAorY29uc3QgSW50U2l6ZSBWaWRlb0ZyYW1lQ2hy
b21pdW1JbXBsOjpyZXF1aXJlZFRleHR1cmVTaXplKHVuc2lnbmVkIHBsYW5lKSBjb25zdAorewor
ICAgIHN3aXRjaCAoZm9ybWF0KCkpIHsKKyAgICBjYXNlIFJHQkE6CisgICAgICAgIHJldHVybiBJ
bnRTaXplKHN0cmlkZShwbGFuZSksIGhlaWdodCgpKTsKKyAgICBjYXNlIFlWMTI6CisgICAgICAg
IHN3aXRjaCAocGxhbmUpIHsKKyAgICAgICAgY2FzZSBjWVBsYW5lOgorICAgICAgICAgICAgcmV0
dXJuIEludFNpemUoc3RyaWRlKHBsYW5lKSwgaGVpZ2h0KCkpOworICAgICAgICBjYXNlIGNVUGxh
bmU6CisgICAgICAgICAgICByZXR1cm4gSW50U2l6ZShzdHJpZGUocGxhbmUpLCBoZWlnaHQoKSAv
IDIpOworICAgICAgICBjYXNlIGNWUGxhbmU6CisgICAgICAgICAgICByZXR1cm4gSW50U2l6ZShz
dHJpZGUocGxhbmUpLCBoZWlnaHQoKSAvIDIpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biBJbnRTaXplKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9WaWRlb0ZyYW1lQ2hyb21pdW1JbXBsLmggYi9XZWJLaXQvY2hyb21p
dW0vc3JjL1ZpZGVvRnJhbWVDaHJvbWl1bUltcGwuaAppbmRleCAzYWQ0MjRjNDZhODc2YTE5Mzk0
NjBiYmQ0OTljMWQ3ODcxMDVlYzczLi4wNDJjZDdlNzE2MzU2YmFmYjQ1YmZjNzQ1OTI5NWYzOGRi
NzkzYmJkIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1ZpZGVvRnJhbWVDaHJvbWl1
bUltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1ZpZGVvRnJhbWVDaHJvbWl1bUltcGwu
aApAQCAtNTYsNiArNTYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB1bnNpZ25lZCBwbGFuZXMo
KSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBzdHJpZGUodW5zaWduZWQgcGxhbmUpIGNvbnN0Owog
ICAgIHZpcnR1YWwgY29uc3Qgdm9pZCogZGF0YSh1bnNpZ25lZCBwbGFuZSkgY29uc3Q7CisgICAg
dmlydHVhbCBjb25zdCBJbnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemUodW5zaWduZWQgcGxhbmUp
IGNvbnN0OwogCiBwcml2YXRlOgogICAgIFdlYlZpZGVvRnJhbWUqIG1fd2ViVmlkZW9GcmFtZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68968</attachid>
            <date>2010-09-27 14:58:14 -0700</date>
            <delta_ts>2010-09-27 16:08:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45069-20100927145813.patch</filename>
            <type>text/plain</type>
            <size>34646</size>
            <attacher name="Victoria Kirst">vrk</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZGZjMzE0MGNiMGVkMjMxMWI0MTg4MjZhYjEzMjAwOTNjNjAwMjcwOC4uZWEzYzgwYTg5ZmMwNWQ2
OGZhNGY5ZDE3MGIxNDdhZDE2OWNkYzdlMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAxMC0wOS0xMyAgVmlj
dG9yaWEgS2lyc3QgIDx2cmtAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNb2RpZmllcyBWaWRlb0xheWVyQ2hyb21pdW0gdG8gZG8g
WVVWIHRvIFJHQiBjb2xvciBjb252ZXJzaW9uIGluIHRoZQorICAgICAgICBHUFUuIEFsc28gYWRk
cyBzdXBwb3J0IGZvciBSR0JBIHZpZGVvIGZyYW1lIGZvcm1hdHMsIHRob3VnaCB0aGlzIGNvZGUK
KyAgICAgICAgcGF0aCBpcyBjdXJyZW50bHkgbmV2ZXIgcnVuIGJlY2F1c2UgdGhlIHZpZGVvIGZy
YW1lcyBhcmUgaW4gWVYxMgorICAgICAgICBmb3JtYXQuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTA2OQorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZGVv
TGF5ZXJTaGFyZWRWYWx1ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hy
b21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlZp
ZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp+U2hhcmVkVmFsdWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6VmlkZW9MYXllckNocm9taXVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6flZpZGVvTGF5ZXJDaHJvbWl1bSk6Cisg
ICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlWVVWQ29udGVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjphbGxvY2F0ZVlVVlRleHR1cmVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlWVVWVGV4dHVy
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVSR0JBQ29u
dGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjphbGxvY2F0ZVRl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVu
dHNDb21wbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjpkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6ZHJhd1lVVik6CisgICAg
ICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OmRyYXdSR0JBKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAg
KFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp5dXZTaGFkZXJQcm9ncmFt
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpy
Z2JhU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06
OlNoYXJlZFZhbHVlczo6eXV2U2hhZGVyTWF0cml4TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6VmlkZW9MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6OnJnYmFTaGFkZXJNYXRyaXhMb2Nh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVl
czo6eXV2V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVv
TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpyZ2JhV2lkdGhTY2FsZUZhY3RvckxvY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp5
VGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6
U2hhcmVkVmFsdWVzOjp1VGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVv
TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp2VGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp5dXZBbHBoYUxvY2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVz
OjpyZ2JhVGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJv
bWl1bTo6U2hhcmVkVmFsdWVzOjpjY01hdHJpeExvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjppbml0aWFsaXplZCk6CisKIDIwMTAt
MDktMTQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBLZW5uZXRoIFJ1c3NlbGwuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggNmEyMDg4NzYy
NzkzYzVlMDgzOTM0NWE3YTdjOTk2MjIzOWI3ZWRmZC4uMjFjODViYTJlNjY3NWFhM2JkMjQ2ODc2
MWI3YjQ2YTE4ZTY0N2Q3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNzE2LDcgKzcx
Niw4IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0
cygpCiAgICAgbV9sYXllclNoYXJlZFZhbHVlcyA9IGFkb3B0UHRyKG5ldyBMYXllckNocm9taXVt
OjpTaGFyZWRWYWx1ZXMobV9jb250ZXh0LmdldCgpKSk7CiAgICAgbV9jb250ZW50TGF5ZXJTaGFy
ZWRWYWx1ZXMgPSBhZG9wdFB0cihuZXcgQ29udGVudExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVl
cyhtX2NvbnRleHQuZ2V0KCkpKTsKICAgICBtX2NhbnZhc0xheWVyU2hhcmVkVmFsdWVzID0gYWRv
cHRQdHIobmV3IENhbnZhc0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyhtX2NvbnRleHQuZ2V0
KCkpKTsKLSAgICBpZiAoIW1fbGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwgIW1f
Y29udGVudExheWVyU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpIHx8ICFtX2NhbnZhc0xheWVy
U2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpKSB7CisgICAgbV92aWRlb0xheWVyU2hhcmVkVmFs
dWVzID0gYWRvcHRQdHIobmV3IFZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKG1fY29u
dGV4dC5nZXQoKSkpOworICAgIGlmICghbV9sYXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQo
KSB8fCAhbV9jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwgIW1fY2Fu
dmFzTGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwgIW1fdmlkZW9MYXllclNoYXJl
ZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSkgewogICAgICAgICBjbGVhbnVwU2hhcmVkT2JqZWN0cygp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtNzMxLDYgKzczMiw3IEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cygpCiAgICAgbV9sYXll
clNoYXJlZFZhbHVlcy5jbGVhcigpOwogICAgIG1fY29udGVudExheWVyU2hhcmVkVmFsdWVzLmNs
ZWFyKCk7CiAgICAgbV9jYW52YXNMYXllclNoYXJlZFZhbHVlcy5jbGVhcigpOworICAgIG1fdmlk
ZW9MYXllclNoYXJlZFZhbHVlcy5jbGVhcigpOwogCiAgICAgaWYgKG1fc2Nyb2xsU2hhZGVyUHJv
Z3JhbSkgewogICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0o
bV9zY3JvbGxTaGFkZXJQcm9ncmFtKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCBjNzMzMjI4
NjI5M2Y2ZWNkOTYwZjIyODc0MjQ2MzQyZDM3OGQ0ZGU0Li5lYjdkZWEyMzAwNWJiMjMwNThlNGU4
NWM5MTRiNTZlY2MyYTJkOWJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTM5LDYgKzM5LDcg
QEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIlNrQml0bWFwLmgiCisjaW5jbHVkZSAiVmlkZW9MYXllckNocm9taXVtLmgiCiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtMTAyLDYgKzEwMyw3IEBAIHB1YmxpYzoKICAgICBj
b25zdCBMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIGxheWVyU2hhcmVkVmFsdWVzKCkgY29u
c3QgeyByZXR1cm4gbV9sYXllclNoYXJlZFZhbHVlcy5nZXQoKTsgfQogICAgIGNvbnN0IENvbnRl
bnRMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIGNvbnRlbnRMYXllclNoYXJlZFZhbHVlcygp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGVudExheWVyU2hhcmVkVmFsdWVzLmdldCgpOyB9CiAgICAg
Y29uc3QgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiBjYW52YXNMYXllclNoYXJl
ZFZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMuZ2V0KCk7
IH0KKyAgICBjb25zdCBWaWRlb0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyogdmlkZW9MYXll
clNoYXJlZFZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9MYXllclNoYXJlZFZhbHVlcy5n
ZXQoKTsgfQogCiAgICAgdm9pZCByZXNpemVPbnNjcmVlbkNvbnRlbnQoY29uc3QgSW50U2l6ZSYp
OwogCkBAIC0xNzAsNiArMTcyLDcgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8TGF5ZXJDaHJvbWl1
bTo6U2hhcmVkVmFsdWVzPiBtX2xheWVyU2hhcmVkVmFsdWVzOwogICAgIE93blB0cjxDb250ZW50
TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzPiBtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlczsK
ICAgICBPd25QdHI8Q2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzPiBtX2NhbnZhc0xh
eWVyU2hhcmVkVmFsdWVzOworICAgIE93blB0cjxWaWRlb0xheWVyQ2hyb21pdW06OlNoYXJlZFZh
bHVlcz4gbV92aWRlb0xheWVyU2hhcmVkVmFsdWVzOwogCiAgICAgT3duUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBtX2NvbnRleHQ7CiB9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9WaWRlb0ZyYW1lQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVmlkZW9GcmFtZUNocm9taXVtLmgKaW5kZXggYmJkNjc3ZTQ5MTc4ZTE1
MzQyMDBkYjIxNDZjMTM3YzZkNWM1N2RlNS4uMzRlOTIyYjRmMmFkY2QyZjhjNTc0NmY1MGRmZDAy
ZjQ2OGQwZGQzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9WaWRlb0ZyYW1lQ2hyb21pdW0uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1ZpZGVvRnJhbWVDaHJvbWl1bS5oCkBAIC0zMSwxOCArMzEsMjAgQEAKICNpZm5kZWYg
VmlkZW9GcmFtZUNocm9taXVtX2gKICNkZWZpbmUgVmlkZW9GcmFtZUNocm9taXVtX2gKIAorI2lu
Y2x1ZGUgIkludFNpemUuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBBIGNsYXNzIHRo
YXQgcmVwcmVzZW50cyBhIHZpZGVvIGZyYW1lIGluIGNocm9taXVtLgogY2xhc3MgVmlkZW9GcmFt
ZUNocm9taXVtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY01heFBsYW5l
czsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY051bVJHQlBsYW5lczsKLSAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgY1JHQlBsYW5lOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjTnVt
WVVWUGxhbmVzOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjWVBsYW5lOwotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBjVVBsYW5lOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjVlBs
YW5lOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhQbGFuZXM7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG51bVJHQlBsYW5lczsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcmdi
UGxhbmU7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bVlVVlBsYW5lczsKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgeVBsYW5lOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB1UGxh
bmU7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZQbGFuZTsKIAogICAgIC8vIFRoZXNlIGVu
dW1zIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggV2ViS2l0OjpXZWJWaWRlb0ZyYW1lLgogICAg
IGVudW0gRm9ybWF0IHsKQEAgLTc0LDYgKzc2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdW5z
aWduZWQgcGxhbmVzKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IHN0cmlkZSh1bnNpZ25l
ZCBwbGFuZSkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgY29uc3Qgdm9pZCogZGF0YSh1bnNpZ25l
ZCBwbGFuZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSByZXF1aXJlZFRl
eHR1cmVTaXplKHVuc2lnbmVkIHBsYW5lKSBjb25zdCA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMGZiMWJiNDliYTE0YTI3OTYwNmQ3MDhh
YjUzMzUzZmQ2ODhkYzA3OS4uN2UzOTc2MjRlZjdjZTk0ZjlhYTExYjNmZjJjYTFiZmJiNDMxNjY4
NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xh
eWVyQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VmlkZW9MYXllckNocm9taXVtLmNwcApAQCAtMzYsMTUgKzM2LDEzMiBAQAogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCi0jaW5jbHVkZSAic2tpYS9leHQvcGxhdGZv
cm1fY2FudmFzLmgiCi0KLSNpZiBQTEFURk9STShTS0lBKQotI2luY2x1ZGUgIk5hdGl2ZUltYWdl
U2tpYS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKLSNlbmRpZgorI2luY2x1
ZGUgIlZpZGVvRnJhbWVDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlZpZGVvRnJhbWVQcm92aWRlci5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NvbnN0IGZsb2F0IFZpZGVvTGF5ZXJDaHJvbWl1
bTo6Y1lVVjJSR0JbOV0gPSB7CisgICAgMS5mLCAxLmYsIDEuZiwKKyAgICAwLmYsIC0uMzQ0Ziwg
MS43NzJmLAorICAgIDEuNDAzZiwgLS43MTRmLCAwLmYsCit9OworCitWaWRlb0xheWVyQ2hyb21p
dW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFsdWVzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX3l1dlNoYWRlclByb2dyYW0oMCkK
KyAgICAsIG1fcmdiYVNoYWRlclByb2dyYW0oMCkKKyAgICAsIG1feXV2U2hhZGVyTWF0cml4TG9j
YXRpb24oMCkKKyAgICAsIG1feXV2V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKDApCisgICAgLCBt
X3JnYmFTaGFkZXJNYXRyaXhMb2NhdGlvbigwKQorICAgICwgbV9yZ2JhV2lkdGhTY2FsZUZhY3Rv
ckxvY2F0aW9uKDApCisgICAgLCBtX2NjTWF0cml4TG9jYXRpb24oMCkKKyAgICAsIG1feVRleHR1
cmVMb2NhdGlvbigwKQorICAgICwgbV91VGV4dHVyZUxvY2F0aW9uKDApCisgICAgLCBtX3ZUZXh0
dXJlTG9jYXRpb24oMCkKKyAgICAsIG1fcmdiYVRleHR1cmVMb2NhdGlvbigwKQorICAgICwgbV95
dXZBbHBoYUxvY2F0aW9uKDApCisgICAgLCBtX3JnYmFBbHBoYUxvY2F0aW9uKDApCisgICAgLCBt
X2luaXRpYWxpemVkKGZhbHNlKQoreworICAgIC8vIEZyYW1lIHRleHR1cmVzIGFyZSBhbGxvY2F0
ZWQgYmFzZWQgb24gc3RyaWRlIHdpZHRoLCBub3QgdmlzaWJsZSBmcmFtZQorICAgIC8vIHdpZHRo
LCBzdWNoIHRoYXQgdGhlcmUgaXMgYSBndWFyYW50ZWUgdGhhdCB0aGUgZnJhbWUgcm93cyBsaW5l
IHVwCisgICAgLy8gcHJvcGVybHkgYW5kIGFyZSBub3Qgc2hpZnRlZCBieSAoc3RyaWRlIC0gd2lk
dGgpIHBpeGVscy4gVG8gaGlkZSB0aGUKKyAgICAvLyAicGFkZGluZyIgcGl4ZWxzIGJldHdlZW4g
dGhlIGVkZ2Ugb2YgdGhlIHZpc2libGUgZnJhbWUgd2lkdGggYW5kIHRoZSBlbmQKKyAgICAvLyBv
ZiB0aGUgc3RyaWRlLCB3ZSBnaXZlIHRoZSBzaGFkZXIgYSB3aWR0aFNjYWxlRmFjdG9yICg8PTEu
MCkgb2YgaG93IG11Y2gKKyAgICAvLyBvZiB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUgc2hvdWxk
IGJlIHNob3duIHdoZW4gZHJhd2luZyB0aGUgdGV4dHVyZSBvbnRvCisgICAgLy8gdGhlIHZlcnRp
Y2VzLgorICAgIGNoYXIgdmVydGV4U2hhZGVyU3RyaW5nW10gPQorICAgICAgICAicHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7ICAgICBcbiIKKyAgICAgICAgImF0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRp
b247ICAgXG4iCisgICAgICAgICJhdHRyaWJ1dGUgdmVjMiBhX3RleENvb3JkOyAgIFxuIgorICAg
ICAgICAidW5pZm9ybSBtYXQ0IG1hdHJpeDsgICAgICAgICBcbiIKKyAgICAgICAgInZhcnlpbmcg
dmVjMiB2X3RleENvb3JkOyAgICAgXG4iCisgICAgICAgICJ1bmlmb3JtIGZsb2F0IHdpZHRoU2Nh
bGVGYWN0b3I7ICBcbiIKKyAgICAgICAgInZvaWQgbWFpbigpICAgICAgICAgICAgICAgICAgXG4i
CisgICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAiICBn
bF9Qb3NpdGlvbiA9IG1hdHJpeCAqIGFfcG9zaXRpb247IFxuIgorICAgICAgICAiICB2X3RleENv
b3JkID0gdmVjMih3aWR0aFNjYWxlRmFjdG9yICogYV90ZXhDb29yZC54LCBhX3RleENvb3JkLnkp
OyBcbiIKKyAgICAgICAgIn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOworCisgICAg
Y2hhciB5dXZGcmFnbWVudFNoYWRlclN0cmluZ1tdID0KKyAgICAgICAgInByZWNpc2lvbiBtZWRp
dW1wIGZsb2F0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJwcmVj
aXNpb24gbWVkaXVtcCBpbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAg
ICAgICAidmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcbiIKKyAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIHlfdGV4dHVyZTsgICAgICAgICAgICAg
ICAgICAgICAgICAgXG4iCisgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7ICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgdl90
ZXh0dXJlOyAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInVuaWZvcm0gZmxv
YXQgYWxwaGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ1
bmlmb3JtIG1hdDMgY2NfbWF0cml4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgor
ICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcbiIKKyAgICAgICAgInsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXG4iCisgICAgICAgICIgIGZsb2F0IHkgPSB0ZXh0dXJlMkQoeV90ZXh0
dXJlLCB2X3RleENvb3JkKS54OyAgICAgIFxuIgorICAgICAgICAiICBmbG9hdCB1ID0gdGV4dHVy
ZTJEKHVfdGV4dHVyZSwgdl90ZXhDb29yZCkuciAtIC41OyBcbiIKKyAgICAgICAgIiAgZmxvYXQg
diA9IHRleHR1cmUyRCh2X3RleHR1cmUsIHZfdGV4Q29vcmQpLnIgLSAuNTsgXG4iCisgICAgICAg
ICIgIHZlYzMgcmdiID0gY2NfbWF0cml4ICogdmVjMyh5LCB1LCB2KTsgICAgICAgICAgICAgIFxu
IgorICAgICAgICAiICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHJnYi54LCByZ2IueSwgcmdiLnosIDEu
MCkgKiBhbHBoYTsgXG4iCisgICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKworICAgIGNoYXIgcmdiYUZyYWdtZW50U2hhZGVy
U3RyaW5nW10gPQorICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInZhcnlpbmcgdmVjMiB2X3RleENvb3JkOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIy
RCByZ2JhX3RleHR1cmU7ICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidW5pZm9y
bSBmbG9hdCBhbHBoYTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAg
ICAgInZvaWQgbWFpbigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XG4iCisgICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFxuIgorICAgICAgICAiICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHJnYmFf
dGV4dHVyZSwgdmVjMih2X3RleENvb3JkLngsIDEuMCAtIHZfdGV4Q29vcmQueSkpOyBcbiIKKyAg
ICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh0ZXhDb2xvci54LCB0ZXhDb2xvci55LCB0ZXhD
b2xvci56LCB0ZXhDb2xvci53KSAqIGFscGhhOyBcbiIKKyAgICAgICAgIn0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOworCisgICAgbV9yZ2Jh
U2hhZGVyUHJvZ3JhbSA9IGNyZWF0ZVNoYWRlclByb2dyYW0obV9jb250ZXh0LCB2ZXJ0ZXhTaGFk
ZXJTdHJpbmcsIHJnYmFGcmFnbWVudFNoYWRlclN0cmluZyk7CisgICAgaWYgKCFtX3JnYmFTaGFk
ZXJQcm9ncmFtKSB7CisgICAgICAgIExPR19FUlJPUigiVmlkZW9MYXllckNocm9taXVtOiBGYWls
ZWQgdG8gY3JlYXRlIHJnYmEgc2hhZGVyIHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1feXV2U2hhZGVyUHJvZ3JhbSA9IGNyZWF0ZVNoYWRlclByb2dyYW0obV9jb250
ZXh0LCB2ZXJ0ZXhTaGFkZXJTdHJpbmcsIHl1dkZyYWdtZW50U2hhZGVyU3RyaW5nKTsKKyAgICBp
ZiAoIW1feXV2U2hhZGVyUHJvZ3JhbSkgeworICAgICAgICBMT0dfRVJST1IoIlZpZGVvTGF5ZXJD
aHJvbWl1bTogRmFpbGVkIHRvIGNyZWF0ZSB5dXYgc2hhZGVyIHByb2dyYW0iKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG1feXV2U2hhZGVyTWF0cml4TG9jYXRpb24gPSBtX2NvbnRl
eHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3l1dlNoYWRlclByb2dyYW0sICJtYXRyaXgiKTsKKyAg
ICBtX3l1dldpZHRoU2NhbGVGYWN0b3JMb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxv
Y2F0aW9uKG1feXV2U2hhZGVyUHJvZ3JhbSwgIndpZHRoU2NhbGVGYWN0b3IiKTsKKyAgICBtX3lU
ZXh0dXJlTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3l1dlNoYWRl
clByb2dyYW0sICJ5X3RleHR1cmUiKTsKKyAgICBtX3VUZXh0dXJlTG9jYXRpb24gPSBtX2NvbnRl
eHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3l1dlNoYWRlclByb2dyYW0sICJ1X3RleHR1cmUiKTsK
KyAgICBtX3ZUZXh0dXJlTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbiht
X3l1dlNoYWRlclByb2dyYW0sICJ2X3RleHR1cmUiKTsKKyAgICBtX2NjTWF0cml4TG9jYXRpb24g
PSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3l1dlNoYWRlclByb2dyYW0sICJjY19t
YXRyaXgiKTsKKyAgICBtX3l1dkFscGhhTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1M
b2NhdGlvbihtX3l1dlNoYWRlclByb2dyYW0sICJhbHBoYSIpOworCisgICAgQVNTRVJUKG1feXV2
U2hhZGVyTWF0cml4TG9jYXRpb24gIT0gLTEpOworICAgIEFTU0VSVChtX3l1dldpZHRoU2NhbGVG
YWN0b3JMb2NhdGlvbiAhPSAtMSk7CisgICAgQVNTRVJUKG1feVRleHR1cmVMb2NhdGlvbiAhPSAt
MSk7CisgICAgQVNTRVJUKG1fdVRleHR1cmVMb2NhdGlvbiAhPSAtMSk7CisgICAgQVNTRVJUKG1f
dlRleHR1cmVMb2NhdGlvbiAhPSAtMSk7CisgICAgQVNTRVJUKG1fY2NNYXRyaXhMb2NhdGlvbiAh
PSAtMSk7CisgICAgQVNTRVJUKG1feXV2QWxwaGFMb2NhdGlvbiAhPSAtMSk7CisKKyAgICBtX3Jn
YmFTaGFkZXJNYXRyaXhMb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1f
cmdiYVNoYWRlclByb2dyYW0sICJtYXRyaXgiKTsKKyAgICBtX3JnYmFUZXh0dXJlTG9jYXRpb24g
PSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3JnYmFTaGFkZXJQcm9ncmFtLCAicmdi
YV90ZXh0dXJlIik7CisgICAgbV9yZ2JhV2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uID0gbV9jb250
ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9yZ2JhU2hhZGVyUHJvZ3JhbSwgIndpZHRoU2NhbGVG
YWN0b3IiKTsKKyAgICBtX3JnYmFBbHBoYUxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3Jt
TG9jYXRpb24obV9yZ2JhU2hhZGVyUHJvZ3JhbSwgImFscGhhIik7CisKKyAgICBBU1NFUlQobV9y
Z2JhU2hhZGVyTWF0cml4TG9jYXRpb24gIT0gLTEpOworICAgIEFTU0VSVChtX3JnYmFUZXh0dXJl
TG9jYXRpb24gIT0gLTEpOworICAgIEFTU0VSVChtX3JnYmFXaWR0aFNjYWxlRmFjdG9yTG9jYXRp
b24gIT0gLTEpOworICAgIEFTU0VSVChtX3JnYmFBbHBoYUxvY2F0aW9uICE9IC0xKTsKKworICAg
IG1faW5pdGlhbGl6ZWQgPSB0cnVlOworfQorCitWaWRlb0xheWVyQ2hyb21pdW06OlNoYXJlZFZh
bHVlczo6flNoYXJlZFZhbHVlcygpCit7CisgICAgaWYgKG1feXV2U2hhZGVyUHJvZ3JhbSkKKyAg
ICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKG1feXV2U2hhZGVy
UHJvZ3JhbSkpOworICAgIGlmIChtX3JnYmFTaGFkZXJQcm9ncmFtKQorICAgICAgICBHTEMobV9j
b250ZXh0LCBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0obV9yZ2JhU2hhZGVyUHJvZ3JhbSkpOwor
fQorCiBQYXNzUmVmUHRyPFZpZGVvTGF5ZXJDaHJvbWl1bT4gVmlkZW9MYXllckNocm9taXVtOjpj
cmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWRlb0ZyYW1lUHJvdmlkZXIq
IHByb3ZpZGVyKQogewpAQCAtNTIsMTQgKzE2OSwyNSBAQCBQYXNzUmVmUHRyPFZpZGVvTGF5ZXJD
aHJvbWl1bT4gVmlkZW9MYXllckNocm9taXVtOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVt
KgogfQogCiBWaWRlb0xheWVyQ2hyb21pdW06OlZpZGVvTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xh
eWVyQ2hyb21pdW0qIG93bmVyLCBWaWRlb0ZyYW1lUHJvdmlkZXIqIHByb3ZpZGVyKQotICAgIDog
Q29udGVudExheWVyQ2hyb21pdW0ob3duZXIpCi0jaWYgUExBVEZPUk0oU0tJQSkKLSAgICAsIG1f
Y2FudmFzKDApCi0gICAgLCBtX3NraWFDb250ZXh0KDApCi0jZW5kaWYKLSAgICAsIG1fZ3JhcGhp
Y3NDb250ZXh0KDApCisgICAgOiBMYXllckNocm9taXVtKG93bmVyKQorICAgICwgbV9za2lwc0Ry
YXcodHJ1ZSkKKyAgICAsIG1fZnJhbWVGb3JtYXQoVmlkZW9GcmFtZUNocm9taXVtOjpJbnZhbGlk
KQogICAgICwgbV9wcm92aWRlcihwcm92aWRlcikKIHsKKyAgICBmb3IgKGludCBwbGFuZSA9IDA7
IHBsYW5lIDwgVmlkZW9GcmFtZUNocm9taXVtOjptYXhQbGFuZXM7IHBsYW5lKyspIHsKKyAgICAg
ICAgbV90ZXh0dXJlc1twbGFuZV0gPSAwOworICAgICAgICBtX3RleHR1cmVTaXplc1twbGFuZV0g
PSBJbnRTaXplKCk7CisgICAgICAgIG1fZnJhbWVTaXplc1twbGFuZV0gPSBJbnRTaXplKCk7Cisg
ICAgfQorfQorCitWaWRlb0xheWVyQ2hyb21pdW06On5WaWRlb0xheWVyQ2hyb21pdW0oKQorewor
ICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsK
KyAgICBmb3IgKGludCBwbGFuZSA9IDA7IHBsYW5lIDwgVmlkZW9GcmFtZUNocm9taXVtOjptYXhQ
bGFuZXM7IHBsYW5lKyspIHsKKyAgICAgICAgaWYgKG1fdGV4dHVyZXNbcGxhbmVdKQorICAgICAg
ICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmRlbGV0ZVRleHR1cmUobV90ZXh0dXJlc1twbGFu
ZV0pKTsKKyAgICB9CiB9CiAKIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50
cygpCkBAIC03MCwxMjkgKzE5OCwxNzQgQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0
ZUNvbnRlbnRzKCkKIAogICAgIEFTU0VSVChkcmF3c0NvbnRlbnQoKSk7CiAKLSAgICBJbnRSZWN0
IGRpcnR5UmVjdChtX2RpcnR5UmVjdCk7Ci0gICAgSW50U2l6ZSByZXF1aXJlZFRleHR1cmVTaXpl
OwotCi0jaWYgUExBVEZPUk0oU0tJQSkKLSAgICByZXF1aXJlZFRleHR1cmVTaXplID0gbV9ib3Vu
ZHM7Ci0gICAgSW50UmVjdCBib3VuZHNSZWN0KEludFBvaW50KDAsIDApLCBtX2JvdW5kcyk7Ci0K
LSAgICAvLyBJZiB0aGUgdGV4dHVyZSBuZWVkcyB0byBiZSByZWFsbG9jYXRlZCwgdGhlbiB3ZSBt
dXN0IHJlZHJhdyB0aGUgZW50aXJlCi0gICAgLy8gY29udGVudHMgb2YgdGhlIGxheWVyLgotICAg
IGlmIChyZXF1aXJlZFRleHR1cmVTaXplICE9IG1fYWxsb2NhdGVkVGV4dHVyZVNpemUpCi0gICAg
ICAgIGRpcnR5UmVjdCA9IGJvdW5kc1JlY3Q7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIENsaXAg
dGhlIGRpcnR5UmVjdCB0byB0aGUgc2l6ZSBvZiB0aGUgbGF5ZXIgdG8gYXZvaWQgZHJhd2luZyBv
dXRzaWRlCi0gICAgICAgIC8vIHRoZSBib3VuZHMgb2YgdGhlIGJhY2tpbmcgdGV4dHVyZS4KLSAg
ICAgICAgZGlydHlSZWN0LmludGVyc2VjdChib3VuZHNSZWN0KTsKLSAgICB9Ci0KLSAgICBpZiAo
IW1fY2FudmFzLmdldCgpCi0gICAgICAgIHx8IGRpcnR5UmVjdC53aWR0aCgpICE9IG1fY2FudmFz
LT5nZXREZXZpY2UoKS0+d2lkdGgoKQotICAgICAgICB8fCBkaXJ0eVJlY3QuaGVpZ2h0KCkgIT0g
bV9jYW52YXMtPmdldERldmljZSgpLT5oZWlnaHQoKSkgewotICAgICAgICBtX2NhbnZhcyA9IG5l
dyBza2lhOjpQbGF0Zm9ybUNhbnZhcyhkaXJ0eVJlY3Qud2lkdGgoKSwgZGlydHlSZWN0LmhlaWdo
dCgpLCB0cnVlKTsKLSAgICAgICAgbV9za2lhQ29udGV4dCA9IG5ldyBQbGF0Zm9ybUNvbnRleHRT
a2lhKG1fY2FudmFzLmdldCgpKTsKKyAgICBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lID0gMDsK
KyAgICBib29sIG5lZWRzQWxsb2NhdGUgPSBmYWxzZTsKKyAgICBtX3NraXBzRHJhdyA9IGZhbHNl
OwogCi0gICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIGdldCB0ZXh0IHRvIHNob3cgdXAgY29y
cmVjdGx5LgotICAgICAgICAvLyBGSVhNRTogRG9lcyB0aGlzIHRha2UgdXMgZG93biBhIHZlcnkg
c2xvdyB0ZXh0IHJlbmRlcmluZyBwYXRoPwotICAgICAgICBtX3NraWFDb250ZXh0LT5zZXREcmF3
aW5nVG9JbWFnZUJ1ZmZlcih0cnVlKTsKLSAgICAgICAgbV9ncmFwaGljc0NvbnRleHQgPSBuZXcg
R3JhcGhpY3NDb250ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1HcmFwaGljc0NvbnRleHQq
PihtX3NraWFDb250ZXh0LmdldCgpKSk7CisgICAgZnJhbWUgPSBtX3Byb3ZpZGVyLT5nZXRDdXJy
ZW50RnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKSB7CisgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1
ZTsKKyAgICAgICAgbV9wcm92aWRlci0+cHV0Q3VycmVudEZyYW1lKGZyYW1lKTsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIC8vIEJyaW5nIHRoZSBjYW52YXMgaW50byB0aGUgY29vcmRp
bmF0ZSBzeXN0ZW0gb2YgdGhlIHBhaW50IHJlY3QuCi0gICAgbV9jYW52YXMtPnRyYW5zbGF0ZShz
dGF0aWNfY2FzdDxTa1NjYWxhcj4oLWRpcnR5UmVjdC54KCkpLCBzdGF0aWNfY2FzdDxTa1NjYWxh
cj4oLWRpcnR5UmVjdC55KCkpKTsKKyAgICBtX2ZyYW1lRm9ybWF0ID0gZnJhbWUtPmZvcm1hdCgp
OworICAgIHVuc2lnbmVkIHRleHR1cmVGb3JtYXQgPSBkZXRlcm1pbmVUZXh0dXJlRm9ybWF0KGZy
YW1lKTsKKyAgICBpZiAodGV4dHVyZUZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSkgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG90aGVyIHBhdGhzLgorICAg
ICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7CisgICAg
ICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CiAKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgdGVzdCB3aGVuIHRpbGVkIGxheWVy
cyBhcmUgaW1wbGVtZW50ZWQuCi0gICAgbV9za2lwc0RyYXcgPSBmYWxzZTsKLSAgICBpZiAoIWxh
eWVyUmVuZGVyZXIoKS0+Y2hlY2tUZXh0dXJlU2l6ZShyZXF1aXJlZFRleHR1cmVTaXplKSkgewor
ICAgIC8vIEFsbG9jYXRlIHRleHR1cmVzIGZvciBwbGFuZXMgaWYgdGhleSBhcmUgbm90IGFsbG9j
YXRlZCBhbHJlYWR5LCBvcgorICAgIC8vIHJlYWxsb2NhdGUgdGV4dHVyZXMgdGhhdCBhcmUgdGhl
IHdyb25nIHNpemUgZm9yIHRoZSBmcmFtZS4KKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7CisgICAgYm9vbCB0ZXh0dXJlc0FsbG9jYXRlZCA9
IGFsbG9jYXRlVGV4dHVyZXNJZk5lZWRlZChjb250ZXh0LCBmcmFtZSwgdGV4dHVyZUZvcm1hdCk7
CisgICAgaWYgKCF0ZXh0dXJlc0FsbG9jYXRlZCkgewogICAgICAgICBtX3NraXBzRHJhdyA9IHRy
dWU7CisgICAgICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICB1bnNpZ25lZCB0ZXh0dXJlSWQgPSBtX2NvbnRlbnRzVGV4
dHVyZTsKLSAgICBpZiAoIXRleHR1cmVJZCkKLSAgICAgICAgdGV4dHVyZUlkID0gbGF5ZXJSZW5k
ZXJlcigpLT5jcmVhdGVMYXllclRleHR1cmUoKTsKLQotICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlk
IG9yIHNpemUgY2hhbmdlZCBzaW5jZSBsYXN0IHRpbWUsIHRoZW4gd2UgbmVlZCB0byB0ZWxsIEdM
Ci0gICAgLy8gdG8gcmUtYWxsb2NhdGUgYSB0ZXh0dXJlLgotICAgIGlmIChtX2NvbnRlbnRzVGV4
dHVyZSAhPSB0ZXh0dXJlSWQgfHwgcmVxdWlyZWRUZXh0dXJlU2l6ZSAhPSBtX2FsbG9jYXRlZFRl
eHR1cmVTaXplKQotICAgICAgICBjcmVhdGVUZXh0dXJlUmVjdChyZXF1aXJlZFRleHR1cmVTaXpl
LCBkaXJ0eVJlY3QsIHRleHR1cmVJZCk7Ci0gICAgZWxzZQotICAgICAgICB1cGRhdGVUZXh0dXJl
UmVjdChkaXJ0eVJlY3QsIHRleHR1cmVJZCk7Ci0jZWxzZQotICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgbm9uLXNraWEgcGF0aAotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0jZW5kaWYKKyAgICAvLyBV
cGRhdGUgdGV4dHVyZSBwbGFuZXMuCisgICAgZm9yIChpbnQgcGxhbmUgPSAwOyBwbGFuZSA8IGZy
YW1lLT5wbGFuZXMoKTsgcGxhbmUrKykgeworICAgICAgICBBU1NFUlQoZnJhbWUtPnJlcXVpcmVk
VGV4dHVyZVNpemUocGxhbmUpID09IG1fdGV4dHVyZVNpemVzW3BsYW5lXSk7CisgICAgICAgIHVw
ZGF0ZVRleHR1cmUoY29udGV4dCwgbV90ZXh0dXJlc1twbGFuZV0sIGZyYW1lLT5yZXF1aXJlZFRl
eHR1cmVTaXplKHBsYW5lKSwgdGV4dHVyZUZvcm1hdCwgZnJhbWUtPmRhdGEocGxhbmUpKTsKKyAg
ICB9CisKKyAgICBtX2RpcnR5UmVjdC5zZXRTaXplKEZsb2F0U2l6ZSgpKTsKKyAgICBtX2NvbnRl
bnRzRGlydHkgPSBmYWxzZTsKKyAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUoZnJhbWUp
OwogfQogCi12b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVJlY3QoY29uc3Qg
SW50U2l6ZSYgcmVxdWlyZWRUZXh0dXJlU2l6ZSwgY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwg
dW5zaWduZWQgdGV4dHVyZUlkKQordW5zaWduZWQgVmlkZW9MYXllckNocm9taXVtOjpkZXRlcm1p
bmVUZXh0dXJlRm9ybWF0KFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUpCiB7Ci0gICAgLy8gUGFp
bnQgaW50byBncmFwaGljcyBjb250ZXh0IGFuZCBnZXQgYml0bWFwLgotICAgIG1fb3duZXItPnBh
aW50R3JhcGhpY3NMYXllckNvbnRlbnRzKCptX2dyYXBoaWNzQ29udGV4dCwgdXBkYXRlUmVjdCk7
Ci0gICAgdm9pZCogcGl4ZWxzID0gMDsKLSAgICBJbnRTaXplIGJpdG1hcFNpemUgPSBJbnRTaXpl
KCk7Ci0jaWYgUExBVEZPUk0oU0tJQSkKLSAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gbV9j
YW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwotICAgIGNvbnN0IFNrQml0
bWFwKiBza2lhQml0bWFwID0gJmJpdG1hcDsKLSAgICBBU1NFUlQoc2tpYUJpdG1hcCk7Ci0KLSAg
ICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soKnNraWFCaXRtYXApOwotICAgIFNrQml0bWFwOjpDb25m
aWcgc2tpYUNvbmZpZyA9IHNraWFCaXRtYXAtPmNvbmZpZygpOwotICAgIC8vIEZJWE1FOiBEbyB3
ZSBuZWVkIHRvIHN1cHBvcnQgbW9yZSBpbWFnZSBjb25maWd1cmF0aW9ucz8KLSAgICBpZiAoc2tp
YUNvbmZpZyA9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpIHsKLSAgICAgICAgcGl4ZWxz
ID0gc2tpYUJpdG1hcC0+Z2V0UGl4ZWxzKCk7Ci0gICAgICAgIGJpdG1hcFNpemUgPSBJbnRTaXpl
KHNraWFCaXRtYXAtPndpZHRoKCksIHNraWFCaXRtYXAtPmhlaWdodCgpKTsKKyAgICBzd2l0Y2gg
KGZyYW1lLT5mb3JtYXQoKSkgeworICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpZVjEyOgor
ICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRTsKKyAgICBjYXNlIFZp
ZGVvRnJhbWVDaHJvbWl1bTo6UkdCQToKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBOwogICAgIH0KLSNlbHNlCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCBub24tc2tpYSBw
YXRoCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSNlbmRpZgotICAgIGlmICghcGl4ZWxzKQotICAg
ICAgICByZXR1cm47CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
OworfQogCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29u
dGV4dCgpOwotICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCB0ZXh0dXJlSWQpOwotICAgIEFTU0VSVChiaXRtYXBTaXplID09IHJlcXVpcmVkVGV4
dHVyZVNpemUpOwotICAgIGNvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCByZXF1aXJlZFRleHR1cmVTaXpl
LndpZHRoKCksIHJlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgcGl4ZWxzKTsKK2Jv
b2wgVmlkZW9MYXllckNocm9taXVtOjphbGxvY2F0ZVRleHR1cmVzSWZOZWVkZWQoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsIFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUsIHVuc2lnbmVkIHRl
eHR1cmVGb3JtYXQpCit7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIEFTU0VSVChmcmFtZSk7
CisKKyAgICBmb3IgKGludCBwbGFuZSA9IDA7IHBsYW5lIDwgZnJhbWUtPnBsYW5lcygpOyBwbGFu
ZSsrKSB7CisgICAgICAgIEludFNpemUgcGxhbmVUZXh0dXJlU2l6ZSA9IGZyYW1lLT5yZXF1aXJl
ZFRleHR1cmVTaXplKHBsYW5lKTsKKworICAgICAgICAvLyBJZiB0aGUgcmVuZGVyZXIgY2Fubm90
IGhhbmRsZSB0aGlzIGxhcmdlIG9mIGEgdGV4dHVyZSwgcmV0dXJuIGZhbHNlLgorICAgICAgICAv
LyBGSVhNRTogUmVtb3ZlIHRoaXMgdGVzdCB3aGVuIHRpbGVkIGxheWVycyBhcmUgaW1wbGVtZW50
ZWQuCisgICAgICAgIGlmICghbGF5ZXJSZW5kZXJlcigpLT5jaGVja1RleHR1cmVTaXplKHBsYW5l
VGV4dHVyZVNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9jb250ZW50
c1RleHR1cmUgPSB0ZXh0dXJlSWQ7Ci0gICAgbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSA9IHJlcXVp
cmVkVGV4dHVyZVNpemU7CisgICAgICAgIGlmICghbV90ZXh0dXJlc1twbGFuZV0pCisgICAgICAg
ICAgICBtX3RleHR1cmVzW3BsYW5lXSA9IGxheWVyUmVuZGVyZXIoKS0+Y3JlYXRlTGF5ZXJUZXh0
dXJlKCk7CiAKLSAgICB1cGRhdGVDb21wbGV0ZWQoKTsKKyAgICAgICAgaWYgKHBsYW5lVGV4dHVy
ZVNpemUgIT0gSW50U2l6ZSgpICYmIHBsYW5lVGV4dHVyZVNpemUgIT0gbV90ZXh0dXJlU2l6ZXNb
cGxhbmVdKSB7CisgICAgICAgICAgICBhbGxvY2F0ZVRleHR1cmUoY29udGV4dCwgbV90ZXh0dXJl
c1twbGFuZV0sIHBsYW5lVGV4dHVyZVNpemUsIHRleHR1cmVGb3JtYXQpOworICAgICAgICAgICAg
bV90ZXh0dXJlU2l6ZXNbcGxhbmVdID0gcGxhbmVUZXh0dXJlU2l6ZTsKKyAgICAgICAgICAgIG1f
ZnJhbWVTaXplc1twbGFuZV0gPSBJbnRTaXplKGZyYW1lLT53aWR0aCgpLCBmcmFtZS0+aGVpZ2h0
KCkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFZpZGVv
TGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZVJlY3QoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVj
dCwgdW5zaWduZWQgdGV4dHVyZUlkKQordm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OmFsbG9jYXRl
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgdW5zaWduZWQgdGV4dHVyZUlkLCBj
b25zdCBJbnRTaXplJiBkaW1lbnNpb25zLCB1bnNpZ25lZCB0ZXh0dXJlRm9ybWF0KQogewotI2lm
IFBMQVRGT1JNKFNLSUEpCi0gICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IG1fY2FudmFzLT5n
ZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKHRydWUpOwotICAgIFNrQml0bWFwKiBza2lhQml0bWFw
ID0gY29uc3RfY2FzdDxTa0JpdG1hcCo+KCZiaXRtYXApOwotICAgIEFTU0VSVChza2lhQml0bWFw
KTsKLQotICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jaygqc2tpYUJpdG1hcCk7Ci0gICAgU2tCaXRt
YXA6OkNvbmZpZyBza2lhQ29uZmlnID0gc2tpYUJpdG1hcC0+Y29uZmlnKCk7Ci0KLSAgICBpZiAo
c2tpYUNvbmZpZyA9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpIHsKLSAgICAgICAgR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOwotICAgICAg
ICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4
dHVyZUlkKTsKLSAgICAgICAgQVNTRVJUKGNvbnRleHQtPnN1cHBvcnRzTWFwU3ViQ0hST01JVU0o
KSk7Ci0gICAgICAgIHZvaWQqIG1lbSA9IGNvbnRleHQtPm1hcFRleFN1YkltYWdlMkRDSFJPTUlV
TShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgdXBkYXRlUmVjdC54KCksIHVwZGF0
ZVJlY3QueSgpLCB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OldSSVRFX09OTFkpOwotICAgICAgICBza2lhQml0bWFwLT5zZXRQaXhl
bHMobWVtKTsKLSAgICAgICAgbV9vd25lci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoKm1f
Z3JhcGhpY3NDb250ZXh0LCB1cGRhdGVSZWN0KTsKLSAgICAgICAgY29udGV4dC0+dW5tYXBUZXhT
dWJJbWFnZTJEQ0hST01JVU0obWVtKTsKLSAgICB9CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpKTsK
KyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgMCwgdGV4dHVyZUZvcm1hdCwgZGltZW5zaW9ucy53aWR0aCgpLCBkaW1lbnNp
b25zLmhlaWdodCgpLCAwLCB0ZXh0dXJlRm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSwgMCkpOworfQogCi0gICAgdXBkYXRlQ29tcGxldGVkKCk7Ci0jZWxzZQotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgbm9uLXNraWEgcGF0aAotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0j
ZW5kaWYKK3ZvaWQgVmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0LCB1bnNpZ25lZCB0ZXh0dXJlSWQsIGNvbnN0IEludFNpemUmIGRpbWVu
c2lvbnMsIHVuc2lnbmVkIGZvcm1hdCwgY29uc3Qgdm9pZCogZGF0YSkKK3sKKyAgICBBU1NFUlQo
Y29udGV4dCk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpKTsKKyAgICB2b2lkKiBtZW0gPSBjb250
ZXh0LT5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIDAsIDAsIDAsIGRpbWVuc2lvbnMud2lkdGgoKSwgZGltZW5zaW9ucy5oZWlnaHQoKSwgZm9y
bWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgR3JhcGhpY3NDb250ZXh0M0Q6
OldSSVRFX09OTFkpOworICAgIGlmIChtZW0pIHsKKyAgICAgICAgbWVtY3B5KG1lbSwgZGF0YSwg
ZGltZW5zaW9ucy53aWR0aCgpICogZGltZW5zaW9ucy5oZWlnaHQoKSk7CisgICAgICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT51bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShtZW0pKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOwogfQogCi12b2lkIFZpZGVvTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlQ29tcGxldGVkKCkKK3ZvaWQgVmlkZW9MYXllckNocm9taXVtOjpkcmF3
KCkKIHsKLSAgICBtX2RpcnR5UmVjdC5zZXRTaXplKEZsb2F0U2l6ZSgpKTsKLSAgICBtX2NvbnRl
bnRzRGlydHkgPSBmYWxzZTsKKyAgICBpZiAobV9za2lwc0RyYXcpCisgICAgICAgIHJldHVybjsK
KworICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOworICAgIGNvbnN0IFZpZGVvTGF5ZXJDaHJv
bWl1bTo6U2hhcmVkVmFsdWVzKiBzdiA9IGxheWVyUmVuZGVyZXIoKS0+dmlkZW9MYXllclNoYXJl
ZFZhbHVlcygpOworICAgIEFTU0VSVChzdiAmJiBzdi0+aW5pdGlhbGl6ZWQoKSk7CisKKyAgICBz
d2l0Y2ggKG1fZnJhbWVGb3JtYXQpIHsKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6WVYx
MjoKKyAgICAgICAgZHJhd1lVVihzdik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVmlkZW9G
cmFtZUNocm9taXVtOjpSR0JBOgorICAgICAgICBkcmF3UkdCQShzdik7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgb3RoZXIgcGF0aHMu
CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
dm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OmRyYXdZVVYoY29uc3QgU2hhcmVkVmFsdWVzKiBzdikK
K3sKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0
KCk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkUxKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVzW1ZpZGVvRnJhbWVDaHJv
bWl1bTo6eVBsYW5lXSkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMikpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlc1tW
aWRlb0ZyYW1lQ2hyb21pdW06OnVQbGFuZV0pKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTMpKTsKKyAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjp2UGxhbmVdKSk7CisKKyAgICBsYXllclJl
bmRlcmVyKCktPnVzZVNoYWRlcihzdi0+eXV2U2hhZGVyUHJvZ3JhbSgpKTsKKyAgICB1bnNpZ25l
ZCBmcmFtZVdpZHRoID0gbV9mcmFtZVNpemVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6eVBsYW5lXS53
aWR0aCgpOworICAgIHVuc2lnbmVkIHRleHR1cmVXaWR0aCA9IG1fdGV4dHVyZVNpemVzW1ZpZGVv
RnJhbWVDaHJvbWl1bTo6eVBsYW5lXS53aWR0aCgpOworICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0
b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4oZnJhbWVXaWR0aCkgLyB0ZXh0dXJlV2lkdGg7CisgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xZihzdi0+eXV2V2lkdGhTY2FsZUZhY3Rvckxv
Y2F0aW9uKCksIHdpZHRoU2NhbGVGYWN0b3IpKTsKKworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT51bmlmb3JtMWkoc3YtPnlUZXh0dXJlTG9jYXRpb24oKSwgMSkpOworICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT51bmlmb3JtMWkoc3YtPnVUZXh0dXJlTG9jYXRpb24oKSwgMikpOworICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkoc3YtPnZUZXh0dXJlTG9jYXRpb24oKSwgMykp
OworCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYoc3YtPmNjTWF0
cml4TG9jYXRpb24oKSwgMCwgY29uc3RfY2FzdDxmbG9hdCo+KGNZVVYyUkdCKSwgMSkpOworCisg
ICAgZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25N
YXRyaXgoKSwgZHJhd1RyYW5zZm9ybSgpLAorICAgICAgICAgICAgICAgICAgICAgYm91bmRzKCku
d2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGRyYXdPcGFjaXR5KCksCisgICAgICAgICAgICAg
ICAgICAgICBzdi0+eXV2U2hhZGVyTWF0cml4TG9jYXRpb24oKSwgc3YtPnl1dkFscGhhTG9jYXRp
b24oKSk7CisKKyAgICAvLyBSZXNldCBhY3RpdmUgdGV4dHVyZSBiYWNrIHRvIHRleHR1cmUgMC4K
KyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRTApKTsKIH0KIAordm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OmRyYXdSR0JBKGNv
bnN0IFNoYXJlZFZhbHVlcyogc3YpCit7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQg
PSBsYXllclJlbmRlcmVyQ29udGV4dCgpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3Rp
dmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOworICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90
ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnJnYlBsYW5lXSkpOworCisgICAgbGF5ZXJSZW5k
ZXJlcigpLT51c2VTaGFkZXIoc3YtPnJnYmFTaGFkZXJQcm9ncmFtKCkpOworICAgIHVuc2lnbmVk
IGZyYW1lV2lkdGggPSBtX2ZyYW1lU2l6ZXNbVmlkZW9GcmFtZUNocm9taXVtOjpyZ2JQbGFuZV0u
d2lkdGgoKTsKKyAgICB1bnNpZ25lZCB0ZXh0dXJlV2lkdGggPSBtX3RleHR1cmVTaXplc1tWaWRl
b0ZyYW1lQ2hyb21pdW06OnJnYlBsYW5lXS53aWR0aCgpOworICAgIGZsb2F0IHdpZHRoU2NhbGVG
YWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4oZnJhbWVXaWR0aCkgLyB0ZXh0dXJlV2lkdGg7Cisg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xZihzdi0+cmdiYVdpZHRoU2NhbGVGYWN0
b3JMb2NhdGlvbigpLCB3aWR0aFNjYWxlRmFjdG9yKSk7CisKKyAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+dW5pZm9ybTFpKHN2LT5yZ2JhVGV4dHVyZUxvY2F0aW9uKCksIDApKTsKKworICAgIGRy
YXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4
KCksIGRyYXdUcmFuc2Zvcm0oKSwKKyAgICAgICAgICAgICAgICAgICAgIGJvdW5kcygpLndpZHRo
KCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3T3BhY2l0eSgpLAorICAgICAgICAgICAgICAgICAg
ICAgc3YtPnJnYmFTaGFkZXJNYXRyaXhMb2NhdGlvbigpLCBzdi0+cmdiYUFscGhhTG9jYXRpb24o
KSk7CiB9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlmIC8vIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDM1MDdjYjIwY2YxN2U3OTMzMTJk
NmVlYjNlOTUzYjdmOGNlYmYyNTkuLjA4YzM3YTVlN2ZhOWE0OTlkNGY5OTA1YWE3NGM0N2YzZDU3
ZjI1NWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlk
ZW9MYXllckNocm9taXVtLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9WaWRlb0xheWVyQ2hyb21pdW0uaApAQCAtMzQsMzEgKzM0LDc2IEBACiAKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAKLSNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5o
IgorI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJWaWRlb0ZyYW1lUHJvdmlk
ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBBIExheWVyIHRoYXQgY29udGFpbnMg
YSBWaWRlbyBlbGVtZW50LgotY2xhc3MgVmlkZW9MYXllckNocm9taXVtIDogcHVibGljIENvbnRl
bnRMYXllckNocm9taXVtIHsKK2NsYXNzIFZpZGVvTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBMYXll
ckNocm9taXVtIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxWaWRlb0xheWVyQ2hy
b21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyID0gMCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWRlb0ZyYW1lUHJvdmlk
ZXIqID0gMCk7Ci0gICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIHsgcmV0dXJuIHRydWU7
IH0KKyAgICB2aXJ0dWFsIH5WaWRlb0xheWVyQ2hyb21pdW0oKTsKICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlQ29udGVudHMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBkcmF3KCk7CisKKyAgICBjbGFzcyBTaGFyZWRW
YWx1ZXMgeworICAgIHB1YmxpYzoKKyAgICAgICAgZXhwbGljaXQgU2hhcmVkVmFsdWVzKEdyYXBo
aWNzQ29udGV4dDNEKik7CisgICAgICAgIH5TaGFyZWRWYWx1ZXMoKTsKKyAgICAgICAgdW5zaWdu
ZWQgeXV2U2hhZGVyUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIG1feXV2U2hhZGVyUHJvZ3JhbTsg
fQorICAgICAgICB1bnNpZ25lZCByZ2JhU2hhZGVyUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIG1f
cmdiYVNoYWRlclByb2dyYW07IH0KKyAgICAgICAgaW50IHl1dlNoYWRlck1hdHJpeExvY2F0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV95dXZTaGFkZXJNYXRyaXhMb2NhdGlvbjsgfQorICAgICAgICBp
bnQgcmdiYVNoYWRlck1hdHJpeExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZ2JhU2hhZGVy
TWF0cml4TG9jYXRpb247IH0KKyAgICAgICAgaW50IHl1dldpZHRoU2NhbGVGYWN0b3JMb2NhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1feXV2V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uOyB9CisgICAg
ICAgIGludCByZ2JhV2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9y
Z2JhV2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uOyB9CisgICAgICAgIGludCB5VGV4dHVyZUxvY2F0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV95VGV4dHVyZUxvY2F0aW9uOyB9CisgICAgICAgIGludCB1
VGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV91VGV4dHVyZUxvY2F0aW9uOyB9Cisg
ICAgICAgIGludCB2VGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV92VGV4dHVyZUxv
Y2F0aW9uOyB9CisgICAgICAgIGludCB5dXZBbHBoYUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV95dXZBbHBoYUxvY2F0aW9uOyB9CisgICAgICAgIGludCByZ2JhQWxwaGFMb2NhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fcmdiYUFscGhhTG9jYXRpb247IH0KKyAgICAgICAgaW50IHJnYmFUZXh0
dXJlTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JnYmFUZXh0dXJlTG9jYXRpb247IH0KKyAg
ICAgICAgaW50IGNjTWF0cml4TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NjTWF0cml4TG9j
YXRpb247IH0KKyAgICAgICAgYm9vbCBpbml0aWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5p
dGlhbGl6ZWQ7IH07CisgICAgcHJpdmF0ZToKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1f
Y29udGV4dDsKKyAgICAgICAgdW5zaWduZWQgbV95dXZTaGFkZXJQcm9ncmFtOworICAgICAgICB1
bnNpZ25lZCBtX3JnYmFTaGFkZXJQcm9ncmFtOworICAgICAgICBpbnQgbV95dXZTaGFkZXJNYXRy
aXhMb2NhdGlvbjsKKyAgICAgICAgaW50IG1fcmdiYVNoYWRlck1hdHJpeExvY2F0aW9uOworICAg
ICAgICBpbnQgbV95dXZXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb247CisgICAgICAgIGludCBtX3Jn
YmFXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb247CisgICAgICAgIGludCBtX3lUZXh0dXJlTG9jYXRp
b247CisgICAgICAgIGludCBtX3VUZXh0dXJlTG9jYXRpb247CisgICAgICAgIGludCBtX3ZUZXh0
dXJlTG9jYXRpb247CisgICAgICAgIGludCBtX3JnYmFUZXh0dXJlTG9jYXRpb247CisgICAgICAg
IGludCBtX2NjTWF0cml4TG9jYXRpb247CisgICAgICAgIGludCBtX3l1dkFscGhhTG9jYXRpb247
CisgICAgICAgIGludCBtX3JnYmFBbHBoYUxvY2F0aW9uOworICAgICAgICBib29sIG1faW5pdGlh
bGl6ZWQ7CisgICAgfTsKIAogcHJpdmF0ZToKLSAgICBWaWRlb0xheWVyQ2hyb21pdW0oR3JhcGhp
Y3NMYXllckNocm9taXVtKiBvd25lciwgVmlkZW9GcmFtZVByb3ZpZGVyKik7Ci0gICAgdm9pZCBj
cmVhdGVUZXh0dXJlUmVjdChjb25zdCBJbnRTaXplJiByZXF1aXJlZFRleHR1cmVTaXplLCBjb25z
dCBJbnRSZWN0JiB1cGRhdGVSZWN0LCB1bnNpZ25lZCB0ZXh0dXJlSWQpOwotICAgIHZvaWQgdXBk
YXRlVGV4dHVyZVJlY3QoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgdW5zaWduZWQgdGV4dHVy
ZUlkKTsKLSAgICB2b2lkIHVwZGF0ZUNvbXBsZXRlZCgpOworICAgIGV4cGxpY2l0IFZpZGVvTGF5
ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyLCBWaWRlb0ZyYW1lUHJvdmlk
ZXIqIHByb3ZpZGVyKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgZGV0ZXJtaW5lVGV4dHVyZUZvcm1h
dChWaWRlb0ZyYW1lQ2hyb21pdW0qKTsKKyAgICBib29sIGFsbG9jYXRlVGV4dHVyZXNJZk5lZWRl
ZChHcmFwaGljc0NvbnRleHQzRCosIFZpZGVvRnJhbWVDaHJvbWl1bSosIHVuc2lnbmVkIHRleHR1
cmVGb3JtYXQpOworICAgIHZvaWQgdXBkYXRlWVVWQ29udGVudHMoR3JhcGhpY3NDb250ZXh0M0Qq
LCBjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qKTsKKyAgICB2b2lkIHVwZGF0ZVJHQkFDb250ZW50
cyhHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSopOworICAgIHZv
aWQgYWxsb2NhdGVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgdW5zaWduZWQgdGV4dHVyZUlk
LCBjb25zdCBJbnRTaXplJiBkaW1lbnNpb25zLCB1bnNpZ25lZCB0ZXh0dXJlRm9ybWF0KTsKKyAg
ICB2b2lkIHVwZGF0ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCB0ZXh0dXJl
SWQsIGNvbnN0IEludFNpemUmIGRpbWVuc2lvbnMsIHVuc2lnbmVkIHRleHR1cmVGb3JtYXQsIGNv
bnN0IHZvaWQqIGRhdGEpOworICAgIHZvaWQgZHJhd1lVVihjb25zdCBTaGFyZWRWYWx1ZXMqKTsK
KyAgICB2b2lkIGRyYXdSR0JBKGNvbnN0IFNoYXJlZFZhbHVlcyopOwogCi0jaWYgUExBVEZPUk0o
U0tJQSkKLSAgICBPd25QdHI8c2tpYTo6UGxhdGZvcm1DYW52YXM+IG1fY2FudmFzOwotICAgIE93
blB0cjxQbGF0Zm9ybUNvbnRleHRTa2lhPiBtX3NraWFDb250ZXh0OwotI2VuZGlmCi0gICAgT3du
UHRyPEdyYXBoaWNzQ29udGV4dD4gbV9ncmFwaGljc0NvbnRleHQ7CisgICAgc3RhdGljIGNvbnN0
IGZsb2F0IGNZVVYyUkdCWzldOworCisgICAgVmlkZW9GcmFtZUNocm9taXVtOjpGb3JtYXQgbV9m
cmFtZUZvcm1hdDsKICAgICBPd25QdHI8VmlkZW9GcmFtZVByb3ZpZGVyPiBtX3Byb3ZpZGVyOwor
ICAgIGJvb2wgbV9za2lwc0RyYXc7CisgICAgdW5zaWduZWQgbV90ZXh0dXJlc1szXTsKKyAgICBJ
bnRTaXplIG1fdGV4dHVyZVNpemVzWzNdOworICAgIEludFNpemUgbV9mcmFtZVNpemVzWzNdOwog
fTsKIAogfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZTUyZTNiNzYzOGE0NGVkYTdjZDdhZjkyNDcxZGIxN2I2
YTM0NmQ2My4uZjllZjg0MTJhOTYzMzFhMWI3MGYzYWIwMmIxMTM3MmM2ZjYwY2Q5NCAxMDA2NDQK
LS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDktMTMgIFZpY3RvcmlhIEtpcnN0ICA8dnJr
QGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRml4aW5nIGNvbnN0YW50cyBpbiBWaWRlb0ZyYW1lQ2hyb21pdW1JbXBsIHNvIHRoYXQg
aXQgb3ZlcmxvYWRzIHRoZQorICAgICAgICBWaWRlb0ZyYW1lQ2hyb21pdW0gY29uc3QgZGVjbGFy
YXRpb25zLiBBbHNvIGFkZGluZyBsb2dpYyBzdWNoIHRoYXQgYQorICAgICAgICBWaWRlb0ZyYW1l
Q2hyb21pdW0gdW5kZXJzdGFuZHMgd2hhdCBzaXplIGl0cyB0ZXh0dXJlIHNob3VsZCBiZSBiYXNl
ZAorICAgICAgICBvbiBmcmFtZSBmb3JtYXQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00NTA2OQorCisgICAgICAgICogc3JjL1ZpZGVvRnJhbWVDaHJv
bWl1bUltcGwuY3BwOgorCiAyMDEwLTA5LTI2ICBNaWhhaSBQYXJwYXJpdGEgIDxtaWhhaXBAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vc3JjL1ZpZGVvRnJhbWVDaHJvbWl1bUltcGwuY3BwIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9WaWRlb0ZyYW1lQ2hyb21pdW1JbXBsLmNwcAppbmRleCAyYjk4MzIwYTNj
ZTA1NzY1NWI2N2NkMGE0Yzc4YjFiZmI5YzFlODYzLi42MGU3NWI4NjZjMDk3MjE4NDJlNTU0NmI4
YmRjMTUxMWI3MTQ2NWYxIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1ZpZGVvRnJh
bWVDaHJvbWl1bUltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvVmlkZW9GcmFtZUNo
cm9taXVtSW1wbC5jcHAKQEAgLTM2LDE1ICszNiwxNSBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAotbmFtZXNwYWNlIFdlYktpdCB7Citjb25zdCB1bnNpZ25lZCBWaWRlb0ZyYW1lQ2hy
b21pdW06Om1heFBsYW5lcyA9IDM7Citjb25zdCB1bnNpZ25lZCBWaWRlb0ZyYW1lQ2hyb21pdW06
Om51bVJHQlBsYW5lcyA9IDE7Citjb25zdCB1bnNpZ25lZCBWaWRlb0ZyYW1lQ2hyb21pdW06OnJn
YlBsYW5lID0gMDsKK2NvbnN0IHVuc2lnbmVkIFZpZGVvRnJhbWVDaHJvbWl1bTo6bnVtWVVWUGxh
bmVzID0gMzsKK2NvbnN0IHVuc2lnbmVkIFZpZGVvRnJhbWVDaHJvbWl1bTo6eVBsYW5lID0gMDsK
K2NvbnN0IHVuc2lnbmVkIFZpZGVvRnJhbWVDaHJvbWl1bTo6dVBsYW5lID0gMTsKK2NvbnN0IHVu
c2lnbmVkIFZpZGVvRnJhbWVDaHJvbWl1bTo6dlBsYW5lID0gMjsKIAotY29uc3QgdW5zaWduZWQg
Y01heFBsYW5lcyA9IDM7Ci1jb25zdCB1bnNpZ25lZCBjTnVtUkdCUGxhbmVzID0gMTsKLWNvbnN0
IHVuc2lnbmVkIGNSR0JQbGFuZSA9IDA7Ci1jb25zdCB1bnNpZ25lZCBjTnVtWVVWUGxhbmVzID0g
MzsKLWNvbnN0IHVuc2lnbmVkIGNZUGxhbmUgPSAwOwotY29uc3QgdW5zaWduZWQgY1VQbGFuZSA9
IDE7Ci1jb25zdCB1bnNpZ25lZCBjVlBsYW5lID0gMjsKK25hbWVzcGFjZSBXZWJLaXQgewogCiBX
ZWJWaWRlb0ZyYW1lKiBWaWRlb0ZyYW1lQ2hyb21pdW1JbXBsOjp0b1dlYlZpZGVvRnJhbWUoVmlk
ZW9GcmFtZUNocm9taXVtKiB2aWRlb0ZyYW1lKQogewpAQCAtMTA4LDQgKzEwOCwyMiBAQCBjb25z
dCB2b2lkKiBWaWRlb0ZyYW1lQ2hyb21pdW1JbXBsOjpkYXRhKHVuc2lnbmVkIHBsYW5lKSBjb25z
dAogICAgIHJldHVybiAwOwogfQogCitjb25zdCBJbnRTaXplIFZpZGVvRnJhbWVDaHJvbWl1bUlt
cGw6OnJlcXVpcmVkVGV4dHVyZVNpemUodW5zaWduZWQgcGxhbmUpIGNvbnN0Cit7CisgICAgc3dp
dGNoIChmb3JtYXQoKSkgeworICAgIGNhc2UgUkdCQToKKyAgICAgICAgcmV0dXJuIEludFNpemUo
c3RyaWRlKHBsYW5lKSwgaGVpZ2h0KCkpOworICAgIGNhc2UgWVYxMjoKKyAgICAgICAgc3dpdGNo
IChwbGFuZSkgeworICAgICAgICBjYXNlIHlQbGFuZToKKyAgICAgICAgICAgIHJldHVybiBJbnRT
aXplKHN0cmlkZShwbGFuZSksIGhlaWdodCgpKTsKKyAgICAgICAgY2FzZSB1UGxhbmU6CisgICAg
ICAgICAgICByZXR1cm4gSW50U2l6ZShzdHJpZGUocGxhbmUpLCBoZWlnaHQoKSAvIDIpOworICAg
ICAgICBjYXNlIHZQbGFuZToKKyAgICAgICAgICAgIHJldHVybiBJbnRTaXplKHN0cmlkZShwbGFu
ZSksIGhlaWdodCgpIC8gMik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEludFNpemUo
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL1ZpZGVvRnJhbWVDaHJvbWl1bUltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvVmlk
ZW9GcmFtZUNocm9taXVtSW1wbC5oCmluZGV4IDNhZDQyNGM0NmE4NzZhMTkzOTQ2MGJiZDQ5OWMx
ZDc4NzEwNWVjNzMuLjA0MmNkN2U3MTYzNTZiYWZiNDViZmM3NDU5Mjk1ZjM4ZGI3OTNiYmQgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvVmlkZW9GcmFtZUNocm9taXVtSW1wbC5oCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvVmlkZW9GcmFtZUNocm9taXVtSW1wbC5oCkBAIC01Niw2
ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHBsYW5lcygpIGNvbnN0Owog
ICAgIHZpcnR1YWwgaW50IHN0cmlkZSh1bnNpZ25lZCBwbGFuZSkgY29uc3Q7CiAgICAgdmlydHVh
bCBjb25zdCB2b2lkKiBkYXRhKHVuc2lnbmVkIHBsYW5lKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNv
bnN0IEludFNpemUgcmVxdWlyZWRUZXh0dXJlU2l6ZSh1bnNpZ25lZCBwbGFuZSkgY29uc3Q7CiAK
IHByaXZhdGU6CiAgICAgV2ViVmlkZW9GcmFtZSogbV93ZWJWaWRlb0ZyYW1lOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68985</attachid>
            <date>2010-09-27 16:08:26 -0700</date>
            <delta_ts>2010-09-27 16:48:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45069-20100927160825.patch</filename>
            <type>text/plain</type>
            <size>34709</size>
            <attacher name="Victoria Kirst">vrk</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZGZjMzE0MGNiMGVkMjMxMWI0MTg4MjZhYjEzMjAwOTNjNjAwMjcwOC4uZWEzYzgwYTg5ZmMwNWQ2
OGZhNGY5ZDE3MGIxNDdhZDE2OWNkYzdlMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAxMC0wOS0xMyAgVmlj
dG9yaWEgS2lyc3QgIDx2cmtAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNb2RpZmllcyBWaWRlb0xheWVyQ2hyb21pdW0gdG8gZG8g
WVVWIHRvIFJHQiBjb2xvciBjb252ZXJzaW9uIGluIHRoZQorICAgICAgICBHUFUuIEFsc28gYWRk
cyBzdXBwb3J0IGZvciBSR0JBIHZpZGVvIGZyYW1lIGZvcm1hdHMsIHRob3VnaCB0aGlzIGNvZGUK
KyAgICAgICAgcGF0aCBpcyBjdXJyZW50bHkgbmV2ZXIgcnVuIGJlY2F1c2UgdGhlIHZpZGVvIGZy
YW1lcyBhcmUgaW4gWVYxMgorICAgICAgICBmb3JtYXQuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTA2OQorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZGVv
TGF5ZXJTaGFyZWRWYWx1ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hy
b21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlZp
ZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp+U2hhcmVkVmFsdWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6VmlkZW9MYXllckNocm9taXVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6flZpZGVvTGF5ZXJDaHJvbWl1bSk6Cisg
ICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlWVVWQ29udGVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjphbGxvY2F0ZVlVVlRleHR1cmVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlWVVWVGV4dHVy
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVSR0JBQ29u
dGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjphbGxvY2F0ZVRl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVu
dHNDb21wbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjpkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6ZHJhd1lVVik6CisgICAg
ICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OmRyYXdSR0JBKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAg
KFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp5dXZTaGFkZXJQcm9ncmFt
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpy
Z2JhU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06
OlNoYXJlZFZhbHVlczo6eXV2U2hhZGVyTWF0cml4TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6VmlkZW9MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6OnJnYmFTaGFkZXJNYXRyaXhMb2Nh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVl
czo6eXV2V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVv
TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpyZ2JhV2lkdGhTY2FsZUZhY3RvckxvY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp5
VGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6
U2hhcmVkVmFsdWVzOjp1VGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVv
TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp2VGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp5dXZBbHBoYUxvY2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVz
OjpyZ2JhVGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJv
bWl1bTo6U2hhcmVkVmFsdWVzOjpjY01hdHJpeExvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjppbml0aWFsaXplZCk6CisKIDIwMTAt
MDktMTQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBLZW5uZXRoIFJ1c3NlbGwuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggNmEyMDg4NzYy
NzkzYzVlMDgzOTM0NWE3YTdjOTk2MjIzOWI3ZWRmZC4uMjFjODViYTJlNjY3NWFhM2JkMjQ2ODc2
MWI3YjQ2YTE4ZTY0N2Q3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNzE2LDcgKzcx
Niw4IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0
cygpCiAgICAgbV9sYXllclNoYXJlZFZhbHVlcyA9IGFkb3B0UHRyKG5ldyBMYXllckNocm9taXVt
OjpTaGFyZWRWYWx1ZXMobV9jb250ZXh0LmdldCgpKSk7CiAgICAgbV9jb250ZW50TGF5ZXJTaGFy
ZWRWYWx1ZXMgPSBhZG9wdFB0cihuZXcgQ29udGVudExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVl
cyhtX2NvbnRleHQuZ2V0KCkpKTsKICAgICBtX2NhbnZhc0xheWVyU2hhcmVkVmFsdWVzID0gYWRv
cHRQdHIobmV3IENhbnZhc0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyhtX2NvbnRleHQuZ2V0
KCkpKTsKLSAgICBpZiAoIW1fbGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwgIW1f
Y29udGVudExheWVyU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpIHx8ICFtX2NhbnZhc0xheWVy
U2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpKSB7CisgICAgbV92aWRlb0xheWVyU2hhcmVkVmFs
dWVzID0gYWRvcHRQdHIobmV3IFZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKG1fY29u
dGV4dC5nZXQoKSkpOworICAgIGlmICghbV9sYXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQo
KSB8fCAhbV9jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwgIW1fY2Fu
dmFzTGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwgIW1fdmlkZW9MYXllclNoYXJl
ZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSkgewogICAgICAgICBjbGVhbnVwU2hhcmVkT2JqZWN0cygp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtNzMxLDYgKzczMiw3IEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cygpCiAgICAgbV9sYXll
clNoYXJlZFZhbHVlcy5jbGVhcigpOwogICAgIG1fY29udGVudExheWVyU2hhcmVkVmFsdWVzLmNs
ZWFyKCk7CiAgICAgbV9jYW52YXNMYXllclNoYXJlZFZhbHVlcy5jbGVhcigpOworICAgIG1fdmlk
ZW9MYXllclNoYXJlZFZhbHVlcy5jbGVhcigpOwogCiAgICAgaWYgKG1fc2Nyb2xsU2hhZGVyUHJv
Z3JhbSkgewogICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0o
bV9zY3JvbGxTaGFkZXJQcm9ncmFtKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCBjNzMzMjI4
NjI5M2Y2ZWNkOTYwZjIyODc0MjQ2MzQyZDM3OGQ0ZGU0Li5lYjdkZWEyMzAwNWJiMjMwNThlNGU4
NWM5MTRiNTZlY2MyYTJkOWJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTM5LDYgKzM5LDcg
QEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIlNrQml0bWFwLmgiCisjaW5jbHVkZSAiVmlkZW9MYXllckNocm9taXVtLmgiCiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtMTAyLDYgKzEwMyw3IEBAIHB1YmxpYzoKICAgICBj
b25zdCBMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIGxheWVyU2hhcmVkVmFsdWVzKCkgY29u
c3QgeyByZXR1cm4gbV9sYXllclNoYXJlZFZhbHVlcy5nZXQoKTsgfQogICAgIGNvbnN0IENvbnRl
bnRMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIGNvbnRlbnRMYXllclNoYXJlZFZhbHVlcygp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGVudExheWVyU2hhcmVkVmFsdWVzLmdldCgpOyB9CiAgICAg
Y29uc3QgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiBjYW52YXNMYXllclNoYXJl
ZFZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMuZ2V0KCk7
IH0KKyAgICBjb25zdCBWaWRlb0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyogdmlkZW9MYXll
clNoYXJlZFZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9MYXllclNoYXJlZFZhbHVlcy5n
ZXQoKTsgfQogCiAgICAgdm9pZCByZXNpemVPbnNjcmVlbkNvbnRlbnQoY29uc3QgSW50U2l6ZSYp
OwogCkBAIC0xNzAsNiArMTcyLDcgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8TGF5ZXJDaHJvbWl1
bTo6U2hhcmVkVmFsdWVzPiBtX2xheWVyU2hhcmVkVmFsdWVzOwogICAgIE93blB0cjxDb250ZW50
TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzPiBtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlczsK
ICAgICBPd25QdHI8Q2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzPiBtX2NhbnZhc0xh
eWVyU2hhcmVkVmFsdWVzOworICAgIE93blB0cjxWaWRlb0xheWVyQ2hyb21pdW06OlNoYXJlZFZh
bHVlcz4gbV92aWRlb0xheWVyU2hhcmVkVmFsdWVzOwogCiAgICAgT3duUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBtX2NvbnRleHQ7CiB9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9WaWRlb0ZyYW1lQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVmlkZW9GcmFtZUNocm9taXVtLmgKaW5kZXggYmJkNjc3ZTQ5MTc4ZTE1
MzQyMDBkYjIxNDZjMTM3YzZkNWM1N2RlNS4uMzRlOTIyYjRmMmFkY2QyZjhjNTc0NmY1MGRmZDAy
ZjQ2OGQwZGQzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9WaWRlb0ZyYW1lQ2hyb21pdW0uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1ZpZGVvRnJhbWVDaHJvbWl1bS5oCkBAIC0zMSwxOCArMzEsMjAgQEAKICNpZm5kZWYg
VmlkZW9GcmFtZUNocm9taXVtX2gKICNkZWZpbmUgVmlkZW9GcmFtZUNocm9taXVtX2gKIAorI2lu
Y2x1ZGUgIkludFNpemUuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBBIGNsYXNzIHRo
YXQgcmVwcmVzZW50cyBhIHZpZGVvIGZyYW1lIGluIGNocm9taXVtLgogY2xhc3MgVmlkZW9GcmFt
ZUNocm9taXVtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY01heFBsYW5l
czsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY051bVJHQlBsYW5lczsKLSAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgY1JHQlBsYW5lOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjTnVt
WVVWUGxhbmVzOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjWVBsYW5lOwotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBjVVBsYW5lOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjVlBs
YW5lOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhQbGFuZXM7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG51bVJHQlBsYW5lczsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcmdi
UGxhbmU7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bVlVVlBsYW5lczsKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgeVBsYW5lOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB1UGxh
bmU7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZQbGFuZTsKIAogICAgIC8vIFRoZXNlIGVu
dW1zIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggV2ViS2l0OjpXZWJWaWRlb0ZyYW1lLgogICAg
IGVudW0gRm9ybWF0IHsKQEAgLTc0LDYgKzc2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdW5z
aWduZWQgcGxhbmVzKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IHN0cmlkZSh1bnNpZ25l
ZCBwbGFuZSkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgY29uc3Qgdm9pZCogZGF0YSh1bnNpZ25l
ZCBwbGFuZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSByZXF1aXJlZFRl
eHR1cmVTaXplKHVuc2lnbmVkIHBsYW5lKSBjb25zdCA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMGZiMWJiNDliYTE0YTI3OTYwNmQ3MDhh
YjUzMzUzZmQ2ODhkYzA3OS4uNzE3NjFiN2JkMzAwZWVmOThjYzVjNzgyYzhjMjJkYzY5ZGY2N2Q4
OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xh
eWVyQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VmlkZW9MYXllckNocm9taXVtLmNwcApAQCAtMzYsMTUgKzM2LDEzNCBAQAogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCi0jaW5jbHVkZSAic2tpYS9leHQvcGxhdGZv
cm1fY2FudmFzLmgiCi0KLSNpZiBQTEFURk9STShTS0lBKQotI2luY2x1ZGUgIk5hdGl2ZUltYWdl
U2tpYS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKLSNlbmRpZgorI2luY2x1
ZGUgIlZpZGVvRnJhbWVDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlZpZGVvRnJhbWVQcm92aWRlci5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIFRoZXNlIHZhbHVlcyBhcmUgbWFnaWMgbnVt
YmVycyB0aGF0IGFyZSB1c2VkIGluIHRoZSB0cmFuc2Zvcm1hdGlvbgorLy8gZnJvbSBZVVYgdG8g
UkdCIGNvbG9yIHZhbHVlcy4KK2NvbnN0IGZsb2F0IFZpZGVvTGF5ZXJDaHJvbWl1bTo6eXV2MlJH
Qls5XSA9IHsKKyAgICAxLmYsIDEuZiwgMS5mLAorICAgIDAuZiwgLS4zNDRmLCAxLjc3MmYsCisg
ICAgMS40MDNmLCAtLjcxNGYsIDAuZiwKK307CisKK1ZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVk
VmFsdWVzOjpTaGFyZWRWYWx1ZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBt
X2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1feXV2U2hhZGVyUHJvZ3JhbSgwKQorICAgICwgbV9y
Z2JhU2hhZGVyUHJvZ3JhbSgwKQorICAgICwgbV95dXZTaGFkZXJNYXRyaXhMb2NhdGlvbigwKQor
ICAgICwgbV95dXZXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24oMCkKKyAgICAsIG1fcmdiYVNoYWRl
ck1hdHJpeExvY2F0aW9uKDApCisgICAgLCBtX3JnYmFXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24o
MCkKKyAgICAsIG1fY2NNYXRyaXhMb2NhdGlvbigwKQorICAgICwgbV95VGV4dHVyZUxvY2F0aW9u
KDApCisgICAgLCBtX3VUZXh0dXJlTG9jYXRpb24oMCkKKyAgICAsIG1fdlRleHR1cmVMb2NhdGlv
bigwKQorICAgICwgbV9yZ2JhVGV4dHVyZUxvY2F0aW9uKDApCisgICAgLCBtX3l1dkFscGhhTG9j
YXRpb24oMCkKKyAgICAsIG1fcmdiYUFscGhhTG9jYXRpb24oMCkKKyAgICAsIG1faW5pdGlhbGl6
ZWQoZmFsc2UpCit7CisgICAgLy8gRnJhbWUgdGV4dHVyZXMgYXJlIGFsbG9jYXRlZCBiYXNlZCBv
biBzdHJpZGUgd2lkdGgsIG5vdCB2aXNpYmxlIGZyYW1lCisgICAgLy8gd2lkdGgsIHN1Y2ggdGhh
dCB0aGVyZSBpcyBhIGd1YXJhbnRlZSB0aGF0IHRoZSBmcmFtZSByb3dzIGxpbmUgdXAKKyAgICAv
LyBwcm9wZXJseSBhbmQgYXJlIG5vdCBzaGlmdGVkIGJ5IChzdHJpZGUgLSB3aWR0aCkgcGl4ZWxz
LiBUbyBoaWRlIHRoZQorICAgIC8vICJwYWRkaW5nIiBwaXhlbHMgYmV0d2VlbiB0aGUgZWRnZSBv
ZiB0aGUgdmlzaWJsZSBmcmFtZSB3aWR0aCBhbmQgdGhlIGVuZAorICAgIC8vIG9mIHRoZSBzdHJp
ZGUsIHdlIGdpdmUgdGhlIHNoYWRlciBhIHdpZHRoU2NhbGVGYWN0b3IgKDw9MS4wKSBvZiBob3cg
bXVjaAorICAgIC8vIG9mIHRoZSB3aWR0aCBvZiB0aGUgdGV4dHVyZSBzaG91bGQgYmUgc2hvd24g
d2hlbiBkcmF3aW5nIHRoZSB0ZXh0dXJlIG9udG8KKyAgICAvLyB0aGUgdmVydGljZXMuCisgICAg
Y2hhciB2ZXJ0ZXhTaGFkZXJTdHJpbmdbXSA9CisgICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBm
bG9hdDsgICAgIFxuIgorICAgICAgICAiYXR0cmlidXRlIHZlYzQgYV9wb3NpdGlvbjsgICBcbiIK
KyAgICAgICAgImF0dHJpYnV0ZSB2ZWMyIGFfdGV4Q29vcmQ7ICAgXG4iCisgICAgICAgICJ1bmlm
b3JtIG1hdDQgbWF0cml4OyAgICAgICAgIFxuIgorICAgICAgICAidmFyeWluZyB2ZWMyIHZfdGV4
Q29vcmQ7ICAgICBcbiIKKyAgICAgICAgInVuaWZvcm0gZmxvYXQgd2lkdGhTY2FsZUZhY3Rvcjsg
IFxuIgorICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAg
InsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICIgIGdsX1Bvc2l0aW9u
ID0gbWF0cml4ICogYV9wb3NpdGlvbjsgXG4iCisgICAgICAgICIgIHZfdGV4Q29vcmQgPSB2ZWMy
KHdpZHRoU2NhbGVGYWN0b3IgKiBhX3RleENvb3JkLngsIGFfdGV4Q29vcmQueSk7IFxuIgorICAg
ICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CisKKyAgICBjaGFyIHl1dkZy
YWdtZW50U2hhZGVyU3RyaW5nW10gPQorICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInByZWNpc2lvbiBtZWRp
dW1wIGludDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ2YXJ5
aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAg
ICAgICAidW5pZm9ybSBzYW1wbGVyMkQgeV90ZXh0dXJlOyAgICAgICAgICAgICAgICAgICAgICAg
ICBcbiIKKyAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTsgICAgICAgICAgICAg
ICAgICAgICAgICAgXG4iCisgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB2X3RleHR1cmU7ICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidW5pZm9ybSBmbG9hdCBhbHBoYTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInVuaWZvcm0gbWF0
MyBjY19tYXRyaXg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ2
b2lkIG1haW4oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgor
ICAgICAgICAieyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcbiIKKyAgICAgICAgIiAgZmxvYXQgeSA9IHRleHR1cmUyRCh5X3RleHR1cmUsIHZfdGV4
Q29vcmQpLng7ICAgICAgXG4iCisgICAgICAgICIgIGZsb2F0IHUgPSB0ZXh0dXJlMkQodV90ZXh0
dXJlLCB2X3RleENvb3JkKS5yIC0gLjU7IFxuIgorICAgICAgICAiICBmbG9hdCB2ID0gdGV4dHVy
ZTJEKHZfdGV4dHVyZSwgdl90ZXhDb29yZCkuciAtIC41OyBcbiIKKyAgICAgICAgIiAgdmVjMyBy
Z2IgPSBjY19tYXRyaXggKiB2ZWMzKHksIHUsIHYpOyAgICAgICAgICAgICAgXG4iCisgICAgICAg
ICIgIGdsX0ZyYWdDb2xvciA9IHZlYzQocmdiLngsIHJnYi55LCByZ2IueiwgMS4wKSAqIGFscGhh
OyBcbiIKKyAgICAgICAgIn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXG4iOworCisgICAgY2hhciByZ2JhRnJhZ21lbnRTaGFkZXJTdHJpbmdbXSA9
CisgICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFxuIgorICAgICAgICAidmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIHJnYmFfdGV4
dHVyZTsgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ1bmlmb3JtIGZsb2F0IGFs
cGhhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidm9pZCBt
YWluKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAg
ICAgInsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XG4iCisgICAgICAgICIgIHZlYzQgdGV4Q29sb3IgPSB0ZXh0dXJlMkQocmdiYV90ZXh0dXJlLCB2
ZWMyKHZfdGV4Q29vcmQueCwgMS4wIC0gdl90ZXhDb29yZC55KSk7IFxuIgorICAgICAgICAiICBn
bF9GcmFnQ29sb3IgPSB2ZWM0KHRleENvbG9yLngsIHRleENvbG9yLnksIHRleENvbG9yLnosIHRl
eENvbG9yLncpICogYWxwaGE7IFxuIgorICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CisKKyAgICBtX3JnYmFTaGFkZXJQcm9n
cmFtID0gY3JlYXRlU2hhZGVyUHJvZ3JhbShtX2NvbnRleHQsIHZlcnRleFNoYWRlclN0cmluZywg
cmdiYUZyYWdtZW50U2hhZGVyU3RyaW5nKTsKKyAgICBpZiAoIW1fcmdiYVNoYWRlclByb2dyYW0p
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJWaWRlb0xheWVyQ2hyb21pdW06IEZhaWxlZCB0byBjcmVh
dGUgcmdiYSBzaGFkZXIgcHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
bV95dXZTaGFkZXJQcm9ncmFtID0gY3JlYXRlU2hhZGVyUHJvZ3JhbShtX2NvbnRleHQsIHZlcnRl
eFNoYWRlclN0cmluZywgeXV2RnJhZ21lbnRTaGFkZXJTdHJpbmcpOworICAgIGlmICghbV95dXZT
aGFkZXJQcm9ncmFtKSB7CisgICAgICAgIExPR19FUlJPUigiVmlkZW9MYXllckNocm9taXVtOiBG
YWlsZWQgdG8gY3JlYXRlIHl1diBzaGFkZXIgcHJvZ3JhbSIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbV95dXZTaGFkZXJNYXRyaXhMb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5p
Zm9ybUxvY2F0aW9uKG1feXV2U2hhZGVyUHJvZ3JhbSwgIm1hdHJpeCIpOworICAgIG1feXV2V2lk
dGhTY2FsZUZhY3RvckxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV95
dXZTaGFkZXJQcm9ncmFtLCAid2lkdGhTY2FsZUZhY3RvciIpOworICAgIG1feVRleHR1cmVMb2Nh
dGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1feXV2U2hhZGVyUHJvZ3JhbSwg
InlfdGV4dHVyZSIpOworICAgIG1fdVRleHR1cmVMb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5p
Zm9ybUxvY2F0aW9uKG1feXV2U2hhZGVyUHJvZ3JhbSwgInVfdGV4dHVyZSIpOworICAgIG1fdlRl
eHR1cmVMb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1feXV2U2hhZGVy
UHJvZ3JhbSwgInZfdGV4dHVyZSIpOworICAgIG1fY2NNYXRyaXhMb2NhdGlvbiA9IG1fY29udGV4
dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1feXV2U2hhZGVyUHJvZ3JhbSwgImNjX21hdHJpeCIpOwor
ICAgIG1feXV2QWxwaGFMb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1f
eXV2U2hhZGVyUHJvZ3JhbSwgImFscGhhIik7CisKKyAgICBBU1NFUlQobV95dXZTaGFkZXJNYXRy
aXhMb2NhdGlvbiAhPSAtMSk7CisgICAgQVNTRVJUKG1feXV2V2lkdGhTY2FsZUZhY3RvckxvY2F0
aW9uICE9IC0xKTsKKyAgICBBU1NFUlQobV95VGV4dHVyZUxvY2F0aW9uICE9IC0xKTsKKyAgICBB
U1NFUlQobV91VGV4dHVyZUxvY2F0aW9uICE9IC0xKTsKKyAgICBBU1NFUlQobV92VGV4dHVyZUxv
Y2F0aW9uICE9IC0xKTsKKyAgICBBU1NFUlQobV9jY01hdHJpeExvY2F0aW9uICE9IC0xKTsKKyAg
ICBBU1NFUlQobV95dXZBbHBoYUxvY2F0aW9uICE9IC0xKTsKKworICAgIG1fcmdiYVNoYWRlck1h
dHJpeExvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9yZ2JhU2hhZGVy
UHJvZ3JhbSwgIm1hdHJpeCIpOworICAgIG1fcmdiYVRleHR1cmVMb2NhdGlvbiA9IG1fY29udGV4
dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1fcmdiYVNoYWRlclByb2dyYW0sICJyZ2JhX3RleHR1cmUi
KTsKKyAgICBtX3JnYmFXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVu
aWZvcm1Mb2NhdGlvbihtX3JnYmFTaGFkZXJQcm9ncmFtLCAid2lkdGhTY2FsZUZhY3RvciIpOwor
ICAgIG1fcmdiYUFscGhhTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbiht
X3JnYmFTaGFkZXJQcm9ncmFtLCAiYWxwaGEiKTsKKworICAgIEFTU0VSVChtX3JnYmFTaGFkZXJN
YXRyaXhMb2NhdGlvbiAhPSAtMSk7CisgICAgQVNTRVJUKG1fcmdiYVRleHR1cmVMb2NhdGlvbiAh
PSAtMSk7CisgICAgQVNTRVJUKG1fcmdiYVdpZHRoU2NhbGVGYWN0b3JMb2NhdGlvbiAhPSAtMSk7
CisgICAgQVNTRVJUKG1fcmdiYUFscGhhTG9jYXRpb24gIT0gLTEpOworCisgICAgbV9pbml0aWFs
aXplZCA9IHRydWU7Cit9CisKK1ZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp+U2hh
cmVkVmFsdWVzKCkKK3sKKyAgICBpZiAobV95dXZTaGFkZXJQcm9ncmFtKQorICAgICAgICBHTEMo
bV9jb250ZXh0LCBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0obV95dXZTaGFkZXJQcm9ncmFtKSk7
CisgICAgaWYgKG1fcmdiYVNoYWRlclByb2dyYW0pCisgICAgICAgIEdMQyhtX2NvbnRleHQsIG1f
Y29udGV4dC0+ZGVsZXRlUHJvZ3JhbShtX3JnYmFTaGFkZXJQcm9ncmFtKSk7Cit9CisKIFBhc3NS
ZWZQdHI8VmlkZW9MYXllckNocm9taXVtPiBWaWRlb0xheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFw
aGljc0xheWVyQ2hyb21pdW0qIG93bmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZGVvRnJhbWVQcm92aWRlciogcHJvdmlkZXIp
CiB7CkBAIC01MiwxNCArMTcxLDI1IEBAIFBhc3NSZWZQdHI8VmlkZW9MYXllckNocm9taXVtPiBW
aWRlb0xheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qCiB9CiAKIFZp
ZGVvTGF5ZXJDaHJvbWl1bTo6VmlkZW9MYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bSogb3duZXIsIFZpZGVvRnJhbWVQcm92aWRlciogcHJvdmlkZXIpCi0gICAgOiBDb250ZW50TGF5
ZXJDaHJvbWl1bShvd25lcikKLSNpZiBQTEFURk9STShTS0lBKQotICAgICwgbV9jYW52YXMoMCkK
LSAgICAsIG1fc2tpYUNvbnRleHQoMCkKLSNlbmRpZgotICAgICwgbV9ncmFwaGljc0NvbnRleHQo
MCkKKyAgICA6IExheWVyQ2hyb21pdW0ob3duZXIpCisgICAgLCBtX3NraXBzRHJhdyh0cnVlKQor
ICAgICwgbV9mcmFtZUZvcm1hdChWaWRlb0ZyYW1lQ2hyb21pdW06OkludmFsaWQpCiAgICAgLCBt
X3Byb3ZpZGVyKHByb3ZpZGVyKQogeworICAgIGZvciAoaW50IHBsYW5lID0gMDsgcGxhbmUgPCBW
aWRlb0ZyYW1lQ2hyb21pdW06Om1heFBsYW5lczsgcGxhbmUrKykgeworICAgICAgICBtX3RleHR1
cmVzW3BsYW5lXSA9IDA7CisgICAgICAgIG1fdGV4dHVyZVNpemVzW3BsYW5lXSA9IEludFNpemUo
KTsKKyAgICAgICAgbV9mcmFtZVNpemVzW3BsYW5lXSA9IEludFNpemUoKTsKKyAgICB9Cit9CisK
K1ZpZGVvTGF5ZXJDaHJvbWl1bTo6flZpZGVvTGF5ZXJDaHJvbWl1bSgpCit7CisgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOworICAgIGZvciAo
aW50IHBsYW5lID0gMDsgcGxhbmUgPCBWaWRlb0ZyYW1lQ2hyb21pdW06Om1heFBsYW5lczsgcGxh
bmUrKykgeworICAgICAgICBpZiAobV90ZXh0dXJlc1twbGFuZV0pCisgICAgICAgICAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+ZGVsZXRlVGV4dHVyZShtX3RleHR1cmVzW3BsYW5lXSkpOworICAg
IH0KIH0KIAogdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKCkKQEAgLTcw
LDEyOSArMjAwLDE3NCBAQCB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHMo
KQogCiAgICAgQVNTRVJUKGRyYXdzQ29udGVudCgpKTsKIAotICAgIEludFJlY3QgZGlydHlSZWN0
KG1fZGlydHlSZWN0KTsKLSAgICBJbnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemU7Ci0KLSNpZiBQ
TEFURk9STShTS0lBKQotICAgIHJlcXVpcmVkVGV4dHVyZVNpemUgPSBtX2JvdW5kczsKLSAgICBJ
bnRSZWN0IGJvdW5kc1JlY3QoSW50UG9pbnQoMCwgMCksIG1fYm91bmRzKTsKLQotICAgIC8vIElm
IHRoZSB0ZXh0dXJlIG5lZWRzIHRvIGJlIHJlYWxsb2NhdGVkLCB0aGVuIHdlIG11c3QgcmVkcmF3
IHRoZSBlbnRpcmUKLSAgICAvLyBjb250ZW50cyBvZiB0aGUgbGF5ZXIuCi0gICAgaWYgKHJlcXVp
cmVkVGV4dHVyZVNpemUgIT0gbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSkKLSAgICAgICAgZGlydHlS
ZWN0ID0gYm91bmRzUmVjdDsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gQ2xpcCB0aGUgZGlydHlS
ZWN0IHRvIHRoZSBzaXplIG9mIHRoZSBsYXllciB0byBhdm9pZCBkcmF3aW5nIG91dHNpZGUKLSAg
ICAgICAgLy8gdGhlIGJvdW5kcyBvZiB0aGUgYmFja2luZyB0ZXh0dXJlLgotICAgICAgICBkaXJ0
eVJlY3QuaW50ZXJzZWN0KGJvdW5kc1JlY3QpOworICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7Cisg
ICAgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSA9IG1fcHJvdmlkZXItPmdldEN1cnJlbnRGcmFt
ZSgpOworICAgIGlmICghZnJhbWUpIHsKKyAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOworICAg
ICAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUoZnJhbWUpOworICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgaWYgKCFtX2NhbnZhcy5nZXQoKQotICAgICAgICB8fCBkaXJ0eVJlY3Qu
d2lkdGgoKSAhPSBtX2NhbnZhcy0+Z2V0RGV2aWNlKCktPndpZHRoKCkKLSAgICAgICAgfHwgZGly
dHlSZWN0LmhlaWdodCgpICE9IG1fY2FudmFzLT5nZXREZXZpY2UoKS0+aGVpZ2h0KCkpIHsKLSAg
ICAgICAgbV9jYW52YXMgPSBuZXcgc2tpYTo6UGxhdGZvcm1DYW52YXMoZGlydHlSZWN0LndpZHRo
KCksIGRpcnR5UmVjdC5oZWlnaHQoKSwgdHJ1ZSk7Ci0gICAgICAgIG1fc2tpYUNvbnRleHQgPSBu
ZXcgUGxhdGZvcm1Db250ZXh0U2tpYShtX2NhbnZhcy5nZXQoKSk7Ci0KLSAgICAgICAgLy8gVGhp
cyBpcyBuZWVkZWQgdG8gZ2V0IHRleHQgdG8gc2hvdyB1cCBjb3JyZWN0bHkuCi0gICAgICAgIC8v
IEZJWE1FOiBEb2VzIHRoaXMgdGFrZSB1cyBkb3duIGEgdmVyeSBzbG93IHRleHQgcmVuZGVyaW5n
IHBhdGg/Ci0gICAgICAgIG1fc2tpYUNvbnRleHQtPnNldERyYXdpbmdUb0ltYWdlQnVmZmVyKHRy
dWUpOwotICAgICAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG5ldyBHcmFwaGljc0NvbnRleHQocmVp
bnRlcnByZXRfY2FzdDxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCo+KG1fc2tpYUNvbnRleHQuZ2V0
KCkpKTsKKyAgICBtX2ZyYW1lRm9ybWF0ID0gZnJhbWUtPmZvcm1hdCgpOworICAgIHVuc2lnbmVk
IHRleHR1cmVGb3JtYXQgPSBkZXRlcm1pbmVUZXh0dXJlRm9ybWF0KGZyYW1lKTsKKyAgICBpZiAo
dGV4dHVyZUZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSkgeworICAg
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG90aGVyIHBhdGhzLgorICAgICAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7CisgICAgICAgIG1fcHJvdmlkZXIt
PnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAv
LyBCcmluZyB0aGUgY2FudmFzIGludG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWlu
dCByZWN0LgotICAgIG1fY2FudmFzLT50cmFuc2xhdGUoc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1k
aXJ0eVJlY3QueCgpKSwgc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1kaXJ0eVJlY3QueSgpKSk7Ci0K
LSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgdGVzdCB3aGVuIHRpbGVkIGxheWVycyBhcmUgaW1w
bGVtZW50ZWQuCi0gICAgbV9za2lwc0RyYXcgPSBmYWxzZTsKLSAgICBpZiAoIWxheWVyUmVuZGVy
ZXIoKS0+Y2hlY2tUZXh0dXJlU2l6ZShyZXF1aXJlZFRleHR1cmVTaXplKSkgeworICAgIC8vIEFs
bG9jYXRlIHRleHR1cmVzIGZvciBwbGFuZXMgaWYgdGhleSBhcmUgbm90IGFsbG9jYXRlZCBhbHJl
YWR5LCBvcgorICAgIC8vIHJlYWxsb2NhdGUgdGV4dHVyZXMgdGhhdCBhcmUgdGhlIHdyb25nIHNp
emUgZm9yIHRoZSBmcmFtZS4KKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVy
UmVuZGVyZXJDb250ZXh0KCk7CisgICAgYm9vbCB0ZXh0dXJlc0FsbG9jYXRlZCA9IGFsbG9jYXRl
VGV4dHVyZXNJZk5lZWRlZChjb250ZXh0LCBmcmFtZSwgdGV4dHVyZUZvcm1hdCk7CisgICAgaWYg
KCF0ZXh0dXJlc0FsbG9jYXRlZCkgewogICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7CisgICAg
ICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICB1bnNpZ25lZCB0ZXh0dXJlSWQgPSBtX2NvbnRlbnRzVGV4dHVyZTsKLSAg
ICBpZiAoIXRleHR1cmVJZCkKLSAgICAgICAgdGV4dHVyZUlkID0gbGF5ZXJSZW5kZXJlcigpLT5j
cmVhdGVMYXllclRleHR1cmUoKTsKLQotICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlkIG9yIHNpemUg
Y2hhbmdlZCBzaW5jZSBsYXN0IHRpbWUsIHRoZW4gd2UgbmVlZCB0byB0ZWxsIEdMCi0gICAgLy8g
dG8gcmUtYWxsb2NhdGUgYSB0ZXh0dXJlLgotICAgIGlmIChtX2NvbnRlbnRzVGV4dHVyZSAhPSB0
ZXh0dXJlSWQgfHwgcmVxdWlyZWRUZXh0dXJlU2l6ZSAhPSBtX2FsbG9jYXRlZFRleHR1cmVTaXpl
KQotICAgICAgICBjcmVhdGVUZXh0dXJlUmVjdChyZXF1aXJlZFRleHR1cmVTaXplLCBkaXJ0eVJl
Y3QsIHRleHR1cmVJZCk7Ci0gICAgZWxzZQotICAgICAgICB1cGRhdGVUZXh0dXJlUmVjdChkaXJ0
eVJlY3QsIHRleHR1cmVJZCk7Ci0jZWxzZQotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbm9uLXNr
aWEgcGF0aAotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0jZW5kaWYKKyAgICAvLyBVcGRhdGUgdGV4
dHVyZSBwbGFuZXMuCisgICAgZm9yIChpbnQgcGxhbmUgPSAwOyBwbGFuZSA8IGZyYW1lLT5wbGFu
ZXMoKTsgcGxhbmUrKykgeworICAgICAgICBBU1NFUlQoZnJhbWUtPnJlcXVpcmVkVGV4dHVyZVNp
emUocGxhbmUpID09IG1fdGV4dHVyZVNpemVzW3BsYW5lXSk7CisgICAgICAgIHVwZGF0ZVRleHR1
cmUoY29udGV4dCwgbV90ZXh0dXJlc1twbGFuZV0sIGZyYW1lLT5yZXF1aXJlZFRleHR1cmVTaXpl
KHBsYW5lKSwgdGV4dHVyZUZvcm1hdCwgZnJhbWUtPmRhdGEocGxhbmUpKTsKKyAgICB9CisKKyAg
ICBtX2RpcnR5UmVjdC5zZXRTaXplKEZsb2F0U2l6ZSgpKTsKKyAgICBtX2NvbnRlbnRzRGlydHkg
PSBmYWxzZTsKKyAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUoZnJhbWUpOwogfQogCi12
b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVJlY3QoY29uc3QgSW50U2l6ZSYg
cmVxdWlyZWRUZXh0dXJlU2l6ZSwgY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgdW5zaWduZWQg
dGV4dHVyZUlkKQordW5zaWduZWQgVmlkZW9MYXllckNocm9taXVtOjpkZXRlcm1pbmVUZXh0dXJl
Rm9ybWF0KFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUpCiB7Ci0gICAgLy8gUGFpbnQgaW50byBn
cmFwaGljcyBjb250ZXh0IGFuZCBnZXQgYml0bWFwLgotICAgIG1fb3duZXItPnBhaW50R3JhcGhp
Y3NMYXllckNvbnRlbnRzKCptX2dyYXBoaWNzQ29udGV4dCwgdXBkYXRlUmVjdCk7Ci0gICAgdm9p
ZCogcGl4ZWxzID0gMDsKLSAgICBJbnRTaXplIGJpdG1hcFNpemUgPSBJbnRTaXplKCk7Ci0jaWYg
UExBVEZPUk0oU0tJQSkKLSAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gbV9jYW52YXMtPmdl
dERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwotICAgIGNvbnN0IFNrQml0bWFwKiBza2lh
Qml0bWFwID0gJmJpdG1hcDsKLSAgICBBU1NFUlQoc2tpYUJpdG1hcCk7Ci0KLSAgICBTa0F1dG9M
b2NrUGl4ZWxzIGxvY2soKnNraWFCaXRtYXApOwotICAgIFNrQml0bWFwOjpDb25maWcgc2tpYUNv
bmZpZyA9IHNraWFCaXRtYXAtPmNvbmZpZygpOwotICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRv
IHN1cHBvcnQgbW9yZSBpbWFnZSBjb25maWd1cmF0aW9ucz8KLSAgICBpZiAoc2tpYUNvbmZpZyA9
PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpIHsKLSAgICAgICAgcGl4ZWxzID0gc2tpYUJp
dG1hcC0+Z2V0UGl4ZWxzKCk7Ci0gICAgICAgIGJpdG1hcFNpemUgPSBJbnRTaXplKHNraWFCaXRt
YXAtPndpZHRoKCksIHNraWFCaXRtYXAtPmhlaWdodCgpKTsKKyAgICBzd2l0Y2ggKGZyYW1lLT5m
b3JtYXQoKSkgeworICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpZVjEyOgorICAgICAgICBy
ZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRTsKKyAgICBjYXNlIFZpZGVvRnJhbWVD
aHJvbWl1bTo6UkdCQToKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOwog
ICAgIH0KLSNlbHNlCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCBub24tc2tpYSBwYXRoCi0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSNlbmRpZgotICAgIGlmICghcGl4ZWxzKQotICAgICAgICByZXR1
cm47CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFOworfQogCi0g
ICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOwot
ICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0
ZXh0dXJlSWQpOwotICAgIEFTU0VSVChiaXRtYXBTaXplID09IHJlcXVpcmVkVGV4dHVyZVNpemUp
OwotICAgIGNvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCByZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCks
IHJlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgcGl4ZWxzKTsKK2Jvb2wgVmlkZW9M
YXllckNocm9taXVtOjphbGxvY2F0ZVRleHR1cmVzSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQsIFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUsIHVuc2lnbmVkIHRleHR1cmVGb3Jt
YXQpCit7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIEFTU0VSVChmcmFtZSk7CisKKyAgICBm
b3IgKGludCBwbGFuZSA9IDA7IHBsYW5lIDwgZnJhbWUtPnBsYW5lcygpOyBwbGFuZSsrKSB7Cisg
ICAgICAgIEludFNpemUgcGxhbmVUZXh0dXJlU2l6ZSA9IGZyYW1lLT5yZXF1aXJlZFRleHR1cmVT
aXplKHBsYW5lKTsKIAotICAgIG1fY29udGVudHNUZXh0dXJlID0gdGV4dHVyZUlkOwotICAgIG1f
YWxsb2NhdGVkVGV4dHVyZVNpemUgPSByZXF1aXJlZFRleHR1cmVTaXplOworICAgICAgICAvLyBJ
ZiB0aGUgcmVuZGVyZXIgY2Fubm90IGhhbmRsZSB0aGlzIGxhcmdlIG9mIGEgdGV4dHVyZSwgcmV0
dXJuIGZhbHNlLgorICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgdGVzdCB3aGVuIHRpbGVk
IGxheWVycyBhcmUgaW1wbGVtZW50ZWQuCisgICAgICAgIGlmICghbGF5ZXJSZW5kZXJlcigpLT5j
aGVja1RleHR1cmVTaXplKHBsYW5lVGV4dHVyZVNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgdXBkYXRlQ29tcGxldGVkKCk7CisgICAgICAgIGlmICghbV90ZXh0dXJlc1tw
bGFuZV0pCisgICAgICAgICAgICBtX3RleHR1cmVzW3BsYW5lXSA9IGxheWVyUmVuZGVyZXIoKS0+
Y3JlYXRlTGF5ZXJUZXh0dXJlKCk7CisKKyAgICAgICAgaWYgKCFwbGFuZVRleHR1cmVTaXplLmlz
WmVybygpICYmIHBsYW5lVGV4dHVyZVNpemUgIT0gbV90ZXh0dXJlU2l6ZXNbcGxhbmVdKSB7Cisg
ICAgICAgICAgICBhbGxvY2F0ZVRleHR1cmUoY29udGV4dCwgbV90ZXh0dXJlc1twbGFuZV0sIHBs
YW5lVGV4dHVyZVNpemUsIHRleHR1cmVGb3JtYXQpOworICAgICAgICAgICAgbV90ZXh0dXJlU2l6
ZXNbcGxhbmVdID0gcGxhbmVUZXh0dXJlU2l6ZTsKKyAgICAgICAgICAgIG1fZnJhbWVTaXplc1tw
bGFuZV0gPSBJbnRTaXplKGZyYW1lLT53aWR0aCgpLCBmcmFtZS0+aGVpZ2h0KCkpOworICAgICAg
ICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1
bTo6YWxsb2NhdGVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCB1bnNpZ25lZCB0
ZXh0dXJlSWQsIGNvbnN0IEludFNpemUmIGRpbWVuc2lvbnMsIHVuc2lnbmVkIHRleHR1cmVGb3Jt
YXQpCit7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgdGV4dHVyZUZv
cm1hdCwgZGltZW5zaW9ucy53aWR0aCgpLCBkaW1lbnNpb25zLmhlaWdodCgpLCAwLCB0ZXh0dXJl
Rm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCkpOwogfQogCi12b2lk
IFZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZVJlY3QoY29uc3QgSW50UmVjdCYgdXBk
YXRlUmVjdCwgdW5zaWduZWQgdGV4dHVyZUlkKQordm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVw
ZGF0ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHRleHR1cmVJ
ZCwgY29uc3QgSW50U2l6ZSYgZGltZW5zaW9ucywgdW5zaWduZWQgZm9ybWF0LCBjb25zdCB2b2lk
KiBkYXRhKQogewotI2lmIFBMQVRGT1JNKFNLSUEpCi0gICAgY29uc3QgU2tCaXRtYXAmIGJpdG1h
cCA9IG1fY2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKHRydWUpOwotICAgIFNrQml0
bWFwKiBza2lhQml0bWFwID0gY29uc3RfY2FzdDxTa0JpdG1hcCo+KCZiaXRtYXApOwotICAgIEFT
U0VSVChza2lhQml0bWFwKTsKLQotICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jaygqc2tpYUJpdG1h
cCk7Ci0gICAgU2tCaXRtYXA6OkNvbmZpZyBza2lhQ29uZmlnID0gc2tpYUJpdG1hcC0+Y29uZmln
KCk7Ci0KLSAgICBpZiAoc2tpYUNvbmZpZyA9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcp
IHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29u
dGV4dCgpOwotICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgdGV4dHVyZUlkKTsKLSAgICAgICAgQVNTRVJUKGNvbnRleHQtPnN1cHBvcnRz
TWFwU3ViQ0hST01JVU0oKSk7Ci0gICAgICAgIHZvaWQqIG1lbSA9IGNvbnRleHQtPm1hcFRleFN1
YkltYWdlMkRDSFJPTUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgdXBkYXRl
UmVjdC54KCksIHVwZGF0ZVJlY3QueSgpLCB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3Qu
aGVpZ2h0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSwgR3JhcGhpY3NDb250ZXh0M0Q6OldSSVRFX09OTFkpOwotICAgICAgICBza2lh
Qml0bWFwLT5zZXRQaXhlbHMobWVtKTsKLSAgICAgICAgbV9vd25lci0+cGFpbnRHcmFwaGljc0xh
eWVyQ29udGVudHMoKm1fZ3JhcGhpY3NDb250ZXh0LCB1cGRhdGVSZWN0KTsKLSAgICAgICAgY29u
dGV4dC0+dW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0obWVtKTsKKyAgICBBU1NFUlQoY29udGV4
dCk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpKTsKKyAgICB2b2lkKiBtZW0gPSBjb250ZXh0LT5t
YXBUZXhTdWJJbWFnZTJEQ0hST01JVU0oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAs
IDAsIDAsIGRpbWVuc2lvbnMud2lkdGgoKSwgZGltZW5zaW9ucy5oZWlnaHQoKSwgZm9ybWF0LCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgR3JhcGhpY3NDb250ZXh0M0Q6OldSSVRF
X09OTFkpOworICAgIGlmIChtZW0pIHsKKyAgICAgICAgbWVtY3B5KG1lbSwgZGF0YSwgZGltZW5z
aW9ucy53aWR0aCgpICogZGltZW5zaW9ucy5oZWlnaHQoKSk7CisgICAgICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT51bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShtZW0pKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgc29tZSBzb3J0IG9mIGNvZGUgdG8g
aGFuZGxlIHRoZSBjYXNlIHdoZW4KKyAgICAgICAgLy8gbWFwVGV4U3ViSW1hZ2UyRCBmYWlscy4K
KyAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOwogICAgIH0KK30KKwordm9pZCBWaWRlb0xheWVy
Q2hyb21pdW06OmRyYXcoKQoreworICAgIGlmIChtX3NraXBzRHJhdykKKyAgICAgICAgcmV0dXJu
OworCisgICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CisgICAgY29uc3QgVmlkZW9MYXllckNo
cm9taXVtOjpTaGFyZWRWYWx1ZXMqIHN2ID0gbGF5ZXJSZW5kZXJlcigpLT52aWRlb0xheWVyU2hh
cmVkVmFsdWVzKCk7CisgICAgQVNTRVJUKHN2ICYmIHN2LT5pbml0aWFsaXplZCgpKTsKIAotICAg
IHVwZGF0ZUNvbXBsZXRlZCgpOwotI2Vsc2UKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IG5vbi1z
a2lhIHBhdGgKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotI2VuZGlmCisgICAgc3dpdGNoIChtX2Zy
YW1lRm9ybWF0KSB7CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OllWMTI6CisgICAgICAg
IGRyYXdZVVYoc3YpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1
bTo6UkdCQToKKyAgICAgICAgZHJhd1JHQkEoc3YpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG90aGVyIHBhdGhzLgorICAgICAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKLXZvaWQgVmlkZW9M
YXllckNocm9taXVtOjp1cGRhdGVDb21wbGV0ZWQoKQordm9pZCBWaWRlb0xheWVyQ2hyb21pdW06
OmRyYXdZVVYoY29uc3QgU2hhcmVkVmFsdWVzKiBzdikKIHsKLSAgICBtX2RpcnR5UmVjdC5zZXRT
aXplKEZsb2F0U2l6ZSgpKTsKLSAgICBtX2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKKyAgICBHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7CisgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUxKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6eVBsYW5l
XSkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFMikpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hy
b21pdW06OnVQbGFuZV0pKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTMpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZXNb
VmlkZW9GcmFtZUNocm9taXVtOjp2UGxhbmVdKSk7CisKKyAgICBsYXllclJlbmRlcmVyKCktPnVz
ZVNoYWRlcihzdi0+eXV2U2hhZGVyUHJvZ3JhbSgpKTsKKyAgICB1bnNpZ25lZCBmcmFtZVdpZHRo
ID0gbV9mcmFtZVNpemVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6eVBsYW5lXS53aWR0aCgpOworICAg
IHVuc2lnbmVkIHRleHR1cmVXaWR0aCA9IG1fdGV4dHVyZVNpemVzW1ZpZGVvRnJhbWVDaHJvbWl1
bTo6eVBsYW5lXS53aWR0aCgpOworICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNf
Y2FzdDxmbG9hdD4oZnJhbWVXaWR0aCkgLyB0ZXh0dXJlV2lkdGg7CisgICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPnVuaWZvcm0xZihzdi0+eXV2V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKCksIHdp
ZHRoU2NhbGVGYWN0b3IpKTsKKworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWko
c3YtPnlUZXh0dXJlTG9jYXRpb24oKSwgMSkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51
bmlmb3JtMWkoc3YtPnVUZXh0dXJlTG9jYXRpb24oKSwgMikpOworICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT51bmlmb3JtMWkoc3YtPnZUZXh0dXJlTG9jYXRpb24oKSwgMykpOworCisgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYoc3YtPmNjTWF0cml4TG9jYXRpb24o
KSwgMCwgY29uc3RfY2FzdDxmbG9hdCo+KHl1djJSR0IpLCAxKSk7CisKKyAgICBkcmF3VGV4dHVy
ZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCBkcmF3
VHJhbnNmb3JtKCksCisgICAgICAgICAgICAgICAgICAgICBib3VuZHMoKS53aWR0aCgpLCBib3Vu
ZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwKKyAgICAgICAgICAgICAgICAgICAgIHN2LT55
dXZTaGFkZXJNYXRyaXhMb2NhdGlvbigpLCBzdi0+eXV2QWxwaGFMb2NhdGlvbigpKTsKKworICAg
IC8vIFJlc2V0IGFjdGl2ZSB0ZXh0dXJlIGJhY2sgdG8gdGV4dHVyZSAwLgorICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkp
OwogfQogCit2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6ZHJhd1JHQkEoY29uc3QgU2hhcmVkVmFs
dWVzKiBzdikKK3sKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVy
ZXJDb250ZXh0KCk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJp
bmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVzW1ZpZGVv
RnJhbWVDaHJvbWl1bTo6cmdiUGxhbmVdKSk7CisKKyAgICBsYXllclJlbmRlcmVyKCktPnVzZVNo
YWRlcihzdi0+cmdiYVNoYWRlclByb2dyYW0oKSk7CisgICAgdW5zaWduZWQgZnJhbWVXaWR0aCA9
IG1fZnJhbWVTaXplc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnJnYlBsYW5lXS53aWR0aCgpOworICAg
IHVuc2lnbmVkIHRleHR1cmVXaWR0aCA9IG1fdGV4dHVyZVNpemVzW1ZpZGVvRnJhbWVDaHJvbWl1
bTo6cmdiUGxhbmVdLndpZHRoKCk7CisgICAgZmxvYXQgd2lkdGhTY2FsZUZhY3RvciA9IHN0YXRp
Y19jYXN0PGZsb2F0PihmcmFtZVdpZHRoKSAvIHRleHR1cmVXaWR0aDsKKyAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+dW5pZm9ybTFmKHN2LT5yZ2JhV2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKCks
IHdpZHRoU2NhbGVGYWN0b3IpKTsKKworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3Jt
MWkoc3YtPnJnYmFUZXh0dXJlTG9jYXRpb24oKSwgMCkpOworCisgICAgZHJhd1RleHR1cmVkUXVh
ZChjb250ZXh0LCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwgZHJhd1RyYW5z
Zm9ybSgpLAorICAgICAgICAgICAgICAgICAgICAgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCku
aGVpZ2h0KCksIGRyYXdPcGFjaXR5KCksCisgICAgICAgICAgICAgICAgICAgICBzdi0+cmdiYVNo
YWRlck1hdHJpeExvY2F0aW9uKCksIHN2LT5yZ2JhQWxwaGFMb2NhdGlvbigpKTsKIH0KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRl
b0xheWVyQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlk
ZW9MYXllckNocm9taXVtLmgKaW5kZXggMzUwN2NiMjBjZjE3ZTc5MzMxMmQ2ZWViM2U5NTNiN2Y4
Y2ViZjI1OS4uMGM3YmY3MzUyZjZkMWJiMDAzZTM1OTRhZTg2YmM2ZmNjMDlmYzIxZSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21p
dW0uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJD
aHJvbWl1bS5oCkBAIC0zNCwzMSArMzQsNzYgQEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKIAotI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAi
TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlZpZGVvRnJhbWVQcm92aWRlci5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIC8vIEEgTGF5ZXIgdGhhdCBjb250YWlucyBhIFZpZGVvIGVsZW1l
bnQuCi1jbGFzcyBWaWRlb0xheWVyQ2hyb21pdW0gOiBwdWJsaWMgQ29udGVudExheWVyQ2hyb21p
dW0geworY2xhc3MgVmlkZW9MYXllckNocm9taXVtIDogcHVibGljIExheWVyQ2hyb21pdW0gewog
cHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFZpZGVvTGF5ZXJDaHJvbWl1bT4gY3JlYXRl
KEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIgPSAwLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZGVvRnJhbWVQcm92aWRlciogPSAwKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1
YWwgflZpZGVvTGF5ZXJDaHJvbWl1bSgpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50
cygpOworICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSB7IHJldHVybiB0cnVlOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGRyYXcoKTsKKworICAgIGNsYXNzIFNoYXJlZFZhbHVlcyB7CisgICAg
cHVibGljOgorICAgICAgICBleHBsaWNpdCBTaGFyZWRWYWx1ZXMoR3JhcGhpY3NDb250ZXh0M0Qq
KTsKKyAgICAgICAgflNoYXJlZFZhbHVlcygpOworICAgICAgICB1bnNpZ25lZCB5dXZTaGFkZXJQ
cm9ncmFtKCkgY29uc3QgeyByZXR1cm4gbV95dXZTaGFkZXJQcm9ncmFtOyB9CisgICAgICAgIHVu
c2lnbmVkIHJnYmFTaGFkZXJQcm9ncmFtKCkgY29uc3QgeyByZXR1cm4gbV9yZ2JhU2hhZGVyUHJv
Z3JhbTsgfQorICAgICAgICBpbnQgeXV2U2hhZGVyTWF0cml4TG9jYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX3l1dlNoYWRlck1hdHJpeExvY2F0aW9uOyB9CisgICAgICAgIGludCByZ2JhU2hhZGVy
TWF0cml4TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JnYmFTaGFkZXJNYXRyaXhMb2NhdGlv
bjsgfQorICAgICAgICBpbnQgeXV2V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV95dXZXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb247IH0KKyAgICAgICAgaW50IHJnYmFX
aWR0aFNjYWxlRmFjdG9yTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JnYmFXaWR0aFNjYWxl
RmFjdG9yTG9jYXRpb247IH0KKyAgICAgICAgaW50IHlUZXh0dXJlTG9jYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3lUZXh0dXJlTG9jYXRpb247IH0KKyAgICAgICAgaW50IHVUZXh0dXJlTG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3VUZXh0dXJlTG9jYXRpb247IH0KKyAgICAgICAgaW50IHZU
ZXh0dXJlTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3ZUZXh0dXJlTG9jYXRpb247IH0KKyAg
ICAgICAgaW50IHl1dkFscGhhTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3l1dkFscGhhTG9j
YXRpb247IH0KKyAgICAgICAgaW50IHJnYmFBbHBoYUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9yZ2JhQWxwaGFMb2NhdGlvbjsgfQorICAgICAgICBpbnQgcmdiYVRleHR1cmVMb2NhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fcmdiYVRleHR1cmVMb2NhdGlvbjsgfQorICAgICAgICBpbnQgY2NN
YXRyaXhMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY2NNYXRyaXhMb2NhdGlvbjsgfQorICAg
ICAgICBib29sIGluaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsaXplZDsgfTsK
KyAgICBwcml2YXRlOgorICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OworICAg
ICAgICB1bnNpZ25lZCBtX3l1dlNoYWRlclByb2dyYW07CisgICAgICAgIHVuc2lnbmVkIG1fcmdi
YVNoYWRlclByb2dyYW07CisgICAgICAgIGludCBtX3l1dlNoYWRlck1hdHJpeExvY2F0aW9uOwor
ICAgICAgICBpbnQgbV9yZ2JhU2hhZGVyTWF0cml4TG9jYXRpb247CisgICAgICAgIGludCBtX3l1
dldpZHRoU2NhbGVGYWN0b3JMb2NhdGlvbjsKKyAgICAgICAgaW50IG1fcmdiYVdpZHRoU2NhbGVG
YWN0b3JMb2NhdGlvbjsKKyAgICAgICAgaW50IG1feVRleHR1cmVMb2NhdGlvbjsKKyAgICAgICAg
aW50IG1fdVRleHR1cmVMb2NhdGlvbjsKKyAgICAgICAgaW50IG1fdlRleHR1cmVMb2NhdGlvbjsK
KyAgICAgICAgaW50IG1fcmdiYVRleHR1cmVMb2NhdGlvbjsKKyAgICAgICAgaW50IG1fY2NNYXRy
aXhMb2NhdGlvbjsKKyAgICAgICAgaW50IG1feXV2QWxwaGFMb2NhdGlvbjsKKyAgICAgICAgaW50
IG1fcmdiYUFscGhhTG9jYXRpb247CisgICAgICAgIGJvb2wgbV9pbml0aWFsaXplZDsKKyAgICB9
OwogCiBwcml2YXRlOgogICAgIFZpZGVvTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21p
dW0qIG93bmVyLCBWaWRlb0ZyYW1lUHJvdmlkZXIqKTsKLSAgICB2b2lkIGNyZWF0ZVRleHR1cmVS
ZWN0KGNvbnN0IEludFNpemUmIHJlcXVpcmVkVGV4dHVyZVNpemUsIGNvbnN0IEludFJlY3QmIHVw
ZGF0ZVJlY3QsIHVuc2lnbmVkIHRleHR1cmVJZCk7Ci0gICAgdm9pZCB1cGRhdGVUZXh0dXJlUmVj
dChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCB1bnNpZ25lZCB0ZXh0dXJlSWQpOwotICAgIHZv
aWQgdXBkYXRlQ29tcGxldGVkKCk7CisgICAgc3RhdGljIHVuc2lnbmVkIGRldGVybWluZVRleHR1
cmVGb3JtYXQoVmlkZW9GcmFtZUNocm9taXVtKik7CisgICAgYm9vbCBhbGxvY2F0ZVRleHR1cmVz
SWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0M0QqLCBWaWRlb0ZyYW1lQ2hyb21pdW0qLCB1bnNpZ25l
ZCB0ZXh0dXJlRm9ybWF0KTsKKyAgICB2b2lkIHVwZGF0ZVlVVkNvbnRlbnRzKEdyYXBoaWNzQ29u
dGV4dDNEKiwgY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKik7CisgICAgdm9pZCB1cGRhdGVSR0JB
Q29udGVudHMoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qKTsK
KyAgICB2b2lkIGFsbG9jYXRlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkIHRl
eHR1cmVJZCwgY29uc3QgSW50U2l6ZSYgZGltZW5zaW9ucywgdW5zaWduZWQgdGV4dHVyZUZvcm1h
dCk7CisgICAgdm9pZCB1cGRhdGVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgdW5zaWduZWQg
dGV4dHVyZUlkLCBjb25zdCBJbnRTaXplJiBkaW1lbnNpb25zLCB1bnNpZ25lZCB0ZXh0dXJlRm9y
bWF0LCBjb25zdCB2b2lkKiBkYXRhKTsKKyAgICB2b2lkIGRyYXdZVVYoY29uc3QgU2hhcmVkVmFs
dWVzKik7CisgICAgdm9pZCBkcmF3UkdCQShjb25zdCBTaGFyZWRWYWx1ZXMqKTsKIAotI2lmIFBM
QVRGT1JNKFNLSUEpCi0gICAgT3duUHRyPHNraWE6OlBsYXRmb3JtQ2FudmFzPiBtX2NhbnZhczsK
LSAgICBPd25QdHI8UGxhdGZvcm1Db250ZXh0U2tpYT4gbV9za2lhQ29udGV4dDsKLSNlbmRpZgot
ICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IG1fZ3JhcGhpY3NDb250ZXh0OworICAgIHN0YXRp
YyBjb25zdCBmbG9hdCB5dXYyUkdCWzldOworCisgICAgVmlkZW9GcmFtZUNocm9taXVtOjpGb3Jt
YXQgbV9mcmFtZUZvcm1hdDsKICAgICBPd25QdHI8VmlkZW9GcmFtZVByb3ZpZGVyPiBtX3Byb3Zp
ZGVyOworICAgIGJvb2wgbV9za2lwc0RyYXc7CisgICAgdW5zaWduZWQgbV90ZXh0dXJlc1szXTsK
KyAgICBJbnRTaXplIG1fdGV4dHVyZVNpemVzWzNdOworICAgIEludFNpemUgbV9mcmFtZVNpemVz
WzNdOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZTUyZTNiNzYzOGE0NGVkYTdjZDdhZjkyNDcx
ZGIxN2I2YTM0NmQ2My4uZjllZjg0MTJhOTYzMzFhMWI3MGYzYWIwMmIxMTM3MmM2ZjYwY2Q5NCAx
MDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDktMTMgIFZpY3RvcmlhIEtpcnN0
ICA8dnJrQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgRml4aW5nIGNvbnN0YW50cyBpbiBWaWRlb0ZyYW1lQ2hyb21pdW1JbXBsIHNv
IHRoYXQgaXQgb3ZlcmxvYWRzIHRoZQorICAgICAgICBWaWRlb0ZyYW1lQ2hyb21pdW0gY29uc3Qg
ZGVjbGFyYXRpb25zLiBBbHNvIGFkZGluZyBsb2dpYyBzdWNoIHRoYXQgYQorICAgICAgICBWaWRl
b0ZyYW1lQ2hyb21pdW0gdW5kZXJzdGFuZHMgd2hhdCBzaXplIGl0cyB0ZXh0dXJlIHNob3VsZCBi
ZSBiYXNlZAorICAgICAgICBvbiBmcmFtZSBmb3JtYXQuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTA2OQorCisgICAgICAgICogc3JjL1ZpZGVvRnJh
bWVDaHJvbWl1bUltcGwuY3BwOgorCiAyMDEwLTA5LTI2ICBNaWhhaSBQYXJwYXJpdGEgIDxtaWhh
aXBAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1ZpZGVvRnJhbWVDaHJvbWl1bUltcGwuY3BwIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9WaWRlb0ZyYW1lQ2hyb21pdW1JbXBsLmNwcAppbmRleCAyYjk4
MzIwYTNjZTA1NzY1NWI2N2NkMGE0Yzc4YjFiZmI5YzFlODYzLi42MGU3NWI4NjZjMDk3MjE4NDJl
NTU0NmI4YmRjMTUxMWI3MTQ2NWYxIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1Zp
ZGVvRnJhbWVDaHJvbWl1bUltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvVmlkZW9G
cmFtZUNocm9taXVtSW1wbC5jcHAKQEAgLTM2LDE1ICszNiwxNSBAQAogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAotbmFtZXNwYWNlIFdlYktpdCB7Citjb25zdCB1bnNpZ25lZCBWaWRlb0Zy
YW1lQ2hyb21pdW06Om1heFBsYW5lcyA9IDM7Citjb25zdCB1bnNpZ25lZCBWaWRlb0ZyYW1lQ2hy
b21pdW06Om51bVJHQlBsYW5lcyA9IDE7Citjb25zdCB1bnNpZ25lZCBWaWRlb0ZyYW1lQ2hyb21p
dW06OnJnYlBsYW5lID0gMDsKK2NvbnN0IHVuc2lnbmVkIFZpZGVvRnJhbWVDaHJvbWl1bTo6bnVt
WVVWUGxhbmVzID0gMzsKK2NvbnN0IHVuc2lnbmVkIFZpZGVvRnJhbWVDaHJvbWl1bTo6eVBsYW5l
ID0gMDsKK2NvbnN0IHVuc2lnbmVkIFZpZGVvRnJhbWVDaHJvbWl1bTo6dVBsYW5lID0gMTsKK2Nv
bnN0IHVuc2lnbmVkIFZpZGVvRnJhbWVDaHJvbWl1bTo6dlBsYW5lID0gMjsKIAotY29uc3QgdW5z
aWduZWQgY01heFBsYW5lcyA9IDM7Ci1jb25zdCB1bnNpZ25lZCBjTnVtUkdCUGxhbmVzID0gMTsK
LWNvbnN0IHVuc2lnbmVkIGNSR0JQbGFuZSA9IDA7Ci1jb25zdCB1bnNpZ25lZCBjTnVtWVVWUGxh
bmVzID0gMzsKLWNvbnN0IHVuc2lnbmVkIGNZUGxhbmUgPSAwOwotY29uc3QgdW5zaWduZWQgY1VQ
bGFuZSA9IDE7Ci1jb25zdCB1bnNpZ25lZCBjVlBsYW5lID0gMjsKK25hbWVzcGFjZSBXZWJLaXQg
ewogCiBXZWJWaWRlb0ZyYW1lKiBWaWRlb0ZyYW1lQ2hyb21pdW1JbXBsOjp0b1dlYlZpZGVvRnJh
bWUoVmlkZW9GcmFtZUNocm9taXVtKiB2aWRlb0ZyYW1lKQogewpAQCAtMTA4LDQgKzEwOCwyMiBA
QCBjb25zdCB2b2lkKiBWaWRlb0ZyYW1lQ2hyb21pdW1JbXBsOjpkYXRhKHVuc2lnbmVkIHBsYW5l
KSBjb25zdAogICAgIHJldHVybiAwOwogfQogCitjb25zdCBJbnRTaXplIFZpZGVvRnJhbWVDaHJv
bWl1bUltcGw6OnJlcXVpcmVkVGV4dHVyZVNpemUodW5zaWduZWQgcGxhbmUpIGNvbnN0Cit7Cisg
ICAgc3dpdGNoIChmb3JtYXQoKSkgeworICAgIGNhc2UgUkdCQToKKyAgICAgICAgcmV0dXJuIElu
dFNpemUoc3RyaWRlKHBsYW5lKSwgaGVpZ2h0KCkpOworICAgIGNhc2UgWVYxMjoKKyAgICAgICAg
c3dpdGNoIChwbGFuZSkgeworICAgICAgICBjYXNlIHlQbGFuZToKKyAgICAgICAgICAgIHJldHVy
biBJbnRTaXplKHN0cmlkZShwbGFuZSksIGhlaWdodCgpKTsKKyAgICAgICAgY2FzZSB1UGxhbmU6
CisgICAgICAgICAgICByZXR1cm4gSW50U2l6ZShzdHJpZGUocGxhbmUpLCBoZWlnaHQoKSAvIDIp
OworICAgICAgICBjYXNlIHZQbGFuZToKKyAgICAgICAgICAgIHJldHVybiBJbnRTaXplKHN0cmlk
ZShwbGFuZSksIGhlaWdodCgpIC8gMik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIElu
dFNpemUoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1ZpZGVvRnJhbWVDaHJvbWl1bUltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvVmlkZW9GcmFtZUNocm9taXVtSW1wbC5oCmluZGV4IDNhZDQyNGM0NmE4NzZhMTkzOTQ2MGJi
ZDQ5OWMxZDc4NzEwNWVjNzMuLjA0MmNkN2U3MTYzNTZiYWZiNDViZmM3NDU5Mjk1ZjM4ZGI3OTNi
YmQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvVmlkZW9GcmFtZUNocm9taXVtSW1w
bC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvVmlkZW9GcmFtZUNocm9taXVtSW1wbC5oCkBA
IC01Niw2ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHBsYW5lcygpIGNv
bnN0OwogICAgIHZpcnR1YWwgaW50IHN0cmlkZSh1bnNpZ25lZCBwbGFuZSkgY29uc3Q7CiAgICAg
dmlydHVhbCBjb25zdCB2b2lkKiBkYXRhKHVuc2lnbmVkIHBsYW5lKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGNvbnN0IEludFNpemUgcmVxdWlyZWRUZXh0dXJlU2l6ZSh1bnNpZ25lZCBwbGFuZSkgY29u
c3Q7CiAKIHByaXZhdGU6CiAgICAgV2ViVmlkZW9GcmFtZSogbV93ZWJWaWRlb0ZyYW1lOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>