<?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>35262</bug_id>
          
          <creation_ts>2010-02-22 14:55:12 -0800</creation_ts>
          <short_desc>Create a copy of the HTMLCanvasElement files.</short_desc>
          <delta_ts>2010-02-23 15:48:06 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</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>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>192651</commentid>
    <comment_count>0</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-22 14:55:12 -0800</bug_when>
    <thetext>This will be a CanvasSurface class which does the majority of the common work for HTMLCanvasElement and OffscreenCanvas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192655</commentid>
    <comment_count>1</comment_count>
      <attachid>49244</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-22 15:02:07 -0800</bug_when>
    <thetext>Created attachment 49244
Proposed fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193145</commentid>
    <comment_count>2</comment_count>
      <attachid>49329</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-23 15:02:56 -0800</bug_when>
    <thetext>Created attachment 49329
Proposed fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193148</commentid>
    <comment_count>3</comment_count>
      <attachid>49329</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-02-23 15:07:51 -0800</bug_when>
    <thetext>Comment on attachment 49329
Proposed fix.

I think a better first step would be to create a CanvasSurface class and make HTMLCanvasElement inherit from that, then in a follow up patch move the shared functionality down to CanvasSurface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193149</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-23 15:08:06 -0800</bug_when>
    <thetext>Attachment 49329 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/dom/CanvasSurface.cpp:28:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/dom/CanvasSurface.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/dom/CanvasSurface.cpp:174:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/dom/CanvasSurface.cpp:321:  Use 0 instead of NULL.  [readability/null] [4]
WebCore/dom/CanvasSurface.h:27:  #ifndef header guard has wrong style, please use: CanvasSurface_h  [build/header_guard] [5]
WebCore/dom/CanvasSurface.h:140:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 6 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193151</commentid>
    <comment_count>5</comment_count>
      <attachid>49329</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-23 15:12:45 -0800</bug_when>
    <thetext>Comment on attachment 49329
Proposed fix.

r- per Oliver&apos;s feedback.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49244</attachid>
            <date>2010-02-22 15:02:07 -0800</date>
            <delta_ts>2010-02-23 15:02:56 -0800</delta_ts>
            <desc>Proposed fix.</desc>
            <filename>bug34909.txt</filename>
            <type>text/plain</type>
            <size>1073</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NGRmYzZmNi4uMDE5OThhYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMC0wMi0wNSAgRGF2aWQgTGV2aW4g
IDxsZXZpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQ3JlYXRlIGEgY29weSBvZiB0aGUgSFRNTENhbnZhc0VsZW1lbnQgZmls
ZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTI2
MgorCisgICAgICAgIEFuIGluaXRpYWwgc3RlcCBpbiBtYWtpbmcgdGhlIE9mZnNjcmVlbkNhbnZh
cyBvYmplY3QuCisKKyAgICAgICAgTm8gbmV3IGZ1bmN0aW9uYWxpdHkgc28gbm8gbmV3IHRlc3Rz
LgorCisgICAgICAgICogZG9tL0NhbnZhc1N1cmZhY2UuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwLgorICAgICAgICAqIGRvbS9DYW52YXNTdXJmYWNl
Lmg6IENvcGllZCBmcm9tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oLgorCiAyMDEw
LTAyLTA0ICBTdGVwaGVuIFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIGJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5jcHAgYi9XZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmNwcApzaW1pbGFy
aXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5j
cHAKY29weSB0byBXZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmNwcApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmggYi9XZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNl
LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBXZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuaApjb3B5IHRvIFdlYkNvcmUvZG9tL0NhbnZhc1N1cmZhY2UuaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49329</attachid>
            <date>2010-02-23 15:02:56 -0800</date>
            <delta_ts>2010-02-23 15:12:45 -0800</delta_ts>
            <desc>Proposed fix.</desc>
            <filename>bug35262.txt</filename>
            <type>text/plain</type>
            <size>17711</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTE2MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTAtMDItMjMgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENy
ZWF0ZSBhIGNvcHkgb2YgdGhlIEhUTUxDYW52YXNFbGVtZW50IGZpbGVzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUyNjIKKworICAgICAgICBBbiBp
bml0aWFsIHN0ZXAgaW4gbWFraW5nIHRoZSBPZmZzY3JlZW5DYW52YXMgb2JqZWN0LgorCisgICAg
ICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5IHNvIG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIGRv
bS9DYW52YXNTdXJmYWNlLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmNwcC4KKyAgICAgICAgKiBkb20vQ2FudmFzU3VyZmFjZS5oOiBDb3BpZWQgZnJvbSBX
ZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaC4KKwogMjAxMC0wMi0yMyAgTGVhbmRybyBQ
ZXJlaXJhICA8bGVhbmRyb0Bwcm9mdXNpb24ubW9iaT4KIAogICAgICAgICBSZXZpZXdlZCBieSBH
dXN0YXZvIE5vcm9uaGEgU2lsdmEuCkluZGV4OiBXZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmNwcAkocmV2aXNpb24g
NTUxNjEpCShmcm9tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6NTUxNjEpCisr
KyBXZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxh
bHBAYXRva2VyLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhU
TUxDYW52YXNFbGVtZW50LmgiCisKKyNpbmNsdWRlICJDYW52YXNDb250ZXh0QXR0cmlidXRlcy5o
IgorI2luY2x1ZGUgIkNhbnZhc0dyYWRpZW50LmgiCisjaW5jbHVkZSAiQ2FudmFzUGF0dGVybi5o
IgorI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgorI2lmIEVOQUJMRSgzRF9D
QU5WQVMpICAgIAorI2luY2x1ZGUgIldlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRl
ICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNlbmRpZgorI2luY2x1ZGUgIkNhbnZhc1N0eWxl
LmgiCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJNYXBwZWRBdHRy
aWJ1dGUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVySFRNTENhbnZhcy5o
IgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0
ZGlvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKKworLy8gVGhlc2UgdmFsdWVzIGNvbWUgZnJvbSB0aGUgV2hhdFdHIHNwZWMuCitzdGF0aWMg
Y29uc3QgaW50IGRlZmF1bHRXaWR0aCA9IDMwMDsKK3N0YXRpYyBjb25zdCBpbnQgZGVmYXVsdEhl
aWdodCA9IDE1MDsKKworLy8gRmlyZWZveCBsaW1pdHMgd2lkdGgvaGVpZ2h0IHRvIDMyNzY3IHBp
eGVscywgYnV0IHNsb3dzIGRvd24gZHJhbWF0aWNhbGx5IGJlZm9yZSBpdCAKKy8vIHJlYWNoZXMg
dGhhdCBsaW1pdC4gV2UgbGltaXQgYnkgYXJlYSBpbnN0ZWFkLCBnaXZpbmcgdXMgbGFyZ2VyIG1h
eGltdW0gZGltZW5zaW9ucywKKy8vIGluIGV4Y2hhbmdlIGZvciBhIHNtYWxsZXIgbWF4aW11bSBj
YW52YXMgc2l6ZS4KK2NvbnN0IGZsb2F0IEhUTUxDYW52YXNFbGVtZW50OjpNYXhDYW52YXNBcmVh
ID0gMzI3NjggKiA4MTkyOyAvLyBNYXhpbXVtIGNhbnZhcyBhcmVhIGluIENTUyBwaXhlbHMKKwor
SFRNTENhbnZhc0VsZW1lbnQ6OkhUTUxDYW52YXNFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2Mp
CisgICAgLCBtX3NpemUoZGVmYXVsdFdpZHRoLCBkZWZhdWx0SGVpZ2h0KQorICAgICwgbV9vYnNl
cnZlcigwKQorICAgICwgbV9vcmlnaW5DbGVhbih0cnVlKQorICAgICwgbV9pZ25vcmVSZXNldChm
YWxzZSkKKyAgICAsIG1fY3JlYXRlZEltYWdlQnVmZmVyKGZhbHNlKQoreworICAgIEFTU0VSVCho
YXNUYWdOYW1lKGNhbnZhc1RhZykpOworfQorCitIVE1MQ2FudmFzRWxlbWVudDo6fkhUTUxDYW52
YXNFbGVtZW50KCkKK3sKKyAgICBpZiAobV9vYnNlcnZlcikKKyAgICAgICAgbV9vYnNlcnZlci0+
Y2FudmFzRGVzdHJveWVkKHRoaXMpOworfQorCisjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JU
KQorCitIVE1MVGFnU3RhdHVzIEhUTUxDYW52YXNFbGVtZW50OjplbmRUYWdSZXF1aXJlbWVudCgp
IGNvbnN0IAoreworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50KCktPnNldHRpbmdz
KCk7CisgICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdzLT51c2VzRGFzaGJvYXJkQmFja3dhcmRD
b21wYXRpYmlsaXR5TW9kZSgpKQorICAgICAgICByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyAK
KworICAgIHJldHVybiBIVE1MRWxlbWVudDo6ZW5kVGFnUmVxdWlyZW1lbnQoKTsKK30KKworaW50
IEhUTUxDYW52YXNFbGVtZW50Ojp0YWdQcmlvcml0eSgpIGNvbnN0IAoreyAKKyAgICBTZXR0aW5n
cyogc2V0dGluZ3MgPSBkb2N1bWVudCgpLT5zZXR0aW5ncygpOworICAgIGlmIChzZXR0aW5ncyAm
JiBzZXR0aW5ncy0+dXNlc0Rhc2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUoKSkKKyAg
ICAgICAgcmV0dXJuIDA7IAorCisgICAgcmV0dXJuIEhUTUxFbGVtZW50Ojp0YWdQcmlvcml0eSgp
OworfQorCisjZW5kaWYKKwordm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQoreworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lID0gYXR0ci0+bmFtZSgpOworICAgIGlmIChhdHRyTmFtZSA9PSB3aWR0aEF0dHIg
fHwgYXR0ck5hbWUgPT0gaGVpZ2h0QXR0cikKKyAgICAgICAgcmVzZXQoKTsKKyAgICBIVE1MRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cit9CisKK1JlbmRlck9iamVjdCogSFRN
TENhbnZhc0VsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVy
U3R5bGUqIHN0eWxlKQoreworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50KCktPnNl
dHRpbmdzKCk7CisgICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdzLT5pc0phdmFTY3JpcHRFbmFi
bGVkKCkpIHsKKyAgICAgICAgbV9yZW5kZXJlcklzQ2FudmFzID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIG5ldyAoYXJlbmEpIFJlbmRlckhUTUxDYW52YXModGhpcyk7CisgICAgfQorCisgICAgbV9y
ZW5kZXJlcklzQ2FudmFzID0gZmFsc2U7CisgICAgcmV0dXJuIEhUTUxFbGVtZW50OjpjcmVhdGVS
ZW5kZXJlcihhcmVuYSwgc3R5bGUpOworfQorCit2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRI
ZWlnaHQoaW50IHZhbHVlKQoreworICAgIHNldEF0dHJpYnV0ZShoZWlnaHRBdHRyLCBTdHJpbmc6
Om51bWJlcih2YWx1ZSkpOworfQorCit2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRXaWR0aChp
bnQgdmFsdWUpCit7CisgICAgc2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgU3RyaW5nOjpudW1iZXIo
dmFsdWUpKTsKK30KKworU3RyaW5nIEhUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFVUkwoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFtX29yaWdp
bkNsZWFuKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisgICAgfQorCisgICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkgfHwgIWJ1ZmZlcigpKQor
ICAgICAgICByZXR1cm4gU3RyaW5nKCJkYXRhOiwiKTsKKworICAgIGlmIChtaW1lVHlwZS5pc051
bGwoKSB8fCAhTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5j
b2RpbmcobWltZVR5cGUpKQorICAgICAgICByZXR1cm4gYnVmZmVyKCktPnRvRGF0YVVSTCgiaW1h
Z2UvcG5nIik7CisKKyAgICByZXR1cm4gYnVmZmVyKCktPnRvRGF0YVVSTChtaW1lVHlwZSk7Cit9
CisKK0NhbnZhc1JlbmRlcmluZ0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0
KGNvbnN0IFN0cmluZyYgdHlwZSwgQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMqIGF0dHJzKQorewor
ICAgIC8vIEEgQ2FudmFzIGNhbiBlaXRoZXIgYmUgIjJEIiBvciAid2ViZ2wiIGJ1dCBuZXZlciBi
b3RoLiBJZiB5b3UgcmVxdWVzdCBhIDJEIGNhbnZhcyBhbmQgdGhlIGV4aXN0aW5nCisgICAgLy8g
Y29udGV4dCBpcyBhbHJlYWR5IDJELCBqdXN0IHJldHVybiB0aGF0LiBJZiB0aGUgZXhpc3Rpbmcg
Y29udGV4dCBpcyBXZWJHTCwgdGhlbiBkZXN0cm95IGl0CisgICAgLy8gYmVmb3JlIGNyZWF0aW5n
IGEgbmV3IDJEIGNvbnRleHQuIFZpY2UgdmVyc2Egd2hlbiByZXF1ZXN0aW5nIGEgV2ViR0wgY2Fu
dmFzLiBSZXF1ZXN0aW5nIGEKKyAgICAvLyBjb250ZXh0IHdpdGggYW55IG90aGVyIHR5cGUgc3Ry
aW5nIHdpbGwgZGVzdHJveSBhbnkgZXhpc3RpbmcgY29udGV4dC4KKyAgICAKKyAgICAvLyBGSVhN
RSAtIFRoZSBjb2RlIGRlcGVuZHMgb24gdGhlIGNvbnRleHQgbm90IGdvaW5nIGF3YXkgb25jZSBj
cmVhdGVkLCB0byBwcmV2ZW50IEpTIGZyb20KKyAgICAvLyBzZWVpbmcgYSBkYW5nbGluZyBwb2lu
dGVyLiBTbyBmb3Igbm93IHdlIHdpbGwgZGlzYWxsb3cgdGhlIGNvbnRleHQgZnJvbSBiZWluZyBj
aGFuZ2VkCisgICAgLy8gb25jZSBpdCBpcyBjcmVhdGVkLgorICAgIGlmICh0eXBlID09ICIyZCIp
IHsKKyAgICAgICAgaWYgKG1fY29udGV4dCAmJiAhbV9jb250ZXh0LT5pczJkKCkpCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQpCisgICAgICAgICAgICBtX2Nv
bnRleHQgPSBuZXcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKHRoaXMpOworICAgICAgICByZXR1
cm4gbV9jb250ZXh0LmdldCgpOworICAgIH0KKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKSAgICAKKyAg
ICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudCgpLT5zZXR0aW5ncygpOworICAgIGlmIChz
ZXR0aW5ncyAmJiBzZXR0aW5ncy0+d2ViR0xFbmFibGVkKCkpIHsKKyAgICAgICAgLy8gQWNjZXB0
IHRoZSBsZWdhY3kgIndlYmtpdC0zZCIgbmFtZSBhcyB3ZWxsIGFzIHRoZSBwcm92aXNpb25hbCAi
ZXhwZXJpbWVudGFsLXdlYmdsIiBuYW1lLgorICAgICAgICAvLyBPbmNlIHJhdGlmaWVkLCB3ZSB3
aWxsIGFsc28gYWNjZXB0ICJ3ZWJnbCIgYXMgdGhlIGNvbnRleHQgbmFtZS4KKyAgICAgICAgaWYg
KCh0eXBlID09ICJ3ZWJraXQtM2QiKSB8fAorICAgICAgICAgICAgKHR5cGUgPT0gImV4cGVyaW1l
bnRhbC13ZWJnbCIpKSB7CisgICAgICAgICAgICBpZiAobV9jb250ZXh0ICYmICFtX2NvbnRleHQt
PmlzM2QoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGlmICghbV9j
b250ZXh0KSB7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0ID0gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpjcmVhdGUodGhpcywgc3RhdGljX2Nhc3Q8V2ViR0xDb250ZXh0QXR0cmlidXRlcyo+KGF0
dHJzKSk7CisgICAgICAgICAgICAgICAgaWYgKG1fY29udGV4dCkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSBhIFJlbmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBs
YXllciBnZXQgY3JlYXRlZCBmb3IgdGhlIENhbnZhcworICAgICAgICAgICAgICAgICAgICBzZXRO
ZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOworICAg
ICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oYXR0cnMpOworI2VuZGlmCisg
ICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OndpbGxEcmF3KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgbV9p
bWFnZUJ1ZmZlci0+Y2xlYXJJbWFnZSgpOworICAgIAorICAgIGlmIChSZW5kZXJCb3gqIHJvID0g
cmVuZGVyQm94KCkpIHsKKyAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gcm8tPmNvbnRlbnRC
b3hSZWN0KCk7CisgICAgICAgIEZsb2F0UmVjdCByID0gbWFwUmVjdChyZWN0LCBGbG9hdFJlY3Qo
MCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSksIGRlc3RSZWN0KTsKKyAgICAg
ICAgci5pbnRlcnNlY3QoZGVzdFJlY3QpOworICAgICAgICBpZiAobV9kaXJ0eVJlY3QuY29udGFp
bnMocikpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9kaXJ0eVJlY3QudW5pdGUo
cik7CisgICAgICAgIHJvLT5yZXBhaW50UmVjdGFuZ2xlKGVuY2xvc2luZ0ludFJlY3QobV9kaXJ0
eVJlY3QpKTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fb2JzZXJ2ZXIpCisgICAgICAgIG1fb2Jz
ZXJ2ZXItPmNhbnZhc0NoYW5nZWQodGhpcywgcmVjdCk7Cit9CisKK3ZvaWQgSFRNTENhbnZhc0Vs
ZW1lbnQ6OnJlc2V0KCkKK3sKKyAgICBpZiAobV9pZ25vcmVSZXNldCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYm9vbCBvazsKKyAgICBpbnQgdyA9IGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpLnRv
SW50KCZvayk7CisgICAgaWYgKCFvaykKKyAgICAgICAgdyA9IGRlZmF1bHRXaWR0aDsKKyAgICBp
bnQgaCA9IGdldEF0dHJpYnV0ZShoZWlnaHRBdHRyKS50b0ludCgmb2spOworICAgIGlmICghb2sp
CisgICAgICAgIGggPSBkZWZhdWx0SGVpZ2h0OworCisgICAgSW50U2l6ZSBvbGRTaXplID0gbV9z
aXplOworICAgIG1fc2l6ZSA9IEludFNpemUodywgaCk7CisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFT
KQorICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczNkKCkpCisgICAgICAgIHN0YXRp
Y19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KG1fY29udGV4dC5nZXQoKSktPnJlc2hhcGUo
d2lkdGgoKSwgaGVpZ2h0KCkpOworI2VuZGlmCisKKyAgICBib29sIGhhZEltYWdlQnVmZmVyID0g
bV9jcmVhdGVkSW1hZ2VCdWZmZXI7CisgICAgbV9jcmVhdGVkSW1hZ2VCdWZmZXIgPSBmYWxzZTsK
KyAgICBtX2ltYWdlQnVmZmVyLmNsZWFyKCk7CisgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRl
eHQtPmlzMmQoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Kj4obV9jb250ZXh0LmdldCgpKS0+cmVzZXQoKTsKKworICAgIGlmIChSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkgeworICAgICAgICBpZiAobV9yZW5kZXJlcklzQ2Fu
dmFzKSB7CisgICAgICAgICAgICBpZiAob2xkU2l6ZSAhPSBtX3NpemUpCisgICAgICAgICAgICAg
ICAgdG9SZW5kZXJIVE1MQ2FudmFzKHJlbmRlcmVyKS0+Y2FudmFzU2l6ZUNoYW5nZWQoKTsKKyAg
ICAgICAgICAgIGlmIChoYWRJbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgICAgICByZW5kZXJlci0+
cmVwYWludCgpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fb2JzZXJ2ZXIpCisgICAg
ICAgIG1fb2JzZXJ2ZXItPmNhbnZhc1Jlc2l6ZWQodGhpcyk7Cit9CisKK3ZvaWQgSFRNTENhbnZh
c0VsZW1lbnQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYg
cikKK3sKKyAgICAvLyBDbGVhciB0aGUgZGlydHkgcmVjdAorICAgIG1fZGlydHlSZWN0ID0gRmxv
YXRSZWN0KCk7CisKKyAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAg
ICByZXR1cm47CisgICAgCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKyAgICBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqIGNvbnRleHQzRCA9IDA7CisgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQt
PmlzM2QoKSkgeworICAgICAgICBjb250ZXh0M0QgPSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqPihtX2NvbnRleHQuZ2V0KCkpOworICAgICAgICBjb250ZXh0M0QtPmJlZ2luUGFp
bnQoKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChtX2ltYWdlQnVmZmVyKSB7CisgICAgICAg
IEltYWdlKiBpbWFnZSA9IG1faW1hZ2VCdWZmZXItPmltYWdlKCk7CisgICAgICAgIGlmIChpbWFn
ZSkKKyAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgRGV2aWNlQ29sb3JTcGFj
ZSwgcik7CisgICAgfQorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKyAgICBpZiAoY29udGV4dDNE
KQorICAgICAgICBjb250ZXh0M0QtPmVuZFBhaW50KCk7CisjZW5kaWYKK30KKworSW50UmVjdCBI
VE1MQ2FudmFzRWxlbWVudDo6Y29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFJlY3Qm
IGxvZ2ljYWxSZWN0KSBjb25zdAoreworICAgIHJldHVybiBJbnRSZWN0KGNvbnZlcnRMb2dpY2Fs
VG9EZXZpY2UobG9naWNhbFJlY3QubG9jYXRpb24oKSksIGNvbnZlcnRMb2dpY2FsVG9EZXZpY2Uo
bG9naWNhbFJlY3Quc2l6ZSgpKSk7Cit9CisKK0ludFNpemUgSFRNTENhbnZhc0VsZW1lbnQ6OmNv
bnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSkgY29uc3QK
K3sKKyAgICBmbG9hdCBwYWdlU2NhbGVGYWN0b3IgPSBkb2N1bWVudCgpLT5mcmFtZSgpID8gZG9j
dW1lbnQoKS0+ZnJhbWUoKS0+cGFnZSgpLT5jaHJvbWUoKS0+c2NhbGVGYWN0b3IoKSA6IDEuMGY7
CisgICAgZmxvYXQgd2YgPSBjZWlsZihsb2dpY2FsU2l6ZS53aWR0aCgpICogcGFnZVNjYWxlRmFj
dG9yKTsKKyAgICBmbG9hdCBoZiA9IGNlaWxmKGxvZ2ljYWxTaXplLmhlaWdodCgpICogcGFnZVNj
YWxlRmFjdG9yKTsKKyAgICAKKyAgICBpZiAoISh3ZiA+PSAxICYmIGhmID49IDEgJiYgd2YgKiBo
ZiA8PSBNYXhDYW52YXNBcmVhKSkKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIHJl
dHVybiBJbnRTaXplKHN0YXRpY19jYXN0PHVuc2lnbmVkPih3ZiksIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihoZikpOworfQorCitJbnRQb2ludCBIVE1MQ2FudmFzRWxlbWVudDo6Y29udmVydExvZ2lj
YWxUb0RldmljZShjb25zdCBGbG9hdFBvaW50JiBsb2dpY2FsUG9zKSBjb25zdAoreworICAgIGZs
b2F0IHBhZ2VTY2FsZUZhY3RvciA9IGRvY3VtZW50KCktPmZyYW1lKCkgPyBkb2N1bWVudCgpLT5m
cmFtZSgpLT5wYWdlKCktPmNocm9tZSgpLT5zY2FsZUZhY3RvcigpIDogMS4wZjsKKyAgICBmbG9h
dCB4ZiA9IGxvZ2ljYWxQb3MueCgpICogcGFnZVNjYWxlRmFjdG9yOworICAgIGZsb2F0IHlmID0g
bG9naWNhbFBvcy55KCkgKiBwYWdlU2NhbGVGYWN0b3I7CisgICAgCisgICAgcmV0dXJuIEludFBv
aW50KHN0YXRpY19jYXN0PHVuc2lnbmVkPih4ZiksIHN0YXRpY19jYXN0PHVuc2lnbmVkPih5Zikp
OworfQorCit2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0
Cit7CisgICAgQVNTRVJUKCFtX2ltYWdlQnVmZmVyKTsKKworICAgIG1fY3JlYXRlZEltYWdlQnVm
ZmVyID0gdHJ1ZTsKKyAgICAKKyAgICBGbG9hdFNpemUgdW5zY2FsZWRTaXplKHdpZHRoKCksIGhl
aWdodCgpKTsKKyAgICBJbnRTaXplIHNpemUgPSBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKHVuc2Nh
bGVkU2l6ZSk7CisgICAgaWYgKCFzaXplLndpZHRoKCkgfHwgIXNpemUuaGVpZ2h0KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNp
emUpOworICAgIC8vIFRoZSBjb252ZXJ0TG9naWNhbFRvRGV2aWNlIE1heENhbnZhc0FyZWEgY2hl
Y2sgc2hvdWxkIHByZXZlbnQgY29tbW9uIGNhc2VzCisgICAgLy8gd2hlcmUgSW1hZ2VCdWZmZXI6
OmNyZWF0ZSgpIHJldHVybnMgTlVMTCwgaG93ZXZlciB3ZSBjb3VsZCBzdGlsbCBiZSBsb3cgb24g
bWVtb3J5LgorICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIG1f
aW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+c2NhbGUoRmxvYXRTaXplKHNpemUud2lkdGgoKSAvIHVu
c2NhbGVkU2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpIC8gdW5zY2FsZWRTaXplLmhlaWdodCgp
KSk7CisgICAgbV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5zZXRTaGFkb3dzSWdub3JlVHJhbnNm
b3Jtcyh0cnVlKTsKK30KKworR3JhcGhpY3NDb250ZXh0KiBIVE1MQ2FudmFzRWxlbWVudDo6ZHJh
d2luZ0NvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBidWZmZXIoKSA/IG1faW1hZ2VCdWZm
ZXItPmNvbnRleHQoKSA6IDA7Cit9CisKK0ltYWdlQnVmZmVyKiBIVE1MQ2FudmFzRWxlbWVudDo6
YnVmZmVyKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY3JlYXRlZEltYWdlQnVmZmVyKQorICAgICAg
ICBjcmVhdGVJbWFnZUJ1ZmZlcigpOworICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOwor
fQorICAgIAorQWZmaW5lVHJhbnNmb3JtIEhUTUxDYW52YXNFbGVtZW50OjpiYXNlVHJhbnNmb3Jt
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9jcmVhdGVkSW1hZ2VCdWZmZXIpOworICAgIEZsb2F0
U2l6ZSB1bnNjYWxlZFNpemUod2lkdGgoKSwgaGVpZ2h0KCkpOworICAgIEludFNpemUgc2l6ZSA9
IGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UodW5zY2FsZWRTaXplKTsKKyAgICBBZmZpbmVUcmFuc2Zv
cm0gdHJhbnNmb3JtOworICAgIGlmIChzaXplLndpZHRoKCkgJiYgc2l6ZS5oZWlnaHQoKSkKKyAg
ICAgICAgdHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShzaXplLndpZHRoKCkgLyB1bnNjYWxlZFNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSAvIHVuc2NhbGVkU2l6ZS5oZWlnaHQoKSk7CisgICAg
dHJhbnNmb3JtLm11bHRpcGx5KG1faW1hZ2VCdWZmZXItPmJhc2VUcmFuc2Zvcm0oKSk7CisgICAg
cmV0dXJuIHRyYW5zZm9ybTsKK30KKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpICAgIAorYm9vbCBI
VE1MQ2FudmFzRWxlbWVudDo6aXMzRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dCAm
JiBtX2NvbnRleHQtPmlzM2QoKTsKK30KKyNlbmRpZgorCit9CkluZGV4OiBXZWJDb3JlL2RvbS9D
YW52YXNTdXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5o
CShyZXZpc2lvbiA1NTE2MSkJKGZyb20gV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6
NTUxNjEpCisrKyBXZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBU
b2tlciA8YWxwQGF0b2tlci5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSFRNTENhbnZhc0VsZW1lbnRf
aAorI2RlZmluZSBIVE1MQ2FudmFzRWxlbWVudF9oCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgor
I2lmIEVOQUJMRSgzRF9DQU5WQVMpICAgIAorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CisjZW5kaWYKKyNpbmNsdWRlICJJbnRTaXplLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXM7CitjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250
ZXh0OworY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEZsb2F0U2l6
ZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEhUTUxDYW52YXNFbGVtZW50OworY2xh
c3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBJbnRQb2ludDsKK2NsYXNzIEludFNpemU7CisKK2NsYXNz
IENhbnZhc09ic2VydmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DYW52YXNPYnNlcnZlcigp
IHsgfQorCisgICAgdmlydHVhbCB2b2lkIGNhbnZhc0NoYW5nZWQoSFRNTENhbnZhc0VsZW1lbnQq
LCBjb25zdCBGbG9hdFJlY3QmIGNoYW5nZWRSZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNh
bnZhc1Jlc2l6ZWQoSFRNTENhbnZhc0VsZW1lbnQqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNh
bnZhc0Rlc3Ryb3llZChIVE1MQ2FudmFzRWxlbWVudCopID0gMDsKK307CisKK2NsYXNzIEhUTUxD
YW52YXNFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBIVE1MQ2Fu
dmFzRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFs
IH5IVE1MQ2FudmFzRWxlbWVudCgpOworCisgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4g
bV9zaXplLndpZHRoKCk7IH0KKyAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
LmhlaWdodCgpOyB9CisgICAgdm9pZCBzZXRXaWR0aChpbnQpOworICAgIHZvaWQgc2V0SGVpZ2h0
KGludCk7CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIEV4
Y2VwdGlvbkNvZGUmKTsKKworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGdldENvbnRleHQo
Y29uc3QgU3RyaW5nJiwgQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMqIGF0dHJpYnV0ZXMgPSAwKTsK
KworICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAg
ICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICB7IAorICAgICAgICBpZiAo
c2l6ZSA9PSBtX3NpemUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1faWdub3JlUmVz
ZXQgPSB0cnVlOyAKKyAgICAgICAgc2V0V2lkdGgoc2l6ZS53aWR0aCgpKTsKKyAgICAgICAgc2V0
SGVpZ2h0KHNpemUuaGVpZ2h0KCkpOworICAgICAgICBtX2lnbm9yZVJlc2V0ID0gZmFsc2U7Cisg
ICAgICAgIHJlc2V0KCk7CisgICAgfQorCisgICAgdm9pZCB3aWxsRHJhdyhjb25zdCBGbG9hdFJl
Y3QmKTsKKworICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYp
OworCisgICAgR3JhcGhpY3NDb250ZXh0KiBkcmF3aW5nQ29udGV4dCgpIGNvbnN0OworCisgICAg
SW1hZ2VCdWZmZXIqIGJ1ZmZlcigpIGNvbnN0OworCisgICAgSW50UmVjdCBjb252ZXJ0TG9naWNh
bFRvRGV2aWNlKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OworICAgIEludFNpemUgY29udmVydExv
Z2ljYWxUb0RldmljZShjb25zdCBGbG9hdFNpemUmKSBjb25zdDsKKyAgICBJbnRQb2ludCBjb252
ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKworICAgIHZvaWQg
c2V0T3JpZ2luVGFpbnRlZCgpIHsgbV9vcmlnaW5DbGVhbiA9IGZhbHNlOyB9IAorICAgIGJvb2wg
b3JpZ2luQ2xlYW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbkNsZWFuOyB9CisKKyAgICB2b2lk
IHNldE9ic2VydmVyKENhbnZhc09ic2VydmVyKiBvYnNlcnZlcikgeyBtX29ic2VydmVyID0gb2Jz
ZXJ2ZXI7IH0KKworICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Q7CisK
KyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKSAgICAKKyAg
ICBib29sIGlzM0QoKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorI2lmIEVOQUJMRShEQVNI
Qk9BUkRfU1VQUE9SVCkKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1l
bnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0OworI2VuZGlm
CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
Kik7CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5h
KiwgUmVuZGVyU3R5bGUqKTsKKworICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdDsK
KyAgICB2b2lkIHJlc2V0KCk7CisKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2FudmFzQXJl
YTsKKworICAgIGJvb2wgbV9yZW5kZXJlcklzQ2FudmFzOworCisgICAgT3duUHRyPENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQ+IG1fY29udGV4dDsKKyAgICBJbnRTaXplIG1fc2l6ZTsgICAgCisgICAg
Q2FudmFzT2JzZXJ2ZXIqIG1fb2JzZXJ2ZXI7CisKKyAgICBib29sIG1fb3JpZ2luQ2xlYW47Cisg
ICAgYm9vbCBtX2lnbm9yZVJlc2V0OworICAgIEZsb2F0UmVjdCBtX2RpcnR5UmVjdDsKKworICAg
IC8vIG1fY3JlYXRlZEltYWdlQnVmZmVyIG1lYW5zIHdlIHRyaWVkIHRvIG1hbGxvYyB0aGUgYnVm
ZmVyLiAgV2UgZGlkbid0IG5lY2Vzc2FyaWx5IGdldCBpdC4KKyAgICBtdXRhYmxlIGJvb2wgbV9j
cmVhdGVkSW1hZ2VCdWZmZXI7CisgICAgbXV0YWJsZSBPd25QdHI8SW1hZ2VCdWZmZXI+IG1faW1h
Z2VCdWZmZXI7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgo=
</data>
<flag name="review"
          id="32175"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>