<?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>84289</bug_id>
          
          <creation_ts>2012-04-18 15:17:06 -0700</creation_ts>
          <short_desc>[chromium] Clip TransparencyWin to prevent OOM from large Skia canvas</short_desc>
          <delta_ts>2012-04-20 15:36:04 -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>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="Adrienne Walker">enne</reporter>
          <assigned_to name="Adrienne Walker">enne</assigned_to>
          <cc>brettw</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>605145</commentid>
    <comment_count>0</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-18 15:17:06 -0700</bug_when>
    <thetext>[chromium] Clip TransparencyWin to prevent OOM from large Skia canvas</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605160</commentid>
    <comment_count>1</comment_count>
      <attachid>137784</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-18 15:30:09 -0700</bug_when>
    <thetext>Created attachment 137784
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605169</commentid>
    <comment_count>2</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-18 15:36:41 -0700</bug_when>
    <thetext>Chromium bug: http://crbug.com/121318

brettw: I CC&apos;d you because your name was all over the TransparencyWin blame list.  If there&apos;s somebody else who would be interested in this, please let me know.

I only implemented this for KeepTransform.

I wanted to implement this for ScaleTransform too, but drawing into a transparency layer with a ScaleTransform appears to place the results of drawing at (x, y) at different translations in the final canvas depending on what layer mode is being used.  (Clipping tends to add a translation, but a translation on the context without clipping is also sufficient to demonstrate this.) I don&apos;t know if that&apos;s a bug, but it&apos;s really hairy to try to write unit tests for ScaleTransform.  So, I punted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605177</commentid>
    <comment_count>3</comment_count>
      <attachid>137784</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-18 15:55:58 -0700</bug_when>
    <thetext>Comment on attachment 137784
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/TransparencyWin.cpp:219
&gt; +            IntRect clipRect = IntRect(clipBounds.left(), clipBounds.top(), clipBounds.width(), clipBounds.height());

passing unguarded floats to the IntRect() constructor seems like a recipe for bad.

&gt; Source/WebKit/chromium/tests/TransparencyWinTest.cpp:398
&gt; +static void testClippedLayerKeepTransform(TransparencyWin::LayerMode layerMode)

I love this test, very nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605183</commentid>
    <comment_count>4</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-18 16:02:39 -0700</bug_when>
    <thetext>I&apos;m not sure if the scale issues are an actual bug, but I filed a bug with a unit test here: https://bugs.webkit.org/show_bug.cgi?id=84294

(In reply to comment #3)
&gt; (From update of attachment 137784 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=137784&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/TransparencyWin.cpp:219
&gt; &gt; +            IntRect clipRect = IntRect(clipBounds.left(), clipBounds.top(), clipBounds.width(), clipBounds.height());
&gt; 
&gt; passing unguarded floats to the IntRect() constructor seems like a recipe for bad.

Unguarded in what sense? I called roundOut() which does floor/ceil calls.  I could put it in a FloatRect and call enclosedIntRect, which seems like the same thing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605191</commentid>
    <comment_count>5</comment_count>
      <attachid>137784</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-18 16:07:13 -0700</bug_when>
    <thetext>Comment on attachment 137784
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/TransparencyWin.cpp:219
&gt;&gt;&gt; +            IntRect clipRect = IntRect(clipBounds.left(), clipBounds.top(), clipBounds.width(), clipBounds.height());
&gt;&gt; 
&gt;&gt; passing unguarded floats to the IntRect() constructor seems like a recipe for bad.
&gt; 
&gt; Unguarded in what sense? I called roundOut() which does floor/ceil calls.  I could put it in a FloatRect and call enclosedIntRect, which seems like the same thing?

In the sense that roundOut() rounds in float space. Then you pass to IntRect() and you can have an invalid IntRect().

Consider left() == INT_MAX and width() &gt; 0. Now maxX() is inexpressible and will overflow.

I think enclosedIntRect is different and better because it considers these things and always gives a valid IntRect() back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605192</commentid>
    <comment_count>6</comment_count>
      <attachid>137784</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-18 16:07:53 -0700</bug_when>
    <thetext>Comment on attachment 137784
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/TransparencyWin.cpp:219
&gt;&gt;&gt;&gt; +            IntRect clipRect = IntRect(clipBounds.left(), clipBounds.top(), clipBounds.width(), clipBounds.height());
&gt;&gt;&gt; 
&gt;&gt;&gt; passing unguarded floats to the IntRect() constructor seems like a recipe for bad.
&gt;&gt; 
&gt;&gt; Unguarded in what sense? I called roundOut() which does floor/ceil calls.  I could put it in a FloatRect and call enclosedIntRect, which seems like the same thing?
&gt; 
&gt; In the sense that roundOut() rounds in float space. Then you pass to IntRect() and you can have an invalid IntRect().
&gt; 
&gt; Consider left() == INT_MAX and width() &gt; 0. Now maxX() is inexpressible and will overflow.
&gt; 
&gt; I think enclosedIntRect is different and better because it considers these things and always gives a valid IntRect() back.

s/enclosedIntRect/enclosingIntRect/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605197</commentid>
    <comment_count>7</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-18 16:09:38 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; I think enclosedIntRect is different and better because it considers these things and always gives a valid IntRect() back.

Actually, I was reading enclosedIntRect(). It looks to me like enclosingIntRect() can give you an IntRect() that overflows too. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605223</commentid>
    <comment_count>8</comment_count>
      <attachid>137803</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-18 16:44:44 -0700</bug_when>
    <thetext>Created attachment 137803
Use enclosingIntRect</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605224</commentid>
    <comment_count>9</comment_count>
      <attachid>137803</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-18 16:50:15 -0700</bug_when>
    <thetext>Comment on attachment 137803
Use enclosingIntRect

Thanks LGTM. Opened http://code.google.com/p/chromium/issues/detail?id=124127 for enclosingIntRect issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605226</commentid>
    <comment_count>10</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-18 16:55:12 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #5)
&gt; &gt; I think enclosedIntRect is different and better because it considers these things and always gives a valid IntRect() back.
&gt; 
&gt; Actually, I was reading enclosedIntRect(). It looks to me like enclosingIntRect() can give you an IntRect() that overflows too. :(

enclosingIntRect also uses clampToInteger.  I think it&apos;s fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605228</commentid>
    <comment_count>11</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-18 16:56:59 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; enclosingIntRect also uses clampToInteger.  I think it&apos;s fine.

However it only clamps the x, y, width and height. maxX in this case will be representable through two ints (x + width) but not necessarily though one. No?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605231</commentid>
    <comment_count>12</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-18 16:59:27 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; enclosingIntRect also uses clampToInteger.  I think it&apos;s fine.
&gt; 
&gt; However it only clamps the x, y, width and height. maxX in this case will be representable through two ints (x + width) but not necessarily though one. No?

Ack, quite right.  :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606762</commentid>
    <comment_count>13</comment_count>
      <attachid>137803</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-04-20 11:53:17 -0700</bug_when>
    <thetext>Comment on attachment 137803
Use enclosingIntRect

R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606969</commentid>
    <comment_count>14</comment_count>
      <attachid>137803</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-20 15:35:59 -0700</bug_when>
    <thetext>Comment on attachment 137803
Use enclosingIntRect

Clearing flags on attachment: 137803

Committed r114791: &lt;http://trac.webkit.org/changeset/114791&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606970</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-20 15:36:04 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137784</attachid>
            <date>2012-04-18 15:30:09 -0700</date>
            <delta_ts>2012-04-18 16:44:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84289-20120418153008.patch</filename>
            <type>text/plain</type>
            <size>6753</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0NTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjJmOTliNTExOGM5Mzlh
YTdkNThhMDlhMzU2YWY4MGQyNzUyMjJiNy4uZjVhNmJkZmVlYTdlOWRmN2RkMzhjNmNjMGJjNGE2
ZWUyNmU3NjMwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTA0LTE4ICBBZHJp
ZW5uZSBXYWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CisKKyAgICAgICAgW2Nocm9taXVtXSBDbGlw
IFRyYW5zcGFyZW5jeVdpbiB0byBwcmV2ZW50IE9PTSBmcm9tIGxhcmdlIFNraWEgY2FudmFzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDI4OQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRyYW5zcGFyZW5j
eVdpbiB3aWxsIGNyZWF0ZSBhIFNraWEgY2FudmFzIG9mIHdoYXRldmVyIHNpemUgaXMgcGFzc2Vk
CisgICAgICAgIGluLCBldmVuIGlmIHRoZSByZXN1bHQgd2lsbCB1bHRpbWF0ZWx5IGJlIGNsaXBw
ZWQuIEhhbmRsZSB0aGUgY2xpcAorICAgICAgICBpbXBsaWNpdGx5IGFuZCB0cnkgKGluIHNvbWUg
Y2FzZXMpIHRvIGNyZWF0ZSBhIHNtYWxsZXIgY2FudmFzLiBUaGlzCisgICAgICAgIGNhbiBoYXBw
ZW4gZHVlIHRvIFJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyBwYXNzaW5nIGEgcGFpbnQg
cmVjdAorICAgICAgICBkb3duIG9mIHRoZSBlbnRpcmUgZWxlbWVudCdzIHNpemUuCisKKyAgICAg
ICAgTW9kZXMgd2l0aCBtb3JlIGNvbXBsaWNhdGVkIHRyYW5zZm9ybXMgKFNjYWxlVHJhbnNmb3Jt
LCBVblRyYW5zZm9ybSkKKyAgICAgICAgYXJlIG5vdCBoYW5kbGVkIHlldC4KKworICAgICAgICBU
ZXN0czogVHJhbnNwYXJlbmN5V2luLkNsaXBwZWRLZWVwVHJhbnNmb3JtTm9MYXllcgorICAgICAg
ICAgICAgICAgVHJhbnNwYXJlbmN5V2luLkNsaXBwZWRLZWVwVHJhbnNmb3JtT3BhcXVlQ29tcG9z
aXRlTGF5ZXIKKyAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbi5DbGlwcGVkS2VlcFRyYW5z
Zm9ybU9wYXF1ZVdoaXRlTGF5ZXIKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RyYW5zcGFyZW5jeVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lX
aW46OmNvbXB1dGVMYXllclNpemUpOgorCiAyMDEyLTA0LTE4ICBQYXZlbCBGZWxkbWFuICA8cGZl
bGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGV4dHJhY3Qgc2Ny
aXB0IG5hdmlnYXRvciBvdmVybGF5IGxvZ2ljIGludG8gdGhlIHNjcmlwdHMgbmF2aWdhdG9yIGNv
bnRyb2xsZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDQ2OTE5ZTRkOTNlNzRiNzhh
YzA0MzdmMDg2NzgwNzE0NmZiODEzNDMuLmUzZGQ3OWVmYWU0ZGFmOThjMzRhMTMzNzhhZDljNjVj
ZGI2ZTU1MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIw
MTItMDQtMTggIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAgICBb
Y2hyb21pdW1dIENsaXAgVHJhbnNwYXJlbmN5V2luIHRvIHByZXZlbnQgT09NIGZyb20gbGFyZ2Ug
U2tpYSBjYW52YXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg0Mjg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIGEgdGVzdCB0aGF0IHdvdWxkIE9PTSBpZiB0aGUgbGF5ZXIgd2Fzbid0IGNsaXBwZWQu
IEFsc28sIHZlcmlmeQorICAgICAgICB0aGF0IGNsaXBwaW5nIHRoZSBjYW52YXMgZG9lc24ndCBz
aGlmdCBwaXhlbHMgYXJvdW5kIGluY29ycmVjdGx5LgorCisgICAgICAgICogdGVzdHMvVHJhbnNw
YXJlbmN5V2luVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0ZXN0Q2xpcHBlZExheWVyS2Vl
cFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1Qp
OgorCiAyMDEyLTA0LTE4ICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgW0Nocm9taXVtXSBSRUdSRVNTSU9OOiBQb3B1cCBzaHJpbmtzIGJlY2F1c2Ug
b2YgYXV0b2NvbXBsZXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcAppbmRleCA0MzJjYTc4YmQ1
ODVkMDk4YmRkZDdhODM2MzMzZjgyNzllMDVkMzM3Li5lN2YyNTdkMGVmOTU0MzE0NzY4MGNjYmJk
NzJlODA2MGZkNTZmYWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHAKQEAgLTIxMCwxMSAr
MjEwLDIwIEBAIHZvaWQgVHJhbnNwYXJlbmN5V2luOjpjb21wdXRlTGF5ZXJTaXplKCkKICAgICAg
ICAgLy8gdXNlcyB0aGUgdmFyaWFibGU6IHRvIGRldGVybWluZSBob3cgdG8gdHJhbnNsYXRlIHRo
aW5ncyB0byBhY2NvdW50CiAgICAgICAgIC8vIGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBsYXllci4K
ICAgICAgICAgbV90cmFuc2Zvcm1lZFNvdXJjZVJlY3QgPSBtX3NvdXJjZVJlY3Q7Ci0gICAgICAg
IG1fbGF5ZXJTaXplID0gSW50U2l6ZShtX3NvdXJjZVJlY3Qud2lkdGgoKSwgbV9zb3VyY2VSZWN0
LmhlaWdodCgpKTsKLSAgICB9IGVsc2UgeworICAgIH0gZWxzZSBpZiAobV90cmFuc2Zvcm1Nb2Rl
ID09IEtlZXBUcmFuc2Zvcm0gJiYgbV9sYXllck1vZGUgIT0gVGV4dENvbXBvc2l0ZSkgeworICAg
ICAgICAvLyBGSVhNRTogc3VwcG9ydCBjbGlwcGluZyBmb3Igb3RoZXIgbW9kZXMKKyAgICAgICAg
SW50UmVjdCBjbGlwcGVkU291cmNlUmVjdCA9IG1fc291cmNlUmVjdDsKKyAgICAgICAgU2tSZWN0
IGNsaXBCb3VuZHM7CisgICAgICAgIGlmIChtX2Rlc3RDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KS0+Y2FudmFzKCktPmdldENsaXBCb3VuZHMoJmNsaXBCb3VuZHMpKSB7CisgICAgICAgICAgICBj
bGlwQm91bmRzLnJvdW5kT3V0KCk7CisgICAgICAgICAgICBJbnRSZWN0IGNsaXBSZWN0ID0gSW50
UmVjdChjbGlwQm91bmRzLmxlZnQoKSwgY2xpcEJvdW5kcy50b3AoKSwgY2xpcEJvdW5kcy53aWR0
aCgpLCBjbGlwQm91bmRzLmhlaWdodCgpKTsKKyAgICAgICAgICAgIGNsaXBwZWRTb3VyY2VSZWN0
LmludGVyc2VjdChjbGlwUmVjdCk7CisgICAgICAgIH0KKyAgICAgICAgbV90cmFuc2Zvcm1lZFNv
dXJjZVJlY3QgPSBtX29yZ1RyYW5zZm9ybS5tYXBSZWN0KGNsaXBwZWRTb3VyY2VSZWN0KTsKKyAg
ICB9IGVsc2UKICAgICAgICAgbV90cmFuc2Zvcm1lZFNvdXJjZVJlY3QgPSBtX29yZ1RyYW5zZm9y
bS5tYXBSZWN0KG1fc291cmNlUmVjdCk7Ci0gICAgICAgIG1fbGF5ZXJTaXplID0gSW50U2l6ZSht
X3RyYW5zZm9ybWVkU291cmNlUmVjdC53aWR0aCgpLCBtX3RyYW5zZm9ybWVkU291cmNlUmVjdC5o
ZWlnaHQoKSk7Ci0gICAgfQorCisgICAgbV9sYXllclNpemUgPSBJbnRTaXplKG1fdHJhbnNmb3Jt
ZWRTb3VyY2VSZWN0LndpZHRoKCksIG1fdHJhbnNmb3JtZWRTb3VyY2VSZWN0LmhlaWdodCgpKTsK
IH0KIAogdm9pZCBUcmFuc3BhcmVuY3lXaW46OnNldHVwTGF5ZXIoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmFuc3BhcmVuY3lXaW5UZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHAKaW5kZXggNTA1
MmJiMTY2M2U0MzY1ZGQxOTUxMGU2NjhhM2Y0N2JiNWE0OTM4Zi4uYWUzMDkwZDhjNTA3ZTk0MDQ1
OWZmZWE3NDBhMzBiNzAwYmNiNzJmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9UcmFuc3BhcmVuY3lXaW5UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwCkBAIC0zOTUsNiArMzk1LDY2IEBAIFRF
U1QoVHJhbnNwYXJlbmN5V2luLCBUcmFuc2xhdGVPcGFxdWVDb21wb3NpdGVMYXllcikKICAgICBF
WFBFQ1RfRVEoZ3JlZW4sIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDE1LCA3KSk7CiB9CiAK
K3N0YXRpYyB2b2lkIHRlc3RDbGlwcGVkTGF5ZXJLZWVwVHJhbnNmb3JtKFRyYW5zcGFyZW5jeVdp
bjo6TGF5ZXJNb2RlIGxheWVyTW9kZSkKK3sKKyAgICAvLyBGaWxsIHdpdGggd2hpdGUuCisgICAg
T3duUHRyPEltYWdlQnVmZmVyPiBzcmMoSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXplKDE2LCAx
NiksIDEsIENvbG9yU3BhY2VEZXZpY2VSR0IpKTsKKyAgICBDb2xvciB3aGl0ZSgweEZGRkZGRkZG
KTsKKyAgICBGbG9hdFJlY3QgZnVsbFJlY3QoMCwgMCwgMTYsIDE2KTsKKyAgICBzcmMtPmNvbnRl
eHQoKS0+ZmlsbFJlY3QoZnVsbFJlY3QsIHdoaXRlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKwor
ICAgIEludFJlY3QgY2xpcFJlY3QoSW50UG9pbnQoMTEsIDUpLCBJbnRTaXplKDEsIDEpKTsKKyAg
ICBzcmMtPmNvbnRleHQoKS0+Y2xpcChjbGlwUmVjdCk7CisKKyAgICAvLyBTY3JvbGwgZG93biBi
eSA2IChjb29yZGluYXRlIHN5c3RlbSBnb2VzIHVwKS4KKyAgICBzcmMtPmNvbnRleHQoKS0+c2F2
ZSgpOworICAgIHNyYy0+Y29udGV4dCgpLT50cmFuc2xhdGUoMCwgLTYpOworCisgICAgQ29sb3Ig
cmVkKDB4RkZGRjAwMDApOworICAgIENvbG9yIGdyZWVuKDB4RkYwMEZGMDApOworICAgIHsKKyAg
ICAgICAgLy8gVGhlIHRyYW5zcGFyZW5jeSBsYXllciBhZnRlciB0cmFuc2xhdGlvbiB3aWxsIGJl
IEAgKDAsIC02KSB3aXRoCisgICAgICAgIC8vIGEgc2l6ZSB0aGF0IHdvdWxkIGJlIHRvbyBsYXJn
ZSB0byBoYW5kbGUgdW5jbGlwcGVkLgorICAgICAgICBUcmFuc3BhcmVuY3lXaW4gaGVscGVyOwor
ICAgICAgICBoZWxwZXIuaW5pdChzcmMtPmNvbnRleHQoKSwKKyAgICAgICAgICAgICAgICAgICAg
bGF5ZXJNb2RlLAorICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lXaW46OktlZXBUcmFu
c2Zvcm0sCisgICAgICAgICAgICAgICAgICAgIEludFJlY3QoMCwgMCwgSU5UX01BWCwgSU5UX01B
WCkpOworCisgICAgICAgIC8vIERyYXcgYSBncmVlbiBwaXhlbCBhdCAoMTEsIDExKS4gVGhpcyBz
aG91bGQgYmUgd2l0aGluIHRoZSBjbGlwIHJlY3QKKyAgICAgICAgLy8gYW5kIGF0ICgxMSwgNSkg
YWZ0ZXIgdGhlIHRyYW5zZm9ybS4KKyAgICAgICAgRmxvYXRSZWN0IGdyZWVuUmVjdCgxMSwgMTEs
IDEsIDEpOworICAgICAgICBoZWxwZXIuY29udGV4dCgpLT5maWxsUmVjdChncmVlblJlY3QsIGdy
ZWVuLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKworICAgICAgICAvLyBEcmF3IGEgcmVkIHBpeGVs
IGF0ICg5LCA5KS4gVGhpcyBzaG91bGQgYmUgb3V0c2lkZSB0aGUgY2xpcCByZWN0CisgICAgICAg
IC8vIGFuZCBub3QgZHJhd24uCisgICAgICAgIEZsb2F0UmVjdCByZWRSZWN0KDksIDksIDEsIDEp
OworICAgICAgICBoZWxwZXIuY29udGV4dCgpLT5maWxsUmVjdChyZWRSZWN0LCByZWQsIENvbG9y
U3BhY2VEZXZpY2VSR0IpOworICAgICAgICBoZWxwZXIuY29tcG9zaXRlKCk7CisgICAgfQorCisg
ICAgc3JjLT5jb250ZXh0KCktPnJlc3RvcmUoKTsKKworICAgIC8vIFZlcmlmeSBncmVlbiBwaXhl
bCBnb3QgZHJhd24gaW4gY2xpcCByZWN0IGFuZCByZWQgcGl4ZWwgZ290IGNsaXBwZWQuCisgICAg
RVhQRUNUX0VRKGdyZWVuLCBnZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCAxMSwgNSkpOworICAg
IEVYUEVDVF9FUSh3aGl0ZSwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwgOSwgMykpOworfQor
CitURVNUKFRyYW5zcGFyZW5jeVdpbiwgQ2xpcHBlZEtlZXBUcmFuc2Zvcm1Ob0xheWVyKQorewor
ICAgIHRlc3RDbGlwcGVkTGF5ZXJLZWVwVHJhbnNmb3JtKFRyYW5zcGFyZW5jeVdpbjo6Tm9MYXll
cik7Cit9CisKK1RFU1QoVHJhbnNwYXJlbmN5V2luLCBDbGlwcGVkS2VlcFRyYW5zZm9ybU9wYXF1
ZUNvbXBvc2l0ZUxheWVyKQoreworICAgIHRlc3RDbGlwcGVkTGF5ZXJLZWVwVHJhbnNmb3JtKFRy
YW5zcGFyZW5jeVdpbjo6T3BhcXVlQ29tcG9zaXRlTGF5ZXIpOworfQorCitURVNUKFRyYW5zcGFy
ZW5jeVdpbiwgQ2xpcHBlZEtlZXBUcmFuc2Zvcm1XaGl0ZUxheWVyKQoreworICAgIHRlc3RDbGlw
cGVkTGF5ZXJLZWVwVHJhbnNmb3JtKFRyYW5zcGFyZW5jeVdpbjo6V2hpdGVMYXllcik7Cit9CisK
IC8vIFNhbWUgYXMgT3BhcXVlQ29tcG9zaXRlTGF5ZXIsIGJ1dCB0aGUgY2FudmFzIGhhcyBhIHJv
dGF0aW9uIGFwcGxpZWQuIFRoaXMKIC8vIHRlc3RzIHRoYXQgdGhlIHByb3BlcnQgdHJhbnNmb3Jt
IGlzIGFwcGxpZWQgdG8gdGhlIGNvcGllZCBsYXllci4KIFRFU1QoVHJhbnNwYXJlbmN5V2luLCBS
b3RhdGVPcGFxdWVDb21wb3NpdGVMYXllcikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137803</attachid>
            <date>2012-04-18 16:44:44 -0700</date>
            <delta_ts>2012-04-20 15:35:59 -0700</delta_ts>
            <desc>Use enclosingIntRect</desc>
            <filename>bug-84289-20120418164443.patch</filename>
            <type>text/plain</type>
            <size>6727</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0NTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjJmOTliNTExOGM5Mzlh
YTdkNThhMDlhMzU2YWY4MGQyNzUyMjJiNy4uZjVhNmJkZmVlYTdlOWRmN2RkMzhjNmNjMGJjNGE2
ZWUyNmU3NjMwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTA0LTE4ICBBZHJp
ZW5uZSBXYWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CisKKyAgICAgICAgW2Nocm9taXVtXSBDbGlw
IFRyYW5zcGFyZW5jeVdpbiB0byBwcmV2ZW50IE9PTSBmcm9tIGxhcmdlIFNraWEgY2FudmFzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDI4OQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRyYW5zcGFyZW5j
eVdpbiB3aWxsIGNyZWF0ZSBhIFNraWEgY2FudmFzIG9mIHdoYXRldmVyIHNpemUgaXMgcGFzc2Vk
CisgICAgICAgIGluLCBldmVuIGlmIHRoZSByZXN1bHQgd2lsbCB1bHRpbWF0ZWx5IGJlIGNsaXBw
ZWQuIEhhbmRsZSB0aGUgY2xpcAorICAgICAgICBpbXBsaWNpdGx5IGFuZCB0cnkgKGluIHNvbWUg
Y2FzZXMpIHRvIGNyZWF0ZSBhIHNtYWxsZXIgY2FudmFzLiBUaGlzCisgICAgICAgIGNhbiBoYXBw
ZW4gZHVlIHRvIFJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyBwYXNzaW5nIGEgcGFpbnQg
cmVjdAorICAgICAgICBkb3duIG9mIHRoZSBlbnRpcmUgZWxlbWVudCdzIHNpemUuCisKKyAgICAg
ICAgTW9kZXMgd2l0aCBtb3JlIGNvbXBsaWNhdGVkIHRyYW5zZm9ybXMgKFNjYWxlVHJhbnNmb3Jt
LCBVblRyYW5zZm9ybSkKKyAgICAgICAgYXJlIG5vdCBoYW5kbGVkIHlldC4KKworICAgICAgICBU
ZXN0czogVHJhbnNwYXJlbmN5V2luLkNsaXBwZWRLZWVwVHJhbnNmb3JtTm9MYXllcgorICAgICAg
ICAgICAgICAgVHJhbnNwYXJlbmN5V2luLkNsaXBwZWRLZWVwVHJhbnNmb3JtT3BhcXVlQ29tcG9z
aXRlTGF5ZXIKKyAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbi5DbGlwcGVkS2VlcFRyYW5z
Zm9ybU9wYXF1ZVdoaXRlTGF5ZXIKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RyYW5zcGFyZW5jeVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lX
aW46OmNvbXB1dGVMYXllclNpemUpOgorCiAyMDEyLTA0LTE4ICBQYXZlbCBGZWxkbWFuICA8cGZl
bGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGV4dHJhY3Qgc2Ny
aXB0IG5hdmlnYXRvciBvdmVybGF5IGxvZ2ljIGludG8gdGhlIHNjcmlwdHMgbmF2aWdhdG9yIGNv
bnRyb2xsZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDQ2OTE5ZTRkOTNlNzRiNzhh
YzA0MzdmMDg2NzgwNzE0NmZiODEzNDMuLmUzZGQ3OWVmYWU0ZGFmOThjMzRhMTMzNzhhZDljNjVj
ZGI2ZTU1MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIw
MTItMDQtMTggIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAgICBb
Y2hyb21pdW1dIENsaXAgVHJhbnNwYXJlbmN5V2luIHRvIHByZXZlbnQgT09NIGZyb20gbGFyZ2Ug
U2tpYSBjYW52YXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg0Mjg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIGEgdGVzdCB0aGF0IHdvdWxkIE9PTSBpZiB0aGUgbGF5ZXIgd2Fzbid0IGNsaXBwZWQu
IEFsc28sIHZlcmlmeQorICAgICAgICB0aGF0IGNsaXBwaW5nIHRoZSBjYW52YXMgZG9lc24ndCBz
aGlmdCBwaXhlbHMgYXJvdW5kIGluY29ycmVjdGx5LgorCisgICAgICAgICogdGVzdHMvVHJhbnNw
YXJlbmN5V2luVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0ZXN0Q2xpcHBlZExheWVyS2Vl
cFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1Qp
OgorCiAyMDEyLTA0LTE4ICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgW0Nocm9taXVtXSBSRUdSRVNTSU9OOiBQb3B1cCBzaHJpbmtzIGJlY2F1c2Ug
b2YgYXV0b2NvbXBsZXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcAppbmRleCA0MzJjYTc4YmQ1
ODVkMDk4YmRkZDdhODM2MzMzZjgyNzllMDVkMzM3Li4yOGIxYjhlNjhjMjAxYTVmOTRiNjkyOTE5
ZWJjMDU4MGZiYzI3YTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHAKQEAgLTIxMCwxMSAr
MjEwLDE5IEBAIHZvaWQgVHJhbnNwYXJlbmN5V2luOjpjb21wdXRlTGF5ZXJTaXplKCkKICAgICAg
ICAgLy8gdXNlcyB0aGUgdmFyaWFibGU6IHRvIGRldGVybWluZSBob3cgdG8gdHJhbnNsYXRlIHRo
aW5ncyB0byBhY2NvdW50CiAgICAgICAgIC8vIGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBsYXllci4K
ICAgICAgICAgbV90cmFuc2Zvcm1lZFNvdXJjZVJlY3QgPSBtX3NvdXJjZVJlY3Q7Ci0gICAgICAg
IG1fbGF5ZXJTaXplID0gSW50U2l6ZShtX3NvdXJjZVJlY3Qud2lkdGgoKSwgbV9zb3VyY2VSZWN0
LmhlaWdodCgpKTsKLSAgICB9IGVsc2UgeworICAgIH0gZWxzZSBpZiAobV90cmFuc2Zvcm1Nb2Rl
ID09IEtlZXBUcmFuc2Zvcm0gJiYgbV9sYXllck1vZGUgIT0gVGV4dENvbXBvc2l0ZSkgeworICAg
ICAgICAvLyBGSVhNRTogc3VwcG9ydCBjbGlwcGluZyBmb3Igb3RoZXIgbW9kZXMKKyAgICAgICAg
SW50UmVjdCBjbGlwcGVkU291cmNlUmVjdCA9IG1fc291cmNlUmVjdDsKKyAgICAgICAgU2tSZWN0
IGNsaXBCb3VuZHM7CisgICAgICAgIGlmIChtX2Rlc3RDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KS0+Y2FudmFzKCktPmdldENsaXBCb3VuZHMoJmNsaXBCb3VuZHMpKSB7CisgICAgICAgICAgICBG
bG9hdFJlY3QgY2xpcFJlY3QoY2xpcEJvdW5kcy5sZWZ0KCksIGNsaXBCb3VuZHMudG9wKCksIGNs
aXBCb3VuZHMud2lkdGgoKSwgY2xpcEJvdW5kcy5oZWlnaHQoKSk7CisgICAgICAgICAgICBjbGlw
cGVkU291cmNlUmVjdC5pbnRlcnNlY3QoZW5jbG9zaW5nSW50UmVjdChjbGlwUmVjdCkpOworICAg
ICAgICB9CisgICAgICAgIG1fdHJhbnNmb3JtZWRTb3VyY2VSZWN0ID0gbV9vcmdUcmFuc2Zvcm0u
bWFwUmVjdChjbGlwcGVkU291cmNlUmVjdCk7CisgICAgfSBlbHNlCiAgICAgICAgIG1fdHJhbnNm
b3JtZWRTb3VyY2VSZWN0ID0gbV9vcmdUcmFuc2Zvcm0ubWFwUmVjdChtX3NvdXJjZVJlY3QpOwot
ICAgICAgICBtX2xheWVyU2l6ZSA9IEludFNpemUobV90cmFuc2Zvcm1lZFNvdXJjZVJlY3Qud2lk
dGgoKSwgbV90cmFuc2Zvcm1lZFNvdXJjZVJlY3QuaGVpZ2h0KCkpOwotICAgIH0KKworICAgIG1f
bGF5ZXJTaXplID0gSW50U2l6ZShtX3RyYW5zZm9ybWVkU291cmNlUmVjdC53aWR0aCgpLCBtX3Ry
YW5zZm9ybWVkU291cmNlUmVjdC5oZWlnaHQoKSk7CiB9CiAKIHZvaWQgVHJhbnNwYXJlbmN5V2lu
OjpzZXR1cExheWVyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
VHJhbnNwYXJlbmN5V2luVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1Ry
YW5zcGFyZW5jeVdpblRlc3QuY3BwCmluZGV4IDUwNTJiYjE2NjNlNDM2NWRkMTk1MTBlNjY4YTNm
NDdiYjVhNDkzOGYuLmFlMzA5MGQ4YzUwN2U5NDA0NTlmZmVhNzQwYTMwYjcwMGJjYjcyZjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJhbnNwYXJlbmN5V2luVGVz
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmFuc3BhcmVuY3lXaW5U
ZXN0LmNwcApAQCAtMzk1LDYgKzM5NSw2NiBAQCBURVNUKFRyYW5zcGFyZW5jeVdpbiwgVHJhbnNs
YXRlT3BhcXVlQ29tcG9zaXRlTGF5ZXIpCiAgICAgRVhQRUNUX0VRKGdyZWVuLCBnZXRQaXhlbEF0
KHNyYy0+Y29udGV4dCgpLCAxNSwgNykpOwogfQogCitzdGF0aWMgdm9pZCB0ZXN0Q2xpcHBlZExh
eWVyS2VlcFRyYW5zZm9ybShUcmFuc3BhcmVuY3lXaW46OkxheWVyTW9kZSBsYXllck1vZGUpCit7
CisgICAgLy8gRmlsbCB3aXRoIHdoaXRlLgorICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc3JjKElt
YWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxNiwgMTYpLCAxLCBDb2xvclNwYWNlRGV2aWNlUkdC
KSk7CisgICAgQ29sb3Igd2hpdGUoMHhGRkZGRkZGRik7CisgICAgRmxvYXRSZWN0IGZ1bGxSZWN0
KDAsIDAsIDE2LCAxNik7CisgICAgc3JjLT5jb250ZXh0KCktPmZpbGxSZWN0KGZ1bGxSZWN0LCB3
aGl0ZSwgQ29sb3JTcGFjZURldmljZVJHQik7CisKKyAgICBJbnRSZWN0IGNsaXBSZWN0KEludFBv
aW50KDExLCA1KSwgSW50U2l6ZSgxLCAxKSk7CisgICAgc3JjLT5jb250ZXh0KCktPmNsaXAoY2xp
cFJlY3QpOworCisgICAgLy8gU2Nyb2xsIGRvd24gYnkgNiAoY29vcmRpbmF0ZSBzeXN0ZW0gZ29l
cyB1cCkuCisgICAgc3JjLT5jb250ZXh0KCktPnNhdmUoKTsKKyAgICBzcmMtPmNvbnRleHQoKS0+
dHJhbnNsYXRlKDAsIC02KTsKKworICAgIENvbG9yIHJlZCgweEZGRkYwMDAwKTsKKyAgICBDb2xv
ciBncmVlbigweEZGMDBGRjAwKTsKKyAgICB7CisgICAgICAgIC8vIFRoZSB0cmFuc3BhcmVuY3kg
bGF5ZXIgYWZ0ZXIgdHJhbnNsYXRpb24gd2lsbCBiZSBAICgwLCAtNikgd2l0aAorICAgICAgICAv
LyBhIHNpemUgdGhhdCB3b3VsZCBiZSB0b28gbGFyZ2UgdG8gaGFuZGxlIHVuY2xpcHBlZC4KKyAg
ICAgICAgVHJhbnNwYXJlbmN5V2luIGhlbHBlcjsKKyAgICAgICAgaGVscGVyLmluaXQoc3JjLT5j
b250ZXh0KCksCisgICAgICAgICAgICAgICAgICAgIGxheWVyTW9kZSwKKyAgICAgICAgICAgICAg
ICAgICAgVHJhbnNwYXJlbmN5V2luOjpLZWVwVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAg
ICBJbnRSZWN0KDAsIDAsIElOVF9NQVgsIElOVF9NQVgpKTsKKworICAgICAgICAvLyBEcmF3IGEg
Z3JlZW4gcGl4ZWwgYXQgKDExLCAxMSkuIFRoaXMgc2hvdWxkIGJlIHdpdGhpbiB0aGUgY2xpcCBy
ZWN0CisgICAgICAgIC8vIGFuZCBhdCAoMTEsIDUpIGFmdGVyIHRoZSB0cmFuc2Zvcm0uCisgICAg
ICAgIEZsb2F0UmVjdCBncmVlblJlY3QoMTEsIDExLCAxLCAxKTsKKyAgICAgICAgaGVscGVyLmNv
bnRleHQoKS0+ZmlsbFJlY3QoZ3JlZW5SZWN0LCBncmVlbiwgQ29sb3JTcGFjZURldmljZVJHQik7
CisKKyAgICAgICAgLy8gRHJhdyBhIHJlZCBwaXhlbCBhdCAoOSwgOSkuIFRoaXMgc2hvdWxkIGJl
IG91dHNpZGUgdGhlIGNsaXAgcmVjdAorICAgICAgICAvLyBhbmQgbm90IGRyYXduLgorICAgICAg
ICBGbG9hdFJlY3QgcmVkUmVjdCg5LCA5LCAxLCAxKTsKKyAgICAgICAgaGVscGVyLmNvbnRleHQo
KS0+ZmlsbFJlY3QocmVkUmVjdCwgcmVkLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAg
aGVscGVyLmNvbXBvc2l0ZSgpOworICAgIH0KKworICAgIHNyYy0+Y29udGV4dCgpLT5yZXN0b3Jl
KCk7CisKKyAgICAvLyBWZXJpZnkgZ3JlZW4gcGl4ZWwgZ290IGRyYXduIGluIGNsaXAgcmVjdCBh
bmQgcmVkIHBpeGVsIGdvdCBjbGlwcGVkLgorICAgIEVYUEVDVF9FUShncmVlbiwgZ2V0UGl4ZWxB
dChzcmMtPmNvbnRleHQoKSwgMTEsIDUpKTsKKyAgICBFWFBFQ1RfRVEod2hpdGUsIGdldFBpeGVs
QXQoc3JjLT5jb250ZXh0KCksIDksIDMpKTsKK30KKworVEVTVChUcmFuc3BhcmVuY3lXaW4sIENs
aXBwZWRLZWVwVHJhbnNmb3JtTm9MYXllcikKK3sKKyAgICB0ZXN0Q2xpcHBlZExheWVyS2VlcFRy
YW5zZm9ybShUcmFuc3BhcmVuY3lXaW46Ok5vTGF5ZXIpOworfQorCitURVNUKFRyYW5zcGFyZW5j
eVdpbiwgQ2xpcHBlZEtlZXBUcmFuc2Zvcm1PcGFxdWVDb21wb3NpdGVMYXllcikKK3sKKyAgICB0
ZXN0Q2xpcHBlZExheWVyS2VlcFRyYW5zZm9ybShUcmFuc3BhcmVuY3lXaW46Ok9wYXF1ZUNvbXBv
c2l0ZUxheWVyKTsKK30KKworVEVTVChUcmFuc3BhcmVuY3lXaW4sIENsaXBwZWRLZWVwVHJhbnNm
b3JtV2hpdGVMYXllcikKK3sKKyAgICB0ZXN0Q2xpcHBlZExheWVyS2VlcFRyYW5zZm9ybShUcmFu
c3BhcmVuY3lXaW46OldoaXRlTGF5ZXIpOworfQorCiAvLyBTYW1lIGFzIE9wYXF1ZUNvbXBvc2l0
ZUxheWVyLCBidXQgdGhlIGNhbnZhcyBoYXMgYSByb3RhdGlvbiBhcHBsaWVkLiBUaGlzCiAvLyB0
ZXN0cyB0aGF0IHRoZSBwcm9wZXJ0IHRyYW5zZm9ybSBpcyBhcHBsaWVkIHRvIHRoZSBjb3BpZWQg
bGF5ZXIuCiBURVNUKFRyYW5zcGFyZW5jeVdpbiwgUm90YXRlT3BhcXVlQ29tcG9zaXRlTGF5ZXIp
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>