<?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>78265</bug_id>
          
          <creation_ts>2012-02-09 12:17:14 -0800</creation_ts>
          <short_desc>[chromium] Purge Skia&apos;s GPU texture cache using GL_CHROMIUM_gpu_memory_manager</short_desc>
          <delta_ts>2012-02-24 13:08:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>77155</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michal Mocny">mmocny</reporter>
          <assigned_to name="Michal Mocny">mmocny</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>nduca</cc>
    
    <cc>twiz</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>553400</commentid>
    <comment_count>0</comment_count>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-02-09 12:17:14 -0800</bug_when>
    <thetext>[chromium][not for review] Purge Skia&apos;s GPU texture cache using GL_CHROMIUM_gpu_memory_manager</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553401</commentid>
    <comment_count>1</comment_count>
      <attachid>126346</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-02-09 12:17:30 -0800</bug_when>
    <thetext>Created attachment 126346
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553406</commentid>
    <comment_count>2</comment_count>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-02-09 12:19:27 -0800</bug_when>
    <thetext>*** Bug 78264 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553865</commentid>
    <comment_count>3</comment_count>
      <attachid>126346</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-02-09 23:09:37 -0800</bug_when>
    <thetext>Comment on attachment 126346
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:154
&gt; +    layerTreeHost()-&gt;client()-&gt;addAffectingContext(m_context);

Ok, this looks good. But I&apos;ve had a bit of a brainwave on how to make this cleaner.

CCLayerTreeHost tracks a bool saying &quot;hasAccelerated2DCanvasLayer&quot;

It gets cleared to false in the CCLTh::willCommit function.

This code just says layerTreeHost-&gt;setHasAccelerated2DCanvas(). That function should set the flag to true.

The post commit hook should pass this bool up to the client. Until the post commit hook, nothing should be sent.

In fact, the willCommit hook doesnt&apos; even need to be sent up to the client. Just the didCommit call.

All this &quot;affecting contexts&quot; crap in webview goes away. Remember, there is only 1 CCLayerTreeHost for 1 webviewimpl, and thus, only one compositor context. All you need to know up at webviewimpl is whether or not the webviewimpl has an accelerated canvas2d. If it does, then the shared graphics context affects the webviewimpl&apos;s surface_id.

Remember, accessing the compositor&apos;s graphics context is always unsafe on the main thread. So, WebViewImpl should, in its createCompositorGraphicsContext3D() function, cache the surfaceID of the compositor context before returning the pointer. Just have int m_compositorContextSurfaceId on the WebViewIMpl class. IN the didCommitHook, just pass that surface id down to the shared graphics context code along with the bool indicating whether the webview has a 2d canvas or not. 

The actual shared surface manipulation code should be simple:
  - if the bool is true, add the surface id to the shared surface, if not already added previously
  - if the bool is false, remove the surface id from the shared surface, if added previously

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h:63
&gt; +    virtual void didCommit() = 0;

This should all go away acept for the didCommit function. That function should be alphebetically ordered wrt the other functions.

It should either take a bool indicating whether we had an accelerated 2d canvas, or we should add a bool accessor for that value to the CCLayerTreeHost. I dont care which way we go.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h:139
&gt; +    void willCommit() { m_client-&gt;willCommit(); }

this should clear the new m_hasAccelerated2DCanvas flag. And, please name it consistently. 10 lines up from here, there&apos;s a beginCommitOnImplThread function. Ths should be beginCommit.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h:140
&gt; +    void didCommit() { m_client-&gt;didCommit(); }

how does this differ from comitComplete ? Isn&apos;t it the same thing?

&gt; Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.cpp:39
&gt; +#if USE(SKIA)

These might need to be USE(SKIA) &amp;&amp; PLATFORM(CHROMIUM), check with @twiz or @bsolomon.

&gt; Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.cpp:49
&gt; +        if (allocation.gpuResourceSizeInBytes &amp;&amp; m_context-&gt;grContext())

Er, if the resourcesize in bytes is nonzero, free? Isn&apos;t this backwards?

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:423
&gt; +    WTF::HashSet&lt;WebCore::GraphicsContext3D*&gt;::iterator affectingContextsIterator(m_affectingGraphicsContexts.begin());

this should all go away, see my notes below.

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:427
&gt; +        extensions3DChromium-&gt;removeAffectedSurfaceCHROMIUM(m_client-&gt;surfaceId());

This is all backward. As written, you&apos;re telling the compositor context that it affects itself. That is very wrong.

Rather, this should be saying &quot;hey, shared graphics context, you are no longer affecting the COMPOSITOR context&apos;s surface.&quot; IN code, that looks something like

  SharedSurface::

Except you obviously shouldln&apos;t remove it if you&apos;ve not added it yet.

And, you need to protect against the extension not being present. As written, you&apos;d call this even when the extension isn&apos;t there.

AND, more concerningly, you need to deal with the separation of concerns between the WebViewImpl, which is just a go-between here, and the SharedGraphicsContext, which really is the one that is talking to the graphics context. Ideally, what you&apos;d do is make a method pair on the SharedGraphicsContext called &quot;Add/RemoveAffectedSurface(int surfaceID).&quot; WebViewImpl should call those when the didCommit changes.

You need to call removeAffectedSurfaces when we go from hardware mode back to software mode,also. See didActiveAcceleratedCompositing or something like that in this file. When it goes to false, you need to remove the webview&apos;s surface_id from the sharedgraphicscontext.

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:3131
&gt; +{

See my notes above. WebViewIMpl should track
 bool m_surfaceID &lt;- set and updated in createCompositorGraphicsContext
 bool m_hasRegisteredAsAffectingSharedGraphicsContext &lt;- set to true when we add/remove
This function should check the m_hasRegistered and if that is != the new state, call the right add/remove on the SharedGraphicsContext.

The sharedgraphicscontext should track whether the underlying context supports the extension and if it does, call the right wgc3d methods.

&gt; Source/WebKit/chromium/src/WebViewImpl.h:250
&gt; +    virtual void addAffectingContext(WebCore::GraphicsContext3D*);

If you do keep any methods or variables that use the word affect, please use Affected instead of Affecting so that we are consistent with WGC3D&apos;s terms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554050</commentid>
    <comment_count>4</comment_count>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-02-10 06:19:18 -0800</bug_when>
    <thetext>*** Bug 77573 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554052</commentid>
    <comment_count>5</comment_count>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-02-10 06:21:16 -0800</bug_when>
    <thetext>Moving the last comment by twiz@ from the original patch (77573), so we do not forget:

==========

From an offline discussion with bsalomon, we decided that it would be beneficial if this patch set the texture cache size to 0 upon background notification.

If the cache is only purged to 0 when backgrounded, then the GPU memory footprint could still increase as non-raf rendering events are fired.

This change will require the GL_CHROMIUM_gpu_memory_manager to provide foregrounded notifications as well as backgrounded.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555497</commentid>
    <comment_count>6</comment_count>
      <attachid>126814</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-02-13 13:16:06 -0800</bug_when>
    <thetext>Created attachment 126814
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555503</commentid>
    <comment_count>7</comment_count>
      <attachid>126346</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-02-13 13:22:50 -0800</bug_when>
    <thetext>Comment on attachment 126346
Patch

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

Removed all the affected/affecting context tracking since that extension was removed.

&gt;&gt; Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.cpp:39
&gt;&gt; +#if USE(SKIA)
&gt; 
&gt; These might need to be USE(SKIA) &amp;&amp; PLATFORM(CHROMIUM), check with @twiz or @bsolomon.

@twiz provided this code in his original patch, but I will confirm with him.

&gt;&gt; Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.cpp:49
&gt;&gt; +        if (allocation.gpuResourceSizeInBytes &amp;&amp; m_context-&gt;grContext())
&gt; 
&gt; Er, if the resourcesize in bytes is nonzero, free? Isn&apos;t this backwards?

Good catch, there was an &quot;== 0&quot; which was a style violation when uploading and I patched it incorrectly

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:427
&gt;&gt; +        extensions3DChromium-&gt;removeAffectedSurfaceCHROMIUM(m_client-&gt;surfaceId());
&gt; 
&gt; This is all backward. As written, you&apos;re telling the compositor context that it affects itself. That is very wrong.
&gt; 
&gt; Rather, this should be saying &quot;hey, shared graphics context, you are no longer affecting the COMPOSITOR context&apos;s surface.&quot; IN code, that looks something like
&gt; 
&gt;   SharedSurface::
&gt; 
&gt; Except you obviously shouldln&apos;t remove it if you&apos;ve not added it yet.
&gt; 
&gt; And, you need to protect against the extension not being present. As written, you&apos;d call this even when the extension isn&apos;t there.
&gt; 
&gt; AND, more concerningly, you need to deal with the separation of concerns between the WebViewImpl, which is just a go-between here, and the SharedGraphicsContext, which really is the one that is talking to the graphics context. Ideally, what you&apos;d do is make a method pair on the SharedGraphicsContext called &quot;Add/RemoveAffectedSurface(int surfaceID).&quot; WebViewImpl should call those when the didCommit changes.
&gt; 
&gt; You need to call removeAffectedSurfaces when we go from hardware mode back to software mode,also. See didActiveAcceleratedCompositing or something like that in this file. When it goes to false, you need to remove the webview&apos;s surface_id from the sharedgraphicscontext.

Since all of this was removed, I won&apos;t go into detail, but it was actually doing what you are describing.  The naming and relationship is confusing and I had pestered @twiz about it too when I first got his patch, but basically the WebViewImpl accepts a list of non-compositor-context (shared contexts in this case) which affect it (thus named Affect-ing-), and later tells them to add/remove _its_ surface id).  Anyway, moot point now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555541</commentid>
    <comment_count>8</comment_count>
      <attachid>126814</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-13 13:46:35 -0800</bug_when>
    <thetext>Comment on attachment 126814
Patch

Attachment 126814 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11505949</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558899</commentid>
    <comment_count>9</comment_count>
      <attachid>126814</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-02-16 21:45:27 -0800</bug_when>
    <thetext>Comment on attachment 126814
Patch

LGTM. Get an official review from @kbr or have @twiz get you to get a review via skia reviewers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559362</commentid>
    <comment_count>10</comment_count>
      <attachid>126814</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-02-17 11:21:13 -0800</bug_when>
    <thetext>Comment on attachment 126814
Patch

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

&gt; Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.cpp:38
&gt; +namespace {

Seems a bit weird to have an unnamed namespace inside a named one.  Did you perhaps want this outside the WebCore namespace above?

&gt; Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.cpp:80
&gt; +#if USE(SKIA)
&gt; +    static bool memoryAllocationCallbackInititalized = false;
&gt; +    if (!memoryAllocationCallbackInititalized &amp;&amp; context) {
&gt; +        memoryAllocationCallbackInititalized = true;
&gt; +        Extensions3DChromium* extensions3DChromium = static_cast&lt;Extensions3DChromium*&gt;(context-&gt;getExtensions());
&gt; +        if (extensions3DChromium-&gt;supports(&quot;GL_CHROMIUM_gpu_memory_manager&quot;))
&gt; +            extensions3DChromium-&gt;setGpuMemoryAllocationChangedCallbackCHROMIUM(adoptPtr(new GrMemoryAllocationChangedCallback(context)));
&gt; +    }
&gt; +#endif

Since the GrContext is actually owned by the GraphicsContext3DPrivate, I&apos;d prefer that this callback was also owned by GraphicsContext3DPrivate as well.  This would future-proof it against use of the GrContext by other users of GraphicsContext3D (e.g., when I add a new context to fix https://bugs.webkit.org/show_bug.cgi?id=78139).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559456</commentid>
    <comment_count>11</comment_count>
      <attachid>127638</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-02-17 13:04:58 -0800</bug_when>
    <thetext>Created attachment 127638
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559457</commentid>
    <comment_count>12</comment_count>
      <attachid>126814</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-02-17 13:05:53 -0800</bug_when>
    <thetext>Comment on attachment 126814
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.cpp:80
&gt;&gt; +#endif
&gt; 
&gt; Since the GrContext is actually owned by the GraphicsContext3DPrivate, I&apos;d prefer that this callback was also owned by GraphicsContext3DPrivate as well.  This would future-proof it against use of the GrContext by other users of GraphicsContext3D (e.g., when I add a new context to fix https://bugs.webkit.org/show_bug.cgi?id=78139).

Done. This is an excellent suggestion, it also clean things up a bit.  I hope my change is what you had in mind.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559465</commentid>
    <comment_count>13</comment_count>
      <attachid>127638</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-02-17 13:18:45 -0800</bug_when>
    <thetext>Comment on attachment 127638
Patch

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

&gt; Source/WebKit/chromium/src/GraphicsContext3DPrivate.h:58
&gt; +#if USE(SKIA)
&gt; +class GrMemoryAllocationChangedCallback;
&gt; +#endif

Does this still need to be in the header file?  Or can it be in the .cpp as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559487</commentid>
    <comment_count>14</comment_count>
      <attachid>127644</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-02-17 13:37:27 -0800</bug_when>
    <thetext>Created attachment 127644
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559489</commentid>
    <comment_count>15</comment_count>
      <attachid>127638</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-02-17 13:38:21 -0800</bug_when>
    <thetext>Comment on attachment 127638
Patch

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

&gt;&gt; Source/WebKit/chromium/src/GraphicsContext3DPrivate.h:58
&gt;&gt; +#endif
&gt; 
&gt; Does this still need to be in the header file?  Or can it be in the .cpp as well?

It isn&apos;t.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559505</commentid>
    <comment_count>16</comment_count>
      <attachid>127644</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-02-17 13:52:14 -0800</bug_when>
    <thetext>Comment on attachment 127644
Patch

Looks great.  Thanks for the changes.  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564555</commentid>
    <comment_count>17</comment_count>
      <attachid>127644</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-24 12:39:34 -0800</bug_when>
    <thetext>Comment on attachment 127644
Patch

Rejecting attachment 127644 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
urce/WebKit/chromium/third_party/skia/third_party/glu --revision 3230 --non-interactive --force --accept theirs-conflict --ignore-externals&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
45&gt;At revision 3230.

________ running &apos;/usr/bin/python tools/clang/scripts/update.py --mac-only&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;

________ running &apos;/usr/bin/python gyp_webkit&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
Updating webkit projects from gyp files...

Full output: http://queues.webkit.org/results/11629112</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564566</commentid>
    <comment_count>18</comment_count>
      <attachid>128788</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-02-24 12:50:21 -0800</bug_when>
    <thetext>Created attachment 128788
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564569</commentid>
    <comment_count>19</comment_count>
      <attachid>128788</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-24 13:08:16 -0800</bug_when>
    <thetext>Comment on attachment 128788
Patch

Clearing flags on attachment: 128788

Committed r108840: &lt;http://trac.webkit.org/changeset/108840&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564570</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-24 13:08:22 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126346</attachid>
            <date>2012-02-09 12:17:30 -0800</date>
            <delta_ts>2012-02-13 13:22:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78265-20120209151727.patch</filename>
            <type>text/plain</type>
            <size>13775</size>
            <attacher name="Michal Mocny">mmocny</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9t
aXVtLmNwcAppbmRleCAxNGZlMzVhNTgwNWY2ZmQwN2YzMzc0MzRlZjQ1OTVmNDc5NTQ3NzYwLi5m
MTBiMGEyZGE1YzFkNTRhNzc5YmQ2ZjgxZjc1MmZkZjJjMTI5ZGU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTE1MSw2ICsxNTEsOCBAQCB2b2lkIENhbnZhczJE
TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dAogCiB2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNU
byhDQ0xheWVySW1wbCogbGF5ZXIpCiB7CisgICAgbGF5ZXJUcmVlSG9zdCgpLT5jbGllbnQoKS0+
YWRkQWZmZWN0aW5nQ29udGV4dChtX2NvbnRleHQpOworCiAgICAgQ2FudmFzTGF5ZXJDaHJvbWl1
bTo6cHVzaFByb3BlcnRpZXNUbyhsYXllcik7CiAKICAgICBDQ0NhbnZhc0xheWVySW1wbCogY2Fu
dmFzTGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ0NhbnZhc0xheWVySW1wbCo+KGxheWVyKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lv
bnMzRENocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9FeHRlbnNpb25zM0RDaHJvbWl1bS5oCmluZGV4IDkyYjRmNDU4NjcxM2Q5Njc5Y2UxMjIyOThh
ZjNkODMwNjJmYThmNTkuLjRlMmVkODI3NTYxZWFhZjg3ZTMxNTQ1ZGE2ZWM5OTEyOGI3ZTJjZmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0V4
dGVuc2lvbnMzRENocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRXh0ZW5zaW9uczNEQ2hyb21pdW0uaApAQCAtMzAsNiArMzAsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOwogY2xhc3MgSW1hZ2VCdWZmZXI7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmgKaW5kZXggZTgyZjI5ODMwNDdlZmNiMTNhMDk5ZjlhZGI3NTJmMmIxOGFl
ZjUxNy4uNWFiNTIwMTcxOGEzYmNkZWQ0OGEyMTJhMWNmM2U2MjZmZWQ1NzM2NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTU4LDYgKzU4LDkgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0QW5kRHJhd0ZyYW1lKCkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhZGRB
ZmZlY3RpbmdDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCB3aWxsQ29tbWl0KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXQoKSA9IDA7CiAK
ICAgICAvLyBVc2VkIG9ubHkgaW4gdGhlIHNpbmdsZS10aHJlYWRlZCBwYXRoLgogICAgIHZpcnR1
YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpID0gMDsKQEAgLTEzMyw2ICsxMzYsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpOwog
ICAgIHZvaWQgZGlkQ29tbWl0QW5kRHJhd0ZyYW1lKCkgeyBtX2NsaWVudC0+ZGlkQ29tbWl0QW5k
RHJhd0ZyYW1lKCk7IH0KICAgICB2b2lkIGRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKSB7IG1fY2xp
ZW50LT5kaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCk7IH0KKyAgICB2b2lkIHdpbGxDb21taXQoKSB7
IG1fY2xpZW50LT53aWxsQ29tbWl0KCk7IH0KKyAgICB2b2lkIGRpZENvbW1pdCgpIHsgbV9jbGll
bnQtPmRpZENvbW1pdCgpOyB9CiAgICAgdm9pZCBkZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBs
VGhyZWFkKFRleHR1cmVBbGxvY2F0b3IqKTsKIAogICAgIENDTGF5ZXJUcmVlSG9zdENsaWVudCog
Y2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJl
YWRQcm94eS5jcHAKaW5kZXggMmU0OGUxMGY1ZTVjYzcwMjQ4YTUzODQ0OWRkNWU0MjhhYTJlODgy
ZS4uODM5MzMyNWUyYWQxMWMwN2FkODUxMTFmNTY5MGM2MzFmODQyMzhhNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJl
YWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKQEAgLTI5MiwxMCArMjkyLDE0IEBAIGJvb2wg
Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tbWl0SWZOZWVkZWQoKQogewogICAgIEFTU0VSVChDQ1By
b3h5Ojppc01haW5UaHJlYWQoKSk7CiAKLSAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRl
TGF5ZXJzKCkpCisgICAgbV9sYXllclRyZWVIb3N0LT53aWxsQ29tbWl0KCk7CisgICAgaWYgKCFt
X2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycygpKSB7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC0+ZGlkQ29tbWl0KCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBkb0Nv
bW1pdCgpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlkQ29tbWl0KCk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKaW5kZXggNGU0MTYyMDQxZjg2NmVi
MjhiNjBjOGE1ODYyYzY1MjY1ZDI2N2FhNi4uZjgxYjJkYTQzZGMzNWFjMTk4NWYyYzU2NWQ4NGM5
NDRmNWUxMThiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKQEAgLTkzLDYgKzkzLDgg
QEAgYm9vbCBDQ1RocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMs
IGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAg
ICBtX2xheWVyVHJlZUhvc3QtPndpbGxDb21taXQoKTsKKwogICAgIC8vIElmIGEgY29tbWl0IGlz
IHBlbmRpbmcsIHBlcmZvcm0gdGhlIGNvbW1pdCBmaXJzdC4KICAgICBpZiAobV9jb21taXRSZXF1
ZXN0ZWQpICB7CiAgICAgICAgIC8vIFRoaXMgYml0IG9mIGNvZGUgaXMgdWdsaWVyIHRoYW4gaXQg
c2hvdWxkIGJlIGJlY2F1c2UgcmV0dXJuaW5nCkBAIC0xMTgsNiArMTIwLDcgQEAgYm9vbCBDQ1Ro
cmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiAgICAgQ0NQcm94eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1Ro
cmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OnJlcXVlc3RSZWFkYmFja09uSW1wbFRocmVh
ZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmcmVxdWVzdCkpKTsKICAgICByZXF1ZXN0LmNvbXBs
ZXRpb24ud2FpdCgpOwogCisgICAgbV9sYXllclRyZWVIb3N0LT5kaWRDb21taXQoKTsKICAgICBy
ZXR1cm4gcmVxdWVzdC5zdWNjZXNzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNw
cAppbmRleCBhNzczNDVjYWE3NzdhOWJjOWIyZDNhNTI4ODU2NTczNDI4NmJmZTEzLi44MjI2MDEw
YjhjZWY4YzU1ZGNiYjUzNzdkMjNjM2ExYWY1YTNjNDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0Nv
bnRleHQzRC5jcHAKQEAgLTI1LDExICsyNSwzOCBAQAogCiAKICNpbmNsdWRlICJjb25maWcuaCIK
LQogI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCiAKKyNpbmNsdWRlICJFeHRl
bnNpb25zM0RDaHJvbWl1bS5oIgorI2lmIFVTRShTS0lBKQorI2luY2x1ZGUgIkdyQ29udGV4dC5o
IgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorbmFtZXNwYWNlIHsKKworI2lmIFVT
RShTS0lBKQorY2xhc3MgR3JNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrIDogcHVibGlj
IEV4dGVuc2lvbnMzRENocm9taXVtOjpHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNr
Q0hST01JVU0geworcHVibGljOgorICAgIEdyTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFj
ayhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4
dCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIG9uR3B1TWVtb3J5QWxsb2NhdGlv
bkNoYW5nZWQoY29uc3QgRXh0ZW5zaW9uczNEQ2hyb21pdW06OkdwdU1lbW9yeUFsbG9jYXRpb25D
SFJPTUlVTSYgYWxsb2NhdGlvbikKKyAgICB7CisgICAgICAgIGlmIChhbGxvY2F0aW9uLmdwdVJl
c291cmNlU2l6ZUluQnl0ZXMgJiYgbV9jb250ZXh0LT5nckNvbnRleHQoKSkKKyAgICAgICAgICAg
IG1fY29udGV4dC0+Z3JDb250ZXh0KCktPmZyZWVHcHVSZXNvdXJjZXMoKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKK307CisjZW5kaWYKKwor
fQorCiBHcmFwaGljc0NvbnRleHQzRCogU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmdldCgpCiB7
CiAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlczsKQEAgLTQxLDgg
KzY4LDE2IEBAIEdyYXBoaWNzQ29udGV4dDNEKiBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0
KCkKICAgICBzdGF0aWMgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlKGF0dHJpYnV0ZXMsIDApLmxlYWtSZWYoKTsKICAgICBpZiAoY29udGV4dCAm
JiAhY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIGNvbnRleHQgPSAwOwor
I2lmIFVTRShTS0lBKQorICAgIHN0YXRpYyBib29sIG1lbW9yeUFsbG9jYXRpb25DYWxsYmFja0lu
aXRpdGFsaXplZCA9IGZhbHNlOworICAgIGlmICghbWVtb3J5QWxsb2NhdGlvbkNhbGxiYWNrSW5p
dGl0YWxpemVkICYmIGNvbnRleHQpIHsKKyAgICAgICAgbWVtb3J5QWxsb2NhdGlvbkNhbGxiYWNr
SW5pdGl0YWxpemVkID0gdHJ1ZTsKKyAgICAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVu
c2lvbnMzRENocm9taXVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihjb250
ZXh0LT5nZXRFeHRlbnNpb25zKCkpOworICAgICAgICBpZiAoZXh0ZW5zaW9uczNEQ2hyb21pdW0t
PnN1cHBvcnRzKCJHTF9DSFJPTUlVTV9ncHVfbWVtb3J5X21hbmFnZXIiKSkKKyAgICAgICAgICAg
IGV4dGVuc2lvbnMzRENocm9taXVtLT5zZXRHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxi
YWNrQ0hST01JVU0oYWRvcHRQdHIobmV3IEdyTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFj
ayhjb250ZXh0KSkpOworICAgIH0KKyNlbmRpZgogICAgIHJldHVybiBjb250ZXh0OwogfQogCiB9
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZp
ZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJ
bXBsLmNwcAppbmRleCA5ODE0NzcxMTg5YmY2OWQ3YzhkNTM0ODdjMjQ5YWYyMGMxMDlkM2QxLi40
NDQzYjVjZmE0ZjI3N2JhMTMyYTM0NWZmMzc1YzA1MWE3NWI1NjIzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwCkBAIC0xMTMs
NiArMTEzLDE4IEBAIHZvaWQgV2ViTGF5ZXJUcmVlVmlld0ltcGw6OmRpZENvbXBsZXRlU3dhcEJ1
ZmZlcnMoKQogICAgIC8vIEZJWE1FOiByb3V0ZSB0aGlzIHVwIHRvIHRoZSBXZWJMYXllclRyZWVW
aWV3IGNsaWVudAogfQogCit2b2lkIFdlYkxheWVyVHJlZVZpZXdJbXBsOjphZGRBZmZlY3RpbmdD
b250ZXh0KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQoreworfQorCit2b2lk
IFdlYkxheWVyVHJlZVZpZXdJbXBsOjp3aWxsQ29tbWl0KCkKK3sKK30KKwordm9pZCBXZWJMYXll
clRyZWVWaWV3SW1wbDo6ZGlkQ29tbWl0KCkKK3sKK30KKwogdm9pZCBXZWJMYXllclRyZWVWaWV3
SW1wbDo6ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKQogewogICAgIGlm
IChtX2NsaWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxh
eWVyVHJlZVZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRy
ZWVWaWV3SW1wbC5oCmluZGV4IDU4MGU5YWY4NDM4NTk0MjU4OTE0ZGIwZGM4OGExMWU3ODVlMTE3
ZjAuLjY4MTJkYmQ0OWMwNjg1ZmJmZWIxZTgxOTc3Y2I2MzU0Y2I3NDU5NDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmgKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuaApAQCAtMzAs
NiArMzAsMTAgQEAKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgogCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFwaGljc0Nv
bnRleHQzRDsKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJMYXllcjsKIGNsYXNz
IFdlYkxheWVyVHJlZVZpZXdDbGllbnQ7CkBAIC00OCw2ICs1Miw5IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCB2b2lkIGRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2Vzcyk7CiAg
ICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdEFuZERyYXdGcmFtZSgpOwogICAgIHZpcnR1YWwgdm9p
ZCBkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCk7CisgICAgdmlydHVhbCB2b2lkIGFkZEFmZmVjdGlu
Z0NvbnRleHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0QqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
d2lsbENvbW1pdCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXQoKTsKIAogICAgIC8vIE9u
bHkgdXNlZCBpbiB0aGUgc2luZ2xlIHRocmVhZGVkIHBhdGguCiAgICAgdmlydHVhbCB2b2lkIHNj
aGVkdWxlQ29tcG9zaXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5jcHAKaW5kZXggYTA1ZTk4OTIwN2UzOTE3MzMyMWEwZTcxY2YzNjQ1M2Q2YTNhMzVkZC4uM2Uw
Y2ZjYTlkNDIxOTgxOTRhMDFhNjFkNDU0OTZjOTk4NmRlNzQyNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtNDE5LDYgKzQxOSwxNCBAQCBXZWJWaWV3
SW1wbDo6V2ViVmlld0ltcGwoV2ViVmlld0NsaWVudCogY2xpZW50KQogCiBXZWJWaWV3SW1wbDo6
fldlYlZpZXdJbXBsKCkKIHsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAg
V1RGOjpIYXNoU2V0PFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEKj46Oml0ZXJhdG9yIGFmZmVj
dGluZ0NvbnRleHRzSXRlcmF0b3IobV9hZmZlY3RpbmdHcmFwaGljc0NvbnRleHRzLmJlZ2luKCkp
OworICAgIFdURjo6SGFzaFNldDxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCo+OjppdGVyYXRv
ciBhZmZlY3RpbmdDb250ZXh0c0VuZChtX2FmZmVjdGluZ0dyYXBoaWNzQ29udGV4dHMuZW5kKCkp
OworICAgIGZvciAoOyBhZmZlY3RpbmdDb250ZXh0c0l0ZXJhdG9yICE9IGFmZmVjdGluZ0NvbnRl
eHRzRW5kOyArK2FmZmVjdGluZ0NvbnRleHRzSXRlcmF0b3IpIHsKKyAgICAgICAgRXh0ZW5zaW9u
czNEQ2hyb21pdW0qIGV4dGVuc2lvbnMzRENocm9taXVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9u
czNEQ2hyb21pdW0qPigoKmFmZmVjdGluZ0NvbnRleHRzSXRlcmF0b3IpLT5nZXRFeHRlbnNpb25z
KCkpOworICAgICAgICBleHRlbnNpb25zM0RDaHJvbWl1bS0+cmVtb3ZlQWZmZWN0ZWRTdXJmYWNl
Q0hST01JVU0obV9jbGllbnQtPnN1cmZhY2VJZCgpKTsKKyAgICB9CisjZW5kaWYKICAgICBBU1NF
UlQoIW1fcGFnZSk7CiB9CiAKQEAgLTMxMDYsNiArMzExNCw0NyBAQCB2b2lkIFdlYlZpZXdJbXBs
OjpzY2hlZHVsZUNvbXBvc2l0ZSgpCiAgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7
CiB9CiAKK3ZvaWQgV2ViVmlld0ltcGw6OmFkZEFmZmVjdGluZ0NvbnRleHQoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCit7CisgICAgbV9hZmZlY3RpbmdHcmFwaGljc0NvbnRl
eHRzLmFkZChjb250ZXh0KTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6d2lsbENvbW1pdCgpCit7
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIG1fcHJldmlvdXNBZmZlY3Rp
bmdHcmFwaGljc0NvbnRleHRzID0gbV9hZmZlY3RpbmdHcmFwaGljc0NvbnRleHRzOworICAgIG1f
YWZmZWN0aW5nR3JhcGhpY3NDb250ZXh0cy5jbGVhcigpOworI2VuZGlmCit9CisKK3ZvaWQgV2Vi
Vmlld0ltcGw6OmRpZENvbW1pdCgpCit7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorICAgIC8vIEZvciBlYWNoIGdyYXBoaWNzIGNvbnRleHQsIGludm9rZSB0aGUgZXh0ZW5zaW9u
CisgICAgV1RGOjpIYXNoU2V0PFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEKj46Oml0ZXJhdG9y
IGl0ZXJhdG9yKG1fYWZmZWN0aW5nR3JhcGhpY3NDb250ZXh0cy5iZWdpbigpKTsKKyAgICBXVEY6
Okhhc2hTZXQ8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0QqPjo6aXRlcmF0b3IgZW5kKG1fYWZm
ZWN0aW5nR3JhcGhpY3NDb250ZXh0cy5lbmQoKSk7CisgICAgZm9yICg7IGl0ZXJhdG9yICE9IGVu
ZDsgKytpdGVyYXRvcikgeworICAgICAgICBpZiAoIW1fcHJldmlvdXNBZmZlY3RpbmdHcmFwaGlj
c0NvbnRleHRzLmNvbnRhaW5zKCppdGVyYXRvcikpIHsKKyAgICAgICAgICAgIC8vIEludm9rZSB0
aGUgZXh0ZW5zaW9uIHRvIHJlZ2lzdGVyIHRoZSBhZmZlY3RpbmcgY29udGV4dCB3aXRoIHRoaXMg
Y29udGV4dC4KKyAgICAgICAgICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNpb25zM0RD
aHJvbWl1bSA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oKCppdGVyYXRvcikt
PmdldEV4dGVuc2lvbnMoKSk7CisgICAgICAgICAgICBleHRlbnNpb25zM0RDaHJvbWl1bS0+YWRk
QWZmZWN0ZWRTdXJmYWNlQ0hST01JVU0obV9jbGllbnQtPnN1cmZhY2VJZCgpKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgcmVtb3ZlIHRoaXMgY29udGV4dCBm
cm9tIHRoZSBwcmV2aW91cyBzZXQsIHNvIHRoYXQgaXQgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBk
aWZmLgorICAgICAgICAgICAgbV9wcmV2aW91c0FmZmVjdGluZ0dyYXBoaWNzQ29udGV4dHMucmVt
b3ZlKCppdGVyYXRvcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpdGVyYXRvciA9IG1fcHJl
dmlvdXNBZmZlY3RpbmdHcmFwaGljc0NvbnRleHRzLmJlZ2luKCk7CisgICAgZW5kID0gbV9wcmV2
aW91c0FmZmVjdGluZ0dyYXBoaWNzQ29udGV4dHMuZW5kKCk7CisgICAgZm9yICg7IGl0ZXJhdG9y
ICE9IGVuZDsgKytpdGVyYXRvcikgeworICAgICAgICAvLyBJbnZva2UgdGhlIGV4dGVuc2lvbiB0
byBkZXJlZ2lzdGVyIHRoZSBuby1sb25nZXIgYWZmZWN0aW5nIGNvbnRleHRzIHdpdGggdGhpcyBj
b250ZXh0LgorICAgICAgICBFeHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9uczNEQ2hyb21p
dW0gPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KCgqaXRlcmF0b3IpLT5nZXRF
eHRlbnNpb25zKCkpOworICAgICAgICBleHRlbnNpb25zM0RDaHJvbWl1bS0+cmVtb3ZlQWZmZWN0
ZWRTdXJmYWNlQ0hST01JVU0obV9jbGllbnQtPnN1cmZhY2VJZCgpKTsKKyAgICB9CisgICAgbV9w
cmV2aW91c0FmZmVjdGluZ0dyYXBoaWNzQ29udGV4dHMuY2xlYXIoKTsKKyNlbmRpZgorfQorCiB2
b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVMYXllclRyZWVWaWV3cG9ydCgpCiB7CiAgICAgaWYgKCFw
YWdlKCkgfHwgIW1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0IHx8ICFtX2xheWVyVHJlZUhvc3Qp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCA4MDBkMTgyNTQz
NmYxMzA0OWQ2ZWY5NmU5M2Q2YTM1ZjkxYjI4NDY0Li5hNGUzMDdlZmU2Y2RlOWY5NmEyOWRjMGFj
Zjc3MTM1NjdlYzMyYTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmgKQEAgLTI0Nyw2ICsyNDcsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBs
ZXRlU3dhcEJ1ZmZlcnMoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjcmVhdGVHcmFwaGljc0Nv
bnRleHQoYm9vbCBzdWNjZXNzKTsKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQWZmZWN0aW5nQ29udGV4dChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRCopOworICAgIHZpcnR1YWwgdm9pZCB3aWxsQ29tbWl0KCk7CisgICAgdmlydHVh
bCB2b2lkIGRpZENvbW1pdCgpOwogCiAgICAgLy8gV2ViVmlld0ltcGwKIApAQCAtNjY5LDYgKzY3
MiwxMiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jb21wb3NpdG9yQ3JlYXRpb25GYWlsZWQ7CiAg
ICAgLy8gSWYgdHJ1ZSwgdGhlIGdyYXBoaWNzIGNvbnRleHQgaXMgYmVpbmcgcmVzdG9yZWQuCiAg
ICAgYm9vbCBtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQ7CisKKyAgICAvLyBUaGUgc2V0IG9m
IEdyYXBoaWNzQ29udGV4dDNEIGluc3RhbmNlcyB0aGF0IGFmZmVjdCB0aGlzIGluc3RhbmNlLgor
ICAgIC8vIFR3byBzZXRzIGFyZSBzdG9yZWQuIFRoZSBzZXQgb2YgY29udGV4dHMgZnJvbSB0aGUg
bW9zdCByZWNlbnQgY29tbWl0LAorICAgIC8vIGFuZCB0aGUgc2V0IGZyb20gdGhlIHByZXZpb3Vz
IGNvbW1pdC4KKyAgICBXVEY6Okhhc2hTZXQ8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0QqPiBt
X2FmZmVjdGluZ0dyYXBoaWNzQ29udGV4dHM7CisgICAgV1RGOjpIYXNoU2V0PFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEKj4gbV9wcmV2aW91c0FmZmVjdGluZ0dyYXBoaWNzQ29udGV4dHM7CiAj
ZW5kaWYKICAgICBib29sIG1faGF2ZVdoZWVsRXZlbnRIYW5kbGVyczsKICAgICBzdGF0aWMgY29u
c3QgV2ViSW5wdXRFdmVudCogbV9jdXJyZW50SW5wdXRFdmVudDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IGZjNDE0
ZjczOTcxNDU4M2FkYTFhNjM1NmNhNDJhMDU4ZGYyMzQ1MWQuLmQ5YTU5NTE2NjNmMzdkYTBjNzc3
OTUyNjhiYzM4NmRjNTgwOTRlN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtMjIxLDYgKzIyMSwxOCBAQCBwdWJs
aWM6CiAgICAgewogICAgIH0KIAorICAgIHZpcnR1YWwgdm9pZCBhZGRBZmZlY3RpbmdDb250ZXh0
KEdyYXBoaWNzQ29udGV4dDNEKikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHdp
bGxDb21taXQoKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0KCkK
KyAgICB7CisgICAgfQorCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY3JlYXRlR3JhcGhpY3NDb250
ZXh0KGJvb2wpCiAgICAgewogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvRmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudC5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9GYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50LmgKaW5kZXggMjMyMzEwMzhhYjRl
ZmFlY2VkZWRlNzI3ZTYwODUxZWQ4MTljNjMzOS4uNDNlZTZkOGZkMjlkOTU1OTZhNzc5ZWU3MDE0
ZjhmNzk5YWNjMzU0YiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9G
YWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9GYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50LmgKQEAgLTQ1LDYgKzQ1LDkgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nl
c3MpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRBbmREcmF3RnJhbWUoKSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVTd2FwQnVmZmVycygpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBhZGRBZmZlY3RpbmdDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKikgeyB9CisgICAgdmly
dHVhbCB2b2lkIHdpbGxDb21taXQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0KCkg
eyB9CiAKICAgICAvLyBVc2VkIG9ubHkgaW4gdGhlIHNpbmdsZS10aHJlYWRlZCBwYXRoLgogICAg
IHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpIHsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126814</attachid>
            <date>2012-02-13 13:16:06 -0800</date>
            <delta_ts>2012-02-17 13:05:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78265-20120213161605.patch</filename>
            <type>text/plain</type>
            <size>2082</size>
            <attacher name="Michal Mocny">mmocny</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3NTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNw
cAppbmRleCBhNzczNDVjYWE3NzdhOWJjOWIyZDNhNTI4ODU2NTczNDI4NmJmZTEzLi4wYzhjODE3
YWNkZTc3NGNiZmFiY2NkMDFiN2M1NjJkOGM3ZGMwY2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0Nv
bnRleHQzRC5jcHAKQEAgLTI4LDggKzI4LDM2IEBACiAKICNpbmNsdWRlICJTaGFyZWRHcmFwaGlj
c0NvbnRleHQzRC5oIgogCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKKyNpZiBV
U0UoU0tJQSkKKyNpbmNsdWRlICJHckNvbnRleHQuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK25hbWVzcGFjZSB7CisKKyNpZiBVU0UoU0tJQSkKK2NsYXNzIEdyTWVtb3J5QWxs
b2NhdGlvbkNoYW5nZWRDYWxsYmFjayA6IHB1YmxpYyBFeHRlbnNpb25zM0RDaHJvbWl1bTo6R3B1
TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNIHsKK3B1YmxpYzoKKyAgICBH
ck1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2soR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQpCisgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBvbkdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkKGNvbnN0IEV4dGVuc2lvbnMz
RENocm9taXVtOjpHcHVNZW1vcnlBbGxvY2F0aW9uQ0hST01JVU0mIGFsbG9jYXRpb24pCisgICAg
eworICAgICAgICBpZiAoIWFsbG9jYXRpb24uZ3B1UmVzb3VyY2VTaXplSW5CeXRlcyAmJiBtX2Nv
bnRleHQtPmdyQ29udGV4dCgpKQorICAgICAgICAgICAgbV9jb250ZXh0LT5nckNvbnRleHQoKS0+
ZnJlZUdwdVJlc291cmNlcygpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRl
eHQzRCogbV9jb250ZXh0OworfTsKKyNlbmRpZgorCit9CisKIEdyYXBoaWNzQ29udGV4dDNEKiBT
aGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0KCkKIHsKICAgICBHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyBhdHRyaWJ1dGVzOwpAQCAtNDEsNiArNjksMTUgQEAgR3JhcGhpY3NDb250ZXh0
M0QqIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpnZXQoKQogICAgIHN0YXRpYyBHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoYXR0cmlidXRlcywg
MCkubGVha1JlZigpOwogICAgIGlmIChjb250ZXh0ICYmICFjb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgY29udGV4dCA9IDA7CisjaWYgVVNFKFNLSUEpCisgICAgc3RhdGlj
IGJvb2wgbWVtb3J5QWxsb2NhdGlvbkNhbGxiYWNrSW5pdGl0YWxpemVkID0gZmFsc2U7CisgICAg
aWYgKCFtZW1vcnlBbGxvY2F0aW9uQ2FsbGJhY2tJbml0aXRhbGl6ZWQgJiYgY29udGV4dCkgewor
ICAgICAgICBtZW1vcnlBbGxvY2F0aW9uQ2FsbGJhY2tJbml0aXRhbGl6ZWQgPSB0cnVlOworICAg
ICAgICBFeHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9uczNEQ2hyb21pdW0gPSBzdGF0aWNf
Y2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKSk7Cisg
ICAgICAgIGlmIChleHRlbnNpb25zM0RDaHJvbWl1bS0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX2dw
dV9tZW1vcnlfbWFuYWdlciIpKQorICAgICAgICAgICAgZXh0ZW5zaW9uczNEQ2hyb21pdW0tPnNl
dEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlVTShhZG9wdFB0cihuZXcg
R3JNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrKGNvbnRleHQpKSk7CisgICAgfQorI2Vu
ZGlmCiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127638</attachid>
            <date>2012-02-17 13:04:58 -0800</date>
            <delta_ts>2012-02-17 13:38:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78265-20120217160457.patch</filename>
            <type>text/plain</type>
            <size>2737</size>
            <attacher name="Michal Mocny">mmocny</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MDgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCmluZGV4IGExZGViMjNm
MmU5Y2FkYzJmOWNlZjcxZGNiZjU4ZmQxMTFkNTgwN2EuLjUwN2Y4NjljZDcyMmYyOWVmMzJmMzNj
YzhmYTg0NDFjZDE3NGEzMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCkBAIC0yMDYsNiArMjA2LDIzIEBA
IFBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwbGF0Zm9ybVRleHR1
cmUoKSBjb25zdAogfQogCiAjaWYgVVNFKFNLSUEpCitjbGFzcyBHck1lbW9yeUFsbG9jYXRpb25D
aGFuZ2VkQ2FsbGJhY2sgOiBwdWJsaWMgRXh0ZW5zaW9uczNEQ2hyb21pdW06OkdwdU1lbW9yeUFs
bG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlVTSB7CitwdWJsaWM6CisgICAgR3JNZW1vcnlB
bGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrKEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSogY29udGV4
dCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIG9uR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWQoc2l6ZV90IGdwdVJlc291cmNl
U2l6ZUluQnl0ZXMpCisgICAgeworICAgICAgICBpZiAoIWdwdVJlc291cmNlU2l6ZUluQnl0ZXMg
JiYgbV9jb250ZXh0LT5nckNvbnRleHQoKSkKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z3JDb250
ZXh0KCktPmZyZWVHcHVSZXNvdXJjZXMoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlKiBtX2NvbnRleHQ7Cit9OworCiBHckNvbnRleHQqIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Z3JDb250ZXh0KCkKIHsKICAgICAvLyBMaW1pdCB0aGUgbnVtYmVy
IG9mIHRleHR1cmVzIHdlIGhvbGQgaW4gdGhlIGJpdG1hcC0+dGV4dHVyZSBjYWNoZS4KQEAgLTIx
Niw4ICsyMzMsMTIgQEAgR3JDb250ZXh0KiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdyQ29u
dGV4dCgpCiAgICAgaWYgKCFtX2dyQ29udGV4dCkgewogICAgICAgICBTa0F1dG9UVW5yZWY8R3JH
TEludGVyZmFjZT4gaW50ZXJmYWNlKG1faW1wbC0+Y3JlYXRlR3JHTEludGVyZmFjZSgpKTsKICAg
ICAgICAgbV9nckNvbnRleHQgPSBHckNvbnRleHQ6OkNyZWF0ZShrT3BlbkdMX1NoYWRlcnNfR3JF
bmdpbmUsIHJlaW50ZXJwcmV0X2Nhc3Q8R3JQbGF0Zm9ybTNEQ29udGV4dD4oaW50ZXJmYWNlLmdl
dCgpKSk7Ci0gICAgICAgIGlmIChtX2dyQ29udGV4dCkKKyAgICAgICAgaWYgKG1fZ3JDb250ZXh0
KSB7CiAgICAgICAgICAgICBtX2dyQ29udGV4dC0+c2V0VGV4dHVyZUNhY2hlTGltaXRzKG1heFRl
eHR1cmVDYWNoZUNvdW50LCBtYXhUZXh0dXJlQ2FjaGVCeXRlcyk7CisgICAgICAgIEV4dGVuc2lv
bnMzRENocm9taXVtKiBleHRlbnNpb25zM0RDaHJvbWl1bSA9IHN0YXRpY19jYXN0PEV4dGVuc2lv
bnMzRENocm9taXVtKj4oZ2V0RXh0ZW5zaW9ucygpKTsKKyAgICAgICAgaWYgKGV4dGVuc2lvbnMz
RENocm9taXVtLT5zdXBwb3J0cygiR0xfQ0hST01JVU1fZ3B1X21lbW9yeV9tYW5hZ2VyIikpCisg
ICAgICAgICAgICBleHRlbnNpb25zM0RDaHJvbWl1bS0+c2V0R3B1TWVtb3J5QWxsb2NhdGlvbkNo
YW5nZWRDYWxsYmFja0NIUk9NSVVNKGFkb3B0UHRyKG5ldyBHck1lbW9yeUFsbG9jYXRpb25DaGFu
Z2VkQ2FsbGJhY2sodGhpcykpKTsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gbV9nckNv
bnRleHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZS5oCmluZGV4IGM2YzdkN2YxM2FjNjQxZWExNDcyYzFhMjZhNTQ2OWM5
NjhmZDFiNDguLmY0Zjg5MmExYzFkMzQ3NDg0ZWUyODlhNDE3MDQ0OGViZGM4ODM5MDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZS5oCkBAIC01Myw2ICs1MywxMCBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRFN3YXBCdWZm
ZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXI7CiBjbGFzcyBHcmFwaGljc0Vycm9yTWVzc2FnZUNh
bGxiYWNrQWRhcHRlcjsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNETWVtb3J5QWxsb2NhdGlvbkNo
YW5nZWRDYWxsYmFja0FkYXB0ZXI7CiAKKyNpZiBVU0UoU0tJQSkKK2NsYXNzIEdyTWVtb3J5QWxs
b2NhdGlvbkNoYW5nZWRDYWxsYmFjazsKKyNlbmRpZgorCiBjbGFzcyBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZT4gY3JlYXRlKFdlYktpdDo6V2ViVmlld0ltcGwqLCBQYXNzT3duUHRyPFdlYktp
dDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q+LCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127644</attachid>
            <date>2012-02-17 13:37:27 -0800</date>
            <delta_ts>2012-02-24 12:50:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78265-20120217163726.patch</filename>
            <type>text/plain</type>
            <size>1960</size>
            <attacher name="Michal Mocny">mmocny</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MDgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCmluZGV4IGExZGViMjNm
MmU5Y2FkYzJmOWNlZjcxZGNiZjU4ZmQxMTFkNTgwN2EuLmI4ZWZjMDE3MmVjOTY5NDRmNDA3ZWQ0
ZWYwMDkwZDEzNTQzMzAyNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCkBAIC0yMDYsNiArMjA2LDIzIEBA
IFBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwbGF0Zm9ybVRleHR1
cmUoKSBjb25zdAogfQogCiAjaWYgVVNFKFNLSUEpCitjbGFzcyBHck1lbW9yeUFsbG9jYXRpb25D
aGFuZ2VkQ2FsbGJhY2sgOiBwdWJsaWMgRXh0ZW5zaW9uczNEQ2hyb21pdW06OkdwdU1lbW9yeUFs
bG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlVTSB7CitwdWJsaWM6CisgICAgR3JNZW1vcnlB
bGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrKEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSogY29udGV4
dCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIG9uR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWQoc2l6ZV90IGdwdVJlc291cmNl
U2l6ZUluQnl0ZXMpCisgICAgeworICAgICAgICBpZiAoIWdwdVJlc291cmNlU2l6ZUluQnl0ZXMg
JiYgbV9jb250ZXh0LT5nckNvbnRleHQoKSkKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z3JDb250
ZXh0KCktPmZyZWVHcHVSZXNvdXJjZXMoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlKiBtX2NvbnRleHQ7Cit9OworCiBHckNvbnRleHQqIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Z3JDb250ZXh0KCkKIHsKICAgICAvLyBMaW1pdCB0aGUgbnVtYmVy
IG9mIHRleHR1cmVzIHdlIGhvbGQgaW4gdGhlIGJpdG1hcC0+dGV4dHVyZSBjYWNoZS4KQEAgLTIx
Niw4ICsyMzMsMTIgQEAgR3JDb250ZXh0KiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdyQ29u
dGV4dCgpCiAgICAgaWYgKCFtX2dyQ29udGV4dCkgewogICAgICAgICBTa0F1dG9UVW5yZWY8R3JH
TEludGVyZmFjZT4gaW50ZXJmYWNlKG1faW1wbC0+Y3JlYXRlR3JHTEludGVyZmFjZSgpKTsKICAg
ICAgICAgbV9nckNvbnRleHQgPSBHckNvbnRleHQ6OkNyZWF0ZShrT3BlbkdMX1NoYWRlcnNfR3JF
bmdpbmUsIHJlaW50ZXJwcmV0X2Nhc3Q8R3JQbGF0Zm9ybTNEQ29udGV4dD4oaW50ZXJmYWNlLmdl
dCgpKSk7Ci0gICAgICAgIGlmIChtX2dyQ29udGV4dCkKKyAgICAgICAgaWYgKG1fZ3JDb250ZXh0
KSB7CiAgICAgICAgICAgICBtX2dyQ29udGV4dC0+c2V0VGV4dHVyZUNhY2hlTGltaXRzKG1heFRl
eHR1cmVDYWNoZUNvdW50LCBtYXhUZXh0dXJlQ2FjaGVCeXRlcyk7CisgICAgICAgICAgICBFeHRl
bnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9uczNEQ2hyb21pdW0gPSBzdGF0aWNfY2FzdDxFeHRl
bnNpb25zM0RDaHJvbWl1bSo+KGdldEV4dGVuc2lvbnMoKSk7CisgICAgICAgICAgICBpZiAoZXh0
ZW5zaW9uczNEQ2hyb21pdW0tPnN1cHBvcnRzKCJHTF9DSFJPTUlVTV9ncHVfbWVtb3J5X21hbmFn
ZXIiKSkKKyAgICAgICAgICAgICAgICBleHRlbnNpb25zM0RDaHJvbWl1bS0+c2V0R3B1TWVtb3J5
QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKGFkb3B0UHRyKG5ldyBHck1lbW9yeUFs
bG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2sodGhpcykpKTsKKyAgICAgICAgfQogICAgIH0KICAgICBy
ZXR1cm4gbV9nckNvbnRleHQ7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128788</attachid>
            <date>2012-02-24 12:50:21 -0800</date>
            <delta_ts>2012-02-24 13:08:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78265-20120224155020.patch</filename>
            <type>text/plain</type>
            <size>2943</size>
            <attacher name="Michal Mocny">mmocny</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4ODE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDAxOWRlMzE5MDU3MzY1MDk5ODI3ZWI5YzEwNzliNzcyYTQ4ZDBmYzMuLjk5NmQxODZmZjY5YWUw
NGZjOThhYjI0YmM2NzcyODJlMWRiNzMzZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTItMDItMjQgIE1pY2hhbCBNb2NueSAgPG1tb2NueUBnb29nbGUu
Y29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gUHVyZ2UgU2tpYSdzIEdQVSB0ZXh0dXJlIGNhY2hl
IHVzaW5nIEdMX0NIUk9NSVVNX2dwdV9tZW1vcnlfbWFuYWdlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzgyNjUKKworICAgICAgICBSZXZpZXdlZCBi
eSBTdGVwaGVuIFdoaXRlLgorCisgICAgICAgICogc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21p
dW0uY3BwOgorICAgICAgICAoR3JNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFjazo6R3JNZW1v
cnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyTWVtb3J5
QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFjazo6b25HcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6Z3JDb250ZXh0KToKKwogMjAxMi0wMi0yNCAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxk
bWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQ6IGNocm9taXVtIGltYWdl
IGZvciBpbnNwZWN0b3Igc3RhdHVzIGJhciBidXR0b24gdXBkYXRlZC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAK
aW5kZXggYzdhYzg5NGIwZjA2NWJlM2Y0ZTZjZWQ3OTAyODhjNmRhZjc1YzI3Zi4uYjA5MDBjMDJk
NTI4Y2IxNzQwZDc0MzExMTQ3NzZiOWFmOTkwNmFlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAKQEAgLTE1
OCw2ICsxNTgsMjMgQEAgUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0CiB9CiAKICNpZiBVU0UoU0tJQSkKK2NsYXNzIEdyTWVt
b3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFjayA6IHB1YmxpYyBFeHRlbnNpb25zM0RDaHJvbWl1
bTo6R3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNIHsKK3B1YmxpYzoK
KyAgICBHck1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2soR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlKiBjb250ZXh0KQorICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgIHsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb25HcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZChzaXpl
X3QgZ3B1UmVzb3VyY2VTaXplSW5CeXRlcykKKyAgICB7CisgICAgICAgIGlmICghZ3B1UmVzb3Vy
Y2VTaXplSW5CeXRlcyAmJiBtX2NvbnRleHQtPmdyQ29udGV4dCgpKQorICAgICAgICAgICAgbV9j
b250ZXh0LT5nckNvbnRleHQoKS0+ZnJlZUdwdVJlc291cmNlcygpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUqIG1fY29udGV4dDsKK307CisKIEdyQ29u
dGV4dCogR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnckNvbnRleHQoKQogewogICAgIC8vIExp
bWl0IHRoZSBudW1iZXIgb2YgdGV4dHVyZXMgd2UgaG9sZCBpbiB0aGUgYml0bWFwLT50ZXh0dXJl
IGNhY2hlLgpAQCAtMTY4LDggKzE4NSwxMiBAQCBHckNvbnRleHQqIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6Z3JDb250ZXh0KCkKICAgICBpZiAoIW1fZ3JDb250ZXh0KSB7CiAgICAgICAgIFNr
QXV0b1RVbnJlZjxHckdMSW50ZXJmYWNlPiBpbnRlcmZhY2UobV9pbXBsLT5jcmVhdGVHckdMSW50
ZXJmYWNlKCkpOwogICAgICAgICBtX2dyQ29udGV4dCA9IEdyQ29udGV4dDo6Q3JlYXRlKGtPcGVu
R0xfU2hhZGVyc19HckVuZ2luZSwgcmVpbnRlcnByZXRfY2FzdDxHclBsYXRmb3JtM0RDb250ZXh0
PihpbnRlcmZhY2UuZ2V0KCkpKTsKLSAgICAgICAgaWYgKG1fZ3JDb250ZXh0KQorICAgICAgICBp
ZiAobV9nckNvbnRleHQpIHsKICAgICAgICAgICAgIG1fZ3JDb250ZXh0LT5zZXRUZXh0dXJlQ2Fj
aGVMaW1pdHMobWF4VGV4dHVyZUNhY2hlQ291bnQsIG1heFRleHR1cmVDYWNoZUJ5dGVzKTsKKyAg
ICAgICAgICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNpb25zM0RDaHJvbWl1bSA9IHN0
YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oZ2V0RXh0ZW5zaW9ucygpKTsKKyAgICAg
ICAgICAgIGlmIChleHRlbnNpb25zM0RDaHJvbWl1bS0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX2dw
dV9tZW1vcnlfbWFuYWdlciIpKQorICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMzRENocm9taXVt
LT5zZXRHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0oYWRvcHRQdHIo
bmV3IEdyTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFjayh0aGlzKSkpOworICAgICAgICB9
CiAgICAgfQogICAgIHJldHVybiBtX2dyQ29udGV4dDsKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>