<?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>43656</bug_id>
          
          <creation_ts>2010-08-06 17:25:46 -0700</creation_ts>
          <short_desc>[chromium] Add a PrepareTextureCallback to the chromium canvas layer compositor to upload mixed-mode results before compositing</short_desc>
          <delta_ts>2010-08-09 14:22:33 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>43734</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>senorblanco</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>261587</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-06 17:25:46 -0700</bug_when>
    <thetext>[chromium] Add a PrepareTextureCallback to the chromium canvas layer compositor to upload mixed-mode results before compositing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261589</commentid>
    <comment_count>1</comment_count>
      <attachid>63787</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-06 17:28:16 -0700</bug_when>
    <thetext>Created attachment 63787
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261595</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-06 17:44:50 -0700</bug_when>
    <thetext>Attachment 63787 did not build on chromium:
Build output: http://queues.webkit.org/results/3616690</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261598</commentid>
    <comment_count>3</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-06 17:55:22 -0700</bug_when>
    <thetext>I think the EWS bot&apos;s a bit behind ToT.  This builds on chromium linux on my box.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261605</commentid>
    <comment_count>4</comment_count>
      <attachid>63787</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-08-06 18:19:12 -0700</bug_when>
    <thetext>Comment on attachment 63787
Patch

&gt; diff --git a/WebCore/platform/graphics/chromium/CanvasLayerChromium.cpp b/WebCore/platform/graphics/chromium/CanvasLayerChromium.cpp
&gt; index f290e680d30909f97e34553a53785c4918d2b88a..7e732d13ee829fcf8e3c8fa93fd6a20ee1decdcd 100644
&gt; --- a/WebCore/platform/graphics/chromium/CanvasLayerChromium.cpp
&gt; +++ b/WebCore/platform/graphics/chromium/CanvasLayerChromium.cpp
&gt; @@ -75,6 +75,8 @@ void CanvasLayerChromium::updateTextureContents(unsigned textureId)
&gt;      }
&gt;      // Update the contents of the texture used by the compositor.
&gt;      if (m_contentsDirty) {
&gt; +        if (m_prepareTextureCallback)
&gt; +            m_prepareTextureCallback-&gt;willPrepareTexture();
&gt;          m_context-&gt;prepareTexture();
&gt;          m_contentsDirty = false;
&gt;      }
&gt; diff --git a/WebCore/platform/graphics/chromium/CanvasLayerChromium.h b/WebCore/platform/graphics/chromium/CanvasLayerChromium.h
&gt; index a0025a46dd809d4367148293a43def3b84dd1f7e..98be2704e156b8eaf282d66a804a42ab21818f9b 100644
&gt; --- a/WebCore/platform/graphics/chromium/CanvasLayerChromium.h
&gt; +++ b/WebCore/platform/graphics/chromium/CanvasLayerChromium.h
&gt; @@ -54,11 +54,18 @@ public:
&gt;  
&gt;      static void setShaderProgramId(unsigned shaderProgramId) { m_shaderProgramId = shaderProgramId; }
&gt;  
&gt; +    class PrepareTextureCallback : public Noncopyable {
&gt; +    public:
&gt; +        virtual void willPrepareTexture() = 0;
&gt; +    };
&gt; +    void setPrepareTextureCallback(PassOwnPtr&lt;PrepareTextureCallback&gt; callback) { m_prepareTextureCallback = callback; }
&gt; +
&gt;  private:
&gt;      explicit CanvasLayerChromium(GraphicsLayerChromium* owner);
&gt;      GraphicsContext3D* m_context;
&gt;      unsigned m_textureId;
&gt;      bool m_textureChanged;
&gt; +    OwnPtr&lt;PrepareTextureCallback&gt; m_prepareTextureCallback;
&gt;  
&gt;      static unsigned m_shaderProgramId;
&gt;  };
&gt; diff --git a/WebCore/platform/graphics/skia/PlatformContextSkia.cpp b/WebCore/platform/graphics/skia/PlatformContextSkia.cpp
&gt; index b14c6cd04ca30bd417102e4357063beacae222cb..7b1eb1ab04d16ba32953fdf697aece885b8f4c71 100644
&gt; --- a/WebCore/platform/graphics/skia/PlatformContextSkia.cpp
&gt; +++ b/WebCore/platform/graphics/skia/PlatformContextSkia.cpp
&gt; @@ -33,6 +33,7 @@
&gt;  #include &quot;PlatformContextSkia.h&quot;
&gt;  
&gt;  #include &quot;AffineTransform.h&quot;
&gt; +#include &quot;CanvasLayerChromium.h&quot;
&gt;  #include &quot;GraphicsContext.h&quot;
&gt;  #include &quot;ImageBuffer.h&quot;
&gt;  #include &quot;NativeImageSkia.h&quot;
&gt; @@ -678,10 +679,28 @@ void PlatformContextSkia::applyAntiAliasedClipPaths(WTF::Vector&lt;SkPath&gt;&amp; paths)
&gt;  
&gt;  #if USE(GLES2_RENDERING)
&gt;  
&gt; +class PrepareTextureCallbackImpl : public CanvasLayerChromium::PrepareTextureCallback {
&gt; +public:
&gt; +    static PassOwnPtr&lt;PrepareTextureCallbackImpl&gt; create(PlatformContextSkia* pcs)
&gt; +    {
&gt; +        return new PrepareTextureCallbackImpl(pcs);
&gt; +    }
&gt; +
&gt; +    virtual void willPrepareTexture()
&gt; +    {
&gt; +        m_pcs-&gt;prepareForHardwareDraw();
&gt; +    }
&gt; +private:
&gt; +    explicit PrepareTextureCallbackImpl(PlatformContextSkia* pcs) : m_pcs(pcs) {}
&gt; +    PlatformContextSkia* m_pcs;
&gt; +};
&gt; +
&gt;  void PlatformContextSkia::setGraphicsContext3D(GraphicsContext3D* context, const WebCore::IntSize&amp; size)
&gt;  {
&gt;      m_useGPU = true;
&gt;      m_gpuCanvas = new GLES2Canvas(context, size);
&gt; +    CanvasLayerChromium* layer = static_cast&lt;CanvasLayerChromium*&gt;(context-&gt;platformLayer());
&gt; +    layer-&gt;setPrepareTextureCallback(PrepareTextureCallbackImpl::create(this));
&gt;  }
&gt;  
&gt;  void PlatformContextSkia::prepareForSoftwareDraw() const

WebCore/platform/graphics/skia/PlatformContextSkia.cpp:703
 +      layer-&gt;setPrepareTextureCallback(PrepareTextureCallbackImpl::create(this));
Is it ever possible that the CanvasLayerChromium will outlive the PlatformContextSkia and the compositor will end up calling a method on a dead pointer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261607</commentid>
    <comment_count>5</comment_count>
      <attachid>63787</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-06 18:23:36 -0700</bug_when>
    <thetext>Comment on attachment 63787
Patch

Good point.  I&apos;ll update the patch to clear the pointer out when the PCS dies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261619</commentid>
    <comment_count>6</comment_count>
      <attachid>63794</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-06 19:04:11 -0700</bug_when>
    <thetext>Created attachment 63794
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261629</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-06 19:49:04 -0700</bug_when>
    <thetext>Attachment 63794 did not build on chromium:
Build output: http://queues.webkit.org/results/3567981</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262216</commentid>
    <comment_count>8</comment_count>
      <attachid>63794</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-08-09 10:42:21 -0700</bug_when>
    <thetext>Comment on attachment 63794
Patch

Looks good.


&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; index 2b756d68f13f9359c4466d195171b923c722bae3..ed63a02cb96b6073d1aabd3cbd71c4948abd604b 100644
&gt; --- a/WebCore/ChangeLog
&gt; +++ b/WebCore/ChangeLog
&gt; @@ -1,5 +1,30 @@
&gt;  2010-08-06  James Robinson  &lt;jamesr@chromium.org&gt;
&gt;  
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        [chromium] Add a PrepareTextureCallback to the chromium canvas layer compositor to upload mixed-mode results before compositing
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=43656
&gt; +
&gt; +        When compositing an accelerated canvas that is using both hardware and software drawing,
&gt; +        we need a callback before compositing the layer to make sure that we upload any software
&gt; +        drawn results to the texture.  This will go away as soon as implement all draw calls
&gt; +        in hardware.
&gt; +
&gt; +        To test, run any canvas demo that runs in mixed mode and verifies that the software results
&gt; +        always show up.
&gt; +
&gt; +        * platform/graphics/chromium/CanvasLayerChromium.cpp:
&gt; +        (WebCore::CanvasLayerChromium::updateTextureContents):
&gt; +        * platform/graphics/chromium/CanvasLayerChromium.h:
&gt; +        (WebCore::CanvasLayerChromium::setPrepareTextureCallback):
&gt; +        * platform/graphics/skia/PlatformContextSkia.cpp:
&gt; +        (WebCore::PrepareTextureCallbackImpl::create):
&gt; +        (WebCore::PrepareTextureCallbackImpl::willPrepareTexture):
&gt; +        (WebCore::PrepareTextureCallbackImpl::PrepareTextureCallbackImpl):
&gt; +        (WebCore::PlatformContextSkia::setGraphicsContext3D):
&gt; +
&gt; +2010-08-06  James Robinson  &lt;jamesr@chromium.org&gt;
&gt; +
&gt;          Reviewed by Simon Fraser.
&gt;  
&gt;          Accelerated 2d canvases should get compositing layers
&gt; diff --git a/WebCore/platform/graphics/chromium/CanvasLayerChromium.cpp b/WebCore/platform/graphics/chromium/CanvasLayerChromium.cpp
&gt; index f290e680d30909f97e34553a53785c4918d2b88a..7e732d13ee829fcf8e3c8fa93fd6a20ee1decdcd 100644
&gt; --- a/WebCore/platform/graphics/chromium/CanvasLayerChromium.cpp
&gt; +++ b/WebCore/platform/graphics/chromium/CanvasLayerChromium.cpp
&gt; @@ -75,6 +75,8 @@ void CanvasLayerChromium::updateTextureContents(unsigned textureId)
&gt;      }
&gt;      // Update the contents of the texture used by the compositor.
&gt;      if (m_contentsDirty) {
&gt; +        if (m_prepareTextureCallback)
&gt; +            m_prepareTextureCallback-&gt;willPrepareTexture();
&gt;          m_context-&gt;prepareTexture();
&gt;          m_contentsDirty = false;
&gt;      }
&gt; diff --git a/WebCore/platform/graphics/chromium/CanvasLayerChromium.h b/WebCore/platform/graphics/chromium/CanvasLayerChromium.h
&gt; index a0025a46dd809d4367148293a43def3b84dd1f7e..98be2704e156b8eaf282d66a804a42ab21818f9b 100644
&gt; --- a/WebCore/platform/graphics/chromium/CanvasLayerChromium.h
&gt; +++ b/WebCore/platform/graphics/chromium/CanvasLayerChromium.h
&gt; @@ -54,11 +54,18 @@ public:
&gt;  
&gt;      static void setShaderProgramId(unsigned shaderProgramId) { m_shaderProgramId = shaderProgramId; }
&gt;  
&gt; +    class PrepareTextureCallback : public Noncopyable {
&gt; +    public:
&gt; +        virtual void willPrepareTexture() = 0;
&gt; +    };
&gt; +    void setPrepareTextureCallback(PassOwnPtr&lt;PrepareTextureCallback&gt; callback) { m_prepareTextureCallback = callback; }
&gt; +
&gt;  private:
&gt;      explicit CanvasLayerChromium(GraphicsLayerChromium* owner);
&gt;      GraphicsContext3D* m_context;
&gt;      unsigned m_textureId;
&gt;      bool m_textureChanged;
&gt; +    OwnPtr&lt;PrepareTextureCallback&gt; m_prepareTextureCallback;
&gt;  
&gt;      static unsigned m_shaderProgramId;
&gt;  };
&gt; diff --git a/WebCore/platform/graphics/skia/PlatformContextSkia.cpp b/WebCore/platform/graphics/skia/PlatformContextSkia.cpp
&gt; index b14c6cd04ca30bd417102e4357063beacae222cb..0dfe494ad786818138de194799dfa6ca56cf0be9 100644
&gt; --- a/WebCore/platform/graphics/skia/PlatformContextSkia.cpp
&gt; +++ b/WebCore/platform/graphics/skia/PlatformContextSkia.cpp
&gt; @@ -33,6 +33,7 @@
&gt;  #include &quot;PlatformContextSkia.h&quot;
&gt;  
&gt;  #include &quot;AffineTransform.h&quot;
&gt; +#include &quot;CanvasLayerChromium.h&quot;
&gt;  #include &quot;GraphicsContext.h&quot;
&gt;  #include &quot;ImageBuffer.h&quot;
&gt;  #include &quot;NativeImageSkia.h&quot;
&gt; @@ -220,6 +221,12 @@ PlatformContextSkia::PlatformContextSkia(skia::PlatformCanvas* canvas)
&gt;  
&gt;  PlatformContextSkia::~PlatformContextSkia()
&gt;  {
&gt; +#if USE(GLES2_RENDERING)
&gt; +    if (m_gpuCanvas) {
&gt; +        CanvasLayerChromium* layer = static_cast&lt;CanvasLayerChromium*&gt;(m_gpuCanvas-&gt;context()-&gt;platformLayer());
&gt; +        layer-&gt;setPrepareTextureCallback(0);
&gt; +    }
&gt; +#endif
&gt;  }
&gt;  
&gt;  void PlatformContextSkia::setCanvas(skia::PlatformCanvas* canvas)
&gt; @@ -678,10 +685,28 @@ void PlatformContextSkia::applyAntiAliasedClipPaths(WTF::Vector&lt;SkPath&gt;&amp; paths)
&gt;  
&gt;  #if USE(GLES2_RENDERING)
&gt;  
&gt; +class PrepareTextureCallbackImpl : public CanvasLayerChromium::PrepareTextureCallback {
&gt; +public:
&gt; +    static PassOwnPtr&lt;PrepareTextureCallbackImpl&gt; create(PlatformContextSkia* pcs)
&gt; +    {
&gt; +        return new PrepareTextureCallbackImpl(pcs);
&gt; +    }
&gt; +
&gt; +    virtual void willPrepareTexture()
&gt; +    {
&gt; +        m_pcs-&gt;prepareForHardwareDraw();
&gt; +    }
&gt; +private:
&gt; +    explicit PrepareTextureCallbackImpl(PlatformContextSkia* pcs) : m_pcs(pcs) {}
&gt; +    PlatformContextSkia* m_pcs;
&gt; +};
&gt; +
&gt;  void PlatformContextSkia::setGraphicsContext3D(GraphicsContext3D* context, const WebCore::IntSize&amp; size)
&gt;  {
&gt;      m_useGPU = true;
&gt;      m_gpuCanvas = new GLES2Canvas(context, size);
&gt; +    CanvasLayerChromium* layer = static_cast&lt;CanvasLayerChromium*&gt;(context-&gt;platformLayer());
&gt; +    layer-&gt;setPrepareTextureCallback(PrepareTextureCallbackImpl::create(this));
&gt;  }
&gt;  
&gt;  void PlatformContextSkia::prepareForSoftwareDraw() const</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262218</commentid>
    <comment_count>9</comment_count>
      <attachid>63794</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-08-09 10:46:00 -0700</bug_when>
    <thetext>Comment on attachment 63794
Patch

ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262227</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-09 11:06:03 -0700</bug_when>
    <thetext>Committed r64993: &lt;http://trac.webkit.org/changeset/64993&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262231</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-09 11:16:34 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/64993 might have broken Chromium Linux Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262285</commentid>
    <comment_count>12</comment_count>
      <attachid>63923</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-09 13:19:45 -0700</bug_when>
    <thetext>Created attachment 63923
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262288</commentid>
    <comment_count>13</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-09 13:21:57 -0700</bug_when>
    <thetext>The last patch left out a #include in PlatformContextSkia.cpp that I had locally (which explains why I could compile locally but the EWS bot failed).  This one should be good :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262290</commentid>
    <comment_count>14</comment_count>
      <attachid>63923</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-08-09 13:22:54 -0700</bug_when>
    <thetext>Comment on attachment 63923
Patch

ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262306</commentid>
    <comment_count>15</comment_count>
      <attachid>63923</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-09 13:54:34 -0700</bug_when>
    <thetext>Comment on attachment 63923
Patch

Clearing flags on attachment: 63923

Committed r65001: &lt;http://trac.webkit.org/changeset/65001&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262307</commentid>
    <comment_count>16</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-09 13:54:40 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262314</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-09 14:11:19 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/65001 might have broken Chromium Win Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262320</commentid>
    <comment_count>18</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-09 14:22:33 -0700</bug_when>
    <thetext>Compile fixed at r65002.  The basic issue was that the b.w.o bots compile with USE(ACCELERATED_COMPOSITING) off, whereas the chromium compiles (both on the canaries and our workstations) compile with that on.  I just had to make it compile with both settings.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63787</attachid>
            <date>2010-08-06 17:28:16 -0700</date>
            <delta_ts>2010-08-06 18:23:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43656-20100806172815.patch</filename>
            <type>text/plain</type>
            <size>3313</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5
ZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
c0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGYyOTBlNjgwZDMwOTA5Zjk3ZTM0NTUzYTUzNzg1YzQ5
MThkMmI4OGEuLjdlNzMyZDEzZWU4MjlmY2Y4ZTNjOGZhOTNmZDZhMjBlZTFkZWNkY2QgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJv
bWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNM
YXllckNocm9taXVtLmNwcApAQCAtNzUsNiArNzUsOCBAQCB2b2lkIENhbnZhc0xheWVyQ2hyb21p
dW06OnVwZGF0ZVRleHR1cmVDb250ZW50cyh1bnNpZ25lZCB0ZXh0dXJlSWQpCiAgICAgfQogICAg
IC8vIFVwZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHRleHR1cmUgdXNlZCBieSB0aGUgY29tcG9z
aXRvci4KICAgICBpZiAobV9jb250ZW50c0RpcnR5KSB7CisgICAgICAgIGlmIChtX3ByZXBhcmVU
ZXh0dXJlQ2FsbGJhY2spCisgICAgICAgICAgICBtX3ByZXBhcmVUZXh0dXJlQ2FsbGJhY2stPndp
bGxQcmVwYXJlVGV4dHVyZSgpOwogICAgICAgICBtX2NvbnRleHQtPnByZXBhcmVUZXh0dXJlKCk7
CiAgICAgICAgIG1fY29udGVudHNEaXJ0eSA9IGZhbHNlOwogICAgIH0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgK
aW5kZXggYTAwMjVhNDZkZDgwOWQ0MzY3MTQ4MjkzYTQzZGVmM2I4NGRkMWY3ZS4uOThiZTI3MDRl
MTU2YjhlYWYyODJkNjZhODA0YTQyYWIyMTgxOGY5YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgKQEAgLTU0
LDExICs1NCwxOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBzZXRTaGFkZXJQcm9ncmFt
SWQodW5zaWduZWQgc2hhZGVyUHJvZ3JhbUlkKSB7IG1fc2hhZGVyUHJvZ3JhbUlkID0gc2hhZGVy
UHJvZ3JhbUlkOyB9CiAKKyAgICBjbGFzcyBQcmVwYXJlVGV4dHVyZUNhbGxiYWNrIDogcHVibGlj
IE5vbmNvcHlhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsUHJl
cGFyZVRleHR1cmUoKSA9IDA7CisgICAgfTsKKyAgICB2b2lkIHNldFByZXBhcmVUZXh0dXJlQ2Fs
bGJhY2soUGFzc093blB0cjxQcmVwYXJlVGV4dHVyZUNhbGxiYWNrPiBjYWxsYmFjaykgeyBtX3By
ZXBhcmVUZXh0dXJlQ2FsbGJhY2sgPSBjYWxsYmFjazsgfQorCiBwcml2YXRlOgogICAgIGV4cGxp
Y2l0IENhbnZhc0xheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CiAg
ICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKICAgICB1bnNpZ25lZCBtX3RleHR1cmVJ
ZDsKICAgICBib29sIG1fdGV4dHVyZUNoYW5nZWQ7CisgICAgT3duUHRyPFByZXBhcmVUZXh0dXJl
Q2FsbGJhY2s+IG1fcHJlcGFyZVRleHR1cmVDYWxsYmFjazsKIAogICAgIHN0YXRpYyB1bnNpZ25l
ZCBtX3NoYWRlclByb2dyYW1JZDsKIH07CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKaW5kZXggYjE0YzZjZDA0Y2EzMGJk
NDE3MTAyZTQzNTcwNjNiZWFjYWUyMjJjYi4uN2IxZWIxYWIwNGQxNmJhMzI5NTNmZGY2OTdhZWNl
ODg1YjhmNGM3MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Bs
YXRmb3JtQ29udGV4dFNraWEuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlBs
YXRmb3JtQ29udGV4dFNraWEuaCIKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2lu
Y2x1ZGUgIkNhbnZhc0xheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5o
IgpAQCAtNjc4LDEwICs2NzksMjggQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjphcHBseUFu
dGlBbGlhc2VkQ2xpcFBhdGhzKFdURjo6VmVjdG9yPFNrUGF0aD4mIHBhdGhzKQogCiAjaWYgVVNF
KEdMRVMyX1JFTkRFUklORykKIAorY2xhc3MgUHJlcGFyZVRleHR1cmVDYWxsYmFja0ltcGwgOiBw
dWJsaWMgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6UHJlcGFyZVRleHR1cmVDYWxsYmFjayB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8UHJlcGFyZVRleHR1cmVDYWxsYmFja0ltcGw+IGNy
ZWF0ZShQbGF0Zm9ybUNvbnRleHRTa2lhKiBwY3MpCisgICAgeworICAgICAgICByZXR1cm4gbmV3
IFByZXBhcmVUZXh0dXJlQ2FsbGJhY2tJbXBsKHBjcyk7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIHdpbGxQcmVwYXJlVGV4dHVyZSgpCisgICAgeworICAgICAgICBtX3Bjcy0+cHJlcGFyZUZv
ckhhcmR3YXJlRHJhdygpOworICAgIH0KK3ByaXZhdGU6CisgICAgZXhwbGljaXQgUHJlcGFyZVRl
eHR1cmVDYWxsYmFja0ltcGwoUGxhdGZvcm1Db250ZXh0U2tpYSogcGNzKSA6IG1fcGNzKHBjcykg
e30KKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBtX3BjczsKK307CisKIHZvaWQgUGxhdGZvcm1D
b250ZXh0U2tpYTo6c2V0R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCiB7CiAgICAgbV91c2VHUFUgPSB0cnVl
OwogICAgIG1fZ3B1Q2FudmFzID0gbmV3IEdMRVMyQ2FudmFzKGNvbnRleHQsIHNpemUpOworICAg
IENhbnZhc0xheWVyQ2hyb21pdW0qIGxheWVyID0gc3RhdGljX2Nhc3Q8Q2FudmFzTGF5ZXJDaHJv
bWl1bSo+KGNvbnRleHQtPnBsYXRmb3JtTGF5ZXIoKSk7CisgICAgbGF5ZXItPnNldFByZXBhcmVU
ZXh0dXJlQ2FsbGJhY2soUHJlcGFyZVRleHR1cmVDYWxsYmFja0ltcGw6OmNyZWF0ZSh0aGlzKSk7
CiB9CiAKIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6cHJlcGFyZUZvclNvZnR3YXJlRHJhdygp
IGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63794</attachid>
            <date>2010-08-06 19:04:11 -0700</date>
            <delta_ts>2010-08-09 13:19:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43656-20100806190409.patch</filename>
            <type>text/plain</type>
            <size>5425</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MmI3NTZkNjhmMTNmOTM1OWM0NDY2ZDE5NTE3MWI5MjNjNzIyYmFlMy4uZWQ2M2EwMmNiOTZiNjA3
M2QxYWFiZDNjYmQ3MWM0OTQ4YWJkNjA0YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwzMCBAQAogMjAxMC0wOC0wNiAgSmFt
ZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIGEgUHJlcGFyZVRleHR1
cmVDYWxsYmFjayB0byB0aGUgY2hyb21pdW0gY2FudmFzIGxheWVyIGNvbXBvc2l0b3IgdG8gdXBs
b2FkIG1peGVkLW1vZGUgcmVzdWx0cyBiZWZvcmUgY29tcG9zaXRpbmcKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNjU2CisKKyAgICAgICAgV2hlbiBj
b21wb3NpdGluZyBhbiBhY2NlbGVyYXRlZCBjYW52YXMgdGhhdCBpcyB1c2luZyBib3RoIGhhcmR3
YXJlIGFuZCBzb2Z0d2FyZSBkcmF3aW5nLAorICAgICAgICB3ZSBuZWVkIGEgY2FsbGJhY2sgYmVm
b3JlIGNvbXBvc2l0aW5nIHRoZSBsYXllciB0byBtYWtlIHN1cmUgdGhhdCB3ZSB1cGxvYWQgYW55
IHNvZnR3YXJlCisgICAgICAgIGRyYXduIHJlc3VsdHMgdG8gdGhlIHRleHR1cmUuICBUaGlzIHdp
bGwgZ28gYXdheSBhcyBzb29uIGFzIGltcGxlbWVudCBhbGwgZHJhdyBjYWxscworICAgICAgICBp
biBoYXJkd2FyZS4KKworICAgICAgICBUbyB0ZXN0LCBydW4gYW55IGNhbnZhcyBkZW1vIHRoYXQg
cnVucyBpbiBtaXhlZCBtb2RlIGFuZCB2ZXJpZmllcyB0aGF0IHRoZSBzb2Z0d2FyZSByZXN1bHRz
CisgICAgICAgIGFsd2F5cyBzaG93IHVwLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlQ29udGVudHMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OnNldFByZXBhcmVUZXh0dXJlQ2FsbGJhY2spOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQcmVwYXJlVGV4dHVyZUNhbGxiYWNrSW1wbDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlByZXBhcmVUZXh0dXJlQ2FsbGJhY2tJbXBsOjp3aWxsUHJlcGFy
ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6UHJlcGFyZVRleHR1cmVDYWxsYmFja0ltcGw6
OlByZXBhcmVUZXh0dXJlQ2FsbGJhY2tJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
Q29udGV4dFNraWE6OnNldEdyYXBoaWNzQ29udGV4dDNEKToKKworMjAxMC0wOC0wNiAgSmFtZXMg
Um9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFJldmlld2VkIGJ5IFNp
bW9uIEZyYXNlci4KIAogICAgICAgICBBY2NlbGVyYXRlZCAyZCBjYW52YXNlcyBzaG91bGQgZ2V0
IGNvbXBvc2l0aW5nIGxheWVycwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZjI5MGU2ODBkMzA5
MDlmOTdlMzQ1NTNhNTM3ODVjNDkxOGQyYjg4YS4uN2U3MzJkMTNlZTgyOWZjZjhlM2M4ZmE5M2Zk
NmEyMGVlMWRlY2RjZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCkBAIC03NSw2ICs3NSw4IEBAIHZv
aWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzKHVuc2lnbmVkIHRl
eHR1cmVJZCkKICAgICB9CiAgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dHVy
ZSB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgogICAgIGlmIChtX2NvbnRlbnRzRGlydHkpIHsKKyAg
ICAgICAgaWYgKG1fcHJlcGFyZVRleHR1cmVDYWxsYmFjaykKKyAgICAgICAgICAgIG1fcHJlcGFy
ZVRleHR1cmVDYWxsYmFjay0+d2lsbFByZXBhcmVUZXh0dXJlKCk7CiAgICAgICAgIG1fY29udGV4
dC0+cHJlcGFyZVRleHR1cmUoKTsKICAgICAgICAgbV9jb250ZW50c0RpcnR5ID0gZmFsc2U7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52
YXNMYXllckNocm9taXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhc0xheWVyQ2hyb21pdW0uaAppbmRleCBhMDAyNWE0NmRkODA5ZDQzNjcxNDgyOTNhNDNkZWYz
Yjg0ZGQxZjdlLi45OGJlMjcwNGUxNTZiOGVhZjI4MmQ2NmE4MDRhNDJhYjIxODE4ZjliIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hy
b21pdW0uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xh
eWVyQ2hyb21pdW0uaApAQCAtNTQsMTEgKzU0LDE4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2
b2lkIHNldFNoYWRlclByb2dyYW1JZCh1bnNpZ25lZCBzaGFkZXJQcm9ncmFtSWQpIHsgbV9zaGFk
ZXJQcm9ncmFtSWQgPSBzaGFkZXJQcm9ncmFtSWQ7IH0KIAorICAgIGNsYXNzIFByZXBhcmVUZXh0
dXJlQ2FsbGJhY2sgOiBwdWJsaWMgTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAg
dmlydHVhbCB2b2lkIHdpbGxQcmVwYXJlVGV4dHVyZSgpID0gMDsKKyAgICB9OworICAgIHZvaWQg
c2V0UHJlcGFyZVRleHR1cmVDYWxsYmFjayhQYXNzT3duUHRyPFByZXBhcmVUZXh0dXJlQ2FsbGJh
Y2s+IGNhbGxiYWNrKSB7IG1fcHJlcGFyZVRleHR1cmVDYWxsYmFjayA9IGNhbGxiYWNrOyB9CisK
IHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ2FudmFzTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVy
Q2hyb21pdW0qIG93bmVyKTsKICAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwogICAg
IHVuc2lnbmVkIG1fdGV4dHVyZUlkOwogICAgIGJvb2wgbV90ZXh0dXJlQ2hhbmdlZDsKKyAgICBP
d25QdHI8UHJlcGFyZVRleHR1cmVDYWxsYmFjaz4gbV9wcmVwYXJlVGV4dHVyZUNhbGxiYWNrOwog
CiAgICAgc3RhdGljIHVuc2lnbmVkIG1fc2hhZGVyUHJvZ3JhbUlkOwogfTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcApp
bmRleCBiMTRjNmNkMDRjYTMwYmQ0MTcxMDJlNDM1NzA2M2JlYWNhZTIyMmNiLi4wZGZlNDk0YWQ3
ODY4MTgxMzhkZTE5NDc5OWRmYTZjYTU2Y2YwYmU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogCiAjaW5jbHVkZSAiQWZm
aW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVk
ZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCkBAIC0yMjAsNiArMjIxLDEyIEBAIFBsYXRmb3JtQ29udGV4
dFNraWE6OlBsYXRmb3JtQ29udGV4dFNraWEoc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNhbnZhcykK
IAogUGxhdGZvcm1Db250ZXh0U2tpYTo6flBsYXRmb3JtQ29udGV4dFNraWEoKQogeworI2lmIFVT
RShHTEVTMl9SRU5ERVJJTkcpCisgICAgaWYgKG1fZ3B1Q2FudmFzKSB7CisgICAgICAgIENhbnZh
c0xheWVyQ2hyb21pdW0qIGxheWVyID0gc3RhdGljX2Nhc3Q8Q2FudmFzTGF5ZXJDaHJvbWl1bSo+
KG1fZ3B1Q2FudmFzLT5jb250ZXh0KCktPnBsYXRmb3JtTGF5ZXIoKSk7CisgICAgICAgIGxheWVy
LT5zZXRQcmVwYXJlVGV4dHVyZUNhbGxiYWNrKDApOworICAgIH0KKyNlbmRpZgogfQogCiB2b2lk
IFBsYXRmb3JtQ29udGV4dFNraWE6OnNldENhbnZhcyhza2lhOjpQbGF0Zm9ybUNhbnZhcyogY2Fu
dmFzKQpAQCAtNjc4LDEwICs2ODUsMjggQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjphcHBs
eUFudGlBbGlhc2VkQ2xpcFBhdGhzKFdURjo6VmVjdG9yPFNrUGF0aD4mIHBhdGhzKQogCiAjaWYg
VVNFKEdMRVMyX1JFTkRFUklORykKIAorY2xhc3MgUHJlcGFyZVRleHR1cmVDYWxsYmFja0ltcGwg
OiBwdWJsaWMgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6UHJlcGFyZVRleHR1cmVDYWxsYmFjayB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8UHJlcGFyZVRleHR1cmVDYWxsYmFja0ltcGw+
IGNyZWF0ZShQbGF0Zm9ybUNvbnRleHRTa2lhKiBwY3MpCisgICAgeworICAgICAgICByZXR1cm4g
bmV3IFByZXBhcmVUZXh0dXJlQ2FsbGJhY2tJbXBsKHBjcyk7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIHdpbGxQcmVwYXJlVGV4dHVyZSgpCisgICAgeworICAgICAgICBtX3Bjcy0+cHJlcGFy
ZUZvckhhcmR3YXJlRHJhdygpOworICAgIH0KK3ByaXZhdGU6CisgICAgZXhwbGljaXQgUHJlcGFy
ZVRleHR1cmVDYWxsYmFja0ltcGwoUGxhdGZvcm1Db250ZXh0U2tpYSogcGNzKSA6IG1fcGNzKHBj
cykge30KKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBtX3BjczsKK307CisKIHZvaWQgUGxhdGZv
cm1Db250ZXh0U2tpYTo6c2V0R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCiB7CiAgICAgbV91c2VHUFUgPSB0
cnVlOwogICAgIG1fZ3B1Q2FudmFzID0gbmV3IEdMRVMyQ2FudmFzKGNvbnRleHQsIHNpemUpOwor
ICAgIENhbnZhc0xheWVyQ2hyb21pdW0qIGxheWVyID0gc3RhdGljX2Nhc3Q8Q2FudmFzTGF5ZXJD
aHJvbWl1bSo+KGNvbnRleHQtPnBsYXRmb3JtTGF5ZXIoKSk7CisgICAgbGF5ZXItPnNldFByZXBh
cmVUZXh0dXJlQ2FsbGJhY2soUHJlcGFyZVRleHR1cmVDYWxsYmFja0ltcGw6OmNyZWF0ZSh0aGlz
KSk7CiB9CiAKIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6cHJlcGFyZUZvclNvZnR3YXJlRHJh
dygpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63923</attachid>
            <date>2010-08-09 13:19:45 -0700</date>
            <delta_ts>2010-08-09 13:54:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43656-20100809131944.patch</filename>
            <type>text/plain</type>
            <size>5358</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjUxOGUxZGFkZTU0MTNiMmNkZGUyMjg3NWRlZDRjYjg4MWYyNTlhMS4uYmRjMzA0NzI4YjQ5ZTM0
NTI3MjYyY2U5YjBkMWQyZWIxOGQxZmZlMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMC0wOC0wOSAgSmFt
ZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIGEgUHJlcGFyZVRleHR1
cmVDYWxsYmFjayB0byB0aGUgY2hyb21pdW0gY2FudmFzIGxheWVyIGNvbXBvc2l0b3IgdG8gdXBs
b2FkIG1peGVkLW1vZGUgcmVzdWx0cyBiZWZvcmUgY29tcG9zaXRpbmcKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNjU2CisKKyAgICAgICAgV2hlbiBj
b21wb3NpdGluZyBhbiBhY2NlbGVyYXRlZCBjYW52YXMgdGhhdCBpcyB1c2luZyBib3RoIGhhcmR3
YXJlIGFuZCBzb2Z0d2FyZSBkcmF3aW5nLAorICAgICAgICB3ZSBuZWVkIGEgY2FsbGJhY2sgYmVm
b3JlIGNvbXBvc2l0aW5nIHRoZSBsYXllciB0byBtYWtlIHN1cmUgdGhhdCB3ZSB1cGxvYWQgYW55
IHNvZnR3YXJlCisgICAgICAgIGRyYXduIHJlc3VsdHMgdG8gdGhlIHRleHR1cmUuICBUaGlzIHdp
bGwgZ28gYXdheSBhcyBzb29uIGFzIGltcGxlbWVudCBhbGwgZHJhdyBjYWxscworICAgICAgICBp
biBoYXJkd2FyZS4KKworICAgICAgICBUbyB0ZXN0LCBydW4gYW55IGNhbnZhcyBkZW1vIHRoYXQg
cnVucyBpbiBtaXhlZCBtb2RlIGFuZCB2ZXJpZmllcyB0aGF0IHRoZSBzb2Z0d2FyZSByZXN1bHRz
CisgICAgICAgIGFsd2F5cyBzaG93IHVwLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlQ29udGVudHMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OnNldFByZXBhcmVUZXh0dXJlQ2FsbGJhY2spOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQcmVwYXJlVGV4dHVyZUNhbGxiYWNrSW1wbDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlByZXBhcmVUZXh0dXJlQ2FsbGJhY2tJbXBsOjp3aWxsUHJlcGFy
ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6UHJlcGFyZVRleHR1cmVDYWxsYmFja0ltcGw6
OlByZXBhcmVUZXh0dXJlQ2FsbGJhY2tJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
Q29udGV4dFNraWE6OnNldEdyYXBoaWNzQ29udGV4dDNEKToKKwogMjAxMC0wOC0wOSAgTWFyY3Vz
IEJ1bGFjaCAgPGJ1bGFjaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcAppbmRleCBmMjkwZTY4MGQzMDkwOWY5N2UzNDU1
M2E1Mzc4NWM0OTE4ZDJiODhhLi43ZTczMmQxM2VlODI5ZmNmOGUzYzhmYTkzZmQ2YTIwZWUxZGVj
ZGNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
c0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTc1LDYgKzc1LDggQEAgdm9pZCBDYW52YXNM
YXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlQ29udGVudHModW5zaWduZWQgdGV4dHVyZUlkKQog
ICAgIH0KICAgICAvLyBVcGRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB0ZXh0dXJlIHVzZWQgYnkg
dGhlIGNvbXBvc2l0b3IuCiAgICAgaWYgKG1fY29udGVudHNEaXJ0eSkgeworICAgICAgICBpZiAo
bV9wcmVwYXJlVGV4dHVyZUNhbGxiYWNrKQorICAgICAgICAgICAgbV9wcmVwYXJlVGV4dHVyZUNh
bGxiYWNrLT53aWxsUHJlcGFyZVRleHR1cmUoKTsKICAgICAgICAgbV9jb250ZXh0LT5wcmVwYXJl
VGV4dHVyZSgpOwogICAgICAgICBtX2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKICAgICB9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hy
b21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJD
aHJvbWl1bS5oCmluZGV4IGEwMDI1YTQ2ZGQ4MDlkNDM2NzE0ODI5M2E0M2RlZjNiODRkZDFmN2Uu
Ljk4YmUyNzA0ZTE1NmI4ZWFmMjgyZDY2YTgwNGE0MmFiMjE4MThmOWIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1
bS5oCkBAIC01NCwxMSArNTQsMTggQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgc2V0U2hh
ZGVyUHJvZ3JhbUlkKHVuc2lnbmVkIHNoYWRlclByb2dyYW1JZCkgeyBtX3NoYWRlclByb2dyYW1J
ZCA9IHNoYWRlclByb2dyYW1JZDsgfQogCisgICAgY2xhc3MgUHJlcGFyZVRleHR1cmVDYWxsYmFj
ayA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZv
aWQgd2lsbFByZXBhcmVUZXh0dXJlKCkgPSAwOworICAgIH07CisgICAgdm9pZCBzZXRQcmVwYXJl
VGV4dHVyZUNhbGxiYWNrKFBhc3NPd25QdHI8UHJlcGFyZVRleHR1cmVDYWxsYmFjaz4gY2FsbGJh
Y2spIHsgbV9wcmVwYXJlVGV4dHVyZUNhbGxiYWNrID0gY2FsbGJhY2s7IH0KKwogcHJpdmF0ZToK
ICAgICBleHBsaWNpdCBDYW52YXNMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSog
b3duZXIpOwogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CiAgICAgdW5zaWduZWQg
bV90ZXh0dXJlSWQ7CiAgICAgYm9vbCBtX3RleHR1cmVDaGFuZ2VkOworICAgIE93blB0cjxQcmVw
YXJlVGV4dHVyZUNhbGxiYWNrPiBtX3ByZXBhcmVUZXh0dXJlQ2FsbGJhY2s7CiAKICAgICBzdGF0
aWMgdW5zaWduZWQgbV9zaGFkZXJQcm9ncmFtSWQ7CiB9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCmluZGV4IGIxNGM2
Y2QwNGNhMzBiZDQxNzEwMmU0MzU3MDYzYmVhY2FlMjIyY2IuLjBkZmU0OTRhZDc4NjgxODEzOGRl
MTk0Nzk5ZGZhNmNhNTZjZjBiZTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNp
bmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKKyNpbmNsdWRlICJDYW52YXNMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJOYXRpdmVJ
bWFnZVNraWEuaCIKQEAgLTIyMCw2ICsyMjEsMTIgQEAgUGxhdGZvcm1Db250ZXh0U2tpYTo6UGxh
dGZvcm1Db250ZXh0U2tpYShza2lhOjpQbGF0Zm9ybUNhbnZhcyogY2FudmFzKQogCiBQbGF0Zm9y
bUNvbnRleHRTa2lhOjp+UGxhdGZvcm1Db250ZXh0U2tpYSgpCiB7CisjaWYgVVNFKEdMRVMyX1JF
TkRFUklORykKKyAgICBpZiAobV9ncHVDYW52YXMpIHsKKyAgICAgICAgQ2FudmFzTGF5ZXJDaHJv
bWl1bSogbGF5ZXIgPSBzdGF0aWNfY2FzdDxDYW52YXNMYXllckNocm9taXVtKj4obV9ncHVDYW52
YXMtPmNvbnRleHQoKS0+cGxhdGZvcm1MYXllcigpKTsKKyAgICAgICAgbGF5ZXItPnNldFByZXBh
cmVUZXh0dXJlQ2FsbGJhY2soMCk7CisgICAgfQorI2VuZGlmCiB9CiAKIHZvaWQgUGxhdGZvcm1D
b250ZXh0U2tpYTo6c2V0Q2FudmFzKHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMpCkBAIC02
NzgsMTAgKzY4NSwyOCBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmFwcGx5QW50aUFsaWFz
ZWRDbGlwUGF0aHMoV1RGOjpWZWN0b3I8U2tQYXRoPiYgcGF0aHMpCiAKICNpZiBVU0UoR0xFUzJf
UkVOREVSSU5HKQogCitjbGFzcyBQcmVwYXJlVGV4dHVyZUNhbGxiYWNrSW1wbCA6IHB1YmxpYyBD
YW52YXNMYXllckNocm9taXVtOjpQcmVwYXJlVGV4dHVyZUNhbGxiYWNrIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxQcmVwYXJlVGV4dHVyZUNhbGxiYWNrSW1wbD4gY3JlYXRlKFBs
YXRmb3JtQ29udGV4dFNraWEqIHBjcykKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgUHJlcGFy
ZVRleHR1cmVDYWxsYmFja0ltcGwocGNzKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgd2ls
bFByZXBhcmVUZXh0dXJlKCkKKyAgICB7CisgICAgICAgIG1fcGNzLT5wcmVwYXJlRm9ySGFyZHdh
cmVEcmF3KCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBleHBsaWNpdCBQcmVwYXJlVGV4dHVyZUNh
bGxiYWNrSW1wbChQbGF0Zm9ybUNvbnRleHRTa2lhKiBwY3MpIDogbV9wY3MocGNzKSB7fQorICAg
IFBsYXRmb3JtQ29udGV4dFNraWEqIG1fcGNzOworfTsKKwogdm9pZCBQbGF0Zm9ybUNvbnRleHRT
a2lhOjpzZXRHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKIHsKICAgICBtX3VzZUdQVSA9IHRydWU7CiAgICAg
bV9ncHVDYW52YXMgPSBuZXcgR0xFUzJDYW52YXMoY29udGV4dCwgc2l6ZSk7CisgICAgQ2FudmFz
TGF5ZXJDaHJvbWl1bSogbGF5ZXIgPSBzdGF0aWNfY2FzdDxDYW52YXNMYXllckNocm9taXVtKj4o
Y29udGV4dC0+cGxhdGZvcm1MYXllcigpKTsKKyAgICBsYXllci0+c2V0UHJlcGFyZVRleHR1cmVD
YWxsYmFjayhQcmVwYXJlVGV4dHVyZUNhbGxiYWNrSW1wbDo6Y3JlYXRlKHRoaXMpKTsKIH0KIAog
dm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpwcmVwYXJlRm9yU29mdHdhcmVEcmF3KCkgY29uc3QK
</data>

          </attachment>
      

    </bug>

</bugzilla>