<?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>35453</bug_id>
          
          <creation_ts>2010-02-26 14:13:37 -0800</creation_ts>
          <short_desc>Need to move items that CanvasRenderingContext2D depends on into CanvasSurface.</short_desc>
          <delta_ts>2010-03-24 10:51:27 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>34909</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="David Levin">levin</reporter>
          <assigned_to name="David Levin">levin</assigned_to>
          <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>194285</commentid>
    <comment_count>0</comment_count>
      <attachid>49638</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-26 14:13:37 -0800</bug_when>
    <thetext>Created attachment 49638
Here&apos;s the changes inplace in HTMLCanvasElement (to make the diff clearer).

This is step 2a from https://bugs.webkit.org/show_bug.cgi?id=34909#c2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194304</commentid>
    <comment_count>1</comment_count>
      <attachid>49646</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-26 14:27:58 -0800</bug_when>
    <thetext>Created attachment 49646
Proposed fix.

See the previous patch for the same changes but in an easier to diff format.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194877</commentid>
    <comment_count>2</comment_count>
      <attachid>49646</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-03-01 17:02:47 -0800</bug_when>
    <thetext>Comment on attachment 49646
Proposed fix.

&gt; +    // FIXME: Make isSupportedImageMIMETypeForEncoding threadsafe (to allow this method to be used on a worker thread).
&gt; +    if (mimeType.isNull() || !MIMETypeRegistry::isSupportedImageMIMETypeForEncoding(mimeType))

It may be worth (for now) adding an isOnMainThread() assertion to this code path so that we can&apos;t accidentally forget to fix this.

&gt; +        return buffer()-&gt;toDataURL(&quot;image/png&quot;);
&gt; +
&gt; +    return buffer()-&gt;toDataURL(mimeType);

I wonder how thread safe the image _encoders_ are.


i wonder what the DPI of an offscreen canvas should be...

&gt; +IntRect CanvasSurface::convertLogicalToDevice(const FloatRect&amp; logicalRect) const
&gt; +{


I&apos;m okay r+ing this, but i thought i&apos;d see if you have any comments on these before i do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194878</commentid>
    <comment_count>3</comment_count>
      <attachid>49646</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-03-01 17:07:09 -0800</bug_when>
    <thetext>Comment on attachment 49646
Proposed fix.

I&apos;ll do something for Oliver&apos;s comments and upload a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195284</commentid>
    <comment_count>4</comment_count>
      <attachid>49859</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-03-02 15:50:57 -0800</bug_when>
    <thetext>Created attachment 49859
Proposed fix.

The only difference between this patch and the last one is adding a few isMainThread() asserts (and corresponding changelog entries).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195291</commentid>
    <comment_count>5</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-03-02 16:02:29 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 49646 [details])
&gt; &gt; +    // FIXME: Make isSupportedImageMIMETypeForEncoding threadsafe (to allow this method to be used on a worker thread).
&gt; &gt; +    if (mimeType.isNull() || !MIMETypeRegistry::isSupportedImageMIMETypeForEncoding(mimeType))
&gt; 
&gt; It may be worth (for now) adding an isOnMainThread() assertion to this code
&gt; path so that we can&apos;t accidentally forget to fix this.

done. I also added bug https://bugs.webkit.org/show_bug.cgi?id=35616 for this.

&gt; I wonder how thread safe the image _encoders_ are.

I looked at the code (for a while and for several different platforms) and it appeared pretty safe.

I added a few asserts in some places that may need fixes. I also added bug https://bugs.webkit.org/show_bug.cgi?id=35615 and made it block the &quot;master&quot; bug.


&gt; i wonder what the DPI of an offscreen canvas should be...

Me too :)

Something I&apos;ll have to figure out as I get there but my instinct is to make it match the document that the worker came from.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195306</commentid>
    <comment_count>6</comment_count>
      <attachid>49864</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-03-02 16:26:27 -0800</bug_when>
    <thetext>Created attachment 49864
Proposed fix (added the modified changelog).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198206</commentid>
    <comment_count>7</comment_count>
      <attachid>49864</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-03-10 10:42:56 -0800</bug_when>
    <thetext>Comment on attachment 49864
Proposed fix (added the modified changelog).

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203489</commentid>
    <comment_count>8</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-03-24 10:51:27 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/56447</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49638</attachid>
            <date>2010-02-26 14:13:37 -0800</date>
            <delta_ts>2010-03-02 15:50:57 -0800</delta_ts>
            <desc>Here&apos;s the changes inplace in HTMLCanvasElement (to make the diff clearer).</desc>
            <filename>inplace_changes.txt</filename>
            <type>text/plain</type>
            <size>13988</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0NhbnZhc1N1cmZhY2UuY3BwIGIvV2ViQ29yZS9kb20v
Q2FudmFzU3VyZmFjZS5jcHAKaW5kZXggNjljNzk1MS4uN2I0ZjJmNiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9kb20vQ2FudmFzU3VyZmFjZS5jcHAKKysrIGIvV2ViQ29yZS9kb20vQ2FudmFzU3VyZmFj
ZS5jcHAKQEAgLTI2LDYgKzI2LDI3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
Q2FudmFzU3VyZmFjZS5oIgogCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitDYW52YXNTdXJmYWNlOjpDYW52YXNTdXJmYWNlKGZsb2F0IHBhZ2VTY2Fs
ZUZhY3RvcikKKyAgICA6IG1fc2l6ZShEZWZhdWx0V2lkdGgsIERlZmF1bHRIZWlnaHQpCisgICAg
LCBtX3BhZ2VTY2FsZUZhY3RvcihwYWdlU2NhbGVGYWN0b3IpCisgICAgLCBtX29yaWdpbkNsZWFu
KHRydWUpCisgICAgLCBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcihmYWxzZSkKK3sKK30KKworQ2Fu
dmFzU3VyZmFjZTo6fkNhbnZhc1N1cmZhY2UoKQoreworfQorCit2b2lkIENhbnZhc1N1cmZhY2U6
OnNldFN1cmZhY2VTaXplKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgbV9zaXplID0gc2l6
ZTsKKyAgICBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlciA9IGZhbHNlOworICAgIG1faW1hZ2VCdWZm
ZXIuY2xlYXIoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9kb20vQ2FudmFzU3VyZmFjZS5oIGIvV2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5oCmlu
ZGV4IDExOGRiOGYuLjIyZjc5ZDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0NhbnZhc1N1cmZh
Y2UuaAorKysgYi9XZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmgKQEAgLTI2LDE0ICsyNiw3MiBA
QAogI2lmbmRlZiBDYW52YXNTdXJmYWNlX2gKICNkZWZpbmUgQ2FudmFzU3VyZmFjZV9oCiAKKyNp
bmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisKKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQWZmaW5lVHJhbnNmb3JtOworY2xhc3MgRmxvYXRQb2lu
dDsKK2NsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEZsb2F0U2l6ZTsKK2NsYXNzIEdyYXBoaWNzQ29u
dGV4dDsKK2NsYXNzIEltYWdlQnVmZmVyOworY2xhc3MgSW50UG9pbnQ7CitjbGFzcyBTdHJpbmc7
CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKIGNsYXNzIENhbnZhc1N1cmZhY2UgOiBw
dWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgorICAgIENhbnZhc1N1cmZhY2UoZmxvYXQgcGFn
ZVNjYWxlRmFjdG9yKTsKKyAgICB2aXJ0dWFsIH5DYW52YXNTdXJmYWNlKCk7CisKKyAgICBpbnQg
d2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NpemUud2lkdGgoKTsgfQorICAgIGludCBoZWlnaHQo
KSBjb25zdCB7IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7IH0KKworICAgIFN0cmluZyB0b0RhdGFV
UkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgY29uc3Qg
SW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAgdmlydHVhbCB2
b2lkIHdpbGxEcmF3KGNvbnN0IEZsb2F0UmVjdCYpOworCisgICAgR3JhcGhpY3NDb250ZXh0KiBk
cmF3aW5nQ29udGV4dCgpIGNvbnN0OworCisgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlcigpIGNvbnN0
OworCisgICAgSW50UmVjdCBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0UmVjdCYp
IGNvbnN0OworICAgIEludFNpemUgY29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFNp
emUmKSBjb25zdDsKKyAgICBJbnRQb2ludCBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZs
b2F0UG9pbnQmKSBjb25zdDsKKworICAgIHZvaWQgc2V0T3JpZ2luVGFpbnRlZCgpIHsgbV9vcmln
aW5DbGVhbiA9IGZhbHNlOyB9CisgICAgYm9vbCBvcmlnaW5DbGVhbigpIGNvbnN0IHsgcmV0dXJu
IG1fb3JpZ2luQ2xlYW47IH0KKworICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkg
Y29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHNldFN1cmZhY2VTaXplKGNvbnN0IEludFNp
emUmKTsKKyAgICBib29sIGhhc0NyZWF0ZWRJbWFnZUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzQ3JlYXRlZEltYWdlQnVmZmVyOyB9CisKKyAgICBzdGF0aWMgY29uc3QgaW50IERlZmF1bHRX
aWR0aDsKKyAgICBzdGF0aWMgY29uc3QgaW50IERlZmF1bHRIZWlnaHQ7CiAKIHByaXZhdGU6Cisg
ICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0OworCisgICAgc3RhdGljIGNvbnN0IGZs
b2F0IE1heENhbnZhc0FyZWE7CisKKyAgICBJbnRTaXplIG1fc2l6ZTsKKworICAgIGZsb2F0IG1f
cGFnZVNjYWxlRmFjdG9yOworICAgIGJvb2wgbV9vcmlnaW5DbGVhbjsKKworICAgIC8vIG1fY3Jl
YXRlZEltYWdlQnVmZmVyIG1lYW5zIHdlIHRyaWVkIHRvIG1hbGxvYyB0aGUgYnVmZmVyLiAgV2Ug
ZGlkbid0IG5lY2Vzc2FyaWx5IGdldCBpdC4KKyAgICBtdXRhYmxlIGJvb2wgbV9oYXNDcmVhdGVk
SW1hZ2VCdWZmZXI7CisgICAgbXV0YWJsZSBPd25QdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZm
ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50
LmNwcAppbmRleCBhZGZmZTRhLi4xMzg5MDk5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5j
cHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIVE1M
Q2FudmFzRWxlbWVudC5oIgogCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVk
ZSAiQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJDYW52YXNHcmFkaWVudC5o
IgogI2luY2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIKQEAgLTU2LDIxICs1NywxOSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiAvLyBUaGVzZSB2YWx1
ZXMgY29tZSBmcm9tIHRoZSBXaGF0V0cgc3BlYy4KLXN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdFdp
ZHRoID0gMzAwOwotc3RhdGljIGNvbnN0IGludCBkZWZhdWx0SGVpZ2h0ID0gMTUwOworY29uc3Qg
aW50IENhbnZhc1N1cmZhY2U6OkRlZmF1bHRXaWR0aCA9IDMwMDsKK2NvbnN0IGludCBDYW52YXNT
dXJmYWNlOjpEZWZhdWx0SGVpZ2h0ID0gMTUwOwogCiAvLyBGaXJlZm94IGxpbWl0cyB3aWR0aC9o
ZWlnaHQgdG8gMzI3NjcgcGl4ZWxzLCBidXQgc2xvd3MgZG93biBkcmFtYXRpY2FsbHkgYmVmb3Jl
IGl0IAogLy8gcmVhY2hlcyB0aGF0IGxpbWl0LiBXZSBsaW1pdCBieSBhcmVhIGluc3RlYWQsIGdp
dmluZyB1cyBsYXJnZXIgbWF4aW11bSBkaW1lbnNpb25zLAogLy8gaW4gZXhjaGFuZ2UgZm9yIGEg
c21hbGxlciBtYXhpbXVtIGNhbnZhcyBzaXplLgotY29uc3QgZmxvYXQgSFRNTENhbnZhc0VsZW1l
bnQ6Ok1heENhbnZhc0FyZWEgPSAzMjc2OCAqIDgxOTI7IC8vIE1heGltdW0gY2FudmFzIGFyZWEg
aW4gQ1NTIHBpeGVscworY29uc3QgZmxvYXQgQ2FudmFzU3VyZmFjZTo6TWF4Q2FudmFzQXJlYSA9
IDMyNzY4ICogODE5MjsgLy8gTWF4aW11bSBjYW52YXMgYXJlYSBpbiBDU1MgcGl4ZWxzCiAKIEhU
TUxDYW52YXNFbGVtZW50OjpIVE1MQ2FudmFzRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQot
ICAgICwgbV9zaXplKGRlZmF1bHRXaWR0aCwgZGVmYXVsdEhlaWdodCkKKyAgICAsIENhbnZhc1N1
cmZhY2UoZG9jLT5mcmFtZSgpID8gZG9jLT5mcmFtZSgpLT5wYWdlKCktPmNocm9tZSgpLT5zY2Fs
ZUZhY3RvcigpIDogMSkKICAgICAsIG1fb2JzZXJ2ZXIoMCkKLSAgICAsIG1fb3JpZ2luQ2xlYW4o
dHJ1ZSkKICAgICAsIG1faWdub3JlUmVzZXQoZmFsc2UpCi0gICAgLCBtX2NyZWF0ZWRJbWFnZUJ1
ZmZlcihmYWxzZSkKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShjYW52YXNUYWcpKTsKIH0KQEAg
LTEzMyw3ICsxMzIsNyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRXaWR0aChpbnQgdmFs
dWUpCiAgICAgc2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsK
IH0KIAotU3RyaW5nIEhUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitTdHJpbmcgQ2FudmFzU3VyZmFjZTo6dG9EYXRh
VVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlm
ICghbV9vcmlnaW5DbGVhbikgewogICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKQEAgLTE0Myw2
ICsxNDIsNyBAQCBTdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBpZiAobV9zaXplLmlzRW1wdHko
KSB8fCAhYnVmZmVyKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoImRhdGE6LCIpOwogCisgICAg
Ly8gRklYTUU6IE1ha2UgaXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcgdGhyZWFk
c2FmZSAodG8gYWxsb3cgdGhpcyBtZXRob2QgdG8gYmUgdXNlZCBvbiBhIHdvcmtlciB0aHJlYWQp
LgogICAgIGlmIChtaW1lVHlwZS5pc051bGwoKSB8fCAhTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBw
b3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKQogICAgICAgICByZXR1cm4g
YnVmZmVyKCktPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7CiAKQEAgLTE5MSwxNCArMTkxLDE5IEBA
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KGNv
bnN0IFN0cmluZyYgdHlwZSwgQ2FudmFzCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgSFRNTENh
bnZhc0VsZW1lbnQ6OndpbGxEcmF3KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgQ2FudmFz
U3VyZmFjZTo6d2lsbERyYXcoY29uc3QgRmxvYXRSZWN0JikKIHsKICAgICBpZiAobV9pbWFnZUJ1
ZmZlcikKICAgICAgICAgbV9pbWFnZUJ1ZmZlci0+Y2xlYXJJbWFnZSgpOwotICAgIAorfQorCit2
b2lkIEhUTUxDYW52YXNFbGVtZW50Ojp3aWxsRHJhdyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7
CisgICAgQ2FudmFzU3VyZmFjZTo6d2lsbERyYXcocmVjdCk7CisKICAgICBpZiAoUmVuZGVyQm94
KiBybyA9IHJlbmRlckJveCgpKSB7CiAgICAgICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IHJvLT5j
b250ZW50Qm94UmVjdCgpOwotICAgICAgICBGbG9hdFJlY3QgciA9IG1hcFJlY3QocmVjdCwgRmxv
YXRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpLCBkZXN0UmVjdCk7
CisgICAgICAgIEZsb2F0UmVjdCByID0gbWFwUmVjdChyZWN0LCBGbG9hdFJlY3QoMCwgMCwgc2l6
ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSksIGRlc3RSZWN0KTsKICAgICAgICAgci5pbnRl
cnNlY3QoZGVzdFJlY3QpOwogICAgICAgICBpZiAobV9kaXJ0eVJlY3QuY29udGFpbnMocikpCiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0yMTksMjggKzIyNCwyNiBAQCB2b2lkIEhUTUxDYW52YXNF
bGVtZW50OjpyZXNldCgpCiAgICAgYm9vbCBvazsKICAgICBpbnQgdyA9IGdldEF0dHJpYnV0ZSh3
aWR0aEF0dHIpLnRvSW50KCZvayk7CiAgICAgaWYgKCFvaykKLSAgICAgICAgdyA9IGRlZmF1bHRX
aWR0aDsKKyAgICAgICAgdyA9IERlZmF1bHRXaWR0aDsKICAgICBpbnQgaCA9IGdldEF0dHJpYnV0
ZShoZWlnaHRBdHRyKS50b0ludCgmb2spOwogICAgIGlmICghb2spCi0gICAgICAgIGggPSBkZWZh
dWx0SGVpZ2h0OworICAgICAgICBoID0gRGVmYXVsdEhlaWdodDsKIAotICAgIEludFNpemUgb2xk
U2l6ZSA9IG1fc2l6ZTsKLSAgICBtX3NpemUgPSBJbnRTaXplKHcsIGgpOworICAgIEludFNpemUg
b2xkU2l6ZSA9IHNpemUoKTsKKyAgICBzZXRTdXJmYWNlU2l6ZShJbnRTaXplKHcsIGgpKTsKIAog
I2lmIEVOQUJMRSgzRF9DQU5WQVMpCiAgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlz
M2QoKSkKICAgICAgICAgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4obV9jb250
ZXh0LmdldCgpKS0+cmVzaGFwZSh3aWR0aCgpLCBoZWlnaHQoKSk7CiAjZW5kaWYKIAotICAgIGJv
b2wgaGFkSW1hZ2VCdWZmZXIgPSBtX2NyZWF0ZWRJbWFnZUJ1ZmZlcjsKLSAgICBtX2NyZWF0ZWRJ
bWFnZUJ1ZmZlciA9IGZhbHNlOwotICAgIG1faW1hZ2VCdWZmZXIuY2xlYXIoKTsKKyAgICBib29s
IGhhZEltYWdlQnVmZmVyID0gaGFzQ3JlYXRlZEltYWdlQnVmZmVyKCk7CiAgICAgaWYgKG1fY29u
dGV4dCAmJiBtX2NvbnRleHQtPmlzMmQoKSkKICAgICAgICAgc3RhdGljX2Nhc3Q8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEKj4obV9jb250ZXh0LmdldCgpKS0+cmVzZXQoKTsKIAogICAgIGlmIChS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkgewogICAgICAgICBpZiAo
bV9yZW5kZXJlcklzQ2FudmFzKSB7Ci0gICAgICAgICAgICBpZiAob2xkU2l6ZSAhPSBtX3NpemUp
CisgICAgICAgICAgICBpZiAob2xkU2l6ZSAhPSBzaXplKCkpCiAgICAgICAgICAgICAgICAgdG9S
ZW5kZXJIVE1MQ2FudmFzKHJlbmRlcmVyKS0+Y2FudmFzU2l6ZUNoYW5nZWQoKTsKICAgICAgICAg
ICAgIGlmIChoYWRJbWFnZUJ1ZmZlcikKICAgICAgICAgICAgICAgICByZW5kZXJlci0+cmVwYWlu
dCgpOwpAQCAtMjY3LDEwICsyNzAsMTMgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cGFpbnQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByKQogICAgIH0KICNlbmRp
ZgogCi0gICAgaWYgKG1faW1hZ2VCdWZmZXIpIHsKLSAgICAgICAgSW1hZ2UqIGltYWdlID0gbV9p
bWFnZUJ1ZmZlci0+aW1hZ2UoKTsKLSAgICAgICAgaWYgKGltYWdlKQotICAgICAgICAgICAgY29u
dGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBEZXZpY2VDb2xvclNwYWNlLCByKTsKKyAgICBpZiAoaGFz
Q3JlYXRlZEltYWdlQnVmZmVyKCkpIHsKKyAgICAgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVy
ID0gYnVmZmVyKCk7CisgICAgICAgIGlmIChpbWFnZUJ1ZmZlcikgeworICAgICAgICAgICAgSW1h
Z2UqIGltYWdlID0gaW1hZ2VCdWZmZXItPmltYWdlKCk7CisgICAgICAgICAgICBpZiAoaW1hZ2Up
CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBEZXZpY2VDb2xvclNw
YWNlLCByKTsKKyAgICAgICAgfQogICAgIH0KIAogI2lmIEVOQUJMRSgzRF9DQU5WQVMpCkBAIC0y
NzksMTYgKzI4NSwxNSBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpwYWludChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHIpCiAjZW5kaWYKIH0KIAotSW50UmVjdCBI
VE1MQ2FudmFzRWxlbWVudDo6Y29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFJlY3Qm
IGxvZ2ljYWxSZWN0KSBjb25zdAorSW50UmVjdCBDYW52YXNTdXJmYWNlOjpjb252ZXJ0TG9naWNh
bFRvRGV2aWNlKGNvbnN0IEZsb2F0UmVjdCYgbG9naWNhbFJlY3QpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIEludFJlY3QoY29udmVydExvZ2ljYWxUb0RldmljZShsb2dpY2FsUmVjdC5sb2NhdGlvbigp
KSwgY29udmVydExvZ2ljYWxUb0RldmljZShsb2dpY2FsUmVjdC5zaXplKCkpKTsKIH0KIAotSW50
U2l6ZSBIVE1MQ2FudmFzRWxlbWVudDo6Y29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplKSBjb25zdAorSW50U2l6ZSBDYW52YXNTdXJmYWNlOjpjb252ZXJ0
TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUpIGNvbnN0CiB7Ci0g
ICAgZmxvYXQgcGFnZVNjYWxlRmFjdG9yID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSA/IGRvY3VtZW50
KCktPmZyYW1lKCktPnBhZ2UoKS0+Y2hyb21lKCktPnNjYWxlRmFjdG9yKCkgOiAxLjBmOwotICAg
IGZsb2F0IHdmID0gY2VpbGYobG9naWNhbFNpemUud2lkdGgoKSAqIHBhZ2VTY2FsZUZhY3Rvcik7
Ci0gICAgZmxvYXQgaGYgPSBjZWlsZihsb2dpY2FsU2l6ZS5oZWlnaHQoKSAqIHBhZ2VTY2FsZUZh
Y3Rvcik7CisgICAgZmxvYXQgd2YgPSBjZWlsZihsb2dpY2FsU2l6ZS53aWR0aCgpICogbV9wYWdl
U2NhbGVGYWN0b3IpOworICAgIGZsb2F0IGhmID0gY2VpbGYobG9naWNhbFNpemUuaGVpZ2h0KCkg
KiBtX3BhZ2VTY2FsZUZhY3Rvcik7CiAgICAgCiAgICAgaWYgKCEod2YgPj0gMSAmJiBoZiA+PSAx
ICYmIHdmICogaGYgPD0gTWF4Q2FudmFzQXJlYSkpCiAgICAgICAgIHJldHVybiBJbnRTaXplKCk7
CkBAIC0yOTYsMjAgKzMwMSwxOSBAQCBJbnRTaXplIEhUTUxDYW52YXNFbGVtZW50Ojpjb252ZXJ0
TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUpCiAgICAgcmV0dXJu
IEludFNpemUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHdmKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGhmKSk7CiB9CiAKLUludFBvaW50IEhUTUxDYW52YXNFbGVtZW50Ojpjb252ZXJ0TG9naWNhbFRv
RGV2aWNlKGNvbnN0IEZsb2F0UG9pbnQmIGxvZ2ljYWxQb3MpIGNvbnN0CitJbnRQb2ludCBDYW52
YXNTdXJmYWNlOjpjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0UG9pbnQmIGxvZ2lj
YWxQb3MpIGNvbnN0CiB7Ci0gICAgZmxvYXQgcGFnZVNjYWxlRmFjdG9yID0gZG9jdW1lbnQoKS0+
ZnJhbWUoKSA/IGRvY3VtZW50KCktPmZyYW1lKCktPnBhZ2UoKS0+Y2hyb21lKCktPnNjYWxlRmFj
dG9yKCkgOiAxLjBmOwotICAgIGZsb2F0IHhmID0gbG9naWNhbFBvcy54KCkgKiBwYWdlU2NhbGVG
YWN0b3I7Ci0gICAgZmxvYXQgeWYgPSBsb2dpY2FsUG9zLnkoKSAqIHBhZ2VTY2FsZUZhY3RvcjsK
KyAgICBmbG9hdCB4ZiA9IGxvZ2ljYWxQb3MueCgpICogbV9wYWdlU2NhbGVGYWN0b3I7CisgICAg
ZmxvYXQgeWYgPSBsb2dpY2FsUG9zLnkoKSAqIG1fcGFnZVNjYWxlRmFjdG9yOwogICAgIAogICAg
IHJldHVybiBJbnRQb2ludChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oeGYpLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oeWYpKTsKIH0KIAotdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VC
dWZmZXIoKSBjb25zdAordm9pZCBDYW52YXNTdXJmYWNlOjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKCFtX2ltYWdlQnVmZmVyKTsKIAotICAgIG1fY3JlYXRlZEltYWdl
QnVmZmVyID0gdHJ1ZTsKKyAgICBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlciA9IHRydWU7CiAgICAg
CiAgICAgRmxvYXRTaXplIHVuc2NhbGVkU2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSk7CiAgICAgSW50
U2l6ZSBzaXplID0gY29udmVydExvZ2ljYWxUb0RldmljZSh1bnNjYWxlZFNpemUpOwpAQCAtMzE4
LDI4ICszMjIsMjggQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIo
KSBjb25zdAogCiAgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSk7
CiAgICAgLy8gVGhlIGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UgTWF4Q2FudmFzQXJlYSBjaGVjayBz
aG91bGQgcHJldmVudCBjb21tb24gY2FzZXMKLSAgICAvLyB3aGVyZSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKCkgcmV0dXJucyBOVUxMLCBob3dldmVyIHdlIGNvdWxkIHN0aWxsIGJlIGxvdyBvbiBtZW1v
cnkuCisgICAgLy8gd2hlcmUgSW1hZ2VCdWZmZXI6OmNyZWF0ZSgpIHJldHVybnMgMCwgaG93ZXZl
ciB3ZSBjb3VsZCBzdGlsbCBiZSBsb3cgb24gbWVtb3J5LgogICAgIGlmICghbV9pbWFnZUJ1ZmZl
cikKICAgICAgICAgcmV0dXJuOwogICAgIG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+c2NhbGUo
RmxvYXRTaXplKHNpemUud2lkdGgoKSAvIHVuc2NhbGVkU2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpIC8gdW5zY2FsZWRTaXplLmhlaWdodCgpKSk7CiAgICAgbV9pbWFnZUJ1ZmZlci0+Y29udGV4
dCgpLT5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyh0cnVlKTsKIH0KIAotR3JhcGhpY3NDb250
ZXh0KiBIVE1MQ2FudmFzRWxlbWVudDo6ZHJhd2luZ0NvbnRleHQoKSBjb25zdAorR3JhcGhpY3ND
b250ZXh0KiBDYW52YXNTdXJmYWNlOjpkcmF3aW5nQ29udGV4dCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGJ1ZmZlcigpID8gbV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpIDogMDsKIH0KIAotSW1hZ2VC
dWZmZXIqIEhUTUxDYW52YXNFbGVtZW50OjpidWZmZXIoKSBjb25zdAorSW1hZ2VCdWZmZXIqIENh
bnZhc1N1cmZhY2U6OmJ1ZmZlcigpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2NyZWF0ZWRJbWFnZUJ1
ZmZlcikKKyAgICBpZiAoIW1faGFzQ3JlYXRlZEltYWdlQnVmZmVyKQogICAgICAgICBjcmVhdGVJ
bWFnZUJ1ZmZlcigpOwogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOwogfQogICAgIAot
QWZmaW5lVHJhbnNmb3JtIEhUTUxDYW52YXNFbGVtZW50OjpiYXNlVHJhbnNmb3JtKCkgY29uc3QK
K0FmZmluZVRyYW5zZm9ybSBDYW52YXNTdXJmYWNlOjpiYXNlVHJhbnNmb3JtKCkgY29uc3QKIHsK
LSAgICBBU1NFUlQobV9jcmVhdGVkSW1hZ2VCdWZmZXIpOworICAgIEFTU0VSVChtX2hhc0NyZWF0
ZWRJbWFnZUJ1ZmZlcik7CiAgICAgRmxvYXRTaXplIHVuc2NhbGVkU2l6ZSh3aWR0aCgpLCBoZWln
aHQoKSk7CiAgICAgSW50U2l6ZSBzaXplID0gY29udmVydExvZ2ljYWxUb0RldmljZSh1bnNjYWxl
ZFNpemUpOwogICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5oCmluZGV4IGEyOWMxYjguLjc5ZTZmMTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5o
CkBAIC0yNyw3ICsyNyw2IEBACiAjaWZuZGVmIEhUTUxDYW52YXNFbGVtZW50X2gKICNkZWZpbmUg
SFRNTENhbnZhc0VsZW1lbnRfaAogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5j
bHVkZSAiQ2FudmFzU3VyZmFjZS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUg
IkhUTUxFbGVtZW50LmgiCkBAIC00MCwxMyArMzksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzOwogY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDsKLWNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBGbG9hdFNp
emU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBIVE1MQ2FudmFzRWxlbWVudDsKLWNs
YXNzIEltYWdlQnVmZmVyOwotY2xhc3MgSW50UG9pbnQ7CiBjbGFzcyBJbnRTaXplOwogCiBjbGFz
cyBDYW52YXNPYnNlcnZlciB7CkBAIC02Myw0NiArNTcsMjggQEAgcHVibGljOgogICAgIEhUTUxD
YW52YXNFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgIHZpcnR1
YWwgfkhUTUxDYW52YXNFbGVtZW50KCk7CiAKLSAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX3NpemUud2lkdGgoKTsgfQotICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3Np
emUuaGVpZ2h0KCk7IH0KICAgICB2b2lkIHNldFdpZHRoKGludCk7CiAgICAgdm9pZCBzZXRIZWln
aHQoaW50KTsKIAotICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
RXhjZXB0aW9uQ29kZSYpOwotCiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogZ2V0Q29udGV4
dChjb25zdCBTdHJpbmcmLCBDYW52YXNDb250ZXh0QXR0cmlidXRlcyogYXR0cmlidXRlcyA9IDAp
OwogCi0gICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQot
ICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQorICAgIHZvaWQgc2V0U2l6ZShj
b25zdCBJbnRTaXplJiBuZXdTaXplKQogICAgIHsgCi0gICAgICAgIGlmIChzaXplID09IG1fc2l6
ZSkKKyAgICAgICAgaWYgKG5ld1NpemUgPT0gc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBtX2lnbm9yZVJlc2V0ID0gdHJ1ZTsgCi0gICAgICAgIHNldFdpZHRoKHNpemUud2lk
dGgoKSk7Ci0gICAgICAgIHNldEhlaWdodChzaXplLmhlaWdodCgpKTsKKyAgICAgICAgc2V0V2lk
dGgobmV3U2l6ZS53aWR0aCgpKTsKKyAgICAgICAgc2V0SGVpZ2h0KG5ld1NpemUuaGVpZ2h0KCkp
OwogICAgICAgICBtX2lnbm9yZVJlc2V0ID0gZmFsc2U7CiAgICAgICAgIHJlc2V0KCk7CiAgICAg
fQogCi0gICAgdm9pZCB3aWxsRHJhdyhjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgd2lsbERyYXcoY29uc3QgRmxvYXRSZWN0Jik7CiAKICAgICB2b2lkIHBhaW50KEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCogZHJhd2lu
Z0NvbnRleHQoKSBjb25zdDsKLQotICAgIEltYWdlQnVmZmVyKiBidWZmZXIoKSBjb25zdDsKLQot
ICAgIEludFJlY3QgY29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFJlY3QmKSBjb25z
dDsKLSAgICBJbnRTaXplIGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRTaXplJikg
Y29uc3Q7Ci0gICAgSW50UG9pbnQgY29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFBv
aW50JikgY29uc3Q7Ci0KLSAgICB2b2lkIHNldE9yaWdpblRhaW50ZWQoKSB7IG1fb3JpZ2luQ2xl
YW4gPSBmYWxzZTsgfSAKLSAgICBib29sIG9yaWdpbkNsZWFuKCkgY29uc3QgeyByZXR1cm4gbV9v
cmlnaW5DbGVhbjsgfQotCiAgICAgdm9pZCBzZXRPYnNlcnZlcihDYW52YXNPYnNlcnZlciogb2Jz
ZXJ2ZXIpIHsgbV9vYnNlcnZlciA9IG9ic2VydmVyOyB9CiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0g
YmFzZVRyYW5zZm9ybSgpIGNvbnN0OwotCiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogcmVu
ZGVyaW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQogCiAjaWYg
RU5BQkxFKDNEX0NBTlZBUykgICAgCkBAIC0xMTgsMjQgKzk0LDE1IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwogICAg
IHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRl
clN0eWxlKik7CiAKLSAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3Q7CiAgICAgdm9p
ZCByZXNldCgpOwogCi0gICAgc3RhdGljIGNvbnN0IGZsb2F0IE1heENhbnZhc0FyZWE7Ci0KICAg
ICBib29sIG1fcmVuZGVyZXJJc0NhbnZhczsKIAogICAgIE93blB0cjxDYW52YXNSZW5kZXJpbmdD
b250ZXh0PiBtX2NvbnRleHQ7Ci0gICAgSW50U2l6ZSBtX3NpemU7ICAgIAogICAgIENhbnZhc09i
c2VydmVyKiBtX29ic2VydmVyOwogCi0gICAgYm9vbCBtX29yaWdpbkNsZWFuOwogICAgIGJvb2wg
bV9pZ25vcmVSZXNldDsKICAgICBGbG9hdFJlY3QgbV9kaXJ0eVJlY3Q7Ci0KLSAgICAvLyBtX2Ny
ZWF0ZWRJbWFnZUJ1ZmZlciBtZWFucyB3ZSB0cmllZCB0byBtYWxsb2MgdGhlIGJ1ZmZlci4gIFdl
IGRpZG4ndCBuZWNlc3NhcmlseSBnZXQgaXQuCi0gICAgbXV0YWJsZSBib29sIG1fY3JlYXRlZElt
YWdlQnVmZmVyOwotICAgIG11dGFibGUgT3duUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVy
OwogfTsKIAogfSAvL25hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49646</attachid>
            <date>2010-02-26 14:27:58 -0800</date>
            <delta_ts>2010-03-02 15:50:57 -0800</delta_ts>
            <desc>Proposed fix.</desc>
            <filename>bug35453.txt</filename>
            <type>text/plain</type>
            <size>17078</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0NhbnZhc1N1cmZhY2UuY3BwIGIvV2ViQ29yZS9kb20v
Q2FudmFzU3VyZmFjZS5jcHAKaW5kZXggNjljNzk1MS4uYWEwYTBiZSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9kb20vQ2FudmFzU3VyZmFjZS5jcHAKKysrIGIvV2ViQ29yZS9kb20vQ2FudmFzU3VyZmFj
ZS5jcHAKQEAgLTI2LDYgKzI2LDEzMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkNhbnZhc1N1cmZhY2UuaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIk1J
TUVUeXBlUmVnaXN0cnkuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBUaGVzZSB2YWx1
ZXMgY29tZSBmcm9tIHRoZSBXaGF0V0cgc3BlYy4KK2NvbnN0IGludCBDYW52YXNTdXJmYWNlOjpE
ZWZhdWx0V2lkdGggPSAzMDA7Citjb25zdCBpbnQgQ2FudmFzU3VyZmFjZTo6RGVmYXVsdEhlaWdo
dCA9IDE1MDsKKworLy8gRmlyZWZveCBsaW1pdHMgd2lkdGgvaGVpZ2h0IHRvIDMyNzY3IHBpeGVs
cywgYnV0IHNsb3dzIGRvd24gZHJhbWF0aWNhbGx5IGJlZm9yZSBpdAorLy8gcmVhY2hlcyB0aGF0
IGxpbWl0LiBXZSBsaW1pdCBieSBhcmVhIGluc3RlYWQsIGdpdmluZyB1cyBsYXJnZXIgbWF4aW11
bSBkaW1lbnNpb25zLAorLy8gaW4gZXhjaGFuZ2UgZm9yIGEgc21hbGxlciBtYXhpbXVtIGNhbnZh
cyBzaXplLgorY29uc3QgZmxvYXQgQ2FudmFzU3VyZmFjZTo6TWF4Q2FudmFzQXJlYSA9IDMyNzY4
ICogODE5MjsgLy8gTWF4aW11bSBjYW52YXMgYXJlYSBpbiBDU1MgcGl4ZWxzCisKK0NhbnZhc1N1
cmZhY2U6OkNhbnZhc1N1cmZhY2UoZmxvYXQgcGFnZVNjYWxlRmFjdG9yKQorICAgIDogbV9zaXpl
KERlZmF1bHRXaWR0aCwgRGVmYXVsdEhlaWdodCkKKyAgICAsIG1fcGFnZVNjYWxlRmFjdG9yKHBh
Z2VTY2FsZUZhY3RvcikKKyAgICAsIG1fb3JpZ2luQ2xlYW4odHJ1ZSkKKyAgICAsIG1faGFzQ3Jl
YXRlZEltYWdlQnVmZmVyKGZhbHNlKQoreworfQorCitDYW52YXNTdXJmYWNlOjp+Q2FudmFzU3Vy
ZmFjZSgpCit7Cit9CisKK3ZvaWQgQ2FudmFzU3VyZmFjZTo6c2V0U3VyZmFjZVNpemUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBtX3NpemUgPSBzaXplOworICAgIG1faGFzQ3JlYXRlZElt
YWdlQnVmZmVyID0gZmFsc2U7CisgICAgbV9pbWFnZUJ1ZmZlci5jbGVhcigpOworfQorCitTdHJp
bmcgQ2FudmFzU3VyZmFjZTo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIGlmICghbV9vcmlnaW5DbGVhbikgeworICAgICAgICBlYyA9
IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIH0KKworICAgIGlm
IChtX3NpemUuaXNFbXB0eSgpIHx8ICFidWZmZXIoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygi
ZGF0YTosIik7CisKKyAgICAvLyBGSVhNRTogTWFrZSBpc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVG
b3JFbmNvZGluZyB0aHJlYWRzYWZlICh0byBhbGxvdyB0aGlzIG1ldGhvZCB0byBiZSB1c2VkIG9u
IGEgd29ya2VyIHRocmVhZCkuCisgICAgaWYgKG1pbWVUeXBlLmlzTnVsbCgpIHx8ICFNSU1FVHlw
ZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkp
CisgICAgICAgIHJldHVybiBidWZmZXIoKS0+dG9EYXRhVVJMKCJpbWFnZS9wbmciKTsKKworICAg
IHJldHVybiBidWZmZXIoKS0+dG9EYXRhVVJMKG1pbWVUeXBlKTsKK30KKwordm9pZCBDYW52YXNT
dXJmYWNlOjp3aWxsRHJhdyhjb25zdCBGbG9hdFJlY3QmKQoreworICAgIGlmIChtX2ltYWdlQnVm
ZmVyKQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5jbGVhckltYWdlKCk7Cit9CisKK0ludFJlY3Qg
Q2FudmFzU3VyZmFjZTo6Y29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFJlY3QmIGxv
Z2ljYWxSZWN0KSBjb25zdAoreworICAgIHJldHVybiBJbnRSZWN0KGNvbnZlcnRMb2dpY2FsVG9E
ZXZpY2UobG9naWNhbFJlY3QubG9jYXRpb24oKSksIGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UobG9n
aWNhbFJlY3Quc2l6ZSgpKSk7Cit9CisKK0ludFNpemUgQ2FudmFzU3VyZmFjZTo6Y29udmVydExv
Z2ljYWxUb0RldmljZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplKSBjb25zdAoreworICAg
IGZsb2F0IHdmID0gY2VpbGYobG9naWNhbFNpemUud2lkdGgoKSAqIG1fcGFnZVNjYWxlRmFjdG9y
KTsKKyAgICBmbG9hdCBoZiA9IGNlaWxmKGxvZ2ljYWxTaXplLmhlaWdodCgpICogbV9wYWdlU2Nh
bGVGYWN0b3IpOworCisgICAgaWYgKCEod2YgPj0gMSAmJiBoZiA+PSAxICYmIHdmICogaGYgPD0g
TWF4Q2FudmFzQXJlYSkpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICByZXR1cm4g
SW50U2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4od2YpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
aGYpKTsKK30KKworSW50UG9pbnQgQ2FudmFzU3VyZmFjZTo6Y29udmVydExvZ2ljYWxUb0Rldmlj
ZShjb25zdCBGbG9hdFBvaW50JiBsb2dpY2FsUG9zKSBjb25zdAoreworICAgIGZsb2F0IHhmID0g
bG9naWNhbFBvcy54KCkgKiBtX3BhZ2VTY2FsZUZhY3RvcjsKKyAgICBmbG9hdCB5ZiA9IGxvZ2lj
YWxQb3MueSgpICogbV9wYWdlU2NhbGVGYWN0b3I7CisKKyAgICByZXR1cm4gSW50UG9pbnQoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHhmKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHlmKSk7Cit9CisK
K3ZvaWQgQ2FudmFzU3VyZmFjZTo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdAoreworICAgIEFT
U0VSVCghbV9pbWFnZUJ1ZmZlcik7CisKKyAgICBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlciA9IHRy
dWU7CisKKyAgICBGbG9hdFNpemUgdW5zY2FsZWRTaXplKHdpZHRoKCksIGhlaWdodCgpKTsKKyAg
ICBJbnRTaXplIHNpemUgPSBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKHVuc2NhbGVkU2l6ZSk7Cisg
ICAgaWYgKCFzaXplLndpZHRoKCkgfHwgIXNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUpOworICAgIC8v
IFRoZSBjb252ZXJ0TG9naWNhbFRvRGV2aWNlIE1heENhbnZhc0FyZWEgY2hlY2sgc2hvdWxkIHBy
ZXZlbnQgY29tbW9uIGNhc2VzCisgICAgLy8gd2hlcmUgSW1hZ2VCdWZmZXI6OmNyZWF0ZSgpIHJl
dHVybnMgMCwgaG93ZXZlciB3ZSBjb3VsZCBzdGlsbCBiZSBsb3cgb24gbWVtb3J5LgorICAgIGlm
ICghbV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIG1faW1hZ2VCdWZmZXItPmNv
bnRleHQoKS0+c2NhbGUoRmxvYXRTaXplKHNpemUud2lkdGgoKSAvIHVuc2NhbGVkU2l6ZS53aWR0
aCgpLCBzaXplLmhlaWdodCgpIC8gdW5zY2FsZWRTaXplLmhlaWdodCgpKSk7CisgICAgbV9pbWFn
ZUJ1ZmZlci0+Y29udGV4dCgpLT5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyh0cnVlKTsKK30K
KworR3JhcGhpY3NDb250ZXh0KiBDYW52YXNTdXJmYWNlOjpkcmF3aW5nQ29udGV4dCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGJ1ZmZlcigpID8gbV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpIDogMDsK
K30KKworSW1hZ2VCdWZmZXIqIENhbnZhc1N1cmZhY2U6OmJ1ZmZlcigpIGNvbnN0Cit7CisgICAg
aWYgKCFtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcikKKyAgICAgICAgY3JlYXRlSW1hZ2VCdWZmZXIo
KTsKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKK30KKworQWZmaW5lVHJhbnNmb3Jt
IENhbnZhc1N1cmZhY2U6OmJhc2VUcmFuc2Zvcm0oKSBjb25zdAoreworICAgIEFTU0VSVChtX2hh
c0NyZWF0ZWRJbWFnZUJ1ZmZlcik7CisgICAgRmxvYXRTaXplIHVuc2NhbGVkU2l6ZSh3aWR0aCgp
LCBoZWlnaHQoKSk7CisgICAgSW50U2l6ZSBzaXplID0gY29udmVydExvZ2ljYWxUb0RldmljZSh1
bnNjYWxlZFNpemUpOworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07CisgICAgaWYgKHNp
emUud2lkdGgoKSAmJiBzaXplLmhlaWdodCgpKQorICAgICAgICB0cmFuc2Zvcm0uc2NhbGVOb25V
bmlmb3JtKHNpemUud2lkdGgoKSAvIHVuc2NhbGVkU2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
IC8gdW5zY2FsZWRTaXplLmhlaWdodCgpKTsKKyAgICB0cmFuc2Zvcm0ubXVsdGlwbHkobV9pbWFn
ZUJ1ZmZlci0+YmFzZVRyYW5zZm9ybSgpKTsKKyAgICByZXR1cm4gdHJhbnNmb3JtOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9DYW52YXNTdXJm
YWNlLmggYi9XZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmgKaW5kZXggMTE4ZGI4Zi4uMjJmNzlk
MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5oCisrKyBiL1dlYkNvcmUv
ZG9tL0NhbnZhc1N1cmZhY2UuaApAQCAtMjYsMTQgKzI2LDcyIEBACiAjaWZuZGVmIENhbnZhc1N1
cmZhY2VfaAogI2RlZmluZSBDYW52YXNTdXJmYWNlX2gKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
ICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBBZmZpbmVUcmFuc2Zvcm07CitjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgRmxvYXRSZWN0
OworY2xhc3MgRmxvYXRTaXplOworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgSW1hZ2VC
dWZmZXI7CitjbGFzcyBJbnRQb2ludDsKK2NsYXNzIFN0cmluZzsKKwordHlwZWRlZiBpbnQgRXhj
ZXB0aW9uQ29kZTsKKwogY2xhc3MgQ2FudmFzU3VyZmFjZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7
CiBwdWJsaWM6CisgICAgQ2FudmFzU3VyZmFjZShmbG9hdCBwYWdlU2NhbGVGYWN0b3IpOworICAg
IHZpcnR1YWwgfkNhbnZhc1N1cmZhY2UoKTsKKworICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZS53aWR0aCgpOyB9CisgICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZS5oZWlnaHQoKTsgfQorCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbERyYXcoY29uc3Qg
RmxvYXRSZWN0Jik7CisKKyAgICBHcmFwaGljc0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgY29u
c3Q7CisKKyAgICBJbWFnZUJ1ZmZlciogYnVmZmVyKCkgY29uc3Q7CisKKyAgICBJbnRSZWN0IGNv
bnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisgICAgSW50U2l6
ZSBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0OworICAgIElu
dFBvaW50IGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0Owor
CisgICAgdm9pZCBzZXRPcmlnaW5UYWludGVkKCkgeyBtX29yaWdpbkNsZWFuID0gZmFsc2U7IH0K
KyAgICBib29sIG9yaWdpbkNsZWFuKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5DbGVhbjsgfQor
CisgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdDsKKworcHJvdGVjdGVk
OgorICAgIHZvaWQgc2V0U3VyZmFjZVNpemUoY29uc3QgSW50U2l6ZSYpOworICAgIGJvb2wgaGFz
Q3JlYXRlZEltYWdlQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDcmVhdGVkSW1hZ2VCdWZm
ZXI7IH0KKworICAgIHN0YXRpYyBjb25zdCBpbnQgRGVmYXVsdFdpZHRoOworICAgIHN0YXRpYyBj
b25zdCBpbnQgRGVmYXVsdEhlaWdodDsKIAogcHJpdmF0ZToKKyAgICB2b2lkIGNyZWF0ZUltYWdl
QnVmZmVyKCkgY29uc3Q7CisKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2FudmFzQXJlYTsK
KworICAgIEludFNpemUgbV9zaXplOworCisgICAgZmxvYXQgbV9wYWdlU2NhbGVGYWN0b3I7Cisg
ICAgYm9vbCBtX29yaWdpbkNsZWFuOworCisgICAgLy8gbV9jcmVhdGVkSW1hZ2VCdWZmZXIgbWVh
bnMgd2UgdHJpZWQgdG8gbWFsbG9jIHRoZSBidWZmZXIuICBXZSBkaWRuJ3QgbmVjZXNzYXJpbHkg
Z2V0IGl0LgorICAgIG11dGFibGUgYm9vbCBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcjsKKyAgICBt
dXRhYmxlIE93blB0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVu
dC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCmluZGV4IGFkZmZlNGEu
LmM4ODZmNTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAK
KysrIGIvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApAQCAtMjgsMjIgKzI4LDIw
IEBACiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkNhbnZhc0Nv
bnRleHRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiQ2FudmFzR3JhZGllbnQuaCIKLSNpbmNsdWRl
ICJDYW52YXNQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgi
CiAjaWYgRU5BQkxFKDNEX0NBTlZBUykgICAgCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0QXR0cmli
dXRlcy5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgogI2VuZGlmCisjaW5j
bHVkZSAiQ2FudmFzR3JhZGllbnQuaCIKKyNpbmNsdWRlICJDYW52YXNQYXR0ZXJuLmgiCiAjaW5j
bHVkZSAiQ2FudmFzU3R5bGUuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2lu
Y2x1ZGUgIk1hcHBlZEF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJS
ZW5kZXJIVE1MQ2FudmFzLmgiCkBAIC01NSwyMiArNTMsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi0vLyBUaGVzZSB2YWx1ZXMgY29tZSBm
cm9tIHRoZSBXaGF0V0cgc3BlYy4KLXN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdFdpZHRoID0gMzAw
Owotc3RhdGljIGNvbnN0IGludCBkZWZhdWx0SGVpZ2h0ID0gMTUwOwotCi0vLyBGaXJlZm94IGxp
bWl0cyB3aWR0aC9oZWlnaHQgdG8gMzI3NjcgcGl4ZWxzLCBidXQgc2xvd3MgZG93biBkcmFtYXRp
Y2FsbHkgYmVmb3JlIGl0IAotLy8gcmVhY2hlcyB0aGF0IGxpbWl0LiBXZSBsaW1pdCBieSBhcmVh
IGluc3RlYWQsIGdpdmluZyB1cyBsYXJnZXIgbWF4aW11bSBkaW1lbnNpb25zLAotLy8gaW4gZXhj
aGFuZ2UgZm9yIGEgc21hbGxlciBtYXhpbXVtIGNhbnZhcyBzaXplLgotY29uc3QgZmxvYXQgSFRN
TENhbnZhc0VsZW1lbnQ6Ok1heENhbnZhc0FyZWEgPSAzMjc2OCAqIDgxOTI7IC8vIE1heGltdW0g
Y2FudmFzIGFyZWEgaW4gQ1NTIHBpeGVscwotCiBIVE1MQ2FudmFzRWxlbWVudDo6SFRNTENhbnZh
c0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAg
ICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKLSAgICAsIG1fc2l6ZShkZWZhdWx0V2lkdGgs
IGRlZmF1bHRIZWlnaHQpCisgICAgLCBDYW52YXNTdXJmYWNlKGRvYy0+ZnJhbWUoKSA/IGRvYy0+
ZnJhbWUoKS0+cGFnZSgpLT5jaHJvbWUoKS0+c2NhbGVGYWN0b3IoKSA6IDEpCiAgICAgLCBtX29i
c2VydmVyKDApCi0gICAgLCBtX29yaWdpbkNsZWFuKHRydWUpCiAgICAgLCBtX2lnbm9yZVJlc2V0
KGZhbHNlKQotICAgICwgbV9jcmVhdGVkSW1hZ2VCdWZmZXIoZmFsc2UpCiB7CiAgICAgQVNTRVJU
KGhhc1RhZ05hbWUoY2FudmFzVGFnKSk7CiB9CkBAIC0xMzMsMjIgKzEyMCw2IEBAIHZvaWQgSFRN
TENhbnZhc0VsZW1lbnQ6OnNldFdpZHRoKGludCB2YWx1ZSkKICAgICBzZXRBdHRyaWJ1dGUod2lk
dGhBdHRyLCBTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwogfQogCi1TdHJpbmcgSFRNTENhbnZhc0Vs
ZW1lbnQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBpZiAoIW1fb3JpZ2luQ2xlYW4pIHsKLSAgICAgICAgZWMgPSBTRUNVUklUWV9F
UlI7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBpZiAobV9zaXplLmlz
RW1wdHkoKSB8fCAhYnVmZmVyKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoImRhdGE6LCIpOwot
Ci0gICAgaWYgKG1pbWVUeXBlLmlzTnVsbCgpIHx8ICFNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBv
cnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpCi0gICAgICAgIHJldHVybiBi
dWZmZXIoKS0+dG9EYXRhVVJMKCJpbWFnZS9wbmciKTsKLQotICAgIHJldHVybiBidWZmZXIoKS0+
dG9EYXRhVVJMKG1pbWVUeXBlKTsKLX0KLQogQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogSFRNTENh
bnZhc0VsZW1lbnQ6OmdldENvbnRleHQoY29uc3QgU3RyaW5nJiB0eXBlLCBDYW52YXNDb250ZXh0
QXR0cmlidXRlcyogYXR0cnMpCiB7CiAgICAgLy8gQSBDYW52YXMgY2FuIGVpdGhlciBiZSAiMkQi
IG9yICJ3ZWJnbCIgYnV0IG5ldmVyIGJvdGguIElmIHlvdSByZXF1ZXN0IGEgMkQgY2FudmFzIGFu
ZCB0aGUgZXhpc3RpbmcKQEAgLTE5MywxMiArMTY0LDExIEBAIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQqIEhUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KGNvbnN0IFN0cmluZyYgdHlwZSwgQ2Fu
dmFzCiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OndpbGxEcmF3KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKIHsKLSAgICBpZiAobV9pbWFnZUJ1ZmZlcikKLSAgICAgICAgbV9pbWFnZUJ1ZmZlci0+
Y2xlYXJJbWFnZSgpOwotICAgIAorICAgIENhbnZhc1N1cmZhY2U6OndpbGxEcmF3KHJlY3QpOwor
CiAgICAgaWYgKFJlbmRlckJveCogcm8gPSByZW5kZXJCb3goKSkgewogICAgICAgICBGbG9hdFJl
Y3QgZGVzdFJlY3QgPSByby0+Y29udGVudEJveFJlY3QoKTsKLSAgICAgICAgRmxvYXRSZWN0IHIg
PSBtYXBSZWN0KHJlY3QsIEZsb2F0UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhl
aWdodCgpKSwgZGVzdFJlY3QpOworICAgICAgICBGbG9hdFJlY3QgciA9IG1hcFJlY3QocmVjdCwg
RmxvYXRSZWN0KDAsIDAsIHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpLCBkZXN0UmVj
dCk7CiAgICAgICAgIHIuaW50ZXJzZWN0KGRlc3RSZWN0KTsKICAgICAgICAgaWYgKG1fZGlydHlS
ZWN0LmNvbnRhaW5zKHIpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjE5LDI4ICsxODksMjYg
QEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQoKQogICAgIGJvb2wgb2s7CiAgICAgaW50
IHcgPSBnZXRBdHRyaWJ1dGUod2lkdGhBdHRyKS50b0ludCgmb2spOwogICAgIGlmICghb2spCi0g
ICAgICAgIHcgPSBkZWZhdWx0V2lkdGg7CisgICAgICAgIHcgPSBEZWZhdWx0V2lkdGg7CiAgICAg
aW50IGggPSBnZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0cikudG9JbnQoJm9rKTsKICAgICBpZiAoIW9r
KQotICAgICAgICBoID0gZGVmYXVsdEhlaWdodDsKKyAgICAgICAgaCA9IERlZmF1bHRIZWlnaHQ7
CiAKLSAgICBJbnRTaXplIG9sZFNpemUgPSBtX3NpemU7Ci0gICAgbV9zaXplID0gSW50U2l6ZSh3
LCBoKTsKKyAgICBJbnRTaXplIG9sZFNpemUgPSBzaXplKCk7CisgICAgc2V0U3VyZmFjZVNpemUo
SW50U2l6ZSh3LCBoKSk7CiAKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQogICAgIGlmIChtX2NvbnRl
eHQgJiYgbV9jb250ZXh0LT5pczNkKCkpCiAgICAgICAgIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVy
aW5nQ29udGV4dCo+KG1fY29udGV4dC5nZXQoKSktPnJlc2hhcGUod2lkdGgoKSwgaGVpZ2h0KCkp
OwogI2VuZGlmCiAKLSAgICBib29sIGhhZEltYWdlQnVmZmVyID0gbV9jcmVhdGVkSW1hZ2VCdWZm
ZXI7Ci0gICAgbV9jcmVhdGVkSW1hZ2VCdWZmZXIgPSBmYWxzZTsKLSAgICBtX2ltYWdlQnVmZmVy
LmNsZWFyKCk7CisgICAgYm9vbCBoYWRJbWFnZUJ1ZmZlciA9IGhhc0NyZWF0ZWRJbWFnZUJ1ZmZl
cigpOwogICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJkKCkpCiAgICAgICAgIHN0
YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCo+KG1fY29udGV4dC5nZXQoKSktPnJl
c2V0KCk7CiAKICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVy
KCkpIHsKICAgICAgICAgaWYgKG1fcmVuZGVyZXJJc0NhbnZhcykgewotICAgICAgICAgICAgaWYg
KG9sZFNpemUgIT0gbV9zaXplKQorICAgICAgICAgICAgaWYgKG9sZFNpemUgIT0gc2l6ZSgpKQog
ICAgICAgICAgICAgICAgIHRvUmVuZGVySFRNTENhbnZhcyhyZW5kZXJlciktPmNhbnZhc1NpemVD
aGFuZ2VkKCk7CiAgICAgICAgICAgICBpZiAoaGFkSW1hZ2VCdWZmZXIpCiAgICAgICAgICAgICAg
ICAgcmVuZGVyZXItPnJlcGFpbnQoKTsKQEAgLTI2NywxMCArMjM1LDEzIEBAIHZvaWQgSFRNTENh
bnZhc0VsZW1lbnQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVj
dCYgcikKICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChtX2ltYWdlQnVmZmVyKSB7Ci0gICAgICAg
IEltYWdlKiBpbWFnZSA9IG1faW1hZ2VCdWZmZXItPmltYWdlKCk7Ci0gICAgICAgIGlmIChpbWFn
ZSkKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgRGV2aWNlQ29sb3JTcGFj
ZSwgcik7CisgICAgaWYgKGhhc0NyZWF0ZWRJbWFnZUJ1ZmZlcigpKSB7CisgICAgICAgIEltYWdl
QnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGJ1ZmZlcigpOworICAgICAgICBpZiAoaW1hZ2VCdWZmZXIp
IHsKKyAgICAgICAgICAgIEltYWdlKiBpbWFnZSA9IGltYWdlQnVmZmVyLT5pbWFnZSgpOworICAg
ICAgICAgICAgaWYgKGltYWdlKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShp
bWFnZSwgRGV2aWNlQ29sb3JTcGFjZSwgcik7CisgICAgICAgIH0KICAgICB9CiAKICNpZiBFTkFC
TEUoM0RfQ0FOVkFTKQpAQCAtMjc5LDc2ICsyNTAsNiBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50
OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHIpCiAjZW5k
aWYKIH0KIAotSW50UmVjdCBIVE1MQ2FudmFzRWxlbWVudDo6Y29udmVydExvZ2ljYWxUb0Rldmlj
ZShjb25zdCBGbG9hdFJlY3QmIGxvZ2ljYWxSZWN0KSBjb25zdAotewotICAgIHJldHVybiBJbnRS
ZWN0KGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UobG9naWNhbFJlY3QubG9jYXRpb24oKSksIGNvbnZl
cnRMb2dpY2FsVG9EZXZpY2UobG9naWNhbFJlY3Quc2l6ZSgpKSk7Ci19Ci0KLUludFNpemUgSFRN
TENhbnZhc0VsZW1lbnQ6OmNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRTaXplJiBs
b2dpY2FsU2l6ZSkgY29uc3QKLXsKLSAgICBmbG9hdCBwYWdlU2NhbGVGYWN0b3IgPSBkb2N1bWVu
dCgpLT5mcmFtZSgpID8gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+cGFnZSgpLT5jaHJvbWUoKS0+c2Nh
bGVGYWN0b3IoKSA6IDEuMGY7Ci0gICAgZmxvYXQgd2YgPSBjZWlsZihsb2dpY2FsU2l6ZS53aWR0
aCgpICogcGFnZVNjYWxlRmFjdG9yKTsKLSAgICBmbG9hdCBoZiA9IGNlaWxmKGxvZ2ljYWxTaXpl
LmhlaWdodCgpICogcGFnZVNjYWxlRmFjdG9yKTsKLSAgICAKLSAgICBpZiAoISh3ZiA+PSAxICYm
IGhmID49IDEgJiYgd2YgKiBoZiA8PSBNYXhDYW52YXNBcmVhKSkKLSAgICAgICAgcmV0dXJuIElu
dFNpemUoKTsKLQotICAgIHJldHVybiBJbnRTaXplKHN0YXRpY19jYXN0PHVuc2lnbmVkPih3Ziks
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihoZikpOwotfQotCi1JbnRQb2ludCBIVE1MQ2FudmFzRWxl
bWVudDo6Y29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFBvaW50JiBsb2dpY2FsUG9z
KSBjb25zdAotewotICAgIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciA9IGRvY3VtZW50KCktPmZyYW1l
KCkgPyBkb2N1bWVudCgpLT5mcmFtZSgpLT5wYWdlKCktPmNocm9tZSgpLT5zY2FsZUZhY3Rvcigp
IDogMS4wZjsKLSAgICBmbG9hdCB4ZiA9IGxvZ2ljYWxQb3MueCgpICogcGFnZVNjYWxlRmFjdG9y
OwotICAgIGZsb2F0IHlmID0gbG9naWNhbFBvcy55KCkgKiBwYWdlU2NhbGVGYWN0b3I7Ci0gICAg
Ci0gICAgcmV0dXJuIEludFBvaW50KHN0YXRpY19jYXN0PHVuc2lnbmVkPih4ZiksIHN0YXRpY19j
YXN0PHVuc2lnbmVkPih5ZikpOwotfQotCi12b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJ
bWFnZUJ1ZmZlcigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX2ltYWdlQnVmZmVyKTsKLQotICAg
IG1fY3JlYXRlZEltYWdlQnVmZmVyID0gdHJ1ZTsKLSAgICAKLSAgICBGbG9hdFNpemUgdW5zY2Fs
ZWRTaXplKHdpZHRoKCksIGhlaWdodCgpKTsKLSAgICBJbnRTaXplIHNpemUgPSBjb252ZXJ0TG9n
aWNhbFRvRGV2aWNlKHVuc2NhbGVkU2l6ZSk7Ci0gICAgaWYgKCFzaXplLndpZHRoKCkgfHwgIXNp
emUuaGVpZ2h0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHNpemUpOwotICAgIC8vIFRoZSBjb252ZXJ0TG9naWNhbFRvRGV2aWNl
IE1heENhbnZhc0FyZWEgY2hlY2sgc2hvdWxkIHByZXZlbnQgY29tbW9uIGNhc2VzCi0gICAgLy8g
d2hlcmUgSW1hZ2VCdWZmZXI6OmNyZWF0ZSgpIHJldHVybnMgTlVMTCwgaG93ZXZlciB3ZSBjb3Vs
ZCBzdGlsbCBiZSBsb3cgb24gbWVtb3J5LgotICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKLSAgICAg
ICAgcmV0dXJuOwotICAgIG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+c2NhbGUoRmxvYXRTaXpl
KHNpemUud2lkdGgoKSAvIHVuc2NhbGVkU2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpIC8gdW5z
Y2FsZWRTaXplLmhlaWdodCgpKSk7Ci0gICAgbV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5zZXRT
aGFkb3dzSWdub3JlVHJhbnNmb3Jtcyh0cnVlKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0KiBIVE1M
Q2FudmFzRWxlbWVudDo6ZHJhd2luZ0NvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBidWZm
ZXIoKSA/IG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKSA6IDA7Ci19Ci0KLUltYWdlQnVmZmVyKiBI
VE1MQ2FudmFzRWxlbWVudDo6YnVmZmVyKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fY3JlYXRlZElt
YWdlQnVmZmVyKQotICAgICAgICBjcmVhdGVJbWFnZUJ1ZmZlcigpOwotICAgIHJldHVybiBtX2lt
YWdlQnVmZmVyLmdldCgpOwotfQotICAgIAotQWZmaW5lVHJhbnNmb3JtIEhUTUxDYW52YXNFbGVt
ZW50OjpiYXNlVHJhbnNmb3JtKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9jcmVhdGVkSW1hZ2VC
dWZmZXIpOwotICAgIEZsb2F0U2l6ZSB1bnNjYWxlZFNpemUod2lkdGgoKSwgaGVpZ2h0KCkpOwot
ICAgIEludFNpemUgc2l6ZSA9IGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UodW5zY2FsZWRTaXplKTsK
LSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOwotICAgIGlmIChzaXplLndpZHRoKCkgJiYg
c2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgdHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShzaXplLndp
ZHRoKCkgLyB1bnNjYWxlZFNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSAvIHVuc2NhbGVkU2l6
ZS5oZWlnaHQoKSk7Ci0gICAgdHJhbnNmb3JtLm11bHRpcGx5KG1faW1hZ2VCdWZmZXItPmJhc2VU
cmFuc2Zvcm0oKSk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybTsKLX0KLQogI2lmIEVOQUJMRSgzRF9D
QU5WQVMpICAgIAogYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6aXMzRCgpIGNvbnN0CiB7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5oCmluZGV4IGEyOWMxYjguLjc5ZTZmMTUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5oCkBAIC0yNyw3ICsyNyw2IEBACiAjaWZuZGVmIEhUTUxDYW52YXNFbGVtZW50
X2gKICNkZWZpbmUgSFRNTENhbnZhc0VsZW1lbnRfaAogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNm
b3JtLmgiCiAjaW5jbHVkZSAiQ2FudmFzU3VyZmFjZS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCkBAIC00MCwxMyArMzksOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzOwogY2xhc3MgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDsKLWNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1j
bGFzcyBGbG9hdFNpemU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBIVE1MQ2FudmFz
RWxlbWVudDsKLWNsYXNzIEltYWdlQnVmZmVyOwotY2xhc3MgSW50UG9pbnQ7CiBjbGFzcyBJbnRT
aXplOwogCiBjbGFzcyBDYW52YXNPYnNlcnZlciB7CkBAIC02Myw0NiArNTcsMjggQEAgcHVibGlj
OgogICAgIEhUTUxDYW52YXNFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCop
OwogICAgIHZpcnR1YWwgfkhUTUxDYW52YXNFbGVtZW50KCk7CiAKLSAgICBpbnQgd2lkdGgoKSBj
b25zdCB7IHJldHVybiBtX3NpemUud2lkdGgoKTsgfQotICAgIGludCBoZWlnaHQoKSBjb25zdCB7
IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7IH0KICAgICB2b2lkIHNldFdpZHRoKGludCk7CiAgICAg
dm9pZCBzZXRIZWlnaHQoaW50KTsKIAotICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgRXhjZXB0aW9uQ29kZSYpOwotCiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dCogZ2V0Q29udGV4dChjb25zdCBTdHJpbmcmLCBDYW52YXNDb250ZXh0QXR0cmlidXRlcyogYXR0
cmlidXRlcyA9IDApOwogCi0gICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZTsgfQotICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQorICAgIHZv
aWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBuZXdTaXplKQogICAgIHsgCi0gICAgICAgIGlmIChz
aXplID09IG1fc2l6ZSkKKyAgICAgICAgaWYgKG5ld1NpemUgPT0gc2l6ZSgpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBtX2lnbm9yZVJlc2V0ID0gdHJ1ZTsgCi0gICAgICAgIHNldFdp
ZHRoKHNpemUud2lkdGgoKSk7Ci0gICAgICAgIHNldEhlaWdodChzaXplLmhlaWdodCgpKTsKKyAg
ICAgICAgc2V0V2lkdGgobmV3U2l6ZS53aWR0aCgpKTsKKyAgICAgICAgc2V0SGVpZ2h0KG5ld1Np
emUuaGVpZ2h0KCkpOwogICAgICAgICBtX2lnbm9yZVJlc2V0ID0gZmFsc2U7CiAgICAgICAgIHJl
c2V0KCk7CiAgICAgfQogCi0gICAgdm9pZCB3aWxsRHJhdyhjb25zdCBGbG9hdFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgd2lsbERyYXcoY29uc3QgRmxvYXRSZWN0Jik7CiAKICAgICB2b2lkIHBh
aW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKIAotICAgIEdyYXBoaWNzQ29u
dGV4dCogZHJhd2luZ0NvbnRleHQoKSBjb25zdDsKLQotICAgIEltYWdlQnVmZmVyKiBidWZmZXIo
KSBjb25zdDsKLQotICAgIEludFJlY3QgY29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9h
dFJlY3QmKSBjb25zdDsKLSAgICBJbnRTaXplIGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3Qg
RmxvYXRTaXplJikgY29uc3Q7Ci0gICAgSW50UG9pbnQgY29udmVydExvZ2ljYWxUb0RldmljZShj
b25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0KLSAgICB2b2lkIHNldE9yaWdpblRhaW50ZWQoKSB7
IG1fb3JpZ2luQ2xlYW4gPSBmYWxzZTsgfSAKLSAgICBib29sIG9yaWdpbkNsZWFuKCkgY29uc3Qg
eyByZXR1cm4gbV9vcmlnaW5DbGVhbjsgfQotCiAgICAgdm9pZCBzZXRPYnNlcnZlcihDYW52YXNP
YnNlcnZlciogb2JzZXJ2ZXIpIHsgbV9vYnNlcnZlciA9IG9ic2VydmVyOyB9CiAKLSAgICBBZmZp
bmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0OwotCiAgICAgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCogcmVuZGVyaW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQo
KTsgfQogCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykgICAgCkBAIC0xMTgsMjQgKzk0LDE1IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSopOwogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJB
cmVuYSosIFJlbmRlclN0eWxlKik7CiAKLSAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyKCkgY29u
c3Q7CiAgICAgdm9pZCByZXNldCgpOwogCi0gICAgc3RhdGljIGNvbnN0IGZsb2F0IE1heENhbnZh
c0FyZWE7Ci0KICAgICBib29sIG1fcmVuZGVyZXJJc0NhbnZhczsKIAogICAgIE93blB0cjxDYW52
YXNSZW5kZXJpbmdDb250ZXh0PiBtX2NvbnRleHQ7Ci0gICAgSW50U2l6ZSBtX3NpemU7ICAgIAog
ICAgIENhbnZhc09ic2VydmVyKiBtX29ic2VydmVyOwogCi0gICAgYm9vbCBtX29yaWdpbkNsZWFu
OwogICAgIGJvb2wgbV9pZ25vcmVSZXNldDsKICAgICBGbG9hdFJlY3QgbV9kaXJ0eVJlY3Q7Ci0K
LSAgICAvLyBtX2NyZWF0ZWRJbWFnZUJ1ZmZlciBtZWFucyB3ZSB0cmllZCB0byBtYWxsb2MgdGhl
IGJ1ZmZlci4gIFdlIGRpZG4ndCBuZWNlc3NhcmlseSBnZXQgaXQuCi0gICAgbXV0YWJsZSBib29s
IG1fY3JlYXRlZEltYWdlQnVmZmVyOwotICAgIG11dGFibGUgT3duUHRyPEltYWdlQnVmZmVyPiBt
X2ltYWdlQnVmZmVyOwogfTsKIAogfSAvL25hbWVzcGFjZQo=
</data>
<flag name="review"
          id="32574"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49859</attachid>
            <date>2010-03-02 15:50:57 -0800</date>
            <delta_ts>2010-03-02 16:26:27 -0800</delta_ts>
            <desc>Proposed fix.</desc>
            <filename>bug35453.txt</filename>
            <type>text/plain</type>
            <size>21909</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzU2ZDMxNi4uMGFiYWIwOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAxMC0wMi0yNiAgRGF2aWQgTGV2aW4g
IDxsZXZpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTmVlZCB0byBtb3ZlIGl0ZW1zIHRoYXQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEIGRlcGVuZHMgb24gaW50byBDYW52YXNTdXJmYWNlLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzU0NTMKKworICAgICAgICBQcmVwYXJ0b3J5
IGNoYW5nZXMgdG8gYWxsb3cgZm9yIGFuIE9mZnNjcmVlbkNhbnZhcyB3aGljaCBtYXkgYmUgdXNl
ZCBpbiBhIHdvcmtlcgorICAgICAgICBvciBvdXRzaWRlIG9mIHRoZSBET00uCisKKyAgICAgICAg
Tm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHksIHNvIG5ldyB0ZXN0cy4KKworICAgICAgICAqIGRv
bS9DYW52YXNTdXJmYWNlLmNwcDogTW92ZWQgZnVuY3Rpb25hbGl0eSB0aGF0IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRCBkZXBlbmRzIG9uCisgICAgICAgIGludG8gdGhpcyBjbGFzcyAoYW5kIHJl
bW92ZWQgZGVwZW5kZW5jaWVzIG9uIGRvY3VtZW50L2h0bWwgZWxlbWVudCkuCisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNTdXJmYWNlOjpDYW52YXNTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1N1cmZhY2U6On5DYW52YXNTdXJmYWNlKTogUHV0IHRoZSBkZXNjdHJ1Y3RvciBpbiB0
aGUgY3BwIGZpbGUKKyAgICAgICAgdG8gYXZvaWQgbmVlZGluZyBhY2Nlc3MgdG8gfkltYWdlQnVm
ZmVyIGluIHRoZSBoZWFkZXIgZmlsZS4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N1cmZhY2U6
OnNldFN1cmZhY2VTaXplKTogRG9lcyBiYXNpYyBpdGVtcyBuZWVkZWQKKyAgICAgICAgd2hlbiB0
aGUgc2l6ZSBjaGFuZ2VzLiBJdCBpcyBwcm90ZWN0ZWQgdG8gZm9yY2Ugb3V0c2lkZSBjYWxsZXJz
IHRvIGdvCisgICAgICAgIHRocm91Z2ggSFRNTENhbnZhc0VsZW1lbnQ6OnNldFNpemUuCisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNTdXJmYWNlOjp0b0RhdGFVUkwpOiBKdXN0IG1vdmVkIGZyb20g
SFRNTENhbnZhc0VsZW1lbnQgYW5kCisgICAgICAgIG1hZGUgYSBub3RlIGFib3V0IGEgbWV0aG9k
IHRvIGZpeCBmb3Igd29ya2VyIHVzYWdlLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3VyZmFj
ZTo6d2lsbERyYXcpOiBNYWRlIHRoaXMgdmlydHVhbCB0byBhbGxvdyBhbiBvdmVyaWRlCisgICAg
ICAgIHdoaWNoIHVzZXMgdGhlIHJlbmRlcmJveCBhbmQgdHJhY2tzIGEgZGlydHlSZWN0LgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzU3VyZmFjZTo6Y29udmVydExvZ2ljYWxUb0RldmljZSk6IE1v
dmVkIGFuZCBjaGFuZ2VkIHRvCisgICAgICAgIHJlbHkgb24gYSBtZW1iZXIgdmFyaWFibGUgZm9y
IHBhZ2Ugc2NhbGUgKHRvIGF2b2lkIHVzaW5nIHRoZSBkb2N1bWVudCkuCisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNTdXJmYWNlOjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNTdXJmYWNlOjpkcmF3aW5nQ29udGV4dCk6IFNpbXBsZSBtb3ZlIGZyb20gSFRNTENh
bnZhc0VsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdXJmYWNlOjpidWZmZXIpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N1cmZhY2U6OmJhc2VUcmFuc2Zvcm0pOiBE
aXR0by4KKyAgICAgICAgKiBkb20vQ2FudmFzU3VyZmFjZS5oOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzU3VyZmFjZTo6d2lkdGgpOiBTaW1wbGUgbW92ZSBmcm9tIEhUTUxDYW52YXNFbGVtZW50
LgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3VyZmFjZTo6aGVpZ2h0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNTdXJmYWNlOjpzaXplKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNTdXJmYWNlOjpzZXRPcmlnaW5UYWludGVkKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNTdXJmYWNlOjpvcmlnaW5DbGVhbik6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzU3VyZmFjZTo6aGFzQ3JlYXRlZEltYWdlQnVmZmVyKTogRGl0dG8gKHdpdGgg
c21hbGwgbmFtZSBjaGFuZ2UpLgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OkhUTUxDYW52YXNFbGVtZW50
KTogUGFzcyBpbiB0aGUgc2NhbGUgZmFjdG9yIHRvIENhbnZhc1N1cmZhY2UKKyAgICAgICAgc28g
aXQgZG9lc24ndCBuZWVkIHRoZSBkb2N1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52
YXNFbGVtZW50Ojp3aWxsRHJhdyk6IE1vdmVkIHRoZSByZWxldmFudCBwb3J0aW9uIHRvIENhbnZh
c1N1cmZhY2UuCisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQpOiBT
bWFsbCBjaGFuZ2VzIGR1ZSB0byByZWZhY3RvcmluZy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxD
YW52YXNFbGVtZW50OjpwYWludCk6IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpzZXRTaXplKTog
RGl0dG8uCisKIDIwMTAtMDItMjYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9t
L0NhbnZhc1N1cmZhY2UuY3BwIGIvV2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5jcHAKaW5kZXgg
NjljNzk1MS4uYWEwYTBiZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5j
cHAKKysrIGIvV2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5jcHAKQEAgLTI2LDYgKzI2LDEzMiBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNhbnZhc1N1cmZhY2UuaCIKIAorI2lu
Y2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCisvLyBUaGVzZSB2YWx1ZXMgY29tZSBmcm9tIHRoZSBXaGF0V0cg
c3BlYy4KK2NvbnN0IGludCBDYW52YXNTdXJmYWNlOjpEZWZhdWx0V2lkdGggPSAzMDA7Citjb25z
dCBpbnQgQ2FudmFzU3VyZmFjZTo6RGVmYXVsdEhlaWdodCA9IDE1MDsKKworLy8gRmlyZWZveCBs
aW1pdHMgd2lkdGgvaGVpZ2h0IHRvIDMyNzY3IHBpeGVscywgYnV0IHNsb3dzIGRvd24gZHJhbWF0
aWNhbGx5IGJlZm9yZSBpdAorLy8gcmVhY2hlcyB0aGF0IGxpbWl0LiBXZSBsaW1pdCBieSBhcmVh
IGluc3RlYWQsIGdpdmluZyB1cyBsYXJnZXIgbWF4aW11bSBkaW1lbnNpb25zLAorLy8gaW4gZXhj
aGFuZ2UgZm9yIGEgc21hbGxlciBtYXhpbXVtIGNhbnZhcyBzaXplLgorY29uc3QgZmxvYXQgQ2Fu
dmFzU3VyZmFjZTo6TWF4Q2FudmFzQXJlYSA9IDMyNzY4ICogODE5MjsgLy8gTWF4aW11bSBjYW52
YXMgYXJlYSBpbiBDU1MgcGl4ZWxzCisKK0NhbnZhc1N1cmZhY2U6OkNhbnZhc1N1cmZhY2UoZmxv
YXQgcGFnZVNjYWxlRmFjdG9yKQorICAgIDogbV9zaXplKERlZmF1bHRXaWR0aCwgRGVmYXVsdEhl
aWdodCkKKyAgICAsIG1fcGFnZVNjYWxlRmFjdG9yKHBhZ2VTY2FsZUZhY3RvcikKKyAgICAsIG1f
b3JpZ2luQ2xlYW4odHJ1ZSkKKyAgICAsIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyKGZhbHNlKQor
eworfQorCitDYW52YXNTdXJmYWNlOjp+Q2FudmFzU3VyZmFjZSgpCit7Cit9CisKK3ZvaWQgQ2Fu
dmFzU3VyZmFjZTo6c2V0U3VyZmFjZVNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBt
X3NpemUgPSBzaXplOworICAgIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyID0gZmFsc2U7CisgICAg
bV9pbWFnZUJ1ZmZlci5jbGVhcigpOworfQorCitTdHJpbmcgQ2FudmFzU3VyZmFjZTo6dG9EYXRh
VVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlm
ICghbV9vcmlnaW5DbGVhbikgeworICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAg
cmV0dXJuIFN0cmluZygpOworICAgIH0KKworICAgIGlmIChtX3NpemUuaXNFbXB0eSgpIHx8ICFi
dWZmZXIoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygiZGF0YTosIik7CisKKyAgICAvLyBGSVhN
RTogTWFrZSBpc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyB0aHJlYWRzYWZlICh0
byBhbGxvdyB0aGlzIG1ldGhvZCB0byBiZSB1c2VkIG9uIGEgd29ya2VyIHRocmVhZCkuCisgICAg
aWYgKG1pbWVUeXBlLmlzTnVsbCgpIHx8ICFNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZElt
YWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpCisgICAgICAgIHJldHVybiBidWZmZXIo
KS0+dG9EYXRhVVJMKCJpbWFnZS9wbmciKTsKKworICAgIHJldHVybiBidWZmZXIoKS0+dG9EYXRh
VVJMKG1pbWVUeXBlKTsKK30KKwordm9pZCBDYW52YXNTdXJmYWNlOjp3aWxsRHJhdyhjb25zdCBG
bG9hdFJlY3QmKQoreworICAgIGlmIChtX2ltYWdlQnVmZmVyKQorICAgICAgICBtX2ltYWdlQnVm
ZmVyLT5jbGVhckltYWdlKCk7Cit9CisKK0ludFJlY3QgQ2FudmFzU3VyZmFjZTo6Y29udmVydExv
Z2ljYWxUb0RldmljZShjb25zdCBGbG9hdFJlY3QmIGxvZ2ljYWxSZWN0KSBjb25zdAoreworICAg
IHJldHVybiBJbnRSZWN0KGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UobG9naWNhbFJlY3QubG9jYXRp
b24oKSksIGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UobG9naWNhbFJlY3Quc2l6ZSgpKSk7Cit9CisK
K0ludFNpemUgQ2FudmFzU3VyZmFjZTo6Y29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplKSBjb25zdAoreworICAgIGZsb2F0IHdmID0gY2VpbGYobG9naWNh
bFNpemUud2lkdGgoKSAqIG1fcGFnZVNjYWxlRmFjdG9yKTsKKyAgICBmbG9hdCBoZiA9IGNlaWxm
KGxvZ2ljYWxTaXplLmhlaWdodCgpICogbV9wYWdlU2NhbGVGYWN0b3IpOworCisgICAgaWYgKCEo
d2YgPj0gMSAmJiBoZiA+PSAxICYmIHdmICogaGYgPD0gTWF4Q2FudmFzQXJlYSkpCisgICAgICAg
IHJldHVybiBJbnRTaXplKCk7CisKKyAgICByZXR1cm4gSW50U2l6ZShzdGF0aWNfY2FzdDx1bnNp
Z25lZD4od2YpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGYpKTsKK30KKworSW50UG9pbnQgQ2Fu
dmFzU3VyZmFjZTo6Y29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFBvaW50JiBsb2dp
Y2FsUG9zKSBjb25zdAoreworICAgIGZsb2F0IHhmID0gbG9naWNhbFBvcy54KCkgKiBtX3BhZ2VT
Y2FsZUZhY3RvcjsKKyAgICBmbG9hdCB5ZiA9IGxvZ2ljYWxQb3MueSgpICogbV9wYWdlU2NhbGVG
YWN0b3I7CisKKyAgICByZXR1cm4gSW50UG9pbnQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHhmKSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHlmKSk7Cit9CisKK3ZvaWQgQ2FudmFzU3VyZmFjZTo6Y3Jl
YXRlSW1hZ2VCdWZmZXIoKSBjb25zdAoreworICAgIEFTU0VSVCghbV9pbWFnZUJ1ZmZlcik7CisK
KyAgICBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlciA9IHRydWU7CisKKyAgICBGbG9hdFNpemUgdW5z
Y2FsZWRTaXplKHdpZHRoKCksIGhlaWdodCgpKTsKKyAgICBJbnRTaXplIHNpemUgPSBjb252ZXJ0
TG9naWNhbFRvRGV2aWNlKHVuc2NhbGVkU2l6ZSk7CisgICAgaWYgKCFzaXplLndpZHRoKCkgfHwg
IXNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW1hZ2VCdWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUpOworICAgIC8vIFRoZSBjb252ZXJ0TG9naWNhbFRvRGV2
aWNlIE1heENhbnZhc0FyZWEgY2hlY2sgc2hvdWxkIHByZXZlbnQgY29tbW9uIGNhc2VzCisgICAg
Ly8gd2hlcmUgSW1hZ2VCdWZmZXI6OmNyZWF0ZSgpIHJldHVybnMgMCwgaG93ZXZlciB3ZSBjb3Vs
ZCBzdGlsbCBiZSBsb3cgb24gbWVtb3J5LgorICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuOworICAgIG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+c2NhbGUoRmxvYXRTaXpl
KHNpemUud2lkdGgoKSAvIHVuc2NhbGVkU2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpIC8gdW5z
Y2FsZWRTaXplLmhlaWdodCgpKSk7CisgICAgbV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5zZXRT
aGFkb3dzSWdub3JlVHJhbnNmb3Jtcyh0cnVlKTsKK30KKworR3JhcGhpY3NDb250ZXh0KiBDYW52
YXNTdXJmYWNlOjpkcmF3aW5nQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGJ1ZmZlcigp
ID8gbV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpIDogMDsKK30KKworSW1hZ2VCdWZmZXIqIENhbnZh
c1N1cmZhY2U6OmJ1ZmZlcigpIGNvbnN0Cit7CisgICAgaWYgKCFtX2hhc0NyZWF0ZWRJbWFnZUJ1
ZmZlcikKKyAgICAgICAgY3JlYXRlSW1hZ2VCdWZmZXIoKTsKKyAgICByZXR1cm4gbV9pbWFnZUJ1
ZmZlci5nZXQoKTsKK30KKworQWZmaW5lVHJhbnNmb3JtIENhbnZhc1N1cmZhY2U6OmJhc2VUcmFu
c2Zvcm0oKSBjb25zdAoreworICAgIEFTU0VSVChtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcik7Cisg
ICAgRmxvYXRTaXplIHVuc2NhbGVkU2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgSW50U2l6
ZSBzaXplID0gY29udmVydExvZ2ljYWxUb0RldmljZSh1bnNjYWxlZFNpemUpOworICAgIEFmZmlu
ZVRyYW5zZm9ybSB0cmFuc2Zvcm07CisgICAgaWYgKHNpemUud2lkdGgoKSAmJiBzaXplLmhlaWdo
dCgpKQorICAgICAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKHNpemUud2lkdGgoKSAvIHVu
c2NhbGVkU2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpIC8gdW5zY2FsZWRTaXplLmhlaWdodCgp
KTsKKyAgICB0cmFuc2Zvcm0ubXVsdGlwbHkobV9pbWFnZUJ1ZmZlci0+YmFzZVRyYW5zZm9ybSgp
KTsKKyAgICByZXR1cm4gdHJhbnNmb3JtOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmggYi9XZWJDb3JlL2RvbS9DYW52
YXNTdXJmYWNlLmgKaW5kZXggMTE4ZGI4Zi4uMjJmNzlkMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9k
b20vQ2FudmFzU3VyZmFjZS5oCisrKyBiL1dlYkNvcmUvZG9tL0NhbnZhc1N1cmZhY2UuaApAQCAt
MjYsMTQgKzI2LDcyIEBACiAjaWZuZGVmIENhbnZhc1N1cmZhY2VfaAogI2RlZmluZSBDYW52YXNT
dXJmYWNlX2gKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkludFNp
emUuaCIKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBBZmZpbmVUcmFuc2Zvcm07Citj
bGFzcyBGbG9hdFBvaW50OworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgRmxvYXRTaXplOworY2xh
c3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBJbnRQb2ludDsK
K2NsYXNzIFN0cmluZzsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKwogY2xhc3MgQ2Fu
dmFzU3VyZmFjZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CisgICAgQ2FudmFzU3Vy
ZmFjZShmbG9hdCBwYWdlU2NhbGVGYWN0b3IpOworICAgIHZpcnR1YWwgfkNhbnZhc1N1cmZhY2Uo
KTsKKworICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOyB9Cisg
ICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQorCisgICAg
U3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBFeGNlcHRpb25Db2RlJik7
CisKKyAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgd2lsbERyYXcoY29uc3QgRmxvYXRSZWN0Jik7CisKKyAgICBHcmFw
aGljc0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgY29uc3Q7CisKKyAgICBJbWFnZUJ1ZmZlciog
YnVmZmVyKCkgY29uc3Q7CisKKyAgICBJbnRSZWN0IGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29u
c3QgRmxvYXRSZWN0JikgY29uc3Q7CisgICAgSW50U2l6ZSBjb252ZXJ0TG9naWNhbFRvRGV2aWNl
KGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0OworICAgIEludFBvaW50IGNvbnZlcnRMb2dpY2FsVG9E
ZXZpY2UoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworCisgICAgdm9pZCBzZXRPcmlnaW5UYWlu
dGVkKCkgeyBtX29yaWdpbkNsZWFuID0gZmFsc2U7IH0KKyAgICBib29sIG9yaWdpbkNsZWFuKCkg
Y29uc3QgeyByZXR1cm4gbV9vcmlnaW5DbGVhbjsgfQorCisgICAgQWZmaW5lVHJhbnNmb3JtIGJh
c2VUcmFuc2Zvcm0oKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgc2V0U3VyZmFjZVNp
emUoY29uc3QgSW50U2l6ZSYpOworICAgIGJvb2wgaGFzQ3JlYXRlZEltYWdlQnVmZmVyKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXI7IH0KKworICAgIHN0YXRpYyBjb25z
dCBpbnQgRGVmYXVsdFdpZHRoOworICAgIHN0YXRpYyBjb25zdCBpbnQgRGVmYXVsdEhlaWdodDsK
IAogcHJpdmF0ZToKKyAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3Q7CisKKyAgICBz
dGF0aWMgY29uc3QgZmxvYXQgTWF4Q2FudmFzQXJlYTsKKworICAgIEludFNpemUgbV9zaXplOwor
CisgICAgZmxvYXQgbV9wYWdlU2NhbGVGYWN0b3I7CisgICAgYm9vbCBtX29yaWdpbkNsZWFuOwor
CisgICAgLy8gbV9jcmVhdGVkSW1hZ2VCdWZmZXIgbWVhbnMgd2UgdHJpZWQgdG8gbWFsbG9jIHRo
ZSBidWZmZXIuICBXZSBkaWRuJ3QgbmVjZXNzYXJpbHkgZ2V0IGl0LgorICAgIG11dGFibGUgYm9v
bCBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcjsKKyAgICBtdXRhYmxlIE93blB0cjxJbWFnZUJ1ZmZl
cj4gbV9pbWFnZUJ1ZmZlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwCmluZGV4IGFkZmZlNGEuLmM4ODZmNTMgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxD
YW52YXNFbGVtZW50LmNwcApAQCAtMjgsMjIgKzI4LDIwIEBACiAjaW5jbHVkZSAiSFRNTENhbnZh
c0VsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkNhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmgiCi0jaW5j
bHVkZSAiQ2FudmFzR3JhZGllbnQuaCIKLSNpbmNsdWRlICJDYW52YXNQYXR0ZXJuLmgiCiAjaW5j
bHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykg
ICAgCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIldlYkdM
UmVuZGVyaW5nQ29udGV4dC5oIgogI2VuZGlmCisjaW5jbHVkZSAiQ2FudmFzR3JhZGllbnQuaCIK
KyNpbmNsdWRlICJDYW52YXNQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiQ2FudmFzU3R5bGUuaCIKICNp
bmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0j
aW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk1hcHBlZEF0dHJpYnV0ZS5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJIVE1MQ2FudmFzLmgiCkBAIC01
NSwyMiArNTMsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwogCi0vLyBUaGVzZSB2YWx1ZXMgY29tZSBmcm9tIHRoZSBXaGF0V0cgc3BlYy4KLXN0
YXRpYyBjb25zdCBpbnQgZGVmYXVsdFdpZHRoID0gMzAwOwotc3RhdGljIGNvbnN0IGludCBkZWZh
dWx0SGVpZ2h0ID0gMTUwOwotCi0vLyBGaXJlZm94IGxpbWl0cyB3aWR0aC9oZWlnaHQgdG8gMzI3
NjcgcGl4ZWxzLCBidXQgc2xvd3MgZG93biBkcmFtYXRpY2FsbHkgYmVmb3JlIGl0IAotLy8gcmVh
Y2hlcyB0aGF0IGxpbWl0LiBXZSBsaW1pdCBieSBhcmVhIGluc3RlYWQsIGdpdmluZyB1cyBsYXJn
ZXIgbWF4aW11bSBkaW1lbnNpb25zLAotLy8gaW4gZXhjaGFuZ2UgZm9yIGEgc21hbGxlciBtYXhp
bXVtIGNhbnZhcyBzaXplLgotY29uc3QgZmxvYXQgSFRNTENhbnZhc0VsZW1lbnQ6Ok1heENhbnZh
c0FyZWEgPSAzMjc2OCAqIDgxOTI7IC8vIE1heGltdW0gY2FudmFzIGFyZWEgaW4gQ1NTIHBpeGVs
cwotCiBIVE1MQ2FudmFzRWxlbWVudDo6SFRNTENhbnZhc0VsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUs
IGRvYykKLSAgICAsIG1fc2l6ZShkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQpCisgICAgLCBD
YW52YXNTdXJmYWNlKGRvYy0+ZnJhbWUoKSA/IGRvYy0+ZnJhbWUoKS0+cGFnZSgpLT5jaHJvbWUo
KS0+c2NhbGVGYWN0b3IoKSA6IDEpCiAgICAgLCBtX29ic2VydmVyKDApCi0gICAgLCBtX29yaWdp
bkNsZWFuKHRydWUpCiAgICAgLCBtX2lnbm9yZVJlc2V0KGZhbHNlKQotICAgICwgbV9jcmVhdGVk
SW1hZ2VCdWZmZXIoZmFsc2UpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoY2FudmFzVGFnKSk7
CiB9CkBAIC0xMzMsMjIgKzEyMCw2IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFdpZHRo
KGludCB2YWx1ZSkKICAgICBzZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCBTdHJpbmc6Om51bWJlcih2
YWx1ZSkpOwogfQogCi1TdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTChjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoIW1fb3JpZ2lu
Q2xlYW4pIHsKLSAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLSAgICB9Ci0KLSAgICBpZiAobV9zaXplLmlzRW1wdHkoKSB8fCAhYnVmZmVyKCkpCi0g
ICAgICAgIHJldHVybiBTdHJpbmcoImRhdGE6LCIpOwotCi0gICAgaWYgKG1pbWVUeXBlLmlzTnVs
bCgpIHx8ICFNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNv
ZGluZyhtaW1lVHlwZSkpCi0gICAgICAgIHJldHVybiBidWZmZXIoKS0+dG9EYXRhVVJMKCJpbWFn
ZS9wbmciKTsKLQotICAgIHJldHVybiBidWZmZXIoKS0+dG9EYXRhVVJMKG1pbWVUeXBlKTsKLX0K
LQogQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQo
Y29uc3QgU3RyaW5nJiB0eXBlLCBDYW52YXNDb250ZXh0QXR0cmlidXRlcyogYXR0cnMpCiB7CiAg
ICAgLy8gQSBDYW52YXMgY2FuIGVpdGhlciBiZSAiMkQiIG9yICJ3ZWJnbCIgYnV0IG5ldmVyIGJv
dGguIElmIHlvdSByZXF1ZXN0IGEgMkQgY2FudmFzIGFuZCB0aGUgZXhpc3RpbmcKQEAgLTE5Mywx
MiArMTY0LDExIEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW50Ojpn
ZXRDb250ZXh0KGNvbnN0IFN0cmluZyYgdHlwZSwgQ2FudmFzCiAKIHZvaWQgSFRNTENhbnZhc0Vs
ZW1lbnQ6OndpbGxEcmF3KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAobV9pbWFn
ZUJ1ZmZlcikKLSAgICAgICAgbV9pbWFnZUJ1ZmZlci0+Y2xlYXJJbWFnZSgpOwotICAgIAorICAg
IENhbnZhc1N1cmZhY2U6OndpbGxEcmF3KHJlY3QpOworCiAgICAgaWYgKFJlbmRlckJveCogcm8g
PSByZW5kZXJCb3goKSkgewogICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSByby0+Y29udGVu
dEJveFJlY3QoKTsKLSAgICAgICAgRmxvYXRSZWN0IHIgPSBtYXBSZWN0KHJlY3QsIEZsb2F0UmVj
dCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSwgZGVzdFJlY3QpOworICAg
ICAgICBGbG9hdFJlY3QgciA9IG1hcFJlY3QocmVjdCwgRmxvYXRSZWN0KDAsIDAsIHNpemUoKS53
aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpLCBkZXN0UmVjdCk7CiAgICAgICAgIHIuaW50ZXJzZWN0
KGRlc3RSZWN0KTsKICAgICAgICAgaWYgKG1fZGlydHlSZWN0LmNvbnRhaW5zKHIpKQogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMjE5LDI4ICsxODksMjYgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVu
dDo6cmVzZXQoKQogICAgIGJvb2wgb2s7CiAgICAgaW50IHcgPSBnZXRBdHRyaWJ1dGUod2lkdGhB
dHRyKS50b0ludCgmb2spOwogICAgIGlmICghb2spCi0gICAgICAgIHcgPSBkZWZhdWx0V2lkdGg7
CisgICAgICAgIHcgPSBEZWZhdWx0V2lkdGg7CiAgICAgaW50IGggPSBnZXRBdHRyaWJ1dGUoaGVp
Z2h0QXR0cikudG9JbnQoJm9rKTsKICAgICBpZiAoIW9rKQotICAgICAgICBoID0gZGVmYXVsdEhl
aWdodDsKKyAgICAgICAgaCA9IERlZmF1bHRIZWlnaHQ7CiAKLSAgICBJbnRTaXplIG9sZFNpemUg
PSBtX3NpemU7Ci0gICAgbV9zaXplID0gSW50U2l6ZSh3LCBoKTsKKyAgICBJbnRTaXplIG9sZFNp
emUgPSBzaXplKCk7CisgICAgc2V0U3VyZmFjZVNpemUoSW50U2l6ZSh3LCBoKSk7CiAKICNpZiBF
TkFCTEUoM0RfQ0FOVkFTKQogICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczNkKCkp
CiAgICAgICAgIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KG1fY29udGV4dC5n
ZXQoKSktPnJlc2hhcGUod2lkdGgoKSwgaGVpZ2h0KCkpOwogI2VuZGlmCiAKLSAgICBib29sIGhh
ZEltYWdlQnVmZmVyID0gbV9jcmVhdGVkSW1hZ2VCdWZmZXI7Ci0gICAgbV9jcmVhdGVkSW1hZ2VC
dWZmZXIgPSBmYWxzZTsKLSAgICBtX2ltYWdlQnVmZmVyLmNsZWFyKCk7CisgICAgYm9vbCBoYWRJ
bWFnZUJ1ZmZlciA9IGhhc0NyZWF0ZWRJbWFnZUJ1ZmZlcigpOwogICAgIGlmIChtX2NvbnRleHQg
JiYgbV9jb250ZXh0LT5pczJkKCkpCiAgICAgICAgIHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRCo+KG1fY29udGV4dC5nZXQoKSktPnJlc2V0KCk7CiAKICAgICBpZiAoUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgaWYgKG1fcmVu
ZGVyZXJJc0NhbnZhcykgewotICAgICAgICAgICAgaWYgKG9sZFNpemUgIT0gbV9zaXplKQorICAg
ICAgICAgICAgaWYgKG9sZFNpemUgIT0gc2l6ZSgpKQogICAgICAgICAgICAgICAgIHRvUmVuZGVy
SFRNTENhbnZhcyhyZW5kZXJlciktPmNhbnZhc1NpemVDaGFuZ2VkKCk7CiAgICAgICAgICAgICBp
ZiAoaGFkSW1hZ2VCdWZmZXIpCiAgICAgICAgICAgICAgICAgcmVuZGVyZXItPnJlcGFpbnQoKTsK
QEAgLTI2NywxMCArMjM1LDEzIEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnBhaW50KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcikKICAgICB9CiAjZW5kaWYKIAot
ICAgIGlmIChtX2ltYWdlQnVmZmVyKSB7Ci0gICAgICAgIEltYWdlKiBpbWFnZSA9IG1faW1hZ2VC
dWZmZXItPmltYWdlKCk7Ci0gICAgICAgIGlmIChpbWFnZSkKLSAgICAgICAgICAgIGNvbnRleHQt
PmRyYXdJbWFnZShpbWFnZSwgRGV2aWNlQ29sb3JTcGFjZSwgcik7CisgICAgaWYgKGhhc0NyZWF0
ZWRJbWFnZUJ1ZmZlcigpKSB7CisgICAgICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGJ1
ZmZlcigpOworICAgICAgICBpZiAoaW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgICAgIEltYWdlKiBp
bWFnZSA9IGltYWdlQnVmZmVyLT5pbWFnZSgpOworICAgICAgICAgICAgaWYgKGltYWdlKQorICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgRGV2aWNlQ29sb3JTcGFjZSwg
cik7CisgICAgICAgIH0KICAgICB9CiAKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQpAQCAtMjc5LDc2
ICsyNTAsNiBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpwYWludChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHIpCiAjZW5kaWYKIH0KIAotSW50UmVjdCBIVE1MQ2Fu
dmFzRWxlbWVudDo6Y29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFJlY3QmIGxvZ2lj
YWxSZWN0KSBjb25zdAotewotICAgIHJldHVybiBJbnRSZWN0KGNvbnZlcnRMb2dpY2FsVG9EZXZp
Y2UobG9naWNhbFJlY3QubG9jYXRpb24oKSksIGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UobG9naWNh
bFJlY3Quc2l6ZSgpKSk7Ci19Ci0KLUludFNpemUgSFRNTENhbnZhc0VsZW1lbnQ6OmNvbnZlcnRM
b2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSkgY29uc3QKLXsKLSAg
ICBmbG9hdCBwYWdlU2NhbGVGYWN0b3IgPSBkb2N1bWVudCgpLT5mcmFtZSgpID8gZG9jdW1lbnQo
KS0+ZnJhbWUoKS0+cGFnZSgpLT5jaHJvbWUoKS0+c2NhbGVGYWN0b3IoKSA6IDEuMGY7Ci0gICAg
ZmxvYXQgd2YgPSBjZWlsZihsb2dpY2FsU2l6ZS53aWR0aCgpICogcGFnZVNjYWxlRmFjdG9yKTsK
LSAgICBmbG9hdCBoZiA9IGNlaWxmKGxvZ2ljYWxTaXplLmhlaWdodCgpICogcGFnZVNjYWxlRmFj
dG9yKTsKLSAgICAKLSAgICBpZiAoISh3ZiA+PSAxICYmIGhmID49IDEgJiYgd2YgKiBoZiA8PSBN
YXhDYW52YXNBcmVhKSkKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIHJldHVybiBJ
bnRTaXplKHN0YXRpY19jYXN0PHVuc2lnbmVkPih3ZiksIHN0YXRpY19jYXN0PHVuc2lnbmVkPiho
ZikpOwotfQotCi1JbnRQb2ludCBIVE1MQ2FudmFzRWxlbWVudDo6Y29udmVydExvZ2ljYWxUb0Rl
dmljZShjb25zdCBGbG9hdFBvaW50JiBsb2dpY2FsUG9zKSBjb25zdAotewotICAgIGZsb2F0IHBh
Z2VTY2FsZUZhY3RvciA9IGRvY3VtZW50KCktPmZyYW1lKCkgPyBkb2N1bWVudCgpLT5mcmFtZSgp
LT5wYWdlKCktPmNocm9tZSgpLT5zY2FsZUZhY3RvcigpIDogMS4wZjsKLSAgICBmbG9hdCB4ZiA9
IGxvZ2ljYWxQb3MueCgpICogcGFnZVNjYWxlRmFjdG9yOwotICAgIGZsb2F0IHlmID0gbG9naWNh
bFBvcy55KCkgKiBwYWdlU2NhbGVGYWN0b3I7Ci0gICAgCi0gICAgcmV0dXJuIEludFBvaW50KHN0
YXRpY19jYXN0PHVuc2lnbmVkPih4ZiksIHN0YXRpY19jYXN0PHVuc2lnbmVkPih5ZikpOwotfQot
Ci12b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKCFtX2ltYWdlQnVmZmVyKTsKLQotICAgIG1fY3JlYXRlZEltYWdlQnVmZmVyID0g
dHJ1ZTsKLSAgICAKLSAgICBGbG9hdFNpemUgdW5zY2FsZWRTaXplKHdpZHRoKCksIGhlaWdodCgp
KTsKLSAgICBJbnRTaXplIHNpemUgPSBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKHVuc2NhbGVkU2l6
ZSk7Ci0gICAgaWYgKCFzaXplLndpZHRoKCkgfHwgIXNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUpOwot
ICAgIC8vIFRoZSBjb252ZXJ0TG9naWNhbFRvRGV2aWNlIE1heENhbnZhc0FyZWEgY2hlY2sgc2hv
dWxkIHByZXZlbnQgY29tbW9uIGNhc2VzCi0gICAgLy8gd2hlcmUgSW1hZ2VCdWZmZXI6OmNyZWF0
ZSgpIHJldHVybnMgTlVMTCwgaG93ZXZlciB3ZSBjb3VsZCBzdGlsbCBiZSBsb3cgb24gbWVtb3J5
LgotICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIG1faW1hZ2VC
dWZmZXItPmNvbnRleHQoKS0+c2NhbGUoRmxvYXRTaXplKHNpemUud2lkdGgoKSAvIHVuc2NhbGVk
U2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpIC8gdW5zY2FsZWRTaXplLmhlaWdodCgpKSk7Ci0g
ICAgbV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyh0
cnVlKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0KiBIVE1MQ2FudmFzRWxlbWVudDo6ZHJhd2luZ0Nv
bnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBidWZmZXIoKSA/IG1faW1hZ2VCdWZmZXItPmNv
bnRleHQoKSA6IDA7Ci19Ci0KLUltYWdlQnVmZmVyKiBIVE1MQ2FudmFzRWxlbWVudDo6YnVmZmVy
KCkgY29uc3QKLXsKLSAgICBpZiAoIW1fY3JlYXRlZEltYWdlQnVmZmVyKQotICAgICAgICBjcmVh
dGVJbWFnZUJ1ZmZlcigpOwotICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOwotfQotICAg
IAotQWZmaW5lVHJhbnNmb3JtIEhUTUxDYW52YXNFbGVtZW50OjpiYXNlVHJhbnNmb3JtKCkgY29u
c3QKLXsKLSAgICBBU1NFUlQobV9jcmVhdGVkSW1hZ2VCdWZmZXIpOwotICAgIEZsb2F0U2l6ZSB1
bnNjYWxlZFNpemUod2lkdGgoKSwgaGVpZ2h0KCkpOwotICAgIEludFNpemUgc2l6ZSA9IGNvbnZl
cnRMb2dpY2FsVG9EZXZpY2UodW5zY2FsZWRTaXplKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJh
bnNmb3JtOwotICAgIGlmIChzaXplLndpZHRoKCkgJiYgc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAg
dHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShzaXplLndpZHRoKCkgLyB1bnNjYWxlZFNpemUud2lk
dGgoKSwgc2l6ZS5oZWlnaHQoKSAvIHVuc2NhbGVkU2l6ZS5oZWlnaHQoKSk7Ci0gICAgdHJhbnNm
b3JtLm11bHRpcGx5KG1faW1hZ2VCdWZmZXItPmJhc2VUcmFuc2Zvcm0oKSk7Ci0gICAgcmV0dXJu
IHRyYW5zZm9ybTsKLX0KLQogI2lmIEVOQUJMRSgzRF9DQU5WQVMpICAgIAogYm9vbCBIVE1MQ2Fu
dmFzRWxlbWVudDo6aXMzRCgpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRN
TENhbnZhc0VsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCmluZGV4
IGEyOWMxYjguLjc5ZTZmMTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCkBAIC0yNyw3ICsy
Nyw2IEBACiAjaWZuZGVmIEhUTUxDYW52YXNFbGVtZW50X2gKICNkZWZpbmUgSFRNTENhbnZhc0Vs
ZW1lbnRfaAogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ2FudmFz
U3VyZmFjZS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50
LmgiCkBAIC00MCwxMyArMzksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhbnZh
c0NvbnRleHRBdHRyaWJ1dGVzOwogY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDsKLWNsYXNz
IEZsb2F0UG9pbnQ7Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBGbG9hdFNpemU7CiBjbGFzcyBH
cmFwaGljc0NvbnRleHQ7CiBjbGFzcyBIVE1MQ2FudmFzRWxlbWVudDsKLWNsYXNzIEltYWdlQnVm
ZmVyOwotY2xhc3MgSW50UG9pbnQ7CiBjbGFzcyBJbnRTaXplOwogCiBjbGFzcyBDYW52YXNPYnNl
cnZlciB7CkBAIC02Myw0NiArNTcsMjggQEAgcHVibGljOgogICAgIEhUTUxDYW52YXNFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgIHZpcnR1YWwgfkhUTUxDYW52
YXNFbGVtZW50KCk7CiAKLSAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NpemUud2lk
dGgoKTsgfQotICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7
IH0KICAgICB2b2lkIHNldFdpZHRoKGludCk7CiAgICAgdm9pZCBzZXRIZWlnaHQoaW50KTsKIAot
ICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgRXhjZXB0aW9uQ29k
ZSYpOwotCiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogZ2V0Q29udGV4dChjb25zdCBTdHJp
bmcmLCBDYW52YXNDb250ZXh0QXR0cmlidXRlcyogYXR0cmlidXRlcyA9IDApOwogCi0gICAgY29u
c3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIHZvaWQgc2V0
U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQorICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXpl
JiBuZXdTaXplKQogICAgIHsgCi0gICAgICAgIGlmIChzaXplID09IG1fc2l6ZSkKKyAgICAgICAg
aWYgKG5ld1NpemUgPT0gc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2ln
bm9yZVJlc2V0ID0gdHJ1ZTsgCi0gICAgICAgIHNldFdpZHRoKHNpemUud2lkdGgoKSk7Ci0gICAg
ICAgIHNldEhlaWdodChzaXplLmhlaWdodCgpKTsKKyAgICAgICAgc2V0V2lkdGgobmV3U2l6ZS53
aWR0aCgpKTsKKyAgICAgICAgc2V0SGVpZ2h0KG5ld1NpemUuaGVpZ2h0KCkpOwogICAgICAgICBt
X2lnbm9yZVJlc2V0ID0gZmFsc2U7CiAgICAgICAgIHJlc2V0KCk7CiAgICAgfQogCi0gICAgdm9p
ZCB3aWxsRHJhdyhjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbERyYXco
Y29uc3QgRmxvYXRSZWN0Jik7CiAKICAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEludFJlY3QmKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSBj
b25zdDsKLQotICAgIEltYWdlQnVmZmVyKiBidWZmZXIoKSBjb25zdDsKLQotICAgIEludFJlY3Qg
Y29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKLSAgICBJbnRT
aXplIGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRTaXplJikgY29uc3Q7Ci0gICAg
SW50UG9pbnQgY29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7
Ci0KLSAgICB2b2lkIHNldE9yaWdpblRhaW50ZWQoKSB7IG1fb3JpZ2luQ2xlYW4gPSBmYWxzZTsg
fSAKLSAgICBib29sIG9yaWdpbkNsZWFuKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5DbGVhbjsg
fQotCiAgICAgdm9pZCBzZXRPYnNlcnZlcihDYW52YXNPYnNlcnZlciogb2JzZXJ2ZXIpIHsgbV9v
YnNlcnZlciA9IG9ic2VydmVyOyB9CiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9y
bSgpIGNvbnN0OwotCiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogcmVuZGVyaW5nQ29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQogCiAjaWYgRU5BQkxFKDNEX0NB
TlZBUykgICAgCkBAIC0xMTgsMjQgKzk0LDE1IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgUmVu
ZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CiAK
LSAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3Q7CiAgICAgdm9pZCByZXNldCgpOwog
Ci0gICAgc3RhdGljIGNvbnN0IGZsb2F0IE1heENhbnZhc0FyZWE7Ci0KICAgICBib29sIG1fcmVu
ZGVyZXJJc0NhbnZhczsKIAogICAgIE93blB0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBtX2Nv
bnRleHQ7Ci0gICAgSW50U2l6ZSBtX3NpemU7ICAgIAogICAgIENhbnZhc09ic2VydmVyKiBtX29i
c2VydmVyOwogCi0gICAgYm9vbCBtX29yaWdpbkNsZWFuOwogICAgIGJvb2wgbV9pZ25vcmVSZXNl
dDsKICAgICBGbG9hdFJlY3QgbV9kaXJ0eVJlY3Q7Ci0KLSAgICAvLyBtX2NyZWF0ZWRJbWFnZUJ1
ZmZlciBtZWFucyB3ZSB0cmllZCB0byBtYWxsb2MgdGhlIGJ1ZmZlci4gIFdlIGRpZG4ndCBuZWNl
c3NhcmlseSBnZXQgaXQuCi0gICAgbXV0YWJsZSBib29sIG1fY3JlYXRlZEltYWdlQnVmZmVyOwot
ICAgIG11dGFibGUgT3duUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOwogfTsKIAogfSAv
L25hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKaW5kZXggZjViMDAz
Yi4uZDk2MWY4NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5
LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCkBAIC0zNjks
NiArMzY5LDggQEAgYm9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlUmVzb3Vy
Y2VNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogCiBib29sIE1JTUVUeXBlUmVnaXN0
cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKwogICAgIGlmIChtaW1lVHlw
ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIXN1cHBvcnRlZElt
YWdlTUlNRVR5cGVzRm9yRW5jb2RpbmcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCmlu
ZGV4IDgyNjNmYWEuLmFjNjE2NTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2UuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCkBA
IC01Myw2ICs1Myw3IEBAIEltYWdlOjp+SW1hZ2UoKQogCiBJbWFnZSogSW1hZ2U6Om51bGxJbWFn
ZSgpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKFJlZlB0cjxJbWFnZT4sIG51bGxJbWFnZSwgKEJpdG1hcEltYWdlOjpjcmVhdGUoKSkpOzsK
ICAgICByZXR1cm4gbnVsbEltYWdlLmdldCgpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKaW5kZXggMGRjN2E1My4uZWQxMGJkZiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCkBAIC0zOCw2
ICszOCw3IEBACiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvT3du
QXJyYXlQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Ro
cmVhZGluZy5oPgogI2luY2x1ZGUgPG1hdGguaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAg
LTI1NCw2ICsyNTUsOCBAQCBzdGF0aWMgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tTUlN
RVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IG1pbWVUeXBlQ0ZTdHJpbmcoQWRvcHRDRiwgbWltZVR5cGUuY3JlYXRlQ0ZTdHJpbmcoKSk7CiAg
ICAgcmV0dXJuIFJldGFpblB0cjxDRlN0cmluZ1JlZj4oQWRvcHRDRiwgVVRUeXBlQ3JlYXRlUHJl
ZmVycmVkSWRlbnRpZmllckZvclRhZyhrVVRUYWdDbGFzc01JTUVUeXBlLCBtaW1lVHlwZUNGU3Ry
aW5nLmdldCgpLCAwKSk7CiAjZWxzZQorICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7IC8vIEl0
IGlzIHVuY2xlYXIgaWYgQ0ZTVFIgaXMgdGhyZWFkc2FmZS4KKwogICAgIC8vIEZJWE1FOiBBZGQg
V2luZG93cyBzdXBwb3J0IGZvciBhbGwgdGhlIHN1cHBvcnRlZCBVVElzIHdoZW4gYSB3YXkgdG8g
Y29udmVydCBmcm9tIE1JTUVUeXBlIHRvIFVUSSByZWxpYWJseSBpcyBmb3VuZC4KICAgICAvLyBG
b3Igbm93LCBvbmx5IHN1cHBvcnQgUE5HLCBKUEVHLCBhbmQgR0lGLiBTZWUgPHJkYXI6Ly9wcm9i
bGVtLzYwOTUyODY+LgogICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlUE5HID0g
Q0ZTVFIoInB1YmxpYy5wbmciKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49864</attachid>
            <date>2010-03-02 16:26:27 -0800</date>
            <delta_ts>2010-03-10 10:42:56 -0800</delta_ts>
            <desc>Proposed fix (added the modified changelog).</desc>
            <filename>bug35453.txt</filename>
            <type>text/plain</type>
            <size>22283</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzU2ZDMxNi4uMTlmOTZiNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAxMC0wMy0wMiAgRGF2aWQgTGV2aW4g
IDxsZXZpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTmVlZCB0byBtb3ZlIGl0ZW1zIHRoYXQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEIGRlcGVuZHMgb24gaW50byBDYW52YXNTdXJmYWNlLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzU0NTMKKworICAgICAgICBQcmVwYXJ0b3J5
IGNoYW5nZXMgdG8gYWxsb3cgZm9yIGFuIE9mZnNjcmVlbkNhbnZhcyB3aGljaCBtYXkgYmUgdXNl
ZCBpbiBhIHdvcmtlcgorICAgICAgICBvciBvdXRzaWRlIG9mIHRoZSBET00uCisKKyAgICAgICAg
Tm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHksIHNvIG5ldyB0ZXN0cy4KKworICAgICAgICAqIGRv
bS9DYW52YXNTdXJmYWNlLmNwcDogTW92ZWQgZnVuY3Rpb25hbGl0eSB0aGF0IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRCBkZXBlbmRzIG9uCisgICAgICAgIGludG8gdGhpcyBjbGFzcyAoYW5kIHJl
bW92ZWQgZGVwZW5kZW5jaWVzIG9uIGRvY3VtZW50L2h0bWwgZWxlbWVudCkuCisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNTdXJmYWNlOjpDYW52YXNTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1N1cmZhY2U6On5DYW52YXNTdXJmYWNlKTogUHV0IHRoZSBkZXNjdHJ1Y3RvciBpbiB0
aGUgY3BwIGZpbGUKKyAgICAgICAgdG8gYXZvaWQgbmVlZGluZyBhY2Nlc3MgdG8gfkltYWdlQnVm
ZmVyIGluIHRoZSBoZWFkZXIgZmlsZS4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N1cmZhY2U6
OnNldFN1cmZhY2VTaXplKTogRG9lcyBiYXNpYyBpdGVtcyBuZWVkZWQKKyAgICAgICAgd2hlbiB0
aGUgc2l6ZSBjaGFuZ2VzLiBJdCBpcyBwcm90ZWN0ZWQgdG8gZm9yY2Ugb3V0c2lkZSBjYWxsZXJz
IHRvIGdvCisgICAgICAgIHRocm91Z2ggSFRNTENhbnZhc0VsZW1lbnQ6OnNldFNpemUuCisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNTdXJmYWNlOjp0b0RhdGFVUkwpOiBKdXN0IG1vdmVkIGZyb20g
SFRNTENhbnZhc0VsZW1lbnQgYW5kCisgICAgICAgIG1hZGUgYSBub3RlIGFib3V0IGEgbWV0aG9k
IHRvIGZpeCBmb3Igd29ya2VyIHVzYWdlLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3VyZmFj
ZTo6d2lsbERyYXcpOiBNYWRlIHRoaXMgdmlydHVhbCB0byBhbGxvdyBhbiBvdmVyaWRlCisgICAg
ICAgIHdoaWNoIHVzZXMgdGhlIHJlbmRlcmJveCBhbmQgdHJhY2tzIGEgZGlydHlSZWN0LgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzU3VyZmFjZTo6Y29udmVydExvZ2ljYWxUb0RldmljZSk6IE1v
dmVkIGFuZCBjaGFuZ2VkIHRvCisgICAgICAgIHJlbHkgb24gYSBtZW1iZXIgdmFyaWFibGUgZm9y
IHBhZ2Ugc2NhbGUgKHRvIGF2b2lkIHVzaW5nIHRoZSBkb2N1bWVudCkuCisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNTdXJmYWNlOjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNTdXJmYWNlOjpkcmF3aW5nQ29udGV4dCk6IFNpbXBsZSBtb3ZlIGZyb20gSFRNTENh
bnZhc0VsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdXJmYWNlOjpidWZmZXIpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N1cmZhY2U6OmJhc2VUcmFuc2Zvcm0pOiBE
aXR0by4KKyAgICAgICAgKiBkb20vQ2FudmFzU3VyZmFjZS5oOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzU3VyZmFjZTo6d2lkdGgpOiBTaW1wbGUgbW92ZSBmcm9tIEhUTUxDYW52YXNFbGVtZW50
LgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3VyZmFjZTo6aGVpZ2h0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNTdXJmYWNlOjpzaXplKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNTdXJmYWNlOjpzZXRPcmlnaW5UYWludGVkKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNTdXJmYWNlOjpvcmlnaW5DbGVhbik6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzU3VyZmFjZTo6aGFzQ3JlYXRlZEltYWdlQnVmZmVyKTogRGl0dG8gKHdpdGgg
c21hbGwgbmFtZSBjaGFuZ2UpLgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OkhUTUxDYW52YXNFbGVtZW50
KTogUGFzcyBpbiB0aGUgc2NhbGUgZmFjdG9yIHRvIENhbnZhc1N1cmZhY2UKKyAgICAgICAgc28g
aXQgZG9lc24ndCBuZWVkIHRoZSBkb2N1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52
YXNFbGVtZW50Ojp3aWxsRHJhdyk6IE1vdmVkIHRoZSByZWxldmFudCBwb3J0aW9uIHRvIENhbnZh
c1N1cmZhY2UuCisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQpOiBT
bWFsbCBjaGFuZ2VzIGR1ZSB0byByZWZhY3RvcmluZy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxD
YW52YXNFbGVtZW50OjpwYWludCk6IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpzZXRTaXplKTog
RGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JF
bmNvZGluZyk6IEFkZGVkIGFzc2VydAorICAgICAgICB0byB2ZXJpZnkgdGhhdCB0aGlzIGlzIG9u
bHkgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6bnVsbEltYWdlKTogRGl0dG8u
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp1dGlGcm9tTUlNRVR5cGUpOiBEaXR0by4KKwogMjAxMC0wMi0yNiAgQWRh
bSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5jcHAgYi9XZWJD
b3JlL2RvbS9DYW52YXNTdXJmYWNlLmNwcAppbmRleCA2OWM3OTUxLi5hYTBhMGJlIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmNwcAorKysgYi9XZWJDb3JlL2RvbS9DYW52
YXNTdXJmYWNlLmNwcApAQCAtMjYsNiArMjYsMTMyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiQ2FudmFzU3VyZmFjZS5oIgogCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgi
CisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5j
bHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIFRo
ZXNlIHZhbHVlcyBjb21lIGZyb20gdGhlIFdoYXRXRyBzcGVjLgorY29uc3QgaW50IENhbnZhc1N1
cmZhY2U6OkRlZmF1bHRXaWR0aCA9IDMwMDsKK2NvbnN0IGludCBDYW52YXNTdXJmYWNlOjpEZWZh
dWx0SGVpZ2h0ID0gMTUwOworCisvLyBGaXJlZm94IGxpbWl0cyB3aWR0aC9oZWlnaHQgdG8gMzI3
NjcgcGl4ZWxzLCBidXQgc2xvd3MgZG93biBkcmFtYXRpY2FsbHkgYmVmb3JlIGl0CisvLyByZWFj
aGVzIHRoYXQgbGltaXQuIFdlIGxpbWl0IGJ5IGFyZWEgaW5zdGVhZCwgZ2l2aW5nIHVzIGxhcmdl
ciBtYXhpbXVtIGRpbWVuc2lvbnMsCisvLyBpbiBleGNoYW5nZSBmb3IgYSBzbWFsbGVyIG1heGlt
dW0gY2FudmFzIHNpemUuCitjb25zdCBmbG9hdCBDYW52YXNTdXJmYWNlOjpNYXhDYW52YXNBcmVh
ID0gMzI3NjggKiA4MTkyOyAvLyBNYXhpbXVtIGNhbnZhcyBhcmVhIGluIENTUyBwaXhlbHMKKwor
Q2FudmFzU3VyZmFjZTo6Q2FudmFzU3VyZmFjZShmbG9hdCBwYWdlU2NhbGVGYWN0b3IpCisgICAg
OiBtX3NpemUoRGVmYXVsdFdpZHRoLCBEZWZhdWx0SGVpZ2h0KQorICAgICwgbV9wYWdlU2NhbGVG
YWN0b3IocGFnZVNjYWxlRmFjdG9yKQorICAgICwgbV9vcmlnaW5DbGVhbih0cnVlKQorICAgICwg
bV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIoZmFsc2UpCit7Cit9CisKK0NhbnZhc1N1cmZhY2U6On5D
YW52YXNTdXJmYWNlKCkKK3sKK30KKwordm9pZCBDYW52YXNTdXJmYWNlOjpzZXRTdXJmYWNlU2l6
ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIG1fc2l6ZSA9IHNpemU7CisgICAgbV9oYXND
cmVhdGVkSW1hZ2VCdWZmZXIgPSBmYWxzZTsKKyAgICBtX2ltYWdlQnVmZmVyLmNsZWFyKCk7Cit9
CisKK1N0cmluZyBDYW52YXNTdXJmYWNlOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFtX29yaWdpbkNsZWFuKSB7CisgICAg
ICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQor
CisgICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkgfHwgIWJ1ZmZlcigpKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCJkYXRhOiwiKTsKKworICAgIC8vIEZJWE1FOiBNYWtlIGlzU3VwcG9ydGVkSW1hZ2VN
SU1FVHlwZUZvckVuY29kaW5nIHRocmVhZHNhZmUgKHRvIGFsbG93IHRoaXMgbWV0aG9kIHRvIGJl
IHVzZWQgb24gYSB3b3JrZXIgdGhyZWFkKS4KKyAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkgfHwg
IU1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1p
bWVUeXBlKSkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcigpLT50b0RhdGFVUkwoImltYWdlL3BuZyIp
OworCisgICAgcmV0dXJuIGJ1ZmZlcigpLT50b0RhdGFVUkwobWltZVR5cGUpOworfQorCit2b2lk
IENhbnZhc1N1cmZhY2U6OndpbGxEcmF3KGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgaWYgKG1f
aW1hZ2VCdWZmZXIpCisgICAgICAgIG1faW1hZ2VCdWZmZXItPmNsZWFySW1hZ2UoKTsKK30KKwor
SW50UmVjdCBDYW52YXNTdXJmYWNlOjpjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0
UmVjdCYgbG9naWNhbFJlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFJlY3QoY29udmVydExv
Z2ljYWxUb0RldmljZShsb2dpY2FsUmVjdC5sb2NhdGlvbigpKSwgY29udmVydExvZ2ljYWxUb0Rl
dmljZShsb2dpY2FsUmVjdC5zaXplKCkpKTsKK30KKworSW50U2l6ZSBDYW52YXNTdXJmYWNlOjpj
b252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUpIGNvbnN0
Cit7CisgICAgZmxvYXQgd2YgPSBjZWlsZihsb2dpY2FsU2l6ZS53aWR0aCgpICogbV9wYWdlU2Nh
bGVGYWN0b3IpOworICAgIGZsb2F0IGhmID0gY2VpbGYobG9naWNhbFNpemUuaGVpZ2h0KCkgKiBt
X3BhZ2VTY2FsZUZhY3Rvcik7CisKKyAgICBpZiAoISh3ZiA+PSAxICYmIGhmID49IDEgJiYgd2Yg
KiBoZiA8PSBNYXhDYW52YXNBcmVhKSkKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAg
IHJldHVybiBJbnRTaXplKHN0YXRpY19jYXN0PHVuc2lnbmVkPih3ZiksIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihoZikpOworfQorCitJbnRQb2ludCBDYW52YXNTdXJmYWNlOjpjb252ZXJ0TG9naWNh
bFRvRGV2aWNlKGNvbnN0IEZsb2F0UG9pbnQmIGxvZ2ljYWxQb3MpIGNvbnN0Cit7CisgICAgZmxv
YXQgeGYgPSBsb2dpY2FsUG9zLngoKSAqIG1fcGFnZVNjYWxlRmFjdG9yOworICAgIGZsb2F0IHlm
ID0gbG9naWNhbFBvcy55KCkgKiBtX3BhZ2VTY2FsZUZhY3RvcjsKKworICAgIHJldHVybiBJbnRQ
b2ludChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oeGYpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oeWYp
KTsKK30KKwordm9pZCBDYW52YXNTdXJmYWNlOjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0Cit7
CisgICAgQVNTRVJUKCFtX2ltYWdlQnVmZmVyKTsKKworICAgIG1faGFzQ3JlYXRlZEltYWdlQnVm
ZmVyID0gdHJ1ZTsKKworICAgIEZsb2F0U2l6ZSB1bnNjYWxlZFNpemUod2lkdGgoKSwgaGVpZ2h0
KCkpOworICAgIEludFNpemUgc2l6ZSA9IGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UodW5zY2FsZWRT
aXplKTsKKyAgICBpZiAoIXNpemUud2lkdGgoKSB8fCAhc2l6ZS5oZWlnaHQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSk7
CisgICAgLy8gVGhlIGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UgTWF4Q2FudmFzQXJlYSBjaGVjayBz
aG91bGQgcHJldmVudCBjb21tb24gY2FzZXMKKyAgICAvLyB3aGVyZSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKCkgcmV0dXJucyAwLCBob3dldmVyIHdlIGNvdWxkIHN0aWxsIGJlIGxvdyBvbiBtZW1vcnku
CisgICAgaWYgKCFtX2ltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgbV9pbWFnZUJ1
ZmZlci0+Y29udGV4dCgpLT5zY2FsZShGbG9hdFNpemUoc2l6ZS53aWR0aCgpIC8gdW5zY2FsZWRT
aXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkgLyB1bnNjYWxlZFNpemUuaGVpZ2h0KCkpKTsKKyAg
ICBtX2ltYWdlQnVmZmVyLT5jb250ZXh0KCktPnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKHRy
dWUpOworfQorCitHcmFwaGljc0NvbnRleHQqIENhbnZhc1N1cmZhY2U6OmRyYXdpbmdDb250ZXh0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gYnVmZmVyKCkgPyBtX2ltYWdlQnVmZmVyLT5jb250ZXh0
KCkgOiAwOworfQorCitJbWFnZUJ1ZmZlciogQ2FudmFzU3VyZmFjZTo6YnVmZmVyKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1faGFzQ3JlYXRlZEltYWdlQnVmZmVyKQorICAgICAgICBjcmVhdGVJbWFn
ZUJ1ZmZlcigpOworICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOworfQorCitBZmZpbmVU
cmFuc2Zvcm0gQ2FudmFzU3VyZmFjZTo6YmFzZVRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyKTsKKyAgICBGbG9hdFNpemUgdW5zY2FsZWRTaXpl
KHdpZHRoKCksIGhlaWdodCgpKTsKKyAgICBJbnRTaXplIHNpemUgPSBjb252ZXJ0TG9naWNhbFRv
RGV2aWNlKHVuc2NhbGVkU2l6ZSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKKyAg
ICBpZiAoc2l6ZS53aWR0aCgpICYmIHNpemUuaGVpZ2h0KCkpCisgICAgICAgIHRyYW5zZm9ybS5z
Y2FsZU5vblVuaWZvcm0oc2l6ZS53aWR0aCgpIC8gdW5zY2FsZWRTaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCkgLyB1bnNjYWxlZFNpemUuaGVpZ2h0KCkpOworICAgIHRyYW5zZm9ybS5tdWx0aXBs
eShtX2ltYWdlQnVmZmVyLT5iYXNlVHJhbnNmb3JtKCkpOworICAgIHJldHVybiB0cmFuc2Zvcm07
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0Nh
bnZhc1N1cmZhY2UuaCBiL1dlYkNvcmUvZG9tL0NhbnZhc1N1cmZhY2UuaAppbmRleCAxMThkYjhm
Li4yMmY3OWQxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmgKKysrIGIv
V2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5oCkBAIC0yNiwxNCArMjYsNzIgQEAKICNpZm5kZWYg
Q2FudmFzU3VyZmFjZV9oCiAjZGVmaW5lIENhbnZhc1N1cmZhY2VfaAogCisjaW5jbHVkZSAiQWZm
aW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorCisjaW5jbHVkZSA8d3RmL093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK2NsYXNzIEFmZmluZVRyYW5zZm9ybTsKK2NsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBG
bG9hdFJlY3Q7CitjbGFzcyBGbG9hdFNpemU7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFz
cyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIEludFBvaW50OworY2xhc3MgU3RyaW5nOworCit0eXBlZGVm
IGludCBFeGNlcHRpb25Db2RlOworCiBjbGFzcyBDYW52YXNTdXJmYWNlIDogcHVibGljIE5vbmNv
cHlhYmxlIHsKIHB1YmxpYzoKKyAgICBDYW52YXNTdXJmYWNlKGZsb2F0IHBhZ2VTY2FsZUZhY3Rv
cik7CisgICAgdmlydHVhbCB+Q2FudmFzU3VyZmFjZSgpOworCisgICAgaW50IHdpZHRoKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplLndpZHRoKCk7IH0KKyAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zaXplLmhlaWdodCgpOyB9CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIGNvbnN0IEludFNpemUmIHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworICAgIHZpcnR1YWwgdm9pZCB3aWxsRHJh
dyhjb25zdCBGbG9hdFJlY3QmKTsKKworICAgIEdyYXBoaWNzQ29udGV4dCogZHJhd2luZ0NvbnRl
eHQoKSBjb25zdDsKKworICAgIEltYWdlQnVmZmVyKiBidWZmZXIoKSBjb25zdDsKKworICAgIElu
dFJlY3QgY29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKyAg
ICBJbnRTaXplIGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRTaXplJikgY29uc3Q7
CisgICAgSW50UG9pbnQgY29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFBvaW50Jikg
Y29uc3Q7CisKKyAgICB2b2lkIHNldE9yaWdpblRhaW50ZWQoKSB7IG1fb3JpZ2luQ2xlYW4gPSBm
YWxzZTsgfQorICAgIGJvb2wgb3JpZ2luQ2xlYW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbkNs
ZWFuOyB9CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0OworCitw
cm90ZWN0ZWQ6CisgICAgdm9pZCBzZXRTdXJmYWNlU2l6ZShjb25zdCBJbnRTaXplJik7CisgICAg
Ym9vbCBoYXNDcmVhdGVkSW1hZ2VCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2hhc0NyZWF0ZWRJ
bWFnZUJ1ZmZlcjsgfQorCisgICAgc3RhdGljIGNvbnN0IGludCBEZWZhdWx0V2lkdGg7CisgICAg
c3RhdGljIGNvbnN0IGludCBEZWZhdWx0SGVpZ2h0OwogCiBwcml2YXRlOgorICAgIHZvaWQgY3Jl
YXRlSW1hZ2VCdWZmZXIoKSBjb25zdDsKKworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBNYXhDYW52
YXNBcmVhOworCisgICAgSW50U2l6ZSBtX3NpemU7CisKKyAgICBmbG9hdCBtX3BhZ2VTY2FsZUZh
Y3RvcjsKKyAgICBib29sIG1fb3JpZ2luQ2xlYW47CisKKyAgICAvLyBtX2NyZWF0ZWRJbWFnZUJ1
ZmZlciBtZWFucyB3ZSB0cmllZCB0byBtYWxsb2MgdGhlIGJ1ZmZlci4gIFdlIGRpZG4ndCBuZWNl
c3NhcmlseSBnZXQgaXQuCisgICAgbXV0YWJsZSBib29sIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVy
OworICAgIG11dGFibGUgT3duUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxDYW52
YXNFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXgg
YWRmZmU0YS4uYzg4NmY1MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC0yOCwy
MiArMjgsMjAgQEAKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogCiAjaW5jbHVkZSAi
Q2FudmFzQ29udGV4dEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJDYW52YXNHcmFkaWVudC5oIgot
I2luY2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuaCIKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKSAgICAKICNpbmNsdWRlICJXZWJHTENvbnRl
eHRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAjZW5k
aWYKKyNpbmNsdWRlICJDYW52YXNHcmFkaWVudC5oIgorI2luY2x1ZGUgIkNhbnZhc1BhdHRlcm4u
aCIKICNpbmNsdWRlICJDYW52YXNTdHlsZS5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5
LmgiCiAjaW5jbHVkZSAiTWFwcGVkQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlckhUTUxDYW52YXMuaCIKQEAgLTU1LDIyICs1MywxMSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLS8vIFRoZXNlIHZhbHVl
cyBjb21lIGZyb20gdGhlIFdoYXRXRyBzcGVjLgotc3RhdGljIGNvbnN0IGludCBkZWZhdWx0V2lk
dGggPSAzMDA7Ci1zdGF0aWMgY29uc3QgaW50IGRlZmF1bHRIZWlnaHQgPSAxNTA7Ci0KLS8vIEZp
cmVmb3ggbGltaXRzIHdpZHRoL2hlaWdodCB0byAzMjc2NyBwaXhlbHMsIGJ1dCBzbG93cyBkb3du
IGRyYW1hdGljYWxseSBiZWZvcmUgaXQgCi0vLyByZWFjaGVzIHRoYXQgbGltaXQuIFdlIGxpbWl0
IGJ5IGFyZWEgaW5zdGVhZCwgZ2l2aW5nIHVzIGxhcmdlciBtYXhpbXVtIGRpbWVuc2lvbnMsCi0v
LyBpbiBleGNoYW5nZSBmb3IgYSBzbWFsbGVyIG1heGltdW0gY2FudmFzIHNpemUuCi1jb25zdCBm
bG9hdCBIVE1MQ2FudmFzRWxlbWVudDo6TWF4Q2FudmFzQXJlYSA9IDMyNzY4ICogODE5MjsgLy8g
TWF4aW11bSBjYW52YXMgYXJlYSBpbiBDU1MgcGl4ZWxzCi0KIEhUTUxDYW52YXNFbGVtZW50OjpI
VE1MQ2FudmFzRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCog
ZG9jKQogICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQotICAgICwgbV9zaXplKGRlZmF1
bHRXaWR0aCwgZGVmYXVsdEhlaWdodCkKKyAgICAsIENhbnZhc1N1cmZhY2UoZG9jLT5mcmFtZSgp
ID8gZG9jLT5mcmFtZSgpLT5wYWdlKCktPmNocm9tZSgpLT5zY2FsZUZhY3RvcigpIDogMSkKICAg
ICAsIG1fb2JzZXJ2ZXIoMCkKLSAgICAsIG1fb3JpZ2luQ2xlYW4odHJ1ZSkKICAgICAsIG1faWdu
b3JlUmVzZXQoZmFsc2UpCi0gICAgLCBtX2NyZWF0ZWRJbWFnZUJ1ZmZlcihmYWxzZSkKIHsKICAg
ICBBU1NFUlQoaGFzVGFnTmFtZShjYW52YXNUYWcpKTsKIH0KQEAgLTEzMywyMiArMTIwLDYgQEAg
dm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0V2lkdGgoaW50IHZhbHVlKQogICAgIHNldEF0dHJp
YnV0ZSh3aWR0aEF0dHIsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CiB9CiAKLVN0cmluZyBIVE1M
Q2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIGlmICghbV9vcmlnaW5DbGVhbikgewotICAgICAgICBlYyA9IFNF
Q1VSSVRZX0VSUjsKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIH0KLQotICAgIGlmICht
X3NpemUuaXNFbXB0eSgpIHx8ICFidWZmZXIoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygiZGF0
YTosIik7Ci0KLSAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkgfHwgIU1JTUVUeXBlUmVnaXN0cnk6
OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSkKLSAgICAgICAg
cmV0dXJuIGJ1ZmZlcigpLT50b0RhdGFVUkwoImltYWdlL3BuZyIpOwotCi0gICAgcmV0dXJuIGJ1
ZmZlcigpLT50b0RhdGFVUkwobWltZVR5cGUpOwotfQotCiBDYW52YXNSZW5kZXJpbmdDb250ZXh0
KiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dChjb25zdCBTdHJpbmcmIHR5cGUsIENhbnZh
c0NvbnRleHRBdHRyaWJ1dGVzKiBhdHRycykKIHsKICAgICAvLyBBIENhbnZhcyBjYW4gZWl0aGVy
IGJlICIyRCIgb3IgIndlYmdsIiBidXQgbmV2ZXIgYm90aC4gSWYgeW91IHJlcXVlc3QgYSAyRCBj
YW52YXMgYW5kIHRoZSBleGlzdGluZwpAQCAtMTkzLDEyICsxNjQsMTEgQEAgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCogSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQoY29uc3QgU3RyaW5nJiB0
eXBlLCBDYW52YXMKIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6d2lsbERyYXcoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewotICAgIGlmIChtX2ltYWdlQnVmZmVyKQotICAgICAgICBtX2ltYWdl
QnVmZmVyLT5jbGVhckltYWdlKCk7Ci0gICAgCisgICAgQ2FudmFzU3VyZmFjZTo6d2lsbERyYXco
cmVjdCk7CisKICAgICBpZiAoUmVuZGVyQm94KiBybyA9IHJlbmRlckJveCgpKSB7CiAgICAgICAg
IEZsb2F0UmVjdCBkZXN0UmVjdCA9IHJvLT5jb250ZW50Qm94UmVjdCgpOwotICAgICAgICBGbG9h
dFJlY3QgciA9IG1hcFJlY3QocmVjdCwgRmxvYXRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBt
X3NpemUuaGVpZ2h0KCkpLCBkZXN0UmVjdCk7CisgICAgICAgIEZsb2F0UmVjdCByID0gbWFwUmVj
dChyZWN0LCBGbG9hdFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSks
IGRlc3RSZWN0KTsKICAgICAgICAgci5pbnRlcnNlY3QoZGVzdFJlY3QpOwogICAgICAgICBpZiAo
bV9kaXJ0eVJlY3QuY29udGFpbnMocikpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0yMTksMjgg
KzE4OSwyNiBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpyZXNldCgpCiAgICAgYm9vbCBvazsK
ICAgICBpbnQgdyA9IGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpLnRvSW50KCZvayk7CiAgICAgaWYg
KCFvaykKLSAgICAgICAgdyA9IGRlZmF1bHRXaWR0aDsKKyAgICAgICAgdyA9IERlZmF1bHRXaWR0
aDsKICAgICBpbnQgaCA9IGdldEF0dHJpYnV0ZShoZWlnaHRBdHRyKS50b0ludCgmb2spOwogICAg
IGlmICghb2spCi0gICAgICAgIGggPSBkZWZhdWx0SGVpZ2h0OworICAgICAgICBoID0gRGVmYXVs
dEhlaWdodDsKIAotICAgIEludFNpemUgb2xkU2l6ZSA9IG1fc2l6ZTsKLSAgICBtX3NpemUgPSBJ
bnRTaXplKHcsIGgpOworICAgIEludFNpemUgb2xkU2l6ZSA9IHNpemUoKTsKKyAgICBzZXRTdXJm
YWNlU2l6ZShJbnRTaXplKHcsIGgpKTsKIAogI2lmIEVOQUJMRSgzRF9DQU5WQVMpCiAgICAgaWYg
KG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzM2QoKSkKICAgICAgICAgc3RhdGljX2Nhc3Q8V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Kj4obV9jb250ZXh0LmdldCgpKS0+cmVzaGFwZSh3aWR0aCgpLCBo
ZWlnaHQoKSk7CiAjZW5kaWYKIAotICAgIGJvb2wgaGFkSW1hZ2VCdWZmZXIgPSBtX2NyZWF0ZWRJ
bWFnZUJ1ZmZlcjsKLSAgICBtX2NyZWF0ZWRJbWFnZUJ1ZmZlciA9IGZhbHNlOwotICAgIG1faW1h
Z2VCdWZmZXIuY2xlYXIoKTsKKyAgICBib29sIGhhZEltYWdlQnVmZmVyID0gaGFzQ3JlYXRlZElt
YWdlQnVmZmVyKCk7CiAgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzMmQoKSkKICAg
ICAgICAgc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4obV9jb250ZXh0Lmdl
dCgpKS0+cmVzZXQoKTsKIAogICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+
cmVuZGVyZXIoKSkgewogICAgICAgICBpZiAobV9yZW5kZXJlcklzQ2FudmFzKSB7Ci0gICAgICAg
ICAgICBpZiAob2xkU2l6ZSAhPSBtX3NpemUpCisgICAgICAgICAgICBpZiAob2xkU2l6ZSAhPSBz
aXplKCkpCiAgICAgICAgICAgICAgICAgdG9SZW5kZXJIVE1MQ2FudmFzKHJlbmRlcmVyKS0+Y2Fu
dmFzU2l6ZUNoYW5nZWQoKTsKICAgICAgICAgICAgIGlmIChoYWRJbWFnZUJ1ZmZlcikKICAgICAg
ICAgICAgICAgICByZW5kZXJlci0+cmVwYWludCgpOwpAQCAtMjY3LDEwICsyMzUsMTMgQEAgdm9p
ZCBIVE1MQ2FudmFzRWxlbWVudDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiByKQogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKG1faW1hZ2VCdWZmZXIpIHsK
LSAgICAgICAgSW1hZ2UqIGltYWdlID0gbV9pbWFnZUJ1ZmZlci0+aW1hZ2UoKTsKLSAgICAgICAg
aWYgKGltYWdlKQotICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBEZXZpY2VD
b2xvclNwYWNlLCByKTsKKyAgICBpZiAoaGFzQ3JlYXRlZEltYWdlQnVmZmVyKCkpIHsKKyAgICAg
ICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gYnVmZmVyKCk7CisgICAgICAgIGlmIChpbWFn
ZUJ1ZmZlcikgeworICAgICAgICAgICAgSW1hZ2UqIGltYWdlID0gaW1hZ2VCdWZmZXItPmltYWdl
KCk7CisgICAgICAgICAgICBpZiAoaW1hZ2UpCisgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJh
d0ltYWdlKGltYWdlLCBEZXZpY2VDb2xvclNwYWNlLCByKTsKKyAgICAgICAgfQogICAgIH0KIAog
I2lmIEVOQUJMRSgzRF9DQU5WQVMpCkBAIC0yNzksNzYgKzI1MCw2IEBAIHZvaWQgSFRNTENhbnZh
c0VsZW1lbnQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYg
cikKICNlbmRpZgogfQogCi1JbnRSZWN0IEhUTUxDYW52YXNFbGVtZW50Ojpjb252ZXJ0TG9naWNh
bFRvRGV2aWNlKGNvbnN0IEZsb2F0UmVjdCYgbG9naWNhbFJlY3QpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIEludFJlY3QoY29udmVydExvZ2ljYWxUb0RldmljZShsb2dpY2FsUmVjdC5sb2NhdGlvbigp
KSwgY29udmVydExvZ2ljYWxUb0RldmljZShsb2dpY2FsUmVjdC5zaXplKCkpKTsKLX0KLQotSW50
U2l6ZSBIVE1MQ2FudmFzRWxlbWVudDo6Y29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplKSBjb25zdAotewotICAgIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciA9
IGRvY3VtZW50KCktPmZyYW1lKCkgPyBkb2N1bWVudCgpLT5mcmFtZSgpLT5wYWdlKCktPmNocm9t
ZSgpLT5zY2FsZUZhY3RvcigpIDogMS4wZjsKLSAgICBmbG9hdCB3ZiA9IGNlaWxmKGxvZ2ljYWxT
aXplLndpZHRoKCkgKiBwYWdlU2NhbGVGYWN0b3IpOwotICAgIGZsb2F0IGhmID0gY2VpbGYobG9n
aWNhbFNpemUuaGVpZ2h0KCkgKiBwYWdlU2NhbGVGYWN0b3IpOwotICAgIAotICAgIGlmICghKHdm
ID49IDEgJiYgaGYgPj0gMSAmJiB3ZiAqIGhmIDw9IE1heENhbnZhc0FyZWEpKQotICAgICAgICBy
ZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgcmV0dXJuIEludFNpemUoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHdmKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGhmKSk7Ci19Ci0KLUludFBvaW50IEhUTUxD
YW52YXNFbGVtZW50Ojpjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0UG9pbnQmIGxv
Z2ljYWxQb3MpIGNvbnN0Ci17Ci0gICAgZmxvYXQgcGFnZVNjYWxlRmFjdG9yID0gZG9jdW1lbnQo
KS0+ZnJhbWUoKSA/IGRvY3VtZW50KCktPmZyYW1lKCktPnBhZ2UoKS0+Y2hyb21lKCktPnNjYWxl
RmFjdG9yKCkgOiAxLjBmOwotICAgIGZsb2F0IHhmID0gbG9naWNhbFBvcy54KCkgKiBwYWdlU2Nh
bGVGYWN0b3I7Ci0gICAgZmxvYXQgeWYgPSBsb2dpY2FsUG9zLnkoKSAqIHBhZ2VTY2FsZUZhY3Rv
cjsKLSAgICAKLSAgICByZXR1cm4gSW50UG9pbnQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHhmKSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHlmKSk7Ci19Ci0KLXZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1faW1hZ2VCdWZmZXIp
OwotCi0gICAgbV9jcmVhdGVkSW1hZ2VCdWZmZXIgPSB0cnVlOwotICAgIAotICAgIEZsb2F0U2l6
ZSB1bnNjYWxlZFNpemUod2lkdGgoKSwgaGVpZ2h0KCkpOwotICAgIEludFNpemUgc2l6ZSA9IGNv
bnZlcnRMb2dpY2FsVG9EZXZpY2UodW5zY2FsZWRTaXplKTsKLSAgICBpZiAoIXNpemUud2lkdGgo
KSB8fCAhc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbWFnZUJ1ZmZl
ciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSk7Ci0gICAgLy8gVGhlIGNvbnZlcnRMb2dpY2Fs
VG9EZXZpY2UgTWF4Q2FudmFzQXJlYSBjaGVjayBzaG91bGQgcHJldmVudCBjb21tb24gY2FzZXMK
LSAgICAvLyB3aGVyZSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKCkgcmV0dXJucyBOVUxMLCBob3dldmVy
IHdlIGNvdWxkIHN0aWxsIGJlIGxvdyBvbiBtZW1vcnkuCi0gICAgaWYgKCFtX2ltYWdlQnVmZmVy
KQotICAgICAgICByZXR1cm47Ci0gICAgbV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5zY2FsZShG
bG9hdFNpemUoc2l6ZS53aWR0aCgpIC8gdW5zY2FsZWRTaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCkgLyB1bnNjYWxlZFNpemUuaGVpZ2h0KCkpKTsKLSAgICBtX2ltYWdlQnVmZmVyLT5jb250ZXh0
KCktPnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKHRydWUpOwotfQotCi1HcmFwaGljc0NvbnRl
eHQqIEhUTUxDYW52YXNFbGVtZW50OjpkcmF3aW5nQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGJ1ZmZlcigpID8gbV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpIDogMDsKLX0KLQotSW1hZ2VC
dWZmZXIqIEhUTUxDYW52YXNFbGVtZW50OjpidWZmZXIoKSBjb25zdAotewotICAgIGlmICghbV9j
cmVhdGVkSW1hZ2VCdWZmZXIpCi0gICAgICAgIGNyZWF0ZUltYWdlQnVmZmVyKCk7Ci0gICAgcmV0
dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7Ci19Ci0gICAgCi1BZmZpbmVUcmFuc2Zvcm0gSFRNTENh
bnZhc0VsZW1lbnQ6OmJhc2VUcmFuc2Zvcm0oKSBjb25zdAotewotICAgIEFTU0VSVChtX2NyZWF0
ZWRJbWFnZUJ1ZmZlcik7Ci0gICAgRmxvYXRTaXplIHVuc2NhbGVkU2l6ZSh3aWR0aCgpLCBoZWln
aHQoKSk7Ci0gICAgSW50U2l6ZSBzaXplID0gY29udmVydExvZ2ljYWxUb0RldmljZSh1bnNjYWxl
ZFNpemUpOwotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07Ci0gICAgaWYgKHNpemUud2lk
dGgoKSAmJiBzaXplLmhlaWdodCgpKQotICAgICAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3Jt
KHNpemUud2lkdGgoKSAvIHVuc2NhbGVkU2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpIC8gdW5z
Y2FsZWRTaXplLmhlaWdodCgpKTsKLSAgICB0cmFuc2Zvcm0ubXVsdGlwbHkobV9pbWFnZUJ1ZmZl
ci0+YmFzZVRyYW5zZm9ybSgpKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtOwotfQotCiAjaWYgRU5B
QkxFKDNEX0NBTlZBUykgICAgCiBib29sIEhUTUxDYW52YXNFbGVtZW50OjppczNEKCkgY29uc3QK
IHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oIGIvV2ViQ29y
ZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKaW5kZXggYTI5YzFiOC4uNzllNmYxNSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmgKQEAgLTI3LDcgKzI3LDYgQEAKICNpZm5kZWYgSFRNTENhbnZh
c0VsZW1lbnRfaAogI2RlZmluZSBIVE1MQ2FudmFzRWxlbWVudF9oCiAKLSNpbmNsdWRlICJBZmZp
bmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDYW52YXNTdXJmYWNlLmgiCiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKQEAgLTQwLDEzICszOSw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXM7CiBjbGFz
cyBDYW52YXNSZW5kZXJpbmdDb250ZXh0OwotY2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZsb2F0
UmVjdDsKLWNsYXNzIEZsb2F0U2l6ZTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEhU
TUxDYW52YXNFbGVtZW50OwotY2xhc3MgSW1hZ2VCdWZmZXI7Ci1jbGFzcyBJbnRQb2ludDsKIGNs
YXNzIEludFNpemU7CiAKIGNsYXNzIENhbnZhc09ic2VydmVyIHsKQEAgLTYzLDQ2ICs1NywyOCBA
QCBwdWJsaWM6CiAgICAgSFRNTENhbnZhc0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERv
Y3VtZW50Kik7CiAgICAgdmlydHVhbCB+SFRNTENhbnZhc0VsZW1lbnQoKTsKIAotICAgIGludCB3
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOyB9Ci0gICAgaW50IGhlaWdodCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQogICAgIHZvaWQgc2V0V2lkdGgoaW50
KTsKICAgICB2b2lkIHNldEhlaWdodChpbnQpOwogCi0gICAgU3RyaW5nIHRvRGF0YVVSTChjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBFeGNlcHRpb25Db2RlJik7Ci0KICAgICBDYW52YXNSZW5kZXJp
bmdDb250ZXh0KiBnZXRDb250ZXh0KGNvbnN0IFN0cmluZyYsIENhbnZhc0NvbnRleHRBdHRyaWJ1
dGVzKiBhdHRyaWJ1dGVzID0gMCk7CiAKLSAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplOyB9Ci0gICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUp
CisgICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpCiAgICAgeyAKLSAgICAg
ICAgaWYgKHNpemUgPT0gbV9zaXplKQorICAgICAgICBpZiAobmV3U2l6ZSA9PSBzaXplKCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1faWdub3JlUmVzZXQgPSB0cnVlOyAKLSAgICAg
ICAgc2V0V2lkdGgoc2l6ZS53aWR0aCgpKTsKLSAgICAgICAgc2V0SGVpZ2h0KHNpemUuaGVpZ2h0
KCkpOworICAgICAgICBzZXRXaWR0aChuZXdTaXplLndpZHRoKCkpOworICAgICAgICBzZXRIZWln
aHQobmV3U2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIG1faWdub3JlUmVzZXQgPSBmYWxzZTsKICAg
ICAgICAgcmVzZXQoKTsKICAgICB9CiAKLSAgICB2b2lkIHdpbGxEcmF3KGNvbnN0IEZsb2F0UmVj
dCYpOworICAgIHZpcnR1YWwgdm9pZCB3aWxsRHJhdyhjb25zdCBGbG9hdFJlY3QmKTsKIAogICAg
IHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgR3Jh
cGhpY3NDb250ZXh0KiBkcmF3aW5nQ29udGV4dCgpIGNvbnN0OwotCi0gICAgSW1hZ2VCdWZmZXIq
IGJ1ZmZlcigpIGNvbnN0OwotCi0gICAgSW50UmVjdCBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNv
bnN0IEZsb2F0UmVjdCYpIGNvbnN0OwotICAgIEludFNpemUgY29udmVydExvZ2ljYWxUb0Rldmlj
ZShjb25zdCBGbG9hdFNpemUmKSBjb25zdDsKLSAgICBJbnRQb2ludCBjb252ZXJ0TG9naWNhbFRv
RGV2aWNlKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLQotICAgIHZvaWQgc2V0T3JpZ2luVGFp
bnRlZCgpIHsgbV9vcmlnaW5DbGVhbiA9IGZhbHNlOyB9IAotICAgIGJvb2wgb3JpZ2luQ2xlYW4o
KSBjb25zdCB7IHJldHVybiBtX29yaWdpbkNsZWFuOyB9Ci0KICAgICB2b2lkIHNldE9ic2VydmVy
KENhbnZhc09ic2VydmVyKiBvYnNlcnZlcikgeyBtX29ic2VydmVyID0gb2JzZXJ2ZXI7IH0KIAot
ICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Q7Ci0KICAgICBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZXh0LmdldCgpOyB9CiAKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKSAgICAKQEAgLTExOCwyNCArOTQs
MTUgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVy
KFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKIAotICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZm
ZXIoKSBjb25zdDsKICAgICB2b2lkIHJlc2V0KCk7CiAKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQg
TWF4Q2FudmFzQXJlYTsKLQogICAgIGJvb2wgbV9yZW5kZXJlcklzQ2FudmFzOwogCiAgICAgT3du
UHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+IG1fY29udGV4dDsKLSAgICBJbnRTaXplIG1fc2l6
ZTsgICAgCiAgICAgQ2FudmFzT2JzZXJ2ZXIqIG1fb2JzZXJ2ZXI7CiAKLSAgICBib29sIG1fb3Jp
Z2luQ2xlYW47CiAgICAgYm9vbCBtX2lnbm9yZVJlc2V0OwogICAgIEZsb2F0UmVjdCBtX2RpcnR5
UmVjdDsKLQotICAgIC8vIG1fY3JlYXRlZEltYWdlQnVmZmVyIG1lYW5zIHdlIHRyaWVkIHRvIG1h
bGxvYyB0aGUgYnVmZmVyLiAgV2UgZGlkbid0IG5lY2Vzc2FyaWx5IGdldCBpdC4KLSAgICBtdXRh
YmxlIGJvb2wgbV9jcmVhdGVkSW1hZ2VCdWZmZXI7Ci0gICAgbXV0YWJsZSBPd25QdHI8SW1hZ2VC
dWZmZXI+IG1faW1hZ2VCdWZmZXI7CiB9OwogCiB9IC8vbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9N
SU1FVHlwZVJlZ2lzdHJ5LmNwcAppbmRleCBmNWIwMDNiLi5kOTYxZjg2IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKQEAgLTM2OSw2ICszNjksOCBAQCBib29sIE1JTUVUeXBl
UmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VSZXNvdXJjZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpCiAKIGJvb2wgTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVU
eXBlRm9yRW5jb2RpbmcoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworCiAgICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGlmICghc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGluZykK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKaW5kZXggODI2M2ZhYS4uYWM2MTY1OCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKQEAgLTUzLDYgKzUzLDcgQEAgSW1hZ2U6On5J
bWFnZSgpCiAKIEltYWdlKiBJbWFnZTo6bnVsbEltYWdlKCkKIHsKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPEltYWdlPiwgbnVsbElt
YWdlLCAoQml0bWFwSW1hZ2U6OmNyZWF0ZSgpKSk7OwogICAgIHJldHVybiBudWxsSW1hZ2UuZ2V0
KCk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0cuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNw
cAppbmRleCAwZGM3YTUzLi5lZDEwYmRmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8bWF0
aC5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMjU0LDYgKzI1NSw4IEBAIHN0YXRpYyBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21NSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKQogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbWltZVR5cGVDRlN0cmluZyhBZG9wdENG
LCBtaW1lVHlwZS5jcmVhdGVDRlN0cmluZygpKTsKICAgICByZXR1cm4gUmV0YWluUHRyPENGU3Ry
aW5nUmVmPihBZG9wdENGLCBVVFR5cGVDcmVhdGVQcmVmZXJyZWRJZGVudGlmaWVyRm9yVGFnKGtV
VFRhZ0NsYXNzTUlNRVR5cGUsIG1pbWVUeXBlQ0ZTdHJpbmcuZ2V0KCksIDApKTsKICNlbHNlCisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgLy8gSXQgaXMgdW5jbGVhciBpZiBDRlNUUiBpcyB0
aHJlYWRzYWZlLgorCiAgICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0
aGUgc3VwcG9ydGVkIFVUSXMgd2hlbiBhIHdheSB0byBjb252ZXJ0IGZyb20gTUlNRVR5cGUgdG8g
VVRJIHJlbGlhYmx5IGlzIGZvdW5kLgogICAgIC8vIEZvciBub3csIG9ubHkgc3VwcG9ydCBQTkcs
IEpQRUcsIGFuZCBHSUYuIFNlZSA8cmRhcjovL3Byb2JsZW0vNjA5NTI4Nj4uCiAgICAgc3RhdGlj
IGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVQTkcgPSBDRlNUUigicHVibGljLnBuZyIpOwo=
</data>
<flag name="review"
          id="32850"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>