<?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>73634</bug_id>
          
          <creation_ts>2011-12-02 01:44:16 -0800</creation_ts>
          <short_desc>[GTK] Add TextureMapper ImageBuffer support as a fallback from the hardware accelerated path</short_desc>
          <delta_ts>2012-06-14 13:38:08 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>73655</dependson>
    
    <dependson>73713</dependson>
          <blocked>74087</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alejandro G. Castro">alex</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>eoin.shanaghy</cc>
    
    <cc>gustavo</cc>
    
    <cc>kevin.cs.oh</cc>
    
    <cc>mrobinson</cc>
    
    <cc>nayankk</cc>
    
    <cc>noam</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>513618</commentid>
    <comment_count>0</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-12-02 01:44:16 -0800</bug_when>
    <thetext>This bug follows the initial implementation of TextureMapperCairo that adds the initial glue for the accelerated compositing support in GTK+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513880</commentid>
    <comment_count>1</comment_count>
      <attachid>117643</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-12-02 10:03:49 -0800</bug_when>
    <thetext>Created attachment 117643
Proposed patch

This is the initial proposal, I still have to solve issues with the transformation matrix, the perspective does not work and some other issues. But if you have time to check it and send feedback (thanks in advance Noam and others ;) that would be great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513974</commentid>
    <comment_count>2</comment_count>
      <attachid>117660</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-12-02 11:32:43 -0800</bug_when>
    <thetext>Created attachment 117660
Proposed patch

Added proper defines</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514216</commentid>
    <comment_count>3</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-12-02 15:14:43 -0800</bug_when>
    <thetext>
&gt; This is the initial proposal, I still have to solve issues with the transformation matrix, the perspective does not work and some other issues. But if you have time to check it and send feedback (thanks in advance Noam and others ;) that would be great.

Hi Alejandro
I&apos;d be happy to help out, but most of this code seems to be very Cairo specific, which I&apos;m not very well versed with. In general you seem to be tackling the right pieces in a good way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514662</commentid>
    <comment_count>4</comment_count>
      <attachid>117787</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-12-04 02:07:21 -0800</bug_when>
    <thetext>Created attachment 117787
Proposed patch

New version of the patch, it is limited in how we get the transformation matrix because we are using cairo affine transformations, I&apos;ll try to check if we can someway make a projection of the other parts of the matrix instead of just use some of them, like we do in:

    const cairo_matrix_t cairoMatrix = cairo_matrix_t(matrix);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514663</commentid>
    <comment_count>5</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-12-04 02:08:17 -0800</bug_when>
    <thetext>Also the timer for the animation is just the straighforward solution we can get way better result than with the timeouts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514665</commentid>
    <comment_count>6</comment_count>
      <attachid>117787</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-04 02:53:02 -0800</bug_when>
    <thetext>Comment on attachment 117787
Proposed patch

Attachment 117787 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10731445

New failing tests:
svg/custom/linking-uri-01-b.svg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514669</commentid>
    <comment_count>7</comment_count>
      <attachid>117787</attachid>
    <who name="Joone Hur">joone.hur</who>
    <bug_when>2011-12-04 03:38:55 -0800</bug_when>
    <thetext>Comment on attachment 117787
Proposed patch

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

&gt; Source/WebKit/gtk/webkit/webkitwebviewprivate.h:38
&gt; +#include &quot;TextureMapperNode.h&quot;

I think we need to add USE(TEXTURE_MAPPER_CAIRO) here because it may have a conflict with my patch https://bugs.webkit.org/show_bug.cgi?id=73319</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559172</commentid>
    <comment_count>8</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-17 07:11:03 -0800</bug_when>
    <thetext>This patch no longer builds. I guess it&apos;s because of some recent changes in the TextureMapper:


In file included from ../../../Source/WebCore/platform/graphics/cairo/TextureMapperCairo.cpp:23:0:
../../../Source/WebCore/platform/graphics/cairo/TextureMapperCairo.h: In static member function ‘static WTF::PassOwnPtr&lt;WebCore::TextureMapper&gt; WebCore::TextureMapperCairo::create()’:
../../../Source/WebCore/platform/graphics/cairo/TextureMapperCairo.h:75:69: error: cannot allocate an object of abstract type ‘WebCore::TextureMapperCairo’
../../../Source/WebCore/platform/graphics/cairo/TextureMapperCairo.h:59:7: note:   because the following virtual functions are pure within ‘WebCore::TextureMapperCairo’:
../../../Source/WebCore/platform/graphics/texmap/TextureMapper.h:109:30: note: 	virtual WebCore::TextureMapper::AccelerationMode WebCore::TextureMapper::accelerationMode() const
../../../Source/WebCore/platform/graphics/cairo/TextureMapperCairo.cpp: In member function ‘virtual WTF::PassRefPtr&lt;WebCore::BitmapTexture&gt; WebCore::TextureMapperCairo::createTexture()’:
../../../Source/WebCore/platform/graphics/cairo/TextureMapperCairo.cpp:236:44: error: cannot allocate an object of abstract type ‘WebCore::BitmapTextureCairo’
../../../Source/WebCore/platform/graphics/cairo/TextureMapperCairo.h:31:7: note:   because the following virtual functions are pure within ‘WebCore::BitmapTextureCairo’:
../../../Source/WebCore/platform/graphics/texmap/TextureMapper.h:60:18: note: 	virtual void WebCore::BitmapTexture::updateContents(WebCore::Image*, const WebCore::IntRect&amp;, const WebCore::IntRect&amp;, WebCore::BitmapTexture::PixelFormat)
../../../Source/WebCore/platform/graphics/texmap/TextureMapper.h:61:18: note: 	virtual void WebCore::BitmapTexture::updateContents(const void*, const WebCore::IntRect&amp;)
../../../Source/WebCore/platform/graphics/cairo/TextureMapperCairo.cpp:237:1: warning: control reaches end of non-void function [-Wreturn-type]
make[1]: *** [Source/WebCore/platform/graphics/cairo/libWebCoreGtk_la-TextureMapperCairo.lo] Error 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559173</commentid>
    <comment_count>9</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-17 07:11:55 -0800</bug_when>
    <thetext>Also, TextureMapperNode was renamed to TextureMapperLayer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559174</commentid>
    <comment_count>10</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-17 07:14:49 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Also, TextureMapperNode was renamed to TextureMapperLayer.

Folks, I&apos;m doing lots of work on TextureMapper. If you guys finish upstreaming this or other changes I&apos;d be happy to make sure I don&apos;t break it :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631562</commentid>
    <comment_count>11</comment_count>
      <attachid>143550</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2012-05-23 05:55:58 -0700</bug_when>
    <thetext>Created attachment 143550
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631970</commentid>
    <comment_count>12</comment_count>
      <attachid>143550</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-23 13:24:31 -0700</bug_when>
    <thetext>Comment on attachment 143550
Proposed patch

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

Looking pretty good. Just a few small suggestions. Do we lose any information by immediately converting the transformation matrix to an affine transformation instead of building up a transformation matrix and then converting it to an affine transformation when necessary? 

Just for you information, I have plans to eliminate the different AC paths and just have the GL one. When GL fails, we&apos;ll just fall back to ImageBuffer.

&gt; Source/WebCore/ChangeLog:3
&gt; +        [GTK] [GTK] Add TextureMapper ImageBuffer support as a fallback

Two [GTK]s here. :)

&gt; Source/WebCore/platform/graphics/cairo/GraphicsContext3DPrivate.cpp:93
&gt; +#if USE(ACCELERATED_COMPOSITING) &amp;&amp; USE(TEXTURE_MAPPER) &amp;&amp; USE(TEXTURE_MAPPER_CAIRO)
&gt; +void GraphicsContext3DPrivate::paintToTextureMapper(TextureMapper* textureMapper, const FloatRect&amp; targetRect, const TransformationMatrix&amp; matrix, float opacity, BitmapTexture* mask)
&gt; +{
&gt; +}
&gt; +#endif // USE(ACCELERATED_COMPOSITING)

It should be possible to support both TextureMappers at once. Take a look at the Qt version of paintToTextureMapper.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperImageBuffer.cpp:44
&gt; +    IntRect srcRect(sourceOffset, targetRect.size());
&gt; +    m_image-&gt;context()-&gt;platformContext()-&gt;drawSurfaceToContext(surface.get(), targetRect, srcRect, m_image-&gt;context());

You should be able to specify srcRect inline like this 

m_image-&gt;context()-&gt;platformContext()-&gt;drawSurfaceToContext(surface.get(), targetRect, IntRect(sourceOffset, targetRect.size()), m_image-&gt;context());

&gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContext.h:61
&gt;      bool enabled();

I think it makes sense to just add the cairo_t* parameter to renderLayersToWindow and have it unused in the GL version. That would elminate the ifdef here.

&gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContext.h:86
&gt; +#elif USE(TEXTURE_MAPPER_CAIRO)
&gt; +    WebCore::TextureMapperLayer* m_rootTextureMapperLayer;
&gt; +    OwnPtr&lt;WebCore::GraphicsLayer&gt; m_rootGraphicsLayer;
&gt; +    OwnPtr&lt;WebCore::TextureMapper&gt; m_textureMapper;

Can you unify the shared variables by putting them under #if USE(TEXTURE_MAPPER)?

&gt; Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:544
&gt; +#if USE(TEXTURE_MAPPER_CAIRO)
&gt; +        gtk_widget_queue_draw_area(GTK_WIDGET(m_webView),
&gt; +                                   rect.x(), rect.y(),
&gt; +                                   rect.width(), rect.height());
&gt; +#endif

Is it possible to simply move this to scheduleRootLayerRepaint?

&gt; Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:605
&gt; +#if USE(TEXTURE_MAPPER_GL)
&gt;      m_webView-&gt;priv-&gt;acceleratedCompositingContext-&gt;renderLayersToWindow(rect);
&gt;  #endif

I think it would be possible to avoid this #ifdef here by simply passing 0 for the cairo_t * and exiting renderLayersToWindow early.

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:1014
&gt; +    WebKitWebViewPrivate* priv = WEBKIT_WEB_VIEW(widget)-&gt;priv;

Thanks for cleaning this up!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635309</commentid>
    <comment_count>13</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2012-05-28 10:28:07 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 143550 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=143550&amp;action=review
&gt; 
&gt; Looking pretty good. Just a few small suggestions. Do we lose any information by immediately converting the transformation matrix to an affine transformation instead of building up a transformation matrix and then converting it to an affine transformation when necessary? 
&gt; 

Yep, we are losing information, namely perspective information. I&apos;ve added a FIXME in the patch but I&apos;ll try to check if we can do it later.

&gt; &gt; Source/WebCore/ChangeLog:3
&gt; &gt; +        [GTK] [GTK] Add TextureMapper ImageBuffer support as a fallback
&gt; 
&gt; Two [GTK]s here. :)
&gt; 

Oops :).

&gt; &gt; Source/WebCore/platform/graphics/cairo/GraphicsContext3DPrivate.cpp:93
&gt; &gt; +#if USE(ACCELERATED_COMPOSITING) &amp;&amp; USE(TEXTURE_MAPPER) &amp;&amp; USE(TEXTURE_MAPPER_CAIRO)
&gt; &gt; +void GraphicsContext3DPrivate::paintToTextureMapper(TextureMapper* textureMapper, const FloatRect&amp; targetRect, const TransformationMatrix&amp; matrix, float opacity, BitmapTexture* mask)
&gt; &gt; +{
&gt; &gt; +}
&gt; &gt; +#endif // USE(ACCELERATED_COMPOSITING)
&gt; 
&gt; It should be possible to support both TextureMappers at once. Take a look at the Qt version of paintToTextureMapper.
&gt; 

I&apos;ll add that part, thanks.

&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperImageBuffer.cpp:44
&gt; &gt; +    IntRect srcRect(sourceOffset, targetRect.size());
&gt; &gt; +    m_image-&gt;context()-&gt;platformContext()-&gt;drawSurfaceToContext(surface.get(), targetRect, srcRect, m_image-&gt;context());
&gt; 
&gt; You should be able to specify srcRect inline like this 
&gt; 
&gt; m_image-&gt;context()-&gt;platformContext()-&gt;drawSurfaceToContext(surface.get(), targetRect, IntRect(sourceOffset, targetRect.size()), m_image-&gt;context());
&gt;

Yep.

&gt; &gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContext.h:61
&gt; &gt;      bool enabled();
&gt; 
&gt; I think it makes sense to just add the cairo_t* parameter to renderLayersToWindow and have it unused in the GL version. That would elminate the ifdef here.
&gt; 

Ok, I&apos;ll do that.

&gt; &gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContext.h:86
&gt; &gt; +#elif USE(TEXTURE_MAPPER_CAIRO)
&gt; &gt; +    WebCore::TextureMapperLayer* m_rootTextureMapperLayer;
&gt; &gt; +    OwnPtr&lt;WebCore::GraphicsLayer&gt; m_rootGraphicsLayer;
&gt; &gt; +    OwnPtr&lt;WebCore::TextureMapper&gt; m_textureMapper;
&gt; 
&gt; Can you unify the shared variables by putting them under #if USE(TEXTURE_MAPPER)?
&gt;

I think so, I&apos;ll change it.

&gt; &gt; Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:544
&gt; &gt; +#if USE(TEXTURE_MAPPER_CAIRO)
&gt; &gt; +        gtk_widget_queue_draw_area(GTK_WIDGET(m_webView),
&gt; &gt; +                                   rect.x(), rect.y(),
&gt; &gt; +                                   rect.width(), rect.height());
&gt; &gt; +#endif
&gt; 
&gt; Is it possible to simply move this to scheduleRootLayerRepaint?
&gt;

I&apos;ll check if we can do it.

&gt; &gt; Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:605
&gt; &gt; +#if USE(TEXTURE_MAPPER_GL)
&gt; &gt;      m_webView-&gt;priv-&gt;acceleratedCompositingContext-&gt;renderLayersToWindow(rect);
&gt; &gt;  #endif
&gt; 
&gt; I think it would be possible to avoid this #ifdef here by simply passing 0 for the cairo_t * and exiting renderLayersToWindow early.
&gt;

Yep, I can replace the interface of the function like you suggested.

&gt; &gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:1014
&gt; &gt; +    WebKitWebViewPrivate* priv = WEBKIT_WEB_VIEW(widget)-&gt;priv;
&gt; 
&gt; Thanks for cleaning this up!

Your welcome! :)

Thanks for the thorough review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635850</commentid>
    <comment_count>14</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2012-05-29 04:12:26 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (From update of attachment 143550 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=143550&amp;action=review
&gt; &gt; 
&gt; &gt; Looking pretty good. Just a few small suggestions. Do we lose any information by immediately converting the transformation matrix to an affine transformation instead of building up a transformation matrix and then converting it to an affine transformation when necessary? 
&gt; &gt; 
&gt; 
&gt; Yep, we are losing information, namely perspective information. I&apos;ve added a FIXME in the patch but I&apos;ll try to check if we can do it later.

Just checked the only function using the get3DTransform is the beginClip and we are getting a transformation that could be a mix of 2D and 3D transforms converted at that point. So we would have to check all the transformations and try to approximate the perspective some other way if we want to do something smarter. I guess we can do that in next patches if we find a good way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635855</commentid>
    <comment_count>15</comment_count>
      <attachid>144511</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2012-05-29 04:18:35 -0700</bug_when>
    <thetext>Created attachment 144511
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636048</commentid>
    <comment_count>16</comment_count>
      <attachid>144511</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-29 08:23:39 -0700</bug_when>
    <thetext>Comment on attachment 144511
Proposed patch

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

Looking good. r+ though there are a few things to fix before landing.

&gt; Source/WebCore/ChangeLog:4
&gt; +        [GTK] Add TextureMapper ImageBuffer support as a fallback
&gt; +        from the hardware accelerated path

Careful here, I don&apos;t think there should be a newline in the description.

&gt; Source/WebCore/platform/graphics/cairo/GraphicsContext3DPrivate.cpp:30
&gt; +#if USE(ACCELERATED_COMPOSITING) &amp;&amp; USE(TEXTURE_MAPPER) &amp;&amp; USE(TEXTURE_MAPPER_CAIRO)

Are you sure you want to guard the inclusion of TextureMapperGL.h with TEXTURE_MAPPER_CAIRO?

&gt; Source/WebCore/platform/graphics/cairo/GraphicsContext3DPrivate.cpp:87
&gt; +        glBindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_context-&gt;m_fbo);
&gt; +        glReadPixels(/* x */ 0, /* y */ 0, width, height, GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNED_BYTE, imagePixels);
&gt; +        glBindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_context-&gt;m_boundFBO);

You should set the GL_PACK_ROW_LENGTH to the stride of the image. While in practice this works with many images, I think that this code could break in some cases if you do not. So for instance you would call glPixelStorei(GL_PACK_ROW_LENGTH, stride / 4).

&gt; Source/WebCore/platform/graphics/cairo/GraphicsContext3DPrivate.cpp:91
&gt; +        context-&gt;platformContext()-&gt;drawSurfaceToContext(offscreenImage.get(), targetRect,

This can be one line.

&gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContextCairo.cpp:107
&gt; +    gtk_widget_queue_draw_area(GTK_WIDGET(m_webView),
&gt; +                               rect.x(), rect.y(),
&gt; +                               rect.width(), rect.height());

This can be one line.

&gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContextCairo.cpp:169
&gt; +    copyRectFromCairoSurfaceToContext(m_webView-&gt;priv-&gt;backingStore-&gt;cairoSurface(), cr,
&gt; +                                      IntSize(), rectToPaint);

One line again.

&gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContextClutter.cpp:56
&gt; +qbool AcceleratedCompositingContext::renderLayersToWindow(cairo_t*, const IntRect&amp; clipRect)

I think you may have accidentally inserted an extra q here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645023</commentid>
    <comment_count>17</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2012-06-08 14:16:24 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 144511 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=144511&amp;action=review
&gt; 
&gt; Looking good. r+ though there are a few things to fix before landing.
&gt; 

Thanks for the review, I&apos;ve checked all the comments and modified a little bit the implementation, so I&apos;ll upload a new patch to review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645036</commentid>
    <comment_count>18</comment_count>
      <attachid>146650</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2012-06-08 14:32:23 -0700</bug_when>
    <thetext>Created attachment 146650
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645080</commentid>
    <comment_count>19</comment_count>
      <attachid>146650</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-06-08 15:44:58 -0700</bug_when>
    <thetext>Comment on attachment 146650
Proposed patch

Attachment 146650 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12909736</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645099</commentid>
    <comment_count>20</comment_count>
      <attachid>146650</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-06-08 15:59:40 -0700</bug_when>
    <thetext>Comment on attachment 146650
Proposed patch

Attachment 146650 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12910746</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645902</commentid>
    <comment_count>21</comment_count>
      <attachid>146829</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2012-06-11 04:27:36 -0700</bug_when>
    <thetext>Created attachment 146829
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647194</commentid>
    <comment_count>22</comment_count>
      <attachid>146829</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-06-12 12:52:59 -0700</bug_when>
    <thetext>Comment on attachment 146829
Proposed patch

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

Okay. This is a good start. Now we just need to unify the GL and ImageBuffer implementations.

&gt; Source/WebCore/platform/graphics/cairo/GraphicsContext3DPrivate.cpp:99
&gt; +        // OpenGL keeps the pixels stored bottom up, so we need to flip the image here.
&gt; +        context-&gt;translate(0, height);
&gt; +        context-&gt;scale(FloatSize(1, -1));

I think you want to translate and scale before applying the compositing matrix, but I&apos;m not certain.

&gt; Source/WebCore/platform/graphics/cairo/GraphicsContext3DPrivate.h:43
&gt; +    void paintToCanvasRect(const unsigned char* imagePixels, int imageWidth, int imageHeight, const FloatRect&amp; canvasRect, PlatformContextCairo*);

I guess this was added accidentally? I don&apos;t see the implementation anywhere.

&gt; Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:544
&gt; +

This newline seems to be added accidentally as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649390</commentid>
    <comment_count>23</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2012-06-14 12:47:53 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 146829 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=146829&amp;action=review
&gt; 
&gt; Okay. This is a good start. Now we just need to unify the GL and ImageBuffer implementations.
&gt; 

Great, thanks for the review! :)

&gt; &gt; Source/WebCore/platform/graphics/cairo/GraphicsContext3DPrivate.cpp:99
&gt; &gt; +        // OpenGL keeps the pixels stored bottom up, so we need to flip the image here.
&gt; &gt; +        context-&gt;translate(0, height);
&gt; &gt; +        context-&gt;scale(FloatSize(1, -1));
&gt; 
&gt; I think you want to translate and scale before applying the compositing matrix, but I&apos;m not certain.
&gt;

I agree, makes more sense, I&apos;ll change the order.

&gt; &gt; Source/WebCore/platform/graphics/cairo/GraphicsContext3DPrivate.h:43
&gt; &gt; +    void paintToCanvasRect(const unsigned char* imagePixels, int imageWidth, int imageHeight, const FloatRect&amp; canvasRect, PlatformContextCairo*);
&gt; 
&gt; I guess this was added accidentally? I don&apos;t see the implementation anywhere.
&gt;

Yep, fixed.

&gt; &gt; Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:544
&gt; &gt; +
&gt; 
&gt; This newline seems to be added accidentally as well.

Fixed.

Thanks again for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649439</commentid>
    <comment_count>24</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2012-06-14 13:38:08 -0700</bug_when>
    <thetext>Landed! http://trac.webkit.org/changeset/120359

Thanks</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117643</attachid>
            <date>2011-12-02 10:03:49 -0800</date>
            <delta_ts>2011-12-02 11:32:43 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>texmap_cairo.patch</filename>
            <type>text/plain</type>
            <size>18236</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IDk4YzUyZWUwMGFmNjU4MmRjYTU0MmMyOTk0NTY3Yjg4NDMwNDU3ODEKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgRnJpIERlYyAyIDA5
OjUxOjEyIDIwMTEgKzAxMDAKCiAgICAgICAyMDExLTEyLTAyICBBbGVqYW5kcm8gRy4gQ2FzdHJv
ICA8YWxleEBpZ2FsaWEuY29tPgogICAgCiAgICAgICAgICAgIFtHVEtdIEFDIC0gQWRkIFRleHR1
cmVNYXBwZXJDYWlybyBpbXBsZW1lbnRhdGlvbiBhbmQgd2lkZ2V0IGdsdWUKICAgICAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczNjM0CiAgICAKICAgICAg
ICAgICAgQWRkZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtYWluIFRleHR1cmVNYXBwZXJD
YWlybyBtZXRob2RzLAogICAgICAgICAgICBpdCBoYW5kbGVzIHRoZSBiaXRtYXAgdGV4dHVyZXMg
dXNpbmcgYSBjYWlybyBzdXJmYWNlLCBpdCBpcyBzbG93CiAgICAgICAgICAgIGJ1dCBpdCBhbGxv
d3MgdXMgdG8gY2hlY2sgdGhlIGlkZWEuCiAgICAKICAgICAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCiAgICAKICAgICAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9U
ZXh0dXJlTWFwcGVyQ2Fpcm8uY3BwOgogICAgICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVy
ZUNhaXJvOjpkZXN0cm95KToKICAgICAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVDYWly
bzo6c2l6ZSk6CiAgICAgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlQ2Fpcm86OnJlc2V0
KToKICAgICAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVDYWlybzo6Y2xlYXJSZWN0KToK
ICAgICAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVDYWlybzo6YmVnaW5QYWludCk6CiAg
ICAgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlQ2Fpcm86OmVuZFBhaW50KToKICAgICAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVDYWlybzo6c2V0Q29udGVudHNUb0ltYWdlKToK
ICAgICAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWlybzo6YmVnaW5DbGlwKToKICAg
ICAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWlybzo6ZW5kQ2xpcCk6CiAgICAgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ2Fpcm86OnZpZXdwb3J0U2l6ZSk6CiAgICAgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ2Fpcm86OmJpbmRTdXJmYWNlKToKICAgICAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWlybzo6ZHJhd1RleHR1cmUpOgogICAgICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNhaXJvOjpiZWdpblBhaW50aW5nKToKICAgICAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWlybzo6ZW5kUGFpbnRpbmcpOgogICAgCiAgICAy
MDExLTEyLTAyICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgogICAgCiAg
ICAgICAgICAgIFtHVEtdIEFDIC0gQWRkIFRleHR1cmVNYXBwZXJDYWlybyBpbXBsZW1lbnRhdGlv
biBhbmQgd2lkZ2V0IGdsdWUKICAgICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTczNjM0CiAgICAKICAgICAgICAgICAgQWRkZWQgdGhlIGdsdWUgdG8gdXNl
IHRoZSBUZXh0dXJlTWFwcGVyIGZyb20gdGhlIHdpZGdldC4gV2UKICAgICAgICAgICAgYmFzaWNh
bGx5IHN5bmMgdGhlIGxheWVycyB3aGVuIHJlcXVpcmVkIGFuZCBjb21wb3NlIHRoZSByZXN1bHQg
aW4KICAgICAgICAgICAgdGhlIHdpZGdldCBzdXJmYWNlLgogICAgCiAgICAgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogICAgCiAgICAgICAgICAgICogd2Via2l0L3dlYmtpdHdl
YnZpZXcuY3BwOgogICAgICAgICAgICAocmVuZGVyQ29tcG9zaXRlZExheWVycyk6CiAgICAgICAg
ICAgICh3ZWJraXRfd2ViX3ZpZXdfZHJhdyk6CiAgICAgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdf
ZGlzcG9zZSk6CiAgICAgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfaW5pdCk6CiAgICAgICAgICAg
ICh3ZWJWaWV3U2V0Um9vdEdyYXBoaWNzTGF5ZXIpOgogICAgICAgICAgICAoc3luY0xheWVyc1Rp
bWVvdXQpOgogICAgICAgICAgICAod2ViVmlld01hcmtGb3JTeW5jKToKICAgICAgICAgICAgKiB3
ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaDoKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmRmMzY1OS4uNTVi
ZGY0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDExLTEyLTAyICBBbGVqYW5kcm8g
Ry4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEFDIC0gQWRkIFRl
eHR1cmVNYXBwZXJDYWlybyBpbXBsZW1lbnRhdGlvbiBhbmQgd2lkZ2V0IGdsdWUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczNjM0CisKKyAgICAgICAg
QWRkZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtYWluIFRleHR1cmVNYXBwZXJDYWlybyBt
ZXRob2RzLAorICAgICAgICBpdCBoYW5kbGVzIHRoZSBiaXRtYXAgdGV4dHVyZXMgdXNpbmcgYSBj
YWlybyBzdXJmYWNlLCBpdCBpcyBzbG93CisgICAgICAgIGJ1dCBpdCBhbGxvd3MgdXMgdG8gY2hl
Y2sgdGhlIGlkZWEuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUNhaXJvOjpkZXN0cm95KToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcFRleHR1cmVDYWlybzo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBUZXh0dXJlQ2Fpcm86OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1
cmVDYWlybzo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVDYWly
bzo6YmVnaW5QYWludCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlQ2Fpcm86OmVu
ZFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVDYWlybzo6c2V0Q29udGVu
dHNUb0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWlybzo6YmVnaW5D
bGlwKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWlybzo6ZW5kQ2xpcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ2Fpcm86OnZpZXdwb3J0U2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ2Fpcm86OmJpbmRTdXJmYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWlybzo6ZHJhd1RleHR1cmUpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckNhaXJvOjpiZWdpblBhaW50aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJDYWlybzo6ZW5kUGFpbnRpbmcpOgorCiAyMDExLTEyLTAyICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVc2UgdGhlIFtTdXBw
bGVtZW50YWxdIElETCBmb3Igd2ViYXVkaW8gYXR0cmlidXRlcyBpbiBDaHJvbWl1bQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBl
ckNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RleHR1
cmVNYXBwZXJDYWlyby5jcHAKaW5kZXggNjFkOGIyMC4uOTcwMDY4OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBlckNhaXJvLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UZXh0dXJlTWFw
cGVyQ2Fpcm8uY3BwCkBAIC0yNSwzNSArMjUsNzcgQEAKICNpbmNsdWRlICJDYWlyb1V0aWxpdGll
cy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKKyNpbmNsdWRlIDxjYWlyby14bGli
Lmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBCaXRtYXBUZXh0dXJlQ2Fpcm86OmRl
c3Ryb3koKQogewotICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgIGRlbGV0ZSBtX2NvbnRleHQ7
CisgICAgbV9zdXJmYWNlID0gMDsKKyAgICBkZWxldGUgbV9jb250ZXh0OworICAgIG1fY29udGV4
dCA9IDA7CiB9CiAKLQogSW50U2l6ZSBCaXRtYXBUZXh0dXJlQ2Fpcm86OnNpemUoKSBjb25zdAog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEludFNpemUoKTsKKyAgICBpZiAo
IW1fc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIHJldHVybiBJbnRT
aXplKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKG1fc3VyZmFjZS5nZXQoKSksCisgICAg
ICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KG1fc3VyZmFjZS5n
ZXQoKSkpOwogfQogCiB2b2lkIEJpdG1hcFRleHR1cmVDYWlybzo6cmVzZXQoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgYm9vbCBpc09wYXF1ZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIEJp
dG1hcFRleHR1cmU6OnJlc2V0KHNpemUsIGlzT3BhcXVlKTsKKworICAgIGlmICghbV9zdXJmYWNl
CisgICAgICAgIHx8IHNpemUud2lkdGgoKSA+IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRo
KG1fc3VyZmFjZS5nZXQoKSkKKyAgICAgICAgfHwgc2l6ZS5oZWlnaHQoKSA+IGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X2hlaWdodChtX3N1cmZhY2UuZ2V0KCkpKQorICAgICAgICBtX3N1cmZhY2Ug
PSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplLndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0KCkpKTsKKworICAgIGlmIChjYWlyb19zdXJmYWNl
X3N0YXR1cyhtX3N1cmZhY2UuZ2V0KCkpICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKQorICAgICAg
ICByZXR1cm47CisKKyAgICBjYWlyb190KiBjciA9IGNhaXJvX2NyZWF0ZShtX3N1cmZhY2UuZ2V0
KCkpOworICAgIG1fY29udGV4dCA9IG5ldyBQbGF0Zm9ybUNvbnRleHRDYWlybyhjcik7CisKKyAg
ICAvLyBGSVhNRTogVXNlIHByZXBhcmVmb3JGaWxsaW5nIGFuZCBvdGhlciBwbGF0Zm9ybWNvbnRl
eHRjYWlybyBtZXRob2RzCisgICAgY2Fpcm9fc2F2ZShjcik7CisgICAgc2V0U291cmNlUkdCQUZy
b21Db2xvcihjciwgQ29sb3IoQ29sb3I6OmJsYWNrKSk7CisgICAgY2Fpcm9fcGFpbnRfd2l0aF9h
bHBoYShjciwgaXNPcGFxdWUgPyAxLjAgOiAwLjApOworICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwor
fQorCisvLyBGSVhNRTogTW92ZSB0byBDYWlyb1V0aWxpdGllcz8KK3ZvaWQgQml0bWFwVGV4dHVy
ZUNhaXJvOjpjbGVhclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBBU1NFUlQobV9j
b250ZXh0KTsKKyAgICBjYWlyb190KiBjciA9IG1fY29udGV4dC0+Y3IoKTsKKworICAgIGNhaXJv
X3NhdmUoY3IpOworICAgIGNhaXJvX3JlY3RhbmdsZShjciwgcmVjdC54KCksIHJlY3QueSgpLCBy
ZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwg
Q0FJUk9fT1BFUkFUT1JfQ0xFQVIpOworICAgIGNhaXJvX2ZpbGwoY3IpOworICAgIGNhaXJvX3Jl
c3RvcmUoY3IpOwogfQogCiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogQml0bWFwVGV4dHVyZUNh
aXJvOjpiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIGNhaXJvX3QqIGNyID0gY2Fpcm9fY3JlYXRlKG1fc3VyZmFjZS5nZXQo
KSk7CisgICAgbV9jb250ZXh0ID0gbmV3IFBsYXRmb3JtQ29udGV4dENhaXJvKGNyKTsKKworICAg
IGNsZWFyUmVjdChkaXJ0eVJlY3QpOworICAgIGNhaXJvX3NhdmUoY3IpOworICAgIGNhaXJvX3Nl
dF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfT1ZFUik7CiAgICAgcmV0dXJuIG1fY29udGV4
dDsKIH0KIAogdm9pZCBCaXRtYXBUZXh0dXJlQ2Fpcm86OmVuZFBhaW50KCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIGNhaXJvX3Jlc3RvcmUobV9jb250ZXh0LT5jcigpKTsKIH0KIAog
dm9pZCBCaXRtYXBUZXh0dXJlQ2Fpcm86OnVwZGF0ZUNvbnRlbnRzKFBpeGVsRm9ybWF0IHBpeGVs
Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCB2b2lkKiBiaXRzKQpAQCAtNzAsMjIgKzExMiw1
MyBAQCBib29sIEJpdG1hcFRleHR1cmVDYWlybzo6c2F2ZShjb25zdCBTdHJpbmcmIHBhdGgpCiAK
IHZvaWQgQml0bWFwVGV4dHVyZUNhaXJvOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdl
KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gaW1hZ2UtPm5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCk7CisKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fc3VyZmFjZSA9IGNvcHlDYWlyb0ltYWdlU3VyZmFjZShzdXJmYWNlKTsKIH0KIAog
dm9pZCBUZXh0dXJlTWFwcGVyQ2Fpcm86OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbWF0cml4LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICBtX2NvbnRleHQtPnNhdmUoKTsKKworICAgIGNhaXJvX21hdHJpeF90IHNhdmVk
TWF0cml4OworICAgIGNhaXJvX3QqIGNyID0gbV9jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
Y3IoKTsKKyAgICBjYWlyb19nZXRfbWF0cml4KGNyLCAmc2F2ZWRNYXRyaXgpOworICAgIGNvbnN0
IGNhaXJvX21hdHJpeF90IGNhaXJvTWF0cml4ID0gY2Fpcm9fbWF0cml4X3QobWF0cml4KTsKKyAg
ICBjYWlyb19zZXRfbWF0cml4KGNyLCAmY2Fpcm9NYXRyaXgpOworCisgICAgY2Fpcm9fcmVjdGFu
Z2xlKGNyLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7
CisgICAgY2Fpcm9fY2xpcChjcik7CisKKyAgICBjYWlyb19zZXRfbWF0cml4KGNyLCAmc2F2ZWRN
YXRyaXgpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJDYWlybzo6ZW5kQ2xpcCgpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX2NvbnRleHQtPnJlc3RvcmUoKTsKIH0KIAogSW50U2l6
ZSBUZXh0dXJlTWFwcGVyQ2Fpcm86OnZpZXdwb3J0U2l6ZSgpIGNvbnN0CiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBjYWlyb190KiBjciA9IG1fY29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCktPmNyKCk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2Fpcm9fZ2V0X3Rhcmdl
dChjcik7CisKKyAgICBzd2l0Y2ggKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSkpIHsK
KyAgICBjYXNlIENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRToKKyAgICAgICAgcmV0dXJuIEludFNp
emUoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksCisgICAgICAgICAgICAg
ICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSk7CisgICAg
Y2FzZSBDQUlST19TVVJGQUNFX1RZUEVfWExJQjoKKyAgICAgICAgcmV0dXJuIEludFNpemUoY2Fp
cm9feGxpYl9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgY2Fpcm9feGxpYl9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSkpOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBJbnRTaXplKDAsIDApOworICAgIH07CiB9CiAKIApAQCAtMTA2LDEz
ICsxNzksNTYgQEAgR3JhcGhpY3NDb250ZXh0KiBUZXh0dXJlTWFwcGVyQ2Fpcm86OmdyYXBoaWNz
Q29udGV4dCgpCiAKIHZvaWQgVGV4dHVyZU1hcHBlckNhaXJvOjpiaW5kU3VyZmFjZShCaXRtYXBU
ZXh0dXJlKiB0ZXh0dXJlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKG1fdGV4
dHVyZSA9PSB0ZXh0dXJlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF0ZXh0dXJlKSB7Cisg
ICAgICAgIG1fdGV4dHVyZSA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBCaXRt
YXBUZXh0dXJlQ2Fpcm8qIHRleHR1cmVDYWlybyA9IHN0YXRpY19jYXN0PEJpdG1hcFRleHR1cmVD
YWlybyo+KHRleHR1cmUpOworICAgIG1fdGV4dHVyZSA9IHRleHR1cmVDYWlybzsKIH0KIAogCiB2
b2lkIFRleHR1cmVNYXBwZXJDYWlybzo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYg
dGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNr
VGV4dHVyZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGNvbnN0IEJpdG1hcFRleHR1
cmVDYWlybyYgdGV4dHVyZUNhaXJvID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUNh
aXJvJj4odGV4dHVyZSk7CisKKyAgICBBU1NFUlQodGV4dHVyZUNhaXJvLm1fY29udGV4dCk7CisK
KyAgICBjYWlyb190KiBjciA9IG1fY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7Cisg
ICAgY2Fpcm9fc3VyZmFjZV90KiB0ZXh0dXJlU3VyZmFjZSA9IHRleHR1cmVDYWlyby5tX3N1cmZh
Y2UuZ2V0KCk7CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW50ZXJtZWRpYXRlU3VyZmFj
ZTsKKworICAgIGlmIChtX3RleHR1cmUpCisgICAgICAgIGNyID0gbV90ZXh0dXJlLT5tX2NvbnRl
eHQtPmNyKCk7CisKKyAgICBpZiAobWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQo
KSkgeworICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJlQ2Fpcm8qIG1hc2sgPSBzdGF0aWNfY2Fz
dDxjb25zdCBCaXRtYXBUZXh0dXJlQ2Fpcm8qPihtYXNrVGV4dHVyZSk7CisgICAgICAgIGludGVy
bWVkaWF0ZVN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRf
QVJHQjMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgodGV4dHVyZVN1cmZhY2UpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHRleHR1cmVTdXJmYWNlKSk7CisgICAgICAg
IFJlZlB0cjxjYWlyb190PiBtYXNrQ3IgPSBjYWlyb19jcmVhdGUoaW50ZXJtZWRpYXRlU3VyZmFj
ZS5nZXQoKSk7CisgICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IobWFza0NyLmdldCgpLCBD
b2xvcihDb2xvcjo6YmxhY2spKTsKKyAgICAgICAgY2Fpcm9fcGFpbnRfd2l0aF9hbHBoYShtYXNr
Q3IuZ2V0KCksIDAuMCk7CisKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKG1hc2tD
ci5nZXQoKSwgdGV4dHVyZVN1cmZhY2UsIDAsIDApOworICAgICAgICBjYWlyb19wYWludChtYXNr
Q3IuZ2V0KCkpOworCisgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihtYXNrQ3IuZ2V0KCksIENB
SVJPX09QRVJBVE9SX0RFU1RfSU4pOworICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2Uo
bWFza0NyLmdldCgpLCBtYXNrLT5tX3N1cmZhY2UuZ2V0KCksIDAsIDApOworICAgICAgICBjYWly
b19wYWludChtYXNrQ3IuZ2V0KCkpOworCisgICAgICAgIHRleHR1cmVTdXJmYWNlID0gaW50ZXJt
ZWRpYXRlU3VyZmFjZS5nZXQoKTsKKyAgICB9CisKKyAgICBjYWlyb19zYXZlKGNyKTsKKyAgICBj
b25zdCBjYWlyb19tYXRyaXhfdCBjYWlyb01hdHJpeCA9IGNhaXJvX21hdHJpeF90KG1hdHJpeCk7
CisgICAgY2Fpcm9fc2V0X21hdHJpeChjciwgJmNhaXJvTWF0cml4KTsKKyAgICBjYWlyb19zZXRf
c291cmNlX3N1cmZhY2UoY3IsIHRleHR1cmVTdXJmYWNlLCAwLCAwKTsKKyAgICBjYWlyb19wYWlu
dF93aXRoX2FscGhhKGNyLCBvcGFjaXR5KTsKKyAgICBjYWlyb19yZXN0b3JlKGNyKTsKIH0KIAog
UGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0KQpAQCAtMTMzLDEyICsyNDksMTIgQEAgQml0bWFwVGV4dHVyZUNhaXJv
OjpCaXRtYXBUZXh0dXJlQ2Fpcm8oKQogCiB2b2lkIFRleHR1cmVNYXBwZXJDYWlybzo6YmVnaW5Q
YWludGluZygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX2NvbnRleHQtPnNhdmUo
KTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyQ2Fpcm86OmVuZFBhaW50aW5nKCkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIG1fY29udGV4dC0+cmVzdG9yZSgpOwogfQogCiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCmluZGV4IGMxMzFkYWQuLjliMWVlMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNCBAQAorMjAxMS0xMi0wMiAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlh
LmNvbT4KKworICAgICAgICBbR1RLXSBBQyAtIEFkZCBUZXh0dXJlTWFwcGVyQ2Fpcm8gaW1wbGVt
ZW50YXRpb24gYW5kIHdpZGdldCBnbHVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03MzYzNAorCisgICAgICAgIEFkZGVkIHRoZSBnbHVlIHRvIHVzZSB0
aGUgVGV4dHVyZU1hcHBlciBmcm9tIHRoZSB3aWRnZXQuIFdlCisgICAgICAgIGJhc2ljYWxseSBz
eW5jIHRoZSBsYXllcnMgd2hlbiByZXF1aXJlZCBhbmQgY29tcG9zZSB0aGUgcmVzdWx0IGluCisg
ICAgICAgIHRoZSB3aWRnZXQgc3VyZmFjZS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKKyAgICAgICAg
KHJlbmRlckNvbXBvc2l0ZWRMYXllcnMpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2RyYXcp
OgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2Rpc3Bvc2UpOgorICAgICAgICAod2Via2l0X3dl
Yl92aWV3X2luaXQpOgorICAgICAgICAod2ViVmlld1NldFJvb3RHcmFwaGljc0xheWVyKToKKyAg
ICAgICAgKHN5bmNMYXllcnNUaW1lb3V0KToKKyAgICAgICAgKHdlYlZpZXdNYXJrRm9yU3luYyk6
CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2YXRlLmg6CisKIDIwMTEtMTItMDEg
IFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtd
IHNjcm9sbGJhcnMgaW50ZXJmZXJpbmcgd2l0aCBmdWxsc2NyZWVuIChpbi13aW5kb3cpIHZpZGVv
IHJlbmRlcmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YnZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCmlu
ZGV4IDkxZjJkZmEuLjZlMGM5NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2Vidmlldy5jcHAKQEAgLTgyLDYgKzgyLDcgQEAKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5o
IgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyQ2Fpcm8uaCIKICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NRG9j
dW1lbnRQcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0ZG93bmxvYWQuaCIKICNpbmNsdWRlICJ3
ZWJraXRkb3dubG9hZHByaXZhdGUuaCIKQEAgLTYyMyw2ICs2MjQsMzcgQEAgc3RhdGljIHZvaWQg
d2Via2l0X3dlYl92aWV3X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3Bf
aWQsIGNvbnN0IEcKICAgICB9CiB9CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CitzdGF0aWMgdm9pZCByZW5kZXJDb21wb3NpdGVkTGF5ZXJzKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIGNhaXJvX3QqIGNyLCBjb25zdCBJbnRSZWN0JiBjbGlwLCBjb25zdCBJbnRTaXplJiB2aWV3
cG9ydFNpemUpCit7CisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5w
cml2OworCisgICAgaWYgKCFwcml2LT5yb290VGV4dHVyZU1hcHBlck5vZGUgfHwgIXByaXYtPnRl
eHR1cmVNYXBwZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dCBjb250
ZXh0KGNyKTsKKyAgICBwcml2LT50ZXh0dXJlTWFwcGVyLT5zZXRHcmFwaGljc0NvbnRleHQoJmNv
bnRleHQpOworICAgIHByaXYtPnRleHR1cmVNYXBwZXItPnNldEltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHkoY29udGV4dC5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpOworICAgIHByaXYtPnRl
eHR1cmVNYXBwZXItPnNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LnRleHREcmF3aW5nTW9kZSgp
KTsKKyAgICBwcml2LT50ZXh0dXJlTWFwcGVyLT5zZXRWaWV3cG9ydFNpemUodmlld3BvcnRTaXpl
KTsKKyAgICBjYWlyb19tYXRyaXhfdCB0cmFuc2Zvcm07CisgICAgY2Fpcm9fZ2V0X21hdHJpeChj
ciwgJnRyYW5zZm9ybSk7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OzsK
KyAgICAvKiBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgoICovCisgICAgLyogICAg
IHRyYW5zZm9ybS54eCwgdHJhbnNmb3JtLnl4LCAwLCAwLCAqLworICAgIC8qICAgICB0cmFuc2Zv
cm0ueHksIHRyYW5zZm9ybS55eSwgMCwgMCwgKi8KKyAgICAvKiAgICAgMCwgMCwgMSwgMCwgKi8K
KyAgICAvKiAgICAgdHJhbnNmb3JtLngwLCB0cmFuc2Zvcm0ueTAsIDAsIDAgKi8KKyAgICAvKiAg
ICAgKTsgKi8KKyAgICBwcml2LT5yb290VGV4dHVyZU1hcHBlck5vZGUtPnNldFRyYW5zZm9ybSht
YXRyaXgpOworICAgIHByaXYtPnRleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKKyAgICBw
cml2LT50ZXh0dXJlTWFwcGVyLT5iZWdpbkNsaXAobWF0cml4LCBjbGlwKTsKKyAgICBwcml2LT5y
b290VGV4dHVyZU1hcHBlck5vZGUtPnBhaW50KCk7CisgICAgcHJpdi0+dGV4dHVyZU1hcHBlci0+
ZW5kQ2xpcCgpOworICAgIHByaXYtPnRleHR1cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7Cit9Cisj
ZW5kaWYKKwogI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCiBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0
X3dlYl92aWV3X2V4cG9zZV9ldmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRFeHBvc2Uq
IGV2ZW50KQogewpAQCAtNjUxLDEyICs2ODMsMTYgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93
ZWJfdmlld19kcmF3KEd0a1dpZGdldCogd2lkZ2V0LCBjYWlyb190KiBjcikKICAgICB9CiAKICAg
ICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdF
QktJVF9XRUJfVklFVyh3aWRnZXQpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdExpc3Qt
Pm51bV9yZWN0YW5nbGVzOyBpKyspIHsKLSAgICAgICAgY29weVJlY3RGcm9tQ2Fpcm9TdXJmYWNl
VG9Db250ZXh0KFdFQktJVF9XRUJfVklFVyh3aWRnZXQpLT5wcml2LT5iYWNraW5nU3RvcmUtPmNh
aXJvU3VyZmFjZSgpLAorICAgICAgICBjb3B5UmVjdEZyb21DYWlyb1N1cmZhY2VUb0NvbnRleHQo
d2ViVmlldy0+cHJpdi0+YmFja2luZ1N0b3JlLT5jYWlyb1N1cmZhY2UoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyLCBJbnRTaXplKCksIGVuY2xvc2luZ0lu
dFJlY3QoRmxvYXRSZWN0KHJlY3RMaXN0LT5yZWN0YW5nbGVzW2ldKSkpOwogICAgIH0KICAgICBj
YWlyb19yZWN0YW5nbGVfbGlzdF9kZXN0cm95KHJlY3RMaXN0KTsKIAorICAgIEZyYW1lKiBmcmFt
ZSA9IGNvcmUod2ViVmlldyktPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUo
KTsKKyAgICByZW5kZXJDb21wb3NpdGVkTGF5ZXJzKHdlYlZpZXcsIGNyLCBjbGlwUmVjdCwgZnJh
bWUtPnZpZXcoKS0+ZnJhbWVSZWN0KCkuc2l6ZSgpKTsKKwogICAgIHJldHVybiBGQUxTRTsKIH0K
ICNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgpAQCAtMTI3MSw2ICsxMzA3LDExIEBAIHN0YXRp
YyB2b2lkIHdlYmtpdF93ZWJfdmlld19kaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKICAgICBwcml2
LT5tYWluUmVzb3VyY2UuY2xlYXIoKTsKICAgICBwcml2LT5zdWJSZXNvdXJjZXMuY2xlYXIoKTsK
IAorICAgIGlmIChwcml2LT5zeW5jTGF5ZXJzVGltZW91dCkgeworICAgICAgICBnX3NvdXJjZV9y
ZW1vdmUocHJpdi0+c3luY0xheWVyc1RpbWVvdXQpOworICAgICAgICBwcml2LT5zeW5jTGF5ZXJz
VGltZW91dCA9IDA7CisgICAgfQorCiAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dlYl92aWV3
X3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKIH0KIApAQCAtMzMxMCw2ICszMzUxLDkg
QEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2luaXQoV2ViS2l0V2ViVmlldyogd2ViVmll
dykKICAgICBndGtfZHJhZ19kZXN0X3NldF90YXJnZXRfbGlzdChHVEtfV0lER0VUKHdlYlZpZXcp
LCBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT50YXJnZXRMaXN0
KCkpOwogCiAgICAgcHJpdi0+c2VsZlNjcm9sbGluZyA9IGZhbHNlOworCisgICAgcHJpdi0+cm9v
dFRleHR1cmVNYXBwZXJOb2RlID0gMDsKKyAgICBwcml2LT5zeW5jTGF5ZXJzVGltZW91dCA9IDA7
CiB9CiAKIEd0a1dpZGdldCogd2Via2l0X3dlYl92aWV3X25ldyh2b2lkKQpAQCAtNDg4NSwxMyAr
NDkyOSw1OSBAQCB2b2lkIHdlYlZpZXdFeGl0RnVsbHNjcmVlbihXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3KQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIHZvaWQgd2ViVmlld1NldFJv
b3RHcmFwaGljc0xheWVyKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdyYXBoaWNzTGF5ZXIqIGdy
YXBoaWNzTGF5ZXIpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAoZ3JhcGhpY3NM
YXllcikgeworICAgICAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnBy
aXY7CisgICAgICAgIHByaXYtPnJvb3RHcmFwaGljc0xheWVyID0gR3JhcGhpY3NMYXllcjo6Y3Jl
YXRlKDApOworICAgICAgICBwcml2LT5yb290VGV4dHVyZU1hcHBlck5vZGUgPSB0b1RleHR1cmVN
YXBwZXJOb2RlKHByaXYtPnJvb3RHcmFwaGljc0xheWVyLmdldCgpKTsKKworICAgICAgICBwcml2
LT5yb290R3JhcGhpY3NMYXllci0+YWRkQ2hpbGQoZ3JhcGhpY3NMYXllcik7CisgICAgICAgIHBy
aXYtPnJvb3RHcmFwaGljc0xheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgICAgICBw
cml2LT5yb290R3JhcGhpY3NMYXllci0+c2V0TWFza3NUb0JvdW5kcyhmYWxzZSk7CisgICAgICAg
IHByaXYtPnJvb3RHcmFwaGljc0xheWVyLT5zZXRTaXplKEludFNpemUoMSwgMSkpOworCisgICAg
ICAgIHByaXYtPnRleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyQ2Fpcm86OmNyZWF0ZSgpOwor
ICAgICAgICBwcml2LT5yb290VGV4dHVyZU1hcHBlck5vZGUtPnNldFRleHR1cmVNYXBwZXIocHJp
di0+dGV4dHVyZU1hcHBlci5nZXQoKSk7CisgICAgICAgIGdyYXBoaWNzTGF5ZXItPnN5bmNDb21w
b3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKHdlYlZpZXctPnByaXYtPnJvb3RHcmFwaGljc0xheWVyKQorICAgICAgICB3ZWJW
aWV3LT5wcml2LT5yb290R3JhcGhpY3NMYXllci5jbGVhcigpOworfQorCitnYm9vbGVhbiBzeW5j
TGF5ZXJzVGltZW91dChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIFdlYktpdFdlYlZp
ZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKKworICAgIGlmIChwcml2LT5yb290R3Jh
cGhpY3NMYXllcikKKyAgICAgICAgcHJpdi0+cm9vdEdyYXBoaWNzTGF5ZXItPnN5bmNDb21wb3Np
dGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNv
cmUod2ViVmlldyktPm1haW5GcmFtZSgpOworICAgIGNvcmVGcmFtZS0+dmlldygpLT5zeW5jQ29t
cG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworCisgICAgaWYgKCFwcml2LT5yb290
R3JhcGhpY3NMYXllcikgeworICAgICAgICBwcml2LT5zeW5jTGF5ZXJzVGltZW91dCA9IDA7Cisg
ICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXco
R1RLX1dJREdFVCh3ZWJWaWV3KSk7CisKKyAgICBpZiAodG9UZXh0dXJlTWFwcGVyTm9kZShwcml2
LT5yb290R3JhcGhpY3NMYXllci5nZXQoKSktPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdB
bmltYXRpb25zKCkpCisgICAgICAgIHJldHVybiBUUlVFOworCisgICAgcHJpdi0+c3luY0xheWVy
c1RpbWVvdXQgPSAwOworCisgICAgcmV0dXJuIEZBTFNFOwogfQogCiB2b2lkIHdlYlZpZXdNYXJr
Rm9yU3luYyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBnYm9vbGVhbiBzY2hlZHVsZVN5bmMpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9
IHdlYlZpZXctPnByaXY7CisKKyAgICBpZiAoIXByaXYtPnN5bmNMYXllcnNUaW1lb3V0KQorICAg
ICAgICBwcml2LT5zeW5jTGF5ZXJzVGltZW91dCA9IGdfdGltZW91dF9hZGQoMTcsIHJlaW50ZXJw
cmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHN5bmNMYXllcnNUaW1lb3V0KSwgd2ViVmlldyk7CiB9CisK
ICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3cHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYnZpZXdwcml2YXRlLmgKaW5kZXggOTJjMzU1ZS4uMjkwN2RmMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2YXRlLmgKKysr
IGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2YXRlLmgKQEAgLTMw
LDggKzMwLDE0IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxl
LmgiCiAjaW5jbHVkZSAiV2lkZ2V0QmFja2luZ1N0b3JlLmgiCisKICNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0d2Vidmlldy5oPgogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lu
Y2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTm9kZS5oIgor
I2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogV2ViQ29yZTo6UGFnZSogY29yZShXZWJLaXRX
ZWJWaWV3Kik7CiBXZWJLaXRXZWJWaWV3KiBraXQoV2ViQ29yZTo6UGFnZSopOwpAQCAtODEsNiAr
ODcsMTMgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CiAgICAgRnVsbHNjcmVlblZp
ZGVvQ29udHJvbGxlciogZnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjsKICNlbmRpZgogCisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGlj
c0xheWVyPiByb290R3JhcGhpY3NMYXllcjsKKyAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9k
ZSogcm9vdFRleHR1cmVNYXBwZXJOb2RlOworICAgIE93blB0cjxXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyPiB0ZXh0dXJlTWFwcGVyOworICAgIGd1aW50IHN5bmNMYXllcnNUaW1lb3V0OworI2VuZGlm
CisKICAgICAvLyBUaGVzZSBhcmUgaG9zdGVkIGhlcmUgYmVjYXVzZSB0aGUgRGF0YVNvdXJjZSBv
YmplY3QgaXMKICAgICAvLyBjcmVhdGVkIHRvbyBsYXRlIGluIHRoZSBmcmFtZSBsb2FkaW5nIHBy
b2Nlc3MuCiAgICAgR1JlZlB0cjxXZWJLaXRXZWJSZXNvdXJjZT4gbWFpblJlc291cmNlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117660</attachid>
            <date>2011-12-02 11:32:43 -0800</date>
            <delta_ts>2011-12-04 02:07:21 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>texmap_cairo.patch</filename>
            <type>text/plain</type>
            <size>18645</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IDhkYmY4MjdkMTYxNjdjOWQ4NjFiYjA0M2UzNzQzMWI0ZjJiODQ3MTQKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgRnJpIERlYyAyIDA5
OjUxOjEyIDIwMTEgKzAxMDAKCiAgICAgICAyMDExLTEyLTAyICBBbGVqYW5kcm8gRy4gQ2FzdHJv
ICA8YWxleEBpZ2FsaWEuY29tPgogICAgCiAgICAgICAgICAgIFtHVEtdIEFDIC0gQWRkIFRleHR1
cmVNYXBwZXJDYWlybyBpbXBsZW1lbnRhdGlvbiBhbmQgd2lkZ2V0IGdsdWUKICAgICAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczNjM0CiAgICAKICAgICAg
ICAgICAgQWRkZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtYWluIFRleHR1cmVNYXBwZXJD
YWlybyBtZXRob2RzLAogICAgICAgICAgICBpdCBoYW5kbGVzIHRoZSBiaXRtYXAgdGV4dHVyZXMg
dXNpbmcgYSBjYWlybyBzdXJmYWNlLCBpdCBpcyBzbG93CiAgICAgICAgICAgIGJ1dCBpdCBhbGxv
d3MgdXMgdG8gY2hlY2sgdGhlIGlkZWEuCiAgICAKICAgICAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCiAgICAKICAgICAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9U
ZXh0dXJlTWFwcGVyQ2Fpcm8uY3BwOgogICAgICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVy
ZUNhaXJvOjpkZXN0cm95KToKICAgICAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVDYWly
bzo6c2l6ZSk6CiAgICAgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlQ2Fpcm86OnJlc2V0
KToKICAgICAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVDYWlybzo6Y2xlYXJSZWN0KToK
ICAgICAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVDYWlybzo6YmVnaW5QYWludCk6CiAg
ICAgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlQ2Fpcm86OmVuZFBhaW50KToKICAgICAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVDYWlybzo6c2V0Q29udGVudHNUb0ltYWdlKToK
ICAgICAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWlybzo6YmVnaW5DbGlwKToKICAg
ICAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWlybzo6ZW5kQ2xpcCk6CiAgICAgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ2Fpcm86OnZpZXdwb3J0U2l6ZSk6CiAgICAgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ2Fpcm86OmJpbmRTdXJmYWNlKToKICAgICAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWlybzo6ZHJhd1RleHR1cmUpOgogICAgICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNhaXJvOjpiZWdpblBhaW50aW5nKToKICAgICAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWlybzo6ZW5kUGFpbnRpbmcpOgogICAgCiAgICAy
MDExLTEyLTAyICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgogICAgCiAg
ICAgICAgICAgIFtHVEtdIEFDIC0gQWRkIFRleHR1cmVNYXBwZXJDYWlybyBpbXBsZW1lbnRhdGlv
biBhbmQgd2lkZ2V0IGdsdWUKICAgICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTczNjM0CiAgICAKICAgICAgICAgICAgQWRkZWQgdGhlIGdsdWUgdG8gdXNl
IHRoZSBUZXh0dXJlTWFwcGVyIGZyb20gdGhlIHdpZGdldC4gV2UKICAgICAgICAgICAgYmFzaWNh
bGx5IHN5bmMgdGhlIGxheWVycyB3aGVuIHJlcXVpcmVkIGFuZCBjb21wb3NlIHRoZSByZXN1bHQg
aW4KICAgICAgICAgICAgdGhlIHdpZGdldCBzdXJmYWNlLgogICAgCiAgICAgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogICAgCiAgICAgICAgICAgICogd2Via2l0L3dlYmtpdHdl
YnZpZXcuY3BwOgogICAgICAgICAgICAocmVuZGVyQ29tcG9zaXRlZExheWVycyk6CiAgICAgICAg
ICAgICh3ZWJraXRfd2ViX3ZpZXdfZHJhdyk6CiAgICAgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdf
ZGlzcG9zZSk6CiAgICAgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfaW5pdCk6CiAgICAgICAgICAg
ICh3ZWJWaWV3U2V0Um9vdEdyYXBoaWNzTGF5ZXIpOgogICAgICAgICAgICAoc3luY0xheWVyc1Rp
bWVvdXQpOgogICAgICAgICAgICAod2ViVmlld01hcmtGb3JTeW5jKToKICAgICAgICAgICAgKiB3
ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaDoKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjlmYzk2Ny4uMWEy
NzZkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDExLTEyLTAyICBBbGVqYW5kcm8g
Ry4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEFDIC0gQWRkIFRl
eHR1cmVNYXBwZXJDYWlybyBpbXBsZW1lbnRhdGlvbiBhbmQgd2lkZ2V0IGdsdWUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczNjM0CisKKyAgICAgICAg
QWRkZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtYWluIFRleHR1cmVNYXBwZXJDYWlybyBt
ZXRob2RzLAorICAgICAgICBpdCBoYW5kbGVzIHRoZSBiaXRtYXAgdGV4dHVyZXMgdXNpbmcgYSBj
YWlybyBzdXJmYWNlLCBpdCBpcyBzbG93CisgICAgICAgIGJ1dCBpdCBhbGxvd3MgdXMgdG8gY2hl
Y2sgdGhlIGlkZWEuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUNhaXJvOjpkZXN0cm95KToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcFRleHR1cmVDYWlybzo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBUZXh0dXJlQ2Fpcm86OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1
cmVDYWlybzo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVDYWly
bzo6YmVnaW5QYWludCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlQ2Fpcm86OmVu
ZFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVDYWlybzo6c2V0Q29udGVu
dHNUb0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWlybzo6YmVnaW5D
bGlwKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWlybzo6ZW5kQ2xpcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ2Fpcm86OnZpZXdwb3J0U2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ2Fpcm86OmJpbmRTdXJmYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWlybzo6ZHJhd1RleHR1cmUpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckNhaXJvOjpiZWdpblBhaW50aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJDYWlybzo6ZW5kUGFpbnRpbmcpOgorCiAyMDExLTEyLTAyICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBGb3JtIHN0cmVhbSBk
YXRhIHN0cnVjdHVyZXMgc3RpbGwgbm90IHRocmVhZHNhZmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RleHR1cmVNYXBwZXJDYWlyby5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8u
Y3BwCmluZGV4IDYxZDhiMjAuLjk3MDA2ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RleHR1cmVNYXBwZXJDYWlyby5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBlckNhaXJvLmNwcApA
QCAtMjUsMzUgKzI1LDc3IEBACiAjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgogCisjaW5jbHVkZSA8Y2Fpcm8teGxpYi5oPgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHZvaWQgQml0bWFwVGV4dHVyZUNhaXJvOjpkZXN0cm95KCkKIHsKLSAg
ICBpZiAobV9jb250ZXh0KQotICAgICAgICBkZWxldGUgbV9jb250ZXh0OworICAgIG1fc3VyZmFj
ZSA9IDA7CisgICAgZGVsZXRlIG1fY29udGV4dDsKKyAgICBtX2NvbnRleHQgPSAwOwogfQogCi0K
IEludFNpemUgQml0bWFwVGV4dHVyZUNhaXJvOjpzaXplKCkgY29uc3QKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBJbnRTaXplKCk7CisgICAgaWYgKCFtX3N1cmZhY2UpCisg
ICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICByZXR1cm4gSW50U2l6ZShjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF93aWR0aChtX3N1cmZhY2UuZ2V0KCkpLAorICAgICAgICAgICAgICAgICAg
IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChtX3N1cmZhY2UuZ2V0KCkpKTsKIH0KIAog
dm9pZCBCaXRtYXBUZXh0dXJlQ2Fpcm86OnJlc2V0KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wg
aXNPcGFxdWUpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBCaXRtYXBUZXh0dXJlOjpy
ZXNldChzaXplLCBpc09wYXF1ZSk7CisKKyAgICBpZiAoIW1fc3VyZmFjZQorICAgICAgICB8fCBz
aXplLndpZHRoKCkgPiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChtX3N1cmZhY2UuZ2V0
KCkpCisgICAgICAgIHx8IHNpemUuaGVpZ2h0KCkgPiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9o
ZWlnaHQobV9zdXJmYWNlLmdldCgpKSkKKyAgICAgICAgbV9zdXJmYWNlID0gYWRvcHRSZWYoY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplLmhlaWdodCgpKSk7CisKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMobV9zdXJm
YWNlLmdldCgpKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2Fpcm9fdCogY3IgPSBjYWlyb19jcmVhdGUobV9zdXJmYWNlLmdldCgpKTsKKyAgICBtX2Nv
bnRleHQgPSBuZXcgUGxhdGZvcm1Db250ZXh0Q2Fpcm8oY3IpOworCisgICAgLy8gRklYTUU6IFVz
ZSBwcmVwYXJlZm9yRmlsbGluZyBhbmQgb3RoZXIgcGxhdGZvcm1jb250ZXh0Y2Fpcm8gbWV0aG9k
cworICAgIGNhaXJvX3NhdmUoY3IpOworICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3IsIENv
bG9yKENvbG9yOjpibGFjaykpOworICAgIGNhaXJvX3BhaW50X3dpdGhfYWxwaGEoY3IsIGlzT3Bh
cXVlID8gMS4wIDogMC4wKTsKKyAgICBjYWlyb19yZXN0b3JlKGNyKTsKK30KKworLy8gRklYTUU6
IE1vdmUgdG8gQ2Fpcm9VdGlsaXRpZXM/Cit2b2lkIEJpdG1hcFRleHR1cmVDYWlybzo6Y2xlYXJS
ZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAg
Y2Fpcm9fdCogY3IgPSBtX2NvbnRleHQtPmNyKCk7CisKKyAgICBjYWlyb19zYXZlKGNyKTsKKyAg
ICBjYWlyb19yZWN0YW5nbGUoY3IsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9S
X0NMRUFSKTsKKyAgICBjYWlyb19maWxsKGNyKTsKKyAgICBjYWlyb19yZXN0b3JlKGNyKTsKIH0K
IAogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIEJpdG1hcFRleHR1cmVDYWlybzo6YmVnaW5QYWlu
dChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBjYWlyb190KiBjciA9IGNhaXJvX2NyZWF0ZShtX3N1cmZhY2UuZ2V0KCkpOworICAgIG1fY29u
dGV4dCA9IG5ldyBQbGF0Zm9ybUNvbnRleHRDYWlybyhjcik7CisKKyAgICBjbGVhclJlY3QoZGly
dHlSZWN0KTsKKyAgICBjYWlyb19zYXZlKGNyKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3Is
IENBSVJPX09QRVJBVE9SX09WRVIpOwogICAgIHJldHVybiBtX2NvbnRleHQ7CiB9CiAKIHZvaWQg
Qml0bWFwVGV4dHVyZUNhaXJvOjplbmRQYWludCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICBjYWlyb19yZXN0b3JlKG1fY29udGV4dC0+Y3IoKSk7CiB9CiAKIHZvaWQgQml0bWFwVGV4
dHVyZUNhaXJvOjp1cGRhdGVDb250ZW50cyhQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYgcmVjdCwgdm9pZCogYml0cykKQEAgLTcwLDIyICsxMTIsNTMgQEAgYm9vbCBCaXRt
YXBUZXh0dXJlQ2Fpcm86OnNhdmUoY29uc3QgU3RyaW5nJiBwYXRoKQogCiB2b2lkIEJpdG1hcFRl
eHR1cmVDYWlybzo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGNh
aXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpOworCisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N1cmZh
Y2UgPSBjb3B5Q2Fpcm9JbWFnZVN1cmZhY2Uoc3VyZmFjZSk7CiB9CiAKIHZvaWQgVGV4dHVyZU1h
cHBlckNhaXJvOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwg
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9j
b250ZXh0LT5zYXZlKCk7CisKKyAgICBjYWlyb19tYXRyaXhfdCBzYXZlZE1hdHJpeDsKKyAgICBj
YWlyb190KiBjciA9IG1fY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7CisgICAgY2Fp
cm9fZ2V0X21hdHJpeChjciwgJnNhdmVkTWF0cml4KTsKKyAgICBjb25zdCBjYWlyb19tYXRyaXhf
dCBjYWlyb01hdHJpeCA9IGNhaXJvX21hdHJpeF90KG1hdHJpeCk7CisgICAgY2Fpcm9fc2V0X21h
dHJpeChjciwgJmNhaXJvTWF0cml4KTsKKworICAgIGNhaXJvX3JlY3RhbmdsZShjciwgcmVjdC54
KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIGNhaXJvX2Ns
aXAoY3IpOworCisgICAgY2Fpcm9fc2V0X21hdHJpeChjciwgJnNhdmVkTWF0cml4KTsKIH0KIAog
dm9pZCBUZXh0dXJlTWFwcGVyQ2Fpcm86OmVuZENsaXAoKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgbV9jb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKIEludFNpemUgVGV4dHVyZU1hcHBl
ckNhaXJvOjp2aWV3cG9ydFNpemUoKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgY2Fpcm9fdCogY3IgPSBtX2NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOworICAg
IGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGNhaXJvX2dldF90YXJnZXQoY3IpOworCisgICAg
c3dpdGNoIChjYWlyb19zdXJmYWNlX2dldF90eXBlKHN1cmZhY2UpKSB7CisgICAgY2FzZSBDQUlS
T19TVVJGQUNFX1RZUEVfSU1BR0U6CisgICAgICAgIHJldHVybiBJbnRTaXplKGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAorICAgICAgICAgICAgICAgICAgICAgICBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSkpOworICAgIGNhc2UgQ0FJUk9fU1VS
RkFDRV9UWVBFX1hMSUI6CisgICAgICAgIHJldHVybiBJbnRTaXplKGNhaXJvX3hsaWJfc3VyZmFj
ZV9nZXRfd2lkdGgoc3VyZmFjZSksCisgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX3hsaWJf
c3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gSW50U2l6ZSgwLCAwKTsKKyAgICB9OwogfQogCiAKQEAgLTEwNiwxMyArMTc5LDU2IEBAIEdy
YXBoaWNzQ29udGV4dCogVGV4dHVyZU1hcHBlckNhaXJvOjpncmFwaGljc0NvbnRleHQoKQogCiB2
b2lkIFRleHR1cmVNYXBwZXJDYWlybzo6YmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogdGV4dHVy
ZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChtX3RleHR1cmUgPT0gdGV4dHVy
ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdGV4dHVyZSkgeworICAgICAgICBtX3RleHR1
cmUgPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQml0bWFwVGV4dHVyZUNhaXJv
KiB0ZXh0dXJlQ2Fpcm8gPSBzdGF0aWNfY2FzdDxCaXRtYXBUZXh0dXJlQ2Fpcm8qPih0ZXh0dXJl
KTsKKyAgICBtX3RleHR1cmUgPSB0ZXh0dXJlQ2Fpcm87CiB9CiAKIAogdm9pZCBUZXh0dXJlTWFw
cGVyQ2Fpcm86OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJp
eCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBjb25zdCBCaXRtYXBUZXh0dXJlQ2Fpcm8mIHRleHR1
cmVDYWlybyA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVDYWlybyY+KHRleHR1cmUp
OworCisgICAgQVNTRVJUKHRleHR1cmVDYWlyby5tX2NvbnRleHQpOworCisgICAgY2Fpcm9fdCog
Y3IgPSBtX2NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOworICAgIGNhaXJvX3N1cmZh
Y2VfdCogdGV4dHVyZVN1cmZhY2UgPSB0ZXh0dXJlQ2Fpcm8ubV9zdXJmYWNlLmdldCgpOworICAg
IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGludGVybWVkaWF0ZVN1cmZhY2U7CisKKyAgICBpZiAo
bV90ZXh0dXJlKQorICAgICAgICBjciA9IG1fdGV4dHVyZS0+bV9jb250ZXh0LT5jcigpOworCisg
ICAgaWYgKG1hc2tUZXh0dXJlICYmIG1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkpIHsKKyAgICAgICAg
Y29uc3QgQml0bWFwVGV4dHVyZUNhaXJvKiBtYXNrID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFw
VGV4dHVyZUNhaXJvKj4obWFza1RleHR1cmUpOworICAgICAgICBpbnRlcm1lZGlhdGVTdXJmYWNl
ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHRleHR1cmVTdXJmYWNlKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2hlaWdodCh0ZXh0dXJlU3VyZmFjZSkpOworICAgICAgICBSZWZQdHI8Y2Fpcm9f
dD4gbWFza0NyID0gY2Fpcm9fY3JlYXRlKGludGVybWVkaWF0ZVN1cmZhY2UuZ2V0KCkpOworICAg
ICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKG1hc2tDci5nZXQoKSwgQ29sb3IoQ29sb3I6OmJs
YWNrKSk7CisgICAgICAgIGNhaXJvX3BhaW50X3dpdGhfYWxwaGEobWFza0NyLmdldCgpLCAwLjAp
OworCisgICAgICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShtYXNrQ3IuZ2V0KCksIHRleHR1
cmVTdXJmYWNlLCAwLCAwKTsKKyAgICAgICAgY2Fpcm9fcGFpbnQobWFza0NyLmdldCgpKTsKKwor
ICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IobWFza0NyLmdldCgpLCBDQUlST19PUEVSQVRPUl9E
RVNUX0lOKTsKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKG1hc2tDci5nZXQoKSwg
bWFzay0+bV9zdXJmYWNlLmdldCgpLCAwLCAwKTsKKyAgICAgICAgY2Fpcm9fcGFpbnQobWFza0Ny
LmdldCgpKTsKKworICAgICAgICB0ZXh0dXJlU3VyZmFjZSA9IGludGVybWVkaWF0ZVN1cmZhY2Uu
Z2V0KCk7CisgICAgfQorCisgICAgY2Fpcm9fc2F2ZShjcik7CisgICAgY29uc3QgY2Fpcm9fbWF0
cml4X3QgY2Fpcm9NYXRyaXggPSBjYWlyb19tYXRyaXhfdChtYXRyaXgpOworICAgIGNhaXJvX3Nl
dF9tYXRyaXgoY3IsICZjYWlyb01hdHJpeCk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNl
KGNyLCB0ZXh0dXJlU3VyZmFjZSwgMCwgMCk7CisgICAgY2Fpcm9fcGFpbnRfd2l0aF9hbHBoYShj
ciwgb3BhY2l0eSk7CisgICAgY2Fpcm9fcmVzdG9yZShjcik7CiB9CiAKIFBhc3NPd25QdHI8VGV4
dHVyZU1hcHBlcj4gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCkKQEAgLTEzMywxMiArMjQ5LDEyIEBAIEJpdG1hcFRleHR1cmVDYWlybzo6Qml0bWFwVGV4dHVy
ZUNhaXJvKCkKIAogdm9pZCBUZXh0dXJlTWFwcGVyQ2Fpcm86OmJlZ2luUGFpbnRpbmcoKQogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9jb250ZXh0LT5zYXZlKCk7CiB9CiAKIHZvaWQg
VGV4dHVyZU1hcHBlckNhaXJvOjplbmRQYWludGluZygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBtX2NvbnRleHQtPnJlc3RvcmUoKTsKIH0KIAogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRl
eCBjMTMxZGFkLi45YjFlZTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIw
MTEtMTItMDIgIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CisKKyAgICAg
ICAgW0dUS10gQUMgLSBBZGQgVGV4dHVyZU1hcHBlckNhaXJvIGltcGxlbWVudGF0aW9uIGFuZCB3
aWRnZXQgZ2x1ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzM2MzQKKworICAgICAgICBBZGRlZCB0aGUgZ2x1ZSB0byB1c2UgdGhlIFRleHR1cmVNYXBw
ZXIgZnJvbSB0aGUgd2lkZ2V0LiBXZQorICAgICAgICBiYXNpY2FsbHkgc3luYyB0aGUgbGF5ZXJz
IHdoZW4gcmVxdWlyZWQgYW5kIGNvbXBvc2UgdGhlIHJlc3VsdCBpbgorICAgICAgICB0aGUgd2lk
Z2V0IHN1cmZhY2UuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6CisgICAgICAgIChyZW5kZXJDb21wb3Np
dGVkTGF5ZXJzKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19kcmF3KToKKyAgICAgICAgKHdl
YmtpdF93ZWJfdmlld19kaXNwb3NlKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19pbml0KToK
KyAgICAgICAgKHdlYlZpZXdTZXRSb290R3JhcGhpY3NMYXllcik6CisgICAgICAgIChzeW5jTGF5
ZXJzVGltZW91dCk6CisgICAgICAgICh3ZWJWaWV3TWFya0ZvclN5bmMpOgorICAgICAgICAqIHdl
YmtpdC93ZWJraXR3ZWJ2aWV3cHJpdmF0ZS5oOgorCiAyMDExLTEyLTAxICBQaGlsaXBwZSBOb3Jt
YW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBzY3JvbGxiYXJzIGlu
dGVyZmVyaW5nIHdpdGggZnVsbHNjcmVlbiAoaW4td2luZG93KSB2aWRlbyByZW5kZXJpbmcKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAppbmRleCA5MWYyZGZhLi5k
MDgxMGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmll
dy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCkBA
IC0xMTcsNiArMTE3LDEwIEBACiAjaW5jbHVkZSAiRGV2aWNlT3JpZW50YXRpb25DbGllbnRHdGsu
aCIKICNlbmRpZgogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVY
VFVSRV9NQVBQRVJfQ0FJUk8pCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckNhaXJvLmgiCisjZW5k
aWYKKwogLyoqCiAgKiBTRUNUSU9OOndlYmtpdHdlYnZpZXcKICAqIEBzaG9ydF9kZXNjcmlwdGlv
bjogVGhlIGNlbnRyYWwgY2xhc3Mgb2YgdGhlIFdlYktpdEdUSysgQVBJCkBAIC02MjMsNiArNjI3
LDM3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19zZXRfcHJvcGVydHkoR09iamVjdCog
b2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBHCiAgICAgfQogfQogCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVJfQ0FJUk8pCitzdGF0aWMg
dm9pZCByZW5kZXJDb21wb3NpdGVkTGF5ZXJzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNhaXJv
X3QqIGNyLCBjb25zdCBJbnRSZWN0JiBjbGlwLCBjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUp
Cit7CisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OworCisg
ICAgaWYgKCFwcml2LT5yb290VGV4dHVyZU1hcHBlck5vZGUgfHwgIXByaXYtPnRleHR1cmVNYXBw
ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGNyKTsK
KyAgICBwcml2LT50ZXh0dXJlTWFwcGVyLT5zZXRHcmFwaGljc0NvbnRleHQoJmNvbnRleHQpOwor
ICAgIHByaXYtPnRleHR1cmVNYXBwZXItPnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoY29u
dGV4dC5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpOworICAgIHByaXYtPnRleHR1cmVNYXBw
ZXItPnNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LnRleHREcmF3aW5nTW9kZSgpKTsKKyAgICBw
cml2LT50ZXh0dXJlTWFwcGVyLT5zZXRWaWV3cG9ydFNpemUodmlld3BvcnRTaXplKTsKKyAgICBj
YWlyb19tYXRyaXhfdCB0cmFuc2Zvcm07CisgICAgY2Fpcm9fZ2V0X21hdHJpeChjciwgJnRyYW5z
Zm9ybSk7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OzsKKyAgICAvKiBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgoICovCisgICAgLyogICAgIHRyYW5zZm9y
bS54eCwgdHJhbnNmb3JtLnl4LCAwLCAwLCAqLworICAgIC8qICAgICB0cmFuc2Zvcm0ueHksIHRy
YW5zZm9ybS55eSwgMCwgMCwgKi8KKyAgICAvKiAgICAgMCwgMCwgMSwgMCwgKi8KKyAgICAvKiAg
ICAgdHJhbnNmb3JtLngwLCB0cmFuc2Zvcm0ueTAsIDAsIDAgKi8KKyAgICAvKiAgICAgKTsgKi8K
KyAgICBwcml2LT5yb290VGV4dHVyZU1hcHBlck5vZGUtPnNldFRyYW5zZm9ybShtYXRyaXgpOwor
ICAgIHByaXYtPnRleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKKyAgICBwcml2LT50ZXh0
dXJlTWFwcGVyLT5iZWdpbkNsaXAobWF0cml4LCBjbGlwKTsKKyAgICBwcml2LT5yb290VGV4dHVy
ZU1hcHBlck5vZGUtPnBhaW50KCk7CisgICAgcHJpdi0+dGV4dHVyZU1hcHBlci0+ZW5kQ2xpcCgp
OworICAgIHByaXYtPnRleHR1cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7Cit9CisjZW5kaWYKKwog
I2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCiBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3
X2V4cG9zZV9ldmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRFeHBvc2UqIGV2ZW50KQog
ewpAQCAtNjUxLDEyICs2ODYsMTggQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19k
cmF3KEd0a1dpZGdldCogd2lkZ2V0LCBjYWlyb190KiBjcikKICAgICB9CiAKICAgICBWZWN0b3I8
SW50UmVjdD4gcmVjdHM7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJf
VklFVyh3aWRnZXQpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdExpc3QtPm51bV9yZWN0
YW5nbGVzOyBpKyspIHsKLSAgICAgICAgY29weVJlY3RGcm9tQ2Fpcm9TdXJmYWNlVG9Db250ZXh0
KFdFQktJVF9XRUJfVklFVyh3aWRnZXQpLT5wcml2LT5iYWNraW5nU3RvcmUtPmNhaXJvU3VyZmFj
ZSgpLAorICAgICAgICBjb3B5UmVjdEZyb21DYWlyb1N1cmZhY2VUb0NvbnRleHQod2ViVmlldy0+
cHJpdi0+YmFja2luZ1N0b3JlLT5jYWlyb1N1cmZhY2UoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNyLCBJbnRTaXplKCksIGVuY2xvc2luZ0ludFJlY3QoRmxv
YXRSZWN0KHJlY3RMaXN0LT5yZWN0YW5nbGVzW2ldKSkpOwogICAgIH0KICAgICBjYWlyb19yZWN0
YW5nbGVfbGlzdF9kZXN0cm95KHJlY3RMaXN0KTsKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSX0NBSVJPKQorICAgIEZyYW1lKiBmcmFtZSA9
IGNvcmUod2ViVmlldyktPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsK
KyAgICByZW5kZXJDb21wb3NpdGVkTGF5ZXJzKHdlYlZpZXcsIGNyLCBjbGlwUmVjdCwgZnJhbWUt
PnZpZXcoKS0+ZnJhbWVSZWN0KCkuc2l6ZSgpKTsKKyNlbmRpZgorCiAgICAgcmV0dXJuIEZBTFNF
OwogfQogI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCkBAIC0xMjcxLDYgKzEzMTIsMTMgQEAg
c3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Rpc3Bvc2UoR09iamVjdCogb2JqZWN0KQogICAg
IHByaXYtPm1haW5SZXNvdXJjZS5jbGVhcigpOwogICAgIHByaXYtPnN1YlJlc291cmNlcy5jbGVh
cigpOwogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9N
QVBQRVJfQ0FJUk8pCisgICAgaWYgKHByaXYtPnN5bmNMYXllcnNUaW1lb3V0KSB7CisgICAgICAg
IGdfc291cmNlX3JlbW92ZShwcml2LT5zeW5jTGF5ZXJzVGltZW91dCk7CisgICAgICAgIHByaXYt
PnN5bmNMYXllcnNUaW1lb3V0ID0gMDsKKyAgICB9CisjZW5kaWYKKwogICAgIEdfT0JKRUNUX0NM
QVNTKHdlYmtpdF93ZWJfdmlld19wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7CiB9CiAK
QEAgLTMzMTAsNiArMzM1OCwxMSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfaW5pdChX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIGd0a19kcmFnX2Rlc3Rfc2V0X3RhcmdldF9saXN0
KEdUS19XSURHRVQod2ViVmlldyksIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJk
SGVscGVyKCktPnRhcmdldExpc3QoKSk7CiAKICAgICBwcml2LT5zZWxmU2Nyb2xsaW5nID0gZmFs
c2U7CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01B
UFBFUl9DQUlSTykKKyAgICBwcml2LT5yb290VGV4dHVyZU1hcHBlck5vZGUgPSAwOworICAgIHBy
aXYtPnN5bmNMYXllcnNUaW1lb3V0ID0gMDsKKyNlbmRpZgogfQogCiBHdGtXaWRnZXQqIHdlYmtp
dF93ZWJfdmlld19uZXcodm9pZCkKQEAgLTQ4ODIsNyArNDkzNSw2MiBAQCB2b2lkIHdlYlZpZXdF
eGl0RnVsbHNjcmVlbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogI2VuZGlmCiB9CiAKLSNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVJfQ0FJUk8pCit2b2lkIHdlYlZpZXdTZXRSb290R3Jh
cGhpY3NMYXllcihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHcmFwaGljc0xheWVyKiBncmFwaGlj
c0xheWVyKQoreworICAgIGlmIChncmFwaGljc0xheWVyKSB7CisgICAgICAgIFdlYktpdFdlYlZp
ZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKKyAgICAgICAgcHJpdi0+cm9vdEdyYXBo
aWNzTGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUoMCk7CisgICAgICAgIHByaXYtPnJvb3RU
ZXh0dXJlTWFwcGVyTm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUocHJpdi0+cm9vdEdyYXBoaWNz
TGF5ZXIuZ2V0KCkpOworCisgICAgICAgIHByaXYtPnJvb3RHcmFwaGljc0xheWVyLT5hZGRDaGls
ZChncmFwaGljc0xheWVyKTsKKyAgICAgICAgcHJpdi0+cm9vdEdyYXBoaWNzTGF5ZXItPnNldERy
YXdzQ29udGVudChmYWxzZSk7CisgICAgICAgIHByaXYtPnJvb3RHcmFwaGljc0xheWVyLT5zZXRN
YXNrc1RvQm91bmRzKGZhbHNlKTsKKyAgICAgICAgcHJpdi0+cm9vdEdyYXBoaWNzTGF5ZXItPnNl
dFNpemUoSW50U2l6ZSgxLCAxKSk7CisKKyAgICAgICAgcHJpdi0+dGV4dHVyZU1hcHBlciA9IFRl
eHR1cmVNYXBwZXJDYWlybzo6Y3JlYXRlKCk7CisgICAgICAgIHByaXYtPnJvb3RUZXh0dXJlTWFw
cGVyTm9kZS0+c2V0VGV4dHVyZU1hcHBlcihwcml2LT50ZXh0dXJlTWFwcGVyLmdldCgpKTsKKyAg
ICAgICAgZ3JhcGhpY3NMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAod2ViVmlldy0+cHJpdi0+cm9v
dEdyYXBoaWNzTGF5ZXIpCisgICAgICAgIHdlYlZpZXctPnByaXYtPnJvb3RHcmFwaGljc0xheWVy
LmNsZWFyKCk7Cit9CisKK2dib29sZWFuIHN5bmNMYXllcnNUaW1lb3V0KFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcpCit7CisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5w
cml2OworCisgICAgaWYgKHByaXYtPnJvb3RHcmFwaGljc0xheWVyKQorICAgICAgICBwcml2LT5y
b290R3JhcGhpY3NMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7
CisKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZSh3ZWJWaWV3KS0+bWFpbkZyYW1lKCk7Cisg
ICAgY29yZUZyYW1lLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJh
bWVzKCk7CisKKyAgICBpZiAoIXByaXYtPnJvb3RHcmFwaGljc0xheWVyKSB7CisgICAgICAgIHBy
aXYtPnN5bmNMYXllcnNUaW1lb3V0ID0gMDsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0K
KworICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhHVEtfV0lER0VUKHdlYlZpZXcpKTsKKworICAg
IGlmICh0b1RleHR1cmVNYXBwZXJOb2RlKHByaXYtPnJvb3RHcmFwaGljc0xheWVyLmdldCgpKS0+
ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkKKyAgICAgICAgcmV0dXJu
IFRSVUU7CisKKyAgICBwcml2LT5zeW5jTGF5ZXJzVGltZW91dCA9IDA7CisKKyAgICByZXR1cm4g
RkFMU0U7Cit9CisKK3ZvaWQgd2ViVmlld01hcmtGb3JTeW5jKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIGdib29sZWFuIHNjaGVkdWxlU3luYykKK3sKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSog
cHJpdiA9IHdlYlZpZXctPnByaXY7CisKKyAgICBpZiAoIXByaXYtPnN5bmNMYXllcnNUaW1lb3V0
KQorICAgICAgICBwcml2LT5zeW5jTGF5ZXJzVGltZW91dCA9IGdfdGltZW91dF9hZGQoMTcsIHJl
aW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHN5bmNMYXllcnNUaW1lb3V0KSwgd2ViVmlldyk7
Cit9CisjZWxzZQogdm9pZCB3ZWJWaWV3U2V0Um9vdEdyYXBoaWNzTGF5ZXIoV2ViS2l0V2ViVmll
dyogd2ViVmlldywgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKIHsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YnZpZXdwcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlld3By
aXZhdGUuaAppbmRleCA5MmMzNTVlLi4xMjY0MTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaApAQCAtMzAsOCArMzAsMTQgQEAKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJXaWRn
ZXRCYWNraW5nU3RvcmUuaCIKKwogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJ2aWV3Lmg+CiAK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaW5jbHVkZSAiR3JhcGhpY3NMYXll
ci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJOb2RlLmgiCisjZW5kaWYKKwogbmFtZXNwYWNl
IFdlYktpdCB7CiBXZWJDb3JlOjpQYWdlKiBjb3JlKFdlYktpdFdlYlZpZXcqKTsKIFdlYktpdFdl
YlZpZXcqIGtpdChXZWJDb3JlOjpQYWdlKik7CkBAIC04MSw2ICs4NywxMyBAQCBzdHJ1Y3QgX1dl
YktpdFdlYlZpZXdQcml2YXRlIHsKICAgICBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyKiBmdWxs
c2NyZWVuVmlkZW9Db250cm9sbGVyOwogI2VuZGlmCiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUl9DQUlSTykKKyAgICBPd25QdHI8V2ViQ29y
ZTo6R3JhcGhpY3NMYXllcj4gcm9vdEdyYXBoaWNzTGF5ZXI7CisgICAgV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlck5vZGUqIHJvb3RUZXh0dXJlTWFwcGVyTm9kZTsKKyAgICBPd25QdHI8V2ViQ29yZTo6
VGV4dHVyZU1hcHBlcj4gdGV4dHVyZU1hcHBlcjsKKyAgICBndWludCBzeW5jTGF5ZXJzVGltZW91
dDsKKyNlbmRpZgorCiAgICAgLy8gVGhlc2UgYXJlIGhvc3RlZCBoZXJlIGJlY2F1c2UgdGhlIERh
dGFTb3VyY2Ugb2JqZWN0IGlzCiAgICAgLy8gY3JlYXRlZCB0b28gbGF0ZSBpbiB0aGUgZnJhbWUg
bG9hZGluZyBwcm9jZXNzLgogICAgIEdSZWZQdHI8V2ViS2l0V2ViUmVzb3VyY2U+IG1haW5SZXNv
dXJjZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117787</attachid>
            <date>2011-12-04 02:07:21 -0800</date>
            <delta_ts>2012-05-23 05:55:58 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>texmap_cairo.patch</filename>
            <type>text/plain</type>
            <size>18477</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IDEzODcyNDg2ZGVkZWY4ZGMyODU2NWY3YWIxYWQyN2RhMTllNGU1NmEKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgRnJpIERlYyAyIDA5
OjUxOjEyIDIwMTEgKzAxMDAKCiAgICAgICAyMDExLTEyLTAyICBBbGVqYW5kcm8gRy4gQ2FzdHJv
ICA8YWxleEBpZ2FsaWEuY29tPgogICAgCiAgICAgICAgICAgIFtHVEtdIEFDIC0gQWRkIFRleHR1
cmVNYXBwZXJDYWlybyBpbXBsZW1lbnRhdGlvbiBhbmQgd2lkZ2V0IGdsdWUKICAgICAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczNjM0CiAgICAKICAgICAg
ICAgICAgQWRkZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtYWluIFRleHR1cmVNYXBwZXJD
YWlybyBtZXRob2RzLAogICAgICAgICAgICBpdCBoYW5kbGVzIHRoZSBiaXRtYXAgdGV4dHVyZXMg
dXNpbmcgYSBjYWlybyBzdXJmYWNlLCBpdCBpcyBzbG93CiAgICAgICAgICAgIGJ1dCBpdCBhbGxv
d3MgdXMgdG8gY2hlY2sgdGhlIGlkZWEuCiAgICAKICAgICAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCiAgICAKICAgICAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9U
ZXh0dXJlTWFwcGVyQ2Fpcm8uY3BwOgogICAgICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVy
ZUNhaXJvOjpkZXN0cm95KToKICAgICAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVDYWly
bzo6c2l6ZSk6CiAgICAgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlQ2Fpcm86OnJlc2V0
KToKICAgICAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVDYWlybzo6Y2xlYXJSZWN0KToK
ICAgICAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVDYWlybzo6YmVnaW5QYWludCk6CiAg
ICAgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlQ2Fpcm86OmVuZFBhaW50KToKICAgICAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVDYWlybzo6c2V0Q29udGVudHNUb0ltYWdlKToK
ICAgICAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWlybzo6YmVnaW5DbGlwKToKICAg
ICAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWlybzo6ZW5kQ2xpcCk6CiAgICAgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ2Fpcm86OnZpZXdwb3J0U2l6ZSk6CiAgICAgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ2Fpcm86OmJpbmRTdXJmYWNlKToKICAgICAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWlybzo6ZHJhd1RleHR1cmUpOgogICAgICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNhaXJvOjpiZWdpblBhaW50aW5nKToKICAgICAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWlybzo6ZW5kUGFpbnRpbmcpOgogICAgCiAgICAy
MDExLTEyLTAyICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgogICAgCiAg
ICAgICAgICAgIFtHVEtdIEFDIC0gQWRkIFRleHR1cmVNYXBwZXJDYWlybyBpbXBsZW1lbnRhdGlv
biBhbmQgd2lkZ2V0IGdsdWUKICAgICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTczNjM0CiAgICAKICAgICAgICAgICAgQWRkZWQgdGhlIGdsdWUgdG8gdXNl
IHRoZSBUZXh0dXJlTWFwcGVyIGZyb20gdGhlIHdpZGdldC4gV2UKICAgICAgICAgICAgYmFzaWNh
bGx5IHN5bmMgdGhlIGxheWVycyB3aGVuIHJlcXVpcmVkIGFuZCBjb21wb3NlIHRoZSByZXN1bHQg
aW4KICAgICAgICAgICAgdGhlIHdpZGdldCBzdXJmYWNlLgogICAgCiAgICAgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogICAgCiAgICAgICAgICAgICogd2Via2l0L3dlYmtpdHdl
YnZpZXcuY3BwOgogICAgICAgICAgICAocmVuZGVyQ29tcG9zaXRlZExheWVycyk6CiAgICAgICAg
ICAgICh3ZWJraXRfd2ViX3ZpZXdfZHJhdyk6CiAgICAgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdf
ZGlzcG9zZSk6CiAgICAgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfaW5pdCk6CiAgICAgICAgICAg
ICh3ZWJWaWV3U2V0Um9vdEdyYXBoaWNzTGF5ZXIpOgogICAgICAgICAgICAoc3luY0xheWVyc1Rp
bWVvdXQpOgogICAgICAgICAgICAod2ViVmlld01hcmtGb3JTeW5jKToKICAgICAgICAgICAgKiB3
ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaDoKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmZiOTU4NS4uZDg4
YWM4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDExLTEyLTAyICBBbGVqYW5kcm8g
Ry4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEFDIC0gQWRkIFRl
eHR1cmVNYXBwZXJDYWlybyBpbXBsZW1lbnRhdGlvbiBhbmQgd2lkZ2V0IGdsdWUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczNjM0CisKKyAgICAgICAg
QWRkZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtYWluIFRleHR1cmVNYXBwZXJDYWlybyBt
ZXRob2RzLAorICAgICAgICBpdCBoYW5kbGVzIHRoZSBiaXRtYXAgdGV4dHVyZXMgdXNpbmcgYSBj
YWlybyBzdXJmYWNlLCBpdCBpcyBzbG93CisgICAgICAgIGJ1dCBpdCBhbGxvd3MgdXMgdG8gY2hl
Y2sgdGhlIGlkZWEuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUNhaXJvOjpkZXN0cm95KToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcFRleHR1cmVDYWlybzo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBUZXh0dXJlQ2Fpcm86OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1
cmVDYWlybzo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVDYWly
bzo6YmVnaW5QYWludCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlQ2Fpcm86OmVu
ZFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVDYWlybzo6c2V0Q29udGVu
dHNUb0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWlybzo6YmVnaW5D
bGlwKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWlybzo6ZW5kQ2xpcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ2Fpcm86OnZpZXdwb3J0U2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ2Fpcm86OmJpbmRTdXJmYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWlybzo6ZHJhd1RleHR1cmUpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckNhaXJvOjpiZWdpblBhaW50aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJDYWlybzo6ZW5kUGFpbnRpbmcpOgorCiAyMDExLTEyLTAzICBOb2Vs
IEdvcmRvbiAgPG5vZWwuZ29yZG9uQGdtYWlsLmNvbT4KIAogICAgICAgICBGaXggV2ViUEltYWdl
RGVjb2RlciBkZWNvZGVyIGxlYWsuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBlckNhaXJvLmNwcAppbmRleCA2MWQ4
YjIwLi45NzAwNjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL1RleHR1cmVNYXBwZXJDYWlyby5jcHAKQEAgLTI1LDM1ICsyNSw3
NyBAQAogI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKIAorI2luY2x1ZGUgPGNhaXJvLXhsaWIuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiB2b2lkIEJpdG1hcFRleHR1cmVDYWlybzo6ZGVzdHJveSgpCiB7Ci0gICAgaWYgKG1fY29udGV4
dCkKLSAgICAgICAgZGVsZXRlIG1fY29udGV4dDsKKyAgICBtX3N1cmZhY2UgPSAwOworICAgIGRl
bGV0ZSBtX2NvbnRleHQ7CisgICAgbV9jb250ZXh0ID0gMDsKIH0KIAotCiBJbnRTaXplIEJpdG1h
cFRleHR1cmVDYWlybzo6c2l6ZSgpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gSW50U2l6ZSgpOworICAgIGlmICghbV9zdXJmYWNlKQorICAgICAgICByZXR1cm4g
SW50U2l6ZSgpOworCisgICAgcmV0dXJuIEludFNpemUoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
d2lkdGgobV9zdXJmYWNlLmdldCgpKSwKKyAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9oZWlnaHQobV9zdXJmYWNlLmdldCgpKSk7CiB9CiAKIHZvaWQgQml0bWFwVGV4
dHVyZUNhaXJvOjpyZXNldChjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGlzT3BhcXVlKQogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgQml0bWFwVGV4dHVyZTo6cmVzZXQoc2l6ZSwgaXNP
cGFxdWUpOworCisgICAgaWYgKCFtX3N1cmZhY2UKKyAgICAgICAgfHwgc2l6ZS53aWR0aCgpID4g
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgobV9zdXJmYWNlLmdldCgpKQorICAgICAgICB8
fCBzaXplLmhlaWdodCgpID4gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KG1fc3VyZmFj
ZS5nZXQoKSkpCisgICAgICAgIG1fc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZh
Y2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGgoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQo
KSkpOworCisgICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKG1fc3VyZmFjZS5nZXQoKSkgIT0g
Q0FJUk9fU1RBVFVTX1NVQ0NFU1MpCisgICAgICAgIHJldHVybjsKKworICAgIGNhaXJvX3QqIGNy
ID0gY2Fpcm9fY3JlYXRlKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgbV9jb250ZXh0ID0gbmV3IFBs
YXRmb3JtQ29udGV4dENhaXJvKGNyKTsKKworICAgIC8vIEZJWE1FOiBVc2UgcHJlcGFyZWZvckZp
bGxpbmcgYW5kIG90aGVyIHBsYXRmb3JtY29udGV4dGNhaXJvIG1ldGhvZHMKKyAgICBjYWlyb19z
YXZlKGNyKTsKKyAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBDb2xvcihDb2xvcjo6Ymxh
Y2spKTsKKyAgICBjYWlyb19wYWludF93aXRoX2FscGhhKGNyLCBpc09wYXF1ZSA/IDEuMCA6IDAu
MCk7CisgICAgY2Fpcm9fcmVzdG9yZShjcik7Cit9CisKKy8vIEZJWE1FOiBNb3ZlIHRvIENhaXJv
VXRpbGl0aWVzPwordm9pZCBCaXRtYXBUZXh0dXJlQ2Fpcm86OmNsZWFyUmVjdChjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIEFTU0VSVChtX2NvbnRleHQpOworICAgIGNhaXJvX3QqIGNyID0g
bV9jb250ZXh0LT5jcigpOworCisgICAgY2Fpcm9fc2F2ZShjcik7CisgICAgY2Fpcm9fcmVjdGFu
Z2xlKGNyLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7
CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9DTEVBUik7CisgICAg
Y2Fpcm9fZmlsbChjcik7CisgICAgY2Fpcm9fcmVzdG9yZShjcik7CiB9CiAKIFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0KiBCaXRtYXBUZXh0dXJlQ2Fpcm86OmJlZ2luUGFpbnQoY29uc3QgSW50UmVj
dCYgZGlydHlSZWN0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgY2Fpcm9fdCogY3Ig
PSBjYWlyb19jcmVhdGUobV9zdXJmYWNlLmdldCgpKTsKKyAgICBtX2NvbnRleHQgPSBuZXcgUGxh
dGZvcm1Db250ZXh0Q2Fpcm8oY3IpOworCisgICAgY2xlYXJSZWN0KGRpcnR5UmVjdCk7CisgICAg
Y2Fpcm9fc2F2ZShjcik7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRP
Ul9PVkVSKTsKICAgICByZXR1cm4gbV9jb250ZXh0OwogfQogCiB2b2lkIEJpdG1hcFRleHR1cmVD
YWlybzo6ZW5kUGFpbnQoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgY2Fpcm9fcmVz
dG9yZShtX2NvbnRleHQtPmNyKCkpOwogfQogCiB2b2lkIEJpdG1hcFRleHR1cmVDYWlybzo6dXBk
YXRlQ29udGVudHMoUGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3Qs
IHZvaWQqIGJpdHMpCkBAIC03MCwyMiArMTEyLDUzIEBAIGJvb2wgQml0bWFwVGV4dHVyZUNhaXJv
OjpzYXZlKGNvbnN0IFN0cmluZyYgcGF0aCkKIAogdm9pZCBCaXRtYXBUZXh0dXJlQ2Fpcm86OnNl
dENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBjYWlyb19zdXJmYWNlX3Qq
IHN1cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKworICAgIGlm
ICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdXJmYWNlID0gY29weUNhaXJv
SW1hZ2VTdXJmYWNlKHN1cmZhY2UpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJDYWlybzo6YmVn
aW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1fY29udGV4dC0+c2F2ZSgp
OworCisgICAgY2Fpcm9fbWF0cml4X3Qgc2F2ZWRNYXRyaXg7CisgICAgY2Fpcm9fdCogY3IgPSBt
X2NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOworICAgIGNhaXJvX2dldF9tYXRyaXgo
Y3IsICZzYXZlZE1hdHJpeCk7CisgICAgY29uc3QgY2Fpcm9fbWF0cml4X3QgY2Fpcm9NYXRyaXgg
PSBjYWlyb19tYXRyaXhfdChtYXRyaXgpOworICAgIGNhaXJvX3NldF9tYXRyaXgoY3IsICZjYWly
b01hdHJpeCk7CisKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHJlY3QueCgpLCByZWN0LnkoKSwg
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBjYWlyb19jbGlwKGNyKTsKKworICAg
IGNhaXJvX3NldF9tYXRyaXgoY3IsICZzYXZlZE1hdHJpeCk7CiB9CiAKIHZvaWQgVGV4dHVyZU1h
cHBlckNhaXJvOjplbmRDbGlwKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1fY29u
dGV4dC0+cmVzdG9yZSgpOwogfQogCiBJbnRTaXplIFRleHR1cmVNYXBwZXJDYWlybzo6dmlld3Bv
cnRTaXplKCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGNhaXJvX3QqIGNy
ID0gbV9jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKKyAgICBjYWlyb19zdXJmYWNl
X3QqIHN1cmZhY2UgPSBjYWlyb19nZXRfdGFyZ2V0KGNyKTsKKworICAgIHN3aXRjaCAoY2Fpcm9f
c3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKSkgeworICAgIGNhc2UgQ0FJUk9fU1VSRkFDRV9UWVBF
X0lNQUdFOgorICAgICAgICByZXR1cm4gSW50U2l6ZShjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93
aWR0aChzdXJmYWNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfaGVpZ2h0KHN1cmZhY2UpKTsKKyAgICBjYXNlIENBSVJPX1NVUkZBQ0VfVFlQRV9YTElC
OgorICAgICAgICByZXR1cm4gSW50U2l6ZShjYWlyb194bGliX3N1cmZhY2VfZ2V0X3dpZHRoKHN1
cmZhY2UpLAorICAgICAgICAgICAgICAgICAgICAgICBjYWlyb194bGliX3N1cmZhY2VfZ2V0X2hl
aWdodChzdXJmYWNlKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEludFNpemUoMCwg
MCk7CisgICAgfTsKIH0KIAogCkBAIC0xMDYsMTMgKzE3OSw1NiBAQCBHcmFwaGljc0NvbnRleHQq
IFRleHR1cmVNYXBwZXJDYWlybzo6Z3JhcGhpY3NDb250ZXh0KCkKIAogdm9pZCBUZXh0dXJlTWFw
cGVyQ2Fpcm86OmJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHRleHR1cmUpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAobV90ZXh0dXJlID09IHRleHR1cmUpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoIXRleHR1cmUpIHsKKyAgICAgICAgbV90ZXh0dXJlID0gMDsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEJpdG1hcFRleHR1cmVDYWlybyogdGV4dHVyZUNhaXJv
ID0gc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVyZUNhaXJvKj4odGV4dHVyZSk7CisgICAgbV90ZXh0
dXJlID0gdGV4dHVyZUNhaXJvOwogfQogCiAKIHZvaWQgVGV4dHVyZU1hcHBlckNhaXJvOjpkcmF3
VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHRh
cmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNp
dHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgY29uc3QgQml0bWFwVGV4dHVyZUNhaXJvJiB0ZXh0dXJlQ2Fpcm8gPSBzdGF0
aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlQ2Fpcm8mPih0ZXh0dXJlKTsKKworICAgIEFTU0VS
VCh0ZXh0dXJlQ2Fpcm8ubV9jb250ZXh0KTsKKworICAgIGNhaXJvX3QqIGNyID0gbV9jb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKKyAgICBjYWlyb19zdXJmYWNlX3QqIHRleHR1cmVT
dXJmYWNlID0gdGV4dHVyZUNhaXJvLm1fc3VyZmFjZS5nZXQoKTsKKyAgICBSZWZQdHI8Y2Fpcm9f
c3VyZmFjZV90PiBpbnRlcm1lZGlhdGVTdXJmYWNlOworCisgICAgaWYgKG1fdGV4dHVyZSkKKyAg
ICAgICAgY3IgPSBtX3RleHR1cmUtPm1fY29udGV4dC0+Y3IoKTsKKworICAgIGlmIChtYXNrVGV4
dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpKSB7CisgICAgICAgIGNvbnN0IEJpdG1hcFRl
eHR1cmVDYWlybyogbWFzayA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVDYWlybyo+
KG1hc2tUZXh0dXJlKTsKKyAgICAgICAgaW50ZXJtZWRpYXRlU3VyZmFjZSA9IGNhaXJvX2ltYWdl
X3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF93aWR0aCh0ZXh0dXJlU3VyZmFjZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWln
aHQodGV4dHVyZVN1cmZhY2UpKTsKKyAgICAgICAgUmVmUHRyPGNhaXJvX3Q+IG1hc2tDciA9IGNh
aXJvX2NyZWF0ZShpbnRlcm1lZGlhdGVTdXJmYWNlLmdldCgpKTsKKyAgICAgICAgc2V0U291cmNl
UkdCQUZyb21Db2xvcihtYXNrQ3IuZ2V0KCksIENvbG9yKENvbG9yOjpibGFjaykpOworICAgICAg
ICBjYWlyb19wYWludF93aXRoX2FscGhhKG1hc2tDci5nZXQoKSwgMC4wKTsKKworICAgICAgICBj
YWlyb19zZXRfc291cmNlX3N1cmZhY2UobWFza0NyLmdldCgpLCB0ZXh0dXJlU3VyZmFjZSwgMCwg
MCk7CisgICAgICAgIGNhaXJvX3BhaW50KG1hc2tDci5nZXQoKSk7CisKKyAgICAgICAgY2Fpcm9f
c2V0X29wZXJhdG9yKG1hc2tDci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfREVTVF9JTik7CisgICAg
ICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShtYXNrQ3IuZ2V0KCksIG1hc2stPm1fc3VyZmFj
ZS5nZXQoKSwgMCwgMCk7CisgICAgICAgIGNhaXJvX3BhaW50KG1hc2tDci5nZXQoKSk7CisKKyAg
ICAgICAgdGV4dHVyZVN1cmZhY2UgPSBpbnRlcm1lZGlhdGVTdXJmYWNlLmdldCgpOworICAgIH0K
KworICAgIGNhaXJvX3NhdmUoY3IpOworICAgIGNvbnN0IGNhaXJvX21hdHJpeF90IGNhaXJvTWF0
cml4ID0gY2Fpcm9fbWF0cml4X3QobWF0cml4KTsKKyAgICBjYWlyb19zZXRfbWF0cml4KGNyLCAm
Y2Fpcm9NYXRyaXgpOworICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjciwgdGV4dHVyZVN1
cmZhY2UsIDAsIDApOworICAgIGNhaXJvX3BhaW50X3dpdGhfYWxwaGEoY3IsIG9wYWNpdHkpOwor
ICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwogfQogCiBQYXNzT3duUHRyPFRleHR1cmVNYXBwZXI+IFRl
eHR1cmVNYXBwZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCkBAIC0xMzMsMTIg
KzI0OSwxMiBAQCBCaXRtYXBUZXh0dXJlQ2Fpcm86OkJpdG1hcFRleHR1cmVDYWlybygpCiAKIHZv
aWQgVGV4dHVyZU1hcHBlckNhaXJvOjpiZWdpblBhaW50aW5nKCkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIG1fY29udGV4dC0+c2F2ZSgpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJD
YWlybzo6ZW5kUGFpbnRpbmcoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9jb250
ZXh0LT5yZXN0b3JlKCk7CiB9CiAKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggNzMxMTRiOS4uMGY0
MzhhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDExLTEyLTAyICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEFDIC0g
QWRkIFRleHR1cmVNYXBwZXJDYWlybyBpbXBsZW1lbnRhdGlvbiBhbmQgd2lkZ2V0IGdsdWUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczNjM0CisKKyAg
ICAgICAgQWRkZWQgdGhlIGdsdWUgdG8gdXNlIHRoZSBUZXh0dXJlTWFwcGVyIGZyb20gdGhlIHdp
ZGdldC4gV2UKKyAgICAgICAgYmFzaWNhbGx5IHN5bmMgdGhlIGxheWVycyB3aGVuIHJlcXVpcmVk
IGFuZCBjb21wb3NlIHRoZSByZXN1bHQgaW4KKyAgICAgICAgdGhlIHdpZGdldCBzdXJmYWNlLgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2Via2l0
L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAocmVuZGVyQ29tcG9zaXRlZExheWVycyk6Cisg
ICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZHJhdyk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdf
ZGlzcG9zZSk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfaW5pdCk6CisgICAgICAgICh3ZWJW
aWV3U2V0Um9vdEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoc3luY0xheWVyc1RpbWVvdXQpOgor
ICAgICAgICAod2ViVmlld01hcmtGb3JTeW5jKToKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vi
dmlld3ByaXZhdGUuaDoKKwogMjAxMS0xMi0wMyAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5j
aGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgUmVtb3ZpbmcgZG9jdW1lbnQgcmVsYXRlZCBldmVu
dHMgZnJvbSBEUlQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApp
bmRleCA5MWYyZGZhLi5mZTgwZGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXcuY3BwCkBAIC0xMTcsNiArMTE3LDEwIEBACiAjaW5jbHVkZSAiRGV2aWNlT3JpZW50
YXRpb25DbGllbnRHdGsuaCIKICNlbmRpZgogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVJfQ0FJUk8pCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ckNhaXJvLmgiCisjZW5kaWYKKwogLyoqCiAgKiBTRUNUSU9OOndlYmtpdHdlYnZpZXcKICAqIEBz
aG9ydF9kZXNjcmlwdGlvbjogVGhlIGNlbnRyYWwgY2xhc3Mgb2YgdGhlIFdlYktpdEdUSysgQVBJ
CkBAIC02MjMsNiArNjI3LDMyIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19zZXRfcHJv
cGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBHCiAgICAgfQogfQog
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVJf
Q0FJUk8pCitzdGF0aWMgdm9pZCByZW5kZXJDb21wb3NpdGVkTGF5ZXJzKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcsIGNhaXJvX3QqIGNyLCBjb25zdCBJbnRSZWN0JiBjbGlwLCBjb25zdCBJbnRTaXpl
JiB2aWV3cG9ydFNpemUpCit7CisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJW
aWV3LT5wcml2OworCisgICAgaWYgKCFwcml2LT5yb290VGV4dHVyZU1hcHBlck5vZGUgfHwgIXBy
aXYtPnRleHR1cmVNYXBwZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4
dCBjb250ZXh0KGNyKTsKKyAgICBwcml2LT50ZXh0dXJlTWFwcGVyLT5zZXRHcmFwaGljc0NvbnRl
eHQoJmNvbnRleHQpOworICAgIHByaXYtPnRleHR1cmVNYXBwZXItPnNldEltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoY29udGV4dC5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpOworICAgIHBy
aXYtPnRleHR1cmVNYXBwZXItPnNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LnRleHREcmF3aW5n
TW9kZSgpKTsKKyAgICBwcml2LT50ZXh0dXJlTWFwcGVyLT5zZXRWaWV3cG9ydFNpemUodmlld3Bv
cnRTaXplKTsKKyAgICBjYWlyb19tYXRyaXhfdCB0cmFuc2Zvcm07CisgICAgY2Fpcm9fZ2V0X21h
dHJpeChjciwgJnRyYW5zZm9ybSk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OzsK
KyAgICBtYXRyaXguc2V0TWF0cml4KHRyYW5zZm9ybS54eCwgdHJhbnNmb3JtLnl4LCB0cmFuc2Zv
cm0ueHksIHRyYW5zZm9ybS55eSwgdHJhbnNmb3JtLngwLCB0cmFuc2Zvcm0ueTApOworICAgIHBy
aXYtPnJvb3RUZXh0dXJlTWFwcGVyTm9kZS0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7CisgICAgcHJp
di0+dGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZygpOworICAgIHByaXYtPnRleHR1cmVNYXBw
ZXItPmJlZ2luQ2xpcChtYXRyaXgsIGNsaXApOworICAgIHByaXYtPnJvb3RUZXh0dXJlTWFwcGVy
Tm9kZS0+cGFpbnQoKTsKKyAgICBwcml2LT50ZXh0dXJlTWFwcGVyLT5lbmRDbGlwKCk7CisgICAg
cHJpdi0+dGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKK30KKyNlbmRpZgorCiAjaWZkZWYg
R1RLX0FQSV9WRVJTSU9OXzIKIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfZXhwb3Nl
X2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEV4cG9zZSogZXZlbnQpCiB7CkBAIC02
NTEsMTIgKzY4MSwxOCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2RyYXcoR3Rr
V2lkZ2V0KiB3aWRnZXQsIGNhaXJvX3QqIGNyKQogICAgIH0KIAogICAgIFZlY3RvcjxJbnRSZWN0
PiByZWN0czsKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdp
ZGdldCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0TGlzdC0+bnVtX3JlY3RhbmdsZXM7
IGkrKykgewotICAgICAgICBjb3B5UmVjdEZyb21DYWlyb1N1cmZhY2VUb0NvbnRleHQoV0VCS0lU
X1dFQl9WSUVXKHdpZGdldCktPnByaXYtPmJhY2tpbmdTdG9yZS0+Y2Fpcm9TdXJmYWNlKCksCisg
ICAgICAgIGNvcHlSZWN0RnJvbUNhaXJvU3VyZmFjZVRvQ29udGV4dCh3ZWJWaWV3LT5wcml2LT5i
YWNraW5nU3RvcmUtPmNhaXJvU3VyZmFjZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3IsIEludFNpemUoKSwgZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3Qo
cmVjdExpc3QtPnJlY3RhbmdsZXNbaV0pKSk7CiAgICAgfQogICAgIGNhaXJvX3JlY3RhbmdsZV9s
aXN0X2Rlc3Ryb3kocmVjdExpc3QpOwogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVJfQ0FJUk8pCisgICAgRnJhbWUqIGZyYW1lID0gY29yZSh3
ZWJWaWV3KS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIHJl
bmRlckNvbXBvc2l0ZWRMYXllcnMod2ViVmlldywgY3IsIGNsaXBSZWN0LCBmcmFtZS0+dmlldygp
LT5mcmFtZVJlY3QoKS5zaXplKCkpOworI2VuZGlmCisKICAgICByZXR1cm4gRkFMU0U7CiB9CiAj
ZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKQEAgLTEyNzEsNiArMTMwNywxMyBAQCBzdGF0aWMg
dm9pZCB3ZWJraXRfd2ViX3ZpZXdfZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCiAgICAgcHJpdi0+
bWFpblJlc291cmNlLmNsZWFyKCk7CiAgICAgcHJpdi0+c3ViUmVzb3VyY2VzLmNsZWFyKCk7CiAK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUl9D
QUlSTykKKyAgICBpZiAocHJpdi0+c3luY0xheWVyc1RpbWVvdXQpIHsKKyAgICAgICAgZ19zb3Vy
Y2VfcmVtb3ZlKHByaXYtPnN5bmNMYXllcnNUaW1lb3V0KTsKKyAgICAgICAgcHJpdi0+c3luY0xh
eWVyc1RpbWVvdXQgPSAwOworICAgIH0KKyNlbmRpZgorCiAgICAgR19PQkpFQ1RfQ0xBU1Mod2Vi
a2l0X3dlYl92aWV3X3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKIH0KIApAQCAtMzMx
MCw2ICszMzUzLDExIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19pbml0KFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcpCiAgICAgZ3RrX2RyYWdfZGVzdF9zZXRfdGFyZ2V0X2xpc3QoR1RLX1dJ
REdFVCh3ZWJWaWV3KSwgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIo
KS0+dGFyZ2V0TGlzdCgpKTsKIAogICAgIHByaXYtPnNlbGZTY3JvbGxpbmcgPSBmYWxzZTsKKwor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSX0NB
SVJPKQorICAgIHByaXYtPnJvb3RUZXh0dXJlTWFwcGVyTm9kZSA9IDA7CisgICAgcHJpdi0+c3lu
Y0xheWVyc1RpbWVvdXQgPSAwOworI2VuZGlmCiB9CiAKIEd0a1dpZGdldCogd2Via2l0X3dlYl92
aWV3X25ldyh2b2lkKQpAQCAtNDg4Miw3ICs0OTMwLDYyIEBAIHZvaWQgd2ViVmlld0V4aXRGdWxs
c2NyZWVuKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAjZW5kaWYKIH0KIAotI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYm
IFVTRShURVhUVVJFX01BUFBFUl9DQUlSTykKK3ZvaWQgd2ViVmlld1NldFJvb3RHcmFwaGljc0xh
eWVyKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIp
Cit7CisgICAgaWYgKGdyYXBoaWNzTGF5ZXIpIHsKKyAgICAgICAgV2ViS2l0V2ViVmlld1ByaXZh
dGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OworICAgICAgICBwcml2LT5yb290R3JhcGhpY3NMYXll
ciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgwKTsKKyAgICAgICAgcHJpdi0+cm9vdFRleHR1cmVN
YXBwZXJOb2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShwcml2LT5yb290R3JhcGhpY3NMYXllci5n
ZXQoKSk7CisKKyAgICAgICAgcHJpdi0+cm9vdEdyYXBoaWNzTGF5ZXItPmFkZENoaWxkKGdyYXBo
aWNzTGF5ZXIpOworICAgICAgICBwcml2LT5yb290R3JhcGhpY3NMYXllci0+c2V0RHJhd3NDb250
ZW50KGZhbHNlKTsKKyAgICAgICAgcHJpdi0+cm9vdEdyYXBoaWNzTGF5ZXItPnNldE1hc2tzVG9C
b3VuZHMoZmFsc2UpOworICAgICAgICBwcml2LT5yb290R3JhcGhpY3NMYXllci0+c2V0U2l6ZShJ
bnRTaXplKDEsIDEpKTsKKworICAgICAgICBwcml2LT50ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1h
cHBlckNhaXJvOjpjcmVhdGUoKTsKKyAgICAgICAgcHJpdi0+cm9vdFRleHR1cmVNYXBwZXJOb2Rl
LT5zZXRUZXh0dXJlTWFwcGVyKHByaXYtPnRleHR1cmVNYXBwZXIuZ2V0KCkpOworICAgICAgICBw
cml2LT5yb290R3JhcGhpY3NMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJP
bmx5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAod2ViVmlldy0+cHJpdi0+
cm9vdEdyYXBoaWNzTGF5ZXIpCisgICAgICAgIHdlYlZpZXctPnByaXYtPnJvb3RHcmFwaGljc0xh
eWVyLmNsZWFyKCk7Cit9CisKK2dib29sZWFuIHN5bmNMYXllcnNUaW1lb3V0KFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcpCit7CisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3
LT5wcml2OworCisgICAgaWYgKHByaXYtPnJvb3RHcmFwaGljc0xheWVyKQorICAgICAgICBwcml2
LT5yb290R3JhcGhpY3NMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5
KCk7CisKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZSh3ZWJWaWV3KS0+bWFpbkZyYW1lKCk7
CisgICAgY29yZUZyYW1lLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3Vi
ZnJhbWVzKCk7CisKKyAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXcoR1RLX1dJREdFVCh3ZWJWaWV3
KSk7CisKKyAgICBpZiAoIXByaXYtPnJvb3RHcmFwaGljc0xheWVyKSB7CisgICAgICAgIHByaXYt
PnN5bmNMYXllcnNUaW1lb3V0ID0gMDsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKwor
ICAgIGlmICh0b1RleHR1cmVNYXBwZXJOb2RlKHByaXYtPnJvb3RHcmFwaGljc0xheWVyLmdldCgp
KS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkKKyAgICAgICAgcmV0
dXJuIFRSVUU7CisKKyAgICBwcml2LT5zeW5jTGF5ZXJzVGltZW91dCA9IDA7CisKKyAgICByZXR1
cm4gRkFMU0U7Cit9CisKK3ZvaWQgd2ViVmlld01hcmtGb3JTeW5jKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcsIGdib29sZWFuIHNjaGVkdWxlU3luYykKK3sKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0
ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CisKKyAgICBpZiAoIXByaXYtPnN5bmNMYXllcnNUaW1l
b3V0KQorICAgICAgICBwcml2LT5zeW5jTGF5ZXJzVGltZW91dCA9IGdfdGltZW91dF9hZGQoMTcs
IHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHN5bmNMYXllcnNUaW1lb3V0KSwgd2ViVmll
dyk7Cit9CisjZWxzZQogdm9pZCB3ZWJWaWV3U2V0Um9vdEdyYXBoaWNzTGF5ZXIoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKIHsKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXdwcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmll
d3ByaXZhdGUuaAppbmRleCA5MmMzNTVlLi4xMjY0MTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaApAQCAtMzAsOCArMzAsMTQgQEAKICNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJX
aWRnZXRCYWNraW5nU3RvcmUuaCIKKwogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJ2aWV3Lmg+
CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaW5jbHVkZSAiR3JhcGhpY3NM
YXllci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJOb2RlLmgiCisjZW5kaWYKKwogbmFtZXNw
YWNlIFdlYktpdCB7CiBXZWJDb3JlOjpQYWdlKiBjb3JlKFdlYktpdFdlYlZpZXcqKTsKIFdlYktp
dFdlYlZpZXcqIGtpdChXZWJDb3JlOjpQYWdlKik7CkBAIC04MSw2ICs4NywxMyBAQCBzdHJ1Y3Qg
X1dlYktpdFdlYlZpZXdQcml2YXRlIHsKICAgICBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyKiBm
dWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOwogI2VuZGlmCiAKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUl9DQUlSTykKKyAgICBPd25QdHI8V2Vi
Q29yZTo6R3JhcGhpY3NMYXllcj4gcm9vdEdyYXBoaWNzTGF5ZXI7CisgICAgV2ViQ29yZTo6VGV4
dHVyZU1hcHBlck5vZGUqIHJvb3RUZXh0dXJlTWFwcGVyTm9kZTsKKyAgICBPd25QdHI8V2ViQ29y
ZTo6VGV4dHVyZU1hcHBlcj4gdGV4dHVyZU1hcHBlcjsKKyAgICBndWludCBzeW5jTGF5ZXJzVGlt
ZW91dDsKKyNlbmRpZgorCiAgICAgLy8gVGhlc2UgYXJlIGhvc3RlZCBoZXJlIGJlY2F1c2UgdGhl
IERhdGFTb3VyY2Ugb2JqZWN0IGlzCiAgICAgLy8gY3JlYXRlZCB0b28gbGF0ZSBpbiB0aGUgZnJh
bWUgbG9hZGluZyBwcm9jZXNzLgogICAgIEdSZWZQdHI8V2ViS2l0V2ViUmVzb3VyY2U+IG1haW5S
ZXNvdXJjZTsK
</data>
<flag name="commit-queue"
          id="117340"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143550</attachid>
            <date>2012-05-23 05:55:58 -0700</date>
            <delta_ts>2012-05-29 04:18:35 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>imagebuffeaccairo.patch</filename>
            <type>text/plain</type>
            <size>28779</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IDQ1NmYyYjNkM2M5MmM2MzJhYmJhNzNiZjhlMDQ3OWQyNzc3YjkwNWIKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgV2VkIE1heSAyMyAx
MjoyNTowNiAyMDEyICswMjAwCgogICAgMjAxMi0wNS0yMyAgQWxlamFuZHJvIEcuIENhc3RybyAg
PGFsZXhAaWdhbGlhLmNvbT4KICAgIAogICAgICAgICAgICBbR1RLXSBbR1RLXSBBZGQgVGV4dHVy
ZU1hcHBlciBJbWFnZUJ1ZmZlciBzdXBwb3J0IGFzIGEgZmFsbGJhY2sKICAgICAgICAgICAgZnJv
bSB0aGUgaGFyZHdhcmUgYWNjZWxlcmF0ZWQgcGF0aAogICAgICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2MzQKICAgIAogICAgICAgICAgICBSZW1vdmUg
dGhlIFRleHR1cmVNYXBwZXJDYWlybyBjbGFzc2VzLCBub3cgd2UgdXNlCiAgICAgICAgICAgIFRl
eHR1cmVNYXBwZXJJbWFnZUJ1ZmZlciB0byBpbXBsZW1lbnQgdGhlIHNvZnR3YXJlIGZhbGxiYWNr
LiBBZGQKICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gZm9yIHRoZSAzRCB0cmFuc2Zvcm1hdGlv
bnMgaW4gdGhlIDJEIGNhaXJvIGdyYXBoaWNzCiAgICAgICAgICAgIGNvbnRleHQuCiAgICAKICAg
ICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAgICAKICAgICAgICAgICAgVGhp
cyBwYXRjaCBhZGRzIGEgbmV3IGltcGxlbWVudGF0aW9uIG9mIGFscmVhZHkgdGVzdGVkIGNhc2Vz
LgogICAgCiAgICAgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKICAgICAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwOgogICAg
ICAgICAgICAoV2ViQ29yZSk6CiAgICAgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKToKICAgICAgICAgICAgUmVxdWlyZWQgZm9y
IGNvbXBpbGF0aW9uIHdoZW4gV2ViR0wgaXMgZW5hYmxlZC4KICAgICAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CiAgICAgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldDNEVHJhbnNmb3JtKToKICAgICAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29uY2F0M0RUcmFuc2Zvcm0pOgogICAgICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXQzRFRyYW5zZm9ybSk6CiAgICAgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBlckNhaXJvLmNwcDogUmVtb3ZlZC4K
ICAgICAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8u
aDogUmVtb3ZlZC4KICAgICAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckltYWdlQnVmZmVyLmNwcDoKICAgICAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1
cmVJbWFnZUJ1ZmZlcjo6dXBkYXRlQ29udGVudHMpOgogICAgCiAgICAyMDEyLTA1LTIzICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgogICAgCiAgICAgICAgICAgIFtHVEtd
IFtHVEtdIEFkZCBUZXh0dXJlTWFwcGVyIEltYWdlQnVmZmVyIHN1cHBvcnQgYXMgYSBmYWxsYmFj
awogICAgICAgICAgICBmcm9tIHRoZSBoYXJkd2FyZSBhY2NlbGVyYXRlZCBwYXRoCiAgICAgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzYzNAogICAgCiAg
ICAgICAgICAgIEFkZCB0aGUgbmV3IGdyYXBoaWNzIGxheWVyIGNsaWVudCB0aGF0IHVzZXMgY2Fp
cm8gdG8gcmVuZGVyIHRoZQogICAgICAgICAgICBjb21wb3NpdGlvbi4gVGhlIGNhaXJvIHRyYW5z
Zm9ybWF0aW9ucyBkbyBub3Qgc3VwcG9ydCBwZXJzcGVjdGl2ZQogICAgICAgICAgICBzbyBpbiBw
ZXJzcGVjdGl2ZSBjYXNlcyB3ZSBoYXZlIGp1c3QgYSByZXByZXNlbnRhdGlvbiBub3QgdGhlIHJl
YWwKICAgICAgICAgICAgcGVyc3BlY3RpdmUgdHJhbnNmb3JtYXRpb24uCiAgICAKICAgICAgICAg
ICAgVGhpcyBwYXRjaCBhZGRzIGEgbmV3IGltcGxlbWVudGF0aW9uIG9mIGFscmVhZHkgdGVzdGVk
IGNhc2VzLgogICAgCiAgICAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogICAg
CiAgICAgICAgICAgICogR05VbWFrZWZpbGUuYW06CiAgICAgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaDoKICAgICAgICAgICAgKEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0KToKICAgICAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9BY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dENhaXJvLmNwcDogQWRkZWQuCiAgICAgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcDoKICAgICAgICAgICAgKFdlYktpdDo6
Q2hyb21lQ2xpZW50OjppbnZhbGlkYXRlV2lkZ2V0UmVjdCk6IFdlIG5lZWQgdG8KICAgICAgICAg
ICAgaW52YWxpZGF0ZSB0aGUgd2lkZ2V0IGluIHRoaXMgY2FzZSBiZWNhdXNlIHdlIGRvIG5vdCBk
aXJlY3RseQogICAgICAgICAgICByZW5kZXIgdG8gYSB0ZXh0dXJlIGJ1dCB0byB0aGUgd2lkZ2V0
IHN1cmZhY2UuCiAgICAgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudDo6cGFpbnQpOiBXZSBj
YW4gbm90IHJlbmRlciBoZXJlLCB3ZSBoYXZlIHRvCiAgICAgICAgICAgIGludmFsaWRhdGUgYW5k
IHdhaXQgZm9yIHRoZSB3aWRnZXQgcmVuZGVyaW5nLgogICAgICAgICAgICAqIHdlYmtpdC93ZWJr
aXR3ZWJ2aWV3LmNwcDoKICAgICAgICAgICAgKHdlYmtpdF93ZWJfdmlld19kcmF3KTogSW4gdGhp
cyBjYXNlIHRoZSByZW5kZXJMYXllcnNUb1dpbmRvdwogICAgICAgICAgICByZXF1aXJlcyB0aGUg
Z3JhcGhpY3MgY29udGV4dCB1c2VkIHRvIHJlbmRlciBpbiB0aGUgd2luZG93LgogICAgICAgICAg
ICAod2Via2l0X3dlYl92aWV3X3JlYWxpemUpOiBTbWFsbCBjbGVhbnVwIG9mIHRoZSBwcml2IHZh
cmlhYmxlCiAgICAgICAgICAgIGRlZmluaXRpb24uCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDI1ZTVmYTUuLmEx
MDBjOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMi0wNS0yMyAgQWxlamFuZHJv
IEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBbR1RLXSBBZGQg
VGV4dHVyZU1hcHBlciBJbWFnZUJ1ZmZlciBzdXBwb3J0IGFzIGEgZmFsbGJhY2sKKyAgICAgICAg
ZnJvbSB0aGUgaGFyZHdhcmUgYWNjZWxlcmF0ZWQgcGF0aAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2MzQKKworICAgICAgICBSZW1vdmUgdGhlIFRl
eHR1cmVNYXBwZXJDYWlybyBjbGFzc2VzLCBub3cgd2UgdXNlCisgICAgICAgIFRleHR1cmVNYXBw
ZXJJbWFnZUJ1ZmZlciB0byBpbXBsZW1lbnQgdGhlIHNvZnR3YXJlIGZhbGxiYWNrLiBBZGQKKyAg
ICAgICAgaW1wbGVtZW50YXRpb24gZm9yIHRoZSAzRCB0cmFuc2Zvcm1hdGlvbnMgaW4gdGhlIDJE
IGNhaXJvIGdyYXBoaWNzCisgICAgICAgIGNvbnRleHQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGEgbmV3IGltcGxlbWVu
dGF0aW9uIG9mIGFscmVhZHkgdGVzdGVkIGNhc2VzLgorCisgICAgICAgICogR05VbWFrZWZpbGUu
bGlzdC5hbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKToKKyAgICAgICAg
UmVxdWlyZWQgZm9yIGNvbXBpbGF0aW9uIHdoZW4gV2ViR0wgaXMgZW5hYmxlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldDNEVHJhbnNmb3JtKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29uY2F0M0RUcmFuc2Zvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXQzRFRyYW5zZm9ybSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBlckNhaXJvLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8uaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlcklt
YWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZl
cjo6dXBkYXRlQ29udGVudHMpOgorCiAyMDEyLTA1LTA3ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8
c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIENhbGxpbmcgbmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKSBjYXVzZXMgYXNzZXJ0aW9uIGZhaWx1cmU6IG1fdmVyaWZpZXIuaXNTYWZlVG9V
c2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNmEwNmMwZC4uMjViODgwZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC02MDI0LDYgKzYwMjQsOCBAQCBlbmRp
ZiAgIyBFTkQgVVNFX0NMVVRURVIKIAogaWYgVVNFX1RFWFRVUkVfTUFQUEVSX0NBSVJPCiB3ZWJj
b3JlX3NvdXJjZXMgKz0gXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmNwcCBcCkBAIC02MDM5LDkgKzYwNDEsNiBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCi13ZWJj
b3JlZ3RrX3NvdXJjZXMgKz0gXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1RleHR1cmVNYXBwZXJDYWlyby5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1RleHR1cmVNYXBwZXJDYWlyby5oCiBlbmRpZiAgIyBFTkQgVVNFX1RFWFRV
UkVfTUFQUEVSX0NBSVJPCiAKIGlmIFVTRV9URVhUVVJFX01BUFBFUl9HTApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKaW5kZXggZmYxYmUwNS4uMzlmOTM0NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCkBAIC01Niw3ICs1Niw3IEBAIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwbGF0Zm9ybUNvbnRl
eHQoKQogICAgIHJldHVybiBtX2dsQ29udGV4dCA/IG1fZ2xDb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKSA6IDA7CiB9CiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShU
RVhUVVJFX01BUFBFUikKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShU
RVhUVVJFX01BUFBFUikgJiYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQogdm9pZCBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1
cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaykKIHsK
ICAgICBpZiAoIW1fZ2xDb250ZXh0KQpAQCAtODYsNiArODYsMTIgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1
cmVNYXBwZXIKIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikgJiYg
VVNFKFRFWFRVUkVfTUFQUEVSX0NBSVJPKQordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJp
eCwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaykKK3sKK30KKyNlbmRpZiAvLyBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEVOQUJMRV9XRUJHTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4
IDdhODA0YjAuLjI0MjUzZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTEx
NDEsMTggKzExNDEsMTggQEAgSW50ZXJwb2xhdGlvblF1YWxpdHkgR3JhcGhpY3NDb250ZXh0Ojpp
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QKICNpZiBFTkFCTEUoM0RfUkVOREVSSU5H
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBHcmFwaGljc0Nv
bnRleHQ6OmdldDNEVHJhbnNmb3JtKCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOworICAgIC8vIEZJWE1FOiBDYW4gd2Ug
YXBwcm94aW1hdGUgdGhlIHRyYW5zZm9ybWF0aW9uIGJldHRlciB0aGFuIHRoaXM/CisgICAgcmV0
dXJuIGdldENUTSgpLnRvVHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNvbmNhdDNEVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
cmFuc2Zvcm0pCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBjb25jYXRDVE0odHJhbnNm
b3JtLnRvQWZmaW5lVHJhbnNmb3JtKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
M0RUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHNldENUTSh0cmFuc2Zvcm0udG9BZmZpbmVUcmFuc2Zv
cm0oKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBlckNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RleHR1cmVNYXBwZXJDYWlyby5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGU3Mjk1MTEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBlckNhaXJvLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAy
MDExIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJDYWlyby5oIgotCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgQml0bWFwVGV4
dHVyZUNhaXJvOjpkZXN0cm95KCkKLXsKLSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICBkZWxl
dGUgbV9jb250ZXh0OwotfQotCi0KLUludFNpemUgQml0bWFwVGV4dHVyZUNhaXJvOjpzaXplKCkg
Y29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBJbnRTaXplKCk7Ci19
Ci0KLXZvaWQgQml0bWFwVGV4dHVyZUNhaXJvOjpyZXNldChjb25zdCBJbnRTaXplJiBzaXplLCBi
b29sIGlzT3BhcXVlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0KiBCaXRtYXBUZXh0dXJlQ2Fpcm86OmJlZ2luUGFpbnQoY29uc3QgSW50UmVj
dCYgZGlydHlSZWN0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIG1fY29u
dGV4dDsKLX0KLQotdm9pZCBCaXRtYXBUZXh0dXJlQ2Fpcm86OmVuZFBhaW50KCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEJpdG1hcFRleHR1cmVDYWlybzo6dXBkYXRlQ29u
dGVudHMoUGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIHZvaWQq
IGJpdHMpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotCi1ib29sIEJpdG1hcFRleHR1
cmVDYWlybzo6c2F2ZShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZUNhaXJvOjpzZXRD
b250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgVGV4dHVyZU1hcHBlckNhaXJvOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1hdHJpeCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlckNhaXJvOjplbmRDbGlwKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1JbnRTaXplIFRleHR1cmVNYXBwZXJDYWlybzo6dmll
d3BvcnRTaXplKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0KLVRleHR1
cmVNYXBwZXJDYWlybzo6VGV4dHVyZU1hcHBlckNhaXJvKCkKLSAgICA6IG1fY29udGV4dCgwKQot
ewotfQotCi12b2lkIFRleHR1cmVNYXBwZXJDYWlybzo6c2V0R3JhcGhpY3NDb250ZXh0KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBtX2NvbnRleHQgPSBjb250ZXh0OwotfQotCi1H
cmFwaGljc0NvbnRleHQqIFRleHR1cmVNYXBwZXJDYWlybzo6Z3JhcGhpY3NDb250ZXh0KCkKLXsK
LSAgICByZXR1cm4gbV9jb250ZXh0OwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJDYWlybzo6Ymlu
ZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogdGV4dHVyZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi0KLXZvaWQgVGV4dHVyZU1hcHBlckNhaXJvOjpkcmF3VGV4dHVyZShjb25zdCBCaXRt
YXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRl
eHR1cmUqIG1hc2tUZXh0dXJlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVBhc3NS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlckNhaXJvOjpjcmVhdGVUZXh0dXJlKCkK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJpdG1hcFRleHR1cmVDYWlybygpKTsKLX0KLQot
Qml0bWFwVGV4dHVyZUNhaXJvOjpCaXRtYXBUZXh0dXJlQ2Fpcm8oKQotICAgIDogbV9jb250ZXh0
KDApCi0gICAgLCBtX3N1cmZhY2UoMCkKLXsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyQ2Fpcm86
OmJlZ2luUGFpbnRpbmcoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGV4
dHVyZU1hcHBlckNhaXJvOjplbmRQYWludGluZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1RleHR1cmVNYXBwZXJDYWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vVGV4dHVyZU1hcHBlckNhaXJvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDUzYTA5NmYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vVGV4dHVyZU1hcHBlckNhaXJvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
Zm5kZWYgVGV4dHVyZU1hcHBlckNhaXJvX2gKLSNkZWZpbmUgVGV4dHVyZU1hcHBlckNhaXJvX2gK
LQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4
dENhaXJvLmgiCi0jaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKLSNpbmNsdWRlICJ0ZXhtYXAvVGV4
dHVyZU1hcHBlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEJpdG1hcFRleHR1
cmVDYWlybyA6IHB1YmxpYyBCaXRtYXBUZXh0dXJlIHsKLSAgICBmcmllbmQgY2xhc3MgVGV4dHVy
ZU1hcHBlckNhaXJvOwotcHVibGljOgotICAgIEJpdG1hcFRleHR1cmVDYWlybygpOwotICAgIH5C
aXRtYXBUZXh0dXJlQ2Fpcm8oKSB7IGRlc3Ryb3koKTsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXN0
cm95KCk7Ci0gICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVzZXQoY29uc3QgSW50U2l6ZSYsIGJvb2wgb3BhcXVlKTsKLSAgICB2aXJ0dWFsIFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7
Ci0gICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRl
bnRzVG9JbWFnZShJbWFnZSopOwotICAgIHZpcnR1YWwgYm9vbCBzYXZlKGNvbnN0IFN0cmluZyYg
cGF0aCk7Ci0gICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAhbV9zdXJm
YWNlO30KLSAgICBJbnRSZWN0IHNvdXJjZVJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KDAs
IDAsIGNvbnRlbnRTaXplKCkud2lkdGgoKSwgY29udGVudFNpemUoKS5oZWlnaHQoKSk7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgcGFjaygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB1bnBhY2soKSB7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNQYWNrZWQoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKFBpeGVsRm9ybWF0LCBjb25zdCBJbnRSZWN0Jiwgdm9p
ZCogYml0cyk7Ci0KLSAgICBjYWlyb190KiBjcigpIHsgcmV0dXJuIG1fY29udGV4dC0+Y3IoKTsg
fQotCi1wcml2YXRlOgotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEludFJlY3QmKTsKLQotICAg
IFBsYXRmb3JtQ29udGV4dENhaXJvKiBtX2NvbnRleHQ7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZh
Y2VfdD4gbV9zdXJmYWNlOwotfTsKLQotY2xhc3MgVGV4dHVyZU1hcHBlckNhaXJvIDogcHVibGlj
IFRleHR1cmVNYXBwZXIgewotcHVibGljOgotICAgIFRleHR1cmVNYXBwZXJDYWlybygpOwotCi0g
ICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmLCBjb25zdCBG
bG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQg
b3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpOwotICAgIHZpcnR1YWwg
dm9pZCBiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKTsKLSAgICB2aXJ0dWFsIHZv
aWQgYmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0
Jik7Ci0gICAgdmlydHVhbCB2b2lkIGVuZENsaXAoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0R3Jh
cGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCopOwotICAgIHZpcnR1YWwgR3JhcGhpY3NDb250
ZXh0KiBncmFwaGljc0NvbnRleHQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9y
Um9vdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEJp
dG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKLSAgICB2aXJ0dWFsIEludFNpemUgdmlld3Bv
cnRTaXplKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGJlZ2luUGFpbnRpbmcoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZW5kUGFpbnRpbmcoKTsKLQotICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1
cmVNYXBwZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyQ2Fp
cm8pOyB9Ci1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dCogbV9jb250ZXh0OwotICAgIFJl
ZlB0cjxCaXRtYXBUZXh0dXJlQ2Fpcm8+IG1fdGV4dHVyZTsKLX07Ci0KLX0KLSNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJJbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcAppbmRleCAyMDhiNTM0Li41ZDVhOTE4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcApAQCAtMzUsNiArMzUs
MTMgQEAgdm9pZCBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXI6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0
IHZvaWQqIGRhdGEsIGNvbnN0IEludFJlY3QmIHQKICAgICBwYWludGVyLT5zZXRDb21wb3NpdGlv
bk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2UpOwogICAgIHBhaW50ZXItPmRy
YXdJbWFnZSh0YXJnZXRSZWN0LCBpbWFnZSwgSW50UmVjdChzb3VyY2VPZmZzZXQsIHRhcmdldFJl
Y3Quc2l6ZSgpKSk7CiAgICAgcGFpbnRlci0+cmVzdG9yZSgpOworI2VsaWYgUExBVEZPUk0oQ0FJ
Uk8pCisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJv
X2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihkYXRhKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJl
Y3QuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzUGVyTGluZSkpOwor
ICAgIEludFJlY3Qgc3JjUmVjdChzb3VyY2VPZmZzZXQsIHRhcmdldFJlY3Quc2l6ZSgpKTsKKyAg
ICBtX2ltYWdlLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3U3VyZmFjZVRvQ29u
dGV4dChzdXJmYWNlLmdldCgpLCB0YXJnZXRSZWN0LCBzcmNSZWN0LCBtX2ltYWdlLT5jb250ZXh0
KCkpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCA1NzJmZWRlLi42ZDc0M2Y0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTItMDUtMjMgIEFsZWphbmRybyBH
LiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gW0dUS10gQWRkIFRl
eHR1cmVNYXBwZXIgSW1hZ2VCdWZmZXIgc3VwcG9ydCBhcyBhIGZhbGxiYWNrCisgICAgICAgIGZy
b20gdGhlIGhhcmR3YXJlIGFjY2VsZXJhdGVkIHBhdGgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczNjM0CisKKyAgICAgICAgQWRkIHRoZSBuZXcgZ3Jh
cGhpY3MgbGF5ZXIgY2xpZW50IHRoYXQgdXNlcyBjYWlybyB0byByZW5kZXIgdGhlCisgICAgICAg
IGNvbXBvc2l0aW9uLiBUaGUgY2Fpcm8gdHJhbnNmb3JtYXRpb25zIGRvIG5vdCBzdXBwb3J0IHBl
cnNwZWN0aXZlCisgICAgICAgIHNvIGluIHBlcnNwZWN0aXZlIGNhc2VzIHdlIGhhdmUganVzdCBh
IHJlcHJlc2VudGF0aW9uIG5vdCB0aGUgcmVhbAorICAgICAgICBwZXJzcGVjdGl2ZSB0cmFuc2Zv
cm1hdGlvbi4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgaW1wbGVtZW50YXRpb24g
b2YgYWxyZWFkeSB0ZXN0ZWQgY2FzZXMuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oOgorICAgICAgICAoQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0Q2Fpcm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGll
bnQ6OmludmFsaWRhdGVXaWRnZXRSZWN0KTogV2UgbmVlZCB0bworICAgICAgICBpbnZhbGlkYXRl
IHRoZSB3aWRnZXQgaW4gdGhpcyBjYXNlIGJlY2F1c2Ugd2UgZG8gbm90IGRpcmVjdGx5CisgICAg
ICAgIHJlbmRlciB0byBhIHRleHR1cmUgYnV0IHRvIHRoZSB3aWRnZXQgc3VyZmFjZS4KKyAgICAg
ICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50OjpwYWludCk6IFdlIGNhbiBub3QgcmVuZGVyIGhlcmUs
IHdlIGhhdmUgdG8KKyAgICAgICAgaW52YWxpZGF0ZSBhbmQgd2FpdCBmb3IgdGhlIHdpZGdldCBy
ZW5kZXJpbmcuCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAo
d2Via2l0X3dlYl92aWV3X2RyYXcpOiBJbiB0aGlzIGNhc2UgdGhlIHJlbmRlckxheWVyc1RvV2lu
ZG93CisgICAgICAgIHJlcXVpcmVzIHRoZSBncmFwaGljcyBjb250ZXh0IHVzZWQgdG8gcmVuZGVy
IGluIHRoZSB3aW5kb3cuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfcmVhbGl6ZSk6IFNtYWxs
IGNsZWFudXAgb2YgdGhlIHByaXYgdmFyaWFibGUKKyAgICAgICAgZGVmaW5pdGlvbi4KKwogMjAx
Mi0wNS0wNyAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBDYWxsaW5nIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgY2F1c2VzIGFzc2VydGlv
biBmYWlsdXJlOiBtX3ZlcmlmaWVyLmlzU2FmZVRvVXNlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUu
YW0KaW5kZXggMmQ1YWQwYS4uZjI0YzdhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsv
R05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KQEAg
LTE3OCw2ICsxNzgsNyBAQCB3ZWJraXRndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaCBcCiAJU291
cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHRDbHV0dGVyLmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0NvbnRleHRHTC5jcHAgXAorCVNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Q2Fpcm8uY3BwIFwKIAlTb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcCBcCiAJ
U291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcCBcCiAJ
U291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmggXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmgKaW5kZXggM2ZiMWZlMy4uNzM5YzEyOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oCkBAIC0yNyw4ICsyNywxMCBAQAogI2luY2x1ZGUg
IndlYmtpdHdlYnZpZXcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCisjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSKQogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICNpbmNsdWRlICJH
TENvbnRleHQuaCIKKyNlbmRpZgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJMYXllci5oIgogI2Vu
ZGlmCiAKQEAgLTUxLDcgKzUzLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHN5bmNMYXllcnNUaW1l
b3V0KCk7CiAgICAgdm9pZCBzeW5jTGF5ZXJzTm93KCk7CiAgICAgdm9pZCByZXNpemVSb290TGF5
ZXIoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOworI2lmIFVTRShURVhUVVJFX01BUFBFUl9DQUlS
TykKKyAgICBib29sIHJlbmRlckxheWVyc1RvV2luZG93KGNhaXJvX3QqLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBjbGlwUmVjdCk7CisjZWxzZQogICAgIGJvb2wgcmVuZGVyTGF5ZXJzVG9XaW5k
b3coY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOworI2VuZGlmCiAgICAgYm9vbCBl
bmFibGVkKCk7CiAKICAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50CkBAIC03NCw2ICs4MCwxMCBA
QCBwcml2YXRlOgogICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RHcmFw
aGljc0xheWVyOwogICAgIE93blB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiBtX3RleHR1cmVN
YXBwZXI7CiAgICAgT3duUHRyPFdlYkNvcmU6OkdMQ29udGV4dD4gbV9jb250ZXh0OworI2VsaWYg
VVNFKFRFWFRVUkVfTUFQUEVSX0NBSVJPKQorICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXll
ciogbV9yb290VGV4dHVyZU1hcHBlckxheWVyOworICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGlj
c0xheWVyPiBtX3Jvb3RHcmFwaGljc0xheWVyOworICAgIE93blB0cjxXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyPiBtX3RleHR1cmVNYXBwZXI7CiAjZW5kaWYKIAogICAgIEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdDb250ZXh0KFdlYktpdFdlYlZpZXcqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Q2Fpcm8uY3Bw
IGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0NvbnRleHRDYWlyby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY2
YWJmZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Q2Fpcm8uY3BwCkBAIC0wLDAgKzEsMTgwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSwgUy5MLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0LmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpICYmIFVTRShURVhUVVJFX01BUFBFUl9DQUlSTykKKworI2luY2x1ZGUgIkNhaXJvVXRpbGl0
aWVzLmgiCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50R3RrLmgi
CisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZl
ci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJMYXllci5oIgorI2luY2x1ZGUgIndlYmtpdHdl
YnZpZXdwcml2YXRlLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxnZGsvZ2RrLmg+
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQorICAgIDogbV93
ZWJWaWV3KHdlYlZpZXcpCisgICAgLCBtX3N5bmNUaW1lckNhbGxiYWNrSWQoMCkKKyAgICAsIG1f
cm9vdFRleHR1cmVNYXBwZXJMYXllcigwKQoreworfQorCitBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dDo6fkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KCkKK3sKKyAgICBpZiAobV9z
eW5jVGltZXJDYWxsYmFja0lkKQorICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9zeW5jVGltZXJD
YWxsYmFja0lkKTsKK30KKworYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6ZW5h
YmxlZCgpCit7CisgICAgcmV0dXJuIG1fcm9vdFRleHR1cmVNYXBwZXJMYXllciAmJiBtX3RleHR1
cmVNYXBwZXI7Cit9CisKK2Jvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnJlbmRl
ckxheWVyc1RvV2luZG93KGNhaXJvX3QqIGNyLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK3sK
KyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQoY3IpOworICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhpY3ND
b250ZXh0KCZjb250ZXh0KTsKKworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZygp
OworICAgIG1fcm9vdFRleHR1cmVNYXBwZXJMYXllci0+cGFpbnQoKTsKKyAgICBtX3RleHR1cmVN
YXBwZXItPmVuZFBhaW50aW5nKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoR3JhcGhp
Y3NMYXllciogZ3JhcGhpY3NMYXllcikKK3sKKyAgICBpZiAoIWdyYXBoaWNzTGF5ZXIpIHsKKyAg
ICAgICAgbV9yb290R3JhcGhpY3NMYXllci5jbGVhcigpOworICAgICAgICBtX3Jvb3RUZXh0dXJl
TWFwcGVyTGF5ZXIgPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9yb290R3Jh
cGhpY3NMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBtX3Jvb3RUZXh0
dXJlTWFwcGVyTGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RHcmFwaGljc0xheWVy
LmdldCgpKTsKKyAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5hZGRDaGlsZChncmFwaGljc0xheWVy
KTsKKyAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAg
bV9yb290R3JhcGhpY3NMYXllci0+c2V0TWFza3NUb0JvdW5kcyhmYWxzZSk7CisgICAgbV9yb290
R3JhcGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgbV9yb290R3JhcGhpY3NMYXll
ci0+c2V0U2l6ZShjb3JlKG1fd2ViVmlldyktPm1haW5GcmFtZSgpLT52aWV3KCktPmZyYW1lUmVj
dCgpLnNpemUoKSk7CisKKyAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVySW1hZ2VC
dWZmZXI6OmNyZWF0ZSgpOworICAgIG1fcm9vdFRleHR1cmVNYXBwZXJMYXllci0+c2V0VGV4dHVy
ZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXIt
PnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworfQorCit2b2lkIEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzY2hlZHVsZVJvb3RMYXllclJlcGFpbnQoY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1fcm9vdEdyYXBoaWNzTGF5ZXIpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9yb290R3JhcGhp
Y3NMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
bV9yb290R3JhcGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworfQorCit2
b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpyZXNpemVSb290TGF5ZXIoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoIW1fcm9vdEdyYXBoaWNzTGF5ZXIpCisgICAgICAg
IHJldHVybjsKKyAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zZXRTaXplKHNpemUpOworICAgIG1f
cm9vdEdyYXBoaWNzTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgp
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gc3luY0xheWVyc1RpbWVvdXRDYWxsYmFjayhBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBjb250ZXh0LT5zeW5jTGF5
ZXJzVGltZW91dCgpOworICAgIHJldHVybiBGQUxTRTsKK30KKwordm9pZCBBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQ29udGV4dDo6bWFya0ZvclN5bmMoKQoreworICAgIGlmIChtX3N5bmNUaW1lckNh
bGxiYWNrSWQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIHVzZSBhIEdMaWIgdGltZXIg
YmVjYXVzZSBvdGhlcndpc2UgR1RLKyBldmVudCBoYW5kbGluZyBkdXJpbmcKKyAgICAvLyBkcmFn
Z2luZyBjYW4gc3RhcnZlIFdlYkNvcmUgdGltZXJzLCB3aGljaCBoYXZlIGEgbG93ZXIgcHJpb3Jp
dHkuCisgICAgbV9zeW5jVGltZXJDYWxsYmFja0lkID0gZ190aW1lb3V0X2FkZF9mdWxsKEdES19Q
UklPUklUWV9FVkVOVFMsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHN5bmNMYXll
cnNUaW1lb3V0Q2FsbGJhY2spLCB0aGlzLCAwKTsKK30KKwordm9pZCBBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dDo6c3luY0xheWVyc05vdygpCit7CisgICAgaWYgKG1fcm9vdEdyYXBoaWNz
TGF5ZXIpCisgICAgICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRl
Rm9yVGhpc0xheWVyT25seSgpOworCisgICAgY29yZShtX3dlYlZpZXcpLT5tYWluRnJhbWUoKS0+
dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworfQorCit2
b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzeW5jTGF5ZXJzVGltZW91dCgpCit7
CisgICAgbV9zeW5jVGltZXJDYWxsYmFja0lkID0gMDsKKyAgICBzeW5jTGF5ZXJzTm93KCk7Cisg
ICAgaWYgKCFtX3Jvb3RHcmFwaGljc0xheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBG
SVhNRTogSW52YWxpZGF0ZSBqdXN0IHRoZSBhbmltYXRpb25zIHJlY3RhbmdsZXMuCisgICAgZ3Rr
X3dpZGdldF9xdWV1ZV9kcmF3KEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisKKyAgICBpZiAodG9U
ZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290R3JhcGhpY3NMYXllci5nZXQoKSktPmRlc2NlbmRhbnRz
T3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpCisgICAgICAgIG1fc3luY1RpbWVyQ2FsbGJh
Y2tJZCA9IGdfdGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJVFlfRVZFTlRTLCAxMDAwLjAgLyA2
MC4wLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihzeW5jTGF5ZXJzVGltZW91dENhbGxi
YWNrKSwgdGhpcywgMCk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6
Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1l
KQoreworCit9Cit2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojpub3RpZnlTeW5j
UmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopCit7CisKK30KKwordm9pZCBBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQ29udGV4dDo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29u
c3QgSW50UmVjdCYgcmVjdFRvUGFpbnQpCit7CisgICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LnBs
YXRmb3JtQ29udGV4dCgpLT5jcigpOworICAgIGNvcHlSZWN0RnJvbUNhaXJvU3VyZmFjZVRvQ29u
dGV4dChtX3dlYlZpZXctPnByaXYtPmJhY2tpbmdTdG9yZS0+Y2Fpcm9TdXJmYWNlKCksIGNyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRTaXplKCksIHJlY3RUb1Bh
aW50KTsKK30KKworYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2hvd0RlYnVn
Qm9yZGVycyhjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnNob3dSZXBhaW50Q291
bnRlcihjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVJfQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwIGIvU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAppbmRleCA2NTVi
Zjc4Li43OTMxM2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKQEAgLTUzNyw5ICs1MzcsMTUgQEAgdm9pZCBDaHJvbWVD
bGllbnQ6OmludmFsaWRhdGVXaWRnZXRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQqIGFjQ29udGV4dCA9IG1fd2ViVmlldy0+cHJpdi0+
YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuZ2V0KCk7CiAgICAgaWYgKGFjQ29udGV4dC0+
ZW5hYmxlZCgpKSB7CiAgICAgICAgIGFjQ29udGV4dC0+c2NoZWR1bGVSb290TGF5ZXJSZXBhaW50
KHJlY3QpOworI2lmIFVTRShURVhUVVJFX01BUFBFUl9DQUlSTykKKyAgICAgICAgZ3RrX3dpZGdl
dF9xdWV1ZV9kcmF3X2FyZWEoR1RLX1dJREdFVChtX3dlYlZpZXcpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZWN0LngoKSwgcmVjdC55KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisjZW5kaWYK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgorCiAgICAgZ3RrX3dpZGdldF9xdWV1ZV9k
cmF3X2FyZWEoR1RLX1dJREdFVChtX3dlYlZpZXcpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlY3QueCgpLCByZWN0LnkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwpAQCAtNTk0LDggKzYwMCwxMCBAQCB2b2lk
IENocm9tZUNsaWVudDo6cGFpbnQoV2ViQ29yZTo6VGltZXI8Q2hyb21lQ2xpZW50PiopCiAKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgbV93ZWJWaWV3LT5wcml2LT5hY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC0+c3luY0xheWVyc05vdygpOworI2lmIFVTRShURVhU
VVJFX01BUFBFUl9HTCkKICAgICBtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdDb250ZXh0LT5yZW5kZXJMYXllcnNUb1dpbmRvdyhyZWN0KTsKICNlbmRpZgorI2VuZGlmCiAK
ICAgICBtX2RpcnR5UmVnaW9uID0gUmVnaW9uKCk7CiAgICAgbV9sYXN0RGlzcGxheVRpbWUgPSBj
dXJyZW50VGltZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3Bw
CmluZGV4IDMwMGVhOGMuLjM2NGZiZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2Vidmlldy5jcHAKQEAgLTY4NSw2ICs2ODUsOSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0
X3dlYl92aWV3X2RyYXcoR3RrV2lkZ2V0KiB3aWRnZXQsIGNhaXJvX3QqIGNyKQogI2lmIFVTRShU
RVhUVVJFX01BUFBFUl9HTCkKICAgICBpZiAocHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Nv
bnRleHQtPnJlbmRlckxheWVyc1RvV2luZG93KGNsaXBSZWN0KSkKICAgICAgICAgcmV0dXJuIEZB
TFNFOworI2VsaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0NBSVJPKQorICAgIGlmIChwcml2LT5hY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC0+cmVuZGVyTGF5ZXJzVG9XaW5kb3coY3IsIGNsaXBS
ZWN0KSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOwogI2VuZGlmCiAKICAgICBjYWlyb19yZWN0YW5n
bGVfbGlzdF90KiByZWN0TGlzdCA9IGNhaXJvX2NvcHlfY2xpcF9yZWN0YW5nbGVfbGlzdChjcik7
CkBAIC05NjgsOCArOTcxLDYgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19mb2N1
c19vdXRfZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50Rm9jdXMKIAogc3RhdGljIHZv
aWQgd2Via2l0X3dlYl92aWV3X3JlYWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQpCiB7Ci0gICAgV2Vi
S2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KS0+cHJpdjsK
LQogICAgIGd0a193aWRnZXRfc2V0X3JlYWxpemVkKHdpZGdldCwgVFJVRSk7CiAKICAgICBHdGtB
bGxvY2F0aW9uIGFsbG9jYXRpb247CkBAIC0xMDEwLDYgKzEwMTEsNyBAQCBzdGF0aWMgdm9pZCB3
ZWJraXRfd2ViX3ZpZXdfcmVhbGl6ZShHdGtXaWRnZXQqIHdpZGdldCkKICAgICBHZGtXaW5kb3cq
IHdpbmRvdyA9IGdka193aW5kb3dfbmV3KGd0a193aWRnZXRfZ2V0X3BhcmVudF93aW5kb3cod2lk
Z2V0KSwgJmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXNfbWFzayk7CiAKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICBXZWJLaXRXZWJW
aWV3UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfVklFVyh3aWRnZXQpLT5wcml2OwogICAgIHBy
aXYtPmhhc05hdGl2ZVdpbmRvdyA9IGdka193aW5kb3dfZW5zdXJlX25hdGl2ZSh3aW5kb3cpOwog
I2VuZGlmCiAgICAgZ3RrX3dpZGdldF9zZXRfd2luZG93KHdpZGdldCwgd2luZG93KTsK
</data>
<flag name="review"
          id="150142"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144511</attachid>
            <date>2012-05-29 04:18:35 -0700</date>
            <delta_ts>2012-06-08 14:32:23 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>ac_imagebuffer_cairo.patch</filename>
            <type>text/plain</type>
            <size>29501</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyNWU1ZmE1Li4zOTFiODc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIg
QEAKKzIwMTItMDUtMjggIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0dUS10gQWRkIFRleHR1cmVNYXBwZXIgSW1hZ2VCdWZmZXIgc3VwcG9ydCBhcyBh
IGZhbGxiYWNrCisgICAgICAgIGZyb20gdGhlIGhhcmR3YXJlIGFjY2VsZXJhdGVkIHBhdGgKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczNjM0CisKKyAg
ICAgICAgUmVtb3ZlIHRoZSBUZXh0dXJlTWFwcGVyQ2Fpcm8gY2xhc3Nlcywgbm93IHdlIHVzZQor
ICAgICAgICBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIgdG8gaW1wbGVtZW50IHRoZSBzb2Z0d2Fy
ZSBmYWxsYmFjay4gQWRkCisgICAgICAgIGltcGxlbWVudGF0aW9uIGZvciB0aGUgM0QgdHJhbnNm
b3JtYXRpb25zIGluIHRoZSAyRCBjYWlybyBncmFwaGljcworICAgICAgICBjb250ZXh0LgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
YWRkcyBhIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiBhbHJlYWR5IHRlc3RlZCBjYXNlcy4KKworICAg
ICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRvVGV4dHVy
ZU1hcHBlcik6CisgICAgICAgIFJlcXVpcmVkIGZvciBjb21waWxhdGlvbiB3aGVuIFdlYkdMIGlz
IGVuYWJsZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXQzRFRy
YW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbmNhdDNEVHJh
bnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0M0RUcmFuc2Zv
cm0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RleHR1cmVNYXBwZXJDYWly
by5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVy
ZU1hcHBlckNhaXJvLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBUZXh0dXJlSW1hZ2VCdWZmZXI6OnVwZGF0ZUNvbnRlbnRzKToKKwogMjAxMi0wNS0wNyAgU2Vy
Z2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBDYWxsaW5n
IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgY2F1c2VzIGFzc2VydGlvbiBmYWlsdXJlOiBt
X3ZlcmlmaWVyLmlzU2FmZVRvVXNlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4
IDZhMDZjMGQuLjI1Yjg4MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjAy
NCw2ICs2MDI0LDggQEAgZW5kaWYgICMgRU5EIFVTRV9DTFVUVEVSCiAKIGlmIFVTRV9URVhUVVJF
X01BUFBFUl9DQUlSTwogd2ViY29yZV9zb3VyY2VzICs9IFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwIFwKKwlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmggXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9ybS5jcHAgXApAQCAt
NjAzOSw5ICs2MDQxLDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXIuaAotd2ViY29yZWd0a19zb3VyY2VzICs9IFwKLQlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8uY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8uaAogZW5k
aWYgICMgRU5EIFVTRV9URVhUVVJFX01BUFBFUl9DQUlSTwogCiBpZiBVU0VfVEVYVFVSRV9NQVBQ
RVJfR0wKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCmluZGV4IGZmMWJlMDUu
LjI4NTk5YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcApAQCAtMjQs
OCArMjQsMTAgQEAKIAogI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKICNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1D
b250ZXh0Q2Fpcm8uaCIKIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNF
KFRFWFRVUkVfTUFQUEVSKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFVTRShURVhUVVJF
X01BUFBFUl9DQUlSTykKICNpbmNsdWRlIDx0ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmg+CiAjZW5k
aWYKIApAQCAtNjMsMTAgKzY1LDM3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpw
YWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyCiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmICh0ZXh0dXJlTWFwcGVyLT5hY2NlbGVyYXRpb25Nb2RlKCkgIT0g
VGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSkgewotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSB0ZXh0dXJlTWFwcGVyLT5ncmFwaGlj
c0NvbnRleHQoKTsKKyAgICAgICAgY29udGV4dC0+c2F2ZSgpOworICAgICAgICBjb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+c2V0R2xvYmFsQWxwaGEob3BhY2l0eSk7CisKKyAgICAgICAgY29u
c3QgaW50IGhlaWdodCA9IG1fY29udGV4dC0+bV9jdXJyZW50SGVpZ2h0OworICAgICAgICBjb25z
dCBpbnQgd2lkdGggPSBtX2NvbnRleHQtPm1fY3VycmVudFdpZHRoOworICAgICAgICBjb250ZXh0
LT5zZXRDVE0obWF0cml4LnRvQWZmaW5lVHJhbnNmb3JtKCkpOworICAgICAgICAvLyBPcGVuR0wg
a2VlcHMgdGhlIHBpeGVscyBzdG9yZWQgYm90dG9tIHVwLCBzbyB3ZSBuZWVkIHRvIGZsaXAgdGhl
IGltYWdlIGhlcmUuCisgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgwLCBoZWlnaHQpOworICAg
ICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKworICAgICAgICBSZWZQdHI8
Y2Fpcm9fc3VyZmFjZV90PiBvZmZzY3JlZW5JbWFnZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1
cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsIHdpZHRoLCBoZWlnaHQpKTsKKworICAg
ICAgICB1bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVscyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X2RhdGEob2Zmc2NyZWVuSW1hZ2UuZ2V0KCkpOworICAgICAgICBjYWlyb19zdXJmYWNlX2ZsdXNo
KG9mZnNjcmVlbkltYWdlLmdldCgpKTsKKworICAgICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBtX2NvbnRleHQtPm1fZmJvKTsKKyAgICAgICAgZ2xSZWFkUGl4ZWxzKC8qIHggKi8gMCwgLyog
eSAqLyAwLCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGltYWdlUGl4ZWxzKTsKKyAgICAgICAgZ2xCaW5kRnJh
bWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2NvbnRleHQtPm1fYm91
bmRGQk8pOworCisgICAgICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eShvZmZzY3JlZW5JbWFn
ZS5nZXQoKSk7CisKKyAgICAgICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJm
YWNlVG9Db250ZXh0KG9mZnNjcmVlbkltYWdlLmdldCgpLCB0YXJnZXRSZWN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCgw
LCAwLCB3aWR0aCwgaGVpZ2h0KSwgY29udGV4dCk7CisKKyAgICAgICAgY29udGV4dC0+cmVzdG9y
ZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dM
KQogICAgIGlmIChtX2NvbnRleHQtPm1fYXR0cnMuYW50aWFsaWFzICYmIG1fY29udGV4dC0+bV9i
b3VuZEZCTyA9PSBtX2NvbnRleHQtPm1fbXVsdGlzYW1wbGVGQk8pIHsKICAgICAgICAgR0xDb250
ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmdldEN1cnJlbnQoKTsKIApA
QCAtODMsNiArMTEyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50VG9U
ZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIKICAgICBUZXh0dXJlTWFw
cGVyR0w6OkZsYWdzIGZsYWdzID0gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRGbGlwVGV4dHVyZSB8
IChtX2NvbnRleHQtPm1fYXR0cnMuYWxwaGEgPyBUZXh0dXJlTWFwcGVyR0w6OlN1cHBvcnRzQmxl
bmRpbmcgOiAwKTsKICAgICBJbnRTaXplIHRleHR1cmVTaXplKG1fY29udGV4dC0+bV9jdXJyZW50
V2lkdGgsIG1fY29udGV4dC0+bV9jdXJyZW50SGVpZ2h0KTsKICAgICB0ZXhtYXBHTC0+ZHJhd1Rl
eHR1cmUobV9jb250ZXh0LT5tX3RleHR1cmUsIGZsYWdzLCB0ZXh0dXJlU2l6ZSwgdGFyZ2V0UmVj
dCwgbWF0cml4LCBvcGFjaXR5LCBtYXNrKTsKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkdfR0wpCiB9CiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggN2E4MDRiMC4uMjQyNTNkMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMTE0MSwxOCArMTE0MSwxOCBAQCBJbnRl
cnBvbGF0aW9uUXVhbGl0eSBHcmFwaGljc0NvbnRleHQ6OmltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkoKSBjb25zdAogI2lmIEVOQUJMRSgzRF9SRU5ERVJJTkcpICYmIFVTRShURVhUVVJFX01BUFBF
UikKIFRyYW5zZm9ybWF0aW9uTWF0cml4IEdyYXBoaWNzQ29udGV4dDo6Z2V0M0RUcmFuc2Zvcm0o
KSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFRyYW5zZm9ybWF0
aW9uTWF0cml4KCk7CisgICAgLy8gRklYTUU6IENhbiB3ZSBhcHByb3hpbWF0ZSB0aGUgdHJhbnNm
b3JtYXRpb24gYmV0dGVyIHRoYW4gdGhpcz8KKyAgICByZXR1cm4gZ2V0Q1RNKCkudG9UcmFuc2Zv
cm1hdGlvbk1hdHJpeCgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0M0RUcmFu
c2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIGNvbmNhdENUTSh0cmFuc2Zvcm0udG9BZmZpbmVUcmFuc2Zvcm0o
KSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXQzRFRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgc2V0Q1RNKHRyYW5zZm9ybS50b0FmZmluZVRyYW5zZm9ybSgpKTsKIH0KICNlbmRpZgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UZXh0dXJl
TWFwcGVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
VGV4dHVyZU1hcHBlckNhaXJvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTcy
OTUxMS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9UZXh0dXJlTWFwcGVyQ2Fpcm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckNhaXJvLmgiCi0KLSNpbmNs
dWRlICJDYWlyb1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBCaXRtYXBUZXh0dXJlQ2Fpcm86OmRlc3Ryb3koKQot
ewotICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgIGRlbGV0ZSBtX2NvbnRleHQ7Ci19Ci0KLQot
SW50U2l6ZSBCaXRtYXBUZXh0dXJlQ2Fpcm86OnNpemUoKSBjb25zdAotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIEludFNpemUoKTsKLX0KLQotdm9pZCBCaXRtYXBUZXh0dXJl
Q2Fpcm86OnJlc2V0KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgaXNPcGFxdWUpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIEJpdG1hcFRl
eHR1cmVDYWlybzo6YmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gbV9jb250ZXh0OwotfQotCi12b2lkIEJpdG1h
cFRleHR1cmVDYWlybzo6ZW5kUGFpbnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgQml0bWFwVGV4dHVyZUNhaXJvOjp1cGRhdGVDb250ZW50cyhQaXhlbEZvcm1hdCBwaXhl
bEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgdm9pZCogYml0cykKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi0KLWJvb2wgQml0bWFwVGV4dHVyZUNhaXJvOjpzYXZlKGNvbnN0IFN0
cmluZyYgcGF0aCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotdm9pZCBCaXRtYXBUZXh0dXJlQ2Fpcm86OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSog
aW1hZ2UpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVy
Q2Fpcm86OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBU
ZXh0dXJlTWFwcGVyQ2Fpcm86OmVuZENsaXAoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLUludFNpemUgVGV4dHVyZU1hcHBlckNhaXJvOjp2aWV3cG9ydFNpemUoKSBjb25zdAotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLQotVGV4dHVyZU1hcHBlckNhaXJvOjpUZXh0dXJl
TWFwcGVyQ2Fpcm8oKQotICAgIDogbV9jb250ZXh0KDApCi17Ci19Ci0KLXZvaWQgVGV4dHVyZU1h
cHBlckNhaXJvOjpzZXRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQot
ewotICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dCogVGV4dHVy
ZU1hcHBlckNhaXJvOjpncmFwaGljc0NvbnRleHQoKQotewotICAgIHJldHVybiBtX2NvbnRleHQ7
Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlckNhaXJvOjpiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJl
KiB0ZXh0dXJlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLQotdm9pZCBUZXh0dXJl
TWFwcGVyQ2Fpcm86OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1h
dHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBU
ZXh0dXJlTWFwcGVyQ2Fpcm86OmNyZWF0ZVRleHR1cmUoKQotewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQml0bWFwVGV4dHVyZUNhaXJvKCkpOwotfQotCi1CaXRtYXBUZXh0dXJlQ2Fpcm86OkJp
dG1hcFRleHR1cmVDYWlybygpCi0gICAgOiBtX2NvbnRleHQoMCkKLSAgICAsIG1fc3VyZmFjZSgw
KQotewotfQotCi12b2lkIFRleHR1cmVNYXBwZXJDYWlybzo6YmVnaW5QYWludGluZygpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyQ2Fpcm86OmVuZFBh
aW50aW5nKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBlckNhaXJv
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UZXh0dXJlTWFwcGVy
Q2Fpcm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNhMDk2Zi4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UZXh0dXJlTWFwcGVy
Q2Fpcm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBUZXh0dXJlTWFwcGVyQ2Fp
cm9faAotI2RlZmluZSBUZXh0dXJlTWFwcGVyQ2Fpcm9faAotCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlICJS
ZWZQdHJDYWlyby5oIgotI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQml0bWFwVGV4dHVyZUNhaXJvIDogcHVibGljIEJpdG1h
cFRleHR1cmUgewotICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVyQ2Fpcm87Ci1wdWJsaWM6
Ci0gICAgQml0bWFwVGV4dHVyZUNhaXJvKCk7Ci0gICAgfkJpdG1hcFRleHR1cmVDYWlybygpIHsg
ZGVzdHJveSgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKLSAgICB2aXJ0dWFsIElu
dFNpemUgc2l6ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCByZXNldChjb25zdCBJbnRTaXpl
JiwgYm9vbCBvcGFxdWUpOwotICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJl
Z2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5k
UGFpbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7Ci0g
ICAgdmlydHVhbCBib29sIHNhdmUoY29uc3QgU3RyaW5nJiBwYXRoKTsKLSAgICB2aXJ0dWFsIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuICFtX3N1cmZhY2U7fQotICAgIEludFJlY3Qgc291
cmNlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoMCwgMCwgY29udGVudFNpemUoKS53aWR0
aCgpLCBjb250ZW50U2l6ZSgpLmhlaWdodCgpKTsgfQotICAgIHZpcnR1YWwgdm9pZCBwYWNrKCkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIHVucGFjaygpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1Bh
Y2tlZCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVu
dHMoUGl4ZWxGb3JtYXQsIGNvbnN0IEludFJlY3QmLCB2b2lkKiBiaXRzKTsKLQotICAgIGNhaXJv
X3QqIGNyKCkgeyByZXR1cm4gbV9jb250ZXh0LT5jcigpOyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9p
ZCBjbGVhclJlY3QoY29uc3QgSW50UmVjdCYpOwotCi0gICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8q
IG1fY29udGV4dDsKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7Ci19Owot
Ci1jbGFzcyBUZXh0dXJlTWFwcGVyQ2Fpcm8gOiBwdWJsaWMgVGV4dHVyZU1hcHBlciB7Ci1wdWJs
aWM6Ci0gICAgVGV4dHVyZU1hcHBlckNhaXJvKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1Rl
eHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBU
ZXh0dXJlKiBtYXNrVGV4dHVyZSk7Ci0gICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1h
cFRleHR1cmUqIHN1cmZhY2UpOwotICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNsaXAoY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZW5kQ2xpcCgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3ND
b250ZXh0Kik7Ci0gICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCgp
OwotICAgIHZpcnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4
dHVyZSgpOwotICAgIHZpcnR1YWwgSW50U2l6ZSB2aWV3cG9ydFNpemUoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIHZvaWQgYmVnaW5QYWludGluZygpOwotICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludGlu
ZygpOwotCi0gICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gY3JlYXRlKCkgeyBy
ZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJDYWlybyk7IH0KLXByaXZhdGU6Ci0gICAg
R3JhcGhpY3NDb250ZXh0KiBtX2NvbnRleHQ7Ci0gICAgUmVmUHRyPEJpdG1hcFRleHR1cmVDYWly
bz4gbV90ZXh0dXJlOwotfTsKLQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1h
Z2VCdWZmZXIuY3BwCmluZGV4IDIwOGI1MzQuLjc5NDcwYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVySW1hZ2VCdWZmZXIuY3BwCkBAIC0zNSw2ICszNSwxMyBAQCB2b2lkIEJpdG1hcFRleHR1
cmVJbWFnZUJ1ZmZlcjo6dXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50
UmVjdCYgdAogICAgIHBhaW50ZXItPnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9z
aXRpb25Nb2RlX1NvdXJjZSk7CiAgICAgcGFpbnRlci0+ZHJhd0ltYWdlKHRhcmdldFJlY3QsIGlt
YWdlLCBJbnRSZWN0KHNvdXJjZU9mZnNldCwgdGFyZ2V0UmVjdC5zaXplKCkpKTsKICAgICBwYWlu
dGVyLT5yZXN0b3JlKCk7CisjZWxpZiBQTEFURk9STShDQUlSTykKKyAgICBSZWZQdHI8Y2Fpcm9f
c3VyZmFjZV90PiBzdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVf
Zm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEoKSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENBSVJPX0ZPUk1BVF9BUkdCMzIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnl0ZXNQZXJMaW5lKSk7CisgICAgbV9pbWFnZS0+Y29udGV4dCgp
LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1N1cmZhY2VUb0NvbnRleHQoc3VyZmFjZS5nZXQoKSwg
dGFyZ2V0UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KHNvdXJjZU9mZnNldCwgdGFyZ2V0UmVjdC5zaXpl
KCkpLCBtX2ltYWdlLT5jb250ZXh0KCkpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRl
eCA1NzJmZWRlLi4xMjAyNWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIw
MTItMDUtMjggIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CisKKyAgICAg
ICAgW0dUS10gQWRkIFRleHR1cmVNYXBwZXIgSW1hZ2VCdWZmZXIgc3VwcG9ydCBhcyBhIGZhbGxi
YWNrCisgICAgICAgIGZyb20gdGhlIGhhcmR3YXJlIGFjY2VsZXJhdGVkIHBhdGgKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczNjM0CisKKyAgICAgICAg
QWRkIHRoZSBuZXcgZ3JhcGhpY3MgbGF5ZXIgY2xpZW50IHRoYXQgdXNlcyBjYWlybyB0byByZW5k
ZXIgdGhlCisgICAgICAgIGNvbXBvc2l0aW9uLiBUaGUgY2Fpcm8gdHJhbnNmb3JtYXRpb25zIGRv
IG5vdCBzdXBwb3J0IHBlcnNwZWN0aXZlCisgICAgICAgIHNvIGluIHBlcnNwZWN0aXZlIGNhc2Vz
IHdlIGhhdmUganVzdCBhIHJlcHJlc2VudGF0aW9uIG5vdCB0aGUgcmVhbAorICAgICAgICBwZXJz
cGVjdGl2ZSB0cmFuc2Zvcm1hdGlvbi4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBuZXcg
aW1wbGVtZW50YXRpb24gb2YgYWxyZWFkeSB0ZXN0ZWQgY2FzZXMuCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oOgorICAg
ICAgICAoQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQpOgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Q2Fpcm8uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpDaHJvbWVDbGllbnQ6OmludmFsaWRhdGVXaWRnZXRSZWN0KTogV2UgbmVlZCB0bworICAg
ICAgICBpbnZhbGlkYXRlIHRoZSB3aWRnZXQgaW4gdGhpcyBjYXNlIGJlY2F1c2Ugd2UgZG8gbm90
IGRpcmVjdGx5CisgICAgICAgIHJlbmRlciB0byBhIHRleHR1cmUgYnV0IHRvIHRoZSB3aWRnZXQg
c3VyZmFjZS4KKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50OjpwYWludCk6IFdlIGNhbiBu
b3QgcmVuZGVyIGhlcmUsIHdlIGhhdmUgdG8KKyAgICAgICAgaW52YWxpZGF0ZSBhbmQgd2FpdCBm
b3IgdGhlIHdpZGdldCByZW5kZXJpbmcuCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcu
Y3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2RyYXcpOiBJbiB0aGlzIGNhc2UgdGhlIHJl
bmRlckxheWVyc1RvV2luZG93CisgICAgICAgIHJlcXVpcmVzIHRoZSBncmFwaGljcyBjb250ZXh0
IHVzZWQgdG8gcmVuZGVyIGluIHRoZSB3aW5kb3cuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdf
cmVhbGl6ZSk6IFNtYWxsIGNsZWFudXAgb2YgdGhlIHByaXYgdmFyaWFibGUKKyAgICAgICAgZGVm
aW5pdGlvbi4KKwogMjAxMi0wNS0wNyAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdh
bGlhLmNvbT4KIAogICAgICAgICBDYWxsaW5nIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkg
Y2F1c2VzIGFzc2VydGlvbiBmYWlsdXJlOiBtX3ZlcmlmaWVyLmlzU2FmZVRvVXNlKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdC9n
dGsvR05VbWFrZWZpbGUuYW0KaW5kZXggMmQ1YWQwYS4uZjI0YzdhOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdC9ndGsvR05V
bWFrZWZpbGUuYW0KQEAgLTE3OCw2ICsxNzgsNyBAQCB3ZWJraXRndGtfc291cmNlcyArPSBcCiAJ
U291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Nv
bnRleHQuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHRDbHV0dGVyLmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHRHTC5jcHAgXAorCVNvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Q2Fp
cm8uY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9Bc3NlcnRNYXRjaGlu
Z0VudW1zLmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50R3RrLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmgKaW5kZXggM2ZiMWZlMy4u
MjRhNjE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oCkBAIC0yNyw4ICsyNywx
MCBAQAogI2luY2x1ZGUgIndlYmtpdHdlYnZpZXcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgogCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQogI2lmIFVTRShURVhUVVJFX01BUFBFUl9H
TCkKICNpbmNsdWRlICJHTENvbnRleHQuaCIKKyNlbmRpZgogI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJMYXllci5oIgogI2VuZGlmCiAKQEAgLTUxLDcgKzUzLDcgQEAgcHVibGljOgogICAgIHZvaWQg
c3luY0xheWVyc1RpbWVvdXQoKTsKICAgICB2b2lkIHN5bmNMYXllcnNOb3coKTsKICAgICB2b2lk
IHJlc2l6ZVJvb3RMYXllcihjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgYm9vbCByZW5k
ZXJMYXllcnNUb1dpbmRvdyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7CisgICAg
Ym9vbCByZW5kZXJMYXllcnNUb1dpbmRvdyhjYWlyb190KiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgY2xpcFJlY3QpOwogICAgIGJvb2wgZW5hYmxlZCgpOwogCiAgICAgLy8gR3JhcGhpY3NMYXll
ckNsaWVudApAQCAtNjgsMTMgKzcwLDE1IEBAIHByaXZhdGU6CiAjaWYgVVNFKENMVVRURVIpCiAg
ICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbV9yb290R3JhcGhpY3NMYXllcjsKICAgICBHdGtX
aWRnZXQqIG1fcm9vdExheWVyRW1iZWRkZXI7Ci0jZWxpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wp
Ci0gICAgV2ViQ29yZTo6R0xDb250ZXh0KiBnbENvbnRleHQoKTsKKyNlbGlmIFVTRShURVhUVVJF
X01BUFBFUikKICAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqIG1fcm9vdFRleHR1cmVN
YXBwZXJMYXllcjsKICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290R3Jh
cGhpY3NMYXllcjsKICAgICBPd25QdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJl
TWFwcGVyOworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICBXZWJDb3JlOjpHTENvbnRl
eHQqIGdsQ29udGV4dCgpOwogICAgIE93blB0cjxXZWJDb3JlOjpHTENvbnRleHQ+IG1fY29udGV4
dDsKICNlbmRpZgorI2VuZGlmCiAKICAgICBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dChX
ZWJLaXRXZWJWaWV3Kik7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dENh
aXJvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2U3NWE4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHRDYWlyby5jcHAKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhLCBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0NvbnRleHQuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNF
KFRFWFRVUkVfTUFQUEVSX0NBSVJPKQorCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNp
bmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnRHdGsuaCIKKyNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29u
dGV4dENhaXJvLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmgiCisjaW5j
bHVkZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCisjaW5jbHVkZSAid2Via2l0d2Vidmlld3ByaXZh
dGUuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRl
IDxndGsvZ3RrLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OkFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdDb250ZXh0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCisgICAgOiBtX3dlYlZpZXcod2Vi
VmlldykKKyAgICAsIG1fc3luY1RpbWVyQ2FsbGJhY2tJZCgwKQorICAgICwgbV9yb290VGV4dHVy
ZU1hcHBlckxheWVyKDApCit7Cit9CisKK0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojp+
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQoKQoreworICAgIGlmIChtX3N5bmNUaW1lckNh
bGxiYWNrSWQpCisgICAgICAgIGdfc291cmNlX3JlbW92ZShtX3N5bmNUaW1lckNhbGxiYWNrSWQp
OworfQorCitib29sIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjplbmFibGVkKCkKK3sK
KyAgICByZXR1cm4gbV9yb290VGV4dHVyZU1hcHBlckxheWVyICYmIG1fdGV4dHVyZU1hcHBlcjsK
K30KKworYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6cmVuZGVyTGF5ZXJzVG9X
aW5kb3coY2Fpcm9fdCogY3IsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQoreworICAgIGlmICgh
Y3IgfHwgIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR3JhcGhpY3ND
b250ZXh0IGNvbnRleHQoY3IpOworICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhpY3NDb250
ZXh0KCZjb250ZXh0KTsKKworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZygpOwor
ICAgIG1fcm9vdFRleHR1cmVNYXBwZXJMYXllci0+cGFpbnQoKTsKKyAgICBtX3RleHR1cmVNYXBw
ZXItPmVuZFBhaW50aW5nKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NM
YXllciogZ3JhcGhpY3NMYXllcikKK3sKKyAgICBpZiAoIWdyYXBoaWNzTGF5ZXIpIHsKKyAgICAg
ICAgbV9yb290R3JhcGhpY3NMYXllci5jbGVhcigpOworICAgICAgICBtX3Jvb3RUZXh0dXJlTWFw
cGVyTGF5ZXIgPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9yb290R3JhcGhp
Y3NMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBtX3Jvb3RUZXh0dXJl
TWFwcGVyTGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RHcmFwaGljc0xheWVyLmdl
dCgpKTsKKyAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5hZGRDaGlsZChncmFwaGljc0xheWVyKTsK
KyAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9y
b290R3JhcGhpY3NMYXllci0+c2V0TWFza3NUb0JvdW5kcyhmYWxzZSk7CisgICAgbV9yb290R3Jh
cGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgbV9yb290R3JhcGhpY3NMYXllci0+
c2V0U2l6ZShjb3JlKG1fd2ViVmlldyktPm1haW5GcmFtZSgpLT52aWV3KCktPmZyYW1lUmVjdCgp
LnNpemUoKSk7CisKKyAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVySW1hZ2VCdWZm
ZXI6OmNyZWF0ZSgpOworICAgIG1fcm9vdFRleHR1cmVNYXBwZXJMYXllci0+c2V0VGV4dHVyZU1h
cHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnN5
bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworfQorCit2b2lkIEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzY2hlZHVsZVJvb3RMYXllclJlcGFpbnQoY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1fcm9vdEdyYXBoaWNzTGF5ZXIpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9yb290R3JhcGhpY3NM
YXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9y
b290R3JhcGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworCisgICAgZ3Rr
X3dpZGdldF9xdWV1ZV9kcmF3X2FyZWEoR1RLX1dJREdFVChtX3dlYlZpZXcpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlY3QueCgpLCByZWN0LnkoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworfQorCit2b2lk
IEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpyZXNpemVSb290TGF5ZXIoY29uc3QgSW50
U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoIW1fcm9vdEdyYXBoaWNzTGF5ZXIpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zZXRTaXplKHNpemUpOworICAgIG1fcm9v
dEdyYXBoaWNzTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gc3luY0xheWVyc1RpbWVvdXRDYWxsYmFjayhBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBjb250ZXh0LT5zeW5jTGF5ZXJz
VGltZW91dCgpOworICAgIHJldHVybiBGQUxTRTsKK30KKwordm9pZCBBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dDo6bWFya0ZvclN5bmMoKQoreworICAgIGlmIChtX3N5bmNUaW1lckNhbGxi
YWNrSWQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIHVzZSBhIEdMaWIgdGltZXIgYmVj
YXVzZSBvdGhlcndpc2UgR1RLKyBldmVudCBoYW5kbGluZyBkdXJpbmcKKyAgICAvLyBkcmFnZ2lu
ZyBjYW4gc3RhcnZlIFdlYkNvcmUgdGltZXJzLCB3aGljaCBoYXZlIGEgbG93ZXIgcHJpb3JpdHku
CisgICAgbV9zeW5jVGltZXJDYWxsYmFja0lkID0gZ190aW1lb3V0X2FkZF9mdWxsKEdES19QUklP
UklUWV9FVkVOVFMsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHN5bmNMYXllcnNU
aW1lb3V0Q2FsbGJhY2spLCB0aGlzLCAwKTsKK30KKwordm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQ29udGV4dDo6c3luY0xheWVyc05vdygpCit7CisgICAgaWYgKG1fcm9vdEdyYXBoaWNzTGF5
ZXIpCisgICAgICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9y
VGhpc0xheWVyT25seSgpOworCisgICAgY29yZShtX3dlYlZpZXcpLT5tYWluRnJhbWUoKS0+dmll
dygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworfQorCit2b2lk
IEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzeW5jTGF5ZXJzVGltZW91dCgpCit7Cisg
ICAgbV9zeW5jVGltZXJDYWxsYmFja0lkID0gMDsKKyAgICBzeW5jTGF5ZXJzTm93KCk7CisgICAg
aWYgKCFtX3Jvb3RHcmFwaGljc0xheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhN
RTogSW52YWxpZGF0ZSBqdXN0IHRoZSBhbmltYXRpb25zIHJlY3RhbmdsZXMuCisgICAgZ3RrX3dp
ZGdldF9xdWV1ZV9kcmF3KEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisKKyAgICBpZiAodG9UZXh0
dXJlTWFwcGVyTGF5ZXIobV9yb290R3JhcGhpY3NMYXllci5nZXQoKSktPmRlc2NlbmRhbnRzT3JT
ZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpCisgICAgICAgIG1fc3luY1RpbWVyQ2FsbGJhY2tJ
ZCA9IGdfdGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJVFlfRVZFTlRTLCAxMDAwLjAgLyA2MC4w
LCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihzeW5jTGF5ZXJzVGltZW91dENhbGxiYWNr
KSwgdGhpcywgMCk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6Om5v
dGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKQor
eworCit9Cit2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojpub3RpZnlTeW5jUmVx
dWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopCit7CisKK30KKwordm9pZCBBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQ29udGV4dDo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3Qg
SW50UmVjdCYgcmVjdFRvUGFpbnQpCit7CisgICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LnBsYXRm
b3JtQ29udGV4dCgpLT5jcigpOworICAgIGNvcHlSZWN0RnJvbUNhaXJvU3VyZmFjZVRvQ29udGV4
dChtX3dlYlZpZXctPnByaXYtPmJhY2tpbmdTdG9yZS0+Y2Fpcm9TdXJmYWNlKCksIGNyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRTaXplKCksIHJlY3RUb1BhaW50
KTsKK30KKworYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2hvd0RlYnVnQm9y
ZGVycyhjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnNob3dSZXBhaW50Q291bnRl
cihjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVJfQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dENs
dXR0ZXIuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHRDbHV0dGVyLmNwcAppbmRleCAwMGExOTFhLi41NjY5ZjkzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dENsdXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Q2x1dHRlci5jcHAKQEAgLTUzLDcg
KzUzLDcgQEAgYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6ZW5hYmxlZCgpCiAg
ICAgcmV0dXJuIG1fcm9vdEdyYXBoaWNzTGF5ZXI7CiB9CiAKLWJvb2wgQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0NvbnRleHQ6OnJlbmRlckxheWVyc1RvV2luZG93KGNvbnN0IEludFJlY3QmIGNsaXBS
ZWN0KQorcWJvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnJlbmRlckxheWVyc1Rv
V2luZG93KGNhaXJvX3QqLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKIHsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzeW5jTGF5ZXJzVGltZW91dCgpCiAgICAgaWYg
KCFtX3Jvb3RHcmFwaGljc0xheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICByZW5kZXJMYXll
cnNUb1dpbmRvdyhJbnRSZWN0KCkpOworICAgIHJlbmRlckxheWVyc1RvV2luZG93KDAsIEludFJl
Y3QoKSk7CiB9CiAKIHZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6Om5vdGlmeUFu
aW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1l
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHRHTC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dEdMLmNwcAppbmRleCA2YmZkY2I2Li5l
NmZkMjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dEdMLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dEdMLmNwcApAQCAtODAs
NyArODAsNyBAQCBHTENvbnRleHQqIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpnbENv
bnRleHQoKQogICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CiB9CiAKLWJvb2wgQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnJlbmRlckxheWVyc1RvV2luZG93KGNvbnN0IEludFJlY3Qm
IGNsaXBSZWN0KQorYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6cmVuZGVyTGF5
ZXJzVG9XaW5kb3coY2Fpcm9fdCosIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQogewogICAgIGlm
ICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xODksNyArMTg5LDcgQEAg
dm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c3luY0xheWVyc1RpbWVvdXQoKQog
ICAgIGlmICghbV9yb290R3JhcGhpY3NMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgcmVu
ZGVyTGF5ZXJzVG9XaW5kb3coSW50UmVjdCgpKTsKKyAgICByZW5kZXJMYXllcnNUb1dpbmRvdygw
LCBJbnRSZWN0KCkpOwogCiAgICAgaWYgKHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9vdEdyYXBo
aWNzTGF5ZXIuZ2V0KCkpLT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygp
KQogICAgICAgICBtX3N5bmNUaW1lckNhbGxiYWNrSWQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR0RL
X1BSSU9SSVRZX0VWRU5UUywgMTAwMC4wIC8gNjAuMCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNl
RnVuYz4oc3luY0xheWVyc1RpbWVvdXRDYWxsYmFjayksIHRoaXMsIDApOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKaW5kZXgg
NjU1YmY3OC4uMGM3MGQ4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCkBAIC01NDAsNiArNTQwLDcgQEAgdm9pZCBDaHJv
bWVDbGllbnQ6OmludmFsaWRhdGVXaWRnZXRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKKwogICAgIGd0a193aWRnZXRfcXVldWVfZHJhd19h
cmVhKEdUS19XSURHRVQobV93ZWJWaWV3KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWN0LngoKSwgcmVjdC55KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKQEAgLTU5NCw3ICs1OTUsNyBAQCB2b2lkIENocm9t
ZUNsaWVudDo6cGFpbnQoV2ViQ29yZTo6VGltZXI8Q2hyb21lQ2xpZW50PiopCiAKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgbV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQ29udGV4dC0+c3luY0xheWVyc05vdygpOwotICAgIG1fd2ViVmlldy0+cHJp
di0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQtPnJlbmRlckxheWVyc1RvV2luZG93KHJl
Y3QpOworICAgIG1fd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQt
PnJlbmRlckxheWVyc1RvV2luZG93KDAsIHJlY3QpOwogI2VuZGlmCiAKICAgICBtX2RpcnR5UmVn
aW9uID0gUmVnaW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5j
cHAKaW5kZXggMzAwZWE4Yy4uYzdjODQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJ2aWV3LmNwcApAQCAtNjgyLDEwICs2ODIsOCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X3dlYl92aWV3X2RyYXcoR3RrV2lkZ2V0KiB3aWRnZXQsIGNhaXJvX3QqIGNyKQogICAgICAg
ICByZXR1cm4gRkFMU0U7CiAKICAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9XRUJfVklFVyh3aWRnZXQpLT5wcml2OwotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSAg
ICBpZiAocHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQtPnJlbmRlckxheWVyc1Rv
V2luZG93KGNsaXBSZWN0KSkKKyAgICBpZiAocHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Nv
bnRleHQtPnJlbmRlckxheWVyc1RvV2luZG93KGNyLCBjbGlwUmVjdCkpCiAgICAgICAgIHJldHVy
biBGQUxTRTsKLSNlbmRpZgogCiAgICAgY2Fpcm9fcmVjdGFuZ2xlX2xpc3RfdCogcmVjdExpc3Qg
PSBjYWlyb19jb3B5X2NsaXBfcmVjdGFuZ2xlX2xpc3QoY3IpOwogICAgIGlmIChyZWN0TGlzdC0+
c3RhdHVzIHx8ICFyZWN0TGlzdC0+bnVtX3JlY3RhbmdsZXMpIHsKQEAgLTk2OCw4ICs5NjYsNiBA
QCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2ZvY3VzX291dF9ldmVudChHdGtXaWRn
ZXQqIHdpZGdldCwgR2RrRXZlbnRGb2N1cwogCiBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdf
cmVhbGl6ZShHdGtXaWRnZXQqIHdpZGdldCkKIHsKLSAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9XRUJfVklFVyh3aWRnZXQpLT5wcml2OwotCiAgICAgZ3RrX3dpZGdldF9z
ZXRfcmVhbGl6ZWQod2lkZ2V0LCBUUlVFKTsKIAogICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlv
bjsKQEAgLTEwMTAsNiArMTAwNiw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19yZWFs
aXplKEd0a1dpZGdldCogd2lkZ2V0KQogICAgIEdka1dpbmRvdyogd2luZG93ID0gZ2RrX3dpbmRv
d19uZXcoZ3RrX3dpZGdldF9nZXRfcGFyZW50X3dpbmRvdyh3aWRnZXQpLCAmYXR0cmlidXRlcywg
YXR0cmlidXRlc19tYXNrKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYg
VVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0g
V0VCS0lUX1dFQl9WSUVXKHdpZGdldCktPnByaXY7CiAgICAgcHJpdi0+aGFzTmF0aXZlV2luZG93
ID0gZ2RrX3dpbmRvd19lbnN1cmVfbmF0aXZlKHdpbmRvdyk7CiAjZW5kaWYKICAgICBndGtfd2lk
Z2V0X3NldF93aW5kb3cod2lkZ2V0LCB3aW5kb3cpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146650</attachid>
            <date>2012-06-08 14:32:23 -0700</date>
            <delta_ts>2012-06-11 04:27:36 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>texturemapperimagebuffer.patch</filename>
            <type>text/plain</type>
            <size>23896</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiYjVjZjkyLi4zYTI0MDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEg
QEAKKzIwMTItMDUtMjggIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0dUS10gQWRkIFRleHR1cmVNYXBwZXIgSW1hZ2VCdWZmZXIgc3VwcG9ydCBhcyBh
IGZhbGxiYWNrIGZyb20gdGhlIGhhcmR3YXJlIGFjY2VsZXJhdGVkIHBhdGgKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczNjM0CisKKyAgICAgICAgUmVt
b3ZlIHRoZSBUZXh0dXJlTWFwcGVyQ2Fpcm8gY2xhc3Nlcywgbm93IHdlIHVzZQorICAgICAgICBU
ZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIgdG8gaW1wbGVtZW50IHRoZSBzb2Z0d2FyZSBmYWxsYmFj
ay4gQWRkCisgICAgICAgIGltcGxlbWVudGF0aW9uIGZvciB0aGUgM0QgdHJhbnNmb3JtYXRpb25z
IGluIHRoZSAyRCBjYWlybyBncmFwaGljcworICAgICAgICBjb250ZXh0LgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIG5l
dyBpbXBsZW1lbnRhdGlvbiBvZiBhbHJlYWR5IHRlc3RlZCBjYXNlcy4KKworICAgICAgICAqIEdO
VW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcik6
CisgICAgICAgIFJlcXVpcmVkIGZvciBjb21waWxhdGlvbiB3aGVuIFdlYkdMIGlzIGVuYWJsZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXQzRFRyYW5zZm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbmNhdDNEVHJhbnNmb3JtKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0M0RUcmFuc2Zvcm0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RleHR1cmVNYXBwZXJDYWlyby5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBlckNh
aXJvLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJl
SW1hZ2VCdWZmZXI6OnVwZGF0ZUNvbnRlbnRzKToKKwogMjAxMi0wNS0wNyAgU2VyZ2lvIFZpbGxh
ciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBDYWxsaW5nIG5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCkgY2F1c2VzIGFzc2VydGlvbiBmYWlsdXJlOiBtX3ZlcmlmaWVy
LmlzU2FmZVRvVXNlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDNkYTU4OTEu
LmVjMWRmN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
KysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjA0Nyw2ICs2MDQ3
LDggQEAgZW5kaWYgICMgRU5EIFVTRV9DTFVUVEVSCiAKIGlmIFVTRV9URVhUVVJFX01BUFBFUl9D
QUlSTwogd2ViY29yZV9zb3VyY2VzICs9IFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9ybS5jcHAgXApAQCAtNjA2Miw5ICs2
MDY0LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXIuaAotd2ViY29yZWd0a19zb3VyY2VzICs9IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8uY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8uaAogZW5kaWYgICMgRU5E
IFVTRV9URVhUVVJFX01BUFBFUl9DQUlSTwogCiBpZiBVU0VfVEVYVFVSRV9NQVBQRVJfR0wKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCmluZGV4IGZmMWJlMDUuLmYzOTdiYmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcApAQCAtMjQsMTEgKzI0LDE2
IEBACiAKICNpbmNsdWRlICJIb3N0V2luZG93LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENh
aXJvLmgiCisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikgJiYgVVNFKFRFWFRVUkVfTUFQ
UEVSX0dMKQogI2luY2x1ZGUgPHRleG1hcC9UZXh0dXJlTWFwcGVyR0wuaD4KICNlbmRpZgogCit1
c2luZyBuYW1lc3BhY2Ugc3RkOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NPd25QdHI8
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0
ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKQEAgLTYyLDExICs2Nyw2IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVy
KiB0ZXh0dXJlTWFwcGVyCiAgICAgaWYgKCFtX2dsQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKHRleHR1cmVNYXBwZXItPmFjY2VsZXJhdGlvbk1vZGUoKSAhPSBUZXh0dXJlTWFw
cGVyOjpPcGVuR0xNb2RlKSB7Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KICAgICBpZiAobV9jb250ZXh0LT5tX2F0dHJzLmFudGlhbGlhcyAmJiBt
X2NvbnRleHQtPm1fYm91bmRGQk8gPT0gbV9jb250ZXh0LT5tX211bHRpc2FtcGxlRkJPKSB7CiAg
ICAgICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpnZXRD
dXJyZW50KCk7CiAKQEAgLTc5LDEwICs3OSw1MCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcgog
ICAgICAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
ICAgICB9CiAKKyAgICAvLyBGSVhNRTogV2UgZG8gbm90IHN1cHBvcnQgbWFzayBmb3IgdGhlIG1v
bWVudCB3aXRoIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci4KKyAgICBpZiAodGV4dHVyZU1hcHBl
ci0+YWNjZWxlcmF0aW9uTW9kZSgpICE9IFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpIHsKKyAg
ICAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3ND
b250ZXh0KCk7CisgICAgICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICAgICAgY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCktPnNldEdsb2JhbEFscGhhKG9wYWNpdHkpOworCisgICAgICAgIGNvbnN0
IGludCBoZWlnaHQgPSBtX2NvbnRleHQtPm1fY3VycmVudEhlaWdodDsKKyAgICAgICAgY29uc3Qg
aW50IHdpZHRoID0gbV9jb250ZXh0LT5tX2N1cnJlbnRXaWR0aDsKKyAgICAgICAgaW50IHRvdGFs
Qnl0ZXMgPSB3aWR0aCAqIGhlaWdodCAqIDQ7CisKKyAgICAgICAgT3duQXJyYXlQdHI8dW5zaWdu
ZWQgY2hhcj4gcGl4ZWxzID0gYWRvcHRBcnJheVB0cihuZXcgdW5zaWduZWQgY2hhclt0b3RhbEJ5
dGVzXSk7CisgICAgICAgIGlmICghcGl4ZWxzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGNvbnRleHQtPnNldENUTShtYXRyaXgudG9BZmZpbmVUcmFuc2Zvcm0oKSk7CisgICAgICAg
IC8vIE9wZW5HTCBrZWVwcyB0aGUgcGl4ZWxzIHN0b3JlZCBib3R0b20gdXAsIHNvIHdlIG5lZWQg
dG8gZmxpcCB0aGUgaW1hZ2UgaGVyZS4KKyAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKDAsIGhl
aWdodCk7CisgICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworCisgICAg
ICAgIG1fY29udGV4dC0+cmVhZFJlbmRlcmluZ1Jlc3VsdHMocGl4ZWxzLmdldCgpLCB0b3RhbEJ5
dGVzKTsKKworICAgICAgICAvLyBQcmVtdWx0aXBseSBhbHBoYS4KKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCisgICAgICAgICAgICBpZiAocGl4ZWxzW2kg
KyAzXSAhPSAyNTUpIHsKKyAgICAgICAgICAgICAgICBwaXhlbHNbaSArIDBdID0gbWluKDI1NSwg
cGl4ZWxzW2kgKyAwXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOworICAgICAgICAgICAgICAgIHBp
eGVsc1tpICsgMV0gPSBtaW4oMjU1LCBwaXhlbHNbaSArIDFdICogcGl4ZWxzW2kgKyAzXSAvIDI1
NSk7CisgICAgICAgICAgICAgICAgcGl4ZWxzW2kgKyAyXSA9IG1pbigyNTUsIHBpeGVsc1tpICsg
Ml0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZVN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9z
dXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KHBpeGVscy5nZXQoKSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHdpZHRoLCBoZWlnaHQs
IHdpZHRoICogNCkpOworCisgICAgICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3
U3VyZmFjZVRvQ29udGV4dChpbWFnZVN1cmZhY2UuZ2V0KCksIHRhcmdldFJlY3QsIEludFJlY3Qo
MCwgMCwgd2lkdGgsIGhlaWdodCksIGNvbnRleHQpOworCisgICAgICAgIGNvbnRleHQtPnJlc3Rv
cmUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIFVTRShURVhUVVJFX01BUFBFUl9H
TCkKICAgICBUZXh0dXJlTWFwcGVyR0wqIHRleG1hcEdMID0gc3RhdGljX2Nhc3Q8VGV4dHVyZU1h
cHBlckdMKj4odGV4dHVyZU1hcHBlcik7CiAgICAgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBmbGFn
cyA9IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkRmxpcFRleHR1cmUgfCAobV9jb250ZXh0LT5tX2F0
dHJzLmFscGhhID8gVGV4dHVyZU1hcHBlckdMOjpTdXBwb3J0c0JsZW5kaW5nIDogMCk7CiAgICAg
SW50U2l6ZSB0ZXh0dXJlU2l6ZShtX2NvbnRleHQtPm1fY3VycmVudFdpZHRoLCBtX2NvbnRleHQt
Pm1fY3VycmVudEhlaWdodCk7CiAgICAgdGV4bWFwR0wtPmRyYXdUZXh0dXJlKG1fY29udGV4dC0+
bV90ZXh0dXJlLCBmbGFncywgdGV4dHVyZVNpemUsIHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0
eSwgbWFzayk7CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HX0dMKQogfQog
I2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUuaAppbmRleCBmMWRiYTgyLi4xZDRkOGZiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRFByaXZh
dGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUuaApAQCAtNDAsNiArNDAsNyBAQCBwdWJsaWM6CiAgICAgfkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZSgpOwogICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAg
ICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUNvbnRleHQoKTsKKyAgICB2b2lk
IHBhaW50VG9DYW52YXNSZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBpbnQg
aW1hZ2VXaWR0aCwgaW50IGltYWdlSGVpZ2h0LCBjb25zdCBGbG9hdFJlY3QmIGNhbnZhc1JlY3Qs
IFBsYXRmb3JtQ29udGV4dENhaXJvKik7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1
cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2sp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IGE3OGE3NDcuLmZkYWE1MjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTExNTAsMTggKzExNTAsMTggQEAgSW50
ZXJwb2xhdGlvblF1YWxpdHkgR3JhcGhpY3NDb250ZXh0OjppbWFnZUludGVycG9sYXRpb25RdWFs
aXR5KCkgY29uc3QKICNpZiBFTkFCTEUoM0RfUkVOREVSSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQ
RVIpCiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBHcmFwaGljc0NvbnRleHQ6OmdldDNEVHJhbnNmb3Jt
KCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgpOworICAgIC8vIEZJWE1FOiBDYW4gd2UgYXBwcm94aW1hdGUgdGhlIHRyYW5z
Zm9ybWF0aW9uIGJldHRlciB0aGFuIHRoaXM/CisgICAgcmV0dXJuIGdldENUTSgpLnRvVHJhbnNm
b3JtYXRpb25NYXRyaXgoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdDNEVHJh
bnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICBjb25jYXRDVE0odHJhbnNmb3JtLnRvQWZmaW5lVHJhbnNmb3Jt
KCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0M0RUcmFuc2Zvcm0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHNldENUTSh0cmFuc2Zvcm0udG9BZmZpbmVUcmFuc2Zvcm0oKSk7CiB9CiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVy
ZU1hcHBlckNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L1RleHR1cmVNYXBwZXJDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3
Mjk1MTEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vVGV4dHVyZU1hcHBlckNhaXJvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJDYWlyby5oIgotCi0jaW5j
bHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgQml0bWFwVGV4dHVyZUNhaXJvOjpkZXN0cm95KCkK
LXsKLSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICBkZWxldGUgbV9jb250ZXh0OwotfQotCi0K
LUludFNpemUgQml0bWFwVGV4dHVyZUNhaXJvOjpzaXplKCkgY29uc3QKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBJbnRTaXplKCk7Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVy
ZUNhaXJvOjpyZXNldChjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGlzT3BhcXVlKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBCaXRtYXBU
ZXh0dXJlQ2Fpcm86OmJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIG1fY29udGV4dDsKLX0KLQotdm9pZCBCaXRt
YXBUZXh0dXJlQ2Fpcm86OmVuZFBhaW50KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIEJpdG1hcFRleHR1cmVDYWlybzo6dXBkYXRlQ29udGVudHMoUGl4ZWxGb3JtYXQgcGl4
ZWxGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIHZvaWQqIGJpdHMpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotCi1ib29sIEJpdG1hcFRleHR1cmVDYWlybzo6c2F2ZShjb25zdCBT
dHJpbmcmIHBhdGgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZUNhaXJvOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2Uq
IGltYWdlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBl
ckNhaXJvOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgY29u
c3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
VGV4dHVyZU1hcHBlckNhaXJvOjplbmRDbGlwKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi1JbnRTaXplIFRleHR1cmVNYXBwZXJDYWlybzo6dmlld3BvcnRTaXplKCkgY29uc3QKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0KLVRleHR1cmVNYXBwZXJDYWlybzo6VGV4dHVy
ZU1hcHBlckNhaXJvKCkKLSAgICA6IG1fY29udGV4dCgwKQotewotfQotCi12b2lkIFRleHR1cmVN
YXBwZXJDYWlybzo6c2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkK
LXsKLSAgICBtX2NvbnRleHQgPSBjb250ZXh0OwotfQotCi1HcmFwaGljc0NvbnRleHQqIFRleHR1
cmVNYXBwZXJDYWlybzo6Z3JhcGhpY3NDb250ZXh0KCkKLXsKLSAgICByZXR1cm4gbV9jb250ZXh0
OwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJDYWlybzo6YmluZFN1cmZhY2UoQml0bWFwVGV4dHVy
ZSogdGV4dHVyZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0KLXZvaWQgVGV4dHVy
ZU1hcHBlckNhaXJvOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4g
VGV4dHVyZU1hcHBlckNhaXJvOjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEJpdG1hcFRleHR1cmVDYWlybygpKTsKLX0KLQotQml0bWFwVGV4dHVyZUNhaXJvOjpC
aXRtYXBUZXh0dXJlQ2Fpcm8oKQotICAgIDogbV9jb250ZXh0KDApCi0gICAgLCBtX3N1cmZhY2Uo
MCkKLXsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyQ2Fpcm86OmJlZ2luUGFpbnRpbmcoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlckNhaXJvOjplbmRQ
YWludGluZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RleHR1cmVNYXBwZXJDYWly
by5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBl
ckNhaXJvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzYTA5NmYuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBl
ckNhaXJvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQot
ICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgVGV4dHVyZU1hcHBlckNh
aXJvX2gKLSNkZWZpbmUgVGV4dHVyZU1hcHBlckNhaXJvX2gKLQotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAi
UmVmUHRyQ2Fpcm8uaCIKLSNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlci5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEJpdG1hcFRleHR1cmVDYWlybyA6IHB1YmxpYyBCaXRt
YXBUZXh0dXJlIHsKLSAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlckNhaXJvOwotcHVibGlj
OgotICAgIEJpdG1hcFRleHR1cmVDYWlybygpOwotICAgIH5CaXRtYXBUZXh0dXJlQ2Fpcm8oKSB7
IGRlc3Ryb3koKTsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7Ci0gICAgdmlydHVhbCBJ
bnRTaXplIHNpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoY29uc3QgSW50U2l6
ZSYsIGJvb2wgb3BhcXVlKTsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBi
ZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7Ci0gICAgdmlydHVhbCB2b2lkIGVu
ZFBhaW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwot
ICAgIHZpcnR1YWwgYm9vbCBzYXZlKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0gICAgdmlydHVhbCBi
b29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAhbV9zdXJmYWNlO30KLSAgICBJbnRSZWN0IHNv
dXJjZVJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KDAsIDAsIGNvbnRlbnRTaXplKCkud2lk
dGgoKSwgY29udGVudFNpemUoKS5oZWlnaHQoKSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFjaygp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCB1bnBhY2soKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNQ
YWNrZWQoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRl
bnRzKFBpeGVsRm9ybWF0LCBjb25zdCBJbnRSZWN0Jiwgdm9pZCogYml0cyk7Ci0KLSAgICBjYWly
b190KiBjcigpIHsgcmV0dXJuIG1fY29udGV4dC0+Y3IoKTsgfQotCi1wcml2YXRlOgotICAgIHZv
aWQgY2xlYXJSZWN0KGNvbnN0IEludFJlY3QmKTsKLQotICAgIFBsYXRmb3JtQ29udGV4dENhaXJv
KiBtX2NvbnRleHQ7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNlOwotfTsK
LQotY2xhc3MgVGV4dHVyZU1hcHBlckNhaXJvIDogcHVibGljIFRleHR1cmVNYXBwZXIgewotcHVi
bGljOgotICAgIFRleHR1cmVNYXBwZXJDYWlybygpOwotCi0gICAgdmlydHVhbCB2b2lkIGRyYXdU
ZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3Qs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFw
VGV4dHVyZSogbWFza1RleHR1cmUpOwotICAgIHZpcnR1YWwgdm9pZCBiaW5kU3VyZmFjZShCaXRt
YXBUZXh0dXJlKiBzdXJmYWNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5DbGlwKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lk
IGVuZENsaXAoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNz
Q29udGV4dCopOwotICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQo
KTsKLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9vdCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRl
eHR1cmUoKTsKLSAgICB2aXJ0dWFsIEludFNpemUgdmlld3BvcnRTaXplKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCB2b2lkIGJlZ2luUGFpbnRpbmcoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnRp
bmcoKTsKLQotICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVNYXBwZXI+IGNyZWF0ZSgpIHsg
cmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyQ2Fpcm8pOyB9Ci1wcml2YXRlOgotICAg
IEdyYXBoaWNzQ29udGV4dCogbV9jb250ZXh0OwotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlQ2Fp
cm8+IG1fdGV4dHVyZTsKLX07Ci0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlcklt
YWdlQnVmZmVyLmNwcAppbmRleCAyMDhiNTM0Li43OTQ3MGIzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckltYWdlQnVmZmVyLmNwcApAQCAtMzUsNiArMzUsMTMgQEAgdm9pZCBCaXRtYXBUZXh0
dXJlSW1hZ2VCdWZmZXI6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqIGRhdGEsIGNvbnN0IElu
dFJlY3QmIHQKICAgICBwYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBv
c2l0aW9uTW9kZV9Tb3VyY2UpOwogICAgIHBhaW50ZXItPmRyYXdJbWFnZSh0YXJnZXRSZWN0LCBp
bWFnZSwgSW50UmVjdChzb3VyY2VPZmZzZXQsIHRhcmdldFJlY3Quc2l6ZSgpKSk7CiAgICAgcGFp
bnRlci0+cmVzdG9yZSgpOworI2VsaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgUmVmUHRyPGNhaXJv
X3N1cmZhY2VfdD4gc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRl
X2Zvcl9kYXRhKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihkYXRhKCkpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJ5dGVzUGVyTGluZSkpOworICAgIG1faW1hZ2UtPmNvbnRleHQo
KS0+cGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJmYWNlVG9Db250ZXh0KHN1cmZhY2UuZ2V0KCks
IHRhcmdldFJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSW50UmVjdChzb3VyY2VPZmZzZXQsIHRhcmdldFJlY3Quc2l6
ZSgpKSwgbV9pbWFnZS0+Y29udGV4dCgpKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5k
ZXggMjBjMGNhMS4uYzBiMzhmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisy
MDEyLTA1LTI4ICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAg
ICAgIFtHVEtdIEFkZCBUZXh0dXJlTWFwcGVyIEltYWdlQnVmZmVyIHN1cHBvcnQgYXMgYSBmYWxs
YmFjayBmcm9tIHRoZSBoYXJkd2FyZSBhY2NlbGVyYXRlZCBwYXRoCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzYzNAorCisgICAgICAgIEFkZCB0aGUg
bmV3IGdyYXBoaWNzIGxheWVyIGNsaWVudCB0aGF0IHVzZXMgY2Fpcm8gdG8gcmVuZGVyIHRoZQor
ICAgICAgICBjb21wb3NpdGlvbi4gVGhlIGNhaXJvIHRyYW5zZm9ybWF0aW9ucyBkbyBub3Qgc3Vw
cG9ydCBwZXJzcGVjdGl2ZQorICAgICAgICBzbyBpbiBwZXJzcGVjdGl2ZSBjYXNlcyB3ZSBoYXZl
IGp1c3QgYSByZXByZXNlbnRhdGlvbiBub3QgdGhlIHJlYWwKKyAgICAgICAgcGVyc3BlY3RpdmUg
dHJhbnNmb3JtYXRpb24uCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGEgbmV3IGltcGxlbWVu
dGF0aW9uIG9mIGFscmVhZHkgdGVzdGVkIGNhc2VzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaDoKKyAgICAgICAgKEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9B
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dENhaXJvLmNwcDogQWRkZWQuCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2hy
b21lQ2xpZW50OjppbnZhbGlkYXRlV2lkZ2V0UmVjdCk6IFdlIG5lZWQgdG8KKyAgICAgICAgaW52
YWxpZGF0ZSB0aGUgd2lkZ2V0IGluIHRoaXMgY2FzZSBiZWNhdXNlIHdlIGRvIG5vdCBkaXJlY3Rs
eQorICAgICAgICByZW5kZXIgdG8gYSB0ZXh0dXJlIGJ1dCB0byB0aGUgd2lkZ2V0IHN1cmZhY2Uu
CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudDo6cGFpbnQpOiBXZSBjYW4gbm90IHJlbmRl
ciBoZXJlLCB3ZSBoYXZlIHRvCisgICAgICAgIGludmFsaWRhdGUgYW5kIHdhaXQgZm9yIHRoZSB3
aWRnZXQgcmVuZGVyaW5nLgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKKyAg
ICAgICAgKHdlYmtpdF93ZWJfdmlld19kcmF3KTogSW4gdGhpcyBjYXNlIHRoZSByZW5kZXJMYXll
cnNUb1dpbmRvdworICAgICAgICByZXF1aXJlcyB0aGUgZ3JhcGhpY3MgY29udGV4dCB1c2VkIHRv
IHJlbmRlciBpbiB0aGUgd2luZG93LgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3JlYWxpemUp
OiBTbWFsbCBjbGVhbnVwIG9mIHRoZSBwcml2IHZhcmlhYmxlCisgICAgICAgIGRlZmluaXRpb24u
CisKIDIwMTItMDUtMDcgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+
CiAKICAgICAgICAgQ2FsbGluZyBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIGNhdXNlcyBh
c3NlcnRpb24gZmFpbHVyZTogbV92ZXJpZmllci5pc1NhZmVUb1VzZSgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1h
a2VmaWxlLmFtCmluZGV4IDJkNWFkMGEuLmYyNGM3YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvZ3RrL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxl
LmFtCkBAIC0xNzgsNiArMTc4LDcgQEAgd2Via2l0Z3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Lmgg
XAogCVNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdDb250ZXh0Q2x1dHRlci5jcHAgXAogCVNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0R0wuY3BwIFwKKwlTb3VyY2UvV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dENhaXJvLmNwcCBc
CiAJU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5j
cHAgXAogCVNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5j
cHAgXAogCVNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5o
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oCmluZGV4IDNmYjFmZTMuLjI0YTYxNGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaApAQCAtMjcsOCArMjcsMTAgQEAKICNp
bmNsdWRlICJ3ZWJraXR3ZWJ2aWV3LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAor
I2lmIFVTRShURVhUVVJFX01BUFBFUikKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAjaW5j
bHVkZSAiR0xDb250ZXh0LmgiCisjZW5kaWYKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTGF5ZXIu
aCIKICNlbmRpZgogCkBAIC01MSw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN5bmNMYXll
cnNUaW1lb3V0KCk7CiAgICAgdm9pZCBzeW5jTGF5ZXJzTm93KCk7CiAgICAgdm9pZCByZXNpemVS
b290TGF5ZXIoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotICAgIGJvb2wgcmVuZGVyTGF5ZXJz
VG9XaW5kb3coY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOworICAgIGJvb2wgcmVu
ZGVyTGF5ZXJzVG9XaW5kb3coY2Fpcm9fdCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBS
ZWN0KTsKICAgICBib29sIGVuYWJsZWQoKTsKIAogICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQK
QEAgLTY4LDEzICs3MCwxNSBAQCBwcml2YXRlOgogI2lmIFVTRShDTFVUVEVSKQogICAgIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqIG1fcm9vdEdyYXBoaWNzTGF5ZXI7CiAgICAgR3RrV2lkZ2V0KiBt
X3Jvb3RMYXllckVtYmVkZGVyOwotI2VsaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotICAgIFdl
YkNvcmU6OkdMQ29udGV4dCogZ2xDb250ZXh0KCk7CisjZWxpZiBVU0UoVEVYVFVSRV9NQVBQRVIp
CiAgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiBtX3Jvb3RUZXh0dXJlTWFwcGVyTGF5
ZXI7CiAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdEdyYXBoaWNzTGF5
ZXI7CiAgICAgT3duUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsK
KyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisgICAgV2ViQ29yZTo6R0xDb250ZXh0KiBnbENv
bnRleHQoKTsKICAgICBPd25QdHI8V2ViQ29yZTo6R0xDb250ZXh0PiBtX2NvbnRleHQ7CiAjZW5k
aWYKKyNlbmRpZgogCiAgICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQoV2ViS2l0V2Vi
VmlldyopOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Q2x1dHRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dENsdXR0ZXIu
Y3BwCmluZGV4IDAwYTE5MWEuLjZmZTBjMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Q2x1dHRlci5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0NvbnRleHRDbHV0dGVyLmNwcApAQCAtNTMsNyArNTMsNyBAQCBib29sIEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdDb250ZXh0OjplbmFibGVkKCkKICAgICByZXR1cm4gbV9yb290R3JhcGhpY3NM
YXllcjsKIH0KIAotYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6cmVuZGVyTGF5
ZXJzVG9XaW5kb3coY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCitib29sIEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdDb250ZXh0OjpyZW5kZXJMYXllcnNUb1dpbmRvdyhjYWlyb190KiwgY29uc3QgSW50
UmVjdCYgY2xpcFJlY3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gZmFs
c2U7CkBAIC0xNDMsNyArMTQzLDcgQEAgdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4
dDo6c3luY0xheWVyc1RpbWVvdXQoKQogICAgIGlmICghbV9yb290R3JhcGhpY3NMYXllcikKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgcmVuZGVyTGF5ZXJzVG9XaW5kb3coSW50UmVjdCgpKTsKKyAg
ICByZW5kZXJMYXllcnNUb1dpbmRvdygwLCBJbnRSZWN0KCkpOwogfQogCiB2b2lkIEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0Ojpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0R0wuY3Bw
IGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0NvbnRleHRHTC5jcHAKaW5kZXggNmJmZGNiNi4uZTZmZDI5MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHRH
TC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHRHTC5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgR0xDb250ZXh0KiBBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6Z2xDb250ZXh0KCkKICAgICByZXR1cm4gbV9jb250
ZXh0LmdldCgpOwogfQogCi1ib29sIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpyZW5k
ZXJMYXllcnNUb1dpbmRvdyhjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK2Jvb2wgQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnJlbmRlckxheWVyc1RvV2luZG93KGNhaXJvX3QqLCBjb25z
dCBJbnRSZWN0JiBjbGlwUmVjdCkKIHsKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMTg5LDcgKzE4OSw3IEBAIHZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0NvbnRleHQ6OnN5bmNMYXllcnNUaW1lb3V0KCkKICAgICBpZiAoIW1fcm9vdEdyYXBoaWNzTGF5
ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIHJlbmRlckxheWVyc1RvV2luZG93KEludFJlY3Qo
KSk7CisgICAgcmVuZGVyTGF5ZXJzVG9XaW5kb3coMCwgSW50UmVjdCgpKTsKIAogICAgIGlmICh0
b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RHcmFwaGljc0xheWVyLmdldCgpKS0+ZGVzY2VuZGFu
dHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkKICAgICAgICAgbV9zeW5jVGltZXJDYWxs
YmFja0lkID0gZ190aW1lb3V0X2FkZF9mdWxsKEdES19QUklPUklUWV9FVkVOVFMsIDEwMDAuMCAv
IDYwLjAsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHN5bmNMYXllcnNUaW1lb3V0Q2Fs
bGJhY2spLCB0aGlzLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCmluZGV4IGRiNzQ1ZDIuLmYzMDliZWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNw
cApAQCAtNTQxLDYgKzU0MSw3IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjppbnZhbGlkYXRlV2lkZ2V0
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlm
CisKICAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXdfYXJlYShHVEtfV0lER0VUKG1fd2ViVmlldyks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC54KCksIHJlY3QueSgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7
CkBAIC01OTUsNyArNTk2LDcgQEAgdm9pZCBDaHJvbWVDbGllbnQ6OnBhaW50KFdlYkNvcmU6OlRp
bWVyPENocm9tZUNsaWVudD4qKQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQog
ICAgIG1fd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQtPnN5bmNM
YXllcnNOb3coKTsKLSAgICBtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdD
b250ZXh0LT5yZW5kZXJMYXllcnNUb1dpbmRvdyhyZWN0KTsKKyAgICBtX3dlYlZpZXctPnByaXYt
PmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5yZW5kZXJMYXllcnNUb1dpbmRvdygwLCBy
ZWN0KTsKICNlbmRpZgogCiAgICAgbV9kaXJ0eVJlZ2lvbiA9IFJlZ2lvbigpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwIGIvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCmluZGV4IDI4NTQ5MDIuLjQ2ZGIwYzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKQEAgLTY3Nywx
MCArNjc3LDggQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19kcmF3KEd0a1dpZGdl
dCogd2lkZ2V0LCBjYWlyb190KiBjcikKICAgICAgICAgcmV0dXJuIEZBTFNFOwogCiAgICAgV2Vi
S2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KS0+cHJpdjsK
LSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0gICAgaWYgKHByaXYtPmFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdDb250ZXh0LT5yZW5kZXJMYXllcnNUb1dpbmRvdyhjbGlwUmVjdCkpCisgICAgaWYg
KHByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5yZW5kZXJMYXllcnNUb1dpbmRv
dyhjciwgY2xpcFJlY3QpKQogICAgICAgICByZXR1cm4gRkFMU0U7Ci0jZW5kaWYKIAogICAgIGNh
aXJvX3JlY3RhbmdsZV9saXN0X3QqIHJlY3RMaXN0ID0gY2Fpcm9fY29weV9jbGlwX3JlY3Rhbmds
ZV9saXN0KGNyKTsKICAgICBpZiAocmVjdExpc3QtPnN0YXR1cyB8fCAhcmVjdExpc3QtPm51bV9y
ZWN0YW5nbGVzKSB7Cg==
</data>
<flag name="commit-queue"
          id="153986"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146829</attachid>
            <date>2012-06-11 04:27:36 -0700</date>
            <delta_ts>2012-06-14 13:37:45 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>texturemapperimagebuffer.patch</filename>
            <type>text/plain</type>
            <size>30036</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiYjVjZjkyLi4zYTI0MDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEg
QEAKKzIwMTItMDUtMjggIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0dUS10gQWRkIFRleHR1cmVNYXBwZXIgSW1hZ2VCdWZmZXIgc3VwcG9ydCBhcyBh
IGZhbGxiYWNrIGZyb20gdGhlIGhhcmR3YXJlIGFjY2VsZXJhdGVkIHBhdGgKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczNjM0CisKKyAgICAgICAgUmVt
b3ZlIHRoZSBUZXh0dXJlTWFwcGVyQ2Fpcm8gY2xhc3Nlcywgbm93IHdlIHVzZQorICAgICAgICBU
ZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIgdG8gaW1wbGVtZW50IHRoZSBzb2Z0d2FyZSBmYWxsYmFj
ay4gQWRkCisgICAgICAgIGltcGxlbWVudGF0aW9uIGZvciB0aGUgM0QgdHJhbnNmb3JtYXRpb25z
IGluIHRoZSAyRCBjYWlybyBncmFwaGljcworICAgICAgICBjb250ZXh0LgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIG5l
dyBpbXBsZW1lbnRhdGlvbiBvZiBhbHJlYWR5IHRlc3RlZCBjYXNlcy4KKworICAgICAgICAqIEdO
VW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcik6
CisgICAgICAgIFJlcXVpcmVkIGZvciBjb21waWxhdGlvbiB3aGVuIFdlYkdMIGlzIGVuYWJsZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXQzRFRyYW5zZm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbmNhdDNEVHJhbnNmb3JtKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0M0RUcmFuc2Zvcm0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RleHR1cmVNYXBwZXJDYWlyby5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBlckNh
aXJvLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJl
SW1hZ2VCdWZmZXI6OnVwZGF0ZUNvbnRlbnRzKToKKwogMjAxMi0wNS0wNyAgU2VyZ2lvIFZpbGxh
ciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBDYWxsaW5nIG5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCkgY2F1c2VzIGFzc2VydGlvbiBmYWlsdXJlOiBtX3ZlcmlmaWVy
LmlzU2FmZVRvVXNlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDNkYTU4OTEu
LmVjMWRmN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
KysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjA0Nyw2ICs2MDQ3
LDggQEAgZW5kaWYgICMgRU5EIFVTRV9DTFVUVEVSCiAKIGlmIFVTRV9URVhUVVJFX01BUFBFUl9D
QUlSTwogd2ViY29yZV9zb3VyY2VzICs9IFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9ybS5jcHAgXApAQCAtNjA2Miw5ICs2
MDY0LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXIuaAotd2ViY29yZWd0a19zb3VyY2VzICs9IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8uY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UZXh0dXJlTWFwcGVyQ2Fpcm8uaAogZW5kaWYgICMgRU5E
IFVTRV9URVhUVVJFX01BUFBFUl9DQUlSTwogCiBpZiBVU0VfVEVYVFVSRV9NQVBQRVJfR0wKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCmluZGV4IGZmMWJlMDUuLmYzOTdiYmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcApAQCAtMjQsMTEgKzI0LDE2
IEBACiAKICNpbmNsdWRlICJIb3N0V2luZG93LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENh
aXJvLmgiCisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikgJiYgVVNFKFRFWFRVUkVfTUFQ
UEVSX0dMKQogI2luY2x1ZGUgPHRleG1hcC9UZXh0dXJlTWFwcGVyR0wuaD4KICNlbmRpZgogCit1
c2luZyBuYW1lc3BhY2Ugc3RkOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NPd25QdHI8
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0
ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKQEAgLTYyLDExICs2Nyw2IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVy
KiB0ZXh0dXJlTWFwcGVyCiAgICAgaWYgKCFtX2dsQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKHRleHR1cmVNYXBwZXItPmFjY2VsZXJhdGlvbk1vZGUoKSAhPSBUZXh0dXJlTWFw
cGVyOjpPcGVuR0xNb2RlKSB7Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KICAgICBpZiAobV9jb250ZXh0LT5tX2F0dHJzLmFudGlhbGlhcyAmJiBt
X2NvbnRleHQtPm1fYm91bmRGQk8gPT0gbV9jb250ZXh0LT5tX211bHRpc2FtcGxlRkJPKSB7CiAg
ICAgICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpnZXRD
dXJyZW50KCk7CiAKQEAgLTc5LDEwICs3OSw1MCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcgog
ICAgICAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
ICAgICB9CiAKKyAgICAvLyBGSVhNRTogV2UgZG8gbm90IHN1cHBvcnQgbWFzayBmb3IgdGhlIG1v
bWVudCB3aXRoIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci4KKyAgICBpZiAodGV4dHVyZU1hcHBl
ci0+YWNjZWxlcmF0aW9uTW9kZSgpICE9IFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpIHsKKyAg
ICAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3ND
b250ZXh0KCk7CisgICAgICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICAgICAgY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCktPnNldEdsb2JhbEFscGhhKG9wYWNpdHkpOworCisgICAgICAgIGNvbnN0
IGludCBoZWlnaHQgPSBtX2NvbnRleHQtPm1fY3VycmVudEhlaWdodDsKKyAgICAgICAgY29uc3Qg
aW50IHdpZHRoID0gbV9jb250ZXh0LT5tX2N1cnJlbnRXaWR0aDsKKyAgICAgICAgaW50IHRvdGFs
Qnl0ZXMgPSB3aWR0aCAqIGhlaWdodCAqIDQ7CisKKyAgICAgICAgT3duQXJyYXlQdHI8dW5zaWdu
ZWQgY2hhcj4gcGl4ZWxzID0gYWRvcHRBcnJheVB0cihuZXcgdW5zaWduZWQgY2hhclt0b3RhbEJ5
dGVzXSk7CisgICAgICAgIGlmICghcGl4ZWxzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGNvbnRleHQtPnNldENUTShtYXRyaXgudG9BZmZpbmVUcmFuc2Zvcm0oKSk7CisgICAgICAg
IC8vIE9wZW5HTCBrZWVwcyB0aGUgcGl4ZWxzIHN0b3JlZCBib3R0b20gdXAsIHNvIHdlIG5lZWQg
dG8gZmxpcCB0aGUgaW1hZ2UgaGVyZS4KKyAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKDAsIGhl
aWdodCk7CisgICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworCisgICAg
ICAgIG1fY29udGV4dC0+cmVhZFJlbmRlcmluZ1Jlc3VsdHMocGl4ZWxzLmdldCgpLCB0b3RhbEJ5
dGVzKTsKKworICAgICAgICAvLyBQcmVtdWx0aXBseSBhbHBoYS4KKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCisgICAgICAgICAgICBpZiAocGl4ZWxzW2kg
KyAzXSAhPSAyNTUpIHsKKyAgICAgICAgICAgICAgICBwaXhlbHNbaSArIDBdID0gbWluKDI1NSwg
cGl4ZWxzW2kgKyAwXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOworICAgICAgICAgICAgICAgIHBp
eGVsc1tpICsgMV0gPSBtaW4oMjU1LCBwaXhlbHNbaSArIDFdICogcGl4ZWxzW2kgKyAzXSAvIDI1
NSk7CisgICAgICAgICAgICAgICAgcGl4ZWxzW2kgKyAyXSA9IG1pbigyNTUsIHBpeGVsc1tpICsg
Ml0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZVN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9z
dXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KHBpeGVscy5nZXQoKSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHdpZHRoLCBoZWlnaHQs
IHdpZHRoICogNCkpOworCisgICAgICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3
U3VyZmFjZVRvQ29udGV4dChpbWFnZVN1cmZhY2UuZ2V0KCksIHRhcmdldFJlY3QsIEludFJlY3Qo
MCwgMCwgd2lkdGgsIGhlaWdodCksIGNvbnRleHQpOworCisgICAgICAgIGNvbnRleHQtPnJlc3Rv
cmUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIFVTRShURVhUVVJFX01BUFBFUl9H
TCkKICAgICBUZXh0dXJlTWFwcGVyR0wqIHRleG1hcEdMID0gc3RhdGljX2Nhc3Q8VGV4dHVyZU1h
cHBlckdMKj4odGV4dHVyZU1hcHBlcik7CiAgICAgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBmbGFn
cyA9IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkRmxpcFRleHR1cmUgfCAobV9jb250ZXh0LT5tX2F0
dHJzLmFscGhhID8gVGV4dHVyZU1hcHBlckdMOjpTdXBwb3J0c0JsZW5kaW5nIDogMCk7CiAgICAg
SW50U2l6ZSB0ZXh0dXJlU2l6ZShtX2NvbnRleHQtPm1fY3VycmVudFdpZHRoLCBtX2NvbnRleHQt
Pm1fY3VycmVudEhlaWdodCk7CiAgICAgdGV4bWFwR0wtPmRyYXdUZXh0dXJlKG1fY29udGV4dC0+
bV90ZXh0dXJlLCBmbGFncywgdGV4dHVyZVNpemUsIHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0
eSwgbWFzayk7CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HX0dMKQogfQog
I2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUuaAppbmRleCBmMWRiYTgyLi4xZDRkOGZiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRFByaXZh
dGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUuaApAQCAtNDAsNiArNDAsNyBAQCBwdWJsaWM6CiAgICAgfkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZSgpOwogICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAg
ICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUNvbnRleHQoKTsKKyAgICB2b2lk
IHBhaW50VG9DYW52YXNSZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBpbnQg
aW1hZ2VXaWR0aCwgaW50IGltYWdlSGVpZ2h0LCBjb25zdCBGbG9hdFJlY3QmIGNhbnZhc1JlY3Qs
IFBsYXRmb3JtQ29udGV4dENhaXJvKik7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1
cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2sp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IGE3OGE3NDcuLmZkYWE1MjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTExNTAsMTggKzExNTAsMTggQEAgSW50
ZXJwb2xhdGlvblF1YWxpdHkgR3JhcGhpY3NDb250ZXh0OjppbWFnZUludGVycG9sYXRpb25RdWFs
aXR5KCkgY29uc3QKICNpZiBFTkFCTEUoM0RfUkVOREVSSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQ
RVIpCiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBHcmFwaGljc0NvbnRleHQ6OmdldDNEVHJhbnNmb3Jt
KCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgpOworICAgIC8vIEZJWE1FOiBDYW4gd2UgYXBwcm94aW1hdGUgdGhlIHRyYW5z
Zm9ybWF0aW9uIGJldHRlciB0aGFuIHRoaXM/CisgICAgcmV0dXJuIGdldENUTSgpLnRvVHJhbnNm
b3JtYXRpb25NYXRyaXgoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdDNEVHJh
bnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICBjb25jYXRDVE0odHJhbnNmb3JtLnRvQWZmaW5lVHJhbnNmb3Jt
KCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0M0RUcmFuc2Zvcm0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHNldENUTSh0cmFuc2Zvcm0udG9BZmZpbmVUcmFuc2Zvcm0oKSk7CiB9CiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVy
ZU1hcHBlckNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L1RleHR1cmVNYXBwZXJDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3
Mjk1MTEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vVGV4dHVyZU1hcHBlckNhaXJvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJDYWlyby5oIgotCi0jaW5j
bHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgQml0bWFwVGV4dHVyZUNhaXJvOjpkZXN0cm95KCkK
LXsKLSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICBkZWxldGUgbV9jb250ZXh0OwotfQotCi0K
LUludFNpemUgQml0bWFwVGV4dHVyZUNhaXJvOjpzaXplKCkgY29uc3QKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBJbnRTaXplKCk7Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVy
ZUNhaXJvOjpyZXNldChjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGlzT3BhcXVlKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBCaXRtYXBU
ZXh0dXJlQ2Fpcm86OmJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIG1fY29udGV4dDsKLX0KLQotdm9pZCBCaXRt
YXBUZXh0dXJlQ2Fpcm86OmVuZFBhaW50KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIEJpdG1hcFRleHR1cmVDYWlybzo6dXBkYXRlQ29udGVudHMoUGl4ZWxGb3JtYXQgcGl4
ZWxGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIHZvaWQqIGJpdHMpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotCi1ib29sIEJpdG1hcFRleHR1cmVDYWlybzo6c2F2ZShjb25zdCBT
dHJpbmcmIHBhdGgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZUNhaXJvOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2Uq
IGltYWdlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBl
ckNhaXJvOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgY29u
c3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
VGV4dHVyZU1hcHBlckNhaXJvOjplbmRDbGlwKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi1JbnRTaXplIFRleHR1cmVNYXBwZXJDYWlybzo6dmlld3BvcnRTaXplKCkgY29uc3QKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0KLVRleHR1cmVNYXBwZXJDYWlybzo6VGV4dHVy
ZU1hcHBlckNhaXJvKCkKLSAgICA6IG1fY29udGV4dCgwKQotewotfQotCi12b2lkIFRleHR1cmVN
YXBwZXJDYWlybzo6c2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkK
LXsKLSAgICBtX2NvbnRleHQgPSBjb250ZXh0OwotfQotCi1HcmFwaGljc0NvbnRleHQqIFRleHR1
cmVNYXBwZXJDYWlybzo6Z3JhcGhpY3NDb250ZXh0KCkKLXsKLSAgICByZXR1cm4gbV9jb250ZXh0
OwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJDYWlybzo6YmluZFN1cmZhY2UoQml0bWFwVGV4dHVy
ZSogdGV4dHVyZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0KLXZvaWQgVGV4dHVy
ZU1hcHBlckNhaXJvOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4g
VGV4dHVyZU1hcHBlckNhaXJvOjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEJpdG1hcFRleHR1cmVDYWlybygpKTsKLX0KLQotQml0bWFwVGV4dHVyZUNhaXJvOjpC
aXRtYXBUZXh0dXJlQ2Fpcm8oKQotICAgIDogbV9jb250ZXh0KDApCi0gICAgLCBtX3N1cmZhY2Uo
MCkKLXsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyQ2Fpcm86OmJlZ2luUGFpbnRpbmcoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlckNhaXJvOjplbmRQ
YWludGluZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RleHR1cmVNYXBwZXJDYWly
by5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBl
ckNhaXJvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzYTA5NmYuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4dHVyZU1hcHBl
ckNhaXJvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQot
ICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgVGV4dHVyZU1hcHBlckNh
aXJvX2gKLSNkZWZpbmUgVGV4dHVyZU1hcHBlckNhaXJvX2gKLQotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAi
UmVmUHRyQ2Fpcm8uaCIKLSNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlci5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEJpdG1hcFRleHR1cmVDYWlybyA6IHB1YmxpYyBCaXRt
YXBUZXh0dXJlIHsKLSAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlckNhaXJvOwotcHVibGlj
OgotICAgIEJpdG1hcFRleHR1cmVDYWlybygpOwotICAgIH5CaXRtYXBUZXh0dXJlQ2Fpcm8oKSB7
IGRlc3Ryb3koKTsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7Ci0gICAgdmlydHVhbCBJ
bnRTaXplIHNpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoY29uc3QgSW50U2l6
ZSYsIGJvb2wgb3BhcXVlKTsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBi
ZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7Ci0gICAgdmlydHVhbCB2b2lkIGVu
ZFBhaW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwot
ICAgIHZpcnR1YWwgYm9vbCBzYXZlKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0gICAgdmlydHVhbCBi
b29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAhbV9zdXJmYWNlO30KLSAgICBJbnRSZWN0IHNv
dXJjZVJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KDAsIDAsIGNvbnRlbnRTaXplKCkud2lk
dGgoKSwgY29udGVudFNpemUoKS5oZWlnaHQoKSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFjaygp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCB1bnBhY2soKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNQ
YWNrZWQoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRl
bnRzKFBpeGVsRm9ybWF0LCBjb25zdCBJbnRSZWN0Jiwgdm9pZCogYml0cyk7Ci0KLSAgICBjYWly
b190KiBjcigpIHsgcmV0dXJuIG1fY29udGV4dC0+Y3IoKTsgfQotCi1wcml2YXRlOgotICAgIHZv
aWQgY2xlYXJSZWN0KGNvbnN0IEludFJlY3QmKTsKLQotICAgIFBsYXRmb3JtQ29udGV4dENhaXJv
KiBtX2NvbnRleHQ7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNlOwotfTsK
LQotY2xhc3MgVGV4dHVyZU1hcHBlckNhaXJvIDogcHVibGljIFRleHR1cmVNYXBwZXIgewotcHVi
bGljOgotICAgIFRleHR1cmVNYXBwZXJDYWlybygpOwotCi0gICAgdmlydHVhbCB2b2lkIGRyYXdU
ZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3Qs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFw
VGV4dHVyZSogbWFza1RleHR1cmUpOwotICAgIHZpcnR1YWwgdm9pZCBiaW5kU3VyZmFjZShCaXRt
YXBUZXh0dXJlKiBzdXJmYWNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5DbGlwKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lk
IGVuZENsaXAoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNz
Q29udGV4dCopOwotICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQo
KTsKLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9vdCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRl
eHR1cmUoKTsKLSAgICB2aXJ0dWFsIEludFNpemUgdmlld3BvcnRTaXplKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCB2b2lkIGJlZ2luUGFpbnRpbmcoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnRp
bmcoKTsKLQotICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVNYXBwZXI+IGNyZWF0ZSgpIHsg
cmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyQ2Fpcm8pOyB9Ci1wcml2YXRlOgotICAg
IEdyYXBoaWNzQ29udGV4dCogbV9jb250ZXh0OwotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlQ2Fp
cm8+IG1fdGV4dHVyZTsKLX07Ci0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlcklt
YWdlQnVmZmVyLmNwcAppbmRleCAyMDhiNTM0Li43OTQ3MGIzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckltYWdlQnVmZmVyLmNwcApAQCAtMzUsNiArMzUsMTMgQEAgdm9pZCBCaXRtYXBUZXh0
dXJlSW1hZ2VCdWZmZXI6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqIGRhdGEsIGNvbnN0IElu
dFJlY3QmIHQKICAgICBwYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBv
c2l0aW9uTW9kZV9Tb3VyY2UpOwogICAgIHBhaW50ZXItPmRyYXdJbWFnZSh0YXJnZXRSZWN0LCBp
bWFnZSwgSW50UmVjdChzb3VyY2VPZmZzZXQsIHRhcmdldFJlY3Quc2l6ZSgpKSk7CiAgICAgcGFp
bnRlci0+cmVzdG9yZSgpOworI2VsaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgUmVmUHRyPGNhaXJv
X3N1cmZhY2VfdD4gc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRl
X2Zvcl9kYXRhKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihkYXRhKCkpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJ5dGVzUGVyTGluZSkpOworICAgIG1faW1hZ2UtPmNvbnRleHQo
KS0+cGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJmYWNlVG9Db250ZXh0KHN1cmZhY2UuZ2V0KCks
IHRhcmdldFJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSW50UmVjdChzb3VyY2VPZmZzZXQsIHRhcmdldFJlY3Quc2l6
ZSgpKSwgbV9pbWFnZS0+Y29udGV4dCgpKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5k
ZXggMjBjMGNhMS4uYzBiMzhmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisy
MDEyLTA1LTI4ICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAg
ICAgIFtHVEtdIEFkZCBUZXh0dXJlTWFwcGVyIEltYWdlQnVmZmVyIHN1cHBvcnQgYXMgYSBmYWxs
YmFjayBmcm9tIHRoZSBoYXJkd2FyZSBhY2NlbGVyYXRlZCBwYXRoCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzYzNAorCisgICAgICAgIEFkZCB0aGUg
bmV3IGdyYXBoaWNzIGxheWVyIGNsaWVudCB0aGF0IHVzZXMgY2Fpcm8gdG8gcmVuZGVyIHRoZQor
ICAgICAgICBjb21wb3NpdGlvbi4gVGhlIGNhaXJvIHRyYW5zZm9ybWF0aW9ucyBkbyBub3Qgc3Vw
cG9ydCBwZXJzcGVjdGl2ZQorICAgICAgICBzbyBpbiBwZXJzcGVjdGl2ZSBjYXNlcyB3ZSBoYXZl
IGp1c3QgYSByZXByZXNlbnRhdGlvbiBub3QgdGhlIHJlYWwKKyAgICAgICAgcGVyc3BlY3RpdmUg
dHJhbnNmb3JtYXRpb24uCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGEgbmV3IGltcGxlbWVu
dGF0aW9uIG9mIGFscmVhZHkgdGVzdGVkIGNhc2VzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaDoKKyAgICAgICAgKEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9B
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dENhaXJvLmNwcDogQWRkZWQuCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2hy
b21lQ2xpZW50OjppbnZhbGlkYXRlV2lkZ2V0UmVjdCk6IFdlIG5lZWQgdG8KKyAgICAgICAgaW52
YWxpZGF0ZSB0aGUgd2lkZ2V0IGluIHRoaXMgY2FzZSBiZWNhdXNlIHdlIGRvIG5vdCBkaXJlY3Rs
eQorICAgICAgICByZW5kZXIgdG8gYSB0ZXh0dXJlIGJ1dCB0byB0aGUgd2lkZ2V0IHN1cmZhY2Uu
CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudDo6cGFpbnQpOiBXZSBjYW4gbm90IHJlbmRl
ciBoZXJlLCB3ZSBoYXZlIHRvCisgICAgICAgIGludmFsaWRhdGUgYW5kIHdhaXQgZm9yIHRoZSB3
aWRnZXQgcmVuZGVyaW5nLgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKKyAg
ICAgICAgKHdlYmtpdF93ZWJfdmlld19kcmF3KTogSW4gdGhpcyBjYXNlIHRoZSByZW5kZXJMYXll
cnNUb1dpbmRvdworICAgICAgICByZXF1aXJlcyB0aGUgZ3JhcGhpY3MgY29udGV4dCB1c2VkIHRv
IHJlbmRlciBpbiB0aGUgd2luZG93LgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3JlYWxpemUp
OiBTbWFsbCBjbGVhbnVwIG9mIHRoZSBwcml2IHZhcmlhYmxlCisgICAgICAgIGRlZmluaXRpb24u
CisKIDIwMTItMDUtMDcgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+
CiAKICAgICAgICAgQ2FsbGluZyBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIGNhdXNlcyBh
c3NlcnRpb24gZmFpbHVyZTogbV92ZXJpZmllci5pc1NhZmVUb1VzZSgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1h
a2VmaWxlLmFtCmluZGV4IDJkNWFkMGEuLmYyNGM3YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvZ3RrL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxl
LmFtCkBAIC0xNzgsNiArMTc4LDcgQEAgd2Via2l0Z3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Lmgg
XAogCVNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdDb250ZXh0Q2x1dHRlci5jcHAgXAogCVNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0R0wuY3BwIFwKKwlTb3VyY2UvV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dENhaXJvLmNwcCBc
CiAJU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5j
cHAgXAogCVNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5j
cHAgXAogCVNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5o
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oCmluZGV4IDNmYjFmZTMuLjI0YTYxNGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaApAQCAtMjcsOCArMjcsMTAgQEAKICNp
bmNsdWRlICJ3ZWJraXR3ZWJ2aWV3LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAor
I2lmIFVTRShURVhUVVJFX01BUFBFUikKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAjaW5j
bHVkZSAiR0xDb250ZXh0LmgiCisjZW5kaWYKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTGF5ZXIu
aCIKICNlbmRpZgogCkBAIC01MSw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN5bmNMYXll
cnNUaW1lb3V0KCk7CiAgICAgdm9pZCBzeW5jTGF5ZXJzTm93KCk7CiAgICAgdm9pZCByZXNpemVS
b290TGF5ZXIoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotICAgIGJvb2wgcmVuZGVyTGF5ZXJz
VG9XaW5kb3coY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOworICAgIGJvb2wgcmVu
ZGVyTGF5ZXJzVG9XaW5kb3coY2Fpcm9fdCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBS
ZWN0KTsKICAgICBib29sIGVuYWJsZWQoKTsKIAogICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQK
QEAgLTY4LDEzICs3MCwxNSBAQCBwcml2YXRlOgogI2lmIFVTRShDTFVUVEVSKQogICAgIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqIG1fcm9vdEdyYXBoaWNzTGF5ZXI7CiAgICAgR3RrV2lkZ2V0KiBt
X3Jvb3RMYXllckVtYmVkZGVyOwotI2VsaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotICAgIFdl
YkNvcmU6OkdMQ29udGV4dCogZ2xDb250ZXh0KCk7CisjZWxpZiBVU0UoVEVYVFVSRV9NQVBQRVIp
CiAgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiBtX3Jvb3RUZXh0dXJlTWFwcGVyTGF5
ZXI7CiAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdEdyYXBoaWNzTGF5
ZXI7CiAgICAgT3duUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsK
KyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisgICAgV2ViQ29yZTo6R0xDb250ZXh0KiBnbENv
bnRleHQoKTsKICAgICBPd25QdHI8V2ViQ29yZTo6R0xDb250ZXh0PiBtX2NvbnRleHQ7CiAjZW5k
aWYKKyNlbmRpZgogCiAgICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQoV2ViS2l0V2Vi
VmlldyopOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Q2Fpcm8uY3BwIGIvU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHRDYWlyby5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFkZDRiZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmdDb250ZXh0Q2Fpcm8uY3BwCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIElnYWxpYSwgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250
ZXh0LmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJF
X01BUFBFUl9DQUlSTykKKworI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAi
Q2hyb21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50R3RrLmgiCisjaW5jbHVkZSAiRnJhbWUu
aCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWly
by5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJMYXllci5oIgorI2luY2x1ZGUgIndlYmtpdHdlYnZpZXdwcml2YXRlLmgiCisj
aW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSA8Z3RrL2d0
ay5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQorICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCisg
ICAgLCBtX3N5bmNUaW1lckNhbGxiYWNrSWQoMCkKKyAgICAsIG1fcm9vdFRleHR1cmVNYXBwZXJM
YXllcigwKQoreworfQorCitBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6fkFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0KCkKK3sKKyAgICBpZiAobV9zeW5jVGltZXJDYWxsYmFja0lk
KQorICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9zeW5jVGltZXJDYWxsYmFja0lkKTsKK30KKwor
Ym9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6ZW5hYmxlZCgpCit7CisgICAgcmV0
dXJuIG1fcm9vdFRleHR1cmVNYXBwZXJMYXllciAmJiBtX3RleHR1cmVNYXBwZXI7Cit9CisKK2Jv
b2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnJlbmRlckxheWVyc1RvV2luZG93KGNh
aXJvX3QqIGNyLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK3sKKyAgICBpZiAoIWNyIHx8ICFl
bmFibGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdyYXBoaWNzQ29udGV4dCBj
b250ZXh0KGNyKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dCgmY29u
dGV4dCk7CisKKyAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKKyAgICBtX3Jv
b3RUZXh0dXJlTWFwcGVyTGF5ZXItPnBhaW50KCk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRQ
YWludGluZygpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0NvbnRleHQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdy
YXBoaWNzTGF5ZXIpCit7CisgICAgaWYgKCFncmFwaGljc0xheWVyKSB7CisgICAgICAgIG1fcm9v
dEdyYXBoaWNzTGF5ZXIuY2xlYXIoKTsKKyAgICAgICAgbV9yb290VGV4dHVyZU1hcHBlckxheWVy
ID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXIg
PSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7CisgICAgbV9yb290VGV4dHVyZU1hcHBlckxh
eWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290R3JhcGhpY3NMYXllci5nZXQoKSk7Cisg
ICAgbV9yb290R3JhcGhpY3NMYXllci0+YWRkQ2hpbGQoZ3JhcGhpY3NMYXllcik7CisgICAgbV9y
b290R3JhcGhpY3NMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIG1fcm9vdEdyYXBo
aWNzTGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMoZmFsc2UpOworICAgIG1fcm9vdEdyYXBoaWNzTGF5
ZXItPnNldE5lZWRzRGlzcGxheSgpOworICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldFNpemUo
Y29yZShtX3dlYlZpZXcpLT5tYWluRnJhbWUoKS0+dmlldygpLT5mcmFtZVJlY3QoKS5zaXplKCkp
OworCisgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyOjpjcmVh
dGUoKTsKKyAgICBtX3Jvb3RUZXh0dXJlTWFwcGVyTGF5ZXItPnNldFRleHR1cmVNYXBwZXIobV90
ZXh0dXJlTWFwcGVyLmdldCgpKTsKKyAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zeW5jQ29tcG9z
aXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKK30KKwordm9pZCBBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dDo6c2NoZWR1bGVSb290TGF5ZXJSZXBhaW50KGNvbnN0IEludFJlY3QmIHJl
Y3QpCit7CisgICAgaWYgKCFtX3Jvb3RHcmFwaGljc0xheWVyKQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKHJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNl
dE5lZWRzRGlzcGxheSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcm9vdEdyYXBo
aWNzTGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKworICAgIGd0a193aWRnZXRf
cXVldWVfZHJhd19hcmVhKEdUS19XSURHRVQobV93ZWJWaWV3KSwgcmVjdC54KCksIHJlY3QueSgp
LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworfQorCit2b2lkIEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdDb250ZXh0OjpyZXNpemVSb290TGF5ZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sK
KyAgICBpZiAoIW1fcm9vdEdyYXBoaWNzTGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Jv
b3RHcmFwaGljc0xheWVyLT5zZXRTaXplKHNpemUpOworICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXIt
PnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gc3luY0xheWVyc1RpbWVvdXRDYWxsYmFjayhBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dCogY29udGV4dCkKK3sKKyAgICBjb250ZXh0LT5zeW5jTGF5ZXJzVGltZW91dCgpOworICAg
IHJldHVybiBGQUxTRTsKK30KKwordm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6
bWFya0ZvclN5bmMoKQoreworICAgIGlmIChtX3N5bmNUaW1lckNhbGxiYWNrSWQpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIFdlIHVzZSBhIEdMaWIgdGltZXIgYmVjYXVzZSBvdGhlcndpc2Ug
R1RLKyBldmVudCBoYW5kbGluZyBkdXJpbmcKKyAgICAvLyBkcmFnZ2luZyBjYW4gc3RhcnZlIFdl
YkNvcmUgdGltZXJzLCB3aGljaCBoYXZlIGEgbG93ZXIgcHJpb3JpdHkuCisgICAgbV9zeW5jVGlt
ZXJDYWxsYmFja0lkID0gZ190aW1lb3V0X2FkZF9mdWxsKEdES19QUklPUklUWV9FVkVOVFMsIDAs
IHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHN5bmNMYXllcnNUaW1lb3V0Q2FsbGJhY2sp
LCB0aGlzLCAwKTsKK30KKwordm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c3lu
Y0xheWVyc05vdygpCit7CisgICAgaWYgKG1fcm9vdEdyYXBoaWNzTGF5ZXIpCisgICAgICAgIG1f
cm9vdEdyYXBoaWNzTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgp
OworCisgICAgY29yZShtX3dlYlZpZXcpLT5tYWluRnJhbWUoKS0+dmlldygpLT5zeW5jQ29tcG9z
aXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworfQorCit2b2lkIEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdDb250ZXh0OjpzeW5jTGF5ZXJzVGltZW91dCgpCit7CisgICAgbV9zeW5jVGltZXJD
YWxsYmFja0lkID0gMDsKKyAgICBzeW5jTGF5ZXJzTm93KCk7CisgICAgaWYgKCFtX3Jvb3RHcmFw
aGljc0xheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogSW52YWxpZGF0ZSBq
dXN0IHRoZSBhbmltYXRpb25zIHJlY3RhbmdsZXMuCisgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3
KEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisKKyAgICBpZiAodG9UZXh0dXJlTWFwcGVyTGF5ZXIo
bV9yb290R3JhcGhpY3NMYXllci5nZXQoKSktPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdB
bmltYXRpb25zKCkpCisgICAgICAgIG1fc3luY1RpbWVyQ2FsbGJhY2tJZCA9IGdfdGltZW91dF9h
ZGRfZnVsbChHREtfUFJJT1JJVFlfRVZFTlRTLCAxMDAwLjAgLyA2MC4wLCByZWludGVycHJldF9j
YXN0PEdTb3VyY2VGdW5jPihzeW5jTGF5ZXJzVGltZW91dENhbGxiYWNrKSwgdGhpcywgMCk7Cit9
CisKK3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6Om5vdGlmeUFuaW1hdGlvblN0
YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKQoreworCit9Cit2b2lkIEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojpub3RpZnlTeW5jUmVxdWlyZWQoY29uc3QgR3Jh
cGhpY3NMYXllciopCit7CisKK30KKwordm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4
dDo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYgcmVjdFRv
UGFpbnQpCit7CisgICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5j
cigpOworICAgIGNvcHlSZWN0RnJvbUNhaXJvU3VyZmFjZVRvQ29udGV4dChtX3dlYlZpZXctPnBy
aXYtPmJhY2tpbmdTdG9yZS0+Y2Fpcm9TdXJmYWNlKCksIGNyLCBJbnRTaXplKCksIHJlY3RUb1Bh
aW50KTsKK30KKworYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2hvd0RlYnVn
Qm9yZGVycyhjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnNob3dSZXBhaW50Q291
bnRlcihjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVJfQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4
dENsdXR0ZXIuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHRDbHV0dGVyLmNwcAppbmRleCAwMGExOTFhLi42ZmUwYzM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENv
bXBvc2l0aW5nQ29udGV4dENsdXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Q2x1dHRlci5jcHAKQEAgLTUz
LDcgKzUzLDcgQEAgYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6ZW5hYmxlZCgp
CiAgICAgcmV0dXJuIG1fcm9vdEdyYXBoaWNzTGF5ZXI7CiB9CiAKLWJvb2wgQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHQ6OnJlbmRlckxheWVyc1RvV2luZG93KGNvbnN0IEludFJlY3QmIGNs
aXBSZWN0KQorYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6cmVuZGVyTGF5ZXJz
VG9XaW5kb3coY2Fpcm9fdCosIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQogewogICAgIG5vdElt
cGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQg
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnN5bmNMYXllcnNUaW1lb3V0KCkKICAgICBp
ZiAoIW1fcm9vdEdyYXBoaWNzTGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIHJlbmRlckxh
eWVyc1RvV2luZG93KEludFJlY3QoKSk7CisgICAgcmVuZGVyTGF5ZXJzVG9XaW5kb3coMCwgSW50
UmVjdCgpKTsKIH0KIAogdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6bm90aWZ5
QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIHRp
bWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dEdMLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0R0wuY3BwCmluZGV4IDZiZmRjYjYu
LmU2ZmQyOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0R0wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0R0wuY3BwCkBAIC04
MCw3ICs4MCw3IEBAIEdMQ29udGV4dCogQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6Omds
Q29udGV4dCgpCiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKIH0KIAotYm9vbCBBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dDo6cmVuZGVyTGF5ZXJzVG9XaW5kb3coY29uc3QgSW50UmVj
dCYgY2xpcFJlY3QpCitib29sIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpyZW5kZXJM
YXllcnNUb1dpbmRvdyhjYWlyb190KiwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCiB7CiAgICAg
aWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE4OSw3ICsxODksNyBA
QCB2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzeW5jTGF5ZXJzVGltZW91dCgp
CiAgICAgaWYgKCFtX3Jvb3RHcmFwaGljc0xheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBy
ZW5kZXJMYXllcnNUb1dpbmRvdyhJbnRSZWN0KCkpOworICAgIHJlbmRlckxheWVyc1RvV2luZG93
KDAsIEludFJlY3QoKSk7CiAKICAgICBpZiAodG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290R3Jh
cGhpY3NMYXllci5nZXQoKSktPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25z
KCkpCiAgICAgICAgIG1fc3luY1RpbWVyQ2FsbGJhY2tJZCA9IGdfdGltZW91dF9hZGRfZnVsbChH
REtfUFJJT1JJVFlfRVZFTlRTLCAxMDAwLjAgLyA2MC4wLCByZWludGVycHJldF9jYXN0PEdTb3Vy
Y2VGdW5jPihzeW5jTGF5ZXJzVGltZW91dENhbGxiYWNrKSwgdGhpcywgMCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwIGIv
U291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAppbmRl
eCBkYjc0NWQyLi5mMzA5YmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKQEAgLTU0MSw2ICs1NDEsNyBAQCB2b2lkIENo
cm9tZUNsaWVudDo6aW52YWxpZGF0ZVdpZGdldFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgorCiAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3
X2FyZWEoR1RLX1dJREdFVChtX3dlYlZpZXcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlY3QueCgpLCByZWN0LnkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwpAQCAtNTk1LDcgKzU5Niw3IEBAIHZvaWQgQ2hy
b21lQ2xpZW50OjpwYWludChXZWJDb3JlOjpUaW1lcjxDaHJvbWVDbGllbnQ+KikKIAogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0LT5zeW5jTGF5ZXJzTm93KCk7Ci0gICAgbV93ZWJWaWV3LT5w
cml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC0+cmVuZGVyTGF5ZXJzVG9XaW5kb3co
cmVjdCk7CisgICAgbV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4
dC0+cmVuZGVyTGF5ZXJzVG9XaW5kb3coMCwgcmVjdCk7CiAjZW5kaWYKIAogICAgIG1fZGlydHlS
ZWdpb24gPSBSZWdpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
LmNwcAppbmRleCAyODU0OTAyLi40NmRiMGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnZpZXcuY3BwCkBAIC02NzcsMTAgKzY3Nyw4IEBAIHN0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfd2ViX3ZpZXdfZHJhdyhHdGtXaWRnZXQqIHdpZGdldCwgY2Fpcm9fdCogY3IpCiAgICAg
ICAgIHJldHVybiBGQUxTRTsKIAogICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gV0VC
S0lUX1dFQl9WSUVXKHdpZGdldCktPnByaXY7Ci0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQot
ICAgIGlmIChwcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC0+cmVuZGVyTGF5ZXJz
VG9XaW5kb3coY2xpcFJlY3QpKQorICAgIGlmIChwcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dC0+cmVuZGVyTGF5ZXJzVG9XaW5kb3coY3IsIGNsaXBSZWN0KSkKICAgICAgICAgcmV0
dXJuIEZBTFNFOwotI2VuZGlmCiAKICAgICBjYWlyb19yZWN0YW5nbGVfbGlzdF90KiByZWN0TGlz
dCA9IGNhaXJvX2NvcHlfY2xpcF9yZWN0YW5nbGVfbGlzdChjcik7CiAgICAgaWYgKHJlY3RMaXN0
LT5zdGF0dXMgfHwgIXJlY3RMaXN0LT5udW1fcmVjdGFuZ2xlcykgewotLSAKMS43LjcuNgoK
</data>

          </attachment>
      

    </bug>

</bugzilla>