<?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>32530</bug_id>
          
          <creation_ts>2009-12-14 14:04:11 -0800</creation_ts>
          <short_desc>QtWebkit creates an unnecessary deep copy of images when canvas drawing is done</short_desc>
          <delta_ts>2012-02-02 11:00:39 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Performance, Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>ariya.hidayat</cc>
    
    <cc>benjamin</cc>
    
    <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>oliver</cc>
    
    <cc>samuel.rodal</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>171569</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2009-12-14 14:04:11 -0800</bug_when>
    <thetext>Found while profiling http://deanm.github.com/pre3d/monster.html with valgrind:
about 50% of the time is spent in image copying, that is called from trying to use the QPixmap copy constructor while a paint operation is active (see qpixmap.cpp, line 275: make a deep copy).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187611</commentid>
    <comment_count>1</comment_count>
      <attachid>48093</attachid>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2010-02-03 20:11:33 -0800</bug_when>
    <thetext>Created attachment 48093
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187615</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-03 20:17:48 -0800</bug_when>
    <thetext>Attachment 48093 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/graphics/qt/BufferedImageQt.h:36:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187622</commentid>
    <comment_count>3</comment_count>
      <attachid>48096</attachid>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2010-02-03 21:09:13 -0800</bug_when>
    <thetext>Created attachment 48096
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187703</commentid>
    <comment_count>4</comment_count>
      <attachid>48096</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-02-04 02:44:19 -0800</bug_when>
    <thetext>Comment on attachment 48096
patch


&gt; +// BufferedImage just &quot;holds&quot; a reference to the pixmap in the ImageBufferData,
&gt; +// hence we avoid explicit copy (detach) of the QPixmap instance.
&gt; +BufferedImage::BufferedImage(const QPixmap&amp; pixmap)
&gt; +    : m_pixmap(pixmap.pixmapData())

Nice trick to use the private/internal QPixmap constructor ;-)

I wonder however it it&apos;s worth it to create an entirely new class for this line of code. Wouldn&apos;t it be easier to just make it a _mode_ parameter of the StillImage constructor whether to share or copy the pixmap?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187704</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-02-04 02:46:15 -0800</bug_when>
    <thetext>Alternate idea... I remain a bit worried about using an internal constructor. Technically it&apos;s private API, and using private Qt API can quickly become a nightmare for supporting multiple Qt versions.

Would it perhaps make sense to store a QPixmap _pointer_ in the image class instead?

(Instead of an implicit reference, make it explicit)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187841</commentid>
    <comment_count>6</comment_count>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2010-02-04 09:51:07 -0800</bug_when>
    <thetext>The only reason to have a separate class for this is safety. StillImage is safer to pass around cause QPixmap may copy/detach there, however BufferedImage can only be used within the context of canvas drawing.

Also, I tried to use QPixmap pointer (*) or reference (&amp;) before but it did not help. The reason: QPixmap will still detach (e.g. during the call to QPainter::drawPixmap) is a painter is still active on it or if the painter is activated again (after calling QPainter::end).

This is also the reason why I propose the refactoring of Graphics Context as I outlined in my email to webkit-qt list. Once Graphics Context and Image Buffer &quot;know each other better&quot;, we can get rid of this QPixmap dancing because BufferedImage will just push Graphics Context&apos;s internal (pixmap) buffer to the screen.

Right now for every single frame, we do the following:
  create pixmap 1, detach/copy to pixmap 2, draw pixmap 2, free pixmap2, free pixmap1

With this patch (the stop-gap measure):
  create pixmap 1, draw pixmap 1, free pixmap 1

And hopefully with my proposal of Graphics Context refactoring:
  draw pixmap from GC buffer

i.e. we keep one pixmap for the entire life of the canvas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188022</commentid>
    <comment_count>7</comment_count>
      <attachid>48096</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-02-04 17:13:46 -0800</bug_when>
    <thetext>Comment on attachment 48096
patch

I&apos;m unsure this is safe -- What happens with this change if you are drawing a canvas onto itself?

I believe ImageBuffer::image() is expected to produce something with effect of a deep copy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188053</commentid>
    <comment_count>8</comment_count>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2010-02-04 19:46:46 -0800</bug_when>
    <thetext>Good point, Oliver, I hadn&apos;t thought about that :(

This means this patch can&apos;t be applied. We have to wait for my Qt&apos;s Graphics Context refactoring plan.

Also, I agree that image() should be safe with deep-copy. I believe CG will detach if the image is changed. Unlike CG, QPixmap is however &quot;too early&quot; to carry out a deep copy in our situation.

We can solve this once the integration of Graphics Context and Image Buffer is done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196495</commentid>
    <comment_count>9</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2010-03-05 09:39:36 -0800</bug_when>
    <thetext>
Please follow the QtWebKit bug reporting guidelines when reporting bugs.

See http://trac.webkit.org/wiki/QtWebKitBugs

Specifically:

  - The &apos;QtWebKit&apos; component should be used for bugs/features in the public QtWebKit API layer, not to signify that the bug is specific to the Qt port of WebKit

    http://trac.webkit.org/wiki/QtWebKitBugs#Component</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196618</commentid>
    <comment_count>10</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-03-05 13:34:20 -0800</bug_when>
    <thetext>Right, sorry about that. Posted that bug aq long time ago...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241845</commentid>
    <comment_count>11</comment_count>
      <attachid>59513</attachid>
    <who name="Samuel Rødal">samuel.rodal</who>
    <bug_when>2010-06-23 07:32:17 -0700</bug_when>
    <thetext>Created attachment 59513
New proposed patch

Simply making m_pixmap a reference solved the problem of deep copying as far as I can see. In addition a check can be made to make sure we don&apos;t draw the canvas onto itself without deep copying. I don&apos;t see the need to create a new BufferedImage class when StillImage is only used for this single purpose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241848</commentid>
    <comment_count>12</comment_count>
      <attachid>59514</attachid>
    <who name="Samuel Rødal">samuel.rodal</who>
    <bug_when>2010-06-23 07:39:41 -0700</bug_when>
    <thetext>Created attachment 59514
Resubmitted patch without HTML tags</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241850</commentid>
    <comment_count>13</comment_count>
      <attachid>59514</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-06-23 07:46:51 -0700</bug_when>
    <thetext>Comment on attachment 59514
Resubmitted patch without HTML tags

WebCore/platform/graphics/qt/StillImageQt.h:54
 +          const QPixmap &amp;m_pixmap;
I&apos;m worried that this might introduce crashes.

Can&apos;t we store the QPixmap and use isDetached() and data_ptr() to compare the d-pointers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241860</commentid>
    <comment_count>14</comment_count>
    <who name="Samuel Rødal">samuel.rodal</who>
    <bug_when>2010-06-23 08:34:06 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 59514 [details])
&gt; WebCore/platform/graphics/qt/StillImageQt.h:54
&gt;  +          const QPixmap &amp;m_pixmap;
&gt; I&apos;m worried that this might introduce crashes.
&gt; 
&gt; Can&apos;t we store the QPixmap and use isDetached() and data_ptr() to compare the d-pointers?

The problem is the QPixmap copy constructor which does the following:

    if (pixmap.paintingActive()) {                // make a deep copy
        operator=(pixmap.copy());
    } else {
        data = pixmap.data;
    }

And for the ImageBuffer pixmap used by Canvas a painter is _always_ active. So we can&apos;t even create a shallow copy of the QPixmap, as that will cause a deep copy, instead we need to keep a reference and do the copying ourselves when it&apos;s needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246118</commentid>
    <comment_count>15</comment_count>
      <attachid>59514</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-07-02 14:57:44 -0700</bug_when>
    <thetext>Comment on attachment 59514
Resubmitted patch without HTML tags

Clever. I might&apos;ve added a comment, but meh. LGTM :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246119</commentid>
    <comment_count>16</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-07-02 15:05:05 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 59514 [details])
&gt; Clever. I might&apos;ve added a comment, but meh. LGTM :)

Yes, a comment in the code to this &quot;unusual construct&quot; might be good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246355</commentid>
    <comment_count>17</comment_count>
      <attachid>59514</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-07-03 15:27:36 -0700</bug_when>
    <thetext>Comment on attachment 59514
Resubmitted patch without HTML tags

Ok, with the way the StillImage is allocated and kept alive along with m_data.m_pixmap I agree that this can work.

However I think this patch breaks the other use of StillImage in ImageQt.cpp, where StillImage::create() is called with a temporary QPixmap. With your change StillImage holds only a reference to the pixmap, which in that case will be a dangling reference.

What about adding API to QPixmap to support this use-case?
How about using the internal QPixmap constructor that takes a QPixmapData and somehow increasing the refcount?
(you know that the returned d-pointer is a sub-class of QSharedData... ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247798</commentid>
    <comment_count>18</comment_count>
      <attachid>59514</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-07-07 15:19:14 -0700</bug_when>
    <thetext>Comment on attachment 59514
Resubmitted patch without HTML tags

(In reply to comment #17)
&gt; However I think this patch breaks the other use of StillImage in ImageQt.cpp, where StillImage::create() is called with a temporary QPixmap. With your change StillImage holds only a reference to the pixmap, which in that case will be a dangling reference.

You are right.

&gt; What about adding API to QPixmap to support this use-case?

AFAICT this is the only way out. The latest patch here will break behavior, for example patterns created from a canvas element. They must retain an image of the canvas contents at the time of pattern creation (this is tested by LayoutTests/fast/canvas/canvas-pattern-modify.html)

r- for breaking behavior. Would love this improvement though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252794</commentid>
    <comment_count>19</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-07-16 18:00:29 -0700</bug_when>
    <thetext>This could be fixed by adding a method to ImageBuffer that returns an image that can be used for rendering now, but shouldn&apos;t be kept around. Patch coming..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252795</commentid>
    <comment_count>20</comment_count>
      <attachid>61866</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-07-16 18:03:42 -0700</bug_when>
    <thetext>Created attachment 61866
Proposed patch

Image* ImageBuffer::imageForRendering()

This method returns an image that can be used for rendering right now (i.e the QPixmap backing our canvas rendering context.) This lets us avoid the QPixmap copy due to a painter always being active.

For all other ports, it simply returns ImageBuffer::image();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252817</commentid>
    <comment_count>21</comment_count>
      <attachid>61866</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-07-16 20:06:07 -0700</bug_when>
    <thetext>Comment on attachment 61866
Proposed patch

I don&apos;t see how this helps -- What happens when i do

canvas.getContext(&quot;2d&quot;).drawImage(canvas, 0, 0)

?

Afaict you still end up writing to your source image before reading from it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252818</commentid>
    <comment_count>22</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-07-16 20:11:06 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; I don&apos;t see how this helps -- What happens when i do
&gt; canvas.getContext(&quot;2d&quot;).drawImage(canvas, 0, 0)
&gt; ?
&gt; Afaict you still end up writing to your source image before reading from it.

In CanvasRenderingContext2D::drawImage(HTMLCanvasElement*, ...):

c-&gt;drawImage(buffer-&gt;image(), DeviceColorSpace, destRect, sourceRect, state().m_globalComposite);

buffer-&gt;image() here will create a copy of the source canvas&apos;s backing image and paint that onto the canvas.

Or am I missing something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252819</commentid>
    <comment_count>23</comment_count>
      <attachid>61866</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-07-16 20:13:22 -0700</bug_when>
    <thetext>Comment on attachment 61866
Proposed patch

Ah, I see.  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252823</commentid>
    <comment_count>24</comment_count>
      <attachid>61866</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-07-16 20:23:18 -0700</bug_when>
    <thetext>Comment on attachment 61866
Proposed patch

Clearing flags on attachment: 61866

Committed r63606: &lt;http://trac.webkit.org/changeset/63606&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252824</commentid>
    <comment_count>25</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-07-16 20:23:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547983</commentid>
    <comment_count>26</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-02 10:51:54 -0800</bug_when>
    <thetext>This has regressed a long time ago. We make a deep copy of canvas with every paint again, since some changes to ImageBuffer has been made. Should I reopen this bug or open a new one?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547987</commentid>
    <comment_count>27</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-02 11:00:39 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; This has regressed a long time ago. We make a deep copy of canvas with every paint again, since some changes to ImageBuffer has been made. Should I reopen this bug or open a new one?

new one, please :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48093</attachid>
            <date>2010-02-03 20:11:33 -0800</date>
            <delta_ts>2010-02-03 21:09:13 -0800</delta_ts>
            <desc>patch</desc>
            <filename>bufferedimage.diff</filename>
            <type>text/plain</type>
            <size>9863</size>
            <attacher name="Ariya Hidayat">ariya.hidayat</attacher>
            
              <data encoding="base64">Y29tbWl0IGJhNzQwOTk4NTM1M2MzOTI3Y2ViY2RlMzUwMzdlN2EzYmFhNTBjYzAKQXV0aG9yOiBB
cml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT4KRGF0ZTogICBNb24gRmViIDEg
MjI6MTg6MTIgMjAxMCAtMDgwMAoKICAgIDIwMTAtMDItMDMgIEFyaXlhIEhpZGF5YXQgIDxhcml5
YUB3ZWJraXQub3JnPgogICAgCiAgICAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgogICAgCiAgICAgICAgICAgIFtRdF0gRml4IGluZWZmaWNpZW50IHVzZSBvZiBRUGl4bWFwIGlu
IHRoZSBJbWFnZUJ1ZmZlciBjb2RlLgogICAgICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzI1MzAKICAgIAogICAgICAgICAgICBGb3IgaGVhdnkgY2FudmFz
IGRyYXdpbmcsIFN0aWxsSW1hZ2UgdW5mb3J0dW5hdGVseSBjcmVhdGVzIGEgZGVlcCBjb3B5CiAg
ICAgICAgICAgIG9mIFFQaXhtYXAgZm9yIGV2ZXJ5IGNhbGwgdG8gSW1hZ2VCdWZmZXI6OmltYWdl
KCkgKGR1cmluZyBjYW52YXMKICAgICAgICAgICAgcGFpbnRpbmcsIGluc2lkZSBIVE1MQ2FudmFz
RWxlbWVudDo6cGFpbnQoKSBmdW5jdGlvbikuCiAgICAKICAgICAgICAgICAgVGhpcyBjaGFuZ2Vz
ZXQgc29sdmVzIHRoZSBwcm9ibGVtIGJ5IGludHJvZHVjaW5nIEJ1ZmZlcmVkSW1hZ2Ugd2hpY2gK
ICAgICAgICAgICAganVzdCBob2xkcyB0aGUgcmVmZXJlbmNlIHRvIHRoZSBRUGl4bWFwIChhdm9p
ZGluZyB0aGUgbmVlZCB0byBkZXRhY2gpLgogICAgCiAgICAgICAgICAgICogV2ViQ29yZS5wcm86
CiAgICAgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQnVmZmVyZWRJbWFnZVF0LmNwcDog
QWRkZWQuCiAgICAgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZEltYWdlOjpCdWZmZXJlZEltYWdl
KToKICAgICAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlcmVkSW1hZ2U6OnNpemUpOgogICAgICAgICAg
ICAoV2ViQ29yZTo6QnVmZmVyZWRJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgog
ICAgICAgICAgICAoV2ViQ29yZTo6QnVmZmVyZWRJbWFnZTo6ZHJhdyk6CiAgICAgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvQnVmZmVyZWRJbWFnZVF0Lmg6IEFkZGVkLgogICAgICAgICAg
ICAoV2ViQ29yZTo6QnVmZmVyZWRJbWFnZTo6Y3JlYXRlKToKICAgICAgICAgICAgKFdlYkNvcmU6
OkJ1ZmZlcmVkSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6CiAgICAgICAgICAgIChXZWJDb3Jl
OjpCdWZmZXJlZEltYWdlOjpkZWNvZGVkU2l6ZSk6CiAgICAgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHA6CiAgICAgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6aW1hZ2UpOgoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggZjI5ZTBjYy4uNzJjZDcyOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxMC0wMi0w
MyAgQXJpeWEgSGlkYXlhdCAgPGFyaXlhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBGaXggaW5lZmZpY2llbnQgdXNlIG9m
IFFQaXhtYXAgaW4gdGhlIEltYWdlQnVmZmVyIGNvZGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjUzMAorCisgICAgICAgIEZvciBoZWF2eSBjYW52
YXMgZHJhd2luZywgU3RpbGxJbWFnZSB1bmZvcnR1bmF0ZWx5IGNyZWF0ZXMgYSBkZWVwIGNvcHkK
KyAgICAgICAgb2YgUVBpeG1hcCBmb3IgZXZlcnkgY2FsbCB0byBJbWFnZUJ1ZmZlcjo6aW1hZ2Uo
KSAoZHVyaW5nIGNhbnZhcworICAgICAgICBwYWludGluZywgaW5zaWRlIEhUTUxDYW52YXNFbGVt
ZW50OjpwYWludCgpIGZ1bmN0aW9uKS4KKworICAgICAgICBUaGlzIGNoYW5nZXNldCBzb2x2ZXMg
dGhlIHByb2JsZW0gYnkgaW50cm9kdWNpbmcgQnVmZmVyZWRJbWFnZSB3aGljaAorICAgICAgICBq
dXN0IGhvbGRzIHRoZSByZWZlcmVuY2UgdG8gdGhlIFFQaXhtYXAgKGF2b2lkaW5nIHRoZSBuZWVk
IHRvIGRldGFjaCkuCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9CdWZmZXJlZEltYWdlUXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkJ1ZmZlcmVkSW1hZ2U6OkJ1ZmZlcmVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QnVm
ZmVyZWRJbWFnZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZEltYWdlOjpuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZEltYWdl
OjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9CdWZmZXJlZEltYWdlUXQu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZEltYWdlOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QnVmZmVyZWRJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJ1ZmZlcmVkSW1hZ2U6OmRlY29kZWRTaXplKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjppbWFnZSk6CisKIDIwMTAtMDItMDEgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1h
bkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5k
ZXggNDFjNjYxZi4uYWNhMDg5MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysg
Yi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0xNTAyLDYgKzE1MDIsNyBAQCBIRUFERVJTICs9IFwK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuaCBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvUGF0dGVybi5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QZW4uaCBcCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQnVmZmVyZWRJbWFnZVF0LmggXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3Rp
bGxJbWFnZVF0LmggXApAQCAtMTk2Miw2ICsxOTYzLDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGFn
ZS9xdC9FdmVudEhhbmRsZXJRdC5jcHAgXAogICAgIHBhZ2UvcXQvRnJhbWVRdC5jcHAgXAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zZm9ybWF0aW9uTWF0cml4UXQuY3BwIFwKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9xdC9CdWZmZXJlZEltYWdlUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9Db2xvclF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0
LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcCBc
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0J1ZmZlcmVkSW1hZ2VR
dC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0J1ZmZlcmVkSW1hZ2VRdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEwZjAyNAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQnVmZmVyZWRJbWFnZVF0LmNwcApA
QCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFyaXlhIEhpZGF5YXQg
PGFyaXlhQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCdWZmZXJlZEltYWdlUXQuaCIKKworI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKworI2luY2x1ZGUgPFFQYWludGVy
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEJ1ZmZlcmVkSW1hZ2UganVzdCAiaG9sZHMi
IGEgcmVmZXJlbmNlIHRvIHRoZSBwaXhtYXAgaW4gdGhlIEltYWdlQnVmZmVyRGF0YSwKKy8vIGhl
bmNlIHdlIGF2b2lkIGV4cGxpY2l0IGNvcHkgKGRldGFjaCkgb2YgdGhlIFFQaXhtYXAgaW5zdGFu
Y2UuCitCdWZmZXJlZEltYWdlOjpCdWZmZXJlZEltYWdlKGNvbnN0IFFQaXhtYXAmIHBpeG1hcCkK
KyAgICA6IG1fcGl4bWFwKHBpeG1hcC5waXhtYXBEYXRhKCkpCit7fQorCitJbnRTaXplIEJ1ZmZl
cmVkSW1hZ2U6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBJbnRTaXplKG1fcGl4bWFwLndp
ZHRoKCksIG1fcGl4bWFwLmhlaWdodCgpKTsKK30KKworTmF0aXZlSW1hZ2VQdHIgQnVmZmVyZWRJ
bWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKQoreworICAgIHJldHVybiBjb25zdF9j
YXN0PE5hdGl2ZUltYWdlUHRyPigmbV9waXhtYXApOworfQorCit2b2lkIEJ1ZmZlcmVkSW1hZ2U6
OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwKKyAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3Igb3ApCit7CisgICAgaWYgKG1fcGl4bWFwLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBjdHh0LT5zYXZlKCk7CisgICAgY3R4dC0+c2V0Q29tcG9zaXRlT3BlcmF0
aW9uKG9wKTsKKyAgICBRUGFpbnRlciogcGFpbnRlcihjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7
CisgICAgcGFpbnRlci0+ZHJhd1BpeG1hcChkc3QsIG1fcGl4bWFwLCBzcmMpOworICAgIGN0eHQt
PnJlc3RvcmUoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9CdWZmZXJlZEltYWdlUXQuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQnVm
ZmVyZWRJbWFnZVF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBkNTky
ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQnVmZmVy
ZWRJbWFnZVF0LmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBB
cml5YSBIaWRheWF0IDxhcml5YUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdl
ciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEJ1ZmZlcmVkSW1hZ2VRdF9oCisjZGVmaW5lIEJ1ZmZlcmVkSW1hZ2VRdF9oCisK
KyNpbmNsdWRlICJJbWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBC
dWZmZXJlZEltYWdlIDogcHVibGljIEltYWdlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEJ1ZmZlcmVkSW1hZ2U+IGNyZWF0ZShjb25zdCBRUGl4bWFwJiBwaXhtYXAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQnVmZmVyZWRJbWFn
ZShwaXhtYXApKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBCdWZmZXJlZEltYWdl
cyBhcmUgdW5kZXJyZXBvcnRpbmcgZGVjb2RlZCBzaXplcyBhbmQgd2lsbCBiZSB1bmFibGUKKyAg
ICAgICAgLy8gdG8gcHJ1bmUgYmVjYXVzZSB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBpbXBsZW1l
bnRlZCB5ZXQuCisgICAgICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBk
ZXN0cm95QWxsID0gdHJ1ZSkgeyBRX1VOVVNFRChkZXN0cm95QWxsKTsgfQorICAgICAgICB2aXJ0
dWFsIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gMDsgfQorCisgICAgICAg
IHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgTmF0aXZlSW1h
Z2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVP
cGVyYXRvcik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBCdWZmZXJlZEltYWdlKGNvbnN0IFFQ
aXhtYXAmIHBpeG1hcCk7CisKKyAgICAgICAgUVBpeG1hcCBtX3BpeG1hcDsKKyAgICB9OworCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFn
ZUJ1ZmZlclF0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJR
dC5jcHAKaW5kZXggZDgzMTU2Ni4uNTI5MmVjMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKIAorI2luY2x1ZGUgIkJ1ZmZlcmVk
SW1hZ2VRdC5oIgogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKQEAgLTkzLDcgKzk0LDEwIEBAIEltYWdlKiBJ
bWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25zdAogICAgICAgICAvLyBJdCdzIGFzc3VtZWQgdGhhdCBp
ZiBpbWFnZSgpIGlzIGNhbGxlZCwgdGhlIGFjdHVhbCByZW5kZXJpbmcgdG8gdGhlCiAgICAgICAg
IC8vIEdyYXBoaWNzQ29udGV4dCBtdXN0IGJlIGRvbmUuCiAgICAgICAgIEFTU0VSVChjb250ZXh0
KCkpOwotICAgICAgICBtX2ltYWdlID0gU3RpbGxJbWFnZTo6Y3JlYXRlKG1fZGF0YS5tX3BpeG1h
cCk7CisKKyAgICAgICAgLy8gVGhpcyBpcyBzYWZlIGJlY2F1c2UgSW1hZ2UgaXMgYSBzaG9ydC1s
aXZlZCBvYmplY3QgYW5kIHdpbGwgYmUKKyAgICAgICAgLy8gZnJlZWQgd2l0aGluIEhUTUxDYW52
YXNFbGVtZW50Ojp3aWxsRHJhdy4KKyAgICAgICAgbV9pbWFnZSA9IEJ1ZmZlcmVkSW1hZ2U6OmNy
ZWF0ZShtX2RhdGEubV9waXhtYXApOwogICAgIH0KIAogICAgIHJldHVybiBtX2ltYWdlLmdldCgp
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48096</attachid>
            <date>2010-02-03 21:09:13 -0800</date>
            <delta_ts>2010-07-16 18:03:42 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bufferedimage.diff</filename>
            <type>text/plain</type>
            <size>9815</size>
            <attacher name="Ariya Hidayat">ariya.hidayat</attacher>
            
              <data encoding="base64">Y29tbWl0IDY5NGE5MjkxODdiNzI3MDEzNjYxZWM1ZDI2MWFlMjYzMjg0ZGQ2YTAKQXV0aG9yOiBB
cml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT4KRGF0ZTogICBNb24gRmViIDEg
MjI6MTg6MTIgMjAxMCAtMDgwMAoKICAgIDIwMTAtMDItMDMgIEFyaXlhIEhpZGF5YXQgIDxhcml5
YUB3ZWJraXQub3JnPgogICAgCiAgICAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgogICAgCiAgICAgICAgICAgIFtRdF0gRml4IGluZWZmaWNpZW50IHVzZSBvZiBRUGl4bWFwIGlu
IHRoZSBJbWFnZUJ1ZmZlciBjb2RlLgogICAgICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzI1MzAKICAgIAogICAgICAgICAgICBGb3IgaGVhdnkgY2FudmFz
IGRyYXdpbmcsIFN0aWxsSW1hZ2UgdW5mb3J0dW5hdGVseSBjcmVhdGVzIGEgZGVlcCBjb3B5CiAg
ICAgICAgICAgIG9mIFFQaXhtYXAgZm9yIGV2ZXJ5IGNhbGwgdG8gSW1hZ2VCdWZmZXI6OmltYWdl
KCkgKGR1cmluZyBjYW52YXMKICAgICAgICAgICAgcGFpbnRpbmcsIGluc2lkZSBIVE1MQ2FudmFz
RWxlbWVudDo6cGFpbnQoKSBmdW5jdGlvbikuCiAgICAKICAgICAgICAgICAgVGhpcyBjaGFuZ2Vz
ZXQgc29sdmVzIHRoZSBwcm9ibGVtIGJ5IGludHJvZHVjaW5nIEJ1ZmZlcmVkSW1hZ2Ugd2hpY2gK
ICAgICAgICAgICAganVzdCBob2xkcyB0aGUgcmVmZXJlbmNlIHRvIHRoZSBRUGl4bWFwIChhdm9p
ZGluZyB0aGUgbmVlZCB0byBkZXRhY2gpLgogICAgCiAgICAgICAgICAgICogV2ViQ29yZS5wcm86
CiAgICAgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQnVmZmVyZWRJbWFnZVF0LmNwcDog
QWRkZWQuCiAgICAgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZEltYWdlOjpCdWZmZXJlZEltYWdl
KToKICAgICAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlcmVkSW1hZ2U6OnNpemUpOgogICAgICAgICAg
ICAoV2ViQ29yZTo6QnVmZmVyZWRJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgog
ICAgICAgICAgICAoV2ViQ29yZTo6QnVmZmVyZWRJbWFnZTo6ZHJhdyk6CiAgICAgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvQnVmZmVyZWRJbWFnZVF0Lmg6IEFkZGVkLgogICAgICAgICAg
ICAoV2ViQ29yZTo6QnVmZmVyZWRJbWFnZTo6Y3JlYXRlKToKICAgICAgICAgICAgKFdlYkNvcmU6
OkJ1ZmZlcmVkSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6CiAgICAgICAgICAgIChXZWJDb3Jl
OjpCdWZmZXJlZEltYWdlOjpkZWNvZGVkU2l6ZSk6CiAgICAgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHA6CiAgICAgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6aW1hZ2UpOgoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggZjI5ZTBjYy4uNzJjZDcyOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxMC0wMi0w
MyAgQXJpeWEgSGlkYXlhdCAgPGFyaXlhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBGaXggaW5lZmZpY2llbnQgdXNlIG9m
IFFQaXhtYXAgaW4gdGhlIEltYWdlQnVmZmVyIGNvZGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjUzMAorCisgICAgICAgIEZvciBoZWF2eSBjYW52
YXMgZHJhd2luZywgU3RpbGxJbWFnZSB1bmZvcnR1bmF0ZWx5IGNyZWF0ZXMgYSBkZWVwIGNvcHkK
KyAgICAgICAgb2YgUVBpeG1hcCBmb3IgZXZlcnkgY2FsbCB0byBJbWFnZUJ1ZmZlcjo6aW1hZ2Uo
KSAoZHVyaW5nIGNhbnZhcworICAgICAgICBwYWludGluZywgaW5zaWRlIEhUTUxDYW52YXNFbGVt
ZW50OjpwYWludCgpIGZ1bmN0aW9uKS4KKworICAgICAgICBUaGlzIGNoYW5nZXNldCBzb2x2ZXMg
dGhlIHByb2JsZW0gYnkgaW50cm9kdWNpbmcgQnVmZmVyZWRJbWFnZSB3aGljaAorICAgICAgICBq
dXN0IGhvbGRzIHRoZSByZWZlcmVuY2UgdG8gdGhlIFFQaXhtYXAgKGF2b2lkaW5nIHRoZSBuZWVk
IHRvIGRldGFjaCkuCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9CdWZmZXJlZEltYWdlUXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkJ1ZmZlcmVkSW1hZ2U6OkJ1ZmZlcmVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QnVm
ZmVyZWRJbWFnZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZEltYWdlOjpuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZEltYWdl
OjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9CdWZmZXJlZEltYWdlUXQu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZEltYWdlOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QnVmZmVyZWRJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJ1ZmZlcmVkSW1hZ2U6OmRlY29kZWRTaXplKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjppbWFnZSk6CisKIDIwMTAtMDItMDEgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1h
bkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5k
ZXggNDFjNjYxZi4uYWNhMDg5MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysg
Yi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0xNTAyLDYgKzE1MDIsNyBAQCBIRUFERVJTICs9IFwK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuaCBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvUGF0dGVybi5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QZW4uaCBcCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQnVmZmVyZWRJbWFnZVF0LmggXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3Rp
bGxJbWFnZVF0LmggXApAQCAtMTk2Miw2ICsxOTYzLDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGFn
ZS9xdC9FdmVudEhhbmRsZXJRdC5jcHAgXAogICAgIHBhZ2UvcXQvRnJhbWVRdC5jcHAgXAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zZm9ybWF0aW9uTWF0cml4UXQuY3BwIFwKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9xdC9CdWZmZXJlZEltYWdlUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9Db2xvclF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0
LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcCBc
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0J1ZmZlcmVkSW1hZ2VR
dC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0J1ZmZlcmVkSW1hZ2VRdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZlOWM2NAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQnVmZmVyZWRJbWFnZVF0LmNwcApA
QCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFyaXlhIEhpZGF5YXQg
PGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBI
YW5zIFBldGVyIEZyZXl0aGVyCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQnVmZmVyZWRJbWFnZVF0LmgiCisKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisKKyNpbmNsdWRl
IDxRUGFpbnRlcj4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBCdWZmZXJlZEltYWdlIGp1
c3QgImhvbGRzIiBhIHJlZmVyZW5jZSB0byB0aGUgcGl4bWFwIGluIHRoZSBJbWFnZUJ1ZmZlckRh
dGEsCisvLyBoZW5jZSB3ZSBhdm9pZCBleHBsaWNpdCBjb3B5IChkZXRhY2gpIG9mIHRoZSBRUGl4
bWFwIGluc3RhbmNlLgorQnVmZmVyZWRJbWFnZTo6QnVmZmVyZWRJbWFnZShjb25zdCBRUGl4bWFw
JiBwaXhtYXApCisgICAgOiBtX3BpeG1hcChwaXhtYXAucGl4bWFwRGF0YSgpKQore30KKworSW50
U2l6ZSBCdWZmZXJlZEltYWdlOjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50U2l6ZSht
X3BpeG1hcC53aWR0aCgpLCBtX3BpeG1hcC5oZWlnaHQoKSk7Cit9CisKK05hdGl2ZUltYWdlUHRy
IEJ1ZmZlcmVkSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKK3sKKyAgICByZXR1
cm4gY29uc3RfY2FzdDxOYXRpdmVJbWFnZVB0cj4oJm1fcGl4bWFwKTsKK30KKwordm9pZCBCdWZm
ZXJlZEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBk
c3QsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBzcmMsIENvbG9yU3Bh
Y2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAgIGlmIChtX3BpeG1hcC5pc051bGwoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgY3R4dC0+c2F2ZSgpOworICAgIGN0eHQtPnNldENvbXBv
c2l0ZU9wZXJhdGlvbihvcCk7CisgICAgUVBhaW50ZXIqIHBhaW50ZXIoY3R4dC0+cGxhdGZvcm1D
b250ZXh0KCkpOworICAgIHBhaW50ZXItPmRyYXdQaXhtYXAoZHN0LCBtX3BpeG1hcCwgc3JjKTsK
KyAgICBjdHh0LT5yZXN0b3JlKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvQnVmZmVyZWRJbWFnZVF0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0J1ZmZlcmVkSW1hZ2VRdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjUzMjczOGYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0J1ZmZlcmVkSW1hZ2VRdC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQnVmZmVyZWRJbWFnZVF0X2gKKyNkZWZpbmUg
QnVmZmVyZWRJbWFnZVF0X2gKKworI2luY2x1ZGUgIkltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgQnVmZmVyZWRJbWFnZSA6IHB1YmxpYyBJbWFnZSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8QnVmZmVyZWRJbWFnZT4gY3JlYXRlKGNvbnN0IFFQaXhtYXAm
IHBpeG1hcCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQnVmZmVyZWRJbWFn
ZShwaXhtYXApKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogQnVmZmVyZWRJbWFnZXMgYXJlIHVu
ZGVycmVwb3J0aW5nIGRlY29kZWQgc2l6ZXMgYW5kIHdpbGwgYmUgdW5hYmxlCisgICAgLy8gdG8g
cHJ1bmUgYmVjYXVzZSB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCisg
ICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lBbGwgPSB0cnVl
KSB7IFFfVU5VU0VEKGRlc3Ryb3lBbGwpOyB9CisgICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVk
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZs
b2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworCitwcml2YXRlOgorICAgIEJ1ZmZl
cmVkSW1hZ2UoY29uc3QgUVBpeG1hcCYgcGl4bWFwKTsKKworICAgIFFQaXhtYXAgbV9waXhtYXA7
Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9JbWFnZUJ1ZmZlclF0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1h
Z2VCdWZmZXJRdC5jcHAKaW5kZXggZDgzMTU2Ni4uNTI5MmVjMyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKIAorI2luY2x1ZGUg
IkJ1ZmZlcmVkSW1hZ2VRdC5oIgogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKQEAgLTkzLDcgKzk0LDEwIEBA
IEltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25zdAogICAgICAgICAvLyBJdCdzIGFzc3Vt
ZWQgdGhhdCBpZiBpbWFnZSgpIGlzIGNhbGxlZCwgdGhlIGFjdHVhbCByZW5kZXJpbmcgdG8gdGhl
CiAgICAgICAgIC8vIEdyYXBoaWNzQ29udGV4dCBtdXN0IGJlIGRvbmUuCiAgICAgICAgIEFTU0VS
VChjb250ZXh0KCkpOwotICAgICAgICBtX2ltYWdlID0gU3RpbGxJbWFnZTo6Y3JlYXRlKG1fZGF0
YS5tX3BpeG1hcCk7CisKKyAgICAgICAgLy8gVGhpcyBpcyBzYWZlIGJlY2F1c2UgSW1hZ2UgaXMg
YSBzaG9ydC1saXZlZCBvYmplY3QgYW5kIHdpbGwgYmUKKyAgICAgICAgLy8gZnJlZWQgd2l0aGlu
IEhUTUxDYW52YXNFbGVtZW50Ojp3aWxsRHJhdy4KKyAgICAgICAgbV9pbWFnZSA9IEJ1ZmZlcmVk
SW1hZ2U6OmNyZWF0ZShtX2RhdGEubV9waXhtYXApOwogICAgIH0KIAogICAgIHJldHVybiBtX2lt
YWdlLmdldCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59513</attachid>
            <date>2010-06-23 07:32:17 -0700</date>
            <delta_ts>2010-06-23 07:43:02 -0700</delta_ts>
            <desc>New proposed patch</desc>
            <filename>canvas-qt-perf-patch</filename>
            <type>text/plain</type>
            <size>2587</size>
            <attacher name="Samuel Rødal">samuel.rodal</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFs
Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25h
bC5kdGQiPgo8IS0tIHNhdmVkIGZyb20gdXJsPSgwMDQ1KWh0dHA6Ly93ZWJraXQucGFzdGViaW4u
Y29tL3Jhdy5waHA/aT1RbW5QNDJNZyAtLT4KPEhUTUwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
LzE5OTkveGh0bWwiPjxIRUFEPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVu
dD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KCQkJCgkJCTxUSVRMRT5SQVcgT1VUUFVUIFFt
blA0Mk1nPC9USVRMRT4KCQkJPE1FVEEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2luZGV4LCBu
b2ZvbGxvdyI+CgkJPC9IRUFEPjxCT0RZPgoJCQk8UFJFPmRpZmYgLS1naXQgYS9XZWJDb3JlL0No
YW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDU2NGQ4ZTMuLmJjM2E2MTcgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjAgQEAKKzIwMTAtMDYtMjMgIFNhbXVlbCBSw7hkYWwgICZsdDtzYW11ZWwucm9kYWxAbm9r
aWEuY29tJmd0OworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFF0V2Via2l0IGNyZWF0ZXMgYW4gdW5uZWNlc3NhcnkgZGVlcCBjb3B5IG9mIGltYWdlcyB3
aGVuIGNhbnZhcyBkcmF3aW5nIGlzIGRvbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTMyNTMwCisKKyAgICAgICAgUHJldmVudGVkIGRlZXAgY29weSBv
biBlYWNoIGRyYXcgb2YgYSBjYW52YXMgZWxlbWVudCBpbiBRdCBXZWJLaXQuCisKKyAgICAgICAg
SW5zdGVhZCBvZiBwYXlpbmcgdGhlIHByaWNlIG9mIGEgY2FudmFzIHBvdGVudGlhbGx5IGJlaW5n
IGRyYXduIG9udG8KKyAgICAgICAgaXRzZWxmIGVhY2ggdGltZSB3ZSBjYW4gZGV0ZWN0IHRoaXMg
c3BlY2lhbCBjYXNlIGFuZCBkbyBhIGRlZXAgY29weSBvbmx5CisgICAgICAgIHRoZW4uIFRoaXMg
c2lnbmlmaWNhbnRseSByZWR1Y2VzIENQVSB0aW1lIG9mIHNpbXBsZSBjYW52YXMgdXNlIGNhc2Vz
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5oOgorCiAyMDEwLTA2LTIzICBNaWtoYWlsIE5hZ2Fub3Yg
ICZsdDttbmFnYW5vdkBjaHJvbWl1bS5vcmcmZ3Q7CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2
ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3Rp
bGxJbWFnZVF0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0
LmNwcAppbmRleCA0NjUzYzU4Li5hM2E2MmQ1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9TdGlsbEltYWdlUXQuY3BwCkBAIC05Myw3ICs5MywxMSBAQCB2b2lkIFN0aWxsSW1h
Z2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmYW1wOyBkc3Qs
CiAgICAgRmxvYXRSZWN0IGRzdE0oZHgsIGR5LCBkdywgZGgpOwogICAgIFFQYWludGVyKiBwYWlu
dGVyKGN0eHQtJmd0O3BsYXRmb3JtQ29udGV4dCgpKTsKIAotICAgIHBhaW50ZXItJmd0O2RyYXdQ
aXhtYXAoZHN0TSwgbV9waXhtYXAsIHNyY00pOworICAgIGlmIChzdGF0aWNfY2FzdCZsdDtjb25z
dCBRUGFpbnREZXZpY2UqJmd0OygmYW1wO21fcGl4bWFwKSA9PSBzdGF0aWNfY2FzdCZsdDtjb25z
dCBRUGFpbnREZXZpY2UqJmd0OyhwYWludGVyLSZndDtkZXZpY2UoKSkpCisgICAgICAgIHBhaW50
ZXItJmd0O2RyYXdQaXhtYXAoZHN0TSwgUVBpeG1hcChtX3BpeG1hcCksIHNyY00pOworICAgIGVs
c2UKKyAgICAgICAgcGFpbnRlci0mZ3Q7ZHJhd1BpeG1hcChkc3RNLCBtX3BpeG1hcCwgc3JjTSk7
CisKICAgICBjdHh0LSZndDtyZXN0b3JlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L1N0aWxsSW1hZ2VRdC5oCmluZGV4IDdiZTkxMzYuLjE2YTM5Y2YgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuaApAQCAtNTEsNyArNTEsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgU3RpbGxJbWFnZShjb25z
dCBRUGl4bWFwJmFtcDsgcGl4bWFwKTsKICAgICAgICAgCi0gICAgICAgIFFQaXhtYXAgbV9waXht
YXA7CisgICAgICAgIGNvbnN0IFFQaXhtYXAgJmFtcDttX3BpeG1hcDsKICAgICB9OwogCiB9PC9Q
UkU+CgkJCgk8L0JPRFk+PC9IVE1MPg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59514</attachid>
            <date>2010-06-23 07:39:41 -0700</date>
            <delta_ts>2010-07-16 18:03:42 -0700</delta_ts>
            <desc>Resubmitted patch without HTML tags</desc>
            <filename>canvas-qt-perf-patch</filename>
            <type>text/plain</type>
            <size>2073</size>
            <attacher name="Samuel Rødal">samuel.rodal</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTY0ZDhlMy4uYmMzYTYxNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0wNi0yMyAgU2FtdWVsIFLDuGRh
bCAgPHNhbXVlbC5yb2RhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUXRXZWJraXQgY3JlYXRlcyBhbiB1bm5lY2Vzc2FyeSBkZWVw
IGNvcHkgb2YgaW1hZ2VzIHdoZW4gY2FudmFzIGRyYXdpbmcgaXMgZG9uZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI1MzAKKworICAgICAgICBQcmV2
ZW50ZWQgZGVlcCBjb3B5IG9uIGVhY2ggZHJhdyBvZiBhIGNhbnZhcyBlbGVtZW50IGluIFF0IFdl
YktpdC4KKworICAgICAgICBJbnN0ZWFkIG9mIHBheWluZyB0aGUgcHJpY2Ugb2YgYSBjYW52YXMg
cG90ZW50aWFsbHkgYmVpbmcgZHJhd24gb250bworICAgICAgICBpdHNlbGYgZWFjaCB0aW1lIHdl
IGNhbiBkZXRlY3QgdGhpcyBzcGVjaWFsIGNhc2UgYW5kIGRvIGEgZGVlcCBjb3B5IG9ubHkKKyAg
ICAgICAgdGhlbi4gVGhpcyBzaWduaWZpY2FudGx5IHJlZHVjZXMgQ1BVIHRpbWUgb2Ygc2ltcGxl
IGNhbnZhcyB1c2UgY2FzZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGls
bEltYWdlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RpbGxJbWFnZTo6ZHJhdyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0Lmg6CisKIDIwMTAtMDYtMjMg
IE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9TdGlsbEltYWdlUXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9T
dGlsbEltYWdlUXQuY3BwCmluZGV4IDQ2NTNjNTguLmEzYTYyZDUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAKQEAgLTkzLDcgKzkzLDExIEBAIHZv
aWQgU3RpbGxJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0LAogICAgIEZsb2F0UmVjdCBkc3RNKGR4LCBkeSwgZHcsIGRoKTsKICAgICBRUGFpbnRl
ciogcGFpbnRlcihjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAKLSAgICBwYWludGVyLT5kcmF3
UGl4bWFwKGRzdE0sIG1fcGl4bWFwLCBzcmNNKTsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8Y29uc3Qg
UVBhaW50RGV2aWNlKj4oJm1fcGl4bWFwKSA9PSBzdGF0aWNfY2FzdDxjb25zdCBRUGFpbnREZXZp
Y2UqPihwYWludGVyLT5kZXZpY2UoKSkpCisgICAgICAgIHBhaW50ZXItPmRyYXdQaXhtYXAoZHN0
TSwgUVBpeG1hcChtX3BpeG1hcCksIHNyY00pOworICAgIGVsc2UKKyAgICAgICAgcGFpbnRlci0+
ZHJhd1BpeG1hcChkc3RNLCBtX3BpeG1hcCwgc3JjTSk7CisKICAgICBjdHh0LT5yZXN0b3JlKCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFn
ZVF0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5oCmluZGV4
IDdiZTkxMzYuLjE2YTM5Y2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvU3RpbGxJbWFnZVF0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGls
bEltYWdlUXQuaApAQCAtNTEsNyArNTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJp
dmF0ZToKICAgICAgICAgU3RpbGxJbWFnZShjb25zdCBRUGl4bWFwJiBwaXhtYXApOwogICAgICAg
ICAKLSAgICAgICAgUVBpeG1hcCBtX3BpeG1hcDsKKyAgICAgICAgY29uc3QgUVBpeG1hcCAmbV9w
aXhtYXA7CiAgICAgfTsKIAogfQoK
</data>
<flag name="review"
          id="46414"
          type_id="1"
          status="-"
          setter="kling"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61866</attachid>
            <date>2010-07-16 18:03:42 -0700</date>
            <delta_ts>2010-07-16 20:23:18 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>bug-32530-v1.diff</filename>
            <type>text/plain</type>
            <size>5741</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YmY1YTc5My4uN2YzMmU4OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxMC0wNy0xNiAgQW5kcmVhcyBLbGlu
ZyAgPGFuZHJlYXMua2xpbmdAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFF0V2Via2l0IGNyZWF0ZXMgYW4gdW5uZWNlc3NhcnkgZGVl
cCBjb3B5IG9mIGltYWdlcyB3aGVuIGNhbnZhcyBkcmF3aW5nIGlzIGRvbmUKKyAgICAgICAgQSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI1MzAKKworICAgICAgICBT
b2x2ZSB0aGlzIGJ5IGFkZGluZyBJbWFnZUJ1ZmZlcjo6aW1hZ2VGb3JSZW5kZXJpbmcoKSB3aGlj
aCByZXR1cm5zIGFuIGltYWdlCisgICAgICAgIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHJlbmRlcmlu
ZyBub3csIGJ1dCBpc24ndCBhIGNvcHkgdG8gYmUga2VwdCBhcm91bmQuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmltYWdlRm9yUmVuZGVyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9JbWFnZUJ1ZmZlclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjppbWFn
ZUZvclJlbmRlcmluZyk6IEFkZGVkIHRvIHByb3ZpZGUgYW4gaW1hZ2UgdGhhdCBjYW4KKyAgICAg
ICAgYmUgdXNlZCBmb3IgcmVuZGVyaW5nIG5vdywgYnV0IG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVy
ZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3RpbGxJbWFnZTo6U3RpbGxJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdGlsbEltYWdlOjp+U3RpbGxJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdGlsbEltYWdl
OjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmRyYXcpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5oOgorICAgICAgICAoV2ViQ29y
ZTo6U3RpbGxJbWFnZTo6Y3JlYXRlRm9yUmVuZGVyaW5nKTogQWRkZWQgZm9yIHVzZSBpbgorICAg
ICAgICBJbWFnZUJ1ZmZlcjo6aW1hZ2VGb3JSZW5kZXJpbmcoKSwgcHJvdmlkZXMgYSB0aGluIHdy
YXBwZXIgYXJvdW5kIGEgUVBpeG1hcCouCisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cGFpbnQpOiBQYWlu
dCB3aXRoIEltYWdlQnVmZmVyOjppbWFnZUZvclJlbmRlcmluZygpCisKIDIwMTAtMDctMTYgIE1h
dHRoZXcgRGVsYW5leSAgPG1kZWxhbmV5QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBTYW0gV2VpbmlnLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50
LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXggNjE3NGY1MS4u
NmI1YTNhMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAor
KysgYi9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC0yNzgsNyArMjc4LDcg
QEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiByKQogICAgIGlmIChoYXNDcmVhdGVkSW1hZ2VCdWZmZXIoKSkgewog
ICAgICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBidWZmZXIoKTsKICAgICAgICAgaWYg
KGltYWdlQnVmZmVyKSB7Ci0gICAgICAgICAgICBJbWFnZSogaW1hZ2UgPSBpbWFnZUJ1ZmZlci0+
aW1hZ2UoKTsKKyAgICAgICAgICAgIEltYWdlKiBpbWFnZSA9IGltYWdlQnVmZmVyLT5pbWFnZUZv
clJlbmRlcmluZygpOwogICAgICAgICAgICAgaWYgKGltYWdlKQogICAgICAgICAgICAgICAgIGNv
bnRleHQtPmRyYXdJbWFnZShpbWFnZSwgRGV2aWNlQ29sb3JTcGFjZSwgcik7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCA5ZjliYTdlLi5jYjVk
NjNmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC03NCw2ICs3
NCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCgpIGNvbnN0OwogCiAgICAgICAgIEltYWdlKiBpbWFnZSgpIGNvbnN0OworI2lmIFBMQVRG
T1JNKFFUKQorICAgICAgICBJbWFnZSogaW1hZ2VGb3JSZW5kZXJpbmcoKSBjb25zdDsKKyNlbHNl
CisgICAgICAgIEltYWdlKiBpbWFnZUZvclJlbmRlcmluZygpIGNvbnN0IHsgcmV0dXJuIGltYWdl
KCk7IH0KKyNlbmRpZgogCiAgICAgICAgIHZvaWQgY2xlYXJJbWFnZSgpIHsgbV9pbWFnZS5jbGVh
cigpOyB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VC
dWZmZXJRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQu
Y3BwCmluZGV4IGE1NDZkZWYuLjA0M2E4YzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcApAQCAtOTgsNiArOTgsMTQgQEAgR3JhcGhpY3NDb250
ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fY29udGV4dC5n
ZXQoKTsKIH0KIAorSW1hZ2UqIEltYWdlQnVmZmVyOjppbWFnZUZvclJlbmRlcmluZygpIGNvbnN0
Cit7CisgICAgaWYgKCFtX2ltYWdlKQorICAgICAgICBtX2ltYWdlID0gU3RpbGxJbWFnZTo6Y3Jl
YXRlRm9yUmVuZGVyaW5nKCZtX2RhdGEubV9waXhtYXApOworCisgICAgcmV0dXJuIG1faW1hZ2Uu
Z2V0KCk7Cit9CisKIEltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25zdAogewogICAgIGlm
ICghbV9pbWFnZSkgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9T
dGlsbEltYWdlUXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdl
UXQuY3BwCmluZGV4IDQ2NTNjNTguLjAzNDIzNGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAKQEAgLTM2LDIzICszNiwzNSBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBTdGlsbEltYWdlOjpTdGlsbEltYWdlKGNvbnN0IFFQaXhtYXAmIHBpeG1h
cCkKKyAgICA6IG1fcGl4bWFwKG5ldyBRUGl4bWFwKHBpeG1hcCkpCisgICAgLCBtX293bnNQaXht
YXAodHJ1ZSkKK3t9CisKK1N0aWxsSW1hZ2U6OlN0aWxsSW1hZ2UoY29uc3QgUVBpeG1hcCogcGl4
bWFwKQogICAgIDogbV9waXhtYXAocGl4bWFwKQorICAgICwgbV9vd25zUGl4bWFwKGZhbHNlKQog
e30KIAorU3RpbGxJbWFnZTo6flN0aWxsSW1hZ2UoKQoreworICAgIGlmIChtX293bnNQaXhtYXAp
CisgICAgICAgIGRlbGV0ZSBtX3BpeG1hcDsKK30KKwogSW50U2l6ZSBTdGlsbEltYWdlOjpzaXpl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gSW50U2l6ZShtX3BpeG1hcC53aWR0aCgpLCBtX3BpeG1h
cC5oZWlnaHQoKSk7CisgICAgcmV0dXJuIEludFNpemUobV9waXhtYXAtPndpZHRoKCksIG1fcGl4
bWFwLT5oZWlnaHQoKSk7CiB9CiAKIE5hdGl2ZUltYWdlUHRyIFN0aWxsSW1hZ2U6Om5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCkKIHsKLSAgICByZXR1cm4gY29uc3RfY2FzdDxOYXRpdmVJbWFn
ZVB0cj4oJm1fcGl4bWFwKTsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxOYXRpdmVJbWFnZVB0cj4o
bV9waXhtYXApOwogfQogCiB2b2lkIFN0aWxsSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBj
dHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBG
bG9hdFJlY3QmIHNyYywgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7Ci0gICAg
aWYgKG1fcGl4bWFwLmlzTnVsbCgpKQorICAgIGlmIChtX3BpeG1hcC0+aXNOdWxsKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGN0eHQtPnNhdmUoKTsKQEAgLTkzLDcgKzEwNSw3IEBAIHZvaWQg
U3RpbGxJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0LAogICAgIEZsb2F0UmVjdCBkc3RNKGR4LCBkeSwgZHcsIGRoKTsKICAgICBRUGFpbnRlciog
cGFpbnRlcihjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAKLSAgICBwYWludGVyLT5kcmF3UGl4
bWFwKGRzdE0sIG1fcGl4bWFwLCBzcmNNKTsKKyAgICBwYWludGVyLT5kcmF3UGl4bWFwKGRzdE0s
ICptX3BpeG1hcCwgc3JjTSk7CiAgICAgY3R4dC0+cmVzdG9yZSgpOwogfQogCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5oIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuaAppbmRleCA3YmU5MTM2Li41ODA3MWQ5
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5o
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmgKQEAgLTM5
LDYgKzM5LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU3RpbGxJbWFnZShwaXhtYXApKTsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFN0aWxsSW1hZ2U+IGNyZWF0ZUZvclJlbmRlcmluZyhjb25zdCBRUGl4bWFw
KiBwaXhtYXApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3Rp
bGxJbWFnZShwaXhtYXApKTsKKyAgICAgICAgfQorCiAgICAgICAgIC8vIEZJWE1FOiBTdGlsbElt
YWdlcyBhcmUgdW5kZXJyZXBvcnRpbmcgZGVjb2RlZCBzaXplcyBhbmQgd2lsbCBiZSB1bmFibGUK
ICAgICAgICAgLy8gdG8gcHJ1bmUgYmVjYXVzZSB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBpbXBs
ZW1lbnRlZCB5ZXQuCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9v
bCBkZXN0cm95QWxsID0gdHJ1ZSkgeyBRX1VOVVNFRChkZXN0cm95QWxsKTsgfQpAQCAtNTAsOCAr
NTUsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgU3Rp
bGxJbWFnZShjb25zdCBRUGl4bWFwJiBwaXhtYXApOworICAgICAgICBTdGlsbEltYWdlKGNvbnN0
IFFQaXhtYXAqIHBpeG1hcCk7CisgICAgICAgIH5TdGlsbEltYWdlKCk7CiAgICAgICAgIAotICAg
ICAgICBRUGl4bWFwIG1fcGl4bWFwOworICAgICAgICBjb25zdCBRUGl4bWFwKiBtX3BpeG1hcDsK
KyAgICAgICAgYm9vbCBtX293bnNQaXhtYXA7CiAgICAgfTsKIAogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>