<?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>77564</bug_id>
          
          <creation_ts>2012-02-01 11:13:07 -0800</creation_ts>
          <short_desc>Tile cache doesn&apos;t have an upper limit</short_desc>
          <delta_ts>2012-02-01 12:00:03 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Anders Carlsson">andersca</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>547220</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-02-01 11:13:07 -0800</bug_when>
    <thetext>Tile cache doesn&apos;t have an upper limit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547224</commentid>
    <comment_count>1</comment_count>
      <attachid>124976</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-02-01 11:18:40 -0800</bug_when>
    <thetext>Created attachment 124976
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547238</commentid>
    <comment_count>2</comment_count>
      <attachid>124976</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-02-01 11:35:18 -0800</bug_when>
    <thetext>Comment on attachment 124976
Patch

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

&gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:941
&gt; +    // Let the client know that it needs to sync the layer state. We use this to ensure that
&gt; +    // the layout is up to date before the individual tiles are painted.

The second half of the comment is the good part; the first sort of repeats what the code says and that is not needed. Merging the two sentences might make things clearer and shorter.

&gt; Source/WebCore/platform/graphics/ca/mac/TileCache.mm:69
&gt; +        // Revalidate the tiles right away if we don&apos;t have any. This avoids
&gt; +        // flashing when transitioning from one page to another.

Same thought. The first sentence just says what the code does. A shorter comment that focused just on the “why” may be possible. Like:

    // We must revalidate immediately instead of using a timer when there are no tiles to avoid a flash when transitioning from one page to another.

Wording it that way makes it clear there is something else to say. Like explaining how “no tiles” happens in a page transition.

&gt; Source/WebCore/platform/graphics/ca/mac/TileCache.mm:262
&gt; +    // FIXME: Figure out the optimal values here.
&gt; +    tileCoverageRect.inflateX(tileCoverageRect.width() / 2);
&gt; +    tileCoverageRect.inflateY(tileCoverageRect.height() * 2);

Another comment should also indicate why you think these are good starting values. Such as “it’s common to have tall pages and scroll vertically so we keep more tiles above and below the current area than on the left and right”. Or whatever that current thinking is.

This code seems to do 5X in the vertical dimension and 2X in the horizontal. Or a border of 2X on top and bottom and 0.5X on left and right. Your comment in change log cites different figures.

&gt; Source/WebCore/platform/graphics/ca/mac/TileCache.mm:274
&gt; +            [tileLayer removeFromSuperlayer];
&gt; +            [tileLayer setTileCache:0];

Can tileLayer be deallocated here as a side effect of the call to removeFromSuperlayer?

&gt; Source/WebCore/platform/graphics/ca/mac/TileCache.mm:280
&gt; +    // FIXME: Be more clever about which tiles to remove.

Unclear what more clever means. Maybe you could write a better comment?

&gt; Source/WebCore/platform/graphics/ca/mac/TileCache.mm:298
&gt; +            if (!result.second) {
&gt; +                // We already have a layer for this tile.
&gt; +                continue;
&gt;              }

Somethings I think that if (result.first-&gt;second) is clearer than if (!result.second). I like how it’s closely related to the createTileLayer line of code. Obviously neither is all that clear until we change the return types so they use named data members instead of pair/first,second naming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547247</commentid>
    <comment_count>3</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-02-01 11:47:07 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/mac/TileCache.mm:262
&gt; &gt; +    // FIXME: Figure out the optimal values here.
&gt; &gt; +    tileCoverageRect.inflateX(tileCoverageRect.width() / 2);
&gt; &gt; +    tileCoverageRect.inflateY(tileCoverageRect.height() * 2);
&gt; 
&gt; 
&gt; This code seems to do 5X in the vertical dimension and 2X in the horizontal. Or a border of 2X on top and bottom and 0.5X on left and right. Your comment in change log cites different figures.

Changed the comments/code to be 2x horizontally and 3x vertically and added a better comment. I&apos;ve also filed &lt;rdar://problem/10790464&gt; to track improving this.

&gt; &gt; Source/WebCore/platform/graphics/ca/mac/TileCache.mm:274
&gt; &gt; +            [tileLayer removeFromSuperlayer];
&gt; &gt; +            [tileLayer setTileCache:0];
&gt; 
&gt; Can tileLayer be deallocated here as a side effect of the call to removeFromSuperlayer?

No - it&apos;s still retained by the tile map.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/mac/TileCache.mm:280
&gt; &gt; +    // FIXME: Be more clever about which tiles to remove.
&gt; 
&gt; Unclear what more clever means. Maybe you could write a better comment?
&gt; 

Done.

&gt; &gt; Source/WebCore/platform/graphics/ca/mac/TileCache.mm:298
&gt; &gt; +            if (!result.second) {
&gt; &gt; +                // We already have a layer for this tile.
&gt; &gt; +                continue;
&gt; &gt;              }
&gt; 
&gt; Somethings I think that if (result.first-&gt;second) is clearer than if (!result.second). I like how it’s closely related to the createTileLayer line of code. Obviously neither is all that clear until we change the return types so they use named data members instead of pair/first,second naming.

Fixed.

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547259</commentid>
    <comment_count>4</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-02-01 12:00:03 -0800</bug_when>
    <thetext>Committed r106482: &lt;http://trac.webkit.org/changeset/106482&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124976</attachid>
            <date>2012-02-01 11:18:40 -0800</date>
            <delta_ts>2012-02-01 11:35:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77564-20120201111901.patch</filename>
            <type>text/plain</type>
            <size>13512</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NDExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWQ1NTI5ODczZDEwMTk5
MjgyZTQ4YmUwMDk5ZDI1OTllM2RmMjFmOS4uYmMyNzhjZjZhZTRjN2JjODgwYjI1YmFmOWU0M2I0
YjgwODk5OWQ2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEyLTAyLTAxICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CisKKyAgICAgICAgVGlsZSBjYWNoZSBk
b2Vzbid0IGhhdmUgYW4gdXBwZXIgbGltaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc3NTY0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDcxMDc0
ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDYWNo
ZSBlbm91Z2ggdGlsZXMgdG8gY292ZXIgMnggdGhlIHZpc2libGUgaGVpZ2h0IGFuZCAxLjV4IHRo
ZSB2aXNpYmxlIHdpZHRoIG9mIHRoZSBwYWdlLAorICAgICAgICBhbmQgZHJvcCB0aWxlcyB0aGF0
IGFyZSBvdXRzaWRlIHRoYXQgYXJlYS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
L0dyYXBoaWNzTGF5ZXJDQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6
OnBsYXRmb3JtQ0FMYXllckRpZENyZWF0ZVRpbGVzKToKKyAgICAgICAgQ2FsbCBHcmFwaGljc0xh
eWVyQ2xpZW50Ojpub3RpZnlTeW5jUmVxdWlyZWQgaGVyZSwgd2hpY2ggd2lsbCBzY2hlZHVsZSBh
IGxheWVyIGZsdXNoIGFuZCBlbnN1cmUgdGhhdAorICAgICAgICB0aGUgcGFnZSBsYXlvdXQgaXMg
dXAgdG8gZGF0ZSBiZWZvcmUgdGhlIG5ldyB0aWxlcyBhcmUgcGFpbnRlZC4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllckNsaWVudC5oOgorICAgICAgICBB
ZGQgcGxhdGZvcm1DQUxheWVyRGlkQ3JlYXRlVGlsZXMgbWVtYmVyIGZ1bmN0aW9uLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDYWNoZS5oOgorICAgICAgICBVcGRh
dGUgZm9yIG5ldy9yZW1vdmVkIG1lbWJlciBmdW5jdGlvbnMgYW5kIG1lbWJlciB2YXJpYWJsZXMu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNhY2hlLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpUaWxlQ2FjaGUpOgorICAgICAgICBJbml0aWFsaXpl
IHRoZSB0aWxlIHJldmFsaWRhdGlvbiB0aW1lci4KKworICAgICAgICAoV2ViQ29yZTo6VGlsZUNh
Y2hlOjp0aWxlQ2FjaGVMYXllckJvdW5kc0NoYW5nZWQpOgorICAgICAgICBJZiB3ZSBkb24ndCBo
YXZlIGFueSB0aWxlcyBhdCBhbGwgcmlnaHQgbm93LCByZXZhbGlkYXRlIHRoZSB0aWxlcyBpbW1l
ZGlhdGVseS4gT3RoZXJ3aXNlLAorICAgICAgICBzY2hlZHVsZSB0aGUgcmV2YWxpZGF0aW9uIHRp
bWVyLgorCisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OnNldE5lZWRzRGlzcGxheUluUmVj
dCk6CisgICAgICAgIFJldHVybiBlYXJseSBpZiB3ZSBoYXZlIG5vIHRpbGVzLgorCisgICAgICAg
IChXZWJDb3JlOjpUaWxlQ2FjaGU6OnZpc2libGVSZWN0Q2hhbmdlZCk6CisgICAgICAgIFNjaGVk
dWxlIHRpbGUgcmV2YWxpZGF0aW9uLgorCisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OnJl
Y3RGb3JUaWxlSW5kZXgpOgorICAgICAgICBOZXcgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJu
cyB0aGUgYm91bmRzIHJlY3Qgb2YgYSB0aWxlIGdpdmVuIGl0cyB0aWxlIGluZGV4LgorCisgICAg
ICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OmdldFRpbGVJbmRleFJhbmdlRm9yUmVjdCk6CisgICAg
ICAgIENsYW1wIHRoZSByZWN0IHRvIHRoZSBib3VuZHMgb2YgdGhlIHRpbGUgY2FjaGUgbGF5ZXIu
CisKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDYWNoZTo6c2NoZWR1bGVUaWxlUmV2YWxpZGF0aW9u
KToKKyAgICAgICAgU2NoZWR1bGUgdGhlIHJldmFsaWRhdGlvbiB0aW1lciBpZiBpdCBoYXNuJ3Qg
YWxyZWFkeSBiZWVuIHNjaGVkdWxlZC4KKworICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjp0
aWxlUmV2YWxpZGF0aW9uVGltZXJGaXJlZCk6CisgICAgICAgIENhbGwgcmV2YWxpZGF0ZVRpbGVz
LgorCisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OnJldmFsaWRhdGVUaWxlcyk6CisgICAg
ICAgIENvbXB1dGUgdGhlIHRpbGUgY292ZXJhZ2UgcmVjdCBhbmQgcmVtb3ZlIGFsbCB0aWxlcyB0
aGF0IGFyZSBvdXRzaWRlLiBDcmVhdGUgbmV3IHRpbGVzIGZvciBhbnkKKyAgICAgICAgcGFydHMg
b2YgdGhlIHRpbGUgY292ZXJhZ2UgcmVjdCB0aGF0IGRvbid0IGhhdmUgdGlsZXMgYWxyZWFkeS4K
KworICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjp0aWxlTGF5ZXJBdEluZGV4KToKKyAgICAg
ICAgUmVtb3ZlIGludmFsaWQgYXNzZXJ0aW9ucy4KKwogMjAxMi0wMS0zMSAgQW5kZXJzIENhcmxz
c29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFRpbGVDYWNoZTo6c2V0TmVlZHNE
aXNwbGF5SW5SZWN0IGNsZWFudXAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IDQ5NjBlMzgwYTJkY2FkMDlk
MTk2MzNiYzQ5ZDZlYWFhMDY4OWJkNDMuLjI2YjIyYzNkMGNkNzIzMzk1MjgwMmRkYjUwOTAxOGQw
YTFlNTFlMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L0dyYXBoaWNzTGF5ZXJDQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcApAQCAtOTMzLDYgKzkzMywxNSBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXJDQTo6cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbgogICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIGNs
aXApOwogfQogCit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cGxhdGZvcm1DQUxheWVyRGlkQ3JlYXRl
VGlsZXMoKQoreworICAgIEFTU0VSVChtX2xheWVyLT5sYXllclR5cGUoKSA9PSBQbGF0Zm9ybUNB
TGF5ZXI6OkxheWVyVHlwZVRpbGVDYWNoZUxheWVyKTsKKworICAgIC8vIExldCB0aGUgY2xpZW50
IGtub3cgdGhhdCBpdCBuZWVkcyB0byBzeW5jIHRoZSBsYXllciBzdGF0ZS4gV2UgdXNlIHRoaXMg
dG8gZW5zdXJlIHRoYXQKKyAgICAvLyB0aGUgbGF5b3V0IGlzIHVwIHRvIGRhdGUgYmVmb3JlIHRo
ZSBpbmRpdmlkdWFsIHRpbGVzIGFyZSBwYWludGVkLgorICAgIGNsaWVudCgpLT5ub3RpZnlTeW5j
UmVxdWlyZWQodGhpcyk7Cit9CisKIHZvaWQgR3JhcGhpY3NMYXllckNBOjpjb21taXRMYXllckNo
YW5nZXNCZWZvcmVTdWJsYXllcnMoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBv
aW50JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKQogewogICAgIGlmICghbV91bmNvbW1pdHRlZENo
YW5nZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9H
cmFwaGljc0xheWVyQ0EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dy
YXBoaWNzTGF5ZXJDQS5oCmluZGV4IGU1ZmJkZjk1MzU2OGJmMDZhMWFjMGQ2OWRkZTE2NWU4MDJh
YmVkYTcuLmU5ZGNkYTEwM2JkMTM2YWFlMGRlMzUzNzFiYTgzM2M4OWIyYThkNjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5oCkBAIC0xNTcsNiArMTU3LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgcGxhdGZv
cm1DQUxheWVyQ29udGVudHNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBjb250ZW50c09wYXF1ZSgp
OyB9CiAgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXllckRyYXdzQ29udGVudCgpIGNvbnN0
IHsgcmV0dXJuIGRyYXdzQ29udGVudCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FM
YXllckxheWVyRGlkRGlzcGxheShQbGF0Zm9ybUxheWVyKiBsYXllcikgeyByZXR1cm4gbGF5ZXJE
aWREaXNwbGF5KGxheWVyKTsgfQorICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJEaWRD
cmVhdGVUaWxlcygpIG92ZXJyaWRlOwogCiAgICAgdm9pZCB1cGRhdGVPcGFjaXR5T25MYXllcigp
OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
UGxhdGZvcm1DQUxheWVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9QbGF0Zm9ybUNBTGF5ZXJDbGllbnQuaAppbmRleCBhZTE4MTVjMGJhYjMyZTM3YTQ0NzRm
NWVmZDIzMmM2NDVlODExNmY4Li5iZThlNDU5ZDgxNmQ1ZjIzNjc1NWY4MTQwNjkzNDdkYjg3ZmUx
YzI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0
Zm9ybUNBTGF5ZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9QbGF0Zm9ybUNBTGF5ZXJDbGllbnQuaApAQCAtNTksNiArNTksOCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXllckRyYXdzQ29udGVudCgpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyTGF5ZXJEaWREaXNwbGF5KFBsYXRmb3Jt
TGF5ZXIqKSA9IDA7CiAKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyRGlkQ3JlYXRl
VGlsZXMoKSA9IDA7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5QbGF0Zm9ybUNBTGF5ZXJD
bGllbnQoKSB7fQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL21hYy9UaWxlQ2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL21hYy9UaWxlQ2FjaGUuaAppbmRleCA2YmQ2YmJiM2NmNDdjOWFmNDNkOGZkNTFhODJlMjNi
OTcxOTUxNWFhLi4yYzI5MGU1MDAwYzM1NTBmMGFkMGMyYzYzODg5MWEwZjhhOTBkYTA5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNhY2hl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDYWNo
ZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJJbnRQb2ludEhhc2guaCIKICNpbmNs
dWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CkBAIC03MywxMiArNzQsMTQgQEAgcHJpdmF0ZToKICAgICBUaWxlQ2FjaGUoV2ViVGls
ZUNhY2hlTGF5ZXIqLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSk7CiAKICAgICBGbG9hdFJlY3Qg
dmlzaWJsZVJlY3QoKSBjb25zdDsKLQogICAgIEludFJlY3QgYm91bmRzKCkgY29uc3Q7CisKKyAg
ICBJbnRSZWN0IHJlY3RGb3JUaWxlSW5kZXgoY29uc3QgVGlsZUluZGV4JikgY29uc3Q7CiAgICAg
dm9pZCBnZXRUaWxlSW5kZXhSYW5nZUZvclJlY3QoY29uc3QgSW50UmVjdCYsIFRpbGVJbmRleCYg
dG9wTGVmdCwgVGlsZUluZGV4JiBib3R0b21SaWdodCk7CiAKLSAgICBJbnRTaXplIG51bVRpbGVz
Rm9yR3JpZFNpemUoY29uc3QgSW50U2l6ZSYpIGNvbnN0OwotICAgIHZvaWQgcmVzaXplVGlsZUdy
aWQoY29uc3QgSW50U2l6ZSYgbnVtVGlsZXMpOworICAgIHZvaWQgc2NoZWR1bGVUaWxlUmV2YWxp
ZGF0aW9uKCk7CisgICAgdm9pZCB0aWxlUmV2YWxpZGF0aW9uVGltZXJGaXJlZChUaW1lcjxUaWxl
Q2FjaGU+Kik7CisgICAgdm9pZCByZXZhbGlkYXRlVGlsZXMoKTsKIAogICAgIFdlYlRpbGVMYXll
ciogdGlsZUxheWVyQXRJbmRleChjb25zdCBUaWxlSW5kZXgmKSBjb25zdDsKICAgICBSZXRhaW5Q
dHI8V2ViVGlsZUxheWVyPiBjcmVhdGVUaWxlTGF5ZXIoKTsKQEAgLTg5LDExICs5Miw5IEBAIHBy
aXZhdGU6CiAgICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fdGlsZUNvbnRhaW5lckxheWVyOwogICAg
IGNvbnN0IEludFNpemUgbV90aWxlU2l6ZTsKIAotICAgIC8vIE51bWJlciBvZiB0aWxlcyBpbiBl
YWNoIGRpbWVuc2lvbi4KLSAgICBJbnRTaXplIG1fbnVtVGlsZXNJbkdyaWQ7Ci0KICAgICB0eXBl
ZGVmIEhhc2hNYXA8VGlsZUluZGV4LCBSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiA+IFRpbGVNYXA7
CiAgICAgVGlsZU1hcCBtX3RpbGVzOworICAgIFRpbWVyPFRpbGVDYWNoZT4gbV90aWxlUmV2YWxp
ZGF0aW9uVGltZXI7CiAKICAgICBib29sIG1fYWNjZWxlcmF0ZXNEcmF3aW5nOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNhY2hlLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDYWNoZS5tbQpp
bmRleCAwOGQ5MTE1MGVhYTMzYTg0NmZhMmEyZDZmMjQ2MzI1MjY4ZTNkMGI4Li41ZjBhMGNlYmM3
NjM0OGZlYzhiYTcyYzEyZTQ2NmY2MjFjMjkwMjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNhY2hlLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ2FjaGUubW0KQEAgLTUyLDYgKzUyLDcg
QEAgVGlsZUNhY2hlOjpUaWxlQ2FjaGUoV2ViVGlsZUNhY2hlTGF5ZXIqIHRpbGVDYWNoZUxheWVy
LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSkKICAgICA6IG1fdGlsZUNhY2hlTGF5ZXIodGlsZUNh
Y2hlTGF5ZXIpCiAgICAgLCBtX3RpbGVDb250YWluZXJMYXllcihhZG9wdENGKFtbQ0FMYXllciBh
bGxvY10gaW5pdF0pKQogICAgICwgbV90aWxlU2l6ZSh0aWxlU2l6ZSkKKyAgICAsIG1fdGlsZVJl
dmFsaWRhdGlvblRpbWVyKHRoaXMsICZUaWxlQ2FjaGU6OnRpbGVSZXZhbGlkYXRpb25UaW1lckZp
cmVkKQogICAgICwgbV9hY2NlbGVyYXRlc0RyYXdpbmcoZmFsc2UpCiAgICAgLCBtX3RpbGVEZWJ1
Z0JvcmRlcldpZHRoKDApCiB7CkBAIC02MywxMSArNjQsMTQgQEAgVGlsZUNhY2hlOjpUaWxlQ2Fj
aGUoV2ViVGlsZUNhY2hlTGF5ZXIqIHRpbGVDYWNoZUxheWVyLCBjb25zdCBJbnRTaXplJiB0aWxl
U2l6ZSkKIAogdm9pZCBUaWxlQ2FjaGU6OnRpbGVDYWNoZUxheWVyQm91bmRzQ2hhbmdlZCgpCiB7
Ci0gICAgSW50U2l6ZSBudW1UaWxlc0luR3JpZCA9IG51bVRpbGVzRm9yR3JpZFNpemUoYm91bmRz
KCkuc2l6ZSgpKTsKLSAgICBpZiAobnVtVGlsZXNJbkdyaWQgPT0gbV9udW1UaWxlc0luR3JpZCkK
KyAgICBpZiAobV90aWxlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gUmV2YWxpZGF0ZSB0aGUg
dGlsZXMgcmlnaHQgYXdheSBpZiB3ZSBkb24ndCBoYXZlIGFueS4gVGhpcyBhdm9pZHMKKyAgICAg
ICAgLy8gZmxhc2hpbmcgd2hlbiB0cmFuc2l0aW9uaW5nIGZyb20gb25lIHBhZ2UgdG8gYW5vdGhl
ci4KKyAgICAgICAgcmV2YWxpZGF0ZVRpbGVzKCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAK
LSAgICByZXNpemVUaWxlR3JpZChudW1UaWxlc0luR3JpZCk7CisgICAgc2NoZWR1bGVUaWxlUmV2
YWxpZGF0aW9uKCk7CiB9CiAKIHZvaWQgVGlsZUNhY2hlOjpzZXROZWVkc0Rpc3BsYXkoKQpAQCAt
NzcsNyArODEsNyBAQCB2b2lkIFRpbGVDYWNoZTo6c2V0TmVlZHNEaXNwbGF5KCkKIAogdm9pZCBU
aWxlQ2FjaGU6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewot
ICAgIGlmIChtX251bVRpbGVzSW5HcmlkLmlzWmVybygpKQorICAgIGlmIChtX3RpbGVzLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRmluZCB0aGUgdGlsZXMgdGhhdCBuZWVk
IHRvIGJlIGludmFsaWRhdGVkLgpAQCAtMTY5LDcgKzE3Myw3IEBAIHZvaWQgVGlsZUNhY2hlOjpz
ZXRBY2NlbGVyYXRlc0RyYXdpbmcoYm9vbCBhY2NlbGVyYXRlc0RyYXdpbmcpCiAKIHZvaWQgVGls
ZUNhY2hlOjp2aXNpYmxlUmVjdENoYW5nZWQoKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQu
CisgICAgc2NoZWR1bGVUaWxlUmV2YWxpZGF0aW9uKCk7CiB9CiAKIHZvaWQgVGlsZUNhY2hlOjpz
ZXRUaWxlRGVidWdCb3JkZXJXaWR0aChmbG9hdCBib3JkZXJXaWR0aCkKQEAgLTIxOSw2MCArMjIz
LDEwMCBAQCBJbnRSZWN0IFRpbGVDYWNoZTo6Ym91bmRzKCkgY29uc3QKICAgICByZXR1cm4gSW50
UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKFttX3RpbGVDYWNoZUxheWVyIGJvdW5kc10uc2l6ZSkp
OwogfQogCitJbnRSZWN0IFRpbGVDYWNoZTo6cmVjdEZvclRpbGVJbmRleChjb25zdCBUaWxlSW5k
ZXgmIHRpbGVJbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCh0aWxl
SW5kZXgueCgpICogbV90aWxlU2l6ZS53aWR0aCgpLCB0aWxlSW5kZXgueSgpICogbV90aWxlU2l6
ZS5oZWlnaHQoKSksIG1fdGlsZVNpemUpOworfQorCiB2b2lkIFRpbGVDYWNoZTo6Z2V0VGlsZUlu
ZGV4UmFuZ2VGb3JSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIFRpbGVJbmRleCYgdG9wTGVmdCwg
VGlsZUluZGV4JiBib3R0b21SaWdodCkKIHsKLSAgICB0b3BMZWZ0LnNldFgobWF4KHJlY3QueCgp
IC8gbV90aWxlU2l6ZS53aWR0aCgpLCAwKSk7Ci0gICAgdG9wTGVmdC5zZXRZKG1heChyZWN0Lnko
KSAvIG1fdGlsZVNpemUuaGVpZ2h0KCksIDApKTsKLSAgICBib3R0b21SaWdodC5zZXRYKG1pbihy
ZWN0Lm1heFgoKSAvIG1fdGlsZVNpemUud2lkdGgoKSwgbV9udW1UaWxlc0luR3JpZC53aWR0aCgp
IC0gMSkpOwotICAgIGJvdHRvbVJpZ2h0LnNldFkobWluKHJlY3QubWF4WSgpIC8gbV90aWxlU2l6
ZS5oZWlnaHQoKSwgbV9udW1UaWxlc0luR3JpZC5oZWlnaHQoKSAtIDEpKTsKKyAgICBJbnRSZWN0
IGNsYW1wZWRSZWN0ID0gaW50ZXJzZWN0aW9uKHJlY3QsIGJvdW5kcygpKTsKKworICAgIHRvcExl
ZnQuc2V0WChtYXgoY2xhbXBlZFJlY3QueCgpIC8gbV90aWxlU2l6ZS53aWR0aCgpLCAwKSk7Cisg
ICAgdG9wTGVmdC5zZXRZKG1heChjbGFtcGVkUmVjdC55KCkgLyBtX3RpbGVTaXplLmhlaWdodCgp
LCAwKSk7CisgICAgYm90dG9tUmlnaHQuc2V0WChtYXgoY2xhbXBlZFJlY3QubWF4WCgpIC8gbV90
aWxlU2l6ZS53aWR0aCgpLCAwKSk7CisgICAgYm90dG9tUmlnaHQuc2V0WShtYXgoY2xhbXBlZFJl
Y3QubWF4WSgpIC8gbV90aWxlU2l6ZS5oZWlnaHQoKSwgMCkpOwogfQogCi1JbnRTaXplIFRpbGVD
YWNoZTo6bnVtVGlsZXNGb3JHcmlkU2l6ZShjb25zdCBJbnRTaXplJiBncmlkU2l6ZSkgY29uc3QK
K3ZvaWQgVGlsZUNhY2hlOjpzY2hlZHVsZVRpbGVSZXZhbGlkYXRpb24oKQogewotICAgIGludCBu
dW1YVGlsZXMgPSBjZWlsKHN0YXRpY19jYXN0PGRvdWJsZT4oZ3JpZFNpemUud2lkdGgoKSkgLyBt
X3RpbGVTaXplLndpZHRoKCkpOwotICAgIGludCBudW1ZVGlsZXMgPSBjZWlsKHN0YXRpY19jYXN0
PGRvdWJsZT4oZ3JpZFNpemUuaGVpZ2h0KCkpIC8gbV90aWxlU2l6ZS5oZWlnaHQoKSk7CisgICAg
aWYgKG1fdGlsZVJldmFsaWRhdGlvblRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsK
IAotICAgIHJldHVybiBJbnRTaXplKG51bVhUaWxlcywgbnVtWVRpbGVzKTsKKyAgICBtX3RpbGVS
ZXZhbGlkYXRpb25UaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKLXZvaWQgVGlsZUNhY2hlOjpy
ZXNpemVUaWxlR3JpZChjb25zdCBJbnRTaXplJiBudW1UaWxlc0luR3JpZCkKK3ZvaWQgVGlsZUNh
Y2hlOjp0aWxlUmV2YWxpZGF0aW9uVGltZXJGaXJlZChUaW1lcjxUaWxlQ2FjaGU+KikKIHsKLSAg
ICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFj
dGlvbnM6WUVTXTsKKyAgICByZXZhbGlkYXRlVGlsZXMoKTsKK30KIAotICAgIFJldGFpblB0cjxO
U011dGFibGVBcnJheT4gbmV3U3VibGF5ZXJzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0V2l0aENhcGFjaXR5Om51bVRpbGVzSW5HcmlkLndpZHRoKCkgKiBudW1UaWxlc0lu
R3JpZC5oZWlnaHQoKV0pOwordm9pZCBUaWxlQ2FjaGU6OnJldmFsaWRhdGVUaWxlcygpCit7Cisg
ICAgSW50UmVjdCB0aWxlQ292ZXJhZ2VSZWN0ID0gZW5jbG9zaW5nSW50UmVjdCh2aXNpYmxlUmVj
dCgpKTsKKyAgICBpZiAodGlsZUNvdmVyYWdlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHRoZSBvcHRpbWFsIHZhbHVlcyBoZXJlLgor
ICAgIHRpbGVDb3ZlcmFnZVJlY3QuaW5mbGF0ZVgodGlsZUNvdmVyYWdlUmVjdC53aWR0aCgpIC8g
Mik7CisgICAgdGlsZUNvdmVyYWdlUmVjdC5pbmZsYXRlWSh0aWxlQ292ZXJhZ2VSZWN0LmhlaWdo
dCgpICogMik7CisKKyAgICBWZWN0b3I8VGlsZUluZGV4PiB0aWxlc1RvUmVtb3ZlOwogCi0gICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBudW1UaWxlc0luR3JpZC5oZWlnaHQoKTsgKyt5KSB7Ci0gICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtVGlsZXNJbkdyaWQud2lkdGgoKTsgKyt4KSB7Ci0g
ICAgICAgICAgICBSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiB0aWxlTGF5ZXI7CisgICAgZm9yIChU
aWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQo
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGNvbnN0IFRpbGVJbmRleCYgdGlsZUluZGV4
ID0gaXQtPmZpcnN0OwogCi0gICAgICAgICAgICBpZiAoeCA8IG1fbnVtVGlsZXNJbkdyaWQud2lk
dGgoKSAmJiB5IDwgbV9udW1UaWxlc0luR3JpZC5oZWlnaHQoKSkgewotICAgICAgICAgICAgICAg
IC8vIFdlIGNhbiByZXVzZSB0aGUgdGlsZSBsYXllciBhdCB0aGlzIGluZGV4LgotICAgICAgICAg
ICAgICAgIHRpbGVMYXllciA9IHRpbGVMYXllckF0SW5kZXgoVGlsZUluZGV4KHgsIHkpKTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGlsZUxheWVyID0gY3JlYXRlVGls
ZUxheWVyKCk7Ci0gICAgICAgICAgICAgICAgbV90aWxlcy5zZXQoVGlsZUluZGV4KHgsIHkpLCB0
aWxlTGF5ZXIuZ2V0KCkpOworICAgICAgICBXZWJUaWxlTGF5ZXIqIHRpbGVMYXllciA9IGl0LT5z
ZWNvbmQuZ2V0KCk7CisKKyAgICAgICAgaWYgKCFyZWN0Rm9yVGlsZUluZGV4KHRpbGVJbmRleCku
aW50ZXJzZWN0cyh0aWxlQ292ZXJhZ2VSZWN0KSkgeworICAgICAgICAgICAgLy8gUmVtb3ZlIHRo
aXMgbGF5ZXIuCisgICAgICAgICAgICBbdGlsZUxheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsK
KyAgICAgICAgICAgIFt0aWxlTGF5ZXIgc2V0VGlsZUNhY2hlOjBdOworCisgICAgICAgICAgICB0
aWxlc1RvUmVtb3ZlLmFwcGVuZCh0aWxlSW5kZXgpOworICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gRklYTUU6IEJlIG1vcmUgY2xldmVyIGFib3V0IHdoaWNoIHRpbGVzIHRvIHJlbW92ZS4KKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVzVG9SZW1vdmUuc2l6ZSgpOyArK2kpCisgICAg
ICAgIG1fdGlsZXMucmVtb3ZlKHRpbGVzVG9SZW1vdmVbaV0pOworCisgICAgVGlsZUluZGV4IHRv
cExlZnQ7CisgICAgVGlsZUluZGV4IGJvdHRvbVJpZ2h0OworICAgIGdldFRpbGVJbmRleFJhbmdl
Rm9yUmVjdCh0aWxlQ292ZXJhZ2VSZWN0LCB0b3BMZWZ0LCBib3R0b21SaWdodCk7CisKKyAgICBi
b29sIGRpZENyZWF0ZU5ld1RpbGVzID0gZmFsc2U7CisKKyAgICBmb3IgKGludCB5ID0gdG9wTGVm
dC55KCk7IHkgPD0gYm90dG9tUmlnaHQueSgpOyArK3kpIHsKKyAgICAgICAgZm9yIChpbnQgeCA9
IHRvcExlZnQueCgpOyB4IDw9IGJvdHRvbVJpZ2h0LngoKTsgKyt4KSB7CisgICAgICAgICAgICBU
aWxlSW5kZXggdGlsZUluZGV4KHgsIHkpOworCisgICAgICAgICAgICBwYWlyPFRpbGVNYXA6Oml0
ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX3RpbGVzLmFkZCh0aWxlSW5kZXgsIDApOworICAgICAg
ICAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgICAgICAgICAgLy8gV2UgYWxyZWFk
eSBoYXZlIGEgbGF5ZXIgZm9yIHRoaXMgdGlsZS4KKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgZGlkQ3JlYXRlTmV3VGlsZXMgPSB0cnVlOwor
CisgICAgICAgICAgICBSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiB0aWxlTGF5ZXIgPSBjcmVhdGVU
aWxlTGF5ZXIoKTsKKyAgICAgICAgICAgIHJlc3VsdC5maXJzdC0+c2Vjb25kID0gdGlsZUxheWVy
LmdldCgpOworCisgICAgICAgICAgICBbdGlsZUxheWVyLmdldCgpIHNldE5lZWRzRGlzcGxheV07
CiAgICAgICAgICAgICBbdGlsZUxheWVyLmdldCgpIHNldFBvc2l0aW9uOkNHUG9pbnRNYWtlKHgg
KiBtX3RpbGVTaXplLndpZHRoKCksIHkgKiBtX3RpbGVTaXplLmhlaWdodCgpKV07Ci0gICAgICAg
ICAgICBbbmV3U3VibGF5ZXJzLmdldCgpIGFkZE9iamVjdDp0aWxlTGF5ZXIuZ2V0KCldOworICAg
ICAgICAgICAgW21fdGlsZUNvbnRhaW5lckxheWVyLmdldCgpIGFkZFN1YmxheWVyOnRpbGVMYXll
ci5nZXQoKV07CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBGSVhNRTogTWFrZSBzdXJlIHRv
IGNhbGwgc2V0VGlsZUNhY2hlOjAgb24gdGhlIGxheWVycyB0aGF0IGdldCB0aHJvd24gYXdheSBo
ZXJlLgotICAgIFttX3RpbGVDb250YWluZXJMYXllci5nZXQoKSBzZXRTdWJsYXllcnM6bmV3U3Vi
bGF5ZXJzLmdldCgpXTsKLSAgICBtX251bVRpbGVzSW5HcmlkID0gbnVtVGlsZXNJbkdyaWQ7Cisg
ICAgaWYgKCFkaWRDcmVhdGVOZXdUaWxlcykKKyAgICAgICAgcmV0dXJuOwogCi0gICAgW0NBVHJh
bnNhY3Rpb24gY29tbWl0XTsKKyAgICBQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIgPSBQ
bGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllcihtX3RpbGVDYWNoZUxheWVyKTsKKyAgICBw
bGF0Zm9ybUxheWVyLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJEaWRDcmVhdGVUaWxlcygpOwog
fQogCiBXZWJUaWxlTGF5ZXIqIFRpbGVDYWNoZTo6dGlsZUxheWVyQXRJbmRleChjb25zdCBUaWxl
SW5kZXgmIGluZGV4KSBjb25zdAogewotICAgIEFTU0VSVChpbmRleC54KCkgPj0gMCk7Ci0gICAg
QVNTRVJUKGluZGV4LngoKSA8PSBtX251bVRpbGVzSW5HcmlkLndpZHRoKCkpOwotICAgIEFTU0VS
VChpbmRleC55KCkgPj0gMCk7Ci0gICAgQVNTRVJUKGluZGV4LnkoKSA8PSBtX251bVRpbGVzSW5H
cmlkLmhlaWdodCgpKTsKLQogICAgIHJldHVybiBtX3RpbGVzLmdldChpbmRleCkuZ2V0KCk7CiB9
CiAK
</data>
<flag name="review"
          id="126373"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>