<?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>24534</bug_id>
          
          <creation_ts>2009-03-11 18:58:52 -0700</creation_ts>
          <short_desc>Fix a bug in pattern transformation in PatternSkia</short_desc>
          <delta_ts>2010-02-01 21:36:58 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Hin-Chung Lam">hclam</reporter>
          <assigned_to name="Stephen White">senorblanco</assigned_to>
          <cc>brettw</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>krit</cc>
    
    <cc>senorblanco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>113285</commentid>
    <comment_count>0</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2009-03-11 18:58:52 -0700</bug_when>
    <thetext>PatternSkia should respect the local transformation in createPlatformPattern and apply the local transformation to shader. This patch fixes the following layout tests in chromium:

LayoutTests/svg/batik/paints/patternRegionA.svg
LayoutTests/svg/W3C-SVG-1.1/pservers-grad-06-b.svg
LayoutTests/svg/W3C-SVG-1.1/pservers-pattern-01-b.svg
LayoutTests/svg/W3C-SVG-1.1/coords-units-01-b.svg

Note that Skia is bad about having positive translation in tile mode. The code  takes special care of that. See the code for more details.

Review in chromium is here: http://codereview.chromium.org/42100/show</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113286</commentid>
    <comment_count>1</comment_count>
      <attachid>28509</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2009-03-11 18:59:41 -0700</bug_when>
    <thetext>Created attachment 28509
Patch to patternSkia.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113290</commentid>
    <comment_count>2</comment_count>
      <attachid>28511</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2009-03-11 19:16:42 -0700</bug_when>
    <thetext>Created attachment 28511
patch + change log</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114205</commentid>
    <comment_count>3</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-18 11:14:30 -0700</bug_when>
    <thetext>Brett, can you look at this change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114208</commentid>
    <comment_count>4</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2009-03-18 11:20:19 -0700</bug_when>
    <thetext>I would like to let the Skia folks know about this before we work around
something. If it is a bug, it should be fixed there, or we should know a fix is
pending before checking in. I&apos;ll forward it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115014</commentid>
    <comment_count>5</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2009-03-24 13:08:13 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I would like to let the Skia folks know about this before we work around
&gt; something. If it is a bug, it should be fixed there, or we should know a fix is
&gt; pending before checking in. I&apos;ll forward it.
&gt; 

Any updates from skia people?

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115036</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-03-24 13:51:50 -0700</bug_when>
    <thetext>There is maybe another way to support transformations for patterns. On CG and Qt we transform the context right before we stroke/fill anything with a pattern, the path should not be affected. Just look at fillPath/strokePath in GraphicsContextCg.cpp or GraphicsContextQt.cpp to know what I mean. Could that avoid this hack at the end of the pattern-patch? To round and cut off some values seems to be incorrect for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122028</commentid>
    <comment_count>7</comment_count>
      <attachid>28511</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-19 20:37:44 -0700</bug_when>
    <thetext>Comment on attachment 28511
patch + change log

r- based on Dirk&apos;s comments.  Mostly I can&apos;t quite tell if this is right, Dirk is questioning the correctness, and we&apos;re trying to clear out the review queue one.  Feel free to mark this r=? with answers to Dirk&apos;s questions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163651</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-11-14 00:31:10 -0800</bug_when>
    <thetext>No progress on this bug? :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185583</commentid>
    <comment_count>9</comment_count>
      <attachid>47643</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-01-28 12:52:45 -0800</bug_when>
    <thetext>Created attachment 47643
New fix

The good news is, the Skia bug should be fixed, so the hack part of Alpha&apos;s fix (above) should no longer be necessary.
The bad news is, I changed the allocation of SkShaders a few months back to be done once on first draw, so it was necessary to rework Patterns a bit so that the m_patternSpaceTransform could be forwarded to the SkShader.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185591</commentid>
    <comment_count>10</comment_count>
      <attachid>47644</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-01-28 13:17:16 -0800</bug_when>
    <thetext>Created attachment 47644
ChangeLog and non-Skia fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185600</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-28 13:56:08 -0800</bug_when>
    <thetext>Attachment 47644 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/217145</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185619</commentid>
    <comment_count>12</comment_count>
      <attachid>47652</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-01-28 14:58:26 -0800</bug_when>
    <thetext>Created attachment 47652
Same as above, plus QT fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186584</commentid>
    <comment_count>13</comment_count>
      <attachid>47652</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-01 15:14:05 -0800</bug_when>
    <thetext>Comment on attachment 47652
Same as above, plus QT fix

I would have probably put the &quot;else&quot; into its own function, but OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186797</commentid>
    <comment_count>14</comment_count>
      <attachid>47652</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-01 21:36:48 -0800</bug_when>
    <thetext>Comment on attachment 47652
Same as above, plus QT fix

Clearing flags on attachment: 47652

Committed r54203: &lt;http://trac.webkit.org/changeset/54203&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186798</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-01 21:36:58 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28509</attachid>
            <date>2009-03-11 18:59:41 -0700</date>
            <delta_ts>2009-03-11 19:16:42 -0700</delta_ts>
            <desc>Patch to patternSkia.cpp</desc>
            <filename>issue42100_1005.diff</filename>
            <type>text/plain</type>
            <size>5220</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXR0ZXJuU2tpYS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BhdHRlcm5Ta2lhLmNw
cAkocmV2aXNpb24gMTEzNTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0
dGVyblNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwzOCArNDAsNjMgQEAKIAogUGxhdGZv
cm1QYXR0ZXJuUHRyIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgcGF0dGVyblRyYW5zZm9ybSkgY29uc3QKIHsKLSAgICAvLyBOb3RlOiBw
YXR0ZXJuVHJhbnNmb3JtIGlzIGlnbm9yZWQgc2luY2UgaXQgc2VlbXMgdG8gYmUgYXBwbGllZCBl
bHNld2hlcmUKLSAgICAvLyAod2hlbiB0aGUgcGF0dGVybiBpcyB1c2VkPykuIEFwcGx5aW5nIGl0
IHRvIHRoZSBwYXR0ZXJuIChpLmUuCi0gICAgLy8gc2hhZGVyLT5zZXRMb2NhbE1hdHJpeCkgcmVz
dWx0cyBpbiBhIGRvdWJsZSB0cmFuc2Zvcm1hdGlvbi4gVGhpcyBjYW4gYmUKLSAgICAvLyBzZWVu
LCBmb3IgaW5zdGFuY2UsIGFzIGFuIGV4dHJhIG9mZnNldCBpbjoKLSAgICAvLyBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy9wYXR0ZXJuZmlsbC1yZXBlYXQuaHRtbAotICAgIC8vIGFuZCBleHBhbmRl
ZCBzY2FsZSBhbmQgc2tldyBpbjoKLSAgICAvLyBMYXlvdXRUZXN0cy9zdmcvVzNDLVNWRy0xLjEv
cHNlcnZlcnMtZ3JhZC0wNi1iLnN2ZworICAgIC8vIE5vdGU6IHxwYXR0ZXJuVHJhbnNmb3JtfCBp
cyBpZ25vcmVkIHNpbmNlIGl0IGlzIGEgZ2xvYmFsIHRyYW5zZm9ybWF0aW9uIAorICAgIC8vIGFw
cGxpZWQgYnkgdGhlIEdyYXBoaWNzQ29udGV4dC4gUGF0dGVybi1zcGVjaWZpYyB0cmFuc2Zvcm1h
dGlvbiBpcyBzdG9yZWQKKyAgICAvLyBpbiB8bV9wYXR0ZXJuU3BhY2VUcmFuc2Zvcm1hdGlvbnwu
CiAKICAgICBTa0JpdG1hcCogYm0gPSBtX3RpbGVJbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKTsKLSAgICBpZiAobV9yZXBlYXRYICYmIG1fcmVwZWF0WSkKLSAgICAgICAgcmV0dXJu
IFNrU2hhZGVyOjpDcmVhdGVCaXRtYXBTaGFkZXIoKmJtLCBTa1NoYWRlcjo6a1JlcGVhdF9UaWxl
TW9kZSwgU2tTaGFkZXI6OmtSZXBlYXRfVGlsZU1vZGUpOworICAgIFNrU2hhZGVyKiBzaGFkZXIg
PSBOVUxMOwogCi0gICAgLy8gU2tpYSBkb2VzIG5vdCBoYXZlIGEgImRyYXcgdGhlIHRpbGUgb25s
eSBvbmNlIiBvcHRpb24uIENsYW1wX1RpbGVNb2RlCi0gICAgLy8gcmVwZWF0cyB0aGUgbGFzdCBs
aW5lIG9mIHRoZSBpbWFnZSBhZnRlciBkcmF3aW5nIG9uZSB0aWxlLiBUbyBhdm9pZAotICAgIC8v
IGZpbGxpbmcgdGhlIHNwYWNlIHdpdGggYXJiaXRyYXJ5IHBpeGVscywgdGhpcyB3b3JrYXJvdW5k
IGZvcmNlcyB0aGUKLSAgICAvLyBpbWFnZSB0byBoYXZlIGEgbGluZSBvZiB0cmFuc3BhcmVudCBw
aXhlbHMgb24gdGhlICJyZXBlYXRlZCIgZWRnZShzKSwKLSAgICAvLyB0aHVzIGNhdXNpbmcgZXh0
cmEgc3BhY2UgdG8gYmUgdHJhbnNwYXJlbnQgZmlsbGVkLgotICAgIFNrU2hhZGVyOjpUaWxlTW9k
ZSB0aWxlTW9kZVggPSBtX3JlcGVhdFggPyBTa1NoYWRlcjo6a1JlcGVhdF9UaWxlTW9kZSA6IFNr
U2hhZGVyOjprQ2xhbXBfVGlsZU1vZGU7Ci0gICAgU2tTaGFkZXI6OlRpbGVNb2RlIHRpbGVNb2Rl
WSA9IG1fcmVwZWF0WSA/IFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2RlIDogU2tTaGFkZXI6OmtD
bGFtcF9UaWxlTW9kZTsKLSAgICBpbnQgZXhwYW5kVyA9IG1fcmVwZWF0WCA/IDAgOiAxOwotICAg
IGludCBleHBhbmRIID0gbV9yZXBlYXRZID8gMCA6IDE7CisgICAgaWYgKG1fcmVwZWF0WCAmJiBt
X3JlcGVhdFkpIHsKKyAgICAgICAgc2hhZGVyID0gU2tTaGFkZXI6OkNyZWF0ZUJpdG1hcFNoYWRl
cigqYm0sIFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2RlLCBTa1NoYWRlcjo6a1JlcGVhdF9UaWxl
TW9kZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gU2tpYSBkb2VzIG5vdCBoYXZlIGEgImRy
YXcgdGhlIHRpbGUgb25seSBvbmNlIiBvcHRpb24uIENsYW1wX1RpbGVNb2RlCisgICAgICAgIC8v
IHJlcGVhdHMgdGhlIGxhc3QgbGluZSBvZiB0aGUgaW1hZ2UgYWZ0ZXIgZHJhd2luZyBvbmUgdGls
ZS4gVG8gYXZvaWQKKyAgICAgICAgLy8gZmlsbGluZyB0aGUgc3BhY2Ugd2l0aCBhcmJpdHJhcnkg
cGl4ZWxzLCB0aGlzIHdvcmthcm91bmQgZm9yY2VzIHRoZQorICAgICAgICAvLyBpbWFnZSB0byBo
YXZlIGEgbGluZSBvZiB0cmFuc3BhcmVudCBwaXhlbHMgb24gdGhlICJyZXBlYXRlZCIgZWRnZShz
KSwKKyAgICAgICAgLy8gdGh1cyBjYXVzaW5nIGV4dHJhIHNwYWNlIHRvIGJlIHRyYW5zcGFyZW50
IGZpbGxlZC4KKyAgICAgICAgU2tTaGFkZXI6OlRpbGVNb2RlIHRpbGVNb2RlWCA9IG1fcmVwZWF0
WCA/IFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2RlIDogU2tTaGFkZXI6OmtDbGFtcF9UaWxlTW9k
ZTsKKyAgICAgICAgU2tTaGFkZXI6OlRpbGVNb2RlIHRpbGVNb2RlWSA9IG1fcmVwZWF0WSA/IFNr
U2hhZGVyOjprUmVwZWF0X1RpbGVNb2RlIDogU2tTaGFkZXI6OmtDbGFtcF9UaWxlTW9kZTsKKyAg
ICAgICAgaW50IGV4cGFuZFcgPSBtX3JlcGVhdFggPyAwIDogMTsKKyAgICAgICAgaW50IGV4cGFu
ZEggPSBtX3JlcGVhdFkgPyAwIDogMTsKIAotICAgIC8vIENyZWF0ZSBhIHRyYW5zcGFyZW50IGJp
dG1hcCAxIHBpeGVsIHdpZGVyIGFuZC9vciB0YWxsZXIgdGhhbiB0aGUKLSAgICAvLyBvcmlnaW5h
bCwgdGhlbiBjb3B5IHRoZSBvcmlnbmFsIGludG8gaXQuCi0gICAgLy8gRklYTUU6IElzIHRoZXJl
IGEgYmV0dGVyIHdheSB0byBwYWQgKG5vdCBzY2FsZSkgYW4gaW1hZ2UgaW4gc2tpYT8KLSAgICBT
a0JpdG1hcCBibTI7Ci0gICAgYm0yLnNldENvbmZpZyhibS0+Y29uZmlnKCksIGJtLT53aWR0aCgp
ICsgZXhwYW5kVywgYm0tPmhlaWdodCgpICsgZXhwYW5kSCk7Ci0gICAgYm0yLmFsbG9jUGl4ZWxz
KCk7Ci0gICAgYm0yLmVyYXNlQVJHQigweDAwLCAweDAwLCAweDAwLCAweDAwKTsKLSAgICBTa0Nh
bnZhcyBjYW52YXMoYm0yKTsKLSAgICBjYW52YXMuZHJhd0JpdG1hcCgqYm0sIDAsIDApOwotICAg
IHJldHVybiBTa1NoYWRlcjo6Q3JlYXRlQml0bWFwU2hhZGVyKGJtMiwgdGlsZU1vZGVYLCB0aWxl
TW9kZVkpOworICAgICAgICAvLyBDcmVhdGUgYSB0cmFuc3BhcmVudCBiaXRtYXAgMSBwaXhlbCB3
aWRlciBhbmQvb3IgdGFsbGVyIHRoYW4gdGhlCisgICAgICAgIC8vIG9yaWdpbmFsLCB0aGVuIGNv
cHkgdGhlIG9yaWduYWwgaW50byBpdC4KKyAgICAgICAgLy8gRklYTUU6IElzIHRoZXJlIGEgYmV0
dGVyIHdheSB0byBwYWQgKG5vdCBzY2FsZSkgYW4gaW1hZ2UgaW4gc2tpYT8KKyAgICAgICAgU2tC
aXRtYXAgYm0yOworICAgICAgICBibTIuc2V0Q29uZmlnKGJtLT5jb25maWcoKSwgYm0tPndpZHRo
KCkgKyBleHBhbmRXLCBibS0+aGVpZ2h0KCkgKyBleHBhbmRIKTsKKyAgICAgICAgYm0yLmFsbG9j
UGl4ZWxzKCk7CisgICAgICAgIGJtMi5lcmFzZUFSR0IoMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCk7
CisgICAgICAgIFNrQ2FudmFzIGNhbnZhcyhibTIpOworICAgICAgICBjYW52YXMuZHJhd0JpdG1h
cCgqYm0sIDAsIDApOworICAgICAgICBzaGFkZXIgPSBTa1NoYWRlcjo6Q3JlYXRlQml0bWFwU2hh
ZGVyKGJtMiwgdGlsZU1vZGVYLCB0aWxlTW9kZVkpOworICAgIH0KKworICAgIC8vIFRoZSBsb2Nh
bCB0cmFuc2Zvcm0gaXMgc2F2ZWQgaW4gbV9wYXR0ZXJuU3BhY2VUcmFuc2Zvcm1hdGlvbiwgYW5k
IHdlIG5lZWQKKyAgICAvLyB0byBhcHBseSBpdCB0byB0aGUgcGF0dGVybi4gQnV0IFNraWEgc2Vl
bXMgdG8gaGF2ZSBhIHByb2JsZW0gd2l0aAorICAgIC8vIHBvc2l0aXZlIHRyYW5zbGF0aW9ucyBp
biB0aWxlIG1vZGUsIHNvIGFkanVzdCB0aGUgdHJhbnNsYXRpb24gdG8gYW4KKyAgICAvLyBlcXVp
dmFsZW50IG5lZ2F0aXZlIHZhbHVlIGlmIHdlIGFyZSBpbiB0aWxlIG1vZGUuCisgICAgLy8gRm9y
IGV4YW1wbGU6CisgICAgLy8gICB0cmFuc2Zvcm0uZSgpID09IDU2ICAoWCB0cmFuc2xhdGlvbikK
KyAgICAvLyAgIGJtLT53aWR0aCgpID09IDIwICAgIChQYXR0ZXJuIHdpZHRoKQorICAgIC8vIFRv
IG1ha2UgaXQgbG9vayB0aGUgc2FtZSwgd2UgY2FuIGhhdmUgYSBYIHRyYW5zbGF0aW9uIG9mIC02
LCAtMjYsIGV0Yy4KKyAgICAvLyBBbiBlcXVpdmFsZW50IG5lZ2F0aXZlIHRyYW5zbGF0aW9uIHdv
dWxkIGJlIDU2IGxlc3Mgc29tZSBtdWx0aXBsZSBvZiAyMCwKKyAgICAvLyBlLmcuIC02LCAtMjYs
IC00Ni4gV2UgY2FuIG9idGFpbiB0aGUgZmlyc3Qgc3VjaCBudW1iZXIgdGhhdCBzYXRpc2ZpZXMK
KyAgICAvLyB0aGlzIHByb3BlcnR5IGJ5IGRvaW5nIDU2IC0gMyAqIDIwID0gLTYuIFRoZSB2YWx1
ZSBvZiBzdWNoIG11bHRpcGxlIGlzCisgICAgLy8gb2J0YWluZWQgYnkgY2VpbCg1NiAvIDIwKSA9
IDMuCisgICAgZG91YmxlIHRyYW5zbGF0ZVggPSAwLjA7CisgICAgZG91YmxlIHRyYW5zbGF0ZVkg
PSAwLjA7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gbV9wYXR0ZXJuU3Bh
Y2VUcmFuc2Zvcm1hdGlvbjsKKyAgICBpZiAobV9yZXBlYXRYICYmIGJtLT53aWR0aCgpICYmIHRy
YW5zZm9ybS5lKCkgPiAwLjApIHsKKyAgICAgIHRyYW5zbGF0ZVggPSAtYm0tPndpZHRoKCkgKiBj
ZWlsKHRyYW5zZm9ybS5lKCkgLyBibS0+d2lkdGgoKSk7CisgICAgfQorICAgIGlmIChtX3JlcGVh
dFkgJiYgYm0tPmhlaWdodCgpICYmIHRyYW5zZm9ybS5mKCkgPiAwLjApIHsKKyAgICAgIHRyYW5z
bGF0ZVkgPSAtYm0tPmhlaWdodCgpICogY2VpbCh0cmFuc2Zvcm0uZigpIC8gYm0tPmhlaWdodCgp
KTsKKyAgICB9CisgICAgLy8gTm90ZSB0aGF0IHRyYW5zZm9ybS50cmFuc2xhdGUoeCwgeSkgaXMg
dG8gYXBwbHkgdHJhbnNsYXRpb24gdG8gdGhlCisgICAgLy8gY3VycmVudCBtYXRyaXgsIG5vdCBz
ZXR0aW5nIHRoZSB0cmFuc2xhdGlvbi4KKyAgICBzaGFkZXItPnNldExvY2FsTWF0cml4KHRyYW5z
Zm9ybS50cmFuc2xhdGUodHJhbnNsYXRlWCwgdHJhbnNsYXRlWSkpOworICAgIHJldHVybiBzaGFk
ZXI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28511</attachid>
            <date>2009-03-11 19:16:42 -0700</date>
            <delta_ts>2010-01-28 12:52:45 -0800</delta_ts>
            <desc>patch + change log</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>6185</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxMTM1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMDktMDMtMTAgIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSA/CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI0NTM0CisKKyAgICAgICAgUGVyZm9ybSBsb2NhbCB0cmFu
c2Zvcm1hdGlvbiBpbiBwYXR0ZXJuIHByZXBhcmF0aW9uIGluIFNraWEuIFN1Y2gKKyAgICAgICAg
b3BlcmF0aW9uIHdhcyBtaXNzaW5nIGFuZCBjYXVzZWQgbGF5b3V0IHRlc3QgZmFpbHVyZXMgaW4g
Q2hyb21pdW0uCisKKyAgICAgICAgVGhlIHBhdGNoIGZpeGVzIHRoZSBmb2xsb3dpbmcgbGF5b3V0
IHRlc3RzIGluIENocm9taXVtOgorICAgICAgICBMYXlvdXRUZXN0cy9zdmcvYmF0aWsvcGFpbnRz
L3BhdHRlcm5SZWdpb25BLnN2ZworICAgICAgICBMYXlvdXRUZXN0cy9zdmcvVzNDLVNWRy0xLjEv
cHNlcnZlcnMtZ3JhZC0wNi1iLnN2ZworICAgICAgICBMYXlvdXRUZXN0cy9zdmcvVzNDLVNWRy0x
LjEvcHNlcnZlcnMtcGF0dGVybi0wMS1iLnN2ZworICAgICAgICBMYXlvdXRUZXN0cy9zdmcvVzND
LVNWRy0xLjEvY29vcmRzLXVuaXRzLTAxLWIuc3ZnCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9za2lhL1BhdHRlcm5Ta2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OmNy
ZWF0ZVBsYXRmb3JtUGF0dGVybik6CisKIDIwMDktMDMtMDkgIFNpbW9uIEZyYXNlciAgPHNpbW9u
LmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BhdHRlcm5Ta2lhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0dGVyblNraWEuY3BwCShy
ZXZpc2lvbiAxMTM1MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXR0ZXJu
U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDM4ICs0MCw2MyBAQAogCiBQbGF0Zm9ybVBh
dHRlcm5QdHIgUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBwYXR0ZXJuVHJhbnNmb3JtKSBjb25zdAogewotICAgIC8vIE5vdGU6IHBhdHRl
cm5UcmFuc2Zvcm0gaXMgaWdub3JlZCBzaW5jZSBpdCBzZWVtcyB0byBiZSBhcHBsaWVkIGVsc2V3
aGVyZQotICAgIC8vICh3aGVuIHRoZSBwYXR0ZXJuIGlzIHVzZWQ/KS4gQXBwbHlpbmcgaXQgdG8g
dGhlIHBhdHRlcm4gKGkuZS4KLSAgICAvLyBzaGFkZXItPnNldExvY2FsTWF0cml4KSByZXN1bHRz
IGluIGEgZG91YmxlIHRyYW5zZm9ybWF0aW9uLiBUaGlzIGNhbiBiZQotICAgIC8vIHNlZW4sIGZv
ciBpbnN0YW5jZSwgYXMgYW4gZXh0cmEgb2Zmc2V0IGluOgotICAgIC8vIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3BhdHRlcm5maWxsLXJlcGVhdC5odG1sCi0gICAgLy8gYW5kIGV4cGFuZGVkIHNj
YWxlIGFuZCBza2V3IGluOgotICAgIC8vIExheW91dFRlc3RzL3N2Zy9XM0MtU1ZHLTEuMS9wc2Vy
dmVycy1ncmFkLTA2LWIuc3ZnCisgICAgLy8gTm90ZTogfHBhdHRlcm5UcmFuc2Zvcm18IGlzIGln
bm9yZWQgc2luY2UgaXQgaXMgYSBnbG9iYWwgdHJhbnNmb3JtYXRpb24gCisgICAgLy8gYXBwbGll
ZCBieSB0aGUgR3JhcGhpY3NDb250ZXh0LiBQYXR0ZXJuLXNwZWNpZmljIHRyYW5zZm9ybWF0aW9u
IGlzIHN0b3JlZAorICAgIC8vIGluIHxtX3BhdHRlcm5TcGFjZVRyYW5zZm9ybWF0aW9ufC4KIAog
ICAgIFNrQml0bWFwKiBibSA9IG1fdGlsZUltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpOwotICAgIGlmIChtX3JlcGVhdFggJiYgbV9yZXBlYXRZKQotICAgICAgICByZXR1cm4gU2tT
aGFkZXI6OkNyZWF0ZUJpdG1hcFNoYWRlcigqYm0sIFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2Rl
LCBTa1NoYWRlcjo6a1JlcGVhdF9UaWxlTW9kZSk7CisgICAgU2tTaGFkZXIqIHNoYWRlciA9IE5V
TEw7CiAKLSAgICAvLyBTa2lhIGRvZXMgbm90IGhhdmUgYSAiZHJhdyB0aGUgdGlsZSBvbmx5IG9u
Y2UiIG9wdGlvbi4gQ2xhbXBfVGlsZU1vZGUKLSAgICAvLyByZXBlYXRzIHRoZSBsYXN0IGxpbmUg
b2YgdGhlIGltYWdlIGFmdGVyIGRyYXdpbmcgb25lIHRpbGUuIFRvIGF2b2lkCi0gICAgLy8gZmls
bGluZyB0aGUgc3BhY2Ugd2l0aCBhcmJpdHJhcnkgcGl4ZWxzLCB0aGlzIHdvcmthcm91bmQgZm9y
Y2VzIHRoZQotICAgIC8vIGltYWdlIHRvIGhhdmUgYSBsaW5lIG9mIHRyYW5zcGFyZW50IHBpeGVs
cyBvbiB0aGUgInJlcGVhdGVkIiBlZGdlKHMpLAotICAgIC8vIHRodXMgY2F1c2luZyBleHRyYSBz
cGFjZSB0byBiZSB0cmFuc3BhcmVudCBmaWxsZWQuCi0gICAgU2tTaGFkZXI6OlRpbGVNb2RlIHRp
bGVNb2RlWCA9IG1fcmVwZWF0WCA/IFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2RlIDogU2tTaGFk
ZXI6OmtDbGFtcF9UaWxlTW9kZTsKLSAgICBTa1NoYWRlcjo6VGlsZU1vZGUgdGlsZU1vZGVZID0g
bV9yZXBlYXRZID8gU2tTaGFkZXI6OmtSZXBlYXRfVGlsZU1vZGUgOiBTa1NoYWRlcjo6a0NsYW1w
X1RpbGVNb2RlOwotICAgIGludCBleHBhbmRXID0gbV9yZXBlYXRYID8gMCA6IDE7Ci0gICAgaW50
IGV4cGFuZEggPSBtX3JlcGVhdFkgPyAwIDogMTsKKyAgICBpZiAobV9yZXBlYXRYICYmIG1fcmVw
ZWF0WSkgeworICAgICAgICBzaGFkZXIgPSBTa1NoYWRlcjo6Q3JlYXRlQml0bWFwU2hhZGVyKCpi
bSwgU2tTaGFkZXI6OmtSZXBlYXRfVGlsZU1vZGUsIFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2Rl
KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBTa2lhIGRvZXMgbm90IGhhdmUgYSAiZHJhdyB0
aGUgdGlsZSBvbmx5IG9uY2UiIG9wdGlvbi4gQ2xhbXBfVGlsZU1vZGUKKyAgICAgICAgLy8gcmVw
ZWF0cyB0aGUgbGFzdCBsaW5lIG9mIHRoZSBpbWFnZSBhZnRlciBkcmF3aW5nIG9uZSB0aWxlLiBU
byBhdm9pZAorICAgICAgICAvLyBmaWxsaW5nIHRoZSBzcGFjZSB3aXRoIGFyYml0cmFyeSBwaXhl
bHMsIHRoaXMgd29ya2Fyb3VuZCBmb3JjZXMgdGhlCisgICAgICAgIC8vIGltYWdlIHRvIGhhdmUg
YSBsaW5lIG9mIHRyYW5zcGFyZW50IHBpeGVscyBvbiB0aGUgInJlcGVhdGVkIiBlZGdlKHMpLAor
ICAgICAgICAvLyB0aHVzIGNhdXNpbmcgZXh0cmEgc3BhY2UgdG8gYmUgdHJhbnNwYXJlbnQgZmls
bGVkLgorICAgICAgICBTa1NoYWRlcjo6VGlsZU1vZGUgdGlsZU1vZGVYID0gbV9yZXBlYXRYID8g
U2tTaGFkZXI6OmtSZXBlYXRfVGlsZU1vZGUgOiBTa1NoYWRlcjo6a0NsYW1wX1RpbGVNb2RlOwor
ICAgICAgICBTa1NoYWRlcjo6VGlsZU1vZGUgdGlsZU1vZGVZID0gbV9yZXBlYXRZID8gU2tTaGFk
ZXI6OmtSZXBlYXRfVGlsZU1vZGUgOiBTa1NoYWRlcjo6a0NsYW1wX1RpbGVNb2RlOworICAgICAg
ICBpbnQgZXhwYW5kVyA9IG1fcmVwZWF0WCA/IDAgOiAxOworICAgICAgICBpbnQgZXhwYW5kSCA9
IG1fcmVwZWF0WSA/IDAgOiAxOwogCi0gICAgLy8gQ3JlYXRlIGEgdHJhbnNwYXJlbnQgYml0bWFw
IDEgcGl4ZWwgd2lkZXIgYW5kL29yIHRhbGxlciB0aGFuIHRoZQotICAgIC8vIG9yaWdpbmFsLCB0
aGVuIGNvcHkgdGhlIG9yaWduYWwgaW50byBpdC4KLSAgICAvLyBGSVhNRTogSXMgdGhlcmUgYSBi
ZXR0ZXIgd2F5IHRvIHBhZCAobm90IHNjYWxlKSBhbiBpbWFnZSBpbiBza2lhPwotICAgIFNrQml0
bWFwIGJtMjsKLSAgICBibTIuc2V0Q29uZmlnKGJtLT5jb25maWcoKSwgYm0tPndpZHRoKCkgKyBl
eHBhbmRXLCBibS0+aGVpZ2h0KCkgKyBleHBhbmRIKTsKLSAgICBibTIuYWxsb2NQaXhlbHMoKTsK
LSAgICBibTIuZXJhc2VBUkdCKDB4MDAsIDB4MDAsIDB4MDAsIDB4MDApOwotICAgIFNrQ2FudmFz
IGNhbnZhcyhibTIpOwotICAgIGNhbnZhcy5kcmF3Qml0bWFwKCpibSwgMCwgMCk7Ci0gICAgcmV0
dXJuIFNrU2hhZGVyOjpDcmVhdGVCaXRtYXBTaGFkZXIoYm0yLCB0aWxlTW9kZVgsIHRpbGVNb2Rl
WSk7CisgICAgICAgIC8vIENyZWF0ZSBhIHRyYW5zcGFyZW50IGJpdG1hcCAxIHBpeGVsIHdpZGVy
IGFuZC9vciB0YWxsZXIgdGhhbiB0aGUKKyAgICAgICAgLy8gb3JpZ2luYWwsIHRoZW4gY29weSB0
aGUgb3JpZ25hbCBpbnRvIGl0LgorICAgICAgICAvLyBGSVhNRTogSXMgdGhlcmUgYSBiZXR0ZXIg
d2F5IHRvIHBhZCAobm90IHNjYWxlKSBhbiBpbWFnZSBpbiBza2lhPworICAgICAgICBTa0JpdG1h
cCBibTI7CisgICAgICAgIGJtMi5zZXRDb25maWcoYm0tPmNvbmZpZygpLCBibS0+d2lkdGgoKSAr
IGV4cGFuZFcsIGJtLT5oZWlnaHQoKSArIGV4cGFuZEgpOworICAgICAgICBibTIuYWxsb2NQaXhl
bHMoKTsKKyAgICAgICAgYm0yLmVyYXNlQVJHQigweDAwLCAweDAwLCAweDAwLCAweDAwKTsKKyAg
ICAgICAgU2tDYW52YXMgY2FudmFzKGJtMik7CisgICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwKCpi
bSwgMCwgMCk7CisgICAgICAgIHNoYWRlciA9IFNrU2hhZGVyOjpDcmVhdGVCaXRtYXBTaGFkZXIo
Ym0yLCB0aWxlTW9kZVgsIHRpbGVNb2RlWSk7CisgICAgfQorCisgICAgLy8gVGhlIGxvY2FsIHRy
YW5zZm9ybSBpcyBzYXZlZCBpbiBtX3BhdHRlcm5TcGFjZVRyYW5zZm9ybWF0aW9uLCBhbmQgd2Ug
bmVlZAorICAgIC8vIHRvIGFwcGx5IGl0IHRvIHRoZSBwYXR0ZXJuLiBCdXQgU2tpYSBzZWVtcyB0
byBoYXZlIGEgcHJvYmxlbSB3aXRoCisgICAgLy8gcG9zaXRpdmUgdHJhbnNsYXRpb25zIGluIHRp
bGUgbW9kZSwgc28gYWRqdXN0IHRoZSB0cmFuc2xhdGlvbiB0byBhbgorICAgIC8vIGVxdWl2YWxl
bnQgbmVnYXRpdmUgdmFsdWUgaWYgd2UgYXJlIGluIHRpbGUgbW9kZS4KKyAgICAvLyBGb3IgZXhh
bXBsZToKKyAgICAvLyAgIHRyYW5zZm9ybS5lKCkgPT0gNTYgIChYIHRyYW5zbGF0aW9uKQorICAg
IC8vICAgYm0tPndpZHRoKCkgPT0gMjAgICAgKFBhdHRlcm4gd2lkdGgpCisgICAgLy8gVG8gbWFr
ZSBpdCBsb29rIHRoZSBzYW1lLCB3ZSBjYW4gaGF2ZSBhIFggdHJhbnNsYXRpb24gb2YgLTYsIC0y
NiwgZXRjLgorICAgIC8vIEFuIGVxdWl2YWxlbnQgbmVnYXRpdmUgdHJhbnNsYXRpb24gd291bGQg
YmUgNTYgbGVzcyBzb21lIG11bHRpcGxlIG9mIDIwLAorICAgIC8vIGUuZy4gLTYsIC0yNiwgLTQ2
LiBXZSBjYW4gb2J0YWluIHRoZSBmaXJzdCBzdWNoIG51bWJlciB0aGF0IHNhdGlzZmllcworICAg
IC8vIHRoaXMgcHJvcGVydHkgYnkgZG9pbmcgNTYgLSAzICogMjAgPSAtNi4gVGhlIHZhbHVlIG9m
IHN1Y2ggbXVsdGlwbGUgaXMKKyAgICAvLyBvYnRhaW5lZCBieSBjZWlsKDU2IC8gMjApID0gMy4K
KyAgICBkb3VibGUgdHJhbnNsYXRlWCA9IDAuMDsKKyAgICBkb3VibGUgdHJhbnNsYXRlWSA9IDAu
MDsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBtX3BhdHRlcm5TcGFjZVRy
YW5zZm9ybWF0aW9uOworICAgIGlmIChtX3JlcGVhdFggJiYgYm0tPndpZHRoKCkgJiYgdHJhbnNm
b3JtLmUoKSA+IDAuMCkgeworICAgICAgdHJhbnNsYXRlWCA9IC1ibS0+d2lkdGgoKSAqIGNlaWwo
dHJhbnNmb3JtLmUoKSAvIGJtLT53aWR0aCgpKTsKKyAgICB9CisgICAgaWYgKG1fcmVwZWF0WSAm
JiBibS0+aGVpZ2h0KCkgJiYgdHJhbnNmb3JtLmYoKSA+IDAuMCkgeworICAgICAgdHJhbnNsYXRl
WSA9IC1ibS0+aGVpZ2h0KCkgKiBjZWlsKHRyYW5zZm9ybS5mKCkgLyBibS0+aGVpZ2h0KCkpOwor
ICAgIH0KKyAgICAvLyBOb3RlIHRoYXQgdHJhbnNmb3JtLnRyYW5zbGF0ZSh4LCB5KSBpcyB0byBh
cHBseSB0cmFuc2xhdGlvbiB0byB0aGUKKyAgICAvLyBjdXJyZW50IG1hdHJpeCwgbm90IHNldHRp
bmcgdGhlIHRyYW5zbGF0aW9uLgorICAgIHNoYWRlci0+c2V0TG9jYWxNYXRyaXgodHJhbnNmb3Jt
LnRyYW5zbGF0ZSh0cmFuc2xhdGVYLCB0cmFuc2xhdGVZKSk7CisgICAgcmV0dXJuIHNoYWRlcjsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="13996"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47643</attachid>
            <date>2010-01-28 12:52:45 -0800</date>
            <delta_ts>2010-01-28 13:17:16 -0800</delta_ts>
            <desc>New fix</desc>
            <filename>pattern_transform.patch</filename>
            <type>text/plain</type>
            <size>9953</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDAwOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMTAtMDEtMjggIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRml4IGZvciBQYXR0ZXJuIHRyYW5zZm9ybWF0aW9ucyBpbiBDaHJvbWl1bS9Ta2lhLiAg
VGhpcyByZXF1aXJlZCAKKyAgICAgICAgcmV3b3JraW5nIFBhdHRlcm4gYSBiaXQgdG8gYmUgbW9y
ZSBsaWtlIHRoZSBHcmFkaWVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgSW4gcGFydGljdWxh
ciwgaXQgbm93IGhvbGRzIGFuIG1fcGF0dGVybiByZWZlcmVuY2UgdG8gdGhlCisgICAgICAgIHBs
YXRmb3JtLXNwZWNpZmljIGltcGxlbWVudGF0aW9uLCBhbmQgcGFzc2VzIGFsb25nIGNoYW5nZXMg
dG8gdGhlCisgICAgICAgIG1fcGF0dGVyblNwYWNlVHJhbnNmb3JtLCBpbiB0aGUgc2FtZSB3YXkg
dGhhdCBHcmFkaWVudCBkb2VzIGZvcgorICAgICAgICBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm0u
ICBUaGlzIGlzIG5lY2Vzc2FyeSBzaW5jZSBTa2lhIGNyZWF0ZXMgdGhlCisgICAgICAgIHBsYXRm
b3JtLXNwZWNpZmljIHBhdHRlcm4gKFNrU2hhZGVyKSBvbmNlLCByYXRoZXIgdGhhbiByZWNyZWF0
aW5nIGl0CisgICAgICAgIG9uIGVhY2ggZHJhdy4KKyAgICAgICAgRm9yIHBsYXRmb3JtcyBvdGhl
ciB0aGFuIFNraWEsIG1fcGF0dGVybiByZW1haW5zIE5VTEwsIHRoZXkgd2lsbAorICAgICAgICBj
b250aW51ZSB0byB1c2UgdGhlIHN0YXRpYyBjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oKSwgYW5kIHRo
ZSBuZXcKKyAgICAgICAgbm90aWZpY2F0aW9uIGZ1bmN0aW9ucyBhcmUgc3R1YmJlZCBvdXQuICBP
dGhlciBwbGF0Zm9ybXMgY2FuIHN3aXRjaCB0bworICAgICAgICB0aGUgbmV3IGltcGxlbWVudGF0
aW9uIGlmIHRoZXkgc28gY2hvb3NlLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yNDUzNCAKKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkK
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGF0dGVybjo6UGF0dGVybik6CisgICAgICAgIEluaXRpYWxpemVyIGZvciBtX3BhdHRl
cm4uCisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjp+UGF0dGVybik6CisgICAgICAgIGNhbGwg
cGxhdGZvcm1EZXN0cm95KCkuCisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpzZXRQYXR0ZXJu
U3BhY2VUcmFuc2Zvcm0pOgorICAgICAgICBQYXNzIGFsb25nIHRoZSB0cmFuc2Zvcm0gdmlhIHNl
dFBsYXRmb3JtUGF0dGVyblNwYWNlVHJhbnNmb3JtKCkuCisgICAgICAgIChXZWJDb3JlOjpQYXR0
ZXJuOjpwbGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6UGF0dGVybjo6c2V0UGxh
dGZvcm1QYXR0ZXJuU3BhY2VUcmFuc2Zvcm0pOgorICAgICAgICBTdHViIGltcGxlbWVudGF0aW9u
cyBmb3Igbm9uLXNraWEgcGxhdGZvcm1zLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1Bh
dHRlcm4uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4
dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1TdHJva2VQYXR0ZXJuKToKKyAgICAgICAgQ2FsbCBwbGF0Zm9ybVBhdHRlcm4oKSBpbnN0
ZWFkIG9mIHN0YXRpYyB2ZXJzaW9uLgorICAgICAgICBTaW5jZSBQYXR0ZXJuIG5vdyBvd25zIGl0
cyBTa1NoYWRlciwgbm8gbmVlZCB0byB1bnJlZiBoZXJlLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3NraWEvUGF0dGVyblNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0dGVybjo6
cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgVW5yZWYgdGhlIFNrU2hhZGVyIG9uIGRlc3Ryb3ku
CisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpwbGF0Zm9ybVBhdHRlcm4pOgorICAgICAgICBD
cmVhdGUgdGhlIHBsYXRmb3JtIHBhdHRlcm4gKFNrU2hhZGVyKSBvbmNlLCBhbmQgY2FjaGUgaXQu
CisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpzZXRQbGF0Zm9ybVBhdHRlcm5TcGFjZVRyYW5z
Zm9ybSk6CisgICAgICAgIFNldCB0aGUgbG9jYWwgbWF0cml4IGZyb20gdGhlIG1fcGF0dGVyblNw
YWNlVHJhbnNmb3JtLgorCiAyMDEwLTAxLTI4ICBBYXJvbiBCb29kbWFuICA8YWFAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BhdHRlcm4uY3BwCShyZXZpc2lvbiA1NDAwOCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDgg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGF0dGVybjo6UGF0dGVybihJbWFnZSogaW1hZ2Us
IGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZKQotICAgIDogbV90aWxlSW1hZ2UoaW1hZ2UpCisg
ICAgOiBtX3BhdHRlcm4oMCkKKyAgICAsIG1fdGlsZUltYWdlKGltYWdlKQogICAgICwgbV9yZXBl
YXRYKHJlcGVhdFgpCiAgICAgLCBtX3JlcGVhdFkocmVwZWF0WSkKIHsKQEAgLTQxLDYgKzQyLDIz
IEBAIFBhdHRlcm46OlBhdHRlcm4oSW1hZ2UqIGltYWdlLCBib29sIHJlcGUKIAogUGF0dGVybjo6
flBhdHRlcm4oKQogeworICAgIHBsYXRmb3JtRGVzdHJveSgpOwogfQogCit2b2lkIFBhdHRlcm46
OnNldFBhdHRlcm5TcGFjZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGF0
dGVyblNwYWNlVHJhbnNmb3JtYXRpb24pCit7CisgICAgbV9wYXR0ZXJuU3BhY2VUcmFuc2Zvcm1h
dGlvbiA9IHBhdHRlcm5TcGFjZVRyYW5zZm9ybWF0aW9uOworICAgIHNldFBsYXRmb3JtUGF0dGVy
blNwYWNlVHJhbnNmb3JtKCk7Cit9CisKKyNpZiAhUExBVEZPUk0oU0tJQSkKK3ZvaWQgUGF0dGVy
bjo6cGxhdGZvcm1EZXN0cm95KCkKK3sKK30KKwordm9pZCBQYXR0ZXJuOjpzZXRQbGF0Zm9ybVBh
dHRlcm5TcGFjZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpCit7Cit9Cisj
ZW5kaWYKKwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgJKHJldmlzaW9u
IDU0MDA4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc0LDkgKzc0LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBJ
bWFnZSogdGlsZUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV90aWxlSW1hZ2UuZ2V0KCk7IH0KIAor
ICAgICAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOworCiAgICAgICAgIC8vIFBhdHRlcm4gc3Bh
Y2UgaXMgYW4gYWJzdHJhY3Qgc3BhY2UgdGhhdCBtYXBzIHRvIHRoZSBkZWZhdWx0IHVzZXIgc3Bh
Y2UgYnkgdGhlIHRyYW5zZm9ybWF0aW9uICd1c2VyU3BhY2VUcmFuc2Zvcm1hdGlvbicgCisjaWYg
UExBVEZPUk0oU0tJQSkKKyAgICAgICAgUGxhdGZvcm1QYXR0ZXJuUHRyIHBsYXRmb3JtUGF0dGVy
bihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdXNlclNwYWNlVHJhbnNmb3JtYXRpb24pOwor
I2Vsc2UKICAgICAgICAgUGxhdGZvcm1QYXR0ZXJuUHRyIGNyZWF0ZVBsYXRmb3JtUGF0dGVybihj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdXNlclNwYWNlVHJhbnNmb3JtYXRpb24pIGNvbnN0
OwotICAgICAgICB2b2lkIHNldFBhdHRlcm5TcGFjZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgcGF0dGVyblNwYWNlVHJhbnNmb3JtYXRpb24pIHsgbV9wYXR0ZXJuU3BhY2VU
cmFuc2Zvcm1hdGlvbiA9IHBhdHRlcm5TcGFjZVRyYW5zZm9ybWF0aW9uOyB9CisjZW5kaWYKKyAg
ICAgICAgdm9pZCBzZXRQYXR0ZXJuU3BhY2VUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHBhdHRlcm5TcGFjZVRyYW5zZm9ybWF0aW9uKTsKKyAgICAgICAgdm9pZCBzZXRQbGF0
Zm9ybVBhdHRlcm5TcGFjZVRyYW5zZm9ybSgpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUGF0
dGVybihJbWFnZSosIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZKTsKQEAgLTg1LDYgKzkyLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1fcmVwZWF0WDsKICAgICAgICAg
Ym9vbCBtX3JlcGVhdFk7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcGF0dGVyblNw
YWNlVHJhbnNmb3JtYXRpb247CisgICAgICAgIFBsYXRmb3JtUGF0dGVyblB0ciBtX3BhdHRlcm47
CiAgICAgfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAkocmV2aXNpb24gNTQw
MDgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tp
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3OCw5ICs5NzgsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1GaWxsUGF0CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgU2tTaGFkZXIqIHBhdCA9IHBhdHRlcm4tPmNyZWF0ZVBsYXRm
b3JtUGF0dGVybihnZXRDVE0oKSk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPnNldEZpbGxTaGFk
ZXIocGF0KTsKLSAgICBwYXQtPnNhZmVVbnJlZigpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5z
ZXRGaWxsU2hhZGVyKHBhdHRlcm4tPnBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSkpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgSW50U2l6ZSYgc2l6
ZSwKQEAgLTEwNjUsOSArMTA2Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bVN0cm9rZVAKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBTa1NoYWRlciogcGF0ID0gcGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENU
TSgpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0U3Ryb2tlU2hhZGVyKHBhdCk7Ci0gICAg
cGF0LT5zYWZlVW5yZWYoKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0U3Ryb2tlU2hhZGVy
KHBhdHRlcm4tPnBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSkpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUoaW50IG1vZGUpCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0dGVyblNraWEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXR0ZXJuU2tpYS5jcHAJKHJldmlzaW9u
IDU0MDA4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BhdHRlcm5Ta2lhLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDAsOCArNDAsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1QbGF0Zm9ybVBhdHRlcm5QdHIgUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJuVHJhbnNmb3JtKSBjb25zdAordm9pZCBQ
YXR0ZXJuOjpwbGF0Zm9ybURlc3Ryb3koKQogeworICAgIG1fcGF0dGVybi0+c2FmZVVucmVmKCk7
CisgICAgbV9wYXR0ZXJuID0gMDsKK30KKworUGxhdGZvcm1QYXR0ZXJuUHRyIFBhdHRlcm46OnBs
YXRmb3JtUGF0dGVybihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGF0dGVyblRyYW5zZm9y
bSkKK3sKKyAgICBpZiAobV9wYXR0ZXJuKQorICAgICAgICByZXR1cm4gbV9wYXR0ZXJuOworCiAg
ICAgLy8gTm90ZTogcGF0dGVyblRyYW5zZm9ybSBpcyBpZ25vcmVkIHNpbmNlIGl0IHNlZW1zIHRv
IGJlIGFwcGxpZWQgZWxzZXdoZXJlCiAgICAgLy8gKHdoZW4gdGhlIHBhdHRlcm4gaXMgdXNlZD8p
LiBBcHBseWluZyBpdCB0byB0aGUgcGF0dGVybiAoaS5lLgogICAgIC8vIHNoYWRlci0+c2V0TG9j
YWxNYXRyaXgpIHJlc3VsdHMgaW4gYSBkb3VibGUgdHJhbnNmb3JtYXRpb24uIFRoaXMgY2FuIGJl
CkBAIC01MywzMSArNjIsNDIgQEAgUGxhdGZvcm1QYXR0ZXJuUHRyIFBhdHRlcm46OmNyZWF0ZVBs
YXRmbwogICAgIFNrQml0bWFwKiBibSA9IG1fdGlsZUltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOwogICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBiaXRtYXAsIHJldHVybiBhIHRy
YW5zcGFyZW50IHNoYWRlci4KICAgICBpZiAoIWJtKQotICAgICAgICByZXR1cm4gbmV3IFNrQ29s
b3JTaGFkZXIoU2tDb2xvclNldEFSR0IoMCwgMCwgMCwgMCkpOworICAgICAgICBtX3BhdHRlcm4g
PSBuZXcgU2tDb2xvclNoYWRlcihTa0NvbG9yU2V0QVJHQigwLCAwLCAwLCAwKSk7CiAKLSAgICBp
ZiAobV9yZXBlYXRYICYmIG1fcmVwZWF0WSkKLSAgICAgICAgcmV0dXJuIFNrU2hhZGVyOjpDcmVh
dGVCaXRtYXBTaGFkZXIoKmJtLCBTa1NoYWRlcjo6a1JlcGVhdF9UaWxlTW9kZSwgU2tTaGFkZXI6
OmtSZXBlYXRfVGlsZU1vZGUpOworICAgIGVsc2UgaWYgKG1fcmVwZWF0WCAmJiBtX3JlcGVhdFkp
CisgICAgICAgIG1fcGF0dGVybiA9IFNrU2hhZGVyOjpDcmVhdGVCaXRtYXBTaGFkZXIoKmJtLCBT
a1NoYWRlcjo6a1JlcGVhdF9UaWxlTW9kZSwgU2tTaGFkZXI6OmtSZXBlYXRfVGlsZU1vZGUpOwog
Ci0gICAgLy8gU2tpYSBkb2VzIG5vdCBoYXZlIGEgImRyYXcgdGhlIHRpbGUgb25seSBvbmNlIiBv
cHRpb24uIENsYW1wX1RpbGVNb2RlCi0gICAgLy8gcmVwZWF0cyB0aGUgbGFzdCBsaW5lIG9mIHRo
ZSBpbWFnZSBhZnRlciBkcmF3aW5nIG9uZSB0aWxlLiBUbyBhdm9pZAotICAgIC8vIGZpbGxpbmcg
dGhlIHNwYWNlIHdpdGggYXJiaXRyYXJ5IHBpeGVscywgdGhpcyB3b3JrYXJvdW5kIGZvcmNlcyB0
aGUKLSAgICAvLyBpbWFnZSB0byBoYXZlIGEgbGluZSBvZiB0cmFuc3BhcmVudCBwaXhlbHMgb24g
dGhlICJyZXBlYXRlZCIgZWRnZShzKSwKLSAgICAvLyB0aHVzIGNhdXNpbmcgZXh0cmEgc3BhY2Ug
dG8gYmUgdHJhbnNwYXJlbnQgZmlsbGVkLgotICAgIFNrU2hhZGVyOjpUaWxlTW9kZSB0aWxlTW9k
ZVggPSBtX3JlcGVhdFggPyBTa1NoYWRlcjo6a1JlcGVhdF9UaWxlTW9kZSA6IFNrU2hhZGVyOjpr
Q2xhbXBfVGlsZU1vZGU7Ci0gICAgU2tTaGFkZXI6OlRpbGVNb2RlIHRpbGVNb2RlWSA9IG1fcmVw
ZWF0WSA/IFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2RlIDogU2tTaGFkZXI6OmtDbGFtcF9UaWxl
TW9kZTsKLSAgICBpbnQgZXhwYW5kVyA9IG1fcmVwZWF0WCA/IDAgOiAxOwotICAgIGludCBleHBh
bmRIID0gbV9yZXBlYXRZID8gMCA6IDE7Ci0KLSAgICAvLyBDcmVhdGUgYSB0cmFuc3BhcmVudCBi
aXRtYXAgMSBwaXhlbCB3aWRlciBhbmQvb3IgdGFsbGVyIHRoYW4gdGhlCi0gICAgLy8gb3JpZ2lu
YWwsIHRoZW4gY29weSB0aGUgb3JpZ25hbCBpbnRvIGl0LgotICAgIC8vIEZJWE1FOiBJcyB0aGVy
ZSBhIGJldHRlciB3YXkgdG8gcGFkIChub3Qgc2NhbGUpIGFuIGltYWdlIGluIHNraWE/Ci0gICAg
U2tCaXRtYXAgYm0yOwotICAgIGJtMi5zZXRDb25maWcoYm0tPmNvbmZpZygpLCBibS0+d2lkdGgo
KSArIGV4cGFuZFcsIGJtLT5oZWlnaHQoKSArIGV4cGFuZEgpOwotICAgIGJtMi5hbGxvY1BpeGVs
cygpOwotICAgIGJtMi5lcmFzZUFSR0IoMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCk7Ci0gICAgU2tD
YW52YXMgY2FudmFzKGJtMik7Ci0gICAgY2FudmFzLmRyYXdCaXRtYXAoKmJtLCAwLCAwKTsKLSAg
ICByZXR1cm4gU2tTaGFkZXI6OkNyZWF0ZUJpdG1hcFNoYWRlcihibTIsIHRpbGVNb2RlWCwgdGls
ZU1vZGVZKTsKKyAgICBlbHNlIHsKKworICAgICAgICAvLyBTa2lhIGRvZXMgbm90IGhhdmUgYSAi
ZHJhdyB0aGUgdGlsZSBvbmx5IG9uY2UiIG9wdGlvbi4gQ2xhbXBfVGlsZU1vZGUKKyAgICAgICAg
Ly8gcmVwZWF0cyB0aGUgbGFzdCBsaW5lIG9mIHRoZSBpbWFnZSBhZnRlciBkcmF3aW5nIG9uZSB0
aWxlLiBUbyBhdm9pZAorICAgICAgICAvLyBmaWxsaW5nIHRoZSBzcGFjZSB3aXRoIGFyYml0cmFy
eSBwaXhlbHMsIHRoaXMgd29ya2Fyb3VuZCBmb3JjZXMgdGhlCisgICAgICAgIC8vIGltYWdlIHRv
IGhhdmUgYSBsaW5lIG9mIHRyYW5zcGFyZW50IHBpeGVscyBvbiB0aGUgInJlcGVhdGVkIiBlZGdl
KHMpLAorICAgICAgICAvLyB0aHVzIGNhdXNpbmcgZXh0cmEgc3BhY2UgdG8gYmUgdHJhbnNwYXJl
bnQgZmlsbGVkLgorICAgICAgICBTa1NoYWRlcjo6VGlsZU1vZGUgdGlsZU1vZGVYID0gbV9yZXBl
YXRYID8gU2tTaGFkZXI6OmtSZXBlYXRfVGlsZU1vZGUgOiBTa1NoYWRlcjo6a0NsYW1wX1RpbGVN
b2RlOworICAgICAgICBTa1NoYWRlcjo6VGlsZU1vZGUgdGlsZU1vZGVZID0gbV9yZXBlYXRZID8g
U2tTaGFkZXI6OmtSZXBlYXRfVGlsZU1vZGUgOiBTa1NoYWRlcjo6a0NsYW1wX1RpbGVNb2RlOwor
ICAgICAgICBpbnQgZXhwYW5kVyA9IG1fcmVwZWF0WCA/IDAgOiAxOworICAgICAgICBpbnQgZXhw
YW5kSCA9IG1fcmVwZWF0WSA/IDAgOiAxOworCisgICAgICAgIC8vIENyZWF0ZSBhIHRyYW5zcGFy
ZW50IGJpdG1hcCAxIHBpeGVsIHdpZGVyIGFuZC9vciB0YWxsZXIgdGhhbiB0aGUKKyAgICAgICAg
Ly8gb3JpZ2luYWwsIHRoZW4gY29weSB0aGUgb3JpZ25hbCBpbnRvIGl0LgorICAgICAgICAvLyBG
SVhNRTogSXMgdGhlcmUgYSBiZXR0ZXIgd2F5IHRvIHBhZCAobm90IHNjYWxlKSBhbiBpbWFnZSBp
biBza2lhPworICAgICAgICBTa0JpdG1hcCBibTI7CisgICAgICAgIGJtMi5zZXRDb25maWcoYm0t
PmNvbmZpZygpLCBibS0+d2lkdGgoKSArIGV4cGFuZFcsIGJtLT5oZWlnaHQoKSArIGV4cGFuZEgp
OworICAgICAgICBibTIuYWxsb2NQaXhlbHMoKTsKKyAgICAgICAgYm0yLmVyYXNlQVJHQigweDAw
LCAweDAwLCAweDAwLCAweDAwKTsKKyAgICAgICAgU2tDYW52YXMgY2FudmFzKGJtMik7CisgICAg
ICAgIGNhbnZhcy5kcmF3Qml0bWFwKCpibSwgMCwgMCk7CisgICAgICAgIG1fcGF0dGVybiA9IFNr
U2hhZGVyOjpDcmVhdGVCaXRtYXBTaGFkZXIoYm0yLCB0aWxlTW9kZVgsIHRpbGVNb2RlWSk7Cisg
ICAgfQorICAgIG1fcGF0dGVybi0+c2V0TG9jYWxNYXRyaXgobV9wYXR0ZXJuU3BhY2VUcmFuc2Zv
cm1hdGlvbik7CisgICAgcmV0dXJuIG1fcGF0dGVybjsKK30KKwordm9pZCBQYXR0ZXJuOjpzZXRQ
bGF0Zm9ybVBhdHRlcm5TcGFjZVRyYW5zZm9ybSgpCit7CisgICAgaWYgKG1fcGF0dGVybikKKyAg
ICAgICAgbV9wYXR0ZXJuLT5zZXRMb2NhbE1hdHJpeChtX3BhdHRlcm5TcGFjZVRyYW5zZm9ybWF0
aW9uKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47644</attachid>
            <date>2010-01-28 13:17:16 -0800</date>
            <delta_ts>2010-01-28 14:58:26 -0800</delta_ts>
            <desc>ChangeLog and non-Skia fixes</desc>
            <filename>pattern_transform.patch</filename>
            <type>text/plain</type>
            <size>9933</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDAwOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDkgQEAKKzIwMTAtMDEtMjggIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRml4IGZvciBQYXR0ZXJuIHRyYW5zZm9ybWF0aW9ucyBpbiBDaHJvbWl1bS9Ta2lhLiAg
VGhpcyByZXF1aXJlZCAKKyAgICAgICAgcmV3b3JraW5nIFBhdHRlcm4gYSBiaXQgdG8gYmUgbW9y
ZSBsaWtlIHRoZSBHcmFkaWVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgSW4gcGFydGljdWxh
ciwgaXQgbm93IGhvbGRzIGFuIG1fcGF0dGVybiByZWZlcmVuY2UgdG8gdGhlCisgICAgICAgIHBs
YXRmb3JtLXNwZWNpZmljIGltcGxlbWVudGF0aW9uLCBhbmQgcGFzc2VzIGFsb25nIGNoYW5nZXMg
dG8gdGhlCisgICAgICAgIG1fcGF0dGVyblNwYWNlVHJhbnNmb3JtYXRpb24sIGluIHRoZSBzYW1l
IHdheSB0aGF0IEdyYWRpZW50IGRvZXMgZm9yCisgICAgICAgIG1fZ3JhZGllbnRTcGFjZVRyYW5z
Zm9ybWF0aW9uLiAgVGhpcyBpcyBuZWNlc3Nhcnkgc2luY2UgU2tpYSBjcmVhdGVzIHRoZQorICAg
ICAgICBwbGF0Zm9ybS1zcGVjaWZpYyBwYXR0ZXJuIChTa1NoYWRlcikgb25jZSwgcmF0aGVyIHRo
YW4gcmVjcmVhdGluZyBpdAorICAgICAgICBvbiBlYWNoIGRyYXcuCisgICAgICAgIEZvciBwbGF0
Zm9ybXMgb3RoZXIgdGhhbiBTa2lhLCBtX3BhdHRlcm4gcmVtYWlucyBOVUxMLCB0aGV5IHdpbGwK
KyAgICAgICAgY29udGludWUgdG8gdXNlIHRoZSBzdGF0aWMgY3JlYXRlUGxhdGZvcm1QYXR0ZXJu
KCksIGFuZCB0aGUgbmV3CisgICAgICAgIG5vdGlmaWNhdGlvbiBmdW5jdGlvbnMgYXJlIHN0dWJi
ZWQgb3V0LiAgT3RoZXIgcGxhdGZvcm1zIGNhbiBzd2l0Y2ggdG8KKyAgICAgICAgdGhlIG5ldyBp
bXBsZW1lbnRhdGlvbiBpZiB0aGV5IHNvIGNob29zZS4KKworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQ1MzQgCisKKyAgICAgICAgQ292ZXJlZCBieSBz
dmcvY3VzdG9tL3BhdHRlcm4teS1vZmZzZXQuc3ZnLAorICAgICAgICBzdmcvY3VzdG9tL3BhdHRl
cm4tY3ljbGUtZGV0ZWN0aW9uLnN2ZywgYW5kIG1hbnkgbW9yZS4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1BhdHRlcm4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0dGVybjo6UGF0
dGVybik6CisgICAgICAgIEluaXRpYWxpemVyIGZvciBtX3BhdHRlcm4uCisgICAgICAgIChXZWJD
b3JlOjpQYXR0ZXJuOjp+UGF0dGVybik6CisgICAgICAgIGNhbGwgcGxhdGZvcm1EZXN0cm95KCku
CisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpzZXRQYXR0ZXJuU3BhY2VUcmFuc2Zvcm0pOgor
ICAgICAgICBQYXNzIGFsb25nIHRoZSB0cmFuc2Zvcm0gdmlhIHNldFBsYXRmb3JtUGF0dGVyblNw
YWNlVHJhbnNmb3JtKCkuCisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpwbGF0Zm9ybURlc3Ry
b3kpOgorICAgICAgICAoV2ViQ29yZTo6UGF0dGVybjo6c2V0UGxhdGZvcm1QYXR0ZXJuU3BhY2VU
cmFuc2Zvcm0pOgorICAgICAgICBTdHViIGltcGxlbWVudGF0aW9ucyBmb3Igbm9uLXNraWEgcGxh
dGZvcm1zLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxQYXR0ZXJuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VQYXR0ZXJu
KToKKyAgICAgICAgQ2FsbCBwbGF0Zm9ybVBhdHRlcm4oKSBpbnN0ZWFkIG9mIHN0YXRpYyB2ZXJz
aW9uLgorICAgICAgICBTaW5jZSBQYXR0ZXJuIG5vdyBvd25zIGl0cyBTa1NoYWRlciwgbm8gbmVl
ZCB0byB1bnJlZiBoZXJlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0dGVy
blNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0dGVybjo6cGxhdGZvcm1EZXN0cm95KToK
KyAgICAgICAgVW5yZWYgdGhlIFNrU2hhZGVyIG9uIGRlc3Ryb3kuCisgICAgICAgIChXZWJDb3Jl
OjpQYXR0ZXJuOjpwbGF0Zm9ybVBhdHRlcm4pOgorICAgICAgICBDcmVhdGUgdGhlIHBsYXRmb3Jt
IHBhdHRlcm4gKFNrU2hhZGVyKSBvbmNlLCBhbmQgY2FjaGUgaXQuCisgICAgICAgIChXZWJDb3Jl
OjpQYXR0ZXJuOjpzZXRQbGF0Zm9ybVBhdHRlcm5TcGFjZVRyYW5zZm9ybSk6CisgICAgICAgIFNl
dCB0aGUgc2hhZGVyJ3MgbG9jYWwgbWF0cml4IGZyb20gdGhlIG1fcGF0dGVyblNwYWNlVHJhbnNm
b3JtYXRpb24uCisKIDIwMTAtMDEtMjggIEFhcm9uIEJvb2RtYW4gIDxhYUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BhdHRlcm4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGF0dGVybi5jcHAJKHJldmlzaW9uIDU0MDA4KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QYXR0ZXJuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDMwIEBA
IFBhdHRlcm46OlBhdHRlcm4oSW1hZ2UqIGltYWdlLCBib29sIHJlcGUKICAgICA6IG1fdGlsZUlt
YWdlKGltYWdlKQogICAgICwgbV9yZXBlYXRYKHJlcGVhdFgpCiAgICAgLCBtX3JlcGVhdFkocmVw
ZWF0WSkKKyAgICAsIG1fcGF0dGVybigwKQogewogICAgIEFTU0VSVChpbWFnZSk7CiB9CiAKIFBh
dHRlcm46On5QYXR0ZXJuKCkKIHsKKyAgICBwbGF0Zm9ybURlc3Ryb3koKTsKIH0KIAordm9pZCBQ
YXR0ZXJuOjpzZXRQYXR0ZXJuU3BhY2VUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHBhdHRlcm5TcGFjZVRyYW5zZm9ybWF0aW9uKQoreworICAgIG1fcGF0dGVyblNwYWNlVHJh
bnNmb3JtYXRpb24gPSBwYXR0ZXJuU3BhY2VUcmFuc2Zvcm1hdGlvbjsKKyAgICBzZXRQbGF0Zm9y
bVBhdHRlcm5TcGFjZVRyYW5zZm9ybSgpOworfQorCisjaWYgIVBMQVRGT1JNKFNLSUEpCit2b2lk
IFBhdHRlcm46OnBsYXRmb3JtRGVzdHJveSgpCit7Cit9CisKK3ZvaWQgUGF0dGVybjo6c2V0UGxh
dGZvcm1QYXR0ZXJuU3BhY2VUcmFuc2Zvcm0oKQoreworfQorI2VuZGlmCisKIH0KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oCShyZXZpc2lvbiA1NDAwOCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw5ICs3NCwx
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgSW1hZ2UqIHRpbGVJbWFnZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdGlsZUltYWdlLmdldCgpOyB9CiAKKyAgICAgICAgdm9pZCBwbGF0Zm9y
bURlc3Ryb3koKTsKKwogICAgICAgICAvLyBQYXR0ZXJuIHNwYWNlIGlzIGFuIGFic3RyYWN0IHNw
YWNlIHRoYXQgbWFwcyB0byB0aGUgZGVmYXVsdCB1c2VyIHNwYWNlIGJ5IHRoZSB0cmFuc2Zvcm1h
dGlvbiAndXNlclNwYWNlVHJhbnNmb3JtYXRpb24nIAorI2lmIFBMQVRGT1JNKFNLSUEpCisgICAg
ICAgIFBsYXRmb3JtUGF0dGVyblB0ciBwbGF0Zm9ybVBhdHRlcm4oY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9uKTsKKyNlbHNlCiAgICAgICAgIFBsYXRm
b3JtUGF0dGVyblB0ciBjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9uKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRQ
YXR0ZXJuU3BhY2VUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhdHRlcm5T
cGFjZVRyYW5zZm9ybWF0aW9uKSB7IG1fcGF0dGVyblNwYWNlVHJhbnNmb3JtYXRpb24gPSBwYXR0
ZXJuU3BhY2VUcmFuc2Zvcm1hdGlvbjsgfQorI2VuZGlmCisgICAgICAgIHZvaWQgc2V0UGF0dGVy
blNwYWNlVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJuU3BhY2VU
cmFuc2Zvcm1hdGlvbik7CisgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1QYXR0ZXJuU3BhY2VUcmFu
c2Zvcm0oKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFBhdHRlcm4oSW1hZ2UqLCBib29sIHJl
cGVhdFgsIGJvb2wgcmVwZWF0WSk7CkBAIC04NSw2ICs5Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgYm9vbCBtX3JlcGVhdFg7CiAgICAgICAgIGJvb2wgbV9yZXBlYXRZOwogICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3BhdHRlcm5TcGFjZVRyYW5zZm9ybWF0aW9uOwor
ICAgICAgICBQbGF0Zm9ybVBhdHRlcm5QdHIgbV9wYXR0ZXJuOwogICAgIH07CiAKIH0gLy9uYW1l
c3BhY2UKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRl
eHRTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
R3JhcGhpY3NDb250ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDU0MDA4KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05NzgsOSArOTc4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmls
bFBhdAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFNrU2hhZGVyKiBwYXQgPSBwYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkp
OwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRGaWxsU2hhZGVyKHBhdCk7Ci0gICAgcGF0LT5z
YWZlVW5yZWYoKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0RmlsbFNoYWRlcihwYXR0ZXJu
LT5wbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEludFNpemUmIHNpemUsCkBAIC0xMDY1LDkgKzEwNjMs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VQCiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU2tTaGFkZXIqIHBhdCA9
IHBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSk7Ci0gICAgcGxhdGZvcm1D
b250ZXh0KCktPnNldFN0cm9rZVNoYWRlcihwYXQpOwotICAgIHBhdC0+c2FmZVVucmVmKCk7Cisg
ICAgcGxhdGZvcm1Db250ZXh0KCktPnNldFN0cm9rZVNoYWRlcihwYXR0ZXJuLT5wbGF0Zm9ybVBh
dHRlcm4oZ2V0Q1RNKCkpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
VGV4dERyYXdpbmdNb2RlKGludCBtb2RlKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL1BhdHRlcm5Ta2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvUGF0dGVyblNraWEuY3BwCShyZXZpc2lvbiA1NDAwOCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXR0ZXJuU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDggKzQwLDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGxhdGZvcm1QYXR0ZXJu
UHRyIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgcGF0dGVyblRyYW5zZm9ybSkgY29uc3QKK3ZvaWQgUGF0dGVybjo6cGxhdGZvcm1EZXN0
cm95KCkKIHsKKyAgICBtX3BhdHRlcm4tPnNhZmVVbnJlZigpOworICAgIG1fcGF0dGVybiA9IDA7
Cit9CisKK1BsYXRmb3JtUGF0dGVyblB0ciBQYXR0ZXJuOjpwbGF0Zm9ybVBhdHRlcm4oY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm0pCit7CisgICAgaWYgKG1fcGF0
dGVybikKKyAgICAgICAgcmV0dXJuIG1fcGF0dGVybjsKKwogICAgIC8vIE5vdGU6IHBhdHRlcm5U
cmFuc2Zvcm0gaXMgaWdub3JlZCBzaW5jZSBpdCBzZWVtcyB0byBiZSBhcHBsaWVkIGVsc2V3aGVy
ZQogICAgIC8vICh3aGVuIHRoZSBwYXR0ZXJuIGlzIHVzZWQ/KS4gQXBwbHlpbmcgaXQgdG8gdGhl
IHBhdHRlcm4gKGkuZS4KICAgICAvLyBzaGFkZXItPnNldExvY2FsTWF0cml4KSByZXN1bHRzIGlu
IGEgZG91YmxlIHRyYW5zZm9ybWF0aW9uLiBUaGlzIGNhbiBiZQpAQCAtNTMsMzEgKzYyLDQyIEBA
IFBsYXRmb3JtUGF0dGVyblB0ciBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm8KICAgICBTa0JpdG1hcCog
Ym0gPSBtX3RpbGVJbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICAvLyBJ
ZiB3ZSBkb24ndCBoYXZlIGEgYml0bWFwLCByZXR1cm4gYSB0cmFuc3BhcmVudCBzaGFkZXIuCiAg
ICAgaWYgKCFibSkKLSAgICAgICAgcmV0dXJuIG5ldyBTa0NvbG9yU2hhZGVyKFNrQ29sb3JTZXRB
UkdCKDAsIDAsIDAsIDApKTsKKyAgICAgICAgbV9wYXR0ZXJuID0gbmV3IFNrQ29sb3JTaGFkZXIo
U2tDb2xvclNldEFSR0IoMCwgMCwgMCwgMCkpOwogCi0gICAgaWYgKG1fcmVwZWF0WCAmJiBtX3Jl
cGVhdFkpCi0gICAgICAgIHJldHVybiBTa1NoYWRlcjo6Q3JlYXRlQml0bWFwU2hhZGVyKCpibSwg
U2tTaGFkZXI6OmtSZXBlYXRfVGlsZU1vZGUsIFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2RlKTsK
KyAgICBlbHNlIGlmIChtX3JlcGVhdFggJiYgbV9yZXBlYXRZKQorICAgICAgICBtX3BhdHRlcm4g
PSBTa1NoYWRlcjo6Q3JlYXRlQml0bWFwU2hhZGVyKCpibSwgU2tTaGFkZXI6OmtSZXBlYXRfVGls
ZU1vZGUsIFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2RlKTsKIAotICAgIC8vIFNraWEgZG9lcyBu
b3QgaGF2ZSBhICJkcmF3IHRoZSB0aWxlIG9ubHkgb25jZSIgb3B0aW9uLiBDbGFtcF9UaWxlTW9k
ZQotICAgIC8vIHJlcGVhdHMgdGhlIGxhc3QgbGluZSBvZiB0aGUgaW1hZ2UgYWZ0ZXIgZHJhd2lu
ZyBvbmUgdGlsZS4gVG8gYXZvaWQKLSAgICAvLyBmaWxsaW5nIHRoZSBzcGFjZSB3aXRoIGFyYml0
cmFyeSBwaXhlbHMsIHRoaXMgd29ya2Fyb3VuZCBmb3JjZXMgdGhlCi0gICAgLy8gaW1hZ2UgdG8g
aGF2ZSBhIGxpbmUgb2YgdHJhbnNwYXJlbnQgcGl4ZWxzIG9uIHRoZSAicmVwZWF0ZWQiIGVkZ2Uo
cyksCi0gICAgLy8gdGh1cyBjYXVzaW5nIGV4dHJhIHNwYWNlIHRvIGJlIHRyYW5zcGFyZW50IGZp
bGxlZC4KLSAgICBTa1NoYWRlcjo6VGlsZU1vZGUgdGlsZU1vZGVYID0gbV9yZXBlYXRYID8gU2tT
aGFkZXI6OmtSZXBlYXRfVGlsZU1vZGUgOiBTa1NoYWRlcjo6a0NsYW1wX1RpbGVNb2RlOwotICAg
IFNrU2hhZGVyOjpUaWxlTW9kZSB0aWxlTW9kZVkgPSBtX3JlcGVhdFkgPyBTa1NoYWRlcjo6a1Jl
cGVhdF9UaWxlTW9kZSA6IFNrU2hhZGVyOjprQ2xhbXBfVGlsZU1vZGU7Ci0gICAgaW50IGV4cGFu
ZFcgPSBtX3JlcGVhdFggPyAwIDogMTsKLSAgICBpbnQgZXhwYW5kSCA9IG1fcmVwZWF0WSA/IDAg
OiAxOwotCi0gICAgLy8gQ3JlYXRlIGEgdHJhbnNwYXJlbnQgYml0bWFwIDEgcGl4ZWwgd2lkZXIg
YW5kL29yIHRhbGxlciB0aGFuIHRoZQotICAgIC8vIG9yaWdpbmFsLCB0aGVuIGNvcHkgdGhlIG9y
aWduYWwgaW50byBpdC4KLSAgICAvLyBGSVhNRTogSXMgdGhlcmUgYSBiZXR0ZXIgd2F5IHRvIHBh
ZCAobm90IHNjYWxlKSBhbiBpbWFnZSBpbiBza2lhPwotICAgIFNrQml0bWFwIGJtMjsKLSAgICBi
bTIuc2V0Q29uZmlnKGJtLT5jb25maWcoKSwgYm0tPndpZHRoKCkgKyBleHBhbmRXLCBibS0+aGVp
Z2h0KCkgKyBleHBhbmRIKTsKLSAgICBibTIuYWxsb2NQaXhlbHMoKTsKLSAgICBibTIuZXJhc2VB
UkdCKDB4MDAsIDB4MDAsIDB4MDAsIDB4MDApOwotICAgIFNrQ2FudmFzIGNhbnZhcyhibTIpOwot
ICAgIGNhbnZhcy5kcmF3Qml0bWFwKCpibSwgMCwgMCk7Ci0gICAgcmV0dXJuIFNrU2hhZGVyOjpD
cmVhdGVCaXRtYXBTaGFkZXIoYm0yLCB0aWxlTW9kZVgsIHRpbGVNb2RlWSk7CisgICAgZWxzZSB7
CisKKyAgICAgICAgLy8gU2tpYSBkb2VzIG5vdCBoYXZlIGEgImRyYXcgdGhlIHRpbGUgb25seSBv
bmNlIiBvcHRpb24uIENsYW1wX1RpbGVNb2RlCisgICAgICAgIC8vIHJlcGVhdHMgdGhlIGxhc3Qg
bGluZSBvZiB0aGUgaW1hZ2UgYWZ0ZXIgZHJhd2luZyBvbmUgdGlsZS4gVG8gYXZvaWQKKyAgICAg
ICAgLy8gZmlsbGluZyB0aGUgc3BhY2Ugd2l0aCBhcmJpdHJhcnkgcGl4ZWxzLCB0aGlzIHdvcmth
cm91bmQgZm9yY2VzIHRoZQorICAgICAgICAvLyBpbWFnZSB0byBoYXZlIGEgbGluZSBvZiB0cmFu
c3BhcmVudCBwaXhlbHMgb24gdGhlICJyZXBlYXRlZCIgZWRnZShzKSwKKyAgICAgICAgLy8gdGh1
cyBjYXVzaW5nIGV4dHJhIHNwYWNlIHRvIGJlIHRyYW5zcGFyZW50IGZpbGxlZC4KKyAgICAgICAg
U2tTaGFkZXI6OlRpbGVNb2RlIHRpbGVNb2RlWCA9IG1fcmVwZWF0WCA/IFNrU2hhZGVyOjprUmVw
ZWF0X1RpbGVNb2RlIDogU2tTaGFkZXI6OmtDbGFtcF9UaWxlTW9kZTsKKyAgICAgICAgU2tTaGFk
ZXI6OlRpbGVNb2RlIHRpbGVNb2RlWSA9IG1fcmVwZWF0WSA/IFNrU2hhZGVyOjprUmVwZWF0X1Rp
bGVNb2RlIDogU2tTaGFkZXI6OmtDbGFtcF9UaWxlTW9kZTsKKyAgICAgICAgaW50IGV4cGFuZFcg
PSBtX3JlcGVhdFggPyAwIDogMTsKKyAgICAgICAgaW50IGV4cGFuZEggPSBtX3JlcGVhdFkgPyAw
IDogMTsKKworICAgICAgICAvLyBDcmVhdGUgYSB0cmFuc3BhcmVudCBiaXRtYXAgMSBwaXhlbCB3
aWRlciBhbmQvb3IgdGFsbGVyIHRoYW4gdGhlCisgICAgICAgIC8vIG9yaWdpbmFsLCB0aGVuIGNv
cHkgdGhlIG9yaWduYWwgaW50byBpdC4KKyAgICAgICAgLy8gRklYTUU6IElzIHRoZXJlIGEgYmV0
dGVyIHdheSB0byBwYWQgKG5vdCBzY2FsZSkgYW4gaW1hZ2UgaW4gc2tpYT8KKyAgICAgICAgU2tC
aXRtYXAgYm0yOworICAgICAgICBibTIuc2V0Q29uZmlnKGJtLT5jb25maWcoKSwgYm0tPndpZHRo
KCkgKyBleHBhbmRXLCBibS0+aGVpZ2h0KCkgKyBleHBhbmRIKTsKKyAgICAgICAgYm0yLmFsbG9j
UGl4ZWxzKCk7CisgICAgICAgIGJtMi5lcmFzZUFSR0IoMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCk7
CisgICAgICAgIFNrQ2FudmFzIGNhbnZhcyhibTIpOworICAgICAgICBjYW52YXMuZHJhd0JpdG1h
cCgqYm0sIDAsIDApOworICAgICAgICBtX3BhdHRlcm4gPSBTa1NoYWRlcjo6Q3JlYXRlQml0bWFw
U2hhZGVyKGJtMiwgdGlsZU1vZGVYLCB0aWxlTW9kZVkpOworICAgIH0KKyAgICBtX3BhdHRlcm4t
PnNldExvY2FsTWF0cml4KG1fcGF0dGVyblNwYWNlVHJhbnNmb3JtYXRpb24pOworICAgIHJldHVy
biBtX3BhdHRlcm47Cit9CisKK3ZvaWQgUGF0dGVybjo6c2V0UGxhdGZvcm1QYXR0ZXJuU3BhY2VU
cmFuc2Zvcm0oKQoreworICAgIGlmIChtX3BhdHRlcm4pCisgICAgICAgIG1fcGF0dGVybi0+c2V0
TG9jYWxNYXRyaXgobV9wYXR0ZXJuU3BhY2VUcmFuc2Zvcm1hdGlvbik7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47652</attachid>
            <date>2010-01-28 14:58:26 -0800</date>
            <delta_ts>2010-02-01 21:36:47 -0800</delta_ts>
            <desc>Same as above, plus QT fix</desc>
            <filename>pattern_transform.patch</filename>
            <type>text/plain</type>
            <size>9958</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDAwOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDkgQEAKKzIwMTAtMDEtMjggIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRml4IGZvciBQYXR0ZXJuIHRyYW5zZm9ybWF0aW9ucyBpbiBDaHJvbWl1bS9Ta2lhLiAg
VGhpcyByZXF1aXJlZCAKKyAgICAgICAgcmV3b3JraW5nIFBhdHRlcm4gYSBiaXQgdG8gYmUgbW9y
ZSBsaWtlIHRoZSBHcmFkaWVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgSW4gcGFydGljdWxh
ciwgaXQgbm93IGhvbGRzIGFuIG1fcGF0dGVybiByZWZlcmVuY2UgdG8gdGhlCisgICAgICAgIHBs
YXRmb3JtLXNwZWNpZmljIGltcGxlbWVudGF0aW9uLCBhbmQgcGFzc2VzIGFsb25nIGNoYW5nZXMg
dG8gdGhlCisgICAgICAgIG1fcGF0dGVyblNwYWNlVHJhbnNmb3JtYXRpb24sIGluIHRoZSBzYW1l
IHdheSB0aGF0IEdyYWRpZW50IGRvZXMgZm9yCisgICAgICAgIG1fZ3JhZGllbnRTcGFjZVRyYW5z
Zm9ybWF0aW9uLiAgVGhpcyBpcyBuZWNlc3Nhcnkgc2luY2UgU2tpYSBjcmVhdGVzIHRoZQorICAg
ICAgICBwbGF0Zm9ybS1zcGVjaWZpYyBwYXR0ZXJuIChTa1NoYWRlcikgb25jZSwgcmF0aGVyIHRo
YW4gcmVjcmVhdGluZyBpdAorICAgICAgICBvbiBlYWNoIGRyYXcuCisgICAgICAgIEZvciBwbGF0
Zm9ybXMgb3RoZXIgdGhhbiBTa2lhLCBtX3BhdHRlcm4gaXMgdW51c2VkLCB0aGV5IHdpbGwKKyAg
ICAgICAgY29udGludWUgdG8gdXNlIHRoZSBzdGF0aWMgY3JlYXRlUGxhdGZvcm1QYXR0ZXJuKCks
IGFuZCB0aGUgbmV3CisgICAgICAgIG5vdGlmaWNhdGlvbiBmdW5jdGlvbnMgYXJlIHN0dWJiZWQg
b3V0LiAgT3RoZXIgcGxhdGZvcm1zIGNhbiBzd2l0Y2ggdG8KKyAgICAgICAgdGhlIG5ldyBpbXBs
ZW1lbnRhdGlvbiBpZiB0aGV5IHNvIGNob29zZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQ1MzQgCisKKyAgICAgICAgQ292ZXJlZCBieSBzdmcv
Y3VzdG9tL3BhdHRlcm4teS1vZmZzZXQuc3ZnLAorICAgICAgICBzdmcvY3VzdG9tL3BhdHRlcm4t
Y3ljbGUtZGV0ZWN0aW9uLnN2ZywgYW5kIG1hbnkgbW9yZS4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1BhdHRlcm4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0dGVybjo6UGF0dGVy
bik6CisgICAgICAgIEluaXRpYWxpemVyIGZvciBtX3BhdHRlcm4uCisgICAgICAgIChXZWJDb3Jl
OjpQYXR0ZXJuOjp+UGF0dGVybik6CisgICAgICAgIGNhbGwgcGxhdGZvcm1EZXN0cm95KCkuCisg
ICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpzZXRQYXR0ZXJuU3BhY2VUcmFuc2Zvcm0pOgorICAg
ICAgICBQYXNzIGFsb25nIHRoZSB0cmFuc2Zvcm0gdmlhIHNldFBsYXRmb3JtUGF0dGVyblNwYWNl
VHJhbnNmb3JtKCkuCisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpwbGF0Zm9ybURlc3Ryb3kp
OgorICAgICAgICAoV2ViQ29yZTo6UGF0dGVybjo6c2V0UGxhdGZvcm1QYXR0ZXJuU3BhY2VUcmFu
c2Zvcm0pOgorICAgICAgICBTdHViIGltcGxlbWVudGF0aW9ucyBmb3Igbm9uLXNraWEgcGxhdGZv
cm1zLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxQYXR0ZXJuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VQYXR0ZXJuKToK
KyAgICAgICAgQ2FsbCBwbGF0Zm9ybVBhdHRlcm4oKSBpbnN0ZWFkIG9mIHN0YXRpYyB2ZXJzaW9u
LgorICAgICAgICBTaW5jZSBQYXR0ZXJuIG5vdyBvd25zIGl0cyBTa1NoYWRlciwgbm8gbmVlZCB0
byB1bnJlZiBoZXJlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0dGVyblNr
aWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0dGVybjo6cGxhdGZvcm1EZXN0cm95KToKKyAg
ICAgICAgVW5yZWYgdGhlIFNrU2hhZGVyIG9uIGRlc3Ryb3kuCisgICAgICAgIChXZWJDb3JlOjpQ
YXR0ZXJuOjpwbGF0Zm9ybVBhdHRlcm4pOgorICAgICAgICBDcmVhdGUgdGhlIHBsYXRmb3JtIHBh
dHRlcm4gKFNrU2hhZGVyKSBvbmNlLCBhbmQgY2FjaGUgaXQuCisgICAgICAgIChXZWJDb3JlOjpQ
YXR0ZXJuOjpzZXRQbGF0Zm9ybVBhdHRlcm5TcGFjZVRyYW5zZm9ybSk6CisgICAgICAgIFNldCB0
aGUgc2hhZGVyJ3MgbG9jYWwgbWF0cml4IGZyb20gdGhlIG1fcGF0dGVyblNwYWNlVHJhbnNmb3Jt
YXRpb24uCisKIDIwMTAtMDEtMjggIEFhcm9uIEJvb2RtYW4gIDxhYUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BhdHRlcm4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGF0dGVybi5jcHAJKHJldmlzaW9uIDU0MDA4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QYXR0ZXJuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDMyIEBAIFBh
dHRlcm46OlBhdHRlcm4oSW1hZ2UqIGltYWdlLCBib29sIHJlcGUKICAgICA6IG1fdGlsZUltYWdl
KGltYWdlKQogICAgICwgbV9yZXBlYXRYKHJlcGVhdFgpCiAgICAgLCBtX3JlcGVhdFkocmVwZWF0
WSkKKyNpZiBQTEFURk9STShTS0lBKQorICAgICwgbV9wYXR0ZXJuKDApCisjZW5kaWYKIHsKICAg
ICBBU1NFUlQoaW1hZ2UpOwogfQogCiBQYXR0ZXJuOjp+UGF0dGVybigpCiB7CisgICAgcGxhdGZv
cm1EZXN0cm95KCk7CiB9CiAKK3ZvaWQgUGF0dGVybjo6c2V0UGF0dGVyblNwYWNlVHJhbnNmb3Jt
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJuU3BhY2VUcmFuc2Zvcm1hdGlvbikK
K3sKKyAgICBtX3BhdHRlcm5TcGFjZVRyYW5zZm9ybWF0aW9uID0gcGF0dGVyblNwYWNlVHJhbnNm
b3JtYXRpb247CisgICAgc2V0UGxhdGZvcm1QYXR0ZXJuU3BhY2VUcmFuc2Zvcm0oKTsKK30KKwor
I2lmICFQTEFURk9STShTS0lBKQordm9pZCBQYXR0ZXJuOjpwbGF0Zm9ybURlc3Ryb3koKQorewor
fQorCit2b2lkIFBhdHRlcm46OnNldFBsYXRmb3JtUGF0dGVyblNwYWNlVHJhbnNmb3JtKCkKK3sK
K30KKyNlbmRpZgorCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAkocmV2
aXNpb24gNTQwMDgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAkod29y
a2luZyBjb3B5KQpAQCAtNzQsOSArNzQsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
ICAgIEltYWdlKiB0aWxlSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX3RpbGVJbWFnZS5nZXQoKTsg
fQogCisgICAgICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CisKICAgICAgICAgLy8gUGF0dGVy
biBzcGFjZSBpcyBhbiBhYnN0cmFjdCBzcGFjZSB0aGF0IG1hcHMgdG8gdGhlIGRlZmF1bHQgdXNl
ciBzcGFjZSBieSB0aGUgdHJhbnNmb3JtYXRpb24gJ3VzZXJTcGFjZVRyYW5zZm9ybWF0aW9uJyAK
KyNpZiBQTEFURk9STShTS0lBKQorICAgICAgICBQbGF0Zm9ybVBhdHRlcm5QdHIgcGxhdGZvcm1Q
YXR0ZXJuKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB1c2VyU3BhY2VUcmFuc2Zvcm1hdGlv
bik7CisjZWxzZQogICAgICAgICBQbGF0Zm9ybVBhdHRlcm5QdHIgY3JlYXRlUGxhdGZvcm1QYXR0
ZXJuKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB1c2VyU3BhY2VUcmFuc2Zvcm1hdGlvbikg
Y29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0UGF0dGVyblNwYWNlVHJhbnNmb3JtKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJuU3BhY2VUcmFuc2Zvcm1hdGlvbikgeyBtX3BhdHRlcm5T
cGFjZVRyYW5zZm9ybWF0aW9uID0gcGF0dGVyblNwYWNlVHJhbnNmb3JtYXRpb247IH0KKyNlbmRp
ZgorICAgICAgICB2b2lkIHNldFBhdHRlcm5TcGFjZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgcGF0dGVyblNwYWNlVHJhbnNmb3JtYXRpb24pOworICAgICAgICB2b2lkIHNl
dFBsYXRmb3JtUGF0dGVyblNwYWNlVHJhbnNmb3JtKCk7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBQYXR0ZXJuKEltYWdlKiwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVhdFkpOwpAQCAtODUsNiAr
OTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9yZXBlYXRYOwogICAg
ICAgICBib29sIG1fcmVwZWF0WTsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9wYXR0
ZXJuU3BhY2VUcmFuc2Zvcm1hdGlvbjsKKyAgICAgICAgUGxhdGZvcm1QYXR0ZXJuUHRyIG1fcGF0
dGVybjsKICAgICB9OwogCiB9IC8vbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCShyZXZpc2lv
biA1NDAwOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRl
eHRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTc4LDkgKzk3OCw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxQYXQKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBTa1NoYWRlciogcGF0ID0gcGF0dGVybi0+Y3JlYXRl
UGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0Rmls
bFNoYWRlcihwYXQpOwotICAgIHBhdC0+c2FmZVVucmVmKCk7CisgICAgcGxhdGZvcm1Db250ZXh0
KCktPnNldEZpbGxTaGFkZXIocGF0dGVybi0+cGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBJbnRTaXpl
JiBzaXplLApAQCAtMTA2NSw5ICsxMDYzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtU3Ryb2tlUAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFNrU2hhZGVyKiBwYXQgPSBwYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4o
Z2V0Q1RNKCkpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRTdHJva2VTaGFkZXIocGF0KTsK
LSAgICBwYXQtPnNhZmVVbnJlZigpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRTdHJva2VT
aGFkZXIocGF0dGVybi0+cGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShpbnQgbW9kZSkKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXR0ZXJuU2tpYS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BhdHRlcm5Ta2lhLmNwcAkocmV2
aXNpb24gNTQwMDgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0dGVyblNr
aWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCwxNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVBsYXRmb3JtUGF0dGVyblB0ciBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRl
cm4oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm0pIGNvbnN0Cit2
b2lkIFBhdHRlcm46OnBsYXRmb3JtRGVzdHJveSgpCiB7CisgICAgbV9wYXR0ZXJuLT5zYWZlVW5y
ZWYoKTsKKyAgICBtX3BhdHRlcm4gPSAwOworfQorCitQbGF0Zm9ybVBhdHRlcm5QdHIgUGF0dGVy
bjo6cGxhdGZvcm1QYXR0ZXJuKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJuVHJh
bnNmb3JtKQoreworICAgIGlmIChtX3BhdHRlcm4pCisgICAgICAgIHJldHVybiBtX3BhdHRlcm47
CisKICAgICAvLyBOb3RlOiBwYXR0ZXJuVHJhbnNmb3JtIGlzIGlnbm9yZWQgc2luY2UgaXQgc2Vl
bXMgdG8gYmUgYXBwbGllZCBlbHNld2hlcmUKICAgICAvLyAod2hlbiB0aGUgcGF0dGVybiBpcyB1
c2VkPykuIEFwcGx5aW5nIGl0IHRvIHRoZSBwYXR0ZXJuIChpLmUuCiAgICAgLy8gc2hhZGVyLT5z
ZXRMb2NhbE1hdHJpeCkgcmVzdWx0cyBpbiBhIGRvdWJsZSB0cmFuc2Zvcm1hdGlvbi4gVGhpcyBj
YW4gYmUKQEAgLTUzLDMxICs2Miw0MiBAQCBQbGF0Zm9ybVBhdHRlcm5QdHIgUGF0dGVybjo6Y3Jl
YXRlUGxhdGZvCiAgICAgU2tCaXRtYXAqIGJtID0gbV90aWxlSW1hZ2UtPm5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCk7CiAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGJpdG1hcCwgcmV0dXJu
IGEgdHJhbnNwYXJlbnQgc2hhZGVyLgogICAgIGlmICghYm0pCi0gICAgICAgIHJldHVybiBuZXcg
U2tDb2xvclNoYWRlcihTa0NvbG9yU2V0QVJHQigwLCAwLCAwLCAwKSk7CisgICAgICAgIG1fcGF0
dGVybiA9IG5ldyBTa0NvbG9yU2hhZGVyKFNrQ29sb3JTZXRBUkdCKDAsIDAsIDAsIDApKTsKIAot
ICAgIGlmIChtX3JlcGVhdFggJiYgbV9yZXBlYXRZKQotICAgICAgICByZXR1cm4gU2tTaGFkZXI6
OkNyZWF0ZUJpdG1hcFNoYWRlcigqYm0sIFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2RlLCBTa1No
YWRlcjo6a1JlcGVhdF9UaWxlTW9kZSk7CisgICAgZWxzZSBpZiAobV9yZXBlYXRYICYmIG1fcmVw
ZWF0WSkKKyAgICAgICAgbV9wYXR0ZXJuID0gU2tTaGFkZXI6OkNyZWF0ZUJpdG1hcFNoYWRlcigq
Ym0sIFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2RlLCBTa1NoYWRlcjo6a1JlcGVhdF9UaWxlTW9k
ZSk7CiAKLSAgICAvLyBTa2lhIGRvZXMgbm90IGhhdmUgYSAiZHJhdyB0aGUgdGlsZSBvbmx5IG9u
Y2UiIG9wdGlvbi4gQ2xhbXBfVGlsZU1vZGUKLSAgICAvLyByZXBlYXRzIHRoZSBsYXN0IGxpbmUg
b2YgdGhlIGltYWdlIGFmdGVyIGRyYXdpbmcgb25lIHRpbGUuIFRvIGF2b2lkCi0gICAgLy8gZmls
bGluZyB0aGUgc3BhY2Ugd2l0aCBhcmJpdHJhcnkgcGl4ZWxzLCB0aGlzIHdvcmthcm91bmQgZm9y
Y2VzIHRoZQotICAgIC8vIGltYWdlIHRvIGhhdmUgYSBsaW5lIG9mIHRyYW5zcGFyZW50IHBpeGVs
cyBvbiB0aGUgInJlcGVhdGVkIiBlZGdlKHMpLAotICAgIC8vIHRodXMgY2F1c2luZyBleHRyYSBz
cGFjZSB0byBiZSB0cmFuc3BhcmVudCBmaWxsZWQuCi0gICAgU2tTaGFkZXI6OlRpbGVNb2RlIHRp
bGVNb2RlWCA9IG1fcmVwZWF0WCA/IFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2RlIDogU2tTaGFk
ZXI6OmtDbGFtcF9UaWxlTW9kZTsKLSAgICBTa1NoYWRlcjo6VGlsZU1vZGUgdGlsZU1vZGVZID0g
bV9yZXBlYXRZID8gU2tTaGFkZXI6OmtSZXBlYXRfVGlsZU1vZGUgOiBTa1NoYWRlcjo6a0NsYW1w
X1RpbGVNb2RlOwotICAgIGludCBleHBhbmRXID0gbV9yZXBlYXRYID8gMCA6IDE7Ci0gICAgaW50
IGV4cGFuZEggPSBtX3JlcGVhdFkgPyAwIDogMTsKLQotICAgIC8vIENyZWF0ZSBhIHRyYW5zcGFy
ZW50IGJpdG1hcCAxIHBpeGVsIHdpZGVyIGFuZC9vciB0YWxsZXIgdGhhbiB0aGUKLSAgICAvLyBv
cmlnaW5hbCwgdGhlbiBjb3B5IHRoZSBvcmlnbmFsIGludG8gaXQuCi0gICAgLy8gRklYTUU6IElz
IHRoZXJlIGEgYmV0dGVyIHdheSB0byBwYWQgKG5vdCBzY2FsZSkgYW4gaW1hZ2UgaW4gc2tpYT8K
LSAgICBTa0JpdG1hcCBibTI7Ci0gICAgYm0yLnNldENvbmZpZyhibS0+Y29uZmlnKCksIGJtLT53
aWR0aCgpICsgZXhwYW5kVywgYm0tPmhlaWdodCgpICsgZXhwYW5kSCk7Ci0gICAgYm0yLmFsbG9j
UGl4ZWxzKCk7Ci0gICAgYm0yLmVyYXNlQVJHQigweDAwLCAweDAwLCAweDAwLCAweDAwKTsKLSAg
ICBTa0NhbnZhcyBjYW52YXMoYm0yKTsKLSAgICBjYW52YXMuZHJhd0JpdG1hcCgqYm0sIDAsIDAp
OwotICAgIHJldHVybiBTa1NoYWRlcjo6Q3JlYXRlQml0bWFwU2hhZGVyKGJtMiwgdGlsZU1vZGVY
LCB0aWxlTW9kZVkpOworICAgIGVsc2UgeworCisgICAgICAgIC8vIFNraWEgZG9lcyBub3QgaGF2
ZSBhICJkcmF3IHRoZSB0aWxlIG9ubHkgb25jZSIgb3B0aW9uLiBDbGFtcF9UaWxlTW9kZQorICAg
ICAgICAvLyByZXBlYXRzIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGltYWdlIGFmdGVyIGRyYXdpbmcg
b25lIHRpbGUuIFRvIGF2b2lkCisgICAgICAgIC8vIGZpbGxpbmcgdGhlIHNwYWNlIHdpdGggYXJi
aXRyYXJ5IHBpeGVscywgdGhpcyB3b3JrYXJvdW5kIGZvcmNlcyB0aGUKKyAgICAgICAgLy8gaW1h
Z2UgdG8gaGF2ZSBhIGxpbmUgb2YgdHJhbnNwYXJlbnQgcGl4ZWxzIG9uIHRoZSAicmVwZWF0ZWQi
IGVkZ2UocyksCisgICAgICAgIC8vIHRodXMgY2F1c2luZyBleHRyYSBzcGFjZSB0byBiZSB0cmFu
c3BhcmVudCBmaWxsZWQuCisgICAgICAgIFNrU2hhZGVyOjpUaWxlTW9kZSB0aWxlTW9kZVggPSBt
X3JlcGVhdFggPyBTa1NoYWRlcjo6a1JlcGVhdF9UaWxlTW9kZSA6IFNrU2hhZGVyOjprQ2xhbXBf
VGlsZU1vZGU7CisgICAgICAgIFNrU2hhZGVyOjpUaWxlTW9kZSB0aWxlTW9kZVkgPSBtX3JlcGVh
dFkgPyBTa1NoYWRlcjo6a1JlcGVhdF9UaWxlTW9kZSA6IFNrU2hhZGVyOjprQ2xhbXBfVGlsZU1v
ZGU7CisgICAgICAgIGludCBleHBhbmRXID0gbV9yZXBlYXRYID8gMCA6IDE7CisgICAgICAgIGlu
dCBleHBhbmRIID0gbV9yZXBlYXRZID8gMCA6IDE7CisKKyAgICAgICAgLy8gQ3JlYXRlIGEgdHJh
bnNwYXJlbnQgYml0bWFwIDEgcGl4ZWwgd2lkZXIgYW5kL29yIHRhbGxlciB0aGFuIHRoZQorICAg
ICAgICAvLyBvcmlnaW5hbCwgdGhlbiBjb3B5IHRoZSBvcmlnbmFsIGludG8gaXQuCisgICAgICAg
IC8vIEZJWE1FOiBJcyB0aGVyZSBhIGJldHRlciB3YXkgdG8gcGFkIChub3Qgc2NhbGUpIGFuIGlt
YWdlIGluIHNraWE/CisgICAgICAgIFNrQml0bWFwIGJtMjsKKyAgICAgICAgYm0yLnNldENvbmZp
ZyhibS0+Y29uZmlnKCksIGJtLT53aWR0aCgpICsgZXhwYW5kVywgYm0tPmhlaWdodCgpICsgZXhw
YW5kSCk7CisgICAgICAgIGJtMi5hbGxvY1BpeGVscygpOworICAgICAgICBibTIuZXJhc2VBUkdC
KDB4MDAsIDB4MDAsIDB4MDAsIDB4MDApOworICAgICAgICBTa0NhbnZhcyBjYW52YXMoYm0yKTsK
KyAgICAgICAgY2FudmFzLmRyYXdCaXRtYXAoKmJtLCAwLCAwKTsKKyAgICAgICAgbV9wYXR0ZXJu
ID0gU2tTaGFkZXI6OkNyZWF0ZUJpdG1hcFNoYWRlcihibTIsIHRpbGVNb2RlWCwgdGlsZU1vZGVZ
KTsKKyAgICB9CisgICAgbV9wYXR0ZXJuLT5zZXRMb2NhbE1hdHJpeChtX3BhdHRlcm5TcGFjZVRy
YW5zZm9ybWF0aW9uKTsKKyAgICByZXR1cm4gbV9wYXR0ZXJuOworfQorCit2b2lkIFBhdHRlcm46
OnNldFBsYXRmb3JtUGF0dGVyblNwYWNlVHJhbnNmb3JtKCkKK3sKKyAgICBpZiAobV9wYXR0ZXJu
KQorICAgICAgICBtX3BhdHRlcm4tPnNldExvY2FsTWF0cml4KG1fcGF0dGVyblNwYWNlVHJhbnNm
b3JtYXRpb24pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>