<?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>154405</bug_id>
          
          <creation_ts>2016-02-18 12:40:20 -0800</creation_ts>
          <short_desc>Air should do more shuffling and shuffles should be coalescable</short_desc>
          <delta_ts>2022-02-10 10:35:24 -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>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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>154319</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1166140</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-18 12:40:20 -0800</bug_when>
    <thetext>Any sequence of consecutive Move instructions can be turned into a Shuffle.  We should do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166141</commentid>
    <comment_count>1</comment_count>
      <attachid>271683</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-18 12:41:37 -0800</bug_when>
    <thetext>Created attachment 271683
it&apos;s a start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166232</commentid>
    <comment_count>2</comment_count>
      <attachid>271710</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-18 15:57:27 -0800</bug_when>
    <thetext>Created attachment 271710
more

man, Shuffle instructions never fail to harsh my mellow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166279</commentid>
    <comment_count>3</comment_count>
      <attachid>271719</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-18 17:54:28 -0800</bug_when>
    <thetext>Created attachment 271719
oh man</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167476</commentid>
    <comment_count>4</comment_count>
      <attachid>272036</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-23 11:07:02 -0800</bug_when>
    <thetext>Created attachment 272036
a bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169701</commentid>
    <comment_count>5</comment_count>
      <attachid>272628</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-01 20:28:14 -0800</bug_when>
    <thetext>Created attachment 272628
more</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271683</attachid>
            <date>2016-02-18 12:41:37 -0800</date>
            <delta_ts>2016-02-18 15:57:27 -0800</delta_ts>
            <desc>it&apos;s a start</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>9449</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNv
YWxlc2NpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCShyZXZpc2lvbiAxOTY3NjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUxLDkgKzc1MSwyMCBAQCBwdWJsaWM6CiAgICAgLy8g
VGhpcyB0ZWxscyB5b3UgaWYgYSBNb3ZlIHdpbGwgYmUgY29hbGVzY2FibGUgaWYgdGhlIHNyYyBh
bmQgZHN0IGVuZCB1cCBtYXRjaGluZy4gVGhpcyBtZXRob2QKICAgICAvLyByZWxpZXMgb24gYW4g
YW5hbHlzaXMgdGhhdCBpcyBpbnZhbGlkYXRlZCBieSByZWdpc3RlciBhbGxvY2F0aW9uLCBzbyB5
b3UgaXQncyBvbmx5IG1lYW5pbmdmdWwgdG8KICAgICAvLyBjYWxsIHRoaXMgKmJlZm9yZSogcmVw
bGFjaW5nIHRoZSBUbXAncyBpbiB0aGlzIEluc3Qgd2l0aCByZWdpc3RlcnMgb3Igc3BpbGwgc2xv
dHMuCi0gICAgYm9vbCBtYXlCZUNvYWxlc2NhYmxlKGNvbnN0IEluc3QmIGluc3QpIGNvbnN0Cisg
ICAgYm9vbCBtYXlCZUNvYWxlc2NhYmxlTW92ZShjb25zdCBJbnN0JiBpbnN0KSBjb25zdAogICAg
IHsKLSAgICAgICAgcmV0dXJuIG1heUJlQ29hbGVzY2FibGVJbXBsKGluc3QsICZtX3RtcFdpZHRo
KTsKKyAgICAgICAgcmV0dXJuIG1heUJlQ29hbGVzY2FibGVNb3ZlSW1wbChpbnN0LCAmbV90bXBX
aWR0aCk7CisgICAgfQorCisgICAgYm9vbCBtYXlCZUNvYWxlc2NhYmxlU2h1ZmZsZVBhaXIoY29u
c3QgSW5zdCYgaW5zdCwgdW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbWF5QmVDb2FsZXNjYWJsZSgKKyAgICAgICAgICAgIGluc3QuYXJnc1tpbmRleCArIDBdLndp
ZHRoKCksIGluc3QuYXJnc1tpbmRleCArIDFdLCBpbnN0LmFyZ3NbaW5kZXggKyAyXSk7CisgICAg
fQorCisgICAgYm9vbCBtYXlCZUNvYWxlc2NhYmxlKEFyZzo6V2lkdGggd2lkdGgsIGNvbnN0IEFy
ZyYgc3JjLCBjb25zdCBBcmcmIGRlc3QpCisgICAgeworICAgICAgICByZXR1cm4gbWF5QmVDb2Fs
ZXNjYWJsZUltcGwod2lkdGgsIHNyYywgZGVzdCwgJm1fdG1wV2lkdGgpOwogICAgIH0KIAogICAg
IGJvb2wgaXNVc2VsZXNzTW92ZShjb25zdCBJbnN0JiBpbnN0KSBjb25zdApAQCAtNzYxLDYgKzc3
MiwxNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtYXlCZUNvYWxlc2NhYmxlSW1wbChpbnN0
LCBudWxscHRyKSAmJiBpbnN0LmFyZ3NbMF0udG1wKCkgPT0gaW5zdC5hcmdzWzFdLnRtcCgpOwog
ICAgIH0KIAorICAgIGJvb2wgaXNVc2VsZXNzU2h1ZmZsZVBhaXIoY29uc3QgSW5zdCYgaW5zdCwg
dW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNVc2VsZXNzTW92
ZSgKKyAgICAgICAgICAgIGluc3QuYXJnc1tpbmRleCArIDBdLndpZHRoKCksIGluc3QuYXJnc1tp
bmRleCArIDFdLCBpbnN0LmFyZ3NbaW5kZXggKyAyXSk7CisgICAgfQorCisgICAgYm9vbCBpc1Vz
ZWxlc3NNb3ZlKEFyZzo6V2lkdGggd2lkdGgsIGNvbnN0IEFyZyYgc3JjLCBjb25zdCBBcmcmIGRl
c3QpCisgICAgeworICAgICAgICByZXR1cm4gbWF5QmVDb2FsZXNjYWJsZUltcGwod2lkdGgsIHNy
YywgZGVzdCwgbnVsbHB0cikgJiYgc3JjLnRtcCgpID09IGRlc3QudG1wKCk7CisgICAgfQorCiAg
ICAgVG1wIGdldEFsaWFzV2hlblNwaWxsaW5nKFRtcCB0bXApIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX3NwaWxsZWRUbXBzLmlzRW1wdHkoKSwgIlRoaXMgZnVu
Y3Rpb24gaXMgb25seSB2YWxpZCBmb3IgY29hbGVzY2luZyBkdXJpbmcgc3BpbGxpbmcuIik7CkBA
IC05NDEsMjIgKzk2Myw3OSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIH0pOwogCi0gICAgICAgIGlmIChwcmV2SW5zdCAmJiBtYXlCZUNvYWxlc2NhYmxl
KCpwcmV2SW5zdCkpIHsKLSAgICAgICAgICAgIC8vIFdlIGRvIG5vdCB3YW50IHRoZSBVc2UoKSBv
ZiB0aGlzIG1vdmUgdG8gaW50ZXJmZXJlIHdpdGggdGhlIERlZigpLCBldmVuIGlmIGl0IGlzIGxp
dmUKKyAgICAgICAgaWYgKHByZXZJbnN0KSB7CisgICAgICAgICAgICAvLyBUaGlzIGNvZGUgcGF0
aCBhdHRlbXB0cyB0byBoYW5kbGUgY29hbGVzY2FibGUgaW5zdHJ1Y3Rpb25zLiBJdCBoYW5kbGVz
IGJvdGggTW92ZXMgYW5kCisgICAgICAgICAgICAvLyBTaHVmZmxlcy4gVGhlIHRyaWNrIGlzIHRv
IGVuc3VyZSB0aGF0IHRoZSBkZWZpbml0aW9ucyBpbiBhIE1vdmUgZG9uJ3QgaW50ZXJmZXJlIHdp
dGgKKyAgICAgICAgICAgIC8vIHRoZSBzb3VyY2VzLCBzbyBpZiB3ZSBkZXRlY3QgYSBjb2FsZXNj
aW5nIG9wcG9ydHVuaXR5IHdlIGFsc28gYXZvaWQgdGFraW5nIHRoZSB1c3VhbAorICAgICAgICAg
ICAgLy8gaW50ZXJmZXJlbmNlIHBhdGggYnkgZG9pbmcgdGhlIGludGVyZmVyZW5jZSBjYWxjdWxh
dGlvbiBtYW51YWxseSBhbmQgcmV0dXJuaW5nIGVhcmx5LgorICAgICAgICAgICAgCisgICAgICAg
ICAgICBhdXRvIGFkZENvYWxlc2NhYmxlTW92ZSA9IFsmXSAoVG1wIHNyY1RtcCwgVG1wIGRlc3RU
bXApIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBzcmNJbmRleCA9IEFic29sdXRlVG1wTWFw
cGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KHNyY1RtcCk7CisgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgZGVzdEluZGV4ID0gQWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgoZGVz
dFRtcCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbmV4dE1v
dmVJbmRleCA9IG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMuc2l6ZSgpOworICAgICAgICAgICAgICAg
IG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMuYXBwZW5kKHsgc3JjSW5kZXgsIGRlc3RJbmRleCB9KTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBuZXdJbmRleEluV29y
a2xpc3QgPSBtX3dvcmtsaXN0TW92ZXMuYWRkTW92ZSgpOworICAgICAgICAgICAgICAgIEFTU0VS
VF9VTlVTRUQobmV3SW5kZXhJbldvcmtsaXN0LCBuZXdJbmRleEluV29ya2xpc3QgPT0gbmV4dE1v
dmVJbmRleCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQVNTRVJUKG5leHRN
b3ZlSW5kZXggPD0gbV9hY3RpdmVNb3Zlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIG1fYWN0
aXZlTW92ZXMuZW5zdXJlU2l6ZShuZXh0TW92ZUluZGV4ICsgMSk7CisKKyAgICAgICAgICAgICAg
ICBtX21vdmVMaXN0W3NyY0luZGV4XS5hZGQobmV4dE1vdmVJbmRleCk7CisgICAgICAgICAgICAg
ICAgbV9tb3ZlTGlzdFtkZXN0SW5kZXhdLmFkZChuZXh0TW92ZUluZGV4KTsKKyAgICAgICAgICAg
IH07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtYXlCZUNvYWxlc2NhYmxlTW92ZSgq
cHJldkluc3QpKSB7CisgICAgICAgICAgICAgICAgVG1wIHNyY1RtcCA9IHByZXZJbnN0LT5hcmdz
WzBdLnRtcCgpOworICAgICAgICAgICAgICAgIFRtcCBkZXN0VG1wID0gcHJldkluc3QtPmFyZ3Nb
MV0udG1wKCk7CisgICAgICAgICAgICAgICAgYWRkQ29hbGVzY2FibGVNb3ZlKHNyY1RtcCwgZGVz
dFRtcCk7CisKKyAgICAgICAgICAgICAgICBmb3IgKFRtcCBsaXZlVG1wIDogbG9jYWxDYWxjLmxp
dmUoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobGl2ZVRtcCAhPSBzcmNUbXApCisgICAg
ICAgICAgICAgICAgICAgICAgICBhZGRFZGdlKGRlc3RUbXAsIGxpdmVUbXApOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFRoZSBuZXh0IGluc3RydWN0aW9uIGNwdWxk
IGhhdmUgZWFybHkgY2xvYmJlcnMgb3IgZWFybHkgZGVmJ3MuIENvbnNpZGVyIHRob3NlCisgICAg
ICAgICAgICAgICAgLy8gbm93LgorICAgICAgICAgICAgICAgIGFkZEVkZ2VzKG51bGxwdHIsIG5l
eHRJbnN0LCBsb2NhbENhbGMubGl2ZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwcmV2SW5zdC0+b3Bjb2RlKCkgPT0gU2h1ZmZs
ZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmV2SW5zdC0+
YXJncy5zaXplKCk7IGkgKz0gMykgeworICAgICAgICAgICAgICAgICAgICBBcmcgZGVzdCA9IHBy
ZXZJbnN0LT5hcmdzW2kgKyAyXTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIGlmIChtYXlCZUNvYWxlc2NhYmxlU2h1ZmZsZVBhaXIoKnByZXZJbnN0LCBpKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgVG1wIHNyY1RtcCA9IHByZXZJbnN0LT5hcmdzW2kgKyAx
XS50bXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRtcCBkZXN0VG1wID0gZGVzdC50bXAo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZENvYWxlc2NhYmxlTW92ZShzcmNUbXAsIGRl
c3RUZW1wKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29uc2VydmF0aXZlbHksIGRl
c3Qgd291bGQgaW50ZXJmZXJlIHdpdGggZXZlcnl0aGluZyBsaXZlLiBCdXQgaW4gdGhpcworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gY2FzZSBpdCBvbmx5IGludGVyZmVyZXMgd2l0aCBhbGwg
bGl2ZSB2YXJpYWJsZXMgZXhjZXB0IHNyY1RtcC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoVG1wIGxpdmVUbXAgOiBsb2NhbENhbGMubGl2ZSgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGxpdmVUbXAgIT0gc3JjVG1wKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhZGRFZGdlKGRlc3RUbXAsIGxpdmVUbXApOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZGVzdGluYXRpb24gaXMgYSB0
bXAsIGl0IG5lZWRzIHRvIGludGVyZmVyZSB3aXRoIGV2ZXJ5dGhpbmcgbGl2ZS4KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGRlc3QuaXNUbXAoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChUbXAgbGl2ZVRtcCA6IGxvY2FsQ2FsYy5saXZlKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkRWRnZShkZXN0LnRtcCgpLCBsaXZlVG1wKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChwcmV2SW5zdCAmJiBtYXlCZUNvYWxlc2NhYmxlTW92ZSgqcHJldkluc3QpKSB7Cisg
ICAgICAgICAgICBUbXAgc3JjVG1wID0gcHJldkluc3QtPmFyZ3NbMF07CisgICAgICAgICAgICBU
bXAgZGVmVG1wID0gcHJldkluc3QtPmFyZ3NbMV07CisKKyAgICAgICAgICAgIC8vIFdlIGRvIG5v
dCB3YW50IHRoZSBVc2Ugb2YgdGhpcyBtb3ZlIHRvIGludGVyZmVyZSB3aXRoIHRoZSBEZWYsIGV2
ZW4gaWYgaXQgaXMgbGl2ZQogICAgICAgICAgICAgLy8gYWZ0ZXIgdGhlIE1vdmUuIElmIHdlIHdl
cmUgdG8gYWRkIHRoZSBpbnRlcmZlcmVuY2UgZWRnZSwgaXQgd291bGQgYmUgaW1wb3NzaWJsZSB0
bwogICAgICAgICAgICAgLy8gY29hbGVzY2UgdGhlIE1vdmUgZXZlbiBpZiB0aGUgdHdvIFRtcCBu
ZXZlciBpbnRlcmZlcmUgYW55d2hlcmUuCi0gICAgICAgICAgICBUbXAgZGVmVG1wOwotICAgICAg
ICAgICAgVG1wIHVzZVRtcDsKLSAgICAgICAgICAgIHByZXZJbnN0LT5mb3JFYWNoVG1wKFsmZGVm
VG1wLCAmdXNlVG1wXSAoVG1wJiBhcmdUbXAsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUsIEFy
Zzo6V2lkdGgpIHsKLSAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0xhdGVEZWYocm9sZSkpCi0g
ICAgICAgICAgICAgICAgICAgIGRlZlRtcCA9IGFyZ1RtcDsKLSAgICAgICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKEFyZzo6aXNFYXJseVVzZShyb2xlKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHVzZVRtcCA9IGFyZ1RtcDsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIEFTU0VSVChkZWZUbXApOwotICAgICAgICAgICAg
QVNTRVJUKHVzZVRtcCk7CiAKICAgICAgICAgICAgIHVuc2lnbmVkIG5leHRNb3ZlSW5kZXggPSBt
X2NvYWxlc2NpbmdDYW5kaWRhdGVzLnNpemUoKTsKICAgICAgICAgICAgIG1fY29hbGVzY2luZ0Nh
bmRpZGF0ZXMuYXBwZW5kKHsgQWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgo
dXNlVG1wKSwgQWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgoZGVmVG1wKSB9
KTsKQEAgLTEwMzcsMTMgKzExMTYsMTggQEAgcHJpdmF0ZToKIAogICAgIC8vIENhbGxpbmcgdGhp
cyB3aXRob3V0IGEgdG1wV2lkdGggd2lsbCBwZXJmb3JtIGEgbW9yZSBjb25zZXJ2YXRpdmUgY29h
bGVzY2luZyBhbmFseXNpcyB0aGF0IGFzc3VtZXMKICAgICAvLyB0aGF0IE1vdmUzMidzIGFyZSBu
b3QgY29hbGVzY2FibGUuCi0gICAgc3RhdGljIGJvb2wgbWF5QmVDb2FsZXNjYWJsZUltcGwoY29u
c3QgSW5zdCYgaW5zdCwgVG1wV2lkdGgqIHRtcFdpZHRoKQorICAgIHN0YXRpYyBib29sIG1heUJl
Q29hbGVzY2FibGVNb3ZlSW1wbChjb25zdCBJbnN0JiBpbnN0LCBUbXBXaWR0aCogdG1wV2lkdGgp
CiAgICAgeworICAgICAgICBBcmc6OldpZHRoIHdpZHRoOworICAgICAgICAKICAgICAgICAgc3dp
dGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgQXJnOjpHUDoKICAgICAgICAgICAgIHN3aXRjaCAo
aW5zdC5vcGNvZGUpIHsKICAgICAgICAgICAgIGNhc2UgTW92ZToKKyAgICAgICAgICAgICAgICB3
aWR0aCA9IEFyZzo6Y29uc2VydmF0aXZlV2lkdGgodHlwZSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBjYXNlIE1vdmUzMjoKKyAgICAgICAgICAgICAgICB3aWR0aCA9IEFy
Zzo6V2lkdGgzMjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA1Miw3ICsxMTM2LDEwIEBAIHBy
aXZhdGU6CiAgICAgICAgIGNhc2UgQXJnOjpGUDoKICAgICAgICAgICAgIHN3aXRjaCAoaW5zdC5v
cGNvZGUpIHsKICAgICAgICAgICAgIGNhc2UgTW92ZUZsb2F0OgorICAgICAgICAgICAgICAgIHdp
ZHRoID0gQXJnOjpXaWR0aDMyOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
Y2FzZSBNb3ZlRG91YmxlOgorICAgICAgICAgICAgICAgIHdpZHRoID0gQXJnOjpXaWR0aDY0Owog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDYyLDI5ICsxMTQ5LDMyIEBAIHByaXZhdGU6CiAKICAg
ICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShpbnN0LmFyZ3Muc2l6ZSgpID09IDIsICJXZSBhc3N1
bWUgY29hbGVjYWJsZSBtb3ZlcyBvbmx5IGhhdmUgdHdvIGFyZ3VtZW50cyBpbiBhIGZldyBwbGFj
ZXMuIik7CiAKLSAgICAgICAgaWYgKCFpbnN0LmFyZ3NbMF0uaXNUbXAoKSB8fCAhaW5zdC5hcmdz
WzFdLmlzVG1wKCkpCisgICAgICAgIHJldHVybiBtYXlCZUNvYWxlc2NhYmxlSW1wbCh3aWR0aCwg
aW5zdC5hcmdzWzBdLCBpbnN0LmFyZ3NbMV0sIHRtcFdpZHRoKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgYm9vbCBtYXlCZUNvYWxlc2NhYmxlSW1wbCgKKyAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCwg
Y29uc3QgQXJnJiBzcmMsIGNvbnN0IEFyZyYgZGVzdCwgVG1wV2lkdGgqIHRtcFdpZHRoKQorICAg
IHsKKyAgICAgICAgaWYgKCFzcmMuaXNUbXAoKSB8fCAhZGVzdC5pc1RtcCgpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEFTU0VSVChpbnN0LmFyZ3NbMF0udHlwZSgpID09
IHR5cGUpOwotICAgICAgICBBU1NFUlQoaW5zdC5hcmdzWzFdLnR5cGUoKSA9PSB0eXBlKTsKKyAg
ICAgICAgaWYgKCFzcmMuaXNUeXBlKHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgIC8vIFdlIGNhbiBjb2FsZXNjZSBhIE1vdmUzMiBzbyBsb25nIGFzIGVpdGhlciBv
ZiB0aGUgZm9sbG93aW5nIGhvbGRzOgotICAgICAgICAvLyAtIFRoZSBpbnB1dCBpcyBhbHJlYWR5
IHplcm8tZmlsbGVkLgotICAgICAgICAvLyAtIFRoZSBvdXRwdXQgb25seSBjYXJlcyBhYm91dCB0
aGUgbG93IDMyIGJpdHMuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgaW5w
dXQgcHJvcGVydHkgcmVxdWlyZXMgYW4gYW5hbHlzaXMgb3ZlciBaRGVmJ3MsIHNvIGl0J3Mgb25s
eSB2YWxpZCBzbyBsb25nCi0gICAgICAgIC8vIGFzIHRoZSBpbnB1dCBnZXRzIGEgcmVnaXN0ZXIu
IFdlIGRvbid0IGtub3cgaWYgdGhlIGlucHV0IGdldHMgYSByZWdpc3RlciwgYnV0IHdlIGRvIGtu
b3cKLSAgICAgICAgLy8gdGhhdCBpZiBpdCBkb2Vzbid0IGdldCBhIHJlZ2lzdGVyIHRoZW4gd2Ug
d2lsbCBzdGlsbCBlbWl0IHRoaXMgTW92ZTMyLgotICAgICAgICBpZiAoaW5zdC5vcGNvZGUgPT0g
TW92ZTMyKSB7Ci0gICAgICAgICAgICBpZiAoIXRtcFdpZHRoKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgQVNTRVJUKHdpZHRoID09IFdpZHRoMzIgfHwgd2lkdGggPT0g
V2lkdGg2NCk7CisgICAgICAgIEFTU0VSVChzcmMudHlwZSgpID09IGRlc3QudHlwZSgpKTsKIAot
ICAgICAgICAgICAgaWYgKHRtcFdpZHRoLT5kZWZXaWR0aChpbnN0LmFyZ3NbMF0udG1wKCkpID4g
QXJnOjpXaWR0aDMyCi0gICAgICAgICAgICAgICAgJiYgdG1wV2lkdGgtPnVzZVdpZHRoKGluc3Qu
YXJnc1sxXS50bXAoKSkgPiBBcmc6OldpZHRoMzIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
aWYgKHR5cGUgPT0gQXJnOjpGUCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAg
IGlmICh3aWR0aCA9PSBBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKHR5cGUpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICAgICAgaWYgKCF0bXBXaWR0aCkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICByZXR1cm4gdG1wV2lkdGgtPmRlZldpZHRoKHNyYykgPD0gQXJn
OjpXaWR0aDMyCisgICAgICAgICAgICB8fCB0bXBXaWR0aC0+dXNlV2lkdGgoZGVzdCkgPD0gQXJn
OjpXaWR0aDMyOwogICAgIH0KIAogICAgIHZvaWQgc2VsZWN0U3BpbGwoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271710</attachid>
            <date>2016-02-18 15:57:27 -0800</date>
            <delta_ts>2016-02-18 17:54:28 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>13670</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNv
YWxlc2NpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCShyZXZpc2lvbiAxOTY3NjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUxLDkgKzc1MSwyMCBAQCBwdWJsaWM6CiAgICAgLy8g
VGhpcyB0ZWxscyB5b3UgaWYgYSBNb3ZlIHdpbGwgYmUgY29hbGVzY2FibGUgaWYgdGhlIHNyYyBh
bmQgZHN0IGVuZCB1cCBtYXRjaGluZy4gVGhpcyBtZXRob2QKICAgICAvLyByZWxpZXMgb24gYW4g
YW5hbHlzaXMgdGhhdCBpcyBpbnZhbGlkYXRlZCBieSByZWdpc3RlciBhbGxvY2F0aW9uLCBzbyB5
b3UgaXQncyBvbmx5IG1lYW5pbmdmdWwgdG8KICAgICAvLyBjYWxsIHRoaXMgKmJlZm9yZSogcmVw
bGFjaW5nIHRoZSBUbXAncyBpbiB0aGlzIEluc3Qgd2l0aCByZWdpc3RlcnMgb3Igc3BpbGwgc2xv
dHMuCi0gICAgYm9vbCBtYXlCZUNvYWxlc2NhYmxlKGNvbnN0IEluc3QmIGluc3QpIGNvbnN0Cisg
ICAgYm9vbCBtYXlCZUNvYWxlc2NhYmxlTW92ZShjb25zdCBJbnN0JiBpbnN0KSBjb25zdAogICAg
IHsKLSAgICAgICAgcmV0dXJuIG1heUJlQ29hbGVzY2FibGVJbXBsKGluc3QsICZtX3RtcFdpZHRo
KTsKKyAgICAgICAgcmV0dXJuIG1heUJlQ29hbGVzY2FibGVNb3ZlSW1wbChpbnN0LCAmbV90bXBX
aWR0aCk7CisgICAgfQorCisgICAgYm9vbCBtYXlCZUNvYWxlc2NhYmxlU2h1ZmZsZVBhaXIoY29u
c3QgSW5zdCYgaW5zdCwgdW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbWF5QmVDb2FsZXNjYWJsZSgKKyAgICAgICAgICAgIGluc3QuYXJnc1tpbmRleCArIDJdLndp
ZHRoKCksIGluc3QuYXJnc1tpbmRleCArIDBdLCBpbnN0LmFyZ3NbaW5kZXggKyAxXSk7CisgICAg
fQorCisgICAgYm9vbCBtYXlCZUNvYWxlc2NhYmxlKEFyZzo6V2lkdGggd2lkdGgsIGNvbnN0IEFy
ZyYgc3JjLCBjb25zdCBBcmcmIGRlc3QpCisgICAgeworICAgICAgICByZXR1cm4gbWF5QmVDb2Fs
ZXNjYWJsZUltcGwod2lkdGgsIHNyYywgZGVzdCwgJm1fdG1wV2lkdGgpOwogICAgIH0KIAogICAg
IGJvb2wgaXNVc2VsZXNzTW92ZShjb25zdCBJbnN0JiBpbnN0KSBjb25zdApAQCAtNzYxLDYgKzc3
MiwxNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtYXlCZUNvYWxlc2NhYmxlSW1wbChpbnN0
LCBudWxscHRyKSAmJiBpbnN0LmFyZ3NbMF0udG1wKCkgPT0gaW5zdC5hcmdzWzFdLnRtcCgpOwog
ICAgIH0KIAorICAgIGJvb2wgaXNVc2VsZXNzU2h1ZmZsZVBhaXIoY29uc3QgSW5zdCYgaW5zdCwg
dW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNVc2VsZXNzTW92
ZSgKKyAgICAgICAgICAgIGluc3QuYXJnc1tpbmRleCArIDJdLndpZHRoKCksIGluc3QuYXJnc1tp
bmRleCArIDBdLCBpbnN0LmFyZ3NbaW5kZXggKyAxXSk7CisgICAgfQorCisgICAgYm9vbCBpc1Vz
ZWxlc3NNb3ZlKEFyZzo6V2lkdGggd2lkdGgsIGNvbnN0IEFyZyYgc3JjLCBjb25zdCBBcmcmIGRl
c3QpCisgICAgeworICAgICAgICByZXR1cm4gbWF5QmVDb2FsZXNjYWJsZUltcGwod2lkdGgsIHNy
YywgZGVzdCwgbnVsbHB0cikgJiYgc3JjLnRtcCgpID09IGRlc3QudG1wKCk7CisgICAgfQorCiAg
ICAgVG1wIGdldEFsaWFzV2hlblNwaWxsaW5nKFRtcCB0bXApIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX3NwaWxsZWRUbXBzLmlzRW1wdHkoKSwgIlRoaXMgZnVu
Y3Rpb24gaXMgb25seSB2YWxpZCBmb3IgY29hbGVzY2luZyBkdXJpbmcgc3BpbGxpbmcuIik7CkBA
IC05NDEsNDcgKzk2Myw3OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIH0pOwogCi0gICAgICAgIGlmIChwcmV2SW5zdCAmJiBtYXlCZUNvYWxlc2NhYmxl
KCpwcmV2SW5zdCkpIHsKLSAgICAgICAgICAgIC8vIFdlIGRvIG5vdCB3YW50IHRoZSBVc2UoKSBv
ZiB0aGlzIG1vdmUgdG8gaW50ZXJmZXJlIHdpdGggdGhlIERlZigpLCBldmVuIGlmIGl0IGlzIGxp
dmUKLSAgICAgICAgICAgIC8vIGFmdGVyIHRoZSBNb3ZlLiBJZiB3ZSB3ZXJlIHRvIGFkZCB0aGUg
aW50ZXJmZXJlbmNlIGVkZ2UsIGl0IHdvdWxkIGJlIGltcG9zc2libGUgdG8KLSAgICAgICAgICAg
IC8vIGNvYWxlc2NlIHRoZSBNb3ZlIGV2ZW4gaWYgdGhlIHR3byBUbXAgbmV2ZXIgaW50ZXJmZXJl
IGFueXdoZXJlLgotICAgICAgICAgICAgVG1wIGRlZlRtcDsKLSAgICAgICAgICAgIFRtcCB1c2VU
bXA7Ci0gICAgICAgICAgICBwcmV2SW5zdC0+Zm9yRWFjaFRtcChbJmRlZlRtcCwgJnVzZVRtcF0g
KFRtcCYgYXJnVG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRlRGVmKHJvbGUpKQotICAgICAgICAgICAgICAg
ICAgICBkZWZUbXAgPSBhcmdUbXA7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChBcmc6OmlzRWFybHlVc2Uocm9sZSkpOwotICAgICAgICAgICAgICAg
ICAgICB1c2VUbXAgPSBhcmdUbXA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICBBU1NFUlQoZGVmVG1wKTsKLSAgICAgICAgICAgIEFTU0VSVCh1c2VUbXAp
OworICAgICAgICBpZiAocHJldkluc3QpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgY29kZSBwYXRo
IGF0dGVtcHRzIHRvIGhhbmRsZSBjb2FsZXNjYWJsZSBpbnN0cnVjdGlvbnMuIEl0IGhhbmRsZXMg
Ym90aCBNb3ZlcyBhbmQKKyAgICAgICAgICAgIC8vIFNodWZmbGVzLiBUaGUgdHJpY2sgaXMgdG8g
ZW5zdXJlIHRoYXQgdGhlIGRlZmluaXRpb25zIGluIGEgTW92ZSBkb24ndCBpbnRlcmZlcmUgd2l0
aAorICAgICAgICAgICAgLy8gdGhlIHNvdXJjZXMsIHNvIGlmIHdlIGRldGVjdCBhIGNvYWxlc2Np
bmcgb3Bwb3J0dW5pdHkgd2UgYWxzbyBhdm9pZCB0YWtpbmcgdGhlIHVzdWFsCisgICAgICAgICAg
ICAvLyBpbnRlcmZlcmVuY2UgcGF0aCBieSBkb2luZyB0aGUgaW50ZXJmZXJlbmNlIGNhbGN1bGF0
aW9uIG1hbnVhbGx5IGFuZCByZXR1cm5pbmcgZWFybHkuCisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGF1dG8gYWRkQ29hbGVzY2FibGVNb3ZlID0gWyZdIChUbXAgc3JjVG1wLCBUbXAgZGVzdFRt
cCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNyY0luZGV4ID0gQWJzb2x1dGVUbXBNYXBw
ZXI8dHlwZT46OmFic29sdXRlSW5kZXgoc3JjVG1wKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBkZXN0SW5kZXggPSBBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChkZXN0
VG1wKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBuZXh0TW92
ZUluZGV4ID0gbV9jb2FsZXNjaW5nQ2FuZGlkYXRlcy5zaXplKCk7CisgICAgICAgICAgICAgICAg
bV9jb2FsZXNjaW5nQ2FuZGlkYXRlcy5hcHBlbmQoeyBzcmNJbmRleCwgZGVzdEluZGV4IH0pOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIG5ld0luZGV4SW5Xb3Jr
bGlzdCA9IG1fd29ya2xpc3RNb3Zlcy5hZGRNb3ZlKCk7CisgICAgICAgICAgICAgICAgQVNTRVJU
X1VOVVNFRChuZXdJbmRleEluV29ya2xpc3QsIG5ld0luZGV4SW5Xb3JrbGlzdCA9PSBuZXh0TW92
ZUluZGV4KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBU1NFUlQobmV4dE1v
dmVJbmRleCA8PSBtX2FjdGl2ZU1vdmVzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgbV9hY3Rp
dmVNb3Zlcy5lbnN1cmVTaXplKG5leHRNb3ZlSW5kZXggKyAxKTsKIAotICAgICAgICAgICAgdW5z
aWduZWQgbmV4dE1vdmVJbmRleCA9IG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMuc2l6ZSgpOwotICAg
ICAgICAgICAgbV9jb2FsZXNjaW5nQ2FuZGlkYXRlcy5hcHBlbmQoeyBBYnNvbHV0ZVRtcE1hcHBl
cjx0eXBlPjo6YWJzb2x1dGVJbmRleCh1c2VUbXApLCBBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6
YWJzb2x1dGVJbmRleChkZWZUbXApIH0pOworICAgICAgICAgICAgICAgIG1fbW92ZUxpc3Rbc3Jj
SW5kZXhdLmFkZChuZXh0TW92ZUluZGV4KTsKKyAgICAgICAgICAgICAgICBtX21vdmVMaXN0W2Rl
c3RJbmRleF0uYWRkKG5leHRNb3ZlSW5kZXgpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKG1heUJlQ29hbGVzY2FibGVNb3ZlKCpwcmV2SW5zdCkpIHsKKyAg
ICAgICAgICAgICAgICBUbXAgc3JjVG1wID0gcHJldkluc3QtPmFyZ3NbMF0udG1wKCk7CisgICAg
ICAgICAgICAgICAgVG1wIGRlc3RUbXAgPSBwcmV2SW5zdC0+YXJnc1sxXS50bXAoKTsKKyAgICAg
ICAgICAgICAgICBhZGRDb2FsZXNjYWJsZU1vdmUoc3JjVG1wLCBkZXN0VG1wKTsKKworICAgICAg
ICAgICAgICAgIGZvciAoVG1wIGxpdmVUbXAgOiBsb2NhbENhbGMubGl2ZSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChsaXZlVG1wICE9IHNyY1RtcCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZEVkZ2UoZGVzdFRtcCwgbGl2ZVRtcCk7CisgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICB1bnNpZ25lZCBuZXdJbmRleEluV29ya2xpc3QgPSBtX3dvcmtsaXN0TW92ZXMuYWRk
TW92ZSgpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChuZXdJbmRleEluV29ya2xpc3QsIG5l
d0luZGV4SW5Xb3JrbGlzdCA9PSBuZXh0TW92ZUluZGV4KTsKKyAgICAgICAgICAgICAgICAvLyBU
aGUgbmV4dCBpbnN0cnVjdGlvbiBjb3VsZCBoYXZlIGVhcmx5IGNsb2JiZXJzIG9yIGVhcmx5IGRl
ZidzLiBDb25zaWRlciB0aG9zZQorICAgICAgICAgICAgICAgIC8vIG5vdy4KKyAgICAgICAgICAg
ICAgICBhZGRFZGdlcyhudWxscHRyLCBuZXh0SW5zdCwgbG9jYWxDYWxjLmxpdmUoKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBBU1NFUlQo
bmV4dE1vdmVJbmRleCA8PSBtX2FjdGl2ZU1vdmVzLnNpemUoKSk7Ci0gICAgICAgICAgICBtX2Fj
dGl2ZU1vdmVzLmVuc3VyZVNpemUobmV4dE1vdmVJbmRleCArIDEpOworICAgICAgICAgICAgaWYg
KHByZXZJbnN0LT5vcGNvZGUgPT0gU2h1ZmZsZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBwcmV2SW5zdC0+YXJncy5zaXplKCk7IGkgKz0gMykgeworICAgICAg
ICAgICAgICAgICAgICBBcmcgZGVzdCA9IHByZXZJbnN0LT5hcmdzW2kgKyAxXTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChtYXlCZUNvYWxlc2NhYmxlU2h1
ZmZsZVBhaXIoKnByZXZJbnN0LCBpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgVG1wIHNy
Y1RtcCA9IHByZXZJbnN0LT5hcmdzW2kgKyAwXS50bXAoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFRtcCBkZXN0VG1wID0gZGVzdC50bXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZENvYWxlc2NhYmxlTW92ZShzcmNUbXAsIGRlc3RUZW1wKTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQ29uc2VydmF0aXZlbHksIGRlc3Qgd291bGQgaW50ZXJmZXJlIHdpdGggZXZlcnl0
aGluZyBsaXZlLiBCdXQgaW4gdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FzZSBp
dCBvbmx5IGludGVyZmVyZXMgd2l0aCBhbGwgbGl2ZSB2YXJpYWJsZXMgZXhjZXB0IHNyY1RtcC4K
KyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoVG1wIGxpdmVUbXAgOiBsb2NhbENhbGMubGl2
ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpdmVUbXAgIT0gc3JjVG1w
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFZGdlKGRlc3RUbXAsIGxpdmVU
bXApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZm9yIChjb25z
dCBBcmcmIGFyZyA6IHByZXZJbnN0LT5hcmdzKSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgbGlz
dCA9IG1fbW92ZUxpc3RbQWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgoYXJn
LnRtcCgpKV07Ci0gICAgICAgICAgICAgICAgbGlzdC5hZGQobmV4dE1vdmVJbmRleCk7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBkZXN0aW5hdGlvbiBpcyBh
IHRtcCwgaXQgbmVlZHMgdG8gaW50ZXJmZXJlIHdpdGggZXZlcnl0aGluZyBsaXZlLgorICAgICAg
ICAgICAgICAgICAgICBpZiAoZGVzdC5pc1RtcCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKFRtcCBsaXZlVG1wIDogbG9jYWxDYWxjLmxpdmUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhZGRFZGdlKGRlc3QudG1wKCksIGxpdmVUbXApOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBmb3IgKGNvbnN0IFRtcCYg
bGl2ZVRtcCA6IGxvY2FsQ2FsYy5saXZlKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobGl2ZVRt
cCAhPSB1c2VUbXApCi0gICAgICAgICAgICAgICAgICAgIGFkZEVkZ2UoZGVmVG1wLCBsaXZlVG1w
KTsKKyAgICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBpbnN0cnVjdGlvbiBjb3VsZCBoYXZlIGVh
cmx5IGNsb2JiZXJzIG9yIGVhcmx5IGRlZidzLiBDb25zaWRlciB0aG9zZQorICAgICAgICAgICAg
ICAgIC8vIG5vdy4KKyAgICAgICAgICAgICAgICBhZGRFZGdlcyhudWxscHRyLCBuZXh0SW5zdCwg
bG9jYWxDYWxjLmxpdmUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQorICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIFRoZSBuZXh0IGluc3RydWN0aW9uIGNvdWxk
IGhhdmUgZWFybHkgY2xvYmJlcnMgb3IgZWFybHkgZGVmJ3MuIFdlIG5lZWQgdG8gY29uc2lkZXIK
LSAgICAgICAgICAgIC8vIHRob3NlIG5vdy4KLSAgICAgICAgICAgIGFkZEVkZ2VzKG51bGxwdHIs
IG5leHRJbnN0LCBsb2NhbENhbGMubGl2ZSgpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBhZGRFZGdlcyhwcmV2SW5zdCwgbmV4dEluc3QsIGxvY2FsQ2FsYy5saXZlKCkpOworICAgICAg
ICBhZGRFZGdlcyhwcmV2SW5zdCwgbmV4dEluc3QsIGxvY2FsQ2FsYy5saXZlKCkpOwogICAgIH0K
IAogICAgIHZvaWQgYnVpbGRMb3dQcmlvcml0eU1vdmVMaXN0KCkKQEAgLTEwMzcsMTMgKzEwOTAs
MTggQEAgcHJpdmF0ZToKIAogICAgIC8vIENhbGxpbmcgdGhpcyB3aXRob3V0IGEgdG1wV2lkdGgg
d2lsbCBwZXJmb3JtIGEgbW9yZSBjb25zZXJ2YXRpdmUgY29hbGVzY2luZyBhbmFseXNpcyB0aGF0
IGFzc3VtZXMKICAgICAvLyB0aGF0IE1vdmUzMidzIGFyZSBub3QgY29hbGVzY2FibGUuCi0gICAg
c3RhdGljIGJvb2wgbWF5QmVDb2FsZXNjYWJsZUltcGwoY29uc3QgSW5zdCYgaW5zdCwgVG1wV2lk
dGgqIHRtcFdpZHRoKQorICAgIHN0YXRpYyBib29sIG1heUJlQ29hbGVzY2FibGVNb3ZlSW1wbChj
b25zdCBJbnN0JiBpbnN0LCBUbXBXaWR0aCogdG1wV2lkdGgpCiAgICAgeworICAgICAgICBBcmc6
OldpZHRoIHdpZHRoOworICAgICAgICAKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAg
IGNhc2UgQXJnOjpHUDoKICAgICAgICAgICAgIHN3aXRjaCAoaW5zdC5vcGNvZGUpIHsKICAgICAg
ICAgICAgIGNhc2UgTW92ZToKKyAgICAgICAgICAgICAgICB3aWR0aCA9IEFyZzo6Y29uc2VydmF0
aXZlV2lkdGgodHlwZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IE1vdmUzMjoKKyAgICAgICAgICAgICAgICB3aWR0aCA9IEFyZzo6V2lkdGgzMjsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMTA1Miw3ICsxMTEwLDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
QXJnOjpGUDoKICAgICAgICAgICAgIHN3aXRjaCAoaW5zdC5vcGNvZGUpIHsKICAgICAgICAgICAg
IGNhc2UgTW92ZUZsb2F0OgorICAgICAgICAgICAgICAgIHdpZHRoID0gQXJnOjpXaWR0aDMyOwor
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBNb3ZlRG91YmxlOgorICAg
ICAgICAgICAgICAgIHdpZHRoID0gQXJnOjpXaWR0aDY0OwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xMDYyLDI5ICsxMTIzLDMyIEBAIHByaXZhdGU6CiAKICAgICAgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRShpbnN0LmFyZ3Muc2l6ZSgpID09IDIsICJXZSBhc3N1bWUgY29hbGVjYWJsZSBtb3ZlcyBv
bmx5IGhhdmUgdHdvIGFyZ3VtZW50cyBpbiBhIGZldyBwbGFjZXMuIik7CiAKLSAgICAgICAgaWYg
KCFpbnN0LmFyZ3NbMF0uaXNUbXAoKSB8fCAhaW5zdC5hcmdzWzFdLmlzVG1wKCkpCisgICAgICAg
IHJldHVybiBtYXlCZUNvYWxlc2NhYmxlSW1wbCh3aWR0aCwgaW5zdC5hcmdzWzBdLCBpbnN0LmFy
Z3NbMV0sIHRtcFdpZHRoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBtYXlCZUNvYWxlc2Nh
YmxlSW1wbCgKKyAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgQXJnJiBzcmMsIGNvbnN0
IEFyZyYgZGVzdCwgVG1wV2lkdGgqIHRtcFdpZHRoKQorICAgIHsKKyAgICAgICAgaWYgKCFzcmMu
aXNUbXAoKSB8fCAhZGVzdC5pc1RtcCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIEFTU0VSVChpbnN0LmFyZ3NbMF0udHlwZSgpID09IHR5cGUpOwotICAgICAgICBBU1NF
UlQoaW5zdC5hcmdzWzFdLnR5cGUoKSA9PSB0eXBlKTsKKyAgICAgICAgaWYgKCFzcmMuaXNUeXBl
KHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIC8vIFdlIGNhbiBj
b2FsZXNjZSBhIE1vdmUzMiBzbyBsb25nIGFzIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nIGhvbGRz
OgotICAgICAgICAvLyAtIFRoZSBpbnB1dCBpcyBhbHJlYWR5IHplcm8tZmlsbGVkLgotICAgICAg
ICAvLyAtIFRoZSBvdXRwdXQgb25seSBjYXJlcyBhYm91dCB0aGUgbG93IDMyIGJpdHMuCi0gICAg
ICAgIC8vCi0gICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgaW5wdXQgcHJvcGVydHkgcmVxdWlyZXMg
YW4gYW5hbHlzaXMgb3ZlciBaRGVmJ3MsIHNvIGl0J3Mgb25seSB2YWxpZCBzbyBsb25nCi0gICAg
ICAgIC8vIGFzIHRoZSBpbnB1dCBnZXRzIGEgcmVnaXN0ZXIuIFdlIGRvbid0IGtub3cgaWYgdGhl
IGlucHV0IGdldHMgYSByZWdpc3RlciwgYnV0IHdlIGRvIGtub3cKLSAgICAgICAgLy8gdGhhdCBp
ZiBpdCBkb2Vzbid0IGdldCBhIHJlZ2lzdGVyIHRoZW4gd2Ugd2lsbCBzdGlsbCBlbWl0IHRoaXMg
TW92ZTMyLgotICAgICAgICBpZiAoaW5zdC5vcGNvZGUgPT0gTW92ZTMyKSB7Ci0gICAgICAgICAg
ICBpZiAoIXRtcFdpZHRoKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
QVNTRVJUKHdpZHRoID09IFdpZHRoMzIgfHwgd2lkdGggPT0gV2lkdGg2NCk7CisgICAgICAgIEFT
U0VSVChzcmMudHlwZSgpID09IGRlc3QudHlwZSgpKTsKIAotICAgICAgICAgICAgaWYgKHRtcFdp
ZHRoLT5kZWZXaWR0aChpbnN0LmFyZ3NbMF0udG1wKCkpID4gQXJnOjpXaWR0aDMyCi0gICAgICAg
ICAgICAgICAgJiYgdG1wV2lkdGgtPnVzZVdpZHRoKGluc3QuYXJnc1sxXS50bXAoKSkgPiBBcmc6
OldpZHRoMzIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQXJnOjpGUCkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmICh3aWR0aCA9PSBBcmc6OmNv
bnNlcnZhdGl2ZVdpZHRoKHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAg
ICAgaWYgKCF0bXBXaWR0aCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBy
ZXR1cm4gdG1wV2lkdGgtPmRlZldpZHRoKHNyYykgPD0gQXJnOjpXaWR0aDMyCisgICAgICAgICAg
ICB8fCB0bXBXaWR0aC0+dXNlV2lkdGgoZGVzdCkgPD0gQXJnOjpXaWR0aDMyOwogICAgIH0KIAog
ICAgIHZvaWQgc2VsZWN0U3BpbGwoKQpAQCAtMTM3NSw5ICsxNDM5LDkgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2st
PnNpemUoKTsgKytpbnN0SW5kZXgpIHsKICAgICAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxv
Y2stPmF0KGluc3RJbmRleCk7CiAKLSAgICAgICAgICAgICAgICAvLyBUaGUgbWF5QmVDb2FsZXNj
YWJsZSgpIG1ldGhvZCB3aWxsIGNoYW5nZSBpdHMgbWluZCBmb3Igc29tZSBvcGVyYXRpb25zIGFm
dGVyIHdlCi0gICAgICAgICAgICAgICAgLy8gY29tcGxldGUgcmVnaXN0ZXIgYWxsb2NhdGlvbi4g
U28sIHdlIHJlY29yZCB0aGlzIGJlZm9yZSBzdGFydGluZy4KLSAgICAgICAgICAgICAgICBib29s
IG1heUJlQ29hbGVzY2FibGUgPSBhbGxvY2F0b3IubWF5QmVDb2FsZXNjYWJsZShpbnN0KTsKKyAg
ICAgICAgICAgICAgICAvLyBUaGUgbWF5QmVDb2FsZXNjYWJsZU1vdmUoKSBtZXRob2Qgd2lsbCBj
aGFuZ2UgaXRzIG1pbmQgZm9yIHNvbWUgb3BlcmF0aW9ucyBhZnRlcgorICAgICAgICAgICAgICAg
IC8vIHdlIGNvbXBsZXRlIHJlZ2lzdGVyIGFsbG9jYXRpb24uIFNvLCB3ZSByZWNvcmQgdGhpcyBi
ZWZvcmUgc3RhcnRpbmcuCisgICAgICAgICAgICAgICAgYm9vbCBtYXlCZUNvYWxlc2NhYmxlTW92
ZSA9IGFsbG9jYXRvci5tYXlCZUNvYWxlc2NhYmxlTW92ZShpbnN0KTsKIAogICAgICAgICAgICAg
ICAgIC8vIE1vdmUzMiBpcyBjaGVhcGVyIGlmIHdlIGtub3cgdGhhdCBpdCdzIGVxdWl2YWxlbnQg
dG8gYSBNb3ZlLiBJdCdzCiAgICAgICAgICAgICAgICAgLy8gZXF1aXZhbGVudCBpZiB0aGUgZGVz
dGluYXRpb24ncyBoaWdoIGJpdHMgYXJlIG5vdCBvYnNlcnZhYmxlIG9yIGlmIHRoZSBzb3VyY2Un
cyBoaWdoCkBAIC0xMzkwLDYgKzE0NTQsMjUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgICAgIGluc3Qub3Bjb2RlID0gTW92ZTMyOwogICAgICAgICAgICAgICAgIH0KIAorICAgICAg
ICAgICAgICAgIC8vIEFsbCBvZiB0aGUgc3R1ZmYgd2UgZG8gZm9yIE1vdmVzIGFsc28gYXBwbGll
cyB0byBTaHVmZmxlcy4KKyAgICAgICAgICAgICAgICBCaXRWZWN0b3IgY29hbGVzY2FibGVTaHVm
ZmxlUGFpcnM7CisgICAgICAgICAgICAgICAgaWYgKGluc3Qub3Bjb2RlID09IFNodWZmbGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5z
aXplKCk7IGkgKz0gMykgeworICAgICAgICAgICAgICAgICAgICAgICAgQXJnIHNyYyA9IGluc3Qu
YXJnc1tpICsgMF07CisgICAgICAgICAgICAgICAgICAgICAgICBBcmcgZGVzdCA9IGluc3QuYXJn
c1tpICsgMV07CisgICAgICAgICAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gaW5z
dC5hcmdzW2kgKyAyXS53aWR0aCgpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoYWxsb2NhdG9yLm1heUJlQ29hbGVzY2FibGVTaHVmZmxlUGFp
cihpbnN0LCBpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2FsZXNjYWJsZVNodWZm
bGVQYWlycy5zZXQoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh0eXBlID09IEFyZzo6R1AgJiYgc3JjLmlzVG1wKCkgJiYgZGVzdC5pc1Rt
cCgpICYmIHNyYy5pc0dQKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3aWR0aCA9
PSBXaWR0aDY0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKG1fdG1wV2lkdGgudXNl
V2lkdGgoZGVzdCkgPD0gQXJnOjpXaWR0aDMyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IG1fdG1wV2lkdGguZGVmV2lkdGgoc3JjKSA8PSBBcmc6OldpZHRoMzIpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluc3QuYXJnc1tpICsgMl0gPSBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGgzMik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXBGYXN0KFsmXSAoVG1wJiB0bXApIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpIHx8IHRtcC5pc0dQKCkgPT0gKHR5cGUg
IT0gQXJnOjpHUCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0xNDEwLDYg
KzE0OTMsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAobWF5QmVDb2FsZXNjYWJs
ZSAmJiBpbnN0LmFyZ3NbMF0uaXNUbXAoKSAmJiBpbnN0LmFyZ3NbMV0uaXNUbXAoKQogICAgICAg
ICAgICAgICAgICAgICAmJiBpbnN0LmFyZ3NbMF0udG1wKCkgPT0gaW5zdC5hcmdzWzFdLnRtcCgp
KQogICAgICAgICAgICAgICAgICAgICBpbnN0ID0gSW5zdCgpOworCisgICAgICAgICAgICAgICAg
aWYgKGluc3Qub3Bjb2RlID09IFNodWZmbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgSW5zdDo6
QXJnTGlzdCBuZXdBcmdzOworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgaSArPSAzKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBBcmcgc3JjID0gaW5zdC5hcmdzW2kgKyAwXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFy
ZyBkZXN0ID0gaW5zdC5hcmdzW2kgKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFyZzo6
V2lkdGggd2lkdGggPSBpbnN0LmFyZ3NbaSArIDJdOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGNvYWxlc2NhYmxlU2h1ZmZsZVBhaXJzLmdldChpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICYmIHNyYy5pc1RtcCgpICYmIGRlc3QuaXNUbXAoKSAmJiBzcmMudG1wKCkgPT0gZGVz
dC50bXAoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3QXJncy5hcHBlbmQoc3JjKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5ld0FyZ3MuYXBwZW5kKGRlc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3
QXJncy5hcHBlbmQoQXJnOjp3aWR0aEFyZyh3aWR0aCkpOworICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgaW5zdC5hcmdzID0gV1RGTW92ZShuZXdBcmdzKTsKKyAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIFJlbW92ZSBh
bGwgdGhlIHVzZWxlc3MgbW92ZXMgd2UgY3JlYXRlZCBpbiB0aGlzIGJsb2NrLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271719</attachid>
            <date>2016-02-18 17:54:28 -0800</date>
            <delta_ts>2016-02-23 11:07:02 -0800</delta_ts>
            <desc>oh man</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>17410</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNv
YWxlc2NpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCShyZXZpc2lvbiAxOTY3NjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUxLDkgKzc1MSwyMCBAQCBwdWJsaWM6CiAgICAgLy8g
VGhpcyB0ZWxscyB5b3UgaWYgYSBNb3ZlIHdpbGwgYmUgY29hbGVzY2FibGUgaWYgdGhlIHNyYyBh
bmQgZHN0IGVuZCB1cCBtYXRjaGluZy4gVGhpcyBtZXRob2QKICAgICAvLyByZWxpZXMgb24gYW4g
YW5hbHlzaXMgdGhhdCBpcyBpbnZhbGlkYXRlZCBieSByZWdpc3RlciBhbGxvY2F0aW9uLCBzbyB5
b3UgaXQncyBvbmx5IG1lYW5pbmdmdWwgdG8KICAgICAvLyBjYWxsIHRoaXMgKmJlZm9yZSogcmVw
bGFjaW5nIHRoZSBUbXAncyBpbiB0aGlzIEluc3Qgd2l0aCByZWdpc3RlcnMgb3Igc3BpbGwgc2xv
dHMuCi0gICAgYm9vbCBtYXlCZUNvYWxlc2NhYmxlKGNvbnN0IEluc3QmIGluc3QpIGNvbnN0Cisg
ICAgYm9vbCBtYXlCZUNvYWxlc2NhYmxlTW92ZShjb25zdCBJbnN0JiBpbnN0KSBjb25zdAogICAg
IHsKLSAgICAgICAgcmV0dXJuIG1heUJlQ29hbGVzY2FibGVJbXBsKGluc3QsICZtX3RtcFdpZHRo
KTsKKyAgICAgICAgcmV0dXJuIG1heUJlQ29hbGVzY2FibGVNb3ZlSW1wbChpbnN0LCAmbV90bXBX
aWR0aCk7CisgICAgfQorCisgICAgYm9vbCBtYXlCZUNvYWxlc2NhYmxlU2h1ZmZsZVBhaXIoY29u
c3QgSW5zdCYgaW5zdCwgdW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbWF5QmVDb2FsZXNjYWJsZSgKKyAgICAgICAgICAgIGluc3QuYXJnc1tpbmRleCArIDJdLndp
ZHRoKCksIGluc3QuYXJnc1tpbmRleCArIDBdLCBpbnN0LmFyZ3NbaW5kZXggKyAxXSk7CisgICAg
fQorCisgICAgYm9vbCBtYXlCZUNvYWxlc2NhYmxlKEFyZzo6V2lkdGggd2lkdGgsIGNvbnN0IEFy
ZyYgc3JjLCBjb25zdCBBcmcmIGRlc3QpCisgICAgeworICAgICAgICByZXR1cm4gbWF5QmVDb2Fs
ZXNjYWJsZUltcGwod2lkdGgsIHNyYywgZGVzdCwgJm1fdG1wV2lkdGgpOwogICAgIH0KIAogICAg
IGJvb2wgaXNVc2VsZXNzTW92ZShjb25zdCBJbnN0JiBpbnN0KSBjb25zdApAQCAtNzYxLDYgKzc3
MiwxNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtYXlCZUNvYWxlc2NhYmxlSW1wbChpbnN0
LCBudWxscHRyKSAmJiBpbnN0LmFyZ3NbMF0udG1wKCkgPT0gaW5zdC5hcmdzWzFdLnRtcCgpOwog
ICAgIH0KIAorICAgIGJvb2wgaXNVc2VsZXNzU2h1ZmZsZVBhaXIoY29uc3QgSW5zdCYgaW5zdCwg
dW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNVc2VsZXNzTW92
ZSgKKyAgICAgICAgICAgIGluc3QuYXJnc1tpbmRleCArIDJdLndpZHRoKCksIGluc3QuYXJnc1tp
bmRleCArIDBdLCBpbnN0LmFyZ3NbaW5kZXggKyAxXSk7CisgICAgfQorCisgICAgYm9vbCBpc1Vz
ZWxlc3NNb3ZlKEFyZzo6V2lkdGggd2lkdGgsIGNvbnN0IEFyZyYgc3JjLCBjb25zdCBBcmcmIGRl
c3QpCisgICAgeworICAgICAgICByZXR1cm4gbWF5QmVDb2FsZXNjYWJsZUltcGwod2lkdGgsIHNy
YywgZGVzdCwgbnVsbHB0cikgJiYgc3JjLnRtcCgpID09IGRlc3QudG1wKCk7CisgICAgfQorCiAg
ICAgVG1wIGdldEFsaWFzV2hlblNwaWxsaW5nKFRtcCB0bXApIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX3NwaWxsZWRUbXBzLmlzRW1wdHkoKSwgIlRoaXMgZnVu
Y3Rpb24gaXMgb25seSB2YWxpZCBmb3IgY29hbGVzY2luZyBkdXJpbmcgc3BpbGxpbmcuIik7CkBA
IC05NDEsNDcgKzk2Myw3OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIH0pOwogCi0gICAgICAgIGlmIChwcmV2SW5zdCAmJiBtYXlCZUNvYWxlc2NhYmxl
KCpwcmV2SW5zdCkpIHsKLSAgICAgICAgICAgIC8vIFdlIGRvIG5vdCB3YW50IHRoZSBVc2UoKSBv
ZiB0aGlzIG1vdmUgdG8gaW50ZXJmZXJlIHdpdGggdGhlIERlZigpLCBldmVuIGlmIGl0IGlzIGxp
dmUKLSAgICAgICAgICAgIC8vIGFmdGVyIHRoZSBNb3ZlLiBJZiB3ZSB3ZXJlIHRvIGFkZCB0aGUg
aW50ZXJmZXJlbmNlIGVkZ2UsIGl0IHdvdWxkIGJlIGltcG9zc2libGUgdG8KLSAgICAgICAgICAg
IC8vIGNvYWxlc2NlIHRoZSBNb3ZlIGV2ZW4gaWYgdGhlIHR3byBUbXAgbmV2ZXIgaW50ZXJmZXJl
IGFueXdoZXJlLgotICAgICAgICAgICAgVG1wIGRlZlRtcDsKLSAgICAgICAgICAgIFRtcCB1c2VU
bXA7Ci0gICAgICAgICAgICBwcmV2SW5zdC0+Zm9yRWFjaFRtcChbJmRlZlRtcCwgJnVzZVRtcF0g
KFRtcCYgYXJnVG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRlRGVmKHJvbGUpKQotICAgICAgICAgICAgICAg
ICAgICBkZWZUbXAgPSBhcmdUbXA7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChBcmc6OmlzRWFybHlVc2Uocm9sZSkpOwotICAgICAgICAgICAgICAg
ICAgICB1c2VUbXAgPSBhcmdUbXA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICBBU1NFUlQoZGVmVG1wKTsKLSAgICAgICAgICAgIEFTU0VSVCh1c2VUbXAp
OworICAgICAgICBpZiAocHJldkluc3QpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgY29kZSBwYXRo
IGF0dGVtcHRzIHRvIGhhbmRsZSBjb2FsZXNjYWJsZSBpbnN0cnVjdGlvbnMuIEl0IGhhbmRsZXMg
Ym90aCBNb3ZlcyBhbmQKKyAgICAgICAgICAgIC8vIFNodWZmbGVzLiBUaGUgdHJpY2sgaXMgdG8g
ZW5zdXJlIHRoYXQgdGhlIGRlZmluaXRpb25zIGluIGEgTW92ZSBkb24ndCBpbnRlcmZlcmUgd2l0
aAorICAgICAgICAgICAgLy8gdGhlIHNvdXJjZXMsIHNvIGlmIHdlIGRldGVjdCBhIGNvYWxlc2Np
bmcgb3Bwb3J0dW5pdHkgd2UgYWxzbyBhdm9pZCB0YWtpbmcgdGhlIHVzdWFsCisgICAgICAgICAg
ICAvLyBpbnRlcmZlcmVuY2UgcGF0aCBieSBkb2luZyB0aGUgaW50ZXJmZXJlbmNlIGNhbGN1bGF0
aW9uIG1hbnVhbGx5IGFuZCByZXR1cm5pbmcgZWFybHkuCisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGF1dG8gYWRkQ29hbGVzY2FibGVNb3ZlID0gWyZdIChUbXAgc3JjVG1wLCBUbXAgZGVzdFRt
cCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNyY0luZGV4ID0gQWJzb2x1dGVUbXBNYXBw
ZXI8dHlwZT46OmFic29sdXRlSW5kZXgoc3JjVG1wKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBkZXN0SW5kZXggPSBBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChkZXN0
VG1wKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBuZXh0TW92
ZUluZGV4ID0gbV9jb2FsZXNjaW5nQ2FuZGlkYXRlcy5zaXplKCk7CisgICAgICAgICAgICAgICAg
bV9jb2FsZXNjaW5nQ2FuZGlkYXRlcy5hcHBlbmQoeyBzcmNJbmRleCwgZGVzdEluZGV4IH0pOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIG5ld0luZGV4SW5Xb3Jr
bGlzdCA9IG1fd29ya2xpc3RNb3Zlcy5hZGRNb3ZlKCk7CisgICAgICAgICAgICAgICAgQVNTRVJU
X1VOVVNFRChuZXdJbmRleEluV29ya2xpc3QsIG5ld0luZGV4SW5Xb3JrbGlzdCA9PSBuZXh0TW92
ZUluZGV4KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBU1NFUlQobmV4dE1v
dmVJbmRleCA8PSBtX2FjdGl2ZU1vdmVzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgbV9hY3Rp
dmVNb3Zlcy5lbnN1cmVTaXplKG5leHRNb3ZlSW5kZXggKyAxKTsKIAotICAgICAgICAgICAgdW5z
aWduZWQgbmV4dE1vdmVJbmRleCA9IG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMuc2l6ZSgpOwotICAg
ICAgICAgICAgbV9jb2FsZXNjaW5nQ2FuZGlkYXRlcy5hcHBlbmQoeyBBYnNvbHV0ZVRtcE1hcHBl
cjx0eXBlPjo6YWJzb2x1dGVJbmRleCh1c2VUbXApLCBBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6
YWJzb2x1dGVJbmRleChkZWZUbXApIH0pOworICAgICAgICAgICAgICAgIG1fbW92ZUxpc3Rbc3Jj
SW5kZXhdLmFkZChuZXh0TW92ZUluZGV4KTsKKyAgICAgICAgICAgICAgICBtX21vdmVMaXN0W2Rl
c3RJbmRleF0uYWRkKG5leHRNb3ZlSW5kZXgpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKG1heUJlQ29hbGVzY2FibGVNb3ZlKCpwcmV2SW5zdCkpIHsKKyAg
ICAgICAgICAgICAgICBUbXAgc3JjVG1wID0gcHJldkluc3QtPmFyZ3NbMF0udG1wKCk7CisgICAg
ICAgICAgICAgICAgVG1wIGRlc3RUbXAgPSBwcmV2SW5zdC0+YXJnc1sxXS50bXAoKTsKKyAgICAg
ICAgICAgICAgICBhZGRDb2FsZXNjYWJsZU1vdmUoc3JjVG1wLCBkZXN0VG1wKTsKKworICAgICAg
ICAgICAgICAgIGZvciAoVG1wIGxpdmVUbXAgOiBsb2NhbENhbGMubGl2ZSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChsaXZlVG1wICE9IHNyY1RtcCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZEVkZ2UoZGVzdFRtcCwgbGl2ZVRtcCk7CisgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICB1bnNpZ25lZCBuZXdJbmRleEluV29ya2xpc3QgPSBtX3dvcmtsaXN0TW92ZXMuYWRk
TW92ZSgpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChuZXdJbmRleEluV29ya2xpc3QsIG5l
d0luZGV4SW5Xb3JrbGlzdCA9PSBuZXh0TW92ZUluZGV4KTsKKyAgICAgICAgICAgICAgICAvLyBU
aGUgbmV4dCBpbnN0cnVjdGlvbiBjb3VsZCBoYXZlIGVhcmx5IGNsb2JiZXJzIG9yIGVhcmx5IGRl
ZidzLiBDb25zaWRlciB0aG9zZQorICAgICAgICAgICAgICAgIC8vIG5vdy4KKyAgICAgICAgICAg
ICAgICBhZGRFZGdlcyhudWxscHRyLCBuZXh0SW5zdCwgbG9jYWxDYWxjLmxpdmUoKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBBU1NFUlQo
bmV4dE1vdmVJbmRleCA8PSBtX2FjdGl2ZU1vdmVzLnNpemUoKSk7Ci0gICAgICAgICAgICBtX2Fj
dGl2ZU1vdmVzLmVuc3VyZVNpemUobmV4dE1vdmVJbmRleCArIDEpOworICAgICAgICAgICAgaWYg
KHByZXZJbnN0LT5vcGNvZGUgPT0gU2h1ZmZsZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBwcmV2SW5zdC0+YXJncy5zaXplKCk7IGkgKz0gMykgeworICAgICAg
ICAgICAgICAgICAgICBBcmcgZGVzdCA9IHByZXZJbnN0LT5hcmdzW2kgKyAxXTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChtYXlCZUNvYWxlc2NhYmxlU2h1
ZmZsZVBhaXIoKnByZXZJbnN0LCBpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgVG1wIHNy
Y1RtcCA9IHByZXZJbnN0LT5hcmdzW2kgKyAwXS50bXAoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFRtcCBkZXN0VG1wID0gZGVzdC50bXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZENvYWxlc2NhYmxlTW92ZShzcmNUbXAsIGRlc3RUZW1wKTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQ29uc2VydmF0aXZlbHksIGRlc3Qgd291bGQgaW50ZXJmZXJlIHdpdGggZXZlcnl0
aGluZyBsaXZlLiBCdXQgaW4gdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FzZSBp
dCBvbmx5IGludGVyZmVyZXMgd2l0aCBhbGwgbGl2ZSB2YXJpYWJsZXMgZXhjZXB0IHNyY1RtcC4K
KyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoVG1wIGxpdmVUbXAgOiBsb2NhbENhbGMubGl2
ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpdmVUbXAgIT0gc3JjVG1w
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFZGdlKGRlc3RUbXAsIGxpdmVU
bXApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZm9yIChjb25z
dCBBcmcmIGFyZyA6IHByZXZJbnN0LT5hcmdzKSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgbGlz
dCA9IG1fbW92ZUxpc3RbQWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgoYXJn
LnRtcCgpKV07Ci0gICAgICAgICAgICAgICAgbGlzdC5hZGQobmV4dE1vdmVJbmRleCk7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBkZXN0aW5hdGlvbiBpcyBh
IHRtcCwgaXQgbmVlZHMgdG8gaW50ZXJmZXJlIHdpdGggZXZlcnl0aGluZyBsaXZlLgorICAgICAg
ICAgICAgICAgICAgICBpZiAoZGVzdC5pc1RtcCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKFRtcCBsaXZlVG1wIDogbG9jYWxDYWxjLmxpdmUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhZGRFZGdlKGRlc3QudG1wKCksIGxpdmVUbXApOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBmb3IgKGNvbnN0IFRtcCYg
bGl2ZVRtcCA6IGxvY2FsQ2FsYy5saXZlKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobGl2ZVRt
cCAhPSB1c2VUbXApCi0gICAgICAgICAgICAgICAgICAgIGFkZEVkZ2UoZGVmVG1wLCBsaXZlVG1w
KTsKKyAgICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBpbnN0cnVjdGlvbiBjb3VsZCBoYXZlIGVh
cmx5IGNsb2JiZXJzIG9yIGVhcmx5IGRlZidzLiBDb25zaWRlciB0aG9zZQorICAgICAgICAgICAg
ICAgIC8vIG5vdy4KKyAgICAgICAgICAgICAgICBhZGRFZGdlcyhudWxscHRyLCBuZXh0SW5zdCwg
bG9jYWxDYWxjLmxpdmUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQorICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIFRoZSBuZXh0IGluc3RydWN0aW9uIGNvdWxk
IGhhdmUgZWFybHkgY2xvYmJlcnMgb3IgZWFybHkgZGVmJ3MuIFdlIG5lZWQgdG8gY29uc2lkZXIK
LSAgICAgICAgICAgIC8vIHRob3NlIG5vdy4KLSAgICAgICAgICAgIGFkZEVkZ2VzKG51bGxwdHIs
IG5leHRJbnN0LCBsb2NhbENhbGMubGl2ZSgpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBhZGRFZGdlcyhwcmV2SW5zdCwgbmV4dEluc3QsIGxvY2FsQ2FsYy5saXZlKCkpOworICAgICAg
ICBhZGRFZGdlcyhwcmV2SW5zdCwgbmV4dEluc3QsIGxvY2FsQ2FsYy5saXZlKCkpOwogICAgIH0K
IAogICAgIHZvaWQgYnVpbGRMb3dQcmlvcml0eU1vdmVMaXN0KCkKQEAgLTEwMzcsMTMgKzEwOTAs
MTggQEAgcHJpdmF0ZToKIAogICAgIC8vIENhbGxpbmcgdGhpcyB3aXRob3V0IGEgdG1wV2lkdGgg
d2lsbCBwZXJmb3JtIGEgbW9yZSBjb25zZXJ2YXRpdmUgY29hbGVzY2luZyBhbmFseXNpcyB0aGF0
IGFzc3VtZXMKICAgICAvLyB0aGF0IE1vdmUzMidzIGFyZSBub3QgY29hbGVzY2FibGUuCi0gICAg
c3RhdGljIGJvb2wgbWF5QmVDb2FsZXNjYWJsZUltcGwoY29uc3QgSW5zdCYgaW5zdCwgVG1wV2lk
dGgqIHRtcFdpZHRoKQorICAgIHN0YXRpYyBib29sIG1heUJlQ29hbGVzY2FibGVNb3ZlSW1wbChj
b25zdCBJbnN0JiBpbnN0LCBUbXBXaWR0aCogdG1wV2lkdGgpCiAgICAgeworICAgICAgICBBcmc6
OldpZHRoIHdpZHRoOworICAgICAgICAKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAg
IGNhc2UgQXJnOjpHUDoKICAgICAgICAgICAgIHN3aXRjaCAoaW5zdC5vcGNvZGUpIHsKICAgICAg
ICAgICAgIGNhc2UgTW92ZToKKyAgICAgICAgICAgICAgICB3aWR0aCA9IEFyZzo6Y29uc2VydmF0
aXZlV2lkdGgodHlwZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IE1vdmUzMjoKKyAgICAgICAgICAgICAgICB3aWR0aCA9IEFyZzo6V2lkdGgzMjsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMTA1Miw3ICsxMTEwLDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
QXJnOjpGUDoKICAgICAgICAgICAgIHN3aXRjaCAoaW5zdC5vcGNvZGUpIHsKICAgICAgICAgICAg
IGNhc2UgTW92ZUZsb2F0OgorICAgICAgICAgICAgICAgIHdpZHRoID0gQXJnOjpXaWR0aDMyOwor
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBNb3ZlRG91YmxlOgorICAg
ICAgICAgICAgICAgIHdpZHRoID0gQXJnOjpXaWR0aDY0OwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xMDYyLDI5ICsxMTIzLDMyIEBAIHByaXZhdGU6CiAKICAgICAgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRShpbnN0LmFyZ3Muc2l6ZSgpID09IDIsICJXZSBhc3N1bWUgY29hbGVjYWJsZSBtb3ZlcyBv
bmx5IGhhdmUgdHdvIGFyZ3VtZW50cyBpbiBhIGZldyBwbGFjZXMuIik7CiAKLSAgICAgICAgaWYg
KCFpbnN0LmFyZ3NbMF0uaXNUbXAoKSB8fCAhaW5zdC5hcmdzWzFdLmlzVG1wKCkpCisgICAgICAg
IHJldHVybiBtYXlCZUNvYWxlc2NhYmxlSW1wbCh3aWR0aCwgaW5zdC5hcmdzWzBdLCBpbnN0LmFy
Z3NbMV0sIHRtcFdpZHRoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBtYXlCZUNvYWxlc2Nh
YmxlSW1wbCgKKyAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgQXJnJiBzcmMsIGNvbnN0
IEFyZyYgZGVzdCwgVG1wV2lkdGgqIHRtcFdpZHRoKQorICAgIHsKKyAgICAgICAgaWYgKCFzcmMu
aXNUbXAoKSB8fCAhZGVzdC5pc1RtcCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIEFTU0VSVChpbnN0LmFyZ3NbMF0udHlwZSgpID09IHR5cGUpOwotICAgICAgICBBU1NF
UlQoaW5zdC5hcmdzWzFdLnR5cGUoKSA9PSB0eXBlKTsKKyAgICAgICAgaWYgKCFzcmMuaXNUeXBl
KHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIC8vIFdlIGNhbiBj
b2FsZXNjZSBhIE1vdmUzMiBzbyBsb25nIGFzIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nIGhvbGRz
OgotICAgICAgICAvLyAtIFRoZSBpbnB1dCBpcyBhbHJlYWR5IHplcm8tZmlsbGVkLgotICAgICAg
ICAvLyAtIFRoZSBvdXRwdXQgb25seSBjYXJlcyBhYm91dCB0aGUgbG93IDMyIGJpdHMuCi0gICAg
ICAgIC8vCi0gICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgaW5wdXQgcHJvcGVydHkgcmVxdWlyZXMg
YW4gYW5hbHlzaXMgb3ZlciBaRGVmJ3MsIHNvIGl0J3Mgb25seSB2YWxpZCBzbyBsb25nCi0gICAg
ICAgIC8vIGFzIHRoZSBpbnB1dCBnZXRzIGEgcmVnaXN0ZXIuIFdlIGRvbid0IGtub3cgaWYgdGhl
IGlucHV0IGdldHMgYSByZWdpc3RlciwgYnV0IHdlIGRvIGtub3cKLSAgICAgICAgLy8gdGhhdCBp
ZiBpdCBkb2Vzbid0IGdldCBhIHJlZ2lzdGVyIHRoZW4gd2Ugd2lsbCBzdGlsbCBlbWl0IHRoaXMg
TW92ZTMyLgotICAgICAgICBpZiAoaW5zdC5vcGNvZGUgPT0gTW92ZTMyKSB7Ci0gICAgICAgICAg
ICBpZiAoIXRtcFdpZHRoKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
QVNTRVJUKHdpZHRoID09IFdpZHRoMzIgfHwgd2lkdGggPT0gV2lkdGg2NCk7CisgICAgICAgIEFT
U0VSVChzcmMudHlwZSgpID09IGRlc3QudHlwZSgpKTsKIAotICAgICAgICAgICAgaWYgKHRtcFdp
ZHRoLT5kZWZXaWR0aChpbnN0LmFyZ3NbMF0udG1wKCkpID4gQXJnOjpXaWR0aDMyCi0gICAgICAg
ICAgICAgICAgJiYgdG1wV2lkdGgtPnVzZVdpZHRoKGluc3QuYXJnc1sxXS50bXAoKSkgPiBBcmc6
OldpZHRoMzIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQXJnOjpGUCkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmICh3aWR0aCA9PSBBcmc6OmNv
bnNlcnZhdGl2ZVdpZHRoKHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAg
ICAgaWYgKCF0bXBXaWR0aCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBy
ZXR1cm4gdG1wV2lkdGgtPmRlZldpZHRoKHNyYykgPD0gQXJnOjpXaWR0aDMyCisgICAgICAgICAg
ICB8fCB0bXBXaWR0aC0+dXNlV2lkdGgoZGVzdCkgPD0gQXJnOjpXaWR0aDMyOwogICAgIH0KIAog
ICAgIHZvaWQgc2VsZWN0U3BpbGwoKQpAQCAtMTM3NSw5ICsxNDM5LDkgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2st
PnNpemUoKTsgKytpbnN0SW5kZXgpIHsKICAgICAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxv
Y2stPmF0KGluc3RJbmRleCk7CiAKLSAgICAgICAgICAgICAgICAvLyBUaGUgbWF5QmVDb2FsZXNj
YWJsZSgpIG1ldGhvZCB3aWxsIGNoYW5nZSBpdHMgbWluZCBmb3Igc29tZSBvcGVyYXRpb25zIGFm
dGVyIHdlCi0gICAgICAgICAgICAgICAgLy8gY29tcGxldGUgcmVnaXN0ZXIgYWxsb2NhdGlvbi4g
U28sIHdlIHJlY29yZCB0aGlzIGJlZm9yZSBzdGFydGluZy4KLSAgICAgICAgICAgICAgICBib29s
IG1heUJlQ29hbGVzY2FibGUgPSBhbGxvY2F0b3IubWF5QmVDb2FsZXNjYWJsZShpbnN0KTsKKyAg
ICAgICAgICAgICAgICAvLyBUaGUgbWF5QmVDb2FsZXNjYWJsZU1vdmUoKSBtZXRob2Qgd2lsbCBj
aGFuZ2UgaXRzIG1pbmQgZm9yIHNvbWUgb3BlcmF0aW9ucyBhZnRlcgorICAgICAgICAgICAgICAg
IC8vIHdlIGNvbXBsZXRlIHJlZ2lzdGVyIGFsbG9jYXRpb24uIFNvLCB3ZSByZWNvcmQgdGhpcyBi
ZWZvcmUgc3RhcnRpbmcuCisgICAgICAgICAgICAgICAgYm9vbCBtYXlCZUNvYWxlc2NhYmxlTW92
ZSA9IGFsbG9jYXRvci5tYXlCZUNvYWxlc2NhYmxlTW92ZShpbnN0KTsKIAogICAgICAgICAgICAg
ICAgIC8vIE1vdmUzMiBpcyBjaGVhcGVyIGlmIHdlIGtub3cgdGhhdCBpdCdzIGVxdWl2YWxlbnQg
dG8gYSBNb3ZlLiBJdCdzCiAgICAgICAgICAgICAgICAgLy8gZXF1aXZhbGVudCBpZiB0aGUgZGVz
dGluYXRpb24ncyBoaWdoIGJpdHMgYXJlIG5vdCBvYnNlcnZhYmxlIG9yIGlmIHRoZSBzb3VyY2Un
cyBoaWdoCkBAIC0xMzkwLDYgKzE0NTQsMjUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgICAgIGluc3Qub3Bjb2RlID0gTW92ZTMyOwogICAgICAgICAgICAgICAgIH0KIAorICAgICAg
ICAgICAgICAgIC8vIEFsbCBvZiB0aGUgc3R1ZmYgd2UgZG8gZm9yIE1vdmVzIGFsc28gYXBwbGll
cyB0byBTaHVmZmxlcy4KKyAgICAgICAgICAgICAgICBCaXRWZWN0b3IgY29hbGVzY2FibGVTaHVm
ZmxlUGFpcnM7CisgICAgICAgICAgICAgICAgaWYgKGluc3Qub3Bjb2RlID09IFNodWZmbGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5z
aXplKCk7IGkgKz0gMykgeworICAgICAgICAgICAgICAgICAgICAgICAgQXJnIHNyYyA9IGluc3Qu
YXJnc1tpICsgMF07CisgICAgICAgICAgICAgICAgICAgICAgICBBcmcgZGVzdCA9IGluc3QuYXJn
c1tpICsgMV07CisgICAgICAgICAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gaW5z
dC5hcmdzW2kgKyAyXS53aWR0aCgpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoYWxsb2NhdG9yLm1heUJlQ29hbGVzY2FibGVTaHVmZmxlUGFp
cihpbnN0LCBpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2FsZXNjYWJsZVNodWZm
bGVQYWlycy5zZXQoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh0eXBlID09IEFyZzo6R1AgJiYgc3JjLmlzVG1wKCkgJiYgZGVzdC5pc1Rt
cCgpICYmIHNyYy5pc0dQKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3aWR0aCA9
PSBXaWR0aDY0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKG1fdG1wV2lkdGgudXNl
V2lkdGgoZGVzdCkgPD0gQXJnOjpXaWR0aDMyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IG1fdG1wV2lkdGguZGVmV2lkdGgoc3JjKSA8PSBBcmc6OldpZHRoMzIpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluc3QuYXJnc1tpICsgMl0gPSBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGgzMik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXBGYXN0KFsmXSAoVG1wJiB0bXApIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpIHx8IHRtcC5pc0dQKCkgPT0gKHR5cGUg
IT0gQXJnOjpHUCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0xNDEwLDEx
ICsxNDkzLDI5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKG1heUJlQ29hbGVzY2Fi
bGUgJiYgaW5zdC5hcmdzWzBdLmlzVG1wKCkgJiYgaW5zdC5hcmdzWzFdLmlzVG1wKCkKICAgICAg
ICAgICAgICAgICAgICAgJiYgaW5zdC5hcmdzWzBdLnRtcCgpID09IGluc3QuYXJnc1sxXS50bXAo
KSkKICAgICAgICAgICAgICAgICAgICAgaW5zdCA9IEluc3QoKTsKLSAgICAgICAgICAgIH0KIAor
ICAgICAgICAgICAgICAgIGlmIChpbnN0Lm9wY29kZSA9PSBTaHVmZmxlKSB7CisgICAgICAgICAg
ICAgICAgICAgIEluc3Q6OkFyZ0xpc3QgbmV3QXJnczsKKyAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCk7IGkgKz0gMykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgQXJnIHNyYyA9IGluc3QuYXJnc1tpICsgMF07CisgICAgICAgICAg
ICAgICAgICAgICAgICBBcmcgZGVzdCA9IGluc3QuYXJnc1tpICsgMV07CisgICAgICAgICAgICAg
ICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gaW5zdC5hcmdzW2kgKyAyXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChjb2FsZXNjYWJsZVNodWZmbGVQYWlycy5nZXQoaSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmJiBzcmMuaXNUbXAoKSAmJiBkZXN0LmlzVG1wKCkgJiYg
c3JjLnRtcCgpID09IGRlc3QudG1wKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0FyZ3MuYXBwZW5kKHNyYyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBuZXdBcmdzLmFwcGVuZChkZXN0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5ld0FyZ3MuYXBwZW5kKEFyZzo6d2lkdGhBcmcod2lkdGgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgaW5zdC5hcmdzID0gV1RGTW92ZShuZXdBcmdzKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFJlbW92ZSBhbGwgdGhlIHVz
ZWxlc3MgbW92ZXMgd2UgY3JlYXRlZCBpbiB0aGlzIGJsb2NrLgogICAgICAgICAgICAgYmxvY2st
Pmluc3RzKCkucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChjb25zdCBJbnN0JiBpbnN0KSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICFpbnN0OworICAgICAgICAgICAgICAgIHJldHVybiAhaW5zdCB8
fCAoaW5zdC5vcGNvZGUgPT0gU2h1ZmZsZSAmJiBpbnN0LmFyZ3MuaXNFbXB0eSgpKTsKICAgICAg
ICAgICAgIH0pOwogICAgICAgICB9CiAgICAgfQpAQCAtMTQ0Miw2ICsxNTQzLDYyIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8
IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CiAgICAgICAgICAgICAgICAgSW5zdCYgaW5z
dCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOwogCisgICAgICAgICAgICAgICAgLy8gVGhlIFNodWZm
bGUgaW5zdHJ1Y3Rpb24gcmVxdWlyZXMgc29tZSBzcGVjaWFsIGNhcmUuIFRoZSBUbXBXaWR0aCBh
bmFseXNpcyB3aWxsCisgICAgICAgICAgICAgICAgLy8gc2F5IHRoYXQgYSBzaHVmZmxlIHBhaXIg
b25seSBzdG9yZXMgMzItYml0cyBpbnRvIHRoZSBkZXN0aW5hdGlvbiBpZiB0aGUgc291cmNlCisg
ICAgICAgICAgICAgICAgLy8gb25seSBoYWQgMzIgYml0cyB3b3J0aCBvZiBub24temVybyBiaXRz
LiBTYW1lIGZvciB0aGUgc291cmNlOiBpdCB3aWxsIG9ubHkgY2xhaW0KKyAgICAgICAgICAgICAg
ICAvLyB0byByZWFkIDMyIGJpdHMgZnJvbSB0aGUgc291cmNlIGlmIG9ubHkgMzIgYml0cyBvZiB0
aGUgZGVzdGluYXRpb24gYXJlIHJlYWQuIFRoaXMKKyAgICAgICAgICAgICAgICAvLyBoYXBwZW5z
IG9uIGEgcGVyLXBhaXIgYmFzaXMuIFdlIGFsc28gaGFwcGVuIHRvIGtub3cgdGhhdCBTaHVmZmxl
IGFkbWl0cyBzdGFjaworICAgICAgICAgICAgICAgIC8vIGV2ZXJ5d2hlcmUsIHdoaWNoIG1ha2Vz
IHNwaWxsaW5nIGVhc2llci4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8v
IE5vdGUgdGhhdCBpdCdzIE9LIGZvciB0aGlzIHRvIGZhbGwgdGhyb3VnaCBmb3Igbm90IEdQLCBz
aW5jZSB3ZSBoYW5kbGUgU2h1ZmZsZQorICAgICAgICAgICAgICAgIC8vIGp1c3QgZmluZSBpZiB3
ZSBkb24ndCBoYXZlIHRvIGhhbmRsZSB0aGUgd2lkdGggc3BlY2lhbCBjYXNlcy4KKyAgICAgICAg
ICAgICAgICBpZiAoaW5zdC5vcGNvZGUgPT0gU2h1ZmZsZSAmJiB0eXBlKSB7CisgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyBpICs9
IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFyZyBzcmMgPSBpbnN0LmFyZ3NbaSArIDBd
OworICAgICAgICAgICAgICAgICAgICAgICAgQXJnIGRlc3QgPSBpbnN0LmFyZ3NbaSArIDFdOwor
ICAgICAgICAgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IGluc3QuYXJnc1tpICsg
Ml0ud2lkdGgoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBleGNsdWRlcyBl
dmVyeXRoaW5nIGV4Y2VwdCBtZW0tPm1lbSBwYWlycywgd2hpY2ggd2UgZ3JhY2VmdWxseQorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGRvd24gYmVsb3cuCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIXNyYy5pc1R5cGUodHlwZSkgfHwgIWRlc3QuaXNUeXBlKHR5cGUpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBmb3JjZVdpZHRoMzJJZkRpZFNwaWxsID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGRpZFNwaWxsID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0eXBlID09IEdQICYmIHdpZHRoID09IEFyZzo6V2lkdGg2NCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICgoc3JjLmlzVG1wKCkgJiYgbV90bXBXaWR0aC51c2VXaWR0
aChkZXN0LnRtcCgpKSA8PSBBcmc6OldpZHRoMzIpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IChkZXN0LmlzVG1wKCkgJiYgbV90bXBXaWR0aC5kZWZXaWR0aChzcmMudG1wKCkp
IDw9IEFyZzo6V2lkdGgzMikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNl
V2lkdGgzMklmRGlkU3BpbGwgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGhhbmRsZVRtcCA9IFsmXSAoQXJnJiBhcmcpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGFyZy5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBzdGFja1Nsb3RFbnRyeSA9IHN0
YWNrU2xvdHMuZmluZChhcmcudG1wKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChzdGFja1Nsb3RFbnRyeSA9PSBzdGFja1Nsb3RzLmVuZCgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tT
bG90RW50cnktPnZhbHVlLT5lbnN1cmVTaXplKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3JjZVdpZHRoMzJJZkRpZFNwaWxsID8gNCA6IEFyZzo6Ynl0ZXMod2lkdGgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OnN0YWNrKHN0YWNrU2xvdEVudHJ5
LT52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkU3BpbGwgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVG1wKHNyYyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBoYW5kbGVUbXAoZGVzdCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaWRT
cGlsbCAmJiBmb3JjZVdpZHRoMzJJZkRpZFNwaWxsKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdpZHRoID0gQXJnOjpXaWR0aDMyOworCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0
LmFyZ3NbaSArIDBdID0gc3JjOworICAgICAgICAgICAgICAgICAgICAgICAgaW5zdC5hcmdzW2kg
KyAxXSA9IGRlc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0LmFyZ3NbaSArIDJdID0g
QXJnOjp3aWR0aEFyZyh3aWR0aCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIC8vIFRoZSBUbXBXaWR0aCBhbmFseXNpcyB3aWxsIHNheSB0aGF0IGEg
TW92ZSBvbmx5IHN0b3JlcyAzMiBiaXRzIGludG8gdGhlIGRlc3RpbmF0aW9uLAogICAgICAgICAg
ICAgICAgIC8vIGlmIHRoZSBzb3VyY2Ugb25seSBoYWQgMzIgYml0cyB3b3J0aCBvZiBub24temVy
byBiaXRzLiBTYW1lIGZvciB0aGUgc291cmNlOiBpdCB3aWxsCiAgICAgICAgICAgICAgICAgLy8g
b25seSBjbGFpbSB0byByZWFkIDMyIGJpdHMgZnJvbSB0aGUgc291cmNlIGlmIG9ubHkgMzIgYml0
cyBvZiB0aGUgZGVzdGluYXRpb24gYXJlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272036</attachid>
            <date>2016-02-23 11:07:02 -0800</date>
            <delta_ts>2016-03-01 20:28:14 -0800</delta_ts>
            <desc>a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>26722</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmgJ
KHJldmlzaW9uIDE5Njc2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1p
dFNodWZmbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAi
QWlyQXJnLmgiCiAjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkFpclNodWZmbGVQYWly
LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKQEAgLTM4LDM0ICszOSw2IEBAIGNsYXNzIFZhbHVlOwogCiBuYW1lc3BhY2UgQWlyIHsK
IAotY2xhc3MgU2h1ZmZsZVBhaXIgewotcHVibGljOgotICAgIFNodWZmbGVQYWlyKCkKLSAgICB7
Ci0gICAgfQotICAgIAotICAgIFNodWZmbGVQYWlyKGNvbnN0IEFyZyYgc3JjLCBjb25zdCBBcmcm
IGRzdCwgQXJnOjpXaWR0aCB3aWR0aCkKLSAgICAgICAgOiBtX3NyYyhzcmMpCi0gICAgICAgICwg
bV9kc3QoZHN0KQotICAgICAgICAsIG1fd2lkdGgod2lkdGgpCi0gICAgewotICAgIH0KLQotICAg
IGNvbnN0IEFyZyYgc3JjKCkgY29uc3QgeyByZXR1cm4gbV9zcmM7IH0KLSAgICBjb25zdCBBcmcm
IGRzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZHN0OyB9Ci0KLSAgICAvLyBUaGUgd2lkdGggZGV0ZXJt
aW5lcyB0aGUga2luZCBvZiBtb3ZlIHdlIGRvLiBZb3UgY2FuIG9ubHkgY2hvb3NlIFdpZHRoMzIg
b3IgV2lkdGg2NCByaWdodCBub3cuCi0gICAgLy8gRm9yIEdQLCBpdCBwaWNrcyBiZXR3ZWVuIE1v
dmUzMiBhbmQgTW92ZS4gRm9yIEZQLCBpdCBwaWNrcyBiZXR3ZWVuIE1vdmVGbG9hdCBhbmQgTW92
ZURvdWJsZS4KLSAgICBBcmc6OldpZHRoIHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsg
fQotCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgot
ICAgIEFyZyBtX3NyYzsKLSAgICBBcmcgbV9kc3Q7Ci0gICAgQXJnOjpXaWR0aCBtX3dpZHRoIHsg
QXJnOjpXaWR0aDggfTsKLX07Ci0KIC8vIENyZWF0ZSBhIFNodWZmbGUgaW5zdHJ1Y3Rpb24uCiBJ
bnN0IGNyZWF0ZVNodWZmbGUoVmFsdWUqIG9yaWdpbiwgY29uc3QgVmVjdG9yPFNodWZmbGVQYWly
PiYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5jcHAJKHJl
dmlzaW9uIDE5Njc2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDE4IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAordm9pZCBJbnN0OjphZGRTaHVmZmxlUGFp
cihjb25zdCBTaHVmZmxlUGFpciYgcGFpcikKK3sKKyAgICBpZiAob3Bjb2RlID09IE5vcCkKKyAg
ICAgICAgb3Bjb2RlID0gU2h1ZmZsZTsKKyAgICBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KG9wY29kZSA9PSBTaHVmZmxlKTsKKworICAgIGFyZ3MuYXBwZW5kKHBhaXIuc3JjKCkpOworICAg
IGFyZ3MuYXBwZW5kKHBhaXIuZHN0KCkpOworICAgIGFyZ3MuYXBwZW5kKEFyZzo6d2lkdGhBcmco
cGFpci53aWR0aCgpKSk7Cit9CisKIGJvb2wgSW5zdDo6aGFzQXJnRWZmZWN0cygpCiB7CiAgICAg
Ym9vbCByZXN1bHQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SW5zdC5oCShyZXZpc2lvbiAxOTY3NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckluc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAi
QWlyQXJnLmgiCiAjaW5jbHVkZSAiQWlyT3Bjb2RlLmgiCisjaW5jbHVkZSAiQWlyU2h1ZmZsZVBh
aXIuaCIKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0x
NDYsNiArMTQ3LDE0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZywgdHlw
ZW5hbWUgRnVuY3Rvcj4KICAgICBzdGF0aWMgdm9pZCBmb3JFYWNoRGVmV2l0aEV4dHJhQ2xvYmJl
cmVkUmVncyhJbnN0KiBwcmV2SW5zdCwgSW5zdCogbmV4dEluc3QsIGNvbnN0IEZ1bmN0b3ImKTsK
IAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgYm9vbCBmb3JFYWNoU2h1ZmZs
ZVBhaXIoY29uc3QgRnVuY3RvciYpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU2h1ZmZsZUNh
bGxiYWNrLCB0eXBlbmFtZSBGYWxsYmFja0NhbGxiYWNrPgorICAgIHZvaWQgZm9yRWFjaFNodWZm
bGVQYWlyKGNvbnN0IFNodWZmbGVDYWxsYmFjayYsIGNvbnN0IEZhbGxiYWNrQ2FsbGJhY2smKTsK
KworICAgIHZvaWQgYWRkU2h1ZmZsZVBhaXIoY29uc3QgU2h1ZmZsZVBhaXImKTsKKwogICAgIC8v
IFVzZSB0aGlzIHRvIHJlcG9ydCB3aGljaCByZWdpc3RlcnMgYXJlIGxpdmUuIFRoaXMgc2hvdWxk
IGJlIGRvbmUganVzdCBiZWZvcmUgY29kZWdlbi4gTm90ZQogICAgIC8vIHRoYXQgZm9yIGVmZmlj
aWVuY3ksIHJlcG9ydFVzZWRSZWdpc3RlcnMoKSBvbmx5IHdvcmtzIGZvciB0aGUgUGF0Y2ggb3Bj
b2RlLgogICAgIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlclNldCYpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAko
cmV2aXNpb24gMTk2NzY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNiArMTUzLDQzIEBAIGlubGluZSB2b2lk
IEluc3Q6OmZvckVhY2hEZWZXaXRoRXh0cmFDbG8KICAgICB9CiB9CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+Citib29sIEluc3Q6OmZvckVhY2hTaHVmZmxlUGFpcihjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBNb3ZlOgorICAg
ICAgICBmdW5jdG9yKFNodWZmbGVQYWlyKGFyZ3NbMF0sIGFyZ3NbMV0sIEFyZzo6Y29uc2VydmF0
aXZlV2lkdGgoQXJnOjpHUCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBNb3Zl
MzI6CisgICAgICAgIGZ1bmN0b3IoU2h1ZmZsZVBhaXIoYXJnc1swXSwgYXJnc1sxXSwgQXJnOjpX
aWR0aDMyKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgTW92ZURvdWJsZToKKyAg
ICAgICAgZnVuY3RvcihTaHVmZmxlUGFpcihhcmdzWzBdLCBhcmdzWzFdLCBBcmc6OldpZHRoNjQp
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBNb3ZlRmxvYXQ6CisgICAgICAgIGZ1
bmN0b3IoU2h1ZmZsZVBhaXIoYXJnc1swXSwgYXJnc1sxXSwgQXJnOjpXaWR0aDMyKSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgU2h1ZmZsZToKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSArIDIgPCBhcmdzLnNpemUoKTsgaSArPSAzKSB7CisgICAgICAgICAgICBBcmcg
c3JjID0gYXJnc1tpICsgMF07CisgICAgICAgICAgICBBcmcgZGVzdCA9IGFyZ3NbaSArIDFdOwor
ICAgICAgICAgICAgQXJnIHdpZHRoID0gYXJnc1tpICsgMl07CisgICAgICAgICAgICBmdW5jdG9y
KHNyYywgZGVzdCwgd2lkdGgud2lkdGgoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgU2h1ZmZsZUNhbGxiYWNrLCB0eXBlbmFtZSBGYWxsYmFja0NhbGxiYWNr
Pgordm9pZCBJbnN0Ojpmb3JFYWNoU2h1ZmZsZVBhaXIoCisgICAgY29uc3QgU2h1ZmZsZUNhbGxi
YWNrJiBzaHVmZmxlQ2FsbGJhY2ssIGNvbnN0IEZhbGxiYWNrQ2FsbGJhY2smIGZhbGxiYWNrQ2Fs
bGJhY2spCit7CisgICAgaWYgKCFmb3JFYWNoU2h1ZmZsZVBhaXIoc2h1ZmZsZUNhbGxiYWNrKSkK
KyAgICAgICAgZmFsbGJhY2tDYWxsYmFjaygpOworfQorCiBpbmxpbmUgdm9pZCBJbnN0OjpyZXBv
cnRVc2VkUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQogewogICAg
IEFTU0VSVChvcGNvZGUgPT0gUGF0Y2gpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5j
cHAJKHJldmlzaW9uIDE5Njc2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTEsOSAr
NzUxLDI1IEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIHRlbGxzIHlvdSBpZiBhIE1vdmUgd2lsbCBi
ZSBjb2FsZXNjYWJsZSBpZiB0aGUgc3JjIGFuZCBkc3QgZW5kIHVwIG1hdGNoaW5nLiBUaGlzIG1l
dGhvZAogICAgIC8vIHJlbGllcyBvbiBhbiBhbmFseXNpcyB0aGF0IGlzIGludmFsaWRhdGVkIGJ5
IHJlZ2lzdGVyIGFsbG9jYXRpb24sIHNvIHlvdSBpdCdzIG9ubHkgbWVhbmluZ2Z1bCB0bwogICAg
IC8vIGNhbGwgdGhpcyAqYmVmb3JlKiByZXBsYWNpbmcgdGhlIFRtcCdzIGluIHRoaXMgSW5zdCB3
aXRoIHJlZ2lzdGVycyBvciBzcGlsbCBzbG90cy4KLSAgICBib29sIG1heUJlQ29hbGVzY2FibGUo
Y29uc3QgSW5zdCYgaW5zdCkgY29uc3QKKyAgICBib29sIG1heUJlQ29hbGVzY2FibGVNb3ZlKGNv
bnN0IEluc3QmIGluc3QpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbWF5QmVDb2FsZXNj
YWJsZUltcGwoaW5zdCwgJm1fdG1wV2lkdGgpOworICAgICAgICByZXR1cm4gbWF5QmVDb2FsZXNj
YWJsZU1vdmVJbXBsKGluc3QsICZtX3RtcFdpZHRoKTsKKyAgICB9CisKKyAgICBib29sIG1heUJl
Q29hbGVzY2FibGVTaHVmZmxlUGFpcihjb25zdCBJbnN0JiBpbnN0LCB1bnNpZ25lZCBpbmRleCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtYXlCZUNvYWxlc2NhYmxlKAorICAgICAgICAg
ICAgaW5zdC5hcmdzW2luZGV4ICsgMl0ud2lkdGgoKSwgaW5zdC5hcmdzW2luZGV4ICsgMF0sIGlu
c3QuYXJnc1tpbmRleCArIDFdKTsKKyAgICB9CisKKyAgICBib29sIG1heUJlQ29hbGVzY2FibGUo
QXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgQXJnJiBzcmMsIGNvbnN0IEFyZyYgZGVzdCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtYXlCZUNvYWxlc2NhYmxlSW1wbCh3aWR0aCwgc3JjLCBkZXN0LCAm
bV90bXBXaWR0aCk7CisgICAgfQorCisgICAgYm9vbCBtYXlCZUNvYWxlc2NhYmxlKGNvbnN0IFNo
dWZmbGVQYWlyJiBwYWlyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1heUJlQ29hbGVzY2FibGVJ
bXBsKHBhaXIsICZtX3RtcFdpZHRoKTsKICAgICB9CiAKICAgICBib29sIGlzVXNlbGVzc01vdmUo
Y29uc3QgSW5zdCYgaW5zdCkgY29uc3QKQEAgLTc2MSw2ICs3NzcsMjIgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbWF5QmVDb2FsZXNjYWJsZUltcGwoaW5zdCwgbnVsbHB0cikgJiYgaW5zdC5h
cmdzWzBdLnRtcCgpID09IGluc3QuYXJnc1sxXS50bXAoKTsKICAgICB9CiAKKyAgICBib29sIGlz
VXNlbGVzc1NodWZmbGVQYWlyKGNvbnN0IEluc3QmIGluc3QsIHVuc2lnbmVkIGluZGV4KSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVXNlbGVzc01vdmUoCisgICAgICAgICAgICBpbnN0
LmFyZ3NbaW5kZXggKyAyXS53aWR0aCgpLCBpbnN0LmFyZ3NbaW5kZXggKyAwXSwgaW5zdC5hcmdz
W2luZGV4ICsgMV0pOworICAgIH0KKworICAgIGJvb2wgaXNVc2VsZXNzTW92ZShBcmc6OldpZHRo
IHdpZHRoLCBjb25zdCBBcmcmIHNyYywgY29uc3QgQXJnJiBkZXN0KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1heUJlQ29hbGVzY2FibGVJbXBsKHdpZHRoLCBzcmMsIGRlc3QsIG51bGxwdHIpICYm
IHNyYy50bXAoKSA9PSBkZXN0LnRtcCgpOworICAgIH0KKworICAgIGJvb2wgaXNVc2VsZXNzU2h1
ZmZsZVBhaXIoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbWF5QmVDb2FsZXNjYWJsZUltcGwocGFpciwgbnVsbHB0cikgJiYgcGFpci5zcmMoKS50
bXAoKSA9PSBwYWlyLmRzdCgpLnRtcCgpOworICAgIH0KKwogICAgIFRtcCBnZXRBbGlhc1doZW5T
cGlsbGluZyhUbXAgdG1wKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RSghbV9zcGlsbGVkVG1wcy5pc0VtcHR5KCksICJUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdmFsaWQg
Zm9yIGNvYWxlc2NpbmcgZHVyaW5nIHNwaWxsaW5nLiIpOwpAQCAtOTQxLDQ3ICs5NzMsNjIgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKIAotICAg
ICAgICBpZiAocHJldkluc3QgJiYgbWF5QmVDb2FsZXNjYWJsZSgqcHJldkluc3QpKSB7Ci0gICAg
ICAgICAgICAvLyBXZSBkbyBub3Qgd2FudCB0aGUgVXNlKCkgb2YgdGhpcyBtb3ZlIHRvIGludGVy
ZmVyZSB3aXRoIHRoZSBEZWYoKSwgZXZlbiBpZiBpdCBpcyBsaXZlCi0gICAgICAgICAgICAvLyBh
ZnRlciB0aGUgTW92ZS4gSWYgd2Ugd2VyZSB0byBhZGQgdGhlIGludGVyZmVyZW5jZSBlZGdlLCBp
dCB3b3VsZCBiZSBpbXBvc3NpYmxlIHRvCi0gICAgICAgICAgICAvLyBjb2FsZXNjZSB0aGUgTW92
ZSBldmVuIGlmIHRoZSB0d28gVG1wIG5ldmVyIGludGVyZmVyZSBhbnl3aGVyZS4KLSAgICAgICAg
ICAgIFRtcCBkZWZUbXA7Ci0gICAgICAgICAgICBUbXAgdXNlVG1wOwotICAgICAgICAgICAgcHJl
dkluc3QtPmZvckVhY2hUbXAoWyZkZWZUbXAsICZ1c2VUbXBdIChUbXAmIGFyZ1RtcCwgQXJnOjpS
b2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgewotICAgICAgICAgICAgICAgIGlmIChB
cmc6OmlzTGF0ZURlZihyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgZGVmVG1wID0gYXJnVG1w
OwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoQXJn
Ojppc0Vhcmx5VXNlKHJvbGUpKTsKLSAgICAgICAgICAgICAgICAgICAgdXNlVG1wID0gYXJnVG1w
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgQVNTRVJU
KGRlZlRtcCk7Ci0gICAgICAgICAgICBBU1NFUlQodXNlVG1wKTsKLQotICAgICAgICAgICAgdW5z
aWduZWQgbmV4dE1vdmVJbmRleCA9IG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMuc2l6ZSgpOwotICAg
ICAgICAgICAgbV9jb2FsZXNjaW5nQ2FuZGlkYXRlcy5hcHBlbmQoeyBBYnNvbHV0ZVRtcE1hcHBl
cjx0eXBlPjo6YWJzb2x1dGVJbmRleCh1c2VUbXApLCBBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6
YWJzb2x1dGVJbmRleChkZWZUbXApIH0pOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBuZXdJbmRl
eEluV29ya2xpc3QgPSBtX3dvcmtsaXN0TW92ZXMuYWRkTW92ZSgpOwotICAgICAgICAgICAgQVNT
RVJUX1VOVVNFRChuZXdJbmRleEluV29ya2xpc3QsIG5ld0luZGV4SW5Xb3JrbGlzdCA9PSBuZXh0
TW92ZUluZGV4KTsKKyAgICAgICAgaWYgKHByZXZJbnN0KSB7CisgICAgICAgICAgICAvLyBUaGlz
IGNvZGUgcGF0aCBhdHRlbXB0cyB0byBoYW5kbGUgY29hbGVzY2FibGUgaW5zdHJ1Y3Rpb25zLiBJ
dCBoYW5kbGVzIGJvdGggTW92ZXMgYW5kCisgICAgICAgICAgICAvLyBTaHVmZmxlcy4gVGhlIHRy
aWNrIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBkZWZpbml0aW9ucyBpbiBhIE1vdmUgZG9uJ3QgaW50
ZXJmZXJlIHdpdGgKKyAgICAgICAgICAgIC8vIHRoZSBzb3VyY2VzLCBzbyBpZiB3ZSBkZXRlY3Qg
YSBjb2FsZXNjaW5nIG9wcG9ydHVuaXR5IHdlIGFsc28gYXZvaWQgdGFraW5nIHRoZSB1c3VhbAor
ICAgICAgICAgICAgLy8gaW50ZXJmZXJlbmNlIHBhdGggYnkgZG9pbmcgdGhlIGludGVyZmVyZW5j
ZSBjYWxjdWxhdGlvbiBtYW51YWxseSBhbmQgcmV0dXJuaW5nIGVhcmx5LgorCisgICAgICAgICAg
ICBhdXRvIGFkZENvYWxlc2NhYmxlTW92ZSA9IFsmXSAoVG1wIHNyY1RtcCwgVG1wIGRlc3RUbXAp
IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBzcmNJbmRleCA9IEFic29sdXRlVG1wTWFwcGVy
PHR5cGU+OjphYnNvbHV0ZUluZGV4KHNyY1RtcCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQg
ZGVzdEluZGV4ID0gQWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgoZGVzdFRt
cCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbmV4dE1vdmVJ
bmRleCA9IG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMuc2l6ZSgpOworICAgICAgICAgICAgICAgIG1f
Y29hbGVzY2luZ0NhbmRpZGF0ZXMuYXBwZW5kKHsgc3JjSW5kZXgsIGRlc3RJbmRleCB9KTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBuZXdJbmRleEluV29ya2xp
c3QgPSBtX3dvcmtsaXN0TW92ZXMuYWRkTW92ZSgpOworICAgICAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQobmV3SW5kZXhJbldvcmtsaXN0LCBuZXdJbmRleEluV29ya2xpc3QgPT0gbmV4dE1vdmVJ
bmRleCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQVNTRVJUKG5leHRNb3Zl
SW5kZXggPD0gbV9hY3RpdmVNb3Zlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIG1fYWN0aXZl
TW92ZXMuZW5zdXJlU2l6ZShuZXh0TW92ZUluZGV4ICsgMSk7CiAKLSAgICAgICAgICAgIEFTU0VS
VChuZXh0TW92ZUluZGV4IDw9IG1fYWN0aXZlTW92ZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIG1f
YWN0aXZlTW92ZXMuZW5zdXJlU2l6ZShuZXh0TW92ZUluZGV4ICsgMSk7CisgICAgICAgICAgICAg
ICAgbV9tb3ZlTGlzdFtzcmNJbmRleF0uYWRkKG5leHRNb3ZlSW5kZXgpOworICAgICAgICAgICAg
ICAgIG1fbW92ZUxpc3RbZGVzdEluZGV4XS5hZGQobmV4dE1vdmVJbmRleCk7CisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgCisgICAgICAgICAgICBib29sIGRpZEhhbmRsZSA9IHByZXZJbnN0
LT5mb3JFYWNoU2h1ZmZsZVBhaXIoCisgICAgICAgICAgICAgICAgWyZdIChjb25zdCBTaHVmZmxl
UGFpciYgcGFpcikgeworICAgICAgICAgICAgICAgICAgICBpZiAobWF5QmVDb2FsZXNjYWJsZShw
YWlyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgVG1wIHNyY1RtcCA9IHBhaXIuc3JjKCku
dG1wKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBUbXAgZHN0VG1wID0gcGFpci5kc3QoKS50
bXAoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ29hbGVzY2FibGVNb3ZlKHNyY1Rt
cCwgZHN0VG1wKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29uc2VydmF0aXZlbHks
IGRlc3Qgd291bGQgaW50ZXJmZXJlIHdpdGggZXZlcnl0aGluZyBsaXZlLiBCdXQgaW4gdGhpcwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FzZSBpdCBvbmx5IGludGVyZmVyZXMgd2l0aCBh
bGwgbGl2ZSB2YXJpYWJsZXMgZXhjZXB0IHNyY1RtcC4KKyAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoVG1wIGxpdmVUbXAgOiBsb2NhbENhbGMubGl2ZSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGxpdmVUbXAgIT0gc3JjVG1wKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhZGRFZGdlKGRzdFRtcCwgbGl2ZVRtcCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgZm9yIChjb25zdCBBcmcmIGFyZyA6IHByZXZJbnN0LT5hcmdz
KSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgbGlzdCA9IG1fbW92ZUxpc3RbQWJzb2x1dGVUbXBN
YXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgoYXJnLnRtcCgpKV07Ci0gICAgICAgICAgICAgICAg
bGlzdC5hZGQobmV4dE1vdmVJbmRleCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIC8vIElmIHRoZSBkZXN0aW5hdGlvbiBpcyBhIHRtcCwgaXQgbmVlZHMgdG8gaW50ZXJmZXJl
IHdpdGggZXZlcnl0aGluZyBsaXZlLgorICAgICAgICAgICAgICAgICAgICBpZiAoZHN0LmlzVG1w
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoVG1wIGxpdmVUbXAgOiBsb2NhbENh
bGMubGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVkZ2UocGFpci5kc3Qo
KS50bXAoKSwgbGl2ZVRtcCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9KTsKIAotICAgICAgICAgICAgZm9yIChjb25zdCBUbXAmIGxpdmVUbXAgOiBsb2NhbENhbGMu
bGl2ZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxpdmVUbXAgIT0gdXNlVG1wKQotICAgICAg
ICAgICAgICAgICAgICBhZGRFZGdlKGRlZlRtcCwgbGl2ZVRtcCk7CisgICAgICAgICAgICBpZiAo
ZGlkSGFuZGxlKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIG5leHQgaW5zdHJ1Y3Rpb24gY291
bGQgaGF2ZSBlYXJseSBjbG9iYmVycyBvciBlYXJseSBkZWYncy4gQ29uc2lkZXIgdGhvc2UKKyAg
ICAgICAgICAgICAgICAvLyBub3cuCisgICAgICAgICAgICAgICAgYWRkRWRnZXMobnVsbHB0ciwg
bmV4dEluc3QsIGxvY2FsQ2FsYy5saXZlKCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBUaGUgbmV4dCBpbnN0cnVj
dGlvbiBjb3VsZCBoYXZlIGVhcmx5IGNsb2JiZXJzIG9yIGVhcmx5IGRlZidzLiBXZSBuZWVkIHRv
IGNvbnNpZGVyCi0gICAgICAgICAgICAvLyB0aG9zZSBub3cuCi0gICAgICAgICAgICBhZGRFZGdl
cyhudWxscHRyLCBuZXh0SW5zdCwgbG9jYWxDYWxjLmxpdmUoKSk7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgYWRkRWRnZXMocHJldkluc3QsIG5leHRJbnN0LCBsb2NhbENhbGMubGl2ZSgp
KTsKKyAgICAgICAgYWRkRWRnZXMocHJldkluc3QsIG5leHRJbnN0LCBsb2NhbENhbGMubGl2ZSgp
KTsKICAgICB9CiAKICAgICB2b2lkIGJ1aWxkTG93UHJpb3JpdHlNb3ZlTGlzdCgpCkBAIC0xMDM3
LDEzICsxMDg0LDE4IEBAIHByaXZhdGU6CiAKICAgICAvLyBDYWxsaW5nIHRoaXMgd2l0aG91dCBh
IHRtcFdpZHRoIHdpbGwgcGVyZm9ybSBhIG1vcmUgY29uc2VydmF0aXZlIGNvYWxlc2NpbmcgYW5h
bHlzaXMgdGhhdCBhc3N1bWVzCiAgICAgLy8gdGhhdCBNb3ZlMzIncyBhcmUgbm90IGNvYWxlc2Nh
YmxlLgotICAgIHN0YXRpYyBib29sIG1heUJlQ29hbGVzY2FibGVJbXBsKGNvbnN0IEluc3QmIGlu
c3QsIFRtcFdpZHRoKiB0bXBXaWR0aCkKKyAgICBzdGF0aWMgYm9vbCBtYXlCZUNvYWxlc2NhYmxl
TW92ZUltcGwoY29uc3QgSW5zdCYgaW5zdCwgVG1wV2lkdGgqIHRtcFdpZHRoKQogICAgIHsKKyAg
ICAgICAgQXJnOjpXaWR0aCB3aWR0aDsKKyAgICAgICAgCiAgICAgICAgIHN3aXRjaCAodHlwZSkg
ewogICAgICAgICBjYXNlIEFyZzo6R1A6CiAgICAgICAgICAgICBzd2l0Y2ggKGluc3Qub3Bjb2Rl
KSB7CiAgICAgICAgICAgICBjYXNlIE1vdmU6CisgICAgICAgICAgICAgICAgd2lkdGggPSBBcmc6
OmNvbnNlcnZhdGl2ZVdpZHRoKHR5cGUpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBNb3ZlMzI6CisgICAgICAgICAgICAgICAgd2lkdGggPSBBcmc6OldpZHRoMzI7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNTIsNyArMTEwNCwxMCBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIEFyZzo6RlA6CiAgICAgICAgICAgICBzd2l0Y2ggKGluc3Qub3Bjb2RlKSB7CiAg
ICAgICAgICAgICBjYXNlIE1vdmVGbG9hdDoKKyAgICAgICAgICAgICAgICB3aWR0aCA9IEFyZzo6
V2lkdGgzMjsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgTW92ZURv
dWJsZToKKyAgICAgICAgICAgICAgICB3aWR0aCA9IEFyZzo6V2lkdGg2NDsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMTA2MiwyOSArMTExNyw1NiBAQCBwcml2YXRlOgogCiAgICAgICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UoaW5zdC5hcmdzLnNpemUoKSA9PSAyLCAiV2UgYXNzdW1lIGNvYWxlY2Fi
bGUgbW92ZXMgb25seSBoYXZlIHR3byBhcmd1bWVudHMgaW4gYSBmZXcgcGxhY2VzLiIpOwogCi0g
ICAgICAgIGlmICghaW5zdC5hcmdzWzBdLmlzVG1wKCkgfHwgIWluc3QuYXJnc1sxXS5pc1RtcCgp
KQorICAgICAgICByZXR1cm4gbWF5QmVDb2FsZXNjYWJsZUltcGwod2lkdGgsIGluc3QuYXJnc1sw
XSwgaW5zdC5hcmdzWzFdLCB0bXBXaWR0aCk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgbWF5
QmVDb2FsZXNjYWJsZUltcGwoCisgICAgICAgIEFyZzo6V2lkdGggd2lkdGgsIGNvbnN0IEFyZyYg
c3JjLCBjb25zdCBBcmcmIGRlc3QsIFRtcFdpZHRoKiB0bXBXaWR0aCkKKyAgICB7CisgICAgICAg
IGlmICghc3JjLmlzVG1wKCkgfHwgIWRlc3QuaXNUbXAoKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgICAgICBBU1NFUlQoaW5zdC5hcmdzWzBdLnR5cGUoKSA9PSB0eXBlKTsKLSAg
ICAgICAgQVNTRVJUKGluc3QuYXJnc1sxXS50eXBlKCkgPT0gdHlwZSk7CisgICAgICAgIGlmICgh
c3JjLmlzVHlwZSh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAv
LyBXZSBjYW4gY29hbGVzY2UgYSBNb3ZlMzIgc28gbG9uZyBhcyBlaXRoZXIgb2YgdGhlIGZvbGxv
d2luZyBob2xkczoKLSAgICAgICAgLy8gLSBUaGUgaW5wdXQgaXMgYWxyZWFkeSB6ZXJvLWZpbGxl
ZC4KLSAgICAgICAgLy8gLSBUaGUgb3V0cHV0IG9ubHkgY2FyZXMgYWJvdXQgdGhlIGxvdyAzMiBi
aXRzLgotICAgICAgICAvLwotICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIGlucHV0IHByb3BlcnR5
IHJlcXVpcmVzIGFuIGFuYWx5c2lzIG92ZXIgWkRlZidzLCBzbyBpdCdzIG9ubHkgdmFsaWQgc28g
bG9uZwotICAgICAgICAvLyBhcyB0aGUgaW5wdXQgZ2V0cyBhIHJlZ2lzdGVyLiBXZSBkb24ndCBr
bm93IGlmIHRoZSBpbnB1dCBnZXRzIGEgcmVnaXN0ZXIsIGJ1dCB3ZSBkbyBrbm93Ci0gICAgICAg
IC8vIHRoYXQgaWYgaXQgZG9lc24ndCBnZXQgYSByZWdpc3RlciB0aGVuIHdlIHdpbGwgc3RpbGwg
ZW1pdCB0aGlzIE1vdmUzMi4KLSAgICAgICAgaWYgKGluc3Qub3Bjb2RlID09IE1vdmUzMikgewot
ICAgICAgICAgICAgaWYgKCF0bXBXaWR0aCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIEFTU0VSVCh3aWR0aCA9PSBXaWR0aDMyIHx8IHdpZHRoID09IFdpZHRoNjQpOwor
ICAgICAgICBBU1NFUlQoc3JjLnR5cGUoKSA9PSBkZXN0LnR5cGUoKSk7CiAKLSAgICAgICAgICAg
IGlmICh0bXBXaWR0aC0+ZGVmV2lkdGgoaW5zdC5hcmdzWzBdLnRtcCgpKSA+IEFyZzo6V2lkdGgz
MgotICAgICAgICAgICAgICAgICYmIHRtcFdpZHRoLT51c2VXaWR0aChpbnN0LmFyZ3NbMV0udG1w
KCkpID4gQXJnOjpXaWR0aDMyKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICh0eXBlID09
IEFyZzo6RlApCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAod2lkdGgg
PT0gQXJnOjpjb25zZXJ2YXRpdmVXaWR0aCh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgICAgIGlmICghdG1wV2lkdGgpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgcmV0dXJuIHRtcFdpZHRoLT5kZWZXaWR0aChzcmMpIDw9IEFyZzo6V2lkdGgzMgor
ICAgICAgICAgICAgfHwgdG1wV2lkdGgtPnVzZVdpZHRoKGRlc3QpIDw9IEFyZzo6V2lkdGgzMjsK
KyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBtYXlCZUNvYWxlc2NhYmxlSW1wbChjb25zdCBTaHVm
ZmxlUGFpciYgcGFpciwgVG1wV2lkdGgqIHRtcFdpZHRoKQorICAgIHsKKyAgICAgICAgaWYgKCFw
YWlyLnNyYygpLmlzVG1wKCkgfHwgIXBhaXIuZHN0KCkuaXNUbXAoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICBpZiAoIXBhaXIuc3JjKCkuaXNUeXBlKHR5cGUpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIEFTU0VSVChwYWlyLndpZHRoKCkgPT0g
V2lkdGgzMiB8fCBwYWlyLndpZHRoKCkgPT0gV2lkdGg2NCk7CisgICAgICAgIEFTU0VSVChwYWly
LnNyYygpLnR5cGUoKSA9PSBwYWlyLmRzdCgpLnR5cGUoKSk7CisKKyAgICAgICAgaWYgKHR5cGUg
PT0gQXJnOjpGUCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmIChwYWly
LndpZHRoKCkgPT0gQXJnOjpjb25zZXJ2YXRpdmVXaWR0aCh0eXBlKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgICAgIGlmICghdG1wV2lkdGgpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgcmV0dXJuIHRtcFdpZHRoLT5kZWZXaWR0aChwYWlyLnNyYygpKSA8
PSBBcmc6OldpZHRoMzIKKyAgICAgICAgICAgIHx8IHRtcFdpZHRoLT51c2VXaWR0aChwYWlyLmRz
dCgpKSA8PSBBcmc6OldpZHRoMzI7CiAgICAgfQogCiAgICAgdm9pZCBzZWxlY3RTcGlsbCgpCkBA
IC0xMzc1LDkgKzE0NTcsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgewog
ICAgICAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKIAotICAg
ICAgICAgICAgICAgIC8vIFRoZSBtYXlCZUNvYWxlc2NhYmxlKCkgbWV0aG9kIHdpbGwgY2hhbmdl
IGl0cyBtaW5kIGZvciBzb21lIG9wZXJhdGlvbnMgYWZ0ZXIgd2UKLSAgICAgICAgICAgICAgICAv
LyBjb21wbGV0ZSByZWdpc3RlciBhbGxvY2F0aW9uLiBTbywgd2UgcmVjb3JkIHRoaXMgYmVmb3Jl
IHN0YXJ0aW5nLgotICAgICAgICAgICAgICAgIGJvb2wgbWF5QmVDb2FsZXNjYWJsZSA9IGFsbG9j
YXRvci5tYXlCZUNvYWxlc2NhYmxlKGluc3QpOworICAgICAgICAgICAgICAgIC8vIFRoZSBtYXlC
ZUNvYWxlc2NhYmxlTW92ZSgpIG1ldGhvZCB3aWxsIGNoYW5nZSBpdHMgbWluZCBmb3Igc29tZSBv
cGVyYXRpb25zIGFmdGVyCisgICAgICAgICAgICAgICAgLy8gd2UgY29tcGxldGUgcmVnaXN0ZXIg
YWxsb2NhdGlvbi4gU28sIHdlIHJlY29yZCB0aGlzIGJlZm9yZSBzdGFydGluZy4KKyAgICAgICAg
ICAgICAgICBib29sIG1heUJlQ29hbGVzY2FibGVNb3ZlID0gYWxsb2NhdG9yLm1heUJlQ29hbGVz
Y2FibGVNb3ZlKGluc3QpOwogCiAgICAgICAgICAgICAgICAgLy8gTW92ZTMyIGlzIGNoZWFwZXIg
aWYgd2Uga25vdyB0aGF0IGl0J3MgZXF1aXZhbGVudCB0byBhIE1vdmUuIEl0J3MKICAgICAgICAg
ICAgICAgICAvLyBlcXVpdmFsZW50IGlmIHRoZSBkZXN0aW5hdGlvbidzIGhpZ2ggYml0cyBhcmUg
bm90IG9ic2VydmFibGUgb3IgaWYgdGhlIHNvdXJjZSdzIGhpZ2gKQEAgLTEzOTAsNiArMTQ3Miwy
NSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgaW5zdC5vcGNvZGUgPSBNb3Zl
MzI7CiAgICAgICAgICAgICAgICAgfQogCisgICAgICAgICAgICAgICAgLy8gQWxsIG9mIHRoZSBz
dHVmZiB3ZSBkbyBmb3IgTW92ZXMgYWxzbyBhcHBsaWVzIHRvIFNodWZmbGVzLgorICAgICAgICAg
ICAgICAgIEJpdFZlY3RvciBjb2FsZXNjYWJsZVNodWZmbGVQYWlyczsKKyAgICAgICAgICAgICAg
ICBpZiAoaW5zdC5vcGNvZGUgPT0gU2h1ZmZsZSkgeworICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgaSArPSAzKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBBcmcgc3JjID0gaW5zdC5hcmdzW2kgKyAwXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEFyZyBkZXN0ID0gaW5zdC5hcmdzW2kgKyAxXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBpbnN0LmFyZ3NbaSArIDJdLndpZHRoKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxv
Y2F0b3IubWF5QmVDb2FsZXNjYWJsZVNodWZmbGVQYWlyKGluc3QsIGkpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvYWxlc2NhYmxlU2h1ZmZsZVBhaXJzLnNldChpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gQXJn
OjpHUCAmJiBzcmMuaXNUbXAoKSAmJiBkZXN0LmlzVG1wKCkgJiYgc3JjLmlzR1AoKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICYmIHdpZHRoID09IFdpZHRoNjQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiAobV90bXBXaWR0aC51c2VXaWR0aChkZXN0KSA8PSBBcmc6OldpZHRo
MzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV90bXBXaWR0aC5kZWZXaWR0
aChzcmMpIDw9IEFyZzo6V2lkdGgzMikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5z
dC5hcmdzW2kgKyAyXSA9IEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIGluc3QuZm9y
RWFjaFRtcEZhc3QoWyZdIChUbXAmIHRtcCkgewogICAgICAgICAgICAgICAgICAgICBpZiAodG1w
LmlzUmVnKCkgfHwgdG1wLmlzR1AoKSA9PSAodHlwZSAhPSBBcmc6OkdQKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTE0MTAsMTEgKzE1MTEsMjkgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBpZiAobWF5QmVDb2FsZXNjYWJsZSAmJiBpbnN0LmFyZ3NbMF0uaXNUbXAo
KSAmJiBpbnN0LmFyZ3NbMV0uaXNUbXAoKQogICAgICAgICAgICAgICAgICAgICAmJiBpbnN0LmFy
Z3NbMF0udG1wKCkgPT0gaW5zdC5hcmdzWzFdLnRtcCgpKQogICAgICAgICAgICAgICAgICAgICBp
bnN0ID0gSW5zdCgpOwotICAgICAgICAgICAgfQogCisgICAgICAgICAgICAgICAgaWYgKGluc3Qu
b3Bjb2RlID09IFNodWZmbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgSW5zdDo6QXJnTGlzdCBu
ZXdBcmdzOworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5z
dC5hcmdzLnNpemUoKTsgaSArPSAzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBcmcgc3Jj
ID0gaW5zdC5hcmdzW2kgKyAwXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFyZyBkZXN0ID0g
aW5zdC5hcmdzW2kgKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lk
dGggPSBpbnN0LmFyZ3NbaSArIDJdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvYWxl
c2NhYmxlU2h1ZmZsZVBhaXJzLmdldChpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYm
IHNyYy5pc1RtcCgpICYmIGRlc3QuaXNUbXAoKSAmJiBzcmMudG1wKCkgPT0gZGVzdC50bXAoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgbmV3QXJncy5hcHBlbmQoc3JjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5l
d0FyZ3MuYXBwZW5kKGRlc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3QXJncy5hcHBl
bmQoQXJnOjp3aWR0aEFyZyh3aWR0aCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpbnN0LmFyZ3MgPSBXVEZNb3ZlKG5l
d0FyZ3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAog
ICAgICAgICAgICAgLy8gUmVtb3ZlIGFsbCB0aGUgdXNlbGVzcyBtb3ZlcyB3ZSBjcmVhdGVkIGlu
IHRoaXMgYmxvY2suCiAgICAgICAgICAgICBibG9jay0+aW5zdHMoKS5yZW1vdmVBbGxNYXRjaGlu
ZyhbJl0gKGNvbnN0IEluc3QmIGluc3QpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gIWluc3Q7
CisgICAgICAgICAgICAgICAgcmV0dXJuICFpbnN0IHx8IChpbnN0Lm9wY29kZSA9PSBTaHVmZmxl
ICYmIGluc3QuYXJncy5pc0VtcHR5KCkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KICAg
ICB9CkBAIC0xNDQyLDYgKzE1NjEsNjIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5k
ZXgpIHsKICAgICAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7
CiAKKyAgICAgICAgICAgICAgICAvLyBUaGUgU2h1ZmZsZSBpbnN0cnVjdGlvbiByZXF1aXJlcyBz
b21lIHNwZWNpYWwgY2FyZS4gVGhlIFRtcFdpZHRoIGFuYWx5c2lzIHdpbGwKKyAgICAgICAgICAg
ICAgICAvLyBzYXkgdGhhdCBhIHNodWZmbGUgcGFpciBvbmx5IHN0b3JlcyAzMi1iaXRzIGludG8g
dGhlIGRlc3RpbmF0aW9uIGlmIHRoZSBzb3VyY2UKKyAgICAgICAgICAgICAgICAvLyBvbmx5IGhh
ZCAzMiBiaXRzIHdvcnRoIG9mIG5vbi16ZXJvIGJpdHMuIFNhbWUgZm9yIHRoZSBzb3VyY2U6IGl0
IHdpbGwgb25seSBjbGFpbQorICAgICAgICAgICAgICAgIC8vIHRvIHJlYWQgMzIgYml0cyBmcm9t
IHRoZSBzb3VyY2UgaWYgb25seSAzMiBiaXRzIG9mIHRoZSBkZXN0aW5hdGlvbiBhcmUgcmVhZC4g
VGhpcworICAgICAgICAgICAgICAgIC8vIGhhcHBlbnMgb24gYSBwZXItcGFpciBiYXNpcy4gV2Ug
YWxzbyBoYXBwZW4gdG8ga25vdyB0aGF0IFNodWZmbGUgYWRtaXRzIHN0YWNrCisgICAgICAgICAg
ICAgICAgLy8gZXZlcnl3aGVyZSwgd2hpY2ggbWFrZXMgc3BpbGxpbmcgZWFzaWVyLgorICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGl0J3MgT0sgZm9yIHRo
aXMgdG8gZmFsbCB0aHJvdWdoIGZvciBub3QgR1AsIHNpbmNlIHdlIGhhbmRsZSBTaHVmZmxlCisg
ICAgICAgICAgICAgICAgLy8ganVzdCBmaW5lIGlmIHdlIGRvbid0IGhhdmUgdG8gaGFuZGxlIHRo
ZSB3aWR0aCBzcGVjaWFsIGNhc2VzLgorICAgICAgICAgICAgICAgIGlmIChpbnN0Lm9wY29kZSA9
PSBTaHVmZmxlICYmIHR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCk7IGkgKz0gMykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgQXJnIHNyYyA9IGluc3QuYXJnc1tpICsgMF07CisgICAgICAgICAgICAgICAgICAgICAg
ICBBcmcgZGVzdCA9IGluc3QuYXJnc1tpICsgMV07CisgICAgICAgICAgICAgICAgICAgICAgICBB
cmc6OldpZHRoIHdpZHRoID0gaW5zdC5hcmdzW2kgKyAyXS53aWR0aCgpOworCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBUaGlzIGV4Y2x1ZGVzIGV2ZXJ5dGhpbmcgZXhjZXB0IG1lbS0+bWVt
IHBhaXJzLCB3aGljaCB3ZSBncmFjZWZ1bGx5CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBp
Z25vcmUgZG93biBiZWxvdy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3JjLmlzVHlw
ZSh0eXBlKSB8fCAhZGVzdC5pc1R5cGUodHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZvcmNlV2lkdGgzMklm
RGlkU3BpbGwgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGlkU3BpbGwg
PSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gR1AgJiYgd2lk
dGggPT0gQXJnOjpXaWR0aDY0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChz
cmMuaXNUbXAoKSAmJiBtX3RtcFdpZHRoLnVzZVdpZHRoKGRlc3QudG1wKCkpIDw9IEFyZzo6V2lk
dGgzMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGRlc3QuaXNUbXAoKSAm
JiBtX3RtcFdpZHRoLmRlZldpZHRoKHNyYy50bXAoKSkgPD0gQXJnOjpXaWR0aDMyKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VXaWR0aDMySWZEaWRTcGlsbCA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1
dG8gaGFuZGxlVG1wID0gWyZdIChBcmcmIGFyZykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghYXJnLmlzVG1wKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnLmlzUmVnKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhdXRvIHN0YWNrU2xvdEVudHJ5ID0gc3RhY2tTbG90cy5maW5kKGFyZy50bXAoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrU2xvdEVudHJ5ID09IHN0YWNr
U2xvdHMuZW5kKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1Nsb3RFbnRyeS0+dmFsdWUtPmVuc3VyZVNp
emUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlV2lkdGgzMklmRGlkU3Bp
bGwgPyA0IDogQXJnOjpieXRlcyh3aWR0aCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFyZyA9IEFyZzo6c3RhY2soc3RhY2tTbG90RW50cnktPnZhbHVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkaWRTcGlsbCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBoYW5k
bGVUbXAoc3JjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVRtcChkZXN0KTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpZFNwaWxsICYmIGZvcmNlV2lkdGgzMklmRGlk
U3BpbGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBBcmc6OldpZHRoMzI7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3QuYXJnc1tpICsgMF0gPSBzcmM7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpbnN0LmFyZ3NbaSArIDFdID0gZGVzdDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGluc3QuYXJnc1tpICsgMl0gPSBBcmc6OndpZHRoQXJnKHdpZHRoKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gVGhlIFRt
cFdpZHRoIGFuYWx5c2lzIHdpbGwgc2F5IHRoYXQgYSBNb3ZlIG9ubHkgc3RvcmVzIDMyIGJpdHMg
aW50byB0aGUgZGVzdGluYXRpb24sCiAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHNvdXJjZSBv
bmx5IGhhZCAzMiBiaXRzIHdvcnRoIG9mIG5vbi16ZXJvIGJpdHMuIFNhbWUgZm9yIHRoZSBzb3Vy
Y2U6IGl0IHdpbGwKICAgICAgICAgICAgICAgICAvLyBvbmx5IGNsYWltIHRvIHJlYWQgMzIgYml0
cyBmcm9tIHRoZSBzb3VyY2UgaWYgb25seSAzMiBiaXRzIG9mIHRoZSBkZXN0aW5hdGlvbiBhcmUK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU2h1ZmZsZVBhaXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU2h1ZmZsZVBhaXIu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTaHVm
ZmxlUGFpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQWlyU2h1ZmZsZVBhaXIuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBTaHVmZmxl
UGFpcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCh3aWR0
aCgpLCAiOiIsIHNyYygpLCAiPT4iLCBkc3QoKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU2h1ZmZsZVBhaXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNodWZmbGVQYWlyLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNodWZmbGVQYWlyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEFpclNodWZmbGVQYWlyX2gKKyNkZWZpbmUgQWlyU2h1ZmZs
ZVBhaXJfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFNo
dWZmbGVQYWlyIHsKK3B1YmxpYzoKKyAgICBTaHVmZmxlUGFpcigpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBTaHVmZmxlUGFpcihjb25zdCBBcmcmIHNyYywgY29uc3QgQXJnJiBkc3QsIEFyZzo6
V2lkdGggd2lkdGgpCisgICAgICAgIDogbV9zcmMoc3JjKQorICAgICAgICAsIG1fZHN0KGRzdCkK
KyAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBBcmcm
IHNyYygpIGNvbnN0IHsgcmV0dXJuIG1fc3JjOyB9CisgICAgY29uc3QgQXJnJiBkc3QoKSBjb25z
dCB7IHJldHVybiBtX2RzdDsgfQorCisgICAgLy8gVGhlIHdpZHRoIGRldGVybWluZXMgdGhlIGtp
bmQgb2YgbW92ZSB3ZSBkby4gWW91IGNhbiBvbmx5IGNob29zZSBXaWR0aDMyIG9yIFdpZHRoNjQg
cmlnaHQgbm93LgorICAgIC8vIEZvciBHUCwgaXQgcGlja3MgYmV0d2VlbiBNb3ZlMzIgYW5kIE1v
dmUuIEZvciBGUCwgaXQgcGlja3MgYmV0d2VlbiBNb3ZlRmxvYXQgYW5kIE1vdmVEb3VibGUuCisg
ICAgQXJnOjpXaWR0aCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKworICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBBcmcgbV9z
cmM7CisgICAgQXJnIG1fZHN0OworICAgIEFyZzo6V2lkdGggbV93aWR0aCB7IEFyZzo6V2lkdGg4
IH07Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyU2h1ZmZsZVBhaXJfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272628</attachid>
            <date>2016-03-01 20:28:14 -0800</date>
            <delta_ts>2016-03-01 20:28:14 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>28251</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk3NDEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBA
CisyMDE2LTAzLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
TmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIChPT1BTISkuCisgICAgICAgIE5lZWQgdGhlIGJ1ZyBV
UkwgKE9PUFMhKS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIGIzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpT
aHVmZmxlUGFpcjo6U2h1ZmZsZVBhaXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpTaHVmZmxlUGFpcjo6c3JjKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U2h1
ZmZsZVBhaXI6OmRzdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlNodWZmbGVQ
YWlyOjp3aWR0aCk6IERlbGV0ZWQuCisgICAgICAgICogYjMvYWlyL0Fpckluc3QuY3BwOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0OjphZGRTaHVmZmxlUGFpcik6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okluc3Q6Omhhc0FyZ0VmZmVjdHMpOgorICAgICAgICAqIGIzL2Fpci9BaXJJbnN0
Lmg6CisgICAgICAgICogYjMvYWlyL0Fpckluc3RJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6Okluc3Q6OmZvckVhY2hEZWZXaXRoRXh0cmFDbG9iYmVyZWRSZWdzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6SW5zdDo6Zm9yRWFjaFNodWZmbGVQYWlyKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6SW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyk6CisgICAgICAgICogYjMvYWlyL0Fp
ckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyU2h1
ZmZsZVBhaXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U2h1ZmZsZVBhaXI6
OmR1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJTaHVmZmxlUGFpci5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6U2h1ZmZsZVBhaXI6OlNodWZmbGVQYWlyKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6U2h1ZmZsZVBhaXI6OnNyYyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlNo
dWZmbGVQYWlyOjpkc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTaHVmZmxlUGFpcjo6d2lk
dGgpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisKIDIwMTYtMDMtMDEgIFNrYWNo
a292IE9sZWtzYW5kciAgPGdza2FjaGtvdkBnbWFpbC5jb20+CiAKICAgICAgICAgW0VTNl0gQXJy
b3cgZnVuY3Rpb24uIFNvbWUgbm90IHVzZWQgYnl0ZSBjb2RlIGlzIGVtaXRlZApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAkocmV2aXNpb24g
MTk3NDEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJBaXJBcmcuaCIK
ICNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSAiQWlyU2h1ZmZsZVBhaXIuaCIKICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewpAQCAt
MzgsMzQgKzM5LDYgQEAgY2xhc3MgVmFsdWU7CiAKIG5hbWVzcGFjZSBBaXIgewogCi1jbGFzcyBT
aHVmZmxlUGFpciB7Ci1wdWJsaWM6Ci0gICAgU2h1ZmZsZVBhaXIoKQotICAgIHsKLSAgICB9Ci0g
ICAgCi0gICAgU2h1ZmZsZVBhaXIoY29uc3QgQXJnJiBzcmMsIGNvbnN0IEFyZyYgZHN0LCBBcmc6
OldpZHRoIHdpZHRoKQotICAgICAgICA6IG1fc3JjKHNyYykKLSAgICAgICAgLCBtX2RzdChkc3Qp
Ci0gICAgICAgICwgbV93aWR0aCh3aWR0aCkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgQXJn
JiBzcmMoKSBjb25zdCB7IHJldHVybiBtX3NyYzsgfQotICAgIGNvbnN0IEFyZyYgZHN0KCkgY29u
c3QgeyByZXR1cm4gbV9kc3Q7IH0KLQotICAgIC8vIFRoZSB3aWR0aCBkZXRlcm1pbmVzIHRoZSBr
aW5kIG9mIG1vdmUgd2UgZG8uIFlvdSBjYW4gb25seSBjaG9vc2UgV2lkdGgzMiBvciBXaWR0aDY0
IHJpZ2h0IG5vdy4KLSAgICAvLyBGb3IgR1AsIGl0IHBpY2tzIGJldHdlZW4gTW92ZTMyIGFuZCBN
b3ZlLiBGb3IgRlAsIGl0IHBpY2tzIGJldHdlZW4gTW92ZUZsb2F0IGFuZCBNb3ZlRG91YmxlLgot
ICAgIEFyZzo6V2lkdGggd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9Ci0KLSAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICAKLXByaXZhdGU6Ci0gICAgQXJnIG1f
c3JjOwotICAgIEFyZyBtX2RzdDsKLSAgICBBcmc6OldpZHRoIG1fd2lkdGggeyBBcmc6OldpZHRo
OCB9OwotfTsKLQogLy8gQ3JlYXRlIGEgU2h1ZmZsZSBpbnN0cnVjdGlvbi4KIEluc3QgY3JlYXRl
U2h1ZmZsZShWYWx1ZSogb3JpZ2luLCBjb25zdCBWZWN0b3I8U2h1ZmZsZVBhaXI+Jik7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkocmV2aXNpb24gMTk3
NDEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNiArMzQsMTggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgewogCit2b2lkIEluc3Q6OmFkZFNodWZmbGVQYWlyKGNvbnN0IFNo
dWZmbGVQYWlyJiBwYWlyKQoreworICAgIGlmIChvcGNvZGUgPT0gTm9wKQorICAgICAgICBvcGNv
ZGUgPSBTaHVmZmxlOworICAgIGVsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQob3Bjb2RlID09
IFNodWZmbGUpOworCisgICAgYXJncy5hcHBlbmQocGFpci5zcmMoKSk7CisgICAgYXJncy5hcHBl
bmQocGFpci5kc3QoKSk7CisgICAgYXJncy5hcHBlbmQoQXJnOjp3aWR0aEFyZyhwYWlyLndpZHRo
KCkpKTsKK30KKwogYm9vbCBJbnN0OjpoYXNBcmdFZmZlY3RzKCkKIHsKICAgICBib29sIHJlc3Vs
dCA9IGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHJl
dmlzaW9uIDE5NzQxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJBaXJBcmcuaCIK
ICNpbmNsdWRlICJBaXJPcGNvZGUuaCIKKyNpbmNsdWRlICJBaXJTaHVmZmxlUGFpci5oIgogI2lu
Y2x1ZGUgIkNDYWxsSGVscGVycy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE0Niw2ICsxNDcs
MTQgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5j
dG9yPgogICAgIHN0YXRpYyB2b2lkIGZvckVhY2hEZWZXaXRoRXh0cmFDbG9iYmVyZWRSZWdzKElu
c3QqIHByZXZJbnN0LCBJbnN0KiBuZXh0SW5zdCwgY29uc3QgRnVuY3RvciYpOwogCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBib29sIGZvckVhY2hTaHVmZmxlUGFpcihjb25z
dCBGdW5jdG9yJik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTaHVmZmxlQ2FsbGJhY2ssIHR5
cGVuYW1lIEZhbGxiYWNrQ2FsbGJhY2s+CisgICAgdm9pZCBmb3JFYWNoU2h1ZmZsZVBhaXIoY29u
c3QgU2h1ZmZsZUNhbGxiYWNrJiwgY29uc3QgRmFsbGJhY2tDYWxsYmFjayYpOworCisgICAgdm9p
ZCBhZGRTaHVmZmxlUGFpcihjb25zdCBTaHVmZmxlUGFpciYpOworCiAgICAgLy8gVXNlIHRoaXMg
dG8gcmVwb3J0IHdoaWNoIHJlZ2lzdGVycyBhcmUgbGl2ZS4gVGhpcyBzaG91bGQgYmUgZG9uZSBq
dXN0IGJlZm9yZSBjb2RlZ2VuLiBOb3RlCiAgICAgLy8gdGhhdCBmb3IgZWZmaWNpZW5jeSwgcmVw
b3J0VXNlZFJlZ2lzdGVycygpIG9ubHkgd29ya3MgZm9yIHRoZSBQYXRjaCBvcGNvZGUuCiAgICAg
dm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyU2V0Jik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCShyZXZpc2lvbiAx
OTc0MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE1Myw2ICsxNTMsNDMgQEAgaW5saW5lIHZvaWQgSW5zdDo6Zm9y
RWFjaERlZldpdGhFeHRyYUNsbwogICAgIH0KIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KK2Jvb2wgSW5zdDo6Zm9yRWFjaFNodWZmbGVQYWlyKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
Cit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIE1vdmU6CisgICAgICAgIGZ1bmN0
b3IoU2h1ZmZsZVBhaXIoYXJnc1swXSwgYXJnc1sxXSwgQXJnOjpjb25zZXJ2YXRpdmVXaWR0aChB
cmc6OkdQKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIE1vdmUzMjoKKyAgICAg
ICAgZnVuY3RvcihTaHVmZmxlUGFpcihhcmdzWzBdLCBhcmdzWzFdLCBBcmc6OldpZHRoMzIpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBNb3ZlRG91YmxlOgorICAgICAgICBmdW5j
dG9yKFNodWZmbGVQYWlyKGFyZ3NbMF0sIGFyZ3NbMV0sIEFyZzo6V2lkdGg2NCkpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIE1vdmVGbG9hdDoKKyAgICAgICAgZnVuY3RvcihTaHVm
ZmxlUGFpcihhcmdzWzBdLCBhcmdzWzFdLCBBcmc6OldpZHRoMzIpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgY2FzZSBTaHVmZmxlOgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
ICsgMiA8IGFyZ3Muc2l6ZSgpOyBpICs9IDMpIHsKKyAgICAgICAgICAgIEFyZyBzcmMgPSBhcmdz
W2kgKyAwXTsKKyAgICAgICAgICAgIEFyZyBkZXN0ID0gYXJnc1tpICsgMV07CisgICAgICAgICAg
ICBBcmcgd2lkdGggPSBhcmdzW2kgKyAyXTsKKyAgICAgICAgICAgIGZ1bmN0b3Ioc3JjLCBkZXN0
LCB3aWR0aC53aWR0aCgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBTaHVmZmxlQ2FsbGJhY2ssIHR5cGVuYW1lIEZhbGxiYWNrQ2FsbGJhY2s+Cit2b2lkIElu
c3Q6OmZvckVhY2hTaHVmZmxlUGFpcigKKyAgICBjb25zdCBTaHVmZmxlQ2FsbGJhY2smIHNodWZm
bGVDYWxsYmFjaywgY29uc3QgRmFsbGJhY2tDYWxsYmFjayYgZmFsbGJhY2tDYWxsYmFjaykKK3sK
KyAgICBpZiAoIWZvckVhY2hTaHVmZmxlUGFpcihzaHVmZmxlQ2FsbGJhY2spKQorICAgICAgICBm
YWxsYmFja0NhbGxiYWNrKCk7Cit9CisKIGlubGluZSB2b2lkIEluc3Q6OnJlcG9ydFVzZWRSZWdp
c3RlcnMoY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCiB7CiAgICAgQVNTRVJUKG9w
Y29kZSA9PSBQYXRjaCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0
ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAkocmV2aXNp
b24gMTk3NDEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJl
Z2lzdGVyQ29hbGVzY2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1MSw5ICs3NTEsMjUgQEAg
cHVibGljOgogICAgIC8vIFRoaXMgdGVsbHMgeW91IGlmIGEgTW92ZSB3aWxsIGJlIGNvYWxlc2Nh
YmxlIGlmIHRoZSBzcmMgYW5kIGRzdCBlbmQgdXAgbWF0Y2hpbmcuIFRoaXMgbWV0aG9kCiAgICAg
Ly8gcmVsaWVzIG9uIGFuIGFuYWx5c2lzIHRoYXQgaXMgaW52YWxpZGF0ZWQgYnkgcmVnaXN0ZXIg
YWxsb2NhdGlvbiwgc28geW91IGl0J3Mgb25seSBtZWFuaW5nZnVsIHRvCiAgICAgLy8gY2FsbCB0
aGlzICpiZWZvcmUqIHJlcGxhY2luZyB0aGUgVG1wJ3MgaW4gdGhpcyBJbnN0IHdpdGggcmVnaXN0
ZXJzIG9yIHNwaWxsIHNsb3RzLgotICAgIGJvb2wgbWF5QmVDb2FsZXNjYWJsZShjb25zdCBJbnN0
JiBpbnN0KSBjb25zdAorICAgIGJvb2wgbWF5QmVDb2FsZXNjYWJsZU1vdmUoY29uc3QgSW5zdCYg
aW5zdCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtYXlCZUNvYWxlc2NhYmxlSW1wbChp
bnN0LCAmbV90bXBXaWR0aCk7CisgICAgICAgIHJldHVybiBtYXlCZUNvYWxlc2NhYmxlTW92ZUlt
cGwoaW5zdCwgJm1fdG1wV2lkdGgpOworICAgIH0KKworICAgIGJvb2wgbWF5QmVDb2FsZXNjYWJs
ZVNodWZmbGVQYWlyKGNvbnN0IEluc3QmIGluc3QsIHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1heUJlQ29hbGVzY2FibGUoCisgICAgICAgICAgICBpbnN0LmFy
Z3NbaW5kZXggKyAyXS53aWR0aCgpLCBpbnN0LmFyZ3NbaW5kZXggKyAwXSwgaW5zdC5hcmdzW2lu
ZGV4ICsgMV0pOworICAgIH0KKworICAgIGJvb2wgbWF5QmVDb2FsZXNjYWJsZShBcmc6OldpZHRo
IHdpZHRoLCBjb25zdCBBcmcmIHNyYywgY29uc3QgQXJnJiBkZXN0KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1heUJlQ29hbGVzY2FibGVJbXBsKHdpZHRoLCBzcmMsIGRlc3QsICZtX3RtcFdpZHRo
KTsKKyAgICB9CisKKyAgICBib29sIG1heUJlQ29hbGVzY2FibGUoY29uc3QgU2h1ZmZsZVBhaXIm
IHBhaXIpCisgICAgeworICAgICAgICByZXR1cm4gbWF5QmVDb2FsZXNjYWJsZUltcGwocGFpciwg
Jm1fdG1wV2lkdGgpOwogICAgIH0KIAogICAgIGJvb2wgaXNVc2VsZXNzTW92ZShjb25zdCBJbnN0
JiBpbnN0KSBjb25zdApAQCAtNzYxLDYgKzc3NywyMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBtYXlCZUNvYWxlc2NhYmxlSW1wbChpbnN0LCBudWxscHRyKSAmJiBpbnN0LmFyZ3NbMF0udG1w
KCkgPT0gaW5zdC5hcmdzWzFdLnRtcCgpOwogICAgIH0KIAorICAgIGJvb2wgaXNVc2VsZXNzU2h1
ZmZsZVBhaXIoY29uc3QgSW5zdCYgaW5zdCwgdW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gaXNVc2VsZXNzTW92ZSgKKyAgICAgICAgICAgIGluc3QuYXJnc1tpbmRl
eCArIDJdLndpZHRoKCksIGluc3QuYXJnc1tpbmRleCArIDBdLCBpbnN0LmFyZ3NbaW5kZXggKyAx
XSk7CisgICAgfQorCisgICAgYm9vbCBpc1VzZWxlc3NNb3ZlKEFyZzo6V2lkdGggd2lkdGgsIGNv
bnN0IEFyZyYgc3JjLCBjb25zdCBBcmcmIGRlc3QpCisgICAgeworICAgICAgICByZXR1cm4gbWF5
QmVDb2FsZXNjYWJsZUltcGwod2lkdGgsIHNyYywgZGVzdCwgbnVsbHB0cikgJiYgc3JjLnRtcCgp
ID09IGRlc3QudG1wKCk7CisgICAgfQorCisgICAgYm9vbCBpc1VzZWxlc3NTaHVmZmxlUGFpcihj
b25zdCBTaHVmZmxlUGFpciYgcGFpcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtYXlC
ZUNvYWxlc2NhYmxlSW1wbChwYWlyLCBudWxscHRyKSAmJiBwYWlyLnNyYygpLnRtcCgpID09IHBh
aXIuZHN0KCkudG1wKCk7CisgICAgfQorCiAgICAgVG1wIGdldEFsaWFzV2hlblNwaWxsaW5nKFRt
cCB0bXApIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX3NwaWxs
ZWRUbXBzLmlzRW1wdHkoKSwgIlRoaXMgZnVuY3Rpb24gaXMgb25seSB2YWxpZCBmb3IgY29hbGVz
Y2luZyBkdXJpbmcgc3BpbGxpbmcuIik7CkBAIC05NDEsNDcgKzk3Myw2MiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogCi0gICAgICAgIGlmIChw
cmV2SW5zdCAmJiBtYXlCZUNvYWxlc2NhYmxlKCpwcmV2SW5zdCkpIHsKLSAgICAgICAgICAgIC8v
IFdlIGRvIG5vdCB3YW50IHRoZSBVc2UoKSBvZiB0aGlzIG1vdmUgdG8gaW50ZXJmZXJlIHdpdGgg
dGhlIERlZigpLCBldmVuIGlmIGl0IGlzIGxpdmUKLSAgICAgICAgICAgIC8vIGFmdGVyIHRoZSBN
b3ZlLiBJZiB3ZSB3ZXJlIHRvIGFkZCB0aGUgaW50ZXJmZXJlbmNlIGVkZ2UsIGl0IHdvdWxkIGJl
IGltcG9zc2libGUgdG8KLSAgICAgICAgICAgIC8vIGNvYWxlc2NlIHRoZSBNb3ZlIGV2ZW4gaWYg
dGhlIHR3byBUbXAgbmV2ZXIgaW50ZXJmZXJlIGFueXdoZXJlLgotICAgICAgICAgICAgVG1wIGRl
ZlRtcDsKLSAgICAgICAgICAgIFRtcCB1c2VUbXA7Ci0gICAgICAgICAgICBwcmV2SW5zdC0+Zm9y
RWFjaFRtcChbJmRlZlRtcCwgJnVzZVRtcF0gKFRtcCYgYXJnVG1wLCBBcmc6OlJvbGUgcm9sZSwg
QXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRl
RGVmKHJvbGUpKQotICAgICAgICAgICAgICAgICAgICBkZWZUbXAgPSBhcmdUbXA7Ci0gICAgICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChBcmc6OmlzRWFybHlV
c2Uocm9sZSkpOwotICAgICAgICAgICAgICAgICAgICB1c2VUbXAgPSBhcmdUbXA7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBBU1NFUlQoZGVmVG1wKTsK
LSAgICAgICAgICAgIEFTU0VSVCh1c2VUbXApOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBuZXh0
TW92ZUluZGV4ID0gbV9jb2FsZXNjaW5nQ2FuZGlkYXRlcy5zaXplKCk7Ci0gICAgICAgICAgICBt
X2NvYWxlc2NpbmdDYW5kaWRhdGVzLmFwcGVuZCh7IEFic29sdXRlVG1wTWFwcGVyPHR5cGU+Ojph
YnNvbHV0ZUluZGV4KHVzZVRtcCksIEFic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUlu
ZGV4KGRlZlRtcCkgfSk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIG5ld0luZGV4SW5Xb3JrbGlz
dCA9IG1fd29ya2xpc3RNb3Zlcy5hZGRNb3ZlKCk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VE
KG5ld0luZGV4SW5Xb3JrbGlzdCwgbmV3SW5kZXhJbldvcmtsaXN0ID09IG5leHRNb3ZlSW5kZXgp
OworICAgICAgICBpZiAocHJldkluc3QpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgY29kZSBwYXRo
IGF0dGVtcHRzIHRvIGhhbmRsZSBjb2FsZXNjYWJsZSBpbnN0cnVjdGlvbnMuIEl0IGhhbmRsZXMg
Ym90aCBNb3ZlcyBhbmQKKyAgICAgICAgICAgIC8vIFNodWZmbGVzLiBUaGUgdHJpY2sgaXMgdG8g
ZW5zdXJlIHRoYXQgdGhlIGRlZmluaXRpb25zIGluIGEgTW92ZSBkb24ndCBpbnRlcmZlcmUgd2l0
aAorICAgICAgICAgICAgLy8gdGhlIHNvdXJjZXMsIHNvIGlmIHdlIGRldGVjdCBhIGNvYWxlc2Np
bmcgb3Bwb3J0dW5pdHkgd2UgYWxzbyBhdm9pZCB0YWtpbmcgdGhlIHVzdWFsCisgICAgICAgICAg
ICAvLyBpbnRlcmZlcmVuY2UgcGF0aCBieSBkb2luZyB0aGUgaW50ZXJmZXJlbmNlIGNhbGN1bGF0
aW9uIG1hbnVhbGx5IGFuZCByZXR1cm5pbmcgZWFybHkuCisKKyAgICAgICAgICAgIGF1dG8gYWRk
Q29hbGVzY2FibGVNb3ZlID0gWyZdIChUbXAgc3JjVG1wLCBUbXAgZGVzdFRtcCkgeworICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHNyY0luZGV4ID0gQWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46OmFi
c29sdXRlSW5kZXgoc3JjVG1wKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBkZXN0SW5kZXgg
PSBBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChkZXN0VG1wKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBuZXh0TW92ZUluZGV4ID0gbV9j
b2FsZXNjaW5nQ2FuZGlkYXRlcy5zaXplKCk7CisgICAgICAgICAgICAgICAgbV9jb2FsZXNjaW5n
Q2FuZGlkYXRlcy5hcHBlbmQoeyBzcmNJbmRleCwgZGVzdEluZGV4IH0pOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIG5ld0luZGV4SW5Xb3JrbGlzdCA9IG1fd29y
a2xpc3RNb3Zlcy5hZGRNb3ZlKCk7CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChuZXdJ
bmRleEluV29ya2xpc3QsIG5ld0luZGV4SW5Xb3JrbGlzdCA9PSBuZXh0TW92ZUluZGV4KTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBU1NFUlQobmV4dE1vdmVJbmRleCA8PSBt
X2FjdGl2ZU1vdmVzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgbV9hY3RpdmVNb3Zlcy5lbnN1
cmVTaXplKG5leHRNb3ZlSW5kZXggKyAxKTsKIAotICAgICAgICAgICAgQVNTRVJUKG5leHRNb3Zl
SW5kZXggPD0gbV9hY3RpdmVNb3Zlcy5zaXplKCkpOwotICAgICAgICAgICAgbV9hY3RpdmVNb3Zl
cy5lbnN1cmVTaXplKG5leHRNb3ZlSW5kZXggKyAxKTsKKyAgICAgICAgICAgICAgICBtX21vdmVM
aXN0W3NyY0luZGV4XS5hZGQobmV4dE1vdmVJbmRleCk7CisgICAgICAgICAgICAgICAgbV9tb3Zl
TGlzdFtkZXN0SW5kZXhdLmFkZChuZXh0TW92ZUluZGV4KTsKKyAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgZGlkSGFuZGxlID0gcHJldkluc3QtPmZvckVhY2hT
aHVmZmxlUGFpcigKKyAgICAgICAgICAgICAgICBbJl0gKGNvbnN0IFNodWZmbGVQYWlyJiBwYWly
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXlCZUNvYWxlc2NhYmxlKHBhaXIpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBUbXAgc3JjVG1wID0gcGFpci5zcmMoKS50bXAoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFRtcCBkc3RUbXAgPSBwYWlyLmRzdCgpLnRtcCgpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICBhZGRDb2FsZXNjYWJsZU1vdmUoc3JjVG1wLCBkc3RUbXAp
OworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb25zZXJ2YXRpdmVseSwgZGVzdCB3b3Vs
ZCBpbnRlcmZlcmUgd2l0aCBldmVyeXRoaW5nIGxpdmUuIEJ1dCBpbiB0aGlzCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBjYXNlIGl0IG9ubHkgaW50ZXJmZXJlcyB3aXRoIGFsbCBsaXZlIHZh
cmlhYmxlcyBleGNlcHQgc3JjVG1wLgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChUbXAg
bGl2ZVRtcCA6IGxvY2FsQ2FsYy5saXZlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobGl2ZVRtcCAhPSBzcmNUbXApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFkZEVkZ2UoZHN0VG1wLCBsaXZlVG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBmb3IgKGNvbnN0IEFyZyYgYXJnIDogcHJldkluc3QtPmFyZ3MpIHsKLSAgICAg
ICAgICAgICAgICBhdXRvJiBsaXN0ID0gbV9tb3ZlTGlzdFtBYnNvbHV0ZVRtcE1hcHBlcjx0eXBl
Pjo6YWJzb2x1dGVJbmRleChhcmcudG1wKCkpXTsKLSAgICAgICAgICAgICAgICBsaXN0LmFkZChu
ZXh0TW92ZUluZGV4KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gSWYg
dGhlIGRlc3RpbmF0aW9uIGlzIGEgdG1wLCBpdCBuZWVkcyB0byBpbnRlcmZlcmUgd2l0aCBldmVy
eXRoaW5nIGxpdmUuCisgICAgICAgICAgICAgICAgICAgIGlmIChkc3QuaXNUbXAoKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChUbXAgbGl2ZVRtcCA6IGxvY2FsQ2FsYy5saXZlKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWRnZShwYWlyLmRzdCgpLnRtcCgpLCBs
aXZlVG1wKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOwogCi0g
ICAgICAgICAgICBmb3IgKGNvbnN0IFRtcCYgbGl2ZVRtcCA6IGxvY2FsQ2FsYy5saXZlKCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAobGl2ZVRtcCAhPSB1c2VUbXApCi0gICAgICAgICAgICAgICAg
ICAgIGFkZEVkZ2UoZGVmVG1wLCBsaXZlVG1wKTsKKyAgICAgICAgICAgIGlmIChkaWRIYW5kbGUp
IHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBpbnN0cnVjdGlvbiBjb3VsZCBoYXZlIGVh
cmx5IGNsb2JiZXJzIG9yIGVhcmx5IGRlZidzLiBDb25zaWRlciB0aG9zZQorICAgICAgICAgICAg
ICAgIC8vIG5vdy4KKyAgICAgICAgICAgICAgICBhZGRFZGdlcyhudWxscHRyLCBuZXh0SW5zdCwg
bG9jYWxDYWxjLmxpdmUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQorICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIFRoZSBuZXh0IGluc3RydWN0aW9uIGNvdWxk
IGhhdmUgZWFybHkgY2xvYmJlcnMgb3IgZWFybHkgZGVmJ3MuIFdlIG5lZWQgdG8gY29uc2lkZXIK
LSAgICAgICAgICAgIC8vIHRob3NlIG5vdy4KLSAgICAgICAgICAgIGFkZEVkZ2VzKG51bGxwdHIs
IG5leHRJbnN0LCBsb2NhbENhbGMubGl2ZSgpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBhZGRFZGdlcyhwcmV2SW5zdCwgbmV4dEluc3QsIGxvY2FsQ2FsYy5saXZlKCkpOworICAgICAg
ICBhZGRFZGdlcyhwcmV2SW5zdCwgbmV4dEluc3QsIGxvY2FsQ2FsYy5saXZlKCkpOwogICAgIH0K
IAogICAgIHZvaWQgYnVpbGRMb3dQcmlvcml0eU1vdmVMaXN0KCkKQEAgLTEwMzcsMTMgKzEwODQs
MTggQEAgcHJpdmF0ZToKIAogICAgIC8vIENhbGxpbmcgdGhpcyB3aXRob3V0IGEgdG1wV2lkdGgg
d2lsbCBwZXJmb3JtIGEgbW9yZSBjb25zZXJ2YXRpdmUgY29hbGVzY2luZyBhbmFseXNpcyB0aGF0
IGFzc3VtZXMKICAgICAvLyB0aGF0IE1vdmUzMidzIGFyZSBub3QgY29hbGVzY2FibGUuCi0gICAg
c3RhdGljIGJvb2wgbWF5QmVDb2FsZXNjYWJsZUltcGwoY29uc3QgSW5zdCYgaW5zdCwgVG1wV2lk
dGgqIHRtcFdpZHRoKQorICAgIHN0YXRpYyBib29sIG1heUJlQ29hbGVzY2FibGVNb3ZlSW1wbChj
b25zdCBJbnN0JiBpbnN0LCBUbXBXaWR0aCogdG1wV2lkdGgpCiAgICAgeworICAgICAgICBBcmc6
OldpZHRoIHdpZHRoOworICAgICAgICAKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAg
IGNhc2UgQXJnOjpHUDoKICAgICAgICAgICAgIHN3aXRjaCAoaW5zdC5vcGNvZGUpIHsKICAgICAg
ICAgICAgIGNhc2UgTW92ZToKKyAgICAgICAgICAgICAgICB3aWR0aCA9IEFyZzo6Y29uc2VydmF0
aXZlV2lkdGgodHlwZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IE1vdmUzMjoKKyAgICAgICAgICAgICAgICB3aWR0aCA9IEFyZzo6V2lkdGgzMjsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMTA1Miw3ICsxMTA0LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
QXJnOjpGUDoKICAgICAgICAgICAgIHN3aXRjaCAoaW5zdC5vcGNvZGUpIHsKICAgICAgICAgICAg
IGNhc2UgTW92ZUZsb2F0OgorICAgICAgICAgICAgICAgIHdpZHRoID0gQXJnOjpXaWR0aDMyOwor
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBNb3ZlRG91YmxlOgorICAg
ICAgICAgICAgICAgIHdpZHRoID0gQXJnOjpXaWR0aDY0OwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xMDYyLDI5ICsxMTE3LDU2IEBAIHByaXZhdGU6CiAKICAgICAgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRShpbnN0LmFyZ3Muc2l6ZSgpID09IDIsICJXZSBhc3N1bWUgY29hbGVjYWJsZSBtb3ZlcyBv
bmx5IGhhdmUgdHdvIGFyZ3VtZW50cyBpbiBhIGZldyBwbGFjZXMuIik7CiAKLSAgICAgICAgaWYg
KCFpbnN0LmFyZ3NbMF0uaXNUbXAoKSB8fCAhaW5zdC5hcmdzWzFdLmlzVG1wKCkpCisgICAgICAg
IHJldHVybiBtYXlCZUNvYWxlc2NhYmxlSW1wbCh3aWR0aCwgaW5zdC5hcmdzWzBdLCBpbnN0LmFy
Z3NbMV0sIHRtcFdpZHRoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBtYXlCZUNvYWxlc2Nh
YmxlSW1wbCgKKyAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgQXJnJiBzcmMsIGNvbnN0
IEFyZyYgZGVzdCwgVG1wV2lkdGgqIHRtcFdpZHRoKQorICAgIHsKKyAgICAgICAgaWYgKCFzcmMu
aXNUbXAoKSB8fCAhZGVzdC5pc1RtcCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIEFTU0VSVChpbnN0LmFyZ3NbMF0udHlwZSgpID09IHR5cGUpOwotICAgICAgICBBU1NF
UlQoaW5zdC5hcmdzWzFdLnR5cGUoKSA9PSB0eXBlKTsKKyAgICAgICAgaWYgKCFzcmMuaXNUeXBl
KHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIC8vIFdlIGNhbiBj
b2FsZXNjZSBhIE1vdmUzMiBzbyBsb25nIGFzIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nIGhvbGRz
OgotICAgICAgICAvLyAtIFRoZSBpbnB1dCBpcyBhbHJlYWR5IHplcm8tZmlsbGVkLgotICAgICAg
ICAvLyAtIFRoZSBvdXRwdXQgb25seSBjYXJlcyBhYm91dCB0aGUgbG93IDMyIGJpdHMuCi0gICAg
ICAgIC8vCi0gICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgaW5wdXQgcHJvcGVydHkgcmVxdWlyZXMg
YW4gYW5hbHlzaXMgb3ZlciBaRGVmJ3MsIHNvIGl0J3Mgb25seSB2YWxpZCBzbyBsb25nCi0gICAg
ICAgIC8vIGFzIHRoZSBpbnB1dCBnZXRzIGEgcmVnaXN0ZXIuIFdlIGRvbid0IGtub3cgaWYgdGhl
IGlucHV0IGdldHMgYSByZWdpc3RlciwgYnV0IHdlIGRvIGtub3cKLSAgICAgICAgLy8gdGhhdCBp
ZiBpdCBkb2Vzbid0IGdldCBhIHJlZ2lzdGVyIHRoZW4gd2Ugd2lsbCBzdGlsbCBlbWl0IHRoaXMg
TW92ZTMyLgotICAgICAgICBpZiAoaW5zdC5vcGNvZGUgPT0gTW92ZTMyKSB7Ci0gICAgICAgICAg
ICBpZiAoIXRtcFdpZHRoKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
QVNTRVJUKHdpZHRoID09IFdpZHRoMzIgfHwgd2lkdGggPT0gV2lkdGg2NCk7CisgICAgICAgIEFT
U0VSVChzcmMudHlwZSgpID09IGRlc3QudHlwZSgpKTsKIAotICAgICAgICAgICAgaWYgKHRtcFdp
ZHRoLT5kZWZXaWR0aChpbnN0LmFyZ3NbMF0udG1wKCkpID4gQXJnOjpXaWR0aDMyCi0gICAgICAg
ICAgICAgICAgJiYgdG1wV2lkdGgtPnVzZVdpZHRoKGluc3QuYXJnc1sxXS50bXAoKSkgPiBBcmc6
OldpZHRoMzIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQXJnOjpGUCkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmICh3aWR0aCA9PSBBcmc6OmNv
bnNlcnZhdGl2ZVdpZHRoKHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAg
ICAgaWYgKCF0bXBXaWR0aCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBy
ZXR1cm4gdG1wV2lkdGgtPmRlZldpZHRoKHNyYykgPD0gQXJnOjpXaWR0aDMyCisgICAgICAgICAg
ICB8fCB0bXBXaWR0aC0+dXNlV2lkdGgoZGVzdCkgPD0gQXJnOjpXaWR0aDMyOworICAgIH0KKwor
ICAgIHN0YXRpYyBib29sIG1heUJlQ29hbGVzY2FibGVJbXBsKGNvbnN0IFNodWZmbGVQYWlyJiBw
YWlyLCBUbXBXaWR0aCogdG1wV2lkdGgpCisgICAgeworICAgICAgICBpZiAoIXBhaXIuc3JjKCku
aXNUbXAoKSB8fCAhcGFpci5kc3QoKS5pc1RtcCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIGlmICghcGFpci5zcmMoKS5pc1R5cGUodHlwZSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgQVNTRVJUKHBhaXIud2lkdGgoKSA9PSBXaWR0aDMyIHx8
IHBhaXIud2lkdGgoKSA9PSBXaWR0aDY0KTsKKyAgICAgICAgQVNTRVJUKHBhaXIuc3JjKCkudHlw
ZSgpID09IHBhaXIuZHN0KCkudHlwZSgpKTsKKworICAgICAgICBpZiAodHlwZSA9PSBBcmc6OkZQ
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgaWYgKHBhaXIud2lkdGgoKSA9
PSBBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAgICAgaWYgKCF0bXBXaWR0aCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICByZXR1cm4gdG1wV2lkdGgtPmRlZldpZHRoKHBhaXIuc3JjKCkpIDw9IEFyZzo6V2lk
dGgzMgorICAgICAgICAgICAgfHwgdG1wV2lkdGgtPnVzZVdpZHRoKHBhaXIuZHN0KCkpIDw9IEFy
Zzo6V2lkdGgzMjsKICAgICB9CiAKICAgICB2b2lkIHNlbGVjdFNwaWxsKCkKQEAgLTEzNzUsOSAr
MTQ1Nyw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9
IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CiAgICAgICAgICAg
ICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOwogCi0gICAgICAgICAgICAg
ICAgLy8gVGhlIG1heUJlQ29hbGVzY2FibGUoKSBtZXRob2Qgd2lsbCBjaGFuZ2UgaXRzIG1pbmQg
Zm9yIHNvbWUgb3BlcmF0aW9ucyBhZnRlciB3ZQotICAgICAgICAgICAgICAgIC8vIGNvbXBsZXRl
IHJlZ2lzdGVyIGFsbG9jYXRpb24uIFNvLCB3ZSByZWNvcmQgdGhpcyBiZWZvcmUgc3RhcnRpbmcu
Ci0gICAgICAgICAgICAgICAgYm9vbCBtYXlCZUNvYWxlc2NhYmxlID0gYWxsb2NhdG9yLm1heUJl
Q29hbGVzY2FibGUoaW5zdCk7CisgICAgICAgICAgICAgICAgLy8gVGhlIG1heUJlQ29hbGVzY2Fi
bGVNb3ZlKCkgbWV0aG9kIHdpbGwgY2hhbmdlIGl0cyBtaW5kIGZvciBzb21lIG9wZXJhdGlvbnMg
YWZ0ZXIKKyAgICAgICAgICAgICAgICAvLyB3ZSBjb21wbGV0ZSByZWdpc3RlciBhbGxvY2F0aW9u
LiBTbywgd2UgcmVjb3JkIHRoaXMgYmVmb3JlIHN0YXJ0aW5nLgorICAgICAgICAgICAgICAgIGJv
b2wgbWF5QmVDb2FsZXNjYWJsZU1vdmUgPSBhbGxvY2F0b3IubWF5QmVDb2FsZXNjYWJsZU1vdmUo
aW5zdCk7CiAKICAgICAgICAgICAgICAgICAvLyBNb3ZlMzIgaXMgY2hlYXBlciBpZiB3ZSBrbm93
IHRoYXQgaXQncyBlcXVpdmFsZW50IHRvIGEgTW92ZS4gSXQncwogICAgICAgICAgICAgICAgIC8v
IGVxdWl2YWxlbnQgaWYgdGhlIGRlc3RpbmF0aW9uJ3MgaGlnaCBiaXRzIGFyZSBub3Qgb2JzZXJ2
YWJsZSBvciBpZiB0aGUgc291cmNlJ3MgaGlnaApAQCAtMTM5MCw2ICsxNDcyLDI1IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0Lm9wY29kZSA9IE1vdmUzMjsKICAgICAg
ICAgICAgICAgICB9CiAKKyAgICAgICAgICAgICAgICAvLyBBbGwgb2YgdGhlIHN0dWZmIHdlIGRv
IGZvciBNb3ZlcyBhbHNvIGFwcGxpZXMgdG8gU2h1ZmZsZXMuCisgICAgICAgICAgICAgICAgQml0
VmVjdG9yIGNvYWxlc2NhYmxlU2h1ZmZsZVBhaXJzOworICAgICAgICAgICAgICAgIGlmIChpbnN0
Lm9wY29kZSA9PSBTaHVmZmxlKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyBpICs9IDMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEFyZyBzcmMgPSBpbnN0LmFyZ3NbaSArIDBdOworICAgICAgICAgICAgICAgICAgICAg
ICAgQXJnIGRlc3QgPSBpbnN0LmFyZ3NbaSArIDFdOworICAgICAgICAgICAgICAgICAgICAgICAg
QXJnOjpXaWR0aCB3aWR0aCA9IGluc3QuYXJnc1tpICsgMl0ud2lkdGgoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG9jYXRvci5tYXlC
ZUNvYWxlc2NhYmxlU2h1ZmZsZVBhaXIoaW5zdCwgaSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29hbGVzY2FibGVTaHVmZmxlUGFpcnMuc2V0KGkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBBcmc6OkdQICYmIHNy
Yy5pc1RtcCgpICYmIGRlc3QuaXNUbXAoKSAmJiBzcmMuaXNHUCgpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJiYgd2lkdGggPT0gV2lkdGg2NAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICYmIChtX3RtcFdpZHRoLnVzZVdpZHRoKGRlc3QpIDw9IEFyZzo6V2lkdGgzMgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX3RtcFdpZHRoLmRlZldpZHRoKHNyYykgPD0g
QXJnOjpXaWR0aDMyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0LmFyZ3NbaSAr
IDJdID0gQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wRmFz
dChbJl0gKFRtcCYgdG1wKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSB8
fCB0bXAuaXNHUCgpID09ICh0eXBlICE9IEFyZzo6R1ApKQogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMTQxMCwxMSArMTUxMSwyOSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIGlmIChtYXlCZUNvYWxlc2NhYmxlICYmIGluc3QuYXJnc1swXS5pc1RtcCgpICYmIGluc3Qu
YXJnc1sxXS5pc1RtcCgpCiAgICAgICAgICAgICAgICAgICAgICYmIGluc3QuYXJnc1swXS50bXAo
KSA9PSBpbnN0LmFyZ3NbMV0udG1wKCkpCiAgICAgICAgICAgICAgICAgICAgIGluc3QgPSBJbnN0
KCk7Ci0gICAgICAgICAgICB9CiAKKyAgICAgICAgICAgICAgICBpZiAoaW5zdC5vcGNvZGUgPT0g
U2h1ZmZsZSkgeworICAgICAgICAgICAgICAgICAgICBJbnN0OjpBcmdMaXN0IG5ld0FyZ3M7Cisg
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6
ZSgpOyBpICs9IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFyZyBzcmMgPSBpbnN0LmFy
Z3NbaSArIDBdOworICAgICAgICAgICAgICAgICAgICAgICAgQXJnIGRlc3QgPSBpbnN0LmFyZ3Nb
aSArIDFdOworICAgICAgICAgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IGluc3Qu
YXJnc1tpICsgMl07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29hbGVzY2FibGVTaHVm
ZmxlUGFpcnMuZ2V0KGkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc3JjLmlzVG1w
KCkgJiYgZGVzdC5pc1RtcCgpICYmIHNyYy50bXAoKSA9PSBkZXN0LnRtcCgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgICAgICAgICBu
ZXdBcmdzLmFwcGVuZChzcmMpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3QXJncy5hcHBl
bmQoZGVzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdBcmdzLmFwcGVuZChBcmc6Ondp
ZHRoQXJnKHdpZHRoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIGluc3QuYXJncyA9IFdURk1vdmUobmV3QXJncyk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAg
ICAvLyBSZW1vdmUgYWxsIHRoZSB1c2VsZXNzIG1vdmVzIHdlIGNyZWF0ZWQgaW4gdGhpcyBibG9j
ay4KICAgICAgICAgICAgIGJsb2NrLT5pbnN0cygpLnJlbW92ZUFsbE1hdGNoaW5nKFsmXSAoY29u
c3QgSW5zdCYgaW5zdCkgewotICAgICAgICAgICAgICAgIHJldHVybiAhaW5zdDsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gIWluc3QgfHwgKGluc3Qub3Bjb2RlID09IFNodWZmbGUgJiYgaW5zdC5h
cmdzLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogICAgIH0KQEAgLTE0
NDIsNiArMTU2MSw2MiBAQCBwcml2YXRlOgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0
SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgewogICAg
ICAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKIAorICAgICAg
ICAgICAgICAgIC8vIFRoZSBTaHVmZmxlIGluc3RydWN0aW9uIHJlcXVpcmVzIHNvbWUgc3BlY2lh
bCBjYXJlLiBUaGUgVG1wV2lkdGggYW5hbHlzaXMgd2lsbAorICAgICAgICAgICAgICAgIC8vIHNh
eSB0aGF0IGEgc2h1ZmZsZSBwYWlyIG9ubHkgc3RvcmVzIDMyLWJpdHMgaW50byB0aGUgZGVzdGlu
YXRpb24gaWYgdGhlIHNvdXJjZQorICAgICAgICAgICAgICAgIC8vIG9ubHkgaGFkIDMyIGJpdHMg
d29ydGggb2Ygbm9uLXplcm8gYml0cy4gU2FtZSBmb3IgdGhlIHNvdXJjZTogaXQgd2lsbCBvbmx5
IGNsYWltCisgICAgICAgICAgICAgICAgLy8gdG8gcmVhZCAzMiBiaXRzIGZyb20gdGhlIHNvdXJj
ZSBpZiBvbmx5IDMyIGJpdHMgb2YgdGhlIGRlc3RpbmF0aW9uIGFyZSByZWFkLiBUaGlzCisgICAg
ICAgICAgICAgICAgLy8gaGFwcGVucyBvbiBhIHBlci1wYWlyIGJhc2lzLiBXZSBhbHNvIGhhcHBl
biB0byBrbm93IHRoYXQgU2h1ZmZsZSBhZG1pdHMgc3RhY2sKKyAgICAgICAgICAgICAgICAvLyBl
dmVyeXdoZXJlLCB3aGljaCBtYWtlcyBzcGlsbGluZyBlYXNpZXIuCisgICAgICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQncyBPSyBmb3IgdGhpcyB0byBmYWxs
IHRocm91Z2ggZm9yIG5vdCBHUCwgc2luY2Ugd2UgaGFuZGxlIFNodWZmbGUKKyAgICAgICAgICAg
ICAgICAvLyBqdXN0IGZpbmUgaWYgd2UgZG9uJ3QgaGF2ZSB0byBoYW5kbGUgdGhlIHdpZHRoIHNw
ZWNpYWwgY2FzZXMuCisgICAgICAgICAgICAgICAgaWYgKGluc3Qub3Bjb2RlID09IFNodWZmbGUg
JiYgdHlwZSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
aW5zdC5hcmdzLnNpemUoKTsgaSArPSAzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBcmcg
c3JjID0gaW5zdC5hcmdzW2kgKyAwXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFyZyBkZXN0
ID0gaW5zdC5hcmdzW2kgKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFyZzo6V2lkdGgg
d2lkdGggPSBpbnN0LmFyZ3NbaSArIDJdLndpZHRoKCk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFRoaXMgZXhjbHVkZXMgZXZlcnl0aGluZyBleGNlcHQgbWVtLT5tZW0gcGFpcnMsIHdo
aWNoIHdlIGdyYWNlZnVsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBkb3du
IGJlbG93LgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzcmMuaXNUeXBlKHR5cGUpIHx8
ICFkZXN0LmlzVHlwZSh0eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZm9yY2VXaWR0aDMySWZEaWRTcGlsbCA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkaWRTcGlsbCA9IGZhbHNlOwor
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBHUCAmJiB3aWR0aCA9PSBBcmc6
OldpZHRoNjQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHNyYy5pc1RtcCgp
ICYmIG1fdG1wV2lkdGgudXNlV2lkdGgoZGVzdC50bXAoKSkgPD0gQXJnOjpXaWR0aDMyKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoZGVzdC5pc1RtcCgpICYmIG1fdG1wV2lk
dGguZGVmV2lkdGgoc3JjLnRtcCgpKSA8PSBBcmc6OldpZHRoMzIpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3JjZVdpZHRoMzJJZkRpZFNwaWxsID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBoYW5kbGVU
bXAgPSBbJl0gKEFyZyYgYXJnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFh
cmcuaXNUbXAoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmcuaXNSZWcoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1
dG8gc3RhY2tTbG90RW50cnkgPSBzdGFja1Nsb3RzLmZpbmQoYXJnLnRtcCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2tTbG90RW50cnkgPT0gc3RhY2tTbG90cy5lbmQo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YWNrU2xvdEVudHJ5LT52YWx1ZS0+ZW5zdXJlU2l6ZSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VXaWR0aDMySWZEaWRTcGlsbCA/IDQgOiBB
cmc6OmJ5dGVzKHdpZHRoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJn
OjpzdGFjayhzdGFja1Nsb3RFbnRyeS0+dmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRpZFNwaWxsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVRtcChzcmMp
OworICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVG1wKGRlc3QpOworCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZGlkU3BpbGwgJiYgZm9yY2VXaWR0aDMySWZEaWRTcGlsbCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IEFyZzo6V2lkdGgzMjsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zdC5hcmdzW2kgKyAwXSA9IHNyYzsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGluc3QuYXJnc1tpICsgMV0gPSBkZXN0OworICAgICAgICAgICAgICAgICAgICAg
ICAgaW5zdC5hcmdzW2kgKyAyXSA9IEFyZzo6d2lkdGhBcmcod2lkdGgpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBUaGUgVG1wV2lkdGggYW5h
bHlzaXMgd2lsbCBzYXkgdGhhdCBhIE1vdmUgb25seSBzdG9yZXMgMzIgYml0cyBpbnRvIHRoZSBk
ZXN0aW5hdGlvbiwKICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgc291cmNlIG9ubHkgaGFkIDMy
IGJpdHMgd29ydGggb2Ygbm9uLXplcm8gYml0cy4gU2FtZSBmb3IgdGhlIHNvdXJjZTogaXQgd2ls
bAogICAgICAgICAgICAgICAgIC8vIG9ubHkgY2xhaW0gdG8gcmVhZCAzMiBiaXRzIGZyb20gdGhl
IHNvdXJjZSBpZiBvbmx5IDMyIGJpdHMgb2YgdGhlIGRlc3RpbmF0aW9uIGFyZQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTaHVmZmxlUGFpci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTaHVmZmxlUGFpci5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNodWZmbGVQYWlyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
aXJTaHVmZmxlUGFpci5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIFNodWZmbGVQYWlyOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KHdpZHRoKCksICI6Iiwg
c3JjKCksICI9PiIsIGRzdCgpKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJTaHVmZmxlUGFpci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyU2h1ZmZsZVBhaXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU2h1ZmZsZVBhaXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQWlyU2h1ZmZsZVBhaXJfaAorI2RlZmluZSBBaXJTaHVmZmxlUGFpcl9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgU2h1ZmZsZVBhaXIg
eworcHVibGljOgorICAgIFNodWZmbGVQYWlyKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFNo
dWZmbGVQYWlyKGNvbnN0IEFyZyYgc3JjLCBjb25zdCBBcmcmIGRzdCwgQXJnOjpXaWR0aCB3aWR0
aCkKKyAgICAgICAgOiBtX3NyYyhzcmMpCisgICAgICAgICwgbV9kc3QoZHN0KQorICAgICAgICAs
IG1fd2lkdGgod2lkdGgpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IEFyZyYgc3JjKCkgY29u
c3QgeyByZXR1cm4gbV9zcmM7IH0KKyAgICBjb25zdCBBcmcmIGRzdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZHN0OyB9CisKKyAgICAvLyBUaGUgd2lkdGggZGV0ZXJtaW5lcyB0aGUga2luZCBvZiBtb3Zl
IHdlIGRvLiBZb3UgY2FuIG9ubHkgY2hvb3NlIFdpZHRoMzIgb3IgV2lkdGg2NCByaWdodCBub3cu
CisgICAgLy8gRm9yIEdQLCBpdCBwaWNrcyBiZXR3ZWVuIE1vdmUzMiBhbmQgTW92ZS4gRm9yIEZQ
LCBpdCBwaWNrcyBiZXR3ZWVuIE1vdmVGbG9hdCBhbmQgTW92ZURvdWJsZS4KKyAgICBBcmc6Oldp
ZHRoIHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQorCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIEFyZyBtX3NyYzsKKyAgICBB
cmcgbV9kc3Q7CisgICAgQXJnOjpXaWR0aCBtX3dpZHRoIHsgQXJnOjpXaWR0aDggfTsKK307CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKKyNlbmRpZiAvLyBBaXJTaHVmZmxlUGFpcl9oCisK
</data>

          </attachment>
      

    </bug>

</bugzilla>