<?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>132786</bug_id>
          
          <creation_ts>2014-05-10 15:09:19 -0700</creation_ts>
          <short_desc>Triple-buffer RemoteLayerBackingStore</short_desc>
          <delta_ts>2014-05-12 16:32:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>psolanki</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1008310</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-05-10 15:09:19 -0700</bug_when>
    <thetext>From one... to two... to three.

We need three buffers because we&apos;re currently unable to synchronize with the render server to swap when they&apos;re not in use, so we end up throwing surfaces away and wasting expensive work (and deleting them is not free, either!). The pool helps, but not enough (the pool is much more useful for e.g. layers that come and go, like tiles while scrolling).

We&apos;ll try to keep them purgeable as much as possible so that the memory hit is not significant (but, this should also match CA when painting repeatedly).

This is a three-orders-of-magnitude reduction in time spent in IOSurface::create on http://www.kevs3d.co.uk/dev/canvasmark/...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1008311</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-05-10 15:09:58 -0700</bug_when>
    <thetext>&lt;rdar://problem/16877498&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1008495</commentid>
    <comment_count>2</comment_count>
      <attachid>231275</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-05-12 00:22:47 -0700</bug_when>
    <thetext>Created attachment 231275
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1008496</commentid>
    <comment_count>3</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-05-12 00:23:15 -0700</bug_when>
    <thetext>Need to build mac and sim to make sure I haven&apos;t broken anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1008497</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-05-12 00:24:40 -0700</bug_when>
    <thetext>Attachment 231275 did not pass style-queue:


ERROR: Source/WebKit2/Shared/mac/RemoteLayerBackingStore.h:92:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1008768</commentid>
    <comment_count>5</comment_count>
      <attachid>231275</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-05-12 16:02:18 -0700</bug_when>
    <thetext>Comment on attachment 231275
patch

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

&gt; Source/WebKit2/Shared/mac/RemoteLayerBackingStore.mm:403
&gt; +    if (type == BufferType::Front &amp;&amp; m_frontBuffer.surface &amp;&amp; m_frontBuffer.isVolatile != isVolatile) {
&gt; +        if (!isVolatile || !m_frontBuffer.surface-&gt;isInUse()) {
&gt; +            IOSurface::SurfaceState previousState = m_frontBuffer.surface-&gt;setIsVolatile(isVolatile);
&gt; +            m_frontBuffer.isVolatile = isVolatile;
&gt; +
&gt; +            // Becoming non-volatile and the front buffer was purged, so we need to repaint.
&gt; +            if (!isVolatile &amp;&amp; (previousState == IOSurface::SurfaceState::Empty))
&gt; +                setNeedsDisplay();
&gt; +        } else
&gt; +            return false;
&gt; +    } else if (type == BufferType::Back &amp;&amp; m_backBuffer.surface &amp;&amp; m_backBuffer.isVolatile != isVolatile) {
&gt; +        if (!isVolatile || !m_backBuffer.surface-&gt;isInUse()) {
&gt; +            m_backBuffer.surface-&gt;setIsVolatile(isVolatile);
&gt; +            m_backBuffer.isVolatile = isVolatile;
&gt; +        } else
&gt; +            return false;
&gt; +    } else if (type == BufferType::SecondaryBack &amp;&amp; m_secondaryBackBuffer.surface &amp;&amp; m_secondaryBackBuffer.isVolatile != isVolatile) {
&gt; +        if (!isVolatile || !m_secondaryBackBuffer.surface-&gt;isInUse()) {
&gt; +            m_secondaryBackBuffer.surface-&gt;setIsVolatile(isVolatile);
&gt; +            m_secondaryBackBuffer.isVolatile = isVolatile;
&gt; +        } else
&gt; +            return false;

This logic is pretty confusing. Can you convert this to a switch(type)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1008783</commentid>
    <comment_count>6</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-05-12 16:32:47 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/168657</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231275</attachid>
            <date>2014-05-12 00:22:47 -0700</date>
            <delta_ts>2014-05-12 16:02:18 -0700</delta_ts>
            <desc>patch</desc>
            <filename>triple.diff</filename>
            <type>text/plain</type>
            <size>17144</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBkNDFmMThiLi5iM2YwZDAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIg
QEAKKzIwMTQtMDUtMTEgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgVHJpcGxlLWJ1ZmZlciBSZW1vdGVMYXllckJhY2tpbmdTdG9yZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMyNzg2CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS8xNjg3NzQ5OD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBXZSBuZWVkIHRocmVlIGJ1ZmZlcnMgYmVjYXVzZSB3ZSdyZSBjdXJy
ZW50bHkgdW5hYmxlIHRvIHN5bmNocm9uaXplCisgICAgICAgIHdpdGggdGhlIHJlbmRlciBzZXJ2
ZXIgdG8gc3dhcCB3aGVuIHRoZXkncmUgbm90IGluIHVzZSwgc28gd2Ugd2VyZQorICAgICAgICB0
aHJvd2luZyBzdXJmYWNlcyBhd2F5IGZhciB0b28gZnJlcXVlbnRseS4KKworICAgICAgICBUaGlz
IGh1Z2VseSByZWR1Y2VzIHRpbWUgc3BlbnQgaW4gSU9TdXJmYWNlOjpjcmVhdGUgb24gdmFyaW91
cyByZXBhaW50IGJlbmNobWFya3MuCisKKyAgICAgICAgKiBTaGFyZWQvbWFjL1JlbW90ZUxheWVy
QmFja2luZ1N0b3JlLmg6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyQmFja2luZ1N0b3Jl
OjpoYXNGcm9udEJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyQmFja2luZ1N0
b3JlOjp2b2xhdGlsaXR5KTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvbWFjL1JlbW90ZUxh
eWVyQmFja2luZ1N0b3JlLm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllckJhY2tpbmdT
dG9yZTo6UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVM
YXllckJhY2tpbmdTdG9yZTo6Y2xlYXJCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
TGF5ZXJCYWNraW5nU3RvcmU6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVy
QmFja2luZ1N0b3JlOjpzd2FwVG9WYWxpZEZyb250QnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OmRpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVMYXllckJhY2tpbmdTdG9yZTo6YXBwbHlCYWNraW5nU3RvcmVUb0xheWVyKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OnNldEJ1ZmZlclZvbGF0aWxpdHkpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6QnVmZmVyOjpkaXNjYXJk
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OnNldFZvbGF0aWxp
dHkpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3Rv
cmVDb2xsZWN0aW9uLm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllckJhY2tpbmdTdG9y
ZUNvbGxlY3Rpb246OnB1cmdlYWJpbGl0eVRpbWVyRmlyZWQpOgorICAgICAgICBQdXQgdGhlIFNo
YXJlYWJsZUJpdG1hcC9JT1N1cmZhY2UgYW5kIGEgdm9sYXRpbGl0eSBiaXQgaW4gYSBCdWZmZXIg
c3RydWN0LgorICAgICAgICBBbHNvIGZhY3RvciBvdXQgInRocm93IGF3YXkgdGhpcyBidWZmZXIg
YW5kIHB1dCBpdCBpbiB0aGUgcG9vbCIgaW50byBCdWZmZXI6OmRpc2NhcmQoKS4KKyAgICAgICAg
V2Uga2VlcCBhIHZvbGF0aWxpdHkgYml0IGJlY2F1c2UgcXVlcnlpbmcgSU9TdXJmYWNlIHB1cmdl
YWJpbGl0eSBpcyBleHBlbnNpdmUsCisgICAgICAgIGFuZCB3ZSBoYXZlIGEgZ3VhcmFudGVlIHRo
YXQgYW55IGNoYW5nZXMgd2lsbCBoYXBwZW4gaW4gdGhlIFdlYiBwcm9jZXNzCisgICAgICAgIGFu
ZCBnbyB0aHJvdWdoIHRoaXMgY2xhc3MgKHRoZSBsYWNrIG9mIHRoaXMgZ3VhcmFudGVlIGluIG1v
c3QgY2FzZXMgaXMgd2h5IEknbSBub3QKKyAgICAgICAgcHV0dGluZyB0aGlzIGJpdCBpbiBXZWJD
b3JlOjpJT1N1cmZhY2UgaXRzZWxmKS4KKworICAgICAgICBNYWtlIGl0IHNvIHRoYXQgZWFjaCBi
dWZmZXIncyB2b2xhdGlsaXR5IGNhbiBiZSBhZGp1c3RlZCBpbmRpdmlkdWFsbHkKKyAgICAgICAg
Ynkgc2V0QnVmZmVyVm9sYXRpbGl0eSgpLCBhbmQgYWRvcHQgaW4gUmVtb3RlTGF5ZXJCYWNraW5n
U3RvcmVDb2xsZWN0aW9uLgorCisgICAgICAgIEFkZCBhIHRoaXJkIGJ1ZmZlciwgbV9zZWNvbmRh
cnlCYWNrQnVmZmVyLCB3aGljaCB3aWxsIHN3YXAgd2l0aCB0aGUgYmFjayBidWZmZXIKKyAgICAg
ICAgYmVmb3JlIHN3YXBwaW5nIGZyb250IGFuZCBiYWNrIGlmIHRoZSBiYWNrIGJ1ZmZlciAoc29v
biB0byBiZSB0aGUgZnJvbnQgYnVmZmVyKQorICAgICAgICBpcyBzdGlsbCBpbiB1c2UgYnkgdGhl
IHJlbmRlciBzZXJ2ZXIuIFRoaXMgbWVhbnMgdGhhdCB3ZSB3aWxsIGFsbW9zdCBuZXZlcgorICAg
ICAgICBoYXZlIHRvIHRocm93IGF3YXkgYSBzdXJmYWNlIGJlY2F1c2UgaXQncyBpbiB1c2UgKGFu
ZCBjb252ZXJzZWx5IG5ldmVyIG5lZWQKKyAgICAgICAgdG8gbWFrZSBhIG5ldyBzdXJmYWNlKS4K
KworICAgICAgICBBZGp1c3QgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uIHRvIG1h
a2Ugc2Vjb25kYXJ5IGJhY2sgc3VyZmFjZXMgcHVyZ2VhYmxlCisgICAgICAgIG1vcmUgYWdncmVz
c2l2ZWx5IHRoYW4gb3RoZXJzLgorCiAyMDE0LTA1LTEwICBUaW0gSG9ydG9uICA8dGltb3RoeV9o
b3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFtXS1dlYlZpZXcgX3VwZGF0ZVNjcm9sbFZpZXdC
YWNrZ3JvdW5kXSBjaHVybnMgVUktYW5kLUNHQ29sb3JzIHdoaWxlIHJlcGFpbnRpbmcKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUu
aCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUuaApp
bmRleCBkYzBkMDU5Li5mYTdkYjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oCkBAIC03NiwyNyArNzYsMjcgQEAgcHVibGlj
OgogICAgIHsKICNpZiBVU0UoSU9TVVJGQUNFKQogICAgICAgICBpZiAobV9hY2NlbGVyYXRlc0Ry
YXdpbmcpCi0gICAgICAgICAgICByZXR1cm4gISFtX2Zyb250U3VyZmFjZTsKKyAgICAgICAgICAg
IHJldHVybiAhIW1fZnJvbnRCdWZmZXIuc3VyZmFjZTsKICNlbmRpZgotICAgICAgICByZXR1cm4g
ISFtX2Zyb250QnVmZmVyOworICAgICAgICByZXR1cm4gISFtX2Zyb250QnVmZmVyLmJpdG1hcDsK
ICAgICB9CiAKICAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiB0YWtlRnJvbnRDb250ZXh0UGVu
ZGluZ0ZsdXNoKCk7CiAKLSAgICBlbnVtIGNsYXNzIFZvbGF0aWxpdHkgewotICAgICAgICBOb25W
b2xhdGlsZSwKLSAgICAgICAgQmFja0J1ZmZlclZvbGF0aWxlLAotICAgICAgICBBbGxCdWZmZXJz
Vm9sYXRpbGUKKyAgICBlbnVtIGNsYXNzIEJ1ZmZlclR5cGUgeworICAgICAgICBGcm9udCwKKyAg
ICAgICAgQmFjaywKKyAgICAgICAgU2Vjb25kYXJ5QmFjawogICAgIH07CiAKLSAgICBWb2xhdGls
aXR5IHZvbGF0aWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3ZvbGF0aWxpdHk7IH0KLSAgICBib29s
IHNldFZvbGF0aWxpdHkoVm9sYXRpbGl0eSk7CisgICAgYm9vbCBzZXRCdWZmZXJWb2xhdGlsaXR5
KEJ1ZmZlclR5cGUgdHlwZSwgYm9vbCBpc1ZvbGF0aWxlKTsKIAogICAgIHN0ZDo6Y2hyb25vOjpz
dGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgbGFzdERpc3BsYXlUaW1lKCkgY29uc3QgeyByZXR1cm4g
bV9sYXN0RGlzcGxheVRpbWU7IH0KIAogcHJpdmF0ZToKICAgICB2b2lkIGRyYXdJbkNvbnRleHQo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgQ0dJbWFnZVJlZiBiYWNrSW1hZ2UpOwogICAgIHZv
aWQgY2xlYXJCYWNraW5nU3RvcmUoKTsKKyAgICB2b2lkIHN3YXBUb1ZhbGlkRnJvbnRCdWZmZXIo
KTsKIAogICAgIFBsYXRmb3JtQ0FMYXllclJlbW90ZSogbV9sYXllcjsKIApAQCAtMTA2LDE5ICsx
MDYsMjYgQEAgcHJpdmF0ZToKIAogICAgIFdlYkNvcmU6OlJlZ2lvbiBtX2RpcnR5UmVnaW9uOwog
Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gbV9mcm9udEJ1ZmZlcjsKLSAgICBSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiBtX2JhY2tCdWZmZXI7CisgICAgc3RydWN0IEJ1ZmZlciB7CisgICAg
ICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcDsKICNpZiBVU0UoSU9TVVJGQUNFKQot
ICAgIFJlZlB0cjxXZWJDb3JlOjpJT1N1cmZhY2U+IG1fZnJvbnRTdXJmYWNlOwotICAgIFJlZlB0
cjxXZWJDb3JlOjpJT1N1cmZhY2U+IG1fYmFja1N1cmZhY2U7CisgICAgICAgIFJlZlB0cjxXZWJD
b3JlOjpJT1N1cmZhY2U+IHN1cmZhY2U7CisgICAgICAgIGJvb2wgaXNWb2xhdGlsZSA9IGZhbHNl
OworI2VuZGlmCisKKyAgICAgICAgdm9pZCBkaXNjYXJkKCk7CisgICAgfTsKKworICAgIEJ1ZmZl
ciBtX2Zyb250QnVmZmVyOworICAgIEJ1ZmZlciBtX2JhY2tCdWZmZXI7CisjaWYgVVNFKElPU1VS
RkFDRSkKKyAgICBCdWZmZXIgbV9zZWNvbmRhcnlCYWNrQnVmZmVyOwogI2VuZGlmCiAKICAgICBS
ZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBtX2Zyb250Q29udGV4dFBlbmRpbmdGbHVzaDsKIAogICAg
IGJvb2wgbV9hY2NlbGVyYXRlc0RyYXdpbmc7CiAKLSAgICBWb2xhdGlsaXR5IG1fdm9sYXRpbGl0
eTsKLQogICAgIFdlYkNvcmU6OlJlcGFpbnRSZWN0TGlzdCBtX3BhaW50aW5nUmVjdHM7CiAKICAg
ICBSZW1vdGVMYXllclRyZWVDb250ZXh0KiBtX2NvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQppbmRleCAxM2Q1MGIw
Li5mNmVkM2JhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxh
eWVyQmFja2luZ1N0b3JlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3Rl
TGF5ZXJCYWNraW5nU3RvcmUubW0KQEAgLTU4LDcgKzU4LDYgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUoUmVtb3Rl
TGF5ZXJUcmVlQ29udGV4dCogY29udGV4dCkKICAgICA6IG1fbGF5ZXIobnVsbHB0cikKICAgICAs
IG1faXNPcGFxdWUoZmFsc2UpCi0gICAgLCBtX3ZvbGF0aWxpdHkoUmVtb3RlTGF5ZXJCYWNraW5n
U3RvcmU6OlZvbGF0aWxpdHk6Ok5vblZvbGF0aWxlKQogICAgICwgbV9jb250ZXh0KGNvbnRleHQp
CiAgICAgLCBtX2xhc3REaXNwbGF5VGltZShzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1l
X3BvaW50OjptaW4oKSkKIHsKQEAgLTkwLDE3ICs4OSwxMSBAQCB2b2lkIFJlbW90ZUxheWVyQmFj
a2luZ1N0b3JlOjplbnN1cmVCYWNraW5nU3RvcmUoUGxhdGZvcm1DQUxheWVyUmVtb3RlKiBsYXll
ciwgRgogCiB2b2lkIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpjbGVhckJhY2tpbmdTdG9yZSgp
CiB7CisgICAgbV9mcm9udEJ1ZmZlci5kaXNjYXJkKCk7CisgICAgbV9iYWNrQnVmZmVyLmRpc2Nh
cmQoKTsKICNpZiBVU0UoSU9TVVJGQUNFKQotICAgIGlmIChtX2Zyb250U3VyZmFjZSkKLSAgICAg
ICAgSU9TdXJmYWNlUG9vbDo6c2hhcmVkUG9vbCgpLmFkZFN1cmZhY2UobV9mcm9udFN1cmZhY2Uu
Z2V0KCkpOwotICAgIGlmIChtX2JhY2tTdXJmYWNlKQotICAgICAgICBJT1N1cmZhY2VQb29sOjpz
aGFyZWRQb29sKCkuYWRkU3VyZmFjZShtX2JhY2tTdXJmYWNlLmdldCgpKTsKLQotICAgIG1fZnJv
bnRTdXJmYWNlID0gbnVsbHB0cjsKLSAgICBtX2JhY2tTdXJmYWNlID0gbnVsbHB0cjsKKyAgICBt
X3NlY29uZGFyeUJhY2tCdWZmZXIuZGlzY2FyZCgpOwogI2VuZGlmCi0gICAgbV9mcm9udEJ1ZmZl
ciA9IG51bGxwdHI7Ci0gICAgbV9iYWNrQnVmZmVyID0gbnVsbHB0cjsKIH0KIAogdm9pZCBSZW1v
dGVMYXllckJhY2tpbmdTdG9yZTo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdApAQCAtMTEyLDcgKzEwNSw3IEBAIHZvaWQgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6
OmVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKIAogI2lmIFVTRShJ
T1NVUkZBQ0UpCiAgICAgaWYgKG1fYWNjZWxlcmF0ZXNEcmF3aW5nKSB7Ci0gICAgICAgIG1hY2hf
cG9ydF90IHBvcnQgPSBtX2Zyb250U3VyZmFjZS0+Y3JlYXRlTWFjaFBvcnQoKTsKKyAgICAgICAg
bWFjaF9wb3J0X3QgcG9ydCA9IG1fZnJvbnRCdWZmZXIuc3VyZmFjZS0+Y3JlYXRlTWFjaFBvcnQo
KTsKICAgICAgICAgZW5jb2RlciA8PCBJUEM6Ok1hY2hQb3J0KHBvcnQsIE1BQ0hfTVNHX1RZUEVf
TU9WRV9TRU5EKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEyMSw3ICsxMTQsNyBAQCB2
b2lkIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiAgICAgQVNTRVJUKCFtX2FjY2VsZXJhdGVzRHJhd2luZyk7CiAKICAg
ICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7Ci0gICAgbV9mcm9udEJ1ZmZlci0+Y3Jl
YXRlSGFuZGxlKGhhbmRsZSk7CisgICAgbV9mcm9udEJ1ZmZlci5iaXRtYXAtPmNyZWF0ZUhhbmRs
ZShoYW5kbGUpOwogICAgIGVuY29kZXIgPDwgaGFuZGxlOwogfQogCkBAIC0xNDQsNyArMTM3LDcg
QEAgYm9vbCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6ZGVjb2RlKElQQzo6QXJndW1lbnREZWNv
ZGVyJiBkZWNvZGVyLCBSZW1vdGVMYXllckIKICAgICAgICAgSVBDOjpNYWNoUG9ydCBtYWNoUG9y
dDsKICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtYWNoUG9ydCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJlc3VsdC5tX2Zyb250U3VyZmFjZSA9IElPU3VyZmFjZTo6
Y3JlYXRlRnJvbU1hY2hQb3J0KG1hY2hQb3J0LnBvcnQoKSwgQ29sb3JTcGFjZURldmljZVJHQik7
CisgICAgICAgIHJlc3VsdC5tX2Zyb250QnVmZmVyLnN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0
ZUZyb21NYWNoUG9ydChtYWNoUG9ydC5wb3J0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAg
ICAgICBtYWNoX3BvcnRfZGVhbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBtYWNoUG9ydC5wb3J0
KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xNTUsNyArMTQ4LDcgQEAgYm9v
bCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6ZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiBk
ZWNvZGVyLCBSZW1vdGVMYXllckIKICAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7
CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYW5kbGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgcmVzdWx0Lm1fZnJvbnRCdWZmZXIgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5k
bGUpOworICAgIHJlc3VsdC5tX2Zyb250QnVmZmVyLmJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6
Y3JlYXRlKGhhbmRsZSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE3MCwxMyArMTYzLDQ2
IEBAIHZvaWQgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OnNldE5lZWRzRGlzcGxheSgpCiAgICAg
c2V0TmVlZHNEaXNwbGF5KEludFJlY3QoSW50UG9pbnQoKSwgZXhwYW5kZWRJbnRTaXplKG1fc2l6
ZSkpKTsKIH0KIAordm9pZCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6c3dhcFRvVmFsaWRGcm9u
dEJ1ZmZlcigpCit7CisgICAgRmxvYXRTaXplIHNjYWxlZFNpemUgPSBtX3NpemU7CisgICAgc2Nh
bGVkU2l6ZS5zY2FsZShtX3NjYWxlKTsKKyAgICBJbnRTaXplIGV4cGFuZGVkU2NhbGVkU2l6ZSA9
IHJvdW5kZWRJbnRTaXplKHNjYWxlZFNpemUpOworCisjaWYgVVNFKElPU1VSRkFDRSkKKyAgICBp
ZiAobV9hY2NlbGVyYXRlc0RyYXdpbmcpIHsKKyAgICAgICAgaWYgKCFtX2JhY2tCdWZmZXIuc3Vy
ZmFjZSB8fCBtX2JhY2tCdWZmZXIuc3VyZmFjZS0+aXNJblVzZSgpKSB7CisgICAgICAgICAgICBz
dGQ6OnN3YXAobV9iYWNrQnVmZmVyLCBtX3NlY29uZGFyeUJhY2tCdWZmZXIpOworICAgICAgICAg
ICAgaWYgKG1fYmFja0J1ZmZlci5zdXJmYWNlICYmIG1fYmFja0J1ZmZlci5zdXJmYWNlLT5pc0lu
VXNlKCkpCisgICAgICAgICAgICAgICAgbV9iYWNrQnVmZmVyLmRpc2NhcmQoKTsKKyAgICAgICAg
fQorCisgICAgICAgIHN0ZDo6c3dhcChtX2Zyb250QnVmZmVyLCBtX2JhY2tCdWZmZXIpOworCisg
ICAgICAgIGlmICghbV9mcm9udEJ1ZmZlci5zdXJmYWNlKQorICAgICAgICAgICAgbV9mcm9udEJ1
ZmZlci5zdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUoZXhwYW5kZWRTY2FsZWRTaXplLCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKKworICAgICAgICBzZXRCdWZmZXJWb2xhdGlsaXR5KEJ1ZmZlclR5
cGU6OkZyb250LCBmYWxzZSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisg
ICAgQVNTRVJUKCFtX2FjY2VsZXJhdGVzRHJhd2luZyk7CisgICAgc3RkOjpzd2FwKG1fZnJvbnRC
dWZmZXIsIG1fYmFja0J1ZmZlcik7CisKKyAgICBpZiAoIW1fZnJvbnRCdWZmZXIuYml0bWFwKQor
ICAgICAgICBtX2Zyb250QnVmZmVyLmJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hh
cmVhYmxlKGV4cGFuZGVkU2NhbGVkU2l6ZSwgbV9pc09wYXF1ZSA/IFNoYXJlYWJsZUJpdG1hcDo6
Tm9GbGFncyA6IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7Cit9CisKIGJvb2wgUmVt
b3RlTGF5ZXJCYWNraW5nU3RvcmU6OmRpc3BsYXkoKQogewogICAgIEFTU0VSVCghbV9mcm9udENv
bnRleHRQZW5kaW5nRmx1c2gpOwogCiAgICAgbV9sYXN0RGlzcGxheVRpbWUgPSBzdGQ6OmNocm9u
bzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKIAotICAgIHNldFZvbGF0aWxpdHkoVm9sYXRpbGl0eTo6
Tm9uVm9sYXRpbGUpOworICAgIC8vIE1ha2UgdGhlIHByZXZpb3VzIGZyb250IGJ1ZmZlciBub24t
dm9sYXRpbGUgZWFybHksIHNvIHRoYXQgd2UgY2FuIGRpcnR5IHRoZSB3aG9sZSBsYXllciBpZiBp
dCBjb21lcyBiYWNrIGVtcHR5LgorICAgIHNldEJ1ZmZlclZvbGF0aWxpdHkoQnVmZmVyVHlwZTo6
RnJvbnQsIGZhbHNlKTsKIAogICAgIGlmIChtX2RpcnR5UmVnaW9uLmlzRW1wdHkoKSB8fCBtX3Np
emUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xOTUsNDIgKzIyMSwzMyBA
QCBib29sIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpkaXNwbGF5KCkKICAgICBJbnRTaXplIGV4
cGFuZGVkU2NhbGVkU2l6ZSA9IHJvdW5kZWRJbnRTaXplKHNjYWxlZFNpemUpOwogICAgIEludFJl
Y3QgZXhwYW5kZWRTY2FsZWRMYXllckJvdW5kcyhJbnRQb2ludCgpLCBleHBhbmRlZFNjYWxlZFNp
emUpOwogICAgIGJvb2wgd2lsbFBhaW50RW50aXJlQmFja2luZ1N0b3JlID0gbV9kaXJ0eVJlZ2lv
bi5jb250YWlucyhsYXllckJvdW5kcyk7Ci0jaWYgVVNFKElPU1VSRkFDRSkKLSAgICBpZiAobV9h
Y2NlbGVyYXRlc0RyYXdpbmcpIHsKLSAgICAgICAgc3RkOjpzd2FwKG1fZnJvbnRTdXJmYWNlLCBt
X2JhY2tTdXJmYWNlKTsKIAotICAgICAgICBpZiAoIW1fZnJvbnRTdXJmYWNlIHx8IG1fZnJvbnRT
dXJmYWNlLT5pc0luVXNlKCkpIHsKLSAgICAgICAgICAgIGlmIChtX2Zyb250U3VyZmFjZSkKLSAg
ICAgICAgICAgICAgICBJT1N1cmZhY2VQb29sOjpzaGFyZWRQb29sKCkuYWRkU3VyZmFjZShtX2Zy
b250U3VyZmFjZS5nZXQoKSk7Ci0gICAgICAgICAgICBtX2Zyb250U3VyZmFjZSA9IElPU3VyZmFj
ZTo6Y3JlYXRlKGV4cGFuZGVkU2NhbGVkU2l6ZSwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAg
ICAgIH0KKyAgICBzd2FwVG9WYWxpZEZyb250QnVmZmVyKCk7CiAKKyNpZiBVU0UoSU9TVVJGQUNF
KQorICAgIGlmIChtX2FjY2VsZXJhdGVzRHJhd2luZykgewogICAgICAgICBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gYmFja0ltYWdlOwotICAgICAgICBpZiAobV9iYWNrU3VyZmFjZSAmJiAhd2lsbFBh
aW50RW50aXJlQmFja2luZ1N0b3JlKQotICAgICAgICAgICAgYmFja0ltYWdlID0gbV9iYWNrU3Vy
ZmFjZS0+Y3JlYXRlSW1hZ2UoKTsKKyAgICAgICAgaWYgKG1fYmFja0J1ZmZlci5zdXJmYWNlICYm
ICF3aWxsUGFpbnRFbnRpcmVCYWNraW5nU3RvcmUpCisgICAgICAgICAgICBiYWNrSW1hZ2UgPSBt
X2JhY2tCdWZmZXIuc3VyZmFjZS0+Y3JlYXRlSW1hZ2UoKTsKIAotICAgICAgICBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQgPSBtX2Zyb250U3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IG1fZnJvbnRCdWZmZXIuc3VyZmFj
ZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7CiAKICAgICAgICAgY29udGV4dC5zY2FsZShGbG9h
dFNpemUoMSwgLTEpKTsKICAgICAgICAgY29udGV4dC50cmFuc2xhdGUoMCwgLWV4cGFuZGVkU2Nh
bGVkU2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIGRyYXdJbkNvbnRleHQoY29udGV4dCwgYmFja0lt
YWdlLmdldCgpKTsKIAotICAgICAgICBtX2Zyb250U3VyZmFjZS0+Y2xlYXJHcmFwaGljc0NvbnRl
eHQoKTsKKyAgICAgICAgbV9mcm9udEJ1ZmZlci5zdXJmYWNlLT5jbGVhckdyYXBoaWNzQ29udGV4
dCgpOwogCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgogCiAgICAgQVNTRVJU
KCFtX2FjY2VsZXJhdGVzRHJhd2luZyk7Ci0KLSAgICBzdGQ6OnN3YXAobV9mcm9udEJ1ZmZlciwg
bV9iYWNrQnVmZmVyKTsKLSAgICBpZiAoIW1fZnJvbnRCdWZmZXIpCi0gICAgICAgIG1fZnJvbnRC
dWZmZXIgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShleHBhbmRlZFNjYWxlZFNp
emUsIG1faXNPcGFxdWUgPyBTaGFyZWFibGVCaXRtYXA6Ok5vRmxhZ3MgOiBTaGFyZWFibGVCaXRt
YXA6OlN1cHBvcnRzQWxwaGEpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+
IGNvbnRleHQgPSBtX2Zyb250QnVmZmVyLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0ID0gbV9mcm9udEJ1ZmZlci5i
aXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwogCiAgICAgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGJhY2tJbWFnZTsKLSAgICBpZiAobV9iYWNrQnVmZmVyICYmICF3aWxsUGFpbnRFbnRpcmVC
YWNraW5nU3RvcmUpCi0gICAgICAgIGJhY2tJbWFnZSA9IG1fYmFja0J1ZmZlci0+bWFrZUNHSW1h
Z2UoKTsKKyAgICBpZiAobV9iYWNrQnVmZmVyLmJpdG1hcCAmJiAhd2lsbFBhaW50RW50aXJlQmFj
a2luZ1N0b3JlKQorICAgICAgICBiYWNrSW1hZ2UgPSBtX2JhY2tCdWZmZXIuYml0bWFwLT5tYWtl
Q0dJbWFnZSgpOwogCiAgICAgZHJhd0luQ29udGV4dCgqY29udGV4dCwgYmFja0ltYWdlLmdldCgp
KTsKICAgICAKQEAgLTM0NSwxMyArMzYyLDEzIEBAIHZvaWQgUmVtb3RlTGF5ZXJCYWNraW5nU3Rv
cmU6OmFwcGx5QmFja2luZ1N0b3JlVG9MYXllcihDQUxheWVyICpsYXllcikKIAogI2lmIFVTRShJ
T1NVUkZBQ0UpCiAgICAgaWYgKGFjY2VsZXJhdGVzRHJhd2luZygpKSB7Ci0gICAgICAgIGxheWVy
LmNvbnRlbnRzID0gKGlkKW1fZnJvbnRTdXJmYWNlLT5zdXJmYWNlKCk7CisgICAgICAgIGxheWVy
LmNvbnRlbnRzID0gKGlkKW1fZnJvbnRCdWZmZXIuc3VyZmFjZS0+c3VyZmFjZSgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogI2VuZGlmCiAKICAgICBBU1NFUlQoIWFjY2VsZXJhdGVzRHJhd2lu
ZygpKTsKLSAgICBsYXllci5jb250ZW50cyA9IChpZCltX2Zyb250QnVmZmVyLT5tYWtlQ0dJbWFn
ZUNvcHkoKS5nZXQoKTsKKyAgICBsYXllci5jb250ZW50cyA9IChpZCltX2Zyb250QnVmZmVyLmJp
dG1hcC0+bWFrZUNHSW1hZ2VDb3B5KCkuZ2V0KCk7CiB9CiAKIFJldGFpblB0cjxDR0NvbnRleHRS
ZWY+IFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjp0YWtlRnJvbnRDb250ZXh0UGVuZGluZ0ZsdXNo
KCkKQEAgLTM2MCw0MCArMzc3LDUwIEBAIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IFJlbW90ZUxh
eWVyQmFja2luZ1N0b3JlOjp0YWtlRnJvbnRDb250ZXh0UGVuZGluZ0ZsdXNoKCkKIH0KIAogI2lm
IFVTRShJT1NVUkZBQ0UpCi1ib29sIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpzZXRWb2xhdGls
aXR5KFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKK2Jvb2wgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6
OnNldEJ1ZmZlclZvbGF0aWxpdHkoQnVmZmVyVHlwZSB0eXBlLCBib29sIGlzVm9sYXRpbGUpCiB7
Ci0gICAgaWYgKG1fdm9sYXRpbGl0eSA9PSB2b2xhdGlsaXR5KQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIGJvb2wgd2FudHNWb2xhdGlsZUZyb250QnVmZmVyID0gdm9sYXRpbGl0eSA9PSBW
b2xhdGlsaXR5OjpBbGxCdWZmZXJzVm9sYXRpbGU7Ci0gICAgYm9vbCB3YW50c1ZvbGF0aWxlQmFj
a0J1ZmZlciA9IHZvbGF0aWxpdHkgPT0gVm9sYXRpbGl0eTo6QWxsQnVmZmVyc1ZvbGF0aWxlIHx8
IHZvbGF0aWxpdHkgPT0gVm9sYXRpbGl0eTo6QmFja0J1ZmZlclZvbGF0aWxlOwotCi0gICAgLy8g
SWYgZWl0aGVyIHN1cmZhY2UgaXMgaW4tdXNlIGFuZCB3b3VsZCBiZWNvbWUgdm9sYXRpbGUsIGRv
bid0IG1ha2UgYW55IGNoYW5nZXMuCi0gICAgaWYgKHdhbnRzVm9sYXRpbGVGcm9udEJ1ZmZlciAm
JiBtX2Zyb250U3VyZmFjZSAmJiBtX2Zyb250U3VyZmFjZS0+aXNJblVzZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHdhbnRzVm9sYXRpbGVCYWNrQnVmZmVyICYmIG1fYmFja1N1
cmZhY2UgJiYgbV9iYWNrU3VyZmFjZS0+aXNJblVzZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAobV9mcm9udFN1cmZhY2UpIHsKLSAgICAgICAgSU9TdXJmYWNlOjpTdXJmYWNl
U3RhdGUgcHJldmlvdXNTdGF0ZSA9IG1fZnJvbnRTdXJmYWNlLT5zZXRJc1ZvbGF0aWxlKHdhbnRz
Vm9sYXRpbGVGcm9udEJ1ZmZlcik7Ci0KLSAgICAgICAgLy8gQmVjb21pbmcgbm9uLXZvbGF0aWxl
IGFuZCB0aGUgZnJvbnQgYnVmZmVyIHdhcyBwdXJnZWQsIHNvIHdlIG5lZWQgdG8gcmVwYWludC4K
LSAgICAgICAgaWYgKCF3YW50c1ZvbGF0aWxlRnJvbnRCdWZmZXIgJiYgKHByZXZpb3VzU3RhdGUg
PT0gSU9TdXJmYWNlOjpTdXJmYWNlU3RhdGU6OkVtcHR5KSkKLSAgICAgICAgICAgIHNldE5lZWRz
RGlzcGxheSgpOworICAgIGlmICh0eXBlID09IEJ1ZmZlclR5cGU6OkZyb250ICYmIG1fZnJvbnRC
dWZmZXIuc3VyZmFjZSAmJiBtX2Zyb250QnVmZmVyLmlzVm9sYXRpbGUgIT0gaXNWb2xhdGlsZSkg
eworICAgICAgICBpZiAoIWlzVm9sYXRpbGUgfHwgIW1fZnJvbnRCdWZmZXIuc3VyZmFjZS0+aXNJ
blVzZSgpKSB7CisgICAgICAgICAgICBJT1N1cmZhY2U6OlN1cmZhY2VTdGF0ZSBwcmV2aW91c1N0
YXRlID0gbV9mcm9udEJ1ZmZlci5zdXJmYWNlLT5zZXRJc1ZvbGF0aWxlKGlzVm9sYXRpbGUpOwor
ICAgICAgICAgICAgbV9mcm9udEJ1ZmZlci5pc1ZvbGF0aWxlID0gaXNWb2xhdGlsZTsKKworICAg
ICAgICAgICAgLy8gQmVjb21pbmcgbm9uLXZvbGF0aWxlIGFuZCB0aGUgZnJvbnQgYnVmZmVyIHdh
cyBwdXJnZWQsIHNvIHdlIG5lZWQgdG8gcmVwYWludC4KKyAgICAgICAgICAgIGlmICghaXNWb2xh
dGlsZSAmJiAocHJldmlvdXNTdGF0ZSA9PSBJT1N1cmZhY2U6OlN1cmZhY2VTdGF0ZTo6RW1wdHkp
KQorICAgICAgICAgICAgICAgIHNldE5lZWRzRGlzcGxheSgpOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQnVmZmVyVHlw
ZTo6QmFjayAmJiBtX2JhY2tCdWZmZXIuc3VyZmFjZSAmJiBtX2JhY2tCdWZmZXIuaXNWb2xhdGls
ZSAhPSBpc1ZvbGF0aWxlKSB7CisgICAgICAgIGlmICghaXNWb2xhdGlsZSB8fCAhbV9iYWNrQnVm
ZmVyLnN1cmZhY2UtPmlzSW5Vc2UoKSkgeworICAgICAgICAgICAgbV9iYWNrQnVmZmVyLnN1cmZh
Y2UtPnNldElzVm9sYXRpbGUoaXNWb2xhdGlsZSk7CisgICAgICAgICAgICBtX2JhY2tCdWZmZXIu
aXNWb2xhdGlsZSA9IGlzVm9sYXRpbGU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBCdWZmZXJUeXBlOjpTZWNvbmRhcnlC
YWNrICYmIG1fc2Vjb25kYXJ5QmFja0J1ZmZlci5zdXJmYWNlICYmIG1fc2Vjb25kYXJ5QmFja0J1
ZmZlci5pc1ZvbGF0aWxlICE9IGlzVm9sYXRpbGUpIHsKKyAgICAgICAgaWYgKCFpc1ZvbGF0aWxl
IHx8ICFtX3NlY29uZGFyeUJhY2tCdWZmZXIuc3VyZmFjZS0+aXNJblVzZSgpKSB7CisgICAgICAg
ICAgICBtX3NlY29uZGFyeUJhY2tCdWZmZXIuc3VyZmFjZS0+c2V0SXNWb2xhdGlsZShpc1ZvbGF0
aWxlKTsKKyAgICAgICAgICAgIG1fc2Vjb25kYXJ5QmFja0J1ZmZlci5pc1ZvbGF0aWxlID0gaXNW
b2xhdGlsZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgaWYgKG1fYmFja1N1cmZhY2UpCi0gICAgICAgIG1fYmFja1N1cmZhY2UtPnNldElz
Vm9sYXRpbGUod2FudHNWb2xhdGlsZUJhY2tCdWZmZXIpOwotCi0gICAgbV92b2xhdGlsaXR5ID0g
dm9sYXRpbGl0eTsKLQogICAgIHJldHVybiB0cnVlOwogfQogI2Vsc2UKLWJvb2wgUmVtb3RlTGF5
ZXJCYWNraW5nU3RvcmU6OnNldFZvbGF0aWxpdHkoVm9sYXRpbGl0eSkKK2Jvb2wgUmVtb3RlTGF5
ZXJCYWNraW5nU3RvcmU6OnNldEJ1ZmZlclZvbGF0aWxpdHkoQnVmZmVyVHlwZSwgYm9vbCkKIHsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KICNlbmRpZgogCit2b2lkIFJlbW90ZUxheWVyQmFja2luZ1N0
b3JlOjpCdWZmZXI6OmRpc2NhcmQoKQoreworI2lmIFVTRShJT1NVUkZBQ0UpCisgICAgaWYgKHN1
cmZhY2UpCisgICAgICAgIElPU3VyZmFjZVBvb2w6OnNoYXJlZFBvb2woKS5hZGRTdXJmYWNlKHN1
cmZhY2UuZ2V0KCkpOworICAgIHN1cmZhY2UgPSBudWxscHRyOworICAgIGlzVm9sYXRpbGUgPSBm
YWxzZTsKKyNlbmRpZgorICAgIGJpdG1hcCA9IG51bGxwdHI7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXll
ckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1Jl
bW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbi5tbQppbmRleCAzNzBiN2VlLi4xNGZhOTky
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyQmFja2lu
Z1N0b3JlQ29sbGVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90
ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbi5tbQpAQCAtMzEsNyArMzEsOCBAQAogI2ltcG9y
dCAiUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5oIgogCiBjb25zdCBzdGQ6OmNocm9ubzo6c2Vjb25k
cyBwdXJnZWFibGVCYWNraW5nU3RvcmVBZ2VUaHJlc2hvbGQgPSAxX3M7Ci1jb25zdCBzdGQ6OmNo
cm9ubzo6c2Vjb25kcyBwdXJnZWFiaWxpdHlUaW1lckludGVydmFsID0gMV9zOworY29uc3Qgc3Rk
OjpjaHJvbm86Om1pbGxpc2Vjb25kcyBwdXJnZWFibGVTZWNvbmRhcnlCYWNraW5nU3RvcmVBZ2VU
aHJlc2hvbGQgPSAyMDBfbXM7Citjb25zdCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHB1cmdl
YWJpbGl0eVRpbWVySW50ZXJ2YWwgPSAyMDBfbXM7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBA
IC02MCwxMSArNjEsMTcgQEAgdm9pZCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb246
OnB1cmdlYWJpbGl0eVRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8UmUKICAgICBmb3IgKGNvbnN0
IGF1dG8mIGJhY2tpbmdTdG9yZSA6IG1fbGl2ZUJhY2tpbmdTdG9yZSkgewogICAgICAgICBpZiAo
bm93IC0gYmFja2luZ1N0b3JlLT5sYXN0RGlzcGxheVRpbWUoKSA8IHB1cmdlYWJsZUJhY2tpbmdT
dG9yZUFnZVRocmVzaG9sZCkgewogICAgICAgICAgICAgaGFkUmVjZW50bHlQYWludGVkQmFja2lu
Z1N0b3JlID0gdHJ1ZTsKKworICAgICAgICAgICAgaWYgKG5vdyAtIGJhY2tpbmdTdG9yZS0+bGFz
dERpc3BsYXlUaW1lKCkgPj0gcHVyZ2VhYmxlU2Vjb25kYXJ5QmFja2luZ1N0b3JlQWdlVGhyZXNo
b2xkKQorICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZS0+c2V0QnVmZmVyVm9sYXRpbGl0eShS
ZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6QnVmZmVyVHlwZTo6U2Vjb25kYXJ5QmFjaywgdHJ1ZSk7
CisKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRklYTUU6
IElmIHRoZSBsYXllciBpcyB1bnBhcmVudGVkLCB3ZSBzaG91bGQgbWFrZSBhbGwgYnVmZmVycyB2
b2xhdGlsZS4KLSAgICAgICAgaWYgKCFiYWNraW5nU3RvcmUtPnNldFZvbGF0aWxpdHkoUmVtb3Rl
TGF5ZXJCYWNraW5nU3RvcmU6OlZvbGF0aWxpdHk6OkJhY2tCdWZmZXJWb2xhdGlsZSkpCisgICAg
ICAgIGlmICghYmFja2luZ1N0b3JlLT5zZXRCdWZmZXJWb2xhdGlsaXR5KFJlbW90ZUxheWVyQmFj
a2luZ1N0b3JlOjpCdWZmZXJUeXBlOjpTZWNvbmRhcnlCYWNrLCB0cnVlKSkKKyAgICAgICAgICAg
IHN1Y2Nlc3NmdWxseU1hZGVCYWNraW5nU3RvcmVQdXJnZWFibGUgPSBmYWxzZTsKKyAgICAgICAg
aWYgKCFiYWNraW5nU3RvcmUtPnNldEJ1ZmZlclZvbGF0aWxpdHkoUmVtb3RlTGF5ZXJCYWNraW5n
U3RvcmU6OkJ1ZmZlclR5cGU6OkJhY2ssIHRydWUpKQogICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5
TWFkZUJhY2tpbmdTdG9yZVB1cmdlYWJsZSA9IGZhbHNlOwogICAgIH0KIAo=
</data>
<flag name="review"
          id="255711"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>