<?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>192130</bug_id>
          
          <creation_ts>2018-11-28 18:53:31 -0800</creation_ts>
          <short_desc>REGRESSION(r238653): Breaks iOS build (Requested by smfr on #webkit).</short_desc>
          <delta_ts>2018-11-28 18:57:27 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>191732</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>achristensen</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1482792</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-28 18:53:31 -0800</bug_when>
    <thetext>https://trac.webkit.org/changeset/238653 broke the build:
Breaks iOS build (Requested by smfr 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>1482794</commentid>
    <comment_count>1</comment_count>
      <attachid>355958</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-28 18:53:39 -0800</bug_when>
    <thetext>Created attachment 355958
ROLLOUT of r238653

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>1482795</commentid>
    <comment_count>2</comment_count>
      <attachid>355958</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-28 18:56:07 -0800</bug_when>
    <thetext>Comment on attachment 355958
ROLLOUT of r238653

Clearing flags on attachment: 355958

Committed r238657: &lt;https://trac.webkit.org/changeset/238657&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482796</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-28 18:56:08 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482798</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-11-28 18:57:27 -0800</bug_when>
    <thetext>&lt;rdar://problem/46329869&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355958</attachid>
            <date>2018-11-28 18:53:39 -0800</date>
            <delta_ts>2018-11-28 18:56:07 -0800</delta_ts>
            <desc>ROLLOUT of r238653</desc>
            <filename>bug-192130-20181128185338.patch</filename>
            <type>text/plain</type>
            <size>72507</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4NjU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2ExOTNiYzM3ZmFhMzNk
MDVkOTY1YjdkZTIyZDgwMzZlM2NkMmUzMi4uY2YwNGZmY2FlOGQxMjNkMjBmM2VmZGJjNTY2MzYw
MzE1ZGJiOTk4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE4LTExLTI4ICBDb21t
aXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KKworICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMjM4NjUzIGFuZCByMjM4NjU2LgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyMTMwCisKKyAgICAgICAgQnJlYWtzIGlPUyBi
dWlsZCAoUmVxdWVzdGVkIGJ5IHNtZnIgb24gI3dlYmtpdCkuCisKKyAgICAgICAgUmV2ZXJ0ZWQg
Y2hhbmdlc2V0czoKKworICAgICAgICAiTW92ZSBMb29rdXAgQ29kZSBmb3IgYmV0dGVyIGNyb3Nz
IHBsYXRmb3JtIHVzYWdlIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTkxNzMyCisgICAgICAgIGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNl
dC8yMzg2NTMKKworICAgICAgICAiQXR0ZW1wdCB0byBmaXggdGhlIGlPUyBidWlsZCBieSBvbmx5
IGluY2x1ZGluZyBSZXZlYWxTUEkuaAorICAgICAgICB3aGVuIGl0J3MgbmVlZGVkLiIKKyAgICAg
ICAgaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzIzODY1NgorCiAyMDE4LTExLTI4
ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEF0dGVt
cHQgdG8gZml4IHRoZSBpT1MgYnVpbGQgYnkgb25seSBpbmNsdWRpbmcgUmV2ZWFsU1BJLmggd2hl
biBpdCdzIG5lZWRlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCmluZGV4IDM5N2E0MWYwYjQxYzRhYTQyZThm
MGI5ZmU2NjViMmVjODk2MGQ4NmIuLjJhZTQxMGMxOWNiNDU3YzFjMTRkYWZmYjNlNTk5NmM0YmE4
ZTQxMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE4LTExLTI4ICBD
b21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KKworICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByMjM4NjUzIGFuZCByMjM4NjU2LgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyMTMwCisKKyAgICAgICAgQnJlYWtzIGlP
UyBidWlsZCAoUmVxdWVzdGVkIGJ5IHNtZnIgb24gI3dlYmtpdCkuCisKKyAgICAgICAgUmV2ZXJ0
ZWQgY2hhbmdlc2V0czoKKworICAgICAgICAiTW92ZSBMb29rdXAgQ29kZSBmb3IgYmV0dGVyIGNy
b3NzIHBsYXRmb3JtIHVzYWdlIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTkxNzMyCisgICAgICAgIGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL2NoYW5n
ZXNldC8yMzg2NTMKKworICAgICAgICAiQXR0ZW1wdCB0byBmaXggdGhlIGlPUyBidWlsZCBieSBv
bmx5IGluY2x1ZGluZyBSZXZlYWxTUEkuaAorICAgICAgICB3aGVuIGl0J3MgbmVlZGVkLiIKKyAg
ICAgICAgaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzIzODY1NgorCiAyMDE4LTEx
LTE1ICBNZWdhbiBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CiAKICAgICAgICAg
TW92ZSBMb29rdXAgQ29kZSBmb3IgYmV0dGVyIGNyb3NzIHBsYXRmb3JtIHVzYWdlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IDI4YmEzNTYwMmI5Zjc0ODNkMDExNWFlMWRiMWFjMWMwYjczYzgyZTEuLjM3YmQyYWNlNTBh
YmRhOWZkZGFhODA4OWUwMTA4ZTU1ZWE3Zjk0MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTgtMTEtMjggIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgorCisg
ICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMzg2NTMgYW5kIHIyMzg2NTYuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTIxMzAKKworICAg
ICAgICBCcmVha3MgaU9TIGJ1aWxkIChSZXF1ZXN0ZWQgYnkgc21mciBvbiAjd2Via2l0KS4KKwor
ICAgICAgICBSZXZlcnRlZCBjaGFuZ2VzZXRzOgorCisgICAgICAgICJNb3ZlIExvb2t1cCBDb2Rl
IGZvciBiZXR0ZXIgY3Jvc3MgcGxhdGZvcm0gdXNhZ2UiCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MzIKKyAgICAgICAgaHR0cHM6Ly90cmFjLndl
YmtpdC5vcmcvY2hhbmdlc2V0LzIzODY1MworCisgICAgICAgICJBdHRlbXB0IHRvIGZpeCB0aGUg
aU9TIGJ1aWxkIGJ5IG9ubHkgaW5jbHVkaW5nIFJldmVhbFNQSS5oCisgICAgICAgIHdoZW4gaXQn
cyBuZWVkZWQuIgorICAgICAgICBodHRwczovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjM4
NjU2CiAKIDIwMTgtMTEtMjggIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0
Lm9yZz4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IGI4Y2MzNTg2M2NiZDJlZDU1Y2VkYTdjNTZhYzE4MjE5ODNlNDczOGMuLjc3
ZjI0NjczZTUxNzM2OTdmNWNiY2U3ZWMzYTQ1MjE2Y2Y0ODMxMTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQwNiw3ICs0MDYs
NiBAQAogCQkJCTBDMkRBMTM5MUYzQkVCNDkwMERCQzMxNyAvKiBQYXNzS2l0U1BJLmggKi8sCiAJ
CQkJMEMyREExM0ExRjNCRUI0OTAwREJDMzE3IC8qIHB0aHJlYWRTUEkuaCAqLywKIAkJCQkwQzJE
QTEzQjFGM0JFQjQ5MDBEQkMzMTcgLyogUXVhcnR6Q29yZVNQSS5oICovLAotCQkJCTQ0Mjk1NkND
MjE4QTcyREUwMDgwREI1NCAvKiBSZXZlYWxTUEkuaCAqLywKIAkJCQk1NzBBQjhGMDIwQUUyRThE
MDBCOEJFODcgLyogU2VjS2V5UHJveHlTUEkuaCAqLywKIAkJCQkwQzJEQTEzQzFGM0JFQjQ5MDBE
QkMzMTcgLyogU2VydmVyc1NQSS5oICovLAogCQkJCTBDMkRBMTJCMUYzQkVCNDkwMERCQzMxNyAv
KiBVUkxGb3JtYXR0aW5nU1BJLmggKi8sCkBAIC00NzIsNiArNDcxLDcgQEAKIAkJCQkwQzc3ODU4
NjFGNDUxMzBGMDBGNEVCQjYgLyogUVRLaXRTUEkuaCAqLywKIAkJCQlBMTAyNjU4QTFGNTY3NDhD
MDBCNEM4NDQgLyogUXVpY2tEcmF3U1BJLmggKi8sCiAJCQkJMEM3Nzg1ODcxRjQ1MTMwRjAwRjRF
QkI2IC8qIFF1aWNrTG9va01hY1NQSS5oICovLAorCQkJCTQ0Mjk1NkNDMjE4QTcyREUwMDgwREI1
NCAvKiBSZXZlYWxTUEkuaCAqLywKIAkJCQlBMTE3NUI0ODFGNkFGRjhFMDBDNEI5RjAgLyogU3Bl
ZWNoU3ludGhlc2lzU1BJLmggKi8sCiAJCQkJMEM3Nzg1ODgxRjQ1MTMwRjAwRjRFQkI2IC8qIFRV
Q2FsbFNQSS5oICovLAogCQkJKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
c3BpL2NvY29hL1JldmVhbFNQSS5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY29jb2Ev
UmV2ZWFsU1BJLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzZDU1ZDE1MmU2MDgy
NDJkODA3ZDY5YjkzMWNkNWE1OWNlZDM5NmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY29jb2EvUmV2ZWFs
U1BJLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KLSNp
ZiBQTEFURk9STShNQUMpCi0jaW1wb3J0IDxwYWwvc3BpL21hYy9OU0ltbWVkaWF0ZUFjdGlvbkdl
c3R1cmVSZWNvZ25pemVyU1BJLmg+Ci0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotI2ltcG9ydCA8
d3RmL1NvZnRMaW5raW5nLmg+Ci0KLVNPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SSyhSZXZlYWwp
Ci1TT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUksoUmV2ZWFsQ29yZSkKLVNPRlRfTElOS19DTEFT
U19PUFRJT05BTChSZXZlYWwsIFJWUHJlc2VudGVyKQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFM
KFJldmVhbCwgUlZQcmVzZW50aW5nQ29udGV4dCkKLVNPRlRfTElOS19DTEFTU19PUFRJT05BTChS
ZXZlYWxDb3JlLCBSVkl0ZW0pCi1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2ZWFsQ29yZSwg
UlZTZWxlY3Rpb24pCi0KLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotCi0jaWYgUExBVEZP
Uk0oTUFDKQotI2ltcG9ydCA8UmV2ZWFsL1JWUHJlc2VudGVyLmg+Ci0jaW1wb3J0IDxSZXZlYWwv
UmV2ZWFsLmg+Ci0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotI2ltcG9ydCA8UmV2ZWFsQ29yZS9S
VlNlbGVjdGlvbi5oPgotI2ltcG9ydCA8UmV2ZWFsQ29yZS9SZXZlYWxDb3JlLmg+Ci0KLSNlbHNl
IC8vIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0KLQotQHByb3RvY29sIFJWUHJlc2VudGVySGln
aGxpZ2h0RGVsZWdhdGU7Ci0KLUBpbnRlcmZhY2UgUlZJdGVtIDogTlNPYmplY3QgPE5TU2VjdXJl
Q29kaW5nPgotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHNl
bGVjdGVkUmFuZ2U6KE5TUmFuZ2Upc2VsZWN0ZWRSYW5nZSBOU19ERVNJR05BVEVEX0lOSVRJQUxJ
WkVSOwotQGVuZAotCi1AaW50ZXJmYWNlIFJWU2VsZWN0aW9uIDogTlNPYmplY3QKLSsgKE5TUmFu
Z2UpcmV2ZWFsUmFuZ2VBdEluZGV4OihOU1VJbnRlZ2VyKWNsaWNrSW5kZXggc2VsZWN0ZWRSYW5n
ZXM6KE5TQXJyYXkgPE5TVmFsdWUgKj4gKilzZWxlY3RlZFJhbmdlcyBzaG91bGRVcGRhdGVTZWxl
Y3Rpb246KEJPT0wgKilzaG91bGRVcGRhdGVTZWxlY3Rpb247Ci1AZW5kCi0KLUBpbnRlcmZhY2Ug
UlZQcmVzZW50aW5nQ29udGV4dCA6IE5TT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQ
b2ludGVyTG9jYXRpb25JblZpZXc6KE5TUG9pbnQpcG9pbnRlckxvY2F0aW9uSW5WaWV3IGluVmll
dzooTlNWaWV3ICopdmlldyBoaWdobGlnaHREZWxlZ2F0ZTooaWQ8UlZQcmVzZW50ZXJIaWdobGln
aHREZWxlZ2F0ZT4paGlnaGxpZ2h0RGVsZWdhdGU7Ci1AZW5kCi0KLUBwcm90b2NvbCBSVlByZXNl
bnRlckhpZ2hsaWdodERlbGVnYXRlIDxOU09iamVjdD4KLUByZXF1aXJlZAotLSAoTlNBcnJheSA8
TlNWYWx1ZSAqPiAqKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0
IHJlY3RzRm9ySXRlbTooUlZJdGVtICopaXRlbTsKLUBvcHRpb25hbAotLSAodm9pZClyZXZlYWxD
b250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopY29udGV4dCBzdG9wSGlnaGxpZ2h0aW5nSXRl
bTooUlZJdGVtICopaXRlbTsKLS0gKHZvaWQpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29u
dGV4dCAqKWNvbnRleHQgZHJhd1JlY3RzRm9ySXRlbTooUlZJdGVtICopaXRlbTsKLUBlbmQKLQot
QGludGVyZmFjZSBSVkRvY3VtZW50Q29udGV4dCA6IE5TT2JqZWN0IDwgTlNTZWN1cmVDb2Rpbmcg
PgotQGVuZAotCi1AaW50ZXJmYWNlIFJWUHJlc2VudGVyIDogTlNPYmplY3QKLSNpZiBQTEFURk9S
TShNQUMpCi0tIChpZDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+KWFuaW1h
dGlvbkNvbnRyb2xsZXJGb3JJdGVtOihSVkl0ZW0gKilpdGVtIGRvY3VtZW50Q29udGV4dDooUlZE
b2N1bWVudENvbnRleHQgKilkb2N1bWVudENvbnRleHQgcHJlc2VudGluZ0NvbnRleHQ6KFJWUHJl
c2VudGluZ0NvbnRleHQgKilwcmVzZW50aW5nQ29udGV4dCBvcHRpb25zOihOU0RpY3Rpb25hcnkg
KilvcHRpb25zOwotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLS0gKEJPT0wpcmV2ZWFsSXRlbToo
UlZJdGVtICopaXRlbSBkb2N1bWVudENvbnRleHQ6KFJWRG9jdW1lbnRDb250ZXh0ICopZG9jdW1l
bnRDb250ZXh0IHByZXNlbnRpbmdDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0ICopcHJlc2Vu
dGluZ0NvbnRleHQgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0aW9uczsKLUBlbmQKLQotI2Vu
ZGlmIC8vICFVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9zcGkvbWFjL0xvb2t1cFNQSS5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9z
cGkvbWFjL0xvb2t1cFNQSS5oCmluZGV4IGUwYTMzNzVkMzBjYzg4OWYxMzVlYTJhMTFkNDdkMGRh
OTRmOThhODcuLmViN2Y5NTFmNzFjNzVjODEyMTdiMjJlNzhhZGFkMzBlNGQ2YTVjMDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9Mb29rdXBTUEkuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvTG9va3VwU1BJLmgKQEAgLTIzLDEzICsyMywx
MiBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotCi0jaWYgUExBVEZPUk0oTUFDKQotCiAjaW1w
b3J0IDxvYmpjL3J1bnRpbWUuaD4KICNpbXBvcnQgPHBhbC9zcGkvbWFjL05TSW1tZWRpYXRlQWN0
aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KICNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgog
CisjaWYgUExBVEZPUk0oTUFDKQorCiBTT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUktfT1BUSU9O
QUwoTG9va3VwKQogU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKExvb2t1cCwgTFVMb29rdXBEZWZp
bml0aW9uTW9kdWxlKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9t
YWMvUmV2ZWFsU1BJLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvUmV2ZWFsU1BJ
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZDZiOGRhNDJjODU5OTBhZTMyZWE2N2EwYWY3NzUzZjNkYjk4MjhhNQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9SZXZlYWxT
UEkuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KKyNpbXBvcnQgPHBhbC9zcGkv
bWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KKyNpbXBvcnQgPHd0
Zi9Tb2Z0TGlua2luZy5oPgorCitTT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUksoUmV2ZWFsKQor
U09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKFJldmVhbENvcmUpCitTT0ZUX0xJTktfQ0xBU1Nf
T1BUSU9OQUwoUmV2ZWFsLCBSVlByZXNlbnRlcikKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChS
ZXZlYWwsIFJWUHJlc2VudGluZ0NvbnRleHQpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoUmV2
ZWFsQ29yZSwgUlZJdGVtKQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFJldmVhbENvcmUsIFJW
U2VsZWN0aW9uKQorCisjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKworI2ltcG9ydCA8UmV2
ZWFsL1JWUHJlc2VudGVyLmg+CisjaW1wb3J0IDxSZXZlYWwvUmV2ZWFsLmg+CisjaW1wb3J0IDxS
ZXZlYWxDb3JlL1JWU2VsZWN0aW9uLmg+CisjaW1wb3J0IDxSZXZlYWxDb3JlL1JldmVhbENvcmUu
aD4KKworCisjZWxzZQorCitAaW50ZXJmYWNlIFJWSXRlbSA6IE5TT2JqZWN0IDxOU1NlY3VyZUNv
ZGluZz4KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBzZWxl
Y3RlZFJhbmdlOihOU1JhbmdlKXNlbGVjdGVkUmFuZ2UgTlNfREVTSUdOQVRFRF9JTklUSUFMSVpF
UjsKK0BlbmQKKworQGludGVyZmFjZSBSVlNlbGVjdGlvbiA6IE5TT2JqZWN0CisrIChOU1Jhbmdl
KXJldmVhbFJhbmdlQXRJbmRleDooTlNVSW50ZWdlciljbGlja0luZGV4IHNlbGVjdGVkUmFuZ2Vz
OihOU0FycmF5IDxOU1ZhbHVlICo+ICopc2VsZWN0ZWRSYW5nZXMgc2hvdWxkVXBkYXRlU2VsZWN0
aW9uOihCT09MICopc2hvdWxkVXBkYXRlU2VsZWN0aW9uOworQGVuZAorCitAaW50ZXJmYWNlIFJW
UHJlc2VudGVyIDogTlNPYmplY3QKKy0gKGlkPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29u
dHJvbGxlcj4pYW5pbWF0aW9uQ29udHJvbGxlckZvckl0ZW06KFJWSXRlbSAqKWl0ZW0gZG9jdW1l
bnRDb250ZXh0OihSVkRvY3VtZW50Q29udGV4dCAqKWRvY3VtZW50Q29udGV4dCBwcmVzZW50aW5n
Q29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKXByZXNlbnRpbmdDb250ZXh0IG9wdGlvbnM6
KE5TRGljdGlvbmFyeSAqKW9wdGlvbnM7CistIChCT09MKXJldmVhbEl0ZW06KFJWSXRlbSAqKWl0
ZW0gZG9jdW1lbnRDb250ZXh0OihSVkRvY3VtZW50Q29udGV4dCAqKWRvY3VtZW50Q29udGV4dCBw
cmVzZW50aW5nQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKXByZXNlbnRpbmdDb250ZXh0
IG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnM7CitAZW5kCisKKyNlbmRpZiAvLyAhVVNF
KEFQUExFX0lOVEVSTkFMX1NESykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXND
b2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDA2MmNkZDdm
MDdkNzBlMzBkOWYwNmYzMDU3M2Q2OTdmYmZmMTViNmYuLjA2M2RmZGMyMjg5NjNmYmFlNTk2MGUw
MjRjYjhmMjRmZDM3YTVlZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2Nv
YS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtNzcsNyArNzcs
NiBAQCBlZGl0aW5nL1NlbGVjdGlvblJlY3RHYXRoZXJlci5jcHAKIGVkaXRpbmcvU21hcnRSZXBs
YWNlQ0YuY3BwCiAKIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQotZWRpdGluZy9jb2Nv
YS9EaWN0aW9uYXJ5TG9va3VwLm1tCiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCiBlZGl0
aW5nL2NvY29hL0ZvbnRBdHRyaWJ1dGVDaGFuZ2VzQ29jb2EubW0KIGVkaXRpbmcvY29jb2EvRm9u
dEF0dHJpYnV0ZXNDb2NvYS5tbQpAQCAtOTEsNiArOTAsNyBAQCBlZGl0aW5nL2lvcy9EaWN0YXRp
b25Db21tYW5kSU9TLmNwcAogZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCiAKIGVkaXRpbmcvbWFj
L0FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5tbQorZWRpdGluZy9tYWMvRGljdGlvbmFyeUxv
b2t1cC5tbQogZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQogZWRpdGluZy9t
YWMvRWRpdG9yTWFjLm1tCiBlZGl0aW5nL21hYy9GcmFtZVNlbGVjdGlvbk1hYy5tbQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDc4
NzY1ZjNiYjUxNGE2MzU0ODg2OTY3MzViMWY2ZDBkODMzODI1MGMuLmI0MWEzOTY3ZTUwNGIxZWYz
Y2ZlZTVlZmYyNWM3MTE3MDlhMTcwNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIwNTE5LDcgKzIwNTE5LDYgQEAKIAkJCWNo
aWxkcmVuID0gKAogCQkJCUM1MjI3REVGMUMzQzZERDcwMEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9u
LmggKi8sCiAJCQkJQzUyMjdERjAxQzNDNkRENzAwRjVFRDU0IC8qIERhdGFEZXRlY3Rpb24ubW0g
Ki8sCi0JCQkJOTM3RkYzRDYxQTEwMTMxQjAwOEVCQTMxIC8qIERpY3Rpb25hcnlMb29rdXAubW0g
Ki8sCiAJCQkJOUI1NUVFRTgxQjNFODg5ODAwNTM0MkJDIC8qIEVkaXRvckNvY29hLm1tICovLAog
CQkJCUY0MkNFQjU0MjE0MDMxRUUwMDJEQ0E3MiAvKiBGb250QXR0cmlidXRlQ2hhbmdlc0NvY29h
Lm1tICovLAogCQkJCUY0OEQyQTc1MjE1NkZFNTcwMEM2NzUyQiAvKiBGb250QXR0cmlidXRlc0Nv
Y29hLm1tICovLApAQCAtMjYyMjYsNiArMjYyMjUsNyBAQAogCQkJCUNFN0IyREFGMTU4NkFCQUQw
MDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIuaCAqLywKIAkJCQlDRTdCMkRC
MDE1ODZBQkFEMDA5OEIzRkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLm1tICovLAog
CQkJCTkzN0ZGM0Q0MUExMDEyRDYwMDhFQkEzMSAvKiBEaWN0aW9uYXJ5TG9va3VwLmggKi8sCisJ
CQkJOTM3RkYzRDYxQTEwMTMxQjAwOEVCQTMxIC8qIERpY3Rpb25hcnlMb29rdXAubW0gKi8sCiAJ
CQkJNDQyOTU2Q0EyMThBNkQzMDAwODBEQjU0IC8qIERpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0g
Ki8sCiAJCQkJRUQ1MDFEQzUwQjI0OUYyOTAwQUUxOEQ5IC8qIEVkaXRvck1hYy5tbSAqLywKIAkJ
CQk0QThDOTZFQTBCRTY5MDMyMDA0RUVGRjAgLyogRnJhbWVTZWxlY3Rpb25NYWMubW0gKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3NGI1MmEzYzcxZjAwMmExYzQyY2VlYzljZTZk
OGU4YWE3YTJlM2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCisrKyAv
ZGV2L251bGwKQEAgLTEsNDI0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNv
bmZpZy5oIgotI2ltcG9ydCAiRGljdGlvbmFyeUxvb2t1cC5oIgotCi0jaWYgUExBVEZPUk0oQ09D
T0EpCi0KLSNpbXBvcnQgIkRvY3VtZW50LmgiCi0jaW1wb3J0ICJFZGl0aW5nLmgiCi0jaW1wb3J0
ICJGb2N1c0NvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIkZyYW1lLmgiCi0jaW1wb3J0ICJGcmFtZVNl
bGVjdGlvbi5oIgotI2ltcG9ydCAiSFRNTENvbnZlcnRlci5oIgotI2ltcG9ydCAiSGl0VGVzdFJl
c3VsdC5oIgotI2ltcG9ydCAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbXBvcnQgIlBhZ2UuaCIKLSNp
bXBvcnQgIlJhbmdlLmgiCi0jaW1wb3J0ICJSZW5kZXJPYmplY3QuaCIKLSNpbXBvcnQgIlRleHRJ
dGVyYXRvci5oIgotI2ltcG9ydCAiVmlzaWJsZVBvc2l0aW9uLmgiCi0jaW1wb3J0ICJWaXNpYmxl
U2VsZWN0aW9uLmgiCi0jaW1wb3J0ICJWaXNpYmxlVW5pdHMuaCIKLSNpbXBvcnQgPFBERktpdC9Q
REZLaXQuaD4KLSNpbXBvcnQgPHBhbC9zcGkvbWFjL0xvb2t1cFNQSS5oPgotI2ltcG9ydCA8d3Rm
L0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KLQotI2lmIEVO
QUJMRShSRVZFQUwpCi0jaW1wb3J0IDxwYWwvc3BpL2NvY29hL1JldmVhbFNQSS5oPgotCi0jaWYg
UExBVEZPUk0oTUFDKQotCi1AaW50ZXJmYWNlIFdlYlJldmVhbEhpZ2hsaWdodCA8UlZQcmVzZW50
ZXJIaWdobGlnaHREZWxlZ2F0ZT4gOiBOU09iamVjdCB7Ci1AcHJpdmF0ZQotICAgIEZ1bmN0aW9u
PHZvaWQoKT4gX2NsZWFyVGV4dEluZGljYXRvcjsKLSAgICBOU1JlY3QgX2hpZ2hsaWdodFJlY3Q7
Ci0gICAgQk9PTCBfdXNlRGVmYXVsdEhpZ2hsaWdodDsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcg
Kl9hdHRyaWJ1dGVkU3RyaW5nOwotfQotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IE5TUmVjdCBoaWdobGlnaHRSZWN0OwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBC
T09MIHVzZURlZmF1bHRIaWdobGlnaHQ7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZzsKLQotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoSGlnaGxpZ2h0UmVjdDooTlNSZWN0KWhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhp
Z2hsaWdodDooQk9PTCl1c2VEZWZhdWx0SGlnaGxpZ2h0IGF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0
cmlidXRlZFN0cmluZyAqKSBhdHRyaWJ1dGVkU3RyaW5nOwotLSAodm9pZClzZXRDbGVhclRleHRJ
bmRpY2F0b3I6KEZ1bmN0aW9uPHZvaWQoKT4mJiljbGVhclRleHRJbmRpY2F0b3I7Ci0KLUBlbmQK
LQotQGltcGxlbWVudGF0aW9uIFdlYlJldmVhbEhpZ2hsaWdodAotCi1Ac3ludGhlc2l6ZSBoaWdo
bGlnaHRSZWN0PV9oaWdobGlnaHRSZWN0OwotQHN5bnRoZXNpemUgdXNlRGVmYXVsdEhpZ2hsaWdo
dD1fdXNlRGVmYXVsdEhpZ2hsaWdodDsKLUBzeW50aGVzaXplIGF0dHJpYnV0ZWRTdHJpbmc9X2F0
dHJpYnV0ZWRTdHJpbmc7Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEhpZ2hsaWdodFJlY3Q6
KE5TUmVjdCloaWdobGlnaHRSZWN0IHVzZURlZmF1bHRIaWdobGlnaHQ6KEJPT0wpdXNlRGVmYXVs
dEhpZ2hsaWdodCBhdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKikgYXR0cmli
dXRlZFN0cmluZwotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIAotICAgIF9oaWdobGlnaHRSZWN0ID0gaGlnaGxpZ2h0UmVjdDsKLSAg
ICBfdXNlRGVmYXVsdEhpZ2hsaWdodCA9IHVzZURlZmF1bHRIaWdobGlnaHQ7Ci0gICAgX2F0dHJp
YnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nOwotICAgIAotICAgIHJldHVybiBzZWxmOwot
fQotCi0tICh2b2lkKXNldENsZWFyVGV4dEluZGljYXRvcjooRnVuY3Rpb248dm9pZCgpPiYmKWNs
ZWFyVGV4dEluZGljYXRvcgotewotICAgIF9jbGVhclRleHRJbmRpY2F0b3IgPSBXVEZNb3ZlKGNs
ZWFyVGV4dEluZGljYXRvcik7Ci19Ci0KLS0gKE5TQXJyYXk8TlNWYWx1ZSAqPiAqKXJldmVhbENv
bnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IHJlY3RzRm9ySXRlbTooUlZJdGVt
ICopaXRlbQotewotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSAgICBVTlVTRURfUEFSQU0o
aXRlbSk7Ci0gICAgcmV0dXJuIEBbW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpzZWxmLmhpZ2hsaWdo
dFJlY3RdXTsKLX0KLQotLSAodm9pZClyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdDb250ZXh0
ICopY29udGV4dCBkcmF3UmVjdHNGb3JJdGVtOihSVkl0ZW0gKilpdGVtCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGl0ZW0pOwotICAgIAotICAgIGZvciAoTlNWYWx1ZSAqcmVjdFZhbCBpbiBjb250ZXh0
Lml0ZW1SZWN0c0luVmlldykgewotICAgICAgICBOU1JlY3QgcmVjdCA9IHJlY3RWYWwucmVjdFZh
bHVlOwotCi0gICAgICAgIC8vIEdldCBjdXJyZW50IGZvbnQgYXR0cmlidXRlcyBmcm9tIHRoZSBh
dHRyaWJ1dGVkIHN0cmluZyBhYm92ZSwgYW5kIGFkZCBwYXJhZ3JhcGggc3R5bGUgYXR0cmlidXRl
IGluIG9yZGVyIHRvIGNlbnRlciB0ZXh0LgotICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGlj
dGlvbmFyeT4gYXR0cmlidXRlcyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9j
XSBpbml0V2l0aERpY3Rpb25hcnk6W3NlbGYuYXR0cmlidXRlZFN0cmluZyBmb250QXR0cmlidXRl
c0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3NlbGYuYXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKV1d
KTsKLSAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZVBhcmFncmFwaFN0eWxlPiBwYXJhZ3JhcGgg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlUGFyYWdyYXBoU3R5bGUgYWxsb2NdIGluaXRdKTsKLSAgICAg
ICAgW3BhcmFncmFwaCBzZXRBbGlnbm1lbnQ6TlNUZXh0QWxpZ25tZW50Q2VudGVyXTsKLSAgICAg
ICAgW2F0dHJpYnV0ZXMgc2V0T2JqZWN0OnBhcmFncmFwaC5nZXQoKSBmb3JLZXk6TlNQYXJhZ3Jh
cGhTdHlsZUF0dHJpYnV0ZU5hbWVdOwotICAgIAotICAgICAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1
dGVkU3RyaW5nPiBzdHJpbmcgPSBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBp
bml0V2l0aFN0cmluZzpbc2VsZi5hdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ10gYXR0cmlidXRlczph
dHRyaWJ1dGVzLmdldCgpXSk7Ci0gICAgICAgIFtzdHJpbmcgZHJhd0luUmVjdDpyZWN0XTsKLSAg
ICB9Ci19Ci0KLS0gKEJPT0wpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNv
bnRleHQgc2hvdWxkVXNlRGVmYXVsdEhpZ2hsaWdodEZvckl0ZW06KFJWSXRlbSAqKWl0ZW0KLXsK
LSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZW0pOwotICAg
IHJldHVybiBzZWxmLnVzZURlZmF1bHRIaWdobGlnaHQ7Ci19Ci0KLS0gKHZvaWQpcmV2ZWFsQ29u
dGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgc3RvcEhpZ2hsaWdodGluZ0l0ZW06
KFJWSXRlbSAqKWl0ZW0KLXsKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGl0ZW0pOwotICAgIGF1dG8gYmxvY2sgPSBXVEZNb3ZlKF9jbGVhclRleHRJbmRpY2F0
b3IpOwotICAgIGlmIChibG9jaykKLSAgICAgICAgYmxvY2soKTsKLX0KLQotQGVuZAotCi0jZW5k
aWYgLy8gUExBVEZPUk0oTUFDKQotCi0jZW5kaWYgLy8gRU5BQkxFKFJFVkVBTCkKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi0jaWYgRU5BQkxFKFJFVkVBTCkKLQotc3RkOjp0dXBsZTxSZWZQdHI8
UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rp
b24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQotewotICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCi0gICAg
ICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotICAgIAotICAgIGF1dG8gc2VsZWN0ZWRSYW5n
ZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghc2VsZWN0ZWRSYW5n
ZSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0KLSAgICAvLyBTaW5jZSB3ZSBh
bHJlYWR5IGhhdmUgdGhlIHJhbmdlIHdlIHdhbnQsIHdlIGp1c3QgbmVlZCB0byBncmFiIHRoZSBy
ZXR1cm5lZCBvcHRpb25zLgotICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlz
aWJsZVN0YXJ0KCk7Ci0gICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVu
ZCgpOwotCi0gICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91
bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgotICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFy
dE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKLSAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVu
ZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7Ci0KLSAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25T
dGFydCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0
LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOwotICAgIGludCBsZW5ndGhUb1NlbGVjdGlvbkVuZCA9
IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxl
Y3Rpb25FbmQpLmdldCgpKTsKLSAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2Uo
bGVuZ3RoVG9TZWxlY3Rpb25TdGFydCwgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgLSBsZW5ndGhUb1Nl
bGVjdGlvblN0YXJ0KTsKLSAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5n
ZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKLSAgICBTdHJpbmcg
aXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwotICAgIFJl
dGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5p
dFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRSYW5nZTpyYW5nZVRvUGFzc10pOwotICAgIE5T
UmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdlOwotICAgIAot
ICAgIHJldHVybiB7IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwg
aGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24sIGhpZ2hsaWdodFJhbmdlLmxlbmd0aCksIG5pbCB9Owot
ICAgIAotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgcmV0dXJuIHsg
bnVsbHB0ciwgbmlsIH07Ci19Ci0KLXN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9u
YXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRl
c3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwotICAgIAotICAgIGlmICghZ2V0UlZJdGVtQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJuIHsg
bnVsbHB0ciwgbmlsIH07Ci0gICAgCi0gICAgYXV0byogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5u
ZXJOb25TaGFyZWROb2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcigpKQot
ICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLQotICAgIGF1dG8qIGZyYW1lID0gbm9k
ZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiB7
IG51bGxwdHIsIG5pbCB9OwotCi0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlcmUgaXMg
bm8gY2hhcmFjdGVyIGF0IHRoZSBwb2ludC4KLSAgICBhdXRvIGZyYW1lUG9pbnQgPSBoaXRUZXN0
UmVzdWx0LnJvdW5kZWRQb2ludEluSW5uZXJOb2RlRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lLT5y
YW5nZUZvclBvaW50KGZyYW1lUG9pbnQpKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwg
fTsKLQotICAgIGF1dG8gcG9zaXRpb24gPSBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQo
ZnJhbWVQb2ludCk7Ci0gICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICBwb3NpdGlv
biA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKTsKLQotICAgIGF1dG8gc2VsZWN0
aW9uID0gZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1l
KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgTlNSYW5nZSBzZWxlY3Rpb25SYW5nZTsK
LSAgICBpbnQgaGl0SW5kZXg7Ci0gICAgUmVmUHRyPFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2U7
Ci0gICAgCi0gICAgaWYgKHNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVj
dGlvbjo6UmFuZ2VTZWxlY3Rpb24pIHsKLSAgICAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNl
bGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICAgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxl
Y3Rpb24udmlzaWJsZUVuZCgpOwotICAgICAgICAKLSAgICAgICAgLy8gQXMgY29udGV4dCwgd2Ug
YXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgotICAg
ICAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFy
dCk7Ci0gICAgICAgIGF1dG8gcGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9u
RW5kKTsKLSAgICAgICAgCi0gICAgICAgIGF1dG8gcmFuZ2VUb1NlbGVjdGlvblN0YXJ0ID0gbWFr
ZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCk7Ci0gICAgICAgIGF1dG8gcmFu
Z2VUb1NlbGVjdGlvbkVuZCA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5k
KTsKLSAgICAgICAgCi0gICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJh
Z3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKLSAgICAgICAgCi0gICAgICAgIHNlbGVjdGlvblJh
bmdlID0gTlNNYWtlUmFuZ2UoVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZVRvU2VsZWN0
aW9uU3RhcnQuZ2V0KCkpLCBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShzZWxl
Y3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKS5nZXQoKSkpOwotICAgICAgICAKLSAgICAgICAgaGl0
SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFy
dCwgcG9zaXRpb24pLmdldCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBWaXNpYmxlU2VsZWN0
aW9uIHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMgeyBwb3NpdGlvbiB9OwotICAgICAg
ICBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHko
V29yZEdyYW51bGFyaXR5KTsKLSAgICAgICAgcG9zaXRpb24gPSBzZWxlY3Rpb25BY2NvdW50aW5n
Rm9yTGluZVJ1bGVzLnN0YXJ0KCk7Ci0gICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2lu
ZyB0byB1c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2lu
dC4KLSAgICAgICAgZnVsbENoYXJhY3RlclJhbmdlID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0
aW9uQnlDaGFyYWN0ZXJzKHBvc2l0aW9uLCAyNTApOwotICAgICAgICAKLSAgICAgICAgaWYgKCFm
dWxsQ2hhcmFjdGVyUmFuZ2UpCi0gICAgICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsK
LSAgICAgICAgCi0gICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3Vu
ZCwgMCk7Ci0gICAgICAgIGhpdEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtl
UmFuZ2UoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9uKS5nZXQo
KSk7Ci0gICAgfQotICAgIAotICAgIE5TUmFuZ2Ugc2VsZWN0ZWRSYW5nZSA9IFtnZXRSVlNlbGVj
dGlvbkNsYXNzKCkgcmV2ZWFsUmFuZ2VBdEluZGV4OmhpdEluZGV4IHNlbGVjdGVkUmFuZ2VzOkBb
W05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6c2VsZWN0aW9uUmFuZ2VdXSBzaG91bGRVcGRhdGVTZWxl
Y3Rpb246bmlsXTsKLSAgICAKLSAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxs
Q2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwotICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9w
dE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0
ZWRSYW5nZTpzZWxlY3RlZFJhbmdlXSk7Ci0gICAgTlNSYW5nZSBoaWdobGlnaHRSYW5nZSA9IGl0
ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7Ci0KLSAgICBpZiAoaGlnaGxpZ2h0UmFuZ2UubG9jYXRp
b24gPT0gTlNOb3RGb3VuZCB8fCAhaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKQotICAgICAgICByZXR1
cm4geyBudWxscHRyLCBuaWwgfTsKLSAgICAKLSAgICByZXR1cm4geyBUZXh0SXRlcmF0b3I6OnN1
YnJhbmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uLCBoaWdo
bGlnaHRSYW5nZS5sZW5ndGgpLCBuaWwgfTsKLSAgICAKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwotICAgIAotICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotICAgIAotfQotCi1z
dGF0aWMgdm9pZCBleHBhbmRTZWxlY3Rpb25CeUNoYXJhY3RlcnMoUERGU2VsZWN0aW9uICpzZWxl
Y3Rpb24sIE5TSW50ZWdlciBudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCwgTlNJbnRlZ2VyJiBj
aGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwgTlNJbnRlZ2VyJiBjaGFyYWN0ZXJzQWRkZWRBZnRl
ckVuZCkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBzaXplX3Qg
b3JpZ2luYWxMZW5ndGggPSBzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aDsKLSAgICBbc2VsZWN0aW9u
IGV4dGVuZFNlbGVjdGlvbkF0U3RhcnQ6bnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmRdOwotICAg
IAotICAgIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0ID0gc2VsZWN0aW9uLnN0cmluZy5sZW5n
dGggLSBvcmlnaW5hbExlbmd0aDsKLSAgICAKLSAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlv
bkF0RW5kOm51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kXTsKLSAgICBjaGFyYWN0ZXJzQWRkZWRB
ZnRlckVuZCA9IHNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoIC0gb3JpZ2luYWxMZW5ndGggLSBjaGFy
YWN0ZXJzQWRkZWRCZWZvcmVTdGFydDsKLQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
Ci19Ci0KLXN0ZDo6dHVwbGU8TlNTdHJpbmcgKiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlM
b29rdXA6OnN0cmluZ0ZvclBERlNlbGVjdGlvbihQREZTZWxlY3Rpb24gKnNlbGVjdGlvbikKLXsK
LSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgaWYgKCFnZXRSVkl0
ZW1DbGFzcygpKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLQotICAgIC8vIERv
bid0IGRvIGFueXRoaW5nIGlmIHRoZXJlIGlzIG5vIGNoYXJhY3RlciBhdCB0aGUgcG9pbnQuCi0g
ICAgaWYgKCFzZWxlY3Rpb24gfHwgIXNlbGVjdGlvbi5zdHJpbmcubGVuZ3RoKQotICAgICAgICBy
ZXR1cm4geyBAIiIsIG5pbCB9OwotCi0gICAgUmV0YWluUHRyPFBERlNlbGVjdGlvbj4gc2VsZWN0
aW9uRm9yTG9va3VwID0gYWRvcHROUyhbc2VsZWN0aW9uIGNvcHldKTsKLQotICAgIC8vIEFzIGNv
bnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUg
YW5kIGFmdGVyIHRoZSBwb2ludC4KLSAgICBhdXRvIG9yaWdpbmFsTGVuZ3RoID0gW3NlbGVjdGlv
bkZvckxvb2t1cCBzdHJpbmddLmxlbmd0aDsKLSAgICBOU0ludGVnZXIgY2hhcmFjdGVyc0FkZGVk
QmVmb3JlU3RhcnQgPSAwOwotICAgIE5TSW50ZWdlciBjaGFyYWN0ZXJzQWRkZWRBZnRlckVuZCA9
IDA7Ci0gICAgZXhwYW5kU2VsZWN0aW9uQnlDaGFyYWN0ZXJzKHNlbGVjdGlvbkZvckxvb2t1cC5n
ZXQoKSwgMjUwLCBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCwgY2hhcmFjdGVyc0FkZGVkQWZ0
ZXJFbmQpOwotCi0gICAgYXV0byBmdWxsUGxhaW5UZXh0U3RyaW5nID0gW3NlbGVjdGlvbkZvckxv
b2t1cCBzdHJpbmddOwotICAgIGF1dG8gcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShjaGFyYWN0
ZXJzQWRkZWRCZWZvcmVTdGFydCwgMCk7Ci0KLSAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0g
YWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDpmdWxsUGxhaW5UZXh0
U3RyaW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VUb1Bhc3NdKTsKLSAgICBOU1JhbmdlIGV4dHJhY3Rl
ZFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKLSAgICAKLSAgICBpZiAoZXh0cmFj
dGVkUmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIHsgc2VsZWN0
aW9uLnN0cmluZywgbmlsIH07Ci0KLSAgICBOU0ludGVnZXIgbG9va3VwQWRkZWRCZWZvcmUgPSBy
YW5nZVRvUGFzcy5sb2NhdGlvbiAtIGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uOwotICAgIE5TSW50
ZWdlciBsb29rdXBBZGRlZEFmdGVyID0gKGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uICsgZXh0cmFj
dGVkUmFuZ2UubGVuZ3RoKSAtIChyYW5nZVRvUGFzcy5sb2NhdGlvbiArIG9yaWdpbmFsTGVuZ3Ro
KTsKLQotICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRTdGFydDpsb29rdXBBZGRlZEJl
Zm9yZV07Ci0gICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdEVuZDpsb29rdXBBZGRlZEFm
dGVyXTsKLQotICAgIEFTU0VSVChbc2VsZWN0aW9uLnN0cmluZyBpc0VxdWFsVG9TdHJpbmc6W2Z1
bGxQbGFpblRleHRTdHJpbmcgc3Vic3RyaW5nV2l0aFJhbmdlOmV4dHJhY3RlZFJhbmdlXV0pOwot
ICAgIHJldHVybiB7IHNlbGVjdGlvbi5zdHJpbmcsIG5pbCB9OwotCi0gICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKLQotICAgIHJldHVybiB7IEAiIiwgbmlsIH07Ci19Ci0KLXN0YXRpYyBX
S1JldmVhbENvbnRyb2xsZXIgc2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKGJv
b2wgY3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlciwgY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYg
ZGljdGlvbmFyeVBvcHVwSW5mbywgTlNWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZv
aWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBj
b25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdD
b252ZXJzaW9uQ2FsbGJhY2ssIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGlj
YXRvcikKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0jaWYgUExB
VEZPUk0oTUFDKQotICAgIAotICAgIGlmICghZ2V0UlZJdGVtQ2xhc3MoKSB8fCAhZ2V0UlZQcmVz
ZW50ZXJDbGFzcygpKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgUmV0YWluUHRyPE5TTXV0
YWJsZURpY3Rpb25hcnk+IG11dGFibGVPcHRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rp
b25hcnkgYWxsb2NdIGluaXRdKTsKLSAgICBpZiAoTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gZGlj
dGlvbmFyeVBvcHVwSW5mby5vcHRpb25zLmdldCgpKQotICAgICAgICBbbXV0YWJsZU9wdGlvbnMg
YWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5Om9wdGlvbnNdOwotCi0gICAgYXV0byB0ZXh0SW5kaWNh
dG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGRpY3Rpb25hcnlQb3B1cEluZm8udGV4dEluZGlj
YXRvcik7Ci0gICAgCi0gICAgUmV0YWluUHRyPFJWUHJlc2VudGVyPiBwcmVzZW50ZXIgPSBhZG9w
dE5TKFthbGxvY1JWUHJlc2VudGVySW5zdGFuY2UoKSBpbml0XSk7Ci0gICAgCi0gICAgTlNSZWN0
IGhpZ2hsaWdodFJlY3Q7Ci0gICAgTlNQb2ludCBwb2ludGVyTG9jYXRpb247Ci0gICAgCi0gICAg
aWYgKHRleHRJbmRpY2F0b3IuZ2V0KCkuY29udGVudEltYWdlKCkpIHsKLSAgICAgICAgdGV4dElu
ZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrKHRleHRJbmRpY2F0b3IuZ2V0KCkpOwotCi0gICAg
ICAgIEZsb2F0UmVjdCBmaXJzdFRleHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0SW5kaWNh
dG9yLmdldCgpLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMoKVswXTsKLSAgICAg
ICAgRmxvYXRSZWN0IHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9IHRleHRJbmRp
Y2F0b3IuZ2V0KCkudGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpOwotICAg
ICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uQm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0
ZXh0SW5kaWNhdG9yLmdldCgpLnNlbGVjdGlvblJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoKTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChyb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaykg
ewotICAgICAgICAgICAgdGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzID0gcm9vdFZp
ZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2sodGV4dEJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5h
dGVzKTsKLSAgICAgICAgICAgIHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVz
ID0gcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2soc2VsZWN0aW9uQm91bmRpbmdSZWN0
SW5WaWV3Q29vcmRpbmF0ZXMpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmaXJzdFRl
eHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMubW92ZUJ5KHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29y
ZGluYXRlcy5sb2NhdGlvbigpKTsKLSAgICAgICAgaGlnaGxpZ2h0UmVjdCA9IHNlbGVjdGlvbkJv
dW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzOwotICAgICAgICBwb2ludGVyTG9jYXRpb24gPSBm
aXJzdFRleHRSZWN0SW5WaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKTsKLSAgICAgICAgCi0gICAg
fSBlbHNlIHsKLSAgICAgICAgTlNQb2ludCB0ZXh0QmFzZWxpbmVPcmlnaW4gPSBkaWN0aW9uYXJ5
UG9wdXBJbmZvLm9yaWdpbjsKLSAgICAgICAgCi0gICAgICAgIGhpZ2hsaWdodFJlY3QgPSB0ZXh0
SW5kaWNhdG9yLT5zZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCk7Ci0gICAgICAg
IHBvaW50ZXJMb2NhdGlvbiA9IFt2aWV3IGNvbnZlcnRQb2ludDp0ZXh0QmFzZWxpbmVPcmlnaW4g
dG9WaWV3Om5pbF07Ci0gICAgfQotICAgIAotICAgIFJldGFpblB0cjxXZWJSZXZlYWxIaWdobGln
aHQ+IHdlYkhpZ2hsaWdodCA9ICBhZG9wdE5TKFtbV2ViUmV2ZWFsSGlnaGxpZ2h0IGFsbG9jXSBp
bml0V2l0aEhpZ2hsaWdodFJlY3Q6IGhpZ2hsaWdodFJlY3QgdXNlRGVmYXVsdEhpZ2hsaWdodDoh
dGV4dEluZGljYXRvci5nZXQoKS5jb250ZW50SW1hZ2UoKSBhdHRyaWJ1dGVkU3RyaW5nOmRpY3Rp
b25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZy5nZXQoKV0pOwotICAgIFJldGFpblB0cjxS
VlByZXNlbnRpbmdDb250ZXh0PiBjb250ZXh0ID0gYWRvcHROUyhbYWxsb2NSVlByZXNlbnRpbmdD
b250ZXh0SW5zdGFuY2UoKSBpbml0V2l0aFBvaW50ZXJMb2NhdGlvbkluVmlldzpwb2ludGVyTG9j
YXRpb24gaW5WaWV3OnZpZXcgaGlnaGxpZ2h0RGVsZWdhdGU6KGlkPFJWUHJlc2VudGVySGlnaGxp
Z2h0RGVsZWdhdGU+KSB3ZWJIaWdobGlnaHQuZ2V0KCldKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8
UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4
dDpkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCkuc3RyaW5nIHNlbGVj
dGVkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgMCldKTsKLSAgICAKLSAgICBbd2ViSGlnaGxpZ2h0IHNl
dENsZWFyVGV4dEluZGljYXRvcjpbd2ViSGlnaGxpZ2h0ID0gV1RGTW92ZSh3ZWJIaWdobGlnaHQp
LCBjbGVhclRleHRJbmRpY2F0b3IgPSBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRvcildIHsKLSAg
ICAgICAgaWYgKGNsZWFyVGV4dEluZGljYXRvcikKLSAgICAgICAgICAgIGNsZWFyVGV4dEluZGlj
YXRvcigpOwotICAgIH1dOwotICAgIAotICAgIGlmIChjcmVhdGVBbmltYXRpb25Db250cm9sbGVy
KQotICAgICAgICByZXR1cm4gW3ByZXNlbnRlciBhbmltYXRpb25Db250cm9sbGVyRm9ySXRlbTpp
dGVtLmdldCgpIGRvY3VtZW50Q29udGV4dDpuaWwgcHJlc2VudGluZ0NvbnRleHQ6Y29udGV4dC5n
ZXQoKSBvcHRpb25zOm5pbF07Ci0gICAgW3ByZXNlbnRlciByZXZlYWxJdGVtOml0ZW0uZ2V0KCkg
ZG9jdW1lbnRDb250ZXh0Om5pbCBwcmVzZW50aW5nQ29udGV4dDpjb250ZXh0LmdldCgpIG9wdGlv
bnM6bmlsXTsKLSAgICByZXR1cm4gbmlsOwotICAgIAotI2Vsc2UgLy8gUExBVEZPUk0oTUFDKQot
ICAgIAotICAgIFVOVVNFRF9QQVJBTShjcmVhdGVBbmltYXRpb25Db250cm9sbGVyKTsKLSAgICBV
TlVTRURfUEFSQU0oZGljdGlvbmFyeVBvcHVwSW5mbyk7Ci0gICAgVU5VU0VEX1BBUkFNKHZpZXcp
OwotICAgIFVOVVNFRF9QQVJBTSh0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2spOwot
ICAgIFVOVVNFRF9QQVJBTShyb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjayk7Ci0gICAg
VU5VU0VEX1BBUkFNKGNsZWFyVGV4dEluZGljYXRvcik7Ci0gICAgCi0gICAgcmV0dXJuIG5pbDsK
LSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0gICAgCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKLSAgICAKLX0KLQotdm9pZCBEaWN0aW9uYXJ5TG9va3VwOjpzaG93UG9wdXAoY29uc3Qg
RGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbywgTlNWaWV3ICp2aWV3LCBj
b25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvcklu
c3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJl
Y3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvcikKLXsKLSAgICBzaG93UG9wdXBPckNyZWF0ZUFuaW1h
dGlvbkNvbnRyb2xsZXIoZmFsc2UsIGRpY3Rpb25hcnlQb3B1cEluZm8sIHZpZXcsIHRleHRJbmRp
Y2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJh
Y2ssIFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKSk7Ci19Ci0KLXZvaWQgRGljdGlvbmFyeUxv
b2t1cDo6aGlkZVBvcHVwKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0jaWYgUExB
VEZPUk0oTUFDKQotCi1XS1JldmVhbENvbnRyb2xsZXIgRGljdGlvbmFyeUxvb2t1cDo6YW5pbWF0
aW9uQ29udHJvbGxlckZvclBvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25h
cnlQb3B1cEluZm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJ
bmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RG
OjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lv
bkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCi17
Ci0gICAgcmV0dXJuIHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcih0cnVlLCBk
aWN0aW9uYXJ5UG9wdXBJbmZvLCB2aWV3LCB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJh
Y2ssIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEZNb3ZlKGNsZWFyVGV4dElu
ZGljYXRvcikpOwotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCi0jZWxpZiBQTEFURk9S
TShJT1NfRkFNSUxZKSAvLyBFTkFCTEUoUkVWRUFMKQotCi1zdGQ6OnR1cGxlPFJlZlB0cjxSYW5n
ZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJikKLXsKLSAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsK
LX0KLQotc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFy
eUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYpCi17Ci0g
ICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoUkVWRUFM
KQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRl
ckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVy
Q29jb2EubW0KaW5kZXggODVjNDI3NDFhYmFkNzU3ZGQxMGZlNGE2ZDQzZjFiYmE3M2RmZjY5MC4u
ZTRiOTBiZGYyNzA1MmIwMzJmOWEzY2U0MzM1NDNkMWY4Nzc4NGY2NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0KQEAg
LTM0LDggKzM0LDYgQEAKICNpbXBvcnQgIkRvY3VtZW50LmgiCiAjaW1wb3J0ICJEb2N1bWVudEZy
YWdtZW50LmgiCiAjaW1wb3J0ICJEb2N1bWVudExvYWRlci5oIgotI2ltcG9ydCAiRWRpdG9yLmgi
Ci0jaW1wb3J0ICJFZGl0b3JDbGllbnQuaCIKICNpbXBvcnQgIkZpbGUuaCIKICNpbXBvcnQgIkZp
bGVTeXN0ZW0uaCIKICNpbXBvcnQgIkZyYW1lLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L21hYy9EaWN0aW9uYXJ5TG9va3VwLmgKaW5kZXggZjhmNzYxY2RjODFhZWJkM2RmMDg4MzdhMzIz
MWMwOGYzNWE0ZmViOS4uY2I2ZDUzZWI4ZjhjNGNmZDM4OTQ1N2Y1YmVhZTI4M2EzN2RhODE5MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAuaApAQCAt
MjMsMjUgKzIzLDE1IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAotI3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBQTEFURk9STShNQUMp
CiAKICNpbmNsdWRlICJEaWN0aW9uYXJ5UG9wdXBJbmZvLmgiCi0jaWYgUExBVEZPUk0oTUFDKQot
I2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplclNQ
SS5oPgotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDxwYWwvc3BpL21hYy9OU0lt
bWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0
aW9uLmg+CiAKIE9CSkNfQ0xBU1MgTlNWaWV3OwogT0JKQ19DTEFTUyBQREZTZWxlY3Rpb247CiAK
LSNpZiBQTEFURk9STShNQUMpCi10eXBlZGVmIGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlv
bkNvbnRyb2xsZXI+IFdLUmV2ZWFsQ29udHJvbGxlcjsKLSNlbHNlCi10eXBlZGVmIGlkIFdLUmV2
ZWFsQ29udHJvbGxlcjsKLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0KIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgSGl0VGVzdFJlc3VsdDsKQEAgLTU4LDExICs0OCw4IEBAIHB1YmxpYzoK
IAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNob3dQb3B1cChjb25zdCBEaWN0aW9u
YXJ5UG9wdXBJbmZvJiwgTlNWaWV3ICosIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0SW5k
aWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdURjo6
RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNpb25D
YWxsYmFjayA9IG51bGxwdHIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGlj
YXRvciA9IG51bGxwdHIpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGhpZGVQb3B1
cCgpOwotICAgIAotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
V0tSZXZlYWxDb250cm9sbGVyIGFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQb3B1cChjb25zdCBEaWN0
aW9uYXJ5UG9wdXBJbmZvJiwgTlNWaWV3ICosIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChUZXh0
SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIGNvbnN0IFdU
Rjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290Vmlld1RvVmlld0NvbnZlcnNp
b25DYWxsYmFjayA9IG51bGxwdHIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dElu
ZGljYXRvciA9IG51bGxwdHIpOwotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLSAgICAKKworICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBpZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250
cm9sbGVyPiBhbmltYXRpb25Db250cm9sbGVyRm9yUG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVw
SW5mbyYsIE5TVmlldyAqLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYp
PiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9u
PEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2sg
PSBudWxscHRyLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IgPSBu
dWxscHRyKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNlOWU0NDc0YTQ5
ZmNjOWIwOTViMmY0YmRhNmM5YWUzZjM4Y2ZlNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLm1tCkBAIC0wLDAgKzEsMzg4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkRpY3Rpb25h
cnlMb29rdXAuaCIKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFJFVkVBTCkKKworI2lt
cG9ydCAiRG9jdW1lbnQuaCIKKyNpbXBvcnQgIkVkaXRpbmcuaCIKKyNpbXBvcnQgIkZvY3VzQ29u
dHJvbGxlci5oIgorI2ltcG9ydCAiRnJhbWUuaCIKKyNpbXBvcnQgIkZyYW1lU2VsZWN0aW9uLmgi
CisjaW1wb3J0ICJIVE1MQ29udmVydGVyLmgiCisjaW1wb3J0ICJIaXRUZXN0UmVzdWx0LmgiCisj
aW1wb3J0ICJQYWdlLmgiCisjaW1wb3J0ICJSYW5nZS5oIgorI2ltcG9ydCAiUmVuZGVyT2JqZWN0
LmgiCisjaW1wb3J0ICJUZXh0SXRlcmF0b3IuaCIKKyNpbXBvcnQgIlZpc2libGVQb3NpdGlvbi5o
IgorI2ltcG9ydCAiVmlzaWJsZVNlbGVjdGlvbi5oIgorI2ltcG9ydCAiVmlzaWJsZVVuaXRzLmgi
CisjaW1wb3J0IDxQREZLaXQvUERGS2l0Lmg+CisjaW1wb3J0IDxwYWwvc3BpL21hYy9Mb29rdXBT
UEkuaD4KKyNpbXBvcnQgPHBhbC9zcGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29n
bml6ZXJTUEkuaD4KKyNpbXBvcnQgPHBhbC9zcGkvbWFjL1JldmVhbFNQSS5oPgorI2ltcG9ydCA8
d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KKworQGlu
dGVyZmFjZSBXZWJSZXZlYWxIaWdobGlnaHQgPFJWUHJlc2VudGVySGlnaGxpZ2h0RGVsZWdhdGU+
IDogTlNPYmplY3QgeworQHByaXZhdGUKKyAgICBGdW5jdGlvbjx2b2lkKCk+IF9jbGVhclRleHRJ
bmRpY2F0b3I7CisgICAgTlNSZWN0IF9oaWdobGlnaHRSZWN0OworICAgIEJPT0wgX3VzZURlZmF1
bHRIaWdobGlnaHQ7CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpfYXR0cmlidXRlZFN0cmluZzsK
K30KKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU1JlY3QgaGlnaGxpZ2h0UmVj
dDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCB1c2VEZWZhdWx0SGlnaGxp
Z2h0OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0F0dHJpYnV0ZWRTdHJpbmcg
KmF0dHJpYnV0ZWRTdHJpbmc7CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEhpZ2hsaWdodFJl
Y3Q6KE5TUmVjdCloaWdobGlnaHRSZWN0IHVzZURlZmF1bHRIaWdobGlnaHQ6KEJPT0wpdXNlRGVm
YXVsdEhpZ2hsaWdodCBhdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKikgYXR0
cmlidXRlZFN0cmluZzsKKy0gKHZvaWQpc2V0Q2xlYXJUZXh0SW5kaWNhdG9yOihGdW5jdGlvbjx2
b2lkKCk+JiYpY2xlYXJUZXh0SW5kaWNhdG9yOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBX
ZWJSZXZlYWxIaWdobGlnaHQKKworQHN5bnRoZXNpemUgaGlnaGxpZ2h0UmVjdD1faGlnaGxpZ2h0
UmVjdDsKK0BzeW50aGVzaXplIHVzZURlZmF1bHRIaWdobGlnaHQ9X3VzZURlZmF1bHRIaWdobGln
aHQ7CitAc3ludGhlc2l6ZSBhdHRyaWJ1dGVkU3RyaW5nPV9hdHRyaWJ1dGVkU3RyaW5nOworCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhIaWdobGlnaHRSZWN0OihOU1JlY3QpaGlnaGxpZ2h0UmVj
dCB1c2VEZWZhdWx0SGlnaGxpZ2h0OihCT09MKXVzZURlZmF1bHRIaWdobGlnaHQgYXR0cmlidXRl
ZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopIGF0dHJpYnV0ZWRTdHJpbmcKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAg
ICBfaGlnaGxpZ2h0UmVjdCA9IGhpZ2hsaWdodFJlY3Q7CisgICAgX3VzZURlZmF1bHRIaWdobGln
aHQgPSB1c2VEZWZhdWx0SGlnaGxpZ2h0OworICAgIF9hdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmli
dXRlZFN0cmluZzsKKyAgICAKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRDbGVh
clRleHRJbmRpY2F0b3I6KEZ1bmN0aW9uPHZvaWQoKT4mJiljbGVhclRleHRJbmRpY2F0b3IKK3sK
KyAgICBfY2xlYXJUZXh0SW5kaWNhdG9yID0gV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3IpOwor
fQorCistIChOU0FycmF5PE5TVmFsdWUgKj4gKilyZXZlYWxDb250ZXh0OihSVlByZXNlbnRpbmdD
b250ZXh0ICopY29udGV4dCByZWN0c0Zvckl0ZW06KFJWSXRlbSAqKWl0ZW0KK3sKKyAgICBVTlVT
RURfUEFSQU0oY29udGV4dCk7CisgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOworICAgIHJldHVybiBA
W1tOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6c2VsZi5oaWdobGlnaHRSZWN0XV07Cit9CisKKy0gKHZv
aWQpcmV2ZWFsQ29udGV4dDooUlZQcmVzZW50aW5nQ29udGV4dCAqKWNvbnRleHQgZHJhd1JlY3Rz
Rm9ySXRlbTooUlZJdGVtICopaXRlbQoreworICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKKyAgICAK
KyAgICBmb3IgKE5TVmFsdWUgKnJlY3RWYWwgaW4gY29udGV4dC5pdGVtUmVjdHNJblZpZXcpIHsK
KyAgICAgICAgTlNSZWN0IHJlY3QgPSByZWN0VmFsLnJlY3RWYWx1ZTsKKworICAgICAgICAvLyBH
ZXQgY3VycmVudCBmb250IGF0dHJpYnV0ZXMgZnJvbSB0aGUgYXR0cmlidXRlZCBzdHJpbmcgYWJv
dmUsIGFuZCBhZGQgcGFyYWdyYXBoIHN0eWxlIGF0dHJpYnV0ZSBpbiBvcmRlciB0byBjZW50ZXIg
dGV4dC4KKyAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IGF0dHJpYnV0ZXMg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhEaWN0aW9uYXJ5
OltzZWxmLmF0dHJpYnV0ZWRTdHJpbmcgZm9udEF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdl
KDAsIFtzZWxmLmF0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSldXSk7CisgICAgICAgIFJldGFpblB0
cjxOU011dGFibGVQYXJhZ3JhcGhTdHlsZT4gcGFyYWdyYXBoID0gYWRvcHROUyhbW05TTXV0YWJs
ZVBhcmFncmFwaFN0eWxlIGFsbG9jXSBpbml0XSk7CisgICAgICAgIFtwYXJhZ3JhcGggc2V0QWxp
Z25tZW50Ok5TVGV4dEFsaWdubWVudENlbnRlcl07CisgICAgICAgIFthdHRyaWJ1dGVzIHNldE9i
amVjdDpwYXJhZ3JhcGguZ2V0KCkgZm9yS2V5Ok5TUGFyYWdyYXBoU3R5bGVBdHRyaWJ1dGVOYW1l
XTsKKyAgICAKKyAgICAgICAgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gc3RyaW5nID0g
YWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6W3NlbGYu
YXR0cmlidXRlZFN0cmluZyBzdHJpbmddIGF0dHJpYnV0ZXM6YXR0cmlidXRlcy5nZXQoKV0pOwor
ICAgICAgICBbc3RyaW5nIGRyYXdJblJlY3Q6cmVjdF07CisgICAgfQorfQorCistIChCT09MKXJl
dmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0NvbnRleHQgKiljb250ZXh0IHNob3VsZFVzZURlZmF1
bHRIaWdobGlnaHRGb3JJdGVtOihSVkl0ZW0gKilpdGVtCit7CisgICAgVU5VU0VEX1BBUkFNKGNv
bnRleHQpOworICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKKyAgICByZXR1cm4gc2VsZi51c2VEZWZh
dWx0SGlnaGxpZ2h0OworfQorCistICh2b2lkKXJldmVhbENvbnRleHQ6KFJWUHJlc2VudGluZ0Nv
bnRleHQgKiljb250ZXh0IHN0b3BIaWdobGlnaHRpbmdJdGVtOihSVkl0ZW0gKilpdGVtCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOworICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKKyAgICBh
dXRvIGJsb2NrID0gV1RGTW92ZShfY2xlYXJUZXh0SW5kaWNhdG9yKTsKKyAgICBpZiAoYmxvY2sp
CisgICAgICAgIGJsb2NrKCk7Cit9CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3Vw
OjpyYW5nZUZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCit7
CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIGlmICghZ2V0UlZJ
dGVtQ2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgCisgICAg
YXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAg
aWYgKCFzZWxlY3RlZFJhbmdlKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKwor
ICAgIC8vIFNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmFuZ2Ugd2Ugd2FudCwgd2UganVzdCBu
ZWVkIHRvIGdyYWIgdGhlIHJldHVybmVkIG9wdGlvbnMuCisgICAgYXV0byBzZWxlY3Rpb25TdGFy
dCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKKyAgICBhdXRvIHNlbGVjdGlvbkVuZCA9IHNl
bGVjdGlvbi52aXNpYmxlRW5kKCk7CisKKyAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcg
dG8gdXNlIHRoZSBzdXJyb3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRleHQuCisgICAgYXV0byBwYXJh
Z3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOworICAgIGF1dG8g
cGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsKKworICAgIGludCBs
ZW5ndGhUb1NlbGVjdGlvblN0YXJ0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFu
Z2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQoKSk7CisgICAgaW50IGxlbmd0
aFRvU2VsZWN0aW9uRW5kID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFy
YWdyYXBoU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpOworICAgIE5TUmFuZ2UgcmFuZ2VUb1Bh
c3MgPSBOU01ha2VSYW5nZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0LCBsZW5ndGhUb1NlbGVjdGlv
bkVuZCAtIGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQpOworICAgIAorICAgIFJlZlB0cjxSYW5nZT4g
ZnVsbENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhF
bmQpOworICAgIFN0cmluZyBpdGVtU3RyaW5nID0gcGxhaW5UZXh0KGZ1bGxDaGFyYWN0ZXJSYW5n
ZS5nZXQoKSk7CisgICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJ
dGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6aXRlbVN0cmluZyBzZWxlY3RlZFJhbmdlOnJhbmdl
VG9QYXNzXSk7CisgICAgTlNSYW5nZSBoaWdobGlnaHRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxp
Z2h0UmFuZ2U7CisgICAgCisgICAgcmV0dXJuIHsgVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZSgqZnVs
bENoYXJhY3RlclJhbmdlLCBoaWdobGlnaHRSYW5nZS5sb2NhdGlvbiwgaGlnaGxpZ2h0UmFuZ2Uu
bGVuZ3RoKSwgbmlsIH07CisgICAgCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAg
ICAKKyAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKK30KKworc3RkOjp0dXBsZTxSZWZQdHI8
UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RS
ZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkKK3sKKyAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisgICAgaWYgKCFnZXRSVkl0ZW1DbGFzcygpKQor
ICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAKKyAgICBhdXRvKiBub2RlID0g
aGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5v
ZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworCisgICAg
YXV0byogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkK
KyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAgICAvLyBEb24ndCBkbyBhbnl0
aGluZyBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIgYXQgdGhlIHBvaW50LgorICAgIGF1dG8gZnJh
bWVQb2ludCA9IGhpdFRlc3RSZXN1bHQucm91bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFtZSgpOwor
ICAgIGlmICghZnJhbWUtPnJhbmdlRm9yUG9pbnQoZnJhbWVQb2ludCkpCisgICAgICAgIHJldHVy
biB7IG51bGxwdHIsIG5pbCB9OworCisgICAgYXV0byBwb3NpdGlvbiA9IGZyYW1lLT52aXNpYmxl
UG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KTsKKyAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkp
CisgICAgICAgIHBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpOwor
CisgICAgYXV0byBzZWxlY3Rpb24gPSBmcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5m
b2N1c2VkT3JNYWluRnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBOU1Jhbmdl
IHNlbGVjdGlvblJhbmdlOworICAgIGludCBoaXRJbmRleDsKKyAgICBSZWZQdHI8UmFuZ2U+IGZ1
bGxDaGFyYWN0ZXJSYW5nZTsKKyAgICAKKyAgICBpZiAoc2VsZWN0aW9uLnNlbGVjdGlvblR5cGUo
KSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbikgeworICAgICAgICBhdXRvIHNl
bGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOworICAgICAgICBhdXRvIHNl
bGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7CisgICAgICAgIAorICAgICAgICAv
LyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBzdXJyb3VuZGluZyBwYXJhZ3Jh
cGhzIG9mIHRleHQuCisgICAgICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdy
YXBoKHNlbGVjdGlvblN0YXJ0KTsKKyAgICAgICAgYXV0byBwYXJhZ3JhcGhFbmQgPSBlbmRPZlBh
cmFncmFwaChzZWxlY3Rpb25FbmQpOworICAgICAgICAKKyAgICAgICAgYXV0byByYW5nZVRvU2Vs
ZWN0aW9uU3RhcnQgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KTsK
KyAgICAgICAgYXV0byByYW5nZVRvU2VsZWN0aW9uRW5kID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0
YXJ0LCBzZWxlY3Rpb25FbmQpOworICAgICAgICAKKyAgICAgICAgZnVsbENoYXJhY3RlclJhbmdl
ID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhFbmQpOworICAgICAgICAKKyAg
ICAgICAgc2VsZWN0aW9uUmFuZ2UgPSBOU01ha2VSYW5nZShUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKHJhbmdlVG9TZWxlY3Rpb25TdGFydC5nZXQoKSksIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgobWFrZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgpKSk7CisgICAg
ICAgIAorICAgICAgICBoaXRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJh
bmdlKHBhcmFncmFwaFN0YXJ0LCBwb3NpdGlvbikuZ2V0KCkpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcyB7IHBv
c2l0aW9uIH07CisgICAgICAgIHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMuZXhwYW5k
VXNpbmdHcmFudWxhcml0eShXb3JkR3JhbnVsYXJpdHkpOworICAgICAgICBwb3NpdGlvbiA9IHNl
bGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMuc3RhcnQoKTsKKyAgICAgICAgLy8gQXMgY29u
dGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSAyNTAgY2hhcmFjdGVycyBvZiB0ZXh0IGJlZm9yZSBh
bmQgYWZ0ZXIgdGhlIHBvaW50LgorICAgICAgICBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSByYW5nZUV4
cGFuZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMocG9zaXRpb24sIDI1MCk7CisgICAgICAg
IAorICAgICAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJSYW5nZSkKKyAgICAgICAgICAgIHJldHVybiB7
IG51bGxwdHIsIG5pbCB9OworICAgICAgICAKKyAgICAgICAgc2VsZWN0aW9uUmFuZ2UgPSBOU01h
a2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKyAgICAgICAgaGl0SW5kZXggPSBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0UG9zaXRpb24o
KSwgcG9zaXRpb24pLmdldCgpKTsKKyAgICB9CisgICAgCisgICAgTlNSYW5nZSBzZWxlY3RlZFJh
bmdlID0gW2dldFJWU2VsZWN0aW9uQ2xhc3MoKSByZXZlYWxSYW5nZUF0SW5kZXg6aGl0SW5kZXgg
c2VsZWN0ZWRSYW5nZXM6QFtbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpzZWxlY3Rpb25SYW5nZV1d
IHNob3VsZFVwZGF0ZVNlbGVjdGlvbjpuaWxdOworICAgIAorICAgIFN0cmluZyBpdGVtU3RyaW5n
ID0gcGxhaW5UZXh0KGZ1bGxDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7CisgICAgUmV0YWluUHRyPFJW
SXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6
aXRlbVN0cmluZyBzZWxlY3RlZFJhbmdlOnNlbGVjdGVkUmFuZ2VdKTsKKyAgICBOU1JhbmdlIGhp
Z2hsaWdodFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKKworICAgIGlmIChoaWdo
bGlnaHRSYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kIHx8ICFoaWdobGlnaHRSYW5nZS5sZW5n
dGgpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgIAorICAgIHJldHVybiB7
IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxpZ2h0UmFu
Z2UubG9jYXRpb24sIGhpZ2hsaWdodFJhbmdlLmxlbmd0aCksIG5pbCB9OworICAgIAorICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmls
IH07CisgICAgCit9CisKK3N0YXRpYyB2b2lkIGV4cGFuZFNlbGVjdGlvbkJ5Q2hhcmFjdGVycyhQ
REZTZWxlY3Rpb24gKnNlbGVjdGlvbiwgTlNJbnRlZ2VyIG51bWJlck9mQ2hhcmFjdGVyc1RvRXhw
YW5kLCBOU0ludGVnZXImIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0LCBOU0ludGVnZXImIGNo
YXJhY3RlcnNBZGRlZEFmdGVyRW5kKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKKworICAgIHNpemVfdCBvcmlnaW5hbExlbmd0aCA9IHNlbGVjdGlvbi5zdHJpbmcubGVuZ3Ro
OworICAgIFtzZWxlY3Rpb24gZXh0ZW5kU2VsZWN0aW9uQXRTdGFydDpudW1iZXJPZkNoYXJhY3Rl
cnNUb0V4cGFuZF07CisgICAgCisgICAgY2hhcmFjdGVyc0FkZGVkQmVmb3JlU3RhcnQgPSBzZWxl
Y3Rpb24uc3RyaW5nLmxlbmd0aCAtIG9yaWdpbmFsTGVuZ3RoOworICAgIAorICAgIFtzZWxlY3Rp
b24gZXh0ZW5kU2VsZWN0aW9uQXRFbmQ6bnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmRdOworICAg
IGNoYXJhY3RlcnNBZGRlZEFmdGVyRW5kID0gc2VsZWN0aW9uLnN0cmluZy5sZW5ndGggLSBvcmln
aW5hbExlbmd0aCAtIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0OworCisgICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKK30KKworc3RkOjp0dXBsZTxOU1N0cmluZyAqLCBOU0RpY3Rpb25h
cnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6c3RyaW5nRm9yUERGU2VsZWN0aW9uKFBERlNlbGVjdGlv
biAqc2VsZWN0aW9uKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAK
KyAgICBpZiAoIWdldFJWSXRlbUNsYXNzKCkpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5p
bCB9OworCisgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlcmUgaXMgbm8gY2hhcmFjdGVy
IGF0IHRoZSBwb2ludC4KKyAgICBpZiAoIXNlbGVjdGlvbiB8fCAhc2VsZWN0aW9uLnN0cmluZy5s
ZW5ndGgpCisgICAgICAgIHJldHVybiB7IEAiIiwgbmlsIH07CisKKyAgICBSZXRhaW5QdHI8UERG
U2VsZWN0aW9uPiBzZWxlY3Rpb25Gb3JMb29rdXAgPSBhZG9wdE5TKFtzZWxlY3Rpb24gY29weV0p
OworCisgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSAyNTAgY2hhcmFjdGVy
cyBvZiB0ZXh0IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHBvaW50LgorICAgIGF1dG8gb3JpZ2luYWxM
ZW5ndGggPSBbc2VsZWN0aW9uRm9yTG9va3VwIHN0cmluZ10ubGVuZ3RoOworICAgIE5TSW50ZWdl
ciBjaGFyYWN0ZXJzQWRkZWRCZWZvcmVTdGFydCA9IDA7CisgICAgTlNJbnRlZ2VyIGNoYXJhY3Rl
cnNBZGRlZEFmdGVyRW5kID0gMDsKKyAgICBleHBhbmRTZWxlY3Rpb25CeUNoYXJhY3RlcnMoc2Vs
ZWN0aW9uRm9yTG9va3VwLmdldCgpLCAyNTAsIGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0LCBj
aGFyYWN0ZXJzQWRkZWRBZnRlckVuZCk7CisKKyAgICBhdXRvIGZ1bGxQbGFpblRleHRTdHJpbmcg
PSBbc2VsZWN0aW9uRm9yTG9va3VwIHN0cmluZ107CisgICAgYXV0byByYW5nZVRvUGFzcyA9IE5T
TWFrZVJhbmdlKGNoYXJhY3RlcnNBZGRlZEJlZm9yZVN0YXJ0LCAwKTsKKworICAgIFJldGFpblB0
cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhU
ZXh0OmZ1bGxQbGFpblRleHRTdHJpbmcgc2VsZWN0ZWRSYW5nZTpyYW5nZVRvUGFzc10pOworICAg
IE5TUmFuZ2UgZXh0cmFjdGVkUmFuZ2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdlOworICAg
IAorICAgIGlmIChleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKQorICAgICAg
ICByZXR1cm4geyBzZWxlY3Rpb24uc3RyaW5nLCBuaWwgfTsKKworICAgIE5TSW50ZWdlciBsb29r
dXBBZGRlZEJlZm9yZSA9IHJhbmdlVG9QYXNzLmxvY2F0aW9uIC0gZXh0cmFjdGVkUmFuZ2UubG9j
YXRpb247CisgICAgTlNJbnRlZ2VyIGxvb2t1cEFkZGVkQWZ0ZXIgPSAoZXh0cmFjdGVkUmFuZ2Uu
bG9jYXRpb24gKyBleHRyYWN0ZWRSYW5nZS5sZW5ndGgpIC0gKHJhbmdlVG9QYXNzLmxvY2F0aW9u
ICsgb3JpZ2luYWxMZW5ndGgpOworCisgICAgW3NlbGVjdGlvbiBleHRlbmRTZWxlY3Rpb25BdFN0
YXJ0Omxvb2t1cEFkZGVkQmVmb3JlXTsKKyAgICBbc2VsZWN0aW9uIGV4dGVuZFNlbGVjdGlvbkF0
RW5kOmxvb2t1cEFkZGVkQWZ0ZXJdOworCisgICAgQVNTRVJUKFtzZWxlY3Rpb24uc3RyaW5nIGlz
RXF1YWxUb1N0cmluZzpbZnVsbFBsYWluVGV4dFN0cmluZyBzdWJzdHJpbmdXaXRoUmFuZ2U6ZXh0
cmFjdGVkUmFuZ2VdXSk7CisgICAgcmV0dXJuIHsgc2VsZWN0aW9uLnN0cmluZywgbmlsIH07CisK
KyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgcmV0dXJuIHsgQCIiLCBuaWwg
fTsKK30KKworc3RhdGljIGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+
IHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcihib29sIGNyZWF0ZUFuaW1hdGlv
bkNvbnRyb2xsZXIsIGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1cElu
Zm8sIE5TVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3Im
KT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlv
bjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNr
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCit7CisgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIGlmICghZ2V0UlZJdGVtQ2xhc3Mo
KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9u
YXJ5PiBtdXRhYmxlT3B0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9j
XSBpbml0XSk7CisgICAgaWYgKE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IGRpY3Rpb25hcnlQb3B1
cEluZm8ub3B0aW9ucy5nZXQoKSkKKyAgICAgICAgW211dGFibGVPcHRpb25zIGFkZEVudHJpZXNG
cm9tRGljdGlvbmFyeTpvcHRpb25zXTsKKworICAgIGF1dG8gdGV4dEluZGljYXRvciA9IFRleHRJ
bmRpY2F0b3I6OmNyZWF0ZShkaWN0aW9uYXJ5UG9wdXBJbmZvLnRleHRJbmRpY2F0b3IpOworICAg
IAorICAgIFJldGFpblB0cjxSVlByZXNlbnRlcj4gcHJlc2VudGVyID0gYWRvcHROUyhbYWxsb2NS
VlByZXNlbnRlckluc3RhbmNlKCkgaW5pdF0pOworICAgIAorICAgIE5TUmVjdCBoaWdobGlnaHRS
ZWN0OworICAgIE5TUG9pbnQgcG9pbnRlckxvY2F0aW9uOworICAgIAorICAgIGlmICh0ZXh0SW5k
aWNhdG9yLmdldCgpLmNvbnRlbnRJbWFnZSgpKSB7CisgICAgICAgIHRleHRJbmRpY2F0b3JJbnN0
YWxsYXRpb25DYWxsYmFjayh0ZXh0SW5kaWNhdG9yLmdldCgpKTsKKworICAgICAgICBGbG9hdFJl
Y3QgZmlyc3RUZXh0UmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdGV4dEluZGljYXRvci5nZXQoKS50
ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKClbMF07CisgICAgICAgIEZsb2F0UmVj
dCB0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0SW5kaWNhdG9yLmdldCgp
LnRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoKTsKKyAgICAgICAgRmxvYXRS
ZWN0IHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdGV4dEluZGljYXRv
ci5nZXQoKS5zZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCk7CisgICAgICAgIAor
ICAgICAgICBpZiAocm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2spIHsKKyAgICAgICAg
ICAgIHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9IHJvb3RWaWV3VG9WaWV3Q29u
dmVyc2lvbkNhbGxiYWNrKHRleHRCb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyk7CisgICAg
ICAgICAgICBzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJblZpZXdDb29yZGluYXRlcyA9IHJvb3RWaWV3
VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrKHNlbGVjdGlvbkJvdW5kaW5nUmVjdEluVmlld0Nvb3Jk
aW5hdGVzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZmlyc3RUZXh0UmVjdEluVmll
d0Nvb3JkaW5hdGVzLm1vdmVCeSh0ZXh0Qm91bmRpbmdSZWN0SW5WaWV3Q29vcmRpbmF0ZXMubG9j
YXRpb24oKSk7CisgICAgICAgIGhpZ2hsaWdodFJlY3QgPSBzZWxlY3Rpb25Cb3VuZGluZ1JlY3RJ
blZpZXdDb29yZGluYXRlczsKKyAgICAgICAgcG9pbnRlckxvY2F0aW9uID0gZmlyc3RUZXh0UmVj
dEluVmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCk7CisgICAgICAgIAorICAgIH0gZWxzZSB7Cisg
ICAgICAgIE5TUG9pbnQgdGV4dEJhc2VsaW5lT3JpZ2luID0gZGljdGlvbmFyeVBvcHVwSW5mby5v
cmlnaW47CisgICAgICAgIAorICAgICAgICBoaWdobGlnaHRSZWN0ID0gdGV4dEluZGljYXRvci0+
c2VsZWN0aW9uUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpOworICAgICAgICBwb2ludGVyTG9j
YXRpb24gPSBbdmlldyBjb252ZXJ0UG9pbnQ6dGV4dEJhc2VsaW5lT3JpZ2luIHRvVmlldzpuaWxd
OworICAgIH0KKyAgICAKKyAgICBSZXRhaW5QdHI8V2ViUmV2ZWFsSGlnaGxpZ2h0PiB3ZWJIaWdo
bGlnaHQgPSAgYWRvcHROUyhbW1dlYlJldmVhbEhpZ2hsaWdodCBhbGxvY10gaW5pdFdpdGhIaWdo
bGlnaHRSZWN0OiBoaWdobGlnaHRSZWN0IHVzZURlZmF1bHRIaWdobGlnaHQ6IXRleHRJbmRpY2F0
b3IuZ2V0KCkuY29udGVudEltYWdlKCkgYXR0cmlidXRlZFN0cmluZzpkaWN0aW9uYXJ5UG9wdXBJ
bmZvLmF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCldKTsKKyAgICBSZXRhaW5QdHI8UlZQcmVzZW50aW5n
Q29udGV4dD4gY29udGV4dCA9IGFkb3B0TlMoW2FsbG9jUlZQcmVzZW50aW5nQ29udGV4dEluc3Rh
bmNlKCkgaW5pdFdpdGhQb2ludGVyTG9jYXRpb25JblZpZXc6cG9pbnRlckxvY2F0aW9uIGluVmll
dzp2aWV3IGhpZ2hsaWdodERlbGVnYXRlOihpZDxSVlByZXNlbnRlckhpZ2hsaWdodERlbGVnYXRl
Pikgd2ViSGlnaGxpZ2h0LmdldCgpXSk7CisgICAgCisgICAgUmV0YWluUHRyPFJWSXRlbT4gaXRl
bSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6ZGljdGlvbmFy
eVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nLmdldCgpLnN0cmluZyBzZWxlY3RlZFJhbmdlOk5T
TWFrZVJhbmdlKDAsIDApXSk7CisgICAgCisgICAgW3dlYkhpZ2hsaWdodCBzZXRDbGVhclRleHRJ
bmRpY2F0b3I6W3dlYkhpZ2hsaWdodCA9IFdURk1vdmUod2ViSGlnaGxpZ2h0KSwgY2xlYXJUZXh0
SW5kaWNhdG9yID0gV1RGTW92ZShjbGVhclRleHRJbmRpY2F0b3IpXSB7CisgICAgICAgIGlmIChj
bGVhclRleHRJbmRpY2F0b3IpCisgICAgICAgICAgICBjbGVhclRleHRJbmRpY2F0b3IoKTsKKyAg
ICB9XTsKKyAgICAKKyAgICBpZiAoY3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcikKKyAgICAgICAg
cmV0dXJuIFtwcmVzZW50ZXIgYW5pbWF0aW9uQ29udHJvbGxlckZvckl0ZW06aXRlbS5nZXQoKSBk
b2N1bWVudENvbnRleHQ6bmlsIHByZXNlbnRpbmdDb250ZXh0OmNvbnRleHQuZ2V0KCkgb3B0aW9u
czpuaWxdOworICAgIFtwcmVzZW50ZXIgcmV2ZWFsSXRlbTppdGVtLmdldCgpIGRvY3VtZW50Q29u
dGV4dDpuaWwgcHJlc2VudGluZ0NvbnRleHQ6Y29udGV4dC5nZXQoKSBvcHRpb25zOm5pbF07Cisg
ICAgcmV0dXJuIG5pbDsKKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0
dXJuIG5pbDsKK30KKwordm9pZCBEaWN0aW9uYXJ5TG9va3VwOjpzaG93UG9wdXAoY29uc3QgRGlj
dGlvbmFyeVBvcHVwSW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbywgTlNWaWV3ICp2aWV3LCBjb25z
dCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvckluc3Rh
bGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3Qp
PiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURjo6RnVuY3Rpb248dm9pZCgp
PiYmIGNsZWFyVGV4dEluZGljYXRvcikKK3sKKyAgICBzaG93UG9wdXBPckNyZWF0ZUFuaW1hdGlv
bkNvbnRyb2xsZXIoZmFsc2UsIGRpY3Rpb25hcnlQb3B1cEluZm8sIHZpZXcsIHRleHRJbmRpY2F0
b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ss
IFdURk1vdmUoY2xlYXJUZXh0SW5kaWNhdG9yKSk7Cit9CisKK3ZvaWQgRGljdGlvbmFyeUxvb2t1
cDo6aGlkZVBvcHVwKCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAg
ICBpZiAoIWdldExVTG9va3VwRGVmaW5pdGlvbk1vZHVsZUNsYXNzKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBbZ2V0TFVMb29rdXBEZWZpbml0aW9uTW9kdWxlQ2xhc3MoKSBoaWRlRGVmaW5pdGlv
bl07CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCitpZCA8TlNJbW1lZGlh
dGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPiBEaWN0aW9uYXJ5TG9va3VwOjphbmltYXRpb25D
b250cm9sbGVyRm9yUG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlvbmFyeVBv
cHVwSW5mbywgTlNWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGlj
YXRvciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1
bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2Fs
bGJhY2ssIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvcikKK3sKKyAg
ICByZXR1cm4gc2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKHRydWUsIGRpY3Rp
b25hcnlQb3B1cEluZm8sIHZpZXcsIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywg
cm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURk1vdmUoY2xlYXJUZXh0SW5kaWNh
dG9yKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JN
KE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQ
SS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKaW5kZXggMjMy
Mzc5NjlmZDM1NDI2ZmVlZTkzZTAwODVlZWQ5NzdmNDQwZDk5OC4uMTQzZjE2Yzk5MmY2Mzc5MDI1
Mjk0YmM2NzJmNDFlZGZhMzQwYTQ0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9zcGkvaW9zL1VJS2l0U1BJLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9z
L1VJS2l0U1BJLmgKQEAgLTczMyw5ICs3MzMsNiBAQCBzdHJ1Y3QgX1VJV2ViVG91Y2hFdmVudCB7
CiAgICAgYm9vbCBpc1BvdGVudGlhbFRhcDsKIH07CiAKLUBpbnRlcmZhY2UgX1VJTG9va3VwR2Vz
dHVyZVJlY29nbml6ZXIgOiBVSUdlc3R1cmVSZWNvZ25pemVyCi1AZW5kCi0KIEBjbGFzcyBVSVdl
YlRvdWNoRXZlbnRzR2VzdHVyZVJlY29nbml6ZXI7CiAKIEBwcm90b2NvbCBVSVdlYlRvdWNoRXZl
bnRzR2VzdHVyZVJlY29nbml6ZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCmluZGV4IDY1YWVjZDky
MTkyZmU2NjYxZjFiYWE0MmQzNDA3ODZjZTRkMWQ1MzIuLmY1Njg3NWRmZjNhMWNjNDVlYmVlNjE3
MjE1Y2U5NTcyM2Y1M2RlNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCkBAIC0zMyw3ICszMyw2IEBACiAjaW1wb3J0ICJQYWdl
Q2xpZW50LmgiCiAjaW1wb3J0ICJTYWZlQnJvd3NpbmdTUEkuaCIKICNpbXBvcnQgIlNhZmVCcm93
c2luZ1dhcm5pbmcuaCIKLSNpbXBvcnQgIldlYlBhZ2VNZXNzYWdlcy5oIgogI2ltcG9ydCAiV2Vi
UHJvY2Vzc1Byb3h5LmgiCiAjaW1wb3J0IDxXZWJDb3JlL0RyYWdJdGVtLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CkBAIC0xOTAsMjEgKzE4OSw1IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpwbGF0Zm9ybUNsb25lQXR0YWNobWVudChSZWY8QVBJOjpBdHRhY2htZW50PiYmIGZy
b21BdHRhY2htZW50CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQot
ICAgIAotdm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlv
bihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb2ludCkKLXsKLSAgICBpZiAoIWlzVmFsaWQo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpQZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24ocG9pbnQpLCBtX3BhZ2VJ
RCk7Ci19CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3Vy
cmVudFNlbGVjdGlvbigpCi17Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURpY3Rp
b25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKSwgbV9wYWdlSUQpOwogfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAppbmRleCBkYTI2MzMyMjE0Njc5ZmQ5MWNjNTRkMGZj
ODRlYzgyMzA3N2U0ZDg4Li5hODA3Y2NkMmZhY2ZlNzhjZjkxNGJkZjQzZWQyNDk3YWRjYzhmYzhj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0lu
dGVyYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5oCkBAIC04Nyw3ICs4Nyw2IEBAIGNsYXNzIFdlYk9wZW5QYW5lbFJlc3Vs
dExpc3RlbmVyUHJveHk7CiBjbGFzcyBXZWJQYWdlUHJveHk7CiB9CiAKLUBjbGFzcyBfVUlMb29r
dXBHZXN0dXJlUmVjb2duaXplcjsKIEBjbGFzcyBfVUlIaWdobGlnaHRWaWV3OwogQGNsYXNzIF9V
SVdlYkhpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyOwogQGNsYXNzIFVJSG92ZXJH
ZXN0dXJlUmVjb2duaXplcjsKQEAgLTIxNiw3ICsyMTUsNiBAQCBzdHJ1Y3QgV0tBdXRvQ29ycmVj
dGlvbkRhdGEgewogCiAjaWYgUExBVEZPUk0oSU9TTUFDKQogICAgIFJldGFpblB0cjxVSUhvdmVy
R2VzdHVyZVJlY29nbml6ZXI+IF9ob3Zlckdlc3R1cmVSZWNvZ25pemVyOwotICAgIFJldGFpblB0
cjxfVUlMb29rdXBHZXN0dXJlUmVjb2duaXplcj4gX2xvb2t1cEdlc3R1cmVSZWNvZ25pemVyOwog
I2VuZGlmCiAKICAgICBSZXRhaW5QdHI8VUlXS1RleHRJbnRlcmFjdGlvbkFzc2lzdGFudD4gX3Rl
eHRTZWxlY3Rpb25Bc3Npc3RhbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQppbmRleCBhYmIwNGE0ZGE3ZWQxZjQx
NTQwMGYxY2JiZmUzODJjYTNiNWZhODlkLi42MGNmYjhmMjRkOWM2MGEzZTMyMjA5OWQyOGYyNWY1
MDBjY2U0MzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250
ZW50Vmlld0ludGVyYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KQEAgLTExMiw3ICsxMTIsNiBAQAogI2lmIFBMQVRG
T1JNKElPU01BQykKICNpbXBvcnQgIk5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKICNpbXBvcnQgPFVJ
S2l0L1VJSG92ZXJHZXN0dXJlUmVjb2duaXplci5oPgotI2ltcG9ydCA8VUlLaXQvX1VJTG9va3Vw
R2VzdHVyZVJlY29nbml6ZXIuaD4KICNpbXBvcnQgPHBhbC9zcGkvaW9zL0dyYXBoaWNzU2Vydmlj
ZXNTUEkuaD4KICNlbmRpZgogCkBAIC02NTAsMTEgKzY0OSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBoYXNBc3Npc3RlZE5vZGUoV2ViS2l0OjpBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiBhc3Npc3Rl
ZE5vZGVJCiAgICAgX2hvdmVyR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbVUlIb3Zlckdl
c3R1cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0
b3IoX2hvdmVyR2VzdHVyZVJlY29nbml6ZXJDaGFuZ2VkOildKTsKICAgICBbX2hvdmVyR2VzdHVy
ZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6c2VsZl07CiAgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29n
bml6ZXI6X2hvdmVyR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwotICAgIAotICAgIF9sb29rdXBH
ZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tfVUlMb29rdXBHZXN0dXJlUmVjb2duaXplciBh
bGxvY10gaW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF9sb29rdXBHZXN0dXJl
UmVjb2duaXplZDopXSk7Ci0gICAgW19sb29rdXBHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0
ZTpzZWxmXTsKLSAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfbG9va3VwR2VzdHVyZVJl
Y29nbml6ZXIuZ2V0KCldOwotICAgIAogI2VuZGlmCiAKICAgICBfc2luZ2xlVGFwR2VzdHVyZVJl
Y29nbml6ZXIgPSBhZG9wdE5TKFtbV0tTeW50aGV0aWNDbGlja1RhcEdlc3R1cmVSZWNvZ25pemVy
IGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX3NpbmdsZVRhcENv
bW1pdGVkOildKTsKQEAgLTc2NSw5ICs3NTksNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaGFzQXNz
aXN0ZWROb2RlKFdlYktpdDo6QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24gYXNzaXN0ZWROb2RlSQog
I2lmIFBMQVRGT1JNKElPU01BQykKICAgICBbX2hvdmVyR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVs
ZWdhdGU6bmlsXTsKICAgICBbc2VsZiByZW1vdmVHZXN0dXJlUmVjb2duaXplcjpfaG92ZXJHZXN0
dXJlUmVjb2duaXplci5nZXQoKV07Ci0gICAgCi0gICAgW19sb29rdXBHZXN0dXJlUmVjb2duaXpl
ciBzZXREZWxlZ2F0ZTpuaWxdOwotICAgIFtzZWxmIHJlbW92ZUdlc3R1cmVSZWNvZ25pemVyOl9s
b29rdXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CiAjZW5kaWYKIAogICAgIFtfc2luZ2xlVGFw
R2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKQEAgLTg1NSw3ICs4NDYsNiBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgaGFzQXNzaXN0ZWROb2RlKFdlYktpdDo6QXNzaXN0ZWROb2RlSW5m
b3JtYXRpb24gYXNzaXN0ZWROb2RlSQogICAgIFtzZWxmIHJlbW92ZUdlc3R1cmVSZWNvZ25pemVy
Ol9zdHlsdXNTaW5nbGVUYXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CiAjaWYgUExBVEZPUk0o
SU9TTUFDKQogICAgIFtzZWxmIHJlbW92ZUdlc3R1cmVSZWNvZ25pemVyOl9ob3Zlckdlc3R1cmVS
ZWNvZ25pemVyLmdldCgpXTsKLSAgICBbc2VsZiByZW1vdmVHZXN0dXJlUmVjb2duaXplcjpfbG9v
a3VwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwogI2VuZGlmCiB9CiAKQEAgLTg3MSw3ICs4NjEs
NiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaGFzQXNzaXN0ZWROb2RlKFdlYktpdDo6QXNzaXN0ZWRO
b2RlSW5mb3JtYXRpb24gYXNzaXN0ZWROb2RlSQogICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25p
emVyOl9zdHlsdXNTaW5nbGVUYXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CiAjaWYgUExBVEZP
Uk0oSU9TTUFDKQogICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9ob3Zlckdlc3R1cmVS
ZWNvZ25pemVyLmdldCgpXTsKLSAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfbG9va3Vw
R2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwogI2VuZGlmCiB9CiAKQEAgLTE0NzgsMTAgKzE0Njcs
NiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTYW1lUGFpcihVSUdlc3R1cmVSZWNvZ25pemVyICph
LCBVSUdlc3R1cmVSZWNvZ25pemVyICpiLCBVSQogCiAgICAgaWYgKFtnZXN0dXJlUmVjb2duaXpl
ciBpc0tpbmRPZkNsYXNzOltVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXIgY2xhc3NdXSB8fCBbb3Ro
ZXJHZXN0dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltVSUhvdmVyR2VzdHVyZVJlY29nbml6
ZXIgY2xhc3NdXSkKICAgICAgICAgcmV0dXJuIFlFUzsKLSAgICAKLSAgICBpZiAoKFtnZXN0dXJl
UmVjb2duaXplciBpc0tpbmRPZkNsYXNzOltfVUlMb29rdXBHZXN0dXJlUmVjb2duaXplciBjbGFz
c11dICYmIFtvdGhlckdlc3R1cmVSZWNvZ25pemVyIGlzS2luZE9mQ2xhc3M6W1VJTG9uZ1ByZXNz
R2VzdHVyZVJlY29nbml6ZXIgY2xhc3NdXSkgfHwgKFtvdGhlckdlc3R1cmVSZWNvZ25pemVyIGlz
S2luZE9mQ2xhc3M6W1VJTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgY2xhc3NdXSAmJiBbZ2Vz
dHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpbX1VJTG9va3VwR2VzdHVyZVJlY29nbml6ZXIg
Y2xhc3NdXSkpCi0gICAgICAgIHJldHVybiBZRVM7Ci0KICNlbmRpZgogICAgIGlmIChpc1NhbWVQ
YWlyKGdlc3R1cmVSZWNvZ25pemVyLCBvdGhlckdlc3R1cmVSZWNvZ25pemVyLCBfaGlnaGxpZ2h0
TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCksIF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50
LmdldCgpLmZvcmNlUHJlc3NHZXN0dXJlKSkKICAgICAgICAgcmV0dXJuIFlFUzsKQEAgLTYwNzIs
MTIgKzYwNTcsNiBAQCBzdGF0aWMgTlNBcnJheTxOU0l0ZW1Qcm92aWRlciAqPiAqZXh0cmFjdEl0
ZW1Qcm92aWRlcnNGcm9tRHJvcFNlc3Npb24oaWQgPFVJRHJvcAogI2VuZGlmIC8vIFBMQVRGT1JN
KFdBVENIT1MpCiAKICNpZiBQTEFURk9STShJT1NNQUMpCi0tICh2b2lkKV9sb29rdXBHZXN0dXJl
UmVjb2duaXplZDooVUlHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyCi17Ci0g
ICAgTlNQb2ludCBsb2NhdGlvbkluVmlld0Nvb3JkaW5hdGVzID0gW2dlc3R1cmVSZWNvZ25pemVy
IGxvY2F0aW9uSW5WaWV3OnNlbGZdOwotICAgIF9wYWdlLT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1
cEF0TG9jYXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludChsb2NhdGlvbkluVmlld0Nvb3JkaW5hdGVz
KSk7Ci19Ci0KIC0gKHZvaWQpX2hvdmVyR2VzdHVyZVJlY29nbml6ZXJDaGFuZ2VkOihVSUdlc3R1
cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKIHsKICAgICBpZiAoIV9wYWdlLT5pc1Zh
bGlkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVBy
b3h5SU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5t
bQppbmRleCAyNzk1ZjczMGJiZmVjNjJlNDRmNTRmNmE4MDljODJiYWI2MzNkMzY3Li5iNDczZjA4
MWE1MDc1ZTQ0M2NjZTM5YjVkYzM3ODU0YmQ2OGQ4NmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KQEAgLTEyMSw2ICsxMjEsMTEgQEAgYm9v
bCBXZWJQYWdlUHJveHk6OnJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChjb25zdCBTdHJpbmcm
KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0
aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2VzdHVyZUNhbGxi
YWNrKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDMyX3QgZ2VzdHVyZVR5cGUs
IHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgdWludDMyX3QgZmxhZ3MsIENhbGxiYWNrSUQgY2FsbGJh
Y2tJRCkKIHsKICAgICBhdXRvIGNhbGxiYWNrID0gbV9jYWxsYmFja3MudGFrZTxHZXN0dXJlQ2Fs
bGJhY2s+KGNhbGxiYWNrSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1dlYlBhZ2VQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQ
YWdlUHJveHlNYWMubW0KaW5kZXggZTJhYjI5YzJiNWM2NzE3NTg0NjM3YjNiN2FlY2MyMDhiNzYz
Njg2NC4uZmZmYzVlMDhhMTY3MGEwY2FmMTUzZWM3MGZhNzIwMjE3MjBlNWI3YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCkBAIC0zMjMsNiAr
MzIzLDIyIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRQcm9taXNlZERhdGFGb3JJbWFnZShjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTCiAKICNlbmRpZgogCit2b2lkIFdlYlBh
Z2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURpY3Rp
b25hcnlMb29rdXBBdExvY2F0aW9uKHBvaW50KSwgbV9wYWdlSUQpOworfQorCit2b2lkIFdlYlBh
Z2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKQorewor
ICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBwcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxl
Y3Rpb24oKSwgbV9wYWdlSUQpOworfQorCiAvLyBDb21wbGV4IHRleHQgaW5wdXQgc3VwcG9ydCBm
b3IgcGx1Zy1pbnMuCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2VuZENvbXBsZXhUZXh0SW5wdXRUb1Bs
dWdpbih1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiB0ZXh0SW5wdXQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KaW5kZXggYTM4Y2QyYmY2Mzc5NGM4ZTlmMWQy
MTJhM2U3OGIzZThjNGVmOGM2Yi4uM2U3OTQzMWY5MzcxMTRjNDFmOWQyZGZkNThlMGI0ZjcyMTgx
NTlhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2Ev
V2ViUGFnZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
Y29hL1dlYlBhZ2VDb2NvYS5tbQpAQCAtMjYsMjAgKzI2LDkgQEAKICNpbXBvcnQgImNvbmZpZy5o
IgogI2ltcG9ydCAiV2ViUGFnZS5oIgogCi0KICNpbXBvcnQgIkxvYWRQYXJhbWV0ZXJzLmgiCi0j
aW1wb3J0ICJQbHVnaW5WaWV3LmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgot
I2ltcG9ydCA8V2ViQ29yZS9EaWN0aW9uYXJ5TG9va3VwLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0Vk
aXRvci5oPgotI2ltcG9ydCA8V2ViQ29yZS9FdmVudEhhbmRsZXIuaD4KLSNpbXBvcnQgPFdlYkNv
cmUvRm9jdXNDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxDb252ZXJ0ZXIuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgotI2ltcG9ydCA8V2ViQ29yZS9Ob2Rl
UmVuZGVyU3R5bGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5h
Z2VyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRlckVsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNv
cmUvUmVuZGVyT2JqZWN0Lmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkKIApAQCAtNzAsMTE0ICs1
OSw2IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mbyhD
YWxsYmFja0lEIGNhbGxiYWNrSUQpCiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
Ok5vd1BsYXlpbmdJbmZvQ2FsbGJhY2soaGFzQWN0aXZlU2Vzc2lvbiwgcmVnaXN0ZXJlZEFzTm93
UGxheWluZ0FwcGxpY2F0aW9uLCB0aXRsZSwgZHVyYXRpb24sIGVsYXBzZWRUaW1lLCB1bmlxdWVJ
ZGVudGlmaWVyLCBjYWxsYmFja0lEKSk7CiB9Ci0gICAgCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1E
aWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBmbG9hdFBvaW50KQot
ewotICAgIGlmIChhdXRvKiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKCZtX3BhZ2Ut
Pm1haW5GcmFtZSgpKSkgewotICAgICAgICBpZiAocGx1Z2luVmlldy0+cGVyZm9ybURpY3Rpb25h
cnlMb29rdXBBdExvY2F0aW9uKGZsb2F0UG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICAKLSAgICAvLyBGaW5kIHRoZSBmcmFtZSB0aGUgcG9pbnQgaXMgb3Zlci4KLSAgICBI
aXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCku
aGl0VGVzdFJlc3VsdEF0UG9pbnQobV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPndpbmRvd1Rv
Q29udGVudHMocm91bmRlZEludFBvaW50KGZsb2F0UG9pbnQpKSk7Ci0gICAgUmVmUHRyPFJhbmdl
PiByYW5nZTsKLSAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnM7Ci0gICAgc3RkOjp0aWUocmFuZ2Us
IG9wdGlvbnMpID0gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQocmVzdWx0
KTsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYXV0byogZnJh
bWUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgPyByZXN1bHQuaW5uZXJOb25TaGFyZWRO
b2RlKCktPmRvY3VtZW50KCkuZnJhbWUoKSA6ICZtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZv
Y3VzZWRPck1haW5GcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKCpmcmFtZSwgKnJhbmdlLCBv
cHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlKTsKLX0K
LQotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihGcmFt
ZSYgZnJhbWUsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgVGV4dEluZGljYXRv
clByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKLXsKLSAgICBS
ZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2U7Ci0gICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zOwot
ICAgIHN0ZDo6dGllKHNlbGVjdGVkUmFuZ2UsIG9wdGlvbnMpID0gRGljdGlvbmFyeUxvb2t1cDo6
cmFuZ2VGb3JTZWxlY3Rpb24oc2VsZWN0aW9uKTsKLSAgICBpZiAoc2VsZWN0ZWRSYW5nZSkKLSAg
ICAgICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShmcmFtZSwgKnNlbGVjdGVkUmFu
Z2UsIG9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pOwotfQotCi12b2lkIFdlYlBhZ2U6
OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkKLXsKLSAgICBhdXRv
JiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7
Ci0gICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oZnJhbWUsIGZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlv
bjo6Qm91bmNlQW5kQ3Jvc3NmYWRlKTsKLX0KLSAgICAKLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURp
Y3Rpb25hcnlMb29rdXBGb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgTlNEaWN0
aW9uYXJ5ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVz
ZW50YXRpb25UcmFuc2l0aW9uKQotewotICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
RGlkUGVyZm9ybURpY3Rpb25hcnlMb29rdXAoZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKGZy
YW1lLCByYW5nZSwgb3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbikpKTsKLX0KLQotRGlj
dGlvbmFyeVBvcHVwSW5mbyBXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UoRnJh
bWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSAqb3B0aW9ucywgVGV4dEluZGlj
YXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKLXsKLSAg
ICBFZGl0b3ImIGVkaXRvciA9IGZyYW1lLmVkaXRvcigpOwotICAgIGVkaXRvci5zZXRJc0dldHRp
bmdEaWN0aW9uYXJ5UG9wdXBJbmZvKHRydWUpOwotICAgIAotICAgIERpY3Rpb25hcnlQb3B1cElu
Zm8gZGljdGlvbmFyeVBvcHVwSW5mbzsKLSAgICBpZiAocmFuZ2UudGV4dCgpLnN0cmlwV2hpdGVT
cGFjZSgpLmlzRW1wdHkoKSkgewotICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFy
eVBvcHVwSW5mbyhmYWxzZSk7Ci0gICAgICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOwot
ICAgIH0KLSAgICAKLSAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKLSAgICByYW5nZS5hYnNv
bHV0ZVRleHRRdWFkcyhxdWFkcyk7Ci0gICAgaWYgKHF1YWRzLmlzRW1wdHkoKSkgewotICAgICAg
ICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7Ci0gICAgICAg
IHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOwotICAgIH0KLSAgICAKLSAgICBJbnRSZWN0IHJh
bmdlUmVjdCA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhxdWFkc1swXS5lbmNsb3Np
bmdCb3VuZGluZ0JveCgpKTsKLSAgICAKLSAgICBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUgPSBy
YW5nZS5zdGFydENvbnRhaW5lcigpLnJlbmRlclN0eWxlKCk7Ci0gICAgZmxvYXQgc2NhbGVkQXNj
ZW50ID0gc3R5bGUgPyBzdHlsZS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSAqIHBhZ2VTY2FsZUZh
Y3RvcigpIDogMDsKLSAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdpbiA9IEZsb2F0UG9pbnQo
cmFuZ2VSZWN0LngoKSwgcmFuZ2VSZWN0LnkoKSArIHNjYWxlZEFzY2VudCk7Ci0gICAgZGljdGlv
bmFyeVBvcHVwSW5mby5vcHRpb25zID0gb3B0aW9uczsKLQotI2lmIFBMQVRGT1JNKE1BQykKLQot
ICAgIE5TQXR0cmlidXRlZFN0cmluZyAqbnNBdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJp
YnV0ZWRTdHJpbmdGcm9tUmFuZ2UocmFuZ2UsIEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJp
bmc6Ok5vKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZz4g
c2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRT
dHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOltuc0F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXV0p
OwotICAgIAotICAgIE5TRm9udE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFnZXIg
c2hhcmVkRm9udE1hbmFnZXJdOwotICAgIAotICAgIFtuc0F0dHJpYnV0ZWRTdHJpbmcgZW51bWVy
YXRlQXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW25zQXR0cmlidXRlZFN0cmluZyBs
ZW5ndGhdKSBvcHRpb25zOjAgdXNpbmdCbG9jazpeKE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcywg
TlNSYW5nZSByYW5nZSwgQk9PTCAqc3RvcCkgewotICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxl
RGljdGlvbmFyeT4gc2NhbGVkQXR0cmlidXRlcyA9IGFkb3B0TlMoW2F0dHJpYnV0ZXMgbXV0YWJs
ZUNvcHldKTsKLSAgICAgICAgCi0gICAgICAgIE5TRm9udCAqZm9udCA9IFtzY2FsZWRBdHRyaWJ1
dGVzIG9iamVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgaWYgKGZvbnQp
Ci0gICAgICAgICAgICBmb250ID0gW2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OmZvbnQgdG9TaXpl
OmZvbnQucG9pbnRTaXplICogcGFnZVNjYWxlRmFjdG9yKCldOwotICAgICAgICBpZiAoZm9udCkK
LSAgICAgICAgICAgIFtzY2FsZWRBdHRyaWJ1dGVzIHNldE9iamVjdDpmb250IGZvcktleTpOU0Zv
bnRBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgCi0gICAgICAgIFtzY2FsZWROU0F0dHJpYnV0ZWRT
dHJpbmcgYWRkQXR0cmlidXRlczpzY2FsZWRBdHRyaWJ1dGVzLmdldCgpIHJhbmdlOnJhbmdlXTsK
LSAgICB9XTsKLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLSAgICAKLSAgICBUZXh0SW5kaWNh
dG9yT3B0aW9ucyBpbmRpY2F0b3JPcHRpb25zID0gVGV4dEluZGljYXRvck9wdGlvblVzZUJvdW5k
aW5nUmVjdEFuZFBhaW50QWxsQ29udGVudEZvckNvbXBsZXhSYW5nZXM7Ci0gICAgaWYgKHByZXNl
bnRhdGlvblRyYW5zaXRpb24gPT0gVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246
OkJvdW5jZUFuZENyb3NzZmFkZSkKLSAgICAgICAgaW5kaWNhdG9yT3B0aW9ucyB8PSBUZXh0SW5k
aWNhdG9yT3B0aW9uSW5jbHVkZVNuYXBzaG90V2l0aFNlbGVjdGlvbkhpZ2hsaWdodDsKLSAgICAK
LSAgICBSZWZQdHI8VGV4dEluZGljYXRvcj4gdGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6
OmNyZWF0ZVdpdGhSYW5nZShyYW5nZSwgaW5kaWNhdG9yT3B0aW9ucywgcHJlc2VudGF0aW9uVHJh
bnNpdGlvbik7Ci0gICAgaWYgKCF0ZXh0SW5kaWNhdG9yKSB7Ci0gICAgICAgIGVkaXRvci5zZXRJ
c0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGRpY3Rp
b25hcnlQb3B1cEluZm87Ci0gICAgfQotICAgIAotICAgIGRpY3Rpb25hcnlQb3B1cEluZm8udGV4
dEluZGljYXRvciA9IHRleHRJbmRpY2F0b3ItPmRhdGEoKTsKLSNpZiBQTEFURk9STShNQUMpCi0g
ICAgZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nID0gc2NhbGVkTlNBdHRyaWJ1
dGVkU3RyaW5nOwotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLSAgICAKLSAgICBlZGl0b3Iuc2V0
SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7Ci0gICAgcmV0dXJuIGRpY3Rpb25h
cnlQb3B1cEluZm87Ci19CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IDZlNWE2
ZDE4ODVkNWQ0YmYyZTMwMjQ2YTA1ZTJhOGI2MzZmMjhiODMuLmVhYzRmNGZhYTM1ZDFiYzJmZmJk
OTNhNTljZjhjN2I2ZDQ2ZWY5MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC00MTcsNiArNDE3LDIxIEBAIHZvaWQgV2Vi
UGFnZTo6c2VuZENvbXBsZXhUZXh0SW5wdXRUb1BsdWdpbih1aW50NjRfdCwgY29uc3QgU3RyaW5n
JikKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0
aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9y
U2VsZWN0aW9uKEZyYW1lJiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIFRleHRJbmRpY2F0b3JQ
cmVzZW50YXRpb25UcmFuc2l0aW9uKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShGcmFtZSYsIFJhbmdl
JiwgTlNEaWN0aW9uYXJ5ICosIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIGJvb2wgV2ViUGFnZTo6cGVyZm9ybU5vbkVk
aXRpbmdCZWhhdmlvckZvclNlbGVjdG9yKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OktleWJvYXJk
RXZlbnQqKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IGZhN2E2YWFmMWI2MGJk
YTkwZGNkMDc5YmExYTk0MzZmMTIxNmIwZGMuLjQ3MzNiMWNiZjJmZTQ1Y2Q5ZDBjZWE3ZWVmOWJj
N2MzOGFmYWY3ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tCkBAIC0zODksNyArMzg5LDEwMiBAQCB2b2lkIFdlYlBhZ2U6OmZv
bnRBdFNlbGVjdGlvbihDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpGb250QXRTZWxlY3Rpb25DYWxsYmFjayhmb250TmFtZSwgZm9udFNpemUs
IHNlbGVjdGlvbkhhc011bHRpcGxlRm9udHMsIGNhbGxiYWNrSUQpKTsKIH0KICAgICAKK3ZvaWQg
V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9p
bnQmIGZsb2F0UG9pbnQpCit7CisgICAgaWYgKGF1dG8qIHBsdWdpblZpZXcgPSBwbHVnaW5WaWV3
Rm9yRnJhbWUoJm1fcGFnZS0+bWFpbkZyYW1lKCkpKSB7CisgICAgICAgIGlmIChwbHVnaW5WaWV3
LT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oZmxvYXRQb2ludCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRmluZCB0aGUgZnJhbWUgdGhlIHBvaW50IGlz
IG92ZXIuCisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2
ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KG1fcGFnZS0+bWFpbkZyYW1lKCkudmll
dygpLT53aW5kb3dUb0NvbnRlbnRzKHJvdW5kZWRJbnRQb2ludChmbG9hdFBvaW50KSkpOworICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2U7CisgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zOworICAgIHN0
ZDo6dGllKHJhbmdlLCBvcHRpb25zKSA9IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0
UmVzdWx0KHJlc3VsdCk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
YXV0byogZnJhbWUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgPyByZXN1bHQuaW5uZXJO
b25TaGFyZWROb2RlKCktPmRvY3VtZW50KCkuZnJhbWUoKSA6ICZtX3BhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJl
dHVybjsKKworICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoKmZyYW1lLCAqcmFu
Z2UsIG9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2Up
OworfQorCit2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9u
KEZyYW1lJiBmcmFtZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBUZXh0SW5k
aWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQorewor
ICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZTsKKyAgICBOU0RpY3Rpb25hcnkgKm9wdGlv
bnM7CisgICAgc3RkOjp0aWUoc2VsZWN0ZWRSYW5nZSwgb3B0aW9ucykgPSBEaWN0aW9uYXJ5TG9v
a3VwOjpyYW5nZUZvclNlbGVjdGlvbihzZWxlY3Rpb24pOworICAgIGlmIChzZWxlY3RlZFJhbmdl
KQorICAgICAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKGZyYW1lLCAqc2VsZWN0
ZWRSYW5nZSwgb3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Cit9CiAKK3ZvaWQgV2Vi
UGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKQoreworICAg
IGF1dG8mIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJh
bWUoKTsKKyAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihmcmFtZSwgZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFu
c2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGUpOworfQorCitEaWN0aW9uYXJ5UG9wdXBJbmZvIFdl
YlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiBy
YW5nZSwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJh
bnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQoreworICAgIEVkaXRvciYgZWRpdG9yID0g
ZnJhbWUuZWRpdG9yKCk7CisgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cElu
Zm8odHJ1ZSk7CisKKyAgICBEaWN0aW9uYXJ5UG9wdXBJbmZvIGRpY3Rpb25hcnlQb3B1cEluZm87
CisgICAgaWYgKHJhbmdlLnRleHQoKS5zdHJpcFdoaXRlU3BhY2UoKS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOworICAg
ICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKKyAgICB9CisKKyAgICBWZWN0b3I8Rmxv
YXRRdWFkPiBxdWFkczsKKyAgICByYW5nZS5hYnNvbHV0ZVRleHRRdWFkcyhxdWFkcyk7CisgICAg
aWYgKHF1YWRzLmlzRW1wdHkoKSkgeworICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlv
bmFyeVBvcHVwSW5mbyhmYWxzZSk7CisgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZv
OworICAgIH0KKworICAgIEludFJlY3QgcmFuZ2VSZWN0ID0gZnJhbWUudmlldygpLT5jb250ZW50
c1RvV2luZG93KHF1YWRzWzBdLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOworCisgICAgY29uc3Qg
UmVuZGVyU3R5bGUqIHN0eWxlID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKS5yZW5kZXJTdHlsZSgp
OworICAgIGZsb2F0IHNjYWxlZEFzY2VudCA9IHN0eWxlID8gc3R5bGUtPmZvbnRNZXRyaWNzKCku
YXNjZW50KCkgKiBwYWdlU2NhbGVGYWN0b3IoKSA6IDA7CisgICAgZGljdGlvbmFyeVBvcHVwSW5m
by5vcmlnaW4gPSBGbG9hdFBvaW50KHJhbmdlUmVjdC54KCksIHJhbmdlUmVjdC55KCkgKyBzY2Fs
ZWRBc2NlbnQpOworICAgIGRpY3Rpb25hcnlQb3B1cEluZm8ub3B0aW9ucyA9IG9wdGlvbnM7CisK
KyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKm5zQXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRy
aWJ1dGVkU3RyaW5nRnJvbVJhbmdlKHJhbmdlLCBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3Ry
aW5nOjpObyk7CisKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZz4gc2Nh
bGVkTlNBdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJp
bmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOltuc0F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXV0pOwor
CisgICAgTlNGb250TWFuYWdlciAqZm9udE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBzaGFyZWRG
b250TWFuYWdlcl07CisKKyAgICBbbnNBdHRyaWJ1dGVkU3RyaW5nIGVudW1lcmF0ZUF0dHJpYnV0
ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIFtuc0F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgb3B0
aW9uczowIHVzaW5nQmxvY2s6XihOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMsIE5TUmFuZ2UgcmFu
Z2UsIEJPT0wgKnN0b3ApIHsKKyAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+
IHNjYWxlZEF0dHJpYnV0ZXMgPSBhZG9wdE5TKFthdHRyaWJ1dGVzIG11dGFibGVDb3B5XSk7CisK
KyAgICAgICAgTlNGb250ICpmb250ID0gW3NjYWxlZEF0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5T
Rm9udEF0dHJpYnV0ZU5hbWVdOworICAgICAgICBpZiAoZm9udCkKKyAgICAgICAgICAgIGZvbnQg
PSBbZm9udE1hbmFnZXIgY29udmVydEZvbnQ6Zm9udCB0b1NpemU6Zm9udC5wb2ludFNpemUgKiBw
YWdlU2NhbGVGYWN0b3IoKV07CisgICAgICAgIGlmIChmb250KQorICAgICAgICAgICAgW3NjYWxl
ZEF0dHJpYnV0ZXMgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwor
CisgICAgICAgIFtzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcgYWRkQXR0cmlidXRlczpzY2FsZWRB
dHRyaWJ1dGVzLmdldCgpIHJhbmdlOnJhbmdlXTsKKyAgICB9XTsKKworICAgIFRleHRJbmRpY2F0
b3JPcHRpb25zIGluZGljYXRvck9wdGlvbnMgPSBUZXh0SW5kaWNhdG9yT3B0aW9uVXNlQm91bmRp
bmdSZWN0QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxleFJhbmdlczsKKyAgICBpZiAocHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbiA9PSBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6
Qm91bmNlQW5kQ3Jvc3NmYWRlKQorICAgICAgICBpbmRpY2F0b3JPcHRpb25zIHw9IFRleHRJbmRp
Y2F0b3JPcHRpb25JbmNsdWRlU25hcHNob3RXaXRoU2VsZWN0aW9uSGlnaGxpZ2h0OworCisgICAg
UmVmUHRyPFRleHRJbmRpY2F0b3I+IHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVh
dGVXaXRoUmFuZ2UocmFuZ2UsIGluZGljYXRvck9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRp
b24pOworICAgIGlmICghdGV4dEluZGljYXRvcikgeworICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0
aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7CisgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5
UG9wdXBJbmZvOworICAgIH0KKworICAgIGRpY3Rpb25hcnlQb3B1cEluZm8udGV4dEluZGljYXRv
ciA9IHRleHRJbmRpY2F0b3ItPmRhdGEoKTsKKyAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJp
YnV0ZWRTdHJpbmcgPSBzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmc7CisKKyAgICBlZGl0b3Iuc2V0
SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7CisgICAgcmV0dXJuIGRpY3Rpb25h
cnlQb3B1cEluZm87Cit9CiAKICNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKIApAQCAtNDQ0LDYg
KzUzOSwxMSBAQCBEaWN0aW9uYXJ5UG9wdXBJbmZvIFdlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cElu
Zm9Gb3JTZWxlY3Rpb25JblBERlBsdWdpbihQREZTZWxlYwogCiAjZW5kaWYKIAordm9pZCBXZWJQ
YWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2Um
IHJhbmdlLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25U
cmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCit7CisgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpEaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1cChkaWN0aW9uYXJ5UG9wdXBJ
bmZvRm9yUmFuZ2UoZnJhbWUsIHJhbmdlLCBvcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9u
KSkpOworfQorCiBib29sIFdlYlBhZ2U6OnBlcmZvcm1Ob25FZGl0aW5nQmVoYXZpb3JGb3JTZWxl
Y3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKICAg
ICAvLyBGaXJzdCBnaXZlIGFjY2Vzc2liaWxpdHkgYSBjaGFuY2UgdG8gaGFuZGxlIHRoZSBldmVu
dC4K
</data>

          </attachment>
      

    </bug>

</bugzilla>