<?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>165739</bug_id>
          
          <creation_ts>2016-12-10 17:06:30 -0800</creation_ts>
          <short_desc>REGRESSION(r209653): speedometer crashes (Requested by pizlo on #webkit).</short_desc>
          <delta_ts>2016-12-10 17:15:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>160355</blocked>
    
    <blocked>165728</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>msaboff</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1258789</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-10 17:06:30 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/209653 broke the build:
speedometer crashes (Requested by pizlo on #webkit).

This is an automatic bug report generated by webkitbot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258792</commentid>
    <comment_count>1</comment_count>
      <attachid>296832</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-10 17:07:23 -0800</bug_when>
    <thetext>Created attachment 296832
ROLLOUT of r209653

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258793</commentid>
    <comment_count>2</comment_count>
      <attachid>296832</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-10 17:15:10 -0800</bug_when>
    <thetext>Comment on attachment 296832
ROLLOUT of r209653

Clearing flags on attachment: 296832

Committed r209678: &lt;http://trac.webkit.org/changeset/209678&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258794</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-10 17:15:14 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296832</attachid>
            <date>2016-12-10 17:07:23 -0800</date>
            <delta_ts>2016-12-10 17:15:10 -0800</delta_ts>
            <desc>ROLLOUT of r209653</desc>
            <filename>bug-165739-20161210200638.patch</filename>
            <type>text/plain</type>
            <size>349361</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA5Njc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
YTg0ZTk2ZjJlZTFlYmI2OWQwMzgyNGRkNWM1OTcyMWNhYmMwMDZiLi5kMWFkMDQwN2NkMmE2Nzkw
ZDU3MjA1NmRhMDZhNjQyMDU2ZTg1YThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOCBAQAorMjAxNi0xMi0xMCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIwOTY1MywgcjIwOTY1
NCwgcjIwOTY2MywgYW5kCisgICAgICAgIHIyMDk2NzMuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3MzkKKworICAgICAgICBzcGVlZG9tZXRlciBj
cmFzaGVzIChSZXF1ZXN0ZWQgYnkgcGl6bG8gb24gI3dlYmtpdCkuCisKKyAgICAgICAgUmV2ZXJ0
ZWQgY2hhbmdlc2V0czoKKworICAgICAgICAiSlNWQUxVRTY0OiBQYXNzIGFyZ3VtZW50cyBpbiBw
bGF0Zm9ybSBhcmd1bWVudCByZWdpc3RlcnMgd2hlbgorICAgICAgICBtYWtpbmcgSmF2YVNjcmlw
dCBjYWxscyIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2MDM1NQorICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8yMDk2NTMK
KworICAgICAgICAiVW5yZXZpZXdlZCBidWlsZCBmaXggZm9yIDMyIGJpdCBidWlsZHMuIgorICAg
ICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8yMDk2NTQKKworICAgICAgICAi
VW5yZXZpZXdlZCBidWlsZCBmaXggZm9yIHRoZSBDTE9PUCBhZnRlciByMjA5NjUzIgorICAgICAg
ICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8yMDk2NjMKKworICAgICAgICAiUkVH
UkVTU0lPTihyMjA5NjUzKSBDcmFzaCBpbiBDYWxsRnJhbWVTaHVmZmxlcjo6c25hcHNob3QoKSIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTcyOAor
ICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8yMDk2NzMKKwogMjAxNi0x
Mi0xMCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdS
RVNTSU9OKHIyMDk2NTMpIENyYXNoIGluIENhbGxGcmFtZVNodWZmbGVyOjpzbmFwc2hvdCgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmlu
ZGV4IGRlNzg0YTc5YmRjMmU2NDc0NDFiZmFjNzBhNzc5ODk5Mjk2MjJlZTAuLjViZjZkYmFiYzI2
YmRjMDhmNjIxMDdhM2QwNzAxOTZhZDU1NjU3YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTYt
MTItMTAgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgorCisgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMDk2NTMsIHIyMDk2NTQsIHIyMDk2NjMsIGFuZAor
ICAgICAgICByMjA5NjczLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY1NzM5CisKKyAgICAgICAgc3BlZWRvbWV0ZXIgY3Jhc2hlcyAoUmVxdWVzdGVk
IGJ5IHBpemxvIG9uICN3ZWJraXQpLgorCisgICAgICAgIFJldmVydGVkIGNoYW5nZXNldHM6CisK
KyAgICAgICAgIkpTVkFMVUU2NDogUGFzcyBhcmd1bWVudHMgaW4gcGxhdGZvcm0gYXJndW1lbnQg
cmVnaXN0ZXJzIHdoZW4KKyAgICAgICAgbWFraW5nIEphdmFTY3JpcHQgY2FsbHMiCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjAzNTUKKyAgICAgICAg
aHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjA5NjUzCisKKyAgICAgICAgIlVucmV2
aWV3ZWQgYnVpbGQgZml4IGZvciAzMiBiaXQgYnVpbGRzLiIKKyAgICAgICAgaHR0cDovL3RyYWMu
d2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjA5NjU0CisKKyAgICAgICAgIlVucmV2aWV3ZWQgYnVpbGQg
Zml4IGZvciB0aGUgQ0xPT1AgYWZ0ZXIgcjIwOTY1MyIKKyAgICAgICAgaHR0cDovL3RyYWMud2Vi
a2l0Lm9yZy9jaGFuZ2VzZXQvMjA5NjYzCisKKyAgICAgICAgIlJFR1JFU1NJT04ocjIwOTY1Mykg
Q3Jhc2ggaW4gQ2FsbEZyYW1lU2h1ZmZsZXI6OnNuYXBzaG90KCkiCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3MjgKKyAgICAgICAgaHR0cDovL3Ry
YWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjA5NjczCisKIDIwMTYtMTItMTAgIENocmlzIER1bWV6
ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBdm9pZCBjYWxsaW5nIHNocmluaygpIGlu
IHRoZSBWZWN0b3IgZGVzdHJ1Y3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1
NTBjMTE3YmRiMDA3NWIzMDM4OGRlZGVmYjFhYzc3NTA4N2VlZmQ3Li45ODJiZmY3NWVjYTU4NGRl
MDIzMDM1ZjQ2YzE3MDA2MzU1MWExNjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMTM1MCw3ICsxMzUwLDYgQEAKIAkJNjVDMDI4NTAxNzE3OTVFMjAwMzUxRTM1IC8qIEFSTXY3
RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDY1QzAyODRGMTcxNzk1RTIwMDM1MUUzNSAvKiBBUk12N0Rpc2Fzc2VtYmxlci5jcHAg
Ki87IH07CiAJCTY1QzAyODVDMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVDMDI4NUExNzE3
OTY2ODAwMzUxRTM1IC8qIEFSTXY3RE9wY29kZS5jcHAgKi87IH07CiAJCTY1QzAyODVEMTcxNzk2
NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDY1QzAyODVCMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNv
ZGUuaCAqLzsgfTsKLQkJNjVEQkYzMDIxRDkzMzkyQjAwM0FGNEIwIC8qIEpJVEVudHJ5UG9pbnRz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTAzMDBG
MjFDNTAyNzQ2MDBENzg2RDcgLyogSklURW50cnlQb2ludHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2NUZCNTExNzE4NEVFRTcwMDBDMTJCNzAg
LyogUHJvdG9DYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjVGQjUxMTYxODRFRTlCQzAwQzEyQjcwIC8qIFByb3RvQ2FsbEZyYW1lLmNw
cCAqLzsgfTsKIAkJNjVGQjYzQTQxQzhFQTA5QzAwMjA3MTlCIC8qIFlhcnJDYW5vbmljYWxpemVV
bmljb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDY1QTk0NjE0MUM4RTlGNkYwMEE3MjA5QSAvKiBZYXJyQ2Fub25pY2FsaXplVW5pY29kZS5jcHAg
Ki87IH07CiAJCTZBRDJDQjREMTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QUQyQ0I0
QzE5QjkxNDAxMDAwNjU3MTkgLyogRGVidWdnZXJFdmFsRW5hYmxlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNzIxLDcgKzM3MjAsNiBAQAog
CQk2MkUzRDVFRjFCOEQwQjczMDBCODY4QkIgLyogRGF0YUZvcm1hdC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRhRm9ybWF0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNjJFQzlCQjQxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZm
bGVEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxGcmFt
ZVNodWZmbGVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjJFQzlCQjUx
QjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRhLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxGcmFtZVNodWZmbGVEYXRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTY1MDMwMEYyMUM1MDI3NDYwMEQ3ODZENyAvKiBKSVRFbnRyeVBvaW50
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRFbnRyeVBvaW50cy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTA3RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyog
SlNUeXBlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVJbmZv
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1MTEyMkU1MTQwNDY5QkEwMDJCMTAx
RCAvKiB0ZXN0UmVnRXhwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IHRlc3RSZWdFeHAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTExMjMwNTE0
MDQ2QTRDMDAyQjEwMUQgLyogdGVzdFJlZ0V4cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVk
ZUluSW5kZXggPSAwOyBwYXRoID0gdGVzdFJlZ0V4cDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKQEAgLTU1NjAsNyArNTU1OCw2IEBACiAJCQkJMEZBRjdFRkIxNjVCQTkxOTAw
MEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oICovLAogCQkJCUZFMTg3QTBBMUMwMjI5MjMwMDM4
QkJDQSAvKiBKSVREaXZHZW5lcmF0b3IuY3BwICovLAogCQkJCUZFMTg3QTBCMUMwMjI5MjMwMDM4
QkJDQSAvKiBKSVREaXZHZW5lcmF0b3IuaCAqLywKLQkJCQk2NTAzMDBGMjFDNTAyNzQ2MDBENzg2
RDcgLyogSklURW50cnlQb2ludHMuaCAqLywKIAkJCQkwRjQ2ODA3RjE0QkE1NzI3MDBCRkUyNzIg
LyogSklURXhjZXB0aW9ucy5jcHAgKi8sCiAJCQkJMEY0NjgwODAxNEJBNTcyNzAwQkZFMjcyIC8q
IEpJVEV4Y2VwdGlvbnMuaCAqLywKIAkJCQkwRkIxNEUxQzE4MTI0QUNFMDA5QjZCNEQgLyogSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwICovLApAQCAtNzcxNyw3ICs3NzE0LDYgQEAKIAkJCQk3
OUIwMENCRDFDNkFCMDdFMDA4OEM2NUQgLyogUHJveHlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTNENDQ0REMxREFGMDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTkwREE2N0YxQzhFMzE2QTAwMjk1MTU5IC8qIGdlbmVyYXRl
X29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFk
ZXJzICovLAotCQkJCTY1REJGMzAyMUQ5MzM5MkIwMDNBRjRCMCAvKiBKSVRFbnRyeVBvaW50cy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJREMxN0U4MTkxQzlDOTFEQjAwOEE2QUIzIC8qIFNoYWRvd0No
aWNrZW5JbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlEQzE3RTgxODFDOUM5MUQ5MDA4QTZB
QjMgLyogU2hhZG93Q2hpY2tlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzk5RUY3QzQxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgKaW5kZXggYzQ5NjNiMzdhMDIw
ZDcxNzQ5ZDliMjRlYjI2N2UxZDVkODQ4NmFmZC4uNTViMzY1ZmMyYTU3YzUzZjQ2ZGY3NjhhMDJk
MTlhZjljYWZjZDIzMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJn
dW1lbnRSZWdWYWx1ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50
UmVnVmFsdWUuaApAQCAtNTUsMTMgKzU1LDYgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKHJl
Zy5pc1NldCgpKTsKICAgICB9CiAKLSAgICBBcmd1bWVudFJlZ1ZhbHVlKE9yaWdpbiBvcmlnaW4s
IFJlZyByZWcsIFR5cGUgdHlwZSkKLSAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBBcmd1
bWVudFJlZywgdHlwZSwgb3JpZ2luKQotICAgICAgICAsIG1fcmVnKHJlZykKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChyZWcuaXNTZXQoKSk7Ci0gICAgfQotCiAgICAgUmVnIG1fcmVnOwogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCmluZGV4IGY5OWRhNWIwZjVkZTc2
MmIzMWRiMGY1NTAyZjJhNDVlYzg4OGI5NmQuLmY3MjI0Y2YyN2RiMTk0ZDcyODgzZDhlMmI3ZmMy
OGI1MTBlNmM4MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlk
YXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKQEAg
LTE4MiwxMiArMTgyLDkgQEAgcHVibGljOgogICAgICAgICAgICAgY2FzZSBBcmd1bWVudFJlZzoK
ICAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5oYXNFeHRyYUJpdHMoKSwg
KCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPm51bUNo
aWxkcmVuKCksICgiQXQgIiwgKnZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3MTcKLSAgICAgICAgICAg
ICAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSBJbnQzMiBhcmd1bWVudHMgYW5kIEludDY0IGFyZ3Vt
ZW50cwotICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgc2FtZSByZWdpc3RlciBkaXN0aW5jdGx5
LgotICAgICAgICAgICAgICAgIFZBTElEQVRFKCh2YWx1ZS0+YXM8QXJndW1lbnRSZWdWYWx1ZT4o
KS0+YXJndW1lbnRSZWcoKS5pc0dQUigpCi0gICAgICAgICAgICAgICAgICAgID8gKHZhbHVlLT50
eXBlKCkgPT0gcG9pbnRlclR5cGUoKSB8fCB2YWx1ZS0+dHlwZSgpID09IEludDMyKQotICAgICAg
ICAgICAgICAgICAgICA6IHZhbHVlLT50eXBlKCkgPT0gRG91YmxlKSwgKCJBdCAiLCAqdmFsdWUp
KTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSgKKyAgICAgICAgICAgICAgICAgICAgKHZhbHVl
LT5hczxBcmd1bWVudFJlZ1ZhbHVlPigpLT5hcmd1bWVudFJlZygpLmlzR1BSKCkgPyBwb2ludGVy
VHlwZSgpIDogRG91YmxlKQorICAgICAgICAgICAgICAgICAgICA9PSB2YWx1ZS0+dHlwZSgpLCAo
IkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBBZGQ6CiAgICAgICAgICAgICBjYXNlIFN1YjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKaW5kZXggMDMwYTk3ZThjMWZmMGZlZWRlMDRlZDRh
NmVmMGQwZDExNDk5NWQ1Yy4uN2ZmZGEwNWY0Y2FjZTJkMWQzOWNiMjg0ZGE1ODYyYmJmNzMyOWEx
YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5m
by5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5j
cHAKQEAgLTYwLDcgKzYwLDYgQEAgQ2FsbExpbmtJbmZvOjpDYWxsTGlua0luZm8oKQogICAgICwg
bV9oYXNTZWVuQ2xvc3VyZShmYWxzZSkKICAgICAsIG1fY2xlYXJlZEJ5R0MoZmFsc2UpCiAgICAg
LCBtX2FsbG93U3R1YnModHJ1ZSkKLSAgICAsIG1fYXJndW1lbnRzTG9jYXRpb24oc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEFyZ3VtZW50c0xvY2F0aW9uOjpTdGFja0FyZ3MpKQogICAgICwgbV9pc0xp
bmtlZChmYWxzZSkKICAgICAsIG1fY2FsbFR5cGUoTm9uZSkKICAgICAsIG1fY2FsbGVlR1BSKDI1
NSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0lu
Zm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAppbmRl
eCAwYzk2NDFkMDBlYTM2MjkzNjNkZDA3ZTgwZDdiZWVhODVlNTM4ZjMyLi4wYTkxMDIwMTM4MjA2
MGJhYjFlMjJmZDEwNWVmNmY3MjNiMWQ3OWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiQ2Fs
bE1vZGUuaCIKICNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJDb2RlU3BlY2lh
bGl6YXRpb25LaW5kLmgiCi0jaW5jbHVkZSAiSklURW50cnlQb2ludHMuaCIKICNpbmNsdWRlICJQ
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgog
I2luY2x1ZGUgPHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaD4KQEAgLTE1OCwxMiArMTU3LDkgQEAg
cHVibGljOgogICAgIGJvb2wgaXNMaW5rZWQoKSB7IHJldHVybiBtX3N0dWIgfHwgbV9jYWxsZWVP
ckNvZGVCbG9jazsgfQogICAgIHZvaWQgdW5saW5rKFZNJik7CiAKLSAgICB2b2lkIHNldFVwQ2Fs
bChDYWxsVHlwZSBjYWxsVHlwZSwgQXJndW1lbnRzTG9jYXRpb24gYXJndW1lbnRzTG9jYXRpb24s
IENvZGVPcmlnaW4gY29kZU9yaWdpbiwgdW5zaWduZWQgY2FsbGVlR1BSKQorICAgIHZvaWQgc2V0
VXBDYWxsKENhbGxUeXBlIGNhbGxUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIHVuc2lnbmVk
IGNhbGxlZUdQUikKICAgICB7Ci0gICAgICAgIEFTU0VSVCghaXNWYXJhcmdzQ2FsbFR5cGUoY2Fs
bFR5cGUpIHx8IChhcmd1bWVudHNMb2NhdGlvbiA9PSBTdGFja0FyZ3MpKTsKLQogICAgICAgICBt
X2NhbGxUeXBlID0gY2FsbFR5cGU7Ci0gICAgICAgIG1fYXJndW1lbnRzTG9jYXRpb24gPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oYXJndW1lbnRzTG9jYXRpb24pOwogICAgICAgICBtX2NvZGVPcmln
aW4gPSBjb2RlT3JpZ2luOwogICAgICAgICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9
CkBAIC0yNzksMTYgKzI3NSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PENhbGxUeXBlPihtX2NhbGxUeXBlKTsKICAgICB9CiAKLSAgICBBcmd1bWVudHNMb2NhdGlvbiBh
cmd1bWVudHNMb2NhdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXJn
dW1lbnRzTG9jYXRpb24+KG1fYXJndW1lbnRzTG9jYXRpb24pOwotICAgIH0KLQotICAgIGJvb2wg
YXJndW1lbnRzSW5SZWdpc3RlcnMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRz
TG9jYXRpb24gIT0gU3RhY2tBcmdzOwotICAgIH0KLQogICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZN
YXhOdW1Bcmd1bWVudHMoKQogICAgIHsKICAgICAgICAgcmV0dXJuICZtX21heE51bUFyZ3VtZW50
czsKQEAgLTM1Myw3ICszMzksNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNTZWVuQ2xvc3Vy
ZSA6IDE7CiAgICAgYm9vbCBtX2NsZWFyZWRCeUdDIDogMTsKICAgICBib29sIG1fYWxsb3dTdHVi
cyA6IDE7Ci0gICAgdW5zaWduZWQgbV9hcmd1bWVudHNMb2NhdGlvbiA6IDQ7CiAgICAgYm9vbCBt
X2lzTGlua2VkIDogMTsKICAgICB1bnNpZ25lZCBtX2NhbGxUeXBlIDogNDsgLy8gQ2FsbFR5cGUK
ICAgICB1bnNpZ25lZCBtX2NhbGxlZUdQUiA6IDg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAppbmRleCBmYjUxYTVmZmQ5ZmYw
MGViMGY1MWJmYTZkOTA0MDg4NGIzYTJhNWI0Li5lNmM3NDI3OGU1MjU2MGJjY2U5ZDUxNWJhOGIz
NjQ5ODBkYWJkOTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKQEAgLTEwMzIsNyArMTAzMiw3IEBAIHZvaWQgQWNjZXNz
Q2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgICAg
ICAgICBtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8tPmRpc2FsbG93U3R1YnMoKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLT5zZXRVcENhbGwoCi0g
ICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvOjpDYWxsLCBTdGFja0FyZ3MsIHN0dWJJbmZvLmNv
ZGVPcmlnaW4sIGxvYWRlZFZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBDYWxsTGlua0luZm86
OkNhbGwsIHN0dWJJbmZvLmNvZGVPcmlnaW4sIGxvYWRlZFZhbHVlR1BSKTsKIAogICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOwogCkBAIC0xMTA1LDcgKzExMDUsNyBAQCB2
b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRl
KQogICAgICAgICAgICAgLy8gV2UgKmFsd2F5cyoga25vdyB0aGF0IHRoZSBnZXR0ZXIvc2V0dGVy
LCBpZiBub24tbnVsbCwgaXMgYSBjZWxsLgogICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKICNl
bmRpZgotICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1f
cmFyZURhdGEtPmNhbGxMaW5rSW5mby5nZXQoKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAg
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fcmFyZURhdGEt
PmNhbGxMaW5rSW5mby5nZXQoKSksIEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgICAgIHNsb3dQ
YXRoQ2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0
ZXIpCiAgICAgICAgICAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOwpAQCAtMTEz
MSw3ICsxMTMxLDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJh
dGlvblN0YXRlJiBzdGF0ZSkKIAogICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmso
CiAgICAgICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRKSVRDYWxsVGh1bmtFbnRyeVN0dWIobGlu
a0NhbGxUaHVua0dlbmVyYXRvcikuZW50cnlGb3IoU3RhY2tBcmdzKSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5r
R2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQ3VzdG9tVmFsdWVHZXR0ZXIgfHwgbV90
eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21WYWx1ZVNldHRl
ciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JTZXR0ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCmlu
ZGV4IDcwZjUyNWJlYjRhYWY5NDJkM2E0Y2ZiZjQzZTc0ZTUwNjk0MjVkOTcuLjI3OTFhZWE4MjVj
OTY3M2U3NDIxMjhjZjIxOTIyZjdjYjFjYjc2Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTI3
MSwxNyArMjcxLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgLy8gbm9uLWNs
ZWFyIHZhbHVlLgogICAgICAgICBBU1NFUlQoIW1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChu
b2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOwogICAgICAgICBicmVhazsKLQotICAgIGNhc2UgR2V0
QXJndW1lbnRSZWdpc3RlcjoKLSAgICAgICAgQVNTRVJUKCFtX3N0YXRlLnZhcmlhYmxlcygpLm9w
ZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKLSAgICAgICAgaWYgKG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpLT5mbHVzaEZvcm1hdCgpID09IEZsdXNoZWRKU1ZhbHVlKSB7Ci0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VCeXRlY29kZVRvcCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwg
dHlwZUZpbHRlckZvcihub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSkp
OwotICAgICAgICBicmVhazsKLQorICAgICAgICAKICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAg
IGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAgICAgLy8gRklYTUU6IEZvcndhcmRWYXJhcmdz
IHNob3VsZCBjaGVjayBpZiB0aGUgY291bnQgYmVjb21lcyBrbm93biwgYW5kIGlmIGl0IGRvZXMs
IGl0IHNob3VsZCB0dXJuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCmluZGV4IDM5NDgzNWFmN2M3MTE2Y2EwOGQ2YjhhYTYxY2FjN2FhNTViNWI3
YTkuLmQ0NTJiOTJmZGJhN2I4M2RkMjY3YmYwZGI2MGI2Nzk5N2ZmNGI4MzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0zNjk3LDU5
ICszNjk3LDExIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGlt
aXQpCiAgICAgLy8gdXMgdG8gdHJhY2sgaWYgYSB1c2Ugb2YgYW4gYXJndW1lbnQgbWF5IHVzZSB0
aGUgYWN0dWFsIGFyZ3VtZW50IHBhc3NlZCwgYXMKICAgICAvLyBvcHBvc2VkIHRvIHVzaW5nIGEg
dmFsdWUgd2Ugc2V0IGV4cGxpY2l0bHkuCiAgICAgaWYgKG1fY3VycmVudEJsb2NrID09IG1fZ3Jh
cGguYmxvY2soMCkgJiYgIWlubGluZUNhbGxGcmFtZSgpKSB7Ci0gICAgICAgIG1fZ3JhcGgubV9h
cmd1bWVudHNPblN0YWNrLnJlc2l6ZShtX251bUFyZ3VtZW50cyk7Ci0gICAgICAgIG1fZ3JhcGgu
bV9hcmd1bWVudHNGb3JDaGVja2luZy5yZXNpemUobV9udW1Bcmd1bWVudHMpOwotICAgICAgICAv
LyBDcmVhdGUgYWxsIEdldEFyZ3VtZW50UmVnaXN0ZXIgbm9kZXMgZmlyc3QgYW5kIHRoZW4gdGhl
IGNvcnJlc3BvbmRpbmcgTW92SGludCBub2RlcywKLSAgICAgICAgLy8gZm9sbG93ZWQgYnkgdGhl
IGNvcnJlc3BvbmRpbmcgU2V0TG9jYWwgbm9kZXMgYW5kIGZpbmFsbHkgYW55IFNldEFyZ3VtZW50
IG5vZGVzIGZvcgotICAgICAgICAvLyB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4KLSAgICAgICAg
Ly8gV2UgZG8gdGhpcyB0byBtYWtlIHRoZSBleGl0IHByb2Nlc3NpbmcgY29ycmVjdC4gV2Ugc3Rh
cnQgd2l0aCBtX2V4aXRPSyA9IHRydWUgc2luY2UKLSAgICAgICAgLy8gR2V0QXJndW1lbnRSZWdp
c3RlciBub2RlcyBjYW4gZXhpdCwgZXZlbiB0aG91Z2ggdGhleSBkb24ndC4gVGhlIE1vdkhpbnQn
cyB0ZWNobmljYWxseSBjb3VsZAotICAgICAgICAvLyBleGl0IGJ1dCB3b24ndC4gVGhlIFNldExv
Y2FscyBjYW4gZXhpdCBhbmQgdGhlcmVmb3JlIHdlIHdhbnQgYWxsIHRoZSBNb3ZIaW50cwotICAg
ICAgICAvLyBiZWZvcmUgdGhlIGZpcnN0IFNldExvY2FsIHNvIHRoYXQgdGhlIHJlZ2lzdGVyIHN0
YXRlIGlzIGNvbnNpc3RlbnQuCi0gICAgICAgIC8vIFdlIGRvIGFsbCB0aGlzIHByb2Nlc3Npbmcg
YmVmb3JlIGNyZWF0aW5nIGFueSBTZXRBcmd1bWVudCBub2RlcyBzaW5jZSB0aGV5IGFyZQotICAg
ICAgICAvLyBtb3JhbGx5IGVxdWl2YWxlbnQgdG8gdGhlIFNldExvY2FscyBmb3IgR2V0QXJndW1l
bnRSZWdpc3RlciBub2Rlcy4KKyAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50cy5yZXNpemUobV9u
dW1Bcmd1bWVudHMpOworICAgICAgICAvLyBXZSB3aWxsIGVtaXQgU2V0QXJndW1lbnQgbm9kZXMu
IFRoZXkgZG9uJ3QgZXhpdCwgYnV0IHdlJ3JlIGF0IHRoZSB0b3Agb2YgYW4gb3BfZW50ZXIgc28K
KyAgICAgICAgLy8gZXhpdE9LID0gdHJ1ZS4KICAgICAgICAgbV9leGl0T0sgPSB0cnVlOwotICAg
ICAgICAKLSAgICAgICAgdW5zaWduZWQgbnVtUmVnaXN0ZXJBcmd1bWVudHMgPSBzdGQ6Om1pbiht
X251bUFyZ3VtZW50cywgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUyk7
Ci0KLSAgICAgICAgVmVjdG9yPE5vZGUqLCBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRf
UkVHSVNURVJTPiBnZXRBcmd1bWVudFJlZ2lzdGVyTm9kZXM7Ci0KLSAgICAgICAgLy8gRmlyc3Qg
Y3JlYXRlIEdldEFyZ3VtZW50UmVnaXN0ZXIgbm9kZXMuCi0gICAgICAgIGZvciAodW5zaWduZWQg
YXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG51bVJlZ2lzdGVyQXJndW1lbnRzOyArK2FyZ3VtZW50
KSB7Ci0gICAgICAgICAgICBnZXRBcmd1bWVudFJlZ2lzdGVyTm9kZXMuYXBwZW5kKAotICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoR2V0QXJndW1lbnRSZWdpc3RlciwgT3BJbmZvKDApLAotICAg
ICAgICAgICAgICAgICAgICBPcEluZm8oYXJndW1lbnRSZWdpc3RlckluZGV4Rm9ySlNGdW5jdGlv
bkFyZ3VtZW50KGFyZ3VtZW50KSkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENyZWF0ZSBh
bGwgdGhlIE1vdkhpbnQncyBmb3IgdGhlIEdldEFyZ3VtZW50UmVnaXN0ZXIgbm9kZXMgY3JlYXRl
ZCBhYm92ZS4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdldEFyZ3VtZW50UmVn
aXN0ZXJOb2Rlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgTm9kZSogZ2V0QXJndW1lbnRS
ZWdpc3RlciA9IGdldEFyZ3VtZW50UmVnaXN0ZXJOb2Rlc1tpXTsKLSAgICAgICAgICAgIGFkZFRv
R3JhcGgoTW92SGludCwgT3BJbmZvKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLm9mZnNl
dCgpKSwgZ2V0QXJndW1lbnRSZWdpc3Rlcik7Ci0gICAgICAgICAgICAvLyBXZSBjYW4ndCBleGl0
IGFueW1vcmUuCi0gICAgICAgICAgICBtX2V4aXRPSyA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gRXhpdCBpcyBub3cgb2theSwgYnV0IHdlIG5lZWQgdG8gZmVuY2Ugd2l0aCBhbiBF
eGl0T0sgbm9kZS4KLSAgICAgICAgbV9leGl0T0sgPSB0cnVlOwotICAgICAgICBhZGRUb0dyYXBo
KEV4aXRPSyk7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIGFsbCB0aGUgU2V0TG9jYWxzJ3MgZm9yIHRo
ZSBHZXRBcmd1bWVudFJlZ2lzdGVyIG5vZGVzIGNyZWF0ZWQgYWJvdmUuCi0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBnZXRBcmd1bWVudFJlZ2lzdGVyTm9kZXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIE5vZGUqIGdldEFyZ3VtZW50UmVnaXN0ZXIgPSBnZXRBcmd1bWVudFJl
Z2lzdGVyTm9kZXNbaV07Ci0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YSh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChpKSk7Ci0gICAgICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlU3RydWN0dXJl
Q2hlY2tIb2lzdGluZ0ZhaWxlZCgKLSAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5t
X2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNoZSkpOwotICAg
ICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUNoZWNrQXJyYXlIb2lzdGluZ0ZhaWxl
ZCgKLSAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4
aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJbmRleGluZ1R5cGUpKTsKLSAgICAgICAgICAgIE5v
ZGUqIHNldExvY2FsID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNz
RGF0YSksIGdldEFyZ3VtZW50UmVnaXN0ZXIpOwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChpKSA9IHNldExvY2FsOwotICAgICAgICAgICAgZ2V0
QXJndW1lbnRSZWdpc3Rlci0+c2V0VmFyaWFibGVBY2Nlc3NEYXRhKHNldExvY2FsLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKSk7Ci0gICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzT25TdGFja1tp
XSA9IHNldExvY2FsOwotICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50c0ZvckNoZWNraW5n
W2ldID0gZ2V0QXJndW1lbnRSZWdpc3RlcjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZpbmFs
bHkgY3JlYXRlIGFueSBTZXRBcmd1bWVudCBub2Rlcy4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmd1bWVudCA9IE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlM7IGFyZ3Vt
ZW50IDwgbV9udW1Bcmd1bWVudHM7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHM7ICsrYXJndW1lbnQpIHsK
ICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFj
Y2Vzc0RhdGEoCiAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJn
dW1lbnQpKTsKICAgICAgICAgICAgIHZhcmlhYmxlLT5tZXJnZVN0cnVjdHVyZUNoZWNrSG9pc3Rp
bmdGYWlsZWQoCkBAIC0zNzU4LDggKzM3MTAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZEluZGV4aW5nVHlw
ZSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBOb2RlKiBzZXRBcmd1bWVudCA9IGFkZFRv
R3JhcGgoU2V0QXJndW1lbnQsIE9wSW5mbyh2YXJpYWJsZSkpOwotICAgICAgICAgICAgbV9ncmFw
aC5tX2FyZ3VtZW50c09uU3RhY2tbYXJndW1lbnRdID0gc2V0QXJndW1lbnQ7Ci0gICAgICAgICAg
ICBtX2dyYXBoLm1fYXJndW1lbnRzRm9yQ2hlY2tpbmdbYXJndW1lbnRdID0gc2V0QXJndW1lbnQ7
CisgICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IHNldEFyZ3VtZW50
OwogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRBcmd1bWVu
dEZpcnN0VGltZShhcmd1bWVudCwgc2V0QXJndW1lbnQpOwogICAgICAgICB9CiAgICAgfQpAQCAt
NDg2OSwxMCArNDgyMCw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQgbGltaXQpCiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRv
bid0IHVuYm94IG91ciBhcmd1bWVudHMgaGVyZSBzaW5jZSB0aGF0IHdvbid0IGJlCiAgICAgICAg
ICAgICAvLyBkb25lIGJ5IHRoZSBhcmd1bWVudHMgb2JqZWN0IGNyZWF0aW9uIG5vZGUgYXMgdGhh
dCBub2RlIG1heSBub3QgZXhpc3QuCiAgICAgICAgICAgICBub3RpY2VBcmd1bWVudHNVc2UoKTsK
LSAgICAgICAgICAgIFRlcm1pbmFsaXR5IHRlcm1pbmFsaXR5ID0gaGFuZGxlVmFyYXJnc0NhbGwo
Y3VycmVudEluc3RydWN0aW9uLCBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzLCBDYWxsTW9kZTo6VGFp
bCk7Ci0gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGluc2VydCBmbHVzaCBub2RlcyBmb3Igb3Vy
IGFyZ3VtZW50cyBhZnRlciB0aGUgVGFpbENhbGxGb3J3YXJkVmFyYXJncwotICAgICAgICAgICAg
Ly8gbm9kZSBzbyB0aGF0IHRoZXkgd2lsbCBiZSBmbHVzaGVkIHRvIHRoZSBzdGFjayBhbmQga2Vw
dCBhbGl2ZS4KICAgICAgICAgICAgIGZsdXNoRm9yUmV0dXJuKCk7CisgICAgICAgICAgICBUZXJt
aW5hbGl0eSB0ZXJtaW5hbGl0eSA9IGhhbmRsZVZhcmFyZ3NDYWxsKGN1cnJlbnRJbnN0cnVjdGlv
biwgVGFpbENhbGxGb3J3YXJkVmFyYXJncywgQ2FsbE1vZGU6OlRhaWwpOwogICAgICAgICAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRShtX2N1cnJlbnRJbnN0cnVjdGlvbiA9PSBjdXJyZW50SW5zdHJ1
Y3Rpb24sICJoYW5kbGVWYXJhcmdzQ2FsbCwgd2hpY2ggbWF5IGhhdmUgaW5saW5lZCB0aGUgY2Fs
bGVlLCB0cmFzaGVkIG1fY3VycmVudEluc3RydWN0aW9uIik7CiAgICAgICAgICAgICAvLyBJZiB0
aGUgY2FsbCBpcyB0ZXJtaW5hbCB0aGVuIHdlIHNob3VsZCBub3QgcGFyc2UgYW55IGZ1cnRoZXIg
Ynl0ZWNvZGVzIGFzIHRoZSBUYWlsQ2FsbCB3aWxsIGV4aXQgdGhlIGZ1bmN0aW9uLgogICAgICAg
ICAgICAgLy8gSWYgdGhlIGNhbGwgaXMgbm90IHRlcm1pbmFsLCBob3dldmVyLCB0aGVuIHdlIHdh
bnQgdGhlIHN1YnNlcXVlbnQgb3BfcmV0L29wX2p1bXAgdG8gdXBkYXRlIG1ldGFkYXRhIGFuZCBj
bGVhbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVh
ZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRp
bmdQaGFzZS5jcHAKaW5kZXggZDM2ZGE2MzAzN2Y4NzI1OTExYzg1YzEyYzYyNTMwNzc2ZTI4OTgw
NC4uNjdiMzU3NDM4MmFhZDcwMjFmM2NhNzY4NWZhM2E0OWNkZjRlM2ZlMyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCkBA
IC0yOTksMTYgKzI5OSwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gVGhlIHJ1bGVzIGZv
ciB0aHJlYWRlZCBDUFMgZm9ybToKICAgICAgICAgICAgIC8vIAogICAgICAgICAgICAgLy8gSGVh
ZCB2YXJpYWJsZTogZGVzY3JpYmVzIHdoYXQgaXMgbGl2ZSBhdCB0aGUgaGVhZCBvZiB0aGUgYmFz
aWMgYmxvY2suCi0gICAgICAgICAgICAvLyBIZWFkIHZhcmlhYmxlIGxpbmtzIG1heSByZWZlciB0
byBGbHVzaCwgUGhhbnRvbUxvY2FsLCBQaGksIEdldEFyZ3VtZW50UmVnaXN0ZXIKLSAgICAgICAg
ICAgIC8vIG9yIFNldEFyZ3VtZW50LgotICAgICAgICAgICAgLy8gR2V0QXJndW1lbnRSZWdpc3Rl
ciBhbmQgU2V0QXJndW1lbnQgbWF5IG9ubHkgYXBwZWFyIGluIHRoZSByb290IGJsb2NrLgorICAg
ICAgICAgICAgLy8gSGVhZCB2YXJpYWJsZSBsaW5rcyBtYXkgcmVmZXIgdG8gRmx1c2gsIFBoYW50
b21Mb2NhbCwgUGhpLCBvciBTZXRBcmd1bWVudC4KKyAgICAgICAgICAgIC8vIFNldEFyZ3VtZW50
IG1heSBvbmx5IGFwcGVhciBpbiB0aGUgcm9vdCBibG9jay4KICAgICAgICAgICAgIC8vCiAgICAg
ICAgICAgICAvLyBUYWlsIHZhcmlhYmxlOiB0aGUgbGFzdCB0aGluZyB0aGF0IGhhcHBlbmVkIHRv
IHRoZSB2YXJpYWJsZSBpbiB0aGUgYmxvY2suCi0gICAgICAgICAgICAvLyBJdCBtYXkgYmUgYSBG
bHVzaCwgUGhhbnRvbUxvY2FsLCBHZXRMb2NhbCwgU2V0TG9jYWwsIEdldEFyZ3VtZW50UmVnaXN0
ZXIsCi0gICAgICAgICAgICAvLyBTZXRBcmd1bWVudCwgb3IgUGhpLiBHZXRBcmd1bWVudFJlZ2lz
dGVyIGFuZCBTZXRBcmd1bWVudCBtYXkgb25seSBhcHBlYXIKLSAgICAgICAgICAgIC8vIGluIHRo
ZSByb290IGJsb2NrLiBOb3RlIHRoYXQgaWYgdGhlcmUgZXZlciB3YXMgYSBHZXRMb2NhbCB0byB0
aGUgdmFyaWFibGUsCi0gICAgICAgICAgICAvLyBhbmQgaXQgd2FzIGZvbGxvd2VkIGJ5IFBoYW50
b21Mb2NhbHMgYW5kIEZsdXNoZXMgYnV0IG5vdCBTZXRMb2NhbHMsIHRoZW4KLSAgICAgICAgICAg
IC8vIHRoZSB0YWlsIHZhcmlhYmxlIHdpbGwgYmUgdGhlIEdldExvY2FsLgorICAgICAgICAgICAg
Ly8gSXQgbWF5IGJlIGEgRmx1c2gsIFBoYW50b21Mb2NhbCwgR2V0TG9jYWwsIFNldExvY2FsLCBT
ZXRBcmd1bWVudCwgb3IgUGhpLgorICAgICAgICAgICAgLy8gU2V0QXJndW1lbnQgbWF5IG9ubHkg
YXBwZWFyIGluIHRoZSByb290IGJsb2NrLiBOb3RlIHRoYXQgaWYgdGhlcmUgZXZlcgorICAgICAg
ICAgICAgLy8gd2FzIGEgR2V0TG9jYWwgdG8gdGhlIHZhcmlhYmxlLCBhbmQgaXQgd2FzIGZvbGxv
d2VkIGJ5IFBoYW50b21Mb2NhbHMgYW5kCisgICAgICAgICAgICAvLyBGbHVzaGVzIGJ1dCBub3Qg
U2V0TG9jYWxzLCB0aGVuIHRoZSB0YWlsIHZhcmlhYmxlIHdpbGwgYmUgdGhlIEdldExvY2FsLgog
ICAgICAgICAgICAgLy8gVGhpcyByZWZsZWN0cyB0aGUgZmFjdCB0aGF0IHlvdSBvbmx5IGNhcmUg
dGhhdCB0aGUgdGFpbCB2YXJpYWJsZSBpcyBhCiAgICAgICAgICAgICAvLyBGbHVzaCBvciBQaGFu
dG9tTG9jYWwgaWYgbm90aGluZyBlbHNlIGludGVyZXN0aW5nIGhhcHBlbmVkLiBMaWtld2lzZSwg
aWYKICAgICAgICAgICAgIC8vIHRoZXJlIGV2ZXIgd2FzIGEgU2V0TG9jYWwgYW5kIGl0IHdhcyBm
b2xsb3dlZCBieSBGbHVzaGVzLCB0aGVuIHRoZSB0YWlsCkBAIC0zNjksMTMgKzM2NywxMiBAQCBw
cml2YXRlOgogICAgIAogICAgIHZvaWQgc3BlY2lhbENhc2VBcmd1bWVudHMoKQogICAgIHsKLSAg
ICAgICAgLy8gTm9ybWFsbHksIGEgU2V0QXJndW1lbnQgb3IgU2V0TG9jYWwgZGVub3RlcyB0aGUg
c3RhcnQgb2YgYSBsaXZlIHJhbmdlIGZvcgotICAgICAgICAvLyBhIGxvY2FsJ3MgdmFsdWUgb24g
dGhlIHN0YWNrLiBCdXQgdGhvc2UgU2V0QXJndW1lbnRzIGFuZCBTZXRMb2NhbHMgdXNlZAotICAg
ICAgICAvLyBmb3IgdGhlIGFjdHVhbCBhcmd1bWVudHMgdG8gdGhlIG1hY2hpbmUgQ29kZUJsb2Nr
IGdldCBzcGVjaWFsLWNhc2VkLiBXZSBjb3VsZCBoYXZlCi0gICAgICAgIC8vIGluc3RlYWQgdXNl
ZCB0d28gZGlmZmVyZW50IG5vZGUgdHlwZXMgLSBvbmUgZm9yIHRoZSBhcmd1bWVudHMgYXQgdGhl
IHByb2xvZ3VlIGNhc2UsCi0gICAgICAgIC8vIGFuZCBhbm90aGVyIGZvciB0aGUgb3RoZXIgdXNl
cy4gQnV0IHRoaXMgc2VlbWVkIGxpa2UgSVIgb3ZlcmtpbGwuCi0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1fZ3JhcGgubV9hcmd1bWVudHNPblN0YWNrLnNpemUoKTsgaS0tOykKLSAgICAgICAg
ICAgIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGlt
ZShpLCBtX2dyYXBoLm1fYXJndW1lbnRzT25TdGFja1tpXSk7CisgICAgICAgIC8vIE5vcm1hbGx5
LCBhIFNldEFyZ3VtZW50IGRlbm90ZXMgdGhlIHN0YXJ0IG9mIGEgbGl2ZSByYW5nZSBmb3IgYSBs
b2NhbCdzIHZhbHVlIG9uIHRoZSBzdGFjay4KKyAgICAgICAgLy8gQnV0IHRob3NlIFNldEFyZ3Vt
ZW50cyB1c2VkIGZvciB0aGUgYWN0dWFsIGFyZ3VtZW50cyB0byB0aGUgbWFjaGluZSBDb2RlQmxv
Y2sgZ2V0CisgICAgICAgIC8vIHNwZWNpYWwtY2FzZWQuIFdlIGNvdWxkIGhhdmUgaW5zdGVhZCB1
c2VkIHR3byBkaWZmZXJlbnQgbm9kZSB0eXBlcyAtIG9uZSBmb3IgdGhlIGFyZ3VtZW50cworICAg
ICAgICAvLyBhdCB0aGUgcHJvbG9ndWUgY2FzZSwgYW5kIGFub3RoZXIgZm9yIHRoZSBvdGhlciB1
c2VzLiBCdXQgdGhpcyBzZWVtZWQgbGlrZSBJUiBvdmVya2lsbC4KKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbV9ncmFwaC5tX2FyZ3VtZW50cy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBt
X2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoaSwg
bV9ncmFwaC5tX2FyZ3VtZW50c1tpXSk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJh
bmRLaW5kIG9wZXJhbmRLaW5kPgpAQCAtNDgzLDcgKzQ4MCw2IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAg
ICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgotICAgICAgICAgICAgY2FzZSBHZXRBcmd1bWVu
dFJlZ2lzdGVyOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgY2FzZSBGbHVzaDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgKaW5kZXggMGViNjE5ZDVhNmM2Zjk1N2ExMmY3YzM0YmFhMTUwNzEzYjQyODQ0Yy4uMGNl
ZDUyMmUxOTRhNTFhYzBkMjI2NTc5M2RmNzFlNGExZTQwNmUyOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKQEAgLTQwNiw3ICs0MDYsNiBAQCB2b2lkIGNsb2Ji
ZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwg
Y29uc3QgV3JpdGVGdQogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAg
IGNhc2UgU2V0QXJndW1lbnQ6Ci0gICAgY2FzZSBHZXRBcmd1bWVudFJlZ2lzdGVyOgogICAgIGNh
c2UgSnVtcDoKICAgICBjYXNlIEJyYW5jaDoKICAgICBjYXNlIFN3aXRjaDoKQEAgLTQ3MSw3ICs0
NzAsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBS
ZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgIGNhc2UgUGhhbnRvbUNsb25lZEFy
Z3VtZW50czoKICAgICAgICAgLy8gREZHIGJhY2tlbmQgcmVxdWlyZXMgdGhhdCB0aGUgbG9jYWxz
IHRoYXQgdGhpcyByZWFkcyBhcmUgZmx1c2hlZC4gRlRMIGJhY2tlbmQgY2FuIGhhbmRsZSB0aG9z
ZQogICAgICAgICAvLyBsb2NhbHMgYmVpbmcgcHJvbW90ZWQuCi0gICAgICAgIGlmICghaXNGVEwo
Z3JhcGgubV9wbGFuLm1vZGUpICYmICFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZy
YW1lKQorICAgICAgICBpZiAoIWlzRlRMKGdyYXBoLm1fcGxhbi5tb2RlKSkKICAgICAgICAgICAg
IHJlYWQoU3RhY2spOwogICAgICAgICAKICAgICAgICAgLy8gRXZlbiB0aG91Z2ggaXQncyBwaGFu
dG9tLCBpdCBzdGlsbCBoYXMgdGhlIHByb3BlcnR5IHRoYXQgb25lIGNhbid0IGJlIHJlcGxhY2Vk
IHdpdGggYW5vdGhlci4KQEAgLTU2MCwxOCArNTU5LDExIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0
ZUZ1CiAgICAgY2FzZSBUYWlsQ2FsbDoKICAgICBjYXNlIERpcmVjdFRhaWxDYWxsOgogICAgIGNh
c2UgVGFpbENhbGxWYXJhcmdzOgotICAgICAgICByZWFkKFdvcmxkKTsKLSAgICAgICAgd3JpdGUo
U2lkZVN0YXRlKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKICAgICBjYXNlIFRhaWxDYWxs
Rm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgIC8vIFdlIHJlYWQgYWxsIGFyZ3VtZW50cyBhZnRlciAi
dGhpcyIuCi0gICAgICAgIGZvciAodW5zaWduZWQgYXJnID0gMTsgYXJnIDwgZ3JhcGgubV9hcmd1
bWVudHNPblN0YWNrLnNpemUoKTsgYXJnKyspCi0gICAgICAgICAgICByZWFkKEFic3RyYWN0SGVh
cChTdGFjaywgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJnKSkpOwogICAgICAgICByZWFk
KFdvcmxkKTsKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwotCisg
ICAgICAgIAogICAgIGNhc2UgR2V0R2V0dGVyOgogICAgICAgICByZWFkKEdldHRlclNldHRlcl9n
ZXR0ZXIpOwogICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEdldHRlckxvYywgR2V0dGVyU2V0dGVy
X2dldHRlciwgbm9kZS0+Y2hpbGQxKCkpLCBMYXp5Tm9kZShub2RlKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb24uaAppbmRleCAxNjk3N2YwMjk1OThlY2UzYTk1MmUxNDM1Zjc1MWJj
N2I3M2U4NTE0Li40MTA0ZWIzMjQ3ODA1ZjcxYmRjZTMyYWQxMmExODIzNDI3MTcwYTEyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKQEAgLTE1Miw4ICsxNTIsNiBAQCBlbnVt
IFN0cnVjdHVyZVJlZ2lzdHJhdGlvblJlc3VsdCB7IFN0cnVjdHVyZVJlZ2lzdGVyZWROb3JtYWxs
eSwgU3RydWN0dXJlUmVnaXN0ZQogCiBlbnVtIE9wdGltaXphdGlvbkZpeHBvaW50U3RhdGUgeyBC
ZWZvcmVGaXhwb2ludCwgRml4cG9pbnROb3RDb252ZXJnZWQsIEZpeHBvaW50Q29udmVyZ2VkIH07
CiAKLWVudW0gU3RyZW5ndGhSZWR1Y2VBcmd1bWVudEZsdXNoZXMgeyBEb250T3B0aW1pemVBcmd1
bWVudEZsdXNoZXMsIE9wdGltaXplQXJndW1lbnRGbHVzaGVzIH07Ci0KIC8vIERlc2NyaWJlcyB0
aGUgZm9ybSB5b3UgY2FuIGV4cGVjdCB0aGUgZW50aXJlIGdyYXBoIHRvIGJlIGluLgogZW51bSBH
cmFwaEZvcm0gewogICAgIC8vIExvYWRTdG9yZSBmb3JtIG1lYW5zIHRoYXQgYmFzaWMgYmxvY2tz
IG1heSBmcmVlbHkgdXNlIEdldExvY2FsLCBTZXRMb2NhbCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEQ0VQaGFzZS5jcHAKaW5kZXggYWJmMmM5ODA3ZWY3ODFhYmY3OTM1MWE2NjEwYjZm
M2E3Yzc5ZWZkNi4uYTcwYTg2OThkNDllMzFjOWU2MzJhOWY2NzYxNjcwOTQ5YzY5ZjYyNiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAKQEAgLTUzLDggKzUzLDcg
QEAgcHVibGljOgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9j
a3NJblByZU9yZGVyKCkpCiAgICAgICAgICAgICBmaXh1cEJsb2NrKGJsb2NrKTsKICAgICAgICAg
Ci0gICAgICAgIGNsZWFuVmFyaWFibGVzKG1fZ3JhcGgubV9hcmd1bWVudHNPblN0YWNrKTsKLSAg
ICAgICAgY2xlYW5WYXJpYWJsZXMobV9ncmFwaC5tX2FyZ3VtZW50c0ZvckNoZWNraW5nKTsKKyAg
ICAgICAgY2xlYW5WYXJpYWJsZXMobV9ncmFwaC5tX2FyZ3VtZW50cyk7CiAKICAgICAgICAgLy8g
SnVzdCBkbyBhIGJhc2ljIFBoYW50b20vQ2hlY2sgY2xlYW4tdXAuCiAgICAgICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCmluZGV4IGZmMDhhZWY3NzEx
Y2Y4ZDYzYTFhMWRmMTBhNGEzMjk2NjA4YjMyMTguLmU3MWYyYjNlYzg1NzIzNDBjMWU4YmE5ZjQz
OThhYjgyZjI0M2M2ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RG9lc0dDLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAK
QEAgLTI2MSw3ICsyNjEsNiBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUp
CiAgICAgY2FzZSBHZXRTdGFjazoKICAgICBjYXNlIEdldEZyb21Bcmd1bWVudHM6CiAgICAgY2Fz
ZSBQdXRUb0FyZ3VtZW50czoKLSAgICBjYXNlIEdldEFyZ3VtZW50UmVnaXN0ZXI6CiAgICAgY2Fz
ZSBHZXRBcmd1bWVudDoKICAgICBjYXNlIExvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZToKICAgICBj
YXNlIExvZ1NoYWRvd0NoaWNrZW5UYWlsOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEcml2ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2
ZXIuY3BwCmluZGV4IGFmZGFiMTBmYjlmZjBmMjg3ZWUzOWZlNTkyOTQ5ODYzMzUwNTU5YTMuLjE0
Y2QwZDAxNDJkYjJiOGIzYTgyNGJmYzQ2ZjhjZDkwYmUxNTU2MDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RyaXZlci5jcHAKQEAgLTkwLDkgKzkwLDggQEAgc3RhdGljIENvbXBpbGF0
aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIC8vIG1ha2Ugc3VyZSB0aGF0IGFsbCBKSVQgY29k
ZSBnZW5lcmF0aW9uIGRvZXMgZmluYWxpemF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICB2
bS5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwogICAgIHZtLmdl
dENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKLSAgICB2
bS5nZXRKSVRDYWxsVGh1bmtFbnRyeVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcik7Ci0gICAg
dm0uZ2V0SklUQ2FsbFRodW5rRW50cnlTdHViKGxpbmtEaXJlY3RDYWxsVGh1bmtHZW5lcmF0b3Ip
OwotICAgIHZtLmdldEpJVENhbGxUaHVua0VudHJ5U3R1YihsaW5rUG9seW1vcnBoaWNDYWxsVGh1
bmtHZW5lcmF0b3IpOworICAgIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcik7
CisgICAgdm0uZ2V0Q1RJU3R1YihsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpOwog
ICAgIAogICAgIGlmICh2bS50eXBlUHJvZmlsZXIoKSkKICAgICAgICAgdm0udHlwZVByb2ZpbGVy
TG9nKCktPnByb2Nlc3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJhbCgiUHJlcGFyaW5nIGZvciBERkcg
Y29tcGlsYXRpb24uIikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAKaW5kZXggOWNiNjhlOTRlNmEwNTk3ODQ2YjVhMzc2YjE3MWJkNTFjMjBlMGFjNS4uY2E1
NjJiNGU5NmExN2NkOWQzNTgwZWVkNzYwMDBhNTNkYjFhZDVjNiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCkBAIC0xNzkxLDcgKzE3OTEsNiBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgogICAgICAgICBjYXNlIEdldExvY2Fs
OgogICAgICAgICBjYXNlIEdldENhbGxlZToKLSAgICAgICAgY2FzZSBHZXRBcmd1bWVudFJlZ2lz
dGVyOgogICAgICAgICBjYXNlIEdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOgogICAgICAg
ICBjYXNlIEdldFJlc3RMZW5ndGg6CiAgICAgICAgIGNhc2UgR2V0QXJndW1lbnQ6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgKaW5kZXggNWVmZWM4NDI1
NDQyY2JkNjMyZDRkNmM4MWI2YjRmZjBmYzkxOGFlMi4uZTlkZjg0MTA2ODUyNThjNjQ5MzdhZjRl
NmUzNmU1ZTAwNzc2ZGU5MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHZW5lcmF0aW9uSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2Vu
ZXJhdGlvbkluZm8uaApAQCAtMTA0LDE5ICsxMDQsNiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VS
VChmb3JtYXQgJiBEYXRhRm9ybWF0SlMpOwogICAgICAgICBpbml0R1BSKG5vZGUsIHVzZUNvdW50
LCBncHIsIGZvcm1hdCk7CiAgICAgfQotCi0gICAgdm9pZCBpbml0QXJndW1lbnRSZWdpc3RlclZh
bHVlKE5vZGUqIG5vZGUsIHVpbnQzMl90IHVzZUNvdW50LCBHUFJSZWcgZ3ByLCBEYXRhRm9ybWF0
IHJlZ2lzdGVyRm9ybWF0ID0gIERhdGFGb3JtYXRKUykKLSAgICB7Ci0gICAgICAgIG1fbm9kZSA9
IG5vZGU7Ci0gICAgICAgIG1fdXNlQ291bnQgPSB1c2VDb3VudDsKLSAgICAgICAgbV9yZWdpc3Rl
ckZvcm1hdCA9IHJlZ2lzdGVyRm9ybWF0OwotICAgICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZv
cm1hdE5vbmU7Ci0gICAgICAgIG1fY2FuRmlsbCA9IGZhbHNlOwotICAgICAgICB1LmdwciA9IGdw
cjsKLSAgICAgICAgbV9ib3JuRm9yT1NSID0gZmFsc2U7Ci0gICAgICAgIG1faXNDb25zdGFudCA9
IGZhbHNlOwotICAgICAgICBBU1NFUlQobV91c2VDb3VudCk7Ci0gICAgfQogI2VsaWYgVVNFKEpT
VkFMVUUzMl82NCkKICAgICB2b2lkIGluaXRKU1ZhbHVlKE5vZGUqIG5vZGUsIHVpbnQzMl90IHVz
ZUNvdW50LCBHUFJSZWcgdGFnR1BSLCBHUFJSZWcgcGF5bG9hZEdQUiwgRGF0YUZvcm1hdCBmb3Jt
YXQgPSBEYXRhRm9ybWF0SlMpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAppbmRleCBjNDUzMTNmY2I5YjFjZTk3YzU4YWViNjU1ODk1ODExNTk3NTBhMmJiLi5mOWY4
ZTRjNDk3NWUwOWY5NzQyOGNjNjU0ZTE3M2VmMmQwMjAxMTM4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtMjk0LDYgKzI5NCw3IEBAIHZvaWQgR3JhcGg6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKiBub2RlLCBEdW1wQ29u
dGV4dCoKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6
ZSgpOyArK2kpCiAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dChkYXRhLnZh
cmlhbnRzW2ldLCBjb250ZXh0KSk7CiAgICAgfQorICAgIEFTU0VSVChub2RlLT5oYXNWYXJpYWJs
ZUFjY2Vzc0RhdGEoKnRoaXMpID09IG5vZGUtPmFjY2Vzc2VzU3RhY2soKnRoaXMpKTsKICAgICBp
ZiAobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlzKSkgewogICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnRyeUdldFZhcmlhYmxlQWNj
ZXNzRGF0YSgpOwogICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhKSB7CkBAIC0zNzIsOCAr
MzczLDYgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBw
cmVmaXgsIE5vZGUqIG5vZGUsIER1bXBDb250ZXh0KgogICAgICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCBpbkNvbnRleHQoZGF0YS0+Y2FzZXNbaV0udmFsdWUsIGNvbnRleHQpLCAiOiIsIGRhdGEt
PmNhc2VzW2ldLnRhcmdldCk7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImRlZmF1bHQ6Iiwg
ZGF0YS0+ZmFsbFRocm91Z2gpOwogICAgIH0KLSAgICBpZiAobm9kZS0+aGFzQXJndW1lbnRSZWdp
c3RlckluZGV4KCkpCi0gICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZS0+YXJndW1lbnRSZWdp
c3RlckluZGV4KCksICIoIiwgR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKG5vZGUtPmFyZ3Vt
ZW50UmVnaXN0ZXJJbmRleCgpKSwgIikiKTsKICAgICBDbG9iYmVyU2V0IHJlYWRzOwogICAgIENs
b2JiZXJTZXQgd3JpdGVzOwogICAgIGFkZFJlYWRzQW5kV3JpdGVzKCp0aGlzLCBub2RlLCByZWFk
cywgd3JpdGVzKTsKQEAgLTM5Nyw3ICszOTYsNyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSogbm9kZSwgRHVtcENvbnRleHQqCiAg
ICAgICAgIG91dC5wcmludChjb21tYSwgIldhc0hvaXN0ZWQiKTsKICAgICBvdXQucHJpbnQoIiki
KTsKIAotICAgIGlmICgobm9kZS0+YWNjZXNzZXNTdGFjaygqdGhpcykgfHwgbm9kZS0+b3AoKSA9
PSBHZXRBcmd1bWVudFJlZ2lzdGVyKSAmJiBub2RlLT50cnlHZXRWYXJpYWJsZUFjY2Vzc0RhdGEo
KSkKKyAgICBpZiAobm9kZS0+YWNjZXNzZXNTdGFjaygqdGhpcykgJiYgbm9kZS0+dHJ5R2V0VmFy
aWFibGVBY2Nlc3NEYXRhKCkpCiAgICAgICAgIG91dC5wcmludCgiICBwcmVkaWN0aW5nICIsIFNw
ZWN1bGF0aW9uRHVtcChub2RlLT50cnlHZXRWYXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlv
bigpKSk7CiAgICAgZWxzZSBpZiAobm9kZS0+aGFzSGVhcFByZWRpY3Rpb24oKSkKICAgICAgICAg
b3V0LnByaW50KCIgIHByZWRpY3RpbmcgIiwgU3BlY3VsYXRpb25EdW1wKG5vZGUtPmdldEhlYXBQ
cmVkaWN0aW9uKCkpKTsKQEAgLTUwNywxMCArNTA2LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkKICAgICBvdXQucHJpbnQoIiAgRml4
cG9pbnQgc3RhdGU6ICIsIG1fZml4cG9pbnRTdGF0ZSwgIjsgRm9ybTogIiwgbV9mb3JtLCAiOyBV
bmlmaWNhdGlvbiBzdGF0ZTogIiwgbV91bmlmaWNhdGlvblN0YXRlLCAiOyBSZWYgY291bnQgc3Rh
dGU6ICIsIG1fcmVmQ291bnRTdGF0ZSwgIlxuIik7CiAgICAgaWYgKG1fZm9ybSA9PSBTU0EpCiAg
ICAgICAgIG91dC5wcmludCgiICBBcmd1bWVudCBmb3JtYXRzOiAiLCBsaXN0RHVtcChtX2FyZ3Vt
ZW50Rm9ybWF0cyksICJcbiIpOwotICAgIGVsc2UgewotICAgICAgICBvdXQucHJpbnQoIiAgQXJn
dW1lbnRzIGZvciBjaGVja2luZzogIiwgbGlzdER1bXAobV9hcmd1bWVudHNGb3JDaGVja2luZyks
ICJcbiIpOwotICAgICAgICBvdXQucHJpbnQoIiAgQXJndW1lbnRzIG9uIHN0YWNrOiAiLCBsaXN0
RHVtcChtX2FyZ3VtZW50c09uU3RhY2spLCAiXG4iKTsKLSAgICB9CisgICAgZWxzZQorICAgICAg
ICBvdXQucHJpbnQoIiAgQXJndW1lbnRzOiAiLCBsaXN0RHVtcChtX2FyZ3VtZW50cyksICJcbiIp
OwogICAgIG91dC5wcmludCgiXG4iKTsKICAgICAKICAgICBOb2RlKiBsYXN0Tm9kZSA9IG51bGxw
dHI7CkBAIC0xNjIzLDEzICsxNjIwLDEzIEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUg
R3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoTm9kZSogY3VycmVuCiAgICAg
ICAgIGlmICghY3VycmVudE5vZGUgfHwgbm9kZS0+b3JpZ2luICE9IGN1cnJlbnROb2RlLT5vcmln
aW4pIHsKICAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29k
ZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAKLSAgICAgICAgICAgIGlmIChub2Rl
LT5hY2Nlc3Nlc1N0YWNrKCp0aGlzKSB8fCBub2RlLT5vcCgpID09IEdldEFyZ3VtZW50UmVnaXN0
ZXIpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5hY2Nlc3Nlc1N0YWNrKCp0aGlzKSkgewogICAg
ICAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcmVzdWx0ID0gWyZdICgpIC0+IFZhbHVlUHJvZmls
ZSogewogICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmxvY2FsKCkuaXNBcmd1bWVudCgp
KQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICAg
ICAgICAgIGludCBhcmd1bWVudCA9IG5vZGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpOwotICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBhcmd1bWVudE5vZGUgPSBtX2FyZ3VtZW50c09uU3RhY2tbYXJn
dW1lbnRdOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZ3VtZW50Tm9kZSB8fCAhYXJndW1l
bnROb2RlLT5hY2Nlc3Nlc1N0YWNrKCp0aGlzKSkKKyAgICAgICAgICAgICAgICAgICAgTm9kZSog
YXJndW1lbnROb2RlID0gbV9hcmd1bWVudHNbYXJndW1lbnRdOworICAgICAgICAgICAgICAgICAg
ICBpZiAoIWFyZ3VtZW50Tm9kZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkg
IT0gYXJndW1lbnROb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCmlu
ZGV4IDAwYjVhZTdkNmY5ODFkOTZhOGUwM2RmMGFhNmEwODQ1Yjg3MDUyMWYuLmQzMDQ3ZjM0YzJk
ODcwYmIxOTUwNTc2MTlmYzU5Y2I2ZTA0N2IzZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgKQEAgLTg1OSw3ICs4NTksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCB3aWxsQ2F0Y2hF
eGNlcHRpb25Jbk1hY2hpbmVGcmFtZShDb2RlT3JpZ2luLCBDb2RlT3JpZ2luJiBvcENhdGNoT3Jp
Z2luT3V0LCBIYW5kbGVySW5mbyomIGNhdGNoSGFuZGxlck91dCk7CiAgICAgCiAgICAgYm9vbCBu
ZWVkc1Njb3BlUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2hhc0RlYnVnZ2VyRW5hYmxlZCB8
fCBtX2NvZGVCbG9jay0+dXNlc0V2YWwoKTsgfQotICAgIGJvb2wgbmVlZHNGbHVzaGVkVGhpcygp
IGNvbnN0IHsgcmV0dXJuIG1faGFzRGVidWdnZXJFbmFibGVkIHx8IG1fY29kZUJsb2NrLT51c2Vz
RXZhbCgpOyB9CisgICAgYm9vbCBuZWVkc0ZsdXNoZWRUaGlzKCkgY29uc3QgeyByZXR1cm4gbV9j
b2RlQmxvY2stPnVzZXNFdmFsKCk7IH0KIAogICAgIFZNJiBtX3ZtOwogICAgIFBsYW4mIG1fcGxh
bjsKQEAgLTg3OCw5ICs4NzgsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgQmFnPFN0b3JhZ2VBY2Nl
c3NEYXRhPiBtX3N0b3JhZ2VBY2Nlc3NEYXRhOwogICAgIAotICAgIC8vIEluIENQUywgdGhpcyBp
cyBhbGwgb2YgdGhlIEdldEFyZ3VtZW50UmVnaXN0ZXIgYW5kIFNldEFyZ3VtZW50IG5vZGVzIGZv
ciB0aGUgYXJndW1lbnRzIGluCi0gICAgLy8gdGhlIG1hY2hpbmUgY29kZSBibG9jayB0aGF0IHN1
cnZpdmVkIERDRS4gQWxsIG9mIHRoZW0gZXhjZXB0IG1heWJlICJ0aGlzIiB3aWxsIHN1cnZpdmUg
RENFLAotICAgIC8vIGJlY2F1c2Ugb2YgdGhlIEZsdXNoIG5vZGVzLgorICAgIC8vIEluIENQUywg
dGhpcyBpcyBhbGwgb2YgdGhlIFNldEFyZ3VtZW50IG5vZGVzIGZvciB0aGUgYXJndW1lbnRzIGlu
IHRoZSBtYWNoaW5lIGNvZGUgYmxvY2sKKyAgICAvLyB0aGF0IHN1cnZpdmVkIERDRS4gQWxsIG9m
IHRoZW0gZXhjZXB0IG1heWJlICJ0aGlzIiB3aWxsIHN1cnZpdmUgRENFLCBiZWNhdXNlIG9mIHRo
ZSBGbHVzaAorICAgIC8vIG5vZGVzLgogICAgIC8vCiAgICAgLy8gSW4gU1NBLCB0aGlzIGlzIGFs
bCBvZiB0aGUgR2V0U3RhY2sgbm9kZXMgZm9yIHRoZSBhcmd1bWVudHMgaW4gdGhlIG1hY2hpbmUg
Y29kZSBibG9jayB0aGF0CiAgICAgLy8gbWF5IGhhdmUgc29tZSBzcGVjdWxhdGlvbiBpbiB0aGUg
cHJvbG9ndWUgYW5kIHN1cnZpdmVkIERDRS4gTm90ZSB0aGF0IHRvIGdldCB0aGUgc3BlY3VsYXRp
b24KQEAgLTkwMyw4ICs5MDMsNyBAQCBwdWJsaWM6CiAgICAgLy8KICAgICAvLyBJZiB3ZSBEQ0Ug
dGhlIEFyaXRoQWRkIGFuZCB3ZSByZW1vdmUgdGhlIGludCBjaGVjayBvbiB4LCB0aGVuIHRoaXMg
d29uJ3QgZG8gdGhlIHNpZGUKICAgICAvLyBlZmZlY3RzLgotICAgIFZlY3RvcjxOb2RlKiwgOD4g
bV9hcmd1bWVudHNPblN0YWNrOwotICAgIFZlY3RvcjxOb2RlKiwgOD4gbV9hcmd1bWVudHNGb3JD
aGVja2luZzsKKyAgICBWZWN0b3I8Tm9kZSosIDg+IG1fYXJndW1lbnRzOwogICAgIAogICAgIC8v
IEluIENQUywgdGhpcyBpcyBtZWFuaW5nbGVzcy4gSW4gU1NBLCB0aGlzIGlzIHRoZSBhcmd1bWVu
dCBzcGVjdWxhdGlvbiB0aGF0IHdlJ3ZlIGxvY2tlZCBpbi4KICAgICBWZWN0b3I8Rmx1c2hGb3Jt
YXQ+IG1fYXJndW1lbnRGb3JtYXRzOwpAQCAtOTU1LDcgKzk1NCw2IEBAIHB1YmxpYzoKICAgICBH
cmFwaEZvcm0gbV9mb3JtOwogICAgIFVuaWZpY2F0aW9uU3RhdGUgbV91bmlmaWNhdGlvblN0YXRl
OwogICAgIFBsYW5TdGFnZSBtX3BsYW5TdGFnZSB7IFBsYW5TdGFnZTo6SW5pdGlhbCB9OwotICAg
IFN0cmVuZ3RoUmVkdWNlQXJndW1lbnRGbHVzaGVzIG1fc3RyZW5ndGhSZWR1Y2VBcmd1bWVudHMg
PSB7IFN0cmVuZ3RoUmVkdWNlQXJndW1lbnRGbHVzaGVzOjpEb250T3B0aW1pemVBcmd1bWVudEZs
dXNoZXMgfTsKICAgICBSZWZDb3VudFN0YXRlIG1fcmVmQ291bnRTdGF0ZTsKICAgICBib29sIG1f
aGFzRGVidWdnZXJFbmFibGVkOwogICAgIGJvb2wgbV9oYXNFeGNlcHRpb25IYW5kbGVycyB7IGZh
bHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VB
YnN0cmFjdFN0YXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFi
c3RyYWN0U3RhdGUuY3BwCmluZGV4IDgwNDRiNzgxMjAxMWQ0MjRkMjlmYjM2NTY5ZTM4ZjY3NTQ1
NmQzNjAuLjFkMjBkMWQ0Y2E1MDI3MmJjNjZhZDQ0NGFhZmE5NjA4MDIxMzMxYTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUu
Y3BwCkBAIC0xMDYsMTEgKzEwNiwxMSBAQCB2b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0
aWFsaXplKCkKICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkKICAgICAgICAgICAg
IGZvcm1hdCA9IG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbaV07CiAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNPblN0YWNrW2ldOwor
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNbaV07CiAgICAgICAg
ICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgICAgZm9ybWF0ID0gRmx1c2hlZEpTVmFsdWU7
CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9
PSBTZXRBcmd1bWVudCB8fCBub2RlLT5vcCgpID09IFNldExvY2FsKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7CiAgICAgICAgICAgICAgICAgZm9y
bWF0ID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9ybWF0KCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5jcHAKaW5kZXggNTczYzAzYzM0MjdhZjBkYzcyMTRmOGZhZGE5ZGMxZjhlMTAzYjJkNi4u
MGFjNmFmZjk4YTMyZWEwZTc0OGE1Mzg0MGIzZWJiZWNjYjIyMjAyNSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKQEAgLTk5LDYgKzk5LDE4IEBAIHZv
aWQgSklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cygpCiAgICAgfQogfQogCit2b2lkIEpJVENvbXBp
bGVyOjpjb21waWxlRW50cnkoKQoreworICAgIC8vIFRoaXMgY29kZSBjdXJyZW50bHkgbWF0Y2hl
cyB0aGUgb2xkIEpJVC4gSW4gdGhlIGZ1bmN0aW9uIGhlYWRlciB3ZSBuZWVkIHRvCisgICAgLy8g
c2F2ZSByZXR1cm4gYWRkcmVzcyBhbmQgY2FsbCBmcmFtZSB2aWEgdGhlIHByb2xvZ3VlIGFuZCBw
ZXJmb3JtIGEgZmFzdCBzdGFjayBjaGVjay4KKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2MjkyCisgICAgLy8gV2UnbGwgbmVlZCB0byBjb252
ZXJ0IHRoZSByZW1haW5pbmcgY3RpXyBzdHlsZSBjYWxscyAoc3BlY2lmaWNhbGx5IHRoZSBzdGFj
aworICAgIC8vIGNoZWNrKSB3aGljaCB3aWxsIGJlIGRlcGVuZGVudCBvbiBzdGFjayBsYXlvdXQu
IChXZSdkIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhpcyBpbgorICAgIC8vIGJvdGggbm9ybWFsIHJl
dHVybiBjb2RlIGFuZCB3aGVuIGp1bXBpbmcgdG8gYW4gZXhjZXB0aW9uIGhhbmRsZXIpLgorICAg
IGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1f
Y29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworfQorCiB2b2lkIEpJVENvbXBp
bGVyOjpjb21waWxlU2V0dXBSZWdpc3RlcnNGb3JFbnRyeSgpCiB7CiAgICAgZW1pdFNhdmVDYWxs
ZWVTYXZlcygpOwpAQCAtMjY1LDcgKzI3Nyw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qc0Nh
bGxzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEpTQ2FsbFJlY29yZCYgcmVjb3JkID0gbV9qc0Nh
bGxzW2ldOwogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqcmVjb3JkLmluZm87Ci0gICAg
ICAgIGxpbmtCdWZmZXIubGluayhyZWNvcmQuc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKG1fdm0tPmdl
dEpJVENhbGxUaHVua0VudHJ5U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5lbnRyeUZvcihp
bmZvLmFyZ3VtZW50c0xvY2F0aW9uKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAg
bGlua0J1ZmZlci5saW5rKHJlY29yZC5zbG93Q2FsbCwgRnVuY3Rpb25QdHIobV92bS0+Z2V0Q1RJ
U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkp
OwogICAgICAgICBpbmZvLnNldENhbGxMb2NhdGlvbnMoCiAgICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChyZWNvcmQuc2xvd0NhbGwpKSwK
ICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25PZihyZWNv
cmQudGFyZ2V0VG9DaGVjaykpLApAQCAtMjc1LDggKzI4Nyw2IEBAIHZvaWQgSklUQ29tcGlsZXI6
OmxpbmsoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKICAgICBmb3IgKEpTRGlyZWN0Q2FsbFJlY29y
ZCYgcmVjb3JkIDogbV9qc0RpcmVjdENhbGxzKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5m
byA9ICpyZWNvcmQuaW5mbzsKICAgICAgICAgbGlua0J1ZmZlci5saW5rKHJlY29yZC5jYWxsLCBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YocmVjb3JkLnNsb3dQYXRoKSk7Ci0gICAgICAgIGlmIChyZWNv
cmQuaGFzU2xvd0NhbGwoKSkKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhyZWNvcmQuc2xv
d0NhbGwsIEZ1bmN0aW9uUHRyKG1fdm0tPmdldEpJVENhbGxUaHVua0VudHJ5U3R1YihsaW5rRGly
ZWN0Q2FsbFRodW5rR2VuZXJhdG9yKS5lbnRyeUZvcihpbmZvLmFyZ3VtZW50c0xvY2F0aW9uKCkp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICAgICAgaW5mby5zZXRDYWxsTG9jYXRpb25zKAog
ICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoKSwKICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bG9jYXRpb25PZihyZWNvcmQuc2xvd1BhdGgpLApAQCAtMzQ0LDE0ICszNTQsOCBAQCB2b2lkIEpJ
VENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCiAKIHZvaWQgSklUQ29tcGls
ZXI6OmNvbXBpbGUoKQogewotICAgIExhYmVsIG1haW5FbnRyeSh0aGlzKTsKLQogICAgIHNldFN0
YXJ0T2ZDb2RlKCk7Ci0gICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLQotICAgIExhYmVsIGVu
dHJ5UG9pbnQodGhpcyk7Ci0gICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2Nr
LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwotCisgICAgY29tcGlsZUVudHJ5KCk7CiAgICAg
bV9zcGVjdWxhdGl2ZSA9IHN0ZDo6bWFrZV91bmlxdWU8U3BlY3VsYXRpdmVKSVQ+KCp0aGlzKTsK
IAogICAgIC8vIFBsYW50IGEgY2hlY2sgdGhhdCBzdWZmaWNpZW50IHNwYWNlIGlzIGF2YWlsYWJs
ZSBpbiB0aGUgSlNTdGFjay4KQEAgLTM3OCwyMCArMzgyLDYgQEAgdm9pZCBKSVRDb21waWxlcjo6
Y29tcGlsZSgpCiAKICAgICBtX3NwZWN1bGF0aXZlLT5jYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFt
ZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIG1f
Y29kZUJsb2NrKTsKIAotI2lmIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RF
UlMKLSAgICBtX3N0YWNrQXJnc0FyaXR5T0tFbnRyeSA9IGxhYmVsKCk7Ci0gICAgZW1pdEZ1bmN0
aW9uUHJvbG9ndWUoKTsKLQotICAgIC8vIExvYWQgYXJndW1lbnQgdmFsdWVzIGludG8gYXJndW1l
bnQgcmVnaXN0ZXJzCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSksIGFyZ3VtZW50UmVnaXN0ZXJGb3JDYWxsZWUoKSk7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIGFyZ3VtZW50UmVnaXN0ZXJGb3JBcmd1bWVu
dENvdW50KCkpOwotICAgIAotICAgIGZvciAodW5zaWduZWQgYXJnSW5kZXggPSAwOyBhcmdJbmRl
eCA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSAm
JiBhcmdJbmRleCA8IE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlM7IGFy
Z0luZGV4KyspCi0gICAgICAgIGxvYWQ2NChBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCAoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgYXJnSW5kZXgpICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSksIGFyZ3VtZW50UmVnaXN0ZXJGb3JGdW5jdGlvbkFy
Z3VtZW50KGFyZ0luZGV4KSk7Ci0gICAgCi0gICAganVtcChlbnRyeVBvaW50KTsKLSNlbmRpZgot
CiAgICAgLy8gR2VuZXJhdGUgc2xvdyBwYXRoIGNvZGUuCiAgICAgbV9zcGVjdWxhdGl2ZS0+cnVu
U2xvd1BhdGhHZW5lcmF0b3JzKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKTsKICAgICBtX3Bj
VG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsSWdub3JpbmdXYXRjaHBvaW50
cygpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwpAQCAt
NDE2LDg3ICs0MDYsMjQgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZSgpCiAgICAgY29kZUJs
b2NrKCktPnNocmlua1RvRml0KENvZGVCbG9jazo6TGF0ZVNocmluayk7CiAKICAgICBkaXNhc3Nl
bWJsZSgqbGlua0J1ZmZlcik7Ci0KLSAgICBKSVRFbnRyeVBvaW50cyBlbnRyeXBvaW50czsKLSNp
ZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTCi0gICAgZW50cnlwb2lu
dHMuc2V0RW50cnlGb3IoUmVnaXN0ZXJBcmdzQXJpdHlDaGVja05vdFJlcXVpcmVkLCBsaW5rQnVm
ZmVyLT5sb2NhdGlvbk9mKG1haW5FbnRyeSkpOwotICAgIGVudHJ5cG9pbnRzLnNldEVudHJ5Rm9y
KFN0YWNrQXJnc0FyaXR5Q2hlY2tOb3RSZXF1aXJlZCwgbGlua0J1ZmZlci0+bG9jYXRpb25PZiht
X3N0YWNrQXJnc0FyaXR5T0tFbnRyeSkpOwotI2Vsc2UKLSAgICBlbnRyeXBvaW50cy5zZXRFbnRy
eUZvcihTdGFja0FyZ3NBcml0eUNoZWNrTm90UmVxdWlyZWQsIGxpbmtCdWZmZXItPmxvY2F0aW9u
T2YobWFpbkVudHJ5KSk7Ci0jZW5kaWYKLQorICAgIAogICAgIG1fZ3JhcGgubV9wbGFuLmZpbmFs
aXplciA9IHN0ZDo6bWFrZV91bmlxdWU8SklURmluYWxpemVyPigKLSAgICAgICAgbV9ncmFwaC5t
X3BsYW4sIFdURk1vdmUobV9qaXRDb2RlKSwgV1RGTW92ZShsaW5rQnVmZmVyKSwgZW50cnlwb2lu
dHMpOworICAgICAgICBtX2dyYXBoLm1fcGxhbiwgV1RGTW92ZShtX2ppdENvZGUpLCBXVEZNb3Zl
KGxpbmtCdWZmZXIpKTsKIH0KIAogdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkK
IHsKICAgICBzZXRTdGFydE9mQ29kZSgpOwotCi0jaWYgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FS
R1VNRU5UX1JFR0lTVEVSUwotICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7Ci0gICAgR1BSUmVnIGFy
Z0NvdW50UmVnID0gYXJndW1lbnRSZWdpc3RlckZvckFyZ3VtZW50Q291bnQoKTsKLSAgICBKdW1w
TGlzdCBjb250aW51ZVJlZ2lzdGVyRW50cnk7Ci0gICAgTGFiZWwgcmVnaXN0ZXJBcmd1bWVudHNF
bnRyeXBvaW50c1tOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTICsgMV07
Ci0KLSAgICBpZiAobnVtUGFyYW1ldGVycyA8IE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVO
VF9SRUdJU1RFUlMpIHsKLSAgICAgICAgLy8gU3BpbGwgYW55IGV4dHJhIHJlZ2lzdGVyIGFyZ3Vt
ZW50cyBwYXNzZWQgdG8gZnVuY3Rpb24gb250byB0aGUgc3RhY2suCi0gICAgICAgIGZvciAodW5z
aWduZWQgZXh0cmFSZWdpc3RlckFyZ3VtZW50SW5kZXggPSBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05f
QVJHVU1FTlRfUkVHSVNURVJTIC0gMTsKLSAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJBcmd1bWVu
dEluZGV4ID49IG51bVBhcmFtZXRlcnM7IGV4dHJhUmVnaXN0ZXJBcmd1bWVudEluZGV4LS0pIHsK
LSAgICAgICAgICAgIHJlZ2lzdGVyQXJndW1lbnRzRW50cnlwb2ludHNbZXh0cmFSZWdpc3RlckFy
Z3VtZW50SW5kZXggKyAxXSA9IGxhYmVsKCk7Ci0gICAgICAgICAgICBlbWl0UHV0QXJndW1lbnRU
b0NhbGxGcmFtZUJlZm9yZVByb2xvZ3VlKGFyZ3VtZW50UmVnaXN0ZXJGb3JGdW5jdGlvbkFyZ3Vt
ZW50KGV4dHJhUmVnaXN0ZXJBcmd1bWVudEluZGV4KSwgZXh0cmFSZWdpc3RlckFyZ3VtZW50SW5k
ZXgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGluY3JlbWVudENvdW50ZXIodGhpcywgVk06OlJl
Z0FyZ3NFeHRyYSk7Ci0KLSAgICBjb250aW51ZVJlZ2lzdGVyRW50cnkuYXBwZW5kKGp1bXAoKSk7
Ci0KLSAgICBtX3JlZ2lzdGVyQXJnc1dpdGhBcml0eUNoZWNrID0gbGFiZWwoKTsKLSAgICBpbmNy
ZW1lbnRDb3VudGVyKHRoaXMsIFZNOjpSZWdBcmdzQXJpdHkpOwotCi0gICAgTGFiZWwgcmVnaXN0
ZXJBcmdzQ2hlY2tBcml0eSh0aGlzKTsKLQotICAgIEp1bXAgcmVnaXN0ZXJDaGVja0FyaXR5Owot
Ci0gICAgaWYgKG51bVBhcmFtZXRlcnMgPCBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRf
UkVHSVNURVJTKQotICAgICAgICByZWdpc3RlckNoZWNrQXJpdHkgPSBicmFuY2gzMihOb3RFcXVh
bCwgYXJnQ291bnRSZWcsIFRydXN0ZWRJbW0zMihudW1QYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIHJlZ2lzdGVyQ2hlY2tBcml0eSA9IGJyYW5jaDMyKEJlbG93LCBhcmdDb3VudFJl
ZywgVHJ1c3RlZEltbTMyKG51bVBhcmFtZXRlcnMpKTsKLSAgICAgICAgbV9yZWdpc3RlckFyZ3NX
aXRoUG9zc2libGVFeHRyYUFyZ3MgPSBsYWJlbCgpOwotICAgIH0KLSAgICAKLSAgICBMYWJlbCBy
ZWdpc3RlckVudHJ5Tm9Bcml0eSh0aGlzKTsKLQotICAgIGlmIChudW1QYXJhbWV0ZXJzIDw9IE5V
TUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMpCi0gICAgICAgIHJlZ2lzdGVy
QXJndW1lbnRzRW50cnlwb2ludHNbbnVtUGFyYW1ldGVyc10gPSByZWdpc3RlckVudHJ5Tm9Bcml0
eTsKLQotICAgIGluY3JlbWVudENvdW50ZXIodGhpcywgVk06OlJlZ0FyZ3NOb0FyaXR5KTsKLQot
ICAgIGNvbnRpbnVlUmVnaXN0ZXJFbnRyeS5saW5rKHRoaXMpOwotI2VuZGlmIC8vIE5VTUJFUl9P
Rl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMKLQotICAgIExhYmVsIG1haW5FbnRyeSh0
aGlzKTsKLQotICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisgICAgY29tcGlsZUVudHJ5KCk7
CiAKICAgICAvLyA9PT0gRnVuY3Rpb24gaGVhZGVyIGNvZGUgZ2VuZXJhdGlvbiA9PT0KICAgICAv
LyBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50LCB3aXRob3V0IHBlcmZvcm1pbmcgYW4gYXJp
dHkgY2hlY2suCiAgICAgLy8gSWYgd2UgbmVlZGVkIHRvIHBlcmZvcm0gYW4gYXJpdHkgY2hlY2sg
d2Ugd2lsbCBhbHJlYWR5IGhhdmUgbW92ZWQgdGhlIHJldHVybiBhZGRyZXNzLAogICAgIC8vIHNv
IGVudGVyIGFmdGVyIHRoaXMuCiAgICAgTGFiZWwgZnJvbUFyaXR5Q2hlY2sodGhpcyk7Ci0KLSNp
ZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTCi0gICAgc3RvcmVQdHIo
YXJndW1lbnRSZWdpc3RlckZvckNhbGxlZSgpLCBhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkpOwotICAgIHN0b3JlMzIoYXJnQ291bnRSZWcsIHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCkpOwotCi0gICAgTGFiZWwgZnJvbVN0YWNrRW50cnkodGhpcyk7Ci0j
ZW5kaWYKLSAgICAKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7Ci0KICAgICAvLyBQbGFudCBhIGNoZWNrIHRoYXQgc3Vm
ZmljaWVudCBzcGFjZSBpcyBhdmFpbGFibGUgaW4gdGhlIEpTU3RhY2suCi0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChtX2dyYXBoLnJlcXVpcmVkUmVnaXN0
ZXJDb3VudEZvckV4ZWN1dGlvbkFuZEV4aXQoKSAtIDEpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lz
dGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjpub25BcmdHUFIwKTsK
LSAgICBKdW1wIHN0YWNrT3ZlcmZsb3cgPSBicmFuY2hQdHIoQWJvdmUsIEFic29sdXRlQWRkcmVz
cyhtX3ZtLT5hZGRyZXNzT2ZTb2Z0U3RhY2tMaW1pdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7
CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChtX2dyYXBo
LnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4ZWN1dGlvbkFuZEV4aXQoKSAtIDEpLm9mZnNldCgp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZv
OjpyZWdUMSk7CisgICAgSnVtcCBzdGFja092ZXJmbG93ID0gYnJhbmNoUHRyKEFib3ZlLCBBYnNv
bHV0ZUFkZHJlc3MobV92bS0+YWRkcmVzc09mU29mdFN0YWNrTGltaXQoKSksIEdQUkluZm86OnJl
Z1QxKTsKIAogICAgIC8vIE1vdmUgdGhlIHN0YWNrIHBvaW50ZXIgZG93biB0byBhY2NvbW1vZGF0
ZSBsb2NhbHMKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1fZ3JhcGguc3RhY2tQb2ludGVyT2Zm
c2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTUyNSwxMDUgKzQ1MiwyOCBAQCB2b2lkIEpJVENvbXBp
bGVyOjpjb21waWxlRnVuY3Rpb24oKQogICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1tYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAg
IG1fc3BlY3VsYXRpdmUtPmNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2Vw
dGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwgbV9jb2RlQmxvY2spOwotCi0g
ICAgSnVtcExpc3QgYXJpdHlPSzsKICAgICAKLSNpZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJH
VU1FTlRfUkVHSVNURVJTCi0gICAganVtcChyZWdpc3RlckFyZ3NDaGVja0FyaXR5KTsKLQotICAg
IEp1bXBMaXN0IHJlZ2lzdGVyQXJpdHlOZWVkc0ZpeHVwOwotICAgIGlmIChudW1QYXJhbWV0ZXJz
IDwgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUykgewotICAgICAgICBy
ZWdpc3RlckNoZWNrQXJpdHkubGluayh0aGlzKTsKLSAgICAgICAgcmVnaXN0ZXJBcml0eU5lZWRz
Rml4dXAuYXBwZW5kKGJyYW5jaDMyKEJlbG93LCBhcmdDb3VudFJlZywgVHJ1c3RlZEltbTMyKG1f
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKSk7Ci0KLSAgICAgICAgLy8gV2UgaGF2ZSBleHRy
YSByZWdpc3RlciBhcmd1bWVudHMuCi0KLSAgICAgICAgLy8gVGhlIGZhc3QgZW50cnkgcG9pbnQg
aW50byBhIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIHRoYXQgdGhlIGNvcnJlY3QgbnVtYmVyIG9m
IGFyZ3VtZW50cwotICAgICAgICAvLyBoYXZlIGJlZW4gcGFzc2VkIHRvIHRoZSBjYWxsICh3ZSBv
bmx5IHVzZSB0aGUgZmFzdCBlbnRyeSBwb2ludCB3aGVyZSB3ZSBjYW4gc3RhdGljYWxseQotICAg
ICAgICAvLyBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyBoYXZlIGJl
ZW4gcGFzc2VkLCBvciBoYXZlIGFscmVhZHkgY2hlY2tlZCkuCi0gICAgICAgIC8vIEluIGNhc2Vz
IHdoZXJlIGFuIGFyaXR5IGNoZWNrIGlzIG5lY2Vzc2FyeSwgd2UgZW50ZXIgaGVyZS4KLSAgICAg
ICAgbV9yZWdpc3RlckFyZ3NXaXRoUG9zc2libGVFeHRyYUFyZ3MgPSBsYWJlbCgpOwotCi0gICAg
ICAgIGluY3JlbWVudENvdW50ZXIodGhpcywgVk06OlJlZ0FyZ3NFeHRyYSk7Ci0KLSAgICAgICAg
Ly8gU3BpbGwgZXh0cmEgYXJncyBwYXNzZWQgdG8gZnVuY3Rpb24KLSAgICAgICAgZm9yICh1bnNp
Z25lZCBhcmdJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpKTsgYXJnSW5kZXggPCBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVH
SVNURVJTOyBhcmdJbmRleCsrKSB7Ci0gICAgICAgICAgICBicmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QmVsb3dPckVxdWFsLCBhcmdDb3VudFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihhcmdJbmRleCkpLmxpbmtUbyhtYWluRW50cnksIHRoaXMpOwotICAgICAgICAgICAgZW1pdFB1
dEFyZ3VtZW50VG9DYWxsRnJhbWVCZWZvcmVQcm9sb2d1ZShhcmd1bWVudFJlZ2lzdGVyRm9yRnVu
Y3Rpb25Bcmd1bWVudChhcmdJbmRleCksIGFyZ0luZGV4KTsKLSAgICAgICAgfQotICAgICAgICBq
dW1wKG1haW5FbnRyeSk7Ci0gICAgfQotCi0gICAgLy8gRmFsbCB0aHJvdWdoCi0gICAgaWYgKG51
bVBhcmFtZXRlcnMgPiAwKSB7Ci0gICAgICAgIC8vIFRoZXJlIHNob3VsZCBhbHdheXMgYmUgYSAi
dGhpcyIgcGFyYW1ldGVyLgotICAgICAgICB1bnNpZ25lZCByZWdpc3RlckFyZ3VtZW50Rml4dXBD
b3VudCA9IHN0ZDo6bWluKG51bVBhcmFtZXRlcnMgLSAxLCBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05f
QVJHVU1FTlRfUkVHSVNURVJTKTsKLSAgICAgICAgTGFiZWwgcmVnaXN0ZXJBcmd1bWVudHNOZWVk
QXJpdHlGaXh1cCA9IGxhYmVsKCk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdJbmRleCA9
IDE7IGFyZ0luZGV4IDw9IHJlZ2lzdGVyQXJndW1lbnRGaXh1cENvdW50OyBhcmdJbmRleCsrKQot
ICAgICAgICAgICAgcmVnaXN0ZXJBcmd1bWVudHNFbnRyeXBvaW50c1thcmdJbmRleF0gPSByZWdp
c3RlckFyZ3VtZW50c05lZWRBcml0eUZpeHVwOwotICAgIH0KLQotICAgIGluY3JlbWVudENvdW50
ZXIodGhpcywgVk06OlJlZ0FyZ3NBcml0eSk7Ci0KLSAgICByZWdpc3RlckFyaXR5TmVlZHNGaXh1
cC5saW5rKHRoaXMpOwotCi0gICAgaWYgKG51bVBhcmFtZXRlcnMgPj0gTlVNQkVSX09GX0pTX0ZV
TkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUykKLSAgICAgICAgcmVnaXN0ZXJDaGVja0FyaXR5Lmxp
bmsodGhpcyk7Ci0KLSAgICBzcGlsbEFyZ3VtZW50UmVnaXN0ZXJzVG9GcmFtZUJlZm9yZVByb2xv
Z3VlKCk7Ci0KLSNpZiBFTkFCTEUoVk1fQ09VTlRFUlMpCi0gICAgSnVtcCBjb250aW51ZVRvU3Rh
Y2tBcml0eUZpeHVwID0ganVtcCgpOwotI2VuZGlmCi0jZW5kaWYgLy8gTlVNQkVSX09GX0pTX0ZV
TkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUwotCi0gICAgbV9zdGFja0FyZ3NXaXRoQXJpdHlDaGVj
ayA9IGxhYmVsKCk7Ci0gICAgaW5jcmVtZW50Q291bnRlcih0aGlzLCBWTTo6U3RhY2tBcmdzQXJp
dHkpOwotCi0jaWYgRU5BQkxFKFZNX0NPVU5URVJTKQotICAgIGNvbnRpbnVlVG9TdGFja0FyaXR5
Rml4dXAubGluayh0aGlzKTsKLSNlbmRpZgotCi0gICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsK
KyAgICAvLyBUaGUgZmFzdCBlbnRyeSBwb2ludCBpbnRvIGEgZnVuY3Rpb24gZG9lcyBub3QgY2hl
Y2sgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cworICAgIC8vIGhhdmUgYmVlbiBwYXNz
ZWQgdG8gdGhlIGNhbGwgKHdlIG9ubHkgdXNlIHRoZSBmYXN0IGVudHJ5IHBvaW50IHdoZXJlIHdl
IGNhbiBzdGF0aWNhbGx5CisgICAgLy8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IG51bWJlciBvZiBh
cmd1bWVudHMgaGF2ZSBiZWVuIHBhc3NlZCwgb3IgaGF2ZSBhbHJlYWR5IGNoZWNrZWQpLgorICAg
IC8vIEluIGNhc2VzIHdoZXJlIGFuIGFyaXR5IGNoZWNrIGlzIG5lY2Vzc2FyeSwgd2UgZW50ZXIg
aGVyZS4KKyAgICAvLyBGSVhNRTogY2hhbmdlIHRoaXMgZnJvbSBhIGN0aSBjYWxsIHRvIGEgREZH
IHN0eWxlIG9wZXJhdGlvbiAobm9ybWFsIEMgY2FsbGluZyBjb252ZW50aW9ucykuCisgICAgbV9h
cml0eUNoZWNrID0gbGFiZWwoKTsKKyAgICBjb21waWxlRW50cnkoKTsKIAogICAgIGxvYWQzMihB
c3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcilDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50KSwgR1BSSW5mbzo6cmVnVDEpOwotICAgIGFyaXR5T0suYXBwZW5kKGJy
YW5jaDMyKEFib3ZlT3JFcXVhbCwgR1BSSW5mbzo6cmVnVDEsIFRydXN0ZWRJbW0zMihtX2NvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpKSkpOwotCi0gICAgaW5jcmVtZW50Q291bnRlcih0aGlzLCBW
TTo6QXJpdHlGaXh1cFJlcXVpcmVkKTsKLQorICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgR1BS
SW5mbzo6cmVnVDEsIFRydXN0ZWRJbW0zMihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSku
bGlua1RvKGZyb21Bcml0eUNoZWNrLCB0aGlzKTsKICAgICBlbWl0U3RvcmVDb2RlT3JpZ2luKENv
ZGVPcmlnaW4oMCkpOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAg
ICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwp
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgbV9zcGVjdWxhdGl2ZS0+Y2FsbE9wZXJhdGlv
bldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fY29kZUJsb2NrLT5tX2lzQ29uc3Ry
dWN0b3IgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5
Q2hlY2ssIEdQUkluZm86OnJlZ1QwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwpCiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgYXJpdHlPSy5hcHBlbmQoYnJh
bmNoVGVzdDMyKFplcm8sIEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Ci0KKyAgICBicmFuY2hU
ZXN0MzIoWmVybywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLmxpbmtUbyhmcm9tQXJpdHlDaGVj
aywgdGhpcyk7CiAgICAgZW1pdFN0b3JlQ29kZU9yaWdpbihDb2RlT3JpZ2luKDApKTsKICAgICBt
b3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAg
IG1fY2FsbEFyaXR5Rml4dXAgPSBjYWxsKCk7Ci0KLSNpZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05f
QVJHVU1FTlRfUkVHSVNURVJTCi0gICAgSnVtcCB0b0ZpbGxSZWdpc3RlcnMgPSBqdW1wKCk7Ci0K
LSAgICBtX3N0YWNrQXJnc0FyaXR5T0tFbnRyeSA9IGxhYmVsKCk7Ci0KLSAgICBpbmNyZW1lbnRD
b3VudGVyKHRoaXMsIFZNOjpTdGFja0FyZ3NOb0FyaXR5KTsKLSAgICBlbWl0RnVuY3Rpb25Qcm9s
b2d1ZSgpOwotCi0gICAgYXJpdHlPSy5saW5rKHRoaXMpOwotICAgIHRvRmlsbFJlZ2lzdGVycy5s
aW5rKHRoaXMpOwotCi0gICAgLy8gTG9hZCBhcmd1bWVudCB2YWx1ZXMgaW50byBhcmd1bWVudCBy
ZWdpc3RlcnMKLSAgICBmb3IgKHVuc2lnbmVkIGFyZ0luZGV4ID0gMDsgYXJnSW5kZXggPCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgJiYgYXJnSW5k
ZXggPCBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTOyBhcmdJbmRleCsr
KQotICAgICAgICBsb2FkNjQoQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgKENh
bGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGFyZ0luZGV4KSAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSkpLCBhcmd1bWVudFJlZ2lzdGVyRm9yRnVuY3Rpb25Bcmd1bWVudChh
cmdJbmRleCkpOwotCi0gICAganVtcChmcm9tU3RhY2tFbnRyeSk7Ci0jZWxzZQotICAgIGFyaXR5
T0subGlua1RvKGZyb21Bcml0eUNoZWNrLCB0aGlzKTsKICAgICBqdW1wKGZyb21Bcml0eUNoZWNr
KTsKLSNlbmRpZgogICAgIAogICAgIC8vIEdlbmVyYXRlIHNsb3cgcGF0aCBjb2RlLgogICAgIG1f
c3BlY3VsYXRpdmUtPnJ1blNsb3dQYXRoR2VuZXJhdG9ycyhtX3BjVG9Db2RlT3JpZ2luTWFwQnVp
bGRlcik7CkBAIC02NTIsMzUgKzUwMiwxMCBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVu
Y3Rpb24oKQogICAgIAogICAgIGRpc2Fzc2VtYmxlKCpsaW5rQnVmZmVyKTsKIAotICAgIEpJVEVu
dHJ5UG9pbnRzIGVudHJ5cG9pbnRzOwotI2lmIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVO
VF9SRUdJU1RFUlMKLSNpZiBFTkFCTEUoVk1fQ09VTlRFUlMpCi0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIG1haW5FbnRyeUNvZGVQdHIgPSBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKHJlZ2lzdGVy
RW50cnlOb0FyaXR5KTsKLSNlbHNlCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1haW5FbnRy
eUNvZGVQdHIgPSBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKG1haW5FbnRyeSk7Ci0jZW5kaWYKLSAg
ICBlbnRyeXBvaW50cy5zZXRFbnRyeUZvcihSZWdpc3RlckFyZ3NBcml0eUNoZWNrTm90UmVxdWly
ZWQsIG1haW5FbnRyeUNvZGVQdHIpOwotICAgIGVudHJ5cG9pbnRzLnNldEVudHJ5Rm9yKFJlZ2lz
dGVyQXJnc1Bvc3NpYmxlRXh0cmFBcmdzLCBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKG1fcmVnaXN0
ZXJBcmdzV2l0aFBvc3NpYmxlRXh0cmFBcmdzKSk7Ci0gICAgZW50cnlwb2ludHMuc2V0RW50cnlG
b3IoUmVnaXN0ZXJBcmdzTXVzdENoZWNrQXJpdHksIGxpbmtCdWZmZXItPmxvY2F0aW9uT2YobV9y
ZWdpc3RlckFyZ3NXaXRoQXJpdHlDaGVjaykpOwotCi0gICAgZm9yICh1bnNpZ25lZCBhcmdDb3Vu
dCA9IDE7IGFyZ0NvdW50IDw9IE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RF
UlM7IGFyZ0NvdW50KyspIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGVudHJ5Owot
ICAgICAgICBpZiAoYXJnQ291bnQgPT0gbnVtUGFyYW1ldGVycykKLSAgICAgICAgICAgIGVudHJ5
ID0gbWFpbkVudHJ5Q29kZVB0cjsKLSAgICAgICAgZWxzZSBpZiAocmVnaXN0ZXJBcmd1bWVudHNF
bnRyeXBvaW50c1thcmdDb3VudF0uaXNTZXQoKSkKLSAgICAgICAgICAgIGVudHJ5ID0gbGlua0J1
ZmZlci0+bG9jYXRpb25PZihyZWdpc3RlckFyZ3VtZW50c0VudHJ5cG9pbnRzW2FyZ0NvdW50XSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVudHJ5ID0gbGlua0J1ZmZlci0+bG9jYXRpb25P
ZihtX3JlZ2lzdGVyQXJnc1dpdGhBcml0eUNoZWNrKTsKLSAgICAgICAgZW50cnlwb2ludHMuc2V0
RW50cnlGb3IoSklURW50cnlQb2ludHM6OnJlZ2lzdGVyRW50cnlUeXBlRm9yQXJndW1lbnRDb3Vu
dChhcmdDb3VudCksIGVudHJ5KTsKLSAgICB9Ci0gICAgZW50cnlwb2ludHMuc2V0RW50cnlGb3Io
U3RhY2tBcmdzQXJpdHlDaGVja05vdFJlcXVpcmVkLCBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKG1f
c3RhY2tBcmdzQXJpdHlPS0VudHJ5KSk7Ci0jZWxzZQotICAgIGVudHJ5cG9pbnRzLnNldEVudHJ5
Rm9yKFN0YWNrQXJnc0FyaXR5Q2hlY2tOb3RSZXF1aXJlZCwgbGlua0J1ZmZlci0+bG9jYXRpb25P
ZihtYWluRW50cnkpKTsKLSNlbmRpZgotICAgIGVudHJ5cG9pbnRzLnNldEVudHJ5Rm9yKFN0YWNr
QXJnc011c3RDaGVja0FyaXR5LCBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKG1fc3RhY2tBcmdzV2l0
aEFyaXR5Q2hlY2spKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hlY2sg
PSBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKG1fYXJpdHlDaGVjayk7CiAKICAgICBtX2dyYXBoLm1f
cGxhbi5maW5hbGl6ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEpJVEZpbmFsaXplcj4oCi0gICAgICAg
IG1fZ3JhcGgubV9wbGFuLCBXVEZNb3ZlKG1faml0Q29kZSksIFdURk1vdmUobGlua0J1ZmZlciks
IGVudHJ5cG9pbnRzKTsKKyAgICAgICAgbV9ncmFwaC5tX3BsYW4sIFdURk1vdmUobV9qaXRDb2Rl
KSwgV1RGTW92ZShsaW5rQnVmZmVyKSwgd2l0aEFyaXR5Q2hlY2spOwogfQogCiB2b2lkIEpJVENv
bXBpbGVyOjpkaXNhc3NlbWJsZShMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCmluZGV4IGYwMmNhMTQ3Y2UwOTFmZjQzOGI4
YmI4MGIzNDU3NTE3YzIxMzBiYzcuLjRmOGU4MTcyNTg3YTAyNTQwZjQ2YTYzZjJmZDFmNjlkZmFk
ZGJkOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKQEAg
LTIxNywxMSArMjE3LDYgQEAgcHVibGljOgogICAgICAgICBtX2pzRGlyZWN0Q2FsbHMuYXBwZW5k
KEpTRGlyZWN0Q2FsbFJlY29yZChjYWxsLCBzbG93UGF0aCwgaW5mbykpOwogICAgIH0KICAgICAK
LSAgICB2b2lkIGFkZEpTRGlyZWN0Q2FsbChDYWxsIGNhbGwsIENhbGwgc2xvd0NhbGwsIExhYmVs
IHNsb3dQYXRoLCBDYWxsTGlua0luZm8qIGluZm8pCi0gICAgewotICAgICAgICBtX2pzRGlyZWN0
Q2FsbHMuYXBwZW5kKEpTRGlyZWN0Q2FsbFJlY29yZChjYWxsLCBzbG93Q2FsbCwgc2xvd1BhdGgs
IGluZm8pKTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBhZGRKU0RpcmVjdFRhaWxDYWxsKFBhdGNo
YWJsZUp1bXAgcGF0Y2hhYmxlSnVtcCwgQ2FsbCBjYWxsLCBMYWJlbCBzbG93UGF0aCwgQ2FsbExp
bmtJbmZvKiBpbmZvKQogICAgIHsKICAgICAgICAgbV9qc0RpcmVjdFRhaWxDYWxscy5hcHBlbmQo
SlNEaXJlY3RUYWlsQ2FsbFJlY29yZChwYXRjaGFibGVKdW1wLCBjYWxsLCBzbG93UGF0aCwgaW5m
bykpOwpAQCAtMjcyLDYgKzI2Nyw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE9TUkV4
aXRKdW1wUGxhY2Vob2xkZXI7CiAgICAgCiAgICAgLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24g
dG8gY29tcGlsZS4KKyAgICB2b2lkIGNvbXBpbGVFbnRyeSgpOwogICAgIHZvaWQgY29tcGlsZVNl
dHVwUmVnaXN0ZXJzRm9yRW50cnkoKTsKICAgICB2b2lkIGNvbXBpbGVFbnRyeUV4ZWN1dGlvbkZs
YWcoKTsKICAgICB2b2lkIGNvbXBpbGVCb2R5KCk7CkBAIC0zMjIsMTggKzMxOCw3IEBAIHByaXZh
dGU6CiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgSlNEaXJlY3RDYWxs
UmVjb3JkKENhbGwgY2FsbCwgQ2FsbCBzbG93Q2FsbCwgTGFiZWwgc2xvd1BhdGgsIENhbGxMaW5r
SW5mbyogaW5mbykKLSAgICAgICAgICAgIDogY2FsbChjYWxsKQotICAgICAgICAgICAgLCBzbG93
Q2FsbChzbG93Q2FsbCkKLSAgICAgICAgICAgICwgc2xvd1BhdGgoc2xvd1BhdGgpCi0gICAgICAg
ICAgICAsIGluZm8oaW5mbykKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBo
YXNTbG93Q2FsbCgpIHsgcmV0dXJuIHNsb3dDYWxsLm1fbGFiZWwuaXNTZXQoKTsgfQotCiAgICAg
ICAgIENhbGwgY2FsbDsKLSAgICAgICAgQ2FsbCBzbG93Q2FsbDsKICAgICAgICAgTGFiZWwgc2xv
d1BhdGg7CiAgICAgICAgIENhbGxMaW5rSW5mbyogaW5mbzsKICAgICB9OwpAQCAtMzcwLDEyICsz
NTUsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJbmZv
PiBtX2V4Y2VwdGlvbkhhbmRsZXJPU1JFeGl0Q2FsbFNpdGVzOwogICAgIAogICAgIENhbGwgbV9j
YWxsQXJpdHlGaXh1cDsKLSNpZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNU
RVJTCi0gICAgTGFiZWwgbV9yZWdpc3RlckFyZ3NXaXRoUG9zc2libGVFeHRyYUFyZ3M7Ci0gICAg
TGFiZWwgbV9yZWdpc3RlckFyZ3NXaXRoQXJpdHlDaGVjazsKLSAgICBMYWJlbCBtX3N0YWNrQXJn
c0FyaXR5T0tFbnRyeTsKLSNlbmRpZgotICAgIExhYmVsIG1fc3RhY2tBcmdzV2l0aEFyaXR5Q2hl
Y2s7CisgICAgTGFiZWwgbV9hcml0eUNoZWNrOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTcGVjdWxh
dGl2ZUpJVD4gbV9zcGVjdWxhdGl2ZTsKICAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIgbV9w
Y1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRGaW5hbGl6ZXIuY3BwCmluZGV4IGRhYjQzMzIzOGMyOGUzMWM1OTllOTZhNTJiN2Rh
OTliNzM0MzBiZDguLjUzOTExNThjNWViNWIwNTU4MjMzMzI3Zjc1Njc1OTU3NzY3ZjdkOTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAKQEAgLTM3
LDEyICszNywxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLUpJVEZp
bmFsaXplcjo6SklURmluYWxpemVyKFBsYW4mIHBsYW4sIFBhc3NSZWZQdHI8SklUQ29kZT4gaml0
Q29kZSwKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4gbGlua0J1ZmZlciwgSklURW50
cnlQb2ludHMmIGVudHJ5cG9pbnRzKQorSklURmluYWxpemVyOjpKSVRGaW5hbGl6ZXIoUGxhbiYg
cGxhbiwgUGFzc1JlZlB0cjxKSVRDb2RlPiBqaXRDb2RlLCBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1
ZmZlcj4gbGlua0J1ZmZlciwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHdpdGhBcml0eUNoZWNrKQog
ICAgIDogRmluYWxpemVyKHBsYW4pCiAgICAgLCBtX2ppdENvZGUoaml0Q29kZSkKICAgICAsIG1f
bGlua0J1ZmZlcihXVEZNb3ZlKGxpbmtCdWZmZXIpKQotICAgICwgbV9lbnRyeXBvaW50cyhlbnRy
eXBvaW50cykKKyAgICAsIG1fd2l0aEFyaXR5Q2hlY2sod2l0aEFyaXR5Q2hlY2spCiB7CiB9CiAK
QEAgLTU3LDggKzU2LDkgQEAgc2l6ZV90IEpJVEZpbmFsaXplcjo6Y29kZVNpemUoKQogCiBib29s
IEpJVEZpbmFsaXplcjo6ZmluYWxpemUoKQogewotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
b2RlUmVmID0gRklOQUxJWkVfREZHX0NPREUoKm1fbGlua0J1ZmZlciwgKCJERkcgSklUIGNvZGUg
Zm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ss
IEpJVENvZGU6OkRGR0pJVCkpLmRhdGEoKSkpOwotICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUVu
dHJ5UG9pbnRzKEpJVEVudHJ5UG9pbnRzV2l0aFJlZihjb2RlUmVmLCBtX2VudHJ5cG9pbnRzKSk7
CisgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZigKKyAgICAgICAgRklOQUxJWkVfREZH
X0NPREUoKm1fbGlua0J1ZmZlciwgKCJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENv
ZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCkpLmRh
dGEoKSkpLAorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7CiAgICAgCiAgICAgbV9w
bGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUpOwogICAgIApAQCAtNjksMTEgKzY5
LDEwIEBAIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZSgpCiAKIGJvb2wgSklURmluYWxpemVy
OjpmaW5hbGl6ZUZ1bmN0aW9uKCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghbV9lbnRyeXBvaW50
cy5lbnRyeUZvcihTdGFja0FyZ3NNdXN0Q2hlY2tBcml0eSkuaXNFbXB0eVZhbHVlKCkpOwotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmID0gRklOQUxJWkVfREZHX0NPREUoKm1fbGlu
a0J1ZmZlciwgKCJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhK
SVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCkpLmRhdGEoKSkpOwotCi0g
ICAgbV9qaXRDb2RlLT5pbml0aWFsaXplRW50cnlQb2ludHMoSklURW50cnlQb2ludHNXaXRoUmVm
KGNvZGVSZWYsIG1fZW50cnlwb2ludHMpKTsKLQorICAgIFJFTEVBU0VfQVNTRVJUKCFtX3dpdGhB
cml0eUNoZWNrLmlzRW1wdHlWYWx1ZSgpKTsKKyAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2Rl
UmVmKAorICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgqbV9saW5rQnVmZmVyLCAoIkRGRyBKSVQg
Y29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVC
bG9jaywgSklUQ29kZTo6REZHSklUKSkuZGF0YSgpKSksCisgICAgICAgIG1fd2l0aEFyaXR5Q2hl
Y2spOwogICAgIG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlKTsKICAgICAK
ICAgICBmaW5hbGl6ZUNvbW1vbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRGaW5hbGl6ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
RmluYWxpemVyLmgKaW5kZXggOGU0NmEwYzA5MmY4ZGQ0NzZkOTAwZjJlMDhiNGI0ZmY4NGQ3M2Ri
My4uMWIyMWY4Yzg1YzA5YmNhODkyMGJjYTQwZjk1OTA5YmE4MjNiNzllYiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5oCkBAIC0zNiw3ICszNiw3IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgSklURmluYWxpemVyIDogcHVi
bGljIEZpbmFsaXplciB7CiBwdWJsaWM6Ci0gICAgSklURmluYWxpemVyKFBsYW4mLCBQYXNzUmVm
UHRyPEpJVENvZGU+LCBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4sIEpJVEVudHJ5UG9pbnRz
Jik7CisgICAgSklURmluYWxpemVyKFBsYW4mLCBQYXNzUmVmUHRyPEpJVENvZGU+LCBzdGQ6OnVu
aXF1ZV9wdHI8TGlua0J1ZmZlcj4sIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3aXRoQXJpdHlDaGVj
ayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cihNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OkVtcHR5VmFs
dWUpKTsKICAgICB2aXJ0dWFsIH5KSVRGaW5hbGl6ZXIoKTsKICAgICAKICAgICBzaXplX3QgY29k
ZVNpemUoKSBvdmVycmlkZTsKQEAgLTQ4LDcgKzQ4LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBS
ZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVy
PiBtX2xpbmtCdWZmZXI7Ci0gICAgSklURW50cnlQb2ludHMgbV9lbnRyeXBvaW50czsKKyAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgbV93aXRoQXJpdHlDaGVjazsKIH07CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCmluZGV4
IDk2Njc3MWY5ZWY4MDk0ZWM3YjkzM2FmMmU5YTI4MzFlZjUyMjM5ODUuLmRiMzY5OTk3ZmY2MTg5
YWRiNzk3ZmE2MDI2ZTg2YzRjNjJmYjY4OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlv
blBoYXNlLmNwcApAQCAtMTAxLDcgKzEwMSw3IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7IGkrKykgewogICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaSk7Ci0gICAgICAgICAgICAgICAg
Ym9vbCBpc1ByaW1vcmRpYWxTZXRBcmd1bWVudCA9IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQg
JiYgbm9kZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkgJiYgbm9kZSA9PSBtX2dyYXBoLm1fYXJndW1l
bnRzT25TdGFja1tub2RlLT5sb2NhbCgpLnRvQXJndW1lbnQoKV07CisgICAgICAgICAgICAgICAg
Ym9vbCBpc1ByaW1vcmRpYWxTZXRBcmd1bWVudCA9IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQg
JiYgbm9kZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkgJiYgbm9kZSA9PSBtX2dyYXBoLm1fYXJndW1l
bnRzW25vZGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpXTsKICAgICAgICAgICAgICAgICBJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVD
YWxsRnJhbWU7CiAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkKICAgICAgICAg
ICAgICAgICAgICAgc2VlbklubGluZUNhbGxGcmFtZXMuYWRkKGlubGluZUNhbGxGcmFtZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heGltYWxGbHVzaEluc2Vy
dGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF4aW1hbEZsdXNo
SW5zZXJ0aW9uUGhhc2UuY3BwCmluZGV4IDViN2Y5OWY3YzgyYTczZjBmZDU2NWY3MTllNmU3MGM2
MGI0ZTRlY2YuLjNlMDRiMGM4ZDViMTUxMzYxZDJhNjc1NTUwZmNjOTIzN2RiYjQyZjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9u
UGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF4aW1hbEZsdXNo
SW5zZXJ0aW9uUGhhc2UuY3BwCkBAIC02Nyw4ICs2Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgewog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7IGkrKykg
ewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKChub2RlLT5vcCgpID09IFNldEFyZ3VtZW50IHx8IG5vZGUtPm9wKCkgPT0gU2V0
TG9jYWwpCi0gICAgICAgICAgICAgICAgICAgICYmICghbm9kZS0+bG9jYWwoKS5pc0FyZ3VtZW50
KCkgfHwgbm9kZSAhPSBtX2dyYXBoLm1fYXJndW1lbnRzT25TdGFja1tub2RlLT5sb2NhbCgpLnRv
QXJndW1lbnQoKV0pKSB7CisgICAgICAgICAgICAgICAgYm9vbCBpc1ByaW1vcmRpYWxTZXRBcmd1
bWVudCA9IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQgJiYgbm9kZS0+bG9jYWwoKS5pc0FyZ3Vt
ZW50KCkgJiYgbm9kZSA9PSBtX2dyYXBoLm1fYXJndW1lbnRzW25vZGUtPmxvY2FsKCkudG9Bcmd1
bWVudCgpXTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCAo
bm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCAmJiAhaXNQcmltb3JkaWFsU2V0QXJndW1lbnQpKSB7
CiAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gbm9kZS0+bG9j
YWwoKTsKICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBmbHVzaEFjY2Vz
c0RhdGEgPSBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmICghZmx1c2hBY2Nlc3NEYXRhKQpAQCAtMTE3LDYgKzExNyw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIGlmIChpbml0aWFsQWNjZXNzRGF0YS5vcGVyYW5kKG9wZXJhbmQp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG5vZGUsIG5vZGUtPm9wKCkgIT0gU2V0TG9jYWwpOyAvLyBXZSBzaG91bGQgaGF2ZSBp
bnNlcnRlZCBhIEZsdXNoIGJlZm9yZSB0aGlzIQogICAgICAgICAgICAgaW5pdGlhbEFjY2Vzc0Rh
dGEub3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAg
ICAgICAgaW5pdGlhbEFjY2Vzc05vZGVzLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlOwogICAgICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAppbmRleCA1YWMzNmFj
NTFhOGIzZTE4ODE3NDZjY2VkOTVjMWQ0NTQ0NGU2ZGUyLi40NjI3OTA1YjE5MTVhNDNkMDViMzk4
ZWU1Mzg2ZDZkZTgxZmJiMTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR01heUV4aXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhp
dC5jcHAKQEAgLTcyLDcgKzcyLDYgQEAgRXhpdE1vZGUgbWF5RXhpdEltcGwoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlLCBTdGF0ZVR5cGUmIHN0YXRlKQogICAgIGNhc2UgR2V0U3RhY2s6CiAgICAg
Y2FzZSBHZXRDYWxsZWU6CiAgICAgY2FzZSBHZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczoK
LSAgICBjYXNlIEdldEFyZ3VtZW50UmVnaXN0ZXI6CiAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOgog
ICAgIGNhc2UgR2V0U2NvcGU6CiAgICAgY2FzZSBQaGFudG9tTG9jYWw6CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAKaW5kZXggNTRiNjUzNjc5OTNhNGI3
NjZlNDYxMWYwODFlODExNWQ0MTYzZmU1OS4uODA3OTVjMmZlNzBmMDNjZjE5MzlkYjMxN2Y1MzA5
Y2M3NmE5MjcyYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5p
ZmllZE5vZGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWRO
b2RlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQxLDggKzQxLDYgQEAgTWluaWZpZWROb2RlIE1pbmlmaWVkTm9kZTo6ZnJv
bU5vZGUoTm9kZSogbm9kZSkKICAgICByZXN1bHQubV9vcCA9IG5vZGUtPm9wKCk7CiAgICAgaWYg
KGhhc0NvbnN0YW50KG5vZGUtPm9wKCkpKQogICAgICAgICByZXN1bHQubV9pbmZvID0gSlNWYWx1
ZTo6ZW5jb2RlKG5vZGUtPmFzSlNWYWx1ZSgpKTsKLSAgICBlbHNlIGlmIChub2RlLT5vcCgpID09
IEdldEFyZ3VtZW50UmVnaXN0ZXIpCi0gICAgICAgIHJlc3VsdC5tX2luZm8gPSBqc0Z1bmN0aW9u
QXJndW1lbnRGb3JBcmd1bWVudFJlZ2lzdGVySW5kZXgobm9kZS0+YXJndW1lbnRSZWdpc3Rlcklu
ZGV4KCkpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBQaGFudG9t
RGlyZWN0QXJndW1lbnRzIHx8IG5vZGUtPm9wKCkgPT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cyk7
CiAgICAgICAgIHJlc3VsdC5tX2luZm8gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2RlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR01pbmlmaWVkTm9kZS5oCmluZGV4IDZjMTZhNzNkZDNjMTIwNjdlMmZjNDU0ZjZmNGFj
MDcyMDE0ZDcyM2MuLjI5ZjZkYTNiYWE0NTJlODhhNDJhYjY0Y2U5ZDk0MzIyNzExYzJiNGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuaApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00Myw3ICs0Myw2IEBAIGlubGluZSBib29sIGJlbG9uZ3NJbk1pbmlmaWVkR3JhcGgo
Tm9kZVR5cGUgdHlwZSkKICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgogICAgIGNhc2UgUGhhbnRv
bURpcmVjdEFyZ3VtZW50czoKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6Ci0gICAg
Y2FzZSBHZXRBcmd1bWVudFJlZ2lzdGVyOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZh
dWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03MiwxMCArNzEsNiBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PElubGluZUNhbGxGcmFtZSo+KHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4obV9pbmZvKSk7CiAgICAgfQotCi0gICAgYm9vbCBoYXNBcmd1bWVu
dEluZGV4KCkgY29uc3QgeyByZXR1cm4gaGFzQXJndW1lbnRJbmRleChtX29wKTsgfQotCi0gICAg
dW5zaWduZWQgYXJndW1lbnRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihtX2luZm8pOyB9CiAgICAgCiAgICAgc3RhdGljIE1pbmlmaWVkSUQgZ2V0SUQoTWluaWZp
ZWROb2RlKiBub2RlKSB7IHJldHVybiBub2RlLT5pZCgpOyB9CiAgICAgc3RhdGljIGJvb2wgY29t
cGFyZUJ5Tm9kZUluZGV4KGNvbnN0IE1pbmlmaWVkTm9kZSYgYSwgY29uc3QgTWluaWZpZWROb2Rl
JiBiKQpAQCAtOTMsMTEgKzg4LDYgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIHJldHVybiB0
eXBlID09IFBoYW50b21EaXJlY3RBcmd1bWVudHMgfHwgdHlwZSA9PSBQaGFudG9tQ2xvbmVkQXJn
dW1lbnRzOwogICAgIH0KLQotICAgIHN0YXRpYyBib29sIGhhc0FyZ3VtZW50SW5kZXgoTm9kZVR5
cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0eXBlID09IEdldEFyZ3VtZW50UmVnaXN0
ZXI7Ci0gICAgfQogICAgIAogICAgIE1pbmlmaWVkSUQgbV9pZDsKICAgICB1aW50NjRfdCBtX2lu
Zm87CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAppbmRleCBlNTA2NWM5NWNhYWMy
MWQ0NThmM2ViMDExYzMyZWExOGZlYWNjMzc3Li42YTk0YjU5OWQ4N2E4ODFkNDU5OTA5OGM2YzNl
YmNmZDQ2MDc2ZjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAKQEAgLTcx
LDcgKzcxLDYgQEAgYm9vbCBOb2RlOjpoYXNWYXJpYWJsZUFjY2Vzc0RhdGEoR3JhcGgmIGdyYXBo
KQogICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgY2FzZSBTZXRMb2NhbDoKICAgICBjYXNlIFNldEFy
Z3VtZW50OgotICAgIGNhc2UgR2V0QXJndW1lbnRSZWdpc3RlcjoKICAgICBjYXNlIEZsdXNoOgog
ICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgKaW5kZXggYzg4MGFkYWEyZjJiMDk5ZGRiOTJjZGQ4OTU3MDllMTNh
NTBkODk5YS4uYjI4MTU3ZjI1MDExNWU2Mjg3YjI0ZTdmM2E5NmI3MWMyZWZlNDk5NCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKQEAgLTgyOCw5ICs4MjgsNiBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBoYXNWYXJpYWJsZUFjY2Vzc0RhdGEoR3JhcGgmKTsKICAgICBib29sIGFjY2Vzc2Vz
U3RhY2soR3JhcGgmIGdyYXBoKQogICAgIHsKLSAgICAgICAgaWYgKG9wKCkgPT0gR2V0QXJndW1l
bnRSZWdpc3RlcikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgICAgICByZXR1cm4g
aGFzVmFyaWFibGVBY2Nlc3NEYXRhKGdyYXBoKTsKICAgICB9CiAgICAgCkBAIC04NDksMTEgKzg0
Niw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFZhcmlhYmxlQWNjZXNz
RGF0YSo+KCktPmZpbmQoKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRWYXJpYWJsZUFjY2Vz
c0RhdGEoVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSkKLSAgICB7Ci0gICAgICAgIG1fb3BJ
bmZvID0gdmFyaWFibGU7Ci0gICAgfQotICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCgp
CiAgICAgewogICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NEYXRhKCktPmxvY2FsKCk7CkBA
IC0xMjIyLDE3ICsxMjE0LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25G
cm9tSlNUeXBlKHF1ZXJpZWRUeXBlKCkpOwogICAgIH0KICAgICAKLSAgICBib29sIGhhc0FyZ3Vt
ZW50UmVnaXN0ZXJJbmRleCgpCi0gICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRBcmd1
bWVudFJlZ2lzdGVyOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBhcmd1bWVudFJlZ2lzdGVy
SW5kZXgoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc0FyZ3VtZW50UmVnaXN0ZXJJbmRleCgp
KTsKLSAgICAgICAgcmV0dXJuIG1fb3BJbmZvMi5hczx1bnNpZ25lZD4oKTsKLSAgICB9Ci0gICAg
CiAgICAgYm9vbCBoYXNSZXN1bHQoKQogICAgIHsKICAgICAgICAgcmV0dXJuICEhcmVzdWx0KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKaW5kZXggODdlZWNiMzM0MDcx
ZTc3OTY3MGU2ZTExZGYxYTM4Nzg4YmIxNTI5Yy4uZDQ1ZTRkZmEwMDYxZmI0NjJmNmVlYWE2ZTM5
MDcxMTI0OTJmN2Y2MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaApA
QCAtNTMsNyArNTMsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFj
cm8oQ3JlYXRlVGhpcywgTm9kZVJlc3VsdEpTKSAvKiBOb3RlIHRoaXMgaXMgbm90IE11c3RHZW5l
cmF0ZSBzaW5jZSB3ZSdyZSByZXR1cm5pbmcgaXQgYW55d2F5LiAqLyBcCiAgICAgbWFjcm8oR2V0
Q2FsbGVlLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhHZXRBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgTm9kZVJlc3VsdEludDMyKSBcCi0gICAgbWFjcm8oR2V0QXJndW1lbnRSZWdpc3Rl
ciwgTm9kZVJlc3VsdEpTIC8qIHwgTm9kZU11c3RHZW5lcmF0ZSAqLykgXAogICAgIFwKICAgICAv
KiBOb2RlcyBmb3IgbG9jYWwgdmFyaWFibGUgYWNjZXNzLiBUaGVzZSBub2RlcyBhcmUgbGlua2Vk
IHRvZ2V0aGVyIHVzaW5nIFBoaSBub2Rlcy4gKi9cCiAgICAgLyogQW55IHR3byBub2RlcyB0aGF0
IGFyZSBwYXJ0IG9mIHRoZSBzYW1lIFBoaSBncmFwaCB3aWxsIHNoYXJlIHRoZSBzYW1lICovXApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKaW5kZXggMWEyM2MzNzJkY2ZmNGRlMDMzOWQ3YjJiYTkz
ZTI0Zjg1MWRhNThhZC4uMDM1OTg0NmY1MDg4YjcwZmQwMmNhMmIwNmEyYzdlZWZkMWM1ZGFlOCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCkBAIC0xNDQsMTEgKzE0NCw2IEBAIHZvaWQgTG9j
YWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZShOb2RlKiBub2RlKQogICAg
ICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIEdldEFyZ3VtZW50UmVnaXN0ZXI6IHsKLSAg
ICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT5sb2NhbCgpKS5zZXRO
b2RlKG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KICAgICBjYXNlIE1vdkhpbnQ6IHsK
ICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZExv
Y2FsKCkpLnNldE5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgYnJlYWs7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVh
dGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2lu
dENyZWF0aW9uUGhhc2UuY3BwCmluZGV4IDFiZTI3OTk0NTdjNGViNjExYTg2OWE2YjkzY2MyYTU5
NTFhNTE4Y2QuLjVkMjJlZGQ2MGM1Zjg4NWYxYzYwMDNhNjVmMDUzNzZlYjcwMGE2MTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9u
UGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2lu
dENyZWF0aW9uUGhhc2UuY3BwCkBAIC0xMTIsMzIgKzExMiwxNiBAQCBwdWJsaWM6CiAgICAgICAg
IC8vIHR5cGUgY2hlY2tzIHRvIGhlcmUuCiAgICAgICAgIG9yaWdpbiA9IHRhcmdldC0+YXQoMCkt
Pm9yaWdpbjsKICAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBh
cmd1bWVudCA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihiYXNlbGluZS0+bnVtUGFyYW1ldGVycygp
KTsgKythcmd1bWVudCkgeworICAgICAgICBmb3IgKGludCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50
IDwgYmFzZWxpbmUtPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAg
Tm9kZSogb2xkTm9kZSA9IHRhcmdldC0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50
KTsKICAgICAgICAgICAgIGlmICghb2xkTm9kZSkgewotICAgICAgICAgICAgICAgIC8vIEp1c3Qg
Zm9yIHNhbml0eSwgYWx3YXlzIGhhdmUgYW4gYXJndW1lbnQgbm9kZSBldmVuIGlmIGl0J3Mgbm90
IG5lZWRlZC4KLSAgICAgICAgICAgICAgICBvbGROb2RlID0gbV9ncmFwaC5tX2FyZ3VtZW50c0Zv
ckNoZWNraW5nW2FyZ3VtZW50XTsKKyAgICAgICAgICAgICAgICAvLyBKdXN0IGZvciBzYW5pdHks
IGFsd2F5cyBoYXZlIGEgU2V0QXJndW1lbnQgZXZlbiBpZiBpdCdzIG5vdCBuZWVkZWQuCisgICAg
ICAgICAgICAgICAgb2xkTm9kZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNbYXJndW1lbnRdOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgTm9kZSogbm9kZTsKLSAgICAgICAgICAgIE5vZGUqIHN0
YWNrTm9kZTsKLSAgICAgICAgICAgIGlmIChhcmd1bWVudCA8IE5VTUJFUl9PRl9KU19GVU5DVElP
Tl9BUkdVTUVOVF9SRUdJU1RFUlMpIHsKLSAgICAgICAgICAgICAgICBub2RlID0gbmV3Um9vdC0+
YXBwZW5kTm9kZSgKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIEdldEFy
Z3VtZW50UmVnaXN0ZXIsIG9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG9sZE5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSwKLSAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGFy
Z3VtZW50UmVnaXN0ZXJJbmRleEZvckpTRnVuY3Rpb25Bcmd1bWVudChhcmd1bWVudCkpKTsKLSAg
ICAgICAgICAgICAgICBzdGFja05vZGUgPSBuZXdSb290LT5hcHBlbmROb2RlKAotICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgU2V0TG9jYWwsIG9yaWdpbiwKLSAgICAgICAg
ICAgICAgICAgICAgT3BJbmZvKG9sZE5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSwKLSAgICAg
ICAgICAgICAgICAgICAgRWRnZShub2RlKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIG5vZGUgPSBuZXdSb290LT5hcHBlbmROb2RlKAotICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLCBTcGVjTm9uZSwgU2V0QXJndW1lbnQsIG9yaWdpbiwKLSAgICAgICAgICAgICAg
ICAgICAgT3BJbmZvKG9sZE5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSk7Ci0gICAgICAgICAg
ICAgICAgc3RhY2tOb2RlID0gbm9kZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbV9n
cmFwaC5tX2FyZ3VtZW50c0ZvckNoZWNraW5nW2FyZ3VtZW50XSA9IG5vZGU7Ci0gICAgICAgICAg
ICBtX2dyYXBoLm1fYXJndW1lbnRzT25TdGFja1thcmd1bWVudF0gPSBzdGFja05vZGU7CisgICAg
ICAgICAgICBOb2RlKiBub2RlID0gbmV3Um9vdC0+YXBwZW5kTm9kZSgKKyAgICAgICAgICAgICAg
ICBtX2dyYXBoLCBTcGVjTm9uZSwgU2V0QXJndW1lbnQsIG9yaWdpbiwKKyAgICAgICAgICAgICAg
ICBPcEluZm8ob2xkTm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpKTsKKyAgICAgICAgICAgIG1f
Z3JhcGgubV9hcmd1bWVudHNbYXJndW1lbnRdID0gbm9kZTsKICAgICAgICAgfQogCiAgICAgICAg
IGZvciAoaW50IGxvY2FsID0gMDsgbG9jYWwgPCBiYXNlbGluZS0+bV9udW1DYWxsZWVMb2NhbHM7
ICsrbG9jYWwpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxh
bi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCmluZGV4IGIwZDFl
YWUzNzcyNWE4MTJhOTA2NWYxOWJiOWRkNTM1NDMzNjZmMzkuLmMwYzk0NzljYThhNGMzNDY3MDg4
ZjlkN2JmZDI5OGIzYzJlYTYxMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNw
cApAQCAtMzE0LDkgKzMxNCw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxl
SW5UaHJlYWRJbXBsKExvbmdMaXZlZFN0YXRlJiBsb25nTGl2ZWRTdGF0ZSkKICAgICBwZXJmb3Jt
Q0ZBKGRmZyk7CiAgICAgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhkZmcpOwogICAgIGJvb2wgY2hh
bmdlZCA9IGZhbHNlOwotICAgIGRmZy5tX3N0cmVuZ3RoUmVkdWNlQXJndW1lbnRzID0gT3B0aW1p
emVBcmd1bWVudEZsdXNoZXM7CiAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ0ZHU2ltcGxpZmljYXRp
b24oZGZnKTsKLSAgICBjaGFuZ2VkIHw9IHBlcmZvcm1TdHJlbmd0aFJlZHVjdGlvbihkZmcpOwog
ICAgIGNoYW5nZWQgfD0gcGVyZm9ybUxvY2FsQ1NFKGRmZyk7CiAgICAgCiAgICAgaWYgKHZhbGlk
YXRpb25FbmFibGVkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCmluZGV4IGIyYzc5YmFhNWM1MTYxYTgyYmJjMDk5MmIx
NzI2MzkzYzQ3ODQ1NDUuLmJhZjBhZDkxMTFkOWFlY2ExYmNjNmFhNTlmZTJmZDc0MmY2MGZiMDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xv
YmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2Fs
Q2xvYmJlcml6ZS5oCkBAIC0xOTcsNyArMTk3LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAg
CiAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIC8vIEFsbCBvZiB0aGUgb3V0ZXJtb3N0
IHN0YWNrIGFyZ3VtZW50cywgZXhjZXB0IHRoaXMsIGFyZSBkZWZpbml0ZWx5IHJlYWQuCisgICAg
ICAgICAgICAvLyBBbGwgb2YgdGhlIG91dGVybW9zdCBhcmd1bWVudHMsIGV4Y2VwdCB0aGlzLCBh
cmUgZGVmaW5pdGVseSByZWFkLgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFw
aC5tX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyBpLS0gPiAxOykKICAgICAgICAgICAgICAg
ICBtX3JlYWQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpOwogICAgICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBo
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlv
blBoYXNlLmNwcAppbmRleCAyYjBhNzBmZmJhMzdkOGQ3OWZiNDUwMDQzYjRkN2QxZTg2OGYzMjEz
Li4yN2ZiOTAzNzM3YzRjYjMxNTk3NTgzOWI1ODE4YWUxYWI3ODE0MDZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhh
c2UuY3BwCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAoIXBy
b2ZpbGUpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50c0ZvckNoZWNraW5nW2FyZ10tPnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5wcmVkaWN0KAorICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVu
dHNbYXJnXS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QoCiAgICAgICAgICAgICAgICAg
ICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQpAQCAtNzQsNyArNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKTsK
ICAgICAgICAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5hY2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpIHx8
IG5vZGUtPm9wKCkgPT0gR2V0QXJndW1lbnRSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgQVNT
RVJUKG5vZGUtPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkpOwogICAgICAgICAgICAgICAgIG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KAogICAgICAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkZyb21WYWx1ZShtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzW2ldKSk7CiAg
ICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IDNmZmY4YzA0MDQ1MTdkOTU4
YmYwOWY1MWZkZDA3NmQ0YTY0NjBiZWUuLjM1NmVmM2UyMzliYzBlYjQzMDM2ZTYwZmU1NjBkNjM0
OTQ2YzM5MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0xNjgsMTYgKzE2OCw2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGNhc2UgR2V0
QXJndW1lbnRSZWdpc3RlcjogewotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlLT5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBp
ZiAoIXZhcmlhYmxlLT5jb3VsZFJlcHJlc2VudEludDUyKCkgJiYgKHByZWRpY3Rpb24gJiBTcGVj
SW50NTJPbmx5KSkKLSAgICAgICAgICAgICAgICBwcmVkaWN0aW9uID0gKHByZWRpY3Rpb24gfCBT
cGVjQW55SW50QXNEb3VibGUpICYgflNwZWNJbnQ1Mk9ubHk7Ci0gICAgICAgICAgICBpZiAocHJl
ZGljdGlvbikKLSAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihwcmVk
aWN0aW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBVSW50MzJUb051bWJlcjogewogICAgICAgICAgICAgaWYgKG5vZGUtPmNhblNw
ZWN1bGF0ZUludDMyKG1fcGFzcykpCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVBy
ZWRpY3Rpb24oU3BlY0ludDMyT25seSk7CkBAIC05NzgsNyArOTY4LDYgQEAgcHJpdmF0ZToKIAog
ICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICBjYXNlIFNldExvY2FsOgotICAgICAgICBj
YXNlIEdldEFyZ3VtZW50UmVnaXN0ZXI6CiAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CiAg
ICAgICAgIGNhc2UgVmFsdWVBZGQ6CiAgICAgICAgIGNhc2UgQXJpdGhBZGQ6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCmlu
ZGV4IDRlMjhkOWQyYTNmYjNjNTAxMTA4YjMzNzU1ZWM1Y2M1NDNiZjZjZjkuLjc4MTYyYzcxMzU2
MmI0NjQ3MjdhNTE0NWNiMWUwMmJiMzNkMTc1NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCkBAIC0xNDcsNyArMTQ3
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgCiAgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOwog
ICAgICAgICAKLSAgICAgICAgLy8gQWxsIG9mIHRoZSBzdGFjayBhcmd1bWVudHMgc2hvdWxkIGJl
IGxpdmUgYXQgaGVhZCBvZiByb290LiBOb3RlIHRoYXQgd2UgbWF5IGZpbmQgdGhhdCBzb21lCisg
ICAgICAgIC8vIEFsbCBvZiB0aGUgYXJndW1lbnRzIHNob3VsZCBiZSBsaXZlIGF0IGhlYWQgb2Yg
cm9vdC4gTm90ZSB0aGF0IHdlIG1heSBmaW5kIHRoYXQgc29tZQogICAgICAgICAvLyBsb2NhbHMg
YXJlIGxpdmUgYXQgaGVhZCBvZiByb290LiBUaGlzIHNlZW1zIHdyb25nIGJ1dCBpc24ndC4gVGhp
cyB3aWxsIGhhcHBlbiBmb3IgZXhhbXBsZQogICAgICAgICAvLyBpZiB0aGUgZnVuY3Rpb24gYWNj
ZXNzZXMgY2xvc3VyZSB2YXJpYWJsZSAjNDIgZm9yIHNvbWUgb3RoZXIgZnVuY3Rpb24gYW5kIHdl
IGVpdGhlciBkb24ndAogICAgICAgICAvLyBoYXZlIHZhcmlhYmxlICM0MiBhdCBhbGwgb3Igd2Ug
aGF2ZW4ndCBzZXQgaXQgYXQgcm9vdCwgZm9yIHdoYXRldmVyIHJlYXNvbi4gQmFzaWNhbGx5IHRo
aXMKQEAgLTE1NywxMiArMTU3LDggQEAgcHVibGljOgogICAgICAgICAvLwogICAgICAgICAvLyBG
b3Igb3VyIHB1cnBvc2VzIGhlcmUsIHRoZSBpbXByZWNpc2lvbiBpbiB0aGUgYWxpYXNpbmcgaXMg
aGFybWxlc3MuIEl0IGp1c3QgbWVhbnMgdGhhdCB3ZQogICAgICAgICAvLyBtYXkgbm90IGRvIGFz
IG11Y2ggUGhpIHBydW5pbmcgYXMgd2Ugd2FudGVkLgotICAgICAgICBmb3IgKHNpemVfdCBpID0g
bGl2ZUF0SGVhZC5hdEluZGV4KDApLm51bWJlck9mQXJndW1lbnRzKCk7IGktLTspIHsKLSAgICAg
ICAgICAgIGlmIChpID49IE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMp
IHsKLSAgICAgICAgICAgICAgICAvLyBTdGFjayBhcmd1bWVudHMgYXJlIGxpdmUgYXQgdGhlIGhl
YWQgb2Ygcm9vdC4KLSAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIs
IGxpdmVBdEhlYWQuYXRJbmRleCgwKS5hcmd1bWVudChpKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGxpdmVBdEhlYWQuYXRJbmRleCgwKS5udW1i
ZXJPZkFyZ3VtZW50cygpOyBpLS07KQorICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBu
dWxscHRyLCBsaXZlQXRIZWFkLmF0SW5kZXgoMCkuYXJndW1lbnQoaSkpOwogICAgICAgICAKICAg
ICAgICAgLy8gTmV4dCBpZGVudGlmeSB3aGVyZSB3ZSB3b3VsZCB3YW50IHRvIHNpbmsgUHV0U3Rh
Y2tzIHRvLiBXZSBzYXkgdGhhdCB0aGVyZSBpcyBhIGRlZmVycmVkCiAgICAgICAgIC8vIGZsdXNo
IGlmIHdlIGhhZCBhIFB1dFN0YWNrIHdpdGggYSBnaXZlbiBGbHVzaEZvcm1hdCBidXQgaXQgaGFz
bid0IGJlZW4gbWF0ZXJpYWxpemVkIHlldC4KQEAgLTM2Miw4ICszNTgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKICAgICAgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIFB1dFN0YWNrOgotICAg
ICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgubV9hcmd1bWVudHNPblN0YWNrLmNvbnRhaW5z
KG5vZGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgcHV0U3RhY2tzVG9TaW5rLmFkZChub2Rl
KTsKKyAgICAgICAgICAgICAgICAgICAgcHV0U3RhY2tzVG9TaW5rLmFkZChub2RlKTsKICAgICAg
ICAgICAgICAgICAgICAgc3NhQ2FsY3VsYXRvci5uZXdEZWYoCiAgICAgICAgICAgICAgICAgICAg
ICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5s
b2NhbCksCiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jaywgbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKTsKQEAgLTQ4OCwxNSArNDgzLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogaW5jb21pbmcgPSBtYXBwaW5n
Lm9wZXJhbmQob3BlcmFuZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSB3ZSBk
b24ndCBkZWxldGUgYXJndW1lbnQgUHV0U3RhY2tzLCBubyBuZWVkIHRvIGFkZCBvbmUgYmFjay4K
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fYXJndW1lbnRzT25TdGFjay5j
b250YWlucyhpbmNvbWluZykpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb3R0YSBpbnNlcnQgYSBQdXRTdGFjay4KICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkluc2VydGluZyBhIFB1dFN0YWNrIGZvciAiLCBvcGVyYW5kLCAiIGF0
ICIsIG5vZGUsICJcbiIpOwogCisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWlu
ZyA9IG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIERG
R19BU1NFUlQobV9ncmFwaCwgbm9kZSwgaW5jb21pbmcpOwogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKApAQCAtNTQ3
LDggKzUzOCw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgTm9kZSogaW5jb21pbmc7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc0NvbmNyZXRlKGRlZmVycmVkLm9wZXJhbmQob3Bl
cmFuZCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmNvbWluZyA9IG1hcHBpbmcub3Bl
cmFuZChvcGVyYW5kKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fYXJn
dW1lbnRzT25TdGFjay5jb250YWlucyhpbmNvbWluZykpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIHBoaU5vZGUsIGluY29taW5nKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElzc3VlIGEgR2V0U3RhY2sgdG8gZ2V0IHRoZSB2YWx1
ZS4gVGhpcyBtaWdodCBpbnRyb2R1Y2Ugc29tZSByZWR1bmRhbmN5CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyQmFuay5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZWdpc3RlckJhbmsuaAppbmRleCA1Njc1Y2NlZDU5MDBkOGNjYWMyZjA1
NTgzNDQ3MmNkYjUwMzFmYWM1Li5hMzMyM2U2YWNiZDVlZDA3YmZkNDQ1MzM1ZGRkOTkzYWY4MGFk
MDc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyQmFu
ay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJCYW5rLmgKQEAg
LTIzNiwxMSArMjM2LDYgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIG1fYmFuay0+aXNM
b2NrZWRBdEluZGV4KG1faW5kZXgpOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCB1bmxvY2so
KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9iYW5rLT51bmxvY2tBdElu
ZGV4KG1faW5kZXgpOwotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICB2b2lkIHJlbGVhc2Uo
KSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBtX2JhbmstPnJlbGVhc2VBdEluZGV4KG1f
aW5kZXgpOwpAQCAtMzAzLDEzICsyOTgsNiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9k
YXRhW2luZGV4XS5sb2NrQ291bnQ7CiAgICAgfQogCi0gICAgdm9pZCB1bmxvY2tBdEluZGV4KHVu
c2lnbmVkIGluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGluZGV4IDwgTlVNX1JFR1MpOwot
ICAgICAgICBBU1NFUlQobV9kYXRhW2luZGV4XS5sb2NrQ291bnQpOwotICAgICAgICAtLW1fZGF0
YVtpbmRleF0ubG9ja0NvdW50OwotICAgIH0KLQogICAgIFZpcnR1YWxSZWdpc3RlciBuYW1lQXRJ
bmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpbmRleCA8
IE5VTV9SRUdTKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NB
Q29udmVyc2lvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29u
dmVyc2lvblBoYXNlLmNwcAppbmRleCBiYWI5NTkzMTRjYzQyNzE2ZmM4ZTA5NDY2YzJlZGU1NzBj
MWFkOTk5Li5jZGUwNzQwMDdjOTY1NzQxYjNmYWI3MzQ0MmJlMDFhZmY4YzViZDVlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3Bw
CkBAIC03Myw4ICs3Myw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
Ly8gRmluZCBhbGwgU2V0TG9jYWxzIGFuZCBjcmVhdGUgRGVmcyBmb3IgdGhlbS4gV2UgaGFuZGxl
IFNldEFyZ3VtZW50IGJ5IGNyZWF0aW5nIGEKLSAgICAgICAgLy8gR2V0U3RhY2ssIGFuZCByZWNv
cmRpbmcgdGhlIGZsdXNoIGZvcm1hdC4gV2UgaGFuZGxlIEdldEFyZ3VtZW50UmVnaXN0ZXIgYnkg
ZGlyZWN0bHkKLSAgICAgICAgLy8gYWRkaW5nIHRoZSBub2RlIHRvIG1fYXJndW1lbnRNYXBwaW5n
IGhhc2ggbWFwLgorICAgICAgICAvLyBHZXRMb2NhbCwgYW5kIHJlY29yZGluZyB0aGUgZmx1c2gg
Zm9ybWF0LgogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVt
QmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCkBA
IC04NCwxNiArODMsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgLy8gYXNzaWdubWVudCBmb3Ig
ZXZlcnkgbG9jYWwuCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5v
ZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CiAgICAgICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpICE9IFNldExvY2FsICYmIG5vZGUtPm9wKCkgIT0gU2V0QXJndW1lbnQgJiYgbm9k
ZS0+b3AoKSAhPSBHZXRBcmd1bWVudFJlZ2lzdGVyKQorICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5vcCgpICE9IFNldExvY2FsICYmIG5vZGUtPm9wKCkgIT0gU2V0QXJndW1lbnQpCiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZE5vZGUgPSBu
dWxscHRyOworICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkTm9kZTsKICAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkKICAgICAgICAgICAgICAgICAgICAgY2hpbGRO
b2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPm9wKCkgPT0gR2V0QXJndW1lbnRSZWdpc3RlcikKLSAgICAgICAgICAgICAgICAgICAgbV9h
cmd1bWVudE1hcHBpbmcuYWRkKG5vZGUsIG5vZGUpOwogICAgICAgICAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7CiAg
ICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CkBAIC0xMDQsMTEgKzEwMSw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIG1f
YXJndW1lbnRHZXR0ZXJzLmFkZChjaGlsZE5vZGUpOwogICAgICAgICAgICAgICAgICAgICBtX2Fy
Z3VtZW50TWFwcGluZy5hZGQobm9kZSwgY2hpbGROb2RlKTsKICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1f
Y2FsY3VsYXRvci5uZXdEZWYoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3NzYVZhcmlhYmxl
Rm9yVmFyaWFibGUuZ2V0KHZhcmlhYmxlKSwgYmxvY2ssIGNoaWxkTm9kZSk7Ci0gICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fY2FsY3VsYXRvci5u
ZXdEZWYoCisgICAgICAgICAgICAgICAgICAgIG1fc3NhVmFyaWFibGVGb3JWYXJpYWJsZS5nZXQo
dmFyaWFibGUpLCBibG9jaywgY2hpbGROb2RlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CkBAIC0yOTksMTMg
KzI5NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gY2hpbGQ7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNhc2UgR2V0QXJndW1l
bnRSZWdpc3RlcjogewotICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAg
IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IG5vZGU7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChtX2FyZ3VtZW50R2V0dGVycy5jb250YWlucyhub2RlKSk7CiAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0
YSgpLT5sb2NhbCkgPSBub2RlOwpAQCAtMzkzLDIxICszODIsMTcgQEAgcHVibGljOgogICAgICAg
ICAgICAgYmxvY2stPnNzYSA9IHN0ZDo6bWFrZV91bmlxdWU8QmFzaWNCbG9jazo6U1NBRGF0YT4o
YmxvY2spOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRG
b3JtYXRzLnJlc2l6ZShtX2dyYXBoLm1fYXJndW1lbnRzRm9yQ2hlY2tpbmcuc2l6ZSgpKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX2FyZ3VtZW50c0ZvckNoZWNraW5nLnNp
emUoKTsgaS0tOykgeworICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzLnJlc2l6ZSht
X2dyYXBoLm1fYXJndW1lbnRzLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1f
Z3JhcGgubV9hcmd1bWVudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBGbHVzaEZvcm1h
dCBmb3JtYXQgPSBGbHVzaGVkSlNWYWx1ZTsKIAotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1f
YXJndW1lbnRNYXBwaW5nLmdldChtX2dyYXBoLm1fYXJndW1lbnRzRm9yQ2hlY2tpbmdbaV0pOwor
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fYXJndW1lbnRNYXBwaW5nLmdldChtX2dyYXBoLm1f
YXJndW1lbnRzW2ldKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bm9kZSk7Ci0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRBcmd1bWVudFJlZ2lzdGVy
KSB7Ci0gICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgIGZvcm1hdCA9IHZhcmlhYmxl
LT5mbHVzaEZvcm1hdCgpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgZm9y
bWF0ID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmZvcm1hdDsKKyAgICAgICAgICAgIGZvcm1h
dCA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5mb3JtYXQ7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbaV0gPSBmb3JtYXQ7Ci0gICAgICAgICAg
ICBtX2dyYXBoLm1fYXJndW1lbnRzRm9yQ2hlY2tpbmdbaV0gPSBub2RlOyAvLyBSZWNvcmQgdGhl
IGxvYWQgdGhhdCBsb2FkcyB0aGUgYXJndW1lbnRzIGZvciB0aGUgYmVuZWZpdCBvZiBleGl0IHBy
b2ZpbGluZy4KKyAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHNbaV0gPSBub2RlOyAvLyBS
ZWNvcmQgdGhlIGxvYWQgdGhhdCBsb2FkcyB0aGUgYXJndW1lbnRzIGZvciB0aGUgYmVuZWZpdCBv
ZiBleGl0IHByb2ZpbGluZy4KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9ncmFwaC5t
X2Zvcm0gPSBTU0E7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0
ZS5oCmluZGV4IDMyNjYxOThlMTFlMWYwMmQwMGMyYTI1YWQ3YTMxMjRjYjIxOTc1MDIuLmYzZjc4
OTI5MjhlOTY0ZjY3ZjBjZTM3MGIxMjRmZDQ3NTk2ZTNjNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0xNDcsNyArMTQ3LDYgQEAgYm9vbCBz
YWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlKQogICAgIGNhc2UgQ3JlYXRlVGhpczoKICAgICBjYXNlIEdldENhbGxlZToKICAgICBj
YXNlIEdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOgotICAgIGNhc2UgR2V0QXJndW1lbnRS
ZWdpc3RlcjoKICAgICBjYXNlIEdldFJlc3RMZW5ndGg6CiAgICAgY2FzZSBHZXRMb2NhbDoKICAg
ICBjYXNlIFNldExvY2FsOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAppbmRleCAwZTkyYzJhNmEwNDM1ODU3NmYyMmNjZDUyY2RlYjU2NGVmYTg0
OTA3Li45Y2JkZDg2MDMwY2I4YWI2MTlhMzNhYzE2ZDExMmEwNGQ0OWNmZmMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtNzQsNyAr
NzQsNiBAQCBTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsZXImIGppdCkK
ICAgICAsIG1fbGFzdEdlbmVyYXRlZE5vZGUoTGFzdE5vZGVUeXBlKQogICAgICwgbV9pbmRleElu
QmxvY2soMCkKICAgICAsIG1fZ2VuZXJhdGlvbkluZm8obV9qaXQuZ3JhcGgoKS5mcmFtZVJlZ2lz
dGVyQ291bnQoKSkKLSAgICAsIG1fYXJndW1lbnRHZW5lcmF0aW9uSW5mbyhDYWxsRnJhbWVTbG90
OjpjYWxsZWUgKyBHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzKQogICAgICwgbV9z
dGF0ZShtX2ppdC5ncmFwaCgpKQogICAgICwgbV9pbnRlcnByZXRlcihtX2ppdC5ncmFwaCgpLCBt
X3N0YXRlKQogICAgICwgbV9zdHJlYW0oJmppdC5qaXRDb2RlKCktPnZhcmlhYmxlRXZlbnRTdHJl
YW0pCkBAIC00MDgsOCArNDA3LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2xlYXJHZW5lcmF0
aW9uSW5mbygpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ2VuZXJhdGlvbklu
Zm8uc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fZ2VuZXJhdGlvbkluZm9baV0gPSBHZW5lcmF0aW9u
SW5mbygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2FyZ3VtZW50R2VuZXJhdGlv
bkluZm8uc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fYXJndW1lbnRHZW5lcmF0aW9uSW5mb1tpXSA9
IEdlbmVyYXRpb25JbmZvKCk7CiAgICAgbV9ncHJzID0gUmVnaXN0ZXJCYW5rPEdQUkluZm8+KCk7
CiAgICAgbV9mcHJzID0gUmVnaXN0ZXJCYW5rPEZQUkluZm8+KCk7CiB9CkBAIC0xMjAyLDI1ICsx
MTk5LDYgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGRhdGFGb3JtYXRTdHJpbmcoRGF0YUZvcm1hdCBm
b3JtYXQpCiAgICAgcmV0dXJuIHN0cmluZ3NbZm9ybWF0XTsKIH0KIAotc3RhdGljIHZvaWQgZHVt
cFJlZ2lzdGVySW5mbyhHZW5lcmF0aW9uSW5mbyYgaW5mbywgdW5zaWduZWQgaW5kZXgpCi17Ci0g
ICAgaWYgKGluZm8uYWxpdmUoKSkKLSAgICAgICAgZGF0YUxvZ0YoIiAgICAlIDNkOiVzJXMiLCBp
bmRleCwgZGF0YUZvcm1hdFN0cmluZyhpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpLCBkYXRhRm9ybWF0
U3RyaW5nKGluZm8uc3BpbGxGb3JtYXQoKSkpOwotICAgIGVsc2UKLSAgICAgICAgZGF0YUxvZ0Yo
IiAgICAlIDNkOltfX11bX19dIiwgaW5kZXgpOwotICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0
KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkKLSAgICAgICAgZGF0YUxvZ0YoIjpmcHIlZFxuIiwgaW5m
by5mcHIoKSk7Ci0gICAgZWxzZSBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3Jt
YXROb25lCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgJiYgIShpbmZvLnJlZ2lzdGVy
Rm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpCi0jZW5kaWYKLSAgICAgICAgKSB7Ci0gICAgICAgIEFT
U0VSVChpbmZvLmdwcigpICE9IEludmFsaWRHUFJSZWcpOwotICAgICAgICBkYXRhTG9nRigiOiVz
XG4iLCBHUFJJbmZvOjpkZWJ1Z05hbWUoaW5mby5ncHIoKSkpOwotICAgIH0gZWxzZQotICAgICAg
ICBkYXRhTG9nRigiXG4iKTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZHVtcChjb25zdCBj
aGFyKiBsYWJlbCkKIHsKICAgICBpZiAobGFiZWwpCkBAIC0xMjMwLDE1ICsxMjA4LDI1IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmR1bXAoY29uc3QgY2hhciogbGFiZWwpCiAgICAgbV9ncHJzLmR1
bXAoKTsKICAgICBkYXRhTG9nRigiICBmcHJzOlxuIik7CiAgICAgbV9mcHJzLmR1bXAoKTsKLQot
ICAgIGRhdGFMb2dGKCIgIEFyZ3VtZW50IFZpcnR1YWxSZWdpc3RlcnM6XG4iKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hcmd1bWVudEdlbmVyYXRpb25JbmZvLnNpemUoKTsgKytp
KQotICAgICAgICBkdW1wUmVnaXN0ZXJJbmZvKG1fYXJndW1lbnRHZW5lcmF0aW9uSW5mb1tpXSwg
aSk7Ci0KLSAgICBkYXRhTG9nRigiICBMb2NhbCBWaXJ0dWFsUmVnaXN0ZXJzOlxuIik7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ2VuZXJhdGlvbkluZm8uc2l6ZSgpOyArK2kpCi0g
ICAgICAgIGR1bXBSZWdpc3RlckluZm8obV9nZW5lcmF0aW9uSW5mb1tpXSwgaSk7Ci0KKyAgICBk
YXRhTG9nRigiICBWaXJ0dWFsUmVnaXN0ZXJzOlxuIik7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fZ2VuZXJhdGlvbkluZm8uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgR2VuZXJhdGlv
bkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW2ldOworICAgICAgICBpZiAoaW5mby5hbGl2
ZSgpKQorICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAlIDNkOiVzJXMiLCBpLCBkYXRhRm9ybWF0
U3RyaW5nKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSksIGRhdGFGb3JtYXRTdHJpbmcoaW5mby5zcGls
bEZvcm1hdCgpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgJSAz
ZDpbX19dW19fXSIsIGkpOworICAgICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERh
dGFGb3JtYXREb3VibGUpCisgICAgICAgICAgICBkYXRhTG9nRigiOmZwciVkXG4iLCBpbmZvLmZw
cigpKTsKKyAgICAgICAgZWxzZSBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3Jt
YXROb25lCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgICAgICYmICEoaW5mby5yZWdp
c3RlckZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKQorI2VuZGlmCisgICAgICAgICAgICApIHsKKyAg
ICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpICE9IEludmFsaWRHUFJSZWcpOworICAgICAgICAg
ICAgZGF0YUxvZ0YoIjolc1xuIiwgR1BSSW5mbzo6ZGVidWdOYW1lKGluZm8uZ3ByKCkpKTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsKKyAgICB9CiAgICAgaWYg
KGxhYmVsKQogICAgICAgICBkYXRhTG9nRigiPC8lcz5cbiIsIGxhYmVsKTsKIH0KQEAgLTE2ODks
OSArMTY3Nyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2soKQog
ICAgIAogICAgIG1faml0LmJsb2NrSGVhZHMoKVttX2Jsb2NrLT5pbmRleF0gPSBtX2ppdC5sYWJl
bCgpOwogCi0gICAgaWYgKCFtX2Jsb2NrLT5pbmRleCkKLSAgICAgICAgY2hlY2tBcmd1bWVudFR5
cGVzKCk7Ci0KICAgICBpZiAoIW1fYmxvY2stPmludGVyc2VjdGlvbk9mQ0ZBSGFzVmlzaXRlZCkg
ewogICAgICAgICAvLyBEb24ndCBnZW5lcmF0ZSBjb2RlIGZvciBiYXNpYyBibG9ja3MgdGhhdCBh
cmUgdW5yZWFjaGFibGUgYWNjb3JkaW5nIHRvIENGQS4KICAgICAgICAgLy8gQnV0IHRvIGJlIHN1
cmUgdGhhdCBub2JvZHkgaGFzIGdlbmVyYXRlZCBhIGp1bXAgdG8gdGhpcyBibG9jaywgZHJvcCBp
biBhCkBAIC0xNzAyLDkgKzE2ODcsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3Vy
cmVudEJsb2NrKCkKIAogICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6
cmVzZXQoKSk7CiAgICAgCi0gICAgaWYgKCFtX2Jsb2NrLT5pbmRleCkKLSAgICAgICAgc2V0dXBB
cmd1bWVudFJlZ2lzdGVyc0ZvckVudHJ5KCk7Ci0gICAgCiAgICAgbV9qaXQuaml0QXNzZXJ0SGFz
VmFsaWRDYWxsRnJhbWUoKTsKICAgICBtX2ppdC5qaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAg
IG1faml0LmppdEFzc2VydEFyZ3VtZW50Q291bnRTYW5lKCk7CkBAIC0xNzE0LDIxICsxNjk2LDYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jaygpCiAgICAgCiAgICAg
Zm9yIChzaXplX3QgaSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zaXplKCk7IGktLTspIHsK
ICAgICAgICAgaW50IG9wZXJhbmQgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZv
ckluZGV4KGkpOwotICAgICAgICBpZiAoIW1fYmxvY2stPmluZGV4ICYmIG9wZXJhbmRJc0FyZ3Vt
ZW50KG9wZXJhbmQpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudCA9IG1fYmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudEZvckluZGV4KGkpOwotICAgICAgICAgICAgTm9kZSog
YXJndW1lbnROb2RlID0gbV9qaXQuZ3JhcGgoKS5tX2FyZ3VtZW50c0ZvckNoZWNraW5nW2FyZ3Vt
ZW50XTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGFyZ3VtZW50Tm9kZSAmJiBhcmd1
bWVudE5vZGUtPm9wKCkgPT0gR2V0QXJndW1lbnRSZWdpc3RlcikgewotICAgICAgICAgICAgICAg
IGlmICghYXJndW1lbnROb2RlLT5yZWZDb3VudCgpKQotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsgLy8gTm8gbmVlZCB0byByZWNvcmQgZGVhZCBHZXRBcmd1bWVudFJlZ2lzdGVycydzLgot
ICAgICAgICAgICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coCi0gICAgICAgICAgICAgICAg
ICAgIFZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQoCi0gICAgICAgICAgICAgICAgICAgICAgICBNaW5p
ZmllZElEKGFyZ3VtZW50Tm9kZSksCi0gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudE5v
ZGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhl
YWRbaV07CiAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBObyBu
ZWVkIHRvIHJlY29yZCBkZWFkIFNldExvY2FsJ3MuCkBAIC0xODE1LDE1ICsxNzgyLDEzIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygpCiAgICAgbV9vcmlnaW4gPSBO
b2RlT3JpZ2luKENvZGVPcmlnaW4oMCksIENvZGVPcmlnaW4oMCksIHRydWUpOwogCiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyArK2kp
IHsKLSAgICAgICAgTm9kZSogbm9kZSA9IG1faml0LmdyYXBoKCkubV9hcmd1bWVudHNGb3JDaGVj
a2luZ1tpXTsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1faml0LmdyYXBoKCkubV9hcmd1bWVudHNb
aV07CiAgICAgICAgIGlmICghbm9kZSkgewogICAgICAgICAgICAgLy8gVGhlIGFyZ3VtZW50IGlz
IGRlYWQuIFdlIGRvbid0IGRvIGFueSBjaGVja3MgZm9yIHN1Y2ggYXJndW1lbnRzLgogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEFTU0VSVChub2Rl
LT5vcCgpID09IFNldEFyZ3VtZW50Ci0gICAgICAgICAgICB8fCAobm9kZS0+b3AoKSA9PSBTZXRM
b2NhbCAmJiBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBHZXRBcmd1bWVudFJlZ2lzdGVyKQotICAg
ICAgICAgICAgfHwgbm9kZS0+b3AoKSA9PSBHZXRBcmd1bWVudFJlZ2lzdGVyKTsKKyAgICAgICAg
QVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOwogICAgICAgICBBU1NFUlQobm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSk7CiAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKQEAgLTE4MzQsNDQgKzE3
OTksMjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKCkKICAgICAg
ICAgCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSB2YXJpYWJsZUFj
Y2Vzc0RhdGEtPmxvY2FsKCk7CiAKLSAgICAgICAgSlNWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZTsK
LQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIEdQUlJlZyBhcmd1bWVudFJlZ2lzdGVyID0g
SW52YWxpZEdQUlJlZzsKLQotI2lmIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJ
U1RFUlMKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpKSA8IE5VTUJFUl9PRl9K
U19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMpIHsKLSAgICAgICAgICAgIGFyZ3VtZW50UmVn
aXN0ZXIgPSBhcmd1bWVudFJlZ2lzdGVyRm9yRnVuY3Rpb25Bcmd1bWVudChpKTsKLSAgICAgICAg
ICAgIHZhbHVlU291cmNlID0gSlNWYWx1ZVNvdXJjZShhcmd1bWVudFJlZ2lzdGVyKTsKLSAgICAg
ICAgfSBlbHNlCi0jZW5kaWYKLSNlbmRpZgotICAgICAgICAgICAgdmFsdWVTb3VyY2UgPSBKU1Zh
bHVlU291cmNlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlcikpOwotCisg
ICAgICAgIEpTVmFsdWVTb3VyY2UgdmFsdWVTb3VyY2UgPSBKU1ZhbHVlU291cmNlKEpJVENvbXBp
bGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlcikpOworICAgICAgICAKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgICAgICBjYXNlIEZsdXNoZWRJ
bnQzMjogewotICAgICAgICAgICAgaWYgKGFyZ3VtZW50UmVnaXN0ZXIgIT0gSW52YWxpZEdQUlJl
ZykKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIHZhbHVlU291cmNl
LCBub2RlLCBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZ3VtZW50UmVn
aXN0ZXIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgdmFsdWVTb3VyY2Us
IG5vZGUsIG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIHZhbHVlU291cmNl
LCBub2RlLCBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIEpJVENvbXBpbGVy
OjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3RlcikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGbHVz
aGVkQm9vbGVhbjogewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAg
ICAgICAgICBpZiAoYXJndW1lbnRSZWdpc3RlciAhPSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUoYXJndW1lbnRSZWdpc3RlciwgdGVtcC5ncHIoKSk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjphZGRy
ZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOworICAgICAgICAgICAgbV9qaXQu
bG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3By
KCkpOwogICAgICAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KFZhbHVlRmFsc2UpKSwgdGVtcC5ncHIoKSk7CiAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIHZhbHVlU291cmNlLCBub2RlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90Pih+MSkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIEZsdXNoZWRDZWxsOiB7Ci0gICAgICAgICAgICBpZiAoYXJndW1lbnRSZWdpc3RlciAh
PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgdmFsdWVTb3VyY2UsIG5vZGUsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybywgYXJndW1lbnRSZWdpc3RlciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCB2YWx1ZVNvdXJjZSwgbm9kZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgdmFsdWVTb3VyY2UsIG5vZGUsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybywgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgR1BSSW5m
bzo6dGFnTWFza1JlZ2lzdGVyKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBkZWZhdWx0OgpAQCAtMTkwMiwzOCArMTg0NiwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjpjaGVja0FyZ3VtZW50VHlwZXMoKQogICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbigpOwogfQog
Ci12b2lkIFNwZWN1bGF0aXZlSklUOjpzZXR1cEFyZ3VtZW50UmVnaXN0ZXJzRm9yRW50cnkoKQot
ewotI2lmIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMKLSAgICBCYXNp
Y0Jsb2NrKiBmaXJzdEJsb2NrID0gbV9qaXQuZ3JhcGgoKS5ibG9jaygwKTsKLQotICAgIC8vIEZJ
WE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzIwCi0gICAg
Ly8gV2Ugc2hvdWxkIHNjYW4gbV9hcmd1ZW1udHNGb3JDaGVja2luZyBpbnN0ZWFkIG9mIGxvb2tp
bmcgZm9yIEdldEFyZ3VtZW50UmVnaXN0ZXIKLSAgICAvLyBub2RlcyBpbiB0aGUgcm9vdCBibG9j
ay4KLSAgICBmb3IgKHNpemVfdCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBmaXJz
dEJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBm
aXJzdEJsb2NrLT5hdChpbmRleEluQmxvY2spOwotCi0gICAgICAgIGlmIChub2RlLT5vcCgpID09
IEdldEFyZ3VtZW50UmVnaXN0ZXIpIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0
dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgICAgIEdlbmVy
YXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHZpcnR1
YWxSZWdpc3Rlcik7Ci0gICAgICAgICAgICBHUFJSZWcgYXJndW1lbnRSZWcgPSBHUFJJbmZvOjp0
b0FyZ3VtZW50UmVnaXN0ZXIobm9kZS0+YXJndW1lbnRSZWdpc3RlckluZGV4KCkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoYXJndW1lbnRSZWcgIT0gSW52YWxpZEdQUlJlZyk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVCghbV9ncHJzLmlzTG9ja2VkKGFyZ3Vt
ZW50UmVnKSk7Ci0gICAgICAgICAgICBtX2dwcnMuYWxsb2NhdGVTcGVjaWZpYyhhcmd1bWVudFJl
Zyk7Ci0gICAgICAgICAgICBtX2dwcnMucmV0YWluKGFyZ3VtZW50UmVnLCB2aXJ0dWFsUmVnaXN0
ZXIsIFNwaWxsT3JkZXJKUyk7Ci0gICAgICAgICAgICBpbmZvLmluaXRBcmd1bWVudFJlZ2lzdGVy
VmFsdWUobm9kZSwgbm9kZS0+cmVmQ291bnQoKSwgYXJndW1lbnRSZWcsIERhdGFGb3JtYXRKUyk7
Ci0gICAgICAgICAgICBpbmZvLm5vdGljZU9TUkJpcnRoKCptX3N0cmVhbSwgbm9kZSwgdmlydHVh
bFJlZ2lzdGVyKTsKLSAgICAgICAgICAgIC8vIERvbid0IGxlYXZlIGFyZ3VtZW50IHJlZ2lzdGVy
cyBsb2NrZWQuCi0gICAgICAgICAgICBtX2dwcnMudW5sb2NrKGFyZ3VtZW50UmVnKTsKLSAgICAg
ICAgfQotICAgIH0KLSNlbmRpZgotfQotCiBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKCkK
IHsKKyAgICBjaGVja0FyZ3VtZW50VHlwZXMoKTsKKyAgICAKICAgICBBU1NFUlQoIW1fY3VycmVu
dE5vZGUpOwogICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8
IG1faml0LmdyYXBoKCkubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewogICAgICAgICBtX2pp
dC5zZXRGb3JCbG9ja0luZGV4KGJsb2NrSW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCmluZGV4IGYyMTU3ODZhMmE1ZjhlZDNmNjIxNjY2ZTZj
Mjg1ZDliYWRjNzkzNWMuLmRlMDA2Y2NmMjE5OTNjNGM5NWZhNTEyMTFiOTI0OTA5NWQzNmNkZmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKQEAg
LTEyOCw3ICsxMjgsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgR1BSUmVnIGZpbGxKU1ZhbHVlKEVkZ2UsIEdQUlJlZyBncHJUb1VzZSA9IEludmFsaWRH
UFJSZWcpOworICAgIEdQUlJlZyBmaWxsSlNWYWx1ZShFZGdlKTsKICNlbGlmIFVTRShKU1ZBTFVF
MzJfNjQpCiAgICAgYm9vbCBmaWxsSlNWYWx1ZShFZGdlLCBHUFJSZWcmLCBHUFJSZWcmLCBGUFJS
ZWcmKTsKICNlbmRpZgpAQCAtMjAwLDkgKzIwMCw2IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoREZH
X1JFR0lTVEVSX0FMTE9DQVRJT05fVkFMSURBVElPTikKICAgICAgICAgbV9qaXQuYWRkUmVnaXN0
ZXJBbGxvY2F0aW9uQXRPZmZzZXQobV9qaXQuZGVidWdPZmZzZXQoKSk7CiAjZW5kaWYKLSAgICAg
ICAgaWYgKHNwZWNpZmljID09IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICByZXR1cm4gYWxs
b2NhdGUoKTsKLQogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxNZSA9IG1fZ3Bycy5hbGxv
Y2F0ZVNwZWNpZmljKHNwZWNpZmljKTsKICAgICAgICAgaWYgKHNwaWxsTWUuaXNWYWxpZCgpKSB7
CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTMxOCw4ICszMTUsNiBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGNoZWNrQXJndW1lbnRUeXBlcygpOwogCi0gICAgdm9pZCBzZXR1cEFyZ3VtZW50UmVn
aXN0ZXJzRm9yRW50cnkoKTsKLQogICAgIHZvaWQgY2xlYXJHZW5lcmF0aW9uSW5mbygpOwogCiAg
ICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCB3aGVuIGdlbmVyYXRpbmcgJ3VuZXhwZWN0ZWQn
CkBAIC00OTAsOSArNDg1LDYgQEAgcHVibGljOgogICAgIC8vIFNwaWxsIGEgVmlydHVhbFJlZ2lz
dGVyIHRvIHRoZSBKU1N0YWNrLgogICAgIHZvaWQgc3BpbGwoVmlydHVhbFJlZ2lzdGVyIHNwaWxs
TWUpCiAgICAgewotICAgICAgICBpZiAoc3BpbGxNZS5pc0FyZ3VtZW50KCkgJiYgbV9ibG9jay0+
aW5kZXggPiAwKQotICAgICAgICAgICAgcmV0dXJuOwotCiAgICAgICAgIEdlbmVyYXRpb25JbmZv
JiBpbmZvID0gZ2VuZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHNwaWxsTWUpOwogCiAj
aWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTI4ODEsMTAgKzI4NzMsNyBAQCBwdWJsaWM6CiAKICAg
ICBHZW5lcmF0aW9uSW5mbyYgZ2VuZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgewotICAgICAgICBpZiAodmlydHVhbFJl
Z2lzdGVyLmlzTG9jYWwoKSkKLSAgICAgICAgICAgIHJldHVybiBtX2dlbmVyYXRpb25JbmZvW3Zp
cnR1YWxSZWdpc3Rlci50b0xvY2FsKCldOwotICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVy
LmlzQXJndW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50R2VuZXJhdGlvbkluZm9b
dmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpXTsKKyAgICAgICAgcmV0dXJuIG1fZ2VuZXJhdGlvbklu
Zm9bdmlydHVhbFJlZ2lzdGVyLnRvTG9jYWwoKV07CiAgICAgfQogICAgIAogICAgIEdlbmVyYXRp
b25JbmZvJiBnZW5lcmF0aW9uSW5mbyhOb2RlKiBub2RlKQpAQCAtMjkwNyw3ICsyODk2LDYgQEAg
cHVibGljOgogICAgIHVuc2lnbmVkIG1faW5kZXhJbkJsb2NrOwogICAgIC8vIFZpcnR1YWwgYW5k
IHBoeXNpY2FsIHJlZ2lzdGVyIG1hcHMuCiAgICAgVmVjdG9yPEdlbmVyYXRpb25JbmZvLCAzMj4g
bV9nZW5lcmF0aW9uSW5mbzsKLSAgICBWZWN0b3I8R2VuZXJhdGlvbkluZm8sIDg+IG1fYXJndW1l
bnRHZW5lcmF0aW9uSW5mbzsKICAgICBSZWdpc3RlckJhbms8R1BSSW5mbz4gbV9ncHJzOwogICAg
IFJlZ2lzdGVyQmFuazxGUFJJbmZvPiBtX2ZwcnM7CiAKQEAgLTMwMDYsMjAgKzI5OTQsNiBAQCBw
dWJsaWM6CiAjZW5kaWYKICAgICB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGV4cGxpY2l0
IEpTVmFsdWVPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSwgR1BSUmVnIHJl
Z1RvVXNlKQotICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX2VkZ2UoZWRnZSkKLSAg
ICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKG1faml0KTsKLSAgICAgICAgaWYgKCFlZGdlKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBpZiAoaml0LT5pc0ZpbGxlZChub2RlKCkpIHx8IHJlZ1RvVXNlICE9IEludmFsaWRHUFJS
ZWcpCi0gICAgICAgICAgICBncHJVc2VTcGVjaWZpYyhyZWdUb1VzZSk7Ci0gICAgfQotI2VuZGlm
Ci0gICAgCiAgICAgfkpTVmFsdWVPcGVyYW5kKCkKICAgICB7CiAgICAgICAgIGlmICghbV9lZGdl
KQpAQCAtMzA1NiwxMiArMzAzMCw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZ3ByT3JJbnZh
bGlkID0gbV9qaXQtPmZpbGxKU1ZhbHVlKG1fZWRnZSk7CiAgICAgICAgIHJldHVybiBtX2dwck9y
SW52YWxpZDsKICAgICB9Ci0gICAgR1BSUmVnIGdwclVzZVNwZWNpZmljKEdQUlJlZyByZWdUb1Vz
ZSkKLSAgICB7Ci0gICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQot
ICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbEpTVmFsdWUobV9lZGdlLCBy
ZWdUb1VzZSk7Ci0gICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKLSAgICB9CiAgICAgSlNW
YWx1ZVJlZ3MganNWYWx1ZVJlZ3MoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEpTVmFsdWVSZWdz
KGdwcigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCmluZGV4IDM4MzQ3NjdkY2U4YmYyYzVkY2IxMWZmNmIyNTRmYmI1NDBl
Y2VjOWYuLjczZmIzNjgyMWM4ZjJlZDQxYzJiYmQ0OTM3ODBjMTRhZTE4NjhlZjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cApAQCAtOTMyLDcgKzkzMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUq
IG5vZGUpCiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0LnJlY29yZENhbGxTaXRl
QW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChkeW5hbWljT3JpZ2lu
LCBtX3N0cmVhbS0+c2l6ZSgpKTsKICAgICAKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2pp
dC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKGNh
bGxUeXBlLCBTdGFja0FyZ3MsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2FsbGVlUGF5bG9hZEdQ
Uik7CisgICAgaW5mby0+c2V0VXBDYWxsKGNhbGxUeXBlLCBub2RlLT5vcmlnaW4uc2VtYW50aWMs
IGNhbGxlZVBheWxvYWRHUFIpOwogICAgIAogICAgIGF1dG8gc2V0UmVzdWx0QW5kUmVzZXRTdGFj
ayA9IFsmXSAoKSB7CiAgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdFBheWxvYWQo
dGhpcyk7CkBAIC0xMDgxLDcgKzEwODEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2Fs
bChOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OwogICAgIH0KIAotICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
aW5mbyksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBKSVRDb21waWxl
cjo6Q2FsbCBzbG93Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7CiAKICAgICBkb25lLmxpbmsoJm1f
aml0KTsKQEAgLTU2MjQsNyArNTYyNCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICBjYXNlIEtpbGxTdGFjazoKICAgICBjYXNlIEdldFN0YWNrOgogICAg
IGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgotICAgIGNhc2UgR2V0QXJndW1lbnRSZWdpc3RlcjoK
ICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgogICAgIGNhc2UgUGhhbnRv
bUNyZWF0ZVJlc3Q6CiAgICAgY2FzZSBQaGFudG9tU3ByZWFkOgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggYmVlN2VkZTg5NDVm
OTFhNWVmMjg2Zjg2YTdhMThmM2QwM2Y0MjYxYi4uOTc1YmUyOTJmZGEwODBhMjEzYmEzOGYzNmE4
YWNhYzhjNzM3NTMzNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCkBAIC04MCwxNCArODAsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Ym94SW50NTIoR1BSUmVnIHNvdXJjZUdQUiwgR1BSUmVnIHRhcmdldEdQUiwgRGF0YUZvcm1h
dCBmb3IKICAgICB1bmxvY2soZnByKTsKIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxs
SlNWYWx1ZShFZGdlIGVkZ2UsIEdQUlJlZyBncHJUb1VzZSkKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbEpTVmFsdWUoRWRnZSBlZGdlKQogewogICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYg
aW5mbyA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIp
OwogICAgIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBE
YXRhRm9ybWF0Tm9uZTogewotICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoZ3ByVG9Vc2Up
OworICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAogICAgICAgICBpZiAoZWRnZS0+
aGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gZWRnZS0+YXNK
U1ZhbHVlKCk7CkBAIC0xMjAsMTIgKzEyMCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bEpTVmFsdWUoRWRnZSBlZGdlLCBHUFJSZWcgZ3ByVG9Vc2UpCiAgICAgICAgIC8vIElmIHRoZSBy
ZWdpc3RlciBoYXMgYWxyZWFkeSBiZWVuIGxvY2tlZCB3ZSBuZWVkIHRvIHRha2UgYSBjb3B5Lgog
ICAgICAgICAvLyBJZiBub3QsIHdlJ2xsIHplcm8gZXh0ZW5kIGluIHBsYWNlLCBzbyBtYXJrIG9u
IHRoZSBpbmZvIHRoYXQgdGhpcyBpcyBub3cgdHlwZSBEYXRhRm9ybWF0SW50MzIsIG5vdCBEYXRh
Rm9ybWF0SlNJbnQzMi4KICAgICAgICAgaWYgKG1fZ3Bycy5pc0xvY2tlZChncHIpKSB7Ci0gICAg
ICAgICAgICBHUFJSZWcgcmVzdWx0ID0gYWxsb2NhdGUoZ3ByVG9Vc2UpOwotICAgICAgICAgICAg
bV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwciwgcmVzdWx0KTsK
LSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGdwclRv
VXNlICE9IEludmFsaWRHUFJSZWcgJiYgZ3ByICE9IGdwclRvVXNlKSB7Ci0gICAgICAgICAgICBH
UFJSZWcgcmVzdWx0ID0gYWxsb2NhdGUoZ3ByVG9Vc2UpOworICAgICAgICAgICAgR1BSUmVnIHJl
c3VsdCA9IGFsbG9jYXRlKCk7CiAgICAgICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlciwgZ3ByLCByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICAgICAgfQpAQCAtMTQzLDExICsxMzgsNiBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxKU1ZhbHVlKEVkZ2UgZWRnZSwgR1BSUmVnIGdwclRvVXNlKQogICAgIGNhc2UgRGF0YUZv
cm1hdEpTQ2VsbDoKICAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46IHsKICAgICAgICAgR1BS
UmVnIGdwciA9IGluZm8uZ3ByKCk7Ci0gICAgICAgIGlmIChncHJUb1VzZSAhPSBJbnZhbGlkR1BS
UmVnICYmIGdwciAhPSBncHJUb1VzZSkgewotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IGFs
bG9jYXRlKGdwclRvVXNlKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoZ3ByLCByZXN1bHQpOwot
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQogICAgICAgICBtX2dwcnMubG9j
ayhncHIpOwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KQEAgLTY0Miw3ICs2MzIsNiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWlzY1N0cmljdEVxKE5vZGUqIG5vZGUpCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogewogICAgIENhbGxMaW5rSW5m
bzo6Q2FsbFR5cGUgY2FsbFR5cGU7Ci0gICAgQXJndW1lbnRzTG9jYXRpb24gYXJndW1lbnRzTG9j
YXRpb24gPSBTdGFja0FyZ3M7CiAgICAgYm9vbCBpc1ZhcmFyZ3MgPSBmYWxzZTsKICAgICBib29s
IGlzRm9yd2FyZFZhcmFyZ3MgPSBmYWxzZTsKICAgICBib29sIGlzVGFpbCA9IGZhbHNlOwpAQCAt
NzI1LDExICs3MTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2Rl
KQogCiAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IEludmFsaWRHUFJSZWc7CiAgICAgQ2FsbEZyYW1l
U2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7Ci0gICAgc3RkOjpvcHRpb25hbDxKU1ZhbHVlT3BlcmFu
ZD4gdGFpbENhbGxlZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEdQUlRlbXBvcmFyeT4gY2FsbGVlR1BS
VGVtcG9yYXJ5OwotCi0gICAgaW5jcmVtZW50Q291bnRlcigmbV9qaXQsIFZNOjpERkdDYWxsZXIp
OwotCisgICAgCiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBudWxscHRyOwogICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gbnVsbHB0cjsKICAgICBp
ZiAoaXNEaXJlY3QpIHsKQEAgLTc0OCw3ICs3MzMsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSOwogICAgICAgICB1
bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cyA9IG1faml0LmdyYXBoKCkubV9uZXh0TWFjaGluZUxv
Y2FsOwogICAgICAgICAKLSAgICAgICAgaW5jcmVtZW50Q291bnRlcigmbV9qaXQsIFZNOjpDYWxs
VmFyYXJncyk7CiAgICAgICAgIGlmIChpc0ZvcndhcmRWYXJhcmdzKSB7CiAgICAgICAgICAgICBm
bHVzaFJlZ2lzdGVycygpOwogICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMygpKQpAQCAtODU3
LDI1ICs4NDEsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgICAgIGluY3JlbWVu
dENvdW50ZXIoJm1faml0LCBWTTo6VGFpbENhbGwpOwogICAgICAgICAgICAgRWRnZSBjYWxsZWVF
ZGdlID0gbV9qaXQuZ3JhcGgoKS5jaGlsZChub2RlLCAwKTsKLSAgICAgICAgICAgIC8vIFdlIGNh
bid0IGdldCB0aGUgYSBzcGVjaWZpYyByZWdpc3RlciBmb3IgdGhlIGNhbGxlZSwgc2luY2UgdGhh
dCB3aWxsIGp1c3QgbW92ZQotICAgICAgICAgICAgLy8gZnJvbSBhbnkgY3VycmVudCByZWdpc3Rl
ci4gIFdoZW4gd2Ugc2lsZW50IGZpbGwgaW4gdGhlIHNsb3cgcGF0aCB3ZSdsbCBmaWxsCi0gICAg
ICAgICAgICAvLyB0aGUgb3JpZ2luYWwgcmVnaXN0ZXIgYW5kIHdvbid0IGhhdmUgdGhlIGNhbGxl
ZSBpbiB0aGUgcmlnaHQgcmVnaXN0ZXIuCi0gICAgICAgICAgICAvLyBUaGVyZWZvcmUgd2UgYWxs
b2NhdGUgYSB0ZW1wIHJlZ2lzdGVyIGZvciB0aGUgY2FsbGVlIGFuZCBtb3ZlIG91cnNlbHZlcy4K
LSAgICAgICAgICAgIHRhaWxDYWxsZWUuZW1wbGFjZSh0aGlzLCBjYWxsZWVFZGdlKTsKLSAgICAg
ICAgICAgIEdQUlJlZyB0YWlsQ2FsbGVlR1BSID0gdGFpbENhbGxlZS0+Z3ByKCk7Ci0gICAgICAg
ICAgICBjYWxsZWVHUFIgPSBhcmd1bWVudFJlZ2lzdGVyRm9yQ2FsbGVlKCk7Ci0gICAgICAgICAg
ICBpZiAodGFpbENhbGxlZUdQUiAhPSBjYWxsZWVHUFIpCi0gICAgICAgICAgICAgICAgY2FsbGVl
R1BSVGVtcG9yYXJ5ID0gR1BSVGVtcG9yYXJ5KHRoaXMsIGNhbGxlZUdQUik7CisgICAgICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywgY2FsbGVlRWRnZSk7CisgICAgICAgICAgICBj
YWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7CiAgICAgICAgICAgICBpZiAoIWlzRGlyZWN0KQotICAg
ICAgICAgICAgICAgIHRhaWxDYWxsZWUtPnVzZSgpOworICAgICAgICAgICAgICAgIGNhbGxlZS51
c2UoKTsKIAotICAgICAgICAgICAgYXJndW1lbnRzTG9jYXRpb24gPSBhcmd1bWVudHNMb2NhdGlv
bkZvcihudW1BbGxvY2F0ZWRBcmdzKTsKLSAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3VtZW50
c0luUmVnaXN0ZXJzID0gYXJndW1lbnRzTG9jYXRpb24gIT0gU3RhY2tBcmdzOwogICAgICAgICAg
ICAgc2h1ZmZsZURhdGEudGFnVHlwZU51bWJlciA9IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3RlcjsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9IG1faml0LmdyYXBoKCku
ZnJhbWVSZWdpc3RlckNvdW50KCk7Ci0gICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBW
YWx1ZVJlY292ZXJ5OjppbkdQUih0YWlsQ2FsbGVlR1BSLCBEYXRhRm9ybWF0SlMpOworICAgICAg
ICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlR1BS
LCBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUobnVt
QWxsb2NhdGVkQXJncyk7CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1QYXNzZWRBcmdzOyArK2kpIHsKQEAgLTg5MCw4ICs4NjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFy
Z3NbaV0gPSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKIAogICAgICAg
ICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKG1faml0LmNvZGVCbG9j
aygpKTsKLSAgICAgICAgfSBlbHNlIGlmIChub2RlLT5vcCgpID09IENhbGxFdmFsKSB7Ci0gICAg
ICAgICAgICAvLyBDYWxsRXZhbCBpcyBoYW5kbGVkIHdpdGggdGhlIGFyZ3VtZW50cyBpbiB0aGUg
c3RhY2sKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihudW1QYXNzZWRBcmdzKSwgSklUQ29tcGlsZXI6OmNhbGxl
ZUZyYW1lUGF5bG9hZFNsb3QoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwogCiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgaSsrKSB7CkBA
IC05MDUsNTcgKzg3OCwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBu
b2RlKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1QYXNz
ZWRBcmdzOyBpIDwgbnVtQWxsb2NhdGVkQXJnczsgKytpKQogICAgICAgICAgICAgICAgIG1faml0
LnN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIEpJVENvbXBpbGVyOjpjYWxsZWVBcmd1
bWVudFNsb3QoaSkpOwotCi0gICAgICAgICAgICBpbmNyZW1lbnRDb3VudGVyKCZtX2ppdCwgVk06
OkNhbGxFdmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG51bVBhc3NlZEFyZ3M7IGktLSA+IDA7KSB7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHBs
YXRmb3JtQXJnR1BSID0gYXJndW1lbnRSZWdpc3RlckZvckZ1bmN0aW9uQXJndW1lbnQoaSk7Ci0g
ICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxk
cmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIDEgKyBpXTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBhcmcodGhpcywgYXJnRWRnZSwgcGxhdGZvcm1BcmdHUFIpOwotICAgICAgICAgICAg
ICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGFy
Z0dQUiA9PSBwbGF0Zm9ybUFyZ0dQUiB8fCBwbGF0Zm9ybUFyZ0dQUiA9PSBJbnZhbGlkR1BSUmVn
KTsKLQotICAgICAgICAgICAgICAgIC8vIE9ubHkgZnJlZSB0aGUgbm9uLWFyZ3VtZW50IHJlZ2lz
dGVycyBhdCB0aGlzIHBvaW50LgotICAgICAgICAgICAgICAgIGlmIChwbGF0Zm9ybUFyZ0dQUiA9
PSBJbnZhbGlkR1BSUmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVzZShhcmdFZGdlKTsKLSAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChhcmdHUFIsIEpJVENvbXBpbGVyOjpjYWxs
ZWVBcmd1bWVudFNsb3QoaSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgLy8gVXNlIHRoZSBhcmd1bWVudCBlZGdlcyBmb3IgYXJndW1lbnRzIHBhc3Nl
ZCBpbiByZWdpc3RlcnMuCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1QYXNzZWRB
cmdzOyBpLS0gPiAwOykgewotICAgICAgICAgICAgICAgIEdQUlJlZyBhcmdHUFIgPSBhcmd1bWVu
dFJlZ2lzdGVyRm9yRnVuY3Rpb25Bcmd1bWVudChpKTsKLSAgICAgICAgICAgICAgICBpZiAoYXJn
R1BSICE9IEludmFsaWRHUFJSZWcpIHsKLSAgICAgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdl
ID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIDEg
KyBpXTsKLSAgICAgICAgICAgICAgICAgICAgdXNlKGFyZ0VkZ2UpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IGFyZ0NvdW50KHRo
aXMsIGFyZ3VtZW50UmVnaXN0ZXJGb3JBcmd1bWVudENvdW50KCkpOwotICAgICAgICAgICAgR1BS
UmVnIGFyZ0NvdW50R1BSID0gYXJnQ291bnQuZ3ByKCk7Ci0gICAgICAgICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW0zMihudW1QYXNzZWRBcmdzKSwgYXJnQ291bnRHUFIpOwotICAgICAgICAgICAg
YXJndW1lbnRzTG9jYXRpb24gPSBhcmd1bWVudHNMb2NhdGlvbkZvcihudW1BbGxvY2F0ZWRBcmdz
KTsKLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtUGFzc2VkQXJnczsgaSA8IG51
bUFsbG9jYXRlZEFyZ3M7ICsraSkgewotICAgICAgICAgICAgICAgIEdQUlJlZyBwbGF0Zm9ybUFy
Z0dQUiA9IGFyZ3VtZW50UmVnaXN0ZXJGb3JGdW5jdGlvbkFyZ3VtZW50KGkpOwotCi0gICAgICAg
ICAgICAgICAgaWYgKHBsYXRmb3JtQXJnR1BSID09IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIEpJVENvbXBp
bGVyOjpjYWxsZWVBcmd1bWVudFNsb3QoaSkpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgYXJndW1lbnRUZW1wKHRoaXMsIHBsYXRmb3Jt
QXJnR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgYXJndW1lbnRUZW1wLmdwcigpKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAg
aWYgKCFpc1RhaWwgfHwgaXNWYXJhcmdzIHx8IGlzRm9yd2FyZFZhcmFyZ3MpIHsKICAgICAgICAg
RWRnZSBjYWxsZWVFZGdlID0gbV9qaXQuZ3JhcGgoKS5jaGlsZChub2RlLCAwKTsKLSAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNhbGxlZUVkZ2UsIGFyZ3VtZW50UmVnaXN0ZXJG
b3JDYWxsZWUoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVF
ZGdlKTsKICAgICAgICAgY2FsbGVlR1BSID0gY2FsbGVlLmdwcigpOwogICAgICAgICBjYWxsZWUu
dXNlKCk7Ci0gICAgICAgIGlmIChhcmd1bWVudHNMb2NhdGlvbiA9PSBTdGFja0FyZ3MpCi0gICAg
ICAgICAgICBtX2ppdC5zdG9yZTY0KGNhbGxlZUdQUiwgSklUQ29tcGlsZXI6OmNhbGxlZUZyYW1l
U2xvdChDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAgbV9qaXQuc3RvcmU2NChjYWxs
ZWVHUFIsIEpJVENvbXBpbGVyOjpjYWxsZWVGcmFtZVNsb3QoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KSk7CiAKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICB9CkBAIC05ODIsNyArOTEzLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICB9OwogICAg
IAogICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gbV9qaXQuY29kZUJsb2NrKCktPmFk
ZENhbGxMaW5rSW5mbygpOwotICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKGNhbGxUeXBlLCBh
cmd1bWVudHNMb2NhdGlvbiwgbV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljLCBjYWxsZWVH
UFIpOworICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKGNhbGxUeXBlLCBtX2N1cnJlbnROb2Rl
LT5vcmlnaW4uc2VtYW50aWMsIGNhbGxlZUdQUik7CiAKICAgICBpZiAobm9kZS0+b3AoKSA9PSBD
YWxsRXZhbCkgewogICAgICAgICAvLyBXZSB3YW50IHRvIGNhbGwgb3BlcmF0aW9uQ2FsbEV2YWwg
YnV0IHdlIGRvbid0IHdhbnQgdG8gb3ZlcndyaXRlIHRoZSBwYXJhbWV0ZXIgYXJlYSBpbgpAQCAt
MTAyMywxNCArOTU0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9k
ZSkKICAgICAgICAgaWYgKGlzVGFpbCkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9k
ZS0+b3AoKSA9PSBEaXJlY3RUYWlsQ2FsbCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChjYWxsZWVHUFJUZW1wb3JhcnkgIT0gc3RkOjpudWxsb3B0KQotICAgICAgICAgICAgICAgIG1f
aml0Lm1vdmUodGFpbENhbGxlZS0+Z3ByKCksIGNhbGxlZUdQUlRlbXBvcmFyeS0+Z3ByKCkpOwot
CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6UGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1wID0g
bV9qaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIG1h
aW5QYXRoID0gbV9qaXQubGFiZWwoKTsKLQotICAgICAgICAgICAgaW5jcmVtZW50Q291bnRlcigm
bV9qaXQsIFZNOjpUYWlsQ2FsbCk7Ci0gICAgICAgICAgICBpbmNyZW1lbnRDb3VudGVyKCZtX2pp
dCwgVk06OkRpcmVjdENhbGwpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5lbWl0
U3RvcmVDYWxsU2l0ZUluZGV4KGNhbGxTaXRlKTsKICAgICAgICAgICAgIApAQCAtMTA0Niw4ICs5
NzEsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25MaW5rRGlyZWN0Q2FsbCwgY2FsbExpbmtJbmZv
LCBjYWxsZWVHUFIpOwogICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlk
R1BSUmVnKTsKICAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgICAg
ICBpZiAoY2FsbGVlR1BSVGVtcG9yYXJ5ICE9IHN0ZDo6bnVsbG9wdCkKLSAgICAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKHRhaWxDYWxsZWUtPmdwcigpLCBjYWxsZWVHUFJUZW1wb3JhcnktPmdwcigp
KTsKICAgICAgICAgICAgIG1faml0Lmp1bXAoKS5saW5rVG8obWFpblBhdGgsICZtX2ppdCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIHVzZUNoaWxkcmVuKG5vZGUpOwpAQCAtMTA1OCw4ICs5
ODEsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAg
ICAKICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIG1haW5QYXRoID0gbV9qaXQubGFiZWwoKTsK
ICAgICAgICAgCi0gICAgICAgIGluY3JlbWVudENvdW50ZXIoJm1faml0LCBWTTo6RGlyZWN0Q2Fs
bCk7Ci0KICAgICAgICAgbV9qaXQuZW1pdFN0b3JlQ2FsbFNpdGVJbmRleChjYWxsU2l0ZSk7CiAg
ICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gbV9qaXQubmVhckNhbGwo
KTsKQEAgLTEwNjcsMjUgKzk4OCwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChO
b2RlKiBub2RlKQogICAgICAgICAKICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dQYXRo
ID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgaWYgKGlzWDg2KCkpCi0gICAgICAgICAgICBtX2pp
dC5wb3AoR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0KLSAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpub25BcmdHUFIw
KTsgLy8gTGluayBpbmZvIG5lZWRzIHRvIGJlIGluIG5vbkFyZ0dQUjAKLSAgICAgICAgSklUQ29t
cGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgbV9q
aXQucG9wKEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxlZUdQUikpOwogCisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTGlua0RpcmVjdENhbGwsIGNhbGxMaW5rSW5mbywg
Y2FsbGVlR1BSKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAgbV9q
aXQuanVtcCgpLmxpbmtUbyhtYWluUGF0aCwgJm1faml0KTsKICAgICAgICAgCiAgICAgICAgIGRv
bmUubGluaygmbV9qaXQpOwogICAgICAgICAKICAgICAgICAgc2V0UmVzdWx0QW5kUmVzZXRTdGFj
aygpOwotCi0gICAgICAgIG1faml0LmFkZEpTRGlyZWN0Q2FsbChjYWxsLCBzbG93Q2FsbCwgc2xv
d1BhdGgsIGNhbGxMaW5rSW5mbyk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGRKU0RpcmVj
dENhbGwoY2FsbCwgc2xvd1BhdGgsIGNhbGxMaW5rSW5mbyk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0KLSAgICBpZiAoaXNUYWlsICYmIGNhbGxlZUdQUlRlbXBvcmFyeSAhPSBzdGQ6Om51bGxv
cHQpCi0gICAgICAgIG1faml0Lm1vdmUodGFpbENhbGxlZS0+Z3ByKCksIGNhbGxlZUdQUlRlbXBv
cmFyeS0+Z3ByKCkpOwotCisgICAgCiAgICAgbV9qaXQuZW1pdFN0b3JlQ2FsbFNpdGVJbmRleChj
YWxsU2l0ZSk7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0No
ZWNrOwpAQCAtMTEwOSwyMiArMTAyNSwyMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2Fs
bChOb2RlKiBub2RlKQogCiAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAg
ICAgQ2FsbEZyYW1lU2h1ZmZsZXIgY2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRh
KTsKLSAgICAgICAgaWYgKGFyZ3VtZW50c0xvY2F0aW9uID09IFN0YWNrQXJncykKLSAgICAgICAg
ICAgIGNhbGxGcmFtZVNodWZmbGVyLnNldENhbGxlZUpTVmFsdWVSZWdzKEpTVmFsdWVSZWdzKGFy
Z3VtZW50UmVnaXN0ZXJGb3JDYWxsZWUoKSkpOworICAgICAgICBjYWxsRnJhbWVTaHVmZmxlci5z
ZXRDYWxsZWVKU1ZhbHVlUmVncyhKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMCkpOwogICAgICAg
ICBjYWxsRnJhbWVTaHVmZmxlci5wcmVwYXJlRm9yU2xvd1BhdGgoKTsKLSAgICB9IGVsc2UgaWYg
KGlzVGFpbCkKLSAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIG1faml0Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7IC8v
IENhbGxlZSBuZWVkcyB0byBiZSBpbiByZWdUMAogCi0gICAgbV9qaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpub25BcmdHUFIwKTsg
Ly8gTGluayBpbmZvIG5lZWRzIHRvIGJlIGluIG5vbkFyZ0dQUjAKKyAgICAgICAgaWYgKGlzVGFp
bCkKKyAgICAgICAgICAgIG1faml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsgLy8gVGhpcyBu
ZWVkcyB0byBoYXBwZW4gYWZ0ZXIgd2UgbW92ZWQgY2FsbGVlR1BSIHRvIHJlZ1QwCisgICAgfQor
CisgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0lu
Zm8pLCBHUFJJbmZvOjpyZWdUMik7IC8vIExpbmsgaW5mbyBuZWVkcyB0byBiZSBpbiByZWdUMgog
ICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKIAogICAg
IGRvbmUubGluaygmbV9qaXQpOwogCi0gICAgaWYgKGlzVGFpbCkgewotICAgICAgICB0YWlsQ2Fs
bGVlID0gc3RkOjpudWxsb3B0OwotICAgICAgICBjYWxsZWVHUFJUZW1wb3JhcnkgPSBzdGQ6Om51
bGxvcHQ7CisgICAgaWYgKGlzVGFpbCkKICAgICAgICAgbV9qaXQuYWJvcnRXaXRoUmVhc29uKEpJ
VERpZFJldHVybkZyb21UYWlsQ2FsbCk7Ci0gICAgfSBlbHNlCisgICAgZWxzZQogICAgICAgICBz
ZXRSZXN1bHRBbmRSZXNldFN0YWNrKCk7CiAKICAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGws
IHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBjYWxsTGlua0luZm8pOwpAQCAtNDI0OSw5ICs0MTY2
LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBi
cmVhazsKICAgICB9CiAKLSAgICBjYXNlIEdldEFyZ3VtZW50UmVnaXN0ZXI6Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOiB7CiAgICAgICAgIGNv
bXBpbGVHZXRSZXN0TGVuZ3RoKG5vZGUpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCmlu
ZGV4IDIzMTYxZmI2Y2MwMjI5OTQ2YmUxMDQyOTk3NjMxYjEwOTdhYzViODAuLjY2YzUwMDhlMjk5
NzgwNTE5ZDY4MDQ3Y2Q5MmI2ZGE1M2I3MTNkNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcApAQCAtMjc2LDkg
KzI3Niw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb2RlKiBzZXRMb2NhbCA9IG51bGxwdHI7
CiAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBtX25vZGUtPmxvY2FsKCk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChsb2NhbC5pc0FyZ3VtZW50KCkgJiYgbV9ncmFw
aC5tX3N0cmVuZ3RoUmVkdWNlQXJndW1lbnRzICE9IE9wdGltaXplQXJndW1lbnRGbHVzaGVzKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X25vZGVJbmRleDsgaS0tOykgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2Nr
LT5hdChpKTsKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCAmJiBu
b2RlLT5sb2NhbCgpID09IGxvY2FsKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1RodW5rcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5r
cy5jcHAKaW5kZXggMmJjOTgwMmQxMmY3NTc5MjgyMDY3ZGU2NzVhYTBjNGMxNzBjZDRkNi4uMzhi
ZGQxMWQxNjljNjQyYWUxMTM1MDgwNjA5OTBjNzRkNjRmZjA2MiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVGh1bmtzLmNwcApAQCAtMTMwLDMwICsxMzAsMTUgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIG9zckVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogICAgIGppdC5zdG9yZTMy
KEdQUkluZm86OnJlZ1QzLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUNCwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQs
IC1zdGF0aWNfY2FzdDxpbnRwdHJfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBzdGF0aWNfY2FzdDxp
bnRwdHJfdD4oc2l6ZW9mKGludDMyX3QpKSkpOwogICAgIGppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPigtc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KENhbGxGcmFt
ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSkpKS5saW5rVG8obG9vcCwgJmppdCk7CiAgICAgCi0g
ICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIG9m
ZnNldE9mVGFyZ2V0UEMpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBvayA9IGppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBHUFJJbmZv
Ojpub25BcmdHUFIwLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8
dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PigxMDAwKSkpKTsKKyAgICBqaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgb2Zmc2V0T2ZUYXJnZXRQQyks
IEdQUkluZm86OnJlZ1QxKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvayA9IGppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBHUFJJbmZvOjpyZWdUMSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJf
dD4oMTAwMCkpKSk7CiAgICAgaml0LmFib3J0V2l0aFJlYXNvbihERkdVbnJlYXNvbmFibGVPU1JF
bnRyeUp1bXBEZXN0aW5hdGlvbik7CiAKICAgICBvay5saW5rKCZqaXQpOwotCi0jaWYgTlVNQkVS
X09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUwotICAgIC8vIExvYWQgYXJndW1lbnQg
dmFsdWVzIGludG8gYXJndW1lbnQgcmVnaXN0ZXJzCi0gICAgaml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpLCBhcmd1bWVudFJl
Z2lzdGVyRm9yQ2FsbGVlKCkpOwotICAgIEdQUlJlZyBhcmdDb3VudFJlZyA9IGFyZ3VtZW50UmVn
aXN0ZXJGb3JBcmd1bWVudENvdW50KCk7Ci0gICAgaml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6
OnBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIGFyZ0NvdW50UmVnKTsK
LSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZUxvYWRpbmdBcmdzOwotICAg
IAotICAgIGZvciAodW5zaWduZWQgYXJnSW5kZXggPSAwOyBhcmdJbmRleCA8IE5VTUJFUl9PRl9K
U19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlM7IGFyZ0luZGV4KyspCi0gICAgICAgIGppdC5s
b2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBhcmdJbmRleCkgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpKSwgYXJndW1lbnRSZWdpc3RlckZvckZ1bmN0aW9uQXJndW1l
bnQoYXJnSW5kZXgpKTsKLSAgICAKLSAgICBkb25lTG9hZGluZ0FyZ3MubGluaygmaml0KTsKLSNl
bmRpZgotICAgIAogICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIoKTsKICAgICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3Rl
cnMoKTsKIAotICAgIGppdC5qdW1wKEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGppdC5qdW1w
KEdQUkluZm86OnJlZ1QxKTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwg
aml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCAoIkRGRyBPU1IgZW50cnkgdGh1bmsiKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAppbmRleCBmODFjMDEwYWUzOGVh
M2U1NTk2MDlmOGRhNzJhMzU0NTYxYmUzZjc3Li4xODA5NjIxNzE4ZTI2NzBmMTBlNzRjYzgxZjYy
NDNkMDdkY2JiNGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmlhYmxlRXZlbnRTdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyaWFibGVFdmVudFN0cmVhbS5jcHAKQEAgLTEzMywxMyArMTMzLDggQEAgdm9pZCBWYXJpYWJs
ZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICBpZiAoIWluZGV4KSB7CiAgICAgICAgIHZh
bHVlUmVjb3ZlcmllcyA9IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpLCBudW1WYXJpYWJsZXMpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHZhbHVlUmVjb3Zlcmllcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKGkgPCBOVU1C
RVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTKSB7Ci0gICAgICAgICAgICAgICAg
dmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoCi0gICAgICAgICAgICAg
ICAgICAgIGFyZ3VtZW50UmVnaXN0ZXJGb3JGdW5jdGlvbkFyZ3VtZW50KGkpLCBEYXRhRm9ybWF0
SlMpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YWx1ZVJlY292ZXJp
ZXNbaV0gPSBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCi0gICAgICAgICAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkp
KSwgRGF0YUZvcm1hdEpTKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhbHVlUmVjb3Zl
cmllc1tpXSA9IFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKKyAgICAgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIodmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKSks
IERhdGFGb3JtYXRKUyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE2
NiwxMiArMTYxLDYgQEAgdm9pZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAg
ICAgICAgICAgIE1pbmlmaWVkR2VuZXJhdGlvbkluZm8gaW5mbzsKICAgICAgICAgICAgIGluZm8u
dXBkYXRlKGV2ZW50KTsKICAgICAgICAgICAgIGdlbmVyYXRpb25JbmZvcy5hZGQoZXZlbnQuaWQo
KSwgaW5mbyk7Ci0gICAgICAgICAgICBNaW5pZmllZE5vZGUqIG5vZGUgPSBncmFwaC5hdChldmVu
dC5pZCgpKTsKLSAgICAgICAgICAgIGlmIChub2RlICYmIG5vZGUtPmhhc0FyZ3VtZW50SW5kZXgo
KSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gbm9kZS0+YXJndW1lbnRJ
bmRleCgpOwotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudFJlZyA9IHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KTsKLSAgICAgICAgICAgICAgICBvcGVy
YW5kU291cmNlcy5zZXRPcGVyYW5kKGFyZ3VtZW50UmVnLCBWYWx1ZVNvdXJjZShldmVudC5pZCgp
KSk7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIEZpbGw6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zp
cnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAKaW5kZXggNmVjYTIyN2Zj
ODMwYWU1OGUwNTM2ZjE2NDExMTJiOTRiN2M0YWRmMS4uZjgxMjc1OTllMDUzY2YwMTkxZTNjNGY1
YjAxY2M4NDUyNWQyOTQ1ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcApAQCAtNDIs
MzMgKzQyLDcgQEAgcHVibGljOgogICAgICAgICA6IFBoYXNlKGdyYXBoLCAidmlydHVhbCByZWdp
c3RlciBhbGxvY2F0aW9uIikKICAgICB7CiAgICAgfQotCi0gICAgdm9pZCBhbGxvY2F0ZVJlZ2lz
dGVyKFNjb3JlQm9hcmQmIHNjb3JlQm9hcmQsIE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICAv
LyBGaXJzdCwgY2FsbCB1c2Ugb24gYWxsIG9mIHRoZSBjdXJyZW50IG5vZGUncyBjaGlsZHJlbiwg
dGhlbgotICAgICAgICAvLyBhbGxvY2F0ZSBhIFZpcnR1YWxSZWdpc3RlciBmb3IgdGhpcyBub2Rl
LiBXZSBkbyBzbyBpbiB0aGlzCi0gICAgICAgIC8vIG9yZGVyIHNvIHRoYXQgaWYgYSBjaGlsZCBp
cyBvbiBpdHMgbGFzdCB1c2UsIGFuZCBhCi0gICAgICAgIC8vIFZpcnR1YWxSZWdpc3RlciBpcyBm
cmVlZCwgdGhlbiBpdCBtYXkgYmUgcmV1c2VkIGZvciBub2RlLgotICAgICAgICBpZiAobm9kZS0+
ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNo
aWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQo
KSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCi0gICAgICAgICAgICAgICAgc2Nv
cmVCb2FyZC51c2VJZkhhc1Jlc3VsdChtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhd
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlSWZIYXNSZXN1
bHQobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgc2NvcmVCb2FyZC51c2VJZkhhc1Jlc3Vs
dChub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBzY29yZUJvYXJkLnVzZUlmSGFzUmVzdWx0
KG5vZGUtPmNoaWxkMygpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbm9kZS0+aGFzUmVz
dWx0KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciA9IHNjb3JlQm9hcmQuYWxsb2NhdGUoKTsKLSAgICAgICAgbm9kZS0+c2V0
VmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIC8vICdtdXN0R2VuZXJh
dGUnIG5vZGVzIGhhdmUgdGhlaXIgdXNlQ291bnQgYXJ0aWZpY2lhbGx5IGVsZXZhdGVkLAotICAg
ICAgICAvLyBjYWxsIHVzZSBub3cgdG8gYWNjb3VudCBmb3IgdGhpcy4KLSAgICAgICAgaWYgKG5v
ZGUtPm11c3RHZW5lcmF0ZSgpKQotICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZSk7Ci0g
ICAgfQotCisgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKICAgICAgICAgREZHX0FTU0VSVCht
X2dyYXBoLCBudWxscHRyLCBtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CkBAIC04NSwx
NyArNTksNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgLy8gRm9yY2UgdXNhZ2Ugb2YgaGln
aGVzdC1udW1iZXJlZCB2aXJ0dWFsIHJlZ2lzdGVycy4KICAgICAgICAgICAgICAgICBzY29yZUJv
YXJkLnNvcnRGcmVlKCk7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEhhbmRsZSBH
ZXRBcmd1bWVudFJlZ2lzdGVyIE5vZGVzIGZpcnN0IGFzIHRoZSByZWdpc3RlciBpcyBhbGl2ZSBv
biBlbnRyeQotICAgICAgICAgICAgLy8gdG8gdGhlIGZ1bmN0aW9uIGFuZCBtYXkgbmVlZCB0byBi
ZSBzcGlsbGVkIGJlZm9yZSBhbnkgdXNlLgotICAgICAgICAgICAgaWYgKCFibG9ja0luZGV4KSB7
Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJs
b2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRBcmd1bWVudFJlZ2lzdGVyKQotICAgICAgICAgICAg
ICAgICAgICAgICAgYWxsb2NhdGVSZWdpc3RlcihzY29yZUJvYXJkLCBub2RlKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4
SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2Nr
KSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2sp
OwogICAgICAgICAKQEAgLTExMCwxNCArNzMsMzIgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+Y2hpbGQx
KCktPmhhc1Jlc3VsdCgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBHZXRBcmd1bWVudFJlZ2lzdGVyOgotICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoIWJsb2NrSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gRmlyc3QsIGNhbGwg
dXNlIG9uIGFsbCBvZiB0aGUgY3VycmVudCBub2RlJ3MgY2hpbGRyZW4sIHRoZW4KKyAgICAgICAg
ICAgICAgICAvLyBhbGxvY2F0ZSBhIFZpcnR1YWxSZWdpc3RlciBmb3IgdGhpcyBub2RlLiBXZSBk
byBzbyBpbiB0aGlzCisgICAgICAgICAgICAgICAgLy8gb3JkZXIgc28gdGhhdCBpZiBhIGNoaWxk
IGlzIG9uIGl0cyBsYXN0IHVzZSwgYW5kIGEKKyAgICAgICAgICAgICAgICAvLyBWaXJ0dWFsUmVn
aXN0ZXIgaXMgZnJlZWQsIHRoZW4gaXQgbWF5IGJlIHJldXNlZCBmb3Igbm9kZS4KKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNo
aWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJ
ZHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlSWZIYXNSZXN1bHQo
bV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2VJZkhhc1Jlc3VsdChub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlSWZIYXNSZXN1
bHQobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZUlm
SGFzUmVzdWx0KG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBpZiAoIW5vZGUtPmhhc1Jlc3VsdCgpKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICAgICAgICAgIGFsbG9jYXRlUmVnaXN0ZXIoc2NvcmVCb2FyZCwgbm9k
ZSk7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHNj
b3JlQm9hcmQuYWxsb2NhdGUoKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRWaXJ0dWFsUmVn
aXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICAvLyAnbXVzdEdlbmVyYXRl
JyBub2RlcyBoYXZlIHRoZWlyIHVzZUNvdW50IGFydGlmaWNpYWxseSBlbGV2YXRlZCwKKyAgICAg
ICAgICAgICAgICAvLyBjYWxsIHVzZSBub3cgdG8gYWNjb3VudCBmb3IgdGhpcy4KKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+bXVzdEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIHNj
b3JlQm9hcmQudXNlKG5vZGUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2NvcmVCb2Fy
ZC5hc3NlcnRDbGVhcigpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENhcGFiaWxpdGllcy5jcHAKaW5kZXggOWFiODBhYTFjZTc2NzBkYzRkNjNlYjlmYjA3YmQz
YjBlYTNkZjVjMC4uZDQyZmY0YWRhZTk3YmJiYjYwNWJiYzliOTBhMjA0NjczOTk2NDM5YyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcApAQCAtMTcy
LDcgKzE3Miw2IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiBub2Rl
KQogICAgIGNhc2UgR2V0RXhlY3V0YWJsZToKICAgICBjYXNlIEdldFNjb3BlOgogICAgIGNhc2Ug
R2V0Q2FsbGVlOgotICAgIGNhc2UgR2V0QXJndW1lbnRSZWdpc3RlcjoKICAgICBjYXNlIEdldEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOgogICAgIGNhc2UgVG9OdW1iZXI6CiAgICAgY2FzZSBU
b1N0cmluZzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29k
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCmluZGV4IDYz
ZDc0MTU3MmVhOTdkODczNjU2OWU2YWEzNGVmN2ZiZmE5MTU5ODQuLjFjZGI1MDk1NzJkOTljZTQx
NWVkNzYwMjIyZDhiYjE4NTM5OGRlYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSklUQ29kZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
SVRDb2RlLmNwcApAQCAtNDUsOCArNDUsNyBAQCBKSVRDb2RlOjp+SklUQ29kZSgpCiAgICAgICAg
IGRhdGFMb2coIkRlc3Ryb3lpbmcgRlRMIEpJVCBjb2RlIGF0ICIpOwogICAgICAgICBDb21tYVBy
aW50ZXIgY29tbWE7CiAgICAgICAgIGRhdGFMb2coY29tbWEsIG1fYjNDb2RlKTsKLSAgICAgICAg
ZGF0YUxvZyhjb21tYSwgbV9yZWdpc3RlckFyZ3NQb3NzaWJsZUV4dHJhQXJnc0VudHJ5UG9pbnQp
OwotICAgICAgICBkYXRhTG9nKGNvbW1hLCBtX3JlZ2lzdGVyQXJnc0NoZWNrQXJpdHlFbnRyeVBv
aW50KTsKKyAgICAgICAgZGF0YUxvZyhjb21tYSwgbV9hcml0eUNoZWNrRW50cnlwb2ludCk7CiAg
ICAgICAgIGRhdGFMb2coIlxuIik7CiAgICAgfQogfQpAQCAtNjEsMzAgKzYwLDMxIEBAIHZvaWQg
SklUQ29kZTo6aW5pdGlhbGl6ZUIzQnlwcm9kdWN0cyhzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlw
cm9kdWN0cz4gYnlwcm9kdWN0CiAgICAgbV9iM0J5cHJvZHVjdHMgPSBXVEZNb3ZlKGJ5cHJvZHVj
dHMpOwogfQogCi12b2lkIEpJVENvZGU6OmluaXRpYWxpemVFbnRyeXBvaW50VGh1bmsoQ29kZVJl
ZiBlbnRyeXBvaW50VGh1bmspCit2b2lkIEpJVENvZGU6OmluaXRpYWxpemVBZGRyZXNzRm9yQ2Fs
bChDb2RlUHRyIGFkZHJlc3MpCiB7Ci0gICAgbV9lbnRyeXBvaW50VGh1bmsgPSBlbnRyeXBvaW50
VGh1bms7CisgICAgbV9hZGRyZXNzRm9yQ2FsbCA9IGFkZHJlc3M7CiB9CiAKLXZvaWQgSklUQ29k
ZTo6c2V0RW50cnlGb3IoRW50cnlQb2ludFR5cGUgdHlwZSwgQ29kZVB0ciBlbnRyeSkKK3ZvaWQg
SklUQ29kZTo6aW5pdGlhbGl6ZUFyaXR5Q2hlY2tFbnRyeXBvaW50KENvZGVSZWYgZW50cnlwb2lu
dCkKIHsKLSAgICBtX2VudHJ5cG9pbnRzLnNldEVudHJ5Rm9yKHR5cGUsIGVudHJ5KTsKKyAgICBt
X2FyaXR5Q2hlY2tFbnRyeXBvaW50ID0gZW50cnlwb2ludDsKIH0KLSAgICAKLUpJVENvZGU6OkNv
ZGVQdHIgSklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoRW50cnlQb2ludFR5cGUgZW50cnlUeXBlKQor
CitKSVRDb2RlOjpDb2RlUHRyIEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2Rl
IGFyaXR5Q2hlY2spCiB7Ci0gICAgQ29kZVB0ciBlbnRyeSA9IG1fZW50cnlwb2ludHMuZW50cnlG
b3IoZW50cnlUeXBlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChlbnRyeSk7Ci0gICAgcmV0dXJuIGVu
dHJ5OworICAgIHN3aXRjaCAoYXJpdHlDaGVjaykgeworICAgIGNhc2UgQXJpdHlDaGVja05vdFJl
cXVpcmVkOgorICAgICAgICByZXR1cm4gbV9hZGRyZXNzRm9yQ2FsbDsKKyAgICBjYXNlIE11c3RD
aGVja0FyaXR5OgorICAgICAgICByZXR1cm4gbV9hcml0eUNoZWNrRW50cnlwb2ludC5jb2RlKCk7
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIENv
ZGVQdHIoKTsKIH0KIAogdm9pZCogSklUQ29kZTo6ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChz
aXplX3Qgb2Zmc2V0KQogewotI2lmIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJ
U1RFUlMKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYWRkcmVzc0ZvckNhbGwo
UmVnaXN0ZXJBcmdzQXJpdHlDaGVja05vdFJlcXVpcmVkKS5leGVjdXRhYmxlQWRkcmVzcygpKSAr
IG9mZnNldDsKLSNlbHNlCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFkZHJl
c3NGb3JDYWxsKFN0YWNrQXJnc0FyaXR5Q2hlY2tOb3RSZXF1aXJlZCkuZXhlY3V0YWJsZUFkZHJl
c3MoKSkgKyBvZmZzZXQ7Ci0jZW5kaWYKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4obV9hZGRyZXNzRm9yQ2FsbC5leGVjdXRhYmxlQWRkcmVzcygpKSArIG9mZnNldDsKIH0KIAog
dm9pZCogSklUQ29kZTo6ZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3QpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSklUQ29kZS5oCmluZGV4IDNkYjcwZGYwYzU3YWJlZmRmODU4Y2IzMjk0NzQx
YzkyYmRlOGZlMWQuLjJjMjgwOWU5NzJkMTk1ZTcxNThjNDRjNmJhNzBjM2NlZmExN2Y3YzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCkBAIC00NCw3ICs0NCw3IEBAIHB1
YmxpYzoKICAgICBKSVRDb2RlKCk7CiAgICAgfkpJVENvZGUoKTsKIAotICAgIENvZGVQdHIgYWRk
cmVzc0ZvckNhbGwoRW50cnlQb2ludFR5cGUpIG92ZXJyaWRlOworICAgIENvZGVQdHIgYWRkcmVz
c0ZvckNhbGwoQXJpdHlDaGVja01vZGUpIG92ZXJyaWRlOwogICAgIHZvaWQqIGV4ZWN1dGFibGVB
ZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkgb3ZlcnJpZGU7CiAgICAgdm9pZCogZGF0YUFk
ZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KSBvdmVycmlkZTsKICAgICB1bnNpZ25lZCBvZmZz
ZXRPZih2b2lkKiBwb2ludGVySW50b0NvZGUpIG92ZXJyaWRlOwpAQCAtNTMsOSArNTMsOSBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGluaXRpYWxpemVCM0NvZGUoQ29kZVJlZik7CiAgICAgdm9pZCBp
bml0aWFsaXplQjNCeXByb2R1Y3RzKHN0ZDo6dW5pcXVlX3B0cjxCMzo6T3BhcXVlQnlwcm9kdWN0
cz4pOwotICAgIHZvaWQgaW5pdGlhbGl6ZUVudHJ5cG9pbnRUaHVuayhDb2RlUmVmKTsKLSAgICB2
b2lkIHNldEVudHJ5Rm9yKEVudHJ5UG9pbnRUeXBlLCBDb2RlUHRyKTsKLQorICAgIHZvaWQgaW5p
dGlhbGl6ZUFkZHJlc3NGb3JDYWxsKENvZGVQdHIpOworICAgIHZvaWQgaW5pdGlhbGl6ZUFyaXR5
Q2hlY2tFbnRyeXBvaW50KENvZGVSZWYpOworICAgIAogICAgIHZvaWQgdmFsaWRhdGVSZWZlcmVu
Y2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJikgb3ZlcnJpZGU7CiAKICAgICBSZWdpc3RlclNl
dCBsaXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZShDb2Rl
QmxvY2sqLCBDYWxsU2l0ZUluZGV4KSBvdmVycmlkZTsKQEAgLTc3LDEyICs3Nyw3IEBAIHByaXZh
dGU6CiAgICAgQ29kZVB0ciBtX2FkZHJlc3NGb3JDYWxsOwogICAgIENvZGVSZWYgbV9iM0NvZGU7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpPcGFxdWVCeXByb2R1Y3RzPiBtX2IzQnlwcm9kdWN0
czsKLSAgICBDb2RlUmVmIG1fZW50cnlwb2ludFRodW5rOwotICAgIEpJVEVudHJ5UG9pbnRzIG1f
ZW50cnlwb2ludHM7Ci0gICAgQ29kZVB0ciBtX3JlZ2lzdGVyQXJnc1Bvc3NpYmxlRXh0cmFBcmdz
RW50cnlQb2ludDsKLSAgICBDb2RlUHRyIG1fcmVnaXN0ZXJBcmdzQ2hlY2tBcml0eUVudHJ5UG9p
bnQ7Ci0gICAgQ29kZVB0ciBtX3N0YWNrQXJnc0FyaXR5T0tFbnRyeVBvaW50OwotICAgIENvZGVQ
dHIgbV9zdGFja0FyZ3NDaGVja0FyaXR5RW50cnlwb2ludDsKKyAgICBDb2RlUmVmIG1fYXJpdHlD
aGVja0VudHJ5cG9pbnQ7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAKaW5kZXggOTU0NjNjM2Qy
MDBjYTA0ZGQyZWM1NjJkM2I5YThjNzAwOTJhMTMyZC4uZGNmM2RhZDFkMDI3ZDcwY2Y1MTRkMmQ4
NzNmOGVjNWQwNjQ1MDVkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExKSVRGaW5hbGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklU
RmluYWxpemVyLmNwcApAQCAtNzYsNyArNzYsNyBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxp
emVGdW5jdGlvbigpCiAgICAgICAgICAgICBkdW1wRGlzYXNzZW1ibHksICpiM0NvZGVMaW5rQnVm
ZmVyLAogICAgICAgICAgICAgKCJGVEwgQjMgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJs
b2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgp
KSkpOwogCi0gICAgaml0Q29kZS0+aW5pdGlhbGl6ZUVudHJ5cG9pbnRUaHVuaygKKyAgICBqaXRD
b2RlLT5pbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQoCiAgICAgICAgIEZJTkFMSVpFX0NP
REVfSUYoCiAgICAgICAgICAgICBkdW1wRGlzYXNzZW1ibHksICplbnRyeXBvaW50TGlua0J1ZmZl
ciwKICAgICAgICAgICAgICgiRlRMIGVudHJ5cG9pbnQgdGh1bmsgZm9yICVzIHdpdGggQjMgZ2Vu
ZXJhdGVkIGNvZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFu
LmNvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpLCBmdW5jdGlvbikpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCmluZGV4IGY5NDQ5ODQ2NzZkN2VlOTBhZTI5MGE3
MGExMjUwZDJjMmYzOTIwYWIuLmQxMWIyYTliNjdmZjg4YjcxZjNlYjYwOGE1Zjk1Y2MxZTI1MGZm
MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcApAQCAtMTI3LDExMCArMTI3
LDE0IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgCiAgICAgc3dpdGNoIChncmFwaC5t
X3BsYW4ubW9kZSkgewogICAgIGNhc2UgRlRMTW9kZTogewotICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IGZpbGxSZWdpc3RlcnNBbmRDb250aW51ZU1haW5QYXRoOwotICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IHRvTWFpblBhdGg7Ci0KLSAgICAgICAgdW5zaWduZWQgbnVtUGFy
YW1ldGVycyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSk7Ci0gICAgICAgIHVuc2lnbmVkIG1heFJlZ2lzdGVyQXJndW1lbnRDb3VudCA9IHN0ZDo6bWlu
KG51bVBhcmFtZXRlcnMsIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMp
OwotCi0gICAgICAgIEdQUlJlZyBhcmdDb3VudFJlZyA9IGFyZ3VtZW50UmVnaXN0ZXJGb3JBcmd1
bWVudENvdW50KCk7Ci0KLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCByZWdpc3RlckFyZ3Vt
ZW50c0VudHJ5cG9pbnRzW05VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMg
KyAxXTsKLQotICAgICAgICBpZiAobnVtUGFyYW1ldGVycyA8IE5VTUJFUl9PRl9KU19GVU5DVElP
Tl9BUkdVTUVOVF9SRUdJU1RFUlMpIHsKLSAgICAgICAgICAgIC8vIFNwaWxsIGFueSBleHRyYSBy
ZWdpc3RlciBhcmd1bWVudHMgcGFzc2VkIHRvIGZ1bmN0aW9uIG9udG8gdGhlIHN0YWNrLgotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdJbmRleCA9IE5VTUJFUl9PRl9KU19GVU5DVElPTl9B
UkdVTUVOVF9SRUdJU1RFUlMgLSAxOyBhcmdJbmRleCA+PSBudW1QYXJhbWV0ZXJzOyBhcmdJbmRl
eC0tKSB7Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJBcmd1bWVudHNFbnRyeXBvaW50c1thcmdJ
bmRleCArIDFdID0gaml0LmxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgaml0LmVtaXRQdXRBcmd1
bWVudFRvQ2FsbEZyYW1lQmVmb3JlUHJvbG9ndWUoYXJndW1lbnRSZWdpc3RlckZvckZ1bmN0aW9u
QXJndW1lbnQoYXJnSW5kZXgpLCBhcmdJbmRleCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpbmNyZW1lbnRDb3VudGVyKCZqaXQsIFZNOjpSZWdBcmdzRXh0cmEpOwotICAgICAgICAgICAg
dG9NYWluUGF0aC5hcHBlbmQoaml0Lmp1bXAoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IGNvbnRpbnVlVG9Bcml0eUZpeHVwOwotCi0gICAgICAgIENDYWxs
SGVscGVyczo6TGFiZWwgc3RhY2tBcmdzQ2hlY2tBcml0eUVudHJ5ID0gaml0LmxhYmVsKCk7Ci0g
ICAgICAgIGluY3JlbWVudENvdW50ZXIoJmppdCwgVk06OlN0YWNrQXJnc0FyaXR5KTsKLSAgICAg
ICAgaml0LmxvYWQzMihmcmFtZS53aXRoT2Zmc2V0KHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50KSwgR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICBjb250aW51
ZVRvQXJpdHlGaXh1cC5hcHBlbmQoaml0LmJyYW5jaDMyKAotICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpCZWxvdywgR1BSSW5mbzo6cmVnVDEsCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihudW1QYXJhbWV0ZXJzKSkpOwotCi0jaWYgRU5BQkxFKFZNX0NPVU5URVJTKQot
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgY29udGludWVUb1N0YWNrQXJpdHlPayA9IGppdC5q
dW1wKCk7Ci0jZW5kaWYKLQotICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHN0YWNrQXJnc0Fy
aXR5T0tFbnRyeSA9IGppdC5sYWJlbCgpOwotCi0gICAgICAgIGluY3JlbWVudENvdW50ZXIoJmpp
dCwgVk06OlN0YWNrQXJnc0FyaXR5KTsKLQotI2lmIEVOQUJMRShWTV9DT1VOVEVSUykKLSAgICAg
ICAgY29udGludWVUb1N0YWNrQXJpdHlPay5saW5rKCZqaXQpOwotI2VuZGlmCi0KLSAgICAgICAg
Ly8gTG9hZCBhcmd1bWVudCB2YWx1ZXMgaW50byBhcmd1bWVudCByZWdpc3RlcnMKLQotICAgICAg
ICAvLyBGSVhNRTogV291bGQgbGlrZSB0byBlbGltaW5hdGUgdGhlc2UgdG8gbG9hZCwgYnV0IHdl
IGN1cnJlbnRseSBjYW4ndCBqdW1wIGludG8KLSAgICAgICAgLy8gdGhlIEIzIGNvbXBpbGVkIGNv
ZGUgYXQgYW4gYXJiaXRyYXJ5IHBvaW50IGZyb20gdGhlIHNsb3cgZW50cnkgd2hlcmUgdGhlCi0g
ICAgICAgIC8vIHJlZ2lzdGVycyBhcmUgc3RvcmVkIHRvIHRoZSBzdGFjay4KLSAgICAgICAgaml0
LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlLCBhcmd1bWVudFJlZ2lzdGVyRm9yQ2FsbGVlKCkpOwotICAgICAgICBqaXQuZW1pdEdl
dFBheWxvYWRGcm9tQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudCwgYXJndW1lbnRSZWdpc3RlckZvckFyZ3VtZW50Q291bnQoKSk7Ci0KLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBhcmdJbmRleCA9IDA7IGFyZ0luZGV4IDwgbWF4UmVnaXN0ZXJB
cmd1bWVudENvdW50OyBhcmdJbmRleCsrKQotICAgICAgICAgICAgaml0LmVtaXRHZXRGcm9tQ2Fs
bEZyYW1lQXJndW1lbnRCZWZvcmVQcm9sb2d1ZShhcmdJbmRleCwgYXJndW1lbnRSZWdpc3RlckZv
ckZ1bmN0aW9uQXJndW1lbnQoYXJnSW5kZXgpKTsKLQotICAgICAgICB0b01haW5QYXRoLmFwcGVu
ZChqaXQuanVtcCgpKTsKLQotICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHJlZ2lzdGVyQXJn
c0NoZWNrQXJpdHlFbnRyeSA9IGppdC5sYWJlbCgpOwotICAgICAgICBpbmNyZW1lbnRDb3VudGVy
KCZqaXQsIFZNOjpSZWdBcmdzQXJpdHkpOwotCi0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3QgY29udGludWVUb1JlZ2lzdGVyQXJpdHlGaXh1cDsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpM
YWJlbCBjaGVja0ZvckV4dHJhUmVnaXN0ZXJBcmd1bWVudHM7Ci0KLSAgICAgICAgaWYgKG51bVBh
cmFtZXRlcnMgPCBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTKSB7Ci0g
ICAgICAgICAgICB0b01haW5QYXRoLmFwcGVuZChqaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpFcXVhbCwgYXJnQ291bnRSZWcsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKG51bVBhcmFtZXRlcnMpKSk7Ci0gICAgICAgICAgICBjb250aW51ZVRvUmVnaXN0ZXJB
cml0eUZpeHVwLmFwcGVuZChqaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpCZWxvdywgYXJnQ291bnRSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG51bVBh
cmFtZXRlcnMpKSk7Ci0gICAgICAgICAgICAvLyAgRmFsbCB0aHJvdWdoIHRvIHRoZSAiZXh0cmEg
cmVnaXN0ZXIgYXJpdHkiIGNhc2UuCi0KLSAgICAgICAgICAgIGNoZWNrRm9yRXh0cmFSZWdpc3Rl
ckFyZ3VtZW50cyA9IGppdC5sYWJlbCgpOwotICAgICAgICAgICAgLy8gU3BpbGwgYW55IGV4dHJh
IHJlZ2lzdGVyIGFyZ3VtZW50cyBwYXNzZWQgdG8gZnVuY3Rpb24gb250byB0aGUgc3RhY2suCi0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ0luZGV4ID0gbnVtUGFyYW1ldGVyczsgYXJnSW5k
ZXggPCBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTOyBhcmdJbmRleCsr
KSB7Ci0gICAgICAgICAgICAgICAgdG9NYWluUGF0aC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxs
SGVscGVyczo6QmVsb3dPckVxdWFsLCBhcmdDb3VudFJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoYXJnSW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAgaml0LmVtaXRQdXRBcmd1bWVudFRv
Q2FsbEZyYW1lQmVmb3JlUHJvbG9ndWUoYXJndW1lbnRSZWdpc3RlckZvckZ1bmN0aW9uQXJndW1l
bnQoYXJnSW5kZXgpLCBhcmdJbmRleCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlu
Y3JlbWVudENvdW50ZXIoJmppdCwgVk06OlJlZ0FyZ3NFeHRyYSk7Ci0gICAgICAgICAgICB0b01h
aW5QYXRoLmFwcGVuZChqaXQuanVtcCgpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0
b01haW5QYXRoLmFwcGVuZChqaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpBYm92ZU9yRXF1YWwsIGFyZ0NvdW50UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihudW1QYXJhbWV0ZXJzKSkpOwotCi0jaWYgRU5BQkxFKFZNX0NPVU5URVJTKQotICAgICAgICBj
b250aW51ZVRvUmVnaXN0ZXJBcml0eUZpeHVwLmFwcGVuZChqaXQuanVtcCgpKTsKLSNlbmRpZgot
Ci0gICAgICAgIGlmIChudW1QYXJhbWV0ZXJzID4gMCkgewotICAgICAgICAgICAgLy8gIFRoZXJl
IHNob3VsZCBhbHdheXMgYmUgYSAidGhpcyIgcGFyYW1ldGVyLgotICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpMYWJlbCByZWdpc3RlckFyZ3VtZW50c05lZWRBcml0eUZpeHVwID0gaml0LmxhYmVs
KCk7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJnSW5kZXggPSAxOyBhcmdJbmRleCA8
IG51bVBhcmFtZXRlcnMgJiYgYXJnSW5kZXggPD0gbWF4UmVnaXN0ZXJBcmd1bWVudENvdW50OyBh
cmdJbmRleCsrKQotICAgICAgICAgICAgICAgIHJlZ2lzdGVyQXJndW1lbnRzRW50cnlwb2ludHNb
YXJnSW5kZXhdID0gcmVnaXN0ZXJBcmd1bWVudHNOZWVkQXJpdHlGaXh1cDsKLSAgICAgICAgfQot
Ci0jaWYgRU5BQkxFKFZNX0NPVU5URVJTKQotICAgICAgICBpbmNyZW1lbnRDb3VudGVyKCZqaXQs
IFZNOjpSZWdBcmdzQXJpdHkpOwotI2VuZGlmCi0KLSAgICAgICAgY29udGludWVUb1JlZ2lzdGVy
QXJpdHlGaXh1cC5saW5rKCZqaXQpOwotCi0gICAgICAgIGppdC5zcGlsbEFyZ3VtZW50UmVnaXN0
ZXJzVG9GcmFtZUJlZm9yZVByb2xvZ3VlKG1heFJlZ2lzdGVyQXJndW1lbnRDb3VudCk7Ci0KLSAg
ICAgICAgY29udGludWVUb0FyaXR5Rml4dXAubGluaygmaml0KTsKLQotICAgICAgICBpbmNyZW1l
bnRDb3VudGVyKCZqaXQsIFZNOjpBcml0eUZpeHVwUmVxdWlyZWQpOwotCisgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3QgbWFpblBhdGhKdW1wczsKKyAgICAKKyAgICAgICAgaml0LmxvYWQz
MigKKyAgICAgICAgICAgIGZyYW1lLndpdGhPZmZzZXQoc2l6ZW9mKFJlZ2lzdGVyKSAqIENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLAorICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDEpOwor
ICAgICAgICBtYWluUGF0aEp1bXBzLmFwcGVuZChqaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgR1BSSW5mbzo6cmVnVDEsCisgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpKTsK
ICAgICAgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAgICAgICAgIGppdC5tb3ZlKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAg
ICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS50b3BDYWxsRnJh
bWUpOwpAQCAtMjUxLDIwICsxNTUsMTEgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKIAogICAg
ICAgICBqaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0gICAgICAgIGZpbGxS
ZWdpc3RlcnNBbmRDb250aW51ZU1haW5QYXRoLmFwcGVuZChqaXQuYnJhbmNoVGVzdDMyKENDYWxs
SGVscGVyczo6WmVybywgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIG1haW5QYXRo
SnVtcHMuYXBwZW5kKGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApKTsKICAgICAgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAg
ICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsQXJpdHlGaXh1cCA9IGppdC5jYWxsKCk7CiAg
ICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwotCi0gICAgICAgIGZpbGxSZWdpc3Rl
cnNBbmRDb250aW51ZU1haW5QYXRoLmFwcGVuZChqaXQuanVtcCgpKTsKLQotICAgICAgICBmaWxs
UmVnaXN0ZXJzQW5kQ29udGludWVNYWluUGF0aC5saW5rVG8oc3RhY2tBcmdzQXJpdHlPS0VudHJ5
LCAmaml0KTsKLQotI2lmIEVOQUJMRShWTV9DT1VOVEVSUykKLSAgICAgICAgQ0NhbGxIZWxwZXJz
OjpMYWJlbCByZWdpc3RlckVudHJ5Tm9Bcml0eSA9IGppdC5sYWJlbCgpOwotICAgICAgICBpbmNy
ZW1lbnRDb3VudGVyKCZqaXQsIFZNOjpSZWdBcmdzTm9Bcml0eSk7Ci0gICAgICAgIHRvTWFpblBh
dGguYXBwZW5kKGppdC5qdW1wKCkpOwotI2VuZGlmCisgICAgICAgIG1haW5QYXRoSnVtcHMuYXBw
ZW5kKGppdC5qdW1wKCkpOwogCiAgICAgICAgIGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PExpbmtCdWZmZXI+KHZtLCBqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsK
ICAgICAgICAgaWYgKGxpbmtCdWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKQEAgLTI3NCwz
NSArMTY5LDkgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKICAgICAgICAgbGlua0J1ZmZlci0+
bGluayhjYWxsQXJpdHlDaGVjaywgY29kZUJsb2NrLT5tX2lzQ29uc3RydWN0b3IgPyBvcGVyYXRp
b25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2spOwogICAgICAg
ICBsaW5rQnVmZmVyLT5saW5rKGNhbGxMb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZy
YW1lLCBsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lKTsKICAgICAgICAgbGlu
a0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25QdHIoKHZtLmdldENUSVN0dWIo
YXJpdHlGaXh1cEdlbmVyYXRvcikpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAg
ICAgIGxpbmtCdWZmZXItPmxpbmsodG9NYWluUGF0aCwgQ29kZUxvY2F0aW9uTGFiZWwoYml0d2lz
ZV9jYXN0PHZvaWQqPihzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbikpKTsKLQotICAgICAgICBzdGF0
ZS5qaXRDb2RlLT5zZXRFbnRyeUZvcihTdGFja0FyZ3NNdXN0Q2hlY2tBcml0eSwgbGlua0J1ZmZl
ci0+bG9jYXRpb25PZihzdGFja0FyZ3NDaGVja0FyaXR5RW50cnkpKTsKLSAgICAgICAgc3RhdGUu
aml0Q29kZS0+c2V0RW50cnlGb3IoU3RhY2tBcmdzQXJpdHlDaGVja05vdFJlcXVpcmVkLCBsaW5r
QnVmZmVyLT5sb2NhdGlvbk9mKHN0YWNrQXJnc0FyaXR5T0tFbnRyeSkpOworICAgICAgICBsaW5r
QnVmZmVyLT5saW5rKG1haW5QYXRoSnVtcHMsIENvZGVMb2NhdGlvbkxhYmVsKGJpdHdpc2VfY2Fz
dDx2b2lkKj4oc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24pKSk7CiAKLSNpZiBFTkFCTEUoVk1fQ09V
TlRFUlMpCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtYWluRW50cnkgPSBsaW5rQnVm
ZmVyLT5sb2NhdGlvbk9mKHJlZ2lzdGVyRW50cnlOb0FyaXR5KTsKLSNlbHNlCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBtYWluRW50cnkgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoYml0
d2lzZV9jYXN0PHZvaWQqPihzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbikpOwotI2VuZGlmCi0gICAg
ICAgIHN0YXRlLmppdENvZGUtPnNldEVudHJ5Rm9yKFJlZ2lzdGVyQXJnc0FyaXR5Q2hlY2tOb3RS
ZXF1aXJlZCwgbWFpbkVudHJ5KTsKLQotICAgICAgICBpZiAoY2hlY2tGb3JFeHRyYVJlZ2lzdGVy
QXJndW1lbnRzLmlzU2V0KCkpCi0gICAgICAgICAgICBzdGF0ZS5qaXRDb2RlLT5zZXRFbnRyeUZv
cihSZWdpc3RlckFyZ3NQb3NzaWJsZUV4dHJhQXJncywgbGlua0J1ZmZlci0+bG9jYXRpb25PZihj
aGVja0ZvckV4dHJhUmVnaXN0ZXJBcmd1bWVudHMpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgc3RhdGUuaml0Q29kZS0+c2V0RW50cnlGb3IoUmVnaXN0ZXJBcmdzUG9zc2libGVFeHRyYUFy
Z3MsIG1haW5FbnRyeSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICBzdGF0ZS5qaXRD
b2RlLT5zZXRFbnRyeUZvcihSZWdpc3RlckFyZ3NNdXN0Q2hlY2tBcml0eSwgbGlua0J1ZmZlci0+
bG9jYXRpb25PZihyZWdpc3RlckFyZ3NDaGVja0FyaXR5RW50cnkpKTsKLQotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGFyZ0NvdW50ID0gMTsgYXJnQ291bnQgPD0gTlVNQkVSX09GX0pTX0ZVTkNUSU9O
X0FSR1VNRU5UX1JFR0lTVEVSUzsgYXJnQ291bnQrKykgewotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGVudHJ5OwotICAgICAgICAgICAgaWYgKGFyZ0NvdW50ID09IG51bVBhcmFt
ZXRlcnMpCi0gICAgICAgICAgICAgICAgZW50cnkgPSBtYWluRW50cnk7Ci0gICAgICAgICAgICBl
bHNlIGlmIChyZWdpc3RlckFyZ3VtZW50c0VudHJ5cG9pbnRzW2FyZ0NvdW50XS5pc1NldCgpKQot
ICAgICAgICAgICAgICAgIGVudHJ5ID0gbGlua0J1ZmZlci0+bG9jYXRpb25PZihyZWdpc3RlckFy
Z3VtZW50c0VudHJ5cG9pbnRzW2FyZ0NvdW50XSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgZW50cnkgPSBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKHJlZ2lzdGVyQXJnc0NoZWNr
QXJpdHlFbnRyeSk7Ci0gICAgICAgICAgICBzdGF0ZS5qaXRDb2RlLT5zZXRFbnRyeUZvcihKSVRF
bnRyeVBvaW50czo6cmVnaXN0ZXJFbnRyeVR5cGVGb3JBcmd1bWVudENvdW50KGFyZ0NvdW50KSwg
ZW50cnkpOwotICAgICAgICB9CisgICAgICAgIHN0YXRlLmppdENvZGUtPmluaXRpYWxpemVBZGRy
ZXNzRm9yQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIoYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0
ZS5nZW5lcmF0ZWRGdW5jdGlvbikpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAK
QEAgLTMxMiwyMCArMTgxLDcgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKICAgICAgICAgLy8g
cG9pbnQgd2UndmUgZXZlbiBkb25lIHRoZSBzdGFjayBjaGVjay4gQmFzaWNhbGx5IHdlIGp1c3Qg
aGF2ZSB0byBtYWtlIHRoZQogICAgICAgICAvLyBjYWxsIHRvIHRoZSBCMy1nZW5lcmF0ZWQgY29k
ZS4KICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBzdGFydCA9IGppdC5sYWJlbCgpOwotCiAg
ICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwotCi0gICAgICAgIC8vIExvYWQgYXJn
dW1lbnQgdmFsdWVzIGludG8gYXJndW1lbnQgcmVnaXN0ZXJzCi0KLSAgICAgICAgLy8gRklYTUU6
IFdvdWxkIGxpa2UgdG8gZWxpbWluYXRlIHRoZXNlIHRvIGxvYWQsIGJ1dCB3ZSBjdXJyZW50bHkg
Y2FuJ3QganVtcCBpbnRvCi0gICAgICAgIC8vIHRoZSBCMyBjb21waWxlZCBjb2RlIGF0IGFuIGFy
Yml0cmFyeSBwb2ludCBmcm9tIHRoZSBzbG93IGVudHJ5IHdoZXJlIHRoZQotICAgICAgICAvLyBy
ZWdpc3RlcnMgYXJlIHN0b3JlZCB0byB0aGUgc3RhY2suCi0gICAgICAgIGppdC5lbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgYXJn
dW1lbnRSZWdpc3RlckZvckNhbGxlZSgpKTsKLSAgICAgICAgaml0LmVtaXRHZXRQYXlsb2FkRnJv
bUNhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQsIGFyZ3VtZW50UmVnaXN0ZXJGb3JBcmd1bWVudENvdW50KCkpOwotCi0gICAgICAgIGZvciAo
dW5zaWduZWQgYXJnSW5kZXggPSAwOyBhcmdJbmRleCA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihj
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgJiYgYXJnSW5kZXggPCBOVU1CRVJfT0ZfSlNfRlVO
Q1RJT05fQVJHVU1FTlRfUkVHSVNURVJTOyBhcmdJbmRleCsrKQotICAgICAgICAgICAgaml0LmVt
aXRHZXRGcm9tQ2FsbEZyYW1lQXJndW1lbnRCZWZvcmVQcm9sb2d1ZShhcmdJbmRleCwgYXJndW1l
bnRSZWdpc3RlckZvckZ1bmN0aW9uQXJndW1lbnQoYXJnSW5kZXgpKTsKLQogICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgbWFpblBhdGhKdW1wID0gaml0Lmp1bXAoKTsKICAgICAgICAgCiAgICAg
ICAgIGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtCdWZmZXI+KHZtLCBqaXQsIGNv
ZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKQEAgLTMzNSw3ICsxOTEsNyBAQCB2b2lk
IGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICB9CiAgICAgICAgIGxpbmtCdWZmZXItPmxpbmso
bWFpblBhdGhKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRl
LmdlbmVyYXRlZEZ1bmN0aW9uKSkpOwogCi0gICAgICAgIHN0YXRlLmppdENvZGUtPnNldEVudHJ5
Rm9yKFJlZ2lzdGVyQXJnc0FyaXR5Q2hlY2tOb3RSZXF1aXJlZCwgbGlua0J1ZmZlci0+bG9jYXRp
b25PZihzdGFydCkpOworICAgICAgICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFsaXplQWRkcmVzc0Zv
ckNhbGwobGlua0J1ZmZlci0+bG9jYXRpb25PZihzdGFydCkpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCmluZGV4IDc2ODA4Yzg1YmQ1MWUxNjIzZjZhYWI5ZmI0YTM5YmJhYzI1ODYyYWIuLmM4
ZWQ5YTllMmE3ZmRiOWIwNDBlNjcxNThkYTNiYjRlNWY0NmIxM2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTE5NiwxMCArMTk2LDYgQEAg
cHVibGljOgogICAgICAgICBtX3Byb2MuYWRkRmFzdENvbnN0YW50KG1fdGFnVHlwZU51bWJlci0+
a2V5KCkpOwogICAgICAgICBtX3Byb2MuYWRkRmFzdENvbnN0YW50KG1fdGFnTWFzay0+a2V5KCkp
OwogICAgICAgICAKLSAgICAgICAgLy8gU3RvcmUgb3V0IGNhbGxlZSBhbmQgYXJndW1lbnQgY291
bnQgZm9yIHBvc3NpYmxlIE9TUiBleGl0LgotICAgICAgICBtX291dC5zdG9yZTY0KG1fb3V0LmFy
Z3VtZW50UmVnaXN0ZXIoYXJndW1lbnRSZWdpc3RlckZvckNhbGxlZSgpKSwgYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKLSAgICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5hcmd1
bWVudFJlZ2lzdGVySW50MzIoYXJndW1lbnRSZWdpc3RlckZvckFyZ3VtZW50Q291bnQoKSksIHBh
eWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwotCiAgICAgICAgIG1fb3V0
LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50UHRyKGNvZGVCbG9jaygpKSwgYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKIAogICAgICAgICAvLyBTdGFjayBPdmVyZmxvdyBDaGVj
ay4KQEAgLTI1MSwzNCArMjQ3LDIwIEBAIHB1YmxpYzoKICAgICAgICAgLy8gQ2hlY2sgQXJndW1l
bnRzLgogICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5jbGVhcigpOwogICAgICAgICBhdmFpbGFi
aWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCkt
Pm51bVBhcmFtZXRlcnMoKSwgMCk7Ci0KLSAgICAgICAgVmVjdG9yPE5vZGUqLCA4PiBhcmd1bWVu
dE5vZGVzOwotICAgICAgICBWZWN0b3I8TFZhbHVlLCA4PiBhcmd1bWVudFZhbHVlczsKLQotICAg
ICAgICBhcmd1bWVudE5vZGVzLnJlc2l6ZShjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKTsK
LSAgICAgICAgYXJndW1lbnRWYWx1ZXMucmVzaXplKGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJz
KCkpOwotCi0gICAgICAgIG1faGlnaEJsb2NrID0gbV9ncmFwaC5ibG9jaygwKTsKLQogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyBpLS07KSB7
Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ncmFwaC5tX2FyZ3VtZW50c0ZvckNoZWNraW5n
W2ldOworICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMuYXJndW1lbnQoaSkg
PQorICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUs
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKSk7CisgICAgICAgIH0KKyAgICAgICAgbV9u
b2RlID0gbnVsbHB0cjsKKyAgICAgICAgbV9vcmlnaW4gPSBOb2RlT3JpZ2luKENvZGVPcmlnaW4o
MCksIENvZGVPcmlnaW4oMCksIHRydWUpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2Rl
QmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyBpLS07KSB7CisgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gbV9ncmFwaC5tX2FyZ3VtZW50c1tpXTsKICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIExWYWx1ZSBqc1ZhbHVlID0gbnVsbHB0cjsKLQotICAgICAgICAgICAgaWYgKG5v
ZGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoaSA8IE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdV
TUVOVF9SRUdJU1RFUlMpIHsKLSAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCku
bV9sb2NhbHMuYXJndW1lbnQoaSkgPSBBdmFpbGFiaWxpdHkobm9kZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGpzVmFsdWUgPSBtX291dC5hcmd1bWVudFJlZ2lzdGVyKEdQUkluZm86OnRvQXJndW1l
bnRSZWdpc3Rlcihub2RlLT5hcmd1bWVudFJlZ2lzdGVySW5kZXgoKSkpOwotCi0gICAgICAgICAg
ICAgICAgICAgIHNldEpTVmFsdWUobm9kZSwganNWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMuYXJn
dW1lbnQoaSkgPQotICAgICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRB
dChGbHVzaGVkSlNWYWx1ZSwgb3BlcmFuZCkpOwotICAgICAgICAgICAgICAgICAgICBqc1ZhbHVl
ID0gbV9vdXQubG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkp
KTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBMVmFsdWUganNWYWx1ZSA9IG1fb3V0
LmxvYWQ2NChhZGRyZXNzRm9yKG9wZXJhbmQpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+aGFzQXJndW1lbnRSZWdpc3Rlcklu
ZGV4KCkgfHwgb3BlcmFuZCA9PSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bWFjaGluZUxvY2Fs
KTsKKyAgICAgICAgICAgIGlmIChub2RlKSB7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVCht
X2dyYXBoLCBub2RlLCBvcGVyYW5kID09IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5tYWNoaW5l
TG9jYWwpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBo
YWNrLCBidXQgaXQncyBhbiBlZmZlY3RpdmUgb25lLiBJdCBhbGxvd3MgdXMgdG8gZG8gQ1NFIG9u
IHRoZQogICAgICAgICAgICAgICAgIC8vIHByaW1vcmRpYWwgbG9hZCBvZiBhcmd1bWVudHMuIFRo
aXMgYXNzdW1lcyB0aGF0IHRoZSBHZXRMb2NhbCB0aGF0IGdvdCBwdXQgaW4KQEAgLTI4NiwyMSAr
MjY4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIC8vIHNob3VsZCBob2xkIHRydWUuCiAg
ICAgICAgICAgICAgICAgbV9sb2FkZWRBcmd1bWVudFZhbHVlcy5hZGQobm9kZSwganNWYWx1ZSk7
CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGFyZ3VtZW50Tm9kZXNbaV0gPSBub2RlOwot
ICAgICAgICAgICAgYXJndW1lbnRWYWx1ZXNbaV0gPSBqc1ZhbHVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbV9ub2RlID0gbnVsbHB0cjsKLSAgICAgICAgbV9vcmlnaW4gPSBOb2RlT3JpZ2luKENv
ZGVPcmlnaW4oMCksIENvZGVPcmlnaW4oMCksIHRydWUpOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyBpLS07KSB7Ci0gICAgICAgICAgICBO
b2RlKiBub2RlID0gYXJndW1lbnROb2Rlc1tpXTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKCFub2RlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBMVmFs
dWUganNWYWx1ZSA9IGFyZ3VtZW50VmFsdWVzW2ldOwotCiAgICAgICAgICAgICBzd2l0Y2ggKG1f
Z3JhcGgubV9hcmd1bWVudEZvcm1hdHNbaV0pIHsKICAgICAgICAgICAgIGNhc2UgRmx1c2hlZElu
dDMyOgogICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNW
YWx1ZSksIG5vZGUsIGlzTm90SW50MzIoanNWYWx1ZSkpOwpAQCAtODQ1LDkgKzgxMyw2IEBAIHBy
aXZhdGU6CiAgICAgICAgIGNhc2UgR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM6CiAgICAg
ICAgICAgICBjb21waWxlR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdldEFyZ3VtZW50UmVnaXN0ZXI6Ci0gICAgICAgICAg
ICBjb21waWxlR2V0QXJndW1lbnRSZWdpc3RlcigpOwotICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgR2V0U2NvcGU6CiAgICAgICAgICAgICBjb21waWxlR2V0U2NvcGUoKTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtNTQzNywxNiArNTQwMiw2IEBAIHByaXZhdGU6CiAgICAgICAgIHNl
dEludDMyKG1fb3V0LmxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQpKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcGlsZUdldEFyZ3VtZW50UmVnaXN0ZXIo
KQotICAgIHsKLSAgICAgICAgLy8gV2UgbWlnaHQgaGF2ZSBhbHJlYWR5IGhhdmUgYSB2YWx1ZSBm
b3IgdGhpcyBub2RlLgotICAgICAgICBpZiAoTFZhbHVlIHZhbHVlID0gbV9sb2FkZWRBcmd1bWVu
dFZhbHVlcy5nZXQobV9ub2RlKSkgewotICAgICAgICAgICAgc2V0SlNWYWx1ZSh2YWx1ZSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5h
cmd1bWVudFJlZ2lzdGVyKEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihtX25vZGUtPmFyZ3Vt
ZW50UmVnaXN0ZXJJbmRleCgpKSkpOwotICAgIH0KLSAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRT
Y29wZSgpCiAgICAgewogICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIobG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKSwgbV9oZWFwcy5KU0Z1bmN0aW9uX3Njb3BlKSk7CkBAIC01ODU5LDEw
ICs1ODE0LDkgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gdGhlIGNhbGwuCiAgICAgICAgIFZlY3Rv
cjxDb25zdHJhaW5lZFZhbHVlPiBhcmd1bWVudHM7CiAKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRo
YXQgdGhlIGNhbGxlZSBnb2VzIGludG8gYXJndW1lbnRSZWdpc3RlckZvckNhbGxlZSgpIGJlY2F1
c2UgdGhhdCdzIHdoZXJlCi0gICAgICAgIC8vIHRoZSBzbG93IHBhdGggdGh1bmtzIGV4cGVjdCB0
aGUgY2FsbGVlIHRvIGJlLgotICAgICAgICBHUFJSZWcgY2FsbGVlUmVnID0gYXJndW1lbnRSZWdp
c3RlckZvckNhbGxlZSgpOwotICAgICAgICBhcmd1bWVudHMuYXBwZW5kKENvbnN0cmFpbmVkVmFs
dWUoanNDYWxsZWUsIFZhbHVlUmVwOjpyZWcoY2FsbGVlUmVnKSkpOworICAgICAgICAvLyBNYWtl
IHN1cmUgdGhhdCB0aGUgY2FsbGVlIGdvZXMgaW50byBHUFIwIGJlY2F1c2UgdGhhdCdzIHdoZXJl
IHRoZSBzbG93IHBhdGggdGh1bmtzIGV4cGVjdCB0aGUKKyAgICAgICAgLy8gY2FsbGVlIHRvIGJl
LgorICAgICAgICBhcmd1bWVudHMuYXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoanNDYWxsZWUsIFZh
bHVlUmVwOjpyZWcoR1BSSW5mbzo6cmVnVDApKSk7CiAKICAgICAgICAgYXV0byBhZGRBcmd1bWVu
dCA9IFsmXSAoTFZhbHVlIHZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBpbnQgb2Zmc2V0KSB7
CiAgICAgICAgICAgICBpbnRwdHJfdCBvZmZzZXRGcm9tU1AgPQpAQCAtNTg3MCwxNiArNTgyNCwx
MCBAQCBwcml2YXRlOgogICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChDb25zdHJhaW5lZFZh
bHVlKHZhbHVlLCBWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudChvZmZzZXRGcm9tU1ApKSk7CiAgICAg
ICAgIH07CiAKLSAgICAgICAgQXJndW1lbnRzTG9jYXRpb24gYXJnTG9jYXRpb24gPSBhcmd1bWVu
dHNMb2NhdGlvbkZvcihudW1BcmdzKTsKLSAgICAgICAgYXJndW1lbnRzLmFwcGVuZChDb25zdHJh
aW5lZFZhbHVlKGpzQ2FsbGVlLCBWYWx1ZVJlcDo6cmVnKGNhbGxlZVJlZykpKTsKLSAgICAgICAg
YXJndW1lbnRzLmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKG1fb3V0LmNvbnN0SW50MzIobnVtQXJn
cyksIFZhbHVlUmVwOjpyZWcoYXJndW1lbnRSZWdpc3RlckZvckFyZ3VtZW50Q291bnQoKSkpKTsK
LQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQXJnczsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoaSA8IE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMp
Ci0gICAgICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGxvd0pT
VmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxICsgaSkpLCBWYWx1ZVJlcDo6cmVnKGFy
Z3VtZW50UmVnaXN0ZXJGb3JGdW5jdGlvbkFyZ3VtZW50KGkpKSkpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGFkZEFyZ3VtZW50KGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxICsgaSkpLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSwgMCk7Ci0g
ICAgICAgIH0KKyAgICAgICAgYWRkQXJndW1lbnQoanNDYWxsZWUsIFZpcnR1YWxSZWdpc3RlcihD
YWxsRnJhbWVTbG90OjpjYWxsZWUpLCAwKTsKKyAgICAgICAgYWRkQXJndW1lbnQobV9vdXQuY29u
c3RJbnQzMihudW1BcmdzKSwgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnQpLCBQYXlsb2FkT2Zmc2V0KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bUFyZ3M7ICsraSkKKyAgICAgICAgICAgIGFkZEFyZ3VtZW50KGxvd0pTVmFsdWUobV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxICsgaSkpLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChp
KSwgMCk7CiAKICAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0
Y2hwb2ludChJbnQ2NCk7CiAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFZlY3Rvcihhcmd1bWVu
dHMpOwpAQCAtNTkwOCwxMSArNTg1Niw5IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJ
bmZvKCk7CiAKLSAgICAgICAgICAgICAgICBpbmNyZW1lbnRDb3VudGVyKCZqaXQsIFZNOjpGVExD
YWxsZXIpOwotCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgdGFy
Z2V0VG9DaGVjazsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1BhdGgg
PSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Ok5vdEVxdWFsLCBjYWxsZWVSZWcsIHRhcmdldFRvQ2hlY2ssCisgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QwLCB0YXJnZXRUb0NoZWNr
LAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCkpOwog
CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RDYWxsID0gaml0Lm5lYXJD
YWxsKCk7CkBAIC01OTIwLDEzICs1ODY2LDEzIEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAg
ICBzbG93UGF0aC5saW5rKCZqaXQpOwogCi0gICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86Om5vbkFyZ0dQUjAp
OworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihj
YWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CiAgICAgICAgICAgICAgICAgZG9u
ZS5saW5rKCZqaXQpOwogCiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwo
CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0ID8gQ2FsbExpbmtJ
bmZvOjpDb25zdHJ1Y3QgOiBDYWxsTGlua0luZm86OkNhbGwsCi0gICAgICAgICAgICAgICAgICAg
IGFyZ0xvY2F0aW9uLCBub2RlLT5vcmlnaW4uc2VtYW50aWMsIGFyZ3VtZW50UmVnaXN0ZXJGb3JD
YWxsZWUoKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgR1BS
SW5mbzo6cmVnVDApOwogCiAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXBhcmFtcy5wcm9jKCkuZnJhbWVT
aXplKCkpLApAQCAtNTkzNSw3ICs1ODgxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBq
aXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGxpbmtDYWxsID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnZtKCku
Z2V0SklUQ2FsbFRodW5rRW50cnlTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmVudHJ5Rm9y
KGNhbGxMaW5rSW5mby0+YXJndW1lbnRzTG9jYXRpb24oKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGlua0J1ZmZlci52bSgpLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRv
cikuY29kZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dD
YWxsLCBGdW5jdGlvblB0cihsaW5rQ2FsbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKQEAgLTU5
NzksMzggKzU5MjUsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxDb25z
dHJhaW5lZFZhbHVlPiBhcmd1bWVudHM7CiAgICAgICAgIAotICAgICAgICAvLyBNYWtlIHN1cmUg
dGhhdCB0aGUgY2FsbGVlIGdvZXMgaW50byBhcmd1bWVudFJlZ2lzdGVyRm9yQ2FsbGVlKCkgYmVj
YXVzZSB0aGF0J3Mgd2hlcmUKLSAgICAgICAgLy8gdGhlIHNsb3cgcGF0aCB0aHVua3MgZXhwZWN0
IHRoZSBjYWxsZWUgdG8gYmUuCi0gICAgICAgIEdQUlJlZyBjYWxsZWVSZWcgPSBhcmd1bWVudFJl
Z2lzdGVyRm9yQ2FsbGVlKCk7Ci0gICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoQ29uc3RyYWluZWRW
YWx1ZShqc0NhbGxlZSwgVmFsdWVSZXA6OnJlZyhjYWxsZWVSZWcpKSk7CisgICAgICAgIGFyZ3Vt
ZW50cy5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShqc0NhbGxlZSwgVmFsdWVSZXA6OlNvbWVSZWdp
c3RlcikpOwogICAgICAgICBpZiAoIWlzVGFpbCkgewogICAgICAgICAgICAgYXV0byBhZGRBcmd1
bWVudCA9IFsmXSAoTFZhbHVlIHZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBpbnQgb2Zmc2V0
KSB7CiAgICAgICAgICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbVNQID0KICAgICAgICAgICAg
ICAgICAgICAgKHJlZy5vZmZzZXQoKSAtIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVy
cykgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgb2Zmc2V0OwogICAgICAgICAgICAgICAgIGFy
Z3VtZW50cy5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZSh2YWx1ZSwgVmFsdWVSZXA6OnN0YWNrQXJn
dW1lbnQob2Zmc2V0RnJvbVNQKSkpOwogICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgYXJn
dW1lbnRzLmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGpzQ2FsbGVlLCBWYWx1ZVJlcDo6cmVnKGNh
bGxlZVJlZykpKTsKLSNpZiBFTkFCTEUoQ0FMTEVSX1NQSUxMU19DQUxMRUUpCisgICAgICAgICAg
ICAKICAgICAgICAgICAgIGFkZEFyZ3VtZW50KGpzQ2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSwgMCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQoQ29uc3RyYWluZWRWYWx1ZShtX291dC5jb25zdEludDMyKG51bVBhc3NlZEFyZ3MpLCBW
YWx1ZVJlcDo6cmVnKGFyZ3VtZW50UmVnaXN0ZXJGb3JBcmd1bWVudENvdW50KCkpKSk7Ci0jaWYg
RU5BQkxFKENBTExFUl9TUElMTFNfQVJHQ09VTlQpCiAgICAgICAgICAgICBhZGRBcmd1bWVudCht
X291dC5jb25zdEludDMyKG51bVBhc3NlZEFyZ3MpLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCksIFBheWxvYWRPZmZzZXQpOwotI2VuZGlmCi0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyAr
K2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoaSA8IE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdV
TUVOVF9SRUdJU1RFUlMpCi0gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoQ29u
c3RyYWluZWRWYWx1ZShsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSArIGkp
KSwgVmFsdWVSZXA6OnJlZyhhcmd1bWVudFJlZ2lzdGVyRm9yRnVuY3Rpb25Bcmd1bWVudChpKSkp
KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGFkZEFyZ3VtZW50
KGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxICsgaSkpLCB2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudChpKSwgMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBudW1QYXNzZWRBcmdzOyBpIDwgbnVtQWxsb2NhdGVkQXJnczsgKytpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGkgPCBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRf
UkVHSVNURVJTKQotICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKENvbnN0cmFp
bmVkVmFsdWUobV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkp
LCBWYWx1ZVJlcDo6cmVnKGFyZ3VtZW50UmVnaXN0ZXJGb3JGdW5jdGlvbkFyZ3VtZW50KGkpKSkp
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYWRkQXJndW1lbnQo
bV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChpKSwgMCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKQorICAgICAgICAgICAg
ICAgIGFkZEFyZ3VtZW50KGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxICsg
aSkpLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSwgMCk7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBudW1QYXNzZWRBcmdzOyBpIDwgbnVtQWxsb2NhdGVkQXJnczsgKytpKQor
ICAgICAgICAgICAgICAgIGFkZEFyZ3VtZW50KG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpKSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSksIDApOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51
bVBhc3NlZEFyZ3M7ICsraSkKICAgICAgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKENvbnN0
cmFpbmVkVmFsdWUobG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEgKyBpKSks
IFZhbHVlUmVwOjpXYXJtQW55KSk7CkBAIC02MDUyLDcgKzU5ODAsNiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPSBzdGF0ZS0+aml0Q29kZS0+
Y29tbW9uLmZyYW1lUmVnaXN0ZXJDb3VudDsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHRvU2F2ZSA9IHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lz
dGVycygpOwotICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmd1bWVudHNJblJlZ2lz
dGVycyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZh
bHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUdQUiwgRGF0YUZvcm1hdENlbGwpOwogICAgICAgICAg
ICAgICAgICAgICB0b1NhdmUuc2V0KGNhbGxlZUdQUik7CiAgICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKQEAgLTYwNzEsMTEg
KzU5OTgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpQYXRjaGFibGVKdW1wIHBhdGNoYWJsZUp1bXAgPSBqaXQucGF0
Y2hhYmxlSnVtcCgpOwogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIG1h
aW5QYXRoID0gaml0LmxhYmVsKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50Q291
bnRlcigmaml0LCBWTTo6RlRMQ2FsbGVyKTsKLSAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50
Q291bnRlcigmaml0LCBWTTo6VGFpbENhbGwpOwotICAgICAgICAgICAgICAgICAgICBpbmNyZW1l
bnRDb3VudGVyKCZqaXQsIFZNOjpEaXJlY3RDYWxsKTsKLQorICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAgICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCiAgICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKQEAgLTYwOTYsNyArNjAxOSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKG1haW5QYXRoLCAm
aml0KTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+c2V0VXBDYWxsKAotICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvOjpE
aXJlY3RUYWlsQ2FsbCwgYXJndW1lbnRzTG9jYXRpb25Gb3IobnVtUGFzc2VkQXJncyksIG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYywgSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBDYWxsTGlua0luZm86OkRpcmVjdFRhaWxDYWxsLCBub2RlLT5vcmlnaW4uc2VtYW50aWMsIElu
dmFsaWRHUFJSZWcpOwogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEV4ZWN1
dGFibGVEdXJpbmdDb21waWxhdGlvbihleGVjdXRhYmxlKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKG51bUFsbG9jYXRlZEFyZ3MgPiBudW1QYXNzZWRBcmdzKQogICAgICAgICAgICAgICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5zZXRNYXhOdW1Bcmd1bWVudHMobnVtQWxsb2NhdGVkQXJncyk7
CkBAIC02MTE5LDkgKzYwNDIsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgbWFpblBhdGggPSBqaXQubGFiZWwoKTsKIAot
ICAgICAgICAgICAgICAgIGluY3JlbWVudENvdW50ZXIoJmppdCwgVk06OkZUTENhbGxlcik7Ci0g
ICAgICAgICAgICAgICAgaW5jcmVtZW50Q291bnRlcigmaml0LCBWTTo6RGlyZWN0Q2FsbCk7Ci0K
ICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAogICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCkpKTsKQEAgLTYxMzMsNyArNjA1Myw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoCiAg
ICAgICAgICAgICAgICAgICAgIGlzQ29uc3RydWN0ID8gQ2FsbExpbmtJbmZvOjpEaXJlY3RDb25z
dHJ1Y3QgOiBDYWxsTGlua0luZm86OkRpcmVjdENhbGwsCi0gICAgICAgICAgICAgICAgICAgIGFy
Z3VtZW50c0xvY2F0aW9uRm9yKG51bVBhc3NlZEFyZ3MpLCBub2RlLT5vcmlnaW4uc2VtYW50aWMs
IEludmFsaWRHUFJSZWcpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50
aWMsIEludmFsaWRHUFJSZWcpOwogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RXhl
Y3V0YWJsZUR1cmluZ0NvbXBpbGF0aW9uKGV4ZWN1dGFibGUpOwogICAgICAgICAgICAgICAgIGlm
IChudW1BbGxvY2F0ZWRBcmdzID4gbnVtUGFzc2VkQXJncykKICAgICAgICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5zZXRNYXhOdW1Bcmd1bWVudHMobnVtQWxsb2NhdGVkQXJncyk7CkBAIC02
MTQ0LDExICs2MDY0LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc2xvd1BhdGggPSBqaXQu
bGFiZWwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1g4NigpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5wb3AoR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihj
YWxsTGlua0luZm8pLCBHUFJJbmZvOjpub25BcmdHUFIwKTsgLy8gTGluayBpbmZvIG5lZWRzIHRv
IGJlIGluIG5vbkFyZ0dQUjAKLSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZXhjZXB0aW9ucy0+YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQXNzZW1ibHlIZWxwZXJz
OjpOb3JtYWxFeGNlcHRpb25DaGVjaywgQXNzZW1ibHlIZWxwZXJzOjpGYXJKdW1wV2lkdGgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucG9wKENDYWxsSGVscGVyczo6c2VsZWN0
U2NyYXRjaEdQUihjYWxsZWVHUFIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBleGNlcHRpb25zLmdl
dCgpLCBvcGVyYXRpb25MaW5rRGlyZWN0Q2FsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJbnZhbGlkR1BSUmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZv
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsZWVHUFIpLmNhbGwoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKG1haW5QYXRoLCAmaml0KTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExp
bmtUYXNrKApAQCAtNjE1Nyw5ICs2MDc5LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd1BhdGhMb2NhdGlvbiA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZihzbG93UGF0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2Fs
bCwgc2xvd1BhdGhMb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBsaW5rQ2FsbCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0SklUQ2FsbFRodW5rRW50cnlTdHViKGxpbmtE
aXJlY3RDYWxsVGh1bmtHZW5lcmF0b3IpLmVudHJ5Rm9yKGNhbGxMaW5rSW5mby0+YXJndW1lbnRz
TG9jYXRpb24oKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHIobGlua0NhbGwuZXhlY3V0YWJsZUFkZHJlc3MoKSkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoKSwKQEAgLTYxOTEsOCAr
NjExMCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgVmVjdG9yPENvbnN0cmFpbmVkVmFsdWU+IGFy
Z3VtZW50czsKIAotICAgICAgICBHUFJSZWcgY2FsbGVlUmVnID0gYXJndW1lbnRSZWdpc3RlckZv
ckNhbGxlZSgpOwotICAgICAgICBhcmd1bWVudHMuYXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoanND
YWxsZWUsIFZhbHVlUmVwOjpyZWcoY2FsbGVlUmVnKSkpOworICAgICAgICBhcmd1bWVudHMuYXBw
ZW5kKENvbnN0cmFpbmVkVmFsdWUoanNDYWxsZWUsIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6cmVn
VDApKSk7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUFyZ3M7ICsraSkg
ewogICAgICAgICAgICAgLy8gTm90ZTogd2UgY291bGQgbGV0IHRoZSBzaHVmZmxlciBkbyBib3hp
bmcgZm9yIHVzLCBidXQgaXQncyBub3Qgc3VwZXIgY2xlYXIgdGhhdCB0aGlzCkBAIC02MjI2LDEz
ICs2MTQ0LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CiAgICAgICAgICAgICAgICAgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZUluZGV4ID0gc3RhdGUtPmppdENvZGUtPmNvbW1vbi5hZGRVbmlxdWVDYWxs
U2l0ZUluZGV4KGNvZGVPcmlnaW4pOwogCi0gICAgICAgICAgICAgICAgaW5jcmVtZW50Q291bnRl
cigmaml0LCBWTTo6RlRMQ2FsbGVyKTsKLSAgICAgICAgICAgICAgICBpbmNyZW1lbnRDb3VudGVy
KCZqaXQsIFZNOjpUYWlsQ2FsbCk7Ci0KICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxl
RGF0YSBzaHVmZmxlRGF0YTsKLSAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmd1bWVudHNJ
blJlZ2lzdGVycyA9IHRydWU7CiAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxz
ID0gc3RhdGUtPmppdENvZGUtPmNvbW1vbi5mcmFtZVJlZ2lzdGVyQ291bnQ7Ci0gICAgICAgICAg
ICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlUmVn
LCBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZh
bHVlUmVjb3Zlcnk6OmluR1BSKEdQUkluZm86OnJlZ1QwLCBEYXRhRm9ybWF0SlMpOwogCiAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUFyZ3M7ICsraSkKICAgICAg
ICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5hcHBlbmQocGFyYW1zWzEgKyBpXS5yZWNv
dmVyeUZvckpTVmFsdWUoKSk7CkBAIC02MjQzLDcgKzYxNTcsNyBAQCBwcml2YXRlOgogCiAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRy
V2l0aFBhdGNoKAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBj
YWxsZWVSZWcsIHRhcmdldFRvQ2hlY2ssCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QwLCB0YXJnZXRUb0NoZWNrLAogICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCkpOwogCiAgICAgICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKQEAgLTYy
NjEsMTkgKzYxNzUsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQp
KSk7CiAKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlciBzbG93UGF0aFNodWZmbGVy
KGppdCwgc2h1ZmZsZURhdGEpOworICAgICAgICAgICAgICAgIHNsb3dQYXRoU2h1ZmZsZXIuc2V0
Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDApKTsKICAgICAgICAg
ICAgICAgICBzbG93UGF0aFNodWZmbGVyLnByZXBhcmVGb3JTbG93UGF0aCgpOwogCi0gICAgICAg
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5m
byksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dDYWxsID0gaml0Lm5lYXJDYWxs
KCk7CiAKICAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZy
b21UYWlsQ2FsbCk7CiAKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChD
YWxsTGlua0luZm86OlRhaWxDYWxsLCBhcmd1bWVudHNMb2NhdGlvbkZvcihudW1BcmdzKSwgY29k
ZU9yaWdpbiwgY2FsbGVlUmVnKTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVw
Q2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBjb2RlT3JpZ2luLCBHUFJJbmZvOjpyZWdUMCk7
CiAKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAg
IFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtDYWxsID0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0SklUQ2FsbFRodW5rRW50cnlTdHViKGxpbmtDYWxsVGh1
bmtHZW5lcmF0b3IpLmVudHJ5Rm9yKGNhbGxMaW5rSW5mby0+YXJndW1lbnRzTG9jYXRpb24oKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci52bSgpLmdldENUSVN0dWIo
bGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cihsaW5rQ2FsbC5leGVjdXRhYmxl
QWRkcmVzcygpKSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0
Q2FsbExvY2F0aW9ucygKQEAgLTYzNjMsNyArNjI3OCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50KSkpOwogCiAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBj
YWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbygpOwotICAgICAg
ICAgICAgICAgIEFyZ3VtZW50c0xvY2F0aW9uIGFyZ3VtZW50c0xvY2F0aW9uID0gU3RhY2tBcmdz
OwogCiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVy
U2V0OjphbGxSZWdpc3RlcnMoKTsKICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLmV4Y2x1
ZGUoUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCkpOwpAQCAtNjUxMyw3
ICs2NDI3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkKICAg
ICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAg
ICAgICAgICBBU1NFUlQoIXVzZWRSZWdpc3RlcnMuZ2V0KEdQUkluZm86OnJlZ1QyKSk7Ci0gICAg
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5r
SW5mbyksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7
CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dDYWxsID0gaml0Lm5lYXJD
YWxsKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwp
CkBAIC02NTIxLDcgKzY0MzUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKGNhbGxUeXBlLCBhcmd1bWVudHNM
b2NhdGlvbiwgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoY2FsbFR5cGUsIG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYywgR1BSSW5mbzo6cmVnVDApOwogCiAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigK
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLW9yaWdpbmFs
U3RhY2tIZWlnaHQpLApAQCAtNjUzMCw3ICs2NDQ0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGxpbmtDYWxsID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LnZtKCkuZ2V0SklUQ2FsbFRodW5rRW50cnlTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmVu
dHJ5Rm9yKFN0YWNrQXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci52bSgpLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cihs
aW5rQ2FsbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygK
QEAgLTY2MzEsMTUgKzY1NDUsMTEgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIGV4Y2Vw
dGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb25Gb3JVbndpbmQocGFyYW1zLCBjYWxsU2l0
ZUluZGV4KTsKIAotICAgICAgICAgICAgICAgIGluY3JlbWVudENvdW50ZXIoJmppdCwgVk06OkZU
TENhbGxlcik7Ci0gICAgICAgICAgICAgICAgaW5jcmVtZW50Q291bnRlcigmaml0LCBWTTo6Q2Fs
bFZhcmFyZ3MpOwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGppdC5zdG9yZTMy
KAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjYWxsU2l0
ZUluZGV4LmJpdHMoKSksCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9y
KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogCiAgICAg
ICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCkt
PmFkZENhbGxMaW5rSW5mbygpOwotICAgICAgICAgICAgICAgIEFyZ3VtZW50c0xvY2F0aW9uIGFy
Z3VtZW50c0xvY2F0aW9uID0gU3RhY2tBcmdzOwogICAgICAgICAgICAgICAgIENhbGxWYXJhcmdz
RGF0YSogZGF0YSA9IG5vZGUtPmNhbGxWYXJhcmdzRGF0YSgpOwogCiAgICAgICAgICAgICAgICAg
dW5zaWduZWQgYXJnSW5kZXggPSAxOwpAQCAtNjgwMCw3ICs2NzEwLDcgQEAgcHJpdmF0ZToKIAog
ICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKQogICAgICAgICAgICAgICAgICAgICBqaXQu
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpub25BcmdHUFIw
KTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
Y2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKQpAQCAtNjgwOCw3ICs2NzE4LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGRvbmUubGlu
aygmaml0KTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnNldFVwQ2FsbChjYWxsVHlwZSwgYXJndW1lbnRzTG9jYXRpb24sIG5vZGUtPm9yaWdpbi5zZW1h
bnRpYywgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0
VXBDYWxsKGNhbGxUeXBlLCBub2RlLT5vcmlnaW4uc2VtYW50aWMsIEdQUkluZm86OnJlZ1QwKTsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAogICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtb3JpZ2luYWxTdGFja0hlaWdo
dCksCkBAIC02ODE3LDcgKzY3MjcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGppdC5h
ZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbGlu
a0NhbGwgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIudm0oKS5nZXRK
SVRDYWxsVGh1bmtFbnRyeVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuZW50cnlGb3IoU3Rh
Y2tBcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0
Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKGxpbmtDYWxsLmV4
ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKApAQCAtNjg4Niwx
NiArNjc5NiwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIEJveDxDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0PiBleGNlcHRpb25zID0gZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVh
dGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGV4Y2VwdGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb25Gb3JVbndpbmQocGFyYW1z
LCBjYWxsU2l0ZUluZGV4KTsKLQotICAgICAgICAgICAgICAgIGluY3JlbWVudENvdW50ZXIoJmpp
dCwgVk06OkZUTENhbGxlcik7Ci0gICAgICAgICAgICAgICAgaW5jcmVtZW50Q291bnRlcigmaml0
LCBWTTo6Q2FsbEV2YWwpOwotCisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaml0
LnN0b3JlMzIoCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KGNhbGxTaXRlSW5kZXguYml0cygpKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
Ojp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbygpOwotICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgU3RhY2tBcmdz
LCBub2RlLT5vcmlnaW4uc2VtYW50aWMsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIG5vZGUtPm9yaWdp
bi5zZW1hbnRpYywgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0
PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIENDYWxsSGVscGVyczo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgICAgICAgICBqaXQu
c3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCmluZGV4IDAyYmZmZTQwZDMyMzQ5
ZWIzZDcwNWZlYTBmYTk5Y2IxNDZjM2E2ZjQuLjlhMzkxZTM0YmYzNDhjNDU2ZDc1ZDk0MjZlYTQw
M2ZhOTk2MGQ0NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RW50cnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3Bw
CkBAIC03MSwxMSArNzEsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoCiAgICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSkKICAgICAgICAgZGF0YUxvZygiICAgIFZhbHVlcyBhdCBlbnRyeTog
IiwgdmFsdWVzLCAiXG4iKTsKICAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gdmFs
dWVzLm51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50LS07KSB7Ci0jaWYgTlVNQkVSX09GX0pT
X0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUwotICAgICAgICBpZiAoYXJndW1lbnQgPCBOVU1C
RVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTKQotICAgICAgICAgICAgYnJlYWs7
Ci0jZW5kaWYKKyAgICBmb3IgKGludCBhcmd1bWVudCA9IHZhbHVlcy5udW1iZXJPZkFyZ3VtZW50
cygpOyBhcmd1bWVudC0tOykgewogICAgICAgICBKU1ZhbHVlIHZhbHVlT25TdGFjayA9IGV4ZWMt
PnIodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLm9mZnNldCgpKS5hc2FuVW5z
YWZlSlNWYWx1ZSgpOwogICAgICAgICBKU1ZhbHVlIHJlY29uc3RydWN0ZWRWYWx1ZSA9IHZhbHVl
cy5hcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgIGlmICh2YWx1ZU9uU3RhY2sgPT0gcmVjb25z
dHJ1Y3RlZFZhbHVlIHx8ICFhcmd1bWVudCkKQEAgLTEwMywxMiArOTksOCBAQCB2b2lkKiBwcmVw
YXJlT1NSRW50cnkoCiAgICAgfQogICAgIAogICAgIGV4ZWMtPnNldENvZGVCbG9jayhlbnRyeUNv
ZGVCbG9jayk7Ci0KLSNpZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJT
Ci0gICAgdm9pZCogcmVzdWx0ID0gZW50cnlDb2RlLT5hZGRyZXNzRm9yQ2FsbChSZWdpc3RlckFy
Z3NBcml0eUNoZWNrTm90UmVxdWlyZWQpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0jZWxzZQotICAg
IHZvaWQqIHJlc3VsdCA9IGVudHJ5Q29kZS0+YWRkcmVzc0ZvckNhbGwoU3RhY2tBcmdzQXJpdHlD
aGVja05vdFJlcXVpcmVkKS5leGVjdXRhYmxlQWRkcmVzcygpOwotI2VuZGlmCisgICAgCisgICAg
dm9pZCogcmVzdWx0ID0gZW50cnlDb2RlLT5hZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVx
dWlyZWQpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSkKICAgICAgICAgZGF0YUxvZygiICAgIEVudHJ5IHdpbGwgc3VjY2VlZCwgZ29pbmcgdG8gYWRk
cmVzcyIsIFJhd1BvaW50ZXIocmVzdWx0KSwgIlxuIik7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE91dHB1dC5jcHAKaW5kZXggNjJlNjRkNzQ0M2E0YjBhMDFjYzdjNDM4MzU2ZTA0
ZWUzMGEzM2IxOC4uYmYyMDliMDRjOTQ0ZDk4ZTFkOGJlZDYxZTFkODUwMTg3YTRiYzI3MiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcApAQCAtODksMTYgKzg5LDYgQEAg
dm9pZCBPdXRwdXQ6OmFwcGVuZFRvKExCYXNpY0Jsb2NrIGJsb2NrKQogICAgIG1fYmxvY2sgPSBi
bG9jazsKIH0KIAotTFZhbHVlIE91dHB1dDo6YXJndW1lbnRSZWdpc3RlcihSZWcgcmVnKQotewot
ICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4obV9wcm9jLCBv
cmlnaW4oKSwgcmVnKTsKLX0KLQotTFZhbHVlIE91dHB1dDo6YXJndW1lbnRSZWdpc3RlckludDMy
KFJlZyByZWcpCi17Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihtX3Byb2MsIG9yaWdpbigpLCByZWcsIEludDMyKTsKLX0KLQogTFZhbHVlIE91dHB1dDo6
ZnJhbWVQb2ludGVyKCkKIHsKICAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1
ZT4obV9wcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBvcmlnaW4oKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPdXRwdXQuaAppbmRleCBkMTQwNzJlYTIyZTZhZTc4MzUxYjRmY2FhYzI5NTgzZDJl
ZWFmZGYzLi5kYWVhN2QwNTczOWZhNjY2NWEyODJiNWEyNzQ3ZWMxNTY1NTA5NjRlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKQEAgLTk4LDggKzk4LDYgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0T3JpZ2luKERGRzo6Tm9kZSogbm9kZSkgeyBtX29yaWdpbiA9IG5vZGU7IH0K
ICAgICBCMzo6T3JpZ2luIG9yaWdpbigpIHsgcmV0dXJuIEIzOjpPcmlnaW4obV9vcmlnaW4pOyB9
CiAKLSAgICBMVmFsdWUgYXJndW1lbnRSZWdpc3RlcihSZWcgcmVnKTsKLSAgICBMVmFsdWUgYXJn
dW1lbnRSZWdpc3RlckludDMyKFJlZyByZWcpOwogICAgIExWYWx1ZSBmcmFtZVBvaW50ZXIoKTsK
IAogICAgIEIzOjpTbG90QmFzZVZhbHVlKiBsb2NrZWRTdGFja1Nsb3Qoc2l6ZV90IGJ5dGVzKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlj
a2VuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2Vu
LmNwcAppbmRleCAwNTZkNTIxNWJjNWE3YWQ1NWQ0N2Y5ZjJkODhlN2I0ZWYwM2U4YWQ5Li42ZDEy
NzcxNDUzNDI1NTE1ZjI3NjE3ZDc1ZGEwMzcwNzAxOTA5MTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCkBAIC0yODQsMjQg
KzI4NCwxNiBAQCB2b2lkIFNoYWRvd0NoaWNrZW46OnVwZGF0ZShWTSYsIEV4ZWNTdGF0ZSogZXhl
YykKICAgICAgICAgICAgIGJvb2wgZm91bmRGcmFtZSA9IGFkdmFuY2VJbmRleEluTG9nVG8oY2Fs
bEZyYW1lLCBjYWxsRnJhbWUtPmpzQ2FsbGVlKCksIGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKSk7
CiAgICAgICAgICAgICBib29sIGlzVGFpbERlbGV0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgIEpT
U2NvcGUqIHNjb3BlID0gbnVsbHB0cjsKLSAgICAgICAgICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
anNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZy
YW1lLT5jb2RlQmxvY2soKTsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2sgJiYgY29kZUJsb2Nr
LT53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoY29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZShjb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIo
KS5vZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjb3BlLT5p
bmhlcml0cyhKU1Njb3BlOjppbmZvKCkpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKTsKKyAgICAgICAgICAgIGlm
IChjb2RlQmxvY2sgJiYgY29kZUJsb2NrLT53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVz
KCkgJiYgY29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkuaXNWYWxpZCgpKSB7CisgICAgICAgICAg
ICAgICAgc2NvcGUgPSBjYWxsRnJhbWUtPnNjb3BlKGNvZGVCbG9jay0+c2NvcGVSZWdpc3Rlcigp
Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzY29wZS0+aW5oZXJp
dHMoSlNTY29wZTo6aW5mbygpKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvdW5kRnJhbWUp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIXNjb3BlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNj
b3BlID0gbV9sb2dbaW5kZXhJbkxvZ10uc2NvcGU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChz
Y29wZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjb3BlLT5pbmhl
cml0cyhKU1Njb3BlOjppbmZvKCkpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgICAgICB0aGlz
VmFsdWUgPSBtX2xvZ1tpbmRleEluTG9nXS50aGlzVmFsdWU7CisgICAgICAgICAgICAgICAgc2Nv
cGUgPSBtX2xvZ1tpbmRleEluTG9nXS5zY29wZTsKKyAgICAgICAgICAgICAgICBpZiAoc2NvcGUp
CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjb3BlLT5pbmhlcml0cyhKU1Nj
b3BlOjppbmZvKCkpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRvUHVzaC5hcHBlbmQo
RnJhbWUodmlzaXRvci0+Y2FsbGVlKCksIGNhbGxGcmFtZSwgaXNUYWlsRGVsZXRlZCwgdGhpc1Zh
bHVlLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsRnJhbWUtPmNhbGxTaXRlSW5kZXgoKSkpOworICAg
ICAgICAgICAgdG9QdXNoLmFwcGVuZChGcmFtZSh2aXNpdG9yLT5jYWxsZWUoKSwgY2FsbEZyYW1l
LCBpc1RhaWxEZWxldGVkLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpLCBzY29wZSwgY29kZUJsb2Nr
LCBjYWxsRnJhbWUtPmNhbGxTaXRlSW5kZXgoKSkpOwogCiAgICAgICAgICAgICBpZiAoaW5kZXhJ
bkxvZyA8IGxvZ0N1cnNvckluZGV4CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBjb25kaXRpb24g
cHJvdGVjdHMgdXMgZnJvbSB0aGUgY2FzZSB3aGVyZSBhZHZhbmNlSW5kZXhJbkxvZ1RvIGRpZG4n
dCBmaW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAK
aW5kZXggYzcwMGEwZWU1NjZiN2E0YjQ0NGQ2YTA1MWZkYTYxN2I1Y2RhM2ZjMC4uNGI0Y2Q4Y2Nm
N2I3NDUzMzdjYWMwYjg4ZDUwZDY3NTMxNTcwOTEzMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcApAQCAtNjE2LDEzICs2MTYsMTMgQEAgdm9pZCBB
c3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcigpCiAKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0RHVtYlZpcnR1YWxDYWxs
KENhbGxMaW5rSW5mbyogaW5mbykKIHsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQ
UkluZm86Om5vbkFyZ0dQUjApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5m
bzo6cmVnVDIpOwogICAgIENhbGwgY2FsbCA9IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2so
CiAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgSklU
SlNDYWxsVGh1bmtFbnRyeVBvaW50c1dpdGhSZWYgdmlydHVhbFRodW5rID0gdmlydHVhbFRodW5r
Rm9yKCZsaW5rQnVmZmVyLnZtKCksICppbmZvKTsKLSAgICAgICAgICAgIGluZm8tPnNldFNsb3dT
dHViKGNyZWF0ZUpJVFN0dWJSb3V0aW5lKHZpcnR1YWxUaHVuay5jb2RlUmVmKCksIGxpbmtCdWZm
ZXIudm0oKSwgbnVsbHB0ciwgdHJ1ZSkpOwotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNh
bGwsIENvZGVMb2NhdGlvbkxhYmVsKHZpcnR1YWxUaHVuay5lbnRyeUZvcihTdGFja0FyZ3MpKSk7
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbFRodW5rID0gdmlydHVh
bFRodW5rRm9yKCZsaW5rQnVmZmVyLnZtKCksICppbmZvKTsKKyAgICAgICAgICAgIGluZm8tPnNl
dFNsb3dTdHViKGNyZWF0ZUpJVFN0dWJSb3V0aW5lKHZpcnR1YWxUaHVuaywgbGlua0J1ZmZlci52
bSgpLCBudWxscHRyLCB0cnVlKSk7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwg
Q29kZUxvY2F0aW9uTGFiZWwodmlydHVhbFRodW5rLmNvZGUoKSkpOwogICAgICAgICB9KTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKaW5kZXggNmFh
MDk5NTE2Y2U1MzQwODMyOWMwNzlmNTU1NjkyZTEzZGYzYjhiZC4uMzMxOGZmODFmNjMxNzFkY2M1
ZGVlOWFkNjAzYWE5ZmE5MDQzM2RjMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCkBAIC00MTQsODkgKzQxNCw2IEBAIHB1YmxpYzoKICNlbmRpZgogICAg
IH0KIAotICAgIGVudW0gU3BpbGxSZWdpc3RlclR5cGUgeyBTcGlsbEFsbCwgU3BpbGxFeGFjdGx5
IH07Ci0KLSAgICB2b2lkIHNwaWxsQXJndW1lbnRSZWdpc3RlcnNUb0ZyYW1lQmVmb3JlUHJvbG9n
dWUodW5zaWduZWQgbWluaW11bUFyZ3NUb1NwaWxsID0gMCwgU3BpbGxSZWdpc3RlclR5cGUgc3Bp
bGxUeXBlID0gU3BpbGxBbGwpCi0gICAgewotI2lmIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdV
TUVOVF9SRUdJU1RFUlMKLSAgICAgICAgSnVtcExpc3QgZG9uZVN0b3JpbmdBcmdzOwotCi0gICAg
ICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKGFyZ3VtZW50UmVnaXN0
ZXJGb3JDYWxsZWUoKSwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKLSAgICAgICAgR1BSUmVnIGFy
Z0NvdW50UmVnID0gYXJndW1lbnRSZWdpc3RlckZvckFyZ3VtZW50Q291bnQoKTsKLSAgICAgICAg
ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUoYXJnQ291bnRSZWcsIENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpOwotCi0gICAgICAgIHVuc2lnbmVkIGFyZ0luZGV4ID0g
MDsKLSAgICAgICAgLy8gQWx3YXlzIHNwaWxsICJ0aGlzIgotICAgICAgICBtaW5pbXVtQXJnc1Rv
U3BpbGwgPSBzdGQ6Om1heChtaW5pbXVtQXJnc1RvU3BpbGwsIDFVKTsKLQotICAgICAgICBmb3Ig
KDsgYXJnSW5kZXggPCBtaW5pbXVtQXJnc1RvU3BpbGwgJiYgYXJnSW5kZXggPCBOVU1CRVJfT0Zf
SlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTOyBhcmdJbmRleCsrKQotICAgICAgICAgICAg
ZW1pdFB1dEFyZ3VtZW50VG9DYWxsRnJhbWVCZWZvcmVQcm9sb2d1ZShhcmd1bWVudFJlZ2lzdGVy
Rm9yRnVuY3Rpb25Bcmd1bWVudChhcmdJbmRleCksIGFyZ0luZGV4KTsKLQotICAgICAgICBpZiAo
c3BpbGxUeXBlID09IFNwaWxsQWxsKSB7Ci0gICAgICAgICAgICAvLyBTcGlsbCBleHRyYSBhcmdz
IHBhc3NlZCB0byBmdW5jdGlvbgotICAgICAgICAgICAgZm9yICg7IGFyZ0luZGV4IDwgTlVNQkVS
X09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUzsgYXJnSW5kZXgrKykgewotICAgICAg
ICAgICAgICAgIGRvbmVTdG9yaW5nQXJncy5hcHBlbmQoYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkJlbG93T3JFcXVhbCwgYXJnQ291bnRSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
YXJnSW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dEFyZ3VtZW50VG9DYWxsRnJhbWVC
ZWZvcmVQcm9sb2d1ZShhcmd1bWVudFJlZ2lzdGVyRm9yRnVuY3Rpb25Bcmd1bWVudChhcmdJbmRl
eCksIGFyZ0luZGV4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGRvbmVT
dG9yaW5nQXJncy5saW5rKHRoaXMpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKG1pbmlt
dW1BcmdzVG9TcGlsbCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzcGlsbFR5cGUpOwotI2VuZGlm
Ci0gICAgfQotCi0gICAgdm9pZCBzcGlsbEFyZ3VtZW50UmVnaXN0ZXJzVG9GcmFtZSh1bnNpZ25l
ZCBtaW5pbXVtQXJnc1RvU3BpbGwgPSAwLCBTcGlsbFJlZ2lzdGVyVHlwZSBzcGlsbFR5cGUgPSBT
cGlsbEFsbCkKLSAgICB7Ci0jaWYgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lT
VEVSUwotICAgICAgICBKdW1wTGlzdCBkb25lU3RvcmluZ0FyZ3M7Ci0KLSAgICAgICAgZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKGFyZ3VtZW50UmVnaXN0ZXJGb3JDYWxsZWUoKSwgQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKTsKLSAgICAgICAgR1BSUmVnIGFyZ0NvdW50UmVnID0gYXJndW1lbnRSZWdp
c3RlckZvckFyZ3VtZW50Q291bnQoKTsKLSAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KGFyZ0NvdW50UmVnLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KTsKLSAgICAgICAgCi0g
ICAgICAgIHVuc2lnbmVkIGFyZ0luZGV4ID0gMDsKLSAgICAgICAgLy8gQWx3YXlzIHNwaWxsICJ0
aGlzIgotICAgICAgICBtaW5pbXVtQXJnc1RvU3BpbGwgPSBzdGQ6Om1heChtaW5pbXVtQXJnc1Rv
U3BpbGwsIDFVKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoOyBhcmdJbmRleCA8IG1pbmltdW1B
cmdzVG9TcGlsbCAmJiBhcmdJbmRleCA8IE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9S
RUdJU1RFUlM7IGFyZ0luZGV4KyspCi0gICAgICAgICAgICBlbWl0UHV0QXJndW1lbnRUb0NhbGxG
cmFtZShhcmd1bWVudFJlZ2lzdGVyRm9yRnVuY3Rpb25Bcmd1bWVudChhcmdJbmRleCksIGFyZ0lu
ZGV4KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzcGlsbFR5cGUgPT0gU3BpbGxBbGwpIHsKLSAg
ICAgICAgICAgIC8vIFNwaWxsIGV4dHJhIGFyZ3MgcGFzc2VkIHRvIGZ1bmN0aW9uCi0gICAgICAg
ICAgICBmb3IgKDsgYXJnSW5kZXggPCBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVH
SVNURVJTOyBhcmdJbmRleCsrKSB7Ci0gICAgICAgICAgICAgICAgZG9uZVN0b3JpbmdBcmdzLmFw
cGVuZChicmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBhcmdDb3VudFJlZywg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihhcmdJbmRleCkpKTsKLSAgICAgICAgICAgICAg
ICBlbWl0UHV0QXJndW1lbnRUb0NhbGxGcmFtZShhcmd1bWVudFJlZ2lzdGVyRm9yRnVuY3Rpb25B
cmd1bWVudChhcmdJbmRleCksIGFyZ0luZGV4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgZG9uZVN0b3JpbmdBcmdzLmxpbmsodGhpcyk7Ci0jZWxzZQotICAg
ICAgICBVTlVTRURfUEFSQU0obWluaW11bUFyZ3NUb1NwaWxsKTsKLSAgICAgICAgVU5VU0VEX1BB
UkFNKHNwaWxsVHlwZSk7Ci0jZW5kaWYKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBmaWxsQXJndW1l
bnRSZWdpc3RlcnNGcm9tRnJhbWVCZWZvcmVQcm9sb2d1ZSgpCi0gICAgewotI2lmIE5VTUJFUl9P
Rl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMKLSAgICAgICAgSnVtcExpc3QgZG9uZUxv
YWRpbmdBcmdzOwotCi0gICAgICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJv
bG9ndWUoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBhcmd1bWVudFJlZ2lzdGVyRm9yQ2FsbGVlKCkp
OwotICAgICAgICBHUFJSZWcgYXJnQ291bnRSZWcgPSBhcmd1bWVudFJlZ2lzdGVyRm9yQXJndW1l
bnRDb3VudCgpOwotICAgICAgICBlbWl0R2V0UGF5bG9hZEZyb21DYWxsRnJhbWVIZWFkZXJCZWZv
cmVQcm9sb2d1ZShDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBhcmdDb3VudFJlZyk7Ci0g
ICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ0luZGV4ID0gMDsgYXJnSW5kZXggPCBO
VU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTOyBhcmdJbmRleCsrKSB7Ci0g
ICAgICAgICAgICBpZiAoYXJnSW5kZXgpIC8vIEFsd2F5cyBsb2FkICJ0aGlzIgotICAgICAgICAg
ICAgICAgIGRvbmVMb2FkaW5nQXJncy5hcHBlbmQoYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJl
bG93T3JFcXVhbCwgYXJnQ291bnRSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoYXJn
SW5kZXgpKSk7Ci0gICAgICAgICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUFyZ3VtZW50QmVmb3Jl
UHJvbG9ndWUoYXJnSW5kZXgsIGFyZ3VtZW50UmVnaXN0ZXJGb3JGdW5jdGlvbkFyZ3VtZW50KGFy
Z0luZGV4KSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGRvbmVMb2FkaW5nQXJncy5s
aW5rKHRoaXMpOwotI2VuZGlmCi0gICAgfQotCiAjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKFg4NikK
ICAgICBzdGF0aWMgc2l6ZV90IHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKQogICAgIHsKQEAg
LTcwNywzMSArNjI0LDYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgc3RvcmVQdHIoZnJvbSwg
QWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkgKiBzdGF0aWNfY2FzdDxwdHJkaWZm
X3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpKSk7CiAg
ICAgfQotCi0gICAgdm9pZCBlbWl0UHV0QXJndW1lbnRUb0NhbGxGcmFtZUJlZm9yZVByb2xvZ3Vl
KEdQUlJlZyBmcm9tLCB1bnNpZ25lZCBhcmd1bWVudCkKLSAgICB7Ci0gICAgICAgIHN0b3JlUHRy
KGZyb20sIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIChDYWxsRnJhbWVTbG90Ojp0aGlz
QXJndW1lbnQgKyBhcmd1bWVudCkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdp
c3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpKSk7Ci0gICAgfQotCi0gICAgdm9p
ZCBlbWl0UHV0QXJndW1lbnRUb0NhbGxGcmFtZShHUFJSZWcgZnJvbSwgdW5zaWduZWQgYXJndW1l
bnQpCi0gICAgewotICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoZnJvbSwgQ2FsbEZy
YW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgYXJndW1lbnQpOwotICAgIH0KLQotICAgIHZvaWQgZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShjb25zdCBpbnQgZW50cnksIEdQ
UlJlZyB0bykKLSAgICB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdp
c3RlciwgZW50cnkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0g
cHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpKSwgdG8pOwotICAgIH0KLSAgICAKLSAgICB2b2lk
IGVtaXRHZXRGcm9tQ2FsbEZyYW1lQXJndW1lbnRCZWZvcmVQcm9sb2d1ZSh1bnNpZ25lZCBhcmd1
bWVudCwgR1BSUmVnIHRvKQotICAgIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCAoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgYXJndW1lbnQpICog
c3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQ
b2ludGVyRGVsdGEoKSksIHRvKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBlbWl0R2V0UGF5bG9h
ZEZyb21DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShjb25zdCBpbnQgZW50cnksIEdQUlJl
ZyB0bykKLSAgICB7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVy
LCBlbnRyeSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9s
b2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVz
Y3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgdG8pOwotICAgIH0KICNlbHNlCiAgICAgdm9pZCBl
bWl0UHV0UGF5bG9hZFRvQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUoR1BSUmVnIGZyb20s
IGludCBlbnRyeSkKICAgICB7CkBAIC0xNzY4LDE0ICsxNjYwLDcgQEAgcHVibGljOgogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgdm9pZCB3YW5nc0ludDY0SGFzaChHUFJSZWcgaW5wdXRBbmRSZXN1
bHQsIEdQUlJlZyBzY3JhdGNoKTsKICNlbmRpZgotCi0jaWYgRU5BQkxFKFZNX0NPVU5URVJTKQot
ICAgIHZvaWQgaW5jcmVtZW50Q291bnRlcihWTTo6Vk1Db3VudGVyVHlwZSBjb3VudGVyVHlwZSkK
LSAgICB7Ci0gICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyh2
bSgpLT5hZGRyZXNzT2ZDb3VudGVyKGNvdW50ZXJUeXBlKSkpOwotICAgIH0KLSNlbmRpZgotCisg
ICAgCiBwcm90ZWN0ZWQ6CiAgICAgVk0qIG1fdm07CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9j
azsKQEAgLTE3ODQsMTIgKzE2NjksNiBAQCBwcm90ZWN0ZWQ6CiAgICAgSGFzaE1hcDxDb2RlQmxv
Y2sqLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0Pj4gbV9kZWNvZGVkQ29kZU1hcHM7
CiB9OwogCi0jaWYgRU5BQkxFKFZNX0NPVU5URVJTKQotI2RlZmluZSBpbmNyZW1lbnRDb3VudGVy
KGppdCwgY291bnRlclR5cGUpIChqaXQpLT5pbmNyZW1lbnRDb3VudGVyKGNvdW50ZXJUeXBlKQot
I2Vsc2UKLSNkZWZpbmUgaW5jcmVtZW50Q291bnRlcihqaXQsIGNvdW50ZXJUeXBlKSAoKHZvaWQp
MCkKLSNlbmRpZgotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhY2hlZFJlY292ZXJ5LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FjaGVkUmVjb3ZlcnkuY3BwCmluZGV4IDZk
YmVmNWU0MTJiNTc2ZGJkN2UxYTFjM2ZiMGY2ZjEzNGUwYmEzZjYuLmY0YWFjYzZjODBlZTU1MDkw
ODQ3Nzg1MzZlYzdiMDg2YzE4ODIzMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ2FjaGVkUmVjb3ZlcnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q2FjaGVkUmVjb3ZlcnkuY3BwCkBAIC0zMCwyNiArMzAsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotdm9pZCBDYWNoZWRSZWNvdmVyeTo6YWRkVGFyZ2V0SlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3Mg
anNWYWx1ZVJlZ3MpCi17Ci0gICAgQVNTRVJUKG1fd2FudGVkRlBSID09IEludmFsaWRGUFJSZWcp
OwotICAgIHNpemVfdCBleGlzdGluZyA9IG1fZ3ByVGFyZ2V0cy5maW5kKGpzVmFsdWVSZWdzKTsK
LSAgICBpZiAoZXhpc3RpbmcgPT0gV1RGOjpub3RGb3VuZCkgewotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgIGlmIChtX2dwclRhcmdldHMuc2l6ZSgpID4gMCAmJiBtX3JlY292ZXJ5LmlzU2V0
KCkgJiYgbV9yZWNvdmVyeS5pc0luR1BSKCkpIHsKLSAgICAgICAgICAgIC8vIElmIHdlIGFyZSBy
ZWNvdmVyaW5nIHRvIHRoZSBzYW1lIEdQUiwgbWFrZSB0aGF0IEdQUiB0aGUgZmlyc3QgdGFyZ2V0
LgotICAgICAgICAgICAgR1BSUmVnIHNvdXJjZUdQUiA9IG1fcmVjb3ZlcnkuZ3ByKCk7Ci0gICAg
ICAgICAgICBpZiAoanNWYWx1ZVJlZ3MuZ3ByKCkgPT0gc291cmNlR1BSKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gQXBwZW5kIHRoZSBjdXJyZW50IGZpcnN0IEdQUiBiZWxvdy4KLSAgICAgICAgICAg
ICAgICBqc1ZhbHVlUmVncyA9IEpTVmFsdWVSZWdzKG1fZ3ByVGFyZ2V0c1swXS5ncHIoKSk7Ci0g
ICAgICAgICAgICAgICAgbV9ncHJUYXJnZXRzWzBdID0gSlNWYWx1ZVJlZ3Moc291cmNlR1BSKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIG1fZ3ByVGFyZ2V0cy5h
cHBlbmQoanNWYWx1ZVJlZ3MpOwotICAgIH0KLX0KLQogLy8gV2UgcHJlZmVyIGxvYWRpbmcgZG91
YmxlcyBhbmQgdW5kZXRlcm1pbmVkIEpTVmFsdWVzIGludG8gRlBScwogLy8gYmVjYXVzZSBpdCB3
b3VsZCBvdGhlcndpc2UgdXNlIHVwIEdQUnMuICBUd28gaW4gSlNWQUxVRTMyXzY0LgogYm9vbCBD
YWNoZWRSZWNvdmVyeTo6bG9hZHNJbnRvRlBSKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ2FjaGVkUmVjb3ZlcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ2FjaGVkUmVjb3ZlcnkuaAppbmRleCA0NGUzODhkMmJiYzA2ZDVlYWVjMjE1NmY3NTdj
YmRkYzYzMjU1OTFiLi5mNjI3YWM5MDE1N2E0MGNiNGFiNGI1YWJlOGIwZTM3ZjM5MTY4OTJiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhY2hlZFJlY292ZXJ5LmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWNoZWRSZWNvdmVyeS5oCkBAIC01MCw3ICs1
MCw2IEBAIHB1YmxpYzoKICAgICBDYWNoZWRSZWNvdmVyeSYgb3BlcmF0b3I9KENhY2hlZFJlY292
ZXJ5JiYpID0gZGVsZXRlOwogCiAgICAgY29uc3QgVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMT4m
IHRhcmdldHMoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldHM7IH0KLSAgICBjb25zdCBWZWN0b3I8
SlNWYWx1ZVJlZ3MsIDE+JiBncHJUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV9ncHJUYXJnZXRz
OyB9CiAKICAgICB2b2lkIGFkZFRhcmdldChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogICAgIHsKQEAg
LTY5LDExICs2OCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIG1fdGFyZ2V0cy5jbGVhcigpOwogICAg
IH0KIAotICAgIHZvaWQgYWRkVGFyZ2V0SlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MpOworICAgIHZv
aWQgc2V0V2FudGVkSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MpCisgICAgewor
ICAgICAgICBBU1NFUlQobV93YW50ZWRGUFIgPT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgIG1f
d2FudGVkSlNWYWx1ZVJlZ3MgPSBqc1ZhbHVlUmVnczsKKyAgICB9CiAKICAgICB2b2lkIHNldFdh
bnRlZEZQUihGUFJSZWcgZnByKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZ3ByVGFyZ2V0cy5p
c0VtcHR5KCkpOworICAgICAgICBBU1NFUlQoIW1fd2FudGVkSlNWYWx1ZVJlZ3MpOwogICAgICAg
ICBtX3dhbnRlZEZQUiA9IGZwcjsKICAgICB9CiAKQEAgLTExNiwyMCArMTE5LDE0IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgc2V0UmVjb3ZlcnkoVmFsdWVSZWNvdmVyeSByZWNvdmVyeSkgeyBtX3Jl
Y292ZXJ5ID0gcmVjb3Zlcnk7IH0KIAotICAgIEpTVmFsdWVSZWdzIHdhbnRlZEpTVmFsdWVSZWdz
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChtX2dwclRhcmdldHMuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWVSZWdzKCk7Ci0KLSAgICAgICAgcmV0dXJuIG1fZ3ByVGFy
Z2V0c1swXTsKLSAgICB9CisgICAgSlNWYWx1ZVJlZ3Mgd2FudGVkSlNWYWx1ZVJlZ3MoKSBjb25z
dCB7IHJldHVybiBtX3dhbnRlZEpTVmFsdWVSZWdzOyB9CiAKICAgICBGUFJSZWcgd2FudGVkRlBS
KCkgY29uc3QgeyByZXR1cm4gbV93YW50ZWRGUFI7IH0KIHByaXZhdGU6CiAgICAgVmFsdWVSZWNv
dmVyeSBtX3JlY292ZXJ5OworICAgIEpTVmFsdWVSZWdzIG1fd2FudGVkSlNWYWx1ZVJlZ3M7CiAg
ICAgRlBSUmVnIG1fd2FudGVkRlBSIHsgSW52YWxpZEZQUlJlZyB9OwogICAgIFZlY3RvcjxWaXJ0
dWFsUmVnaXN0ZXIsIDE+IG1fdGFyZ2V0czsKLSAgICBWZWN0b3I8SlNWYWx1ZVJlZ3MsIDE+IG1f
Z3ByVGFyZ2V0czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCmluZGV4IDMzZDllYmNkZTkyOTYx
ODI2Zjg2ODBkOWI4MWVkMGFjZmJhMjQ4MTkuLmE5ODdlYWI5ZjhjMTljM2ZhN2E4YTI5NTdiMzVi
NzRhOGVlYjYyMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZy
YW1lU2h1ZmZsZURhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVEYXRhLmgKQEAgLTM5LDcgKzM5LDYgQEAgcHVibGljOgogICAgIFZhbHVlUmVjb3Zl
cnkgY2FsbGVlOwogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBhcmdzOwogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgYm9vbCBhcmd1bWVudHNJblJlZ2lzdGVycyB7IGZhbHNlIH07CiAgICAgUmVn
aXN0ZXJNYXA8VmFsdWVSZWNvdmVyeT4gcmVnaXN0ZXJzOwogICAgIEdQUlJlZyB0YWdUeXBlTnVt
YmVyIHsgSW52YWxpZEdQUlJlZyB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q2FsbEZyYW1lU2h1ZmZsZXIuY3BwCmluZGV4IDBmYmRmZDRhNDljZDMwN2EzNjczYTliYWUzZWQ2
YWVlNjg4N2ExMDAuLjcyMDlmODlmNWM2ZjY2MGZiNzE3NzllOTA4NGRhMTJlYWQxMjFjZDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCkBA
IC00Miw5ICs0Miw2IEBAIENhbGxGcmFtZVNodWZmbGVyOjpDYWxsRnJhbWVTaHVmZmxlcihDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQ2FsbEZyYW1lU2h1ZmZsZURhCiAgICAgICAgICsgcm91bmRB
cmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
KSkKICAgICAsIG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJl
Z2lzdGVycwogICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLmFy
Z3Muc2l6ZSgpKSkKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICwgbV9hcmd1bWVudHNJblJlZ2lz
dGVycyhkYXRhLmFyZ3VtZW50c0luUmVnaXN0ZXJzKQotI2VuZGlmCiAgICAgLCBtX2ZyYW1lRGVs
dGEobV9hbGlnbmVkTmV3RnJhbWVTaXplIC0gbV9hbGlnbmVkT2xkRnJhbWVTaXplKQogICAgICwg
bV9sb2NrZWRSZWdpc3RlcnMoUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpKQogewpAQCAtNTcs
MjEgKzU0LDExIEBAIENhbGxGcmFtZVNodWZmbGVyOjpDYWxsRnJhbWVTaHVmZmxlcihDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQ2FsbEZyYW1lU2h1ZmZsZURhCiAgICAgbV9sb2NrZWRSZWdpc3Rl
cnMuZXhjbHVkZShSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogCiAgICAg
QVNTRVJUKCFkYXRhLmNhbGxlZS5pc0luSlNTdGFjaygpIHx8IGRhdGEuY2FsbGVlLnZpcnR1YWxS
ZWdpc3RlcigpLmlzTG9jYWwoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBpZiAoZGF0YS5h
cmd1bWVudHNJblJlZ2lzdGVycykKLSAgICAgICAgYWRkTmV3KEpTVmFsdWVSZWdzKGFyZ3VtZW50
UmVnaXN0ZXJGb3JDYWxsZWUoKSksIGRhdGEuY2FsbGVlKTsKLSAgICBlbHNlCi0jZW5kaWYKLSAg
ICAgICAgYWRkTmV3KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCBkYXRh
LmNhbGxlZSk7Ci0gICAgCisgICAgYWRkTmV3KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpLCBkYXRhLmNhbGxlZSk7CisKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRh
dGEuYXJncy5zaXplKCk7ICsraSkgewogICAgICAgICBBU1NFUlQoIWRhdGEuYXJnc1tpXS5pc0lu
SlNTdGFjaygpIHx8IGRhdGEuYXJnc1tpXS52aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2FsKCkpOwot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGlmIChkYXRhLmFyZ3VtZW50c0luUmVnaXN0ZXJz
ICYmIGkgPCBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTKQotICAgICAg
ICAgICAgYWRkTmV3KEpTVmFsdWVSZWdzKGFyZ3VtZW50UmVnaXN0ZXJGb3JGdW5jdGlvbkFyZ3Vt
ZW50KGkpKSwgZGF0YS5hcmdzW2ldKTsKLSAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAg
ICBhZGROZXcodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSksIGRhdGEuYXJnc1tpXSk7Cisg
ICAgICAgIGFkZE5ldyh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSwgZGF0YS5hcmdzW2ld
KTsKICAgICB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTk4LDEzICsxODUsOCBAQCB2b2lk
IENhbGxGcmFtZVNodWZmbGVyOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICNlbHNlCi0gICAgICAgIGlmIChuZXdDYWNoZWRSZWNvdmVyeSkg
eworICAgICAgICBpZiAobmV3Q2FjaGVkUmVjb3ZlcnkpCiAgICAgICAgICAgICBvdXQucHJpbnQo
IiAgICAgICAgICIsIHJlZywgIiA8LSAiLCBuZXdDYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSk7
Ci0gICAgICAgICAgICBpZiAobmV3Q2FjaGVkUmVjb3ZlcnktPmdwclRhcmdldHMoKS5zaXplKCkg
PiAxKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBuZXdDYWNoZWRS
ZWNvdmVyeS0+Z3ByVGFyZ2V0cygpLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIiwgIiwgbmV3Q2FjaGVkUmVjb3ZlcnktPmdwclRhcmdldHMoKVtpXS5ncHIoKSwg
IiA8LSAiLCBuZXdDYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KICNlbmRpZgogICAgICAgICBvdXQucHJpbnQoIlxuIik7CiAgICAgfQpAQCAtNTE0
LDcgKzQ5Niw3IEBAIGJvb2wgQ2FsbEZyYW1lU2h1ZmZsZXI6OnRyeVdyaXRlcyhDYWNoZWRSZWNv
dmVyeSYgY2FjaGVkUmVjb3ZlcnkpCiAgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5
KCkuaXNJblJlZ2lzdGVycygpCiAgICAgICAgIHx8IGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCku
aXNDb25zdGFudCgpKTsKIAotICAgIGlmICh2ZXJib3NlICYmIGNhY2hlZFJlY292ZXJ5LnRhcmdl
dHMoKS5zaXplKCkpCisgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIiAgICogU3Rv
cmluZyAiLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNhY2hlZFJlY292ZXJ5LnRhcmdldHMoKS5zaXplKCk7ICsraSkgewogICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0IHsgY2FjaGVkUmVjb3ZlcnkudGFyZ2V0cygpW2ldIH07CkBA
IC01MjMsOSArNTA1LDkgQEAgYm9vbCBDYWxsRnJhbWVTaHVmZmxlcjo6dHJ5V3JpdGVzKENhY2hl
ZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKICAgICAgICAgICAgIGRhdGFMb2coIWkgPyAiIGlu
dG8gIiA6ICIsIGFuZCAiLCAiTkVXICIsIHRhcmdldCk7CiAgICAgICAgIGVtaXRTdG9yZShjYWNo
ZWRSZWNvdmVyeSwgYWRkcmVzc0Zvck5ldyh0YXJnZXQpKTsKICAgICAgICAgc2V0TmV3KHRhcmdl
dCwgbnVsbHB0cik7Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygi
XG4iKTsKICAgICB9CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIlxuIik7CiAg
ICAgY2FjaGVkUmVjb3ZlcnkuY2xlYXJUYXJnZXRzKCk7CiAgICAgaWYgKCFjYWNoZWRSZWNvdmVy
eS53YW50ZWRKU1ZhbHVlUmVncygpICYmIGNhY2hlZFJlY292ZXJ5LndhbnRlZEZQUigpID09IElu
dmFsaWRGUFJSZWcpCiAgICAgICAgIGNsZWFyQ2FjaGVkUmVjb3ZlcnkoY2FjaGVkUmVjb3Zlcnku
cmVjb3ZlcnkoKSk7CkBAIC02MjQsNyArNjA2LDcgQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6
cHJlcGFyZUFueSgpCiB7CiAgICAgQVNTRVJUKCFpc1VuZGVjaWRlZCgpKTsKIAotICAgIGluaXRE
YW5nZXJGcm9udGllcigpOworICAgIHVwZGF0ZURhbmdlckZyb250aWVyKCk7CiAKICAgICAvLyBG
aXJzdCwgd2UgdHJ5IHRvIHN0b3JlIGFueSB2YWx1ZSB0aGF0IGdvZXMgYWJvdmUgdGhlIGRhbmdl
cgogICAgIC8vIGZyb250aWVyLiBUaGlzIHdpbGwgbmV2ZXIgdXNlIG1vcmUgcmVnaXN0ZXJzIHNp
bmNlIHdlIGFyZSBvbmx5CkBAIC03MjAsOSArNzAyLDEzIEBAIHZvaWQgQ2FsbEZyYW1lU2h1ZmZs
ZXI6OnByZXBhcmVBbnkoKQogICAgICAgICBBU1NFUlRfVU5VU0VEKHdyaXRlc09LLCB3cml0ZXNP
Syk7CiAgICAgfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBpZiAobV90YWdUeXBlTnVtYmVy
ICE9IEludmFsaWRHUFJSZWcgJiYgbV9uZXdSZWdpc3RlcnNbbV90YWdUeXBlTnVtYmVyXSkKKyAg
ICAgICAgcmVsZWFzZUdQUihtX3RhZ1R5cGVOdW1iZXIpOworI2VuZGlmCisKICAgICAvLyBIYW5k
bGUgMikgYnkgbG9hZGluZyBhbGwgcmVnaXN0ZXJzLiBXZSBkb24ndCBoYXZlIHRvIGRvIGFueQog
ICAgIC8vIHdyaXRlcywgc2luY2UgdGhleSBoYXZlIGJlZW4gdGFrZW4gY2FyZSBvZiBhYm92ZS4K
LSAgICAvLyBOb3RlIHRoYXQgd2UgbmVlZCBtX3RhZ1R5cGVOdW1iZXIgdG8gcmVtYWluIGxvY2tl
ZCB0byBib3ggd2FudGVkIHJlZ2lzdGVycy4KICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0
YUxvZygiICBMb2FkaW5nIHdhbnRlZCByZWdpc3RlcnMgaW50byByZWdpc3RlcnNcbiIpOwogICAg
IGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgpOyByZWcgPSBy
ZWcubmV4dCgpKSB7CkBAIC03NTYsMTkgKzc0MiwxMiBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVy
OjpwcmVwYXJlQW55KCkKIAogICAgIC8vIFdlIG5lZWQgdG8gaGFuZGxlIDQpIGZpcnN0IGJlY2F1
c2UgaXQgaW1wbGllcyByZWxlYXNpbmcKICAgICAvLyBtX25ld0ZyYW1lQmFzZSwgd2hpY2ggY291
bGQgYmUgYSB3YW50ZWQgcmVnaXN0ZXIuCi0gICAgLy8gTm90ZSB0aGF0IHdlIGRlbGF5IHNldHRp
bmcgdGhlIGFyZ3VtZW50IGNvdW50IHJlZ2lzdGVyIGFzIGl0IG5lZWRzIHRvIGJlIHJlbGVhc2Vk
IGluIHN0ZXAgMy4KICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiICAgKiBTdG9y
aW5nIHRoZSBhcmd1bWVudCBjb3VudCBpbnRvICIsIFZpcnR1YWxSZWdpc3RlciB7IENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnQgfSwgIlxuIik7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBp
ZiAoIW1fYXJndW1lbnRzSW5SZWdpc3RlcnMpIHsKLSNlbmRpZgotICAgICAgICBtX2ppdC5zdG9y
ZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksCi0gICAgICAgICAgICBhZGRyZXNz
Rm9yTmV3KFZpcnR1YWxSZWdpc3RlciB7IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgfSku
d2l0aE9mZnNldChUYWdPZmZzZXQpKTsKLSAgICAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKGFyZ0NvdW50KCkpLAotICAgICAgICAgICAgYWRkcmVzc0Zvck5l
dyhWaXJ0dWFsUmVnaXN0ZXIgeyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50IH0pLndpdGhP
ZmZzZXQoUGF5bG9hZE9mZnNldCkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgfQotI2VuZGlm
CisgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLAorICAg
ICAgICBhZGRyZXNzRm9yTmV3KFZpcnR1YWxSZWdpc3RlciB7IENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQgfSkud2l0aE9mZnNldChUYWdPZmZzZXQpKTsKKyAgICBtX2ppdC5zdG9yZTMyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoYXJnQ291bnQoKSksCisgICAgICAgIGFkZHJlc3NG
b3JOZXcoVmlydHVhbFJlZ2lzdGVyIHsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCB9KS53
aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpKTsKIAogICAgIGlmICghaXNTbG93UGF0aCgpKSB7CiAg
ICAgICAgIEFTU0VSVChtX25ld0ZyYW1lQmFzZSAhPSBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwpAQCAtNzg4LDIzICs3NjcsNiBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVy
OjpwcmVwYXJlQW55KCkKIAogICAgICAgICBlbWl0RGlzcGxhY2UoKmNhY2hlZFJlY292ZXJ5KTsK
ICAgICB9Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIC8vIEZvciByZWNvdmVyaWVzIHdpdGgg
bXVsdGlwbGUgcmVnaXN0ZXIgdGFyZ2V0cywgY29weSB0aGUgY29udGVudHMgb2YgdGhlIGZpcnN0
IHRhcmdldCB0byB0aGUKLSAgICAvLyByZW1haW5pbmcgdGFyZ2V0cy4KLSAgICBmb3IgKFJlZyBy
ZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkg
ewotICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgeyBtX25ld1JlZ2lzdGVy
c1tyZWddIH07Ci0gICAgICAgIGlmICghY2FjaGVkUmVjb3ZlcnkgfHwgY2FjaGVkUmVjb3Zlcnkt
PmdwclRhcmdldHMoKS5zaXplKCkgPCAyKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgR1BSUmVnIHNvdXJjZUdQUiA9IGNhY2hlZFJlY292ZXJ5LT5ncHJUYXJnZXRzKClbMF0uZ3By
KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgY2FjaGVkUmVjb3ZlcnktPmdwclRh
cmdldHMoKS5zaXplKCk7IGkrKykKLSAgICAgICAgICAgIG1faml0Lm1vdmUoc291cmNlR1BSLCBj
YWNoZWRSZWNvdmVyeS0+Z3ByVGFyZ2V0cygpW2ldLmdwcigpKTsKLSAgICB9Ci0KLSAgICBpZiAo
bV9hcmd1bWVudHNJblJlZ2lzdGVycykKLSAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKGFyZ0NvdW50KCkpLCBhcmd1bWVudFJlZ2lzdGVyRm9yQXJndW1lbnRD
b3VudCgpKTsKLSNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAppbmRleCBhMjllNDJhZTI0OTI2YWZm
MjQ3ZmNhNjA0ZWZkZDRlNzZiMGMyMjEyLi5mMDkxOGZjZWM5MmExOTc3ZWYyYjZhNWRmNDNlYTIz
NTAzYTE3OTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVm
Zmxlci5oCkBAIC05Niw1NyArOTYsMTcgQEAgcHVibGljOgogICAgIC8vIGNvbnRhaW5zIGluZm9y
bWF0aW9uIGFib3V0IHdoZXJlIHRoZQogICAgIC8vIGFyZ3VtZW50cy9jYWxsZWUvY2FsbGVlLXNh
dmUgcmVnaXN0ZXJzIGFyZSBieSB0YWtpbmcgaW50bwogICAgIC8vIGFjY291bnQgYW55IHNwaWxs
aW5nIHRoYXQgYWNxdWlyZUdQUigpIGNvdWxkIGhhdmUgZG9uZS4KLSAgICBDYWxsRnJhbWVTaHVm
ZmxlRGF0YSBzbmFwc2hvdChBcmd1bWVudHNMb2NhdGlvbiBhcmd1bWVudHNMb2NhdGlvbikgY29u
c3QKKyAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzbmFwc2hvdCgpIGNvbnN0CiAgICAgewogICAg
ICAgICBBU1NFUlQoaXNVbmRlY2lkZWQoKSk7CiAKICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURh
dGEgZGF0YTsKICAgICAgICAgZGF0YS5udW1Mb2NhbHMgPSBudW1Mb2NhbHMoKTsKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgICAgICBkYXRhLmFyZ3VtZW50c0luUmVnaXN0ZXJzID0gYXJndW1lbnRz
TG9jYXRpb24gIT0gU3RhY2tBcmdzOwotI2VuZGlmCi0gICAgICAgIGlmIChhcmd1bWVudHNMb2Nh
dGlvbiA9PSBTdGFja0FyZ3MpCi0gICAgICAgICAgICBkYXRhLmNhbGxlZSA9IGdldE5ldyhWaXJ0
dWFsUmVnaXN0ZXIgeyBDYWxsRnJhbWVTbG90OjpjYWxsZWUgfSktPnJlY292ZXJ5KCk7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgUmVnIHJlZyB7IGFyZ3VtZW50UmVnaXN0ZXJGb3JDYWxs
ZWUoKSB9OwotICAgICAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgbV9u
ZXdSZWdpc3RlcnNbcmVnXSB9OwotICAgICAgICAgICAgZGF0YS5jYWxsZWUgPSBjYWNoZWRSZWNv
dmVyeS0+cmVjb3ZlcnkoKTsKLSAgICAgICAgfQorICAgICAgICBkYXRhLmNhbGxlZSA9IGdldE5l
dyhWaXJ0dWFsUmVnaXN0ZXIgeyBDYWxsRnJhbWVTbG90OjpjYWxsZWUgfSktPnJlY292ZXJ5KCk7
CiAgICAgICAgIGRhdGEuYXJncy5yZXNpemUoYXJnQ291bnQoKSk7Ci0KLSAgICAgICAgVmVjdG9y
PFZhbHVlUmVjb3Zlcnk+IHJlZ2lzdGVyQXJnUmVjb3ZlcmllczsKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICAvLyBGaW5kIGNhY2hlZCByZWNvdmVyaWVzIGZvciBhbGwgYXJndW1lbnQgcmVn
aXN0ZXJzLgotICAgICAgICAvLyBXZSBkbyB0aGlzIGhlcmUsIGJlY2F1c2UgYSBjYWNoZWQgcmVj
b3ZlcnkgbWF5IGJlIHRoZSBzb3VyY2UgZm9yIG11bHRpcGxlCi0gICAgICAgIC8vIGFyZ3VtZW50
IHJlZ2lzdGVycywgYnV0IGl0IGlzIG9ubHkgc3RvcmVkIGluIG9uZSBtX25ld1JlZ2lzdGVyIGlu
ZGV4LgotICAgICAgICBpZiAoZGF0YS5hcmd1bWVudHNJblJlZ2lzdGVycykgewotICAgICAgICAg
ICAgdW5zaWduZWQgbWF4QXJndW1lbnRSZWdpc3RlciA9IHN0ZDo6bWluKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihhcmdDb3VudCgpKSwgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lT
VEVSUyk7Ci0gICAgICAgICAgICByZWdpc3RlckFyZ1JlY292ZXJpZXMucmVzaXplKG1heEFyZ3Vt
ZW50UmVnaXN0ZXIpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhBcmd1
bWVudFJlZ2lzdGVyOyArK2kpIHsKLSAgICAgICAgICAgICAgICBSZWcgcmVnIHsgYXJndW1lbnRS
ZWdpc3RlckZvckZ1bmN0aW9uQXJndW1lbnQoaSkgfTsKLSAgICAgICAgICAgICAgICBDYWNoZWRS
ZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgeyBtX25ld1JlZ2lzdGVyc1tyZWddIH07Ci0gICAgICAg
ICAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAo
YXV0byBqc1ZhbHVlUmVnIDogY2FjaGVkUmVjb3ZlcnktPmdwclRhcmdldHMoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlZ2lzdGVyQXJnUmVjb3Zlcmllc1tqc0Z1bmN0aW9uQXJndW1lbnRG
b3JBcmd1bWVudFJlZ2lzdGVyKGpzVmFsdWVSZWcuZ3ByKCkpXSA9IGNhY2hlZFJlY292ZXJ5LT5y
ZWNvdmVyeSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
I2VuZGlmCi0gICAgICAgIAotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50
KCk7ICsraSkgewotICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0xvY2F0aW9uID09IFN0YWNrQXJn
cyB8fCBpID49IE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMpCi0gICAg
ICAgICAgICAgICAgZGF0YS5hcmdzW2ldID0gZ2V0TmV3KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGkpKS0+cmVjb3ZlcnkoKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
IFJlZyByZWcgeyBhcmd1bWVudFJlZ2lzdGVyRm9yRnVuY3Rpb25Bcmd1bWVudChpKSB9OwotICAg
ICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckFyZ1JlY292ZXJpZXNbaV0pOwotICAgICAgICAg
ICAgICAgIGRhdGEuYXJnc1tpXSA9IHJlZ2lzdGVyQXJnUmVjb3Zlcmllc1tpXTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50
KCk7ICsraSkKKyAgICAgICAgICAgIGRhdGEuYXJnc1tpXSA9IGdldE5ldyh2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudChpKSktPnJlY292ZXJ5KCk7CiAgICAgICAgIGZvciAoUmVnIHJlZyA9IFJl
Zzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7Ci0gICAg
ICAgICAgICBpZiAocmVnLmlzR1BSKCkgJiYgYXJndW1lbnRzTG9jYXRpb24gIT0gU3RhY2tBcmdz
Ci0gICAgICAgICAgICAgICAgJiYgR1BSSW5mbzo6dG9Bcmd1bWVudEluZGV4KHJlZy5ncHIoKSkg
PCBhcmd1bWVudFJlZ2lzdGVySW5kZXhGb3JKU0Z1bmN0aW9uQXJndW1lbnQoYXJnQ291bnQoKSkp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KICAgICAgICAgICAgIENhY2hlZFJlY292ZXJ5
KiBjYWNoZWRSZWNvdmVyeSB7IG1fbmV3UmVnaXN0ZXJzW3JlZ10gfTsKICAgICAgICAgICAgIGlm
ICghY2FjaGVkUmVjb3ZlcnkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC00MTYsOSAr
Mzc2LDYgQEAgcHJpdmF0ZToKIAogICAgIGludCBtX2FsaWduZWRPbGRGcmFtZVNpemU7CiAgICAg
aW50IG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGJvb2wg
bV9hcmd1bWVudHNJblJlZ2lzdGVyczsKLSNlbmRpZgogCiAgICAgLy8gVGhpcyBpcyB0aGUgZGlz
dGFuY2UsIGluIHNsb3RzLCBiZXR3ZWVuIHRoZSBiYXNlIG9mIHRoZSBuZXcKICAgICAvLyBmcmFt
ZSBhbmQgdGhlIGJhc2Ugb2YgdGhlIG9sZCBmcmFtZS4gSXQgY291bGQgYmUgbmVnYXRpdmUgd2hl
bgpAQCAtNDYwLDIyICs0MTcsMTUgQEAgcHJpdmF0ZToKICAgICBib29sIHRyeUFjcXVpcmVUYWdU
eXBlTnVtYmVyKCk7CiAjZW5kaWYKIAotICAgIC8vIFRoaXMgc3RvcmVzIGluZm9ybWF0aW9uIGFi
b3V0IHRoZSByZWNvdmVyeSBmb3IgdGhlIHZhbHVlIHRoYXQKLSAgICAvLyBzaG91bGQgZXZlbnR1
YWxseSBnbyBpbnRvIHRoYXQgcmVnaXN0ZXIuIEluIHNvbWUgY2FzZXMgdGhlcmUKLSAgICAvLyBh
cmUgcmVjb3ZlcmllcyB0aGF0IGhhdmUgbXVsdGlwbGUgdGFyZ2V0cy4gRm9yIHRob3NlIHJlY292
ZXJpZXMsCi0gICAgLy8gb25seSB0aGUgZmlyc3QgdGFyZ2V0IHJlZ2lzdGVyIGluIHRoZSBtYXAg
aGFzIHRoZSByZWNvdmVyeS4KLSAgICAvLyBXZSBvcHRpbWl6ZSB0aGUgY2FzZSB3aGVyZSB0aGVy
ZSBhcmUgbXVsdGlwbGUgdGFyZ2V0cyBmb3Igb25lCi0gICAgLy8gcmVjb3Zlcnkgd2hlcmUgb25l
IG9mIHRob3NlIHRhcmdldHMgaXMgYWxzbyB0aGUgc291cmNlIHJlZ2lzdGVyLgotICAgIC8vIFJl
c3RvcmluZyB0aGUgZmlyc3QgdGFyZ2V0IGJlY29tZXMgYSBub3AgYW5kIHNpbXBsaWZpZXMgdGhl
IGxvZ2ljCi0gICAgLy8gb2YgcmVzdG9yaW5nIHRoZSByZW1haW5pbmcgdGFyZ2V0cy4KKyAgICAv
LyBUaGlzIHN0b3JlcywgZm9yIGVhY2ggcmVnaXN0ZXIsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBy
ZWNvdmVyeQorICAgIC8vIGZvciB0aGUgdmFsdWUgdGhhdCBzaG91bGQgZXZlbnR1YWxseSBnbyBp
bnRvIHRoYXQgcmVnaXN0ZXIuIFRoZQorICAgIC8vIG9ubHkgcmVnaXN0ZXJzIHRoYXQgaGF2ZSBh
IHRhcmdldCByZWNvdmVyeSB3aWxsIGJlIGNhbGxlZS1zYXZlCisgICAgLy8gcmVnaXN0ZXJzLCBh
cyB3ZWxsIGFzIHBvc3NpYmx5IG9uZSBKU1ZhbHVlUmVncyBmb3IgaG9sZGluZyB0aGUKKyAgICAv
LyBjYWxsZWUuCiAgICAgLy8KICAgICAvLyBPbmNlIHRoZSBjb3JyZWN0IHZhbHVlIGhhcyBiZWVu
IHB1dCBpbnRvIHRoZSByZWdpc3RlcnMsIGFuZAogICAgIC8vIGNvbnRyYXJ5IHRvIHdoYXQgd2Ug
ZG8gd2l0aCBtX25ld0ZyYW1lLCB3ZSBrZWVwIHRoZSBlbnRyeSBpbgogICAgIC8vIG1fbmV3UmVn
aXN0ZXJzIHRvIHNpbXBsaWZ5IHNwaWxsaW5nLgotICAgIC8vCi0gICAgLy8gSWYgYSByZWNvdmVy
eSBoYXMgbXVsdGlwbGUgdGFyZ2V0IHJlZ2lzdGVycywgd2UgY29weSB0aGUgdmFsdWUKLSAgICAv
LyBmcm9tIHRoZSBmaXJzdCB0YXJnZXQgcmVnaXN0ZXIgdG8gdGhlIHJlbWFpbmluZyB0YXJnZXQg
cmVnaXN0ZXJzCi0gICAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgc2h1ZmZsaW5nIHByb2Nlc3MuCiAg
ICAgUmVnaXN0ZXJNYXA8Q2FjaGVkUmVjb3ZlcnkqPiBtX25ld1JlZ2lzdGVyczsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENoZWNrRnVuY3Rvcj4KQEAgLTY5MSwxMyArNjQxLDkgQEAgcHJpdmF0
ZToKICAgICAgICAgQVNTRVJUKGpzVmFsdWVSZWdzICYmICFnZXROZXcoanNWYWx1ZVJlZ3MpKTsK
ICAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5ID0gYWRkQ2FjaGVkUmVjb3Zl
cnkocmVjb3ZlcnkpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGlmIChjYWNoZWRSZWNv
dmVyeS0+d2FudGVkSlNWYWx1ZVJlZ3MoKSkgewotICAgICAgICAgICAgaWYgKHJlY292ZXJ5Lmlz
SW5HUFIoKSAmJiBqc1ZhbHVlUmVncy5ncHIoKSA9PSByZWNvdmVyeS5ncHIoKSkgewotICAgICAg
ICAgICAgICAgIG1fbmV3UmVnaXN0ZXJzW2NhY2hlZFJlY292ZXJ5LT53YW50ZWRKU1ZhbHVlUmVn
cygpLmdwcigpXSA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgbV9uZXdSZWdpc3RlcnNbanNW
YWx1ZVJlZ3MuZ3ByKCldID0gY2FjaGVkUmVjb3Zlcnk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgbV9uZXdSZWdpc3RlcnNbanNWYWx1ZVJlZ3MuZ3ByKCldID0g
Y2FjaGVkUmVjb3Zlcnk7CisgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS0+d2FudGVkSlNWYWx1
ZVJlZ3MoKSkKKyAgICAgICAgICAgIG1fbmV3UmVnaXN0ZXJzW2NhY2hlZFJlY292ZXJ5LT53YW50
ZWRKU1ZhbHVlUmVncygpLmdwcigpXSA9IG51bGxwdHI7CisgICAgICAgIG1fbmV3UmVnaXN0ZXJz
W2pzVmFsdWVSZWdzLmdwcigpXSA9IGNhY2hlZFJlY292ZXJ5OwogI2Vsc2UKICAgICAgICAgaWYg
KEpTVmFsdWVSZWdzIG9sZFJlZ3MgeyBjYWNoZWRSZWNvdmVyeS0+d2FudGVkSlNWYWx1ZVJlZ3Mo
KSB9KSB7CiAgICAgICAgICAgICBpZiAob2xkUmVncy5wYXlsb2FkR1BSKCkpCkBAIC03MTAsNyAr
NjU2LDggQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKGpzVmFsdWVSZWdzLnRhZ0dQUigpICE9IElu
dmFsaWRHUFJSZWcpCiAgICAgICAgICAgICBtX25ld1JlZ2lzdGVyc1tqc1ZhbHVlUmVncy50YWdH
UFIoKV0gPSBjYWNoZWRSZWNvdmVyeTsKICNlbmRpZgotICAgICAgICBjYWNoZWRSZWNvdmVyeS0+
YWRkVGFyZ2V0SlNWYWx1ZVJlZ3MoanNWYWx1ZVJlZ3MpOworICAgICAgICBBU1NFUlQoIWNhY2hl
ZFJlY292ZXJ5LT53YW50ZWRKU1ZhbHVlUmVncygpKTsKKyAgICAgICAgY2FjaGVkUmVjb3Zlcnkt
PnNldFdhbnRlZEpTVmFsdWVSZWdzKGpzVmFsdWVSZWdzKTsKICAgICB9CiAKICAgICB2b2lkIGFk
ZE5ldyhGUFJSZWcgZnByLCBWYWx1ZVJlY292ZXJ5IHJlY292ZXJ5KQpAQCAtODA4LDIzICs3NTUs
MTMgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHJlZyA8PSBkYW5nZXJGcm9udGllcigpOwog
ICAgIH0KIAotICAgIHZvaWQgaW5pdERhbmdlckZyb250aWVyKCkKLSAgICB7Ci0gICAgICAgIGZp
bmREYW5nZXJGcm9udGllckZyb20obGFzdE5ldygpKTsKLSAgICB9Ci0KICAgICB2b2lkIHVwZGF0
ZURhbmdlckZyb250aWVyKCkKICAgICB7Ci0gICAgICAgIGZpbmREYW5nZXJGcm9udGllckZyb20o
bV9kYW5nZXJGcm9udGllciAtIDEpOwotICAgIH0KLQotICAgIHZvaWQgZmluZERhbmdlckZyb250
aWVyRnJvbShWaXJ0dWFsUmVnaXN0ZXIgbmV4dFJlZykKLSAgICB7CiAgICAgICAgIEFTU0VSVCgh
aXNVbmRlY2lkZWQoKSk7CiAKICAgICAgICAgbV9kYW5nZXJGcm9udGllciA9IGZpcnN0TmV3KCkg
LSAxOwotICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciByZWcgPSBuZXh0UmVnOyByZWcgPj0g
Zmlyc3ROZXcoKTsgcmVnIC09IDEpIHsKLSAgICAgICAgICAgIGlmICghaXNWYWxpZE9sZChuZXdB
c09sZChyZWcpKSB8fCAhZ2V0T2xkKG5ld0FzT2xkKHJlZykpKQorICAgICAgICBmb3IgKFZpcnR1
YWxSZWdpc3RlciByZWcgPSBsYXN0TmV3KCk7IHJlZyA+PSBmaXJzdE5ldygpOyByZWcgLT0gMSkg
eworICAgICAgICAgICAgaWYgKCFnZXROZXcocmVnKSB8fCAhaXNWYWxpZE9sZChuZXdBc09sZChy
ZWcpKSB8fCAhZ2V0T2xkKG5ld0FzT2xkKHJlZykpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgICAgICBtX2RhbmdlckZyb250aWVyID0gcmVnOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAKaW5kZXggODZhMGRkZWMy
ODJiZDU0NDIzNzA3MzYwNWZjOWM5ZDQwODcwMzg3NC4uMmVmNmVkMTExNTNhNDU0ZWE0ODFhZjVh
MGQ2OTljN2ZkNDA4ZmE3MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
YWxsRnJhbWVTaHVmZmxlcjY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nh
bGxGcmFtZVNodWZmbGVyNjQuY3BwCkBAIC0zMjMsOCArMzIzLDcgQEAgdm9pZCBDYWxsRnJhbWVT
aHVmZmxlcjo6ZW1pdERpc3BsYWNlKENhY2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKICAg
ICAgICAgICAgIG1faml0Lm1vdmUoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwgd2Fu
dGVkUmVnLmdwcigpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9qaXQubW92ZTY0VG9E
b3VibGUoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwgd2FudGVkUmVnLmZwcigpKTsK
LSAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQgPSBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmRh
dGFGb3JtYXQoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXRK
UyB8fCBmb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmRhdGFGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SlMpOwog
ICAgICAgICB1cGRhdGVSZWNvdmVyeShjYWNoZWRSZWNvdmVyeSwKICAgICAgICAgICAgIFZhbHVl
UmVjb3Zlcnk6OmluUmVnaXN0ZXIod2FudGVkUmVnLCBEYXRhRm9ybWF0SlMpKTsKICAgICB9IGVs
c2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAppbmRleCA4NDEzNjczMjg3Yjg4ZDdj
NTc1MDc3ZTJkY2VhYjZjMWJiYzZhMDllLi4zZDZhNGM2Y2UyNDRmMjRlMzc2NWZhZjY1YTc0YTg3
YjA1ODNhNmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8u
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaApAQCAtNjksOCArNjks
OCBAQCBwdWJsaWM6CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX2dwciA9
PSBJbnZhbGlkR1BSUmVnOyB9CiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsg
cmV0dXJuIG1fZ3ByICE9IEludmFsaWRHUFJSZWc7IH0KIAotICAgIGJvb2wgb3BlcmF0b3I9PShK
U1ZhbHVlUmVncyBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9ncHIgPT0gb3RoZXIubV9ncHI7IH0K
LSAgICBib29sIG9wZXJhdG9yIT0oSlNWYWx1ZVJlZ3Mgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXIpOyB9CisgICAgYm9vbCBvcGVyYXRvcj09KEpTVmFsdWVSZWdzIG90aGVy
KSB7IHJldHVybiBtX2dwciA9PSBvdGhlci5tX2dwcjsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShK
U1ZhbHVlUmVncyBvdGhlcikgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KICAgICAKICAg
ICBHUFJSZWcgZ3ByKCkgY29uc3QgeyByZXR1cm4gbV9ncHI7IH0KICAgICBHUFJSZWcgdGFnR1BS
KCkgY29uc3QgeyByZXR1cm4gSW52YWxpZEdQUlJlZzsgfQpAQCAtMzMxLDcgKzMzMSw2IEBAIHBy
aXZhdGU6CiAKICNpZiBDUFUoWDg2KQogI2RlZmluZSBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNU
RVJTIDB1Ci0jZGVmaW5lIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMg
MHUKICNkZWZpbmUgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgMHUKIAogY2xhc3Mg
R1BSSW5mbyB7CkBAIC0zNTQsNyArMzUzLDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBH
UFJSZWcgYXJndW1lbnRHUFIyID0gWDg2UmVnaXN0ZXJzOjplYXg7IC8vIHJlZ1QwCiAgICAgc3Rh
dGljIGNvbnN0IEdQUlJlZyBhcmd1bWVudEdQUjMgPSBYODZSZWdpc3RlcnM6OmVieDsgLy8gcmVn
VDMKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vbkFyZ0dQUjAgPSBYODZSZWdpc3RlcnM6OmVz
aTsgLy8gcmVnVDQKLSAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vbkFyZ0dQUjEgPSBYODZSZWdp
c3RlcnM6OmVkaTsgLy8gcmVnVDUKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVl
R1BSID0gWDg2UmVnaXN0ZXJzOjplYXg7IC8vIHJlZ1QwCiAgICAgc3RhdGljIGNvbnN0IEdQUlJl
ZyByZXR1cm5WYWx1ZUdQUjIgPSBYODZSZWdpc3RlcnM6OmVkeDsgLy8gcmVnVDEKICAgICBzdGF0
aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5vblJldHVybkdQUiA9IFg4NlJlZ2lzdGVyczo6
ZWN4OwpAQCAtMzgxLDE0ICszNzksNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogCi0gICAgc3RhdGljIHVuc2lnbmVkIHRvQXJndW1lbnRJbmRleChHUFJSZWcgcmVn
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlZyAhPSBJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAg
QVNTRVJUKHN0YXRpY19jYXN0PGludD4ocmVnKSA8IDgpOwotICAgICAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgaW5kZXhGb3JBcmd1bWVudFJlZ2lzdGVyWzhdID0geyAyLCAwLCAxLCAzLCBJbnZh
bGlkSW5kZXgsIEludmFsaWRJbmRleCwgSW52YWxpZEluZGV4LCBJbnZhbGlkSW5kZXggfTsKLSAg
ICAgICAgcmV0dXJuIGluZGV4Rm9yQXJndW1lbnRSZWdpc3RlcltyZWddOwotICAgIH0KLQogICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBkZWJ1Z05hbWUoR1BSUmVnIHJlZykKICAgICB7CiAgICAgICAg
IEFTU0VSVChyZWcgIT0gSW52YWxpZEdQUlJlZyk7CkBAIC00MDksMTEgKzM5OSw5IEBAIHB1Ymxp
YzoKICNpZiAhT1MoV0lORE9XUykKICNkZWZpbmUgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVS
UyA2dQogI2RlZmluZSBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA1dQotI2RlZmlu
ZSBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTIChOVU1CRVJfT0ZfQVJH
VU1FTlRfUkVHSVNURVJTIC0gMnUpCiAjZWxzZQogI2RlZmluZSBOVU1CRVJfT0ZfQVJHVU1FTlRf
UkVHSVNURVJTIDR1CiAjZGVmaW5lIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTIDd1
Ci0jZGVmaW5lIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMgMHUKICNl
bmRpZgogCiBjbGFzcyBHUFJJbmZvIHsKQEAgLTQ3Niw3ICs0NjQsNiBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0IEdQUlJlZyBhcmd1bWVudEdQUjMgPSBYODZSZWdpc3RlcnM6OnI5OyAvLyBy
ZWdUMwogI2VuZGlmCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25BcmdHUFIwID0gWDg2UmVn
aXN0ZXJzOjpyMTA7IC8vIHJlZ1Q1IChyZWdUNCBvbiBXaW5kb3dzKQotICAgIHN0YXRpYyBjb25z
dCBHUFJSZWcgbm9uQXJnR1BSMSA9IFg4NlJlZ2lzdGVyczo6ZWF4OyAvLyByZWdUMAogICAgIHN0
YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIgPSBYODZSZWdpc3RlcnM6OmVheDsgLy8g
cmVnVDAKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSMiA9IFg4NlJlZ2lz
dGVyczo6ZWR4OyAvLyByZWdUMSBvciByZWdUMgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9u
UHJlc2VydmVkTm9uUmV0dXJuR1BSID0gWDg2UmVnaXN0ZXJzOjpyMTA7IC8vIHJlZ1Q1IChyZWdU
NCBvbiBXaW5kb3dzKQpAQCAtNTIxLDE4ICs1MDgsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBpbmRleEZvclJlZ2lzdGVyW3JlZ107CiAgICAgfQogCi0gICAgc3RhdGljIHVuc2lnbmVkIHRv
QXJndW1lbnRJbmRleChHUFJSZWcgcmVnKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlZyAhPSBJ
bnZhbGlkR1BSUmVnKTsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4ocmVnKSA8IDE2
KTsKLSNpZiAhT1MoV0lORE9XUykKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGluZGV4
Rm9yQXJndW1lbnRSZWdpc3RlclsxNl0gPSB7IEludmFsaWRJbmRleCwgMywgMiwgSW52YWxpZElu
ZGV4LCBJbnZhbGlkSW5kZXgsIEludmFsaWRJbmRleCwgMSwgMCwgNCwgNSwgSW52YWxpZEluZGV4
LCBJbnZhbGlkSW5kZXgsIEludmFsaWRJbmRleCwgSW52YWxpZEluZGV4LCBJbnZhbGlkSW5kZXgs
IEludmFsaWRJbmRleCB9OwotI2Vsc2UKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGlu
ZGV4Rm9yQXJndW1lbnRSZWdpc3RlclsxNl0gPSB7IEludmFsaWRJbmRleCwgMCwgMSwgSW52YWxp
ZEluZGV4LCBJbnZhbGlkSW5kZXgsIEludmFsaWRJbmRleCwgSW52YWxpZEluZGV4LCBJbnZhbGlk
SW5kZXgsIDIsIDMsIEludmFsaWRJbmRleCwgSW52YWxpZEluZGV4LCBJbnZhbGlkSW5kZXgsIElu
dmFsaWRJbmRleCwgSW52YWxpZEluZGV4LCBJbnZhbGlkSW5kZXggfTsKLSNlbmRpZgotICAgICAg
ICByZXR1cm4gaW5kZXhGb3JBcmd1bWVudFJlZ2lzdGVyW3JlZ107Ci0gICAgfQotICAgIAogICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBkZWJ1Z05hbWUoR1BSUmVnIHJlZykKICAgICB7CiAgICAgICAg
IEFTU0VSVChyZWcgIT0gSW52YWxpZEdQUlJlZyk7CkBAIC01NjMsNyArNTM4LDYgQEAgcHVibGlj
OgogCiAjaWYgQ1BVKEFSTSkKICNkZWZpbmUgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyA0
dQotI2RlZmluZSBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTIDB1CiAj
ZGVmaW5lIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTIDB1CiAKIGNsYXNzIEdQUklu
Zm8gewpAQCAtNjI3LDE1ICs2MDEsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogCi0gICAgc3RhdGljIHVuc2lnbmVkIHRvQXJndW1lbnRJbmRleChHUFJSZWcgcmVn
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlZyAhPSBJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAg
QVNTRVJUKHN0YXRpY19jYXN0PGludD4ocmVnKSA8IDE2KTsKLSAgICAgICAgaWYgKHJlZyA+IGFy
Z3VtZW50R1BSMykKLSAgICAgICAgICAgIHJldHVybiBJbnZhbGlkSW5kZXg7Ci0gICAgICAgIHJl
dHVybiAodW5zaWduZWQpcmVnOwotICAgIH0KLSAgICAKICAgICBzdGF0aWMgY29uc3QgY2hhciog
ZGVidWdOYW1lKEdQUlJlZyByZWcpCiAgICAgewogICAgICAgICBBU1NFUlQocmVnICE9IEludmFs
aWRHUFJSZWcpOwpAQCAtNjU2LDcgKzYyMSw2IEBAIHB1YmxpYzoKIAogI2lmIENQVShBUk02NCkK
ICNkZWZpbmUgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyA4dQotI2RlZmluZSBOVU1CRVJf
T0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTIChOVU1CRVJfT0ZfQVJHVU1FTlRfUkVH
SVNURVJTIC0gMnUpCiAvLyBDYWxsZWUgU2F2ZXMgaW5jbHVkZXMgeDE5Li54MjggYW5kIEZQIHJl
Z2lzdGVycyBxOC4ucTE1CiAjZGVmaW5lIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJT
IDE4dQogCkBAIC03MzQsNyArNjk4LDYgQEAgcHVibGljOgogICAgIENPTVBJTEVfQVNTRVJUKEFS
TTY0UmVnaXN0ZXJzOjpxMTMgPT0gMTMsIHExM19pc18xMyk7CiAgICAgQ09NUElMRV9BU1NFUlQo
QVJNNjRSZWdpc3RlcnM6OnExNCA9PSAxNCwgcTE0X2lzXzE0KTsKICAgICBDT01QSUxFX0FTU0VS
VChBUk02NFJlZ2lzdGVyczo6cTE1ID09IDE1LCBxMTVfaXNfMTUpOwotCiAgICAgc3RhdGljIEdQ
UlJlZyB0b1JlZ2lzdGVyKHVuc2lnbmVkIGluZGV4KQogICAgIHsKICAgICAgICAgcmV0dXJuIChH
UFJSZWcpaW5kZXg7CkBAIC03NTIsMTQgKzcxNSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IHRvUmVnaXN0ZXIoaW5kZXgpOwogICAgIH0KIAotICAgIHN0YXRpYyB1bnNpZ25lZCB0b0FyZ3Vt
ZW50SW5kZXgoR1BSUmVnIHJlZykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChyZWcgIT0gSW52YWxp
ZEdQUlJlZyk7Ci0gICAgICAgIGlmIChyZWcgPiBhcmd1bWVudEdQUjcpCi0gICAgICAgICAgICBy
ZXR1cm4gSW52YWxpZEluZGV4OwotICAgICAgICByZXR1cm4gKHVuc2lnbmVkKXJlZzsKLSAgICB9
Ci0KICAgICBzdGF0aWMgY29uc3QgY2hhciogZGVidWdOYW1lKEdQUlJlZyByZWcpCiAgICAgewog
ICAgICAgICBBU1NFUlQocmVnICE9IEludmFsaWRHUFJSZWcpOwpAQCAtNzkxLDcgKzc0Niw2IEBA
IHB1YmxpYzoKIAogI2lmIENQVShNSVBTKQogI2RlZmluZSBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVH
SVNURVJTIDR1Ci0jZGVmaW5lIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RF
UlMgMHUKICNkZWZpbmUgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgMHUKIAogY2xh
c3MgR1BSSW5mbyB7CkBAIC04MTksNyArNzczLDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25z
dCBHUFJSZWcgYXJndW1lbnRHUFIyID0gTUlQU1JlZ2lzdGVyczo6YTI7CiAgICAgc3RhdGljIGNv
bnN0IEdQUlJlZyBhcmd1bWVudEdQUjMgPSBNSVBTUmVnaXN0ZXJzOjphMzsKICAgICBzdGF0aWMg
Y29uc3QgR1BSUmVnIG5vbkFyZ0dQUjAgPSByZWdUNDsKLSAgICBzdGF0aWMgY29uc3QgR1BSUmVn
IG5vbkFyZ0dQUjEgPSByZWdUNTsKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVl
R1BSID0gcmVnVDA7CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUjIgPSBy
ZWdUMTsKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5vblJldHVybkdQUiA9
IHJlZ1QyOwpAQCAtODcyLDcgKzgyNSw2IEBAIHB1YmxpYzoKIAogI2lmIENQVShTSDQpCiAjZGVm
aW5lIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgNHUKLSNkZWZpbmUgTlVNQkVSX09GX0pT
X0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUyAwdQogI2RlZmluZSBOVU1CRVJfT0ZfQ0FMTEVF
X1NBVkVTX1JFR0lTVEVSUyAwdQogCiBjbGFzcyBHUFJJbmZvIHsKQEAgLTkwMyw3ICs4NTUsNiBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBhcmd1bWVudEdQUjIgPSBTSDRSZWdp
c3RlcnM6OnI2OyAvLyByZWdUMgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgYXJndW1lbnRHUFIz
ID0gU0g0UmVnaXN0ZXJzOjpyNzsgLy8gcmVnVDMKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5v
bkFyZ0dQUjAgPSByZWdUNDsKLSAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vbkFyZ0dQUjEgPSBy
ZWdUNTsKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSID0gcmVnVDA7CiAg
ICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUjIgPSByZWdUMTsKICAgICBzdGF0
aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5vblJldHVybkdQUiA9IHJlZ1QyOwpAQCAtOTQw
LDczICs4OTEsNiBAQCBwdWJsaWM6CiAKICNlbmRpZiAvLyBDUFUoU0g0KQogCi1pbmxpbmUgR1BS
UmVnIGFyZ3VtZW50UmVnaXN0ZXJGb3IodW5zaWduZWQgYXJndW1lbnRJbmRleCkKLXsKLSNpZiBO
VU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTCi0gICAgaWYgKGFyZ3VtZW50SW5kZXggPj0gTlVN
QkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUykKLSAgICAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7
Ci0gICAgcmV0dXJuIEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3Rlcihhcmd1bWVudEluZGV4KTsK
LSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGFyZ3VtZW50SW5kZXgpOwotICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEludmFsaWRHUFJSZWc7Ci0jZW5kaWYKLX0K
LQotaW5saW5lIEdQUlJlZyBhcmd1bWVudFJlZ2lzdGVyRm9yQ2FsbGVlKCkKLXsKLSNpZiBOVU1C
RVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTCi0gICAgcmV0dXJuIGFyZ3VtZW50UmVnaXN0ZXJGb3Io
MCk7Ci0jZWxzZQotICAgIHJldHVybiBHUFJJbmZvOjpyZWdUMDsKLSNlbmRpZgotfQotCi1pbmxp
bmUgR1BSUmVnIGFyZ3VtZW50UmVnaXN0ZXJGb3JBcmd1bWVudENvdW50KCkKLXsKLSAgICByZXR1
cm4gYXJndW1lbnRSZWdpc3RlckZvcigxKTsKLX0KLQotaW5saW5lIHVuc2lnbmVkIGFyZ3VtZW50
UmVnaXN0ZXJJbmRleEZvckpTRnVuY3Rpb25Bcmd1bWVudCh1bnNpZ25lZCBhcmd1bWVudCkKLXsK
LSAgICByZXR1cm4gYXJndW1lbnQgKyAyOwotfQotCi1pbmxpbmUgdW5zaWduZWQganNGdW5jdGlv
bkFyZ3VtZW50Rm9yQXJndW1lbnRSZWdpc3RlckluZGV4KHVuc2lnbmVkIGluZGV4KQotewotI2lm
IE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMgPiAwCi0gICAgQVNTRVJU
KGluZGV4ID49IDIpOwotICAgIHJldHVybiBpbmRleCAtIDI7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShpbmRleCk7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gMDsKLSNlbmRpZgotfQotCi1pbmxpbmUgdW5zaWduZWQganNGdW5jdGlvbkFyZ3VtZW50Rm9y
QXJndW1lbnRSZWdpc3RlcihHUFJSZWcgZ3ByKQotewotI2lmIE5VTUJFUl9PRl9KU19GVU5DVElP
Tl9BUkdVTUVOVF9SRUdJU1RFUlMgPiAwCi0gICAgdW5zaWduZWQgYXJndW1lbnRSZWdpc3Rlcklu
ZGV4ID0gR1BSSW5mbzo6dG9Bcmd1bWVudEluZGV4KGdwcik7Ci0gICAgQVNTRVJUKGFyZ3VtZW50
UmVnaXN0ZXJJbmRleCAhPSBHUFJJbmZvOjpJbnZhbGlkSW5kZXgpOwotICAgIHJldHVybiBqc0Z1
bmN0aW9uQXJndW1lbnRGb3JBcmd1bWVudFJlZ2lzdGVySW5kZXgoYXJndW1lbnRSZWdpc3Rlcklu
ZGV4KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGdwcik7Ci0gICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLSNlbmRpZgotfQotCi1pbmxpbmUgR1BSUmVn
IGFyZ3VtZW50UmVnaXN0ZXJGb3JGdW5jdGlvbkFyZ3VtZW50KHVuc2lnbmVkIGFyZ3VtZW50SW5k
ZXgpCi17Ci0gICAgcmV0dXJuIGFyZ3VtZW50UmVnaXN0ZXJGb3IoYXJndW1lbnRSZWdpc3Rlcklu
ZGV4Rm9ySlNGdW5jdGlvbkFyZ3VtZW50KGFyZ3VtZW50SW5kZXgpKTsKLX0KLQotaW5saW5lIHVu
c2lnbmVkIG51bWJlck9mUmVnaXN0ZXJBcmd1bWVudHNGb3IodW5zaWduZWQgYXJndW1lbnRDb3Vu
dCkKLXsKLSAgICByZXR1cm4gc3RkOjptaW4oYXJndW1lbnRDb3VudCwgTlVNQkVSX09GX0pTX0ZV
TkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUyk7Ci19Ci0KIC8vIFRoZSBiYXNlbGluZSBKSVQgdXNl
cyAiYWNjdW11bGF0b3IiIHN0eWxlIGV4ZWN1dGlvbiB3aXRoIHJlZ1QwIChmb3IgNjQtYml0KQog
Ly8gYW5kIHJlZ1QwICsgcmVnVDEgKGZvciAzMi1iaXQpIHNlcnZpbmcgYXMgdGhlIGFjY3VtdWxh
dG9yIHJlZ2lzdGVyKHMpIGZvcgogLy8gcGFzc2luZyByZXN1bHRzIG9mIG9uZSBvcGNvZGUgdG8g
dGhlIG5leHQuIEhlbmNlOgpAQCAtMTAyMyw4ICs5MDcsNiBAQCBpbmxpbmUgSlNWYWx1ZVJlZ3Mg
ZXh0cmFjdFJlc3VsdChKU1ZhbHVlUmVncyByZXN1bHQpIHsgcmV0dXJuIHJlc3VsdDsgfQogI2Vu
ZGlmCiBpbmxpbmUgTm9SZXN1bHRUYWcgZXh0cmFjdFJlc3VsdChOb1Jlc3VsdFRhZykgeyByZXR1
cm4gTm9SZXN1bHQ7IH0KIAotI2Vsc2UgLy8gQ0xPT1AKLSNkZWZpbmUgTlVNQkVSX09GX0pTX0ZV
TkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUyAwdQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IGU3Y2ZkYzI4
ZWY2MmI2M2FlN2I2YzczZmYxODQ4ZmNmMGE1MjVhMDIuLmMyYWNmYjM1OTkyYmIwZGU5MDdkZTYz
YjczYWFkNDdjNDU1YjE2ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTY2LDYg
KzY2LDE0IEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIgbmV3CiAgICAgICAgIG5ld0NhbGxlZUZ1bmN0
aW9uKTsKIH0KIAorSklUOjpDb2RlUmVmIEpJVDo6Y29tcGlsZUNUSU5hdGl2ZUNhbGwoVk0qIHZt
LCBOYXRpdmVGdW5jdGlvbiBmdW5jKQoreworICAgIGlmICghdm0tPmNhblVzZUpJVCgpKQorICAg
ICAgICByZXR1cm4gQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X25hdGl2ZV9jYWxs
X3RyYW1wb2xpbmUpOworICAgIEpJVCBqaXQodm0sIDApOworICAgIHJldHVybiBqaXQucHJpdmF0
ZUNvbXBpbGVDVElOYXRpdmVDYWxsKHZtLCBmdW5jKTsKK30KKwogSklUOjpKSVQoVk0qIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICA6IEpTSW50ZXJmYWNlSklUKHZtLCBjb2RlQmxvY2sp
CiAgICAgLCBtX2ludGVycHJldGVyKHZtLT5pbnRlcnByZXRlcikKQEAgLTU3MSwyMCArNTc5LDYg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waWxhdGlvbkVmZm9ydCBl
ZmZvcnQpCiAgICAgaWYgKG1fcmFuZG9tR2VuZXJhdG9yLmdldFVpbnQzMigpICYgMSkKICAgICAg
ICAgbm9wKCk7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHNwaWxsQXJndW1lbnRSZWdpc3Rl
cnNUb0ZyYW1lQmVmb3JlUHJvbG9ndWUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCkpKTsKLSAgICBpbmNyZW1lbnRDb3VudGVyKHRoaXMsIFZNOjpSZWdB
cmdzTm9Bcml0eSk7Ci0jaWYgRU5BQkxFKFZNX0NPVU5URVJTKQotICAgIEp1bXAgY29udGludWVT
dGFja0VudHJ5ID0ganVtcCgpOwotI2VuZGlmCi0jZW5kaWYKLSAgICBtX3N0YWNrQXJnc0FyaXR5
T0tFbnRyeSA9IGxhYmVsKCk7Ci0gICAgaW5jcmVtZW50Q291bnRlcih0aGlzLCBWTTo6U3RhY2tB
cmdzTm9Bcml0eSk7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KSAmJiBFTkFCTEUoVk1fQ09VTlRFUlMp
Ci0gICAgY29udGludWVTdGFja0VudHJ5LmxpbmsodGhpcyk7Ci0jZW5kaWYKLQogICAgIGVtaXRG
dW5jdGlvblByb2xvZ3VlKCk7CiAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJs
b2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwogCkBAIC02NDEsMjEgKzYzNSw3IEBAIHZv
aWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0
KQogICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVy
YXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwgbV9jb2RlQmxvY2spOwogCiAgICAgaWYgKG1f
Y29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgewotICAgICAgICBtX3JlZ2lz
dGVyQXJnc1dpdGhBcml0eUNoZWNrID0gbGFiZWwoKTsKLQotICAgICAgICBpbmNyZW1lbnRDb3Vu
dGVyKHRoaXMsIFZNOjpSZWdBcmdzQXJpdHkpOwotCi0gICAgICAgIHNwaWxsQXJndW1lbnRSZWdp
c3RlcnNUb0ZyYW1lQmVmb3JlUHJvbG9ndWUoKTsKLQotI2lmIEVOQUJMRShWTV9DT1VOVEVSUykK
LSAgICAgICAgSnVtcCBjb250aW51ZVN0YWNrQXJpdHlFbnRyeSA9IGp1bXAoKTsKLSNlbmRpZgot
Ci0gICAgICAgIG1fc3RhY2tBcmdzV2l0aEFyaXR5Q2hlY2sgPSBsYWJlbCgpOwotICAgICAgICBp
bmNyZW1lbnRDb3VudGVyKHRoaXMsIFZNOjpTdGFja0FyZ3NBcml0eSk7Ci0jaWYgRU5BQkxFKFZN
X0NPVU5URVJTKQotICAgICAgICBjb250aW51ZVN0YWNrQXJpdHlFbnRyeS5saW5rKHRoaXMpOwot
I2VuZGlmCisgICAgICAgIG1fYXJpdHlDaGVjayA9IGxhYmVsKCk7CiAgICAgICAgIHN0b3JlOChU
cnVzdGVkSW1tMzIoMCksICZtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQpOwog
ICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogICAgICAgICBlbWl0UHV0VG9DYWxsRnJh
bWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CkBAIC02NjMs
OCArNjQzLDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waWxhdGlv
bkVmZm9ydCBlZmZvcnQpCiAgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpLCByZWdUMSk7CiAgICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cmVnVDEsIFRydXN0ZWRJbW0zMihtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSkubGlua1Rv
KGJlZ2luTGFiZWwsIHRoaXMpOwogCi0gICAgICAgIGluY3JlbWVudENvdW50ZXIodGhpcywgVk06
OkFyaXR5Rml4dXBSZXF1aXJlZCk7Ci0KICAgICAgICAgbV9ieXRlY29kZU9mZnNldCA9IDA7CiAK
ICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQpAQCAtODAwLDE0ICs3
NzgsOSBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgIH0KICAgICBtX2NvZGVC
bG9jay0+c2V0SklUQ29kZU1hcChqaXRDb2RlTWFwRW5jb2Rlci5maW5pc2goKSk7CiAKLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgc3RhY2tFbnRyeUFyaXR5T0tQdHIgPSBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mKG1fc3RhY2tBcmdzQXJpdHlPS0VudHJ5KTsKLSAgICAKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgcmVnaXN0ZXJFbnRyeVdpdGhBcml0eUNoZWNrUHRyOwotICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBzdGFja0VudHJ5V2l0aEFyaXR5Q2hlY2tQdHI7Ci0gICAgaWYgKG1fY29k
ZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgewotICAgICAgICByZWdpc3RlckVu
dHJ5V2l0aEFyaXR5Q2hlY2tQdHIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fcmVnaXN0ZXJB
cmdzV2l0aEFyaXR5Q2hlY2spOwotICAgICAgICBzdGFja0VudHJ5V2l0aEFyaXR5Q2hlY2tQdHIg
PSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fc3RhY2tBcmdzV2l0aEFyaXR5Q2hlY2spOwotICAg
IH0KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hlY2s7CisgICAgaWYgKG1f
Y29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKKyAgICAgICAgd2l0aEFyaXR5
Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fYXJpdHlDaGVjayk7CiAKICAgICBpZiAo
T3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpIHsKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPmR1
bXAocGF0Y2hCdWZmZXIpOwpAQCAtODMxLDIwICs4MDQsOCBAQCBDb21waWxhdGlvblJlc3VsdCBK
SVQ6OmxpbmsoKQogICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1faW5zdHJ1Y3Rpb25zLnNp
emUoKSkpOwogCiAgICAgbV9jb2RlQmxvY2stPnNocmlua1RvRml0KENvZGVCbG9jazo6TGF0ZVNo
cmluayk7Ci0gICAgSklURW50cnlQb2ludHMgZW50cnlwb2ludHMocmVzdWx0LmNvZGUoKSwgcmVn
aXN0ZXJFbnRyeVdpdGhBcml0eUNoZWNrUHRyLCByZWdpc3RlckVudHJ5V2l0aEFyaXR5Q2hlY2tQ
dHIsIHN0YWNrRW50cnlBcml0eU9LUHRyLCBzdGFja0VudHJ5V2l0aEFyaXR5Q2hlY2tQdHIpOwot
Ci0gICAgdW5zaWduZWQgbnVtUGFyYW1ldGVycyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2Nv
ZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGFyZ0NvdW50ID0g
MTsgYXJnQ291bnQgPD0gTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUzsg
YXJnQ291bnQrKykgewotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZW50cnk7Ci0gICAg
ICAgIGlmIChhcmdDb3VudCA9PSBudW1QYXJhbWV0ZXJzKQotICAgICAgICAgICAgZW50cnkgPSBy
ZXN1bHQuY29kZSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlbnRyeSA9IHJlZ2lzdGVy
RW50cnlXaXRoQXJpdHlDaGVja1B0cjsKLSAgICAgICAgZW50cnlwb2ludHMuc2V0RW50cnlGb3Io
SklURW50cnlQb2ludHM6OnJlZ2lzdGVyRW50cnlUeXBlRm9yQXJndW1lbnRDb3VudChhcmdDb3Vu
dCksIGVudHJ5KTsKLSAgICB9Ci0KICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAg
ICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoSklURW50cnlQb2ludHNXaXRoUmVmKHJlc3Vs
dCwgZW50cnlwb2ludHMpLCBKSVRDb2RlOjpCYXNlbGluZUpJVCkpKTsKKyAgICAgICAgYWRvcHRS
ZWYobmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUQ29kZTo6QmFz
ZWxpbmVKSVQpKSk7CiAKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0UpCiAgICAgZGF0YUxvZ0YoIkpJ
VCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywgcmVz
dWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnko
KS0+ZW5kKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggYzM4MTAyNjFkODZjMDdlMTZh
ZTczMzAxZTNjMmIwYzgzMWMxOTYzMS4uZTZhYTAyMzNlODdmYjIxMmMxYjFiODYxZmUyMjk2NGEw
OGM4NDc1YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC00Myw3ICs0Myw2IEBACiAjaW5j
bHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRNYXRoSUMuaCIK
ICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgotI2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0
ZXIuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlVudXNlZFBv
aW50ZXIuaCIKIApAQCAtMjQ3LDE1ICsyNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIGppdC5wcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShieVZhbEluZm8sIHJldHVy
bkFkZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgSklURW50
cnlQb2ludHNXaXRoUmVmIGNvbXBpbGVOYXRpdmVDYWxsRW50cnlQb2ludHMoVk0qIHZtLCBOYXRp
dmVGdW5jdGlvbiBmdW5jKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIXZtLT5jYW5Vc2VK
SVQoKSkgewotICAgICAgICAgICAgICAgIENvZGVSZWYgbmF0aXZlQ2FsbFJlZiA9IENvZGVSZWY6
OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gSklURW50cnlQb2ludHNXaXRoUmVmKG5hdGl2ZUNhbGxSZWYsIG5h
dGl2ZUNhbGxSZWYuY29kZSgpLCBuYXRpdmVDYWxsUmVmLmNvZGUoKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBqaXQucHJp
dmF0ZUNvbXBpbGVKSVRFbnRyeU5hdGl2ZUNhbGwodm0sIGZ1bmMpOwotICAgICAgICB9CisgICAg
ICAgIHN0YXRpYyBDb2RlUmVmIGNvbXBpbGVDVElOYXRpdmVDYWxsKFZNKiwgTmF0aXZlRnVuY3Rp
b24pOwogCiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29k
ZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVC
bG9jayopOwpAQCAtMjc1LDcgKzI2Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZv
aWQgcHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiwgUmV0dXJuQWRk
cmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKIAotICAgICAgICBKSVRFbnRyeVBvaW50c1dpdGhSZWYg
cHJpdmF0ZUNvbXBpbGVKSVRFbnRyeU5hdGl2ZUNhbGwoVk0qLCBOYXRpdmVGdW5jdGlvbik7Cisg
ICAgICAgIExhYmVsIHByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChWTSosIGJvb2wgaXNDb25z
dHJ1Y3QgPSBmYWxzZSk7CisgICAgICAgIENvZGVSZWYgcHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVD
YWxsKFZNKiwgTmF0aXZlRnVuY3Rpb24pOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0
Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogCiAgICAg
ICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9u
IGNoZWNrLgpAQCAtOTU3LDEwICs5NDksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5z
aWduZWQgbV9wdXRCeUlkSW5kZXg7CiAgICAgICAgIHVuc2lnbmVkIG1fYnlWYWxJbnN0cnVjdGlv
bkluZGV4OwogICAgICAgICB1bnNpZ25lZCBtX2NhbGxMaW5rSW5mb0luZGV4OwotCi0gICAgICAg
IExhYmVsIG1fc3RhY2tBcmdzQXJpdHlPS0VudHJ5OwotICAgICAgICBMYWJlbCBtX3N0YWNrQXJn
c1dpdGhBcml0eUNoZWNrOwotICAgICAgICBMYWJlbCBtX3JlZ2lzdGVyQXJnc1dpdGhBcml0eUNo
ZWNrOworICAgICAgICAKKyAgICAgICAgTGFiZWwgbV9hcml0eUNoZWNrOwogICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4gbV9saW5rQnVmZmVyOwogCiAgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxKSVREaXNhc3NlbWJsZXI+IG1fZGlzYXNzZW1ibGVyOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAKaW5kZXggN2E2MmQ4MGFkNjRjNTZjZGNiZWI1ZDRjZjQ0YjdkZmU3
MWYxNjllNC4uNjRlZDA4NzY5Njg3MjcxN2EwMzkwYWY1ZTNjYjExZTAyYTY3MmZjMCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCkBAIC05MSw4ICs5MSw2IEBAIHZvaWQgSklU
Ojpjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoT3Bjb2RlSUQgb3Bjb2RlLCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIENhCiAgICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZy
YW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSkpKTsKIAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpKSwgcmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBpbmNyZW1lbnRDb3VudGVy
KHRoaXMsIFZNOjpCYXNlbGluZUNhbGxlcik7Ci0gICAgaW5jcmVtZW50Q291bnRlcih0aGlzLCBW
TTo6Q2FsbFZhcmFyZ3MpOwogfQogCiB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsKEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbikKQEAgLTEwMCw5ICs5OCw2IEBAIHZvaWQgSklUOjpjb21waWxlQ2Fs
bEV2YWwoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
LXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNr
UG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7CiAgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIs
IEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAg
aW5jcmVtZW50Q291bnRlcih0aGlzLCBWTTo6QmFzZWxpbmVDYWxsZXIpOwotICAgIGluY3JlbWVu
dENvdW50ZXIodGhpcywgVk06OkNhbGxFdmFsKTsKLQogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KCk7CiAKQEAgLTExOCw3ICsxMTMsNyBAQCB2b2lkIEpJVDo6Y29tcGls
ZUNhbGxFdmFsKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHZvaWQgSklUOjpjb21waWxlQ2Fs
bEV2YWxTbG93Q2FzZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2Rl
QmxvY2stPmFkZENhbGxMaW5rSW5mbygpOwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0lu
Zm86OkNhbGwsIFN0YWNrQXJncywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgcmVnVDAp
OworICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIENvZGVPcmlnaW4obV9i
eXRlY29kZU9mZnNldCksIHJlZ1QwKTsKIAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICBp
bnQgcmVnaXN0ZXJPZmZzZXQgPSAtaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwpAQCAtMTU5LDE0
ICsxNTQsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSUQsIElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2EKICAgICBDT01QSUxFX0FTU0VSVChP
UENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfdGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzKSwgY2FsbF9hbmRfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzX29wY29k
ZXNfbXVzdF9iZV9zYW1lX2xlbmd0aCk7CiAKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxs
cHRyOwotICAgIEFyZ3VtZW50c0xvY2F0aW9uIGFyZ3VtZW50c0xvY2F0aW9uID0gU3RhY2tBcmdz
OwotCiAgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKICAgICAgICAgaW5mbyA9IG1f
Y29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2Fs
bF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzIHx8IG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cykKICAgICAgICAgY29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKG9wY29kZUlE
LCBpbnN0cnVjdGlvbiwgaW5mbyk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHVuc2lnbmVkIGFyZ0Nv
dW50ID0gaW5zdHJ1Y3Rpb25bM10udS51bnNpZ25lZFZhbHVlOworICAgICAgICBpbnQgYXJnQ291
bnQgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCByZWdpc3Rlck9mZnNl
dCA9IC1pbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CiAKICAgICAgICAgaWYgKG9wY29kZUlEID09
IG9wX2NhbGwgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CkBAIC0xNzgsMjUgKzE3MSwxNSBA
QCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYQogICAgICAgICB9CiAgICAgCiAgICAgICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9m
KENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKLSAgICAgICAgaWYgKGFyZ3VtZW50c0xvY2F0aW9uICE9IFN0YWNrQXJncykgewotICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYXJnQ291bnQpLCBhcmd1bWVudFJlZ2lzdGVyRm9y
QXJndW1lbnRDb3VudCgpKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVyQXJncyA9IHN0
ZDo6bWluKGFyZ0NvdW50LCBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJT
KTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJnID0gMDsgYXJnIDwgcmVnaXN0ZXJBcmdz
OyBhcmcrKykKLSAgICAgICAgICAgICAgICBsb2FkNjQoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdp
c3RlciwgKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGFyZykgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgYXJndW1l
bnRSZWdpc3RlckZvckZ1bmN0aW9uQXJndW1lbnQoYXJnKSk7Ci0gICAgICAgIH0KICAgICAgICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIoYXJnQ291bnQpLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lz
dGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykp
KTsKICAgICB9IC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgotCi0gICAgaW5jcmVtZW50Q291
bnRlcih0aGlzLCBWTTo6QmFzZWxpbmVDYWxsZXIpOwogICAgIAogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gaW5zdHJ1Y3Rpb24gLSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVn
aW4oKTsKICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2Rl
T2Zmc2V0KS5iaXRzKCk7CiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwg
QWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZzZXQpKTsKIAotICAg
IEdQUlJlZyBjYWxsZWVSZWdpc3RlciA9IGFyZ3VtZW50UmVnaXN0ZXJGb3JDYWxsZWUoKTsKLQot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWdpc3Rlcik7Ci0gICAg
c3RvcmU2NChjYWxsZWVSZWdpc3RlciwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSAt
IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Y2FsbGVlLCByZWdUMCk7IC8vIHJlZ1QwIGhvbGRzIGNhbGxlZS4KKyAgICBzdG9yZTY0KHJlZ1Qw
LCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpKSk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKSB7CiAgICAgICAgIGNv
bXBpbGVDYWxsRXZhbChpbnN0cnVjdGlvbik7CkBAIC0yMDQsMTggKzE4NywxNiBAQCB2b2lkIEpJ
VDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCB1bnNpZ25lZCBjYQogICAgIH0KIAogICAgIERhdGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5r
ZWRGdW5jdGlvbkNoZWNrOwotICAgIEp1bXAgc2xvd0Nhc2UgPSBicmFuY2hQdHJXaXRoUGF0Y2go
Tm90RXF1YWwsIGNhbGxlZVJlZ2lzdGVyLCBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrLCBU
cnVzdGVkSW1tUHRyKDApKTsKKyAgICBKdW1wIHNsb3dDYXNlID0gYnJhbmNoUHRyV2l0aFBhdGNo
KE5vdEVxdWFsLCByZWdUMCwgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjaywgVHJ1c3RlZElt
bVB0cigwKSk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2UpOwogCiAgICAgQVNTRVJUKG1fY2Fs
bENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOwotICAgIGluZm8t
PnNldFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgYXJndW1lbnRz
TG9jYXRpb24sIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIGNhbGxlZVJlZ2lzdGVyKTsK
KyAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCks
IENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIHJlZ1QwKTsKICAgICBtX2NhbGxDb21waWxh
dGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7CiAgICAgbV9jYWxsQ29tcGls
YXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5r
ZWRGdW5jdGlvbkNoZWNrOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGwpIHsKLSAgICAgICAgaW5jcmVtZW50Q291bnRlcih0aGlzLCBWTTo6VGFpbENhbGwpOwot
CiAgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwogICAgICAgICBzaHVm
ZmxlRGF0YS50YWdUeXBlTnVtYmVyID0gR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyOwog
ICAgICAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPQpAQCAtMjI4LDcgKzIwOSw3IEBAIHZvaWQg
SklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIHVuc2lnbmVkIGNhCiAgICAgICAgICAgICAgICAgICAgIERhdGFGb3JtYXRKUyk7CiAg
ICAgICAgIH0KICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0KLSAgICAgICAgICAgIFZhbHVl
UmVjb3Zlcnk6OmluR1BSKGNhbGxlZVJlZ2lzdGVyLCBEYXRhRm9ybWF0SlMpOworICAgICAgICAg
ICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgIHNo
dWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7CiAgICAgICAg
IGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICBDYWxsRnJh
bWVTaHVmZmxlcigqdGhpcywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpAQCAt
MjY1LDEwICsyNDYsOSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlE
IG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlYwogICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKLSAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9
IG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBub25BcmdHUFIwKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS5jYWxsTGlua0luZm8pLCByZWdUMik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwobV92bS0+
Z2V0SklUQ2FsbFRodW5rRW50cnlTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmVudHJ5Rm9y
KGNhbGxMaW5rSW5mby0+YXJndW1lbnRzTG9jYXRpb24oKSkpOworICAgIG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2Vk
Q2FsbChtX3ZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CiAK
ICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF92YXJhcmdzKSB7CiAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9t
VGFpbENhbGwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
MzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCmlu
ZGV4IGU2MWJjZDI0Mzg1YjkyYjUzZmY0YjkzYzkxOWUyYmJmMjc1YzJjZGUuLjU3M2IwNjIzYjQ2
YTk5ZTJkYjFlYjAyOTc2ZGJkNzQxZmU4MzViYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENhbGwzMl82NC5jcHAKQEAgLTIwMyw3ICsyMDMsNyBAQCB2b2lkIEpJVDo6Y29tcGls
ZUNhbGxFdmFsKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHZvaWQgSklUOjpjb21waWxlQ2Fs
bEV2YWxTbG93Q2FzZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2Rl
QmxvY2stPmFkZENhbGxMaW5rSW5mbygpOwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0lu
Zm86OkNhbGwsIFN0YWNrQXJncywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgcmVnVDAp
OworICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIENvZGVPcmlnaW4obV9i
eXRlY29kZU9mZnNldCksIHJlZ1QwKTsKIAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIApAQCAt
MjExLDEyICsyMTEsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnkKIAogICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgbm9uQXJnR1BSMCk7CisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGluZm8pLCByZWdUMik7CiAKICAgICBlbWl0TG9hZChDYWxsRnJhbWVT
bG90OjpjYWxsZWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgSklUSlNDYWxsVGh1bmtFbnRyeVBvaW50
c1dpdGhSZWYgdmlydHVhbFRodW5rID0gdmlydHVhbFRodW5rRm9yKG1fdm0sICppbmZvKTsKLSAg
ICBpbmZvLT5zZXRTbG93U3R1YihjcmVhdGVKSVRTdHViUm91dGluZSh2aXJ0dWFsVGh1bmsuY29k
ZVJlZigpLCAqbV92bSwgbnVsbHB0ciwgdHJ1ZSkpOwotICAgIGVtaXROYWtlZENhbGwodmlydHVh
bFRodW5rLmVudHJ5Rm9yKFN0YWNrQXJncykpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2
aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3IobV92bSwgKmluZm8pOworICAgIGluZm8tPnNl
dFNsb3dTdHViKGNyZWF0ZUpJVFN0dWJSb3V0aW5lKHZpcnR1YWxUaHVuaywgKm1fdm0sIG51bGxw
dHIsIHRydWUpKTsKKyAgICBlbWl0TmFrZWRDYWxsKHZpcnR1YWxUaHVuay5jb2RlKCkpOwogICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKQEAgLTI4Niw3ICsyODYs
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYQogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlKTsK
IAogICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5m
b0luZGV4KTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihv
cGNvZGVJRCksIFN0YWNrQXJncywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgcmVnVDAp
OworICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlE
KSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgcmVnVDApOwogICAgIG1fY2FsbENvbXBp
bGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKICAgICBtX2NhbGxDb21w
aWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhCZWdpbiA9IGFkZHJlc3NPZkxp
bmtlZEZ1bmN0aW9uQ2hlY2s7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5m
b0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwpAQCAtMzE3LDEzICszMTcsMTIgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBWZWMKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOwogCi0gICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBtX2NhbGxDb21w
aWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbzsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgbm9uQXJnR1BSMCk7CisgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJ
bmZvKSwgcmVnVDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOwogCi0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5j
YWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldEpJVENhbGxUaHVua0Vu
dHJ5U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5lbnRyeUZvcihjYWxsTGlua0luZm8tPmFy
Z3VtZW50c0xvY2F0aW9uKCkpKTsKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJ
U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgaWYgKG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykgewog
ICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCmluZGV4IDY1MzQ4OWE1ZjM1YzU5ODA1YmVlYjY4
YWE4MjVkYmFkMzdjMTBlNTAuLjljOTI1NTIwOTQ4NzZkZTdhYjk1MDYxNGM3Y2IxYjU3YTFiMzU5
NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcApAQCAtNzUsOSArNzUsOSBA
QCBKU1ZhbHVlIEpJVENvZGU6OmV4ZWN1dGUoVk0qIHZtLCBQcm90b0NhbGxGcmFtZSogcHJvdG9D
YWxsRnJhbWUpCiAKICAgICBpZiAoIWZ1bmN0aW9uIHx8ICFwcm90b0NhbGxGcmFtZS0+bmVlZEFy
aXR5Q2hlY2soKSkgewogICAgICAgICBBU1NFUlQoIXByb3RvQ2FsbEZyYW1lLT5uZWVkQXJpdHlD
aGVjaygpKTsKLSAgICAgICAgZW50cnlBZGRyZXNzID0gYWRkcmVzc0ZvckNhbGwoU3RhY2tBcmdz
QXJpdHlDaGVja05vdFJlcXVpcmVkKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICBlbnRy
eUFkZHJlc3MgPSBleGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0gZWxzZQotICAgICAgICBlbnRy
eUFkZHJlc3MgPSBhZGRyZXNzRm9yQ2FsbChTdGFja0FyZ3NNdXN0Q2hlY2tBcml0eSkuZXhlY3V0
YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgZW50cnlBZGRyZXNzID0gYWRkcmVzc0ZvckNhbGwoTXVz
dENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBK
U1ZhbHVlOjpkZWNvZGUodm1FbnRyeVRvSmF2YVNjcmlwdChlbnRyeUFkZHJlc3MsIHZtLCBwcm90
b0NhbGxGcmFtZSkpOwogICAgIHJldHVybiBzY29wZS5leGNlcHRpb24oKSA/IGpzTnVsbCgpIDog
cmVzdWx0OwogfQpAQCAtMTYyLDkgKzE2Miw5IEBAIERpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENv
ZGUoSklUVHlwZSBqaXRUeXBlKQogewogfQogCi1EaXJlY3RKSVRDb2RlOjpEaXJlY3RKSVRDb2Rl
KEpJVEVudHJ5UG9pbnRzV2l0aFJlZiBlbnRyaWVzLCBKSVRUeXBlIGppdFR5cGUpCi0gICAgOiBK
SVRDb2RlV2l0aENvZGVSZWYoZW50cmllcy5jb2RlUmVmKCksIGppdFR5cGUpCi0gICAgLCBtX2Vu
dHJ5UG9pbnRzKGVudHJpZXMpCitEaXJlY3RKSVRDb2RlOjpEaXJlY3RKSVRDb2RlKEpJVENvZGU6
OkNvZGVSZWYgcmVmLCBKSVRDb2RlOjpDb2RlUHRyIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlIGpp
dFR5cGUpCisgICAgOiBKSVRDb2RlV2l0aENvZGVSZWYocmVmLCBqaXRUeXBlKQorICAgICwgbV93
aXRoQXJpdHlDaGVjayh3aXRoQXJpdHlDaGVjaykKIHsKIH0KIApAQCAtMTcyLDE2ICsxNzIsMjUg
QEAgRGlyZWN0SklUQ29kZTo6fkRpcmVjdEpJVENvZGUoKQogewogfQogCi12b2lkIERpcmVjdEpJ
VENvZGU6OmluaXRpYWxpemVFbnRyeVBvaW50cyhKSVRFbnRyeVBvaW50c1dpdGhSZWYgZW50cmll
cykKK3ZvaWQgRGlyZWN0SklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVSZWYoSklUQ29kZTo6Q29kZVJl
ZiByZWYsIEpJVENvZGU6OkNvZGVQdHIgd2l0aEFyaXR5Q2hlY2spCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQoIW1fcmVmKTsKLSAgICBtX3JlZiA9IGVudHJpZXMuY29kZVJlZigpOwotICAgIG1fZW50
cnlQb2ludHMgPSBlbnRyaWVzOworICAgIG1fcmVmID0gcmVmOworICAgIG1fd2l0aEFyaXR5Q2hl
Y2sgPSB3aXRoQXJpdHlDaGVjazsKIH0KIAotSklUQ29kZTo6Q29kZVB0ciBEaXJlY3RKSVRDb2Rl
OjphZGRyZXNzRm9yQ2FsbChFbnRyeVBvaW50VHlwZSB0eXBlKQorSklUQ29kZTo6Q29kZVB0ciBE
aXJlY3RKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9kZSBhcml0eSkKIHsKLSAg
ICByZXR1cm4gbV9lbnRyeVBvaW50cy5lbnRyeUZvcih0eXBlKTsKKyAgICBzd2l0Y2ggKGFyaXR5
KSB7CisgICAgY2FzZSBBcml0eUNoZWNrTm90UmVxdWlyZWQ6CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG1fcmVmKTsKKyAgICAgICAgcmV0dXJuIG1fcmVmLmNvZGUoKTsKKyAgICBjYXNlIE11c3RD
aGVja0FyaXR5OgorICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3dpdGhBcml0eUNoZWNrKTsKKyAg
ICAgICAgcmV0dXJuIG1fd2l0aEFyaXR5Q2hlY2s7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIENvZGVQdHIoKTsKIH0KIAogTmF0aXZlSklUQ29k
ZTo6TmF0aXZlSklUQ29kZShKSVRUeXBlIGppdFR5cGUpCkBAIC0yMDQsNyArMjEzLDcgQEAgdm9p
ZCBOYXRpdmVKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZihDb2RlUmVmIHJlZikKICAgICBtX3Jl
ZiA9IHJlZjsKIH0KIAotSklUQ29kZTo6Q29kZVB0ciBOYXRpdmVKSVRDb2RlOjphZGRyZXNzRm9y
Q2FsbChFbnRyeVBvaW50VHlwZSkKK0pJVENvZGU6OkNvZGVQdHIgTmF0aXZlSklUQ29kZTo6YWRk
cmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoISFtX3Jl
Zik7CiAgICAgcmV0dXJuIG1fcmVmLmNvZGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmgKaW5kZXggOWNkNWNmZTIzYWYxMzFlODY1ODNjMDI1M2Q2NGNiYmE4Nzc1YWRkZi4uNzVjNzBj
N2Y3YzgyYTQ4OTRlOTAxNTlhYmE5YmNmMDBhNzRhMjQwYiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb2RlLmgKQEAgLTI1LDEwICsyNSwxMCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1
ZGUgIkFyaXR5Q2hlY2tNb2RlLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAi
Q29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgotI2luY2x1ZGUgIkpJVEVu
dHJ5UG9pbnRzLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNz
ZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCkBAIC0xNzMsOCArMTcz
LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaml0Q29kZS0+aml0VHlwZSgpOwogICAgIH0K
ICAgICAKLSAgICB2aXJ0dWFsIENvZGVQdHIgYWRkcmVzc0ZvckNhbGwoRW50cnlQb2ludFR5cGUp
ID0gMDsKKyAgICB2aXJ0dWFsIENvZGVQdHIgYWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90
IG9mZnNldCkgPSAwOworICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzKCkgeyByZXR1cm4gZXhl
Y3V0YWJsZUFkZHJlc3NBdE9mZnNldCgwKTsgfQogICAgIHZpcnR1YWwgdm9pZCogZGF0YUFkZHJl
c3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KSA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBvZmZz
ZXRPZih2b2lkKiBwb2ludGVySW50b0NvZGUpID0gMDsKICAgICAKQEAgLTIyMywxNSArMjI0LDE1
IEBAIHByb3RlY3RlZDoKIGNsYXNzIERpcmVjdEpJVENvZGUgOiBwdWJsaWMgSklUQ29kZVdpdGhD
b2RlUmVmIHsKIHB1YmxpYzoKICAgICBEaXJlY3RKSVRDb2RlKEpJVFR5cGUpOwotICAgIERpcmVj
dEpJVENvZGUoSklURW50cnlQb2ludHNXaXRoUmVmLCBKSVRUeXBlKTsKKyAgICBEaXJlY3RKSVRD
b2RlKENvZGVSZWYsIENvZGVQdHIgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGUpOwogICAgIHZpcnR1
YWwgfkRpcmVjdEpJVENvZGUoKTsKICAgICAKLSAgICB2b2lkIGluaXRpYWxpemVFbnRyeVBvaW50
cyhKSVRFbnRyeVBvaW50c1dpdGhSZWYpOworICAgIHZvaWQgaW5pdGlhbGl6ZUNvZGVSZWYoQ29k
ZVJlZiwgQ29kZVB0ciB3aXRoQXJpdHlDaGVjayk7CiAKLSAgICBDb2RlUHRyIGFkZHJlc3NGb3JD
YWxsKEVudHJ5UG9pbnRUeXBlKSBvdmVycmlkZTsKKyAgICBDb2RlUHRyIGFkZHJlc3NGb3JDYWxs
KEFyaXR5Q2hlY2tNb2RlKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBKSVRFbnRyeVBvaW50
cyBtX2VudHJ5UG9pbnRzOworICAgIENvZGVQdHIgbV93aXRoQXJpdHlDaGVjazsKIH07CiAKIGNs
YXNzIE5hdGl2ZUpJVENvZGUgOiBwdWJsaWMgSklUQ29kZVdpdGhDb2RlUmVmIHsKQEAgLTI0Miw3
ICsyNDMsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBpbml0aWFsaXplQ29kZVJlZihDb2Rl
UmVmKTsKIAotICAgIENvZGVQdHIgYWRkcmVzc0ZvckNhbGwoRW50cnlQb2ludFR5cGUpIG92ZXJy
aWRlOworICAgIENvZGVQdHIgYWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUpIG92ZXJyaWRl
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEVudHJ5UG9pbnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEVudHJ5UG9pbnRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlMzM0NGZhZjli
ODExYzkwZWU0YzYzN2Y1ZTVkOTllZTg3Zjg3MjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFbnRyeVBv
aW50cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJH
UFJJbmZvLmgiCi0jaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCi0KLW5hbWVzcGFj
ZSBKU0MgewotY2xhc3MgVk07Ci1jbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY7Ci0KLWVudW0g
QXJndW1lbnRzTG9jYXRpb24gOiB1bnNpZ25lZCB7Ci0gICAgU3RhY2tBcmdzID0gMCwKLSNpZiBO
VU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTID49IDQKLSAgICBSZWdpc3Rl
ckFyZ3MxSW5SZWdpc3RlcnMsCi0gICAgUmVnaXN0ZXJBcmdzMkluUmVnaXN0ZXJzLAotICAgIFJl
Z2lzdGVyQXJnczNJblJlZ2lzdGVycywKLSAgICBSZWdpc3RlckFyZ3M0SW5SZWdpc3RlcnMsCi0j
aWYgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUyA9PSA2Ci0gICAgUmVn
aXN0ZXJBcmdzNUluUmVnaXN0ZXJzLAotICAgIFJlZ2lzdGVyQXJnczZJblJlZ2lzdGVycywKLSNl
bmRpZgotICAgIFJlZ2lzdGVyQXJnc1dpdGhFeHRyYU9uU3RhY2sKLSNlbmRpZgotfTsKLQotLy8g
VGhpcyBlbnVtIG5lZWRzIHRvIGhhdmUgdGhlIHNhbWUgZW51bWVyYXRvciBvcmRlcmluZyBhcyBB
cmd1bWVudHNMb2NhdGlvbi4KLWVudW0gVGh1bmtFbnRyeVBvaW50VHlwZSA6IHVuc2lnbmVkIHsK
LSAgICBTdGFja0FyZ3NFbnRyeSA9IDAsCi0jaWYgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VN
RU5UX1JFR0lTVEVSUyA+PSA0Ci0gICAgUmVnaXN0ZXIxQXJnRW50cnksCi0gICAgUmVnaXN0ZXIy
QXJnc0VudHJ5LAotICAgIFJlZ2lzdGVyM0FyZ3NFbnRyeSwKLSAgICBSZWdpc3RlcjRBcmdzRW50
cnksCi0jaWYgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUyA9PSA2Ci0g
ICAgUmVnaXN0ZXI1QXJnc0VudHJ5LAotICAgIFJlZ2lzdGVyNkFyZ3NFbnRyeSwKLSNlbmRpZgot
I2VuZGlmCi0gICAgVGh1bmtFbnRyeVBvaW50VHlwZUNvdW50Ci19OwotCi1lbnVtIEVudHJ5UG9p
bnRUeXBlIHsKLSAgICBTdGFja0FyZ3NBcml0eUNoZWNrTm90UmVxdWlyZWQsCi0gICAgU3RhY2tB
cmdzTXVzdENoZWNrQXJpdHksCi0jaWYgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JF
R0lTVEVSUwotICAgIFJlZ2lzdGVyQXJnc0FyaXR5Q2hlY2tOb3RSZXF1aXJlZCwKLSAgICBSZWdp
c3RlckFyZ3NQb3NzaWJsZUV4dHJhQXJncywKLSAgICBSZWdpc3RlckFyZ3NNdXN0Q2hlY2tBcml0
eSwKLSNpZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTID49IDQKLSAg
ICBSZWdpc3RlckFyZ3MxLAotICAgIFJlZ2lzdGVyQXJnczIsCi0gICAgUmVnaXN0ZXJBcmdzMywK
LSAgICBSZWdpc3RlckFyZ3M0LAotI2lmIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9S
RUdJU1RFUlMgPT0gNgotICAgIFJlZ2lzdGVyQXJnczUsCi0gICAgUmVnaXN0ZXJBcmdzNiwKLSNl
bmRpZgotI2VuZGlmCi0jZW5kaWYKLSAgICBOdW1iZXJPZkVudHJ5UG9pbnRUeXBlcwotfTsKLQot
Y2xhc3MgSklURW50cnlQb2ludHMgewotcHVibGljOgotICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIENvZGVQdHI7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mRW50
cnlUeXBlcyA9IEVudHJ5UG9pbnRUeXBlOjpOdW1iZXJPZkVudHJ5UG9pbnRUeXBlczsKLQotICAg
IEpJVEVudHJ5UG9pbnRzKCkKLSAgICB7Ci0gICAgICAgIGNsZWFyRW50cmllcygpOwotICAgIH0K
LQotICAgIEpJVEVudHJ5UG9pbnRzKENvZGVQdHIgcmVnaXN0ZXJBcmdzTm9DaGVja1JlcXVpcmVk
RW50cnksIENvZGVQdHIgcmVnaXN0ZXJBcmdzUG9zc2libGVFeHRyYUFyZ3NFbnRyeSwKLSAgICAg
ICAgQ29kZVB0ciByZWdpc3RlckFyZ3NDaGVja0FyaXR5RW50cnksIENvZGVQdHIgc3RhY2tBcmdz
QXJpdHlDaGVja05vdFJlcXVpcmVkRW50cnksCi0gICAgICAgIENvZGVQdHIgc3RhY2tBcmdzQ2hl
Y2tBcml0eUVudHJ5KQotICAgIHsKLSAgICAgICAgbV9lbnRyeVBvaW50c1tTdGFja0FyZ3NBcml0
eUNoZWNrTm90UmVxdWlyZWRdID0gc3RhY2tBcmdzQXJpdHlDaGVja05vdFJlcXVpcmVkRW50cnk7
Ci0gICAgICAgIG1fZW50cnlQb2ludHNbU3RhY2tBcmdzTXVzdENoZWNrQXJpdHldID0gc3RhY2tB
cmdzQ2hlY2tBcml0eUVudHJ5OwotI2lmIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9S
RUdJU1RFUlMKLSAgICAgICAgbV9lbnRyeVBvaW50c1tSZWdpc3RlckFyZ3NBcml0eUNoZWNrTm90
UmVxdWlyZWRdID0gcmVnaXN0ZXJBcmdzTm9DaGVja1JlcXVpcmVkRW50cnk7Ci0gICAgICAgIG1f
ZW50cnlQb2ludHNbUmVnaXN0ZXJBcmdzUG9zc2libGVFeHRyYUFyZ3NdID0gcmVnaXN0ZXJBcmdz
UG9zc2libGVFeHRyYUFyZ3NFbnRyeTsKLSAgICAgICAgbV9lbnRyeVBvaW50c1tSZWdpc3RlckFy
Z3NNdXN0Q2hlY2tBcml0eV0gPSByZWdpc3RlckFyZ3NDaGVja0FyaXR5RW50cnk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0gTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5U
X1JFR0lTVEVSUzsgaSArKykKLSAgICAgICAgICAgIG1fZW50cnlQb2ludHNbcmVnaXN0ZXJFbnRy
eVR5cGVGb3JBcmd1bWVudENvdW50KGkpXSA9IHJlZ2lzdGVyQXJnc0NoZWNrQXJpdHlFbnRyeTsK
LSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShyZWdpc3RlckFyZ3NOb0NoZWNrUmVxdWlyZWRF
bnRyeSk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShyZWdpc3RlckFyZ3NQb3NzaWJsZUV4dHJhQXJn
c0VudHJ5KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJlZ2lzdGVyQXJnc0NoZWNrQXJpdHlFbnRy
eSk7Ci0jZW5kaWYKLQotICAgIH0KLQotICAgIENvZGVQdHIgZW50cnlGb3IoRW50cnlQb2ludFR5
cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2VudHJ5UG9pbnRzW3R5cGVdOwotICAg
IH0KLQotICAgIHZvaWQgc2V0RW50cnlGb3IoRW50cnlQb2ludFR5cGUgdHlwZSwgQ29kZVB0ciBl
bnRyeSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh0eXBlIDwgTnVtYmVyT2ZFbnRyeVBvaW50VHlw
ZXMpOwotICAgICAgICBtX2VudHJ5UG9pbnRzW3R5cGVdID0gZW50cnk7Ci0gICAgfQotCi0gICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkVudHJ5Rm9yKEVudHJ5UG9pbnRUeXBlIHR5cGUpCi0g
ICAgewotICAgICAgICByZXR1cm4gb2Zmc2V0b2YoSklURW50cnlQb2ludHMsIG1fZW50cnlQb2lu
dHNbdHlwZV0pOwotICAgIH0KLQotICAgIHN0YXRpYyBFbnRyeVBvaW50VHlwZSByZWdpc3RlckVu
dHJ5VHlwZUZvckFyZ3VtZW50Q291bnQodW5zaWduZWQgYXJnQ291bnQpCi0gICAgewotI2lmIE5V
TUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMKLSAgICAgICAgQVNTRVJUKGFy
Z0NvdW50KTsKLSAgICAgICAgdW5zaWduZWQgcmVnaXN0ZXJBcmdDb3VudCA9IG51bWJlck9mUmVn
aXN0ZXJBcmd1bWVudHNGb3IoYXJnQ291bnQpOwotICAgICAgICBpZiAoIXJlZ2lzdGVyQXJnQ291
bnQgfHwgcmVnaXN0ZXJBcmdDb3VudCAhPSBhcmdDb3VudCkKLSAgICAgICAgICAgIHJldHVybiBS
ZWdpc3RlckFyZ3NNdXN0Q2hlY2tBcml0eTsKLQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
RW50cnlQb2ludFR5cGU+KFJlZ2lzdGVyQXJnczEgKyByZWdpc3RlckFyZ0NvdW50IC0gMSk7Ci0j
ZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oYXJnQ291bnQpOwotICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gU3RhY2tBcmdzTXVzdENoZWNrQXJp
dHk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBzdGF0aWMgRW50cnlQb2ludFR5cGUgcmVnaXN0ZXJF
bnRyeVR5cGVGb3JBcmd1bWVudFR5cGUoQXJndW1lbnRzTG9jYXRpb24gdHlwZSkKLSAgICB7Ci0j
aWYgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUwotICAgICAgICBBU1NF
UlQodHlwZSAhPSBTdGFja0FyZ3MpOwotICAgICAgICBpZiAodHlwZSA9PSBSZWdpc3RlckFyZ3NX
aXRoRXh0cmFPblN0YWNrKQotICAgICAgICAgICAgcmV0dXJuIFJlZ2lzdGVyQXJnc011c3RDaGVj
a0FyaXR5OwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVudHJ5UG9pbnRU
eXBlPihSZWdpc3RlckFyZ3MxICsgdHlwZSAtIFJlZ2lzdGVyQXJnczFJblJlZ2lzdGVycyk7Ci0j
ZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0odHlwZSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBTdGFja0FyZ3NNdXN0Q2hlY2tBcml0eTsK
LSNlbmRpZgotICAgIH0KLQotICAgIHZvaWQgY2xlYXJFbnRyaWVzKCkKLSAgICB7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mRW50cnlUeXBlczsgaS0tOykKLSAgICAgICAgICAg
IG1fZW50cnlQb2ludHNbaV0gPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKLSAgICB9Ci0KLSAg
ICBKSVRFbnRyeVBvaW50cyYgb3BlcmF0b3I9KGNvbnN0IEpJVEVudHJ5UG9pbnRzJiBvdGhlcikK
LSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mRW50cnlUeXBlczsgaS0t
OykKLSAgICAgICAgICAgIG1fZW50cnlQb2ludHNbaV0gPSBvdGhlci5tX2VudHJ5UG9pbnRzW2ld
OwotCi0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLXByaXZhdGU6Ci0KLSAgICBDb2Rl
UHRyIG1fZW50cnlQb2ludHNbbnVtYmVyT2ZFbnRyeVR5cGVzXTsKLX07Ci0KLWNsYXNzIEpJVEVu
dHJ5UG9pbnRzV2l0aFJlZiA6IHB1YmxpYyBKSVRFbnRyeVBvaW50cyB7Ci1wdWJsaWM6Ci0gICAg
dHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgQ29kZVJlZjsKLQotICAgIEpJVEVudHJ5UG9p
bnRzV2l0aFJlZigpCi0gICAgewotICAgIH0KLQotICAgIEpJVEVudHJ5UG9pbnRzV2l0aFJlZihj
b25zdCBKSVRFbnRyeVBvaW50c1dpdGhSZWYmIG90aGVyKQotICAgICAgICA6IEpJVEVudHJ5UG9p
bnRzKG90aGVyKQotICAgICAgICAsIG1fY29kZVJlZihvdGhlci5tX2NvZGVSZWYpCi0gICAgewot
ICAgIH0KLQotICAgIEpJVEVudHJ5UG9pbnRzV2l0aFJlZihDb2RlUmVmIGNvZGVSZWYsIGNvbnN0
IEpJVEVudHJ5UG9pbnRzJiBvdGhlcikKLSAgICAgICAgOiBKSVRFbnRyeVBvaW50cyhvdGhlcikK
LSAgICAgICAgLCBtX2NvZGVSZWYoY29kZVJlZikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIEpJ
VEVudHJ5UG9pbnRzV2l0aFJlZihDb2RlUmVmIGNvZGVSZWYsIENvZGVQdHIgc3RhY2tBcmdzQXJp
dHlDaGVja05vdFJlcXVpcmVkRW50cnksCi0gICAgICAgIENvZGVQdHIgc3RhY2tBcmdzQ2hlY2tB
cml0eUVudHJ5KQotICAgICAgICA6IEpJVEVudHJ5UG9pbnRzKENvZGVQdHIoKSwgQ29kZVB0cigp
LCBDb2RlUHRyKCksIHN0YWNrQXJnc0FyaXR5Q2hlY2tOb3RSZXF1aXJlZEVudHJ5LCBzdGFja0Fy
Z3NDaGVja0FyaXR5RW50cnkpCi0gICAgICAgICwgbV9jb2RlUmVmKGNvZGVSZWYpCi0gICAgewot
ICAgIH0KLQotICAgIEpJVEVudHJ5UG9pbnRzV2l0aFJlZihDb2RlUmVmIGNvZGVSZWYsIENvZGVQ
dHIgcmVnaXN0ZXJBcmdzTm9DaGVja3NSZXF1aXJlZEVudHJ5LAotICAgICAgICBDb2RlUHRyIHJl
Z2lzdGVyQXJnc1Bvc3NpYmxlRXh0cmFBcmdzRW50cnksIENvZGVQdHIgcmVnaXN0ZXJBcmdzQ2hl
Y2tBcml0eUVudHJ5LAotICAgICAgICBDb2RlUHRyIHN0YWNrQXJnc0FyaXR5Q2hlY2tOb3RSZXF1
aXJlZEVudHJ5LCBDb2RlUHRyIHN0YWNrQXJnc0NoZWNrQXJpdHlFbnRyeSkKLSAgICAgICAgOiBK
SVRFbnRyeVBvaW50cyhyZWdpc3RlckFyZ3NOb0NoZWNrc1JlcXVpcmVkRW50cnksIHJlZ2lzdGVy
QXJnc1Bvc3NpYmxlRXh0cmFBcmdzRW50cnksCi0gICAgICAgICAgICByZWdpc3RlckFyZ3NDaGVj
a0FyaXR5RW50cnksIHN0YWNrQXJnc0FyaXR5Q2hlY2tOb3RSZXF1aXJlZEVudHJ5LAotICAgICAg
ICAgICAgc3RhY2tBcmdzQ2hlY2tBcml0eUVudHJ5KQotICAgICAgICAsIG1fY29kZVJlZihjb2Rl
UmVmKQotICAgIHsKLSAgICB9Ci0KLSAgICBDb2RlUmVmIGNvZGVSZWYoKSB7IHJldHVybiBtX2Nv
ZGVSZWY7IH0KLQotcHJpdmF0ZToKLSAgICBDb2RlUmVmIG1fY29kZVJlZjsKLX07Ci0KLWlubGlu
ZSBBcmd1bWVudHNMb2NhdGlvbiBhcmd1bWVudHNMb2NhdGlvbkZvcih1bnNpZ25lZCBhcmd1bWVu
dENvdW50KQotewotI2lmIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMK
LSAgICBpZiAoIWFyZ3VtZW50Q291bnQpCi0gICAgICAgIHJldHVybiBTdGFja0FyZ3M7Ci0gICAg
Ci0gICAgYXJndW1lbnRDb3VudCA9IHN0ZDo6bWluKE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdV
TUVOVF9SRUdJU1RFUlMgKyAxLCBhcmd1bWVudENvdW50KTsKLSAgICAKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8QXJndW1lbnRzTG9jYXRpb24+KEFyZ3VtZW50c0xvY2F0aW9uOjpSZWdpc3RlckFy
Z3MxSW5SZWdpc3RlcnMgKyBhcmd1bWVudENvdW50IC0gMSk7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShhcmd1bWVudENvdW50KTsKLSAgICByZXR1cm4gU3RhY2tBcmdzOwotI2VuZGlmCi19Ci0K
LWlubGluZSBFbnRyeVBvaW50VHlwZSByZWdpc3RlckVudHJ5UG9pbnRUeXBlRm9yKHVuc2lnbmVk
IGFyZ3VtZW50Q291bnQpCi17Ci0jaWYgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JF
R0lTVEVSUwotICAgIGlmICghYXJndW1lbnRDb3VudCB8fCBhcmd1bWVudENvdW50ID4gTlVNQkVS
X09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUykKLSAgICAgICAgcmV0dXJuIFJlZ2lz
dGVyQXJnc011c3RDaGVja0FyaXR5OwotICAgIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbnRy
eVBvaW50VHlwZT4oRW50cnlQb2ludFR5cGU6OlJlZ2lzdGVyQXJnczEgKyBhcmd1bWVudENvdW50
IC0gMSk7Ci0jZWxzZQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgVU5V
U0VEX1BBUkFNKGFyZ3VtZW50Q291bnQpOwotICAgIHJldHVybiBTdGFja0FyZ3NNdXN0Q2hlY2tB
cml0eTsKLSNlbmRpZgotfQotCi1pbmxpbmUgRW50cnlQb2ludFR5cGUgZW50cnlQb2ludFR5cGVG
b3IoQXJndW1lbnRzTG9jYXRpb24gYXJndW1lbnRMb2NhdGlvbikKLXsKLSNpZiBOVU1CRVJfT0Zf
SlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTCi0gICAgaWYgKGFyZ3VtZW50TG9jYXRpb24g
PT0gU3RhY2tBcmdzKQotICAgICAgICByZXR1cm4gU3RhY2tBcmdzTXVzdENoZWNrQXJpdHk7Ci0g
ICAgCi0gICAgaWYgKGFyZ3VtZW50TG9jYXRpb24gPT0gUmVnaXN0ZXJBcmdzV2l0aEV4dHJhT25T
dGFjaykKLSAgICAgICAgcmV0dXJuIFJlZ2lzdGVyQXJnc011c3RDaGVja0FyaXR5OwotICAgIAot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbnRyeVBvaW50VHlwZT4oRW50cnlQb2ludFR5cGU6OlJl
Z2lzdGVyQXJnczEgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYXJndW1lbnRMb2NhdGlvbiAtIFJl
Z2lzdGVyQXJnczFJblJlZ2lzdGVycykpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYXJndW1l
bnRMb2NhdGlvbik7Ci0gICAgcmV0dXJuIFN0YWNrQXJnc011c3RDaGVja0FyaXR5OwotI2VuZGlm
Ci19Ci0KLWlubGluZSBUaHVua0VudHJ5UG9pbnRUeXBlIHRodW5rRW50cnlQb2ludFR5cGVGb3Io
QXJndW1lbnRzTG9jYXRpb24gYXJndW1lbnRMb2NhdGlvbikKLXsKLSNpZiBOVU1CRVJfT0ZfSlNf
RlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTCi0gICAgdW5zaWduZWQgYXJndW1lbnRMb2NhdGlv
bkluZGV4ID0gc3RkOjptaW4oUmVnaXN0ZXJBcmdzV2l0aEV4dHJhT25TdGFjayAtIDEsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihhcmd1bWVudExvY2F0aW9uKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PFRodW5rRW50cnlQb2ludFR5cGU+KGFyZ3VtZW50TG9jYXRpb25JbmRleCk7Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShhcmd1bWVudExvY2F0aW9uKTsKLSAgICByZXR1cm4gU3RhY2tBcmdz
RW50cnk7Ci0jZW5kaWYKLX0KLQotaW5saW5lIFRodW5rRW50cnlQb2ludFR5cGUgdGh1bmtFbnRy
eVBvaW50VHlwZUZvcih1bnNpZ25lZCBhcmd1bWVudENvdW50KQotewotI2lmIE5VTUJFUl9PRl9K
U19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMKLSAgICBhcmd1bWVudENvdW50ID0gbnVtYmVy
T2ZSZWdpc3RlckFyZ3VtZW50c0Zvcihhcmd1bWVudENvdW50KTsKLSAgICAKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VGh1bmtFbnRyeVBvaW50VHlwZT4oVGh1bmtFbnRyeVBvaW50VHlwZTo6UmVn
aXN0ZXIxQXJnRW50cnkgKyBhcmd1bWVudENvdW50IC0gMSk7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShhcmd1bWVudENvdW50KTsKLSAgICByZXR1cm4gU3RhY2tBcmdzRW50cnk7Ci0jZW5kaWYK
LX0KLQotY2xhc3MgSklUSlNDYWxsVGh1bmtFbnRyeVBvaW50c1dpdGhSZWYgewotcHVibGljOgot
ICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIENvZGVQdHI7Ci0gICAgdHlwZWRlZiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgQ29kZVJlZjsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
bnVtYmVyT2ZFbnRyeVR5cGVzID0gVGh1bmtFbnRyeVBvaW50VHlwZTo6VGh1bmtFbnRyeVBvaW50
VHlwZUNvdW50OwotCi0gICAgSklUSlNDYWxsVGh1bmtFbnRyeVBvaW50c1dpdGhSZWYoKQotICAg
IHsKLSAgICB9Ci0KLSAgICBKSVRKU0NhbGxUaHVua0VudHJ5UG9pbnRzV2l0aFJlZihDb2RlUmVm
IGNvZGVSZWYpCi0gICAgICAgIDogbV9jb2RlUmVmKGNvZGVSZWYpCi0gICAgewotICAgIH0KLQot
ICAgIEpJVEpTQ2FsbFRodW5rRW50cnlQb2ludHNXaXRoUmVmKGNvbnN0IEpJVEpTQ2FsbFRodW5r
RW50cnlQb2ludHNXaXRoUmVmJiBvdGhlcikKLSAgICAgICAgOiBtX2NvZGVSZWYob3RoZXIubV9j
b2RlUmVmKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9m
RW50cnlUeXBlczsgaSsrKQotICAgICAgICAgICAgbV9lbnRyeVBvaW50c1tpXSA9IG90aGVyLm1f
ZW50cnlQb2ludHNbaV07Ci0gICAgfQotCi0gICAgQ29kZVB0ciBlbnRyeUZvcihUaHVua0VudHJ5
UG9pbnRUeXBlIHR5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gbV9lbnRyeVBvaW50c1t0eXBl
XTsKLSAgICB9Ci0KLSAgICBDb2RlUHRyIGVudHJ5Rm9yKEFyZ3VtZW50c0xvY2F0aW9uIGFyZ3Vt
ZW50c0xvY2F0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVudHJ5Rm9yKHRodW5rRW50cnlQ
b2ludFR5cGVGb3IoYXJndW1lbnRzTG9jYXRpb24pKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEVu
dHJ5Rm9yKFRodW5rRW50cnlQb2ludFR5cGUgdHlwZSwgQ29kZVB0ciBlbnRyeSkKLSAgICB7Ci0g
ICAgICAgIG1fZW50cnlQb2ludHNbdHlwZV0gPSBlbnRyeTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mRW50cnlGb3IoVGh1bmtFbnRyeVBvaW50VHlwZSB0eXBlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIG9mZnNldG9mKEpJVEpTQ2FsbFRodW5rRW50cnlQb2ludHNXaXRo
UmVmLCBtX2VudHJ5UG9pbnRzW3R5cGVdKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyRW50cmll
cygpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1iZXJPZkVudHJ5VHlwZXM7
IGktLTspCi0gICAgICAgICAgICBtX2VudHJ5UG9pbnRzW2ldID0gTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyKCk7Ci0gICAgfQotCi0gICAgQ29kZVJlZiBjb2RlUmVmKCkgeyByZXR1cm4gbV9jb2RlUmVm
OyB9Ci0KLSAgICBKSVRKU0NhbGxUaHVua0VudHJ5UG9pbnRzV2l0aFJlZiYgb3BlcmF0b3I9KGNv
bnN0IEpJVEpTQ2FsbFRodW5rRW50cnlQb2ludHNXaXRoUmVmJiBvdGhlcikKLSAgICB7Ci0gICAg
ICAgIG1fY29kZVJlZiA9IG90aGVyLm1fY29kZVJlZjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtYmVyT2ZFbnRyeVR5cGVzOyBpLS07KQotICAgICAgICAgICAgbV9lbnRyeVBvaW50c1tp
XSA9IG90aGVyLm1fZW50cnlQb2ludHNbaV07Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gKnRo
aXM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIENvZGVSZWYgbV9jb2RlUmVmOwotICAgIENvZGVQ
dHIgbV9lbnRyeVBvaW50c1tudW1iZXJPZkVudHJ5VHlwZXNdOwotfTsKLQotCi19IC8vIG5hbWVz
cGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4IDE1
NzNhZmQ0NjI5OGU3YmJiZTY5OGQ5YzZkNWU4NzQwODNkMDUwNDcuLjU2NzJmYTA1MDRlYjM0MDI5
MmJhYzZlNWJjYzM1Y2VhOTQ3MDUyNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcApAQCAtNDksOSArNDksOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIFVTRShK
U1ZBTFVFNjQpCiAKLUpJVEVudHJ5UG9pbnRzV2l0aFJlZiBKSVQ6OnByaXZhdGVDb21waWxlSklU
RW50cnlOYXRpdmVDYWxsKFZNKiB2bSwgTmF0aXZlRnVuY3Rpb24pCitKSVQ6OkNvZGVSZWYgSklU
Ojpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoVk0qIHZtLCBOYXRpdmVGdW5jdGlvbikKIHsK
LSAgICByZXR1cm4gdm0tPmdldEpJVEVudHJ5U3R1YihuYXRpdmVDYWxsR2VuZXJhdG9yKTsKKyAg
ICByZXR1cm4gdm0tPmdldENUSVN0dWIobmF0aXZlQ2FsbEdlbmVyYXRvcik7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX21vdihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IGM2ZDJkOTBl
Yjc2YTg1ZTI2YzczNGI5OGYxYTljOTZkNmQ0YmQ1MDAuLjViMDcxYWQ1YzczOTVlMWFmMWZiMzlh
M2ZmYjI5MGU0ZWM2Y2ZmMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMzMl82NC5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUpJ
VEVudHJ5UG9pbnRzV2l0aFJlZiBKSVQ6OnByaXZhdGVDb21waWxlSklURW50cnlOYXRpdmVDYWxs
KFZNKiB2bSwgTmF0aXZlRnVuY3Rpb24gZnVuYykKK0pJVDo6Q29kZVJlZiBKSVQ6OnByaXZhdGVD
b21waWxlQ1RJTmF0aXZlQ2FsbChWTSogdm0sIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCiB7CiAgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGFibGUgdG8gbG9nIFNoYWRvd0NoaWNrZW4gcHJvbG9n
dWUgcGFja2V0cy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTU1Njg5CkBAIC0xMjksOSArMTI5LDcgQEAgSklURW50cnlQb2ludHNXaXRoUmVmIEpJVDo6
cHJpdmF0ZUNvbXBpbGVKSVRFbnRyeU5hdGl2ZUNhbGwoVk0qIHZtLCBOYXRpdmVGdW5jdGkKICAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCAqdGhpcywgR0xPQkFMX1RIVU5LX0lEKTsK
IAogICAgIHBhdGNoQnVmZmVyLmxpbmsobmF0aXZlQ2FsbCwgRnVuY3Rpb25QdHIoZnVuYykpOwot
ICAgIEpJVDo6Q29kZVJlZiBjb2RlUmVmID0gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJK
SVQgQ1RJIG5hdGl2ZSBjYWxsIikpOwotICAgIAotICAgIHJldHVybiBKSVRFbnRyeVBvaW50c1dp
dGhSZWYoY29kZVJlZiwgY29kZVJlZi5jb2RlKCksIGNvZGVSZWYuY29kZSgpKTsKKyAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJKSVQgQ1RJIG5hdGl2ZSBjYWxsIikpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IDdh
YTZkNmM2M2VkZDM0ZWU2ODAxOGQ3MTcyYjg1M2E4ODA1OWI5ZGQuLjQ0NzM1ZDUxZjA1MWE0MjMy
OGY0OGJkNTk3OWU3Y2NlNGFjM2QzMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcApAQCAtODkwLDE0ICs4OTAsMTAgQEAgU2xvd1BhdGhSZXR1cm5UeXBl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBD
YWxsTGkKICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKTsKICAg
ICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOwogCi0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIsIGNvZGVQdHJGb3JMaW5raW5nOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gMDsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkgewotICAgICAgICBj
b2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBTdGFja0FyZ3NNdXN0Q2hl
Y2tBcml0eSk7Ci0jaWYgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUwot
ICAgICAgICBpZiAoY2FsbExpbmtJbmZvLT5hcmd1bWVudHNJblJlZ2lzdGVycygpKQotICAgICAg
ICAgICAgY29kZVB0ckZvckxpbmtpbmcgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQs
IFJlZ2lzdGVyQXJnc011c3RDaGVja0FyaXR5KTsKLSNlbmRpZgorICAgICAgICBjb2RlUHRyID0g
ZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBz
dGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKIApAQCAtOTE4LDQx
ICs5MTQsMTcgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlu
a0NhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGkKICAgICAgICAgICAgICAgICByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgfQogICAgICAgICBj
b2RlQmxvY2sgPSAqY29kZUJsb2NrU2xvdDsKLSAgICAgICAgRW50cnlQb2ludFR5cGUgZW50cnlU
eXBlOwotICAgICAgICBzaXplX3QgY2FsbGVyQXJndW1lbnRDb3VudCA9IGV4ZWNDYWxsZWUtPmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCk7Ci0gICAgICAgIHNpemVfdCBjYWxsZWVBcmd1bWVu
dENvdW50ID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7
Ci0gICAgICAgIGlmIChjYWxsZXJBcmd1bWVudENvdW50IDwgY2FsbGVlQXJndW1lbnRDb3VudCB8
fCBjYWxsTGlua0luZm8tPmlzVmFyYXJncygpKSB7Ci0jaWYgTlVNQkVSX09GX0pTX0ZVTkNUSU9O
X0FSR1VNRU5UX1JFR0lTVEVSUwotICAgICAgICAgICAgaWYgKGNhbGxMaW5rSW5mby0+YXJndW1l
bnRzSW5SZWdpc3RlcnMoKSkgewotICAgICAgICAgICAgICAgIGNvZGVQdHJGb3JMaW5raW5nID0g
ZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIEpJVEVudHJ5UG9pbnRzOjpy
ZWdpc3RlckVudHJ5VHlwZUZvckFyZ3VtZW50Q291bnQoY2FsbGVyQXJndW1lbnRDb3VudCkpOwot
ICAgICAgICAgICAgICAgIGlmICghY29kZVB0ckZvckxpbmtpbmcpCi0gICAgICAgICAgICAgICAg
ICAgIGNvZGVQdHJGb3JMaW5raW5nID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9y
KGtpbmQsIFJlZ2lzdGVyQXJnc011c3RDaGVja0FyaXR5KTsKLSAgICAgICAgICAgIH0KLSNlbmRp
ZgotICAgICAgICAgICAgZW50cnlUeXBlID0gU3RhY2tBcmdzTXVzdENoZWNrQXJpdHk7Ci0gICAg
ICAgICAgICAodm9pZCkgZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIGVu
dHJ5UG9pbnRUeXBlRm9yKGNhbGxMaW5rSW5mby0+YXJndW1lbnRzTG9jYXRpb24oKSkpOwotI2lm
IE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMKLSAgICAgICAgfSBlbHNl
IGlmIChjYWxsTGlua0luZm8tPmFyZ3VtZW50c0luUmVnaXN0ZXJzKCkpIHsKLSAgICAgICAgICAg
IGlmIChjYWxsZXJBcmd1bWVudENvdW50ID09IGNhbGxlZUFyZ3VtZW50Q291bnQgfHwgY2FsbGVl
QXJndW1lbnRDb3VudCA+PSBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJT
KQotICAgICAgICAgICAgICAgIGNvZGVQdHJGb3JMaW5raW5nID0gZnVuY3Rpb25FeGVjdXRhYmxl
LT5lbnRyeXBvaW50Rm9yKGtpbmQsIFJlZ2lzdGVyQXJnc0FyaXR5Q2hlY2tOb3RSZXF1aXJlZCk7
Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb2RlUHRyRm9yTGlua2luZyA9
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBKSVRFbnRyeVBvaW50czo6
cmVnaXN0ZXJFbnRyeVR5cGVGb3JBcmd1bWVudENvdW50KGNhbGxlckFyZ3VtZW50Q291bnQpKTsK
LSAgICAgICAgICAgICAgICBpZiAoIWNvZGVQdHJGb3JMaW5raW5nKQotICAgICAgICAgICAgICAg
ICAgICBjb2RlUHRyRm9yTGlua2luZyA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZv
cihraW5kLCBSZWdpc3RlckFyZ3NQb3NzaWJsZUV4dHJhQXJncyk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAvLyAgUHJlcG9wdWxhdGUgdGhlIGVudHJ5IHBvaW50cyB0aGUgdmlydHVhbCB0
aHVuayBtaWdodCB1c2UuCi0gICAgICAgICAgICAodm9pZCkgZnVuY3Rpb25FeGVjdXRhYmxlLT5l
bnRyeXBvaW50Rm9yKGtpbmQsIGVudHJ5UG9pbnRUeXBlRm9yKGNhbGxMaW5rSW5mby0+YXJndW1l
bnRzTG9jYXRpb24oKSkpOwotCi0gICAgICAgICAgICBlbnRyeVR5cGUgPSBTdGFja0FyZ3NBcml0
eUNoZWNrTm90UmVxdWlyZWQ7Ci0jZW5kaWYKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBl
bnRyeVR5cGUgPSBTdGFja0FyZ3NBcml0eUNoZWNrTm90UmVxdWlyZWQ7Ci0gICAgICAgIGNvZGVQ
dHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgZW50cnlUeXBlKTsK
KyAgICAgICAgQXJpdHlDaGVja01vZGUgYXJpdHk7CisgICAgICAgIGlmIChleGVjQ2FsbGVlLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZvLT5pc1ZhcmFyZ3MoKSkKKyAgICAg
ICAgICAgIGFyaXR5ID0gTXVzdENoZWNrQXJpdHk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGFyaXR5ID0gQXJpdHlDaGVja05vdFJlcXVpcmVkOworICAgICAgICBjb2RlUHRyID0gZnVuY3Rp
b25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIGFyaXR5KTsKICAgICB9CiAgICAgaWYg
KCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCiAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0U2Vl
bigpOwogICAgIGVsc2UKLSAgICAgICAgbGlua0ZvcihleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZv
LCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0ckZvckxpbmtpbmcgPyBjb2RlUHRyRm9yTGlua2lu
ZyA6IGNvZGVQdHIpOworICAgICAgICBsaW5rRm9yKGV4ZWNDYWxsZWUsICpjYWxsTGlua0luZm8s
IGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyKTsKICAgICAKICAgICByZXR1cm4gZW5jb2RlUmVz
dWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
Y2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFt
ZSA6IEtlZXBUaGVGcmFtZSkpOwogfQpAQCAtOTg3LDExICs5NTksNyBAQCB2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTGlua0RpcmVjdENhbGwoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0lu
Zm8qIGNhbGxMaQogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOwogICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gbnVsbHB0cjsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVu
Y3Rpb24oKSkKLSNpZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTCi0g
ICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIGNhbGxMaW5r
SW5mby0+YXJndW1lbnRzSW5SZWdpc3RlcnMoKSA/IFJlZ2lzdGVyQXJnc011c3RDaGVja0FyaXR5
IDogU3RhY2tBcmdzTXVzdENoZWNrQXJpdHkpOwotI2Vsc2UKLSAgICBjb2RlUHRyID0gZXhlY3V0
YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBTdGFja0FyZ3NNdXN0Q2hlY2tBcml0eSk7Ci0jZW5k
aWYKKyAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgTXVz
dENoZWNrQXJpdHkpOwogICAgIGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1
bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1
dGFibGUpOwogCkBAIC0xMDAzLDI5ICs5NzEsMTMgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkxpbmtEaXJlY3RDYWxsKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvKiBjYWxsTGkK
ICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBFbnRyeVBvaW50VHlwZSBlbnRy
eVR5cGU7CisgICAgICAgIEFyaXR5Q2hlY2tNb2RlIGFyaXR5OwogICAgICAgICB1bnNpZ25lZCBh
cmd1bWVudFN0YWNrU2xvdHMgPSBjYWxsTGlua0luZm8tPm1heE51bUFyZ3VtZW50cygpOwotICAg
ICAgICBzaXplX3QgY29kZUJsb2NrUGFyYW1ldGVyQ291bnQgPSBzdGF0aWNfY2FzdDxzaXplX3Q+
KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKLSNpZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05f
QVJHVU1FTlRfUkVHSVNURVJTCi0gICAgICAgIGlmIChjYWxsTGlua0luZm8tPmFyZ3VtZW50c0lu
UmVnaXN0ZXJzKCkpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgbG9naWMgY291bGQgcHJvYmFibHkg
YmUgc2ltcGxpZmllZCEKLSAgICAgICAgICAgIGlmIChhcmd1bWVudFN0YWNrU2xvdHMgPCBjb2Rl
QmxvY2tQYXJhbWV0ZXJDb3VudCkKLSAgICAgICAgICAgICAgICBlbnRyeVR5cGUgPSBlbnRyeVBv
aW50VHlwZUZvcihjYWxsTGlua0luZm8tPmFyZ3VtZW50c0xvY2F0aW9uKCkpOwotICAgICAgICAg
ICAgZWxzZSBpZiAoYXJndW1lbnRTdGFja1Nsb3RzID4gTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FS
R1VNRU5UX1JFR0lTVEVSUykgewotICAgICAgICAgICAgICAgIGlmIChjb2RlQmxvY2tQYXJhbWV0
ZXJDb3VudCA8IE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMpCi0gICAg
ICAgICAgICAgICAgICAgIGVudHJ5VHlwZSA9IFJlZ2lzdGVyQXJnc1Bvc3NpYmxlRXh0cmFBcmdz
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW50cnlUeXBlID0g
UmVnaXN0ZXJBcmdzQXJpdHlDaGVja05vdFJlcXVpcmVkOwotICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgZW50cnlUeXBlID0gcmVnaXN0ZXJFbnRyeVBvaW50VHlwZUZvcihhcmd1
bWVudFN0YWNrU2xvdHMpOwotICAgICAgICB9IGVsc2UgaWYgKGFyZ3VtZW50U3RhY2tTbG90cyA8
IGNvZGVCbG9ja1BhcmFtZXRlckNvdW50KQotI2Vsc2UKLSAgICAgICAgaWYgKGFyZ3VtZW50U3Rh
Y2tTbG90cyA8IGNvZGVCbG9ja1BhcmFtZXRlckNvdW50KQotI2VuZGlmCi0gICAgICAgICAgICBl
bnRyeVR5cGUgPSBTdGFja0FyZ3NNdXN0Q2hlY2tBcml0eTsKKyAgICAgICAgaWYgKGFyZ3VtZW50
U3RhY2tTbG90cyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCkpKQorICAgICAgICAgICAgYXJpdHkgPSBNdXN0Q2hlY2tBcml0eTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgZW50cnlUeXBlID0gU3RhY2tBcmdzQXJpdHlDaGVja05vdFJlcXVpcmVkOwot
ICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQs
IGVudHJ5VHlwZSk7CisgICAgICAgICAgICBhcml0eSA9IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDsK
KyAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5k
LCBhcml0eSk7CiAgICAgfQogICAgIAogICAgIGxpbmtEaXJlY3RGb3IoZXhlYywgKmNhbGxMaW5r
SW5mbywgY29kZUJsb2NrLCBjb2RlUHRyKTsKQEAgLTEwNjgsMTcgKzEwMjAsOCBAQCBpbmxpbmUg
U2xvd1BhdGhSZXR1cm5UeXBlIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oCiAgICAgICAgICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgIH0KICAg
ICB9Ci0jaWYgTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUwotICAgIGlm
IChjYWxsTGlua0luZm8tPmFyZ3VtZW50c0luUmVnaXN0ZXJzKCkpIHsKLSAgICAgICAgLy8gUHVs
bCBpbnRvIHRoZSBjYWNoZSB0aGUgYXJpdHkgY2hlY2sgcmVnaXN0ZXIgZW50cnkgaWYgdGhlIGNh
bGxlciB3YW50cyBhIHJlZ2lzdGVyIGVudHJ5LgotICAgICAgICAvLyBUaGlzIHdpbGwgYmUgdXNl
ZCBieSB0aGUgZ2VuZXJpYyB2aXJ0dWFsIGNhbGwgdGh1bmsuCi0gICAgICAgICh2b2lkKSBleGVj
dXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIFJlZ2lzdGVyQXJnc011c3RDaGVja0FyaXR5KTsK
LSAgICAgICAgKHZvaWQpIGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgZW50cnlQb2lu
dFR5cGVGb3IoY2FsbExpbmtJbmZvLT5hcmd1bWVudHNMb2NhdGlvbigpKSk7Ci0KLSAgICB9Ci0j
ZW5kaWYKICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Io
Ci0gICAgICAgIGtpbmQsIFN0YWNrQXJnc011c3RDaGVja0FyaXR5KS5leGVjdXRhYmxlQWRkcmVz
cygpLAorICAgICAgICBraW5kLCBNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwK
ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgp
ID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKaW5kZXggNjRiNmQ4MTViYTZj
MzA3YWNiNjE5NTVhZWFjNzNkODFmMTAxZmRkNi4uNDBjMTJjZWM5NGUwMWEwODQwNGY3YjZkOTY3
MjFmMTA1MWY0ODMxOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRU
aHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcApA
QCAtNDQsMjIgKzQ0LDE4IEBAIEpJVFRodW5rczo6fkpJVFRodW5rcygpCiB7CiB9CiAKLUpJVEVu
dHJ5UG9pbnRzV2l0aFJlZiBKSVRUaHVua3M6OmppdEVudHJ5TmF0aXZlQ2FsbChWTSogdm0pCitN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgSklUVGh1bmtzOjpjdGlOYXRpdmVDYWxsKFZNKiB2bSkKIHsK
LSAgICBpZiAoIXZtLT5jYW5Vc2VKSVQoKSkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgbmF0aXZlQ2FsbFN0dWIgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29k
ZVB0cihsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lKTsKLSAgICAgICAgcmV0dXJuIEpJVEVu
dHJ5UG9pbnRzV2l0aFJlZihNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2Vk
Q29kZVJlZihuYXRpdmVDYWxsU3R1YiksIG5hdGl2ZUNhbGxTdHViLCBuYXRpdmVDYWxsU3R1Yik7
Ci0gICAgfQotICAgIHJldHVybiBqaXRFbnRyeVN0dWIodm0sIG5hdGl2ZUNhbGxHZW5lcmF0b3Ip
OworICAgIGlmICghdm0tPmNhblVzZUpJVCgpKQorICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyOjpjcmVhdGVMTEludENvZGVQdHIobGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBvbGlu
ZSk7CisgICAgcmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZUNhbGxHZW5lcmF0b3IpLmNvZGUoKTsK
IH0KIAotSklURW50cnlQb2ludHNXaXRoUmVmIEpJVFRodW5rczo6aml0RW50cnlOYXRpdmVDb25z
dHJ1Y3QoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIEpJVFRodW5rczo6Y3RpTmF0aXZl
Q29uc3RydWN0KFZNKiB2bSkKIHsKLSAgICBpZiAoIXZtLT5jYW5Vc2VKSVQoKSkgewotICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbmF0aXZlQ29uc3RydWN0U3R1YiA9IE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJh
bXBvbGluZSk7Ci0gICAgICAgIHJldHVybiBKSVRFbnRyeVBvaW50c1dpdGhSZWYoTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYobmF0aXZlQ29uc3RydWN0U3R1
YiksIG5hdGl2ZUNvbnN0cnVjdFN0dWIsIG5hdGl2ZUNvbnN0cnVjdFN0dWIpOwotICAgIH0KLSAg
ICByZXR1cm4gaml0RW50cnlTdHViKHZtLCBuYXRpdmVDb25zdHJ1Y3RHZW5lcmF0b3IpOworICAg
IGlmICghdm0tPmNhblVzZUpJVCgpKQorICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyOjpjcmVhdGVMTEludENvZGVQdHIobGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5l
KTsKKyAgICByZXR1cm4gY3RpU3R1Yih2bSwgbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKS5jb2Rl
KCk7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBKSVRUaHVua3M6OmN0aU5hdGl2ZVRhaWxD
YWxsKFZNKiB2bSkKQEAgLTg2LDMwICs4Miw2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBKSVRU
aHVua3M6OmN0aVN0dWIoVk0qIHZtLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiAgICAgcmV0
dXJuIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAotSklURW50cnlQb2ludHNXaXRoUmVmIEpJ
VFRodW5rczo6aml0RW50cnlTdHViKFZNKiB2bSwgSklURW50cnlHZW5lcmF0b3IgZ2VuZXJhdG9y
KQotewotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgSklURW50cnlTdHViTWFw
OjpBZGRSZXN1bHQgZW50cnkgPSBtX2ppdEVudHJ5U3R1Yk1hcC5hZGQoZ2VuZXJhdG9yLCBKSVRF
bnRyeVBvaW50c1dpdGhSZWYoKSk7Ci0gICAgaWYgKGVudHJ5LmlzTmV3RW50cnkpIHsKLSAgICAg
ICAgLy8gQ29tcGlsYXRpb24gdGhyZWFkIGNhbiBvbmx5IHJldHJpZXZlIGV4aXN0aW5nIGVudHJp
ZXMuCi0gICAgICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICAgICAgZW50
cnkuaXRlcmF0b3ItPnZhbHVlID0gZ2VuZXJhdG9yKHZtKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVu
dHJ5Lml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotSklUSlNDYWxsVGh1bmtFbnRyeVBvaW50c1dpdGhS
ZWYgSklUVGh1bmtzOjpqaXRDYWxsVGh1bmtFbnRyeVN0dWIoVk0qIHZtLCBKSVRDYWxsVGh1bmtF
bnRyeUdlbmVyYXRvciBnZW5lcmF0b3IpCi17Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2Nr
KTsKLSAgICBKSVRDYWxsVGh1bmtFbnRyeVN0dWJNYXA6OkFkZFJlc3VsdCBlbnRyeSA9IG1faml0
Q2FsbFRodW5rRW50cnlTdHViTWFwLmFkZChnZW5lcmF0b3IsIEpJVEpTQ2FsbFRodW5rRW50cnlQ
b2ludHNXaXRoUmVmKCkpOwotICAgIGlmIChlbnRyeS5pc05ld0VudHJ5KSB7Ci0gICAgICAgIC8v
IENvbXBpbGF0aW9uIHRocmVhZCBjYW4gb25seSByZXRyaWV2ZSBleGlzdGluZyBlbnRyaWVzLgot
ICAgICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Ci0gICAgICAgIGVudHJ5Lml0
ZXJhdG9yLT52YWx1ZSA9IGdlbmVyYXRvcih2bSk7Ci0gICAgfQotICAgIHJldHVybiBlbnRyeS5p
dGVyYXRvci0+dmFsdWU7Ci19Ci0KIHZvaWQgSklUVGh1bmtzOjpmaW5hbGl6ZShIYW5kbGU8VW5r
bm93bj4gaGFuZGxlLCB2b2lkKikKIHsKICAgICBhdXRvKiBuYXRpdmVFeGVjdXRhYmxlID0ganND
YXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOwpAQCAtMTIxLDcg
KzkzLDcgQEAgTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKFZN
KiB2bSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE4KICAgICByZXR1cm4gaG9zdEZ1bmN0aW9u
U3R1Yih2bSwgZnVuY3Rpb24sIGNvbnN0cnVjdG9yLCBudWxscHRyLCBOb0ludHJpbnNpYywgbnVs
bHB0ciwgbmFtZSk7CiB9CiAKLU5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0
aW9uU3R1YihWTSogdm0sIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBj
b25zdHJ1Y3RvciwgSklURW50cnlHZW5lcmF0b3IgZ2VuZXJhdG9yLCBJbnRyaW5zaWMgaW50cmlu
c2ljLCBjb25zdCBET01KSVQ6OlNpZ25hdHVyZSogc2lnbmF0dXJlLCBjb25zdCBTdHJpbmcmIG5h
bWUpCitOYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIoVk0qIHZt
LCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIFRo
dW5rR2VuZXJhdG9yIGdlbmVyYXRvciwgSW50cmluc2ljIGludHJpbnNpYywgY29uc3QgRE9NSklU
OjpTaWduYXR1cmUqIHNpZ25hdHVyZSwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIEFTU0VS
VCghaXNDb21waWxhdGlvblRocmVhZCgpKTsgICAgCiAgICAgQVNTRVJUKHZtLT5jYW5Vc2VKSVQo
KSk7CkBAIC0xMzEsMTkgKzEwMywxOSBAQCBOYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhv
c3RGdW5jdGlvblN0dWIoVk0qIHZtLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTgogCiAgICAg
UmVmUHRyPEpJVENvZGU+IGZvckNhbGw7CiAgICAgaWYgKGdlbmVyYXRvcikgewotICAgICAgICBK
SVRFbnRyeVBvaW50c1dpdGhSZWYgZW50cnkgPSBnZW5lcmF0b3Iodm0pOwotICAgICAgICBmb3JD
YWxsID0gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoZW50cnksIEpJVENvZGU6Okhvc3RDYWxs
VGh1bmspKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGVudHJ5ID0gZ2VuZXJhdG9y
KHZtKTsKKyAgICAgICAgZm9yQ2FsbCA9IGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKGVudHJ5
LCBlbnRyeS5jb2RlKCksIEpJVENvZGU6Okhvc3RDYWxsVGh1bmspKTsKICAgICB9IGVsc2UKLSAg
ICAgICAgZm9yQ2FsbCA9IGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKEpJVDo6Y29tcGlsZU5h
dGl2ZUNhbGxFbnRyeVBvaW50cyh2bSwgZnVuY3Rpb24pLCBKSVRDb2RlOjpIb3N0Q2FsbFRodW5r
KSk7CisgICAgICAgIGZvckNhbGwgPSBhZG9wdFJlZihuZXcgTmF0aXZlSklUQ29kZShKSVQ6OmNv
bXBpbGVDVElOYXRpdmVDYWxsKHZtLCBmdW5jdGlvbiksIEpJVENvZGU6Okhvc3RDYWxsVGh1bmsp
KTsKICAgICAKLSAgICBSZWZQdHI8SklUQ29kZT4gZm9yQ29uc3RydWN0ID0gYWRvcHRSZWYobmV3
IERpcmVjdEpJVENvZGUoaml0RW50cnlOYXRpdmVDb25zdHJ1Y3Qodm0pLCBKSVRDb2RlOjpIb3N0
Q2FsbFRodW5rKSk7CisgICAgUmVmUHRyPEpJVENvZGU+IGZvckNvbnN0cnVjdCA9IGFkb3B0UmVm
KG5ldyBOYXRpdmVKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFn
ZWRDb2RlUmVmKGN0aU5hdGl2ZUNvbnN0cnVjdCh2bSkpLCBKSVRDb2RlOjpIb3N0Q2FsbFRodW5r
KSk7CiAgICAgCiAgICAgTmF0aXZlRXhlY3V0YWJsZSogbmF0aXZlRXhlY3V0YWJsZSA9IE5hdGl2
ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqdm0sIGZvckNhbGwsIGZ1bmN0aW9uLCBmb3JDb25zdHJ1Y3Qs
IGNvbnN0cnVjdG9yLCBpbnRyaW5zaWMsIHNpZ25hdHVyZSwgbmFtZSk7CiAgICAgd2Vha0FkZCgq
bV9ob3N0RnVuY3Rpb25TdHViTWFwLCBzdGQ6Om1ha2VfdHVwbGUoZnVuY3Rpb24sIGNvbnN0cnVj
dG9yLCBuYW1lKSwgV2VhazxOYXRpdmVFeGVjdXRhYmxlPihuYXRpdmVFeGVjdXRhYmxlLCB0aGlz
KSk7CiAgICAgcmV0dXJuIG5hdGl2ZUV4ZWN1dGFibGU7CiB9CiAKLU5hdGl2ZUV4ZWN1dGFibGUq
IEpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1YihWTSogdm0sIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0
aW9uLCBKSVRFbnRyeUdlbmVyYXRvciBnZW5lcmF0b3IsIEludHJpbnNpYyBpbnRyaW5zaWMsIGNv
bnN0IFN0cmluZyYgbmFtZSkKK05hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0
aW9uU3R1YihWTSogdm0sIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBUaHVua0dlbmVyYXRvciBn
ZW5lcmF0b3IsIEludHJpbnNpYyBpbnRyaW5zaWMsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAg
ICByZXR1cm4gaG9zdEZ1bmN0aW9uU3R1Yih2bSwgZnVuY3Rpb24sIGNhbGxIb3N0RnVuY3Rpb25B
c0NvbnN0cnVjdG9yLCBnZW5lcmF0b3IsIGludHJpbnNpYywgbnVsbHB0ciwgbmFtZSk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaAppbmRleCBiNTkzYmIzMDk5M2JiN2E0MWNm
NDRiOTJiZWU3YzdkN2Q5NGQ0YjgxLi5hZGRjZjIzMGMzNDVkNDI3MWI2MzdmMDhiOTRjNDE2YTNl
ZDE4MmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgKQEAgLTI5LDcgKzI5
LDYgQEAKIAogI2luY2x1ZGUgIkNhbGxEYXRhLmgiCiAjaW5jbHVkZSAiSW50cmluc2ljLmgiCi0j
aW5jbHVkZSAiSklURW50cnlQb2ludHMuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYuaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvci5oIgogI2luY2x1ZGUgIldlYWsuaCIKQEAg
LTUzLDE4ICs1MiwxNiBAQCBwdWJsaWM6CiAgICAgSklUVGh1bmtzKCk7CiAgICAgdmlydHVhbCB+
SklUVGh1bmtzKCk7CiAKLSAgICBKSVRFbnRyeVBvaW50c1dpdGhSZWYgaml0RW50cnlOYXRpdmVD
YWxsKFZNKik7Ci0gICAgSklURW50cnlQb2ludHNXaXRoUmVmIGppdEVudHJ5TmF0aXZlQ29uc3Ry
dWN0KFZNKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aU5hdGl2ZUNhbGwoVk0qKTsK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpTmF0aXZlQ29uc3RydWN0KFZNKik7CiAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aU5hdGl2ZVRhaWxDYWxsKFZNKik7ICAgIAogICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlOYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3MoVk0q
KTsgICAgCiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY3RpU3R1YihWTSosIFRodW5rR2Vu
ZXJhdG9yKTsKLSAgICBKSVRFbnRyeVBvaW50c1dpdGhSZWYgaml0RW50cnlTdHViKFZNKiwgSklU
RW50cnlHZW5lcmF0b3IpOwotICAgIEpJVEpTQ2FsbFRodW5rRW50cnlQb2ludHNXaXRoUmVmIGpp
dENhbGxUaHVua0VudHJ5U3R1YihWTSosIEpJVENhbGxUaHVua0VudHJ5R2VuZXJhdG9yKTsKIAog
ICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5jdGlvblN0dWIoVk0qLCBOYXRpdmVGdW5jdGlv
biwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAg
TmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihWTSosIE5hdGl2ZUZ1bmN0aW9uLCBO
YXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvciwgSklURW50cnlHZW5lcmF0b3IsIEludHJpbnNpYywg
Y29uc3QgRE9NSklUOjpTaWduYXR1cmUqLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIE5hdGl2
ZUV4ZWN1dGFibGUqIGhvc3RGdW5jdGlvblN0dWIoVk0qLCBOYXRpdmVGdW5jdGlvbiwgSklURW50
cnlHZW5lcmF0b3IsIEludHJpbnNpYywgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBOYXRpdmVF
eGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKFZNKiwgTmF0aXZlRnVuY3Rpb24sIE5hdGl2ZUZ1
bmN0aW9uIGNvbnN0cnVjdG9yLCBUaHVua0dlbmVyYXRvciwgSW50cmluc2ljLCBjb25zdCBET01K
SVQ6OlNpZ25hdHVyZSosIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgTmF0aXZlRXhlY3V0YWJs
ZSogaG9zdEZ1bmN0aW9uU3R1YihWTSosIE5hdGl2ZUZ1bmN0aW9uLCBUaHVua0dlbmVyYXRvciwg
SW50cmluc2ljLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAgICAgdm9pZCBjbGVhckhvc3RGdW5j
dGlvblN0dWJzKCk7CiAKQEAgLTczLDEwICs3MCw2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdHlw
ZWRlZiBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY+IENUSVN0
dWJNYXA7CiAgICAgQ1RJU3R1Yk1hcCBtX2N0aVN0dWJNYXA7Ci0gICAgdHlwZWRlZiBIYXNoTWFw
PEpJVEVudHJ5R2VuZXJhdG9yLCBKSVRFbnRyeVBvaW50c1dpdGhSZWY+IEpJVEVudHJ5U3R1Yk1h
cDsKLSAgICBKSVRFbnRyeVN0dWJNYXAgbV9qaXRFbnRyeVN0dWJNYXA7Ci0gICAgdHlwZWRlZiBI
YXNoTWFwPEpJVENhbGxUaHVua0VudHJ5R2VuZXJhdG9yLCBKSVRKU0NhbGxUaHVua0VudHJ5UG9p
bnRzV2l0aFJlZj4gSklUQ2FsbFRodW5rRW50cnlTdHViTWFwOwotICAgIEpJVENhbGxUaHVua0Vu
dHJ5U3R1Yk1hcCBtX2ppdENhbGxUaHVua0VudHJ5U3R1Yk1hcDsKIAogICAgIHR5cGVkZWYgc3Rk
Ojp0dXBsZTxOYXRpdmVGdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24sIFN0cmluZz4gSG9zdEZ1bmN0
aW9uS2V5OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJm
YWNlSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKaW5k
ZXggMTc2YTA1Mzc4MGJiZjVkZTVmNjZmMjc3ODZlYzFiNGVkN2ZjZjg2OC4uZGMwY2MxYTRmZjJl
ODYyMWQxMzhhYTY2NDhkYjAzNDFkYThkZWQzOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSlNJbnRlcmZhY2VKSVQuaApAQCAtNjMsNyArNjMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgSnVtcCBlbWl0SnVtcElmTm90SlNDZWxsKFJlZ2lzdGVySUQpOwogICAgICAgICBKdW1w
IGVtaXRKdW1wSWZOdW1iZXIoUmVnaXN0ZXJJRCk7CiAgICAgICAgIEp1bXAgZW1pdEp1bXBJZk5v
dE51bWJlcihSZWdpc3RlcklEKTsKLSAgICAgICAgSnVtcCBlbWl0SnVtcElmTm90SW50MzIoUmVn
aXN0ZXJJRCByZWcpOwogICAgICAgICB2b2lkIGVtaXRUYWdJbnQoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCk7CiAjZW5kaWYKIApAQCAtMTY0LDE3ICsxNjMsMTIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoTm9uWmVybywgZHN0LCB0YWdNYXNr
UmVnaXN0ZXIpOwogICAgIH0KICAgICAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAg
SlNJbnRlcmZhY2VKSVQ6OmVtaXRKdW1wSWZOb3RJbnQzMihSZWdpc3RlcklEIHJlZykKLSAgICB7
Ci0gICAgICAgIEp1bXAgcmVzdWx0ID0gYnJhbmNoNjQoQmVsb3csIHJlZywgdGFnVHlwZU51bWJl
clJlZ2lzdGVyKTsKLSAgICAgICAgemVyb0V4dGVuZDMyVG9QdHIocmVnLCByZWcpOwotICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQogICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVt
cCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMih1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJ
bmRleCwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2
aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7Ci0gICAgICAgIHJldHVybiBlbWl0SnVtcElmTm90
SW50MzIoZHN0KTsKKyAgICAgICAgSnVtcCByZXN1bHQgPSBicmFuY2g2NChCZWxvdywgZHN0LCB0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICB6ZXJvRXh0ZW5kMzJUb1B0cihkc3QsIGRz
dCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgaW5saW5lIEpTSW50ZXJm
YWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZSh1bnNpZ25lZCB2aXJ0
dWFsUmVnaXN0ZXJJbmRleCwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmNwcAppbmRleCAzN2ViNGNjOTVm
NzM0MmNhOWUxZDMxNThiMGUzZmU4NDE2MDFkM2U3Li43MjFhNGVhZWI1NzgwYWY2NDYxYzNhYmRh
MmVmYTExMWZiNzAyYTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
Z2lzdGVyU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0
LmNwcApAQCAtMTU5LDIwICsxNTksNiBAQCBSZWdpc3RlclNldCBSZWdpc3RlclNldDo6Y2FsbGVl
U2F2ZVJlZ2lzdGVycygpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVnaXN0ZXJTZXQgUmVn
aXN0ZXJTZXQ6OmFyZ3VtZW50UmVnaXN0ZXJzKCkKLXsKLSAgICBSZWdpc3RlclNldCByZXN1bHQ7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50SW5kZXggPSAw
OyBhcmd1bWVudEluZGV4IDwgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUzsgYXJndW1lbnRJ
bmRleCsrKSB7Ci0gICAgICAgIEdQUlJlZyBhcmd1bWVudFJlZyA9IGFyZ3VtZW50UmVnaXN0ZXJG
b3IoYXJndW1lbnRJbmRleCk7Ci0KLSAgICAgICAgaWYgKGFyZ3VtZW50UmVnICE9IEludmFsaWRH
UFJSZWcpCi0gICAgICAgICAgICByZXN1bHQuc2V0KGFyZ3VtZW50UmVnKTsKLSAgICB9Ci0jZW5k
aWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBSZWdpc3RlclNldCBSZWdpc3RlclNldDo6dm1D
YWxsZWVTYXZlUmVnaXN0ZXJzKCkKIHsKICAgICBSZWdpc3RlclNldCByZXN1bHQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKaW5kZXggOGQxMjUxNjM2NDQwZDBjM2Y4Njc0
M2Q1OTQxYjBmYjQwNDZlYjk0MS4uMDM1OTA2NmUzMzJlYTA1NmNhYWJkNjU3N2RiOTk2M2EyMjU3
NjUwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaApAQCAtNDksNyAr
NDksNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZ2lzdGVyU2V0IHJ1bnRpbWVSZWdpc3RlcnMo
KTsKICAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgc3BlY2lhbFJlZ2lzdGVycygpOyAvLyBUaGUgdW5p
b24gb2Ygc3RhY2ssIHJlc2VydmVkIGhhcmR3YXJlLCBhbmQgcnVudGltZSByZWdpc3RlcnMuCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVSZWdpc3Rl
cnMoKTsKLSAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgYXJndW1lbnRSZWdpc3RlcnMoKTsgLy8gUmVn
aXN0ZXJzIHVzZWQgdG8gcGFzcyBhcmd1bWVudHMgd2hlbiBtYWtpbmcgSlMgQ2FsbHMKICAgICBz
dGF0aWMgUmVnaXN0ZXJTZXQgdm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCk7IC8vIENhbGxlZSBzYXZl
IHJlZ2lzdGVycyB0aGF0IG1pZ2h0IGJlIHNhdmVkIGFuZCB1c2VkIGJ5IGFueSB0aWVyLgogICAg
IHN0YXRpYyBSZWdpc3RlclNldCBsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOyAv
LyBSZWdpc3RlcnMgc2F2ZWQgYW5kIHVzZWQgYnkgdGhlIExMSW50LgogICAgIHN0YXRpYyBSZWdp
c3RlclNldCBkZmdDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7IC8vIFJlZ2lzdGVycyBzYXZlZCBhbmQg
dXNlZCBieSB0aGUgREZHIEpJVC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCmlu
ZGV4IDI4NWY2MDQ0YTcyNjk5ZGFiYjUxNGU2NDQxZWVmYjdjM2JhNGU1NTcuLmQ0Zjk4Zjg4ODM1
MWVjNTU1Mzc2YmYwNmYxM2MzNTUxMWMyNjFlMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcApAQCAtNTQwLDIxICs1NDAsMjEgQEAgdm9pZCByZXBhdGNoSW4oCiAgICAgICAg
IGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uc2xv
d1BhdGhDYWxsTG9jYXRpb24oKSwgb3BlcmF0aW9uSW4pOwogfQogCi1zdGF0aWMgdm9pZCBsaW5r
U2xvd0ZvcihWTSosIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBKSVRKU0NhbGxUaHVua0Vu
dHJ5UG9pbnRzV2l0aFJlZiB0aHVua0VudHJ5UG9pbnRzKQorc3RhdGljIHZvaWQgbGlua1Nsb3dG
b3IoVk0qLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGNvZGVSZWYpCiB7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlu
a0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCksIENvZGVMb2NhdGlvbkxhYmVsKHRodW5rRW50cnlQ
b2ludHMuZW50cnlGb3IoY2FsbExpbmtJbmZvLmFyZ3VtZW50c0xvY2F0aW9uKCkpKSk7CisgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlua0luZm8uY2FsbFJldHVybkxv
Y2F0aW9uKCksIENvZGVMb2NhdGlvbkxhYmVsKGNvZGVSZWYuY29kZSgpKSk7CiB9CiAKLXN0YXRp
YyB2b2lkIGxpbmtTbG93Rm9yKFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIEpJ
VENhbGxUaHVua0VudHJ5R2VuZXJhdG9yIGdlbmVyYXRvcikKK3N0YXRpYyB2b2lkIGxpbmtTbG93
Rm9yKFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIFRodW5rR2VuZXJhdG9yIGdl
bmVyYXRvcikKIHsKLSAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCB2bS0+Z2V0SklU
Q2FsbFRodW5rRW50cnlTdHViKGdlbmVyYXRvcikpOworICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxs
TGlua0luZm8sIHZtLT5nZXRDVElTdHViKGdlbmVyYXRvcikpOwogfQogCiBzdGF0aWMgdm9pZCBs
aW5rU2xvd0ZvcihWTSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewotICAgIEpJ
VEpTQ2FsbFRodW5rRW50cnlQb2ludHNXaXRoUmVmIHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVu
a0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVh
bFRodW5rID0gdmlydHVhbFRodW5rRm9yKHZtLCBjYWxsTGlua0luZm8pOwogICAgIGxpbmtTbG93
Rm9yKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7Ci0gICAgY2FsbExpbmtJbmZvLnNl
dFNsb3dTdHViKGNyZWF0ZUpJVFN0dWJSb3V0aW5lKHZpcnR1YWxUaHVuay5jb2RlUmVmKCksICp2
bSwgbnVsbHB0ciwgdHJ1ZSkpOworICAgIGNhbGxMaW5rSW5mby5zZXRTbG93U3R1YihjcmVhdGVK
SVRTdHViUm91dGluZSh2aXJ0dWFsVGh1bmssICp2bSwgbnVsbHB0ciwgdHJ1ZSkpOwogfQogCiBz
dGF0aWMgYm9vbCBpc1dlYkFzc2VtYmx5VG9KU0NhbGxlZShWTSYgdm0sIEpTQ2VsbCogY2FsbGVl
KQpAQCAtNjQ0LDcgKzY0NCw3IEBAIHZvaWQgbGlua1Nsb3dGb3IoCiAgICAgbGlua1Nsb3dGb3Io
dm0sIGNhbGxMaW5rSW5mbyk7CiB9CiAKLXN0YXRpYyB2b2lkIHJldmVydENhbGwoVk0qIHZtLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgSklUSlNDYWxsVGh1bmtFbnRyeVBvaW50c1dpdGhS
ZWYgY29kZVJlZikKK3N0YXRpYyB2b2lkIHJldmVydENhbGwoVk0qIHZtLCBDYWxsTGlua0luZm8m
IGNhbGxMaW5rSW5mbywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYpCiB7CiAgICAgaWYg
KGNhbGxMaW5rSW5mby5pc0RpcmVjdCgpKSB7CiAgICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckNv
ZGVCbG9jaygpOwpAQCAtNjcxLDcgKzY3MSw3IEBAIHZvaWQgdW5saW5rRm9yKFZNJiB2bSwgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiAgICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJs
eSgpKQogICAgICAgICBkYXRhTG9nKCJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8u
aG90UGF0aE90aGVyKCksICJcbiIpOwogICAgIAotICAgIHJldmVydENhbGwoJnZtLCBjYWxsTGlu
a0luZm8sIHZtLmdldEpJVENhbGxUaHVua0VudHJ5U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
KSk7CisgICAgcmV2ZXJ0Q2FsbCgmdm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5r
Q2FsbFRodW5rR2VuZXJhdG9yKSk7CiB9CiAKIHZvaWQgbGlua1ZpcnR1YWxGb3IoRXhlY1N0YXRl
KiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKQEAgLTY4Myw5ICs2ODMsOSBAQCB2
b2lkIGxpbmtWaXJ0dWFsRm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlu
a0luZm8pCiAgICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2sp
KQogICAgICAgICBkYXRhTG9nKCJMaW5raW5nIHZpcnR1YWwgY2FsbCBhdCAiLCAqY2FsbGVyQ29k
ZUJsb2NrLCAiICIsIGNhbGxlckZyYW1lLT5jb2RlT3JpZ2luKCksICJcbiIpOwogCi0gICAgSklU
SlNDYWxsVGh1bmtFbnRyeVBvaW50c1dpdGhSZWYgdmlydHVhbFRodW5rID0gdmlydHVhbFRodW5r
Rm9yKCZ2bSwgY2FsbExpbmtJbmZvKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVh
bFRodW5rID0gdmlydHVhbFRodW5rRm9yKCZ2bSwgY2FsbExpbmtJbmZvKTsKICAgICByZXZlcnRD
YWxsKCZ2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmspOwotICAgIGNhbGxMaW5rSW5mby5z
ZXRTbG93U3R1YihjcmVhdGVKSVRTdHViUm91dGluZSh2aXJ0dWFsVGh1bmsuY29kZVJlZigpLCB2
bSwgbnVsbHB0ciwgdHJ1ZSkpOworICAgIGNhbGxMaW5rSW5mby5zZXRTbG93U3R1YihjcmVhdGVK
SVRTdHViUm91dGluZSh2aXJ0dWFsVGh1bmssIHZtLCBudWxscHRyLCB0cnVlKSk7CiB9CiAKIG5h
bWVzcGFjZSB7CkBAIC03NDAsNyArNzQwLDYgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAog
ICAgICAgICBjYWxsTGlua0luZm8uc2V0SGFzU2VlbkNsb3N1cmUoKTsKICAgICAKICAgICBWZWN0
b3I8UG9seW1vcnBoaWNDYWxsQ2FzZT4gY2FsbENhc2VzOwotICAgIHNpemVfdCBjYWxsZXJBcmd1
bWVudENvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKTsKICAgICAKICAg
ICAvLyBGaWd1cmUgb3V0IHdoYXQgb3VyIGNhc2VzIGFyZS4KICAgICBmb3IgKENhbGxWYXJpYW50
IHZhcmlhbnQgOiBsaXN0KSB7CkBAIC03NTIsNyArNzUxLDcgQEAgdm9pZCBsaW5rUG9seW1vcnBo
aWNDYWxsKAogICAgICAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KGV4ZWN1dGFibGUpLT5jb2RlQmxvY2tGb3JDYWxsKCk7CiAgICAgICAgICAgICAvLyBJZiB3
ZSBjYW5ub3QgaGFuZGxlIGEgY2FsbGVlLCBlaXRoZXIgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEg
Q29kZUJsb2NrIG9yIGJlY2F1c2UgYXJpdHkgbWlzbWF0Y2gsCiAgICAgICAgICAgICAvLyBhc3N1
bWUgdGhhdCBpdCdzIGJldHRlciBmb3IgdGhpcyB3aG9sZSB0aGluZyB0byBiZSBhIHZpcnR1YWwg
Y2FsbC4KLSAgICAgICAgICAgIGlmICghY29kZUJsb2NrIHx8IGNhbGxlckFyZ3VtZW50Q291bnQg
PCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSB8fCBjYWxs
TGlua0luZm8uaXNWYXJhcmdzKCkpIHsKKyAgICAgICAgICAgIGlmICghY29kZUJsb2NrIHx8IGV4
ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNv
ZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSB8fCBjYWxsTGlua0luZm8uaXNWYXJhcmdzKCkpIHsK
ICAgICAgICAgICAgICAgICBsaW5rVmlydHVhbEZvcihleGVjLCBjYWxsTGlua0luZm8pOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTc3NiwxMCArNzc1LDcgQEAg
dm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogICAgIH0KICAgICAKICAgICBHUFJSZWcgY2FsbGVl
R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihjYWxsTGlua0luZm8uY2FsbGVlR1BSKCkpOwotCi0g
ICAgaWYgKGNhbGxMaW5rSW5mby5hcmd1bWVudHNJblJlZ2lzdGVycygpKQotICAgICAgICBBU1NF
UlQoY2FsbGVlR1BSID09IGFyZ3VtZW50UmVnaXN0ZXJGb3JDYWxsZWUoKSk7Ci0KKyAgICAKICAg
ICBDQ2FsbEhlbHBlcnMgc3R1YkppdCgmdm0sIGNhbGxlckNvZGVCbG9jayk7CiAgICAgCiAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKQEAgLTgwMSw4ICs3OTcsNiBAQCB2b2lk
IGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOwogICAgICAg
ICBpZiAoZnJhbWVTaHVmZmxlcikKICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBmcmFtZVNodWZm
bGVyLT5hY3F1aXJlR1BSKCk7Ci0gICAgICAgIGVsc2UgaWYgKGNhbGxMaW5rSW5mby5hcmd1bWVu
dHNJblJlZ2lzdGVycygpKQotICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEdQUkluZm86Om5vbkFy
Z0dQUjA7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhl
bHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoY2FsbGVlR1BSKTsKICAgICAgICAgLy8gVmVyaWZ5IHRo
YXQgd2UgaGF2ZSBhIGZ1bmN0aW9uIGFuZCBzdGFzaCB0aGUgZXhlY3V0YWJsZSBpbiBzY3JhdGNo
R1BSLgpAQCAtODY4LDIzICs4NjIsMTMgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogICAg
IEdQUlJlZyBmYXN0Q291bnRzQmFzZUdQUjsKICAgICBpZiAoZnJhbWVTaHVmZmxlcikKICAgICAg
ICAgZmFzdENvdW50c0Jhc2VHUFIgPSBmcmFtZVNodWZmbGVyLT5hY3F1aXJlR1BSKCk7Ci0gICAg
ZWxzZSBpZiAoY2FsbExpbmtJbmZvLmFyZ3VtZW50c0luUmVnaXN0ZXJzKCkpCi0jaWYgQ1BVKEFS
TTY0KQotICAgICAgICBmYXN0Q291bnRzQmFzZUdQUiA9IEdQUkluZm86Om5vbkFyZ0dQUjE7Ci0j
ZWxzZQotICAgICAgICBmYXN0Q291bnRzQmFzZUdQUiA9IEdQUkluZm86OnJlZ1QwOwotI2VuZGlm
CiAgICAgZWxzZSB7CiAgICAgICAgIGZhc3RDb3VudHNCYXNlR1BSID0KICAgICAgICAgICAgIEFz
c2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihjYWxsZWVHUFIsIGNvbXBhcmlzb25WYWx1
ZUdQUiwgR1BSSW5mbzo6cmVnVDMpOwogICAgIH0KLSAgICBpZiAoZmFzdENvdW50cykKLSAgICAg
ICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihmYXN0Q291bnRzLmdl
dCgpKSwgZmFzdENvdW50c0Jhc2VHUFIpOworICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoZmFzdENvdW50cy5nZXQoKSksIGZhc3RDb3VudHNCYXNlR1BSKTsKICAg
ICBpZiAoIWZyYW1lU2h1ZmZsZXIgJiYgY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkKICAgICAg
ICAgc3R1YkppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0KLSAgICBpbmNyZW1lbnRDb3Vu
dGVyKCZzdHViSml0LCBWTTo6UG9seW1vcnBoaWNDYWxsKTsKLQogICAgIEJpbmFyeVN3aXRjaCBi
aW5hcnlTd2l0Y2goY29tcGFyaXNvblZhbHVlR1BSLCBjYXNlVmFsdWVzLCBCaW5hcnlTd2l0Y2g6
OkludFB0cik7CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOwogICAgIHdoaWxlIChi
aW5hcnlTd2l0Y2guYWR2YW5jZShzdHViSml0KSkgewpAQCAtODkzLDMyICs4NzcsOCBAQCB2b2lk
IGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgICAgIENhbGxWYXJpYW50IHZhcmlhbnQgPSBjYWxs
Q2FzZXNbY2FzZUluZGV4XS52YXJpYW50KCk7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQodmFy
aWFudC5leGVjdXRhYmxlKCktPmhhc0pJVENvZGVGb3JDYWxsKCkpOwotCi0gICAgICAgIEVudHJ5
UG9pbnRUeXBlIGVudHJ5VHlwZSA9IFN0YWNrQXJnc0FyaXR5Q2hlY2tOb3RSZXF1aXJlZDsKLSNp
ZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTCi0gICAgICAgIGlmIChj
YWxsTGlua0luZm8uYXJndW1lbnRzSW5SZWdpc3RlcnMoKSkgewotICAgICAgICAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBjYWxsQ2FzZXNbY2FzZUluZGV4XS5jb2RlQmxvY2soKTsKLSAgICAg
ICAgICAgIGlmIChjb2RlQmxvY2spIHsKLSAgICAgICAgICAgICAgICBzaXplX3QgY2FsbGVlQXJn
dW1lbnRDb3VudCA9IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCkpOwotICAgICAgICAgICAgICAgIGlmIChjYWxsZWVBcmd1bWVudENvdW50ID09IGNhbGxlckFy
Z3VtZW50Q291bnQgfHwgY2FsbGVlQXJndW1lbnRDb3VudCA+PSBOVU1CRVJfT0ZfSlNfRlVOQ1RJ
T05fQVJHVU1FTlRfUkVHSVNURVJTKQotICAgICAgICAgICAgICAgICAgICBlbnRyeVR5cGUgPSBS
ZWdpc3RlckFyZ3NBcml0eUNoZWNrTm90UmVxdWlyZWQ7Ci0gICAgICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIEVudHJ5UG9pbnRUeXBlIGVudHJ5Rm9yQXJnQ291bnQgPSBK
SVRFbnRyeVBvaW50czo6cmVnaXN0ZXJFbnRyeVR5cGVGb3JBcmd1bWVudENvdW50KGNhbGxlckFy
Z3VtZW50Q291bnQpOwotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
Y29kZVB0ciA9Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50LmV4ZWN1dGFibGUoKS0+
Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoZW50cnlGb3JBcmdDb3Vu
dCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb2RlUHRyKQotICAgICAgICAgICAgICAgICAg
ICAgICAgZW50cnlUeXBlID0gZW50cnlGb3JBcmdDb3VudDsKLSAgICAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlUeXBlID0gUmVnaXN0ZXJBcmdzUG9z
c2libGVFeHRyYUFyZ3M7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgZW50cnlUeXBlID0gUmVnaXN0ZXJBcmdzUG9zc2libGVFeHRyYUFyZ3M7
Ci0gICAgICAgIH0KLSNlbmRpZgotCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2Rl
UHRyID0KLSAgICAgICAgICAgIHZhcmlhbnQuZXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2Rl
Rm9yQ2FsbCgpLT5hZGRyZXNzRm9yQ2FsbChlbnRyeVR5cGUpOwotICAgICAgICBBU1NFUlQoY29k
ZVB0cik7CisgICAgICAgICAgICB2YXJpYW50LmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29k
ZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja05vdFJlcXVpcmVkKTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChmYXN0Q291bnRzKSB7CiAgICAgICAgICAgICBzdHViSml0LmFkZDMy
KApAQCAtOTI2LDcgKzg4Niw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoZmFzdENvdW50c0Jhc2VHUFIsIGNhc2VJbmRl
eCAqIHNpemVvZih1aW50MzJfdCkpKTsKICAgICAgICAgfQogICAgICAgICBpZiAoZnJhbWVTaHVm
ZmxlcikgewotICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoc3R1YkppdCwgZnJhbWVTaHVm
Zmxlci0+c25hcHNob3QoY2FsbExpbmtJbmZvLmFyZ3VtZW50c0xvY2F0aW9uKCkpKS5wcmVwYXJl
Rm9yVGFpbENhbGwoKTsKKyAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKHN0dWJKaXQsIGZy
YW1lU2h1ZmZsZXItPnNuYXBzaG90KCkpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAg
ICAgY2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyVGFpbENhbGwoKTsKICAgICAg
ICAgfSBlbHNlIGlmIChjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7CiAgICAgICAgICAgICBz
dHViSml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKQEAgLTk0NywxOSArOTA3LDE5IEBAIHZv
aWQgbGlua1BvbHltb3JwaGljQ2FsbCgKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBm
cmFtZVNodWZmbGVyLT5zZXRDYWxsZWVKU1ZhbHVlUmVncyhKU1ZhbHVlUmVncyhHUFJJbmZvOjpy
ZWdUMSwgR1BSSW5mbzo6cmVnVDApKTsKICNlbHNlCi0gICAgICAgIGlmIChjYWxsTGlua0luZm8u
YXJndW1lbnRzTG9jYXRpb24oKSA9PSBTdGFja0FyZ3MpCi0gICAgICAgICAgICBmcmFtZVNodWZm
bGVyLT5zZXRDYWxsZWVKU1ZhbHVlUmVncyhKU1ZhbHVlUmVncyhhcmd1bWVudFJlZ2lzdGVyRm9y
Q2FsbGVlKCkpKTsKKyAgICAgICAgZnJhbWVTaHVmZmxlci0+c2V0Q2FsbGVlSlNWYWx1ZVJlZ3Mo
SlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDApKTsKICNlbmRpZgogICAgICAgICBmcmFtZVNodWZm
bGVyLT5wcmVwYXJlRm9yU2xvd1BhdGgoKTsKICAgICB9IGVsc2UgeworICAgICAgICBzdHViSml0
Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkK
ICAgICAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpLCBHUFJJbmZvOjpyZWdUMSk7CiAjZW5kaWYKICAgICB9Ci0gICAgc3R1YkppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8uY2FsbFJldHVybkxv
Y2F0aW9uKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86Om5vbkFyZ0dQUjEpOwotICAg
IHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6bm9uQXJn
R1BSMSk7Ci0KLSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZj
YWxsTGlua0luZm8pLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBzdHViSml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7
CisgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0lu
Zm8uY2FsbFJldHVybkxvY2F0aW9uKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJl
Z1Q0KTsKKyAgICAKKyAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJu
KEdQUkluZm86OnJlZ1Q0KTsKICAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJK
aXQuanVtcCgpOwogICAgICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHZtLCBzdHVi
Sml0LCBvd25lciwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKQEAgLTk4MCw3ICs5NDAsNyBAQCB2
b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwg
Y2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLmxhYmVsQXRPZmZzZXQoMCkpOwogICAg
IGVsc2UKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uaG90UGF0
aE90aGVyKCkubGFiZWxBdE9mZnNldCgwKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBD
b2RlTG9jYXRpb25MYWJlbCh2bS5nZXRKSVRDYWxsVGh1bmtFbnRyeVN0dWIobGlua1BvbHltb3Jw
aGljQ2FsbFRodW5rR2VuZXJhdG9yKS5lbnRyeUZvcihjYWxsTGlua0luZm8uYXJndW1lbnRzTG9j
YXRpb24oKSkpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVs
KHZtLmdldENUSVN0dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkp
KTsKICAgICAKICAgICBhdXRvIHN0dWJSb3V0aW5lID0gYWRvcHRSZWYoKm5ldyBQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZSgKICAgICAgICAgRklOQUxJWkVfQ09ERV9GT1IoCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCmluZGV4IDQ5ZjAwNzdj
MzA1MThhMTI5MjYwNjJkNTllZGRmYjYwNGZlZmJiYmQuLjA1ZjQxZjRkYzkyNzUzMmE4ZGMyNTIz
NWZjNWEzNjQ3OGE0ZWFjYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
U3BlY2lhbGl6ZWRUaHVua0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3Bl
Y2lhbGl6ZWRUaHVua0pJVC5oCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgRU5BQkxFKEpJVCkKIAog
I2luY2x1ZGUgIkpJVC5oIgotI2luY2x1ZGUgIkpJVEVudHJ5UG9pbnRzLmgiCiAjaW5jbHVkZSAi
SklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiTGlu
a0J1ZmZlci5oIgpAQCAtMzgsNDMgKzM3LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNz
IFNwZWNpYWxpemVkVGh1bmtKSVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewogICAgIHB1Ymxp
YzoKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBUaGlzQXJndW1lbnQgPSAtMTsKLSAgICAgICAg
ZW51bSBBcmdMb2NhdGlvbiB7IE9uU3RhY2ssIEluUmVnaXN0ZXJzIH07Ci0KLSAgICAgICAgU3Bl
Y2lhbGl6ZWRUaHVua0pJVChWTSogdm0sIGludCBleHBlY3RlZEFyZ0NvdW50LCBBc3NlbWJseUhl
bHBlcnM6OlNwaWxsUmVnaXN0ZXJUeXBlIHNwaWxsVHlwZSA9IEFzc2VtYmx5SGVscGVyczo6U3Bp
bGxFeGFjdGx5LCBBcmdMb2NhdGlvbiBhcmdMb2NhdGlvbiA9IE9uU3RhY2spCisgICAgICAgIFNw
ZWNpYWxpemVkVGh1bmtKSVQoVk0qIHZtLCBpbnQgZXhwZWN0ZWRBcmdDb3VudCkKICAgICAgICAg
ICAgIDogSlNJbnRlcmZhY2VKSVQodm0pCiAgICAgICAgIHsKLSNpZiAhTlVNQkVSX09GX0pTX0ZV
TkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUwotICAgICAgICAgICAgVU5VU0VEX1BBUkFNKHNwaWxs
VHlwZSk7Ci0gICAgICAgICAgICBVTlVTRURfUEFSQU0oYXJnTG9jYXRpb24pOwotI2Vsc2UKLSAg
ICAgICAgICAgIGlmIChhcmdMb2NhdGlvbiA9PSBJblJlZ2lzdGVycykgewotICAgICAgICAgICAg
ICAgIG1fc3RhY2tBcmd1bWVudHNFbnRyeSA9IGxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgZmls
bEFyZ3VtZW50UmVnaXN0ZXJzRnJvbUZyYW1lQmVmb3JlUHJvbG9ndWUoKTsKLSAgICAgICAgICAg
ICAgICBtX3JlZ2lzdGVyQXJndW1lbnRzRW50cnkgPSBsYWJlbCgpOwotICAgICAgICAgICAgICAg
IGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgICAgICAgICAgICAgZW1pdFNhdmVUaGVuTWF0
ZXJpYWxpemVUYWdSZWdpc3RlcnMoKTsKLSAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdl
IGhhdmUgdGhlIGV4cGVjdGVkIG51bWJlciBvZiBhcmd1bWVudHMKLSAgICAgICAgICAgICAgICBt
X2ZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgYXJndW1lbnRSZWdpc3RlckZvckFy
Z3VtZW50Q291bnQoKSwgVHJ1c3RlZEltbTMyKGV4cGVjdGVkQXJnQ291bnQgKyAxKSkpOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzcGlsbEFyZ3VtZW50UmVnaXN0ZXJz
VG9GcmFtZUJlZm9yZVByb2xvZ3VlKGV4cGVjdGVkQXJnQ291bnQgKyAxLCBzcGlsbFR5cGUpOwot
ICAgICAgICAgICAgICAgIG1fc3RhY2tBcmd1bWVudHNFbnRyeSA9IGxhYmVsKCk7Ci0jZW5kaWYK
LSAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotICAgICAgICAgICAgICAg
IGVtaXRTYXZlVGhlbk1hdGVyaWFsaXplVGFnUmVnaXN0ZXJzKCk7Ci0gICAgICAgICAgICAgICAg
Ly8gQ2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgYXJndW1lbnRzCi0g
ICAgICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIHBheWxv
YWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIFRydXN0ZWRJbW0zMihleHBlY3Rl
ZEFyZ0NvdW50ICsgMSkpKTsKLSNpZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVH
SVNURVJTCi0gICAgICAgICAgICAgICAgfQotI2VuZGlmCisgICAgICAgICAgICBlbWl0RnVuY3Rp
b25Qcm9sb2d1ZSgpOworICAgICAgICAgICAgZW1pdFNhdmVUaGVuTWF0ZXJpYWxpemVUYWdSZWdp
c3RlcnMoKTsKKyAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgaGF2ZSB0aGUgZXhwZWN0ZWQg
bnVtYmVyIG9mIGFyZ3VtZW50cworICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoYnJhbmNo
MzIoTm90RXF1YWwsIHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIFRy
dXN0ZWRJbW0zMihleHBlY3RlZEFyZ0NvdW50ICsgMSkpKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgZXhwbGljaXQgU3BlY2lhbGl6ZWRUaHVua0pJVChWTSogdm0pCiAgICAgICAgICAg
ICA6IEpTSW50ZXJmYWNlSklUKHZtKQogICAgICAgICB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgICAgIHNwaWxsQXJndW1lbnRSZWdpc3RlcnNUb0ZyYW1lQmVmb3JlUHJvbG9ndWUoKTsK
LSAgICAgICAgICAgIG1fc3RhY2tBcmd1bWVudHNFbnRyeSA9IExhYmVsKCk7Ci0jZW5kaWYKICAg
ICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAgICAgICAgICAgICBlbWl0U2F2ZVRo
ZW5NYXRlcmlhbGl6ZVRhZ1JlZ2lzdGVycygpOwogICAgICAgICB9CkBAIC0xMjAsMjYgKzk0LDEx
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbG9hZEludDMyQXJndW1lbnQoYXJndW1l
bnQsIGRzdCwgY29udmVyc2lvbkZhaWxlZCk7CiAgICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVu
ZChjb252ZXJzaW9uRmFpbGVkKTsKICAgICAgICAgfQotCi0gICAgICAgIHZvaWQgY2hlY2tKU1N0
cmluZ0FyZ3VtZW50KFZNJiB2bSwgUmVnaXN0ZXJJRCBhcmd1bWVudCkKLSAgICAgICAgewotICAg
ICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoZW1pdEp1bXBJZk5vdEpTQ2VsbChhcmd1bWVudCkp
OwotICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoYnJhbmNoU3RydWN0dXJlKE5vdEVxdWFs
LAotICAgICAgICAgICAgICAgIEFkZHJlc3MoYXJndW1lbnQsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKSk7Ci0g
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgYXBwZW5kRmFpbHVyZShjb25zdCBKdW1w
JiBmYWlsdXJlKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChmYWls
dXJlKTsKICAgICAgICAgfQotCi0gICAgICAgIHZvaWQgbGlua0ZhaWx1cmVIZXJlKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgbV9mYWlsdXJlcy5saW5rKHRoaXMpOwotICAgICAgICAgICAgbV9m
YWlsdXJlcy5jbGVhcigpOwotICAgICAgICB9Ci0KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAg
ICB2b2lkIHJldHVybkpTVmFsdWUoUmVnaXN0ZXJJRCBzcmMpCiAgICAgICAgIHsKQEAgLTIwNSwy
OSArMTY0LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0KCk7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIEpJVEVudHJ5UG9pbnRzV2l0aFJlZiBmaW5hbGl6ZShNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgZmFsbGJhY2ssIGNvbnN0IGNoYXIqIHRodW5rS2luZCkKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZpbmFsaXplKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBm
YWxsYmFjaywgY29uc3QgY2hhciogdGh1bmtLaW5kKQogICAgICAgICB7CiAgICAgICAgICAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCAqdGhpcywgR0xPQkFMX1RIVU5LX0lEKTsKICAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9mYWlsdXJlcywgQ29kZUxvY2F0aW9uTGFiZWwo
ZmFsbGJhY2spKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhbGxz
LnNpemUoKTsgaSsrKQogICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1tp
XS5maXJzdCwgbV9jYWxsc1tpXS5zZWNvbmQpOwotCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgc3RhY2tFbnRyeTsKLSAgICAgICAgICAgIGlmIChtX3N0YWNrQXJndW1lbnRzRW50
cnkuaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBzdGFja0VudHJ5ID0gcGF0Y2hCdWZmZXIubG9j
YXRpb25PZihtX3N0YWNrQXJndW1lbnRzRW50cnkpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIHJlZ2lzdGVyRW50cnk7Ci0gICAgICAgICAgICBpZiAobV9yZWdpc3RlckFyZ3Vt
ZW50c0VudHJ5LmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgcmVnaXN0ZXJFbnRyeSA9IHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2YobV9yZWdpc3RlckFyZ3VtZW50c0VudHJ5KTsKLQotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGVudHJ5ID0gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgKCJTcGVjaWFsaXplZCB0aHVuayBmb3IgJXMiLCB0aHVua0tpbmQpKTsKLQotICAgICAgICAg
ICAgaWYgKG1fc3RhY2tBcmd1bWVudHNFbnRyeS5pc1NldCgpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fcmVnaXN0ZXJBcmd1bWVudHNFbnRyeS5pc1NldCgpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gSklURW50cnlQb2ludHNXaXRoUmVmKGVudHJ5LCByZWdpc3RlckVudHJ5LCByZWdp
c3RlckVudHJ5LCByZWdpc3RlckVudHJ5LCBzdGFja0VudHJ5LCBzdGFja0VudHJ5KTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gSklURW50cnlQb2ludHNXaXRoUmVmKGVudHJ5LCBlbnRyeS5jb2Rl
KCksIGVudHJ5LmNvZGUoKSwgZW50cnkuY29kZSgpLCBzdGFja0VudHJ5LCBzdGFja0VudHJ5KTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIEpJVEVudHJ5UG9pbnRzV2l0aFJl
ZihlbnRyeSwgZW50cnkuY29kZSgpLCBlbnRyeS5jb2RlKCkpOworICAgICAgICAgICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiU3BlY2lhbGl6ZWQgdGh1bmsgZm9yICVzIiwg
dGh1bmtLaW5kKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBBc3N1bWVzIHRoYXQgdGhlIHRh
cmdldCBmdW5jdGlvbiB1c2VzIGZwUmVnaXN0ZXIwIGFzIHRoZSBmaXJzdCBhcmd1bWVudApAQCAt
MjY0LDggKzIwNyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbV9mYWlsdXJlczsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIG1fcmVnaXN0ZXJBcmd1bWVudHNFbnRyeTsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIG1fc3RhY2tBcmd1bWVudHNFbnRyeTsKICAgICAgICAgVmVjdG9yPHN0
ZDo6cGFpcjxDYWxsLCBGdW5jdGlvblB0cj4+IG1fY2FsbHM7CiAgICAgfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvci5oCmluZGV4IGJjNjllZDBmMWYwMWVlZmU1
MjJhOWZjYTg3YWQ2OTU1ZGMwNmE1ZjguLmQzOGVjMjMzNGIyM2UyMmU1ZGQ1OTA3ZWI5MjA5MGM0
ZWU2ZGI5NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9yLmgK
QEAgLTMwLDEyICszMCw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIFZNOwogY2xhc3MgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmOwotY2xhc3MgSklURW50cnlQb2ludHNXaXRoUmVmOwotY2xhc3Mg
SklUSlNDYWxsVGh1bmtFbnRyeVBvaW50c1dpdGhSZWY7CiAKIHR5cGVkZWYgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmICgqVGh1bmtHZW5lcmF0b3IpKFZNKik7Ci10eXBlZGVmIEpJVEVudHJ5UG9pbnRz
V2l0aFJlZiAoKkpJVEVudHJ5R2VuZXJhdG9yKShWTSopOwotdHlwZWRlZiBKSVRKU0NhbGxUaHVu
a0VudHJ5UG9pbnRzV2l0aFJlZiAoKkpJVENhbGxUaHVua0VudHJ5R2VuZXJhdG9yKShWTSopOwog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVu
a0dlbmVyYXRvcnMuY3BwCmluZGV4IGZjNzNmYmYwZjBiOTVlZmVlYThkN2FhZmU4NWYxOWJjMTBm
ZDJjNzkuLjdhMTFlYTY5NWFiNTZmNGEzMTFhMmI1ZTcwM2U1YzczMzIwMTE0MmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKQEAgLTc3LDIzICs3
Nyw2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1Bh
dGhHZW5lcmF0b3IoVk0qIHZtKQogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCAoIlRocm93IGV4Y2VwdGlvbiBmcm9tIGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOwogfQogCi1z
dGF0aWMgdm9pZCBjcmVhdGVSZWdpc3RlckFyZ3VtZW50c1NwaWxsRW50cnkoQ0NhbGxIZWxwZXJz
JiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBlbnRyeVBvaW50c1tUaHVua0VudHJ5UG9pbnRU
eXBlQ291bnRdKQotewotI2lmIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RF
UlMKLSAgICBmb3IgKHVuc2lnbmVkIGFyZ0luZGV4ID0gTlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FS
R1VNRU5UX1JFR0lTVEVSUzsgYXJnSW5kZXgtLSA+IDA7KSB7Ci0gICAgICAgIGVudHJ5UG9pbnRz
W3RodW5rRW50cnlQb2ludFR5cGVGb3IoYXJnSW5kZXggKyAxKV0gPSBqaXQubGFiZWwoKTsKLSAg
ICAgICAgaml0LmVtaXRQdXRBcmd1bWVudFRvQ2FsbEZyYW1lQmVmb3JlUHJvbG9ndWUoYXJndW1l
bnRSZWdpc3RlckZvckZ1bmN0aW9uQXJndW1lbnQoYXJnSW5kZXgpLCBhcmdJbmRleCk7Ci0gICAg
fQotCi0gICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKGFyZ3Vt
ZW50UmVnaXN0ZXJGb3JDYWxsZWUoKSwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKLSAgICBqaXQu
ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUoYXJndW1lbnRSZWdpc3RlckZv
ckFyZ3VtZW50Q291bnQoKSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCk7Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShqaXQpOwotICAgIFVOVVNFRF9QQVJBTShlbnRyeVBvaW50cyk7Ci0j
ZW5kaWYKLSAgICBlbnRyeVBvaW50c1tTdGFja0FyZ3NdID0gaml0LmxhYmVsKCk7Ci19Ci0KIHN0
YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAogICAgIENDYWxsSGVscGVycyYgaml0LCBWTSogdm0sIFNw
cnRfSklUT3BlcmF0aW9uX0VDbGkgc2xvd1BhdGhGdW5jdGlvbikKIHsKQEAgLTEwNSw3ICs4OCw3
IEBAIHN0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAogICAgIC8vIE1vdmluZyB0aGUgc3RhY2sgZG93
biBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCBieXRlcyBnaXZlcyB1cyByb29tIGZvciBv
dXIgMyBhcmd1bWVudHMKICAgICAvLyBhbmQgc3BhY2UgZm9yIHRoZSAxNiBieXRlIHJldHVybiBh
cmVhLgogICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLW1heEZyYW1l
RXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7Ci0gICAgaml0Lm1vdmUoR1BSSW5mbzo6bm9uQXJnR1BSMCwgR1BSSW5mbzo6YXJndW1lbnRH
UFIyKTsKKyAgICBqaXQubW92ZShHUFJJbmZvOjpyZWdUMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIy
KTsKICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDMyKSwgQ0NhbGxI
ZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAg
ICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRH
UFIxKTsKICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9j
YXN0PHZvaWQqPihzbG93UGF0aEZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwpAQCAt
MTE3LDcgKzEwMCw3IEBAIHN0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAogI2Vsc2UKICAgICBpZiAo
bWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoLW1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgQ0Nh
bGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgaml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OnJlZ1QyKTsKICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihzbG93UGF0aEZ1bmN0aW9uKSks
IEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQ
UkluZm86Om5vbkFyZ0dQUjApOwogICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOwpA
QCAtMTQ0LDcgKzEyNyw3IEBAIHN0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAogICAgIGppdC5qdW1w
KEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKIH0KIAotSklUSlNDYWxsVGh1bmtFbnRyeVBvaW50
c1dpdGhSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgLy8gVGhlIHJldHVy
biBhZGRyZXNzIGlzIG9uIHRoZSBzdGFjayBvciBpbiB0aGUgbGluayByZWdpc3Rlci4gV2Ugd2ls
bCBoZW5jZQogICAgIC8vIHNhdmUgdGhlIHJldHVybiBhZGRyZXNzIHRvIHRoZSBjYWxsIGZyYW1l
IHdoaWxlIHdlIG1ha2UgYSBDKysgZnVuY3Rpb24gY2FsbApAQCAtMTUyLDE1MyArMTM1LDQ1IEBA
IEpJVEpTQ2FsbFRodW5rRW50cnlQb2ludHNXaXRoUmVmIGxpbmtDYWxsVGh1bmtHZW5lcmF0b3Io
Vk0qIHZtKQogICAgIC8vIHRvIGJlIGluIHJlZ1QwL3JlZ1QxIChwYXlsb2FkL3RhZyksIHRoZSBD
YWxsRnJhbWUgdG8gaGF2ZSBhbHJlYWR5CiAgICAgLy8gYmVlbiBhZGp1c3RlZCwgYW5kIGFsbCBv
dGhlciByZWdpc3RlcnMgdG8gYmUgYXZhaWxhYmxlIGZvciB1c2UuCiAgICAgQ0NhbGxIZWxwZXJz
IGppdCh2bSk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZW50cnlQb2ludHNbVGh1bmtF
bnRyeVBvaW50VHlwZUNvdW50XTsKLQotICAgIGNyZWF0ZVJlZ2lzdGVyQXJndW1lbnRzU3BpbGxF
bnRyeShqaXQsIGVudHJ5UG9pbnRzKTsKLSAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRp
b25MaW5rQ2FsbCk7Ci0gICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiBGSU5B
TElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkxpbmsgY2FsbCBzbG93IHBhdGggdGh1bmsiKSk7Ci0g
ICAgSklUSlNDYWxsVGh1bmtFbnRyeVBvaW50c1dpdGhSZWYgY2FsbEVudHJ5UG9pbnRzID0gSklU
SlNDYWxsVGh1bmtFbnRyeVBvaW50c1dpdGhSZWYoY29kZVJlZik7Ci0KLSAgICBmb3IgKHVuc2ln
bmVkIGVudHJ5SW5kZXggPSBTdGFja0FyZ3M7IGVudHJ5SW5kZXggPCAgVGh1bmtFbnRyeVBvaW50
VHlwZUNvdW50OyBlbnRyeUluZGV4KyspIHsKLSAgICAgICAgY2FsbEVudHJ5UG9pbnRzLnNldEVu
dHJ5Rm9yKHN0YXRpY19jYXN0PFRodW5rRW50cnlQb2ludFR5cGU+KGVudHJ5SW5kZXgpLAotICAg
ICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZihlbnRyeVBvaW50c1tlbnRyeUluZGV4XSkp
OwotICAgIH0KLQotICAgIHJldHVybiBjYWxsRW50cnlQb2ludHM7Ci19Ci0KLUpJVEpTQ2FsbFRo
dW5rRW50cnlQb2ludHNXaXRoUmVmIGxpbmtEaXJlY3RDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZt
KQotewotICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBvbiB0aGUgc3RhY2sgb3IgaW4gdGhl
IGxpbmsgcmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKLSAgICAvLyBzYXZlIHRoZSByZXR1cm4gYWRk
cmVzcyB0byB0aGUgY2FsbCBmcmFtZSB3aGlsZSB3ZSBtYWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwK
LSAgICAvLyB0byBwZXJmb3JtIGxpbmtpbmcgYW5kIGxhenkgY29tcGlsYXRpb24gaWYgbmVjZXNz
YXJ5LiBXZSBleHBlY3QgdGhlIENhbGxMaW5rSW5mbwotICAgIC8vIHRvIGJlIGluIEdQUkluZm86
Om5vbkFyZ0dQUjAsIHRoZSBjYWxsZWUgdG8gYmUgaW4gYXJndW1lbnRSZWdpc3RlckZvckNhbGxl
ZSgpLAotICAgIC8vIHRoZSBDYWxsRnJhbWUgdG8gaGF2ZSBhbHJlYWR5IGJlZW4gYWRqdXN0ZWQs
IGFuZCBhcmd1bWVudHMgaW4gYXJndW1lbnQgcmVnaXN0ZXJzCi0gICAgLy8gYW5kL29yIGluIHRo
ZSBzdGFjayBhcyBhcHByb3ByaWF0ZS4KLSAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKLSAgICAK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZW50cnlQb2ludHNbVGh1bmtFbnRyeVBvaW50VHlw
ZUNvdW50XTsKLQotICAgIGNyZWF0ZVJlZ2lzdGVyQXJndW1lbnRzU3BpbGxFbnRyeShqaXQsIGVu
dHJ5UG9pbnRzKTsKLQotICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBH
UFJJbmZvOjpub25BcmdHUFIxKTsgLy8gU2F2ZSBjYWxsZWUncyBmcmFtZSBwb2ludGVyCi0gICAg
aml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7Ci0KLSAgICBpZiAobWF4RnJhbWVF
eHRlbnRGb3JTbG93UGF0aENhbGwpCi0gICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoLW1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgQ0NhbGxIZWxwZXJz
OjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgaml0LnNldHVwQXJndW1lbnRzKEdQUkluZm86
Om5vbkFyZ0dQUjEsIEdQUkluZm86Om5vbkFyZ0dQUjAsIGFyZ3VtZW50UmVnaXN0ZXJGb3JDYWxs
ZWUoKSk7Ci0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2Vf
Y2FzdDx2b2lkKj4ob3BlcmF0aW9uTGlua0RpcmVjdENhbGwpKSwgR1BSSW5mbzo6bm9uQXJnR1BS
MCk7Ci0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7
Ci0gICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgaWYgKG1heEZyYW1lRXh0
ZW50Rm9yU2xvd1BhdGhDYWxsKQotICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgQ0NhbGxIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgCi0gICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3Vl
KCk7Ci0KLSNpZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTCi0gICAg
aml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUoQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlLCBhcmd1bWVudFJlZ2lzdGVyRm9yQ2FsbGVlKCkpOwotICAgIEdQUlJlZyBhcmdD
b3VudFJlZyA9IGFyZ3VtZW50UmVnaXN0ZXJGb3JBcmd1bWVudENvdW50KCk7Ci0gICAgaml0LmVt
aXRHZXRQYXlsb2FkRnJvbUNhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQsIGFyZ0NvdW50UmVnKTsKLQotICAgIC8vIGxvYWQgInRoaXMiCi0g
ICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lQXJndW1lbnRCZWZvcmVQcm9sb2d1ZSgwLCBhcmd1
bWVudFJlZ2lzdGVyRm9yRnVuY3Rpb25Bcmd1bWVudCgwKSk7Ci0KLSAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgZmlsbFVuZGVmaW5lZFtOVU1CRVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNU
RVJTXTsKKyAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5rQ2FsbCk7CiAgICAg
Ci0gICAgZm9yICh1bnNpZ25lZCBhcmdJbmRleCA9IDE7IGFyZ0luZGV4IDwgTlVNQkVSX09GX0pT
X0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUzsgYXJnSW5kZXgrKykgewotICAgICAgICBmaWxs
VW5kZWZpbmVkW2FyZ0luZGV4XSA9IGppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dP
ckVxdWFsLCBhcmdDb3VudFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihhcmdJbmRl
eCkpOwotICAgICAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVBcmd1bWVudEJlZm9yZVByb2xv
Z3VlKGFyZ0luZGV4LCBhcmd1bWVudFJlZ2lzdGVyRm9yRnVuY3Rpb25Bcmd1bWVudChhcmdJbmRl
eCkpOwotICAgIH0KLQotICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lRmlsbGluZyA9IGppdC5q
dW1wKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGFyZ0luZGV4ID0gMTsgYXJnSW5kZXggPCBOVU1C
RVJfT0ZfSlNfRlVOQ1RJT05fQVJHVU1FTlRfUkVHSVNURVJTOyBhcmdJbmRleCsrKSB7Ci0gICAg
ICAgIGZpbGxVbmRlZmluZWRbYXJnSW5kZXhdLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KSksIGFyZ3VtZW50UmVnaXN0ZXJGb3JGdW5jdGlvbkFyZ3VtZW50KGFyZ0luZGV4KSk7Ci0gICAg
fQotCi0gICAgZG9uZUZpbGxpbmcubGluaygmaml0KTsKLSNlbmRpZgotCi0KLSAgICBqaXQucmV0
KCk7Ci0KICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktf
SUQpOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmIEZJTkFMSVpFX0NPREUocGF0
Y2hCdWZmZXIsICgiTGluayBkaXJlY3QgY2FsbCB0aHVuayIpKTsKLSAgICBKSVRKU0NhbGxUaHVu
a0VudHJ5UG9pbnRzV2l0aFJlZiBjYWxsRW50cnlQb2ludHMgPSBKSVRKU0NhbGxUaHVua0VudHJ5
UG9pbnRzV2l0aFJlZihjb2RlUmVmKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGVudHJ5SW5k
ZXggPSBTdGFja0FyZ3M7IGVudHJ5SW5kZXggPCAgVGh1bmtFbnRyeVBvaW50VHlwZUNvdW50OyBl
bnRyeUluZGV4KyspIHsKLSAgICAgICAgY2FsbEVudHJ5UG9pbnRzLnNldEVudHJ5Rm9yKHN0YXRp
Y19jYXN0PFRodW5rRW50cnlQb2ludFR5cGU+KGVudHJ5SW5kZXgpLAotICAgICAgICAgICAgcGF0
Y2hCdWZmZXIubG9jYXRpb25PZihlbnRyeVBvaW50c1tlbnRyeUluZGV4XSkpOwotICAgIH0KLSAg
ICAKLSAgICByZXR1cm4gY2FsbEVudHJ5UG9pbnRzOworICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCAoIkxpbmsgY2FsbCBzbG93IHBhdGggdGh1bmsiKSk7CiB9CiAKIC8vIEZv
ciBjbG9zdXJlIG9wdGltaXphdGlvbnMsIHdlIG9ubHkgaW5jbHVkZSBjYWxscywgc2luY2UgaWYg
eW91J3JlIHVzaW5nIGNsb3N1cmVzIGZvcgogLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiB0aGVuIHlv
dSdyZSBnb2luZyB0byBsb3NlIGJpZyB0aW1lIGFueXdheS4KLUpJVEpTQ2FsbFRodW5rRW50cnlQ
b2ludHNXaXRoUmVmIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKFZN
KiB2bSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKICAgICAKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgZW50cnlQb2ludHNbVGh1bmtFbnRyeVBvaW50VHlwZUNvdW50XTsKLQotICAg
IGNyZWF0ZVJlZ2lzdGVyQXJndW1lbnRzU3BpbGxFbnRyeShqaXQsIGVudHJ5UG9pbnRzKTsKLQog
ICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtQb2x5bW9ycGhpY0NhbGwpOwog
ICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19J
RCk7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYgRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgKCJMaW5rIHBvbHltb3JwaGljIGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOwotICAg
IEpJVEpTQ2FsbFRodW5rRW50cnlQb2ludHNXaXRoUmVmIGNhbGxFbnRyeVBvaW50cyA9IEpJVEpT
Q2FsbFRodW5rRW50cnlQb2ludHNXaXRoUmVmKGNvZGVSZWYpOwotICAgIAotICAgIGZvciAodW5z
aWduZWQgZW50cnlJbmRleCA9IFN0YWNrQXJnczsgZW50cnlJbmRleCA8ICBUaHVua0VudHJ5UG9p
bnRUeXBlQ291bnQ7IGVudHJ5SW5kZXgrKykgewotICAgICAgICBjYWxsRW50cnlQb2ludHMuc2V0
RW50cnlGb3Ioc3RhdGljX2Nhc3Q8VGh1bmtFbnRyeVBvaW50VHlwZT4oZW50cnlJbmRleCksCi0g
ICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGVudHJ5UG9pbnRzW2VudHJ5SW5kZXhd
KSk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBjYWxsRW50cnlQb2ludHM7CisgICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiTGluayBwb2x5bW9ycGhpYyBjYWxsIHNsb3cg
cGF0aCB0aHVuayIpKTsKIH0KIAogLy8gRklYTUU6IFdlIHNob3VsZCBkaXN0aW5ndWlzaCBiZXR3
ZWVuIGEgbWVnYW1vcnBoaWMgdmlydHVhbCBjYWxsIHZzLiBhIHNsb3cKIC8vIHBhdGggdmlydHVh
bCBjYWxsIHNvIHRoYXQgd2UgY2FuIGVuYWJsZSBmYXN0IHRhaWwgY2FsbHMgZm9yIG1lZ2Ftb3Jw
aGljCiAvLyB2aXJ0dWFsIGNhbGxzIGJ5IHVzaW5nIHRoZSBzaHVmZmxlci4KIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg4MzEKLUpJVEpTQ2FsbFRodW5rRW50
cnlQb2ludHNXaXRoUmVmIHZpcnR1YWxUaHVua0ZvcihWTSogdm0sIENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxUaHVua0ZvcihWTSogdm0s
IENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewotICAgIC8vIFRoZSBjYWxsZWUgaXMgaW4g
YXJndW1lbnRSZWdpc3RlckZvckNhbGxlZSgpIChmb3IgSlNWQUxVRTMyXzY0LCBpdCBpcyBpbiBy
ZWdUMTpyZWdUMCkuCi0gICAgLy8gVGhlIENhbGxMaW5rSW5mbyBpcyBpbiBHUFJJbmZvOjpub25B
cmdHUFIwLgotICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBvbiB0aGUgc3RhY2ssIG9yIGlu
IHRoZSBsaW5rIHJlZ2lzdGVyLgotICAgIC8vLyBXZSB3aWxsIGhlbmNlIGp1bXAgdG8gdGhlIGNh
bGxlZSwgb3Igc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGwKLSAgICAvLyBmcmFt
ZSB3aGlsZSB3ZSBtYWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwgdG8gdGhlIGFwcHJvcHJpYXRlIEpJ
VCBvcGVyYXRpb24uCisgICAgLy8gVGhlIGNhbGxlZSBpcyBpbiByZWdUMCAoZm9yIEpTVkFMVUUz
Ml82NCwgdGhlIHRhZyBpcyBpbiByZWdUMSkuCisgICAgLy8gVGhlIHJldHVybiBhZGRyZXNzIGlz
IG9uIHRoZSBzdGFjaywgb3IgaW4gdGhlIGxpbmsgcmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKKyAg
ICAvLyBqdW1wIHRvIHRoZSBjYWxsZWUsIG9yIHNhdmUgdGhlIHJldHVybiBhZGRyZXNzIHRvIHRo
ZSBjYWxsIGZyYW1lIHdoaWxlIHdlCisgICAgLy8gbWFrZSBhIEMrKyBmdW5jdGlvbiBjYWxsIHRv
IHRoZSBhcHByb3ByaWF0ZSBKSVQgb3BlcmF0aW9uLgogCiAgICAgQ0NhbGxIZWxwZXJzIGppdCh2
bSk7CiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZTsKLQotICAgIEdQ
UlJlZyBjYWxsZWVSZWcgPSBhcmd1bWVudFJlZ2lzdGVyRm9yQ2FsbGVlKCk7Ci0jaWYgVVNFKEpT
VkFMVUUzMl82NCkKLSAgICBHUFJSZWcgY2FsbGVlVGFnUmVnID0gR1BSSW5mbzo6cmVnVDE7Ci0j
ZW5kaWYKLSAgICBHUFJSZWcgdGFyZ2V0UmVnID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKLSAgICAv
LyBUaGlzIGlzIHRoZSBDYWxsTGlua0luZm8qIG9uIGVudHJ5IGFuZCB1c2VkIGxhdGVyIGFzIGEg
dGVtcC4KLSAgICBHUFJSZWcgY2FsbExpbmtJbmZvQW5kVGVtcFJlZyA9IEdQUkluZm86Om5vbkFy
Z0dQUjA7Ci0KLSAgICBqaXQuZmlsbEFyZ3VtZW50UmVnaXN0ZXJzRnJvbUZyYW1lQmVmb3JlUHJv
bG9ndWUoKTsKLQotI2lmIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJU1RFUlMK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgcmVnaXN0ZXJFbnRyeSA9IGppdC5sYWJlbCgpOwot
I2VuZGlmCi0KLSAgICBpbmNyZW1lbnRDb3VudGVyKCZqaXQsIFZNOjpWaXJ0dWFsQ2FsbCk7Ci0K
LSAgICAvLyBUaGlzIGlzIGEgc2xvdyBwYXRoIGV4ZWN1dGlvbi4gQ291bnQgdGhlIHNsb3cgcGF0
aCBleGVjdXRpb24gZm9yIHRoZSBwcm9maWxlci4KKyAgICAKKyAgICAvLyBUaGlzIGlzIGEgc2xv
dyBwYXRoIGV4ZWN1dGlvbiwgYW5kIHJlZ1QyIGNvbnRhaW5zIHRoZSBDYWxsTGlua0luZm8uIENv
dW50IHRoZQorICAgIC8vIHNsb3cgcGF0aCBleGVjdXRpb24gZm9yIHRoZSBwcm9maWxlci4KICAg
ICBqaXQuYWRkMzIoCiAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLAotICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJbmZvQW5kVGVtcFJlZywgQ2FsbExp
bmtJbmZvOjpvZmZzZXRPZlNsb3dQYXRoQ291bnQoKSkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZTbG93UGF0aENv
dW50KCkpKTsKIAogICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgaGF2ZSBhIHN0b3J5IGZvciBlbGlt
aW5hdGluZyB0aGVzZSBjaGVja3MuIEluIG1hbnkgY2FzZXMsCiAgICAgLy8gdGhlIERGRyBrbm93
cyB0aGF0IHRoZSB2YWx1ZSBpcyBkZWZpbml0ZWx5IGEgY2VsbCwgb3IgZGVmaW5pdGVseSBhIGZ1
bmN0aW9uLgpAQCAtMzA2LDY5ICsxODEsNTQgQEAgSklUSlNDYWxsVGh1bmtFbnRyeVBvaW50c1dp
dGhSZWYgdmlydHVhbFRodW5rRm9yKFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0kKICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIHNsb3dDYXNlLmFwcGVuZCgKICAgICAgICAgaml0LmJyYW5j
aFRlc3Q2NCgKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm9uWmVybywgY2FsbGVlUmVnLCBH
UFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm9u
WmVybywgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwogI2Vsc2UK
ICAgICBzbG93Q2FzZS5hcHBlbmQoCiAgICAgICAgIGppdC5icmFuY2gzMigKLSAgICAgICAgICAg
IENDYWxsSGVscGVyczo6Tm90RXF1YWwsIGNhbGxlZVRhZ1JlZywKKyAgICAgICAgICAgIENDYWxs
SGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QxLAogICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKICNlbmRpZgotICAgIHNsb3dD
YXNlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RUeXBlKGNhbGxlZVJlZywgSlNGdW5jdGlvblR5cGUp
KTsKKyAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElmTm90VHlwZShHUFJJbmZvOjpyZWdU
MCwgSlNGdW5jdGlvblR5cGUpKTsKICAgICAKICAgICAvLyBOb3cgd2Uga25vdyB3ZSBoYXZlIGEg
SlNGdW5jdGlvbi4KICAgICAKICAgICBqaXQubG9hZFB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLAot
ICAgICAgICB0YXJnZXRSZWcpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6cmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwKKyAgICAgICAgR1BS
SW5mbzo6cmVnVDQpOwogICAgIGppdC5sb2FkUHRyKAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoCi0gICAgICAgICAgICB0YXJnZXRSZWcsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkVu
dHJ5Rm9yKAotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQo
KSwKLSAgICAgICAgICAgICAgICBlbnRyeVBvaW50VHlwZUZvcihjYWxsTGlua0luZm8uYXJndW1l
bnRzTG9jYXRpb24oKSkpKSwKLSAgICAgICAgdGFyZ2V0UmVnKTsKLSAgICBzbG93Q2FzZS5hcHBl
bmQoaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCB0YXJnZXRSZWcpKTsKKyAg
ICAgICAgICAgIEdQUkluZm86OnJlZ1Q0LCBFeGVjdXRhYmxlQmFzZTo6b2Zmc2V0T2ZKSVRDb2Rl
V2l0aEFyaXR5Q2hlY2tGb3IoCisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLnNwZWNpYWxp
emF0aW9uS2luZCgpKSksCisgICAgICAgIEdQUkluZm86OnJlZ1Q0KTsKKyAgICBzbG93Q2FzZS5h
cHBlbmQoaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdU
NCkpOwogICAgIAogICAgIC8vIE5vdyB3ZSBrbm93IHRoYXQgd2UgaGF2ZSBhIENvZGVCbG9jaywg
YW5kIHdlJ3JlIGNvbW1pdHRlZCB0byBtYWtpbmcgYSBmYXN0CiAgICAgLy8gY2FsbC4KICAgICAK
ICAgICAvLyBNYWtlIGEgdGFpbCBjYWxsLiBUaGlzIHdpbGwgcmV0dXJuIGJhY2sgdG8gSklUIGNv
ZGUuCi0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgdGFyZ2V0UmVnKTsKKyAgICBlbWl0
UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUNCk7CiAgICAgaWYgKGNhbGxMaW5r
SW5mby5pc1RhaWxDYWxsKCkpIHsKLSAgICAgICAgaml0LnNwaWxsQXJndW1lbnRSZWdpc3RlcnNU
b0ZyYW1lQmVmb3JlUHJvbG9ndWUoKTsKLSAgICAgICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVz
c0FmdGVyQ2FsbChjYWxsTGlua0luZm9BbmRUZW1wUmVnKTsKLSAgICAgICAgaml0LnByZXBhcmVG
b3JUYWlsQ2FsbFNsb3codGFyZ2V0UmVnKTsKKyAgICAgICAgaml0LnByZXNlcnZlUmV0dXJuQWRk
cmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGppdC5wcmVwYXJlRm9yVGFp
bENhbGxTbG93KEdQUkluZm86OnJlZ1Q0KTsKICAgICB9Ci0gICAgaml0Lmp1bXAodGFyZ2V0UmVn
KTsKLSAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwotCi0gICAgaW5jcmVtZW50Q291bnRlcigmaml0
LCBWTTo6VmlydHVhbFNsb3dDYWxsKTsKKyAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUNCk7CiAK
KyAgICBzbG93Q2FzZS5saW5rKCZqaXQpOworICAgIAogICAgIC8vIEhlcmUgd2UgZG9uJ3Qga25v
dyBhbnl0aGluZywgc28gcmV2ZXJ0IHRvIHRoZSBmdWxsIHNsb3cgcGF0aC4KLSAgICBqaXQuc3Bp
bGxBcmd1bWVudFJlZ2lzdGVyc1RvRnJhbWVCZWZvcmVQcm9sb2d1ZSgpOwogICAgIAogICAgIHNs
b3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvblZpcnR1YWxDYWxsKTsKICAgICAKICAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsCisgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUoCisgICAgICAgIHBhdGNoQnVmZmVyLAogICAgICAgICAoIlZp
cnR1YWwgJXMgc2xvdyBwYXRoIHRodW5rIiwKICAgICAgICAgY2FsbExpbmtJbmZvLmNhbGxNb2Rl
KCkgPT0gQ2FsbE1vZGU6OlJlZ3VsYXIgPyAiY2FsbCIgOiBjYWxsTGlua0luZm8uY2FsbE1vZGUo
KSA9PSBDYWxsTW9kZTo6VGFpbCA/ICJ0YWlsIGNhbGwiIDogImNvbnN0cnVjdCIpKTsKLSAgICBK
SVRKU0NhbGxUaHVua0VudHJ5UG9pbnRzV2l0aFJlZiBjYWxsRW50cnlQb2ludHMgPSBKSVRKU0Nh
bGxUaHVua0VudHJ5UG9pbnRzV2l0aFJlZihjb2RlUmVmKTsKLQotICAgIGNhbGxFbnRyeVBvaW50
cy5zZXRFbnRyeUZvcihTdGFja0FyZ3NFbnRyeSwgY29kZVJlZi5jb2RlKCkpOwotCi0jaWYgTlVN
QkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUwotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciByZWdpc3RlckVudHJ5UHRyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihyZWdpc3Rl
ckVudHJ5KTsKLQotICAgIGZvciAodW5zaWduZWQgZW50cnlJbmRleCA9IFJlZ2lzdGVyMUFyZ0Vu
dHJ5OyBlbnRyeUluZGV4IDwgIFRodW5rRW50cnlQb2ludFR5cGVDb3VudDsgZW50cnlJbmRleCsr
KQotICAgICAgICBjYWxsRW50cnlQb2ludHMuc2V0RW50cnlGb3Ioc3RhdGljX2Nhc3Q8VGh1bmtF
bnRyeVBvaW50VHlwZT4oZW50cnlJbmRleCksIHJlZ2lzdGVyRW50cnlQdHIpOwotI2VuZGlmCi0K
LSAgICByZXR1cm4gY2FsbEVudHJ5UG9pbnRzOwogfQogCiBlbnVtIFRodW5rRW50cnlUeXBlIHsg
RW50ZXJWaWFDYWxsLCBFbnRlclZpYUp1bXBXaXRoU2F2ZWRUYWdzLCBFbnRlclZpYUp1bXBXaXRo
b3V0U2F2ZWRUYWdzIH07CiAKLXN0YXRpYyBKSVRFbnRyeVBvaW50c1dpdGhSZWYgbmF0aXZlRm9y
R2VuZXJhdG9yKFZNKiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBUaHVua0VudHJ5
VHlwZSBlbnRyeVR5cGUgPSBFbnRlclZpYUNhbGwpCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIG5hdGl2ZUZvckdlbmVyYXRvcihWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCwgVGh1bmtFbnRyeVR5cGUgZW50cnlUeXBlID0gRW50ZXJWaWFDYWxsKQogewogICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBiZSBhYmxlIHRvIGxvZyBTaGFkb3dDaGlja2VuIHByb2xvZ3VlIHBh
Y2tldHMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
NTY4OQpAQCAtMzc3LDE0ICsyMzcsOCBAQCBzdGF0aWMgSklURW50cnlQb2ludHNXaXRoUmVmIG5h
dGl2ZUZvckdlbmVyYXRvcihWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQgawogICAgIAog
ICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
c3RhY2tBcmdzRW50cnk7Ci0KICAgICBzd2l0Y2ggKGVudHJ5VHlwZSkgewogICAgIGNhc2UgRW50
ZXJWaWFDYWxsOgotICAgICAgICBqaXQuc3BpbGxBcmd1bWVudFJlZ2lzdGVyc1RvRnJhbWVCZWZv
cmVQcm9sb2d1ZSgpOwotCi0gICAgICAgIHN0YWNrQXJnc0VudHJ5ID0gaml0LmxhYmVsKCk7Ci0K
ICAgICAgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgRW50ZXJWaWFKdW1wV2l0aFNhdmVkVGFnczoKQEAgLTUyNSwzMyArMzc5LDI1IEBAIHN0
YXRpYyBKSVRFbnRyeVBvaW50c1dpdGhSZWYgbmF0aXZlRm9yR2VuZXJhdG9yKFZNKiB2bSwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBrCiAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsK
IAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYgRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgKCJuYXRpdmUgJXMlcyB0cmFtcG9saW5lIiwgZW50cnlUeXBlID09IEVudGVyVmlhSnVt
cFdpdGhTYXZlZFRhZ3MgPyAiVGFpbCBXaXRoIFNhdmVkIFRhZ3MgIiA6IGVudHJ5VHlwZSA9PSBF
bnRlclZpYUp1bXBXaXRob3V0U2F2ZWRUYWdzID8gIlRhaWwgV2l0aG91dCBTYXZlZCBUYWdzICIg
OiAiIiwgdG9DU3RyaW5nKGtpbmQpLmRhdGEoKSkpOwotICAgIGlmIChlbnRyeVR5cGUgPT0gRW50
ZXJWaWFDYWxsKSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBzdGFja0VudHJ5UHRy
ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihzdGFja0FyZ3NFbnRyeSk7Ci0KLSAgICAgICAgcmV0
dXJuIEpJVEVudHJ5UG9pbnRzV2l0aFJlZihjb2RlUmVmLCBjb2RlUmVmLmNvZGUoKSwgY29kZVJl
Zi5jb2RlKCksIGNvZGVSZWYuY29kZSgpLCBzdGFja0VudHJ5UHRyLCBzdGFja0VudHJ5UHRyKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gSklURW50cnlQb2ludHNXaXRoUmVmKGNvZGVSZWYsIGNvZGVS
ZWYuY29kZSgpLCBjb2RlUmVmLmNvZGUoKSk7Ci0KKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgKCJuYXRpdmUgJXMlcyB0cmFtcG9saW5lIiwgZW50cnlUeXBlID09IEVudGVy
VmlhSnVtcFdpdGhTYXZlZFRhZ3MgPyAiVGFpbCBXaXRoIFNhdmVkIFRhZ3MgIiA6IGVudHJ5VHlw
ZSA9PSBFbnRlclZpYUp1bXBXaXRob3V0U2F2ZWRUYWdzID8gIlRhaWwgV2l0aG91dCBTYXZlZCBU
YWdzICIgOiAiIiwgdG9DU3RyaW5nKGtpbmQpLmRhdGEoKSkpOwogfQogCi1KSVRFbnRyeVBvaW50
c1dpdGhSZWYgbmF0aXZlQ2FsbEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbmF0aXZlQ2FsbEdlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgcmV0dXJuIG5hdGl2ZUZvckdl
bmVyYXRvcih2bSwgQ29kZUZvckNhbGwpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0
aXZlVGFpbENhbGxHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBuYXRpdmVGb3JHZW5l
cmF0b3Iodm0sIENvZGVGb3JDYWxsLCBFbnRlclZpYUp1bXBXaXRoU2F2ZWRUYWdzKS5jb2RlUmVm
KCk7CisgICAgcmV0dXJuIG5hdGl2ZUZvckdlbmVyYXRvcih2bSwgQ29kZUZvckNhbGwsIEVudGVy
VmlhSnVtcFdpdGhTYXZlZFRhZ3MpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZl
VGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4g
bmF0aXZlRm9yR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ2FsbCwgRW50ZXJWaWFKdW1wV2l0aG91dFNh
dmVkVGFncykuY29kZVJlZigpOworICAgIHJldHVybiBuYXRpdmVGb3JHZW5lcmF0b3Iodm0sIENv
ZGVGb3JDYWxsLCBFbnRlclZpYUp1bXBXaXRob3V0U2F2ZWRUYWdzKTsKIH0KIAotSklURW50cnlQ
b2ludHNXaXRoUmVmIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICByZXR1
cm4gbmF0aXZlRm9yR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KQEAgLTY5MCw0
MyArNTM2LDYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHVucmVhY2hhYmxlR2VuZXJhdG9yKFZN
KiB2bSkKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJ1bnJlYWNoYWJs
ZSB0aHVuayIpKTsKIH0KIAotI2lmIE5VTUJFUl9PRl9KU19GVU5DVElPTl9BUkdVTUVOVF9SRUdJ
U1RFUlMKLXN0YXRpYyB2b2lkIHN0cmluZ0NoYXJMb2FkUmVnQ2FsbChTcGVjaWFsaXplZFRodW5r
SklUJiBqaXQsIFZNKiB2bSkKLXsKLSAgICAvLyBsb2FkIHN0cmluZwotICAgIEdQUlJlZyB0aGlz
UmVnID0gYXJndW1lbnRSZWdpc3RlckZvckZ1bmN0aW9uQXJndW1lbnQoMCk7Ci0gICAgR1BSUmVn
IGluZGV4UmVnID0gYXJndW1lbnRSZWdpc3RlckZvckZ1bmN0aW9uQXJndW1lbnQoMik7Ci0gICAg
R1BSUmVnIGxlbmd0aFJlZyA9IGFyZ3VtZW50UmVnaXN0ZXJGb3JGdW5jdGlvbkFyZ3VtZW50KDMp
OwotICAgIEdQUlJlZyB0ZW1wUmVnID0gU3BlY2lhbGl6ZWRUaHVua0pJVDo6bm9uQXJnR1BSMDsK
LQotICAgIGppdC5jaGVja0pTU3RyaW5nQXJndW1lbnQoKnZtLCB0aGlzUmVnKTsKLQotICAgIC8v
IExvYWQgc3RyaW5nIGxlbmd0aCB0byByZWdUMiwgYW5kIHN0YXJ0IHRoZSBwcm9jZXNzIG9mIGxv
YWRpbmcgdGhlIGRhdGEgcG9pbnRlciBpbnRvIHJlZ1QwCi0gICAgaml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyh0aGlzUmVnLCBUaHVua0hlbHBlcnM6OmpzU3RyaW5nTGVuZ3RoT2Zm
c2V0KCkpLCBsZW5ndGhSZWcpOwotICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHRoaXNSZWcsIFRodW5rSGVscGVyczo6anNTdHJpbmdWYWx1ZU9mZnNldCgpKSwgdGVtcFJl
Zyk7Ci0gICAgaml0LmFwcGVuZEZhaWx1cmUoaml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxl
cjo6WmVybywgdGVtcFJlZykpOwotCi0gICAgLy8gbG9hZCBpbmRleAotICAgIGppdC5tb3ZlKGFy
Z3VtZW50UmVnaXN0ZXJGb3JGdW5jdGlvbkFyZ3VtZW50KDEpLCBpbmRleFJlZyk7Ci0gICAgaml0
LmFwcGVuZEZhaWx1cmUoaml0LmVtaXRKdW1wSWZOb3RJbnQzMihpbmRleFJlZykpOwotCi0gICAg
Ly8gRG8gYW4gdW5zaWduZWQgY29tcGFyZSB0byBzaW11bHRhbmVvdXNseSBmaWx0ZXIgbmVnYXRp
dmUgaW5kaWNlcyBhcyB3ZWxsIGFzIGluZGljZXMgdGhhdCBhcmUgdG9vIGxhcmdlCi0gICAgaml0
LmFwcGVuZEZhaWx1cmUoaml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IGluZGV4UmVnLCBsZW5ndGhSZWcpKTsKLQotICAgIC8vIExvYWQgdGhlIGNoYXJhY3RlcgotICAg
IFNwZWNpYWxpemVkVGh1bmtKSVQ6Okp1bXBMaXN0IGlzMTZCaXQ7Ci0gICAgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6SnVtcExpc3QgY29udDhCaXQ7Ci0gICAgLy8gTG9hZCB0aGUgc3RyaW5nIGZsYWdz
Ci0gICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcFJlZywgU3RyaW5n
SW1wbDo6ZmxhZ3NPZmZzZXQoKSksIGxlbmd0aFJlZyk7Ci0gICAgaml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3ModGVtcFJlZywgU3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSwgdGVt
cFJlZyk7Ci0gICAgaXMxNkJpdC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxl
cjo6WmVybywgbGVuZ3RoUmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFN0cmluZ0lt
cGw6OmZsYWdJczhCaXQoKSkpKTsKLSAgICBqaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleCh0ZW1wUmVnLCBpbmRleFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lLCAwKSwgdGVt
cFJlZyk7Ci0gICAgY29udDhCaXQuYXBwZW5kKGppdC5qdW1wKCkpOwotICAgIGlzMTZCaXQubGlu
aygmaml0KTsKLSAgICBqaXQubG9hZDE2KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgodGVtcFJl
ZywgaW5kZXhSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc1R3bywgMCksIHRlbXBSZWcpOwotICAg
IGNvbnQ4Qml0LmxpbmsoJmppdCk7Ci19Ci0jZWxzZQogc3RhdGljIHZvaWQgc3RyaW5nQ2hhckxv
YWQoU3BlY2lhbGl6ZWRUaHVua0pJVCYgaml0LCBWTSogdm0pCiB7CiAgICAgLy8gbG9hZCBzdHJp
bmcKQEAgLTc1Niw3ICs1NjUsNiBAQCBzdGF0aWMgdm9pZCBzdHJpbmdDaGFyTG9hZChTcGVjaWFs
aXplZFRodW5rSklUJiBqaXQsIFZNKiB2bSkKICAgICBqaXQubG9hZDE2KE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtK
SVQ6OnJlZ1QxLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNUd28sIDApLCBTcGVjaWFsaXplZFRodW5r
SklUOjpyZWdUMCk7CiAgICAgY29udDhCaXQubGluaygmaml0KTsKIH0KLSNlbmRpZgogCiBzdGF0
aWMgdm9pZCBjaGFyVG9TdHJpbmcoU3BlY2lhbGl6ZWRUaHVua0pJVCYgaml0LCBWTSogdm0sIE1h
Y3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHNyYywgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQg
ZHN0LCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBzY3JhdGNoKQogewpAQCAtNzY2LDY5ICs1
NzQsMzQgQEAgc3RhdGljIHZvaWQgY2hhclRvU3RyaW5nKFNwZWNpYWxpemVkVGh1bmtKSVQmIGpp
dCwgVk0qIHZtLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXMKICAgICBqaXQuYXBwZW5kRmFpbHVyZShq
aXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgZHN0KSk7CiB9CiAKLUpJVEVu
dHJ5UG9pbnRzV2l0aFJlZiBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0jaWYg
TlVNQkVSX09GX0pTX0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUwotICAgIFNwZWNpYWxpemVk
VGh1bmtKSVQgaml0KHZtLCAxLCBBc3NlbWJseUhlbHBlcnM6OlNwaWxsRXhhY3RseSwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6SW5SZWdpc3RlcnMpOwotICAgIHN0cmluZ0NoYXJMb2FkUmVnQ2FsbChq
aXQsIHZtKTsKLSAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6bm9uQXJn
R1BSMCk7Ci0gICAgaml0LmxpbmtGYWlsdXJlSGVyZSgpOwotICAgIGppdC5zcGlsbEFyZ3VtZW50
UmVnaXN0ZXJzVG9GcmFtZSgyLCBBc3NlbWJseUhlbHBlcnM6OlNwaWxsRXhhY3RseSk7Ci0gICAg
aml0LmFwcGVuZEZhaWx1cmUoaml0Lmp1bXAoKSk7Ci0gICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2
bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImNoYXJDb2RlQXQiKTsKLSNlbHNl
CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIHN0cmluZ0NoYXJMb2Fk
KGppdCwgdm0pOwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdU
MCk7CiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxD
YWxsKHZtKSwgImNoYXJDb2RlQXQiKTsKLSNlbmRpZgogfQogCi1KSVRFbnRyeVBvaW50c1dpdGhS
ZWYgY2hhckF0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNo
YXJBdFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSNpZiBOVU1CRVJfT0ZfSlNfRlVOQ1RJT05f
QVJHVU1FTlRfUkVHSVNURVJTCi0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEsIEFz
c2VtYmx5SGVscGVyczo6U3BpbGxFeGFjdGx5LCBTcGVjaWFsaXplZFRodW5rSklUOjpJblJlZ2lz
dGVycyk7Ci0gICAgc3RyaW5nQ2hhckxvYWRSZWdDYWxsKGppdCwgdm0pOwotICAgIGNoYXJUb1N0
cmluZyhqaXQsIHZtLCBTcGVjaWFsaXplZFRodW5rSklUOjpub25BcmdHUFIwLCBTcGVjaWFsaXpl
ZFRodW5rSklUOjpyZXR1cm5WYWx1ZUdQUiwgYXJndW1lbnRSZWdpc3RlckZvckZ1bmN0aW9uQXJn
dW1lbnQoMykpOwotICAgIGppdC5yZXR1cm5KU0NlbGwoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmV0
dXJuVmFsdWVHUFIpOwotICAgIGppdC5saW5rRmFpbHVyZUhlcmUoKTsKLSAgICBqaXQuc3BpbGxB
cmd1bWVudFJlZ2lzdGVyc1RvRnJhbWUoMiwgQXNzZW1ibHlIZWxwZXJzOjpTcGlsbEV4YWN0bHkp
OwotICAgIGppdC5hcHBlbmRGYWlsdXJlKGppdC5qdW1wKCkpOwotICAgIHJldHVybiBqaXQuZmlu
YWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJjaGFyQXQiKTsKLSNl
bHNlCiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIHN0cmluZ0NoYXJM
b2FkKGppdCwgdm0pOwogICAgIGNoYXJUb1N0cmluZyhqaXQsIHZtLCBTcGVjaWFsaXplZFRodW5r
SklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtK
SVQ6OnJlZ1QxKTsKICAgICBqaXQucmV0dXJuSlNDZWxsKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJl
Z1QwKTsKICAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFp
bENhbGwodm0pLCAiY2hhckF0Iik7Ci0jZW5kaWYKIH0KIAotSklURW50cnlQb2ludHNXaXRoUmVm
IGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0jaWYgTlVNQkVSX09GX0pT
X0ZVTkNUSU9OX0FSR1VNRU5UX1JFR0lTVEVSUwotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0
KHZtLCAxLCBBc3NlbWJseUhlbHBlcnM6OlNwaWxsRXhhY3RseSwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6SW5SZWdpc3RlcnMpOwotICAgIC8vIGxvYWQgY2hhciBjb2RlCi0gICAgaml0Lm1vdmUoYXJn
dW1lbnRSZWdpc3RlckZvckZ1bmN0aW9uQXJndW1lbnQoMSksIFNwZWNpYWxpemVkVGh1bmtKSVQ6
Om5vbkFyZ0dQUjApOwotICAgIGppdC5hcHBlbmRGYWlsdXJlKGppdC5lbWl0SnVtcElmTm90SW50
MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6bm9uQXJnR1BSMCkpOwotCi0gICAgY2hhclRvU3RyaW5n
KGppdCwgdm0sIFNwZWNpYWxpemVkVGh1bmtKSVQ6Om5vbkFyZ0dQUjAsIFNwZWNpYWxpemVkVGh1
bmtKSVQ6OnJldHVyblZhbHVlR1BSLCBhcmd1bWVudFJlZ2lzdGVyRm9yRnVuY3Rpb25Bcmd1bWVu
dCgzKSk7Ci0gICAgaml0LnJldHVybkpTQ2VsbChTcGVjaWFsaXplZFRodW5rSklUOjpyZXR1cm5W
YWx1ZUdQUik7Ci0gICAgaml0LmxpbmtGYWlsdXJlSGVyZSgpOwotICAgIGppdC5zcGlsbEFyZ3Vt
ZW50UmVnaXN0ZXJzVG9GcmFtZSgyLCBBc3NlbWJseUhlbHBlcnM6OlNwaWxsQWxsKTsKLSAgICBq
aXQuYXBwZW5kRmFpbHVyZShqaXQuanVtcCgpKTsKLSAgICByZXR1cm4gaml0LmZpbmFsaXplKHZt
LT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiZnJvbUNoYXJDb2RlIik7Ci0jZWxz
ZQotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAxLCBBc3NlbWJseUhlbHBlcnM6OlNw
aWxsQWxsKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCh2bSwgMSk7CiAgICAgLy8gbG9h
ZCBjaGFyIGNvZGUKICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6cmVnVDApOwogICAgIGNoYXJUb1N0cmluZyhqaXQsIHZtLCBTcGVjaWFsaXplZFRodW5r
SklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtK
SVQ6OnJlZ1QxKTsKICAgICBqaXQucmV0dXJuSlNDZWxsKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJl
Z1QwKTsKICAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFp
bENhbGwodm0pLCAiZnJvbUNoYXJDb2RlIik7Ci0jZW5kaWYKIH0KIAotSklURW50cnlQb2ludHNX
aXRoUmVmIGNsejMyVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGNsejMyVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQg
aml0KHZtLCAxKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRBcmdKdW1wOwpAQCAt
ODQ5LDExICs2MjIsMTEgQEAgSklURW50cnlQb2ludHNXaXRoUmVmIGNsejMyVGh1bmtHZW5lcmF0
b3IoVk0qIHZtKQogICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRp
dmVUYWlsQ2FsbCh2bSksICJjbHozMiIpOwogfQogCi1KSVRFbnRyeVBvaW50c1dpdGhSZWYgc3Fy
dFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBzcXJ0VGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAxKTsK
ICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KCkpCi0gICAgICAgIHJldHVy
biB2bS0+aml0U3R1YnMtPmppdEVudHJ5TmF0aXZlQ2FsbCh2bSk7CisgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1
YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKIAogICAgIGppdC5sb2FkRG91YmxlQXJndW1lbnQoMCwg
U3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAp
OwogICAgIGppdC5zcXJ0RG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNp
YWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwpAQCAtMTAwOSwxMiArNzgyLDEyIEBAIGRlZmluZVVu
YXJ5RG91YmxlT3BXcmFwcGVyKHRydW5jKTsKIAogc3RhdGljIGNvbnN0IGRvdWJsZSBoYWxmQ29u
c3RhbnQgPSAwLjU7CiAgICAgCi1KSVRFbnRyeVBvaW50c1dpdGhSZWYgZmxvb3JUaHVua0dlbmVy
YXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZmxvb3JUaHVua0dlbmVyYXRvcihW
TSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBl
cihmbG9vcikgfHwgIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJu
IHZtLT5qaXRTdHVicy0+aml0RW50cnlOYXRpdmVDYWxsKHZtKTsKKyAgICAgICAgcmV0dXJuIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVi
cy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVj
aWFsaXplZFRodW5rSklUOjpyZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybkludDMy
KFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBub25JbnRKdW1wLmxpbmsoJmppdCk7
CkBAIC0xMDUyLDExICs4MjUsMTEgQEAgSklURW50cnlQb2ludHNXaXRoUmVmIGZsb29yVGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQogICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5j
dGlOYXRpdmVUYWlsQ2FsbCh2bSksICJmbG9vciIpOwogfQogCi1KSVRFbnRyeVBvaW50c1dpdGhS
ZWYgY2VpbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBjZWls
VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZt
LCAxKTsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGNlaWwpIHx8ICFqaXQuc3VwcG9y
dHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiB2bS0+aml0U3R1YnMtPmppdEVudHJ5
TmF0aXZlQ2FsbCh2bSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNy
ZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRKdW1wOwogICAgIGppdC5sb2FkSW50MzJB
cmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgbm9uSW50SnVtcCk7CiAgICAg
aml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKQEAgLTEwNzUsMTEg
Kzg0OCwxMSBAQCBKSVRFbnRyeVBvaW50c1dpdGhSZWYgY2VpbFRodW5rR2VuZXJhdG9yKFZNKiB2
bSkKICAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENh
bGwodm0pLCAiY2VpbCIpOwogfQogCi1KSVRFbnRyeVBvaW50c1dpdGhSZWYgdHJ1bmNUaHVua0dl
bmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdHJ1bmNUaHVua0dlbmVyYXRv
cihWTSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIGlm
ICghVW5hcnlEb3VibGVPcFdyYXBwZXIodHJ1bmMpIHx8ICFqaXQuc3VwcG9ydHNGbG9hdGluZ1Bv
aW50KCkpCi0gICAgICAgIHJldHVybiB2bS0+aml0U3R1YnMtPmppdEVudHJ5TmF0aXZlQ2FsbCh2
bSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5h
Z2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBub25JbnRKdW1wOwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBT
cGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybklu
dDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKQEAgLTEwOTgsMTEgKzg3MSwxMSBAQCBK
SVRFbnRyeVBvaW50c1dpdGhSZWYgdHJ1bmNUaHVua0dlbmVyYXRvcihWTSogdm0pCiAgICAgcmV0
dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgInRy
dW5jIik7CiB9CiAKLUpJVEVudHJ5UG9pbnRzV2l0aFJlZiByb3VuZFRodW5rR2VuZXJhdG9yKFZN
KiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiByb3VuZFRodW5rR2VuZXJhdG9yKFZNKiB2bSkK
IHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCh2bSwgMSk7CiAgICAgaWYgKCFVbmFyeURv
dWJsZU9wV3JhcHBlcihqc1JvdW5kKSB8fCAhaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQot
ICAgICAgICByZXR1cm4gdm0tPmppdFN0dWJzLT5qaXRFbnRyeU5hdGl2ZUNhbGwodm0pOworICAg
ICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVS
ZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgbm9uSW50SnVtcDsKICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDAsIG5vbkludEp1bXApOwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVj
aWFsaXplZFRodW5rSklUOjpyZWdUMCk7CkBAIC0xMTMyLDM3ICs5MDUsMzcgQEAgSklURW50cnlQ
b2ludHNXaXRoUmVmIHJvdW5kVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogICAgIHJldHVybiBqaXQu
ZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJyb3VuZCIpOwog
fQogCi1KSVRFbnRyeVBvaW50c1dpdGhSZWYgZXhwVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGV4cFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBpZiAo
IVVuYXJ5RG91YmxlT3BXcmFwcGVyKGV4cCkpCi0gICAgICAgIHJldHVybiB2bS0+aml0U3R1YnMt
PmppdEVudHJ5TmF0aXZlQ2FsbCh2bSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNh
bGwodm0pKTsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCh2bSwgMSk7CiAgICAgaWYgKCFq
aXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiB2bS0+aml0U3R1YnMt
PmppdEVudHJ5TmF0aXZlQ2FsbCh2bSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNh
bGwodm0pKTsKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtK
SVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBqaXQuY2FsbERv
dWJsZVRvRG91YmxlUHJlc2VydmluZ1JldHVybihVbmFyeURvdWJsZU9wV3JhcHBlcihleHApKTsK
ICAgICBqaXQucmV0dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwogICAg
IHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSks
ICJleHAiKTsKIH0KIAotSklURW50cnlQb2ludHNXaXRoUmVmIGxvZ1RodW5rR2VuZXJhdG9yKFZN
KiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsb2dUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7
CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihsb2cpKQotICAgICAgICByZXR1cm4gdm0t
PmppdFN0dWJzLT5qaXRFbnRyeU5hdGl2ZUNhbGwodm0pOworICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5j
dGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwog
ICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gdm0t
PmppdFN0dWJzLT5qaXRFbnRyeU5hdGl2ZUNhbGwodm0pOworICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5j
dGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgaml0LmxvYWREb3VibGVBcmd1bWVudCgwLCBTcGVjaWFs
aXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAg
aml0LmNhbGxEb3VibGVUb0RvdWJsZVByZXNlcnZpbmdSZXR1cm4oVW5hcnlEb3VibGVPcFdyYXBw
ZXIobG9nKSk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJl
Z1QwKTsKICAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFp
bENhbGwodm0pLCAibG9nIik7CiB9CiAKLUpJVEVudHJ5UG9pbnRzV2l0aFJlZiBhYnNUaHVua0dl
bmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYWJzVGh1bmtHZW5lcmF0b3Io
Vk0qIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAxKTsKICAgICBpZiAo
IWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnRBYnMoKSkKLSAgICAgICAgcmV0dXJuIHZtLT5qaXRT
dHVicy0+aml0RW50cnlOYXRpdmVDYWxsKHZtKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0
aXZlQ2FsbCh2bSkpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICB1bnNpZ25lZCB2aXJ0dWFs
UmVnaXN0ZXJJbmRleCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCk7CkBAIC0xMjE1LDcg
Kzk4OCw3IEBAIEpJVEVudHJ5UG9pbnRzV2l0aFJlZiBhYnNUaHVua0dlbmVyYXRvcihWTSogdm0p
CiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxs
KHZtKSwgImFicyIpOwogfQogCi1KSVRFbnRyeVBvaW50c1dpdGhSZWYgaW11bFRodW5rR2VuZXJh
dG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBpbXVsVGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAyKTsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBub25JbnRBcmcwSnVtcDsKQEAgLTEyNDYsMTEgKzEwMTksMTEgQEAgSklU
RW50cnlQb2ludHNXaXRoUmVmIGltdWxUaHVua0dlbmVyYXRvcihWTSogdm0pCiAgICAgcmV0dXJu
IGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImltdWwi
KTsKIH0KIAotSklURW50cnlQb2ludHNXaXRoUmVmIHJhbmRvbVRodW5rR2VuZXJhdG9yKFZNKiB2
bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiByYW5kb21UaHVua0dlbmVyYXRvcihWTSogdm0pCiB7
CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDApOwogICAgIGlmICghaml0LnN1cHBv
cnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gdm0tPmppdFN0dWJzLT5qaXRFbnRy
eU5hdGl2ZUNhbGwodm0pOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpj
cmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGppdC5lbWl0UmFuZG9tVGh1bmsoU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxLCBTcGVjaWFsaXpl
ZFRodW5rSklUOjpyZWdUMiwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDMsIFNwZWNpYWxpemVk
VGh1bmtKSVQ6OmZwUmVnVDApOwpAQCAtMTI1OCwyMiArMTAzMSwxNiBAQCBKSVRFbnRyeVBvaW50
c1dpdGhSZWYgcmFuZG9tVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogCiAgICAgcmV0dXJuIGppdC5m
aW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgInJhbmRvbSIpOwog
I2Vsc2UKLSAgICByZXR1cm4gdm0tPmppdFN0dWJzLT5qaXRFbnRyeU5hdGl2ZUNhbGwodm0pOwor
ICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJl
Zih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKICNlbmRpZgogfQogCi1KSVRFbnRy
eVBvaW50c1dpdGhSZWYgYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNKiB2
bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBib3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGxHZW5l
cmF0b3IoVk0qIHZtKQogewotICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7Ci0KLSAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZXM7Ci0KLSAgICBqaXQuc3BpbGxBcmd1bWVudFJl
Z2lzdGVyc1RvRnJhbWVCZWZvcmVQcm9sb2d1ZSgpOwotICAgIAotICAgIFNwZWNpYWxpemVkVGh1
bmtKSVQ6OkxhYmVsIHN0YWNrQXJnc0VudHJ5KCZqaXQpOworICAgIENDYWxsSGVscGVycyBqaXQo
dm0pOwogICAgIAogICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotCisgICAgCiAgICAg
Ly8gU2V0IHVwIG91ciBjYWxsIGZyYW1lLgogICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spKTsKICAgICBqaXQuc3RvcmUzMihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigwKSwgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCkpOwpAQCAtMTM0MywyMyArMTExMCwyMCBAQCBKSVRFbnRyeVBvaW50c1dpdGhSZWYgYm91
bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNKiB2bSkKICAgICAgICAgR1BSSW5m
bzo6cmVnVDApOwogICAgIGppdC5sb2FkUHRyKAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoCi0gICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9m
RW50cnlGb3IoQ29kZUZvckNhbGwsIFN0YWNrQXJnc011c3RDaGVja0FyaXR5KSksCisgICAgICAg
ICAgICBHUFJJbmZvOjpyZWdUMCwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mSklUQ29kZVdpdGhB
cml0eUNoZWNrRm9yKENvZGVGb3JDYWxsKSksCiAgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKLSAg
ICBmYWlsdXJlcy5hcHBlbmQoaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBH
UFJJbmZvOjpyZWdUMCkpOworICAgIENDYWxsSGVscGVyczo6SnVtcCBub0NvZGUgPSBqaXQuYnJh
bmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQUkluZm86OnJlZ1QwKTsKICAgICAKICAg
ICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgaml0LmNh
bGwoR1BSSW5mbzo6cmVnVDApOwogICAgIAogICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgp
OwogICAgIGppdC5yZXQoKTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQs
IEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlcywgQ29kZUxv
Y2F0aW9uTGFiZWwodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRh
Z3Modm0pKSk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCAoIlNwZWNpYWxpemVkIHRodW5rIGZvciBib3VuZCBmdW5jdGlvbiBj
YWxscyB3aXRoIG5vIGFyZ3VtZW50cyIpKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgc3Rh
Y2tFbnRyeVB0ciA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Yoc3RhY2tBcmdzRW50cnkpOwotCi0g
ICAgcmV0dXJuIEpJVEVudHJ5UG9pbnRzV2l0aFJlZihjb2RlUmVmLCBjb2RlUmVmLmNvZGUoKSwg
Y29kZVJlZi5jb2RlKCksIGNvZGVSZWYuY29kZSgpLCBzdGFja0VudHJ5UHRyLCBzdGFja0VudHJ5
UHRyKTsKKyAgICAKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9U
SFVOS19JRCk7CisgICAgbGlua0J1ZmZlci5saW5rKG5vQ29kZSwgQ29kZUxvY2F0aW9uTGFiZWwo
dm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3Modm0pKSk7Cisg
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCisgICAgICAgIGxpbmtCdWZmZXIsICgiU3BlY2lhbGl6
ZWQgdGh1bmsgZm9yIGJvdW5kIGZ1bmN0aW9uIGNhbGxzIHdpdGggbm8gYXJndW1lbnRzIikpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5r
R2VuZXJhdG9ycy5oCmluZGV4IDMwNDRmMGE0ZjgyMTZmMWVmMzRmYTkwZmI5MzQ3ZWUwMTdmZWQx
MGQuLjYzZTg4MmEyM2NhNTBmOGJhNzAzODhhMjQ2MGE0MWZiMTUzY2VmN2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaApAQCAtMjYsNyArMjYsNiBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCi0jaW5j
bHVkZSAiSklURW50cnlQb2ludHMuaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvci5oIgogCiAj
aWYgRU5BQkxFKEpJVCkKQEAgLTM3LDM1ICszNiwzNCBAQCBjbGFzcyBDYWxsTGlua0luZm87CiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJh
dG9yKFZNKik7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rKFZNKiwgQ2Fs
bExpbmtJbmZvJiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7Ci1KSVRKU0NhbGxUaHVua0VudHJ5
UG9pbnRzV2l0aFJlZiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7Ci1KSVRKU0NhbGxUaHVu
a0VudHJ5UG9pbnRzV2l0aFJlZiBsaW5rRGlyZWN0Q2FsbFRodW5rR2VuZXJhdG9yKFZNKik7Ci1K
SVRKU0NhbGxUaHVua0VudHJ5UG9pbnRzV2l0aFJlZiBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtH
ZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua1BvbHltb3JwaGljQ2FsbFRodW5r
R2VuZXJhdG9yKFZNKik7CiAKLUpJVEpTQ2FsbFRodW5rRW50cnlQb2ludHNXaXRoUmVmIHZpcnR1
YWxUaHVua0ZvcihWTSosIENhbGxMaW5rSW5mbyYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZp
cnR1YWxUaHVua0ZvcihWTSosIENhbGxMaW5rSW5mbyYpOwogCi1KSVRFbnRyeVBvaW50c1dpdGhS
ZWYgbmF0aXZlQ2FsbEdlbmVyYXRvcihWTSopOwotSklURW50cnlQb2ludHNXaXRoUmVmIG5hdGl2
ZUNvbnN0cnVjdEdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNh
bGxHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDb25zdHJ1Y3RH
ZW5lcmF0b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVUYWlsQ2FsbEdlbmVy
YXRvcihWTSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZVRhaWxDYWxsV2l0aG91dFNh
dmVkVGFnc0dlbmVyYXRvcihWTSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFyaXR5Rml4dXBH
ZW5lcmF0b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB1bnJlYWNoYWJsZUdlbmVyYXRv
cihWTSopOwogCi1KSVRFbnRyeVBvaW50c1dpdGhSZWYgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9y
KFZNKik7Ci1KSVRFbnRyeVBvaW50c1dpdGhSZWYgY2hhckF0VGh1bmtHZW5lcmF0b3IoVk0qKTsK
LUpJVEVudHJ5UG9pbnRzV2l0aFJlZiBjbHozMlRodW5rR2VuZXJhdG9yKFZNKik7Ci1KSVRFbnRy
eVBvaW50c1dpdGhSZWYgZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IoVk0qKTsKLUpJVEVudHJ5
UG9pbnRzV2l0aFJlZiBhYnNUaHVua0dlbmVyYXRvcihWTSopOwotSklURW50cnlQb2ludHNXaXRo
UmVmIGNlaWxUaHVua0dlbmVyYXRvcihWTSopOwotSklURW50cnlQb2ludHNXaXRoUmVmIGV4cFRo
dW5rR2VuZXJhdG9yKFZNKik7Ci1KSVRFbnRyeVBvaW50c1dpdGhSZWYgZmxvb3JUaHVua0dlbmVy
YXRvcihWTSopOwotSklURW50cnlQb2ludHNXaXRoUmVmIGxvZ1RodW5rR2VuZXJhdG9yKFZNKik7
Ci1KSVRFbnRyeVBvaW50c1dpdGhSZWYgcm91bmRUaHVua0dlbmVyYXRvcihWTSopOwotSklURW50
cnlQb2ludHNXaXRoUmVmIHNxcnRUaHVua0dlbmVyYXRvcihWTSopOwotSklURW50cnlQb2ludHNX
aXRoUmVmIGltdWxUaHVua0dlbmVyYXRvcihWTSopOwotSklURW50cnlQb2ludHNXaXRoUmVmIHJh
bmRvbVRodW5rR2VuZXJhdG9yKFZNKik7Ci1KSVRFbnRyeVBvaW50c1dpdGhSZWYgdHJ1bmNUaHVu
a0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJDb2RlQXRUaHVua0dl
bmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJBdFRodW5rR2VuZXJhdG9y
KFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2x6MzJUaHVua0dlbmVyYXRvcihWTSopOwor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKFZNKik7CitN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgYWJzVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZiBjZWlsVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBleHBUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZsb29yVGh1
bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsb2dUaHVua0dlbmVyYXRv
cihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJvdW5kVGh1bmtHZW5lcmF0b3IoVk0qKTsK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZiBzcXJ0VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBpbXVsVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZiByYW5kb21UaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRy
dW5jVGh1bmtHZW5lcmF0b3IoVk0qKTsKIAotSklURW50cnlQb2ludHNXaXRoUmVmIGJvdW5kVGhp
c05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSogdm0pOwogCiB9CiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2Mu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggMjM0M2JkOTEzNGNlY2Iz
NzNiYzc0NDg3OGQ0NjRhOWU4NDYzYTI1YS4uOTQwNDI1YzFlM2RjYWNlOWIzZGMwZDRmZTdlYTU1
ZGUzMDgyMjdjNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTMyNTEsOSArMzI1MSw2IEBAIGlu
dCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICBpbnQgcmVzdWx0OwogICAgIHJl
c3VsdCA9IHJ1bkpTQyh2bSwgb3B0aW9ucyk7CiAKLSNpZiBFTkFCTEUoVk1fQ09VTlRFUlMpCi0g
ICAgdm0tPmR1bXBDb3VudGVycygpOwotI2VuZGlmCiAgICAgaWYgKE9wdGlvbnM6OmdjQXRFbmQo
KSkgewogICAgICAgICAvLyBXZSBuZWVkIHRvIGhvbGQgdGhlIEFQSSBsb2NrIHRvIGRvIGEgR0Mu
CiAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcAppbmRleCAyODY1MGJmNTYxMmRkYTczMWI4
ODc0NGVhZDcyZmEzYWYxMTBiODU5Li5mNTkxOGI3MjE3MGFjNWRlNDdjMmJlZDM2Mzc5NjUzMGUw
MTk1NDAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRy
eXBvaW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBv
aW50LmNwcApAQCAtNDYsMjYgKzQ2LDEyIEBAIHN0YXRpYyB2b2lkIHNldEZ1bmN0aW9uRW50cnlw
b2ludChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQogICAgIGlmICh2bS5jYW5Vc2VKSVQo
KSkgewogICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewogICAgICAgICAgICAgY29k
ZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICAgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RK
SVRDb2RlKAotICAgICAgICAgICAgICAgICAgICBKSVRFbnRyeVBvaW50c1dpdGhSZWYodm0uZ2V0
Q1RJU3R1YihmdW5jdGlvbkZvclJlZ2lzdGVyQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvclJlZ2lzdGVyQ2Fs
bEVudHJ5VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZt
LmdldENUSVN0dWIoZnVuY3Rpb25Gb3JSZWdpc3RlckNhbGxFbnRyeVRodW5rR2VuZXJhdG9yKS5j
b2RlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICB2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9y
UmVnaXN0ZXJDYWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKS5jb2RlKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICB2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yU3RhY2tDYWxsRW50cnlUaHVu
a0dlbmVyYXRvcikuY29kZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1
YihmdW5jdGlvbkZvclN0YWNrQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpKSwK
LSAgICAgICAgICAgICAgICAgICAgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKKyAgICAg
ICAgICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKGZ1bmN0
aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IpLCB2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9y
Q2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpLCBKSVRDb2RlOjpJbnRlcnByZXRl
clRodW5rKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIEFTU0VS
VChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwogICAgICAgICBjb2RlQmxvY2stPnNldEpJVENv
ZGUoCi0gICAgICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSgKLSAgICAgICAgICAg
ICAgICBKSVRFbnRyeVBvaW50c1dpdGhSZWYodm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvclJlZ2lz
dGVyQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IpLAotICAgICAgICAgICAgICAgICAgICB2bS5nZXRD
VElTdHViKGZ1bmN0aW9uRm9yUmVnaXN0ZXJDb25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9yKS5j
b2RlKCksCi0gICAgICAgICAgICAgICAgICAgIHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JSZWdp
c3RlckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSwKLSAgICAgICAgICAgICAg
ICAgICAgdm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvclJlZ2lzdGVyQ29uc3RydWN0QXJpdHlDaGVj
a1RodW5rR2VuZXJhdG9yKS5jb2RlKCksCi0gICAgICAgICAgICAgICAgICAgIHZtLmdldENUSVN0
dWIoZnVuY3Rpb25Gb3JTdGFja0NvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSwK
LSAgICAgICAgICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvclN0YWNrQ29uc3Ry
dWN0QXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKS5jb2RlKCkpLAotICAgICAgICAgICAgICAgIEpJ
VENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CisgICAgICAgICAgICBhZG9wdFJlZihuZXcgRGly
ZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ29uc3RydWN0RW50cnlUaHVua0dl
bmVyYXRvciksIHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1Y3RBcml0eUNoZWNrVGh1
bmtHZW5lcmF0b3IpLmNvZGUoKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQpAQCAtNzMsMjYgKzU5LDEy
IEBAIHN0YXRpYyB2b2lkIHNldEZ1bmN0aW9uRW50cnlwb2ludChWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrKQogICAgIFVOVVNFRF9QQVJBTSh2bSk7CiAgICAgaWYgKGtpbmQgPT0gQ29kZUZv
ckNhbGwpIHsKICAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICAgICAgYWRv
cHRSZWYobmV3IERpcmVjdEpJVENvZGUoCi0gICAgICAgICAgICAgICAgSklURW50cnlQb2ludHNX
aXRoUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X2Z1
bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlKSwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyOjpjcmVhdGVMTEludENvZGVQdHIobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxf
cHJvbG9ndWUpLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNy
ZWF0ZUxMSW50Q29kZVB0cihsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSksCi0gICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRy
KGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlKSwKLSAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVMTEludENvZGVQdHIobGxpbnRfZnVuY3Rpb25f
Zm9yX2NhbGxfYXJpdHlfY2hlY2spLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0
eV9jaGVjaykpLAotICAgICAgICAgICAgICAgIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7
CisgICAgICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1
ZSksIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50X2Z1bmN0
aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3Ry
dWN0KTsKICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCi0gICAgICAgIGFkb3B0UmVmKG5ldyBE
aXJlY3RKSVRDb2RlKAotICAgICAgICAgICAgSklURW50cnlQb2ludHNXaXRoUmVmKE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25z
dHJ1Y3RfcHJvbG9ndWUpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6
Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUp
LAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2Rl
UHRyKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUpLAotICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50X2Z1bmN0
aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1
Y3RfYXJpdHlfY2hlY2spLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6
Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hl
Y2spKSwKLSAgICAgICAgICAgIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CisgICAgICAg
IGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRl
TExJbnRDb2RlUmVmKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUpLCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9mdW5jdGlvbl9mb3Jf
Y29uc3RydWN0X2FyaXR5X2NoZWNrKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKIH0K
IAogc3RhdGljIHZvaWQgc2V0RXZhbEVudHJ5cG9pbnQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaykKQEAgLTEwMCwyOCArNzIsMTQgQEAgc3RhdGljIHZvaWQgc2V0RXZhbEVudHJ5cG9pbnQo
Vk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKICNpZiBFTkFCTEUoSklUKQogICAgIGlmICh2
bS5jYW5Vc2VKSVQoKSkgewogICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCi0gICAgICAg
ICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSgKLSAgICAgICAgICAgICAgICBKSVRFbnRy
eVBvaW50c1dpdGhSZWYodm0uZ2V0Q1RJU3R1YihldmFsRW50cnlUaHVua0dlbmVyYXRvciksCi0g
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpLAotICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKCksCi0gICAgICAgICAgICAgICAgICAgIHZtLmdldENUSVN0dWIo
ZXZhbEVudHJ5VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSwKLSAgICAgICAgICAgICAgICAgICAgdm0u
Z2V0Q1RJU3R1YihldmFsRW50cnlUaHVua0dlbmVyYXRvcikuY29kZSgpKSwKLSAgICAgICAgICAg
ICAgICBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOworICAgICAgICAgICAgYWRvcHRSZWYo
bmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1YihldmFsRW50cnlUaHVua0dlbmVyYXRvciks
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKICAgICBVTlVT
RURfUEFSQU0odm0pOwogICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgYWRvcHRS
ZWYobmV3IERpcmVjdEpJVENvZGUoCi0gICAgICAgICAgICBKSVRFbnRyeVBvaW50c1dpdGhSZWYo
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZXZhbF9wcm9s
b2d1ZSksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCksCi0gICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCksCi0gICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyKCksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZXZhbF9wcm9sb2d1ZSkuY29kZSgpLAotICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50
X2V2YWxfcHJvbG9ndWUpLmNvZGUoKSksCi0gICAgICAgICAgICBKSVRDb2RlOjpJbnRlcnByZXRl
clRodW5rKSkpOworICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9ldmFsX3Byb2xvZ3VlKSwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiB9CiAK
IHN0YXRpYyB2b2lkIHNldFByb2dyYW1FbnRyeXBvaW50KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCkBAIC0xMjksMjggKzg3LDE0IEBAIHN0YXRpYyB2b2lkIHNldFByb2dyYW1FbnRyeXBv
aW50KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAjaWYgRU5BQkxFKEpJVCkKICAgICBp
ZiAodm0uY2FuVXNlSklUKCkpIHsKICAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAg
ICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoCi0gICAgICAgICAgICAgICAgSklU
RW50cnlQb2ludHNXaXRoUmVmKHZtLmdldENUSVN0dWIocHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0
b3IpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpLAotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cigpLAotICAgICAgICAgICAgICAgIHZtLmdldENUSVN0dWIocHJvZ3JhbUVu
dHJ5VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSwKLSAgICAgICAgICAgICAgICB2bS5nZXRDVElTdHVi
KHByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpLAotICAgICAgICAgICAgICAgIEpJ
VENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CisgICAgICAgICAgICBhZG9wdFJlZihuZXcgRGly
ZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKHByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKSwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogICAgIFVOVVNFRF9Q
QVJBTSh2bSk7CiAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICBhZG9wdFJlZihu
ZXcgRGlyZWN0SklUQ29kZSgKLSAgICAgICAgICAgIEpJVEVudHJ5UG9pbnRzV2l0aFJlZihNYWNy
b0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9wcm9ncmFtX3Byb2xv
Z3VlKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSwKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIoKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6
OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9wcm9ncmFtX3Byb2xvZ3VlKSwKLSAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9wcm9n
cmFtX3Byb2xvZ3VlKSksCi0gICAgICAgICAgICBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkp
OworICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9wcm9ncmFtX3Byb2xvZ3VlKSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyKCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiB9CiAKIHN0YXRp
YyB2b2lkIHNldE1vZHVsZVByb2dyYW1FbnRyeXBvaW50KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCkBAIC0xNTgsMjggKzEwMiwxNCBAQCBzdGF0aWMgdm9pZCBzZXRNb2R1bGVQcm9ncmFt
RW50cnlwb2ludChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQogI2lmIEVOQUJMRShKSVQp
CiAgICAgaWYgKHZtLmNhblVzZUpJVCgpKSB7CiAgICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29k
ZSgKLSAgICAgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKAotICAgICAgICAgICAg
ICAgIEpJVEVudHJ5UG9pbnRzV2l0aFJlZih2bS5nZXRDVElTdHViKG1vZHVsZVByb2dyYW1FbnRy
eVRodW5rR2VuZXJhdG9yKSwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyKCksCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpLAotICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSwKLSAgICAgICAgICAgICAg
ICAgICAgdm0uZ2V0Q1RJU3R1Yihtb2R1bGVQcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcikuY29k
ZSgpLAotICAgICAgICAgICAgICAgICAgICB2bS5nZXRDVElTdHViKG1vZHVsZVByb2dyYW1FbnRy
eVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpLAotICAgICAgICAgICAgICAgIEpJVENvZGU6OkludGVy
cHJldGVyVGh1bmspKSk7CisgICAgICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2
bS5nZXRDVElTdHViKG1vZHVsZVByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyKCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogICAgIFVOVVNFRF9QQVJBTSh2
bSk7CiAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICBhZG9wdFJlZihuZXcgRGly
ZWN0SklUQ29kZSgKLSAgICAgICAgICAgIEpJVEVudHJ5UG9pbnRzV2l0aFJlZihNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9s
b2d1ZSksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCksCi0gICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCksCi0gICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyKCksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
OjpjcmVhdGVMTEludENvZGVQdHIobGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWUpLAotICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxs
aW50X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlKSksCi0gICAgICAgICAgICBKSVRDb2RlOjpJbnRl
cnByZXRlclRodW5rKSkpOworICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShNYWNy
b0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9tb2R1bGVfcHJvZ3Jh
bV9wcm9sb2d1ZSksIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpLCBKSVRDb2RlOjpJbnRlcnByZXRl
clRodW5rKSkpOwogfQogCiB2b2lkIHNldEVudHJ5cG9pbnQoVk0mIHZtLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwCmluZGV4IDI0NjdhMjYzNzQ4ZTFjNmZhYWNhODFlYWIzMTVjMDQxY2UxZWVhZGEuLjRiNDc0
ZWExZTViNGJiNzRlYjgxNzhiN2E3N2E5ZmVmZjNmMGFjZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAtMzczLDkgKzM3Myw5IEBAIHN0
YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoRXhlY1N0YXRlKiBleGVjLCBJbnN0cnVj
dGlvbiosIENvZGVCbG9jayogY29kCiAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ss
ICJPU1IgZW50cnkiLCAoImluIHByb2xvZ3VlIikpOwogICAgIAogICAgIGlmIChraW5kID09IFBy
b2xvZ3VlKQotICAgICAgICBMTElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZSgpLT5h
ZGRyZXNzRm9yQ2FsbChTdGFja0FyZ3NBcml0eUNoZWNrTm90UmVxdWlyZWQpLmV4ZWN1dGFibGVB
ZGRyZXNzKCksIDApOworICAgICAgICBMTElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29k
ZSgpLT5leGVjdXRhYmxlQWRkcmVzcygpLCAwKTsKICAgICBBU1NFUlQoa2luZCA9PSBBcml0eUNo
ZWNrKTsKLSAgICBMTElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZSgpLT5hZGRyZXNz
Rm9yQ2FsbChTdGFja0FyZ3NNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgMCk7
CisgICAgTExJTlRfUkVUVVJOX1RXTyhjb2RlQmxvY2stPmppdENvZGUoKS0+YWRkcmVzc0ZvckNh
bGwoTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksIDApOwogfQogI2Vsc2UgLy8g
RU5BQkxFKEpJVCkKIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoRXhlY1N0YXRl
KiBleGVjLCBJbnN0cnVjdGlvbiosIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFyKiwg
RW50cnlLaW5kKQpAQCAtMTI5Miw3ICsxMjkyLDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlw
ZSBzZXRVcENhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBJbnN0cnVjdGlvbiogcGMsIENvZGUK
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cjsKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IDA7CiAgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpIHsKLSAgICAg
ICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgU3RhY2tBcmdzTXVz
dENoZWNrQXJpdHkpOworICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZv
cihraW5kLCBNdXN0Q2hlY2tBcml0eSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgRnVuY3Rpb25F
eGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1
dGFibGUqPihleGVjdXRhYmxlKTsKIApAQCAtMTMwNiwxMiArMTMwNiwxMiBAQCBpbmxpbmUgU2xv
d1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEluc3RydWN0
aW9uKiBwYywgQ29kZQogICAgICAgICAgICAgTExJTlRfQ0FMTF9USFJPVyhleGVjLCBlcnJvcik7
CiAgICAgICAgIGNvZGVCbG9jayA9ICpjb2RlQmxvY2tTbG90OwogICAgICAgICBBU1NFUlQoY29k
ZUJsb2NrKTsKLSAgICAgICAgRW50cnlQb2ludFR5cGUgZW50cnlUeXBlOworICAgICAgICBBcml0
eUNoZWNrTW9kZSBhcml0eTsKICAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpKSkKLSAgICAgICAgICAgIGVudHJ5VHlwZSA9IFN0YWNrQXJnc011c3RDaGVja0FyaXR5
OworICAgICAgICAgICAgYXJpdHkgPSBNdXN0Q2hlY2tBcml0eTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgZW50cnlUeXBlID0gU3RhY2tBcmdzQXJpdHlDaGVja05vdFJlcXVpcmVkOwotICAg
ICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIGVu
dHJ5VHlwZSk7CisgICAgICAgICAgICBhcml0eSA9IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDsKKyAg
ICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBh
cml0eSk7CiAgICAgfQogCiAgICAgQVNTRVJUKCEhY29kZVB0cik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcAppbmRleCBkOGJlZjI4YTkzYjFiY2NhY2I0ZmEy
YTRiNmQ1ODE1NDA1MjQ5N2NiLi5hOWZhN2RkNjVlNTFkZmU3MjlkM2Q4NmFiNmJiZTM2ZTA0NDlj
MzY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3Mu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAKQEAg
LTUxLDE5ICs1MSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU19FWFBPUlRfUFJJVkFURSB2bUVudHJ5
VG9XYXNtKHZvaWQqIGNvZGUsIFZNKiB2bSwgUHJvdG9DYWxsRnJhbQogCiBuYW1lc3BhY2UgTExJ
bnQgewogCi1lbnVtIFNob3VsZENyZWF0ZVJlZ2lzdGVyRW50cnkgeyBDcmVhdGVSZWdpc3RlckVu
dHJ5LCBEb250Q3JlYXRlUmVnaXN0ZXJFbnRyeSB9OwotCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKFZNKiB2bSwgdm9pZCAoKnRhcmdldCkoKSwg
Y29uc3QgY2hhciAqdGh1bmtLaW5kLCBTaG91bGRDcmVhdGVSZWdpc3RlckVudHJ5IHNob3VsZENy
ZWF0ZVJlZ2lzdGVyRW50cnkgPSBEb250Q3JlYXRlUmVnaXN0ZXJFbnRyeSkKK3N0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8oVk0qIHZtLCB2b2lkICgq
dGFyZ2V0KSgpLCBjb25zdCBjaGFyICp0aHVua0tpbmQpCiB7CiAgICAgSlNJbnRlcmZhY2VKSVQg
aml0KHZtKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaWYgKHNob3VsZENyZWF0ZVJlZ2lz
dGVyRW50cnkgPT0gQ3JlYXRlUmVnaXN0ZXJFbnRyeSkKLSAgICAgICAgaml0LnNwaWxsQXJndW1l
bnRSZWdpc3RlcnNUb0ZyYW1lQmVmb3JlUHJvbG9ndWUoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BB
UkFNKHNob3VsZENyZWF0ZVJlZ2lzdGVyRW50cnkpOwotI2VuZGlmCi0KKyAgICAKICAgICAvLyBG
SVhNRTogdGhlcmUncyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZG8gaXQgb24gWDg2LCBidXQg
SSdtIG5vdCBzdXJlIEkgY2FyZS4KICAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJVDo6VHJ1c3Rl
ZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHRhcmdldCkpLCBKU0ludGVyZmFjZUpJVDo6cmVn
VDApOwogICAgIGppdC5qdW1wKEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7CkBAIC03Miw0NCArNjMs
MjQgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBU
byhWTSogdm0sIHZvaWQgKCp0YXJnZXQpKCksIGMKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgKCJMTEludCAlcyBwcm9sb2d1ZSB0aHVuayIsIHRodW5rS2luZCkpOwogfQog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JSZWdpc3RlckNhbGxFbnRyeVRodW5r
R2VuZXJhdG9yKFZNKiB2bSkKLXsKLSAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8o
dm0sIExMSW50OjpnZXRDb2RlRnVuY3Rpb25QdHIobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJv
bG9ndWUpLCAiZnVuY3Rpb24gZm9yIHJlZ2lzdGVyIGFyZ3MgY2FsbCIsIENyZWF0ZVJlZ2lzdGVy
RW50cnkpOwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JTdGFja0NhbGxF
bnRyeVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKLXsKLSAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dp
dGhKdW1wVG8odm0sIExMSW50OjpnZXRDb2RlRnVuY3Rpb25QdHIobGxpbnRfZnVuY3Rpb25fZm9y
X2NhbGxfcHJvbG9ndWUpLCAiZnVuY3Rpb24gZm9yIHN0YWNrIGFyZ3MgY2FsbCIpOwotfQotCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JSZWdpc3RlckNvbnN0cnVjdEVudHJ5VGh1
bmtHZW5lcmF0b3IoVk0qIHZtKQotewotICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBU
byh2bSwgTExJbnQ6OmdldENvZGVGdW5jdGlvblB0cihsbGludF9mdW5jdGlvbl9mb3JfY29uc3Ry
dWN0X3Byb2xvZ3VlKSwgImZ1bmN0aW9uIGZvciByZWdpc3RlciBhcmdzIGNvbnN0cnVjdCIsIENy
ZWF0ZVJlZ2lzdGVyRW50cnkpOwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25G
b3JTdGFja0NvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQotewotICAgIHJldHVy
biBnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyh2bSwgTExJbnQ6OmdldENvZGVGdW5jdGlvblB0cihs
bGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlKSwgImZ1bmN0aW9uIGZvciBzdGFj
ayBhcmdzIGNvbnN0cnVjdCIpOwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25G
b3JSZWdpc3RlckNhbGxBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQog
ewotICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyh2bSwgTExJbnQ6OmdldENvZGVG
dW5jdGlvblB0cihsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjayksICJmdW5jdGlv
biBmb3IgcmVnaXN0ZXIgYXJncyBjYWxsIHdpdGggYXJpdHkgY2hlY2siLCBDcmVhdGVSZWdpc3Rl
ckVudHJ5KTsKKyAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8odm0sIExMSW50Ojpn
ZXRDb2RlRnVuY3Rpb25QdHIobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUpLCAiZnVu
Y3Rpb24gZm9yIGNhbGwiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9y
U3RhY2tDYWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiBmdW5jdGlvbkZvckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQog
ewotICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyh2bSwgTExJbnQ6OmdldENvZGVG
dW5jdGlvblB0cihsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjayksICJmdW5jdGlv
biBmb3Igc3RhY2sgYXJncyBjYWxsIHdpdGggYXJpdHkgY2hlY2siKTsKKyAgICByZXR1cm4gZ2Vu
ZXJhdGVUaHVua1dpdGhKdW1wVG8odm0sIExMSW50OjpnZXRDb2RlRnVuY3Rpb25QdHIobGxpbnRf
ZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZSksICJmdW5jdGlvbiBmb3IgY29uc3RydWN0
Iik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvclJlZ2lzdGVyQ29uc3Ry
dWN0QXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBmdW5jdGlvbkZvckNhbGxBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAg
IHJldHVybiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyh2bSwgTExJbnQ6OmdldENvZGVGdW5jdGlv
blB0cihsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrKSwgImZ1bmN0aW9u
IGZvciByZWdpc3RlciBhcmdzIGNvbnN0cnVjdCB3aXRoIGFyaXR5IGNoZWNrIiwgQ3JlYXRlUmVn
aXN0ZXJFbnRyeSk7CisgICAgcmV0dXJuIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKHZtLCBMTElu
dDo6Z2V0Q29kZUZ1bmN0aW9uUHRyKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNr
KSwgImZ1bmN0aW9uIGZvciBjYWxsIHdpdGggYXJpdHkgY2hlY2siKTsKIH0KIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yU3RhY2tDb25zdHJ1Y3RBcml0eUNoZWNrVGh1bmtHZW5l
cmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ29uc3RydWN0
QXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gZ2VuZXJhdGVU
aHVua1dpdGhKdW1wVG8odm0sIExMSW50OjpnZXRDb2RlRnVuY3Rpb25QdHIobGxpbnRfZnVuY3Rp
b25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjayksICJmdW5jdGlvbiBmb3Igc3RhY2sgYXJncyBj
b25zdHJ1Y3Qgd2l0aCBhcml0eSBjaGVjayIpOworICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0
aEp1bXBUbyh2bSwgTExJbnQ6OmdldENvZGVGdW5jdGlvblB0cihsbGludF9mdW5jdGlvbl9mb3Jf
Y29uc3RydWN0X2FyaXR5X2NoZWNrKSwgImZ1bmN0aW9uIGZvciBjb25zdHJ1Y3Qgd2l0aCBhcml0
eSBjaGVjayIpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXZhbEVudHJ5VGh1bmtHZW5l
cmF0b3IoVk0qIHZtKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50VGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaApp
bmRleCA5MDAxMDg1MDM5N2U0ZmVjMDI0YzYzOTkzNmU1MmJhY2VkMjBjMDc5Li5mYzk3NDJjNDJh
YTU4NDJlNDRiN2QxZDJiMzQ0ZDQ4OGQ5N2YzODViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRUaHVua3MuaApAQCAtNDIsMTQgKzQyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpT
X0VYUE9SVF9QUklWQVRFIHZtRW50cnlUb1dhc20odm9pZCosIFZNKiwgUHJvdG9DYWxsRnJhbWUq
KTsKIAogbmFtZXNwYWNlIExMSW50IHsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9u
Rm9yUmVnaXN0ZXJDYWxsRW50cnlUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGZ1bmN0aW9uRm9yU3RhY2tDYWxsRW50cnlUaHVua0dlbmVyYXRvcihWTSopOwotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yUmVnaXN0ZXJDb25zdHJ1Y3RFbnRyeVRodW5r
R2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JTdGFja0Nv
bnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBm
dW5jdGlvbkZvclJlZ2lzdGVyQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcihWTSopOwotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yU3RhY2tDYWxsQXJpdHlDaGVja1RodW5rR2Vu
ZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JSZWdpc3RlckNv
bnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGZ1bmN0aW9uRm9yU3RhY2tDb25zdHJ1Y3RBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IoVk0q
KTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvckNhbGxFbnRyeVRodW5rR2VuZXJh
dG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JDb25zdHJ1Y3RFbnRy
eVRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JD
YWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
ZnVuY3Rpb25Gb3JDb25zdHJ1Y3RBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IoVk0qKTsKIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBldmFsRW50cnlUaHVua0dlbmVyYXRvcihWTSopOwogTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKFZNKik7CiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgbW9kdWxlUHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyaXR5Q2hlY2tNb2RlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcml0eUNoZWNrTW9kZS5oCmluZGV4IDlkNjcz
ZDk1NmIwZDUxNDcwZmZlMTJiNWVmYTVmYzJkYzMzM2E3ZWQuLmRhZTcxOWFkMjdjNWI3MWQwMmQ2
YWFjZDE4MTA1YzE5ZDA3Y2ZjZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FyaXR5Q2hlY2tNb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJpdHlDaGVja01vZGUuaApAQCAtMjgsNyArMjgsNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAK
IGVudW0gQXJpdHlDaGVja01vZGUgewotICAgIFJlZ2lzdGVyRW50cnksCiAgICAgQXJpdHlDaGVj
a05vdFJlcXVpcmVkLAogICAgIE11c3RDaGVja0FyaXR5CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuY3BwCmluZGV4IDAxNGJkYzI0MmI5YmZl
ZDdmYzc5MmRhNGY2ZDhlMTE0YzA4ODMwMTIuLmQzMWZjNDg2YjM3YWY2YTJhMDQ2ZmE4MGFlMDIz
NzYwZGJjMTkyY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGFibGVCYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlQmFzZS5jcHAKQEAgLTU0LDggKzU0LDggQEAgdm9pZCBFeGVjdXRhYmxlQmFzZTo6Y2xl
YXJDb2RlKCkKICNpZiBFTkFCTEUoSklUKQogICAgIG1faml0Q29kZUZvckNhbGwgPSBudWxscHRy
OwogICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IG51bGxwdHI7Ci0gICAgbV9qaXRFbnRyaWVz
Rm9yQ2FsbC5jbGVhckVudHJpZXMoKTsKLSAgICBtX2ppdEVudHJpZXNGb3JDb25zdHJ1Y3QuY2xl
YXJFbnRyaWVzKCk7CisgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gTWFjcm9B
c3NlbWJsZXJDb2RlUHRyKCk7CisgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hl
Y2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKICNlbmRpZgogICAgIG1fbnVtUGFyYW1ldGVy
c0ZvckNhbGwgPSBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQ7CiAgICAgbV9udW1QYXJhbWV0
ZXJzRm9yQ29uc3RydWN0ID0gTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgKaW5kZXggOGY1ZTRjZjQ0
NjU3MTkyZjY2YWUwNmEyYTBjZDdlZTA0ODQ5YTE2MC4uNWQxZTBiNGI2NDRmYzYxMThmMmU3NmJj
Mzk4OGIxMzQ4NmMwODc2MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZUJhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlQmFzZS5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSAiQXJpdHlDaGVja01vZGUuaCIKICNpbmNsdWRlICJDYWxsRGF0YS5oIgogI2luY2x1ZGUg
IkNvZGVCbG9ja0hhc2guaCIKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCkBA
IC0zMyw3ICszNCw2IEBACiAjaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKICNpbmNsdWRlICJJbmZl
cnJlZFZhbHVlLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgotI2luY2x1ZGUgIkpJVEVudHJ5UG9p
bnRzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJTb3VyY2VDb2Rl
LmgiCiAjaW5jbHVkZSAiVHlwZVNldC5oIgpAQCAtMTQ1LDQyICsxNDUsNDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gZ2VuZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdCgpOwogICAgIH0KICAg
ICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZW50cnlwb2ludEZvcihDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQsIEVudHJ5UG9pbnRUeXBlIGVudHJ5VHlwZSkKKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgZW50cnlwb2ludEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEFy
aXR5Q2hlY2tNb2RlIGFyaXR5KQogICAgIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBh
IGNhY2hlZCByZXN1bHQuIFdlIG9ubHkgaGF2ZSBpdCBmb3IgYXJpdHkgY2hlY2sgYmVjYXVzZSB3
ZSB1c2UgdGhlCiAgICAgICAgIC8vIG5vLWFyaXR5IGVudHJ5cG9pbnQgaW4gbm9uLXZpcnR1YWwg
Y2FsbHMsIHdoaWNoIHdpbGwgImNhY2hlIiB0aGlzIHZhbHVlIGRpcmVjdGx5IGluCiAgICAgICAg
IC8vIG1hY2hpbmUgY29kZS4KLSAgICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAgIGNhc2Ug
Q29kZUZvckNhbGw6Ci0gICAgICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3Vs
dCA9IG1faml0RW50cmllc0ZvckNhbGwuZW50cnlGb3IoZW50cnlUeXBlKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29k
ZUZvckNvbnN0cnVjdDoKLSAgICAgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVz
dWx0ID0gbV9qaXRFbnRyaWVzRm9yQ29uc3RydWN0LmVudHJ5Rm9yKGVudHJ5VHlwZSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBp
ZiAoYXJpdHkgPT0gTXVzdENoZWNrQXJpdHkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoa2luZCkg
eworICAgICAgICAgICAgY2FzZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAgICAgICAgICBpZiAoTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9IG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVj
aykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgICAgICAg
ICBpZiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9IG1faml0Q29kZUZvckNvbnN0cnVj
dFdpdGhBcml0eUNoZWNrKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPQotICAgICAgICAgICAgZ2VuZXJhdGVkSklUQ29k
ZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwoZW50cnlUeXBlKTsKLSAgICAgICAgLy8gQ2FjaGUg
dGhlIHJlc3VsdDsgdGhpcyBpcyBuZWNlc3NhcnkgZm9yIHRoZSBKSVQncyB2aXJ0dWFsIGNhbGwg
b3B0aW1pemF0aW9ucy4KLSAgICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAgIGNhc2UgQ29k
ZUZvckNhbGw6Ci0gICAgICAgICAgICBtX2ppdEVudHJpZXNGb3JDYWxsLnNldEVudHJ5Rm9yKGVu
dHJ5VHlwZSwgcmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvZGVG
b3JDb25zdHJ1Y3Q6Ci0gICAgICAgICAgICBtX2ppdEVudHJpZXNGb3JDb25zdHJ1Y3Quc2V0RW50
cnlGb3IoZW50cnlUeXBlLCByZXN1bHQpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBnZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbChhcml0eSk7CisgICAg
ICAgIGlmIChhcml0eSA9PSBNdXN0Q2hlY2tBcml0eSkgeworICAgICAgICAgICAgLy8gQ2FjaGUg
dGhlIHJlc3VsdDsgdGhpcyBpcyBuZWNlc3NhcnkgZm9yIHRoZSBKSVQncyB2aXJ0dWFsIGNhbGwg
b3B0aW1pemF0aW9ucy4KKyAgICAgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICAgICAg
Y2FzZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAgICAgICAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFy
aXR5Q2hlY2sgPSByZXN1bHQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAgICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3Ry
dWN0V2l0aEFyaXR5Q2hlY2sgPSByZXN1bHQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRW50cnlGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kLCBFbnRyeVBvaW50VHlwZSBlbnRyeVBvaW50VHlwZSkKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKAorICAgICAgICBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQpCiAgICAgewogICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAg
ICAgY2FzZSBDb2RlRm9yQ2FsbDoKLSAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
RXhlY3V0YWJsZUJhc2UsIG1faml0RW50cmllc0ZvckNhbGwpICsgSklURW50cnlQb2ludHM6Om9m
ZnNldE9mRW50cnlGb3IoZW50cnlQb2ludFR5cGUpOworICAgICAgICAgICAgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihFeGVjdXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNr
KTsKICAgICAgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgotICAgICAgICAgICAgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlQmFzZSwgbV9qaXRFbnRyaWVzRm9yQ29uc3RydWN0KSAr
IEpJVEVudHJ5UG9pbnRzOjpvZmZzZXRPZkVudHJ5Rm9yKGVudHJ5UG9pbnRUeXBlKTsKKyAgICAg
ICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZUJhc2UsIG1faml0Q29kZUZv
ckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKTsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTIyOCw4ICsyMzMsOCBA
QCBwcm90ZWN0ZWQ6CiAgICAgSW50cmluc2ljIG1faW50cmluc2ljOwogICAgIFJlZlB0cjxKSVRD
b2RlPiBtX2ppdENvZGVGb3JDYWxsOwogICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGVGb3JD
b25zdHJ1Y3Q7Ci0gICAgSklURW50cnlQb2ludHMgbV9qaXRFbnRyaWVzRm9yQ2FsbDsKLSAgICBK
SVRFbnRyeVBvaW50cyBtX2ppdEVudHJpZXNGb3JDb25zdHJ1Y3Q7CisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjazsKKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2s7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0JvdW5kRnVuY3Rpb24uY3BwCmluZGV4IGIzZjNkYmQ0MWU4ZmRiNDYyMmM2ZmQ5YjgwMTMxZjFh
OGU4MmQyYWMuLjFhZjJkNWViZjU3MzFmZjExYTFjY2MxNjk5MWVjYTdiNTI5YTJlNGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcApA
QCAtNDYsNyArNDYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvdW5kVGhpc05v
QXJnc0Z1bmN0aW9uQ2FsbChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4
ZWN1dGFibGUgPSB0YXJnZXRGdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOwogICAgIGlmIChleGVjdXRh
YmxlLT5oYXNKSVRDb2RlRm9yQ2FsbCgpKSB7CiAgICAgICAgIC8vIEZvcmNlIHRoZSBleGVjdXRh
YmxlIHRvIGNhY2hlIGl0cyBhcml0eSBlbnRyeXBvaW50LgotICAgICAgICBleGVjdXRhYmxlLT5l
bnRyeXBvaW50Rm9yKENvZGVGb3JDYWxsLCBTdGFja0FyZ3NNdXN0Q2hlY2tBcml0eSk7CisgICAg
ICAgIGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3IoQ29kZUZvckNhbGwsIE11c3RDaGVja0FyaXR5
KTsKICAgICB9CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUg
PSBnZXRDYWxsRGF0YSh0YXJnZXRGdW5jdGlvbiwgY2FsbERhdGEpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmNwcAppbmRleCBhNWE2ODNj
NTI2NGZiZjI3OWQyZjM1MWJjZTI2YTZhNWVlMzg5ZGUxLi5iN2RhZDJhNDYyZGRkZmMyMjc2MmZk
NWNkN2NmNmE0NjFjZGQxOGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OYXRpdmVFeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OYXRpdmVFeGVjdXRhYmxlLmNwcApAQCAtNjMsOCArNjMsOCBAQCB2b2lkIE5hdGl2ZUV4
ZWN1dGFibGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUGFzc1JlZlB0cjxKSVRDb2RlPiBjYWxs
VGh1bmssIFBhcwogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBtX2ppdENvZGVG
b3JDYWxsID0gY2FsbFRodW5rOwogICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IGNvbnN0cnVj
dFRodW5rOwotICAgIG1faml0RW50cmllc0ZvckNhbGwuc2V0RW50cnlGb3IoU3RhY2tBcmdzTXVz
dENoZWNrQXJpdHksIG1faml0Q29kZUZvckNhbGwtPmFkZHJlc3NGb3JDYWxsKFN0YWNrQXJnc011
c3RDaGVja0FyaXR5KSk7Ci0gICAgbV9qaXRFbnRyaWVzRm9yQ29uc3RydWN0LnNldEVudHJ5Rm9y
KFN0YWNrQXJnc011c3RDaGVja0FyaXR5LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3QtPmFkZHJlc3NG
b3JDYWxsKFN0YWNrQXJnc011c3RDaGVja0FyaXR5KSk7CisgICAgbV9qaXRDb2RlRm9yQ2FsbFdp
dGhBcml0eUNoZWNrID0gbV9qaXRDb2RlRm9yQ2FsbC0+YWRkcmVzc0ZvckNhbGwoTXVzdENoZWNr
QXJpdHkpOworICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gbV9qaXRD
b2RlRm9yQ29uc3RydWN0LT5hZGRyZXNzRm9yQ2FsbChNdXN0Q2hlY2tBcml0eSk7CiAgICAgbV9u
YW1lID0gbmFtZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y3JpcHRFeGVjdXRhYmxlLmNwcAppbmRleCAwY2E4YzM2ZjdlYzMyYjBiY2MzODQ1YjA0OWM4M2M2
ZjZmYTY3NWJlLi42MTVjMjJjNWM0ZmM0NzA4ZGJjZDg0ZTM5OTY3YWJhOTcyMTQ0YzFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNw
cApAQCAtMTM5LDEyICsxMzksMTIgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29k
ZShWTSYgdm0sIENvZGVCbG9jayogZ2VuZXJpY0NvZGVCbG9jaywgQ29kZVR5cGUKICAgICBzd2l0
Y2ggKGtpbmQpIHsKICAgICBjYXNlIENvZGVGb3JDYWxsOgogICAgICAgICBtX2ppdENvZGVGb3JD
YWxsID0gZ2VuZXJpY0NvZGVCbG9jayA/IGdlbmVyaWNDb2RlQmxvY2stPmppdENvZGUoKSA6IG51
bGxwdHI7Ci0gICAgICAgIG1faml0RW50cmllc0ZvckNhbGwuY2xlYXJFbnRyaWVzKCk7CisgICAg
ICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0
cigpOwogICAgICAgICBtX251bVBhcmFtZXRlcnNGb3JDYWxsID0gZ2VuZXJpY0NvZGVCbG9jayA/
IGdlbmVyaWNDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA6IE5VTV9QQVJBTUVURVJTX05PVF9D
T01QSUxFRDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgogICAg
ICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBnZW5lcmljQ29kZUJsb2NrID8gZ2VuZXJpY0Nv
ZGVCbG9jay0+aml0Q29kZSgpIDogbnVsbHB0cjsKLSAgICAgICAgbV9qaXRFbnRyaWVzRm9yQ29u
c3RydWN0LmNsZWFyRW50cmllcygpOworICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRo
QXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwogICAgICAgICBtX251bVBhcmFt
ZXRlcnNGb3JDb25zdHJ1Y3QgPSBnZW5lcmljQ29kZUJsb2NrID8gZ2VuZXJpY0NvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpIDogTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEOwogICAgICAgICBi
cmVhazsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggZTk2NTE0
MTcxN2EwYmU4ODU3MTljZGE5ZWMzODFjNmJjMDU2ZTc1ZC4uNTFkMjMwNWMyMjg1NGY3ZDA1MmFi
MjcyYmJlMTczZTBkNDNiZmU5MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApA
QCAtMjEwLDEwICsyMTAsNiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5
cGUpCiAgICAgdXBkYXRlU29mdFJlc2VydmVkWm9uZVNpemUoT3B0aW9uczo6c29mdFJlc2VydmVk
Wm9uZVNpemUoKSk7CiAgICAgc2V0TGFzdFN0YWNrVG9wKHN0YWNrLm9yaWdpbigpKTsKIAotI2lm
IEVOQUJMRShWTV9DT1VOVEVSUykKLSAgICBjbGVhckNvdW50ZXJzKCk7Ci0jZW5kaWYKLQogICAg
IC8vIE5lZWQgdG8gYmUgY2FyZWZ1bCB0byBrZWVwIGV2ZXJ5dGhpbmcgY29uc2lzdGVudCBoZXJl
CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodGhpcyk7CiAgICAgQXRvbWljU3RyaW5nVGFibGUqIGV4
aXN0aW5nRW50cnlBdG9taWNTdHJpbmdUYWJsZSA9IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50
QXRvbWljU3RyaW5nVGFibGUobV9hdG9taWNTdHJpbmdUYWJsZSk7CkBAIC00ODAsNyArNDc2LDcg
QEAgU2FtcGxpbmdQcm9maWxlciYgVk06OmVuc3VyZVNhbXBsaW5nUHJvZmlsZXIoUmVmUHRyPFN0
b3B3YXRjaD4mJiBzdG9wd2F0Y2gpCiAjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVS
KQogCiAjaWYgRU5BQkxFKEpJVCkKLXN0YXRpYyBKSVRFbnRyeUdlbmVyYXRvciB0aHVua0dlbmVy
YXRvckZvckludHJpbnNpYyhJbnRyaW5zaWMgaW50cmluc2ljKQorc3RhdGljIFRodW5rR2VuZXJh
dG9yIHRodW5rR2VuZXJhdG9yRm9ySW50cmluc2ljKEludHJpbnNpYyBpbnRyaW5zaWMpCiB7CiAg
ICAgc3dpdGNoIChpbnRyaW5zaWMpIHsKICAgICBjYXNlIENoYXJDb2RlQXRJbnRyaW5zaWM6CkBA
IC05MjcsMzUgKzkyMyw0IEBAIHZvaWQgVk06OnZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0
aXNmaWVkKHVuc2lnbmVkIHJlY3Vyc2lvbkRlcHRoLCBFeGNlcHRpb25FCiB9CiAjZW5kaWYKIAot
I2lmIEVOQUJMRShWTV9DT1VOVEVSUykKLXZvaWQgVk06OmNsZWFyQ291bnRlcnMoKQotewotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOdW1iZXJWTUNvdW50ZXI7IGkrKykKLSAgICAgICAg
bV9jb3VudGVyc1tpXSA9IDA7Ci19Ci0KLXZvaWQgVk06OmR1bXBDb3VudGVycygpCi17Ci0gICAg
c2l6ZV90IHRvdGFsQ2FsbHMgPSBjb3VudGVyRm9yKEJhc2VsaW5lQ2FsbGVyKSArIGNvdW50ZXJG
b3IoREZHQ2FsbGVyKSArIGNvdW50ZXJGb3IoRlRMQ2FsbGVyKTsKLSAgICBkYXRhTG9nKCIjIyMj
IFZNIENhbGwgY291bnRlcnMgIyMjI1xuIik7Ci0gICAgZGF0YUxvZ0YoIiUxMHp1IFRvdGFsIGNh
bGxzXG4iLCB0b3RhbENhbGxzKTsKLSAgICBkYXRhTG9nRigiJTEwenUgQmFzZWxpbmUgY2FsbHNc
biIsIGNvdW50ZXJGb3IoQmFzZWxpbmVDYWxsZXIpKTsKLSAgICBkYXRhTG9nRigiJTEwenUgREZH
IGNhbGxzXG4iLCBjb3VudGVyRm9yKERGR0NhbGxlcikpOwotICAgIGRhdGFMb2dGKCIlMTB6dSBG
VEwgY2FsbHNcbiIsIGNvdW50ZXJGb3IoRlRMQ2FsbGVyKSk7Ci0gICAgZGF0YUxvZ0YoIiUxMHp1
IFZhcmFyZyBjYWxsc1xuIiwgY291bnRlckZvcihDYWxsVmFyYXJncykpOwotICAgIGRhdGFMb2dG
KCIlMTB6dSBUYWlsIGNhbGxzXG4iLCBjb3VudGVyRm9yKFRhaWxDYWxsKSk7Ci0gICAgZGF0YUxv
Z0YoIiUxMHp1IEV2YWwgY2FsbHNcbiIsIGNvdW50ZXJGb3IoQ2FsbEV2YWwpKTsKLSAgICBkYXRh
TG9nRigiJTEwenUgRGlyZWN0IGNhbGxzXG4iLCBjb3VudGVyRm9yKERpcmVjdENhbGwpKTsKLSAg
ICBkYXRhTG9nRigiJTEwenUgUG9seW1vcnBoaWMgY2FsbHNcbiIsIGNvdW50ZXJGb3IoUG9seW1v
cnBoaWNDYWxsKSk7Ci0gICAgZGF0YUxvZ0YoIiUxMHp1IFZpcnR1YWwgY2FsbHNcbiIsIGNvdW50
ZXJGb3IoVmlydHVhbENhbGwpKTsKLSAgICBkYXRhTG9nRigiJTEwenUgVmlydHVhbCBzbG93IGNh
bGxzXG4iLCBjb3VudGVyRm9yKFZpcnR1YWxTbG93Q2FsbCkpOwotICAgIGRhdGFMb2dGKCIlMTB6
dSBSZWdpc3RlciBhcmdzIG5vIGFyaXR5XG4iLCBjb3VudGVyRm9yKFJlZ0FyZ3NOb0FyaXR5KSk7
Ci0gICAgZGF0YUxvZ0YoIiUxMHp1IFN0YWNrIGFyZ3Mgbm8gYXJpdHlcbiIsIGNvdW50ZXJGb3Io
U3RhY2tBcmdzTm9Bcml0eSkpOwotICAgIGRhdGFMb2dGKCIlMTB6dSBSZWdpc3RlciBhcmdzIGV4
dHJhIGFyaXR5XG4iLCBjb3VudGVyRm9yKFJlZ0FyZ3NFeHRyYSkpOwotICAgIGRhdGFMb2dGKCIl
MTB6dSBSZWdpc3RlciBhcmdzIGFyaXR5IGNoZWNrXG4iLCBjb3VudGVyRm9yKFJlZ0FyZ3NBcml0
eSkpOwotICAgIGRhdGFMb2dGKCIlMTB6dSBTdGFjayBhcmdzIGFyaXR5IGNoZWNrXG4iLCBjb3Vu
dGVyRm9yKFN0YWNrQXJnc0FyaXR5KSk7Ci0gICAgZGF0YUxvZ0YoIiUxMHp1IEFyaXR5IGZpeHVw
cyByZXF1aXJlZFxuIiwgY291bnRlckZvcihBcml0eUZpeHVwUmVxdWlyZWQpKTsKLX0KLSNlbmRp
ZgotCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4
IDIyMjNiM2U1NTg4ZTVlYWE1N2ExZmRjMDFhZDhhYmQyZjJiYmM3ODcuLjEzYjhkZDI2MGU3Yjlm
MTU3ODIxMjA4ZmU5MzBlM2FhZWVlZjRmZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aApAQCAtNDMyLDE2ICs0MzIsNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gaml0
U3R1YnMtPmN0aVN0dWIodGhpcywgZ2VuZXJhdG9yKTsKICAgICB9Ci0KLSAgICBKSVRFbnRyeVBv
aW50c1dpdGhSZWYgZ2V0SklURW50cnlTdHViKEpJVEVudHJ5R2VuZXJhdG9yIGdlbmVyYXRvcikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBqaXRTdHVicy0+aml0RW50cnlTdHViKHRoaXMsIGdlbmVy
YXRvcik7Ci0gICAgfQotCi0gICAgSklUSlNDYWxsVGh1bmtFbnRyeVBvaW50c1dpdGhSZWYgZ2V0
SklUQ2FsbFRodW5rRW50cnlTdHViKEpJVENhbGxUaHVua0VudHJ5R2VuZXJhdG9yIGdlbmVyYXRv
cikKLSAgICB7Ci0gICAgICAgIHJldHVybiBqaXRTdHVicy0+aml0Q2FsbFRodW5rRW50cnlTdHVi
KHRoaXMsIGdlbmVyYXRvcik7Ci0gICAgfQogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWdp
c3RlckF0T2Zmc2V0TGlzdD4gYWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0czsKICAgICAKQEAg
LTU4NCw1MCArNTc0LDYgQEAgcHVibGljOgogICAgIEJ1bXBQb2ludGVyQWxsb2NhdG9yIG1fcmVn
RXhwQWxsb2NhdG9yOwogICAgIENvbmN1cnJlbnRKU0xvY2sgbV9yZWdFeHBBbGxvY2F0b3JMb2Nr
OwogCi0gICAgZW51bSBWTUNvdW50ZXJUeXBlIHsKLSAgICAgICAgQmFzZWxpbmVDYWxsZXIsCi0g
ICAgICAgIERGR0NhbGxlciwKLSAgICAgICAgRlRMQ2FsbGVyLAotICAgICAgICBDYWxsVmFyYXJn
cywKLSAgICAgICAgVGFpbENhbGwsCi0gICAgICAgIENhbGxFdmFsLAotICAgICAgICBEaXJlY3RD
YWxsLAotICAgICAgICBQb2x5bW9ycGhpY0NhbGwsCi0gICAgICAgIFZpcnR1YWxDYWxsLAotICAg
ICAgICBWaXJ0dWFsU2xvd0NhbGwsCi0gICAgICAgIFJlZ0FyZ3NOb0FyaXR5LAotICAgICAgICBT
dGFja0FyZ3NOb0FyaXR5LAotICAgICAgICBSZWdBcmdzRXh0cmEsCi0gICAgICAgIFJlZ0FyZ3NB
cml0eSwKLSAgICAgICAgU3RhY2tBcmdzQXJpdHksCi0gICAgICAgIEFyaXR5Rml4dXBSZXF1aXJl
ZCwKLSAgICAgICAgTnVtYmVyVk1Db3VudGVyCi0gICAgfTsKLQotI2lmIEVOQUJMRShWTV9DT1VO
VEVSUykKLSAgICBzaXplX3QgbV9jb3VudGVyc1tOdW1iZXJWTUNvdW50ZXJdOwotCi0gICAgdm9p
ZCBjbGVhckNvdW50ZXJzKCk7Ci0KLSAgICBzaXplX3QqIGFkZHJlc3NPZkNvdW50ZXIoVk1Db3Vu
dGVyVHlwZSBjb3VudGVyVHlwZSkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudGVyVHlwZSA+PSBO
dW1iZXJWTUNvdW50ZXIpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBy
ZXR1cm4gJm1fY291bnRlcnNbY291bnRlclR5cGVdOwotICAgIH0KLQotICAgIHNpemVfdCBjb3Vu
dGVyRm9yKFZNQ291bnRlclR5cGUgY291bnRlclR5cGUpCi0gICAgewotICAgICAgICBpZiAoY291
bnRlclR5cGUgPj0gTnVtYmVyVk1Db3VudGVyKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIAotICAgICAgICByZXR1cm4gbV9jb3VudGVyc1tjb3VudGVyVHlwZV07Ci0gICAgfQotCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wQ291bnRlcnMoKTsKLSNlbmRpZgotCiAgICAg
c3RkOjp1bmlxdWVfcHRyPEhhc093blByb3BlcnR5Q2FjaGU+IG1faGFzT3duUHJvcGVydHlDYWNo
ZTsKICAgICBBTFdBWVNfSU5MSU5FIEhhc093blByb3BlcnR5Q2FjaGUqIGhhc093blByb3BlcnR5
Q2FjaGUoKSB7IHJldHVybiBtX2hhc093blByb3BlcnR5Q2FjaGUuZ2V0KCk7IH0KICAgICBIYXNP
d25Qcm9wZXJ0eUNhY2hlKiBlbnN1cmVIYXNPd25Qcm9wZXJ0eUNhY2hlKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKaW5kZXggMDVmOTBmYjM2YTdhNjg0YWVl
MGZhYTJlYmRhMzQ4Njc1MmRlZjhhYS4uNWZmYzQ1ZGYwMzZkYTU2Yzc4Njk0MTdjNGVlOTQzOGI3
ZDc4Yzk5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRp
bmcuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcApA
QCAtMTMzLDcgKzEzMyw3IEBAIFdhc21Ub0pTU3R1YiBpbXBvcnRTdHViR2VuZXJhdG9yKFZNKiB2
bSwgQmFnPENhbGxMaW5rSW5mbz4mIGNhbGxMaW5rSW5mb3MsIFNpZ25hCiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBHUFJSZWcgaW1wb3J0SlNDZWxsR1BSUmVnID0gYXJndW1lbnRSZWdpc3RlckZv
ckNhbGxlZSgpOworICAgIEdQUlJlZyBpbXBvcnRKU0NlbGxHUFJSZWcgPSBHUFJJbmZvOjpyZWdU
MDsgLy8gQ2FsbGVlIG5lZWRzIHRvIGJlIGluIHJlZ1QwIGZvciBzbG93IHBhdGggYmVsb3cuCiAg
ICAgQVNTRVJUKCF3YXNtQ0MubV9jYWxsZWVTYXZlUmVnaXN0ZXJzLmdldChpbXBvcnRKU0NlbGxH
UFJSZWcpKTsKIAogICAgIC8vIEVhY2ggSlMgLT4gd2FzbSBlbnRyeSBzZXRzIHRoZSBXZWJBc3Nl
bWJseS5JbnN0YW5jZSB3aG9zZSBleHBvcnQgaXMgYmVpbmcgY2FsbGVkLiBXZSdyZSBjYWxsaW5n
IG91dCBvZiB0aGlzIEluc3RhbmNlLCBhbmQgY2FuIHRoZXJlZm9yZSBmaWd1cmUgb3V0IHRoZSBp
bXBvcnQgYmVpbmcgY2FsbGVkLgpAQCAtMTQ4LDE0ICsxNDgsMTUgQEAgV2FzbVRvSlNTdHViIGlt
cG9ydFN0dWJHZW5lcmF0b3IoVk0qIHZtLCBCYWc8Q2FsbExpbmtJbmZvPiYgY2FsbExpbmtJbmZv
cywgU2lnbmEKICAgICAvLyBGSVhNRSBUYWlsIGNhbGwgaWYgdGhlIHdhc20gcmV0dXJuIHR5cGUg
aXMgdm9pZCBhbmQgbm8gcmVnaXN0ZXJzIHdlcmUgc3BpbGxlZC4gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTQ4OAogCiAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8gPSBjYWxsTGlua0luZm9zLmFkZCgpOwotICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxs
KENhbGxMaW5rSW5mbzo6Q2FsbCwgU3RhY2tBcmdzLCBDb2RlT3JpZ2luKCksIGltcG9ydEpTQ2Vs
bEdQUlJlZyk7CisgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxs
LCBDb2RlT3JpZ2luKCksIGltcG9ydEpTQ2VsbEdQUlJlZyk7CiAgICAgSklUOjpEYXRhTGFiZWxQ
dHIgdGFyZ2V0VG9DaGVjazsKICAgICBKSVQ6OlRydXN0ZWRJbW1QdHIgaW5pdGlhbFJpZ2h0VmFs
dWUoMCk7CiAgICAgSklUOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaChN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGltcG9ydEpTQ2VsbEdQUlJlZywgdGFyZ2V0VG9DaGVj
aywgaW5pdGlhbFJpZ2h0VmFsdWUpOwogICAgIEpJVDo6Q2FsbCBmYXN0Q2FsbCA9IGppdC5uZWFy
Q2FsbCgpOwogICAgIEpJVDo6SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKICAgICBzbG93UGF0aC5s
aW5rKCZqaXQpOwotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNh
bGxMaW5rSW5mbyksIEdQUkluZm86Om5vbkFyZ0dQUjApOyAvLyBMaW5rIGluZm8gbmVlZHMgdG8g
YmUgaW4gbm9uQXJnR1BSMAorICAgIC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiByZWdUMCBoZXJl
LgorICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5m
byksIEdQUkluZm86OnJlZ1QyKTsgLy8gTGluayBpbmZvIG5lZWRzIHRvIGJlIGluIHJlZ1QyLgog
ICAgIEpJVDo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAgIGRvbmUubGluaygm
aml0KTsKIApAQCAtMjIzLDcgKzIyNCw3IEBAIFdhc21Ub0pTU3R1YiBpbXBvcnRTdHViR2VuZXJh
dG9yKFZNKiB2bSwgQmFnPENhbGxMaW5rSW5mbz4mIGNhbGxMaW5rSW5mb3MsIFNpZ25hCiAgICAg
aml0LnJldCgpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xPQkFM
X1RIVU5LX0lEKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cih2
bS0+Z2V0SklUQ2FsbFRodW5rRW50cnlTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmVudHJ5
Rm9yKFN0YWNrQXJncykuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIHBhdGNoQnVmZmVyLmxp
bmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5l
cmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwgY2FsbFJldHVybkxvY2F0aW9uKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93
Q2FsbCkpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbihwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mKHRhcmdldFRvQ2hlY2spKTsKICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQ
YXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdENhbGwpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtLmgKaW5kZXggNGZkOTAxZmU5ZDUzZTU5ZTY0MzQ5MWZlMzY0YjM5YWFmNmJkMmI5MC4uYWUz
YzgyNmY0NGY3NmJkNDVmNjMzZDgxNTNhZDlmN2I3NjkwNjQ3ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvUGxhdGZvcm0uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCkBAIC02
OTUsOSArNjk1LDYgQEAKICNkZWZpbmUgRU5BQkxFX0pJVCAxCiAjZW5kaWYKIAotLyogVGhpcyBl
bmFibGVzIHBlciBWTSBjb3VudGVycyBhdmFpbGFibGUgZm9yIHVzZSBieSBKSVQnZWQgY29kZS4g
Ki8KLSNkZWZpbmUgRU5BQkxFX1ZNX0NPVU5URVJTIDAKLQogLyogVGhlIEZUTCAqZG9lcyBub3Qq
IHdvcmsgb24gMzItYml0IHBsYXRmb3Jtcy4gRGlzYWJsZSBpdCBldmVuIGlmIHNvbWVvbmUgYXNr
ZWQgdXMgdG8gZW5hYmxlIGl0LiAqLwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAjdW5kZWYgRU5B
QkxFX0ZUTF9KSVQKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggNTYwNzI2MDY0YzBkMzE3NDNjMjE3MTUxMjAwZGM4ZTAyYTUzZTIxYi4uZDhi
Yzk4MjYzOGQ5YWI5MzAxZDEyNmI0MDMxYzJhM2Y4NjRkNDY4OSAxMDA2NDQKLS0tIGEvSlNUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAx
Ni0xMi0xMCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIwOTY1MywgcjIwOTY1NCwgcjIwOTY2MywgYW5k
CisgICAgICAgIHIyMDk2NzMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjU3MzkKKworICAgICAgICBzcGVlZG9tZXRlciBjcmFzaGVzIChSZXF1ZXN0
ZWQgYnkgcGl6bG8gb24gI3dlYmtpdCkuCisKKyAgICAgICAgUmV2ZXJ0ZWQgY2hhbmdlc2V0czoK
KworICAgICAgICAiSlNWQUxVRTY0OiBQYXNzIGFyZ3VtZW50cyBpbiBwbGF0Zm9ybSBhcmd1bWVu
dCByZWdpc3RlcnMgd2hlbgorICAgICAgICBtYWtpbmcgSmF2YVNjcmlwdCBjYWxscyIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDM1NQorICAgICAg
ICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8yMDk2NTMKKworICAgICAgICAiVW5y
ZXZpZXdlZCBidWlsZCBmaXggZm9yIDMyIGJpdCBidWlsZHMuIgorICAgICAgICBodHRwOi8vdHJh
Yy53ZWJraXQub3JnL2NoYW5nZXNldC8yMDk2NTQKKworICAgICAgICAiVW5yZXZpZXdlZCBidWls
ZCBmaXggZm9yIHRoZSBDTE9PUCBhZnRlciByMjA5NjUzIgorICAgICAgICBodHRwOi8vdHJhYy53
ZWJraXQub3JnL2NoYW5nZXNldC8yMDk2NjMKKworICAgICAgICAiUkVHUkVTU0lPTihyMjA5NjUz
KSBDcmFzaCBpbiBDYWxsRnJhbWVTaHVmZmxlcjo6c25hcHNob3QoKSIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTcyOAorICAgICAgICBodHRwOi8v
dHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8yMDk2NzMKKwogMjAxNi0xMi0xMCAgTWljaGFlbCBT
YWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyMDk2NTMp
IENyYXNoIGluIENhbGxGcmFtZVNodWZmbGVyOjpzbmFwc2hvdCgpCmRpZmYgLS1naXQgYS9KU1Rl
c3RzL21pY3JvYmVuY2htYXJrcy9jYWxsaW5nLWNvbXB1dGVkLWFyZ3MuanMgYi9KU1Rlc3RzL21p
Y3JvYmVuY2htYXJrcy9jYWxsaW5nLWNvbXB1dGVkLWFyZ3MuanMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGFmYzk5NGU3NjdiNzhlYzk4NjJmOTI1MjBlYWUzYzEzNjA0NmQxOTMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvSlNUZXN0cy9taWNy
b2JlbmNobWFya3MvY2FsbGluZy1jb21wdXRlZC1hcmdzLmpzCisrKyAvZGV2L251bGwKQEAgLTEs
NTMgKzAsMCBAQAotZnVuY3Rpb24gc3VtMihhLCBiKQotewotICAgIHJldHVybiBhICsgYjsKLX0K
LQotbm9JbmxpbmUoc3VtMik7Ci0KLWZ1bmN0aW9uIHN1bTJiKGEsIGIpCi17Ci0gICAgcmV0dXJu
IGEgKyBiOwotfQotCi1ub0lubGluZShzdW0yYik7Ci0KLWZ1bmN0aW9uIHN1bTMoYSwgYiwgYykK
LXsKLSAgICByZXR1cm4gYSArIGIgKyBjOwotfQotCi1ub0lubGluZShzdW0zKTsKLQotZnVuY3Rp
b24gc3VtM2IoYSwgYiwgYykKLXsKLSAgICByZXR1cm4gYSArIGIgKyBjOwotfQotCi1ub0lubGlu
ZShzdW0zYik7Ci0KLWZ1bmN0aW9uIHRlc3QoKQotewotICAgIGxldCBvMSA9IHsKLSAgICAgICAg
b25lOiAxLAotICAgICAgICB0d286IDIKLSAgICB9Ci0gICAgbGV0IG8yID0gewotICAgICAgICB0
aHJlZTogMywKLSAgICAgICAgZml2ZTogNQotICAgIH07Ci0gICAgbGV0IG8zID0gewotICAgICAg
ICBmb3VyOiA0LAotICAgICAgICBzaXg6IDYKLSAgICB9OwotICAgIGxldCByZXN1bHQgPSAwOwot
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjAwMDAwMDsgaSsrKQotICAgICAgICByZXN1bHQgPSBz
dW0yKG8xLm9uZSwgbzIuZml2ZSkgKyBzdW0yYihvMS50d28sIG8xLm9uZSArIG8yLmZpdmUpCi0g
ICAgICAgICAgICArIHN1bTMobzIudGhyZWUsIG8zLmZvdXIsIG8yLmZpdmUpICsgc3VtM2IobzEu
dHdvLCBvMi50aHJlZSArIG8yLmZpdmUsIG8zLnNpeCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1sZXQgcmVzdWx0ID0gdGVzdCgpOwotaWYgKHJlc3VsdCAhPSA0MikKLSAgICB0aHJvdyAi
VW5leHBlY3RlZCByZXN1bHQ6ICIgKyByZXN1bHQ7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL21pY3Jv
YmVuY2htYXJrcy9jYWxsaW5nLW1hbnktY2FsbGVlcy5qcyBiL0pTVGVzdHMvbWljcm9iZW5jaG1h
cmtzL2NhbGxpbmctbWFueS1jYWxsZWVzLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA0ZGY2ZGQzZDBiM2Y1NzNhMTA0NzBiNmZhYTdiMjU1MDUxYmZiNjI2Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtz
L2NhbGxpbmctbWFueS1jYWxsZWVzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAot
ZnVuY3Rpb24gc3VtMihhLCBiKQotewotICAgIHJldHVybiBhICsgYjsKLX0KLQotbm9JbmxpbmUo
c3VtMik7Ci0KLWZ1bmN0aW9uIHN1bTJiKGEsIGIpCi17Ci0gICAgcmV0dXJuIGEgKyBiICsgYjsK
LX0KLQotbm9JbmxpbmUoc3VtMmIpOwotCi1mdW5jdGlvbiBzdW0zKGEsIGIsIGMpCi17Ci0gICAg
cmV0dXJuIGEgKyBiICsgYzsKLX0KLQotbm9JbmxpbmUoc3VtMyk7Ci0KLWZ1bmN0aW9uIHN1bTNi
KGEsIGIsIGMpCi17Ci0gICAgcmV0dXJuIGEgKyBiICsgYiArIGM7Ci19Ci0KLW5vSW5saW5lKHN1
bTNiKTsKLQotZnVuY3Rpb24gdGVzdCgpCi17Ci0gICAgbGV0IHJlc3VsdCA9IDA7Ci0gICAgZm9y
IChsZXQgaSA9IDA7IGkgPCAyMDAwMDAwOyBpKyspCi0gICAgICAgIHJlc3VsdCA9IHN1bTIoMSwg
MikgKyBzdW0yYigyLCAzKSArIHN1bTMoNSwgNSwgNSkgKyBzdW0zYigyLCA0LCA2KTsKLQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLWxldCByZXN1bHQgPSB0ZXN0KCk7Ci1pZiAocmVzdWx0ICE9
IDQyKQotICAgIHRocm93ICJVbmV4cGVjdGVkIHJlc3VsdDogIiArIHJlc3VsdDsKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2NhbGxpbmctb25lLWNhbGxlZS1maXhlZC5qcyBi
L0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2NhbGxpbmctb25lLWNhbGxlZS1maXhlZC5qcwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA3MjFiMWU5MWFiYjc1ZGZlYTQ5YWI2NTU4OTkx
MjFhYjFiNjcwNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9jYWxsaW5nLW9uZS1jYWxsZWUtZml4ZWQuanMKKysr
IC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1mdW5jdGlvbiBzdW0oYSwgYiwgYykKLXsKLSAg
ICByZXR1cm4gYSArIGIgKyBjOwotfQotCi1ub0lubGluZShzdW0pOwotCi1mdW5jdGlvbiB0ZXN0
KCkKLXsKLSAgICBsZXQgcmVzdWx0ID0gMDsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDAw
MDA7IGkrKykKLSAgICAgICAgcmVzdWx0ID0gc3VtKDEsIDIsIDMpOwotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotbGV0IHJlc3VsdCA9IHRlc3QoKTsKLWlmIChyZXN1bHQgIT0gNikKLSAgICB0
aHJvdyAiVW5leHBlY3RlZCByZXN1bHQ6ICIgKyByZXN1bHQ7CmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9jYWxsaW5nLW9uZS1jYWxsZWUuanMgYi9KU1Rlc3RzL21pY3JvYmVu
Y2htYXJrcy9jYWxsaW5nLW9uZS1jYWxsZWUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGE5Nzk3ODc1NGQyMDE2NWQ5NjBkYzg1MTNiODA2ZTYzZDdiZDFkOTIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvSlNUZXN0cy9taWNyb2JlbmNobWFy
a3MvY2FsbGluZy1vbmUtY2FsbGVlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAot
ZnVuY3Rpb24gc3VtKGEsIGIsIGMpCi17Ci0gICAgcmV0dXJuIGEgKyBiICsgYzsKLX0KLQotbm9J
bmxpbmUoc3VtKTsKLQotZnVuY3Rpb24gdGVzdChhLCBiLCBjKQotewotICAgIGxldCByZXN1bHQg
PSAwOwotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDAwMDAwMDsgaSsrKQotICAgICAgICByZXN1
bHQgPSBzdW0oYSwgYiwgYyk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1sZXQgcmVzdWx0
ID0gdGVzdCgxLCAyLCAzKTsKLWlmIChyZXN1bHQgIT0gNikKLSAgICB0aHJvdyAiVW5leHBlY3Rl
ZCByZXN1bHQ6ICIgKyByZXN1bHQ7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9jYWxsaW5nLXBvbHktY2FsbGVlcy5qcyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2NhbGxp
bmctcG9seS1jYWxsZWVzLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWFkZjM5
NTI5ODQ2Y2QwMGVlM2I1YjFjY2E3YjA5NTM5MjQ2YjY5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2NhbGxpbmct
cG9seS1jYWxsZWVzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotZnVuY3Rpb24g
c3VtMShhLCBiLCBjKQotewotICAgIHJldHVybiBhICsgYiArIGM7Ci19Ci0KLW5vSW5saW5lKHN1
bTEpOwotCi1mdW5jdGlvbiBzdW0yKGEsIGIsIGMpCi17Ci0gICAgcmV0dXJuIGIgKyBhICsgYzsK
LX0KLQotbm9JbmxpbmUoc3VtMik7Ci0KLWZ1bmN0aW9uIHN1bTMoYSwgYiwgYykKLXsKLSAgICBy
ZXR1cm4gYyArIGEgKyBiOwotfQotCi1ub0lubGluZShzdW0zKTsKLQotbGV0IGZ1bmN0aW9ucyA9
IFsgc3VtMSwgc3VtMiwgc3VtMyBdOwotCi1mdW5jdGlvbiB0ZXN0KGEsIGIsIGMpCi17Ci0gICAg
bGV0IHJlc3VsdCA9IDA7Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0MDAwMDAwOyBpKyspCi0g
ICAgICAgIHJlc3VsdCA9IGZ1bmN0aW9uc1tpICUgM10oYSwgYiwgYyk7Ci0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1sZXQgcmVzdWx0ID0gdGVzdCgyLCAxMCwgMzApOwotaWYgKHJlc3VsdCAh
PSA0MikKLSAgICB0aHJvdyAiVW5leHBlY3RlZCByZXN1bHQ6ICIgKyByZXN1bHQ7CmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9jYWxsaW5nLXBvbHktZXh0cmEtYXJpdHktY2Fs
bGVlcy5qcyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2NhbGxpbmctcG9seS1leHRyYS1hcml0
eS1jYWxsZWVzLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjY4MTc5NDU1YTk4
YWFiOTJjMTdiN2NmOGNlYjMyYTQ0OWI0ZWExLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2NhbGxpbmctcG9seS1l
eHRyYS1hcml0eS1jYWxsZWVzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotZnVu
Y3Rpb24gc3VtMShhLCBiKQotewotICAgIHJldHVybiBhICsgYjsKLX0KLQotbm9JbmxpbmUoc3Vt
MSk7Ci0KLWZ1bmN0aW9uIHN1bTIoYSwgYikKLXsKLSAgICByZXR1cm4gYiArIGE7Ci19Ci0KLW5v
SW5saW5lKHN1bTIpOwotCi1mdW5jdGlvbiBzdW0zKGEsIGIpCi17Ci0gICAgcmV0dXJuIGEgKyBi
OwotfQotCi1ub0lubGluZShzdW0zKTsKLQotbGV0IGZ1bmN0aW9ucyA9IFsgc3VtMSwgc3VtMiwg
c3VtMyBdOwotCi1mdW5jdGlvbiB0ZXN0KGEsIGIsIGMpCi17Ci0gICAgbGV0IHJlc3VsdCA9IDA7
Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0MDAwMDAwOyBpKyspCi0gICAgICAgIHJlc3VsdCA9
IGZ1bmN0aW9uc1tpICUgM10oYSwgYiwgYyk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1s
ZXQgcmVzdWx0ID0gdGVzdCgyLCA0MCwgIlRlc3QiKTsKLWlmIChyZXN1bHQgIT0gNDIpCi0gICAg
dGhyb3cgIlVuZXhwZWN0ZWQgcmVzdWx0OiAiICsgcmVzdWx0OwpkaWZmIC0tZ2l0IGEvSlNUZXN0
cy9taWNyb2JlbmNobWFya3MvY2FsbGluZy10YWlsY2FsbC5qcyBiL0pTVGVzdHMvbWljcm9iZW5j
aG1hcmtzL2NhbGxpbmctdGFpbGNhbGwuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDgyOWFmODUxYzVmMGYyMDhjZDYyZDg3NGRiMTVjMjk5Yzk5ZmM5ODIuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3Mv
Y2FsbGluZy10YWlsY2FsbC5qcworKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSJ1c2Ug
c3RyaWN0IjsKLQotZnVuY3Rpb24gc3VtKGEsIGIsIGMpCi17Ci0gICAgcmV0dXJuIGEgKyBiICsg
YzsKLX0KLQotbm9JbmxpbmUoc3VtKTsKLQotZnVuY3Rpb24gdGFpbENhbGxlcihhLCBiLCBjKQot
ewotICAgIHJldHVybiBzdW0oYiwgYSwgYyk7Ci19Ci0KLW5vSW5saW5lKHRhaWxDYWxsZXIpOwot
Ci1mdW5jdGlvbiB0ZXN0KGEsIGIsIGMpCi17Ci0gICAgbGV0IHJlc3VsdCA9IDA7Ci0gICAgZm9y
IChsZXQgaSA9IDA7IGkgPCA0MDAwMDAwOyBpKyspCi0gICAgICAgIHJlc3VsdCA9IHRhaWxDYWxs
ZXIoYSwgYiwgYyk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1sZXQgcmVzdWx0ID0gdGVz
dCgxLCAyLCAzKTsKLWlmIChyZXN1bHQgIT0gNikKLSAgICB0aHJvdyAiVW5leHBlY3RlZCByZXN1
bHQ6ICIgKyByZXN1bHQ7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9jYWxs
aW5nLXZpcnR1YWwtYXJpdHktZml4dXAtY2FsbGVlcy5qcyBiL0pTVGVzdHMvbWljcm9iZW5jaG1h
cmtzL2NhbGxpbmctdmlydHVhbC1hcml0eS1maXh1cC1jYWxsZWVzLmpzCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4ZTcxOTQyNDlhNjQ3ZDkwNzNlODViNzg5NzVmMWY2MDRkZTcxM2Jk
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0pTVGVzdHMv
bWljcm9iZW5jaG1hcmtzL2NhbGxpbmctdmlydHVhbC1hcml0eS1maXh1cC1jYWxsZWVzLmpzCisr
KyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotZnVuY3Rpb24gc3VtMShhLCBiLCBjKQotewot
ICAgIHJldHVybiBhICsgYiArIChjIHwgMCk7Ci19Ci0KLW5vSW5saW5lKHN1bTEpOwotCi1mdW5j
dGlvbiBzdW0yKGEsIGIsIGMpCi17Ci0gICAgcmV0dXJuIGIgKyBhICsgKGMgfCAwKTsKLX0KLQot
bm9JbmxpbmUoc3VtMik7Ci0KLWZ1bmN0aW9uIHN1bTMoYSwgYiwgYykKLXsKLSAgICByZXR1cm4g
KGMgfCAwKSArIGEgKyBiOwotfQotCi1ub0lubGluZShzdW0zKTsKLQotZnVuY3Rpb24gc3VtNChh
LCBiLCBjKQotewotICAgIHJldHVybiAoYyB8IDApICsgYSArIGI7Ci19Ci0KLW5vSW5saW5lKHN1
bTQpOwotCi1mdW5jdGlvbiBzdW01KGEsIGIsIGMpCi17Ci0gICAgcmV0dXJuIChjIHwgMCkgKyBh
ICsgYjsKLX0KLQotbm9JbmxpbmUoc3VtNSk7Ci0KLWZ1bmN0aW9uIHN1bTYoYSwgYiwgYykKLXsK
LSAgICByZXR1cm4gKGMgfCAwKSArIGEgKyBiOwotfQotCi1ub0lubGluZShzdW02KTsKLQotbGV0
IGZ1bmN0aW9ucyA9IFsgc3VtMSwgc3VtMiwgc3VtMywgc3VtNCwgc3VtNSwgc3VtNiBdOwotCi1m
dW5jdGlvbiB0ZXN0KGEsIGIpCi17Ci0gICAgbGV0IHJlc3VsdCA9IDA7Ci0gICAgZm9yIChsZXQg
aSA9IDA7IGkgPCA0MDAwMDAwOyBpKyspCi0gICAgICAgIHJlc3VsdCA9IGZ1bmN0aW9uc1tpICUg
Nl0oYSwgYik7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1sZXQgcmVzdWx0ID0gdGVzdCgy
LCA0MCk7Ci1pZiAocmVzdWx0ICE9IDQyKQotICAgIHRocm93ICJVbmV4cGVjdGVkIHJlc3VsdDog
IiArIHJlc3VsdDsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2NhbGxpbmct
dmlydHVhbC1hcml0eS1maXh1cC1zdGFja2FyZ3MuanMgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9jYWxsaW5nLXZpcnR1YWwtYXJpdHktZml4dXAtc3RhY2thcmdzLmpzCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBmNDkyMDY4NDg0ZDg2ZTkwZGVjZWY5MDIzZWZiNGQ4ODdiMDBlNGE2
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0pTVGVzdHMv
bWljcm9iZW5jaG1hcmtzL2NhbGxpbmctdmlydHVhbC1hcml0eS1maXh1cC1zdGFja2FyZ3MuanMK
KysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi1mdW5jdGlvbiBzdW0xKGEsIGIsIGMsIGQp
Ci17Ci0gICAgcmV0dXJuIGEgKyBiICsgYyArIChkIHwgMCk7Ci19Ci0KLW5vSW5saW5lKHN1bTEp
OwotCi1mdW5jdGlvbiBzdW0yKGEsIGIsIGMsIGQpCi17Ci0gICAgcmV0dXJuIGIgKyBhICsgYyAr
IChkIHwgMCk7Ci19Ci0KLW5vSW5saW5lKHN1bTIpOwotCi1mdW5jdGlvbiBzdW0zKGEsIGIsIGMs
IGQpCi17Ci0gICAgcmV0dXJuIChkIHwgMCkgKyBhICsgYiArIGM7Ci19Ci0KLW5vSW5saW5lKHN1
bTMpOwotCi1mdW5jdGlvbiBzdW00KGEsIGIsIGMsIGQpCi17Ci0gICAgcmV0dXJuIChkIHwgMCkg
KyBhICsgYiArIGM7Ci19Ci0KLW5vSW5saW5lKHN1bTQpOwotCi1mdW5jdGlvbiBzdW01KGEsIGIs
IGMsIGQpCi17Ci0gICAgcmV0dXJuIChkIHwgMCkgKyBhICsgYiArIGM7Ci19Ci0KLW5vSW5saW5l
KHN1bTUpOwotCi1mdW5jdGlvbiBzdW02KGEsIGIsIGMsIGQpCi17Ci0gICAgcmV0dXJuIChkIHwg
MCkgKyBhICsgYiArIGM7Ci19Ci0KLW5vSW5saW5lKHN1bTYpOwotCi1sZXQgZnVuY3Rpb25zID0g
WyBzdW0xLCBzdW0yLCBzdW0zLCBzdW00LCBzdW01LCBzdW02IF07Ci0KLWZ1bmN0aW9uIHRlc3Qo
YSwgYiwgYykKLXsKLSAgICBsZXQgcmVzdWx0ID0gMDsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8
IDQwMDAwMDA7IGkrKykKLSAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zW2kgJSA2XShhLCBiLCBj
KTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWxldCByZXN1bHQgPSB0ZXN0KDIsIDEwLCAz
MCk7Ci1pZiAocmVzdWx0ICE9IDQyKQotICAgIHRocm93ICJVbmV4cGVjdGVkIHJlc3VsdDogIiAr
IHJlc3VsdDsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2NhbGxpbmctdmly
dHVhbC1jYWxsZWVzLmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvY2FsbGluZy12aXJ0dWFs
LWNhbGxlZXMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2YmE2MWJlOWRjYzM2
ZmVhZGI2ODExODU5ZjE4M2U1NTY3N2ExZTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvY2FsbGluZy12aXJ0dWFs
LWNhbGxlZXMuanMKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi1mdW5jdGlvbiBzdW0x
KGEsIGIsIGMpCi17Ci0gICAgcmV0dXJuIGEgKyBiICsgYzsKLX0KLQotbm9JbmxpbmUoc3VtMSk7
Ci0KLWZ1bmN0aW9uIHN1bTIoYSwgYiwgYykKLXsKLSAgICByZXR1cm4gYiArIGEgKyBjOwotfQot
Ci1ub0lubGluZShzdW0yKTsKLQotZnVuY3Rpb24gc3VtMyhhLCBiLCBjKQotewotICAgIHJldHVy
biBjICsgYSArIGI7Ci19Ci0KLW5vSW5saW5lKHN1bTMpOwotCi1mdW5jdGlvbiBzdW00KGEsIGIs
IGMpCi17Ci0gICAgcmV0dXJuIGMgKyBhICsgYjsKLX0KLQotbm9JbmxpbmUoc3VtNCk7Ci0KLWZ1
bmN0aW9uIHN1bTUoYSwgYiwgYykKLXsKLSAgICByZXR1cm4gYyArIGEgKyBiOwotfQotCi1ub0lu
bGluZShzdW01KTsKLQotZnVuY3Rpb24gc3VtNihhLCBiLCBjKQotewotICAgIHJldHVybiBjICsg
YSArIGI7Ci19Ci0KLW5vSW5saW5lKHN1bTYpOwotCi1sZXQgZnVuY3Rpb25zID0gWyBzdW0xLCBz
dW0yLCBzdW0zLCBzdW00LCBzdW01LCBzdW02IF07Ci0KLWZ1bmN0aW9uIHRlc3QoYSwgYiwgYykK
LXsKLSAgICBsZXQgcmVzdWx0ID0gMDsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDAwMDA7
IGkrKykKLSAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zW2kgJSA2XShhLCBiLCBjKTsKLQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLWxldCByZXN1bHQgPSB0ZXN0KDIsIDEwLCAzMCk7Ci1pZiAo
cmVzdWx0ICE9IDQyKQotICAgIHRocm93ICJVbmV4cGVjdGVkIHJlc3VsdDogIiArIHJlc3VsdDsK
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2NhbGxpbmctdmlydHVhbC1leHRy
YS1hcml0eS1jYWxsZWVzLmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvY2FsbGluZy12aXJ0
dWFsLWV4dHJhLWFyaXR5LWNhbGxlZXMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGYxMDdlYzZhNjdlMmY3YjYzZTlmYjgyODhlNTI1NzZmNmM2MzAyYjkuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3Mv
Y2FsbGluZy12aXJ0dWFsLWV4dHJhLWFyaXR5LWNhbGxlZXMuanMKKysrIC9kZXYvbnVsbApAQCAt
MSw1NiArMCwwIEBACi1mdW5jdGlvbiBzdW0xKGEsIGIpCi17Ci0gICAgcmV0dXJuIGEgKyBiOwot
fQotCi1ub0lubGluZShzdW0xKTsKLQotZnVuY3Rpb24gc3VtMihhLCBiKQotewotICAgIHJldHVy
biBiICsgYTsKLX0KLQotbm9JbmxpbmUoc3VtMik7Ci0KLWZ1bmN0aW9uIHN1bTMoYSwgYikKLXsK
LSAgICByZXR1cm4gYSArIGI7Ci19Ci0KLW5vSW5saW5lKHN1bTMpOwotCi1mdW5jdGlvbiBzdW00
KGEsIGIpCi17Ci0gICAgcmV0dXJuIGEgKyBiOwotfQotCi1ub0lubGluZShzdW00KTsKLQotZnVu
Y3Rpb24gc3VtNShhLCBiKQotewotICAgIHJldHVybiBhICsgYjsKLX0KLQotbm9JbmxpbmUoc3Vt
NSk7Ci0KLWZ1bmN0aW9uIHN1bTYoYSwgYikKLXsKLSAgICByZXR1cm4gYSArIGI7Ci19Ci0KLW5v
SW5saW5lKHN1bTYpOwotCi1sZXQgZnVuY3Rpb25zID0gWyBzdW0xLCBzdW0yLCBzdW0zLCBzdW00
LCBzdW01LCBzdW02IF07Ci0KLWZ1bmN0aW9uIHRlc3QoYSwgYiwgYykKLXsKLSAgICBsZXQgcmVz
dWx0ID0gMDsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDAwMDA7IGkrKykKLSAgICAgICAg
cmVzdWx0ID0gZnVuY3Rpb25zW2kgJSA2XShhLCBiLCBjKTsKLQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLWxldCByZXN1bHQgPSB0ZXN0KDQwLCAyLCAiVGVzdCIpOwotaWYgKHJlc3VsdCAhPSA0
MikKLSAgICB0aHJvdyAiVW5leHBlY3RlZCByZXN1bHQ6ICIgKyByZXN1bHQ7CmRpZmYgLS1naXQg
YS9KU1Rlc3RzL3N0cmVzcy9yZWdyZXNzLTE2NTcyOC5qcyBiL0pTVGVzdHMvc3RyZXNzL3JlZ3Jl
c3MtMTY1NzI4LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDRkZTMyZWQxNTFl
NTExMjM2Mjg5MjA4YjU0ZDA4ODY1Njg3MjZkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL0pTVGVzdHMvc3RyZXNzL3JlZ3Jlc3MtMTY1NzI4LmpzCisrKyAv
ZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLy8gVGVzdCBmb3IgUkVHUkVTU0lPTihyMjA5NjUz
KSBDcmFzaCBpbiBDYWxsRnJhbWVTaHVmZmxlcjo6c25hcHNob3QoKSAtIFRoaXMgdGVzdCBzaG91
bGRuJ3QgY3Jhc2guCi0idXNlIHN0cmljdCI7Ci0KLWZ1bmN0aW9uIHN1bTEoYSwgYiwgYykKLXsK
LSAgICByZXR1cm4gYSArIGIgKyBjOwotfQotCi1ub0lubGluZShzdW0xKTsKLQotZnVuY3Rpb24g
c3VtMihhLCBiLCBjKQotewotICAgIHJldHVybiBhICsgYiArIGM7Ci19Ci0KLW5vSW5saW5lKHN1
bTIpOwotCi1mdW5jdGlvbiB0YWlsQ2FsbGVyKGYsIGEsIGIpCi17Ci0gICAgcmV0dXJuIGYoYSwg
YiwgYSkKLX0KLQotbm9JbmxpbmUodGFpbENhbGxlcik7Ci0KLWZ1bmN0aW9uIHRlc3QoYSwgYikK
LXsKLSAgICBsZXQgcmVzdWx0ID0gMDsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDAwMDA7
IGkrKykKLSAgICAgICAgcmVzdWx0ID0gdGFpbENhbGxlcihpICUgMiA/IHN1bTEgOiBzdW0yLCBh
LCBiKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWxldCByZXN1bHQgPSB0ZXN0KDIwLCAy
KTsKLWlmIChyZXN1bHQgIT0gNDIpCi0gICAgdGhyb3cgIlVuZXhwZWN0ZWQgcmVzdWx0OiAiICsg
cmVzdWx0Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>