<?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>165188</bug_id>
          
          <creation_ts>2016-11-29 20:50:07 -0800</creation_ts>
          <short_desc>REGRESSION(r209058): These changes caused API test StringBuilderTest.Equal to crash and/or fail. (Requested by ryanhaddad on #webkit).</short_desc>
          <delta_ts>2016-11-29 20:54:28 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>165003</blocked>
    
    <blocked>165142</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>darin</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1254682</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-29 20:50:07 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/209058 broke the build:
These changes caused API test StringBuilderTest.Equal to crash and/or fail. (Requested by ryanhaddad on #webkit).

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

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

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

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254686</commentid>
    <comment_count>2</comment_count>
      <attachid>295700</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-29 20:54:24 -0800</bug_when>
    <thetext>Comment on attachment 295700
ROLLOUT of r209058

Clearing flags on attachment: 295700

Committed r209120: &lt;http://trac.webkit.org/changeset/209120&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254687</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-29 20:54:28 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295700</attachid>
            <date>2016-11-29 20:50:41 -0800</date>
            <delta_ts>2016-11-29 20:54:24 -0800</delta_ts>
            <desc>ROLLOUT of r209058</desc>
            <filename>bug-165188-20161129235015.patch</filename>
            <type>text/plain</type>
            <size>186313</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA5MTE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
NDQ2YjVjODYyNWIzYTVkN2EwOTNiYzc1NDlkYzEzOGE3ZTg1ZWU4Li5jYjhhYjczNjJhOTY4ZGY2
YmU0NmIxZjY5YTFjMDU0Yzk5OWUwNWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAxNi0xMS0yOSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIwOTA1OCBhbmQgcjIw
OTA3NC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NTE4OAorCisgICAgICAgIFRoZXNlIGNoYW5nZXMgY2F1c2VkIEFQSSB0ZXN0IFN0cmluZ0J1aWxk
ZXJUZXN0LkVxdWFsIHRvIGNyYXNoCisgICAgICAgIGFuZC9vciBmYWlsLiAoUmVxdWVzdGVkIGJ5
IHJ5YW5oYWRkYWQgb24gI3dlYmtpdCkuCisKKyAgICAgICAgUmV2ZXJ0ZWQgY2hhbmdlc2V0czoK
KworICAgICAgICAiU3RyZWFtbGluZSBhbmQgc3BlZWQgdXAgdG9rZW5pemVyIGFuZCBzZWdtZW50
ZWQgc3RyaW5nCisgICAgICAgIGNsYXNzZXMiCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUwMDMKKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9y
Zy9jaGFuZ2VzZXQvMjA5MDU4CisKKyAgICAgICAgIlJFR1JFU1NJT04gKHIyMDkwNTgpOiBBUEkg
dGVzdCBTdHJpbmdCdWlsZGVyVGVzdC5FcXVhbAorICAgICAgICBjcmFzaGluZyIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTE0MgorICAgICAgICBo
dHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8yMDkwNzQKKwogMjAxNi0xMS0yOSAgQ2Fp
dGxpbiBQb3R0ZXIgIDxjYWl0cEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtKU0NdIGFsd2F5cyB3
cmFwIEF3YWl0RXhwcmVzc2lvbiBvcGVyYW5kIGluIGEgbmV3IFByb21pc2UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggY2ZjZTVl
NGY5ZDNhNDI2YTNhYmQ2Mjc2ZDU3Mzc5YzAwMjczODkxNS4uNzFjMzNmOGE4ZWI1N2ZlZTE5ZjI0
Y2U5NWQwZWU0MzY2NDZlMGVlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAxNi0xMS0yOSAgQ29t
bWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjIwOTA1OCBhbmQgcjIwOTA3NC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTE4OAorCisgICAgICAgIFRoZXNlIGNoYW5n
ZXMgY2F1c2VkIEFQSSB0ZXN0IFN0cmluZ0J1aWxkZXJUZXN0LkVxdWFsIHRvIGNyYXNoCisgICAg
ICAgIGFuZC9vciBmYWlsLiAoUmVxdWVzdGVkIGJ5IHJ5YW5oYWRkYWQgb24gI3dlYmtpdCkuCisK
KyAgICAgICAgUmV2ZXJ0ZWQgY2hhbmdlc2V0czoKKworICAgICAgICAiU3RyZWFtbGluZSBhbmQg
c3BlZWQgdXAgdG9rZW5pemVyIGFuZCBzZWdtZW50ZWQgc3RyaW5nCisgICAgICAgIGNsYXNzZXMi
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUwMDMK
KyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjA5MDU4CisKKyAgICAg
ICAgIlJFR1JFU1NJT04gKHIyMDkwNTgpOiBBUEkgdGVzdCBTdHJpbmdCdWlsZGVyVGVzdC5FcXVh
bAorICAgICAgICBjcmFzaGluZyIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NTE0MgorICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5n
ZXNldC8yMDkwNzQKKwogMjAxNi0xMS0yOSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFw
cGxlLmNvbT4KIAogICAgICAgICBBbGxvdyBUcmFjZVBvaW50IHRvIHRha2UgYXJiaXRyYXJ5IGRh
dGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCBhMDFlMTE4YWQzZDhjNjMyZWQ3MTExYzAwZDY3MWI1ODlhYjc5OTcy
Li5hZjI0ZTQ1NzcyYmNlOGUzNWU1NzNmN2MyMWI5M2Q3OTFmZGFhMWU1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTYtMTEtMjkgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3
ZWJraXQub3JnPgorCisgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMDkwNTggYW5k
IHIyMDkwNzQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjUxODgKKworICAgICAgICBUaGVzZSBjaGFuZ2VzIGNhdXNlZCBBUEkgdGVzdCBTdHJpbmdC
dWlsZGVyVGVzdC5FcXVhbCB0byBjcmFzaAorICAgICAgICBhbmQvb3IgZmFpbC4gKFJlcXVlc3Rl
ZCBieSByeWFuaGFkZGFkIG9uICN3ZWJraXQpLgorCisgICAgICAgIFJldmVydGVkIGNoYW5nZXNl
dHM6CisKKyAgICAgICAgIlN0cmVhbWxpbmUgYW5kIHNwZWVkIHVwIHRva2VuaXplciBhbmQgc2Vn
bWVudGVkIHN0cmluZworICAgICAgICBjbGFzc2VzIgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MDAzCisgICAgICAgIGh0dHA6Ly90cmFjLndlYmtp
dC5vcmcvY2hhbmdlc2V0LzIwOTA1OAorCisgICAgICAgICJSRUdSRVNTSU9OIChyMjA5MDU4KTog
QVBJIHRlc3QgU3RyaW5nQnVpbGRlclRlc3QuRXF1YWwKKyAgICAgICAgY3Jhc2hpbmciCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUxNDIKKyAgICAg
ICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjA5MDc0CisKIDIwMTYtMTEtMjkg
IE5hbiBXYW5nICA8bl93YW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBBWDogQVJJQSB0cmVlICYg
dHJlZWl0ZW0gcm9sZXMgJiBhcmlhLWV4cGFuZGVkIHN0YXRlIG5vdCBzcG9rZW4gdG8gVm9pY2VP
dmVyIGlPUyAxMApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
Tk9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNw
cAppbmRleCAzOTIyMWQzM2Y3ZTg2ZTQwNWM5ZDFiZmIzNWYxNjZlNmRhYTg0NDg1Li4yOTU3YWUy
OTQ1YmNkYjY0ZmQ4MTg0NjczNzgyODJjYjUyOWI0ZWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDktMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDksIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNTQsNyArMzU0LDcgQEAgU3RyaW5n
aWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBTdHJpbmdpZmllcjo6YXBwZW5kU3RyaW5naWZpZWRWYWx1
ZShTdHJpbmdCdWlsZGVyJgogICAgIH0KIAogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0g
ICAgICAgIGJ1aWxkZXIuYXBwZW5kUXVvdGVkSlNPTlN0cmluZyhhc1N0cmluZyh2YWx1ZSktPnZp
ZXdXaXRoVW5kZXJseWluZ1N0cmluZygqbV9leGVjKS52aWV3KTsKKyAgICAgICAgYnVpbGRlci5h
cHBlbmRRdW90ZWRKU09OU3RyaW5nKGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUobV9leGVjKSk7CiAg
ICAgICAgIHJldHVybiBTdHJpbmdpZnlTdWNjZWVkZWQ7CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwIGIvU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmNwcAppbmRleCBjZmEwYzIxYTljZmZmZDI4NjBlMTUwNjg5YTcxM2Vk
ZGNjOTgzMzg0Li5hZmUxMzQxOTI4YTcwYWZmOGI4YzAxNzBjMjQ2YWExNTU4NjJlYmE4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEwLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAi
SW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oIgogI2luY2x1ZGUgIk1hdGhFeHRyYXMuaCIKKyNp
bmNsdWRlICJXVEZTdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvZHRvYS5oPgogCiBuYW1lc3BhY2Ug
V1RGIHsKQEAgLTM5LDE4ICs0MCw2IEBAIHN0YXRpYyB1bnNpZ25lZCBleHBhbmRlZENhcGFjaXR5
KHVuc2lnbmVkIGNhcGFjaXR5LCB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKICAgICByZXR1cm4g
c3RkOjptYXgocmVxdWlyZWRMZW5ndGgsIHN0ZDo6bWF4KG1pbmltdW1DYXBhY2l0eSwgY2FwYWNp
dHkgKiAyKSk7CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSBMQ2hhciogU3RyaW5nQnVp
bGRlcjo6YnVmZmVyQ2hhcmFjdGVyczxMQ2hhcj4oKQotewotICAgIEFTU0VSVChtX2lzOEJpdCk7
Ci0gICAgcmV0dXJuIG1fYnVmZmVyQ2hhcmFjdGVyczg7Ci19Ci0KLXRlbXBsYXRlPD4gQUxXQVlT
X0lOTElORSBVQ2hhciogU3RyaW5nQnVpbGRlcjo6YnVmZmVyQ2hhcmFjdGVyczxVQ2hhcj4oKQot
ewotICAgIEFTU0VSVCghbV9pczhCaXQpOwotICAgIHJldHVybiBtX2J1ZmZlckNoYXJhY3RlcnMx
NjsKLX0KLQogdm9pZCBTdHJpbmdCdWlsZGVyOjpyZWlmeVN0cmluZygpIGNvbnN0CiB7CiAgICAg
Ly8gQ2hlY2sgaWYgdGhlIHN0cmluZyBhbHJlYWR5IGV4aXN0cy4KQEAgLTEwOCw3ICs5Nyw2IEBA
IHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVzaXplKHVuc2lnbmVkIG5ld1NpemUpCiB2b2lkIFN0cmlu
Z0J1aWxkZXI6OmFsbG9jYXRlQnVmZmVyKGNvbnN0IExDaGFyKiBjdXJyZW50Q2hhcmFjdGVycywg
dW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCiB7CiAgICAgQVNTRVJUKG1faXM4Qml0KTsKLQogICAg
IC8vIENvcHkgdGhlIGV4aXN0aW5nIGRhdGEgaW50byBhIG5ldyBidWZmZXIsIHNldCByZXN1bHQg
dG8gcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUgZXhpc3RpbmcgZGF0YS4KICAgICBhdXRvIGJ1ZmZl
ciA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVxdWlyZWRMZW5ndGgsIG1fYnVm
ZmVyQ2hhcmFjdGVyczgpOwogICAgIG1lbWNweShtX2J1ZmZlckNoYXJhY3RlcnM4LCBjdXJyZW50
Q2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2xlbmd0aCkgKiBzaXplb2YoTENoYXIp
KTsgLy8gVGhpcyBjYW4ndCBvdmVyZmxvdy4KQEAgLTEyNCw3ICsxMTIsNiBAQCB2b2lkIFN0cmlu
Z0J1aWxkZXI6OmFsbG9jYXRlQnVmZmVyKGNvbnN0IExDaGFyKiBjdXJyZW50Q2hhcmFjdGVycywg
dW5zaWduZWQgcmVxdQogdm9pZCBTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcihjb25zdCBV
Q2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQogewogICAg
IEFTU0VSVCghbV9pczhCaXQpOwotCiAgICAgLy8gQ29weSB0aGUgZXhpc3RpbmcgZGF0YSBpbnRv
IGEgbmV3IGJ1ZmZlciwgc2V0IHJlc3VsdCB0byBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBleGlz
dGluZyBkYXRhLgogICAgIGF1dG8gYnVmZmVyID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFs
aXplZChyZXF1aXJlZExlbmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJzMTYpOwogICAgIG1lbWNweSht
X2J1ZmZlckNoYXJhY3RlcnMxNiwgY3VycmVudENoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVf
dD4obV9sZW5ndGgpICogc2l6ZW9mKFVDaGFyKSk7IC8vIFRoaXMgY2FuJ3Qgb3ZlcmZsb3cuCkBA
IC0xMzcsMTEgKzEyNCwxMCBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFsbG9jYXRlQnVmZmVyKGNv
bnN0IFVDaGFyKiBjdXJyZW50Q2hhcmFjdGVycywgdW5zaWduZWQgcmVxdQogCiAvLyBBbGxvY2F0
ZSBhIG5ldyAxNiBiaXQgYnVmZmVyLCBjb3B5aW5nIGluIGN1cnJlbnRDaGFyYWN0ZXJzICh3aGlj
aCBpcyA4IGJpdCBhbmQgbWF5IGNvbWUKIC8vIGZyb20gZWl0aGVyIG1fc3RyaW5nIG9yIG1fYnVm
ZmVyLCBuZWl0aGVyIHdpbGwgYmUgcmVhc3NpZ25lZCB1bnRpbCB0aGUgY29weSBoYXMgY29tcGxl
dGVkKS4KLXZvaWQgU3RyaW5nQnVpbGRlcjo6YWxsb2NhdGVCdWZmZXJVcGNvbnZlcnQoY29uc3Qg
TENoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKK3ZvaWQg
U3RyaW5nQnVpbGRlcjo6YWxsb2NhdGVCdWZmZXJVcENvbnZlcnQoY29uc3QgTENoYXIqIGN1cnJl
bnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKIHsKICAgICBBU1NFUlQobV9p
czhCaXQpOwogICAgIEFTU0VSVChyZXF1aXJlZExlbmd0aCA+PSBtX2xlbmd0aCk7Ci0KICAgICAv
LyBDb3B5IHRoZSBleGlzdGluZyBkYXRhIGludG8gYSBuZXcgYnVmZmVyLCBzZXQgcmVzdWx0IHRv
IHBvaW50IHRvIHRoZSBlbmQgb2YgdGhlIGV4aXN0aW5nIGRhdGEuCiAgICAgYXV0byBidWZmZXIg
PSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHJlcXVpcmVkTGVuZ3RoLCBtX2J1ZmZl
ckNoYXJhY3RlcnMxNik7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyAr
K2kpCkBAIC0xNTUsNyArMTQxLDggQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZl
clVwY29udmVydChjb25zdCBMQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2kKICAgICBBU1NF
UlQobV9idWZmZXItPmxlbmd0aCgpID09IHJlcXVpcmVkTGVuZ3RoKTsKIH0KIAotdGVtcGxhdGU8
PiB2b2lkIFN0cmluZ0J1aWxkZXI6OnJlYWxsb2NhdGVCdWZmZXI8TENoYXI+KHVuc2lnbmVkIHJl
cXVpcmVkTGVuZ3RoKQordGVtcGxhdGUgPD4KK3ZvaWQgU3RyaW5nQnVpbGRlcjo6cmVhbGxvY2F0
ZUJ1ZmZlcjxMQ2hhcj4odW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCiB7CiAgICAgLy8gSWYgdGhl
IGJ1ZmZlciBoYXMgb25seSBvbmUgcmVmIChieSB0aGlzIFN0cmluZ0J1aWxkZXIpLCByZWFsbG9j
YXRlIGl0LAogICAgIC8vIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gImFsbG9jYXRlIGFuZCBjb3B5
IiBtZXRob2QuCkBAIC0xNzEsMTQgKzE1OCwxNSBAQCB0ZW1wbGF0ZTw+IHZvaWQgU3RyaW5nQnVp
bGRlcjo6cmVhbGxvY2F0ZUJ1ZmZlcjxMQ2hhcj4odW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCiAg
ICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA9PSByZXF1aXJlZExlbmd0aCk7CiB9CiAKLXRl
bXBsYXRlPD4gdm9pZCBTdHJpbmdCdWlsZGVyOjpyZWFsbG9jYXRlQnVmZmVyPFVDaGFyPih1bnNp
Z25lZCByZXF1aXJlZExlbmd0aCkKK3RlbXBsYXRlIDw+Cit2b2lkIFN0cmluZ0J1aWxkZXI6OnJl
YWxsb2NhdGVCdWZmZXI8VUNoYXI+KHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQogewogICAgIC8v
IElmIHRoZSBidWZmZXIgaGFzIG9ubHkgb25lIHJlZiAoYnkgdGhpcyBTdHJpbmdCdWlsZGVyKSwg
cmVhbGxvY2F0ZSBpdCwKICAgICAvLyBvdGhlcndpc2UgZmFsbCBiYWNrIHRvICJhbGxvY2F0ZSBh
bmQgY29weSIgbWV0aG9kLgogICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7CiAgICAgCiAgICAgaWYg
KG1fYnVmZmVyLT5pczhCaXQoKSkKLSAgICAgICAgYWxsb2NhdGVCdWZmZXJVcGNvbnZlcnQobV9i
dWZmZXItPmNoYXJhY3RlcnM4KCksIHJlcXVpcmVkTGVuZ3RoKTsKKyAgICAgICAgYWxsb2NhdGVC
dWZmZXJVcENvbnZlcnQobV9idWZmZXItPmNoYXJhY3RlcnM4KCksIHJlcXVpcmVkTGVuZ3RoKTsK
ICAgICBlbHNlIGlmIChtX2J1ZmZlci0+aGFzT25lUmVmKCkpCiAgICAgICAgIG1fYnVmZmVyID0g
U3RyaW5nSW1wbDo6cmVhbGxvY2F0ZShtX2J1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCByZXF1aXJl
ZExlbmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJzMTYpOwogICAgIGVsc2UKQEAgLTIwMCw3ICsxODgs
NyBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OnJlc2VydmVDYXBhY2l0eSh1bnNpZ25lZCBuZXdDYXBh
Y2l0eSkKICAgICAgICAgLy8gR3JvdyB0aGUgc3RyaW5nLCBpZiBuZWNlc3NhcnkuCiAgICAgICAg
IGlmIChuZXdDYXBhY2l0eSA+IG1fbGVuZ3RoKSB7CiAgICAgICAgICAgICBpZiAoIW1fbGVuZ3Ro
KSB7Ci0gICAgICAgICAgICAgICAgTENoYXIqIG51bGxQbGFjZWhvbGRlciA9IG51bGxwdHI7Cisg
ICAgICAgICAgICAgICAgTENoYXIqIG51bGxQbGFjZWhvbGRlciA9IDA7CiAgICAgICAgICAgICAg
ICAgYWxsb2NhdGVCdWZmZXIobnVsbFBsYWNlaG9sZGVyLCBuZXdDYXBhY2l0eSk7CiAgICAgICAg
ICAgICB9IGVsc2UgaWYgKG1fc3RyaW5nLmlzOEJpdCgpKQogICAgICAgICAgICAgICAgIGFsbG9j
YXRlQnVmZmVyKG1fc3RyaW5nLmNoYXJhY3RlcnM4KCksIG5ld0NhcGFjaXR5KTsKQEAgLTIxMyw3
ICsyMDEsOCBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OnJlc2VydmVDYXBhY2l0eSh1bnNpZ25lZCBu
ZXdDYXBhY2l0eSkKIAogLy8gTWFrZSAnbGVuZ3RoJyBhZGRpdGlvbmFsIGNhcGFjaXR5IGJlIGF2
YWlsYWJsZSBpbiBtX2J1ZmZlciwgdXBkYXRlIG1fc3RyaW5nICYgbV9sZW5ndGgsCiAvLyByZXR1
cm4gYSBwb2ludGVyIHRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgc3RvcmFnZS4KLXRlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IEFMV0FZU19JTkxJTkUgQ2hhcmFjdGVyVHlwZSogU3RyaW5n
QnVpbGRlcjo6YXBwZW5kVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhclR5cGU+CitBTFdBWVNfSU5MSU5FIENoYXJUeXBlKiBTdHJpbmdCdWlsZGVy
OjphcHBlbmRVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBBU1NFUlQobGVu
Z3RoKTsKIApAQCAtMjI4LDUzICsyMTcsMzUgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gQUxXQVlTX0lOTElORSBDaGFyYWN0ZXJUeXBlKiBTdHJpbmdCdWlsZGVyOjphcHAKICAg
ICAgICAgdW5zaWduZWQgY3VycmVudExlbmd0aCA9IG1fbGVuZ3RoOwogICAgICAgICBtX3N0cmlu
ZyA9IFN0cmluZygpOwogICAgICAgICBtX2xlbmd0aCA9IHJlcXVpcmVkTGVuZ3RoOwotICAgICAg
ICByZXR1cm4gYnVmZmVyQ2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpICsgY3VycmVudExlbmd0
aDsKKyAgICAgICAgcmV0dXJuIGdldEJ1ZmZlckNoYXJhY3RlcnM8Q2hhclR5cGU+KCkgKyBjdXJy
ZW50TGVuZ3RoOwogICAgIH0KLQotICAgIHJldHVybiBhcHBlbmRVbmluaXRpYWxpemVkU2xvdzxD
aGFyYWN0ZXJUeXBlPihyZXF1aXJlZExlbmd0aCk7CisgICAgCisgICAgcmV0dXJuIGFwcGVuZFVu
aW5pdGlhbGl6ZWRTbG93PENoYXJUeXBlPihyZXF1aXJlZExlbmd0aCk7CiB9CiAKIC8vIE1ha2Ug
J2xlbmd0aCcgYWRkaXRpb25hbCBjYXBhY2l0eSBiZSBhdmFpbGFibGUgaW4gbV9idWZmZXIsIHVw
ZGF0ZSBtX3N0cmluZyAmIG1fbGVuZ3RoLAogLy8gcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbmV3
bHkgYWxsb2NhdGVkIHN0b3JhZ2UuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBD
aGFyYWN0ZXJUeXBlKiBTdHJpbmdCdWlsZGVyOjphcHBlbmRVbmluaXRpYWxpemVkU2xvdyh1bnNp
Z25lZCByZXF1aXJlZExlbmd0aCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KK0NoYXJU
eXBlKiBTdHJpbmdCdWlsZGVyOjphcHBlbmRVbmluaXRpYWxpemVkU2xvdyh1bnNpZ25lZCByZXF1
aXJlZExlbmd0aCkKIHsKICAgICBBU1NFUlQocmVxdWlyZWRMZW5ndGgpOwogCiAgICAgaWYgKG1f
YnVmZmVyKSB7CiAgICAgICAgIC8vIElmIHRoZSBidWZmZXIgaXMgdmFsaWQgaXQgbXVzdCBiZSBh
dCBsZWFzdCBhcyBsb25nIGFzIHRoZSBjdXJyZW50IGJ1aWxkZXIgY29udGVudHMhCiAgICAgICAg
IEFTU0VSVChtX2J1ZmZlci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgpOwotICAgICAgICByZWFsbG9j
YXRlQnVmZmVyPENoYXJhY3RlclR5cGU+KGV4cGFuZGVkQ2FwYWNpdHkoY2FwYWNpdHkoKSwgcmVx
dWlyZWRMZW5ndGgpKTsKKyAgICAgICAgCisgICAgICAgIHJlYWxsb2NhdGVCdWZmZXI8Q2hhclR5
cGU+KGV4cGFuZGVkQ2FwYWNpdHkoY2FwYWNpdHkoKSwgcmVxdWlyZWRMZW5ndGgpKTsKICAgICB9
IGVsc2UgewogICAgICAgICBBU1NFUlQobV9zdHJpbmcubGVuZ3RoKCkgPT0gbV9sZW5ndGgpOwot
ICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2xlbmd0aCA/IG1fc3RyaW5nLmNoYXJhY3RlcnM8Q2hh
cmFjdGVyVHlwZT4oKSA6IG51bGxwdHIsIGV4cGFuZGVkQ2FwYWNpdHkoY2FwYWNpdHkoKSwgcmVx
dWlyZWRMZW5ndGgpKTsKKyAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9sZW5ndGggPyBtX3N0cmlu
Zy5jaGFyYWN0ZXJzPENoYXJUeXBlPigpIDogMCwgZXhwYW5kZWRDYXBhY2l0eShjYXBhY2l0eSgp
LCByZXF1aXJlZExlbmd0aCkpOwogICAgIH0KICAgICAKLSAgICBhdXRvKiByZXN1bHQgPSBidWZm
ZXJDaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCkgKyBtX2xlbmd0aDsKKyAgICBDaGFyVHlwZSog
cmVzdWx0ID0gZ2V0QnVmZmVyQ2hhcmFjdGVyczxDaGFyVHlwZT4oKSArIG1fbGVuZ3RoOwogICAg
IG1fbGVuZ3RoID0gcmVxdWlyZWRMZW5ndGg7CiAgICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgo
KSA+PSBtX2xlbmd0aCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotaW5saW5lIFVDaGFyKiBT
dHJpbmdCdWlsZGVyOjphcHBlbmRVbmluaXRpYWxpemVkVXBjb252ZXJ0KHVuc2lnbmVkIGxlbmd0
aCkKLXsKLSAgICB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCA9IGxlbmd0aCArIG1fbGVuZ3RoOwot
ICAgIGlmIChyZXF1aXJlZExlbmd0aCA8IGxlbmd0aCkKLSAgICAgICAgQ1JBU0goKTsKLQotICAg
IGlmIChtX2J1ZmZlcikgewotICAgICAgICAvLyBJZiB0aGUgYnVmZmVyIGlzIHZhbGlkIGl0IG11
c3QgYmUgYXQgbGVhc3QgYXMgbG9uZyBhcyB0aGUgY3VycmVudCBidWlsZGVyIGNvbnRlbnRzIQot
ICAgICAgICBBU1NFUlQobV9idWZmZXItPmxlbmd0aCgpID49IG1fbGVuZ3RoKTsKLSAgICAgICAg
YWxsb2NhdGVCdWZmZXJVcGNvbnZlcnQobV9idWZmZXItPmNoYXJhY3RlcnM4KCksIGV4cGFuZGVk
Q2FwYWNpdHkoY2FwYWNpdHkoKSwgcmVxdWlyZWRMZW5ndGgpKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBBU1NFUlQobV9zdHJpbmcubGVuZ3RoKCkgPT0gbV9sZW5ndGgpOwotICAgICAgICBhbGxv
Y2F0ZUJ1ZmZlclVwY29udmVydChtX3N0cmluZy5pc051bGwoKSA/IG51bGxwdHIgOiBtX3N0cmlu
Zy5jaGFyYWN0ZXJzOCgpLCBleHBhbmRlZENhcGFjaXR5KGNhcGFjaXR5KCksIHJlcXVpcmVkTGVu
Z3RoKSk7Ci0gICAgfQotCi0gICAgYXV0byogcmVzdWx0ID0gbV9idWZmZXJDaGFyYWN0ZXJzMTYg
KyBtX2xlbmd0aDsKLSAgICBtX2xlbmd0aCA9IHJlcXVpcmVkTGVuZ3RoOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KIHZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKCFsZW5ndGgpCkBAIC0yODMsMTYg
KzI1NCwzMiBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoKQogICAgIEFTU0VSVChjaGFyYWN0ZXJzKTsKIAogICAgIGlm
IChtX2lzOEJpdCkgewotICAgICAgICBpZiAobGVuZ3RoID09IDEgJiYgISgqY2hhcmFjdGVycyAm
IH4weEZGKSkgeworICAgICAgICBpZiAobGVuZ3RoID09IDEgJiYgISgqY2hhcmFjdGVycyAmIH4w
eGZmKSkgewogICAgICAgICAgICAgLy8gQXBwZW5kIGFzIDggYml0IGNoYXJhY3RlcgogICAgICAg
ICAgICAgTENoYXIgbENoYXIgPSBzdGF0aWNfY2FzdDxMQ2hhcj4oKmNoYXJhY3RlcnMpOwogICAg
ICAgICAgICAgYXBwZW5kKCZsQ2hhciwgMSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICAgICAgbWVtY3B5KGFwcGVuZFVuaW5pdGlhbGl6ZWRVcGNvbnZlcnQobGVuZ3RoKSwg
Y2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpICogc2l6ZW9mKFVDaGFyKSk7
CisKKyAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBuZXcgc2l6ZSBvZiB0aGUgYnVpbGRlciBhZnRl
ciBhcHBlbmRpbmcuCisgICAgICAgIHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoID0gbGVuZ3RoICsg
bV9sZW5ndGg7CisgICAgICAgIGlmIChyZXF1aXJlZExlbmd0aCA8IGxlbmd0aCkKKyAgICAgICAg
ICAgIENSQVNIKCk7CisgICAgICAgIAorICAgICAgICBpZiAobV9idWZmZXIpIHsKKyAgICAgICAg
ICAgIC8vIElmIHRoZSBidWZmZXIgaXMgdmFsaWQgaXQgbXVzdCBiZSBhdCBsZWFzdCBhcyBsb25n
IGFzIHRoZSBjdXJyZW50IGJ1aWxkZXIgY29udGVudHMhCisgICAgICAgICAgICBBU1NFUlQobV9i
dWZmZXItPmxlbmd0aCgpID49IG1fbGVuZ3RoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
YWxsb2NhdGVCdWZmZXJVcENvbnZlcnQobV9idWZmZXItPmNoYXJhY3RlcnM4KCksIGV4cGFuZGVk
Q2FwYWNpdHkoY2FwYWNpdHkoKSwgcmVxdWlyZWRMZW5ndGgpKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIEFTU0VSVChtX3N0cmluZy5sZW5ndGgoKSA9PSBtX2xlbmd0aCk7CisgICAg
ICAgICAgICBhbGxvY2F0ZUJ1ZmZlclVwQ29udmVydChtX3N0cmluZy5pc051bGwoKSA/IDAgOiBt
X3N0cmluZy5jaGFyYWN0ZXJzOCgpLCBleHBhbmRlZENhcGFjaXR5KGNhcGFjaXR5KCksIHJlcXVp
cmVkTGVuZ3RoKSk7CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkobV9idWZmZXJDaGFyYWN0
ZXJzMTYgKyBtX2xlbmd0aCwgY2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgp
ICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIG1fbGVuZ3RoID0gcmVxdWlyZWRMZW5ndGg7CiAg
ICAgfSBlbHNlCiAgICAgICAgIG1lbWNweShhcHBlbmRVbmluaXRpYWxpemVkPFVDaGFyPihsZW5n
dGgpLCBjaGFyYWN0ZXJzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkgKiBzaXplb2YoVUNo
YXIpKTsKLQogICAgIEFTU0VSVChtX2J1ZmZlci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgpOwogfQog
CkBAIC0zMDMsMjIgKzI5MCwxOSBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChjb25zdCBM
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogICAgIEFTU0VSVChjaGFyYWN0ZXJz
KTsKIAogICAgIGlmIChtX2lzOEJpdCkgewotICAgICAgICBhdXRvKiBkZXN0aW5hdGlvbiA9IGFw
cGVuZFVuaW5pdGlhbGl6ZWQ8TENoYXI+KGxlbmd0aCk7Ci0gICAgICAgIC8vIEZJWE1FOiBIb3cg
ZGlkIHdlIGRldGVybWluZSBhIHRocmVzaG9sZCBvZiA4IGhlcmUgd2FzIHRoZSByaWdodCBvbmU/
Ci0gICAgICAgIC8vIEFsc28sIHRoaXMga2luZCBvZiBvcHRpbWl6YXRpb24gY291bGQgYmUgdXNl
ZnVsIGFueXdoZXJlIGVsc2Ugd2UgaGF2ZSBhCi0gICAgICAgIC8vIHBlcmZvcm1hbmNlLXNlbnNp
dGl2ZSBjb2RlIHBhdGggdGhhdCBjYWxscyBtZW1jcHkuCisgICAgICAgIExDaGFyKiBkZXN0ID0g
YXBwZW5kVW5pbml0aWFsaXplZDxMQ2hhcj4obGVuZ3RoKTsKICAgICAgICAgaWYgKGxlbmd0aCA+
IDgpCi0gICAgICAgICAgICBtZW1jcHkoZGVzdGluYXRpb24sIGNoYXJhY3RlcnMsIGxlbmd0aCk7
CisgICAgICAgICAgICBtZW1jcHkoZGVzdCwgY2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6ZV90
PihsZW5ndGgpICogc2l6ZW9mKExDaGFyKSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
Y29uc3QgTENoYXIqIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7CiAgICAgICAgICAgICB3aGls
ZSAoY2hhcmFjdGVycyA8IGVuZCkKLSAgICAgICAgICAgICAgICAqZGVzdGluYXRpb24rKyA9ICpj
aGFyYWN0ZXJzKys7CisgICAgICAgICAgICAgICAgKihkZXN0KyspID0gKihjaGFyYWN0ZXJzKysp
OwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byogZGVzdGluYXRpb24gPSBh
cHBlbmRVbmluaXRpYWxpemVkPFVDaGFyPihsZW5ndGgpOworICAgICAgICBVQ2hhciogZGVzdCA9
IGFwcGVuZFVuaW5pdGlhbGl6ZWQ8VUNoYXI+KGxlbmd0aCk7CiAgICAgICAgIGNvbnN0IExDaGFy
KiBlbmQgPSBjaGFyYWN0ZXJzICsgbGVuZ3RoOwogICAgICAgICB3aGlsZSAoY2hhcmFjdGVycyA8
IGVuZCkKLSAgICAgICAgICAgICpkZXN0aW5hdGlvbisrID0gKmNoYXJhY3RlcnMrKzsKKyAgICAg
ICAgICAgICooZGVzdCsrKSA9ICooY2hhcmFjdGVycysrKTsKICAgICB9CiB9CiAKQEAgLTQwMSw1
OCArMzg1LDE3IEBAIHZvaWQgU3RyaW5nQnVpbGRlcjo6c2hyaW5rVG9GaXQoKQogICAgIH0KIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgTGVuZ3RoVHlwZSwgdHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
c3RhdGljIExlbmd0aFR5cGUgcXVvdGVkSlNPTlN0cmluZ0xlbmd0aChjb25zdCBDaGFyYWN0ZXJU
eXBlKiBpbnB1dCwgdW5zaWduZWQgbGVuZ3RoKQordGVtcGxhdGUgPHR5cGVuYW1lIE91dHB1dENo
YXJhY3RlclR5cGUsIHR5cGVuYW1lIElucHV0Q2hhcmFjdGVyVHlwZT4KK3N0YXRpYyB2b2lkIGFw
cGVuZFF1b3RlZEpTT05TdHJpbmdJbnRlcm5hbChPdXRwdXRDaGFyYWN0ZXJUeXBlKiYgb3V0cHV0
LCBjb25zdCBJbnB1dENoYXJhY3RlclR5cGUqIGlucHV0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0g
ICAgTGVuZ3RoVHlwZSBxdW90ZWRMZW5ndGggPSAyOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBhdXRvIGNoYXJhY3RlciA9IGlucHV0W2ldOwot
ICAgICAgICBpZiAoTElLRUxZKGNoYXJhY3RlciA+IDB4MUYpKSB7Ci0gICAgICAgICAgICBzd2l0
Y2ggKGNoYXJhY3RlcikgewotICAgICAgICAgICAgY2FzZSAnIic6Ci0gICAgICAgICAgICBjYXNl
ICdcXCc6Ci0gICAgICAgICAgICAgICAgcXVvdGVkTGVuZ3RoICs9IDI7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICsrcXVvdGVk
TGVuZ3RoOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgc3dpdGNoIChjaGFyYWN0ZXIpIHsKLSAgICAgICAgICAgIGNh
c2UgJ1x0JzoKLSAgICAgICAgICAgIGNhc2UgJ1xyJzoKLSAgICAgICAgICAgIGNhc2UgJ1xuJzoK
LSAgICAgICAgICAgIGNhc2UgJ1xmJzoKLSAgICAgICAgICAgIGNhc2UgJ1xiJzoKLSAgICAgICAg
ICAgICAgICBxdW90ZWRMZW5ndGggKz0gMjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcXVvdGVkTGVuZ3RoICs9IDY7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHF1b3RlZExlbmd0aDsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSB1bnNpZ25l
ZCBxdW90ZWRKU09OU3RyaW5nTGVuZ3RoKGNvbnN0IENoYXJhY3RlclR5cGUqIGlucHV0LCB1bnNp
Z25lZCBsZW5ndGgpCi17Ci0gICAgY29uc3RleHByIGF1dG8gbWF4U2FmZUxlbmd0aCA9IChzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSAyKSAvIDY7Ci0gICAgaWYgKGxlbmd0
aCA8PSBtYXhTYWZlTGVuZ3RoKQotICAgICAgICByZXR1cm4gcXVvdGVkSlNPTlN0cmluZ0xlbmd0
aDx1bnNpZ25lZD4oaW5wdXQsIGxlbmd0aCk7Ci0gICAgcmV0dXJuIHF1b3RlZEpTT05TdHJpbmdM
ZW5ndGg8Q2hlY2tlZDx1bnNpZ25lZD4+KGlucHV0LCBsZW5ndGgpLnVuc2FmZUdldCgpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBPdXRwdXRDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBJbnB1dENo
YXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRRdW90ZWRKU09OU3RyaW5nSW50
ZXJuYWwoT3V0cHV0Q2hhcmFjdGVyVHlwZSogb3V0cHV0LCBjb25zdCBJbnB1dENoYXJhY3RlclR5
cGUqIGlucHV0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgKm91dHB1dCsrID0gJyInOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBhdXRvIGNo
YXJhY3RlciA9IGlucHV0W2ldOwotICAgICAgICBpZiAoTElLRUxZKGNoYXJhY3RlciA+IDB4MUYp
KSB7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoY2hhcmFjdGVyID09ICciJyB8fCBjaGFyYWN0
ZXIgPT0gJ1xcJykpCisgICAgZm9yIChjb25zdCBJbnB1dENoYXJhY3RlclR5cGUqIGVuZCA9IGlu
cHV0ICsgbGVuZ3RoOyBpbnB1dCAhPSBlbmQ7ICsraW5wdXQpIHsKKyAgICAgICAgaWYgKExJS0VM
WSgqaW5wdXQgPiAweDFGKSkgeworICAgICAgICAgICAgaWYgKCppbnB1dCA9PSAnIicgfHwgKmlu
cHV0ID09ICdcXCcpCiAgICAgICAgICAgICAgICAgKm91dHB1dCsrID0gJ1xcJzsKLSAgICAgICAg
ICAgICpvdXRwdXQrKyA9IGNoYXJhY3RlcjsKKyAgICAgICAgICAgICpvdXRwdXQrKyA9ICppbnB1
dDsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAoY2hh
cmFjdGVyKSB7CisgICAgICAgIHN3aXRjaCAoKmlucHV0KSB7CiAgICAgICAgIGNhc2UgJ1x0JzoK
ICAgICAgICAgICAgICpvdXRwdXQrKyA9ICdcXCc7CiAgICAgICAgICAgICAqb3V0cHV0KysgPSAn
dCc7CkBAIC00NzQsMzUgKzQxNyw1NiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRwdXRDaGFyYWN0
ZXJUeXBlLCB0eXBlbmFtZSBJbnB1dENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbgogICAgICAg
ICAgICAgKm91dHB1dCsrID0gJ2InOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBBU1NFUlQoIShjaGFyYWN0ZXIgJiB+MHhGRikpOworICAgICAgICAg
ICAgQVNTRVJUKCgqaW5wdXQgJiAweEZGMDApID09IDApOworICAgICAgICAgICAgc3RhdGljIGNv
bnN0IGNoYXIgaGV4RGlnaXRzW10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CiAgICAgICAgICAgICAq
b3V0cHV0KysgPSAnXFwnOwogICAgICAgICAgICAgKm91dHB1dCsrID0gJ3UnOwogICAgICAgICAg
ICAgKm91dHB1dCsrID0gJzAnOwogICAgICAgICAgICAgKm91dHB1dCsrID0gJzAnOwotICAgICAg
ICAgICAgKm91dHB1dCsrID0gdXBwZXJOaWJibGVUb0xvd2VyY2FzZUFTQ0lJSGV4RGlnaXQoY2hh
cmFjdGVyKTsKLSAgICAgICAgICAgICpvdXRwdXQrKyA9IGxvd2VyTmliYmxlVG9Mb3dlcmNhc2VB
U0NJSUhleERpZ2l0KGNoYXJhY3Rlcik7CisgICAgICAgICAgICAqb3V0cHV0KysgPSBzdGF0aWNf
Y2FzdDxMQ2hhcj4oaGV4RGlnaXRzWygqaW5wdXQgPj4gNCkgJiAweEZdKTsKKyAgICAgICAgICAg
ICpvdXRwdXQrKyA9IHN0YXRpY19jYXN0PExDaGFyPihoZXhEaWdpdHNbKmlucHV0ICYgMHhGXSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLSAgICAqb3V0cHV0ID0gJyIn
OwogfQogCi12b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZFF1b3RlZEpTT05TdHJpbmcoU3RyaW5n
VmlldyBzdHJpbmcpCit2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZFF1b3RlZEpTT05TdHJpbmco
Y29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxl
bmd0aCgpOwotICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpIHsKLSAgICAgICAgYXV0byogY2hhcmFj
dGVycyA9IHN0cmluZy5jaGFyYWN0ZXJzOCgpOwotICAgICAgICBpZiAobV9pczhCaXQpCi0gICAg
ICAgICAgICBhcHBlbmRRdW90ZWRKU09OU3RyaW5nSW50ZXJuYWwoYXBwZW5kVW5pbml0aWFsaXpl
ZDxMQ2hhcj4ocXVvdGVkSlNPTlN0cmluZ0xlbmd0aChjaGFyYWN0ZXJzLCBsZW5ndGgpKSwgY2hh
cmFjdGVycywgbGVuZ3RoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXBwZW5kUXVvdGVk
SlNPTlN0cmluZ0ludGVybmFsKGFwcGVuZFVuaW5pdGlhbGl6ZWQ8VUNoYXI+KHF1b3RlZEpTT05T
dHJpbmdMZW5ndGgoY2hhcmFjdGVycywgbGVuZ3RoKSksIGNoYXJhY3RlcnMsIGxlbmd0aCk7Cisg
ICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIGJ1ZmZlciBzcGFjZSB0byBhcHBlbmQgdGhp
cyBzdHJpbmcgd2l0aG91dCBoYXZpbmcKKyAgICAvLyB0byB3b3JyeSBhYm91dCByZWFsbG9jYXRp
bmcgaW4gdGhlIG1pZGRsZS4KKyAgICAvLyBUaGUgMiBpcyBmb3IgdGhlICciJyBxdW90ZXMgb24g
ZWFjaCBlbmQuCisgICAgLy8gVGhlIDYgaXMgZm9yIGNoYXJhY3RlcnMgdGhhdCBuZWVkIHRvIGJl
IFx1Tk5OTiBlbmNvZGVkLgorICAgIENoZWNrZWQ8dW5zaWduZWQ+IHN0cmluZ0xlbmd0aCA9IHN0
cmluZy5sZW5ndGgoKTsKKyAgICBDaGVja2VkPHVuc2lnbmVkPiBtYXhpbXVtQ2FwYWNpdHlSZXF1
aXJlZCA9IGxlbmd0aCgpOworICAgIG1heGltdW1DYXBhY2l0eVJlcXVpcmVkICs9IDIgKyBzdHJp
bmdMZW5ndGggKiA2OworICAgIHVuc2lnbmVkIGFsbG9jYXRpb25TaXplID0gbWF4aW11bUNhcGFj
aXR5UmVxdWlyZWQudW5zYWZlR2V0KCk7CisgICAgLy8gVGhpcyBtYXgoKSBpcyBoZXJlIHRvIGFs
bG93IHVzIHRvIGFsbG9jYXRlIHNpemVzIGJldHdlZW4gdGhlIHJhbmdlIFsyXjMxLCAyXjMyIC0g
Ml0gYmVjYXVzZSByb3VuZFVwVG9Qb3dlck9mVHdvKDE8PDMxICsgc29tZSBpbnQgc21hbGxlciB0
aGFuIDE8PDMxKSA9PSAwLgorICAgIGFsbG9jYXRpb25TaXplID0gc3RkOjptYXgoYWxsb2NhdGlv
blNpemUsIHJvdW5kVXBUb1Bvd2VyT2ZUd28oYWxsb2NhdGlvblNpemUpKTsKKworICAgIGlmIChp
czhCaXQoKSAmJiAhc3RyaW5nLmlzOEJpdCgpKQorICAgICAgICBhbGxvY2F0ZUJ1ZmZlclVwQ29u
dmVydChtX2J1ZmZlckNoYXJhY3RlcnM4LCBhbGxvY2F0aW9uU2l6ZSk7CisgICAgZWxzZQorICAg
ICAgICByZXNlcnZlQ2FwYWNpdHkoYWxsb2NhdGlvblNpemUpOworICAgIEFTU0VSVChtX2J1ZmZl
ci0+bGVuZ3RoKCkgPj0gYWxsb2NhdGlvblNpemUpOworCisgICAgaWYgKGlzOEJpdCgpKSB7Cisg
ICAgICAgIEFTU0VSVChzdHJpbmcuaXM4Qml0KCkpOworICAgICAgICBMQ2hhciogb3V0cHV0ID0g
bV9idWZmZXJDaGFyYWN0ZXJzOCArIG1fbGVuZ3RoOworICAgICAgICAqb3V0cHV0KysgPSAnIic7
CisgICAgICAgIGFwcGVuZFF1b3RlZEpTT05TdHJpbmdJbnRlcm5hbChvdXRwdXQsIHN0cmluZy5j
aGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOworICAgICAgICAqb3V0cHV0KysgPSAnIic7
CisgICAgICAgIG1fbGVuZ3RoID0gb3V0cHV0IC0gbV9idWZmZXJDaGFyYWN0ZXJzODsKICAgICB9
IGVsc2UgewotICAgICAgICBhdXRvKiBjaGFyYWN0ZXJzID0gc3RyaW5nLmNoYXJhY3RlcnMxNigp
OwotICAgICAgICBpZiAobV9pczhCaXQpCi0gICAgICAgICAgICBhcHBlbmRRdW90ZWRKU09OU3Ry
aW5nSW50ZXJuYWwoYXBwZW5kVW5pbml0aWFsaXplZFVwY29udmVydChxdW90ZWRKU09OU3RyaW5n
TGVuZ3RoKGNoYXJhY3RlcnMsIGxlbmd0aCkpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgICAg
ICBVQ2hhciogb3V0cHV0ID0gbV9idWZmZXJDaGFyYWN0ZXJzMTYgKyBtX2xlbmd0aDsKKyAgICAg
ICAgKm91dHB1dCsrID0gJyInOworICAgICAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQorICAgICAg
ICAgICAgYXBwZW5kUXVvdGVkSlNPTlN0cmluZ0ludGVybmFsKG91dHB1dCwgc3RyaW5nLmNoYXJh
Y3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFw
cGVuZFF1b3RlZEpTT05TdHJpbmdJbnRlcm5hbChhcHBlbmRVbmluaXRpYWxpemVkPFVDaGFyPihx
dW90ZWRKU09OU3RyaW5nTGVuZ3RoKGNoYXJhY3RlcnMsIGxlbmd0aCkpLCBjaGFyYWN0ZXJzLCBs
ZW5ndGgpOworICAgICAgICAgICAgYXBwZW5kUXVvdGVkSlNPTlN0cmluZ0ludGVybmFsKG91dHB1
dCwgc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCkpOworICAgICAgICAqb3V0
cHV0KysgPSAnIic7CisgICAgICAgIG1fbGVuZ3RoID0gb3V0cHV0IC0gbV9idWZmZXJDaGFyYWN0
ZXJzMTY7CiAgICAgfQorICAgIEFTU0VSVChtX2J1ZmZlci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmgK
aW5kZXggMTg3MDY0OWY0MDA3ZDdmZjUzMTc4NjUyZDBmNzE2N2MzYTMzN2RiYS4uYThkYWRhNzg3
OWVlZTdkNDI0N2UyMTg1N2E4YzIxY2U2ZDAzMDM0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTAsIDIwMTItMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKQEAgLTI0LDQ1ICsyNCw1NSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAot
I3ByYWdtYSBvbmNlCisjaWZuZGVmIFN0cmluZ0J1aWxkZXJfaAorI2RlZmluZSBTdHJpbmdCdWls
ZGVyX2gKIAorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIFdURiB7CiAKIGNsYXNzIFN0cmluZ0J1aWxkZXIgewotICAgIC8vIERpc2FsbG93
IGNvcHlpbmcgc2luY2UgaXQncyBleHBlbnNpdmUgYW5kIHdlIGRvbid0IHdhbnQgYW55b25lIHRv
IGRvIGl0IGJ5IGFjY2lkZW50LgorICAgIC8vIERpc2FsbG93IGNvcHlpbmcgc2luY2UgaXQncyBl
eHBlbnNpdmUgYW5kIHdlIGRvbid0IHdhbnQgY29kZSB0byBkbyBpdCBieSBhY2NpZGVudC4KICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJpbmdCdWlsZGVyKTsKIAogcHVibGljOgotICAgIFN0
cmluZ0J1aWxkZXIoKSA9IGRlZmF1bHQ7CisgICAgU3RyaW5nQnVpbGRlcigpCisgICAgICAgIDog
bV9sZW5ndGgoMCkKKyAgICAgICAgLCBtX2lzOEJpdCh0cnVlKQorICAgICAgICAsIG1fYnVmZmVy
Q2hhcmFjdGVyczgoMCkKKyAgICB7CisgICAgfQogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgYXBwZW5kKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQpOwogICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIGFwcGVuZChjb25zdCBMQ2hhciosIHVuc2lnbmVkKTsKIAogICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBhcHBlbmQoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKSB7
IGFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oY2hhcmFjdGVycyksIGxlbmd0
aCk7IH0KIAotICAgIHZvaWQgYXBwZW5kKGNvbnN0IEF0b21pY1N0cmluZyYgYXRvbWljU3RyaW5n
KSB7IGFwcGVuZChhdG9taWNTdHJpbmcuc3RyaW5nKCkpOyB9CisgICAgdm9pZCBhcHBlbmQoY29u
c3QgQXRvbWljU3RyaW5nJiBhdG9taWNTdHJpbmcpCisgICAgeworICAgICAgICBhcHBlbmQoYXRv
bWljU3RyaW5nLnN0cmluZygpKTsKKyAgICB9CiAKICAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJp
bmcmIHN0cmluZykKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5n
dGgoKTsKLSAgICAgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIGlmICghc3RyaW5nLmxlbmd0aCgp
KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIC8vIElmIHdlJ3JlIGFwcGVuZGluZyB0
byBhbiBlbXB0eSBzdHJpbmcsIGFuZCB0aGVyZSBpcyBub3QgYSBidWZmZXIKLSAgICAgICAgLy8g
KHJlc2VydmVDYXBhY2l0eSBoYXMgbm90IGJlZW4gY2FsbGVkKSB0aGVuIGp1c3QgcmV0YWluIHRo
ZSBzdHJpbmcuCisgICAgICAgIC8vIElmIHdlJ3JlIGFwcGVuZGluZyB0byBhbiBlbXB0eSBzdHJp
bmcsIGFuZCB0aGVyZSBpcyBub3QgYSBidWZmZXIgKHJlc2VydmVDYXBhY2l0eSBoYXMgbm90IGJl
ZW4gY2FsbGVkKQorICAgICAgICAvLyB0aGVuIGp1c3QgcmV0YWluIHRoZSBzdHJpbmcuCiAgICAg
ICAgIGlmICghbV9sZW5ndGggJiYgIW1fYnVmZmVyKSB7CiAgICAgICAgICAgICBtX3N0cmluZyA9
IHN0cmluZzsKLSAgICAgICAgICAgIG1fbGVuZ3RoID0gbGVuZ3RoOwotICAgICAgICAgICAgbV9p
czhCaXQgPSBzdHJpbmcuaXM4Qml0KCk7CisgICAgICAgICAgICBtX2xlbmd0aCA9IHN0cmluZy5s
ZW5ndGgoKTsKKyAgICAgICAgICAgIG1faXM4Qml0ID0gbV9zdHJpbmcuaXM4Qml0KCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoc3RyaW5nLmlzOEJpdCgp
KQotICAgICAgICAgICAgYXBwZW5kKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgpOworICAg
ICAgICAgICAgYXBwZW5kKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcHBlbmQoc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBs
ZW5ndGgpOworICAgICAgICAgICAgYXBwZW5kKHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5n
Lmxlbmd0aCgpKTsKICAgICB9CiAKICAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmdCdWlsZGVy
JiBvdGhlcikKQEAgLTcwLDEyICs4MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGlmICghb3RoZXIu
bV9sZW5ndGgpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgLy8gSWYgd2UncmUgYXBw
ZW5kaW5nIHRvIGFuIGVtcHR5IHN0cmluZywgYW5kIHRoZXJlIGlzIG5vdCBhIGJ1ZmZlcgotICAg
ICAgICAvLyAocmVzZXJ2ZUNhcGFjaXR5IGhhcyBub3QgYmVlbiBjYWxsZWQpIHRoZW4ganVzdCBy
ZXRhaW4gdGhlIHN0cmluZy4KKyAgICAgICAgLy8gSWYgd2UncmUgYXBwZW5kaW5nIHRvIGFuIGVt
cHR5IHN0cmluZywgYW5kIHRoZXJlIGlzIG5vdCBhIGJ1ZmZlciAocmVzZXJ2ZUNhcGFjaXR5IGhh
cyBub3QgYmVlbiBjYWxsZWQpCisgICAgICAgIC8vIHRoZW4ganVzdCByZXRhaW4gdGhlIHN0cmlu
Zy4KICAgICAgICAgaWYgKCFtX2xlbmd0aCAmJiAhbV9idWZmZXIgJiYgIW90aGVyLm1fc3RyaW5n
LmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBtX3N0cmluZyA9IG90aGVyLm1fc3RyaW5nOwogICAg
ICAgICAgICAgbV9sZW5ndGggPSBvdGhlci5tX2xlbmd0aDsKLSAgICAgICAgICAgIG1faXM4Qml0
ID0gb3RoZXIubV9pczhCaXQ7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAt
OTYsMjcgKzEwNSwxNyBAQCBwdWJsaWM6CiAjaWYgVVNFKENGKQogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIGFwcGVuZChDRlN0cmluZ1JlZik7CiAjZW5kaWYKLQogI2lmIFVTRShDRikgJiYg
ZGVmaW5lZChfX09CSkNfXykKICAgICB2b2lkIGFwcGVuZChOU1N0cmluZyAqc3RyaW5nKSB7IGFw
cGVuZCgoX19icmlkZ2UgQ0ZTdHJpbmdSZWYpc3RyaW5nKTsgfQogI2VuZGlmCiAgICAgCiAgICAg
dm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG9mZnNldCA8PSBzdHJpbmcubGVuZ3Ro
KCkpOwotICAgICAgICBBU1NFUlQob2Zmc2V0ICsgbGVuZ3RoIDw9IHN0cmluZy5sZW5ndGgoKSk7
Ci0KLSAgICAgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIGlmICghc3RyaW5nLmxlbmd0aCgpKQog
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIC8vIElmIHdlJ3JlIGFwcGVuZGluZyB0byBh
biBlbXB0eSBzdHJpbmcsIGFuZCB0aGVyZSBpcyBub3QgYSBidWZmZXIKLSAgICAgICAgLy8gKHJl
c2VydmVDYXBhY2l0eSBoYXMgbm90IGJlZW4gY2FsbGVkKSB0aGVuIGp1c3QgcmV0YWluIHRoZSBz
dHJpbmcuCi0gICAgICAgIGlmICghb2Zmc2V0ICYmICFtX2xlbmd0aCAmJiAhbV9idWZmZXIgJiYg
bGVuZ3RoID09IHN0cmluZy5sZW5ndGgoKSkgewotICAgICAgICAgICAgbV9zdHJpbmcgPSBzdHJp
bmc7Ci0gICAgICAgICAgICBtX2xlbmd0aCA9IGxlbmd0aDsKLSAgICAgICAgICAgIG1faXM4Qml0
ID0gc3RyaW5nLmlzOEJpdCgpOworICAgICAgICBpZiAoKG9mZnNldCArIGxlbmd0aCkgPiBzdHJp
bmcubGVuZ3RoKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KIAogICAgICAgICBp
ZiAoc3RyaW5nLmlzOEJpdCgpKQogICAgICAgICAgICAgYXBwZW5kKHN0cmluZy5jaGFyYWN0ZXJz
OCgpICsgb2Zmc2V0LCBsZW5ndGgpOwpAQCAtMTMwLDMzICsxMjksMzcgQEAgcHVibGljOgogICAg
ICAgICAgICAgYXBwZW5kKGNoYXJhY3RlcnMsIHN0cmxlbihjaGFyYWN0ZXJzKSk7CiAgICAgfQog
Ci0gICAgdm9pZCBhcHBlbmQoVUNoYXIgY2hhcmFjdGVyKQorICAgIHZvaWQgYXBwZW5kKFVDaGFy
IGMpCiAgICAgewogICAgICAgICBpZiAobV9idWZmZXIgJiYgbV9sZW5ndGggPCBtX2J1ZmZlci0+
bGVuZ3RoKCkgJiYgbV9zdHJpbmcuaXNOdWxsKCkpIHsKICAgICAgICAgICAgIGlmICghbV9pczhC
aXQpIHsKLSAgICAgICAgICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnMxNlttX2xlbmd0aCsrXSA9
IGNoYXJhY3RlcjsKKyAgICAgICAgICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnMxNlttX2xlbmd0
aCsrXSA9IGM7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKCEoY2hhcmFjdGVyICYgfjB4RkYpKSB7Ci0gICAgICAgICAgICAgICAgbV9idWZm
ZXJDaGFyYWN0ZXJzOFttX2xlbmd0aCsrXSA9IHN0YXRpY19jYXN0PExDaGFyPihjaGFyYWN0ZXIp
OworCisgICAgICAgICAgICBpZiAoIShjICYgfjB4ZmYpKSB7CisgICAgICAgICAgICAgICAgbV9i
dWZmZXJDaGFyYWN0ZXJzOFttX2xlbmd0aCsrXSA9IHN0YXRpY19jYXN0PExDaGFyPihjKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAg
YXBwZW5kKCZjaGFyYWN0ZXIsIDEpOworICAgICAgICBhcHBlbmQoJmMsIDEpOwogICAgIH0KIAot
ICAgIHZvaWQgYXBwZW5kKExDaGFyIGNoYXJhY3RlcikKKyAgICB2b2lkIGFwcGVuZChMQ2hhciBj
KQogICAgIHsKICAgICAgICAgaWYgKG1fYnVmZmVyICYmIG1fbGVuZ3RoIDwgbV9idWZmZXItPmxl
bmd0aCgpICYmIG1fc3RyaW5nLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBpZiAobV9pczhCaXQp
Ci0gICAgICAgICAgICAgICAgbV9idWZmZXJDaGFyYWN0ZXJzOFttX2xlbmd0aCsrXSA9IGNoYXJh
Y3RlcjsKKyAgICAgICAgICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnM4W21fbGVuZ3RoKytdID0g
YzsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnMx
NlttX2xlbmd0aCsrXSA9IGNoYXJhY3RlcjsKKyAgICAgICAgICAgICAgICBtX2J1ZmZlckNoYXJh
Y3RlcnMxNlttX2xlbmd0aCsrXSA9IGM7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYXBw
ZW5kKCZjaGFyYWN0ZXIsIDEpOworICAgICAgICAgICAgYXBwZW5kKCZjLCAxKTsKICAgICB9CiAK
LSAgICB2b2lkIGFwcGVuZChjaGFyIGNoYXJhY3RlcikgeyBhcHBlbmQoc3RhdGljX2Nhc3Q8TENo
YXI+KGNoYXJhY3RlcikpOyB9CisgICAgdm9pZCBhcHBlbmQoY2hhciBjKQorICAgIHsKKyAgICAg
ICAgYXBwZW5kKHN0YXRpY19jYXN0PExDaGFyPihjKSk7CisgICAgfQogCiAgICAgdm9pZCBhcHBl
bmQoVUNoYXIzMiBjKQogICAgIHsKQEAgLTE2OCw5ICsxNzEsMTAgQEAgcHVibGljOgogICAgICAg
ICBhcHBlbmQoVTE2X1RSQUlMKGMpKTsKICAgICB9CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBhcHBlbmRRdW90ZWRKU09OU3RyaW5nKFN0cmluZ1ZpZXcpOworICAgIFdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGFwcGVuZFF1b3RlZEpTT05TdHJpbmcoY29uc3QgU3RyaW5nJik7CiAKLSAg
ICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJzQ291bnQ+IEFMV0FZU19JTkxJTkUgdm9pZCBh
cHBlbmRMaXRlcmFsKGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJzQ291bnRdKSB7
IGFwcGVuZChjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzQ291bnQgLSAxKTsgfQorICAgIHRlbXBsYXRl
PHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5k
TGl0ZXJhbChjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFjdGVyc0NvdW50XSkgeyBhcHBl
bmQoY2hhcmFjdGVycywgY2hhcmFjdGVyc0NvdW50IC0gMSk7IH0KIAogICAgIFdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGFwcGVuZE51bWJlcihpbnQpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIGFwcGVuZE51bWJlcih1bnNpZ25lZCBpbnQpOwpAQCAtMjE2LDE1ICsyMjAsMjQgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gQXRvbWljU3RyaW5nKG1fYnVmZmVyLmdldCgpLCAwLCBtX2xl
bmd0aCk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9s
ZW5ndGg7IH0KKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fbGVuZ3RoOworICAgIH0KKwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJu
ICFtX2xlbmd0aDsgfQogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVzZXJ2ZUNhcGFj
aXR5KHVuc2lnbmVkIG5ld0NhcGFjaXR5KTsKIAotICAgIHVuc2lnbmVkIGNhcGFjaXR5KCkgY29u
c3QgeyByZXR1cm4gbV9idWZmZXIgPyBtX2J1ZmZlci0+bGVuZ3RoKCkgOiBtX2xlbmd0aDsgfQor
ICAgIHVuc2lnbmVkIGNhcGFjaXR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2J1
ZmZlciA/IG1fYnVmZmVyLT5sZW5ndGgoKSA6IG1fbGVuZ3RoOworICAgIH0KIAogICAgIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIHJlc2l6ZSh1bnNpZ25lZCBuZXdTaXplKTsKKwogICAgIFdURl9F
WFBPUlRfUFJJVkFURSBib29sIGNhblNocmluaygpIGNvbnN0OworCiAgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgc2hyaW5rVG9GaXQoKTsKIAogICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWdu
ZWQgaSkgY29uc3QKQEAgLTI4MSwzNiArMjk0LDQzIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
dm9pZCBhbGxvY2F0ZUJ1ZmZlcihjb25zdCBMQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2ln
bmVkIHJlcXVpcmVkTGVuZ3RoKTsKICAgICB2b2lkIGFsbG9jYXRlQnVmZmVyKGNvbnN0IFVDaGFy
KiBjdXJyZW50Q2hhcmFjdGVycywgdW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpOwotICAgIHZvaWQg
YWxsb2NhdGVCdWZmZXJVcGNvbnZlcnQoY29uc3QgTENoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1
bnNpZ25lZCByZXF1aXJlZExlbmd0aCk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gdm9pZCByZWFsbG9jYXRlQnVmZmVyKHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKTsKLSAg
ICBVQ2hhciogYXBwZW5kVW5pbml0aWFsaXplZFVwY29udmVydCh1bnNpZ25lZCBsZW5ndGgpOwot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IENoYXJhY3RlclR5cGUqIGFwcGVu
ZFVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBDaGFyYWN0ZXJUeXBlKiBhcHBlbmRVbmluaXRpYWxpemVkU2xvdyh1bnNp
Z25lZCBsZW5ndGgpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IENoYXJh
Y3RlclR5cGUqIGJ1ZmZlckNoYXJhY3RlcnMoKTsKKyAgICB2b2lkIGFsbG9jYXRlQnVmZmVyVXBD
b252ZXJ0KGNvbnN0IExDaGFyKiBjdXJyZW50Q2hhcmFjdGVycywgdW5zaWduZWQgcmVxdWlyZWRM
ZW5ndGgpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KKyAgICB2b2lkIHJlYWxs
b2NhdGVCdWZmZXIodW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpOworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyVHlwZT4KKyAgICBBTFdBWVNfSU5MSU5FIENoYXJUeXBlKiBhcHBlbmRVbmluaXRp
YWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBl
PgorICAgIENoYXJUeXBlKiBhcHBlbmRVbmluaXRpYWxpemVkU2xvdyh1bnNpZ25lZCBsZW5ndGgp
OworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KKyAgICBBTFdBWVNfSU5MSU5FIENo
YXJUeXBlICogZ2V0QnVmZmVyQ2hhcmFjdGVycygpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIHJlaWZ5U3RyaW5nKCkgY29uc3Q7CiAKLSAgICB1bnNpZ25lZCBtX2xlbmd0aCB7IDAgfTsK
KyAgICB1bnNpZ25lZCBtX2xlbmd0aDsKICAgICBtdXRhYmxlIFN0cmluZyBtX3N0cmluZzsKICAg
ICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9idWZmZXI7Ci0gICAgYm9vbCBtX2lzOEJpdCB7IHRydWUg
fTsKKyAgICBib29sIG1faXM4Qml0OwogICAgIHVuaW9uIHsKLSAgICAgICAgTENoYXIqIG1fYnVm
ZmVyQ2hhcmFjdGVyczggeyBudWxscHRyIH07CisgICAgICAgIExDaGFyKiBtX2J1ZmZlckNoYXJh
Y3RlcnM4OwogICAgICAgICBVQ2hhciogbV9idWZmZXJDaGFyYWN0ZXJzMTY7CiAgICAgfTsKIH07
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGU+IGJvb2wgZXF1YWwoY29uc3QgU3RyaW5n
QnVpbGRlciYsIGNvbnN0IFN0cmluZ1R5cGUmKTsKLWJvb2wgZXF1YWwoY29uc3QgU3RyaW5nQnVp
bGRlciYsIGNvbnN0IFN0cmluZyYpOyAvLyBPbmx5IG5lZWRlZCBiZWNhdXNlIGlzOEJpdCBkZXJl
ZmVyZW5jZXMgbnVsbHB0ciB3aGVuIHRoZSBzdHJpbmcgaXMgbnVsbC4KLXRlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nQnVpbGRlciYsIGNvbnN0
IENoYXJhY3RlclR5cGUqLCB1bnNpZ25lZCBsZW5ndGgpOwordGVtcGxhdGUgPD4KK0FMV0FZU19J
TkxJTkUgTENoYXIqIFN0cmluZ0J1aWxkZXI6OmdldEJ1ZmZlckNoYXJhY3RlcnM8TENoYXI+KCkK
K3sKKyAgICBBU1NFUlQobV9pczhCaXQpOworICAgIHJldHVybiBtX2J1ZmZlckNoYXJhY3RlcnM4
OworfQogCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgU3RyaW5nQnVpbGRlciYsIGNvbnN0IFN0cmlu
Z0J1aWxkZXImKTsKLWJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHJpbmdCdWlsZGVyJiwgY29uc3Qg
U3RyaW5nQnVpbGRlciYpOwotYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cmluZ0J1aWxkZXImLCBj
b25zdCBTdHJpbmcmKTsKLWJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHJpbmdCdWlsZGVyJiwgY29u
c3QgU3RyaW5nJik7Ci1ib29sIG9wZXJhdG9yPT0oY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
QnVpbGRlciYpOwotYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZ0J1
aWxkZXImKTsKK3RlbXBsYXRlIDw+CitBTFdBWVNfSU5MSU5FIFVDaGFyKiBTdHJpbmdCdWlsZGVy
OjpnZXRCdWZmZXJDaGFyYWN0ZXJzPFVDaGFyPigpCit7CisgICAgQVNTRVJUKCFtX2lzOEJpdCk7
CisgICAgcmV0dXJuIG1fYnVmZmVyQ2hhcmFjdGVyczE2OworfSAgICAKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gaW5saW5lIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nQnVpbGRl
ciYgcywgY29uc3QgQ2hhcmFjdGVyVHlwZSogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+Citib29sIGVxdWFsKGNvbnN0IFN0cmluZ0J1aWxkZXIm
IHMsIGNvbnN0IENoYXJUeXBlKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAo
cy5sZW5ndGgoKSAhPSBsZW5ndGgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMyMSwxNCAr
MzQxLDI0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGlubGluZSBib29sIGVx
dWFsKGNvbnN0IFN0cmluZ0J1aWxkZXImIHMsIGNvbnN0CiAgICAgcmV0dXJuIGVxdWFsKHMuY2hh
cmFjdGVyczE2KCksIGJ1ZmZlciwgbGVuZ3RoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgU3Ry
aW5nVHlwZT4gaW5saW5lIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nQnVpbGRlciYgYSwgY29uc3Qg
U3RyaW5nVHlwZSYgYikKK3RlbXBsYXRlIDx0eXBlbmFtZSBTdHJpbmdUeXBlPgorYm9vbCBlcXVh
bChjb25zdCBTdHJpbmdCdWlsZGVyJiBhLCBjb25zdCBTdHJpbmdUeXBlJiBiKQogewotICAgIHJl
dHVybiBlcXVhbENvbW1vbihhLCBiKTsKLX0KKyAgICBpZiAoYS5sZW5ndGgoKSAhPSBiLmxlbmd0
aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLWlubGluZSBib29sIGVxdWFsKGNvbnN0IFN0
cmluZ0J1aWxkZXImIGEsIGNvbnN0IFN0cmluZyYgYikKLXsKLSAgICByZXR1cm4gIWIuaXNOdWxs
KCkgJiYgZXF1YWxDb21tb24oYSwgYik7CisgICAgaWYgKCFhLmxlbmd0aCgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGlmIChhLmlzOEJpdCgpKSB7CisgICAgICAgIGlmIChiLmlzOEJp
dCgpKQorICAgICAgICAgICAgcmV0dXJuIGVxdWFsKGEuY2hhcmFjdGVyczgoKSwgYi5jaGFyYWN0
ZXJzOCgpLCBhLmxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuIGVxdWFsKGEuY2hhcmFjdGVyczgo
KSwgYi5jaGFyYWN0ZXJzMTYoKSwgYS5sZW5ndGgoKSk7CisgICAgfQorCisgICAgaWYgKGIuaXM4
Qml0KCkpCisgICAgICAgIHJldHVybiBlcXVhbChhLmNoYXJhY3RlcnMxNigpLCBiLmNoYXJhY3Rl
cnM4KCksIGEubGVuZ3RoKCkpOworICAgIHJldHVybiBlcXVhbChhLmNoYXJhY3RlcnMxNigpLCBi
LmNoYXJhY3RlcnMxNigpLCBhLmxlbmd0aCgpKTsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBTdHJpbmdCdWlsZGVyJiBhLCBjb25zdCBTdHJpbmdCdWlsZGVyJiBiKSB7IHJldHVy
biBlcXVhbChhLCBiKTsgfQpAQCAtMzQxLDMgKzM3MSw1IEBAIGlubGluZSBib29sIG9wZXJhdG9y
IT0oY29uc3QgU3RyaW5nJiBhLCBjb25zdCBTdHJpbmdCdWlsZGVyJiBiKSB7IHJldHVybiAhZXF1
YWwoCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpTdHJpbmdCdWlsZGVyOworCisj
ZW5kaWYgLy8gU3RyaW5nQnVpbGRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAKaW5kZXggZTkxNmI5YzUxNWJiZjZjZGUxNTM1
M2M1MWQ4NmI5OGY4OWI0MDQ1NC4uNDc2NjYwZmQ1ZDYzODc3ZmE1NmUxMzQ3MDA1MWZhOTFlMTAw
ZWNjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1l
bnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3Vt
ZW50Q3VzdG9tLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDct
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDctMjAwOSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDEwICsyNiwyNCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkpTSFRNTERvY3VtZW50LmgiCiAKKyNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCisj
aW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSUZyYW1lRWxlbWVudC5oIgor
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAjaW5jbHVk
ZSAiSlNET01XaW5kb3dDdXN0b20uaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvd1NoZWxsLmgiCisj
aW5jbHVkZSAiSlNEb2N1bWVudEN1c3RvbS5oIgogI2luY2x1ZGUgIkpTSFRNTENvbGxlY3Rpb24u
aCIKKyNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKICNpbmNsdWRlICJTZWdtZW50
ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJEb2N1bWVudFBhcnNlci5oIgorI2luY2x1ZGUgPGludGVy
cHJldGVyL1N0YWNrVmlzaXRvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNs
dWRlIDxydW50aW1lL0pTQ2VsbC5oPgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5h
bWVzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKQEAgLTQwLDggKzU0LDEwIEBAIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPEhUTUxEb2N1bWVu
dD4mJiBwYXNzZWREb2N1bWVudCkKIHsKICAgICBhdXRvJiBkb2N1bWVudCA9IHBhc3NlZERvY3Vt
ZW50LmdldCgpOwotICAgIGF1dG8qIHdyYXBwZXIgPSBjcmVhdGVXcmFwcGVyPEhUTUxEb2N1bWVu
dD4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKHBhc3NlZERvY3VtZW50KSk7CisgICAgSlNPYmplY3Qq
IHdyYXBwZXIgPSBjcmVhdGVXcmFwcGVyPEhUTUxEb2N1bWVudD4oZ2xvYmFsT2JqZWN0LCBXVEZN
b3ZlKHBhc3NlZERvY3VtZW50KSk7CisKICAgICByZXBvcnRNZW1vcnlGb3JEb2N1bWVudElmRnJh
bWVsZXNzKCpzdGF0ZSwgZG9jdW1lbnQpOworCiAgICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAKQEAg
LTUyLDUxICs2OCw1MiBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSFRNTERvY3VtZW50JiBkbwogICAgIHJldHVybiB0b0pT
TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIFJlZjxIVE1MRG9jdW1lbnQ+KGRvY3Vt
ZW50KSk7CiB9CiAKLWJvb2wgSlNIVE1MRG9jdW1lbnQ6OmdldE93blByb3BlcnR5U2xvdChKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTSFRNTERvY3VtZW50OjpnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgYXV0byYgdGhpc09iamVjdCA9
ICpqc0Nhc3Q8SlNIVE1MRG9jdW1lbnQqPihvYmplY3QpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFMoKCZ0aGlzT2JqZWN0KSwgaW5mbygpKTsKKyAgICBKU0hUTUxEb2N1bWVudCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0hUTUxEb2N1bWVudCo+KG9iamVjdCk7CisgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCiAgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSAib3BlbiIpIHsKLSAgICAgICAgaWYgKEJhc2U6OmdldE93blByb3BlcnR5U2xvdCgm
dGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgIGlmIChCYXNl
OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBzbG90LnNldEN1c3RvbSgmdGhp
c09iamVjdCwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0sIG5vbkNhY2hpbmdTdGF0
aWNGdW5jdGlvbkdldHRlcjxqc0hUTUxEb2N1bWVudFByb3RvdHlwZUZ1bmN0aW9uT3BlbiwgMj4p
OworCisgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIFJlYWRPbmx5IHwgRG9udERl
bGV0ZSB8IERvbnRFbnVtLCBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXI8anNIVE1MRG9j
dW1lbnRQcm90b3R5cGVGdW5jdGlvbk9wZW4sIDI+KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCiAgICAgSlNWYWx1ZSB2YWx1ZTsKLSAgICBpZiAodGhpc09iamVjdC5uYW1lR2V0dGVy
KHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKSkgewotICAgICAgICBzbG90LnNldFZhbHVlKCZ0
aGlzT2JqZWN0LCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSwgdmFsdWUpOworICAg
IGlmICh0aGlzT2JqZWN0LT5uYW1lR2V0dGVyKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpKSB7
CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgUmVhZE9ubHkgfCBEb250RGVsZXRl
IHwgRG9udEVudW0sIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAg
cmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCgmdGhpc09iamVjdCwgc3RhdGUsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7CisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIEpTSFRNTERvY3Vt
ZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUmIHZhbHVlKQorYm9vbCBKU0hUTUxEb2N1bWVudDo6bmFtZUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUmIHZhbHVlKQog
ewogICAgIGF1dG8mIGRvY3VtZW50ID0gd3JhcHBlZCgpOwogCi0gICAgYXV0byogYXRvbWljUHJv
cGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKTsKKyAgICBBdG9taWNTdHJpbmdJ
bXBsKiBhdG9taWNQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpOwogICAg
IGlmICghYXRvbWljUHJvcGVydHlOYW1lIHx8ICFkb2N1bWVudC5oYXNEb2N1bWVudE5hbWVkSXRl
bSgqYXRvbWljUHJvcGVydHlOYW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYg
KFVOTElLRUxZKGRvY3VtZW50LmRvY3VtZW50TmFtZWRJdGVtQ29udGFpbnNNdWx0aXBsZUVsZW1l
bnRzKCphdG9taWNQcm9wZXJ0eU5hbWUpKSkgewotICAgICAgICBhdXRvIGNvbGxlY3Rpb24gPSBk
b2N1bWVudC5kb2N1bWVudE5hbWVkSXRlbXMoYXRvbWljUHJvcGVydHlOYW1lKTsKKyAgICAgICAg
UmVmPEhUTUxDb2xsZWN0aW9uPiBjb2xsZWN0aW9uID0gZG9jdW1lbnQuZG9jdW1lbnROYW1lZEl0
ZW1zKGF0b21pY1Byb3BlcnR5TmFtZSk7CiAgICAgICAgIEFTU0VSVChjb2xsZWN0aW9uLT5sZW5n
dGgoKSA+IDEpOwotICAgICAgICB2YWx1ZSA9IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBj
b2xsZWN0aW9uKTsKKyAgICAgICAgdmFsdWUgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBj
b2xsZWN0aW9uKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYXV0byYgZWxl
bWVudCA9ICpkb2N1bWVudC5kb2N1bWVudE5hbWVkSXRlbSgqYXRvbWljUHJvcGVydHlOYW1lKTsK
KyAgICBFbGVtZW50JiBlbGVtZW50ID0gKmRvY3VtZW50LmRvY3VtZW50TmFtZWRJdGVtKCphdG9t
aWNQcm9wZXJ0eU5hbWUpOwogICAgIGlmIChVTkxJS0VMWShpczxIVE1MSUZyYW1lRWxlbWVudD4o
ZWxlbWVudCkpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBmcmFtZSA9IGRvd25jYXN0PEhUTUxJRnJh
bWVFbGVtZW50PihlbGVtZW50KS5jb250ZW50RnJhbWUoKSkgewotICAgICAgICAgICAgdmFsdWUg
PSB0b0pTKHN0YXRlLCBmcmFtZSk7CisgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb3duY2Fz
dDxIVE1MSUZyYW1lRWxlbWVudD4oZWxlbWVudCkuY29udGVudEZyYW1lKCkpIHsKKyAgICAgICAg
ICAgIHZhbHVlID0gdG9KUyhleGVjLCBmcmFtZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIHZhbHVlID0gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0
KCksIGVsZW1lbnQpOworICAgIHZhbHVlID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgZWxl
bWVudCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEwNSw4ICsxMjIsOSBAQCBib29sIEpT
SFRNTERvY3VtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIEpTVgogSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6YWxsKEV4ZWNTdGF0ZSYg
c3RhdGUpIGNvbnN0CiB7CiAgICAgLy8gSWYgImFsbCIgaGFzIGJlZW4gb3ZlcndyaXR0ZW4sIHJl
dHVybiB0aGUgb3ZlcndyaXR0ZW4gdmFsdWUKLSAgICBpZiAoYXV0byBvdmVyd3JpdHRlblZhbHVl
ID0gZ2V0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAi
YWxsIikpKQotICAgICAgICByZXR1cm4gb3ZlcndyaXR0ZW5WYWx1ZTsKKyAgICBKU1ZhbHVlIHYg
PSBnZXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJh
bGwiKSk7CisgICAgaWYgKHYpCisgICAgICAgIHJldHVybiB2OwogCiAgICAgcmV0dXJuIHRvSlMo
JnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgd3JhcHBlZCgpLmFsbCgpKTsKIH0KQEAgLTExNywxNCAr
MTM1LDE1IEBAIHZvaWQgSlNIVE1MRG9jdW1lbnQ6OnNldEFsbChFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQogICAgIHB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgImFsbCIpLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRG9jdW1l
bnQqIGZpbmRDYWxsaW5nRG9jdW1lbnQoRXhlY1N0YXRlJiBzdGF0ZSkKK3N0YXRpYyBEb2N1bWVu
dCogZmluZENhbGxpbmdEb2N1bWVudChFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIENhbGxlckZ1
bmN0b3IgZnVuY3RvcjsKICAgICBzdGF0ZS5pdGVyYXRlKGZ1bmN0b3IpOwotICAgIGF1dG8qIGNh
bGxlckZyYW1lID0gZnVuY3Rvci5jYWxsZXJGcmFtZSgpOworICAgIENhbGxGcmFtZSogY2FsbGVy
RnJhbWUgPSBmdW5jdG9yLmNhbGxlckZyYW1lKCk7CiAgICAgaWYgKCFjYWxsZXJGcmFtZSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGFzSlNET01XaW5kb3coY2FsbGVyRnJh
bWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPndyYXBwZWQoKS5kb2N1bWVudCgpOworCisgICAg
cmV0dXJuIGFzSlNET01XaW5kb3coZnVuY3Rvci5jYWxsZXJGcmFtZSgpLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCkpLT53cmFwcGVkKCkuZG9jdW1lbnQoKTsKIH0KIAogLy8gQ3VzdG9tIGZ1bmN0aW9u
cwpAQCAtMTM2LDExICsxNTUsMTIgQEAgSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6b3BlbihFeGVj
U3RhdGUmIHN0YXRlKQogCiAgICAgLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBicm93
c2VycywgcGFzcyBvcGVuIGNhbGxzIHdpdGggbW9yZSB0aGFuIDIgcGFyYW1ldGVycyB0byB0aGUg
d2luZG93LgogICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPiAyKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBmcmFtZSA9IHdyYXBwZWQoKS5mcmFtZSgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0
byogd3JhcHBlciA9IHRvSlNET01XaW5kb3dTaGVsbChmcmFtZSwgY3VycmVudFdvcmxkKCZzdGF0
ZSkpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBmdW5jdGlvbiA9IHdyYXBwZXItPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAib3BlbiIpKTsKKyAgICAgICAgaWYg
KEZyYW1lKiBmcmFtZSA9IHdyYXBwZWQoKS5mcmFtZSgpKSB7CisgICAgICAgICAgICBKU0RPTVdp
bmRvd1NoZWxsKiB3cmFwcGVyID0gdG9KU0RPTVdpbmRvd1NoZWxsKGZyYW1lLCBjdXJyZW50V29y
bGQoJnN0YXRlKSk7CisgICAgICAgICAgICBpZiAod3JhcHBlcikgeworICAgICAgICAgICAgICAg
IEpTVmFsdWUgZnVuY3Rpb24gPSB3cmFwcGVyLT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgIm9wZW4iKSk7CiAgICAgICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERh
dGE7Ci0gICAgICAgICAgICAgICAgYXV0byBjYWxsVHlwZSA9IDo6Z2V0Q2FsbERhdGEoZnVuY3Rp
b24sIGNhbGxEYXRhKTsKKyAgICAgICAgICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IDo6Z2V0
Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICAgICAgICAgICAgICBpZiAoY2FsbFR5
cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1R5
cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKICAgICAgICAgICAgICAgICByZXR1cm4gSlNDOjpjYWxs
KCZzdGF0ZSwgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgd3JhcHBlciwgQXJnTGlzdCgm
c3RhdGUpKTsKQEAgLTE0OSw0MSArMTY5LDUzIEBAIEpTVmFsdWUgSlNIVE1MRG9jdW1lbnQ6Om9w
ZW4oRXhlY1N0YXRlJiBzdGF0ZSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
fQogCi0gICAgLy8gQ2FsbGluZyBkb2N1bWVudC5vcGVuIGNsb2JiZXJzIHRoZSBzZWN1cml0eSBj
b250ZXh0IG9mIHRoZSBkb2N1bWVudCBhbmQgYWxpYXNlcyBpdCB3aXRoIHRoZSBhY3RpdmUgc2Vj
dXJpdHkgY29udGV4dC4KLSAgICAvLyBGSVhNRTogSXMgaXQgY29ycmVjdCB0aGF0IHRoaXMgZG9l
cyBub3QgdXNlIGZpbmRDYWxsaW5nRG9jdW1lbnQgYXMgdGhlIHdyaXRlIGZ1bmN0aW9uIGJlbG93
IGRvZXM/Ci0gICAgd3JhcHBlZCgpLm9wZW4oYXNKU0RPTVdpbmRvdyhzdGF0ZS5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpLT53cmFwcGVkKCkuZG9jdW1lbnQoKSk7Ci0gICAgLy8gRklYTUU6IFdoeSBk
byB3ZSByZXR1cm4gdGhlIGRvY3VtZW50IGluc3RlYWQgb2YgcmV0dXJuaW5nIHVuZGVmaW5lZD8K
KyAgICAvLyBkb2N1bWVudC5vcGVuIGNsb2JiZXJzIHRoZSBzZWN1cml0eSBjb250ZXh0IG9mIHRo
ZSBkb2N1bWVudCBhbmQKKyAgICAvLyBhbGlhc2VzIGl0IHdpdGggdGhlIGFjdGl2ZSBzZWN1cml0
eSBjb250ZXh0LgorICAgIERvY3VtZW50KiBhY3RpdmVEb2N1bWVudCA9IGFzSlNET01XaW5kb3co
c3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpLmRvY3VtZW50KCk7CisKKyAg
ICAvLyBJbiB0aGUgY2FzZSBvZiB0d28gcGFyYW1ldGVycyBvciBmZXdlciwgZG8gYSBub3JtYWwg
ZG9jdW1lbnQgb3Blbi4KKyAgICB3cmFwcGVkKCkub3BlbihhY3RpdmVEb2N1bWVudCk7CiAgICAg
cmV0dXJuIHRoaXM7CiB9CiAKIGVudW0gTmV3bGluZVJlcXVpcmVtZW50IHsgRG9Ob3RBZGROZXds
aW5lLCBEb0FkZE5ld2xpbmUgfTsKIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGRvY3VtZW50V3Jp
dGUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNIVE1MRG9jdW1lbnQmIGRvY3VtZW50LCBOZXdsaW5lUmVx
dWlyZW1lbnQgYWRkTmV3bGluZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkb2N1bWVudFdyaXRlKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTSFRNTERvY3VtZW50KiB0aGlzRG9jdW1lbnQsIE5ld2xpbmVSZXF1
aXJlbWVudCBhZGROZXdsaW5lKQogewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgU2VnbWVudGVkU3RyaW5n
IHNlZ21lbnRlZFN0cmluZzsKLSAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IHN0YXRlLmFyZ3Vt
ZW50Q291bnQoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsr
aSkgewotICAgICAgICBzZWdtZW50ZWRTdHJpbmcuYXBwZW5kKHN0YXRlLnVuY2hlY2tlZEFyZ3Vt
ZW50KGkpLnRvV1RGU3RyaW5nKCZzdGF0ZSkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworICAgIEhUTUxEb2N1bWVudCogZG9jdW1lbnQgPSAmdGhpc0RvY3VtZW50
LT53cmFwcGVkKCk7CisgICAgLy8gRE9NIG9ubHkgc3BlY2lmaWVzIHNpbmdsZSBzdHJpbmcgYXJn
dW1lbnQsIGJ1dCBicm93c2VycyBhbGxvdyBtdWx0aXBsZSBvciBubyBhcmd1bWVudHMuCisKKyAg
ICBzaXplX3Qgc2l6ZSA9IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsKKworICAgIFN0cmluZyBmaXJz
dFN0cmluZyA9IHN0YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0
ZSk7CisgICAgU2VnbWVudGVkU3RyaW5nIHNlZ21lbnRlZFN0cmluZyA9IGZpcnN0U3RyaW5nOwor
ICAgIGlmIChzaXplICE9IDEpIHsKKyAgICAgICAgaWYgKCFzaXplKQorICAgICAgICAgICAgc2Vn
bWVudGVkU3RyaW5nLmNsZWFyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc3Vi
c2VxdWVudFN0cmluZyA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvU3RyaW5nKCZzdGF0
ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgICAgICAgICAgICAgc2VnbWVudGVkU3RyaW5nLmFwcGVu
ZChTZWdtZW50ZWRTdHJpbmcoc3Vic2VxdWVudFN0cmluZykpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CiAgICAgfQogICAgIGlmIChhZGROZXdsaW5lKQotICAgICAgICBzZWdtZW50ZWRTdHJp
bmcuYXBwZW5kKFN0cmluZyB7ICJcbiIgfSk7CisgICAgICAgIHNlZ21lbnRlZFN0cmluZy5hcHBl
bmQoU2VnbWVudGVkU3RyaW5nKFN0cmluZygmbmV3bGluZUNoYXJhY3RlciwgMSkpKTsKIAotICAg
IGRvY3VtZW50LndyYXBwZWQoKS53cml0ZShXVEZNb3ZlKHNlZ21lbnRlZFN0cmluZyksIGZpbmRD
YWxsaW5nRG9jdW1lbnQoc3RhdGUpKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBE
b2N1bWVudCogYWN0aXZlRG9jdW1lbnQgPSBmaW5kQ2FsbGluZ0RvY3VtZW50KHN0YXRlKTsKKyAg
ICBkb2N1bWVudC0+d3JpdGUoc2VnbWVudGVkU3RyaW5nLCBhY3RpdmVEb2N1bWVudCk7CiB9CiAK
IEpTVmFsdWUgSlNIVE1MRG9jdW1lbnQ6OndyaXRlKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAg
cmV0dXJuIGRvY3VtZW50V3JpdGUoc3RhdGUsICp0aGlzLCBEb05vdEFkZE5ld2xpbmUpOworICAg
IGRvY3VtZW50V3JpdGUoc3RhdGUsIHRoaXMsIERvTm90QWRkTmV3bGluZSk7CisgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiB9CiAKIEpTVmFsdWUgSlNIVE1MRG9jdW1lbnQ6OndyaXRlbG4oRXhl
Y1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gZG9jdW1lbnRXcml0ZShzdGF0ZSwgKnRoaXMs
IERvQWRkTmV3bGluZSk7CisgICAgZG9jdW1lbnRXcml0ZShzdGF0ZSwgdGhpcywgRG9BZGROZXds
aW5lKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NUb2tlbml6ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NUb2tlbml6ZXIuY3BwCmluZGV4IGRl
MmJiOTQ2OGVmOTE2ZTQ5ZmE5Y2JkY2QzZWYyZmNlZTdlYmM0ZTkuLjcwYTZlN2IyODIyMDMwZGY1
MzhkY2E4YWU5MDNmZGQwMDA1NjAwMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9w
YXJzZXIvQ1NTVG9rZW5pemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NT
U1Rva2VuaXplci5jcHAKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJDU1NQYXJzZXJUb2tl
blJhbmdlLmgiCiAjaW5jbHVkZSAiQ1NTVG9rZW5pemVySW5wdXRTdHJlYW0uaCIKICNpbmNsdWRl
ICJIVE1MUGFyc2VySWRpb21zLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTVG9rZW5p
emVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Rva2VuaXplci5oCmluZGV4IDkx
ZTkyZGM0NmYzZmE5ZGUzY2E1MTczY2RkYWNlN2EwOGM1ZmE1ZDguLjEyMGNmOGUyYTA0M2RkNmRi
ODZjMzUxYmNlOWNiZjJhMzlmYTM3M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9w
YXJzZXIvQ1NTVG9rZW5pemVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NU
b2tlbml6ZXIuaApAQCAtMzAsNiArMzAsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJD
U1NQYXJzZXJUb2tlbi5oIgorI2luY2x1ZGUgIklucHV0U3RyZWFtUHJlcHJvY2Vzc29yLmgiCiAj
aW5jbHVkZSA8Y2xpbWl0cz4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1Rva2VuaXplcklucHV0U3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1Rva2VuaXplcklucHV0U3RyZWFtLmgKaW5kZXggOTNmN2ExZGY0YjEwYTAxNzc0
MTkzOGRhYWMyZDgwNzc2NWJiNjdkMi4uMWJjMzcxZTc3NDFlYTgxNWVlNTA5ZGEyZDU5YWZhOTg2
OTg1ZGI2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NUb2tlbml6
ZXJJbnB1dFN0cmVhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTVG9rZW5p
emVySW5wdXRTdHJlYW0uaApAQCAtMzAsMTEgKzMwLDEwIEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jb25zdGV4cHIgTENoYXIga0VuZE9mRmls
ZU1hcmtlciA9IDA7Ci0KIGNsYXNzIENTU1Rva2VuaXplcklucHV0U3RyZWFtIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDU1NUb2tlbml6ZXJJbnB1dFN0cmVhbSk7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBmZWU1NzkyNWExNjg5
N2YwZWE1MjlhM2Q4ODI5ZDgwZGVkZjcxODU3Li5mNTQ1ZWU5NGU0OWYxMWY1YjU3ZmM1OWQ5YWY2
NTg1NTBjM2JmZTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTI3OTEsNyArMjc5MSw3
IEBAIFNlY29uZHMgRG9jdW1lbnQ6OnRpbWVTaW5jZURvY3VtZW50Q3JlYXRpb24oKSBjb25zdAog
ICAgIHJldHVybiBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fZG9jdW1lbnRDcmVhdGlvblRpbWU7
CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OndyaXRlKFNlZ21lbnRlZFN0cmluZyYmIHRleHQsIERvY3Vt
ZW50KiBvd25lckRvY3VtZW50KQordm9pZCBEb2N1bWVudDo6d3JpdGUoY29uc3QgU2VnbWVudGVk
U3RyaW5nJiB0ZXh0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCkKIHsKICAgICBOZXN0aW5nTGV2
ZWxJbmNyZW1lbnRlciBuZXN0aW5nTGV2ZWxJbmNyZW1lbnRlcihtX3dyaXRlUmVjdXJzaW9uRGVw
dGgpOwogCkBAIC0yNzk5LDcgKzI3OTksNyBAQCB2b2lkIERvY3VtZW50Ojp3cml0ZShTZWdtZW50
ZWRTdHJpbmcmJiB0ZXh0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCkKICAgICBtX3dyaXRlUmVj
dXJzaW9uSXNUb29EZWVwID0gKG1fd3JpdGVSZWN1cnNpb25EZXB0aCA+IGNNYXhXcml0ZVJlY3Vy
c2lvbkRlcHRoKSB8fCBtX3dyaXRlUmVjdXJzaW9uSXNUb29EZWVwOwogCiAgICAgaWYgKG1fd3Jp
dGVSZWN1cnNpb25Jc1Rvb0RlZXApCi0gICAgICAgIHJldHVybjsKKyAgICAgICByZXR1cm47CiAK
ICAgICBib29sIGhhc0luc2VydGlvblBvaW50ID0gbV9wYXJzZXIgJiYgbV9wYXJzZXItPmhhc0lu
c2VydGlvblBvaW50KCk7CiAgICAgaWYgKCFoYXNJbnNlcnRpb25Qb2ludCAmJiAobV9pZ25vcmVP
cGVuc0R1cmluZ1VubG9hZENvdW50IHx8IG1faWdub3JlRGVzdHJ1Y3RpdmVXcml0ZUNvdW50KSkK
QEAgLTI4MDksMTkgKzI4MDksMTggQEAgdm9pZCBEb2N1bWVudDo6d3JpdGUoU2VnbWVudGVkU3Ry
aW5nJiYgdGV4dCwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQpCiAgICAgICAgIG9wZW4ob3duZXJE
b2N1bWVudCk7CiAKICAgICBBU1NFUlQobV9wYXJzZXIpOwotICAgIG1fcGFyc2VyLT5pbnNlcnQo
V1RGTW92ZSh0ZXh0KSk7CisgICAgbV9wYXJzZXItPmluc2VydCh0ZXh0KTsKIH0KIAogdm9pZCBE
b2N1bWVudDo6d3JpdGUoY29uc3QgU3RyaW5nJiB0ZXh0LCBEb2N1bWVudCogb3duZXJEb2N1bWVu
dCkKIHsKLSAgICB3cml0ZShTZWdtZW50ZWRTdHJpbmcgeyB0ZXh0IH0sIG93bmVyRG9jdW1lbnQp
OworICAgIHdyaXRlKFNlZ21lbnRlZFN0cmluZyh0ZXh0KSwgb3duZXJEb2N1bWVudCk7CiB9CiAK
IHZvaWQgRG9jdW1lbnQ6OndyaXRlbG4oY29uc3QgU3RyaW5nJiB0ZXh0LCBEb2N1bWVudCogb3du
ZXJEb2N1bWVudCkKIHsKLSAgICBTZWdtZW50ZWRTdHJpbmcgdGV4dFdpdGhOZXdsaW5lIHsgdGV4
dCB9OwotICAgIHRleHRXaXRoTmV3bGluZS5hcHBlbmQoU3RyaW5nIHsgIlxuIiB9KTsKLSAgICB3
cml0ZShXVEZNb3ZlKHRleHRXaXRoTmV3bGluZSksIG93bmVyRG9jdW1lbnQpOworICAgIHdyaXRl
KHRleHQsIG93bmVyRG9jdW1lbnQpOworICAgIHdyaXRlKCJcbiIsIG93bmVyRG9jdW1lbnQpOwog
fQogCiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIERvY3VtZW50OjptaW5pbXVtVGltZXJJbnRl
cnZhbCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDUwZTJiODM5MjJjYTlhMWVhMTM1
MjI4NGQ2MzAxN2Y3OTgxMzAyNDAuLmE0MjU1ODM3ZDdkZWE0YWE4M2VhZGRiZTE3YWNjZDUwOTEz
N2EzZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC02MDIsNyArNjAyLDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBjYW5jZWxQYXJzaW5nKCk7CiAKLSAgICB2b2lkIHdyaXRlKFNlZ21lbnRlZFN0
cmluZyYmIHRleHQsIERvY3VtZW50KiBvd25lckRvY3VtZW50ID0gbnVsbHB0cik7CisgICAgdm9p
ZCB3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHRleHQsIERvY3VtZW50KiBvd25lckRvY3Vt
ZW50ID0gbnVsbHB0cik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3cml0ZShjb25zdCBTdHJp
bmcmIHRleHQsIERvY3VtZW50KiBvd25lckRvY3VtZW50ID0gbnVsbHB0cik7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCB3cml0ZWxuKGNvbnN0IFN0cmluZyYgdGV4dCwgRG9jdW1lbnQqIG93bmVy
RG9jdW1lbnQgPSBudWxscHRyKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRQYXJzZXIuaAppbmRl
eCAwODI4YzM2OGU0YTIwY2FlNjExMTRjNjI0MzVmYjVkZmJhODk2YWYyLi44ZjMwYTYxYjZjODE2
ZjQ5MzFlNTk3ZWVkMDNmYTIxNTk0MWMwZGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnRQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRQYXJz
ZXIuaApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhhc0luc2Vy
dGlvblBvaW50KCkgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgLy8gaW5zZXJ0IGlzIHVzZWQgYnkg
ZG9jdW1lbnQud3JpdGUuCi0gICAgdmlydHVhbCB2b2lkIGluc2VydChTZWdtZW50ZWRTdHJpbmcm
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbnNlcnQoY29uc3QgU2VnbWVudGVkU3RyaW5nJikg
PSAwOwogCiAgICAgLy8gYXBwZW5kQnl0ZXMgYW5kIGZsdXNoIGFyZSB1c2VkIGJ5IERvY3VtZW50
V3JpdGVyICh0aGUgbG9hZGVyKS4KICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQnl0ZXMoRG9jdW1l
bnRXcml0ZXImLCBjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCkgPSAwOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Jhd0RhdGFEb2N1bWVudFBhcnNlci5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL1Jhd0RhdGFEb2N1bWVudFBhcnNlci5oCmluZGV4IDA5NGVjODdmNjVhYzI3
NWI1N2IwODFkMGJjMjJkZTVmYmI5YWQ4OTcuLjc3MjY2ZTI1ZTk2MGUzY2Y4OGIxM2UwYTdjOTBl
YzRlYjFjMzk3N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYXdEYXRhRG9jdW1l
bnRQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmF3RGF0YURvY3VtZW50UGFyc2Vy
LmgKQEAgLTQ5LDcgKzQ5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgYXBwZW5kQnl0ZXMod3JpdGVy
LCAwLCAwKTsKICAgICB9CiAKLSAgICB2b2lkIGluc2VydChTZWdtZW50ZWRTdHJpbmcmJikgb3Zl
cnJpZGUKKyAgICB2b2lkIGluc2VydChjb25zdCBTZWdtZW50ZWRTdHJpbmcmKSBvdmVycmlkZQog
ICAgIHsKICAgICAgICAgLy8gPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNTM5Nz46IEpTIGNvZGUgY2FuIGFsd2F5cyBjYWxsIGRvY3VtZW50LndyaXRlLCB3ZSBuZWVk
IHRvIGhhbmRsZSBpdC4KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCmluZGV4IGRlODFkNDI4NTNhNDEw
NGVjM2I4NzU3YTNhYjEyYWNkYWVlOGRiNGMuLmNjNTcyODEwY2VhNGU1MmYyNjQyM2FiMTZlZTQ3
OWRkOGE5MDE0MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5
RG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1l
bnQuY3BwCkBAIC0zNDQsNiArMzQ0LDggQEAgdm9pZCBGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNl
cjo6Y3JlYXRlQmFzaWNEb2N1bWVudCgpCiAKIHZvaWQgRlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJz
ZXI6OmFwcGVuZChSZWZQdHI8U3RyaW5nSW1wbD4mJiBpbnB1dFNvdXJjZSkKIHsKKyAgICBTdHJp
bmcgc291cmNlKFdURk1vdmUoaW5wdXRTb3VyY2UpKTsKKwogICAgIC8vIE1ha2Ugc3VyZSB3ZSBo
YXZlIHRoZSB0YWJsZSBlbGVtZW50IHRvIGFwcGVuZCB0byBieSBsb2FkaW5nIHRoZSB0ZW1wbGF0
ZSBzZXQgaW4gdGhlIHByZWYsIG9yCiAgICAgLy8gY3JlYXRpbmcgYSB2ZXJ5IGJhc2ljIGRvY3Vt
ZW50IHdpdGggdGhlIGFwcHJvcHJpYXRlIHRhYmxlCiAgICAgaWYgKCFtX3RhYmxlRWxlbWVudCkg
ewpAQCAtMzU1LDkgKzM1Nyw5IEBAIHZvaWQgRlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXI6OmFw
cGVuZChSZWZQdHI8U3RyaW5nSW1wbD4mJiBpbnB1dFNvdXJjZSkKICAgICBib29sIGZvdW5kTmV3
TGluZSA9IGZhbHNlOwogCiAgICAgbV9kZXN0ID0gbV9idWZmZXI7Ci0gICAgU2VnbWVudGVkU3Ry
aW5nIHN0cmluZyB7IFN0cmluZyB7IFdURk1vdmUoaW5wdXRTb3VyY2UpIH0gfTsKLSAgICB3aGls
ZSAoIXN0cmluZy5pc0VtcHR5KCkpIHsKLSAgICAgICAgVUNoYXIgYyA9IHN0cmluZy5jdXJyZW50
Q2hhcmFjdGVyKCk7CisgICAgU2VnbWVudGVkU3RyaW5nIHN0ciA9IHNvdXJjZTsKKyAgICB3aGls
ZSAoIXN0ci5pc0VtcHR5KCkpIHsKKyAgICAgICAgVUNoYXIgYyA9IHN0ci5jdXJyZW50Q2hhcigp
OwogCiAgICAgICAgIGlmIChjID09ICdccicpIHsKICAgICAgICAgICAgICptX2Rlc3QrKyA9ICdc
bic7CkBAIC0zNzQsNyArMzc2LDcgQEAgdm9pZCBGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcjo6
YXBwZW5kKFJlZlB0cjxTdHJpbmdJbXBsPiYmIGlucHV0U291cmNlKQogICAgICAgICAgICAgbV9z
a2lwTEYgPSBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIHN0cmluZy5hZHZhbmNlKCk7Cisg
ICAgICAgIHN0ci5hZHZhbmNlKCk7CiAKICAgICAgICAgLy8gTWF5YmUgZW5sYXJnZSB0aGUgYnVm
ZmVyCiAgICAgICAgIGNoZWNrQnVmZmVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAppbmRleCAwNmE0MWU5OTY1NmY2Mjk5MDdhNDU2
NTMwYjE5NjI4MTIyMjI3OWFiLi4yNzExMWZiNjE2ZWU2NGFkMzdjZTc2YTczNzU1ZWY2MDA4OGM2
ODljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQ
YXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBh
cnNlci5jcHAKQEAgLTMyOCw3ICszMjgsNyBAQCBib29sIEhUTUxEb2N1bWVudFBhcnNlcjo6aGFz
SW5zZXJ0aW9uUG9pbnQoKQogICAgIHJldHVybiBtX2lucHV0Lmhhc0luc2VydGlvblBvaW50KCkg
fHwgKHdhc0NyZWF0ZWRCeVNjcmlwdCgpICYmICFtX2lucHV0LmhhdmVTZWVuRW5kT2ZGaWxlKCkp
OwogfQogCi12b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6aW5zZXJ0KFNlZ21lbnRlZFN0cmluZyYm
IHNvdXJjZSkKK3ZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjppbnNlcnQoY29uc3QgU2VnbWVudGVk
U3RyaW5nJiBzb3VyY2UpCiB7CiAgICAgaWYgKGlzU3RvcHBlZCgpKQogICAgICAgICByZXR1cm47
CkBAIC0zMzcsOCArMzM3LDkgQEAgdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6Omluc2VydChTZWdt
ZW50ZWRTdHJpbmcmJiBzb3VyY2UpCiAgICAgLy8gYnV0IHdlIG5lZWQgdG8gZW5zdXJlIGl0IGlz
bid0IGRlbGV0ZWQgeWV0LgogICAgIFJlZjxIVE1MRG9jdW1lbnRQYXJzZXI+IHByb3RlY3RlZFRo
aXMoKnRoaXMpOwogCi0gICAgc291cmNlLnNldEV4Y2x1ZGVMaW5lTnVtYmVycygpOwotICAgIG1f
aW5wdXQuaW5zZXJ0QXRDdXJyZW50SW5zZXJ0aW9uUG9pbnQoV1RGTW92ZShzb3VyY2UpKTsKKyAg
ICBTZWdtZW50ZWRTdHJpbmcgZXhjbHVkZWRMaW5lTnVtYmVyU291cmNlKHNvdXJjZSk7CisgICAg
ZXhjbHVkZWRMaW5lTnVtYmVyU291cmNlLnNldEV4Y2x1ZGVMaW5lTnVtYmVycygpOworICAgIG1f
aW5wdXQuaW5zZXJ0QXRDdXJyZW50SW5zZXJ0aW9uUG9pbnQoZXhjbHVkZWRMaW5lTnVtYmVyU291
cmNlKTsKICAgICBwdW1wVG9rZW5pemVySWZQb3NzaWJsZShGb3JjZVN5bmNocm9ub3VzKTsKIAog
ICAgIGlmIChpc1dhaXRpbmdGb3JTY3JpcHRzKCkpIHsKQEAgLTM2Miw3ICszNjMsNyBAQCB2b2lk
IEhUTUxEb2N1bWVudFBhcnNlcjo6YXBwZW5kKFJlZlB0cjxTdHJpbmdJbXBsPiYmIGlucHV0U291
cmNlKQogICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIGVuc3VyZSBpdCBpc24ndCBkZWxldGVkIHlldC4K
ICAgICBSZWY8SFRNTERvY3VtZW50UGFyc2VyPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKIAotICAg
IFN0cmluZyBzb3VyY2UgeyBXVEZNb3ZlKGlucHV0U291cmNlKSB9OworICAgIFN0cmluZyBzb3Vy
Y2UoV1RGTW92ZShpbnB1dFNvdXJjZSkpOwogCiAgICAgaWYgKG1fcHJlbG9hZFNjYW5uZXIpIHsK
ICAgICAgICAgaWYgKG1faW5wdXQuY3VycmVudCgpLmlzRW1wdHkoKSAmJiAhaXNXYWl0aW5nRm9y
U2NyaXB0cygpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
RG9jdW1lbnRQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVu
dFBhcnNlci5oCmluZGV4IGU5N2JhNTYxYTU3OWY5NTdiYzQ1MmIwYjA3NjI4MmRmMmIxZWRlM2Qu
LjhhZDAwODFhYmQxNmQwZTJkNzZlOWUyOTkxZmQ5OTM0YWJiYTAwZjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oCkBAIC02NSw3ICs2NSw3
IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBIVE1MRG9jdW1lbnRQYXJzZXIo
SFRNTERvY3VtZW50Jik7CiAKLSAgICB2b2lkIGluc2VydChTZWdtZW50ZWRTdHJpbmcmJikgZmlu
YWw7CisgICAgdm9pZCBpbnNlcnQoY29uc3QgU2VnbWVudGVkU3RyaW5nJikgZmluYWw7CiAgICAg
dm9pZCBhcHBlbmQoUmVmUHRyPFN0cmluZ0ltcGw+JiYpIG92ZXJyaWRlOwogICAgIHZvaWQgZmlu
aXNoKCkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxFbnRpdHlQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVu
dGl0eVBhcnNlci5jcHAKaW5kZXggOTg1MDNkOWQxYzYwMzE5OTBjODhlYTg5MDZkMjY0MTYxZmQw
MTBkZS4uZGJmZmFkZjc2MzcyMWNlNTAyYjIxZGUyYTgwMmZlMTc0NWI3ZTdkMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHAKQEAgLTYxLDEy
ICs2MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgY29uc3VtZWRDaGFyYWN0
ZXJzOwogICAgICAgICBIVE1MRW50aXR5U2VhcmNoIGVudGl0eVNlYXJjaDsKICAgICAgICAgd2hp
bGUgKCFzb3VyY2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBjYyA9IHNvdXJjZS5jdXJyZW50
Q2hhcmFjdGVyKCk7CisgICAgICAgICAgICBjYyA9IHNvdXJjZS5jdXJyZW50Q2hhcigpOwogICAg
ICAgICAgICAgZW50aXR5U2VhcmNoLmFkdmFuY2UoY2MpOwogICAgICAgICAgICAgaWYgKCFlbnRp
dHlTZWFyY2guaXNFbnRpdHlQcmVmaXgoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGNvbnN1bWVkQ2hhcmFjdGVycy5hcHBlbmQoY2MpOwotICAgICAgICAgICAgc291cmNl
LmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOworICAgICAgICAgICAgc291cmNlLmFkdmFuY2UoKTsK
ICAgICAgICAgfQogICAgICAgICBub3RFbm91Z2hDaGFyYWN0ZXJzID0gc291cmNlLmlzRW1wdHko
KTsKICAgICAgICAgaWYgKG5vdEVub3VnaENoYXJhY3RlcnMpIHsKQEAgLTg4LDEzICs4OCwxMyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoID0gZW50aXR5U2VhcmNoLm1v
c3RSZWNlbnRNYXRjaCgpLT5sZW5ndGg7CiAgICAgICAgICAgICBjb25zdCBMQ2hhciogcmVmZXJl
bmNlID0gZW50aXR5U2VhcmNoLm1vc3RSZWNlbnRNYXRjaCgpLT5lbnRpdHk7CiAgICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgY2Mg
PSBzb3VyY2UuY3VycmVudENoYXJhY3RlcigpOworICAgICAgICAgICAgICAgIGNjID0gc291cmNl
LmN1cnJlbnRDaGFyKCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyZWZlcmVuY2Us
IGNjID09ICpyZWZlcmVuY2UrKyk7CiAgICAgICAgICAgICAgICAgY29uc3VtZWRDaGFyYWN0ZXJz
LmFwcGVuZChjYyk7Ci0gICAgICAgICAgICAgICAgc291cmNlLmFkdmFuY2VQYXN0Tm9uTmV3bGlu
ZSgpOworICAgICAgICAgICAgICAgIHNvdXJjZS5hZHZhbmNlKCk7CiAgICAgICAgICAgICAgICAg
QVNTRVJUKCFzb3VyY2UuaXNFbXB0eSgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNj
ID0gc291cmNlLmN1cnJlbnRDaGFyYWN0ZXIoKTsKKyAgICAgICAgICAgIGNjID0gc291cmNlLmN1
cnJlbnRDaGFyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGVudGl0eVNlYXJjaC5tb3N0UmVj
ZW50TWF0Y2goKS0+bGFzdENoYXJhY3RlcigpID09ICc7JwogICAgICAgICAgICAgfHwgIWFkZGl0
aW9uYWxBbGxvd2VkQ2hhcmFjdGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MSW5wdXRTdHJlYW0uaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxJ
bnB1dFN0cmVhbS5oCmluZGV4IGY4NmU4ZjhhZGM4M2Q0MGM0NGY5M2U2MmYzODA0MGY0NTUyNmJm
ODcuLmUyMTE4OWZiMmEzZmY0ZmM4YThiZTQ5N2VlZTkzZjYzMGExY2IyMGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxJbnB1dFN0cmVhbS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxJbnB1dFN0cmVhbS5oCkBAIC0yNSw2ICsyNSw3IEBA
CiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IuaCIK
ICNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9z
aXRpb24uaD4KIApAQCAtNTUsMTQgKzU2LDE0IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0g
ICAgdm9pZCBhcHBlbmRUb0VuZChTZWdtZW50ZWRTdHJpbmcmJiBzdHJpbmcpCisgICAgdm9pZCBh
cHBlbmRUb0VuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAgICAg
IG1fbGFzdC0+YXBwZW5kKFdURk1vdmUoc3RyaW5nKSk7CisgICAgICAgIG1fbGFzdC0+YXBwZW5k
KHN0cmluZyk7CiAgICAgfQogCi0gICAgdm9pZCBpbnNlcnRBdEN1cnJlbnRJbnNlcnRpb25Qb2lu
dChTZWdtZW50ZWRTdHJpbmcmJiBzdHJpbmcpCisgICAgdm9pZCBpbnNlcnRBdEN1cnJlbnRJbnNl
cnRpb25Qb2ludChjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAgICAg
IG1fZmlyc3QuYXBwZW5kKFdURk1vdmUoc3RyaW5nKSk7CisgICAgICAgIG1fZmlyc3QuYXBwZW5k
KHN0cmluZyk7CiAgICAgfQogCiAgICAgYm9vbCBoYXNJbnNlcnRpb25Qb2ludCgpIGNvbnN0CkBA
IC03Miw3ICs3Myw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbWFya0VuZE9mRmlsZSgpCiAgICAg
ewotICAgICAgICBtX2xhc3QtPmFwcGVuZChTdHJpbmcgeyAma0VuZE9mRmlsZU1hcmtlciwgMSB9
KTsKKyAgICAgICAgbV9sYXN0LT5hcHBlbmQoU2VnbWVudGVkU3RyaW5nKFN0cmluZygma0VuZE9m
RmlsZU1hcmtlciwgMSkpKTsKICAgICAgICAgbV9sYXN0LT5jbG9zZSgpOwogICAgIH0KIApAQCAt
OTEsNyArOTIsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNwbGl0SW50byhTZWdtZW50ZWRTdHJp
bmcmIG5leHQpCiAgICAgewotICAgICAgICBuZXh0ID0gV1RGTW92ZShtX2ZpcnN0KTsKKyAgICAg
ICAgbmV4dCA9IG1fZmlyc3Q7CisgICAgICAgIG1fZmlyc3QgPSBTZWdtZW50ZWRTdHJpbmcoKTsK
ICAgICAgICAgaWYgKG1fbGFzdCA9PSAmbV9maXJzdCkgewogICAgICAgICAgICAgLy8gV2UgdXNl
ZCB0byBvbmx5IGhhdmUgb25lIFNlZ21lbnRlZFN0cmluZyBpbiB0aGUgSW5wdXRTdHJlYW0KICAg
ICAgICAgICAgIC8vIGJ1dCBub3cgd2UgaGF2ZSB0d28uICBUaGF0IG1lYW5zIG1fZmlyc3QgaXMg
bm8gbG9uZ2VyIGFsc28KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxNZXRhQ2hhcnNldFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
TWV0YUNoYXJzZXRQYXJzZXIuY3BwCmluZGV4IDhhODQ2ODkxNWZlOTMyNmM5ZTczNmE3YWE1MzVh
ZThkZDNlYjRkMjQuLmFmOWZkNTBlYjllYzI4OGI2NDEzM2IyOGYxZDk1OTkyN2NiNWYzYWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFy
c2VyLmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTE1MSw5ICsxNTEsOSBAQCBib29sIEhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6Y2hlY2tG
b3JNZXRhQ2hhcnNldChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQogICAgIC8vIHRo
YXQgYXJlIGRpc2FsbG93ZWQgaW4gPGhlYWQ+LCB3ZSBkb24ndCBiYWlsIG91dCB1bnRpbCB3ZSd2
ZSBjaGVja2VkIGF0CiAgICAgLy8gbGVhc3QgYnl0ZXNUb0NoZWNrVW5jb25kaXRpb25hbGx5IGJ5
dGVzIG9mIGlucHV0LgogCi0gICAgY29uc3RleHByIGludCBieXRlc1RvQ2hlY2tVbmNvbmRpdGlv
bmFsbHkgPSAxMDI0OworICAgIHN0YXRpYyBjb25zdCBpbnQgYnl0ZXNUb0NoZWNrVW5jb25kaXRp
b25hbGx5ID0gMTAyNDsKIAotICAgIG1faW5wdXQuYXBwZW5kKG1fY29kZWMtPmRlY29kZShkYXRh
LCBsZW5ndGgpKTsKKyAgICBtX2lucHV0LmFwcGVuZChTZWdtZW50ZWRTdHJpbmcobV9jb2RlYy0+
ZGVjb2RlKGRhdGEsIGxlbmd0aCkpKTsKIAogICAgIHdoaWxlIChhdXRvIHRva2VuID0gbV90b2tl
bml6ZXIubmV4dFRva2VuKG1faW5wdXQpKSB7CiAgICAgICAgIGJvb2wgaXNFbmQgPSB0b2tlbi0+
dHlwZSgpID09IEhUTUxUb2tlbjo6RW5kVGFnOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFNvdXJjZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFNvdXJjZVRyYWNrZXIuY3BwCmluZGV4IDIyZGJhOTBhNTgyMGU2ZDdhMWY3M2Y1
NjliYWQ3MzAyNjAxMzgwMjMuLjc4MzA0N2I3YjFhNjQ2MmZhZDc1NWIzN2NmYTY4OTI2NGExNzhl
NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTb3VyY2VUcmFj
a2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU291cmNlVHJhY2tl
ci5jcHAKQEAgLTMyLDYgKzMyLDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorSFRNTFNv
dXJjZVRyYWNrZXI6OkhUTUxTb3VyY2VUcmFja2VyKCkKK3sKK30KKwogdm9pZCBIVE1MU291cmNl
VHJhY2tlcjo6c3RhcnRUb2tlbihTZWdtZW50ZWRTdHJpbmcmIGN1cnJlbnRJbnB1dCwgSFRNTFRv
a2VuaXplciYgdG9rZW5pemVyKQogewogICAgIGlmICghbV9zdGFydGVkKSB7CkBAIC03NCwxMiAr
NzgsMTIgQEAgU3RyaW5nIEhUTUxTb3VyY2VUcmFja2VyOjpzb3VyY2UoY29uc3QgSFRNTFRva2Vu
JiB0b2tlbikKIAogICAgIHVuc2lnbmVkIGkgPSAwOwogICAgIGZvciAoIDsgaSA8IGxlbmd0aCAm
JiAhbV9wcmV2aW91c1NvdXJjZS5pc0VtcHR5KCk7ICsraSkgewotICAgICAgICBzb3VyY2UuYXBw
ZW5kKG1fcHJldmlvdXNTb3VyY2UuY3VycmVudENoYXJhY3RlcigpKTsKKyAgICAgICAgc291cmNl
LmFwcGVuZChtX3ByZXZpb3VzU291cmNlLmN1cnJlbnRDaGFyKCkpOwogICAgICAgICBtX3ByZXZp
b3VzU291cmNlLmFkdmFuY2UoKTsKICAgICB9CiAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyArK2kp
IHsKICAgICAgICAgQVNTRVJUKCFtX2N1cnJlbnRTb3VyY2UuaXNFbXB0eSgpKTsKLSAgICAgICAg
c291cmNlLmFwcGVuZChtX2N1cnJlbnRTb3VyY2UuY3VycmVudENoYXJhY3RlcigpKTsKKyAgICAg
ICAgc291cmNlLmFwcGVuZChtX2N1cnJlbnRTb3VyY2UuY3VycmVudENoYXIoKSk7CiAgICAgICAg
IG1fY3VycmVudFNvdXJjZS5hZHZhbmNlKCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU291cmNlVHJhY2tlci5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFNvdXJjZVRyYWNrZXIuaAppbmRleCAzYTI0Y2YwZmM2MTA3ZGUyZjU4
MTE0YjY3NmI2MzJiZTU2MTc5MWFmLi44OTdlODNkN2I2ZjAzZjQ5MDk3NTI4NjQ3Njk4YTJmMTVk
MmUyZmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU291cmNl
VHJhY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTb3VyY2VUcmFj
a2VyLmgKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgSFRNTFRva2VuaXplcjsKIGNsYXNzIEhUTUxT
b3VyY2VUcmFja2VyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIVE1MU291cmNlVHJhY2tl
cik7CiBwdWJsaWM6Ci0gICAgSFRNTFNvdXJjZVRyYWNrZXIoKSA9IGRlZmF1bHQ7CisgICAgSFRN
TFNvdXJjZVRyYWNrZXIoKTsKIAogICAgIHZvaWQgc3RhcnRUb2tlbihTZWdtZW50ZWRTdHJpbmcm
LCBIVE1MVG9rZW5pemVyJik7CiAgICAgdm9pZCBlbmRUb2tlbihTZWdtZW50ZWRTdHJpbmcmLCBI
VE1MVG9rZW5pemVyJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MVG9rZW5pemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6
ZXIuY3BwCmluZGV4IDk4NWM2MThkZDUwZWRiNDJiNTI4ZDhmYzNiYzRhNTJlYjM2YTQ4MmEuLjQ4
OWU2YzUxYTU4MmUwYzQ5N2Y5M2ZmZDQ4Yzg3MGZlZTBiMzI5YjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIGh0dHA6Ly93d3cu
dG9yY2htb2JpbGUuY29tLwogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgogICoKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJIVE1MRW50
aXR5UGFyc2VyLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTWFya3VwVG9r
ZW5pemVySW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNp
bmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC05
Niw3ICs5Niw3IEBAIGlubGluZSBib29sIEhUTUxUb2tlbml6ZXI6OmVtaXRBbmRSZXN1bWVJbkRh
dGFTdGF0ZShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKIHsKICAgICBzYXZlRW5kVGFnTmFtZUlm
TmVlZGVkKCk7CiAgICAgbV9zdGF0ZSA9IERhdGFTdGF0ZTsKLSAgICBzb3VyY2UuYWR2YW5jZVBh
c3ROb25OZXdsaW5lKCk7CisgICAgc291cmNlLmFkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyKCk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE1Nyw5ICsxNTcsOSBAQCB2b2lkIEhUTUxUb2tl
bml6ZXI6OmZsdXNoQnVmZmVyZWRFbmRUYWcoKQogCiBib29sIEhUTUxUb2tlbml6ZXI6OmNvbW1p
dFRvUGFydGlhbEVuZFRhZyhTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgVUNoYXIgY2hhcmFjdGVy
LCBTdGF0ZSBzdGF0ZSkKIHsKLSAgICBBU1NFUlQoc291cmNlLmN1cnJlbnRDaGFyYWN0ZXIoKSA9
PSBjaGFyYWN0ZXIpOworICAgIEFTU0VSVChzb3VyY2UuY3VycmVudENoYXIoKSA9PSBjaGFyYWN0
ZXIpOwogICAgIGFwcGVuZFRvVGVtcG9yYXJ5QnVmZmVyKGNoYXJhY3Rlcik7Ci0gICAgc291cmNl
LmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOworICAgIHNvdXJjZS5hZHZhbmNlQW5kVXBkYXRlTGlu
ZU51bWJlcigpOwogCiAgICAgaWYgKGhhdmVCdWZmZXJlZENoYXJhY3RlclRva2VuKCkpIHsKICAg
ICAgICAgLy8gRW1pdCB0aGUgYnVmZmVyZWQgY2hhcmFjdGVyIHRva2VuLgpAQCAtMTc0LDkgKzE3
NCw5IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6Y29tbWl0VG9QYXJ0aWFsRW5kVGFnKFNlZ21lbnRl
ZFN0cmluZyYgc291cmNlLCBVQ2hhciBjaGFyYWN0CiAKIGJvb2wgSFRNTFRva2VuaXplcjo6Y29t
bWl0VG9Db21wbGV0ZUVuZFRhZyhTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKIHsKLSAgICBBU1NF
UlQoc291cmNlLmN1cnJlbnRDaGFyYWN0ZXIoKSA9PSAnPicpOworICAgIEFTU0VSVChzb3VyY2Uu
Y3VycmVudENoYXIoKSA9PSAnPicpOwogICAgIGFwcGVuZFRvVGVtcG9yYXJ5QnVmZmVyKCc+Jyk7
Ci0gICAgc291cmNlLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOworICAgIHNvdXJjZS5hZHZhbmNl
KCk7CiAKICAgICBtX3N0YXRlID0gRGF0YVN0YXRlOwogCkBAIC0yMTIsMTEgKzIxMiwxMSBAQCBi
b29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkK
IAogICAgIEJFR0lOX1NUQVRFKERhdGFTdGF0ZSkKICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAn
JicpCi0gICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oQ2hhcmFjdGVyUmVm
ZXJlbmNlSW5EYXRhU3RhdGUpOworICAgICAgICAgICAgQURWQU5DRV9UTyhDaGFyYWN0ZXJSZWZl
cmVuY2VJbkRhdGFTdGF0ZSk7CiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJzwnKSB7CiAgICAg
ICAgICAgICBpZiAoaGF2ZUJ1ZmZlcmVkQ2hhcmFjdGVyVG9rZW4oKSkKICAgICAgICAgICAgICAg
ICBSRVRVUk5fSU5fQ1VSUkVOVF9TVEFURSh0cnVlKTsKLSAgICAgICAgICAgIEFEVkFOQ0VfUEFT
VF9OT05fTkVXTElORV9UTyhUYWdPcGVuU3RhdGUpOworICAgICAgICAgICAgQURWQU5DRV9UTyhU
YWdPcGVuU3RhdGUpOwogICAgICAgICB9CiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9m
RmlsZU1hcmtlcikKICAgICAgICAgICAgIHJldHVybiBlbWl0RW5kT2ZGaWxlKHNvdXJjZSk7CkBA
IC0yMzIsOSArMjMyLDkgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVu
dGVkU3RyaW5nJiBzb3VyY2UpCiAKICAgICBCRUdJTl9TVEFURShSQ0RBVEFTdGF0ZSkKICAgICAg
ICAgaWYgKGNoYXJhY3RlciA9PSAnJicpCi0gICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05F
V0xJTkVfVE8oQ2hhcmFjdGVyUmVmZXJlbmNlSW5SQ0RBVEFTdGF0ZSk7CisgICAgICAgICAgICBB
RFZBTkNFX1RPKENoYXJhY3RlclJlZmVyZW5jZUluUkNEQVRBU3RhdGUpOwogICAgICAgICBpZiAo
Y2hhcmFjdGVyID09ICc8JykKLSAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9U
TyhSQ0RBVEFMZXNzVGhhblNpZ25TdGF0ZSk7CisgICAgICAgICAgICBBRFZBTkNFX1RPKFJDREFU
QUxlc3NUaGFuU2lnblN0YXRlKTsKICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxl
TWFya2VyKQogICAgICAgICAgICAgUkVDT05TVU1FX0lOKERhdGFTdGF0ZSk7CiAgICAgICAgIGJ1
ZmZlckNoYXJhY3RlcihjaGFyYWN0ZXIpOwpAQCAtMjQ5LDcgKzI0OSw3IEBAIGJvb2wgSFRNTFRv
a2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogCiAgICAgQkVH
SU5fU1RBVEUoUkFXVEVYVFN0YXRlKQogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICc8JykKLSAg
ICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhSQVdURVhUTGVzc1RoYW5TaWdu
U3RhdGUpOworICAgICAgICAgICAgQURWQU5DRV9UTyhSQVdURVhUTGVzc1RoYW5TaWduU3RhdGUp
OwogICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpCiAgICAgICAgICAg
ICBSRUNPTlNVTUVfSU4oRGF0YVN0YXRlKTsKICAgICAgICAgYnVmZmVyQ2hhcmFjdGVyKGNoYXJh
Y3Rlcik7CkBAIC0yNTgsNyArMjU4LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9r
ZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAKICAgICBCRUdJTl9TVEFURShTY3JpcHREYXRh
U3RhdGUpCiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJzwnKQotICAgICAgICAgICAgQURWQU5D
RV9QQVNUX05PTl9ORVdMSU5FX1RPKFNjcmlwdERhdGFMZXNzVGhhblNpZ25TdGF0ZSk7CisgICAg
ICAgICAgICBBRFZBTkNFX1RPKFNjcmlwdERhdGFMZXNzVGhhblNpZ25TdGF0ZSk7CiAgICAgICAg
IGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikKICAgICAgICAgICAgIFJFQ09OU1VN
RV9JTihEYXRhU3RhdGUpOwogICAgICAgICBidWZmZXJDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKQEAg
LTI3NCwxMiArMjc0LDEyIEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21l
bnRlZFN0cmluZyYgc291cmNlKQogCiAgICAgQkVHSU5fU1RBVEUoVGFnT3BlblN0YXRlKQogICAg
ICAgICBpZiAoY2hhcmFjdGVyID09ICchJykKLSAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05f
TkVXTElORV9UTyhNYXJrdXBEZWNsYXJhdGlvbk9wZW5TdGF0ZSk7CisgICAgICAgICAgICBBRFZB
TkNFX1RPKE1hcmt1cERlY2xhcmF0aW9uT3BlblN0YXRlKTsKICAgICAgICAgaWYgKGNoYXJhY3Rl
ciA9PSAnLycpCi0gICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oRW5kVGFn
T3BlblN0YXRlKTsKKyAgICAgICAgICAgIEFEVkFOQ0VfVE8oRW5kVGFnT3BlblN0YXRlKTsKICAg
ICAgICAgaWYgKGlzQVNDSUlBbHBoYShjaGFyYWN0ZXIpKSB7CiAgICAgICAgICAgICBtX3Rva2Vu
LmJlZ2luU3RhcnRUYWcoY29udmVydEFTQ0lJQWxwaGFUb0xvd2VyKGNoYXJhY3RlcikpOwotICAg
ICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKFRhZ05hbWVTdGF0ZSk7CisgICAg
ICAgICAgICBBRFZBTkNFX1RPKFRhZ05hbWVTdGF0ZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KGNoYXJhY3RlciA9PSAnPycpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKQEAgLTI5Nywx
MSArMjk3LDExIEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0
cmluZyYgc291cmNlKQogICAgICAgICBpZiAoaXNBU0NJSUFscGhhKGNoYXJhY3RlcikpIHsKICAg
ICAgICAgICAgIG1fdG9rZW4uYmVnaW5FbmRUYWcoY29udmVydEFTQ0lJQWxwaGFUb0xvd2VyKGNo
YXJhY3RlcikpOwogICAgICAgICAgICAgbV9hcHByb3ByaWF0ZUVuZFRhZ05hbWUuY2xlYXIoKTsK
LSAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhUYWdOYW1lU3RhdGUpOwor
ICAgICAgICAgICAgQURWQU5DRV9UTyhUYWdOYW1lU3RhdGUpOwogICAgICAgICB9CiAgICAgICAg
IGlmIChjaGFyYWN0ZXIgPT0gJz4nKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKCk7Ci0gICAg
ICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oRGF0YVN0YXRlKTsKKyAgICAgICAg
ICAgIEFEVkFOQ0VfVE8oRGF0YVN0YXRlKTsKICAgICAgICAgfQogICAgICAgICBpZiAoY2hhcmFj
dGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKQEAg
LTMxNyw3ICszMTcsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50
ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgaWYgKGlzVG9rZW5pemVyV2hpdGVzcGFjZShjaGFy
YWN0ZXIpKQogICAgICAgICAgICAgQURWQU5DRV9UTyhCZWZvcmVBdHRyaWJ1dGVOYW1lU3RhdGUp
OwogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICcvJykKLSAgICAgICAgICAgIEFEVkFOQ0VfUEFT
VF9OT05fTkVXTElORV9UTyhTZWxmQ2xvc2luZ1N0YXJ0VGFnU3RhdGUpOworICAgICAgICAgICAg
QURWQU5DRV9UTyhTZWxmQ2xvc2luZ1N0YXJ0VGFnU3RhdGUpOwogICAgICAgICBpZiAoY2hhcmFj
dGVyID09ICc+JykKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVzdW1lSW5EYXRhU3RhdGUo
c291cmNlKTsKICAgICAgICAgaWYgKG1fb3B0aW9ucy51c2VQcmVIVE1MNVBhcnNlclF1aXJrcyAm
JiBjaGFyYWN0ZXIgPT0gJzwnKQpAQCAtMzI3LDE0ICszMjcsMTQgQEAgYm9vbCBIVE1MVG9rZW5p
emVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgICAgICAgICBS
RUNPTlNVTUVfSU4oRGF0YVN0YXRlKTsKICAgICAgICAgfQogICAgICAgICBtX3Rva2VuLmFwcGVu
ZFRvTmFtZSh0b0FTQ0lJTG93ZXIoY2hhcmFjdGVyKSk7Ci0gICAgICAgIEFEVkFOQ0VfUEFTVF9O
T05fTkVXTElORV9UTyhUYWdOYW1lU3RhdGUpOworICAgICAgICBBRFZBTkNFX1RPKFRhZ05hbWVT
dGF0ZSk7CiAgICAgRU5EX1NUQVRFKCkKIAogICAgIEJFR0lOX1NUQVRFKFJDREFUQUxlc3NUaGFu
U2lnblN0YXRlKQogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICcvJykgewogICAgICAgICAgICAg
bV90ZW1wb3JhcnlCdWZmZXIuY2xlYXIoKTsKICAgICAgICAgICAgIEFTU0VSVChtX2J1ZmZlcmVk
RW5kVGFnTmFtZS5pc0VtcHR5KCkpOwotICAgICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdM
SU5FX1RPKFJDREFUQUVuZFRhZ09wZW5TdGF0ZSk7CisgICAgICAgICAgICBBRFZBTkNFX1RPKFJD
REFUQUVuZFRhZ09wZW5TdGF0ZSk7CiAgICAgICAgIH0KICAgICAgICAgYnVmZmVyQVNDSUlDaGFy
YWN0ZXIoJzwnKTsKICAgICAgICAgUkVDT05TVU1FX0lOKFJDREFUQVN0YXRlKTsKQEAgLTM0NCw3
ICszNDQsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJp
bmcmIHNvdXJjZSkKICAgICAgICAgaWYgKGlzQVNDSUlBbHBoYShjaGFyYWN0ZXIpKSB7CiAgICAg
ICAgICAgICBhcHBlbmRUb1RlbXBvcmFyeUJ1ZmZlcihjaGFyYWN0ZXIpOwogICAgICAgICAgICAg
YXBwZW5kVG9Qb3NzaWJsZUVuZFRhZyhjb252ZXJ0QVNDSUlBbHBoYVRvTG93ZXIoY2hhcmFjdGVy
KSk7Ci0gICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oUkNEQVRBRW5kVGFn
TmFtZVN0YXRlKTsKKyAgICAgICAgICAgIEFEVkFOQ0VfVE8oUkNEQVRBRW5kVGFnTmFtZVN0YXRl
KTsKICAgICAgICAgfQogICAgICAgICBidWZmZXJBU0NJSUNoYXJhY3RlcignPCcpOwogICAgICAg
ICBidWZmZXJBU0NJSUNoYXJhY3RlcignLycpOwpAQCAtMzU1LDcgKzM1NSw3IEBAIGJvb2wgSFRN
TFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAg
ICBpZiAoaXNBU0NJSUFscGhhKGNoYXJhY3RlcikpIHsKICAgICAgICAgICAgIGFwcGVuZFRvVGVt
cG9yYXJ5QnVmZmVyKGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBhcHBlbmRUb1Bvc3NpYmxlRW5k
VGFnKGNvbnZlcnRBU0NJSUFscGhhVG9Mb3dlcihjaGFyYWN0ZXIpKTsKLSAgICAgICAgICAgIEFE
VkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhSQ0RBVEFFbmRUYWdOYW1lU3RhdGUpOworICAgICAg
ICAgICAgQURWQU5DRV9UTyhSQ0RBVEFFbmRUYWdOYW1lU3RhdGUpOwogICAgICAgICB9CiAgICAg
ICAgIGlmIChpc1Rva2VuaXplcldoaXRlc3BhY2UoY2hhcmFjdGVyKSkgewogICAgICAgICAgICAg
aWYgKGlzQXBwcm9wcmlhdGVFbmRUYWcoKSkgewpAQCAtMzg1LDcgKzM4NSw3IEBAIGJvb2wgSFRN
TFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAg
ICBpZiAoY2hhcmFjdGVyID09ICcvJykgewogICAgICAgICAgICAgbV90ZW1wb3JhcnlCdWZmZXIu
Y2xlYXIoKTsKICAgICAgICAgICAgIEFTU0VSVChtX2J1ZmZlcmVkRW5kVGFnTmFtZS5pc0VtcHR5
KCkpOwotICAgICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKFJBV1RFWFRFbmRU
YWdPcGVuU3RhdGUpOworICAgICAgICAgICAgQURWQU5DRV9UTyhSQVdURVhURW5kVGFnT3BlblN0
YXRlKTsKICAgICAgICAgfQogICAgICAgICBidWZmZXJBU0NJSUNoYXJhY3RlcignPCcpOwogICAg
ICAgICBSRUNPTlNVTUVfSU4oUkFXVEVYVFN0YXRlKTsKQEAgLTM5NSw3ICszOTUsNyBAQCBib29s
IEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAg
ICAgICAgaWYgKGlzQVNDSUlBbHBoYShjaGFyYWN0ZXIpKSB7CiAgICAgICAgICAgICBhcHBlbmRU
b1RlbXBvcmFyeUJ1ZmZlcihjaGFyYWN0ZXIpOwogICAgICAgICAgICAgYXBwZW5kVG9Qb3NzaWJs
ZUVuZFRhZyhjb252ZXJ0QVNDSUlBbHBoYVRvTG93ZXIoY2hhcmFjdGVyKSk7Ci0gICAgICAgICAg
ICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oUkFXVEVYVEVuZFRhZ05hbWVTdGF0ZSk7Cisg
ICAgICAgICAgICBBRFZBTkNFX1RPKFJBV1RFWFRFbmRUYWdOYW1lU3RhdGUpOwogICAgICAgICB9
CiAgICAgICAgIGJ1ZmZlckFTQ0lJQ2hhcmFjdGVyKCc8Jyk7CiAgICAgICAgIGJ1ZmZlckFTQ0lJ
Q2hhcmFjdGVyKCcvJyk7CkBAIC00MDYsNyArNDA2LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpw
cm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgICAgIGlmIChpc0FTQ0lJ
QWxwaGEoY2hhcmFjdGVyKSkgewogICAgICAgICAgICAgYXBwZW5kVG9UZW1wb3JhcnlCdWZmZXIo
Y2hhcmFjdGVyKTsKICAgICAgICAgICAgIGFwcGVuZFRvUG9zc2libGVFbmRUYWcoY29udmVydEFT
Q0lJQWxwaGFUb0xvd2VyKGNoYXJhY3RlcikpOwotICAgICAgICAgICAgQURWQU5DRV9QQVNUX05P
Tl9ORVdMSU5FX1RPKFJBV1RFWFRFbmRUYWdOYW1lU3RhdGUpOworICAgICAgICAgICAgQURWQU5D
RV9UTyhSQVdURVhURW5kVGFnTmFtZVN0YXRlKTsKICAgICAgICAgfQogICAgICAgICBpZiAoaXNU
b2tlbml6ZXJXaGl0ZXNwYWNlKGNoYXJhY3RlcikpIHsKICAgICAgICAgICAgIGlmIChpc0FwcHJv
cHJpYXRlRW5kVGFnKCkpIHsKQEAgLTQzNiwxMiArNDM2LDEyIEBAIGJvb2wgSFRNTFRva2VuaXpl
cjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICBpZiAoY2hh
cmFjdGVyID09ICcvJykgewogICAgICAgICAgICAgbV90ZW1wb3JhcnlCdWZmZXIuY2xlYXIoKTsK
ICAgICAgICAgICAgIEFTU0VSVChtX2J1ZmZlcmVkRW5kVGFnTmFtZS5pc0VtcHR5KCkpOwotICAg
ICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKFNjcmlwdERhdGFFbmRUYWdPcGVu
U3RhdGUpOworICAgICAgICAgICAgQURWQU5DRV9UTyhTY3JpcHREYXRhRW5kVGFnT3BlblN0YXRl
KTsKICAgICAgICAgfQogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICchJykgewogICAgICAgICAg
ICAgYnVmZmVyQVNDSUlDaGFyYWN0ZXIoJzwnKTsKICAgICAgICAgICAgIGJ1ZmZlckFTQ0lJQ2hh
cmFjdGVyKCchJyk7Ci0gICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oU2Ny
aXB0RGF0YUVzY2FwZVN0YXJ0U3RhdGUpOworICAgICAgICAgICAgQURWQU5DRV9UTyhTY3JpcHRE
YXRhRXNjYXBlU3RhcnRTdGF0ZSk7CiAgICAgICAgIH0KICAgICAgICAgYnVmZmVyQVNDSUlDaGFy
YWN0ZXIoJzwnKTsKICAgICAgICAgUkVDT05TVU1FX0lOKFNjcmlwdERhdGFTdGF0ZSk7CkBAIC00
NTEsNyArNDUxLDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVk
U3RyaW5nJiBzb3VyY2UpCiAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGEoY2hhcmFjdGVyKSkgewog
ICAgICAgICAgICAgYXBwZW5kVG9UZW1wb3JhcnlCdWZmZXIoY2hhcmFjdGVyKTsKICAgICAgICAg
ICAgIGFwcGVuZFRvUG9zc2libGVFbmRUYWcoY29udmVydEFTQ0lJQWxwaGFUb0xvd2VyKGNoYXJh
Y3RlcikpOwotICAgICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKFNjcmlwdERh
dGFFbmRUYWdOYW1lU3RhdGUpOworICAgICAgICAgICAgQURWQU5DRV9UTyhTY3JpcHREYXRhRW5k
VGFnTmFtZVN0YXRlKTsKICAgICAgICAgfQogICAgICAgICBidWZmZXJBU0NJSUNoYXJhY3Rlcign
PCcpOwogICAgICAgICBidWZmZXJBU0NJSUNoYXJhY3RlcignLycpOwpAQCAtNDYyLDcgKzQ2Miw3
IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291
cmNlKQogICAgICAgICBpZiAoaXNBU0NJSUFscGhhKGNoYXJhY3RlcikpIHsKICAgICAgICAgICAg
IGFwcGVuZFRvVGVtcG9yYXJ5QnVmZmVyKGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBhcHBlbmRU
b1Bvc3NpYmxlRW5kVGFnKGNvbnZlcnRBU0NJSUFscGhhVG9Mb3dlcihjaGFyYWN0ZXIpKTsKLSAg
ICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhTY3JpcHREYXRhRW5kVGFnTmFt
ZVN0YXRlKTsKKyAgICAgICAgICAgIEFEVkFOQ0VfVE8oU2NyaXB0RGF0YUVuZFRhZ05hbWVTdGF0
ZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzVG9rZW5pemVyV2hpdGVzcGFjZShjaGFyYWN0
ZXIpKSB7CiAgICAgICAgICAgICBpZiAoaXNBcHByb3ByaWF0ZUVuZFRhZygpKSB7CkBAIC00OTEs
NyArNDkxLDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3Ry
aW5nJiBzb3VyY2UpCiAgICAgQkVHSU5fU1RBVEUoU2NyaXB0RGF0YUVzY2FwZVN0YXJ0U3RhdGUp
CiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJy0nKSB7CiAgICAgICAgICAgICBidWZmZXJBU0NJ
SUNoYXJhY3RlcignLScpOwotICAgICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RP
KFNjcmlwdERhdGFFc2NhcGVTdGFydERhc2hTdGF0ZSk7CisgICAgICAgICAgICBBRFZBTkNFX1RP
KFNjcmlwdERhdGFFc2NhcGVTdGFydERhc2hTdGF0ZSk7CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgUkVDT05TVU1FX0lOKFNjcmlwdERhdGFTdGF0ZSk7CiAgICAgRU5EX1NUQVRFKCkKQEAg
LTQ5OSw3ICs0OTksNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50
ZWRTdHJpbmcmIHNvdXJjZSkKICAgICBCRUdJTl9TVEFURShTY3JpcHREYXRhRXNjYXBlU3RhcnRE
YXNoU3RhdGUpCiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJy0nKSB7CiAgICAgICAgICAgICBi
dWZmZXJBU0NJSUNoYXJhY3RlcignLScpOwotICAgICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9O
RVdMSU5FX1RPKFNjcmlwdERhdGFFc2NhcGVkRGFzaERhc2hTdGF0ZSk7CisgICAgICAgICAgICBB
RFZBTkNFX1RPKFNjcmlwdERhdGFFc2NhcGVkRGFzaERhc2hTdGF0ZSk7CiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgUkVDT05TVU1FX0lOKFNjcmlwdERhdGFTdGF0ZSk7CiAgICAgRU5EX1NU
QVRFKCkKQEAgLTUwNywxMCArNTA3LDEwIEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rv
a2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgIEJFR0lOX1NUQVRFKFNjcmlwdERhdGFF
c2NhcGVkU3RhdGUpCiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJy0nKSB7CiAgICAgICAgICAg
ICBidWZmZXJBU0NJSUNoYXJhY3RlcignLScpOwotICAgICAgICAgICAgQURWQU5DRV9QQVNUX05P
Tl9ORVdMSU5FX1RPKFNjcmlwdERhdGFFc2NhcGVkRGFzaFN0YXRlKTsKKyAgICAgICAgICAgIEFE
VkFOQ0VfVE8oU2NyaXB0RGF0YUVzY2FwZWREYXNoU3RhdGUpOwogICAgICAgICB9CiAgICAgICAg
IGlmIChjaGFyYWN0ZXIgPT0gJzwnKQotICAgICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdM
SU5FX1RPKFNjcmlwdERhdGFFc2NhcGVkTGVzc1RoYW5TaWduU3RhdGUpOworICAgICAgICAgICAg
QURWQU5DRV9UTyhTY3JpcHREYXRhRXNjYXBlZExlc3NUaGFuU2lnblN0YXRlKTsKICAgICAgICAg
aWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAgICBwYXJzZUVy
cm9yKCk7CiAgICAgICAgICAgICBSRUNPTlNVTUVfSU4oRGF0YVN0YXRlKTsKQEAgLTUyMiwxMCAr
NTIyLDEwIEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmlu
ZyYgc291cmNlKQogICAgIEJFR0lOX1NUQVRFKFNjcmlwdERhdGFFc2NhcGVkRGFzaFN0YXRlKQog
ICAgICAgICBpZiAoY2hhcmFjdGVyID09ICctJykgewogICAgICAgICAgICAgYnVmZmVyQVNDSUlD
aGFyYWN0ZXIoJy0nKTsKLSAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhT
Y3JpcHREYXRhRXNjYXBlZERhc2hEYXNoU3RhdGUpOworICAgICAgICAgICAgQURWQU5DRV9UTyhT
Y3JpcHREYXRhRXNjYXBlZERhc2hEYXNoU3RhdGUpOwogICAgICAgICB9CiAgICAgICAgIGlmIChj
aGFyYWN0ZXIgPT0gJzwnKQotICAgICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RP
KFNjcmlwdERhdGFFc2NhcGVkTGVzc1RoYW5TaWduU3RhdGUpOworICAgICAgICAgICAgQURWQU5D
RV9UTyhTY3JpcHREYXRhRXNjYXBlZExlc3NUaGFuU2lnblN0YXRlKTsKICAgICAgICAgaWYgKGNo
YXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKCk7
CiAgICAgICAgICAgICBSRUNPTlNVTUVfSU4oRGF0YVN0YXRlKTsKQEAgLTUzNywxMyArNTM3LDEz
IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291
cmNlKQogICAgIEJFR0lOX1NUQVRFKFNjcmlwdERhdGFFc2NhcGVkRGFzaERhc2hTdGF0ZSkKICAg
ICAgICAgaWYgKGNoYXJhY3RlciA9PSAnLScpIHsKICAgICAgICAgICAgIGJ1ZmZlckFTQ0lJQ2hh
cmFjdGVyKCctJyk7Ci0gICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oU2Ny
aXB0RGF0YUVzY2FwZWREYXNoRGFzaFN0YXRlKTsKKyAgICAgICAgICAgIEFEVkFOQ0VfVE8oU2Ny
aXB0RGF0YUVzY2FwZWREYXNoRGFzaFN0YXRlKTsKICAgICAgICAgfQogICAgICAgICBpZiAoY2hh
cmFjdGVyID09ICc8JykKLSAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhT
Y3JpcHREYXRhRXNjYXBlZExlc3NUaGFuU2lnblN0YXRlKTsKKyAgICAgICAgICAgIEFEVkFOQ0Vf
VE8oU2NyaXB0RGF0YUVzY2FwZWRMZXNzVGhhblNpZ25TdGF0ZSk7CiAgICAgICAgIGlmIChjaGFy
YWN0ZXIgPT0gJz4nKSB7CiAgICAgICAgICAgICBidWZmZXJBU0NJSUNoYXJhY3RlcignPicpOwot
ICAgICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKFNjcmlwdERhdGFTdGF0ZSk7
CisgICAgICAgICAgICBBRFZBTkNFX1RPKFNjcmlwdERhdGFTdGF0ZSk7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAgICBw
YXJzZUVycm9yKCk7CkBAIC01NTcsMTQgKzU1NywxNCBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnBy
b2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgaWYgKGNoYXJhY3Rl
ciA9PSAnLycpIHsKICAgICAgICAgICAgIG1fdGVtcG9yYXJ5QnVmZmVyLmNsZWFyKCk7CiAgICAg
ICAgICAgICBBU1NFUlQobV9idWZmZXJlZEVuZFRhZ05hbWUuaXNFbXB0eSgpKTsKLSAgICAgICAg
ICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhTY3JpcHREYXRhRXNjYXBlZEVuZFRhZ09w
ZW5TdGF0ZSk7CisgICAgICAgICAgICBBRFZBTkNFX1RPKFNjcmlwdERhdGFFc2NhcGVkRW5kVGFn
T3BlblN0YXRlKTsKICAgICAgICAgfQogICAgICAgICBpZiAoaXNBU0NJSUFscGhhKGNoYXJhY3Rl
cikpIHsKICAgICAgICAgICAgIGJ1ZmZlckFTQ0lJQ2hhcmFjdGVyKCc8Jyk7CiAgICAgICAgICAg
ICBidWZmZXJBU0NJSUNoYXJhY3RlcihjaGFyYWN0ZXIpOwogICAgICAgICAgICAgbV90ZW1wb3Jh
cnlCdWZmZXIuY2xlYXIoKTsKICAgICAgICAgICAgIGFwcGVuZFRvVGVtcG9yYXJ5QnVmZmVyKGNv
bnZlcnRBU0NJSUFscGhhVG9Mb3dlcihjaGFyYWN0ZXIpKTsKLSAgICAgICAgICAgIEFEVkFOQ0Vf
UEFTVF9OT05fTkVXTElORV9UTyhTY3JpcHREYXRhRG91YmxlRXNjYXBlU3RhcnRTdGF0ZSk7Cisg
ICAgICAgICAgICBBRFZBTkNFX1RPKFNjcmlwdERhdGFEb3VibGVFc2NhcGVTdGFydFN0YXRlKTsK
ICAgICAgICAgfQogICAgICAgICBidWZmZXJBU0NJSUNoYXJhY3RlcignPCcpOwogICAgICAgICBS
RUNPTlNVTUVfSU4oU2NyaXB0RGF0YUVzY2FwZWRTdGF0ZSk7CkBAIC01NzQsNyArNTc0LDcgQEAg
Ym9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2Up
CiAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGEoY2hhcmFjdGVyKSkgewogICAgICAgICAgICAgYXBw
ZW5kVG9UZW1wb3JhcnlCdWZmZXIoY2hhcmFjdGVyKTsKICAgICAgICAgICAgIGFwcGVuZFRvUG9z
c2libGVFbmRUYWcoY29udmVydEFTQ0lJQWxwaGFUb0xvd2VyKGNoYXJhY3RlcikpOwotICAgICAg
ICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKFNjcmlwdERhdGFFc2NhcGVkRW5kVGFn
TmFtZVN0YXRlKTsKKyAgICAgICAgICAgIEFEVkFOQ0VfVE8oU2NyaXB0RGF0YUVzY2FwZWRFbmRU
YWdOYW1lU3RhdGUpOwogICAgICAgICB9CiAgICAgICAgIGJ1ZmZlckFTQ0lJQ2hhcmFjdGVyKCc8
Jyk7CiAgICAgICAgIGJ1ZmZlckFTQ0lJQ2hhcmFjdGVyKCcvJyk7CkBAIC01ODUsNyArNTg1LDcg
QEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3Vy
Y2UpCiAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGEoY2hhcmFjdGVyKSkgewogICAgICAgICAgICAg
YXBwZW5kVG9UZW1wb3JhcnlCdWZmZXIoY2hhcmFjdGVyKTsKICAgICAgICAgICAgIGFwcGVuZFRv
UG9zc2libGVFbmRUYWcoY29udmVydEFTQ0lJQWxwaGFUb0xvd2VyKGNoYXJhY3RlcikpOwotICAg
ICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKFNjcmlwdERhdGFFc2NhcGVkRW5k
VGFnTmFtZVN0YXRlKTsKKyAgICAgICAgICAgIEFEVkFOQ0VfVE8oU2NyaXB0RGF0YUVzY2FwZWRF
bmRUYWdOYW1lU3RhdGUpOwogICAgICAgICB9CiAgICAgICAgIGlmIChpc1Rva2VuaXplcldoaXRl
c3BhY2UoY2hhcmFjdGVyKSkgewogICAgICAgICAgICAgaWYgKGlzQXBwcm9wcmlhdGVFbmRUYWco
KSkgewpAQCAtNjIyLDcgKzYyMiw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2Vu
KFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICBpZiAoaXNBU0NJSUFscGhhKGNoYXJh
Y3RlcikpIHsKICAgICAgICAgICAgIGJ1ZmZlckFTQ0lJQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CiAg
ICAgICAgICAgICBhcHBlbmRUb1RlbXBvcmFyeUJ1ZmZlcihjb252ZXJ0QVNDSUlBbHBoYVRvTG93
ZXIoY2hhcmFjdGVyKSk7Ci0gICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVfVE8o
U2NyaXB0RGF0YURvdWJsZUVzY2FwZVN0YXJ0U3RhdGUpOworICAgICAgICAgICAgQURWQU5DRV9U
TyhTY3JpcHREYXRhRG91YmxlRXNjYXBlU3RhcnRTdGF0ZSk7CiAgICAgICAgIH0KICAgICAgICAg
UkVDT05TVU1FX0lOKFNjcmlwdERhdGFFc2NhcGVkU3RhdGUpOwogICAgIEVORF9TVEFURSgpCkBA
IC02MzAsMTEgKzYzMCwxMSBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdt
ZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICBCRUdJTl9TVEFURShTY3JpcHREYXRhRG91YmxlRXNj
YXBlZFN0YXRlKQogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICctJykgewogICAgICAgICAgICAg
YnVmZmVyQVNDSUlDaGFyYWN0ZXIoJy0nKTsKLSAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05f
TkVXTElORV9UTyhTY3JpcHREYXRhRG91YmxlRXNjYXBlZERhc2hTdGF0ZSk7CisgICAgICAgICAg
ICBBRFZBTkNFX1RPKFNjcmlwdERhdGFEb3VibGVFc2NhcGVkRGFzaFN0YXRlKTsKICAgICAgICAg
fQogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICc8JykgewogICAgICAgICAgICAgYnVmZmVyQVND
SUlDaGFyYWN0ZXIoJzwnKTsKLSAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9U
TyhTY3JpcHREYXRhRG91YmxlRXNjYXBlZExlc3NUaGFuU2lnblN0YXRlKTsKKyAgICAgICAgICAg
IEFEVkFOQ0VfVE8oU2NyaXB0RGF0YURvdWJsZUVzY2FwZWRMZXNzVGhhblNpZ25TdGF0ZSk7CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CiAg
ICAgICAgICAgICBwYXJzZUVycm9yKCk7CkBAIC02NDcsMTEgKzY0NywxMSBAQCBib29sIEhUTUxU
b2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICBCRUdJ
Tl9TVEFURShTY3JpcHREYXRhRG91YmxlRXNjYXBlZERhc2hTdGF0ZSkKICAgICAgICAgaWYgKGNo
YXJhY3RlciA9PSAnLScpIHsKICAgICAgICAgICAgIGJ1ZmZlckFTQ0lJQ2hhcmFjdGVyKCctJyk7
Ci0gICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oU2NyaXB0RGF0YURvdWJs
ZUVzY2FwZWREYXNoRGFzaFN0YXRlKTsKKyAgICAgICAgICAgIEFEVkFOQ0VfVE8oU2NyaXB0RGF0
YURvdWJsZUVzY2FwZWREYXNoRGFzaFN0YXRlKTsKICAgICAgICAgfQogICAgICAgICBpZiAoY2hh
cmFjdGVyID09ICc8JykgewogICAgICAgICAgICAgYnVmZmVyQVNDSUlDaGFyYWN0ZXIoJzwnKTsK
LSAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhTY3JpcHREYXRhRG91Ymxl
RXNjYXBlZExlc3NUaGFuU2lnblN0YXRlKTsKKyAgICAgICAgICAgIEFEVkFOQ0VfVE8oU2NyaXB0
RGF0YURvdWJsZUVzY2FwZWRMZXNzVGhhblNpZ25TdGF0ZSk7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAgICBwYXJzZUVy
cm9yKCk7CkBAIC02NjQsMTUgKzY2NCwxNSBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NU
b2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICBCRUdJTl9TVEFURShTY3JpcHREYXRh
RG91YmxlRXNjYXBlZERhc2hEYXNoU3RhdGUpCiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJy0n
KSB7CiAgICAgICAgICAgICBidWZmZXJBU0NJSUNoYXJhY3RlcignLScpOwotICAgICAgICAgICAg
QURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKFNjcmlwdERhdGFEb3VibGVFc2NhcGVkRGFzaERh
c2hTdGF0ZSk7CisgICAgICAgICAgICBBRFZBTkNFX1RPKFNjcmlwdERhdGFEb3VibGVFc2NhcGVk
RGFzaERhc2hTdGF0ZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnPCcp
IHsKICAgICAgICAgICAgIGJ1ZmZlckFTQ0lJQ2hhcmFjdGVyKCc8Jyk7Ci0gICAgICAgICAgICBB
RFZBTkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oU2NyaXB0RGF0YURvdWJsZUVzY2FwZWRMZXNzVGhh
blNpZ25TdGF0ZSk7CisgICAgICAgICAgICBBRFZBTkNFX1RPKFNjcmlwdERhdGFEb3VibGVFc2Nh
cGVkTGVzc1RoYW5TaWduU3RhdGUpOwogICAgICAgICB9CiAgICAgICAgIGlmIChjaGFyYWN0ZXIg
PT0gJz4nKSB7CiAgICAgICAgICAgICBidWZmZXJBU0NJSUNoYXJhY3RlcignPicpOwotICAgICAg
ICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKFNjcmlwdERhdGFTdGF0ZSk7CisgICAg
ICAgICAgICBBRFZBTkNFX1RPKFNjcmlwdERhdGFTdGF0ZSk7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAgICBwYXJzZUVy
cm9yKCk7CkBAIC02ODYsNyArNjg2LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9r
ZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJy8n
KSB7CiAgICAgICAgICAgICBidWZmZXJBU0NJSUNoYXJhY3RlcignLycpOwogICAgICAgICAgICAg
bV90ZW1wb3JhcnlCdWZmZXIuY2xlYXIoKTsKLSAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05f
TkVXTElORV9UTyhTY3JpcHREYXRhRG91YmxlRXNjYXBlRW5kU3RhdGUpOworICAgICAgICAgICAg
QURWQU5DRV9UTyhTY3JpcHREYXRhRG91YmxlRXNjYXBlRW5kU3RhdGUpOwogICAgICAgICB9CiAg
ICAgICAgIFJFQ09OU1VNRV9JTihTY3JpcHREYXRhRG91YmxlRXNjYXBlZFN0YXRlKTsKICAgICBF
TkRfU1RBVEUoKQpAQCAtNzAyLDcgKzcwMiw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vz
c1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICBpZiAoaXNBU0NJSUFscGhh
KGNoYXJhY3RlcikpIHsKICAgICAgICAgICAgIGJ1ZmZlckFTQ0lJQ2hhcmFjdGVyKGNoYXJhY3Rl
cik7CiAgICAgICAgICAgICBhcHBlbmRUb1RlbXBvcmFyeUJ1ZmZlcihjb252ZXJ0QVNDSUlBbHBo
YVRvTG93ZXIoY2hhcmFjdGVyKSk7Ci0gICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJ
TkVfVE8oU2NyaXB0RGF0YURvdWJsZUVzY2FwZUVuZFN0YXRlKTsKKyAgICAgICAgICAgIEFEVkFO
Q0VfVE8oU2NyaXB0RGF0YURvdWJsZUVzY2FwZUVuZFN0YXRlKTsKICAgICAgICAgfQogICAgICAg
ICBSRUNPTlNVTUVfSU4oU2NyaXB0RGF0YURvdWJsZUVzY2FwZWRTdGF0ZSk7CiAgICAgRU5EX1NU
QVRFKCkKQEAgLTcxMSw3ICs3MTEsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tl
bihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgaWYgKGlzVG9rZW5pemVyV2hpdGVz
cGFjZShjaGFyYWN0ZXIpKQogICAgICAgICAgICAgQURWQU5DRV9UTyhCZWZvcmVBdHRyaWJ1dGVO
YW1lU3RhdGUpOwogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICcvJykKLSAgICAgICAgICAgIEFE
VkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhTZWxmQ2xvc2luZ1N0YXJ0VGFnU3RhdGUpOworICAg
ICAgICAgICAgQURWQU5DRV9UTyhTZWxmQ2xvc2luZ1N0YXJ0VGFnU3RhdGUpOwogICAgICAgICBp
ZiAoY2hhcmFjdGVyID09ICc+JykKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVzdW1lSW5E
YXRhU3RhdGUoc291cmNlKTsKICAgICAgICAgaWYgKG1fb3B0aW9ucy51c2VQcmVIVE1MNVBhcnNl
clF1aXJrcyAmJiBjaGFyYWN0ZXIgPT0gJzwnKQpAQCAtNzI0LDE2ICs3MjQsMTYgQEAgYm9vbCBI
VE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAg
ICAgICAgICBwYXJzZUVycm9yKCk7CiAgICAgICAgIG1fdG9rZW4uYmVnaW5BdHRyaWJ1dGUoc291
cmNlLm51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCkpOwogICAgICAgICBtX3Rva2VuLmFwcGVu
ZFRvQXR0cmlidXRlTmFtZSh0b0FTQ0lJTG93ZXIoY2hhcmFjdGVyKSk7Ci0gICAgICAgIEFEVkFO
Q0VfUEFTVF9OT05fTkVXTElORV9UTyhBdHRyaWJ1dGVOYW1lU3RhdGUpOworICAgICAgICBBRFZB
TkNFX1RPKEF0dHJpYnV0ZU5hbWVTdGF0ZSk7CiAgICAgRU5EX1NUQVRFKCkKIAogICAgIEJFR0lO
X1NUQVRFKEF0dHJpYnV0ZU5hbWVTdGF0ZSkKICAgICAgICAgaWYgKGlzVG9rZW5pemVyV2hpdGVz
cGFjZShjaGFyYWN0ZXIpKQogICAgICAgICAgICAgQURWQU5DRV9UTyhBZnRlckF0dHJpYnV0ZU5h
bWVTdGF0ZSk7CiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJy8nKQotICAgICAgICAgICAgQURW
QU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKFNlbGZDbG9zaW5nU3RhcnRUYWdTdGF0ZSk7CisgICAg
ICAgICAgICBBRFZBTkNFX1RPKFNlbGZDbG9zaW5nU3RhcnRUYWdTdGF0ZSk7CiAgICAgICAgIGlm
IChjaGFyYWN0ZXIgPT0gJz0nKQotICAgICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5F
X1RPKEJlZm9yZUF0dHJpYnV0ZVZhbHVlU3RhdGUpOworICAgICAgICAgICAgQURWQU5DRV9UTyhC
ZWZvcmVBdHRyaWJ1dGVWYWx1ZVN0YXRlKTsKICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnPicp
CiAgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUluRGF0YVN0YXRlKHNvdXJjZSk7CiAg
ICAgICAgIGlmIChtX29wdGlvbnMudXNlUHJlSFRNTDVQYXJzZXJRdWlya3MgJiYgY2hhcmFjdGVy
ID09ICc8JykKQEAgLTc0NSwxNiArNzQ1LDE2IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vz
c1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICBpZiAoY2hhcmFjdGVyID09
ICciJyB8fCBjaGFyYWN0ZXIgPT0gJ1wnJyB8fCBjaGFyYWN0ZXIgPT0gJzwnIHx8IGNoYXJhY3Rl
ciA9PSAnPScpCiAgICAgICAgICAgICBwYXJzZUVycm9yKCk7CiAgICAgICAgIG1fdG9rZW4uYXBw
ZW5kVG9BdHRyaWJ1dGVOYW1lKHRvQVNDSUlMb3dlcihjaGFyYWN0ZXIpKTsKLSAgICAgICAgQURW
QU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKEF0dHJpYnV0ZU5hbWVTdGF0ZSk7CisgICAgICAgIEFE
VkFOQ0VfVE8oQXR0cmlidXRlTmFtZVN0YXRlKTsKICAgICBFTkRfU1RBVEUoKQogCiAgICAgQkVH
SU5fU1RBVEUoQWZ0ZXJBdHRyaWJ1dGVOYW1lU3RhdGUpCiAgICAgICAgIGlmIChpc1Rva2VuaXpl
cldoaXRlc3BhY2UoY2hhcmFjdGVyKSkKICAgICAgICAgICAgIEFEVkFOQ0VfVE8oQWZ0ZXJBdHRy
aWJ1dGVOYW1lU3RhdGUpOwogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICcvJykKLSAgICAgICAg
ICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhTZWxmQ2xvc2luZ1N0YXJ0VGFnU3RhdGUp
OworICAgICAgICAgICAgQURWQU5DRV9UTyhTZWxmQ2xvc2luZ1N0YXJ0VGFnU3RhdGUpOwogICAg
ICAgICBpZiAoY2hhcmFjdGVyID09ICc9JykKLSAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05f
TkVXTElORV9UTyhCZWZvcmVBdHRyaWJ1dGVWYWx1ZVN0YXRlKTsKKyAgICAgICAgICAgIEFEVkFO
Q0VfVE8oQmVmb3JlQXR0cmlidXRlVmFsdWVTdGF0ZSk7CiAgICAgICAgIGlmIChjaGFyYWN0ZXIg
PT0gJz4nKQogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFTdGF0ZShzb3Vy
Y2UpOwogICAgICAgICBpZiAobV9vcHRpb25zLnVzZVByZUhUTUw1UGFyc2VyUXVpcmtzICYmIGNo
YXJhY3RlciA9PSAnPCcpCkBAIC03NjcsMTggKzc2NywxOCBAQCBib29sIEhUTUxUb2tlbml6ZXI6
OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgICAgIHBhcnNl
RXJyb3IoKTsKICAgICAgICAgbV90b2tlbi5iZWdpbkF0dHJpYnV0ZShzb3VyY2UubnVtYmVyT2ZD
aGFyYWN0ZXJzQ29uc3VtZWQoKSk7CiAgICAgICAgIG1fdG9rZW4uYXBwZW5kVG9BdHRyaWJ1dGVO
YW1lKHRvQVNDSUlMb3dlcihjaGFyYWN0ZXIpKTsKLSAgICAgICAgQURWQU5DRV9QQVNUX05PTl9O
RVdMSU5FX1RPKEF0dHJpYnV0ZU5hbWVTdGF0ZSk7CisgICAgICAgIEFEVkFOQ0VfVE8oQXR0cmli
dXRlTmFtZVN0YXRlKTsKICAgICBFTkRfU1RBVEUoKQogCiAgICAgQkVHSU5fU1RBVEUoQmVmb3Jl
QXR0cmlidXRlVmFsdWVTdGF0ZSkKICAgICAgICAgaWYgKGlzVG9rZW5pemVyV2hpdGVzcGFjZShj
aGFyYWN0ZXIpKQogICAgICAgICAgICAgQURWQU5DRV9UTyhCZWZvcmVBdHRyaWJ1dGVWYWx1ZVN0
YXRlKTsKICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnIicpCi0gICAgICAgICAgICBBRFZBTkNF
X1BBU1RfTk9OX05FV0xJTkVfVE8oQXR0cmlidXRlVmFsdWVEb3VibGVRdW90ZWRTdGF0ZSk7Cisg
ICAgICAgICAgICBBRFZBTkNFX1RPKEF0dHJpYnV0ZVZhbHVlRG91YmxlUXVvdGVkU3RhdGUpOwog
ICAgICAgICBpZiAoY2hhcmFjdGVyID09ICcmJykKICAgICAgICAgICAgIFJFQ09OU1VNRV9JTihB
dHRyaWJ1dGVWYWx1ZVVucXVvdGVkU3RhdGUpOwogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICdc
JycpCi0gICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oQXR0cmlidXRlVmFs
dWVTaW5nbGVRdW90ZWRTdGF0ZSk7CisgICAgICAgICAgICBBRFZBTkNFX1RPKEF0dHJpYnV0ZVZh
bHVlU2luZ2xlUXVvdGVkU3RhdGUpOwogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICc+Jykgewog
ICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1
bWVJbkRhdGFTdGF0ZShzb3VyY2UpOwpAQCAtNzkwLDE3ICs3OTAsMTcgQEAgYm9vbCBIVE1MVG9r
ZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgICAgIGlm
IChjaGFyYWN0ZXIgPT0gJzwnIHx8IGNoYXJhY3RlciA9PSAnPScgfHwgY2hhcmFjdGVyID09ICdg
JykKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKICAgICAgICAgbV90b2tlbi5hcHBlbmRUb0F0
dHJpYnV0ZVZhbHVlKGNoYXJhY3Rlcik7Ci0gICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElO
RV9UTyhBdHRyaWJ1dGVWYWx1ZVVucXVvdGVkU3RhdGUpOworICAgICAgICBBRFZBTkNFX1RPKEF0
dHJpYnV0ZVZhbHVlVW5xdW90ZWRTdGF0ZSk7CiAgICAgRU5EX1NUQVRFKCkKIAogICAgIEJFR0lO
X1NUQVRFKEF0dHJpYnV0ZVZhbHVlRG91YmxlUXVvdGVkU3RhdGUpCiAgICAgICAgIGlmIChjaGFy
YWN0ZXIgPT0gJyInKSB7CiAgICAgICAgICAgICBtX3Rva2VuLmVuZEF0dHJpYnV0ZShzb3VyY2Uu
bnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKSk7Ci0gICAgICAgICAgICBBRFZBTkNFX1BBU1Rf
Tk9OX05FV0xJTkVfVE8oQWZ0ZXJBdHRyaWJ1dGVWYWx1ZVF1b3RlZFN0YXRlKTsKKyAgICAgICAg
ICAgIEFEVkFOQ0VfVE8oQWZ0ZXJBdHRyaWJ1dGVWYWx1ZVF1b3RlZFN0YXRlKTsKICAgICAgICAg
fQogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICcmJykgewogICAgICAgICAgICAgbV9hZGRpdGlv
bmFsQWxsb3dlZENoYXJhY3RlciA9ICciJzsKLSAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05f
TkVXTElORV9UTyhDaGFyYWN0ZXJSZWZlcmVuY2VJbkF0dHJpYnV0ZVZhbHVlU3RhdGUpOworICAg
ICAgICAgICAgQURWQU5DRV9UTyhDaGFyYWN0ZXJSZWZlcmVuY2VJbkF0dHJpYnV0ZVZhbHVlU3Rh
dGUpOwogICAgICAgICB9CiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtl
cikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwpAQCAtODE0LDExICs4MTQsMTEgQEAgYm9v
bCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAg
ICAgQkVHSU5fU1RBVEUoQXR0cmlidXRlVmFsdWVTaW5nbGVRdW90ZWRTdGF0ZSkKICAgICAgICAg
aWYgKGNoYXJhY3RlciA9PSAnXCcnKSB7CiAgICAgICAgICAgICBtX3Rva2VuLmVuZEF0dHJpYnV0
ZShzb3VyY2UubnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKSk7Ci0gICAgICAgICAgICBBRFZB
TkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oQWZ0ZXJBdHRyaWJ1dGVWYWx1ZVF1b3RlZFN0YXRlKTsK
KyAgICAgICAgICAgIEFEVkFOQ0VfVE8oQWZ0ZXJBdHRyaWJ1dGVWYWx1ZVF1b3RlZFN0YXRlKTsK
ICAgICAgICAgfQogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICcmJykgewogICAgICAgICAgICAg
bV9hZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciA9ICdcJyc7Ci0gICAgICAgICAgICBBRFZBTkNF
X1BBU1RfTk9OX05FV0xJTkVfVE8oQ2hhcmFjdGVyUmVmZXJlbmNlSW5BdHRyaWJ1dGVWYWx1ZVN0
YXRlKTsKKyAgICAgICAgICAgIEFEVkFOQ0VfVE8oQ2hhcmFjdGVyUmVmZXJlbmNlSW5BdHRyaWJ1
dGVWYWx1ZVN0YXRlKTsKICAgICAgICAgfQogICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRP
ZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKQEAgLTgzNiw3ICs4MzYs
NyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNv
dXJjZSkKICAgICAgICAgfQogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICcmJykgewogICAgICAg
ICAgICAgbV9hZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciA9ICc+JzsKLSAgICAgICAgICAgIEFE
VkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhDaGFyYWN0ZXJSZWZlcmVuY2VJbkF0dHJpYnV0ZVZh
bHVlU3RhdGUpOworICAgICAgICAgICAgQURWQU5DRV9UTyhDaGFyYWN0ZXJSZWZlcmVuY2VJbkF0
dHJpYnV0ZVZhbHVlU3RhdGUpOwogICAgICAgICB9CiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0g
Jz4nKSB7CiAgICAgICAgICAgICBtX3Rva2VuLmVuZEF0dHJpYnV0ZShzb3VyY2UubnVtYmVyT2ZD
aGFyYWN0ZXJzQ29uc3VtZWQoKSk7CkBAIC04NTAsNyArODUwLDcgQEAgYm9vbCBIVE1MVG9rZW5p
emVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgICAgIGlmIChj
aGFyYWN0ZXIgPT0gJyInIHx8IGNoYXJhY3RlciA9PSAnXCcnIHx8IGNoYXJhY3RlciA9PSAnPCcg
fHwgY2hhcmFjdGVyID09ICc9JyB8fCBjaGFyYWN0ZXIgPT0gJ2AnKQogICAgICAgICAgICAgcGFy
c2VFcnJvcigpOwogICAgICAgICBtX3Rva2VuLmFwcGVuZFRvQXR0cmlidXRlVmFsdWUoY2hhcmFj
dGVyKTsKLSAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKEF0dHJpYnV0ZVZhbHVl
VW5xdW90ZWRTdGF0ZSk7CisgICAgICAgIEFEVkFOQ0VfVE8oQXR0cmlidXRlVmFsdWVVbnF1b3Rl
ZFN0YXRlKTsKICAgICBFTkRfU1RBVEUoKQogCiAgICAgQkVHSU5fU1RBVEUoQ2hhcmFjdGVyUmVm
ZXJlbmNlSW5BdHRyaWJ1dGVWYWx1ZVN0YXRlKQpAQCAtODgyLDcgKzg4Miw3IEBAIGJvb2wgSFRN
TFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAg
ICBpZiAoaXNUb2tlbml6ZXJXaGl0ZXNwYWNlKGNoYXJhY3RlcikpCiAgICAgICAgICAgICBBRFZB
TkNFX1RPKEJlZm9yZUF0dHJpYnV0ZU5hbWVTdGF0ZSk7CiAgICAgICAgIGlmIChjaGFyYWN0ZXIg
PT0gJy8nKQotICAgICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKFNlbGZDbG9z
aW5nU3RhcnRUYWdTdGF0ZSk7CisgICAgICAgICAgICBBRFZBTkNFX1RPKFNlbGZDbG9zaW5nU3Rh
cnRUYWdTdGF0ZSk7CiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJz4nKQogICAgICAgICAgICAg
cmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFTdGF0ZShzb3VyY2UpOwogICAgICAgICBpZiAobV9v
cHRpb25zLnVzZVByZUhUTUw1UGFyc2VyUXVpcmtzICYmIGNoYXJhY3RlciA9PSAnPCcpCkBAIC05
MzIsNyArOTMyLDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVk
U3RyaW5nJiBzb3VyY2UpCiAgICAgICAgICAgICBpZiAocmVzdWx0ID09IFNlZ21lbnRlZFN0cmlu
Zzo6Tm90RW5vdWdoQ2hhcmFjdGVycykKICAgICAgICAgICAgICAgICBSRVRVUk5fSU5fQ1VSUkVO
VF9TVEFURShoYXZlQnVmZmVyZWRDaGFyYWN0ZXJUb2tlbigpKTsKICAgICAgICAgfSBlbHNlIGlm
IChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKGNoYXJhY3RlciwgJ2QnKSkgewotICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBzb3VyY2UuYWR2YW5jZVBhc3RMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UoImRvY3R5cGUiKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gc291cmNlLmFkdmFuY2VQ
YXN0SWdub3JpbmdDYXNlKCJkb2N0eXBlIik7CiAgICAgICAgICAgICBpZiAocmVzdWx0ID09IFNl
Z21lbnRlZFN0cmluZzo6RGlkTWF0Y2gpCiAgICAgICAgICAgICAgICAgU1dJVENIX1RPKERPQ1RZ
UEVTdGF0ZSk7CiAgICAgICAgICAgICBpZiAocmVzdWx0ID09IFNlZ21lbnRlZFN0cmluZzo6Tm90
RW5vdWdoQ2hhcmFjdGVycykKQEAgLTk1MCw3ICs5NTAsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6
OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKIAogICAgIEJFR0lOX1NUQVRF
KENvbW1lbnRTdGFydFN0YXRlKQogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICctJykKLSAgICAg
ICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhDb21tZW50U3RhcnREYXNoU3RhdGUp
OworICAgICAgICAgICAgQURWQU5DRV9UTyhDb21tZW50U3RhcnREYXNoU3RhdGUpOwogICAgICAg
ICBpZiAoY2hhcmFjdGVyID09ICc+JykgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAg
ICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFTdGF0ZShzb3VyY2UpOwpAQCAtOTY1
LDcgKzk2NSw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0
cmluZyYgc291cmNlKQogCiAgICAgQkVHSU5fU1RBVEUoQ29tbWVudFN0YXJ0RGFzaFN0YXRlKQog
ICAgICAgICBpZiAoY2hhcmFjdGVyID09ICctJykKLSAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9O
T05fTkVXTElORV9UTyhDb21tZW50RW5kU3RhdGUpOworICAgICAgICAgICAgQURWQU5DRV9UTyhD
b21tZW50RW5kU3RhdGUpOwogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICc+JykgewogICAgICAg
ICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRh
dGFTdGF0ZShzb3VyY2UpOwpAQCAtOTgxLDcgKzk4MSw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6
cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogCiAgICAgQkVHSU5fU1RBVEUo
Q29tbWVudFN0YXRlKQogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICctJykKLSAgICAgICAgICAg
IEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhDb21tZW50RW5kRGFzaFN0YXRlKTsKKyAgICAg
ICAgICAgIEFEVkFOQ0VfVE8oQ29tbWVudEVuZERhc2hTdGF0ZSk7CiAgICAgICAgIGlmIChjaGFy
YWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwog
ICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZWNvbnN1bWVJbkRhdGFTdGF0ZSgpOwpAQCAtOTky
LDcgKzk5Miw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0
cmluZyYgc291cmNlKQogCiAgICAgQkVHSU5fU1RBVEUoQ29tbWVudEVuZERhc2hTdGF0ZSkKICAg
ICAgICAgaWYgKGNoYXJhY3RlciA9PSAnLScpCi0gICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9O
X05FV0xJTkVfVE8oQ29tbWVudEVuZFN0YXRlKTsKKyAgICAgICAgICAgIEFEVkFOQ0VfVE8oQ29t
bWVudEVuZFN0YXRlKTsKICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2Vy
KSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKCk7CiAgICAgICAgICAgICByZXR1cm4gZW1pdEFu
ZFJlY29uc3VtZUluRGF0YVN0YXRlKCk7CkBAIC0xMDA3LDEyICsxMDA3LDEyIEBAIGJvb2wgSFRN
TFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAg
ICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFTdGF0ZShzb3VyY2UpOwogICAgICAgICBp
ZiAoY2hhcmFjdGVyID09ICchJykgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwotICAgICAg
ICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKENvbW1lbnRFbmRCYW5nU3RhdGUpOwor
ICAgICAgICAgICAgQURWQU5DRV9UTyhDb21tZW50RW5kQmFuZ1N0YXRlKTsKICAgICAgICAgfQog
ICAgICAgICBpZiAoY2hhcmFjdGVyID09ICctJykgewogICAgICAgICAgICAgcGFyc2VFcnJvcigp
OwogICAgICAgICAgICAgbV90b2tlbi5hcHBlbmRUb0NvbW1lbnQoJy0nKTsKLSAgICAgICAgICAg
IEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhDb21tZW50RW5kU3RhdGUpOworICAgICAgICAg
ICAgQURWQU5DRV9UTyhDb21tZW50RW5kU3RhdGUpOwogICAgICAgICB9CiAgICAgICAgIGlmIChj
aGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigp
OwpAQCAtMTAzMCw3ICsxMDMwLDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4o
U2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgICAgICAgICBtX3Rva2VuLmFwcGVuZFRvQ29t
bWVudCgnLScpOwogICAgICAgICAgICAgbV90b2tlbi5hcHBlbmRUb0NvbW1lbnQoJy0nKTsKICAg
ICAgICAgICAgIG1fdG9rZW4uYXBwZW5kVG9Db21tZW50KCchJyk7Ci0gICAgICAgICAgICBBRFZB
TkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oQ29tbWVudEVuZERhc2hTdGF0ZSk7CisgICAgICAgICAg
ICBBRFZBTkNFX1RPKENvbW1lbnRFbmREYXNoU3RhdGUpOwogICAgICAgICB9CiAgICAgICAgIGlm
IChjaGFyYWN0ZXIgPT0gJz4nKQogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRh
dGFTdGF0ZShzb3VyY2UpOwpAQCAtMTA3NCw3ICsxMDc0LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVy
Ojpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgICAgICAgICByZXR1
cm4gZW1pdEFuZFJlY29uc3VtZUluRGF0YVN0YXRlKCk7CiAgICAgICAgIH0KICAgICAgICAgbV90
b2tlbi5iZWdpbkRPQ1RZUEUodG9BU0NJSUxvd2VyKGNoYXJhY3RlcikpOwotICAgICAgICBBRFZB
TkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oRE9DVFlQRU5hbWVTdGF0ZSk7CisgICAgICAgIEFEVkFO
Q0VfVE8oRE9DVFlQRU5hbWVTdGF0ZSk7CiAgICAgRU5EX1NUQVRFKCkKIAogICAgIEJFR0lOX1NU
QVRFKERPQ1RZUEVOYW1lU3RhdGUpCkBAIC0xMDg4LDcgKzEwODgsNyBAQCBib29sIEhUTUxUb2tl
bml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgICAg
IHJldHVybiBlbWl0QW5kUmVjb25zdW1lSW5EYXRhU3RhdGUoKTsKICAgICAgICAgfQogICAgICAg
ICBtX3Rva2VuLmFwcGVuZFRvTmFtZSh0b0FTQ0lJTG93ZXIoY2hhcmFjdGVyKSk7Ci0gICAgICAg
IEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhET0NUWVBFTmFtZVN0YXRlKTsKKyAgICAgICAg
QURWQU5DRV9UTyhET0NUWVBFTmFtZVN0YXRlKTsKICAgICBFTkRfU1RBVEUoKQogCiAgICAgQkVH
SU5fU1RBVEUoQWZ0ZXJET0NUWVBFTmFtZVN0YXRlKQpAQCAtMTEwMiwxMyArMTEwMiwxMyBAQCBi
b29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkK
ICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVjb25zdW1lSW5EYXRhU3RhdGUoKTsKICAgICAg
ICAgfQogICAgICAgICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChjaGFyYWN0ZXIsICdw
JykpIHsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gc291cmNlLmFkdmFuY2VQYXN0TGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKCJwdWJsaWMiKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0g
c291cmNlLmFkdmFuY2VQYXN0SWdub3JpbmdDYXNlKCJwdWJsaWMiKTsKICAgICAgICAgICAgIGlm
IChyZXN1bHQgPT0gU2VnbWVudGVkU3RyaW5nOjpEaWRNYXRjaCkKICAgICAgICAgICAgICAgICBT
V0lUQ0hfVE8oQWZ0ZXJET0NUWVBFUHVibGljS2V5d29yZFN0YXRlKTsKICAgICAgICAgICAgIGlm
IChyZXN1bHQgPT0gU2VnbWVudGVkU3RyaW5nOjpOb3RFbm91Z2hDaGFyYWN0ZXJzKQogICAgICAg
ICAgICAgICAgIFJFVFVSTl9JTl9DVVJSRU5UX1NUQVRFKGhhdmVCdWZmZXJlZENoYXJhY3RlclRv
a2VuKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwoY2hh
cmFjdGVyLCAncycpKSB7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHNvdXJjZS5hZHZhbmNl
UGFzdExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSgic3lzdGVtIik7CisgICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IHNvdXJjZS5hZHZhbmNlUGFzdElnbm9yaW5nQ2FzZSgic3lzdGVtIik7CiAgICAg
ICAgICAgICBpZiAocmVzdWx0ID09IFNlZ21lbnRlZFN0cmluZzo6RGlkTWF0Y2gpCiAgICAgICAg
ICAgICAgICAgU1dJVENIX1RPKEFmdGVyRE9DVFlQRVN5c3RlbUtleXdvcmRTdGF0ZSk7CiAgICAg
ICAgICAgICBpZiAocmVzdWx0ID09IFNlZ21lbnRlZFN0cmluZzo6Tm90RW5vdWdoQ2hhcmFjdGVy
cykKQEAgLTExMTYsNyArMTExNiw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2Vu
KFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICB9CiAgICAgICAgIHBhcnNlRXJyb3Io
KTsKICAgICAgICAgbV90b2tlbi5zZXRGb3JjZVF1aXJrcygpOwotICAgICAgICBBRFZBTkNFX1BB
U1RfTk9OX05FV0xJTkVfVE8oQm9ndXNET0NUWVBFU3RhdGUpOworICAgICAgICBBRFZBTkNFX1RP
KEJvZ3VzRE9DVFlQRVN0YXRlKTsKICAgICBFTkRfU1RBVEUoKQogCiAgICAgQkVHSU5fU1RBVEUo
QWZ0ZXJET0NUWVBFUHVibGljS2V5d29yZFN0YXRlKQpAQCAtMTEyNSwxMiArMTEyNSwxMiBAQCBi
b29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkK
ICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnIicpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3Io
KTsKICAgICAgICAgICAgIG1fdG9rZW4uc2V0UHVibGljSWRlbnRpZmllclRvRW1wdHlTdHJpbmco
KTsKLSAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhET0NUWVBFUHVibGlj
SWRlbnRpZmllckRvdWJsZVF1b3RlZFN0YXRlKTsKKyAgICAgICAgICAgIEFEVkFOQ0VfVE8oRE9D
VFlQRVB1YmxpY0lkZW50aWZpZXJEb3VibGVRdW90ZWRTdGF0ZSk7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKGNoYXJhY3RlciA9PSAnXCcnKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKCk7CiAg
ICAgICAgICAgICBtX3Rva2VuLnNldFB1YmxpY0lkZW50aWZpZXJUb0VtcHR5U3RyaW5nKCk7Ci0g
ICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oRE9DVFlQRVB1YmxpY0lkZW50
aWZpZXJTaW5nbGVRdW90ZWRTdGF0ZSk7CisgICAgICAgICAgICBBRFZBTkNFX1RPKERPQ1RZUEVQ
dWJsaWNJZGVudGlmaWVyU2luZ2xlUXVvdGVkU3RhdGUpOwogICAgICAgICB9CiAgICAgICAgIGlm
IChjaGFyYWN0ZXIgPT0gJz4nKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKCk7CkBAIC0xMTQ0
LDcgKzExNDQsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRT
dHJpbmcmIHNvdXJjZSkKICAgICAgICAgfQogICAgICAgICBwYXJzZUVycm9yKCk7CiAgICAgICAg
IG1fdG9rZW4uc2V0Rm9yY2VRdWlya3MoKTsKLSAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdM
SU5FX1RPKEJvZ3VzRE9DVFlQRVN0YXRlKTsKKyAgICAgICAgQURWQU5DRV9UTyhCb2d1c0RPQ1RZ
UEVTdGF0ZSk7CiAgICAgRU5EX1NUQVRFKCkKIAogICAgIEJFR0lOX1NUQVRFKEJlZm9yZURPQ1RZ
UEVQdWJsaWNJZGVudGlmaWVyU3RhdGUpCkBAIC0xMTUyLDExICsxMTUyLDExIEBAIGJvb2wgSFRN
TFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAg
ICAgICAgQURWQU5DRV9UTyhCZWZvcmVET0NUWVBFUHVibGljSWRlbnRpZmllclN0YXRlKTsKICAg
ICAgICAgaWYgKGNoYXJhY3RlciA9PSAnIicpIHsKICAgICAgICAgICAgIG1fdG9rZW4uc2V0UHVi
bGljSWRlbnRpZmllclRvRW1wdHlTdHJpbmcoKTsKLSAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9O
T05fTkVXTElORV9UTyhET0NUWVBFUHVibGljSWRlbnRpZmllckRvdWJsZVF1b3RlZFN0YXRlKTsK
KyAgICAgICAgICAgIEFEVkFOQ0VfVE8oRE9DVFlQRVB1YmxpY0lkZW50aWZpZXJEb3VibGVRdW90
ZWRTdGF0ZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnXCcnKSB7CiAg
ICAgICAgICAgICBtX3Rva2VuLnNldFB1YmxpY0lkZW50aWZpZXJUb0VtcHR5U3RyaW5nKCk7Ci0g
ICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oRE9DVFlQRVB1YmxpY0lkZW50
aWZpZXJTaW5nbGVRdW90ZWRTdGF0ZSk7CisgICAgICAgICAgICBBRFZBTkNFX1RPKERPQ1RZUEVQ
dWJsaWNJZGVudGlmaWVyU2luZ2xlUXVvdGVkU3RhdGUpOwogICAgICAgICB9CiAgICAgICAgIGlm
IChjaGFyYWN0ZXIgPT0gJz4nKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKCk7CkBAIC0xMTcw
LDEyICsxMTcwLDEyIEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRl
ZFN0cmluZyYgc291cmNlKQogICAgICAgICB9CiAgICAgICAgIHBhcnNlRXJyb3IoKTsKICAgICAg
ICAgbV90b2tlbi5zZXRGb3JjZVF1aXJrcygpOwotICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05F
V0xJTkVfVE8oQm9ndXNET0NUWVBFU3RhdGUpOworICAgICAgICBBRFZBTkNFX1RPKEJvZ3VzRE9D
VFlQRVN0YXRlKTsKICAgICBFTkRfU1RBVEUoKQogCiAgICAgQkVHSU5fU1RBVEUoRE9DVFlQRVB1
YmxpY0lkZW50aWZpZXJEb3VibGVRdW90ZWRTdGF0ZSkKICAgICAgICAgaWYgKGNoYXJhY3RlciA9
PSAnIicpCi0gICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oQWZ0ZXJET0NU
WVBFUHVibGljSWRlbnRpZmllclN0YXRlKTsKKyAgICAgICAgICAgIEFEVkFOQ0VfVE8oQWZ0ZXJE
T0NUWVBFUHVibGljSWRlbnRpZmllclN0YXRlKTsKICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAn
PicpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKICAgICAgICAgICAgIG1fdG9rZW4uc2V0
Rm9yY2VRdWlya3MoKTsKQEAgLTExOTIsNyArMTE5Miw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6
cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogCiAgICAgQkVHSU5fU1RBVEUo
RE9DVFlQRVB1YmxpY0lkZW50aWZpZXJTaW5nbGVRdW90ZWRTdGF0ZSkKICAgICAgICAgaWYgKGNo
YXJhY3RlciA9PSAnXCcnKQotICAgICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RP
KEFmdGVyRE9DVFlQRVB1YmxpY0lkZW50aWZpZXJTdGF0ZSk7CisgICAgICAgICAgICBBRFZBTkNF
X1RPKEFmdGVyRE9DVFlQRVB1YmxpY0lkZW50aWZpZXJTdGF0ZSk7CiAgICAgICAgIGlmIChjaGFy
YWN0ZXIgPT0gJz4nKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKCk7CiAgICAgICAgICAgICBt
X3Rva2VuLnNldEZvcmNlUXVpcmtzKCk7CkBAIC0xMjE1LDEyICsxMjE1LDEyIEBAIGJvb2wgSFRN
TFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAg
ICBpZiAoY2hhcmFjdGVyID09ICciJykgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAg
ICAgICAgICAgbV90b2tlbi5zZXRTeXN0ZW1JZGVudGlmaWVyVG9FbXB0eVN0cmluZygpOwotICAg
ICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKERPQ1RZUEVTeXN0ZW1JZGVudGlm
aWVyRG91YmxlUXVvdGVkU3RhdGUpOworICAgICAgICAgICAgQURWQU5DRV9UTyhET0NUWVBFU3lz
dGVtSWRlbnRpZmllckRvdWJsZVF1b3RlZFN0YXRlKTsKICAgICAgICAgfQogICAgICAgICBpZiAo
Y2hhcmFjdGVyID09ICdcJycpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKICAgICAgICAg
ICAgIG1fdG9rZW4uc2V0U3lzdGVtSWRlbnRpZmllclRvRW1wdHlTdHJpbmcoKTsKLSAgICAgICAg
ICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhET0NUWVBFU3lzdGVtSWRlbnRpZmllclNp
bmdsZVF1b3RlZFN0YXRlKTsKKyAgICAgICAgICAgIEFEVkFOQ0VfVE8oRE9DVFlQRVN5c3RlbUlk
ZW50aWZpZXJTaW5nbGVRdW90ZWRTdGF0ZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNoYXJh
Y3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKCk7CkBA
IC0xMjI5LDcgKzEyMjksNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdt
ZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgfQogICAgICAgICBwYXJzZUVycm9yKCk7CiAg
ICAgICAgIG1fdG9rZW4uc2V0Rm9yY2VRdWlya3MoKTsKLSAgICAgICAgQURWQU5DRV9QQVNUX05P
Tl9ORVdMSU5FX1RPKEJvZ3VzRE9DVFlQRVN0YXRlKTsKKyAgICAgICAgQURWQU5DRV9UTyhCb2d1
c0RPQ1RZUEVTdGF0ZSk7CiAgICAgRU5EX1NUQVRFKCkKIAogICAgIEJFR0lOX1NUQVRFKEJldHdl
ZW5ET0NUWVBFUHVibGljQW5kU3lzdGVtSWRlbnRpZmllcnNTdGF0ZSkKQEAgLTEyMzksMTEgKzEy
MzksMTEgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5n
JiBzb3VyY2UpCiAgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUluRGF0YVN0YXRlKHNv
dXJjZSk7CiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJyInKSB7CiAgICAgICAgICAgICBtX3Rv
a2VuLnNldFN5c3RlbUlkZW50aWZpZXJUb0VtcHR5U3RyaW5nKCk7Ci0gICAgICAgICAgICBBRFZB
TkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oRE9DVFlQRVN5c3RlbUlkZW50aWZpZXJEb3VibGVRdW90
ZWRTdGF0ZSk7CisgICAgICAgICAgICBBRFZBTkNFX1RPKERPQ1RZUEVTeXN0ZW1JZGVudGlmaWVy
RG91YmxlUXVvdGVkU3RhdGUpOwogICAgICAgICB9CiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0g
J1wnJykgewogICAgICAgICAgICAgbV90b2tlbi5zZXRTeXN0ZW1JZGVudGlmaWVyVG9FbXB0eVN0
cmluZygpOwotICAgICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKERPQ1RZUEVT
eXN0ZW1JZGVudGlmaWVyU2luZ2xlUXVvdGVkU3RhdGUpOworICAgICAgICAgICAgQURWQU5DRV9U
TyhET0NUWVBFU3lzdGVtSWRlbnRpZmllclNpbmdsZVF1b3RlZFN0YXRlKTsKICAgICAgICAgfQog
ICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAg
IHBhcnNlRXJyb3IoKTsKQEAgLTEyNTIsNyArMTI1Miw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6
cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICB9CiAgICAgICAg
IHBhcnNlRXJyb3IoKTsKICAgICAgICAgbV90b2tlbi5zZXRGb3JjZVF1aXJrcygpOwotICAgICAg
ICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oQm9ndXNET0NUWVBFU3RhdGUpOworICAgICAg
ICBBRFZBTkNFX1RPKEJvZ3VzRE9DVFlQRVN0YXRlKTsKICAgICBFTkRfU1RBVEUoKQogCiAgICAg
QkVHSU5fU1RBVEUoQWZ0ZXJET0NUWVBFU3lzdGVtS2V5d29yZFN0YXRlKQpAQCAtMTI2MSwxMiAr
MTI2MSwxMiBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJp
bmcmIHNvdXJjZSkKICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnIicpIHsKICAgICAgICAgICAg
IHBhcnNlRXJyb3IoKTsKICAgICAgICAgICAgIG1fdG9rZW4uc2V0U3lzdGVtSWRlbnRpZmllclRv
RW1wdHlTdHJpbmcoKTsKLSAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhE
T0NUWVBFU3lzdGVtSWRlbnRpZmllckRvdWJsZVF1b3RlZFN0YXRlKTsKKyAgICAgICAgICAgIEFE
VkFOQ0VfVE8oRE9DVFlQRVN5c3RlbUlkZW50aWZpZXJEb3VibGVRdW90ZWRTdGF0ZSk7CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnXCcnKSB7CiAgICAgICAgICAgICBwYXJz
ZUVycm9yKCk7CiAgICAgICAgICAgICBtX3Rva2VuLnNldFN5c3RlbUlkZW50aWZpZXJUb0VtcHR5
U3RyaW5nKCk7Ci0gICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oRE9DVFlQ
RVN5c3RlbUlkZW50aWZpZXJTaW5nbGVRdW90ZWRTdGF0ZSk7CisgICAgICAgICAgICBBRFZBTkNF
X1RPKERPQ1RZUEVTeXN0ZW1JZGVudGlmaWVyU2luZ2xlUXVvdGVkU3RhdGUpOwogICAgICAgICB9
CiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJz4nKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9y
KCk7CkBAIC0xMjgwLDcgKzEyODAsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tl
bihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgfQogICAgICAgICBwYXJzZUVycm9y
KCk7CiAgICAgICAgIG1fdG9rZW4uc2V0Rm9yY2VRdWlya3MoKTsKLSAgICAgICAgQURWQU5DRV9Q
QVNUX05PTl9ORVdMSU5FX1RPKEJvZ3VzRE9DVFlQRVN0YXRlKTsKKyAgICAgICAgQURWQU5DRV9U
TyhCb2d1c0RPQ1RZUEVTdGF0ZSk7CiAgICAgRU5EX1NUQVRFKCkKIAogICAgIEJFR0lOX1NUQVRF
KEJlZm9yZURPQ1RZUEVTeXN0ZW1JZGVudGlmaWVyU3RhdGUpCkBAIC0xMjg4LDExICsxMjg4LDEx
IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291
cmNlKQogICAgICAgICAgICAgQURWQU5DRV9UTyhCZWZvcmVET0NUWVBFU3lzdGVtSWRlbnRpZmll
clN0YXRlKTsKICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnIicpIHsKICAgICAgICAgICAgIG1f
dG9rZW4uc2V0U3lzdGVtSWRlbnRpZmllclRvRW1wdHlTdHJpbmcoKTsKLSAgICAgICAgICAgIEFE
VkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhET0NUWVBFU3lzdGVtSWRlbnRpZmllckRvdWJsZVF1
b3RlZFN0YXRlKTsKKyAgICAgICAgICAgIEFEVkFOQ0VfVE8oRE9DVFlQRVN5c3RlbUlkZW50aWZp
ZXJEb3VibGVRdW90ZWRTdGF0ZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNoYXJhY3RlciA9
PSAnXCcnKSB7CiAgICAgICAgICAgICBtX3Rva2VuLnNldFN5c3RlbUlkZW50aWZpZXJUb0VtcHR5
U3RyaW5nKCk7Ci0gICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oRE9DVFlQ
RVN5c3RlbUlkZW50aWZpZXJTaW5nbGVRdW90ZWRTdGF0ZSk7CisgICAgICAgICAgICBBRFZBTkNF
X1RPKERPQ1RZUEVTeXN0ZW1JZGVudGlmaWVyU2luZ2xlUXVvdGVkU3RhdGUpOwogICAgICAgICB9
CiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJz4nKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9y
KCk7CkBAIC0xMzA2LDEyICsxMzA2LDEyIEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rv
a2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICB9CiAgICAgICAgIHBhcnNlRXJy
b3IoKTsKICAgICAgICAgbV90b2tlbi5zZXRGb3JjZVF1aXJrcygpOwotICAgICAgICBBRFZBTkNF
X1BBU1RfTk9OX05FV0xJTkVfVE8oQm9ndXNET0NUWVBFU3RhdGUpOworICAgICAgICBBRFZBTkNF
X1RPKEJvZ3VzRE9DVFlQRVN0YXRlKTsKICAgICBFTkRfU1RBVEUoKQogCiAgICAgQkVHSU5fU1RB
VEUoRE9DVFlQRVN5c3RlbUlkZW50aWZpZXJEb3VibGVRdW90ZWRTdGF0ZSkKICAgICAgICAgaWYg
KGNoYXJhY3RlciA9PSAnIicpCi0gICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVf
VE8oQWZ0ZXJET0NUWVBFU3lzdGVtSWRlbnRpZmllclN0YXRlKTsKKyAgICAgICAgICAgIEFEVkFO
Q0VfVE8oQWZ0ZXJET0NUWVBFU3lzdGVtSWRlbnRpZmllclN0YXRlKTsKICAgICAgICAgaWYgKGNo
YXJhY3RlciA9PSAnPicpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKICAgICAgICAgICAg
IG1fdG9rZW4uc2V0Rm9yY2VRdWlya3MoKTsKQEAgLTEzMjgsNyArMTMyOCw3IEBAIGJvb2wgSFRN
TFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogCiAgICAg
QkVHSU5fU1RBVEUoRE9DVFlQRVN5c3RlbUlkZW50aWZpZXJTaW5nbGVRdW90ZWRTdGF0ZSkKICAg
ICAgICAgaWYgKGNoYXJhY3RlciA9PSAnXCcnKQotICAgICAgICAgICAgQURWQU5DRV9QQVNUX05P
Tl9ORVdMSU5FX1RPKEFmdGVyRE9DVFlQRVN5c3RlbUlkZW50aWZpZXJTdGF0ZSk7CisgICAgICAg
ICAgICBBRFZBTkNFX1RPKEFmdGVyRE9DVFlQRVN5c3RlbUlkZW50aWZpZXJTdGF0ZSk7CiAgICAg
ICAgIGlmIChjaGFyYWN0ZXIgPT0gJz4nKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKCk7CiAg
ICAgICAgICAgICBtX3Rva2VuLnNldEZvcmNlUXVpcmtzKCk7CkBAIC0xMzU0LDcgKzEzNTQsNyBA
QCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJj
ZSkKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVjb25zdW1lSW5EYXRhU3RhdGUoKTsKICAg
ICAgICAgfQogICAgICAgICBwYXJzZUVycm9yKCk7Ci0gICAgICAgIEFEVkFOQ0VfUEFTVF9OT05f
TkVXTElORV9UTyhCb2d1c0RPQ1RZUEVTdGF0ZSk7CisgICAgICAgIEFEVkFOQ0VfVE8oQm9ndXNE
T0NUWVBFU3RhdGUpOwogICAgIEVORF9TVEFURSgpCiAKICAgICBCRUdJTl9TVEFURShCb2d1c0RP
Q1RZUEVTdGF0ZSkKQEAgLTEzNjcsNyArMTM2Nyw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJv
Y2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogCiAgICAgQkVHSU5fU1RBVEUoQ0RB
VEFTZWN0aW9uU3RhdGUpCiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJ10nKQotICAgICAgICAg
ICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKENEQVRBU2VjdGlvblJpZ2h0U3F1YXJlQnJh
Y2tldFN0YXRlKTsKKyAgICAgICAgICAgIEFEVkFOQ0VfVE8oQ0RBVEFTZWN0aW9uUmlnaHRTcXVh
cmVCcmFja2V0U3RhdGUpOwogICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJr
ZXIpCiAgICAgICAgICAgICBSRUNPTlNVTUVfSU4oRGF0YVN0YXRlKTsKICAgICAgICAgYnVmZmVy
Q2hhcmFjdGVyKGNoYXJhY3Rlcik7CkBAIC0xMzc2LDE0ICsxMzc2LDE0IEBAIGJvb2wgSFRNTFRv
a2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogCiAgICAgQkVH
SU5fU1RBVEUoQ0RBVEFTZWN0aW9uUmlnaHRTcXVhcmVCcmFja2V0U3RhdGUpCiAgICAgICAgIGlm
IChjaGFyYWN0ZXIgPT0gJ10nKQotICAgICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5F
X1RPKENEQVRBU2VjdGlvbkRvdWJsZVJpZ2h0U3F1YXJlQnJhY2tldFN0YXRlKTsKKyAgICAgICAg
ICAgIEFEVkFOQ0VfVE8oQ0RBVEFTZWN0aW9uRG91YmxlUmlnaHRTcXVhcmVCcmFja2V0U3RhdGUp
OwogICAgICAgICBidWZmZXJBU0NJSUNoYXJhY3RlcignXScpOwogICAgICAgICBSRUNPTlNVTUVf
SU4oQ0RBVEFTZWN0aW9uU3RhdGUpOwogICAgIEVORF9TVEFURSgpCiAKICAgICBCRUdJTl9TVEFU
RShDREFUQVNlY3Rpb25Eb3VibGVSaWdodFNxdWFyZUJyYWNrZXRTdGF0ZSkKICAgICAgICAgaWYg
KGNoYXJhY3RlciA9PSAnPicpCi0gICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVf
VE8oRGF0YVN0YXRlKTsKKyAgICAgICAgICAgIEFEVkFOQ0VfVE8oRGF0YVN0YXRlKTsKICAgICAg
ICAgYnVmZmVyQVNDSUlDaGFyYWN0ZXIoJ10nKTsKICAgICAgICAgYnVmZmVyQVNDSUlDaGFyYWN0
ZXIoJ10nKTsKICAgICAgICAgUkVDT05TVU1FX0lOKENEQVRBU2VjdGlvblN0YXRlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0lucHV0U3RyZWFtUHJlcHJvY2Vzc29y
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9JbnB1dFN0cmVhbVByZXByb2Nlc3Nvci5o
CmluZGV4IDM2MWY2NTMwMTVkMWFjYTM3YWNlN2Y3ZTIyYTZmZjJkY2U5MDhmNmIuLmQ1ZmIwMmZj
NDE4MWNhMTU4N2ViNTdiYWIxZTA4YzBjZTUxOWY2YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0lucHV0U3RyZWFtUHJlcHJvY2Vzc29yLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IuaApAQCAtMjgsMTcgKzI4
LDIyIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rl
ck5hbWVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY29uc3QgTENoYXIga0VuZE9mRmls
ZU1hcmtlciA9IDA7CisKIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9j
dXJyZW50LXdvcmsvI3ByZXByb2Nlc3NpbmctdGhlLWlucHV0LXN0cmVhbQogdGVtcGxhdGUgPHR5
cGVuYW1lIFRva2VuaXplcj4KIGNsYXNzIElucHV0U3RyZWFtUHJlcHJvY2Vzc29yIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShJbnB1dFN0cmVhbVByZXByb2Nlc3Nvcik7CiBwdWJsaWM6CiAg
ICAgZXhwbGljaXQgSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IoVG9rZW5pemVyJiB0b2tlbml6ZXIp
CiAgICAgICAgIDogbV90b2tlbml6ZXIodG9rZW5pemVyKQogICAgIHsKKyAgICAgICAgcmVzZXQo
KTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIFVDaGFyIG5leHRJbnB1dENoYXJhY3Rlcigp
IGNvbnN0IHsgcmV0dXJuIG1fbmV4dElucHV0Q2hhcmFjdGVyOyB9CkBAIC00OCw2OCArNTMsNzUg
QEAgcHVibGljOgogICAgIC8vIGNoYXJhY3RlcnMgaW4gfHNvdXJjZXwgKGFmdGVyIGNvbGxhcHNp
bmcgXHJcbiwgZXRjKS4KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcGVlayhTZWdtZW50ZWRTdHJp
bmcmIHNvdXJjZSwgYm9vbCBza2lwTnVsbENoYXJhY3RlcnMgPSBmYWxzZSkKICAgICB7Ci0gICAg
ICAgIGlmIChVTkxJS0VMWShzb3VyY2UuaXNFbXB0eSgpKSkKKyAgICAgICAgaWYgKHNvdXJjZS5p
c0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgbV9uZXh0SW5w
dXRDaGFyYWN0ZXIgPSBzb3VyY2UuY3VycmVudENoYXJhY3RlcigpOworICAgICAgICBtX25leHRJ
bnB1dENoYXJhY3RlciA9IHNvdXJjZS5jdXJyZW50Q2hhcigpOwogCiAgICAgICAgIC8vIEV2ZXJ5
IGJyYW5jaCBpbiB0aGlzIGZ1bmN0aW9uIGlzIGV4cGVuc2l2ZSwgc28gd2UgaGF2ZSBhCiAgICAg
ICAgIC8vIGZhc3QtcmVqZWN0IGJyYW5jaCBmb3IgY2hhcmFjdGVycyB0aGF0IGRvbid0IHJlcXVp
cmUgc3BlY2lhbAogICAgICAgICAvLyBoYW5kbGluZy4gUGxlYXNlIHJ1biB0aGUgcGFyc2VyIGJl
bmNobWFyayB3aGVuZXZlciB5b3UgdG91Y2gKICAgICAgICAgLy8gdGhpcyBmdW5jdGlvbi4gSXQn
cyB2ZXJ5IGhvdC4KLSAgICAgICAgY29uc3RleHByIFVDaGFyIHNwZWNpYWxDaGFyYWN0ZXJNYXNr
ID0gJ1xuJyB8ICdccicgfCAnXDAnOwotICAgICAgICBpZiAoTElLRUxZKG1fbmV4dElucHV0Q2hh
cmFjdGVyICYgfnNwZWNpYWxDaGFyYWN0ZXJNYXNrKSkgeworICAgICAgICBzdGF0aWMgY29uc3Qg
VUNoYXIgc3BlY2lhbENoYXJhY3Rlck1hc2sgPSAnXG4nIHwgJ1xyJyB8ICdcMCc7CisgICAgICAg
IGlmIChtX25leHRJbnB1dENoYXJhY3RlciAmIH5zcGVjaWFsQ2hhcmFjdGVyTWFzaykgewogICAg
ICAgICAgICAgbV9za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9Ci0KICAgICAgICAgcmV0dXJuIHByb2Nlc3NOZXh0SW5wdXRDaGFyYWN0
ZXIoc291cmNlLCBza2lwTnVsbENoYXJhY3RlcnMpOwogICAgIH0KIAogICAgIC8vIFJldHVybnMg
d2hldGhlciB0aGVyZSBhcmUgbW9yZSBjaGFyYWN0ZXJzIGluIHxzb3VyY2V8IGFmdGVyIGFkdmFu
Y2luZy4KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgYWR2YW5jZShTZWdtZW50ZWRTdHJpbmcmIHNv
dXJjZSwgYm9vbCBza2lwTnVsbENoYXJhY3RlcnMgPSBmYWxzZSkKICAgICB7Ci0gICAgICAgIHNv
dXJjZS5hZHZhbmNlKCk7CisgICAgICAgIHNvdXJjZS5hZHZhbmNlQW5kVXBkYXRlTGluZU51bWJl
cigpOwogICAgICAgICByZXR1cm4gcGVlayhzb3VyY2UsIHNraXBOdWxsQ2hhcmFjdGVycyk7CiAg
ICAgfQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBhZHZhbmNlUGFzdE5vbk5ld2xpbmUoU2VnbWVu
dGVkU3RyaW5nJiBzb3VyY2UsIGJvb2wgc2tpcE51bGxDaGFyYWN0ZXJzID0gZmFsc2UpCisKKyAg
ICBib29sIHNraXBOZXh0TmV3TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2tpcE5leHROZXdMaW5l
OyB9CisKKyAgICB2b2lkIHJlc2V0KGJvb2wgc2tpcE5leHROZXdMaW5lID0gZmFsc2UpCiAgICAg
ewotICAgICAgICBzb3VyY2UuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7Ci0gICAgICAgIHJldHVy
biBwZWVrKHNvdXJjZSwgc2tpcE51bGxDaGFyYWN0ZXJzKTsKKyAgICAgICAgbV9uZXh0SW5wdXRD
aGFyYWN0ZXIgPSAnXDAnOworICAgICAgICBtX3NraXBOZXh0TmV3TGluZSA9IHNraXBOZXh0TmV3
TGluZTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgYm9vbCBwcm9jZXNzTmV4dElucHV0Q2hhcmFj
dGVyKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBib29sIHNraXBOdWxsQ2hhcmFjdGVycykKICAg
ICB7CiAgICAgUHJvY2Vzc0FnYWluOgotICAgICAgICBBU1NFUlQobV9uZXh0SW5wdXRDaGFyYWN0
ZXIgPT0gc291cmNlLmN1cnJlbnRDaGFyYWN0ZXIoKSk7CisgICAgICAgIEFTU0VSVChtX25leHRJ
bnB1dENoYXJhY3RlciA9PSBzb3VyY2UuY3VycmVudENoYXIoKSk7CisKICAgICAgICAgaWYgKG1f
bmV4dElucHV0Q2hhcmFjdGVyID09ICdcbicgJiYgbV9za2lwTmV4dE5ld0xpbmUpIHsKICAgICAg
ICAgICAgIG1fc2tpcE5leHROZXdMaW5lID0gZmFsc2U7Ci0gICAgICAgICAgICBzb3VyY2UuYWR2
YW5jZVBhc3ROZXdsaW5lKCk7CisgICAgICAgICAgICBzb3VyY2UuYWR2YW5jZVBhc3ROZXdsaW5l
QW5kVXBkYXRlTGluZU51bWJlcigpOwogICAgICAgICAgICAgaWYgKHNvdXJjZS5pc0VtcHR5KCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgbV9uZXh0SW5wdXRD
aGFyYWN0ZXIgPSBzb3VyY2UuY3VycmVudENoYXJhY3RlcigpOworICAgICAgICAgICAgbV9uZXh0
SW5wdXRDaGFyYWN0ZXIgPSBzb3VyY2UuY3VycmVudENoYXIoKTsKICAgICAgICAgfQogICAgICAg
ICBpZiAobV9uZXh0SW5wdXRDaGFyYWN0ZXIgPT0gJ1xyJykgewogICAgICAgICAgICAgbV9uZXh0
SW5wdXRDaGFyYWN0ZXIgPSAnXG4nOwogICAgICAgICAgICAgbV9za2lwTmV4dE5ld0xpbmUgPSB0
cnVlOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgbV9za2lw
TmV4dE5ld0xpbmUgPSBmYWxzZTsKLSAgICAgICAgaWYgKG1fbmV4dElucHV0Q2hhcmFjdGVyIHx8
IGlzQXRFbmRPZkZpbGUoc291cmNlKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICBpZiAoc2tpcE51bGxDaGFyYWN0ZXJzICYmICFtX3Rva2VuaXplci5uZXZlclNraXBOdWxsQ2hh
cmFjdGVycygpKSB7Ci0gICAgICAgICAgICBzb3VyY2UuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7
Ci0gICAgICAgICAgICBpZiAoc291cmNlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICBtX25leHRJbnB1dENoYXJhY3RlciA9IHNvdXJjZS5jdXJy
ZW50Q2hhcmFjdGVyKCk7Ci0gICAgICAgICAgICBnb3RvIFByb2Nlc3NBZ2FpbjsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIG1fc2tpcE5leHROZXdMaW5lID0gZmFsc2U7CisgICAgICAg
ICAgICAvLyBGSVhNRTogVGhlIHNwZWMgaW5kaWNhdGVzIHRoYXQgdGhlIHN1cnJvZ2F0ZSBwYWly
IHJhbmdlIGFzIHdlbGwgYXMKKyAgICAgICAgICAgIC8vIGEgbnVtYmVyIG9mIHNwZWNpZmljIGNo
YXJhY3RlciB2YWx1ZXMgYXJlIHBhcnNlIGVycm9ycyBhbmQgc2hvdWxkIGJlIHJlcGxhY2VkCisg
ICAgICAgICAgICAvLyBieSB0aGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVyLiBXZSBzdXNwZWN0IHRo
aXMgaXMgYSBwcm9ibGVtIHdpdGggdGhlIHNwZWMgYXMgZG9pbmcKKyAgICAgICAgICAgIC8vIHRo
YXQgZmlsdGVyaW5nIGJyZWFrcyBzdXJyb2dhdGUgcGFpciBoYW5kbGluZyBhbmQgY2F1c2VzIHVz
IG5vdCB0byBtYXRjaCBNaW5lZmllbGQuCisgICAgICAgICAgICBpZiAobV9uZXh0SW5wdXRDaGFy
YWN0ZXIgPT0gJ1wwJyAmJiAhc2hvdWxkVHJlYXROdWxsQXNFbmRPZkZpbGVNYXJrZXIoc291cmNl
KSkgeworICAgICAgICAgICAgICAgIGlmIChza2lwTnVsbENoYXJhY3RlcnMgJiYgIW1fdG9rZW5p
emVyLm5ldmVyU2tpcE51bGxDaGFyYWN0ZXJzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc291
cmNlLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoc291
cmNlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9uZXh0SW5wdXRDaGFyYWN0ZXIgPSBzb3VyY2UuY3VycmVudENo
YXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBQcm9jZXNzQWdhaW47CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIG1fbmV4dElucHV0Q2hhcmFjdGVyID0gcmVwbGFjZW1l
bnRDaGFyYWN0ZXI7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgbV9uZXh0SW5w
dXRDaGFyYWN0ZXIgPSByZXBsYWNlbWVudENoYXJhY3RlcjsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgaXNBdEVuZE9mRmlsZShTZWdtZW50ZWRTdHJpbmcm
IHNvdXJjZSkKKyAgICBib29sIHNob3VsZFRyZWF0TnVsbEFzRW5kT2ZGaWxlTWFya2VyKFNlZ21l
bnRlZFN0cmluZyYgc291cmNlKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHNvdXJjZS5p
c0Nsb3NlZCgpICYmIHNvdXJjZS5sZW5ndGgoKSA9PSAxOwogICAgIH0KQEAgLTExNyw4ICsxMjks
OCBAQCBwcml2YXRlOgogICAgIFRva2VuaXplciYgbV90b2tlbml6ZXI7CiAKICAgICAvLyBodHRw
Oi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyNuZXh0LWlucHV0
LWNoYXJhY3RlcgotICAgIFVDaGFyIG1fbmV4dElucHV0Q2hhcmFjdGVyIHsgMCB9OwotICAgIGJv
b2wgbV9za2lwTmV4dE5ld0xpbmUgeyBmYWxzZSB9OworICAgIFVDaGFyIG1fbmV4dElucHV0Q2hh
cmFjdGVyOworICAgIGJvb2wgbV9za2lwTmV4dE5ld0xpbmU7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0J1ZmZlcmVk
TGluZVJlYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0J1ZmZlcmVkTGluZVJl
YWRlci5jcHAKaW5kZXggOGYyMzYyNTEyODUwOTYyNjgwYjFjYjQ5OTJiMWZiODM4ZWRhMDNjYy4u
YzIzOTI0YmVkZDI5MmQyOTdhN2RiODM0OWZhMWNiZDkwNjNlYmQ2MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9CdWZmZXJlZExpbmVSZWFkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svQnVmZmVyZWRMaW5lUmVhZGVyLmNwcApAQCAtMzUsNDkgKzM1
LDQ5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RkOjpvcHRpb25hbDxTdHJpbmc+IEJ1
ZmZlcmVkTGluZVJlYWRlcjo6bmV4dExpbmUoKQorYm9vbCBCdWZmZXJlZExpbmVSZWFkZXI6Omdl
dExpbmUoU3RyaW5nJiBsaW5lKQogewogICAgIGlmIChtX21heWJlU2tpcExGKSB7CiAgICAgICAg
IC8vIFdlIHJhbiBvdXQgb2YgZGF0YSBhZnRlciBhIENSIChVKzAwMEQpLCB3aGljaCBtZWFucyB0
aGF0IHdlIG1heSBiZQogICAgICAgICAvLyBpbiB0aGUgbWlkZGxlIG9mIGEgQ1JMRiBwYWlyLiBJ
ZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMgYSBMRiAoVSswMDBBKQogICAgICAgICAvLyB0aGVuIHNr
aXAgaXQsIGFuZCB0aGVuICh1bmNvbmRpdGlvbmFsbHkpIHJldHVybiB0aGUgYnVmZmVyZWQgbGlu
ZS4KICAgICAgICAgaWYgKCFtX2J1ZmZlci5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmICht
X2J1ZmZlci5jdXJyZW50Q2hhcmFjdGVyKCkgPT0gbmV3bGluZUNoYXJhY3RlcikKLSAgICAgICAg
ICAgICAgICBtX2J1ZmZlci5hZHZhbmNlUGFzdE5ld2xpbmUoKTsKKyAgICAgICAgICAgIHNjYW5D
aGFyYWN0ZXIobmV3bGluZUNoYXJhY3Rlcik7CiAgICAgICAgICAgICBtX21heWJlU2tpcExGID0g
ZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgLy8gSWYgdGhlcmUgd2FzIG5vIChuZXcpIGRhdGEg
YXZhaWxhYmxlLCB0aGVuIGtlZXAgbV9tYXliZVNraXBMRiBzZXQsCi0gICAgICAgIC8vIGFuZCBm
YWxsIHRocm91Z2ggYWxsIHRoZSB3YXkgZG93biB0byB0aGUgRU9TIGNoZWNrIGF0IHRoZSBlbmQg
b2YgdGhlIGZ1bmN0aW9uLgorICAgICAgICAvLyBhbmQgZmFsbCB0aHJvdWdoIGFsbCB0aGUgd2F5
IGRvd24gdG8gdGhlIEVPUyBjaGVjayBhdCB0aGUgZW5kIG9mCisgICAgICAgIC8vIHRoZSBtZXRo
b2QuCiAgICAgfQogCiAgICAgYm9vbCBzaG91bGRSZXR1cm5MaW5lID0gZmFsc2U7CiAgICAgYm9v
bCBjaGVja0ZvckxGID0gZmFsc2U7CiAgICAgd2hpbGUgKCFtX2J1ZmZlci5pc0VtcHR5KCkpIHsK
LSAgICAgICAgVUNoYXIgY2hhcmFjdGVyID0gbV9idWZmZXIuY3VycmVudENoYXJhY3RlcigpOwor
ICAgICAgICBVQ2hhciBjID0gbV9idWZmZXIuY3VycmVudENoYXIoKTsKICAgICAgICAgbV9idWZm
ZXIuYWR2YW5jZSgpOwogCi0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gbmV3bGluZUNoYXJhY3Rl
ciB8fCBjaGFyYWN0ZXIgPT0gY2FycmlhZ2VSZXR1cm4pIHsKKyAgICAgICAgaWYgKGMgPT0gbmV3
bGluZUNoYXJhY3RlciB8fCBjID09IGNhcnJpYWdlUmV0dXJuKSB7CiAgICAgICAgICAgICAvLyBX
ZSBmb3VuZCBhIGxpbmUgZW5kaW5nLiBSZXR1cm4gdGhlIGFjY3VtdWxhdGVkIGxpbmUuCiAgICAg
ICAgICAgICBzaG91bGRSZXR1cm5MaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgIGNoZWNrRm9yTEYg
PSAoY2hhcmFjdGVyID09IGNhcnJpYWdlUmV0dXJuKTsKKyAgICAgICAgICAgIGNoZWNrRm9yTEYg
PSAoYyA9PSBjYXJyaWFnZVJldHVybik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
CiAgICAgICAgIC8vIE5VTHMgYXJlIHRyYW5zZm9ybWVkIGludG8gVStGRkZEIChSRVBMQUNFTUVO
VCBDSEFSLikgaW4gc3RlcCAxIG9mCiAgICAgICAgIC8vIHRoZSBXZWJWVFQgcGFyc2VyIGFsZ29y
aXRobS4KLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnXDAnKQotICAgICAgICAgICAgY2hhcmFj
dGVyID0gcmVwbGFjZW1lbnRDaGFyYWN0ZXI7CisgICAgICAgIGlmIChjID09ICdcMCcpCisgICAg
ICAgICAgICBjID0gcmVwbGFjZW1lbnRDaGFyYWN0ZXI7CiAKLSAgICAgICAgbV9saW5lQnVmZmVy
LmFwcGVuZChjaGFyYWN0ZXIpOworICAgICAgICBtX2xpbmVCdWZmZXIuYXBwZW5kKGMpOwogICAg
IH0KIAogICAgIGlmIChjaGVja0ZvckxGKSB7CiAgICAgICAgIC8vIE1heSBiZSBpbiB0aGUgbWlk
ZGxlIG9mIGEgQ1JMRiBwYWlyLgogICAgICAgICBpZiAoIW1fYnVmZmVyLmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgaWYgKG1fYnVmZmVyLmN1cnJlbnRDaGFyYWN0ZXIoKSA9PSBuZXdsaW5lQ2hh
cmFjdGVyKQotICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFkdmFuY2VQYXN0TmV3bGluZSgpOwor
ICAgICAgICAgICAgLy8gU2NhbiBhIHBvdGVudGlhbCBuZXdsaW5lIGNoYXJhY3Rlci4KKyAgICAg
ICAgICAgIHNjYW5DaGFyYWN0ZXIobmV3bGluZUNoYXJhY3Rlcik7CiAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAvLyBDaGVjayBmb3IgdGhlIG5ld2xpbmUgb24gdGhlIG5leHQgY2FsbCAo
dW5sZXNzIHdlIHJlYWNoZWQgRU9TLCBpbgorICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHRoZSBM
RiBvbiB0aGUgbmV4dCBjYWxsICh1bmxlc3Mgd2UgcmVhY2hlZCBFT1MsIGluCiAgICAgICAgICAg
ICAvLyB3aGljaCBjYXNlIHdlJ2xsIHJldHVybiB0aGUgY29udGVudHMgb2YgdGhlIGxpbmUgYnVm
ZmVyLCBhbmQKICAgICAgICAgICAgIC8vIHJlc2V0IHN0YXRlIGZvciB0aGUgbmV4dCBsaW5lLikK
ICAgICAgICAgICAgIG1fbWF5YmVTa2lwTEYgPSB0cnVlOwpAQCAtOTIsMTMgKzkyLDEzIEBAIHN0
ZDo6b3B0aW9uYWw8U3RyaW5nPiBCdWZmZXJlZExpbmVSZWFkZXI6Om5leHRMaW5lKCkKICAgICB9
CiAKICAgICBpZiAoc2hvdWxkUmV0dXJuTGluZSkgewotICAgICAgICBhdXRvIGxpbmUgPSBtX2xp
bmVCdWZmZXIudG9TdHJpbmcoKTsKKyAgICAgICAgbGluZSA9IG1fbGluZUJ1ZmZlci50b1N0cmlu
ZygpOwogICAgICAgICBtX2xpbmVCdWZmZXIuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuIFdURk1v
dmUobGluZSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIEFTU0VSVChtX2J1
ZmZlci5pc0VtcHR5KCkpOwotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJuIGZh
bHNlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL0J1ZmZlcmVkTGluZVJlYWRlci5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9CdWZmZXJlZExpbmVSZWFkZXIuaAppbmRleCA5MzM0YWU3M2VmZTliMzI5YTk4ZmZk
ZmM4OGQyMmVlMjIwZDQ0NWU2Li45NDk0OTEwZjFmYWFkN2FmY2ZhZGRjMTU5NjQ4ZGJmN2ExMTA1
MTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0J1ZmZlcmVkTGluZVJl
YWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQnVmZmVyZWRMaW5lUmVhZGVy
LmgKQEAgLTM4LDM5ICszOCw1MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBMaW5lIGNvbGxl
Y3Rpb24gaGVscGVyIGZvciB0aGUgV2ViVlRUIFBhcnNlci4KIC8vCiAvLyBDb252ZXJ0cyBhIHN0
cmVhbSBvZiBkYXRhICg9PSBhIHNlcXVlbmNlIG9mIFN0cmluZ3MpIGludG8gYSBzZXQgb2YKLS8v
IGxpbmVzLiBDUiwgTFIgb3IgQ1JMRiBhcmUgY29uc2lkZXJlZCBsaW5lIGJyZWFrcy4gTm9ybWFs
aXplcyBOVUxzIChVKzAwMDApCi0vLyB0byAnUkVQTEFDRU1FTlQgQ0hBUkFDVEVSJyAoVStGRkZE
KSBhbmQgZG9lcyBub3QgcmV0dXJuIHRoZSBsaW5lIGJyZWFrcyBhcworLy8gbGluZXMuIENSLCBM
UiBvciBDUkxGIGFyZSBjb25zaWRlcmVkIGxpbmVicmVha3MuIE5vcm1hbGl6ZXMgTlVMcyAoVSsw
MDAwKQorLy8gdG8gJ1JFUExBQ0VNRU5UIENIQVJBQ1RFUicgKFUrRkZGRCkgYW5kIGRvZXMgbm90
IHJldHVybiB0aGUgbGluZWJyZWFrcyBhcwogLy8gcGFydCBvZiB0aGUgcmVzdWx0LgogY2xhc3Mg
QnVmZmVyZWRMaW5lUmVhZGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCdWZmZXJlZExp
bmVSZWFkZXIpOwogcHVibGljOgotICAgIEJ1ZmZlcmVkTGluZVJlYWRlcigpID0gZGVmYXVsdDsK
LSAgICB2b2lkIHJlc2V0KCk7CisgICAgQnVmZmVyZWRMaW5lUmVhZGVyKCkKKyAgICAgICAgOiBt
X2VuZE9mU3RyZWFtKGZhbHNlKQorICAgICAgICAsIG1fbWF5YmVTa2lwTEYoZmFsc2UpIHsgfQog
Ci0gICAgdm9pZCBhcHBlbmQoU3RyaW5nJiYgZGF0YSkKKyAgICAvLyBBcHBlbmQgZGF0YSB0byB0
aGUgaW50ZXJuYWwgYnVmZmVyLgorICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgZGF0YSkK
ICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9lbmRPZlN0cmVhbSk7Ci0gICAgICAgIG1fYnVmZmVy
LmFwcGVuZChXVEZNb3ZlKGRhdGEpKTsKKyAgICAgICAgbV9idWZmZXIuYXBwZW5kKFNlZ21lbnRl
ZFN0cmluZyhkYXRhKSk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBlbmRFbmRPZlN0cmVhbSgpIHsg
bV9lbmRPZlN0cmVhbSA9IHRydWU7IH0KKyAgICAvLyBJbmRpY2F0ZSB0aGF0IG5vIG1vcmUgZGF0
YSB3aWxsIGJlIGFwcGVuZGVkLiBUaGlzIHdpbGwgY2F1c2UgYW55CisgICAgLy8gcG90ZW50aWFs
bHkgInVudGVybWluYXRlZCIgbGluZSB0byBiZSByZXR1cm5lZCBmcm9tIGdldExpbmUuCisgICAg
dm9pZCBzZXRFbmRPZlN0cmVhbSgpIHsgbV9lbmRPZlN0cmVhbSA9IHRydWU7IH0KKworICAgIC8v
IEF0dGVtcHQgdG8gcmVhZCBhIGxpbmUgZnJvbSB0aGUgaW50ZXJuYWwgYnVmZmVyIChmZWQgdmlh
IGFwcGVuZCkuCisgICAgLy8gSWYgc3VjY2Vzc2Z1bCwgdHJ1ZSBpcyByZXR1cm5lZCBhbmQgfGxp
bmV8IGlzIHNldCB0byB0aGUgbGluZSB0aGF0IHdhcworICAgIC8vIHJlYWQuIElmIG5vIGxpbmUg
Y291bGQgYmUgcmVhZCBmYWxzZSBpcyByZXR1cm5lZC4KKyAgICBib29sIGdldExpbmUoU3RyaW5n
JiBsaW5lKTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBFT1MgaGFzIGJlZW4gcmVhY2hlZCBw
cm9wZXIuCiAgICAgYm9vbCBpc0F0RW5kT2ZTdHJlYW0oKSBjb25zdCB7IHJldHVybiBtX2VuZE9m
U3RyZWFtICYmIG1fYnVmZmVyLmlzRW1wdHkoKTsgfQogCi0gICAgc3RkOjpvcHRpb25hbDxTdHJp
bmc+IG5leHRMaW5lKCk7CisgICAgdm9pZCByZXNldCgpIHsgbV9idWZmZXIuY2xlYXIoKTsgfQog
CiBwcml2YXRlOgorICAgIC8vIENvbnN1bWUgdGhlIG5leHQgY2hhcmFjdGVyIHRoZSBidWZmZXIg
aWYgaXQgaXMgdGhlIGNoYXJhY3RlciB8Y3wuCisgICAgdm9pZCBzY2FuQ2hhcmFjdGVyKFVDaGFy
IGMpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fYnVmZmVyLmlzRW1wdHkoKSk7CisgICAgICAg
IGlmIChtX2J1ZmZlci5jdXJyZW50Q2hhcigpID09IGMpCisgICAgICAgICAgICBtX2J1ZmZlci5h
ZHZhbmNlKCk7CisgICAgfQorCiAgICAgU2VnbWVudGVkU3RyaW5nIG1fYnVmZmVyOwogICAgIFN0
cmluZ0J1aWxkZXIgbV9saW5lQnVmZmVyOwotICAgIGJvb2wgbV9lbmRPZlN0cmVhbSB7IGZhbHNl
IH07Ci0gICAgYm9vbCBtX21heWJlU2tpcExGIHsgZmFsc2UgfTsKKyAgICBib29sIG1fZW5kT2ZT
dHJlYW07CisgICAgYm9vbCBtX21heWJlU2tpcExGOwogfTsKIAotaW5saW5lIHZvaWQgQnVmZmVy
ZWRMaW5lUmVhZGVyOjpyZXNldCgpCi17Ci0gICAgbV9idWZmZXIuY2xlYXIoKTsKLSAgICBtX2xp
bmVCdWZmZXIuY2xlYXIoKTsKLSAgICBtX2VuZE9mU3RyZWFtID0gZmFsc2U7Ci0gICAgbV9tYXli
ZVNraXBMRiA9IGZhbHNlOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZEdlbmVyaWNUZXh0VHJhY2suY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRHZW5lcmljVGV4dFRyYWNrLmNwcAppbmRl
eCAwOTFhNWQyYjE4NTI2MGI1OGY2OGUyZmJjZjg5Yjg3NmM3NTY1YzJlLi4xYjg0NDY2Yjk2ZThh
OGIzZTRkMGM5ZDlkM2ZlZWQ5ZWY4MjEwOTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL0luYmFuZEdlbmVyaWNUZXh0VHJhY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svSW5iYW5kR2VuZXJpY1RleHRUcmFjay5jcHAKQEAgLTE4NSwxMCArMTg1LDEw
IEBAIHZvaWQgSW5iYW5kR2VuZXJpY1RleHRUcmFjazo6cGFyc2VXZWJWVFRDdWVEYXRhKEluYmFu
ZFRleHRUcmFja1ByaXZhdGUqIHRyYWNrUHJpCiAgICAgcGFyc2VyKCkucGFyc2VDdWVEYXRhKGN1
ZURhdGEpOwogfQogCi12b2lkIEluYmFuZEdlbmVyaWNUZXh0VHJhY2s6OnBhcnNlV2ViVlRURmls
ZUhlYWRlcihJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiB0cmFja1ByaXZhdGUsIFN0cmluZyYmIGhl
YWRlcikKK3ZvaWQgSW5iYW5kR2VuZXJpY1RleHRUcmFjazo6cGFyc2VXZWJWVFRGaWxlSGVhZGVy
KEluYmFuZFRleHRUcmFja1ByaXZhdGUqIHRyYWNrUHJpdmF0ZSwgU3RyaW5nIGhlYWRlcikKIHsK
ICAgICBBU1NFUlRfVU5VU0VEKHRyYWNrUHJpdmF0ZSwgdHJhY2tQcml2YXRlID09IG1fcHJpdmF0
ZSk7Ci0gICAgcGFyc2VyKCkucGFyc2VGaWxlSGVhZGVyKFdURk1vdmUoaGVhZGVyKSk7CisgICAg
cGFyc2VyKCkucGFyc2VGaWxlSGVhZGVyKGhlYWRlcik7CiB9CiAKIHZvaWQgSW5iYW5kR2VuZXJp
Y1RleHRUcmFjazo6bmV3Q3Vlc1BhcnNlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL0luYmFuZEdlbmVyaWNUZXh0VHJhY2suaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svSW5iYW5kR2VuZXJpY1RleHRUcmFjay5oCmluZGV4IDFjMzQ4YjJkYTU1MTAzZWJiZmNh
ODc4ZDQwYjdmOTA3ODliZDQ0NjMuLjRmMzAyYzY3ZTNiODM3YmY1MGUzZTlkYjhiZWQ3MDRkMzZl
ODZkYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kR2VuZXJp
Y1RleHRUcmFjay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kR2VuZXJp
Y1RleHRUcmFjay5oCkBAIC03Miw3ICs3Miw3IEBAIHByaXZhdGU6CiAKICAgICBXZWJWVFRQYXJz
ZXImIHBhcnNlcigpOwogICAgIHZvaWQgcGFyc2VXZWJWVFRDdWVEYXRhKEluYmFuZFRleHRUcmFj
a1ByaXZhdGUqLCBjb25zdCBJU09XZWJWVFRDdWUmKSBmaW5hbDsKLSAgICB2b2lkIHBhcnNlV2Vi
VlRURmlsZUhlYWRlcihJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgU3RyaW5nJiYpIGZpbmFsOwor
ICAgIHZvaWQgcGFyc2VXZWJWVFRGaWxlSGVhZGVyKEluYmFuZFRleHRUcmFja1ByaXZhdGUqLCBT
dHJpbmcpIGZpbmFsOwogCiAgICAgdm9pZCBuZXdDdWVzUGFyc2VkKCkgZmluYWw7CiAgICAgdm9p
ZCBuZXdSZWdpb25zUGFyc2VkKCkgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9J
bmJhbmRUZXh0VHJhY2suaAppbmRleCA5Y2QwMjdjMzZjODViMGFhNTE1NjdlZTY5NmUxMjY2ZDA4
NDVmMzNlLi5lNWY4ZDJiNmQxYmZkODU2M2FhZjM2M2Y5ZmFlYzFlZTg4Mzk3OTgyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmgKQEAgLTc5LDcgKzc5LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZUdlbmVyaWNDdWUoSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZSosIEdlbmVyaWNDdWVEYXRhKikgb3ZlcnJpZGUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQogICAgIHZvaWQgcmVtb3ZlR2VuZXJpY0N1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgR2Vu
ZXJpY0N1ZURhdGEqKSBvdmVycmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKLSAgICB2
b2lkIHBhcnNlV2ViVlRURmlsZUhlYWRlcihJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgU3RyaW5n
JiYpIG92ZXJyaWRlIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2b2lkIHBhcnNlV2Vi
VlRURmlsZUhlYWRlcihJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgU3RyaW5nKSBvdmVycmlkZSB7
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdm9pZCBwYXJzZVdlYlZUVEN1ZURhdGEoSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZSosIGNvbnN0IGNoYXIqLCB1bnNpZ25lZCkgb3ZlcnJpZGUgeyBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZvaWQgcGFyc2VXZWJWVFRDdWVEYXRhKEluYmFu
ZFRleHRUcmFja1ByaXZhdGUqLCBjb25zdCBJU09XZWJWVFRDdWUmKSBvdmVycmlkZSB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svV2ViVlRUUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUUGFy
c2VyLmNwcAppbmRleCA2NDYxMTAxODA3MDExZjE3Y2VlMGVmODY5Yzc4YzQzZGE5OWY2NDc1Li4z
Zjc4NWY4ZjM4NjlkMmYzMTM5MzNjMjc0MjUyZDExMzFkNTFmMGYyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuY3BwCkBAIC0xMDQsMjMgKzEwNCwyNCBAQCB2b2lk
IFdlYlZUVFBhcnNlcjo6Z2V0TmV3UmVnaW9ucyhWZWN0b3I8UmVmUHRyPFZUVFJlZ2lvbj4+JiBv
dXRwdXRSZWdpb25zKQogICAgIG1fcmVnaW9uTGlzdC5jbGVhcigpOwogfQogCi12b2lkIFdlYlZU
VFBhcnNlcjo6cGFyc2VGaWxlSGVhZGVyKFN0cmluZyYmIGRhdGEpCit2b2lkIFdlYlZUVFBhcnNl
cjo6cGFyc2VGaWxlSGVhZGVyKGNvbnN0IFN0cmluZyYgZGF0YSkKIHsKICAgICBtX3N0YXRlID0g
SW5pdGlhbDsKICAgICBtX2xpbmVSZWFkZXIucmVzZXQoKTsKLSAgICBtX2xpbmVSZWFkZXIuYXBw
ZW5kKFdURk1vdmUoZGF0YSkpOworICAgIG1fbGluZVJlYWRlci5hcHBlbmQoZGF0YSk7CiAgICAg
cGFyc2UoKTsKIH0KIAogdm9pZCBXZWJWVFRQYXJzZXI6OnBhcnNlQnl0ZXMoY29uc3QgY2hhciog
ZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIG1fbGluZVJlYWRlci5hcHBlbmQobV9kZWNv
ZGVyLT5kZWNvZGUoZGF0YSwgbGVuZ3RoKSk7CisgICAgU3RyaW5nIHRleHREYXRhID0gbV9kZWNv
ZGVyLT5kZWNvZGUoZGF0YSwgbGVuZ3RoKTsKKyAgICBtX2xpbmVSZWFkZXIuYXBwZW5kKHRleHRE
YXRhKTsKICAgICBwYXJzZSgpOwogfQogCiB2b2lkIFdlYlZUVFBhcnNlcjo6cGFyc2VDdWVEYXRh
KGNvbnN0IElTT1dlYlZUVEN1ZSYgZGF0YSkKIHsKLSAgICBhdXRvIGN1ZSA9IFdlYlZUVEN1ZURh
dGE6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxXZWJWVFRDdWVEYXRhPiBjdWUgPSBXZWJWVFRDdWVE
YXRhOjpjcmVhdGUoKTsKIAogICAgIE1lZGlhVGltZSBzdGFydFRpbWUgPSBkYXRhLnByZXNlbnRh
dGlvblRpbWUoKTsKICAgICBjdWUtPnNldFN0YXJ0VGltZShzdGFydFRpbWUpOwpAQCAtMTM0LDE1
ICsxMzUsMTYgQEAgdm9pZCBXZWJWVFRQYXJzZXI6OnBhcnNlQ3VlRGF0YShjb25zdCBJU09XZWJW
VFRDdWUmIGRhdGEpCiAgICAgaWYgKFdlYlZUVFBhcnNlcjo6Y29sbGVjdFRpbWVTdGFtcChkYXRh
Lm9yaWdpbmFsU3RhcnRUaW1lKCksIG9yaWdpbmFsU3RhcnRUaW1lKSkKICAgICAgICAgY3VlLT5z
ZXRPcmlnaW5hbFN0YXJ0VGltZShvcmlnaW5hbFN0YXJ0VGltZSk7CiAKLSAgICBtX2N1ZWxpc3Qu
YXBwZW5kKFdURk1vdmUoY3VlKSk7CisgICAgbV9jdWVsaXN0LmFwcGVuZChjdWUpOwogICAgIGlm
IChtX2NsaWVudCkKICAgICAgICAgbV9jbGllbnQtPm5ld0N1ZXNQYXJzZWQoKTsKIH0KIAogdm9p
ZCBXZWJWVFRQYXJzZXI6OmZsdXNoKCkKIHsKLSAgICBtX2xpbmVSZWFkZXIuYXBwZW5kKG1fZGVj
b2Rlci0+Zmx1c2goKSk7Ci0gICAgbV9saW5lUmVhZGVyLmFwcGVuZEVuZE9mU3RyZWFtKCk7Cisg
ICAgU3RyaW5nIHRleHREYXRhID0gbV9kZWNvZGVyLT5mbHVzaCgpOworICAgIG1fbGluZVJlYWRl
ci5hcHBlbmQodGV4dERhdGEpOworICAgIG1fbGluZVJlYWRlci5zZXRFbmRPZlN0cmVhbSgpOwog
ICAgIHBhcnNlKCk7CiAgICAgZmx1c2hQZW5kaW5nQ3VlKCk7CiB9CkBAIC0xNTEsMTEgKzE1Mywx
NSBAQCB2b2lkIFdlYlZUVFBhcnNlcjo6cGFyc2UoKQogeyAgICAKICAgICAvLyBXZWJWVFQgcGFy
c2VyIGFsZ29yaXRobS4gKDUuMSBXZWJWVFQgZmlsZSBwYXJzaW5nLikKICAgICAvLyBTdGVwcyAx
IC0gMyAtIEluaXRpYWwgc2V0dXAuCi0gICAgd2hpbGUgKGF1dG8gbGluZSA9IG1fbGluZVJlYWRl
ci5uZXh0TGluZSgpKSB7CisgICAgU3RyaW5nIGxpbmU7CisgICAgd2hpbGUgKG1fbGluZVJlYWRl
ci5nZXRMaW5lKGxpbmUpKSB7CisgICAgICAgIGlmIChsaW5lLmlzTnVsbCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCiAgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkgewogICAgICAgICBjYXNlIElu
aXRpYWw6CiAgICAgICAgICAgICAvLyBTdGVwcyA0IC0gOSAtIENoZWNrIGZvciBhIHZhbGlkIFdl
YlZUVCBzaWduYXR1cmUuCi0gICAgICAgICAgICBpZiAoIWhhc1JlcXVpcmVkRmlsZUlkZW50aWZp
ZXIoKmxpbmUpKSB7CisgICAgICAgICAgICBpZiAoIWhhc1JlcXVpcmVkRmlsZUlkZW50aWZpZXIo
bGluZSkpIHsKICAgICAgICAgICAgICAgICBpZiAobV9jbGllbnQpCiAgICAgICAgICAgICAgICAg
ICAgIG1fY2xpZW50LT5maWxlRmFpbGVkVG9QYXJzZSgpOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTE2NSw5ICsxNzEsOSBAQCB2b2lkIFdlYlZUVFBhcnNlcjo6cGFyc2UoKQogICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBIZWFkZXI6Ci0gICAgICAgICAgICBjb2xsZWN0
TWV0YWRhdGFIZWFkZXIoKmxpbmUpOworICAgICAgICAgICAgY29sbGVjdE1ldGFkYXRhSGVhZGVy
KGxpbmUpOwogCi0gICAgICAgICAgICBpZiAobGluZS0+aXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICBpZiAobGluZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAvLyBTdGVwcyAxMC0xNCAt
IEFsbG93IGEgaGVhZGVyIChjb21tZW50IGFyZWEpIHVuZGVyIHRoZSBXRUJWVFQgbGluZS4KICAg
ICAgICAgICAgICAgICBpZiAobV9jbGllbnQgJiYgbV9yZWdpb25MaXN0LnNpemUoKSkKICAgICAg
ICAgICAgICAgICAgICAgbV9jbGllbnQtPm5ld1JlZ2lvbnNQYXJzZWQoKTsKQEAgLTE3NSw0MyAr
MTgxLDQzIEBAIHZvaWQgV2ViVlRUUGFyc2VyOjpwYXJzZSgpCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBTdGVwIDE1IC0gQnJlYWsgb3V0IG9m
IGhlYWRlciBsb29wIGlmIHRoZSBsaW5lIGNvdWxkIGJlIGEgdGltZXN0YW1wIGxpbmUuCi0gICAg
ICAgICAgICBpZiAobGluZS0+Y29udGFpbnMoIi0tPiIpKQotICAgICAgICAgICAgICAgIG1fc3Rh
dGUgPSByZWNvdmVyQ3VlKCpsaW5lKTsKKyAgICAgICAgICAgIGlmIChsaW5lLmNvbnRhaW5zKCIt
LT4iKSkKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gcmVjb3ZlckN1ZShsaW5lKTsKIAogICAg
ICAgICAgICAgLy8gU3RlcCAxNiAtIExpbmUgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcgYW5kIGRv
ZXMgbm90IGNvbnRhaW4gIi0tPiIuCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNl
IElkOgogICAgICAgICAgICAgLy8gU3RlcHMgMTcgLSAyMCAtIEFsbG93IGFueSBudW1iZXIgb2Yg
bGluZSB0ZXJtaW5hdG9ycywgdGhlbiBpbml0aWFsaXplIG5ldyBjdWUgdmFsdWVzLgotICAgICAg
ICAgICAgaWYgKGxpbmUtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGlmIChsaW5lLmlzRW1wdHko
KSkKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgLy8gU3RlcCAyMSAtIEN1
ZSBjcmVhdGlvbiAoc3RhcnQgYSBuZXcgY3VlKS4KICAgICAgICAgICAgIHJlc2V0Q3VlVmFsdWVz
KCk7CiAKICAgICAgICAgICAgIC8vIFN0ZXBzIDIyIC0gMjUgLSBDaGVjayBpZiB0aGlzIGxpbmUg
Y29udGFpbnMgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvciB0aW1pbmcgZGF0YS4KLSAgICAgICAg
ICAgIG1fc3RhdGUgPSBjb2xsZWN0Q3VlSWQoKmxpbmUpOworICAgICAgICAgICAgbV9zdGF0ZSA9
IGNvbGxlY3RDdWVJZChsaW5lKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2Ug
VGltaW5nc0FuZFNldHRpbmdzOgogICAgICAgICAgICAgLy8gU3RlcHMgMjYgLSAyNyAtIERpc2Nh
cmQgY3VycmVudCBjdWUgaWYgdGhlIGxpbmUgaXMgZW1wdHkuCi0gICAgICAgICAgICBpZiAobGlu
ZS0+aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgICAgICBtX3N0YXRlID0gSWQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIC8vIFN0ZXBzIDI4IC0gMjkgLSBDb2xsZWN0IGN1ZSB0aW1p
bmdzIGFuZCBzZXR0aW5ncy4KLSAgICAgICAgICAgIG1fc3RhdGUgPSBjb2xsZWN0VGltaW5nc0Fu
ZFNldHRpbmdzKCpsaW5lKTsKKyAgICAgICAgICAgIG1fc3RhdGUgPSBjb2xsZWN0VGltaW5nc0Fu
ZFNldHRpbmdzKGxpbmUpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBDdWVU
ZXh0OgogICAgICAgICAgICAgLy8gU3RlcHMgMzEgLSA0MSAtIENvbGxlY3QgdGhlIGN1ZSB0ZXh0
LCBjcmVhdGUgYSBjdWUsIGFuZCBhZGQgaXQgdG8gdGhlIG91dHB1dC4KLSAgICAgICAgICAgIG1f
c3RhdGUgPSBjb2xsZWN0Q3VlVGV4dCgqbGluZSk7CisgICAgICAgICAgICBtX3N0YXRlID0gY29s
bGVjdEN1ZVRleHQobGluZSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEJh
ZEN1ZToKICAgICAgICAgICAgIC8vIFN0ZXBzIDQyIC0gNDggLSBEaXNjYXJkIGxpbmVzIHVudGls
IGFuIGVtcHR5IGxpbmUgb3IgYSBwb3RlbnRpYWwgdGltaW5nIGxpbmUgaXMgc2Vlbi4KLSAgICAg
ICAgICAgIG1fc3RhdGUgPSBpZ25vcmVCYWRDdWUoKmxpbmUpOworICAgICAgICAgICAgbV9zdGF0
ZSA9IGlnbm9yZUJhZEN1ZShsaW5lKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNh
c2UgRmluaXNoZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZU
VFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuaAppbmRl
eCA2OWFjMDU1MmFlYzU3YTIzMzAwY2E5YmE0MTgwZjFiNjg5NmEwNGUxLi43MzRlMjA0MGRhYWE0
OTlmOTViN2Y5YTBhNWM5OTVmN2Y1ZjRkNTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1dlYlZUVFBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
V2ViVlRUUGFyc2VyLmgKQEAgLTEzMyw3ICsxMzMsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBJbnB1
dCBkYXRhIHRvIHRoZSBwYXJzZXIgdG8gcGFyc2UuCiAgICAgdm9pZCBwYXJzZUJ5dGVzKGNvbnN0
IGNoYXIqLCB1bnNpZ25lZCk7Ci0gICAgdm9pZCBwYXJzZUZpbGVIZWFkZXIoU3RyaW5nJiYpOwor
ICAgIHZvaWQgcGFyc2VGaWxlSGVhZGVyKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgcGFyc2VD
dWVEYXRhKGNvbnN0IElTT1dlYlZUVEN1ZSYpOwogICAgIHZvaWQgZmx1c2goKTsKICAgICB2b2lk
IGZpbGVGaW5pc2hlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9X
ZWJWVFRUb2tlbml6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRUb2tl
bml6ZXIuY3BwCmluZGV4IDAyNGMwNGEwOTZjOGEzMzE3MDI3NTFlN2VkMWYzYzNjNzdkODAxY2Uu
LjBjYjE5ZTg1ZjUzNWViNjE2MGQ4Y2IzM2RhZGJiOGExNzU3OTJhMWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUVG9rZW5pemVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFRva2VuaXplci5jcHAKQEAgLTMwLDEwICszMCwxMSBA
QAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJWVFRUb2tlbml6ZXIu
aCIKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKIAorI2luY2x1ZGUgIldlYlZUVFRva2VuaXpl
ci5oIgorCiAjaW5jbHVkZSAiTWFya3VwVG9rZW5pemVySW5saW5lcy5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJO
YW1lcy5oPgpAQCAtNDcsNyArNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGNo
YXJhY3RlciA9IG1fcHJlcHJvY2Vzc29yLm5leHRJbnB1dENoYXJhY3RlcigpOyAgICBcCiAgICAg
ICAgIGdvdG8gc3RhdGVOYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CiAgICAgfSB3aGlsZSAoZmFsc2UpCi0KKyAgICAKIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3Rl
cnNDb3VudD4gQUxXQVlTX0lOTElORSBib29sIGVxdWFsTGl0ZXJhbChjb25zdCBTdHJpbmdCdWls
ZGVyJiBzLCBjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFjdGVyc0NvdW50XSkKIHsKICAg
ICByZXR1cm4gV1RGOjplcXVhbChzLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oY2hh
cmFjdGVycyksIGNoYXJhY3RlcnNDb3VudCAtIDEpOwpAQCAtNjgsNyArNjksNyBAQCBpbmxpbmUg
Ym9vbCBlbWl0VG9rZW4oV2ViVlRUVG9rZW4mIHJlc3VsdFRva2VuLCBjb25zdCBXZWJWVFRUb2tl
biYgdG9rZW4pCiAKIGlubGluZSBib29sIGFkdmFuY2VBbmRFbWl0VG9rZW4oU2VnbWVudGVkU3Ry
aW5nJiBzb3VyY2UsIFdlYlZUVFRva2VuJiByZXN1bHRUb2tlbiwgY29uc3QgV2ViVlRUVG9rZW4m
IHRva2VuKQogewotICAgIHNvdXJjZS5hZHZhbmNlKCk7CisgICAgc291cmNlLmFkdmFuY2VBbmRV
cGRhdGVMaW5lTnVtYmVyKCk7CiAgICAgcmV0dXJuIGVtaXRUb2tlbihyZXN1bHRUb2tlbiwgdG9r
ZW4pOwogfQogCkBAIC03OCw3ICs3OSw3IEBAIFdlYlZUVFRva2VuaXplcjo6V2ViVlRUVG9rZW5p
emVyKGNvbnN0IFN0cmluZyYgaW5wdXQpCiB7CiAgICAgLy8gQXBwZW5kIGFuIEVPRiBtYXJrZXIg
YW5kIGNsb3NlIHRoZSBpbnB1dCAic3RyZWFtIi4KICAgICBBU1NFUlQoIW1faW5wdXQuaXNDbG9z
ZWQoKSk7Ci0gICAgbV9pbnB1dC5hcHBlbmQoU3RyaW5nIHsgJmtFbmRPZkZpbGVNYXJrZXIsIDEg
fSk7CisgICAgbV9pbnB1dC5hcHBlbmQoU2VnbWVudGVkU3RyaW5nKFN0cmluZygma0VuZE9mRmls
ZU1hcmtlciwgMSkpKTsKICAgICBtX2lucHV0LmNsb3NlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0luYmFuZFRleHRUcmFja1ByaXZhdGVDbGll
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0luYmFuZFRleHRUcmFja1By
aXZhdGVDbGllbnQuaAppbmRleCA3NjBmNjc5ZDEzNTBhNzE5MDA0NDcwYTdjYjdhNzQxN2E4YmM0
OTE1Li5iZTI1MmU0YmMzNWU2NDgwNTc0NmY1NzIxMzBkZTI0M2Y5YzQyYTc3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbmJhbmRUZXh0VHJhY2tQcml2YXRl
Q2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUNsaWVudC5oCkBAIC0xODAsNyArMTgwLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVHZW5lcmljQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqLCBHZW5l
cmljQ3VlRGF0YSopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlR2VuZXJpY0N1ZShJbmJh
bmRUZXh0VHJhY2tQcml2YXRlKiwgR2VuZXJpY0N1ZURhdGEqKSA9IDA7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VXZWJWVFRGaWxlSGVhZGVyKEluYmFuZFRleHRUcmFja1ByaXZhdGUqLCBTdHJp
bmcmJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBwYXJzZVdl
YlZUVEZpbGVIZWFkZXIoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIFN0cmluZykgeyBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBwYXJzZVdlYlZUVEN1ZURhdGEoSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZSosIGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZVdlYlZUVEN1ZURhdGEoSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZSosIGNvbnN0IElTT1dlYlZUVEN1ZSYpID0gMDsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHAKaW5kZXggZmYzMWIyYWRiNWE4
YjU0MDJiOWQxZjljOTRjNmRkYjU5MzE1ODA0Yi4uNDkxZDE2Y2NkNWMxM2MyMmY4MDFmYzA3NTk0
YmFlMGNlZWI0OGE1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9T
ZWdtZW50ZWRTdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2Vn
bWVudGVkU3RyaW5nLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gICAgQ29weXJpZ2h0IChDKSAy
MDA0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDIwNCArMjAsMzMyIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgiCiAKLSNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9u
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotaW5saW5lIHZvaWQgU2VnbWVudGVkU3RyaW5n
OjpTdWJzdHJpbmc6OmFwcGVuZFRvKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CitTZWdt
ZW50ZWRTdHJpbmc6OlNlZ21lbnRlZFN0cmluZyhjb25zdCBTZWdtZW50ZWRTdHJpbmcmIG90aGVy
KQorICAgIDogbV9wdXNoZWRDaGFyMShvdGhlci5tX3B1c2hlZENoYXIxKQorICAgICwgbV9wdXNo
ZWRDaGFyMihvdGhlci5tX3B1c2hlZENoYXIyKQorICAgICwgbV9jdXJyZW50U3RyaW5nKG90aGVy
Lm1fY3VycmVudFN0cmluZykKKyAgICAsIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlv
clRvQ3VycmVudFN0cmluZyhvdGhlci5tX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JU
b0N1cnJlbnRTdHJpbmcpCisgICAgLCBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JU
b0N1cnJlbnRMaW5lKG90aGVyLm1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3Vy
cmVudExpbmUpCisgICAgLCBtX2N1cnJlbnRMaW5lKG90aGVyLm1fY3VycmVudExpbmUpCisgICAg
LCBtX3N1YnN0cmluZ3Mob3RoZXIubV9zdWJzdHJpbmdzKQorICAgICwgbV9jbG9zZWQob3RoZXIu
bV9jbG9zZWQpCisgICAgLCBtX2VtcHR5KG90aGVyLm1fZW1wdHkpCisgICAgLCBtX2Zhc3RQYXRo
RmxhZ3Mob3RoZXIubV9mYXN0UGF0aEZsYWdzKQorICAgICwgbV9hZHZhbmNlRnVuYyhvdGhlci5t
X2FkdmFuY2VGdW5jKQorICAgICwgbV9hZHZhbmNlQW5kVXBkYXRlTGluZU51bWJlckZ1bmMob3Ro
ZXIubV9hZHZhbmNlQW5kVXBkYXRlTGluZU51bWJlckZ1bmMpCiB7Ci0gICAgYnVpbGRlci5hcHBl
bmQoc3RyaW5nLCBzdHJpbmcubGVuZ3RoKCkgLSBsZW5ndGgsIGxlbmd0aCk7CisgICAgaWYgKG1f
cHVzaGVkQ2hhcjIpCisgICAgICAgIG1fY3VycmVudENoYXIgPSBtX3B1c2hlZENoYXIyOworICAg
IGVsc2UgaWYgKG1fcHVzaGVkQ2hhcjEpCisgICAgICAgIG1fY3VycmVudENoYXIgPSBtX3B1c2hl
ZENoYXIxOworICAgIGVsc2UKKyAgICAgICAgbV9jdXJyZW50Q2hhciA9IG1fY3VycmVudFN0cmlu
Zy5tX2xlbmd0aCA/IG1fY3VycmVudFN0cmluZy5nZXRDdXJyZW50Q2hhcigpIDogMDsKIH0KIAot
U2VnbWVudGVkU3RyaW5nJiBTZWdtZW50ZWRTdHJpbmc6Om9wZXJhdG9yPShTZWdtZW50ZWRTdHJp
bmcmJiBvdGhlcikKK1NlZ21lbnRlZFN0cmluZyYgU2VnbWVudGVkU3RyaW5nOjpvcGVyYXRvcj0o
Y29uc3QgU2VnbWVudGVkU3RyaW5nJiBvdGhlcikKIHsKLSAgICBtX2N1cnJlbnRTdWJzdHJpbmcg
PSBXVEZNb3ZlKG90aGVyLm1fY3VycmVudFN1YnN0cmluZyk7Ci0gICAgbV9vdGhlclN1YnN0cmlu
Z3MgPSBXVEZNb3ZlKG90aGVyLm1fb3RoZXJTdWJzdHJpbmdzKTsKLQotICAgIG1faXNDbG9zZWQg
PSBvdGhlci5tX2lzQ2xvc2VkOwotCi0gICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gb3RoZXIubV9j
dXJyZW50Q2hhcmFjdGVyOworICAgIG1fcHVzaGVkQ2hhcjEgPSBvdGhlci5tX3B1c2hlZENoYXIx
OworICAgIG1fcHVzaGVkQ2hhcjIgPSBvdGhlci5tX3B1c2hlZENoYXIyOworICAgIG1fY3VycmVu
dFN0cmluZyA9IG90aGVyLm1fY3VycmVudFN0cmluZzsKKyAgICBtX3N1YnN0cmluZ3MgPSBvdGhl
ci5tX3N1YnN0cmluZ3M7CisgICAgaWYgKG1fcHVzaGVkQ2hhcjIpCisgICAgICAgIG1fY3VycmVu
dENoYXIgPSBtX3B1c2hlZENoYXIyOworICAgIGVsc2UgaWYgKG1fcHVzaGVkQ2hhcjEpCisgICAg
ICAgIG1fY3VycmVudENoYXIgPSBtX3B1c2hlZENoYXIxOworICAgIGVsc2UKKyAgICAgICAgbV9j
dXJyZW50Q2hhciA9IG1fY3VycmVudFN0cmluZy5tX2xlbmd0aCA/IG1fY3VycmVudFN0cmluZy5n
ZXRDdXJyZW50Q2hhcigpIDogMDsKIAotICAgIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQ
cmlvclRvQ3VycmVudFN1YnN0cmluZyA9IG90aGVyLm1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3Vt
ZWRQcmlvclRvQ3VycmVudFN1YnN0cmluZzsKKyAgICBtX2Nsb3NlZCA9IG90aGVyLm1fY2xvc2Vk
OworICAgIG1fZW1wdHkgPSBvdGhlci5tX2VtcHR5OworICAgIG1fZmFzdFBhdGhGbGFncyA9IG90
aGVyLm1fZmFzdFBhdGhGbGFnczsKKyAgICBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJp
b3JUb0N1cnJlbnRTdHJpbmcgPSBvdGhlci5tX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJp
b3JUb0N1cnJlbnRTdHJpbmc7CiAgICAgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9y
VG9DdXJyZW50TGluZSA9IG90aGVyLm1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRv
Q3VycmVudExpbmU7CiAgICAgbV9jdXJyZW50TGluZSA9IG90aGVyLm1fY3VycmVudExpbmU7CiAK
LSAgICBtX2Zhc3RQYXRoRmxhZ3MgPSBvdGhlci5tX2Zhc3RQYXRoRmxhZ3M7Ci0gICAgbV9hZHZh
bmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJlckZ1bmN0aW9uID0gb3RoZXIubV9hZHZhbmNlV2l0
aG91dFVwZGF0aW5nTGluZU51bWJlckZ1bmN0aW9uOwotICAgIG1fYWR2YW5jZUFuZFVwZGF0ZUxp
bmVOdW1iZXJGdW5jdGlvbiA9IG90aGVyLm1fYWR2YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5j
dGlvbjsKLQotICAgIG90aGVyLmNsZWFyKCk7CisgICAgbV9hZHZhbmNlRnVuYyA9IG90aGVyLm1f
YWR2YW5jZUZ1bmM7CisgICAgbV9hZHZhbmNlQW5kVXBkYXRlTGluZU51bWJlckZ1bmMgPSBvdGhl
ci5tX2FkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyRnVuYzsKIAogICAgIHJldHVybiAqdGhpczsK
IH0KIAogdW5zaWduZWQgU2VnbWVudGVkU3RyaW5nOjpsZW5ndGgoKSBjb25zdAogewotICAgIHVu
c2lnbmVkIGxlbmd0aCA9IG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGg7Ci0gICAgZm9yIChhdXRv
JiBzdWJzdHJpbmcgOiBtX290aGVyU3Vic3RyaW5ncykKLSAgICAgICAgbGVuZ3RoICs9IHN1YnN0
cmluZy5sZW5ndGg7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9jdXJyZW50U3RyaW5nLm1fbGVu
Z3RoOworICAgIGlmIChtX3B1c2hlZENoYXIxKSB7CisgICAgICAgICsrbGVuZ3RoOworICAgICAg
ICBpZiAobV9wdXNoZWRDaGFyMikKKyAgICAgICAgICAgICsrbGVuZ3RoOworICAgIH0KKyAgICBp
ZiAoaXNDb21wb3NpdGUoKSkgeworICAgICAgICBEZXF1ZTxTZWdtZW50ZWRTdWJzdHJpbmc+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fc3Vic3RyaW5ncy5iZWdpbigpOworICAgICAgICBEZXF1ZTxT
ZWdtZW50ZWRTdWJzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlID0gbV9zdWJzdHJpbmdzLmVuZCgp
OworICAgICAgICBmb3IgKDsgaXQgIT0gZTsgKytpdCkKKyAgICAgICAgICAgIGxlbmd0aCArPSBp
dC0+bV9sZW5ndGg7CisgICAgfQogICAgIHJldHVybiBsZW5ndGg7CiB9CiAKIHZvaWQgU2VnbWVu
dGVkU3RyaW5nOjpzZXRFeGNsdWRlTGluZU51bWJlcnMoKQogewotICAgIGlmICghbV9jdXJyZW50
U3Vic3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzKQotICAgICAgICByZXR1cm47Ci0gICAg
bV9jdXJyZW50U3Vic3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzID0gZmFsc2U7Ci0gICAg
Zm9yIChhdXRvJiBzdWJzdHJpbmcgOiBtX290aGVyU3Vic3RyaW5ncykKLSAgICAgICAgc3Vic3Ry
aW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzID0gZmFsc2U7Ci0gICAgdXBkYXRlQWR2YW5jZUZ1
bmN0aW9uUG9pbnRlcnMoKTsKKyAgICBtX2N1cnJlbnRTdHJpbmcuc2V0RXhjbHVkZUxpbmVOdW1i
ZXJzKCk7CisgICAgaWYgKGlzQ29tcG9zaXRlKCkpIHsKKyAgICAgICAgRGVxdWU8U2VnbWVudGVk
U3Vic3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBtX3N1YnN0cmluZ3MuYmVnaW4oKTsKKyAgICAgICAg
RGVxdWU8U2VnbWVudGVkU3Vic3RyaW5nPjo6aXRlcmF0b3IgZSA9IG1fc3Vic3RyaW5ncy5lbmQo
KTsKKyAgICAgICAgZm9yICg7IGl0ICE9IGU7ICsraXQpCisgICAgICAgICAgICBpdC0+c2V0RXhj
bHVkZUxpbmVOdW1iZXJzKCk7CisgICAgfQogfQogCiB2b2lkIFNlZ21lbnRlZFN0cmluZzo6Y2xl
YXIoKQogewotICAgIG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggPSAwOwotICAgIG1fb3RoZXJT
dWJzdHJpbmdzLmNsZWFyKCk7Ci0KLSAgICBtX2lzQ2xvc2VkID0gZmFsc2U7Ci0KLSAgICBtX2N1
cnJlbnRDaGFyYWN0ZXIgPSAwOwotCi0gICAgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFBy
aW9yVG9DdXJyZW50U3Vic3RyaW5nID0gMDsKKyAgICBtX3B1c2hlZENoYXIxID0gMDsKKyAgICBt
X3B1c2hlZENoYXIyID0gMDsKKyAgICBtX2N1cnJlbnRDaGFyID0gMDsKKyAgICBtX2N1cnJlbnRT
dHJpbmcuY2xlYXIoKTsKKyAgICBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1
cnJlbnRTdHJpbmcgPSAwOwogICAgIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRv
Q3VycmVudExpbmUgPSAwOwogICAgIG1fY3VycmVudExpbmUgPSAwOworICAgIG1fc3Vic3RyaW5n
cy5jbGVhcigpOworICAgIG1fY2xvc2VkID0gZmFsc2U7CisgICAgbV9lbXB0eSA9IHRydWU7Cisg
ICAgbV9mYXN0UGF0aEZsYWdzID0gTm9GYXN0UGF0aDsKKyAgICBtX2FkdmFuY2VGdW5jID0gJlNl
Z21lbnRlZFN0cmluZzo6YWR2YW5jZUVtcHR5OworICAgIG1fYWR2YW5jZUFuZFVwZGF0ZUxpbmVO
dW1iZXJGdW5jID0gJlNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZUVtcHR5OworfQogCi0gICAgdXBk
YXRlQWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnNGb3JFbXB0eVN0cmluZygpOwordm9pZCBTZWdtZW50
ZWRTdHJpbmc6OmFwcGVuZChjb25zdCBTZWdtZW50ZWRTdWJzdHJpbmcmIHMpCit7CisgICAgQVNT
RVJUKCFtX2Nsb3NlZCk7CisgICAgaWYgKCFzLm1fbGVuZ3RoKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIW1fY3VycmVudFN0cmluZy5tX2xlbmd0aCkgeworICAgICAgICBtX251bWJlck9m
Q2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRTdHJpbmcgKz0gbV9jdXJyZW50U3RyaW5n
Lm51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCk7CisgICAgICAgIG1fY3VycmVudFN0cmluZyA9
IHM7CisgICAgICAgIHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzKCk7CisgICAgfSBlbHNl
CisgICAgICAgIG1fc3Vic3RyaW5ncy5hcHBlbmQocyk7CisgICAgbV9lbXB0eSA9IGZhbHNlOwog
fQogCi1pbmxpbmUgdm9pZCBTZWdtZW50ZWRTdHJpbmc6OmFwcGVuZFN1YnN0cmluZyhTdWJzdHJp
bmcmJiBzdWJzdHJpbmcpCit2b2lkIFNlZ21lbnRlZFN0cmluZzo6cHVzaEJhY2soY29uc3QgU2Vn
bWVudGVkU3Vic3RyaW5nJiBzKQogewotICAgIEFTU0VSVCghbV9pc0Nsb3NlZCk7Ci0gICAgaWYg
KCFzdWJzdHJpbmcubGVuZ3RoKQorICAgIEFTU0VSVCghbV9wdXNoZWRDaGFyMSk7CisgICAgQVNT
RVJUKCFzLm51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCkpOworICAgIGlmICghcy5tX2xlbmd0
aCkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoKQot
ICAgICAgICBtX290aGVyU3Vic3RyaW5ncy5hcHBlbmQoV1RGTW92ZShzdWJzdHJpbmcpKTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJy
ZW50U3Vic3RyaW5nICs9IG1fY3VycmVudFN1YnN0cmluZy5udW1iZXJPZkNoYXJhY3RlcnNDb25z
dW1lZCgpOwotICAgICAgICBtX2N1cnJlbnRTdWJzdHJpbmcgPSBXVEZNb3ZlKHN1YnN0cmluZyk7
Ci0gICAgICAgIG1fY3VycmVudENoYXJhY3RlciA9IG1fY3VycmVudFN1YnN0cmluZy5jdXJyZW50
Q2hhcmFjdGVyKCk7CisKKyAgICAvLyBGSVhNRTogV2UncmUgYXNzdW1pbmcgdGhhdCB0aGUgY2hh
cmFjdGVycyB3ZXJlIG9yaWdpbmFsbHkgY29uc3VtZWQgYnkKKyAgICAvLyAgICAgICAgdGhpcyBT
ZWdtZW50ZWRTdHJpbmcuICBXZSdyZSBhbHNvIEFTU0VSVGluZyB0aGF0IHMgaXMgYSBmcmVzaAor
ICAgIC8vICAgICAgICBTZWdtZW50ZWRTdWJzdHJpbmcuICBUaGVzZSBhc3N1bXB0aW9ucyBhcmUg
c3VmZmljaWVudCBmb3Igb3VyCisgICAgLy8gICAgICAgIGN1cnJlbnQgdXNlLCBidXQgd2UgbWln
aHQgbmVlZCB0byBoYW5kbGUgdGhlIG1vcmUgZWxhYm9yYXRlCisgICAgLy8gICAgICAgIGNhc2Vz
IGluIHRoZSBmdXR1cmUuCisgICAgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9D
dXJyZW50U3RyaW5nICs9IG1fY3VycmVudFN0cmluZy5udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1l
ZCgpOworICAgIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN0cmlu
ZyAtPSBzLm1fbGVuZ3RoOworICAgIGlmICghbV9jdXJyZW50U3RyaW5nLm1fbGVuZ3RoKSB7Cisg
ICAgICAgIG1fY3VycmVudFN0cmluZyA9IHM7CisgICAgICAgIHVwZGF0ZUFkdmFuY2VGdW5jdGlv
blBvaW50ZXJzKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gU2hpZnQgb3VyIG1fY3VycmVu
dFN0cmluZyBpbnRvIG91ciBsaXN0LgorICAgICAgICBtX3N1YnN0cmluZ3MucHJlcGVuZChtX2N1
cnJlbnRTdHJpbmcpOworICAgICAgICBtX2N1cnJlbnRTdHJpbmcgPSBzOwogICAgICAgICB1cGRh
dGVBZHZhbmNlRnVuY3Rpb25Qb2ludGVycygpOwogICAgIH0KKyAgICBtX2VtcHR5ID0gZmFsc2U7
CiB9CiAKLXZvaWQgU2VnbWVudGVkU3RyaW5nOjpwdXNoQmFjayhTdHJpbmcmJiBzdHJpbmcpCit2
b2lkIFNlZ21lbnRlZFN0cmluZzo6Y2xvc2UoKQogewotICAgIC8vIFdlIG5ldmVyIGNyZWF0ZSBh
IHN1YnN0cmluZyBmb3IgYW4gZW1wdHkgc3RyaW5nLgotICAgIEFTU0VSVChzdHJpbmcubGVuZ3Ro
KCkpOwotCi0gICAgLy8gVGhlIG5ldyBzdWJzdHJpbmcgd2Ugd2lsbCBjcmVhdGUgd29uJ3QgaGF2
ZSB0aGUgZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMgc2V0IGFwcHJvcHJpYXRlbHkuCi0gICAgLy8g
VGhhdCB3YXMgbG9zdCB3aGVuIHRoZSBjaGFyYWN0ZXJzIHdlcmUgY29uc3VtZWQgYmVmb3JlIHB1
c2hpbmcgdGhlbSBiYWNrLiBCdXQgdGhpcyBkb2VzCi0gICAgLy8gbm90IG1hdHRlciwgYmVjYXVz
ZSBjbGllbnRzIG5ldmVyIHVzZSB0aGlzIGZvciBuZXdsaW5lcy4gQ2F0Y2ggdGhhdCB3aXRoIHRo
aXMgYXNzZXJ0aW9uLgotICAgIEFTU0VSVCghc3RyaW5nLmNvbnRhaW5zKCdcbicpKTsKLQotICAg
IC8vIFRoZSBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgbXVzdCBiZSBwcmV2aW91c2x5IGNvbnN1
bWVkIGNoYXJhY3RlcnMgZnJvbSB0aGlzIHNlZ21lbnRlZCBzdHJpbmcuCi0gICAgQVNTRVJUKHN0
cmluZy5sZW5ndGgoKSA8PSBudW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpKTsKLQotICAgIG1f
bnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN1YnN0cmluZyArPSBtX2N1
cnJlbnRTdWJzdHJpbmcubnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKTsKLSAgICBpZiAobV9j
dXJyZW50U3Vic3RyaW5nLmxlbmd0aCkKLSAgICAgICAgbV9vdGhlclN1YnN0cmluZ3MucHJlcGVu
ZChXVEZNb3ZlKG1fY3VycmVudFN1YnN0cmluZykpOwotICAgIG1fY3VycmVudFN1YnN0cmluZyA9
IFdURk1vdmUoc3RyaW5nKTsKLSAgICBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JU
b0N1cnJlbnRTdWJzdHJpbmcgLT0gbV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0aDsKLSAgICBtX2N1
cnJlbnRDaGFyYWN0ZXIgPSBtX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3RlcigpOwot
ICAgIHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzKCk7CisgICAgLy8gQ2xvc2luZyBhIHN0
cmVhbSB0d2ljZSBpcyBsaWtlbHkgYSBjb2RpbmcgbWlzdGFrZS4KKyAgICBBU1NFUlQoIW1fY2xv
c2VkKTsKKyAgICBtX2Nsb3NlZCA9IHRydWU7CiB9CiAKLXZvaWQgU2VnbWVudGVkU3RyaW5nOjpj
bG9zZSgpCit2b2lkIFNlZ21lbnRlZFN0cmluZzo6YXBwZW5kKGNvbnN0IFNlZ21lbnRlZFN0cmlu
ZyYgcykKIHsKLSAgICBBU1NFUlQoIW1faXNDbG9zZWQpOwotICAgIG1faXNDbG9zZWQgPSB0cnVl
OworICAgIEFTU0VSVCghbV9jbG9zZWQpOworICAgIEFTU0VSVCghcy5tX3B1c2hlZENoYXIxKTsK
KyAgICBhcHBlbmQocy5tX2N1cnJlbnRTdHJpbmcpOworICAgIGlmIChzLmlzQ29tcG9zaXRlKCkp
IHsKKyAgICAgICAgRGVxdWU8U2VnbWVudGVkU3Vic3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBzLm1fc3Vic3RyaW5ncy5iZWdpbigpOworICAgICAgICBEZXF1ZTxTZWdtZW50ZWRTdWJzdHJp
bmc+Ojpjb25zdF9pdGVyYXRvciBlID0gcy5tX3N1YnN0cmluZ3MuZW5kKCk7CisgICAgICAgIGZv
ciAoOyBpdCAhPSBlOyArK2l0KQorICAgICAgICAgICAgYXBwZW5kKCppdCk7CisgICAgfQorICAg
IG1fY3VycmVudENoYXIgPSBtX3B1c2hlZENoYXIxID8gbV9wdXNoZWRDaGFyMSA6IChtX2N1cnJl
bnRTdHJpbmcubV9sZW5ndGggPyBtX2N1cnJlbnRTdHJpbmcuZ2V0Q3VycmVudENoYXIoKSA6IDAp
OwogfQogCi12b2lkIFNlZ21lbnRlZFN0cmluZzo6YXBwZW5kKGNvbnN0IFNlZ21lbnRlZFN0cmlu
ZyYgc3RyaW5nKQordm9pZCBTZWdtZW50ZWRTdHJpbmc6OnB1c2hCYWNrKGNvbnN0IFNlZ21lbnRl
ZFN0cmluZyYgcykKIHsKLSAgICBhcHBlbmRTdWJzdHJpbmcoU3Vic3RyaW5nIHsgc3RyaW5nLm1f
Y3VycmVudFN1YnN0cmluZyB9KTsKLSAgICBmb3IgKGF1dG8mIHN1YnN0cmluZyA6IHN0cmluZy5t
X290aGVyU3Vic3RyaW5ncykKLSAgICAgICAgbV9vdGhlclN1YnN0cmluZ3MuYXBwZW5kKHN1YnN0
cmluZyk7CisgICAgQVNTRVJUKCFtX3B1c2hlZENoYXIxKTsKKyAgICBBU1NFUlQoIXMubV9wdXNo
ZWRDaGFyMSk7CisgICAgaWYgKHMuaXNDb21wb3NpdGUoKSkgeworICAgICAgICBEZXF1ZTxTZWdt
ZW50ZWRTdWJzdHJpbmc+Ojpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGl0ID0gcy5tX3N1YnN0cmlu
Z3MucmJlZ2luKCk7CisgICAgICAgIERlcXVlPFNlZ21lbnRlZFN1YnN0cmluZz46OmNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3IgZSA9IHMubV9zdWJzdHJpbmdzLnJlbmQoKTsKKyAgICAgICAgZm9yICg7
IGl0ICE9IGU7ICsraXQpCisgICAgICAgICAgICBwdXNoQmFjaygqaXQpOworICAgIH0KKyAgICBw
dXNoQmFjayhzLm1fY3VycmVudFN0cmluZyk7CisgICAgbV9jdXJyZW50Q2hhciA9IG1fcHVzaGVk
Q2hhcjEgPyBtX3B1c2hlZENoYXIxIDogKG1fY3VycmVudFN0cmluZy5tX2xlbmd0aCA/IG1fY3Vy
cmVudFN0cmluZy5nZXRDdXJyZW50Q2hhcigpIDogMCk7CiB9CiAKLXZvaWQgU2VnbWVudGVkU3Ry
aW5nOjphcHBlbmQoU2VnbWVudGVkU3RyaW5nJiYgc3RyaW5nKQordm9pZCBTZWdtZW50ZWRTdHJp
bmc6OmFkdmFuY2VTdWJzdHJpbmcoKQogewotICAgIGFwcGVuZFN1YnN0cmluZyhXVEZNb3ZlKHN0
cmluZy5tX2N1cnJlbnRTdWJzdHJpbmcpKTsKLSAgICBmb3IgKGF1dG8mIHN1YnN0cmluZyA6IHN0
cmluZy5tX290aGVyU3Vic3RyaW5ncykKLSAgICAgICAgbV9vdGhlclN1YnN0cmluZ3MuYXBwZW5k
KFdURk1vdmUoc3Vic3RyaW5nKSk7CisgICAgaWYgKGlzQ29tcG9zaXRlKCkpIHsKKyAgICAgICAg
bV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50U3RyaW5nICs9IG1fY3Vy
cmVudFN0cmluZy5udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpOworICAgICAgICBtX2N1cnJl
bnRTdHJpbmcgPSBtX3N1YnN0cmluZ3MudGFrZUZpcnN0KCk7CisgICAgICAgIC8vIElmIHdlJ3Zl
IHByZXZpb3VzbHkgY29uc3VtZWQgc29tZSBjaGFyYWN0ZXJzIG9mIHRoZSBub24tY3VycmVudAor
ICAgICAgICAvLyBzdHJpbmcsIHdlIG5vdyBhY2NvdW50IGZvciB0aG9zZSBjaGFyYWN0ZXJzIGFz
IHBhcnQgb2YgdGhlIGN1cnJlbnQKKyAgICAgICAgLy8gc3RyaW5nLCBub3QgYXMgcGFydCBvZiAi
cHJpb3IgdG8gY3VycmVudCBzdHJpbmcuIgorICAgICAgICBtX251bWJlck9mQ2hhcmFjdGVyc0Nv
bnN1bWVkUHJpb3JUb0N1cnJlbnRTdHJpbmcgLT0gbV9jdXJyZW50U3RyaW5nLm51bWJlck9mQ2hh
cmFjdGVyc0NvbnN1bWVkKCk7CisgICAgICAgIHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJz
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9jdXJyZW50U3RyaW5nLmNsZWFyKCk7CisgICAg
ICAgIG1fZW1wdHkgPSB0cnVlOworICAgICAgICBtX2Zhc3RQYXRoRmxhZ3MgPSBOb0Zhc3RQYXRo
OworICAgICAgICBtX2FkdmFuY2VGdW5jID0gJlNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZUVtcHR5
OworICAgICAgICBtX2FkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyRnVuYyA9ICZTZWdtZW50ZWRT
dHJpbmc6OmFkdmFuY2VFbXB0eTsKKyAgICB9CiB9CiAKLXZvaWQgU2VnbWVudGVkU3RyaW5nOjph
cHBlbmQoU3RyaW5nJiYgc3RyaW5nKQorU3RyaW5nIFNlZ21lbnRlZFN0cmluZzo6dG9TdHJpbmco
KSBjb25zdAogewotICAgIGFwcGVuZFN1YnN0cmluZyhXVEZNb3ZlKHN0cmluZykpOworICAgIFN0
cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIGlmIChtX3B1c2hlZENoYXIxKSB7CisgICAgICAgIHJl
c3VsdC5hcHBlbmQobV9wdXNoZWRDaGFyMSk7CisgICAgICAgIGlmIChtX3B1c2hlZENoYXIyKQor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX3B1c2hlZENoYXIyKTsKKyAgICB9CisgICAgbV9j
dXJyZW50U3RyaW5nLmFwcGVuZFRvKHJlc3VsdCk7CisgICAgaWYgKGlzQ29tcG9zaXRlKCkpIHsK
KyAgICAgICAgRGVxdWU8U2VnbWVudGVkU3Vic3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3N1YnN0cmluZ3MuYmVnaW4oKTsKKyAgICAgICAgRGVxdWU8U2VnbWVudGVkU3Vic3RyaW5nPjo6
Y29uc3RfaXRlcmF0b3IgZSA9IG1fc3Vic3RyaW5ncy5lbmQoKTsKKyAgICAgICAgZm9yICg7IGl0
ICE9IGU7ICsraXQpCisgICAgICAgICAgICBpdC0+YXBwZW5kVG8ocmVzdWx0KTsKKyAgICB9Cisg
ICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCi12b2lkIFNlZ21lbnRlZFN0cmluZzo6
YXBwZW5kKGNvbnN0IFN0cmluZyYgc3RyaW5nKQordm9pZCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFu
Y2VQYXN0Tm9uTmV3bGluZXModW5zaWduZWQgY291bnQsIFVDaGFyKiBjb25zdW1lZENoYXJhY3Rl
cnMpCiB7Ci0gICAgYXBwZW5kU3Vic3RyaW5nKFN0cmluZyB7IHN0cmluZyB9KTsKKyAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihjb3VudCA8PSBsZW5ndGgoKSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgY29uc3VtZWRDaGFy
YWN0ZXJzW2ldID0gY3VycmVudENoYXIoKTsKKyAgICAgICAgYWR2YW5jZVBhc3ROb25OZXdsaW5l
KCk7CisgICAgfQogfQogCi1TdHJpbmcgU2VnbWVudGVkU3RyaW5nOjp0b1N0cmluZygpIGNvbnN0
Cit2b2lkIFNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZTgoKQogewotICAgIFN0cmluZ0J1aWxkZXIg
cmVzdWx0OwotICAgIG1fY3VycmVudFN1YnN0cmluZy5hcHBlbmRUbyhyZXN1bHQpOwotICAgIGZv
ciAoYXV0byYgc3Vic3RyaW5nIDogbV9vdGhlclN1YnN0cmluZ3MpCi0gICAgICAgIHN1YnN0cmlu
Zy5hcHBlbmRUbyhyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKyAgICBB
U1NFUlQoIW1fcHVzaGVkQ2hhcjEpOworICAgIGRlY3JlbWVudEFuZENoZWNrTGVuZ3RoKCk7Cisg
ICAgbV9jdXJyZW50Q2hhciA9IG1fY3VycmVudFN0cmluZy5pbmNyZW1lbnRBbmRHZXRDdXJyZW50
Q2hhcjgoKTsKK30KKwordm9pZCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2UxNigpCit7CisgICAg
QVNTRVJUKCFtX3B1c2hlZENoYXIxKTsKKyAgICBkZWNyZW1lbnRBbmRDaGVja0xlbmd0aCgpOwor
ICAgIG1fY3VycmVudENoYXIgPSBtX2N1cnJlbnRTdHJpbmcuaW5jcmVtZW50QW5kR2V0Q3VycmVu
dENoYXIxNigpOwogfQogCi12b2lkIFNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZVdpdGhvdXRVcGRh
dGluZ0xpbmVOdW1iZXIxNigpCit2b2lkIFNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZUFuZFVwZGF0
ZUxpbmVOdW1iZXI4KCkKIHsKLSAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSAqKyttX2N1cnJlbnRT
dWJzdHJpbmcuY3VycmVudENoYXJhY3RlcjE2OworICAgIEFTU0VSVCghbV9wdXNoZWRDaGFyMSk7
CisgICAgQVNTRVJUKG1fY3VycmVudFN0cmluZy5nZXRDdXJyZW50Q2hhcigpID09IG1fY3VycmVu
dENoYXIpOworICAgIGlmIChtX2N1cnJlbnRDaGFyID09ICdcbicpIHsKKyAgICAgICAgKyttX2N1
cnJlbnRMaW5lOworICAgICAgICBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1
cnJlbnRMaW5lID0gbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKSArIDE7CisgICAgfQogICAg
IGRlY3JlbWVudEFuZENoZWNrTGVuZ3RoKCk7CisgICAgbV9jdXJyZW50Q2hhciA9IG1fY3VycmVu
dFN0cmluZy5pbmNyZW1lbnRBbmRHZXRDdXJyZW50Q2hhcjgoKTsKIH0KIAogdm9pZCBTZWdtZW50
ZWRTdHJpbmc6OmFkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyMTYoKQogewotICAgIEFTU0VSVCht
X2N1cnJlbnRTdWJzdHJpbmcuZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMpOwotICAgIHByb2Nlc3NQ
b3NzaWJsZU5ld2xpbmUoKTsKLSAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSAqKyttX2N1cnJlbnRT
dWJzdHJpbmcuY3VycmVudENoYXJhY3RlcjE2OworICAgIEFTU0VSVCghbV9wdXNoZWRDaGFyMSk7
CisgICAgQVNTRVJUKG1fY3VycmVudFN0cmluZy5nZXRDdXJyZW50Q2hhcigpID09IG1fY3VycmVu
dENoYXIpOworICAgIGlmIChtX2N1cnJlbnRDaGFyID09ICdcbicpIHsKKyAgICAgICAgKyttX2N1
cnJlbnRMaW5lOworICAgICAgICBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1
cnJlbnRMaW5lID0gbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKSArIDE7CisgICAgfQogICAg
IGRlY3JlbWVudEFuZENoZWNrTGVuZ3RoKCk7CisgICAgbV9jdXJyZW50Q2hhciA9IG1fY3VycmVu
dFN0cmluZy5pbmNyZW1lbnRBbmRHZXRDdXJyZW50Q2hhcjE2KCk7CiB9CiAKLWlubGluZSB2b2lk
IFNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZVBhc3RTaW5nbGVDaGFyYWN0ZXJTdWJzdHJpbmdXaXRo
b3V0VXBkYXRpbmdMaW5lTnVtYmVyKCkKK3ZvaWQgU2VnbWVudGVkU3RyaW5nOjphZHZhbmNlU2xv
d0Nhc2UoKQogewotICAgIEFTU0VSVChtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoID09IDEpOwot
ICAgIGlmIChtX290aGVyU3Vic3RyaW5ncy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9jdXJyZW50
U3Vic3RyaW5nLmxlbmd0aCA9IDA7Ci0gICAgICAgIG1fY3VycmVudENoYXJhY3RlciA9IDA7Ci0g
ICAgICAgIHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzRm9yRW1wdHlTdHJpbmcoKTsKLSAg
ICAgICAgcmV0dXJuOworICAgIGlmIChtX3B1c2hlZENoYXIxKSB7CisgICAgICAgIG1fcHVzaGVk
Q2hhcjEgPSBtX3B1c2hlZENoYXIyOworICAgICAgICBtX3B1c2hlZENoYXIyID0gMDsKKworICAg
ICAgICBpZiAobV9wdXNoZWRDaGFyMSkgeworICAgICAgICAgICAgbV9jdXJyZW50Q2hhciA9IG1f
cHVzaGVkQ2hhcjE7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB1
cGRhdGVBZHZhbmNlRnVuY3Rpb25Qb2ludGVycygpOworICAgIH0gZWxzZSBpZiAobV9jdXJyZW50
U3RyaW5nLm1fbGVuZ3RoKSB7CisgICAgICAgIGlmICgtLW1fY3VycmVudFN0cmluZy5tX2xlbmd0
aCA9PSAwKQorICAgICAgICAgICAgYWR2YW5jZVN1YnN0cmluZygpOworICAgIH0gZWxzZSBpZiAo
IWlzQ29tcG9zaXRlKCkpIHsKKyAgICAgICAgbV9jdXJyZW50U3RyaW5nLmNsZWFyKCk7CisgICAg
ICAgIG1fZW1wdHkgPSB0cnVlOworICAgICAgICBtX2Zhc3RQYXRoRmxhZ3MgPSBOb0Zhc3RQYXRo
OworICAgICAgICBtX2FkdmFuY2VGdW5jID0gJlNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZUVtcHR5
OworICAgICAgICBtX2FkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyRnVuYyA9ICZTZWdtZW50ZWRT
dHJpbmc6OmFkdmFuY2VFbXB0eTsKICAgICB9Ci0gICAgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25z
dW1lZFByaW9yVG9DdXJyZW50U3Vic3RyaW5nICs9IG1fY3VycmVudFN1YnN0cmluZy5udW1iZXJP
ZkNoYXJhY3RlcnNDb25zdW1lZCgpOwotICAgIG1fY3VycmVudFN1YnN0cmluZyA9IG1fb3RoZXJT
dWJzdHJpbmdzLnRha2VGaXJzdCgpOwotICAgIC8vIElmIHdlJ3ZlIHByZXZpb3VzbHkgY29uc3Vt
ZWQgc29tZSBjaGFyYWN0ZXJzIG9mIHRoZSBub24tY3VycmVudCBzdHJpbmcsIHdlIG5vdyBhY2Nv
dW50IGZvciB0aG9zZQotICAgIC8vIGNoYXJhY3RlcnMgYXMgcGFydCBvZiB0aGUgY3VycmVudCBz
dHJpbmcsIG5vdCBhcyBwYXJ0IG9mICJwcmlvciB0byBjdXJyZW50IHN0cmluZy4iCi0gICAgbV9u
dW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50U3Vic3RyaW5nIC09IG1fY3Vy
cmVudFN1YnN0cmluZy5udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpOwotICAgIG1fY3VycmVu
dENoYXJhY3RlciA9IG1fY3VycmVudFN1YnN0cmluZy5jdXJyZW50Q2hhcmFjdGVyKCk7Ci0gICAg
dXBkYXRlQWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnMoKTsKKyAgICBtX2N1cnJlbnRDaGFyID0gbV9j
dXJyZW50U3RyaW5nLm1fbGVuZ3RoID8gbV9jdXJyZW50U3RyaW5nLmdldEN1cnJlbnRDaGFyKCkg
OiAwOwogfQogCi12b2lkIFNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZVBhc3RTaW5nbGVDaGFyYWN0
ZXJTdWJzdHJpbmcoKQordm9pZCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VBbmRVcGRhdGVMaW5l
TnVtYmVyU2xvd0Nhc2UoKQogewotICAgIEFTU0VSVChtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3Ro
ID09IDEpOwotICAgIEFTU0VSVChtX2N1cnJlbnRTdWJzdHJpbmcuZG9Ob3RFeGNsdWRlTGluZU51
bWJlcnMpOwotICAgIHByb2Nlc3NQb3NzaWJsZU5ld2xpbmUoKTsKLSAgICBhZHZhbmNlUGFzdFNp
bmdsZUNoYXJhY3RlclN1YnN0cmluZ1dpdGhvdXRVcGRhdGluZ0xpbmVOdW1iZXIoKTsKKyAgICBp
ZiAobV9wdXNoZWRDaGFyMSkgeworICAgICAgICBtX3B1c2hlZENoYXIxID0gbV9wdXNoZWRDaGFy
MjsKKyAgICAgICAgbV9wdXNoZWRDaGFyMiA9IDA7CisKKyAgICAgICAgaWYgKG1fcHVzaGVkQ2hh
cjEpIHsKKyAgICAgICAgICAgIG1fY3VycmVudENoYXIgPSBtX3B1c2hlZENoYXIxOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdXBkYXRlQWR2YW5jZUZ1bmN0aW9u
UG9pbnRlcnMoKTsKKyAgICB9IGVsc2UgaWYgKG1fY3VycmVudFN0cmluZy5tX2xlbmd0aCkgewor
ICAgICAgICBpZiAobV9jdXJyZW50U3RyaW5nLmdldEN1cnJlbnRDaGFyKCkgPT0gJ1xuJyAmJiBt
X2N1cnJlbnRTdHJpbmcuZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMoKSkgeworICAgICAgICAgICAg
KyttX2N1cnJlbnRMaW5lOworICAgICAgICAgICAgLy8gUGx1cyAxIGJlY2F1c2UgbnVtYmVyT2ZD
aGFyYWN0ZXJzQ29uc3VtZWQgdmFsdWUgaGFzbid0IGluY3JlbWVudGVkIHlldDsgaXQgZG9lcyB3
aXRoIG1fbGVuZ3RoIGRlY3JlbWVudCBiZWxvdy4KKyAgICAgICAgICAgIG1fbnVtYmVyT2ZDaGFy
YWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudExpbmUgPSBudW1iZXJPZkNoYXJhY3RlcnNDb25z
dW1lZCgpICsgMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoLS1tX2N1cnJlbnRTdHJpbmcubV9s
ZW5ndGggPT0gMCkKKyAgICAgICAgICAgIGFkdmFuY2VTdWJzdHJpbmcoKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbV9jdXJyZW50U3RyaW5nLmluY3JlbWVudEFuZEdldEN1cnJlbnRDaGFy
KCk7IC8vIE9ubHkgbmVlZCB0aGUgKysKKyAgICB9IGVsc2UgaWYgKCFpc0NvbXBvc2l0ZSgpKSB7
CisgICAgICAgIG1fY3VycmVudFN0cmluZy5jbGVhcigpOworICAgICAgICBtX2VtcHR5ID0gdHJ1
ZTsKKyAgICAgICAgbV9mYXN0UGF0aEZsYWdzID0gTm9GYXN0UGF0aDsKKyAgICAgICAgbV9hZHZh
bmNlRnVuYyA9ICZTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VFbXB0eTsKKyAgICAgICAgbV9hZHZh
bmNlQW5kVXBkYXRlTGluZU51bWJlckZ1bmMgPSAmU2VnbWVudGVkU3RyaW5nOjphZHZhbmNlRW1w
dHk7CisgICAgfQorCisgICAgbV9jdXJyZW50Q2hhciA9IG1fY3VycmVudFN0cmluZy5tX2xlbmd0
aCA/IG1fY3VycmVudFN0cmluZy5nZXRDdXJyZW50Q2hhcigpIDogMDsKIH0KIAogdm9pZCBTZWdt
ZW50ZWRTdHJpbmc6OmFkdmFuY2VFbXB0eSgpCiB7Ci0gICAgQVNTRVJUKCFtX2N1cnJlbnRTdWJz
dHJpbmcubGVuZ3RoKTsKLSAgICBBU1NFUlQobV9vdGhlclN1YnN0cmluZ3MuaXNFbXB0eSgpKTsK
LSAgICBBU1NFUlQoIW1fY3VycmVudENoYXJhY3Rlcik7CisgICAgQVNTRVJUKCFtX2N1cnJlbnRT
dHJpbmcubV9sZW5ndGggJiYgIWlzQ29tcG9zaXRlKCkpOworICAgIG1fY3VycmVudENoYXIgPSAw
OwogfQogCi12b2lkIFNlZ21lbnRlZFN0cmluZzo6dXBkYXRlQWR2YW5jZUZ1bmN0aW9uUG9pbnRl
cnNGb3JTaW5nbGVDaGFyYWN0ZXJTdWJzdHJpbmcoKQordm9pZCBTZWdtZW50ZWRTdHJpbmc6OnVw
ZGF0ZVNsb3dDYXNlRnVuY3Rpb25Qb2ludGVycygpCiB7Ci0gICAgQVNTRVJUKG1fY3VycmVudFN1
YnN0cmluZy5sZW5ndGggPT0gMSk7CiAgICAgbV9mYXN0UGF0aEZsYWdzID0gTm9GYXN0UGF0aDsK
LSAgICBtX2FkdmFuY2VXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyRnVuY3Rpb24gPSAmU2VnbWVu
dGVkU3RyaW5nOjphZHZhbmNlUGFzdFNpbmdsZUNoYXJhY3RlclN1YnN0cmluZ1dpdGhvdXRVcGRh
dGluZ0xpbmVOdW1iZXI7Ci0gICAgaWYgKG1fY3VycmVudFN1YnN0cmluZy5kb05vdEV4Y2x1ZGVM
aW5lTnVtYmVycykKLSAgICAgICAgbV9hZHZhbmNlQW5kVXBkYXRlTGluZU51bWJlckZ1bmN0aW9u
ID0gJlNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZVBhc3RTaW5nbGVDaGFyYWN0ZXJTdWJzdHJpbmc7
Ci0gICAgZWxzZQotICAgICAgICBtX2FkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyRnVuY3Rpb24g
PSAmU2VnbWVudGVkU3RyaW5nOjphZHZhbmNlUGFzdFNpbmdsZUNoYXJhY3RlclN1YnN0cmluZ1dp
dGhvdXRVcGRhdGluZ0xpbmVOdW1iZXI7CisgICAgbV9hZHZhbmNlRnVuYyA9ICZTZWdtZW50ZWRT
dHJpbmc6OmFkdmFuY2VTbG93Q2FzZTsKKyAgICBtX2FkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVy
RnVuYyA9ICZTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyU2xvd0Nh
c2U7CiB9CiAKIE9yZGluYWxOdW1iZXIgU2VnbWVudGVkU3RyaW5nOjpjdXJyZW50TGluZSgpIGNv
bnN0CkBAIC0yMzYsMzYgKzM2NCwxOCBAQCB2b2lkIFNlZ21lbnRlZFN0cmluZzo6c2V0Q3VycmVu
dFBvc2l0aW9uKE9yZGluYWxOdW1iZXIgbGluZSwgT3JkaW5hbE51bWJlciBjb2x1bQogICAgIG1f
bnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudExpbmUgPSBudW1iZXJPZkNo
YXJhY3RlcnNDb25zdW1lZCgpICsgcHJvbG9nTGVuZ3RoIC0gY29sdW1uQWZ0cmVQcm9sb2cuemVy
b0Jhc2VkSW50KCk7CiB9CiAKLVNlZ21lbnRlZFN0cmluZzo6QWR2YW5jZVBhc3RSZXN1bHQgU2Vn
bWVudGVkU3RyaW5nOjphZHZhbmNlUGFzdFNsb3dDYXNlKGNvbnN0IGNoYXIqIGxpdGVyYWwsIGJv
b2wgbGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKQorU2VnbWVudGVkU3RyaW5nOjpBZHZhbmNlUGFz
dFJlc3VsdCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VQYXN0U2xvd0Nhc2UoY29uc3QgY2hhciog
bGl0ZXJhbCwgYm9vbCBjYXNlU2Vuc2l0aXZlKQogewotICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBt
YXhMZW5ndGggPSAxMDsKLSAgICBBU1NFUlQoIXN0cmNocihsaXRlcmFsLCAnXG4nKSk7Ci0gICAg
YXV0byBsZW5ndGggPSBzdHJsZW4obGl0ZXJhbCk7Ci0gICAgQVNTRVJUKGxlbmd0aCA8PSBtYXhM
ZW5ndGgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmxlbihsaXRlcmFsKTsKICAgICBpZiAo
bGVuZ3RoID4gdGhpcy0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBOb3RFbm91Z2hDaGFyYWN0
ZXJzOwotICAgIFVDaGFyIGNvbnN1bWVkQ2hhcmFjdGVyc1ttYXhMZW5ndGhdOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBhdXRvIGNoYXJhY3Rl
ciA9IG1fY3VycmVudENoYXJhY3RlcjsKLSAgICAgICAgaWYgKGNoYXJhY3Rlck1pc21hdGNoKGNo
YXJhY3RlciwgbGl0ZXJhbFtpXSwgbGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKSkgewotICAgICAg
ICAgICAgaWYgKGkpCi0gICAgICAgICAgICAgICAgcHVzaEJhY2soU3RyaW5nIHsgY29uc3VtZWRD
aGFyYWN0ZXJzLCBpIH0pOwotICAgICAgICAgICAgcmV0dXJuIERpZE5vdE1hdGNoOwotICAgICAg
ICB9Ci0gICAgICAgIGFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAgICBjb25zdW1lZENo
YXJhY3RlcnNbaV0gPSBjaGFyYWN0ZXI7Ci0gICAgfQotICAgIHJldHVybiBEaWRNYXRjaDsKLX0K
LQotdm9pZCBTZWdtZW50ZWRTdHJpbmc6OnVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzRm9y
RW1wdHlTdHJpbmcoKQotewotICAgIEFTU0VSVCghbV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0aCk7
Ci0gICAgQVNTRVJUKG1fb3RoZXJTdWJzdHJpbmdzLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKCFt
X2N1cnJlbnRDaGFyYWN0ZXIpOwotICAgIG1fZmFzdFBhdGhGbGFncyA9IE5vRmFzdFBhdGg7Ci0g
ICAgbV9hZHZhbmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJlckZ1bmN0aW9uID0gJlNlZ21lbnRl
ZFN0cmluZzo6YWR2YW5jZUVtcHR5OwotICAgIG1fYWR2YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJG
dW5jdGlvbiA9ICZTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VFbXB0eTsKKyAgICBVQ2hhciogY29u
c3VtZWRDaGFyYWN0ZXJzOworICAgIFN0cmluZyBjb25zdW1lZFN0cmluZyA9IFN0cmluZzo6Y3Jl
YXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGNvbnN1bWVkQ2hhcmFjdGVycyk7CisgICAgYWR2YW5j
ZVBhc3ROb25OZXdsaW5lcyhsZW5ndGgsIGNvbnN1bWVkQ2hhcmFjdGVycyk7CisgICAgaWYgKGNv
bnN1bWVkU3RyaW5nLnN0YXJ0c1dpdGgobGl0ZXJhbCwgY2FzZVNlbnNpdGl2ZSkpCisgICAgICAg
IHJldHVybiBEaWRNYXRjaDsKKyAgICBwdXNoQmFjayhTZWdtZW50ZWRTdHJpbmcoY29uc3VtZWRT
dHJpbmcpKTsKKyAgICByZXR1cm4gRGlkTm90TWF0Y2g7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5oCmluZGV4IGZlN2YxOTE0MDM3ZDMz
NWJmOThlNDhlNWQ2ZjkzMTkzMDljMjYwYzcuLjA4MTNkNjBjZTc0NDk2NjQ4YTkwY2QwYTU5NGJj
ZWU3Njg4Y2VkNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2Vn
bWVudGVkU3RyaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TZWdtZW50
ZWRTdHJpbmcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgIENvcHlyaWdodCAoQykgMjAw
NC0yMDA4LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMTcsMzA3ICsxNywzODEgQEAKICAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KICovCiAKLSNwcmFnbWEgb25jZQorI2lmbmRlZiBTZWdtZW50ZWRTdHJpbmdfaAorI2Rl
ZmluZSBTZWdtZW50ZWRTdHJpbmdfaAogCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3Qg
c3RhcnQgd2l0aCAiayIuCi0vLyBGSVhNRTogVGhpcyBpcyBhIHNoYXJlZCB0b2tlbml6ZXIgY29u
Y2VwdCwgbm90IGEgU2VnbWVudGVkU3RyaW5nIGNvbmNlcHQsIGJ1dCB0aGlzIGlzIHRoZSBvbmx5
IGNvbW1vbiBoZWFkZXIgZm9yIG5vdy4KLWNvbnN0ZXhwciBMQ2hhciBrRW5kT2ZGaWxlTWFya2Vy
ID0gMDsKK2NsYXNzIFNlZ21lbnRlZFN0cmluZzsKIAotY2xhc3MgU2VnbWVudGVkU3RyaW5nIHsK
K2NsYXNzIFNlZ21lbnRlZFN1YnN0cmluZyB7CiBwdWJsaWM6Ci0gICAgU2VnbWVudGVkU3RyaW5n
KCkgPSBkZWZhdWx0OwotICAgIFNlZ21lbnRlZFN0cmluZyhTdHJpbmcmJik7Ci0gICAgU2VnbWVu
dGVkU3RyaW5nKGNvbnN0IFN0cmluZyYpOworICAgIFNlZ21lbnRlZFN1YnN0cmluZygpCisgICAg
ICAgIDogbV9sZW5ndGgoMCkKKyAgICAgICAgLCBtX2RvTm90RXhjbHVkZUxpbmVOdW1iZXJzKHRy
dWUpCisgICAgICAgICwgbV9pczhCaXQoZmFsc2UpCisgICAgeworICAgICAgICBtX2RhdGEuc3Ry
aW5nMTZQdHIgPSAwOworICAgIH0KIAotICAgIFNlZ21lbnRlZFN0cmluZyhTZWdtZW50ZWRTdHJp
bmcmJikgPSBkZWxldGU7Ci0gICAgU2VnbWVudGVkU3RyaW5nKGNvbnN0IFNlZ21lbnRlZFN0cmlu
ZyYpID0gZGVsZXRlOworICAgIFNlZ21lbnRlZFN1YnN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikK
KyAgICAgICAgOiBtX2xlbmd0aChzdHIubGVuZ3RoKCkpCisgICAgICAgICwgbV9kb05vdEV4Y2x1
ZGVMaW5lTnVtYmVycyh0cnVlKQorICAgICAgICAsIG1fc3RyaW5nKHN0cikKKyAgICB7CisgICAg
ICAgIGlmIChtX2xlbmd0aCkgeworICAgICAgICAgICAgaWYgKG1fc3RyaW5nLmlzOEJpdCgpKSB7
CisgICAgICAgICAgICAgICAgbV9pczhCaXQgPSB0cnVlOworICAgICAgICAgICAgICAgIG1fZGF0
YS5zdHJpbmc4UHRyID0gbV9zdHJpbmcuY2hhcmFjdGVyczgoKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgbV9pczhCaXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBt
X2RhdGEuc3RyaW5nMTZQdHIgPSBtX3N0cmluZy5jaGFyYWN0ZXJzMTYoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2lzOEJpdCA9IGZhbHNlOworICAgIH0K
IAotICAgIFNlZ21lbnRlZFN0cmluZyYgb3BlcmF0b3I9KFNlZ21lbnRlZFN0cmluZyYmKTsKLSAg
ICBTZWdtZW50ZWRTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBTZWdtZW50ZWRTdHJpbmcmKSA9IGRl
ZmF1bHQ7CisgICAgdm9pZCBjbGVhcigpIHsgbV9sZW5ndGggPSAwOyBtX2RhdGEuc3RyaW5nMTZQ
dHIgPSAwOyBtX2lzOEJpdCA9IGZhbHNlO30KKyAgICAKKyAgICBib29sIGlzOEJpdCgpIHsgcmV0
dXJuIG1faXM4Qml0OyB9CisgICAgCisgICAgYm9vbCBleGNsdWRlTGluZU51bWJlcnMoKSBjb25z
dCB7IHJldHVybiAhbV9kb05vdEV4Y2x1ZGVMaW5lTnVtYmVyczsgfQorICAgIGJvb2wgZG9Ob3RF
eGNsdWRlTGluZU51bWJlcnMoKSBjb25zdCB7IHJldHVybiBtX2RvTm90RXhjbHVkZUxpbmVOdW1i
ZXJzOyB9CiAKLSAgICB2b2lkIGNsZWFyKCk7Ci0gICAgdm9pZCBjbG9zZSgpOwotCi0gICAgdm9p
ZCBhcHBlbmQoU2VnbWVudGVkU3RyaW5nJiYpOwotICAgIHZvaWQgYXBwZW5kKGNvbnN0IFNlZ21l
bnRlZFN0cmluZyYpOworICAgIHZvaWQgc2V0RXhjbHVkZUxpbmVOdW1iZXJzKCkgeyBtX2RvTm90
RXhjbHVkZUxpbmVOdW1iZXJzID0gZmFsc2U7IH0KIAotICAgIHZvaWQgYXBwZW5kKFN0cmluZyYm
KTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmKTsKKyAgICBpbnQgbnVtYmVyT2ZDaGFy
YWN0ZXJzQ29uc3VtZWQoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5sZW5ndGgoKSAtIG1fbGVu
Z3RoOyB9CiAKLSAgICB2b2lkIHB1c2hCYWNrKFN0cmluZyYmKTsKKyAgICB2b2lkIGFwcGVuZFRv
KFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CisgICAgeworICAgICAgICBpbnQgb2Zmc2V0
ID0gbV9zdHJpbmcubGVuZ3RoKCkgLSBtX2xlbmd0aDsKIAotICAgIHZvaWQgc2V0RXhjbHVkZUxp
bmVOdW1iZXJzKCk7CisgICAgICAgIGlmICghb2Zmc2V0KSB7CisgICAgICAgICAgICBpZiAobV9s
ZW5ndGgpCisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQobV9zdHJpbmcpOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1fc3RyaW5nLnN1YnN0cmluZyhv
ZmZzZXQsIG1fbGVuZ3RoKSk7CisgICAgfQogCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gIW1fY3VycmVudFN1YnN0cmluZy5sZW5ndGg7IH0KLSAgICB1bnNpZ25lZCBsZW5ndGgo
KSBjb25zdDsKKyAgICBVQ2hhciBnZXRDdXJyZW50Q2hhcjgoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuICptX2RhdGEuc3RyaW5nOFB0cjsKKyAgICB9CiAKLSAgICBib29sIGlzQ2xvc2VkKCkgY29u
c3QgeyByZXR1cm4gbV9pc0Nsb3NlZDsgfQorICAgIFVDaGFyIGdldEN1cnJlbnRDaGFyMTYoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YS5zdHJpbmcxNlB0ciA/ICptX2RhdGEuc3RyaW5n
MTZQdHIgOiAwOworICAgIH0KIAotICAgIHZvaWQgYWR2YW5jZSgpOwotICAgIHZvaWQgYWR2YW5j
ZVBhc3ROb25OZXdsaW5lKCk7IC8vIEZhc3RlciB0aGFuIGNhbGxpbmcgYWR2YW5jZSB3aGVuIHdl
IGtub3cgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGlzIG5vdCBhIG5ld2xpbmUuCi0gICAgdm9pZCBh
ZHZhbmNlUGFzdE5ld2xpbmUoKTsgLy8gRmFzdGVyIHRoYW4gY2FsbGluZyBhZHZhbmNlIHdoZW4g
d2Uga25vdyB0aGUgY3VycmVudCBjaGFyYWN0ZXIgaXMgYSBuZXdsaW5lLgorICAgIFVDaGFyIGlu
Y3JlbWVudEFuZEdldEN1cnJlbnRDaGFyOCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9kYXRh
LnN0cmluZzhQdHIpOworICAgICAgICByZXR1cm4gKisrbV9kYXRhLnN0cmluZzhQdHI7CisgICAg
fQogCi0gICAgZW51bSBBZHZhbmNlUGFzdFJlc3VsdCB7IERpZE5vdE1hdGNoLCBEaWRNYXRjaCwg
Tm90RW5vdWdoQ2hhcmFjdGVycyB9OwotICAgIHRlbXBsYXRlPHVuc2lnbmVkIGxlbmd0aD4gQWR2
YW5jZVBhc3RSZXN1bHQgYWR2YW5jZVBhc3QoY29uc3QgY2hhciAoJmxpdGVyYWwpW2xlbmd0aF0p
IHsgcmV0dXJuIGFkdmFuY2VQYXN0PGxlbmd0aCwgZmFsc2U+KGxpdGVyYWwpOyB9Ci0gICAgdGVt
cGxhdGU8dW5zaWduZWQgbGVuZ3RoPiBBZHZhbmNlUGFzdFJlc3VsdCBhZHZhbmNlUGFzdExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBjaGFyICgmbGl0ZXJhbClbbGVuZ3RoXSkgeyByZXR1
cm4gYWR2YW5jZVBhc3Q8bGVuZ3RoLCB0cnVlPihsaXRlcmFsKTsgfQorICAgIFVDaGFyIGluY3Jl
bWVudEFuZEdldEN1cnJlbnRDaGFyMTYoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZGF0YS5z
dHJpbmcxNlB0cik7CisgICAgICAgIHJldHVybiAqKyttX2RhdGEuc3RyaW5nMTZQdHI7CisgICAg
fQogCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKSBjb25zdDsKKyAg
ICBTdHJpbmcgY3VycmVudFN1YlN0cmluZyh1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAg
ICBpbnQgb2Zmc2V0ID0gbV9zdHJpbmcubGVuZ3RoKCkgLSBtX2xlbmd0aDsKKyAgICAgICAgcmV0
dXJuIG1fc3RyaW5nLnN1YnN0cmluZyhvZmZzZXQsIGxlbmd0aCk7CisgICAgfQogCi0gICAgU3Ry
aW5nIHRvU3RyaW5nKCkgY29uc3Q7CisgICAgQUxXQVlTX0lOTElORSBVQ2hhciBnZXRDdXJyZW50
Q2hhcigpCisgICAgeworICAgICAgICBBU1NFUlQobV9sZW5ndGgpOworICAgICAgICBpZiAoaXM4
Qml0KCkpCisgICAgICAgICAgICByZXR1cm4gZ2V0Q3VycmVudENoYXI4KCk7CisgICAgICAgIHJl
dHVybiBnZXRDdXJyZW50Q2hhcjE2KCk7CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUg
VUNoYXIgaW5jcmVtZW50QW5kR2V0Q3VycmVudENoYXIoKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fbGVuZ3RoKTsKKyAgICAgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICAgICAgcmV0dXJuIGlu
Y3JlbWVudEFuZEdldEN1cnJlbnRDaGFyOCgpOworICAgICAgICByZXR1cm4gaW5jcmVtZW50QW5k
R2V0Q3VycmVudENoYXIxNigpOworICAgIH0KIAotICAgIFVDaGFyIGN1cnJlbnRDaGFyYWN0ZXIo
KSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRDaGFyYWN0ZXI7IH0KK3B1YmxpYzoKKyAgICB1bmlv
biB7CisgICAgICAgIGNvbnN0IExDaGFyKiBzdHJpbmc4UHRyOworICAgICAgICBjb25zdCBVQ2hh
ciogc3RyaW5nMTZQdHI7CisgICAgfSBtX2RhdGE7CisgICAgaW50IG1fbGVuZ3RoOwogCi0gICAg
T3JkaW5hbE51bWJlciBjdXJyZW50Q29sdW1uKCkgY29uc3Q7Ci0gICAgT3JkaW5hbE51bWJlciBj
dXJyZW50TGluZSgpIGNvbnN0OworcHJpdmF0ZToKKyAgICBib29sIG1fZG9Ob3RFeGNsdWRlTGlu
ZU51bWJlcnM7CisgICAgYm9vbCBtX2lzOEJpdDsKKyAgICBTdHJpbmcgbV9zdHJpbmc7Cit9Owog
Ci0gICAgLy8gU2V0cyB2YWx1ZSBvZiBsaW5lL2NvbHVtbiB2YXJpYWJsZXMuIENvbHVtbiBpcyBz
cGVjaWZpZWQgaW5kaXJlY3RseSBieSBhIHBhcmFtZXRlciBjb2x1bW5BZnRlclByb2xvZwotICAg
IC8vIHdoaWNoIGlzIGEgdmFsdWUgb2YgY29sdW1uIHRoYXQgd2Ugc2hvdWxkIGdldCBhZnRlciBh
IHByb2xvZyAoZmlyc3QgcHJvbG9nTGVuZ3RoIGNoYXJhY3RlcnMpIGhhcyBiZWVuIGNvbnN1bWVk
LgotICAgIHZvaWQgc2V0Q3VycmVudFBvc2l0aW9uKE9yZGluYWxOdW1iZXIgbGluZSwgT3JkaW5h
bE51bWJlciBjb2x1bW5BZnRlclByb2xvZywgaW50IHByb2xvZ0xlbmd0aCk7CitjbGFzcyBTZWdt
ZW50ZWRTdHJpbmcgeworcHVibGljOgorICAgIFNlZ21lbnRlZFN0cmluZygpCisgICAgICAgIDog
bV9wdXNoZWRDaGFyMSgwKQorICAgICAgICAsIG1fcHVzaGVkQ2hhcjIoMCkKKyAgICAgICAgLCBt
X2N1cnJlbnRDaGFyKDApCisgICAgICAgICwgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFBy
aW9yVG9DdXJyZW50U3RyaW5nKDApCisgICAgICAgICwgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25z
dW1lZFByaW9yVG9DdXJyZW50TGluZSgwKQorICAgICAgICAsIG1fY3VycmVudExpbmUoMCkKKyAg
ICAgICAgLCBtX2Nsb3NlZChmYWxzZSkKKyAgICAgICAgLCBtX2VtcHR5KHRydWUpCisgICAgICAg
ICwgbV9mYXN0UGF0aEZsYWdzKE5vRmFzdFBhdGgpCisgICAgICAgICwgbV9hZHZhbmNlRnVuYygm
U2VnbWVudGVkU3RyaW5nOjphZHZhbmNlRW1wdHkpCisgICAgICAgICwgbV9hZHZhbmNlQW5kVXBk
YXRlTGluZU51bWJlckZ1bmMoJlNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZUVtcHR5KQorICAgIHsK
KyAgICB9CiAKLXByaXZhdGU6Ci0gICAgc3RydWN0IFN1YnN0cmluZyB7Ci0gICAgICAgIFN1YnN0
cmluZygpID0gZGVmYXVsdDsKLSAgICAgICAgU3Vic3RyaW5nKFN0cmluZyYmKTsKLQotICAgICAg
ICBVQ2hhciBjdXJyZW50Q2hhcmFjdGVyKCkgY29uc3Q7Ci0gICAgICAgIFVDaGFyIGN1cnJlbnRD
aGFyYWN0ZXJQcmVJbmNyZW1lbnQoKTsKLQotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkNoYXJh
Y3RlcnNDb25zdW1lZCgpIGNvbnN0OwotICAgICAgICB2b2lkIGFwcGVuZFRvKFN0cmluZ0J1aWxk
ZXImKSBjb25zdDsKLQotICAgICAgICBTdHJpbmcgc3RyaW5nOwotICAgICAgICB1bnNpZ25lZCBs
ZW5ndGggeyAwIH07Ci0gICAgICAgIGJvb2wgaXM4Qml0OwotICAgICAgICB1bmlvbiB7Ci0gICAg
ICAgICAgICBjb25zdCBMQ2hhciogY3VycmVudENoYXJhY3Rlcjg7Ci0gICAgICAgICAgICBjb25z
dCBVQ2hhciogY3VycmVudENoYXJhY3RlcjE2OwotICAgICAgICB9OwotICAgICAgICBib29sIGRv
Tm90RXhjbHVkZUxpbmVOdW1iZXJzIHsgdHJ1ZSB9OwotICAgIH07CisgICAgU2VnbWVudGVkU3Ry
aW5nKGNvbnN0IFN0cmluZyYgc3RyKQorICAgICAgICA6IG1fcHVzaGVkQ2hhcjEoMCkKKyAgICAg
ICAgLCBtX3B1c2hlZENoYXIyKDApCisgICAgICAgICwgbV9jdXJyZW50U3RyaW5nKHN0cikKKyAg
ICAgICAgLCBtX2N1cnJlbnRDaGFyKDApCisgICAgICAgICwgbV9udW1iZXJPZkNoYXJhY3RlcnND
b25zdW1lZFByaW9yVG9DdXJyZW50U3RyaW5nKDApCisgICAgICAgICwgbV9udW1iZXJPZkNoYXJh
Y3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50TGluZSgwKQorICAgICAgICAsIG1fY3VycmVudExp
bmUoMCkKKyAgICAgICAgLCBtX2Nsb3NlZChmYWxzZSkKKyAgICAgICAgLCBtX2VtcHR5KCFzdHIu
bGVuZ3RoKCkpCisgICAgICAgICwgbV9mYXN0UGF0aEZsYWdzKE5vRmFzdFBhdGgpCisgICAgewor
ICAgICAgICBpZiAobV9jdXJyZW50U3RyaW5nLm1fbGVuZ3RoKQorICAgICAgICAgICAgbV9jdXJy
ZW50Q2hhciA9IG1fY3VycmVudFN0cmluZy5nZXRDdXJyZW50Q2hhcigpOworICAgICAgICB1cGRh
dGVBZHZhbmNlRnVuY3Rpb25Qb2ludGVycygpOworICAgIH0KIAotICAgIGVudW0gRmFzdFBhdGhG
bGFncyB7Ci0gICAgICAgIE5vRmFzdFBhdGggPSAwLAotICAgICAgICBVc2U4Qml0QWR2YW5jZUFu
ZFVwZGF0ZUxpbmVOdW1iZXJzID0gMSA8PCAwLAotICAgICAgICBVc2U4Qml0QWR2YW5jZSA9IDEg
PDwgMSwKLSAgICB9OworICAgIFNlZ21lbnRlZFN0cmluZyhjb25zdCBTZWdtZW50ZWRTdHJpbmcm
KTsKKyAgICBTZWdtZW50ZWRTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBTZWdtZW50ZWRTdHJpbmcm
KTsKIAotICAgIHZvaWQgYXBwZW5kU3Vic3RyaW5nKFN1YnN0cmluZyYmKTsKKyAgICB2b2lkIGNs
ZWFyKCk7CisgICAgdm9pZCBjbG9zZSgpOwogCi0gICAgdm9pZCBwcm9jZXNzUG9zc2libGVOZXds
aW5lKCk7Ci0gICAgdm9pZCBzdGFydE5ld0xpbmUoKTsKKyAgICB2b2lkIGFwcGVuZChjb25zdCBT
ZWdtZW50ZWRTdHJpbmcmKTsKKyAgICB2b2lkIHB1c2hCYWNrKGNvbnN0IFNlZ21lbnRlZFN0cmlu
ZyYpOwogCi0gICAgdm9pZCBhZHZhbmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcigpOwotICAg
IHZvaWQgYWR2YW5jZVdpdGhvdXRVcGRhdGluZ0xpbmVOdW1iZXIxNigpOwotICAgIHZvaWQgYWR2
YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXIxNigpOwotICAgIHZvaWQgYWR2YW5jZVBhc3RTaW5nbGVD
aGFyYWN0ZXJTdWJzdHJpbmdXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyKCk7Ci0gICAgdm9pZCBh
ZHZhbmNlUGFzdFNpbmdsZUNoYXJhY3RlclN1YnN0cmluZygpOwotICAgIHZvaWQgYWR2YW5jZUVt
cHR5KCk7CisgICAgdm9pZCBzZXRFeGNsdWRlTGluZU51bWJlcnMoKTsKIAotICAgIHZvaWQgdXBk
YXRlQWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnMoKTsKLSAgICB2b2lkIHVwZGF0ZUFkdmFuY2VGdW5j
dGlvblBvaW50ZXJzRm9yRW1wdHlTdHJpbmcoKTsKLSAgICB2b2lkIHVwZGF0ZUFkdmFuY2VGdW5j
dGlvblBvaW50ZXJzRm9yU2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nKCk7CisgICAgdm9pZCBwdXNo
KFVDaGFyIGMpCisgICAgeworICAgICAgICBpZiAoIW1fcHVzaGVkQ2hhcjEpIHsKKyAgICAgICAg
ICAgIG1fcHVzaGVkQ2hhcjEgPSBjOworICAgICAgICAgICAgbV9jdXJyZW50Q2hhciA9IG1fcHVz
aGVkQ2hhcjEgPyBtX3B1c2hlZENoYXIxIDogbV9jdXJyZW50U3RyaW5nLmdldEN1cnJlbnRDaGFy
KCk7CisgICAgICAgICAgICB1cGRhdGVTbG93Q2FzZUZ1bmN0aW9uUG9pbnRlcnMoKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9wdXNoZWRDaGFyMik7CisgICAgICAg
ICAgICBtX3B1c2hlZENoYXIyID0gYzsKKyAgICAgICAgfQorICAgIH0KIAotICAgIHZvaWQgZGVj
cmVtZW50QW5kQ2hlY2tMZW5ndGgoKTsKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX2VtcHR5OyB9CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBjaGFyYWN0ZXJNaXNtYXRjaChD
aGFyYWN0ZXJUeXBlLCBjaGFyLCBib29sIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSk7Ci0gICAg
dGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoLCBib29sIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZT4g
QWR2YW5jZVBhc3RSZXN1bHQgYWR2YW5jZVBhc3QoY29uc3QgY2hhciAoJmxpdGVyYWwpW2xlbmd0
aF0pOwotICAgIEFkdmFuY2VQYXN0UmVzdWx0IGFkdmFuY2VQYXN0U2xvd0Nhc2UoY29uc3QgY2hh
ciogbGl0ZXJhbCwgYm9vbCBsZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UpOworICAgIGJvb2wgaXND
bG9zZWQoKSBjb25zdCB7IHJldHVybiBtX2Nsb3NlZDsgfQogCi0gICAgU3Vic3RyaW5nIG1fY3Vy
cmVudFN1YnN0cmluZzsKLSAgICBEZXF1ZTxTdWJzdHJpbmc+IG1fb3RoZXJTdWJzdHJpbmdzOwor
ICAgIGVudW0gQWR2YW5jZVBhc3RSZXN1bHQgeyBEaWROb3RNYXRjaCwgRGlkTWF0Y2gsIE5vdEVu
b3VnaENoYXJhY3RlcnMgfTsKKyAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+IEFkdmFuY2VQ
YXN0UmVzdWx0IGFkdmFuY2VQYXN0KGNvbnN0IGNoYXIgKCZsaXRlcmFsKVtsZW5ndGhdKSB7IHJl
dHVybiBhZHZhbmNlUGFzdChsaXRlcmFsLCBsZW5ndGggLSAxLCB0cnVlKTsgfQorICAgIHRlbXBs
YXRlPHVuc2lnbmVkIGxlbmd0aD4gQWR2YW5jZVBhc3RSZXN1bHQgYWR2YW5jZVBhc3RJZ25vcmlu
Z0Nhc2UoY29uc3QgY2hhciAoJmxpdGVyYWwpW2xlbmd0aF0pIHsgcmV0dXJuIGFkdmFuY2VQYXN0
KGxpdGVyYWwsIGxlbmd0aCAtIDEsIGZhbHNlKTsgfQogCi0gICAgYm9vbCBtX2lzQ2xvc2VkIHsg
ZmFsc2UgfTsKKyAgICB2b2lkIGFkdmFuY2UoKQorICAgIHsKKyAgICAgICAgaWYgKG1fZmFzdFBh
dGhGbGFncyAmIFVzZThCaXRBZHZhbmNlKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1fcHVzaGVk
Q2hhcjEpOworICAgICAgICAgICAgYm9vbCBoYXZlT25lQ2hhcmFjdGVyTGVmdCA9ICgtLW1fY3Vy
cmVudFN0cmluZy5tX2xlbmd0aCA9PSAxKTsKKyAgICAgICAgICAgIG1fY3VycmVudENoYXIgPSBt
X2N1cnJlbnRTdHJpbmcuaW5jcmVtZW50QW5kR2V0Q3VycmVudENoYXI4KCk7CiAKLSAgICBVQ2hh
ciBtX2N1cnJlbnRDaGFyYWN0ZXIgeyAwIH07CisgICAgICAgICAgICBpZiAoIWhhdmVPbmVDaGFy
YWN0ZXJMZWZ0KQorICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgIHVuc2lnbmVkIG1fbnVt
YmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN1YnN0cmluZyB7IDAgfTsKLSAg
ICB1bnNpZ25lZCBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRMaW5l
IHsgMCB9OwotICAgIGludCBtX2N1cnJlbnRMaW5lIHsgMCB9OworICAgICAgICAgICAgdXBkYXRl
U2xvd0Nhc2VGdW5jdGlvblBvaW50ZXJzKCk7CiAKLSAgICB1bnNpZ25lZCBjaGFyIG1fZmFzdFBh
dGhGbGFncyB7IE5vRmFzdFBhdGggfTsKLSAgICB2b2lkIChTZWdtZW50ZWRTdHJpbmc6OiptX2Fk
dmFuY2VXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyRnVuY3Rpb24pKCkgeyAmU2VnbWVudGVkU3Ry
aW5nOjphZHZhbmNlRW1wdHkgfTsKLSAgICB2b2lkIChTZWdtZW50ZWRTdHJpbmc6OiptX2FkdmFu
Y2VBbmRVcGRhdGVMaW5lTnVtYmVyRnVuY3Rpb24pKCkgeyAmU2VnbWVudGVkU3RyaW5nOjphZHZh
bmNlRW1wdHkgfTsKLX07CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotaW5saW5l
IFNlZ21lbnRlZFN0cmluZzo6U3Vic3RyaW5nOjpTdWJzdHJpbmcoU3RyaW5nJiYgcGFzc2VkU3Ry
aW5nKQotICAgIDogc3RyaW5nKFdURk1vdmUocGFzc2VkU3RyaW5nKSkKLSAgICAsIGxlbmd0aChz
dHJpbmcubGVuZ3RoKCkpCi17Ci0gICAgaWYgKGxlbmd0aCkgewotICAgICAgICBpczhCaXQgPSBz
dHJpbmcuaW1wbCgpLT5pczhCaXQoKTsKLSAgICAgICAgaWYgKGlzOEJpdCkKLSAgICAgICAgICAg
IGN1cnJlbnRDaGFyYWN0ZXI4ID0gc3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVyczgoKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgY3VycmVudENoYXJhY3RlcjE2ID0gc3RyaW5nLmltcGwoKS0+
Y2hhcmFjdGVyczE2KCk7CisgICAgICAgICh0aGlzLT4qbV9hZHZhbmNlRnVuYykoKTsKICAgICB9
Ci19CiAKLWlubGluZSB1bnNpZ25lZCBTZWdtZW50ZWRTdHJpbmc6OlN1YnN0cmluZzo6bnVtYmVy
T2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKSBjb25zdAotewotICAgIHJldHVybiBzdHJpbmcubGVuZ3Ro
KCkgLSBsZW5ndGg7Ci19CisgICAgdm9pZCBhZHZhbmNlQW5kVXBkYXRlTGluZU51bWJlcigpCisg
ICAgeworICAgICAgICBpZiAobV9mYXN0UGF0aEZsYWdzICYgVXNlOEJpdEFkdmFuY2UpIHsKKyAg
ICAgICAgICAgIEFTU0VSVCghbV9wdXNoZWRDaGFyMSk7CiAKLUFMV0FZU19JTkxJTkUgVUNoYXIg
U2VnbWVudGVkU3RyaW5nOjpTdWJzdHJpbmc6OmN1cnJlbnRDaGFyYWN0ZXIoKSBjb25zdAotewot
ICAgIEFTU0VSVChsZW5ndGgpOwotICAgIHJldHVybiBpczhCaXQgPyAqY3VycmVudENoYXJhY3Rl
cjggOiAqY3VycmVudENoYXJhY3RlcjE2OwotfQorICAgICAgICAgICAgYm9vbCBoYXZlTmV3TGlu
ZSA9IChtX2N1cnJlbnRDaGFyID09ICdcbicpICYgISEobV9mYXN0UGF0aEZsYWdzICYgVXNlOEJp
dEFkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVycyk7CisgICAgICAgICAgICBib29sIGhhdmVPbmVD
aGFyYWN0ZXJMZWZ0ID0gKC0tbV9jdXJyZW50U3RyaW5nLm1fbGVuZ3RoID09IDEpOwogCi1BTFdB
WVNfSU5MSU5FIFVDaGFyIFNlZ21lbnRlZFN0cmluZzo6U3Vic3RyaW5nOjpjdXJyZW50Q2hhcmFj
dGVyUHJlSW5jcmVtZW50KCkKLXsKLSAgICBBU1NFUlQobGVuZ3RoKTsKLSAgICByZXR1cm4gaXM4
Qml0ID8gKisrY3VycmVudENoYXJhY3RlcjggOiAqKytjdXJyZW50Q2hhcmFjdGVyMTY7Ci19Cisg
ICAgICAgICAgICBtX2N1cnJlbnRDaGFyID0gbV9jdXJyZW50U3RyaW5nLmluY3JlbWVudEFuZEdl
dEN1cnJlbnRDaGFyOCgpOwogCi1pbmxpbmUgU2VnbWVudGVkU3RyaW5nOjpTZWdtZW50ZWRTdHJp
bmcoU3RyaW5nJiYgc3RyaW5nKQotICAgIDogbV9jdXJyZW50U3Vic3RyaW5nKFdURk1vdmUoc3Ry
aW5nKSkKLXsKLSAgICBpZiAobV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0aCkgewotICAgICAgICBt
X2N1cnJlbnRDaGFyYWN0ZXIgPSBtX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3Rlcigp
OwotICAgICAgICB1cGRhdGVBZHZhbmNlRnVuY3Rpb25Qb2ludGVycygpOworICAgICAgICAgICAg
aWYgKCEoaGF2ZU5ld0xpbmUgfCBoYXZlT25lQ2hhcmFjdGVyTGVmdCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaGF2ZU5ld0xpbmUpIHsKKyAgICAgICAgICAg
ICAgICArK21fY3VycmVudExpbmU7CisgICAgICAgICAgICAgICAgbV9udW1iZXJPZkNoYXJhY3Rl
cnNDb25zdW1lZFByaW9yVG9DdXJyZW50TGluZSA9ICBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1
bWVkUHJpb3JUb0N1cnJlbnRTdHJpbmcgKyBtX2N1cnJlbnRTdHJpbmcubnVtYmVyT2ZDaGFyYWN0
ZXJzQ29uc3VtZWQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGhhdmVPbmVD
aGFyYWN0ZXJMZWZ0KQorICAgICAgICAgICAgICAgIHVwZGF0ZVNsb3dDYXNlRnVuY3Rpb25Qb2lu
dGVycygpOworCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAodGhp
cy0+Km1fYWR2YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jKSgpOwogICAgIH0KLX0KIAotaW5s
aW5lIFNlZ21lbnRlZFN0cmluZzo6U2VnbWVudGVkU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5n
KQotICAgIDogU2VnbWVudGVkU3RyaW5nKFN0cmluZyB7IHN0cmluZyB9KQotewotfQorICAgIHZv
aWQgYWR2YW5jZVBhc3ROb25OZXdsaW5lKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChjdXJyZW50
Q2hhcigpICE9ICdcbicpOworICAgICAgICBhZHZhbmNlKCk7CisgICAgfQogCi1BTFdBWVNfSU5M
SU5FIHZvaWQgU2VnbWVudGVkU3RyaW5nOjpkZWNyZW1lbnRBbmRDaGVja0xlbmd0aCgpCi17Ci0g
ICAgQVNTRVJUKG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggPiAxKTsKLSAgICBpZiAoVU5MSUtF
TFkoLS1tX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoID09IDEpKQotICAgICAgICB1cGRhdGVBZHZh
bmNlRnVuY3Rpb25Qb2ludGVyc0ZvclNpbmdsZUNoYXJhY3RlclN1YnN0cmluZygpOwotfQorICAg
IHZvaWQgYWR2YW5jZVBhc3ROZXdsaW5lQW5kVXBkYXRlTGluZU51bWJlcigpCisgICAgeworICAg
ICAgICBBU1NFUlQoY3VycmVudENoYXIoKSA9PSAnXG4nKTsKKyAgICAgICAgaWYgKCFtX3B1c2hl
ZENoYXIxICYmIG1fY3VycmVudFN0cmluZy5tX2xlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgIGlu
dCBuZXdMaW5lRmxhZyA9IG1fY3VycmVudFN0cmluZy5kb05vdEV4Y2x1ZGVMaW5lTnVtYmVycygp
OworICAgICAgICAgICAgbV9jdXJyZW50TGluZSArPSBuZXdMaW5lRmxhZzsKKyAgICAgICAgICAg
IGlmIChuZXdMaW5lRmxhZykKKyAgICAgICAgICAgICAgICBtX251bWJlck9mQ2hhcmFjdGVyc0Nv
bnN1bWVkUHJpb3JUb0N1cnJlbnRMaW5lID0gbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKSAr
IDE7CisgICAgICAgICAgICBkZWNyZW1lbnRBbmRDaGVja0xlbmd0aCgpOworICAgICAgICAgICAg
bV9jdXJyZW50Q2hhciA9IG1fY3VycmVudFN0cmluZy5pbmNyZW1lbnRBbmRHZXRDdXJyZW50Q2hh
cigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGFkdmFuY2VBbmRV
cGRhdGVMaW5lTnVtYmVyU2xvd0Nhc2UoKTsKKyAgICB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBT
ZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyKCkKLXsKLSAg
ICBpZiAoTElLRUxZKG1fZmFzdFBhdGhGbGFncyAmIFVzZThCaXRBZHZhbmNlKSkgewotICAgICAg
ICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSAqKyttX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJh
Y3Rlcjg7Ci0gICAgICAgIGRlY3JlbWVudEFuZENoZWNrTGVuZ3RoKCk7Ci0gICAgICAgIHJldHVy
bjsKKyAgICBpbnQgbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaW50IG51bWJlck9mUHVzaGVkQ2hhcmFjdGVycyA9IDA7CisgICAgICAgIGlmIChtX3B1
c2hlZENoYXIxKSB7CisgICAgICAgICAgICArK251bWJlck9mUHVzaGVkQ2hhcmFjdGVyczsKKyAg
ICAgICAgICAgIGlmIChtX3B1c2hlZENoYXIyKQorICAgICAgICAgICAgICAgICsrbnVtYmVyT2ZQ
dXNoZWRDaGFyYWN0ZXJzOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX251bWJlck9mQ2hh
cmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRTdHJpbmcgKyBtX2N1cnJlbnRTdHJpbmcubnVt
YmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKSAtIG51bWJlck9mUHVzaGVkQ2hhcmFjdGVyczsKICAg
ICB9CiAKLSAgICAodGhpcy0+Km1fYWR2YW5jZVdpdGhvdXRVcGRhdGluZ0xpbmVOdW1iZXJGdW5j
dGlvbikoKTsKLX0KKyAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKIAotaW5saW5lIHZvaWQg
U2VnbWVudGVkU3RyaW5nOjpzdGFydE5ld0xpbmUoKQotewotICAgICsrbV9jdXJyZW50TGluZTsK
LSAgICBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRMaW5lID0gbnVt
YmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKTsKLX0KKyAgICBVQ2hhciBjdXJyZW50Q2hhcigpIGNv
bnN0IHsgcmV0dXJuIG1fY3VycmVudENoYXI7IH0gICAgCiAKLWlubGluZSB2b2lkIFNlZ21lbnRl
ZFN0cmluZzo6cHJvY2Vzc1Bvc3NpYmxlTmV3bGluZSgpCi17Ci0gICAgaWYgKG1fY3VycmVudENo
YXJhY3RlciA9PSAnXG4nKQotICAgICAgICBzdGFydE5ld0xpbmUoKTsKLX0KKyAgICBPcmRpbmFs
TnVtYmVyIGN1cnJlbnRDb2x1bW4oKSBjb25zdDsKKyAgICBPcmRpbmFsTnVtYmVyIGN1cnJlbnRM
aW5lKCkgY29uc3Q7CiAKLWlubGluZSB2b2lkIFNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZSgpCi17
Ci0gICAgaWYgKExJS0VMWShtX2Zhc3RQYXRoRmxhZ3MgJiBVc2U4Qml0QWR2YW5jZSkpIHsKLSAg
ICAgICAgQVNTRVJUKG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggPiAxKTsKLSAgICAgICAgYm9v
bCBsYXN0Q2hhcmFjdGVyV2FzTmV3bGluZSA9IG1fY3VycmVudENoYXJhY3RlciA9PSAnXG4nOwot
ICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSAqKyttX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVu
dENoYXJhY3Rlcjg7Ci0gICAgICAgIGJvb2wgaGF2ZU9uZUNoYXJhY3RlckxlZnQgPSAtLW1fY3Vy
cmVudFN1YnN0cmluZy5sZW5ndGggPT0gMTsKLSAgICAgICAgaWYgKExJS0VMWSghKGxhc3RDaGFy
YWN0ZXJXYXNOZXdsaW5lIHwgaGF2ZU9uZUNoYXJhY3RlckxlZnQpKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgaWYgKGxhc3RDaGFyYWN0ZXJXYXNOZXdsaW5lICYgISEobV9mYXN0UGF0
aEZsYWdzICYgVXNlOEJpdEFkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVycykpCi0gICAgICAgICAg
ICBzdGFydE5ld0xpbmUoKTsKLSAgICAgICAgaWYgKGhhdmVPbmVDaGFyYWN0ZXJMZWZ0KQotICAg
ICAgICAgICAgdXBkYXRlQWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnNGb3JTaW5nbGVDaGFyYWN0ZXJT
dWJzdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAvLyBTZXRzIHZhbHVlIG9m
IGxpbmUvY29sdW1uIHZhcmlhYmxlcy4gQ29sdW1uIGlzIHNwZWNpZmllZCBpbmRpcmVjdGx5IGJ5
IGEgcGFyYW1ldGVyIGNvbHVtbkFmdGVyUHJvbG9nCisgICAgLy8gd2hpY2ggaXMgYSB2YWx1ZSBv
ZiBjb2x1bW4gdGhhdCB3ZSBzaG91bGQgZ2V0IGFmdGVyIGEgcHJvbG9nIChmaXJzdCBwcm9sb2dM
ZW5ndGggY2hhcmFjdGVycykgaGFzIGJlZW4gY29uc3VtZWQuCisgICAgdm9pZCBzZXRDdXJyZW50
UG9zaXRpb24oT3JkaW5hbE51bWJlciBsaW5lLCBPcmRpbmFsTnVtYmVyIGNvbHVtbkFmdGVyUHJv
bG9nLCBpbnQgcHJvbG9nTGVuZ3RoKTsKIAotICAgICh0aGlzLT4qbV9hZHZhbmNlQW5kVXBkYXRl
TGluZU51bWJlckZ1bmN0aW9uKSgpOwotfQorcHJpdmF0ZToKKyAgICBlbnVtIEZhc3RQYXRoRmxh
Z3MgeworICAgICAgICBOb0Zhc3RQYXRoID0gMCwKKyAgICAgICAgVXNlOEJpdEFkdmFuY2VBbmRV
cGRhdGVMaW5lTnVtYmVycyA9IDEgPDwgMCwKKyAgICAgICAgVXNlOEJpdEFkdmFuY2UgPSAxIDw8
IDEsCisgICAgfTsKIAotQUxXQVlTX0lOTElORSB2b2lkIFNlZ21lbnRlZFN0cmluZzo6YWR2YW5j
ZVBhc3ROb25OZXdsaW5lKCkKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50Q2hhcmFjdGVyICE9ICdc
bicpOwotICAgIGFkdmFuY2VXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyKCk7Ci19CisgICAgdm9p
ZCBhcHBlbmQoY29uc3QgU2VnbWVudGVkU3Vic3RyaW5nJik7CisgICAgdm9pZCBwdXNoQmFjayhj
b25zdCBTZWdtZW50ZWRTdWJzdHJpbmcmKTsKIAotaW5saW5lIHZvaWQgU2VnbWVudGVkU3RyaW5n
OjphZHZhbmNlUGFzdE5ld2xpbmUoKQotewotICAgIEFTU0VSVChtX2N1cnJlbnRDaGFyYWN0ZXIg
PT0gJ1xuJyk7Ci0gICAgaWYgKG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggPiAxKSB7Ci0gICAg
ICAgIGlmIChtX2N1cnJlbnRTdWJzdHJpbmcuZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMpCi0gICAg
ICAgICAgICBzdGFydE5ld0xpbmUoKTsKLSAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gbV9j
dXJyZW50U3Vic3RyaW5nLmN1cnJlbnRDaGFyYWN0ZXJQcmVJbmNyZW1lbnQoKTsKLSAgICAgICAg
ZGVjcmVtZW50QW5kQ2hlY2tMZW5ndGgoKTsKLSAgICAgICAgcmV0dXJuOworICAgIHZvaWQgYWR2
YW5jZTgoKTsKKyAgICB2b2lkIGFkdmFuY2UxNigpOworICAgIHZvaWQgYWR2YW5jZUFuZFVwZGF0
ZUxpbmVOdW1iZXI4KCk7CisgICAgdm9pZCBhZHZhbmNlQW5kVXBkYXRlTGluZU51bWJlcjE2KCk7
CisgICAgdm9pZCBhZHZhbmNlU2xvd0Nhc2UoKTsKKyAgICB2b2lkIGFkdmFuY2VBbmRVcGRhdGVM
aW5lTnVtYmVyU2xvd0Nhc2UoKTsKKyAgICB2b2lkIGFkdmFuY2VFbXB0eSgpOworICAgIHZvaWQg
YWR2YW5jZVN1YnN0cmluZygpOworICAgIAorICAgIHZvaWQgdXBkYXRlU2xvd0Nhc2VGdW5jdGlv
blBvaW50ZXJzKCk7CisKKyAgICB2b2lkIGRlY3JlbWVudEFuZENoZWNrTGVuZ3RoKCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnRTdHJpbmcubV9sZW5ndGggPiAxKTsKKyAgICAgICAg
aWYgKC0tbV9jdXJyZW50U3RyaW5nLm1fbGVuZ3RoID09IDEpCisgICAgICAgICAgICB1cGRhdGVT
bG93Q2FzZUZ1bmN0aW9uUG9pbnRlcnMoKTsKICAgICB9CiAKLSAgICAodGhpcy0+Km1fYWR2YW5j
ZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbikoKTsKLX0KKyAgICB2b2lkIHVwZGF0ZUFkdmFu
Y2VGdW5jdGlvblBvaW50ZXJzKCkKKyAgICB7CisgICAgICAgIGlmICgobV9jdXJyZW50U3RyaW5n
Lm1fbGVuZ3RoID4gMSkgJiYgIW1fcHVzaGVkQ2hhcjEpIHsKKyAgICAgICAgICAgIGlmIChtX2N1
cnJlbnRTdHJpbmcuaXM4Qml0KCkpIHsKKyAgICAgICAgICAgICAgICBtX2FkdmFuY2VGdW5jID0g
JlNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZTg7CisgICAgICAgICAgICAgICAgbV9mYXN0UGF0aEZs
YWdzID0gVXNlOEJpdEFkdmFuY2U7CisgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudFN0cmlu
Zy5kb05vdEV4Y2x1ZGVMaW5lTnVtYmVycygpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fYWR2
YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jID0gJlNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZUFu
ZFVwZGF0ZUxpbmVOdW1iZXI4OworICAgICAgICAgICAgICAgICAgICBtX2Zhc3RQYXRoRmxhZ3Mg
fD0gVXNlOEJpdEFkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyczsKKyAgICAgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9hZHZhbmNlQW5kVXBkYXRlTGluZU51bWJlckZ1
bmMgPSAmU2VnbWVudGVkU3RyaW5nOjphZHZhbmNlODsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CiAKLWlubGluZSB1bnNpZ25lZCBTZWdtZW50ZWRTdHJpbmc6Om51bWJl
ck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9udW1iZXJPZkNo
YXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50U3Vic3RyaW5nICsgbV9jdXJyZW50U3Vic3Ry
aW5nLm51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCk7Ci19CisgICAgICAgICAgICBtX2FkdmFu
Y2VGdW5jID0gJlNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZTE2OworICAgICAgICAgICAgbV9mYXN0
UGF0aEZsYWdzID0gTm9GYXN0UGF0aDsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnRTdHJpbmcu
ZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMoKSkKKyAgICAgICAgICAgICAgICBtX2FkdmFuY2VBbmRV
cGRhdGVMaW5lTnVtYmVyRnVuYyA9ICZTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VBbmRVcGRhdGVM
aW5lTnVtYmVyMTY7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9hZHZhbmNl
QW5kVXBkYXRlTGluZU51bWJlckZ1bmMgPSAmU2VnbWVudGVkU3RyaW5nOjphZHZhbmNlMTY7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1fY3VycmVudFN0
cmluZy5tX2xlbmd0aCAmJiAhaXNDb21wb3NpdGUoKSkgeworICAgICAgICAgICAgbV9hZHZhbmNl
RnVuYyA9ICZTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VFbXB0eTsKKyAgICAgICAgICAgIG1fZmFz
dFBhdGhGbGFncyA9IE5vRmFzdFBhdGg7CisgICAgICAgICAgICBtX2FkdmFuY2VBbmRVcGRhdGVM
aW5lTnVtYmVyRnVuYyA9ICZTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VFbXB0eTsKKyAgICAgICAg
fQorCisgICAgICAgIHVwZGF0ZVNsb3dDYXNlRnVuY3Rpb25Qb2ludGVycygpOworICAgIH0KKwor
ICAgIC8vIFdyaXRlcyBjb25zdW1lZCBjaGFyYWN0ZXJzIGludG8gY29uc3VtZWRDaGFyYWN0ZXJz
LCB3aGljaCBtdXN0IGhhdmUgc3BhY2UgZm9yIGF0IGxlYXN0IHxjb3VudHwgY2hhcmFjdGVycy4K
KyAgICB2b2lkIGFkdmFuY2VQYXN0Tm9uTmV3bGluZXModW5zaWduZWQgY291bnQpOworICAgIHZv
aWQgYWR2YW5jZVBhc3ROb25OZXdsaW5lcyh1bnNpZ25lZCBjb3VudCwgVUNoYXIqIGNvbnN1bWVk
Q2hhcmFjdGVycyk7CisKKyAgICBBZHZhbmNlUGFzdFJlc3VsdCBhZHZhbmNlUGFzdChjb25zdCBj
aGFyKiBsaXRlcmFsLCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgY2FzZVNlbnNpdGl2ZSk7CisgICAg
QWR2YW5jZVBhc3RSZXN1bHQgYWR2YW5jZVBhc3RTbG93Q2FzZShjb25zdCBjaGFyKiBsaXRlcmFs
LCBib29sIGNhc2VTZW5zaXRpdmUpOworCisgICAgYm9vbCBpc0NvbXBvc2l0ZSgpIGNvbnN0IHsg
cmV0dXJuICFtX3N1YnN0cmluZ3MuaXNFbXB0eSgpOyB9CisKKyAgICBVQ2hhciBtX3B1c2hlZENo
YXIxOworICAgIFVDaGFyIG1fcHVzaGVkQ2hhcjI7CisgICAgU2VnbWVudGVkU3Vic3RyaW5nIG1f
Y3VycmVudFN0cmluZzsKKyAgICBVQ2hhciBtX2N1cnJlbnRDaGFyOworICAgIGludCBtX251bWJl
ck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRTdHJpbmc7CisgICAgaW50IG1fbnVt
YmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudExpbmU7CisgICAgaW50IG1fY3Vy
cmVudExpbmU7CisgICAgRGVxdWU8U2VnbWVudGVkU3Vic3RyaW5nPiBtX3N1YnN0cmluZ3M7Cisg
ICAgYm9vbCBtX2Nsb3NlZDsKKyAgICBib29sIG1fZW1wdHk7CisgICAgdW5zaWduZWQgY2hhciBt
X2Zhc3RQYXRoRmxhZ3M7CisgICAgdm9pZCAoU2VnbWVudGVkU3RyaW5nOjoqbV9hZHZhbmNlRnVu
YykoKTsKKyAgICB2b2lkIChTZWdtZW50ZWRTdHJpbmc6OiptX2FkdmFuY2VBbmRVcGRhdGVMaW5l
TnVtYmVyRnVuYykoKTsKK307CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IEFM
V0FZU19JTkxJTkUgYm9vbCBTZWdtZW50ZWRTdHJpbmc6OmNoYXJhY3Rlck1pc21hdGNoKENoYXJh
Y3RlclR5cGUgYSwgY2hhciBiLCBib29sIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSkKK2lubGlu
ZSB2b2lkIFNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZVBhc3ROb25OZXdsaW5lcyh1bnNpZ25lZCBj
b3VudCkKIHsKLSAgICByZXR1cm4gbGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlID8gIWlzQVNDSUlB
bHBoYUNhc2VsZXNzRXF1YWwoYSwgYikgOiBhICE9IGI7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIGFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwogfQog
Ci10ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGhJbmNsdWRpbmdUZXJtaW5hdG9yLCBib29sIGxldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZT4gU2VnbWVudGVkU3RyaW5nOjpBZHZhbmNlUGFzdFJlc3VsdCBT
ZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VQYXN0KGNvbnN0IGNoYXIgKCZsaXRlcmFsKVtsZW5ndGhJ
bmNsdWRpbmdUZXJtaW5hdG9yXSkKK2lubGluZSBTZWdtZW50ZWRTdHJpbmc6OkFkdmFuY2VQYXN0
UmVzdWx0IFNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZVBhc3QoY29uc3QgY2hhciogbGl0ZXJhbCwg
dW5zaWduZWQgbGVuZ3RoLCBib29sIGNhc2VTZW5zaXRpdmUpCiB7Ci0gICAgY29uc3RleHByIHVu
c2lnbmVkIGxlbmd0aCA9IGxlbmd0aEluY2x1ZGluZ1Rlcm1pbmF0b3IgLSAxOwotICAgIEFTU0VS
VCghbGl0ZXJhbFtsZW5ndGhdKTsKKyAgICBBU1NFUlQoc3RybGVuKGxpdGVyYWwpID09IGxlbmd0
aCk7CiAgICAgQVNTRVJUKCFzdHJjaHIobGl0ZXJhbCwgJ1xuJykpOwotICAgIGlmIChsZW5ndGgg
KyAxIDwgbV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0aCkgewotICAgICAgICBpZiAobV9jdXJyZW50
U3Vic3RyaW5nLmlzOEJpdCkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoYXJhY3Rlck1pc21hdGNoKG1f
Y3VycmVudFN1YnN0cmluZy5jdXJyZW50Q2hhcmFjdGVyOFtpXSwgbGl0ZXJhbFtpXSwgbGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERpZE5vdE1h
dGNoOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9jdXJyZW50U3Vic3RyaW5nLmN1cnJl
bnRDaGFyYWN0ZXI4ICs9IGxlbmd0aDsKLSAgICAgICAgICAgIG1fY3VycmVudENoYXJhY3RlciA9
ICptX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3Rlcjg7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyTWlzbWF0Y2gobV9jdXJyZW50U3Vic3RyaW5nLmN1
cnJlbnRDaGFyYWN0ZXIxNltpXSwgbGl0ZXJhbFtpXSwgbGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERpZE5vdE1hdGNoOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgbV9jdXJyZW50U3Vic3RyaW5nLmN1cnJlbnRDaGFyYWN0ZXIxNiArPSBs
ZW5ndGg7Ci0gICAgICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSAqbV9jdXJyZW50U3Vic3Ry
aW5nLmN1cnJlbnRDaGFyYWN0ZXIxNjsKKyAgICBpZiAoIW1fcHVzaGVkQ2hhcjEpIHsKKyAgICAg
ICAgaWYgKGxlbmd0aCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jdXJyZW50U3RyaW5nLm1f
bGVuZ3RoKSkgeworICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRTdHJpbmcuY3VycmVudFN1YlN0
cmluZyhsZW5ndGgpLnN0YXJ0c1dpdGgobGl0ZXJhbCwgY2FzZVNlbnNpdGl2ZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIERpZE5vdE1hdGNoOworICAgICAgICAgICAgYWR2YW5jZVBhc3ROb25O
ZXdsaW5lcyhsZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIERpZE1hdGNoOwogICAgICAgICB9
Ci0gICAgICAgIG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggLT0gbGVuZ3RoOwotICAgICAgICBy
ZXR1cm4gRGlkTWF0Y2g7CiAgICAgfQotICAgIHJldHVybiBhZHZhbmNlUGFzdFNsb3dDYXNlKGxp
dGVyYWwsIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSk7CisgICAgcmV0dXJuIGFkdmFuY2VQYXN0
U2xvd0Nhc2UobGl0ZXJhbCwgY2FzZVNlbnNpdGl2ZSk7CiB9CiAKLWlubGluZSB2b2lkIFNlZ21l
bnRlZFN0cmluZzo6dXBkYXRlQWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnMoKQotewotICAgIGlmICht
X2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoID4gMSkgewotICAgICAgICBpZiAobV9jdXJyZW50U3Vi
c3RyaW5nLmlzOEJpdCkgewotICAgICAgICAgICAgbV9mYXN0UGF0aEZsYWdzID0gVXNlOEJpdEFk
dmFuY2U7Ci0gICAgICAgICAgICBpZiAobV9jdXJyZW50U3Vic3RyaW5nLmRvTm90RXhjbHVkZUxp
bmVOdW1iZXJzKQotICAgICAgICAgICAgICAgIG1fZmFzdFBhdGhGbGFncyB8PSBVc2U4Qml0QWR2
YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJzOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIG1fZmFzdFBhdGhGbGFncyA9IE5vRmFzdFBhdGg7Ci0gICAgICAgIG1fYWR2YW5j
ZVdpdGhvdXRVcGRhdGluZ0xpbmVOdW1iZXJGdW5jdGlvbiA9ICZTZWdtZW50ZWRTdHJpbmc6OmFk
dmFuY2VXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyMTY7Ci0gICAgICAgIGlmIChtX2N1cnJlbnRT
dWJzdHJpbmcuZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMpCi0gICAgICAgICAgICBtX2FkdmFuY2VB
bmRVcGRhdGVMaW5lTnVtYmVyRnVuY3Rpb24gPSAmU2VnbWVudGVkU3RyaW5nOjphZHZhbmNlQW5k
VXBkYXRlTGluZU51bWJlcjE2OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2FkdmFuY2VB
bmRVcGRhdGVMaW5lTnVtYmVyRnVuY3Rpb24gPSAmU2VnbWVudGVkU3RyaW5nOjphZHZhbmNlV2l0
aG91dFVwZGF0aW5nTGluZU51bWJlcjE2OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKCFtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoKSB7Ci0gICAgICAgIHVwZGF0ZUFkdmFuY2VG
dW5jdGlvblBvaW50ZXJzRm9yRW1wdHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzRm9yU2luZ2xlQ2hhcmFjdGVyU3Vi
c3RyaW5nKCk7CiB9CiAKLX0KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1s
L3BhcnNlci9DaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVzLmggYi9Tb3VyY2UvV2ViQ29y
ZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaAppbmRleCA3Njg2
MjY4M2ZiYmRiZTlhOTBkZDEzMjE4MDk3NWM4MWVlYmUzMGMxLi4zYjM2MjZhMWU2MThmYjNkOTVm
YTM2ZTU1ZjUzNDY1MmRiNWMyYmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFy
c2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaApAQCAtMzAsOSAr
MzAsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWlubGluZSB2b2lkIHVuY29uc3VtZUNo
YXJhY3RlcnMoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIFN0cmluZ0J1aWxkZXImIGNvbnN1bWVk
Q2hhcmFjdGVycykKK2lubGluZSB2b2lkIHVuY29uc3VtZUNoYXJhY3RlcnMoU2VnbWVudGVkU3Ry
aW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZ0J1aWxkZXImIGNvbnN1bWVkQ2hhcmFjdGVycykKIHsK
LSAgICBzb3VyY2UucHVzaEJhY2soY29uc3VtZWRDaGFyYWN0ZXJzLnRvU3RyaW5nKCkpOworICAg
IHNvdXJjZS5wdXNoQmFjayhTZWdtZW50ZWRTdHJpbmcoY29uc3VtZWRDaGFyYWN0ZXJzLnRvU3Ry
aW5nUHJlc2VydmVDYXBhY2l0eSgpKSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBQYXJzZXJG
dW5jdGlvbnM+CkBAIC01Niw3ICs1Niw3IEBAIGJvb2wgY29uc3VtZUNoYXJhY3RlclJlZmVyZW5j
ZShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgU3RyaW5nQnVpbGRlciYgZGVjb2RlZENoCiAgICAg
U3RyaW5nQnVpbGRlciBjb25zdW1lZENoYXJhY3RlcnM7CiAgICAgCiAgICAgd2hpbGUgKCFzb3Vy
Y2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHNvdXJjZS5jdXJyZW50
Q2hhcmFjdGVyKCk7CisgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHNvdXJjZS5jdXJyZW50Q2hh
cigpOwogICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CiAgICAgICAgIGNhc2UgSW5pdGlhbDoKICAg
ICAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJ1x4MDknIHx8IGNoYXJhY3RlciA9PSAnXHgwQScg
fHwgY2hhcmFjdGVyID09ICdceDBDJyB8fCBjaGFyYWN0ZXIgPT0gJyAnIHx8IGNoYXJhY3RlciA9
PSAnPCcgfHwgY2hhcmFjdGVyID09ICcmJykKQEAgLTg1LDIxICs4NSwyMSBAQCBib29sIGNvbnN1
bWVDaGFyYWN0ZXJSZWZlcmVuY2UoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIFN0cmluZ0J1aWxk
ZXImIGRlY29kZWRDaAogICAgICAgICAgICAgICAgIHN0YXRlID0gRGVjaW1hbDsKICAgICAgICAg
ICAgICAgICBnb3RvIERlY2ltYWw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzb3VyY2Uu
cHVzaEJhY2soQVNDSUlMaXRlcmFsKCIjIikpOworICAgICAgICAgICAgc291cmNlLnB1c2hCYWNr
KFNlZ21lbnRlZFN0cmluZyhBU0NJSUxpdGVyYWwoIiMiKSkpOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBjYXNlIE1heWJlSGV4TG93ZXJDYXNlWDoKICAgICAgICAgICAgIGlm
IChpc0FTQ0lJSGV4RGlnaXQoY2hhcmFjdGVyKSkgewogICAgICAgICAgICAgICAgIHN0YXRlID0g
SGV4OwogICAgICAgICAgICAgICAgIGdvdG8gSGV4OwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgc291cmNlLnB1c2hCYWNrKEFTQ0lJTGl0ZXJhbCgiI3giKSk7CisgICAgICAgICAgICBzb3Vy
Y2UucHVzaEJhY2soU2VnbWVudGVkU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiI3giKSkpOwogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIE1heWJlSGV4VXBwZXJDYXNlWDoKICAg
ICAgICAgICAgIGlmIChpc0FTQ0lJSGV4RGlnaXQoY2hhcmFjdGVyKSkgewogICAgICAgICAgICAg
ICAgIHN0YXRlID0gSGV4OwogICAgICAgICAgICAgICAgIGdvdG8gSGV4OwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgc291cmNlLnB1c2hCYWNrKEFTQ0lJTGl0ZXJhbCgiI1giKSk7CisgICAg
ICAgICAgICBzb3VyY2UucHVzaEJhY2soU2VnbWVudGVkU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiI1gi
KSkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEhleDoKICAgICAg
ICAgSGV4OgpAQCAtMTEwLDcgKzExMCw3IEBAIGJvb2wgY29uc3VtZUNoYXJhY3RlclJlZmVyZW5j
ZShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgU3RyaW5nQnVpbGRlciYgZGVjb2RlZENoCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoY2hhcmFj
dGVyID09ICc7JykgewotICAgICAgICAgICAgICAgIHNvdXJjZS5hZHZhbmNlUGFzdE5vbk5ld2xp
bmUoKTsKKyAgICAgICAgICAgICAgICBzb3VyY2UuYWR2YW5jZSgpOwogICAgICAgICAgICAgICAg
IGRlY29kZWRDaGFyYWN0ZXIuYXBwZW5kKFBhcnNlckZ1bmN0aW9uczo6bGVnYWxFbnRpdHlGb3Io
b3ZlcmZsb3cgPyAwIDogcmVzdWx0KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICB9CkBAIC0xMjksNyArMTI5LDcgQEAgYm9vbCBjb25zdW1lQ2hhcmFjdGVyUmVm
ZXJlbmNlKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBTdHJpbmdCdWlsZGVyJiBkZWNvZGVkQ2gK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChj
aGFyYWN0ZXIgPT0gJzsnKSB7Ci0gICAgICAgICAgICAgICAgc291cmNlLmFkdmFuY2VQYXN0Tm9u
TmV3bGluZSgpOworICAgICAgICAgICAgICAgIHNvdXJjZS5hZHZhbmNlKCk7CiAgICAgICAgICAg
ICAgICAgZGVjb2RlZENoYXJhY3Rlci5hcHBlbmQoUGFyc2VyRnVuY3Rpb25zOjpsZWdhbEVudGl0
eUZvcihvdmVyZmxvdyA/IDAgOiByZXN1bHQpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgICAgIH0KQEAgLTE0NCw3ICsxNDQsNyBAQCBib29sIGNvbnN1bWVDaGFyYWN0
ZXJSZWZlcmVuY2UoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIFN0cmluZ0J1aWxkZXImIGRlY29k
ZWRDaAogICAgICAgICAgICAgcmV0dXJuIFBhcnNlckZ1bmN0aW9uczo6Y29uc3VtZU5hbWVkRW50
aXR5KHNvdXJjZSwgZGVjb2RlZENoYXJhY3Rlciwgbm90RW5vdWdoQ2hhcmFjdGVycywgYWRkaXRp
b25hbEFsbG93ZWRDaGFyYWN0ZXIsIGNoYXJhY3Rlcik7CiAgICAgICAgIH0KICAgICAgICAgY29u
c3VtZWRDaGFyYWN0ZXJzLmFwcGVuZChjaGFyYWN0ZXIpOwotICAgICAgICBzb3VyY2UuYWR2YW5j
ZVBhc3ROb25OZXdsaW5lKCk7CisgICAgICAgIHNvdXJjZS5hZHZhbmNlKCk7CiAgICAgfQogICAg
IEFTU0VSVChzb3VyY2UuaXNFbXB0eSgpKTsKICAgICBub3RFbm91Z2hDaGFyYWN0ZXJzID0gdHJ1
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVy
SW5saW5lcy5oIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tlbml6ZXJJbmxp
bmVzLmgKaW5kZXggNThlZjEwNmFlNGQ0MTVmMDNhYmZmNzIzNjU4MWFkOGZiY2Q4NDYxMC4uZjJh
MmYyNjkwY2RkNWY1NWNmYWJhMTRlMjBkNmM5ZDA4OGI0NGQ0NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tlbml6ZXJJbmxpbmVzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tlbml6ZXJJbmxpbmVzLmgKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE1IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4g
aHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgpAQCAtMjcsNiArMjcsOCBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgorCiAjaWYgQ09NUElMRVIo
TVNWQykKIC8vIERpc2FibGUgdGhlICJ1bnJlYWNoYWJsZSBjb2RlIiB3YXJuaW5nIHNvIHdlIGNh
biBjb21waWxlIHRoZSBBU1NFUlRfTk9UX1JFQUNIRUQgaW4gdGhlIEVORF9TVEFURSBtYWNyby4K
ICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAyKQpAQCAtNDIsNyArNDQsNyBAQCBpbmxpbmUg
Ym9vbCBpc1Rva2VuaXplcldoaXRlc3BhY2UoVUNoYXIgY2hhcmFjdGVyKQogI2RlZmluZSBCRUdJ
Tl9TVEFURShzdGF0ZU5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICBjYXNlIHN0YXRlTmFtZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCiAgICAgc3RhdGVOYW1lOiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICBjb25zdGV4cHIgYXV0byBjdXJyZW50U3RhdGUgPSBz
dGF0ZU5hbWU7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY29uc3QgYXV0byBjdXJyZW50U3Rh
dGUgPSBzdGF0ZU5hbWU7ICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIFVOVVNFRF9QQVJB
TShjdXJyZW50U3RhdGUpOwogCiAjZGVmaW5lIEVORF9TVEFURSgpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNzIsMTUgKzc0LDYgQEAgaW5saW5lIGJv
b2wgaXNUb2tlbml6ZXJXaGl0ZXNwYWNlKFVDaGFyIGNoYXJhY3RlcikKICAgICAgICAgY2hhcmFj
dGVyID0gbV9wcmVwcm9jZXNzb3IubmV4dElucHV0Q2hhcmFjdGVyKCk7ICAgICAgICBcCiAgICAg
ICAgIGdvdG8gbmV3U3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgIH0gd2hpbGUgKGZhbHNlKQotI2RlZmluZSBBRFZBTkNFX1BBU1RfTk9OX05FV0xJ
TkVfVE8obmV3U3RhdGUpICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlm
ICghbV9wcmVwcm9jZXNzb3IuYWR2YW5jZVBhc3ROb25OZXdsaW5lKHNvdXJjZSwgaXNOdWxsQ2hh
cmFjdGVyU2tpcHBpbmdTdGF0ZShuZXdTdGF0ZSkpKSB7IFwKLSAgICAgICAgICAgIG1fc3RhdGUg
PSBuZXdTdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICByZXR1cm4gaGF2ZUJ1ZmZlcmVkQ2hhcmFjdGVyVG9rZW4oKTsgICAgICAgICAgICAgICAgXAot
ICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgY2hhcmFjdGVyID0gbV9wcmVwcm9jZXNzb3IubmV4dElucHV0Q2hh
cmFjdGVyKCk7ICAgICAgICBcCi0gICAgICAgIGdvdG8gbmV3U3RhdGU7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKGZhbHNlKQogCiAvLyBG
b3IgbW9yZSBjb21wbGV4IGNhc2VzLCBjYWxsZXIgY29uc3VtZXMgdGhlIGNoYXJhY3RlcnMgZmly
c3QgYW5kIHRoZW4gdXNlcyB0aGlzIG1hY3JvLgogI2RlZmluZSBTV0lUQ0hfVE8obmV3U3RhdGUp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHAKaW5kZXggOTI2MDVmYzAyMzVjN2Fl
ZmJlNzZhYzg2MWUwZjg1ZjZlOGE1ZGE4Zi4uY2UyMDEwNDlkMjliMDExOTZkYzEwOWM5MmUwNjFl
ZDg5MzY3NjJhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1
bWVudFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVu
dFBhcnNlci5jcHAKQEAgLTEwMCwxNSArMTAwLDE0IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6
OmNsZWFyQ3VycmVudE5vZGVTdGFjaygpCiAgICAgfQogfQogCi12b2lkIFhNTERvY3VtZW50UGFy
c2VyOjppbnNlcnQoU2VnbWVudGVkU3RyaW5nJiYpCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpp
bnNlcnQoY29uc3QgU2VnbWVudGVkU3RyaW5nJikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAogdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6YXBwZW5kKFJlZlB0cjxTdHJpbmdJbXBs
PiYmIGlucHV0U291cmNlKQogewotICAgIFN0cmluZyBzb3VyY2UgeyBXVEZNb3ZlKGlucHV0U291
cmNlKSB9OwotCisgICAgU2VnbWVudGVkU3RyaW5nIHNvdXJjZShXVEZNb3ZlKGlucHV0U291cmNl
KSk7CiAgICAgaWYgKG1fc2F3WFNMVHJhbnNmb3JtIHx8ICFtX3Nhd0ZpcnN0RWxlbWVudCkKICAg
ICAgICAgbV9vcmlnaW5hbFNvdXJjZUZvclRyYW5zZm9ybS5hcHBlbmQoc291cmNlKTsKIApAQCAt
MTIwLDcgKzExOSw3IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmFwcGVuZChSZWZQdHI8U3Ry
aW5nSW1wbD4mJiBpbnB1dFNvdXJjZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGRv
V3JpdGUoc291cmNlKTsKKyAgICBkb1dyaXRlKHNvdXJjZS50b1N0cmluZygpKTsKIAogICAgIC8v
IEFmdGVyIHBhcnNpbmcsIGRpc3BhdGNoIGltYWdlIGJlZm9yZWxvYWQgZXZlbnRzLgogICAgIElt
YWdlTG9hZGVyOjpkaXNwYXRjaFBlbmRpbmdCZWZvcmVMb2FkRXZlbnRzKCk7CkBAIC0xNTMsNiAr
MTUyLDcgQEAgc3RhdGljIGlubGluZSBTdHJpbmcgdG9TdHJpbmcoY29uc3QgeG1sQ2hhciogc3Ry
aW5nLCBzaXplX3Qgc2l6ZSkKICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChyZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihzdHJpbmcpLCBzaXplKTsgCiB9CiAKKwogYm9vbCBYTUxEb2N1
bWVudFBhcnNlcjo6dXBkYXRlTGVhZlRleHROb2RlKCkKIHsKICAgICBpZiAoaXNTdG9wcGVkKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2Vy
LmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmgKaW5kZXgg
MjBiY2U0YTA2NDkwOWZiYWVjYmFmYWQ5M2Y0YWZlNTIwYTA3YjdhOS4uYzY5MTc2ODU0MGY4ZjA4
ZTFkOWRiODVhMDAzMzdhMWVhZmRkMGNlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1s
L3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJz
ZXIvWE1MRG9jdW1lbnRQYXJzZXIuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDAgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAw
NS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcpCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKQEAgLTI5LDE2MiArMjks
MTYzIEBACiAjaW5jbHVkZSAiU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmgiCiAjaW5jbHVkZSAi
U2VnbWVudGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiWE1MRXJyb3JzLmgiCi0jaW5jbHVkZSA8bGli
eG1sL3RyZWUuaD4KLSNpbmNsdWRlIDxsaWJ4bWwveG1sc3RyaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCisjaW5jbHVkZSA8bGlieG1sL3RyZWUuaD4KKyNp
bmNsdWRlIDxsaWJ4bWwveG1sc3RyaW5nLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgQ29udGFpbmVyTm9kZTsKIGNsYXNzIENhY2hlZFJlc291cmNlTG9hZGVyOwogY2xhc3MgRG9j
dW1lbnRGcmFnbWVudDsKK2NsYXNzIERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZy
YW1lVmlldzsKIGNsYXNzIFBlbmRpbmdDYWxsYmFja3M7CitjbGFzcyBQZW5kaW5nU2NyaXB0Owog
Y2xhc3MgVGV4dDsKIAotY2xhc3MgWE1MUGFyc2VyQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVk
PFhNTFBhcnNlckNvbnRleHQ+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPFhNTFBhcnNl
ckNvbnRleHQ+IGNyZWF0ZU1lbW9yeVBhcnNlcih4bWxTQVhIYW5kbGVyUHRyLCB2b2lkKiB1c2Vy
RGF0YSwgY29uc3QgQ1N0cmluZyYgY2h1bmspOwotICAgIHN0YXRpYyBSZWY8WE1MUGFyc2VyQ29u
dGV4dD4gY3JlYXRlU3RyaW5nUGFyc2VyKHhtbFNBWEhhbmRsZXJQdHIsIHZvaWQqIHVzZXJEYXRh
KTsKLSAgICB+WE1MUGFyc2VyQ29udGV4dCgpOwotICAgIHhtbFBhcnNlckN0eHRQdHIgY29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQotCi1wcml2YXRlOgotICAgIFhNTFBhcnNl
ckNvbnRleHQoeG1sUGFyc2VyQ3R4dFB0ciBjb250ZXh0KQotICAgICAgICA6IG1fY29udGV4dChj
b250ZXh0KQotICAgIHsKLSAgICB9Ci0gICAgeG1sUGFyc2VyQ3R4dFB0ciBtX2NvbnRleHQ7Ci19
OwotCi1jbGFzcyBYTUxEb2N1bWVudFBhcnNlciBmaW5hbCA6IHB1YmxpYyBTY3JpcHRhYmxlRG9j
dW1lbnRQYXJzZXIsIHB1YmxpYyBQZW5kaW5nU2NyaXB0Q2xpZW50IHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFhNTERvY3VtZW50UGFyc2Vy
PiBjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBGcmFtZVZpZXcqIHZpZXcpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBYTUxEb2N1bWVudFBhcnNlcihkb2N1bWVudCwgdmll
dykpOwotICAgIH0KLSAgICBzdGF0aWMgUmVmPFhNTERvY3VtZW50UGFyc2VyPiBjcmVhdGUoRG9j
dW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIEVsZW1lbnQqIGVsZW1lbnQsIFBhcnNlckNvbnRlbnRQ
b2xpY3kgcGFyc2VyQ29udGVudFBvbGljeSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFhNTERvY3VtZW50UGFyc2VyKGZyYWdtZW50LCBlbGVtZW50LCBwYXJzZXJDb250ZW50
UG9saWN5KSk7Ci0gICAgfQotCi0gICAgflhNTERvY3VtZW50UGFyc2VyKCk7Ci0KLSAgICAvLyBF
eHBvc2VkIGZvciBjYWxsYmFja3M6Ci0gICAgdm9pZCBoYW5kbGVFcnJvcihYTUxFcnJvcnM6OkVy
cm9yVHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSwgVGV4dFBvc2l0aW9uKTsKLQotICAgIHZvaWQg
c2V0SXNYSFRNTERvY3VtZW50KGJvb2wgaXNYSFRNTCkgeyBtX2lzWEhUTUxEb2N1bWVudCA9IGlz
WEhUTUw7IH0KLSAgICBib29sIGlzWEhUTUxEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNY
SFRNTERvY3VtZW50OyB9CisgICAgY2xhc3MgWE1MUGFyc2VyQ29udGV4dCA6IHB1YmxpYyBSZWZD
b3VudGVkPFhNTFBhcnNlckNvbnRleHQ+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBS
ZWZQdHI8WE1MUGFyc2VyQ29udGV4dD4gY3JlYXRlTWVtb3J5UGFyc2VyKHhtbFNBWEhhbmRsZXJQ
dHIsIHZvaWQqIHVzZXJEYXRhLCBjb25zdCBDU3RyaW5nJiBjaHVuayk7CisgICAgICAgIHN0YXRp
YyBSZWY8WE1MUGFyc2VyQ29udGV4dD4gY3JlYXRlU3RyaW5nUGFyc2VyKHhtbFNBWEhhbmRsZXJQ
dHIsIHZvaWQqIHVzZXJEYXRhKTsKKyAgICAgICAgflhNTFBhcnNlckNvbnRleHQoKTsKKyAgICAg
ICAgeG1sUGFyc2VyQ3R4dFB0ciBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0OyB9
CiAKLSAgICBzdGF0aWMgYm9vbCBwYXJzZURvY3VtZW50RnJhZ21lbnQoY29uc3QgU3RyaW5nJiwg
RG9jdW1lbnRGcmFnbWVudCYsIEVsZW1lbnQqIHBhcmVudCA9IG51bGxwdHIsIFBhcnNlckNvbnRl
bnRQb2xpY3kgPSBBbGxvd1NjcmlwdGluZ0NvbnRlbnQpOworICAgIHByaXZhdGU6CisgICAgICAg
IFhNTFBhcnNlckNvbnRleHQoeG1sUGFyc2VyQ3R4dFB0ciBjb250ZXh0KQorICAgICAgICAgICAg
OiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIHhtbFBh
cnNlckN0eHRQdHIgbV9jb250ZXh0OworICAgIH07CiAKLSAgICAvLyBVc2VkIGJ5IFhNTEh0dHBS
ZXF1ZXN0IHRvIGNoZWNrIGlmIHRoZSByZXNwb25zZVhNTCB3YXMgd2VsbCBmb3JtZWQuCi0gICAg
Ym9vbCB3ZWxsRm9ybWVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIW1fc2F3RXJyb3I7IH0KKyAg
ICBjbGFzcyBYTUxEb2N1bWVudFBhcnNlciBmaW5hbCA6IHB1YmxpYyBTY3JpcHRhYmxlRG9jdW1l
bnRQYXJzZXIsIHB1YmxpYyBQZW5kaW5nU2NyaXB0Q2xpZW50IHsKKyAgICAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUmVmPFhNTERvY3Vt
ZW50UGFyc2VyPiBjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBGcmFtZVZpZXcqIHZpZXcpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFhNTERvY3VtZW50UGFy
c2VyKGRvY3VtZW50LCB2aWV3KSk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIFJlZjxYTUxE
b2N1bWVudFBhcnNlcj4gY3JlYXRlKERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBFbGVtZW50
KiBlbGVtZW50LCBQYXJzZXJDb250ZW50UG9saWN5IHBhcnNlckNvbnRlbnRQb2xpY3kpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFhNTERvY3VtZW50UGFyc2Vy
KGZyYWdtZW50LCBlbGVtZW50LCBwYXJzZXJDb250ZW50UG9saWN5KSk7CisgICAgICAgIH0KKwor
ICAgICAgICB+WE1MRG9jdW1lbnRQYXJzZXIoKTsKIAotICAgIHN0YXRpYyBib29sIHN1cHBvcnRz
WE1MVmVyc2lvbihjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgLy8gRXhwb3NlZCBmb3IgY2FsbGJh
Y2tzOgorICAgICAgICB2b2lkIGhhbmRsZUVycm9yKFhNTEVycm9yczo6RXJyb3JUeXBlLCBjb25z
dCBjaGFyKiBtZXNzYWdlLCBUZXh0UG9zaXRpb24pOwogCi1wcml2YXRlOgotICAgIGV4cGxpY2l0
IFhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50JiwgRnJhbWVWaWV3KiA9IG51bGxwdHIpOwotICAg
IFhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQmLCBFbGVtZW50KiwgUGFyc2VyQ29u
dGVudFBvbGljeSk7CisgICAgICAgIHZvaWQgc2V0SXNYSFRNTERvY3VtZW50KGJvb2wgaXNYSFRN
TCkgeyBtX2lzWEhUTUxEb2N1bWVudCA9IGlzWEhUTUw7IH0KKyAgICAgICAgYm9vbCBpc1hIVE1M
RG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lzWEhUTUxEb2N1bWVudDsgfQogCi0gICAgdm9p
ZCBpbnNlcnQoU2VnbWVudGVkU3RyaW5nJiYpIGZpbmFsOwotICAgIHZvaWQgYXBwZW5kKFJlZlB0
cjxTdHJpbmdJbXBsPiYmKSBmaW5hbDsKLSAgICB2b2lkIGZpbmlzaCgpIGZpbmFsOwotICAgIGJv
b2wgaXNXYWl0aW5nRm9yU2NyaXB0cygpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgc3RvcFBhcnNp
bmcoKSBmaW5hbDsKLSAgICB2b2lkIGRldGFjaCgpIGZpbmFsOworICAgICAgICBzdGF0aWMgYm9v
bCBwYXJzZURvY3VtZW50RnJhZ21lbnQoY29uc3QgU3RyaW5nJiwgRG9jdW1lbnRGcmFnbWVudCYs
IEVsZW1lbnQqIHBhcmVudCA9IG51bGxwdHIsIFBhcnNlckNvbnRlbnRQb2xpY3kgPSBBbGxvd1Nj
cmlwdGluZ0NvbnRlbnQpOwogCi0gICAgVGV4dFBvc2l0aW9uIHRleHRQb3NpdGlvbigpIGNvbnN0
IGZpbmFsOwotICAgIGJvb2wgc2hvdWxkQXNzb2NpYXRlQ29uc29sZU1lc3NhZ2VzV2l0aFRleHRQ
b3NpdGlvbigpIGNvbnN0IGZpbmFsOworICAgICAgICAvLyBVc2VkIGJ5IHRoZSBYTUxIdHRwUmVx
dWVzdCB0byBjaGVjayBpZiB0aGUgcmVzcG9uc2VYTUwgd2FzIHdlbGwgZm9ybWVkLgorICAgICAg
ICBib29sIHdlbGxGb3JtZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAhbV9zYXdFcnJvcjsg
fQogCi0gICAgdm9pZCBub3RpZnlGaW5pc2hlZChQZW5kaW5nU2NyaXB0JikgZmluYWw7CisgICAg
ICAgIHN0YXRpYyBib29sIHN1cHBvcnRzWE1MVmVyc2lvbihjb25zdCBTdHJpbmcmKTsKIAotICAg
IHZvaWQgZW5kKCk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgWE1MRG9jdW1lbnRQYXJzZXIoRG9j
dW1lbnQmLCBGcmFtZVZpZXcqID0gbnVsbHB0cik7CisgICAgICAgIFhNTERvY3VtZW50UGFyc2Vy
KERvY3VtZW50RnJhZ21lbnQmLCBFbGVtZW50KiwgUGFyc2VyQ29udGVudFBvbGljeSk7CiAKLSAg
ICB2b2lkIHBhdXNlUGFyc2luZygpOwotICAgIHZvaWQgcmVzdW1lUGFyc2luZygpOworICAgICAg
ICAvLyBGcm9tIERvY3VtZW50UGFyc2VyCisgICAgICAgIHZvaWQgaW5zZXJ0KGNvbnN0IFNlZ21l
bnRlZFN0cmluZyYpIG92ZXJyaWRlOworICAgICAgICB2b2lkIGFwcGVuZChSZWZQdHI8U3RyaW5n
SW1wbD4mJikgb3ZlcnJpZGU7CisgICAgICAgIHZvaWQgZmluaXNoKCkgb3ZlcnJpZGU7CisgICAg
ICAgIGJvb2wgaXNXYWl0aW5nRm9yU2NyaXB0cygpIGNvbnN0IG92ZXJyaWRlOworICAgICAgICB2
b2lkIHN0b3BQYXJzaW5nKCkgb3ZlcnJpZGU7CisgICAgICAgIHZvaWQgZGV0YWNoKCkgb3ZlcnJp
ZGU7CiAKLSAgICBib29sIGFwcGVuZEZyYWdtZW50U291cmNlKGNvbnN0IFN0cmluZyYpOworICAg
ICAgICBUZXh0UG9zaXRpb24gdGV4dFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgICAg
IGJvb2wgc2hvdWxkQXNzb2NpYXRlQ29uc29sZU1lc3NhZ2VzV2l0aFRleHRQb3NpdGlvbigpIGNv
bnN0IG92ZXJyaWRlOwogCi1wdWJsaWM6Ci0gICAgLy8gQ2FsbGJhY2tzIGZyb20gcGFyc2VyIFNB
WCwgYW5kIG90aGVyIGZ1bmN0aW9ucyBuZWVkZWQgaW5zaWRlCi0gICAgLy8gdGhlIHBhcnNlciBp
bXBsZW1lbnRhdGlvbiwgYnV0IG91dHNpZGUgdGhpcyBjbGFzcy4KKyAgICAgICAgdm9pZCBub3Rp
ZnlGaW5pc2hlZChQZW5kaW5nU2NyaXB0JikgZmluYWw7CiAKLSAgICB2b2lkIGVycm9yKFhNTEVy
cm9yczo6RXJyb3JUeXBlLCBjb25zdCBjaGFyKiBtZXNzYWdlLCB2YV9saXN0IGFyZ3MpIFdURl9B
VFRSSUJVVEVfUFJJTlRGKDMsIDApOwotICAgIHZvaWQgc3RhcnRFbGVtZW50TnMoY29uc3QgeG1s
Q2hhciogeG1sTG9jYWxOYW1lLCBjb25zdCB4bWxDaGFyKiB4bWxQcmVmaXgsIGNvbnN0IHhtbENo
YXIqIHhtbFVSSSwKLSAgICAgICAgaW50IG51bU5hbWVzcGFjZXMsIGNvbnN0IHhtbENoYXIqKiBu
YW1lc3BhY2VzLAotICAgICAgICBpbnQgbnVtQXR0cmlidXRlcywgaW50IG51bURlZmF1bHRlZCwg
Y29uc3QgeG1sQ2hhcioqIGxpYnhtbEF0dHJpYnV0ZXMpOwotICAgIHZvaWQgZW5kRWxlbWVudE5z
KCk7Ci0gICAgdm9pZCBjaGFyYWN0ZXJzKGNvbnN0IHhtbENoYXIqLCBpbnQgbGVuZ3RoKTsKLSAg
ICB2b2lkIHByb2Nlc3NpbmdJbnN0cnVjdGlvbihjb25zdCB4bWxDaGFyKiB0YXJnZXQsIGNvbnN0
IHhtbENoYXIqIGRhdGEpOwotICAgIHZvaWQgY2RhdGFCbG9jayhjb25zdCB4bWxDaGFyKiwgaW50
IGxlbmd0aCk7Ci0gICAgdm9pZCBjb21tZW50KGNvbnN0IHhtbENoYXIqKTsKLSAgICB2b2lkIHN0
YXJ0RG9jdW1lbnQoY29uc3QgeG1sQ2hhciogdmVyc2lvbiwgY29uc3QgeG1sQ2hhciogZW5jb2Rp
bmcsIGludCBzdGFuZGFsb25lKTsKLSAgICB2b2lkIGludGVybmFsU3Vic2V0KGNvbnN0IHhtbENo
YXIqIG5hbWUsIGNvbnN0IHhtbENoYXIqIGV4dGVybmFsSUQsIGNvbnN0IHhtbENoYXIqIHN5c3Rl
bUlEKTsKLSAgICB2b2lkIGVuZERvY3VtZW50KCk7CisgICAgICAgIHZvaWQgZW5kKCk7CiAKLSAg
ICBib29sIGlzUGFyc2luZ0VudGl0eURlY2xhcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc1Bh
cnNpbmdFbnRpdHlEZWNsYXJhdGlvbjsgfQotICAgIHZvaWQgc2V0SXNQYXJzaW5nRW50aXR5RGVj
bGFyYXRpb24oYm9vbCB2YWx1ZSkgeyBtX2lzUGFyc2luZ0VudGl0eURlY2xhcmF0aW9uID0gdmFs
dWU7IH0KKyAgICAgICAgdm9pZCBwYXVzZVBhcnNpbmcoKTsKKyAgICAgICAgdm9pZCByZXN1bWVQ
YXJzaW5nKCk7CiAKLSAgICBpbnQgZGVwdGhUcmlnZ2VyaW5nRW50aXR5RXhwYW5zaW9uKCkgY29u
c3QgeyByZXR1cm4gbV9kZXB0aFRyaWdnZXJpbmdFbnRpdHlFeHBhbnNpb247IH0KLSAgICB2b2lk
IHNldERlcHRoVHJpZ2dlcmluZ0VudGl0eUV4cGFuc2lvbihpbnQgZGVwdGgpIHsgbV9kZXB0aFRy
aWdnZXJpbmdFbnRpdHlFeHBhbnNpb24gPSBkZXB0aDsgfQorICAgICAgICBib29sIGFwcGVuZEZy
YWdtZW50U291cmNlKGNvbnN0IFN0cmluZyYpOwogCi1wcml2YXRlOgotICAgIHZvaWQgaW5pdGlh
bGl6ZVBhcnNlckNvbnRleHQoY29uc3QgQ1N0cmluZyYgY2h1bmsgPSBDU3RyaW5nKCkpOworICAg
IHB1YmxpYzoKKyAgICAgICAgLy8gY2FsbGJhY2tzIGZyb20gcGFyc2VyIFNBWAorICAgICAgICB2
b2lkIGVycm9yKFhNTEVycm9yczo6RXJyb3JUeXBlLCBjb25zdCBjaGFyKiBtZXNzYWdlLCB2YV9s
aXN0IGFyZ3MpIFdURl9BVFRSSUJVVEVfUFJJTlRGKDMsIDApOworICAgICAgICB2b2lkIHN0YXJ0
RWxlbWVudE5zKGNvbnN0IHhtbENoYXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hhciogeG1s
UHJlZml4LCBjb25zdCB4bWxDaGFyKiB4bWxVUkksIGludCBuYl9uYW1lc3BhY2VzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIqKiBuYW1lc3BhY2VzLCBpbnQgbmJf
YXR0cmlidXRlcywgaW50IG5iX2RlZmF1bHRlZCwgY29uc3QgeG1sQ2hhcioqIGxpYnhtbEF0dHJp
YnV0ZXMpOworICAgICAgICB2b2lkIGVuZEVsZW1lbnROcygpOworICAgICAgICB2b2lkIGNoYXJh
Y3RlcnMoY29uc3QgeG1sQ2hhciogcywgaW50IGxlbik7CisgICAgICAgIHZvaWQgcHJvY2Vzc2lu
Z0luc3RydWN0aW9uKGNvbnN0IHhtbENoYXIqIHRhcmdldCwgY29uc3QgeG1sQ2hhciogZGF0YSk7
CisgICAgICAgIHZvaWQgY2RhdGFCbG9jayhjb25zdCB4bWxDaGFyKiBzLCBpbnQgbGVuKTsKKyAg
ICAgICAgdm9pZCBjb21tZW50KGNvbnN0IHhtbENoYXIqIHMpOworICAgICAgICB2b2lkIHN0YXJ0
RG9jdW1lbnQoY29uc3QgeG1sQ2hhciogdmVyc2lvbiwgY29uc3QgeG1sQ2hhciogZW5jb2Rpbmcs
IGludCBzdGFuZGFsb25lKTsKKyAgICAgICAgdm9pZCBpbnRlcm5hbFN1YnNldChjb25zdCB4bWxD
aGFyKiBuYW1lLCBjb25zdCB4bWxDaGFyKiBleHRlcm5hbElELCBjb25zdCB4bWxDaGFyKiBzeXN0
ZW1JRCk7CisgICAgICAgIHZvaWQgZW5kRG9jdW1lbnQoKTsKIAotICAgIHZvaWQgcHVzaEN1cnJl
bnROb2RlKENvbnRhaW5lck5vZGUqKTsKLSAgICB2b2lkIHBvcEN1cnJlbnROb2RlKCk7Ci0gICAg
dm9pZCBjbGVhckN1cnJlbnROb2RlU3RhY2soKTsKKyAgICAgICAgYm9vbCBpc1BhcnNpbmdFbnRp
dHlEZWNsYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNQYXJzaW5nRW50aXR5RGVjbGFyYXRp
b247IH0KKyAgICAgICAgdm9pZCBzZXRJc1BhcnNpbmdFbnRpdHlEZWNsYXJhdGlvbihib29sIHZh
bHVlKSB7IG1faXNQYXJzaW5nRW50aXR5RGVjbGFyYXRpb24gPSB2YWx1ZTsgfQogCi0gICAgdm9p
ZCBpbnNlcnRFcnJvck1lc3NhZ2VCbG9jaygpOworICAgICAgICBpbnQgZGVwdGhUcmlnZ2VyaW5n
RW50aXR5RXhwYW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXB0aFRyaWdnZXJpbmdFbnRpdHlF
eHBhbnNpb247IH0KKyAgICAgICAgdm9pZCBzZXREZXB0aFRyaWdnZXJpbmdFbnRpdHlFeHBhbnNp
b24oaW50IGRlcHRoKSB7IG1fZGVwdGhUcmlnZ2VyaW5nRW50aXR5RXhwYW5zaW9uID0gZGVwdGg7
IH0KIAotICAgIHZvaWQgY3JlYXRlTGVhZlRleHROb2RlKCk7Ci0gICAgYm9vbCB1cGRhdGVMZWFm
VGV4dE5vZGUoKTsKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGluaXRpYWxpemVQYXJzZXJD
b250ZXh0KGNvbnN0IENTdHJpbmcmIGNodW5rID0gQ1N0cmluZygpKTsKIAotICAgIHZvaWQgZG9X
cml0ZShjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGRvRW5kKCk7CisgICAgICAgIHZvaWQgcHVz
aEN1cnJlbnROb2RlKENvbnRhaW5lck5vZGUqKTsKKyAgICAgICAgdm9pZCBwb3BDdXJyZW50Tm9k
ZSgpOworICAgICAgICB2b2lkIGNsZWFyQ3VycmVudE5vZGVTdGFjaygpOwogCi0gICAgeG1sUGFy
c2VyQ3R4dFB0ciBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0ID8gbV9jb250ZXh0
LT5jb250ZXh0KCkgOiBudWxscHRyOyB9OworICAgICAgICB2b2lkIGluc2VydEVycm9yTWVzc2Fn
ZUJsb2NrKCk7CiAKLSAgICBGcmFtZVZpZXcqIG1fdmlldyB7IG51bGxwdHIgfTsKKyAgICAgICAg
dm9pZCBjcmVhdGVMZWFmVGV4dE5vZGUoKTsKKyAgICAgICAgYm9vbCB1cGRhdGVMZWFmVGV4dE5v
ZGUoKTsKIAotICAgIFNlZ21lbnRlZFN0cmluZyBtX29yaWdpbmFsU291cmNlRm9yVHJhbnNmb3Jt
OworICAgICAgICB2b2lkIGRvV3JpdGUoY29uc3QgU3RyaW5nJik7CisgICAgICAgIHZvaWQgZG9F
bmQoKTsKKworICAgICAgICBGcmFtZVZpZXcqIG1fdmlldzsKKworICAgICAgICBTZWdtZW50ZWRT
dHJpbmcgbV9vcmlnaW5hbFNvdXJjZUZvclRyYW5zZm9ybTsKIAotICAgIFJlZlB0cjxYTUxQYXJz
ZXJDb250ZXh0PiBtX2NvbnRleHQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBlbmRpbmdDYWxsYmFj
a3M+IG1fcGVuZGluZ0NhbGxiYWNrczsKLSAgICBWZWN0b3I8eG1sQ2hhcj4gbV9idWZmZXJlZFRl
eHQ7Ci0gICAgaW50IG1fZGVwdGhUcmlnZ2VyaW5nRW50aXR5RXhwYW5zaW9uIHsgLTEgfTsKLSAg
ICBib29sIG1faXNQYXJzaW5nRW50aXR5RGVjbGFyYXRpb24geyBmYWxzZSB9OworICAgICAgICB4
bWxQYXJzZXJDdHh0UHRyIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQgPyBtX2Nv
bnRleHQtPmNvbnRleHQoKSA6IG51bGxwdHI7IH07CisgICAgICAgIFJlZlB0cjxYTUxQYXJzZXJD
b250ZXh0PiBtX2NvbnRleHQ7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxQZW5kaW5nQ2FsbGJh
Y2tzPiBtX3BlbmRpbmdDYWxsYmFja3M7CisgICAgICAgIFZlY3Rvcjx4bWxDaGFyPiBtX2J1ZmZl
cmVkVGV4dDsKKyAgICAgICAgaW50IG1fZGVwdGhUcmlnZ2VyaW5nRW50aXR5RXhwYW5zaW9uOwor
ICAgICAgICBib29sIG1faXNQYXJzaW5nRW50aXR5RGVjbGFyYXRpb247CiAKLSAgICBDb250YWlu
ZXJOb2RlKiBtX2N1cnJlbnROb2RlIHsgbnVsbHB0ciB9OwotICAgIFZlY3RvcjxDb250YWluZXJO
b2RlKj4gbV9jdXJyZW50Tm9kZVN0YWNrOworICAgICAgICBDb250YWluZXJOb2RlKiBtX2N1cnJl
bnROb2RlOworICAgICAgICBWZWN0b3I8Q29udGFpbmVyTm9kZSo+IG1fY3VycmVudE5vZGVTdGFj
azsKIAotICAgIFJlZlB0cjxUZXh0PiBtX2xlYWZUZXh0Tm9kZTsKKyAgICAgICAgUmVmUHRyPFRl
eHQ+IG1fbGVhZlRleHROb2RlOwogCi0gICAgYm9vbCBtX3Nhd0Vycm9yIHsgZmFsc2UgfTsKLSAg
ICBib29sIG1fc2F3Q1NTIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc2F3WFNMVHJhbnNmb3JtIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1fc2F3Rmlyc3RFbGVtZW50IHsgZmFsc2UgfTsKLSAgICBib29s
IG1faXNYSFRNTERvY3VtZW50IHsgZmFsc2UgfTsKLSAgICBib29sIG1fcGFyc2VyUGF1c2VkIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1fcmVxdWVzdGluZ1NjcmlwdCB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX2ZpbmlzaENhbGxlZCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgbV9zYXdFcnJvcjsKKyAg
ICAgICAgYm9vbCBtX3Nhd0NTUzsKKyAgICAgICAgYm9vbCBtX3Nhd1hTTFRyYW5zZm9ybTsKKyAg
ICAgICAgYm9vbCBtX3Nhd0ZpcnN0RWxlbWVudDsKKyAgICAgICAgYm9vbCBtX2lzWEhUTUxEb2N1
bWVudDsKKyAgICAgICAgYm9vbCBtX3BhcnNlclBhdXNlZDsKKyAgICAgICAgYm9vbCBtX3JlcXVl
c3RpbmdTY3JpcHQ7CisgICAgICAgIGJvb2wgbV9maW5pc2hDYWxsZWQ7CiAKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8WE1MRXJyb3JzPiBtX3htbEVycm9yczsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFhNTEVycm9ycz4gbV94bWxFcnJvcnM7CiAKLSAgICBSZWZQdHI8UGVuZGluZ1NjcmlwdD4gbV9w
ZW5kaW5nU2NyaXB0OwotICAgIFRleHRQb3NpdGlvbiBtX3NjcmlwdFN0YXJ0UG9zaXRpb247Cisg
ICAgICAgIFJlZlB0cjxQZW5kaW5nU2NyaXB0PiBtX3BlbmRpbmdTY3JpcHQ7CisgICAgICAgIFRl
eHRQb3NpdGlvbiBtX3NjcmlwdFN0YXJ0UG9zaXRpb247CiAKLSAgICBib29sIG1fcGFyc2luZ0Zy
YWdtZW50IHsgZmFsc2UgfTsKLSAgICBBdG9taWNTdHJpbmcgbV9kZWZhdWx0TmFtZXNwYWNlVVJJ
OworICAgICAgICBib29sIG1fcGFyc2luZ0ZyYWdtZW50OworICAgICAgICBBdG9taWNTdHJpbmcg
bV9kZWZhdWx0TmFtZXNwYWNlVVJJOwogCi0gICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIEF0b21p
Y1N0cmluZz4gbV9wcmVmaXhUb05hbWVzcGFjZU1hcDsKLSAgICBTZWdtZW50ZWRTdHJpbmcgbV9w
ZW5kaW5nU3JjOwotfTsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZywgQXRv
bWljU3RyaW5nPiBQcmVmaXhGb3JOYW1lc3BhY2VNYXA7CisgICAgICAgIFByZWZpeEZvck5hbWVz
cGFjZU1hcCBtX3ByZWZpeFRvTmFtZXNwYWNlTWFwOworICAgICAgICBTZWdtZW50ZWRTdHJpbmcg
bV9wZW5kaW5nU3JjOworICAgIH07CiAKICNpZiBFTkFCTEUoWFNMVCkKIHZvaWQqIHhtbERvY1B0
ckZvclN0cmluZyhDYWNoZWRSZXNvdXJjZUxvYWRlciYsIGNvbnN0IFN0cmluZyYgc291cmNlLCBj
b25zdCBTdHJpbmcmIHVybCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2Vy
L1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2Vy
L1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKaW5kZXggMmU3ZGYyZDM3YWY1ZjNhZDZjNTVh
NGVkMzU4NDFjOGRlMzEzMzZmZi4uOWY0YWY3YWI0YWExZjhhNzJlNTZlNTIxYzY4MDUyMDgwMjQx
MjVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBh
cnNlckxpYnhtbDIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1l
bnRQYXJzZXJMaWJ4bWwyLmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDAgUGV0ZXIgS2VsbHkgPHBta0Bwb3N0LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNS0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
QEAgLTM1LDIzICszNSwzNSBAQAogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNs
dWRlICJEb2N1bWVudFR5cGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1l
TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTEVudGl0eVBh
cnNlci5oIgogI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxMaW5r
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxTdHlsZUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGVtcGxhdGVFbGVtZW50LmgiCisjaW5jbHVkZSAiTG9h
ZGFibGVDbGFzc2ljU2NyaXB0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBlbmRp
bmdTY3JpcHQuaCIKICNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRl
ICJSZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlNjcmlwdEVsZW1lbnQuaCIKICNpbmNs
dWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNp
bmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlU2NvcGUuaCIKKyNpbmNsdWRlICJU
ZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtU291cmNlLmgiCiAjaW5j
bHVkZSAiWE1MTlNOYW1lcy5oIgogI2luY2x1ZGUgIlhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCIK
ICNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5o
PgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjgu
aD4KIAogI2lmIEVOQUJMRShYU0xUKQpAQCAtNjIsMzMgKzc0LDMyIEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICNpZiBFTkFCTEUoWFNMVCkKLQotc3RhdGljIGlubGluZSBib29sIHNob3VsZFJl
bmRlckluWE1MVHJlZVZpZXdlck1vZGUoRG9jdW1lbnQmIGRvY3VtZW50KQorc3RhdGljIGlubGlu
ZSBib29sIGhhc05vU3R5bGVJbmZvcm1hdGlvbihEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAg
aWYgKGRvY3VtZW50LnNhd0VsZW1lbnRzSW5Lbm93bk5hbWVzcGFjZXMoKSkKKyAgICBpZiAoZG9j
dW1lbnQtPnNhd0VsZW1lbnRzSW5Lbm93bk5hbWVzcGFjZXMoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaWYgKGRvY3VtZW50LnRyYW5zZm9ybVNvdXJjZURvY3VtZW50KCkpCisgICAg
aWYgKGRvY3VtZW50LT50cmFuc2Zvcm1Tb3VyY2VEb2N1bWVudCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBhdXRvKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7Ci0gICAgaWYgKCFm
cmFtZSkKKyAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpIHx8ICFkb2N1bWVudC0+ZnJhbWUoKS0+
cGFnZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIWZyYW1lLT5zZXR0aW5n
cygpLmRldmVsb3BlckV4dHJhc0VuYWJsZWQoKSkKKyAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgp
LT5wYWdlKCktPnNldHRpbmdzKCkuZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZnJhbWUtPnRyZWUoKS5wYXJlbnQoKSkKKyAgICBpZiAo
ZG9jdW1lbnQtPmZyYW1lKCktPnRyZWUoKS5wYXJlbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OyAvLyBUaGlzIGRvY3VtZW50IGlzIG5vdCBpbiBhIHRvcCBmcmFtZQogCiAgICAgcmV0dXJuIHRy
dWU7CiB9Ci0KICNlbmRpZgogCiBjbGFzcyBQZW5kaW5nQ2FsbGJhY2tzIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQZW5kaW5nQ2FsbGJh
Y2tzKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CisgICAgUGVuZGluZ0NhbGxi
YWNrcygpID0gZGVmYXVsdDsKKwogICAgIHZvaWQgYXBwZW5kU3RhcnRFbGVtZW50TlNDYWxsYmFj
ayhjb25zdCB4bWxDaGFyKiB4bWxMb2NhbE5hbWUsIGNvbnN0IHhtbENoYXIqIHhtbFByZWZpeCwg
Y29uc3QgeG1sQ2hhciogeG1sVVJJLCBpbnQgbnVtTmFtZXNwYWNlcywgY29uc3QgeG1sQ2hhcioq
IG5hbWVzcGFjZXMsIGludCBudW1BdHRyaWJ1dGVzLCBpbnQgbnVtRGVmYXVsdGVkLCBjb25zdCB4
bWxDaGFyKiogYXR0cmlidXRlcykKICAgICB7CiAgICAgICAgIGF1dG8gY2FsbGJhY2sgPSBzdGQ6
Om1ha2VfdW5pcXVlPFBlbmRpbmdTdGFydEVsZW1lbnROU0NhbGxiYWNrPigpOwpAQCAtNTY0LDE2
ICs1NzUsNDAgQEAgYm9vbCBYTUxEb2N1bWVudFBhcnNlcjo6c3VwcG9ydHNYTUxWZXJzaW9uKGNv
bnN0IFN0cmluZyYgdmVyc2lvbikKIFhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNl
cihEb2N1bWVudCYgZG9jdW1lbnQsIEZyYW1lVmlldyogZnJhbWVWaWV3KQogICAgIDogU2NyaXB0
YWJsZURvY3VtZW50UGFyc2VyKGRvY3VtZW50KQogICAgICwgbV92aWV3KGZyYW1lVmlldykKKyAg
ICAsIG1fY29udGV4dChudWxscHRyKQogICAgICwgbV9wZW5kaW5nQ2FsbGJhY2tzKHN0ZDo6bWFr
ZV91bmlxdWU8UGVuZGluZ0NhbGxiYWNrcz4oKSkKKyAgICAsIG1fZGVwdGhUcmlnZ2VyaW5nRW50
aXR5RXhwYW5zaW9uKC0xKQorICAgICwgbV9pc1BhcnNpbmdFbnRpdHlEZWNsYXJhdGlvbihmYWxz
ZSkKICAgICAsIG1fY3VycmVudE5vZGUoJmRvY3VtZW50KQorICAgICwgbV9zYXdFcnJvcihmYWxz
ZSkKKyAgICAsIG1fc2F3Q1NTKGZhbHNlKQorICAgICwgbV9zYXdYU0xUcmFuc2Zvcm0oZmFsc2Up
CisgICAgLCBtX3Nhd0ZpcnN0RWxlbWVudChmYWxzZSkKKyAgICAsIG1faXNYSFRNTERvY3VtZW50
KGZhbHNlKQorICAgICwgbV9wYXJzZXJQYXVzZWQoZmFsc2UpCisgICAgLCBtX3JlcXVlc3RpbmdT
Y3JpcHQoZmFsc2UpCisgICAgLCBtX2ZpbmlzaENhbGxlZChmYWxzZSkKICAgICAsIG1fc2NyaXB0
U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb246OmJlbG93UmFuZ2VQb3NpdGlvbigpKQorICAgICwg
bV9wYXJzaW5nRnJhZ21lbnQoZmFsc2UpCiB7CiB9CiAKIFhNTERvY3VtZW50UGFyc2VyOjpYTUxE
b2N1bWVudFBhcnNlcihEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgRWxlbWVudCogcGFyZW50
RWxlbWVudCwgUGFyc2VyQ29udGVudFBvbGljeSBwYXJzZXJDb250ZW50UG9saWN5KQogICAgIDog
U2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKGZyYWdtZW50LmRvY3VtZW50KCksIHBhcnNlckNvbnRl
bnRQb2xpY3kpCisgICAgLCBtX3ZpZXcobnVsbHB0cikKKyAgICAsIG1fY29udGV4dChudWxscHRy
KQogICAgICwgbV9wZW5kaW5nQ2FsbGJhY2tzKHN0ZDo6bWFrZV91bmlxdWU8UGVuZGluZ0NhbGxi
YWNrcz4oKSkKKyAgICAsIG1fZGVwdGhUcmlnZ2VyaW5nRW50aXR5RXhwYW5zaW9uKC0xKQorICAg
ICwgbV9pc1BhcnNpbmdFbnRpdHlEZWNsYXJhdGlvbihmYWxzZSkKICAgICAsIG1fY3VycmVudE5v
ZGUoJmZyYWdtZW50KQorICAgICwgbV9zYXdFcnJvcihmYWxzZSkKKyAgICAsIG1fc2F3Q1NTKGZh
bHNlKQorICAgICwgbV9zYXdYU0xUcmFuc2Zvcm0oZmFsc2UpCisgICAgLCBtX3Nhd0ZpcnN0RWxl
bWVudChmYWxzZSkKKyAgICAsIG1faXNYSFRNTERvY3VtZW50KGZhbHNlKQorICAgICwgbV9wYXJz
ZXJQYXVzZWQoZmFsc2UpCisgICAgLCBtX3JlcXVlc3RpbmdTY3JpcHQoZmFsc2UpCisgICAgLCBt
X2ZpbmlzaENhbGxlZChmYWxzZSkKICAgICAsIG1fc2NyaXB0U3RhcnRQb3NpdGlvbihUZXh0UG9z
aXRpb246OmJlbG93UmFuZ2VQb3NpdGlvbigpKQogICAgICwgbV9wYXJzaW5nRnJhZ21lbnQodHJ1
ZSkKIHsKQEAgLTExNTksNyArMTE5NCw4IEBAIHN0YXRpYyB4bWxFbnRpdHlQdHIgc2hhcmVkWEhU
TUxFbnRpdHkoKQogc3RhdGljIHNpemVfdCBjb252ZXJ0VVRGMTZFbnRpdHlUb1VURjgoY29uc3Qg
VUNoYXIqIHV0ZjE2RW50aXR5LCBzaXplX3QgbnVtYmVyT2ZDb2RlVW5pdHMsIGNoYXIqIHRhcmdl
dCwgc2l6ZV90IHRhcmdldFNpemUpCiB7CiAgICAgY29uc3QgY2hhciogb3JpZ2luYWxUYXJnZXQg
PSB0YXJnZXQ7Ci0gICAgYXV0byBjb252ZXJzaW9uUmVzdWx0ID0gV1RGOjpVbmljb2RlOjpjb252
ZXJ0VVRGMTZUb1VURjgoJnV0ZjE2RW50aXR5LCB1dGYxNkVudGl0eSArIG51bWJlck9mQ29kZVVu
aXRzLCAmdGFyZ2V0LCB0YXJnZXQgKyB0YXJnZXRTaXplKTsKKyAgICBXVEY6OlVuaWNvZGU6OkNv
bnZlcnNpb25SZXN1bHQgY29udmVyc2lvblJlc3VsdCA9IFdURjo6VW5pY29kZTo6Y29udmVydFVU
RjE2VG9VVEY4KCZ1dGYxNkVudGl0eSwKKyAgICAgICAgdXRmMTZFbnRpdHkgKyBudW1iZXJPZkNv
ZGVVbml0cywgJnRhcmdldCwgdGFyZ2V0ICsgdGFyZ2V0U2l6ZSk7CiAgICAgaWYgKGNvbnZlcnNp
b25SZXN1bHQgIT0gV1RGOjpVbmljb2RlOjpjb252ZXJzaW9uT0spCiAgICAgICAgIHJldHVybiAw
OwogCkBAIC0xMzI4LDcgKzEzNjQsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpkb0VuZCgp
CiAgICAgfQogCiAjaWYgRU5BQkxFKFhTTFQpCi0gICAgYm9vbCB4bWxWaWV3ZXJNb2RlID0gIW1f
c2F3RXJyb3IgJiYgIW1fc2F3Q1NTICYmICFtX3Nhd1hTTFRyYW5zZm9ybSAmJiBzaG91bGRSZW5k
ZXJJblhNTFRyZWVWaWV3ZXJNb2RlKCpkb2N1bWVudCgpKTsKKyAgICBib29sIHhtbFZpZXdlck1v
ZGUgPSAhbV9zYXdFcnJvciAmJiAhbV9zYXdDU1MgJiYgIW1fc2F3WFNMVHJhbnNmb3JtICYmIGhh
c05vU3R5bGVJbmZvcm1hdGlvbihkb2N1bWVudCgpKTsKICAgICBpZiAoeG1sVmlld2VyTW9kZSkg
ewogICAgICAgICBYTUxUcmVlVmlld2VyIHhtbFRyZWVWaWV3ZXIoKmRvY3VtZW50KCkpOwogICAg
ICAgICB4bWxUcmVlVmlld2VyLnRyYW5zZm9ybURvY3VtZW50VG9UcmVlVmlldygpOwpAQCAtMTQx
NCwxMiArMTQ1MCwxMyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpyZXN1bWVQYXJzaW5nKCkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICAvLyBUaGVuLCB3cml0ZSBhbnkgcGVu
ZGluZyBkYXRhCisgICAgU2VnbWVudGVkU3RyaW5nIHJlc3QgPSBtX3BlbmRpbmdTcmM7CisgICAg
bV9wZW5kaW5nU3JjLmNsZWFyKCk7CiAgICAgLy8gVGhlcmUgaXMgbm9ybWFsbHkgb25seSBvbmUg
c3RyaW5nIGxlZnQsIHNvIHRvU3RyaW5nKCkgc2hvdWxkbid0IGNvcHkuCiAgICAgLy8gSW4gYW55
IGNhc2UsIHRoZSBYTUwgcGFyc2VyIHJ1bnMgb24gdGhlIG1haW4gdGhyZWFkIGFuZCBpdCdzIE9L
IGlmCiAgICAgLy8gdGhlIHBhc3NlZCBzdHJpbmcgaGFzIG1vcmUgdGhhbiBvbmUgcmVmZXJlbmNl
LgotICAgIGF1dG8gcmVzdCA9IG1fcGVuZGluZ1NyYy50b1N0cmluZygpOwotICAgIG1fcGVuZGlu
Z1NyYy5jbGVhcigpOwotICAgIGFwcGVuZChyZXN0LmltcGwoKSk7CisgICAgYXBwZW5kKHJlc3Qu
dG9TdHJpbmcoKS5pbXBsKCkpOwogCiAgICAgLy8gRmluYWxseSwgaWYgZmluaXNoKCkgaGFzIGJl
ZW4gY2FsbGVkIGFuZCB3cml0ZSgpIGRpZG4ndCByZXN1bHQKICAgICAvLyBpbiBhbnkgZnVydGhl
ciBjYWxsYmFja3MgYmVpbmcgcXVldWVkLCBjYWxsIGVuZCgpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>