<?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>240205</bug_id>
          
          <creation_ts>2022-05-07 01:44:45 -0700</creation_ts>
          <short_desc>Better handle clobbered registers in O0 register allocation</short_desc>
          <delta_ts>2022-05-11 19:07:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1867462</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-05-07 01:44:45 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1867463</commentid>
    <comment_count>1</comment_count>
      <attachid>458997</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-05-07 01:45:09 -0700</bug_when>
    <thetext>Created attachment 458997
WIP

test EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1867534</commentid>
    <comment_count>2</comment_count>
      <attachid>459017</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-05-08 11:54:51 -0700</bug_when>
    <thetext>Created attachment 459017
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1867555</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-05-08 21:41:31 -0700</bug_when>
    <thetext>&lt;rdar://87220688&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1867557</commentid>
    <comment_count>4</comment_count>
      <attachid>459022</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-05-08 21:46:42 -0700</bug_when>
    <thetext>Created attachment 459022
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1867559</commentid>
    <comment_count>5</comment_count>
      <attachid>459023</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-05-08 22:02:38 -0700</bug_when>
    <thetext>Created attachment 459023
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1867563</commentid>
    <comment_count>6</comment_count>
      <attachid>459024</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-05-08 22:41:47 -0700</bug_when>
    <thetext>Created attachment 459024
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1867564</commentid>
    <comment_count>7</comment_count>
      <attachid>459025</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-05-08 22:45:56 -0700</bug_when>
    <thetext>Created attachment 459025
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1867565</commentid>
    <comment_count>8</comment_count>
      <attachid>459026</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-05-08 22:47:22 -0700</bug_when>
    <thetext>Created attachment 459026
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1867566</commentid>
    <comment_count>9</comment_count>
      <attachid>459027</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-05-08 22:50:20 -0700</bug_when>
    <thetext>Created attachment 459027
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1867773</commentid>
    <comment_count>10</comment_count>
      <attachid>459027</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-05-09 13:59:56 -0700</bug_when>
    <thetext>Comment on attachment 459027
patch

Let&apos;s try a GitHub PR.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1867794</commentid>
    <comment_count>11</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-05-09 15:09:19 -0700</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/573</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1868292</commentid>
    <comment_count>12</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-05-11 19:07:20 -0700</bug_when>
    <thetext>Committed r294087 (250477@main): &lt;https://commits.webkit.org/250477@main&gt;

Reviewed commits have been landed. Closing PR #573 and removing active labels.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>458997</attachid>
            <date>2022-05-07 01:45:09 -0700</date>
            <delta_ts>2022-05-08 11:54:51 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>13685</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNB
bmRTdGFja0FuZEdlbmVyYXRlQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2Rl
LmNwcAkocmV2aXNpb24gMjkzOTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTg0LDcgKzE4NCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBHZW5lcmF0ZUFuZEFs
bG9jYXRlUmUKICAgICByZWxlYXNlKHRtcCwgcmVnKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lk
IEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmFsbG9jKFRtcCB0bXAsIFJlZyByZWcsIGJv
b2wgaXNEZWYpCitBTFdBWVNfSU5MSU5FIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVy
czo6YWxsb2MoVG1wIHRtcCwgUmVnIHJlZywgQXJnOjpSb2xlIHJvbGUpCiB7CiAgICAgaWYgKFRt
cCBvY2N1cHlpbmdUbXAgPSBtX2N1cnJlbnRBbGxvY2F0aW9uLT5hdChyZWcpKQogICAgICAgICBz
cGlsbChvY2N1cHlpbmdUbXAsIHJlZyk7CkBAIC0xOTcsNyArMTk3LDcgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZQogICAgIG1fYXZhaWxhYmxlUmVnc1t0bXAuYmFu
aygpXS5jbGVhcihyZWcpOwogICAgIG1fY3VycmVudEFsbG9jYXRpb24tPmF0KHJlZykgPSB0bXA7
CiAKLSAgICBpZiAoIWlzRGVmKSB7CisgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkpIHsKICAg
ICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gbV9tYXBbdG1wXS5zcGlsbFNsb3QtPm9mZnNldEZyb21G
UCgpOwogICAgICAgICBpZiAodG1wLmJhbmsoKSA9PSBHUCkKICAgICAgICAgICAgIG1faml0LT5s
b2FkNjQoY2FsbEZyYW1lQWRkcigqbV9qaXQsIG9mZnNldCksIHJlZy5ncHIoKSk7CkBAIC0yMjUs
NDQgKzIyNSw2NSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlCiAg
ICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVy
czo6YXNzaWduVG1wKFRtcCYgdG1wLCBCYW5rIGJhbmssIGJvb2wgaXNEZWYpCitBTFdBWVNfSU5M
SU5FIGJvb2wgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6YXNzaWduVG1wKFRtcCYgdG1w
LCBCYW5rIGJhbmssIEFyZzo6Um9sZSByb2xlKQogewogICAgIEFTU0VSVCghdG1wLmlzUmVnKCkp
OworCisgICAgYXV0byBtYXJrUmVnaXN0ZXJBc1VzZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAg
ICAgaWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCisgICAgICAgICAgICBtX2Nsb2JiZXJlZFRvQ2xl
YXIuY2xlYXIocmVnKTsKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgaXQgZG9lc24ndCBtYXR0
ZXIgaWYgd2UgYWRkIGl0IHRvIHRoZSBtX25hbWVkVXNlZFJlZ3Mgb3IgbV9uYW1lZERlZmRSZWdz
LiAKKyAgICAgICAgLy8gV2UganVzdCBuZWVkIHRvIG1hcmsgdGhhdCB3ZSBjYW4ndCB1c2UgaXQg
YWdhaW4gZm9yIGFub3RoZXIgdG1wLgorICAgICAgICBtX25hbWVkVXNlZFJlZ3Muc2V0KHJlZyk7
CisgICAgfTsKKwogICAgIGlmIChSZWcgcmVnID0gbV9tYXBbdG1wXS5yZWcpIHsKICAgICAgICAg
QVNTRVJUKCFtX25hbWVkRGVmZFJlZ3MuY29udGFpbnMocmVnKSk7CiAgICAgICAgIHRtcCA9IFRt
cChyZWcpOwotICAgICAgICBtX25hbWVkVXNlZFJlZ3Muc2V0KHJlZyk7CisgICAgICAgIG1hcmtS
ZWdpc3RlckFzVXNlZChyZWcpOwogICAgICAgICBBU1NFUlQoIW1fYXZhaWxhYmxlUmVnc1tiYW5r
XS5nZXQocmVnKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmICghbV9h
dmFpbGFibGVSZWdzW2JhbmtdLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkpCi0gICAgICAgIGZyZWVE
ZWFkVG1wc0lmTmVlZGVkKCk7CisgICAgYm9vbCBtYXlJbnRlcmZlcmUgPSBtX2Vhcmx5Q2xvYmJl
ci5udW1iZXJPZlNldFJlZ2lzdGVycygpIHx8IG1fbGF0ZUNsb2JiZXIubnVtYmVyT2ZTZXRSZWdp
c3RlcnMoKTsKKworICAgIGF1dG8gaW50ZXJmZXJlc1dpdGhDbG9iYmVyID0gWyZdIChSZWcgcmVn
KSB7CisgICAgICAgIGlmICghbWF5SW50ZXJmZXJlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAvLyBJZiB3ZSBlYXJseSBvciBsYXRlIFVzZSBzb21ldGhpbmcgdGhhdCdzIGVh
cmx5IGNsb2JiZXJlZCwgd2UgaW50ZXJmZXJlLgorICAgICAgICBpZiAoQXJnOjppc0FueVVzZShy
b2xlKSAmJiBtX2Vhcmx5Q2xvYmJlci5nZXQocmVnKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBpZiAoQXJnOjppc0FueURlZihyb2xlKSAmJiBtX2xhdGVDbG9iYmVyLmdldChy
ZWcpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChBcmc6OmFjdGl2ZUF0
KHJvbGUsIEFyZzo6UGhhc2U6OkVhcmx5KSAmJiBtX2Vhcmx5Q2xvYmJlci5nZXQocmVnKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoQXJnOjphY3RpdmVBdChyb2xlLCBB
cmc6OlBoYXNlOjpMYXRlKSAmJiBtX2xhdGVDbG9iYmVyLmdldChyZWcpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OwogCiAgICAgaWYgKG1f
YXZhaWxhYmxlUmVnc1tiYW5rXS5udW1iZXJPZlNldFJlZ2lzdGVycygpKSB7CiAgICAgICAgIC8v
IFdlIGZpcnN0IHRha2UgYW4gYXZhaWxhYmxlIHJlZ2lzdGVyLgogICAgICAgICBmb3IgKFJlZyBy
ZWcgOiBtX3JlZ2lzdGVyc1tiYW5rXSkgewotICAgICAgICAgICAgaWYgKG1fbmFtZWRVc2VkUmVn
cy5jb250YWlucyhyZWcpIHx8IG1fbmFtZWREZWZkUmVncy5jb250YWlucyhyZWcpKQorICAgICAg
ICAgICAgaWYgKGludGVyZmVyZXNXaXRoQ2xvYmJlcihyZWcpIHx8IG1fbmFtZWRVc2VkUmVncy5j
b250YWlucyhyZWcpIHx8IG1fbmFtZWREZWZkUmVncy5jb250YWlucyhyZWcpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCFtX2F2YWlsYWJsZVJlZ3NbYmFua10u
Y29udGFpbnMocmVnKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG1f
bmFtZWRVc2VkUmVncy5zZXQocmVnKTsgLy8gQXQgdGhpcyBwb2ludCwgaXQgZG9lc24ndCBtYXR0
ZXIgaWYgd2UgYWRkIGl0IHRvIHRoZSBtX25hbWVkVXNlZFJlZ3Mgb3IgbV9uYW1lZERlZmRSZWdz
LiBXZSBqdXN0IG5lZWQgdG8gbWFyayB0aGF0IHdlIGNhbid0IHVzZSBpdCBhZ2Fpbi4KLSAgICAg
ICAgICAgIGFsbG9jKHRtcCwgcmVnLCBpc0RlZik7CisKKyAgICAgICAgICAgIG1hcmtSZWdpc3Rl
ckFzVXNlZChyZWcpOworICAgICAgICAgICAgYWxsb2ModG1wLCByZWcsIHJvbGUpOwogICAgICAg
ICAgICAgdG1wID0gVG1wKHJlZyk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQotCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCiAgICAg
Ly8gTm90aGluZyB3YXMgYXZhaWxhYmxlLCBsZXQncyBtYWtlIHNvbWUgcm9vbS4KICAgICBmb3Ig
KFJlZyByZWcgOiBtX3JlZ2lzdGVyc1tiYW5rXSkgewotICAgICAgICBpZiAobV9uYW1lZFVzZWRS
ZWdzLmNvbnRhaW5zKHJlZykgfHwgbV9uYW1lZERlZmRSZWdzLmNvbnRhaW5zKHJlZykpCisgICAg
ICAgIGlmIChpbnRlcmZlcmVzV2l0aENsb2JiZXIocmVnKSB8fCBtX25hbWVkVXNlZFJlZ3MuY29u
dGFpbnMocmVnKSB8fCBtX25hbWVkRGVmZFJlZ3MuY29udGFpbnMocmVnKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIG1fbmFtZWRVc2VkUmVncy5zZXQocmVnKTsKLQotICAgICAg
ICBhbGxvYyh0bXAsIHJlZywgaXNEZWYpOworICAgICAgICBtYXJrUmVnaXN0ZXJBc1VzZWQocmVn
KTsKKyAgICAgICAgYWxsb2ModG1wLCByZWcsIHJvbGUpOwogICAgICAgICB0bXAgPSBUbXAocmVn
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNTQwLDYgKzU2MSw5IEBAIHZvaWQg
R2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6Z2VuZXIKIAogICAgICAgICAgICAgbV9uYW1l
ZFVzZWRSZWdzID0gUmVnaXN0ZXJTZXQoKTsKICAgICAgICAgICAgIG1fbmFtZWREZWZkUmVncyA9
IFJlZ2lzdGVyU2V0KCk7CisgICAgICAgICAgICBtX2Vhcmx5Q2xvYmJlciA9IFJlZ2lzdGVyU2V0
KCk7CisgICAgICAgICAgICBtX2xhdGVDbG9iYmVyID0gUmVnaXN0ZXJTZXQoKTsKKyAgICAgICAg
ICAgIG1fY2xvYmJlcmVkVG9DbGVhciA9IFJlZ2lzdGVyU2V0KCk7CiAKICAgICAgICAgICAgIGJv
b2wgbmVlZHNUb0dlbmVyYXRlID0gKFsmXSAoKSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHdlIGNh
biBhbHNvIGVsaWRlIE1vdjMycwpAQCAtNjE0LDQzICs2MzgsNTEgQEAgdm9pZCBHZW5lcmF0ZUFu
ZEFsbG9jYXRlUmVnaXN0ZXJzOjpnZW5lcgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0pOwogCi0gICAgICAgICAgICBSZWdpc3RlclNldCBjbG9iYmVyZWRSZWdpc3RlcnM7Ci0gICAg
ICAgICAgICBSZWdpc3RlclNldCBlYXJseU5leHRDbG9iYmVyZWRSZWdpc3RlcnM7Ci0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgSW5zdCogbmV4dEluc3QgPSBibG9jay0+Z2V0KGluc3RJ
bmRleCArIDEpOwotICAgICAgICAgICAgICAgIGlmIChpbnN0LmtpbmQub3Bjb2RlID09IFBhdGNo
IHx8IChuZXh0SW5zdCAmJiBuZXh0SW5zdC0+a2luZC5vcGNvZGUgPT0gUGF0Y2gpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChpbnN0LmtpbmQub3Bjb2RlID09IFBhdGNoKQotICAgICAgICAg
ICAgICAgICAgICAgICAgY2xvYmJlcmVkUmVnaXN0ZXJzLm1lcmdlKGluc3QuZXh0cmFDbG9iYmVy
ZWRSZWdzKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEluc3QgJiYgbmV4dEluc3Qt
PmtpbmQub3Bjb2RlID09IFBhdGNoKQotICAgICAgICAgICAgICAgICAgICAgICAgZWFybHlOZXh0
Q2xvYmJlcmVkUmVnaXN0ZXJzLm1lcmdlKG5leHRJbnN0LT5leHRyYUVhcmx5Q2xvYmJlcmVkUmVn
cygpKTsKLQotICAgICAgICAgICAgICAgICAgICBjbG9iYmVyZWRSZWdpc3RlcnMuZmlsdGVyKG1f
YWxsb3dlZFJlZ2lzdGVycyk7Ci0gICAgICAgICAgICAgICAgICAgIGNsb2JiZXJlZFJlZ2lzdGVy
cy5leGNsdWRlKG1fbmFtZWREZWZkUmVncyk7Ci0gICAgICAgICAgICAgICAgICAgIGVhcmx5TmV4
dENsb2JiZXJlZFJlZ2lzdGVycy5maWx0ZXIobV9hbGxvd2VkUmVnaXN0ZXJzKTsKLQotICAgICAg
ICAgICAgICAgICAgICBtX25hbWVkRGVmZFJlZ3MubWVyZ2UoY2xvYmJlcmVkUmVnaXN0ZXJzKTsK
LSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaW5zdC5raW5kLm9wY29kZSA9PSBQ
YXRjaCkgeworICAgICAgICAgICAgICAgIG1fZWFybHlDbG9iYmVyLm1lcmdlKGluc3QuZXh0cmFF
YXJseUNsb2JiZXJlZFJlZ3MoKSk7CisgICAgICAgICAgICAgICAgbV9sYXRlQ2xvYmJlci5tZXJn
ZShpbnN0LmV4dHJhQ2xvYmJlcmVkUmVncygpKTsKKworICAgICAgICAgICAgICAgIG1fZWFybHlD
bG9iYmVyLmZpbHRlcihtX2FsbG93ZWRSZWdpc3RlcnMpOworICAgICAgICAgICAgICAgIG1fbGF0
ZUNsb2JiZXIuZmlsdGVyKG1fYWxsb3dlZFJlZ2lzdGVycyk7CisKKyAgICAgICAgICAgICAgICBt
X2Nsb2JiZXJlZFRvQ2xlYXIubWVyZ2UobV9lYXJseUNsb2JiZXIpOworICAgICAgICAgICAgICAg
IG1fY2xvYmJlcmVkVG9DbGVhci5tZXJnZShtX2xhdGVDbG9iYmVyKTsKKyAgICAgICAgICAgICAg
ICBtX2Nsb2JiZXJlZFRvQ2xlYXIuZXhjbHVkZShtX25hbWVkRGVmZFJlZ3MpOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBhdXRvIGFsbG9jTmFtZWQgPSBbJl0gKGNvbnN0IFJlZ2lzdGVy
U2V0JiBuYW1lZCwgYm9vbCBpc0RlZikgeworICAgICAgICAgICAgYXV0byBhbGxvY05hbWVkID0g
WyZdIChjb25zdCBSZWdpc3RlclNldCYgbmFtZWQsIEFyZzo6Um9sZSByb2xlKSB7CiAgICAgICAg
ICAgICAgICAgZm9yIChSZWcgcmVnIDogbmFtZWQpIHsKICAgICAgICAgICAgICAgICAgICAgaWYg
KFRtcCBvY2N1cHlpbmdUbXAgPSBjdXJyZW50QWxsb2NhdGlvbltyZWddKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAob2NjdXB5aW5nVG1wID09IFRtcChyZWcpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgICAgICAgICAgZnJlZURlYWRUbXBzSWZOZWVkZWQoKTsgLy8gV2UgZG9uJ3Qgd2FudCB0
byBzcGlsbCBhIGRlYWQgdG1wLgotICAgICAgICAgICAgICAgICAgICBhbGxvYyhUbXAocmVnKSwg
cmVnLCBpc0RlZik7CisgICAgICAgICAgICAgICAgICAgIGFsbG9jKFRtcChyZWcpLCByZWcsIHJv
bGUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgIGFs
bG9jTmFtZWQobV9uYW1lZFVzZWRSZWdzLCBmYWxzZSk7IC8vIE11c3QgY29tZSBiZWZvcmUgdGhl
IGRlZmQgcmVnaXN0ZXJzIHNpbmNlIHdlIG1heSB1c2UgYW5kIGRlZiB0aGUgc2FtZSByZWdpc3Rl
ci4KLSAgICAgICAgICAgIGFsbG9jTmFtZWQobV9uYW1lZERlZmRSZWdzLCB0cnVlKTsKKyAgICAg
ICAgICAgIGF1dG8gc3BpbGxJZk5lZWRlZCA9IFsmXSAoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkg
eworICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHNldCkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoVG1wIHRtcCA9IG1fY3VycmVudEFsbG9jYXRpb24tPmF0KHJlZykpCisgICAgICAg
ICAgICAgICAgICAgICAgICBzcGlsbCh0bXAsIHJlZyk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfTsKKworICAgICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGNvcnJlY3Ru
ZXNzIGJlY2F1c2Ugd2UgcmV1c2Ugc3RhY2sgc2xvdHMgYmV0d2VlbgorICAgICAgICAgICAgLy8g
VG1wcyB0aGF0IGRvbid0IGludGVmZXJlLiBTbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24n
dCBzcGlsbCBhCisgICAgICAgICAgICAvLyBkZWFkIFRtcCB0byBhIGxpdmUgVG1wJ3Mgc2xvdC4K
KyAgICAgICAgICAgIGZyZWVEZWFkVG1wc0lmTmVlZGVkKCk7CisKKyAgICAgICAgICAgIHNwaWxs
SWZOZWVkZWQobV9lYXJseUNsb2JiZXIpOworICAgICAgICAgICAgc3BpbGxJZk5lZWRlZChtX2xh
dGVDbG9iYmVyKTsKKworICAgICAgICAgICAgYWxsb2NOYW1lZChtX25hbWVkVXNlZFJlZ3MsIEFy
Zzo6Um9sZTo6VXNlKTsgLy8gTXVzdCBjb21lIGJlZm9yZSB0aGUgZGVmZCByZWdpc3RlcnMgc2lu
Y2Ugd2UgbWF5IHVzZSBhbmQgZGVmIHRoZSBzYW1lIHJlZ2lzdGVyLgorICAgICAgICAgICAgYWxs
b2NOYW1lZChtX25hbWVkRGVmZFJlZ3MsIEFyZzo6Um9sZTo6RGVmKTsKIAogICAgICAgICAgICAg
aWYgKG5lZWRzVG9HZW5lcmF0ZSkgewogICAgICAgICAgICAgICAgIGF1dG8gdHJ5QWxsb2NhdGUg
PSBbJl0gewotICAgICAgICAgICAgICAgICAgICBWZWN0b3I8VG1wKiwgOD4gdXNlc1RvQWxsb2M7
Ci0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxUbXAqLCA4PiBkZWZzVG9BbGxvYzsKKyAgICAg
ICAgICAgICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxUbXAqLCBBcmc6OlJvbGU+LCA4PiB1c2Vz
VG9BbGxvYzsKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxUbXAqLCBBcmc6
OlJvbGU+LCA4PiBkZWZzVG9BbGxvYzsKIAogICAgICAgICAgICAgICAgICAgICBpbnN0LmZvckVh
Y2hUbXAoWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCkBAIC02NTgsMTUgKzY5MCwxOCBA
QCB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVyCiAKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFdlIHRyZWF0IFVzZStEZWYgYXMgYSB1c2UuCiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1c2VzVG9BbGxvYy5hcHBlbmQoJnRtcCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXNlc1RvQWxsb2MuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKCZ0bXAsIHJvbGUpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmc1RvQWxsb2MuYXBwZW5kKCZ0bXApOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZnNUb0FsbG9jLmFwcGVuZChzdGQ6Om1ha2VfcGFpcigm
dG1wLCByb2xlKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogCi0gICAgICAgICAgICAgICAg
ICAgIGF1dG8gdHJ5QWxsb2NhdGVUbXBzID0gWyZdIChhdXRvJiB2ZWN0b3IsIGJvb2wgaXNEZWYp
IHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB0cnlBbGxvY2F0ZVRtcHMgPSBbJl0gKGF1dG8m
IHZlY3RvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoVG1wKiB0bXAgOiB2ZWN0b3IpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyAmPSBhc3NpZ25UbXAoKnRtcCwgdG1wLT5iYW5r
KCksIGlzRGVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc3RkOjpwYWlyPFRtcCos
IEFyZzo6Um9sZT4gcGFpciA6IHZlY3RvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRtcCYgdG1wID0gKnN0ZDo6Z2V0PDA+KHBhaXIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFyZzo6Um9sZSByb2xlID0gc3RkOjpnZXQ8MT4ocGFpcik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3VjY2VzcyAmPSBhc3NpZ25UbXAodG1wLCB0bXAuYmFuaygpLCByb2xlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBzdWNjZXNzOwogICAgICAgICAgICAgICAgICAgICB9OwogCkBAIC02NzYsOCArNzExLDggQEAg
dm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpnZW5lcgogICAgICAgICAgICAgICAg
ICAgICAvLyBzb21lIHRtcHMgbWF5IGJvdGggYmUgdXNlZCBhbmQgZGVmZC4gU28gd2UgaGFuZGxl
IHVzZXMgZmlyc3Qgc2luY2UgZm9yRWFjaFRtcCBjb3VsZAogICAgICAgICAgICAgICAgICAgICAv
LyB3YWxrIHVzZXMvZGVmcyBpbiBhbnkgb3JkZXIuCiAgICAgICAgICAgICAgICAgICAgIGJvb2wg
c3VjY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgJj0gdHJ5QWxsb2Nh
dGVUbXBzKHVzZXNUb0FsbG9jLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Mg
Jj0gdHJ5QWxsb2NhdGVUbXBzKGRlZnNUb0FsbG9jLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3VjY2VzcyAmPSB0cnlBbGxvY2F0ZVRtcHModXNlc1RvQWxsb2MpOworICAgICAgICAgICAg
ICAgICAgICBzdWNjZXNzICY9IHRyeUFsbG9jYXRlVG1wcyhkZWZzVG9BbGxvYyk7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzdWNjZXNzOwogICAgICAgICAgICAgICAgIH07CiAKQEAgLTcy
OSwyMiArNzY0LDIxIEBAIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6Z2VuZXIK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG1fY29kZS5uZWVkc1VzZWRSZWdpc3Rl
cnMoKSAmJiBpbnN0LmtpbmQub3Bjb2RlID09IFBhdGNoKSB7Ci0gICAgICAgICAgICAgICAgZnJl
ZURlYWRUbXBzSWZOZWVkZWQoKTsKICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCByZWdpc3Rl
clNldDsKICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1cnJlbnRBbGxv
Y2F0aW9uLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QWxs
b2NhdGlvbltpXSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyU2V0LnNldChSZWc6
OmZyb21JbmRleChpKSk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vLy8g
T09QUworICAgICAgICAgICAgICAgIC8vcmVnaXN0ZXJTZXQubWVyZ2UobV9lYXJseUNsb2JiZXIp
OworICAgICAgICAgICAgICAgIC8vcmVnaXN0ZXJTZXQubWVyZ2UobV9sYXRlQ2xvYmJlcik7CiAg
ICAgICAgICAgICAgICAgaW5zdC5yZXBvcnRVc2VkUmVnaXN0ZXJzKHJlZ2lzdGVyU2V0KTsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgYXV0byBjbG9iYmVyID0gWyZdIChjb25zdCBSZWdp
c3RlclNldCYgc2V0KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogc2V0KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIFRtcCB0bXAocmVnKTsKLSAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKGN1cnJlbnRBbGxvY2F0aW9uW3JlZ10gPT0gdG1wKTsKLSAgICAgICAgICAgICAgICAgICAg
bV9hdmFpbGFibGVSZWdzW3RtcC5iYW5rKCldLnNldChyZWcpOwotICAgICAgICAgICAgICAgICAg
ICBtX2N1cnJlbnRBbGxvY2F0aW9uLT5hdChyZWcpID0gVG1wKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fbWFwW3RtcF0ucmVnID0gUmVnKCk7CisgICAgICAgICAgICBhdXRvIGhhbmRsZUNsb2Ji
ZXIgPSBbJl0geworICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IG1fY2xvYmJlcmVkVG9D
bGVhcikgeworICAgICAgICAgICAgICAgICAgICBpZiAoVG1wIHRtcCA9IG1fY3VycmVudEFsbG9j
YXRpb24tPmF0KHJlZykpCisgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlKHRtcCwgcmVn
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9OwogCkBAIC03NTQsMTQgKzc4OCwx
MSBAQCB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVyCiAgICAgICAgICAg
ICAgICAgICAgIGp1bXAgPSBpbnN0LmdlbmVyYXRlKCptX2ppdCwgY29udGV4dCk7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUX1VOVVNFRChqdW1wLCAhanVtcC5pc1NldCgpKTsKIAotICAgICAgICAg
ICAgICAgIGFsbG9jTmFtZWQoZWFybHlOZXh0Q2xvYmJlcmVkUmVnaXN0ZXJzLCB0cnVlKTsKLSAg
ICAgICAgICAgICAgICBjbG9iYmVyZWRSZWdpc3RlcnMubWVyZ2UoZWFybHlOZXh0Q2xvYmJlcmVk
UmVnaXN0ZXJzKTsKLSAgICAgICAgICAgICAgICBjbG9iYmVyKGNsb2JiZXJlZFJlZ2lzdGVycyk7
CisgICAgICAgICAgICAgICAgaGFuZGxlQ2xvYmJlcigpOwogICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICBBU1NFUlQobmVlZHNUb0dlbmVyYXRlKTsKIAotICAgICAgICAgICAg
ICAgIGNsb2JiZXIoY2xvYmJlcmVkUmVnaXN0ZXJzKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
ZWFybHlOZXh0Q2xvYmJlcmVkUmVnaXN0ZXJzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAg
aGFuZGxlQ2xvYmJlcigpOwogCiAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5udW1TdWNjZXNz
b3JzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gQnkgZGVmYXVsdCwgd2Ugc3BpbGwgZXZl
cnl0aGluZyBiZXR3ZWVuIGJsb2NrIGJvdW5kYXJpZXMuIEhvd2V2ZXIsIHdlIGhhdmUgYSBzbWFs
bApAQCAtODU4LDYgKzg4OSwyMSBAQCB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6
OmdlbmVyCiAgICAgICAgIG1faml0LT5qdW1wKCkubGlua1RvKGVudHJ5LnZhbHVlLmNvbnRpbnVl
TGFiZWwsIG1faml0KTsKICAgICB9CiAKKyAgICAvLyBPT1BTCisgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IG1fY29kZSkgeworICAgICAgICBmb3IgKHNpemVfdCBpbnN0SW5kZXggPSAwOyBp
bnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgSW5z
dCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgaWYgKGluc3Qua2lu
ZC5vcGNvZGUgPT0gTW92ZSB8fCBpbnN0LmtpbmQub3Bjb2RlID09IE1vdmVEb3VibGUpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXAoWyZdIChU
bXAmIHRtcCwgQXJnOjpSb2xlLCBCYW5rLCBXaWR0aCkgeworICAgICAgICAgICAgICAgIGlmICgh
dG1wLmlzUmVnKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJObyByZWc6ICIs
IGluc3QpOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQor
CiAgICAgY29udGV4dC5jdXJyZW50QmxvY2sgPSBudWxscHRyOwogICAgIGNvbnRleHQuaW5kZXhJ
bkJsb2NrID0gVUlOVF9NQVg7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tBbmRHZW5lcmF0ZUNvZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJz
QW5kU3RhY2tBbmRHZW5lcmF0ZUNvZGUuaAkocmV2aXNpb24gMjkzOTM1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJh
dGVDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDkgKzU5LDkgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHJlbGVhc2UoVG1wLCBSZWcpOwogICAgIHZvaWQgZmx1c2goVG1wLCBSZWcpOwogICAgIHZv
aWQgc3BpbGwoVG1wLCBSZWcpOwotICAgIHZvaWQgYWxsb2MoVG1wLCBSZWcsIGJvb2wgaXNEZWYp
OworICAgIHZvaWQgYWxsb2MoVG1wLCBSZWcsIEFyZzo6Um9sZSk7CiAgICAgdm9pZCBmcmVlRGVh
ZFRtcHNJZk5lZWRlZCgpOwotICAgIGJvb2wgYXNzaWduVG1wKFRtcCYsIEJhbmssIGJvb2wgaXNE
ZWYpOworICAgIGJvb2wgYXNzaWduVG1wKFRtcCYsIEJhbmssIEFyZzo6Um9sZSk7CiAgICAgdm9p
ZCBidWlsZExpdmVSYW5nZXMoVW5pZmllZFRtcExpdmVuZXNzJik7CiAgICAgYm9vbCBpc0Rpc2Fs
bG93ZWRSZWdpc3RlcihSZWcpOwogCkBAIC04NCw2ICs4NCw5IEBAIHByaXZhdGU6CiAgICAgVG1w
TWFwPHNpemVfdD4gbV9saXZlUmFuZ2VFbmQ7CiAgICAgUmVnaXN0ZXJTZXQgbV9uYW1lZFVzZWRS
ZWdzOwogICAgIFJlZ2lzdGVyU2V0IG1fbmFtZWREZWZkUmVnczsKKyAgICBSZWdpc3RlclNldCBt
X2Vhcmx5Q2xvYmJlcjsKKyAgICBSZWdpc3RlclNldCBtX2xhdGVDbG9iYmVyOworICAgIFJlZ2lz
dGVyU2V0IG1fY2xvYmJlcmVkVG9DbGVhcjsKICAgICBSZWdpc3RlclNldCBtX2FsbG93ZWRSZWdp
c3RlcnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFVuaWZpZWRUbXBMaXZlbmVzcz4gbV9saXZlbmVz
czsKIAo=
</data>
<flag name="commit-queue"
          id="488001"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459017</attachid>
            <date>2022-05-08 11:54:51 -0700</date>
            <delta_ts>2022-05-08 21:46:42 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>17049</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNB
bmRTdGFja0FuZEdlbmVyYXRlQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2Rl
LmNwcAkocmV2aXNpb24gMjkzOTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTg0LDcgKzE4NCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBHZW5lcmF0ZUFuZEFs
bG9jYXRlUmUKICAgICByZWxlYXNlKHRtcCwgcmVnKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lk
IEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmFsbG9jKFRtcCB0bXAsIFJlZyByZWcsIGJv
b2wgaXNEZWYpCitBTFdBWVNfSU5MSU5FIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVy
czo6YWxsb2MoVG1wIHRtcCwgUmVnIHJlZywgQXJnOjpSb2xlIHJvbGUpCiB7CiAgICAgaWYgKFRt
cCBvY2N1cHlpbmdUbXAgPSBtX2N1cnJlbnRBbGxvY2F0aW9uLT5hdChyZWcpKQogICAgICAgICBz
cGlsbChvY2N1cHlpbmdUbXAsIHJlZyk7CkBAIC0xOTcsNyArMTk3LDcgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZQogICAgIG1fYXZhaWxhYmxlUmVnc1t0bXAuYmFu
aygpXS5jbGVhcihyZWcpOwogICAgIG1fY3VycmVudEFsbG9jYXRpb24tPmF0KHJlZykgPSB0bXA7
CiAKLSAgICBpZiAoIWlzRGVmKSB7CisgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkpIHsKICAg
ICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gbV9tYXBbdG1wXS5zcGlsbFNsb3QtPm9mZnNldEZyb21G
UCgpOwogICAgICAgICBpZiAodG1wLmJhbmsoKSA9PSBHUCkKICAgICAgICAgICAgIG1faml0LT5s
b2FkNjQoY2FsbEZyYW1lQWRkcigqbV9qaXQsIG9mZnNldCksIHJlZy5ncHIoKSk7CkBAIC0yMjUs
NDQgKzIyNSw2OCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlCiAg
ICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVy
czo6YXNzaWduVG1wKFRtcCYgdG1wLCBCYW5rIGJhbmssIGJvb2wgaXNEZWYpCitBTFdBWVNfSU5M
SU5FIGJvb2wgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6YXNzaWduVG1wKFRtcCYgdG1w
LCBCYW5rIGJhbmssIEFyZzo6Um9sZSByb2xlKQogewogICAgIEFTU0VSVCghdG1wLmlzUmVnKCkp
OwotICAgIGlmIChSZWcgcmVnID0gbV9tYXBbdG1wXS5yZWcpIHsKLSAgICAgICAgQVNTRVJUKCFt
X25hbWVkRGVmZFJlZ3MuY29udGFpbnMocmVnKSk7Ci0gICAgICAgIHRtcCA9IFRtcChyZWcpOwor
CisgICAgYXV0byBtYXJrUmVnaXN0ZXJBc1VzZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAg
aWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCisgICAgICAgICAgICBtX2Nsb2JiZXJlZFRvQ2xlYXIu
Y2xlYXIocmVnKTsKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgaXQgZG9lc24ndCBtYXR0ZXIg
aWYgd2UgYWRkIGl0IHRvIHRoZSBtX25hbWVkVXNlZFJlZ3Mgb3IgbV9uYW1lZERlZmRSZWdzLiAK
KyAgICAgICAgLy8gV2UganVzdCBuZWVkIHRvIG1hcmsgdGhhdCB3ZSBjYW4ndCB1c2UgaXQgYWdh
aW4gZm9yIGFub3RoZXIgdG1wLgogICAgICAgICBtX25hbWVkVXNlZFJlZ3Muc2V0KHJlZyk7Ci0g
ICAgICAgIEFTU0VSVCghbV9hdmFpbGFibGVSZWdzW2JhbmtdLmdldChyZWcpKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQorICAgIH07CisKKyAgICBib29sIG1heUludGVyZmVyZSA9IG1f
ZWFybHlDbG9iYmVyLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkgfHwgbV9sYXRlQ2xvYmJlci5udW1i
ZXJPZlNldFJlZ2lzdGVycygpOworCisgICAgYXV0byBpbnRlcmZlcmVzV2l0aENsb2JiZXIgPSBb
Jl0gKFJlZyByZWcpIHsKKyAgICAgICAgaWYgKCFtYXlJbnRlcmZlcmUpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIElmIHdlIGVhcmx5IG9yIGxhdGUgVXNlIHNvbWV0aGlu
ZyB0aGF0J3MgZWFybHkgY2xvYmJlcmVkLCB3ZSBpbnRlcmZlcmUuCisgICAgICAgIGlmIChBcmc6
OmlzQW55VXNlKHJvbGUpICYmIG1fZWFybHlDbG9iYmVyLmdldChyZWcpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpICYmIG1fbGF0ZUNs
b2JiZXIuZ2V0KHJlZykpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKEFy
Zzo6YWN0aXZlQXQocm9sZSwgQXJnOjpQaGFzZTo6RWFybHkpICYmIG1fZWFybHlDbG9iYmVyLmdl
dChyZWcpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChBcmc6OmFjdGl2
ZUF0KHJvbGUsIEFyZzo6UGhhc2U6OkxhdGUpICYmIG1fbGF0ZUNsb2JiZXIuZ2V0KHJlZykpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CiAK
LSAgICBpZiAoIW1fYXZhaWxhYmxlUmVnc1tiYW5rXS5udW1iZXJPZlNldFJlZ2lzdGVycygpKQot
ICAgICAgICBmcmVlRGVhZFRtcHNJZk5lZWRlZCgpOworICAgIGlmIChSZWcgcmVnID0gbV9tYXBb
dG1wXS5yZWcpIHsKKyAgICAgICAgaWYgKCFpbnRlcmZlcmVzV2l0aENsb2JiZXIocmVnKSkgewor
ICAgICAgICAgICAgQVNTRVJUKCFtX25hbWVkRGVmZFJlZ3MuY29udGFpbnMocmVnKSk7CisgICAg
ICAgICAgICB0bXAgPSBUbXAocmVnKTsKKyAgICAgICAgICAgIG1hcmtSZWdpc3RlckFzVXNlZChy
ZWcpOworICAgICAgICAgICAgQVNTRVJUKCFtX2F2YWlsYWJsZVJlZ3NbYmFua10uZ2V0KHJlZykp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgc3BpbGwodG1w
LCByZWcpOworICAgIH0KIAogICAgIGlmIChtX2F2YWlsYWJsZVJlZ3NbYmFua10ubnVtYmVyT2ZT
ZXRSZWdpc3RlcnMoKSkgewogICAgICAgICAvLyBXZSBmaXJzdCB0YWtlIGFuIGF2YWlsYWJsZSBy
ZWdpc3Rlci4KICAgICAgICAgZm9yIChSZWcgcmVnIDogbV9yZWdpc3RlcnNbYmFua10pIHsKLSAg
ICAgICAgICAgIGlmIChtX25hbWVkVXNlZFJlZ3MuY29udGFpbnMocmVnKSB8fCBtX25hbWVkRGVm
ZFJlZ3MuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgIGlmIChpbnRlcmZlcmVzV2l0aENsb2Ji
ZXIocmVnKSB8fCBtX25hbWVkVXNlZFJlZ3MuY29udGFpbnMocmVnKSB8fCBtX25hbWVkRGVmZFJl
Z3MuY29udGFpbnMocmVnKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IGlmICghbV9hdmFpbGFibGVSZWdzW2JhbmtdLmNvbnRhaW5zKHJlZykpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBtX25hbWVkVXNlZFJlZ3Muc2V0KHJlZyk7IC8vIEF0
IHRoaXMgcG9pbnQsIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHdlIGFkZCBpdCB0byB0aGUgbV9uYW1l
ZFVzZWRSZWdzIG9yIG1fbmFtZWREZWZkUmVncy4gV2UganVzdCBuZWVkIHRvIG1hcmsgdGhhdCB3
ZSBjYW4ndCB1c2UgaXQgYWdhaW4uCi0gICAgICAgICAgICBhbGxvYyh0bXAsIHJlZywgaXNEZWYp
OworCisgICAgICAgICAgICBtYXJrUmVnaXN0ZXJBc1VzZWQocmVnKTsKKyAgICAgICAgICAgIGFs
bG9jKHRtcCwgcmVnLCByb2xlKTsKICAgICAgICAgICAgIHRtcCA9IFRtcChyZWcpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgIH0KIAogICAgIC8vIE5vdGhpbmcgd2FzIGF2YWlsYWJsZSwgbGV0
J3MgbWFrZSBzb21lIHJvb20uCiAgICAgZm9yIChSZWcgcmVnIDogbV9yZWdpc3RlcnNbYmFua10p
IHsKLSAgICAgICAgaWYgKG1fbmFtZWRVc2VkUmVncy5jb250YWlucyhyZWcpIHx8IG1fbmFtZWRE
ZWZkUmVncy5jb250YWlucyhyZWcpKQorICAgICAgICBpZiAoaW50ZXJmZXJlc1dpdGhDbG9iYmVy
KHJlZykgfHwgbV9uYW1lZFVzZWRSZWdzLmNvbnRhaW5zKHJlZykgfHwgbV9uYW1lZERlZmRSZWdz
LmNvbnRhaW5zKHJlZykpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBtX25hbWVk
VXNlZFJlZ3Muc2V0KHJlZyk7Ci0KLSAgICAgICAgYWxsb2ModG1wLCByZWcsIGlzRGVmKTsKKyAg
ICAgICAgbWFya1JlZ2lzdGVyQXNVc2VkKHJlZyk7CisgICAgICAgIGFsbG9jKHRtcCwgcmVnLCBy
b2xlKTsKICAgICAgICAgdG1wID0gVG1wKHJlZyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KQEAgLTU0MCw2ICs1NjQsOSBAQCB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6
OmdlbmVyCiAKICAgICAgICAgICAgIG1fbmFtZWRVc2VkUmVncyA9IFJlZ2lzdGVyU2V0KCk7CiAg
ICAgICAgICAgICBtX25hbWVkRGVmZFJlZ3MgPSBSZWdpc3RlclNldCgpOworICAgICAgICAgICAg
bV9lYXJseUNsb2JiZXIgPSBSZWdpc3RlclNldCgpOworICAgICAgICAgICAgbV9sYXRlQ2xvYmJl
ciA9IFJlZ2lzdGVyU2V0KCk7CisgICAgICAgICAgICBtX2Nsb2JiZXJlZFRvQ2xlYXIgPSBSZWdp
c3RlclNldCgpOwogCiAgICAgICAgICAgICBib29sIG5lZWRzVG9HZW5lcmF0ZSA9IChbJl0gKCkg
LT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjb25zaWRlciB0
cnlpbmcgdG8gZmlndXJlIG91dCBpZiB3ZSBjYW4gYWxzbyBlbGlkZSBNb3YzMnMKQEAgLTYxNCw0
MyArNjQxLDUxIEBAIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6Z2VuZXIKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKIAotICAgICAgICAgICAgUmVnaXN0ZXJT
ZXQgY2xvYmJlcmVkUmVnaXN0ZXJzOwotICAgICAgICAgICAgUmVnaXN0ZXJTZXQgZWFybHlOZXh0
Q2xvYmJlcmVkUmVnaXN0ZXJzOwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEluc3Qq
IG5leHRJbnN0ID0gYmxvY2stPmdldChpbnN0SW5kZXggKyAxKTsKLSAgICAgICAgICAgICAgICBp
ZiAoaW5zdC5raW5kLm9wY29kZSA9PSBQYXRjaCB8fCAobmV4dEluc3QgJiYgbmV4dEluc3QtPmtp
bmQub3Bjb2RlID09IFBhdGNoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdC5raW5k
Lm9wY29kZSA9PSBQYXRjaCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJlZFJlZ2lz
dGVycy5tZXJnZShpbnN0LmV4dHJhQ2xvYmJlcmVkUmVncygpKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG5leHRJbnN0ICYmIG5leHRJbnN0LT5raW5kLm9wY29kZSA9PSBQYXRjaCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGVhcmx5TmV4dENsb2JiZXJlZFJlZ2lzdGVycy5tZXJnZShuZXh0
SW5zdC0+ZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3MoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
Y2xvYmJlcmVkUmVnaXN0ZXJzLmZpbHRlcihtX2FsbG93ZWRSZWdpc3RlcnMpOwotICAgICAgICAg
ICAgICAgICAgICBjbG9iYmVyZWRSZWdpc3RlcnMuZXhjbHVkZShtX25hbWVkRGVmZFJlZ3MpOwot
ICAgICAgICAgICAgICAgICAgICBlYXJseU5leHRDbG9iYmVyZWRSZWdpc3RlcnMuZmlsdGVyKG1f
YWxsb3dlZFJlZ2lzdGVycyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgbV9uYW1lZERlZmRSZWdz
Lm1lcmdlKGNsb2JiZXJlZFJlZ2lzdGVycyk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKGluc3Qua2luZC5vcGNvZGUgPT0gUGF0Y2gpIHsKKyAgICAgICAgICAgICAgICBtX2Vh
cmx5Q2xvYmJlci5tZXJnZShpbnN0LmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCkpOworICAgICAg
ICAgICAgICAgIG1fbGF0ZUNsb2JiZXIubWVyZ2UoaW5zdC5leHRyYUNsb2JiZXJlZFJlZ3MoKSk7
CisKKyAgICAgICAgICAgICAgICBtX2Vhcmx5Q2xvYmJlci5maWx0ZXIobV9hbGxvd2VkUmVnaXN0
ZXJzKTsKKyAgICAgICAgICAgICAgICBtX2xhdGVDbG9iYmVyLmZpbHRlcihtX2FsbG93ZWRSZWdp
c3RlcnMpOworCisgICAgICAgICAgICAgICAgbV9jbG9iYmVyZWRUb0NsZWFyLm1lcmdlKG1fZWFy
bHlDbG9iYmVyKTsKKyAgICAgICAgICAgICAgICBtX2Nsb2JiZXJlZFRvQ2xlYXIubWVyZ2UobV9s
YXRlQ2xvYmJlcik7CisgICAgICAgICAgICAgICAgbV9jbG9iYmVyZWRUb0NsZWFyLmV4Y2x1ZGUo
bV9uYW1lZERlZmRSZWdzKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYXV0byBhbGxv
Y05hbWVkID0gWyZdIChjb25zdCBSZWdpc3RlclNldCYgbmFtZWQsIGJvb2wgaXNEZWYpIHsKKyAg
ICAgICAgICAgIGF1dG8gYWxsb2NOYW1lZCA9IFsmXSAoY29uc3QgUmVnaXN0ZXJTZXQmIG5hbWVk
LCBBcmc6OlJvbGUgcm9sZSkgewogICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IG5hbWVk
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChUbXAgb2NjdXB5aW5nVG1wID0gY3VycmVudEFs
bG9jYXRpb25bcmVnXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9jY3VweWluZ1Rt
cCA9PSBUbXAocmVnKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGZyZWVEZWFkVG1wc0lm
TmVlZGVkKCk7IC8vIFdlIGRvbid0IHdhbnQgdG8gc3BpbGwgYSBkZWFkIHRtcC4KLSAgICAgICAg
ICAgICAgICAgICAgYWxsb2MoVG1wKHJlZyksIHJlZywgaXNEZWYpOworICAgICAgICAgICAgICAg
ICAgICBhbGxvYyhUbXAocmVnKSwgcmVnLCByb2xlKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9OwogCi0gICAgICAgICAgICBhbGxvY05hbWVkKG1fbmFtZWRVc2VkUmVncywgZmFs
c2UpOyAvLyBNdXN0IGNvbWUgYmVmb3JlIHRoZSBkZWZkIHJlZ2lzdGVycyBzaW5jZSB3ZSBtYXkg
dXNlIGFuZCBkZWYgdGhlIHNhbWUgcmVnaXN0ZXIuCi0gICAgICAgICAgICBhbGxvY05hbWVkKG1f
bmFtZWREZWZkUmVncywgdHJ1ZSk7CisgICAgICAgICAgICBhdXRvIHNwaWxsSWZOZWVkZWQgPSBb
Jl0gKGNvbnN0IFJlZ2lzdGVyU2V0JiBzZXQpIHsKKyAgICAgICAgICAgICAgICBmb3IgKFJlZyBy
ZWcgOiBzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFRtcCB0bXAgPSBtX2N1cnJlbnRB
bGxvY2F0aW9uLT5hdChyZWcpKQorICAgICAgICAgICAgICAgICAgICAgICAgc3BpbGwodG1wLCBy
ZWcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIC8v
IFRoaXMgaXMgbmVlZGVkIGZvciBjb3JyZWN0bmVzcyBiZWNhdXNlIHdlIHJldXNlIHN0YWNrIHNs
b3RzIGJldHdlZW4KKyAgICAgICAgICAgIC8vIFRtcHMgdGhhdCBkb24ndCBpbnRlZmVyZS4gU28g
d2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgc3BpbGwgYQorICAgICAgICAgICAgLy8gZGVh
ZCBUbXAgdG8gYSBsaXZlIFRtcCdzIHNsb3QuCisgICAgICAgICAgICBmcmVlRGVhZFRtcHNJZk5l
ZWRlZCgpOworCisgICAgICAgICAgICBzcGlsbElmTmVlZGVkKG1fZWFybHlDbG9iYmVyKTsKKyAg
ICAgICAgICAgIHNwaWxsSWZOZWVkZWQobV9sYXRlQ2xvYmJlcik7CisKKyAgICAgICAgICAgIGFs
bG9jTmFtZWQobV9uYW1lZFVzZWRSZWdzLCBBcmc6OlJvbGU6OlVzZSk7IC8vIE11c3QgY29tZSBi
ZWZvcmUgdGhlIGRlZmQgcmVnaXN0ZXJzIHNpbmNlIHdlIG1heSB1c2UgYW5kIGRlZiB0aGUgc2Ft
ZSByZWdpc3Rlci4KKyAgICAgICAgICAgIGFsbG9jTmFtZWQobV9uYW1lZERlZmRSZWdzLCBBcmc6
OlJvbGU6OkRlZik7CiAKICAgICAgICAgICAgIGlmIChuZWVkc1RvR2VuZXJhdGUpIHsKICAgICAg
ICAgICAgICAgICBhdXRvIHRyeUFsbG9jYXRlID0gWyZdIHsKLSAgICAgICAgICAgICAgICAgICAg
VmVjdG9yPFRtcCosIDg+IHVzZXNUb0FsbG9jOwotICAgICAgICAgICAgICAgICAgICBWZWN0b3I8
VG1wKiwgOD4gZGVmc1RvQWxsb2M7CisgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnBh
aXI8VG1wKiwgQXJnOjpSb2xlPiwgOD4gdXNlc1RvQWxsb2M7CisgICAgICAgICAgICAgICAgICAg
IFZlY3RvcjxzdGQ6OnBhaXI8VG1wKiwgQXJnOjpSb2xlPiwgOD4gZGVmc1RvQWxsb2M7CiAKICAg
ICAgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wKFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9s
ZSByb2xlLCBCYW5rLCBXaWR0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5p
c1JlZygpKQpAQCAtNjU4LDE1ICs2OTMsMTggQEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVn
aXN0ZXJzOjpnZW5lcgogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB0cmVhdCBVc2Ur
RGVmIGFzIGEgdXNlLgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uo
cm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlc1RvQWxsb2MuYXBwZW5kKCZ0
bXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXNUb0FsbG9jLmFwcGVuZChzdGQ6
Om1ha2VfcGFpcigmdG1wLCByb2xlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChBcmc6OmlzQW55RGVmKHJvbGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZnNU
b0FsbG9jLmFwcGVuZCgmdG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZzVG9B
bGxvYy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoJnRtcCwgcm9sZSkpOwogICAgICAgICAgICAgICAg
ICAgICB9KTsKIAotICAgICAgICAgICAgICAgICAgICBhdXRvIHRyeUFsbG9jYXRlVG1wcyA9IFsm
XSAoYXV0byYgdmVjdG9yLCBib29sIGlzRGVmKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8g
dHJ5QWxsb2NhdGVUbXBzID0gWyZdIChhdXRvJiB2ZWN0b3IpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KFRtcCogdG1wIDogdmVjdG9yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Mg
Jj0gYXNzaWduVG1wKCp0bXAsIHRtcC0+YmFuaygpLCBpc0RlZik7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHN0ZDo6cGFpcjxUbXAqLCBBcmc6OlJvbGU+IHBhaXIgOiB2ZWN0b3IpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbXAmIHRtcCA9ICpzdGQ6OmdldDwwPihwYWly
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc6OlJvbGUgcm9sZSA9IHN0ZDo6Z2V0
PDE+KHBhaXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgJj0gYXNzaWdu
VG1wKHRtcCwgdG1wLmJhbmsoKSwgcm9sZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzczsKICAgICAgICAgICAgICAgICAg
ICAgfTsKIApAQCAtNjc2LDggKzcxNCw4IEBAIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lz
dGVyczo6Z2VuZXIKICAgICAgICAgICAgICAgICAgICAgLy8gc29tZSB0bXBzIG1heSBib3RoIGJl
IHVzZWQgYW5kIGRlZmQuIFNvIHdlIGhhbmRsZSB1c2VzIGZpcnN0IHNpbmNlIGZvckVhY2hUbXAg
Y291bGQKICAgICAgICAgICAgICAgICAgICAgLy8gd2FsayB1c2VzL2RlZnMgaW4gYW55IG9yZGVy
LgogICAgICAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICBzdWNjZXNzICY9IHRyeUFsbG9jYXRlVG1wcyh1c2VzVG9BbGxvYywgZmFsc2UpOwot
ICAgICAgICAgICAgICAgICAgICBzdWNjZXNzICY9IHRyeUFsbG9jYXRlVG1wcyhkZWZzVG9BbGxv
YywgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgJj0gdHJ5QWxsb2NhdGVUbXBz
KHVzZXNUb0FsbG9jKTsKKyAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyAmPSB0cnlBbGxvY2F0
ZVRtcHMoZGVmc1RvQWxsb2MpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzczsK
ICAgICAgICAgICAgICAgICB9OwogCkBAIC03MjksNyArNzY3LDYgQEAgdm9pZCBHZW5lcmF0ZUFu
ZEFsbG9jYXRlUmVnaXN0ZXJzOjpnZW5lcgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBp
ZiAobV9jb2RlLm5lZWRzVXNlZFJlZ2lzdGVycygpICYmIGluc3Qua2luZC5vcGNvZGUgPT0gUGF0
Y2gpIHsKLSAgICAgICAgICAgICAgICBmcmVlRGVhZFRtcHNJZk5lZWRlZCgpOwogICAgICAgICAg
ICAgICAgIFJlZ2lzdGVyU2V0IHJlZ2lzdGVyU2V0OwogICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY3VycmVudEFsbG9jYXRpb24uc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKGN1cnJlbnRBbGxvY2F0aW9uW2ldKQpAQCAtNzM4LDEzICs3NzUsMTAg
QEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpnZW5lcgogICAgICAgICAgICAg
ICAgIGluc3QucmVwb3J0VXNlZFJlZ2lzdGVycyhyZWdpc3RlclNldCk7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGF1dG8gY2xvYmJlciA9IFsmXSAoY29uc3QgUmVnaXN0ZXJTZXQmIHNl
dCkgewotICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHNldCkgewotICAgICAgICAgICAg
ICAgICAgICBUbXAgdG1wKHJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChjdXJyZW50
QWxsb2NhdGlvbltyZWddID09IHRtcCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fYXZhaWxhYmxl
UmVnc1t0bXAuYmFuaygpXS5zZXQocmVnKTsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50
QWxsb2NhdGlvbi0+YXQocmVnKSA9IFRtcCgpOwotICAgICAgICAgICAgICAgICAgICBtX21hcFt0
bXBdLnJlZyA9IFJlZygpOworICAgICAgICAgICAgYXV0byBoYW5kbGVDbG9iYmVyID0gWyZdIHsK
KyAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiBtX2Nsb2JiZXJlZFRvQ2xlYXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKFRtcCB0bXAgPSBtX2N1cnJlbnRBbGxvY2F0aW9uLT5hdChy
ZWcpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSh0bXAsIHJlZyk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfTsKIApAQCAtNzU0LDE0ICs3ODgsMTEgQEAgdm9pZCBH
ZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpnZW5lcgogICAgICAgICAgICAgICAgICAgICBq
dW1wID0gaW5zdC5nZW5lcmF0ZSgqbV9qaXQsIGNvbnRleHQpOwogICAgICAgICAgICAgICAgIEFT
U0VSVF9VTlVTRUQoanVtcCwgIWp1bXAuaXNTZXQoKSk7CiAKLSAgICAgICAgICAgICAgICBhbGxv
Y05hbWVkKGVhcmx5TmV4dENsb2JiZXJlZFJlZ2lzdGVycywgdHJ1ZSk7Ci0gICAgICAgICAgICAg
ICAgY2xvYmJlcmVkUmVnaXN0ZXJzLm1lcmdlKGVhcmx5TmV4dENsb2JiZXJlZFJlZ2lzdGVycyk7
Ci0gICAgICAgICAgICAgICAgY2xvYmJlcihjbG9iYmVyZWRSZWdpc3RlcnMpOworICAgICAgICAg
ICAgICAgIGhhbmRsZUNsb2JiZXIoKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgQVNTRVJUKG5lZWRzVG9HZW5lcmF0ZSk7CiAKLSAgICAgICAgICAgICAgICBjbG9iYmVy
KGNsb2JiZXJlZFJlZ2lzdGVycyk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGVhcmx5TmV4dENs
b2JiZXJlZFJlZ2lzdGVycy5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIGhhbmRsZUNsb2Ji
ZXIoKTsKIAogICAgICAgICAgICAgICAgIGlmIChibG9jay0+bnVtU3VjY2Vzc29ycygpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIEJ5IGRlZmF1bHQsIHdlIHNwaWxsIGV2ZXJ5dGhpbmcgYmV0
d2VlbiBibG9jayBib3VuZGFyaWVzLiBIb3dldmVyLCB3ZSBoYXZlIGEgc21hbGwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0Fu
ZEdlbmVyYXRlQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0FuZEdlbmVyYXRlQ29kZS5oCShyZXZpc2lv
biAyOTM5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVn
aXN0ZXJzQW5kU3RhY2tBbmRHZW5lcmF0ZUNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTksOSAr
NTksOSBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVsZWFzZShUbXAsIFJlZyk7CiAgICAgdm9pZCBm
bHVzaChUbXAsIFJlZyk7CiAgICAgdm9pZCBzcGlsbChUbXAsIFJlZyk7Ci0gICAgdm9pZCBhbGxv
YyhUbXAsIFJlZywgYm9vbCBpc0RlZik7CisgICAgdm9pZCBhbGxvYyhUbXAsIFJlZywgQXJnOjpS
b2xlKTsKICAgICB2b2lkIGZyZWVEZWFkVG1wc0lmTmVlZGVkKCk7Ci0gICAgYm9vbCBhc3NpZ25U
bXAoVG1wJiwgQmFuaywgYm9vbCBpc0RlZik7CisgICAgYm9vbCBhc3NpZ25UbXAoVG1wJiwgQmFu
aywgQXJnOjpSb2xlKTsKICAgICB2b2lkIGJ1aWxkTGl2ZVJhbmdlcyhVbmlmaWVkVG1wTGl2ZW5l
c3MmKTsKICAgICBib29sIGlzRGlzYWxsb3dlZFJlZ2lzdGVyKFJlZyk7CiAKQEAgLTg0LDYgKzg0
LDkgQEAgcHJpdmF0ZToKICAgICBUbXBNYXA8c2l6ZV90PiBtX2xpdmVSYW5nZUVuZDsKICAgICBS
ZWdpc3RlclNldCBtX25hbWVkVXNlZFJlZ3M7CiAgICAgUmVnaXN0ZXJTZXQgbV9uYW1lZERlZmRS
ZWdzOworICAgIFJlZ2lzdGVyU2V0IG1fZWFybHlDbG9iYmVyOworICAgIFJlZ2lzdGVyU2V0IG1f
bGF0ZUNsb2JiZXI7CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWRUb0NsZWFyOwogICAgIFJl
Z2lzdGVyU2V0IG1fYWxsb3dlZFJlZ2lzdGVyczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5pZmll
ZFRtcExpdmVuZXNzPiBtX2xpdmVuZXNzOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL3Rlc3RhaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvdGVzdGFpci5jcHAJKHJldmlzaW9uIDI5MzkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvdGVzdGFpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOTIsNiArMjM5Miw3
MSBAQCB2b2lkIHRlc3RaRGVmT2ZTcGlsbFNsb3RXaXRoT2Zmc2V0TmVlZGluCiAgICAgQ0hFQ0so
cmVzdWx0ID09IHN0YXRpY19jYXN0PGludDMyX3Q+KG51bWJlck9mU2xvdHMpKTsKIH0KIAordm9p
ZCB0ZXN0RWFybHlBbmRMYXRlVXNlT2ZTYW1lVG1wKCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVm
YXVsdEIzT3B0TGV2ZWwoKSAhPSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWFrUmFuZG9t
IHdlYWtSYW5kb207CisgICAgc2l6ZV90IG51bVRtcHMgPSBSZWdpc3RlclNldDo6YWxsR1BScygp
Lm51bWJlck9mU2V0UmVnaXN0ZXJzKCk7CisgICAgaW50NjRfdCBleHBlY3RlZFJlc3VsdCA9IDA7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1UbXBzOyArK2kpCisgICAgICAgIGV4cGVj
dGVkUmVzdWx0ICs9IGk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgNjA7ICsraikg
eworICAgICAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgICAgIENvZGUmIGNvZGUgPSBwcm9j
LmNvZGUoKTsKKworICAgICAgICBCMzo6QWlyOjpTcGVjaWFsKiBwYXRjaHBvaW50U3BlY2lhbCA9
IGNvZGUuYWRkU3BlY2lhbChtYWtlVW5pcXVlPEIzOjpQYXRjaHBvaW50U3BlY2lhbD4oKSk7CisK
KyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgVmVj
dG9yPFRtcD4gdG1wczsKKyAgICAgICAgVG1wIHJlc3VsdCA9IGNvZGUubmV3VG1wKEIzOjpHUCk7
CisgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgcmVzdWx0
KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1UbXBzOyArK2kpIHsKKyAgICAg
ICAgICAgIFRtcCB0bXAgPSBjb2RlLm5ld1RtcChCMzo6R1ApOworICAgICAgICAgICAgdG1wcy5h
cHBlbmQodG1wKTsKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6
OmltbShpKSwgdG1wKTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIHJhbmQgPSB3ZWFrUmFuZG9tLmdldFVpbnQzMih0bXBzLnNpemUoKSk7CisgICAgICAgICAg
ICBCMzo6VmFsdWUqIGR1bW15VmFsdWUgPSBwcm9jLmFkZENvbnN0YW50KEIzOjpPcmlnaW4oKSwg
QjM6OkludDY0LCAwKTsKKworICAgICAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hw
b2ludCA9IHByb2MuYWRkPEIzOjpQYXRjaHBvaW50VmFsdWU+KEIzOjpWb2lkLCBCMzo6T3JpZ2lu
KCkpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGR1bW15VmFsdWUsIEIzOjpWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChkdW1t
eVZhbHVlLCBCMzo6VmFsdWVSZXA6OlNvbWVMYXRlUmVnaXN0ZXIpOworICAgICAgICAgICAgcGF0
Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlND
YWxsKCkpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
eworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFSZWdpc3RlclNldDo6dm9sYXRpbGVS
ZWdpc3RlcnNGb3JKU0NhbGwoKS5nZXQocGFyYW1zWzFdLmdwcigpKSk7CisKKyAgICAgICAgICAg
ICAgICBhdXRvIGdvb2QgPSBqaXQuYnJhbmNoNjQoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgcGFyYW1z
WzFdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihyYW5kKSk7CisgICAgICAgICAg
ICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICAgICAgICAgICAgICBnb29kLmxpbmsoJmppdCk7
CisKKyAgICAgICAgICAgICAgICBhdXRvIGdvb2QyID0gaml0LmJyYW5jaDY0KENDYWxsSGVscGVy
czo6RXF1YWwsIHBhcmFtc1swXS5ncHIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmFu
ZCkpOworICAgICAgICAgICAgICAgIGppdC5icmVha3BvaW50KCk7CisgICAgICAgICAgICAgICAg
Z29vZDIubGluaygmaml0KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBJbnN0IGlu
c3QoUGF0Y2gsIHBhdGNocG9pbnQsIEFyZzo6c3BlY2lhbChwYXRjaHBvaW50U3BlY2lhbCkpOwor
CisgICAgICAgICAgICBUbXAgdG1wID0gdG1wc1tyYW5kXTsKKyAgICAgICAgICAgIGluc3QuYXJn
cy5hcHBlbmQodG1wKTsKKyAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQodG1wKTsKKyAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZChpbnN0KTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoVG1w
IHRtcCA6IHRtcHMpCisgICAgICAgICAgICByb290LT5hcHBlbmQoQWRkNjQsIG51bGxwdHIsIHRt
cCwgcmVzdWx0KTsKKyAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIHJlc3VsdCwg
VG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgICAgIHJvb3QtPmFwcGVuZChSZXQ2
NCwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICAgICAgaW50
NjRfdCBhY3R1YWxSZXN1bHQgPSBjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MpOworICAgICAg
ICBDSEVDSyhhY3R1YWxSZXN1bHQgPT0gZXhwZWN0ZWRSZXN1bHQpOworICAgIH0KK30KKwogI2Rl
ZmluZSBQUkVGSVggIk8iLCBPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpLCAiOiAiCiAKICNk
ZWZpbmUgUlVOKHRlc3QpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBA
IC0yNDg5LDYgKzI1NTQsOCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAKICAgICBS
VU4odGVzdFpEZWZPZlNwaWxsU2xvdFdpdGhPZmZzZXROZWVkaW5nVG9CZU1hdGVyaWFsaXplZElu
QVJlZ2lzdGVyKCkpOwogCisgICAgUlVOKHRlc3RFYXJseUFuZExhdGVVc2VPZlNhbWVUbXAoKSk7
CisKICAgICBpZiAodGFza3MuaXNFbXB0eSgpKQogICAgICAgICB1c2FnZSgpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZpc2lvbiAyOTM5MzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBz
dGF0aWMgUmVnaXN0ZXJTZXQgd2ViQXNzZW1ibHlDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7IC8vIFJl
Z2lzdGVycyBzYXZlZCBhbmQgdXNlZCBieSB0aGUgV2ViQXNzZW1ibHkgSklULgogI2VuZGlmCi0g
ICAgc3RhdGljIFJlZ2lzdGVyU2V0IHZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCk7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZ2lzdGVyU2V0IHZvbGF0aWxlUmVnaXN0ZXJzRm9y
SlNDYWxsKCk7CiAgICAgc3RhdGljIFJlZ2lzdGVyU2V0IHN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpOyAvLyBUaGUgdW5pb24gb2YgY2FsbGVlIHNhdmVzIGFuZCBzcGVjaWFsIHJlZ2lzdGVycy4K
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVnaXN0ZXJTZXQgbWFjcm9TY3JhdGNoUmVn
aXN0ZXJzKCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZ2lzdGVyU2V0IGFsbEdQ
UnMoKTsK
</data>
<flag name="commit-queue"
          id="488026"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459022</attachid>
            <date>2022-05-08 21:46:42 -0700</date>
            <delta_ts>2022-05-08 22:02:38 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>19998</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNB
bmRTdGFja0FuZEdlbmVyYXRlQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2Rl
LmNwcAkocmV2aXNpb24gMjkzOTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzgsNyArNzgsNyBAQCB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6
OmJ1aWxkCiB7CiAgICAgbV9saXZlUmFuZ2VFbmQgPSBUbXBNYXA8c2l6ZV90PihtX2NvZGUsIDAp
OwogCi0gICAgbV9nbG9iYWxJbnN0SW5kZXggPSAwOworICAgIG1fZ2xvYmFsSW5zdEluZGV4ID0g
MTsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CiAgICAgICAgIGZvciAo
VG1wIHRtcCA6IGxpdmVuZXNzLmxpdmVBdEhlYWQoYmxvY2spKSB7CiAgICAgICAgICAgICBpZiAo
IXRtcC5pc1JlZygpKQpAQCAtMTg0LDcgKzE4NCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBHZW5l
cmF0ZUFuZEFsbG9jYXRlUmUKICAgICByZWxlYXNlKHRtcCwgcmVnKTsKIH0KIAotQUxXQVlTX0lO
TElORSB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmFsbG9jKFRtcCB0bXAsIFJl
ZyByZWcsIGJvb2wgaXNEZWYpCitBTFdBWVNfSU5MSU5FIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0
ZVJlZ2lzdGVyczo6YWxsb2MoVG1wIHRtcCwgUmVnIHJlZywgQXJnOjpSb2xlIHJvbGUpCiB7CiAg
ICAgaWYgKFRtcCBvY2N1cHlpbmdUbXAgPSBtX2N1cnJlbnRBbGxvY2F0aW9uLT5hdChyZWcpKQog
ICAgICAgICBzcGlsbChvY2N1cHlpbmdUbXAsIHJlZyk7CkBAIC0xOTcsNyArMTk3LDcgQEAgQUxX
QVlTX0lOTElORSB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZQogICAgIG1fYXZhaWxhYmxlUmVn
c1t0bXAuYmFuaygpXS5jbGVhcihyZWcpOwogICAgIG1fY3VycmVudEFsbG9jYXRpb24tPmF0KHJl
ZykgPSB0bXA7CiAKLSAgICBpZiAoIWlzRGVmKSB7CisgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9s
ZSkpIHsKICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gbV9tYXBbdG1wXS5zcGlsbFNsb3QtPm9m
ZnNldEZyb21GUCgpOwogICAgICAgICBpZiAodG1wLmJhbmsoKSA9PSBHUCkKICAgICAgICAgICAg
IG1faml0LT5sb2FkNjQoY2FsbEZyYW1lQWRkcigqbV9qaXQsIG9mZnNldCksIHJlZy5ncHIoKSk7
CkBAIC0yMDgsNjEgKzIwOCw4NyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgR2VuZXJhdGVBbmRBbGxv
Y2F0ZVJlCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJz
OjpmcmVlRGVhZFRtcHNJZk5lZWRlZCgpCiB7Ci0gICAgaWYgKG1fZGlkQWxyZWFkeUZyZWVEZWFk
U2xvdHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGlkQWxyZWFkeUZyZWVEZWFkU2xvdHMg
PSB0cnVlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50QWxsb2NhdGlvbi0+
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVG1wIHRtcCA9IG1fY3VycmVudEFsbG9jYXRpb24tPmF0
KGkpOwotICAgICAgICBpZiAoIXRtcCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBp
ZiAodG1wLmlzUmVnKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKG1fbGl2
ZVJhbmdlRW5kW3RtcF0gPj0gbV9nbG9iYWxJbnN0SW5kZXgpCi0gICAgICAgICAgICBjb250aW51
ZTsKKyAgICB3aGlsZSAobV9uZXh0SW5kZXhUb0ZyZWUgPD0gbV9nbG9iYWxJbnN0SW5kZXgpIHsK
KyAgICAgICAgYXV0byBpdGVyID0gbV90bXBzVG9SZWxlYXNlLmZpbmQobV9uZXh0SW5kZXhUb0Zy
ZWUpOworICAgICAgICBpZiAoaXRlciAhPSBtX3RtcHNUb1JlbGVhc2UuZW5kKCkpIHsKKyAgICAg
ICAgICAgIGZvciAoVG1wIHRtcCA6IGl0ZXItPnZhbHVlKSB7CisgICAgICAgICAgICAgICAgQVNT
RVJUKG1fbGl2ZVJhbmdlRW5kW3RtcF0gPCBtX25leHRJbmRleFRvRnJlZSk7CisgICAgICAgICAg
ICAgICAgaWYgKFJlZyByZWcgPSBtX21hcFt0bXBdLnJlZykKKyAgICAgICAgICAgICAgICAgICAg
cmVsZWFzZSh0bXAsIHJlZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgICAgICBy
ZWxlYXNlKHRtcCwgUmVnOjpmcm9tSW5kZXgoaSkpOworICAgICAgICArK21fbmV4dEluZGV4VG9G
cmVlOwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIEdlbmVyYXRlQW5kQWxsb2NhdGVS
ZWdpc3RlcnM6OmFzc2lnblRtcChUbXAmIHRtcCwgQmFuayBiYW5rLCBib29sIGlzRGVmKQorQUxX
QVlTX0lOTElORSBib29sIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmFzc2lnblRtcChU
bXAmIHRtcCwgQmFuayBiYW5rLCBBcmc6OlJvbGUgcm9sZSkKIHsKICAgICBBU1NFUlQoIXRtcC5p
c1JlZygpKTsKLSAgICBpZiAoUmVnIHJlZyA9IG1fbWFwW3RtcF0ucmVnKSB7Ci0gICAgICAgIEFT
U0VSVCghbV9uYW1lZERlZmRSZWdzLmNvbnRhaW5zKHJlZykpOwotICAgICAgICB0bXAgPSBUbXAo
cmVnKTsKKworICAgIGF1dG8gbWFya1JlZ2lzdGVyQXNVc2VkID0gWyZdIChSZWcgcmVnKSB7Cisg
ICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpKQorICAgICAgICAgICAgbV9jbG9iYmVyZWRU
b0NsZWFyLmNsZWFyKHJlZyk7CisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIGl0IGRvZXNuJ3Qg
bWF0dGVyIGlmIHdlIGFkZCBpdCB0byB0aGUgbV9uYW1lZFVzZWRSZWdzIG9yIG1fbmFtZWREZWZk
UmVncy4gCisgICAgICAgIC8vIFdlIGp1c3QgbmVlZCB0byBtYXJrIHRoYXQgd2UgY2FuJ3QgdXNl
IGl0IGFnYWluIGZvciBhbm90aGVyIHRtcC4KICAgICAgICAgbV9uYW1lZFVzZWRSZWdzLnNldChy
ZWcpOwotICAgICAgICBBU1NFUlQoIW1fYXZhaWxhYmxlUmVnc1tiYW5rXS5nZXQocmVnKSk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICB9OworCisgICAgYm9vbCBtaWdodEludGVy
ZmVyZSA9IG1fZWFybHlDbG9iYmVyLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkgfHwgbV9sYXRlQ2xv
YmJlci5udW1iZXJPZlNldFJlZ2lzdGVycygpOworCisgICAgYXV0byBpbnRlcmZlcmVzV2l0aENs
b2JiZXIgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgaWYgKCFtaWdodEludGVyZmVyZSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkg
JiYgbV9lYXJseUNsb2JiZXIuZ2V0KHJlZykpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgaWYgKEFyZzo6aXNBbnlEZWYocm9sZSkgJiYgbV9sYXRlQ2xvYmJlci5nZXQocmVnKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoQXJnOjphY3RpdmVBdChyb2xl
LCBBcmc6OlBoYXNlOjpFYXJseSkgJiYgbV9lYXJseUNsb2JiZXIuZ2V0KHJlZykpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKEFyZzo6YWN0aXZlQXQocm9sZSwgQXJnOjpQ
aGFzZTo6TGF0ZSkgJiYgbV9sYXRlQ2xvYmJlci5nZXQocmVnKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKworICAgIGlmIChSZWcgcmVn
ID0gbV9tYXBbdG1wXS5yZWcpIHsKKyAgICAgICAgaWYgKCFpbnRlcmZlcmVzV2l0aENsb2JiZXIo
cmVnKSkgeworICAgICAgICAgICAgQVNTRVJUKCFtX25hbWVkRGVmZFJlZ3MuY29udGFpbnMocmVn
KSk7CisgICAgICAgICAgICB0bXAgPSBUbXAocmVnKTsKKyAgICAgICAgICAgIG1hcmtSZWdpc3Rl
ckFzVXNlZChyZWcpOworICAgICAgICAgICAgQVNTRVJUKCFtX2F2YWlsYWJsZVJlZ3NbYmFua10u
Z2V0KHJlZykpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gVGhpcyBpcyBhIHJhcmUgY2FzZSB3aGVuIHdlJ3ZlIGFscmVhZHkgYWxsb2NhdGVkIGEgVG1w
IGluIHNvbWUgd2F5LCBidXQgYW5vdGhlciAKKyAgICAgICAgLy8gUm9sZSBvZiB0aGUgVG1wIGlt
cG9zZXMgc29tZSByZXN0cmljdGlvbiBvbiB0aGUgcmVnaXN0ZXIgdmFsdWUuIEUuZywgaWYKKyAg
ICAgICAgLy8gd2UgaGF2ZSBhIHByb2dyYW0gbGlrZToKKyAgICAgICAgLy8gUGF0Y2ggVXNlOnRt
cDEsIExhdGVVc2U6dG1wMSwgbGF0ZUNsb2JiZXI6eDAKKyAgICAgICAgLy8gVGhlIGZpcnN0IHVz
ZSBvZiB0bXAxIGNhbiBiZSBhbGxvY2F0ZWQgdG8geDAsIGJ1dCB0aGUgc2Vjb25kIGNhbm5vdC4K
KyAgICAgICAgc3BpbGwodG1wLCByZWcpOwogCi0gICAgaWYgKCFtX2F2YWlsYWJsZVJlZ3NbYmFu
a10ubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSkKLSAgICAgICAgZnJlZURlYWRUbXBzSWZOZWVkZWQo
KTsKKyAgICB9CiAKICAgICBpZiAobV9hdmFpbGFibGVSZWdzW2JhbmtdLm51bWJlck9mU2V0UmVn
aXN0ZXJzKCkpIHsKICAgICAgICAgLy8gV2UgZmlyc3QgdGFrZSBhbiBhdmFpbGFibGUgcmVnaXN0
ZXIuCiAgICAgICAgIGZvciAoUmVnIHJlZyA6IG1fcmVnaXN0ZXJzW2JhbmtdKSB7Ci0gICAgICAg
ICAgICBpZiAobV9uYW1lZFVzZWRSZWdzLmNvbnRhaW5zKHJlZykgfHwgbV9uYW1lZERlZmRSZWdz
LmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICBpZiAoaW50ZXJmZXJlc1dpdGhDbG9iYmVyKHJl
ZykgfHwgbV9uYW1lZFVzZWRSZWdzLmNvbnRhaW5zKHJlZykgfHwgbV9uYW1lZERlZmRSZWdzLmNv
bnRhaW5zKHJlZykpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAo
IW1fYXZhaWxhYmxlUmVnc1tiYW5rXS5jb250YWlucyhyZWcpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgbV9uYW1lZFVzZWRSZWdzLnNldChyZWcpOyAvLyBBdCB0aGlz
IHBvaW50LCBpdCBkb2Vzbid0IG1hdHRlciBpZiB3ZSBhZGQgaXQgdG8gdGhlIG1fbmFtZWRVc2Vk
UmVncyBvciBtX25hbWVkRGVmZFJlZ3MuIFdlIGp1c3QgbmVlZCB0byBtYXJrIHRoYXQgd2UgY2Fu
J3QgdXNlIGl0IGFnYWluLgotICAgICAgICAgICAgYWxsb2ModG1wLCByZWcsIGlzRGVmKTsKKwor
ICAgICAgICAgICAgbWFya1JlZ2lzdGVyQXNVc2VkKHJlZyk7CisgICAgICAgICAgICBhbGxvYyh0
bXAsIHJlZywgcm9sZSk7CiAgICAgICAgICAgICB0bXAgPSBUbXAocmVnKTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICB9CiAKICAgICAvLyBOb3RoaW5nIHdhcyBhdmFpbGFibGUsIGxldCdzIG1h
a2Ugc29tZSByb29tLgogICAgIGZvciAoUmVnIHJlZyA6IG1fcmVnaXN0ZXJzW2JhbmtdKSB7Ci0g
ICAgICAgIGlmIChtX25hbWVkVXNlZFJlZ3MuY29udGFpbnMocmVnKSB8fCBtX25hbWVkRGVmZFJl
Z3MuY29udGFpbnMocmVnKSkKKyAgICAgICAgaWYgKGludGVyZmVyZXNXaXRoQ2xvYmJlcihyZWcp
IHx8IG1fbmFtZWRVc2VkUmVncy5jb250YWlucyhyZWcpIHx8IG1fbmFtZWREZWZkUmVncy5jb250
YWlucyhyZWcpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgbV9uYW1lZFVzZWRS
ZWdzLnNldChyZWcpOwotCi0gICAgICAgIGFsbG9jKHRtcCwgcmVnLCBpc0RlZik7CisgICAgICAg
IG1hcmtSZWdpc3RlckFzVXNlZChyZWcpOworICAgICAgICBhbGxvYyh0bXAsIHJlZywgcm9sZSk7
CiAgICAgICAgIHRtcCA9IFRtcChyZWcpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBA
IC0yOTgsNyArMzI0LDcgQEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpwcmVw
YQogCiAgICAgICAgIFZlY3RvcjxTdGFja1Nsb3QqLCAxNj4gZnJlZVNsb3RzOwogICAgICAgICBW
ZWN0b3I8U3RhY2tTbG90KiwgND4gdG9GcmVlOwotICAgICAgICBtX2dsb2JhbEluc3RJbmRleCA9
IDA7CisgICAgICAgIG1fZ2xvYmFsSW5zdEluZGV4ID0gMTsKICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fY29kZSkgewogICAgICAgICAgICAgYXV0byBhc3NpZ25TdGFja1Nsb3RU
b1RtcCA9IFsmXSAoVG1wIHRtcCkgewogICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkK
QEAgLTQyNCw2ICs0NTAsMTIgQEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpn
ZW5lcgogCiAgICAgYnVpbGRMaXZlUmFuZ2VzKCptX2xpdmVuZXNzKTsKIAorICAgIG1fY29kZS5m
b3JFYWNoVG1wKFsmXSAoVG1wIHRtcCkgeworICAgICAgICBBU1NFUlQoIXRtcC5pc1JlZygpKTsK
KyAgICAgICAgaWYgKHNpemVfdCBsaXZlUmFuZ2VFbmQgPSBtX2xpdmVSYW5nZUVuZFt0bXBdKQor
ICAgICAgICAgICAgbV90bXBzVG9SZWxlYXNlLmFkZChsaXZlUmFuZ2VFbmQgKyAxLCBWZWN0b3I8
VG1wLCAyPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHRtcCk7CisgICAgfSk7CisKICAgICBJ
bmRleE1hcDxCYXNpY0Jsb2NrKiwgSW5kZXhNYXA8UmVnLCBUbXA+PiBjdXJyZW50QWxsb2NhdGlv
bk1hcChtX2NvZGUuc2l6ZSgpKTsKICAgICB7CiAgICAgICAgIEluZGV4TWFwPFJlZywgVG1wPiBk
ZWZhdWx0Q3VycmVudEFsbG9jYXRpb24oUmVnOjptYXhJbmRleCgpICsgMSk7CkBAIC00NjEsNyAr
NDkzLDggQEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpnZW5lcgogCiAgICAg
RGlzYXNzZW1ibGVyKiBkaXNhc3NlbWJsZXIgPSBtX2NvZGUuZGlzYXNzZW1ibGVyKCk7CiAKLSAg
ICBtX2dsb2JhbEluc3RJbmRleCA9IDA7CisgICAgbV9nbG9iYWxJbnN0SW5kZXggPSAxOworICAg
IG1fbmV4dEluZGV4VG9GcmVlID0gMTsKIAogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X2NvZGUpIHsKICAgICAgICAgY29udGV4dC5jdXJyZW50QmxvY2sgPSBibG9jazsKQEAgLTUzNiwx
MCArNTY5LDExIEBAIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6Z2VuZXIKIAog
ICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOwogCi0gICAgICAg
ICAgICBtX2RpZEFscmVhZHlGcmVlRGVhZFNsb3RzID0gZmFsc2U7Ci0KICAgICAgICAgICAgIG1f
bmFtZWRVc2VkUmVncyA9IFJlZ2lzdGVyU2V0KCk7CiAgICAgICAgICAgICBtX25hbWVkRGVmZFJl
Z3MgPSBSZWdpc3RlclNldCgpOworICAgICAgICAgICAgbV9lYXJseUNsb2JiZXIgPSBSZWdpc3Rl
clNldCgpOworICAgICAgICAgICAgbV9sYXRlQ2xvYmJlciA9IFJlZ2lzdGVyU2V0KCk7CisgICAg
ICAgICAgICBtX2Nsb2JiZXJlZFRvQ2xlYXIgPSBSZWdpc3RlclNldCgpOwogCiAgICAgICAgICAg
ICBib29sIG5lZWRzVG9HZW5lcmF0ZSA9IChbJl0gKCkgLT4gYm9vbCB7CiAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBjb25zaWRlciB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB3
ZSBjYW4gYWxzbyBlbGlkZSBNb3YzMnMKQEAgLTYxNCw0MyArNjQ4LDUxIEBAIHZvaWQgR2VuZXJh
dGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6Z2VuZXIKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9KTsKIAotICAgICAgICAgICAgUmVnaXN0ZXJTZXQgY2xvYmJlcmVkUmVnaXN0ZXJzOwot
ICAgICAgICAgICAgUmVnaXN0ZXJTZXQgZWFybHlOZXh0Q2xvYmJlcmVkUmVnaXN0ZXJzOwotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIEluc3QqIG5leHRJbnN0ID0gYmxvY2stPmdldChp
bnN0SW5kZXggKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5zdC5raW5kLm9wY29kZSA9PSBQ
YXRjaCB8fCAobmV4dEluc3QgJiYgbmV4dEluc3QtPmtpbmQub3Bjb2RlID09IFBhdGNoKSkgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdC5raW5kLm9wY29kZSA9PSBQYXRjaCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNsb2JiZXJlZFJlZ2lzdGVycy5tZXJnZShpbnN0LmV4dHJhQ2xv
YmJlcmVkUmVncygpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRJbnN0ICYmIG5leHRJ
bnN0LT5raW5kLm9wY29kZSA9PSBQYXRjaCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVhcmx5
TmV4dENsb2JiZXJlZFJlZ2lzdGVycy5tZXJnZShuZXh0SW5zdC0+ZXh0cmFFYXJseUNsb2JiZXJl
ZFJlZ3MoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2xvYmJlcmVkUmVnaXN0ZXJzLmZpbHRl
cihtX2FsbG93ZWRSZWdpc3RlcnMpOwotICAgICAgICAgICAgICAgICAgICBjbG9iYmVyZWRSZWdp
c3RlcnMuZXhjbHVkZShtX25hbWVkRGVmZFJlZ3MpOwotICAgICAgICAgICAgICAgICAgICBlYXJs
eU5leHRDbG9iYmVyZWRSZWdpc3RlcnMuZmlsdGVyKG1fYWxsb3dlZFJlZ2lzdGVycyk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgbV9uYW1lZERlZmRSZWdzLm1lcmdlKGNsb2JiZXJlZFJlZ2lzdGVy
cyk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGluc3Qua2luZC5vcGNvZGUg
PT0gUGF0Y2gpIHsKKyAgICAgICAgICAgICAgICBtX2Vhcmx5Q2xvYmJlci5tZXJnZShpbnN0LmV4
dHJhRWFybHlDbG9iYmVyZWRSZWdzKCkpOworICAgICAgICAgICAgICAgIG1fbGF0ZUNsb2JiZXIu
bWVyZ2UoaW5zdC5leHRyYUNsb2JiZXJlZFJlZ3MoKSk7CisKKyAgICAgICAgICAgICAgICBtX2Vh
cmx5Q2xvYmJlci5maWx0ZXIobV9hbGxvd2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgICAgICAgICBt
X2xhdGVDbG9iYmVyLmZpbHRlcihtX2FsbG93ZWRSZWdpc3RlcnMpOworCisgICAgICAgICAgICAg
ICAgbV9jbG9iYmVyZWRUb0NsZWFyLm1lcmdlKG1fZWFybHlDbG9iYmVyKTsKKyAgICAgICAgICAg
ICAgICBtX2Nsb2JiZXJlZFRvQ2xlYXIubWVyZ2UobV9sYXRlQ2xvYmJlcik7CisgICAgICAgICAg
ICAgICAgbV9jbG9iYmVyZWRUb0NsZWFyLmV4Y2x1ZGUobV9uYW1lZERlZmRSZWdzKTsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgYXV0byBhbGxvY05hbWVkID0gWyZdIChjb25zdCBSZWdp
c3RlclNldCYgbmFtZWQsIGJvb2wgaXNEZWYpIHsKKyAgICAgICAgICAgIGF1dG8gYWxsb2NOYW1l
ZCA9IFsmXSAoY29uc3QgUmVnaXN0ZXJTZXQmIG5hbWVkLCBBcmc6OlJvbGUgcm9sZSkgewogICAg
ICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IG5hbWVkKSB7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChUbXAgb2NjdXB5aW5nVG1wID0gY3VycmVudEFsbG9jYXRpb25bcmVnXSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG9jY3VweWluZ1RtcCA9PSBUbXAocmVnKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgICAgIGZyZWVEZWFkVG1wc0lmTmVlZGVkKCk7IC8vIFdlIGRvbid0IHdh
bnQgdG8gc3BpbGwgYSBkZWFkIHRtcC4KLSAgICAgICAgICAgICAgICAgICAgYWxsb2MoVG1wKHJl
ZyksIHJlZywgaXNEZWYpOworICAgICAgICAgICAgICAgICAgICBhbGxvYyhUbXAocmVnKSwgcmVn
LCByb2xlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9OwogCi0gICAgICAgICAg
ICBhbGxvY05hbWVkKG1fbmFtZWRVc2VkUmVncywgZmFsc2UpOyAvLyBNdXN0IGNvbWUgYmVmb3Jl
IHRoZSBkZWZkIHJlZ2lzdGVycyBzaW5jZSB3ZSBtYXkgdXNlIGFuZCBkZWYgdGhlIHNhbWUgcmVn
aXN0ZXIuCi0gICAgICAgICAgICBhbGxvY05hbWVkKG1fbmFtZWREZWZkUmVncywgdHJ1ZSk7Cisg
ICAgICAgICAgICBhdXRvIHNwaWxsSWZOZWVkZWQgPSBbJl0gKGNvbnN0IFJlZ2lzdGVyU2V0JiBz
ZXQpIHsKKyAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiBzZXQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKFRtcCB0bXAgPSBtX2N1cnJlbnRBbGxvY2F0aW9uLT5hdChyZWcpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgc3BpbGwodG1wLCByZWcpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciBjb3Jy
ZWN0bmVzcyBiZWNhdXNlIHdlIHJldXNlIHN0YWNrIHNsb3RzIGJldHdlZW4KKyAgICAgICAgICAg
IC8vIFRtcHMgdGhhdCBkb24ndCBpbnRlcmZlcmUuIFNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdl
IGRvbid0IHNwaWxsIGEKKyAgICAgICAgICAgIC8vIGRlYWQgVG1wIHRvIGEgbGl2ZSBUbXAncyBz
bG90LgorICAgICAgICAgICAgZnJlZURlYWRUbXBzSWZOZWVkZWQoKTsKKworICAgICAgICAgICAg
c3BpbGxJZk5lZWRlZChtX2Vhcmx5Q2xvYmJlcik7CisgICAgICAgICAgICBzcGlsbElmTmVlZGVk
KG1fbGF0ZUNsb2JiZXIpOworCisgICAgICAgICAgICBhbGxvY05hbWVkKG1fbmFtZWRVc2VkUmVn
cywgQXJnOjpSb2xlOjpVc2UpOyAvLyBNdXN0IGNvbWUgYmVmb3JlIHRoZSBkZWZkIHJlZ2lzdGVy
cyBzaW5jZSB3ZSBtYXkgdXNlIGFuZCBkZWYgdGhlIHNhbWUgcmVnaXN0ZXIuCisgICAgICAgICAg
ICBhbGxvY05hbWVkKG1fbmFtZWREZWZkUmVncywgQXJnOjpSb2xlOjpEZWYpOwogCiAgICAgICAg
ICAgICBpZiAobmVlZHNUb0dlbmVyYXRlKSB7CiAgICAgICAgICAgICAgICAgYXV0byB0cnlBbGxv
Y2F0ZSA9IFsmXSB7Ci0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxUbXAqLCA4PiB1c2VzVG9B
bGxvYzsKLSAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFRtcCosIDg+IGRlZnNUb0FsbG9jOwor
ICAgICAgICAgICAgICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFRtcCosIEFyZzo6Um9sZT4sIDg+
IHVzZXNUb0FsbG9jOworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFRtcCos
IEFyZzo6Um9sZT4sIDg+IGRlZnNUb0FsbG9jOwogCiAgICAgICAgICAgICAgICAgICAgIGluc3Qu
Zm9yRWFjaFRtcChbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKQEAgLTY1OCwxNSArNzAw
LDE4IEBAIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6Z2VuZXIKIAogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gV2UgdHJlYXQgVXNlK0RlZiBhcyBhIHVzZS4KICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVzZXNUb0FsbG9jLmFwcGVuZCgmdG1wKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1c2VzVG9BbGxvYy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoJnRtcCwgcm9sZSkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoQXJnOjppc0FueURlZihyb2xlKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZzVG9BbGxvYy5hcHBlbmQoJnRtcCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmc1RvQWxsb2MuYXBwZW5kKHN0ZDo6bWFrZV9w
YWlyKCZ0bXAsIHJvbGUpKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgICAg
ICAgICAgICAgYXV0byB0cnlBbGxvY2F0ZVRtcHMgPSBbJl0gKGF1dG8mIHZlY3RvciwgYm9vbCBp
c0RlZikgeworICAgICAgICAgICAgICAgICAgICBhdXRvIHRyeUFsbG9jYXRlVG1wcyA9IFsmXSAo
YXV0byYgdmVjdG9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChUbXAqIHRtcCA6IHZlY3RvcikKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzICY9IGFzc2lnblRtcCgqdG1wLCB0bXAt
PmJhbmsoKSwgaXNEZWYpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzdGQ6OnBhaXI8
VG1wKiwgQXJnOjpSb2xlPiBwYWlyIDogdmVjdG9yKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVG1wJiB0bXAgPSAqc3RkOjpnZXQ8MD4ocGFpcik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXJnOjpSb2xlIHJvbGUgPSBzdGQ6OmdldDwxPihwYWlyKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdWNjZXNzICY9IGFzc2lnblRtcCh0bXAsIHRtcC5iYW5rKCksIHJv
bGUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHN1Y2Nlc3M7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKQEAgLTY3Niw4ICs3MjEs
OCBAQCB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVyCiAgICAgICAgICAg
ICAgICAgICAgIC8vIHNvbWUgdG1wcyBtYXkgYm90aCBiZSB1c2VkIGFuZCBkZWZkLiBTbyB3ZSBo
YW5kbGUgdXNlcyBmaXJzdCBzaW5jZSBmb3JFYWNoVG1wIGNvdWxkCiAgICAgICAgICAgICAgICAg
ICAgIC8vIHdhbGsgdXNlcy9kZWZzIGluIGFueSBvcmRlci4KICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyAmPSB0cnlB
bGxvY2F0ZVRtcHModXNlc1RvQWxsb2MsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgc3Vj
Y2VzcyAmPSB0cnlBbGxvY2F0ZVRtcHMoZGVmc1RvQWxsb2MsIHRydWUpOworICAgICAgICAgICAg
ICAgICAgICBzdWNjZXNzICY9IHRyeUFsbG9jYXRlVG1wcyh1c2VzVG9BbGxvYyk7CisgICAgICAg
ICAgICAgICAgICAgIHN1Y2Nlc3MgJj0gdHJ5QWxsb2NhdGVUbXBzKGRlZnNUb0FsbG9jKTsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7CiAgICAgICAgICAgICAgICAgfTsKIApA
QCAtNzI5LDcgKzc3NCw2IEBAIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6Z2Vu
ZXIKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG1fY29kZS5uZWVkc1VzZWRSZWdp
c3RlcnMoKSAmJiBpbnN0LmtpbmQub3Bjb2RlID09IFBhdGNoKSB7Ci0gICAgICAgICAgICAgICAg
ZnJlZURlYWRUbXBzSWZOZWVkZWQoKTsKICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCByZWdp
c3RlclNldDsKICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1cnJlbnRB
bGxvY2F0aW9uLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50
QWxsb2NhdGlvbltpXSkKQEAgLTczOCwxMyArNzgyLDEwIEBAIHZvaWQgR2VuZXJhdGVBbmRBbGxv
Y2F0ZVJlZ2lzdGVyczo6Z2VuZXIKICAgICAgICAgICAgICAgICBpbnN0LnJlcG9ydFVzZWRSZWdp
c3RlcnMocmVnaXN0ZXJTZXQpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBhdXRvIGNs
b2JiZXIgPSBbJl0gKGNvbnN0IFJlZ2lzdGVyU2V0JiBzZXQpIHsKLSAgICAgICAgICAgICAgICBm
b3IgKFJlZyByZWcgOiBzZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgVG1wIHRtcChyZWcpOwot
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY3VycmVudEFsbG9jYXRpb25bcmVnXSA9PSB0bXAp
OwotICAgICAgICAgICAgICAgICAgICBtX2F2YWlsYWJsZVJlZ3NbdG1wLmJhbmsoKV0uc2V0KHJl
Zyk7Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEFsbG9jYXRpb24tPmF0KHJlZykgPSBU
bXAoKTsKLSAgICAgICAgICAgICAgICAgICAgbV9tYXBbdG1wXS5yZWcgPSBSZWcoKTsKKyAgICAg
ICAgICAgIGF1dG8gaGFuZGxlQ2xvYmJlciA9IFsmXSB7CisgICAgICAgICAgICAgICAgZm9yIChS
ZWcgcmVnIDogbV9jbG9iYmVyZWRUb0NsZWFyKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChU
bXAgdG1wID0gbV9jdXJyZW50QWxsb2NhdGlvbi0+YXQocmVnKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlbGVhc2UodG1wLCByZWcpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH07CiAKQEAgLTc1NCwxNCArNzk1LDExIEBAIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lz
dGVyczo6Z2VuZXIKICAgICAgICAgICAgICAgICAgICAganVtcCA9IGluc3QuZ2VuZXJhdGUoKm1f
aml0LCBjb250ZXh0KTsKICAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGp1bXAsICFqdW1w
LmlzU2V0KCkpOwogCi0gICAgICAgICAgICAgICAgYWxsb2NOYW1lZChlYXJseU5leHRDbG9iYmVy
ZWRSZWdpc3RlcnMsIHRydWUpOwotICAgICAgICAgICAgICAgIGNsb2JiZXJlZFJlZ2lzdGVycy5t
ZXJnZShlYXJseU5leHRDbG9iYmVyZWRSZWdpc3RlcnMpOwotICAgICAgICAgICAgICAgIGNsb2Ji
ZXIoY2xvYmJlcmVkUmVnaXN0ZXJzKTsKKyAgICAgICAgICAgICAgICBoYW5kbGVDbG9iYmVyKCk7
CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEFTU0VSVChuZWVkc1RvR2Vu
ZXJhdGUpOwogCi0gICAgICAgICAgICAgICAgY2xvYmJlcihjbG9iYmVyZWRSZWdpc3RlcnMpOwot
ICAgICAgICAgICAgICAgIEFTU0VSVChlYXJseU5leHRDbG9iYmVyZWRSZWdpc3RlcnMuaXNFbXB0
eSgpKTsKKyAgICAgICAgICAgICAgICBoYW5kbGVDbG9iYmVyKCk7CiAKICAgICAgICAgICAgICAg
ICBpZiAoYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBC
eSBkZWZhdWx0LCB3ZSBzcGlsbCBldmVyeXRoaW5nIGJldHdlZW4gYmxvY2sgYm91bmRhcmllcy4g
SG93ZXZlciwgd2UgaGF2ZSBhIHNtYWxsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tBbmRHZW5lcmF0ZUNvZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJz
QW5kU3RhY2tBbmRHZW5lcmF0ZUNvZGUuaAkocmV2aXNpb24gMjkzOTM1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJh
dGVDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDkgKzU5LDkgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHJlbGVhc2UoVG1wLCBSZWcpOwogICAgIHZvaWQgZmx1c2goVG1wLCBSZWcpOwogICAgIHZv
aWQgc3BpbGwoVG1wLCBSZWcpOwotICAgIHZvaWQgYWxsb2MoVG1wLCBSZWcsIGJvb2wgaXNEZWYp
OworICAgIHZvaWQgYWxsb2MoVG1wLCBSZWcsIEFyZzo6Um9sZSk7CiAgICAgdm9pZCBmcmVlRGVh
ZFRtcHNJZk5lZWRlZCgpOwotICAgIGJvb2wgYXNzaWduVG1wKFRtcCYsIEJhbmssIGJvb2wgaXNE
ZWYpOworICAgIGJvb2wgYXNzaWduVG1wKFRtcCYsIEJhbmssIEFyZzo6Um9sZSk7CiAgICAgdm9p
ZCBidWlsZExpdmVSYW5nZXMoVW5pZmllZFRtcExpdmVuZXNzJik7CiAgICAgYm9vbCBpc0Rpc2Fs
bG93ZWRSZWdpc3RlcihSZWcpOwogCkBAIC03OCwxMiArNzgsMTYgQEAgcHJpdmF0ZToKIAogICAg
IFZlY3RvcjxSZWc+IG1fcmVnaXN0ZXJzW251bUJhbmtzXTsKICAgICBSZWdpc3RlclNldCBtX2F2
YWlsYWJsZVJlZ3NbbnVtQmFua3NdOworICAgIHNpemVfdCBtX25leHRJbmRleFRvRnJlZTsKICAg
ICBzaXplX3QgbV9nbG9iYWxJbnN0SW5kZXg7CiAgICAgSW5kZXhNYXA8UmVnLCBUbXA+KiBtX2N1
cnJlbnRBbGxvY2F0aW9uIHsgbnVsbHB0ciB9OwotICAgIGJvb2wgbV9kaWRBbHJlYWR5RnJlZURl
YWRTbG90czsKICAgICBUbXBNYXA8c2l6ZV90PiBtX2xpdmVSYW5nZUVuZDsKKyAgICBIYXNoTWFw
PHNpemVfdCwgVmVjdG9yPFRtcCwgMj4+IG1fdG1wc1RvUmVsZWFzZTsKICAgICBSZWdpc3RlclNl
dCBtX25hbWVkVXNlZFJlZ3M7CiAgICAgUmVnaXN0ZXJTZXQgbV9uYW1lZERlZmRSZWdzOworICAg
IFJlZ2lzdGVyU2V0IG1fZWFybHlDbG9iYmVyOworICAgIFJlZ2lzdGVyU2V0IG1fbGF0ZUNsb2Ji
ZXI7CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWRUb0NsZWFyOwogICAgIFJlZ2lzdGVyU2V0
IG1fYWxsb3dlZFJlZ2lzdGVyczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5pZmllZFRtcExpdmVu
ZXNzPiBtX2xpdmVuZXNzOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rl
c3RhaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVz
dGFpci5jcHAJKHJldmlzaW9uIDI5MzkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvdGVzdGFpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOTIsNiArMjM5Miw2OCBAQCB2b2lk
IHRlc3RaRGVmT2ZTcGlsbFNsb3RXaXRoT2Zmc2V0TmVlZGluCiAgICAgQ0hFQ0socmVzdWx0ID09
IHN0YXRpY19jYXN0PGludDMyX3Q+KG51bWJlck9mU2xvdHMpKTsKIH0KIAordm9pZCB0ZXN0RWFy
bHlBbmRMYXRlVXNlT2ZTYW1lVG1wKCkKK3sKKyAgICBXZWFrUmFuZG9tIHdlYWtSYW5kb207Cisg
ICAgc2l6ZV90IG51bVRtcHMgPSBSZWdpc3RlclNldDo6YWxsR1BScygpLm51bWJlck9mU2V0UmVn
aXN0ZXJzKCk7CisgICAgaW50NjRfdCBleHBlY3RlZFJlc3VsdCA9IDA7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBudW1UbXBzOyArK2kpCisgICAgICAgIGV4cGVjdGVkUmVzdWx0ICs9IGk7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgNjA7ICsraikgeworICAgICAgICBCMzo6
UHJvY2VkdXJlIHByb2M7CisgICAgICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAg
ICAgICBCMzo6QWlyOjpTcGVjaWFsKiBwYXRjaHBvaW50U3BlY2lhbCA9IGNvZGUuYWRkU3BlY2lh
bChtYWtlVW5pcXVlPEIzOjpQYXRjaHBvaW50U3BlY2lhbD4oKSk7CisKKyAgICAgICAgQmFzaWNC
bG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgVmVjdG9yPFRtcD4gdG1wczsK
KyAgICAgICAgVG1wIHJlc3VsdCA9IGNvZGUubmV3VG1wKEIzOjpHUCk7CisgICAgICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgcmVzdWx0KTsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1UbXBzOyArK2kpIHsKKyAgICAgICAgICAgIFRtcCB0bXAg
PSBjb2RlLm5ld1RtcChCMzo6R1ApOworICAgICAgICAgICAgdG1wcy5hcHBlbmQodG1wKTsKKyAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbShpKSwgdG1wKTsK
KyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJhbmQgPSB3ZWFr
UmFuZG9tLmdldFVpbnQzMih0bXBzLnNpemUoKSk7CisgICAgICAgICAgICBCMzo6VmFsdWUqIGR1
bW15VmFsdWUgPSBwcm9jLmFkZENvbnN0YW50KEIzOjpPcmlnaW4oKSwgQjM6OkludDY0LCAwKTsK
KworICAgICAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IHByb2MuYWRk
PEIzOjpQYXRjaHBvaW50VmFsdWU+KEIzOjpWb2lkLCBCMzo6T3JpZ2luKCkpOworICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+YXBwZW5kKGR1bW15VmFsdWUsIEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChkdW1teVZhbHVlLCBCMzo6VmFs
dWVSZXA6OlNvbWVMYXRlUmVnaXN0ZXIpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJl
ckxhdGUoUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCkpOworICAgICAg
ICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0Nh
bGwoKS5nZXQocGFyYW1zWzFdLmdwcigpKSk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGdvb2Qg
PSBqaXQuYnJhbmNoNjQoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgcGFyYW1zWzFdLmdwcigpLCBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihyYW5kKSk7CisgICAgICAgICAgICAgICAgaml0LmJyZWFr
cG9pbnQoKTsKKyAgICAgICAgICAgICAgICBnb29kLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAg
ICAgICBhdXRvIGdvb2QyID0gaml0LmJyYW5jaDY0KENDYWxsSGVscGVyczo6RXF1YWwsIHBhcmFt
c1swXS5ncHIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmFuZCkpOworICAgICAgICAg
ICAgICAgIGppdC5icmVha3BvaW50KCk7CisgICAgICAgICAgICAgICAgZ29vZDIubGluaygmaml0
KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBJbnN0IGluc3QoUGF0Y2gsIHBhdGNo
cG9pbnQsIEFyZzo6c3BlY2lhbChwYXRjaHBvaW50U3BlY2lhbCkpOworCisgICAgICAgICAgICBU
bXAgdG1wID0gdG1wc1tyYW5kXTsKKyAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQodG1wKTsK
KyAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQodG1wKTsKKyAgICAgICAgICAgIHJvb3QtPmFw
cGVuZChpbnN0KTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoVG1wIHRtcCA6IHRtcHMpCisg
ICAgICAgICAgICByb290LT5hcHBlbmQoQWRkNjQsIG51bGxwdHIsIHRtcCwgcmVzdWx0KTsKKyAg
ICAgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIHJlc3VsdCwgVG1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKSk7CisgICAgICAgIHJvb3QtPmFwcGVuZChSZXQ2NCwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICAgICAgaW50NjRfdCBhY3R1YWxSZXN1
bHQgPSBjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MpOworICAgICAgICBDSEVDSyhhY3R1YWxS
ZXN1bHQgPT0gZXhwZWN0ZWRSZXN1bHQpOworICAgIH0KK30KKwogI2RlZmluZSBQUkVGSVggIk8i
LCBPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpLCAiOiAiCiAKICNkZWZpbmUgUlVOKHRlc3Qp
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0yNDg5LDYgKzI1NTEs
OCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAKICAgICBSVU4odGVzdFpEZWZPZlNw
aWxsU2xvdFdpdGhPZmZzZXROZWVkaW5nVG9CZU1hdGVyaWFsaXplZEluQVJlZ2lzdGVyKCkpOwog
CisgICAgUlVOKHRlc3RFYXJseUFuZExhdGVVc2VPZlNhbWVUbXAoKSk7CisKICAgICBpZiAodGFz
a3MuaXNFbXB0eSgpKQogICAgICAgICB1c2FnZSgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZpc2lvbiAyOTM5MzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcg
QEAgcHVibGljOgogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBzdGF0aWMgUmVnaXN0ZXJT
ZXQgd2ViQXNzZW1ibHlDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7IC8vIFJlZ2lzdGVycyBzYXZlZCBh
bmQgdXNlZCBieSB0aGUgV2ViQXNzZW1ibHkgSklULgogI2VuZGlmCi0gICAgc3RhdGljIFJlZ2lz
dGVyU2V0IHZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIFJlZ2lzdGVyU2V0IHZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCk7CiAgICAg
c3RhdGljIFJlZ2lzdGVyU2V0IHN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOyAvLyBUaGUgdW5p
b24gb2YgY2FsbGVlIHNhdmVzIGFuZCBzcGVjaWFsIHJlZ2lzdGVycy4KICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgUmVnaXN0ZXJTZXQgbWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCk7CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZ2lzdGVyU2V0IGFsbEdQUnMoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459023</attachid>
            <date>2022-05-08 22:02:38 -0700</date>
            <delta_ts>2022-05-08 22:41:47 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>24219</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjkzOTY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBA
CisyMDIyLTA1LTA4ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEJldHRlciBoYW5kbGUgY2xvYmJlcmVkIHJlZ2lzdGVycyBpbiBPMCByZWdpc3RlciBhbGxvY2F0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDAy
MDUKKyAgICAgICAgPHJkYXI6Ly84NzIyMDY4OD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIEFpcidzIE8wIHJlZ2lzdGVy
IGFsbG9jYXRvciBiZXR0ZXIgaGFuZGxlIGNsb2JiZXJlZAorICAgICAgICByZWdpc3RlcnMuIFdl
IG5vdyBtb2RlbCBib3RoIGVhcmx5IGFuZCBsYXRlIGNsb2JiZXIgZGlyZWN0bHksIGFuZCB1c2UK
KyAgICAgICAgdGhpcyB0byBwZXJmb3JtIGEgYmFzaWMgaW50ZXJmZXJlbmNlIGFuYWx5c2lzIHdo
ZW4gYWxsb2NhdGluZyBhIHJlZ2lzdGVyCisgICAgICAgIHRvIGEgVG1wLiBBbiBlYXJseSBjbG9i
YmVyIGludGVyZmVyZXMgd2l0aCBhbnkgVXNlIGluIGFuIGluc3RydWN0aW9uLCBhbmQKKyAgICAg
ICAgYW55IGxhdGUgRGVmcy4gQSBsYXRlIGNsb2JiZXIgaW50ZXJmZXJlcyB3aXRoIGFueSBEZWZz
IGluIGFuIGluc3RydWN0aW9uLAorICAgICAgICBhbmQgYW55IGxhdGUgVXNlcy4gV2hhdCB0aGlz
IGVuYWJsZXMgaXMgYW4gZWFybHkgVXNlIGNhbiBiZSBhbGxvY2F0ZWQKKyAgICAgICAgdG8gYSBy
ZWdpc3RlciB0aGF0IGlzIG9ubHkgbGF0ZSBjbG9iYmVyZWQuIEFuZCBhIHJlc3VsdCBjYW4gYmUg
YWxsb2NhdGVkIAorICAgICAgICB0byBhIHJlZ2lzdGVyIHRoYXQgaXMgb25seSBlYXJseSBjbG9i
YmVyZWQuCisgICAgICAgIAorICAgICAgICBQcmlvciB0byB0aGlzLCB0aGUgYWxnb3JpdGhtIGhh
ZCBhIGJ1ZyB3aGVyZSBhIFVzZSBtYXkgYmUgYWxsb2NhdGVkIHRvCisgICAgICAgIGEgcmVnaXN0
ZXIgdGhhdCBpcyBlYXJseSBjbG9iYmVyZWQuCisKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2Nh
dGVSZWdpc3RlcnNBbmRTdGFja0FuZEdlbmVyYXRlQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmJ1aWxkTGl2ZVJhbmdlcyk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmFsbG9j
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6R2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6
ZnJlZURlYWRUbXBzSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpHZW5lcmF0ZUFu
ZEFsbG9jYXRlUmVnaXN0ZXJzOjphc3NpZ25UbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpH
ZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpwcmVwYXJlRm9yR2VuZXJhdGlvbik6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVyYXRl
KToKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0FuZEdlbmVy
YXRlQ29kZS5oOgorICAgICAgICAqIGIzL2Fpci90ZXN0YWlyLmNwcDoKKyAgICAgICAgKiBqaXQv
UmVnaXN0ZXJTZXQuaDoKKwogMjAyMi0wNS0wNiAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xp
bmdAc29ueS5jb20+CiAKICAgICAgICAgVGVtcG9yYWwuRHVyYXRpb24jdG9TdHJpbmcgc2hvdWxk
IG5ldmVyIGlnbm9yZSBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tBbmRHZW5lcmF0ZUNv
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxs
b2NhdGVSZWdpc3RlcnNBbmRTdGFja0FuZEdlbmVyYXRlQ29kZS5jcHAJKHJldmlzaW9uIDI5Mzkz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNB
bmRTdGFja0FuZEdlbmVyYXRlQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcg
QEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpidWlsZAogewogICAgIG1fbGl2
ZVJhbmdlRW5kID0gVG1wTWFwPHNpemVfdD4obV9jb2RlLCAwKTsKIAotICAgIG1fZ2xvYmFsSW5z
dEluZGV4ID0gMDsKKyAgICBtX2dsb2JhbEluc3RJbmRleCA9IDE7CiAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fY29kZSkgewogICAgICAgICBmb3IgKFRtcCB0bXAgOiBsaXZlbmVzcy5s
aXZlQXRIZWFkKGJsb2NrKSkgewogICAgICAgICAgICAgaWYgKCF0bXAuaXNSZWcoKSkKQEAgLTE4
NCw3ICsxODQsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlCiAg
ICAgcmVsZWFzZSh0bXAsIHJlZyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBHZW5lcmF0ZUFu
ZEFsbG9jYXRlUmVnaXN0ZXJzOjphbGxvYyhUbXAgdG1wLCBSZWcgcmVnLCBib29sIGlzRGVmKQor
QUxXQVlTX0lOTElORSB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmFsbG9jKFRt
cCB0bXAsIFJlZyByZWcsIEFyZzo6Um9sZSByb2xlKQogewogICAgIGlmIChUbXAgb2NjdXB5aW5n
VG1wID0gbV9jdXJyZW50QWxsb2NhdGlvbi0+YXQocmVnKSkKICAgICAgICAgc3BpbGwob2NjdXB5
aW5nVG1wLCByZWcpOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBHZW5l
cmF0ZUFuZEFsbG9jYXRlUmUKICAgICBtX2F2YWlsYWJsZVJlZ3NbdG1wLmJhbmsoKV0uY2xlYXIo
cmVnKTsKICAgICBtX2N1cnJlbnRBbGxvY2F0aW9uLT5hdChyZWcpID0gdG1wOwogCi0gICAgaWYg
KCFpc0RlZikgeworICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpKSB7CiAgICAgICAgIGludHB0
cl90IG9mZnNldCA9IG1fbWFwW3RtcF0uc3BpbGxTbG90LT5vZmZzZXRGcm9tRlAoKTsKICAgICAg
ICAgaWYgKHRtcC5iYW5rKCkgPT0gR1ApCiAgICAgICAgICAgICBtX2ppdC0+bG9hZDY0KGNhbGxG
cmFtZUFkZHIoKm1faml0LCBvZmZzZXQpLCByZWcuZ3ByKCkpOwpAQCAtMjA4LDYxICsyMDgsODcg
QEAgQUxXQVlTX0lOTElORSB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZQogCiBBTFdBWVNfSU5M
SU5FIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6ZnJlZURlYWRUbXBzSWZOZWVk
ZWQoKQogewotICAgIGlmIChtX2RpZEFscmVhZHlGcmVlRGVhZFNsb3RzKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2RpZEFscmVhZHlGcmVlRGVhZFNsb3RzID0gdHJ1ZTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fY3VycmVudEFsbG9jYXRpb24tPnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIFRtcCB0bXAgPSBtX2N1cnJlbnRBbGxvY2F0aW9uLT5hdChpKTsKLSAgICAgICAgaWYgKCF0
bXApCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHRtcC5pc1JlZygpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChtX2xpdmVSYW5nZUVuZFt0bXBdID49IG1f
Z2xvYmFsSW5zdEluZGV4KQotICAgICAgICAgICAgY29udGludWU7CisgICAgd2hpbGUgKG1fbmV4
dEluZGV4VG9GcmVlIDw9IG1fZ2xvYmFsSW5zdEluZGV4KSB7CisgICAgICAgIGF1dG8gaXRlciA9
IG1fdG1wc1RvUmVsZWFzZS5maW5kKG1fbmV4dEluZGV4VG9GcmVlKTsKKyAgICAgICAgaWYgKGl0
ZXIgIT0gbV90bXBzVG9SZWxlYXNlLmVuZCgpKSB7CisgICAgICAgICAgICBmb3IgKFRtcCB0bXAg
OiBpdGVyLT52YWx1ZSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChtX2xpdmVSYW5nZUVuZFt0
bXBdIDwgbV9uZXh0SW5kZXhUb0ZyZWUpOworICAgICAgICAgICAgICAgIGlmIChSZWcgcmVnID0g
bV9tYXBbdG1wXS5yZWcpCisgICAgICAgICAgICAgICAgICAgIHJlbGVhc2UodG1wLCByZWcpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgcmVsZWFzZSh0bXAsIFJlZzo6ZnJv
bUluZGV4KGkpKTsKKyAgICAgICAgKyttX25leHRJbmRleFRvRnJlZTsKICAgICB9CiB9CiAKLUFM
V0FZU19JTkxJTkUgYm9vbCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjphc3NpZ25UbXAo
VG1wJiB0bXAsIEJhbmsgYmFuaywgYm9vbCBpc0RlZikKK0FMV0FZU19JTkxJTkUgYm9vbCBHZW5l
cmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjphc3NpZ25UbXAoVG1wJiB0bXAsIEJhbmsgYmFuaywg
QXJnOjpSb2xlIHJvbGUpCiB7CiAgICAgQVNTRVJUKCF0bXAuaXNSZWcoKSk7Ci0gICAgaWYgKFJl
ZyByZWcgPSBtX21hcFt0bXBdLnJlZykgewotICAgICAgICBBU1NFUlQoIW1fbmFtZWREZWZkUmVn
cy5jb250YWlucyhyZWcpKTsKLSAgICAgICAgdG1wID0gVG1wKHJlZyk7CisKKyAgICBhdXRvIG1h
cmtSZWdpc3RlckFzVXNlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBpZiAoQXJnOjppc0Fu
eURlZihyb2xlKSkKKyAgICAgICAgICAgIG1fY2xvYmJlcmVkVG9DbGVhci5jbGVhcihyZWcpOwor
ICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCBpdCBkb2Vzbid0IG1hdHRlciBpZiB3ZSBhZGQgaXQg
dG8gdGhlIG1fbmFtZWRVc2VkUmVncyBvciBtX25hbWVkRGVmZFJlZ3MuIAorICAgICAgICAvLyBX
ZSBqdXN0IG5lZWQgdG8gbWFyayB0aGF0IHdlIGNhbid0IHVzZSBpdCBhZ2FpbiBmb3IgYW5vdGhl
ciB0bXAuCiAgICAgICAgIG1fbmFtZWRVc2VkUmVncy5zZXQocmVnKTsKLSAgICAgICAgQVNTRVJU
KCFtX2F2YWlsYWJsZVJlZ3NbYmFua10uZ2V0KHJlZykpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9CisgICAgfTsKKworICAgIGJvb2wgbWlnaHRJbnRlcmZlcmUgPSBtX2Vhcmx5Q2xvYmJl
ci5udW1iZXJPZlNldFJlZ2lzdGVycygpIHx8IG1fbGF0ZUNsb2JiZXIubnVtYmVyT2ZTZXRSZWdp
c3RlcnMoKTsKKworICAgIGF1dG8gaW50ZXJmZXJlc1dpdGhDbG9iYmVyID0gWyZdIChSZWcgcmVn
KSB7CisgICAgICAgIGlmICghbWlnaHRJbnRlcmZlcmUpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpICYmIG1fZWFybHlDbG9iYmVyLmdl
dChyZWcpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChBcmc6OmlzQW55
RGVmKHJvbGUpICYmIG1fbGF0ZUNsb2JiZXIuZ2V0KHJlZykpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgaWYgKEFyZzo6YWN0aXZlQXQocm9sZSwgQXJnOjpQaGFzZTo6RWFybHkp
ICYmIG1fZWFybHlDbG9iYmVyLmdldChyZWcpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGlmIChBcmc6OmFjdGl2ZUF0KHJvbGUsIEFyZzo6UGhhc2U6OkxhdGUpICYmIG1fbGF0
ZUNsb2JiZXIuZ2V0KHJlZykpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH07CisKKyAgICBpZiAoUmVnIHJlZyA9IG1fbWFwW3RtcF0ucmVnKSB7
CisgICAgICAgIGlmICghaW50ZXJmZXJlc1dpdGhDbG9iYmVyKHJlZykpIHsKKyAgICAgICAgICAg
IEFTU0VSVCghbV9uYW1lZERlZmRSZWdzLmNvbnRhaW5zKHJlZykpOworICAgICAgICAgICAgdG1w
ID0gVG1wKHJlZyk7CisgICAgICAgICAgICBtYXJrUmVnaXN0ZXJBc1VzZWQocmVnKTsKKyAgICAg
ICAgICAgIEFTU0VSVCghbV9hdmFpbGFibGVSZWdzW2JhbmtdLmdldChyZWcpKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIC8vIFRoaXMgaXMgYSByYXJlIGNh
c2Ugd2hlbiB3ZSd2ZSBhbHJlYWR5IGFsbG9jYXRlZCBhIFRtcCBpbiBzb21lIHdheSwgYnV0IGFu
b3RoZXIgCisgICAgICAgIC8vIFJvbGUgb2YgdGhlIFRtcCBpbXBvc2VzIHNvbWUgcmVzdHJpY3Rp
b24gb24gdGhlIHJlZ2lzdGVyIHZhbHVlLiBFLmcsIGlmCisgICAgICAgIC8vIHdlIGhhdmUgYSBw
cm9ncmFtIGxpa2U6CisgICAgICAgIC8vIFBhdGNoIFVzZTp0bXAxLCBMYXRlVXNlOnRtcDEsIGxh
dGVDbG9iYmVyOngwCisgICAgICAgIC8vIFRoZSBmaXJzdCB1c2Ugb2YgdG1wMSBjYW4gYmUgYWxs
b2NhdGVkIHRvIHgwLCBidXQgdGhlIHNlY29uZCBjYW5ub3QuCisgICAgICAgIHNwaWxsKHRtcCwg
cmVnKTsKIAotICAgIGlmICghbV9hdmFpbGFibGVSZWdzW2JhbmtdLm51bWJlck9mU2V0UmVnaXN0
ZXJzKCkpCi0gICAgICAgIGZyZWVEZWFkVG1wc0lmTmVlZGVkKCk7CisgICAgfQogCiAgICAgaWYg
KG1fYXZhaWxhYmxlUmVnc1tiYW5rXS5udW1iZXJPZlNldFJlZ2lzdGVycygpKSB7CiAgICAgICAg
IC8vIFdlIGZpcnN0IHRha2UgYW4gYXZhaWxhYmxlIHJlZ2lzdGVyLgogICAgICAgICBmb3IgKFJl
ZyByZWcgOiBtX3JlZ2lzdGVyc1tiYW5rXSkgewotICAgICAgICAgICAgaWYgKG1fbmFtZWRVc2Vk
UmVncy5jb250YWlucyhyZWcpIHx8IG1fbmFtZWREZWZkUmVncy5jb250YWlucyhyZWcpKQorICAg
ICAgICAgICAgaWYgKGludGVyZmVyZXNXaXRoQ2xvYmJlcihyZWcpIHx8IG1fbmFtZWRVc2VkUmVn
cy5jb250YWlucyhyZWcpIHx8IG1fbmFtZWREZWZkUmVncy5jb250YWlucyhyZWcpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCFtX2F2YWlsYWJsZVJlZ3NbYmFu
a10uY29udGFpbnMocmVnKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IG1fbmFtZWRVc2VkUmVncy5zZXQocmVnKTsgLy8gQXQgdGhpcyBwb2ludCwgaXQgZG9lc24ndCBt
YXR0ZXIgaWYgd2UgYWRkIGl0IHRvIHRoZSBtX25hbWVkVXNlZFJlZ3Mgb3IgbV9uYW1lZERlZmRS
ZWdzLiBXZSBqdXN0IG5lZWQgdG8gbWFyayB0aGF0IHdlIGNhbid0IHVzZSBpdCBhZ2Fpbi4KLSAg
ICAgICAgICAgIGFsbG9jKHRtcCwgcmVnLCBpc0RlZik7CisKKyAgICAgICAgICAgIG1hcmtSZWdp
c3RlckFzVXNlZChyZWcpOworICAgICAgICAgICAgYWxsb2ModG1wLCByZWcsIHJvbGUpOwogICAg
ICAgICAgICAgdG1wID0gVG1wKHJlZyk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQotCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCiAg
ICAgLy8gTm90aGluZyB3YXMgYXZhaWxhYmxlLCBsZXQncyBtYWtlIHNvbWUgcm9vbS4KICAgICBm
b3IgKFJlZyByZWcgOiBtX3JlZ2lzdGVyc1tiYW5rXSkgewotICAgICAgICBpZiAobV9uYW1lZFVz
ZWRSZWdzLmNvbnRhaW5zKHJlZykgfHwgbV9uYW1lZERlZmRSZWdzLmNvbnRhaW5zKHJlZykpCisg
ICAgICAgIGlmIChpbnRlcmZlcmVzV2l0aENsb2JiZXIocmVnKSB8fCBtX25hbWVkVXNlZFJlZ3Mu
Y29udGFpbnMocmVnKSB8fCBtX25hbWVkRGVmZFJlZ3MuY29udGFpbnMocmVnKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi0gICAgICAgIG1fbmFtZWRVc2VkUmVncy5zZXQocmVnKTsKLQotICAg
ICAgICBhbGxvYyh0bXAsIHJlZywgaXNEZWYpOworICAgICAgICBtYXJrUmVnaXN0ZXJBc1VzZWQo
cmVnKTsKKyAgICAgICAgYWxsb2ModG1wLCByZWcsIHJvbGUpOwogICAgICAgICB0bXAgPSBUbXAo
cmVnKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMjk4LDcgKzMyNCw3IEBAIHZv
aWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6cHJlcGEKIAogICAgICAgICBWZWN0b3I8
U3RhY2tTbG90KiwgMTY+IGZyZWVTbG90czsKICAgICAgICAgVmVjdG9yPFN0YWNrU2xvdCosIDQ+
IHRvRnJlZTsKLSAgICAgICAgbV9nbG9iYWxJbnN0SW5kZXggPSAwOworICAgICAgICBtX2dsb2Jh
bEluc3RJbmRleCA9IDE7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUp
IHsKICAgICAgICAgICAgIGF1dG8gYXNzaWduU3RhY2tTbG90VG9UbXAgPSBbJl0gKFRtcCB0bXAp
IHsKICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCkBAIC00MjQsNiArNDUwLDEyIEBA
IHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6Z2VuZXIKIAogICAgIGJ1aWxkTGl2
ZVJhbmdlcygqbV9saXZlbmVzcyk7CiAKKyAgICBtX2NvZGUuZm9yRWFjaFRtcChbJl0gKFRtcCB0
bXApIHsKKyAgICAgICAgQVNTRVJUKCF0bXAuaXNSZWcoKSk7CisgICAgICAgIGlmIChzaXplX3Qg
bGl2ZVJhbmdlRW5kID0gbV9saXZlUmFuZ2VFbmRbdG1wXSkKKyAgICAgICAgICAgIG1fdG1wc1Rv
UmVsZWFzZS5hZGQobGl2ZVJhbmdlRW5kICsgMSwgVmVjdG9yPFRtcCwgMj4oKSkuaXRlcmF0b3It
PnZhbHVlLmFwcGVuZCh0bXApOworICAgIH0pOworCiAgICAgSW5kZXhNYXA8QmFzaWNCbG9jayos
IEluZGV4TWFwPFJlZywgVG1wPj4gY3VycmVudEFsbG9jYXRpb25NYXAobV9jb2RlLnNpemUoKSk7
CiAgICAgewogICAgICAgICBJbmRleE1hcDxSZWcsIFRtcD4gZGVmYXVsdEN1cnJlbnRBbGxvY2F0
aW9uKFJlZzo6bWF4SW5kZXgoKSArIDEpOwpAQCAtNDYxLDcgKzQ5Myw4IEBAIHZvaWQgR2VuZXJh
dGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6Z2VuZXIKIAogICAgIERpc2Fzc2VtYmxlciogZGlzYXNz
ZW1ibGVyID0gbV9jb2RlLmRpc2Fzc2VtYmxlcigpOwogCi0gICAgbV9nbG9iYWxJbnN0SW5kZXgg
PSAwOworICAgIG1fZ2xvYmFsSW5zdEluZGV4ID0gMTsKKyAgICBtX25leHRJbmRleFRvRnJlZSA9
IDE7CiAKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CiAgICAgICAgIGNv
bnRleHQuY3VycmVudEJsb2NrID0gYmxvY2s7CkBAIC01MzYsMTAgKzU2OSwxMSBAQCB2b2lkIEdl
bmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVyCiAKICAgICAgICAgICAgIEluc3QmIGlu
c3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKIAotICAgICAgICAgICAgbV9kaWRBbHJlYWR5RnJl
ZURlYWRTbG90cyA9IGZhbHNlOwotCiAgICAgICAgICAgICBtX25hbWVkVXNlZFJlZ3MgPSBSZWdp
c3RlclNldCgpOwogICAgICAgICAgICAgbV9uYW1lZERlZmRSZWdzID0gUmVnaXN0ZXJTZXQoKTsK
KyAgICAgICAgICAgIG1fZWFybHlDbG9iYmVyID0gUmVnaXN0ZXJTZXQoKTsKKyAgICAgICAgICAg
IG1fbGF0ZUNsb2JiZXIgPSBSZWdpc3RlclNldCgpOworICAgICAgICAgICAgbV9jbG9iYmVyZWRU
b0NsZWFyID0gUmVnaXN0ZXJTZXQoKTsKIAogICAgICAgICAgICAgYm9vbCBuZWVkc1RvR2VuZXJh
dGUgPSAoWyZdICgpIC0+IGJvb2wgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgY29uc2lkZXIgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgd2UgY2FuIGFsc28gZWxpZGUgTW92
MzJzCkBAIC02MTQsNDMgKzY0OCw1MSBAQCB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3Rl
cnM6OmdlbmVyCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7CiAKLSAgICAgICAg
ICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXJlZFJlZ2lzdGVyczsKLSAgICAgICAgICAgIFJlZ2lzdGVy
U2V0IGVhcmx5TmV4dENsb2JiZXJlZFJlZ2lzdGVyczsKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBJbnN0KiBuZXh0SW5zdCA9IGJsb2NrLT5nZXQoaW5zdEluZGV4ICsgMSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGluc3Qua2luZC5vcGNvZGUgPT0gUGF0Y2ggfHwgKG5leHRJbnN0ICYm
IG5leHRJbnN0LT5raW5kLm9wY29kZSA9PSBQYXRjaCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGluc3Qua2luZC5vcGNvZGUgPT0gUGF0Y2gpCi0gICAgICAgICAgICAgICAgICAgICAgICBj
bG9iYmVyZWRSZWdpc3RlcnMubWVyZ2UoaW5zdC5leHRyYUNsb2JiZXJlZFJlZ3MoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChuZXh0SW5zdCAmJiBuZXh0SW5zdC0+a2luZC5vcGNvZGUgPT0g
UGF0Y2gpCi0gICAgICAgICAgICAgICAgICAgICAgICBlYXJseU5leHRDbG9iYmVyZWRSZWdpc3Rl
cnMubWVyZ2UobmV4dEluc3QtPmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCkpOwotCi0gICAgICAg
ICAgICAgICAgICAgIGNsb2JiZXJlZFJlZ2lzdGVycy5maWx0ZXIobV9hbGxvd2VkUmVnaXN0ZXJz
KTsKLSAgICAgICAgICAgICAgICAgICAgY2xvYmJlcmVkUmVnaXN0ZXJzLmV4Y2x1ZGUobV9uYW1l
ZERlZmRSZWdzKTsKLSAgICAgICAgICAgICAgICAgICAgZWFybHlOZXh0Q2xvYmJlcmVkUmVnaXN0
ZXJzLmZpbHRlcihtX2FsbG93ZWRSZWdpc3RlcnMpOwotCi0gICAgICAgICAgICAgICAgICAgIG1f
bmFtZWREZWZkUmVncy5tZXJnZShjbG9iYmVyZWRSZWdpc3RlcnMpOwotICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChpbnN0LmtpbmQub3Bjb2RlID09IFBhdGNoKSB7CisgICAgICAg
ICAgICAgICAgbV9lYXJseUNsb2JiZXIubWVyZ2UoaW5zdC5leHRyYUVhcmx5Q2xvYmJlcmVkUmVn
cygpKTsKKyAgICAgICAgICAgICAgICBtX2xhdGVDbG9iYmVyLm1lcmdlKGluc3QuZXh0cmFDbG9i
YmVyZWRSZWdzKCkpOworCisgICAgICAgICAgICAgICAgbV9lYXJseUNsb2JiZXIuZmlsdGVyKG1f
YWxsb3dlZFJlZ2lzdGVycyk7CisgICAgICAgICAgICAgICAgbV9sYXRlQ2xvYmJlci5maWx0ZXIo
bV9hbGxvd2VkUmVnaXN0ZXJzKTsKKworICAgICAgICAgICAgICAgIG1fY2xvYmJlcmVkVG9DbGVh
ci5tZXJnZShtX2Vhcmx5Q2xvYmJlcik7CisgICAgICAgICAgICAgICAgbV9jbG9iYmVyZWRUb0Ns
ZWFyLm1lcmdlKG1fbGF0ZUNsb2JiZXIpOworICAgICAgICAgICAgICAgIG1fY2xvYmJlcmVkVG9D
bGVhci5leGNsdWRlKG1fbmFtZWREZWZkUmVncyk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGF1dG8gYWxsb2NOYW1lZCA9IFsmXSAoY29uc3QgUmVnaXN0ZXJTZXQmIG5hbWVkLCBib29s
IGlzRGVmKSB7CisgICAgICAgICAgICBhdXRvIGFsbG9jTmFtZWQgPSBbJl0gKGNvbnN0IFJlZ2lz
dGVyU2V0JiBuYW1lZCwgQXJnOjpSb2xlIHJvbGUpIHsKICAgICAgICAgICAgICAgICBmb3IgKFJl
ZyByZWcgOiBuYW1lZCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoVG1wIG9jY3VweWluZ1Rt
cCA9IGN1cnJlbnRBbGxvY2F0aW9uW3JlZ10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChvY2N1cHlpbmdUbXAgPT0gVG1wKHJlZykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBm
cmVlRGVhZFRtcHNJZk5lZWRlZCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIHNwaWxsIGEgZGVhZCB0
bXAuCi0gICAgICAgICAgICAgICAgICAgIGFsbG9jKFRtcChyZWcpLCByZWcsIGlzRGVmKTsKKyAg
ICAgICAgICAgICAgICAgICAgYWxsb2MoVG1wKHJlZyksIHJlZywgcm9sZSk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgYWxsb2NOYW1lZChtX25hbWVk
VXNlZFJlZ3MsIGZhbHNlKTsgLy8gTXVzdCBjb21lIGJlZm9yZSB0aGUgZGVmZCByZWdpc3RlcnMg
c2luY2Ugd2UgbWF5IHVzZSBhbmQgZGVmIHRoZSBzYW1lIHJlZ2lzdGVyLgotICAgICAgICAgICAg
YWxsb2NOYW1lZChtX25hbWVkRGVmZFJlZ3MsIHRydWUpOworICAgICAgICAgICAgYXV0byBzcGls
bElmTmVlZGVkID0gWyZdIChjb25zdCBSZWdpc3RlclNldCYgc2V0KSB7CisgICAgICAgICAgICAg
ICAgZm9yIChSZWcgcmVnIDogc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChUbXAgdG1w
ID0gbV9jdXJyZW50QWxsb2NhdGlvbi0+YXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNwaWxsKHRtcCwgcmVnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCisg
ICAgICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgY29ycmVjdG5lc3MgYmVjYXVzZSB3ZSBy
ZXVzZSBzdGFjayBzbG90cyBiZXR3ZWVuCisgICAgICAgICAgICAvLyBUbXBzIHRoYXQgZG9uJ3Qg
aW50ZXJmZXJlLiBTbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBzcGlsbCBhCisgICAg
ICAgICAgICAvLyBkZWFkIFRtcCB0byBhIGxpdmUgVG1wJ3Mgc2xvdC4KKyAgICAgICAgICAgIGZy
ZWVEZWFkVG1wc0lmTmVlZGVkKCk7CisKKyAgICAgICAgICAgIHNwaWxsSWZOZWVkZWQobV9lYXJs
eUNsb2JiZXIpOworICAgICAgICAgICAgc3BpbGxJZk5lZWRlZChtX2xhdGVDbG9iYmVyKTsKKwor
ICAgICAgICAgICAgYWxsb2NOYW1lZChtX25hbWVkVXNlZFJlZ3MsIEFyZzo6Um9sZTo6VXNlKTsg
Ly8gTXVzdCBjb21lIGJlZm9yZSB0aGUgZGVmZCByZWdpc3RlcnMgc2luY2Ugd2UgbWF5IHVzZSBh
bmQgZGVmIHRoZSBzYW1lIHJlZ2lzdGVyLgorICAgICAgICAgICAgYWxsb2NOYW1lZChtX25hbWVk
RGVmZFJlZ3MsIEFyZzo6Um9sZTo6RGVmKTsKIAogICAgICAgICAgICAgaWYgKG5lZWRzVG9HZW5l
cmF0ZSkgewogICAgICAgICAgICAgICAgIGF1dG8gdHJ5QWxsb2NhdGUgPSBbJl0gewotICAgICAg
ICAgICAgICAgICAgICBWZWN0b3I8VG1wKiwgOD4gdXNlc1RvQWxsb2M7Ci0gICAgICAgICAgICAg
ICAgICAgIFZlY3RvcjxUbXAqLCA4PiBkZWZzVG9BbGxvYzsKKyAgICAgICAgICAgICAgICAgICAg
VmVjdG9yPHN0ZDo6cGFpcjxUbXAqLCBBcmc6OlJvbGU+LCA4PiB1c2VzVG9BbGxvYzsKKyAgICAg
ICAgICAgICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxUbXAqLCBBcmc6OlJvbGU+LCA4PiBkZWZz
VG9BbGxvYzsKIAogICAgICAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXAoWyZdIChUbXAm
IHRtcCwgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodG1wLmlzUmVnKCkpCkBAIC02NTgsMTUgKzcwMCwxOCBAQCB2b2lkIEdlbmVyYXRl
QW5kQWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVyCiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIHRyZWF0IFVzZStEZWYgYXMgYSB1c2UuCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0FueVVzZShyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VzVG9B
bGxvYy5hcHBlbmQoJnRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlc1RvQWxs
b2MuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKCZ0bXAsIHJvbGUpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmc1RvQWxsb2MuYXBwZW5kKCZ0bXApOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZnNUb0FsbG9jLmFwcGVuZChzdGQ6Om1ha2VfcGFpcigmdG1wLCByb2xlKSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0pOwogCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gdHJ5QWxs
b2NhdGVUbXBzID0gWyZdIChhdXRvJiB2ZWN0b3IsIGJvb2wgaXNEZWYpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byB0cnlBbGxvY2F0ZVRtcHMgPSBbJl0gKGF1dG8mIHZlY3RvcikgewogICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoVG1wKiB0bXAgOiB2ZWN0b3IpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3VjY2VzcyAmPSBhc3NpZ25UbXAoKnRtcCwgdG1wLT5iYW5rKCksIGlzRGVmKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoc3RkOjpwYWlyPFRtcCosIEFyZzo6Um9sZT4gcGFp
ciA6IHZlY3RvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRtcCYgdG1wID0gKnN0
ZDo6Z2V0PDA+KHBhaXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzo6Um9sZSBy
b2xlID0gc3RkOjpnZXQ8MT4ocGFpcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vj
Y2VzcyAmPSBhc3NpZ25UbXAodG1wLCB0bXAuYmFuaygpLCByb2xlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWNjZXNzOwogICAg
ICAgICAgICAgICAgICAgICB9OwogCkBAIC02NzYsOCArNzIxLDggQEAgdm9pZCBHZW5lcmF0ZUFu
ZEFsbG9jYXRlUmVnaXN0ZXJzOjpnZW5lcgogICAgICAgICAgICAgICAgICAgICAvLyBzb21lIHRt
cHMgbWF5IGJvdGggYmUgdXNlZCBhbmQgZGVmZC4gU28gd2UgaGFuZGxlIHVzZXMgZmlyc3Qgc2lu
Y2UgZm9yRWFjaFRtcCBjb3VsZAogICAgICAgICAgICAgICAgICAgICAvLyB3YWxrIHVzZXMvZGVm
cyBpbiBhbnkgb3JkZXIuCiAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgJj0gdHJ5QWxsb2NhdGVUbXBzKHVzZXNUb0Fs
bG9jLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgJj0gdHJ5QWxsb2NhdGVU
bXBzKGRlZnNUb0FsbG9jLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyAmPSB0
cnlBbGxvY2F0ZVRtcHModXNlc1RvQWxsb2MpOworICAgICAgICAgICAgICAgICAgICBzdWNjZXNz
ICY9IHRyeUFsbG9jYXRlVG1wcyhkZWZzVG9BbGxvYyk7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzdWNjZXNzOwogICAgICAgICAgICAgICAgIH07CiAKQEAgLTcyOSw3ICs3NzQsNiBAQCB2
b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVyCiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIGlmIChtX2NvZGUubmVlZHNVc2VkUmVnaXN0ZXJzKCkgJiYgaW5zdC5raW5k
Lm9wY29kZSA9PSBQYXRjaCkgewotICAgICAgICAgICAgICAgIGZyZWVEZWFkVG1wc0lmTmVlZGVk
KCk7CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcmVnaXN0ZXJTZXQ7CiAgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjdXJyZW50QWxsb2NhdGlvbi5zaXplKCk7ICsr
aSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEFsbG9jYXRpb25baV0pCkBAIC03
MzgsMTMgKzc4MiwxMCBAQCB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVy
CiAgICAgICAgICAgICAgICAgaW5zdC5yZXBvcnRVc2VkUmVnaXN0ZXJzKHJlZ2lzdGVyU2V0KTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYXV0byBjbG9iYmVyID0gWyZdIChjb25zdCBS
ZWdpc3RlclNldCYgc2V0KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogc2V0KSB7
Ci0gICAgICAgICAgICAgICAgICAgIFRtcCB0bXAocmVnKTsKLSAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGN1cnJlbnRBbGxvY2F0aW9uW3JlZ10gPT0gdG1wKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9hdmFpbGFibGVSZWdzW3RtcC5iYW5rKCldLnNldChyZWcpOwotICAgICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRBbGxvY2F0aW9uLT5hdChyZWcpID0gVG1wKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fbWFwW3RtcF0ucmVnID0gUmVnKCk7CisgICAgICAgICAgICBhdXRvIGhhbmRsZUNs
b2JiZXIgPSBbJl0geworICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IG1fY2xvYmJlcmVk
VG9DbGVhcikgeworICAgICAgICAgICAgICAgICAgICBpZiAoVG1wIHRtcCA9IG1fY3VycmVudEFs
bG9jYXRpb24tPmF0KHJlZykpCisgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlKHRtcCwg
cmVnKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9OwogCkBAIC03NTQsMTQgKzc5
NSwxMSBAQCB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVyCiAgICAgICAg
ICAgICAgICAgICAgIGp1bXAgPSBpbnN0LmdlbmVyYXRlKCptX2ppdCwgY29udGV4dCk7CiAgICAg
ICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChqdW1wLCAhanVtcC5pc1NldCgpKTsKIAotICAgICAg
ICAgICAgICAgIGFsbG9jTmFtZWQoZWFybHlOZXh0Q2xvYmJlcmVkUmVnaXN0ZXJzLCB0cnVlKTsK
LSAgICAgICAgICAgICAgICBjbG9iYmVyZWRSZWdpc3RlcnMubWVyZ2UoZWFybHlOZXh0Q2xvYmJl
cmVkUmVnaXN0ZXJzKTsKLSAgICAgICAgICAgICAgICBjbG9iYmVyKGNsb2JiZXJlZFJlZ2lzdGVy
cyk7CisgICAgICAgICAgICAgICAgaGFuZGxlQ2xvYmJlcigpOwogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICBBU1NFUlQobmVlZHNUb0dlbmVyYXRlKTsKIAotICAgICAgICAg
ICAgICAgIGNsb2JiZXIoY2xvYmJlcmVkUmVnaXN0ZXJzKTsKLSAgICAgICAgICAgICAgICBBU1NF
UlQoZWFybHlOZXh0Q2xvYmJlcmVkUmVnaXN0ZXJzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAg
ICAgaGFuZGxlQ2xvYmJlcigpOwogCiAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5udW1TdWNj
ZXNzb3JzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gQnkgZGVmYXVsdCwgd2Ugc3BpbGwg
ZXZlcnl0aGluZyBiZXR3ZWVuIGJsb2NrIGJvdW5kYXJpZXMuIEhvd2V2ZXIsIHdlIGhhdmUgYSBz
bWFsbApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lz
dGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVD
b2RlLmgJKHJldmlzaW9uIDI5MzkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0FuZEdlbmVyYXRlQ29kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OSw5ICs1OSw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWxlYXNlKFRtcCwgUmVn
KTsKICAgICB2b2lkIGZsdXNoKFRtcCwgUmVnKTsKICAgICB2b2lkIHNwaWxsKFRtcCwgUmVnKTsK
LSAgICB2b2lkIGFsbG9jKFRtcCwgUmVnLCBib29sIGlzRGVmKTsKKyAgICB2b2lkIGFsbG9jKFRt
cCwgUmVnLCBBcmc6OlJvbGUpOwogICAgIHZvaWQgZnJlZURlYWRUbXBzSWZOZWVkZWQoKTsKLSAg
ICBib29sIGFzc2lnblRtcChUbXAmLCBCYW5rLCBib29sIGlzRGVmKTsKKyAgICBib29sIGFzc2ln
blRtcChUbXAmLCBCYW5rLCBBcmc6OlJvbGUpOwogICAgIHZvaWQgYnVpbGRMaXZlUmFuZ2VzKFVu
aWZpZWRUbXBMaXZlbmVzcyYpOwogICAgIGJvb2wgaXNEaXNhbGxvd2VkUmVnaXN0ZXIoUmVnKTsK
IApAQCAtNzgsMTIgKzc4LDE2IEBAIHByaXZhdGU6CiAKICAgICBWZWN0b3I8UmVnPiBtX3JlZ2lz
dGVyc1tudW1CYW5rc107CiAgICAgUmVnaXN0ZXJTZXQgbV9hdmFpbGFibGVSZWdzW251bUJhbmtz
XTsKKyAgICBzaXplX3QgbV9uZXh0SW5kZXhUb0ZyZWU7CiAgICAgc2l6ZV90IG1fZ2xvYmFsSW5z
dEluZGV4OwogICAgIEluZGV4TWFwPFJlZywgVG1wPiogbV9jdXJyZW50QWxsb2NhdGlvbiB7IG51
bGxwdHIgfTsKLSAgICBib29sIG1fZGlkQWxyZWFkeUZyZWVEZWFkU2xvdHM7CiAgICAgVG1wTWFw
PHNpemVfdD4gbV9saXZlUmFuZ2VFbmQ7CisgICAgSGFzaE1hcDxzaXplX3QsIFZlY3RvcjxUbXAs
IDI+PiBtX3RtcHNUb1JlbGVhc2U7CiAgICAgUmVnaXN0ZXJTZXQgbV9uYW1lZFVzZWRSZWdzOwog
ICAgIFJlZ2lzdGVyU2V0IG1fbmFtZWREZWZkUmVnczsKKyAgICBSZWdpc3RlclNldCBtX2Vhcmx5
Q2xvYmJlcjsKKyAgICBSZWdpc3RlclNldCBtX2xhdGVDbG9iYmVyOworICAgIFJlZ2lzdGVyU2V0
IG1fY2xvYmJlcmVkVG9DbGVhcjsKICAgICBSZWdpc3RlclNldCBtX2FsbG93ZWRSZWdpc3RlcnM7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFVuaWZpZWRUbXBMaXZlbmVzcz4gbV9saXZlbmVzczsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCShyZXZpc2lvbiAy
OTM5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzkyLDYgKzIzOTIsMTI0IEBAIHZvaWQgdGVzdFpEZWZPZlNwaWxsU2xv
dFdpdGhPZmZzZXROZWVkaW4KICAgICBDSEVDSyhyZXN1bHQgPT0gc3RhdGljX2Nhc3Q8aW50MzJf
dD4obnVtYmVyT2ZTbG90cykpOwogfQogCit2b2lkIHRlc3RFYXJseUFuZExhdGVVc2VPZlNhbWVU
bXAoKQoreworICAgIFdlYWtSYW5kb20gd2Vha1JhbmRvbTsKKyAgICBzaXplX3QgbnVtVG1wcyA9
IFJlZ2lzdGVyU2V0OjphbGxHUFJzKCkubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKTsKKyAgICBpbnQ2
NF90IGV4cGVjdGVkUmVzdWx0ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVRt
cHM7ICsraSkKKyAgICAgICAgZXhwZWN0ZWRSZXN1bHQgKz0gaTsKKworICAgIGZvciAodW5zaWdu
ZWQgaiA9IDA7IGogPCA2MDsgKytqKSB7CisgICAgICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAg
ICAgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgICAgIEIzOjpBaXI6OlNwZWNp
YWwqIHBhdGNocG9pbnRTcGVjaWFsID0gY29kZS5hZGRTcGVjaWFsKG1ha2VVbmlxdWU8QjM6OlBh
dGNocG9pbnRTcGVjaWFsPigpKTsKKworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5h
ZGRCbG9jaygpOworICAgICAgICBWZWN0b3I8VG1wPiB0bXBzOworICAgICAgICBUbXAgcmVzdWx0
ID0gY29kZS5uZXdUbXAoQjM6OkdQKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxw
dHIsIEFyZzo6aW1tKDApLCByZXN1bHQpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG51bVRtcHM7ICsraSkgeworICAgICAgICAgICAgVG1wIHRtcCA9IGNvZGUubmV3VG1wKEIzOjpH
UCk7CisgICAgICAgICAgICB0bXBzLmFwcGVuZCh0bXApOworICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKGkpLCB0bXApOworICAgICAgICB9CisKKyAgICAg
ICAgeworICAgICAgICAgICAgdW5zaWduZWQgcmFuZCA9IHdlYWtSYW5kb20uZ2V0VWludDMyKHRt
cHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIEIzOjpWYWx1ZSogZHVtbXlWYWx1ZSA9IHByb2MuYWRk
Q29uc3RhbnQoQjM6Ok9yaWdpbigpLCBCMzo6SW50NjQsIDApOworCisgICAgICAgICAgICBCMzo6
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gcHJvYy5hZGQ8QjM6OlBhdGNocG9pbnRWYWx1
ZT4oQjM6OlZvaWQsIEIzOjpPcmlnaW4oKSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBl
bmQoZHVtbXlWYWx1ZSwgQjM6OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgICAgICAgICAg
cGF0Y2hwb2ludC0+YXBwZW5kKGR1bW15VmFsdWUsIEIzOjpWYWx1ZVJlcDo6U29tZUxhdGVSZWdp
c3Rlcik7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldDo6
dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IVJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpLmdldChwYXJhbXNbMV0u
Z3ByKCkpKTsKKworICAgICAgICAgICAgICAgIGF1dG8gZ29vZCA9IGppdC5icmFuY2g2NChDQ2Fs
bEhlbHBlcnM6OkVxdWFsLCBwYXJhbXNbMV0uZ3ByKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKHJhbmQpKTsKKyAgICAgICAgICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAgICAgICAg
ICAgICAgIGdvb2QubGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIGF1dG8gZ29vZDIgPSBq
aXQuYnJhbmNoNjQoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgcGFyYW1zWzBdLmdwcigpLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihyYW5kKSk7CisgICAgICAgICAgICAgICAgaml0LmJyZWFrcG9p
bnQoKTsKKyAgICAgICAgICAgICAgICBnb29kMi5saW5rKCZqaXQpOworICAgICAgICAgICAgfSk7
CisKKyAgICAgICAgICAgIEluc3QgaW5zdChQYXRjaCwgcGF0Y2hwb2ludCwgQXJnOjpzcGVjaWFs
KHBhdGNocG9pbnRTcGVjaWFsKSk7CisKKyAgICAgICAgICAgIFRtcCB0bXAgPSB0bXBzW3JhbmRd
OworICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZCh0bXApOworICAgICAgICAgICAgaW5zdC5h
cmdzLmFwcGVuZCh0bXApOworICAgICAgICAgICAgcm9vdC0+YXBwZW5kKGluc3QpOworICAgICAg
ICB9CisKKyAgICAgICAgZm9yIChUbXAgdG1wIDogdG1wcykKKyAgICAgICAgICAgIHJvb3QtPmFw
cGVuZChBZGQ2NCwgbnVsbHB0ciwgdG1wLCByZXN1bHQpOworICAgICAgICByb290LT5hcHBlbmQo
TW92ZSwgbnVsbHB0ciwgcmVzdWx0LCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAg
ICAgICAgcm9vdC0+YXBwZW5kKFJldDY0LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKTsKKworICAgICAgICBpbnQ2NF90IGFjdHVhbFJlc3VsdCA9IGNvbXBpbGVBbmRSdW48
aW50NjRfdD4ocHJvYyk7CisgICAgICAgIENIRUNLKGFjdHVhbFJlc3VsdCA9PSBleHBlY3RlZFJl
c3VsdCk7CisgICAgfQorfQorCit2b2lkIHRlc3RFYXJseUNsb2JiZXJJbnRlcmZlcmVuY2UoKQor
eworICAgIFdlYWtSYW5kb20gd2Vha1JhbmRvbTsKKyAgICBzaXplX3QgbnVtVG1wcyA9IFJlZ2lz
dGVyU2V0OjphbGxHUFJzKCkubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKTsKKyAgICBpbnQ2NF90IGV4
cGVjdGVkUmVzdWx0ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVRtcHM7ICsr
aSkKKyAgICAgICAgZXhwZWN0ZWRSZXN1bHQgKz0gaTsKKworICAgIGZvciAodW5zaWduZWQgaiA9
IDA7IGogPCAxMDA7ICsraikgeworICAgICAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgICAg
IENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgICAgICBCMzo6QWlyOjpTcGVjaWFsKiBw
YXRjaHBvaW50U3BlY2lhbCA9IGNvZGUuYWRkU3BlY2lhbChtYWtlVW5pcXVlPEIzOjpQYXRjaHBv
aW50U3BlY2lhbD4oKSk7CisKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxv
Y2soKTsKKyAgICAgICAgVmVjdG9yPFRtcD4gdG1wczsKKyAgICAgICAgVG1wIHJlc3VsdCA9IGNv
ZGUubmV3VG1wKEIzOjpHUCk7CisgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBB
cmc6OmltbSgwKSwgcmVzdWx0KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1U
bXBzOyArK2kpIHsKKyAgICAgICAgICAgIFRtcCB0bXAgPSBjb2RlLm5ld1RtcChCMzo6R1ApOwor
ICAgICAgICAgICAgdG1wcy5hcHBlbmQodG1wKTsKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbShpKSwgdG1wKTsKKyAgICAgICAgfQorCisgICAgICAgIHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIHJhbmQgPSB3ZWFrUmFuZG9tLmdldFVpbnQzMih0bXBzLnNp
emUoKSk7CisgICAgICAgICAgICBCMzo6VmFsdWUqIGR1bW15VmFsdWUgPSBwcm9jLmFkZENvbnN0
YW50KEIzOjpPcmlnaW4oKSwgQjM6OkludDY0LCAwKTsKKworICAgICAgICAgICAgQjM6OlBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IHByb2MuYWRkPEIzOjpQYXRjaHBvaW50VmFsdWU+KEIz
OjpWb2lkLCBCMzo6T3JpZ2luKCkpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGR1
bW15VmFsdWUsIEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIHBhdGNo
cG9pbnQtPmNsb2JiZXJFYXJseShSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0Nh
bGwoKSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIVJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJl
Z2lzdGVyc0ZvckpTQ2FsbCgpLmdldChwYXJhbXNbMF0uZ3ByKCkpKTsKKworICAgICAgICAgICAg
ICAgIGF1dG8gZ29vZCA9IGppdC5icmFuY2g2NChDQ2FsbEhlbHBlcnM6OkVxdWFsLCBwYXJhbXNb
MF0uZ3ByKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHJhbmQpKTsKKyAgICAgICAgICAg
ICAgICBqaXQuYnJlYWtwb2ludCgpOworICAgICAgICAgICAgICAgIGdvb2QubGluaygmaml0KTsK
KyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBJbnN0IGluc3QoUGF0Y2gsIHBhdGNocG9p
bnQsIEFyZzo6c3BlY2lhbChwYXRjaHBvaW50U3BlY2lhbCkpOworCisgICAgICAgICAgICBUbXAg
dG1wID0gdG1wc1tyYW5kXTsKKyAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQodG1wKTsKKyAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZChpbnN0KTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAo
VG1wIHRtcCA6IHRtcHMpCisgICAgICAgICAgICByb290LT5hcHBlbmQoQWRkNjQsIG51bGxwdHIs
IHRtcCwgcmVzdWx0KTsKKyAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIHJlc3Vs
dCwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgICAgIHJvb3QtPmFwcGVuZChS
ZXQ2NCwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICAgICAg
aW50NjRfdCBhY3R1YWxSZXN1bHQgPSBjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MpOworICAg
ICAgICBDSEVDSyhhY3R1YWxSZXN1bHQgPT0gZXhwZWN0ZWRSZXN1bHQpOworICAgIH0KK30KKwog
I2RlZmluZSBQUkVGSVggIk8iLCBPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpLCAiOiAiCiAK
ICNkZWZpbmUgUlVOKHRlc3QpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CkBAIC0yNDg5LDYgKzI2MDcsOSBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAKICAg
ICBSVU4odGVzdFpEZWZPZlNwaWxsU2xvdFdpdGhPZmZzZXROZWVkaW5nVG9CZU1hdGVyaWFsaXpl
ZEluQVJlZ2lzdGVyKCkpOwogCisgICAgUlVOKHRlc3RFYXJseUFuZExhdGVVc2VPZlNhbWVUbXAo
KSk7CisgICAgUlVOKHRlc3RFYXJseUNsb2JiZXJJbnRlcmZlcmVuY2UoKSk7CisKICAgICBpZiAo
dGFza3MuaXNFbXB0eSgpKQogICAgICAgICB1c2FnZSgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZpc2lvbiAyOTM5MzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYw
LDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBzdGF0aWMgUmVnaXN0
ZXJTZXQgd2ViQXNzZW1ibHlDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7IC8vIFJlZ2lzdGVycyBzYXZl
ZCBhbmQgdXNlZCBieSB0aGUgV2ViQXNzZW1ibHkgSklULgogI2VuZGlmCi0gICAgc3RhdGljIFJl
Z2lzdGVyU2V0IHZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCk7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIFJlZ2lzdGVyU2V0IHZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCk7CiAg
ICAgc3RhdGljIFJlZ2lzdGVyU2V0IHN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOyAvLyBUaGUg
dW5pb24gb2YgY2FsbGVlIHNhdmVzIGFuZCBzcGVjaWFsIHJlZ2lzdGVycy4KICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgUmVnaXN0ZXJTZXQgbWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCk7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZ2lzdGVyU2V0IGFsbEdQUnMoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459024</attachid>
            <date>2022-05-08 22:41:47 -0700</date>
            <delta_ts>2022-05-08 22:45:56 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>24946</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjkzOTY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBA
CisyMDIyLTA1LTA4ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEJldHRlciBoYW5kbGUgY2xvYmJlcmVkIHJlZ2lzdGVycyBpbiBPMCByZWdpc3RlciBhbGxvY2F0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDAy
MDUKKyAgICAgICAgPHJkYXI6Ly84NzIyMDY4OD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIEFpcidzIE8wIHJlZ2lzdGVy
IGFsbG9jYXRvciBiZXR0ZXIgaGFuZGxlIGNsb2JiZXJlZAorICAgICAgICByZWdpc3RlcnMuIFdl
IG5vdyBtb2RlbCBib3RoIGVhcmx5IGFuZCBsYXRlIGNsb2JiZXIgZGlyZWN0bHksIGFuZCB1c2UK
KyAgICAgICAgdGhpcyB0byBwZXJmb3JtIGEgYmFzaWMgaW50ZXJmZXJlbmNlIGFuYWx5c2lzIHdo
ZW4gYWxsb2NhdGluZyBhIHJlZ2lzdGVyCisgICAgICAgIHRvIGEgVG1wLiBBbiBlYXJseSBjbG9i
YmVyIGludGVyZmVyZXMgd2l0aCBhbnkgVXNlIGluIGFuIGluc3RydWN0aW9uLCBhbmQKKyAgICAg
ICAgYW55IGxhdGUgRGVmcy4gQSBsYXRlIGNsb2JiZXIgaW50ZXJmZXJlcyB3aXRoIGFueSBEZWZz
IGluIGFuIGluc3RydWN0aW9uLAorICAgICAgICBhbmQgYW55IGxhdGUgVXNlcy4gV2hhdCB0aGlz
IGVuYWJsZXMgaXMgYW4gZWFybHkgVXNlIGNhbiBiZSBhbGxvY2F0ZWQKKyAgICAgICAgdG8gYSBy
ZWdpc3RlciB0aGF0IGlzIG9ubHkgbGF0ZSBjbG9iYmVyZWQuIEFuZCBhIHJlc3VsdCBjYW4gYmUg
YWxsb2NhdGVkIAorICAgICAgICB0byBhIHJlZ2lzdGVyIHRoYXQgaXMgb25seSBlYXJseSBjbG9i
YmVyZWQuCisgICAgICAgIAorICAgICAgICBQcmlvciB0byB0aGlzLCB0aGUgYWxnb3JpdGhtIGhh
ZCBhIGJ1ZyB3aGVyZSBhIFVzZSBtYXkgYmUgYWxsb2NhdGVkIHRvCisgICAgICAgIGEgcmVnaXN0
ZXIgdGhhdCBpcyBlYXJseSBjbG9iYmVyZWQuCisKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2Nh
dGVSZWdpc3RlcnNBbmRTdGFja0FuZEdlbmVyYXRlQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmJ1aWxkTGl2ZVJhbmdlcyk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmFsbG9j
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6R2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6
ZnJlZURlYWRUbXBzSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpHZW5lcmF0ZUFu
ZEFsbG9jYXRlUmVnaXN0ZXJzOjphc3NpZ25UbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpH
ZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpwcmVwYXJlRm9yR2VuZXJhdGlvbik6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVyYXRl
KToKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0FuZEdlbmVy
YXRlQ29kZS5oOgorICAgICAgICAqIGIzL2Fpci90ZXN0YWlyLmNwcDoKKyAgICAgICAgKiBqaXQv
UmVnaXN0ZXJTZXQuaDoKKwogMjAyMi0wNS0wNiAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xp
bmdAc29ueS5jb20+CiAKICAgICAgICAgVGVtcG9yYWwuRHVyYXRpb24jdG9TdHJpbmcgc2hvdWxk
IG5ldmVyIGlnbm9yZSBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tBbmRHZW5lcmF0ZUNv
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxs
b2NhdGVSZWdpc3RlcnNBbmRTdGFja0FuZEdlbmVyYXRlQ29kZS5jcHAJKHJldmlzaW9uIDI5Mzkz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNB
bmRTdGFja0FuZEdlbmVyYXRlQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcg
QEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpidWlsZAogewogICAgIG1fbGl2
ZVJhbmdlRW5kID0gVG1wTWFwPHNpemVfdD4obV9jb2RlLCAwKTsKIAotICAgIG1fZ2xvYmFsSW5z
dEluZGV4ID0gMDsKKyAgICBtX2dsb2JhbEluc3RJbmRleCA9IDE7CiAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fY29kZSkgewogICAgICAgICBmb3IgKFRtcCB0bXAgOiBsaXZlbmVzcy5s
aXZlQXRIZWFkKGJsb2NrKSkgewogICAgICAgICAgICAgaWYgKCF0bXAuaXNSZWcoKSkKQEAgLTE4
MCwxMSArMTgwLDEyIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmUK
IHsKICAgICBBU1NFUlQocmVnKTsKICAgICBBU1NFUlQobV9tYXBbdG1wXS5yZWcgPT0gcmVnKTsK
KyAgICBBU1NFUlQodG1wLmlzUmVnKCkgfHwgbV9saXZlUmFuZ2VFbmRbdG1wXSA+PSBtX2dsb2Jh
bEluc3RJbmRleCk7CiAgICAgZmx1c2godG1wLCByZWcpOwogICAgIHJlbGVhc2UodG1wLCByZWcp
OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6
YWxsb2MoVG1wIHRtcCwgUmVnIHJlZywgYm9vbCBpc0RlZikKK0FMV0FZU19JTkxJTkUgdm9pZCBH
ZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjphbGxvYyhUbXAgdG1wLCBSZWcgcmVnLCBBcmc6
OlJvbGUgcm9sZSkKIHsKICAgICBpZiAoVG1wIG9jY3VweWluZ1RtcCA9IG1fY3VycmVudEFsbG9j
YXRpb24tPmF0KHJlZykpCiAgICAgICAgIHNwaWxsKG9jY3VweWluZ1RtcCwgcmVnKTsKQEAgLTE5
Nyw3ICsxOTgsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlCiAg
ICAgbV9hdmFpbGFibGVSZWdzW3RtcC5iYW5rKCldLmNsZWFyKHJlZyk7CiAgICAgbV9jdXJyZW50
QWxsb2NhdGlvbi0+YXQocmVnKSA9IHRtcDsKIAotICAgIGlmICghaXNEZWYpIHsKKyAgICBpZiAo
QXJnOjppc0FueVVzZShyb2xlKSkgewogICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSBtX21hcFt0
bXBdLnNwaWxsU2xvdC0+b2Zmc2V0RnJvbUZQKCk7CiAgICAgICAgIGlmICh0bXAuYmFuaygpID09
IEdQKQogICAgICAgICAgICAgbV9qaXQtPmxvYWQ2NChjYWxsRnJhbWVBZGRyKCptX2ppdCwgb2Zm
c2V0KSwgcmVnLmdwcigpKTsKQEAgLTIwNiwxMiArMjA3LDI5IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmUKICAgICB9CiB9CiAKKy8vIGZyZWVEZWFkVG1wc0lmTmVl
ZGVkIGFuZCBwcnVuZVRtcHNBdEhlYWRCeUxpdmVuZXNzIGFyZSBuZWVkZWQgZm9yIGNvcnJlY3Ru
ZXNzIGJlY2F1c2UgCisvLyB3ZSByZXVzZSBzdGFjayBzbG90cyBiZXR3ZWVuIFRtcHMgdGhhdCBk
b24ndCBpbnRlcmZlcmUuIFNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGRvbid0CisvLyBzcGls
bCBhIGRlYWQgVG1wIHRvIGEgbGl2ZSBUbXAncyBzbG90LgorLy8gZnJlZURlYWRUbXBzSWZOZWVk
ZWQgaXMgbWVhbnQgdG8gYmUgY2FsbGVkIGFzIHdlIHdhbGsgdGhyb3VnaCBlYWNoIEluc24sIGJl
Y2F1c2UgaXQgZG9lc24ndAorLy8gY29uc3VsdCB0aGUgZW50aXJlIHJlZ2lzdGVyIGZpbGUsIGFu
ZCBpcyBmYXN0ZXIuIEJ1dCBpdCBvbmx5IHBydW5lcyB0aGluZ3MgdGhhdCBkaWUgYXQgYQorLy8g
cGFydGljdWxhciBpbnN0IGluZGV4LCBhbmQgZG9lc24ndCBwcmV2ZW50IHVzIGZyb20gcHJvcGFn
YXRpbmcgYSBUbXAgdGhhdCBpcyBsaXZlIGluIG9uZSBibG9jayAKKy8vIHRvIHRoZSBoZWFkIG9m
IGEgYmxvY2sgd2hlcmUgaXQgaXMgZGVhZC4KKy8vIHBydW5lVG1wc0F0SGVhZEJ5TGl2ZW5lc3Mg
aXMgbWVhbnQgdG8gZW5zdXJlIHdlIHBydW5lIGF3YXkgYW55IHN1Y2ggY2FzZXMgb2YgdGhlIGFi
b3ZlIGJlZm9yZQorLy8gd2Ugc3RhcnQgYWxsb2NhdGluZyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGJh
c2ljIGJsb2NrLgogQUxXQVlTX0lOTElORSB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3Rl
cnM6OmZyZWVEZWFkVG1wc0lmTmVlZGVkKCkKIHsKLSAgICBpZiAobV9kaWRBbHJlYWR5RnJlZURl
YWRTbG90cykKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gaXRlciA9IG1fdG1wc1RvUmVsZWFz
ZS5maW5kKG1fZ2xvYmFsSW5zdEluZGV4KTsKKyAgICBpZiAoaXRlciAhPSBtX3RtcHNUb1JlbGVh
c2UuZW5kKCkpIHsKKyAgICAgICAgZm9yIChUbXAgdG1wIDogaXRlci0+dmFsdWUpIHsKKyAgICAg
ICAgICAgIEFTU0VSVChtX2xpdmVSYW5nZUVuZFt0bXBdIDwgbV9nbG9iYWxJbnN0SW5kZXgpOwor
ICAgICAgICAgICAgaWYgKFJlZyByZWcgPSBtX21hcFt0bXBdLnJlZykKKyAgICAgICAgICAgICAg
ICByZWxlYXNlKHRtcCwgcmVnKTsKKyAgICAgICAgfQorICAgIH0KK30KIAotICAgIG1fZGlkQWxy
ZWFkeUZyZWVEZWFkU2xvdHMgPSB0cnVlOworQUxXQVlTX0lOTElORSB2b2lkIEdlbmVyYXRlQW5k
QWxsb2NhdGVSZWdpc3RlcnM6OnBydW5lVG1wc0F0SGVhZEJ5TGl2ZW5lc3MoKQorewogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50QWxsb2NhdGlvbi0+c2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgVG1wIHRtcCA9IG1fY3VycmVudEFsbG9jYXRpb24tPmF0KGkpOwogICAgICAgICBp
ZiAoIXRtcCkKQEAgLTIyNSw0NCArMjQzLDczIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBHZW5lcmF0
ZUFuZEFsbG9jYXRlUmUKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBHZW5lcmF0ZUFu
ZEFsbG9jYXRlUmVnaXN0ZXJzOjphc3NpZ25UbXAoVG1wJiB0bXAsIEJhbmsgYmFuaywgYm9vbCBp
c0RlZikKK0FMV0FZU19JTkxJTkUgYm9vbCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjph
c3NpZ25UbXAoVG1wJiB0bXAsIEJhbmsgYmFuaywgQXJnOjpSb2xlIHJvbGUpCiB7CiAgICAgQVNT
RVJUKCF0bXAuaXNSZWcoKSk7Ci0gICAgaWYgKFJlZyByZWcgPSBtX21hcFt0bXBdLnJlZykgewot
ICAgICAgICBBU1NFUlQoIW1fbmFtZWREZWZkUmVncy5jb250YWlucyhyZWcpKTsKLSAgICAgICAg
dG1wID0gVG1wKHJlZyk7CisKKyAgICBhdXRvIG1hcmtSZWdpc3RlckFzVXNlZCA9IFsmXSAoUmVn
IHJlZykgeworICAgICAgICBpZiAoQXJnOjppc0FueURlZihyb2xlKSkKKyAgICAgICAgICAgIG1f
Y2xvYmJlcmVkVG9DbGVhci5jbGVhcihyZWcpOworICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCBp
dCBkb2Vzbid0IG1hdHRlciBpZiB3ZSBhZGQgaXQgdG8gdGhlIG1fbmFtZWRVc2VkUmVncyBvciBt
X25hbWVkRGVmZFJlZ3MuIAorICAgICAgICAvLyBXZSBqdXN0IG5lZWQgdG8gbWFyayB0aGF0IHdl
IGNhbid0IHVzZSBpdCBhZ2FpbiBmb3IgYW5vdGhlciB0bXAuCiAgICAgICAgIG1fbmFtZWRVc2Vk
UmVncy5zZXQocmVnKTsKLSAgICAgICAgQVNTRVJUKCFtX2F2YWlsYWJsZVJlZ3NbYmFua10uZ2V0
KHJlZykpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgfTsKKworICAgIGJvb2wg
bWlnaHRJbnRlcmZlcmUgPSBtX2Vhcmx5Q2xvYmJlci5udW1iZXJPZlNldFJlZ2lzdGVycygpIHx8
IG1fbGF0ZUNsb2JiZXIubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKTsKIAotICAgIGlmICghbV9hdmFp
bGFibGVSZWdzW2JhbmtdLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkpCi0gICAgICAgIGZyZWVEZWFk
VG1wc0lmTmVlZGVkKCk7CisgICAgYXV0byBpbnRlcmZlcmVzV2l0aENsb2JiZXIgPSBbJl0gKFJl
ZyByZWcpIHsKKyAgICAgICAgaWYgKCFtaWdodEludGVyZmVyZSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkgJiYgbV9lYXJseUNsb2Ji
ZXIuZ2V0KHJlZykpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKEFyZzo6
aXNBbnlEZWYocm9sZSkgJiYgbV9sYXRlQ2xvYmJlci5nZXQocmVnKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBpZiAoQXJnOjphY3RpdmVBdChyb2xlLCBBcmc6OlBoYXNlOjpF
YXJseSkgJiYgbV9lYXJseUNsb2JiZXIuZ2V0KHJlZykpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgaWYgKEFyZzo6YWN0aXZlQXQocm9sZSwgQXJnOjpQaGFzZTo6TGF0ZSkgJiYg
bV9sYXRlQ2xvYmJlci5nZXQocmVnKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfTsKKworICAgIGlmIChSZWcgcmVnID0gbV9tYXBbdG1wXS5y
ZWcpIHsKKyAgICAgICAgaWYgKCFpbnRlcmZlcmVzV2l0aENsb2JiZXIocmVnKSkgeworICAgICAg
ICAgICAgQVNTRVJUKCFtX25hbWVkRGVmZFJlZ3MuY29udGFpbnMocmVnKSk7CisgICAgICAgICAg
ICB0bXAgPSBUbXAocmVnKTsKKyAgICAgICAgICAgIG1hcmtSZWdpc3RlckFzVXNlZChyZWcpOwor
ICAgICAgICAgICAgQVNTRVJUKCFtX2F2YWlsYWJsZVJlZ3NbYmFua10uZ2V0KHJlZykpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gVGhpcyBpcyBhIHJh
cmUgY2FzZSB3aGVuIHdlJ3ZlIGFscmVhZHkgYWxsb2NhdGVkIGEgVG1wIGluIHNvbWUgd2F5LCBi
dXQgYW5vdGhlciAKKyAgICAgICAgLy8gUm9sZSBvZiB0aGUgVG1wIGltcG9zZXMgc29tZSByZXN0
cmljdGlvbiBvbiB0aGUgcmVnaXN0ZXIgdmFsdWUuIEUuZywgaWYKKyAgICAgICAgLy8gd2UgaGF2
ZSBhIHByb2dyYW0gbGlrZToKKyAgICAgICAgLy8gUGF0Y2ggVXNlOnRtcDEsIExhdGVVc2U6dG1w
MSwgbGF0ZUNsb2JiZXI6eDAKKyAgICAgICAgLy8gVGhlIGZpcnN0IHVzZSBvZiB0bXAxIGNhbiBi
ZSBhbGxvY2F0ZWQgdG8geDAsIGJ1dCB0aGUgc2Vjb25kIGNhbm5vdC4KKyAgICAgICAgc3BpbGwo
dG1wLCByZWcpOworCisgICAgfQogCiAgICAgaWYgKG1fYXZhaWxhYmxlUmVnc1tiYW5rXS5udW1i
ZXJPZlNldFJlZ2lzdGVycygpKSB7CiAgICAgICAgIC8vIFdlIGZpcnN0IHRha2UgYW4gYXZhaWxh
YmxlIHJlZ2lzdGVyLgogICAgICAgICBmb3IgKFJlZyByZWcgOiBtX3JlZ2lzdGVyc1tiYW5rXSkg
ewotICAgICAgICAgICAgaWYgKG1fbmFtZWRVc2VkUmVncy5jb250YWlucyhyZWcpIHx8IG1fbmFt
ZWREZWZkUmVncy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgaWYgKGludGVyZmVyZXNXaXRo
Q2xvYmJlcihyZWcpIHx8IG1fbmFtZWRVc2VkUmVncy5jb250YWlucyhyZWcpIHx8IG1fbmFtZWRE
ZWZkUmVncy5jb250YWlucyhyZWcpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgaWYgKCFtX2F2YWlsYWJsZVJlZ3NbYmFua10uY29udGFpbnMocmVnKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG1fbmFtZWRVc2VkUmVncy5zZXQocmVnKTsg
Ly8gQXQgdGhpcyBwb2ludCwgaXQgZG9lc24ndCBtYXR0ZXIgaWYgd2UgYWRkIGl0IHRvIHRoZSBt
X25hbWVkVXNlZFJlZ3Mgb3IgbV9uYW1lZERlZmRSZWdzLiBXZSBqdXN0IG5lZWQgdG8gbWFyayB0
aGF0IHdlIGNhbid0IHVzZSBpdCBhZ2Fpbi4KLSAgICAgICAgICAgIGFsbG9jKHRtcCwgcmVnLCBp
c0RlZik7CisKKyAgICAgICAgICAgIG1hcmtSZWdpc3RlckFzVXNlZChyZWcpOworICAgICAgICAg
ICAgYWxsb2ModG1wLCByZWcsIHJvbGUpOwogICAgICAgICAgICAgdG1wID0gVG1wKHJlZyk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotCi0gICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCiAgICAgLy8gTm90aGluZyB3YXMgYXZhaWxhYmxl
LCBsZXQncyBtYWtlIHNvbWUgcm9vbS4KICAgICBmb3IgKFJlZyByZWcgOiBtX3JlZ2lzdGVyc1ti
YW5rXSkgewotICAgICAgICBpZiAobV9uYW1lZFVzZWRSZWdzLmNvbnRhaW5zKHJlZykgfHwgbV9u
YW1lZERlZmRSZWdzLmNvbnRhaW5zKHJlZykpCisgICAgICAgIGlmIChpbnRlcmZlcmVzV2l0aENs
b2JiZXIocmVnKSB8fCBtX25hbWVkVXNlZFJlZ3MuY29udGFpbnMocmVnKSB8fCBtX25hbWVkRGVm
ZFJlZ3MuY29udGFpbnMocmVnKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIG1f
bmFtZWRVc2VkUmVncy5zZXQocmVnKTsKLQotICAgICAgICBhbGxvYyh0bXAsIHJlZywgaXNEZWYp
OworICAgICAgICBtYXJrUmVnaXN0ZXJBc1VzZWQocmVnKTsKKyAgICAgICAgYWxsb2ModG1wLCBy
ZWcsIHJvbGUpOwogICAgICAgICB0bXAgPSBUbXAocmVnKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQpAQCAtMjk4LDcgKzM0NSw3IEBAIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lz
dGVyczo6cHJlcGEKIAogICAgICAgICBWZWN0b3I8U3RhY2tTbG90KiwgMTY+IGZyZWVTbG90czsK
ICAgICAgICAgVmVjdG9yPFN0YWNrU2xvdCosIDQ+IHRvRnJlZTsKLSAgICAgICAgbV9nbG9iYWxJ
bnN0SW5kZXggPSAwOworICAgICAgICBtX2dsb2JhbEluc3RJbmRleCA9IDE7CiAgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKICAgICAgICAgICAgIGF1dG8gYXNzaWdu
U3RhY2tTbG90VG9UbXAgPSBbJl0gKFRtcCB0bXApIHsKICAgICAgICAgICAgICAgICBpZiAodG1w
LmlzUmVnKCkpCkBAIC00MjQsNiArNDcxLDEyIEBAIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJl
Z2lzdGVyczo6Z2VuZXIKIAogICAgIGJ1aWxkTGl2ZVJhbmdlcygqbV9saXZlbmVzcyk7CiAKKyAg
ICBtX2NvZGUuZm9yRWFjaFRtcChbJl0gKFRtcCB0bXApIHsKKyAgICAgICAgQVNTRVJUKCF0bXAu
aXNSZWcoKSk7CisgICAgICAgIGlmIChzaXplX3QgbGl2ZVJhbmdlRW5kID0gbV9saXZlUmFuZ2VF
bmRbdG1wXSkKKyAgICAgICAgICAgIG1fdG1wc1RvUmVsZWFzZS5hZGQobGl2ZVJhbmdlRW5kICsg
MSwgVmVjdG9yPFRtcCwgMj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZCh0bXApOworICAgIH0p
OworCiAgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIEluZGV4TWFwPFJlZywgVG1wPj4gY3VycmVu
dEFsbG9jYXRpb25NYXAobV9jb2RlLnNpemUoKSk7CiAgICAgewogICAgICAgICBJbmRleE1hcDxS
ZWcsIFRtcD4gZGVmYXVsdEN1cnJlbnRBbGxvY2F0aW9uKFJlZzo6bWF4SW5kZXgoKSArIDEpOwpA
QCAtNDYxLDcgKzUxNCw3IEBAIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6Z2Vu
ZXIKIAogICAgIERpc2Fzc2VtYmxlciogZGlzYXNzZW1ibGVyID0gbV9jb2RlLmRpc2Fzc2VtYmxl
cigpOwogCi0gICAgbV9nbG9iYWxJbnN0SW5kZXggPSAwOworICAgIG1fZ2xvYmFsSW5zdEluZGV4
ID0gMTsKIAogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKICAgICAgICAg
Y29udGV4dC5jdXJyZW50QmxvY2sgPSBibG9jazsKQEAgLTUyNSw2ICs1NzgsOCBAQCB2b2lkIEdl
bmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVyCiAKICAgICAgICAgKyttX2dsb2JhbElu
c3RJbmRleDsKIAorICAgICAgICBwcnVuZVRtcHNBdEhlYWRCeUxpdmVuZXNzKCk7CisKICAgICAg
ICAgYm9vbCBpc1JlcGxheWluZ1NhbWVJbnN0ID0gZmFsc2U7CiAgICAgICAgIGZvciAoc2l6ZV90
IGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7
CiAgICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CkBAIC01MzYsMTAgKzU5MSwxMSBAQCB2
b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVyCiAKICAgICAgICAgICAgIElu
c3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKIAotICAgICAgICAgICAgbV9kaWRBbHJl
YWR5RnJlZURlYWRTbG90cyA9IGZhbHNlOwotCiAgICAgICAgICAgICBtX25hbWVkVXNlZFJlZ3Mg
PSBSZWdpc3RlclNldCgpOwogICAgICAgICAgICAgbV9uYW1lZERlZmRSZWdzID0gUmVnaXN0ZXJT
ZXQoKTsKKyAgICAgICAgICAgIG1fZWFybHlDbG9iYmVyID0gUmVnaXN0ZXJTZXQoKTsKKyAgICAg
ICAgICAgIG1fbGF0ZUNsb2JiZXIgPSBSZWdpc3RlclNldCgpOworICAgICAgICAgICAgbV9jbG9i
YmVyZWRUb0NsZWFyID0gUmVnaXN0ZXJTZXQoKTsKIAogICAgICAgICAgICAgYm9vbCBuZWVkc1Rv
R2VuZXJhdGUgPSAoWyZdICgpIC0+IGJvb2wgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgY29uc2lkZXIgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgd2UgY2FuIGFsc28gZWxp
ZGUgTW92MzJzCkBAIC02MTQsNDMgKzY3MCw0OCBAQCB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVS
ZWdpc3RlcnM6OmdlbmVyCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7CiAKLSAg
ICAgICAgICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXJlZFJlZ2lzdGVyczsKLSAgICAgICAgICAgIFJl
Z2lzdGVyU2V0IGVhcmx5TmV4dENsb2JiZXJlZFJlZ2lzdGVyczsKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBJbnN0KiBuZXh0SW5zdCA9IGJsb2NrLT5nZXQoaW5zdEluZGV4ICsgMSk7
Ci0gICAgICAgICAgICAgICAgaWYgKGluc3Qua2luZC5vcGNvZGUgPT0gUGF0Y2ggfHwgKG5leHRJ
bnN0ICYmIG5leHRJbnN0LT5raW5kLm9wY29kZSA9PSBQYXRjaCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGluc3Qua2luZC5vcGNvZGUgPT0gUGF0Y2gpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjbG9iYmVyZWRSZWdpc3RlcnMubWVyZ2UoaW5zdC5leHRyYUNsb2JiZXJlZFJlZ3MoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0SW5zdCAmJiBuZXh0SW5zdC0+a2luZC5vcGNv
ZGUgPT0gUGF0Y2gpCi0gICAgICAgICAgICAgICAgICAgICAgICBlYXJseU5leHRDbG9iYmVyZWRS
ZWdpc3RlcnMubWVyZ2UobmV4dEluc3QtPmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCkpOwotCi0g
ICAgICAgICAgICAgICAgICAgIGNsb2JiZXJlZFJlZ2lzdGVycy5maWx0ZXIobV9hbGxvd2VkUmVn
aXN0ZXJzKTsKLSAgICAgICAgICAgICAgICAgICAgY2xvYmJlcmVkUmVnaXN0ZXJzLmV4Y2x1ZGUo
bV9uYW1lZERlZmRSZWdzKTsKLSAgICAgICAgICAgICAgICAgICAgZWFybHlOZXh0Q2xvYmJlcmVk
UmVnaXN0ZXJzLmZpbHRlcihtX2FsbG93ZWRSZWdpc3RlcnMpOwotCi0gICAgICAgICAgICAgICAg
ICAgIG1fbmFtZWREZWZkUmVncy5tZXJnZShjbG9iYmVyZWRSZWdpc3RlcnMpOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpbnN0LmtpbmQub3Bjb2RlID09IFBhdGNoKSB7Cisg
ICAgICAgICAgICAgICAgbV9lYXJseUNsb2JiZXIubWVyZ2UoaW5zdC5leHRyYUVhcmx5Q2xvYmJl
cmVkUmVncygpKTsKKyAgICAgICAgICAgICAgICBtX2xhdGVDbG9iYmVyLm1lcmdlKGluc3QuZXh0
cmFDbG9iYmVyZWRSZWdzKCkpOworCisgICAgICAgICAgICAgICAgbV9lYXJseUNsb2JiZXIuZmls
dGVyKG1fYWxsb3dlZFJlZ2lzdGVycyk7CisgICAgICAgICAgICAgICAgbV9sYXRlQ2xvYmJlci5m
aWx0ZXIobV9hbGxvd2VkUmVnaXN0ZXJzKTsKKworICAgICAgICAgICAgICAgIG1fY2xvYmJlcmVk
VG9DbGVhci5tZXJnZShtX2Vhcmx5Q2xvYmJlcik7CisgICAgICAgICAgICAgICAgbV9jbG9iYmVy
ZWRUb0NsZWFyLm1lcmdlKG1fbGF0ZUNsb2JiZXIpOworICAgICAgICAgICAgICAgIG1fY2xvYmJl
cmVkVG9DbGVhci5leGNsdWRlKG1fbmFtZWREZWZkUmVncyk7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGF1dG8gYWxsb2NOYW1lZCA9IFsmXSAoY29uc3QgUmVnaXN0ZXJTZXQmIG5hbWVk
LCBib29sIGlzRGVmKSB7CisgICAgICAgICAgICBhdXRvIGFsbG9jTmFtZWQgPSBbJl0gKGNvbnN0
IFJlZ2lzdGVyU2V0JiBuYW1lZCwgQXJnOjpSb2xlIHJvbGUpIHsKICAgICAgICAgICAgICAgICBm
b3IgKFJlZyByZWcgOiBuYW1lZCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoVG1wIG9jY3Vw
eWluZ1RtcCA9IGN1cnJlbnRBbGxvY2F0aW9uW3JlZ10pIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChvY2N1cHlpbmdUbXAgPT0gVG1wKHJlZykpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
ICAgICBmcmVlRGVhZFRtcHNJZk5lZWRlZCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIHNwaWxsIGEg
ZGVhZCB0bXAuCi0gICAgICAgICAgICAgICAgICAgIGFsbG9jKFRtcChyZWcpLCByZWcsIGlzRGVm
KTsKKyAgICAgICAgICAgICAgICAgICAgYWxsb2MoVG1wKHJlZyksIHJlZywgcm9sZSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgYXV0byBzcGlsbElm
TmVlZGVkID0gWyZdIChjb25zdCBSZWdpc3RlclNldCYgc2V0KSB7CisgICAgICAgICAgICAgICAg
Zm9yIChSZWcgcmVnIDogc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChUbXAgdG1wID0g
bV9jdXJyZW50QWxsb2NhdGlvbi0+YXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNw
aWxsKHRtcCwgcmVnKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9OwogCi0gICAg
ICAgICAgICBhbGxvY05hbWVkKG1fbmFtZWRVc2VkUmVncywgZmFsc2UpOyAvLyBNdXN0IGNvbWUg
YmVmb3JlIHRoZSBkZWZkIHJlZ2lzdGVycyBzaW5jZSB3ZSBtYXkgdXNlIGFuZCBkZWYgdGhlIHNh
bWUgcmVnaXN0ZXIuCi0gICAgICAgICAgICBhbGxvY05hbWVkKG1fbmFtZWREZWZkUmVncywgdHJ1
ZSk7CisgICAgICAgICAgICBmcmVlRGVhZFRtcHNJZk5lZWRlZCgpOworCisgICAgICAgICAgICBz
cGlsbElmTmVlZGVkKG1fZWFybHlDbG9iYmVyKTsKKyAgICAgICAgICAgIHNwaWxsSWZOZWVkZWQo
bV9sYXRlQ2xvYmJlcik7CisKKyAgICAgICAgICAgIGFsbG9jTmFtZWQobV9uYW1lZFVzZWRSZWdz
LCBBcmc6OlJvbGU6OlVzZSk7IC8vIE11c3QgY29tZSBiZWZvcmUgdGhlIGRlZmQgcmVnaXN0ZXJz
IHNpbmNlIHdlIG1heSB1c2UgYW5kIGRlZiB0aGUgc2FtZSByZWdpc3Rlci4KKyAgICAgICAgICAg
IGFsbG9jTmFtZWQobV9uYW1lZERlZmRSZWdzLCBBcmc6OlJvbGU6OkRlZik7CiAKICAgICAgICAg
ICAgIGlmIChuZWVkc1RvR2VuZXJhdGUpIHsKICAgICAgICAgICAgICAgICBhdXRvIHRyeUFsbG9j
YXRlID0gWyZdIHsKLSAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFRtcCosIDg+IHVzZXNUb0Fs
bG9jOwotICAgICAgICAgICAgICAgICAgICBWZWN0b3I8VG1wKiwgOD4gZGVmc1RvQWxsb2M7Cisg
ICAgICAgICAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8VG1wKiwgQXJnOjpSb2xlPiwgOD4g
dXNlc1RvQWxsb2M7CisgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8VG1wKiwg
QXJnOjpSb2xlPiwgOD4gZGVmc1RvQWxsb2M7CiAKICAgICAgICAgICAgICAgICAgICAgaW5zdC5m
b3JFYWNoVG1wKFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQpAQCAtNjU4LDE1ICs3MTks
MTggQEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpnZW5lcgogCiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBXZSB0cmVhdCBVc2UrRGVmIGFzIGEgdXNlLgogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdXNlc1RvQWxsb2MuYXBwZW5kKCZ0bXApOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVzZXNUb0FsbG9jLmFwcGVuZChzdGQ6Om1ha2VfcGFpcigmdG1wLCByb2xlKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZnNUb0FsbG9jLmFwcGVuZCgmdG1wKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZzVG9BbGxvYy5hcHBlbmQoc3RkOjptYWtlX3Bh
aXIoJnRtcCwgcm9sZSkpOwogICAgICAgICAgICAgICAgICAgICB9KTsKIAotICAgICAgICAgICAg
ICAgICAgICBhdXRvIHRyeUFsbG9jYXRlVG1wcyA9IFsmXSAoYXV0byYgdmVjdG9yLCBib29sIGlz
RGVmKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gdHJ5QWxsb2NhdGVUbXBzID0gWyZdIChh
dXRvJiB2ZWN0b3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFRtcCogdG1wIDogdmVjdG9yKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgJj0gYXNzaWduVG1wKCp0bXAsIHRtcC0+
YmFuaygpLCBpc0RlZik7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHN0ZDo6cGFpcjxU
bXAqLCBBcmc6OlJvbGU+IHBhaXIgOiB2ZWN0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUbXAmIHRtcCA9ICpzdGQ6OmdldDwwPihwYWlyKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBcmc6OlJvbGUgcm9sZSA9IHN0ZDo6Z2V0PDE+KHBhaXIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN1Y2Nlc3MgJj0gYXNzaWduVG1wKHRtcCwgdG1wLmJhbmsoKSwgcm9s
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gc3VjY2VzczsKICAgICAgICAgICAgICAgICAgICAgfTsKIApAQCAtNjc2LDggKzc0MCw4
IEBAIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6Z2VuZXIKICAgICAgICAgICAg
ICAgICAgICAgLy8gc29tZSB0bXBzIG1heSBib3RoIGJlIHVzZWQgYW5kIGRlZmQuIFNvIHdlIGhh
bmRsZSB1c2VzIGZpcnN0IHNpbmNlIGZvckVhY2hUbXAgY291bGQKICAgICAgICAgICAgICAgICAg
ICAgLy8gd2FsayB1c2VzL2RlZnMgaW4gYW55IG9yZGVyLgogICAgICAgICAgICAgICAgICAgICBi
b29sIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzICY9IHRyeUFs
bG9jYXRlVG1wcyh1c2VzVG9BbGxvYywgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICBzdWNj
ZXNzICY9IHRyeUFsbG9jYXRlVG1wcyhkZWZzVG9BbGxvYywgdHJ1ZSk7CisgICAgICAgICAgICAg
ICAgICAgIHN1Y2Nlc3MgJj0gdHJ5QWxsb2NhdGVUbXBzKHVzZXNUb0FsbG9jKTsKKyAgICAgICAg
ICAgICAgICAgICAgc3VjY2VzcyAmPSB0cnlBbGxvY2F0ZVRtcHMoZGVmc1RvQWxsb2MpOwogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzczsKICAgICAgICAgICAgICAgICB9OwogCkBA
IC03MjksNyArNzkzLDYgQEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpnZW5l
cgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAobV9jb2RlLm5lZWRzVXNlZFJlZ2lz
dGVycygpICYmIGluc3Qua2luZC5vcGNvZGUgPT0gUGF0Y2gpIHsKLSAgICAgICAgICAgICAgICBm
cmVlRGVhZFRtcHNJZk5lZWRlZCgpOwogICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHJlZ2lz
dGVyU2V0OwogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY3VycmVudEFs
bG9jYXRpb24uc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRB
bGxvY2F0aW9uW2ldKQpAQCAtNzM4LDEzICs4MDEsMTAgQEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9j
YXRlUmVnaXN0ZXJzOjpnZW5lcgogICAgICAgICAgICAgICAgIGluc3QucmVwb3J0VXNlZFJlZ2lz
dGVycyhyZWdpc3RlclNldCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGF1dG8gY2xv
YmJlciA9IFsmXSAoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkgewotICAgICAgICAgICAgICAgIGZv
ciAoUmVnIHJlZyA6IHNldCkgewotICAgICAgICAgICAgICAgICAgICBUbXAgdG1wKHJlZyk7Ci0g
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChjdXJyZW50QWxsb2NhdGlvbltyZWddID09IHRtcCk7
Ci0gICAgICAgICAgICAgICAgICAgIG1fYXZhaWxhYmxlUmVnc1t0bXAuYmFuaygpXS5zZXQocmVn
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QWxsb2NhdGlvbi0+YXQocmVnKSA9IFRt
cCgpOwotICAgICAgICAgICAgICAgICAgICBtX21hcFt0bXBdLnJlZyA9IFJlZygpOworICAgICAg
ICAgICAgYXV0byBoYW5kbGVDbG9iYmVyID0gWyZdIHsKKyAgICAgICAgICAgICAgICBmb3IgKFJl
ZyByZWcgOiBtX2Nsb2JiZXJlZFRvQ2xlYXIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFRt
cCB0bXAgPSBtX2N1cnJlbnRBbGxvY2F0aW9uLT5hdChyZWcpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmVsZWFzZSh0bXAsIHJlZyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fTsKIApAQCAtNzU0LDE0ICs4MTQsMTEgQEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0
ZXJzOjpnZW5lcgogICAgICAgICAgICAgICAgICAgICBqdW1wID0gaW5zdC5nZW5lcmF0ZSgqbV9q
aXQsIGNvbnRleHQpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoanVtcCwgIWp1bXAu
aXNTZXQoKSk7CiAKLSAgICAgICAgICAgICAgICBhbGxvY05hbWVkKGVhcmx5TmV4dENsb2JiZXJl
ZFJlZ2lzdGVycywgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgY2xvYmJlcmVkUmVnaXN0ZXJzLm1l
cmdlKGVhcmx5TmV4dENsb2JiZXJlZFJlZ2lzdGVycyk7Ci0gICAgICAgICAgICAgICAgY2xvYmJl
cihjbG9iYmVyZWRSZWdpc3RlcnMpOworICAgICAgICAgICAgICAgIGhhbmRsZUNsb2JiZXIoKTsK
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKG5lZWRzVG9HZW5l
cmF0ZSk7CiAKLSAgICAgICAgICAgICAgICBjbG9iYmVyKGNsb2JiZXJlZFJlZ2lzdGVycyk7Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUKGVhcmx5TmV4dENsb2JiZXJlZFJlZ2lzdGVycy5pc0VtcHR5
KCkpOworICAgICAgICAgICAgICAgIGhhbmRsZUNsb2JiZXIoKTsKIAogICAgICAgICAgICAgICAg
IGlmIChibG9jay0+bnVtU3VjY2Vzc29ycygpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEJ5
IGRlZmF1bHQsIHdlIHNwaWxsIGV2ZXJ5dGhpbmcgYmV0d2VlbiBibG9jayBib3VuZGFyaWVzLiBI
b3dldmVyLCB3ZSBoYXZlIGEgc21hbGwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0FuZEdlbmVyYXRlQ29kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNB
bmRTdGFja0FuZEdlbmVyYXRlQ29kZS5oCShyZXZpc2lvbiAyOTM5MzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tBbmRHZW5lcmF0
ZUNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTksOSArNTksMTAgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHJlbGVhc2UoVG1wLCBSZWcpOwogICAgIHZvaWQgZmx1c2goVG1wLCBSZWcpOwogICAgIHZv
aWQgc3BpbGwoVG1wLCBSZWcpOwotICAgIHZvaWQgYWxsb2MoVG1wLCBSZWcsIGJvb2wgaXNEZWYp
OworICAgIHZvaWQgYWxsb2MoVG1wLCBSZWcsIEFyZzo6Um9sZSk7CiAgICAgdm9pZCBmcmVlRGVh
ZFRtcHNJZk5lZWRlZCgpOwotICAgIGJvb2wgYXNzaWduVG1wKFRtcCYsIEJhbmssIGJvb2wgaXNE
ZWYpOworICAgIHZvaWQgcHJ1bmVUbXBzQXRIZWFkQnlMaXZlbmVzcygpOworICAgIGJvb2wgYXNz
aWduVG1wKFRtcCYsIEJhbmssIEFyZzo6Um9sZSk7CiAgICAgdm9pZCBidWlsZExpdmVSYW5nZXMo
VW5pZmllZFRtcExpdmVuZXNzJik7CiAgICAgYm9vbCBpc0Rpc2FsbG93ZWRSZWdpc3RlcihSZWcp
OwogCkBAIC04MCwxMCArODEsMTMgQEAgcHJpdmF0ZToKICAgICBSZWdpc3RlclNldCBtX2F2YWls
YWJsZVJlZ3NbbnVtQmFua3NdOwogICAgIHNpemVfdCBtX2dsb2JhbEluc3RJbmRleDsKICAgICBJ
bmRleE1hcDxSZWcsIFRtcD4qIG1fY3VycmVudEFsbG9jYXRpb24geyBudWxscHRyIH07Ci0gICAg
Ym9vbCBtX2RpZEFscmVhZHlGcmVlRGVhZFNsb3RzOwogICAgIFRtcE1hcDxzaXplX3Q+IG1fbGl2
ZVJhbmdlRW5kOworICAgIEhhc2hNYXA8c2l6ZV90LCBWZWN0b3I8VG1wLCAyPj4gbV90bXBzVG9S
ZWxlYXNlOwogICAgIFJlZ2lzdGVyU2V0IG1fbmFtZWRVc2VkUmVnczsKICAgICBSZWdpc3RlclNl
dCBtX25hbWVkRGVmZFJlZ3M7CisgICAgUmVnaXN0ZXJTZXQgbV9lYXJseUNsb2JiZXI7CisgICAg
UmVnaXN0ZXJTZXQgbV9sYXRlQ2xvYmJlcjsKKyAgICBSZWdpc3RlclNldCBtX2Nsb2JiZXJlZFRv
Q2xlYXI7CiAgICAgUmVnaXN0ZXJTZXQgbV9hbGxvd2VkUmVnaXN0ZXJzOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxVbmlmaWVkVG1wTGl2ZW5lc3M+IG1fbGl2ZW5lc3M7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAkocmV2aXNpb24gMjkzOTM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjM5Miw2ICsyMzkyLDEyNCBAQCB2b2lkIHRlc3RaRGVmT2ZTcGlsbFNsb3RXaXRoT2Zmc2V0TmVl
ZGluCiAgICAgQ0hFQ0socmVzdWx0ID09IHN0YXRpY19jYXN0PGludDMyX3Q+KG51bWJlck9mU2xv
dHMpKTsKIH0KIAordm9pZCB0ZXN0RWFybHlBbmRMYXRlVXNlT2ZTYW1lVG1wKCkKK3sKKyAgICBX
ZWFrUmFuZG9tIHdlYWtSYW5kb207CisgICAgc2l6ZV90IG51bVRtcHMgPSBSZWdpc3RlclNldDo6
YWxsR1BScygpLm51bWJlck9mU2V0UmVnaXN0ZXJzKCk7CisgICAgaW50NjRfdCBleHBlY3RlZFJl
c3VsdCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1UbXBzOyArK2kpCisgICAg
ICAgIGV4cGVjdGVkUmVzdWx0ICs9IGk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwg
NjA7ICsraikgeworICAgICAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgICAgIENvZGUmIGNv
ZGUgPSBwcm9jLmNvZGUoKTsKKworICAgICAgICBCMzo6QWlyOjpTcGVjaWFsKiBwYXRjaHBvaW50
U3BlY2lhbCA9IGNvZGUuYWRkU3BlY2lhbChtYWtlVW5pcXVlPEIzOjpQYXRjaHBvaW50U3BlY2lh
bD4oKSk7CisKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAg
ICAgICAgVmVjdG9yPFRtcD4gdG1wczsKKyAgICAgICAgVG1wIHJlc3VsdCA9IGNvZGUubmV3VG1w
KEIzOjpHUCk7CisgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgw
KSwgcmVzdWx0KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1UbXBzOyArK2kp
IHsKKyAgICAgICAgICAgIFRtcCB0bXAgPSBjb2RlLm5ld1RtcChCMzo6R1ApOworICAgICAgICAg
ICAgdG1wcy5hcHBlbmQodG1wKTsKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxs
cHRyLCBBcmc6OmltbShpKSwgdG1wKTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIHJhbmQgPSB3ZWFrUmFuZG9tLmdldFVpbnQzMih0bXBzLnNpemUoKSk7Cisg
ICAgICAgICAgICBCMzo6VmFsdWUqIGR1bW15VmFsdWUgPSBwcm9jLmFkZENvbnN0YW50KEIzOjpP
cmlnaW4oKSwgQjM6OkludDY0LCAwKTsKKworICAgICAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1
ZSogcGF0Y2hwb2ludCA9IHByb2MuYWRkPEIzOjpQYXRjaHBvaW50VmFsdWU+KEIzOjpWb2lkLCBC
Mzo6T3JpZ2luKCkpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGR1bW15VmFsdWUs
IEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFw
cGVuZChkdW1teVZhbHVlLCBCMzo6VmFsdWVSZXA6OlNvbWVMYXRlUmVnaXN0ZXIpOworICAgICAg
ICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0
ZXJzRm9ySlNDYWxsKCkpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFSZWdpc3RlclNldDo6
dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKS5nZXQocGFyYW1zWzFdLmdwcigpKSk7CisKKyAg
ICAgICAgICAgICAgICBhdXRvIGdvb2QgPSBqaXQuYnJhbmNoNjQoQ0NhbGxIZWxwZXJzOjpFcXVh
bCwgcGFyYW1zWzFdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihyYW5kKSk7Cisg
ICAgICAgICAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICAgICAgICAgICAgICBnb29kLmxp
bmsoJmppdCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGdvb2QyID0gaml0LmJyYW5jaDY0KEND
YWxsSGVscGVyczo6RXF1YWwsIHBhcmFtc1swXS5ncHIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIocmFuZCkpOworICAgICAgICAgICAgICAgIGppdC5icmVha3BvaW50KCk7CisgICAgICAg
ICAgICAgICAgZ29vZDIubGluaygmaml0KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAg
ICBJbnN0IGluc3QoUGF0Y2gsIHBhdGNocG9pbnQsIEFyZzo6c3BlY2lhbChwYXRjaHBvaW50U3Bl
Y2lhbCkpOworCisgICAgICAgICAgICBUbXAgdG1wID0gdG1wc1tyYW5kXTsKKyAgICAgICAgICAg
IGluc3QuYXJncy5hcHBlbmQodG1wKTsKKyAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQodG1w
KTsKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZChpbnN0KTsKKyAgICAgICAgfQorCisgICAgICAg
IGZvciAoVG1wIHRtcCA6IHRtcHMpCisgICAgICAgICAgICByb290LT5hcHBlbmQoQWRkNjQsIG51
bGxwdHIsIHRtcCwgcmVzdWx0KTsKKyAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIs
IHJlc3VsdCwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgICAgIHJvb3QtPmFw
cGVuZChSZXQ2NCwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAg
ICAgICAgaW50NjRfdCBhY3R1YWxSZXN1bHQgPSBjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2Mp
OworICAgICAgICBDSEVDSyhhY3R1YWxSZXN1bHQgPT0gZXhwZWN0ZWRSZXN1bHQpOworICAgIH0K
K30KKwordm9pZCB0ZXN0RWFybHlDbG9iYmVySW50ZXJmZXJlbmNlKCkKK3sKKyAgICBXZWFrUmFu
ZG9tIHdlYWtSYW5kb207CisgICAgc2l6ZV90IG51bVRtcHMgPSBSZWdpc3RlclNldDo6YWxsR1BS
cygpLm51bWJlck9mU2V0UmVnaXN0ZXJzKCk7CisgICAgaW50NjRfdCBleHBlY3RlZFJlc3VsdCA9
IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1UbXBzOyArK2kpCisgICAgICAgIGV4
cGVjdGVkUmVzdWx0ICs9IGk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgMTAwOyAr
K2opIHsKKyAgICAgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgICAgICBDb2RlJiBjb2RlID0g
cHJvYy5jb2RlKCk7CisKKyAgICAgICAgQjM6OkFpcjo6U3BlY2lhbCogcGF0Y2hwb2ludFNwZWNp
YWwgPSBjb2RlLmFkZFNwZWNpYWwobWFrZVVuaXF1ZTxCMzo6UGF0Y2hwb2ludFNwZWNpYWw+KCkp
OworCisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgICAg
IFZlY3RvcjxUbXA+IHRtcHM7CisgICAgICAgIFRtcCByZXN1bHQgPSBjb2RlLm5ld1RtcChCMzo6
R1ApOworICAgICAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIHJl
c3VsdCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtVG1wczsgKytpKSB7Cisg
ICAgICAgICAgICBUbXAgdG1wID0gY29kZS5uZXdUbXAoQjM6OkdQKTsKKyAgICAgICAgICAgIHRt
cHMuYXBwZW5kKHRtcCk7CisgICAgICAgICAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwg
QXJnOjppbW0oaSksIHRtcCk7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICB1
bnNpZ25lZCByYW5kID0gd2Vha1JhbmRvbS5nZXRVaW50MzIodG1wcy5zaXplKCkpOworICAgICAg
ICAgICAgQjM6OlZhbHVlKiBkdW1teVZhbHVlID0gcHJvYy5hZGRDb25zdGFudChCMzo6T3JpZ2lu
KCksIEIzOjpJbnQ2NCwgMCk7CisKKyAgICAgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBh
dGNocG9pbnQgPSBwcm9jLmFkZDxCMzo6UGF0Y2hwb2ludFZhbHVlPihCMzo6Vm9pZCwgQjM6Ok9y
aWdpbigpKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChkdW1teVZhbHVlLCBCMzo6
VmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVy
RWFybHkoUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCkpOworICAgICAg
ICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0Nh
bGwoKS5nZXQocGFyYW1zWzBdLmdwcigpKSk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGdvb2Qg
PSBqaXQuYnJhbmNoNjQoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgcGFyYW1zWzBdLmdwcigpLCBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihyYW5kKSk7CisgICAgICAgICAgICAgICAgaml0LmJyZWFr
cG9pbnQoKTsKKyAgICAgICAgICAgICAgICBnb29kLmxpbmsoJmppdCk7CisgICAgICAgICAgICB9
KTsKKworICAgICAgICAgICAgSW5zdCBpbnN0KFBhdGNoLCBwYXRjaHBvaW50LCBBcmc6OnNwZWNp
YWwocGF0Y2hwb2ludFNwZWNpYWwpKTsKKworICAgICAgICAgICAgVG1wIHRtcCA9IHRtcHNbcmFu
ZF07CisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcCk7CisgICAgICAgICAgICByb290
LT5hcHBlbmQoaW5zdCk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKFRtcCB0bXAgOiB0bXBz
KQorICAgICAgICAgICAgcm9vdC0+YXBwZW5kKEFkZDY0LCBudWxscHRyLCB0bXAsIHJlc3VsdCk7
CisgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCByZXN1bHQsIFRtcChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUikpOworICAgICAgICByb290LT5hcHBlbmQoUmV0NjQsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgICAgIGludDY0X3QgYWN0dWFs
UmVzdWx0ID0gY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jKTsKKyAgICAgICAgQ0hFQ0soYWN0
dWFsUmVzdWx0ID09IGV4cGVjdGVkUmVzdWx0KTsKKyAgICB9Cit9CisKICNkZWZpbmUgUFJFRklY
ICJPIiwgT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSwgIjogIgogCiAjZGVmaW5lIFJVTih0
ZXN0KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMjQ4OSw2ICsy
NjA3LDkgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogCiAgICAgUlVOKHRlc3RaRGVm
T2ZTcGlsbFNsb3RXaXRoT2Zmc2V0TmVlZGluZ1RvQmVNYXRlcmlhbGl6ZWRJbkFSZWdpc3Rlcigp
KTsKIAorICAgIFJVTih0ZXN0RWFybHlBbmRMYXRlVXNlT2ZTYW1lVG1wKCkpOworICAgIFJVTih0
ZXN0RWFybHlDbG9iYmVySW50ZXJmZXJlbmNlKCkpOworCiAgICAgaWYgKHRhc2tzLmlzRW1wdHko
KSkKICAgICAgICAgdXNhZ2UoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZWdpc3RlclNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVn
aXN0ZXJTZXQuaAkocmV2aXNpb24gMjkzOTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZWdpc3RlclNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgc3RhdGljIFJlZ2lzdGVyU2V0IHdlYkFzc2Vt
Ymx5Q2FsbGVlU2F2ZVJlZ2lzdGVycygpOyAvLyBSZWdpc3RlcnMgc2F2ZWQgYW5kIHVzZWQgYnkg
dGhlIFdlYkFzc2VtYmx5IEpJVC4KICNlbmRpZgotICAgIHN0YXRpYyBSZWdpc3RlclNldCB2b2xh
dGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBS
ZWdpc3RlclNldCB2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpOwogICAgIHN0YXRpYyBSZWdp
c3RlclNldCBzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsgLy8gVGhlIHVuaW9uIG9mIGNhbGxl
ZSBzYXZlcyBhbmQgc3BlY2lhbCByZWdpc3RlcnMuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIFJlZ2lzdGVyU2V0IG1hY3JvU2NyYXRjaFJlZ2lzdGVycygpOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBSZWdpc3RlclNldCBhbGxHUFJzKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459025</attachid>
            <date>2022-05-08 22:45:56 -0700</date>
            <delta_ts>2022-05-08 22:47:22 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>25205</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjkzOTY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBA
CisyMDIyLTA1LTA4ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEJldHRlciBoYW5kbGUgY2xvYmJlcmVkIHJlZ2lzdGVycyBpbiBPMCByZWdpc3RlciBhbGxvY2F0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDAy
MDUKKyAgICAgICAgPHJkYXI6Ly84NzIyMDY4OD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIEFpcidzIE8wIHJlZ2lzdGVy
IGFsbG9jYXRvciBiZXR0ZXIgaGFuZGxlIGNsb2JiZXJlZAorICAgICAgICByZWdpc3RlcnMuIFdl
IG5vdyBtb2RlbCBib3RoIGVhcmx5IGFuZCBsYXRlIGNsb2JiZXIgZGlyZWN0bHksIGFuZCB1c2UK
KyAgICAgICAgdGhpcyB0byBwZXJmb3JtIGEgYmFzaWMgaW50ZXJmZXJlbmNlIGFuYWx5c2lzIHdo
ZW4gYWxsb2NhdGluZyBhIHJlZ2lzdGVyCisgICAgICAgIHRvIGEgVG1wLiBBbiBlYXJseSBjbG9i
YmVyIGludGVyZmVyZXMgd2l0aCBhbnkgVXNlIGluIGFuIGluc3RydWN0aW9uLCBhbmQKKyAgICAg
ICAgYW55IGxhdGUgRGVmcy4gQSBsYXRlIGNsb2JiZXIgaW50ZXJmZXJlcyB3aXRoIGFueSBEZWZz
IGluIGFuIGluc3RydWN0aW9uLAorICAgICAgICBhbmQgYW55IGxhdGUgVXNlcy4gV2hhdCB0aGlz
IGVuYWJsZXMgaXMgYW4gZWFybHkgVXNlIGNhbiBiZSBhbGxvY2F0ZWQKKyAgICAgICAgdG8gYSBy
ZWdpc3RlciB0aGF0IGlzIG9ubHkgbGF0ZSBjbG9iYmVyZWQuIEFuZCBhIHJlc3VsdCBjYW4gYmUg
YWxsb2NhdGVkIAorICAgICAgICB0byBhIHJlZ2lzdGVyIHRoYXQgaXMgb25seSBlYXJseSBjbG9i
YmVyZWQuCisgICAgICAgIAorICAgICAgICBQcmlvciB0byB0aGlzLCB0aGUgYWxnb3JpdGhtIGhh
ZCBhIGJ1ZyB3aGVyZSBhIFVzZSBtYXkgYmUgYWxsb2NhdGVkIHRvCisgICAgICAgIGEgcmVnaXN0
ZXIgdGhhdCBpcyBlYXJseSBjbG9iYmVyZWQuCisKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2Nh
dGVSZWdpc3RlcnNBbmRTdGFja0FuZEdlbmVyYXRlQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmJ1aWxkTGl2ZVJhbmdlcyk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmFsbG9j
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6R2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6
ZnJlZURlYWRUbXBzSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpHZW5lcmF0ZUFu
ZEFsbG9jYXRlUmVnaXN0ZXJzOjphc3NpZ25UbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpH
ZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpwcmVwYXJlRm9yR2VuZXJhdGlvbik6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVyYXRl
KToKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0FuZEdlbmVy
YXRlQ29kZS5oOgorICAgICAgICAqIGIzL2Fpci90ZXN0YWlyLmNwcDoKKyAgICAgICAgKiBqaXQv
UmVnaXN0ZXJTZXQuaDoKKwogMjAyMi0wNS0wNiAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xp
bmdAc29ueS5jb20+CiAKICAgICAgICAgVGVtcG9yYWwuRHVyYXRpb24jdG9TdHJpbmcgc2hvdWxk
IG5ldmVyIGlnbm9yZSBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tBbmRHZW5lcmF0ZUNv
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxs
b2NhdGVSZWdpc3RlcnNBbmRTdGFja0FuZEdlbmVyYXRlQ29kZS5jcHAJKHJldmlzaW9uIDI5Mzkz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNB
bmRTdGFja0FuZEdlbmVyYXRlQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcg
QEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpidWlsZAogewogICAgIG1fbGl2
ZVJhbmdlRW5kID0gVG1wTWFwPHNpemVfdD4obV9jb2RlLCAwKTsKIAotICAgIG1fZ2xvYmFsSW5z
dEluZGV4ID0gMDsKKyAgICBtX2dsb2JhbEluc3RJbmRleCA9IDE7CiAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fY29kZSkgewogICAgICAgICBmb3IgKFRtcCB0bXAgOiBsaXZlbmVzcy5s
aXZlQXRIZWFkKGJsb2NrKSkgewogICAgICAgICAgICAgaWYgKCF0bXAuaXNSZWcoKSkKQEAgLTE4
MCwxMSArMTgwLDEyIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmUK
IHsKICAgICBBU1NFUlQocmVnKTsKICAgICBBU1NFUlQobV9tYXBbdG1wXS5yZWcgPT0gcmVnKTsK
KyAgICBBU1NFUlQodG1wLmlzUmVnKCkgfHwgbV9saXZlUmFuZ2VFbmRbdG1wXSA+PSBtX2dsb2Jh
bEluc3RJbmRleCk7CiAgICAgZmx1c2godG1wLCByZWcpOwogICAgIHJlbGVhc2UodG1wLCByZWcp
OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6
YWxsb2MoVG1wIHRtcCwgUmVnIHJlZywgYm9vbCBpc0RlZikKK0FMV0FZU19JTkxJTkUgdm9pZCBH
ZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjphbGxvYyhUbXAgdG1wLCBSZWcgcmVnLCBBcmc6
OlJvbGUgcm9sZSkKIHsKICAgICBpZiAoVG1wIG9jY3VweWluZ1RtcCA9IG1fY3VycmVudEFsbG9j
YXRpb24tPmF0KHJlZykpCiAgICAgICAgIHNwaWxsKG9jY3VweWluZ1RtcCwgcmVnKTsKQEAgLTE5
Nyw3ICsxOTgsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlCiAg
ICAgbV9hdmFpbGFibGVSZWdzW3RtcC5iYW5rKCldLmNsZWFyKHJlZyk7CiAgICAgbV9jdXJyZW50
QWxsb2NhdGlvbi0+YXQocmVnKSA9IHRtcDsKIAotICAgIGlmICghaXNEZWYpIHsKKyAgICBpZiAo
QXJnOjppc0FueVVzZShyb2xlKSkgewogICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSBtX21hcFt0
bXBdLnNwaWxsU2xvdC0+b2Zmc2V0RnJvbUZQKCk7CiAgICAgICAgIGlmICh0bXAuYmFuaygpID09
IEdQKQogICAgICAgICAgICAgbV9qaXQtPmxvYWQ2NChjYWxsRnJhbWVBZGRyKCptX2ppdCwgb2Zm
c2V0KSwgcmVnLmdwcigpKTsKQEAgLTIwNiwxMiArMjA3LDMwIEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmUKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBH
ZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpmcmVlRGVhZFRtcHNJZk5lZWRlZCgpCi17Ci0g
ICAgaWYgKG1fZGlkQWxyZWFkeUZyZWVEZWFkU2xvdHMpCi0gICAgICAgIHJldHVybjsKKy8vIGZy
ZWVEZWFkVG1wc0F0SW5zdEluZGV4IGFuZCBwcnVuZVRtcHNBdEhlYWRCeUxpdmVuZXNzIGFyZSBu
ZWVkZWQgZm9yIGNvcnJlY3RuZXNzIGJlY2F1c2UgCisvLyB3ZSByZXVzZSBzdGFjayBzbG90cyBi
ZXR3ZWVuIFRtcHMgdGhhdCBkb24ndCBpbnRlcmZlcmUuIFNvIHdlIG5lZWQgdG8gbWFrZSBzdXJl
IHdlIGRvbid0CisvLyBzcGlsbCBhIGRlYWQgVG1wIHRvIGEgbGl2ZSBUbXAncyBzbG90LgorLy8g
ZnJlZURlYWRUbXBzQXRJbnN0SW5kZXggaXMgbWVhbnQgdG8gYmUgY2FsbGVkIGFzIHdlIHdhbGsg
dGhyb3VnaCBlYWNoIEluc24gaW4gYSBiYXNpYyBibG9jaywKKy8vIGJlY2F1c2UgaXQgZG9lc24n
dCBjb25zdWx0IHRoZSBlbnRpcmUgcmVnaXN0ZXIgZmlsZSwgYW5kIGlzIGZhc3RlciB0aGFuIHBy
dW5lVG1wc0F0SGVhZEJ5TGl2ZW5lc3MuCisvLyBCdXQgaXQgb25seSBwcnVuZXMgdGhpbmdzIHRo
YXQgZGllIGF0IGEgcGFydGljdWxhciBpbnN0IGluZGV4IHdpdGhpbiBhIGJsb2NrLCBhbmQgZG9l
c24ndCBwcmV2ZW50CisvLyB1cyBmcm9tIHByb3BhZ2F0aW5nIGEgVG1wIHRoYXQgaXMgbGl2ZSBp
biBvbmUgYmxvY2sgdG8gdGhlIGhlYWQgb2YgYSBibG9jayB3aGVyZSBpdCBpcyBkZWFkLiBJZgor
Ly8gc29tZXRoaW5nIGRpZXMgd2l0aGluIGEgYmxvY2ssIGZyZWVEZWFkVG1wc0F0SW5zdEluZGV4
IHdpbGwgY2F0Y2ggaXQuCisvLyBwcnVuZVRtcHNBdEhlYWRCeUxpdmVuZXNzIGlzIG1lYW50IHRv
IGVuc3VyZSB3ZSBwcnVuZSBhd2F5IGFueSBjYXNlcyB3aGVyZSB3ZSBoYXZlIHN0YXRlCisvLyBm
b3IgVG1wcyB0aGF0IGFyZSBkZWFkIGF0IHRoZSBoZWFkIG9mIGEgYmFzaWMgYmxvY2suCitBTFdB
WVNfSU5MSU5FIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6ZnJlZURlYWRUbXBz
QXRJbnN0SW5kZXgoKQoreworICAgIGF1dG8gaXRlciA9IG1fdG1wc1RvUmVsZWFzZS5maW5kKG1f
Z2xvYmFsSW5zdEluZGV4KTsKKyAgICBpZiAoaXRlciAhPSBtX3RtcHNUb1JlbGVhc2UuZW5kKCkp
IHsKKyAgICAgICAgZm9yIChUbXAgdG1wIDogaXRlci0+dmFsdWUpIHsKKyAgICAgICAgICAgIEFT
U0VSVChtX2xpdmVSYW5nZUVuZFt0bXBdIDwgbV9nbG9iYWxJbnN0SW5kZXgpOworICAgICAgICAg
ICAgaWYgKFJlZyByZWcgPSBtX21hcFt0bXBdLnJlZykKKyAgICAgICAgICAgICAgICByZWxlYXNl
KHRtcCwgcmVnKTsKKyAgICAgICAgfQorICAgIH0KK30KIAotICAgIG1fZGlkQWxyZWFkeUZyZWVE
ZWFkU2xvdHMgPSB0cnVlOworQUxXQVlTX0lOTElORSB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVS
ZWdpc3RlcnM6OnBydW5lVG1wc0F0SGVhZEJ5TGl2ZW5lc3MoKQorewogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9jdXJyZW50QWxsb2NhdGlvbi0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAg
VG1wIHRtcCA9IG1fY3VycmVudEFsbG9jYXRpb24tPmF0KGkpOwogICAgICAgICBpZiAoIXRtcCkK
QEAgLTIyNSw0NCArMjQ0LDczIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBHZW5lcmF0ZUFuZEFsbG9j
YXRlUmUKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBHZW5lcmF0ZUFuZEFsbG9jYXRl
UmVnaXN0ZXJzOjphc3NpZ25UbXAoVG1wJiB0bXAsIEJhbmsgYmFuaywgYm9vbCBpc0RlZikKK0FM
V0FZU19JTkxJTkUgYm9vbCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjphc3NpZ25UbXAo
VG1wJiB0bXAsIEJhbmsgYmFuaywgQXJnOjpSb2xlIHJvbGUpCiB7CiAgICAgQVNTRVJUKCF0bXAu
aXNSZWcoKSk7Ci0gICAgaWYgKFJlZyByZWcgPSBtX21hcFt0bXBdLnJlZykgewotICAgICAgICBB
U1NFUlQoIW1fbmFtZWREZWZkUmVncy5jb250YWlucyhyZWcpKTsKLSAgICAgICAgdG1wID0gVG1w
KHJlZyk7CisKKyAgICBhdXRvIG1hcmtSZWdpc3RlckFzVXNlZCA9IFsmXSAoUmVnIHJlZykgewor
ICAgICAgICBpZiAoQXJnOjppc0FueURlZihyb2xlKSkKKyAgICAgICAgICAgIG1fY2xvYmJlcmVk
VG9DbGVhci5jbGVhcihyZWcpOworICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCBpdCBkb2Vzbid0
IG1hdHRlciBpZiB3ZSBhZGQgaXQgdG8gdGhlIG1fbmFtZWRVc2VkUmVncyBvciBtX25hbWVkRGVm
ZFJlZ3MuIAorICAgICAgICAvLyBXZSBqdXN0IG5lZWQgdG8gbWFyayB0aGF0IHdlIGNhbid0IHVz
ZSBpdCBhZ2FpbiBmb3IgYW5vdGhlciB0bXAuCiAgICAgICAgIG1fbmFtZWRVc2VkUmVncy5zZXQo
cmVnKTsKLSAgICAgICAgQVNTRVJUKCFtX2F2YWlsYWJsZVJlZ3NbYmFua10uZ2V0KHJlZykpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgfTsKKworICAgIGJvb2wgbWlnaHRJbnRl
cmZlcmUgPSBtX2Vhcmx5Q2xvYmJlci5udW1iZXJPZlNldFJlZ2lzdGVycygpIHx8IG1fbGF0ZUNs
b2JiZXIubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKTsKKworICAgIGF1dG8gaW50ZXJmZXJlc1dpdGhD
bG9iYmVyID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGlmICghbWlnaHRJbnRlcmZlcmUpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUp
ICYmIG1fZWFybHlDbG9iYmVyLmdldChyZWcpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpICYmIG1fbGF0ZUNsb2JiZXIuZ2V0KHJlZykp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKEFyZzo6YWN0aXZlQXQocm9s
ZSwgQXJnOjpQaGFzZTo6RWFybHkpICYmIG1fZWFybHlDbG9iYmVyLmdldChyZWcpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChBcmc6OmFjdGl2ZUF0KHJvbGUsIEFyZzo6
UGhhc2U6OkxhdGUpICYmIG1fbGF0ZUNsb2JiZXIuZ2V0KHJlZykpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKKyAgICBpZiAoUmVnIHJl
ZyA9IG1fbWFwW3RtcF0ucmVnKSB7CisgICAgICAgIGlmICghaW50ZXJmZXJlc1dpdGhDbG9iYmVy
KHJlZykpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9uYW1lZERlZmRSZWdzLmNvbnRhaW5zKHJl
ZykpOworICAgICAgICAgICAgdG1wID0gVG1wKHJlZyk7CisgICAgICAgICAgICBtYXJrUmVnaXN0
ZXJBc1VzZWQocmVnKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9hdmFpbGFibGVSZWdzW2Jhbmtd
LmdldChyZWcpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IC8vIFRoaXMgaXMgYSByYXJlIGNhc2Ugd2hlbiB3ZSd2ZSBhbHJlYWR5IGFsbG9jYXRlZCBhIFRt
cCBpbiBzb21lIHdheSwgYnV0IGFub3RoZXIgCisgICAgICAgIC8vIFJvbGUgb2YgdGhlIFRtcCBp
bXBvc2VzIHNvbWUgcmVzdHJpY3Rpb24gb24gdGhlIHJlZ2lzdGVyIHZhbHVlLiBFLmcsIGlmCisg
ICAgICAgIC8vIHdlIGhhdmUgYSBwcm9ncmFtIGxpa2U6CisgICAgICAgIC8vIFBhdGNoIFVzZTp0
bXAxLCBMYXRlVXNlOnRtcDEsIGxhdGVDbG9iYmVyOngwCisgICAgICAgIC8vIFRoZSBmaXJzdCB1
c2Ugb2YgdG1wMSBjYW4gYmUgYWxsb2NhdGVkIHRvIHgwLCBidXQgdGhlIHNlY29uZCBjYW5ub3Qu
CisgICAgICAgIHNwaWxsKHRtcCwgcmVnKTsKIAotICAgIGlmICghbV9hdmFpbGFibGVSZWdzW2Jh
bmtdLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkpCi0gICAgICAgIGZyZWVEZWFkVG1wc0lmTmVlZGVk
KCk7CisgICAgfQogCiAgICAgaWYgKG1fYXZhaWxhYmxlUmVnc1tiYW5rXS5udW1iZXJPZlNldFJl
Z2lzdGVycygpKSB7CiAgICAgICAgIC8vIFdlIGZpcnN0IHRha2UgYW4gYXZhaWxhYmxlIHJlZ2lz
dGVyLgogICAgICAgICBmb3IgKFJlZyByZWcgOiBtX3JlZ2lzdGVyc1tiYW5rXSkgewotICAgICAg
ICAgICAgaWYgKG1fbmFtZWRVc2VkUmVncy5jb250YWlucyhyZWcpIHx8IG1fbmFtZWREZWZkUmVn
cy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgaWYgKGludGVyZmVyZXNXaXRoQ2xvYmJlcihy
ZWcpIHx8IG1fbmFtZWRVc2VkUmVncy5jb250YWlucyhyZWcpIHx8IG1fbmFtZWREZWZkUmVncy5j
b250YWlucyhyZWcpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYg
KCFtX2F2YWlsYWJsZVJlZ3NbYmFua10uY29udGFpbnMocmVnKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIG1fbmFtZWRVc2VkUmVncy5zZXQocmVnKTsgLy8gQXQgdGhp
cyBwb2ludCwgaXQgZG9lc24ndCBtYXR0ZXIgaWYgd2UgYWRkIGl0IHRvIHRoZSBtX25hbWVkVXNl
ZFJlZ3Mgb3IgbV9uYW1lZERlZmRSZWdzLiBXZSBqdXN0IG5lZWQgdG8gbWFyayB0aGF0IHdlIGNh
bid0IHVzZSBpdCBhZ2Fpbi4KLSAgICAgICAgICAgIGFsbG9jKHRtcCwgcmVnLCBpc0RlZik7CisK
KyAgICAgICAgICAgIG1hcmtSZWdpc3RlckFzVXNlZChyZWcpOworICAgICAgICAgICAgYWxsb2Mo
dG1wLCByZWcsIHJvbGUpOwogICAgICAgICAgICAgdG1wID0gVG1wKHJlZyk7CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgfQogCiAgICAgLy8gTm90aGluZyB3YXMgYXZhaWxhYmxlLCBsZXQncyBt
YWtlIHNvbWUgcm9vbS4KICAgICBmb3IgKFJlZyByZWcgOiBtX3JlZ2lzdGVyc1tiYW5rXSkgewot
ICAgICAgICBpZiAobV9uYW1lZFVzZWRSZWdzLmNvbnRhaW5zKHJlZykgfHwgbV9uYW1lZERlZmRS
ZWdzLmNvbnRhaW5zKHJlZykpCisgICAgICAgIGlmIChpbnRlcmZlcmVzV2l0aENsb2JiZXIocmVn
KSB8fCBtX25hbWVkVXNlZFJlZ3MuY29udGFpbnMocmVnKSB8fCBtX25hbWVkRGVmZFJlZ3MuY29u
dGFpbnMocmVnKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIG1fbmFtZWRVc2Vk
UmVncy5zZXQocmVnKTsKLQotICAgICAgICBhbGxvYyh0bXAsIHJlZywgaXNEZWYpOworICAgICAg
ICBtYXJrUmVnaXN0ZXJBc1VzZWQocmVnKTsKKyAgICAgICAgYWxsb2ModG1wLCByZWcsIHJvbGUp
OwogICAgICAgICB0bXAgPSBUbXAocmVnKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpA
QCAtMjk4LDcgKzM0Niw3IEBAIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6cHJl
cGEKIAogICAgICAgICBWZWN0b3I8U3RhY2tTbG90KiwgMTY+IGZyZWVTbG90czsKICAgICAgICAg
VmVjdG9yPFN0YWNrU2xvdCosIDQ+IHRvRnJlZTsKLSAgICAgICAgbV9nbG9iYWxJbnN0SW5kZXgg
PSAwOworICAgICAgICBtX2dsb2JhbEluc3RJbmRleCA9IDE7CiAgICAgICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBtX2NvZGUpIHsKICAgICAgICAgICAgIGF1dG8gYXNzaWduU3RhY2tTbG90
VG9UbXAgPSBbJl0gKFRtcCB0bXApIHsKICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkp
CkBAIC00MjQsNiArNDcyLDEyIEBAIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6
Z2VuZXIKIAogICAgIGJ1aWxkTGl2ZVJhbmdlcygqbV9saXZlbmVzcyk7CiAKKyAgICBtX2NvZGUu
Zm9yRWFjaFRtcChbJl0gKFRtcCB0bXApIHsKKyAgICAgICAgQVNTRVJUKCF0bXAuaXNSZWcoKSk7
CisgICAgICAgIGlmIChzaXplX3QgbGl2ZVJhbmdlRW5kID0gbV9saXZlUmFuZ2VFbmRbdG1wXSkK
KyAgICAgICAgICAgIG1fdG1wc1RvUmVsZWFzZS5hZGQobGl2ZVJhbmdlRW5kICsgMSwgVmVjdG9y
PFRtcCwgMj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZCh0bXApOworICAgIH0pOworCiAgICAg
SW5kZXhNYXA8QmFzaWNCbG9jayosIEluZGV4TWFwPFJlZywgVG1wPj4gY3VycmVudEFsbG9jYXRp
b25NYXAobV9jb2RlLnNpemUoKSk7CiAgICAgewogICAgICAgICBJbmRleE1hcDxSZWcsIFRtcD4g
ZGVmYXVsdEN1cnJlbnRBbGxvY2F0aW9uKFJlZzo6bWF4SW5kZXgoKSArIDEpOwpAQCAtNDYxLDcg
KzUxNSw3IEBAIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6Z2VuZXIKIAogICAg
IERpc2Fzc2VtYmxlciogZGlzYXNzZW1ibGVyID0gbV9jb2RlLmRpc2Fzc2VtYmxlcigpOwogCi0g
ICAgbV9nbG9iYWxJbnN0SW5kZXggPSAwOworICAgIG1fZ2xvYmFsSW5zdEluZGV4ID0gMTsKIAog
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKICAgICAgICAgY29udGV4dC5j
dXJyZW50QmxvY2sgPSBibG9jazsKQEAgLTUyNSw2ICs1NzksOCBAQCB2b2lkIEdlbmVyYXRlQW5k
QWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVyCiAKICAgICAgICAgKyttX2dsb2JhbEluc3RJbmRleDsK
IAorICAgICAgICBwcnVuZVRtcHNBdEhlYWRCeUxpdmVuZXNzKCk7CisKICAgICAgICAgYm9vbCBp
c1JlcGxheWluZ1NhbWVJbnN0ID0gZmFsc2U7CiAgICAgICAgIGZvciAoc2l6ZV90IGluc3RJbmRl
eCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CiAgICAgICAg
ICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CkBAIC01MzYsMTAgKzU5MiwxMSBAQCB2b2lkIEdlbmVy
YXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVyCiAKICAgICAgICAgICAgIEluc3QmIGluc3Qg
PSBibG9jay0+YXQoaW5zdEluZGV4KTsKIAotICAgICAgICAgICAgbV9kaWRBbHJlYWR5RnJlZURl
YWRTbG90cyA9IGZhbHNlOwotCiAgICAgICAgICAgICBtX25hbWVkVXNlZFJlZ3MgPSBSZWdpc3Rl
clNldCgpOwogICAgICAgICAgICAgbV9uYW1lZERlZmRSZWdzID0gUmVnaXN0ZXJTZXQoKTsKKyAg
ICAgICAgICAgIG1fZWFybHlDbG9iYmVyID0gUmVnaXN0ZXJTZXQoKTsKKyAgICAgICAgICAgIG1f
bGF0ZUNsb2JiZXIgPSBSZWdpc3RlclNldCgpOworICAgICAgICAgICAgbV9jbG9iYmVyZWRUb0Ns
ZWFyID0gUmVnaXN0ZXJTZXQoKTsKIAogICAgICAgICAgICAgYm9vbCBuZWVkc1RvR2VuZXJhdGUg
PSAoWyZdICgpIC0+IGJvb2wgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
Y29uc2lkZXIgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgd2UgY2FuIGFsc28gZWxpZGUgTW92MzJz
CkBAIC02MTQsNDMgKzY3MSw0OCBAQCB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6
OmdlbmVyCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgICAg
IFJlZ2lzdGVyU2V0IGNsb2JiZXJlZFJlZ2lzdGVyczsKLSAgICAgICAgICAgIFJlZ2lzdGVyU2V0
IGVhcmx5TmV4dENsb2JiZXJlZFJlZ2lzdGVyczsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBJbnN0KiBuZXh0SW5zdCA9IGJsb2NrLT5nZXQoaW5zdEluZGV4ICsgMSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGluc3Qua2luZC5vcGNvZGUgPT0gUGF0Y2ggfHwgKG5leHRJbnN0ICYmIG5l
eHRJbnN0LT5raW5kLm9wY29kZSA9PSBQYXRjaCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGluc3Qua2luZC5vcGNvZGUgPT0gUGF0Y2gpCi0gICAgICAgICAgICAgICAgICAgICAgICBjbG9i
YmVyZWRSZWdpc3RlcnMubWVyZ2UoaW5zdC5leHRyYUNsb2JiZXJlZFJlZ3MoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChuZXh0SW5zdCAmJiBuZXh0SW5zdC0+a2luZC5vcGNvZGUgPT0gUGF0
Y2gpCi0gICAgICAgICAgICAgICAgICAgICAgICBlYXJseU5leHRDbG9iYmVyZWRSZWdpc3RlcnMu
bWVyZ2UobmV4dEluc3QtPmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCkpOwotCi0gICAgICAgICAg
ICAgICAgICAgIGNsb2JiZXJlZFJlZ2lzdGVycy5maWx0ZXIobV9hbGxvd2VkUmVnaXN0ZXJzKTsK
LSAgICAgICAgICAgICAgICAgICAgY2xvYmJlcmVkUmVnaXN0ZXJzLmV4Y2x1ZGUobV9uYW1lZERl
ZmRSZWdzKTsKLSAgICAgICAgICAgICAgICAgICAgZWFybHlOZXh0Q2xvYmJlcmVkUmVnaXN0ZXJz
LmZpbHRlcihtX2FsbG93ZWRSZWdpc3RlcnMpOwotCi0gICAgICAgICAgICAgICAgICAgIG1fbmFt
ZWREZWZkUmVncy5tZXJnZShjbG9iYmVyZWRSZWdpc3RlcnMpOwotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChpbnN0LmtpbmQub3Bjb2RlID09IFBhdGNoKSB7CisgICAgICAgICAg
ICAgICAgbV9lYXJseUNsb2JiZXIubWVyZ2UoaW5zdC5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncygp
KTsKKyAgICAgICAgICAgICAgICBtX2xhdGVDbG9iYmVyLm1lcmdlKGluc3QuZXh0cmFDbG9iYmVy
ZWRSZWdzKCkpOworCisgICAgICAgICAgICAgICAgbV9lYXJseUNsb2JiZXIuZmlsdGVyKG1fYWxs
b3dlZFJlZ2lzdGVycyk7CisgICAgICAgICAgICAgICAgbV9sYXRlQ2xvYmJlci5maWx0ZXIobV9h
bGxvd2VkUmVnaXN0ZXJzKTsKKworICAgICAgICAgICAgICAgIG1fY2xvYmJlcmVkVG9DbGVhci5t
ZXJnZShtX2Vhcmx5Q2xvYmJlcik7CisgICAgICAgICAgICAgICAgbV9jbG9iYmVyZWRUb0NsZWFy
Lm1lcmdlKG1fbGF0ZUNsb2JiZXIpOworICAgICAgICAgICAgICAgIG1fY2xvYmJlcmVkVG9DbGVh
ci5leGNsdWRlKG1fbmFtZWREZWZkUmVncyk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGF1dG8gYWxsb2NOYW1lZCA9IFsmXSAoY29uc3QgUmVnaXN0ZXJTZXQmIG5hbWVkLCBib29sIGlz
RGVmKSB7CisgICAgICAgICAgICBhdXRvIGFsbG9jTmFtZWQgPSBbJl0gKGNvbnN0IFJlZ2lzdGVy
U2V0JiBuYW1lZCwgQXJnOjpSb2xlIHJvbGUpIHsKICAgICAgICAgICAgICAgICBmb3IgKFJlZyBy
ZWcgOiBuYW1lZCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoVG1wIG9jY3VweWluZ1RtcCA9
IGN1cnJlbnRBbGxvY2F0aW9uW3JlZ10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChv
Y2N1cHlpbmdUbXAgPT0gVG1wKHJlZykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBmcmVl
RGVhZFRtcHNJZk5lZWRlZCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIHNwaWxsIGEgZGVhZCB0bXAu
Ci0gICAgICAgICAgICAgICAgICAgIGFsbG9jKFRtcChyZWcpLCByZWcsIGlzRGVmKTsKKyAgICAg
ICAgICAgICAgICAgICAgYWxsb2MoVG1wKHJlZyksIHJlZywgcm9sZSk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgYWxsb2NOYW1lZChtX25hbWVkVXNl
ZFJlZ3MsIGZhbHNlKTsgLy8gTXVzdCBjb21lIGJlZm9yZSB0aGUgZGVmZCByZWdpc3RlcnMgc2lu
Y2Ugd2UgbWF5IHVzZSBhbmQgZGVmIHRoZSBzYW1lIHJlZ2lzdGVyLgotICAgICAgICAgICAgYWxs
b2NOYW1lZChtX25hbWVkRGVmZFJlZ3MsIHRydWUpOworICAgICAgICAgICAgYXV0byBzcGlsbElm
TmVlZGVkID0gWyZdIChjb25zdCBSZWdpc3RlclNldCYgc2V0KSB7CisgICAgICAgICAgICAgICAg
Zm9yIChSZWcgcmVnIDogc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChUbXAgdG1wID0g
bV9jdXJyZW50QWxsb2NhdGlvbi0+YXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNw
aWxsKHRtcCwgcmVnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCisgICAg
ICAgICAgICBmcmVlRGVhZFRtcHNBdEluc3RJbmRleCgpOworCisgICAgICAgICAgICBzcGlsbElm
TmVlZGVkKG1fZWFybHlDbG9iYmVyKTsKKyAgICAgICAgICAgIHNwaWxsSWZOZWVkZWQobV9sYXRl
Q2xvYmJlcik7CisKKyAgICAgICAgICAgIGFsbG9jTmFtZWQobV9uYW1lZFVzZWRSZWdzLCBBcmc6
OlJvbGU6OlVzZSk7IC8vIE11c3QgY29tZSBiZWZvcmUgdGhlIGRlZmQgcmVnaXN0ZXJzIHNpbmNl
IHdlIG1heSB1c2UgYW5kIGRlZiB0aGUgc2FtZSByZWdpc3Rlci4KKyAgICAgICAgICAgIGFsbG9j
TmFtZWQobV9uYW1lZERlZmRSZWdzLCBBcmc6OlJvbGU6OkRlZik7CiAKICAgICAgICAgICAgIGlm
IChuZWVkc1RvR2VuZXJhdGUpIHsKICAgICAgICAgICAgICAgICBhdXRvIHRyeUFsbG9jYXRlID0g
WyZdIHsKLSAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFRtcCosIDg+IHVzZXNUb0FsbG9jOwot
ICAgICAgICAgICAgICAgICAgICBWZWN0b3I8VG1wKiwgOD4gZGVmc1RvQWxsb2M7CisgICAgICAg
ICAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8VG1wKiwgQXJnOjpSb2xlPiwgOD4gdXNlc1Rv
QWxsb2M7CisgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8VG1wKiwgQXJnOjpS
b2xlPiwgOD4gZGVmc1RvQWxsb2M7CiAKICAgICAgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNo
VG1wKFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQpAQCAtNjU4LDE1ICs3MjAsMTggQEAg
dm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpnZW5lcgogCiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBXZSB0cmVhdCBVc2UrRGVmIGFzIGEgdXNlLgogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXNlc1RvQWxsb2MuYXBwZW5kKCZ0bXApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVzZXNUb0FsbG9jLmFwcGVuZChzdGQ6Om1ha2VfcGFpcigmdG1wLCByb2xlKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZnNUb0FsbG9jLmFwcGVuZCgmdG1wKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZzVG9BbGxvYy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoJnRt
cCwgcm9sZSkpOwogICAgICAgICAgICAgICAgICAgICB9KTsKIAotICAgICAgICAgICAgICAgICAg
ICBhdXRvIHRyeUFsbG9jYXRlVG1wcyA9IFsmXSAoYXV0byYgdmVjdG9yLCBib29sIGlzRGVmKSB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gdHJ5QWxsb2NhdGVUbXBzID0gWyZdIChhdXRvJiB2
ZWN0b3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFRtcCogdG1wIDogdmVjdG9yKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgJj0gYXNzaWduVG1wKCp0bXAsIHRtcC0+YmFuaygp
LCBpc0RlZik7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHN0ZDo6cGFpcjxUbXAqLCBB
cmc6OlJvbGU+IHBhaXIgOiB2ZWN0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
bXAmIHRtcCA9ICpzdGQ6OmdldDwwPihwYWlyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBcmc6OlJvbGUgcm9sZSA9IHN0ZDo6Z2V0PDE+KHBhaXIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN1Y2Nlc3MgJj0gYXNzaWduVG1wKHRtcCwgdG1wLmJhbmsoKSwgcm9sZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c3VjY2VzczsKICAgICAgICAgICAgICAgICAgICAgfTsKIApAQCAtNjc2LDggKzc0MSw4IEBAIHZv
aWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6Z2VuZXIKICAgICAgICAgICAgICAgICAg
ICAgLy8gc29tZSB0bXBzIG1heSBib3RoIGJlIHVzZWQgYW5kIGRlZmQuIFNvIHdlIGhhbmRsZSB1
c2VzIGZpcnN0IHNpbmNlIGZvckVhY2hUbXAgY291bGQKICAgICAgICAgICAgICAgICAgICAgLy8g
d2FsayB1c2VzL2RlZnMgaW4gYW55IG9yZGVyLgogICAgICAgICAgICAgICAgICAgICBib29sIHN1
Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzICY9IHRyeUFsbG9jYXRl
VG1wcyh1c2VzVG9BbGxvYywgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzICY9
IHRyeUFsbG9jYXRlVG1wcyhkZWZzVG9BbGxvYywgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAg
IHN1Y2Nlc3MgJj0gdHJ5QWxsb2NhdGVUbXBzKHVzZXNUb0FsbG9jKTsKKyAgICAgICAgICAgICAg
ICAgICAgc3VjY2VzcyAmPSB0cnlBbGxvY2F0ZVRtcHMoZGVmc1RvQWxsb2MpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc3VjY2VzczsKICAgICAgICAgICAgICAgICB9OwogCkBAIC03Mjks
NyArNzk0LDYgQEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpnZW5lcgogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAobV9jb2RlLm5lZWRzVXNlZFJlZ2lzdGVycygp
ICYmIGluc3Qua2luZC5vcGNvZGUgPT0gUGF0Y2gpIHsKLSAgICAgICAgICAgICAgICBmcmVlRGVh
ZFRtcHNJZk5lZWRlZCgpOwogICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHJlZ2lzdGVyU2V0
OwogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY3VycmVudEFsbG9jYXRp
b24uc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRBbGxvY2F0
aW9uW2ldKQpAQCAtNzM4LDEzICs4MDIsMTAgQEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVn
aXN0ZXJzOjpnZW5lcgogICAgICAgICAgICAgICAgIGluc3QucmVwb3J0VXNlZFJlZ2lzdGVycyhy
ZWdpc3RlclNldCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGF1dG8gY2xvYmJlciA9
IFsmXSAoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkgewotICAgICAgICAgICAgICAgIGZvciAoUmVn
IHJlZyA6IHNldCkgewotICAgICAgICAgICAgICAgICAgICBUbXAgdG1wKHJlZyk7Ci0gICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChjdXJyZW50QWxsb2NhdGlvbltyZWddID09IHRtcCk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fYXZhaWxhYmxlUmVnc1t0bXAuYmFuaygpXS5zZXQocmVnKTsKLSAg
ICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QWxsb2NhdGlvbi0+YXQocmVnKSA9IFRtcCgpOwot
ICAgICAgICAgICAgICAgICAgICBtX21hcFt0bXBdLnJlZyA9IFJlZygpOworICAgICAgICAgICAg
YXV0byBoYW5kbGVDbG9iYmVyID0gWyZdIHsKKyAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcg
OiBtX2Nsb2JiZXJlZFRvQ2xlYXIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFRtcCB0bXAg
PSBtX2N1cnJlbnRBbGxvY2F0aW9uLT5hdChyZWcpKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmVsZWFzZSh0bXAsIHJlZyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfTsKIApA
QCAtNzU0LDE0ICs4MTUsMTEgQEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpn
ZW5lcgogICAgICAgICAgICAgICAgICAgICBqdW1wID0gaW5zdC5nZW5lcmF0ZSgqbV9qaXQsIGNv
bnRleHQpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoanVtcCwgIWp1bXAuaXNTZXQo
KSk7CiAKLSAgICAgICAgICAgICAgICBhbGxvY05hbWVkKGVhcmx5TmV4dENsb2JiZXJlZFJlZ2lz
dGVycywgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgY2xvYmJlcmVkUmVnaXN0ZXJzLm1lcmdlKGVh
cmx5TmV4dENsb2JiZXJlZFJlZ2lzdGVycyk7Ci0gICAgICAgICAgICAgICAgY2xvYmJlcihjbG9i
YmVyZWRSZWdpc3RlcnMpOworICAgICAgICAgICAgICAgIGhhbmRsZUNsb2JiZXIoKTsKICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKG5lZWRzVG9HZW5lcmF0ZSk7
CiAKLSAgICAgICAgICAgICAgICBjbG9iYmVyKGNsb2JiZXJlZFJlZ2lzdGVycyk7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKGVhcmx5TmV4dENsb2JiZXJlZFJlZ2lzdGVycy5pc0VtcHR5KCkpOwor
ICAgICAgICAgICAgICAgIGhhbmRsZUNsb2JiZXIoKTsKIAogICAgICAgICAgICAgICAgIGlmIChi
bG9jay0+bnVtU3VjY2Vzc29ycygpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEJ5IGRlZmF1
bHQsIHdlIHNwaWxsIGV2ZXJ5dGhpbmcgYmV0d2VlbiBibG9jayBib3VuZGFyaWVzLiBIb3dldmVy
LCB3ZSBoYXZlIGEgc21hbGwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0FuZEdlbmVyYXRlQ29kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFj
a0FuZEdlbmVyYXRlQ29kZS5oCShyZXZpc2lvbiAyOTM5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tBbmRHZW5lcmF0ZUNvZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNTksOSArNTksMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJl
bGVhc2UoVG1wLCBSZWcpOwogICAgIHZvaWQgZmx1c2goVG1wLCBSZWcpOwogICAgIHZvaWQgc3Bp
bGwoVG1wLCBSZWcpOwotICAgIHZvaWQgYWxsb2MoVG1wLCBSZWcsIGJvb2wgaXNEZWYpOwotICAg
IHZvaWQgZnJlZURlYWRUbXBzSWZOZWVkZWQoKTsKLSAgICBib29sIGFzc2lnblRtcChUbXAmLCBC
YW5rLCBib29sIGlzRGVmKTsKKyAgICB2b2lkIGFsbG9jKFRtcCwgUmVnLCBBcmc6OlJvbGUpOwor
ICAgIHZvaWQgZnJlZURlYWRUbXBzQXRJbnN0SW5kZXgoKTsKKyAgICB2b2lkIHBydW5lVG1wc0F0
SGVhZEJ5TGl2ZW5lc3MoKTsKKyAgICBib29sIGFzc2lnblRtcChUbXAmLCBCYW5rLCBBcmc6OlJv
bGUpOwogICAgIHZvaWQgYnVpbGRMaXZlUmFuZ2VzKFVuaWZpZWRUbXBMaXZlbmVzcyYpOwogICAg
IGJvb2wgaXNEaXNhbGxvd2VkUmVnaXN0ZXIoUmVnKTsKIApAQCAtODAsMTAgKzgxLDEzIEBAIHBy
aXZhdGU6CiAgICAgUmVnaXN0ZXJTZXQgbV9hdmFpbGFibGVSZWdzW251bUJhbmtzXTsKICAgICBz
aXplX3QgbV9nbG9iYWxJbnN0SW5kZXg7CiAgICAgSW5kZXhNYXA8UmVnLCBUbXA+KiBtX2N1cnJl
bnRBbGxvY2F0aW9uIHsgbnVsbHB0ciB9OwotICAgIGJvb2wgbV9kaWRBbHJlYWR5RnJlZURlYWRT
bG90czsKICAgICBUbXBNYXA8c2l6ZV90PiBtX2xpdmVSYW5nZUVuZDsKKyAgICBIYXNoTWFwPHNp
emVfdCwgVmVjdG9yPFRtcCwgMj4+IG1fdG1wc1RvUmVsZWFzZTsKICAgICBSZWdpc3RlclNldCBt
X25hbWVkVXNlZFJlZ3M7CiAgICAgUmVnaXN0ZXJTZXQgbV9uYW1lZERlZmRSZWdzOworICAgIFJl
Z2lzdGVyU2V0IG1fZWFybHlDbG9iYmVyOworICAgIFJlZ2lzdGVyU2V0IG1fbGF0ZUNsb2JiZXI7
CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWRUb0NsZWFyOwogICAgIFJlZ2lzdGVyU2V0IG1f
YWxsb3dlZFJlZ2lzdGVyczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5pZmllZFRtcExpdmVuZXNz
PiBtX2xpdmVuZXNzOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3Rh
aXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFp
ci5jcHAJKHJldmlzaW9uIDI5MzkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
dGVzdGFpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOTIsNiArMjM5MiwxMjQgQEAgdm9pZCB0
ZXN0WkRlZk9mU3BpbGxTbG90V2l0aE9mZnNldE5lZWRpbgogICAgIENIRUNLKHJlc3VsdCA9PSBz
dGF0aWNfY2FzdDxpbnQzMl90PihudW1iZXJPZlNsb3RzKSk7CiB9CiAKK3ZvaWQgdGVzdEVhcmx5
QW5kTGF0ZVVzZU9mU2FtZVRtcCgpCit7CisgICAgV2Vha1JhbmRvbSB3ZWFrUmFuZG9tOworICAg
IHNpemVfdCBudW1UbXBzID0gUmVnaXN0ZXJTZXQ6OmFsbEdQUnMoKS5udW1iZXJPZlNldFJlZ2lz
dGVycygpOworICAgIGludDY0X3QgZXhwZWN0ZWRSZXN1bHQgPSAwOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtVG1wczsgKytpKQorICAgICAgICBleHBlY3RlZFJlc3VsdCArPSBpOwor
CisgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IDYwOyArK2opIHsKKyAgICAgICAgQjM6OlBy
b2NlZHVyZSBwcm9jOworICAgICAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICAg
ICAgQjM6OkFpcjo6U3BlY2lhbCogcGF0Y2hwb2ludFNwZWNpYWwgPSBjb2RlLmFkZFNwZWNpYWwo
bWFrZVVuaXF1ZTxCMzo6UGF0Y2hwb2ludFNwZWNpYWw+KCkpOworCisgICAgICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIFZlY3RvcjxUbXA+IHRtcHM7Cisg
ICAgICAgIFRtcCByZXN1bHQgPSBjb2RlLm5ld1RtcChCMzo6R1ApOworICAgICAgICByb290LT5h
cHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIHJlc3VsdCk7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtVG1wczsgKytpKSB7CisgICAgICAgICAgICBUbXAgdG1wID0g
Y29kZS5uZXdUbXAoQjM6OkdQKTsKKyAgICAgICAgICAgIHRtcHMuYXBwZW5kKHRtcCk7CisgICAg
ICAgICAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oaSksIHRtcCk7Cisg
ICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCByYW5kID0gd2Vha1Jh
bmRvbS5nZXRVaW50MzIodG1wcy5zaXplKCkpOworICAgICAgICAgICAgQjM6OlZhbHVlKiBkdW1t
eVZhbHVlID0gcHJvYy5hZGRDb25zdGFudChCMzo6T3JpZ2luKCksIEIzOjpJbnQ2NCwgMCk7CisK
KyAgICAgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBwcm9jLmFkZDxC
Mzo6UGF0Y2hwb2ludFZhbHVlPihCMzo6Vm9pZCwgQjM6Ok9yaWdpbigpKTsKKyAgICAgICAgICAg
IHBhdGNocG9pbnQtPmFwcGVuZChkdW1teVZhbHVlLCBCMzo6VmFsdWVSZXA6OlNvbWVSZWdpc3Rl
cik7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoZHVtbXlWYWx1ZSwgQjM6OlZhbHVl
UmVwOjpTb21lTGF0ZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJM
YXRlKFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpKTsKKyAgICAgICAg
ICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxs
KCkuZ2V0KHBhcmFtc1sxXS5ncHIoKSkpOworCisgICAgICAgICAgICAgICAgYXV0byBnb29kID0g
aml0LmJyYW5jaDY0KENDYWxsSGVscGVyczo6RXF1YWwsIHBhcmFtc1sxXS5ncHIoKSwgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIocmFuZCkpOworICAgICAgICAgICAgICAgIGppdC5icmVha3Bv
aW50KCk7CisgICAgICAgICAgICAgICAgZ29vZC5saW5rKCZqaXQpOworCisgICAgICAgICAgICAg
ICAgYXV0byBnb29kMiA9IGppdC5icmFuY2g2NChDQ2FsbEhlbHBlcnM6OkVxdWFsLCBwYXJhbXNb
MF0uZ3ByKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHJhbmQpKTsKKyAgICAgICAgICAg
ICAgICBqaXQuYnJlYWtwb2ludCgpOworICAgICAgICAgICAgICAgIGdvb2QyLmxpbmsoJmppdCk7
CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgSW5zdCBpbnN0KFBhdGNoLCBwYXRjaHBv
aW50LCBBcmc6OnNwZWNpYWwocGF0Y2hwb2ludFNwZWNpYWwpKTsKKworICAgICAgICAgICAgVG1w
IHRtcCA9IHRtcHNbcmFuZF07CisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcCk7Cisg
ICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcCk7CisgICAgICAgICAgICByb290LT5hcHBl
bmQoaW5zdCk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKFRtcCB0bXAgOiB0bXBzKQorICAg
ICAgICAgICAgcm9vdC0+YXBwZW5kKEFkZDY0LCBudWxscHRyLCB0bXAsIHJlc3VsdCk7CisgICAg
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCByZXN1bHQsIFRtcChHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUikpOworICAgICAgICByb290LT5hcHBlbmQoUmV0NjQsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgICAgIGludDY0X3QgYWN0dWFsUmVzdWx0
ID0gY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jKTsKKyAgICAgICAgQ0hFQ0soYWN0dWFsUmVz
dWx0ID09IGV4cGVjdGVkUmVzdWx0KTsKKyAgICB9Cit9CisKK3ZvaWQgdGVzdEVhcmx5Q2xvYmJl
ckludGVyZmVyZW5jZSgpCit7CisgICAgV2Vha1JhbmRvbSB3ZWFrUmFuZG9tOworICAgIHNpemVf
dCBudW1UbXBzID0gUmVnaXN0ZXJTZXQ6OmFsbEdQUnMoKS5udW1iZXJPZlNldFJlZ2lzdGVycygp
OworICAgIGludDY0X3QgZXhwZWN0ZWRSZXN1bHQgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtVG1wczsgKytpKQorICAgICAgICBleHBlY3RlZFJlc3VsdCArPSBpOworCisgICAg
Zm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IDEwMDsgKytqKSB7CisgICAgICAgIEIzOjpQcm9jZWR1
cmUgcHJvYzsKKyAgICAgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgICAgIEIz
OjpBaXI6OlNwZWNpYWwqIHBhdGNocG9pbnRTcGVjaWFsID0gY29kZS5hZGRTcGVjaWFsKG1ha2VV
bmlxdWU8QjM6OlBhdGNocG9pbnRTcGVjaWFsPigpKTsKKworICAgICAgICBCYXNpY0Jsb2NrKiBy
b290ID0gY29kZS5hZGRCbG9jaygpOworICAgICAgICBWZWN0b3I8VG1wPiB0bXBzOworICAgICAg
ICBUbXAgcmVzdWx0ID0gY29kZS5uZXdUbXAoQjM6OkdQKTsKKyAgICAgICAgcm9vdC0+YXBwZW5k
KE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCByZXN1bHQpOworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG51bVRtcHM7ICsraSkgeworICAgICAgICAgICAgVG1wIHRtcCA9IGNvZGUu
bmV3VG1wKEIzOjpHUCk7CisgICAgICAgICAgICB0bXBzLmFwcGVuZCh0bXApOworICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKGkpLCB0bXApOworICAgICAg
ICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgcmFuZCA9IHdlYWtSYW5kb20u
Z2V0VWludDMyKHRtcHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIEIzOjpWYWx1ZSogZHVtbXlWYWx1
ZSA9IHByb2MuYWRkQ29uc3RhbnQoQjM6Ok9yaWdpbigpLCBCMzo6SW50NjQsIDApOworCisgICAg
ICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gcHJvYy5hZGQ8QjM6OlBh
dGNocG9pbnRWYWx1ZT4oQjM6OlZvaWQsIEIzOjpPcmlnaW4oKSk7CisgICAgICAgICAgICBwYXRj
aHBvaW50LT5hcHBlbmQoZHVtbXlWYWx1ZSwgQjM6OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwor
ICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckVhcmx5KFJlZ2lzdGVyU2V0Ojp2b2xhdGls
ZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghUmVnaXN0
ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCkuZ2V0KHBhcmFtc1swXS5ncHIoKSkp
OworCisgICAgICAgICAgICAgICAgYXV0byBnb29kID0gaml0LmJyYW5jaDY0KENDYWxsSGVscGVy
czo6RXF1YWwsIHBhcmFtc1swXS5ncHIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmFu
ZCkpOworICAgICAgICAgICAgICAgIGppdC5icmVha3BvaW50KCk7CisgICAgICAgICAgICAgICAg
Z29vZC5saW5rKCZqaXQpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIEluc3QgaW5z
dChQYXRjaCwgcGF0Y2hwb2ludCwgQXJnOjpzcGVjaWFsKHBhdGNocG9pbnRTcGVjaWFsKSk7CisK
KyAgICAgICAgICAgIFRtcCB0bXAgPSB0bXBzW3JhbmRdOworICAgICAgICAgICAgaW5zdC5hcmdz
LmFwcGVuZCh0bXApOworICAgICAgICAgICAgcm9vdC0+YXBwZW5kKGluc3QpOworICAgICAgICB9
CisKKyAgICAgICAgZm9yIChUbXAgdG1wIDogdG1wcykKKyAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZChBZGQ2NCwgbnVsbHB0ciwgdG1wLCByZXN1bHQpOworICAgICAgICByb290LT5hcHBlbmQoTW92
ZSwgbnVsbHB0ciwgcmVzdWx0LCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICAg
ICAgcm9vdC0+YXBwZW5kKFJldDY0LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpKTsKKworICAgICAgICBpbnQ2NF90IGFjdHVhbFJlc3VsdCA9IGNvbXBpbGVBbmRSdW48aW50
NjRfdD4ocHJvYyk7CisgICAgICAgIENIRUNLKGFjdHVhbFJlc3VsdCA9PSBleHBlY3RlZFJlc3Vs
dCk7CisgICAgfQorfQorCiAjZGVmaW5lIFBSRUZJWCAiTyIsIE9wdGlvbnM6OmRlZmF1bHRCM09w
dExldmVsKCksICI6ICIKIAogI2RlZmluZSBSVU4odGVzdCkgZG8geyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKQEAgLTI0ODksNiArMjYwNyw5IEBAIHZvaWQgcnVuKGNvbnN0IGNo
YXIqIGZpbHRlcikKIAogICAgIFJVTih0ZXN0WkRlZk9mU3BpbGxTbG90V2l0aE9mZnNldE5lZWRp
bmdUb0JlTWF0ZXJpYWxpemVkSW5BUmVnaXN0ZXIoKSk7CiAKKyAgICBSVU4odGVzdEVhcmx5QW5k
TGF0ZVVzZU9mU2FtZVRtcCgpKTsKKyAgICBSVU4odGVzdEVhcmx5Q2xvYmJlckludGVyZmVyZW5j
ZSgpKTsKKwogICAgIGlmICh0YXNrcy5pc0VtcHR5KCkpCiAgICAgICAgIHVzYWdlKCk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9uIDI5Mzkz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQog
ICAgIHN0YXRpYyBSZWdpc3RlclNldCB3ZWJBc3NlbWJseUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsg
Ly8gUmVnaXN0ZXJzIHNhdmVkIGFuZCB1c2VkIGJ5IHRoZSBXZWJBc3NlbWJseSBKSVQuCiAjZW5k
aWYKLSAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgdm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVnaXN0ZXJTZXQgdm9sYXRpbGVSZWdpc3Rl
cnNGb3JKU0NhbGwoKTsKICAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgc3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCk7IC8vIFRoZSB1bmlvbiBvZiBjYWxsZWUgc2F2ZXMgYW5kIHNwZWNpYWwgcmVnaXN0
ZXJzLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWdpc3RlclNldCBtYWNyb1NjcmF0
Y2hSZWdpc3RlcnMoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVnaXN0ZXJTZXQg
YWxsR1BScygpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459026</attachid>
            <date>2022-05-08 22:47:22 -0700</date>
            <delta_ts>2022-05-08 22:50:20 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>25223</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjkzOTY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBA
CisyMDIyLTA1LTA4ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEJldHRlciBoYW5kbGUgY2xvYmJlcmVkIHJlZ2lzdGVycyBpbiBPMCByZWdpc3RlciBhbGxvY2F0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDAy
MDUKKyAgICAgICAgPHJkYXI6Ly84NzIyMDY4OD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIEFpcidzIE8wIHJlZ2lzdGVy
IGFsbG9jYXRvciBiZXR0ZXIgaGFuZGxlIGNsb2JiZXJlZAorICAgICAgICByZWdpc3RlcnMuIFdl
IG5vdyBtb2RlbCBib3RoIGVhcmx5IGFuZCBsYXRlIGNsb2JiZXIgZGlyZWN0bHksIGFuZCB1c2UK
KyAgICAgICAgdGhpcyB0byBwZXJmb3JtIGEgYmFzaWMgaW50ZXJmZXJlbmNlIGFuYWx5c2lzIHdo
ZW4gYWxsb2NhdGluZyBhIHJlZ2lzdGVyCisgICAgICAgIHRvIGEgVG1wLiBBbiBlYXJseSBjbG9i
YmVyIGludGVyZmVyZXMgd2l0aCBhbnkgVXNlIGluIGFuIGluc3RydWN0aW9uLCBhbmQKKyAgICAg
ICAgYW55IGxhdGUgRGVmcy4gQSBsYXRlIGNsb2JiZXIgaW50ZXJmZXJlcyB3aXRoIGFueSBEZWZz
IGluIGFuIGluc3RydWN0aW9uLAorICAgICAgICBhbmQgYW55IGxhdGUgVXNlcy4gV2hhdCB0aGlz
IGVuYWJsZXMgaXMgYW4gZWFybHkgVXNlIGNhbiBiZSBhbGxvY2F0ZWQKKyAgICAgICAgdG8gYSBy
ZWdpc3RlciB0aGF0IGlzIG9ubHkgbGF0ZSBjbG9iYmVyZWQuIEFuZCBhIHJlc3VsdCBjYW4gYmUg
YWxsb2NhdGVkIAorICAgICAgICB0byBhIHJlZ2lzdGVyIHRoYXQgaXMgb25seSBlYXJseSBjbG9i
YmVyZWQuCisgICAgICAgIAorICAgICAgICBQcmlvciB0byB0aGlzLCB0aGUgYWxnb3JpdGhtIGhh
ZCBhIGJ1ZyB3aGVyZSBhIFVzZSBtYXkgYmUgYWxsb2NhdGVkIHRvCisgICAgICAgIGEgcmVnaXN0
ZXIgdGhhdCBpcyBlYXJseSBjbG9iYmVyZWQuCisKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2Nh
dGVSZWdpc3RlcnNBbmRTdGFja0FuZEdlbmVyYXRlQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmJ1aWxkTGl2ZVJhbmdlcyk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmFsbG9j
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6R2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6
ZnJlZURlYWRUbXBzSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpHZW5lcmF0ZUFu
ZEFsbG9jYXRlUmVnaXN0ZXJzOjphc3NpZ25UbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpH
ZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpwcmVwYXJlRm9yR2VuZXJhdGlvbik6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVyYXRl
KToKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0FuZEdlbmVy
YXRlQ29kZS5oOgorICAgICAgICAqIGIzL2Fpci90ZXN0YWlyLmNwcDoKKyAgICAgICAgKiBqaXQv
UmVnaXN0ZXJTZXQuaDoKKwogMjAyMi0wNS0wNiAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xp
bmdAc29ueS5jb20+CiAKICAgICAgICAgVGVtcG9yYWwuRHVyYXRpb24jdG9TdHJpbmcgc2hvdWxk
IG5ldmVyIGlnbm9yZSBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tBbmRHZW5lcmF0ZUNv
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxs
b2NhdGVSZWdpc3RlcnNBbmRTdGFja0FuZEdlbmVyYXRlQ29kZS5jcHAJKHJldmlzaW9uIDI5Mzkz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNB
bmRTdGFja0FuZEdlbmVyYXRlQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcg
QEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpidWlsZAogewogICAgIG1fbGl2
ZVJhbmdlRW5kID0gVG1wTWFwPHNpemVfdD4obV9jb2RlLCAwKTsKIAotICAgIG1fZ2xvYmFsSW5z
dEluZGV4ID0gMDsKKyAgICBtX2dsb2JhbEluc3RJbmRleCA9IDE7CiAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fY29kZSkgewogICAgICAgICBmb3IgKFRtcCB0bXAgOiBsaXZlbmVzcy5s
aXZlQXRIZWFkKGJsb2NrKSkgewogICAgICAgICAgICAgaWYgKCF0bXAuaXNSZWcoKSkKQEAgLTE4
MCwxMSArMTgwLDEyIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmUK
IHsKICAgICBBU1NFUlQocmVnKTsKICAgICBBU1NFUlQobV9tYXBbdG1wXS5yZWcgPT0gcmVnKTsK
KyAgICBBU1NFUlQodG1wLmlzUmVnKCkgfHwgbV9saXZlUmFuZ2VFbmRbdG1wXSA+PSBtX2dsb2Jh
bEluc3RJbmRleCk7CiAgICAgZmx1c2godG1wLCByZWcpOwogICAgIHJlbGVhc2UodG1wLCByZWcp
OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6
YWxsb2MoVG1wIHRtcCwgUmVnIHJlZywgYm9vbCBpc0RlZikKK0FMV0FZU19JTkxJTkUgdm9pZCBH
ZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjphbGxvYyhUbXAgdG1wLCBSZWcgcmVnLCBBcmc6
OlJvbGUgcm9sZSkKIHsKICAgICBpZiAoVG1wIG9jY3VweWluZ1RtcCA9IG1fY3VycmVudEFsbG9j
YXRpb24tPmF0KHJlZykpCiAgICAgICAgIHNwaWxsKG9jY3VweWluZ1RtcCwgcmVnKTsKQEAgLTE5
Nyw3ICsxOTgsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlCiAg
ICAgbV9hdmFpbGFibGVSZWdzW3RtcC5iYW5rKCldLmNsZWFyKHJlZyk7CiAgICAgbV9jdXJyZW50
QWxsb2NhdGlvbi0+YXQocmVnKSA9IHRtcDsKIAotICAgIGlmICghaXNEZWYpIHsKKyAgICBpZiAo
QXJnOjppc0FueVVzZShyb2xlKSkgewogICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSBtX21hcFt0
bXBdLnNwaWxsU2xvdC0+b2Zmc2V0RnJvbUZQKCk7CiAgICAgICAgIGlmICh0bXAuYmFuaygpID09
IEdQKQogICAgICAgICAgICAgbV9qaXQtPmxvYWQ2NChjYWxsRnJhbWVBZGRyKCptX2ppdCwgb2Zm
c2V0KSwgcmVnLmdwcigpKTsKQEAgLTIwNiwxMiArMjA3LDMwIEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmUKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBH
ZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpmcmVlRGVhZFRtcHNJZk5lZWRlZCgpCi17Ci0g
ICAgaWYgKG1fZGlkQWxyZWFkeUZyZWVEZWFkU2xvdHMpCi0gICAgICAgIHJldHVybjsKKy8vIGZy
ZWVEZWFkVG1wc0F0Q3VycmVudEluc3QgYW5kIGZyZWVEZWFkVG1wc0F0Q3VycmVudEJsb2NrIGFy
ZSBuZWVkZWQgZm9yIGNvcnJlY3RuZXNzIGJlY2F1c2UgCisvLyB3ZSByZXVzZSBzdGFjayBzbG90
cyBiZXR3ZWVuIFRtcHMgdGhhdCBkb24ndCBpbnRlcmZlcmUuIFNvIHdlIG5lZWQgdG8gbWFrZSBz
dXJlIHdlIGRvbid0CisvLyBzcGlsbCBhIGRlYWQgVG1wIHRvIGEgbGl2ZSBUbXAncyBzbG90Lgor
Ly8gZnJlZURlYWRUbXBzQXRDdXJyZW50SW5zdCBpcyBtZWFudCB0byBiZSBjYWxsZWQgYXMgd2Ug
d2FsayB0aHJvdWdoIGVhY2ggSW5zbiBpbiBhIGJhc2ljIGJsb2NrLAorLy8gYmVjYXVzZSBpdCBk
b2Vzbid0IGNvbnN1bHQgdGhlIGVudGlyZSByZWdpc3RlciBmaWxlLCBhbmQgaXMgZmFzdGVyIHRo
YW4gZnJlZURlYWRUbXBzQXRDdXJyZW50QmxvY2suCisvLyBCdXQgaXQgb25seSBwcnVuZXMgdGhp
bmdzIHRoYXQgZGllIGF0IGEgcGFydGljdWxhciBpbnN0IGluZGV4IHdpdGhpbiBhIGJsb2NrLCBh
bmQgZG9lc24ndCBwcmV2ZW50CisvLyB1cyBmcm9tIHByb3BhZ2F0aW5nIGEgVG1wIHRoYXQgaXMg
bGl2ZSBpbiBvbmUgYmxvY2sgdG8gdGhlIGhlYWQgb2YgYSBibG9jayB3aGVyZSBpdCBpcyBkZWFk
LiBJZgorLy8gc29tZXRoaW5nIGRpZXMgd2l0aGluIGEgYmxvY2ssIGZyZWVEZWFkVG1wc0F0Q3Vy
cmVudEluc3Qgd2lsbCBjYXRjaCBpdC4KKy8vIGZyZWVEZWFkVG1wc0F0Q3VycmVudEJsb2NrIGlz
IG1lYW50IHRvIGVuc3VyZSB3ZSBwcnVuZSBhd2F5IGFueSBjYXNlcyB3aGVyZSB3ZSBoYXZlIHN0
YXRlCisvLyBmb3IgVG1wcyB0aGF0IGFyZSBkZWFkIGF0IHRoZSBoZWFkIG9mIGEgYmFzaWMgYmxv
Y2suCitBTFdBWVNfSU5MSU5FIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6ZnJl
ZURlYWRUbXBzQXRDdXJyZW50SW5zdCgpCit7CisgICAgYXV0byBpdGVyID0gbV90bXBzVG9SZWxl
YXNlLmZpbmQobV9nbG9iYWxJbnN0SW5kZXgpOworICAgIGlmIChpdGVyICE9IG1fdG1wc1RvUmVs
ZWFzZS5lbmQoKSkgeworICAgICAgICBmb3IgKFRtcCB0bXAgOiBpdGVyLT52YWx1ZSkgeworICAg
ICAgICAgICAgQVNTRVJUKG1fbGl2ZVJhbmdlRW5kW3RtcF0gPCBtX2dsb2JhbEluc3RJbmRleCk7
CisgICAgICAgICAgICBpZiAoUmVnIHJlZyA9IG1fbWFwW3RtcF0ucmVnKQorICAgICAgICAgICAg
ICAgIHJlbGVhc2UodG1wLCByZWcpOworICAgICAgICB9CisgICAgfQorfQogCi0gICAgbV9kaWRB
bHJlYWR5RnJlZURlYWRTbG90cyA9IHRydWU7CitBTFdBWVNfSU5MSU5FIHZvaWQgR2VuZXJhdGVB
bmRBbGxvY2F0ZVJlZ2lzdGVyczo6ZnJlZURlYWRUbXBzQXRDdXJyZW50QmxvY2soKQorewogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50QWxsb2NhdGlvbi0+c2l6ZSgpOyArK2kp
IHsKICAgICAgICAgVG1wIHRtcCA9IG1fY3VycmVudEFsbG9jYXRpb24tPmF0KGkpOwogICAgICAg
ICBpZiAoIXRtcCkKQEAgLTIyNSw0NCArMjQ0LDczIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBHZW5l
cmF0ZUFuZEFsbG9jYXRlUmUKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBHZW5lcmF0
ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjphc3NpZ25UbXAoVG1wJiB0bXAsIEJhbmsgYmFuaywgYm9v
bCBpc0RlZikKK0FMV0FZU19JTkxJTkUgYm9vbCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJz
Ojphc3NpZ25UbXAoVG1wJiB0bXAsIEJhbmsgYmFuaywgQXJnOjpSb2xlIHJvbGUpCiB7CiAgICAg
QVNTRVJUKCF0bXAuaXNSZWcoKSk7Ci0gICAgaWYgKFJlZyByZWcgPSBtX21hcFt0bXBdLnJlZykg
ewotICAgICAgICBBU1NFUlQoIW1fbmFtZWREZWZkUmVncy5jb250YWlucyhyZWcpKTsKLSAgICAg
ICAgdG1wID0gVG1wKHJlZyk7CisKKyAgICBhdXRvIG1hcmtSZWdpc3RlckFzVXNlZCA9IFsmXSAo
UmVnIHJlZykgeworICAgICAgICBpZiAoQXJnOjppc0FueURlZihyb2xlKSkKKyAgICAgICAgICAg
IG1fY2xvYmJlcmVkVG9DbGVhci5jbGVhcihyZWcpOworICAgICAgICAvLyBBdCB0aGlzIHBvaW50
LCBpdCBkb2Vzbid0IG1hdHRlciBpZiB3ZSBhZGQgaXQgdG8gdGhlIG1fbmFtZWRVc2VkUmVncyBv
ciBtX25hbWVkRGVmZFJlZ3MuIAorICAgICAgICAvLyBXZSBqdXN0IG5lZWQgdG8gbWFyayB0aGF0
IHdlIGNhbid0IHVzZSBpdCBhZ2FpbiBmb3IgYW5vdGhlciB0bXAuCiAgICAgICAgIG1fbmFtZWRV
c2VkUmVncy5zZXQocmVnKTsKLSAgICAgICAgQVNTRVJUKCFtX2F2YWlsYWJsZVJlZ3NbYmFua10u
Z2V0KHJlZykpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgfTsKKworICAgIGJv
b2wgbWlnaHRJbnRlcmZlcmUgPSBtX2Vhcmx5Q2xvYmJlci5udW1iZXJPZlNldFJlZ2lzdGVycygp
IHx8IG1fbGF0ZUNsb2JiZXIubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKTsKKworICAgIGF1dG8gaW50
ZXJmZXJlc1dpdGhDbG9iYmVyID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGlmICghbWlnaHRJ
bnRlcmZlcmUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChBcmc6Omlz
QW55VXNlKHJvbGUpICYmIG1fZWFybHlDbG9iYmVyLmdldChyZWcpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpICYmIG1fbGF0ZUNsb2Ji
ZXIuZ2V0KHJlZykpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKEFyZzo6
YWN0aXZlQXQocm9sZSwgQXJnOjpQaGFzZTo6RWFybHkpICYmIG1fZWFybHlDbG9iYmVyLmdldChy
ZWcpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChBcmc6OmFjdGl2ZUF0
KHJvbGUsIEFyZzo6UGhhc2U6OkxhdGUpICYmIG1fbGF0ZUNsb2JiZXIuZ2V0KHJlZykpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKKyAg
ICBpZiAoUmVnIHJlZyA9IG1fbWFwW3RtcF0ucmVnKSB7CisgICAgICAgIGlmICghaW50ZXJmZXJl
c1dpdGhDbG9iYmVyKHJlZykpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9uYW1lZERlZmRSZWdz
LmNvbnRhaW5zKHJlZykpOworICAgICAgICAgICAgdG1wID0gVG1wKHJlZyk7CisgICAgICAgICAg
ICBtYXJrUmVnaXN0ZXJBc1VzZWQocmVnKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9hdmFpbGFi
bGVSZWdzW2JhbmtdLmdldChyZWcpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgICAgIC8vIFRoaXMgaXMgYSByYXJlIGNhc2Ugd2hlbiB3ZSd2ZSBhbHJlYWR5IGFs
bG9jYXRlZCBhIFRtcCBpbiBzb21lIHdheSwgYnV0IGFub3RoZXIgCisgICAgICAgIC8vIFJvbGUg
b2YgdGhlIFRtcCBpbXBvc2VzIHNvbWUgcmVzdHJpY3Rpb24gb24gdGhlIHJlZ2lzdGVyIHZhbHVl
LiBFLmcsIGlmCisgICAgICAgIC8vIHdlIGhhdmUgYSBwcm9ncmFtIGxpa2U6CisgICAgICAgIC8v
IFBhdGNoIFVzZTp0bXAxLCBMYXRlVXNlOnRtcDEsIGxhdGVDbG9iYmVyOngwCisgICAgICAgIC8v
IFRoZSBmaXJzdCB1c2Ugb2YgdG1wMSBjYW4gYmUgYWxsb2NhdGVkIHRvIHgwLCBidXQgdGhlIHNl
Y29uZCBjYW5ub3QuCisgICAgICAgIHNwaWxsKHRtcCwgcmVnKTsKIAotICAgIGlmICghbV9hdmFp
bGFibGVSZWdzW2JhbmtdLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkpCi0gICAgICAgIGZyZWVEZWFk
VG1wc0lmTmVlZGVkKCk7CisgICAgfQogCiAgICAgaWYgKG1fYXZhaWxhYmxlUmVnc1tiYW5rXS5u
dW1iZXJPZlNldFJlZ2lzdGVycygpKSB7CiAgICAgICAgIC8vIFdlIGZpcnN0IHRha2UgYW4gYXZh
aWxhYmxlIHJlZ2lzdGVyLgogICAgICAgICBmb3IgKFJlZyByZWcgOiBtX3JlZ2lzdGVyc1tiYW5r
XSkgewotICAgICAgICAgICAgaWYgKG1fbmFtZWRVc2VkUmVncy5jb250YWlucyhyZWcpIHx8IG1f
bmFtZWREZWZkUmVncy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgaWYgKGludGVyZmVyZXNX
aXRoQ2xvYmJlcihyZWcpIHx8IG1fbmFtZWRVc2VkUmVncy5jb250YWlucyhyZWcpIHx8IG1fbmFt
ZWREZWZkUmVncy5jb250YWlucyhyZWcpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgaWYgKCFtX2F2YWlsYWJsZVJlZ3NbYmFua10uY29udGFpbnMocmVnKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG1fbmFtZWRVc2VkUmVncy5zZXQocmVn
KTsgLy8gQXQgdGhpcyBwb2ludCwgaXQgZG9lc24ndCBtYXR0ZXIgaWYgd2UgYWRkIGl0IHRvIHRo
ZSBtX25hbWVkVXNlZFJlZ3Mgb3IgbV9uYW1lZERlZmRSZWdzLiBXZSBqdXN0IG5lZWQgdG8gbWFy
ayB0aGF0IHdlIGNhbid0IHVzZSBpdCBhZ2Fpbi4KLSAgICAgICAgICAgIGFsbG9jKHRtcCwgcmVn
LCBpc0RlZik7CisKKyAgICAgICAgICAgIG1hcmtSZWdpc3RlckFzVXNlZChyZWcpOworICAgICAg
ICAgICAgYWxsb2ModG1wLCByZWcsIHJvbGUpOwogICAgICAgICAgICAgdG1wID0gVG1wKHJlZyk7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotCi0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCiAgICAgLy8gTm90aGluZyB3YXMgYXZhaWxh
YmxlLCBsZXQncyBtYWtlIHNvbWUgcm9vbS4KICAgICBmb3IgKFJlZyByZWcgOiBtX3JlZ2lzdGVy
c1tiYW5rXSkgewotICAgICAgICBpZiAobV9uYW1lZFVzZWRSZWdzLmNvbnRhaW5zKHJlZykgfHwg
bV9uYW1lZERlZmRSZWdzLmNvbnRhaW5zKHJlZykpCisgICAgICAgIGlmIChpbnRlcmZlcmVzV2l0
aENsb2JiZXIocmVnKSB8fCBtX25hbWVkVXNlZFJlZ3MuY29udGFpbnMocmVnKSB8fCBtX25hbWVk
RGVmZFJlZ3MuY29udGFpbnMocmVnKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
IG1fbmFtZWRVc2VkUmVncy5zZXQocmVnKTsKLQotICAgICAgICBhbGxvYyh0bXAsIHJlZywgaXNE
ZWYpOworICAgICAgICBtYXJrUmVnaXN0ZXJBc1VzZWQocmVnKTsKKyAgICAgICAgYWxsb2ModG1w
LCByZWcsIHJvbGUpOwogICAgICAgICB0bXAgPSBUbXAocmVnKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQpAQCAtMjk4LDcgKzM0Niw3IEBAIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJl
Z2lzdGVyczo6cHJlcGEKIAogICAgICAgICBWZWN0b3I8U3RhY2tTbG90KiwgMTY+IGZyZWVTbG90
czsKICAgICAgICAgVmVjdG9yPFN0YWNrU2xvdCosIDQ+IHRvRnJlZTsKLSAgICAgICAgbV9nbG9i
YWxJbnN0SW5kZXggPSAwOworICAgICAgICBtX2dsb2JhbEluc3RJbmRleCA9IDE7CiAgICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKICAgICAgICAgICAgIGF1dG8gYXNz
aWduU3RhY2tTbG90VG9UbXAgPSBbJl0gKFRtcCB0bXApIHsKICAgICAgICAgICAgICAgICBpZiAo
dG1wLmlzUmVnKCkpCkBAIC00MjQsNiArNDcyLDEyIEBAIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0
ZVJlZ2lzdGVyczo6Z2VuZXIKIAogICAgIGJ1aWxkTGl2ZVJhbmdlcygqbV9saXZlbmVzcyk7CiAK
KyAgICBtX2NvZGUuZm9yRWFjaFRtcChbJl0gKFRtcCB0bXApIHsKKyAgICAgICAgQVNTRVJUKCF0
bXAuaXNSZWcoKSk7CisgICAgICAgIGlmIChzaXplX3QgbGl2ZVJhbmdlRW5kID0gbV9saXZlUmFu
Z2VFbmRbdG1wXSkKKyAgICAgICAgICAgIG1fdG1wc1RvUmVsZWFzZS5hZGQobGl2ZVJhbmdlRW5k
ICsgMSwgVmVjdG9yPFRtcCwgMj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZCh0bXApOworICAg
IH0pOworCiAgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIEluZGV4TWFwPFJlZywgVG1wPj4gY3Vy
cmVudEFsbG9jYXRpb25NYXAobV9jb2RlLnNpemUoKSk7CiAgICAgewogICAgICAgICBJbmRleE1h
cDxSZWcsIFRtcD4gZGVmYXVsdEN1cnJlbnRBbGxvY2F0aW9uKFJlZzo6bWF4SW5kZXgoKSArIDEp
OwpAQCAtNDYxLDcgKzUxNSw3IEBAIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6
Z2VuZXIKIAogICAgIERpc2Fzc2VtYmxlciogZGlzYXNzZW1ibGVyID0gbV9jb2RlLmRpc2Fzc2Vt
YmxlcigpOwogCi0gICAgbV9nbG9iYWxJbnN0SW5kZXggPSAwOworICAgIG1fZ2xvYmFsSW5zdElu
ZGV4ID0gMTsKIAogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKICAgICAg
ICAgY29udGV4dC5jdXJyZW50QmxvY2sgPSBibG9jazsKQEAgLTUyNSw2ICs1NzksOCBAQCB2b2lk
IEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVyCiAKICAgICAgICAgKyttX2dsb2Jh
bEluc3RJbmRleDsKIAorICAgICAgICBmcmVlRGVhZFRtcHNBdEN1cnJlbnRCbG9jaygpOworCiAg
ICAgICAgIGJvb2wgaXNSZXBsYXlpbmdTYW1lSW5zdCA9IGZhbHNlOwogICAgICAgICBmb3IgKHNp
emVfdCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRl
eCkgewogICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwpAQCAtNTM2LDEwICs1OTIsMTEg
QEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpnZW5lcgogCiAgICAgICAgICAg
ICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CiAKLSAgICAgICAgICAgIG1fZGlk
QWxyZWFkeUZyZWVEZWFkU2xvdHMgPSBmYWxzZTsKLQogICAgICAgICAgICAgbV9uYW1lZFVzZWRS
ZWdzID0gUmVnaXN0ZXJTZXQoKTsKICAgICAgICAgICAgIG1fbmFtZWREZWZkUmVncyA9IFJlZ2lz
dGVyU2V0KCk7CisgICAgICAgICAgICBtX2Vhcmx5Q2xvYmJlciA9IFJlZ2lzdGVyU2V0KCk7Cisg
ICAgICAgICAgICBtX2xhdGVDbG9iYmVyID0gUmVnaXN0ZXJTZXQoKTsKKyAgICAgICAgICAgIG1f
Y2xvYmJlcmVkVG9DbGVhciA9IFJlZ2lzdGVyU2V0KCk7CiAKICAgICAgICAgICAgIGJvb2wgbmVl
ZHNUb0dlbmVyYXRlID0gKFsmXSAoKSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGNvbnNpZGVyIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHdlIGNhbiBhbHNv
IGVsaWRlIE1vdjMycwpAQCAtNjE0LDQzICs2NzEsNDggQEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9j
YXRlUmVnaXN0ZXJzOjpnZW5lcgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwog
Ci0gICAgICAgICAgICBSZWdpc3RlclNldCBjbG9iYmVyZWRSZWdpc3RlcnM7Ci0gICAgICAgICAg
ICBSZWdpc3RlclNldCBlYXJseU5leHRDbG9iYmVyZWRSZWdpc3RlcnM7Ci0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgSW5zdCogbmV4dEluc3QgPSBibG9jay0+Z2V0KGluc3RJbmRleCAr
IDEpOwotICAgICAgICAgICAgICAgIGlmIChpbnN0LmtpbmQub3Bjb2RlID09IFBhdGNoIHx8IChu
ZXh0SW5zdCAmJiBuZXh0SW5zdC0+a2luZC5vcGNvZGUgPT0gUGF0Y2gpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChpbnN0LmtpbmQub3Bjb2RlID09IFBhdGNoKQotICAgICAgICAgICAgICAg
ICAgICAgICAgY2xvYmJlcmVkUmVnaXN0ZXJzLm1lcmdlKGluc3QuZXh0cmFDbG9iYmVyZWRSZWdz
KCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEluc3QgJiYgbmV4dEluc3QtPmtpbmQu
b3Bjb2RlID09IFBhdGNoKQotICAgICAgICAgICAgICAgICAgICAgICAgZWFybHlOZXh0Q2xvYmJl
cmVkUmVnaXN0ZXJzLm1lcmdlKG5leHRJbnN0LT5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncygpKTsK
LQotICAgICAgICAgICAgICAgICAgICBjbG9iYmVyZWRSZWdpc3RlcnMuZmlsdGVyKG1fYWxsb3dl
ZFJlZ2lzdGVycyk7Ci0gICAgICAgICAgICAgICAgICAgIGNsb2JiZXJlZFJlZ2lzdGVycy5leGNs
dWRlKG1fbmFtZWREZWZkUmVncyk7Ci0gICAgICAgICAgICAgICAgICAgIGVhcmx5TmV4dENsb2Ji
ZXJlZFJlZ2lzdGVycy5maWx0ZXIobV9hbGxvd2VkUmVnaXN0ZXJzKTsKLQotICAgICAgICAgICAg
ICAgICAgICBtX25hbWVkRGVmZFJlZ3MubWVyZ2UoY2xvYmJlcmVkUmVnaXN0ZXJzKTsKLSAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaW5zdC5raW5kLm9wY29kZSA9PSBQYXRjaCkg
eworICAgICAgICAgICAgICAgIG1fZWFybHlDbG9iYmVyLm1lcmdlKGluc3QuZXh0cmFFYXJseUNs
b2JiZXJlZFJlZ3MoKSk7CisgICAgICAgICAgICAgICAgbV9sYXRlQ2xvYmJlci5tZXJnZShpbnN0
LmV4dHJhQ2xvYmJlcmVkUmVncygpKTsKKworICAgICAgICAgICAgICAgIG1fZWFybHlDbG9iYmVy
LmZpbHRlcihtX2FsbG93ZWRSZWdpc3RlcnMpOworICAgICAgICAgICAgICAgIG1fbGF0ZUNsb2Ji
ZXIuZmlsdGVyKG1fYWxsb3dlZFJlZ2lzdGVycyk7CisKKyAgICAgICAgICAgICAgICBtX2Nsb2Ji
ZXJlZFRvQ2xlYXIubWVyZ2UobV9lYXJseUNsb2JiZXIpOworICAgICAgICAgICAgICAgIG1fY2xv
YmJlcmVkVG9DbGVhci5tZXJnZShtX2xhdGVDbG9iYmVyKTsKKyAgICAgICAgICAgICAgICBtX2Ns
b2JiZXJlZFRvQ2xlYXIuZXhjbHVkZShtX25hbWVkRGVmZFJlZ3MpOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBhdXRvIGFsbG9jTmFtZWQgPSBbJl0gKGNvbnN0IFJlZ2lzdGVyU2V0JiBu
YW1lZCwgYm9vbCBpc0RlZikgeworICAgICAgICAgICAgYXV0byBhbGxvY05hbWVkID0gWyZdIChj
b25zdCBSZWdpc3RlclNldCYgbmFtZWQsIEFyZzo6Um9sZSByb2xlKSB7CiAgICAgICAgICAgICAg
ICAgZm9yIChSZWcgcmVnIDogbmFtZWQpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKFRtcCBv
Y2N1cHlpbmdUbXAgPSBjdXJyZW50QWxsb2NhdGlvbltyZWddKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAob2NjdXB5aW5nVG1wID09IFRtcChyZWcpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICAgICAgZnJlZURlYWRUbXBzSWZOZWVkZWQoKTsgLy8gV2UgZG9uJ3Qgd2FudCB0byBzcGls
bCBhIGRlYWQgdG1wLgotICAgICAgICAgICAgICAgICAgICBhbGxvYyhUbXAocmVnKSwgcmVnLCBp
c0RlZik7CisgICAgICAgICAgICAgICAgICAgIGFsbG9jKFRtcChyZWcpLCByZWcsIHJvbGUpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgIGFsbG9jTmFt
ZWQobV9uYW1lZFVzZWRSZWdzLCBmYWxzZSk7IC8vIE11c3QgY29tZSBiZWZvcmUgdGhlIGRlZmQg
cmVnaXN0ZXJzIHNpbmNlIHdlIG1heSB1c2UgYW5kIGRlZiB0aGUgc2FtZSByZWdpc3Rlci4KLSAg
ICAgICAgICAgIGFsbG9jTmFtZWQobV9uYW1lZERlZmRSZWdzLCB0cnVlKTsKKyAgICAgICAgICAg
IGF1dG8gc3BpbGxJZk5lZWRlZCA9IFsmXSAoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkgeworICAg
ICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHNldCkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoVG1wIHRtcCA9IG1fY3VycmVudEFsbG9jYXRpb24tPmF0KHJlZykpCisgICAgICAgICAgICAg
ICAgICAgICAgICBzcGlsbCh0bXAsIHJlZyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfTsKKworICAgICAgICAgICAgZnJlZURlYWRUbXBzQXRDdXJyZW50SW5zdCgpOworCisgICAg
ICAgICAgICBzcGlsbElmTmVlZGVkKG1fZWFybHlDbG9iYmVyKTsKKyAgICAgICAgICAgIHNwaWxs
SWZOZWVkZWQobV9sYXRlQ2xvYmJlcik7CisKKyAgICAgICAgICAgIGFsbG9jTmFtZWQobV9uYW1l
ZFVzZWRSZWdzLCBBcmc6OlJvbGU6OlVzZSk7IC8vIE11c3QgY29tZSBiZWZvcmUgdGhlIGRlZmQg
cmVnaXN0ZXJzIHNpbmNlIHdlIG1heSB1c2UgYW5kIGRlZiB0aGUgc2FtZSByZWdpc3Rlci4KKyAg
ICAgICAgICAgIGFsbG9jTmFtZWQobV9uYW1lZERlZmRSZWdzLCBBcmc6OlJvbGU6OkRlZik7CiAK
ICAgICAgICAgICAgIGlmIChuZWVkc1RvR2VuZXJhdGUpIHsKICAgICAgICAgICAgICAgICBhdXRv
IHRyeUFsbG9jYXRlID0gWyZdIHsKLSAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFRtcCosIDg+
IHVzZXNUb0FsbG9jOwotICAgICAgICAgICAgICAgICAgICBWZWN0b3I8VG1wKiwgOD4gZGVmc1Rv
QWxsb2M7CisgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8VG1wKiwgQXJnOjpS
b2xlPiwgOD4gdXNlc1RvQWxsb2M7CisgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnBh
aXI8VG1wKiwgQXJnOjpSb2xlPiwgOD4gZGVmc1RvQWxsb2M7CiAKICAgICAgICAgICAgICAgICAg
ICAgaW5zdC5mb3JFYWNoVG1wKFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBX
aWR0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQpAQCAtNjU4
LDE1ICs3MjAsMTggQEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpnZW5lcgog
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB0cmVhdCBVc2UrRGVmIGFzIGEgdXNlLgog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdXNlc1RvQWxsb2MuYXBwZW5kKCZ0bXApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVzZXNUb0FsbG9jLmFwcGVuZChzdGQ6Om1ha2VfcGFpcigmdG1w
LCByb2xlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBcmc6OmlzQW55RGVm
KHJvbGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZnNUb0FsbG9jLmFwcGVuZCgm
dG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZzVG9BbGxvYy5hcHBlbmQoc3Rk
OjptYWtlX3BhaXIoJnRtcCwgcm9sZSkpOwogICAgICAgICAgICAgICAgICAgICB9KTsKIAotICAg
ICAgICAgICAgICAgICAgICBhdXRvIHRyeUFsbG9jYXRlVG1wcyA9IFsmXSAoYXV0byYgdmVjdG9y
LCBib29sIGlzRGVmKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gdHJ5QWxsb2NhdGVUbXBz
ID0gWyZdIChhdXRvJiB2ZWN0b3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3Vj
Y2VzcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFRtcCogdG1wIDogdmVj
dG9yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgJj0gYXNzaWduVG1wKCp0
bXAsIHRtcC0+YmFuaygpLCBpc0RlZik7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHN0
ZDo6cGFpcjxUbXAqLCBBcmc6OlJvbGU+IHBhaXIgOiB2ZWN0b3IpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUbXAmIHRtcCA9ICpzdGQ6OmdldDwwPihwYWlyKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBcmc6OlJvbGUgcm9sZSA9IHN0ZDo6Z2V0PDE+KHBhaXIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgJj0gYXNzaWduVG1wKHRtcCwgdG1wLmJh
bmsoKSwgcm9sZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gc3VjY2VzczsKICAgICAgICAgICAgICAgICAgICAgfTsKIApAQCAtNjc2
LDggKzc0MSw4IEBAIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6Z2VuZXIKICAg
ICAgICAgICAgICAgICAgICAgLy8gc29tZSB0bXBzIG1heSBib3RoIGJlIHVzZWQgYW5kIGRlZmQu
IFNvIHdlIGhhbmRsZSB1c2VzIGZpcnN0IHNpbmNlIGZvckVhY2hUbXAgY291bGQKICAgICAgICAg
ICAgICAgICAgICAgLy8gd2FsayB1c2VzL2RlZnMgaW4gYW55IG9yZGVyLgogICAgICAgICAgICAg
ICAgICAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBzdWNjZXNz
ICY9IHRyeUFsbG9jYXRlVG1wcyh1c2VzVG9BbGxvYywgZmFsc2UpOwotICAgICAgICAgICAgICAg
ICAgICBzdWNjZXNzICY9IHRyeUFsbG9jYXRlVG1wcyhkZWZzVG9BbGxvYywgdHJ1ZSk7CisgICAg
ICAgICAgICAgICAgICAgIHN1Y2Nlc3MgJj0gdHJ5QWxsb2NhdGVUbXBzKHVzZXNUb0FsbG9jKTsK
KyAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyAmPSB0cnlBbGxvY2F0ZVRtcHMoZGVmc1RvQWxs
b2MpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzczsKICAgICAgICAgICAgICAg
ICB9OwogCkBAIC03MjksNyArNzk0LDYgQEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0
ZXJzOjpnZW5lcgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAobV9jb2RlLm5lZWRz
VXNlZFJlZ2lzdGVycygpICYmIGluc3Qua2luZC5vcGNvZGUgPT0gUGF0Y2gpIHsKLSAgICAgICAg
ICAgICAgICBmcmVlRGVhZFRtcHNJZk5lZWRlZCgpOwogICAgICAgICAgICAgICAgIFJlZ2lzdGVy
U2V0IHJlZ2lzdGVyU2V0OwogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y3VycmVudEFsbG9jYXRpb24uc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgaWYg
KGN1cnJlbnRBbGxvY2F0aW9uW2ldKQpAQCAtNzM4LDEzICs4MDIsMTAgQEAgdm9pZCBHZW5lcmF0
ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpnZW5lcgogICAgICAgICAgICAgICAgIGluc3QucmVwb3J0
VXNlZFJlZ2lzdGVycyhyZWdpc3RlclNldCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGF1dG8gY2xvYmJlciA9IFsmXSAoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkgewotICAgICAgICAg
ICAgICAgIGZvciAoUmVnIHJlZyA6IHNldCkgewotICAgICAgICAgICAgICAgICAgICBUbXAgdG1w
KHJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChjdXJyZW50QWxsb2NhdGlvbltyZWdd
ID09IHRtcCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fYXZhaWxhYmxlUmVnc1t0bXAuYmFuaygp
XS5zZXQocmVnKTsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QWxsb2NhdGlvbi0+YXQo
cmVnKSA9IFRtcCgpOwotICAgICAgICAgICAgICAgICAgICBtX21hcFt0bXBdLnJlZyA9IFJlZygp
OworICAgICAgICAgICAgYXV0byBoYW5kbGVDbG9iYmVyID0gWyZdIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKFJlZyByZWcgOiBtX2Nsb2JiZXJlZFRvQ2xlYXIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKFRtcCB0bXAgPSBtX2N1cnJlbnRBbGxvY2F0aW9uLT5hdChyZWcpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmVsZWFzZSh0bXAsIHJlZyk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfTsKIApAQCAtNzU0LDE0ICs4MTUsMTEgQEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9j
YXRlUmVnaXN0ZXJzOjpnZW5lcgogICAgICAgICAgICAgICAgICAgICBqdW1wID0gaW5zdC5nZW5l
cmF0ZSgqbV9qaXQsIGNvbnRleHQpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoanVt
cCwgIWp1bXAuaXNTZXQoKSk7CiAKLSAgICAgICAgICAgICAgICBhbGxvY05hbWVkKGVhcmx5TmV4
dENsb2JiZXJlZFJlZ2lzdGVycywgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgY2xvYmJlcmVkUmVn
aXN0ZXJzLm1lcmdlKGVhcmx5TmV4dENsb2JiZXJlZFJlZ2lzdGVycyk7Ci0gICAgICAgICAgICAg
ICAgY2xvYmJlcihjbG9iYmVyZWRSZWdpc3RlcnMpOworICAgICAgICAgICAgICAgIGhhbmRsZUNs
b2JiZXIoKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKG5l
ZWRzVG9HZW5lcmF0ZSk7CiAKLSAgICAgICAgICAgICAgICBjbG9iYmVyKGNsb2JiZXJlZFJlZ2lz
dGVycyk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGVhcmx5TmV4dENsb2JiZXJlZFJlZ2lzdGVy
cy5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIGhhbmRsZUNsb2JiZXIoKTsKIAogICAgICAg
ICAgICAgICAgIGlmIChibG9jay0+bnVtU3VjY2Vzc29ycygpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIEJ5IGRlZmF1bHQsIHdlIHNwaWxsIGV2ZXJ5dGhpbmcgYmV0d2VlbiBibG9jayBib3Vu
ZGFyaWVzLiBIb3dldmVyLCB3ZSBoYXZlIGEgc21hbGwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0FuZEdlbmVyYXRlQ29kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVS
ZWdpc3RlcnNBbmRTdGFja0FuZEdlbmVyYXRlQ29kZS5oCShyZXZpc2lvbiAyOTM5MzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tB
bmRHZW5lcmF0ZUNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTksOSArNTksMTAgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHJlbGVhc2UoVG1wLCBSZWcpOwogICAgIHZvaWQgZmx1c2goVG1wLCBSZWcp
OwogICAgIHZvaWQgc3BpbGwoVG1wLCBSZWcpOwotICAgIHZvaWQgYWxsb2MoVG1wLCBSZWcsIGJv
b2wgaXNEZWYpOwotICAgIHZvaWQgZnJlZURlYWRUbXBzSWZOZWVkZWQoKTsKLSAgICBib29sIGFz
c2lnblRtcChUbXAmLCBCYW5rLCBib29sIGlzRGVmKTsKKyAgICB2b2lkIGFsbG9jKFRtcCwgUmVn
LCBBcmc6OlJvbGUpOworICAgIHZvaWQgZnJlZURlYWRUbXBzQXRDdXJyZW50SW5zdCgpOworICAg
IHZvaWQgZnJlZURlYWRUbXBzQXRDdXJyZW50QmxvY2soKTsKKyAgICBib29sIGFzc2lnblRtcChU
bXAmLCBCYW5rLCBBcmc6OlJvbGUpOwogICAgIHZvaWQgYnVpbGRMaXZlUmFuZ2VzKFVuaWZpZWRU
bXBMaXZlbmVzcyYpOwogICAgIGJvb2wgaXNEaXNhbGxvd2VkUmVnaXN0ZXIoUmVnKTsKIApAQCAt
ODAsMTAgKzgxLDEzIEBAIHByaXZhdGU6CiAgICAgUmVnaXN0ZXJTZXQgbV9hdmFpbGFibGVSZWdz
W251bUJhbmtzXTsKICAgICBzaXplX3QgbV9nbG9iYWxJbnN0SW5kZXg7CiAgICAgSW5kZXhNYXA8
UmVnLCBUbXA+KiBtX2N1cnJlbnRBbGxvY2F0aW9uIHsgbnVsbHB0ciB9OwotICAgIGJvb2wgbV9k
aWRBbHJlYWR5RnJlZURlYWRTbG90czsKICAgICBUbXBNYXA8c2l6ZV90PiBtX2xpdmVSYW5nZUVu
ZDsKKyAgICBIYXNoTWFwPHNpemVfdCwgVmVjdG9yPFRtcCwgMj4+IG1fdG1wc1RvUmVsZWFzZTsK
ICAgICBSZWdpc3RlclNldCBtX25hbWVkVXNlZFJlZ3M7CiAgICAgUmVnaXN0ZXJTZXQgbV9uYW1l
ZERlZmRSZWdzOworICAgIFJlZ2lzdGVyU2V0IG1fZWFybHlDbG9iYmVyOworICAgIFJlZ2lzdGVy
U2V0IG1fbGF0ZUNsb2JiZXI7CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWRUb0NsZWFyOwog
ICAgIFJlZ2lzdGVyU2V0IG1fYWxsb3dlZFJlZ2lzdGVyczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
VW5pZmllZFRtcExpdmVuZXNzPiBtX2xpdmVuZXNzOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvdGVzdGFpci5jcHAJKHJldmlzaW9uIDI5MzkzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOTIsNiAr
MjM5MiwxMjQgQEAgdm9pZCB0ZXN0WkRlZk9mU3BpbGxTbG90V2l0aE9mZnNldE5lZWRpbgogICAg
IENIRUNLKHJlc3VsdCA9PSBzdGF0aWNfY2FzdDxpbnQzMl90PihudW1iZXJPZlNsb3RzKSk7CiB9
CiAKK3ZvaWQgdGVzdEVhcmx5QW5kTGF0ZVVzZU9mU2FtZVRtcCgpCit7CisgICAgV2Vha1JhbmRv
bSB3ZWFrUmFuZG9tOworICAgIHNpemVfdCBudW1UbXBzID0gUmVnaXN0ZXJTZXQ6OmFsbEdQUnMo
KS5udW1iZXJPZlNldFJlZ2lzdGVycygpOworICAgIGludDY0X3QgZXhwZWN0ZWRSZXN1bHQgPSAw
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtVG1wczsgKytpKQorICAgICAgICBleHBl
Y3RlZFJlc3VsdCArPSBpOworCisgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IDYwOyArK2op
IHsKKyAgICAgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgICAgICBDb2RlJiBjb2RlID0gcHJv
Yy5jb2RlKCk7CisKKyAgICAgICAgQjM6OkFpcjo6U3BlY2lhbCogcGF0Y2hwb2ludFNwZWNpYWwg
PSBjb2RlLmFkZFNwZWNpYWwobWFrZVVuaXF1ZTxCMzo6UGF0Y2hwb2ludFNwZWNpYWw+KCkpOwor
CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIFZl
Y3RvcjxUbXA+IHRtcHM7CisgICAgICAgIFRtcCByZXN1bHQgPSBjb2RlLm5ld1RtcChCMzo6R1Ap
OworICAgICAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIHJlc3Vs
dCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtVG1wczsgKytpKSB7CisgICAg
ICAgICAgICBUbXAgdG1wID0gY29kZS5uZXdUbXAoQjM6OkdQKTsKKyAgICAgICAgICAgIHRtcHMu
YXBwZW5kKHRtcCk7CisgICAgICAgICAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJn
OjppbW0oaSksIHRtcCk7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICB1bnNp
Z25lZCByYW5kID0gd2Vha1JhbmRvbS5nZXRVaW50MzIodG1wcy5zaXplKCkpOworICAgICAgICAg
ICAgQjM6OlZhbHVlKiBkdW1teVZhbHVlID0gcHJvYy5hZGRDb25zdGFudChCMzo6T3JpZ2luKCks
IEIzOjpJbnQ2NCwgMCk7CisKKyAgICAgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNo
cG9pbnQgPSBwcm9jLmFkZDxCMzo6UGF0Y2hwb2ludFZhbHVlPihCMzo6Vm9pZCwgQjM6Ok9yaWdp
bigpKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChkdW1teVZhbHVlLCBCMzo6VmFs
dWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoZHVt
bXlWYWx1ZSwgQjM6OlZhbHVlUmVwOjpTb21lTGF0ZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIHBh
dGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpT
Q2FsbCgpKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghUmVnaXN0ZXJTZXQ6OnZvbGF0aWxl
UmVnaXN0ZXJzRm9ySlNDYWxsKCkuZ2V0KHBhcmFtc1sxXS5ncHIoKSkpOworCisgICAgICAgICAg
ICAgICAgYXV0byBnb29kID0gaml0LmJyYW5jaDY0KENDYWxsSGVscGVyczo6RXF1YWwsIHBhcmFt
c1sxXS5ncHIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmFuZCkpOworICAgICAgICAg
ICAgICAgIGppdC5icmVha3BvaW50KCk7CisgICAgICAgICAgICAgICAgZ29vZC5saW5rKCZqaXQp
OworCisgICAgICAgICAgICAgICAgYXV0byBnb29kMiA9IGppdC5icmFuY2g2NChDQ2FsbEhlbHBl
cnM6OkVxdWFsLCBwYXJhbXNbMF0uZ3ByKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHJh
bmQpKTsKKyAgICAgICAgICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAgICAgICAgICAgICAg
IGdvb2QyLmxpbmsoJmppdCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgSW5zdCBp
bnN0KFBhdGNoLCBwYXRjaHBvaW50LCBBcmc6OnNwZWNpYWwocGF0Y2hwb2ludFNwZWNpYWwpKTsK
KworICAgICAgICAgICAgVG1wIHRtcCA9IHRtcHNbcmFuZF07CisgICAgICAgICAgICBpbnN0LmFy
Z3MuYXBwZW5kKHRtcCk7CisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcCk7CisgICAg
ICAgICAgICByb290LT5hcHBlbmQoaW5zdCk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKFRt
cCB0bXAgOiB0bXBzKQorICAgICAgICAgICAgcm9vdC0+YXBwZW5kKEFkZDY0LCBudWxscHRyLCB0
bXAsIHJlc3VsdCk7CisgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCByZXN1bHQs
IFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgICAgICByb290LT5hcHBlbmQoUmV0
NjQsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgICAgIGlu
dDY0X3QgYWN0dWFsUmVzdWx0ID0gY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jKTsKKyAgICAg
ICAgQ0hFQ0soYWN0dWFsUmVzdWx0ID09IGV4cGVjdGVkUmVzdWx0KTsKKyAgICB9Cit9CisKK3Zv
aWQgdGVzdEVhcmx5Q2xvYmJlckludGVyZmVyZW5jZSgpCit7CisgICAgV2Vha1JhbmRvbSB3ZWFr
UmFuZG9tOworICAgIHNpemVfdCBudW1UbXBzID0gUmVnaXN0ZXJTZXQ6OmFsbEdQUnMoKS5udW1i
ZXJPZlNldFJlZ2lzdGVycygpOworICAgIGludDY0X3QgZXhwZWN0ZWRSZXN1bHQgPSAwOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtVG1wczsgKytpKQorICAgICAgICBleHBlY3RlZFJl
c3VsdCArPSBpOworCisgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IDEwMDsgKytqKSB7Cisg
ICAgICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQ29kZSYgY29kZSA9IHByb2MuY29k
ZSgpOworCisgICAgICAgIEIzOjpBaXI6OlNwZWNpYWwqIHBhdGNocG9pbnRTcGVjaWFsID0gY29k
ZS5hZGRTcGVjaWFsKG1ha2VVbmlxdWU8QjM6OlBhdGNocG9pbnRTcGVjaWFsPigpKTsKKworICAg
ICAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgICAgICBWZWN0b3I8
VG1wPiB0bXBzOworICAgICAgICBUbXAgcmVzdWx0ID0gY29kZS5uZXdUbXAoQjM6OkdQKTsKKyAg
ICAgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCByZXN1bHQpOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVRtcHM7ICsraSkgeworICAgICAgICAg
ICAgVG1wIHRtcCA9IGNvZGUubmV3VG1wKEIzOjpHUCk7CisgICAgICAgICAgICB0bXBzLmFwcGVu
ZCh0bXApOworICAgICAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1t
KGkpLCB0bXApOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQg
cmFuZCA9IHdlYWtSYW5kb20uZ2V0VWludDMyKHRtcHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIEIz
OjpWYWx1ZSogZHVtbXlWYWx1ZSA9IHByb2MuYWRkQ29uc3RhbnQoQjM6Ok9yaWdpbigpLCBCMzo6
SW50NjQsIDApOworCisgICAgICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50
ID0gcHJvYy5hZGQ8QjM6OlBhdGNocG9pbnRWYWx1ZT4oQjM6OlZvaWQsIEIzOjpPcmlnaW4oKSk7
CisgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoZHVtbXlWYWx1ZSwgQjM6OlZhbHVlUmVw
OjpTb21lUmVnaXN0ZXIpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckVhcmx5KFJl
Z2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpKTsKKyAgICAgICAgICAgIHBh
dGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCkuZ2V0
KHBhcmFtc1swXS5ncHIoKSkpOworCisgICAgICAgICAgICAgICAgYXV0byBnb29kID0gaml0LmJy
YW5jaDY0KENDYWxsSGVscGVyczo6RXF1YWwsIHBhcmFtc1swXS5ncHIoKSwgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIocmFuZCkpOworICAgICAgICAgICAgICAgIGppdC5icmVha3BvaW50KCk7
CisgICAgICAgICAgICAgICAgZ29vZC5saW5rKCZqaXQpOworICAgICAgICAgICAgfSk7CisKKyAg
ICAgICAgICAgIEluc3QgaW5zdChQYXRjaCwgcGF0Y2hwb2ludCwgQXJnOjpzcGVjaWFsKHBhdGNo
cG9pbnRTcGVjaWFsKSk7CisKKyAgICAgICAgICAgIFRtcCB0bXAgPSB0bXBzW3JhbmRdOworICAg
ICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZCh0bXApOworICAgICAgICAgICAgcm9vdC0+YXBwZW5k
KGluc3QpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChUbXAgdG1wIDogdG1wcykKKyAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZChBZGQ2NCwgbnVsbHB0ciwgdG1wLCByZXN1bHQpOworICAgICAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgcmVzdWx0LCBUbXAoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kKFJldDY0LCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgICAgICBpbnQ2NF90IGFjdHVhbFJlc3VsdCA9
IGNvbXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYyk7CisgICAgICAgIENIRUNLKGFjdHVhbFJlc3Vs
dCA9PSBleHBlY3RlZFJlc3VsdCk7CisgICAgfQorfQorCiAjZGVmaW5lIFBSRUZJWCAiTyIsIE9w
dGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCksICI6ICIKIAogI2RlZmluZSBSVU4odGVzdCkgZG8g
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTI0ODksNiArMjYwNyw5IEBA
IHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKIAogICAgIFJVTih0ZXN0WkRlZk9mU3BpbGxT
bG90V2l0aE9mZnNldE5lZWRpbmdUb0JlTWF0ZXJpYWxpemVkSW5BUmVnaXN0ZXIoKSk7CiAKKyAg
ICBSVU4odGVzdEVhcmx5QW5kTGF0ZVVzZU9mU2FtZVRtcCgpKTsKKyAgICBSVU4odGVzdEVhcmx5
Q2xvYmJlckludGVyZmVyZW5jZSgpKTsKKwogICAgIGlmICh0YXNrcy5pc0VtcHR5KCkpCiAgICAg
ICAgIHVzYWdlKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJT
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0
LmgJKHJldmlzaW9uIDI5MzkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0
ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQogICAgIHN0YXRpYyBSZWdpc3RlclNldCB3ZWJBc3NlbWJseUNhbGxl
ZVNhdmVSZWdpc3RlcnMoKTsgLy8gUmVnaXN0ZXJzIHNhdmVkIGFuZCB1c2VkIGJ5IHRoZSBXZWJB
c3NlbWJseSBKSVQuCiAjZW5kaWYKLSAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgdm9sYXRpbGVSZWdp
c3RlcnNGb3JKU0NhbGwoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVnaXN0ZXJT
ZXQgdm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKTsKICAgICBzdGF0aWMgUmVnaXN0ZXJTZXQg
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7IC8vIFRoZSB1bmlvbiBvZiBjYWxsZWUgc2F2ZXMg
YW5kIHNwZWNpYWwgcmVnaXN0ZXJzLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWdp
c3RlclNldCBtYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgUmVnaXN0ZXJTZXQgYWxsR1BScygpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459027</attachid>
            <date>2022-05-08 22:50:20 -0700</date>
            <delta_ts>2022-05-09 13:59:56 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>25195</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjkzOTY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBA
CisyMDIyLTA1LTA4ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEJldHRlciBoYW5kbGUgY2xvYmJlcmVkIHJlZ2lzdGVycyBpbiBPMCByZWdpc3RlciBhbGxvY2F0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDAy
MDUKKyAgICAgICAgPHJkYXI6Ly84NzIyMDY4OD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIEFpcidzIE8wIHJlZ2lzdGVy
IGFsbG9jYXRvciBiZXR0ZXIgaGFuZGxlIGNsb2JiZXJlZAorICAgICAgICByZWdpc3RlcnMuIFdl
IG5vdyBtb2RlbCBib3RoIGVhcmx5IGFuZCBsYXRlIGNsb2JiZXIgZGlyZWN0bHksIGFuZCB1c2UK
KyAgICAgICAgdGhpcyB0byBwZXJmb3JtIGEgYmFzaWMgaW50ZXJmZXJlbmNlIGFuYWx5c2lzIHdo
ZW4gYWxsb2NhdGluZyBhIHJlZ2lzdGVyCisgICAgICAgIHRvIGEgVG1wLiBBbiBlYXJseSBjbG9i
YmVyIGludGVyZmVyZXMgd2l0aCBhbnkgVXNlIGluIGFuIGluc3RydWN0aW9uLCBhbmQKKyAgICAg
ICAgYW55IGxhdGUgRGVmcy4gQSBsYXRlIGNsb2JiZXIgaW50ZXJmZXJlcyB3aXRoIGFueSBEZWZz
IGluIGFuIGluc3RydWN0aW9uLAorICAgICAgICBhbmQgYW55IGxhdGUgVXNlcy4gV2hhdCB0aGlz
IGVuYWJsZXMgaXMgYW4gZWFybHkgVXNlIGNhbiBiZSBhbGxvY2F0ZWQKKyAgICAgICAgdG8gYSBy
ZWdpc3RlciB0aGF0IGlzIG9ubHkgbGF0ZSBjbG9iYmVyZWQuIEFuZCBhIHJlc3VsdCBjYW4gYmUg
YWxsb2NhdGVkIAorICAgICAgICB0byBhIHJlZ2lzdGVyIHRoYXQgaXMgb25seSBlYXJseSBjbG9i
YmVyZWQuCisgICAgICAgIAorICAgICAgICBQcmlvciB0byB0aGlzLCB0aGUgYWxnb3JpdGhtIGhh
ZCBhIGJ1ZyB3aGVyZSBhIFVzZSBtYXkgYmUgYWxsb2NhdGVkIHRvCisgICAgICAgIGEgcmVnaXN0
ZXIgdGhhdCBpcyBlYXJseSBjbG9iYmVyZWQuCisKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2Nh
dGVSZWdpc3RlcnNBbmRTdGFja0FuZEdlbmVyYXRlQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmJ1aWxkTGl2ZVJhbmdlcyk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmFsbG9j
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6R2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6
ZnJlZURlYWRUbXBzSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpHZW5lcmF0ZUFu
ZEFsbG9jYXRlUmVnaXN0ZXJzOjphc3NpZ25UbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpH
ZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpwcmVwYXJlRm9yR2VuZXJhdGlvbik6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVyYXRl
KToKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0FuZEdlbmVy
YXRlQ29kZS5oOgorICAgICAgICAqIGIzL2Fpci90ZXN0YWlyLmNwcDoKKyAgICAgICAgKiBqaXQv
UmVnaXN0ZXJTZXQuaDoKKwogMjAyMi0wNS0wNiAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xp
bmdAc29ueS5jb20+CiAKICAgICAgICAgVGVtcG9yYWwuRHVyYXRpb24jdG9TdHJpbmcgc2hvdWxk
IG5ldmVyIGlnbm9yZSBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tBbmRHZW5lcmF0ZUNv
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxs
b2NhdGVSZWdpc3RlcnNBbmRTdGFja0FuZEdlbmVyYXRlQ29kZS5jcHAJKHJldmlzaW9uIDI5Mzkz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNB
bmRTdGFja0FuZEdlbmVyYXRlQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcg
QEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpidWlsZAogewogICAgIG1fbGl2
ZVJhbmdlRW5kID0gVG1wTWFwPHNpemVfdD4obV9jb2RlLCAwKTsKIAotICAgIG1fZ2xvYmFsSW5z
dEluZGV4ID0gMDsKKyAgICBtX2dsb2JhbEluc3RJbmRleCA9IDE7CiAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fY29kZSkgewogICAgICAgICBmb3IgKFRtcCB0bXAgOiBsaXZlbmVzcy5s
aXZlQXRIZWFkKGJsb2NrKSkgewogICAgICAgICAgICAgaWYgKCF0bXAuaXNSZWcoKSkKQEAgLTE4
MCwxMSArMTgwLDEyIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmUK
IHsKICAgICBBU1NFUlQocmVnKTsKICAgICBBU1NFUlQobV9tYXBbdG1wXS5yZWcgPT0gcmVnKTsK
KyAgICBBU1NFUlQodG1wLmlzUmVnKCkgfHwgbV9saXZlUmFuZ2VFbmRbdG1wXSA+PSBtX2dsb2Jh
bEluc3RJbmRleCk7CiAgICAgZmx1c2godG1wLCByZWcpOwogICAgIHJlbGVhc2UodG1wLCByZWcp
OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6
YWxsb2MoVG1wIHRtcCwgUmVnIHJlZywgYm9vbCBpc0RlZikKK0FMV0FZU19JTkxJTkUgdm9pZCBH
ZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjphbGxvYyhUbXAgdG1wLCBSZWcgcmVnLCBBcmc6
OlJvbGUgcm9sZSkKIHsKICAgICBpZiAoVG1wIG9jY3VweWluZ1RtcCA9IG1fY3VycmVudEFsbG9j
YXRpb24tPmF0KHJlZykpCiAgICAgICAgIHNwaWxsKG9jY3VweWluZ1RtcCwgcmVnKTsKQEAgLTE5
Nyw3ICsxOTgsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlCiAg
ICAgbV9hdmFpbGFibGVSZWdzW3RtcC5iYW5rKCldLmNsZWFyKHJlZyk7CiAgICAgbV9jdXJyZW50
QWxsb2NhdGlvbi0+YXQocmVnKSA9IHRtcDsKIAotICAgIGlmICghaXNEZWYpIHsKKyAgICBpZiAo
QXJnOjppc0FueVVzZShyb2xlKSkgewogICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSBtX21hcFt0
bXBdLnNwaWxsU2xvdC0+b2Zmc2V0RnJvbUZQKCk7CiAgICAgICAgIGlmICh0bXAuYmFuaygpID09
IEdQKQogICAgICAgICAgICAgbV9qaXQtPmxvYWQ2NChjYWxsRnJhbWVBZGRyKCptX2ppdCwgb2Zm
c2V0KSwgcmVnLmdwcigpKTsKQEAgLTIwNiwxMiArMjA3LDI5IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmUKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBH
ZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpmcmVlRGVhZFRtcHNJZk5lZWRlZCgpCi17Ci0g
ICAgaWYgKG1fZGlkQWxyZWFkeUZyZWVEZWFkU2xvdHMpCi0gICAgICAgIHJldHVybjsKKy8vIGZy
ZWVEZWFkVG1wc0F0Q3VycmVudEluc3QgYW5kIGZyZWVEZWFkVG1wc0F0Q3VycmVudEJsb2NrIGFy
ZSBuZWVkZWQgZm9yIGNvcnJlY3RuZXNzIGJlY2F1c2UgCisvLyB3ZSByZXVzZSBzdGFjayBzbG90
cyBiZXR3ZWVuIFRtcHMgdGhhdCBkb24ndCBpbnRlcmZlcmUuIFNvIHdlIG5lZWQgdG8gbWFrZSBz
dXJlIHdlIGRvbid0CisvLyBzcGlsbCBhIGRlYWQgVG1wIHRvIGEgbGl2ZSBUbXAncyBzbG90Lgor
Ly8gZnJlZURlYWRUbXBzQXRDdXJyZW50SW5zdCBpcyBtZWFudCB0byBiZSBjYWxsZWQgYXMgd2Ug
d2FsayB0aHJvdWdoIGVhY2ggaW5zdHJ1Y3Rpb24gaW4gYSBiYXNpYyBibG9jaworLy8gYmVjYXVz
ZSBpdCBkb2Vzbid0IGNvbnN1bHQgdGhlIGVudGlyZSByZWdpc3RlciBmaWxlLCBhbmQgaXMgZmFz
dGVyIHRoYW4gZnJlZURlYWRUbXBzQXRDdXJyZW50QmxvY2suCisvLyBIb3dldmVyLCBpdCBvbmx5
IHBydW5lcyB0aGluZ3MgdGhhdCBkaWUgYXQgYSBwYXJ0aWN1bGFyIGluc3QgaW5kZXggd2l0aGlu
IGEgYmxvY2ssIGFuZCBkb2Vzbid0IHByZXZlbnQKKy8vIHVzIGZyb20gcHJvcGFnYXRpbmcgYSBU
bXAgdGhhdCBpcyBsaXZlIGluIG9uZSBibG9jayB0byB0aGUgaGVhZCBvZiBhIGJsb2NrIHdoZXJl
IGl0IGlzIGRlYWQuIElmCisvLyBzb21ldGhpbmcgZGllcyB3aXRoaW4gYSBibG9jaywgZnJlZURl
YWRUbXBzQXRDdXJyZW50SW5zdCB3aWxsIGNhdGNoIGl0LiBmcmVlRGVhZFRtcHNBdEN1cnJlbnRC
bG9jayBpcyAKKy8vIG1lYW50IHRvIGVuc3VyZSB3ZSBwcnVuZSBhd2F5IGFueSBUbXBzIHRoYXQg
YXJlIGRlYWQgYXQgdGhlIGhlYWQgb2YgYSBibG9jay4KK0FMV0FZU19JTkxJTkUgdm9pZCBHZW5l
cmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpmcmVlRGVhZFRtcHNBdEN1cnJlbnRJbnN0KCkKK3sK
KyAgICBhdXRvIGl0ZXIgPSBtX3RtcHNUb1JlbGVhc2UuZmluZChtX2dsb2JhbEluc3RJbmRleCk7
CisgICAgaWYgKGl0ZXIgIT0gbV90bXBzVG9SZWxlYXNlLmVuZCgpKSB7CisgICAgICAgIGZvciAo
VG1wIHRtcCA6IGl0ZXItPnZhbHVlKSB7CisgICAgICAgICAgICBBU1NFUlQobV9saXZlUmFuZ2VF
bmRbdG1wXSA8IG1fZ2xvYmFsSW5zdEluZGV4KTsKKyAgICAgICAgICAgIGlmIChSZWcgcmVnID0g
bV9tYXBbdG1wXS5yZWcpCisgICAgICAgICAgICAgICAgcmVsZWFzZSh0bXAsIHJlZyk7CisgICAg
ICAgIH0KKyAgICB9Cit9CiAKLSAgICBtX2RpZEFscmVhZHlGcmVlRGVhZFNsb3RzID0gdHJ1ZTsK
K0FMV0FZU19JTkxJTkUgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpmcmVlRGVh
ZFRtcHNBdEN1cnJlbnRCbG9jaygpCit7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1
cnJlbnRBbGxvY2F0aW9uLT5zaXplKCk7ICsraSkgewogICAgICAgICBUbXAgdG1wID0gbV9jdXJy
ZW50QWxsb2NhdGlvbi0+YXQoaSk7CiAgICAgICAgIGlmICghdG1wKQpAQCAtMjI1LDQ0ICsyNDMs
NzMgQEAgQUxXQVlTX0lOTElORSB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZQogICAgIH0KIH0K
IAotQUxXQVlTX0lOTElORSBib29sIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmFzc2ln
blRtcChUbXAmIHRtcCwgQmFuayBiYW5rLCBib29sIGlzRGVmKQorQUxXQVlTX0lOTElORSBib29s
IEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmFzc2lnblRtcChUbXAmIHRtcCwgQmFuayBi
YW5rLCBBcmc6OlJvbGUgcm9sZSkKIHsKICAgICBBU1NFUlQoIXRtcC5pc1JlZygpKTsKLSAgICBp
ZiAoUmVnIHJlZyA9IG1fbWFwW3RtcF0ucmVnKSB7Ci0gICAgICAgIEFTU0VSVCghbV9uYW1lZERl
ZmRSZWdzLmNvbnRhaW5zKHJlZykpOwotICAgICAgICB0bXAgPSBUbXAocmVnKTsKKworICAgIGF1
dG8gbWFya1JlZ2lzdGVyQXNVc2VkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGlmIChBcmc6
OmlzQW55RGVmKHJvbGUpKQorICAgICAgICAgICAgbV9jbG9iYmVyZWRUb0NsZWFyLmNsZWFyKHJl
Zyk7CisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHdlIGFk
ZCBpdCB0byB0aGUgbV9uYW1lZFVzZWRSZWdzIG9yIG1fbmFtZWREZWZkUmVncy4gCisgICAgICAg
IC8vIFdlIGp1c3QgbmVlZCB0byBtYXJrIHRoYXQgd2UgY2FuJ3QgdXNlIGl0IGFnYWluIGZvciBh
bm90aGVyIHRtcC4KICAgICAgICAgbV9uYW1lZFVzZWRSZWdzLnNldChyZWcpOwotICAgICAgICBB
U1NFUlQoIW1fYXZhaWxhYmxlUmVnc1tiYW5rXS5nZXQocmVnKSk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KKyAgICB9OworCisgICAgYm9vbCBtaWdodEludGVyZmVyZSA9IG1fZWFybHlD
bG9iYmVyLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkgfHwgbV9sYXRlQ2xvYmJlci5udW1iZXJPZlNl
dFJlZ2lzdGVycygpOworCisgICAgYXV0byBpbnRlcmZlcmVzV2l0aENsb2JiZXIgPSBbJl0gKFJl
ZyByZWcpIHsKKyAgICAgICAgaWYgKCFtaWdodEludGVyZmVyZSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkgJiYgbV9lYXJseUNsb2Ji
ZXIuZ2V0KHJlZykpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKEFyZzo6
aXNBbnlEZWYocm9sZSkgJiYgbV9sYXRlQ2xvYmJlci5nZXQocmVnKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBpZiAoQXJnOjphY3RpdmVBdChyb2xlLCBBcmc6OlBoYXNlOjpF
YXJseSkgJiYgbV9lYXJseUNsb2JiZXIuZ2V0KHJlZykpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgaWYgKEFyZzo6YWN0aXZlQXQocm9sZSwgQXJnOjpQaGFzZTo6TGF0ZSkgJiYg
bV9sYXRlQ2xvYmJlci5nZXQocmVnKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfTsKKworICAgIGlmIChSZWcgcmVnID0gbV9tYXBbdG1wXS5y
ZWcpIHsKKyAgICAgICAgaWYgKCFpbnRlcmZlcmVzV2l0aENsb2JiZXIocmVnKSkgeworICAgICAg
ICAgICAgQVNTRVJUKCFtX25hbWVkRGVmZFJlZ3MuY29udGFpbnMocmVnKSk7CisgICAgICAgICAg
ICB0bXAgPSBUbXAocmVnKTsKKyAgICAgICAgICAgIG1hcmtSZWdpc3RlckFzVXNlZChyZWcpOwor
ICAgICAgICAgICAgQVNTRVJUKCFtX2F2YWlsYWJsZVJlZ3NbYmFua10uZ2V0KHJlZykpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gVGhpcyBpcyBhIHJh
cmUgY2FzZSB3aGVuIHdlJ3ZlIGFscmVhZHkgYWxsb2NhdGVkIGEgVG1wIGluIHNvbWUgd2F5LCBi
dXQgYW5vdGhlciAKKyAgICAgICAgLy8gUm9sZSBvZiB0aGUgVG1wIGltcG9zZXMgc29tZSByZXN0
cmljdGlvbiBvbiB0aGUgcmVnaXN0ZXIgdmFsdWUuIEUuZywgaWYKKyAgICAgICAgLy8gd2UgaGF2
ZSBhIHByb2dyYW0gbGlrZToKKyAgICAgICAgLy8gUGF0Y2ggVXNlOnRtcDEsIExhdGVVc2U6dG1w
MSwgbGF0ZUNsb2JiZXI6eDAKKyAgICAgICAgLy8gVGhlIGZpcnN0IHVzZSBvZiB0bXAxIGNhbiBi
ZSBhbGxvY2F0ZWQgdG8geDAsIGJ1dCB0aGUgc2Vjb25kIGNhbm5vdC4KKyAgICAgICAgc3BpbGwo
dG1wLCByZWcpOwogCi0gICAgaWYgKCFtX2F2YWlsYWJsZVJlZ3NbYmFua10ubnVtYmVyT2ZTZXRS
ZWdpc3RlcnMoKSkKLSAgICAgICAgZnJlZURlYWRUbXBzSWZOZWVkZWQoKTsKKyAgICB9CiAKICAg
ICBpZiAobV9hdmFpbGFibGVSZWdzW2JhbmtdLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkpIHsKICAg
ICAgICAgLy8gV2UgZmlyc3QgdGFrZSBhbiBhdmFpbGFibGUgcmVnaXN0ZXIuCiAgICAgICAgIGZv
ciAoUmVnIHJlZyA6IG1fcmVnaXN0ZXJzW2JhbmtdKSB7Ci0gICAgICAgICAgICBpZiAobV9uYW1l
ZFVzZWRSZWdzLmNvbnRhaW5zKHJlZykgfHwgbV9uYW1lZERlZmRSZWdzLmNvbnRhaW5zKHJlZykp
CisgICAgICAgICAgICBpZiAoaW50ZXJmZXJlc1dpdGhDbG9iYmVyKHJlZykgfHwgbV9uYW1lZFVz
ZWRSZWdzLmNvbnRhaW5zKHJlZykgfHwgbV9uYW1lZERlZmRSZWdzLmNvbnRhaW5zKHJlZykpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAoIW1fYXZhaWxhYmxlUmVn
c1tiYW5rXS5jb250YWlucyhyZWcpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgbV9uYW1lZFVzZWRSZWdzLnNldChyZWcpOyAvLyBBdCB0aGlzIHBvaW50LCBpdCBkb2Vz
bid0IG1hdHRlciBpZiB3ZSBhZGQgaXQgdG8gdGhlIG1fbmFtZWRVc2VkUmVncyBvciBtX25hbWVk
RGVmZFJlZ3MuIFdlIGp1c3QgbmVlZCB0byBtYXJrIHRoYXQgd2UgY2FuJ3QgdXNlIGl0IGFnYWlu
LgotICAgICAgICAgICAgYWxsb2ModG1wLCByZWcsIGlzRGVmKTsKKworICAgICAgICAgICAgbWFy
a1JlZ2lzdGVyQXNVc2VkKHJlZyk7CisgICAgICAgICAgICBhbGxvYyh0bXAsIHJlZywgcm9sZSk7
CiAgICAgICAgICAgICB0bXAgPSBUbXAocmVnKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9
CiAKICAgICAvLyBOb3RoaW5nIHdhcyBhdmFpbGFibGUsIGxldCdzIG1ha2Ugc29tZSByb29tLgog
ICAgIGZvciAoUmVnIHJlZyA6IG1fcmVnaXN0ZXJzW2JhbmtdKSB7Ci0gICAgICAgIGlmIChtX25h
bWVkVXNlZFJlZ3MuY29udGFpbnMocmVnKSB8fCBtX25hbWVkRGVmZFJlZ3MuY29udGFpbnMocmVn
KSkKKyAgICAgICAgaWYgKGludGVyZmVyZXNXaXRoQ2xvYmJlcihyZWcpIHx8IG1fbmFtZWRVc2Vk
UmVncy5jb250YWlucyhyZWcpIHx8IG1fbmFtZWREZWZkUmVncy5jb250YWlucyhyZWcpKQogICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgbV9uYW1lZFVzZWRSZWdzLnNldChyZWcpOwot
Ci0gICAgICAgIGFsbG9jKHRtcCwgcmVnLCBpc0RlZik7CisgICAgICAgIG1hcmtSZWdpc3RlckFz
VXNlZChyZWcpOworICAgICAgICBhbGxvYyh0bXAsIHJlZywgcm9sZSk7CiAgICAgICAgIHRtcCA9
IFRtcChyZWcpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yOTgsNyArMzQ1LDcg
QEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpwcmVwYQogCiAgICAgICAgIFZl
Y3RvcjxTdGFja1Nsb3QqLCAxNj4gZnJlZVNsb3RzOwogICAgICAgICBWZWN0b3I8U3RhY2tTbG90
KiwgND4gdG9GcmVlOwotICAgICAgICBtX2dsb2JhbEluc3RJbmRleCA9IDA7CisgICAgICAgIG1f
Z2xvYmFsSW5zdEluZGV4ID0gMTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1f
Y29kZSkgewogICAgICAgICAgICAgYXV0byBhc3NpZ25TdGFja1Nsb3RUb1RtcCA9IFsmXSAoVG1w
IHRtcCkgewogICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKQEAgLTQyNCw2ICs0NzEs
MTIgQEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpnZW5lcgogCiAgICAgYnVp
bGRMaXZlUmFuZ2VzKCptX2xpdmVuZXNzKTsKIAorICAgIG1fY29kZS5mb3JFYWNoVG1wKFsmXSAo
VG1wIHRtcCkgeworICAgICAgICBBU1NFUlQoIXRtcC5pc1JlZygpKTsKKyAgICAgICAgaWYgKHNp
emVfdCBsaXZlUmFuZ2VFbmQgPSBtX2xpdmVSYW5nZUVuZFt0bXBdKQorICAgICAgICAgICAgbV90
bXBzVG9SZWxlYXNlLmFkZChsaXZlUmFuZ2VFbmQgKyAxLCBWZWN0b3I8VG1wLCAyPigpKS5pdGVy
YXRvci0+dmFsdWUuYXBwZW5kKHRtcCk7CisgICAgfSk7CisKICAgICBJbmRleE1hcDxCYXNpY0Js
b2NrKiwgSW5kZXhNYXA8UmVnLCBUbXA+PiBjdXJyZW50QWxsb2NhdGlvbk1hcChtX2NvZGUuc2l6
ZSgpKTsKICAgICB7CiAgICAgICAgIEluZGV4TWFwPFJlZywgVG1wPiBkZWZhdWx0Q3VycmVudEFs
bG9jYXRpb24oUmVnOjptYXhJbmRleCgpICsgMSk7CkBAIC00NjEsNyArNTE0LDcgQEAgdm9pZCBH
ZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpnZW5lcgogCiAgICAgRGlzYXNzZW1ibGVyKiBk
aXNhc3NlbWJsZXIgPSBtX2NvZGUuZGlzYXNzZW1ibGVyKCk7CiAKLSAgICBtX2dsb2JhbEluc3RJ
bmRleCA9IDA7CisgICAgbV9nbG9iYWxJbnN0SW5kZXggPSAxOwogCiAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fY29kZSkgewogICAgICAgICBjb250ZXh0LmN1cnJlbnRCbG9jayA9IGJs
b2NrOwpAQCAtNTI1LDYgKzU3OCw4IEBAIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVy
czo6Z2VuZXIKIAogICAgICAgICArK21fZ2xvYmFsSW5zdEluZGV4OwogCisgICAgICAgIGZyZWVE
ZWFkVG1wc0F0Q3VycmVudEJsb2NrKCk7CisKICAgICAgICAgYm9vbCBpc1JlcGxheWluZ1NhbWVJ
bnN0ID0gZmFsc2U7CiAgICAgICAgIGZvciAoc2l6ZV90IGluc3RJbmRleCA9IDA7IGluc3RJbmRl
eCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CiAgICAgICAgICAgICBjaGVja0NvbnNp
c3RlbmN5KCk7CkBAIC01MzYsMTAgKzU5MSwxMSBAQCB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVS
ZWdpc3RlcnM6OmdlbmVyCiAKICAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5z
dEluZGV4KTsKIAotICAgICAgICAgICAgbV9kaWRBbHJlYWR5RnJlZURlYWRTbG90cyA9IGZhbHNl
OwotCiAgICAgICAgICAgICBtX25hbWVkVXNlZFJlZ3MgPSBSZWdpc3RlclNldCgpOwogICAgICAg
ICAgICAgbV9uYW1lZERlZmRSZWdzID0gUmVnaXN0ZXJTZXQoKTsKKyAgICAgICAgICAgIG1fZWFy
bHlDbG9iYmVyID0gUmVnaXN0ZXJTZXQoKTsKKyAgICAgICAgICAgIG1fbGF0ZUNsb2JiZXIgPSBS
ZWdpc3RlclNldCgpOworICAgICAgICAgICAgbV9jbG9iYmVyZWRUb0NsZWFyID0gUmVnaXN0ZXJT
ZXQoKTsKIAogICAgICAgICAgICAgYm9vbCBuZWVkc1RvR2VuZXJhdGUgPSAoWyZdICgpIC0+IGJv
b2wgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY29uc2lkZXIgdHJ5aW5n
IHRvIGZpZ3VyZSBvdXQgaWYgd2UgY2FuIGFsc28gZWxpZGUgTW92MzJzCkBAIC02MTQsNDMgKzY3
MCw0OCBAQCB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVyCiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGNs
b2JiZXJlZFJlZ2lzdGVyczsKLSAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGVhcmx5TmV4dENsb2Ji
ZXJlZFJlZ2lzdGVyczsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBJbnN0KiBuZXh0
SW5zdCA9IGJsb2NrLT5nZXQoaW5zdEluZGV4ICsgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKGlu
c3Qua2luZC5vcGNvZGUgPT0gUGF0Y2ggfHwgKG5leHRJbnN0ICYmIG5leHRJbnN0LT5raW5kLm9w
Y29kZSA9PSBQYXRjaCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluc3Qua2luZC5vcGNv
ZGUgPT0gUGF0Y2gpCi0gICAgICAgICAgICAgICAgICAgICAgICBjbG9iYmVyZWRSZWdpc3RlcnMu
bWVyZ2UoaW5zdC5leHRyYUNsb2JiZXJlZFJlZ3MoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChuZXh0SW5zdCAmJiBuZXh0SW5zdC0+a2luZC5vcGNvZGUgPT0gUGF0Y2gpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBlYXJseU5leHRDbG9iYmVyZWRSZWdpc3RlcnMubWVyZ2UobmV4dEluc3Qt
PmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIGNsb2Ji
ZXJlZFJlZ2lzdGVycy5maWx0ZXIobV9hbGxvd2VkUmVnaXN0ZXJzKTsKLSAgICAgICAgICAgICAg
ICAgICAgY2xvYmJlcmVkUmVnaXN0ZXJzLmV4Y2x1ZGUobV9uYW1lZERlZmRSZWdzKTsKLSAgICAg
ICAgICAgICAgICAgICAgZWFybHlOZXh0Q2xvYmJlcmVkUmVnaXN0ZXJzLmZpbHRlcihtX2FsbG93
ZWRSZWdpc3RlcnMpOwotCi0gICAgICAgICAgICAgICAgICAgIG1fbmFtZWREZWZkUmVncy5tZXJn
ZShjbG9iYmVyZWRSZWdpc3RlcnMpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChpbnN0LmtpbmQub3Bjb2RlID09IFBhdGNoKSB7CisgICAgICAgICAgICAgICAgbV9lYXJseUNs
b2JiZXIubWVyZ2UoaW5zdC5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncygpKTsKKyAgICAgICAgICAg
ICAgICBtX2xhdGVDbG9iYmVyLm1lcmdlKGluc3QuZXh0cmFDbG9iYmVyZWRSZWdzKCkpOworCisg
ICAgICAgICAgICAgICAgbV9lYXJseUNsb2JiZXIuZmlsdGVyKG1fYWxsb3dlZFJlZ2lzdGVycyk7
CisgICAgICAgICAgICAgICAgbV9sYXRlQ2xvYmJlci5maWx0ZXIobV9hbGxvd2VkUmVnaXN0ZXJz
KTsKKworICAgICAgICAgICAgICAgIG1fY2xvYmJlcmVkVG9DbGVhci5tZXJnZShtX2Vhcmx5Q2xv
YmJlcik7CisgICAgICAgICAgICAgICAgbV9jbG9iYmVyZWRUb0NsZWFyLm1lcmdlKG1fbGF0ZUNs
b2JiZXIpOworICAgICAgICAgICAgICAgIG1fY2xvYmJlcmVkVG9DbGVhci5leGNsdWRlKG1fbmFt
ZWREZWZkUmVncyk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGF1dG8gYWxsb2NOYW1l
ZCA9IFsmXSAoY29uc3QgUmVnaXN0ZXJTZXQmIG5hbWVkLCBib29sIGlzRGVmKSB7CisgICAgICAg
ICAgICBhdXRvIGFsbG9jTmFtZWQgPSBbJl0gKGNvbnN0IFJlZ2lzdGVyU2V0JiBuYW1lZCwgQXJn
OjpSb2xlIHJvbGUpIHsKICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiBuYW1lZCkgewog
ICAgICAgICAgICAgICAgICAgICBpZiAoVG1wIG9jY3VweWluZ1RtcCA9IGN1cnJlbnRBbGxvY2F0
aW9uW3JlZ10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvY2N1cHlpbmdUbXAgPT0g
VG1wKHJlZykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBmcmVlRGVhZFRtcHNJZk5lZWRl
ZCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIHNwaWxsIGEgZGVhZCB0bXAuCi0gICAgICAgICAgICAg
ICAgICAgIGFsbG9jKFRtcChyZWcpLCByZWcsIGlzRGVmKTsKKyAgICAgICAgICAgICAgICAgICAg
YWxsb2MoVG1wKHJlZyksIHJlZywgcm9sZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfTsKIAotICAgICAgICAgICAgYWxsb2NOYW1lZChtX25hbWVkVXNlZFJlZ3MsIGZhbHNlKTsg
Ly8gTXVzdCBjb21lIGJlZm9yZSB0aGUgZGVmZCByZWdpc3RlcnMgc2luY2Ugd2UgbWF5IHVzZSBh
bmQgZGVmIHRoZSBzYW1lIHJlZ2lzdGVyLgotICAgICAgICAgICAgYWxsb2NOYW1lZChtX25hbWVk
RGVmZFJlZ3MsIHRydWUpOworICAgICAgICAgICAgYXV0byBzcGlsbElmTmVlZGVkID0gWyZdIChj
b25zdCBSZWdpc3RlclNldCYgc2V0KSB7CisgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDog
c2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChUbXAgdG1wID0gbV9jdXJyZW50QWxsb2Nh
dGlvbi0+YXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwaWxsKHRtcCwgcmVnKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBmcmVlRGVh
ZFRtcHNBdEN1cnJlbnRJbnN0KCk7CisKKyAgICAgICAgICAgIHNwaWxsSWZOZWVkZWQobV9lYXJs
eUNsb2JiZXIpOworICAgICAgICAgICAgc3BpbGxJZk5lZWRlZChtX2xhdGVDbG9iYmVyKTsKKwor
ICAgICAgICAgICAgYWxsb2NOYW1lZChtX25hbWVkVXNlZFJlZ3MsIEFyZzo6Um9sZTo6VXNlKTsg
Ly8gTXVzdCBjb21lIGJlZm9yZSB0aGUgZGVmZCByZWdpc3RlcnMgc2luY2Ugd2UgbWF5IHVzZSBh
bmQgZGVmIHRoZSBzYW1lIHJlZ2lzdGVyLgorICAgICAgICAgICAgYWxsb2NOYW1lZChtX25hbWVk
RGVmZFJlZ3MsIEFyZzo6Um9sZTo6RGVmKTsKIAogICAgICAgICAgICAgaWYgKG5lZWRzVG9HZW5l
cmF0ZSkgewogICAgICAgICAgICAgICAgIGF1dG8gdHJ5QWxsb2NhdGUgPSBbJl0gewotICAgICAg
ICAgICAgICAgICAgICBWZWN0b3I8VG1wKiwgOD4gdXNlc1RvQWxsb2M7Ci0gICAgICAgICAgICAg
ICAgICAgIFZlY3RvcjxUbXAqLCA4PiBkZWZzVG9BbGxvYzsKKyAgICAgICAgICAgICAgICAgICAg
VmVjdG9yPHN0ZDo6cGFpcjxUbXAqLCBBcmc6OlJvbGU+LCA4PiB1c2VzVG9BbGxvYzsKKyAgICAg
ICAgICAgICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxUbXAqLCBBcmc6OlJvbGU+LCA4PiBkZWZz
VG9BbGxvYzsKIAogICAgICAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXAoWyZdIChUbXAm
IHRtcCwgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodG1wLmlzUmVnKCkpCkBAIC02NTgsMTUgKzcxOSwxOCBAQCB2b2lkIEdlbmVyYXRl
QW5kQWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVyCiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIHRyZWF0IFVzZStEZWYgYXMgYSB1c2UuCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0FueVVzZShyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VzVG9B
bGxvYy5hcHBlbmQoJnRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlc1RvQWxs
b2MuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKCZ0bXAsIHJvbGUpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmc1RvQWxsb2MuYXBwZW5kKCZ0bXApOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZnNUb0FsbG9jLmFwcGVuZChzdGQ6Om1ha2VfcGFpcigmdG1wLCByb2xlKSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0pOwogCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gdHJ5QWxs
b2NhdGVUbXBzID0gWyZdIChhdXRvJiB2ZWN0b3IsIGJvb2wgaXNEZWYpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byB0cnlBbGxvY2F0ZVRtcHMgPSBbJl0gKGF1dG8mIHZlY3RvcikgewogICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoVG1wKiB0bXAgOiB2ZWN0b3IpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3VjY2VzcyAmPSBhc3NpZ25UbXAoKnRtcCwgdG1wLT5iYW5rKCksIGlzRGVmKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoc3RkOjpwYWlyPFRtcCosIEFyZzo6Um9sZT4gcGFp
ciA6IHZlY3RvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRtcCYgdG1wID0gKnN0
ZDo6Z2V0PDA+KHBhaXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzo6Um9sZSBy
b2xlID0gc3RkOjpnZXQ8MT4ocGFpcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vj
Y2VzcyAmPSBhc3NpZ25UbXAodG1wLCB0bXAuYmFuaygpLCByb2xlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWNjZXNzOwogICAg
ICAgICAgICAgICAgICAgICB9OwogCkBAIC02NzYsOCArNzQwLDggQEAgdm9pZCBHZW5lcmF0ZUFu
ZEFsbG9jYXRlUmVnaXN0ZXJzOjpnZW5lcgogICAgICAgICAgICAgICAgICAgICAvLyBzb21lIHRt
cHMgbWF5IGJvdGggYmUgdXNlZCBhbmQgZGVmZC4gU28gd2UgaGFuZGxlIHVzZXMgZmlyc3Qgc2lu
Y2UgZm9yRWFjaFRtcCBjb3VsZAogICAgICAgICAgICAgICAgICAgICAvLyB3YWxrIHVzZXMvZGVm
cyBpbiBhbnkgb3JkZXIuCiAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgJj0gdHJ5QWxsb2NhdGVUbXBzKHVzZXNUb0Fs
bG9jLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgJj0gdHJ5QWxsb2NhdGVU
bXBzKGRlZnNUb0FsbG9jLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyAmPSB0
cnlBbGxvY2F0ZVRtcHModXNlc1RvQWxsb2MpOworICAgICAgICAgICAgICAgICAgICBzdWNjZXNz
ICY9IHRyeUFsbG9jYXRlVG1wcyhkZWZzVG9BbGxvYyk7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzdWNjZXNzOwogICAgICAgICAgICAgICAgIH07CiAKQEAgLTcyOSw3ICs3OTMsNiBAQCB2
b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVyCiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIGlmIChtX2NvZGUubmVlZHNVc2VkUmVnaXN0ZXJzKCkgJiYgaW5zdC5raW5k
Lm9wY29kZSA9PSBQYXRjaCkgewotICAgICAgICAgICAgICAgIGZyZWVEZWFkVG1wc0lmTmVlZGVk
KCk7CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcmVnaXN0ZXJTZXQ7CiAgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjdXJyZW50QWxsb2NhdGlvbi5zaXplKCk7ICsr
aSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEFsbG9jYXRpb25baV0pCkBAIC03
MzgsMTMgKzgwMSwxMCBAQCB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVy
CiAgICAgICAgICAgICAgICAgaW5zdC5yZXBvcnRVc2VkUmVnaXN0ZXJzKHJlZ2lzdGVyU2V0KTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYXV0byBjbG9iYmVyID0gWyZdIChjb25zdCBS
ZWdpc3RlclNldCYgc2V0KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogc2V0KSB7
Ci0gICAgICAgICAgICAgICAgICAgIFRtcCB0bXAocmVnKTsKLSAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGN1cnJlbnRBbGxvY2F0aW9uW3JlZ10gPT0gdG1wKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9hdmFpbGFibGVSZWdzW3RtcC5iYW5rKCldLnNldChyZWcpOwotICAgICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRBbGxvY2F0aW9uLT5hdChyZWcpID0gVG1wKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fbWFwW3RtcF0ucmVnID0gUmVnKCk7CisgICAgICAgICAgICBhdXRvIGhhbmRsZUNs
b2JiZXIgPSBbJl0geworICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IG1fY2xvYmJlcmVk
VG9DbGVhcikgeworICAgICAgICAgICAgICAgICAgICBpZiAoVG1wIHRtcCA9IG1fY3VycmVudEFs
bG9jYXRpb24tPmF0KHJlZykpCisgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlKHRtcCwg
cmVnKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9OwogCkBAIC03NTQsMTQgKzgx
NCwxMSBAQCB2b2lkIEdlbmVyYXRlQW5kQWxsb2NhdGVSZWdpc3RlcnM6OmdlbmVyCiAgICAgICAg
ICAgICAgICAgICAgIGp1bXAgPSBpbnN0LmdlbmVyYXRlKCptX2ppdCwgY29udGV4dCk7CiAgICAg
ICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChqdW1wLCAhanVtcC5pc1NldCgpKTsKIAotICAgICAg
ICAgICAgICAgIGFsbG9jTmFtZWQoZWFybHlOZXh0Q2xvYmJlcmVkUmVnaXN0ZXJzLCB0cnVlKTsK
LSAgICAgICAgICAgICAgICBjbG9iYmVyZWRSZWdpc3RlcnMubWVyZ2UoZWFybHlOZXh0Q2xvYmJl
cmVkUmVnaXN0ZXJzKTsKLSAgICAgICAgICAgICAgICBjbG9iYmVyKGNsb2JiZXJlZFJlZ2lzdGVy
cyk7CisgICAgICAgICAgICAgICAgaGFuZGxlQ2xvYmJlcigpOwogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICBBU1NFUlQobmVlZHNUb0dlbmVyYXRlKTsKIAotICAgICAgICAg
ICAgICAgIGNsb2JiZXIoY2xvYmJlcmVkUmVnaXN0ZXJzKTsKLSAgICAgICAgICAgICAgICBBU1NF
UlQoZWFybHlOZXh0Q2xvYmJlcmVkUmVnaXN0ZXJzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAg
ICAgaGFuZGxlQ2xvYmJlcigpOwogCiAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5udW1TdWNj
ZXNzb3JzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gQnkgZGVmYXVsdCwgd2Ugc3BpbGwg
ZXZlcnl0aGluZyBiZXR3ZWVuIGJsb2NrIGJvdW5kYXJpZXMuIEhvd2V2ZXIsIHdlIGhhdmUgYSBz
bWFsbApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lz
dGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVD
b2RlLmgJKHJldmlzaW9uIDI5MzkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0FuZEdlbmVyYXRlQ29kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OSw5ICs1OSwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVsZWFzZShUbXAsIFJl
Zyk7CiAgICAgdm9pZCBmbHVzaChUbXAsIFJlZyk7CiAgICAgdm9pZCBzcGlsbChUbXAsIFJlZyk7
Ci0gICAgdm9pZCBhbGxvYyhUbXAsIFJlZywgYm9vbCBpc0RlZik7Ci0gICAgdm9pZCBmcmVlRGVh
ZFRtcHNJZk5lZWRlZCgpOwotICAgIGJvb2wgYXNzaWduVG1wKFRtcCYsIEJhbmssIGJvb2wgaXNE
ZWYpOworICAgIHZvaWQgYWxsb2MoVG1wLCBSZWcsIEFyZzo6Um9sZSk7CisgICAgdm9pZCBmcmVl
RGVhZFRtcHNBdEN1cnJlbnRJbnN0KCk7CisgICAgdm9pZCBmcmVlRGVhZFRtcHNBdEN1cnJlbnRC
bG9jaygpOworICAgIGJvb2wgYXNzaWduVG1wKFRtcCYsIEJhbmssIEFyZzo6Um9sZSk7CiAgICAg
dm9pZCBidWlsZExpdmVSYW5nZXMoVW5pZmllZFRtcExpdmVuZXNzJik7CiAgICAgYm9vbCBpc0Rp
c2FsbG93ZWRSZWdpc3RlcihSZWcpOwogCkBAIC04MCwxMCArODEsMTMgQEAgcHJpdmF0ZToKICAg
ICBSZWdpc3RlclNldCBtX2F2YWlsYWJsZVJlZ3NbbnVtQmFua3NdOwogICAgIHNpemVfdCBtX2ds
b2JhbEluc3RJbmRleDsKICAgICBJbmRleE1hcDxSZWcsIFRtcD4qIG1fY3VycmVudEFsbG9jYXRp
b24geyBudWxscHRyIH07Ci0gICAgYm9vbCBtX2RpZEFscmVhZHlGcmVlRGVhZFNsb3RzOwogICAg
IFRtcE1hcDxzaXplX3Q+IG1fbGl2ZVJhbmdlRW5kOworICAgIEhhc2hNYXA8c2l6ZV90LCBWZWN0
b3I8VG1wLCAyPj4gbV90bXBzVG9SZWxlYXNlOwogICAgIFJlZ2lzdGVyU2V0IG1fbmFtZWRVc2Vk
UmVnczsKICAgICBSZWdpc3RlclNldCBtX25hbWVkRGVmZFJlZ3M7CisgICAgUmVnaXN0ZXJTZXQg
bV9lYXJseUNsb2JiZXI7CisgICAgUmVnaXN0ZXJTZXQgbV9sYXRlQ2xvYmJlcjsKKyAgICBSZWdp
c3RlclNldCBtX2Nsb2JiZXJlZFRvQ2xlYXI7CiAgICAgUmVnaXN0ZXJTZXQgbV9hbGxvd2VkUmVn
aXN0ZXJzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxVbmlmaWVkVG1wTGl2ZW5lc3M+IG1fbGl2ZW5l
c3M7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAkocmV2
aXNpb24gMjkzOTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjM5Miw2ICsyMzkyLDEyNCBAQCB2b2lkIHRlc3RaRGVmT2ZT
cGlsbFNsb3RXaXRoT2Zmc2V0TmVlZGluCiAgICAgQ0hFQ0socmVzdWx0ID09IHN0YXRpY19jYXN0
PGludDMyX3Q+KG51bWJlck9mU2xvdHMpKTsKIH0KIAordm9pZCB0ZXN0RWFybHlBbmRMYXRlVXNl
T2ZTYW1lVG1wKCkKK3sKKyAgICBXZWFrUmFuZG9tIHdlYWtSYW5kb207CisgICAgc2l6ZV90IG51
bVRtcHMgPSBSZWdpc3RlclNldDo6YWxsR1BScygpLm51bWJlck9mU2V0UmVnaXN0ZXJzKCk7Cisg
ICAgaW50NjRfdCBleHBlY3RlZFJlc3VsdCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBudW1UbXBzOyArK2kpCisgICAgICAgIGV4cGVjdGVkUmVzdWx0ICs9IGk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGogPSAwOyBqIDwgNjA7ICsraikgeworICAgICAgICBCMzo6UHJvY2VkdXJlIHBy
b2M7CisgICAgICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgICAgICBCMzo6QWly
OjpTcGVjaWFsKiBwYXRjaHBvaW50U3BlY2lhbCA9IGNvZGUuYWRkU3BlY2lhbChtYWtlVW5pcXVl
PEIzOjpQYXRjaHBvaW50U3BlY2lhbD4oKSk7CisKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9
IGNvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgVmVjdG9yPFRtcD4gdG1wczsKKyAgICAgICAgVG1w
IHJlc3VsdCA9IGNvZGUubmV3VG1wKEIzOjpHUCk7CisgICAgICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBBcmc6OmltbSgwKSwgcmVzdWx0KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBudW1UbXBzOyArK2kpIHsKKyAgICAgICAgICAgIFRtcCB0bXAgPSBjb2RlLm5ld1Rt
cChCMzo6R1ApOworICAgICAgICAgICAgdG1wcy5hcHBlbmQodG1wKTsKKyAgICAgICAgICAgIHJv
b3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbShpKSwgdG1wKTsKKyAgICAgICAgfQor
CisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJhbmQgPSB3ZWFrUmFuZG9tLmdldFVp
bnQzMih0bXBzLnNpemUoKSk7CisgICAgICAgICAgICBCMzo6VmFsdWUqIGR1bW15VmFsdWUgPSBw
cm9jLmFkZENvbnN0YW50KEIzOjpPcmlnaW4oKSwgQjM6OkludDY0LCAwKTsKKworICAgICAgICAg
ICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IHByb2MuYWRkPEIzOjpQYXRjaHBv
aW50VmFsdWU+KEIzOjpWb2lkLCBCMzo6T3JpZ2luKCkpOworICAgICAgICAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kKGR1bW15VmFsdWUsIEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChkdW1teVZhbHVlLCBCMzo6VmFsdWVSZXA6OlNvbWVM
YXRlUmVnaXN0ZXIpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0
ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCkpOworICAgICAgICAgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKS5nZXQocGFy
YW1zWzFdLmdwcigpKSk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGdvb2QgPSBqaXQuYnJhbmNo
NjQoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgcGFyYW1zWzFdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihyYW5kKSk7CisgICAgICAgICAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAg
ICAgICAgICAgICAgICBnb29kLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGdv
b2QyID0gaml0LmJyYW5jaDY0KENDYWxsSGVscGVyczo6RXF1YWwsIHBhcmFtc1swXS5ncHIoKSwg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmFuZCkpOworICAgICAgICAgICAgICAgIGppdC5i
cmVha3BvaW50KCk7CisgICAgICAgICAgICAgICAgZ29vZDIubGluaygmaml0KTsKKyAgICAgICAg
ICAgIH0pOworCisgICAgICAgICAgICBJbnN0IGluc3QoUGF0Y2gsIHBhdGNocG9pbnQsIEFyZzo6
c3BlY2lhbChwYXRjaHBvaW50U3BlY2lhbCkpOworCisgICAgICAgICAgICBUbXAgdG1wID0gdG1w
c1tyYW5kXTsKKyAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQodG1wKTsKKyAgICAgICAgICAg
IGluc3QuYXJncy5hcHBlbmQodG1wKTsKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZChpbnN0KTsK
KyAgICAgICAgfQorCisgICAgICAgIGZvciAoVG1wIHRtcCA6IHRtcHMpCisgICAgICAgICAgICBy
b290LT5hcHBlbmQoQWRkNjQsIG51bGxwdHIsIHRtcCwgcmVzdWx0KTsKKyAgICAgICAgcm9vdC0+
YXBwZW5kKE1vdmUsIG51bGxwdHIsIHJlc3VsdCwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KSk7CisgICAgICAgIHJvb3QtPmFwcGVuZChSZXQ2NCwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKSk7CisKKyAgICAgICAgaW50NjRfdCBhY3R1YWxSZXN1bHQgPSBjb21waWxl
QW5kUnVuPGludDY0X3Q+KHByb2MpOworICAgICAgICBDSEVDSyhhY3R1YWxSZXN1bHQgPT0gZXhw
ZWN0ZWRSZXN1bHQpOworICAgIH0KK30KKwordm9pZCB0ZXN0RWFybHlDbG9iYmVySW50ZXJmZXJl
bmNlKCkKK3sKKyAgICBXZWFrUmFuZG9tIHdlYWtSYW5kb207CisgICAgc2l6ZV90IG51bVRtcHMg
PSBSZWdpc3RlclNldDo6YWxsR1BScygpLm51bWJlck9mU2V0UmVnaXN0ZXJzKCk7CisgICAgaW50
NjRfdCBleHBlY3RlZFJlc3VsdCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1U
bXBzOyArK2kpCisgICAgICAgIGV4cGVjdGVkUmVzdWx0ICs9IGk7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGogPSAwOyBqIDwgMTAwOyArK2opIHsKKyAgICAgICAgQjM6OlByb2NlZHVyZSBwcm9jOwor
ICAgICAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICAgICAgQjM6OkFpcjo6U3Bl
Y2lhbCogcGF0Y2hwb2ludFNwZWNpYWwgPSBjb2RlLmFkZFNwZWNpYWwobWFrZVVuaXF1ZTxCMzo6
UGF0Y2hwb2ludFNwZWNpYWw+KCkpOworCisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2Rl
LmFkZEJsb2NrKCk7CisgICAgICAgIFZlY3RvcjxUbXA+IHRtcHM7CisgICAgICAgIFRtcCByZXN1
bHQgPSBjb2RlLm5ld1RtcChCMzo6R1ApOworICAgICAgICByb290LT5hcHBlbmQoTW92ZSwgbnVs
bHB0ciwgQXJnOjppbW0oMCksIHJlc3VsdCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbnVtVG1wczsgKytpKSB7CisgICAgICAgICAgICBUbXAgdG1wID0gY29kZS5uZXdUbXAoQjM6
OkdQKTsKKyAgICAgICAgICAgIHRtcHMuYXBwZW5kKHRtcCk7CisgICAgICAgICAgICByb290LT5h
cHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oaSksIHRtcCk7CisgICAgICAgIH0KKworICAg
ICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCByYW5kID0gd2Vha1JhbmRvbS5nZXRVaW50MzIo
dG1wcy5zaXplKCkpOworICAgICAgICAgICAgQjM6OlZhbHVlKiBkdW1teVZhbHVlID0gcHJvYy5h
ZGRDb25zdGFudChCMzo6T3JpZ2luKCksIEIzOjpJbnQ2NCwgMCk7CisKKyAgICAgICAgICAgIEIz
OjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBwcm9jLmFkZDxCMzo6UGF0Y2hwb2ludFZh
bHVlPihCMzo6Vm9pZCwgQjM6Ok9yaWdpbigpKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFw
cGVuZChkdW1teVZhbHVlLCBCMzo6VmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgICAgICAg
ICBwYXRjaHBvaW50LT5jbG9iYmVyRWFybHkoUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJz
Rm9ySlNDYWxsKCkpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtcykgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFSZWdpc3RlclNldDo6dm9s
YXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKS5nZXQocGFyYW1zWzBdLmdwcigpKSk7CisKKyAgICAg
ICAgICAgICAgICBhdXRvIGdvb2QgPSBqaXQuYnJhbmNoNjQoQ0NhbGxIZWxwZXJzOjpFcXVhbCwg
cGFyYW1zWzBdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihyYW5kKSk7CisgICAg
ICAgICAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICAgICAgICAgICAgICBnb29kLmxpbmso
JmppdCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgSW5zdCBpbnN0KFBhdGNoLCBw
YXRjaHBvaW50LCBBcmc6OnNwZWNpYWwocGF0Y2hwb2ludFNwZWNpYWwpKTsKKworICAgICAgICAg
ICAgVG1wIHRtcCA9IHRtcHNbcmFuZF07CisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRt
cCk7CisgICAgICAgICAgICByb290LT5hcHBlbmQoaW5zdCk7CisgICAgICAgIH0KKworICAgICAg
ICBmb3IgKFRtcCB0bXAgOiB0bXBzKQorICAgICAgICAgICAgcm9vdC0+YXBwZW5kKEFkZDY0LCBu
dWxscHRyLCB0bXAsIHJlc3VsdCk7CisgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCByZXN1bHQsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgICAgICByb290LT5h
cHBlbmQoUmV0NjQsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisg
ICAgICAgIGludDY0X3QgYWN0dWFsUmVzdWx0ID0gY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9j
KTsKKyAgICAgICAgQ0hFQ0soYWN0dWFsUmVzdWx0ID09IGV4cGVjdGVkUmVzdWx0KTsKKyAgICB9
Cit9CisKICNkZWZpbmUgUFJFRklYICJPIiwgT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSwg
IjogIgogCiAjZGVmaW5lIFJVTih0ZXN0KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXApAQCAtMjQ4OSw2ICsyNjA3LDkgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVy
KQogCiAgICAgUlVOKHRlc3RaRGVmT2ZTcGlsbFNsb3RXaXRoT2Zmc2V0TmVlZGluZ1RvQmVNYXRl
cmlhbGl6ZWRJbkFSZWdpc3RlcigpKTsKIAorICAgIFJVTih0ZXN0RWFybHlBbmRMYXRlVXNlT2ZT
YW1lVG1wKCkpOworICAgIFJVTih0ZXN0RWFybHlDbG9iYmVySW50ZXJmZXJlbmNlKCkpOworCiAg
ICAgaWYgKHRhc2tzLmlzRW1wdHkoKSkKICAgICAgICAgdXNhZ2UoKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkocmV2aXNpb24gMjkzOTM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MCw3ICs2MCw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgc3RhdGlj
IFJlZ2lzdGVyU2V0IHdlYkFzc2VtYmx5Q2FsbGVlU2F2ZVJlZ2lzdGVycygpOyAvLyBSZWdpc3Rl
cnMgc2F2ZWQgYW5kIHVzZWQgYnkgdGhlIFdlYkFzc2VtYmx5IEpJVC4KICNlbmRpZgotICAgIHN0
YXRpYyBSZWdpc3RlclNldCB2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBSZWdpc3RlclNldCB2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2Fs
bCgpOwogICAgIHN0YXRpYyBSZWdpc3RlclNldCBzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsg
Ly8gVGhlIHVuaW9uIG9mIGNhbGxlZSBzYXZlcyBhbmQgc3BlY2lhbCByZWdpc3RlcnMuCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZ2lzdGVyU2V0IG1hY3JvU2NyYXRjaFJlZ2lzdGVy
cygpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWdpc3RlclNldCBhbGxHUFJzKCk7
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>