<?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>22179</bug_id>
          
          <creation_ts>2008-11-11 10:39:03 -0800</creation_ts>
          <short_desc>Move EvalCodeCache from CodeBlock.h into its own file</short_desc>
          <delta_ts>2008-11-11 12:07:47 -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>JavaScriptCore</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Cameron Zwarich (cpst)">zwarich</reporter>
          <assigned_to name="Cameron Zwarich (cpst)">zwarich</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>98302</commentid>
    <comment_count>0</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-11-11 10:39:03 -0800</bug_when>
    <thetext>We should do this. There is no reason for it to be in CodeBlock.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98313</commentid>
    <comment_count>1</comment_count>
      <attachid>25048</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-11-11 11:34:01 -0800</bug_when>
    <thetext>Created attachment 25048
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98320</commentid>
    <comment_count>2</comment_count>
      <attachid>25048</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-11-11 12:07:34 -0800</bug_when>
    <thetext>Comment on attachment 25048
Proposed patch

A version of this with Visual Studio project changes and a ChangeLog was rubber-stamped by Sam Weinig and committed as r38311.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25048</attachid>
            <date>2008-11-11 11:34:01 -0800</date>
            <delta_ts>2008-11-11 12:07:34 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>codecache.diff</filename>
            <type>text/plain</type>
            <size>34282</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IEdOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiAzODMwMikKKysrIEdOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3
Myw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCUphdmFTY3JpcHRDb3JlL1ZNL0Nv
ZGVCbG9jay5jcHAgXAogCUphdmFTY3JpcHRDb3JlL1ZNL0NvZGVCbG9jay5oIFwKIAlKYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQ29kZUdlbmVyYXRvci5oIFwKKwlKYXZhU2NyaXB0Q29yZS9W
TS9FdmFsQ29kZUNhY2hlLmggXAogCUphdmFTY3JpcHRDb3JlL1ZNL0V4Y2VwdGlvbkhlbHBlcnMu
Y3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9WTS9FeGNlcHRpb25IZWxwZXJzLmggXAogCUphdmFTY3Jp
cHRDb3JlL1ZNL0luc3RydWN0aW9uLmggXApJbmRleDogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAzODMwMikKKysrIEphdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDcgQEAKIAkJ
NjVGREU0OUMwQkREMUQ0QTAwRTgwMTExIC8qIEFzc2VydGlvbnMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVFMjE3QjgwOEU3RUVDQzAwMjNFNUY2
IC8qIEFzc2VydGlvbnMuY3BwICovOyBzZXR0aW5ncyA9IHtDT01QSUxFUl9GTEFHUyA9ICItV25v
LW1pc3NpbmctZm9ybWF0LWF0dHJpYnV0ZSI7IH07IH07CiAJCTdFMkFERDhFMEU3OUFBRDUwMEQ1
MEM1MSAvKiBDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTJBREQ4RDBFNzlBQUQ1MDBENTBDNTEgLyogQ2hh
cmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvci5oICovOyB9OwogCQk3RTJBREQ5MDBFNzlBQzExMDBENTBD
NTEgLyogQ2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTJBREQ4RjBFNzlBQzExMDBENTBDNTEgLyogQ2hh
cmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvci5jcHAgKi87IH07CisJCTdFNEM4OTE0MEVDQTBGOUEwMERC
RUVFQyAvKiBFdmFsQ29kZUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3RTRDODkxMzBFQ0EwRjlBMDBEQkVFRUMgLyogRXZhbENvZGVDYWNoZS5o
ICovOyB9OwogCQk3RTRFRTcwOTBFQkI3OTYzMDA1OTM0QUEgLyogU3RydWN0dXJlSURDaGFpbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0U0RUU3MDgw
RUJCNzk2MzAwNTkzNEFBIC8qIFN0cnVjdHVyZUlEQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3RTRFRTcwRjBFQkI3QTVCMDA1OTM0QUEg
LyogU3RydWN0dXJlSURDaGFpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3RTRFRTcwRTBFQkI3QTVCMDA1OTM0QUEgLyogU3RydWN0dXJlSURDaGFp
bi5jcHAgKi87IH07CiAJCTdFRkYwMDY0MEVDMDVBOUEwMEFBN0M5MyAvKiBOb2RlSW5mby5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0VGRjAwNjMwRUMw
NUE5QTAwQUE3QzkzIC8qIE5vZGVJbmZvLmggKi87IH07CkBAIC01MjQsNiArNTI1LDcgQEAKIAkJ
N0UyQUREOEQwRTc5QUFENTAwRDUwQzUxIC8qIENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3RTJBREQ4RjBFNzlBQzExMDBENTBD
NTEgLyogQ2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0UyQzZDOTgwRDMxQzZCNjAwMkQ0NEUyIC8qIFNjb3BlQ2hh
aW5NYXJrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjb3BlQ2hhaW5NYXJr
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdFNEM4OTEzMEVDQTBGOUEwMERCRUVF
QyAvKiBFdmFsQ29kZUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEV2
YWxDb2RlQ2FjaGUuaDsgcGF0aCA9IFZNL0V2YWxDb2RlQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0U0RUU3MDgwRUJCNzk2MzAwNTkzNEFBIC8qIFN0cnVjdHVyZUlEQ2hh
aW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlSURDaGFpbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3RTRFRTcwRTBFQkI3QTVCMDA1OTM0QUEg
LyogU3RydWN0dXJlSURDaGFpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTdHJ1Y3R1cmVJRENoYWluLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0VGRjAwNjMwRUMwNUE5QTAwQUE3QzkzIC8qIE5vZGVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5vZGVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC05NTMsMTAgKzk1NSw5IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQk4NjgzQjAyQjBFNjM2NDgy
MDA0QzE5RUUgLyogQ1RJLmNwcCAqLywKIAkJCQk4NjgzQjAyQzBFNjM2NDgyMDA0QzE5RUUgLyog
Q1RJLmggKi8sCi0JCQkJODYxM0Y0NTgwRTNBNDMzRTAwQzk0OEZEIC8qIFNhbXBsaW5nVG9vbC5j
cHAgKi8sCi0JCQkJODYxM0Y0NTkwRTNBNDMzRTAwQzk0OEZEIC8qIFNhbXBsaW5nVG9vbC5oICov
LAogCQkJCTE0OUIxQTlFMEQ4NkVENzMwMDlDQjhDNyAvKiBDb2RlQmxvY2suY3BwICovLAogCQkJ
CTE0OUIxQTlEMEQ4NkVENzMwMDlDQjhDNyAvKiBDb2RlQmxvY2suaCAqLywKKwkJCQk3RTRDODkx
MzBFQ0EwRjlBMDBEQkVFRUMgLyogRXZhbENvZGVDYWNoZS5oICovLAogCQkJCUE3MjcwMUI0MERB
REU5NDkwMEU1NDhENyAvKiBFeGNlcHRpb25IZWxwZXJzLmNwcCAqLywKIAkJCQlBNzI3MDFCMzBE
QURFOTQ5MDBFNTQ4RDcgLyogRXhjZXB0aW9uSGVscGVycy5oICovLAogCQkJCTE0OUIxQUExMEQ4
NkVEN0MwMDlDQjhDNyAvKiBJbnN0cnVjdGlvbi5oICovLApAQCAtOTY3LDYgKzk2OCw4IEBACiAJ
CQkJMTQ5QjI0RkYwRDhBRjZEMTAwOUNCOEM3IC8qIFJlZ2lzdGVyLmggKi8sCiAJCQkJMTRENzky
NjUwREFBMDNGQjAwMUE5RjA1IC8qIFJlZ2lzdGVyRmlsZS5jcHAgKi8sCiAJCQkJMTRENzkyNjQw
REFBMDNGQjAwMUE5RjA1IC8qIFJlZ2lzdGVyRmlsZS5oICovLAorCQkJCTg2MTNGNDU4MEUzQTQz
M0UwMEM5NDhGRCAvKiBTYW1wbGluZ1Rvb2wuY3BwICovLAorCQkJCTg2MTNGNDU5MEUzQTQzM0Uw
MEM5NDhGRCAvKiBTYW1wbGluZ1Rvb2wuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gdm07CiAJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTU3MCw2ICsxNTczLDcgQEAKIAkJCQkxQzYxNTE2
RDBFQkFDN0EwMDAzMTM3NkYgLyogUHJvZmlsZXJTZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTdFNEVFNzA5MEVCQjc5NjMwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVJRENoYWluLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3RUZGMDA2NDBFQzA1QTlBMDBBQTdDOTMgLyogTm9kZUluZm8uaCBpbiBIZWFk
ZXJzICovLAorCQkJCTdFNEM4OTE0MEVDQTBGOUEwMERCRUVFQyAvKiBFdmFsQ29kZUNhY2hlLmgg
aW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKSW5kZXg6IFZNL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL0Nv
ZGVCbG9jay5oCShyZXZpc2lvbiAzODMwMikKKysrIFZNL0NvZGVCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCwxMiArMzAsMTEgQEAKICNpZm5kZWYgQ29kZUJsb2NrX2gKICNkZWZpbmUgQ29k
ZUJsb2NrX2gKIAorI2luY2x1ZGUgIkV2YWxDb2RlQ2FjaGUuaCIKICNpbmNsdWRlICJJbnN0cnVj
dGlvbi5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiTm9kZXMuaCIK
LSNpbmNsdWRlICJQYXJzZXIuaCIKICNpbmNsdWRlICJSZWdFeHAuaCIKLSNpbmNsdWRlICJTb3Vy
Y2VDb2RlLmgiCiAjaW5jbHVkZSAiVVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0yMTEsNDAgKzIxMCw2IEBAIG5hbWVzcGFjZSBK
U0MgewogI2VuZGlmCiAgICAgfTsKIAotICAgIGNsYXNzIEV2YWxDb2RlQ2FjaGUgewotICAgIHB1
YmxpYzoKLSAgICAgICAgUGFzc1JlZlB0cjxFdmFsTm9kZT4gZ2V0KEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgVVN0cmluZyYgZXZhbFNvdXJjZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpT
VmFsdWUqJiBleGNlcHRpb25WYWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgUmVmUHRyPEV2
YWxOb2RlPiBldmFsTm9kZTsKLQotICAgICAgICAgICAgaWYgKGV2YWxTb3VyY2Uuc2l6ZSgpIDwg
bWF4Q2FjaGVhYmxlU291cmNlTGVuZ3RoICYmICgqc2NvcGVDaGFpbi0+YmVnaW4oKSktPmlzVmFy
aWFibGVPYmplY3QoKSkKLSAgICAgICAgICAgICAgICBldmFsTm9kZSA9IGNhY2hlTWFwLmdldChl
dmFsU291cmNlLnJlcCgpKTsKLQotICAgICAgICAgICAgaWYgKCFldmFsTm9kZSkgewotICAgICAg
ICAgICAgICAgIGludCBlcnJMaW5lOwotICAgICAgICAgICAgICAgIFVTdHJpbmcgZXJyTXNnOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFNvdXJjZUNvZGUgc291cmNlID0gbWFr
ZVNvdXJjZShldmFsU291cmNlKTsKLSAgICAgICAgICAgICAgICBldmFsTm9kZSA9IGV4ZWMtPmds
b2JhbERhdGEoKS5wYXJzZXItPnBhcnNlPEV2YWxOb2RlPihleGVjLCBleGVjLT5keW5hbWljR2xv
YmFsT2JqZWN0KCktPmRlYnVnZ2VyKCksIHNvdXJjZSwgJmVyckxpbmUsICZlcnJNc2cpOwotICAg
ICAgICAgICAgICAgIGlmIChldmFsTm9kZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZXZh
bFNvdXJjZS5zaXplKCkgPCBtYXhDYWNoZWFibGVTb3VyY2VMZW5ndGggJiYgKCpzY29wZUNoYWlu
LT5iZWdpbigpKS0+aXNWYXJpYWJsZU9iamVjdCgpICYmIGNhY2hlTWFwLnNpemUoKSA8IG1heENh
Y2hlRW50cmllcykKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlTWFwLnNldChldmFsU291
cmNlLnJlcCgpLCBldmFsTm9kZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFN5bnRheEVy
cm9yLCBlcnJNc2csIGVyckxpbmUsIHNvdXJjZS5wcm92aWRlcigpLT5hc0lEKCksIE5VTEwpOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBldmFsTm9kZS5yZWxlYXNlKCk7Ci0gICAgICAg
IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4Q2FjaGVhYmxl
U291cmNlTGVuZ3RoID0gMjU2OwotICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heENhY2hlRW50
cmllcyA9IDY0OwotCi0gICAgICAgIEhhc2hNYXA8UmVmUHRyPFVTdHJpbmc6OlJlcD4sIFJlZlB0
cjxFdmFsTm9kZT4gPiBjYWNoZU1hcDsKLSAgICB9OwotCiAgICAgc3RydWN0IENvZGVCbG9jayB7
CiAgICAgICAgIENvZGVCbG9jayhTY29wZU5vZGUqIG93bmVyTm9kZSwgQ29kZVR5cGUgY29kZVR5
cGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBz
b3VyY2VPZmZzZXQpCiAgICAgICAgICAgICA6IG93bmVyTm9kZShvd25lck5vZGUpCkluZGV4OiBW
TS9FdmFsQ29kZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vRXZhbENvZGVDYWNoZS5oCShyZXZp
c2lvbiAzODMwMikJKGZyb20gVk0vQ29kZUJsb2NrLmg6MzgzMDIpCisrKyBWTS9FdmFsQ29kZUNh
Y2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MDggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENv
ZGVCbG9ja19oCisjZGVmaW5lIENvZGVCbG9ja19oCisKKyNpbmNsdWRlICJJbnN0cnVjdGlvbi5o
IgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiTm9kZXMuaCIKKyNpbmNs
dWRlICJQYXJzZXIuaCIKKyNpbmNsdWRlICJSZWdFeHAuaCIKKyNpbmNsdWRlICJTb3VyY2VDb2Rl
LmgiCisjaW5jbHVkZSAiVVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisgICAgY2xhc3MgRXhlY1N0
YXRlOworCisgICAgZW51bSBDb2RlVHlwZSB7IEdsb2JhbENvZGUsIEV2YWxDb2RlLCBGdW5jdGlv
bkNvZGUgfTsKKworICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBtaXNzaW5nVGhpc09iamVj
dE1hcmtlcigpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7IH0KKwor
ICAgIHN0cnVjdCBIYW5kbGVySW5mbyB7CisgICAgICAgIHVpbnQzMl90IHN0YXJ0OworICAgICAg
ICB1aW50MzJfdCBlbmQ7CisgICAgICAgIHVpbnQzMl90IHRhcmdldDsKKyAgICAgICAgdWludDMy
X3Qgc2NvcGVEZXB0aDsKKyAgICAgICAgdm9pZCogbmF0aXZlQ29kZTsKKyAgICB9OworCisgICAg
c3RydWN0IEV4cHJlc3Npb25SYW5nZUluZm8geworICAgICAgICBlbnVtIHsKKyAgICAgICAgICAg
IE1heE9mZnNldCA9ICgxIDw8IDcpIC0gMSwgCisgICAgICAgICAgICBNYXhEaXZvdCA9ICgxIDw8
IDI1KSAtIDEKKyAgICAgICAgfTsKKyAgICAgICAgdWludDMyX3QgaW5zdHJ1Y3Rpb25PZmZzZXQg
OiAyNTsKKyAgICAgICAgdWludDMyX3QgZGl2b3RQb2ludCA6IDI1OworICAgICAgICB1aW50MzJf
dCBzdGFydE9mZnNldCA6IDc7CisgICAgICAgIHVpbnQzMl90IGVuZE9mZnNldCA6IDc7CisgICAg
fTsKKworICAgIHN0cnVjdCBMaW5lSW5mbyB7CisgICAgICAgIHVpbnQzMl90IGluc3RydWN0aW9u
T2Zmc2V0OworICAgICAgICBpbnQzMl90IGxpbmVOdW1iZXI7CisgICAgfTsKKworICAgIHN0cnVj
dCBPZmZzZXRMb2NhdGlvbiB7CisgICAgICAgIGludDMyX3QgYnJhbmNoT2Zmc2V0OworI2lmIEVO
QUJMRShDVEkpCisgICAgICAgIHZvaWQqIGN0aU9mZnNldDsKKyNlbmRpZgorICAgIH07CisKKyAg
ICBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8geworICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyh1
bnNpZ25lZCBvcGNvZGVJbmRleCkKKyAgICAgICAgICAgIDogb3Bjb2RlSW5kZXgob3Bjb2RlSW5k
ZXgpCisgICAgICAgICAgICAsIHN0dWJSb3V0aW5lKDApCisgICAgICAgICAgICAsIGNhbGxSZXR1
cm5Mb2NhdGlvbigwKQorICAgICAgICAgICAgLCBob3RQYXRoQmVnaW4oMCkKKyAgICAgICAgewor
ICAgICAgICB9CisgICAgCisgICAgICAgIHVuc2lnbmVkIG9wY29kZUluZGV4OworICAgICAgICB2
b2lkKiBzdHViUm91dGluZTsKKyAgICAgICAgdm9pZCogY2FsbFJldHVybkxvY2F0aW9uOworICAg
ICAgICB2b2lkKiBob3RQYXRoQmVnaW47CisgICAgfTsKKworICAgIHN0cnVjdCBDYWxsTGlua0lu
Zm8geworICAgICAgICBDYWxsTGlua0luZm8oKQorICAgICAgICAgICAgOiBjYWxsUmV0dXJuTG9j
YXRpb24oMCkKKyAgICAgICAgICAgICwgaG90UGF0aEJlZ2luKDApCisgICAgICAgICAgICAsIGhv
dFBhdGhPdGhlcigwKQorICAgICAgICAgICAgLCBjb2xkUGF0aE90aGVyKDApCisgICAgICAgICAg
ICAsIGNhbGxlZSgwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgdW5zaWdu
ZWQgb3Bjb2RlSW5kZXg7CisgICAgICAgIHZvaWQqIGNhbGxSZXR1cm5Mb2NhdGlvbjsKKyAgICAg
ICAgdm9pZCogaG90UGF0aEJlZ2luOworICAgICAgICB2b2lkKiBob3RQYXRoT3RoZXI7CisgICAg
ICAgIHZvaWQqIGNvbGRQYXRoT3RoZXI7CisgICAgICAgIENvZGVCbG9jayogY2FsbGVlOworICAg
ICAgICB1bnNpZ25lZCBwb3NpdGlvbjsKKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0VW5saW5r
ZWQoKSB7IGNhbGxlZSA9IDA7IH0KKyAgICAgICAgYm9vbCBpc0xpbmtlZCgpIHsgcmV0dXJuIGNh
bGxlZTsgfQorICAgIH07CisKKyAgICBpbmxpbmUgdm9pZCogZ2V0U3RydWN0dXJlU3R1YkluZm9S
ZXR1cm5Mb2NhdGlvbihTdHJ1Y3R1cmVTdHViSW5mbyogc3RydWN0dXJlU3R1YkluZm8pCisgICAg
eworICAgICAgICByZXR1cm4gc3RydWN0dXJlU3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbjsK
KyAgICB9CisKKyAgICAvLyBCaW5hcnkgY2hvcCBhbGdvcml0aG0sIGNhbGxzIHZhbHVlQXRQb3Np
dGlvbiBvbiBwcmUtc29ydGVkIGVsZW1lbnRzIGluIGFycmF5LAorICAgIC8vIGNvbXBhcmVzIHJl
c3VsdCB3aXRoIGtleSAoS2V5VHlwZXMgc2hvdWxkIGJlIGNvbXBhcmFibGUgd2l0aCAnLS0nLCAn
PCcsICc+JykuCisgICAgLy8gT3B0aW1pemVkIGZvciBjYXNlcyB3aGVyZSB0aGUgYXJyYXkgY29u
dGFpbnMgdGhlIGtleSwgY2hlY2tlZCBieSBhc3NlcnRpb25zLgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEFycmF5VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgS2V5VHlwZSgqdmFsdWVBdFBvc2l0aW9u
KShBcnJheVR5cGUqKT4KKyAgICBpbmxpbmUgQXJyYXlUeXBlKiBiaW5hcnlDaG9wKEFycmF5VHlw
ZSogYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSkKKyAgICB7CisgICAgICAgIC8vIFRo
ZSBhcnJheSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGVsZW1lbnQgKHByZS1jb25kaXRpb24s
IGFycmF5IGRvZXMgY29uYXRpbiBrZXkpLgorICAgICAgICAvLyBJZiB0aGUgYXJyYXkgb25seSBj
b250YWlucyBvbmUgZWxlbWVudCwgbm8gbmVlZCB0byBkbyB0aGUgY29tcGFyaXNvbi4KKyAgICAg
ICAgd2hpbGUgKHNpemUgPiAxKSB7CisgICAgICAgICAgICAvLyBQaWNrIGFuIGVsZW1lbnQgdG8g
Y2hlY2ssIGhhbGYgd2F5IHRocm91Z2ggdGhlIGFycmF5LCBhbmQgcmVhZCB0aGUgdmFsdWUuCisg
ICAgICAgICAgICBpbnQgcG9zID0gKHNpemUgLSAxKSA+PiAxOworICAgICAgICAgICAgS2V5VHlw
ZSB2YWwgPSB2YWx1ZUF0UG9zaXRpb24oJmFycmF5W3Bvc10pOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBJZiB0aGUga2V5IG1hdGNoZXMsIHN1Y2Nlc3MhCisgICAgICAgICAgICBpZiAo
dmFsID09IGtleSkKKyAgICAgICAgICAgICAgICByZXR1cm4gJmFycmF5W3Bvc107CisgICAgICAg
ICAgICAvLyBUaGUgaXRlbSB3ZSBhcmUgbG9va2luZyBmb3IgaXMgc21hbGxlciB0aGFuIHRoZSBp
dGVtIGJlaW5nIGNoZWNrOyByZWR1Y2UgdGhlIHZhbHVlIG9mICdzaXplJywKKyAgICAgICAgICAg
IC8vIGNob3BwaW5nIG9mZiB0aGUgcmlnaHQgaGFuZCBoYWxmIG9mIHRoZSBhcnJheS4KKyAgICAg
ICAgICAgIGVsc2UgaWYgKGtleSA8IHZhbCkKKyAgICAgICAgICAgICAgICBzaXplID0gcG9zOwor
ICAgICAgICAgICAgLy8gRGlzY2FyZCBhbGwgdmFsdWVzIGluIHRoZSBsZWZ0IGhhbmQgaGFsZiBv
ZiB0aGUgYXJyYXksIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIGl0ZW0gYXQgcG9zLgorICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc2l6ZSAtPSAocG9zICsgMSk7CisgICAgICAg
ICAgICAgICAgYXJyYXkgKz0gKHBvcyArIDEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyAnc2l6ZScgc2hvdWxkIG5ldmVyIHJlYWNoIHplcm8uCisgICAgICAgICAgICBBU1NFUlQo
c2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIElmIHdlIHJlYWNoIHRoaXMg
cG9pbnQgd2UndmUgY2hvcHBlZCBkb3duIHRvIG9uZSBlbGVtZW50LCBubyBuZWVkIHRvIGNoZWNr
IGl0IG1hdGNoZXMKKyAgICAgICAgQVNTRVJUKHNpemUgPT0gMSk7CisgICAgICAgIEFTU0VSVChr
ZXkgPT0gdmFsdWVBdFBvc2l0aW9uKCZhcnJheVswXSkpOworICAgICAgICByZXR1cm4gJmFycmF5
WzBdOworICAgIH0KKworICAgIHN0cnVjdCBTdHJpbmdKdW1wVGFibGUgeworICAgICAgICB0eXBl
ZGVmIEhhc2hNYXA8UmVmUHRyPFVTdHJpbmc6OlJlcD4sIE9mZnNldExvY2F0aW9uPiBTdHJpbmdP
ZmZzZXRUYWJsZTsKKyAgICAgICAgU3RyaW5nT2Zmc2V0VGFibGUgb2Zmc2V0VGFibGU7CisjaWYg
RU5BQkxFKENUSSkKKyAgICAgICAgdm9pZCogY3RpRGVmYXVsdDsgLy8gRklYTUU6IGl0IHNob3Vs
ZCBub3QgYmUgbmVjZXNzYXJ5IHRvIHN0b3JlIHRoaXMuCisjZW5kaWYKKworICAgICAgICBpbmxp
bmUgaW50MzJfdCBvZmZzZXRGb3JWYWx1ZShVU3RyaW5nOjpSZXAqIHZhbHVlLCBpbnQzMl90IGRl
ZmF1bHRPZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZ09mZnNldFRhYmxlOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBvZmZzZXRUYWJsZS5lbmQoKTsKKyAgICAgICAgICAgIFN0cmlu
Z09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBsb2MgPSBvZmZzZXRUYWJsZS5maW5kKHZhbHVl
KTsKKyAgICAgICAgICAgIGlmIChsb2MgPT0gZW5kKQorICAgICAgICAgICAgICAgIHJldHVybiBk
ZWZhdWx0T2Zmc2V0OworICAgICAgICAgICAgcmV0dXJuIGxvYy0+c2Vjb25kLmJyYW5jaE9mZnNl
dDsKKyAgICAgICAgfQorCisjaWYgRU5BQkxFKENUSSkKKyAgICAgICAgaW5saW5lIHZvaWQqIGN0
aUZvclZhbHVlKFVTdHJpbmc6OlJlcCogdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0
cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBvZmZzZXRUYWJsZS5lbmQoKTsK
KyAgICAgICAgICAgIFN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBsb2MgPSBvZmZz
ZXRUYWJsZS5maW5kKHZhbHVlKTsKKyAgICAgICAgICAgIGlmIChsb2MgPT0gZW5kKQorICAgICAg
ICAgICAgICAgIHJldHVybiBjdGlEZWZhdWx0OworICAgICAgICAgICAgcmV0dXJuIGxvYy0+c2Vj
b25kLmN0aU9mZnNldDsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfTsKKworICAgIHN0cnVjdCBT
aW1wbGVKdW1wVGFibGUgeworICAgICAgICAvLyBGSVhNRTogVGhlIHR3byBWZWN0b3JzIGNhbiBi
ZSBjb21iaW5kIGludG8gb25lIFZlY3RvcjxPZmZzZXRMb2NhdGlvbj4KKyAgICAgICAgVmVjdG9y
PGludDMyX3Q+IGJyYW5jaE9mZnNldHM7CisgICAgICAgIGludDMyX3QgbWluOworI2lmIEVOQUJM
RShDVEkpCisgICAgICAgIFZlY3Rvcjx2b2lkKj4gY3RpT2Zmc2V0czsKKyAgICAgICAgdm9pZCog
Y3RpRGVmYXVsdDsKKyNlbmRpZgorCisgICAgICAgIGludDMyX3Qgb2Zmc2V0Rm9yVmFsdWUoaW50
MzJfdCB2YWx1ZSwgaW50MzJfdCBkZWZhdWx0T2Zmc2V0KTsKKyAgICAgICAgdm9pZCBhZGQoaW50
MzJfdCBrZXksIGludDMyX3Qgb2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWJy
YW5jaE9mZnNldHNba2V5XSkKKyAgICAgICAgICAgICAgICBicmFuY2hPZmZzZXRzW2tleV0gPSBv
ZmZzZXQ7CisgICAgICAgIH0KKworI2lmIEVOQUJMRShDVEkpCisgICAgICAgIGlubGluZSB2b2lk
KiBjdGlGb3JWYWx1ZShpbnQzMl90IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
dmFsdWUgPj0gbWluICYmIHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSAtIG1pbikgPCBjdGlP
ZmZzZXRzLnNpemUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY3RpT2Zmc2V0c1t2YWx1ZSAt
IG1pbl07CisgICAgICAgICAgICByZXR1cm4gY3RpRGVmYXVsdDsKKyAgICAgICAgfQorI2VuZGlm
CisgICAgfTsKKworICAgIGNsYXNzIEV2YWxDb2RlQ2FjaGUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgUGFzc1JlZlB0cjxFdmFsTm9kZT4gZ2V0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmlu
ZyYgZXZhbFNvdXJjZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTVmFsdWUqJiBleGNl
cHRpb25WYWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgUmVmUHRyPEV2YWxOb2RlPiBldmFs
Tm9kZTsKKworICAgICAgICAgICAgaWYgKGV2YWxTb3VyY2Uuc2l6ZSgpIDwgbWF4Q2FjaGVhYmxl
U291cmNlTGVuZ3RoICYmICgqc2NvcGVDaGFpbi0+YmVnaW4oKSktPmlzVmFyaWFibGVPYmplY3Qo
KSkKKyAgICAgICAgICAgICAgICBldmFsTm9kZSA9IGNhY2hlTWFwLmdldChldmFsU291cmNlLnJl
cCgpKTsKKworICAgICAgICAgICAgaWYgKCFldmFsTm9kZSkgeworICAgICAgICAgICAgICAgIGlu
dCBlcnJMaW5lOworICAgICAgICAgICAgICAgIFVTdHJpbmcgZXJyTXNnOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIFNvdXJjZUNvZGUgc291cmNlID0gbWFrZVNvdXJjZShldmFs
U291cmNlKTsKKyAgICAgICAgICAgICAgICBldmFsTm9kZSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5w
YXJzZXItPnBhcnNlPEV2YWxOb2RlPihleGVjLCBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkt
PmRlYnVnZ2VyKCksIHNvdXJjZSwgJmVyckxpbmUsICZlcnJNc2cpOworICAgICAgICAgICAgICAg
IGlmIChldmFsTm9kZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZXZhbFNvdXJjZS5zaXpl
KCkgPCBtYXhDYWNoZWFibGVTb3VyY2VMZW5ndGggJiYgKCpzY29wZUNoYWluLT5iZWdpbigpKS0+
aXNWYXJpYWJsZU9iamVjdCgpICYmIGNhY2hlTWFwLnNpemUoKSA8IG1heENhY2hlRW50cmllcykK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlTWFwLnNldChldmFsU291cmNlLnJlcCgpLCBl
dmFsTm9kZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ZXhjZXB0aW9uVmFsdWUgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFN5bnRheEVycm9yLCBlcnJNc2cs
IGVyckxpbmUsIHNvdXJjZS5wcm92aWRlcigpLT5hc0lEKCksIE5VTEwpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybiBldmFsTm9kZS5yZWxlYXNlKCk7CisgICAgICAgIH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4Q2FjaGVhYmxlU291cmNlTGVuZ3Ro
ID0gMjU2OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heENhY2hlRW50cmllcyA9IDY0Owor
CisgICAgICAgIEhhc2hNYXA8UmVmUHRyPFVTdHJpbmc6OlJlcD4sIFJlZlB0cjxFdmFsTm9kZT4g
PiBjYWNoZU1hcDsKKyAgICB9OworCisgICAgc3RydWN0IENvZGVCbG9jayB7CisgICAgICAgIENv
ZGVCbG9jayhTY29wZU5vZGUqIG93bmVyTm9kZSwgQ29kZVR5cGUgY29kZVR5cGUsIFBhc3NSZWZQ
dHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQp
CisgICAgICAgICAgICA6IG93bmVyTm9kZShvd25lck5vZGUpCisgICAgICAgICAgICAsIGdsb2Jh
bERhdGEoMCkKKyNpZiBFTkFCTEUoQ1RJKQorICAgICAgICAgICAgLCBjdGlDb2RlKDApCisjZW5k
aWYKKyAgICAgICAgICAgICwgbnVtQ2FsbGVlUmVnaXN0ZXJzKDApCisgICAgICAgICAgICAsIG51
bUNvbnN0YW50cygwKQorICAgICAgICAgICAgLCBudW1WYXJzKDApCisgICAgICAgICAgICAsIG51
bVBhcmFtZXRlcnMoMCkKKyAgICAgICAgICAgICwgbmVlZHNGdWxsU2NvcGVDaGFpbihvd25lck5v
ZGUtPm5lZWRzQWN0aXZhdGlvbigpKQorICAgICAgICAgICAgLCB1c2VzRXZhbChvd25lck5vZGUt
PnVzZXNFdmFsKCkpCisgICAgICAgICAgICAsIGNvZGVUeXBlKGNvZGVUeXBlKQorICAgICAgICAg
ICAgLCBzb3VyY2Uoc291cmNlUHJvdmlkZXIpCisgICAgICAgICAgICAsIHNvdXJjZU9mZnNldChz
b3VyY2VPZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChzb3VyY2UpOworICAg
ICAgICB9CisKKyAgICAgICAgfkNvZGVCbG9jaygpOworCisjaWYgRU5BQkxFKENUSSkgCisgICAg
ICAgIHZvaWQgdW5saW5rQ2FsbGVycygpOworI2VuZGlmCisKKyAgICAgICAgdm9pZCBhZGRDYWxs
ZXIoQ2FsbExpbmtJbmZvKiBjYWxsZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhbGxlci0+
Y2FsbGVlID0gdGhpczsKKyAgICAgICAgICAgIGNhbGxlci0+cG9zaXRpb24gPSBsaW5rZWRDYWxs
ZXJMaXN0LnNpemUoKTsKKyAgICAgICAgICAgIGxpbmtlZENhbGxlckxpc3QuYXBwZW5kKGNhbGxl
cik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHJlbW92ZUNhbGxlcihDYWxsTGlua0luZm8q
IGNhbGxlcikKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgcG9zID0gY2FsbGVyLT5w
b3NpdGlvbjsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxhc3RQb3MgPSBsaW5rZWRDYWxsZXJMaXN0
LnNpemUoKSAtIDE7CisKKyAgICAgICAgICAgIGlmIChwb3MgIT0gbGFzdFBvcykgeworICAgICAg
ICAgICAgICAgIGxpbmtlZENhbGxlckxpc3RbcG9zXSA9IGxpbmtlZENhbGxlckxpc3RbbGFzdFBv
c107CisgICAgICAgICAgICAgICAgbGlua2VkQ2FsbGVyTGlzdFtwb3NdLT5wb3NpdGlvbiA9IHBv
czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxpbmtlZENhbGxlckxpc3Quc2hyaW5rKGxh
c3RQb3MpOworICAgICAgICB9CisKKyAgICAgICAgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3Rh
bnRSZWdpc3RlckluZGV4KGludCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGluZGV4ID49IG51bVZhcnMgJiYgaW5kZXggPCBudW1WYXJzICsgbnVtQ29uc3RhbnRzOworICAg
ICAgICB9CisKKyAgICAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBnZXRDb25zdGFudChpbnQg
aW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjb25zdGFudFJlZ2lzdGVyc1tp
bmRleCAtIG51bVZhcnNdLmdldEpTVmFsdWUoKTsKKyAgICAgICAgfQorCisjaWYgIWRlZmluZWQo
TkRFQlVHKSB8fCBFTkFCTEVfT1BDT0RFX1NBTVBMSU5HCisgICAgICAgIHZvaWQgZHVtcChFeGVj
U3RhdGUqKSBjb25zdDsKKyAgICAgICAgdm9pZCBwcmludFN0cnVjdHVyZUlEcyhjb25zdCBJbnN0
cnVjdGlvbiopIGNvbnN0OworICAgICAgICB2b2lkIHByaW50U3RydWN0dXJlSUQoY29uc3QgY2hh
ciogbmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBpbnQgb3BlcmFuZCkgY29uc3Q7CisjZW5kaWYK
KyAgICAgICAgaW50IGV4cHJlc3Npb25SYW5nZUZvclZQQyhjb25zdCBJbnN0cnVjdGlvbiosIGlu
dCYgZGl2b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0KTsKKyAgICAgICAgaW50
IGxpbmVOdW1iZXJGb3JWUEMoY29uc3QgSW5zdHJ1Y3Rpb24qIHZQQyk7CisgICAgICAgIGJvb2wg
Z2V0SGFuZGxlckZvclZQQyhjb25zdCBJbnN0cnVjdGlvbiogdlBDLCBJbnN0cnVjdGlvbiomIHRh
cmdldCwgaW50JiBzY29wZURlcHRoKTsKKyAgICAgICAgdm9pZCogbmF0aXZlRXhjZXB0aW9uQ29k
ZUZvckhhbmRsZXJWUEMoY29uc3QgSW5zdHJ1Y3Rpb24qIGhhbmRsZXJWUEMpOworCisgICAgICAg
IHZvaWQgbWFyaygpOworICAgICAgICB2b2lkIHJlZlN0cnVjdHVyZUlEcyhJbnN0cnVjdGlvbiog
dlBDKSBjb25zdDsKKyAgICAgICAgdm9pZCBkZXJlZlN0cnVjdHVyZUlEcyhJbnN0cnVjdGlvbiog
dlBDKSBjb25zdDsKKworICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgZ2V0U3R1YkluZm8odm9p
ZCogcmV0dXJuQWRkcmVzcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICooYmluYXJ5
Q2hvcDxTdHJ1Y3R1cmVTdHViSW5mbywgdm9pZCosIGdldFN0cnVjdHVyZVN0dWJJbmZvUmV0dXJu
TG9jYXRpb24+KHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLmJlZ2luKCksIHByb3BlcnR5QWNj
ZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKSwgcmV0dXJuQWRkcmVzcykpOworICAgICAgICB9CisKKyAg
ICAgICAgU2NvcGVOb2RlKiBvd25lck5vZGU7CisgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YTsKKyNpZiBFTkFCTEUoQ1RJKQorICAgICAgICB2b2lkKiBjdGlDb2RlOworI2VuZGlmCisK
KyAgICAgICAgaW50IG51bUNhbGxlZVJlZ2lzdGVyczsKKworICAgICAgICAvLyBOT1RFOiBudW1D
b25zdGFudHMgaG9sZHMgdGhlIG51bWJlciBvZiBjb25zdGFudCByZWdpc3RlcnMgYWxsb2NhdGVk
CisgICAgICAgIC8vIGJ5IHRoZSBjb2RlIGdlbmVyYXRvciwgbm90IHRoZSBudW1iZXIgb2YgY29u
c3RhbnQgcmVnaXN0ZXJzIHVzZWQuCisgICAgICAgIC8vIChEdXBsaWNhdGUgY29uc3RhbnRzIGFy
ZSB1bmlxdWVkIGR1cmluZyBjb2RlIGdlbmVyYXRpb24sIGFuZCBzcGFyZQorICAgICAgICAvLyBj
b25zdGFudCByZWdpc3RlcnMgbWF5IGJlIGFsbG9jYXRlZC4pCisgICAgICAgIGludCBudW1Db25z
dGFudHM7CisgICAgICAgIGludCBudW1WYXJzOworICAgICAgICBpbnQgbnVtUGFyYW1ldGVyczsK
KyAgICAgICAgaW50IHRoaXNSZWdpc3RlcjsKKyAgICAgICAgYm9vbCBuZWVkc0Z1bGxTY29wZUNo
YWluOworICAgICAgICBib29sIHVzZXNFdmFsOworICAgICAgICBib29sIHVzZXNBcmd1bWVudHM7
CisgICAgICAgIENvZGVUeXBlIGNvZGVUeXBlOworICAgICAgICBSZWZQdHI8U291cmNlUHJvdmlk
ZXI+IHNvdXJjZTsKKyAgICAgICAgdW5zaWduZWQgc291cmNlT2Zmc2V0OworCisgICAgICAgIFZl
Y3RvcjxJbnN0cnVjdGlvbj4gaW5zdHJ1Y3Rpb25zOworICAgICAgICBWZWN0b3I8dW5zaWduZWQ+
IGdsb2JhbFJlc29sdmVJbnN0cnVjdGlvbnM7CisgICAgICAgIFZlY3RvcjxTdHJ1Y3R1cmVTdHVi
SW5mbz4gcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnM7CisgICAgICAgIFZlY3RvcjxDYWxsTGlu
a0luZm8+IGNhbGxMaW5rSW5mb3M7CisgICAgICAgIFZlY3RvcjxDYWxsTGlua0luZm8qPiBsaW5r
ZWRDYWxsZXJMaXN0OworCisgICAgICAgIC8vIENvbnN0YW50IHBvb2wKKyAgICAgICAgVmVjdG9y
PElkZW50aWZpZXI+IGlkZW50aWZpZXJzOworICAgICAgICBWZWN0b3I8UmVmUHRyPEZ1bmNEZWNs
Tm9kZT4gPiBmdW5jdGlvbnM7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8RnVuY0V4cHJOb2RlPiA+
IGZ1bmN0aW9uRXhwcmVzc2lvbnM7CisgICAgICAgIFZlY3RvcjxSZWdpc3Rlcj4gY29uc3RhbnRS
ZWdpc3RlcnM7CisgICAgICAgIFZlY3RvcjxKU1ZhbHVlKj4gdW5leHBlY3RlZENvbnN0YW50czsK
KyAgICAgICAgVmVjdG9yPFJlZlB0cjxSZWdFeHA+ID4gcmVnZXhwczsKKyAgICAgICAgVmVjdG9y
PEhhbmRsZXJJbmZvPiBleGNlcHRpb25IYW5kbGVyczsKKyAgICAgICAgVmVjdG9yPEV4cHJlc3Np
b25SYW5nZUluZm8+IGV4cHJlc3Npb25JbmZvOworICAgICAgICBWZWN0b3I8TGluZUluZm8+IGxp
bmVJbmZvOworCisgICAgICAgIFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IGltbWVkaWF0ZVN3aXRj
aEp1bXBUYWJsZXM7CisgICAgICAgIFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IGNoYXJhY3RlclN3
aXRjaEp1bXBUYWJsZXM7CisgICAgICAgIFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IHN0cmluZ1N3
aXRjaEp1bXBUYWJsZXM7CisKKyNpZiBFTkFCTEUoQ1RJKQorICAgICAgICBIYXNoTWFwPHZvaWQq
LCB1bnNpZ25lZD4gY3RpUmV0dXJuQWRkcmVzc1ZQQ01hcDsKKyNlbmRpZgorCisgICAgICAgIEV2
YWxDb2RlQ2FjaGUgZXZhbENvZGVDYWNoZTsKKworICAgIHByaXZhdGU6CisjaWYgIWRlZmluZWQo
TkRFQlVHKSB8fCBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQorICAgICAgICB2b2lkIGR1bXAoRXhl
Y1N0YXRlKiwgY29uc3QgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImIGJlZ2lu
LCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYpIGNvbnN0OworI2VuZGlmCisK
KyAgICB9OworCisgICAgLy8gUHJvZ3JhbSBjb2RlIGlzIG5vdCBtYXJrZWQgYnkgYW55IGZ1bmN0
aW9uLCBzbyB3ZSBtYWtlIHRoZSBnbG9iYWwgb2JqZWN0CisgICAgLy8gcmVzcG9uc2libGUgZm9y
IG1hcmtpbmcgaXQuCisKKyAgICBzdHJ1Y3QgUHJvZ3JhbUNvZGVCbG9jayA6IHB1YmxpYyBDb2Rl
QmxvY2sgeworICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKFNjb3BlTm9kZSogb3duZXJOb2RlLCBD
b2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0
cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIpCisgICAgICAgICAgICA6IENvZGVCbG9j
ayhvd25lck5vZGUsIGNvZGVUeXBlLCBzb3VyY2VQcm92aWRlciwgMCkKKyAgICAgICAgICAgICwg
Z2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2xvYmFs
T2JqZWN0LT5jb2RlQmxvY2tzKCkuYWRkKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgflBy
b2dyYW1Db2RlQmxvY2soKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0
KQorICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+Y29kZUJsb2NrcygpLnJlbW92ZSh0aGlz
KTsKKyAgICAgICAgfQorCisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Q7IC8v
IEZvciBwcm9ncmFtIGFuZCBldmFsIG5vZGVzLCB0aGUgZ2xvYmFsIG9iamVjdCB0aGF0IG1hcmtz
IHRoZSBjb25zdGFudCBwb29sLgorICAgIH07CisKKyAgICBzdHJ1Y3QgRXZhbENvZGVCbG9jayA6
IHB1YmxpYyBQcm9ncmFtQ29kZUJsb2NrIHsKKyAgICAgICAgRXZhbENvZGVCbG9jayhTY29wZU5v
ZGUqIG93bmVyTm9kZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxT
b3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIpCisgICAgICAgICAgICA6IFByb2dyYW1Db2Rl
QmxvY2sob3duZXJOb2RlLCBFdmFsQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlcikK
KyAgICAgICAgeworICAgICAgICB9CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBDb2RlQmxvY2tfaApJbmRleDogVk0vRXZhbENvZGVDYWNoZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFZNL0V2YWxDb2RlQ2FjaGUuaAkocmV2aXNpb24gMzgzMDIpCisrKyBWTS9FdmFsQ29kZUNh
Y2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw1IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDE5MCArMjYsMTkgQEAKICAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAotI2lmbmRlZiBDb2RlQmxvY2tfaAotI2RlZmluZSBDb2RlQmxvY2tfaAorI2lmbmRlZiBF
dmFsQ29kZUNhY2hlX2gKKyNkZWZpbmUgRXZhbENvZGVDYWNoZV9oCiAKLSNpbmNsdWRlICJJbnN0
cnVjdGlvbi5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiTm9kZXMu
aCIKICNpbmNsdWRlICJQYXJzZXIuaCIKLSNpbmNsdWRlICJSZWdFeHAuaCIKICNpbmNsdWRlICJT
b3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAiVVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
bmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBFeGVjU3RhdGU7Ci0KLSAgICBlbnVtIENvZGVU
eXBlIHsgR2xvYmFsQ29kZSwgRXZhbENvZGUsIEZ1bmN0aW9uQ29kZSB9OwotCi0gICAgc3RhdGlj
IEFMV0FZU19JTkxJTkUgaW50IG1pc3NpbmdUaGlzT2JqZWN0TWFya2VyKCkgeyByZXR1cm4gc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsgfQotCi0gICAgc3RydWN0IEhhbmRsZXJJbmZv
IHsKLSAgICAgICAgdWludDMyX3Qgc3RhcnQ7Ci0gICAgICAgIHVpbnQzMl90IGVuZDsKLSAgICAg
ICAgdWludDMyX3QgdGFyZ2V0OwotICAgICAgICB1aW50MzJfdCBzY29wZURlcHRoOwotICAgICAg
ICB2b2lkKiBuYXRpdmVDb2RlOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgRXhwcmVzc2lvblJhbmdl
SW5mbyB7Ci0gICAgICAgIGVudW0gewotICAgICAgICAgICAgTWF4T2Zmc2V0ID0gKDEgPDwgNykg
LSAxLCAKLSAgICAgICAgICAgIE1heERpdm90ID0gKDEgPDwgMjUpIC0gMQotICAgICAgICB9Owot
ICAgICAgICB1aW50MzJfdCBpbnN0cnVjdGlvbk9mZnNldCA6IDI1OwotICAgICAgICB1aW50MzJf
dCBkaXZvdFBvaW50IDogMjU7Ci0gICAgICAgIHVpbnQzMl90IHN0YXJ0T2Zmc2V0IDogNzsKLSAg
ICAgICAgdWludDMyX3QgZW5kT2Zmc2V0IDogNzsKLSAgICB9OwotCi0gICAgc3RydWN0IExpbmVJ
bmZvIHsKLSAgICAgICAgdWludDMyX3QgaW5zdHJ1Y3Rpb25PZmZzZXQ7Ci0gICAgICAgIGludDMy
X3QgbGluZU51bWJlcjsKLSAgICB9OwotCi0gICAgc3RydWN0IE9mZnNldExvY2F0aW9uIHsKLSAg
ICAgICAgaW50MzJfdCBicmFuY2hPZmZzZXQ7Ci0jaWYgRU5BQkxFKENUSSkKLSAgICAgICAgdm9p
ZCogY3RpT2Zmc2V0OwotI2VuZGlmCi0gICAgfTsKLQotICAgIHN0cnVjdCBTdHJ1Y3R1cmVTdHVi
SW5mbyB7Ci0gICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKHVuc2lnbmVkIG9wY29kZUluZGV4KQot
ICAgICAgICAgICAgOiBvcGNvZGVJbmRleChvcGNvZGVJbmRleCkKLSAgICAgICAgICAgICwgc3R1
YlJvdXRpbmUoMCkKLSAgICAgICAgICAgICwgY2FsbFJldHVybkxvY2F0aW9uKDApCi0gICAgICAg
ICAgICAsIGhvdFBhdGhCZWdpbigwKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAKLSAgICAg
ICAgdW5zaWduZWQgb3Bjb2RlSW5kZXg7Ci0gICAgICAgIHZvaWQqIHN0dWJSb3V0aW5lOwotICAg
ICAgICB2b2lkKiBjYWxsUmV0dXJuTG9jYXRpb247Ci0gICAgICAgIHZvaWQqIGhvdFBhdGhCZWdp
bjsKLSAgICB9OwotCi0gICAgc3RydWN0IENhbGxMaW5rSW5mbyB7Ci0gICAgICAgIENhbGxMaW5r
SW5mbygpCi0gICAgICAgICAgICA6IGNhbGxSZXR1cm5Mb2NhdGlvbigwKQotICAgICAgICAgICAg
LCBob3RQYXRoQmVnaW4oMCkKLSAgICAgICAgICAgICwgaG90UGF0aE90aGVyKDApCi0gICAgICAg
ICAgICAsIGNvbGRQYXRoT3RoZXIoMCkKLSAgICAgICAgICAgICwgY2FsbGVlKDApCi0gICAgICAg
IHsKLSAgICAgICAgfQotICAgIAotICAgICAgICB1bnNpZ25lZCBvcGNvZGVJbmRleDsKLSAgICAg
ICAgdm9pZCogY2FsbFJldHVybkxvY2F0aW9uOwotICAgICAgICB2b2lkKiBob3RQYXRoQmVnaW47
Ci0gICAgICAgIHZvaWQqIGhvdFBhdGhPdGhlcjsKLSAgICAgICAgdm9pZCogY29sZFBhdGhPdGhl
cjsKLSAgICAgICAgQ29kZUJsb2NrKiBjYWxsZWU7Ci0gICAgICAgIHVuc2lnbmVkIHBvc2l0aW9u
OwotICAgICAgICAKLSAgICAgICAgdm9pZCBzZXRVbmxpbmtlZCgpIHsgY2FsbGVlID0gMDsgfQot
ICAgICAgICBib29sIGlzTGlua2VkKCkgeyByZXR1cm4gY2FsbGVlOyB9Ci0gICAgfTsKLQotICAg
IGlubGluZSB2b2lkKiBnZXRTdHJ1Y3R1cmVTdHViSW5mb1JldHVybkxvY2F0aW9uKFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHJ1Y3R1cmVTdHViSW5mbykKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdHJ1
Y3R1cmVTdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uOwotICAgIH0KLQotICAgIC8vIEJpbmFy
eSBjaG9wIGFsZ29yaXRobSwgY2FsbHMgdmFsdWVBdFBvc2l0aW9uIG9uIHByZS1zb3J0ZWQgZWxl
bWVudHMgaW4gYXJyYXksCi0gICAgLy8gY29tcGFyZXMgcmVzdWx0IHdpdGgga2V5IChLZXlUeXBl
cyBzaG91bGQgYmUgY29tcGFyYWJsZSB3aXRoICctLScsICc8JywgJz4nKS4KLSAgICAvLyBPcHRp
bWl6ZWQgZm9yIGNhc2VzIHdoZXJlIHRoZSBhcnJheSBjb250YWlucyB0aGUga2V5LCBjaGVja2Vk
IGJ5IGFzc2VydGlvbnMuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlUeXBlLCB0eXBlbmFt
ZSBLZXlUeXBlLCBLZXlUeXBlKCp2YWx1ZUF0UG9zaXRpb24pKEFycmF5VHlwZSopPgotICAgIGlu
bGluZSBBcnJheVR5cGUqIGJpbmFyeUNob3AoQXJyYXlUeXBlKiBhcnJheSwgc2l6ZV90IHNpemUs
IEtleVR5cGUga2V5KQotICAgIHsKLSAgICAgICAgLy8gVGhlIGFycmF5IG11c3QgY29udGFpbiBh
dCBsZWFzdCBvbmUgZWxlbWVudCAocHJlLWNvbmRpdGlvbiwgYXJyYXkgZG9lcyBjb25hdGluIGtl
eSkuCi0gICAgICAgIC8vIElmIHRoZSBhcnJheSBvbmx5IGNvbnRhaW5zIG9uZSBlbGVtZW50LCBu
byBuZWVkIHRvIGRvIHRoZSBjb21wYXJpc29uLgotICAgICAgICB3aGlsZSAoc2l6ZSA+IDEpIHsK
LSAgICAgICAgICAgIC8vIFBpY2sgYW4gZWxlbWVudCB0byBjaGVjaywgaGFsZiB3YXkgdGhyb3Vn
aCB0aGUgYXJyYXksIGFuZCByZWFkIHRoZSB2YWx1ZS4KLSAgICAgICAgICAgIGludCBwb3MgPSAo
c2l6ZSAtIDEpID4+IDE7Ci0gICAgICAgICAgICBLZXlUeXBlIHZhbCA9IHZhbHVlQXRQb3NpdGlv
bigmYXJyYXlbcG9zXSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIElmIHRoZSBrZXkg
bWF0Y2hlcywgc3VjY2VzcyEKLSAgICAgICAgICAgIGlmICh2YWwgPT0ga2V5KQotICAgICAgICAg
ICAgICAgIHJldHVybiAmYXJyYXlbcG9zXTsKLSAgICAgICAgICAgIC8vIFRoZSBpdGVtIHdlIGFy
ZSBsb29raW5nIGZvciBpcyBzbWFsbGVyIHRoYW4gdGhlIGl0ZW0gYmVpbmcgY2hlY2s7IHJlZHVj
ZSB0aGUgdmFsdWUgb2YgJ3NpemUnLAotICAgICAgICAgICAgLy8gY2hvcHBpbmcgb2ZmIHRoZSBy
aWdodCBoYW5kIGhhbGYgb2YgdGhlIGFycmF5LgotICAgICAgICAgICAgZWxzZSBpZiAoa2V5IDwg
dmFsKQotICAgICAgICAgICAgICAgIHNpemUgPSBwb3M7Ci0gICAgICAgICAgICAvLyBEaXNjYXJk
IGFsbCB2YWx1ZXMgaW4gdGhlIGxlZnQgaGFuZCBoYWxmIG9mIHRoZSBhcnJheSwgdXAgdG8gYW5k
IGluY2x1ZGluZyB0aGUgaXRlbSBhdCBwb3MuCi0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBzaXplIC09IChwb3MgKyAxKTsKLSAgICAgICAgICAgICAgICBhcnJheSArPSAocG9z
ICsgMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vICdzaXplJyBzaG91bGQgbmV2
ZXIgcmVhY2ggemVyby4KLSAgICAgICAgICAgIEFTU0VSVChzaXplKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgLy8gSWYgd2UgcmVhY2ggdGhpcyBwb2ludCB3ZSd2ZSBjaG9wcGVkIGRv
d24gdG8gb25lIGVsZW1lbnQsIG5vIG5lZWQgdG8gY2hlY2sgaXQgbWF0Y2hlcwotICAgICAgICBB
U1NFUlQoc2l6ZSA9PSAxKTsKLSAgICAgICAgQVNTRVJUKGtleSA9PSB2YWx1ZUF0UG9zaXRpb24o
JmFycmF5WzBdKSk7Ci0gICAgICAgIHJldHVybiAmYXJyYXlbMF07Ci0gICAgfQotCi0gICAgc3Ry
dWN0IFN0cmluZ0p1bXBUYWJsZSB7Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8VVN0
cmluZzo6UmVwPiwgT2Zmc2V0TG9jYXRpb24+IFN0cmluZ09mZnNldFRhYmxlOwotICAgICAgICBT
dHJpbmdPZmZzZXRUYWJsZSBvZmZzZXRUYWJsZTsKLSNpZiBFTkFCTEUoQ1RJKQotICAgICAgICB2
b2lkKiBjdGlEZWZhdWx0OyAvLyBGSVhNRTogaXQgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgdG8g
c3RvcmUgdGhpcy4KLSNlbmRpZgotCi0gICAgICAgIGlubGluZSBpbnQzMl90IG9mZnNldEZvclZh
bHVlKFVTdHJpbmc6OlJlcCogdmFsdWUsIGludDMyX3QgZGVmYXVsdE9mZnNldCkKLSAgICAgICAg
ewotICAgICAgICAgICAgU3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9m
ZnNldFRhYmxlLmVuZCgpOwotICAgICAgICAgICAgU3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0X2l0
ZXJhdG9yIGxvYyA9IG9mZnNldFRhYmxlLmZpbmQodmFsdWUpOwotICAgICAgICAgICAgaWYgKGxv
YyA9PSBlbmQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRPZmZzZXQ7Ci0gICAgICAg
ICAgICByZXR1cm4gbG9jLT5zZWNvbmQuYnJhbmNoT2Zmc2V0OwotICAgICAgICB9Ci0KLSNpZiBF
TkFCTEUoQ1RJKQotICAgICAgICBpbmxpbmUgdm9pZCogY3RpRm9yVmFsdWUoVVN0cmluZzo6UmVw
KiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG9mZnNldFRhYmxlLmVuZCgpOwotICAgICAgICAgICAgU3RyaW5nT2Zm
c2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGxvYyA9IG9mZnNldFRhYmxlLmZpbmQodmFsdWUpOwot
ICAgICAgICAgICAgaWYgKGxvYyA9PSBlbmQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0aURl
ZmF1bHQ7Ci0gICAgICAgICAgICByZXR1cm4gbG9jLT5zZWNvbmQuY3RpT2Zmc2V0OwotICAgICAg
ICB9Ci0jZW5kaWYKLSAgICB9OwotCi0gICAgc3RydWN0IFNpbXBsZUp1bXBUYWJsZSB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBUaGUgdHdvIFZlY3RvcnMgY2FuIGJlIGNvbWJpbmQgaW50byBvbmUgVmVj
dG9yPE9mZnNldExvY2F0aW9uPgotICAgICAgICBWZWN0b3I8aW50MzJfdD4gYnJhbmNoT2Zmc2V0
czsKLSAgICAgICAgaW50MzJfdCBtaW47Ci0jaWYgRU5BQkxFKENUSSkKLSAgICAgICAgVmVjdG9y
PHZvaWQqPiBjdGlPZmZzZXRzOwotICAgICAgICB2b2lkKiBjdGlEZWZhdWx0OwotI2VuZGlmCi0K
LSAgICAgICAgaW50MzJfdCBvZmZzZXRGb3JWYWx1ZShpbnQzMl90IHZhbHVlLCBpbnQzMl90IGRl
ZmF1bHRPZmZzZXQpOwotICAgICAgICB2b2lkIGFkZChpbnQzMl90IGtleSwgaW50MzJfdCBvZmZz
ZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghYnJhbmNoT2Zmc2V0c1trZXldKQotICAg
ICAgICAgICAgICAgIGJyYW5jaE9mZnNldHNba2V5XSA9IG9mZnNldDsKLSAgICAgICAgfQotCi0j
aWYgRU5BQkxFKENUSSkKLSAgICAgICAgaW5saW5lIHZvaWQqIGN0aUZvclZhbHVlKGludDMyX3Qg
dmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZSA+PSBtaW4gJiYgc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KHZhbHVlIC0gbWluKSA8IGN0aU9mZnNldHMuc2l6ZSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBjdGlPZmZzZXRzW3ZhbHVlIC0gbWluXTsKLSAgICAgICAgICAgIHJl
dHVybiBjdGlEZWZhdWx0OwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9OwotCiAgICAgY2xhc3Mg
RXZhbENvZGVDYWNoZSB7CiAgICAgcHVibGljOgogICAgICAgICBQYXNzUmVmUHRyPEV2YWxOb2Rl
PiBnZXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBldmFsU291cmNlLCBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbiwgSlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVlKQpAQCAtMjQ1LDE2
NCArNzMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSGFzaE1hcDxSZWZQdHI8VVN0cmlu
Zzo6UmVwPiwgUmVmUHRyPEV2YWxOb2RlPiA+IGNhY2hlTWFwOwogICAgIH07CiAKLSAgICBzdHJ1
Y3QgQ29kZUJsb2NrIHsKLSAgICAgICAgQ29kZUJsb2NrKFNjb3BlTm9kZSogb3duZXJOb2RlLCBD
b2RlVHlwZSBjb2RlVHlwZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlk
ZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCkKLSAgICAgICAgICAgIDogb3duZXJOb2RlKG93bmVy
Tm9kZSkKLSAgICAgICAgICAgICwgZ2xvYmFsRGF0YSgwKQotI2lmIEVOQUJMRShDVEkpCi0gICAg
ICAgICAgICAsIGN0aUNvZGUoMCkKLSNlbmRpZgotICAgICAgICAgICAgLCBudW1DYWxsZWVSZWdp
c3RlcnMoMCkKLSAgICAgICAgICAgICwgbnVtQ29uc3RhbnRzKDApCi0gICAgICAgICAgICAsIG51
bVZhcnMoMCkKLSAgICAgICAgICAgICwgbnVtUGFyYW1ldGVycygwKQotICAgICAgICAgICAgLCBu
ZWVkc0Z1bGxTY29wZUNoYWluKG93bmVyTm9kZS0+bmVlZHNBY3RpdmF0aW9uKCkpCi0gICAgICAg
ICAgICAsIHVzZXNFdmFsKG93bmVyTm9kZS0+dXNlc0V2YWwoKSkKLSAgICAgICAgICAgICwgY29k
ZVR5cGUoY29kZVR5cGUpCi0gICAgICAgICAgICAsIHNvdXJjZShzb3VyY2VQcm92aWRlcikKLSAg
ICAgICAgICAgICwgc291cmNlT2Zmc2V0KHNvdXJjZU9mZnNldCkKLSAgICAgICAgewotICAgICAg
ICAgICAgQVNTRVJUKHNvdXJjZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB+Q29kZUJsb2NrKCk7
Ci0KLSNpZiBFTkFCTEUoQ1RJKSAKLSAgICAgICAgdm9pZCB1bmxpbmtDYWxsZXJzKCk7Ci0jZW5k
aWYKLQotICAgICAgICB2b2lkIGFkZENhbGxlcihDYWxsTGlua0luZm8qIGNhbGxlcikKLSAgICAg
ICAgewotICAgICAgICAgICAgY2FsbGVyLT5jYWxsZWUgPSB0aGlzOwotICAgICAgICAgICAgY2Fs
bGVyLT5wb3NpdGlvbiA9IGxpbmtlZENhbGxlckxpc3Quc2l6ZSgpOwotICAgICAgICAgICAgbGlu
a2VkQ2FsbGVyTGlzdC5hcHBlbmQoY2FsbGVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQg
cmVtb3ZlQ2FsbGVyKENhbGxMaW5rSW5mbyogY2FsbGVyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBwb3MgPSBjYWxsZXItPnBvc2l0aW9uOwotICAgICAgICAgICAgdW5zaWduZWQg
bGFzdFBvcyA9IGxpbmtlZENhbGxlckxpc3Quc2l6ZSgpIC0gMTsKLQotICAgICAgICAgICAgaWYg
KHBvcyAhPSBsYXN0UG9zKSB7Ci0gICAgICAgICAgICAgICAgbGlua2VkQ2FsbGVyTGlzdFtwb3Nd
ID0gbGlua2VkQ2FsbGVyTGlzdFtsYXN0UG9zXTsKLSAgICAgICAgICAgICAgICBsaW5rZWRDYWxs
ZXJMaXN0W3Bvc10tPnBvc2l0aW9uID0gcG9zOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
bGlua2VkQ2FsbGVyTGlzdC5zaHJpbmsobGFzdFBvcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW50IGluZGV4KQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaW5kZXggPj0gbnVtVmFycyAmJiBpbmRleCA8IG51
bVZhcnMgKyBudW1Db25zdGFudHM7Ci0gICAgICAgIH0KLQotICAgICAgICBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUqIGdldENvbnN0YW50KGludCBpbmRleCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGNvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gbnVtVmFyc10uZ2V0SlNWYWx1ZSgpOwot
ICAgICAgICB9Ci0KLSNpZiAhZGVmaW5lZChOREVCVUcpIHx8IEVOQUJMRV9PUENPREVfU0FNUExJ
TkcKLSAgICAgICAgdm9pZCBkdW1wKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgICAgICB2b2lkIHBy
aW50U3RydWN0dXJlSURzKGNvbnN0IEluc3RydWN0aW9uKikgY29uc3Q7Ci0gICAgICAgIHZvaWQg
cHJpbnRTdHJ1Y3R1cmVJRChjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBJbnN0cnVjdGlvbiosIGlu
dCBvcGVyYW5kKSBjb25zdDsKLSNlbmRpZgotICAgICAgICBpbnQgZXhwcmVzc2lvblJhbmdlRm9y
VlBDKGNvbnN0IEluc3RydWN0aW9uKiwgaW50JiBkaXZvdCwgaW50JiBzdGFydE9mZnNldCwgaW50
JiBlbmRPZmZzZXQpOwotICAgICAgICBpbnQgbGluZU51bWJlckZvclZQQyhjb25zdCBJbnN0cnVj
dGlvbiogdlBDKTsKLSAgICAgICAgYm9vbCBnZXRIYW5kbGVyRm9yVlBDKGNvbnN0IEluc3RydWN0
aW9uKiB2UEMsIEluc3RydWN0aW9uKiYgdGFyZ2V0LCBpbnQmIHNjb3BlRGVwdGgpOwotICAgICAg
ICB2b2lkKiBuYXRpdmVFeGNlcHRpb25Db2RlRm9ySGFuZGxlclZQQyhjb25zdCBJbnN0cnVjdGlv
biogaGFuZGxlclZQQyk7Ci0KLSAgICAgICAgdm9pZCBtYXJrKCk7Ci0gICAgICAgIHZvaWQgcmVm
U3RydWN0dXJlSURzKEluc3RydWN0aW9uKiB2UEMpIGNvbnN0OwotICAgICAgICB2b2lkIGRlcmVm
U3RydWN0dXJlSURzKEluc3RydWN0aW9uKiB2UEMpIGNvbnN0OwotCi0gICAgICAgIFN0cnVjdHVy
ZVN0dWJJbmZvJiBnZXRTdHViSW5mbyh2b2lkKiByZXR1cm5BZGRyZXNzKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gKihiaW5hcnlDaG9wPFN0cnVjdHVyZVN0dWJJbmZvLCB2b2lkKiwg
Z2V0U3RydWN0dXJlU3R1YkluZm9SZXR1cm5Mb2NhdGlvbj4ocHJvcGVydHlBY2Nlc3NJbnN0cnVj
dGlvbnMuYmVnaW4oKSwgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgpLCByZXR1cm5B
ZGRyZXNzKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBTY29wZU5vZGUqIG93bmVyTm9kZTsKLSAg
ICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhOwotI2lmIEVOQUJMRShDVEkpCi0gICAgICAg
IHZvaWQqIGN0aUNvZGU7Ci0jZW5kaWYKLQotICAgICAgICBpbnQgbnVtQ2FsbGVlUmVnaXN0ZXJz
OwotCi0gICAgICAgIC8vIE5PVEU6IG51bUNvbnN0YW50cyBob2xkcyB0aGUgbnVtYmVyIG9mIGNv
bnN0YW50IHJlZ2lzdGVycyBhbGxvY2F0ZWQKLSAgICAgICAgLy8gYnkgdGhlIGNvZGUgZ2VuZXJh
dG9yLCBub3QgdGhlIG51bWJlciBvZiBjb25zdGFudCByZWdpc3RlcnMgdXNlZC4KLSAgICAgICAg
Ly8gKER1cGxpY2F0ZSBjb25zdGFudHMgYXJlIHVuaXF1ZWQgZHVyaW5nIGNvZGUgZ2VuZXJhdGlv
biwgYW5kIHNwYXJlCi0gICAgICAgIC8vIGNvbnN0YW50IHJlZ2lzdGVycyBtYXkgYmUgYWxsb2Nh
dGVkLikKLSAgICAgICAgaW50IG51bUNvbnN0YW50czsKLSAgICAgICAgaW50IG51bVZhcnM7Ci0g
ICAgICAgIGludCBudW1QYXJhbWV0ZXJzOwotICAgICAgICBpbnQgdGhpc1JlZ2lzdGVyOwotICAg
ICAgICBib29sIG5lZWRzRnVsbFNjb3BlQ2hhaW47Ci0gICAgICAgIGJvb2wgdXNlc0V2YWw7Ci0g
ICAgICAgIGJvb2wgdXNlc0FyZ3VtZW50czsKLSAgICAgICAgQ29kZVR5cGUgY29kZVR5cGU7Ci0g
ICAgICAgIFJlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlOwotICAgICAgICB1bnNpZ25lZCBz
b3VyY2VPZmZzZXQ7Ci0KLSAgICAgICAgVmVjdG9yPEluc3RydWN0aW9uPiBpbnN0cnVjdGlvbnM7
Ci0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gZ2xvYmFsUmVzb2x2ZUluc3RydWN0aW9uczsKLSAg
ICAgICAgVmVjdG9yPFN0cnVjdHVyZVN0dWJJbmZvPiBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9u
czsKLSAgICAgICAgVmVjdG9yPENhbGxMaW5rSW5mbz4gY2FsbExpbmtJbmZvczsKLSAgICAgICAg
VmVjdG9yPENhbGxMaW5rSW5mbyo+IGxpbmtlZENhbGxlckxpc3Q7Ci0KLSAgICAgICAgLy8gQ29u
c3RhbnQgcG9vbAotICAgICAgICBWZWN0b3I8SWRlbnRpZmllcj4gaWRlbnRpZmllcnM7Ci0gICAg
ICAgIFZlY3RvcjxSZWZQdHI8RnVuY0RlY2xOb2RlPiA+IGZ1bmN0aW9uczsKLSAgICAgICAgVmVj
dG9yPFJlZlB0cjxGdW5jRXhwck5vZGU+ID4gZnVuY3Rpb25FeHByZXNzaW9uczsKLSAgICAgICAg
VmVjdG9yPFJlZ2lzdGVyPiBjb25zdGFudFJlZ2lzdGVyczsKLSAgICAgICAgVmVjdG9yPEpTVmFs
dWUqPiB1bmV4cGVjdGVkQ29uc3RhbnRzOwotICAgICAgICBWZWN0b3I8UmVmUHRyPFJlZ0V4cD4g
PiByZWdleHBzOwotICAgICAgICBWZWN0b3I8SGFuZGxlckluZm8+IGV4Y2VwdGlvbkhhbmRsZXJz
OwotICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4gZXhwcmVzc2lvbkluZm87Ci0g
ICAgICAgIFZlY3RvcjxMaW5lSW5mbz4gbGluZUluZm87Ci0KLSAgICAgICAgVmVjdG9yPFNpbXBs
ZUp1bXBUYWJsZT4gaW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlczsKLSAgICAgICAgVmVjdG9yPFNp
bXBsZUp1bXBUYWJsZT4gY2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlczsKLSAgICAgICAgVmVjdG9y
PFN0cmluZ0p1bXBUYWJsZT4gc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKLQotI2lmIEVOQUJMRShD
VEkpCi0gICAgICAgIEhhc2hNYXA8dm9pZCosIHVuc2lnbmVkPiBjdGlSZXR1cm5BZGRyZXNzVlBD
TWFwOwotI2VuZGlmCi0KLSAgICAgICAgRXZhbENvZGVDYWNoZSBldmFsQ29kZUNhY2hlOwotCi0g
ICAgcHJpdmF0ZToKLSNpZiAhZGVmaW5lZChOREVCVUcpIHx8IEVOQUJMRShPUENPREVfU0FNUExJ
TkcpCi0gICAgICAgIHZvaWQgZHVtcChFeGVjU3RhdGUqLCBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rp
b24+Ojpjb25zdF9pdGVyYXRvciYgYmVnaW4sIFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0
ZXJhdG9yJikgY29uc3Q7Ci0jZW5kaWYKLQotICAgIH07Ci0KLSAgICAvLyBQcm9ncmFtIGNvZGUg
aXMgbm90IG1hcmtlZCBieSBhbnkgZnVuY3Rpb24sIHNvIHdlIG1ha2UgdGhlIGdsb2JhbCBvYmpl
Y3QKLSAgICAvLyByZXNwb25zaWJsZSBmb3IgbWFya2luZyBpdC4KLQotICAgIHN0cnVjdCBQcm9n
cmFtQ29kZUJsb2NrIDogcHVibGljIENvZGVCbG9jayB7Ci0gICAgICAgIFByb2dyYW1Db2RlQmxv
Y2soU2NvcGVOb2RlKiBvd25lck5vZGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRl
cikKLSAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVyTm9kZSwgY29kZVR5cGUsIHNvdXJjZVBy
b3ZpZGVyLCAwKQotICAgICAgICAgICAgLCBnbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBnbG9iYWxPYmplY3QtPmNvZGVCbG9ja3MoKS5hZGQodGhpcyk7
Ci0gICAgICAgIH0KLQotICAgICAgICB+UHJvZ3JhbUNvZGVCbG9jaygpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChnbG9iYWxPYmplY3QpCi0gICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0
LT5jb2RlQmxvY2tzKCkucmVtb3ZlKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdDsgLy8gRm9yIHByb2dyYW0gYW5kIGV2YWwgbm9kZXMsIHRo
ZSBnbG9iYWwgb2JqZWN0IHRoYXQgbWFya3MgdGhlIGNvbnN0YW50IHBvb2wuCi0gICAgfTsKLQot
ICAgIHN0cnVjdCBFdmFsQ29kZUJsb2NrIDogcHVibGljIFByb2dyYW1Db2RlQmxvY2sgewotICAg
ICAgICBFdmFsQ29kZUJsb2NrKFNjb3BlTm9kZSogb3duZXJOb2RlLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlcikK
LSAgICAgICAgICAgIDogUHJvZ3JhbUNvZGVCbG9jayhvd25lck5vZGUsIEV2YWxDb2RlLCBnbG9i
YWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICB9Owot
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAotI2VuZGlmIC8vIENvZGVCbG9ja19oCisjZW5kaWYgLy8g
RXZhbENvZGVDYWNoZV9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBWTS9FdmFsQ29kZUNhY2hlLmgK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOm1lcmdlaW5mbwoKSW5kZXg6IFZNL01hY2hpbmUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFZNL01hY2hpbmUuY3BwCShyZXZpc2lvbiAzODMwMikKKysrIFZNL01hY2hp
bmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQmF0Y2hl
ZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRl
ICJEZWJ1Z2dlckNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkV2YWxDb2RlQ2FjaGUuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiRXhlY1N0YXRlLmgiCiAjaW5jbHVk
ZSAiR2xvYmFsRXZhbEZ1bmN0aW9uLmgiCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>