<?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>85269</bug_id>
          
          <creation_ts>2012-05-01 00:35:46 -0700</creation_ts>
          <short_desc>DFG should be able to compute dominators</short_desc>
          <delta_ts>2012-05-21 23:54:25 -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>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>
          <dependson>87082</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>613287</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-01 00:35:46 -0700</bug_when>
    <thetext>This is starting to be essential because of the need to optimize create_arguments, create_activation, among others. The point is that if these opcodes appear on paths that dominate the exit, then we should hoist them and have them execute unconditionally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613288</commentid>
    <comment_count>1</comment_count>
      <attachid>139599</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-01 00:40:25 -0700</bug_when>
    <thetext>Created attachment 139599
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613512</commentid>
    <comment_count>2</comment_count>
      <attachid>139599</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-05-01 10:41:42 -0700</bug_when>
    <thetext>Comment on attachment 139599
the patch

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

r=me, but i&apos;d prefer it if you made the m_array member of FastBitVector an OwnArrayPtr

&gt; Source/WTF/wtf/FastBitVector.h:163
&gt; +    uint32_t* m_array;

Can&apos;t you use an OwnArrayPtr here, and save the manual management of this array&apos;s lifetime?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613732</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-01 15:50:21 -0700</bug_when>
    <thetext>Landed with Oliver&apos;s suggestions in http://trac.webkit.org/changeset/115754</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629783</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-21 17:50:37 -0700</bug_when>
    <thetext>Merged in http://trac.webkit.org/changeset/117861</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629954</commentid>
    <comment_count>5</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-05-21 23:02:48 -0700</bug_when>
    <thetext>- It broke the 32 bit build, so I fixed it - http://trac.webkit.org/changeset/117905
- It made almost all tests crash on Qt, new bug report on it: https://bugs.webkit.org/show_bug.cgi?id=87082 - Could you check it, please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629991</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-21 23:48:26 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; - It broke the 32 bit build, so I fixed it - http://trac.webkit.org/changeset/117905
&gt; - It made almost all tests crash on Qt, new bug report on it: https://bugs.webkit.org/show_bug.cgi?id=87082 - Could you check it, please?

Looking!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629999</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-21 23:54:25 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 139599 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=139599&amp;action=review
&gt; 
&gt; r=me, but i&apos;d prefer it if you made the m_array member of FastBitVector an OwnArrayPtr
&gt; 
&gt; &gt; Source/WTF/wtf/FastBitVector.h:163
&gt; &gt; +    uint32_t* m_array;
&gt; 
&gt; Can&apos;t you use an OwnArrayPtr here, and save the manual management of this array&apos;s lifetime?

No, I can&apos;t, because OwnArrayPtr uses delete[].</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139599</attachid>
            <date>2012-05-01 00:40:25 -0700</date>
            <delta_ts>2012-05-01 10:41:42 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>dominators_patch_1.diff</filename>
            <type>text/plain</type>
            <size>26070</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE1NzEyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBA
CisyMDEyLTA1LTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBiZSBhYmxlIHRvIGNvbXB1dGUgZG9taW5hdG9ycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUyNjkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEltcGxlbWVudHMgYSBuYWl2
ZSBkb21pbmF0b3IgY2FsY3VsYXRvciwgd2hpY2ggaXMgY3VycmVudGx5IGp1c3QgdXNlZCB0bwor
ICAgICAgICBwcmludCBpbmZvcm1hdGlvbiBpbiBncmFwaCBkdW1wcy4gSSd2ZSBlbmFibGVkIGl0
IGJ5IGRlZmF1bHQgbWFpbmx5IHRvCisgICAgICAgIGJlIGFibGUgdG8gdHJhY2sgaXRzIHBlcmZv
cm1hbmNlIGltcGFjdC4gU28gZmFyIGl0IGFwcGVhcnMgdGhhdCB0aGVyZSBpcworICAgICAgICBu
b25lLCB3aGljaCBpcyB1bnN1cnByaXNpbmcgZ2l2ZW4gdGhhdCB0aGUgbnVtYmVyIG9mIGJhc2lj
IGJsb2NrcyBpbiBtb3N0CisgICAgICAgIHByb2NlZHVyZXMgaXMgc21hbGwuCisgICAgICAgIAor
ICAgICAgICBBbHNvIHR3ZWFrZWQgYnl0ZWNvZGUgZHVtcGluZyB0byByZXZlYWwgbW9yZSB1c2Vm
dWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgICAgICAgIG5hdHVyZSBvZiB0aGUgY29kZSBibG9j
ay4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHRG9taW5hdG9ycy5jcHA6IEFkZGVkLgorICAg
ICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpEb21pbmF0b3JzOjpEb21pbmF0b3JzKToK
KyAgICAgICAgKEpTQzo6REZHOjpEb21pbmF0b3JzOjp+RG9taW5hdG9ycyk6CisgICAgICAgIChK
U0M6OkRGRzo6RG9taW5hdG9yczo6Y29tcHV0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6RG9taW5h
dG9yczo6aXRlcmF0ZUZvckJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHRG9taW5hdG9ycy5oOiBB
ZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChEb21pbmF0b3JzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpEb21pbmF0b3JzOjppbnZhbGlkYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpEb21p
bmF0b3JzOjpjb21wdXRlSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRv
cnM6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmRvbWluYXRlcyk6
CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChHcmFwaCk6CisK
IDIwMTItMDQtMzAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBC
eXRlY29kZSBkdW1wcyBzaG91bGQgY29udGFpbiBkYXRhIGFib3V0IHRoZSBzdGF0ZSBvZiBnZXRf
YnlfaWQgY2FjaGVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTE1NzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3NCw2ICsxNzQsOCBAQAogCQkw
RkM4MTUxNjE0MDUxMUI1MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MTIxNDA1MTE4NjAwQ0ZB
NjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCAqLzsgfTsKIAkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4
MUNCIC8qIERGR0RyaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLzsg
fTsKIAkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjIxNDExNUQwRTAwRkQ4
MUNCIC8qIERGR0RyaXZlci5oICovOyB9OworCQkwRkQ4MUFEMjE1NEZCNEVFMDA5ODNFNzIgLyog
REZHRG9taW5hdG9ycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkQ4MUFDRjE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAgKi87
IH07CisJCTBGRDgxQUQzMTU0RkI0RjAwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MUFEMDE1NEZCNEVC
MDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBh
YmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZEODJFMUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi87IH07
CiAJCTBGRDgyRTM5MTQxQUIxNEQwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMzcxNDFBQjE0
MjAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEODJFNTQxNDFEQUVFRTAwMTc5Qzk0IC8qIFBy
ZWRpY3RlZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDgyRTRGMTQxREFFQTEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTg1Myw2ICs4NTUsOCBA
QAogCQkwRkM4MTUxNDE0MDUxMThEMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVlRhYmxlU3BlY3RydW0uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEcml2ZXIuY3BwOyBw
YXRoID0gZGZnL0RGR0RyaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHRHJpdmVyLmg7IHBhdGggPSBkZmcvREZHRHJpdmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDgxQUNGMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdE
b21pbmF0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rv
bWluYXRvcnMuY3BwOyBwYXRoID0gZGZnL0RGR0RvbWluYXRvcnMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkQ4MUFEMDE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9y
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEb21pbmF0b3JzLmg7IHBh
dGggPSBkZmcvREZHRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkQ4MkUxRTE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NhcGFiaWxpdGllcy5jcHA7IHBhdGggPSBk
ZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZE
ODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDYXBhYmlsaXRpZXMuaDsgcGF0aCA9IGRmZy9ERkdDYXBh
YmlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODJFMzcxNDFBQjE0
MjAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvbXBhY3RKSVRDb2RlTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yMDY0LDYgKzIwNjgsOCBAQAogCQkJCTBGM0IzQTE4MTUzRTY4RUYwMDNFRDBGRiAvKiBE
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5oICovLAogCQkJCTBGQzA5NzlEMTQ2QjI3MUUwMENGMjQ0
MiAvKiBERkdDb3JyZWN0YWJsZUp1bXBQb2ludC5jcHAgKi8sCiAJCQkJMEZDMDk3OUExNDZBNzcy
MDAwQ0YyNDQyIC8qIERGR0NvcnJlY3RhYmxlSnVtcFBvaW50LmggKi8sCisJCQkJMEZEODFBQ0Yx
NTRGQjRFQjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwICovLAorCQkJCTBGRDgxQUQwMTU0
RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmggKi8sCiAJCQkJMEYxRTNBNDQxNTM0Q0JB
RDAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi8sCiAJCQkJMEZEM0M4MjAxNDEx
NUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi8sCiAJCQkJMEZEM0M4MjIxNDExNUQwRTAw
RkQ4MUNCIC8qIERGR0RyaXZlci5oICovLApAQCAtMjU5Nyw2ICsyNjAzLDcgQEAKIAkJCQkwRjFF
M0E2NzE1M0EyMUUyMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYzQjNBMjgxNTQ0Qzk5NzAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZp
Y2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGM0IzQTJDMTU0NzUwMDIwMDNFRDBG
RiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEODFBRDMxNTRGQjRGMDAw
OTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzE2Myw2ICszMTcw
LDcgQEAKIAkJCQkwRjNCM0ExQTE1M0U2OEYyMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5n
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8q
IERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNB
MkIxNTQ3NTAwMDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAJKHJldmlzaW9uIDExNTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzUsMTAgKzQ3NSwyMyBAQCB2b2lkIENv
ZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IGkgKz0gb3Bjb2RlTGVuZ3Roc1tleGVjLT5pbnRlcnBy
ZXRlcigpLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbnMoKVtpXS51Lm9wY29kZSldKQogICAgICAg
ICArK2luc3RydWN0aW9uQ291bnQ7CiAKLSAgICBkYXRhTG9nKCIlbHUgbV9pbnN0cnVjdGlvbnM7
ICVsdSBieXRlcyBhdCAlcDsgJWQgcGFyYW1ldGVyKHMpOyAlZCBjYWxsZWUgcmVnaXN0ZXIocyk7
ICVkIHZhcmlhYmxlKHMpXG5cbiIsCisgICAgZGF0YUxvZygKKyAgICAgICAgIiVsdSBtX2luc3Ry
dWN0aW9uczsgJWx1IGJ5dGVzIGF0ICVwICglcyk7ICVkIHBhcmFtZXRlcihzKTsgJWQgY2FsbGVl
IHJlZ2lzdGVyKHMpOyAlZCB2YXJpYWJsZShzKSIsCiAgICAgICAgIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmc+KGluc3RydWN0aW9ucygpLnNpemUoKSksCiAgICAgICAgIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGxvbmc+KGluc3RydWN0aW9ucygpLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikp
LAotICAgICAgICB0aGlzLCBtX251bVBhcmFtZXRlcnMsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJzLCBt
X251bVZhcnMpOworICAgICAgICB0aGlzLCBjb2RlVHlwZVRvU3RyaW5nKGNvZGVUeXBlKCkpLCBt
X251bVBhcmFtZXRlcnMsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJzLAorICAgICAgICBtX251bVZhcnMp
OworICAgIGlmIChtX251bUNhcHR1cmVkVmFycykKKyAgICAgICAgZGF0YUxvZygiOyAlZCBjYXB0
dXJlZCB2YXIocykiLCBtX251bUNhcHR1cmVkVmFycyk7CisgICAgaWYgKHVzZXNBcmd1bWVudHMo
KSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgIjsgdXNlcyBhcmd1bWVudHMsIGlu
IHIlZCwgciVkIiwKKyAgICAgICAgICAgIGFyZ3VtZW50c1JlZ2lzdGVyKCksCisgICAgICAgICAg
ICB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIoKSkpOworICAg
IH0KKyAgICBpZiAobmVlZHNGdWxsU2NvcGVDaGFpbigpICYmIGNvZGVUeXBlKCkgPT0gRnVuY3Rp
b25Db2RlKQorICAgICAgICBkYXRhTG9nKCI7IGFjdGl2YXRpb24gaW4gciVkIiwgYWN0aXZhdGlv
blJlZ2lzdGVyKCkpOworICAgIGRhdGFMb2coIlxuXG4iKTsKIAogICAgIFZlY3RvcjxJbnN0cnVj
dGlvbj46OmNvbnN0X2l0ZXJhdG9yIGJlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKICAg
ICBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBpbnN0cnVjdGlvbnMo
KS5lbmQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3Jz
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5h
dG9ycy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJERkdEb21pbmF0b3JzLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworRG9taW5h
dG9yczo6RG9taW5hdG9ycygpCisgICAgOiBtX3ZhbGlkKGZhbHNlKQoreworfQorCitEb21pbmF0
b3JzOjp+RG9taW5hdG9ycygpCit7Cit9CisKK3ZvaWQgRG9taW5hdG9yczo6Y29tcHV0ZShHcmFw
aCYgZ3JhcGgpCit7CisgICAgLy8gVGhpcyBpbXBsZW1lbnRzIGEgbmFpdmUgZG9taW5hdG9yIHNv
bHZlci4KKyAgICAKKyAgICBBU1NFUlQoZ3JhcGgubV9ibG9ja3NbMF0tPm1fcHJlZGVjZXNzb3Jz
LmlzRW1wdHkoKSk7CisgICAgCisgICAgdW5zaWduZWQgbnVtQmxvY2tzID0gZ3JhcGgubV9ibG9j
a3Muc2l6ZSgpOworICAgIAorICAgIGlmIChudW1CbG9ja3MgPiBtX3Jlc3VsdHMuc2l6ZSgpKSB7
CisgICAgICAgIG1fcmVzdWx0cy5ncm93KG51bUJsb2Nrcyk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG51bUJsb2NrczsgaS0tOykKKyAgICAgICAgICAgIG1fcmVzdWx0c1tpXS5yZXNpemUo
bnVtQmxvY2tzKTsKKyAgICAgICAgbV9zY3JhdGNoLnJlc2l6ZShudW1CbG9ja3MpOworICAgIH0K
KyAgICAKKyAgICBtX3Jlc3VsdHNbMF0uY2xlYXJBbGwoKTsKKyAgICBtX3Jlc3VsdHNbMF0uc2V0
KDApOworICAgIAorICAgIG1fc2NyYXRjaC5jbGVhckFsbCgpOworICAgIGZvciAodW5zaWduZWQg
aSA9IG51bUJsb2NrczsgaS0tOykgeworICAgICAgICBpZiAoIWdyYXBoLm1fYmxvY2tzW2ldKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1fc2NyYXRjaC5zZXQoaSk7CisgICAgfQor
ICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IG51bUJsb2NrczsgaS0tID4gMTspIHsKKyAgICAg
ICAgaWYgKCFncmFwaC5tX2Jsb2Nrc1tpXSB8fCBncmFwaC5tX2Jsb2Nrc1tpXS0+bV9wcmVkZWNl
c3NvcnMuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9yZXN1bHRzW2ldLmNsZWFyQWxsKCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcmVzdWx0c1tpXS5zZXQobV9zY3JhdGNoKTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgY2hhbmdlZCA9
IGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbnVtQmxvY2tzOyArK2kp
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IGl0ZXJhdGVGb3JCbG9jayhncmFwaCwgaSk7CisgICAg
ICAgIGlmICghY2hhbmdlZCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAg
Y2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGkt
LSA+IDE7KQorICAgICAgICAgICAgY2hhbmdlZCB8PSBpdGVyYXRlRm9yQmxvY2soZ3JhcGgsIGkp
OworICAgIH0gd2hpbGUgKGNoYW5nZWQpOworICAgIAorICAgIG1fdmFsaWQgPSB0cnVlOworfQor
Citib29sIERvbWluYXRvcnM6Oml0ZXJhdGVGb3JCbG9jayhHcmFwaCYgZ3JhcGgsIEJsb2NrSW5k
ZXggaSkKK3sKKyAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLm1fYmxvY2tzW2ldLmdldCgp
OworICAgIGlmICghYmxvY2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYmxvY2st
Pm1fcHJlZGVjZXNzb3JzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1f
c2NyYXRjaC5zZXQobV9yZXN1bHRzW2Jsb2NrLT5tX3ByZWRlY2Vzc29yc1swXV0pOworICAgIGZv
ciAodW5zaWduZWQgaiA9IGJsb2NrLT5tX3ByZWRlY2Vzc29ycy5zaXplKCk7IGotLSA+IDE7KQor
ICAgICAgICBtX3NjcmF0Y2guZmlsdGVyKG1fcmVzdWx0c1tibG9jay0+bV9wcmVkZWNlc3NvcnNb
al1dKTsKKyAgICBtX3NjcmF0Y2guc2V0KGkpOworICAgIHJldHVybiBtX3Jlc3VsdHNbaV0uc2V0
QW5kQ2hlY2sobV9zY3JhdGNoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRG9taW5hdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRG9taW5hdG9ycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEb21pbmF0b3JzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdEb21p
bmF0b3JzX2gKKyNkZWZpbmUgREZHRG9taW5hdG9yc19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZv
cm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisj
aW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworY2xhc3MgRG9taW5hdG9ycyB7CitwdWJsaWM6Cisg
ICAgRG9taW5hdG9ycygpOworICAgIH5Eb21pbmF0b3JzKCk7CisgICAgCisgICAgdm9pZCBjb21w
dXRlKEdyYXBoJiBncmFwaCk7CisgICAgdm9pZCBpbnZhbGlkYXRlKCkKKyAgICB7CisgICAgICAg
IG1fdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgdm9pZCBjb21wdXRlSWZOZWNlc3NhcnkoR3Jh
cGgmIGdyYXBoKQorICAgIHsKKyAgICAgICAgaWYgKG1fdmFsaWQpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGNvbXB1dGUoZ3JhcGgpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzVmFs
aWQoKSBjb25zdCB7IHJldHVybiBtX3ZhbGlkOyB9CisgICAgCisgICAgYm9vbCBkb21pbmF0ZXMo
QmxvY2tJbmRleCBmcm9tLCBCbG9ja0luZGV4IHRvKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGlzVmFsaWQoKSk7CisgICAgICAgIHJldHVybiBtX3Jlc3VsdHNbdG9dLmdldChmcm9tKTsK
KyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGJvb2wgaXRlcmF0ZUZvckJsb2NrKEdyYXBoJiBn
cmFwaCwgQmxvY2tJbmRleCk7CisgICAgCisgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3I+IG1fcmVz
dWx0czsKKyAgICBGYXN0Qml0VmVjdG9yIG1fc2NyYXRjaDsKKyAgICBib29sIG1fdmFsaWQ7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworI2VuZGlmIC8vIERGR0RvbWluYXRvcnNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTE1NzExKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw2ICs4MSw3IEBA
IGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU0KICNpZiBERkdfRU5BQkxF
KERFQlVHX1ZFUkJPU0UpCiAgICAgZGF0YUxvZygiREZHIG9wdGltaXphdGlvbiBmaXhwb2ludCBj
b252ZXJnZWQgaW4gJXUgaXRlcmF0aW9ucy5cbiIsIGNudCk7CiAjZW5kaWYKKyAgICBkZmcubV9k
b21pbmF0b3JzLmNvbXB1dGUoZGZnKTsKICAgICBwZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2Nh
dGlvbihkZmcpOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDExNTcxMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODMs
NiArMjgzLDIyIEBAIHZvaWQgR3JhcGg6OmR1bXAoKQogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGJsb2NrLT5tX3ByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkKICAgICAgICAgICAgIGRh
dGFMb2coIiAjJXUiLCBibG9jay0+bV9wcmVkZWNlc3NvcnNbaV0pOwogICAgICAgICBkYXRhTG9n
KCJcbiIpOworICAgICAgICBpZiAobV9kb21pbmF0b3JzLmlzVmFsaWQoKSkgeworICAgICAgICAg
ICAgZGF0YUxvZygiICBEb21pbmF0ZWQgYnk6Iik7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fYmxvY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFt
X2RvbWluYXRvcnMuZG9taW5hdGVzKGksIGIpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgIyVsdSIsIGkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgRG9taW5h
dGVzOiIpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Jsb2Nrcy5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgICAgIGlmICghbV9kb21pbmF0b3JzLmRvbWluYXRlcyhi
LCBpKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgZGF0
YUxvZygiICMlbHUiLCBpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRhdGFMb2coIlxu
Iik7CisgICAgICAgIH0KICAgICAgICAgZGF0YUxvZygiICBQaGkgTm9kZXM6XG4iKTsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+cGhpcy5zaXplKCk7ICsraSkgewogICAg
ICAgICAgICAgZHVtcENvZGVPcmlnaW4obGFzdE5vZGVJbmRleCwgYmxvY2stPnBoaXNbaV0pOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTE1NzExKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiwxMiArMjYsMTUgQEAKICNpZm5kZWYgREZHR3JhcGhfaAogI2RlZmluZSBERkdHcmFwaF9o
CiAKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwogI2lmIEVOQUJMRShERkdfSklUKQogCiAj
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiREZHQXJndW1lbnRQb3NpdGlvbi5oIgog
I2luY2x1ZGUgIkRGR0Fzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2su
aCIKKyNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgogI2lu
Y2x1ZGUgIk1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCIKICNpbmNsdWRlICJSZWdpc3Rl
ckZpbGUuaCIKQEAgLTQ1MCw2ICs0NTMsNyBAQCBwdWJsaWM6CiAgICAgU2VnbWVudGVkVmVjdG9y
PFN0cnVjdHVyZVNldCwgMTY+IG1fc3RydWN0dXJlU2V0OwogICAgIFNlZ21lbnRlZFZlY3RvcjxT
dHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSwgOD4gbV9zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YTsKICAg
ICBCaXRWZWN0b3IgbV9wcmVzZXJ2ZWRWYXJzOworICAgIERvbWluYXRvcnMgbV9kb21pbmF0b3Jz
OwogICAgIHVuc2lnbmVkIG1fbG9jYWxWYXJzOwogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyU2xv
dHM7CiBwcml2YXRlOgpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNTcxMikKKysrIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTItMDUtMDEgIEZpbGlw
IFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBERkcgc2hvdWxkIGJlIGFibGUg
dG8gY29tcHV0ZSBkb21pbmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04NTI2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgQWRkZWQgYSBiaXR2ZWN0b3IgY2xhc3Mgc3VpdGFibGUgZm9y
IGNoZWFwIHN0YXRpYyBhbmFseXNpcy4gVGhpcyBjbGFzcworICAgICAgICBkaWZmZXJzIGZyb20g
Qml0VmVjdG9yIGluIHRoYXQgaW5zdGVhZCBvZiBvcHRpbWl6aW5nIGZvciBzcGFjZSwgaXQKKyAg
ICAgICAgb3B0aW1pemVzIGZvciBleGVjdXRpb24gdGltZS4gSXRzIEFQSSBpcyBhbHNvIHNvbWV3
aGF0IGxlc3MgZnJpZW5kbHksCisgICAgICAgIHdoaWNoIGlzIGludGVudGlvbmFsOyBpdCdzIG1l
YW50IHRvIGJlIHVzZWQgaW4gcGxhY2VzIHdoZXJlIHlvdSBrbm93CisgICAgICAgIHVwIGZyb250
IGhvdyBiaXQgeW91ciBiaXR2ZWN0b3JzIGFyZSBnb2luZyB0byBiZS4KKworICAgICAgICAqIFdU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9GYXN0Qml0VmVjdG9y
Lmg6IEFkZGVkLgorICAgICAgICAoV1RGKToKKyAgICAgICAgKEZhc3RCaXRWZWN0b3IpOgorICAg
ICAgICAoV1RGOjpGYXN0Qml0VmVjdG9yOjpGYXN0Qml0VmVjdG9yKToKKyAgICAgICAgKFdURjo6
RmFzdEJpdFZlY3Rvcjo6fkZhc3RCaXRWZWN0b3IpOgorICAgICAgICAoV1RGOjpGYXN0Qml0VmVj
dG9yOjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpGYXN0Qml0VmVjdG9yOjpudW1CaXRzKToK
KyAgICAgICAgKFdURjo6RmFzdEJpdFZlY3Rvcjo6cmVzaXplKToKKyAgICAgICAgKFdURjo6RmFz
dEJpdFZlY3Rvcjo6c2V0QWxsKToKKyAgICAgICAgKFdURjo6RmFzdEJpdFZlY3Rvcjo6Y2xlYXJB
bGwpOgorICAgICAgICAoV1RGOjpGYXN0Qml0VmVjdG9yOjpzZXQpOgorICAgICAgICAoV1RGOjpG
YXN0Qml0VmVjdG9yOjpzZXRBbmRDaGVjayk6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6
OmVxdWFscyk6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6Om1lcmdlKToKKyAgICAgICAg
KFdURjo6RmFzdEJpdFZlY3Rvcjo6ZmlsdGVyKToKKyAgICAgICAgKFdURjo6RmFzdEJpdFZlY3Rv
cjo6ZXhjbHVkZSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6OmNsZWFyKToKKyAgICAg
ICAgKFdURjo6RmFzdEJpdFZlY3Rvcjo6Z2V0KToKKyAgICAgICAgKFdURjo6RmFzdEJpdFZlY3Rv
cjo6YXJyYXlMZW5ndGgpOgorCiAyMDEyLTA0LTE2ICBOaWNvIFdlYmVyICA8dGhha2lzQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBNYWtlIE51bGxQdHIuaCBjb21waWxlIHdpdGggY2xhbmcgLXN0
ZD1jKysxMSBhbmQgbGlic3RkYysrNC4yCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDExNTcxMSkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTcsNiArNyw3IEBACiAJb2Jq
ZWN0cyA9IHsKIAogLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KKwkJMEZEODFBQzUx
NTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0
Qml0VmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJQTg3
NkRCRDgxNTE4MTZFNTAwREFEQjk1IC8qIFBsYXRmb3JtLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODc2REJENzE1MTgxNkU1MDBEQURCOTUgLyogUGxh
dGZvcm0uaCAqLzsgfTsKIAkJQThBNDczN0YxNTFBODI1QjAwNDEyM0ZGIC8qIEFsaWdubWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcyNTQx
NTFBODI1QTAwNDEyM0ZGIC8qIEFsaWdubWVudC5oICovOyB9OwogCQlBOEE0NzM4MDE1MUE4MjVC
MDA0MTIzRkYgLyogQWx3YXlzSW5saW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzI1NTE1MUE4MjVBMDA0MTIzRkYgLyogQWx3YXlzSW5saW5l
LmggKi87IH07CkBAIC0yNDIsNiArMjQzLDcgQEAKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlv
biAqLwogCiAvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KKwkJMEZEODFBQzQx
NTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRmFzdEJpdFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1RDI0N0I2MjE0Njg5Qjg2MDBFNzhCNzYgLyogbGliV1RGLmEgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4
ID0gMDsgcGF0aCA9IGxpYldURi5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwogCQk1RDI0N0I2RTE0Njg5QzQ3MDBFNzhCNzYgLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBh
dGggPSBCYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDI0N0I2
RjE0Njg5QzQ3MDBFNzhCNzYgLyogQ29tcGlsZXJWZXJzaW9uLnhjY29uZmlnICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0
aCA9IENvbXBpbGVyVmVyc2lvbi54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTU4NSw2ICs1ODcsNyBAQAogCQkJCUE4QTQ3MjlFMTUxQTgyNUEwMDQxMjNGRiAvKiBFbmNv
ZGVyLmggKi8sCiAJCQkJQThBNDcyOUYxNTFBODI1QTAwNDEyM0ZGIC8qIEV4cG9ydE1hY3Jvcy5o
ICovLAogCQkJCUE4QTQ3MkEwMTUxQTgyNUEwMDQxMjNGRiAvKiBGYXN0QWxsb2NCYXNlLmggKi8s
CisJCQkJMEZEODFBQzQxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCAqLywKIAkJ
CQlBOEE0NzJBMTE1MUE4MjVBMDA0MTIzRkYgLyogRmFzdE1hbGxvYy5jcHAgKi8sCiAJCQkJQThB
NDcyQTIxNTFBODI1QTAwNDEyM0ZGIC8qIEZhc3RNYWxsb2MuaCAqLywKIAkJCQlBOEE0NzJBMzE1
MUE4MjVBMDA0MTIzRkYgLyogRml4ZWRBcnJheS5oICovLApAQCAtMTAzMCw2ICsxMDMzLDcgQEAK
IAkJCQlBOEE0NzQ4MDE1MUE4MjVCMDA0MTIzRkYgLyogVk1UYWdzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzQ4NzE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQThBNDc0OEMxNTFBODI2NDAwNDEyM0ZGIC8qIGNvbmZpZy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZEODFBQzUxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
NzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBGYXN0Qml0VmVjdG9yX2gKKyNkZWZpbmUgRmFzdEJpdFZlY3Rvcl9oCisKKyNpbmNsdWRl
IDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFt
ZXNwYWNlIFdURiB7CisKK2NsYXNzIEZhc3RCaXRWZWN0b3IgeworcHVibGljOgorICAgIEZhc3RC
aXRWZWN0b3IoKTogbV9hcnJheSgwKSwgbV9udW1CaXRzKDApIHsgfQorICAgIAorICAgIEZhc3RC
aXRWZWN0b3IoY29uc3QgRmFzdEJpdFZlY3RvciYgb3RoZXIpCisgICAgICAgIDogbV9hcnJheSgw
KQorICAgICAgICAsIG1fbnVtQml0cygwKQorICAgIHsKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsK
KyAgICB9CisgICAgCisgICAgfkZhc3RCaXRWZWN0b3IoKQorICAgIHsKKyAgICAgICAgaWYgKG1f
YXJyYXkpCisgICAgICAgICAgICBmYXN0RnJlZShtX2FycmF5KTsKKyAgICB9CisgICAgCisgICAg
RmFzdEJpdFZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IEZhc3RCaXRWZWN0b3ImIG90aGVyKQorICAg
IHsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IG90aGVyLmFycmF5TGVuZ3RoKCk7CisgICAgICAg
IHVpbnQzMl90KiBuZXdBcnJheSA9IHN0YXRpY19jYXN0PHVpbnQzMl90Kj4oZmFzdENhbGxvYyhs
ZW5ndGgsIDQpKTsKKyAgICAgICAgbWVtY3B5KG5ld0FycmF5LCBvdGhlci5tX2FycmF5LCBsZW5n
dGggKiA0KTsKKyAgICAgICAgZmFzdEZyZWUobV9hcnJheSk7CisgICAgICAgIG1fYXJyYXkgPSBu
ZXdBcnJheTsKKyAgICAgICAgbV9udW1CaXRzID0gb3RoZXIubV9udW1CaXRzOworICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgfQorICAgIAorICAgIHNpemVfdCBudW1CaXRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9udW1CaXRzOyB9CisgICAgCisgICAgdm9pZCByZXNpemUoc2l6ZV90IG51bUJpdHMp
CisgICAgeworICAgICAgICAvLyBVc2UgZmFzdENhbGxvYyBpbnN0ZWFkIG9mIGZhc3RSZWFsbG9j
IGJlY2F1c2Ugd2UgZXhwZWN0IHRoZSBjb21tb24KKyAgICAgICAgLy8gdXNlIGNhc2UgZm9yIHRo
aXMgbWV0aG9kIHRvIGJlIGluaXRpYWxpemluZyB0aGUgc2l6ZSBvZiB0aGUgYml0dmVjdG9yLgor
ICAgICAgICAKKyAgICAgICAgc2l6ZV90IG5ld0xlbmd0aCA9IChudW1CaXRzICsgMzEpID4+IDU7
CisgICAgICAgIHVpbnQzMl90KiBuZXdBcnJheSA9IHN0YXRpY19jYXN0PHVpbnQzMl90Kj4oZmFz
dENhbGxvYyhuZXdMZW5ndGgsIDQpKTsKKyAgICAgICAgbWVtY3B5KG5ld0FycmF5LCBtX2FycmF5
LCBhcnJheUxlbmd0aCgpICogNCk7CisgICAgICAgIG1fYXJyYXkgPSBuZXdBcnJheTsKKyAgICAg
ICAgbV9udW1CaXRzID0gbnVtQml0czsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRBbGwoKQor
ICAgIHsKKyAgICAgICAgbWVtc2V0KG1fYXJyYXksIDI1NSwgYXJyYXlMZW5ndGgoKSAqIDQpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyQWxsKCkKKyAgICB7CisgICAgICAgIG1lbXNldCht
X2FycmF5LCAwLCBhcnJheUxlbmd0aCgpICogNCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0
KGNvbnN0IEZhc3RCaXRWZWN0b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fbnVt
Qml0cyA9PSBvdGhlci5tX251bUJpdHMpOworICAgICAgICBtZW1jcHkobV9hcnJheSwgb3RoZXIu
bV9hcnJheSwgYXJyYXlMZW5ndGgoKSAqIDQpOworICAgIH0KKyAgICAKKyAgICBib29sIHNldEFu
ZENoZWNrKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAgYm9vbCBj
aGFuZ2VkID0gZmFsc2U7CisgICAgICAgIEFTU0VSVChtX251bUJpdHMgPT0gb3RoZXIubV9udW1C
aXRzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYXJyYXlMZW5ndGgoKTsgaS0tOykgewor
ICAgICAgICAgICAgaWYgKG1fYXJyYXlbaV0gPT0gb3RoZXIubV9hcnJheVtpXSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG1fYXJyYXlbaV0gPSBvdGhlci5tX2FycmF5
W2ldOworICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGNoYW5nZWQ7CisgICAgfQorICAgIAorICAgIGJvb2wgZXF1YWxzKGNvbnN0IEZhc3RCaXRW
ZWN0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fbnVtQml0cyA9PSBv
dGhlci5tX251bUJpdHMpOworICAgICAgICAvLyBVc2UgbXkgb3duIGNvbXBhcmlzb24gbG9vcCBi
ZWNhdXNlIG1lbWNtcCBkb2VzIG1vcmUgdGhhbiB3aGF0IEkgd2FudAorICAgICAgICAvLyBhbmQg
YmNtcCBpcyBub3QgYXMgc3RhbmRhcmQuCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGFycmF5
TGVuZ3RoKCk7IGktLTspIHsKKyAgICAgICAgICAgIGlmIChtX2FycmF5W2ldICE9IG90aGVyLm1f
YXJyYXlbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIG1lcmdlKGNvbnN0IEZhc3RC
aXRWZWN0b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fbnVtQml0cyA9PSBvdGhl
ci5tX251bUJpdHMpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBhcnJheUxlbmd0aCgpOyBp
LS07KQorICAgICAgICAgICAgbV9hcnJheVtpXSB8PSBvdGhlci5tX2FycmF5W2ldOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGZpbHRlcihjb25zdCBGYXN0Qml0VmVjdG9yJiBvdGhlcikKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX251bUJpdHMgPT0gb3RoZXIubV9udW1CaXRzKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gYXJyYXlMZW5ndGgoKTsgaS0tOykKKyAgICAgICAgICAgIG1fYXJy
YXlbaV0gJj0gb3RoZXIubV9hcnJheVtpXTsKKyAgICB9CisgICAgCisgICAgdm9pZCBleGNsdWRl
KGNvbnN0IEZhc3RCaXRWZWN0b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fbnVt
Qml0cyA9PSBvdGhlci5tX251bUJpdHMpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBhcnJh
eUxlbmd0aCgpOyBpLS07KQorICAgICAgICAgICAgbV9hcnJheVtpXSAmPSB+b3RoZXIubV9hcnJh
eVtpXTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQoc2l6ZV90IGkpCisgICAgeworICAgICAg
ICBtX2FycmF5W2kgPj4gNV0gfD0gKDEgPDwgKGkgJiAzMSkpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGNsZWFyKHNpemVfdCBpKQorICAgIHsKKyAgICAgICAgbV9hcnJheVtpID4+IDVdICY9IH4o
MSA8PCAoaSAmIDMxKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KHNpemVfdCBpLCBib29s
IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgc2V0KGkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBjbGVhcihpKTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBnZXQoc2l6ZV90IGkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISEobV9hcnJheVtp
ID4+IDVdICYgKDEgPDwgKGkgJiAzMSkpKTsKKyAgICB9Citwcml2YXRlOgorICAgIHNpemVfdCBh
cnJheUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIChtX251bUJpdHMgKyAzMSkgPj4gNTsgfQorICAg
IAorICAgIHVpbnQzMl90KiBtX2FycmF5OworICAgIHNpemVfdCBtX251bUJpdHM7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpGYXN0Qml0VmVjdG9yOworCisjZW5kaWYg
Ly8gRmFzdEJpdFZlY3Rvcl9oCisK
</data>
<flag name="review"
          id="145245"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>