<?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>101828</bug_id>
          
          <creation_ts>2012-11-09 20:33:50 -0800</creation_ts>
          <short_desc>Improve the performance of rect transform</short_desc>
          <delta_ts>2012-11-16 22:30:46 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>dino</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>kling</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>763572</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-11-09 20:33:50 -0800</bug_when>
    <thetext>First step: improvement for all hardware.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763584</commentid>
    <comment_count>1</comment_count>
      <attachid>173434</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-11-09 21:09:44 -0800</bug_when>
    <thetext>Created attachment 173434
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768799</commentid>
    <comment_count>2</comment_count>
      <attachid>173434</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2012-11-15 18:22:52 -0800</bug_when>
    <thetext>Comment on attachment 173434
Patch

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

These changes seem very useful -- thanks for looking into this!  Both changes are effectively inlining the mapQuad/mapPoint logic to avoid the cost of the &quot;isIdentityOrTranslation()&quot; call.  Do you think we could make a helper function that didn&apos;t call this method, and have the full fledged mapQuad/mapPoint  check for identity, then call this internal function?

That way, we could reuse the same logic in both places without paying the high cost you identified in your change.

&gt; Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp:702
&gt; +    return result.boundingBox();

This is just an inline of mapQuad (and subsequent mapPoints) without the identity/translation check.  What if we had a mapQuadNoCheck (or mapQuadImpl) that we could call here (since we&apos;ve already tested for identity/translation).  Then we could share the code here and in the mapQuad call.

&gt; Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp:717
&gt; +    result.setP1(FloatPoint(x, y));

This is just an inline of mapPoint that doesn&apos;t do the identity check.  What if we made a mapPointNoCheck (or something) that could be used here, and inside the real &quot;mapPoint&quot; call?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768817</commentid>
    <comment_count>3</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-11-15 18:52:27 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 173434 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=173434&amp;action=review
&gt; 
&gt; These changes seem very useful -- thanks for looking into this!  Both changes are effectively inlining the mapQuad/mapPoint logic to avoid the cost of the &quot;isIdentityOrTranslation()&quot; call.  Do you think we could make a helper function that didn&apos;t call this method, and have the full fledged mapQuad/mapPoint  check for identity, then call this internal function?
&gt; 
&gt; That way, we could reuse the same logic in both places without paying the high cost you identified in your change.

The two function are a little different.
In the case of Quad, you really have 8 coordinates, for a rect, you only have 4. That matters because you can remove a number of relatively costly instructions.

The next step is to break into pieces to do fewer operation in the case of the rect. I could have done that in this patch but I wanted to keep it trivial (hoping for a fast review :)).

Then for ARM, I should implement them in assembly to take advantage of the structure we have in TransformationMatrix.

&gt; &gt; Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp:702
&gt; &gt; +    return result.boundingBox();
&gt; 
&gt; This is just an inline of mapQuad (and subsequent mapPoints) without the identity/translation check.  What if we had a mapQuadNoCheck (or mapQuadImpl) that we could call here (since we&apos;ve already tested for identity/translation).  Then we could share the code here and in the mapQuad call.

Check again, this is not exactly inline of mapQuad :)

&gt; &gt; Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp:717
&gt; &gt; +    result.setP1(FloatPoint(x, y));
&gt; 
&gt; This is just an inline of mapPoint that doesn&apos;t do the identity check.  What if we made a mapPointNoCheck (or something) that could be used here, and inside the real &quot;mapPoint&quot; call?

Yep, that sounds like a good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769781</commentid>
    <comment_count>4</comment_count>
      <attachid>174783</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-11-16 16:57:45 -0800</bug_when>
    <thetext>Created attachment 174783
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769791</commentid>
    <comment_count>5</comment_count>
      <attachid>174783</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-16 17:11:02 -0800</bug_when>
    <thetext>Comment on attachment 174783
Patch

Attachment 174783 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14873320</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769792</commentid>
    <comment_count>6</comment_count>
      <attachid>174783</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-16 17:12:40 -0800</bug_when>
    <thetext>Comment on attachment 174783
Patch

Attachment 174783 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14857827</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769795</commentid>
    <comment_count>7</comment_count>
      <attachid>174783</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2012-11-16 17:23:08 -0800</bug_when>
    <thetext>Comment on attachment 174783
Patch

Attachment 174783 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/14876101</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769809</commentid>
    <comment_count>8</comment_count>
      <attachid>174783</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-16 17:54:41 -0800</bug_when>
    <thetext>Comment on attachment 174783
Patch

Attachment 174783 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14860460</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769841</commentid>
    <comment_count>9</comment_count>
      <attachid>174783</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-11-16 18:39:09 -0800</bug_when>
    <thetext>Comment on attachment 174783
Patch

Forgot to close a parenthesis on the update.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769844</commentid>
    <comment_count>10</comment_count>
      <attachid>174783</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-16 18:46:58 -0800</bug_when>
    <thetext>Comment on attachment 174783
Patch

Attachment 174783 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14861409</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769852</commentid>
    <comment_count>11</comment_count>
      <attachid>174783</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-16 19:04:16 -0800</bug_when>
    <thetext>Comment on attachment 174783
Patch

Attachment 174783 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14857842</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769861</commentid>
    <comment_count>12</comment_count>
      <attachid>174798</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-11-16 19:42:16 -0800</bug_when>
    <thetext>Created attachment 174798
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769868</commentid>
    <comment_count>13</comment_count>
      <attachid>174798</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-11-16 19:59:26 -0800</bug_when>
    <thetext>Comment on attachment 174798
Patch

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

&gt; Source/WebCore/platform/graphics/transforms/TransformationMatrix.h:382
&gt; +    FloatPoint mapPointImpl(const FloatPoint&amp; sourcePoint) const

I&apos;m not a huge fan of mapPointImpl(). Maybe internalMapPoint()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769894</commentid>
    <comment_count>14</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-11-16 22:09:09 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebCore/platform/graphics/transforms/TransformationMatrix.h:382
&gt; &gt; +    FloatPoint mapPointImpl(const FloatPoint&amp; sourcePoint) const
&gt; 
&gt; I&apos;m not a huge fan of mapPointImpl(). Maybe internalMapPoint()?

Sounds good to me. I&apos;ll update the patch.

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769903</commentid>
    <comment_count>15</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-11-16 22:30:46 -0800</bug_when>
    <thetext>Committed r135038: &lt;http://trac.webkit.org/changeset/135038&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173434</attachid>
            <date>2012-11-09 21:09:44 -0800</date>
            <delta_ts>2012-11-16 16:57:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101828-20121109210751.patch</filename>
            <type>text/plain</type>
            <size>3317</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0MTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTQxODE3YzZmZjRmZWRj
MDYxZjMzMmU1NDEyN2EwMmMxNjY4ZWM0YS4uNWZjOTBiZWNmMGI3ZjNhMjQ4NDRiYjAyYTlhYjIz
YWEwOTUyNWVkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTExLTA5ICBCZW5q
YW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBJbXByb3ZlIHRo
ZSBwZXJmb3JtYW5jZSBvZiByZWN0IHRyYW5zZm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTWFwcGluZyBhIHJlY3QgYW5kIGEgcXVhZCBieSBhIHRy
YW5zZm9ybSBpcyBhIGNvbW1vbiBvcGVyYXRpb24gYmVjYXVzZQorICAgICAgICB3ZSB1c2UgaXQg
dG8gcmVjb21wdXRlIHRoZSByZXBhaW50IHJlY3QsIG92ZXJmbG93IHJlY3QsIGV0Yy4KKworICAg
ICAgICBUaGUgd2F5IGl0IHdhcyBkb25lLCBpcyBieSB0cmFuc2Zvcm1pbmcgdGhyb3VnaCBtYXBS
ZWN0KCktPm1hcFF1YWQoKS0+NCB0aW1lcyBtYXBQb2ludCgpLgorICAgICAgICBFYWNoIG9mIHRo
b3NlIGZ1bmN0aW9ucyB0ZXN0cyBpc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpIHdoaWNoIGhhcyB0
byByZWFkIHRoZSB3aG9sZSBtYXRyaXgKKyAgICAgICAgYW5kIHBlcmZvcm0gbWFueSBjb21wYXJp
c29uLgorICAgICAgICBCZWNhdXNlIG9mIHRoYXQsIHRoZSBzaW1wbGUgbWFwcGluZyBvZiBhIHJl
Y3Qgd2FzIGxvYWRpbmcgYW5kIGNoZWNraW5nIHRoZSBtYXRyaXggNSB0aW1lcworICAgICAgICB0
b28gbWFueS4KKworICAgICAgICBUaGlzIHBhdGNoIGp1c3QgY3V0IHRoZSBpbnRlcm1lZGlhcnkg
Y2FsbHMuCisKKyAgICAgICAgT24gQVJNLCBwdXR0aW5nIHRoZSBvcGVyYXRpb24gdG9nZXRoZXIg
YWxzbyBoYXMgdGhlIGFkdmFudGFnZSBvZiBsb2FkaW5nIHRoZSBtYXRyaXggCisgICAgICAgIG9u
bHkgb25jZSBpbiByZWdpc3RlcnMgYW5kIHJldXNpbmcgaXQgZm9yIGV2ZXJ5IHBvaW50LgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJp
eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUXVhZCk6CisKIDIw
MTItMTEtMDkgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBTaW1w
bGVGb250RGF0YTo6Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzIHNldHMgc29tZSBhdHRyaWJ1dGVzIHRv
IHRoZWlyIGRlZmF1bHQgdmFsdWVzLCBidXQgc2hvdWxkbuKAmXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRy
aXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFu
c2Zvcm1hdGlvbk1hdHJpeC5jcHAKaW5kZXggNGIyMzdmOGNmNTVjODRjODFlNjk3MGM5NTI0NjFl
M2Q1YTkyZGRmMC4uNTAyYWI1ZGI5YzM4ZmIzYzgxMTg5NTZkZDY4MTVhY2UyMDM4MjA1ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFu
c2Zvcm1hdGlvbk1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAKQEAgLTY4Miw4ICs2ODIsMjQg
QEAgRmxvYXRSZWN0IFRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcikgY29uc3QKICAgICAgICAgcmV0dXJuIG1hcHBlZFJlY3Q7CiAgICAgfQogCi0gICAgRmxv
YXRRdWFkIHJlc3VsdFF1YWQgPSBtYXBRdWFkKEZsb2F0UXVhZChyKSk7Ci0gICAgcmV0dXJuIHJl
c3VsdFF1YWQuYm91bmRpbmdCb3goKTsKKyAgICBGbG9hdFF1YWQgcmVzdWx0OworICAgIGRvdWJs
ZSB4LCB5OworCisgICAgbXVsdFZlY01hdHJpeChyLngoKSwgci55KCksIHgsIHkpOworICAgIHJl
c3VsdC5zZXRQMShGbG9hdFBvaW50KHgsIHkpKTsKKworICAgIGZsb2F0IG1heFggPSByLm1heFgo
KTsKKyAgICBtdWx0VmVjTWF0cml4KG1heFgsIHIueSgpLCB4LCB5KTsKKyAgICByZXN1bHQuc2V0
UDIoRmxvYXRQb2ludCh4LCB5KSk7CisKKyAgICBmbG9hdCBtYXhZID0gci5tYXhZKCk7CisgICAg
bXVsdFZlY01hdHJpeChtYXhYLCBtYXhZLCB4LCB5KTsKKyAgICByZXN1bHQuc2V0UDMoRmxvYXRQ
b2ludCh4LCB5KSk7CisKKyAgICBtdWx0VmVjTWF0cml4KHIueCgpLCBtYXhZLCB4LCB5KTsKKyAg
ICByZXN1bHQuc2V0UDQoRmxvYXRQb2ludCh4LCB5KSk7CisKKyAgICByZXR1cm4gcmVzdWx0LmJv
dW5kaW5nQm94KCk7CiB9CiAKIEZsb2F0UXVhZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUXVh
ZChjb25zdCBGbG9hdFF1YWQmIHEpIGNvbnN0CkBAIC02OTUsMTAgKzcxMSwxOSBAQCBGbG9hdFF1
YWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFF1YWQoY29uc3QgRmxvYXRRdWFkJiBxKSBjb25z
dAogICAgIH0KIAogICAgIEZsb2F0UXVhZCByZXN1bHQ7Ci0gICAgcmVzdWx0LnNldFAxKG1hcFBv
aW50KHEucDEoKSkpOwotICAgIHJlc3VsdC5zZXRQMihtYXBQb2ludChxLnAyKCkpKTsKLSAgICBy
ZXN1bHQuc2V0UDMobWFwUG9pbnQocS5wMygpKSk7Ci0gICAgcmVzdWx0LnNldFA0KG1hcFBvaW50
KHEucDQoKSkpOworICAgIGRvdWJsZSB4LCB5OworCisgICAgbXVsdFZlY01hdHJpeChxLnAxKCku
eCgpLCBxLnAxKCkueSgpLCB4LCB5KTsKKyAgICByZXN1bHQuc2V0UDEoRmxvYXRQb2ludCh4LCB5
KSk7CisKKyAgICBtdWx0VmVjTWF0cml4KHEucDIoKS54KCksIHEucDIoKS55KCksIHgsIHkpOwor
ICAgIHJlc3VsdC5zZXRQMihGbG9hdFBvaW50KHgsIHkpKTsKKworICAgIG11bHRWZWNNYXRyaXgo
cS5wMygpLngoKSwgcS5wMygpLnkoKSwgeCwgeSk7CisgICAgcmVzdWx0LnNldFAzKEZsb2F0UG9p
bnQoeCwgeSkpOworCisgICAgbXVsdFZlY01hdHJpeChxLnA0KCkueCgpLCBxLnA0KCkueSgpLCB4
LCB5KTsKKyAgICByZXN1bHQuc2V0UDQoRmxvYXRQb2ludCh4LCB5KSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174783</attachid>
            <date>2012-11-16 16:57:45 -0800</date>
            <delta_ts>2012-11-16 19:42:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101828-20121116165540.patch</filename>
            <type>text/plain</type>
            <size>6155</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MDE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmQ3YTQyNjM5YmNmNTBi
NThlZDdlMWZjNDk2NWI1ZTI0ZjU5OTI2ZS4uZDhiZjQyYjA2NGE2MmIwZTA5ZDA1NzdhNzU1ZjBm
ODU1ZjdkMjBkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTExLTE2ICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIEltcHJvdmUgdGhl
IHBlcmZvcm1hbmNlIG9mIHJlY3QgdHJhbnNmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE4MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNYXBwaW5nIGEgcmVjdCBhbmQgYSBxdWFkIGJ5IGEgdHJh
bnNmb3JtIGlzIGEgY29tbW9uIG9wZXJhdGlvbiBiZWNhdXNlCisgICAgICAgIHdlIHVzZSBpdCB0
byByZWNvbXB1dGUgdGhlIHJlcGFpbnQgcmVjdCwgb3ZlcmZsb3cgcmVjdCwgZXRjLgorCisgICAg
ICAgIFRoZSB3YXkgaXQgd2FzIGRvbmUsIGlzIGJ5IHRyYW5zZm9ybWluZyB0aHJvdWdoIG1hcFJl
Y3QoKS0+bWFwUXVhZCgpLT40IHRpbWVzIG1hcFBvaW50KCkuCisgICAgICAgIEVhY2ggb2YgdGhv
c2UgZnVuY3Rpb25zIHRlc3RzIGlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkgd2hpY2ggaGFzIHRv
IHJlYWQgdGhlIHdob2xlIG1hdHJpeAorICAgICAgICBhbmQgcGVyZm9ybSBtYW55IGNvbXBhcmlz
b24uCisgICAgICAgIEJlY2F1c2Ugb2YgdGhhdCwgdGhlIHNpbXBsZSBtYXBwaW5nIG9mIGEgcmVj
dCB3YXMgbG9hZGluZyBhbmQgY2hlY2tpbmcgdGhlIG1hdHJpeCA1IHRpbWVzCisgICAgICAgIHRv
byBtYW55LgorCisgICAgICAgIFRoaXMgcGF0Y2gganVzdCBjdXQgdGhlIGludGVybWVkaWFyeSBj
YWxscy4KKworICAgICAgICBPbiBBUk0sIHB1dHRpbmcgdGhlIG9wZXJhdGlvbiB0b2dldGhlciBh
bHNvIGhhcyB0aGUgYWR2YW50YWdlIG9mIGxvYWRpbmcgdGhlIG1hdHJpeAorICAgICAgICBvbmx5
IG9uY2UgaW4gcmVnaXN0ZXJzIGFuZCByZXVzaW5nIGl0IGZvciBldmVyeSBwb2ludC4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXgu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFBvaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBSZWN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4Lmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0
cml4OjptYXBQb2ludEltcGwpOiBOZXcgY29udmVuaWVuY2UgZnVuY3Rpb24gdG8gcGVyZm9ybSB0
aGUKKyAgICAgICAgcG9pbnQgcHJvamVjdCB3aXRob3V0IGRvaW5nIGlzSWRlbnRpdHlPclRyYW5z
bGF0aW9uKCkuCisKIDIwMTItMTEtMTYgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZW1vdmUgRU5BQkxFX0NTU19ISUVSQVJDSElFUyBzaW5jZSBpdCdzIG5vIGxv
bmdlciBpbiB1c2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAKaW5kZXgg
NGIyMzdmOGNmNTVjODRjODFlNjk3MGM5NTI0NjFlM2Q1YTkyZGRmMC4uN2ZhMWEzNWY0YjlkNjc0
NDczYzI2NzJlZDg0NDEzMDliZjZiNmJlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlv
bk1hdHJpeC5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1h
dHJpeC5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRQ
b2ludDNELmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgi
CiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAtNjQ3LDkgKzY0Niw3IEBAIEZsb2F0UG9pbnQgVHJh
bnNmb3JtYXRpb25NYXRyaXg6Om1hcFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApIGNvbnN0CiAg
ICAgaWYgKGlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpCiAgICAgICAgIHJldHVybiBGbG9hdFBv
aW50KHAueCgpICsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWF0cml4WzNdWzBdKSwgcC55KCkgKyBz
dGF0aWNfY2FzdDxmbG9hdD4obV9tYXRyaXhbM11bMV0pKTsKIAotICAgIGRvdWJsZSB4LCB5Owot
ICAgIG11bHRWZWNNYXRyaXgocC54KCksIHAueSgpLCB4LCB5KTsKLSAgICByZXR1cm4gRmxvYXRQ
b2ludChzdGF0aWNfY2FzdDxmbG9hdD4oeCksIHN0YXRpY19jYXN0PGZsb2F0Pih5KSk7CisgICAg
cmV0dXJuIG1hcFBvaW50SW1wbChwKTsKIH0KIAogRmxvYXRQb2ludDNEIFRyYW5zZm9ybWF0aW9u
TWF0cml4OjptYXBQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHApIGNvbnN0CkBAIC02NTksOSAr
NjU2LDcgQEAgRmxvYXRQb2ludDNEIFRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBQb2ludChjb25z
dCBGbG9hdFBvaW50M0QmIHApIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC55
KCkgKyBzdGF0aWNfY2FzdDxmbG9hdD4obV9tYXRyaXhbM11bMV0pLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHAueigpICsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWF0cml4WzNdWzJdKSk7
CiAKLSAgICBkb3VibGUgeCwgeSwgejsKLSAgICBtdWx0VmVjTWF0cml4KHAueCgpLCBwLnkoKSwg
cC56KCksIHgsIHksIHopOwotICAgIHJldHVybiBGbG9hdFBvaW50M0Qoc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHgpLCBzdGF0aWNfY2FzdDxmbG9hdD4oeSksIHN0YXRpY19jYXN0PGZsb2F0Pih6KSk7Cisg
ICAgcmV0dXJuIG1hcFBvaW50SW1wbChwKTsKIH0KIAogSW50UmVjdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6bWFwUmVjdChjb25zdCBJbnRSZWN0ICZyZWN0KSBjb25zdApAQCAtNjgyLDggKzY3Nywx
NiBAQCBGbG9hdFJlY3QgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByKSBjb25zdAogICAgICAgICByZXR1cm4gbWFwcGVkUmVjdDsKICAgICB9CiAKLSAgICBG
bG9hdFF1YWQgcmVzdWx0UXVhZCA9IG1hcFF1YWQoRmxvYXRRdWFkKHIpKTsKLSAgICByZXR1cm4g
cmVzdWx0UXVhZC5ib3VuZGluZ0JveCgpOworICAgIEZsb2F0UXVhZCByZXN1bHQ7CisKKyAgICBm
bG9hdCBtYXhYID0gci5tYXhYKCk7CisgICAgZmxvYXQgbWF4WSA9IHIubWF4WSgpOworICAgIHJl
c3VsdC5zZXRQMShtYXBQb2ludEltcGwoRmxvYXRQb2ludChyLngoKSwgci55KCkpKTsKKyAgICBy
ZXN1bHQuc2V0UDIobWFwUG9pbnRJbXBsKEZsb2F0UG9pbnQobWF4WCwgci55KCkpKTsKKyAgICBy
ZXN1bHQuc2V0UDMobWFwUG9pbnRJbXBsKEZsb2F0UG9pbnQobWF4WCwgbWF4WSkpOworICAgIHJl
c3VsdC5zZXRQNChtYXBQb2ludEltcGwoRmxvYXRQb2ludChyLngoKSwgbWF4WSkpOworCisgICAg
cmV0dXJuIHJlc3VsdC5ib3VuZGluZ0JveCgpOwogfQogCiBGbG9hdFF1YWQgVHJhbnNmb3JtYXRp
b25NYXRyaXg6Om1hcFF1YWQoY29uc3QgRmxvYXRRdWFkJiBxKSBjb25zdApAQCAtNjk1LDEwICs2
OTgsMTAgQEAgRmxvYXRRdWFkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBRdWFkKGNvbnN0IEZs
b2F0UXVhZCYgcSkgY29uc3QKICAgICB9CiAKICAgICBGbG9hdFF1YWQgcmVzdWx0OwotICAgIHJl
c3VsdC5zZXRQMShtYXBQb2ludChxLnAxKCkpKTsKLSAgICByZXN1bHQuc2V0UDIobWFwUG9pbnQo
cS5wMigpKSk7Ci0gICAgcmVzdWx0LnNldFAzKG1hcFBvaW50KHEucDMoKSkpOwotICAgIHJlc3Vs
dC5zZXRQNChtYXBQb2ludChxLnA0KCkpKTsKKyAgICByZXN1bHQuc2V0UDEobWFwUG9pbnRJbXBs
KHEucDEoKSkpOworICAgIHJlc3VsdC5zZXRQMihtYXBQb2ludEltcGwocS5wMigpKSk7CisgICAg
cmVzdWx0LnNldFAzKG1hcFBvaW50SW1wbChxLnAzKCkpKTsKKyAgICByZXN1bHQuc2V0UDQobWFw
UG9pbnRJbXBsKHEucDQoKSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRp
b25NYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
VHJhbnNmb3JtYXRpb25NYXRyaXguaAppbmRleCA4YjRkNjgzNjRmZDhmOGNhM2E5OTRiNWYwNDYz
M2ZhODNjYzg4NjAzLi42YWE3MjExYTlhNDA2NzFjNTEzY2E1Mzk0MTM3Mjg0Y2VjNTRmZGEzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1Ry
YW5zZm9ybWF0aW9uTWF0cml4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCkBAIC0yNyw2ICsyNyw3IEBACiAj
ZGVmaW5lIFRyYW5zZm9ybWF0aW9uTWF0cml4X2gKIAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
KyNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1
ZGUgPHN0cmluZy5oPiAvL2ZvciBtZW1jcHkKICNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5o
PgpAQCAtNjUsNyArNjYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBZmZpbmVUcmFu
c2Zvcm07CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgTGF5b3V0UmVjdDsKLWNsYXNzIEZsb2F0UG9p
bnQzRDsKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEZsb2F0UXVhZDsKIApAQCAtMzc5LDkgKzM3
OSwyNCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIC8vIG11bHRpcGx5IHBhc3NlZCAyRCBwb2lu
dCBieSBtYXRyaXggKGFzc3VtZSB6PTApCiAgICAgdm9pZCBtdWx0VmVjTWF0cml4KGRvdWJsZSB4
LCBkb3VibGUgeSwgZG91YmxlJiBkc3RYLCBkb3VibGUmIGRzdFkpIGNvbnN0OworICAgIEZsb2F0
UG9pbnQgbWFwUG9pbnRJbXBsKGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZVBvaW50KSBjb25zdAor
ICAgIHsKKyAgICAgICAgZG91YmxlIHJlc3VsdFg7CisgICAgICAgIGRvdWJsZSByZXN1bHRZOwor
ICAgICAgICBtdWx0VmVjTWF0cml4KHNvdXJjZVBvaW50LngoKSwgc291cmNlUG9pbnQueSgpLCBy
ZXN1bHRYLCByZXN1bHRZKTsKKyAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHJlc3VsdFgpLCBzdGF0aWNfY2FzdDxmbG9hdD4ocmVzdWx0WSkpOworICAgIH0KIAog
ICAgIC8vIG11bHRpcGx5IHBhc3NlZCAzRCBwb2ludCBieSBtYXRyaXgKICAgICB2b2lkIG11bHRW
ZWNNYXRyaXgoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeiwgZG91YmxlJiBkc3RYLCBkb3Vi
bGUmIGRzdFksIGRvdWJsZSYgZHN0WikgY29uc3Q7CisgICAgRmxvYXRQb2ludDNEIG1hcFBvaW50
SW1wbChjb25zdCBGbG9hdFBvaW50M0QmIHNvdXJjZVBvaW50KSBjb25zdAorICAgIHsKKyAgICAg
ICAgZG91YmxlIHJlc3VsdFg7CisgICAgICAgIGRvdWJsZSByZXN1bHRZOworICAgICAgICBkb3Vi
bGUgcmVzdWx0WjsKKyAgICAgICAgbXVsdFZlY01hdHJpeChzb3VyY2VQb2ludC54KCksIHNvdXJj
ZVBvaW50LnkoKSwgc291cmNlUG9pbnQueigpLCByZXN1bHRYLCByZXN1bHRZLCByZXN1bHRaKTsK
KyAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQzRChzdGF0aWNfY2FzdDxmbG9hdD4ocmVzdWx0WCks
IHN0YXRpY19jYXN0PGZsb2F0PihyZXN1bHRZKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJlc3VsdFop
KTsKKyAgICB9CiAKICAgICB2b2lkIHNldE1hdHJpeChjb25zdCBNYXRyaXg0IG0pCiAgICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174798</attachid>
            <date>2012-11-16 19:42:16 -0800</date>
            <delta_ts>2012-11-16 19:59:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101828-20121116194010.patch</filename>
            <type>text/plain</type>
            <size>6161</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MDI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzI5NTdjMTljZTkxZDZm
OTUwODYzZThiMjBlOTIxNjQ2NWIzZDg5OS4uOWMyOWI4ZjFhZjBjNmY0Y2I5NzAwNjg5YzRiNjJm
ZDhlYjc0OWYwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTExLTE2ICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIEltcHJvdmUgdGhl
IHBlcmZvcm1hbmNlIG9mIHJlY3QgdHJhbnNmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE4MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNYXBwaW5nIGEgcmVjdCBhbmQgYSBxdWFkIGJ5IGEgdHJh
bnNmb3JtIGlzIGEgY29tbW9uIG9wZXJhdGlvbiBiZWNhdXNlCisgICAgICAgIHdlIHVzZSBpdCB0
byByZWNvbXB1dGUgdGhlIHJlcGFpbnQgcmVjdCwgb3ZlcmZsb3cgcmVjdCwgZXRjLgorCisgICAg
ICAgIFRoZSB3YXkgaXQgd2FzIGRvbmUsIGlzIGJ5IHRyYW5zZm9ybWluZyB0aHJvdWdoIG1hcFJl
Y3QoKS0+bWFwUXVhZCgpLT40IHRpbWVzIG1hcFBvaW50KCkuCisgICAgICAgIEVhY2ggb2YgdGhv
c2UgZnVuY3Rpb25zIHRlc3RzIGlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkgd2hpY2ggaGFzIHRv
IHJlYWQgdGhlIHdob2xlIG1hdHJpeAorICAgICAgICBhbmQgcGVyZm9ybSBtYW55IGNvbXBhcmlz
b24uCisgICAgICAgIEJlY2F1c2Ugb2YgdGhhdCwgdGhlIHNpbXBsZSBtYXBwaW5nIG9mIGEgcmVj
dCB3YXMgbG9hZGluZyBhbmQgY2hlY2tpbmcgdGhlIG1hdHJpeCA1IHRpbWVzCisgICAgICAgIHRv
byBtYW55LgorCisgICAgICAgIFRoaXMgcGF0Y2gganVzdCBjdXQgdGhlIGludGVybWVkaWFyeSBj
YWxscy4KKworICAgICAgICBPbiBBUk0sIHB1dHRpbmcgdGhlIG9wZXJhdGlvbiB0b2dldGhlciBh
bHNvIGhhcyB0aGUgYWR2YW50YWdlIG9mIGxvYWRpbmcgdGhlIG1hdHJpeAorICAgICAgICBvbmx5
IG9uY2UgaW4gcmVnaXN0ZXJzIGFuZCByZXVzaW5nIGl0IGZvciBldmVyeSBwb2ludC4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXgu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFBvaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBSZWN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4Lmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0
cml4OjptYXBQb2ludEltcGwpOiBOZXcgY29udmVuaWVuY2UgZnVuY3Rpb24gdG8gcGVyZm9ybSB0
aGUKKyAgICAgICAgcG9pbnQgcHJvamVjdCB3aXRob3V0IGRvaW5nIGlzSWRlbnRpdHlPclRyYW5z
bGF0aW9uKCkuCisKIDIwMTItMTEtMTYgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgRml4IG92ZXJsYXkgc2Nyb2xsYmFyIHBhaW50aW5nIGluIGNvbXBv
c2l0aW5nIGxheWVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcAppbmRl
eCA0YjIzN2Y4Y2Y1NWM4NGM4MWU2OTcwYzk1MjQ2MWUzZDVhOTJkZGYwLi45MGUwYTliODJjOWQ5
ZDdhMGFmMjFmNDllZDk5NjQ5NTllYWRkMmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0
aW9uTWF0cml4LmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9u
TWF0cml4LmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9h
dFBvaW50M0QuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQu
aCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCkBAIC02NDcsOSArNjQ2LDcgQEAgRmxvYXRQb2ludCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QK
ICAgICBpZiAoaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSkKICAgICAgICAgcmV0dXJuIEZsb2F0
UG9pbnQocC54KCkgKyBzdGF0aWNfY2FzdDxmbG9hdD4obV9tYXRyaXhbM11bMF0pLCBwLnkoKSAr
IHN0YXRpY19jYXN0PGZsb2F0PihtX21hdHJpeFszXVsxXSkpOwogCi0gICAgZG91YmxlIHgsIHk7
Ci0gICAgbXVsdFZlY01hdHJpeChwLngoKSwgcC55KCksIHgsIHkpOwotICAgIHJldHVybiBGbG9h
dFBvaW50KHN0YXRpY19jYXN0PGZsb2F0Pih4KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHkpKTsKKyAg
ICByZXR1cm4gbWFwUG9pbnRJbXBsKHApOwogfQogCiBGbG9hdFBvaW50M0QgVHJhbnNmb3JtYXRp
b25NYXRyaXg6Om1hcFBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgcCkgY29uc3QKQEAgLTY1OSw5
ICs2NTYsNyBAQCBGbG9hdFBvaW50M0QgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFBvaW50KGNv
bnN0IEZsb2F0UG9pbnQzRCYgcCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
LnkoKSArIHN0YXRpY19jYXN0PGZsb2F0PihtX21hdHJpeFszXVsxXSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcC56KCkgKyBzdGF0aWNfY2FzdDxmbG9hdD4obV9tYXRyaXhbM11bMl0p
KTsKIAotICAgIGRvdWJsZSB4LCB5LCB6OwotICAgIG11bHRWZWNNYXRyaXgocC54KCksIHAueSgp
LCBwLnooKSwgeCwgeSwgeik7Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQzRChzdGF0aWNfY2FzdDxm
bG9hdD4oeCksIHN0YXRpY19jYXN0PGZsb2F0Pih5KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHopKTsK
KyAgICByZXR1cm4gbWFwUG9pbnRJbXBsKHApOwogfQogCiBJbnRSZWN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4OjptYXBSZWN0KGNvbnN0IEludFJlY3QgJnJlY3QpIGNvbnN0CkBAIC02ODIsOCArNjc3
LDE2IEBAIEZsb2F0UmVjdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUmVjdChjb25zdCBGbG9h
dFJlY3QmIHIpIGNvbnN0CiAgICAgICAgIHJldHVybiBtYXBwZWRSZWN0OwogICAgIH0KIAotICAg
IEZsb2F0UXVhZCByZXN1bHRRdWFkID0gbWFwUXVhZChGbG9hdFF1YWQocikpOwotICAgIHJldHVy
biByZXN1bHRRdWFkLmJvdW5kaW5nQm94KCk7CisgICAgRmxvYXRRdWFkIHJlc3VsdDsKKworICAg
IGZsb2F0IG1heFggPSByLm1heFgoKTsKKyAgICBmbG9hdCBtYXhZID0gci5tYXhZKCk7CisgICAg
cmVzdWx0LnNldFAxKG1hcFBvaW50SW1wbChGbG9hdFBvaW50KHIueCgpLCByLnkoKSkpKTsKKyAg
ICByZXN1bHQuc2V0UDIobWFwUG9pbnRJbXBsKEZsb2F0UG9pbnQobWF4WCwgci55KCkpKSk7Cisg
ICAgcmVzdWx0LnNldFAzKG1hcFBvaW50SW1wbChGbG9hdFBvaW50KG1heFgsIG1heFkpKSk7Cisg
ICAgcmVzdWx0LnNldFA0KG1hcFBvaW50SW1wbChGbG9hdFBvaW50KHIueCgpLCBtYXhZKSkpOwor
CisgICAgcmV0dXJuIHJlc3VsdC5ib3VuZGluZ0JveCgpOwogfQogCiBGbG9hdFF1YWQgVHJhbnNm
b3JtYXRpb25NYXRyaXg6Om1hcFF1YWQoY29uc3QgRmxvYXRRdWFkJiBxKSBjb25zdApAQCAtNjk1
LDEwICs2OTgsMTAgQEAgRmxvYXRRdWFkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBRdWFkKGNv
bnN0IEZsb2F0UXVhZCYgcSkgY29uc3QKICAgICB9CiAKICAgICBGbG9hdFF1YWQgcmVzdWx0Owot
ICAgIHJlc3VsdC5zZXRQMShtYXBQb2ludChxLnAxKCkpKTsKLSAgICByZXN1bHQuc2V0UDIobWFw
UG9pbnQocS5wMigpKSk7Ci0gICAgcmVzdWx0LnNldFAzKG1hcFBvaW50KHEucDMoKSkpOwotICAg
IHJlc3VsdC5zZXRQNChtYXBQb2ludChxLnA0KCkpKTsKKyAgICByZXN1bHQuc2V0UDEobWFwUG9p
bnRJbXBsKHEucDEoKSkpOworICAgIHJlc3VsdC5zZXRQMihtYXBQb2ludEltcGwocS5wMigpKSk7
CisgICAgcmVzdWx0LnNldFAzKG1hcFBvaW50SW1wbChxLnAzKCkpKTsKKyAgICByZXN1bHQuc2V0
UDQobWFwUG9pbnRJbXBsKHEucDQoKSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNm
b3JtYXRpb25NYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguaAppbmRleCA4YjRkNjgzNjRmZDhmOGNhM2E5OTRi
NWYwNDYzM2ZhODNjYzg4NjAzLi42YWE3MjExYTlhNDA2NzFjNTEzY2E1Mzk0MTM3Mjg0Y2VjNTRm
ZGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCkBAIC0yNyw2ICsyNyw3
IEBACiAjZGVmaW5lIFRyYW5zZm9ybWF0aW9uTWF0cml4X2gKIAogI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgog
I2luY2x1ZGUgPHN0cmluZy5oPiAvL2ZvciBtZW1jcHkKICNpbmNsdWRlIDx3dGYvRmFzdEFsbG9j
QmFzZS5oPgpAQCAtNjUsNyArNjYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBZmZp
bmVUcmFuc2Zvcm07CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgTGF5b3V0UmVjdDsKLWNsYXNzIEZs
b2F0UG9pbnQzRDsKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEZsb2F0UXVhZDsKIApAQCAtMzc5
LDkgKzM3OSwyNCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIC8vIG11bHRpcGx5IHBhc3NlZCAy
RCBwb2ludCBieSBtYXRyaXggKGFzc3VtZSB6PTApCiAgICAgdm9pZCBtdWx0VmVjTWF0cml4KGRv
dWJsZSB4LCBkb3VibGUgeSwgZG91YmxlJiBkc3RYLCBkb3VibGUmIGRzdFkpIGNvbnN0OworICAg
IEZsb2F0UG9pbnQgbWFwUG9pbnRJbXBsKGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZVBvaW50KSBj
b25zdAorICAgIHsKKyAgICAgICAgZG91YmxlIHJlc3VsdFg7CisgICAgICAgIGRvdWJsZSByZXN1
bHRZOworICAgICAgICBtdWx0VmVjTWF0cml4KHNvdXJjZVBvaW50LngoKSwgc291cmNlUG9pbnQu
eSgpLCByZXN1bHRYLCByZXN1bHRZKTsKKyAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHJlc3VsdFgpLCBzdGF0aWNfY2FzdDxmbG9hdD4ocmVzdWx0WSkpOworICAg
IH0KIAogICAgIC8vIG11bHRpcGx5IHBhc3NlZCAzRCBwb2ludCBieSBtYXRyaXgKICAgICB2b2lk
IG11bHRWZWNNYXRyaXgoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeiwgZG91YmxlJiBkc3RY
LCBkb3VibGUmIGRzdFksIGRvdWJsZSYgZHN0WikgY29uc3Q7CisgICAgRmxvYXRQb2ludDNEIG1h
cFBvaW50SW1wbChjb25zdCBGbG9hdFBvaW50M0QmIHNvdXJjZVBvaW50KSBjb25zdAorICAgIHsK
KyAgICAgICAgZG91YmxlIHJlc3VsdFg7CisgICAgICAgIGRvdWJsZSByZXN1bHRZOworICAgICAg
ICBkb3VibGUgcmVzdWx0WjsKKyAgICAgICAgbXVsdFZlY01hdHJpeChzb3VyY2VQb2ludC54KCks
IHNvdXJjZVBvaW50LnkoKSwgc291cmNlUG9pbnQueigpLCByZXN1bHRYLCByZXN1bHRZLCByZXN1
bHRaKTsKKyAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQzRChzdGF0aWNfY2FzdDxmbG9hdD4ocmVz
dWx0WCksIHN0YXRpY19jYXN0PGZsb2F0PihyZXN1bHRZKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJl
c3VsdFopKTsKKyAgICB9CiAKICAgICB2b2lkIHNldE1hdHJpeChjb25zdCBNYXRyaXg0IG0pCiAg
ICAgewo=
</data>
<flag name="review"
          id="190005"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>