<?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>112359</bug_id>
          
          <creation_ts>2013-03-14 10:20:08 -0700</creation_ts>
          <short_desc>Check WEBGL_draw_buffers requirements before exposing the extension</short_desc>
          <delta_ts>2013-03-22 17:47:47 -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>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zhenyao Mo">zmo</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>bajones</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gman</cc>
    
    <cc>kbr</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>855289</commentid>
    <comment_count>0</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2013-03-14 10:20:08 -0700</bug_when>
    <thetext>A few WebGL requirements on top of EXT_draw_buffers

1) supports a minimum of 4 color attachments
2) MAX_COLOR_ATTACHMENTS &gt;= MAX_DRAW_BUFFERS
3) check attaching n consecutive color attachments starting at COLOR_ATTACHMENT0_WEBGL returns FRAMEBUFFER_COMPLETE
    check attaching n consecutive color attachments starting at COLOR_ATTACHMENT0_WEBGL plus DEPTH returns FRAMEBUFFER_COMPLETE
    check attaching n consecutive color attachments starting at COLOR_ATTACHMENT0_WEBGL plus DEPTH_STENCIL returns FRAMEBUFFER_COMPLETE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857338</commentid>
    <comment_count>1</comment_count>
      <attachid>193613</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2013-03-18 11:26:28 -0700</bug_when>
    <thetext>Created attachment 193613
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857341</commentid>
    <comment_count>2</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2013-03-18 11:27:44 -0700</bug_when>
    <thetext>kbr: please have a look.

I will update the names from EXT_draw_buffers to WEBKIT_WEBGL_draw_buffers in the next patch, together with the enum name change (from _EXT postfix to _WEBGL postfix).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857508</commentid>
    <comment_count>3</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2013-03-18 13:55:52 -0700</bug_when>
    <thetext>Gregg/Brandon, would it be possible for you to do an unofficial review of this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857656</commentid>
    <comment_count>4</comment_count>
      <attachid>193613</attachid>
    <who name="Brandon Jones">bajones</who>
    <bug_when>2013-03-18 15:53:38 -0700</bug_when>
    <thetext>Comment on attachment 193613
Patch

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

&gt; Source/WebCore/html/canvas/EXTDrawBuffers.cpp:107
&gt; +    static bool ok = true;

Wouldn&apos;t it be easier to initialize ok to false, and set it to true once we&apos;ve determined full support? That would remove the necessity for all the &quot;ok = false&quot; below.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857662</commentid>
    <comment_count>5</comment_count>
    <who name="Brandon Jones">bajones</who>
    <bug_when>2013-03-18 15:55:12 -0700</bug_when>
    <thetext>Other than the above nit, which you may want to ignore, looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857666</commentid>
    <comment_count>6</comment_count>
      <attachid>193613</attachid>
    <who name="Gregg Tavares">gman</who>
    <bug_when>2013-03-18 15:57:42 -0700</bug_when>
    <thetext>Comment on attachment 193613
Patch

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

&gt; Source/WebCore/html/canvas/EXTDrawBuffers.cpp:73
&gt; +    if (!n)

this won&apos;t work. If you call drawBuffersEXT([]) it should go into the driver which should set all of them to GL_NONE

&gt; Source/WebCore/html/canvas/EXTDrawBuffers.cpp:106
&gt; +    static bool computed = false;

these can&apos;t be static can it? If the context is lost, when the context is restored this will be stale

&gt; Source/WebCore/html/canvas/EXTDrawBuffers.cpp:123
&gt; +    GC3Dint texBinding = 0;

Why not just ask the WebGLRenderingContext to restore these when you&apos;re done rather than query them? I&apos;m worried that querying is slow.

&gt; Source/WebCore/html/canvas/EXTDrawBuffers.cpp:153
&gt; +        if (context-&gt;checkFramebufferStatus(GraphicsContext3D::FRAMEBUFFER) != GraphicsContext3D::FRAMEBUFFER_COMPLETE) {

Each call to checkFramebufferStatus is really slow. Maybe in another CL but we should probably have the command buffer do the same tests and add something like &quot;GL_CHROMIUM_draw_buffers_webgl_compatible&quot; so the WebKit code and skip these checks. Kind of like we check GL_CHROMIUM_resource_safe</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857779</commentid>
    <comment_count>7</comment_count>
      <attachid>193613</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2013-03-18 17:24:53 -0700</bug_when>
    <thetext>Comment on attachment 193613
Patch

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

&gt;&gt; Source/WebCore/html/canvas/EXTDrawBuffers.cpp:73
&gt;&gt; +    if (!n)
&gt; 
&gt; this won&apos;t work. If you call drawBuffersEXT([]) it should go into the driver which should set all of them to GL_NONE

Fixed.

&gt;&gt; Source/WebCore/html/canvas/EXTDrawBuffers.cpp:106
&gt;&gt; +    static bool computed = false;
&gt; 
&gt; these can&apos;t be static can it? If the context is lost, when the context is restored this will be stale

Fixed.  It will be per context lifetime, handing the caching in WebGLRenderingContext.

&gt;&gt; Source/WebCore/html/canvas/EXTDrawBuffers.cpp:107
&gt;&gt; +    static bool ok = true;
&gt; 
&gt; Wouldn&apos;t it be easier to initialize ok to false, and set it to true once we&apos;ve determined full support? That would remove the necessity for all the &quot;ok = false&quot; below.

It has to be the other way, because we want to quit when we encounters an error.  If OK init to true, then we need another way to track whether an error happened inside the for loop.

&gt;&gt; Source/WebCore/html/canvas/EXTDrawBuffers.cpp:123
&gt;&gt; +    GC3Dint texBinding = 0;
&gt; 
&gt; Why not just ask the WebGLRenderingContext to restore these when you&apos;re done rather than query them? I&apos;m worried that querying is slow.

Done

&gt;&gt; Source/WebCore/html/canvas/EXTDrawBuffers.cpp:153
&gt;&gt; +        if (context-&gt;checkFramebufferStatus(GraphicsContext3D::FRAMEBUFFER) != GraphicsContext3D::FRAMEBUFFER_COMPLETE) {
&gt; 
&gt; Each call to checkFramebufferStatus is really slow. Maybe in another CL but we should probably have the command buffer do the same tests and add something like &quot;GL_CHROMIUM_draw_buffers_webgl_compatible&quot; so the WebKit code and skip these checks. Kind of like we check GL_CHROMIUM_resource_safe

OK, once we have the commandbuffer side implementation, I&apos;ll put this code inside a condition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857780</commentid>
    <comment_count>8</comment_count>
      <attachid>193700</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2013-03-18 17:26:26 -0700</bug_when>
    <thetext>Created attachment 193700
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857783</commentid>
    <comment_count>9</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2013-03-18 17:28:43 -0700</bug_when>
    <thetext>Revised per reviews from bajones/gman.

kbr: please review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857789</commentid>
    <comment_count>10</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2013-03-18 17:30:59 -0700</bug_when>
    <thetext>Mo, could you get an LGTM from Gregg first?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857874</commentid>
    <comment_count>11</comment_count>
      <attachid>193700</attachid>
    <who name="Gregg Tavares">gman</who>
    <bug_when>2013-03-18 20:08:54 -0700</bug_when>
    <thetext>Comment on attachment 193700
Patch

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

&gt; Source/WebCore/html/canvas/EXTDrawBuffers.cpp:84
&gt; +        m_context-&gt;m_backDrawBuffer = bufs[0];

Sorry if this is a dumb question. I don&apos;t write enough WebKit code. But I find it strange that EXTDrawBuffers is directly setting fields on WebGLRenderingContext. Does this need a setter or is it okay?

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:2463
&gt; +            bool satisfiesWebGLRequirements = false;

Isn&apos;t WebGLRenderingContext::getSupportedExtensions going to need this same logic? It seems like all of this should be inside EXTDrawBuffers::supported

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:2469
&gt; +                bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_framebufferBinding.get(), ec);

It seems like this restoring should be happening in EXTDrawBuffers::satisifiesWebGLRequirements. It would need to call

   context-&gt;RestoreCurrentFramebuffer()
   context-&gt;RestoreCurrentTexture()

Which are 2 new functions you&apos;d have to add to WebGLRenderingContext.  Only EXTDrawBuffers::satisifiesWebGLRequirements knows what state it&apos;s trashing.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:2780
&gt; +                if (pname == Extensions3D::DRAW_BUFFER0_EXT &amp;&amp; m_backDrawBuffer != GraphicsContext3D::NONE)

If I understand the code correctly, m_backDrawBuffer will always have a correct validated value which means this code seems like it could be

   if (pname == Extensions3D::DRAW_BUFFER0_EXT)
      value = m_backDrawBuffer

Yes?

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:6079
&gt; +    return getMaxDrawBuffers();

Is this correct? If so a comment would be good. Otherwise what&apos;s m_maxColorAttachments for if it&apos;s not actually used?



Sorry, I should have had these comments previously.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858547</commentid>
    <comment_count>12</comment_count>
      <attachid>193700</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2013-03-19 11:46:27 -0700</bug_when>
    <thetext>Comment on attachment 193700
Patch

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

&gt;&gt; Source/WebCore/html/canvas/EXTDrawBuffers.cpp:84
&gt;&gt; +        m_context-&gt;m_backDrawBuffer = bufs[0];
&gt; 
&gt; Sorry if this is a dumb question. I don&apos;t write enough WebKit code. But I find it strange that EXTDrawBuffers is directly setting fields on WebGLRenderingContext. Does this need a setter or is it okay?

added a setter.

&gt;&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:2463
&gt;&gt; +            bool satisfiesWebGLRequirements = false;
&gt; 
&gt; Isn&apos;t WebGLRenderingContext::getSupportedExtensions going to need this same logic? It seems like all of this should be inside EXTDrawBuffers::supported

you are correct.  So I added WebGLRenderingContext::supportsDrawBuffers() helper function to make sure EXTDrawBuffers::satisfiesWebGLRequirments() only called once unless context is lost and initialized.

&gt;&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:2469
&gt;&gt; +                bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_framebufferBinding.get(), ec);
&gt; 
&gt; It seems like this restoring should be happening in EXTDrawBuffers::satisifiesWebGLRequirements. It would need to call
&gt; 
&gt;    context-&gt;RestoreCurrentFramebuffer()
&gt;    context-&gt;RestoreCurrentTexture()
&gt; 
&gt; Which are 2 new functions you&apos;d have to add to WebGLRenderingContext.  Only EXTDrawBuffers::satisifiesWebGLRequirements knows what state it&apos;s trashing.

Done.

&gt;&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:2780
&gt;&gt; +                if (pname == Extensions3D::DRAW_BUFFER0_EXT &amp;&amp; m_backDrawBuffer != GraphicsContext3D::NONE)
&gt; 
&gt; If I understand the code correctly, m_backDrawBuffer will always have a correct validated value which means this code seems like it could be
&gt; 
&gt;    if (pname == Extensions3D::DRAW_BUFFER0_EXT)
&gt;       value = m_backDrawBuffer
&gt; 
&gt; Yes?

yes. modified.

&gt;&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:6079
&gt;&gt; +    return getMaxDrawBuffers();
&gt; 
&gt; Is this correct? If so a comment would be good. Otherwise what&apos;s m_maxColorAttachments for if it&apos;s not actually used?
&gt; 
&gt; 
&gt; 
&gt; Sorry, I should have had these comments previously.

So I changed the code to let m_maxColorAttachments and m_maxDrawBuffers reflects the real values returned by the driver. However, for getMaxDrawBuffers(), I return the min of the two values, whereas getMaxColorAttachments() returns m_maxColorAttachments.

This satisfies the WebGL requirements with minimum emulation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858558</commentid>
    <comment_count>13</comment_count>
      <attachid>193887</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2013-03-19 11:53:14 -0700</bug_when>
    <thetext>Created attachment 193887
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858560</commentid>
    <comment_count>14</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2013-03-19 11:54:14 -0700</bug_when>
    <thetext>Revised per gman&apos;s review on second patch.

Please have another look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858647</commentid>
    <comment_count>15</comment_count>
      <attachid>193887</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-19 12:57:55 -0700</bug_when>
    <thetext>Comment on attachment 193887
Patch

Attachment 193887 did not pass chromium-ews (chromium-xvfb):
Output: http://webkit-commit-queue.appspot.com/results/17257036

New failing tests:
platform/chromium/virtual/gpu/fast/canvas/webgl/webgl-depth-texture.html
fast/canvas/webgl/webgl-depth-texture.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858823</commentid>
    <comment_count>16</comment_count>
      <attachid>193941</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2013-03-19 15:51:21 -0700</bug_when>
    <thetext>Created attachment 193941
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858824</commentid>
    <comment_count>17</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2013-03-19 15:52:01 -0700</bug_when>
    <thetext>This one should fix the depth-texture failure on cr-linux bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859515</commentid>
    <comment_count>18</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2013-03-20 10:00:48 -0700</bug_when>
    <thetext>gman: any further comments?  If not, I&apos;d like kbr to finish the official review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859835</commentid>
    <comment_count>19</comment_count>
    <who name="Gregg Tavares">gman</who>
    <bug_when>2013-03-20 16:02:04 -0700</bug_when>
    <thetext>lgtm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859948</commentid>
    <comment_count>20</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2013-03-20 19:18:23 -0700</bug_when>
    <thetext>Ken: please review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860805</commentid>
    <comment_count>21</comment_count>
      <attachid>193941</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2013-03-21 15:51:28 -0700</bug_when>
    <thetext>Comment on attachment 193941
Patch

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

Looks good overall, but a few issues.

&gt; Source/WebCore/html/canvas/EXTDrawBuffers.cpp:111
&gt; +    context-&gt;getIntegerv(Extensions3D::MAX_DRAW_BUFFERS_EXT, &amp;maxColorAttachments);

Looks like you&apos;re querying the wrong value here.

&gt; Source/WebCore/html/canvas/EXTDrawBuffers.cpp:114
&gt; +        return ok;

You could just return false here and define &quot;bool ok&quot; later.

&gt; Source/WebCore/html/canvas/EXTDrawBuffers.cpp:116
&gt; +    GC3Dint max = std::min(maxDrawBuffers, maxColorAttachments);

It may be a bad idea to call this variable &quot;max&quot;.

&gt; Source/WebCore/html/canvas/EXTDrawBuffers.cpp:125
&gt; +#endif

This seems like a bug that maybe should be filed.

&gt; Source/WebCore/html/canvas/EXTDrawBuffers.cpp:163
&gt; +            break;

The depth/stencil checks don&apos;t follow WebGL&apos;s rules. Specifically, WebGL (and GraphicsContext3D) add the DEPTH_STENCIL_ATTACHMENT entry point, forbid attaching textures to both the depth and stencil attachment points, and require certain formats for the depth, stencil, and depth/stencil attachment points. See http://www.khronos.org/registry/webgl/specs/latest/#6.6 . It looks like some ports&apos; GraphicsContext3D implementations aren&apos;t doing sufficient checking. I think you need both an optional depth and depth/stencil texture, and need to try attaching and detaching each in turn.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860913</commentid>
    <comment_count>22</comment_count>
      <attachid>194393</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2013-03-21 17:20:15 -0700</bug_when>
    <thetext>Created attachment 194393
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860914</commentid>
    <comment_count>23</comment_count>
      <attachid>193941</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2013-03-21 17:21:12 -0700</bug_when>
    <thetext>Comment on attachment 193941
Patch

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

&gt;&gt; Source/WebCore/html/canvas/EXTDrawBuffers.cpp:111
&gt;&gt; +    context-&gt;getIntegerv(Extensions3D::MAX_DRAW_BUFFERS_EXT, &amp;maxColorAttachments);
&gt; 
&gt; Looks like you&apos;re querying the wrong value here.

done

&gt;&gt; Source/WebCore/html/canvas/EXTDrawBuffers.cpp:114
&gt;&gt; +        return ok;
&gt; 
&gt; You could just return false here and define &quot;bool ok&quot; later.

done

&gt;&gt; Source/WebCore/html/canvas/EXTDrawBuffers.cpp:116
&gt;&gt; +    GC3Dint max = std::min(maxDrawBuffers, maxColorAttachments);
&gt; 
&gt; It may be a bad idea to call this variable &quot;max&quot;.

change to maxAllowedBuffers

&gt;&gt; Source/WebCore/html/canvas/EXTDrawBuffers.cpp:125
&gt;&gt; +#endif
&gt; 
&gt; This seems like a bug that maybe should be filed.

I think the behavior is by design.  Chromium port initialize textures, so we can pass NULL to it, but for other ports, we have to provide the data to avoid info leaking.

As for no init data for depth/stencil texture, according to Gregg, it is due to the ANGLE implementation.  We don&apos;t have to impose that on other ports.

&gt;&gt; Source/WebCore/html/canvas/EXTDrawBuffers.cpp:163
&gt;&gt; +            break;
&gt; 
&gt; The depth/stencil checks don&apos;t follow WebGL&apos;s rules. Specifically, WebGL (and GraphicsContext3D) add the DEPTH_STENCIL_ATTACHMENT entry point, forbid attaching textures to both the depth and stencil attachment points, and require certain formats for the depth, stencil, and depth/stencil attachment points. See http://www.khronos.org/registry/webgl/specs/latest/#6.6 . It looks like some ports&apos; GraphicsContext3D implementations aren&apos;t doing sufficient checking. I think you need both an optional depth and depth/stencil texture, and need to try attaching and detaching each in turn.

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861971</commentid>
    <comment_count>24</comment_count>
      <attachid>194393</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2013-03-22 16:49:41 -0700</bug_when>
    <thetext>Comment on attachment 194393
Patch

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

Thanks for the updates. Looks good.

&gt; Source/WebCore/html/canvas/EXTDrawBuffers.cpp:150
&gt; +        context-&gt;framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::STENCIL_ATTACHMENT, GraphicsContext3D::TEXTURE_2D, 0, 0);

Strictly speaking it isn&apos;t necessary to touch the DEPTH and STENCIL attachments here any more.

&gt; Source/WebCore/html/canvas/EXTDrawBuffers.cpp:165
&gt; +            context-&gt;framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::STENCIL_ATTACHMENT, GraphicsContext3D::TEXTURE_2D, depthStencil, 0);

OK, I see your point that WebGLRenderingContext implements DEPTH_STENCIL_ATTACHMENT as two separate attachments at the GC3D level.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>862012</commentid>
    <comment_count>25</comment_count>
      <attachid>194393</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2013-03-22 17:22:53 -0700</bug_when>
    <thetext>Comment on attachment 194393
Patch

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

&gt;&gt; Source/WebCore/html/canvas/EXTDrawBuffers.cpp:150
&gt;&gt; +        context-&gt;framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::STENCIL_ATTACHMENT, GraphicsContext3D::TEXTURE_2D, 0, 0);
&gt; 
&gt; Strictly speaking it isn&apos;t necessary to touch the DEPTH and STENCIL attachments here any more.

Removed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>862034</commentid>
    <comment_count>26</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2013-03-22 17:47:47 -0700</bug_when>
    <thetext>Committed r146694: &lt;http://trac.webkit.org/changeset/146694&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193613</attachid>
            <date>2013-03-18 11:26:28 -0700</date>
            <delta_ts>2013-03-18 17:26:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-112359-20130318112220.patch</filename>
            <type>text/plain</type>
            <size>16614</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NjA4OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDEzLTAzLTE4ICBaaGVueWFv
IE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgQ2hlY2sgV0VCR0xfZHJhd19idWZmZXJz
IHJlcXVpcmVtZW50cyBiZWZvcmUgZXhwb3NpbmcgdGhlIGV4dGVuc2lvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEyMzU5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9FWFREcmF3
QnVmZmVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFWFREcmF3QnVmZmVyczo6c3VwcG9ydGVk
KTogY2FsbCBzYXRpc2ZpZXNXZWJHTFJlcXVpcmVtZW50cygpLgorICAgICAgICAoV2ViQ29yZTo6
RVhURHJhd0J1ZmZlcnM6OmRyYXdCdWZmZXJzRVhUKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6RVhURHJhd0J1ZmZlcnM6OnNhdGlzZmllc1dlYkdMUmVxdWlyZW1lbnRz
KTogY2hlY2sgV2ViR0wgcmVxdWlyZW1lbnRzKCkvCisgICAgICAgICogaHRtbC9jYW52YXMvRVhU
RHJhd0J1ZmZlcnMuaDoKKyAgICAgICAgKEVYVERyYXdCdWZmZXJzKToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJh
bWVidWZmZXI6OmdldERyYXdCdWZmZXIpOiByZXR1cm4gY2FjaGVkIGJ1ZmZlcnMuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmg6Cisg
ICAgICAgIChXZWJHTEZyYW1lYnVmZmVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVOZXdDb250ZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKTogZG8gbm90IGxp
bWl0IHRvIERSQVdfQlVGRkVSMTUuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyk6IGRvIG5vdCBsaW1pdCB0
byBDT0xPUl9BVFRBQ0hNRU5UMTUuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldE1heERyYXdCdWZmZXJzKTogbWFrZXMgc3VyZSBtYXhfY29sb3JfYXRhdGNobWVu
dHMgPj0gbWF4X2RyYXdfYnVmZmVycy4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0TWF4Q29sb3JBdHRhY2htZW50cyk6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgIChXZWJHTFJlbmRlcmluZ0NvbnRleHQp
OgorCiAyMDEzLTAzLTE4ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBOZXR3b3JrUHJvY2VzcyBzaG91bGQgc2VuZCB2bV9jb3BpZWQsIG1tYXAnZWQgbWVtb3J5
IHRvIFdlYlByb2Nlc3NlcyB3aGVuIGEgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9FWFREcmF3QnVmZmVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvRVhURHJhd0J1ZmZlcnMuY3BwCShyZXZpc2lvbiAxNDU5NzIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9FWFREcmF3QnVmZmVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYw
LDcgKzYwLDggQEAgYm9vbCBFWFREcmF3QnVmZmVyczo6c3VwcG9ydGVkKFdlYkdMUmVuZAogICAg
IHJldHVybiBmYWxzZTsKICNlbmRpZgogICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGNv
bnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKTsKLSAgICByZXR1cm4g
ZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKTsKKyAgICByZXR1cm4g
KGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfZHJhd19idWZmZXJzIikKKyAgICAgICAgJiYg
c2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMoY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKSkp
OwogfQogCiB2b2lkIEVYVERyYXdCdWZmZXJzOjpkcmF3QnVmZmVyc0VYVChjb25zdCBWZWN0b3I8
R0MzRGVudW0+JiBidWZmZXJzKQpAQCAtNjksNiArNzAsOCBAQCB2b2lkIEVYVERyYXdCdWZmZXJz
OjpkcmF3QnVmZmVyc0VYVChjb25zCiAgICAgICAgIHJldHVybjsKICAgICBHQzNEc2l6ZWkgbiA9
IGJ1ZmZlcnMuc2l6ZSgpOwogICAgIGNvbnN0IEdDM0RlbnVtKiBidWZzID0gYnVmZmVycy5kYXRh
KCk7CisgICAgaWYgKCFuKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKCFtX2NvbnRleHQtPm1f
ZnJhbWVidWZmZXJCaW5kaW5nKSB7CiAgICAgICAgIGlmIChuICE9IDEpIHsKICAgICAgICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJkcmF3QnVmZmVyc0VYVCIsICJtb3JlIHRoYW4gb25lIGJ1ZmZlciIpOwpAQCAtODEs
NiArODQsNyBAQCB2b2lkIEVYVERyYXdCdWZmZXJzOjpkcmF3QnVmZmVyc0VYVChjb25zCiAgICAg
ICAgIC8vIEJlY2F1c2UgdGhlIGJhY2tidWZmZXIgaXMgc2ltdWxhdGVkIG9uIGFsbCBjdXJyZW50
IFdlYktpdCBwb3J0cywgd2UgbmVlZCB0byBjaGFuZ2UgQkFDSyB0byBDT0xPUl9BVFRBQ0hNRU5U
MC4KICAgICAgICAgR0MzRGVudW0gdmFsdWUgPSAoYnVmc1swXSA9PSBHcmFwaGljc0NvbnRleHQz
RDo6QkFDSykgPyBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAgOiBHcmFwaGlj
c0NvbnRleHQzRDo6Tk9ORTsKICAgICAgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgp
LT5nZXRFeHRlbnNpb25zKCktPmRyYXdCdWZmZXJzRVhUKDEsICZ2YWx1ZSk7CisgICAgICAgIG1f
Y29udGV4dC0+bV9iYWNrRHJhd0J1ZmZlciA9IGJ1ZnNbMF07CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgaWYgKG4gPiBtX2NvbnRleHQtPmdldE1heERyYXdCdWZmZXJzKCkpIHsKICAgICAgICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJkcmF3QnVmZmVyc0VYVCIsICJtb3JlIHRoYW4gbWF4IGRyYXcgYnVmZmVycyIpOwpA
QCAtOTYsNiArMTAwLDg0IEBAIHZvaWQgRVhURHJhd0J1ZmZlcnM6OmRyYXdCdWZmZXJzRVhUKGNv
bnMKICAgICB9CiB9CiAKKy8vIHN0YXRpYworYm9vbCBFWFREcmF3QnVmZmVyczo6c2F0aXNmaWVz
V2ViR0xSZXF1aXJlbWVudHMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCit7CisgICAgc3Rh
dGljIGJvb2wgY29tcHV0ZWQgPSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbCBvayA9IHRydWU7Cisg
ICAgaWYgKGNvbXB1dGVkKQorICAgICAgICByZXR1cm4gb2s7CisgICAgY29tcHV0ZWQgPSB0cnVl
OworCisgICAgLy8gVGhpcyBpcyBjYWxsZWQgYWZ0ZXIgd2UgbWFrZSBzdXJlIEdMX0VYVF9kcmF3
X2J1ZmZlcnMgaXMgc3VwcG9ydGVkLgorICAgIEdDM0RpbnQgbWF4RHJhd0J1ZmZlcnMgPSAwOwor
ICAgIEdDM0RpbnQgbWF4Q29sb3JBdHRhY2htZW50cyA9IDA7CisgICAgY29udGV4dC0+Z2V0SW50
ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfRFJBV19CVUZGRVJTX0VYVCwgJm1heERyYXdCdWZmZXJz
KTsKKyAgICBjb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZF
UlNfRVhULCAmbWF4Q29sb3JBdHRhY2htZW50cyk7CisgICAgaWYgKG1heERyYXdCdWZmZXJzIDwg
NCB8fCBtYXhDb2xvckF0dGFjaG1lbnRzIDwgNCkgeworICAgICAgICBvayA9IGZhbHNlOworICAg
ICAgICByZXR1cm4gb2s7CisgICAgfQorICAgIEdDM0RpbnQgbWF4ID0gc3RkOjptaW4obWF4RHJh
d0J1ZmZlcnMsIG1heENvbG9yQXR0YWNobWVudHMpOworCisgICAgR0MzRGludCB0ZXhCaW5kaW5n
ID0gMDsKKyAgICBjb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9CSU5ESU5HXzJELCAmdGV4QmluZGluZyk7CisgICAgR0MzRGludCBmYm9CaW5kaW5nID0gMDsK
KyAgICBjb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJf
QklORElORywgJmZib0JpbmRpbmcpOworCisgICAgUGxhdGZvcm0zRE9iamVjdCBmYm8gPSBjb250
ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIGZibyk7CisKKyAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyIGJ1ZmZlcls0XSA9IHsgMCwgMCwgMCwgMCB9OworICAgIGJvb2wgc3VwcG9ydHNEZXB0
aCA9IChjb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9DSFJPTUlVTV9kZXB0
aF90ZXh0dXJlIikKKyAgICAgICAgfHwgY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0
cygiR0xfT0VTX2RlcHRoX3RleHR1cmUiKQorICAgICAgICB8fCBjb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9BUkJfZGVwdGhfdGV4dHVyZSIpKTsKKyAgICBib29sIHN1cHBv
cnRzRGVwdGhTdGVuY2lsID0gKGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdM
X0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpCisgICAgICAgIHx8IGNvbnRleHQtPmdldEV4dGVu
c2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpKTsKKyAgICBQ
bGF0Zm9ybTNET2JqZWN0IGRlcHRoU3RlbmNpbCA9IGNvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsK
KyAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
ZGVwdGhTdGVuY2lsKTsKKyAgICBpZiAoc3VwcG9ydHNEZXB0aFN0ZW5jaWwpCisgICAgICAgIGNv
bnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMLCAxLCAxLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfU1RFTkNJTCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84LCBidWZm
ZXIpOworICAgIGVsc2UgaWYgKHN1cHBvcnRzRGVwdGgpCisgICAgICAgIGNvbnRleHQtPnRleElt
YWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9DT01QT05FTlQsIDEsIDEsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01Q
T05FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQsIGJ1ZmZlcik7CisKKyAgICBW
ZWN0b3I8UGxhdGZvcm0zRE9iamVjdD4gY29sb3JzOworICAgIGZvciAoR0MzRGludCBpID0gMDsg
aSA8IG1heDsgKytpKSB7CisgICAgICAgIFBsYXRmb3JtM0RPYmplY3QgY29sb3IgPSBjb250ZXh0
LT5jcmVhdGVUZXh0dXJlKCk7CisgICAgICAgIGNvbG9ycy5hcHBlbmQoY29sb3IpOworICAgICAg
ICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgY29s
b3IpOworICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwgMCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBidWZmZXIpOwor
ICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCArIGksIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBjb2xvciwgMCk7CisgICAgICAgIGNvbnRleHQt
PmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCAwLCAwKTsKKyAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9B
VFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCk7CisgICAgICAg
IGlmIChjb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7
CisgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFzdXBwb3J0c0RlcHRoU3RlbmNpbCAmJiAhc3VwcG9ydHNEZXB0aCkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUy
RChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgZGVwdGhTdGVuY2ls
LCAwKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVJfQ09NUExFVEUpIHsKKyAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXN1cHBvcnRzRGVwdGhTdGVuY2lsKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxf
QVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGRlcHRoU3RlbmNpbCwg
MCk7CisgICAgICAgIGlmIChjb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
X0NPTVBMRVRFKSB7CisgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisgICAgY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgZmJvQmluZGluZyk7CisgICAgY29udGV4dC0+ZGVsZXRl
RnJhbWVidWZmZXIoZmJvKTsKKyAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgdGV4QmluZGluZyk7CisgICAgY29udGV4dC0+ZGVsZXRlVGV4dHVy
ZShkZXB0aFN0ZW5jaWwpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29sb3JzLnNpemUo
KTsgKytpKQorICAgICAgICBjb250ZXh0LT5kZWxldGVUZXh0dXJlKGNvbG9yc1tpXSk7CisgICAg
cmV0dXJuIG9rOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFC
TEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFREcmF3QnVmZmVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVERyYXdCdWZm
ZXJzLmgJKHJldmlzaW9uIDE0NTc3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VY
VERyYXdCdWZmZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDggQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIEVYVERyYXdCdWZmZXJzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwor
CisgICAgc3RhdGljIGJvb2wgc2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMoR3JhcGhpY3NDb250
ZXh0M0QqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCShyZXZpc2lvbiAxNDU3
NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjI0LDYgKzYyNCwxNyBAQCB2b2lkIFdlYkdMRnJhbWVidWZmZXI6
OmRyYXdCdWZmZXJzSWZOZWNlCiAgICAgfQogfQogCitHQzNEZW51bSBXZWJHTEZyYW1lYnVmZmVy
OjpnZXREcmF3QnVmZmVyKEdDM0RlbnVtIGRyYXdCdWZmZXIpCit7CisgICAgaW50IGluZGV4ID0g
c3RhdGljX2Nhc3Q8aW50PihkcmF3QnVmZmVyIC0gRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBf
RVhUKTsKKyAgICBBU1NFUlQoaW5kZXggPj0gMCk7CisgICAgaWYgKGluZGV4IDwgc3RhdGljX2Nh
c3Q8aW50PihtX2RyYXdCdWZmZXJzLnNpemUoKSkpCisgICAgICAgIHJldHVybiBtX2RyYXdCdWZm
ZXJzW2luZGV4XTsKKyAgICBpZiAoZHJhd0J1ZmZlciA9PSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVG
RkVSMF9FWFQpCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNI
TUVOVDA7CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpOT05FOworfQorCiB9CiAKICNl
bmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTEZyYW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCShyZXZpc2lvbiAxNDU3NzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTk4LDYg
Kzk4LDggQEAgcHVibGljOgogICAgIC8vIFdyYXBwZXIgZm9yIGRyYXdCdWZmZXJzRVhUL2RyYXdC
dWZmZXJzQVJCIHRvIHdvcmsgYXJvdW5kIGEgZHJpdmVyIGJ1Zy4KICAgICB2b2lkIGRyYXdCdWZm
ZXJzKGNvbnN0IFZlY3RvcjxHQzNEZW51bT4mIGJ1ZnMpOwogCisgICAgR0MzRGVudW0gZ2V0RHJh
d0J1ZmZlcihHQzNEZW51bSk7CisKIHByb3RlY3RlZDoKICAgICBXZWJHTEZyYW1lYnVmZmVyKFdl
YkdMUmVuZGVyaW5nQ29udGV4dCopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDE0NTc3NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU1MCw2ICs1NTAsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6aW5pdGlhbGl6ZU5lCiAgICAgbV9tYXhEcmF3QnVmZmVycyA9IDA7CiAgICAgbV9tYXhD
b2xvckF0dGFjaG1lbnRzID0gMDsKIAorICAgIG1fYmFja0RyYXdCdWZmZXIgPSBHcmFwaGljc0Nv
bnRleHQzRDo6QkFDSzsKKwogICAgIG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0ID0gV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdE9FUzo6Y3JlYXRlKHRoaXMsIFdlYkdMVmVydGV4QXJyYXlPYmplY3RP
RVM6OlZhb1R5cGVEZWZhdWx0KTsKICAgICBhZGRDb250ZXh0T2JqZWN0KG1fZGVmYXVsdFZlcnRl
eEFycmF5T2JqZWN0LmdldCgpKTsKICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBtX2Rl
ZmF1bHRWZXJ0ZXhBcnJheU9iamVjdDsKQEAgLTI3NTUsNDEgKzI3NTcsMTkgQEAgV2ViR0xHZXRJ
bmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UAogICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhnZXRNYXhEcmF3QnVmZmVycygpKTsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlk
IHBhcmFtZXRlciBuYW1lLCBFWFRfZHJhd19idWZmZXJzIG5vdCBlbmFibGVkIik7CiAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RFJBV19CVUZG
RVIwX0VYVDogLy8gRFJBV19CVUZGRVIwX0VYVCBpcyBzcGVjaWFsIGFzIHRoZSBiYWNrYnVmZmVy
IGlzIHNpbXVsYXRlZC4KLSAgICAgICAgaWYgKG1fZXh0RHJhd0J1ZmZlcnMpIHsKLSAgICAgICAg
ICAgIEdDM0RpbnQgdmFsdWUgPSAwOwotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2Vy
dihwbmFtZSwgJnZhbHVlKTsKLSAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcg
JiYgdmFsdWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpCi0gICAgICAgICAgICAgICAgdmFs
dWUgPSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSzsKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8odmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJh
bWV0ZXIgbmFtZSwgRVhUX2RyYXdfYnVmZmVycyBub3QgZW5hYmxlZCIpOwotICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSMV9F
WFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSMl9FWFQ6Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSM19FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRS
QVdfQlVGRkVSNF9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSNV9FWFQ6
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSNl9FWFQ6Ci0gICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkRSQVdfQlVGRkVSN19FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdf
QlVGRkVSOF9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSOV9FWFQ6Ci0g
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSMTBfRVhUOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpEUkFXX0JVRkZFUjExX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RFJBV19C
VUZGRVIxMl9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSMTNfRVhUOgot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjE0X0VYVDoKLSAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6RFJBV19CVUZGRVIxNV9FWFQ6IC8vIEVYVF9kcmF3X2J1ZmZlcnMgRU5ECi0gICAg
ICAgIGlmIChtX2V4dERyYXdCdWZmZXJzKSB7Ci0gICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8
R0MzRGVudW0+KEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIwX0VYVCArIGdldE1heERyYXdCdWZm
ZXJzKCkpIDw9IHBuYW1lKSB7Ci0gICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBh
cmFtZXRlciwgZXhjZWVkcyBNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhUIik7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmICht
X2V4dERyYXdCdWZmZXJzCisgICAgICAgICAgICAmJiBwbmFtZSA+PSBFeHRlbnNpb25zM0Q6OkRS
QVdfQlVGRkVSMF9FWFQKKyAgICAgICAgICAgICYmIHBuYW1lIDwgc3RhdGljX2Nhc3Q8R0MzRGVu
dW0+KEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIwX0VYVCArIGdldE1heERyYXdCdWZmZXJzKCkp
KSB7CisgICAgICAgICAgICBHQzNEaW50IHZhbHVlID0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkU7
CisgICAgICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgICAgICAgICAg
dmFsdWUgPSBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0RHJhd0J1ZmZlcihwbmFtZSk7CisgICAg
ICAgICAgICBlbHNlIHsgLy8gZW11bGF0ZWQgYmFja2J1ZmZlcgorICAgICAgICAgICAgICAgIGlm
IChwbmFtZSA9PSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSMF9FWFQgJiYgbV9iYWNrRHJhd0J1
ZmZlciAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSkKKyAgICAgICAgICAgICAgICAgICAgdmFs
dWUgPSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyh2YWx1ZSk7CiAgICAgICAgIH0KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBh
cmFtZXRlciBuYW1lLCBFWFRfZHJhd19idWZmZXJzIG5vdCBlbmFibGVkIik7Ci0gICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBkZWZhdWx0OgogICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImlu
dmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwog
ICAgIH0KQEAgLTU1NDgsMzIgKzU1MjgsMTEgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlRnJhbQogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNI
TUVOVDoKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1F
TlQ6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hN
RU5UMV9FWFQ6IC8vIEVYVF9kcmF3X2J1ZmZlcnMgQkVHSU4KLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6Q09MT1JfQVRUQUNITUVOVDJfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xPUl9B
VFRBQ0hNRU5UM19FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQ0
X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDVfRVhUOgotICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hNRU5UNl9FWFQ6Ci0gICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQ3X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09MT1JfQVRUQUNITUVOVDhfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRB
Q0hNRU5UOV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQxMF9F
WFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQxMV9FWFQ6Ci0gICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQxMl9FWFQ6Ci0gICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQxM19FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTE9SX0FUVEFDSE1FTlQxNF9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FU
VEFDSE1FTlQxNV9FWFQ6IC8vIEVYVF9kcmF3X2J1ZmZlcnMgRU5ECi0gICAgICAgIC8vIENPTE9S
X0FUVEFDSE1FTlQwX0VYVCBpcyBlcXVhbCB0byBDT0xPUl9BVFRBQ0hNRU5UMC4KLSAgICAgICAg
aWYgKCFtX2V4dERyYXdCdWZmZXJzKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGF0
dGFjaG1lbnQsIEVYVF9kcmF3X2J1ZmZlcnMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8R0MzRGVudW0+
KEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDBfRVhUICsgZ2V0TWF4Q29sb3JBdHRhY2ht
ZW50cygpKSA8PSBhdHRhY2htZW50KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGF0
dGFjaG1lbnQsIGV4Y2VlZHMgTUFYX0RSQVdfQlVGRkVSU19FWFQiKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgorICAg
ICAgICBpZiAobV9leHREcmF3QnVmZmVycworICAgICAgICAgICAgJiYgYXR0YWNobWVudCA+IEdy
YXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMAorICAgICAgICAgICAgJiYgYXR0YWNo
bWVudCA8IHN0YXRpY19jYXN0PEdDM0RlbnVtPihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRU
QUNITUVOVDAgKyBnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkpKQorICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgYXR0YWNobWVudCIpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQpAQCAtNjA5MSwxNiArNjA1MCwyMSBAQCBJbnRTaXplIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y2xhbXBlZENhCiAKIEdDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRNYXhEcmF3QnVmZmVycygpCiB7Ci0gICAgaWYgKCFtX21heERyYXdCdWZmZXJzICYmIEVYVERy
YXdCdWZmZXJzOjpzdXBwb3J0ZWQodGhpcykpCi0gICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdl
cnYoRXh0ZW5zaW9uczNEOjpNQVhfRFJBV19CVUZGRVJTX0VYVCwgJm1fbWF4RHJhd0J1ZmZlcnMp
OworICAgIGlmICghbV9tYXhEcmF3QnVmZmVycyAmJiBFWFREcmF3QnVmZmVyczo6c3VwcG9ydGVk
KHRoaXMpKSB7CisgICAgICAgIEdDM0RpbnQgbWF4RHJhd0J1ZmZlcnMgPSAwOworICAgICAgICBH
QzNEaW50IG1heENvbG9yQXR0YWNobWVudHMgPSAwOworICAgICAgICBtX2NvbnRleHQtPmdldElu
dGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX0RSQVdfQlVGRkVSU19FWFQsICZtYXhEcmF3QnVmZmVy
cyk7CisgICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09M
T1JfQVRUQUNITUVOVFNfRVhULCAmbWF4Q29sb3JBdHRhY2htZW50cyk7CisgICAgICAgIC8vIFdF
QkdMX2RyYXdfYnVmZmVycyByZXF1aXJlcyBNQVhfQ09MT1JfQVRUQUNITUVOVFMgPj0gTUFYX0RS
QVdfQlVGRkVSUy4KKyAgICAgICAgbV9tYXhEcmF3QnVmZmVycyA9IHN0ZDo6bWluKG1heERyYXdC
dWZmZXJzLCBtYXhDb2xvckF0dGFjaG1lbnRzKTsKKyAgICAgICAgbV9tYXhDb2xvckF0dGFjaG1l
bnRzID0gc3RkOjptYXgobV9tYXhEcmF3QnVmZmVycywgbWF4Q29sb3JBdHRhY2htZW50cyk7Cisg
ICAgfQogICAgIHJldHVybiBtX21heERyYXdCdWZmZXJzOwogfQogCiBHQzNEaW50IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0TWF4Q29sb3JBdHRhY2htZW50cygpCiB7Ci0gICAgaWYgKCFtX21h
eENvbG9yQXR0YWNobWVudHMgJiYgRVhURHJhd0J1ZmZlcnM6OnN1cHBvcnRlZCh0aGlzKSkKLSAg
ICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9DT0xPUl9BVFRB
Q0hNRU5UU19FWFQsICZtX21heENvbG9yQXR0YWNobWVudHMpOwotICAgIHJldHVybiBtX21heENv
bG9yQXR0YWNobWVudHM7CisgICAgcmV0dXJuIGdldE1heERyYXdCdWZmZXJzKCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAxNDU3NzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDgzLDYgKzQ4Myw3IEBAIHB1YmxpYzoKIAogICAgIEdDM0RpbnQgbV9tYXhEcmF3
QnVmZmVyczsKICAgICBHQzNEaW50IG1fbWF4Q29sb3JBdHRhY2htZW50czsKKyAgICBHQzNEZW51
bSBtX2JhY2tEcmF3QnVmZmVyOwogCiAgICAgR0MzRGludCBtX3BhY2tBbGlnbm1lbnQ7CiAgICAg
R0MzRGludCBtX3VucGFja0FsaWdubWVudDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193700</attachid>
            <date>2013-03-18 17:26:26 -0700</date>
            <delta_ts>2013-03-19 11:53:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-112359-20130318172217.patch</filename>
            <type>text/plain</type>
            <size>16729</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NjA4OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDEzLTAzLTE4ICBaaGVueWFv
IE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgQ2hlY2sgV0VCR0xfZHJhd19idWZmZXJz
IHJlcXVpcmVtZW50cyBiZWZvcmUgZXhwb3NpbmcgdGhlIGV4dGVuc2lvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEyMzU5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9FWFREcmF3
QnVmZmVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFWFREcmF3QnVmZmVyczo6ZHJhd0J1ZmZl
cnNFWFQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpFWFREcmF3QnVm
ZmVyczo6c2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMpOiBjaGVjayBXZWJHTCByZXF1aXJlbWVu
dHMoKS8KKyAgICAgICAgKiBodG1sL2NhbnZhcy9FWFREcmF3QnVmZmVycy5oOgorICAgICAgICAo
RVhURHJhd0J1ZmZlcnMpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0RHJhd0J1ZmZlcik6
IHJldHVybiBjYWNoZWQgYnVmZmVycy4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGh0
bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDoKKyAgICAgICAgKFdlYkdMRnJhbWVidWZmZXIp
OgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
aW5pdGlhbGl6ZU5ld0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRQYXJhbWV0ZXIpOiBkbyBub3QgbGltaXQgdG8gRFJBV19CVUZGRVIxNS4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVGcmFtZWJ1ZmZl
ckZ1bmNQYXJhbWV0ZXJzKTogZG8gbm90IGxpbWl0IHRvIENPTE9SX0FUVEFDSE1FTlQxNS4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0TWF4RHJhd0J1ZmZlcnMp
OiBtYWtlcyBzdXJlIG1heF9jb2xvcl9hdGF0Y2htZW50cyA+PSBtYXhfZHJhd19idWZmZXJzLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhDb2xvckF0dGFj
aG1lbnRzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDoK
KyAgICAgICAgKFdlYkdMUmVuZGVyaW5nQ29udGV4dCk6CisKIDIwMTMtMDMtMTggIEJyYWR5IEVp
ZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIE5ldHdvcmtQcm9jZXNzIHNob3Vs
ZCBzZW5kIHZtX2NvcGllZCwgbW1hcCdlZCBtZW1vcnkgdG8gV2ViUHJvY2Vzc2VzIHdoZW4gYSAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVERyYXdCdWZmZXJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFREcmF3QnVmZmVycy5jcHAJ
KHJldmlzaW9uIDE0NTk3MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVERyYXdC
dWZmZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNiArODEsNyBAQCB2b2lkIEVYVERyYXdC
dWZmZXJzOjpkcmF3QnVmZmVyc0VYVChjb25zCiAgICAgICAgIC8vIEJlY2F1c2UgdGhlIGJhY2ti
dWZmZXIgaXMgc2ltdWxhdGVkIG9uIGFsbCBjdXJyZW50IFdlYktpdCBwb3J0cywgd2UgbmVlZCB0
byBjaGFuZ2UgQkFDSyB0byBDT0xPUl9BVFRBQ0hNRU5UMC4KICAgICAgICAgR0MzRGVudW0gdmFs
dWUgPSAoYnVmc1swXSA9PSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSykgPyBHcmFwaGljc0NvbnRl
eHQzRDo6Q09MT1JfQVRUQUNITUVOVDAgOiBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKICAgICAg
ICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCktPmRyYXdC
dWZmZXJzRVhUKDEsICZ2YWx1ZSk7CisgICAgICAgIG1fY29udGV4dC0+bV9iYWNrRHJhd0J1ZmZl
ciA9IGJ1ZnNbMF07CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKG4gPiBtX2NvbnRleHQtPmdl
dE1heERyYXdCdWZmZXJzKCkpIHsKICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJkcmF3QnVmZmVyc0VYVCIs
ICJtb3JlIHRoYW4gbWF4IGRyYXcgYnVmZmVycyIpOwpAQCAtOTYsNiArOTcsNzMgQEAgdm9pZCBF
WFREcmF3QnVmZmVyczo6ZHJhd0J1ZmZlcnNFWFQoY29ucwogICAgIH0KIH0KIAorLy8gc3RhdGlj
Citib29sIEVYVERyYXdCdWZmZXJzOjpzYXRpc2ZpZXNXZWJHTFJlcXVpcmVtZW50cyhHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCkKK3sKKyAgICBib29sIG9rID0gdHJ1ZTsKKworICAgIC8vIFRo
aXMgaXMgY2FsbGVkIGFmdGVyIHdlIG1ha2Ugc3VyZSBHTF9FWFRfZHJhd19idWZmZXJzIGlzIHN1
cHBvcnRlZC4KKyAgICBHQzNEaW50IG1heERyYXdCdWZmZXJzID0gMDsKKyAgICBHQzNEaW50IG1h
eENvbG9yQXR0YWNobWVudHMgPSAwOworICAgIGNvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lv
bnMzRDo6TUFYX0RSQVdfQlVGRkVSU19FWFQsICZtYXhEcmF3QnVmZmVycyk7CisgICAgY29udGV4
dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfRFJBV19CVUZGRVJTX0VYVCwgJm1heENv
bG9yQXR0YWNobWVudHMpOworICAgIGlmIChtYXhEcmF3QnVmZmVycyA8IDQgfHwgbWF4Q29sb3JB
dHRhY2htZW50cyA8IDQpIHsKKyAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG9r
OworICAgIH0KKyAgICBHQzNEaW50IG1heCA9IHN0ZDo6bWluKG1heERyYXdCdWZmZXJzLCBtYXhD
b2xvckF0dGFjaG1lbnRzKTsKKworICAgIFBsYXRmb3JtM0RPYmplY3QgZmJvID0gY29udGV4dC0+
Y3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBmYm8pOworCisgICAgY29uc3QgdW5zaWduZWQgY2hh
ciBidWZmZXJbNF0gPSB7IDAsIDAsIDAsIDAgfTsKKyAgICBib29sIHN1cHBvcnRzRGVwdGggPSAo
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQ0hST01JVU1fZGVwdGhfdGV4
dHVyZSIpCisgICAgICAgIHx8IGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdM
X09FU19kZXB0aF90ZXh0dXJlIikKKyAgICAgICAgfHwgY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5zdXBwb3J0cygiR0xfQVJCX2RlcHRoX3RleHR1cmUiKSk7CisgICAgYm9vbCBzdXBwb3J0c0Rl
cHRoU3RlbmNpbCA9IChjb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRf
cGFja2VkX2RlcHRoX3N0ZW5jaWwiKQorICAgICAgICB8fCBjb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKSk7CisgICAgUGxhdGZv
cm0zRE9iamVjdCBkZXB0aFN0ZW5jaWwgPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CisgICAg
Y29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGRlcHRo
U3RlbmNpbCk7CisgICAgaWYgKHN1cHBvcnRzRGVwdGhTdGVuY2lsKQorICAgICAgICBjb250ZXh0
LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfU1RFTkNJTCwgMSwgMSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X1NURU5DSUwsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMjRfOCwgYnVmZmVyKTsK
KyAgICBlbHNlIGlmIChzdXBwb3J0c0RlcHRoKQorICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJE
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfQ09NUE9ORU5ULCAxLCAxLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5U
LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5ULCBidWZmZXIpOworCisgICAgVmVjdG9y
PFBsYXRmb3JtM0RPYmplY3Q+IGNvbG9yczsKKyAgICBmb3IgKEdDM0RpbnQgaSA9IDA7IGkgPCBt
YXg7ICsraSkgeworICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IGNvbG9yID0gY29udGV4dC0+Y3Jl
YXRlVGV4dHVyZSgpOworICAgICAgICBjb2xvcnMuYXBwZW5kKGNvbG9yKTsKKyAgICAgICAgY29u
dGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbG9yKTsK
KyAgICAgICAgY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYnVmZmVyKTsKKyAgICAg
ICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAgKyBpLCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgY29sb3IsIDApOworICAgICAgICBjb250ZXh0LT5mcmFt
ZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgMCwgMCk7CisgICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNI
TUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDApOworICAgICAgICBpZiAo
Y29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgeworICAg
ICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGlmICghc3VwcG9ydHNEZXB0aFN0ZW5jaWwgJiYgIXN1cHBvcnRzRGVwdGgpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRU
QUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGRlcHRoU3RlbmNpbCwgMCk7
CisgICAgICAgIGlmIChjb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NP
TVBMRVRFKSB7CisgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCFzdXBwb3J0c0RlcHRoU3RlbmNpbCkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFD
SE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBkZXB0aFN0ZW5jaWwsIDApOwor
ICAgICAgICBpZiAoY29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01Q
TEVURSkgeworICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorICAgIGNvbnRleHQtPmRlbGV0ZUZyYW1lYnVmZmVyKGZibyk7CisgICAg
Y29udGV4dC0+ZGVsZXRlVGV4dHVyZShkZXB0aFN0ZW5jaWwpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY29sb3JzLnNpemUoKTsgKytpKQorICAgICAgICBjb250ZXh0LT5kZWxldGVUZXh0
dXJlKGNvbG9yc1tpXSk7CisgICAgcmV0dXJuIG9rOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9FWFREcmF3QnVmZmVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0VYVERyYXdCdWZmZXJzLmgJKHJldmlzaW9uIDE0NTc3NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0VYVERyYXdCdWZmZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDYgKzM3LDkgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydGVkKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCopOwogCisgICAgLy8gTmVlZHMgdG8gcmVzdG9yZSBGUkFNRUJVRkZFUiBh
bmQgVEVYVFVSRV8yRCBiaW5kaW5ncyBhZnRlciBjYWxsaW5nIHRoaXMuCisgICAgc3RhdGljIGJv
b2wgc2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMoR3JhcGhpY3NDb250ZXh0M0QqKTsKKwogICAg
IHZpcnR1YWwgfkVYVERyYXdCdWZmZXJzKCk7CiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdl
dE5hbWUoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xG
cmFtZWJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHJldmlzaW9uIDE0NTc3NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MjQs
NiArNjI0LDE3IEBAIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6ZHJhd0J1ZmZlcnNJZk5lY2UKICAg
ICB9CiB9CiAKK0dDM0RlbnVtIFdlYkdMRnJhbWVidWZmZXI6OmdldERyYXdCdWZmZXIoR0MzRGVu
dW0gZHJhd0J1ZmZlcikKK3sKKyAgICBpbnQgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KGRyYXdC
dWZmZXIgLSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSMF9FWFQpOworICAgIEFTU0VSVChpbmRl
eCA+PSAwKTsKKyAgICBpZiAoaW5kZXggPCBzdGF0aWNfY2FzdDxpbnQ+KG1fZHJhd0J1ZmZlcnMu
c2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuIG1fZHJhd0J1ZmZlcnNbaW5kZXhdOworICAgIGlmIChk
cmF3QnVmZmVyID09IEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIwX0VYVCkKKyAgICAgICAgcmV0
dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMDsKKyAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5PTkU7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJ
KHJldmlzaW9uIDE0NTc3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJh
bWVidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTgsNiArOTgsOCBAQCBwdWJsaWM6CiAgICAg
Ly8gV3JhcHBlciBmb3IgZHJhd0J1ZmZlcnNFWFQvZHJhd0J1ZmZlcnNBUkIgdG8gd29yayBhcm91
bmQgYSBkcml2ZXIgYnVnLgogICAgIHZvaWQgZHJhd0J1ZmZlcnMoY29uc3QgVmVjdG9yPEdDM0Rl
bnVtPiYgYnVmcyk7CiAKKyAgICBHQzNEZW51bSBnZXREcmF3QnVmZmVyKEdDM0RlbnVtKTsKKwog
cHJvdGVjdGVkOgogICAgIFdlYkdMRnJhbWVidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMTQ1Nzc1KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUw
LDYgKzU1MCw5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmUKICAg
ICBtX21heERyYXdCdWZmZXJzID0gMDsKICAgICBtX21heENvbG9yQXR0YWNobWVudHMgPSAwOwog
CisgICAgbV9iYWNrRHJhd0J1ZmZlciA9IEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOworICAgIG1f
ZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0NoZWNrZWQgPSBmYWxzZTsKKwogICAgIG1fZGVm
YXVsdFZlcnRleEFycmF5T2JqZWN0ID0gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6Y3JlYXRl
KHRoaXMsIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZhb1R5cGVEZWZhdWx0KTsKICAgICBh
ZGRDb250ZXh0T2JqZWN0KG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0LmdldCgpKTsKICAgICBt
X2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdDsKQEAg
LTI0NTcsOCArMjQ2MCwxOSBAQCBXZWJHTEV4dGVuc2lvbiogV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnCiAgICAgfQogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiRVhUX2RyYXdfYnVm
ZmVycyIpICYmIEVYVERyYXdCdWZmZXJzOjpzdXBwb3J0ZWQodGhpcykpIHsKICAgICAgICAgaWYg
KCFtX2V4dERyYXdCdWZmZXJzKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX2RyYXdfYnVmZmVycyIpOwotICAgICAgICAgICAg
bV9leHREcmF3QnVmZmVycyA9IEVYVERyYXdCdWZmZXJzOjpjcmVhdGUodGhpcyk7CisgICAgICAg
ICAgICBib29sIHNhdGlzZmllc1dlYkdMUmVxdWlyZW1lbnRzID0gZmFsc2U7CisgICAgICAgICAg
ICBpZiAoIW1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0NoZWNrZWQpIHsKKyAgICAgICAg
ICAgICAgICBtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVja2VkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBzYXRpc2ZpZXNXZWJHTFJlcXVpcmVtZW50cyA9IEVYVERyYXdCdWZmZXJz
OjpzYXRpc2ZpZXNXZWJHTFJlcXVpcmVtZW50cyhncmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICAg
ICAgICAgICAgICAvLyBSZXN0b3JlIEZSQU1FQlVGRkVSIGFuZCBURVhUVVJFXzJEIGJpbmRpbmdz
LgorICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgICAgICAgICAgICAgYmlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgICAgICBiaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5p
dF0ubV90ZXh0dXJlMkRCaW5kaW5nLmdldCgpLCBlYyk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoc2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMpIHsKKyAgICAgICAgICAgICAgICBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX2RyYXdfYnVm
ZmVycyIpOworICAgICAgICAgICAgICAgIG1fZXh0RHJhd0J1ZmZlcnMgPSBFWFREcmF3QnVmZmVy
czo6Y3JlYXRlKHRoaXMpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVy
biBtX2V4dERyYXdCdWZmZXJzLmdldCgpOwogICAgIH0KQEAgLTI3NTUsNDEgKzI3NjksMTkgQEAg
V2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UAogICAgICAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhnZXRNYXhEcmF3QnVmZmVycygpKTsKICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIs
ICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBFWFRfZHJhd19idWZmZXJzIG5vdCBlbmFibGVkIik7
CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
RFJBV19CVUZGRVIwX0VYVDogLy8gRFJBV19CVUZGRVIwX0VYVCBpcyBzcGVjaWFsIGFzIHRoZSBi
YWNrYnVmZmVyIGlzIHNpbXVsYXRlZC4KLSAgICAgICAgaWYgKG1fZXh0RHJhd0J1ZmZlcnMpIHsK
LSAgICAgICAgICAgIEdDM0RpbnQgdmFsdWUgPSAwOwotICAgICAgICAgICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihwbmFtZSwgJnZhbHVlKTsKLSAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgJiYgdmFsdWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpCi0gICAgICAgICAg
ICAgICAgdmFsdWUgPSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSzsKLSAgICAgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8odmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX2RyYXdfYnVmZmVycyBub3QgZW5hYmxlZCIpOwotICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdf
QlVGRkVSMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSMl9FWFQ6Ci0g
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSM19FWFQ6Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkRSQVdfQlVGRkVSNF9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVG
RkVSNV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSNl9FWFQ6Ci0gICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSN19FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkRSQVdfQlVGRkVSOF9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVS
OV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSMTBfRVhUOgotICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjExX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6RFJBV19CVUZGRVIxMl9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVS
MTNfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjE0X0VYVDoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIxNV9FWFQ6IC8vIEVYVF9kcmF3X2J1ZmZlcnMg
RU5ECi0gICAgICAgIGlmIChtX2V4dERyYXdCdWZmZXJzKSB7Ci0gICAgICAgICAgICBpZiAoc3Rh
dGljX2Nhc3Q8R0MzRGVudW0+KEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIwX0VYVCArIGdldE1h
eERyYXdCdWZmZXJzKCkpIDw9IHBuYW1lKSB7Ci0gICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJp
bnZhbGlkIHBhcmFtZXRlciwgZXhjZWVkcyBNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhUIik7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIGlmIChtX2V4dERyYXdCdWZmZXJzCisgICAgICAgICAgICAmJiBwbmFtZSA+PSBFeHRlbnNp
b25zM0Q6OkRSQVdfQlVGRkVSMF9FWFQKKyAgICAgICAgICAgICYmIHBuYW1lIDwgc3RhdGljX2Nh
c3Q8R0MzRGVudW0+KEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIwX0VYVCArIGdldE1heERyYXdC
dWZmZXJzKCkpKSB7CisgICAgICAgICAgICBHQzNEaW50IHZhbHVlID0gR3JhcGhpY3NDb250ZXh0
M0Q6Ok5PTkU7CisgICAgICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAg
ICAgICAgICAgdmFsdWUgPSBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0RHJhd0J1ZmZlcihwbmFt
ZSk7CisgICAgICAgICAgICBlbHNlIHsgLy8gZW11bGF0ZWQgYmFja2J1ZmZlcgorICAgICAgICAg
ICAgICAgIGlmIChwbmFtZSA9PSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSMF9FWFQgJiYgbV9i
YWNrRHJhd0J1ZmZlciAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSkKKyAgICAgICAgICAgICAg
ICAgICAgdmFsdWUgPSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSzsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgICAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7CiAgICAgICAgIH0KLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJp
bnZhbGlkIHBhcmFtZXRlciBuYW1lLCBFWFRfZHJhd19idWZmZXJzIG5vdCBlbmFibGVkIik7Ci0g
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBkZWZhdWx0OgogICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1l
dGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygpOwogICAgIH0KQEAgLTU1NDgsMzIgKzU1NDAsMTEgQEAgYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlRnJhbQogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfQVRUQUNITUVOVDoKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lM
X0FUVEFDSE1FTlQ6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xP
Ul9BVFRBQ0hNRU5UMV9FWFQ6IC8vIEVYVF9kcmF3X2J1ZmZlcnMgQkVHSU4KLSAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDJfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpDT0xPUl9BVFRBQ0hNRU5UM19FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FU
VEFDSE1FTlQ0X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDVf
RVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hNRU5UNl9FWFQ6Ci0gICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQ3X0VYVDoKLSAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDhfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T0xPUl9BVFRBQ0hNRU5UOV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFD
SE1FTlQxMF9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQxMV9F
WFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQxMl9FWFQ6Ci0gICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQxM19FWFQ6Ci0gICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQxNF9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTE9SX0FUVEFDSE1FTlQxNV9FWFQ6IC8vIEVYVF9kcmF3X2J1ZmZlcnMgRU5ECi0gICAgICAg
IC8vIENPTE9SX0FUVEFDSE1FTlQwX0VYVCBpcyBlcXVhbCB0byBDT0xPUl9BVFRBQ0hNRU5UMC4K
LSAgICAgICAgaWYgKCFtX2V4dERyYXdCdWZmZXJzKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJp
bnZhbGlkIGF0dGFjaG1lbnQsIEVYVF9kcmF3X2J1ZmZlcnMgbm90IGVuYWJsZWQiKTsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8
R0MzRGVudW0+KEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDBfRVhUICsgZ2V0TWF4Q29s
b3JBdHRhY2htZW50cygpKSA8PSBhdHRhY2htZW50KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJp
bnZhbGlkIGF0dGFjaG1lbnQsIGV4Y2VlZHMgTUFYX0RSQVdfQlVGRkVSU19FWFQiKTsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKICAgICBkZWZh
dWx0OgorICAgICAgICBpZiAobV9leHREcmF3QnVmZmVycworICAgICAgICAgICAgJiYgYXR0YWNo
bWVudCA+IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMAorICAgICAgICAgICAg
JiYgYXR0YWNobWVudCA8IHN0YXRpY19jYXN0PEdDM0RlbnVtPihHcmFwaGljc0NvbnRleHQzRDo6
Q09MT1JfQVRUQUNITUVOVDAgKyBnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkpKQorICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgYXR0YWNobWVudCIpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtNjA5MSwxNiArNjA2MiwyMSBAQCBJbnRTaXplIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xhbXBlZENhCiAKIEdDM0RpbnQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRNYXhEcmF3QnVmZmVycygpCiB7Ci0gICAgaWYgKCFtX21heERyYXdCdWZmZXJz
ICYmIEVYVERyYXdCdWZmZXJzOjpzdXBwb3J0ZWQodGhpcykpCi0gICAgICAgIG1fY29udGV4dC0+
Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfRFJBV19CVUZGRVJTX0VYVCwgJm1fbWF4RHJh
d0J1ZmZlcnMpOworICAgIGlmICghbV9tYXhEcmF3QnVmZmVycyAmJiBFWFREcmF3QnVmZmVyczo6
c3VwcG9ydGVkKHRoaXMpKSB7CisgICAgICAgIEdDM0RpbnQgbWF4RHJhd0J1ZmZlcnMgPSAwOwor
ICAgICAgICBHQzNEaW50IG1heENvbG9yQXR0YWNobWVudHMgPSAwOworICAgICAgICBtX2NvbnRl
eHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX0RSQVdfQlVGRkVSU19FWFQsICZtYXhE
cmF3QnVmZmVycyk7CisgICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNE
OjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbWF4Q29sb3JBdHRhY2htZW50cyk7CisgICAg
ICAgIC8vIFdFQkdMX2RyYXdfYnVmZmVycyByZXF1aXJlcyBNQVhfQ09MT1JfQVRUQUNITUVOVFMg
Pj0gTUFYX0RSQVdfQlVGRkVSUy4KKyAgICAgICAgbV9tYXhEcmF3QnVmZmVycyA9IHN0ZDo6bWlu
KG1heERyYXdCdWZmZXJzLCBtYXhDb2xvckF0dGFjaG1lbnRzKTsKKyAgICAgICAgbV9tYXhDb2xv
ckF0dGFjaG1lbnRzID0gc3RkOjptYXgobV9tYXhEcmF3QnVmZmVycywgbWF4Q29sb3JBdHRhY2ht
ZW50cyk7CisgICAgfQogICAgIHJldHVybiBtX21heERyYXdCdWZmZXJzOwogfQogCiBHQzNEaW50
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0TWF4Q29sb3JBdHRhY2htZW50cygpCiB7Ci0gICAg
aWYgKCFtX21heENvbG9yQXR0YWNobWVudHMgJiYgRVhURHJhd0J1ZmZlcnM6OnN1cHBvcnRlZCh0
aGlzKSkKLSAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9D
T0xPUl9BVFRBQ0hNRU5UU19FWFQsICZtX21heENvbG9yQXR0YWNobWVudHMpOwotICAgIHJldHVy
biBtX21heENvbG9yQXR0YWNobWVudHM7CisgICAgcmV0dXJuIGdldE1heERyYXdCdWZmZXJzKCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAxNDU3NzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDgzLDYgKzQ4Myw4IEBAIHB1YmxpYzoKIAogICAgIEdDM0RpbnQg
bV9tYXhEcmF3QnVmZmVyczsKICAgICBHQzNEaW50IG1fbWF4Q29sb3JBdHRhY2htZW50czsKKyAg
ICBHQzNEZW51bSBtX2JhY2tEcmF3QnVmZmVyOworICAgIGJvb2wgbV9kcmF3QnVmZmVyc1dlYkdM
UmVxdWlyZW1lbnRzQ2hlY2tlZDsKIAogICAgIEdDM0RpbnQgbV9wYWNrQWxpZ25tZW50OwogICAg
IEdDM0RpbnQgbV91bnBhY2tBbGlnbm1lbnQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193887</attachid>
            <date>2013-03-19 11:53:14 -0700</date>
            <delta_ts>2013-03-19 15:51:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-112359-20130319114905.patch</filename>
            <type>text/plain</type>
            <size>18060</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NjIyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDEzLTAzLTE5ICBaaGVueWFv
IE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgQ2hlY2sgV0VCR0xfZHJhd19idWZmZXJz
IHJlcXVpcmVtZW50cyBiZWZvcmUgZXhwb3NpbmcgdGhlIGV4dGVuc2lvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEyMzU5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9FWFREcmF3
QnVmZmVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFWFREcmF3QnVmZmVyczo6c3VwcG9ydGVk
KTogY2FsbCBzYXRpc2ZpZXMqKCkuCisgICAgICAgIChXZWJDb3JlOjpFWFREcmF3QnVmZmVyczo6
ZHJhd0J1ZmZlcnNFWFQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpF
WFREcmF3QnVmZmVyczo6c2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMpOiBjaGVjayBXZWJHTCBy
ZXF1aXJlbWVudHMuCisgICAgICAgICogaHRtbC9jYW52YXMvRVhURHJhd0J1ZmZlcnMuaDoKKyAg
ICAgICAgKEVYVERyYXdCdWZmZXJzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEZyYW1l
YnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmdldERyYXdC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xG
cmFtZWJ1ZmZlci5oOgorICAgICAgICAoV2ViR0xGcmFtZWJ1ZmZlcik6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmV3Q29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEV4dGVu
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFt
ZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFN1cHBv
cnRlZEV4dGVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhEcmF3QnVmZmVycyk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldE1heENvbG9yQXR0YWNobWVudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzZXRCYWNrRHJhd0J1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVDdXJyZW50
RnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpy
ZXN0b3JlQ3VycmVudFRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnN1cHBvcnRzRHJhd0J1ZmZlcnMpOiBhIGNhY2hlZCB2ZXJzaW9uIG9mIEVYVERy
YXdCdWZmZXJzOjpzdXBwb3J0cygpCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0Lmg6CisgICAgICAgIChXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorCiAyMDEzLTAz
LTE5ICBQaGlsaXAgUm9nZXJzICA8cGRyQGdvb2dsZS5jb20+CiAKICAgICAgICAgU2VwYXJhdGUg
U1ZHIGltYWdlIHNpemUgYW5kIGNvbnRhaW5lciBzaXplCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9FWFREcmF3QnVmZmVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvRVhURHJhd0J1ZmZlcnMuY3BwCShyZXZpc2lvbiAxNDU5NzIpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFREcmF3QnVmZmVycy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYwLDcgKzYwLDggQEAgYm9vbCBFWFREcmF3QnVmZmVyczo6c3VwcG9ydGVkKFdlYkdM
UmVuZAogICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5z
aW9ucyA9IGNvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKTsKLSAg
ICByZXR1cm4gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKTsKKyAg
ICByZXR1cm4gKGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfZHJhd19idWZmZXJzIikKKyAg
ICAgICAgJiYgc2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMoY29udGV4dCkpOwogfQogCiB2b2lk
IEVYVERyYXdCdWZmZXJzOjpkcmF3QnVmZmVyc0VYVChjb25zdCBWZWN0b3I8R0MzRGVudW0+JiBi
dWZmZXJzKQpAQCAtODEsNiArODIsNyBAQCB2b2lkIEVYVERyYXdCdWZmZXJzOjpkcmF3QnVmZmVy
c0VYVChjb25zCiAgICAgICAgIC8vIEJlY2F1c2UgdGhlIGJhY2tidWZmZXIgaXMgc2ltdWxhdGVk
IG9uIGFsbCBjdXJyZW50IFdlYktpdCBwb3J0cywgd2UgbmVlZCB0byBjaGFuZ2UgQkFDSyB0byBD
T0xPUl9BVFRBQ0hNRU5UMC4KICAgICAgICAgR0MzRGVudW0gdmFsdWUgPSAoYnVmc1swXSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6QkFDSykgPyBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNI
TUVOVDAgOiBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKICAgICAgICAgbV9jb250ZXh0LT5ncmFw
aGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCktPmRyYXdCdWZmZXJzRVhUKDEsICZ2YWx1
ZSk7CisgICAgICAgIG1fY29udGV4dC0+c2V0QmFja0RyYXdCdWZmZXIoYnVmc1swXSk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgaWYgKG4gPiBtX2NvbnRleHQtPmdldE1heERyYXdCdWZmZXJzKCkp
IHsKICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJkcmF3QnVmZmVyc0VYVCIsICJtb3JlIHRoYW4gbWF4IGRy
YXcgYnVmZmVycyIpOwpAQCAtOTYsNiArOTgsNzcgQEAgdm9pZCBFWFREcmF3QnVmZmVyczo6ZHJh
d0J1ZmZlcnNFWFQoY29ucwogICAgIH0KIH0KIAorLy8gc3RhdGljCitib29sIEVYVERyYXdCdWZm
ZXJzOjpzYXRpc2ZpZXNXZWJHTFJlcXVpcmVtZW50cyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIHdl
YmdsQ29udGV4dCkKK3sKKyAgICBib29sIG9rID0gdHJ1ZTsKKyAgICBHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCA9IHdlYmdsQ29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKworICAgIC8v
IFRoaXMgaXMgY2FsbGVkIGFmdGVyIHdlIG1ha2Ugc3VyZSBHTF9FWFRfZHJhd19idWZmZXJzIGlz
IHN1cHBvcnRlZC4KKyAgICBHQzNEaW50IG1heERyYXdCdWZmZXJzID0gMDsKKyAgICBHQzNEaW50
IG1heENvbG9yQXR0YWNobWVudHMgPSAwOworICAgIGNvbnRleHQtPmdldEludGVnZXJ2KEV4dGVu
c2lvbnMzRDo6TUFYX0RSQVdfQlVGRkVSU19FWFQsICZtYXhEcmF3QnVmZmVycyk7CisgICAgY29u
dGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfRFJBV19CVUZGRVJTX0VYVCwgJm1h
eENvbG9yQXR0YWNobWVudHMpOworICAgIGlmIChtYXhEcmF3QnVmZmVycyA8IDQgfHwgbWF4Q29s
b3JBdHRhY2htZW50cyA8IDQpIHsKKyAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IG9rOworICAgIH0KKyAgICBHQzNEaW50IG1heCA9IHN0ZDo6bWluKG1heERyYXdCdWZmZXJzLCBt
YXhDb2xvckF0dGFjaG1lbnRzKTsKKworICAgIFBsYXRmb3JtM0RPYmplY3QgZmJvID0gY29udGV4
dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBmYm8pOworCisgICAgY29uc3QgdW5zaWduZWQg
Y2hhciBidWZmZXJbNF0gPSB7IDAsIDAsIDAsIDAgfTsKKyAgICBib29sIHN1cHBvcnRzRGVwdGgg
PSAoY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQ0hST01JVU1fZGVwdGhf
dGV4dHVyZSIpCisgICAgICAgIHx8IGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMo
IkdMX09FU19kZXB0aF90ZXh0dXJlIikKKyAgICAgICAgfHwgY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLT5zdXBwb3J0cygiR0xfQVJCX2RlcHRoX3RleHR1cmUiKSk7CisgICAgYm9vbCBzdXBwb3J0
c0RlcHRoU3RlbmNpbCA9IChjb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9F
WFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKQorICAgICAgICB8fCBjb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKSk7CisgICAgUGxh
dGZvcm0zRE9iamVjdCBkZXB0aFN0ZW5jaWwgPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7Cisg
ICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGRl
cHRoU3RlbmNpbCk7CisgICAgaWYgKHN1cHBvcnRzRGVwdGhTdGVuY2lsKQorICAgICAgICBjb250
ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTCwgMSwgMSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIX1NURU5DSUwsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMjRfOCwgYnVmZmVy
KTsKKyAgICBlbHNlIGlmIChzdXBwb3J0c0RlcHRoKQorICAgICAgICBjb250ZXh0LT50ZXhJbWFn
ZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfQ09NUE9ORU5ULCAxLCAxLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9O
RU5ULCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5ULCBidWZmZXIpOworCisgICAgVmVj
dG9yPFBsYXRmb3JtM0RPYmplY3Q+IGNvbG9yczsKKyAgICBmb3IgKEdDM0RpbnQgaSA9IDA7IGkg
PCBtYXg7ICsraSkgeworICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IGNvbG9yID0gY29udGV4dC0+
Y3JlYXRlVGV4dHVyZSgpOworICAgICAgICBjb2xvcnMuYXBwZW5kKGNvbG9yKTsKKyAgICAgICAg
Y29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbG9y
KTsKKyAgICAgICAgY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsIDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYnVmZmVyKTsKKyAg
ICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAgKyBpLCBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgY29sb3IsIDApOworICAgICAgICBjb250ZXh0LT5m
cmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgMCwgMCk7CisgICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRU
QUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDApOworICAgICAgICBp
ZiAoY29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewor
ICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGlmICghc3VwcG9ydHNEZXB0aFN0ZW5jaWwgJiYgIXN1cHBvcnRzRGVwdGgpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
QVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGRlcHRoU3RlbmNpbCwg
MCk7CisgICAgICAgIGlmIChjb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
X0NPTVBMRVRFKSB7CisgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzdXBwb3J0c0RlcHRoU3RlbmNpbCkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FU
VEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBkZXB0aFN0ZW5jaWwsIDAp
OworICAgICAgICBpZiAoY29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9D
T01QTEVURSkgeworICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorCisgICAgd2ViZ2xDb250ZXh0LT5yZXN0b3JlQ3VycmVudEZyYW1l
YnVmZmVyKCk7CisgICAgY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIoZmJvKTsKKyAgICB3ZWJn
bENvbnRleHQtPnJlc3RvcmVDdXJyZW50VGV4dHVyZTJEKCk7CisgICAgY29udGV4dC0+ZGVsZXRl
VGV4dHVyZShkZXB0aFN0ZW5jaWwpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29sb3Jz
LnNpemUoKTsgKytpKQorICAgICAgICBjb250ZXh0LT5kZWxldGVUZXh0dXJlKGNvbG9yc1tpXSk7
CisgICAgcmV0dXJuIG9rOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFREcmF3
QnVmZmVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVERy
YXdCdWZmZXJzLmgJKHJldmlzaW9uIDE0NTc3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0VYVERyYXdCdWZmZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDggQEAgcHVi
bGljOgogCiBwcml2YXRlOgogICAgIEVYVERyYXdCdWZmZXJzKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCopOworCisgICAgc3RhdGljIGJvb2wgc2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Kik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkocmV2
aXNpb24gMTQ1Nzc1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyNCw2ICs2MjQsMTcgQEAgdm9pZCBXZWJHTEZy
YW1lYnVmZmVyOjpkcmF3QnVmZmVyc0lmTmVjZQogICAgIH0KIH0KIAorR0MzRGVudW0gV2ViR0xG
cmFtZWJ1ZmZlcjo6Z2V0RHJhd0J1ZmZlcihHQzNEZW51bSBkcmF3QnVmZmVyKQoreworICAgIGlu
dCBpbmRleCA9IHN0YXRpY19jYXN0PGludD4oZHJhd0J1ZmZlciAtIEV4dGVuc2lvbnMzRDo6RFJB
V19CVUZGRVIwX0VYVCk7CisgICAgQVNTRVJUKGluZGV4ID49IDApOworICAgIGlmIChpbmRleCA8
IHN0YXRpY19jYXN0PGludD4obV9kcmF3QnVmZmVycy5zaXplKCkpKQorICAgICAgICByZXR1cm4g
bV9kcmF3QnVmZmVyc1tpbmRleF07CisgICAgaWYgKGRyYXdCdWZmZXIgPT0gRXh0ZW5zaW9uczNE
OjpEUkFXX0JVRkZFUjBfRVhUKQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkNP
TE9SX0FUVEFDSE1FTlQwOworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKK30K
KwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAkocmV2aXNpb24gMTQ1Nzc1KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC05OCw2ICs5OCw4IEBAIHB1YmxpYzoKICAgICAvLyBXcmFwcGVyIGZvciBkcmF3QnVmZmVy
c0VYVC9kcmF3QnVmZmVyc0FSQiB0byB3b3JrIGFyb3VuZCBhIGRyaXZlciBidWcuCiAgICAgdm9p
ZCBkcmF3QnVmZmVycyhjb25zdCBWZWN0b3I8R0MzRGVudW0+JiBidWZzKTsKIAorICAgIEdDM0Rl
bnVtIGdldERyYXdCdWZmZXIoR0MzRGVudW0pOworCiBwcm90ZWN0ZWQ6CiAgICAgV2ViR0xGcmFt
ZWJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lv
biAxNDU3NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTAsNiArNTUwLDEwIEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmUKICAgICBtX21heERyYXdCdWZmZXJzID0gMDsK
ICAgICBtX21heENvbG9yQXR0YWNobWVudHMgPSAwOwogCisgICAgbV9iYWNrRHJhd0J1ZmZlciA9
IEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOworICAgIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVt
ZW50c0NoZWNrZWQgPSBmYWxzZTsKKyAgICBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkID0gZmFsc2U7
CisKICAgICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IFdlYkdMVmVydGV4QXJyYXlPYmpl
Y3RPRVM6OmNyZWF0ZSh0aGlzLCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWYW9UeXBlRGVm
YXVsdCk7CiAgICAgYWRkQ29udGV4dE9iamVjdChtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdC5n
ZXQoKSk7CiAgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0ID0gbV9kZWZhdWx0VmVydGV4QXJy
YXlPYmplY3Q7CkBAIC0yNDU1LDcgKzI0NTksNyBAQCBXZWJHTEV4dGVuc2lvbiogV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1fd2ViZ2xEZXB0aFRl
eHR1cmUuZ2V0KCk7CiAgICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiRVhU
X2RyYXdfYnVmZmVycyIpICYmIEVYVERyYXdCdWZmZXJzOjpzdXBwb3J0ZWQodGhpcykpIHsKKyAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIkVYVF9kcmF3X2J1ZmZlcnMiKSAmJiBzdXBw
b3J0c0RyYXdCdWZmZXJzKCkpIHsKICAgICAgICAgaWYgKCFtX2V4dERyYXdCdWZmZXJzKSB7CiAg
ICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xf
RVhUX2RyYXdfYnVmZmVycyIpOwogICAgICAgICAgICAgbV9leHREcmF3QnVmZmVycyA9IEVYVERy
YXdCdWZmZXJzOjpjcmVhdGUodGhpcyk7CkBAIC0yNzU1LDQxICsyNzU5LDE3IEBAIFdlYkdMR2V0
SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFAKICAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oZ2V0TWF4RHJhd0J1ZmZlcnMoKSk7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxp
ZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX2RyYXdfYnVmZmVycyBub3QgZW5hYmxlZCIpOwogICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVG
RkVSMF9FWFQ6IC8vIERSQVdfQlVGRkVSMF9FWFQgaXMgc3BlY2lhbCBhcyB0aGUgYmFja2J1ZmZl
ciBpcyBzaW11bGF0ZWQuCi0gICAgICAgIGlmIChtX2V4dERyYXdCdWZmZXJzKSB7Ci0gICAgICAg
ICAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdl
cnYocG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5n
ICYmIHZhbHVlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKQotICAgICAgICAgICAgICAgIHZh
bHVlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJBQ0s7CisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYg
KG1fZXh0RHJhd0J1ZmZlcnMKKyAgICAgICAgICAgICYmIHBuYW1lID49IEV4dGVuc2lvbnMzRDo6
RFJBV19CVUZGRVIwX0VYVAorICAgICAgICAgICAgJiYgcG5hbWUgPCBzdGF0aWNfY2FzdDxHQzNE
ZW51bT4oRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBfRVhUICsgZ2V0TWF4RHJhd0J1ZmZlcnMo
KSkpIHsKKyAgICAgICAgICAgIEdDM0RpbnQgdmFsdWUgPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9O
RTsKKyAgICAgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgICAgICAg
ICB2YWx1ZSA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXREcmF3QnVmZmVyKHBuYW1lKTsKKyAg
ICAgICAgICAgIGVsc2UgLy8gZW11bGF0ZWQgYmFja2J1ZmZlcgorICAgICAgICAgICAgICAgIHZh
bHVlID0gbV9iYWNrRHJhd0J1ZmZlcjsKICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
dmFsdWUpOwogICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIg
bmFtZSwgRVhUX2RyYXdfYnVmZmVycyBub3QgZW5hYmxlZCIpOwotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSMV9FWFQ6Ci0g
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSMl9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkRSQVdfQlVGRkVSM19FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVG
RkVSNF9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSNV9FWFQ6Ci0gICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSNl9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkRSQVdfQlVGRkVSN19FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVS
OF9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSOV9FWFQ6Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSMTBfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpEUkFXX0JVRkZFUjExX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIx
Ml9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSMTNfRVhUOgotICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjE0X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6RFJBV19CVUZGRVIxNV9FWFQ6IC8vIEVYVF9kcmF3X2J1ZmZlcnMgRU5ECi0gICAgICAgIGlm
IChtX2V4dERyYXdCdWZmZXJzKSB7Ci0gICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8R0MzRGVu
dW0+KEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIwX0VYVCArIGdldE1heERyYXdCdWZmZXJzKCkp
IDw9IHBuYW1lKSB7Ci0gICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRl
ciwgZXhjZWVkcyBNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhUIik7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJp
bnZhbGlkIHBhcmFtZXRlciBuYW1lLCBFWFRfZHJhd19idWZmZXJzIG5vdCBlbmFibGVkIik7Ci0g
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBkZWZhdWx0OgogICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1l
dGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygpOwogICAgIH0KQEAgLTI5OTUsNyArMjk3NSw3IEBAIFZlY3RvcjxTdHJpbmc+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2UKICAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lUX1dFQkdM
X2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIik7CiAgICAgaWYgKFdlYkdMRGVwdGhUZXh0dXJlOjpz
dXBwb3J0ZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSkpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoIldF
QktJVF9XRUJHTF9kZXB0aF90ZXh0dXJlIik7Ci0gICAgaWYgKEVYVERyYXdCdWZmZXJzOjpzdXBw
b3J0ZWQodGhpcykpCisgICAgaWYgKHN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKICAgICAgICAgcmVz
dWx0LmFwcGVuZCgiRVhUX2RyYXdfYnVmZmVycyIpOwogCiAgICAgaWYgKGFsbG93UHJpdmlsZWdl
ZEV4dGVuc2lvbnMoKSkgewpAQCAtNTU0OCwzMiArNTUyOCwxMSBAQCBib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmFsaWRhdGVGcmFtCiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9BVFRBQ0hNRU5UOgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5D
SUxfQVRUQUNITUVOVDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TE9SX0FUVEFDSE1FTlQxX0VYVDogLy8gRVhUX2RyYXdfYnVmZmVycyBCRUdJTgotICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hNRU5UMl9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTE9SX0FUVEFDSE1FTlQzX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09MT1Jf
QVRUQUNITUVOVDRfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hNRU5U
NV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQ2X0VYVDoKLSAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDdfRVhUOgotICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hNRU5UOF9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTE9SX0FUVEFDSE1FTlQ5X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRU
QUNITUVOVDEwX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDEx
X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDEyX0VYVDoKLSAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDEzX0VYVDoKLSAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDE0X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6Q09MT1JfQVRUQUNITUVOVDE1X0VYVDogLy8gRVhUX2RyYXdfYnVmZmVycyBFTkQKLSAgICAg
ICAgLy8gQ09MT1JfQVRUQUNITUVOVDBfRVhUIGlzIGVxdWFsIHRvIENPTE9SX0FUVEFDSE1FTlQw
LgotICAgICAgICBpZiAoIW1fZXh0RHJhd0J1ZmZlcnMpIHsKLSAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgYXR0YWNobWVudCwgRVhUX2RyYXdfYnVmZmVycyBub3QgZW5hYmxlZCIpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzdGF0aWNfY2Fz
dDxHQzNEZW51bT4oRXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hNRU5UMF9FWFQgKyBnZXRNYXhD
b2xvckF0dGFjaG1lbnRzKCkpIDw9IGF0dGFjaG1lbnQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgYXR0YWNobWVudCwgZXhjZWVkcyBNQVhfRFJBV19CVUZGRVJTX0VYVCIpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwogICAgIGRl
ZmF1bHQ6CisgICAgICAgIGlmIChtX2V4dERyYXdCdWZmZXJzCisgICAgICAgICAgICAmJiBhdHRh
Y2htZW50ID4gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwCisgICAgICAgICAg
ICAmJiBhdHRhY2htZW50IDwgc3RhdGljX2Nhc3Q8R0MzRGVudW0+KEdyYXBoaWNzQ29udGV4dDNE
OjpDT0xPUl9BVFRBQ0hNRU5UMCArIGdldE1heENvbG9yQXR0YWNobWVudHMoKSkpCisgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBhdHRhY2htZW50Iik7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC02MDkxLDE4ICs2MDUwLDUxIEBAIEludFNpemUg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGFtcGVkQ2EKIAogR0MzRGludCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldE1heERyYXdCdWZmZXJzKCkKIHsKLSAgICBpZiAoIW1fbWF4RHJhd0J1ZmZl
cnMgJiYgRVhURHJhd0J1ZmZlcnM6OnN1cHBvcnRlZCh0aGlzKSkKKyAgICBpZiAoIXN1cHBvcnRz
RHJhd0J1ZmZlcnMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX21heERyYXdCdWZm
ZXJzKQogICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX0RS
QVdfQlVGRkVSU19FWFQsICZtX21heERyYXdCdWZmZXJzKTsKLSAgICByZXR1cm4gbV9tYXhEcmF3
QnVmZmVyczsKKyAgICBpZiAoIW1fbWF4Q29sb3JBdHRhY2htZW50cykKKyAgICAgICAgbV9jb250
ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQs
ICZtX21heENvbG9yQXR0YWNobWVudHMpOworICAgIC8vIFdFQkdMX2RyYXdfYnVmZmVycyByZXF1
aXJlcyBNQVhfQ09MT1JfQVRUQUNITUVOVFMgPj0gTUFYX0RSQVdfQlVGRkVSUy4KKyAgICByZXR1
cm4gc3RkOjptaW4obV9tYXhEcmF3QnVmZmVycywgbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKIH0K
IAogR0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldE1heENvbG9yQXR0YWNobWVudHMo
KQogewotICAgIGlmICghbV9tYXhDb2xvckF0dGFjaG1lbnRzICYmIEVYVERyYXdCdWZmZXJzOjpz
dXBwb3J0ZWQodGhpcykpCisgICAgaWYgKCFzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCisgICAgICAg
IHJldHVybiAwOworICAgIGlmICghbV9tYXhDb2xvckF0dGFjaG1lbnRzKQogICAgICAgICBtX2Nv
bnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VY
VCwgJm1fbWF4Q29sb3JBdHRhY2htZW50cyk7CiAgICAgcmV0dXJuIG1fbWF4Q29sb3JBdHRhY2ht
ZW50czsKIH0KIAordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNldEJhY2tEcmF3QnVmZmVy
KEdDM0RlbnVtIGJ1ZikKK3sKKyAgICBtX2JhY2tEcmF3QnVmZmVyID0gYnVmOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzdG9yZUN1cnJlbnRGcmFtZWJ1ZmZlcigpCit7Cisg
ICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICBiaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSwgZWMpOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzdG9yZUN1cnJlbnRUZXh0dXJlMkQoKQorewor
ICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgYmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLm1fdGV4dHVy
ZTJEQmluZGluZy5nZXQoKSwgZWMpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
c3VwcG9ydHNEcmF3QnVmZmVycygpCit7CisgICAgaWYgKCFtX2RyYXdCdWZmZXJzV2ViR0xSZXF1
aXJlbWVudHNDaGVja2VkKSB7CisgICAgICAgIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50
c0NoZWNrZWQgPSB0cnVlOworICAgICAgICBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkID0gRVhURHJh
d0J1ZmZlcnM6OnN1cHBvcnRlZCh0aGlzKTsKKyAgICB9CisgICAgcmV0dXJuIG1fZHJhd0J1ZmZl
cnNTdXBwb3J0ZWQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAxNDU3NzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDgzLDYgKzQ4Myw5IEBAIHB1YmxpYzoKIAogICAgIEdDM0RpbnQgbV9tYXhEcmF3QnVmZmVyczsK
ICAgICBHQzNEaW50IG1fbWF4Q29sb3JBdHRhY2htZW50czsKKyAgICBHQzNEZW51bSBtX2JhY2tE
cmF3QnVmZmVyOworICAgIGJvb2wgbV9kcmF3QnVmZmVyc1dlYkdMUmVxdWlyZW1lbnRzQ2hlY2tl
ZDsKKyAgICBib29sIG1fZHJhd0J1ZmZlcnNTdXBwb3J0ZWQ7CiAKICAgICBHQzNEaW50IG1fcGFj
a0FsaWdubWVudDsKICAgICBHQzNEaW50IG1fdW5wYWNrQWxpZ25tZW50OwpAQCAtNzQ4LDYgKzc1
MSwxNCBAQCBwdWJsaWM6CiAgICAgR0MzRGludCBnZXRNYXhEcmF3QnVmZmVycygpOwogICAgIEdD
M0RpbnQgZ2V0TWF4Q29sb3JBdHRhY2htZW50cygpOwogCisgICAgdm9pZCBzZXRCYWNrRHJhd0J1
ZmZlcihHQzNEZW51bSk7CisKKyAgICB2b2lkIHJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIoKTsK
KyAgICB2b2lkIHJlc3RvcmVDdXJyZW50VGV4dHVyZTJEKCk7CisKKyAgICAvLyBDaGVjayBpZiBF
WFRfZHJhd19idWZmZXJzIGV4dGVuc2lvbiBpcyBzdXBwb3J0ZWQgYW5kIGlmIGl0IHNhdGlzZmll
cyB0aGUgV2ViR0wgcmVxdWlyZW1lbnRzLgorICAgIGJvb2wgc3VwcG9ydHNEcmF3QnVmZmVycygp
OworCiAgICAgZnJpZW5kIGNsYXNzIFdlYkdMU3RhdGVSZXN0b3JlcjsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193941</attachid>
            <date>2013-03-19 15:51:21 -0700</date>
            <delta_ts>2013-03-21 17:21:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-112359-20130319154712.patch</filename>
            <type>text/plain</type>
            <size>18261</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NjIyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDEzLTAzLTE5ICBaaGVueWFv
IE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgQ2hlY2sgV0VCR0xfZHJhd19idWZmZXJz
IHJlcXVpcmVtZW50cyBiZWZvcmUgZXhwb3NpbmcgdGhlIGV4dGVuc2lvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEyMzU5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9FWFREcmF3
QnVmZmVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFWFREcmF3QnVmZmVyczo6c3VwcG9ydGVk
KTogY2FsbCBzYXRpc2ZpZXMqKCkuCisgICAgICAgIChXZWJDb3JlOjpFWFREcmF3QnVmZmVyczo6
ZHJhd0J1ZmZlcnNFWFQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpF
WFREcmF3QnVmZmVyczo6c2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMpOiBjaGVjayBXZWJHTCBy
ZXF1aXJlbWVudHMuCisgICAgICAgICogaHRtbC9jYW52YXMvRVhURHJhd0J1ZmZlcnMuaDoKKyAg
ICAgICAgKEVYVERyYXdCdWZmZXJzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEZyYW1l
YnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmdldERyYXdC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xG
cmFtZWJ1ZmZlci5oOgorICAgICAgICAoV2ViR0xGcmFtZWJ1ZmZlcik6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmV3Q29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEV4dGVu
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFt
ZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFN1cHBv
cnRlZEV4dGVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhEcmF3QnVmZmVycyk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldE1heENvbG9yQXR0YWNobWVudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzZXRCYWNrRHJhd0J1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVDdXJyZW50
RnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpy
ZXN0b3JlQ3VycmVudFRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnN1cHBvcnRzRHJhd0J1ZmZlcnMpOiBhIGNhY2hlZCB2ZXJzaW9uIG9mIEVYVERy
YXdCdWZmZXJzOjpzdXBwb3J0cygpCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0Lmg6CisgICAgICAgIChXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorCiAyMDEzLTAz
LTE5ICBQaGlsaXAgUm9nZXJzICA8cGRyQGdvb2dsZS5jb20+CiAKICAgICAgICAgU2VwYXJhdGUg
U1ZHIGltYWdlIHNpemUgYW5kIGNvbnRhaW5lciBzaXplCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9FWFREcmF3QnVmZmVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvRVhURHJhd0J1ZmZlcnMuY3BwCShyZXZpc2lvbiAxNDU5NzIpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFREcmF3QnVmZmVycy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYwLDcgKzYwLDggQEAgYm9vbCBFWFREcmF3QnVmZmVyczo6c3VwcG9ydGVkKFdlYkdM
UmVuZAogICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5z
aW9ucyA9IGNvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKTsKLSAg
ICByZXR1cm4gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKTsKKyAg
ICByZXR1cm4gKGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfZHJhd19idWZmZXJzIikKKyAg
ICAgICAgJiYgc2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMoY29udGV4dCkpOwogfQogCiB2b2lk
IEVYVERyYXdCdWZmZXJzOjpkcmF3QnVmZmVyc0VYVChjb25zdCBWZWN0b3I8R0MzRGVudW0+JiBi
dWZmZXJzKQpAQCAtODEsNiArODIsNyBAQCB2b2lkIEVYVERyYXdCdWZmZXJzOjpkcmF3QnVmZmVy
c0VYVChjb25zCiAgICAgICAgIC8vIEJlY2F1c2UgdGhlIGJhY2tidWZmZXIgaXMgc2ltdWxhdGVk
IG9uIGFsbCBjdXJyZW50IFdlYktpdCBwb3J0cywgd2UgbmVlZCB0byBjaGFuZ2UgQkFDSyB0byBD
T0xPUl9BVFRBQ0hNRU5UMC4KICAgICAgICAgR0MzRGVudW0gdmFsdWUgPSAoYnVmc1swXSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6QkFDSykgPyBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNI
TUVOVDAgOiBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKICAgICAgICAgbV9jb250ZXh0LT5ncmFw
aGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCktPmRyYXdCdWZmZXJzRVhUKDEsICZ2YWx1
ZSk7CisgICAgICAgIG1fY29udGV4dC0+c2V0QmFja0RyYXdCdWZmZXIoYnVmc1swXSk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgaWYgKG4gPiBtX2NvbnRleHQtPmdldE1heERyYXdCdWZmZXJzKCkp
IHsKICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJkcmF3QnVmZmVyc0VYVCIsICJtb3JlIHRoYW4gbWF4IGRy
YXcgYnVmZmVycyIpOwpAQCAtOTYsNiArOTgsODEgQEAgdm9pZCBFWFREcmF3QnVmZmVyczo6ZHJh
d0J1ZmZlcnNFWFQoY29ucwogICAgIH0KIH0KIAorLy8gc3RhdGljCitib29sIEVYVERyYXdCdWZm
ZXJzOjpzYXRpc2ZpZXNXZWJHTFJlcXVpcmVtZW50cyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIHdl
YmdsQ29udGV4dCkKK3sKKyAgICBib29sIG9rID0gdHJ1ZTsKKyAgICBHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCA9IHdlYmdsQ29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKworICAgIC8v
IFRoaXMgaXMgY2FsbGVkIGFmdGVyIHdlIG1ha2Ugc3VyZSBHTF9FWFRfZHJhd19idWZmZXJzIGlz
IHN1cHBvcnRlZC4KKyAgICBHQzNEaW50IG1heERyYXdCdWZmZXJzID0gMDsKKyAgICBHQzNEaW50
IG1heENvbG9yQXR0YWNobWVudHMgPSAwOworICAgIGNvbnRleHQtPmdldEludGVnZXJ2KEV4dGVu
c2lvbnMzRDo6TUFYX0RSQVdfQlVGRkVSU19FWFQsICZtYXhEcmF3QnVmZmVycyk7CisgICAgY29u
dGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfRFJBV19CVUZGRVJTX0VYVCwgJm1h
eENvbG9yQXR0YWNobWVudHMpOworICAgIGlmIChtYXhEcmF3QnVmZmVycyA8IDQgfHwgbWF4Q29s
b3JBdHRhY2htZW50cyA8IDQpIHsKKyAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IG9rOworICAgIH0KKyAgICBHQzNEaW50IG1heCA9IHN0ZDo6bWluKG1heERyYXdCdWZmZXJzLCBt
YXhDb2xvckF0dGFjaG1lbnRzKTsKKworICAgIFBsYXRmb3JtM0RPYmplY3QgZmJvID0gY29udGV4
dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBmYm8pOworCisjaWYgUExBVEZPUk0oQ0hST01J
VU0pCisgICAgY29uc3QgdW5zaWduZWQgY2hhciogYnVmZmVyID0gMDsgLy8gQ2hyb21pdW0gZG9l
c24ndCBhbGxvdyBpbml0IGRhdGEgZm9yIGRlcHRoL3N0ZW5jaWwgdGV0eHVyZXMuCisjZWxzZQor
ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgYnVmZmVyWzRdID0geyAwLCAwLCAwLCAwIH07IC8vIHRl
eHR1cmVzIGFyZSByZXF1aXJlZCB0byBiZSBpbml0aWFsaXplZCBmb3Igb3RoZXIgcG9ydHMuCisj
ZW5kaWYKKyAgICBib29sIHN1cHBvcnRzRGVwdGggPSAoY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5zdXBwb3J0cygiR0xfQ0hST01JVU1fZGVwdGhfdGV4dHVyZSIpCisgICAgICAgIHx8IGNvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19kZXB0aF90ZXh0dXJlIikKKyAg
ICAgICAgfHwgY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQVJCX2RlcHRo
X3RleHR1cmUiKSk7CisgICAgYm9vbCBzdXBwb3J0c0RlcHRoU3RlbmNpbCA9IChjb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKQor
ICAgICAgICB8fCBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfcGFj
a2VkX2RlcHRoX3N0ZW5jaWwiKSk7CisgICAgUGxhdGZvcm0zRE9iamVjdCBkZXB0aFN0ZW5jaWwg
PSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CisgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGRlcHRoU3RlbmNpbCk7CisgICAgaWYgKHN1cHBv
cnRzRGVwdGhTdGVuY2lsKQorICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTCwg
MSwgMSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUwsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9JTlRfMjRfOCwgYnVmZmVyKTsKKyAgICBlbHNlIGlmIChzdXBwb3J0c0Rl
cHRoKQorICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5ULCAxLCAxLCAwLCBH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5ULCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfSU5ULCBidWZmZXIpOworCisgICAgVmVjdG9yPFBsYXRmb3JtM0RPYmplY3Q+IGNvbG9y
czsKKyAgICBmb3IgKEdDM0RpbnQgaSA9IDA7IGkgPCBtYXg7ICsraSkgeworICAgICAgICBQbGF0
Zm9ybTNET2JqZWN0IGNvbG9yID0gY29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpOworICAgICAgICBj
b2xvcnMuYXBwZW5kKGNvbG9yKTsKKyAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbG9yKTsKKyAgICAgICAgY29udGV4dC0+dGV4SW1h
Z2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEsIDEsIDEsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURSwgYnVmZmVyKTsKKyAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJU
ZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQz
RDo6Q09MT1JfQVRUQUNITUVOVDAgKyBpLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
Y29sb3IsIDApOworICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hN
RU5ULCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCk7CisgICAgICAgIGNvbnRl
eHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIDAsIDApOworICAgICAgICBpZiAoY29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgeworICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICghc3VwcG9ydHNEZXB0aFN0
ZW5jaWwgJiYgIXN1cHBvcnRzRGVwdGgpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
Y29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIGRlcHRoU3RlbmNpbCwgMCk7CisgICAgICAgIGlmIChjb250ZXh0LT5j
aGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CisgICAgICAgICAgICBv
ayA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFz
dXBwb3J0c0RlcHRoU3RlbmNpbCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjb250
ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIs
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBkZXB0aFN0ZW5jaWwsIDApOworICAgICAgICBpZiAoY29udGV4dC0+Y2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgeworICAgICAgICAgICAgb2sg
PSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgd2Vi
Z2xDb250ZXh0LT5yZXN0b3JlQ3VycmVudEZyYW1lYnVmZmVyKCk7CisgICAgY29udGV4dC0+ZGVs
ZXRlRnJhbWVidWZmZXIoZmJvKTsKKyAgICB3ZWJnbENvbnRleHQtPnJlc3RvcmVDdXJyZW50VGV4
dHVyZTJEKCk7CisgICAgY29udGV4dC0+ZGVsZXRlVGV4dHVyZShkZXB0aFN0ZW5jaWwpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29sb3JzLnNpemUoKTsgKytpKQorICAgICAgICBjb250
ZXh0LT5kZWxldGVUZXh0dXJlKGNvbG9yc1tpXSk7CisgICAgcmV0dXJuIG9rOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFREcmF3QnVmZmVycy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVERyYXdCdWZmZXJzLmgJKHJldmlzaW9uIDE0NTc3
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVERyYXdCdWZmZXJzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDYgKzQ0LDggQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIEVYVERy
YXdCdWZmZXJzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworCisgICAgc3RhdGljIGJvb2wgc2F0
aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTEZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkocmV2aXNpb24gMTQ1Nzc1KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYyNCw2ICs2MjQsMTcgQEAgdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpkcmF3QnVmZmVyc0lmTmVj
ZQogICAgIH0KIH0KIAorR0MzRGVudW0gV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0RHJhd0J1ZmZlcihH
QzNEZW51bSBkcmF3QnVmZmVyKQoreworICAgIGludCBpbmRleCA9IHN0YXRpY19jYXN0PGludD4o
ZHJhd0J1ZmZlciAtIEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIwX0VYVCk7CisgICAgQVNTRVJU
KGluZGV4ID49IDApOworICAgIGlmIChpbmRleCA8IHN0YXRpY19jYXN0PGludD4obV9kcmF3QnVm
ZmVycy5zaXplKCkpKQorICAgICAgICByZXR1cm4gbV9kcmF3QnVmZmVyc1tpbmRleF07CisgICAg
aWYgKGRyYXdCdWZmZXIgPT0gRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBfRVhUKQorICAgICAg
ICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwOworICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFdF
QkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZm
ZXIuaAkocmV2aXNpb24gMTQ1Nzc1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xGcmFtZWJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5OCw4IEBAIHB1YmxpYzoK
ICAgICAvLyBXcmFwcGVyIGZvciBkcmF3QnVmZmVyc0VYVC9kcmF3QnVmZmVyc0FSQiB0byB3b3Jr
IGFyb3VuZCBhIGRyaXZlciBidWcuCiAgICAgdm9pZCBkcmF3QnVmZmVycyhjb25zdCBWZWN0b3I8
R0MzRGVudW0+JiBidWZzKTsKIAorICAgIEdDM0RlbnVtIGdldERyYXdCdWZmZXIoR0MzRGVudW0p
OworCiBwcm90ZWN0ZWQ6CiAgICAgV2ViR0xGcmFtZWJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAxNDU3NzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NTAsNiArNTUwLDEwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXpl
TmUKICAgICBtX21heERyYXdCdWZmZXJzID0gMDsKICAgICBtX21heENvbG9yQXR0YWNobWVudHMg
PSAwOwogCisgICAgbV9iYWNrRHJhd0J1ZmZlciA9IEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOwor
ICAgIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0NoZWNrZWQgPSBmYWxzZTsKKyAgICBt
X2RyYXdCdWZmZXJzU3VwcG9ydGVkID0gZmFsc2U7CisKICAgICBtX2RlZmF1bHRWZXJ0ZXhBcnJh
eU9iamVjdCA9IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OmNyZWF0ZSh0aGlzLCBXZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTOjpWYW9UeXBlRGVmYXVsdCk7CiAgICAgYWRkQ29udGV4dE9iamVj
dChtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdC5nZXQoKSk7CiAgICAgbV9ib3VuZFZlcnRleEFy
cmF5T2JqZWN0ID0gbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3Q7CkBAIC0yNDU1LDcgKzI0NTks
NyBAQCBXZWJHTEV4dGVuc2lvbiogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnCiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIG1fd2ViZ2xEZXB0aFRleHR1cmUuZ2V0KCk7CiAgICAgfQotICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiRVhUX2RyYXdfYnVmZmVycyIpICYmIEVYVERyYXdC
dWZmZXJzOjpzdXBwb3J0ZWQodGhpcykpIHsKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFt
ZSwgIkVYVF9kcmF3X2J1ZmZlcnMiKSAmJiBzdXBwb3J0c0RyYXdCdWZmZXJzKCkpIHsKICAgICAg
ICAgaWYgKCFtX2V4dERyYXdCdWZmZXJzKSB7CiAgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX2RyYXdfYnVmZmVycyIpOwogICAgICAg
ICAgICAgbV9leHREcmF3QnVmZmVycyA9IEVYVERyYXdCdWZmZXJzOjpjcmVhdGUodGhpcyk7CkBA
IC0yNzU1LDQxICsyNzU5LDE3IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFAKICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oZ2V0TWF4RHJhd0J1ZmZlcnMo
KSk7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX2RyYXdf
YnVmZmVycyBub3QgZW5hYmxlZCIpOwogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0g
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSMF9FWFQ6IC8vIERSQVdfQlVGRkVSMF9F
WFQgaXMgc3BlY2lhbCBhcyB0aGUgYmFja2J1ZmZlciBpcyBzaW11bGF0ZWQuCi0gICAgICAgIGlm
IChtX2V4dERyYXdCdWZmZXJzKSB7Ci0gICAgICAgICAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAg
ICAgICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAg
ICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIHZhbHVlICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpOT05FKQotICAgICAgICAgICAgICAgIHZhbHVlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJB
Q0s7CisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKG1fZXh0RHJhd0J1ZmZlcnMKKyAgICAgICAg
ICAgICYmIHBuYW1lID49IEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIwX0VYVAorICAgICAgICAg
ICAgJiYgcG5hbWUgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oRXh0ZW5zaW9uczNEOjpEUkFXX0JV
RkZFUjBfRVhUICsgZ2V0TWF4RHJhd0J1ZmZlcnMoKSkpIHsKKyAgICAgICAgICAgIEdDM0RpbnQg
dmFsdWUgPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKKyAgICAgICAgICAgIGlmIChtX2ZyYW1l
YnVmZmVyQmluZGluZykKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IG1fZnJhbWVidWZmZXJCaW5k
aW5nLT5nZXREcmF3QnVmZmVyKHBuYW1lKTsKKyAgICAgICAgICAgIGVsc2UgLy8gZW11bGF0ZWQg
YmFja2J1ZmZlcgorICAgICAgICAgICAgICAgIHZhbHVlID0gbV9iYWNrRHJhd0J1ZmZlcjsKICAg
ICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwogICAgICAgICB9Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQ
YXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX2RyYXdfYnVmZmVycyBub3Qg
ZW5hYmxlZCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkRSQVdfQlVGRkVSMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdf
QlVGRkVSMl9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSM19FWFQ6Ci0g
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSNF9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkRSQVdfQlVGRkVSNV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVG
RkVSNl9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSN19FWFQ6Ci0gICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSOF9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkRSQVdfQlVGRkVSOV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVS
MTBfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjExX0VYVDoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIxMl9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkRSQVdfQlVGRkVSMTNfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZF
UjE0X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIxNV9FWFQ6IC8vIEVY
VF9kcmF3X2J1ZmZlcnMgRU5ECi0gICAgICAgIGlmIChtX2V4dERyYXdCdWZmZXJzKSB7Ci0gICAg
ICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8R0MzRGVudW0+KEV4dGVuc2lvbnMzRDo6RFJBV19CVUZG
RVIwX0VYVCArIGdldE1heERyYXdCdWZmZXJzKCkpIDw9IHBuYW1lKSB7Ci0gICAgICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdl
dFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciwgZXhjZWVkcyBNQVhfQ09MT1JfQVRUQUNI
TUVOVFNfRVhUIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBFWFRf
ZHJhd19idWZmZXJzIG5vdCBlbmFibGVkIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
KTsKLSAgICBkZWZhdWx0OgogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5h
bWUiKTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIH0KQEAgLTI5OTUsNyAr
Mjk3NSw3IEBAIFZlY3RvcjxTdHJpbmc+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2UKICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIik7
CiAgICAgaWYgKFdlYkdMRGVwdGhUZXh0dXJlOjpzdXBwb3J0ZWQoZ3JhcGhpY3NDb250ZXh0M0Qo
KSkpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQktJVF9XRUJHTF9kZXB0aF90ZXh0dXJlIik7
Ci0gICAgaWYgKEVYVERyYXdCdWZmZXJzOjpzdXBwb3J0ZWQodGhpcykpCisgICAgaWYgKHN1cHBv
cnRzRHJhd0J1ZmZlcnMoKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZCgiRVhUX2RyYXdfYnVmZmVy
cyIpOwogCiAgICAgaWYgKGFsbG93UHJpdmlsZWdlZEV4dGVuc2lvbnMoKSkgewpAQCAtNTU0OCwz
MiArNTUyOCwxMSBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVGcmFtCiAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5UOgogICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQxX0VYVDogLy8gRVhU
X2RyYXdfYnVmZmVycyBCRUdJTgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hN
RU5UMl9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQzX0VYVDoK
LSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDRfRVhUOgotICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hNRU5UNV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTE9SX0FUVEFDSE1FTlQ2X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09MT1Jf
QVRUQUNITUVOVDdfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hNRU5U
OF9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQ5X0VYVDoKLSAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDEwX0VYVDoKLSAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDExX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6Q09MT1JfQVRUQUNITUVOVDEyX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09MT1Jf
QVRUQUNITUVOVDEzX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVO
VDE0X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDE1X0VYVDog
Ly8gRVhUX2RyYXdfYnVmZmVycyBFTkQKLSAgICAgICAgLy8gQ09MT1JfQVRUQUNITUVOVDBfRVhU
IGlzIGVxdWFsIHRvIENPTE9SX0FUVEFDSE1FTlQwLgotICAgICAgICBpZiAoIW1fZXh0RHJhd0J1
ZmZlcnMpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgYXR0YWNobWVudCwgRVhUX2Ry
YXdfYnVmZmVycyBub3QgZW5hYmxlZCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxHQzNEZW51bT4oRXh0ZW5zaW9uczNEOjpD
T0xPUl9BVFRBQ0hNRU5UMF9FWFQgKyBnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkpIDw9IGF0dGFj
aG1lbnQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgYXR0YWNobWVudCwgZXhjZWVk
cyBNQVhfRFJBV19CVUZGRVJTX0VYVCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChtX2V4dERy
YXdCdWZmZXJzCisgICAgICAgICAgICAmJiBhdHRhY2htZW50ID4gR3JhcGhpY3NDb250ZXh0M0Q6
OkNPTE9SX0FUVEFDSE1FTlQwCisgICAgICAgICAgICAmJiBhdHRhY2htZW50IDwgc3RhdGljX2Nh
c3Q8R0MzRGVudW0+KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCArIGdldE1h
eENvbG9yQXR0YWNobWVudHMoKSkpCisgICAgICAgICAgICBicmVhazsKICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1l
LCAiaW52YWxpZCBhdHRhY2htZW50Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBA
IC02MDkxLDE4ICs2MDUwLDUxIEBAIEludFNpemUgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGFt
cGVkQ2EKIAogR0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldE1heERyYXdCdWZmZXJz
KCkKIHsKLSAgICBpZiAoIW1fbWF4RHJhd0J1ZmZlcnMgJiYgRVhURHJhd0J1ZmZlcnM6OnN1cHBv
cnRlZCh0aGlzKSkKKyAgICBpZiAoIXN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgaWYgKCFtX21heERyYXdCdWZmZXJzKQogICAgICAgICBtX2NvbnRleHQtPmdl
dEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX0RSQVdfQlVGRkVSU19FWFQsICZtX21heERyYXdC
dWZmZXJzKTsKLSAgICByZXR1cm4gbV9tYXhEcmF3QnVmZmVyczsKKyAgICBpZiAoIW1fbWF4Q29s
b3JBdHRhY2htZW50cykKKyAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25z
M0Q6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQsICZtX21heENvbG9yQXR0YWNobWVudHMpOwor
ICAgIC8vIFdFQkdMX2RyYXdfYnVmZmVycyByZXF1aXJlcyBNQVhfQ09MT1JfQVRUQUNITUVOVFMg
Pj0gTUFYX0RSQVdfQlVGRkVSUy4KKyAgICByZXR1cm4gc3RkOjptaW4obV9tYXhEcmF3QnVmZmVy
cywgbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKIH0KIAogR0MzRGludCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldE1heENvbG9yQXR0YWNobWVudHMoKQogewotICAgIGlmICghbV9tYXhDb2xvckF0
dGFjaG1lbnRzICYmIEVYVERyYXdCdWZmZXJzOjpzdXBwb3J0ZWQodGhpcykpCisgICAgaWYgKCFz
dXBwb3J0c0RyYXdCdWZmZXJzKCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICghbV9tYXhD
b2xvckF0dGFjaG1lbnRzKQogICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lv
bnMzRDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVCwgJm1fbWF4Q29sb3JBdHRhY2htZW50cyk7
CiAgICAgcmV0dXJuIG1fbWF4Q29sb3JBdHRhY2htZW50czsKIH0KIAordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnNldEJhY2tEcmF3QnVmZmVyKEdDM0RlbnVtIGJ1ZikKK3sKKyAgICBtX2Jh
Y2tEcmF3QnVmZmVyID0gYnVmOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVz
dG9yZUN1cnJlbnRGcmFtZWJ1ZmZlcigpCit7CisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICBi
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2ZyYW1lYnVm
ZmVyQmluZGluZy5nZXQoKSwgZWMpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cmVzdG9yZUN1cnJlbnRUZXh0dXJlMkQoKQoreworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAg
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZVVuaXRz
W21fYWN0aXZlVGV4dHVyZVVuaXRdLm1fdGV4dHVyZTJEQmluZGluZy5nZXQoKSwgZWMpOworfQor
Citib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3VwcG9ydHNEcmF3QnVmZmVycygpCit7Cisg
ICAgaWYgKCFtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVja2VkKSB7CisgICAgICAg
IG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0NoZWNrZWQgPSB0cnVlOworICAgICAgICBt
X2RyYXdCdWZmZXJzU3VwcG9ydGVkID0gRVhURHJhd0J1ZmZlcnM6OnN1cHBvcnRlZCh0aGlzKTsK
KyAgICB9CisgICAgcmV0dXJuIG1fZHJhd0J1ZmZlcnNTdXBwb3J0ZWQ7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShyZXZp
c2lvbiAxNDU3NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDgzLDYgKzQ4Myw5IEBAIHB1YmxpYzoKIAog
ICAgIEdDM0RpbnQgbV9tYXhEcmF3QnVmZmVyczsKICAgICBHQzNEaW50IG1fbWF4Q29sb3JBdHRh
Y2htZW50czsKKyAgICBHQzNEZW51bSBtX2JhY2tEcmF3QnVmZmVyOworICAgIGJvb2wgbV9kcmF3
QnVmZmVyc1dlYkdMUmVxdWlyZW1lbnRzQ2hlY2tlZDsKKyAgICBib29sIG1fZHJhd0J1ZmZlcnNT
dXBwb3J0ZWQ7CiAKICAgICBHQzNEaW50IG1fcGFja0FsaWdubWVudDsKICAgICBHQzNEaW50IG1f
dW5wYWNrQWxpZ25tZW50OwpAQCAtNzQ4LDYgKzc1MSwxNCBAQCBwdWJsaWM6CiAgICAgR0MzRGlu
dCBnZXRNYXhEcmF3QnVmZmVycygpOwogICAgIEdDM0RpbnQgZ2V0TWF4Q29sb3JBdHRhY2htZW50
cygpOwogCisgICAgdm9pZCBzZXRCYWNrRHJhd0J1ZmZlcihHQzNEZW51bSk7CisKKyAgICB2b2lk
IHJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIoKTsKKyAgICB2b2lkIHJlc3RvcmVDdXJyZW50VGV4
dHVyZTJEKCk7CisKKyAgICAvLyBDaGVjayBpZiBFWFRfZHJhd19idWZmZXJzIGV4dGVuc2lvbiBp
cyBzdXBwb3J0ZWQgYW5kIGlmIGl0IHNhdGlzZmllcyB0aGUgV2ViR0wgcmVxdWlyZW1lbnRzLgor
ICAgIGJvb2wgc3VwcG9ydHNEcmF3QnVmZmVycygpOworCiAgICAgZnJpZW5kIGNsYXNzIFdlYkdM
U3RhdGVSZXN0b3JlcjsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>194393</attachid>
            <date>2013-03-21 17:20:15 -0700</date>
            <delta_ts>2013-03-22 17:22:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-112359-20130321171603.patch</filename>
            <type>text/plain</type>
            <size>19154</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NjIyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDEzLTAzLTE5ICBaaGVueWFv
IE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgQ2hlY2sgV0VCR0xfZHJhd19idWZmZXJz
IHJlcXVpcmVtZW50cyBiZWZvcmUgZXhwb3NpbmcgdGhlIGV4dGVuc2lvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEyMzU5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9FWFREcmF3
QnVmZmVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFWFREcmF3QnVmZmVyczo6c3VwcG9ydGVk
KTogY2FsbCBzYXRpc2ZpZXMqKCkuCisgICAgICAgIChXZWJDb3JlOjpFWFREcmF3QnVmZmVyczo6
ZHJhd0J1ZmZlcnNFWFQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpF
WFREcmF3QnVmZmVyczo6c2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMpOiBjaGVjayBXZWJHTCBy
ZXF1aXJlbWVudHMuCisgICAgICAgICogaHRtbC9jYW52YXMvRVhURHJhd0J1ZmZlcnMuaDoKKyAg
ICAgICAgKEVYVERyYXdCdWZmZXJzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEZyYW1l
YnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmdldERyYXdC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xG
cmFtZWJ1ZmZlci5oOgorICAgICAgICAoV2ViR0xGcmFtZWJ1ZmZlcik6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmV3Q29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEV4dGVu
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFt
ZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFN1cHBv
cnRlZEV4dGVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhEcmF3QnVmZmVycyk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldE1heENvbG9yQXR0YWNobWVudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzZXRCYWNrRHJhd0J1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVDdXJyZW50
RnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpy
ZXN0b3JlQ3VycmVudFRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnN1cHBvcnRzRHJhd0J1ZmZlcnMpOiBhIGNhY2hlZCB2ZXJzaW9uIG9mIEVYVERy
YXdCdWZmZXJzOjpzdXBwb3J0cygpCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0Lmg6CisgICAgICAgIChXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorCiAyMDEzLTAz
LTE5ICBQaGlsaXAgUm9nZXJzICA8cGRyQGdvb2dsZS5jb20+CiAKICAgICAgICAgU2VwYXJhdGUg
U1ZHIGltYWdlIHNpemUgYW5kIGNvbnRhaW5lciBzaXplCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9FWFREcmF3QnVmZmVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvRVhURHJhd0J1ZmZlcnMuY3BwCShyZXZpc2lvbiAxNDU5NzIpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFREcmF3QnVmZmVycy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYwLDcgKzYwLDggQEAgYm9vbCBFWFREcmF3QnVmZmVyczo6c3VwcG9ydGVkKFdlYkdM
UmVuZAogICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5z
aW9ucyA9IGNvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKTsKLSAg
ICByZXR1cm4gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKTsKKyAg
ICByZXR1cm4gKGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfZHJhd19idWZmZXJzIikKKyAg
ICAgICAgJiYgc2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMoY29udGV4dCkpOwogfQogCiB2b2lk
IEVYVERyYXdCdWZmZXJzOjpkcmF3QnVmZmVyc0VYVChjb25zdCBWZWN0b3I8R0MzRGVudW0+JiBi
dWZmZXJzKQpAQCAtODEsNiArODIsNyBAQCB2b2lkIEVYVERyYXdCdWZmZXJzOjpkcmF3QnVmZmVy
c0VYVChjb25zCiAgICAgICAgIC8vIEJlY2F1c2UgdGhlIGJhY2tidWZmZXIgaXMgc2ltdWxhdGVk
IG9uIGFsbCBjdXJyZW50IFdlYktpdCBwb3J0cywgd2UgbmVlZCB0byBjaGFuZ2UgQkFDSyB0byBD
T0xPUl9BVFRBQ0hNRU5UMC4KICAgICAgICAgR0MzRGVudW0gdmFsdWUgPSAoYnVmc1swXSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6QkFDSykgPyBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNI
TUVOVDAgOiBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKICAgICAgICAgbV9jb250ZXh0LT5ncmFw
aGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCktPmRyYXdCdWZmZXJzRVhUKDEsICZ2YWx1
ZSk7CisgICAgICAgIG1fY29udGV4dC0+c2V0QmFja0RyYXdCdWZmZXIoYnVmc1swXSk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgaWYgKG4gPiBtX2NvbnRleHQtPmdldE1heERyYXdCdWZmZXJzKCkp
IHsKICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJkcmF3QnVmZmVyc0VYVCIsICJtb3JlIHRoYW4gbWF4IGRy
YXcgYnVmZmVycyIpOwpAQCAtOTYsNiArOTgsOTIgQEAgdm9pZCBFWFREcmF3QnVmZmVyczo6ZHJh
d0J1ZmZlcnNFWFQoY29ucwogICAgIH0KIH0KIAorLy8gc3RhdGljCitib29sIEVYVERyYXdCdWZm
ZXJzOjpzYXRpc2ZpZXNXZWJHTFJlcXVpcmVtZW50cyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIHdl
YmdsQ29udGV4dCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IHdlYmdsQ29u
dGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKworICAgIC8vIFRoaXMgaXMgY2FsbGVkIGFmdGVy
IHdlIG1ha2Ugc3VyZSBHTF9FWFRfZHJhd19idWZmZXJzIGlzIHN1cHBvcnRlZC4KKyAgICBHQzNE
aW50IG1heERyYXdCdWZmZXJzID0gMDsKKyAgICBHQzNEaW50IG1heENvbG9yQXR0YWNobWVudHMg
PSAwOworICAgIGNvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX0RSQVdfQlVG
RkVSU19FWFQsICZtYXhEcmF3QnVmZmVycyk7CisgICAgY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0
ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbWF4Q29sb3JBdHRhY2htZW50
cyk7CisgICAgaWYgKG1heERyYXdCdWZmZXJzIDwgNCB8fCBtYXhDb2xvckF0dGFjaG1lbnRzIDwg
NCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUGxhdGZvcm0zRE9iamVjdCBmYm8gPSBj
b250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIGZibyk7CisKKyNpZiBQTEFURk9STShD
SFJPTUlVTSkKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBidWZmZXIgPSAwOyAvLyBDaHJvbWl1
bSBkb2Vzbid0IGFsbG93IGluaXQgZGF0YSBmb3IgZGVwdGgvc3RlbmNpbCB0ZXR4dXJlcy4KKyNl
bHNlCisgICAgY29uc3QgdW5zaWduZWQgY2hhciBidWZmZXJbNF0gPSB7IDAsIDAsIDAsIDAgfTsg
Ly8gdGV4dHVyZXMgYXJlIHJlcXVpcmVkIHRvIGJlIGluaXRpYWxpemVkIGZvciBvdGhlciBwb3J0
cy4KKyNlbmRpZgorICAgIGJvb2wgc3VwcG9ydHNEZXB0aCA9IChjb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9DSFJPTUlVTV9kZXB0aF90ZXh0dXJlIikKKyAgICAgICAgfHwg
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX2RlcHRoX3RleHR1cmUi
KQorICAgICAgICB8fCBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9BUkJf
ZGVwdGhfdGV4dHVyZSIpKTsKKyAgICBib29sIHN1cHBvcnRzRGVwdGhTdGVuY2lsID0gKGNvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNp
bCIpCisgICAgICAgIHx8IGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09F
U19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGRlcHRoU3Rl
bmNpbCA9IDA7CisgICAgaWYgKHN1cHBvcnRzRGVwdGhTdGVuY2lsKSB7CisgICAgICAgIGRlcHRo
U3RlbmNpbCA9IGNvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKKyAgICAgICAgY29udGV4dC0+Ymlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGRlcHRoU3RlbmNpbCk7Cisg
ICAgICAgIGNvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IDAsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMLCAxLCAxLCAwLCBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfU1RFTkNJTCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8y
NF84LCBidWZmZXIpOworICAgIH0KKyAgICBQbGF0Zm9ybTNET2JqZWN0IGRlcHRoID0gMDsKKyAg
ICBpZiAoc3VwcG9ydHNEZXB0aCkgeworICAgICAgICBkZXB0aCA9IGNvbnRleHQtPmNyZWF0ZVRl
eHR1cmUoKTsKKyAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIGRlcHRoKTsKKyAgICAgICAgY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBP
TkVOVCwgMSwgMSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCwgYnVmZmVyKTsKKyAgICB9CisKKyAgICBWZWN0b3I8
UGxhdGZvcm0zRE9iamVjdD4gY29sb3JzOworICAgIGJvb2wgb2sgPSB0cnVlOworICAgIEdDM0Rp
bnQgbWF4QWxsb3dlZEJ1ZmZlcnMgPSBzdGQ6Om1pbihtYXhEcmF3QnVmZmVycywgbWF4Q29sb3JB
dHRhY2htZW50cyk7CisgICAgZm9yIChHQzNEaW50IGkgPSAwOyBpIDwgbWF4QWxsb3dlZEJ1ZmZl
cnM7ICsraSkgeworICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IGNvbG9yID0gY29udGV4dC0+Y3Jl
YXRlVGV4dHVyZSgpOworICAgICAgICBjb2xvcnMuYXBwZW5kKGNvbG9yKTsKKyAgICAgICAgY29u
dGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbG9yKTsK
KyAgICAgICAgY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYnVmZmVyKTsKKyAgICAg
ICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAgKyBpLCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgY29sb3IsIDApOworICAgICAgICBjb250ZXh0LT5mcmFt
ZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgMCwgMCk7CisgICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNI
TUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDApOworICAgICAgICBpZiAo
Y29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgeworICAg
ICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGlmIChzdXBwb3J0c0RlcHRoKSB7CisgICAgICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZl
clRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4
dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgZGVw
dGgsIDApOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGV4dC0+ZnJh
bWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIDAsIDApOworICAgICAgICB9CisgICAgICAgIGlmIChzdXBwb3J0c0RlcHRoU3RlbmNpbCkg
eworICAgICAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGRlcHRoU3RlbmNpbCwgMCk7CisgICAgICAg
ICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBkZXB0aFN0ZW5jaWwsIDApOworICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKKyAg
ICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNI
TUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDApOworICAgICAgICAgICAg
Y29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgMCwgMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB3ZWJnbENv
bnRleHQtPnJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIoKTsKKyAgICBjb250ZXh0LT5kZWxldGVG
cmFtZWJ1ZmZlcihmYm8pOworICAgIHdlYmdsQ29udGV4dC0+cmVzdG9yZUN1cnJlbnRUZXh0dXJl
MkQoKTsKKyAgICBpZiAoc3VwcG9ydHNEZXB0aCkKKyAgICAgICAgY29udGV4dC0+ZGVsZXRlVGV4
dHVyZShkZXB0aCk7CisgICAgaWYgKHN1cHBvcnRzRGVwdGhTdGVuY2lsKQorICAgICAgICBjb250
ZXh0LT5kZWxldGVUZXh0dXJlKGRlcHRoU3RlbmNpbCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjb2xvcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIGNvbnRleHQtPmRlbGV0ZVRleHR1cmUo
Y29sb3JzW2ldKTsKKyAgICByZXR1cm4gb2s7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0VYVERyYXdCdWZmZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvRVhURHJhd0J1ZmZlcnMuaAkocmV2aXNpb24gMTQ1Nzc1KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvRVhURHJhd0J1ZmZlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiAr
NDQsOCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgRVhURHJhd0J1ZmZlcnMoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Kik7CisKKyAgICBzdGF0aWMgYm9vbCBzYXRpc2ZpZXNXZWJHTFJlcXVpcmVt
ZW50cyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZm
ZXIuY3BwCShyZXZpc2lvbiAxNDU3NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTEZyYW1lYnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjI0LDYgKzYyNCwxNyBAQCB2
b2lkIFdlYkdMRnJhbWVidWZmZXI6OmRyYXdCdWZmZXJzSWZOZWNlCiAgICAgfQogfQogCitHQzNE
ZW51bSBXZWJHTEZyYW1lYnVmZmVyOjpnZXREcmF3QnVmZmVyKEdDM0RlbnVtIGRyYXdCdWZmZXIp
Cit7CisgICAgaW50IGluZGV4ID0gc3RhdGljX2Nhc3Q8aW50PihkcmF3QnVmZmVyIC0gRXh0ZW5z
aW9uczNEOjpEUkFXX0JVRkZFUjBfRVhUKTsKKyAgICBBU1NFUlQoaW5kZXggPj0gMCk7CisgICAg
aWYgKGluZGV4IDwgc3RhdGljX2Nhc3Q8aW50PihtX2RyYXdCdWZmZXJzLnNpemUoKSkpCisgICAg
ICAgIHJldHVybiBtX2RyYXdCdWZmZXJzW2luZGV4XTsKKyAgICBpZiAoZHJhd0J1ZmZlciA9PSBF
eHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSMF9FWFQpCisgICAgICAgIHJldHVybiBHcmFwaGljc0Nv
bnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDA7CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNE
OjpOT05FOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCShyZXZpc2lvbiAxNDU3
NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDggQEAgcHVibGljOgogICAgIC8vIFdyYXBwZXIgZm9y
IGRyYXdCdWZmZXJzRVhUL2RyYXdCdWZmZXJzQVJCIHRvIHdvcmsgYXJvdW5kIGEgZHJpdmVyIGJ1
Zy4KICAgICB2b2lkIGRyYXdCdWZmZXJzKGNvbnN0IFZlY3RvcjxHQzNEZW51bT4mIGJ1ZnMpOwog
CisgICAgR0MzRGVudW0gZ2V0RHJhd0J1ZmZlcihHQzNEZW51bSk7CisKIHByb3RlY3RlZDoKICAg
ICBXZWJHTEZyYW1lYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHAJKHJldmlzaW9uIDE0NTc3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1MCw2ICs1NTAsMTAgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVOZQogICAgIG1fbWF4RHJhd0J1
ZmZlcnMgPSAwOwogICAgIG1fbWF4Q29sb3JBdHRhY2htZW50cyA9IDA7CiAKKyAgICBtX2JhY2tE
cmF3QnVmZmVyID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJBQ0s7CisgICAgbV9kcmF3QnVmZmVyc1dl
YkdMUmVxdWlyZW1lbnRzQ2hlY2tlZCA9IGZhbHNlOworICAgIG1fZHJhd0J1ZmZlcnNTdXBwb3J0
ZWQgPSBmYWxzZTsKKwogICAgIG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0ID0gV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUzo6Y3JlYXRlKHRoaXMsIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6
OlZhb1R5cGVEZWZhdWx0KTsKICAgICBhZGRDb250ZXh0T2JqZWN0KG1fZGVmYXVsdFZlcnRleEFy
cmF5T2JqZWN0LmdldCgpKTsKICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBtX2RlZmF1
bHRWZXJ0ZXhBcnJheU9iamVjdDsKQEAgLTI0NTUsNyArMjQ1OSw3IEBAIFdlYkdMRXh0ZW5zaW9u
KiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmcKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbV93
ZWJnbERlcHRoVGV4dHVyZS5nZXQoKTsKICAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KG5hbWUsICJFWFRfZHJhd19idWZmZXJzIikgJiYgRVhURHJhd0J1ZmZlcnM6OnN1cHBvcnRlZCh0
aGlzKSkgeworICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiRVhUX2RyYXdfYnVmZmVy
cyIpICYmIHN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkgewogICAgICAgICBpZiAoIW1fZXh0RHJhd0J1
ZmZlcnMpIHsKICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVF
bmFibGVkKCJHTF9FWFRfZHJhd19idWZmZXJzIik7CiAgICAgICAgICAgICBtX2V4dERyYXdCdWZm
ZXJzID0gRVhURHJhd0J1ZmZlcnM6OmNyZWF0ZSh0aGlzKTsKQEAgLTI3NTUsNDEgKzI3NTksMTcg
QEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UAogICAgICAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhnZXRNYXhEcmF3QnVmZmVycygpKTsKICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRl
ciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBFWFRfZHJhd19idWZmZXJzIG5vdCBlbmFibGVk
Iik7CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6RFJBV19CVUZGRVIwX0VYVDogLy8gRFJBV19CVUZGRVIwX0VYVCBpcyBzcGVjaWFsIGFzIHRo
ZSBiYWNrYnVmZmVyIGlzIHNpbXVsYXRlZC4KLSAgICAgICAgaWYgKG1fZXh0RHJhd0J1ZmZlcnMp
IHsKLSAgICAgICAgICAgIEdDM0RpbnQgdmFsdWUgPSAwOwotICAgICAgICAgICAgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihwbmFtZSwgJnZhbHVlKTsKLSAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1
ZmZlckJpbmRpbmcgJiYgdmFsdWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpCi0gICAgICAg
ICAgICAgICAgdmFsdWUgPSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSzsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBpZiAobV9leHREcmF3QnVmZmVycworICAgICAgICAgICAgJiYgcG5hbWUgPj0gRXh0
ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBfRVhUCisgICAgICAgICAgICAmJiBwbmFtZSA8IHN0YXRp
Y19jYXN0PEdDM0RlbnVtPihFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSMF9FWFQgKyBnZXRNYXhE
cmF3QnVmZmVycygpKSkgeworICAgICAgICAgICAgR0MzRGludCB2YWx1ZSA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpOT05FOworICAgICAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAg
ICAgICAgICAgICAgIHZhbHVlID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldERyYXdCdWZmZXIo
cG5hbWUpOworICAgICAgICAgICAgZWxzZSAvLyBlbXVsYXRlZCBiYWNrYnVmZmVyCisgICAgICAg
ICAgICAgICAgdmFsdWUgPSBtX2JhY2tEcmF3QnVmZmVyOwogICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyh2YWx1ZSk7CiAgICAgICAgIH0KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlk
IHBhcmFtZXRlciBuYW1lLCBFWFRfZHJhd19idWZmZXJzIG5vdCBlbmFibGVkIik7Ci0gICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RFJBV19CVUZG
RVIxX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIyX0VYVDoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIzX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6RFJBV19CVUZGRVI0X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVI1
X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVI2X0VYVDoKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVI3X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
RFJBV19CVUZGRVI4X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVI5X0VY
VDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIxMF9FWFQ6Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSMTFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpE
UkFXX0JVRkZFUjEyX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIxM19F
WFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSMTRfRVhUOgotICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjE1X0VYVDogLy8gRVhUX2RyYXdfYnVmZmVycyBFTkQK
LSAgICAgICAgaWYgKG1fZXh0RHJhd0J1ZmZlcnMpIHsKLSAgICAgICAgICAgIGlmIChzdGF0aWNf
Y2FzdDxHQzNEZW51bT4oRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBfRVhUICsgZ2V0TWF4RHJh
d0J1ZmZlcnMoKSkgPD0gcG5hbWUpIHsKLSAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFs
aWQgcGFyYW1ldGVyLCBleGNlZWRzIE1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQiKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICAgICAgfQotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFy
YW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIEVYVF9kcmF3X2J1ZmZlcnMgbm90IGVu
YWJsZWQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIGRlZmF1bHQ6CiAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwogICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgfQpAQCAtMjk5NSw3ICsyOTc1LDcgQEAgVmVjdG9yPFN0
cmluZz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZQogICAgICAgICByZXN1bHQuYXBwZW5kKCJX
RUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKTsKICAgICBpZiAoV2ViR0xEZXB0
aFRleHR1cmU6OnN1cHBvcnRlZChncmFwaGljc0NvbnRleHQzRCgpKSkKICAgICAgICAgcmVzdWx0
LmFwcGVuZCgiV0VCS0lUX1dFQkdMX2RlcHRoX3RleHR1cmUiKTsKLSAgICBpZiAoRVhURHJhd0J1
ZmZlcnM6OnN1cHBvcnRlZCh0aGlzKSkKKyAgICBpZiAoc3VwcG9ydHNEcmF3QnVmZmVycygpKQog
ICAgICAgICByZXN1bHQuYXBwZW5kKCJFWFRfZHJhd19idWZmZXJzIik7CiAKICAgICBpZiAoYWxs
b3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpKSB7CkBAIC01NTQ4LDMyICs1NTI4LDExIEBAIGJvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUZyYW0KICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQ6CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDFfRVhUOiAvLyBFWFRfZHJhd19idWZmZXJzIEJFR0lO
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQyX0VYVDoKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDNfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpDT0xPUl9BVFRBQ0hNRU5UNF9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9S
X0FUVEFDSE1FTlQ1X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVO
VDZfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hNRU5UN19FWFQ6Ci0g
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQ4X0VYVDoKLSAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDlfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpDT0xPUl9BVFRBQ0hNRU5UMTBfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xPUl9B
VFRBQ0hNRU5UMTFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hNRU5U
MTJfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hNRU5UMTNfRVhUOgot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hNRU5UMTRfRVhUOgotICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hNRU5UMTVfRVhUOiAvLyBFWFRfZHJhd19idWZmZXJz
IEVORAotICAgICAgICAvLyBDT0xPUl9BVFRBQ0hNRU5UMF9FWFQgaXMgZXF1YWwgdG8gQ09MT1Jf
QVRUQUNITUVOVDAuCi0gICAgICAgIGlmICghbV9leHREcmF3QnVmZmVycykgewotICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVu
Y3Rpb25OYW1lLCAiaW52YWxpZCBhdHRhY2htZW50LCBFWFRfZHJhd19idWZmZXJzIG5vdCBlbmFi
bGVkIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KHN0YXRpY19jYXN0PEdDM0RlbnVtPihFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQwX0VY
VCArIGdldE1heENvbG9yQXR0YWNobWVudHMoKSkgPD0gYXR0YWNobWVudCkgewotICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVu
Y3Rpb25OYW1lLCAiaW52YWxpZCBhdHRhY2htZW50LCBleGNlZWRzIE1BWF9EUkFXX0JVRkZFUlNf
RVhUIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKG1fZXh0RHJhd0J1ZmZlcnMKKyAgICAgICAg
ICAgICYmIGF0dGFjaG1lbnQgPiBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAK
KyAgICAgICAgICAgICYmIGF0dGFjaG1lbnQgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwICsgZ2V0TWF4Q29sb3JBdHRhY2htZW50cygp
KSkKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGF0dGFjaG1l
bnQiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTYwOTEsMTggKzYwNTAsNTEg
QEAgSW50U2l6ZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsYW1wZWRDYQogCiBHQzNEaW50IFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0TWF4RHJhd0J1ZmZlcnMoKQogewotICAgIGlmICghbV9t
YXhEcmF3QnVmZmVycyAmJiBFWFREcmF3QnVmZmVyczo6c3VwcG9ydGVkKHRoaXMpKQorICAgIGlm
ICghc3VwcG9ydHNEcmF3QnVmZmVycygpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIW1f
bWF4RHJhd0J1ZmZlcnMpCiAgICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9u
czNEOjpNQVhfRFJBV19CVUZGRVJTX0VYVCwgJm1fbWF4RHJhd0J1ZmZlcnMpOwotICAgIHJldHVy
biBtX21heERyYXdCdWZmZXJzOworICAgIGlmICghbV9tYXhDb2xvckF0dGFjaG1lbnRzKQorICAg
ICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX0NPTE9SX0FUVEFD
SE1FTlRTX0VYVCwgJm1fbWF4Q29sb3JBdHRhY2htZW50cyk7CisgICAgLy8gV0VCR0xfZHJhd19i
dWZmZXJzIHJlcXVpcmVzIE1BWF9DT0xPUl9BVFRBQ0hNRU5UUyA+PSBNQVhfRFJBV19CVUZGRVJT
LgorICAgIHJldHVybiBzdGQ6Om1pbihtX21heERyYXdCdWZmZXJzLCBtX21heENvbG9yQXR0YWNo
bWVudHMpOwogfQogCiBHQzNEaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0TWF4Q29sb3JB
dHRhY2htZW50cygpCiB7Ci0gICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMgJiYgRVhURHJh
d0J1ZmZlcnM6OnN1cHBvcnRlZCh0aGlzKSkKKyAgICBpZiAoIXN1cHBvcnRzRHJhd0J1ZmZlcnMo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCiAg
ICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRU
QUNITUVOVFNfRVhULCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKICAgICByZXR1cm4gbV9tYXhD
b2xvckF0dGFjaG1lbnRzOwogfQogCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2V0QmFj
a0RyYXdCdWZmZXIoR0MzRGVudW0gYnVmKQoreworICAgIG1fYmFja0RyYXdCdWZmZXIgPSBidWY7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlQ3VycmVudEZyYW1lYnVm
ZmVyKCkKK3sKKyAgICBFeGNlcHRpb25Db2RlIGVjOworICAgIGJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpLCBl
Yyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlQ3VycmVudFRleHR1
cmUyRCgpCit7CisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICBiaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5p
dF0ubV90ZXh0dXJlMkRCaW5kaW5nLmdldCgpLCBlYyk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpzdXBwb3J0c0RyYXdCdWZmZXJzKCkKK3sKKyAgICBpZiAoIW1fZHJhd0J1ZmZl
cnNXZWJHTFJlcXVpcmVtZW50c0NoZWNrZWQpIHsKKyAgICAgICAgbV9kcmF3QnVmZmVyc1dlYkdM
UmVxdWlyZW1lbnRzQ2hlY2tlZCA9IHRydWU7CisgICAgICAgIG1fZHJhd0J1ZmZlcnNTdXBwb3J0
ZWQgPSBFWFREcmF3QnVmZmVyczo6c3VwcG9ydGVkKHRoaXMpOworICAgIH0KKyAgICByZXR1cm4g
bV9kcmF3QnVmZmVyc1N1cHBvcnRlZDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDE0NTc3NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00ODMsNiArNDgzLDkgQEAgcHVibGljOgogCiAgICAgR0MzRGludCBtX21heERy
YXdCdWZmZXJzOwogICAgIEdDM0RpbnQgbV9tYXhDb2xvckF0dGFjaG1lbnRzOworICAgIEdDM0Rl
bnVtIG1fYmFja0RyYXdCdWZmZXI7CisgICAgYm9vbCBtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJl
bWVudHNDaGVja2VkOworICAgIGJvb2wgbV9kcmF3QnVmZmVyc1N1cHBvcnRlZDsKIAogICAgIEdD
M0RpbnQgbV9wYWNrQWxpZ25tZW50OwogICAgIEdDM0RpbnQgbV91bnBhY2tBbGlnbm1lbnQ7CkBA
IC03NDgsNiArNzUxLDE0IEBAIHB1YmxpYzoKICAgICBHQzNEaW50IGdldE1heERyYXdCdWZmZXJz
KCk7CiAgICAgR0MzRGludCBnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCk7CiAKKyAgICB2b2lkIHNl
dEJhY2tEcmF3QnVmZmVyKEdDM0RlbnVtKTsKKworICAgIHZvaWQgcmVzdG9yZUN1cnJlbnRGcmFt
ZWJ1ZmZlcigpOworICAgIHZvaWQgcmVzdG9yZUN1cnJlbnRUZXh0dXJlMkQoKTsKKworICAgIC8v
IENoZWNrIGlmIEVYVF9kcmF3X2J1ZmZlcnMgZXh0ZW5zaW9uIGlzIHN1cHBvcnRlZCBhbmQgaWYg
aXQgc2F0aXNmaWVzIHRoZSBXZWJHTCByZXF1aXJlbWVudHMuCisgICAgYm9vbCBzdXBwb3J0c0Ry
YXdCdWZmZXJzKCk7CisKICAgICBmcmllbmQgY2xhc3MgV2ViR0xTdGF0ZVJlc3RvcmVyOwogfTsK
IAo=
</data>
<flag name="review"
          id="216156"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>