<?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>230806</bug_id>
          
          <creation_ts>2021-09-26 14:17:42 -0700</creation_ts>
          <short_desc>REGRESSION(r283083): Windows pors are crashing</short_desc>
          <delta_ts>2021-09-26 14:22:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>229223</blocked>
    
    <blocked>230798</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>fujii</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1797300</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2021-09-26 14:17:42 -0700</bug_when>
    <thetext>https://commits.webkit.org/r283083 introduced a regression:
Windows pors are crashing

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>1797304</commentid>
    <comment_count>1</comment_count>
      <attachid>439297</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2021-09-26 14:18:28 -0700</bug_when>
    <thetext>Created attachment 439297
REVERT of r283083

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 revert will be successful.  This process takes approximately 15 minutes.

If you would like to land the revert 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>1797307</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-09-26 14:21:01 -0700</bug_when>
    <thetext>Committed r283089 (242147@main): &lt;https://commits.webkit.org/242147@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 439297.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797308</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-09-26 14:22:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/83552585&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439297</attachid>
            <date>2021-09-26 14:18:28 -0700</date>
            <delta_ts>2021-09-26 14:21:03 -0700</delta_ts>
            <desc>REVERT of r283083</desc>
            <filename>bug-230806-20210926141828.patch</filename>
            <type>text/plain</type>
            <size>651257</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzMDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
YmVkYjA2ZDIzZWVjYjZmMDVhZjA1NzQ0YjkyZDYyZTgxMjk4MzU2Li42YzNkN2I3ZThlNWMzYzU2
ODBmZTNkYWU2MzQ3ZGM3NmYxNzFhY2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMSBAQAorMjAyMS0wOS0yNiAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyODMwODMgYW5kIHIyODMw
ODguCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzA4
MDYKKworICAgICAgICBXaW5kb3dzIHBvcnMgYXJlIGNyYXNoaW5nCisKKyAgICAgICAgUmV2ZXJ0
ZWQgY2hhbmdlc2V0czoKKworICAgICAgICAiQnVpbGQgYW4gdW5saW5rZWQgYmFzZWxpbmUgSklU
IgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjIz
CisgICAgICAgIGh0dHBzOi8vY29tbWl0cy53ZWJraXQub3JnL3IyODMwODMKKworICAgICAgICAi
TWFrZSBieXRlIGNvZGVzIHdpdGggYXJpdGhtZXRpYyBwcm9maWxlcyBzd2l0Y2ggdG8gdXNpbmcg
YW4KKyAgICAgICAgaW5kZXggaW5zdGVhZCBvZiBhIHBvaW50ZXIgaW4gbWV0YWRhdGEiCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzA3OTgKKyAgICAg
ICAgaHR0cHM6Ly9jb21taXRzLndlYmtpdC5vcmcvcjI4MzA4OAorCiAyMDIxLTA5LTI2ICBTYWFt
IEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgYnl0ZSBjb2RlcyB3
aXRoIGFyaXRobWV0aWMgcHJvZmlsZXMgc3dpdGNoIHRvIHVzaW5nIGFuIGluZGV4IGluc3RlYWQg
b2YgYSBwb2ludGVyIGluIG1ldGFkYXRhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGM3MDQ1ZjI3ZDdmM2FhYjZmZTQ1OTc2OTVm
OTcyOTNjNmNiOGU2NjkuLmQyNTJiYjM1ZmNiMTExZDFkZjc3NTRjNjVjYjRkZjBjZmJjNTEyMWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjEtMDktMjYgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1x
dWV1ZUB3ZWJraXQub3JnPgorCisgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjgzMDgz
IGFuZCByMjgzMDg4LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjMwODA2CisKKyAgICAgICAgV2luZG93cyBwb3JzIGFyZSBjcmFzaGluZworCisgICAg
ICAgIFJldmVydGVkIGNoYW5nZXNldHM6CisKKyAgICAgICAgIkJ1aWxkIGFuIHVubGlua2VkIGJh
c2VsaW5lIEpJVCIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyOTIyMworICAgICAgICBodHRwczovL2NvbW1pdHMud2Via2l0Lm9yZy9yMjgzMDgzCisK
KyAgICAgICAgIk1ha2UgYnl0ZSBjb2RlcyB3aXRoIGFyaXRobWV0aWMgcHJvZmlsZXMgc3dpdGNo
IHRvIHVzaW5nIGFuCisgICAgICAgIGluZGV4IGluc3RlYWQgb2YgYSBwb2ludGVyIGluIG1ldGFk
YXRhIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMw
Nzk4CisgICAgICAgIGh0dHBzOi8vY29tbWl0cy53ZWJraXQub3JnL3IyODMwODgKKwogMjAyMS0w
OS0yNSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBCdWlsZCBh
biB1bmxpbmtlZCBiYXNlbGluZSBKSVQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApp
bmRleCA4ODAyZGMyYzdmNzg2NTFmOTE2ZTVhZjQwNDkwMDQ0OTkxMDE5YzcwLi4yZmQyMGQ3ZGVm
OTJiNjRkMTk0YTc1NGFlZDFmMWFjYmI4YmU5YThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CkBAIC02MTEsNyArNjExLDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBidWlsdGlucy9CdWlsdGluTmFtZXMuaAogICAgIGJ1aWx0
aW5zL0J1aWx0aW5VdGlscy5oCiAKLSAgICBieXRlY29kZS9Bcml0aFByb2ZpbGUuaAogICAgIGJ5
dGVjb2RlL0FycmF5QWxsb2NhdGlvblByb2ZpbGUuaAogICAgIGJ5dGVjb2RlL0FycmF5UHJvZmls
ZS5oCiAgICAgYnl0ZWNvZGUvQnl0ZWNvZGVDb252ZW50aW9ucy5oCkBAIC04MzgsNyArODM3LDYg
QEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIGpp
dC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oCi0g
ICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVycy5oCiAgICAgaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVtb3J5SGFuZGxlLmgK
QEAgLTg3Nyw3ICs4NzUsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktf
SEVBREVSUwogICAgIHBhcnNlci9QYXJzZXJFcnJvci5oCiAgICAgcGFyc2VyL1BhcnNlck1vZGVz
LmgKICAgICBwYXJzZXIvUGFyc2VyVG9rZW5zLmgKLSAgICBwYXJzZXIvUmVzdWx0VHlwZS5oCiAg
ICAgcGFyc2VyL1NvdXJjZUNvZGUuaAogICAgIHBhcnNlci9Tb3VyY2VQcm92aWRlci5oCiAgICAg
cGFyc2VyL1NvdXJjZVByb3ZpZGVyQ2FjaGUuaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBjZDk4MGZmNGMxMGM2MjZlOTU4MmU3MjNmYWYyODAxNGRkZGVkN2QzLi5lZTg2YmE4ZGMw
YmI5Y2FiZjRiMTM0Y2IxMzI0ZDI0MTZmY2NmOWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtOTAwLDcgKzkwMCw2IEBACiAJCTUyQ0QwRjVEMjI0MkY1NjkwMDRBMThBNSAvKiBG
b3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1l
d29yayAqLzsgfTsKIAkJNTJDRDBGNUUyMjQyRjU2OTAwNEExOEE1IC8qIEphdmFTY3JpcHRDb3Jl
LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsg
Ki87IH07CiAJCTUyQ0QwRjY4MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0QwRjY3MjI0MkY3MUMw
MDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAqLzsgfTsKLQkJNTJERDAwMDgyNkUwMzlCOTAwNTRFNDA4
IC8qIEJhc2VsaW5lSklUQ29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTJERDAwMDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyRUVE
Nzk0MjQ5MkI4NzAwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJFRUQ3OTMyNDkyQjg2ODAwOEY0Qzkz
IC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi87IH07CiAJCTUyRjZDMzVFMUU3MUVCMDgwMDgxRjRD
QyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IH07CiAJCTUzMEE2NkI5MUZBM0U3OEIwMDI2QTU0
NSAvKiBVbmlmaWVkU291cmNlMy1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzMEE2NkIxMUZBM0U3N0EwMDI2QTU0NSAvKiBVbmlmaWVkU291cmNl
My1tbS5tbSAqLzsgfTsKQEAgLTEyMjEsNyArMTIyMCw3IEBACiAJCTc5ODcyQzQ4MjIxQkJBRjMw
MDhDNjk2OSAvKiBKU0Jhc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzk4NzJDNDcyMjFCQkFFRDAwOEM2OTY5IC8qIEpTQmFzZUludGVy
bmFsLmggKi87IH07CiAJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5N
YXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVG
N0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUEwOTA4MDFENzY4NDY1MDA4Qjg4
OUIgLyogSGFzaE1hcEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5QTA5MDdFMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTc5QTIyODM2MUQz
NUQ3MUYwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QTIyODM0MUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFBy
b2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFFMDBEOEUw
NjcgLyogQXJpdGhQcm9maWxlLmggKi87IH07CiAJCTc5QUJCMTdFMUU1Q0NCNTcwMDQ1QjlBNiAv
KiBBaXJEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5QUJCMTdDMUU1Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUFDMzBG
RjFGOTk1MzY0MDA0ODRGRDcgLyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUFDMzBGRTFGOTk1
MzYzMDA0ODRGRDcgLyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmggKi87IH07CiAJ
CTc5QUYwQkU0MUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUYwQkUzMUQzRUZE
NEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzY3NSw4ICszNjc0LDYgQEAKIAkJNTJD
RDBGNjQyMjQyRjU2OTAwNEExOEE1IC8qIHRlc3RkZmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGlu
Y2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3RkZmc7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07CiAJCTUyQ0QwRjY3MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RkZmcuY3BwOyBwYXRoID0g
ZGZnL3Rlc3RkZmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkQxMzA4RjIy
MUNFMDNBMDA5QzgzNkMgLyogZm9vLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0
OyBwYXRoID0gZm9vLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MkREMDAwNjI2
RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2Vs
aW5lSklUQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MkREMDAwNzI2RTAz
OUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJh
c2VsaW5lSklUQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRUVENzky
MjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGdW5jdGlvbkFsbG93bGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUyRUVENzkzMjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGdW5jdGlvbkFsbG93bGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MkY2QzM1QjFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI3OSw4ICs2Mjc2LDYgQEAKIAkJCQk2
Qjc2N0U3QTI2NzkxRjI3MDAxN0Y4RDEgLyogQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMuaCAqLywK
IAkJCQk3MjM5OThGNjI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmNwcCAqLywK
IAkJCQk3MjM5OThGNTI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmggKi8sCi0J
CQkJNTJERDAwMDcyNkUwMzlCNDAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5jcHAgKi8sCi0J
CQkJNTJERDAwMDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovLAogCQkJ
CTBGNjRCMjZGMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBG
NjRCMjcwMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAqLywKIAkJCQk2NUI4Mzky
RDFCQUNBOUQzMDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuY3BwICovLApAQCAtOTczNSw3ICs5
NzMwLDYgQEAKIAkJCQkwRjIwMTc4MjFEQ0FERDQyMDBFQTU5NTAgLyogREZHRmxvd01hcC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRB
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Zs
dXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDgg
LyogQmFzZWxpbmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJF
MDBCQkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjlDQzg5
MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTM4NkZEN0UyNkU4NjdCODAwRTRDMjhCIC8qIFRlbXBvcmFsUGxhaW5UaW1lLmggaW4gSGVhZGVy
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCBhODU5NzNlN2VkY2UxYjgzNzEx
ZTAyOTE5NzJhMzFhNDQ2YWY4NTEwLi44NDZlOWVlNzVmZWQwNTQ3NTU2YzRiZmQ0YTI2MWQ4MGQ1
OWFmYmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC02MTksNyArNjE5LDYgQEAg
aW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAKIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5j
cHAKIAogaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKLWppdC9CYXNlbGluZUpJVENvZGUuY3BwCiBq
aXQvQmFzZWxpbmVKSVRQbGFuLmNwcAogaml0L0JpbmFyeVN3aXRjaC5jcHAKIGppdC9DQ2FsbEhl
bHBlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNj
ZXNzQ2FzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5j
cHAKaW5kZXggZDFhZTNiNTUzNTY1Y2VhNWZhZDkwOTEwNDc4Y2U0Mjk2YTU5MzZkNi4uMDgyNGU2
ZWI5NWQyNzYyYzA3OTdhYzU1MmI2NjJkYzlkNGFmZDY2MCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcApAQCAtMjAyLDE1ICsyMDIsMTUgQEAgUmVm
UHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbygKICAgICBz
d2l0Y2ggKHN0dWJJbmZvLmNhY2hlVHlwZSgpKSB7CiAgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5
SWRTZWxmOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50
aWZpZXIpOwotICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBv
d25lciwgTG9hZCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQsIHN0dWJJbmZv
LmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKKyAgICAgICAgcmV0dXJuIFByb3h5YWJs
ZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIExvYWQsIGlkZW50aWZpZXIsIHN0dWJJbmZv
LnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUu
Z2V0KCkpOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICBy
ZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmllciwg
c3R1YkluZm8uYnlJZFNlbGZPZmZzZXQsIHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1
cmUodm0pKTsKKyAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIFJl
cGxhY2UsIGlkZW50aWZpZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5t
X2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCkpOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6
OkluQnlJZFNlbGY6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50
SWRlbnRpZmllcik7Ci0gICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVy
LCBJbkhpdCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQsIHN0dWJJbmZvLmlu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKKyAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6
OmNyZWF0ZSh2bSwgb3duZXIsIEluSGl0LCBpZGVudGlmaWVyLCBzdHViSW5mby51LmJ5SWRTZWxm
Lm9mZnNldCwgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpKTsKIAog
ICAgIGNhc2UgQ2FjaGVUeXBlOjpBcnJheUxlbmd0aDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
c3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKQEAgLTE5ODUsMTAgKzE5ODUsMTQgQEAg
dm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0
ZSkKICAgICAgICAgLy8gU3R1ZmYgZm9yIGN1c3RvbSBnZXR0ZXJzL3NldHRlcnMuCiAgICAgICAg
IENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsOwogCi0KICAgICAgICAgLy8gVGhpcyBh
bHNvIGRvZXMgdGhlIG5lY2Vzc2FyeSBjYWxjdWxhdGlvbnMgb2Ygd2hldGhlciBvciBub3Qgd2Un
cmUgYW4KICAgICAgICAgLy8gZXhjZXB0aW9uIGhhbmRsaW5nIGNhbGwgc2l0ZS4KLSAgICAgICAg
QWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVz
ZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgpOworICAgICAgICBSZWdpc3RlclNldCBl
eHRyYVJlZ2lzdGVyc1RvUHJlc2VydmU7CisjaWYgQ1BVKEFSTTY0KQorICAgICAgICBpZiAoY29k
ZUJsb2NrLT51c2VEYXRhSUMoKSkKKyAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2
ZS5zZXQoQVJNNjRSZWdpc3RlcnM6OmxyKTsKKyNlbmRpZgorICAgICAgICBBY2Nlc3NHZW5lcmF0
aW9uU3RhdGU6OlNwaWxsU3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lz
dGVyc1RvU3RhY2tGb3JDYWxsKGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CiAKICAgICAgICAg
YXV0byByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwgPSBbJl0oQWNjZXNzR2Vu
ZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlJiBzcGlsbFN0YXRlLCBib29sIGNhbGxIYXNSZXR1cm5W
YWx1ZSkgewogICAgICAgICAgICAgUmVnaXN0ZXJTZXQgZG9udFJlc3RvcmU7CkBAIC0yMDc1LDcg
KzIwNzksOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9u
U3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgQVNTRVJUKCEobnVtYmVyT2ZSZWdzRm9yQ2FsbCAl
IHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpKTsKICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mQnl0ZXNGb3JDYWxsID0gbnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdpc3Rlcikg
LSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CiAKLSAgICAgICAgICAgIHVuc2lnbmVkIGFsaWdu
ZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0Fs
aWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCA9CisgICAgICAgICAgICBXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2Fs
bCk7CiAKICAgICAgICAgICAgIGppdC5zdWJQdHIoCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKQEAgLTIxMzMs
NyArMjEzOCw2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRp
b25TdGF0ZSYgc3RhdGUpCiAKICAgICAgICAgICAgIGludCBzdGFja1BvaW50ZXJPZmZzZXQgPSAo
Y29kZUJsb2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpIC0gc3Rh
dGUucHJlc2VydmVkUmV1c2VkUmVnaXN0ZXJTdGF0ZS5udW1iZXJPZkJ5dGVzUHJlc2VydmVkIC0g
c3BpbGxTdGF0ZS5udW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb247
CiAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLQogICAgICAgICAgICAgYm9vbCBjYWxsSGFzUmV0dXJu
VmFsdWUgPSBpc0dldHRlcigpOwogICAgICAgICAgICAgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9t
U3RhY2tGb3JDYWxsKHNwaWxsU3RhdGUsIGNhbGxIYXNSZXR1cm5WYWx1ZSk7CiAKQEAgLTIyNjAs
NyArMjI2NCwxMiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0
aW9uU3RhdGUmIHN0YXRlKQogCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsK
IAotICAgICAgICAgICAgYXV0byBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0
ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucygpOworICAgICAgICAgICAgUmVnaXN0
ZXJTZXQgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlOworI2lmIENQVShBUk02NCkKKyAgICAgICAg
ICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQorICAgICAgICAgICAgICAgIGV4dHJhUmVn
aXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoQVJNNjRSZWdpc3RlcnM6OmxyKTsKKyNlbmRpZgorICAgICAg
ICAgICAgYXV0byBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFj
a0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucyhleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUpOwogCiAg
ICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uV3JpdGVCYXJy
aWVyU2xvd1BhdGgpPihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgc2NyYXRjaEdQ
Uik7CiAgICAgICAgICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwpAQCAtMjM1NSw2
ICsyMzY0LDEwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRp
b25TdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgZXh0cmFSZWdpc3Rl
cnNUb1ByZXNlcnZlOwogICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5z
ZXQoYmFzZUdQUik7CiAgICAgICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlLnNl
dCh2YWx1ZVJlZ3MpOworI2lmIENQVShBUk02NCkKKyAgICAgICAgICAgICAgICBpZiAoY29kZUJs
b2NrLT51c2VEYXRhSUMoKSkKKyAgICAgICAgICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1By
ZXNlcnZlLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOworI2VuZGlmCiAgICAgICAgICAgICAgICAg
QWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVz
ZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUp
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKaW5kZXggZTc0ZDI5
N2M5MTYyZWNjNDQyMzMwMzNhZDkzNGU0YjY5ODEzMzE3Zi4uYjZkODM0OTUyMzU3M2FkMTJhMTFi
MDMwOTM5MDdmY2NhY2U5N2M4ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXN0LnJiCkBAIC02NCw2ICs2NCw4IEBAIHR5cGVzIFsKIAogICAgIDpWYWx1
ZVByb2ZpbGUsCiAgICAgOlZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciwKKyAg
ICA6VW5hcnlBcml0aFByb2ZpbGUsCisgICAgOkJpbmFyeUFyaXRoUHJvZmlsZSwKICAgICA6QXJy
YXlQcm9maWxlLAogICAgIDpBcnJheUFsbG9jYXRpb25Qcm9maWxlLAogICAgIDpPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZSwKQEAgLTI4Nyw4ICsyODksMTAgQEAgb3BfZ3JvdXAgOlByb2ZpbGVkQmlu
YXJ5T3AsCiAgICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBsaHM6IFZpcnR1
YWxSZWdpc3RlciwKICAgICAgICAgcmhzOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIHByb2Zp
bGVJbmRleDogdW5zaWduZWQsCiAgICAgICAgIG9wZXJhbmRUeXBlczogT3BlcmFuZFR5cGVzLAor
ICAgIH0sCisgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0
aFByb2ZpbGUKICAgICB9CiAKIG9wX2dyb3VwIDpWYWx1ZVByb2ZpbGVkQmluYXJ5T3AsCkBAIC0z
NDcsNyArMzUxLDkgQEAgb3BfZ3JvdXAgOlVuYXJ5SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwK
ICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBw
cm9maWxlSW5kZXg6IHVuc2lnbmVkLAorICAgIH0sCisgICAgbWV0YWRhdGE6IHsKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZQogICAgIH0KIAogb3AgOnRvX29iamVjdCwK
QEAgLTM3Nyw4ICszODMsMTAgQEAgb3AgOm5lZ2F0ZSwKICAgICBhcmdzOiB7CiAgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCi0g
ICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWduZWQsCiAgICAgICAgIHJlc3VsdFR5cGU6IFJlc3Vs
dFR5cGUsCisgICAgfSwKKyAgICBtZXRhZGF0YTogeworICAgICAgICBhcml0aFByb2ZpbGU6IFVu
YXJ5QXJpdGhQcm9maWxlLAogICAgIH0KIAogb3AgOm5vdCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3Bv
aW50LmgKaW5kZXggNGY0N2M4YmNjZjhlNTc0OGFhOWIwZjM2ZTZmMzYzMDVhZGMzMDAxMS4uNWI4
ZGFmZTk2MTEzMWYxMGQzYjYzMTRkYjBlNWY4YWRjYjE5NTMzMSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JD
aGVja3BvaW50LmgKQEAgLTczLDI4ICs3Myw2IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxl
Rm9ySW1wbChCeXRlY29kZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2luCiAg
ICAgICAgIHJldHVybiAmbWV0YWRhdGEubV9wcm9maWxlOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGU+Ci11aW50cHRyX3QgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yKHVuc2lnbmVkIGNo
ZWNrcG9pbnRJbmRleCkKLXsKLSAgICBVTlVTRURfUEFSQU0oY2hlY2twb2ludEluZGV4KTsKLSAg
ICBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9vcGVuKSB7
Ci0gICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7Ci0gICAgICAgIGNhc2UgT3BJdGVy
YXRvck9wZW46OnN5bWJvbENhbGw6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9m
SXRlcmF0b3JQcm9maWxlKCk7Ci0gICAgICAgIGNhc2UgT3BJdGVyYXRvck9wZW46OmdldE5leHQ6
IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mTmV4dFByb2ZpbGUoKTsKLSAgICAg
ICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotCi0g
ICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9y
X25leHQpIHsKLSAgICAgICAgc3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKLSAgICAgICAgY2Fz
ZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6
Om9mZnNldE9mTmV4dFJlc3VsdFByb2ZpbGUoKTsKLSAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4
dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZEb25lUHJvZmls
ZSgpOwotICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXRWYWx1ZTogcmV0dXJuIEJ5dGVj
b2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZWYWx1ZVByb2ZpbGUoKTsKLSAgICAgICAgZGVmYXVsdDog
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSAKLSAg
ICAgICAgcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCk7Ci19Ci0K
IHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmls
ZUZvcihCeXRlY29kZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNw
cAppbmRleCA4YjBiMTM1ZDE2NDkyMTY0YTA4NjgwNTFjNjNhYjEwMjI1ZDllZTMwLi44MGY0MDQ1
YTMzMTRjMjY1NTQyMTQ3ODVjZTE2MDMwNWRiZjc3ZTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcApAQCAtMTE0LDYgKzExNCwxMSBAQCB2
b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2bSkKICAgICBSRUxFQVNFX0FTU0VSVCghaXNP
bkxpc3QoKSk7CiB9CiAKK0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxM
aW5rSW5mbzo6ZmFzdFBhdGhTdGFydCgpCit7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFM
YWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPihtX2Zhc3RQYXRoU3RhcnQpOworfQorCiBDb2RlTG9j
YXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQo
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RhdGFJQygpKTsKQEAgLTIyMCwxMiArMjI1LDYg
QEAgdm9pZCBDYWxsTGlua0luZm86OnNldE1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKHVu
c2lnbmVkIHZhbHVlKQogICAgIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSB2YWx1
ZTsKIH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZv
OjpmYXN0UGF0aFN0YXJ0KCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChpc0RpcmVjdCgpICYmIGlz
VGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVy
bmFsUHRyVGFnPih1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQpOwotfQotCiB2b2lkIENhbGxMaW5r
SW5mbzo6dmlzaXRXZWFrKFZNJiB2bSkKIHsKICAgICBhdXRvIGhhbmRsZVNwZWNpZmljQ2FsbGVl
ID0gWyZdIChKU0Z1bmN0aW9uKiBjYWxsZWUpIHsKQEAgLTI5OSwxMSArMjk4LDIzIEBAIHZvaWQg
Q2FsbExpbmtJbmZvOjpzZXRGcmFtZVNodWZmbGVEYXRhKGNvbnN0IENhbGxGcmFtZVNodWZmbGVE
YXRhJiBzaHVmZmxlRGF0YSkKICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7
CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0
aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlD
LCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENh
bGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJ
bXBsKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFy
ZUZvclRhaWxDYWxsKQogeworICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7CisgICAgaWYg
KGlzRGF0YUlDKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9
IEdQUlJlZzo6SW52YWxpZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMu
bV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgYXV0byBm
YXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CisgICAgfSk7
CisKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogCi0gICAgaWYgKHVzZURh
dGFJQyA9PSBVc2VEYXRhSUM6OlllcykgeworICAgIGlmIChpc0RhdGFJQygpKSB7CiAgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gaml0LnNjcmF0Y2hSZWdpc3RlcigpOwogICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZkNh
bGxlZSgpKSwgc2NyYXRjaEdQUik7IAogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ29Qb2x5
bW9ycGhpYzsKQEAgLTMxMiw3ICszMjMsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbgogICAg
ICAgICAgICAgZ29Qb2x5bW9ycGhpYyA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6
Tm9uWmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocG9seW1vcnBo
aWNDYWxsZWVNYXNrKSk7CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0
cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBjYWxsZWVHUFIpKTsKICAgICAg
ICAgfQotICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCgp
KSB7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGdvUG9s
eW1vcnBoaWMubGluaygmaml0KTsgLy8gUG9seW1vcnBoaWMgc3R1YiBoYW5kbGVzIHRhaWwgY2Fs
bCBzdGFjayBwcmVwLgogICAgICAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbigp
KSwgSlNFbnRyeVB0clRhZyk7CkBAIC0zMjUsMTYgKzMzNiwxNCBAQCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbgogICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChD
Q2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNh
bGwgY2FsbDsKLSAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKKyAgICAgICAgaWYgKGlzVGFpbENh
bGwoKSkgewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBj
YWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNh
bGwgPSBqaXQubmVhckNhbGwoKTsKLQotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0lu
Zm8pOwogICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7Ci0gICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0g
ICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hlY2spOworICAgICAg
ICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKKyAgICAgICAgICAgIHUuY29kZUlDLm1fY2Fs
bGVlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2Fs
bGVlQ2hlY2spOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTM0NCwzNCArMzUzLDEzIEBAIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2Fs
bExpbmtJbmZvKiBjYWxsTGlua0luCiBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IENhbGxMaW5rSW5m
bzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJS
ZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKCFpc1RhaWxDYWxsKCkpOwotICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7Ci0K
LSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0lu
Zm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwotICAgICAgICB1
LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJ
bmZvR1BSLCB1c2VEYXRhSUMsIGlzVGFpbENhbGwoKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIGVt
aXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlD
LCBudWxscHRyKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIs
IFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0
YUlDIHVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkK
IHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1RhaWxDYWxsKCkpOwotICAgIHNldFVzZXNEYXRhSUNz
KFVzZURhdGFJQzo6Tm8pOwotICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwg
Y2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdU
Rk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Ci19Ci0KLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKLXsKLSAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOwotICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
Qzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHJldHVybiBl
bWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJ
QywgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKIH0KIAogdm9pZCBDYWxsTGlua0luZm86
OmVtaXRTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0KQpAQCAtMzgxLDMyICszNjks
MTcgQEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVy
cyYgaml0KQogICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdU
Miwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CiB9
CiAKLXZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKLXsKLSAgICBqaXQubW92ZShjYWxsTGlu
a0luZm9HUFIsIEdQUkluZm86OnJlZ1QyKTsKLSAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSks
IEpTRW50cnlQdHJUYWcpOwotfQotCi12b2lkIENhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJ
QyhWTSYgdm0sIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKLXsKLSAgICBtX2NvZGVPcmln
aW4gPSBDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpOwotICAg
IHNldFVwQ2FsbCh1bmxpbmtlZENhbGxMaW5rSW5mby5jYWxsVHlwZSwgY2FsbGVlR1BSKTsKLSAg
ICBtX2RvbmVMb2NhdGlvbiA9IHVubGlua2VkQ2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbjsKLSAg
ICBpZiAodW5saW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSkgewotICAgICAgICAv
LyBGSVhNRTogSXQnZCBiZSBuaWNlIGlmIHRoaXMgd2VyZSBhIHJlZmNvdW50ZWQgZGF0YSBzdHJ1
Y3R1cmUuCi0gICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1l
U2h1ZmZsZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsKLSAg
ICB9Ci0gICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOwotICAgIHUuZGF0YUlDLm1f
Y2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOwotICAgIHNldFNsb3dQYXRoQ2FsbERl
c3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxhdGUg
cmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOwotfQotCiB2b2lkIENhbGxMaW5rSW5mbzo6
ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogewogICAgIFJFTEVBU0VfQVNT
RVJUKCFpc1RhaWxDYWxsKCkpOwogCiAgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7
CiAKKyAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICBqaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIG1fZmFzdFBhdGhT
dGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0
YXJ0KTsKKyAgICB9KTsKKwogICAgIGF1dG8gY2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgdS5j
b2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0lu
dGVybmFsUHRyVGFnPihjYWxsKTsKQEAgLTQyNCw3ICszOTcsNyBAQCB2b2lkIENhbGxMaW5rSW5m
bzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIFdURjo6RnVu
Y3Rpb248dgogCiAgICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaml0
LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICB1LmNv
ZGVJQy5tX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0
clRhZz4oZmFzdFBhdGhTdGFydCk7CisgICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKICAgICB9KTsK
IAogICAgIC8vIC0gSWYgd2UncmUgbm90IHlldCBsaW5rZWQsIHRoaXMgaXMgYSBqdW1wIHRvIHRo
ZSBzbG93IHBhdGguCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJ
bmZvLmgKaW5kZXggNGI4MTIwZTI2NTg2MTNhYjdkYjYzMzQ3OWRlMDYzYTIzYWRhNDJjNy4uMWUx
ZjIxZDY4YWExNmQzNGExYzcyNmFhNGYzOGQ0YWE0MzY4ZDkzMiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaApAQCAtNDMsMTEgKzQzLDkgQEAgY2xh
c3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIHN0cnVjdCBDYWxsRnJh
bWVTaHVmZmxlRGF0YTsKIAotc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvOwotCiBjbGFzcyBD
YWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4g
ewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgOiB1aW50OF90IHsKKyAgICBlbnVtIENhbGxU
eXBlIHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKICAgICAgICAgQ2FsbFZhcmFyZ3Ms
CkBAIC0xNjcsOCArMTY1LDYgQEAgcHVibGljOgogICAgICAgICBtX2NhbGxlZUdQUiA9IGNhbGxl
ZUdQUjsKICAgICB9CiAKLSAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMoVk0mLCBVbmxpbmtlZENh
bGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpOwot
CiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlR1BSOyB9CiAg
ICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsKQEAgLTE3NywxNiArMTcz
LDEzIEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMs
IGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2Fs
bCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0
RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JU
YWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgotICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5fVU5VU0VEX1JFVFVSTjsK
LSAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zh
c3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0lu
Zm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5V
U0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoKEND
YWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVz
ZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRV
Uk47CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKEND
YWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVz
ZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9V
TlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYp
OwogICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgV1RG
OjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCk7CiAgICAgdm9pZCBlbWl0U2xv
d1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmKTsKLSAgICBzdGF0aWMgdm9pZCBlbWl0RGF0YUlDU2xv
d1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKICAgICB2
b2lkIHJldmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJvb2wgaXNEYXRhSUMoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNlRGF0YUlDKSA9PSBVc2VEYXRhSUM6Olll
czsgfQpAQCAtMjEwLDYgKzIwMyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9hbGxvd1N0dWJzID0g
ZmFsc2U7CiAgICAgfQogCisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4g
ZmFzdFBhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IHNsb3dQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFn
PiBkb25lTG9jYXRpb24oKTsKIApAQCAtMjQ5LDYgKzI0MywxMSBAQCBwdWJsaWM6CiAgICAgICAg
IG1fc2xvd1N0dWIgPSBudWxscHRyOwogICAgIH0KIAorICAgIEpJVFN0dWJSb3V0aW5lKiBzbG93
U3R1YigpCisgICAgeworICAgICAgICByZXR1cm4gbV9zbG93U3R1Yi5nZXQoKTsKKyAgICB9CisK
ICAgICBib29sIHNlZW5PbmNlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX2hhc1NlZW5TaG91
bGRSZXBhdGNoOwpAQCAtMzA5LDkgKzMwOCw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PENhbGxUeXBlPihtX2NhbGxUeXBlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQorICAgIHVpbnQz
Ml90KiBhZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCiAgICAgewotICAg
ICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyk7CisgICAgICAgIHJldHVybiAmbV9tYXhBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpczsKICAgICB9CiAKICAgICB1aW50MzJfdCBtYXhBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcygpCkBAIC0zODIsOSArMzgxLDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToK
LQotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQo
KTsKLQorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhT
dGFydDsKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2RvbmVMb2Nh
dGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9zbG93UGF0
aENhbGxEZXN0aW5hdGlvbjsKICAgICB1bmlvbiBVbmlvblR5cGUgewpAQCAtNDAwLDcgKzM5Nyw2
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFs
UHRyVGFnPiBtX2NhbGxMb2NhdGlvbjsKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkRhdGFMYWJl
bFB0cjxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxlZUxvY2F0aW9uOwogICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9zbG93UGF0aFN0YXJ0OwotICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0
OwogICAgICAgICB9IGNvZGVJQzsKICAgICB9IHU7CiAKQEAgLTQyOCwxMyArNDI0LDYgQEAgaW5s
aW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9yaWdpbihDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbykKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKTsKIH0KIAot
c3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKLSAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBzbyB0aGlzIGNhbiB0
cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCi0gICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlw
ZSBjYWxsVHlwZTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25l
TG9jYXRpb247Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBmcmFt
ZVNodWZmbGVEYXRhOwotfTsKLQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApp
bmRleCAwMjdiMGFhMTMyNTgxMDRhNzA5MGFmZTcyNDc4ZDk1MTI3ZTYwNWJlLi5mMDk4YTdhMjEw
MWRlYzM3NmFiZTU3NDE2NzViMDAzOTA0NTE1NDYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtMjc5LDYgKzI3OSw4IEBAIENvZGVCbG9jazo6
Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1Rh
ZywgQ29kZUJsb2NrCiAgICAgLCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbihmYWxzZSkKICAgICAs
IG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9oYXNCZWVuQ29tcGlsZWRX
aXRoRlRMKGZhbHNlKQorICAgICwgbV9oYXNMaW5rZWRPU1JFeGl0KGZhbHNlKQorICAgICwgbV9p
c0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUoZmFsc2UpCiAgICAgLCBtX251bUNhbGxlZUxvY2Fs
cyhvdGhlci5tX251bUNhbGxlZUxvY2FscykKICAgICAsIG1fbnVtVmFycyhvdGhlci5tX251bVZh
cnMpCiAgICAgLCBtX251bWJlck9mQXJndW1lbnRzVG9Ta2lwKG90aGVyLm1fbnVtYmVyT2ZBcmd1
bWVudHNUb1NraXApCkBAIC0zMDYsOCArMzA4LDYgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxvY2sK
IAogICAgIEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1QYXJhbWV0ZXJz
KG90aGVyLm51bVBhcmFtZXRlcnMoKSk7Ci0KLSAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgPSAm
bV91bmxpbmtlZENvZGUtPmxsaW50RXhlY3V0ZUNvdW50ZXIoKTsKICAgICAKICAgICB2bS5oZWFw
LmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KQEAgLTMxOCw2ICszMTgsNyBAQCB2b2lkIENv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVC
bG9jayYgb3RoZXIpCiAgICAgZmluaXNoQ3JlYXRpb25Db21tb24odm0pOwogCiAgICAgb3B0aW1p
emVBZnRlcldhcm1VcCgpOworICAgIGppdEFmdGVyV2FybVVwKCk7CiAKICAgICBpZiAob3RoZXIu
bV9yYXJlRGF0YSkgewogICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CkBAIC0z
MzUsNiArMzM2LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXQKICAgICAsIG1fZGlkRmFpbEpJ
VENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2Up
CiAgICAgLCBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwoZmFsc2UpCisgICAgLCBtX2hhc0xpbmtl
ZE9TUkV4aXQoZmFsc2UpCisgICAgLCBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZShmYWxz
ZSkgCiAgICAgLCBtX251bUNhbGxlZUxvY2Fscyh1bmxpbmtlZENvZGVCbG9jay0+bnVtQ2FsbGVl
TG9jYWxzKCkpCiAgICAgLCBtX251bVZhcnModW5saW5rZWRDb2RlQmxvY2stPm51bVZhcnMoKSkK
ICAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQoZmFsc2UpCkBAIC0zNTYsOSArMzU5LDcgQEAg
Q29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU2NyaXB0
RXhlY3V0YWJsZSogb3duZXJFeGVjdXQKIAogICAgIEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigp
KTsKICAgICBzZXROdW1QYXJhbWV0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCkpOwotCi0gICAgbV9sbGludEV4ZWN1dGVDb3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGlu
dEV4ZWN1dGVDb3VudGVyKCk7Ci0KKyAgICAKICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFk
ZCh0aGlzKTsKIH0KIApAQCAtMzY5LDggKzM3MCw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0
CiAvLyB3ZSBjYW4ndCBnZW5lcmF0ZSBkdXJpbmcgdW5saW5rZWQgYnl0ZWNvZGUgZ2VuZXJhdGlv
bi4gVGhpcyBwcm9jZXNzIGlzIG5vdCBhbGxvd2VkIHRvIGdlbmVyYXRlIGNvbnRyb2wKIC8vIGZs
b3cgb3IgaW50cm9kdWNlIG5ldyBsb2NhbHMuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgd2UgcmVs
eSBvbiBsaXZlbmVzcyBhbmFseXNpcyB0byBiZSB0aGUgc2FtZSBmb3IKIC8vIGFsbCB0aGUgQ29k
ZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jay4gV2UgcmVseSBvbiB0aGlzIGZhY3QgYnkg
Y2FjaGluZyB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMKLS8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9j
ay4gQWxzbywgQmFzZWxpbmUgSklUIGNvZGUgaXMgc2hhcmVkIGJldHdlZW4gYWxsIENvZGVCbG9j
a3Mgb2YgYW4gVW5saW5rZWRDb2RlQmxvY2ssCi0vLyBzbyB0aGUgYnl0ZWNvZGUgbXVzdCByZW1h
aW4gdGhlIHNhbWUgYmV0d2VlbiBDb2RlQmxvY2tzIHNoYXJpbmcgYW4gVW5saW5rZWRDb2RlQmxv
Y2suCisvLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suCiBib29sIENvZGVCbG9jazo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlu
a2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKICAgICBKU1Njb3BlKiBzY29wZSkKIHsK
QEAgLTUzMyw2ICs1MzMsMTUgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgTElO
SyhPcENyZWF0ZVByb21pc2UpCiAgICAgICAgIExJTksoT3BDcmVhdGVHZW5lcmF0b3IpCiAKKyAg
ICAgICAgTElOSyhPcEFkZCkKKyAgICAgICAgTElOSyhPcE11bCkKKyAgICAgICAgTElOSyhPcERp
dikKKyAgICAgICAgTElOSyhPcFN1YikKKworICAgICAgICBMSU5LKE9wTmVnYXRlKQorICAgICAg
ICBMSU5LKE9wSW5jKQorICAgICAgICBMSU5LKE9wRGVjKQorCiAgICAgICAgIExJTksoT3BKbmVx
UHRyKQogCiAgICAgICAgIExJTksoT3BDYXRjaCkKQEAgLTc2MCw2ICs3NjksNyBAQCBib29sIENv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIFVubGluawogICAgIC8vIHJlbHkgb24gdGhlIGluc3RydWN0aW9uIGNvdW50IChh
bmQgYXJlIGluIHRoZW9yeSBwZXJtaXR0ZWQgdG8gYWxzbyBpbnNwZWN0IHRoZQogICAgIC8vIGlu
c3RydWN0aW9uIHN0cmVhbSB0byBtb3JlIGFjY3VyYXRlIGFzc2VzcyB0aGUgY29zdCBvZiB0aWVy
LXVwKS4KICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CisgICAgaml0QWZ0ZXJXYXJtVXAoKTsK
IAogICAgIC8vIElmIHRoZSBjb25jdXJyZW50IHRocmVhZCB3aWxsIHdhbnQgdGhlIGNvZGUgYmxv
Y2sncyBoYXNoLCB0aGVuIGNvbXB1dGUgaXQgaGVyZQogICAgIC8vIHN5bmNocm9ub3VzbHkuCkBA
IC03ODMsNzggKzc5Myw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbkNvbW1vbihW
TSYgdm0pCiAgICAgbV9vd25lckVkZ2Uuc2V0KHZtLCB0aGlzLCBFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlOjpjcmVhdGUodm0sIHRoaXMpKTsKIH0KIAotI2lmIEVOQUJMRShKSVQpCi12b2lkIENv
ZGVCbG9jazo6c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29k
ZT4gaml0Q29kZSkKLXsKLSAgICBzZXRKSVRDb2RlKGppdENvZGUuY29weVJlZigpKTsKLQotICAg
IHsKLSAgICAgICAgY29uc3QgYXV0byYgaml0Q29kZU1hcCA9IHRoaXMtPmppdENvZGVNYXAoKTsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJz
KCk7ICsraSkgewotICAgICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBleGNlcHRpb25I
YW5kbGVyKGkpOwotICAgICAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMx
OD4uCi0gICAgICAgICAgICBoYW5kbGVyLm5hdGl2ZUNvZGUgPSBqaXRDb2RlTWFwLmZpbmQoQnl0
ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdldCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWc+KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgYXV0byYgaml0RGF0YSA9IGVuc3VyZUpJVERh
dGEobG9ja2VyKTsKLQotICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXREYXRhLm1faml0Q29uc3Rh
bnRQb29sLmlzRW1wdHkoKSk7Ci0gICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2wgPSBG
aXhlZFZlY3Rvcjx2b2lkKj4oaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpKTsKLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgYXV0byBlbnRyeSA9IGppdENvZGUtPm1fY29uc3RhbnRQb29s
LmF0KGkpOwotICAgICAgICAgICAgc3dpdGNoIChlbnRyeS50eXBlKSB7Ci0gICAgICAgICAgICBj
YXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6R2xvYmFsT2JqZWN0OgotICAgICAgICAgICAgICAg
IGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpDYWxsTGlua0luZm86IHsKLSAgICAgICAgICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5m
byYgdW5saW5rZWRDYWxsTGlua0luZm8gPSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRDYWxsTGlua0lu
Zm8qPihlbnRyeS5wYXlsb2FkLmdldCgpKTsKLSAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbyA9IGppdERhdGEubV9jYWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2luKHVu
bGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICBjYWxs
TGlua0luZm8tPmluaXRpYWxpemVEYXRhSUModm0oKSwgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQ
UkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgICAgICAgICAgICAgaml0RGF0YS5t
X2ppdENvbnN0YW50UG9vbFtpXSA9IGNhbGxMaW5rSW5mbzsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbzogewotICAgICAgICAgICAgICAgIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8gPSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyo+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOwotICAgICAgICAgICAgICAgIFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IGppdERhdGEubV9zdHViSW5mb3MuYWRkKHVubGlua2Vk
U3R1YkluZm8uYWNjZXNzVHlwZSwgQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2Rl
SW5kZXgpKTsKLSAgICAgICAgICAgICAgICBzdHViSW5mby0+aW5pdGlhbGl6ZUZyb21Vbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKHRoaXMsIHVubGlua2VkU3R1YkluZm8pOwotICAgICAgICAgICAg
ICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBzdHViSW5mbzsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpGdW5jdGlvbkRlY2w6IHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOwotICAgICAg
ICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlvbkRlY2woaW5k
ZXgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Y2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRXhwcjogewotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkucGF5bG9h
ZC5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9
IGZ1bmN0aW9uRXhwcihpbmRleCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKGNvZGVU
eXBlKCkpIHsKLSAgICBjYXNlIEdsb2JhbENvZGU6Ci0gICAgY2FzZSBNb2R1bGVDb2RlOgotICAg
IGNhc2UgRXZhbENvZGU6Ci0gICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRnVuY3Rpb25Db2RlOgotICAgICAgICAvLyBXZSBj
b3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNlIGJlY2F1c2Ugd2UgZGV0ZWN0ZWQgYW4g
dW5pbmxpbmVhYmxlIGNhbGwuCi0gICAgICAgIC8vIERvbid0IG92ZXJyaWRlIHRoYXQgb2JzZXJ2
YXRpb24uCi0gICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkICY9IGNhbklubGluZShjYXBh
YmlsaXR5TGV2ZWwoKSkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKHRoaXMpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoaml0Q29kZS0+bV9pc1NoYXJlYWJsZSAmJiAhdW5s
aW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSAmJiBPcHRpb25zOjp1c2VC
YXNlbGluZUpJVENvZGVTaGFyaW5nKCkpCi0gICAgICAgIHVubGlua2VkQ29kZUJsb2NrKCktPm1f
dW5saW5rZWRCYXNlbGluZUNvZGUgPSBXVEZNb3ZlKGppdENvZGUpOwotfQotI2VuZGlmIC8vIEVO
QUJMRShKSVQpCi0KIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiB7CiAgICAgVk0mIHZtID0gKm1f
dm07CkBAIC05MzUsMjcgKzg3Myw2IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAjZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKIH0KIAotYm9vbCBDb2RlQmxvY2s6OmlzQ29uc3RhbnRPd25lZEJ5VW5s
aW5rZWRDb2RlQmxvY2soVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKLXsKLSAgICAvLyBUaGlz
IG5lZWRzIHRvIGNvcnJlc3BvbmQgdG8gd2hhdCB3ZSBkbyBpbnNpZGUgc2V0Q29uc3RhbnRSZWdp
c3RlcnMuCi0gICAgc3dpdGNoICh1bmxpbmtlZENvZGVCbG9jaygpLT5jb25zdGFudFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbihyZWcpKSB7Ci0gICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b246OkludGVnZXI6Ci0gICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZToK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246
Ok90aGVyOiB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSB1bmxpbmtlZENvZGVCbG9jaygpLT5n
ZXRDb25zdGFudChyZWcpOwotICAgICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS5pc0NlbGwoKSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5h
c0NlbGwoKTsKLSAgICAgICAgaWYgKGNlbGwtPmluaGVyaXRzPFN5bWJvbFRhYmxlPih2bSgpKSB8
fCBjZWxsLT5pbmhlcml0czxKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcj4odm0oKSkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBj
YXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudDoKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQogVmVjdG9yPHVuc2lnbmVkPiBDb2RlQmxvY2s6OnNl
dENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IEZpeGVkVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3du
Pj4mIGNvbnN0YW50cywgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9u
PiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKQogewogICAgIFZNJiB2bSA9ICpt
X3ZtOwpAQCAtOTc1LDcgKzg5Miw2IEBAIFZlY3Rvcjx1bnNpZ25lZD4gQ29kZUJsb2NrOjpzZXRD
b25zdGFudFJlZ2lzdGVycyhjb25zdCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8CiAgICAgICAg
IHN3aXRjaCAocmVwcmVzZW50YXRpb24pIHsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQ6CiAgICAgICAgICAgICBjb25zdGFudCA9IGdsb2Jh
bE9iamVjdC0+bGlua1RpbWVDb25zdGFudChzdGF0aWNfY2FzdDxMaW5rVGltZUNvbnN0YW50Pihj
b25zdGFudC5hc0ludDMyQXNBbnlJbnQoKSkpOwotICAgICAgICAgICAgQVNTRVJUKGNvbnN0YW50
LmlzQ2VsbCgpKTsgLy8gVW5saW5rZWQgQmFzZWxpbmUgSklUIHJlcXVpcmVzIHRoaXMuCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90
aGVyOgogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKQEAg
LTE1OTgsNyArMTUxNCw3IEBAIENvZGVCbG9jazo6SklURGF0YSYgQ29kZUJsb2NrOjplbnN1cmVK
SVREYXRhU2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAgIHJldHVybiAqbV9qaXRE
YXRhOwogfQogCi12b2lkIENvZGVCbG9jazo6ZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKQordm9p
ZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKQogewogICAgIGlm
IChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CiAgICAgICAgIGZvciAoQ2FsbExp
bmtJbmZvKiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3MpCkBAIC0xNjA5
LDIwICsxNTI1LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCkK
ICAgICAgICAgICAgIHN0dWJJbmZvLT52aXNpdFdlYWtSZWZlcmVuY2VzKGxvY2tlciwgdGhpcyk7
CiAgICAgICAgIH0KICAgICB9Ci0KLQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgaWYgKGppdFR5
cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgewotICAgICAgICAvLyBWZXJpZnkgd2UgZG9u
J3QgbmVlZCB0byBmaW5hbGl6ZSB0aGVzZSBzaW5jZSB0aGV5J3JlIHZpcnR1YWwgY2FsbHMuCi0g
ICAgICAgIGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gOiBzdGF0aWNfY2FzdDxCYXNl
bGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2V2YWxDYWxsTGlua0luZm9zKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNMaW5rZWQoKSk7Ci0gICAgICAgICAg
ICBjYWxsTGlua0luZm8tPmZvckVhY2hEZXBlbmRlbnRDZWxsKFtdIChKU0NlbGwqKSB7Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgfQotCi0gICAgfQotI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAtMTYzMiwxMiArMTUzNCw0NiBA
QCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mIHZtKQogCiAgICAg
dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKIAorI2lmIEVOQUJMRShKSVQpCisgICAgYm9vbCBpc0Vs
aWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZTsK
KyAgICBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IGZhbHNlOworICAgIC8vIElmIEJh
c2VsaW5lSklUIGNvZGUgaXMgbm90IGV4ZWN1dGluZywgYW5kIGFuIG9wdGltaXplZCByZXBsYWNl
bWVudCBleGlzdHMsIHdlIGF0dGVtcHQKKyAgICAvLyB0byBkaXNjYXJkIGJhc2VsaW5lIEpJVCBj
b2RlIGFuZCByZWluc3RhbGwgTExJbnQgY29kZSB0byBzYXZlIEpJVCBtZW1vcnkuCisgICAgaWYg
KE9wdGlvbnM6OnVzZUxMSW50KCkgJiYgIW1faGFzTGlua2VkT1NSRXhpdCAmJiBqaXRUeXBlKCkg
PT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgJiYgIW1fdm0tPmhlYXAuY29kZUJsb2NrU2V0KCkuaXND
dXJyZW50bHlFeGVjdXRpbmcodGhpcykpIHsKKyAgICAgICAgaWYgKENvZGVCbG9jayogb3B0aW1p
emVkQ29kZUJsb2NrID0gb3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworICAgICAgICAgICAgaWYg
KCFvcHRpbWl6ZWRDb2RlQmxvY2stPm1fb3NyRXhpdENvdW50ZXIpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoaXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlKSB7CisgICAgICAgICAgICAgICAgICAg
IG1faml0Q29kZSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgIExMSW50OjpzZXRFbnRy
eXBvaW50KHRoaXMpOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXRUeXBl
KCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayk7CisKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZFeGNlcHRpb25I
YW5kbGVycygpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVubGlua2Vk
SGFuZGxlckluZm8mIHVubGlua2VkSGFuZGxlciA9IG1fdW5saW5rZWRDb2RlLT5leGNlcHRpb25I
YW5kbGVyKGkpOworICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIg
PSBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldOworICAgICAgICAgICAgICAgICAg
ICAgICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5rZWRIYW5k
bGVyLnRhcmdldCkucHRyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLmluaXRp
YWxpemUodW5saW5rZWRIYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVy
UHRyVGFnPihMTEludDo6aGFuZGxlQ2F0Y2goaW5zdHJ1Y3Rpb24ud2lkdGgoKSkuY29kZSgpKSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICB1bmxpbmtJbmNv
bWluZ0NhbGxzKCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBzYWZlIHRvIGNsZWFy
IHRoZXNlIG91dCBoZXJlIGJlY2F1c2UgaW4gZmluYWxpemVVbmNvbmRpdGlvbmFsbHkgYWxsIGNv
bXBpbGVyIHRocmVhZHMKKyAgICAgICAgICAgICAgICAgICAgLy8gYXJlIHNhZmVwb2ludGVkLCBt
ZWFuaW5nIHRoZXkncmUgcnVubmluZyBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIGJ5dGVjb2RlIHBh
cnNlciwgYW5kIGJ5dGVjb2RlCisgICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlciBpcyB0aGUg
b25seSBkYXRhIHN0cnVjdHVyZSBwb2ludGluZyBpbnRvIHRoZSB2YXJpb3VzICppbmZvcy4KKyAg
ICAgICAgICAgICAgICAgICAgcmVzZXRKSVREYXRhKCk7CisgICAgICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworI2VuZGlmCisgICAgCiAgICAg
aWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpKQogICAgICAgICBmaW5h
bGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmICghIWpp
dENvZGUoKSkKLSAgICAgICAgZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKTsKKyAgICAgICAgZmlu
YWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoREZH
X0pJVCkKQEAgLTE2NTgsNyArMTU5NCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxseShWTSYgdm0pCiAgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRo
dW5rOgotICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPmNvdW50KCk7
CisgICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci5jb3VudCgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAg
ICAgICAgICBjb3VudCA9IG1faml0RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKQEAgLTE3MzksNiAr
MTY3NSwzMCBAQCBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjphZGRTdHViSW5mbyhBY2Nl
c3NUeXBlIGFjY2Vzc1R5cGUsIENvZGVPcmlnaW4gY29kZQogICAgIHJldHVybiBlbnN1cmVKSVRE
YXRhKGxvY2tlcikubV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pOwogfQog
CitKSVRBZGRJQyogQ29kZUJsb2NrOjphZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSkKK3sKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Cisg
ICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2FkZElDcy5hZGQoYXJpdGhQcm9maWxl
KTsKK30KKworSklUTXVsSUMqIENvZGVCbG9jazo6YWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUpCit7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xv
Y2spOworICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9tdWxJQ3MuYWRkKGFyaXRo
UHJvZmlsZSk7Cit9CisKK0pJVFN1YklDKiBDb2RlQmxvY2s6OmFkZEpJVFN1YklDKEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQoreworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKKyAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3ViSUNzLmFk
ZChhcml0aFByb2ZpbGUpOworfQorCitKSVROZWdJQyogQ29kZUJsb2NrOjphZGRKSVROZWdJQyhV
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQoreworICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIobV9sb2NrKTsKKyAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fbmVn
SUNzLmFkZChhcml0aFByb2ZpbGUpOworfQorCiBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2Nr
OjpmaW5kU3R1YkluZm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewogICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIobV9sb2NrKTsKQEAgLTMxNzMsNyArMzEzMyw3IEBAIHVuc2lnbmVkIENv
ZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgY2Fz
ZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3Rl
ckNvdW50Rm9yKHRoaXMtPnVubGlua2VkQ29kZUJsb2NrKCkpOworICAgICAgICByZXR1cm4gSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcyk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAog
I2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzM4OSwxMyArMzM0OSwxMyBAQCBCaW5hcnlBcml0aFBy
b2ZpbGUqIENvZGVCbG9jazo6YmluYXJ5QXJpdGhQcm9maWxlRm9yUEMoY29uc3QgSW5zdHJ1Y3Rp
b24qIHBjKQogewogICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX2Fk
ZDoKLSAgICAgICAgcmV0dXJuICZ1bmxpbmtlZENvZGVCbG9jaygpLT5iaW5hcnlBcml0aFByb2Zp
bGUocGMtPmFzPE9wQWRkPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICAgICAgcmV0dXJuICZwYy0+
YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9t
dWw6Ci0gICAgICAgIHJldHVybiAmdW5saW5rZWRDb2RlQmxvY2soKS0+YmluYXJ5QXJpdGhQcm9m
aWxlKHBjLT5hczxPcE11bD4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgICAgIHJldHVybiAmcGMt
PmFzPE9wTXVsPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bf
c3ViOgotICAgICAgICByZXR1cm4gJnVubGlua2VkQ29kZUJsb2NrKCktPmJpbmFyeUFyaXRoUHJv
ZmlsZShwYy0+YXM8T3BTdWI+KCkubV9wcm9maWxlSW5kZXgpOworICAgICAgICByZXR1cm4gJnBj
LT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9w
X2RpdjoKLSAgICAgICAgcmV0dXJuICZ1bmxpbmtlZENvZGVCbG9jaygpLT5iaW5hcnlBcml0aFBy
b2ZpbGUocGMtPmFzPE9wRGl2PigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICAgICAgcmV0dXJuICZw
Yy0+YXM8T3BEaXY+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzQwNywxMSArMzM2NywxMSBAQCBVbmFyeUFy
aXRoUHJvZmlsZSogQ29kZUJsb2NrOjp1bmFyeUFyaXRoUHJvZmlsZUZvclBDKGNvbnN0IEluc3Ry
dWN0aW9uKiBwYykKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBv
cF9uZWdhdGU6Ci0gICAgICAgIHJldHVybiAmdW5saW5rZWRDb2RlQmxvY2soKS0+dW5hcnlBcml0
aFByb2ZpbGUocGMtPmFzPE9wTmVnYXRlPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICAgICAgcmV0
dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAg
ICAgY2FzZSBvcF9pbmM6Ci0gICAgICAgIHJldHVybiAmdW5saW5rZWRDb2RlQmxvY2soKS0+dW5h
cnlBcml0aFByb2ZpbGUocGMtPmFzPE9wSW5jPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICAgICAg
cmV0dXJuICZwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAg
ICAgY2FzZSBvcF9kZWM6Ci0gICAgICAgIHJldHVybiAmdW5saW5rZWRDb2RlQmxvY2soKS0+dW5h
cnlBcml0aFByb2ZpbGUocGMtPmFzPE9wRGVjPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICAgICAg
cmV0dXJuICZwYy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzUxMiwxNiArMzQ3MiwyMiBA
QCB2b2lkIENvZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpZXNGb3JDb250cm9sRmxv
d1Byb2ZpbGVyKCkKIH0KIAogI2lmIEVOQUJMRShKSVQpCit2b2lkIENvZGVCbG9jazo6c2V0UENU
b0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmIG1hcCkg
Cit7IAorICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBlbnN1cmVK
SVREYXRhKGxvY2tlcikubV9wY1RvQ29kZU9yaWdpbk1hcCA9IFdURk1vdmUobWFwKTsKK30KKwog
c3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBDb2RlQmxvY2s6OmZpbmRQQyh2b2lkKiBwYykKIHsK
LSAgICBpZiAoYXV0byogcGNUb0NvZGVPcmlnaW5NYXAgPSBtX2ppdENvZGUtPnBjVG9Db2RlT3Jp
Z2luTWFwKCkpIHsKLSAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9y
aWdpbiA9IHBjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMpKQotICAgICAgICAgICAgcmV0dXJu
IGNvZGVPcmlnaW47Ci0gICAgfQotCiAgICAgewogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fbG9jayk7CiAgICAgICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdl
dCgpKSB7CisgICAgICAgICAgICBpZiAoaml0RGF0YS0+bV9wY1RvQ29kZU9yaWdpbk1hcCkgewor
ICAgICAgICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4g
PSBqaXREYXRhLT5tX3BjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY29kZU9yaWdpbjsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAg
Zm9yIChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gOiBqaXREYXRhLT5tX3N0dWJJbmZvcykg
ewogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29udGFpbnNQQyhwYykpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+KHN0dWJJbmZvLT5j
b2RlT3JpZ2luKTsKQEAgLTM1NTUsMTQgKzM1MjEsMjggQEAgc3RkOjpvcHRpb25hbDxCeXRlY29k
ZUluZGV4PiBDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhGcm9tQ2FsbFNpdGVJbmRleChDYWxsU2l0
ZUkKICAgICByZXR1cm4gYnl0ZWNvZGVJbmRleDsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmppdFNv
b24oKQoraW50MzJfdCBDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9s
ZCkKIHsKLSAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPnNldE5ld1RocmVzaG9sZCh1bmxpbmtl
ZENvZGVCbG9jaygpLT50aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUU29v
bigpKSwgdGhpcyk7CisgICAgc3dpdGNoICh1bmxpbmtlZENvZGVCbG9jaygpLT5kaWRPcHRpbWl6
ZSgpKSB7CisgICAgY2FzZSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZToKKyAgICAgICAgcmV0dXJu
IHRocmVzaG9sZDsKKyAgICBjYXNlIFRyaVN0YXRlOjpGYWxzZToKKyAgICAgICAgcmV0dXJuIHRo
cmVzaG9sZCAqIDQ7CisgICAgY2FzZSBUcmlTdGF0ZTo6VHJ1ZToKKyAgICAgICAgcmV0dXJuIHRo
cmVzaG9sZCAvIDI7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biB0aHJlc2hvbGQ7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpqaXROZXh0SW52b2NhdGlvbigpCit2
b2lkIENvZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXAoKQogewotICAgIG1fbGxpbnRFeGVjdXRlQ291
bnRlci0+c2V0TmV3VGhyZXNob2xkKDAsIHRoaXMpOworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRl
ci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJ
VEFmdGVyV2FybVVwKCkpLCB0aGlzKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmppdFNvb24oKQor
eworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9y
SklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMpOwogfQogCiBib29sIENv
ZGVCbG9jazo6aGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdApAQCAtMzYwOCw4
ICszNTg4LDI4IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wTWF0aElDU3RhdHMoKQogICAgIGRvdWJs
ZSBudW1TdWJzID0gMC4wOwogICAgIGRvdWJsZSB0b3RhbFN1YlNpemUgPSAwLjA7CiAKLSAgICBh
dXRvIGNvdW50SUNzID0gWyZdIChDb2RlQmxvY2sqKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBu
ZWVkIHRvIHJlLWltcGxlbWVudCB0aGlzIHVzaW5nIEpJVENvZGUuCisgICAgYXV0byBjb3VudElD
cyA9IFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKKyAgICAgICAgaWYgKGF1dG8qIGppdERh
dGEgPSBjb2RlQmxvY2stPm1faml0RGF0YS5nZXQoKSkgeworICAgICAgICAgICAgZm9yIChKSVRB
ZGRJQyogYWRkSUMgOiBqaXREYXRhLT5tX2FkZElDcykgeworICAgICAgICAgICAgICAgIG51bUFk
ZHMrKzsKKyAgICAgICAgICAgICAgICB0b3RhbEFkZFNpemUgKz0gYWRkSUMtPmNvZGVTaXplKCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoSklUTXVsSUMqIG11bElDIDogaml0
RGF0YS0+bV9tdWxJQ3MpIHsKKyAgICAgICAgICAgICAgICBudW1NdWxzKys7CisgICAgICAgICAg
ICAgICAgdG90YWxNdWxTaXplICs9IG11bElDLT5jb2RlU2l6ZSgpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBmb3IgKEpJVE5lZ0lDKiBuZWdJQyA6IGppdERhdGEtPm1fbmVnSUNzKSB7
CisgICAgICAgICAgICAgICAgbnVtTmVncysrOworICAgICAgICAgICAgICAgIHRvdGFsTmVnU2l6
ZSArPSBuZWdJQy0+Y29kZVNpemUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9y
IChKSVRTdWJJQyogc3ViSUMgOiBqaXREYXRhLT5tX3N1YklDcykgeworICAgICAgICAgICAgICAg
IG51bVN1YnMrKzsKKyAgICAgICAgICAgICAgICB0b3RhbFN1YlNpemUgKz0gc3ViSUMtPmNvZGVT
aXplKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9OwogICAgIGhlYXAoKS0+Zm9y
RWFjaENvZGVCbG9jayhjb3VudElDcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAppbmRleCBmZmYxZWI0NGJjNWJjNGM2ZDI5ZDA1Y2E1ZjMxMjUwZmJmNmMz
Nzc1Li43ZjU1NTE0YmNhZDk0Nzc2NDdiM2VhMmY5YWY2ZDI5ZmRhZGMyODliIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC05NCw5ICs5NCw5IEBAIGNs
YXNzIEpTTW9kdWxlRW52aXJvbm1lbnQ7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBj
bGFzcyBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ7CiBjbGFz
cyBNZXRhZGF0YVRhYmxlOworY2xhc3MgUENUb0NvZGVPcmlnaW5NYXA7CiBjbGFzcyBSZWdpc3Rl
ckF0T2Zmc2V0TGlzdDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwotY2xhc3MgQmFzZWxpbmVK
SVRDb2RlOwogCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihDb2RlQmxv
Y2tSYXJlRGF0YSk7CiAKQEAgLTE1OCw5ICsxNTgsNyBAQCBwdWJsaWM6CiAgICAgTWV0YWRhdGFU
YWJsZSogbWV0YWRhdGFUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuZ2V0KCk7IH0K
IAogICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFt
ZXRlcnM7IH0KLXByaXZhdGU6CiAgICAgdm9pZCBzZXROdW1QYXJhbWV0ZXJzKHVuc2lnbmVkIG5l
d1ZhbHVlKTsKLXB1YmxpYzoKIAogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
KCkgY29uc3QgeyByZXR1cm4gbV9udW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgfQogCkBAIC0xNjks
NiArMTY3LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVy
biBtX251bVZhcnM7IH0KICAgICB1bnNpZ25lZCBudW1UbXBzKCkgY29uc3QgeyByZXR1cm4gbV91
bmxpbmtlZENvZGUtPmhhc0NoZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVja3BvaW50VG1wczsgfQog
CisgICAgdW5zaWduZWQqIGFkZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1Q
YXJhbWV0ZXJzOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9
CiAKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8Q29kZUJsb2NrKj4obV9hbHRlcm5hdGl2ZS5nZXQoKSk7IH0KQEAgLTIzMyw2ICsyMzIsMTYg
QEAgcHVibGljOgogICAgIGJvb2wgaGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25z
dDsKICAgICBib29sIGluc3RhbGxWTVRyYXBCcmVha3BvaW50cygpOwogCisgICAgaW5saW5lIGJv
b2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKKyAgICB7CisgICAgICAgIC8vIEZJ
WE1FOiBDb25zaWRlciBhZGRpbmcgYmFjayB0aGUgb3B0aW1pemF0aW9uIHdoZXJlIHdlIHJldHVy
biB0cnVlIGlmIGByZWdgIGlzIGB0aGlzYCBhbmQgd2UncmUgaW4gc2xvcHB5IG1vZGUuCisgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAxNDUKKyAg
ICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3Rh
bnQocmVnKS5pc0NlbGwoKTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAg
QUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9yYXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJl
ZykKICAgICB7CiAgICAgICAgIHJldHVybiByZWcub2Zmc2V0KCkgPj0gc3RhdGljX2Nhc3Q8aW50
PihtX251bVZhcnMpOwpAQCAtMjU5LDIxICsyNjgsMjMgQEAgcHVibGljOgogI2lmIEVOQUJMRShK
SVQpCiAgICAgc3RydWN0IEpJVERhdGEgewogICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9B
TExPQ0FURUQ7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAK
ICAgICAgICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKKyAgICAgICAgQmFn
PEpJVEFkZElDPiBtX2FkZElDczsKKyAgICAgICAgQmFnPEpJVE11bElDPiBtX211bElDczsKKyAg
ICAgICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKKyAgICAgICAgQmFnPEpJVFN1YklDPiBtX3N1
YklDczsKICAgICAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgICAg
ICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8
Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOwogICAgICAgICBTZW50aW5lbExpbmtlZExp
c3Q8UG9seW1vcnBoaWNDYWxsTm9kZSwgUGFja2VkUmF3U2VudGluZWxOb2RlPFBvbHltb3JwaGlj
Q2FsbE5vZGU+PiBtX2luY29taW5nUG9seW1vcnBoaWNDYWxsczsKKyAgICAgICAgRml4ZWRWZWN0
b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgICAgIEZpeGVkVmVj
dG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CiAg
ICAgICAgIGJvb2wgbV9oYXNDYWxsZWVTYXZlUmVnaXN0ZXJzIHsgZmFsc2UgfTsKICAgICAgICAg
UmVnaXN0ZXJBdE9mZnNldExpc3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwotCi0gICAgICAgIEZp
eGVkVmVjdG9yPHZvaWQqPiBtX2ppdENvbnN0YW50UG9vbDsKLSAgICAgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihK
SVREYXRhLCBtX2ppdENvbnN0YW50UG9vbCk7IH0KKyAgICAgICAgSklUQ29kZU1hcCBtX2ppdENv
ZGVNYXA7CiAgICAgfTsKIAotICAgIHZvaWQgc2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUo
UmVmPEJhc2VsaW5lSklUQ29kZT4pOwotCiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0YShjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlcikKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFko
bV9qaXREYXRhKSkKQEAgLTI4Miw3ICsyOTMsMjIgQEAgcHVibGljOgogICAgIH0KICAgICBKSVRE
YXRhJiBlbnN1cmVKSVREYXRhU2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKIAotICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVREYXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENvZGVCbG9jaywgbV9qaXREYXRhKTsgfQorICAgIEpJVEFkZElDKiBhZGRKSVRBZGRJQyhC
aW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQmluYXJ5QXJp
dGhQcm9maWxlKik7CisgICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxl
Kik7CisgICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2YWx1
ZT46OnR5cGU+CisgICAgSklUQWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHBy
b2ZpbGUpIHsgcmV0dXJuIGFkZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0
ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAg
ICBKSVRNdWxJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1
cm4gYWRkSklUTXVsSUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5l
cmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdl
bmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVE5lZ0lDKiBh
ZGRNYXRoSUMoVW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5lZ0lD
KHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFt
ZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1
YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRTdWJJQyogYWRkTWF0aElDKEJpbmFy
eUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7IH0K
IAogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlLCBDb2RlT3Jp
Z2luKTsKIApAQCAtMjk2LDggKzMyMiwxOCBAQCBwdWJsaWM6CiAgICAgLy8gbG9va2luZyBmb3Ig
YSBDYWxsTGlua0luZm9NYXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgog
ICAgIENhbGxMaW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChCeXRlY29k
ZUluZGV4KTsKICAgICAKLSAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCk7CisgICAg
dm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRDb2RlTWFwKQorICAgIHsKKyAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBlbnN1cmVKSVRE
YXRhKGxvY2tlcikubV9qaXRDb2RlTWFwID0gV1RGTW92ZShqaXRDb2RlTWFwKTsKKyAgICB9Cisg
ICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpCisgICAgeworICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIHJldHVybiBlbnN1cmVKSVREYXRh
KGxvY2tlcikubV9qaXRDb2RlTWFwOworICAgIH0KIAorICAgIHZvaWQgc2V0UENUb0NvZGVPcmln
aW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmKTsKICAgICBzdGQ6Om9w
dGlvbmFsPENvZGVPcmlnaW4+IGZpbmRQQyh2b2lkKiBwYyk7CiAKICAgICB2b2lkIHNldENhbGxl
ZVNhdmVSZWdpc3RlcnMoUmVnaXN0ZXJTZXQpOwpAQCAtNDM2LDcgKzQ3Miw2IEBAIHB1YmxpYzoK
IAogICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAotICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0KICAg
ICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpCiAgICAgewogICAgICAg
ICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1c2VKSVQoKSk7CkBAIC01MzQs
MTAgKzU2OSw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25v
d24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9
CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRl
eCgpXTsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVn
aXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0
YW50SW5kZXgoKV0uZ2V0KCk7IH0KLSAgICBib29sIGlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRD
b2RlQmxvY2soVmlydHVhbFJlZ2lzdGVyKSBjb25zdDsKICAgICBBTFdBWVNfSU5MSU5FIFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24ocmVnKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHVuc2ln
bmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24oaW5kZXgpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxv
Y2ssIG1fY29uc3RhbnRSZWdpc3RlcnMpICsgZGVjbHR5cGUobV9jb25zdGFudFJlZ2lzdGVycyk6
OmRhdGFNZW1vcnlPZmZzZXQoKTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlv
bkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9
CiAgICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNs
cy5zaXplKCk7IH0KQEAgLTU2MiwyMiArNTk1LDIyIEBAIHB1YmxpYzoKICAgICAvLyBKdW1wIFRh
YmxlcwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBTaW1wbGVKdW1wVGFibGUmIGJhc2VsaW5lU3dp
dGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGJhc2Vs
aW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKLSAgICB2b2lkKiBiYXNl
bGluZUpJVENvbnN0YW50UG9vbCgpCisgICAgU2ltcGxlSnVtcFRhYmxlJiBzd2l0Y2hKdW1wVGFi
bGUoaW50IHRhYmxlSW5kZXgpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERh
dGEgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKLSAgICAgICAgcmV0dXJu
IG1faml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2wuZGF0YSgpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChtX2ppdERhdGEpOworICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N3aXRjaEp1bXBU
YWJsZXNbdGFibGVJbmRleF07CiAgICAgfQogI2VuZGlmCiAgICAgc2l6ZV90IG51bWJlck9mVW5s
aW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51
bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFNp
bXBsZUp1bXBUYWJsZSYgdW5saW5rZWRTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsg
cmV0dXJuIG1fdW5saW5rZWRDb2RlLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsgfQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgU3RyaW5nSnVtcFRhYmxlJiBkZmdTdHJp
bmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYg
ZGZnU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKKyNpZiBFTkFCTEUoSklUKQorICAg
IFN0cmluZ0p1bXBUYWJsZSYgc3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQor
ICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhKTsKKyAgICAgICAgcmV0dXJu
IG1faml0RGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworICAgIH0K
ICNlbmRpZgotCiAgICAgc2l6ZV90IG51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJs
ZSYgdW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJu
IG1fdW5saW5rZWRDb2RlLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsgfQogCkBAIC01OTksMjAgKzYzMiwyMSBAQCBwdWJsaWM6CiAKICAgICBib29sIGNoZWNrSWZK
SVRUaHJlc2hvbGRSZWFjaGVkKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0
ZUNvdW50ZXItPmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOworICAgICAgICBy
ZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0
KHRoaXMpOwogICAgIH0KIAogICAgIHZvaWQgZG9udEpJVEFueXRpbWVTb29uKCkKICAgICB7Ci0g
ICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+ZGVmZXJJbmRlZmluaXRlbHkoKTsKKyAgICAg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7CiAgICAgfQogCisg
ICAgaW50MzJfdCB0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpOworICAgIHZvaWQg
aml0QWZ0ZXJXYXJtVXAoKTsKICAgICB2b2lkIGppdFNvb24oKTsKLSAgICB2b2lkIGppdE5leHRJ
bnZvY2F0aW9uKCk7CiAKICAgICBjb25zdCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXImIGxsaW50
RXhlY3V0ZUNvdW50ZXIoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuICptX2xsaW50RXhl
Y3V0ZUNvdW50ZXI7CisgICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAgICAg
fQogCiAgICAgdHlwZWRlZiBIYXNoTWFwPHN0ZDo6dHVwbGU8U3RydWN0dXJlSUQsIHVuc2lnbmVk
PiwgRml4ZWRWZWN0b3I8TExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50Pj4gU3RydWN0dXJlV2F0Y2hwb2ludE1hcDsKQEAgLTc2Myw3ICs3OTcsNiBAQCBwdWJsaWM6
CiAKICAgICBib29sIGhhc0RlYnVnZ2VyUmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiBtX2RlYnVn
Z2VyUmVxdWVzdHM7IH0KICAgICB2b2lkKiBkZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpIHsgcmV0
dXJuICZtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
RGVidWdnZXJSZXF1ZXN0cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1f
ZGVidWdnZXJSZXF1ZXN0cyk7IH0KIAogICAgIHZvaWQgYWRkQnJlYWtwb2ludCh1bnNpZ25lZCBu
dW1CcmVha3BvaW50cyk7CiAgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KHVuc2lnbmVkIG51bUJy
ZWFrcG9pbnRzKQpAQCAtODA1LDcgKzgzOCw2IEBAIHB1YmxpYzoKICAgICBtdXRhYmxlIENvbmN1
cnJlbnRKU0xvY2sgbV9sb2NrOwogCiAgICAgYm9vbCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZDsg
Ly8gTm90IGEgYml0ZmllbGQgYmVjYXVzZSB0aGUgSklUIHdhbnRzIHRvIHN0b3JlIHRvIGl0Lgot
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7
IH0KIAogI2lmIEVOQUJMRShKSVQpCiAgICAgdW5zaWduZWQgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0
ZSA6IDI7IC8vIERGRzo6Q2FwYWJpbGl0eUxldmVsCkBAIC04MTUsNiArODQ3LDggQEAgcHVibGlj
OgogICAgIGJvb2wgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24gOiAxOwogICAgIGJvb2wgbV9oYXNC
ZWVuQ29tcGlsZWRXaXRoRlRMIDogMTsKIAorICAgIGJvb2wgbV9oYXNMaW5rZWRPU1JFeGl0IDog
MTsKKyAgICBib29sIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlIDogMTsKICAgICBib29s
IG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSB7IGZhbHNlIH07CiAKICAgICAvLyBJ
bnRlcm5hbCBtZXRob2RzIGZvciB1c2UgYnkgdmFsaWRhdGlvbiBjb2RlLiBJdCB3b3VsZCBiZSBw
cml2YXRlIGlmIGl0IHdhc24ndApAQCAtODczLDEyICs5MDcsMTYgQEAgcHVibGljOgogICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKENvZGVCbG9jaywgbV9tZXRhZGF0YSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihD
b2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcik7IH0KIAotICAgIGJvb2wgbG9vcEhp
bnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSB7IHJldHVybiBtX3VubGlua2Vk
Q29kZS0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKTsgfQorICAg
IGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKQorICAgIHsK
KyAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRl
IHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAgICAgICAgcmV0dXJuICFtX3VubGlua2VkQ29kZS0+aXNC
dWlsdGluRnVuY3Rpb24oKTsKKyAgICB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXpl
TExJbnRJbmxpbmVDYWNoZXMoKTsKICNpZiBFTkFCTEUoSklUKQotICAgIHZvaWQgZmluYWxpemVK
SVRJbmxpbmVDYWNoZXMoKTsKKyAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNo
ZXMoKTsKICNlbmRpZgogI2lmIEVOQUJMRShERkdfSklUKQogICAgIHZvaWQgdGFsbHlGcmVxdWVu
dEV4aXRTaXRlcygpOwpAQCAtOTcyLDkgKzEwMTAsNyBAQCBwcml2YXRlOgogICAgIFN0cnVjdHVy
ZVdhdGNocG9pbnRNYXAgbV9sbGludEdldEJ5SWRXYXRjaHBvaW50TWFwOwogICAgIFJlZlB0cjxK
SVRDb2RlPiBtX2ppdENvZGU7CiAjaWYgRU5BQkxFKEpJVCkKLXB1YmxpYzoKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8SklURGF0YT4gbV9qaXREYXRhOwotcHJpdmF0ZToKICNlbmRpZgogI2lmIEVOQUJM
RShERkdfSklUKQogICAgIC8vIFRoaXMgaXMgcmVsZXZhbnQgdG8gbm9uLURGRyBjb2RlIGJsb2Nr
cyB0aGF0IHNlcnZlIGFzIHRoZSBwcm9maWxlZCBjb2RlIGJsb2NrCkBAIC05OTMsNyArMTAyOSw3
IEBAIHByaXZhdGU6CiAKICAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX2FsdGVybmF0aXZl
OwogICAgIAotICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciogbV9sbGludEV4ZWN1dGVDb3Vu
dGVyIHsgbnVsbHB0ciB9OworICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBtX2xsaW50RXhl
Y3V0ZUNvdW50ZXI7CiAKICAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9qaXRFeGVjdXRl
Q291bnRlcjsKICAgICB1aW50MzJfdCBtX29zckV4aXRDb3VudGVyOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKaW5kZXggMWQ1OTRhYjgz
NTI4OTdlYzhhNzQ1ZWEyNDkzZjhkMmRhMDE4Yjk2Mi4uOWI4NjcwNjg1ZTJjZjg2NDhkNTAyMWYw
YTZiMjFhOTM1ZjY2N2E0NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9ja0lubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrSW5saW5lcy5oCkBAIC0yNSwxMCArMjUsOCBAQAogCiAjcHJhZ21hIG9uY2UK
IAotI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0
cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNp
bmNsdWRlICJVbmxpbmtlZE1ldGFkYXRhVGFibGVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewpAQCAtNDIsNyArNDAsOSBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZShj
b25zdCBGdW5jdG9yJiBmdW5jKQogICAgIGlmIChtX21ldGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lU
KF9fb3ApIFwKICAgICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1l
dGFkYXRhKSB7IGZ1bmMobWV0YWRhdGEubV9wcm9maWxlLCBmYWxzZSk7IH0pOworCiAgICAgICAg
IEZPUl9FQUNIX09QQ09ERV9XSVRIX1ZBTFVFX1BST0ZJTEUoVklTSVQpCisKICN1bmRlZiBWSVNJ
VAogCiAgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8T3BJdGVyYXRvck9wZW4+KFsmXSAoYXV0
byYgbWV0YWRhdGEpIHsgCkBAIC01Nyw2ICs1Nyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNo
VmFsdWVQcm9maWxlKGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCiAgICAgICAgICAgICBmdW5jKG1ldGFk
YXRhLm1fdmFsdWVQcm9maWxlLCBmYWxzZSk7CiAgICAgICAgIH0pOwogICAgIH0gICAKKwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgpAQCAtOTgsMzggKzk5LDQgQEAgdm9pZCBDb2Rl
QmxvY2s6OmZvckVhY2hMTEludENhbGxMaW5rSW5mbyhjb25zdCBGdW5jdG9yJiBmdW5jKQogICAg
IH0KIH0KIAotI2lmIEVOQUJMRShKSVQpCi1BTFdBWVNfSU5MSU5FIGNvbnN0IEpJVENvZGVNYXAm
IENvZGVCbG9jazo6aml0Q29kZU1hcCgpCi17Ci0gICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRU
eXBlOjpCYXNlbGluZUpJVCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29k
ZSo+KG1faml0Q29kZS5nZXQoKSktPm1faml0Q29kZU1hcDsKLX0KLQotQUxXQVlTX0lOTElORSBT
aW1wbGVKdW1wVGFibGUmIENvZGVCbG9jazo6YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUoaW50IHRh
YmxlSW5kZXgpCi17Ci0gICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5n
ZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKLX0KLQotQUxXQVlTX0lOTElO
RSBTdHJpbmdKdW1wVGFibGUmIENvZGVCbG9jazo6YmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFi
bGUoaW50IHRhYmxlSW5kZXgpCi17Ci0gICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpC
YXNlbGluZUpJVCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1f
aml0Q29kZS5nZXQoKSktPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKLX0K
LSNlbmRpZgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi1BTFdBWVNfSU5MSU5FIFNpbXBsZUp1bXBU
YWJsZSYgQ29kZUJsb2NrOjpkZmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCi17Ci0g
ICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxERkc6OkpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07Ci19Ci0KLUFMV0FZU19JTkxJTkUgU3RyaW5nSnVtcFRhYmxlJiBDb2Rl
QmxvY2s6OmRmZ1N0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKLXsKLSAgICBB
U1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PERGRzo6SklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3RyaW5nU3dpdGNoSnVtcFRh
Ymxlc1t0YWJsZUluZGV4XTsKLX0KLSNlbmRpZgotCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZS5oCmluZGV4IGI1ODQ2NWZlYTEwMGU5MGE3ODhmMTBiNmViYzQzMDNhZTM2MmM4
ZTQuLjFhNDI3YzQ5MmZlZDA2OTNlNDhkZjY0YmFjMDVhNDYzYzIxOTI5NzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2UuaApAQCAtNzAsOCArNzAsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEV4ZWN1dGFi
bGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXAoQ29kZUJsb2NrKiBjb2RlQmxvY2spOwogICAgIAogICAg
IHN0YXRpYyBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiB3cmFwQW5kQWN0aXZhdGUoQ29kZUJs
b2NrKiBjb2RlQmxvY2spOwotCi0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9j
aygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLCBt
X2NvZGVCbG9jayk7IH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zm
c2V0c0V4dHJhY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGVjdXRpb25Db3VudGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGVjdXRpb25Db3VudGVyLmNwcAppbmRleCAxNTIzMDFkODhkNzEwM2Q2NDE5MjI1NWVlMTkwYmJm
ZmIxNmNiMWIzLi5mNmViYjNhMzBhYjNmNGRmMDQ4ZGQ2ZWQzMTg3MmExOTU2NGU3NDYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIu
Y3BwCkBAIC0xNTksNyArMTU5LDcgQEAgYm9vbCBFeGVjdXRpb25Db3VudGVyPGNvdW50aW5nVmFy
aWFudD46OnNldFRocmVzaG9sZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCi0gICAgdGhyZXNob2xkID0gY2xpcHBlZFRocmVzaG9sZCh0aHJlc2hv
bGQpOworICAgIHRocmVzaG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQoY29kZUJsb2NrID8gY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSA6IG51bGxwdHIsIHRocmVzaG9sZCk7CiAgICAgCiAgICAgbV9j
b3VudGVyID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXRocmVzaG9sZCk7CiAgICAgICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgKaW5k
ZXggMTY4NzRkNzNhZWU2ODg0MWU5N2EyMjRmZjg2NzI2ODQ4NDg3YWRjMy4uNzA3MzZiYTA3NDI5
YmQ3MWI1MDI3ZmEyZTk1ODViNGE1ZDQzMzI4NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCkBAIC02MCw3ICs2MCw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGZvcmNlU2xvd1BhdGhDb25jdXJyZW50bHkoKTsgLy8gSWYgeW91IHVzZSB0
aGlzLCBjaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCgpIG1heSBzdGlsbCByZXR1cm4gZmFs
c2UuCiAgICAgYm9vbCBjaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldChDb2RlQmxvY2sqKTsK
ICAgICBib29sIGhhc0Nyb3NzZWRUaHJlc2hvbGQoKSBjb25zdCB7IHJldHVybiBtX2NvdW50ZXIg
Pj0gMDsgfQotICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xkLCBDb2Rl
QmxvY2sqID0gbnVsbHB0cik7CisgICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJl
c2hvbGQsIENvZGVCbG9jayopOwogICAgIHZvaWQgZGVmZXJJbmRlZmluaXRlbHkoKTsKICAgICBk
b3VibGUgY291bnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdG90YWxD
b3VudCkgKyBtX2NvdW50ZXI7IH0KICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
QEAgLTg2LDkgKzg2LDEzIEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLSAgICBzdGF0aWMgVCBjbGlwcGVkVGhyZXNob2xkKFQgdGhyZXNob2xkKQorICAg
IHN0YXRpYyBUIGNsaXBwZWRUaHJlc2hvbGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
VCB0aHJlc2hvbGQpCiAgICAgewotICAgICAgICBpbnQzMl90IG1heFRocmVzaG9sZCA9IG1heGlt
dW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMoKTsKKyAgICAgICAgaW50MzJfdCBt
YXhUaHJlc2hvbGQ7CisgICAgICAgIGlmIChPcHRpb25zOjpyYW5kb21pemVFeGVjdXRpb25Db3Vu
dHNCZXR3ZWVuQ2hlY2twb2ludHMoKSAmJiBnbG9iYWxPYmplY3QpCisgICAgICAgICAgICBtYXhU
aHJlc2hvbGQgPSBnbG9iYWxPYmplY3QtPndlYWtSYW5kb21JbnRlZ2VyKCkgJSBtYXhpbXVtRXhl
Y3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG1heFRocmVzaG9sZCA9IG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2lu
dHMoKTsKICAgICAgICAgaWYgKHRocmVzaG9sZCA+IG1heFRocmVzaG9sZCkKICAgICAgICAgICAg
IHRocmVzaG9sZCA9IG1heFRocmVzaG9sZDsKICAgICAgICAgcmV0dXJuIHRocmVzaG9sZDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAppbmRl
eCBhNzg3NmIzY2JkNWViODFkYTEwMjAwNDU1ODkxYTg2MDRhZDViNGRlLi5lZGNlNDg5MzcxNzU1
OTliZGI4NDI2ZmY1NjgxMDBiYzc2MDNjZWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCkBAIC00OSw3ICs0OSw2IEBAIHN0cnVjdCBH
ZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgewogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1v
ZGVNZXRhZGF0YVVuc2V0KSA9PSAxMik7CiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJy
YXlMZW5ndGggewotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoLCBh
cnJheVByb2ZpbGUpOyB9CiAgICAgQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZTsKIH07CiBzdGF0
aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsK
QEAgLTg5LDcgKzg4LDYgQEAgdW5pb24gR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAgICAgIEdl
dEJ5SWRNb2RlIG1vZGU7CiAgICAgICAgIHVpbnQ4X3QgaGl0Q291bnRGb3JMTEludENhY2hpbmc7
IC8vIFRoaXMgbXVzdCBiZSB6ZXJvIHdoZW4gd2UgdXNlIFByb3RvTG9hZCBtb2RlLgogICAgIH07
Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0KICAgICBHZXRCeUlkTW9kZU1ldGFk
YXRhRGVmYXVsdCBkZWZhdWx0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgdW5z
ZXRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCBhcnJheUxlbmd0aE1v
ZGU7CkBAIC0xMTksNyArMTE3LDYgQEAgc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGEgewogICAg
ICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhUHJvdG9Mb2FkIHByb3RvTG9hZE1vZGU7CiAgICAgfTsK
ICAgICBHZXRCeUlkTW9kZSBtb2RlOwotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNb2Rl
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1vZGUpOyB9
CiAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGluZzsKIH07CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCmluZGV4IGMxZTNl
MWI5MWNkNGEyZWYwMjE3NDI4YzU2MzczODJiNGQyZGVmNjMuLjlkODQyNzM5Y2M2OWFjNDhiNmJl
ZjFiNTUyYWVkYWM0MGQ2NzYzZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5U3RhdHVzLmNwcApAQCAtMjE1LDcgKzIxNSw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5
U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFjaygKICAgICAg
ICAgcmV0dXJuIEdldEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgICAgICAKICAgICBjYXNl
IENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6IHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZShwcm9maWxlZEJsb2NrLT52bSgp
KTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+bV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlLmdldCgpOwogICAgICAgICBpZiAoc3RydWN0dXJlLT50YWtlc1Nsb3dQ
YXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQogICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3Rh
dHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksIHN0dWJJbmZvKTsKICAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlLmNwcAppbmRleCAyOGZlMDZlOThiZjk1YWVmMGYwZjM2MjEzMDJhYjY0ZmIzYjcxMWYy
Li5kMDY2MmZiYTBlN2Q4MjY1OWI4NTYyMTk2OGE3NTRlODcwMmFiOWM2IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nh
c2UuY3BwCkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpl
bWl0RE9NSklUR2V0dGVyKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUsIGNvbnMKIAogICAg
IC8vIExldCdzIHN0b3JlIHRoZSByZXVzZWQgcmVnaXN0ZXJzIHRvIHRoZSBzdGFjay4gQWZ0ZXIg
dGhhdCwgd2UgY2FuIHVzZSBhbGxvY2F0ZWQgc2NyYXRjaCByZWdpc3RlcnMuCiAgICAgU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0gICAg
ICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKKyAg
ICBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7CiAKICAg
ICBpZiAoR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZUludGVybmFsOjp2ZXJib3NlKSB7CiAgICAgICAg
IGRhdGFMb2coImJhc2VHUFIgPSAiLCBiYXNlR1BSLCAiXG4iKTsKQEAgLTIyNSw5ICsyMjUsMTIg
QEAgdm9pZCBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklUR2V0dGVyKEFjY2Vzc0dl
bmVyYXRpb25TdGF0ZSYgc3RhdGUsIGNvbnMKICAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckND
YWxsLnNldChyZWcpOwogICAgIGZvciAoRlBSUmVnIHJlZyA6IGZwU2NyYXRjaCkKICAgICAgICAg
cmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLnNldChyZWcpOwotICAgIGlmIChqaXQuY29kZUJsb2Nr
KCktPnVzZURhdGFJQygpKQotICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KHN0
dWJJbmZvLm1fc3R1YkluZm9HUFIpOwogICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5leGNs
dWRlKFJlZ2lzdGVyU2V0OjpyZWdpc3RlcnNUb05vdFNhdmVGb3JDQ2FsbCgpKTsKKyNpZiBDUFUo
QVJNNjQpCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBqaXQuY29kZUJsb2NrKCk7CisgICAg
aWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCisgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JD
Q2FsbC5zZXQoQVJNNjRSZWdpc3RlcnM6OmxyKTsKKyNlbmRpZgogCiAgICAgQWNjZXNzQ2FzZVNu
aXBwZXRQYXJhbXMgcGFyYW1zKHN0YXRlLm1fdm0sIFdURk1vdmUocmVncyksIFdURk1vdmUoZ3BT
Y3JhdGNoKSwgV1RGTW92ZShmcFNjcmF0Y2gpKTsKICAgICBzbmlwcGV0LT5nZW5lcmF0b3IoKS0+
cnVuKGppdCwgcGFyYW1zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbkJ5U3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5
U3RhdHVzLmNwcAppbmRleCAxNWQ3NjQ0MjNkNWE2YWY1OWYwMzI2NzM4ZDM5M2Q5YmViZjRkNGNj
Li5lZGYxMThiYjVjOTc1NWMyOTg5ZDc3MDI0ZGVmY2U4OTcwNDY3ZWRlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCkBAIC0xMzksNyArMTM5LDcg
QEAgSW5CeVN0YXR1cyBJbkJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNp
dGVGZWVkYmFjayhjb25zdCBDb25jdXJyZW4KICAgICAgICAgcmV0dXJuIEluQnlTdGF0dXMoTm9J
bmZvcm1hdGlvbik7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjogewotICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlKHZtKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+bV9pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpOwogICAgICAgICBpZiAoc3RydWN0dXJlLT50YWtl
c1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQogICAgICAgICAgICAgcmV0dXJuIElu
QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRl
bnRpZmllciA9IHN0dWJJbmZvLT5pZGVudGlmaWVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCmluZGV4IDdkMThjNGJiMmJkZjQ1ZDYxMmJi
ZDc0YTdlMGIzZTEzZGRjNzhlZDcuLmMxZWIyZDY5ZDI3NTRlMDUxYTgyNTlmNjM3N2U2NDcxNGVl
YWVlNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVB
Y2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nl
c3MuY3BwCkBAIC0xNzYsMTYgKzE3NiwxMSBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGxp
bmtDb2RlSW5saW5lKGNvbnN0IGNoYXIqIG5hbWUsIENDYWxsSGVscGVycyYgaml0LCBTdAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3Bl
cnR5QWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCitib29sIElu
bGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQog
ewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewotICAgICAgICAv
LyBUaGVzZSBkeW5hbWljIHNsb3RzIGdldCBmaWxsZWQgaW4gYnkgU3RydWN0dXJlU3R1YkluZm8u
IE5vdGhpbmcgZWxzZSB0byBkby4KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCiAgICAg
Q0NhbGxIZWxwZXJzIGppdDsKICAgICAKICAgICBHUFJSZWcgYmFzZSA9IHN0dWJJbmZvLmJhc2VH
UFI7CkBAIC0yMzgsMzEgKzIzMywyMyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGhhc0Zy
ZWVSZWdpc3RlcihTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiAgICAgcmV0dXJuIGdldFNj
cmF0Y2hSZWdpc3RlcihzdHViSW5mbykgIT0gSW52YWxpZEdQUlJlZzsKIH0KIAotYm9vbCBJbmxp
bmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
Citib29sIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlm
ICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKTsKIH0KIAotYm9vbCBJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3Bl
cnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25z
dGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEFTU0VSVChjYW5H
ZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgb2Zmc2V0KSk7
Ci0KLSAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewotICAgICAgICAvLyBUaGVzZSBk
eW5hbWljIHNsb3RzIGdldCBmaWxsZWQgaW4gYnkgU3RydWN0dXJlU3R1YkluZm8uIE5vdGhpbmcg
ZWxzZSB0byBkby4KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIEFTU0VSVChjYW5H
ZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9mZnNldCkpOwogCiAgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKIApAQCAtMjkyLDI1ICsyNzksMjIgQEAgYm9vbCBJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3QKICAgICByZXR1cm4gbGlua2VkQ29kZUlubGluZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nl
c3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCitib29sIElubGluZUFjY2Vzczo6
aXNDYWNoZWFibGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJy
YXkqIGFycmF5KQogewogICAgIEFTU0VSVChhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5
KTsKIAogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
QmFzZWxpbmVKSVQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIGlmICghaGFzRnJlZVJl
Z2lzdGVyKHN0dWJJbmZvKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuICFo
YXNBbnlBcnJheVN0b3JhZ2UoYXJyYXktPmluZGV4aW5nVHlwZSgpKSAmJiBhcnJheS0+aW5kZXhp
bmdUeXBlKCkgIT0gQXJyYXlDbGFzczsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRl
QXJyYXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgSlNBcnJheSogYXJyYXkpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxl
bmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQogewotICAg
IEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKGNvZGVCbG9j
aywgc3R1YkluZm8sIGFycmF5KSk7CisgICAgQVNTRVJUKGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgo
c3R1YkluZm8sIGFycmF5KSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRp
ZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzM1LDIwICszMTksMTcgQEAgYm9vbCBJ
bmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvJgogICAgIHJldHVybiBsaW5rZWRDb2RlSW5saW5lOwogfQogCi1ib29s
IElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK2Jvb2wgSW5saW5lQWNjZXNzOjppc0Nh
Y2hlYWJsZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAgICAg
aWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgcmV0dXJuIGhhc0ZyZWVSZWdpc3Rlcihz
dHViSW5mbyk7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorYm9vbCBJ
bmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykKIHsKLSAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgaXNDYWNoZWFibGVTdHJpbmdM
ZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbykpOworICAgIEFTU0VSVChpc0NhY2hlYWJsZVN0cmlu
Z0xlbmd0aChzdHViSW5mbykpOwogCiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50
aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM4MiwxOCArMzYzLDEzIEBAIGJvb2wg
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlU3R1YkluZm8mCiB9CiAKIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2Vs
ZkluQWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2Vs
ZkluQWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghc3R1YkluZm8uaGFzQ29u
c3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoY29kZUJs
b2NrLT51c2VEYXRhSUMoKSkgewotICAgICAgICAvLyBUaGVzZSBkeW5hbWljIHNsb3RzIGdldCBm
aWxsZWQgaW4gYnkgU3RydWN0dXJlU3R1YkluZm8uIE5vdGhpbmcgZWxzZSB0byBkby4KLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCiAgICAgR1BSUmVnIGJhc2UgPSBzdHViSW5mby5iYXNl
R1BSOwogICAgIEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVSZWdzKCk7CiAKQEAg
LTQzMCwxMyArNDA2LDEzIEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5B
Y2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJCiAgICAgaWYgKGNvZGVC
bG9jay0+dXNlRGF0YUlDKCkpIHsKICAgICAgICAgLy8gSWYgaXQgaXMgbm90IEdldEJ5SWQtbGlr
ZS10aGluZywgd2UgZG8gbm90IGVtaXQgbm9wIHNsZWQgKGUuZy4gR2V0QnlWYWwpLgogICAgICAg
ICAvLyBUaGUgY29kZSBpcyBhbHJlYWR5IGFuIGluZGlyZWN0IGp1bXAsIGFuZCBvbmx5IHRoaW5n
IHdlIHNob3VsZCBkbyBpcyByZXBsYWNpbmcgbV9jb2RlUHRyLgotICAgICAgICBpZiAoY29kZUJs
b2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgJiYgc3R1YkluZm8uaGFzQ29u
c3RhbnRJZGVudGlmaWVyKSB7CisgICAgICAgIGlmIChzdHViSW5mby5oYXNDb25zdGFudElkZW50
aWZpZXIpIHsKICAgICAgICAgICAgIC8vIElmIG1fY29kZVB0ciBpcyBwb2ludGluZyB0byBzdHVi
SW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24sIHRoaXMgbWVhbnMgdGhhdCBJbmxpbmVBY2Nlc3Mg
Y29kZSBpcyBub3QgYSBzdHViIG9uZS4KICAgICAgICAgICAgIC8vIFdlIHJld3JpdGUgdGhpcyB3
aXRoIHRoZSBzdHViLWJhc2VkIGRpc3BhdGNoaW5nIGNvZGUgb25jZSwgYW5kIGNvbnRpbnVlIHVz
aW5nIGl0IHVudGlsIHdlIHJlc2V0IHRoZSBjb2RlLgogICAgICAgICAgICAgaWYgKHN0dWJJbmZv
Lm1fY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpID09IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRM
b2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSB7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjplbWl0SklUQ29kZU92ZXIoc3R1YkluZm8uc3RhcnQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0
clRhZz4oKSwgc2NvcGVkTGFtYmRhPHZvaWQoQ0NhbGxIZWxwZXJzJik+KFsmXShDQ2FsbEhlbHBl
cnMmIGppdCkgewogICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoJnN0dWJJbmZvKSwgc3R1YkluZm8ubV9zdHViSW5mb0dQUik7Ci0gICAgICAg
ICAgICAgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5t
X3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRT
dHViUm91dGluZVB0clRhZyk7CisgICAgICAgICAgICAgICAgICAgIGppdC5jYWxsKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhzdHViSW5mby5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgICAgICAgICAg
ICAgICAgIGF1dG8ganVtcCA9IGppdC5qdW1wKCk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8g
ZG9uZUxvY2F0aW9uID0gc3R1YkluZm8uZG9uZUxvY2F0aW9uOwogICAgICAgICAgICAgICAgICAg
ICBqaXQuYWRkTGlua1Rhc2soWz1dKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKQEAgLTQ0NSw5
ICs0MjEsNyBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKENv
ZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSQogICAgICAgICAgICAgICAgIH0pLCAi
SW5saW5lQWNjZXNzOiBsaW5raW5nIHN0dWIgY2FsbCIpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0KICAgICAgICAgc3R1YkluZm8ubV9jb2RlUHRyID0gdGFyZ2V0OwotICAgICAgICBzdHVi
SW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOyAvLyBDbGVhciBvdXQgdGhlIGlu
bGluZSBhY2Nlc3MgY29kZS4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDYwLDE0ICs0
MzQsOCBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSQogICAgIH0pLCAiSW5saW5lQWNjZXNzOiBs
aW5raW5nIGNvbnN0YW50IGp1bXAiKTsKIH0KIAotdm9pZCBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1
YkFzSnVtcEluQWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pCit2b2lkIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoQ29k
ZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewotICAgIGlmIChjb2RlQmxv
Y2stPnVzZURhdGFJQygpICYmIGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSB7Ci0gICAgICAgIHN0dWJJbmZvLm1fY29kZVB0ciA9IHN0dWJJbmZvLnNsb3dQYXRo
U3RhcnRMb2NhdGlvbjsKLSAgICAgICAgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlID0gMDsgLy8gQ2xlYXIgb3V0IHRoZSBpbmxpbmUgYWNjZXNzIGNvZGUuCi0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihzdHViSW5m
by5zdGFydC5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigpLCBzY29wZWRMYW1iZGE8dm9pZChD
Q2FsbEhlbHBlcnMmKT4oWyZdKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAgICAgIC8vIFdlIGRv
bid0IG5lZWQgYSBub3Agc2xlZCBoZXJlIGJlY2F1c2Ugbm9ib2R5IHNob3VsZCBiZSBqdW1waW5n
IGludG8gdGhlIG1pZGRsZSBvZiBhbiBJQy4KICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nl
c3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuaAppbmRl
eCAxYmI4OThjMmE5NmRiNjc2OGEwMDczYzc1OWE5ZTgzYTNmMDcxZjEwLi44M2ZjOGFkYWI5OGRm
NTZhOWFmNTBiNDU3ZDY0NjJhZDcyMjYwOTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0lubGluZUFjY2Vzcy5oCkBAIC05OSwxNCArOTksMTQgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gc3RkOjptYXgoc2l6ZSwgc2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogICAg
IH0KIAotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOwotICAg
IHN0YXRpYyBib29sIGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShDb2RlQmxvY2sqLCBT
dHJ1Y3R1cmVTdHViSW5mbyYsIFByb3BlcnR5T2Zmc2V0KTsKLSAgICBzdGF0aWMgYm9vbCBnZW5l
cmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBT
dHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVB
cnJheUxlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKLSAg
ICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmVTdHViSW5mbyYpOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlQXJyYXlMZW5ndGgoQ29kZUJs
b2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7Ci0gICAgc3RhdGljIGJvb2wgZ2Vu
ZXJhdGVTZWxmSW5BY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1
cmUqKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVN0cmluZ0xlbmd0aChDb2RlQmxvY2sqLCBT
dHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5
QWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOwor
ICAgIHN0YXRpYyBib29sIGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVT
dHViSW5mbyYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQ
cm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9m
ZnNldCk7CisgICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVT
dHViSW5mbyYsIEpTQXJyYXkqKTsKKyAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZVN0cmluZ0xl
bmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlQXJyYXlM
ZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7CisgICAgc3RhdGljIGJvb2wgZ2Vu
ZXJhdGVTZWxmSW5BY2Nlc3MoU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqKTsKKyAgICBz
dGF0aWMgYm9vbCBnZW5lcmF0ZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYpOwogCiAg
ICAgc3RhdGljIHZvaWQgcmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nl
c3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRT
dHViUm91dGluZVB0clRhZz4pOwogICAgIHN0YXRpYyB2b2lkIHJld2lyZVN0dWJBc0p1bXBJbkFj
Y2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIENvZGVMb2NhdGlvbkxhYmVsPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgKaW5kZXggYjBmMjY0OTdmZjhiMzJlZTFl
MWQ2NTEwMTU3YmJjOTIxMmVhMWUwZC4uZDIxY2EyYzA3Y2ZlZTM5MjU3MzZkY2Q2ZWUzOWRjNmRi
ZGQxMjRmOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJh
dGlvbk1vZGVNZXRhZGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
dGVyYXRpb25Nb2RlTWV0YWRhdGEuaApAQCAtNDAsNyArNDAsNiBAQCBPVkVSTE9BRF9CSVRXSVNF
X09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSVRIX0lOVEVSR1JBTFMoSXRlcmF0aW9uTW9kZSk7
CiAKIHN0cnVjdCBJdGVyYXRpb25Nb2RlTWV0YWRhdGEgewogICAgIHVpbnQ4X3Qgc2Vlbk1vZGVz
IHsgMCB9OwotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTZWVuTW9kZXMoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoSXRlcmF0aW9uTW9kZU1ldGFkYXRhLCBzZWVuTW9kZXMpOyB9IAog
ICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBlKHNlZW5Nb2RlcykpID09IHNpemVvZihJ
dGVyYXRpb25Nb2RlKSk7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9MTEludENhbGxMaW5rSW5mby5oCmluZGV4IDEwNThmZmNkOTE3ZGQyYzUwMTYyZTEzNTVi
M2Q1OGIxOGU2YTA3MjYuLjdjMjdjZGY2NmU3YTliZGRhYTJmNmFiZWEyNjI4ZmNiNDY5MzlmNjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5r
SW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5r
SW5mby5oCkBAIC04Nyw3ICs4Nyw2IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBBcnJheVByb2Zp
bGUgbV9hcnJheVByb2ZpbGU7Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJv
ZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMTEludENhbGxMaW5rSW5mbywgbV9hcnJh
eVByb2ZpbGUpOyB9CiAKIHByaXZhdGU6CiAgICAgdWludHB0cl90IG1fY2FsbGVlT3JMYXN0U2Vl
bkNhbGxlZVdpdGhMaW5rQml0IHsgdW5saW5rZWRCaXQgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PcGNvZGUuaAppbmRleCBhM2FkZjJkMjI0NjI5Y2MxNmRkMWQ5NjdmZDU4ZTczYzYz
MzlmOThiLi5hYzdmNzEwZDgwNjVkYzgzZjUwMTcyYjk1ZTJhOTZkNjhkMGQxZWE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCkBAIC0xNTYsMTcgKzE1Niw2IEBAIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6
OmdldE1TQlNldENvbnN0ZXhwcihtCiAgICAgbWFjcm8oT3BJdGVyYXRvck9wZW4pIFwKICAgICBt
YWNybyhPcEl0ZXJhdG9yTmV4dCkgXAogCi0jZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0JJ
TkFSWV9BUklUSF9QUk9GSUxFKG1hY3JvKSBcCi0gICAgbWFjcm8oT3BBZGQpIFwKLSAgICBtYWNy
byhPcE11bCkgXAotICAgIG1hY3JvKE9wRGl2KSBcCi0gICAgbWFjcm8oT3BTdWIpIFwKLQotI2Rl
ZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKG1hY3JvKSBcCi0g
ICAgbWFjcm8oT3BJbmMpIFwKLSAgICBtYWNybyhPcERlYykgXAotICAgIG1hY3JvKE9wTmVnYXRl
KSBcCi0KIAogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0eXBlLWxpbWl0cyIpCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCmlu
ZGV4IDU4OTkxMzEzMDA0NWM4ZjY3OGNhMDFlYzUzOWFjMTc1NDcxZThjMWUuLmI0OGEwMDc3ZjQz
ZTI5ZmY5MjExYmFhNzYyOGNjNTVlMmI3MTAyMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcApAQCAtNzMsNyArNzMsNyBA
QCB2b2lkIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6c3VjY2VlZCgpCiB7CiAgICAgcmVzdG9yZVNj
cmF0Y2goKTsKICAgICBpZiAoaml0LT5jb2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCi0gICAgICAg
IGppdC0+ZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm8tPm1fc3R1YkluZm9H
UFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkRvbmVMb2NhdGlvbigpKSwgSlNJbnRlcm5h
bFB0clRhZyk7CisgICAgICAgIGppdC0+cmV0KCk7CiAgICAgZWxzZQogICAgICAgICBzdWNjZXNz
LmFwcGVuZChqaXQtPmp1bXAoKSk7CiB9CkBAIC0xMTAsOCArMTEwLDYgQEAgY29uc3QgUmVnaXN0
ZXJTZXQmIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6Y2FsY3VsYXRlTGl2ZVJlZ2lzdGVyc0ZvckNh
bGxBbmRFeGNlcHQKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChqaXQtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKIAogICAgICAgICBtX2xpdmVS
ZWdpc3RlcnNGb3JDYWxsID0gUmVnaXN0ZXJTZXQobV9saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0
RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZSwgYWxsb2NhdG9yLT51c2VkUmVnaXN0ZXJzKCkpOwot
ICAgICAgICBpZiAoaml0LT5jb2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICBt
X2xpdmVSZWdpc3RlcnNGb3JDYWxsLmFkZChzdHViSW5mby0+bV9zdHViSW5mb0dQUik7CiAgICAg
ICAgIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGwuZXhjbHVkZShjYWxsZWVTYXZlUmVnaXN0ZXJzKCkp
OwogICAgIH0KICAgICByZXR1cm4gbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbDsKQEAgLTEzMCwxMiAr
MTI4LDExIEBAIGF1dG8gQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpwcmVzZXJ2ZUxpdmVSZWdpc3Rl
cnNUb1N0YWNrRm9yQ2FsbChjb25zdCBSZWdpc3RlclNlCiAgICAgfTsKIH0KIAotYXV0byBBY2Nl
c3NHZW5lcmF0aW9uU3RhdGU6OnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0
aG91dEV4Y2VwdGlvbnMoKSAtPiBTcGlsbFN0YXRlCithdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0
ZTo6cHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucyhj
b25zdCBSZWdpc3RlclNldCYgZXh0cmEpIC0+IFNwaWxsU3RhdGUKIHsKICAgICBSZWdpc3RlclNl
dCBsaXZlUmVnaXN0ZXJzID0gYWxsb2NhdG9yLT51c2VkUmVnaXN0ZXJzKCk7Ci0gICAgaWYgKGpp
dC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygpKQotICAgICAgICBsaXZlUmVnaXN0ZXJzLmFkZChz
dHViSW5mby0+bV9zdHViSW5mb0dQUik7CiAgICAgbGl2ZVJlZ2lzdGVycy5leGNsdWRlKGNhbGxl
ZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgbGl2ZVJlZ2lzdGVycy5tZXJnZShleHRyYSk7CiAKICAg
ICBjb25zdGV4cHIgdW5zaWduZWQgZXh0cmFTdGFja1BhZGRpbmcgPSAwOwogICAgIHVuc2lnbmVk
IG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiA9IFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgqaml0LCBs
aXZlUmVnaXN0ZXJzLCBleHRyYVN0YWNrUGFkZGluZyk7CkBAIC01OTksMTEgKzU5NiwxNiBAQCBB
Y2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKGNvbnN0
IEdDU2FmZUNvbmN1cnJlbnRKU0xvYwogICAgIENDYWxsSGVscGVycyBqaXQoY29kZUJsb2NrKTsK
ICAgICBzdGF0ZS5qaXQgPSAmaml0OwogCi0gICAgaWYgKCFjYW5CZVNoYXJlZCAmJiBBU1NFUlRf
RU5BQkxFRCkgewotICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KGNvZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGppdC5zY3JhdGNoUmVnaXN0ZXIoKSk7Ci0gICAgICAg
IGF1dG8gb2sgPSBqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6RXF1YWwsIENDYWxsSGVscGVy
czo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGppdC5zY3JhdGNoUmVnaXN0ZXIoKSk7Ci0gICAgICAg
IGppdC5icmVha3BvaW50KCk7Ci0gICAgICAgIG9rLmxpbmsoJmppdCk7CisgICAgaWYgKGNvZGVC
bG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAgaWYgKHN0YXRlLm1fZG9lc0pTR2V0dGVyU2V0
dGVyQ2FsbHMpIHsKKyAgICAgICAgICAgIC8vIFdlIGhhdmUgbm8gZ3VhcmFudGVlIHRoYXQgc3Rh
Y2stcG9pbnRlciBpcyB0aGUgZXhwZWN0ZWQgb25lLiBUaGlzIGlzIG5vdCBhIHByb2JsZW0gaWYg
d2UgZG8gbm90IGhhdmUgSlMgZ2V0dGVyIC8gc2V0dGVyIGNhbGxzIHNpbmNlIHN0YWNrLXBvaW50
ZXIgaXMKKyAgICAgICAgICAgIC8vIGEgY2FsbGVlLXNhdmUgcmVnaXN0ZXIgaW4gdGhlIEMgY2Fs
bGluZyBjb252ZW5zaW9uLiBIb3dldmVyLCBvdXIgSlMgZXhlY3V0YWJsZSBjYWxsIGRvZXMgbm90
IHNhdmUgc3RhY2stcG9pbnRlci4gU28gd2UgYXJlIGFkanVzdGluZyBzdGFjay1wb2ludGVyIGFm
dGVyCisgICAgICAgICAgICAvLyBKUyBnZXR0ZXIgLyBzZXR0ZXIgY2FsbHMuIEJ1dCB0aGlzIGNv
dWxkIGJlIGRpZmZlcmVudCBmcm9tIHRoZSBpbml0aWFsIHN0YWNrLXBvaW50ZXIsIGFuZCBtYWtl
cyBQQUMgdGFnZ2luZyBicm9rZW4uCisgICAgICAgICAgICAvLyBUbyBlbnN1cmUgUEFDLXRhZ2dp
bmcgd29yaywgd2UgZmlyc3QgYWRqdXN0IHN0YWNrLXBvaW50ZXIgdG8gdGhlIGFwcHJvcHJpYXRl
IG9uZS4KKyAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
Y29kZUJsb2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAgICAgfQogCiAgICAgc3RhdGUu
cHJlc2VydmVkUmV1c2VkUmVnaXN0ZXJTdGF0ZSA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCmluZGV4IDczY2NiYjg0NDgxYjI2NzYx
YWIyYmRkZWMwODI5MDM5NzFkZjFhYWQuLjkxNDczNDZjMWZlMDM4YmUzMDZhZTNjNzcwYmM2OGE0
YzliYzk4MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5oCkBAIC0yNTEsNyArMjUxLDcgQEAgc3RydWN0IEFjY2Vzc0dlbmVyYXRp
b25TdGF0ZSB7CiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGNhbGN1bGF0ZUxpdmVSZWdpc3RlcnNG
b3JDYWxsQW5kRXhjZXB0aW9uSGFuZGxpbmcoKTsKIAogICAgIFNwaWxsU3RhdGUgcHJlc2VydmVM
aXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhID0geyB9
KTsKLSAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0
aG91dEV4Y2VwdGlvbnMoKTsKKyAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2ZVJlZ2lzdGVyc1Rv
U3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhID0g
eyB9KTsKIAogICAgIHZvaWQgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsV2l0
aFRocm93bkV4Y2VwdGlvbihjb25zdCBTcGlsbFN0YXRlJik7CiAgICAgdm9pZCByZXN0b3JlTGl2
ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoY29uc3QgU3BpbGxTdGF0ZSYsIGNvbnN0IFJlZ2lz
dGVyU2V0JiBkb250UmVzdG9yZSA9IHsgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAppbmRleCA5MmFjMDk0ODQ1NmMxNDBlMWE0NTk5ZmJlYTRh
NmM2OWUyODMyZjRlLi5mYTA5ZmNiMGEyYmUyMGQwZjI1ZDA0NTEyZDFkZmEwZTI1N2RmNDNhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKQEAg
LTE4MCwxMCArMTgwLDEwIEBAIFB1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1
YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvCiAgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVudGlmaWVyKCk7CiAgICAg
ICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOwogICAgICAgICBS
RUxFQVNFX0FTU0VSVCh1aWQpOwotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJ
bmZvLT5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHByb2ZpbGVkQmxvY2stPnZtKCkpOwotICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1
aWQpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQorICAgICAgICAgICAgc3R1Yklu
Zm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAg
ICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0
QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0cnVjdHVyZSwgb2Zmc2V0
KTsKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoV1RGTW92ZShpZGVu
dGlmaWVyKSwgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSwgb2Zm
c2V0KTsKICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFy
eSksICpzdHViSW5mbyk7CiAgICAgfQogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCmluZGV4IDZhYjRjZWI0YjZh
NTA0YzQ4MjY0ZDUyZDFkMTU4MWJlNmE1OTBhMzAuLmYyN2I3Mzc0ZWY5YWVlMTA3YTcwMTZkYTg4
MWJjZWRmNzgxOWQ0NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIlN0
cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5l
cy5oIgotI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiUG9s
eW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCiAKQEAgLTY2LDkgKzY1LDkg
QEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlckJhc2UmIGxvY2tlciwgQ28KICAgICBBU1NFUlQoaGFzQ29uc3RhbnRJZGVudGlm
aWVyKTsKICAgICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmKTsK
ICAgICBtX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1faW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7CisgICAgbV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSk7CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVC
bG9jayk7Ci0gICAgYnlJZFNlbGZPZmZzZXQgPSBvZmZzZXQ7CisgICAgdS5ieUlkU2VsZi5vZmZz
ZXQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRBcnJheUxlbmd0
aChjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIpCkBAIC04OCw5ICs4Nyw5IEBA
IHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRQdXRCeUlkUmVwbGFjZShjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIsCiAgICAgQVNTRVJUKG1fY2FjaGVUeXBlID09IENhY2hl
VHlwZTo6VW5zZXQpOwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlwZTo6UHV0QnlJ
ZFJlcGxhY2UpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKKyAg
ICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuc2V0V2l0aG91dFdyaXRlQmFycmllcihpbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsKICAgICBjb2RlQmxvY2stPnZtKCkuaGVhcC53cml0ZUJh
cnJpZXIoY29kZUJsb2NrKTsKLSAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKKyAgICB1LmJ5
SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5p
dEluQnlJZFNlbGYoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcikKQEAgLTk4
LDkgKzk3LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEluQnlJZFNlbGYoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyLCBDb2QKICAgICBBU1NFUlQobV9jYWNoZVR5
cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCk7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVU
eXBlOjpJbkJ5SWRTZWxmKTsKICAgICBtX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlk
KCk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJp
ZXIoaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAu
d3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgYnlJZFNlbGZPZmZzZXQgPSBvZmZzZXQ7Cisg
ICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OmRlcmVmKCkKQEAgLTIzNyw3ICsyMzYsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFN0
cnVjdHVyZVN0dWJJbmZvOjphZGRBY2Nlc3NDYXNlKAogICAgICAgICAvLyB3ZSdyZSBidWZmZXJl
ZCBpcyBiZWNhdXNlIHdlIHJlbHkgb24gaXQgdG8gcmVzZXQgZHVyaW5nIEdDIGlmIG1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZQogICAgICAgICAvLyBpcyBjb2xsZWN0ZWQuCiAgICAgICAgIG1f
aWRlbnRpZmllciA9IG51bGxwdHI7Ci0gICAgICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZSA9IDA7CisgICAgICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5jbGVhcigpOwogICAg
ICAgICAKICAgICAgICAgLy8gSWYgd2UgZ2VuZXJhdGVkIHNvbWUgY29kZSB0aGVuIHdlIGRvbid0
IHdhbnQgdG8gYXR0ZW1wdCB0byByZXBhdGNoIGluIHRoZSBmdXR1cmUgdW50aWwgd2UKICAgICAg
ICAgLy8gZ2F0aGVyIGVub3VnaCBjYXNlcy4KQEAgLTI1Miw3ICsyNTEsNyBAQCB2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIs
IENvZGVCbG9jayogYwogewogICAgIGNsZWFyQnVmZmVyZWRTdHJ1Y3R1cmVzKCk7CiAgICAgbV9p
ZGVudGlmaWVyID0gbnVsbHB0cjsKLSAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAw
OworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5jbGVhcigpOwogCiAgICAgaWYgKG1f
Y2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQpCiAgICAgICAgIHJldHVybjsKQEAgLTI4Niw3
ICsyODUsNiBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jdXJyZW50
SlNMb2NrZXJCYXNlJiBsb2NrZXIsIENvZGVCbG9jayogYwogICAgICAgICByZXNldFB1dEJ5KGNv
ZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRl
TmFtZToKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5
VmFsKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CkBAIC0z
NjIsOCArMzYwLDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNl
cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIKICAgICB9CiAKICAgICBib29s
IGlzVmFsaWQgPSB0cnVlOwotICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGlubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKQotICAgICAgICBpc1ZhbGlkICY9IHZtLmhlYXAuaXNNYXJr
ZWQoc3RydWN0dXJlKTsKKyAgICBpZiAobV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKQorICAg
ICAgICBpc1ZhbGlkICY9IHZtLmhlYXAuaXNNYXJrZWQobV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlLmdldCgpKTsKICAgICBpZiAobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKQogICAg
ICAgICBpc1ZhbGlkICY9IHUuc3R1Yi0+dmlzaXRXZWFrKHZtKTsKIApAQCAtMzc3LDggKzM3NSw4
IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgog
dm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRvciYgdmlz
aXRvcikKIHsKLSAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlKHZpc2l0b3Iudm0oKSkpCi0gICAgICAgIHN0cnVjdHVyZS0+bWFya0lmQ2hlYXAo
dmlzaXRvcik7CisgICAgaWYgKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKKyAgICAgICAg
bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIAogICAg
IGlmIChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCiAgICAgICAgIHUuc3R1Yi0+cHJv
cGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7CkBAIC00MzIsMjA5ICs0MzAsNiBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnNldENhY2hlVHlwZShjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXJCYXNlJgogICAgIG1fY2FjaGVUeXBlID0gbmV3Q2FjaGVUeXBlOwogfQogCi12
b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHVi
SW5mbykKLXsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGFjY2Vzc1R5cGUgPSB1bmxpbmtlZFN0
dWJJbmZvLmFjY2Vzc1R5cGU7Ci0gICAgc3RhcnQgPSB1bmxpbmtlZFN0dWJJbmZvLnN0YXJ0Owot
ICAgIGRvbmVMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uZG9uZUxvY2F0aW9uOwotICAgIHNs
b3dQYXRoU3RhcnRMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0
aW9uOwotICAgIGNhbGxTaXRlSW5kZXggPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgodW5s
aW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4Lm9mZnNldCgpKSk7Ci0gICAgY29kZU9yaWdpbiA9
IENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KTsKLSAgICBtX2NvZGVQ
dHIgPSBzbG93UGF0aFN0YXJ0TG9jYXRpb247Ci0KLSAgICB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgIGlmIChhY2Nlc3NUeXBlID09
IEFjY2Vzc1R5cGU6OkdldEJ5SWQgJiYgdW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4LmNo
ZWNrcG9pbnQoKSkgewotICAgICAgICAvLyBGb3IgaXRlcmF0b3JfbmV4dCwgd2UgY2FuJ3QgY2xv
YmJlciB0aGUgImRvbnRDbG9iYmVyUmVnaXN0ZXIiIHJlZ2lzdGVyIGVpdGhlci4KLSAgICAgICAg
dXNlZFJlZ2lzdGVycy5hZGQoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpkb250Q2xvYmJlclJl
Z2lzdGVyKTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgotICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25EZWxldGVCeVZhbE9wdGltaXplOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFjY2Vzc1R5
cGU6OkRlbGV0ZUJ5SUQ6Ci0gICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0
ZUJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRC
eVZhbDoKLSAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOgotICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKLSAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKLSAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uSW5CeUlkT3B0aW1pemU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQWNjZXNzVHlw
ZTo6R2V0QnlJZDoKLSAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ6
Ci0gICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OgotICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgotICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCi0g
ICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemU7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAK
LSAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1p
emU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6
IAotICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGlt
aXplOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6Ci0gICAg
ICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7Ci0gICAgICAgIGNhc2UgUHV0
S2luZDo6Tm90RGlyZWN0OgotICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1v
ZGUuaXNTdHJpY3QoKSkKLSAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgotICAgICAg
ICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKLSAgICAgICAg
ICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0
aW1pemU7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgot
ICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZh
dGVGaWVsZFN0cmljdE9wdGltaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
UHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgotICAgICAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBY2Nl
c3NUeXBlOjpQdXRCeVZhbDoKLSAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtp
bmQpIHsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgICAgICBpZiAo
dW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQotICAgICAgICAgICAgICAgIG1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0
QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFB1dEtpbmQ6OkRpcmVjdDoKLSAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFN
b2RlLmlzU3RyaWN0KCkpCi0gICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0
cmljdE9wdGltaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6Ci0gICAgICAgIG1f
c2xvd09wZXJhdGlvbiA9IHVubGlua2VkU3R1YkluZm8ucHJpdmF0ZUZpZWxkUHV0S2luZC5pc0Rl
ZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9w
ZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgotICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKLSAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBBY2Nl
c3NUeXBlOjpEZWxldGVCeVZhbDoKLSAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFs
c2U7Ci0gICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwot
ICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJv
cGVydHk7Ci0gICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVz
dWx0OwotICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6
c3R1YkluZm87Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlJ
RDoKLSAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKLSAgICAgICAgYmFzZUdQ
UiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKLSAgICAgICAgcmVncy5wcm9wZXJ0
eUdQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeUlk
UmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5
SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFjY2Vzc1R5
cGU6OkdldEJ5VmFsOgotICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6Ci0gICAg
ICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOwotICAgICAgICBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKLSAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwotICAgICAgICB2YWx1ZUdQUiA9
IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKLSAgICAgICAgbV9zdHViSW5mb0dQ
UiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6Ci0gICAgICAgIGhhc0NvbnN0YW50SWRl
bnRpZmllciA9IGZhbHNlOwotICAgICAgICBwcm90b3R5cGVJc0tub3duT2JqZWN0ID0gZmFsc2U7
Ci0gICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOwot
ICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0Owot
ICAgICAgICByZWdzLnByb3RvdHlwZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6
cHJvdG87Ci0gICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnN0dWJJbmZvOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlW
YWw6Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCi0gICAgY2FzZSBBY2Nl
c3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAotICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIg
PSBmYWxzZTsKLSAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFz
ZTsKLSAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHk7Ci0gICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpy
ZXN1bHQ7Ci0gICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6
OnN0dWJJbmZvOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoK
LSAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKLSAgICAgICAgcmVncy50aGlz
R1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVn
aXN0ZXJzOjpiYXNlOwotICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJz
OjpyZXN1bHQ7Ci0gICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVy
czo6c3R1YkluZm87Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0
QnlJZDoKLSAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6Ci0gICAgY2FzZSBBY2Nl
c3NUeXBlOjpHZXRCeUlkOgotICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOwot
ICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOwotICAgICAgICBiYXNlR1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwotICAgICAgICB2YWx1ZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OwotICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6Ci0gICAgICAgIGhhc0NvbnN0YW50SWRlbnRp
ZmllciA9IHRydWU7Ci0gICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1Jl
Z2lzdGVyczo6YmFzZTsKLSAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhp
c1JlZ2lzdGVyczo6cmVzdWx0OwotICAgICAgICByZWdzLnRoaXNHUFIgPSBCYXNlbGluZUdldEJ5
SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwotICAgICAgICBtX3N0dWJJbmZvR1BSID0g
QmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6Ci0gICAgICAgIGhhc0NvbnN0YW50SWRl
bnRpZmllciA9IHRydWU7Ci0gICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7Ci0g
ICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7Ci0gICAgICAg
IHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKLSAgICAgICAgbV9z
dHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6Ci0gICAgY2FzZSBBY2Nlc3NU
eXBlOjpQdXRQcml2YXRlTmFtZToKLSAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFs
c2U7Ci0gICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwot
ICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJv
cGVydHk7Ci0gICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFs
dWU7Ci0gICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpz
dHViSW5mbzsKLSAgICAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6UHV0QnlWYWwp
Ci0gICAgICAgICAgICBtX2FycmF5UHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnByb2ZpbGU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJp
dmF0ZUJyYW5kOgotICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6Ci0gICAg
ICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOwotICAgICAgICB2YWx1ZUdQUiA9IElu
dmFsaWRHUFJSZWc7Ci0gICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVyczo6YmFzZTsKLSAgICAgICAgcmVncy5icmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5k
UmVnaXN0ZXJzOjpicmFuZDsKLSAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0
ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0odW5saW5rZWRTdHViSW5mbyk7Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0jZW5kaWYKLX0KLQogI2lmIEFTU0VSVF9FTkFCTEVECiB2b2lkIFN0cnVjdHVyZVN0
dWJJbmZvOjpjaGVja0NvbnNpc3RlbmN5KCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKaW5kZXggMzM2ODViYzEzNzliZTI1Y2Qy
YThhMWM1ZmU5MDdkMjg5YTMzMzQxMC4uNmU5YWIyM2UzOTU4Y2FhZTgxNjc3ZTk5ODFiNWQ1NGYz
YWQ5NGM0MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmgKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJKSVRTdHViUm91dGlu
ZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgot
I2luY2x1ZGUgIlB1dEtpbmQuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogI2luY2x1ZGUg
IlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgpAQCAtNTcsNyArNTYsNiBA
QCBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3QgewogICAgIEdldEJ5VmFsLAogICAgIFB1
dEJ5SWQsCiAgICAgUHV0QnlWYWwsCi0gICAgUHV0UHJpdmF0ZU5hbWUsCiAgICAgSW5CeUlkLAog
ICAgIEluQnlWYWwsCiAgICAgSGFzUHJpdmF0ZU5hbWUsCkBAIC04MCw4ICs3OCw2IEBAIGVudW0g
Y2xhc3MgQ2FjaGVUeXBlIDogaW50OF90IHsKICAgICBTdHJpbmdMZW5ndGgKIH07CiAKLXN0cnVj
dCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOwotCiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbyB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RydWN0dXJlU3R1YkluZm8pOwogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtMTAyLDggKzk4LDYgQEAgcHVibGljOgogICAgIHZvaWQg
ZGVyZWYoKTsKICAgICB2b2lkIGFib3V0VG9EaWUoKTsKIAotICAgIHZvaWQgaW5pdGlhbGl6ZUZy
b21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8mKTsKLQogICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAgLy8gQ2hl
Y2sgaWYgdGhlIHN0dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0aGF0IGFyZSBkZWFkLiBJZiBpdCBk
b2VzLCB0aGVuIGl0IHJlc2V0cyBpdHNlbGYsCkBAIC0zMzEsMTkgKzMyNSwxMyBAQCBwcml2YXRl
OgogCiBwdWJsaWM6CiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwotICAgIFByb3BlcnR5T2Zm
c2V0IGJ5SWRTZWxmT2Zmc2V0OwotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZCeUlkU2Vs
Zk9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgYnlJ
ZFNlbGZPZmZzZXQpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZklubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1Yklu
Zm8sIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7IH0KICAgICB1bmlvbiB7CisgICAgICAg
IHN0cnVjdCB7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgIH0g
YnlJZFNlbGY7CiAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBzdHViOwogICAgIH0gdTsKLSAg
ICBTdHJ1Y3R1cmUqIGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoVk0mIHZtKQotICAgIHsKLSAg
ICAgICAgaWYgKCFtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpCi0gICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHZtLmdldFN0cnVjdHVyZShtX2lubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUpOwotICAgIH0KLSAgICBTdHJ1Y3R1cmVJRCBtX2lubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUgeyAwIH07CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlOwogcHJpdmF0ZToKICAgICBDYWNoZWFibGVJZGVudGlmaWVyIG1f
aWRlbnRpZmllcjsKICAgICAvLyBSZXByZXNlbnRzIHRob3NlIHN0cnVjdHVyZXMgdGhhdCBhbHJl
YWR5IGhhdmUgYnVmZmVyZWQgQWNjZXNzQ2FzZXMgaW4gdGhlIFBvbHltb3JwaGljQWNjZXNzLgpA
QCAtMzY0LDcgKzM1Miw2IEBAIHB1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklU
U3R1YlJvdXRpbmVQdHJUYWc+IG1fY29kZVB0cjsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZDb2RlUHRyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZv
LCBtX2NvZGVQdHIpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkRvbmVMb2NhdGlv
bigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgZG9uZUxvY2F0
aW9uKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTbG93UGF0aFN0YXJ0TG9jYXRp
b24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIHNsb3dQYXRo
U3RhcnRMb2NhdGlvbik7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2xvd09wZXJh
dGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgbV9zbG93
T3BlcmF0aW9uKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb3VudGRvd24oKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIGNvdW50ZG93bik7IH0K
QEAgLTQ2MCwxNyArNDQ3LDYgQEAgaW5saW5lIGF1dG8gYXBwcm9wcmlhdGVHZW5lcmljR2V0QnlJ
ZEZ1bmN0aW9uKEFjY2Vzc1R5cGUgdHlwZSkgLT4gZGVjbHR5cGUoJm9wZXIKICAgICB9CiB9CiAK
LXN0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvIHsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGU7Ci0gICAgUHV0S2luZCBwdXRLaW5kOwotICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJp
dmF0ZUZpZWxkUHV0S2luZCB7IFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSB9OwotICAgIEVD
TUFNb2RlIGVjbWFNb2RlIHsgRUNNQU1vZGU6OnNsb3BweSgpIH07Ci0gICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4OwotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPiBzdGFydDsgLy8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUgSUMg
Zm9yICpieUlkIGNhY2hlcy4gb3IgdGhlIGxvY2F0aW9uIG9mIHBhdGNoYWJsZSBqdW1wIGZvciAn
aW5zdGFuY2VvZicgY2FjaGVzLgotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+IGRvbmVMb2NhdGlvbjsKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4gc2xvd1BhdGhTdGFydExvY2F0aW9uOwotfTsKLQogI2Vsc2UKIAogY2xhc3MgU3RydWN0
dXJlU3R1YkluZm87CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3VwZXJTYW1wbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNh
bXBsZXIuY3BwCmluZGV4IDJlYjk1ZjY3NDczYzQzN2RlZWMwNjQ2OGUwN2UwMTg1OGZlMjMwNGIu
LmM3Nzc1M2ViMWM3MmY0ZmJhY2E5ODRlZGI0ZDg4MmEyNWVmMDJiMjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCkBAIC04NCw3ICs4NCw3
IEBAIHZvaWQgcHJpbnRTdXBlclNhbXBsZXJTdGF0ZSgpCiAgICAgZG91YmxlIHBlcmNlbnRhZ2Ug
PSAxMDAuMCAqIGluIC8gKGluICsgb3V0KTsKICAgICBpZiAocGVyY2VudGFnZSAhPSBwZXJjZW50
YWdlKQogICAgICAgICBwZXJjZW50YWdlID0gMC4wOwotICAgIGRhdGFMb2coIlBlcmNlbnQgdGlt
ZSBiZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFnOiAiLCBwZXJjZW50YWdlLCAiJVxuIik7CisgICAg
ZGF0YUxvZygiUGVyY2VudCB0aW1lIGJlaGluZCBzdXBlciBzYW1wbGVyIGZsYWc6ICIsIHBlcmNl
bnRhZ2UsICJcbiIpOwogfQogCiB2b2lkIGVuYWJsZVN1cGVyU2FtcGxlcigpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAppbmRl
eCA4Y2FhMmIxMzMzYjA1YjU2ODYyNGNkNGFmYmJlNDUxZjNhNDMzNDllLi45ZjYwMDUyZmIzNzI5
M2FiZjBjYThjYWMwMzk5NTE2ZmJkMDlmY2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKQEAgLTI3LDcgKzI3LDYgQEAK
IAogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAKLSNpbmNsdWRlICJCYXNlbGluZUpJ
VENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKICNpbmNsdWRl
ICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKQEAgLTc5LDggKzc4
LDYgQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGUKICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5l
Y2Vzc2FyeShsb2NrZXIpOwogICAgICAgICBtX3JhcmVEYXRhLT5tX3ByaXZhdGVCcmFuZFJlcXVp
cmVtZW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByaXZhdGVCcmFuZFJlcXVpcmVtZW50OjpO
ZWVkZWQpOwogICAgIH0KLQotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hv
bGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkp
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KQEAgLTMxOSw0OSArMzE2LDcgQEAg
aW50IFVubGlua2VkQ29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0aW9uU3Ry
ZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmYKICAgICByZXR1cm4gbV9vdXRPZkxpbmVKdW1wVGFyZ2V0
cy5nZXQoYnl0ZWNvZGVPZmZzZXQpOwogfQogCi0jaWYgQVNTRVJUX0VOQUJMRUQKLWJvb2wgVW5s
aW5rZWRDb2RlQmxvY2s6Omhhc0lkZW50aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsK
LSAgICBpZiAobnVtYmVyT2ZJZGVudGlmaWVycygpID4gMTAwKSB7Ci0gICAgICAgIGlmIChudW1i
ZXJPZklkZW50aWZpZXJzKCkgIT0gbV9jYWNoZWRJZGVudGlmaWVyVWlkcy5zaXplKCkpIHsKLSAg
ICAgICAgICAgIExvY2tlciBsb2NrZXIobV9jYWNoZWRJZGVudGlmaWVyVWlkc0xvY2spOwotICAg
ICAgICAgICAgSGFzaFNldDxVbmlxdWVkU3RyaW5nSW1wbCo+IGNhY2hlZElkZW50aWZpZXJVaWRz
OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSWRlbnRpZmll
cnMoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmll
ciA9IHRoaXMtPmlkZW50aWZpZXIoaSk7Ci0gICAgICAgICAgICAgICAgY2FjaGVkSWRlbnRpZmll
clVpZHMuYWRkKGlkZW50aWZpZXIuaW1wbCgpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgICAgIG1fY2FjaGVkSWRlbnRpZmll
clVpZHMgPSBXVEZNb3ZlKGNhY2hlZElkZW50aWZpZXJVaWRzKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHJldHVybiBtX2NhY2hlZElkZW50aWZpZXJVaWRzLmNvbnRhaW5zKHVpZCk7Ci0gICAgfQot
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSWRlbnRpZmllcnMoKTsgKytp
KSB7Ci0gICAgICAgIGlmIChpZGVudGlmaWVyKGkpLmltcGwoKSA9PSB1aWQpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCi0KLWlu
dDMyX3QgVW5saW5rZWRDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9s
ZCkKLXsKLSAgICBzd2l0Y2ggKGRpZE9wdGltaXplKCkpIHsKLSAgICBjYXNlIFRyaVN0YXRlOjpJ
bmRldGVybWluYXRlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkOwotICAgIGNhc2UgVHJpU3Rh
dGU6OkZhbHNlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkICogNDsKLSAgICBjYXNlIFRyaVN0
YXRlOjpUcnVlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkIC8gMjsKLSAgICB9Ci0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHRocmVzaG9sZDsKLX0KLQotCi12b2lkIFVu
bGlua2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKHVuc2lnbmVkIG51bUJpbmFy
eUFyaXRoUHJvZmlsZXMsIHVuc2lnbmVkIG51bVVuYXJ5QXJpdGhQcm9maWxlcykKK3ZvaWQgVW5s
aW5rZWRDb2RlQmxvY2s6OmFsbG9jYXRlU2hhcmVkUHJvZmlsZXMoKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX21ldGFkYXRhLT5pc0ZpbmFsaXplZCgpKTsKIApAQCAtMzgyLDE3ICszMzcsMTYg
QEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9maWxlcyh1bnNpZ25l
ZCBudW1CaW5hcnlBcml0aFByb2ZpbGVzLAogICAgIGlmIChtX21ldGFkYXRhLT5oYXNNZXRhZGF0
YSgpKSB7CiAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJyYXlQcm9maWxlcyA9IDA7CiAKLSNk
ZWZpbmUgQ09VTlQoX19vcCkgbnVtYmVyT2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51
bUVudHJpZXM8X19vcD4oKTsKKyNkZWZpbmUgQ09VTlQoX19vcCkgXAorICAgICAgICBudW1iZXJP
ZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxfX29wPigpOwogICAgICAg
ICBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKENPVU5UKQogICAgICAgICBGT1Jf
RUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhDT1VOVCkKICN1bmRlZiBDT1VO
VAogICAgICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmll
czxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICAgICAgbnVtYmVyT2ZBcnJheVByb2ZpbGVzICs9IG1f
bWV0YWRhdGEtPm51bUVudHJpZXM8T3BHZXRCeUlkPigpOworCiAgICAgICAgIG1fYXJyYXlQcm9m
aWxlcyA9IEZpeGVkVmVjdG9yPFVubGlua2VkQXJyYXlQcm9maWxlPihudW1iZXJPZkFycmF5UHJv
ZmlsZXMpOwogICAgIH0KLQotICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcyA9IEZpeGVkVmVjdG9y
PEJpbmFyeUFyaXRoUHJvZmlsZT4obnVtQmluYXJ5QXJpdGhQcm9maWxlcyk7Ci0gICAgbV91bmFy
eUFyaXRoUHJvZmlsZXMgPSBGaXhlZFZlY3RvcjxVbmFyeUFyaXRoUHJvZmlsZT4obnVtVW5hcnlB
cml0aFByb2ZpbGVzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCmluZGV4IGNhODcyOGIy
M2JiNGNjZTg2YTE4MGNmZGE1MGY0YzdkZGIyMzM0YWQuLjk2Yjg1ODhiZGI0ZDQ3NDFjZGM4MmMz
Yjg4YTVhZmYzMWZhYjE1YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBAIC0yNSwxMiArMjUsMTAgQEAKIAogI3ByYWdtYSBv
bmNlCiAKLSNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKICNpbmNsdWRlICJBcnJheVByb2ZpbGUu
aCIKICNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAiQ29kZVR5cGUu
aCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgotI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50
ZXIuaCIKICNpbmNsdWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgiCiAjaW5jbHVkZSAiSGFuZGxl
ckluZm8uaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCkBAIC02Niw3ICs2NCw2IEBAIGNsYXNz
IFVubGlua2VkQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I7CiBj
bGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGU7Ci1jbGFzcyBCYXNlbGluZUpJVENvZGU7CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm87
CiBlbnVtIGNsYXNzIExpbmtUaW1lQ29uc3RhbnQgOiBpbnQzMl90OwogCkBAIC0xNzgsNyArMTc1
LDYgQEAgcHVibGljOgogCiAgICAgY29uc3QgRml4ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25v
d24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9
CiAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRv
Q29uc3RhbnRJbmRleCgpXTsgfQotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJz
W3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0
Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJl
Z2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9CiAgICAgY29uc3QgRml4ZWRW
ZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247
IH0KIApAQCAtMjExLDE1ICsyMDcsNiBAQCBwdWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2Rl
IHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1v
ZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0
cnVjdGlvbnMoKSBjb25zdDsKLSAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25BdChC
eXRlY29kZUluZGV4IGluZGV4KSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5hdChpbmRl
eCkucHRyKCk7IH0KLSAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24pCi0gICAgewotICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNC
ZWdpbiA9IGluc3RydWN0aW9ucygpLmF0KDApLnB0cigpOwotICAgICAgICBjb25zdCBhdXRvKiBp
bnN0cnVjdGlvbnNFbmQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGluc3RydWN0aW9uc0JlZ2luKSArIGluc3RydWN0aW9u
cygpLnNpemUoKSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RydWN0aW9uID49IGluc3Ry
dWN0aW9uc0JlZ2luICYmIGluc3RydWN0aW9uIDwgaW5zdHJ1Y3Rpb25zRW5kKTsKLSAgICAgICAg
cmV0dXJuIGluc3RydWN0aW9uIC0gaW5zdHJ1Y3Rpb25zQmVnaW47Ci0gICAgfQotICAgIHVuc2ln
bmVkIGluc3RydWN0aW9uc1NpemUoKSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5zaXpl
KCk7IH0KIAogICAgIHVuc2lnbmVkIG51bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1f
bnVtQ2FsbGVlTG9jYWxzOyB9CiAgICAgdW5zaWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJu
IG1fbnVtVmFyczsgfQpAQCAtMzQ3LDIxICszMzQsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gbV9tZXRhZGF0YS0+c2l6ZUluQnl0ZXMoKTsKICAgICB9CiAKLSAgICBib29sIGxvb3BIaW50
c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkKLSAgICB7Ci0gICAgICAgIC8vIFNv
bWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhl
eSBydW4uCi0gICAgICAgIHJldHVybiAhaXNCdWlsdGluRnVuY3Rpb24oKTsKLSAgICB9Ci0gICAg
dm9pZCBhbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKHVuc2lnbmVkIG51bUJpbmFyeUFyaXRoUHJvZmls
ZXMsIHVuc2lnbmVkIG51bVVuYXJ5QXJpdGhQcm9maWxlcyk7CisgICAgdm9pZCBhbGxvY2F0ZVNo
YXJlZFByb2ZpbGVzKCk7CiAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUmIHVubGlua2VkVmFsdWVQ
cm9maWxlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ZhbHVlUHJvZmlsZXNbaW5kZXhdOyB9
CiAgICAgVW5saW5rZWRBcnJheVByb2ZpbGUmIHVubGlua2VkQXJyYXlQcm9maWxlKHVuc2lnbmVk
IGluZGV4KSB7IHJldHVybiBtX2FycmF5UHJvZmlsZXNbaW5kZXhdOyB9CiAKLSNpZiBBU1NFUlRf
RU5BQkxFRAotICAgIGJvb2wgaGFzSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOwotI2Vu
ZGlmCi0KLSAgICBpbnQzMl90IHRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCk7Ci0K
IHByb3RlY3RlZDoKICAgICBVbmxpbmtlZENvZGVCbG9jayhWTSYsIFN0cnVjdHVyZSosIENvZGVU
eXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYsIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+
KTsKIApAQCAtNDIxLDkgKzM5Nyw2IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9sZXhpY2Fs
U2NvcGVGZWF0dXJlcyA6IDQ7CiBwdWJsaWM6CiAgICAgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7
Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBtX3VubGlua2Vk
QmFzZWxpbmVDb2RlOwotI2VuZGlmCiBwcml2YXRlOgogICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1
cmVzIHsgMCB9OwogICAgIFNvdXJjZVBhcnNlTW9kZSBtX3BhcnNlTW9kZTsKQEAgLTQ0MCw2ICs0
MTMsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4g
bV9pbnN0cnVjdGlvbnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcz4gbV9saXZlbmVzczsKIAorCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpFeGl0
UHJvZmlsZSBtX2V4aXRQcm9maWxlOwogI2VuZGlmCkBAIC00ODQsMTYgKzQ1OCw2IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIHJldHVybiBvdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9u
Lm9mZnNldCgpKTsKICAgICB9Ci0gICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoY29uc3QgSW5z
dHJ1Y3Rpb24qIHBjKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSB0
aGlzLT5ieXRlY29kZU9mZnNldChwYyk7Ci0gICAgICAgIHJldHVybiBvdXRPZkxpbmVKdW1wT2Zm
c2V0KGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGJp
bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX2JpbmFyeUFyaXRoUHJvZmls
ZXNbaV07IH0KLSAgICBVbmFyeUFyaXRoUHJvZmlsZSYgdW5hcnlBcml0aFByb2ZpbGUodW5zaWdu
ZWQgaSkgeyByZXR1cm4gbV91bmFyeUFyaXRoUHJvZmlsZXNbaV07IH0KLQotICAgIEJhc2VsaW5l
RXhlY3V0aW9uQ291bnRlciYgbGxpbnRFeGVjdXRlQ291bnRlcigpIHsgcmV0dXJuIG1fbGxpbnRF
eGVjdXRlQ291bnRlcjsgfQogCiBwcml2YXRlOgogICAgIHVzaW5nIE91dE9mTGluZUp1bXBUYXJn
ZXRzID0gSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+OwpAQCAtNTAxLDE2
ICs0NjUsOCBAQCBwcml2YXRlOgogICAgIE91dE9mTGluZUp1bXBUYXJnZXRzIG1fb3V0T2ZMaW5l
SnVtcFRhcmdldHM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJhcmVEYXRhPiBtX3JhcmVEYXRhOwog
ICAgIEZpeGVkVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+IG1fZXhwcmVzc2lvbkluZm87Ci0g
ICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKICAgICBG
aXhlZFZlY3RvcjxVbmxpbmtlZFZhbHVlUHJvZmlsZT4gbV92YWx1ZVByb2ZpbGVzOwogICAgIEZp
eGVkVmVjdG9yPFVubGlua2VkQXJyYXlQcm9maWxlPiBtX2FycmF5UHJvZmlsZXM7Ci0gICAgRml4
ZWRWZWN0b3I8QmluYXJ5QXJpdGhQcm9maWxlPiBtX2JpbmFyeUFyaXRoUHJvZmlsZXM7Ci0gICAg
Rml4ZWRWZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+IG1fdW5hcnlBcml0aFByb2ZpbGVzOwotCi0j
aWYgQVNTRVJUX0VOQUJMRUQKLSAgICBMb2NrIG1fY2FjaGVkSWRlbnRpZmllclVpZHNMb2NrOwot
ICAgIEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPiBtX2NhY2hlZElkZW50aWZpZXJVaWRzOwot
I2VuZGlmCiAKIHByb3RlY3RlZDoKICAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2Vu
ZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9ja0dlbmVyYXRvci5jcHAKaW5kZXggM2M0YjNkM2JjOGE1MjdhYjUwMGY1OWM1ZDBkNGQzNjk0
OWFlYTYzMy4uM2I3MWE4MDMxMmVjYTY3NWJkNGE0MjIyYTI4YWVkOGM4N2EyZjIwZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2Vu
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2tHZW5lcmF0b3IuY3BwCkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBVbmxpbmtlZENv
ZGVCbG9ja0dlbmVyYXRvcjo6ZmluYWxpemUoc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3Ry
ZWFtPiBpbnMKICAgICB7CiAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2NvZGVCbG9jay0+Y2Vs
bExvY2soKSB9OwogICAgICAgICBtX2NvZGVCbG9jay0+bV9pbnN0cnVjdGlvbnMgPSBXVEZNb3Zl
KGluc3RydWN0aW9ucyk7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5hbGxvY2F0ZVNoYXJlZFByb2Zp
bGVzKG1fbnVtQmluYXJ5QXJpdGhQcm9maWxlcywgbV9udW1VbmFyeUFyaXRoUHJvZmlsZXMpOwor
ICAgICAgICBtX2NvZGVCbG9jay0+YWxsb2NhdGVTaGFyZWRQcm9maWxlcygpOwogICAgICAgICBt
X2NvZGVCbG9jay0+bV9tZXRhZGF0YS0+ZmluYWxpemUoKTsKIAogICAgICAgICBtX2NvZGVCbG9j
ay0+bV9qdW1wVGFyZ2V0cyA9IFdURk1vdmUobV9qdW1wVGFyZ2V0cyk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3Iu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVy
YXRvci5oCmluZGV4IDYwYTM1NDFkZGQyMjIxZTlmZTc4YjFiYTliZjU2ODU3M2NlZTk3NDQuLmNl
MzMwZDZhMjU5Y2FlYjAwZmQ3NDYzNmExZDU5MDRkNDRlYTA1MjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVy
YXRvci5oCkBAIC0yMDAsOSArMjAwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CiAKLSAgICB1bnNpZ25lZCBhZGRCaW5hcnlBcml0aFByb2ZpbGUoKSB7
IHJldHVybiBtX251bUJpbmFyeUFyaXRoUHJvZmlsZXMrKzsgfQotICAgIHVuc2lnbmVkIGFkZFVu
YXJ5QXJpdGhQcm9maWxlKCkgeyByZXR1cm4gbV9udW1VbmFyeUFyaXRoUHJvZmlsZXMrKzsgfQot
CiBwcml2YXRlOgogICAgIFZNJiBtX3ZtOwogICAgIFN0cm9uZzxVbmxpbmtlZENvZGVCbG9jaz4g
bV9jb2RlQmxvY2s7CkBAIC0yMjQsOCArMjIxLDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8SW5z
dHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4gbV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zm
c2V0czsKICAgICBWZWN0b3I8Qml0VmVjdG9yPiBtX2JpdFZlY3RvcnM7CiAgICAgVmVjdG9yPElk
ZW50aWZpZXJTZXQ+IG1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsKLSAgICB1bnNpZ25lZCBtX251
bUJpbmFyeUFyaXRoUHJvZmlsZXMgeyAwIH07Ci0gICAgdW5zaWduZWQgbV9udW1VbmFyeUFyaXRo
UHJvZmlsZXMgeyAwIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAppbmRl
eCA0MmViM2NhZGVlMGNhNDkxOGE5NTJlMzg2MWMyYjY1NjIzMmVmZTQzLi5hZjFjYzQ0MmFjMzk2
N2VlNzA0MzNmYzBmNGY5N2RkYjk3ZTZlOWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCkBAIC02NCwxNSArNjQs
NiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVubGlua2VkTWV0YWRh
dGFUYWJsZSk7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZT4KLSAgICB1
aW50cHRyX3Qgb2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGNvbnN0IE9wY29kZSYgb3Bjb2RlKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKG1faXNGaW5hbGl6ZWQpOwotICAgICAgICB1aW50cHRyX3QgYmFz
ZVR5cGVPZmZzZXQgPSBtX2lzMzJCaXQgPyBvZmZzZXRUYWJsZTMyKClbT3Bjb2RlOjpvcGNvZGVJ
RF0gOiBvZmZzZXRUYWJsZTE2KClbT3Bjb2RlOjpvcGNvZGVJRF07Ci0gICAgICAgIGJhc2VUeXBl
T2Zmc2V0ID0gcm91bmRVcFRvTXVsdGlwbGVPZihhbGlnbm9mKHR5cGVuYW1lIE9wY29kZTo6TWV0
YWRhdGEpLCBiYXNlVHlwZU9mZnNldCk7Ci0gICAgICAgIHJldHVybiBiYXNlVHlwZU9mZnNldCAr
IHNpemVvZih0eXBlbmFtZSBPcGNvZGU6Ok1ldGFkYXRhKSAqIG9wY29kZS5tX21ldGFkYXRhSUQ7
Ci0gICAgfQotCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgogICAgIHVuc2lnbmVk
IG51bUVudHJpZXMoKTsKIApAQCAtMTE2LDcgKzEwNyw2IEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiBzX29mZnNldDE2VGFibGVTaXplOwogICAgIH0KIAotCiAgICAgdXNpbmcgT2Zmc2V0MzIg
PSB1aW50MzJfdDsKICAgICB1c2luZyBPZmZzZXQxNiA9IHVpbnQxNl90OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKaW5kZXggZjMxMTU0Y2JjZmZk
YzcxZWE0NzE4NjgxNDIxZmRmNzkzOTU0Yjk1ZS4uYmZmYzFmMDM1NGYxYWI4ZjgxOGI3NjUyZjNk
ZDJiYmVlMTNkMDk3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVByb2ZpbGUuaApAQCAtNDUsMTEgKzQ1LDEzIEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsK
IAogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVy
T2ZCdWNrZXRzQXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJP
ZlNwZWNGYWlsQnVja2V0cyA9IDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNr
ZXRJbmRleE1hc2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgdG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJP
ZlNwZWNGYWlsQnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNlKCkKICAgICB7Ci0g
ICAgICAgIGNsZWFyQnVja2V0cygpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dG90YWxOdW1iZXJPZkJ1Y2tldHM7ICsraSkKKyAgICAgICAgICAgIG1fYnVja2V0c1tpXSA9IEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIH0KICAgICAKICAgICBFbmNvZGVkSlNWYWx1
ZSogc3BlY0ZhaWxCdWNrZXQodW5zaWduZWQgaSkKQEAgLTU3LDEyICs1OSw2IEBAIHN0cnVjdCBW
YWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgQVNTRVJUKG51bWJlck9mQnVja2V0cyArIGkgPCB0
b3RhbE51bWJlck9mQnVja2V0cyk7CiAgICAgICAgIHJldHVybiBtX2J1Y2tldHMgKyBudW1iZXJP
ZkJ1Y2tldHMgKyBpOwogICAgIH0KLQotICAgIHZvaWQgY2xlYXJCdWNrZXRzKCkKLSAgICB7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytp
KQotICAgICAgICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7
Ci0gICAgfQogICAgIAogICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKHVuc2lnbmVkIGJ1
Y2tldCkgY29uc3QKICAgICB7CkBAIC0xMjcsNiArMTIzLDggQEAgc3RydWN0IFZhbHVlUHJvZmls
ZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAorICAgIC8vIFVwZGF0ZXMgdGhlIHByZWRp
Y3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVyIGNhbGwgdGhpcyBmcm9tIGFueSB0
aHJlYWQKKyAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0aGUgY29kZS4KICAgICBTcGVjdWxh
dGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9m
QnVja2V0czsgKytpKSB7CkBAIC0xNDEsNyArMTM5LDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJh
c2UgewogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbjsKICAgICB9Ci0KKyAg
ICAKICAgICBFbmNvZGVkSlNWYWx1ZSBtX2J1Y2tldHNbdG90YWxOdW1iZXJPZkJ1Y2tldHNdOwog
CiAgICAgU3BlY3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9uIHsgU3BlY05vbmUgfTsKQEAgLTE2Myw3
ICsxNjEsNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0cyA6IHB1
YmxpYyBWYWx1ZVByb2ZpbGVCYXNlPDEgPDwgbG9nTnVtYgogCiBzdHJ1Y3QgVmFsdWVQcm9maWxl
IDogcHVibGljIFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4gewogICAgIFZh
bHVlUHJvZmlsZSgpIDogVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPigpIHsg
fQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihWYWx1ZVByb2ZpbGUsIG1fYnVja2V0c1swXSk7IH0KIH07CiAKIHN0cnVj
dCBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIgOiBwdWJsaWMgVmFsdWVQcm9maWxlIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHAKaW5kZXggZTczNGU0MjgxMjM5ZGEwOTMyOTdlM2U2ZjA1MWMxNTZiYjhh
YzkwZi4uNWQ4ZThkMTU4YWE0Mjc1ZWM4YjcyOWRjNjIyMWFhNGY0ODhkNWYyMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAKQEAgLTE1OTgsNyArMTU5OCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0VW5hcnlPcChPcGNvZGVJRCBvcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSCiAg
ICAgICAgIGVtaXRVbmFyeU9wPE9wTm90Pihkc3QsIHNyYyk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICBPcE5lZ2F0ZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywg
bV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCksIHR5cGUpOworICAgICAgICBPcE5l
Z2F0ZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2Ugb3BfYml0bm90OgogICAgICAgICBlbWl0VW5hcnlPcDxPcEJpdG5vdD4oZHN0LCBzcmMpOwpA
QCAtMTY5NiwxMyArMTY5NiwxMyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFR5cGVPZihSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykKIAogUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbmMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9w
SW5jOjplbWl0KHRoaXMsIHNyY0RzdCwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxl
KCkpOworICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0RzdCk7CiAgICAgcmV0dXJuIHNyY0RzdDsK
IH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREZWMoUmVnaXN0ZXJJRCog
c3JjRHN0KQogewotICAgIE9wRGVjOjplbWl0KHRoaXMsIHNyY0RzdCwgbV9jb2RlQmxvY2stPmFk
ZFVuYXJ5QXJpdGhQcm9maWxlKCkpOworICAgIE9wRGVjOjplbWl0KHRoaXMsIHNyY0RzdCk7CiAg
ICAgcmV0dXJuIHNyY0RzdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDk2NzY3YTg4NGRkYjgxODRl
ZTgwNDRjZjdlYmE5NWM2ZTZmOGU5ZmYuLjhmYTA0Nzg4N2EwNGZiNmIzMTMxNDAzYTJiMTc2NmEz
NWVhYWNkZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTY4Miw3ICs2ODIsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIFJlZ2lzdGVySUQqPgogICAgICAgICBlbWl0QmluYXJ5T3AoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZWdpc3RlcklEKiBzcmMyLCBPcGVyYW5kVHlw
ZXMgdHlwZXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJpbmFyeU9wOjplbWl0KHRoaXMsIGRz
dCwgc3JjMSwgc3JjMiwgbV9jb2RlQmxvY2stPmFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpLCB0eXBl
cyk7CisgICAgICAgICAgICBCaW5hcnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5
cGVzKTsKICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAppbmRleCAzNjVlZWE1ZDNkMzA2NTUzMWUxZDNj
Nzc0MTM0OTNiYzIxNWI1NGFlLi5lMGI4MWYyOWUzY2FmMzE5NjQ5ZWM2ZWE1NDBkMGUyOGU5Zjkz
ZDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaApAQCAtMjcs
NyArMjcsNiBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKLSNpbmNsdWRlICJCYXNlbGluZUpJ
VENvZGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIKICNp
bmNsdWRlICJERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCIKICNp
bmNsdWRlICJERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKQEAgLTM1LDkgKzM0LDcg
QEAKICNpbmNsdWRlICJERkdKdW1wUmVwbGFjZW1lbnQuaCIKICNpbmNsdWRlICJERkdPU1JFbnRy
eS5oIgogI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZVNldC5oIgotI2luY2x1ZGUgIkpJVE1hdGhJ
Qy5oIgogI2luY2x1ZGUgIkpTQ2FzdC5oIgotI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgi
CiAjaW5jbHVkZSAiUHJvZmlsZXJDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIlJlY29yZGVkU3Rh
dHVzZXMuaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+CkBAIC03Myw3ICs3MCw3IEBAIHN0cnVjdCBX
ZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiB7CiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV90bzsK
IH07CiAgICAgICAgIAotY2xhc3MgQ29tbW9uRGF0YSA6IHB1YmxpYyBNYXRoSUNIb2xkZXIgewor
Y2xhc3MgQ29tbW9uRGF0YSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tbW9uRGF0YSk7
CiBwdWJsaWM6CiAgICAgQ29tbW9uRGF0YSgpCkBAIC0xMTksNyArMTE2LDYgQEAgcHVibGljOgog
ICAgIEZpeGVkVmVjdG9yPENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludD4gbV93YXRjaHBv
aW50czsKICAgICBGaXhlZFZlY3RvcjxBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+IG1fYWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50czsKICAgICBGaXhlZFZlY3RvcjxBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ+IG1fYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50czsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1f
cGNUb0NvZGVPcmlnaW5NYXA7CiAgICAgUmVjb3JkZWRTdGF0dXNlcyByZWNvcmRlZFN0YXR1c2Vz
OwogICAgIFZlY3RvcjxKdW1wUmVwbGFjZW1lbnQ+IG1fanVtcFJlcGxhY2VtZW50czsKICAgICAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCmluZGV4IGJkNTkxYzZlNWUw
YTJmMzYyNDI5NDU0ZTdjNDU1NmQxMGNhZDA5YjEuLjVlMmYwYTBkMDgxOWQ2NDM4Nzk4MmYxOTVj
ZDAyOGQ4NGY3MDkxNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29kZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNw
cApAQCAtMzAsNyArMzAsNiBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAi
RlRMRm9yT1NSRW50cnlKSVRDb2RlLmgiCi0jaW5jbHVkZSAiSnVtcFRhYmxlLmgiCiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvZGUuaAppbmRleCA0NTNjM2RjZGFlZDFmM2MzYzJhZjE0YjgxMmI4YTIzYTU2ZDExY2EyLi5l
YzJiNDgzMzI4ZTM4OTRkMTZmNDFlODYwNDhiMGZiYjM2NGQ5NzI5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGUuaApAQCAtNDIsOSArNDIsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogY2xhc3MgVHJhY2tlZFJlZmVyZW5jZXM7CiAKLXN0cnVjdCBTaW1wbGVKdW1wVGFibGU7Ci1z
dHJ1Y3QgU3RyaW5nSnVtcFRhYmxlOwotCiBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgSklUQ29t
cGlsZXI7CkBAIC0xMDQsOCArMTAxLDYgQEAgcHVibGljOgogICAgIHN0ZDo6b3B0aW9uYWw8Q29k
ZU9yaWdpbj4gZmluZFBDKENvZGVCbG9jayosIHZvaWQqIHBjKSBmaW5hbDsKIAogICAgIHVzaW5n
IERpcmVjdEpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVmRm9yREZHOwotCi0gICAgUENUb0NvZGVP
cmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gY29tbW9uLm1f
cGNUb0NvZGVPcmlnaW5NYXAuZ2V0KCk7IH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIEpJVENvbXBpbGVyOyAvLyBBbGxvdyBKSVRDb21waWxlciB0byBjYWxsIHNldENvZGVSZWYo
KS4KQEAgLTExNSw4ICsxMTAsNiBAQCBwdWJsaWM6CiAgICAgRml4ZWRWZWN0b3I8REZHOjpPU1JF
bnRyeURhdGE+IG1fb3NyRW50cnk7CiAgICAgRml4ZWRWZWN0b3I8REZHOjpPU1JFeGl0PiBtX29z
ckV4aXQ7CiAgICAgRml4ZWRWZWN0b3I8REZHOjpTcGVjdWxhdGlvblJlY292ZXJ5PiBtX3NwZWN1
bGF0aW9uUmVjb3Zlcnk7Ci0gICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRj
aEp1bXBUYWJsZXM7Ci0gICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3
aXRjaEp1bXBUYWJsZXM7CiAgICAgREZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtIHZhcmlhYmxlRXZl
bnRTdHJlYW07CiAgICAgREZHOjpNaW5pZmllZEdyYXBoIG1pbmlmaWVkREZHOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4IGFlMzhmNmY3ZDI1
ZTUwOGM5MGIyNThhOTBmMzczM2QyNTIwZjgwMjMuLjEyZjI5ZjEwNzE1OGFmYjAwYzY1OGE2ZGY0
MzlhNzkxODQyZTg4MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCkBAIC0xODUsMTIgKzE4NSwxMyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpCiAgICAgCiAgICAgbV9ncmFwaC5yZWdpc3RlckZyb3plblZh
bHVlcygpOwogCi0gICAgQVNTRVJUKG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
LmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzLmlz
RW1wdHkoKSk7Ci0gICAgaWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0Vt
cHR5KCkpIAotICAgICAgICBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdU
Rk1vdmUobV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMpOwotICAgIGlmICghbV9ncmFw
aC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKQotICAgICAgICBtX2ppdENvZGUtPm1fc3dp
dGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMpOworICAg
IGlmICghbV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpIHx8ICFtX2dy
YXBoLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgaWYgKCFtX2dyYXBo
Lm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2NvZGVC
bG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdU
Rk1vdmUobV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMpOworICAgICAgICBpZiAoIW1f
Z3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fY29kZUJs
b2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZSht
X2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcyk7CisgICAgfQogCiAgICAgZm9yIChCYWc8U3dpdGNo
RGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX2dyYXBoLm1fc3dpdGNoRGF0YS5iZWdpbigpOyAhIWl0
ZXI7ICsraXRlcikgewogICAgICAgICBTd2l0Y2hEYXRhJiBkYXRhID0gKippdGVyOwpAQCAtMTk4
LDEyICsxOTksMTIgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKQogICAgICAgICBjYXNlIFN3aXRjaENoYXI6CiAgICAgICAgIGNhc2UgU3dpdGNoSW1tOiB7
CiAgICAgICAgICAgICBpZiAoIWRhdGEuZGlkVXNlSnVtcFRhYmxlKSB7Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzW2RhdGEuc3dpdGNoVGFibGVJ
bmRleF0uaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPnN3
aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpLmlzRW1wdHkoKSk7CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNvbnN0IFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9ncmFwaC51bmxpbmtlZFN3
aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU2ltcGxl
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzW2Rh
dGEuc3dpdGNoVGFibGVJbmRleF07CisgICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5k
ZXgpOwogICAgICAgICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhyb3VnaC5i
bG9jay0+aW5kZXhdKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxpbmtlZFRhYmxlLm1f
Y3RpT2Zmc2V0cy5zaXplKCkgPT0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHMuc2l6ZSgp
KTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0
cy5zaXplKCk7IGotLTspCkBAIC0yMTgsMTIgKzIxOSwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjps
aW5rKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCiAKICAgICAgICAgY2FzZSBTd2l0Y2hTdHJpbmc6
IHsKICAgICAgICAgICAgIGlmICghZGF0YS5kaWRVc2VKdW1wVGFibGUpIHsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQobV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0
Y2hUYWJsZUluZGV4XS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2NvZGVC
bG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCkuaXNFbXB0
eSgpKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2dy
YXBoLnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7
Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9qaXRDb2RlLT5t
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUluZGV4XTsKKyAgICAgICAg
ICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dp
dGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CiAgICAgICAgICAgICBhdXRvIGN0
aURlZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fYmxvY2tI
ZWFkc1tkYXRhLmZhbGxUaHJvdWdoLmJsb2NrLT5pbmRleF0pOwogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQobGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNpemUoKSA9PSB1bmxpbmtlZFRhYmxl
Lm1fb2Zmc2V0VGFibGUuc2l6ZSgpICsgMSk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGVudHJ5
IDogbGlua2VkVGFibGUubV9jdGlPZmZzZXRzKQpAQCAtMzMyLDcgKzMzMyw3IEBAIHZvaWQgSklU
Q29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKICAgICB9CiAKICAgICBpZiAo
bV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkpCi0gICAgICAgIG1f
aml0Q29kZS0+Y29tbW9uLm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2Rl
T3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgbGlua0J1ZmZl
cik7CisgICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChtYWtlVW5pcXVl
PFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwg
bGlua0J1ZmZlcikpOwogfQogCiBzdGF0aWMgdm9pZCBlbWl0U3RhY2tPdmVyZmxvd0NoZWNrKEpJ
VENvbXBpbGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgc3RhY2tPdmVyZmxvdykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKaW5kZXggZTc2MzcxYzA1
MmNkMTIzODA4MTlhN2E0YTU2OWJiZmZmOGQwZjdkYy4uYThjMTQwNjZlMGFkZTAwYzY5OTBlNmNh
MDZiODg4ODZlZTZkZGU5OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eS5jcHAKQEAgLTk3LDYgKzk3LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiB2bSwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY28KICAgICBBU1NF
UlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAg
QVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBB
U1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5q
aXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0aWxsVmFsaWQpOwogCiAgICAgaWYgKCFPcHRpb25z
Ojp1c2VPU1JFbnRyeVRvREZHKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
LmNwcAppbmRleCBkM2NmYTMwMzk3ODdkNmVlNmE2OTc3OTI1N2Y4MzUwZDE0OWEzNzc1Li40ZWEw
NDUxOGVmZWI4M2Y2ZDNlMmJlMDYwZTc2OGU5YzI4MjY5MTMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKQEAgLTc3Miw2ICs3NzIsOSBAQCB2b2lkIE9TUkV4aXQ6
OmNvbXBpbGVFeGl0KENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9TUkV4aXQmIGV4
aXQsIGNvbnN0CiAgICAgLy8gVGhlIHRhZyByZWdpc3RlcnMgYXJlIG5lZWRlZCB0byBtYXRlcmlh
bGl6ZSByZWNvdmVyaWVzIGJlbG93LgogICAgIGppdC5lbWl0TWF0ZXJpYWxpemVUYWdDaGVja1Jl
Z2lzdGVycygpOwogCisgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCisgICAgICAg
IGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BF
bnRyeUZyYW1lKTsKKwogICAgIGlmIChpbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2lu
dCkgewogICAgICAgICBFbmNvZGVkSlNWYWx1ZSogdG1wU2NyYXRjaCA9IHNjcmF0Y2ggKyBvcGVy
YW5kcy50bXBJbmRleCgwKTsKICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9w
ZXJhdGlvbk1hdGVyaWFsaXplT1NSRXhpdFNpZGVTdGF0ZSk+KCZ2bSwgJmV4aXQsIHRtcFNjcmF0
Y2gpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uY3BwCmluZGV4IGI0NTFjZGI2MWY3YTExYjMzMDJjMTg1YzY2YmZmMTdhOWZk
YmUwOWYuLjI4OTczNzhiZjk4NThiMWM0Y2ZhNmEzMTEwMjhjYmEwY2JlZGRmNjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1v
bi5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCi0jaW5jbHVk
ZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRl
ICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSklULmgiCkBAIC0xMjAsMTAgKzExOSwxMCBA
QCB2b2lkIGhhbmRsZUV4aXRDb3VudHMoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
T1NSRXhpdEJhc2UmIGV4aXQpCiAgICAgaW50MzJfdCBjbGlwcGVkVmFsdWU7CiAgICAgc3dpdGNo
IChqaXQuY29kZUJsb2NrKCktPmppdFR5cGUoKSkgewogICAgIGNhc2UgSklUVHlwZTo6REZHSklU
OgotICAgICAgICBjbGlwcGVkVmFsdWUgPSBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBw
ZWRUaHJlc2hvbGQodGFyZ2V0VmFsdWUpOworICAgICAgICBjbGlwcGVkVmFsdWUgPSBCYXNlbGlu
ZUV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQoaml0LmNvZGVCbG9jaygpLT5nbG9i
YWxPYmplY3QoKSwgdGFyZ2V0VmFsdWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpJVFR5
cGU6OkZUTEpJVDoKLSAgICAgICAgY2xpcHBlZFZhbHVlID0gVXBwZXJUaWVyRXhlY3V0aW9uQ291
bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CisgICAgICAgIGNsaXBwZWRWYWx1
ZSA9IFVwcGVyVGllckV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQoaml0LmNvZGVC
bG9jaygpLT5nbG9iYWxPYmplY3QoKSwgdGFyZ2V0VmFsdWUpOwogICAgICAgICBicmVhazsKICAg
ICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTQz
LDggKzE0MiwxMSBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IGNhbGxlclJldHVyblBDKENvZGVCbG9jayogYmFzZWxpbmVDbwogewogICAgIGNhbGxlcklzTExJ
bnQgPSBPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgYmFzZWxpbmVDb2RlQmxvY2tG
b3JDYWxsZXItPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOwogCi0gICAg
aWYgKGNhbGxCeXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICBpZiAoY2FsbEJ5dGVjb2Rl
SW5kZXguY2hlY2twb2ludCgpKSB7CisgICAgICAgIGlmICghY2FsbGVySXNMTEludCkKKyAgICAg
ICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tX2hhc0xpbmtlZE9TUkV4aXQgPSB0
cnVlOwogICAgICAgICByZXR1cm4gTExJbnQ6OmNoZWNrcG9pbnRPU1JFeGl0RnJvbUlubGluZWRD
YWxsVHJhbXBvbGluZVRodW5rKCkuY29kZSgpOworICAgIH0KIAogICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqdW1wVGFyZ2V0OwogCkBAIC0xOTYsNiArMTk4LDggQEAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjYWxsZXJSZXR1cm5Q
QyhDb2RlQmxvY2sqIGJhc2VsaW5lQ28KICN1bmRlZiBMTElOVF9SRVRVUk5fTE9DQVRJT04KIAog
ICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tX2hhc0xp
bmtlZE9TUkV4aXQgPSB0cnVlOworCiAgICAgICAgIHN3aXRjaCAodHJ1ZUNhbGxlckNhbGxLaW5k
KSB7CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDYWxsOgogICAgICAgICBjYXNlIElu
bGluZUNhbGxGcmFtZTo6Q29uc3RydWN0OgpAQCAtMzA5LDEwICszMTMsNiBAQCB2b2lkIHJlaWZ5
SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBl
eGl0KQogICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9
IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcigqdHJ1ZUNhbGxlcik7CiAgICAgICAgICAgICBqaXQu
c3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9y
Q2FsbGVyLT5tZXRhZGF0YVRhYmxlKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUs
IGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSKSk7
CiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJh
c2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBjYWxs
ZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVn
aXN0ZXJzOjpwYkdQUikpOwotICAgICAgICB9IGVsc2UgaWYgKHRydWVDYWxsZXIpIHsKLSAgICAg
ICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxp
bmVDb2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOwotICAgICAgICAgICAgaml0LnN0b3JlUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0
YWRhdGFUYWJsZSgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNv
ZGVCbG9jaywgSklUOjpzX21ldGFkYXRhR1BSKSk7Ci0gICAgICAgICAgICBqaXQuc3RvcmVQdHIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5i
YXNlbGluZUpJVENvbnN0YW50UG9vbCgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1l
LCBiYXNlbGluZUNvZGVCbG9jaywgSklUOjpzX2NvbnN0YW50c0dQUikpOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQpAQCAtNDA0LDggKzQw
NCw3IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4Lm9mZnNldCgpKSwgTExJbnQ6OlJlZ2lzdGVy
czo6cGNHUFIpOwogICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24ucmV0YWdnZWQ8T1NS
RXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5t
ZXRhZGF0YVRhYmxlKCkpLCBKSVQ6OnNfbWV0YWRhdGFHUFIpOwotICAgICAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhpdC0+YmFzZWxpbmVKSVRD
b25zdGFudFBvb2woKSksIEpJVDo6c19jb25zdGFudHNHUFIpOworICAgICAgICBjb2RlQmxvY2tG
b3JFeGl0LT5tX2hhc0xpbmtlZE9TUkV4aXQgPSB0cnVlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5k
ZXggZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVzdGluYXRpb247CkBAIC00
MjEsMTYgKzQyMCwxMiBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICAgICAganVtcFRhcmdl
dCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKICAgICB9CiAKKyAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bTMyKEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9ja0ZvckV4aXQpICogc2l6ZW9m
KFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBc3NlbWJseUhlbHBlcnM6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIo
KSkgewotICAgICAgICBBU1NFUlQoIVJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMo
KS5jb250YWlucyhMTEludDo6UmVnaXN0ZXJzOjpwY0dQUikpOwotICAgICAgICBqaXQuY29weUNh
bGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSwg
QXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKExMSW50OjpSZWdpc3RlcnM6OnBjR1BS
KSk7Ci0KICAgICAgICAgLy8gU2luY2Ugd2UncmUganVtcGluZyB0byBvcF9jYXRjaCwgd2UgbmVl
ZCB0byBzZXQgY2FsbEZyYW1lRm9yQ2F0Y2guCiAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlciwgdm0uYWRkcmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSk7CiAg
ICAgfQotCi0gICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKSVQ6
OnN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2tGb3JFeGl0KSAqIHNpemVvZihSZWdpc3Rl
cikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7Ci0KKyAgICAKICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEdQUkluZm86OnJlZ1QyKTsKICAgICBqaXQuZmFySnVt
cChHUFJJbmZvOjpyZWdUMiwgT1NSRXhpdFB0clRhZyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAppbmRleCAxOGRlMzlkZTIzMjY5MDg0NDk2ZDI1ZTM5
NTMyMGI2MDZjYjU3N2M0Li45NTkzNGYyOTNjYjdlN2JjNGQxNjJiZDMxZTM2ZDkxZjUxYjI0ZTFk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKQEAgLTMw
LDcgKzMwLDYgQEAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1
ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNp
bmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCkBAIC0yODcwLDcg
KzI4NjksNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRmluZFN3aXRjaElt
bVRhcmdldEZvckRvdWJsZSwgY2hhciosIChWTSogdm1QbwogICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmRmZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5z
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIEFTU0VSVCh2YWx1ZS5pc0RvdWJsZSgpKTsKICAg
ICBkb3VibGUgYXNEb3VibGUgPSB2YWx1ZS5hc0RvdWJsZSgpOwpAQCAtMjg5MSw3ICsyODkwLDcg
QEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaFN0cmluZywgY2hhcios
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKIAogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgbnVsbHB0cik7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOwotICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBj
b2RlQmxvY2stPmRmZ1N0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25z
dCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgcmV0dXJuIGxpbmtlZFRhYmxlLmN0aUZvclZhbHVl
KCp1bmxpbmtlZFRhYmxlLCBzdHJJbXBsKS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApp
bmRleCBiYjQ2ZDcyNTk5NWJhYTg1ODdhNjE5YmY3YjEyNTE0MzczNzQyNmJkLi4yNDZjMTZjNDg4
ZTk5NTVhOGZlYzY4OTUyZDcyNzk2NjdiNTliMjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtMzk4NSw3ICszOTg1LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dFByaXZhdGVOYW1lKE5vZGUqIG5vZGUpCiAgICAg
UmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKIAogICAg
IEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJ
VFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dFByaXZh
dGVOYW1lLCB1c2VkUmVnaXN0ZXJzLAorICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlw
ZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIHVz
ZWRSZWdpc3RlcnMsCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHByb3BlcnR5R1BSKSwgdmFsdWVSZWdzLCBJbnZhbGlk
R1BSUmVnLCBzdHViSW5mb0dQUik7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1i
b2wgPSB0cnVlOwogCkBAIC00OTA1LDcgKzQ5MDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlVmFsdWVBZGQoTm9kZSogbm9kZSkKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJs
b2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJ
bmRleChieXRlY29kZUluZGV4KTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5qaXRDb2Rl
KCktPmNvbW1vbi5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIEpJVEFkZElDKiBhZGRJ
QyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1
dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZTsKICAgICBh
dXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlQWRkOwogICAgIApAQCAt
NDk4OSw3ICs0OTg5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlU3ViKE5v
ZGUqIG5vZGUpCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBo
KCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJ
bmRleCgpOwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVD
b2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9qaXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklU
U3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2ppdC5jb2RlQmxv
Y2soKS0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5j
dGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5n
RnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZVN1YjsKIApAQCAtNTU3MSw3ICs1NTcxLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTmVnYXRlKE5vZGUqIG5vZGUpCiAgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxv
Y2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIFVuYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+dW5hcnlBcml0
aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwotICAgIEpJVE5lZ0lDKiBu
ZWdJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9uLmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7
CisgICAgSklUTmVnSUMqIG5lZ0lDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVE5lZ0lDKGFy
aXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0
aE5lZ2F0ZU9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0
aW9uQXJpdGhOZWdhdGU7CiAgICAgY29tcGlsZU1hdGhJQyhub2RlLCBuZWdJQywgcmVwYXRjaGlu
Z0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwpAQCAtNTgxNSw3ICs1ODE1LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTXVsKE5vZGUqIG5vZGUpCiAgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxv
Y2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFy
aXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7Ci0gICAgSklUTXVsSUMq
IG11bElDID0gbV9qaXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUTXVsSUMoYXJpdGhQcm9maWxl
KTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUTXVsSUMo
YXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZh
bHVlTXVsT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRp
b25WYWx1ZU11bDsKIApAQCAtMTQ3NzAsNyArMTQ3NzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTG9nU2hhZG93Q2hpY2tlblRhaWwoTm9kZSogbm9kZSkKICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIHNjb3Bl
UmVnID0gc2NvcGUuZ3ByKCk7CiAKLSAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpKSwgY2FsbFNpdGVJbmRleCk7CisgICAgbV9qaXQu
bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2Nv
cGVSZWcsIG1faml0LmNvZGVCbG9jaygpLCBjYWxsU2l0ZUluZGV4KTsKICAgICBub1Jlc3VsdChu
b2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKaW5kZXggYjJlNjIzMGQ1ZDU2MTQ3OTE1ZGJiZDVkMTY0MjJmMzdh
MGYzOTllOS4uNTFmZTJmNGJiZTBmNTM1ZTkyZmIyZjFjZDA4NDQ1M2Y0YTc2NmYwOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCkBAIC03MzAsNyArNzMwLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9k
ZSogbm9kZSkKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6
OmluUGFpcihjYWxsZWVUYWdHUFIsIGNhbGxlZVBheWxvYWRHUFIpOwogICAgICAgICAgICAgc2h1
ZmZsZURhdGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVm
ZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKLSAgICAgICAgICAgIHNodWZm
bGVEYXRhLm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
OwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsg
KytpKSB7CiAgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJB
cmdDaGlsZChub2RlLCBpICsgMSk7CkBAIC04OTAsNyArODg5LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
c2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+
ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIFsmXSB7CisgICAg
ICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQ
YXlsb2FkR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsm
XSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAg
ICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAg
ICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRh
aWxDYWxsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAppbmRleCA3NTU3NTI0OGFmZWE2ODA0NTRkNmM4MjE3ZDIyM2QwOGU0YzEwZjA5
Li5kYjZjNmIyNzk4NWY3NmViMjNmNDE1NjIxMjFjNjlmMWFkNGEzMDM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTgyOCw3
ICs4MjgsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAg
ICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVl
R1BSLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUo
bnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdz
ID0gbnVtUGFzc2VkQXJnczsKLSAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMg
PSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CiAg
ICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChu
b2RlLCBpICsgMSk7CkBAIC05ODAsNyArOTc5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dENhbGwoTm9kZSogbm9kZSkKICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dD
YXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgWyZdIHsKKyAgICAgICAg
c2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2Fs
bGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7
CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAg
ICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJl
Rm9yVGFpbENhbGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q29tcGlsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCmlu
ZGV4IDhlM2JjNTNkNTcyM2Y4YmEwMWI1NjY1NmM1ODRmZmNlZGNiNjY0ZjUuLjhkOWYzNzBlMDhl
YzdmNDVmYjFmMjczNjk2ZmJjOWZmN2IxZjkwMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDb21waWxlLmNwcApAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYg
c3RhdGUsIFNhZmVwb2ludDo6UmVzdWx0JiBzYWZlcG9pbnRSZXN1bHQpCiAKICAgICBpZiAodm0u
c2hvdWxkQnVpbGRlclBDVG9Db2RlT3JpZ2luTWFwcGluZygpKSB7CiAgICAgICAgIEIzOjpQQ1Rv
T3JpZ2luTWFwIG9yaWdpbk1hcCA9IHN0YXRlLnByb2MtPnJlbGVhc2VQQ1RvT3JpZ2luTWFwKCk7
Ci0gICAgICAgIHN0YXRlLmppdENvZGUtPmNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwID0gbWFr
ZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtLCBX
VEZNb3ZlKG9yaWdpbk1hcCkpLCAqc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyKTsK
KyAgICAgICAgY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChtYWtlVW5pcXVlPFBDVG9D
b2RlT3JpZ2luTWFwPihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3JpZ2lu
TWFwKSksICpzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpKTsKICAgICB9CiAKICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBsYWJlbCA9IHN0YXRlLmZpbmFsaXpl
ci0+YjNDb2RlTGlua0J1ZmZlci0+bG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihzdGF0ZS5wcm9j
LT5jb2RlKCkuZW50cnlwb2ludExhYmVsKDApKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
SVRDb2RlLmgKaW5kZXggOWY1MDIzZGExZGI0MjQ1NWZhMDU0N2QxMTUxNWNjOTdjNzA3YzlkNy4u
MThiOGFjMzNkZmNkMDQ1MzBiNzM4Zjc3Y2I3ZmRjNjk5ZDE4NTcxOCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgKQEAgLTY4LDggKzY4LDYgQEAgcHVibGljOgogICAgIERG
Rzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uKCkgb3ZlcnJpZGU7CiAgICAgc3RhdGljIHB0cmRpZmZf
dCBjb21tb25EYXRhT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVENvZGUsIGNv
bW1vbik7IH0KICAgICB2b2lkIHNocmlua1RvRml0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYp
IG92ZXJyaWRlOwotCi0gICAgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkg
b3ZlcnJpZGUgeyByZXR1cm4gY29tbW9uLm1fcGNUb0NvZGVPcmlnaW5NYXAuZ2V0KCk7IH0KICAg
ICAKICAgICBERkc6OkNvbW1vbkRhdGEgY29tbW9uOwogICAgIFZlY3RvcjxPU1JFeGl0PiBtX29z
ckV4aXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAppbmRleCBhNmFmZmUzNTlh
OTE5OWE1ODA1ZTM5YThhNDA5YTJhNWI1MzVkMGQ5Li4wNjRhNDAxZjkwZjEyNzU3M2ViZjFhY2Uw
YmVkZWM2MjczMWJhNmJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExpbmsuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKQEAg
LTUyLDYgKzUyLDE0IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAKICAgICBncmFwaC5yZWdp
c3RlckZyb3plblZhbHVlcygpOwogCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICB7CisgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBB
U1NFUlQoY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzLmlzRW1wdHkoKSk7CisgICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmVuc3VyZUpJVERh
dGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKKyAgICB9CisjZW5kaWYK
KwogICAgIC8vIENyZWF0ZSB0aGUgZW50cnlwb2ludC4gTm90ZSB0aGF0IHdlIHVzZSB0aGlzIGVu
dHJ5cG9pbnQgdG90YWxseSBkaWZmZXJlbnRseQogICAgIC8vIGRlcGVuZGluZyBvbiB3aGV0aGVy
IHdlJ3JlIGRvaW5nIE9TUiBlbnRyeSBvciBub3QuCiAgICAgQ0NhbGxIZWxwZXJzIGppdChjb2Rl
QmxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CmluZGV4IGFmNDM2NzJmNWRiOWE5NDVjMzdjMmVhNDgwMmMzNGIzM2I5YWJmMWQuLjY3N2FjYTQ0
YmQ3ZTk1ZDg3YzEzOWM1OGMwODc5ZGJiMmE5NTMxZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTg4LDcgKzg4LDYgQEAKICNpbmNsdWRl
ICJKU1NldEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJP
cGVyYW5kc0lubGluZXMuaCIKLSNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1
ZGUgIlByb2JlQ29udGV4dC5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUg
IlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgpAQCAtMjMyMSwxOCArMjMyMCw2IEBAIHByaXZh
dGU6CiAgICAgICAgIGNvbXBpbGVCaW5hcnlNYXRoSUM8SklUU3ViR2VuZXJhdG9yPihhcml0aFBy
b2ZpbGUsIHJlcGF0Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsKICAgICB9
CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVEFkZEdlbmVyYXRvcj46
OnZhbHVlPjo6dHlwZT4KLSAgICBzdGF0aWMgSklUQWRkSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1v
bkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21t
b24uYWRkSklUQWRkSUMocHJvZmlsZSk7IH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5l
cmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdl
bmVyYXRvciwgSklUTXVsR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIHN0YXRpYyBKSVRN
dWxJQyogYWRkTWF0aElDKERGRzo6Q29tbW9uRGF0YSYgY29tbW9uLCBCaW5hcnlBcml0aFByb2Zp
bGUqIHByb2ZpbGUpIHsgcmV0dXJuIGNvbW1vbi5hZGRKSVRNdWxJQyhwcm9maWxlKTsgfQotCi0g
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVROZWdHZW5lcmF0b3I+Ojp2YWx1
ZT46OnR5cGU+Ci0gICAgc3RhdGljIEpJVE5lZ0lDKiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRh
JiBjb21tb24sIFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRk
SklUTmVnSUMocHJvZmlsZSk7IH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3Is
IHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRv
ciwgSklUU3ViR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIHN0YXRpYyBKSVRTdWJJQyog
YWRkTWF0aElDKERGRzo6Q29tbW9uRGF0YSYgY29tbW9uLCBCaW5hcnlBcml0aFByb2ZpbGUqIHBy
b2ZpbGUpIHsgcmV0dXJuIGNvbW1vbi5hZGRKSVRTdWJJQyhwcm9maWxlKTsgfQotCiAgICAgdm9p
ZCBjb21waWxlVmFsdWVNdWwoKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKQEAg
LTI0MDQsNyArMjM5MSw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgICAgICAgICAgICAgIEJv
eDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IEJveDxNYXRo
SUNHZW5lcmF0aW9uU3RhdGU+OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBKSVRVbmFyeU1h
dGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMgPSBhZGRNYXRoSUM8R2VuZXJhdG9yPihzdGF0ZS0+aml0
Q29kZS0+Y29tbW9uLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgICAgIEpJVFVuYXJ5TWF0
aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGppdC5jb2RlQmxvY2soKS0+YWRkTWF0aElDPEdlbmVy
YXRvcj4oYXJpdGhQcm9maWxlKTsKICAgICAgICAgICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9y
ID0gR2VuZXJhdG9yKEpTVmFsdWVSZWdzKHBhcmFtc1swXS5ncHIoKSksIEpTVmFsdWVSZWdzKHBh
cmFtc1sxXS5ncHIoKSksIHBhcmFtcy5ncFNjcmF0Y2goMCkpOwogCiAgICAgICAgICAgICAgICAg
Ym9vbCBzaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CkBAIC0yNTEzLDcgKzI1MDAsNyBAQCBw
cml2YXRlOgogI2VuZGlmCiAKICAgICAgICAgICAgICAgICBCb3g8TWF0aElDR2VuZXJhdGlvblN0
YXRlPiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPjo6
Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1h
dGhJQyA9IGFkZE1hdGhJQzxHZW5lcmF0b3I+KHN0YXRlLT5qaXRDb2RlLT5jb21tb24sIGFyaXRo
UHJvZmlsZSk7CisgICAgICAgICAgICAgICAgSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1h
dGhJQyA9IGppdC5jb2RlQmxvY2soKS0+YWRkTWF0aElDPEdlbmVyYXRvcj4oYXJpdGhQcm9maWxl
KTsKICAgICAgICAgICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKGxlZnRP
cGVyYW5kLCByaWdodE9wZXJhbmQsIEpTVmFsdWVSZWdzKHBhcmFtc1swXS5ncHIoKSksCiAgICAg
ICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHBhcmFtc1sxXS5ncHIoKSksIEpTVmFsdWVSZWdz
KHBhcmFtc1syXS5ncHIoKSksIHBhcmFtcy5mcFNjcmF0Y2goMCksCiAgICAgICAgICAgICAgICAg
ICAgIHBhcmFtcy5mcFNjcmF0Y2goMSksIHBhcmFtcy5ncFNjcmF0Y2goMCkpOwpAQCAtNDMzMCw3
ICs0MzE3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEdQUlJlZyBzdHViSW5mb0dQUiA9IEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpGVExKSVQpID8gcGFyYW1zLmdwU2NyYXRjaCgwKSA6
IEludmFsaWRHUFJSZWc7CiAKICAgICAgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gQm94PEpJVFB1
dEJ5VmFsR2VuZXJhdG9yPjo6Y3JlYXRlKAotICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2so
KSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50aWNPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIEFj
Y2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLAorICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2so
KSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50aWNPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIEFj
Y2Vzc1R5cGU6OlB1dEJ5VmFsLAogICAgICAgICAgICAgICAgIHBhcmFtcy51bmF2YWlsYWJsZVJl
Z2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIp
LCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKIAog
ICAgICAgICAgICAgZ2VuZXJhdG9yLT5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1
ZTsKQEAgLTEwMjk4LDcgKzEwMjg1LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbnVtUGFzc2VkQXJnczsgaSA8IG51bUFsbG9jYXRlZEFyZ3M7ICsr
aSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MuYXBwZW5kKFZhbHVl
UmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpKTsKICAgICAgICAgICAgICAgICAgICAg
c2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7Ci0gICAgICAgICAgICAg
ICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBqaXQuY29kZUJsb2NrKCktPm51bVBh
cmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVT
YXZlUmVnaXN0ZXJzKGppdC5jb2RlQmxvY2soKSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxv
Y2soKS0+YWRkQ2FsbExpbmtJbmZvKHNlbWFudGljTm9kZU9yaWdpbik7CkBAIC0xMDQ1NywxNCAr
MTA0NDMsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJn
cy5hcHBlbmQocGFyYW1zWzEgKyBpXS5yZWNvdmVyeUZvckpTVmFsdWUoKSk7CiAKICAgICAgICAg
ICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtQXJnczsKLSAgICAgICAgICAg
ICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gaml0LmNvZGVCbG9jaygpLT5udW1QYXJh
bWV0ZXJzKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEu
c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5jb2RlQmxvY2soKSk7CiAKICAgICAgICAgICAg
ICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2Fs
bExpbmtJbmZvKGNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0
VXBDYWxsKENhbGxMaW5rSW5mbzo6VGFpbENhbGwsIEdQUkluZm86OnJlZ1QwKTsKIAotICAgICAg
ICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0byBzbG93
UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpy
ZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0gewog
ICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1
ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNo
dWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgICAgICB9KTsKQEAg
LTEwODA3LDcgKzEwNzkyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVt
cCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQs
IEdQUkluZm86OnJlZ1QwLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNh
bGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52
YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0gewogICAgICAgICAg
ICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICAg
ICAgICAgIH0pOwpAQCAtMTEwODgsNyArMTEwNzMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsK
LSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CisgICAgICAgICAgICAgICAgICAg
IHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUklu
Zm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsm
XSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsK
ICAgICAgICAgICAgICAgICAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9TUkV4aXRDb21waWxlci5jcHAKaW5kZXggZGVkOTViOGU2MTZhNTIwODllZjgxNDc4NDQ2
MmE1ZTlkODM2MTc0NS4uYmU4OWJlM2M0YjIxYzAwMmVkZjRhMTQ0MjhlZjBjYTAyZTM0M2ZmMiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNw
cApAQCAtNDEzLDE2ICs0MTMsMjggQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoVk0mIHZtLCB1
bnNpZ25lZCBleGl0SUQsIEpJVENvZGUqIGppdENvZGUsIE9TUkV4aXQmIGV4aXQKIAogICAgIFJl
Z2lzdGVyU2V0IGFsbEZUTENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmZ0bENhbGxlZVNhdmVS
ZWdpc3RlcnMoKTsKICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYmFzZWxpbmVDYWxs
ZWVTYXZlcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAg
UmVnaXN0ZXJBdE9mZnNldExpc3QqIHZtQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6dm1DYWxs
ZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7CisgICAgUmVnaXN0ZXJTZXQgdm1DYWxsZWVTYXZlc1Rv
U2tpcCA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOworICAgIGlmIChleGl0LmlzRXhj
ZXB0aW9uSGFuZGxlcigpKSB7CisgICAgICAgIGppdC5sb2FkUHRyKCZ2bS50b3BFbnRyeUZyYW1l
LCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwg
R1BSSW5mbzo6cmVnVDEpOworICAgIH0KIAogICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3Qo
KTsgcmVnIDw9IFJlZzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7CiAgICAgICAgIGlmICgh
YWxsRlRMQ2FsbGVlU2F2ZXMuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgIGlmIChleGl0LmlzRXhj
ZXB0aW9uSGFuZGxlcigpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCF2bUNhbGxl
ZVNhdmVzLT5maW5kKHJlZykpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAg
ICAgICAgdW5zaWduZWQgdW53aW5kSW5kZXggPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3Rl
cnMoKS0+aW5kZXhPZihyZWcpOwogICAgICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0KiBiYXNl
bGluZVJlZ2lzdGVyT2Zmc2V0ID0gYmFzZWxpbmVDYWxsZWVTYXZlcy0+ZmluZChyZWcpOworICAg
ICAgICBSZWdpc3RlckF0T2Zmc2V0KiB2bUNhbGxlZVNhdmUgPSBudWxscHRyOyAKKyAgICAgICAg
aWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCisgICAgICAgICAgICB2bUNhbGxlZVNhdmUg
PSB2bUNhbGxlZVNhdmVzLT5maW5kKHJlZyk7CiAKICAgICAgICAgaWYgKHJlZy5pc0dQUigpKSB7
CiAgICAgICAgICAgICBHUFJSZWcgcmVnVG9Mb2FkID0gYmFzZWxpbmVSZWdpc3Rlck9mZnNldCA/
IEdQUkluZm86OnJlZ1QwIDogcmVnLmdwcigpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cmVnVG9Mb2FkICE9IEdQUkluZm86OnJlZ1QxKTsKIAogICAgICAgICAgICAgaWYgKHVud2luZElu
ZGV4ID09IFVJTlRfTUFYKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIEZUTCBjb21waWxhdGlv
biBkaWRuJ3QgcHJlc2VydmUgdGhpcyByZWdpc3Rlci4gVGhpcyBtZWFucyB0aGF0IGl0IGFsc28K
QEAgLTQ0MCw2ICs0NTIsOCBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YihWTSYgdm0sIHVuc2ln
bmVkIGV4aXRJRCwgSklUQ29kZSogaml0Q29kZSwgT1NSRXhpdCYgZXhpdAogCiAgICAgICAgICAg
ICBpZiAoYmFzZWxpbmVSZWdpc3Rlck9mZnNldCkKICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2
NChyZWdUb0xvYWQsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmcmFt
ZVBvaW50ZXJSZWdpc3RlciwgYmFzZWxpbmVSZWdpc3Rlck9mZnNldC0+b2Zmc2V0KCkpKTsKKyAg
ICAgICAgICAgIGlmICh2bUNhbGxlZVNhdmUgJiYgIXZtQ2FsbGVlU2F2ZXNUb1NraXAuZ2V0KHZt
Q2FsbGVlU2F2ZS0+cmVnKCkpKQorICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHJlZ1RvTG9h
ZCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDEsIHZtQ2FsbGVlU2F2ZS0+
b2Zmc2V0KCkpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEZQUlJlZyBmcFJlZ1Rv
TG9hZCA9IGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQgPyBGUFJJbmZvOjpmcFJlZ1QwIDogcmVnLmZw
cigpOwogCkBAIC00NTAsOSArNDY0LDE5IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2
bSwgdW5zaWduZWQgZXhpdElELCBKSVRDb2RlKiBqaXRDb2RlLCBPU1JFeGl0JiBleGl0CiAKICAg
ICAgICAgICAgIGlmIChiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0KQogICAgICAgICAgICAgICAgIGpp
dC5zdG9yZURvdWJsZShmcFJlZ1RvTG9hZCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9B
c3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0LT5v
ZmZzZXQoKSkpOworICAgICAgICAgICAgaWYgKHZtQ2FsbGVlU2F2ZSAmJiAhdm1DYWxsZWVTYXZl
c1RvU2tpcC5nZXQodm1DYWxsZWVTYXZlLT5yZWcoKSkpCisgICAgICAgICAgICAgICAgaml0LnN0
b3JlRG91YmxlKGZwUmVnVG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpy
ZWdUMSwgdm1DYWxsZWVTYXZlLT5vZmZzZXQoKSkpOwogICAgICAgICB9CiAgICAgfQogCisgICAg
aWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKKyAgICAgICAgUmVnaXN0ZXJBdE9mZnNl
dCogdm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZlcy0+ZmluZChHUFJJbmZvOjpudW1iZXJUYWdS
ZWdpc3Rlcik7CisgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVy
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgdm1DYWxsZWVTYXZlLT5v
ZmZzZXQoKSkpOworCisgICAgICAgIHZtQ2FsbGVlU2F2ZSA9IHZtQ2FsbGVlU2F2ZXMtPmZpbmQo
R1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3Rlcik7CisgICAgICAgIGppdC5zdG9yZTY0KEdQUklu
Zm86Om5vdENlbGxNYXNrUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7CisgICAgfQorCiAgICAgc2l6ZV90IGJh
c2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzID0gYmFzZWxpbmVDb2RlQmxvY2st
PmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwogCiAgICAgaWYgKGV4aXQubV9j
b2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCmluZGV4IGQyNDkwNzZiMzA4
YWU0NjNmOGRjYjhmMjIzOTNiMDY5ZTVkM2Q3MDIuLmMwNzc1ZDhlMWIxMDUwMmRmMDFhNzRhZjBj
NmRlYjRhODc1Y2M2MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0
b3IvTWV0YWRhdGEucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRh
ZGF0YS5yYgpAQCAtNDIsMjggKzQyLDE3IEBAIGNsYXNzIE1ldGFkYXRhCiAgICAgZGVmIHN0cnVj
dChvcCkKICAgICAgICAgcmV0dXJuIGlmIGVtcHR5PwogCi0gICAgICAgIGRlZiBnZW5lcmF0ZU9m
ZnNldE9mRnVuY3Rpb25zKHByZWZpeCwgZmllbGROYW1lcykKLSAgICAgICAgICAgIGZpZWxkTmFt
ZXMubWFwIGRvIHxmaWVsZE5hbWV8Ci0gICAgICAgICAgICAgICAgIiN7cHJlZml4fXN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2Yje2ZpZWxkTmFtZVswXS51cGNhc2V9I3tmaWVsZE5hbWVbMS4uLTFd
fSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV8je2ZpZWxkTmFtZX0pOyB9
IgotICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKLSAgICAgICAgZW5kCi0KLSAgICAgICAgZGVm
IGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMsIGZpZWxkTmFtZXMpCisgICAgICAgIGRlZiBj
b252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzKQogICAgICAgICAgICAgZmllbGRzLm1hcCBkbyB8
ZmllbGQsIHR5cGV8CiAgICAgICAgICAgICAgICAgaWYgdHlwZS5raW5kX29mPyBIYXNoCi0gICAg
ICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4
ICsgJyAgICAnLCB0eXBlLCBmaWVsZE5hbWVzKX1cbiN7cHJlZml4fX07IgorICAgICAgICAgICAg
ICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAg
JywgdHlwZSl9XG4je3ByZWZpeH19OyIKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkLnRvX3MKLSAgICAgICAgICAgICAgICAgICAgZmll
bGROYW1lcy5wdXNoKGZpZWxkTmFtZSkKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7
dHlwZS50b19zfSBtXyN7ZmllbGROYW1lfTsiCisgICAgICAgICAgICAgICAgICAgICIje3ByZWZp
eH0je3R5cGUudG9fc30gbV8je2ZpZWxkLnRvX3N9OyIKICAgICAgICAgICAgICAgICBlbmQKICAg
ICAgICAgICAgIGVuZC5qb2luKCJcbiIpCiAgICAgICAgIGVuZAogCi0gICAgICAgIGZpZWxkTmFt
ZXMgPSBbXQotICAgICAgICBwcmVmaXggPSAiICAgICAgICAiCi0gICAgICAgIGZpZWxkcyA9IGNv
bnZlcnRGaWVsZHMocHJlZml4LCBAZmllbGRzLCBmaWVsZE5hbWVzKQotICAgICAgICBmaWVsZHMg
PSBmaWVsZHMgKyAiXG4iICsgZ2VuZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxk
TmFtZXMpCisgICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAgICAgICAgIiwgQGZpZWxk
cykKIAogICAgICAgICBpbml0cyA9IG5pbAogICAgICAgICBpZiBAaW5pdGlhbGl6ZXJzICYmIChu
b3QgQGluaXRpYWxpemVycy5lbXB0eT8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5jcHAKaW5kZXggMjdjYWRiOGIxMGE4NTQ0ZGViMGU2MTkxZDMzMzljODQw
OWVkZjJlZC4uYzhmOWFhMDQwMTIyNTIwMzUyMzIxNGQxZDNmZDkzZTcyOGIzZmI2MiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcApAQCAtMzY3LDI4
ICszNjcsNiBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6bG9hZFByb3BlcnR5KEdQUlJlZyBvYmpl
Y3QsIEdQUlJlZyBvZmZzZXQsIEpTVmFsdWVSZWdzIHJlcwogICAgICAgICByZXN1bHQpOwogfQog
Ci12b2lkIEFzc2VtYmx5SGVscGVyczo6c3RvcmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB2YWx1ZSwg
R1BSUmVnIG9iamVjdCwgR1BSUmVnIG9mZnNldCwgR1BSUmVnIHNjcmF0Y2gpCi17Ci0gICAgSnVt
cCBpc0lubGluZSA9IGJyYW5jaDMyKExlc3NUaGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJz
dE91dE9mTGluZU9mZnNldCkpOwotICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhvYmplY3QsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgIG5lZzMyKG9mZnNldCk7
Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAgIEp1bXAgcmVhZHkg
PSBqdW1wKCk7Ci0gICAgCi0gICAgaXNJbmxpbmUubGluayh0aGlzKTsKLSAgICBhZGRQdHIoCi0g
ICAgICAgIFRydXN0ZWRJbW0zMigKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KHNp
emVvZihKU09iamVjdCkpIC0KLSAgICAgICAgICAgIChzdGF0aWNfY2FzdDxpbnQzMl90PihmaXJz
dE91dE9mTGluZU9mZnNldCkgLSAyKSAqIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpKSwKLSAgICAgICAgb2JqZWN0LCBzY3JhdGNoKTsKLSAgICAKLSAgICByZWFk
eS5saW5rKHRoaXMpOwotICAgIAotICAgIHN0b3JlVmFsdWUodmFsdWUsCi0gICAgICAgIEJhc2VJ
bmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAt
IDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotfQotCiB2b2lkIEFzc2VtYmx5SGVscGVy
czo6ZW1pdExvYWRTdHJ1Y3R1cmUoVk0mIHZtLCBSZWdpc3RlcklEIHNvdXJjZSwgUmVnaXN0ZXJJ
RCBkZXN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTcx
OSwxNCArNjk3LDkgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zy
b21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmEKIH0KIAogdm9pZCBBc3NlbWJs
eUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxMaW5rSW5mbyogaW5mbykKLXsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xv
YmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOwotICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRN
b3ZpbmdHbG9iYWxPYmplY3Qodm0sIGluZm8pOwotfQotCi12b2lkIEFzc2VtYmx5SGVscGVyczo6
ZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYgdm0sIENhbGxMaW5r
SW5mbyogaW5mbykKIHsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJl
Z1QyKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVn
VDMpOwogICAgIENhbGwgY2FsbCA9IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2
bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0clRhZz4oY2Fs
bCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCA5
ZWZiYTYxNzE3NTRmOTAxZmFlNTgxMjZkODU1ZDYyMDI1MDc1NjA3Li5mYWQ3MTQ2MjdiZGY1YjBi
MzcyYjUwY2ZlNGM2ZTY4NzYyYTYzODljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgKQEAgLTIzNCw5ICsyMzQsOCBAQCBwdWJsaWM6CiAjZW5kaWYKICAg
ICB9CiAgICAgCi0gICAgLy8gTm90ZSB0aGF0IHRoZXNlIGNsb2JiZXIgb2Zmc2V0LgorICAgIC8v
IE5vdGUgdGhhdCB0aGlzIGNsb2JiZXJzIG9mZnNldC4KICAgICB2b2lkIGxvYWRQcm9wZXJ0eShH
UFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBKU1ZhbHVlUmVncyByZXN1bHQpOwotICAgIHZv
aWQgc3RvcmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIG9iamVjdCwgR1BSUmVn
IG9mZnNldCwgR1BSUmVnIHNjcmF0Y2gpOwogCiAgICAgdm9pZCBtb3ZlVmFsdWVSZWdzKEpTVmFs
dWVSZWdzIHNyY1JlZ3MsIEpTVmFsdWVSZWdzIGRlc3RSZWdzKQogICAgIHsKQEAgLTM4MCwyNiAr
Mzc5LDE1IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAotICAgIHZvaWQgY29weUNhbGxlZVNh
dmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomIHRvcEVudHJ5RnJh
bWUsIEdQUlJlZyBzY3JhdGNoKQotICAgIHsKLSNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JF
R0lTVEVSUyA+IDAKLSAgICAgICAgbG9hZFB0cigmdG9wRW50cnlGcmFtZSwgc2NyYXRjaCk7Ci0g
ICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChz
Y3JhdGNoKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKLSAg
ICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOwotI2VuZGlmCi0gICAgfQotCiAgICAgdm9pZCBj
b3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiYg
dG9wRW50cnlGcmFtZSkKICAgICB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RF
UlMgPiAwCiAgICAgICAgIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyA9IHsg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH07CiAgICAgICAgIEdQUlJl
ZyB0ZW1wMSA9IHVzZWRSZWdpc3RlcnMuZ2V0RnJlZUdQUigwKTsKLSAgICAgICAgY29weUNhbGxl
ZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodG9wRW50cnlGcmFtZSwgdGVtcDEp
OworICAgICAgICBsb2FkUHRyKCZ0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7CisgICAgICAgIGNvcHlD
YWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbCh0ZW1wMSk7CiAjZWxz
ZQogICAgICAgICBVTlVTRURfUEFSQU0odG9wRW50cnlGcmFtZSk7Ci0gICAgICAgIFVOVVNFRF9Q
QVJBTSh0b3BFbnRyeUZyYW1lKTsKICNlbmRpZgogICAgIH0KICAgICAKQEAgLTE3MzIsNyArMTcy
MCw2IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0VmlydHVhbENhbGwoVk0m
LCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopOwotICAgIHZvaWQgZW1pdFZpcnR1YWxD
YWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYsIENhbGxMaW5rSW5mbyopOwogICAgIAog
ICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgdm9pZCByZWNsYWltU3Bh
Y2VPblN0YWNrRm9yQ0NhbGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQmFzZWxpbmVKSVRDb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxp
bmVKSVRDb2RlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUxZGZlNGYzMjRj
NmI3MjAxMmRmMDVmY2MxZDJiNWVmMjNhZDA4Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklU
Q29kZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJCYXNlbGluZUpJVENvZGUuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJK
SVRNYXRoSUMuaCIKLSNpbmNsdWRlICJKdW1wVGFibGUuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVT
dHViSW5mby5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotSklUQWRkSUMqIE1hdGhJQ0hvbGRlcjo6
YWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1f
YWRkSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9Ci1KSVRNdWxJQyogTWF0aElDSG9sZGVyOjphZGRK
SVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9tdWxJ
Q3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KLUpJVFN1YklDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVFN1
YklDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX3N1YklDcy5h
ZGQoYXJpdGhQcm9maWxlKTsgfQotSklUTmVnSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUTmVnSUMo
VW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9uZWdJQ3MuYWRkKGFy
aXRoUHJvZmlsZSk7IH0KLQotdm9pZCBNYXRoSUNIb2xkZXI6OmFkb3B0TWF0aElDcyhNYXRoSUNI
b2xkZXImIG90aGVyKQotewotICAgIG1fYWRkSUNzID0gV1RGTW92ZShvdGhlci5tX2FkZElDcyk7
Ci0gICAgbV9tdWxJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbXVsSUNzKTsKLSAgICBtX25lZ0lDcyA9
IFdURk1vdmUob3RoZXIubV9uZWdJQ3MpOwotICAgIG1fc3ViSUNzID0gV1RGTW92ZShvdGhlci5t
X3N1YklDcyk7Ci19Ci0KLUJhc2VsaW5lSklUQ29kZTo6QmFzZWxpbmVKSVRDb2RlKENvZGVSZWY8
SlNFbnRyeVB0clRhZz4gY29kZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVj
aykKLSAgICA6IERpcmVjdEpJVENvZGUoV1RGTW92ZShjb2RlKSwgd2l0aEFyaXR5Q2hlY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklUKQotICAgICwgTWF0aElDSG9sZGVyKCkKLXsgfQotCi1CYXNlbGlu
ZUpJVENvZGU6On5CYXNlbGluZUpJVENvZGUoKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MK
LQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNl
bGluZUpJVENvZGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM1MDQxNDY0MDQ3
YWZmNGI0N2Y0YTc3ODkwYzYxNjM4MTVhOGIzMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklU
Q29kZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJD
YWxsTGlua0luZm8uaCIKLSNpbmNsdWRlICJKSVRDb2RlLmgiCi0jaW5jbHVkZSAiSklUQ29kZU1h
cC5oIgotCi0jaWYgRU5BQkxFKEpJVCkKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEJpbmFy
eUFyaXRoUHJvZmlsZTsKLWNsYXNzIFVuYXJ5QXJpdGhQcm9maWxlOwotc3RydWN0IFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm87Ci1zdHJ1Y3QgU2ltcGxlSnVtcFRhYmxlOwotc3RydWN0IFN0cmlu
Z0p1bXBUYWJsZTsKLQotY2xhc3MgTWF0aElDSG9sZGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIGFk
b3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVyKTsKLSAgICBKSVRBZGRJQyogYWRkSklUQWRk
SUMoQmluYXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFy
eUFyaXRoUHJvZmlsZSopOwotICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFBy
b2ZpbGUqKTsKLSAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqKTsK
LQotcHJpdmF0ZToKLSAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOwotICAgIEJhZzxKSVRNdWxJ
Qz4gbV9tdWxJQ3M7Ci0gICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKLSAgICBCYWc8SklUU3Vi
SUM+IG1fc3ViSUNzOwotfTsKLQotY2xhc3MgSklUQ29uc3RhbnRQb29sIHsKLXB1YmxpYzoKLSAg
ICB1c2luZyBDb25zdGFudCA9IHVuc2lnbmVkOwotCi0gICAgZW51bSBjbGFzcyBUeXBlIDogdWlu
dDhfdCB7Ci0gICAgICAgIEdsb2JhbE9iamVjdCwKLSAgICAgICAgQ2FsbExpbmtJbmZvLAotICAg
ICAgICBTdHJ1Y3R1cmVTdHViSW5mbywKLSAgICAgICAgRnVuY3Rpb25EZWNsLAotICAgICAgICBG
dW5jdGlvbkV4cHIsCi0gICAgfTsKLQotICAgIHN0cnVjdCBWYWx1ZSB7Ci0gICAgICAgIFR5cGUg
dHlwZTsKLSAgICAgICAgUGFja2VkUHRyPHZvaWQ+IHBheWxvYWQ7Ci0gICAgfTsKLQotICAgIEpJ
VENvbnN0YW50UG9vbCgpID0gZGVmYXVsdDsKLSAgICBKSVRDb25zdGFudFBvb2woSklUQ29uc3Rh
bnRQb29sJiYpID0gZGVmYXVsdDsKLSAgICBKSVRDb25zdGFudFBvb2wmIG9wZXJhdG9yPShKSVRD
b25zdGFudFBvb2wmJikgPSBkZWZhdWx0OwotCi0gICAgQ29uc3RhbnQgYWRkKFR5cGUgdHlwZSwg
dm9pZCogcGF5bG9hZCA9IG51bGxwdHIpCi0gICAgewotICAgICAgICB1bnNpZ25lZCByZXN1bHQg
PSBtX2NvbnN0YW50cy5zaXplKCk7Ci0gICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZChWYWx1ZSB7
IHR5cGUsIHBheWxvYWQgfSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAg
c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50cy5zaXplKCk7IH0KLSAgICBW
YWx1ZSBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNbaV07IH0KLQotcHJp
dmF0ZToKLSAgICBWZWN0b3I8VmFsdWU+IG1fY29uc3RhbnRzOwotfTsKLQotCi1jbGFzcyBCYXNl
bGluZUpJVENvZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29kZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7
Ci1wdWJsaWM6Ci0gICAgQmFzZWxpbmVKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4sIENv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2spOwotICAgIH5CYXNlbGluZUpJVENv
ZGUoKSBvdmVycmlkZTsKLSAgICBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAo
KSBvdmVycmlkZSB7IHJldHVybiBtX3BjVG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9Ci0KLSAgICBC
YWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKLSAgICBCYWc8Q2FsbExp
bmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOwotICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOwotICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBU
YWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwotICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJs
ZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwotICAgIEpJVENvZGVNYXAgbV9qaXRDb2RlTWFw
OwotICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0YW50UG9vbDsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7Ci0gICAgYm9vbCBtX2lz
U2hhcmVhYmxlIHsgdHJ1ZSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAv
LyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNl
bGluZUpJVFBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBs
YW4uY3BwCmluZGV4IGFmZWUwNWYwYjhmOGY3NzM4NmRkNTVlMzRlZTVkYjZmM2Y1OGFlZWYuLmVh
ZjJjYjVjY2IxYWE5YWM1ZTQ0YTYwMjNkNTQ2ZmRhMzRmZDM5YjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgc2l6
ZV90IEJhc2VsaW5lSklUUGxhbjo6Y29kZVNpemUoKSBjb25zdAogCiBDb21waWxhdGlvblJlc3Vs
dCBCYXNlbGluZUpJVFBsYW46OmZpbmFsaXplKCkKIHsKLSAgICBDb21waWxhdGlvblJlc3VsdCBy
ZXN1bHQgPSBtX2ppdC5maW5hbGl6ZU9uTWFpblRocmVhZChtX2NvZGVCbG9jayk7CisgICAgQ29t
cGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJlYWQoKTsKICAg
ICBzd2l0Y2ggKHJlc3VsdCkgewogICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CiAgICAgICAg
IENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNv
bXBpbGF0aW9uIGZhaWxlZCIpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ0NhbGxIZWxwZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxw
ZXJzLmNwcAppbmRleCAwNGU4YWZkZTQxYzI2OGFkOWNmMmViMWM1ZDNjZjA0MDk4Mjg5MzVlLi5i
NmMzZmZiM2E5Y2M4N2QxZWU4NzcxNjM4MzZlYzA4ZWNiMDQwZGYzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCkBAIC00Myw2ICs0MywxNiBAQCB2b2lkIEND
YWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KEdQUlJlZyBzaGFkb3dQ
YWNrZXQsIEdQUlJlZyBzYwogICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tl
dCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7CiB9CiAK
K3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hh
ZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIHN0b3JlUHRy
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNU
X09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7CisgICAgc3RvcmVQdHIo
VHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJl
c3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBj
YWxsZWUpKSk7CisgICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQs
IE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKKyAg
ICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihT
aGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1Q
dHIoY29kZUJsb2NrKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFk
b3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0z
MihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZG
U0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOworfQorCiB2b2lk
IENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYgdm0sIEdQUlJlZyBz
aGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKQog
ewogICAgIFNoYWRvd0NoaWNrZW4qIHNoYWRvd0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCk7
CkBAIC02MiwyOCArNzIsNiBAQCB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tl
blBhY2tldChWTSYgdm0sIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZwogICAgIHN0b3JlUHRy
KHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSk7CiB9CiAKLQotdGVtcGxhdGUg
PHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci12b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNS
ZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4
IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6
UGFja2V0LCBmcmFtZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNr
ZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9P
RkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKLSAgICBzdG9yZVZhbHVl
KHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0No
aWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOwotICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNz
KHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2Nv
cGUpKSk7Ci0gICAgc3RvcmVQdHIoY29kZUJsb2NrLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JK
RUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOwotICAgIHN0
b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQ
YWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5k
ZXgpKSk7Ci19Ci0KLXZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3Bl
LCBUcnVzdGVkSW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQot
ewotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFkb3dQYWNrZXQsIHRoaXNS
ZWdzLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKLX0KLQotdm9pZCBDQ2FsbEhl
bHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpT
VmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIEdQUlJlZyBjb2RlQmxvY2ssIENhbGxT
aXRlSW5kZXggY2FsbFNpdGVJbmRleCkKLXsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dEltcGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJ
bmRleCk7Ci19Ci0KIHZvaWQgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBTY29wZWRMYW1iZGE8dm9pZChD
Q2FsbEhlbHBlcnMmKT4gZW1pdENvZGUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKQogewogICAg
IENDYWxsSGVscGVycyBqaXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NDYWxsSGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMu
aAppbmRleCA0YmQ2ZTZjODg2ZjUzZGFkYTY3Njc5NjAxYjYwMDdhOWYxOTFjZTA2Li5kODExODQ3
YmFmMGJlZjNhN2UxMzk3NDEzN2VmM2JlODQxNmQzMjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ0NhbGxIZWxwZXJzLmgKQEAgLTg0MCwxNCArODQwLDcgQEAgcHVibGljOgogICAgIC8v
IFRoZXNlIG9wZXJhdGlvbnMgY2xvYmJlciBhbGwgdm9sYXRpbGUgcmVnaXN0ZXJzLiBUaGV5IGFz
c3VtZSB0aGF0IHRoZXJlIGlzIHJvb20gb24gdGhlIHRvcCBvZgogICAgIC8vIHN0YWNrIHRvIG1h
cnNoYWxsIGNhbGwgYXJndW1lbnRzLgogICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3Vl
UGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjb3Bl
KTsKLQotcHJpdmF0ZToKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLSAg
ICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0
LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVC
bG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKLXB1YmxpYzoKLSAgICB2b2lkIGxv
Z1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdz
IHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0
ZUluZGV4IGNhbGxTaXRlSW5kZXgpOwotICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNr
ZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29w
ZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKLQorICAg
IHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNW
YWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRl
eCk7CiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIgdG8gdGhlIFBhY2tldCB3ZSBzaG91
bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAgIHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tl
blBhY2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQ
UiwgR1BSUmVnIHNjcmF0Y2gyKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAppbmRleCAzMmQ2ZTRjMGIzNmJmZDYxZDE1MDUyZjg1
YTEyY2FlY2UzYmJiNTUyLi5jNDllMmJmODAxNTkzZjdkYjM3NzhmYjM2MzI1YjA2MTI5ZDIzODMz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVE
YXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVE
YXRhLmNwcApAQCAtMzYsMTMgKzM2LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKIAogdm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0
ZXJzKENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVy
cyhjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci19Ci0KLXZvaWQgQ2FsbEZyYW1l
U2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zm
c2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25zKQogewogICAgIFJlZ2lzdGVyU2V0IGNhbGxl
ZVNhdmVSZWdpc3RlcnMgeyBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkgfTsK
KyAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25zID0g
Y29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgUmVn
aXN0ZXJBdE9mZnNldCBlbnRyeSB7IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+YXQoaSkgfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAppbmRl
eCBjNmI3MGYwNWQxMDliMTg1ZjRkMTJiYzcwOWY4Zjc2N2NiYmYxZjM3Li5hNmRlMmE0Yzc2OGJl
MTE4OTBkNjcyOTRkNGQ3MzFlYmM3NzJjZjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCkBAIC00MywxMyArNDMsMTEgQEAgcHVibGlj
OgogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBhcmdzOwogICAgIHVuc2lnbmVkIG51bUxvY2Fs
cyB7IFVJTlRfTUFYIH07CiAgICAgdW5zaWduZWQgbnVtUGFzc2VkQXJncyB7IFVJTlRfTUFYIH07
Ci0gICAgdW5zaWduZWQgbnVtUGFyYW1ldGVycyB7IFVJTlRfTUFYIH07IC8vIE9uIG91ciBtYWNo
aW5lIGZyYW1lLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJNYXA8VmFsdWVSZWNv
dmVyeT4gcmVnaXN0ZXJzOwogICAgIEdQUlJlZyBudW1iZXJUYWdSZWdpc3RlciB7IEludmFsaWRH
UFJSZWcgfTsKIAogICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKENvZGVCbG9jayop
OwotICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZz
ZXRMaXN0Kik7CiAjZW5kaWYKICAgICBWYWx1ZVJlY292ZXJ5IGNhbGxlZTsKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCmluZGV4IDNiNTM3
NGRhMTY2ZmY3MTk5ZjVmYWU0NTVhYTY2NjNlYmRlZTUzZDUuLmNlNWFlNDMwODdhYmIzMjM5MmMw
NDI3MjU0NmJmZTE1NjU3YjIyNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q2FsbEZyYW1lU2h1ZmZsZXIuY3BwCkBAIC0zOCwxMyArMzgsMTMgQEAgQ2FsbEZyYW1lU2h1ZmZs
ZXI6OkNhbGxGcmFtZVNodWZmbGVyKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBDYWxsRnJhbWVT
aHVmZmxlRGEKICAgICA6IG1faml0KGppdCkKICAgICAsIG1fb2xkRnJhbWUoZGF0YS5udW1Mb2Nh
bHMgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMsIG51bGxwdHIpCiAgICAgLCBt
X25ld0ZyYW1lKGRhdGEuYXJncy5zaXplKCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lz
dGVycywgbnVsbHB0cikKLSAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShDYWxsRnJhbWU6Omhl
YWRlclNpemVJblJlZ2lzdGVycyArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRh
Lm51bVBhcmFtZXRlcnMpKQorICAgICwgbV9hbGlnbmVkT2xkRnJhbWVTaXplKENhbGxGcmFtZTo6
aGVhZGVyU2l6ZUluUmVnaXN0ZXJzCisgICAgICAgICsgcm91bmRBcmd1bWVudENvdW50VG9BbGln
bkZyYW1lKGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSkKICAgICAsIG1fYWxpZ25l
ZE5ld0ZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwogICAgICAgICAr
IHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLmFyZ3Muc2l6ZSgpKSkKICAgICAs
IG1fZnJhbWVEZWx0YShtX2FsaWduZWROZXdGcmFtZVNpemUgLSBtX2FsaWduZWRPbGRGcmFtZVNp
emUpCiAgICAgLCBtX2xvY2tlZFJlZ2lzdGVycyhSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCkp
CiAgICAgLCBtX251bVBhc3NlZEFyZ3MoZGF0YS5udW1QYXNzZWRBcmdzKQotICAgICwgbV9udW1Q
YXJhbWV0ZXJzKGRhdGEubnVtUGFyYW1ldGVycykKIHsKICAgICAvLyBXZSBhcmUgYWxsb3dlZCBh
bGwgdGhlIHVzdWFsIHJlZ2lzdGVycy4uLgogICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07ICkKQEAgLTQyMSw3ICs0MjEsNyBAQCB2b2lkIENhbGxG
cmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yVGFpbENhbGwoKQogICAgIG1faml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBhcmd1bWVudENvdW50T0sgPQogICAgICAgICBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBtX25ld0ZyYW1lQmFzZSwKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobV9udW1QYXJhbWV0ZXJzKSk7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5u
dW1QYXJhbWV0ZXJzKCkpKTsKICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkgLSAxICsgQ2FsbEZyYW1lOjpoZWFkZXJT
aXplSW5SZWdpc3RlcnMpLCBtX25ld0ZyYW1lQmFzZSk7CiAgICAgbV9qaXQuYW5kMzIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSksIG1fbmV3
RnJhbWVCYXNlKTsKICAgICBtX2ppdC5tdWwzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KHNpemVvZihSZWdpc3RlcikpLCBtX25ld0ZyYW1lQmFzZSwgbV9uZXdGcmFtZUJhc2UpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCmluZGV4IGUwNDhh
NGRjYTY2NjU2OTkxYTA0M2FlOTRiODAwYmIxMTQxNjBiMGMuLmY5ZjdhMWJjMjNhNzljNTVmMmZi
MjBiZGJkYjFlNDczYjg2N2UwMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nh
bGxGcmFtZVNodWZmbGVyLmgKQEAgLTEwNCw3ICsxMDQsNiBAQCBwdWJsaWM6CiAgICAgICAgIENh
bGxGcmFtZVNodWZmbGVEYXRhIGRhdGE7CiAgICAgICAgIGRhdGEubnVtTG9jYWxzID0gbnVtTG9j
YWxzKCk7CiAgICAgICAgIGRhdGEubnVtUGFzc2VkQXJncyA9IG1fbnVtUGFzc2VkQXJnczsKLSAg
ICAgICAgZGF0YS5udW1QYXJhbWV0ZXJzID0gbV9udW1QYXJhbWV0ZXJzOwogICAgICAgICBkYXRh
LmNhbGxlZSA9IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBDYWxsRnJhbWVTbG90OjpjYWxsZWUg
fSktPnJlY292ZXJ5KCk7CiAgICAgICAgIGRhdGEuYXJncy5yZXNpemUoYXJnQ291bnQoKSk7CiAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291bnQoKTsgKytpKQpAQCAtNzk5LDcg
Kzc5OCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwZXJmb3JtU2FmZVdyaXRlcygpOwogICAgIAog
ICAgIHVuc2lnbmVkIG1fbnVtUGFzc2VkQXJncyB7IFVJTlRfTUFYIH07Ci0gICAgdW5zaWduZWQg
bV9udW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IDQ1MWE5OTQ5ODBmY2I4ZGM5NjJkMDAwOWQ4
NzdiYzgxMDMyM2NhNDAuLjg5OTY1MzU0MGI4ODgzMzIxYjE4NjlmNjI0ZmE1OTMzNDhhNDBlYjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBjdGlQ
YXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBG
dW5jdGlvblB0cjxDRnUKIH0KIAogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgIDogSlNJbnRl
cmZhY2VKSVQoJnZtLCBudWxscHRyKQorICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxv
Y2spCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJlbHMo
Y29kZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQogICAgICwg
bV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0pCkBAIC03Nyw5ICs3Nyw2IEBAIEpJVDo6SklU
KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleCkKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAs
IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQog
ewotICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOwotICAgIG1fcHJvZmlsZWRDb2RlQmxvY2sg
PSBjb2RlQmxvY2s7Ci0gICAgbV91bmxpbmtlZENvZGVCbG9jayA9IGNvZGVCbG9jay0+dW5saW5r
ZWRDb2RlQmxvY2soKTsKIH0KIAogSklUOjp+SklUKCkKQEAgLTkzLDggKzkwLDggQEAgdm9pZCBK
SVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
SnVtcExpc3Qgc2tpcE9wdGltaXplOwotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hB
ZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVt
ZW50Rm9yRW50cnkoKSksIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVj
dXRlQ291bnRlcigpKSkpOworICAgIAorICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRk
MzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVu
dEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4
ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
OwogCiAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAtMTE2
LDIwICsxMTMsMTUgQEAgdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0KiBz
ZXQpCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHNl
dC0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0
KQordm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KQogewotICAg
IGF1dG8gb2sgPSBicmFuY2hUZXN0UHRyKFplcm8sIHBvaW50ZXJUb1NldCk7CiAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVzcyhwb2ludGVyVG9TZXQsIFdhdGNocG9pbnRT
ZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwotICAg
IG9rLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpCit2b2lkIEpJVDo6ZW1pdFZh
clJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCiB7Ci0gICAgaWYgKHJlc29s
dmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSB7Ci0gICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7Ci0g
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9i
YWxPYmplY3QsIG1fdmFyUmVhZE9ubHlXYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOwotICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9p
bnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwot
ICAgIH0KKyAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09
IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkt
PnZhclJlYWRPbmx5V2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMy
KElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQoKQpAQCAtMTM3LDE4ICsxMjksMTIgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9m
ZnNldCgpCiAgICAgaWYgKCFBU1NFUlRfRU5BQkxFRCkKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRD
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7
CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CiAgICAg
SnVtcCBvayA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
ICAgICBicmVha3BvaW50KCk7CiAgICAgb2subGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OnJl
c2V0U1AoKQotewotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKLX0KLQogI2RlZmluZSBORVhUX09QQ09ERShuYW1lKSBcCiAgICAgbV9ieXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5z
dHJ1Y3Rpb24tPnNpemUoKSk7IFwKICAgICBicmVhazsKQEAgLTE5NSw0NCArMTgxLDYxIEBAIHZv
aWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0KQot
ewotICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0g
RnVuY3Rpb25Db2RlKTsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJh
bWVTbG90OjpjYWxsZWUsIHJlc3VsdCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgSlNG
dW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmVzdWx0KTsKLSAgICBh
dXRvIGhhc0V4ZWN1dGFibGUgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdCwgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKLSAgICBsb2FkUHRy
KEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAt
IEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgcmVzdWx0KTsKLSAgICBoYXNFeGVjdXRhYmxlLmxp
bmsodGhpcyk7Ci0gICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSkK
LSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZz
ZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpKSwgcmVzdWx0KTsKLSAgICBlbHNlCi0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2Rl
QmxvY2tGb3JDYWxsKCkpLCByZXN1bHQpOwotCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwg
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6b2Zmc2V0T2ZDb2RlQmxvY2soKSksIHJlc3VsdCk7
Ci0gICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlc3VsdCwgQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKTsKLQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2Jl
OjpDb250ZXh0JiBjdHgpIHsKLSAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8
Q2FsbEZyYW1lKj4oKS0+Y29kZUJsb2NrKCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVC
bG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKLSAgICB9KTsKLSNlbmRp
ZgotfQotCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CiAgICAgaWYgKEpJ
VEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fcHJv
ZmlsZWRDb2RlQmxvY2ssICJcbiIpOworICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1f
Y29kZUJsb2NrLCAiXG4iKTsKICAgICAKICAgICBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAg
IGppdEFzc2VydEFyZ3VtZW50Q291bnRTYW5lKCk7CiAgICAgCi0gICAgYXV0byYgaW5zdHJ1Y3Rp
b25zID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7Ci0gICAgdW5zaWduZWQg
aW5zdHJ1Y3Rpb25Db3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNp
emUoKTsKKyAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCk7CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5zaXplKCk7CiAKICAgICBtX2NhbGxMaW5rSW5mb0luZGV4ID0gMDsKIAorICAgIFZN
JiB2bSA9IG1fY29kZUJsb2NrLT52bSgpOwogICAgIEJ5dGVjb2RlSW5kZXggc3RhcnRCeXRlY29k
ZUluZGV4KDApOworICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggJiYgKG1fY29k
ZUJsb2NrLT5pbmhlcml0czxQcm9ncmFtQ29kZUJsb2NrPih2bSkgfHwgbV9jb2RlQmxvY2stPmlu
aGVyaXRzPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtKSkpIHsKKyAgICAgICAgLy8gV2UgY2Fu
IG9ubHkgZG8gdGhpcyBvcHRpbWl6YXRpb24gYmVjYXVzZSB3ZSBleGVjdXRlIFByb2dyYW1Db2Rl
QmxvY2sncyBleGFjdGx5IG9uY2UuCisgICAgICAgIC8vIFRoaXMgb3B0aW1pemF0aW9uIHdvdWxk
IGJlIGludmFsaWQgb3RoZXJ3aXNlLiBXaGVuIHRoZSBMTEludCBkZXRlcm1pbmVzIGl0IHdhbnRz
IHRvCisgICAgICAgIC8vIGRvIE9TUiBlbnRyeSBpbnRvIHRoZSBiYXNlbGluZSBKSVQgaW4gYSBs
b29wLCBpdCB3aWxsIHBhc3MgaW4gdGhlIGJ5dGVjb2RlIG9mZnNldCBpdAorICAgICAgICAvLyB3
YXMgZXhlY3V0aW5nIGF0IHdoZW4gaXQga2lja2VkIG9mZiBvdXIgY29tcGlsYXRpb24uIFdlIG9u
bHkgbmVlZCB0byBjb21waWxlIGNvZGUgZm9yCisgICAgICAgIC8vIGFueXRoaW5nIHJlYWNoYWJs
ZSBmcm9tIHRoYXQgYnl0ZWNvZGUgb2Zmc2V0LgorCisgICAgICAgIC8vIFdlIG9ubHkgYm90aGVy
IGJ1aWxkaW5nIHRoZSBieXRlY29kZSBncmFwaCBpZiBpdCBjb3VsZCBzYXZlIHRpbWUgYW5kIGV4
ZWN1dGFibGUKKyAgICAgICAgLy8gbWVtb3J5LiBXZSBwaWNrIGFuIGFyYml0cmFyeSBvZmZzZXQg
d2hlcmUgd2UgZGVlbSB0aGlzIGlzIHByb2ZpdGFibGUuCisgICAgICAgIGlmIChtX2xvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0gMjAwKSB7CisgICAgICAgICAgICAvLyBBcyBh
IHNpbXBsaWZpY2F0aW9uLCB3ZSBkb24ndCBmaW5kIGFsbCBieXRlY29kZSByYW5nZXMgdGhhdCBh
cmUgdW5yZWFjaGFibGUuCisgICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSBqdXN0IGZpbmQgdGhl
IG1pbmltdW0gYnl0ZWNvZGUgb2Zmc2V0IHRoYXQgaXMgcmVhY2hhYmxlLCBhbmQKKyAgICAgICAg
ICAgIC8vIGNvbXBpbGUgY29kZSBmcm9tIHRoYXQgYnl0ZWNvZGUgb2Zmc2V0IG9ud2FyZHMuCisK
KyAgICAgICAgICAgIEJ5dGVjb2RlR3JhcGggZ3JhcGgobV9jb2RlQmxvY2ssIG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKSk7CisgICAgICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2Nr
ID0gZ3JhcGguZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChtX2xvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2sp
OworCisgICAgICAgICAgICBHcmFwaE5vZGVXb3JrbGlzdDxCeXRlY29kZUJhc2ljQmxvY2sqPiB3
b3JrbGlzdDsKKyAgICAgICAgICAgIHN0YXJ0Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgo
KTsKKyAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goYmxvY2spOworCisgICAgICAgICAgICB3aGls
ZSAoQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAg
ICAgICAgICAgc3RhcnRCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChzdGQ6Om1pbihzdGFy
dEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGJsb2NrLT5sZWFkZXJPZmZzZXQoKSkpOworICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29ySW5kZXggOiBibG9jay0+c3VjY2Vzc29y
cygpKQorICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKCZncmFwaFtzdWNjZXNzb3JJ
bmRleF0pOworCisgICAgICAgICAgICAgICAgLy8gQWxzbyBhZGQgY2F0Y2ggYmxvY2tzIGZvciBi
eXRlY29kZXMgdGhhdCB0aHJvdy4KKyAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51
bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2stPmxlYWRlck9mZnNldCgpOyBieXRlY29kZU9m
ZnNldCA8IGJsb2NrLT5sZWFkZXJPZmZzZXQoKSArIGJsb2NrLT50b3RhbExlbmd0aCgpOykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5h
dChieXRlY29kZU9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogaGFu
ZGxlciA9IG1fY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4
KGJ5dGVjb2RlT2Zmc2V0KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3Qu
cHVzaChncmFwaC5maW5kQmFzaWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQoaGFuZGxlci0+dGFyZ2V0
KSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ICs9IGluc3RydWN0
aW9uLT5zaXplKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZp
bmdTbG93Q2FzZSA9IDA7CiAgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4
KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKQEAg
LTI3NSwxNSArMjc4LDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAog
ICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRp
b24oKSkpIHsKKyAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7
CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgewotICAg
ICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCkt
PmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29k
ZU9mZnNldCwgIl0gIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVy
KGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
fQogCi0gICAgICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYXRjaCkKLSAgICAgICAgICAgIGFzc2Vy
dFN0YWNrUG9pbnRlck9mZnNldCgpOwotCiAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKICAg
ICAgICAgREVGSU5FX1NMT1dfT1AobGVzcykKICAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzc2Vx
KQpAQCAtNTI3LDcgKzUyNyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygp
CiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OwogCi0g
ICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX3VubGlua2Vk
Q29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOworICAg
ICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIAogICAg
ICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nTG4oIkJh
c2VsaW5lIEpJVCBlbWl0dGluZyBzbG93IGNvZGUgZm9yICIsIG1fYnl0ZWNvZGVJbmRleCwgIiBh
dCBvZmZzZXQgIiwgKGxvbmcpZGVidWdPZmZzZXQoKSk7CkBAIC01NDUsOCArNTQ1LDggQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigpKSkgewogICAgICAgICAgICAgdW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwogICAgICAgICAgICAgcHJv
YmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKLSAgICAgICAgICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAg
ICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJdIFNMT1cg
Iiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwg
IiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpAQCAtNjc0LDU1
ICs2NzQsNTUgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICNlbmRpZgog
fQogCi12b2lkIEpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdp
c3RlcnMoKQotewotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNl
dE9mTWV0YWRhdGFUYWJsZSgpKSwgc19tZXRhZGF0YUdQUik7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50
UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpCi17Ci0gICAgQmFzZTo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0
ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotfQot
CiB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlv
bkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX3By
b2ZpbGVkQ29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKKyAgICBERkc6OkNhcGFiaWxpdHlM
ZXZlbCBsZXZlbCA9IG1fY29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKICAgICBzd2l0Y2gg
KGxldmVsKSB7CiAgICAgY2FzZSBERkc6OkNhbm5vdENvbXBpbGU6CiAgICAgICAgIG1fY2FuQmVP
cHRpbWl6ZWQgPSBmYWxzZTsKKyAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IGZh
bHNlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGU6CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGVB
bmRJbmxpbmU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSB0cnVlOworICAgICAgICBtX2Nh
bkJlT3B0aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmls
aW5nID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotCi0gICAgaWYg
KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkg
fHwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBU
YWJsZXMoKSkgewotICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxp
bmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fc3dpdGNoSnVtcFRhYmxlcyA9
IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVy
T2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSk7Ci0gICAgICAgIGlmIChtX3VubGlua2VkQ29k
ZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAg
ICAgICAgbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRh
YmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVt
cFRhYmxlcygpKTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpKSB7
CisgICAgY2FzZSBHbG9iYWxDb2RlOgorICAgIGNhc2UgTW9kdWxlQ29kZToKKyAgICBjYXNlIEV2
YWxDb2RlOgorICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBm
YWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGdW5jdGlvbkNvZGU6CisgICAgICAgIC8v
IFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRlY3Rl
ZCBhbiB1bmlubGluZWFibGUgY2FsbC4KKyAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhhdCBv
YnNlcnZhdGlvbi4KKyAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVk
ICY9IGNhbklubGluZShsZXZlbCkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKG1fY29kZUJs
b2NrKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6
OmR1bXBEaXNhc3NlbWJseSgpIHx8IChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgT3B0
aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpKSkgewotICAgICAgICAvLyBG
SVhNRTogYnVpbGQgYSBkaXNhc3NlbWJsZXIgb2ZmIG9mIFVubGlua2VkQ29kZUJsb2NrLgotICAg
ICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPihtX3Byb2Zp
bGVkQ29kZUJsb2NrKTsKKyAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0
Y2hKdW1wVGFibGVzKCkgfHwgbV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0
Y2hKdW1wVGFibGVzKCkpIHsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2Nv
ZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJ
VERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1w
VGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsK
KyAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVt
cFRhYmxlcygpKQorICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2Vy
KS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+
KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsK
ICAgICB9CisKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwg
KG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2Vs
aW5lRm9yUHJvZmlsZXIoKSkpKQorICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8
SklURGlzYXNzZW1ibGVyPihtX2NvZGVCbG9jayk7CiAgICAgaWYgKFVOTElLRUxZKG1fdm0tPm1f
cGVyQnl0ZWNvZGVQcm9maWxlcikpIHsKLSAgICAgICAgLy8gRklYTUU6IGJ1aWxkIHByb2ZpbGVy
IGRpc2Fzc2VtYmxlciBvZmYgVW5saW5rZWRDb2RlQmxvY2suCiAgICAgICAgIG1fY29tcGlsYXRp
b24gPSBhZG9wdFJlZigKICAgICAgICAgICAgIG5ldyBQcm9maWxlcjo6Q29tcGlsYXRpb24oCi0g
ICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29k
ZXNGb3IobV9wcm9maWxlZENvZGVCbG9jayksCisgICAgICAgICAgICAgICAgbV92bS0+bV9wZXJC
eXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9jb2RlQmxvY2spLAogICAgICAg
ICAgICAgICAgIFByb2ZpbGVyOjpCYXNlbGluZSkpOwotICAgICAgICBtX2NvbXBpbGF0aW9uLT5h
ZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX3Byb2Zp
bGVkQ29kZUJsb2NrKTsKKyAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29k
ZXMoKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9jb2RlQmxvY2spOwogICAgIH0KICAg
ICAKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENv
ZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSkpOwpAQCAtNzQyLDEyICs3NDIsMTEgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQg
ZWZmb3J0KQogICAgICAgICBub3AoKTsKIAogICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0g
ICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQot
ICAgICAgICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoKTsKKyAgICBlbWl0UHV0
VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7
CiAKICAgICBMYWJlbCBiZWdpbkxhYmVsKHRoaXMpOwogCi0gICAgaW50IGZyYW1lVG9wT2Zmc2V0
ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKTsKKyAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3Io
bV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB1bnNpZ25lZCBtYXhGcmFtZVNp
emUgPSAtZnJhbWVUb3BPZmZzZXQ7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihmcmFtZVRvcE9m
ZnNldCksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CiAgICAgSnVtcExpc3Qgc3RhY2tPdmVy
ZmxvdzsKQEAgLTc1OCwyMCArNzU3LDE2IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhv
dXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICBtb3ZlKHJlZ1Qx
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
KTsKIAotICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0Ojps
bGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICBlbWl0U2F2ZUNhbGxlZVNh
dmVzKCk7CiAgICAgZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKLSAgICBlbWl0
TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpOwogCi0gICAgaWYg
KG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CisgICAg
aWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgewogICAgICAgICBB
U1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5n
KCkgJiYgKCFtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgfHwgbV91bmxpbmtl
ZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID4gMSkpIHsKLSAgICAgICAgICAgIGVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDIpOwot
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBDb2RlQmxvY2s6Om9mZnNldE9mQXJn
dW1lbnRWYWx1ZVByb2ZpbGVzKCkgKyBGaXhlZFZlY3RvcjxWYWx1ZVByb2ZpbGU+OjpvZmZzZXRP
ZlN0b3JhZ2UoKSksIHJlZ1QyKTsKLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVu
dCA9IDA7IGFyZ3VtZW50IDwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyAr
K2FyZ3VtZW50KSB7CisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0
aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQgaW4gYSBkdW1teSBwcm9m
aWxpbmcgc2l0ZSAodG8KICAgICAgICAgICAgICAgICAvLyBrZWVwIHRoaW5ncyBjb25zaXN0ZW50
KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQgdGhlIGR1bW15IHZhbHVlLgot
ICAgICAgICAgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkg
JiYgIWFyZ3VtZW50KQorICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdHJ1
Y3RvcigpICYmICFhcmd1bWVudCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRp
bmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKQEAgLTc4MiwxMiArNzc3LDEyIEBAIHZvaWQgSklUOjpjb21waWxl
QW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAg
ICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5w
YXlsb2FkR1BSKCkpOwogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJl
Z2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSks
IHJlc3VsdFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgc3RvcmVWYWx1
ZShyZXN1bHRSZWdzLCBBZGRyZXNzKHJlZ1QyLCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVByb2Zp
bGUpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKKyAgICAgICAgICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1fY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JB
cmd1bWVudChhcmd1bWVudCksIHJlc3VsdFJlZ3MpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQogICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6
aXNKSVQobV9jb2RlQmxvY2stPmppdFR5cGUoKSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemVN
YXJrZXIpKQogICAgICAgICBtX3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZNb3Zl
KCpzaXplTWFya2VyKSwgKnRoaXMpOwpAQCAtODA0LDI3ICs3OTksMjQgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0
KQogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1z
dGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhDYWxs
RnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9y
LCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0
aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCBtX2NvZGVCbG9jayk7CiAKICAg
ICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMgMSwgd2UgbmV2ZXIgcmVxdWlyZSBh
cml0eSBmaXh1cC4KLSAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fdW5saW5rZWRDb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSAhPSAxOwotICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2Nr
LT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXApIHsKKyAg
ICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMg
IT0gMTsKKyAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYm
IHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAgICAgICBtX2FyaXR5Q2hlY2sgPSBsYWJlbCgpOwot
CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksICZtX2NvZGVCbG9jay0+bV9zaG91bGRB
bHdheXNCZUlubGluZWQpOwogICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotICAgICAg
ICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUocmVnVDApOwotICAgICAgICBzdG9y
ZTgoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU2hv
dWxkQWx3YXlzQmVJbmxpbmVkKCkpKTsKKyAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwogCiAgICAgICAgIGxvYWQz
MihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwg
cmVnVDEpOwotICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1t
MzIobV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkubGlua1RvKGJlZ2luTGFi
ZWwsIHRoaXMpOworICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVk
SW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxpbmtUbyhiZWdpbkxhYmVsLCB0
aGlzKTsKIAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogCiAg
ICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVu
dEdQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNl
cHRpb24obV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29u
c3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBhcmd1bWVudEdQUjAp
OworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24o
bV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hl
Y2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZh
bHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CkBAIC04NDcsNyArODM5LDcgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZv
cnQgZWZmb3J0KQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkp
OwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlu
a0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhp
cywgbV91bmxpbmtlZENvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQs
IGVmZm9ydCkpOworICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVy
PihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6
OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKICAgICBsaW5rKCk7CiB9CiAKQEAgLTg2Niw4ICs4NTgs
OCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgIHN3aXRjaCAocmVjb3JkLnR5cGUpIHsKICAg
ICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZToKICAgICAgICAgY2FzZSBTd2l0Y2hS
ZWNvcmQ6OkNoYXJhY3RlcjogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1w
VGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CisgICAgICAgICAgICBj
b25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2Nr
LT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFNpbXBs
ZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwogICAgICAgICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gcGF0Y2hC
dWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQg
KyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
MDsgaiA8IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CiAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNl
dHNbal07CkBAIC04NzksOCArODcxLDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OlN0cmluZzogewotICAgICAgICAgICAgY29uc3Qg
VW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJs
b2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICAgICAg
ICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJs
ZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAg
ICAgICAgICAgYXV0byBjdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRj
aFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0p
OwogICAgICAgICAgICAgZm9yIChhdXRvJiBsb2NhdGlvbiA6IHVubGlua2VkVGFibGUubV9vZmZz
ZXRUYWJsZS52YWx1ZXMoKSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxv
Y2F0aW9uLm1fYnJhbmNoT2Zmc2V0OwpAQCAtOTE0LDI3ICs5MDYsNiBAQCB2b2lkIEpJVDo6bGlu
aygpCiAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHJlY29yZC5mcm9tLCByZWNvcmQuY2Fs
bGVlKTsKICAgICB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGF1dG8gZmluYWxpemVJQ3Mg
PSBbJl0gKGF1dG8mIGdlbmVyYXRvcnMpIHsKLSAgICAgICAgZm9yIChhdXRvJiBnZW4gOiBnZW5l
cmF0b3JzKSB7Ci0gICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zdGFydCA9IHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3N0YXJ0KTsK
LSAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9IHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZ2VuLm1fZG9uZSk7Ci0gICAgICAg
ICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb24gPSBwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zbG93UGF0aEJl
Z2luKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzKTsK
LSAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5VmFscyk7Ci0gICAgZmluYWxpemVJQ3MobV9nZXRCeUlk
c1dpdGhUaGlzKTsKLSAgICBmaW5hbGl6ZUlDcyhtX3B1dEJ5SWRzKTsKLSAgICBmaW5hbGl6ZUlD
cyhtX3B1dEJ5VmFscyk7Ci0gICAgZmluYWxpemVJQ3MobV9kZWxCeUlkcyk7Ci0gICAgZmluYWxp
emVJQ3MobV9kZWxCeVZhbHMpOwotICAgIGZpbmFsaXplSUNzKG1faW5CeUlkcyk7Ci0gICAgZmlu
YWxpemVJQ3MobV9pbkJ5VmFscyk7Ci0gICAgZmluYWxpemVJQ3MobV9pbnN0YW5jZU9mcyk7Ci0g
ICAgZmluYWxpemVJQ3MobV9wcml2YXRlQnJhbmRBY2Nlc3Nlcyk7Ci0jZWxzZQogICAgIGZpbmFs
aXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlu
bGluZUNhY2hlcyhtX2dldEJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5l
Q2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywgcGF0Y2hCdWZmZXIpOwpAQCAtOTQ2LDI1ICs5MTcs
MjEgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5CeVZh
bHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luc3RhbmNlT2Zz
LCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wcml2YXRlQnJhbmRB
Y2Nlc3NlcywgcGF0Y2hCdWZmZXIpOwotI2VuZGlmCiAKICAgICBmb3IgKGF1dG8mIGNvbXBpbGF0
aW9uSW5mbyA6IG1fY2FsbENvbXBpbGF0aW9uSW5mbykgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby51bmxp
bmtlZENhbGxMaW5rSW5mbzsKLSAgICAgICAgaW5mby5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRp
b24pOwotI2Vsc2UKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5m
by5jYWxsTGlua0luZm87CiAgICAgICAgIGluZm8uc2V0Q29kZUxvY2F0aW9ucygKICAgICAgICAg
ICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25J
bmZvLnNsb3dQYXRoU3RhcnQpLAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKSk7Ci0jZW5kaWYK
LQogICAgIH0KIAotICAgIEpJVENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOwotICAg
IGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFi
ZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNldCkgewotICAgICAgICBpZiAobV9sYWJlbHNbYnl0
ZWNvZGVPZmZzZXRdLmlzU2V0KCkpCi0gICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBl
bmQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8
SlNFbnRyeVB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7CisgICAgeworICAgICAg
ICBKSVRDb2RlTWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgp
OyArK2J5dGVjb2RlT2Zmc2V0KSB7CisgICAgICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVP
ZmZzZXRdLmlzU2V0KCkpCisgICAgICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxkZXIuYXBwZW5k
KEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpT
RW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOworICAgICAgICB9CisgICAg
ICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXpl
KCkpOwogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHko
KSkpIHsKQEAgLTk3Myw0MiArOTQwLDI2IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICB9CiAKICAg
ICBpZiAoVU5MSUtFTFkobV9jb21waWxhdGlvbikpIHsKLSAgICAgICAgLy8gRklYTUU6IHNob3Vs
ZCB3ZSBtYWtlIHRoZSBieXRlY29kZSBwcm9maWxlciBrbm93IGFib3V0IFVubGlua2VkQ29kZUJs
b2NrPwogICAgICAgICBpZiAoT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVy
KCkpCiAgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+cmVwb3J0VG9Qcm9maWxlcihtX2NvbXBp
bGF0aW9uLmdldCgpLCBwYXRjaEJ1ZmZlcik7Ci0gICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQ
cm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9wcm9maWxlZENvZGVCbG9jaywgKm1fY29tcGlsYXRp
b24pOworICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9u
KG1fY29kZUJsb2NrLCAqbV9jb21waWxhdGlvbik7CiAgICAgfQogCiAgICAgaWYgKG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQogICAgICAgICBtX3BjVG9Db2Rl
T3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92ZShtX3BjVG9D
b2RlT3JpZ2luTWFwQnVpbGRlciksIHBhdGNoQnVmZmVyKTsKICAgICAKLSAgICAvLyBGSVhNRTog
TWFrZSBhIHZlcnNpb24gb2YgQ29kZUJsb2NrV2l0aEpJVFR5cGUgdGhhdCBrbm93cyBhYm91dCBV
bmxpbmtlZENvZGVCbG9jay4KICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IEZJ
TkFMSVpFX0NPREUoCiAgICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAg
ICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRU
eXBlKG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsK
KyAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tX
aXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwog
ICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlD
aGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9hcml0eUNoZWNr
KTsKLSAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IEJhc2VsaW5lSklUQ29kZShyZXN1bHQs
IHdpdGhBcml0eUNoZWNrKSk7Ci0KLSAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscyA9IFdU
Rk1vdmUobV91bmxpbmtlZENhbGxzKTsKLSAgICBtX2ppdENvZGUtPm1fZXZhbENhbGxMaW5rSW5m
b3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5mb3MpOwotICAgIG1faml0Q29kZS0+bV91bmxp
bmtlZFN0dWJJbmZvcyA9IFdURk1vdmUobV91bmxpbmtlZFN0dWJJbmZvcyk7Ci0gICAgbV9qaXRD
b2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3dpdGNoSnVtcFRhYmxlcyk7Ci0g
ICAgbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3RyaW5n
U3dpdGNoSnVtcFRhYmxlcyk7Ci0gICAgbV9qaXRDb2RlLT5tX2ppdENvZGVNYXAgPSBqaXRDb2Rl
TWFwQnVpbGRlci5maW5hbGl6ZSgpOwotICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0
aElDcyk7Ci0gICAgbV9qaXRDb2RlLT5tX2NvbnN0YW50UG9vbCA9IFdURk1vdmUobV9jb25zdGFu
dFBvb2wpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgbV9qaXRDb2RlLT5tX2lzU2hhcmVhYmxl
ID0gbV9pc1NoYXJlYWJsZTsKLSNlbHNlCi0gICAgbV9qaXRDb2RlLT5tX2lzU2hhcmVhYmxlID0g
ZmFsc2U7Ci0jZW5kaWYKKyAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENv
ZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKTsKIAogICAg
IGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0
ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX3VubGlua2VkQ29kZUJsb2NrLCByZXN1
bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVj
dXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOworICAgICAgICBkYXRhTG9nRigi
SklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCBy
ZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5l
eGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwogfQogCi1Db21waWxhdGlv
blJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyZWFkKENvZGVCbG9jayogY29kZUJsb2NrKQor
Q29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocmVhZCgpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAKQEAgLTEwMTcsMTQgKzk2OCwy
NSBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyZWFkKENvZGVCbG9j
ayogY29kZUJsb2NrKQogCiAgICAgbV9saW5rQnVmZmVyLT5ydW5NYWluVGhyZWFkRmluYWxpemF0
aW9uVGFza3MoKTsKIAorICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2NvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPnNocmlua1RvRml0KGxv
Y2tlciwgQ29kZUJsb2NrOjpTaHJpbmtNb2RlOjpMYXRlU2hyaW5rKTsKKyAgICB9CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRs
ZXJzKCk7ICsraSkgeworICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fY29kZUJsb2Nr
LT5leGNlcHRpb25IYW5kbGVyKGkpOworICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVt
LzM5NDMzMzE4Pi4KKyAgICAgICAgaGFuZGxlci5uYXRpdmVDb2RlID0gbV9jb2RlQmxvY2stPmpp
dENvZGVNYXAoKS5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50YXJnZXQpKS5yZXRhZ2dlZDxF
eGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOworICAgIH0KKwogICAgIGlmIChtX3BjVG9Db2RlT3Jp
Z2luTWFwKQotICAgICAgICBtX2ppdENvZGUtPm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBXVEZNb3Zl
KG1fcGNUb0NvZGVPcmlnaW5NYXApOworICAgICAgICBtX2NvZGVCbG9jay0+c2V0UENUb0NvZGVP
cmlnaW5NYXAoV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwKSk7CiAKICAgICBtX3ZtLT5tYWNo
aW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPmFkZCgKICAgICAgICAg
c3RhdGljX2Nhc3Q8ZG91YmxlPihtX2ppdENvZGUtPnNpemUoKSkgLwotICAgICAgICBzdGF0aWNf
Y2FzdDxkb3VibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkpOwor
ICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXpl
KCkpKTsKIAotICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUobV9q
aXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1f
aml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgIHJldHVybiBDb21waWxhdGlvblN1Y2Nl
c3NmdWw7CiB9CkBAIC0xMDM2LDExICs5OTgsMTEgQEAgc2l6ZV90IEpJVDo6Y29kZVNpemUoKSBj
b25zdAogICAgIHJldHVybiBtX2xpbmtCdWZmZXItPnNpemUoKTsKIH0KIAotQ29tcGlsYXRpb25S
ZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29tcGls
YXRpb25FZmZvcnQgZWZmb3J0KQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGls
ZShKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAgZG9NYWluVGhyZWFkUHJlcGFy
YXRpb25CZWZvcmVDb21waWxlKCk7CiAgICAgY29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemlu
ZyhlZmZvcnQpOwotICAgIHJldHVybiBmaW5hbGl6ZU9uTWFpblRocmVhZChjb2RlQmxvY2spOwor
ICAgIHJldHVybiBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCkBAIC0xMDgwLDI2ICsxMDQyLDE2IEBAIHZvaWQg
SklUOjpkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKQogICAgICAgICBtX3Zt
LT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoKm1fdm0sICJQcmVwYXJpbmcg
Zm9yIEpJVCBjb21waWxhdGlvbi4iX3MpOwogfQogCi11bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0
ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpm
cmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgQVNTRVJU
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKSA9PSBX
VEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpKSk7CiAKICAgICBy
ZXR1cm4gcm91bmRMb2NhbFJlZ2lzdGVyQ291bnRGb3JGcmFtZVBvaW50ZXJPZmZzZXQoY29kZUJs
b2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsSW5S
ZWdpc3RlcnMpOwogfQogCi11bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICByZXR1cm4gZnJhbWVSZWdpc3RlckNvdW50Rm9yKGNv
ZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Ci19Ci0KLWludCBKSVQ6OnN0YWNrUG9pbnRl
ck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIHJldHVybiB2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrKSAt
IDEpLm9mZnNldCgpOwotfQotCiBpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJs
b2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgcmV0dXJuIHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2Rl
QmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrKSAtIDEpLm9mZnNldCgpOwog
fQogCiBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCBmMzJiMTQ4MDNiYTFkNjY4ODFkNmI2MjVkYjEyNzRh
NDVkMjMzOGExLi4yM2E5ZjU4NGI0ZTg0MzQzOGQxMWY3N2EyZjIwYmU4MTg1YWRjYTM4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTM3LDcgKzM3LDYgQEAKIAogI2RlZmluZSBBU1NFUlRf
SklUX09GRlNFVChhY3R1YWwsIGV4cGVjdGVkKSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFjdHVhbCA9
PSBleHBlY3RlZCwgIkpJVCBPZmZzZXQgXCIlc1wiIHNob3VsZCBiZSAlZCwgbm90ICVkLlxuIiwg
I2V4cGVjdGVkLCBzdGF0aWNfY2FzdDxpbnQ+KGV4cGVjdGVkKSwgc3RhdGljX2Nhc3Q8aW50Pihh
Y3R1YWwpKTsKIAotI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkpJVERpc2Fz
c2VtYmxlci5oIgpAQCAtNDUsNyArNDQsNiBAQAogI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2lu
Y2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJ
VC5oIgotI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFw
LmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYu
aD4KQEAgLTE1MSwxOSArMTQ5LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBz
dHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5mbyB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBkb25lTG9jYXRpb247Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgVW5saW5rZWRDYWxs
TGlua0luZm8qIHVubGlua2VkQ2FsbExpbmtJbmZvOwotICAgICAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50OwotI2Vsc2UKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBkb25lTG9jYXRpb247CiAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOwotI2Vu
ZGlmCiAgICAgfTsKIAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVy
bkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rp
b24pOwogCi0gICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwdWJsaWMgSlNJbnRl
cmZhY2VKSVQgeworICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBK
U0ludGVyZmFjZUpJVCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJ
VFRodW5rczsKQEAgLTE3OCw4ICsxNzEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8g
d2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRv
IGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgogICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRj
aFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwogCi0gICAgICAgIHVzaW5nIEJhc2UgPSBKU0lu
dGVyZmFjZUpJVDsKLQogICAgIHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwgQ29kZUJsb2NrKiA9
IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBCeXRl
Y29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAtMTg3LDMzICsxNzgsMjggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIFZNJiB2bSgpIHsgcmV0dXJuICpKU0ludGVyZmFjZUpJVDo6
dm0oKTsgfQogCiAgICAgICAgIHZvaWQgY29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhK
SVRDb21waWxhdGlvbkVmZm9ydCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFsaXpl
T25NYWluVGhyZWFkKENvZGVCbG9jayopOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5h
bGl6ZU9uTWFpblRocmVhZCgpOwogICAgICAgICBzaXplX3QgY29kZVNpemUoKSBjb25zdDsKIAog
ICAgICAgICB2b2lkIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAg
ICAgICAKICAgICAgICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0LCBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0
ZUNvbXBpbGUoY29kZUJsb2NrLCBlZmZvcnQpOworICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwg
Y29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKICAgICAg
ICAgfQogCi0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5s
aW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJD
b3VudEZvcihDb2RlQmxvY2sqKTsKLSAgICAgICAgc3RhdGljIGludCBzdGFja1BvaW50ZXJPZmZz
ZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIGludCBzdGFja1BvaW50
ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gY29tcGlsZVRpbWVTdGF0cygpOwogICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU2Vjb25kcyB0b3RhbENvbXBpbGVUaW1lKCk7CiAK
LSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19tZXRhZGF0YUdQUiA9IExMSW50OjpS
ZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFI7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHNfY29uc3RhbnRzR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFI7Ci0KICAgICBwcml2
YXRlOgogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTWFpblBhc3MoKTsKICAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKTsKICAgICAgICAgdm9pZCBsaW5rKCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVz
dWx0IHByaXZhdGVDb21waWxlKENvZGVCbG9jayosIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAg
ICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZv
cnQpOwogCiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQg
YW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKQEAgLTIzNywzMiArMjIzLDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICNlbmRpZgogCi0gICAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBCeXRlY29kZT4KLSAgICAgICAgdm9pZCBsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5
dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKLQotICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQnl0ZWNvZGU+Ci0gICAgICAgIHZvaWQgbG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5
dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKLQotICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQnl0ZWNvZGU+Ci0gICAgICAgIHZvaWQgbG9hZDhGcm9tTWV0YWRhdGEoY29uc3QgQnl0
ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOwotCi0gICAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgotICAgICAgICB2b2lkIHN0b3JlOFRv
TWV0YWRhdGEoVmFsdWVUeXBlLCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOwotCi0g
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KLSAgICAgICAgdm9pZCBzdG9yZTMy
VG9NZXRhZGF0YShHUFJSZWcsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCk7Ci0KLSAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgotICAgICAgICB2b2lkIG1hdGVyaWFs
aXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQ
UlJlZyk7Ci0KLSAgICBwdWJsaWM6Ci0gICAgICAgIHZvaWQgbG9hZENvbnN0YW50KHVuc2lnbmVk
IGNvbnN0YW50SW5kZXgsIEdQUlJlZyk7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBsb2Fk
R2xvYmFsT2JqZWN0KEdQUlJlZyk7Ci0gICAgICAgIHZvaWQgbG9hZENvZGVCbG9ja0NvbnN0YW50
KFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKLQotICAgICAgICB2b2lkIGVtaXRQdXRDb2RlQmxv
Y2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0ID0gcmVnVDApOwotCiAgICAgICAgIHZv
aWQgZXhjZXB0aW9uQ2hlY2soSnVtcCBqdW1wVG9IYW5kbGVyKQogICAgICAgICB7CiAgICAgICAg
ICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoanVtcFRvSGFuZGxlcik7CkBAIC0yOTQsMTkg
KzI1NCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNp
Z25lZCBjYWxsTGlua0luZm9JbmRleCk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8Ci0gICAgICAgICAg
ICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9j
b25zdHJ1Y3RfdmFyYXJncwotICAgICAgICAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxf
Y2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwotCi0gICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAotICAgICAgICAg
ICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3Bf
Y29uc3RydWN0X3ZhcmFyZ3MKLSAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKLSNlbHNlCiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAg
ICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQg
IT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAgLTMxOCwxMCArMjY1LDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpv
cGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgfHwgT3A6Om9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMKICAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShj
b25zdCBPcCYsIENhbGxMaW5rSW5mbyopOwotI2VuZGlmCiAKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+Ci0gICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5r
ZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCk7CisgICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwg
Q2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3Am
KTsKICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTM0MSwxMyArMjg3LDE0
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoVmlydHVh
bFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUp
OwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVC
YXJyaWVyKEpTQ2VsbCogb3duZXIpOwotICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoR1BS
UmVnIG93bmVyKTsKIAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8g
cHJvZmlsZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAg
ICAgIC8vIHNjcmF0Y2guCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29k
ZSYsIEdQUlJlZyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBKU1ZhbHVlUmVncyk7CisgICAg
ICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOwor
ICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1
ZVJlZ3MpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVnKTsKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpT
VmFsdWVSZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShW
YWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1l
dGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVn
cyk7CkBAIC0zNTgsMTAgKzMwNSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVu
YWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSks
IFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPgogICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlSWZQcm9maWxlZE9wY29kZShPcCBieXRlY29kZSk7CiAKLSAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEJ5dGVjb2RlPgotICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChjb25zdCBCeXRlY29kZSYsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgotICAgICAgICB2
b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIHB0cmRp
ZmZfdCwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAg
ICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIs
IEFycmF5UHJvZmlsZSosIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAgICAgIHZvaWQgZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJ
RCBhcnJheVByb2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CiAKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIEVDTUFNb2RlIGVjbWFNb2RlKE9wKTsKQEAgLTY0
OCw2ICs1OTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFw
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
ICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC02ODEsMTQgKzYyNywxNCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGJvb2wgaXNVbnNpZ25l
ZCk7CiAKICAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwgQWNj
ZXNzVHlwZSk7Ci0gICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFj
Y2Vzc1R5cGUpOworICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBBY2Nlc3NUeXBlKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21t
b24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnKTsKLSAgICAgICAgdm9pZCBl
bWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpOworICAg
ICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKKyAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSk7CiAg
ICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1
YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQg
ZGVwdGgpOwogICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxS
ZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKQEAgLTcwMCw3ICs2NDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgICAg
ICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90
IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0Kik7
Ci0gICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRv
U2V0KTsKKyAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7
CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogICAgICAgICB2b2lkIGVtaXRQ
dXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAgICAgIHZvaWQgZW1pdFB1
dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CkBAIC03MDksNyArNjU1LDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFk
ZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCi0gICAgICAgIGJvb2wgaXNL
bm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudElu
dChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50Q2hhcihW
aXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNzMxLDExICs2NzYsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3df
b3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X2lkX3dp
dGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9ieV92YWxfcHJlcGFy
ZUNhbGxHZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYpOwog
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93
X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9wdXRf
YnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9wdXRfYnlfdmFsX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVy
YXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBzbG93X29wX3B1dF90b19zY29wZUdlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3Jlc29sdmVf
c2NvcGVHZW5lcmF0b3IoVk0mKTsKIAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBvcF9jaGVja190cmFwc19oYW5kbGVyR2VuZXJhdG9yKFZNJik7
CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9w
X2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKQEAgLTc0OSwxMyArNjk2LDMwIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFy
IHx8IHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBN
b2R1bGVWYXIpOwogICAgICAgICB9CiAKKyNkZWZpbmUgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9H
RU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2Vu
ZXJhdG9yKFZNJik7CisgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJFX0dFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUikKKyN1bmRlZiBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVS
QVRPUgorCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2Vu
ZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05h
bWUpOworCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVua0lzVXNlZEZvck9wUmVz
b2x2ZVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQorICAgICAgICB7CisgICAgICAgICAg
ICAvLyBNb2R1bGVWYXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVudCB0byBlbWl0IGlubGlu
ZSB0aGFuIHVzZSBhIHRodW5rLgorICAgICAgICAgICAgLy8gUmVzb2x2ZWRDbG9zdXJlVmFyIGJl
Y2F1c2Ugd2UgZG9uJ3QgdXNlIHRoZXNlIHR5cGVzIHdpdGggb3BfcmVzb2x2ZV9zY29wZS4KKyAg
ICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCBy
ZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOworICAgICAgICB9CisKKyNkZWZpbmUgREVDTEFSRV9S
RVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAorICAgICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXNvbHZlX3Njb3BlXyMjcmVz
b2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOworICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUo
REVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKKyN1bmRlZiBERUNMQVJFX1JFU09MVkVf
U0NPUEVfR0VORVJBVE9SCisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNo
YXIqIHRodW5rTmFtZSk7CisKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gdmFsdWVJc0ZhbHNleUdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzVHJ1dGh5R2Vu
ZXJhdG9yKFZNJik7CiAKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYpOwotICAgICAg
ICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3Jl
c29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiwg
c3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7Ci0gICAg
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRl
T3BSZXNvbHZlU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25z
dCBjaGFyKiB0aHVua05hbWUpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
CiAgICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKQEAgLTc5NiwxMCArNzYwLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNl
cHRpb24oY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQpOwogICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0KEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25z
dCBCeXRlY29kZSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KLSAg
ICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdp
dGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgorICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1l
dGFkYXRhPgorICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0KTsKICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5
cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25U
cmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CkBA
IC04NTcsMjAgKzgyMSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2soQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQu
b2Zmc2V0KSk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29k
ZSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1l
Li4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0
aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIE9wZXJhdGlvblR5
cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlv
blR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3Mu
Li4pOwotICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAg
ICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgICAgIH0K
IAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBCeXRl
Y29kZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0
aW9uVHlwZSwgdHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0
ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwg
dm9pZD4KLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBi
eXRlY29kZSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4g
YXJncykKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0
YSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykK
ICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHNGb3JJbmRpcmVjdENhbGw8T3Bl
cmF0aW9uVHlwZT4odGFyZ2V0LCBhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5dGVjb2Rl
LCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOwor
ICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwg
dGFyZ2V0Lm9mZnNldCksIHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgpAQCAtOTU1LDIyICs5MTks
MjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgYm9v
bCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KKyAgICAgICAg
Ym9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWRP
cklubGluZWQ7IH0KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4g
bV9zaG91bGRFbWl0UHJvZmlsaW5nOyB9CiAjZWxzZQogICAgICAgICBib29sIGNhbkJlT3B0aW1p
emVkKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5s
aW5lZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIC8vIEVuYWJsZXMgdXNlIG9mIHZhbHVl
IHByb2ZpbGVyIHdpdGggdGllcmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAgICAgICAgIC8v
IGluIHdoaWNoIGNhc2UgYWxsIGNvZGUgZ2V0cyBwcm9maWxlZC4KICAgICAgICAgYm9vbCBzaG91
bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCi0gICAgICAgIHZv
aWQgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKLQot
ICAgICAgICB2b2lkIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLQogICAgICAgICBzdGF0aWMg
Ym9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNv
bXBpbGVUaW1lcygpOwotCi0gICAgICAgIHZvaWQgcmVzZXRTUCgpOworICAgICAgICAKKyAgICAg
ICAgLy8gSWYgeW91IG5lZWQgdG8gY2hlY2sgYSB2YWx1ZSBmcm9tIHRoZSBtZXRhZGF0YSB0YWJs
ZSBhbmQgeW91IG5lZWQgaXQgdG8KKyAgICAgICAgLy8gYmUgY29uc2lzdGVudCBhY3Jvc3MgdGhl
IGZhc3QgYW5kIHNsb3cgcGF0aCwgdGhlbiB5b3Ugd2FudCB0byB1c2UgdGhpcy4KKyAgICAgICAg
Ly8gSXQgd2lsbCBnaXZlIHRoZSBzbG93IHBhdGggdGhlIHNhbWUgdmFsdWUgcmVhZCBieSB0aGUg
ZmFzdCBwYXRoLgorICAgICAgICBHZXRQdXRJbmZvIGNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Nj
b3BlKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CisgICAgICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCiAgICAgICAgIElu
dGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCkBAIC05OTcsNiArOTY0LDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKICAgICAg
ICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAorICAgICAgICBIYXNoTWFwPHVu
c2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKKyAgICAgICAgSGFzaE1hcDx1
aW50NjRfdCwgQmluYXJ5QXJpdGhQcm9maWxlPiBtX2NvcGllZEFyaXRoUHJvZmlsZXM7CisKICAg
ICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBMaXN0IG1fZXhj
ZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKQEAgLTEwMzAsMjYgKzEwMDAsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IEhhc2hNYXA8Y29uc3QgSW5zdHJ1Y3Rpb24qLCBVbmlxdWVSZWY8TWF0aElDR2VuZXJhdGlvblN0
YXRlPj4gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlOwogCiAgICAgICAgIGJv
b2wgbV9jYW5CZU9wdGltaXplZDsKKyAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxp
bmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNv
ZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgQ29kZUJsb2Nr
KiBtX3Byb2ZpbGVkQ29kZUJsb2NrIHsgbnVsbHB0ciB9OwotICAgICAgICBVbmxpbmtlZENvZGVC
bG9jayogbV91bmxpbmtlZENvZGVCbG9jayB7IG51bGxwdHIgfTsKLQotICAgICAgICBNYXRoSUNI
b2xkZXIgbV9tYXRoSUNzOwotICAgICAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBtX2ppdENv
ZGU7Ci0KLSAgICAgICAgSklUQ29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29sOwotICAgICAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgeyBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKLSAgICAgICAgQmFnPFVubGlua2VkQ2Fs
bExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7Ci0gICAgICAgIEJhZzxDYWxsTGlua0luZm8+IG1f
ZXZhbENhbGxMaW5rSW5mb3M7Ci0gICAgICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
PiBtX3VubGlua2VkU3R1YkluZm9zOwotICAgICAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFi
bGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKLSAgICAgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRh
YmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7Ci0KLSAgICAgICAgc3RydWN0IE5vdEFDb2Rl
QmxvY2sgeyB9IG1fY29kZUJsb2NrOwotCi0gICAgICAgIGJvb2wgbV9pc1NoYXJlYWJsZSB7IHRy
dWUgfTsKKyAgICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1faml0Q29kZTsKICAgICB9Owog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMuY3BwCmluZGV4IDhmMWE3YzViODM0NjEwYWEwYjhhZmM4MzE3YjkxY2RlMDE3NGU2YjMu
LjM1NDc1ZmUyY2FhYzg4NTExNDZiZGMyMDUxZDBlZDU5MDM3ZDRmNWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcApAQCAtMjkyLDEwICsyOTIsOSBAQCB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEs
IFZpcnR1YWxSZWdpc3RlciBvcDIsCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEp
IHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7CiAgICAgICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50
R1BSMSk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjIp
OwotICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjEpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CiAgICAgICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzIxLDgg
KzMyMCw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJl
Z2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwKICAgICAgICAgfQogCiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7Ci0gICAgICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1Qw
LCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzQ4LDgg
KzM0Niw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJl
Z2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwKICAgICAgICAgfQogCiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMik7Ci0gICAgICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDMsIHJlZ1Qy
LCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QyLCByZWdUMSk7CiAgICAgICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzc1LDgg
KzM3Miw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJl
Z2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwKICAgICB9CiAKICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgotICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OwogfQogCkBAIC01NzcsOCArNTczLDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW8KIAogICAg
IGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCBy
ZWdUMik7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0
ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNzIy
LDggKzcxNyw4IEBAIHZvaWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHJ1Y3Rp
b24gKmluc3RydWN0aW9uLCBPcGVyYW5kVHlwZXMgdHlwZXMsCiAKIHZvaWQgSklUOjplbWl0X29w
X25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIFVu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+dW5h
cnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tX3Byb2Zp
bGVJbmRleCk7Ci0gICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9tYXRoSUNzLmFkZEpJVE5lZ0lD
KGFyaXRoUHJvZmlsZSk7CisgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKKyAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX2NvZGVCbG9jay0+YWRk
SklUTmVnSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1
cnJlbnRJbnN0cnVjdGlvbiwgbmVnYXRlSUMpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBi
ZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJh
bmQgY2FuIGJlIGEgQmlnSW50CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlD
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJh
dGlvbkFyaXRoTmVnYXRlKTsKQEAgLTkwNCw4ICs4OTksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91
cnNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKIHZvaWQgSklU
OjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxv
Y2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1f
cHJvZmlsZUluZGV4KTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX21hdGhJQ3MuYWRkSklUQWRk
SUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklU
QWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywg
Y3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25W
YWx1ZUFkZCk7CiB9CkBAIC05NTAsMTEgKzk0NSwxMCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zh
c3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiog
YwogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUo
KnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVD
b2RlKSB7CiAgICAgICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMt
PmFyaXRoUHJvZmlsZSgpOwotICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwog
ICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJl
Z3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmls
ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5v
blByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOworICAg
ICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNS
ZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0
YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDIxLDExICsxMDE1LDEwIEBAIHZvaWQgSklUOjpl
bWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJ
bnN0cnVjdGlvbioKICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwogICAgICAg
ICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxl
KCk7Ci0gICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChh
cml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQ
UiwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywg
YXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVm
dFJlZ3MsIHJpZ2h0UmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChu
b25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOwogICAgIH0gZWxzZQogICAg
ICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAK
QEAgLTEwNjIsMTQgKzEwNTUsMTMgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5
TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGMKICNlbmRpZgog
CiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9m
aWxlKCk7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRoUHJvZmls
ZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnBy
ZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCBy
ZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJl
Z1Q0LCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJl
aW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJl
c3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0
aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1BVEhf
SUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTI4LDE0ICsx
MTIwLDEzIEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJh
dG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbioKICNlbmRpZgogCiAgICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwotICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1p
dFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxk
U2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJh
dGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQs
IGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdz
LCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7
CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pK
TWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0
UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0
YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxK
X0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVn
cywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQog
ICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTE3NSw3ICsxMTY2LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7CiAgICAg
aWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxlID0gJm1fdW5s
aW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRGl2PigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOwogCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVy
YW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVj
b2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKQEAgLTEyMjAsOCArMTIxMSw4IEBAIHZvaWQg
SklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlu
a2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE11bD4oKS5tX3Byb2ZpbGVJbmRleCk7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9tYXRoSUNz
LmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxv
Y2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElD
LmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11
bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwg
b3BlcmF0aW9uVmFsdWVNdWwpOwogfQpAQCAtMTIzNiw4ICsxMjI3LDggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2UKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BTdWI+KCkubV9wcm9maWxlSW5kZXgpOwotICAgIEpJVFN1YklDKiBzdWJJ
QyA9IG1fbWF0aElDcy5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCku
bWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgIEpJVFN1YklDKiBzdWJJ
QyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1
Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1h
dGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVl
U3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwuY3BwCmluZGV4IDllMWY4MDgwMmE4OTgyZWZkODFlMDBjMjU4MWEzMzNjMTYxNjRm
NDUuLjZhYjU0ODgyZDdkOTEyYzU2MTlmNmJhZjQwYTFjNjVhMDMxYmU2MDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcApAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIkNh
bGxGcmFtZVNodWZmbGVyLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSklU
SW5saW5lcy5oIgotI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1
ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCiAjaW5j
bHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTQ1LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25z
dCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlv
bkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lz
dGVyKCksIHJlZ1QwKTsKIH0KIApAQCAtNTQsMTggKzUzLDE4IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8
CiAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0g
b3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxs
X3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9w
JiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikKIHsKICAgICB1bnNpZ25lZCBjaGVja3BvaW50ID0g
bV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBpbnQgYXJnQ291bnRJbmNsdWRpbmdUaGlz
ID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpOwog
ICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KHN0YWNrT2Zmc2V0SW5S
ZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50KSk7CiAKLQogICAgIGlmIChPcDo6
b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBD
YWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1QwKTsKICAgICAg
ICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAg
ICAgc3RvcmUzMlRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcENhbGw6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkNhbGxMaW5rSW5mbygpICsgTExJbnRDYWxsTGlua0luZm86Om9mZnNldE9mQXJyYXlQ
cm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsK
KyAgICAgICAgc3RvcmUzMihyZWdUMCwgYXJyYXlQcm9maWxlRm9yKG1ldGFkYXRhLCBjaGVja3Bv
aW50KS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgICAgICBkb25lLmxpbmso
dGhpcyk7CiAgICAgfQogCkBAIC03OSw3ICs3OCw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAg
T3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29u
c3RydWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFy
Z3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2
b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCitKSVQ6OmNvbXBpbGVTZXR1
cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewogICAgIFZp
cnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CkBAIC05Miw4ICs5
MSw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBv
cGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzOwogICAgIGVsc2UKICAgICAgICAg
c2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3M7Ci0gICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCByZWdU
MCwgcmVnVDEsIC1maXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGNh
bGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNl
dCk7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwog
ICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVn
VDEsIHJlZ1QxKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwg
NSAqIHNpemVvZih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0x
MDMsMTYgKzEwMSwxNCBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29k
ZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZgogICAgICAgICBzZXR1cE9w
ZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lOwogICAgIGVsc2UK
ICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsKLSAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0
aW9uLCByZWdUMywgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOworICAg
IGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDAp
OwogICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlZ1QxKTsKIAogICAgIC8vIFByb2ZpbGUgdGhl
IGFyZ3VtZW50IGNvdW50LgogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIpOwotICAgIGxvYWRDb25zdGFudChjYWxs
TGlua0luZm9Db25zdGFudCwgcmVnVDApOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDYWxs
TGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHJlZ1Qz
KTsKLSAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMsIHJlZ1QyKTsK
LSAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNldE9m
TWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOworICAgIGxvYWQzMihpbmZvLT5hZGRy
ZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpLCByZWdUMCk7CisgICAgSnVtcCBu
b3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QwLCByZWdUMik7CisgICAgc3RvcmUzMihy
ZWdUMiwgaW5mby0+YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSk7CiAg
ICAgbm90QmlnZ2VzdC5saW5rKHRoaXMpOwogICAgIAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMn
LgpAQCAtMTMxLDE1ICsxMjcsMTYgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBP
cCYpCiB0ZW1wbGF0ZTw+CiBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2
YWwmIGJ5dGVjb2RlKQogewotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0
cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVy
LCBhcmd1bWVudEdQUjEpOwotICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNz
KGFyZ3VtZW50R1BSMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKKyAgICBzdG9yZVB0cihj
YWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9m
ZnNldCgpKSk7CisKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZv
cihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwog
Ci0gICAgcmVzZXRTUCgpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1v
ZGUudmFsdWUoKSksIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFs
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBhcmd1bWVudEdQUjIp
OwotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNhbGxFdmFsLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJldHVyblZhbHVlR1BSKSk7Cisg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogCiAgICAgZW1pdFB1dENhbGxS
ZXN1bHQoYnl0ZWNvZGUpOwogCkBAIC0xNTEsNyArMTQ4LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVD
YWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9
IG1fZXZhbENhbGxMaW5rSW5mb3MuYWRkKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7Cisg
ICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0lu
Zm86OkNhbGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5t
X2FyZ3Y7CkBAIC0xNTksNDcgKzE1Niw0MyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0NhcwogICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsg
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKIAogICAgIGxvYWQ2NChBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBz
aXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0gc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSwgcmVnVDApOwotICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwotICAgIGVt
aXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoKm1fdm0sIGluZm8pOwotICAg
IHJlc2V0U1AoKTsKKyAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgaW5mbyk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgT3A+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5r
ZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKK2Jv
b2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25l
ZCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgSklUOjpjb21w
aWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlua2VkQ2FsbExpbmtJ
bmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwo
Y29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kZXgpCiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZm
bGVEYXRhPiBzaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCk7
Ci0gICAgc2h1ZmZsZURhdGEtPm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAg
c2h1ZmZsZURhdGEtPm51bVBhcmFtZXRlcnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCk7Ci0gICAgc2h1ZmZsZURhdGEtPm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6
bnVtYmVyVGFnUmVnaXN0ZXI7Ci0gICAgc2h1ZmZsZURhdGEtPm51bUxvY2FscyA9CisgICAgQ2Fs
bEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7CisgICAgc2h1ZmZsZURhdGEubnVtUGFzc2Vk
QXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdSZWdpc3Rl
ciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOworICAgIHNodWZmbGVEYXRhLm51bUxvY2Fs
cyA9CiAgICAgICAgIGJ5dGVjb2RlLm1fYXJndiAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAv
IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgc2h1ZmZsZURhdGEtPmFyZ3MucmVzaXplKGJ5dGVjb2Rl
Lm1fYXJnYyk7CisgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9hcmdjOyArK2kpIHsKLSAg
ICAgICAgc2h1ZmZsZURhdGEtPmFyZ3NbaV0gPQorICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ld
ID0KICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKICAgICAg
ICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBi
eXRlY29kZS5tX2FyZ3YsCiAgICAgICAgICAgICAgICAgRGF0YUZvcm1hdEpTKTsKICAgICB9Ci0g
ICAgc2h1ZmZsZURhdGEtPmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRh
Rm9ybWF0SlMpOwotICAgIHNodWZmbGVEYXRhLT5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJl
Z2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsK
KyAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPQorICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihy
ZWdUMCwgRGF0YUZvcm1hdEpTKTsKKyAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdp
c3RlcnMobV9jb2RlQmxvY2spOworICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZs
ZURhdGEpOwogCi0gICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7
Ci0gICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRh
SUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBbJl0gewotICAgICAgICBDYWxsRnJhbWVT
aHVmZmxlcigqdGhpcywgKnNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICBK
dW1wTGlzdCBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVn
VDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICBD
YWxsRnJhbWVTaHVmZmxlcigqdGhpcywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgp
OwogICAgIH0pOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7Ci0KLSAgICBzaHVmZmxlRGF0
YS0+c2hyaW5rVG9GaXQoKTsKLSAgICBpbmZvLT5mcmFtZVNodWZmbGVEYXRhID0gV1RGTW92ZShz
aHVmZmxlRGF0YSk7Ci0KICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgbV9j
YWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25l
TG9jYXRpb247CiAgICAgCkBAIC0yMjUsMjUgKzIxOCwxNCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
Q2FsbChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZAogICAgICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgog
ICAgICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4u
CiAgICAgKi8KLQotICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKLSAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGluZm9Db25zdGFudCA9IFVJTlRfTUFYOwotICAg
IGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpIHsKLSAgICAgICAgaW5mbyA9IG1fdW5saW5r
ZWRDYWxscy5hZGQoKTsKLSAgICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJ
bmRleDsKLSAgICAgICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9y
KG9wY29kZUlEKTsKLQotICAgICAgICBpbmZvQ29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm8sIGluZm8pOwotCi0gICAgICAgIEFT
U0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsK
LSAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZv
KCkpOwotICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnVu
bGlua2VkQ2FsbExpbmtJbmZvID0gaW5mbzsKLSAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZv
W2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCA9IGluZm9Db25zdGFudDsK
LSAgICB9Ci0gICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm9Db25zdGFudCk7Cisg
ICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKKyAgICBpZiAob3Bjb2RlSUQgIT0gb3Bf
Y2FsbF9ldmFsKQorICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVj
b2RlLCBpbmZvKTsKIAogICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgotICAgIHVpbnQz
Ml90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KS5iaXRzKCk7
CisgICAgYXV0byBieXRlY29kZUluZGV4ID0gbV9jb2RlQmxvY2stPmJ5dGVjb2RlSW5kZXgoaW5z
dHJ1Y3Rpb24pOworICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYnl0
ZWNvZGVJbmRleCkuYml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0
cyksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRh
Z09mZnNldCkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsg
Ly8gcmVnVDAgaG9sZHMgY2FsbGVlLgpAQCAtMjUyLDEyICsyMzQsMTYgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxs
TGlua0luZm9JbmQKICAgICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5dGVjb2RlKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExp
bmtJbmZvSW5kZXgsIGluZm9Db25zdGFudCkpCisgICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9u
SW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOworICAgIGluZm8tPnNldFVwQ2FsbChD
YWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgcmVnVDApOworICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKKyAgICBtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87CisK
KyAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRl
eCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGxvYWRDb25zdGFudChpbmZvQ29uc3RhbnQsIHJl
Z1QyKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0gICAgICAgIGF1dG8gc2xv
d1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywg
cmVnVDAsIHJlZ1QyLCBbJl0geworICAgICAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRU
YWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0
YUlDOjpZZXMsIFsmXSB7CiAgICAgICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAg
ICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KHJlZ1QyKTsKICAgICAgICAgfSk7CkBA
IC0yNjcsMTMgKzI1MywxNCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZAogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXREYXRh
SUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyKTsKKyAgICBhdXRvIHNsb3dQYXRocyA9IGlu
Zm8tPmVtaXRGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURh
dGFJQzo6WWVzKTsKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgYWRkU2xv
d0Nhc2Uoc2xvd1BhdGhzKTsKIAogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0lu
Zm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogCi0gICAgcmVzZXRTUCgpOwor
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0
Q2FsbFJlc3VsdChieXRlY29kZSk7CiB9CkBAIC0yODYsMjAgKzI3MywyMSBAQCB2b2lkIEpJVDo6
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRQogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDMpOwotICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CisgICAg
bV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0g
bGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKLSAgICBD
YWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCgqbV92bSwgKnRoaXMsIHJlZ1QyKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDMp
OworICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJ
bmZvLT5lbWl0U2xvd1BhdGgoKm1fdm0sICp0aGlzKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7CiAgICAgICAgIGFib3J0V2l0
aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgcmVzZXRTUCgpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25t
ZW50KCk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAg
IGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTQwNywzMSArMzk1LDE3IEBAIHZvaWQg
SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
KQogCiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5u
ZXh0OwogICAgIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwotCi0gICAgbW92ZShy
ZWdUMCwgYmFzZUdQUik7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7CiAKICAgICBKSVRHZXRC
eUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4
KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1v
cnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0K
LSAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHVi
SW5mb3MuYWRkKCk7Ci0gICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRC
eUlkOwotICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OwotICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29s
LmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7
Ci0gICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4
OwotICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKLQotICAgIGdlbi5nZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZv
R1BSKTsKLSAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5l
ZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKLSAgICBhZGRTbG93Q2FzZSgpOworICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQt
PmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSwg
QWNjZXNzVHlwZTo6R2V0QnlJZCk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwor
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBl
bmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdEdQ
Uik7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQsIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX25leHQpOwogCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KQEAgLTQ0Miw4
ICs0MTYsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0MKICAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCisK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKworICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9
IHJlZ1QwOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKICAgICBub3RPYmplY3QuYXBwZW5kKGJy
YW5jaElmTm90Q2VsbChpdGVyYXRvckdQUikpOwogICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNo
SWZOb3RPYmplY3QoaXRlcmF0b3JHUFIpKTsKQEAgLTQ1NiwxNyArNDMyLDE5IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKLSAgICBtb3ZlKGl0ZXJhdG9yR1BSLCBhcmd1bWVudEdQUjIpOwotICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKLSAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRy
ZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlv
bigpKSwgbmV4dFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQp
LnJhd0JpdHMoKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBD
YWxsKCkpOworICAgIENhbGwgY2FsbDsKKyAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkgeworICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIw
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25B
cmdHUFIwLCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9y
dGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJhdG9yR1BSLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5y
YXdCaXRzKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CiAKICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0aGlz
KTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmpl
Y3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAKICAgICBk
b25lLmxpbmsodGhpcyk7CiB9CkBAIC00NzQsNiArNDUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0MKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJ
dGVyYXRvck5leHQ+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgYXV0byogdHJ5RmFzdEZ1bmN0aW9uID0gKFsmXSAoKSB7CiAgICAg
ICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPndpZHRoKCkpIHsKICAgICAgICAgY2FzZSBOYXJyb3c6
IHJldHVybiBpdGVyYXRvcl9uZXh0X3RyeV9mYXN0X25hcnJvdzsKQEAgLTQ5MSw3OSArNDcwLDUw
IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uKQogICAgIEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0
ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSk7CiAKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwot
ICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6
Om9mZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zm
c2V0T2ZTZWVuTW9kZXMoKSwgcmVnVDApOwotICAgIG9yMzIoVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwgcmVnVDApOwotICAgIHN0b3Jl
OFRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9m
ZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0
T2ZTZWVuTW9kZXMoKSk7CisgICAgb3I4KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90
PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSksIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9p
dGVyYXRpb25NZXRhZGF0YS5zZWVuTW9kZXMpKTsKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0
b3JOZXh0PihpbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNl
VG9OZXh0Q2hlY2twb2ludCgpOwogICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0g
SlNPYmplY3QpIGluIHJlZ1QwCiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpkb250Q2xvYmJl
clJlZ2lzdGVyOwotICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsK
KyAgICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9
IHJlZ1QyOworICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7CisgICAgLy8gaXRlclJlc3VsdEdQ
UiB3aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkgaWQgYmVsb3cuCisgICAgbW92
ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKICAgICB7Ci0gICAgICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
LSAgICAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSBiYXNlR1BSKTsKLQotICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUik7CisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKIAogICAgICAgICBSZWdpc3Rl
clNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZChpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAg
ICAgIHByZXNlcnZlZFJlZ3MuYWRkKHZhbHVlR1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciBnZW4oCi0gICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHByZXNlcnZlZFJlZ3MsCi0gICAgICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVy
dHlOYW1lcy0+ZG9uZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
ZG9uZUdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLQotICAgICAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7Ci0gICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJ
ZDsKLSAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Ci0g
ICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHVi
SW5mbyk7Ci0gICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1
YkluZm9JbmRleDsKLSAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwot
Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKLSAgICAgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBP
U1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCi0gICAg
ICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAorICAg
ICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3Vs
dEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCByZWdUMywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7
CisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsK
IAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7
IGRvbmVHUFIgfSk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpT
VmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RvbmUsIGRvbmVHUFIpOwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2lu
dCgpOwogICAgIH0KIAorCiAgICAgewotICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJz
KGRvbmVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKLSAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yIHNjcmF0Y2hBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7Ci0gICAgICAgIEdQUlJlZyBz
Y3JhdGNoMSA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgICAg
IEdQUlJlZyBzY3JhdGNoMiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7
Ci0gICAgICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2gyID0gcmVnVDM7CiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gZmFsc2U7Ci0gICAgICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xv
YmFsR1BSKTsKLSAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5
KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAs
IGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsR1BSKTsK
LQotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OmJhc2U7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgICAgIG1vdmUoaXRlckNhbGxSZXN1bHRH
UFIsIGJhc2VHUFIpOworICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZU
cnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBS
ZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpOwogCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVu
dGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpH
ZXRCeUlkKTsKLQotICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7Ci0gICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKLSAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgg
PSBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Ci0gICAgICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKLSAgICAgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOwotCi0gICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKLSAgICAgICAgcmVz
ZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZh
dGl2ZWx5IHJlc2V0IFNQCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJv
cGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBKU1ZhbHVl
UmVncyh2YWx1ZUdQUiksIHJlZ1Q0LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlc3Vs
dEdQUik7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVS
ZWdzIHsgdmFsdWVHUFIgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV92YWx1ZSwgdmFsdWVHUFIpOwogCiAgICAgICAgIGl0ZXJhdGlvbkRvbmUubGluayh0aGlz
KTsKICAgICB9CkBAIC01NzcsNTUgKzUyNyw1OSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRl
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Qwog
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVj
a3BvaW50KGp1bXAoKSk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpkb250Q2xvYmJlclJlZ2lzdGVyOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7
CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKKyAg
ICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9i
amVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJDYWxsUmVzdWx0R1BSKSk7CisgICAgICAg
IG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKIAogICAg
ICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUu
aW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21f
Z2V0QnlJZEluZGV4KytdOwogICAgICAgICAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChp
dGVyQ2FsbFJlc3VsdEdQUikpOworICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90
T2JqZWN0KGl0ZXJSZXN1bHRHUFIpKTsKIAotICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BS
LCBhcmd1bWVudEdQUjIpOwotICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
Ci0gICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgYXJndW1lbnRHUFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0
eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50
R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZG9uZVZS
ZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7
CisgICAgICAgIENhbGwgY2FsbDsKKyAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpIHsKKyAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7CisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5m
bzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
R1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkb25l
VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7Ci0KLSAgICAgICAgY29uc3RleHByIEdQ
UlJlZyBkb25lR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZG9uZVZSZWcsIGRvbmVHUFIpOwotICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIGl0ZXJDYWxsUmVzdWx0R1BSKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgcmVnVDEpOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKICAgICAg
ICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICAgICAgbm90
T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNO
b3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
VGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSkpOwogICAgIH0KIAogICAgIHsgICAKICAgICAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVj
b2RlLm1fdmFsdWU7CisgICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7CiAKICAg
ICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1
ZS5pbXBsKCk7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNb
bV9nZXRCeUlkSW5kZXgrK107CiAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKLSAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKLSAg
ICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwotICAgICAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworICAgICAgICBDYWxsIGNhbGw7
CisgICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7
CisgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIw
LCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3Vs
dEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihp
ZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKICAgICB9CisKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKaW5kZXggMWNkNzRmNDY5NDg5MmM2
Nzk1ZmQzYzYzZjhhMjIwMzRkNzhiMzdhMS4uMTUyNTE0YWZkY2FjNzgyYWM5Yzg3NGU1NTBhZmZi
OWM3MjhiZWEwNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
MzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNw
cApAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Pgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKIHsKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2Rl
QmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSk7CiAgICAgZW1pdFN0b3JlKGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVj
b2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSwgcmVnVDEsIHJlZ1QwKTsK
IH0KIApAQCAtMTU3LDcgKzE1Nyw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiBKSVQ6OmNvbXBpbGVT
ZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikKIHsKICAgICB1bnNp
Z25lZCBjaGVja3BvaW50ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOworICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIGlu
dCBhcmdDb3VudCA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVj
a3BvaW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihzdGFj
a09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludCkpOwogCkBAIC0x
OTIsNyArMTkyLDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUs
IENhbGxMaW5rSW5mbyogaW5mbykKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNp
emVGcmFtZUZvckZvcndhcmRBcmd1bWVudHM7CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0
aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNp
emVPcGVyYXRpb24sIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0
KTsKKyAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBm
aXJzdFZhckFyZ09mZnNldCk7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lz
dGVyKSwgcmVnVDEpOwogICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVl
R1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxp
Z25tZW50Qnl0ZXMoKSwgNiAqIHNpemVvZih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CkBAIC0yMDIsNyArMjAyLDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25z
dCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbykKICAgICAgICAgc2V0dXBPcGVyYXRp
b24gPSBvcGVyYXRpb25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBlbHNlCiAgICAg
ICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAgY2Fs
bE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIHJlZ1QxLCBKU1ZhbHVlUmVncyhyZWdUMiwgcmVnVDQpLCBmaXJzdFZhckFyZ09mZnNl
dCwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdUNCksIGZpcnN0
VmFyQXJnT2Zmc2V0LCByZWdUMCk7CiAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOwog
CiAgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCkBAIC0yMzIsMTAgKzIzMiwxMCBA
QCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2YWwmIGJ5dGVjb2RlKQog
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7CiAgICAgc3Rv
cmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVy
RnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNh
bGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CiAKICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QxKSk7CiAKQEAgLTI0OSw3ICsyNDksNyBA
QCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0NhcwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7Ci0gICAg
Q2FsbExpbmtJbmZvKiBpbmZvID0gbV9wcm9maWxlZENvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZv
KENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0g
bV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkp
OwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJlZ1QwKTsKIAogICAg
IGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5tX2FyZ3Y7CkBAIC0yNTgsOCArMjU4LDgg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXMKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lz
dGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBlbWl0TG9h
ZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX3By
b2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
aW5mbyk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9j
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAg
IGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTI4NiwxMSArMjg2LDExIEBAIHZvaWQg
SklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWdu
ZWQgY2FsbExpbmtJbmZvSW5kCiAgICAgKi8KICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxs
cHRyOwogICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCi0gICAgICAgIGluZm8gPSBt
X3Byb2ZpbGVkQ29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpKTsKKyAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29k
ZSwgaW5mbyk7CiAgICAgLy8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpLCB3aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCiAgICAgCi0gICAgYXV0
byBieXRlY29kZUluZGV4ID0gbV9wcm9maWxlZENvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0
cnVjdGlvbik7CisgICAgYXV0byBieXRlY29kZUluZGV4ID0gbV9jb2RlQmxvY2stPmJ5dGVjb2Rl
SW5kZXgoaW5zdHJ1Y3Rpb24pOwogICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRl
SW5kZXgoYnl0ZWNvZGVJbmRleCkuYml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxv
Y2F0aW9uQml0cyksIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcykpOwogICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsgLy8gcmVnVDEsIHJl
Z1QwIGhvbGRzIGNhbGxlZS4KQEAgLTMyNCw3ICszMjQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
Q2FsbChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZAogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgpOwogCi0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAg
ICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzQxLDExICszNDEsMTIgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUUKICAgICB9CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OworICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhT
dGFydCA9IGxhYmVsKCk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwog
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDMpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMyk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5m
b0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqbV92bSwgKnRoaXMpOwogCiAgICAg
aWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
dmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsK
QEAgLTM1Myw3ICszNTQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRG
b3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9p
bnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cD4oKTsKQEAgLTM5NCw3ICszOTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVu
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKICAgICBKU1ZhbHVlUmVncyBuZXh0UmVn
cyA9IEpTVmFsdWVSZWdzKHRhZ05leHRHUFIsIHBheWxvYWROZXh0R1BSKTsKIAogICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLAorICAgICAg
ICBtX2NvZGVCbG9jaywKICAgICAgICAgSklUVHlwZTo6QmFzZWxpbmVKSVQsCiAgICAgICAgIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgQ2FsbFNpdGVJbmRleChCeXRlY29k
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLApAQCAtNDA5LDcgKzQxMCw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uKQogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlk
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIG5leHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgbmV4dFJlZ3MpOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCBuZXh0UmVncyk7CiAKICAg
ICBmYXN0Q2FzZS5saW5rKHRoaXMpOwpAQCAtNDM5LDEwICs0NDAsMTAgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0MKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSgKLSAgICAgICAgYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIC8vIG1ldGFkYXRhCisgICAgICAgIGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgLy8gbWV0YWRhdGEKICAgICAgICAgb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplLCAvLyBvcGVyYXRpb24KICAgICAgICAgbmV4dFZSZWcsIC8vIHJlc3VsdAot
ICAgICAgICBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgLy8gYXJnMQorICAgICAgICBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIC8vIGFyZzEKICAgICAgICAgZ2VuLnN0dWJJbmZvKCksIC8vIGFyZzIKICAgICAgICAg
SlNWYWx1ZVJlZ3ModGFnSXRlcmF0b3JHUFIsIHBheWxvYWRJdGVyYXRvckdQUiksIC8vIGFyZzMK
ICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cihpZGVudCkucmF3Qml0cygpKTsgLy8gYXJnNApAQCAtNDUxLDcgKzQ1Miw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDCiAgICAgYXV0byBkb25lID0ganVtcCgpOwogCiAgICAgbm90T2JqZWN0
LmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVz
dWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1
bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
KTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKIH0KQEAgLTQ1OSw3ICs0NjAsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Qwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9
IChbJl0gKCkgewogICAgICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAg
ICAgIGNhc2UgTmFycm93OiByZXR1cm4gaXRlcmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBA
IC01MDUsNyArNTA2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiAgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKHRhZ1Zh
bHVlR1BSKTsKICAgICAgICAgcHJlc2VydmVkUmVncy5hZGQocGF5bG9hZFZhbHVlR1BSKTsKICAg
ICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX3Byb2ZpbGVkQ29k
ZUJsb2NrLAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssCiAgICAgICAgICAgICBKSVRUeXBlOjpC
YXNlbGluZUpJVCwKICAgICAgICAgICAgIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwKICAg
ICAgICAgICAgIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkpKSwKQEAgLTUzMiwxMCArNTMzLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9y
X25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogICAgICAgICBHUFJSZWcgc2Ny
YXRjaDEgPSByZWdUNjsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDc7CiAgICAgICAg
IGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gZmFsc2U7Ci0g
ICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1Zh
bHVlUmVncyh0YWdEb25lR1BSLCBwYXlsb2FkRG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwg
ZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX3By
b2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIEp1bXBMaXN0IGl0ZXJh
dGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh0YWdEb25lR1BSLCBw
YXlsb2FkRG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpOwogCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9w
cm9maWxlZENvZGVCbG9jaywKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLAogICAgICAgICAgICAg
SklUVHlwZTo6QmFzZWxpbmVKSVQsCiAgICAgICAgICAgICBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksCiAgICAgICAgICAgICBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpKSksCkBAIC01ODcsMTAgKzU4OCwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93QwogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogICAgICAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoCi0gICAgICAgICAgICBieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgLy8gbWV0YWRhdGEKKyAgICAgICAg
ICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgLy8gbWV0YWRhdGEKICAgICAgICAg
ICAgIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgLy8gb3BlcmF0aW9uCiAgICAgICAgICAgICBk
b25lVlJlZywgLy8gcmVzdWx0Ci0gICAgICAgICAgICBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQorICAgICAgICAgICAgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcxCiAgICAgICAgICAgICBn
ZW4uc3R1YkluZm8oKSwgLy8gYXJnMgogICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModGFnSXRlclJl
c3VsdEdQUiwgcGF5bG9hZEl0ZXJSZXN1bHRHUFIpLCAvLyBhcmczCiAgICAgICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdC
aXRzKCkpOyAvLyBhcmc0CkBAIC02MDEsNyArNjAyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0MKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAg
ICAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmls
ZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgIH0KIAogICAgIHsgICAKQEAgLTYxNywxMCAr
NjE4LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDCiAgICAgICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZSgKLSAgICAgICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spLCAvLyBtZXRhZGF0YQorICAgICAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCAvLyBtZXRhZGF0YQogICAgICAgICAgICAgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCAv
LyBvcGVyYXRpb24KICAgICAgICAgICAgIHZhbHVlVlJlZywgLy8gcmVzdWx0Ci0gICAgICAgICAg
ICBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8g
YXJnMQorICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCAvLyBhcmcxCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKSwgLy8gYXJnMgogICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3ModGFnSXRlclJlc3VsdEdQUiwgcGF5bG9hZEl0ZXJSZXN1bHRHUFIp
LCAvLyBhcmczCiAgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1t
b3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOyAvLyBhcmc0CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ29kZS5oCmluZGV4IDhlNGNlMDNmOGVlZWMzNDBiYjY2NmY1Mjc5YTY4NzZkYzJj
Njg4NjAuLjczNzY2NzliZTg3MmI1OTg5M2Y5YWNhMzE5OGU5ZWZlNTUyMmY2OGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCkBAIC0zMiwxMSArMzIsOCBAQAogI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAKLQogbmFt
ZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOwotCiBuYW1lc3BhY2UgREZH
IHsKIGNsYXNzIENvbW1vbkRhdGE7CiBjbGFzcyBKSVRDb2RlOwpAQCAtMTYyLDEwICsxNTksMTAg
QEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJVFR5cGUgaml0VHlwZSkK
ICAgICB7Ci0gICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoSklUQ29kZTo6aXNCYXNl
bGluZUNvZGUoaml0VHlwZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0
dXJuIE9wdGlvbnM6OnVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCgpOwogICAgIH0KIApAQCAtMjI2
LDggKzIyMyw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25zdCB7IHJldHVy
biBtX3NoYXJlQXR0cmlidXRlID09IFNoYXJlQXR0cmlidXRlOjpTaGFyZWQ7IH0KIAotICAgIHZp
cnR1YWwgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgeyByZXR1cm4gbnVs
bHB0cjsgfQotCiBwcml2YXRlOgogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFNoYXJlQXR0
cmlidXRlIG1fc2hhcmVBdHRyaWJ1dGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29tcGlsYXRpb25LZXkuY3BwCmluZGV4IGM4MDRkZGUzOTZiMTc3NzQzYTMzNmY5MDY5NTJh
OTMzYWJiZjAwYWYuLmI4OWU4ZTA0ZWUxMjYzNzg4NmZkMjhmNGE0YmFiNjBiMGM0MTU2ZDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuY3BwCkBA
IC0zOCw3ICszOCw3IEBAIHZvaWQgSklUQ29tcGlsYXRpb25LZXk6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKICAgICAgICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgb3V0LnByaW50KCIoQ29tcGlsZSBvZiAiLCBSYXdQb2ludGVyKG1fY29k
ZUJsb2NrKSwgIiB3aXRoICIsIG1fbW9kZSwgIikiKTsKKyAgICBvdXQucHJpbnQoIihDb21waWxl
IG9mICIsICptX3Byb2ZpbGVkQmxvY2ssICIgd2l0aCAiLCBtX21vZGUsICIpIik7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb21waWxhdGlvbktleS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxh
dGlvbktleS5oCmluZGV4IGMyMzFjMDYyYTdmODhhYjk2NGNkNjFkMWFjNTdlMTc2NjA5ZmJiOWYu
LmM3M2NhMmFhMDRkMGZmZTdkZWNlNTQ1NDAwY2MzM2ZiMTZmY2NmZTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmgKQEAgLTMwLDU2ICszMCw1NyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSlNDZWxsOworY2xhc3MgQ29kZUJsb2NrOwor
Y2xhc3MgQ29kZUJsb2NrU2V0OwogCiBjbGFzcyBKSVRDb21waWxhdGlvbktleSB7CiBwdWJsaWM6
CiAgICAgSklUQ29tcGlsYXRpb25LZXkoKQotICAgICAgICA6IG1fY29kZUJsb2NrKG51bGxwdHIp
CisgICAgICAgIDogbV9wcm9maWxlZEJsb2NrKG51bGxwdHIpCiAgICAgICAgICwgbV9tb2RlKEpJ
VENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uKQogICAgIHsKICAgICB9CiAgICAg
CiAgICAgSklUQ29tcGlsYXRpb25LZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQot
ICAgICAgICA6IG1fY29kZUJsb2NrKG51bGxwdHIpCisgICAgICAgIDogbV9wcm9maWxlZEJsb2Nr
KG51bGxwdHIpCiAgICAgICAgICwgbV9tb2RlKEpJVENvbXBpbGF0aW9uTW9kZTo6REZHKQogICAg
IHsKICAgICB9CiAgICAgCi0gICAgSklUQ29tcGlsYXRpb25LZXkoSlNDZWxsKiBwcm9maWxlZEJs
b2NrLCBKSVRDb21waWxhdGlvbk1vZGUgbW9kZSkKLSAgICAgICAgOiBtX2NvZGVCbG9jayhwcm9m
aWxlZEJsb2NrKQorICAgIEpJVENvbXBpbGF0aW9uS2V5KENvZGVCbG9jayogcHJvZmlsZWRCbG9j
aywgSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUpCisgICAgICAgIDogbV9wcm9maWxlZEJsb2NrKHBy
b2ZpbGVkQmxvY2spCiAgICAgICAgICwgbV9tb2RlKG1vZGUpCiAgICAgewogICAgIH0KICAgICAK
ICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gIW1fY29k
ZUJsb2NrICYmIG1fbW9kZSA9PSBKSVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlv
bjsKKyAgICAgICAgcmV0dXJuICFtX3Byb2ZpbGVkQmxvY2sgJiYgbV9tb2RlID09IEpJVENvbXBp
bGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uOwogICAgIH0KICAgICAKICAgICBib29sIGlz
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAhbV9j
b2RlQmxvY2sgJiYgbV9tb2RlICE9IEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0
aW9uOworICAgICAgICByZXR1cm4gIW1fcHJvZmlsZWRCbG9jayAmJiBtX21vZGUgIT0gSklUQ29t
cGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb247CiAgICAgfQogICAgIAorICAgIENvZGVC
bG9jayogcHJvZmlsZWRCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZmlsZWRCbG9jazsgfQog
ICAgIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAg
ICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEpJVENvbXBpbGF0aW9uS2V5JiBvdGhlcikg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2NvZGVCbG9jayA9PSBvdGhlci5tX2NvZGVC
bG9jaworICAgICAgICByZXR1cm4gbV9wcm9maWxlZEJsb2NrID09IG90aGVyLm1fcHJvZmlsZWRC
bG9jawogICAgICAgICAgICAgJiYgbV9tb2RlID09IG90aGVyLm1fbW9kZTsKICAgICB9CiAgICAg
CiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gV1RGOjpw
YWlySW50SGFzaChXVEY6OlB0ckhhc2g8SlNDZWxsKj46Omhhc2gobV9jb2RlQmxvY2spLCBzdGF0
aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZTxKSVRDb21waWxhdGlvbk1vZGU+Ojp0eXBlPiht
X21vZGUpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6cGFpckludEhhc2goV1RGOjpQdHJIYXNoPENv
ZGVCbG9jayo+OjpoYXNoKG1fcHJvZmlsZWRCbG9jayksIHN0YXRpY19jYXN0PHN0ZDo6dW5kZXJs
eWluZ190eXBlPEpJVENvbXBpbGF0aW9uTW9kZT46OnR5cGU+KG1fbW9kZSkpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICAv
LyBFaXRoZXIgQ29kZUJsb2NrKiBvciBVbmxpbmtlZENvZGVCbG9jayogZm9yIGJhc2xlbGluZSBK
SVQuCi0gICAgSlNDZWxsKiBtX2NvZGVCbG9jazsKKyAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRC
bG9jazsKICAgICBKSVRDb21waWxhdGlvbk1vZGUgbV9tb2RlOwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAppbmRl
eCAxZjM0YzNkMWRjZmY1MmUwNmEyODIxNTcxMTgyZjkyZmZmZThjMDIxLi5hNGJiOGY4YmRkMDc2
OGJhYzkzOWE4MjdkNTZiNmI5YjJkNGNkNTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcApAQCAtMzIsNyArMzIsNiBA
QAogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCiAjaW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCi0jaW5jbHVkZSAiSklULmgiCiAj
aW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAK
QEAgLTQ3LDkgKzQ2LDEwIEBAIHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyogZ2FyYmFnZVN0dWJJ
bmZvKCkKIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwK
ICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKLSAgICA6IG1faml0VHlwZShq
aXRUeXBlKQorICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgICwgbV9qaXRUeXBlKGpp
dFR5cGUpCiB7Ci0gICAgbV9zdHViSW5mbyA9IGNvZGVCbG9jayA/IGNvZGVCbG9jay0+YWRkU3R1
YkluZm8oYWNjZXNzVHlwZSwgY29kZU9yaWdpbikgOiBnYXJiYWdlU3R1YkluZm8oKTsKKyAgICBt
X3N0dWJJbmZvID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oYWNjZXNz
VHlwZSwgY29kZU9yaWdpbikgOiBnYXJiYWdlU3R1YkluZm8oKTsKICAgICBtX3N0dWJJbmZvLT5j
YWxsU2l0ZUluZGV4ID0gY2FsbFNpdGU7CiAKICAgICBtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJz
ID0gdXNlZFJlZ2lzdGVyczsKQEAgLTU5LDYgKzU5LDcgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdl
bmVyYXRvcjo6ZmluYWxpemUoCiAgICAgTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXIm
IHNsb3dQYXRoLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQp
CiB7CiAgICAgbV9zdHViSW5mby0+c3RhcnQgPSBzdGFydDsKKwogICAgIG1fc3R1YkluZm8tPmRv
bmVMb2NhdGlvbiA9IGZhc3RQYXRoLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4obV9kb25l
KTsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpCkBAIC02NiwxNSAr
NjcsNiBAQCB2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpmaW5hbGl6ZSgKICAgICBtX3N0
dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb24gPSBzbG93UGF0aC5sb2NhdGlvbk9mPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPihtX3Nsb3dQYXRoQmVnaW4pOwogfQogCi12b2lkIEpJVElubGluZUNh
Y2hlR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVu
c2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCi17Ci0gICAgbV9zdGFydCA9IGpp
dC5sYWJlbCgpOwotICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5
cGUpKTsKLSAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7Ci0gICAg
aml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7Ci0gICAg
bV9kb25lID0gaml0LmxhYmVsKCk7Ci19Ci0KIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5l
cmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdz
IGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCkBAIC0xMTgsNyAr
MTEwLDcgQEAgSklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcigKICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0
ZXJzLAogICAgIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVncyBi
YXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGUpCiAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwgY29k
ZU9yaWdpbiwgY2FsbFNpdGUsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVl
LCBzdHViSW5mb0dQUikKLSAgICAsIG1faXNMZW5ndGhBY2Nlc3MoY29kZUJsb2NrICYmIHByb3Bl
cnR5TmFtZS51aWQoKSA9PSBjb2RlQmxvY2stPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoLmlt
cGwoKSkKKyAgICAsIG1faXNMZW5ndGhBY2Nlc3MocHJvcGVydHlOYW1lLnVpZCgpID09IGNvZGVC
bG9jay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKGJhc2UucGF5bG9hZEdQUigpICE9IHZhbHVlLnRhZ0dQUigpKTsKIH0KQEAgLTEyOCwz
NyArMTIwLDYgQEAgdm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1h
Y3JvQXNzZW1ibGVyJiBqaXQpCiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgbV9pc0xlbmd0
aEFjY2VzcyA/IElubGluZUFjY2Vzczo6c2l6ZUZvckxlbmd0aEFjY2VzcygpIDogSW5saW5lQWNj
ZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKLQotI2lmIFVTRShKU1ZBTFVFNjQp
Ci1zdGF0aWMgdm9pZCBnZW5lcmF0ZUdldEJ5SWRJbmxpbmVBY2Nlc3MoSklUJiBqaXQsIEdQUlJl
ZyBzdHViSW5mb0dQUiwgR1BSUmVnIGJhc2UsIEdQUlJlZyBzY3JhdGNoLCBHUFJSZWcgcmVzdWx0
KQotewotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKLQotICAgIGppdC5sb2FkMzIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHNjcmF0Y2gpOwotICAgIGF1dG8gc2tpcElubGluZUFjY2VzcyA9IGppdC5icmFuY2gzMihDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1Yklu
Zm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1
cmUoKSkpOwotICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BS
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCgpKSwgc2NyYXRjaCk7
Ci0gICAgaml0LmxvYWRQcm9wZXJ0eShiYXNlLCBzY3JhdGNoLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dCB9KTsKLSAgICBhdXRvIGZpbmlzaGVkID0gaml0Lmp1bXAoKTsKLQotICAgIHNraXBJbmxpbmVB
Y2Nlc3MubGluaygmaml0KTsKLSAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0
dWJSb3V0aW5lUHRyVGFnKTsKLQotICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7Ci19Ci0KLXZvaWQg
SklUR2V0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYg
aml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQotewotICAgIFJFTEVB
U0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKLQotICAgIG1fc3RhcnQg
PSBqaXQubGFiZWwoKTsKLQotICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZv
R1BSKTsKLSAgICBnZW5lcmF0ZUdldEJ5SWRJbmxpbmVBY2Nlc3Moaml0LCBzdHViSW5mb0dQUiwg
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnNjcmF0Y2gsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKLQotICAgIG1fZG9u
ZSA9IGppdC5sYWJlbCgpOwotfQotI2VuZGlmCi0KIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRv
cjo6SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
LCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCiAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllciwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVS
ZWdzIHRoaXNSZWdzLCBHUFJSZWcgc3R1YkluZm9HUFIpCkBAIC0xNzcsMjAgKzEzOCw2IEBAIHZv
aWQgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNz
ZW1ibGVyJiBqaXQpCiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpz
aXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotdm9pZCBK
SVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKLXsKLSAg
ICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7Ci0KLSAgICBt
X3N0YXJ0ID0gaml0LmxhYmVsKCk7Ci0KLSAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBz
dHViSW5mb0dQUik7Ci0gICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNzKGppdCwgc3R1Yklu
Zm9HUFIsIEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZUdl
dEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c2NyYXRjaCwgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNS
ZWdpc3RlcnM6OnJlc3VsdCk7Ci0KLSAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKLX0KLSNlbmRp
ZgotCiBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVC
bG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMs
IENhY2hlYWJsZUlkZW50aWZpZXIsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3Mg
dmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIApAQCAtMjAyLDM2ICsx
NDksNiBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgIG1f
c3R1YkluZm8tPnVzZWRSZWdpc3RlcnMuY2xlYXIoc2NyYXRjaCk7CiB9CiAKLSNpZiBVU0UoSlNW
QUxVRTY0KQotdm9pZCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIp
Ci17Ci0gICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOwot
Ci0gICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwotCi0gICAgaml0LmxvYWRDb25zdGFudChzdHVi
SW5mbywgc3R1YkluZm9HUFIpOwotCi0gICAgR1BSUmVnIGJhc2UgPSBCYXNlbGluZVB1dEJ5SWRS
ZWdpc3RlcnM6OmJhc2U7Ci0gICAgR1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OnNjcmF0Y2g7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gQmFzZWxpbmVQdXRCeUlkUmVn
aXN0ZXJzOjpzY3JhdGNoMjsKLSAgICBHUFJSZWcgdmFsdWUgPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OnZhbHVlOwotCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOwotCi0gICAg
aml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgYXV0byBza2lwSW5saW5lQWNjZXNzID0gaml0LmJy
YW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRk
cmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNz
QmFzZVN0cnVjdHVyZSgpKSk7Ci0gICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkp
LCBzY3JhdGNoKTsKLSAgICBqaXQuc3RvcmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB7IHZhbHVlIH0s
IGJhc2UsIHNjcmF0Y2gsIHNjcmF0Y2gyKTsKLSAgICBhdXRvIGZpbmlzaGVkID0gaml0Lmp1bXAo
KTsKLQotICAgIHNraXBJbmxpbmVBY2Nlc3MubGluaygmaml0KTsKLSAgICBqaXQuZmFySnVtcChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKLQotICAgIGZpbmlzaGVkLmxp
bmsoJmppdCk7Ci0gICAgbV9kb25lID0gaml0LmxhYmVsKCk7Ci19Ci0jZW5kaWYKLQogdm9pZCBK
SVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJiBqaXQp
CiB7CiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9yUHJv
cGVydHlSZXBsYWNlKCkpOwpAQCAtMjgzLDcgKzIwMCw3IEBAIHZvaWQgSklURGVsQnlWYWxHZW5l
cmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkKICAgICBtX3N0YXJ0
ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7
CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZv
KSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5mYXJKdW1wKENDYWxs
SGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAg
IGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BS
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0
clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJs
ZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAgLTMxOSw3ICsyMzYsNyBAQCB2
b2lkIEpJVERlbEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXIm
IGppdCkKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAg
IGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZv
R1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGlu
ZVB0clRhZyk7CisgICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJ
bmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkp
LCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhK
dW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAg
LTM1Myw3ICsyNzAsNyBAQCB2b2lkIEpJVEluQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBh
dGgoTWFjcm9Bc3NlbWJsZXImIGppdCkKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHVi
SW5mb0dQUik7Ci0gICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0
dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRy
KCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVy
czo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAg
ICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUg
PSBqaXQubGFiZWwoKTsKQEAgLTM4MywzNCArMzAwLDYgQEAgdm9pZCBKSVRJbkJ5SWRHZW5lcmF0
b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkKICAgICBnZW5lcmF0ZUZh
c3RDb21tb24oaml0LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsKIH0K
IAotI2lmIFVTRShKU1ZBTFVFNjQpCi12b2lkIEpJVEluQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVn
IHN0dWJJbmZvR1BSKQotewotICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyht
X2ppdFR5cGUpKTsKLQotICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKLQotICAgIGppdC5sb2Fk
Q29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKLQotICAgIEdQUlJlZyBiYXNlID0gQmFz
ZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7Ci0gICAgR1BSUmVnIHJlc3VsdCA9IEJhc2VsaW5l
SW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgR1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGluZUlu
QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKLQotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9u
ZTsKLQotICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgIGF1dG8gc2tpcElubGluZUFjY2Vz
cyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOwotICAgIGppdC5ib3hCb29sZWFuKHRydWUsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0IH0pOwotICAgIGF1dG8gZmluaXNoZWQgPSBqaXQuanVtcCgpOwot
Ci0gICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOwotICAgIGppdC5mYXJKdW1wKENDYWxs
SGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
Q29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwotCi0gICAgZmluaXNoZWQubGluaygm
aml0KTsKLSAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKLX0KLSNlbmRpZgotCiBKSVRJbnN0YW5j
ZU9mR2VuZXJhdG9yOjpKSVRJbnN0YW5jZU9mR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZUluZGV4LAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgdmFsdWUsIEdQUlJlZyBwcm90b3R5cGUsIEdQUlJlZyBz
dHViSW5mb0dQUiwKQEAgLTQ0Myw3ICszMzIsNyBAQCB2b2lkIEpJVEluc3RhbmNlT2ZHZW5lcmF0
b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkKICAgICBtX3N0YXJ0ID0g
aml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwg
bV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGpp
dC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRh
Zyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1
bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAgLTQ3OSw3ICszNjgsNyBAQCB2b2lk
IEpJVEdldEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJiBq
aXQpCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBq
aXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQ
UiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQ
dHJUYWcpOworICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5m
by0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwg
SklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVt
cCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC01
MTYsNyArNDA1LDcgQEAgdm9pZCBKSVRQdXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0
aChNYWNyb0Fzc2VtYmxlciYgaml0KQogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJ
bmZvR1BSKTsKLSAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1
YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIo
KSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAg
ICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9
IGppdC5sYWJlbCgpOwpAQCAtNTUxLDcgKzQ0MCw3IEBAIHZvaWQgSklUUHJpdmF0ZUJyYW5kQWNj
ZXNzR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJiBqaXQpCiAgICAg
bV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRU
eXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9z
dHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuZmFySnVt
cChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwor
ICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHVi
SW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJv
dXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5w
YXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKaW5kZXggMmY2
OWY2NGVjMTYxYWU5MDQzZTRkYzg2MGMzODQ5NjQ5MTljNmFkZS4uMzVhNzdmOGU3Mzk2ZTQ2Mjdl
Y2Q2ZTA4YzUwNDBjZDE0ZmU0NTc0MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaApAQCAtMjgsNyArMjgsNiBAQAogI2lmIEVO
QUJMRShKSVQpCiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCi0jaW5jbHVkZSAiSklUT3BlcmF0
aW9uVmFsaWRhdGlvbi5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJK
U0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiUHV0S2luZC5oIgpAQCAtMzksMTIwICszOCwxMSBAQCBu
YW1lc3BhY2UgSlNDIHsKIGNsYXNzIENhY2hlYWJsZUlkZW50aWZpZXI7CiBjbGFzcyBDYWxsU2l0
ZUluZGV4OwogY2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgSklUOwogY2xhc3MgU3RydWN0dXJlU3R1
YkluZm87Ci1zdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKIAogZW51bSBjbGFzcyBB
Y2Nlc3NUeXBlIDogaW50OF90OwogZW51bSBjbGFzcyBKSVRUeXBlIDogdWludDhfdDsKIAotI2lm
IFVTRShKU1ZBTFVFNjQpCi1zdHJ1Y3QgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKLSAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Ci19OwotCi1zdHJ1Y3QgQmFz
ZWxpbmVEZWxCeUlkUmVnaXN0ZXJzIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNl
ID0gR1BSSW5mbzo6cmVnVDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0g
R1BSSW5mbzo6cmVnVDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBH
UFJJbmZvOjpyZWdUMzsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BS
SW5mbzo6cmVnVDI7Ci19OwotCi1zdHJ1Y3QgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVycyB7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKLSAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Ci19OwotCi1zdHJ1Y3Qg
QmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnMgewotICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Ci0gICAgLy8gV2UgcmVseSBvbiB0aGlzIHdoZW4g
bGlua2luZyBhIENvZGVCbG9jayBhbmQgaW5pdGlhbGl6aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRC
eVZhbCBTdHViSW5mby4KLSAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6YmFzZSk7Ci0gICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7Ci0gICAgc3RhdGljX2Fzc2VydChyZXN1bHQg
PT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKLSAgICBzdGF0aWNfYXNzZXJ0
KHN0dWJJbmZvID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvKTsKLQotICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKLSAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEdQUkluZm86OnJlZ1Q1OwotfTsKLQot
c3RydWN0IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVycyB7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgdmFsdWUgPSBHUFJJbmZvOjphcmd1bWVudEdQUjI7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvdG8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjM7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpub25BcmdHUFIwOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKLX07
Ci0KLXN0cnVjdCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnMgewotICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOwotICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKLSAgICBzdGF0aWNfYXNzZXJ0KHByb3Bl
cnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKLX07Ci0KLXN0cnVjdCBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnMgewotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJl
c3VsdCA9IEdQUkluZm86OnJlZ1QwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2Ug
PSBHUFJJbmZvOjpyZWdUMDsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9
IEdQUkluZm86OnJlZ1QxOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBH
UFJJbmZvOjpyZWdUMjsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBkb250Q2xvYmJlclJl
Z2lzdGVyID0gR1BSSW5mbzo6cmVnVDM7Ci19OwotCi1zdHJ1Y3QgQmFzZWxpbmVHZXRCeUlkV2l0
aFRoaXNSZWdpc3RlcnMgewotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQ
UkluZm86OnJlZ1QwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZv
OjpyZWdUMDsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB0aGlzVmFsdWUgPSBHUFJJbmZv
OjpyZWdUMTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86
OnJlZ1QyOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpy
ZWdUMzsKLX07Ci0KLXN0cnVjdCBCYXNlbGluZUluQnlJZFJlZ2lzdGVycyB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1
bHQ7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaCA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKLX07Ci0K
LXN0cnVjdCBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnMgewotICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QxOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaCA9IEdQUkluZm86OnJlZ1QyOwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2gyID0gR1BSSW5mbzo6cmVnVDQ7Ci19OwotCi1zdHJ1Y3QgQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVycyB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1Qw
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMjsKLSAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9maWxlID0gR1BSSW5mbzo6cmVnVDM7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUNDsKLX07Ci0K
LXN0cnVjdCBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVycyB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGJyYW5kID0gR1BSSW5mbzo6cmVnVDE7Ci0gICAgc3RhdGljX2Fzc2VydChiYXNlID09
IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOwotICAgIHN0YXRpY19hc3NlcnQoYnJh
bmQgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Ci19OwotI2VuZGlmCi0K
IGNsYXNzIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKIHByb3RlY3RlZDoKICAgICBKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvcigpIHsgfQpAQCAtMTcyLDE4ICs2MiwxMiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBmaW5hbGl6ZSgKICAgICAgICAgTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBM
aW5rQnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIsCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydCk7Ci0KLSAgICB2b2lkIGdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcg
c3R1YkluZm9HUFIpOwotCi0gICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogbV91bmxpbmtl
ZFN0dWJJbmZvIHsgbnVsbHB0ciB9OwotICAgIHVuc2lnbmVkIG1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKLQor
ICAgIAogcHJvdGVjdGVkOgorICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgSklUVHlw
ZSBtX2ppdFR5cGU7CiAgICAgU3RydWN0dXJlU3R1YkluZm8qIG1fc3R1YkluZm87CiAKLXB1Ymxp
YzoKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgbV9kb25lOwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3Nsb3dQYXRoQmVn
aW47CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9zbG93UGF0aENhbGw7CkBAIC0yMTQsNyAr
OTgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVS
ZWdzIG1fdmFsdWU7CiAKLXB1YmxpYzoKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFy
dDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTIy
Nyw3ICsxMTEsNiBAQCBwdWJsaWM6CiAgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVS
ZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGUpOwogICAgIAogICAgIHZv
aWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwotICAgIHZvaWQgZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQ
UlJlZyBzdHViSW5mb0dQUik7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzTGVuZ3RoQWNjZXNz
OwpAQCAtMjQxLDcgKzEyNCw2IEBAIHB1YmxpYzoKICAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlw
ZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdp
c3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCiAgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBK
U1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHN0dWJJbmZvR1BS
KTsKIAotICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2ln
bmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAgICAgdm9pZCBnZW5l
cmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiB9OwogCkBAIC0yNTAsMTEgKzEzMiwxMCBA
QCBwdWJsaWM6CiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigpID0gZGVmYXVsdDsKIAogICAgIEpJ
VFB1dEJ5SWRHZW5lcmF0b3IoCi0gICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmln
aW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNo
ZWFibGVJZGVudGlmaWVyLAotICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2
YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtp
bmQpOworICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUlu
ZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmll
ciwgSlNWYWx1ZVJlZ3MgYmFzZSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBz
dHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIEVDTUFNb2RlLCBQdXRLaW5kKTsKICAgICAKICAg
ICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKLSAgICB2b2lkIGdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50
LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogICAgIAogICAgIFZfSklUT3BlcmF0aW9uX0dTc2lKSkMg
c2xvd1BhdGhGdW5jdGlvbigpOwogCkBAIC0yODIsOSArMTYzLDExIEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCitwcml2YXRlOgogICAg
IEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwogCisgICAgTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJs
ZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMDgsNiArMTkxLDggQEAgcHVibGljOgog
CiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKK3ByaXZhdGU6
CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMzEsNiArMjE2LDggQEAg
cHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAK
K3ByaXZhdGU6CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9B
c3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zNTQsNiAr
MjQxLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1i
bGVyJik7CiAKK3ByaXZhdGU6CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBA
IC0zNjYsNyArMjU1LDYgQEAgcHVibGljOgogICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1Zh
bHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKIAogICAgIHZvaWQgZ2VuZXJhdGVG
YXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwotICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5m
b0dQUik7CiB9OwogCiBjbGFzcyBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGZpbmFsIDogcHVibGlj
IEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKQEAgLTM4OSw2ICsyNzcsOCBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1
ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyKTsKIAorcHJpdmF0ZToKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Ns
b3dQYXRoSnVtcDsKIH07CiAKQEAgLTQxMiw5ICszMDIsMTEgQEAgcHVibGljOgogICAgIAogICAg
IHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCitwcml2YXRlOgogICAg
IEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3Jlc3VsdDsKIAorICAgIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFi
bGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtNDM4LDYgKzMzMCw4IEBAIHB1YmxpYzoK
ICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAorcHJp
dmF0ZToKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVzLmgKaW5kZXggMWYzY2EzMTgzYTgzMjAzZDU0ODY5ODZkYmEzZmJj
NDUyNTk0NWQxYi4uYWMwOWY4ZmNmNzViMzViYWMyZWRiYTY3MDdkZjI1ODc2N2I2ZTY0NiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKQEAgLTM1LDM4ICszNSwxMyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3Rh
bnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICBpZiAoIXNyYy5pc0NvbnN0YW50
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+
Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKLX0KLQotQUxXQVlTX0lO
TElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykK
LXsKLSAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
aXNJbnQzMigpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc0tub3duQ2VsbChWaXJ0
dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlu
a1RpbWVDb25zdGFudCkgewotICAgICAgICAvLyBBbGwgbGluayB0aW1lIGNvbnN0YW50cyBhcmUg
Y2VsbHMuCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7CisgICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYg
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKIH0KIAogQUxXQVlTX0lOTElORSBK
U1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAg
ICAgQVNTRVJUKHNyYy5pc0NvbnN0YW50KCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgIT0gU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KTsKLSAgICByZXR1cm4gbV91
bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAgICByZXR1cm4gbV9jb2RlQmxv
Y2stPmdldENvbnN0YW50KHNyYyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQ
dXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBl
bnRyeSkKQEAgLTE4MSwzNiArMTU2LDM2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KEFkZHJlc3MgZnVuCiAjZW5k
aWYKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+Ci1BTFdBWVNfSU5MSU5FIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdp
dGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
cmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpT
VmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJl
dHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1
cm5WYWx1ZUdQUik7CiAjZW5kaWYKICAgICByZXR1cm4gY2FsbDsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgQnl0ZWNvZGU+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBi
eXRlY29kZSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRl
PHR5cGVuYW1lIE1ldGFkYXRhPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0
YWRhdGEsIEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVl
R1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFk
YXRhLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAg
ZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYK
IH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykK
IHsKLSAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpCisgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNL
bm93bkNlbGwocmVnKSkKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogfQogCkBAIC0yMzAs
NyArMjA1LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3IKIGlubGluZSB2b2lkIEpJVDo6YWR2
YW5jZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRl
Y29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3Qv
Y29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwot
ICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJ
bmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKICAgICBtX2J5dGVj
b2RlSW5kZXggPSBCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbV9ieXRl
Y29kZUluZGV4LmNoZWNrcG9pbnQoKSArIDEpOwogCiAgICAgYXV0byByZXN1bHQgPSBtX2NoZWNr
cG9pbnRMYWJlbHMuYWRkKG1fYnl0ZWNvZGVJbmRleCwgbGFiZWwoKSk7CkBAIC0yNDAsNyArMjE1
LDcgQEAgaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wIGp1bXApCiB7CiAg
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91
bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhh
dCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7Cisg
ICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhh
c0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7
CiAKICAgICBhdXRvIGl0ZXIgPSBtX2NoZWNrcG9pbnRMYWJlbHMuZmluZChtX2J5dGVjb2RlSW5k
ZXgpOwpAQCAtMzE4LDI5ICsyOTMsMjkgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdENv
dW50KEFic3RyYWN0U2FtcGxpbmdDb3VudGVyJiBjb3VudGVyLCBpbnQzMl90IGNvdW4KIAogQUxX
QVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCiB7Ci0gICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0
YW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXND
ZWxsKCkpLT5sZW5ndGgoKSA9PSAxOworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCi0jaWYgVVNFKEpTVkFM
VUUzMl82NCkKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVBy
b2ZpbGUmIHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAgQVNTRVJUKHNo
b3VsZEVtaXRQcm9maWxpbmcoKSk7CiAKKyAgICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1
cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0CisgICAg
Ly8gc3RvcmUuCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2
YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKyNlbHNlCiAgICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciogZGVzY3JpcHRvciA9IGJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4odmFs
dWVQcm9maWxlLm1fYnVja2V0cyk7CiAgICAgc3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksICZk
ZXNjcmlwdG9yLT5hc0JpdHMucGF5bG9hZCk7CiAgICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwg
JmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOwotfQogI2VuZGlmCit9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9w
OjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlZ1QwKTsKICNlbHNlCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwog
I2VuZGlmCkBAIC0zNDgsMzcgKzMyMyw0MSBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6
OmlzX3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1ZVBybwogCiBp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4u
LikgeyB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+
Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUm
IGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRh
PgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRh
ZGF0YSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5n
KCkpCiAgICAgICAgIHJldHVybjsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJv
ZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSksIHZhbHVlKTsK
K30KIAotICAgIHB0cmRpZmZfdCBvZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0
YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyB2YWx1ZVByb2ZpbGVPZmZzZXRG
b3I8Qnl0ZWNvZGU+KG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpICsgVmFsdWVQcm9maWxl
OjpvZmZzZXRPZkZpcnN0QnVja2V0KCk7Ci0gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgQWRkcmVz
cyhzX21ldGFkYXRhR1BSLCBvZmZzZXQpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQoraW5saW5lIHZv
aWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxl
LCBHUFJSZWcgcmVzdWx0UmVnKQoreworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQ
cm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
Qnl0ZWNvZGU+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3Qg
Qnl0ZWNvZGUmIGJ5dGVjb2RlLCBHUFJSZWcgcmVzdWx0UmVnKQordGVtcGxhdGU8dHlwZW5hbWUg
TWV0YWRhdGE+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRh
dGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVzdWx0UmVnKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwogfQogI2VuZGlm
CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRyZGlm
Zl90IG9mZnNldE9mQXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQg
c2NyYXRjaEdQUikKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIFJlZ2lz
dGVySUQgc2NyYXRjaEdQUikKIHsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAg
ICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3RvcmUzMlRvTWV0YWRh
dGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9maWxlKTsKKyAgICAgICAg
c3RvcmUzMihzY3JhdGNoR1BSLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0
dXJlSUQoKSk7CiAgICAgfQogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Ci1pbmxp
bmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29k
ZSYgYnl0ZWNvZGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQor
aW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJ
RCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNo
R1BSKQogewotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgQnl0
ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpv
ZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSwgY2VsbEdQUiwgc2NyYXRjaEdQUik7CisgICAg
aWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgeworICAgICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRj
aEdQUik7CisgICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhcnJheVByb2ZpbGVH
UFIsIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpKTsKKyAgICB9
CiB9CiAKIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChW
aXJ0dWFsUmVnaXN0ZXIgc3JjKQpAQCAtNDAxLDcgKzM4MCw3IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKIGlubGluZSB2b2lk
IEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZh
bHVlKQogewogICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFu
dFJlZ2lzdGVyKHJlZyk7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFu
dFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2Fk
RG91YmxlKFRydXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxz
ZQogICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwpAQCAtNTE3LDcg
KzQ5Niw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciByZWcs
IGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVyCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYg
KCFpc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwo
cmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUyNyw3ICs1MDYsNyBAQCBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFs
UmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKLSAgICBpZiAoIWlzS25vd25DZWxsKHJl
ZykpIHsKKyAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAg
IGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsK
ICAgICAgICAgZWxzZQpAQCAtNTM1LDYgKzUxNCwxMSBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRh
ZwogICAgIH0KIH0KIAorQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJ
bnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAm
JiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Cit9CisKIEFMV0FZU19JTkxJTkUg
Ym9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCBWaXJ0dWFsUmVnaXN0ZXImIG9wLCBpbnQzMl90JiBjb25zdGFudCkK
IHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewpAQCAtNTYwLDExICs1NDQs
MTEgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGQKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4
KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBw
YXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAogICAgIGlm
IChzcmMuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIGlmIChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5p
c0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKHNyYykpIHsKLSAgICAgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOworICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAg
ICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOworICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBtb3ZlKEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIGRzdCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTU4Miw2ICs1NjYsMTEgQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFJlZ2lz
dGVySUQKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGRzdDIpOwogfQogCitBTFdB
WVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIg
c3JjKQoreworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzSW50MzIoKTsKK30KKwogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20pCiB7CiAg
ICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwpAQCAtNjA2LDcgKzU5NSw3IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZkpTQ2VsbChSZWdpc3RlcklE
IHJlZykKIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKFJlZ2lzdGVySUQgcmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykKIHsKLSAgICBpZiAoIWlz
S25vd25DZWxsKHZSZWcpKQorICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHZSZWcp
KQogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsKIH0KIApAQCAtNjQ4
LDcgKzYzNywzMCBAQCBBTFdBWVNfSU5MSU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBpbnQgdGFyZ2V0KQogewogICAgIGlmICh0YXJnZXQpCiAg
ICAgICAgIHJldHVybiB0YXJnZXQ7Ci0gICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPm91
dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOworICAgIHJldHVybiBtX2NvZGVCbG9jay0+
b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7Cit9CisKK0FMV0FZU19JTkxJTkUgR2V0
UHV0SW5mbyBKSVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5dGVjb2RlKQorewor
ICAgIHVuc2lnbmVkIGtleSA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7IC8vIEhhc2hNYXAg
ZG9lc24ndCBsaWtlIDAgYXMgYSBrZXkKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRHZXRQ
dXRJbmZvcy5maW5kKGtleSk7CisgICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkR2V0UHV0SW5m
b3MuZW5kKCkpCisgICAgICAgIHJldHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9yLT52YWx1ZSk7Cisg
ICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fZ2V0UHV0SW5mbzsKKyAgICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChrZXksIGdldFB1dElu
Zm8ub3BlcmFuZCgpKTsKKyAgICByZXR1cm4gZ2V0UHV0SW5mbzsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgQmluYXJ5T3A+CitBTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJvZmlsZSBKSVQ6OmNv
cGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKK3sKKyAgICB1aW50NjRfdCBrZXkg
PSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkgKyAxKSA8PCAzMiB8
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQpOworICAgIGF1dG8g
aXRlcmF0b3IgPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOworICAgIGlmIChpdGVy
YXRvciAhPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBpdGVy
YXRvci0+dmFsdWU7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJvZmlsZSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICBtX2NvcGllZEFy
aXRoUHJvZmlsZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKKyAgICByZXR1cm4gYXJpdGhQcm9m
aWxlOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY2OSw2MCArNjgxLDYgQEAgQUxX
QVlTX0lOTElORSBFQ01BTW9kZSBKSVQ6OmVjbWFNb2RlPE9wUHV0UHJpdmF0ZU5hbWU+KE9wUHV0
UHJpdmF0ZU5hbWUpCiAgICAgcmV0dXJuIEVDTUFNb2RlOjpzdHJpY3QoKTsKIH0KIAotdGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZFB0ckZy
b21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJl
ZyByZXN1bHQpCi17Ci0gICAgbG9hZFB0cihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5r
ZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSAr
IG9mZnNldCksIHJlc3VsdCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYg
Ynl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCi17Ci0gICAgbG9hZDMyKEFk
ZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZz
ZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDhG
cm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJS
ZWcgcmVzdWx0KQotewotICAgIGxvYWQ4KEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtl
ZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsg
b2Zmc2V0KSwgcmVzdWx0KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlw
ZW5hbWUgQnl0ZWNvZGU+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZThUb01ldGFkYXRh
KFZhbHVlVHlwZSB2YWx1ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0
KQotewotICAgIHN0b3JlOCh2YWx1ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2Vk
Q29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBv
ZmZzZXQpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgotQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6c3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVnIHZhbHVlLCBjb25zdCBCeXRlY29k
ZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCi17Ci0gICAgc3RvcmUzMih2YWx1ZSwgQWRkcmVz
cyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldElu
TWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVu
YW1lIEJ5dGVjb2RlPgotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bWF0ZXJpYWxpemVQb2ludGVy
SW50b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BS
UmVnIHJlc3VsdCkKLXsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxv
Y2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCks
IHNfbWV0YWRhdGFHUFIsIHJlc3VsdCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Omxv
YWRDb25zdGFudChKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJl
ZyByZXN1bHQpCi17Ci0gICAgbG9hZFB0cihBZGRyZXNzKHNfY29uc3RhbnRzR1BSLCBzdGF0aWNf
Y2FzdDx1aW50cHRyX3Q+KGNvbnN0YW50SW5kZXgpICogOCksIHJlc3VsdCk7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKLXsKLSAg
ICBsb2FkQ29uc3RhbnQobV9nbG9iYWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKLX0KLQotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3Rl
ciBjb25zdGFudCwgR1BSUmVnIHJlc3VsdCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFu
dC5pc0NvbnN0YW50KCkpOwotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZXN1bHQpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIENvZGVCbG9j
azo6b2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JCdWZmZXIoKSksIHJlc3VsdCk7Ci0gICAgbG9hZFB0
cihBZGRyZXNzKHJlc3VsdCwgY29uc3RhbnQudG9Db25zdGFudEluZGV4KCkgKiBzaXplb2Yodm9p
ZCopKSwgcmVzdWx0KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFC
TEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXggYjZj
YmY5NDM4MjMxNmNjNmM1ZTZkNzc0YzQzNzI4NzhkMjlkNTViZi4uNzA4MmNiMjAyODhmYjc4ZjE1
ZmY1YWY2MzIxNDE4N2QwMDI0ZGRlMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCkBAIC01NCwxNCArNTQsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fc3JjOwogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAg
ICAgaWYgKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2Rl
QmxvY2soc3JjKSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fdW5saW5rZWRDb2Rl
QmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQor
ICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSks
IGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIHN0b3JlNjQoSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCByZWdUMCk7Ci0g
ICAgICAgICAgICBzdG9yZTY0KHJlZ1QwLCBhZGRyZXNzRm9yKGRzdCkpOwotICAgICAgICB9Ci0K
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTAsMzUgKzg3LDM3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2ptcChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBK
SVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
T2JqZWN0PigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKKyAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBK
U0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkp
OworICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3Vy
cmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9y
TW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSBy
ZWdUMDsKICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwogICAgIFJlZ2lzdGVy
SUQgc2NyYXRjaFJlZyA9IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVn
VDM7Ci0KLSAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6TWV0
YWRhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpLCBhbGxvY2F0b3JSZWcpOwotICAgIGxvYWRQ
dHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNl
dE9mU3RydWN0dXJlKCksIHN0cnVjdHVyZVJlZyk7Ci0KLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7
Ci0gICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwotICAgIGVtaXRB
bGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxv
Y2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMp
OwotICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFj
aXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKLSAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3Jh
Z2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKLSAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogCi0gICAgYWRkU2xvd0Nh
c2Uoc2xvd0Nhc2VzKTsKKyAgICBpZiAoIWFsbG9jYXRvcikKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAg
ICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAgICAgIGVtaXRB
bGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0
b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBz
Y3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3Jh
Z2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOworICAgICAgICBtdXRh
dG9yRmVuY2UoKm1fdm0pOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVn
ID0gcmVnVDM7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5ld09iamVjdD4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0o
KSwgc3RydWN0dXJlUmVnKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1f
b2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CisgICAgY2FsbE9wZXJhdGlvbk5v
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlKTsKICAg
ICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCkBAIC0xMzIsOCArMTMx
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogCiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBr
bm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDEpOwotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihO
b3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9i
amVjdCwgbV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpKTsKKyAgICBK
dW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hh
c0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjb25zdHJ1Y3RvciwgcmVnVDApOwogCkBAIC0xNTYsMzggKzE1NCwzMCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnByb3RvOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm87Ci0KLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm90bywgcHJvdG9HUFIpOworICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFs
LCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCisgICAgLy8g
V2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMg
Zmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvdG8sIHJlZ1QxKTsKICAgICAKICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxs
cy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5
X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHZhbHVlR1BSLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHBy
b3RvR1BSLCBwcm90byk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2
YWx1ZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CiAK
ICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbnVsbHB0ciwgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLAogICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIHJlc3VsdEdQUiwKLSAgICAgICAgdmFsdWVHUFIsCi0gICAgICAgIHByb3Rv
R1BSLAotICAgICAgICBzdHViSW5mb0dQUiwKLSAgICAgICAgQmFzZWxpbmVJbnN0YW5jZW9mUmVn
aXN0ZXJzOjpzY3JhdGNoMSwgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMik7
Ci0KLSAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7Ci0gICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJ
bnN0YW5jZU9mOwotICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OwotICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHVi
SW5mbyk7Ci0gICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5m
b0luZGV4OwotICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKLQotICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKLSAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICByZWdUMCwgLy8gcmVzdWx0
CisgICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQorICAgICAgICByZWdUMSwgLy8gcHJvdG8KKyAgICAg
ICAgcmVnVDUsCisgICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKKyAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQorICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OworICAgIGVsc2UKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luc3RhbmNlT2ZzLmFw
cGVuZChnZW4pOwotCisgICAgCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQog
CkBAIC0yMDIsMTMgKzE5MiwxNCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIAogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgc3RhdGljX2Fzc2VydChCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvID09IGFyZ3VtZW50R1BSMSk7Ci0gICAg
c3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlID09IGFyZ3Vt
ZW50R1BSMik7Ci0gICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6
OnByb3RvID09IGFyZ3VtZW50R1BSMyk7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOwotICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgYXJndW1lbnRHUFIxKTsKLSAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbklu
c3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwotICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKKyAgICBDYWxsIGNhbGw7CisgICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKKyAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRp
bWl6ZTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9u
SW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAs
IHJlZ1QyLCByZWdUMSk7CisgICAgfSBlbHNlCisgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1Qx
KTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiop
CkBAIC0yNDksNyArMjQwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5l
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
cmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CisgICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZWdUMSk7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7
CiAKQEAgLTM5Miw5ICszODMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3JldF9o
YW5kbGVyR2VuZXJhdG9yKFZNJikKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgQ0NhbGxIZWxw
ZXJzIGppdDsKKyAgICBKSVQgaml0KHZtKTsKIAogICAgIGppdC5jaGVja1N0YWNrUG9pbnRlckFs
aWdubWVudCgpOwogICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0
T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CkBAIC00MjAs
NiArNDExLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICBpZiAoZHN0ICE9IHNyYykKICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Rv
X3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NDQyLDEwICs0MzQsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3NldF9m
dW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5h
bWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBh
cmd1bWVudEdQUjEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1l
LCBhcmd1bWVudEdQUjIpOwotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1
bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ3NCwxMCArNDY1LDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEg
PSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9v
bCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGxvYWRHbG9i
YWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZt
KCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiks
IHRhcmdldCk7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2
YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJn
ZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJ
c0ZhbHNleUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1w
KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC00OTEsNyArNDgwLDcg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnZhbHVlSXNGYWxz
ZXlHZW5lcmF0b3IoVk0mIHZtKQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRo
ZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0
byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KLSAgICBDQ2FsbEhlbHBlcnMgaml0OworICAgIEpJVCBqaXQodm0p
OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTUzMCw3ICs1MTksNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsK
ICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFs
LCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDAp
LCB0YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBq
dW1wKCk7CiAKQEAgLTU1NCw3ICs1NDMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAvLyBGaXJzdCwgaGFu
ZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRo
ZSBzdHJ1Y3R1cmUuCiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVn
VDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAg
ICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIHdhc05vdElt
bWVkaWF0ZSA9IGp1bXAoKTsKIApAQCAtNTkzLDEzICs1ODIsMTUgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEpuZXFQdHI+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFs
dWU7CisgICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRl
Y29kZS5tX3NwZWNpYWxQb2ludGVyKTsKKyAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxs
KCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgcmVnVDApOwotICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChieXRlY29kZS5tX3Nw
ZWNpYWxQb2ludGVyLCByZWdUMSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJh
bmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpOwotICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3Rl
ZEltbTMyKDEpLCBieXRlY29kZSwgT3BKbmVxUHRyOjpNZXRhZGF0YTo6b2Zmc2V0T2ZIYXNKdW1w
ZWQoKSk7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgIHN0b3Jl
OChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CiAgICAgYWRkSnVtcChq
dW1wKCksIHRhcmdldCk7CiAgICAgZXF1YWwubGluayh0aGlzKTsKIH0KQEAgLTYzNCwxMCArNjI1
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIg
PSByZWdUMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwog
ICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRy
dWU7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOwotICAgIGFkZEp1bXAo
YnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRj
aDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
Z2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKKyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZt
KCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCku
Z2V0Q1RJU3R1Yih2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsK
QEAgLTY1MSw3ICs2NDAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJVDo6dmFsdWVJc1RydXRoeUdlbmVyYXRvcihWTSYgdm0pCiAgICAgLy8gaXQgbWFrZXMgYXNz
dW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJv
bSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5j
dGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0
Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIENDYWxsSGVscGVycyBqaXQ7
CisgICAgSklUIGppdCh2bSk7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7
CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAtNzA2LDggKzY5NSw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvcHlDYWxsZWVT
YXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7Ci0gICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uVGhyb3csIHJlZ1QxLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7
CiAjZWxzZQogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVu
dEdQUjI7CkBAIC03MjMsNyArNzExLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90aHJv
d19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBDQ2FsbEhlbHBlcnMgaml0OworICAg
IEpJVCBqaXQodm0pOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9
IGFyZ3VtZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93blZhbHVlR1BSID0gYXJn
dW1lbnRHUFIxOwpAQCAtNzMyLDcgKzcyMCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIAogI2lm
IE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgIGppdC5sb2FkUHRyKCZ2
bS50b3BFbnRyeUZyYW1lLCBhcmd1bWVudEdQUjApOwotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihhcmd1bWVudEdQUjApOworICAgIGppdC5jb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoYXJndW1lbnRHUFIw
KTsKICNlbmRpZgogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1
bWVudEdQUjA7CkBAIC05MjAsOCArOTA4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDIsIHJlZ1QwLCBy
ZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogfQogCkBAIC05MzEsOCArOTE4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJp
Y3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Mik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCBy
ZWdUMCwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtOTQ1LDcgKzkzMSw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIAog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKICAgICBpZiAoc3Jj
VlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcp
OwogfQpAQCAtOTY1LDcgKzk1MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdE51bWJlcihyZWdUMCkpOwogICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKICAgICBp
ZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dFZSZWcpOwogfQpAQCAtOTkyLDcgKzk3OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2Jq
ZWN0KHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdU
MCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtMTAwNywxOCArOTkzLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0
KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxs
cHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKIAot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRD
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7Ci0KLSAgICAvLyBXaGVuIHRoZSBMTEludCB0aHJvd3MgYW4gZXhjZXB0
aW9uLCB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlJ3ZlIGFscmVhZHkgdGllcmVkIHVwCi0gICAg
Ly8gdGhlIHNhbWUgQ29kZUJsb2NrIHRvIGJhc2VsaW5lLCBhbmQgd2UnbGwgY2F0Y2ggdGhlIGV4
Y2VwdGlvbiBpbiB0aGUgYmFzZWxpbmUgSklUIChiZWNhdXNlCi0gICAgLy8gd2UgdXBkYXRlZCB0
aGUgZXhjZXB0aW9uIGhhbmRsZXJzIHRvIHBvaW50IGhlcmUpLiBCZWNhdXNlIHRoZSBMTEludCB1
c2VzIGEgZGlmZmVyZW50IHZhbHVlCi0gICAgLy8gaW5zaWRlIHNfY29uc3RhbnRzR1BSLCB0aGUg
Y2FsbGVlIHNhdmVzIHdlIHJlc3RvcmUgYWJvdmUgbWF5IG5vdCBjb250YWluIHRoZSBjb3JyZWN0
IHJlZ2lzdGVyLgotICAgIC8vIFNvIHdlIHJlcGxlbmlzaCBpdCBoZXJlLgotICAgIHsKLSAgICAg
ICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsK
LSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0
YSgpKSwgcmVnVDApOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6
SklURGF0YTo6b2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSksIHNfY29uc3RhbnRzR1BSKTsKLSAg
ICB9CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJs
b2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsICZ2bSgpKTsKICAgICBKdW1w
IGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVl
R1BSKTsKQEAgLTEwMzYsMTEgKzEwMTEsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAvLyBhcmd1bWVudCB0eXBl
IHByb29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwgZXRjCiAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCi0gICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQ
cm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKKyAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBWYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOworICAg
IGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKKyAgICAgICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwg
bV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJv
ZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgYXV0byBza2lwT1NS
RW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9u
SGFuZGxlclB0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7CisgICAgaWYgKGJ1
ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKKyAgICAgICAgYnVmZmVyLT5mb3JFYWNo
KFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgICAg
ICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOworICAgICAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9maWxlKSwgcmVncyk7
CisgICAgICAgIH0pOworICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIApAQCAt
MTA2Niw4ICsxMDUzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGlu
ZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZv
ciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAg
Y29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2Vk
Q29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1w
bGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhd
OworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9j
b2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBs
ZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4
LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRl
KSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAg
LTEwOTQsMTQgKzEwODEsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2Ny
dXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJs
ZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50Lgot
ICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxp
bmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAg
U2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUlu
ZGV4XTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9
IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBT
aW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJ
bmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJh
Y3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7Ci0g
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWlu
KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAg
LTExMTMsMjIgKzEwOTksMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBz
Y3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRh
YmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQu
Ci0gICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3Vu
bGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzW3RhYmxlSW5kZXhdOworICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1
bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVC
bG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIG1fc3dpdGNoZXMu
YXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRP
ZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJ
VGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0
aW5lZSwgYXJndW1lbnRHUFIxKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5
cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4KTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKICAgICBmYXJKdW1w
KHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKLSAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOwotICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygp
KSwgcmVnVDApOworICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJl
c3MoKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwg
c3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVn
Z2VyUmVxdWVzdHMubGluayh0aGlzKTsKQEAgLTExNDksNyArMTEzMyw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAog
ICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCBy
ZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE2
NCw2ICsxMTQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTExODEsNyArMTE2Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBy
ZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwog
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1Qw
KTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTEyMDMsMTQgKzExODgs
MTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKQogICAgIC8v
IEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25z
dGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVu
bmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVh
c2luZyBHQyBwcmVzc3VyZS4KLSAgICBzaXplX3QgY291bnQgPSBtX3VubGlua2VkQ29kZUJsb2Nr
LT5udW1WYXJzKCk7CisgICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZm9yIChzaXplX3QgaiA9IENvZGVC
bG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBq
IDwgY291bnQ7ICsraikKICAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChqKSk7CiAKLSAgICAKLSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDApOworICAg
IGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwogCiAgICAgZW1pdEVudGVyT3B0aW1pemF0
aW9uQ2hlY2soKTsKICNlbHNlCkBAIC0xMjI5LDcgKzEyMTIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZW50ZXJfaGFu
ZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgQ0NhbGxIZWxwZXJzIGppdDsKKyAgICBKSVQg
aml0KHZtKTsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjpl
YnApOwpAQCAtMTMyNywxOSArMTMxMCwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29w
X3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBTdHJ1
Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJ
RDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7
CiAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCiAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2Fk
MzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wVG9UaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNo
ZWRTdHJ1Y3R1cmVJRCgpLCByZWdUMik7CisgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBy
ZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVU
aGlzPigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKKyAg
ICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1f
Y2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVn
aXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0g
cmVnVDA7CkBAIC0xMzU1LDcgKzEzNDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhp
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGxvYWRQdHIoQWRk
cmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZz
ZXRPZkFsbG9jYXRvcigpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBhbGxvY2F0b3JSZWcp
OwogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zm
c2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVX
aXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFU
YWcpLCBzdHJ1Y3R1cmVSZWcpOwogCi0gICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BDcmVhdGVUaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRDYWxsZWUoKSwgY2FjaGVkRnVu
Y3Rpb25SZWcpOworICAgIGxvYWRQdHIoY2FjaGVkRnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVn
KTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBicmFuY2hQdHIoRXF1YWwsIGNh
Y2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVl
T2JqZWN0cygpKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBjYWxsZWVS
ZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7CiAgICAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcy5saW5r
KHRoaXMpOwpAQCAtMTM4NSw4ICsxMzcyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUUKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFu
KHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0K
QEAgLTEzOTYsOCArMTM4Miw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmVxPigpOwotICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0z
MigweDEpLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xNDA5LDggKzEzOTQsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZQogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwg
cmVnVDAsIHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwog
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQ
UiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MjAsOCArMTQwNCw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpu
ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJl
Z1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
CiB9CiAKQEAgLTE0MzUsMTEgKzE0MTgsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3Rh
bmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFYKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0
YW5jZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBH
UFJJbmZvOjphcmd1bWVudEdQUjIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5z
dGFuY2VWYWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0
KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0
YW5jZU9mQ3VzdG9tLCBHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BS
MSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlciho
YXNJbnN0YW5jZVZhbHVlLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0
YW5jZU9mQ3VzdG9tLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpT
VmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTE0NDgsNyArMTQzMCw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVy
bkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV91bmxpbmtlZENvZGVCbG9j
ay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICBp
ZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enpp
bmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlS
ZXR1cm4oKSkpIHsKICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhl
Y3V0aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWRQdHIocHRyLCByZWdUMCk7
CiAgICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoUHRyKEJlbG93LCByZWdUMCwg
VHJ1c3RlZEltbVB0cihPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQo
KSkpOwpAQCAtMTQ1OCw3ICsxNDQwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKICNlbHNlCiAgICAgICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CiAjZW5kaWYKLSAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZXN1bHRSZWdzLmdwcigp
KTsKKyAgICAgICAgbW92ZVZhbHVlKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVzdWx0
UmVncyk7CiAgICAgICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgICAgIGVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsK
QEAgLTE0NzEsOSArMTQ1Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiAKICAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0
aW9uIGNoZWNrOiAKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewotICAgICAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOwogICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hBZGQzMihQb3NpdGl2ZU9yWmVybywgVHJ1c3RlZEltbTMyKE9wdGlv
bnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkpLAotICAgICAgICAgICAgQWRk
cmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7Cisg
ICAgICAgICAgICBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1
dGVDb3VudGVyKCkpKSk7CiAgICAgfQogfQogCkBAIC0xNTI4LDggKzE1MDksNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIGFyZ3VtZW50R1BSMCk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICB1aW50MzJfdCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1NDIsNyArMTUyMiw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfY2hlY2tfdHJhcHNf
aGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgQ0NhbGxIZWxwZXJzIGppdDsKKyAgICBK
SVQgaml0KHZtKTsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJz
OjplYnApOwpAQCAtMTU4NCwzNiArMTU2NCwzNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVn
ZXhwKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdl
eHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBHUFJSZWcgZ2xvYmFsR1BSID0gYXJndW1lbnRH
UFIwOwotICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxpbmtl
ZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwog
ICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgSnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKICNlbHNlCi0g
ICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CisgICAg
ZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKICNlbmRpZgotICAgIGF1
dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpG
dW5jdGlvbkRlY2wsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90Pihi
eXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKLSAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFy
Z3VtZW50R1BSMik7CisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29kZUJs
b2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogCiAgICAgT3Bjb2Rl
SUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19m
dW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2
bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CiAgICAg
ZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CiAgICAg
ZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5j
RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CiAgICAgZWxzZSB7CiAgICAg
ICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRz
dCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdU
MCwgZnVuY0V4ZWMpOwogICAgIH0KIH0KIApAQCAtMTY0MywyNCArMTYyMSwyMyBAQCB2b2lkIEpJ
VDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBhcmd1
bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwg
cmVnVDApOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDAp
OwogI2VuZGlmCiAKLSAgICBhdXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENv
bnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25FeHByLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7Ci0gICAgbG9hZENv
bnN0YW50KGNvbnN0YW50LCBhcmd1bWVudEdQUjIpOworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25E
ZWNsKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChv
cGNvZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJh
dG9yX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRv
ckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZt
KCksIHJlZ1QwLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Fz
eW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdU
MCwgZnVuY3Rpb24pOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3Bf
bmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5j
R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CiAgICAgfQog
fQogCkBAIC0xNjg3LDMwICsxNjY0LDI5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hc3luY19n
ZW5lcmF0b3JfZnVuY19leHAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjCiB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
d0FycmF5PigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNp
emUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFy
dC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJndW1l
bnRHUFIyKTsKLSAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
TmV3QXJyYXk6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJn
dW1lbnRHUFIxKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIHNpemUpOworICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0
aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LAorICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6
ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7CisgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXgg
PSBieXRlY29kZS5tX2xlbmd0aDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1hdGVyaWFsaXpl
UG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFyZ3VtZW50R1BSMSk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFyZ3VtZW50R1BSMik7Ci0gICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgs
IHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQ
cm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwK
KyAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOwogI2Vs
c2UKLSAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJy
YXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBy
ZWdUMik7CiAgICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOwotICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlX
aXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgcmVnVDMsIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQ
cm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwK
KyAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKIH0KIApAQCAtMTcxOCwxMCArMTY5NCw4IEBAIHZvaWQg
SklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgbV9pc1NoYXJlYWJsZSA9IGZh
bHNlOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9m
aWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRDb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0
YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxl
ID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKQEAgLTE4MDMsMjUgKzE3Nzcs
MjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQ
UjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVt
cyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFj
a2V0UmVnID0gcmVnVDA7Ci0gICAgewotICAgICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25B
cmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCi0gICAgICAg
IEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwotICAgICAgICBlbnN1cmVTaGFkb3dDaGlja2Vu
UGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsK
LSAgICB9CisgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0
IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgorICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJl
Z1QyOworICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVn
LCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1QyKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDEpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFj
a2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDEsIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQ
YWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVC
bG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogI2VuZGlmIC8vIFVT
RShKU1ZBTFVFNjQpCiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgbV9pc1NoYXJlYWJs
ZSA9IGZhbHNlOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQcm9maWxlQ29udHJvbEZsb3c+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2lj
QmxvY2tMb2NhdGlvbiA9IG1ldGFkYXRhLm1fYmFzaWNCbG9ja0xvY2F0aW9uOwogI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgYmFzaWNCbG9ja0xvY2F0aW9uLT5lbWl0RXhlY3V0ZUNvZGUoKnRoaXMp
OwpAQCAtMTg5MSw3ICsxODYwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgbW92ZVZhbHVlKGpzVW5k
ZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKQEAgLTE5
MTcsNyArMTg4Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0TG9hZFByb3RvdHlwZSh2
bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93
Q2FzZXMpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCAwOWQ2
ZmY3MGE2M2M1YzhlZTNlNDk1OGY5NDA3MzBlOWU5YWUyMTE3Li4yYWUzYTA0YTNjNWZkMmY2OTQw
MmMyNWEzZWUzZjc0NDgyNGM5NzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2pt
cChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRf
b3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0Pigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVC
bG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRp
b25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmlu
YWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAg
ICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50
bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2Rl
OjpBbGxvY2F0b3JJZkV4aXN0cyk7CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKKyAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0
cnVjdHVyZSk7CkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVz
X2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IGVtaXRMb2FkUGF5bG9hZChoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAgICAgLy8gV2UgZG9u
J3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgogICAg
IEp1bXAgaGFzSW5zdGFuY2VWYWx1ZU5vdENlbGwgPSBlbWl0SnVtcElmTm90SlNDZWxsKGhhc0lu
c3RhbmNlVmFsdWUpOwotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0
cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsK
KyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Q
cm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwogCiAgICAgLy8gV2Uga25vdyB0aGF0
IGNvbnN0cnVjdG9yIGlzIGFuIG9iamVjdCBmcm9tIHRoZSB3YXkgYnl0ZWNvZGUgaXMgZW1pdHRl
ZCBmb3IgaW5zdGFuY2VvZiBleHByZXNzaW9ucy4KICAgICBlbWl0TG9hZFBheWxvYWQoY29uc3Ry
dWN0b3IsIHJlZ1QwKTsKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0
YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3RvKTsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLAorICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LAogICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAg
ICAgIHJlZ1QwLCAvLyByZXN1bHQKICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCkBAIC0xOTYsNyAr
MTk2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKICAgICBlbWl0TG9hZFRhZyh2YWx1ZSwgcmVnVDApOwogICAgIGVtaXRMb2Fk
VGFnKHByb3RvLCByZWdUMyk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25JbnN0YW5jZU9mT3B0aW1pemUsIGRzdCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMCwgcmVnVDIpLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDEpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMCwgcmVnVDIpLCBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDEpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOwogfQogCkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFYK
ICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZFBheWxvYWQo
Y29uc3RydWN0b3IsIHJlZ1QyKTsKICAgICBlbWl0TG9hZChoYXNJbnN0YW5jZVZhbHVlLCByZWdU
NCwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwg
bV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1Q0LCBy
ZWdUMykpOwogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAgICAg
CkBAIC0yNDgsNyArMjQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5l
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIAogICAgIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAp
OwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHJlZ1QxKTsKICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDAp
OwogCkBAIC0zNzgsNyArMzc4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbmFtZSA9IGJ5dGVjb2RlLm1fbmFtZTsKICAgICBlbWl0TG9hZFBheWxvYWQoZnVuYywg
cmVnVDEpOwogICAgIGVtaXRMb2FkKG5hbWUsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCByZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQw
OCw3ICs0MDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKICAgICBH
UFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKICAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCB2YWx1
ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
dGFyZ2V0KTsKKyAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIHZhbHVlLCBzY3JhdGNo
MSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTQyMiw3ICs0MjIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEpTVmFsdWVSZWdzIHZhbHVlKHJlZ1Qx
LCByZWdUMCk7CiAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAgICAgR1BSUmVnIHNjcmF0
Y2gyID0gcmVnVDM7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCB2YWx1ZSwgc2Ny
YXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0
KTsKKyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIHZhbHVlLCBzY3JhdGNoMSwgc2Ny
YXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTQzNyw3ICs0MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1
YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdU
MCksIHRhcmdldCk7CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9
IGp1bXAoKTsKIApAQCAtNDYzLDcgKzQ2Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgYWRkSnVtcChi
cmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCks
IHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAgLTUwNCw3
ICs1MDQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0
cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOworICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEpTVmFsdWUgc3BlY2lhbFBv
aW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcik7CiAg
ICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKQEAgLTU1MiwxMyArNTUyLDEzIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElm
Tm90U3RyaW5nKHJlZ1QyKSk7CiAKICAgICAvLyBTdHJpbmcgY2FzZS4KLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIHJlZ1QwLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlU3RyaW5nRXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsK
ICAgICBzdG9yZVJlc3VsdC5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIEdlbmVyaWMgY2FzZS4K
ICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCiAg
ICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVFcSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogCiAg
ICAgc3RvcmVSZXN1bHQubGluayh0aGlzKTsKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOwpAQCAtNTkxLDE0ICs1OTEsMTQgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcEVxSnVt
cFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQ29tcGlsZU9wRXEK
ICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKIAogICAg
IC8vIFN0cmluZyBjYXNlLgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmlu
Z0VxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMih0eXBlID09IENvbXBpbGVPcEVxVHlwZTo6RXEgPyBOb25aZXJvIDogWmVybywg
cmV0dXJuVmFsdWVHUFIpLCBqdW1wVGFyZ2V0KTsKICAgICBkb25lLmFwcGVuZChqdW1wKCkpOwog
CiAgICAgLy8gR2VuZXJpYyBjYXNlLgogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2Fz
ZShpdGVyKSk7IC8vIGRvdWJsZXMKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKHR5
cGUgPT0gQ29tcGlsZU9wRXFUeXBlOjpFcSA/IE5vblplcm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQ
UiksIGp1bXBUYXJnZXQpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwpAQCAtNjQzLDEzICs2NDMs
MTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2UKICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJh
bmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKIAogICAgIC8vIFN0cmluZyBjYXNlLgotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVTdHJpbmdFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVn
VDIpOwogICAgIHN0b3JlUmVzdWx0LmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gR2VuZXJpYyBj
YXNlLgogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJs
ZXMKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7
CiAKICAgICBzdG9yZVJlc3VsdC5saW5rKHRoaXMpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigw
eDEpLCByZXR1cm5WYWx1ZUdQUik7CkBAIC03NjIsNyArNzYyLDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2wKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25a
ZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTc3Miw3ICs3NzIsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8UwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9wcm9maWxlZENvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmlj
dEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTc5MSw3
ICs3OTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFy
ZTMyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0
ZSA9IGp1bXAoKTsKQEAgLTgyMyw3ICs4MjMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDIpOwogICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7
CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC04NDYsNyArODQ2LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwogICAgIGNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7
CiAgICAgZW1pdExvYWQoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxs
T3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgbV9wcm9maWxlZENvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAgIGp1bXBUb0V4
Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiB9CiAKQEAgLTg2Miw3ICs4NjIsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwogICAgIGlzSW50MzIubGluayh0aGlzKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVC
bG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApKTsKICAgICBpZiAoc3JjICE9IGRzdCkKICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVn
VDEsIHJlZ1QwKTsKIH0KQEAgLTg4NCw3ICs4ODQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19u
dW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoYXJndW1lbnRWYWx1ZVJlZ3MsIHJlZ1QyKSk7CiAgICAg
aXNCaWdJbnQubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBpZiAoc3JjICE9IGRzdCkK
ICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KQEAgLTkxNSw3ICs5MTUs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkp
OwogICAgIGlmIChzcmMgIT0gZHN0KQogICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVn
VDApOwogfQpAQCAtOTMxLDE4ICs5MzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGxvYWQzMihBZGRyZXNzKHJl
Z1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsK
ICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6
Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihz
dGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLQotICAgIC8v
IFdoZW4gdGhlIExMSW50IHRocm93cyBhbiBleGNlcHRpb24sIHRoZXJlIGlzIGEgY2hhbmNlIHRo
YXQgd2UndmUgYWxyZWFkeSB0aWVyZWQgdXAKLSAgICAvLyB0aGUgc2FtZSBDb2RlQmxvY2sgdG8g
YmFzZWxpbmUsIGFuZCB3ZSdsbCBjYXRjaCB0aGUgZXhjZXB0aW9uIGluIHRoZSBiYXNlbGluZSBK
SVQgKGJlY2F1c2UKLSAgICAvLyB3ZSB1cGRhdGVkIHRoZSBleGNlcHRpb24gaGFuZGxlcnMgdG8g
cG9pbnQgaGVyZSkuIEJlY2F1c2UgdGhlIExMSW50IHVzZXMgYSBkaWZmZXJlbnQgdmFsdWUKLSAg
ICAvLyBpbnNpZGUgc19jb25zdGFudHNHUFIsIHRoZSBjYWxsZWUgc2F2ZXMgd2UgcmVzdG9yZSBh
Ym92ZSBtYXkgbm90IGNvbnRhaW4gdGhlIGNvcnJlY3QgcmVnaXN0ZXIuCi0gICAgLy8gU28gd2Ug
cmVwbGVuaXNoIGl0IGhlcmUuCi0gICAgewotICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVREYXRhKCkpLCByZWdUMCk7Ci0gICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJVENvbnN0
YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOwotICAgIH0KKyAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRp
b25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtOTY1LDcgKzk1NCw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgLy8gYXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0b3JpbmcgbG9jYWxzIHRvIHRo
ZSBidWZmZXIsIGV0YwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzU1OTgKIAotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZENvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVy
KiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKICAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRF
bWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMo
KSk7CkBAIC0xMDA3LDggKzk5Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0
YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50
LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9w
cm9maWxlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0g
ICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAg
ICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFi
bGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6Oklt
bWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUp
OwogCkBAIC0xMDM0LDEzICsxMDIzLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lz
dGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1
bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRl
bWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9
IG1fcHJvZmlsZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNb
dGFibGVJbmRleF07CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2Vk
VGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3Jk
KHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3Jk
OjpDaGFyYWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRh
YmxlKTsKIAogICAgIGVtaXRMb2FkKHNjcnV0aW5lZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIG1fcHJvZmls
ZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0
YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJs
ZS5tX21pbik7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwogfQogCkBA
IC0xMDUyLDEzICsxMDQxLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0
YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50
LgotICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9w
cm9maWxlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlc1t0YWJsZUluZGV4XTsKKyAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYg
dW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBtX3N3aXRjaGVz
LmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0
T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNU
SVRhYmxlKHVubGlua2VkVGFibGUpOwogCiAgICAgZW1pdExvYWQoc2NydXRpbmVlLCByZWdUMSwg
cmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25v
d25LZXlUeXBlLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgdGFibGVJbmRleCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgdGFibGVJbmRleCk7CiAgICAgZmFySnVt
cChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwogfQogCkBAIC0xMDc5LDcgKzEwNjgsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIC8vIEV2ZW4gdGhvdWdoIEpJVCBjb2RlIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGlu
aXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2lu
dGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxp
ZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIGZvciAoaW50IGkgPSBDb2Rl
QmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsg
aSA8IG1fcHJvZmlsZWRDb2RlQmxvY2stPm51bVZhcnMoKTsgKytpKQorICAgIGZvciAoaW50IGkg
PSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3Rl
cnMoKTsgaSA8IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7ICsraSkKICAgICAgICAgZW1pdFN0b3Jl
KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpJVFNs
b3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3Bh
dGhfZW50ZXIpOwpAQCAtMTA5OCw3ICsxMDg3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1p
dF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhp
cz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRD
b2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsK
ICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRh
Lm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CkBAIC0x
MTMzLDcgKzExMjIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CisgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgU3RydWN0dXJl
SUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3RlciA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCkBA
IC0xMTU2LDcgKzExNDUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVf
dHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsK
KyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0
aW9uOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFy
Z2V0VmlydHVhbFJlZ2lzdGVyOwogCkBAIC0xMjUwLDcgKzEyMzksNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIGVtaXRMb2FkVGFnKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMSk7
CiAgICAgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MocmVnVDEsIHJlZ1QyKTsKICAgICBlbWl0TG9hZFBh
eWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWls
UGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHJlZ1QzLCBUcnVzdGVkSW1tUHRyKG1f
cHJvZmlsZWRDb2RlQmxvY2spLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOworICAg
IGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHJl
Z1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAppbmRleCBkN2RmN2NiOGU4NzVlMmNhNmFlNzA0ZjExZWRkOWQ4Y2NmMTMyOTg2Li4y
MDMyZGI5N2FhYTg1YTM5MjgxNzRhYThmMmRlZGZkYjFmZWNmMmMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNs
dWRlICJBcml0aFByb2ZpbGUuaCIKICNpbmNsdWRlICJBcnJheUNvbnN0cnVjdG9yLmgiCiAjaW5j
bHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKLSNpbmNsdWRlICJDb2RlQmxvY2tJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzSW5saW5lcy5oIgogI2luY2x1ZGUg
IkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCkBAIC0yODU2LDcgKzI4NTUs
NyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtu
b3duS2V5VHlwZSwgY2hhciosIChKU0dsb2JhbAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRLZXkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1l
LT5jb2RlQmxvY2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUg
PSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNv
bnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwogICAgIHZvaWQqIHJlc3VsdCA9IGxp
bmtlZFRhYmxlLm1fY3RpRGVmYXVsdC5leGVjdXRhYmxlQWRkcmVzcygpOwogCkBAIC0yODgxLDcg
KzI4ODAsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoSW1tV2l0
aFVua25vd25LZXlUeXBlLCBjaGFyKiwgKFZNKiB2bVBvaQogICAgIEpTVmFsdWUga2V5ID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwor
ICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwogICAgIHZvaWQqIHJlc3Vs
dDsKICAgICBpZiAoa2V5LmlzSW50MzIoKSkKQEAgLTI5MDQsNyArMjkwMyw3IEBAIEpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUs
IGNoYXIqLCAoSlNHbG9iCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKICAgICB2b2lkKiByZXN1bHQ7Ci0gICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBs
aW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CisgICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVC
bG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogCiAgICAgaWYgKGtleS5p
c1N0cmluZygpKSB7CiAgICAgICAgIFN0cmluZ0ltcGwqIHZhbHVlID0gYXNTdHJpbmcoa2V5KS0+
dmFsdWUoZ2xvYmFsT2JqZWN0KS5pbXBsKCk7CkBAIC0yOTIwLDYgKzI5MTksNyBAQCBKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBl
LCBjaGFyKiwgKEpTR2xvYgogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1
bHQpOwogfQogCisjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uUmVzb2x2ZVNjb3BlRm9yQmFzZWxpbmUsIEVuY29kZWRKU1ZhbHVl
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKSkK
IHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkBAIC0yOTcxLDYgKzI5NzEsNyBA
QCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUmVzb2x2ZVNjb3BlRm9yQmFzZWxp
bmUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbAogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXNvbHZlZFNjb3BlKTsKIH0KKyNlbmRpZgogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uR2V0RnJvbVNjb3BlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGNvbnN0IEluc3RydWN0aW9uKiBwYykpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oCmluZGV4IDRiNWQwMTFmOTA2YTMwMzJlMmE1Yjg1MGEzYTBi
OWE0YzY4MzRiZjMuLjkzMzU0MzZlYTdkMWFhODllMmU4NWQwOWM1MDFkNmNmMTNkNDUzZmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCkBAIC0yOTAsNyArMjkw
LDkgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRQcml2YXRlTmFtZUJ5
SWRHZW5lcmljLCBFbmNvZGVkSlNWYWx1ZSwgKEoKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgY2hhciosIChKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlIGtleSwgc2l6ZV90IHRhYmxlSW5kZXgsIGludDMyX3QgbWlu
KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtu
b3duS2V5VHlwZSwgY2hhciosIChWTSosIEVuY29kZWRKU1ZhbHVlIGtleSwgc2l6ZV90IHRhYmxl
SW5kZXgsIGludDMyX3QgbWluKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
blN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgY2hhciosIChKU0dsb2JhbE9iamVjdCos
IEVuY29kZWRKU1ZhbHVlIGtleSwgc2l6ZV90IHRhYmxlSW5kZXgpKTsKKyNpZiBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUmVzb2x2
ZVNjb3BlRm9yQmFzZWxpbmUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBjb25z
dCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykpOworI2VuZGlmCiBKU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkdldEZyb21TY29wZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9i
amVjdCosIGNvbnN0IEluc3RydWN0aW9uKiBieXRlY29kZVBDKSk7CiBKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblB1dFRvU2NvcGUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIGNv
bnN0IEluc3RydWN0aW9uKiBieXRlY29kZVBDKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFBsYW4uY3BwCmluZGV4IDk2ZmNiMjMxMGJiZDlmZGRmYTg4MTQyZGM0NDQ5OTg5OWQxY2ZhZTQu
Ljg1NTM0YmRmMTU1NzBkZGY1NzYwMWU0NTMyZTdiYzU5NWQ5MDMzNmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQbGFuLmNwcApAQCAtODcsMTIgKzg3LDcgQEAgYXV0byBKSVRQbGFuOjp0
aWVyKCkgY29uc3QgLT4gVGllcgogCiBKSVRDb21waWxhdGlvbktleSBKSVRQbGFuOjprZXkoKQog
ewotICAgIEpTQ2VsbCogY29kZUJsb2NrOwotICAgIGlmIChtX21vZGUgPT0gSklUQ29tcGlsYXRp
b25Nb2RlOjpCYXNlbGluZSkKLSAgICAgICAgY29kZUJsb2NrID0gbV9jb2RlQmxvY2stPnVubGlu
a2VkQ29kZUJsb2NrKCk7Ci0gICAgZWxzZQotICAgICAgICBjb2RlQmxvY2sgPSBtX2NvZGVCbG9j
ay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwotICAgIHJldHVybiBKSVRDb21waWxhdGlvbktleShj
b2RlQmxvY2ssIG1fbW9kZSk7CisgICAgcmV0dXJuIEpJVENvbXBpbGF0aW9uS2V5KG1fY29kZUJs
b2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCksIG1fbW9kZSk7CiB9CiAKIGJvb2wgSklUUGxhbjo6
aXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IDBkYjdjMDQ4NWE0MmQzOWUzYzZjMzBkZjVjNWQz
MmJhMTcyYjQ0ODcuLmFmNzRhNzQ1YWNhMzc2YzJhYzY3NWYyNjIzMWQ0NGU4YTVkNTc4M2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBA
IC00OSwxMTMgKzQ5LDkyIEBAIG5hbWVzcGFjZSBKU0Mgewogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6c3R1YkluZm87Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CiAKLSAgICBpZiAoYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jaykubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlv
bnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBu
b3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOwotICAgICAgICBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOworICAgIGlm
IChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJ
Q01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgeworICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwot
ICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwotICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIHNjcmF0Y2hH
UFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5
dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CiAKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7
CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CiAK
ICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9H
UFIpOwotCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MSksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKICAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KHByb3BlcnR5KSkKICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIg
PSB0cnVlOwotCi0gICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKLSAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDsKLSAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgg
PSBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Ci0gICAgICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKLSAgICAgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOwotCi0gICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKLSAgICAgICAgcmVz
ZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZh
dGl2ZWx5IHJlc2V0IFNQCi0KLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCisgICAgICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAg
ICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwogICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgfQotfQogCi0jaWYgIU9TKFdJTkRP
V1MpCi1zdGF0aWMgY29uc3RleHByIEdQUlJlZyB2aWFibGVBcmd1bWVudEdQUjQgPSBHUFJJbmZv
Ojphcmd1bWVudEdQUjQ7Ci1zdGF0aWMgY29uc3RleHByIEdQUlJlZyB2aWFibGVBcmd1bWVudEdQ
UjUgPSBHUFJJbmZvOjphcmd1bWVudEdQUjU7Ci0jZWxzZQotc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgdmlhYmxlQXJndW1lbnRHUFI0ID0gR1BSSW5mbzo6bm9uQXJnR1BSMDsKLXN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHZpYWJsZUFyZ3VtZW50R1BSNSA9IEdQUkluZm86Om5vbkFyZ0dQUjE7Ci0j
ZW5kaWYKK30KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2RlVHlwZT4KIHZvaWQgSklUOjpnZW5l
cmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgaWYgKCFoYXNBbnlTbG93Q2Fz
ZXMoaXRlcikpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CisgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4Kytd
OworICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRC
eVZhbEluZGV4KytdOwogCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAg
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQotICAgIHN0YXRpY19hc3NlcnQoYXJndW1lbnRHUFIzICE9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKLSAgICBtb3ZlKEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OmJhc2UsIGFyZ3VtZW50R1BSMyk7Ci0gICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eSwgdmlhYmxlQXJndW1lbnRHUFI0KTsKLSAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwotICAgIG1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQ
cm9maWxlKCksIGFyZ3VtZW50R1BSMik7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRl
Y2x0eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1
bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRz
dCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIz
LCB2aWFibGVBcmd1bWVudEdQUjQpOworICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKICNlbHNlCi0gICAgVk0mIHZtID0gdGhpcy0+dm0oKTsK
LSAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsK
LSAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUlu
ZGV4KTsKKyAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKKyAgICAgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgICAgIEFTU0VSVChC
eXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwogCi0gICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIz
OyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmls
ZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdU
MDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgc3RhdGlj
X2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7Ci0gICAgc3RhdGljX2Fzc2Vy
dChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlID09IHJlZ1QwKTsKLSAgICBzdGF0aWNf
YXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5ID09IHJlZ1QxKTsKKyAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJn
MSBhcmcxIGFscmVhZHkgdXNlZC4KKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BS
ID0gYXJndW1lbnRHUFIyOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdU
MDsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAg
ICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJ
bmZvR1BSKTsKLSAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
Y29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsK
LSAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOworICAgICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CisgICAgICAgIENhbGwgY2FsbDsKKyAgICAgICAgaWYgKEpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCisgICAgICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlWYWxP
cHRpbWl6ZSk7CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOworICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE3MCw3ICsxNDksNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxs
R2VuZXJhdAogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9i
YWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAg
ICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9i
YWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KLSAgICBDQ2FsbEhlbHBlcnMgaml0OworICAgIEpJVCBqaXQodm0pOwogCiAgICAgaWYg
KCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQu
dGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTgxLDggKzE2MCw4IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxH
ZW5lcmF0CiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQ
UjU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwogICAgIHN0YXRpY19hc3NlcnQo
YmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2Vy
dChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCkBAIC0yMDgsNDAgKzE4NywzNCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0KLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7Ci0KKyAgICBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDApOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZh
dGVOYW1lLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJl
Z3MsIHN0dWJJbmZvR1BSKTsKLQotICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKLSAgICBzdHViSW5mby0+YWNjZXNzVHlw
ZSA9IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOwotICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OwotICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Ci0gICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OwotICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKLQotICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKLSAgICBhZGRTbG93Q2FzZSgpOworICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpH
ZXRQcml2YXRlTmFtZSwKKyAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBy
ZXN1bHRSZWdzLCByZWdUMik7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAg
IGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKKyAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBlbHNlCisgICAgICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRl
X25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2Vz
KGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dFByaXZhdGVOYW1lPigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0yNTAsMTEgKzIyMyw5IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOwotICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgYXJndW1lbnRHUFIxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSMyk7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPihieXRlY29k
ZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSksIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgYXJndW1lbnRHUFIzKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRQcml2YXRl
TmFtZU9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTI2NCwyMCArMjM1LDI2IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29k
ZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1l
bnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gcmVnVDE7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3Vt
ZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09
IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2Vu
LnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBDYWxsIGNhbGw7CisgICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCisgICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwor
ICAgIGVsc2UKKyAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5h
bWVPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4
Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgQ2FsbCgpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yODcsNyArMjY0LDcg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0
X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEcKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBh
Ym91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxv
bmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8v
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgQ0NhbGxIZWxwZXJzIGppdDsKKyAgICBKSVQg
aml0KHZtKTsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTMyMywyOCArMzAwLDIx
IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUu
bV9icmFuZDsKLQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0
ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBC
YXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsK
LQorICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIGJyYW5kR1BSID0gcmVn
VDE7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7CisKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nl
c3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7Ci0KLSAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7Ci0gICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ7Ci0gICAgc3R1YkluZm8t
PmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKLSAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Ci0gICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mbyA9IHN0dWJJbmZvOwotCi0gICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwotICAgIGFkZFNsb3dD
YXNlKCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJh
bmRHUFIpLCByZWdUMik7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgIGlm
ICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKKyAgICAgICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBlbHNlCisgICAgICAgIGFkZFNsb3dD
YXNlKCk7CiAgICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKIAogICAgIC8v
IFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5j
ZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTM1NCwyMiArMzI0LDE3IEBA
IHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0
ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJh
bmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwotCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRv
ciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4
KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOwotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIGFyZ3VtZW50R1BSMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIGFyZ3VtZW50R1BSMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2JyYW5kLCBhcmd1bWVudEdQUjMpOwotICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3Bl
cmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0g
cmVnVDE7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRl
QnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgYnJhbmRHUFIpOwogI2Vsc2UKICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwpAQCAtMzc5LDE4ICszNDQsMjQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFYKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0
R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7
IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IHJlZ1QxOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVu
dEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBh
cmd1bWVudEdQUjEpOwogCi0gICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5z
dHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1l
PEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXpl
KT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFBy
aXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIENhbGwgY2Fs
bDsKKyAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKKyAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZh
dGVCcmFuZE9wdGltaXplOworICAgIGVsc2UKKyAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAjZW5kaWYKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgQ2FsbCgpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zOTksNDcgKzM3MCwzMyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsKIAotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJz
OjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVC
cmFuZFJlZ2lzdGVyczo6YnJhbmQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKLQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihicmFuZCwgYnJhbmRHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIHJlZ1QxKTsKIAotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNj
ZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7Ci0KLSAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7Ci0gICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDsKLSAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKLSAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwotICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKLSAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87Ci0KLSAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Ci0gICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMSksIHJlZ1QyKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQorICAgICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIGVsc2UKKyAgICAgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcENoZWNrUHJpdmF0ZUJyYW5kPigpOwotICAgIFVOVVNFRF9QQVJBTShi
eXRlY29kZSk7Ci0KICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdlbiA9IG1f
cHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleCsrXTsKICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKLSAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRH
UFIzKTsKLSAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJy
YW5kT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBiYXNlR1BSLCBicmFuZEdQUik7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC00NDksMTggKzQwNiwyNCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9i
cmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLAogICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5
IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJh
bmRSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJh
c2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVn
VDE7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02
NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAK
LSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8
ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5
cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGlt
aXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBDYWxsIGNhbGw7CisgICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCisgICAgICAgIGdlbi5zdHVi
SW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGlt
aXplOworICAgIGVsc2UKKyAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uQ2hlY2tQ
cml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNl
bmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFs
X2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDcyLDQz
ICs0MzUsMzAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9m
aWxlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpzdHViSW5mbzsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcmVnVDMpOwogCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwotICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgcHJvZmlsZUdQUik7
Ci0gICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRh
dGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMywgcmVnVDQpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiks
IEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcHJvZmlsZUdQUiwgc3R1YkluZm9HUFIpOwotCisgICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1
dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdU
MiksIHJlZ1QzLCByZWdUNCk7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5
KSkKICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0KLSAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7Ci0gICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeVZh
bDsKLSAgICBzdHViSW5mby0+cHV0S2luZCA9IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFs
RGlyZWN0PiA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKLSAgICBzdHVi
SW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29kZSk7Ci0gICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKLSAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Ci0gICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOwotCi0gICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwotICAgIHJlc2V0U1AoKTsgLy8g
V2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNl
dCBTUAotICAgIGFkZFNsb3dDYXNlKCk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OworICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBlbHNlCisgICAgICAg
IGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBJ
QyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNl
IGlzIGNlbGwuCkBAIC01MjQsMTIgKzQ3NCwxNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8Uwog
ICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7
CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7CisgICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5
dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7CisgICAgICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKICAgICBpZiAoaXNE
aXJlY3QpCkBAIC01NDUsMTYgKzQ5OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgLy8gVGhleSBhcmUgY29uZmlndXJlZCBp
biB0aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgotICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50
R1BSMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIy
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQUjMpOwotICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgdmlhYmxl
QXJndW1lbnRHUFI0KTsKLSAgICBpZiAoaXNEaXJlY3QpCi0gICAgICAgIG1hdGVyaWFsaXplUG9p
bnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+
KCksIE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCB2
aWFibGVBcmd1bWVudEdQUjUpOwotICAgIGVsc2UKLSAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVy
SW50b01ldGFkYXRhKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSwgT3BQdXRC
eVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHZpYWJsZUFyZ3VtZW50R1BS
NSk7Ci0gICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9w
dGltaXplKT4oQWRkcmVzcyh2aWFibGVBcmd1bWVudEdQUjQsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgdmlhYmxlQXJndW1lbnRHUFI0LCB2aWFibGVBcmd1bWVu
dEdQUjUpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1v
ZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0
cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIsIGdlbi5zdHViSW5mbygpLCByZWdUMyk7CiAj
ZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC01NjgsNyArNTEyLDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFMKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVn
VDQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwot
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJ
bmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0
X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
ICAgICBDYWxsIGNhbGw7CiAgICAgYXV0byBvcGVyYXRpb24gPSBpc0RpcmVjdCA/IChlY21hTW9k
ZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3Ry
aWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlW
YWxOb25TdHJpY3RPcHRpbWl6ZSk7CkBAIC01NzksNyArNTIzLDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFMKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0
aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBDYWxsKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTU4OSwyNCAr
NTMzLDE4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93
X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0CiAgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlv
bnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gK
ICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIENDYWxsSGVscGVycyBqaXQ7Cisg
ICAgSklUIGppdCh2bSk7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKICAgICBjb25z
dGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q1OwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSByZWdUNDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpwcm9maWxlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9
IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsK
LSAgICB7Ci0gICAgICAgIFJlZ2lzdGVyU2V0IHVzZWQoQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6YmFzZSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHksIEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OnZhbHVlLCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxl
KTsKLSAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q0KSk7Ci0gICAgICAgIEFTU0VS
VCghdXNlZC5jb250YWlucyhyZWdUNSkpOwotICAgIH0KLQogCiAgICAgaml0LnN0b3JlMzIoYnl0
ZWNvZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcykpOwogICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgZ2xvYmFsT2JqZWN0R1BSKTsKQEAgLTYzMiwzMSArNTcwLDIwIEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3Bl
cnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOwotCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgdmFsdWVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQ
cml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKLQotICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKLSAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVO
YW1lOwotICAgIHN0dWJJbmZvLT5wcml2YXRlRmllbGRQdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRL
aW5kOwotICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OwotICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29s
LmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7
Ci0gICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4
OwotICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKLQotICAgIGdlbi5nZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZv
R1BSKTsKLSAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7
CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKKyAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKKyAgICBlbHNlCisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9w
dXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVy
ZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC02NjcsNyArNTk0
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZh
dGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIFVOVVNFRF9QQVJBTShjdXJyZW50
SW5zdHJ1Y3Rpb24pOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0UHJpdmF0ZU5hbWU+KCk7CisgICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwdXRLaW5kID0g
Ynl0ZWNvZGUubV9wdXRLaW5kOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1f
cHV0QnlWYWxzW21fcHV0QnlWYWxJbmRleCsrXTsKIApAQCAtNjc1LDE1ICs2MDMsMTMgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmUKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCisgICAgYXV0byBvcGVyYXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25Q
dXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQ
cml2YXRlRmllbGRPcHRpbWl6ZTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4o
KTsKLQotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIxKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSMik7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjMpOwot
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgdmlh
YmxlQXJndW1lbnRHUFI0KTsKLSAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblB1
dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUpPihBZGRyZXNzKHZpYWJsZUFyZ3VtZW50
R1BSNCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCB2aWFibGVB
cmd1bWVudEdQUjQsIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIC8vIFRoZXkgYXJlIGNv
bmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwg
Z2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtNjk2LDEyICs2MjIsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmUKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAK
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBz
dHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CisKKyAgICBDYWxsIGNhbGw7CisgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCisgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb247CisgICAgZWxzZQorICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChv
cGVyYXRpb24pOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtNzExLDE0
ICs2NDMsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNs
b3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEcKICAgICAvLyBpdCBtYWtlcyBhc3N1
bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9t
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0
aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRj
aAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgQ0NhbGxIZWxwZXJzIGppdDsK
KyAgICBKSVQgaml0KHZtKTsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAg
Y29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gcmVnVDQ7CiAKQEAgLTc0OCw4ICs2ODAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
Z2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQz
Ml90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCByZWdU
MiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5p
bXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRl
cl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzU4LDgg
KzY4OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNz
b3IsIHJlZ1QxKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJl
Z1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzY5LDggKzY5OSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVn
VDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1Qy
KTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlclNldHRlciwgcmVnVDMsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwg
cmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVn
VDEsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTc4MCw4ICs3MDksNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Is
IHJlZ1QyKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVz
LCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0
dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTc5MSw4ICs3MTks
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNj
ZXNzb3IsIHJlZ1QyKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRy
aWJ1dGVzLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZh
bCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04MDAsMzMgKzcyNywy
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3Vs
dEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVzdWx0OwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVy
czo6c2NyYXRjaDsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKICAgICBKSVRE
ZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOwot
Ci0gICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOwotICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVs
ZXRlQnlJRDsKLSAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsK
LSAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1Yklu
Zm8pOwotICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9J
bmRleDsKLSAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87Ci0KLSAgICBnZW4u
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHVi
SW5mb0dQUik7Ci0gICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdz
KHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMywgcmVnVDIpOworICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCisgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CisgICAgZWxzZQorICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZGVsQnlJZHMuYXBwZW5k
KGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOworICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAKICAgICAvLyBJ
QyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNl
IGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5k
IG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAt
ODQyLDE3ICs3NTksMTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlu
a2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlk
c1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7Ci0gICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOwotICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9u
RGVsZXRlQnlJZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwg
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUo
KSkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtODY2LDE5ICs3ODEsMjQg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBh
cmd1bWVudEdQUjQ7CiAKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBiYXNlR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BS
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X2lk
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCisgICAg
Q2FsbCBjYWxsOworICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQorICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
RGVsZXRlQnlJZE9wdGltaXplOworICAgIGVsc2UKKyAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
b3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtODg4LDcgKzgwOCw3IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2RlbF9i
eV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJv
dXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25n
aW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIENDYWxsSGVscGVycyBqaXQ7CisgICAgSklUIGpp
dCh2bSk7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC05MjUsMzMgKzg0NSwyMiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6
OmJhc2U7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRGVsQnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0g
QmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKLQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKLQorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDEpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFz
ZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDApOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgcHJvcGVydHkpOwogICAgIEpJVERlbEJ5
VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzY3Jh
dGNoKTsKLQotICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKLSAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5
cGU6OkRlbGV0ZUJ5VmFsOwotICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29k
ZUluZGV4OwotICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1f
Y29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZv
LCBzdHViSW5mbyk7Ci0gICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBz
dHViSW5mb0luZGV4OwotICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKLQot
ICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5k
ZXgsIHN0dWJJbmZvR1BSKTsKLSAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7CisgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOworICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKKyAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAg
ICBlbHNlCisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9kZWxCeVZhbHMuYXBwZW5kKGdl
bik7CiAKLSAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OworICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAKICAgICAvLyBXZSBz
aG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3Jp
dGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBT
dHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtOTc0
LDExICs4ODMsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOwotICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0gICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlw
ZShvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1Qx
KTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0
aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUu
dmFsdWUoKSkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtOTkyLDE5ICs4
OTksMjQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVH
UFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52
YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogCisgICAgQ2FsbCBjYWxsOworICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQorICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZTsKKyAgICBlbHNlCisgICAg
ICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1
ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCkBAIC0xMDE0LDcgKzkyNiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjpzbG93X29wX2RlbF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0CiAgICAgLy8g
aXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBh
dmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5
IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNo
IG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIENDYWxs
SGVscGVycyBqaXQ7CisgICAgSklUIGppdCh2bSk7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNz
KCk7CkBAIC0xMDQ5LDMxICs5NjEsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZVZSZWcsIHJlZ1QwKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKLSAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1
bHQpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwogCiAgICAgSklUR2V0QnlJZEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxp
bmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3Ms
IHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKLQotICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKLSAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ7Ci0gICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKLSAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Ci0gICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwotCi0gICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwotICAgIGFk
ZFNsb3dDYXNlKCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1Qx
LCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMDgzLDE3ICs5ODYsMTQgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG8KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5
SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIGFyZ3VtZW50R1BSMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIGFyZ3VtZW50R1BSMik7Ci0gICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRp
b25UcnlHZXRCeUlkT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRy
eUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVp
bnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTEw
MywyMCArMTAwMywyNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0bwogICAgIG1vdmUoSklUOjpU
cnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBh
cmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVy
dHlHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZv
R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNs
dHlwZShvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CisKKyAgICBDYWxsIGNhbGw7CisgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCisgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7CisgICAgZWxzZQorICAgICAg
ICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgp
KTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTI0LDMxICsxMDMwLDIyIEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRE
aXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CiAKLSAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1
YkluZm87Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2VWUmVnKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIGJhc2VHUFIpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlVlJlZyk7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qw
KTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZERp
cmVjdCk7Ci0KLSAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7Ci0gICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpHZXRCeUlkRGlyZWN0OwotICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OwotICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7Ci0gICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OwotICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
LQotICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKLSAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7
CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMTU3LDE4
ICsxMDU0LDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlCiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZERpcmVjdD4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5
SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIGFyZ3VtZW50R1BSMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIGFyZ3VtZW50R1BSMik7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0
eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFy
Z3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwg
cmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RP
cHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTE3OCw2MiArMTA3
Myw4MyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFy
Z3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8
ICFpc0FSTTY0KCkpOwogCi0gICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0
eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9u
R2V0QnlJZERpcmVjdE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
KT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3Bf
Z2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OworCisgICAgQ2FsbCBjYWxsOworICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQorICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOworICAgIGVsc2UKKyAgICAgICAgY2FsbCA9
IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcs
IHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKKyAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWQ+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsK
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpyZXN1bHQpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICAKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2VWUmVnKTsKICAgICAKICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3Bl
cnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgbG9h
ZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9k
ZU1ldGFkYXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRhOjpvZmZzZXRPZk1vZGUoKSwgc2NyYXRj
aEdQUik7Ci0gICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoMzIoTm90RXF1
YWwsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlM
ZW5ndGgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEo
KSArIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUo
KSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2Rl
ID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVNZXRh
ZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2Rl
OjpBcnJheUxlbmd0aCkpKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KHJlZ1QwLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJv
ZmlsZSwgcmVnVDEpOwogICAgICAgICBub3RBcnJheUxlbmd0aE1vZGUubGluayh0aGlzKTsKICAg
ICB9CiAKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwor
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLQot
ICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJ
bmZvcy5hZGQoKTsKLSAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5
SWQ7Ci0gICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Ci0gICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsK
LSAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7
Ci0gICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwotCi0gICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOwotICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVl
ZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAotICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBK
U1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlk
KTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3Mp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7Cit9CisKK3ZvaWQgSklU
OjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNW
YWx1ZTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlVlJlZywgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcs
IHJlZ1QxKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVn
KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVnKTsKKwor
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisKKyAgICBK
SVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKKyAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
KyAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTI0MiwxOCAr
MTE1OCwxNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbAogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWQ+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgr
K107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OwotICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgYXJndW1lbnRHUFIyKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIx
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVn
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRW
UmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQog
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMjYzLDU4ICsxMTc3LDI2IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
YXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6YmFzZTsKLSAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7Cisg
ICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsK
IAotICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
c3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1t
UHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBDYWxsIGNhbGw7
CisgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCisgICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemU7CisgICAgZWxzZQorICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBDYWxsKCkpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0
aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwotCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVH
ZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29uc3RleHByIEdQUlJlZyB0aGlz
R1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdp
c3RlcnM6OnN0dWJJbmZvOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0KTsKLQotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHRoaXNHUFIsIHRoaXNWUmVnKTsKLQotICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHRoaXNHUFIpLCBzdHViSW5mb0dQUik7Ci0KLSAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7Ci0gICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM7Ci0gICAgc3R1YkluZm8t
PmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKLSAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Ci0gICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mbyA9IHN0dWJJbmZvOwotCi0gICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwotICAgIHJlc2V0U1Ao
KTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVs
eSByZXNldCBTUAotICAgIGFkZFNsb3dDYXNlKCk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFw
cGVuZChnZW4pOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0
UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiAjaWYgRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMzI0LDcgKzEyMDYsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxH
ZW5lcmF0bwogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9i
YWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAg
ICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9i
YWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KLSAgICBDQ2FsbEhlbHBlcnMgaml0OworICAgIEpJVCBqaXQodm0pOwogCiAgICAgaWYg
KCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQu
dGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTM1OSwxOSArMTI0MSwxNiBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZFdp
dGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRo
aXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7Ci0gICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV90aGlzVmFsdWUsIGFyZ3VtZW50R1BSMyk7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplKT4oYnl0ZWNv
ZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFk
YXRhLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEzODEsMjIgKzEyNjAsMjggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1
bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7Ci0gICAgY29u
c3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6
OnRoaXNWYWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBh
cmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh0aGlzR1BSID09
IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3Bl
cnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKKworICAgIENhbGwgY2FsbDsKKyAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKKyAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOworICAgIGVsc2UKKyAgICAg
ICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxs
KCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9
CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTE0MDYsNyArMTI5MSw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9ieV9p
ZF93aXRoX3RoaXNfcHJlcGFyZUNhCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQg
dGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5n
IHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgotICAgIENDYWxsSGVscGVycyBqaXQ7CisgICAgSklUIGppdCh2
bSk7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
CiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNDQ0LDM4ICsxMzI5LDIzIEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAg
ICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKLSAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIC8vIEluIG9y
ZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVj
dCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhl
IGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4n
LCBhbmQgd2UgZ2VuZXJhdGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYg
b2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgogCi0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNl
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3Rl
cnM6OnZhbHVlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1
dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQ
UiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIGJhc2VHUFIsIHZhbHVlVlJlZywgdmFsdWVH
UFIpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAKICAg
ICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQ
UiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QzLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAog
ICAgICAgICBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwot
Ci0gICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOwotICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0
QnlJZDsKLSAgICBzdHViSW5mby0+cHV0S2luZCA9IGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6
IFB1dEtpbmQ6Ok5vdERpcmVjdDsKLSAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShi
eXRlY29kZSk7Ci0gICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
Ci0gICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKLSAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7Ci0gICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwotCi0gICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOwotICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28g
d2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAotICAgIGFkZFNsb3dDYXNlKCk7Cisg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CiAgICAgbV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKICAgICAvLyBJ
QyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNl
IGlzIGNlbGwuCkBAIC0xNDg5LDE4ICsxMzU5LDE0IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4o
dGhpcyk7CiAgICAgCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1tt
X3B1dEJ5SWRJbmRleCsrXTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBs
b2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgYXJndW1lbnRHUFIyKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIzKTsKLSAgICBj
YWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSk+KEFk
ZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0
aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVu
dEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwg
cmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtMTUxMCwxOSArMTM3NiwyNSBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50
R1BSMzsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVl
R1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQ
UjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02
NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHZhbHVlR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJ
bmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X2lkX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgQ2FsbCBjYWxsOworICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQorICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKTsK
KyAgICBlbHNlCisgICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKGdlbi5zbG93UGF0aEZ1bmN0aW9u
KCkpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25H
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTUzMiw3ICsxNDA0
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3Bf
cHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG8KICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9u
cyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBi
ZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAg
IC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgQ0NhbGxIZWxwZXJzIGppdDsKKyAgICBK
SVQgaml0KHZtKTsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTE1NjksMzEgKzE0
NDEsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFz
ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJz
OjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIGJhc2VHUFIpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlVlJlZyk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJl
Zyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7Ci0KLSAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7Ci0gICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbkJ5SWQ7Ci0g
ICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKLSAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Ci0gICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwotCi0gICAgZ2VuLmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwot
ICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgcmVnVDEpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2Vu
KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBA
IC0xNjAyLDE3ICsxNDYzLDE0IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvCiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUSW5CeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQot
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7Ci0gICAg
Y2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk+KEFkZHJlc3Mo
YXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkp
LCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJl
Z1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZt
ID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKQEAgLTE2MjIsMjIgKzE0ODAsMjggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG8KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CiAgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNz
ZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRf
YnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4K
ICAgICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVu
ayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIENhbGwgY2FsbDsKKyAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKKyAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGltaXplOworICAgIGVsc2UK
KyAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTE2NDYsMzMgKzE1MTAsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1f
YXJyYXlQcm9maWxlOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1
YkluZm87Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnNjcmF0Y2gpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOwogCiAgICAgSklUSW5CeVZh
bEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVy
dHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7Ci0KLSAgICBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRk
KCk7Ci0gICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOwotICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OwotICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Ci0gICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OwotICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKLQotICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKLSAg
ICBhZGRTbG93Q2FzZSgpOworICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CisgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQorICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIGVsc2UK
KyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTY4MSwxOCArMTUzNywxNSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21f
aW5CeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOwotICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgYXJndW1lbnRHUFIxKTsKLSAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCks
IGFyZ3VtZW50R1BSMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIGFyZ3VtZW50R1BSMyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Byb3BlcnR5LCB2aWFibGVBcmd1bWVudEdQUjQpOwotICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5
cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCB2aWFibGVBcmd1bWVu
dEdQUjQpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9w
dGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CiAjZWxzZQogICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7CkBAIC0xNzAzLDcwICsxNTU2LDU5IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsCiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIz
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwogICAgIHN0YXRpY19hc3Nl
cnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fz
c2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7Ci0gICAgbWF0
ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRh
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1t
UHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKICAgICAvLyBzbG93X29wX2dldF9ieV92YWxfcHJl
cGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBT
bywgdGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRv
IGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2Ft
ZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25H
ZXRCeVZhbE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKIAorICAgIENhbGwgY2FsbDsKKyAgICBpZiAoSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKKyAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKKyAgICBlbHNlCisgICAg
ICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
LSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CisgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBi
YXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlIHR5cGUpCiB7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87Ci0KLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCBwcm9wZXJ0eUdQUik7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJy
YW5kLCByZWdUMSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
KTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHBy
b3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOwotCi0gICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOwotICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gdHlwZTsKLSAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKLSAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwotICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKLSAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87Ci0KLSAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Ci0gICAgYWRkU2xvd0Nh
c2UoKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlw
ZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBy
ZWdUMik7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgIGlmICghSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBlbHNlCisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVy
IGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNj
ZXNzVHlwZSB0eXBlKQordm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBBY2Nlc3NUeXBlIHR5cGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGJhc2UpOwotICAg
IFVOVVNFRF9QQVJBTShwcm9wZXJ0eSk7Ci0gICAgQVNTRVJUX1VOVVNFRCh0eXBlLCB0eXBlID09
IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJp
dmF0ZUJyYW5kKTsKKyAgICBBU1NFUlQodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFt
ZSB8fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiAKICAgICBKSVRJbkJ5
VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMyk7Ci0gICAgY2FsbE9wZXJh
dGlvbjxkZWNsdHlwZShvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplKT4oQWRkcmVzcyhh
cmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRH
UFIzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6
SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0
aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxKTsKICNlbHNl
CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE3NzYsMjEgKzE2MTgsMjcgQEAgdm9pZCBK
SVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSwgVmlydHVhbFIKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJy
YW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
T3JCcmFuZEdQUiA9IHJlZ1QxOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVu
dEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eU9yQnJhbmRH
UFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplKSwgZGVjbHR5
cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0
aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZhbHVl
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZh
dGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
KworICAgIENhbGwgY2FsbDsKKyAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKKyAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IHR5
cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFt
ZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgZWxzZQor
ICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVO
YW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZh
dGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfcHJpdmF0ZV9uYW1lKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xODA0LDcgKzE2NTIsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVO
YW1lPigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUu
bV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7
CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpIYXNQ
cml2YXRlTmFtZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX2JyYW5kKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xODE4LDc0ICsxNjY2LDQ2
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzUHJpdmF0
ZUJyYW5kPigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNv
ZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQp
OworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFz
UHJpdmF0ZUJyYW5kKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgc2NyYXRjaEdQUikKK3ZvaWQgSklUOjpl
bWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKIHsKICAg
ICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICByZXR1cm47Ci0KLSAgICBs
b2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNo
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hw
b2ludCkpLCBzY3JhdGNoR1BSKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBZGRy
ZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJ
bW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFi
c29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldh
dGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVk
KSkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBk
c3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywg
dW5zaWduZWQgZGVwdGgpCiB7Ci0gICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzLCByZWdUMCk7CisgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdU
MCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoOyArK2kpCiAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi0KICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgUmVzb2x2ZVR5cGUgcHJv
ZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2sp
Lm1fcmVzb2x2ZVR5cGU7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0KLSAgICBjb25z
dGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7Ci0KLSAgICBKdW1wTGlzdCBzbG93Q2FzZTsK
LQotICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVj
dGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsKLSAg
ICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7Ci0gICAgICAg
ICAgICBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKLSAgICAgICAgICAgIGxvYWRHbG9iYWxPYmpl
Y3QoZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgfQotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
Z2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5q
ZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFu
Y2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkp
LCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0
UmVzb2x2ZUNsb3N1cmUgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKLSAg
ICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAg
ICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZkxvY2FsU2NvcGVEZXB0aCgpLCByZWdUMSk7Ci0KLSAgICAgICAgQVNTRVJUKHNj
b3BlR1BSID09IHJlZ1QwKTsKLSAgICAgICAgTGFiZWwgbG9vcCA9IGxhYmVsKCk7Ci0gICAgICAg
IEp1bXAgZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7Ci0gICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgICAg
IHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgICAgICBqdW1wKCkubGlua1RvKGxv
b3AsIHRoaXMpOwotICAgICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgfTsKKyAgICBSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CisgICAgdW5zaWduZWQg
ZGVwdGggPSBtZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKIAogICAgIGF1dG8gZW1pdENvZGUg
PSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2
ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIC8vIEpTU2Nv
cGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLgotICAgICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7Ci0gICAgICAgICAg
ICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJl
c29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgp
LCByZWdUMSk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5k
aW5nRXBvY2goKSksIHJlZ1QxKSk7CisgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3Bl
ID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2Rl
QmxvY2spOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CisgICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2Fs
QmluZGluZ0Vwb2NoLCByZWdUMSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRk
cmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOworICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIApAQCAtMTg5MywxNjUgKzE3MTMsMTY4IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVf
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAgICAgY2Fz
ZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExl
eGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKLSAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxv
Y2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpIGZvciBHbG9iYWxWYXIqLAotICAg
ICAgICAgICAgLy8gYW5kIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbExleGljYWxF
bnZpcm9ubWVudCgpIGZvciBHbG9iYWxMZXhpY2FsVmFyKi4KLSAgICAgICAgICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDApOwotICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGlmIChy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmly
b25tZW50KCkpLCByZWdUMCk7CisgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0g
SlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxv
Y2spOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CisgICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwg
cmVnVDApOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAg
ICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1p
dFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Cisg
ICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpLCBkZXB0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBNb2R1bGVWYXI6CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRh
dGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKICAgICAgICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5
cGUgPT0gTW9kdWxlVmFyKSAKLSAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkxleGljYWxFbnZpcm9ubWVudCgpLCBy
ZWdUMCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHNjb3BlR1BSKTsKLSAgICAgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZh
ciB8fCBwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKQotICAgICAgICAgICAgZW1pdENvZGUocHJvZmlsZWRSZXNvbHZlVHlwZSk7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVH
UFIpOwotCi0gICAgICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgICAgICBsb2Fk
MzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZSZXNvbHZlVHlwZSgpLCByZWdUMSk7Ci0KLSAgICAgICAgICAgIGF1dG8gZW1pdENhc2UgPSBb
Jl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBub3RD
YXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUp
KTsKLSAgICAgICAgICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgICAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICAgICAgICAgIG5vdENhc2UubGlu
ayh0aGlzKTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZh
cik7Ci0gICAgICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eSk7Ci0gICAgICAgICAgICBl
bWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgICAgIGVtaXRDYXNlKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgICAgIHNsb3dDYXNl
LmFwcGVuZChqdW1wKCkpOworICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKKyAgICBjYXNlIEds
b2JhbFByb3BlcnR5OgorICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CisgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKKyAgICAgICAgbG9hZDMyKCZtZXRh
ZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7CiAKLSAgICAgICAgICAgIHNraXBUb0VuZC5saW5r
KHRoaXMpOwotICAgICAgICB9CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAg
ICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKKworICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOworICAgICAgICBlbWl0
Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOworCisgICAgICAg
IHNraXBUb0VuZC5saW5rKHRoaXMpOworICAgICAgICBicmVhazsKICAgICB9CisgICAgY2FzZSBV
bnJlc29sdmVkUHJvcGVydHk6CisgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKKyAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7CisKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5s
aW5rKHRoaXMpOwogCi0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2UpOworICAgICAgICBKdW1wIG5v
dEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
KyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsK
KyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAg
ICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOworCisgICAg
ICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAg
ICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworCisg
ICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICBlbWl0Q29k
ZShyZXNvbHZlVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KIH0KKyNlbHNlIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCi0jZWxzZQogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwotICAg
IFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKS5tX3Jlc29sdmVUeXBlOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Nj
b3BlOworICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlw
ZTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5z
dHJ1Y3Rpb24pOworICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVj
b2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKLSAgICAvLyBJZiB3ZSBwcm9maWxl
IGNlcnRhaW4gcmVzb2x2ZSB0eXBlcywgd2UncmUgZ2F1cmFudGVlZCBhbGwgbGlua2VkIGNvZGUg
d2lsbCBoYXZlIHRoZSBzYW1lCi0gICAgLy8gcmVzb2x2ZSB0eXBlLgorICAgIGNvbnN0ZXhwciBH
UFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BS
ID0gcmVnVDY7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1
OwogCi0gICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSAKLSAgICAgICAg
bG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkxleGljYWxFbnZpcm9ubWVudCgpLCByZWdUMCk7CisgICAgaWYgKHJlc29sdmVUeXBl
ID09IE1vZHVsZVZhcikKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4
aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOwogICAgIGVsc2UgewotICAgICAgICBwdHJk
aWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9m
ZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7Ci0KLSAgICAgICAgYXV0byBjbG9zdXJlVmFy
R2VuZXJhdG9yID0gW10gKFZNJiB2bSkgewotICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJh
dGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9wX3Jlc29s
dmVfc2NvcGUgQ2xvc3VyZVZhciIpOwotICAgICAgICB9OwotCi0gICAgICAgIGF1dG8gY2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUg
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MiKTsKLSAgICAgICAgfTsKKyAgICAgICAg
cHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFU
YWJsZSgmbWV0YWRhdGEpOwogCi0gICAgICAgIGF1dG8gZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVy
YXRvciA9IFtdIChWTSYgdm0pIHsKLSAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BS
ZXNvbHZlU2NvcGVUaHVuayh2bSwgc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVf
c2NvcGUgZ2VuZXJpYyIpOworI2RlZmluZSBSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZl
VHlwZSkgb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCisgICAgICAg
IHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7CisgICAgICAgICAg
ICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCiAgICAgICAg
IH07Ci0KLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1QyOwotICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyN1bmRlZiBSRVNPTFZFX1NDT1BF
X0dFTkVSQVRPUgogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3Bl
R1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRh
dGFHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGNvZGU7Ci0gICAgICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVW
YXIpCi0gICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9y
KTsKLSAgICAgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVy
YXRvcik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKKyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0
b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICB9CiAKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mIHZt
LCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1
bmtOYW1lKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVy
YXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hh
ciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5j
dGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UK
ICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0
IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZH
L0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0
cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0K
LSAgICBDQ2FsbEhlbHBlcnMgaml0OwotCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcFJlc29sdmVT
Y29wZTo6TWV0YWRhdGE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Qy
OyAvLyBpbmNvbWluZwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsgLy8g
aW5jb21pbmcKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7IC8vIGlu
Y29taW5nCisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OyAvLyBpbmNvbWlu
ZwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsgLy8gaW5j
b21pbmcgLSBwYXNzIHRocnUgdG8gc2xvdyBwYXRoLgorICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xv
YmFsT2JqZWN0R1BSID0gcmVnVDQ7CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKKyAgICBSRUxFQVNFX0FTU0VSVCh0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29s
dmVUeXBlKSk7CiAKLSAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworICAgIHRhZ1JldHVybkFk
ZHJlc3MoKTsKIAotICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDMpOwotICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9j
azo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgaml0LmFkZFB0cihyZWdU
MywgbWV0YWRhdGFHUFIpOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMyk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGFkZFB0cihyZWdUMywgbWV0
YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGRvVmFySW5q
ZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBn
bG9iYWxPYmplY3RHUFIgPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgYXV0byBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBnbG9i
YWxPYmplY3RHUFIgPSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgIGlmICghbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChnbG9iYWxPYmpl
Y3RHUFIgPT0gSW52YWxpZEdQUlJlZykgewogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0g
cmVnVDQ7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVn
VDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7
CisgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDMpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICB9Ci0g
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0g
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywg
V2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0
ZWQpKSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9P
RkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1Qz
KTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMs
IFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSkpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewotICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzY29wZUdQ
UiA9PSByZWdUMCk7Ci0gICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0
YWRhdGE6Om9mZnNldE9mTG9jYWxTY29wZURlcHRoKCkpLCByZWdUMSk7Ci0KLSAgICAgICAgTGFi
ZWwgbG9vcCA9IGppdC5sYWJlbCgpOwotICAgICAgICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVz
dDMyKFplcm8sIHJlZ1QxKTsKLSAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNT
Y29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgICAgIGppdC5zdWIzMihUcnVzdGVk
SW1tMzIoMSksIHJlZ1QxKTsKLSAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7
Ci0gICAgICAgIGRvbmUubGluaygmaml0KTsKKyAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDAp
OworICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX2xvY2FsU2NvcGVEZXB0aCkpLCByZWdUMSk7CisKKyAgICAgICAgTGFiZWwgbG9v
cCA9IGxhYmVsKCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdU
MSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29w
ZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1t
MzIoMSksIHJlZ1QxKTsKKyAgICAgICAgICAgIGp1bXAoKS5saW5rVG8obG9vcCwgdGhpcyk7Cisg
ICAgICAgIH0KKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH07CiAKICAgICBhdXRvIGVt
aXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewpAQCAtMjA1OSwxMSArMTg4
MiwxMiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJh
dGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiB2bSwgcwogICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
ewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxv
YWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkuCi0gICAgICAgICAgICBqaXQubG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBqaXQubG9h
ZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkdsb2JhbExleGljYWxC
aW5kaW5nRXBvY2goKSksIHJlZ1QxKTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQu
YnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRP
Zkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CisgICAgICAgICAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xvYmFsT2JqZWN0R1BS
KTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoTWV0YWRhdGEsIG1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCkpLCByZWdUMSk7CisgICAg
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoZ2xvYmFs
T2JqZWN0R1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vw
b2NoKCkpLCByZWdUMSkpOworICAgICAgICAgICAgbW92ZShnbG9iYWxPYmplY3RHUFIsIHJlZ1Qw
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTIwNzMsMTEgKzE4OTcsMTEg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BS
ZXNvbHZlU2NvcGVUaHVuayhWTSYgdm0sIHMKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3Rh
bnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9y
IEdsb2JhbFZhciosCiAgICAgICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIqLgotICAg
ICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZWdUMCk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxv
Y2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBkb1Zhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDAp
OworICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2Nr
OjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDAp
OwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAg
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9m
ZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CisgICAgICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKQEAgLTIwODUsNyArMTkwOSw3IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNj
b3BlVGh1bmsoVk0mIHZtLCBzCiAgICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAo
KSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1
bGVWYXI6CkBAIC0yMDk1LDQ1ICsxOTE5LDgzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mIHZtLCBzCiAg
ICAgICAgIH0KICAgICB9OwogCi0gICAgaWYgKHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUKCpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9PSBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIGVtaXRDb2RlKCpyZXNv
bHZlVHlwZSk7Ci0gICAgfSBlbHNlIHsKKyAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CisgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKKyAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGppdC5s
b2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUmVzb2x2ZVR5cGUo
KSksIHJlZ1QxKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9P
RkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7CiAKLSAgICAgICAgYXV0
byBlbWl0Q2FzZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgICAg
IEp1bXAgbm90Q2FzZSA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0z
MihyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAg
ICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKLSAgICAgICAgICAgIG5vdENh
c2UubGluaygmaml0KTsKLSAgICAgICAgfTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7
CisgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwogCi0gICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcik7Ci0gICAgICAgIGVtaXRD
YXNlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcik7
Ci0gICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAg
ICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAg
ICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0g
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsUHJv
cGVydHkubGluayh0aGlzKTsKKyAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mg
OiBHbG9iYWxMZXhpY2FsVmFyKTsKIAotICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKKyAg
ICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBj
YXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKKyAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOworICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKIAotICAgIGppdC5yZXQoKTsKKyAgICAgICAgSnVtcCBu
b3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKKyAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxQcm9wZXJ0
eS5saW5rKHRoaXMpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIHBhdGNoQnVmZmVyLmxp
bmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoc2xvd19vcF9yZXNv
bHZlX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICAgICAg
SnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZh
cik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFs
TGV4aWNhbFZhci5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1p
dENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworCisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1w
KCkpOworICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICByZXQoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwor
ICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2
ZV9zY29wZUdlbmVyYXRvcik7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxv
Y2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwog
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1
bmtOYW1lKTsKIH0KIAorI2RlZmluZSBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVz
b2x2ZVR5cGUpIFwKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpv
cF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKKyAgICB7
IFwKKyAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShy
ZXNvbHZlVHlwZSkpIFwKKyAgICAgICAgICAgIHJldHVybiB7IH07IFwKKyAgICAgICAgSklUIGpp
dCh2bSk7IFwKKyAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmso
cmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlwZSk7
IFwKKyAgICB9CitGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVfR0VO
RVJBVE9SKQorI3VuZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgorCiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3Bl
R2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMg
ZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNh
dXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9i
amVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8v
IERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9i
amVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgotICAgIENDYWxsSGVscGVycyBqaXQ7CisgICAgSklUIGppdCh2bSk7CiAKICAgICAvLyBUaGUg
ZmFzdCBwYXRoIGFscmVhZHkgcHVzaGVkIHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUoWDg2
XzY0KQpAQCAtMjE0MiwyMSArMjAwNCwxNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJiB2bQogICAg
IGppdC5wdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKICNlbmRp
ZgogCi0gICAgY29uc3RleHByIEdQUlJlZyBpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSID0gcmVn
VDU7Ci0gICAgaml0LnN0b3JlMzIoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIGppdC5zdG9yZTMyKGJ5dGVj
b2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgY29kZUJsb2NrR1BSID0gYXJndW1lbnRH
UFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIw
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgaW5zdHJ1Y3Rpb25HUFIgPSBhcmd1bWVudEdQUjE7CiAK
LSAgICBzdGF0aWNfYXNzZXJ0KGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgIT0gY29kZUJsb2Nr
R1BSKTsKLSAgICBzdGF0aWNfYXNzZXJ0KGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgIT0gZ2xv
YmFsT2JqZWN0R1BSKTsKLSAgICBzdGF0aWNfYXNzZXJ0KGluY29taW5nQnl0ZWNvZGVPZmZzZXRH
UFIgIT0gaW5zdHJ1Y3Rpb25HUFIpOwotCiAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOwogICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBn
bG9iYWxPYmplY3RHUFIpOwogICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBD
b2RlQmxvY2s6Om9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgaW5zdHJ1Y3Rpb25H
UFIpOwotICAgIGppdC5hZGRQdHIoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiwgaW5zdHJ1Y3Rp
b25HUFIpOworICAgIGppdC5hZGRQdHIoYnl0ZWNvZGVPZmZzZXRHUFIsIGluc3RydWN0aW9uR1BS
KTsKIAogICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25SZXNvbHZlU2Nv
cGVGb3JCYXNlbGluZSk+KGdsb2JhbE9iamVjdEdQUiwgaW5zdHJ1Y3Rpb25HUFIpOwogICAgIGpp
dC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CkBAIC0yMTc2LDcgKzIwMzQsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3Bl
R2VuZXJhdG9yKFZNJiB2bQogICAgIHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENv
ZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxp
bmU6IHNsb3dfb3BfcmVzb2x2ZV9zY29wZSIpOwogfQotI2VuZGlmIC8vICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogdm9pZCBK
SVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3Ry
dWN0dXJlKiogc3RydWN0dXJlU2xvdCkKIHsKQEAgLTIyMDgsNzUgKzIwNjYsNTggQEAgdm9pZCBK
SVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9w
ZXJhbmQpCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Nj
b3BlOwotICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLQot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMjsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Ci0KLSAgICBKdW1wTGlzdCBzbG93Q2FzZTsKKyAg
ICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZl
VHlwZSgpOworICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVj
dHVyZS5zbG90KCk7CisgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKLSAgICBhdXRvIGRvVmFySW5q
ZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKLSAgICAg
ICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNo
cG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwg
QWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7Ci0gICAgfTsKLSAgICAKLSAgICBhdXRvIGVtaXRDb2RlID0g
WyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgeworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0g
KFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsK
ICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
ewotICAgICAgICAgICAgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNp
bmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFs
T2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3Ig
dGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1Qx
KTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1Qx
KSk7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5j
aDMyKE5vdEVxdWFsLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMSkpOworICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2Nv
cGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rp
b24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBH
bG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5n
IGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDA7
CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7CisgICAgICAgICAgICBHUFJSZWcg
b2Zmc2V0ID0gcmVnVDE7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwogCiAg
ICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBK
dW1wIHsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICAg
ICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCByZWdUMyk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgYmFzZSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAg
ICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDEpOwotCisgICAgICAgICAgICBsb2FkMzIob3BlcmFu
ZFNsb3QsIG9mZnNldCk7CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAg
ICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFs
LCByZWdUMSwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgICAg
ICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zm
c2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKICAgICAgICAgICAgICAg
ICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwogICAgICAgICAgICAg
ICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
cmVnVDApOwotICAgICAgICAgICAgbmVnMzIocmVnVDEpOwotICAgICAgICAgICAgc2lnbkV4dGVu
ZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVn
VDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpLCByZWdUMCk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
YmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgICAgICAg
ICBuZWczMihvZmZzZXQpOworICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBv
ZmZzZXQpOworICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRp
bWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSksIHJlc3VsdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBkb1ZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAg
ICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEZyb21TY29wZTo6TWV0YWRh
dGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKHJlZ1Qw
LCByZWdUMCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRG
b3JPcGVyYW5kKQorICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVy
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nh
c3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZFB0ckZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJh
bmQoKSwgcmVnVDMpOwotICAgICAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDMgPT0gc2l6ZW9m
KFJlZ2lzdGVyKSk7Ci0gICAgICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIHJlZ1Qz
KTsKLSAgICAgICAgICAgIGFkZFB0cihzY29wZUdQUiwgcmVnVDMpOwotICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QzLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJs
ZXMoKSksIHJlZ1QwKTsKLQorICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0R2V0Q2xv
c3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAt
MjI4NiwxODkgKzIxMjcsMjExIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIH0KICAgICB9Owog
Ci0gICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCBwcm9maWxlZFJl
c29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICBl
bWl0Q29kZShwcm9maWxlZFJlc29sdmVUeXBlKTsKLSAgICBlbHNlIHsKKyAgICBzd2l0Y2ggKHJl
c29sdmVUeXBlKSB7CisgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKKyAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9F
bmQ7Ci0gICAgICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRGcm9tU2NvcGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSwgcmVnVDApOworICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwogICAgICAgICBhbmQzMihUcnVzdGVkSW1t
MzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50
byBUMAogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFZh
cik7CisgICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIGVtaXRDb2RlKHJl
c29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAg
ICAgICAgbm90R2xvYmFsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsodGhp
cyk7CisgICAgICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKKyAgICAgICAgZW1p
dENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKKwor
ICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgorICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7CisgICAg
ICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7CisgICAgICAgIGFuZDMy
KFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNv
bHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNo
MzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKICAgICAgICAg
SnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1p
dENvZGUoR2xvYmFsUHJvcGVydHkpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwg
ZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAogICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXIpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKICAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxp
bmsodGhpcyk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKIAogICAgICAgICBza2lwVG9FbmQubGluayh0
aGlzKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2Up
OwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJv
bVNjb3BlPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAot
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBhcmd1bWVudEdQ
UjAsIGluc3RydWN0aW9uKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEZyb21TY29wZT4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25H
ZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCi0jZWxzZQorI2Vsc2UgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCisKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CisgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5
dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZl
VHlwZSgpOworICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJ
bmZvLnJlc29sdmVUeXBlKCk7CiAKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VS
VChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAg
IEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRl
eCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAg
YXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgewotICAgICAgICByZXR1cm4g
SklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXIsICJCYXNlbGlu
ZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOwotICAgIH07Ci0KLSAgICBhdXRvIGNs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgewot
ICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0sIENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3Bl
IENsb3N1cmVWYXIiKTsKLSAgICB9OwotCi0gICAgYXV0byBnZW5lcmljR2V0RnJvbVNjb3BlR2Vu
ZXJhdG9yID0gW10gKFZNJiB2bSkgewotICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0
RnJvbVNjb3BlVGh1bmsodm0sIHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9z
Y29wZSBnZW5lcmljIik7Ci0gICAgfTsKLQotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFH
UFIgPSByZWdUNDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDI7CisgICAg
Y29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NvcGVHUFIgPSByZWdUNjsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gcmVnVDU7CiAKLSAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2Vk
Q29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7Ci0K
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwotICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgIGlmIChy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIpIHsKKyAgICAgICAgdWludHB0cl90KiBvcGVyYW5kU2xv
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7Cisg
ICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVy
YW5kU2xvdCksIHJlZ1QwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwdHJkaWZmX3QgbWV0YWRh
dGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7
CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7Ci0gICAg
aWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKLSAgICAgICAgY29kZSA9IHZt
LmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7Ci0gICAgZWxzZSBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAg
Y29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5l
cmF0b3IpOwotICAgIGVsc2UKLSAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY0dl
dEZyb21TY29wZUdlbmVyYXRvcik7CisjZGVmaW5lIEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihy
ZXNvbHZlVHlwZSkgb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAor
ICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0geworICAg
ICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikK
KyAgICAgICAgfTsKKyN1bmRlZiBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKIAotICAgIGVtaXRO
YWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIH0KICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlvbmFsPFJlc29s
dmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQorTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVu
ayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAg
IC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdp
dGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1
bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9t
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0
aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRj
aAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBP
cEdldEZyb21TY29wZTo6TWV0YWRhdGE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQ
UiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMjsKLQotICAg
IENDYWxsSGVscGVycyBqaXQ7CisgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJl
Z1Q3OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKKyAgICBSRUxFQVNF
X0FTU0VSVCh0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSk7CiAKLSAg
ICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAg
IGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OwotICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRh
ZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIp
OworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRh
dGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAg
ICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBb
Jl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICBhdXRvIGVtaXRMb2FkV2l0
aFN0cnVjdHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIGludDMyX3QgbWV0YWRhdGFT
dHJ1Y3R1cmVPZmZzZXQpIHsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBt
ZXRhZGF0YVN0cnVjdHVyZU9mZnNldCksIHJlZ1QxKTsKKyAgICAgICAgbW92ZShzY29wZUdQUiwg
cmVnVDApOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdU
MSkpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90
RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qx
KSk7CisgICAgfTsKKworICAgIGF1dG8gZW1pdFZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CiAgICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGppdC5sb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMyk7Ci0gICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRP
RihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBX
YXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRl
ZCkpKTsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QzKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9m
ZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNo
cG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwg
QWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAgfTsKICAgICAKLSAgICBhdXRvIGVtaXRDb2RlID0g
WyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgeworICAgIGF1dG8gZW1pdEdldFZhckZyb21Q
b2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsKKyAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsKKyAgICAgICAgbG9hZFB0
cihyZWcsIHJlZyk7CisgICAgfTsKKworICAgIGF1dG8gZW1pdEdldFZhckZyb21JbmRpcmVjdFBv
aW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgeworICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOworICAgICAgICBsb2FkUHRy
KHJlZywgcmVnKTsKKyAgICB9OworCisgICAgYXV0byBlbWl0R2V0Q2xvc3VyZVZhciA9IFsmXSAo
R1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgb3BlcmFuZEdQUikgeworICAgICAgICBzdGF0aWNfYXNz
ZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3Rl
ZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5k
R1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNhbEVudmly
b25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOworICAgIH07CisKKyAgICBhdXRv
IGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExv
YWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMg
dmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGlu
ZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRs
ZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRP
ZlN0cnVjdHVyZSgpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5i
cmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJl
c3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICAg
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Moc2Nv
cGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7Ci0KLSAgICAgICAg
ICAgIGppdC5qaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1w
IHsKLSAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCByZWdUMyk7
Ci0gICAgICAgICAgICB9KSk7CisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVj
ayhzY29wZUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3N0cnVjdHVyZSkpOyAvLyBT
dHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUg
c3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxs
eSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4K
KworICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlID0gcmVnVDA7CisgICAgICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOworICAgICAgICAgICAgY29uc3RleHBy
IEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKKyAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaCA9IHJlZ1QyOwogCi0gICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMSk7CisgICAgICAgICAgICBq
aXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAg
ICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDMpOworICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2Nr
OjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVy
biBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIH0pKTsKIAorICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fb3BlcmFuZCkpLCBvZmZzZXQpOwogICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFC
TEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGppdC5icmFuY2gzMihH
cmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQpKTsKLSAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90
T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKCZqaXQpOworICAg
ICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1
YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAg
ICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKKyAgICAg
ICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwogICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBqaXQubmVnMzIocmVnVDEpOwotICAgICAg
ICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgICAgICAgICBq
aXQubG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9m
TGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlZ1QwKTsKKyAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBzY3JhdGNoKTsKKyAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7CisgICAgICAgICAgICBzaWdu
RXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7CisgICAgICAgICAgICBsb2FkNjQoQmFzZUlu
ZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0g
MikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZh
cjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoK
LSAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFH
UFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGpp
dC5sb2FkUHRyKHJlZ1QwLCByZWdUMCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGlm
IChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQorICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9t
SW5kaXJlY3RQb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVn
VDApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9p
bnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKICAgICAg
ICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBl
ID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2su
Ci0gICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hJZkVtcHR5KHJlZ1Qw
KSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDAp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAg
IGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBkb1Zh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0g
ICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCAgTWV0YWRhdGE6Om9m
ZnNldE9mT3BlcmFuZCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8
IDMgPT0gc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgICAgICBqaXQubHNoaWZ0NjQoVHJ1c3Rl
ZEltbTMyKDMpLCByZWdUMyk7Ci0gICAgICAgICAgICBqaXQuYWRkUHRyKHNjb3BlR1BSLCByZWdU
Myk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBKU0xleGljYWxFbnZp
cm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKLQorICAgICAgICAgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7
CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRP
RihNZXRhZGF0YSwgbV9vcGVyYW5kKSksIHJlZ1QzKTsKKyAgICAgICAgICAgIGVtaXRHZXRDbG9z
dXJlVmFyKHNjb3BlR1BSLCByZWdUMyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOworICAg
ICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpA
QCAtMjQ3OCw2MyArMjM0MSw4NiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiB2bSwgcwogICAgICAgICB9
CiAgICAgfTsKIAotICAgIGlmIChyZXNvbHZlVHlwZSkgewotICAgICAgICBSRUxFQVNFX0FTU0VS
VCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUp
OwotICAgIH0gZWxzZSB7CisgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgeworICAgIGNhc2UgR2xv
YmFsUHJvcGVydHk6CisgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBqaXQubG9hZDMyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSksIHJlZ1Qw
KTsKLSAgICAgICAgaml0LmFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyks
IHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBub3RH
bG9iYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7Ci0gICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoaml0Lmp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFZhci5saW5rKCZqaXQpOwot
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGppdC5icmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOwotICAgICAgICBub3RH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsoJmppdCk7Ci0KLSAgICAgICAgSnVtcCBpc0ds
b2JhbFByb3BlcnR5ID0gaml0LmJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9w
ZXJ0eS5saW5rKCZqaXQpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7Ci0gICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJl
Z1QwKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwg
cmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFy
KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKLSAgICAgICAgbm90R2xv
YmFsTGV4aWNhbFZhci5saW5rKCZqaXQpOworICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVy
dHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkp
OworICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOworICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1p
dENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsKKyAgICAgICAgaXNOb3RHbG9iYWxQcm9wZXJ0
eS5saW5rKHRoaXMpOworICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEds
b2JhbExleGljYWxWYXIsIHRydWUpOworCisgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CisgICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAg
IEp1bXBMaXN0IHNraXBUb0VuZDsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsKKyAgICAg
ICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBM
b2FkIFJlc29sdmVUeXBlIGludG8gVDAKKworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwor
ICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOworICAg
ICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOworICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bnMubGluayh0aGlzKTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7Cisg
ICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhciwgdHJ1ZSk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
KyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIHNraXBU
b0VuZC5saW5rKCZqaXQpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKKworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgp
KTsKKworICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsK
KyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgc3RhdGljX2Fzc2VydChWYWx1ZVByb2ZpbGU6
Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyht
ZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpICsgVmFsdWVQcm9maWxlOjpv
ZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKKyAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFk
YXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsKIAotICAgIGpp
dC5yZXQoKTsKKyAgICByZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBH
TE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBwYXRjaEJ1
ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOworICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKKyNkZWZpbmUgREVGSU5FX0dF
VF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAorTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUj
I0dlbmVyYXRvcihWTSYgdm0pIFwKKyAgICB7IFwKKyAgICAgICAgaWYgY29uc3RleHByICghdGh1
bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpIFwKKyAgICAgICAgICAgIHJl
dHVybiB7IH07IFwKKyAgICAgICAgSklUIGppdCh2bSk7IFwKKyAgICAgICAgcmV0dXJuIGppdC5n
ZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfZ2V0
X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCisgICAgfQorRk9SX0VBQ0hfUkVTT0xWRV9U
WVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCisjdW5kZWYgREVGSU5FX0dFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUgorCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAg
Ly8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0
aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rp
b25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNo
CiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBDQ2FsbEhlbHBlcnMgaml0Owor
ICAgIEpJVCBqaXQodm0pOwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdp
c3RlcnM6OmVicCk7CkBAIC0yNTQzLDI0ICsyNDI5LDE4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZN
JiB2CiAjZW5kaWYKIAogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFk
YXRhOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNDsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKLSAgICBqaXQu
c3RvcmUzMihpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFk
YXRhR1BSID0gcmVnVDc7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9
IHJlZ1Q1OworICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKIAogICAgIGNvbnN0ZXhwciBH
UFJSZWcgY29kZUJsb2NrR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgaW5z
dHJ1Y3Rpb25HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgc3RhdGljX2Fzc2VydChpbmNvbWluZ0J5
dGVjb2RlT2Zmc2V0R1BSICE9IGNvZGVCbG9ja0dQUik7Ci0gICAgc3RhdGljX2Fzc2VydChpbmNv
bWluZ0J5dGVjb2RlT2Zmc2V0R1BSICE9IGdsb2JhbE9iamVjdEdQUik7Ci0gICAgc3RhdGljX2Fz
c2VydChpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSICE9IGluc3RydWN0aW9uR1BSKTsKLSAgICBz
dGF0aWNfYXNzZXJ0KG1ldGFkYXRhR1BSICE9IGNvZGVCbG9ja0dQUik7Ci0gICAgc3RhdGljX2Fz
c2VydChtZXRhZGF0YUdQUiAhPSBnbG9iYWxPYmplY3RHUFIpOwotICAgIHN0YXRpY19hc3NlcnQo
bWV0YWRhdGFHUFIgIT0gaW5zdHJ1Y3Rpb25HUFIpOwogCiAgICAgaml0LmxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOwogICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoY29kZUJs
b2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgaW5z
dHJ1Y3Rpb25HUFIpOwotICAgIGppdC5hZGRQdHIoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiwg
aW5zdHJ1Y3Rpb25HUFIpOworICAgIGppdC5hZGRQdHIoYnl0ZWNvZGVPZmZzZXRHUFIsIGluc3Ry
dWN0aW9uR1BSKTsKIAogICAgIEFTU0VSVChSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cygpLmNvbnRhaW5zKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKSk7CiAgICAgaml0Lm1vdmUo
bWV0YWRhdGFHUFIsIEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsgLy8gUHJlc2VydmUgbWV0
YWRhdGEgaW4gYSBjYWxsZWUgc2F2ZWQgcmVnaXN0ZXIuCkBAIC0yNTY5LDcgKzI0NDksNyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJv
bV9zY29wZUdlbmVyYXRvcihWTSYgdgogICAgIENhbGwgb3BlcmF0aW9uID0gaml0LmNhbGwoT3Bl
cmF0aW9uUHRyVGFnKTsKICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gaml0LmVtaXROb25QYXRj
aGFibGVFeGNlcHRpb25DaGVjayh2bSk7CiAKLSAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVz
cyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgp
ICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKKyAgICBqaXQuc3RvcmU2
NChyZWdUMCwgQWRkcmVzcyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtX3Byb2ZpbGUpKSk7CiAgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6Ok51bWJlclRhZyksIEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsKIAogI2lmIENQ
VShYODZfNjQpCkBAIC0yNTg5LDc4ICsyNDY5LDg4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJiB2
CiAgICAgcGF0Y2hCdWZmZXIubGluayhqdW1wVG9IYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbCho
YW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBzbG93X29wX2dldF9m
cm9tX3Njb3BlIik7CiB9Ci0jZW5kaWYgLy8gIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorCit2b2lkIEpJVDo6ZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hw
b2ludFNldCogc2V0KQoreworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKKyAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKKyAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFu
ZCk7Cit9Cit2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoq
IGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoq
IGluZGlyZWN0V2F0Y2hwb2ludFNldCkKK3sKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CisgICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsK
KyAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEpOworICAgIGxvYWRQdHIoYWRkcmVzc09mT3BlcmFu
ZCwgcmVnVDEpOworICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5k
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKK3sKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY29wZSwgcmVnVDApOworICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOworICAgIHN0b3Jl
UHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZW
YXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Cit9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
VG9TY29wZT4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgR2V0UHV0
SW5mbyBnZXRQdXRJbmZvID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSk7CisgICAgUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgU3RydWN0
dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKKyAgICB1
aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0
YWRhdGEubV9vcGVyYW5kKTsKIAotICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUg
PSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVz
b2x2ZVR5cGUoKTsKLQotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlKSB7CisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29s
dmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICAvLyBTdHJ1
Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3Ry
dWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuCi0gICAgICAgICAgICAv
LyBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZh
ciBpbmplY3Rpb24uCi0gICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBP
cFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCByZWdUMSk7Ci0gICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgICAgICAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDEpOwotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7Ci0KKyAgICAgICAg
ICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8g
U3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hl
IHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFs
bHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24u
CiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAKICAg
ICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1
bXAgewotICAgICAgICAgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwotICAgICAgICAg
ICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMyk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVn
VDMpOwotICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Nj
b3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDAp
OworICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOwogICAgICAgICAgICAg
bmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVn
VDMsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpKTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUs
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwg
QmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBlbWl0V3JpdGVC
YXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZh
bHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFs
VmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAg
ICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwotICAgICAg
ICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUsIHJlZ1QwKTsKLQotICAgICAg
ICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QwKTsKLQotICAgICAgICAgICAgaWYgKCFpc0luaXRp
YWxpemF0aW9uKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYg
KHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CisgICAgICAgICAgICBKU1Njb3Bl
KiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNv
bHZlVHlwZSwgbV9jb2RlQmxvY2spOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3Rh
bnRTY29wZSk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNo
ZWNrKHJlc29sdmVUeXBlKTsKKyAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQ
dXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNr
IGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBj
aGVja3Mgc3RhdGljYWxseS4KLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAp
LCByZWdUMSk7Ci0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdU
MSkpOworICAgICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQorICAgICAg
ICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNW
YWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGxv
YWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNl
dE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMSk7Ci0gICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVX
YXRjaHBvaW50KHJlZ1QxKTsKLQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDEpOwotICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCkp
OwotCi0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOworICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCisgICAg
ICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpT
VmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxl
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1f
d2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2Nv
cGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9z
dXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgot
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSwgcmVnVDApOwotCi0gICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQo
KSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQ
dXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QyKTsKLSAgICAgICAg
ICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDApOwotICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQmFz
ZUluZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9m
ZnNldE9mVmFyaWFibGVzKCkpKTsKLQorICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0
UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgbWV0YWRhdGEubV93YXRj
aHBvaW50U2V0KTsKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBT
aG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNb2R1
bGVWYXI6CkBAIC0yNjc0LDUyICsyNTY0LDU4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICB9CiAg
ICAgfTsKIAotICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNlZXMgQ2xvc3VyZVZhci8g
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRoZW4gd2UgY2FuIGNvbXBpbGUgdGhp
bmdzCi0gICAgLy8gdGhhdCB3YXkgZm9yIGFsbCBDb2RlQmxvY2tzLCBzaW5jZSB3ZSd2ZSBwcm92
ZW4gdGhhdCBpcyB0aGUgdHlwZSB3ZSB3aWxsIGJlLiBJZiB3ZSdyZSBhIENsb3N1cmVWYXIsCi0g
ICAgLy8gYWxsIENvZGVCbG9ja3Mgd2lsbCBiZSBDbG9zdXJlVmFyLiBJZiB3ZSdyZSBDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgd2UncmUgYWx3YXlzIENsb3N1cmVWYXIKLSAgICAv
LyBpZiB0aGUgdmFyIGluamVjdGlvbiB3YXRjaHBvaW50IGlzbid0IGZpcmVkLiBJZiBpdCBpcyBm
aXJlZCwgdGhlbiB3ZSB0YWtlIHRoZSBzbG93IHBhdGgsIHNvIGl0IGRvZXNuJ3QKLSAgICAvLyBt
YXR0ZXIgd2hhdCB0eXBlIHdlIGFyZSBkeW5hbWljYWxseS4KLSAgICBpZiAocHJvZmlsZWRSZXNv
bHZlVHlwZSA9PSBDbG9zdXJlVmFyKQotICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyKTsKLSAg
ICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhcikKLSAg
ICAgICAgZW1pdENvZGUoUmVzb2x2ZWRDbG9zdXJlVmFyKTsKLSAgICBlbHNlIGlmIChwcm9maWxl
ZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAg
ICBlbWl0Q29kZShDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgZWxzZSB7
CisgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgeworICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Cisg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAg
SnVtcExpc3Qgc2tpcFRvRW5kOworICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5m
bywgcmVnVDApOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJp
dHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorCisgICAgICAgIEp1bXAg
aXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJl
c29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxM
ZXhpY2FsVmFyKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0
IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRp
YWxpemVkIGNvbnN0IGJpbmRpbmcuCisKKyAgICAgICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmso
dGhpcyk7CisgICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4
aWNhbFZhciwgdHJ1ZSk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKworICAg
ICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRDb2RlKHJlc29s
dmVUeXBlLCBmYWxzZSk7CisgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CisgICAgY2FzZSBVbnJl
c29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0
IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRv
U2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSwgcmVnVDApOworICAgICAgICBs
b2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwogICAgICAgICBhbmQzMihUcnVz
dGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5
cGUgaW50byBUMAogCiAgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAgICAgIEp1bXAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykp
OwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNl
KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RH
bG9iYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxW
YXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKLSAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxWYXIubGluayh0aGlzKTsKLQotICAgICAg
ICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24gPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0g
ICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb24ubGluayh0aGlzKTsKLQogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBlbWl0Q29k
ZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKICAgICAgICAg
SnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwog
ICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsK
IAogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5r
KHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICBl
bWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOworICAgICAgICBicmVhazsKICAgICB9CiB9CiAK
QEAgLTI3MjgsMjEgKzI2MjQsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3IKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2
ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dElu
Zm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVW
YXIpIHsKLSAgICAgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2F3IGEgTW9kdWxlVmFy
LCB0aGVuIGFsbCBsaW5rZWQgQ29kZUJsb2NrcyBhcmUgZ3VhcmFudGVlZAotICAgICAgICAvLyB0
byBhbHNvIHNlZSBNb2R1bGVWYXIuCisgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3Bp
ZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOworICAgIGlmIChyZXNvbHZlVHlw
ZSA9PSBNb2R1bGVWYXIpIHsKICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0
aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF90aHJvd19zdHJpY3RfbW9kZV9yZWFk
b25seV9wcm9wZXJ0eV93cml0ZV9lcnJvcik7CiAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7
CiAgICAgfSBlbHNlIHsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRUb1Njb3BlLCBhcmd1bWVudEdQUjAsIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogI2Vsc2UKICAg
ICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgICAgIEFTU0VSVChCeXRlY29kZUlu
ZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICBBU1NFUlQo
bV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1
cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICAgICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
CkBAIC0yNzU5LDcgKzI2NTIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6c2xvd19vcF9wdXRfdG9fc2NvcGVHZW5lcmF0b3IoVk0mIHZtKQogICAgIC8vIGl0
IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZh
aWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBp
bmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBt
YXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBDQ2FsbEhl
bHBlcnMgaml0OworICAgIEpJVCBqaXQodm0pOwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQu
cHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yODA4LDcgKzI3MDEsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVn
VDApOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VP
ZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZWdUMCk7
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yODY2LDYgKzI3NTks
NyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVy
bmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxk
PigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5
dGVjb2RlLm1faW5kZXg7CkBAIC0yODczLDcgKzI3NjcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5h
bEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdU
MCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yOTI5LDYgKzI4
MjMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVy
YXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4o
KTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
IAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwpAQCAtMjk0NCwxNyArMjgzOSwxMSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QyOwogCiAgICAgLy8g
VGhpcyBpcyB0aGUgbW9zdCBjb21tb24gbW9kZSBzZXQgd2UgdGVuZCB0byBzZWUsIHNvIHNwZWNp
YWwgY2FzZSBpdCBpZiB3ZSBwcm9maWxlIGl0IGluIHRoZSBMTEludC4KLSAgICBpZiAoYnl0ZWNv
ZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0g
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CisgICAgaWYgKG1l
dGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
T3duU3RydWN0dXJlTW9kZSkgewogICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IHJlZ1Qz
OwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwogICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOwogICAgICAgICBvcGVyYXRp
b25DYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MoZW51bWVyYXRvckdQ
UiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpmbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KCh+SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSAmIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6ZW51bWVyYXRpb25Nb2RlTWFzaykpKTsKICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLQotICAgICAgICBsb2FkOEZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BFbnVtZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVy
YXRvck1ldGFkYXRhKCksIHNjcmF0Y2hHUFIpOwotICAgICAgICBvcjMyKFRydXN0ZWRJbW0zMihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpLCBzY3JhdGNoR1BSKTsK
LSAgICAgICAgc3RvcmU4VG9NZXRhZGF0YShzY3JhdGNoR1BSLCBieXRlY29kZSwgT3BFbnVtZXJh
dG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwotCiAgICAg
ICAgIGxvYWQzMihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSksIGluZGV4R1BSKTsKICAgICAgICAgb3BlcmF0
aW9uQ2FzZXMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBpbmRleEdQUiwgQWRkcmVzcyhiYXNl
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CiAKQEAgLTI5OTIsODggKzI4ODEs
NzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4o
KTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUu
bV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlOYW1lID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eU5hbWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5t
X2VudW1lcmF0b3I7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogCiAgICAgSnVtcExpc3QgZG9uZUNhc2VzOwogCi0gICAgY29uc3RleHByIEdQ
UlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cmVz
dWx0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdl
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVn
aXN0ZXJzOjpzdHViSW5mbzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gQmFzZWxp
bmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gxOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2Ny
YXRjaDI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEJhc2VsaW5lRW51bWVyYXRv
ckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMzsKKyAgICBhdXRvIHJlc3VsdEdQUiA9IHJlZ1Qw
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHNjcmF0Y2gzKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5TmFtZSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVn
VDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CiAK
LSAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1l
dGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNoMik7Ci0gICAgb3Iz
MihzY3JhdGNoMywgc2NyYXRjaDIpOwotICAgIHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRjaDIsIGJ5
dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRv
ck1ldGFkYXRhKCkpOworICAgIG9yOChyZWdUMiwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5t
X2VudW1lcmF0b3JNZXRhZGF0YSkpOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxs
KGJhc2VHUFIpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKICAg
ICAvLyBUaGlzIGlzIGFsd2F5cyBhbiBpbnQzMiBlbmNvZGVkIHZhbHVlLgotICAgIEp1bXAgaXNO
b3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHNjcmF0Y2gzLCBUcnVz
dGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKKyAgICBKdW1wIGlzTm90T3duU3RydWN0
dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OkdlbmVyaWNNb2RlKSk7CiAKICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBzY3JhdGNoMSk7Ci0gICAgbG9hZDMyKEFk
ZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaDIpOwot
ICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaDIs
IEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0
dXJlSURPZmZzZXQoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwg
cmVnVDIpOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMyk7CisgICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAKICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQu
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgc2NyYXRjaDIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QzKTsKICAgICAvLyBJZiBpbmRleCBpcyBsZXNz
IHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBh
biBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92
ZU9yRXF1YWwsIHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBzaWduRXh0ZW5kMzJU
b1B0cihzY3JhdGNoMiwgc2NyYXRjaDIpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwg
c2NyYXRjaDIsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSks
IHJlc3VsdEdQUik7CisgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNh
Y2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpT
T2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICBzaWduRXh0ZW5k
MzJUb1B0cihyZWdUMywgcmVnVDMpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1Qz
LCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKKwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgp
KTsKIAogICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCiAgICAgb3V0T2ZMaW5lQWNj
ZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIGJhc2VHUFIpOwotICAgIHN1YjMyKEFkZHJlc3Moc2NyYXRjaDEs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSks
IHNjcmF0Y2gyKTsKLSAgICBuZWczMihzY3JhdGNoMik7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIo
c2NyYXRjaDIsIHNjcmF0Y2gyKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBy
ZWdUMyk7CisgICAgbmVnMzIocmVnVDMpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QzLCBy
ZWdUMyk7CiAgICAgY29uc3RleHByIGludHB0cl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IG9m
ZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAqIHN0YXRpY19jYXN0PGludHB0
cl90PihzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VH
UFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRH
UFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0LCBvZmZz
ZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVt
cCgpKTsKIAogICAgIHN0cnVjdHVyZU1pc21hdGNoLmxpbmsodGhpcyk7Ci0gICAgc3RvcmU4VG9N
ZXRhZGF0YShUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3du
U3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdl
dEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CisgICAgc3Rv
cmU4KFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1
Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCAmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRh
dGEpOwogCiAgICAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBp
c05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CisgICAgSnVtcCBpc05vdElu
ZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CiAgICAgLy8gUmVwbGFjZSB0aGUgc3RyaW5n
IHdpdGggdGhlIGluZGV4LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHByb3Bl
cnR5R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CiAKICAg
ICBpc05vdEluZGV4ZWQubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2gxKTsKKyAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKIAogICAgIEpJVEdldEJ5VmFs
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVy
dHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7Ci0KLSAgICBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRk
KCk7Ci0gICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDsKLSAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKLSAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwotICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKLSAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87Ci0KLSAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Ci0g
ICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNv
bnNlcnZhdGl2ZWx5IHJlc2V0IFNQCi0gICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHJl
Z1QyKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQorICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIGVsc2UKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIGRvbmVDYXNlcy5saW5rKHRoaXMpOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0z
MDgyLDkgKzI5NjEsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW8KICAgICBnZW5lcmF0ZUdl
dEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZh
bD4oKSwgaXRlcik7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUg
U2xvd1BhdGhGdW5jdGlvblR5cGU+Ci12b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9w
ZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKK3RlbXBs
YXRlIDx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4K
K3ZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgU2xv
d1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCiB7CisgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJh
dG9yOwpAQCAtMzA5Myw5ICsyOTczLDcgQEAgdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNf
cHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24KICAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJl
Z1QwKTsKLSAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCByZWdUMSk7Ci0gICAgb3IzMihyZWdUMCwg
cmVnVDEpOwotICAgIHN0b3JlOFRvTWV0YWRhdGEocmVnVDEsIGJ5dGVjb2RlLCBCeXRlY29kZTo6
TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOworICAgIG9yOChyZWdUMCwg
QWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOwogCiAgICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7CiAKQEAgLTMxODQs
MTMgKzMwNjIsNiBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyKQog
ICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKQotewotICAgIEp1bXAgb3duZXJJc1JlbWVt
YmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHNlbGVjdFNjcmF0Y2hH
UFIob3duZXIpKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25X
cml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsKLSAgICBvd25lcklzUmVtZW1iZXJl
ZE9ySW5FZGVuLmxpbmsodGhpcyk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwCmluZGV4IDVmODYyYTU3ZmUwMDQ3YTZkNTlhYjAxZTY5YmEz
NzVhNWRkYTE2ZTMuLmNiNTczZmQ2NTQ5ZmNmOGYxMzJhMDAyM2Y2NDFkNDA2ODZlMmEyZTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcApAQCAtNTksNyArNTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICBlbWl0TG9h
ZFBheWxvYWQoYmFzZSwgcmVnVDEpOwogICAgIGVtaXRMb2FkUGF5bG9hZChnZXR0ZXIsIHJlZ1Qz
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgbV9wcm9maWxlZENvZGVCbG9jay0+aWRl
bnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IHJlZ1QxLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25z
LCByZWdUMyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKICAgICBlbWl0
TG9hZFBheWxvYWQoc2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRTZXR0ZXJCeUlkLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEs
IG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgb3B0aW9u
cywgcmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
cHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtODcsNyArODcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3Nl
dHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVt
aXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMSk7CiAgICAgZW1pdExvYWRQYXlsb2FkKGdldHRlciwg
cmVnVDMpOwogICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1Q0KTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIHJlZ1QxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3Bl
cnR5KS5pbXBsKCksIGF0dHJpYnV0ZXMsIHJlZ1QzLCByZWdUNCk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
cmVnVDEsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0
ZXMsIHJlZ1QzLCByZWdUNCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDEsNyArMTAx
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDIp
OwogICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkUGF5
bG9hZChnZXR0ZXIsIHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRl
ckJ5VmFsLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDIsIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIGF0dHJpYnV0ZXMsIHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHByb3Bl
cnR5LCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1QzKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IGF0dHJpYnV0ZXMsIHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRl
ckJ5VmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTIz
LDcgKzEyMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0g
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAg
ICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CiAgICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CkBAIC0x
MzEsOCArMTMxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdExvYWQoYmFzZSwgYmFzZVJlZ3MudGFn
R1BSKCksIGJhc2VSZWdzLnBheWxvYWRHUFIoKSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpKTsKICAgICBKSVREZWxCeUlkR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKICAgICAgICAgYmFzZVJlZ3MsIHJl
c3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTE2Niw3
ICsxNjYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHBy
b3BlcnR5LCBwcm9wZXJ0eVJlZ3MudGFnR1BSKCkpOwogCiAgICAgSklURGVsQnlWYWxHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBiYXNlUmVncywgcHJvcGVydHlSZWdzLCBy
ZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7CiAKICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CkBAIC0yMDIsNyArMjAyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMK
IAogICAgIGVtaXRMb2FkMihiYXNlLCBiYXNlUmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9h
ZEdQUigpLCBwcm9wZXJ0eSwgcHJvcGVydHlSZWdzLnRhZ0dQUigpLCBwcm9wZXJ0eVJlZ3MucGF5
bG9hZEdQUigpKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVs
ZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhiYXNlUmVncy50YWdHUFIo
KSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlSZWdzLnRhZ0dQ
UigpLCBwcm9wZXJ0eVJlZ3MucGF5bG9hZEdQUigpKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1f
ZWNtYU1vZGUudmFsdWUoKSkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MoYmFzZVJlZ3MudGFnR1BSKCks
IGJhc2VSZWdzLnBheWxvYWRHUFIoKSksIEpTVmFsdWVSZWdzKHByb3BlcnR5UmVncy50YWdHUFIo
KSwgcHJvcGVydHlSZWdzLnBheWxvYWRHUFIoKSksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2Vj
bWFNb2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgcmVzdWx0UmVncyk7CkBAIC0yMTYs
NyArMjE2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApOwpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsCiAKICAg
ICBlbWl0TG9hZChiYXNlLCBiYXNlUmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQUigp
KTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9w
dGltaXplLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsK
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgYmFzZVJlZ3MsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJ
bW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgcmVz
dWx0UmVncyk7CkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wKIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZENvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CkBAIC0yNDksNyArMjQ5
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDEpOwogICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHBy
b2ZpbGUsIHJlZ1Q0KTsKICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogICAgICAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1Q0KTsKQEAg
LTI1Nyw3ICsyNTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogCiAgICAgICAgIEpJVEdldEJ5VmFsR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9u
bHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCByZXN1bHRSZWdzLCBJbnZhbGlk
R1BSUmVnKTsKICAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAg
ICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwpAQCAtMjY1
LDcgKzI2NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKICAgICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2Nr
KSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICAgICAgZW1pdFN0b3JlKGRz
dCwgcmVnVDEsIHJlZ1QwKTsKICAgICB9CiB9CkBAIC0yNzUsNyArMjc1LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFMKICAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7CiAgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CiAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKKyAg
ICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsK
IAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRC
eVZhbEluZGV4XTsKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8Uwog
ICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIG9wZXJhdGlvbkdl
dEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICAgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKICAgICB9CiB9CkBAIC0z
MDUsMTMgKzMwNSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCisgICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAog
ICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGJhc2VHUFIs
IHByb3BlcnR5R1BSLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
ICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRhZ0dQUigpLCBy
ZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTMzMCw3ICszMzAsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZQogCiAgICAgYXV0byBiYXNlR1BSID0gSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKTsKICAgICBhdXRvIHByb3BlcnR5R1BSID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1p
emUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9w
ZXJ0eUdQUik7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKIH0KIApAQCAtMzQ4LDcgKzM0OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRl
X25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUUHV0QnlWYWxHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIEludmFs
aWRHUFJSZWcsIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlz
U3ltYm9sID0gdHJ1ZTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkBAIC0zNzcs
NyArMzc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmUKICAgICBKU1ZhbHVlUmVncyB2YWx1
ZVJlZ3MocmVnVDUsIHJlZ1Q0KTsKIAogICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0Rl
ZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9w
ZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7Ci0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlUmVncywgcHJvcGVydHlSZWdzLCB2YWx1ZVJlZ3MsIGdl
bi5zdHViSW5mbygpLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKKyAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBiYXNlUmVncywgcHJvcGVydHlSZWdzLCB2YWx1ZVJlZ3MsIGdlbi5zdHViSW5m
bygpLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC0zOTUsNyArMzk1LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgYmFzZVJlZ3Mu
dGFnR1BSKCkpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCiAgICAgICAgIGJhc2VSZWdzLCBicmFuZFJlZ3MsIEludmFsaWRHUFJSZWcp
OwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwpAQCAtNDE4LDcgKzQxOCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9zZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5CiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVC
cmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXhdOwogICAgICsrbV9wcml2YXRl
QnJhbmRBY2Nlc3NJbmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGlt
aXplLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBicmFuZFJlZ3MpOworICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdz
LCBicmFuZFJlZ3MpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CiB9CiAKQEAgLTQzNSw3ICs0MzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19w
cml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpKTsKIAog
ICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fcHJvZmls
ZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQ
cml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKICAgICAgICAgYmFzZVJlZ3MsIGJyYW5kUmVncywgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CkBAIC00NTIsNyArNDUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3By
aXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnQKICAgICBK
SVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNz
ZXNbbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleF07CiAgICAgKyttX3ByaXZhdGVCcmFuZEFjY2Vz
c0luZGV4OwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1
c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBiYXNlUmVncywgYnJhbmRSZWdzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBicmFu
ZFJlZ3MpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CiB9CiAKQEAgLTQ2NSw3ICs0NjUsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklU
OjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTQ3OCw3ICs0NzgsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUNiwg
cmVnVDcpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX3Byb2Zp
bGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5
VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFs
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVS
ZWdzKHJlZ1Q1LCByZWdUNCksIHJlZ1Q2LCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
QEAgLTUwNCw3ICs1MDQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgICAgICBwcm9w
ZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICAgICAgZWNtYU1vZGUgPSBKSVQ6OmVjbWFNb2RlKGJ5dGVjb2RlKTsKLSAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2Nr
KTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgICAgIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsK
IApAQCAtNTI0LDcgKzUyNCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgZW1pdExv
YWQyKGJhc2UsIHJlZ1QyLCByZWdUMSwgcHJvcGVydHksIHJlZ1QzLCByZWdUMCk7CiAgICAgZW1p
dExvYWQodmFsdWUsIHJlZ1Q1LCByZWdUNCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRp
bWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0
aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0
cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEpTVmFsdWVSZWdzKHJlZ1Qy
LCByZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q1LCBy
ZWdUNCksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RP
cHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0
T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdUMiwgcmVn
VDEpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQp
LCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNTM0LDcgKzUzNCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5
SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdExvYWQoYmFzZSwg
cmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVn
VDEpOwpAQCAtNTQyLDEzICs1NDIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogCiAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxv
YWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywgQWNjZXNzVHlwZTo6VHJ5
R2V0QnlJZCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRS
ZWdzLCBJbnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIHJlc3VsdFJl
Z3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRhZ0dQ
UigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTU1OCwxMyArNTU4LDEzIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0
QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2Zp
bGVkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIAogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC01NzUsNyArNTc1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CkBAIC01ODMsMTMgKzU4MywxMyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9wcm9m
aWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAq
aWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJbnZh
bGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdz
OjpwYXlsb2FkT25seShyZWdUMCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5
cGU6OkdldEJ5SWREaXJlY3QpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5k
KGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
cHJvZmlsZWRDb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CiAgICAgZW1p
dFN0b3JlKGRzdCwgcmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkp
OwogfQogCkBAIC01OTksMTMgKzU5OSwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZQogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAg
ICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4Kytd
OwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9w
cm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVz
dWx0VlJlZywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpA
QCAtNjE0LDEwICs2MTQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmUKIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2Rl
QmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKICAgICAKICAgICBlbWl0TG9hZChiYXNl
LCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCBy
ZWdUMSk7CkBAIC02MzAsMTMgKzYzMCwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2Fk
T25seShyZWdUMCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6OkdldEJ5
SWQpOworICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywg
SW52YWxpZEdQUlJlZywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAg
bV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRhZ0dQUigpLCByZXN1bHRS
ZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTY0NiwxMyArNjQ2LDEzIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRC
eUlkSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAg
ICAgCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJl
c3VsdFZSZWcsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1Yklu
Zm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUsIHJlc3VsdFZSZWcsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZv
KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOwogICAgIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CiB9CkBAIC02NjMsNyArNjYzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBi
eXRlY29kZS5tX3RoaXNWYWx1ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9w
cm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKICAgICAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDAp
OwogICAgIGVtaXRMb2FkKHRoaXNWUmVnLCByZWdUNCwgcmVnVDMpOwpAQCAtNjczLDEzICs2NzMs
MTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVnczo6
cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpLCBJbnZhbGlkR1BS
UmVnKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyksIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwogICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIHJlc3Vs
dFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRh
Z0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTY4OSwxMyArNjg5LDEz
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsr
XTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZENvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1
bHRWUmVnLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZv
KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyks
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOwogICAgIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CiB9CkBAIC03MTAsMTUgKzcxMCwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFn
cy5pc0RpcmVjdCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogICAgIAogICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHZhbHVl
LCByZWdUMywgcmVnVDIpOwogICAgIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlLCByZWdUMSk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9w
cm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2Nr
LCAqaWRlbnQpLAorICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KSwKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSW52YWxpZEdQUlJlZywKICAgICAgICAgcmVn
VDEsIGJ5dGVjb2RlLm1fZmxhZ3MuZWNtYU1vZGUoKSwgZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0
IDogUHV0S2luZDo6Tm90RGlyZWN0KTsKICAgICAKQEAgLTczOCw3ICs3MzgsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKIApAQCAtNzQ4LDcgKzc0OCw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2Vu
ID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKICAgICAKICAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKAotICAgICAgICBnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgICAgIGdlbi5zbG93UGF0aEZ1bmN0aW9uKCks
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwogICAgIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC03NTgsMTQgKzc1OCwxNCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdU
MCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAg
IEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJl
Z3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSW52YWxp
ZEdQUlJlZyk7CisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBt
X2luQnlJZHMuYXBwZW5kKGdlbik7CkBAIC03NzksMTMgKzc3OSwxMyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsbwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5k
ZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcs
IG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9w
dGltaXplLCByZXN1bHRWUmVnLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHVi
SW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CiB9CkBAIC03OTYsNyArNzk2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1f
cHJvcGVydHk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2Zp
bGVkQ29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAKICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwg
cmVnVDMsIHJlZ1QyKTsKQEAgLTgwNCw3ICs4MDQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1Q0KTsKIAogICAgIEpJ
VEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHko
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTgxOSwxNCArODE5LDE0IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZENvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1f
YXJyYXlQcm9maWxlOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFs
c1ttX2luQnlWYWxJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1p
emUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKIAogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC04MzcsNyArODM3LDcg
QEAgdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxS
ZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXMKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtODUzLDcgKzg1Myw3IEBAIHZvaWQg
SklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgQWNjZXNzVHlwZSB0
eXBlKQogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFs
SW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUg
PyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJy
YW5kT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRl
TmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAK
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAt
ODkwLDcgKzg5MCw3IEBAIHZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcykKIHsKICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KQogICAgICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1
dGVBZGRyZXNzKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rp
b25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlk
YXRlZCkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Mo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFk
ZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRo
KQpAQCAtOTA2LDcgKzkwNiw3IEBAIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lCiB2b2lkIEpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNv
bHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CkBAIC05MTYsMTEg
KzkxNiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsK
ICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50
U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBt
X3Byb2ZpbGVkQ29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUg
PSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVC
bG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkpOwogICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxC
aW5kaW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5v
dEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdF
cG9jaCgpKSwgcmVnVDEpKTsKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpLCByZWdUMSk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3Rh
bnRTY29wZSksIHJlZ1QwKTsKICAgICAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdU
MCk7CkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBjYXNlIEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IAogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxW
YXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFu
dFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKKyAg
ICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3Bl
Rm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QxKTsKQEAgLTEwMzksNyAr
MTAzOSw3IEBAIHZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIHVpbnRwdHJfdCBvcGVyYW5kKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOworICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0g
bWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CkBAIC0xMTQ2LDcgKzExNDYsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwog
ICAgICAgICBicmVhazsKICAgICB9Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAgIGVtaXRTdG9yZShkc3QsIHJl
Z1QxLCByZWdUMCk7CiB9CiAKQEAgLTExNTYsNyArMTE1Niw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRDb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9wcm9maWxlZENvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0RnJvbVNjb3BlLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudElu
c3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVl
KiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKQEAg
LTExOTAsNyArMTE5MCw3IEBAIHZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnCiB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2Nv
cGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
Q29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgR2V0UHV0
SW5mbyBnZXRQdXRJbmZvID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSk7CkBAIC0xMjAyLDcg
KzEyMDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewog
ICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllciht
X3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZh
bHVlKTsKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgZW1pdExvYWRX
aXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hl
Y2sgY292ZXJzIHZhciBpbmplY3Rpb24uCiAgICAgICAgICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVn
VDMsIHJlZ1QyKTsKICAgICAgICAgICAgIApAQCAtMTIxNyw3ICsxMjE3LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAg
ICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNj
b3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9w
cm9maWxlZENvZGVCbG9jayk7CisgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0g
SlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxv
Y2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAg
ICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJW
YWx1ZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpKTsKQEAgLTEzMTgsNyArMTMxOCw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yCiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywg
Y3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlf
cHJvcGVydHlfd3JpdGVfZXJyb3IpOwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAg
IH0gZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIG1fcHJv
ZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0xMzMzLDcgKzEzMzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVu
dHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0TG9hZFBh
eWxvYWQoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIERpcmVj
dEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSArIFRhZ09mZnNldCksIHJlc3V0bFJlZ3MudGFnR1BSKCkpOwogICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4
ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBQYXlsb2FkT2Zmc2V0KSwgcmVzdXRs
UmVncy5wYXlsb2FkR1BSKCkpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIHJlc3V0bFJlZ3MpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1dGxSZWdz
KTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1dGxSZWdzLnRhZ0dQUigpLCByZXN1dGxSZWdzLnBh
eWxvYWRHUFIoKSk7CiB9CiAKQEAgLTEzNTUsNyArMTM1NSw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAppbmRleCA3ZThjNTMxMmYyZjc1MDkxYzBkY2YwNmQx
ZWM1ZTc3NWVlNGZhYmVmLi43ZjAwMjg5MmRkMWVlYTExYjhhNWUzNjFmODk2YTRkM2IzOTA2Y2Vl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKQEAgLTIzNiw5ICsyMzYsOSBA
QCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqCiAgICAgICAgICAgICBpZiAoaXNKU0FycmF5KGJhc2VD
ZWxsKSkgewogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNo
ZVR5cGU6OlVuc2V0CiAgICAgICAgICAgICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBi
YXNlQ2VsbAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxl
QXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2Vs
bCkpKSB7CisgICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVB
cnJheUxlbmd0aChzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpKSB7CiAKLSAg
ICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNz
OjpnZW5lcmF0ZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5
Kj4oYmFzZUNlbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5s
aW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKHN0dWJJbmZvLCBqc0Nhc3Q8
SlNBcnJheSo+KGJhc2VDZWxsKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRD
b2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxs
KGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24o
a2luZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEFycmF5TGVuZ3Ro
KGxvY2tlcik7CkBAIC0yNDksOCArMjQ5LDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUNhY2hlR2V0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKgogICAg
ICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywg
QWNjZXNzQ2FzZTo6QXJyYXlMZW5ndGgsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICB9IGVs
c2UgaWYgKGlzSlNTdHJpbmcoYmFzZUNlbGwpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJ
bmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAgICAgICAg
JiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJ
bmZvKSkgewotICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJ
bmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8pOwor
ICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVu
Z3RoKHN0dWJJbmZvKSkgeworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJ
bmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKHN0dWJJbmZvKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBw
cm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihraW5kKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHViSW5mby5pbml0U3RyaW5nTGVuZ3RoKGxvY2tlcik7CkBAIC0zMDQsNyArMzA0
LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKgogICAgICAgICAgICAgICAgICYmICFzbG90Lndh
dGNocG9pbnRTZXQoKQogICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoKQogICAgICAgICAgICAgICAgICYmICFsb2FkVGFyZ2V0RnJvbVBy
b3h5KSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBz
dHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIGJvb2wgZ2Vu
ZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nl
c3Moc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAg
ICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgTE9H
X0lDKChJQ0V2ZW50OjpHZXRCeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgSWRl
bnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSwgc2xvdC5zbG90QmFzZSgp
ID09IGJhc2VWYWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0
Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CkBA
IC03MzEsMTEgKzczMSwxMSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRC
eShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqCiAgICAgICAgICAgICAg
ICAgb2xkU3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQodm0sIHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZv
LmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAgICAgICAgJiYg
SW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBz
dHViSW5mbywgc2xvdC5jYWNoZWRPZmZzZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgSW5s
aW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpCiAgICAgICAgICAgICAgICAgICAgICYmICFvbGRTdHJ1Y3R1cmUtPm5l
ZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQogICAgICAgICAgICAgICAgICAgICAmJiAhaXNQ
cm94eSkgewogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBn
ZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJl
cGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNl
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5s
aW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9sZFN0cnVj
dHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5l
cmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZl
bnQ6OlB1dEJ5U2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xv
dC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNo
U2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1
dEJ5RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7CkBAIC0xMTMyLDcgKzExMzIs
NyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5KAogICAgICAgICAgICAg
ICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlCiAgICAgICAgICAgICAgICAgJiYgIXNsb3Qu
d2F0Y2hwb2ludFNldCgpCiAgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRD
b2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2Vzcyhjb2RlQmxvY2ss
IHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29k
ZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3Moc3R1YkluZm8sIHN0
cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAg
ICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkJ5U2VsZlBhdGNoLCBzdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNl
bWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwpAQCAtMTU1Miw3ICsxNTUyLDcgQEAgc3Rh
dGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYKIAogdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJ
bmZvJiBjYWxsTGlua0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fz
c2VtYmx5KCksICJVbmxpbmtpbmcgQ2FsbExpbmtJbmZvOiAiLCBSYXdQb2ludGVyKCZjYWxsTGlu
a0luZm8pKTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVu
bGlua2luZyBjYWxsIGF0ICIsIGNhbGxMaW5rSW5mby5mYXN0UGF0aFN0YXJ0KCkpOwogICAgIAog
ICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRo
dW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAppbmRleCA5Njk1
NWU5ZDI3NDE4OTJjY2E4MjQ2MDRmODk2OWUxYmY2ZWRlZmU5Li42ZDQwODI1YWM4MTY3NjViOTNk
Y2I3Y2FlZjYxMGU0NmZkZGI4ZmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJCeXRlY29k
ZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1
ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lubGluZXMuaCIKICNpbmNsdWRlICJF
cnJvci5oIgogI2luY2x1ZGUgIkVycm9ySGFuZGxpbmdTY29wZS5oIgpAQCAtMzcxLDIyICszNzAs
MTMgQEAgaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVk0mIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmQKICAgICAKICAgICBjb2RlQmxvY2stPnVwZGF0
ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zKCk7CiAKLSAgICBpZiAoY29kZUJsb2NrLT5qaXRU
eXBlKCkgIT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKLSAgICAgICAgaWYgKFJlZlB0cjxCYXNl
bGluZUpJVENvZGU+IGJhc2VsaW5lUmVmID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygp
LT5tX3VubGlua2VkQmFzZWxpbmVDb2RlKSB7Ci0gICAgICAgICAgICBjb2RlQmxvY2stPnNldHVw
V2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKGJhc2VsaW5lUmVmLnJlbGVhc2VOb25OdWxsKCkpOwot
ICAgICAgICAgICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUoY29k
ZUJsb2NrKTsKLSAgICAgICAgICAgIGNvZGVCbG9jay0+aml0TmV4dEludm9jYXRpb24oKTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgaWYgKCFjb2Rl
QmxvY2stPmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkpIHsKICAgICAgICAgQ09ERUJMT0NL
X0xPR19FVkVOVChjb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoInRocmVzaG9sZCBub3Qg
cmVhY2hlZCwgY291bnRlciA9ICIsIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpKSk7
CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgdGhy
ZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgCi0gICAgSklUV29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGUgPSBKSVRXb3JrbGlz
dDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSwg
SklUQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLCBKSVRDb21w
aWxhdGlvbk1vZGU6OkJhc2VsaW5lKSk7CisgICAgSklUV29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0
U3RhdGUgPSBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21wbGV0ZUFsbFJl
YWR5UGxhbnNGb3JWTSh2bSwgSklUQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLCBKSVRDb21waWxh
dGlvbk1vZGU6OkJhc2VsaW5lKSk7CiAKICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVy
Ym9zZU9TUigpLCAiICAgIENvZGUgd2FzIGFscmVhZHkgY29tcGlsZWQuIik7CkBAIC00NzYsMTAg
KzQ2Niw4IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKGxvb3Bfb3NyKQogICAgIGlmIChVTkxJS0VM
WShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIGNv
ZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsK
ICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIo
cGMpOwogICAgICAgICAqcHRyICs9IGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpLm1f
YWN0aXZlVGhyZXNob2xkOwotICAgICAgICBpZiAoKnB0ciA+PSBPcHRpb25zOjplYXJseVJldHVy
bkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkgewotICAgICAgICAgICAgY29kZUJsb2NrLT5lbnN1
cmVKSVREYXRhKENvbmN1cnJlbnRKU0xvY2tlcihjb2RlQmxvY2stPm1fbG9jaykpOyAvLyBXZSdy
ZSByZXR1cm5pbmcgdG8gdGhlIE9TUiBlbnRyeSBjb2RlIGhlcmUsIHdoaWNoIGV4cGVjdHMgdGhh
dCBtX2ppdERhdGEgaXMgbm90IG51bGwuCisgICAgICAgIGlmICgqcHRyID49IE9wdGlvbnM6OmVh
cmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKQogICAgICAgICAgICAgTExJTlRfUkVU
VVJOX1RXTyhMTEludDo6ZnV6emVyUmV0dXJuRWFybHlGcm9tTG9vcEhpbnRFbnRyeXBvaW50KCku
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIGNhbGxGcmFtZS0+dG9wT2ZGcmFtZSgpKTsKLSAg
ICAgICAgfQogICAgIH0KICAgICAKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQppbmRleCA3MGQ1MmZjYzZiZjcwMWVmYmU0
NmNmYTRlOGM2NGI5OTlkZGE0NzE2Li5kZjEwNTUwOTg5ZDQ4NDE0YmU2M2QxOWFiNWJjYzcyZDUw
YmMzYzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCkBAIC0xNDIwLDggKzE0MjAsNyBAQCBlbmQKIAogbWFjcm8gY2hlY2tT
d2l0Y2hUb0pJVChpbmNyZW1lbnQsIGFjdGlvbikKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwg
dDAKLSAgICBsb2FkcCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlclt0MF0sIHQwCi0g
ICAgYmFkZGlzIGluY3JlbWVudCwgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJb
dDBdLCAuY29udGludWUKKyAgICBiYWRkaXMgaW5jcmVtZW50LCBDb2RlQmxvY2s6Om1fbGxpbnRF
eGVjdXRlQ291bnRlciArIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwg
LmNvbnRpbnVlCiAgICAgYWN0aW9uKCkKICAgICAuY29udGludWU6CiBlbmQKQEAgLTE1MDQsOCAr
MTUwMyw3IEBAIG1hY3JvIHByb2xvZ3VlKGNvZGVCbG9ja0dldHRlciwgY29kZUJsb2NrU2V0dGVy
LCBvc3JTbG93UGF0aCwgdHJhY2VTbG93UGF0aCkKICAgICBjb2RlQmxvY2tHZXR0ZXIodDEpCiAg
ICAgY29kZUJsb2NrU2V0dGVyKHQxKQogICAgIGlmIG5vdCAoQ19MT09QIG9yIENfTE9PUF9XSU4p
Ci0gICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyW3QxXSwgdDAK
LSAgICAgICAgYmFkZGlzIDUsIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3Qw
XSwgLmNvbnRpbnVlCisgICAgICAgIGJhZGRpcyA1LCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRl
Q291bnRlciArIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QxXSwgLmNvbnRp
bnVlCiAgICAgICAgIGlmIEpTVkFMVUU2NAogICAgICAgICAgICAgbW92ZSBjZnIsIGEwCiAgICAg
ICAgICAgICBtb3ZlIFBDLCBhMQpAQCAtMTYxOSwxNCArMTYxNywxNCBAQCBtYWNybyBmdW5jdGlv
bkluaXRpYWxpemF0aW9uKHByb2ZpbGVBcmdTa2lwKQogICAgICMgb3B0aW1hbCB3YXkgZm9yIGFy
Y2hpdGVjdHVyZXMgdGhhdCBoYXZlIG1vcmUgdGhhbiBmaXZlIHJlZ2lzdGVycyBhdmFpbGFibGUK
ICAgICAjIGZvciBhcmJpdHJhcnkgdXNlIGluIHRoZSBpbnRlcnByZXRlci4KICAgICBsb2FkaSBD
b2RlQmxvY2s6Om1fbnVtUGFyYW1ldGVyc1t0MV0sIHQwCi0gICAgYWRkcCAtcHJvZmlsZUFyZ1Nr
aXAsIHQwCisgICAgYWRkcCAtcHJvZmlsZUFyZ1NraXAsIHQwICMgVXNlIGFkZGkgYmVjYXVzZSB0
aGF0J3Mgd2hhdCBoYXMgdGhlIHBlZXBob2xlCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYnBndGVx
IHQwLCAwLCBvayBlbmQpCiAgICAgYnRweiB0MCwgLmFyZ3VtZW50UHJvZmlsZURvbmUKICAgICBs
b2FkcCBDb2RlQmxvY2s6Om1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzICsgRml4ZWRWZWN0b3I6Om1f
c3RvcmFnZSArIFJlZkNvdW50ZWRBcnJheTo6bV9kYXRhW3QxXSwgdDMKICAgICBidHB6IHQzLCAu
YXJndW1lbnRQcm9maWxlRG9uZSAjIFdoZW4gd2UgY2FuJ3QgSklULCB3ZSBkb24ndCBhbGxvY2F0
ZSBhbnkgYXJndW1lbnQgdmFsdWUgcHJvZmlsZXMuCiAgICAgbXVscCBzaXplb2YgVmFsdWVQcm9m
aWxlLCB0MCwgdDIgIyBBYWFhYWhoaGghIE5lZWQgc3RyZW5ndGggcmVkdWN0aW9uIQogICAgIGxz
aGlmdHAgMywgdDAgIyBvZmZzZXQgb2YgbGFzdCBKU1ZhbHVlIGFyZ3VtZW50cyBvbiB0aGUgc3Rh
Y2suCi0gICAgYWRkcCB0MiwgdDMgIyBwb2ludGVyIHRvIGVuZCBvZiBWYWx1ZVByb2ZpbGUgYXJy
YXkgaW4gdGhlIHZhbHVlIHByb2ZpbGUgYXJyYXkuCisgICAgYWRkcCB0MiwgdDMgIyBwb2ludGVy
IHRvIGVuZCBvZiBWYWx1ZVByb2ZpbGUgYXJyYXkgaW4gQ29kZUJsb2NrOjptX2FyZ3VtZW50VmFs
dWVQcm9maWxlcy4KIC5hcmd1bWVudFByb2ZpbGVMb29wOgogICAgIGlmIEpTVkFMVUU2NAogICAg
ICAgICBsb2FkcSBUaGlzQXJndW1lbnRPZmZzZXQgLSA4ICsgcHJvZmlsZUFyZ1NraXAgKiA4W2Nm
ciwgdDBdLCB0MgpAQCAtMjU2NSwyMyArMjU2Myw2IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAg
ICAgZW5kCiBlbmQKIAotCi1tYWNybyB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShzaXplLCBvcGNv
ZGVTdHJ1Y3QsIHR5cGUsIHNjcmF0Y2gxLCBzY3JhdGNoMikKLSAgICBnZXR1KHNpemUsIG9wY29k
ZVN0cnVjdCwgbV9wcm9maWxlSW5kZXgsIHNjcmF0Y2gxKQotICAgIGxvYWRwIENvZGVCbG9ja1tj
ZnJdLCBzY3JhdGNoMgotICAgIGxvYWRwIENvZGVCbG9jazo6bV91bmxpbmtlZENvZGVbc2NyYXRj
aDJdLCBzY3JhdGNoMgotICAgIGxvYWRwIFVubGlua2VkQ29kZUJsb2NrOjptX3VuYXJ5QXJpdGhQ
cm9maWxlcyArIEZpeGVkVmVjdG9yOjptX3N0b3JhZ2UgKyBSZWZDb3VudGVkQXJyYXk6Om1fZGF0
YVtzY3JhdGNoMl0sIHNjcmF0Y2gyCi0gICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQcm9maWxlOjpt
X2JpdHNbc2NyYXRjaDIsIHNjcmF0Y2gxLCAyXQotZW5kCi0KLW1hY3JvIHVwZGF0ZUJpbmFyeUFy
aXRoUHJvZmlsZShzaXplLCBvcGNvZGVTdHJ1Y3QsIHR5cGUsIHNjcmF0Y2gxLCBzY3JhdGNoMikK
LSAgICBnZXR1KHNpemUsIG9wY29kZVN0cnVjdCwgbV9wcm9maWxlSW5kZXgsIHNjcmF0Y2gxKQot
ICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBzY3JhdGNoMgotICAgIGxvYWRwIENvZGVCbG9jazo6
bV91bmxpbmtlZENvZGVbc2NyYXRjaDJdLCBzY3JhdGNoMgotICAgIGxvYWRwIFVubGlua2VkQ29k
ZUJsb2NrOjptX2JpbmFyeUFyaXRoUHJvZmlsZXMgKyBGaXhlZFZlY3Rvcjo6bV9zdG9yYWdlICsg
UmVmQ291bnRlZEFycmF5OjptX2RhdGFbc2NyYXRjaDJdLCBzY3JhdGNoMgotICAgIG9yaCB0eXBl
LCBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1tzY3JhdGNoMiwgc2NyYXRjaDEsIDJdCi1lbmQK
LQogLy8gRklYTUU6IFdlIHNob3VsZCBub3QgbmVlZCB0aGUgWDg2XzY0X1dJTiBjb25kaXRpb24g
aGVyZSwgc2luY2UgV0VCQVNTRU1CTFkgc2hvdWxkIGFscmVhZHkgYmUgZmFsc2Ugb24gV2luZG93
cwogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzcxNgogaWYg
V0VCQVNTRU1CTFkgYW5kIG5vdCBYODZfNjRfV0lOCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmluZGV4IGVjNGQ5
MzRjZTlkMTU5OWY2OWZlYmE2YTNhMDJlNDU2MTNkYzM2ZTQuLjc4NTI0Y2ZmMTk2OThkYzgwMDU4
NmJhOTRhYzQyMjdiMThjM2YzN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCkBAIC0xMDEyLDEzICsxMDEy
LDE4IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHJpY3RlcSwKIAog
bWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQog
ICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1h
Y3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQorICAgICAgICBtYWNy
byB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKKyAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2Rl
U3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1f
Yml0c1t0MV0KKyAgICAgICAgZW5kCisKKyAgICAgICAgbWV0YWRhdGEodDEsIHQyKQogICAgICAg
ICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5lcSBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0s
IEludDMyVGFnLCAuc2xvdwogICAgICAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhd
LCB0MgotICAgICAgICAjIHNyY0RzdCBpbiB0MgorICAgICAgICAjIE1ldGFkYXRhIGluIHQxLCBz
cmNEc3QgaW4gdDIKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MiwgLnNsb3cpCiAgICAgICAg
IHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVVbmFy
eUFyaXRoUHJvZmlsZShzaXplLCBvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDUsIHQy
KQorICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQogICAgICAgICBk
aXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTEwODMsMTcgKzEwODgsMjMgQEAgZW5kKQogCiAK
IGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdl
dCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCisKKyAgICBtYWNybyB1cGRhdGVBcml0aFBy
b2ZpbGUodHlwZSkKKyAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0
aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQorICAgIGVuZAorCisgICAg
bWV0YWRhdGEodDUsIHQwKQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25zdGFu
dE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxLCB0MikKICAgICBiaW5lcSB0MSwgSW50MzJUYWcsIC5v
cE5lZ2F0ZVNyY05vdEludAogICAgIGJ0aXogdDIsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cK
ICAgICBuZWdpIHQyCi0gICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoc2l6ZSwgT3BOZWdhdGUs
IEFyaXRoUHJvZmlsZUludCwgdDAsIHQzKQorICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFBy
b2ZpbGVJbnQpCiAgICAgcmV0dXJuIChJbnQzMlRhZywgdDIpCiAub3BOZWdhdGVTcmNOb3RJbnQ6
CiAgICAgYmlhIHQxLCBMb3dlc3RUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3JpIDB4ODAwMDAw
MDAsIHQxCi0gICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoc2l6ZSwgT3BOZWdhdGUsIEFyaXRo
UHJvZmlsZU51bWJlciwgdDAsIHQzKQorICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2Zp
bGVOdW1iZXIpCiAgICAgcmV0dXJuKHQxLCB0MikKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExMDQs
MTMgKzExMTUsMTggQEAgZW5kKQogCiBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5h
bWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlLCBkb3VibGVPcGVyYXRp
b24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVj
dCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCisgICAgICAg
IG1hY3JvIGFyaXRoUHJvZmlsZSh0eXBlKQorICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVT
dHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1f
Yml0c1t0NV0KKyAgICAgICAgZW5kCisKKyAgICAgICAgbWV0YWRhdGEodDUsIHQyKQogICAgICAg
ICBnZXQobV9yaHMsIHQyKQogICAgICAgICBnZXQobV9saHMsIHQwKQogICAgICAgICBsb2FkQ29u
c3RhbnRPclZhcmlhYmxlKHNpemUsIHQyLCB0MywgdDEpCiAgICAgICAgIGxvYWRDb25zdGFudE9y
VmFyaWFibGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAgICAgICAgIGJpbmVxIHQyLCBJbnQzMlRh
ZywgLm9wMU5vdEludAogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5vcDJOb3RJbnQKLSAg
ICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKHNpemUsIG9wY29kZVN0cnVjdCwgQXJpdGhQ
cm9maWxlSW50SW50LCB0NSwgdDIpCisgICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJ
bnRJbnQpCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGludGVnZXJPcGVyYXRpb25B
bmRTdG9yZSh0MywgdDEsIHQwLCAuc2xvdywgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKQEAgLTEx
MjAsMTIgKzExMzYsMTIgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBv
cGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSwgZG8KICAgICAgICAgYmlhIHQy
LCBMb3dlc3RUYWcsIC5zbG93CiAgICAgICAgIGJpYiB0MywgTG93ZXN0VGFnLCAub3AxTm90SW50
T3AyRG91YmxlCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLnNsb3cKLSAgICAgICAgdXBk
YXRlQmluYXJ5QXJpdGhQcm9maWxlKHNpemUsIG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVt
YmVySW50LCB0NSwgdDQpCisgICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJ
bnQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQog
ICAgIC5vcDFOb3RJbnRPcDJEb3VibGU6CiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCi0gICAg
ICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShzaXplLCBvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJv
ZmlsZU51bWJlck51bWJlciwgdDUsIHQ0KQorICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9m
aWxlTnVtYmVyTnVtYmVyKQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0
LCB0MSkKICAgICAgICAgZmlpMmQgdDAsIHQyLCBmdDAKQEAgLTExMzcsNyArMTE1Myw3IEBAIG1h
Y3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2Vy
T3BlcmF0aW9uQW5kU3RvcmUsIGRvCiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0
ZWx5IGFuIGludCwgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgbm90LgogICAgICAg
ICBnZXQobV9kc3QsIHQyKQogICAgICAgICBiaWEgdDMsIExvd2VzdFRhZywgLnNsb3cKLSAgICAg
ICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKHNpemUsIG9wY29kZVN0cnVjdCwgQXJpdGhQcm9m
aWxlSW50TnVtYmVyLCB0NSwgdDQpCisgICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJ
bnROdW1iZXIpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgZmlpMmQgdDEsIHQzLCBm
dDEKICAgICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQppbmRleCA4YThj
YTZhZDhiZGYyYTViOWRjYTU4NzZhMzUwM2RkYjY0MzhhNjdlLi5hNTYzZTI1NzE3NWIxMTljOTAx
MDNlNTJhMGE0Y2I0NTgxNGQzMGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpAQCAtNDQxLDEzICs0NDEsOCBAQCBt
YWNybyBjaGVja1N3aXRjaFRvSklURm9yTG9vcCgpCiAgICAgICAgICAgICBtb3ZlIFBDLCBhMQog
ICAgICAgICAgICAgY0NhbGwyKF9sbGludF9sb29wX29zcikKICAgICAgICAgICAgIGJ0cHogcjAs
IC5yZWNvdmVyCi0gICAgICAgICAgICBtb3ZlIHIxLCBzcAotCi0gICAgICAgICAgICAjIEJhc2Vs
aW5lIHVzZXMgTExJbnQncyBQQiByZWdpc3RlciBmb3IgaXRzIEpJVCBjb25zdGFudCBwb29sLgot
ICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCi0gICAgICAgICAgICBsb2FkcCBD
b2RlQmxvY2s6Om1faml0RGF0YVtQQl0sIFBCCi0gICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2s6
OkpJVERhdGE6Om1faml0Q29uc3RhbnRQb29sW1BCXSwgUEIKIAorICAgICAgICAgICAgbW92ZSBy
MSwgc3AKICAgICAgICAgICAgIGlmIEFSTTY0RQogICAgICAgICAgICAgICAgIGxlYXAgSlNDQ29u
ZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhw
ciBHYXRlOjpsb29wT1NSRW50cnkpICogUHRyU2l6ZSwgYTIKICAgICAgICAgICAgICAgICBqbXAg
W2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgSlNFbnRyeVB0clRhZwpAQCAtMTA2MSwxNSAr
MTA1NiwyMCBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyaWN0ZXEs
CiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlv
bikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0
LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKKyAgICAgICAg
bWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCisgICAgICAgICAgICBvcmggdHlwZSwgJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxl
OjptX2JpdHNbdDJdCisgICAgICAgIGVuZAorCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAg
ICAgICAgIGxvYWRxIFtjZnIsIHQwLCA4XSwgdDEKLSAgICAgICAgIyBzcmNEc3QgaW4gdDEKKyAg
ICAgICAgbWV0YWRhdGEodDIsIHQzKQorICAgICAgICAjIHNyY0RzdCBpbiB0MSwgbWV0YWRhdGEg
aW4gdDIKICAgICAgICAgIyBGSVhNRTogdGhlIG5leHQgbGluZSBqdW1wcyB0byB0aGUgc2xvdyBw
YXRoIGZvciBCaWdJbnQzMi4gV2UgY291bGQgaW5zdGVhZCBoYXZlIGEgZGVkaWNhdGVkIHBhdGgg
aW4gaGVyZSBmb3IgdGhlbS4KICAgICAgICAgYnFiIHQxLCBudW1iZXJUYWcsIC5zbG93CiAgICAg
ICAgIGludGVnZXJPcGVyYXRpb24odDEsIC5zbG93KQogICAgICAgICBvcnEgbnVtYmVyVGFnLCB0
MQogICAgICAgICBzdG9yZXEgdDEsIFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVVbmFyeUFy
aXRoUHJvZmlsZShzaXplLCBvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDUsIHQzKQor
ICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQogICAgICAgICBkaXNw
YXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTExMzQsMTggKzExMzQsMjQgQEAgZW5kKQogCiAKIGxs
aW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwg
ZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCisKKyAgICBtYWNybyB1cGRhdGVBcml0aFByb2Zp
bGUodHlwZSkKKyAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFBy
b2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQorICAgIGVuZAorCiAgICAgZ2V0
KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDMp
CisgICAgbWV0YWRhdGEodDEsIHQyKQogICAgIGJxYiB0MywgbnVtYmVyVGFnLCAub3BOZWdhdGVO
b3RJbnQKICAgICBidGl6IHQzLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0
MwogICAgIG9ycSBudW1iZXJUYWcsIHQzCi0gICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoc2l6
ZSwgT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQorICAgIHVwZGF0ZUFyaXRoUHJv
ZmlsZShBcml0aFByb2ZpbGVJbnQpCiAgICAgcmV0dXJuKHQzKQogLm9wTmVnYXRlTm90SW50Ogog
ICAgIGJ0cXogdDMsIG51bWJlclRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcnEgMHg4MDAwMDAw
MDAwMDAwMDAwLCB0MwotICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKHNpemUsIE9wTmVnYXRl
LCBBcml0aFByb2ZpbGVOdW1iZXIsIHQxLCB0MikKKyAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJp
dGhQcm9maWxlTnVtYmVyKQogICAgIHJldHVybih0MykKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTEx
NTYsNiArMTE2MiwxMiBAQCBlbmQpCiAKIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2Rl
TmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUsIGRvdWJsZU9wZXJh
dGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3Ry
dWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKKyAgICAg
ICAgbWV0YWRhdGEodDUsIHQwKQorCisgICAgICAgIG1hY3JvIHByb2ZpbGUodHlwZSkKKyAgICAg
ICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxl
ICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCisgICAgICAgIGVuZAorCiAgICAgICAg
IGdldChtX3JocywgdDApCiAgICAgICAgIGdldChtX2xocywgdDIpCiAgICAgICAgIGxvYWRDb25z
dGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxKQpAQCAtMTE2NSw3ICsxMTc3LDcgQEAgbWFjcm8g
YmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVy
YXRpb25BbmRTdG9yZSwgZG8KICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdl
ck9wZXJhdGlvbkFuZFN0b3JlKHQxLCB0MCwgLnNsb3csIHQyKQogCi0gICAgICAgIHVwZGF0ZUJp
bmFyeUFyaXRoUHJvZmlsZShzaXplLCBvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwg
dDUsIHQyKQorICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKICAgICAgICAgZGlz
cGF0Y2goKQogCiAgICAgLm9wMU5vdEludDoKQEAgLTExNzUsMTAgKzExODcsMTAgQEAgbWFjcm8g
YmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVy
YXRpb25BbmRTdG9yZSwgZG8KICAgICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwogICAg
ICAgICBhZGRxIG51bWJlclRhZywgdDEKICAgICAgICAgZnEyZCB0MSwgZnQxCi0gICAgICAgIHVw
ZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShzaXplLCBvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51
bWJlck51bWJlciwgdDUsIHQyKQorICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51
bWJlcikKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQogICAgIC5vcDFOb3RJbnRPcDJJbnQ6
Ci0gICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShzaXplLCBvcGNvZGVTdHJ1Y3QsIEFy
aXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQyKQorICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmls
ZU51bWJlckludCkKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgIC5vcDFOb3RJbnRSZWFkeToK
ICAgICAgICAgZ2V0KG1fZHN0LCB0MikKQEAgLTExOTIsOSArMTIwNCw5IEBAIG1hY3JvIGJpbmFy
eU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9u
QW5kU3RvcmUsIGRvCiAKICAgICAub3AyTm90SW50OgogICAgICAgICAjIEZpcnN0IG9wZXJhbmQg
aXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMgZGVmaW5pdGVseSBub3QuCi0gICAg
ICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKLSAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQ
cm9maWxlKHNpemUsIG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDIp
CiAgICAgICAgIGdldChtX2RzdCwgdDIpCisgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNs
b3cKKyAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCiAgICAgICAgIGNpMmRz
IHQwLCBmdDAKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0
MQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vY2xvb3AucmIg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9jbG9vcC5yYgppbmRleCBiMWNlNTUw
YTFkMjA0ZGNhZGRhN2M3ZDhhYjVkMjE3ZGExMDFkNDQwLi42NDFmN2QyN2I2YTdmNjQxOTU1M2Yz
MzdjYWJjZDA4MDU1NjAwNTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2Zm
bGluZWFzbS9jbG9vcC5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9j
bG9vcC5yYgpAQCAtMjU5LDExICsyNTksOSBAQCBjbGFzcyBCYXNlSW5kZXgKICAgICAgICAgY2Fz
ZSB0eXBlCiAgICAgICAgIHdoZW4gOmludDg7ICAgICAgIGludDhNZW1SZWYKICAgICAgICAgd2hl
biA6aW50MzI7ICAgICAgaW50MzJNZW1SZWYKLSAgICAgICAgd2hlbiA6aW50MTY7ICAgICAgaW50
MTZNZW1SZWYKICAgICAgICAgd2hlbiA6aW50NjQ7ICAgICAgaW50NjRNZW1SZWYKICAgICAgICAg
d2hlbiA6aW50cHRyOyAgICAgaW50cHRyTWVtUmVmCiAgICAgICAgIHdoZW4gOnVpbnQ4OyAgICAg
IHVpbnQ4TWVtUmVmCi0gICAgICAgIHdoZW4gOnVpbnQxNjsgICAgIHVpbnQxNk1lbVJlZgogICAg
ICAgICB3aGVuIDp1aW50MzI7ICAgICB1aW50MzJNZW1SZWYKICAgICAgICAgd2hlbiA6dWludDY0
OyAgICAgdWludDY0TWVtUmVmCiAgICAgICAgIHdoZW4gOnVpbnRwdHI7ICAgIHVpbnRwdHJNZW1S
ZWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlk
ZW50aWZpZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50
aWZpZXIuaAppbmRleCAxMWZmYjg5ODMxZGU3MTc5MzNlMmU0OTY0MmU1NTc3NzY5YjhiN2RmLi5h
MmFlY2ZjNDMxNjQ5N2JhOGI5NWQ5MWU5ZmJlZTg4MzY1OTMxMzRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCkBAIC00OCwx
MCArNDgsOCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigpID0gZGVmYXVsdDsK
IAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tQ2VsbChK
U0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBl
PgotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSosIGNvbnN0IElkZW50aWZpZXImKTsK
LSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLSAgICBzdGF0aWMgaW5saW5l
IENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KENvZGVCbG9ja1R5cGUqLCBVbmlxdWVkU3RyaW5nSW1wbCopOworICAgIHN0YXRpYyBpbmxpbmUg
Q2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
Q29kZUJsb2NrKiwgY29uc3QgSWRlbnRpZmllciYpOworICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVh
YmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJs
b2NrKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlk
ZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCop
OwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tUmF3
Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcihyYXdC
aXRzKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZWFibGVJZGVudGlmaWVySW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAppbmRleCBmYTkxYmNmODljMDAwZDlhZTA4ODU5
YjNmMmNjYzdlNzUxMzk5YWVmLi4zODAwMGI5MGZkNDYwNmUzNDUwZmJjOTBlYTk1ZWE3MzkxZDEz
YWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJ
ZGVudGlmaWVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgKQEAgLTM1LDE0ICszNSwxMiBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci1pbmxpbmUgQ2Fj
aGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJZGVudGlm
aWVyJiBpKQoraW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2Nr
LCBjb25zdCBJZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLXRlbXBsYXRlIDx0
eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVC
bG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK2lubGluZSBDYWNo
ZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5oYXNJZGVu
dGlmaWVyKHVpZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKaW5kZXggOGIzZmY4
ODFmZmM2YTY1YWM3ZWZiZDUyNmRiNWJmNmUzYjRjOWNmNi4uMWRkN2EwZGYzMTIwYjcyYzU3ODRm
OGFlOGRkY2UxMjNiMTdjNjZmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlZFR5cGVzLmNwcApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkNhY2hlZFR5cGVzLmgiCiAKLSNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIK
ICNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJCeXRlY29kZUNhY2hlRXJyb3Iu
aCIKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKQEAgLTE5MTksOCArMTkx
OCw2IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIG51bVZhbHVlUHJvZmlsZXMoKSBjb25zdCB7
IHJldHVybiBtX251bVZhbHVlUHJvZmlsZXM7IH0KICAgICB1bnNpZ25lZCBudW1BcnJheVByb2Zp
bGVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1BcnJheVByb2ZpbGVzOyB9Ci0gICAgdW5zaWduZWQg
bnVtQmluYXJ5QXJpdGhQcm9maWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQmluYXJ5QXJpdGhQ
cm9maWxlczsgfQotICAgIHVuc2lnbmVkIG51bVVuYXJ5QXJpdGhQcm9maWxlcygpIGNvbnN0IHsg
cmV0dXJuIG1fbnVtVW5hcnlBcml0aFByb2ZpbGVzOyB9CiAKIHByaXZhdGU6CiAgICAgVmlydHVh
bFJlZ2lzdGVyIG1fdGhpc1JlZ2lzdGVyOwpAQCAtMTk1NSw4ICsxOTUyLDYgQEAgcHJpdmF0ZToK
IAogICAgIHVuc2lnbmVkIG1fbnVtVmFsdWVQcm9maWxlczsKICAgICB1bnNpZ25lZCBtX251bUFy
cmF5UHJvZmlsZXM7Ci0gICAgdW5zaWduZWQgbV9udW1CaW5hcnlBcml0aFByb2ZpbGVzOwotICAg
IHVuc2lnbmVkIG1fbnVtVW5hcnlBcml0aFByb2ZpbGVzOwogCiAgICAgQ2FjaGVkTWV0YWRhdGFU
YWJsZSBtX21ldGFkYXRhOwogCkBAIC0yMTY1LDggKzIxNjAsNiBAQCBBTFdBWVNfSU5MSU5FIFVu
bGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBTdHJ1
Y3R1cmUqCiAgICAgLCBtX3JhcmVEYXRhKGNhY2hlZENvZGVCbG9jay5yYXJlRGF0YShkZWNvZGVy
KSkKICAgICAsIG1fdmFsdWVQcm9maWxlcyhjYWNoZWRDb2RlQmxvY2subnVtVmFsdWVQcm9maWxl
cygpKQogICAgICwgbV9hcnJheVByb2ZpbGVzKGNhY2hlZENvZGVCbG9jay5udW1BcnJheVByb2Zp
bGVzKCkpCi0gICAgLCBtX2JpbmFyeUFyaXRoUHJvZmlsZXMoY2FjaGVkQ29kZUJsb2NrLm51bUJp
bmFyeUFyaXRoUHJvZmlsZXMoKSkKLSAgICAsIG1fdW5hcnlBcml0aFByb2ZpbGVzKGNhY2hlZENv
ZGVCbG9jay5udW1VbmFyeUFyaXRoUHJvZmlsZXMoKSkKIHsKIH0KIApAQCAtMjM0NCw4ICsyMzM3
LDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIENhY2hlZENvZGVCbG9jazxDb2RlQmxvY2tUeXBlPjo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnMKICAgICBtX2hhc0NoZWNrcG9pbnRzID0gY29k
ZUJsb2NrLm1faGFzQ2hlY2twb2ludHM7CiAgICAgbV9udW1WYWx1ZVByb2ZpbGVzID0gY29kZUJs
b2NrLm1fdmFsdWVQcm9maWxlcy5zaXplKCk7CiAgICAgbV9udW1BcnJheVByb2ZpbGVzID0gY29k
ZUJsb2NrLm1fYXJyYXlQcm9maWxlcy5zaXplKCk7Ci0gICAgbV9udW1CaW5hcnlBcml0aFByb2Zp
bGVzID0gY29kZUJsb2NrLm1fYmluYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7Ci0gICAgbV9udW1V
bmFyeUFyaXRoUHJvZmlsZXMgPSBjb2RlQmxvY2subV91bmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgp
OwogCiAgICAgbV9tZXRhZGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fbWV0YWRhdGEu
Z2V0KCkpOwogICAgIG1fcmFyZURhdGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3JhcmVE
YXRhLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25T
bG93UGF0aHMuY3BwCmluZGV4IDZlMjhiOGY2ODQ3NTk3MDdlM2VhYjhhMmViNWZhNWU2NzBmZTM3
MzUuLjFlM2JhMWEzYWNiNjkwNGY3NTU4N2E3NjRiYTQ5MzBiMjE1YTM3YmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcApAQCAtNDc4
LDggKzQ3OCw5IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG9fc3Ry
aW5nKQogfQogCiAjaWYgRU5BQkxFKEpJVCkKLXN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmls
ZUZvclVuYXJ5QXJpdGhPcChVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSwgSlNWYWx1ZSByZXN1
bHQsIEpTVmFsdWUgb3BlcmFuZCkKK3N0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVu
YXJ5QXJpdGhPcChPcE5lZ2F0ZTo6TWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwg
SlNWYWx1ZSBvcGVyYW5kKQogeworICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0
YWRhdGEubV9hcml0aFByb2ZpbGU7CiAgICAgcHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwog
ICAgIEFTU0VSVChyZXN1bHQuaXNOdW1iZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAKQEAg
LTUxMywyNSArNTE0LDI0IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5
QXJpdGhPcChVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSwgSlNWYWx1CiAgICAgfQogfQogI2Vs
c2UKLXN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChVbmFyeUFy
aXRoUHJvZmlsZSYsIEpTVmFsdWUsIEpTVmFsdWUpIHsgfQorc3RhdGljIHZvaWQgdXBkYXRlQXJp
dGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKE9wTmVnYXRlOjpNZXRhZGF0YSYsIEpTVmFsdWUsIEpT
VmFsdWUpIHsgfQogI2VuZGlmCiAKIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3Bh
dGhfbmVnYXRlKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxP
cE5lZ2F0ZT4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVC
bG9jayk7CiAgICAgSlNWYWx1ZSBvcGVyYW5kID0gR0VUX0MoYnl0ZWNvZGUubV9vcGVyYW5kKS5q
c1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSBwcmltVmFsdWUgPSBvcGVyYW5kLnRvUHJpbWl0aXZlKGds
b2JhbE9iamVjdCwgUHJlZmVyTnVtYmVyKTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKIAotICAg
IGF1dG8mIHByb2ZpbGUgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPnVuYXJ5QXJp
dGhQcm9maWxlKGJ5dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsKLQogI2lmIFVTRShCSUdJTlQzMikK
ICAgICBpZiAocHJpbVZhbHVlLmlzQmlnSW50MzIoKSkgewogICAgICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKGdsb2JhbE9iamVjdCwgcHJpbVZhbHVlLmJpZ0ludDMy
QXNJbnQzMigpKTsKICAgICAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgICAgIFJFVFVSTl9X
SVRIX1BST0ZJTElORyhyZXN1bHQsIHsKLSAgICAgICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZUZv
clVuYXJ5QXJpdGhPcChwcm9maWxlLCByZXN1bHQsIG9wZXJhbmQpOworICAgICAgICAgICAgdXBk
YXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKG1ldGFkYXRhLCByZXN1bHQsIG9wZXJhbmQp
OwogICAgICAgICB9KTsKICAgICB9CiAjZW5kaWYKQEAgLTU0MCwxNCArNTQwLDE0IEBAIEpTQ19E
RUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfbmVnYXRlKQogICAgICAgICBKU1ZhbHVl
IHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKGdsb2JhbE9iamVjdCwgcHJpbVZhbHVlLmFz
SGVhcEJpZ0ludCgpKTsKICAgICAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgICAgIFJFVFVS
Tl9XSVRIX1BST0ZJTElORyhyZXN1bHQsIHsKLSAgICAgICAgICAgIHVwZGF0ZUFyaXRoUHJvZmls
ZUZvclVuYXJ5QXJpdGhPcChwcm9maWxlLCByZXN1bHQsIG9wZXJhbmQpOworICAgICAgICAgICAg
dXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKG1ldGFkYXRhLCByZXN1bHQsIG9wZXJh
bmQpOwogICAgICAgICB9KTsKICAgICB9CiAgICAgCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051
bWJlcigtcHJpbVZhbHVlLnRvTnVtYmVyKGdsb2JhbE9iamVjdCkpOwogICAgIENIRUNLX0VYQ0VQ
VElPTigpOwogICAgIFJFVFVSTl9XSVRIX1BST0ZJTElORyhyZXN1bHQsIHsKLSAgICAgICAgdXBk
YXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKHByb2ZpbGUsIHJlc3VsdCwgb3BlcmFuZCk7
CisgICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChtZXRhZGF0YSwgcmVz
dWx0LCBvcGVyYW5kKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAppbmRleCA1YWE1NDJhMTJmMjcxZGJkZmYw
MjBiOTEwZWRiY2M5YTExYzgzNjU2Li5lNGUwMzU0NmViY2YxMGU5ZjRlNTVkOWI2MGE1YTdmNzNm
MGYyOGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlv
bkV4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlv
bkV4ZWN1dGFibGUuaApAQCAtMjg5LDggKzI4OSw2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBp
bmxpbmUgcHRyZGlmZl90IG9mZnNldE9mUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX3JhcmVEYXRhKTsgfQogICAgIHN0YXRpYyBpbmxpbmUg
cHRyZGlmZl90IG9mZnNldE9mQXNTdHJpbmdJblJhcmVEYXRhKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFJhcmVEYXRhLCBtX2FzU3RyaW5nKTsgfQotICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlm
Zl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihG
dW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ2FsbCk7IH0KLSAgICBzdGF0aWMgaW5s
aW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0
KTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXggODhlOGM3NTUxMmQxNTkx
Y2MzZWRjYmNmY2E3MDg5OGZiYWU4MTEyMi4uMmQ5MmE5NjRmOGNiYzI2NjBhMjJhNTg1ZjhjZjkw
YWRkYWE4YzdmZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAK
QEAgLTQzNCw2ICs0MzQsOCBAQCB2b2lkIE9wdGlvbnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlv
bnMoKQogICAgIE9wdGlvbnM6OnVzZUNvbmN1cnJlbnRHQygpID0gZmFsc2U7CiAjZW5kaWYKIAor
ICAgIGlmICghaXNBUk02NCgpKQorICAgICAgICBPcHRpb25zOjp1c2VEYXRhSUMoKSA9IGZhbHNl
OwogICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCiAgICAgICAgIE9wdGlvbnM6OnVzZURh
dGFJQ0luT3B0aW1pemluZ0pJVCgpID0gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zTGlzdC5oCmluZGV4IDU0MDFmZjM4MzFkODY1MDcxNTViMTkzMjRiZTM5
N2ZmYmQzM2Q5MzQuLmEwYzIxNzBlYzRiYTUyMWM1MWJlYzZkMjAzYTUxYTk1NjhiMmY0YjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaApAQCAtMzA5LDYg
KzMwOSw3IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgdihJbnQz
MiwgZXZhbFRocmVzaG9sZE11bHRpcGxpZXIsIDEwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KFVuc2lnbmVkLCBtYXhpbXVtRXZhbENhY2hlYWJsZVNvdXJjZUxlbmd0aCwgMjU2LCBOb3JtYWws
IG51bGxwdHIpIFwKICAgICBcCisgICAgdihCb29sLCByYW5kb21pemVFeGVjdXRpb25Db3VudHNC
ZXR3ZWVuQ2hlY2twb2ludHMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEludDMy
LCBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzRm9yQmFzZWxpbmUsIDEw
MDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoSW50MzIsIG1heGltdW1FeGVjdXRpb25Db3Vu
dHNCZXR3ZWVuQ2hlY2twb2ludHNGb3JVcHBlclRpZXJzLCA1MDAwMCwgTm9ybWFsLCBudWxscHRy
KSBcCiAgICAgXApAQCAtNTMxLDcgKzUzMiw2IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0
TWVtb3J5KCk7CiAgICAgdihCb29sLCB1c2VEYXRhSUMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIp
IFwKICAgICB2KEJvb2wsIHVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCwgZmFsc2UsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNlRGF0YUlDU2hhcmluZywgZmFsc2UsIE5vcm1hbCwg
bnVsbHB0cikgXAotICAgIHYoQm9vbCwgdXNlQmFzZWxpbmVKSVRDb2RlU2hhcmluZywgdHJ1ZSwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAogICAgIC8qIEZlYXR1cmUgRmxhZ3MgKi9cCiAgICAg
XApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0
YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxl
LmNwcAppbmRleCAyMzE5NDljZWVkMTE3NGVlYmFjY2VhM2MxMDYyNzU4ZTkzY2Y0YjE4Li4zMzZj
NWVjMzZlYjZkOTgyNTZmYzlkOWRhMjU1MjIwZmRlZDEwMTljIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcApAQCAtMzk2LDE5ICsz
OTYsMTAgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aW9uSW1wbChW
TSYgdm0sIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU1MKICAgICBpZiAoT3B0aW9uczo6dmFsaWRh
dGVCeXRlY29kZSgpKQogICAgICAgICBjb2RlQmxvY2stPnZhbGlkYXRlKCk7CiAKLSAgICBib29s
IGluc3RhbGxlZFVubGlua2VkQmFzZWxpbmVDb2RlID0gZmFsc2U7Ci0jaWYgRU5BQkxFKEpJVCkK
LSAgICBpZiAoUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gYmFzZWxpbmVSZWYgPSBjb2RlQmxvY2st
PnVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNlbGluZUNvZGUpIHsKLSAgICAgICAg
Y29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShiYXNlbGluZVJlZi5yZWxl
YXNlTm9uTnVsbCgpKTsKLSAgICAgICAgaW5zdGFsbGVkVW5saW5rZWRCYXNlbGluZUNvZGUgPSB0
cnVlOwotICAgIH0KLSNlbmRpZgotICAgIGlmICghaW5zdGFsbGVkVW5saW5rZWRCYXNlbGluZUNv
ZGUpIHsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUxMSW50KCkpCi0gICAgICAgICAgICBzZXR1
cExMSW50KGNvZGVCbG9jayk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldHVwSklUKHZt
LCBjb2RlQmxvY2spOwotICAgIH0KKyAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSkKKyAgICAg
ICAgc2V0dXBMTEludChjb2RlQmxvY2spOworICAgIGVsc2UKKyAgICAgICAgc2V0dXBKSVQodm0s
IGNvZGVCbG9jayk7CiAKICAgICBpbnN0YWxsQ29kZSh2bSwgY29kZUJsb2NrLCBjb2RlQmxvY2st
PmNvZGVUeXBlKCksIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCmlu
ZGV4IGU2ZjY1NTQwNzc0NmIxMmU4ZDY3ZGU2MjIxNzFiNGExYjdhOTA3OWUuLmU0ZGMwMGQ0YzZm
NWM1ZGIyOWMwNWUxYWQ2YTNjOTEyZTE1Mjk4M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgKQEAgLTUyLDkgKzUyLDkgQEAg
cHVibGljOgogICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCgpCiAgICAgewogICAgICAgICBp
ZiAoT3B0aW9uczo6d2FzbUxMSW50VGllcnNVcFRvQkJRKCkpCi0gICAgICAgICAgICBzZXROZXdU
aHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVBZnRlcldhcm1VcCgpKTsK
KyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRp
bWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBz
ZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1V
cCgpKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JP
TUdPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOwogICAgIH0KIAogICAgIGJvb2wgY2hl
Y2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQpAQCAtNjUsOSArNjUsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBvcHRpbWl6ZVNvb24oKQogICAgIHsKICAgICAgICAgaWYgKE9wdGlvbnM6
Ondhc21MTEludFRpZXJzVXBUb0JCUSgpKQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9w
dGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplU29vbigpKTsKKyAgICAgICAgICAgIHNldE5l
d1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZVNvb24oKSwgbnVsbHB0
cik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0
aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSk7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hv
bGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCksIG51bGxwdHIpOwogICAg
IH0KIAogICAgIHN0cnVjdCBPU1JFbnRyeURhdGEgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21UaWVyVXBDb3VudC5jcHAKaW5kZXggOThjZjM4YjM4MWMyNmI1ODdmOTNmZDY1
ZjI4MmQ0MzI4YWJiYmJiMi4uZGZmOWQwNDAwMDFkNDkxOTVmYzY5ODljMzI3NzY3OTJjMjBlYjRh
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3Bw
CkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIFRp
ZXJVcENvdW50OjpUaWVyVXBDb3VudCgpCiB7Ci0gICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CisgICAgc2V0TmV3VGhyZXNo
b2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0
cik7CiB9CiAKIFRpZXJVcENvdW50Ojp+VGllclVwQ291bnQoKSA9IGRlZmF1bHQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCmluZGV4IDFjMGQ5NGNmOGFm
ODUxMjYxY2IxNTVlYTdmZTIzMTJiZTUyZDEwNTIuLmIxYjEwNDJjZGU1OWZmYjc3YzdkZGU2NWU4
ZDI5ZTk4MDU0ZmExMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21UaWVyVXBDb3VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVy
VXBDb3VudC5oCkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplQWZ0
ZXJXYXJtVXAodWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dM
bklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXpp
bmcgYWZ0ZXIgd2FybS11cC4iKTsKLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRo
cmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CisgICAgICAgIHNldE5ld1RocmVz
aG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxw
dHIpOwogICAgIH0KIAogICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNo
ZWQoKQpAQCAtOTAsMTQgKzkwLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplTmV4dElu
dm9jYXRpb24odWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dM
bklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXpp
bmcgbmV4dCBpbnZvY2F0aW9uLiIpOwotICAgICAgICBzZXROZXdUaHJlc2hvbGQoMCk7CisgICAg
ICAgIHNldE5ld1RocmVzaG9sZCgwLCBudWxscHRyKTsKICAgICB9CiAKICAgICB2b2lkIG9wdGlt
aXplU29vbih1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xu
SWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemlu
ZyBzb29uLiIpOwogICAgICAgICAvLyBGSVhNRTogTmVlZCBhZGp1c3RtZW50IG9uY2Ugd2UgZ2V0
IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgd2FzbSBmdW5jdGlvbnMuCi0gICAgICAgIHNldE5ld1Ro
cmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSk7CisgICAgICAg
IHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSwg
bnVsbHB0cik7CiAgICAgfQogCiAgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNl
ZE9uQ29tcGlsYXRpb25SZXN1bHQodWludDMyX3QgZnVuY3Rpb25JbmRleCwgQ29tcGlsYXRpb25S
ZXN1bHQgcmVzdWx0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQmFnLmggYi9Tb3VyY2Uv
V1RGL3d0Zi9CYWcuaAppbmRleCA1MDQyYTRkZGQxZWNiMGM3YjZiOWViMzM4ZmY3OGEzMTgxMmU2
NmU3Li43YjkyMmU4YTE5NTFlMGM5ODE1NTRkNjdlYWM0MDljNmQ2N2Y0Y2MxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9CYWcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9CYWcuaApAQCAtNjYs
MjAgKzY2LDYgQEAgcHVibGljOgogICAgICAgICBvdGhlci5tX2hlYWQgPSBudWxscHRyOwogICAg
IH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgQmFnJiBvcGVyYXRvcj0oQmFnPFQs
IFU+JiYgb3RoZXIpCi0gICAgewotICAgICAgICBpZiAodW53cmFwcGVkSGVhZCgpID09IG90aGVy
LnVud3JhcHBlZEhlYWQoKSkKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLQotICAgICAgICBC
YWcgZGVzdHJveTsKLSAgICAgICAgZGVzdHJveS5tX2hlYWQgPSB1bndyYXBwZWRIZWFkKCk7Ci0g
ICAgICAgIG1faGVhZCA9IG90aGVyLnVud3JhcHBlZEhlYWQoKTsKLSAgICAgICAgb3RoZXIubV9o
ZWFkID0gbnVsbHB0cjsKLQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCiAgICAgfkJh
ZygpCiAgICAgewogICAgICAgICBjbGVhcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
UGFja2VkLmggYi9Tb3VyY2UvV1RGL3d0Zi9QYWNrZWQuaAppbmRleCAwZDk0Zjg5MGVhZWM1YWEw
MTUwMjYxZmMxOTFjNzlmZTg1Y2YzYjQyLi5lZDk0MWJmYWQxMjZlNDc0ZDMxOTc3NmViZjBmMTBj
ZWY1YzA2NTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QYWNrZWQuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9QYWNrZWQuaApAQCAtMTg2LDEwICsxODYsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9Ci0KLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVSA9IFQ+Ci0gICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6
aXNfdm9pZF92PFU+LCBVJj46OnR5cGUgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgp
OyB9Ci0KKyAgICBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KICAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFnZXQoKTsgfQogCiAgICAgLy8gVGhpcyBj
b252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGJvb2wgYnV0
IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDU0OWFmZmY2YzQ1YzdiZDVjNjYwODMwOTI1MzU0MWRl
OTU2NjQ5ZjAuLjA4ZTVlNjU1ZDJjMjdjYjZkYzI2Y2Q2ZjNlM2JmMzhjYjZhOTNkYTIgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
MSBAQAorMjAyMS0wOS0yNiAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyODMwODMgYW5kIHIyODMwODguCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzA4MDYKKwor
ICAgICAgICBXaW5kb3dzIHBvcnMgYXJlIGNyYXNoaW5nCisKKyAgICAgICAgUmV2ZXJ0ZWQgY2hh
bmdlc2V0czoKKworICAgICAgICAiQnVpbGQgYW4gdW5saW5rZWQgYmFzZWxpbmUgSklUIgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjIzCisgICAg
ICAgIGh0dHBzOi8vY29tbWl0cy53ZWJraXQub3JnL3IyODMwODMKKworICAgICAgICAiTWFrZSBi
eXRlIGNvZGVzIHdpdGggYXJpdGhtZXRpYyBwcm9maWxlcyBzd2l0Y2ggdG8gdXNpbmcgYW4KKyAg
ICAgICAgaW5kZXggaW5zdGVhZCBvZiBhIHBvaW50ZXIgaW4gbWV0YWRhdGEiCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzA3OTgKKyAgICAgICAgaHR0
cHM6Ly9jb21taXRzLndlYmtpdC5vcmcvcjI4MzA4OAorCiAyMDIxLTA5LTI1ICBMYXVybyBNb3Vy
YSAgPGxtb3VyYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHTElCXSBVc2UgbGVzcyBwYXJhbGxl
bCB3ZWJ2aWV3cyBpbiB0aGUgdXJpLXNjaGVtZSBBUEkgdGVzdCBmb3IgV1BFIGFuZCBkZWJ1ZyBi
dWlsZHMKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMgYi9U
b29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCmluZGV4IDUyMzhlYTdhNjg5N2EzOTMw
ODM3NDM5YTBkNzdiOThmODIyMjc4YWIuLjRhYzBjN2VlNjg1OGU0OGRjNGQ2ZTE2YzQxNWMyOWQ1
ODRiZDRjYjYgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMK
KysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwpAQCAtODYzLDcgKzg2Myw3
IEBAIGRlZiBydW5GVExOb0NKSVROb0FjY2Vzc0lubGluaW5nKCpvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMpCiBlbmQKIAogZGVmIHJ1bkZUTE5vQ0pJVFNtYWxsUG9vbCgqb3B0aW9uYWxUZXN0
U3BlY2lmaWNPcHRpb25zKQotICAgIHJ1bigiZnRsLW5vLWNqaXQtc21hbGwtcG9vbCIsICItLWpp
dE1lbW9yeVJlc2VydmF0aW9uU2l6ZT0yMDI0MDAiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9P
UFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBydW4oImZ0bC1uby1j
aml0LXNtYWxsLXBvb2wiLCAiLS1qaXRNZW1vcnlSZXNlcnZhdGlvblNpemU9MTAyNDAwIiwgKihG
VExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykpCiBlbmQKIAogZGVmIHJ1bk5vQ0pJVCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQpA
QCAtMTE3MSw3ICsxMTcxLDcgQEAgZGVmIGRlZmF1bHRSdW5Nb2R1bGVzKG5vTExJbnQ6IHRydWUp
CiAgICAgcnVuKCJmdGwtbm8tY2ppdC1uby1pbmxpbmUtdmFsaWRhdGUtbW9kdWxlcyIsICItbSIs
ICItLXZhbGlkYXRlR3JhcGg9dHJ1ZSIsICItLW1heGltdW1JbmxpbmluZ0RlcHRoPTEiLCAqKEZU
TF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TKSkKICAgICBydW4oImZ0bC1lYWdlci1tb2R1bGVz
IiwgIi1tIiwgKihGVExfT1BUSU9OUyArIEVBR0VSX09QVElPTlMpKQogICAgIHJ1bigiZnRsLWVh
Z2VyLW5vLWNqaXQtbW9kdWxlcyIsICItbSIsICItLXZhbGlkYXRlR3JhcGg9dHJ1ZSIsICooRlRM
X09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBFQUdFUl9PUFRJT05TKSkKLSAgICBydW4oImZ0
bC1uby1jaml0LXNtYWxsLXBvb2wtbW9kdWxlcyIsICItbSIsICItLWppdE1lbW9yeVJlc2VydmF0
aW9uU2l6ZT0yMDI0MDAiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TKSkKKyAgICBy
dW4oImZ0bC1uby1jaml0LXNtYWxsLXBvb2wtbW9kdWxlcyIsICItbSIsICItLWppdE1lbW9yeVJl
c2VydmF0aW9uU2l6ZT0xMDI0MDAiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TKSkK
IGVuZAogCiBkZWYgbm9Ob0xMSW50UnVuTW9kdWxlcwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>