<?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>246873</bug_id>
          
          <creation_ts>2022-10-21 11:50:19 -0700</creation_ts>
          <short_desc>REGRESSION(255338@main): broke webrtc sites</short_desc>
          <delta_ts>2022-10-21 11:56:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>246136</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1907368</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2022-10-21 11:50:19 -0700</bug_when>
    <thetext>https://commits.webkit.org/255338@main introduced a regression:
broke webrtc sites

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>1907370</commentid>
    <comment_count>1</comment_count>
      <attachid>463156</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2022-10-21 11:50:24 -0700</bug_when>
    <thetext>Created attachment 463156
REVERT of 255338@main

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

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

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1907372</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-10-21 11:55:39 -0700</bug_when>
    <thetext>Committed 255841@main (5f4eae0dc51c): &lt;https://commits.webkit.org/255841@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 463156.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1907373</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-10-21 11:56:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/101435620&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>463156</attachid>
            <date>2022-10-21 11:50:24 -0700</date>
            <delta_ts>2022-10-21 11:55:40 -0700</delta_ts>
            <desc>REVERT of 255338@main</desc>
            <filename>bug-246873-20221021115023.patch</filename>
            <type>text/plain</type>
            <size>3197821</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">RnJvbSAxMmIxYTM2M2U5MmM2OWJiYThmZDc2ODk1NmVhNDA5NGU0YThiMmU0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDb21taXQgUXVldWUgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3Jn
PgpEYXRlOiBGcmksIDIxIE9jdCAyMDIyIDExOjUwOjIxIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0g
VW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNTUzMzhAbWFpbi4KIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNDY4NzMKCmJyb2tlIHdlYnJ0YyBzaXRlcwoKUmV2ZXJ0ZWQg
Y2hhbmdlc2V0OgoKIlJlbW92ZSBXZWJSVEMgdGhpcmQgcGFydHkgdXNyc2N0cCIKaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0NjEzNgpodHRwczovL2NvbW1pdHMud2Vi
a2l0Lm9yZy8yNTUzMzhAbWFpbgotLS0KIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9DTWFr
ZUxpc3RzLnR4dCAgICB8ICAgIDY5ICsKIC4uLi9Db25maWd1cmF0aW9ucy9saWJ3ZWJydGMueGNj
b25maWcgICAgICAgICB8ICAgICA0ICstCiAuLi4vbGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL3Vz
cnNjdHAueGNjb25maWcgfCAgICAxOCArCiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL0RFUFMgICAgICAgfCAgICAgMiArCiAuLi4vU291cmNlL3RoaXJkX3BhcnR5Ly5naXRhdHRy
aWJ1dGVzICAgICAgICAgfCAgICAgMSArCiAuLi4vU291cmNlL3RoaXJkX3BhcnR5L2NyYzMyYy9C
VUlMRC5nbiAgICAgICAgfCAgIDE3OSAtCiAuLi4vU291cmNlL3RoaXJkX3BhcnR5L2NyYzMyYy9E
SVJfTUVUQURBVEEgICAgfCAgICAgNCAtCiAuLi4vU291cmNlL3RoaXJkX3BhcnR5L2NyYzMyYy9P
V05FUlMgICAgICAgICAgfCAgICAgNiAtCiAuLi4vU291cmNlL3RoaXJkX3BhcnR5L2NyYzMyYy9S
RUFETUUuY2hyb21pdW0gfCAgICAxNiAtCiAuLi4vY3JjMzJjL2NvbmZpZy9jcmMzMmMvY3JjMzJj
X2NvbmZpZy5oICAgICAgfCAgICAgNiAtCiAuLi4vU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
LmdpdGlnbm9yZSAgICAgfCAgICA3NyArCiAuLi4vU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
QlVJTEQuZ24gICAgICAgfCAgIDE4OSArCiAuLi4vU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
RElSX01FVEFEQVRBICAgfCAgICAgMyArCiAuLi4vU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
TElDRU5TRSAgICAgICAgfCAgICAzMCArCiAuLi4vU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
T1dORVJTICAgICAgICAgfCAgICAgMiArCiAuLi4vdGhpcmRfcGFydHkvdXNyc2N0cC9SRUFETUUu
Y2hyb21pdW0gICAgICAgfCAgICAyMSArCiAuLi4vdXNyc2N0cC91c3JzY3RwbGliLy5naXRhdHRy
aWJ1dGVzICAgICAgICAgfCAgICAgMSArCiAuLi4vdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliLy5naXRpZ25vcmUgfCAgICA4NCArCiAuLi4vdXNyc2N0cC91c3JzY3RwbGliL0NNYWtlTGlz
dHMudHh0ICAgICAgICAgfCAgIDI3OSArCiAuLi4vdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL0xJQ0VOU0UubWQgfCAgICAyNyArCiAuLi4vdXNyc2N0cC91c3JzY3RwbGliL01ha2VmaWxl
LmFtICAgICAgICAgICAgfCAgICAzOCArCiAuLi4vdXNyc2N0cC91c3JzY3RwbGliL01ha2VmaWxl
Lm5tYWtlICAgICAgICAgfCAgICA0NSArCiAuLi4vdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL01hbnVhbC5tZCAgfCAgIDc4NiArCiAuLi4vdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL01hbnVhbC50ZXggfCAgMTMzNCArKwogLi4uL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9SRUFETUUubWQgIHwgICAgMTAgKwogLi4uL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9ib290c3RyYXAgIHwgICAgNjYgKwogLi4uL3VzcnNjdHAvdXNyc2N0cGxpYi9jb25maWd1
cmUuYWMgICAgICAgICAgIHwgICAxODggKwogLi4uL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9nZW4tZGVmLnB5IHwgICAgMjYgKwogLi4uL3VzcnNjdHAvdXNyc2N0cGxpYi9tZXNvbi5i
dWlsZCAgICAgICAgICAgIHwgICAyMjUgKwogLi4uL3VzcnNjdHAvdXNyc2N0cGxpYi9tZXNvbl9v
cHRpb25zLnR4dCAgICAgIHwgICAgMTAgKwogLi4uL3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3Rw
LnBjLmluICAgICAgICAgIHwgICAgMTIgKwogLi4uL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9DTWFr
ZUxpc3RzLnR4dCAgICAgIHwgICAyMTYgKwogLi4uL3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3Rw
bGliL01ha2VmaWxlLmFtIHwgICAgODEgKwogLi4uL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9NYWtl
ZmlsZS5ubWFrZSAgICAgIHwgICAxNzkgKwogLi4uL3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3Rw
bGliL21lc29uLmJ1aWxkIHwgICAgMjAgKwogLi4uL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRp
bmV0L21lc29uLmJ1aWxkIHwgICAgMjAgKwogLi4uL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRp
bmV0L3NjdHAuaCAgICAgIHwgICA2NjYgKwogLi4uL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2Fz
Y29uZi5jICAgICAgICAgIHwgIDM1MTggKysrKwogLi4uL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3Rw
X2FzY29uZi5oICAgICAgICAgIHwgICAgOTQgKwogLi4uL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9u
ZXRpbmV0L3NjdHBfYXV0aC5jIHwgIDIzMDIgKysrCiAuLi4vdXNyc2N0cGxpYi91c3JzY3RwbGli
L25ldGluZXQvc2N0cF9hdXRoLmggfCAgIDIxMyArCiAuLi4vdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfYnNkX2FkZHIuYyAgICAgICAgfCAgIDk5MCArCiAuLi4vdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfYnNkX2FkZHIuaCAgICAgICAgfCAgICA3MiArCiAuLi4vdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfY2FsbG91dC5jICAgICAgICAgfCAgIDI0OSArCiAuLi4vdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfY2FsbG91dC5oICAgICAgICAgfCAgIDExOSArCiAuLi4vdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfY2NfZnVuY3Rpb25zLmMgICAgfCAgMjQ5NSArKysKIC4uLi91c3JzY3RwbGliL25ldGluZXQv
c2N0cF9jb25zdGFudHMuaCAgICAgICB8ICAxMDY5ICsrCiAuLi4vdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfY3JjMzIuaCAgICAgICAgICAgfCAgICA1NiArCiAuLi4vdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfaGVhZGVyLmggICAgICAgICAgfCAgIDU5NSArCiAuLi4vdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfaW5kYXRhLmMgICAgICAgICAgfCAgNTgwMCArKysrKysKIC4uLi91c3JzY3RwbGliL25l
dGluZXQvc2N0cF9pbmRhdGEuaCAgICAgICAgICB8ICAgMTIxICsKIC4uLi91c3JzY3RwbGliL25l
dGluZXQvc2N0cF9pbnB1dC5jICAgICAgICAgICB8ICA2NDM4ICsrKysrKysKIC4uLi91c3JzY3Rw
bGliL25ldGluZXQvc2N0cF9pbnB1dC5oICAgICAgICAgICB8ICAgIDY2ICsKIC4uLi91c3JzY3Rw
bGliL25ldGluZXQvc2N0cF9sb2NrX3VzZXJzcGFjZS5oICB8ICAgMjQ1ICsKIC4uLi91c3JzY3Rw
bGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX29zLmggICB8ICAgIDg5ICsKIC4uLi91c3JzY3Rw
bGliL25ldGluZXQvc2N0cF9vc191c2Vyc3BhY2UuaCAgICB8ICAxMTQ0ICsrCiAuLi4vdXNyc2N0
cGxpYi9uZXRpbmV0L3NjdHBfb3V0cHV0LmMgICAgICAgICAgfCAxNTAxNyArKysrKysrKysrKysr
KysrCiAuLi4vdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3V0cHV0LmggICAgICAgICAgfCAgIDI0
MCArCiAuLi4vdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wY2IuYyAgfCAgODA5
NiArKysrKysrKysKIC4uLi91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3BjYi5o
ICB8ICAgODY4ICsKIC4uLi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wZWVsb2ZmLmMgICAgICAg
ICB8ICAgMzAzICsKIC4uLi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wZWVsb2ZmLmggICAgICAg
ICB8ICAgIDcwICsKIC4uLi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wcm9jZXNzX2xvY2suaCAg
ICB8ICAgNjc3ICsKIC4uLi91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NoYTEu
YyB8ICAgMzQ3ICsKIC4uLi91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NoYTEu
aCB8ICAgIDk0ICsKIC4uLi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9zc19mdW5jdGlvbnMuYyAg
ICB8ICAxMTI2ICsrCiAuLi4vdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc3RydWN0cy5oICAgICAg
ICAgfCAgMTI4OCArKwogLi4uL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3N5c2N0bC5jICAgICAg
ICAgIHwgIDE2MjUgKysKIC4uLi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9zeXNjdGwuaCAgICAg
ICAgICB8ICAgNjI3ICsKIC4uLi91c3JzY3RwbGliL25ldGluZXQvc2N0cF90aW1lci5jICAgICAg
ICAgICB8ICAxNjQxICsrCiAuLi4vdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdGltZXIuaCAgICAg
ICAgICAgfCAgIDEwMyArCiAuLi4vdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF91
aW8uaCAgfCAgMTM1MiArKwogLi4uL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3VzZXJzcGFjZS5j
ICAgICAgIHwgICA0NDQgKwogLi4uL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3VzcnJlcS5jICAg
ICAgICAgIHwgIDkwNTUgKysrKysrKysrKwogLi4uL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRp
bmV0L3NjdHBfdmFyLmggIHwgICA0NDMgKwogLi4uL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRp
bmV0L3NjdHB1dGlsLmMgIHwgIDg2NjEgKysrKysrKysrCiAuLi4vdXNyc2N0cGxpYi91c3JzY3Rw
bGliL25ldGluZXQvc2N0cHV0aWwuaCAgfCAgIDQxNyArCiAuLi4vdXNyc2N0cGxpYi9uZXRpbmV0
Ni9tZXNvbi5idWlsZCAgICAgICAgICAgfCAgICAgMSArCiAuLi4vdXNyc2N0cGxpYi9uZXRpbmV0
Ni9zY3RwNl91c3JyZXEuYyAgICAgICAgfCAgMTg1NCArKwogLi4uL3VzcnNjdHBsaWIvbmV0aW5l
dDYvc2N0cDZfdmFyLmggICAgICAgICAgIHwgICAgODEgKwogLi4uL3VzcnNjdHBsaWIvdXNyc2N0
cGxpYi91c2VyX2F0b21pYy5oICAgICAgIHwgICAzMTYgKwogLi4uL3VzcnNjdHBsaWIvdXNyc2N0
cGxpYi91c2VyX2Vudmlyb25tZW50LmMgIHwgICAzODQgKwogLi4uL3VzcnNjdHBsaWIvdXNyc2N0
cGxpYi91c2VyX2Vudmlyb25tZW50LmggIHwgICAxMjMgKwogLi4uL3VzcnNjdHBsaWIvdXNyc2N0
cGxpYi91c2VyX2lucGNiLmggICAgICAgIHwgICAzNzMgKwogLi4uL3VzcnNjdHBsaWIvdXNyc2N0
cGxpYi91c2VyX2lwNl92YXIuaCAgICAgIHwgICAxMjQgKwogLi4uL3VzcnNjdHBsaWIvdXNyc2N0
cGxpYi91c2VyX2lwX2ljbXAuaCAgICAgIHwgICAyMjUgKwogLi4uL3VzcnNjdHBsaWIvdXNyc2N0
cGxpYi91c2VyX21hbGxvYy5oICAgICAgIHwgICAyMDMgKwogLi4uL3VzcnNjdHAvdXNyc2N0cGxp
Yi91c3JzY3RwbGliL3VzZXJfbWJ1Zi5jIHwgIDE1NjYgKysKIC4uLi91c3JzY3RwL3VzcnNjdHBs
aWIvdXNyc2N0cGxpYi91c2VyX21idWYuaCB8ICAgNDEzICsKIC4uLi91c3JzY3RwbGliL3VzcnNj
dHBsaWIvdXNlcl9xdWV1ZS5oICAgICAgICB8ICAgNjM5ICsKIC4uLi91c3JzY3RwbGliL3VzcnNj
dHBsaWIvdXNlcl9yZWN2X3RocmVhZC5jICB8ICAxNTQ5ICsrCiAuLi4vdXNyc2N0cGxpYi91c3Jz
Y3RwbGliL3VzZXJfcmVjdl90aHJlYWQuaCAgfCAgICAzNCArCiAuLi4vdXNyc2N0cGxpYi91c3Jz
Y3RwbGliL3VzZXJfcm91dGUuaCAgICAgICAgfCAgIDEzMCArCiAuLi4vdXNyc2N0cGxpYi91c3Jz
Y3RwbGliL3VzZXJfc29ja2V0LmMgICAgICAgfCAgMzU5MiArKysrCiAuLi4vdXNyc2N0cGxpYi91
c3JzY3RwbGliL3VzZXJfc29ja2V0dmFyLmggICAgfCAgIDUyNyArCiAuLi4vdXNyc2N0cC91c3Jz
Y3RwbGliL3VzcnNjdHBsaWIvdXNlcl91bWEuaCAgfCAgICA5NiArCiAuLi4vdXNyc2N0cC91c3Jz
Y3RwbGliL3VzcnNjdHBsaWIvdXNyc2N0cC5oICAgfCAgMTMyMSArKwogLi4uL1NvdXJjZS93ZWJy
dGMvbmV0L2Rjc2N0cC9wYWNrZXQvY3JjMzJjLmNjIHwgICAgIDYgKy0KIC4uLi93ZWJydGMvbmV0
L2Rjc2N0cC9wYWNrZXQvc2N0cF9jcmMzMi5jICAgICB8ICAgNzMyIC0KIC4uLi9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9wYXRjaDEuMSAgICAgICAgICB8ICAgIDkyICsKIC4uLm5nLXVzcmN0cC1s
aWJyYXJ5LWNvbXBpbGF0aW9uLWVycm9ycy5wYXRjaCB8ICAgMTE5ICsKIC4uLi9saWJ3ZWJydGMv
V2ViS2l0L3BhdGNoLXVzcnNjdHAuZGlmZiAgICAgICB8ICAgIDQ1ICsKIC4uLi9saWJ3ZWJydGMu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiAgICAgICB8ICAgNDEyICstCiBTb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybU1hYy5jbWFrZSAgICAgICAgICAgICAgfCAgICAgMSArCiAxMDQgZmlsZXMgY2hh
bmdlZCwgOTcxMTQgaW5zZXJ0aW9ucygrKSwgOTUzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9ucy91c3JzY3Rw
LnhjY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS8uZ2l0YXR0cmlidXRlcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvY3JjMzJjL0JVSUxE
LmduCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9jcmMzMmMvRElSX01FVEFEQVRBCiBkZWxldGUgbW9kZSAxMDA2NDQgU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9jcmMzMmMvT1dORVJT
CiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9jcmMzMmMvUkVBRE1FLmNocm9taXVtCiBkZWxldGUgbW9kZSAxMDA2NDQgU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9jcmMzMmMvY29uZmln
L2NyYzMyYy9jcmMzMmNfY29uZmlnLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvLmdpdGlnbm9yZQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC9CVUlMRC5nbgogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9ESVJfTUVUQURBVEEKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvTElDRU5TRQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9PV05FUlMKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvUkVBRE1FLmNocm9taXVtCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvLmdp
dGF0dHJpYnV0ZXMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi8uZ2l0aWdub3JlCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvQ01ha2VMaXN0cy50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi9MSUNFTlNFLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvTWFrZWZp
bGUuYW0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9NYWtlZmlsZS5ubWFrZQogY3JlYXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL01hbnVhbC5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL01hbnVhbC50ZXgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9SRUFETUUubWQKIGNy
ZWF0ZSBtb2RlIDEwMDc1NSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9ib290c3RyYXAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi9jb25maWd1cmUuYWMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9nZW4tZGVm
LnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi9tZXNvbl9vcHRpb25zLnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3VzcnNjdHAucGMuaW4KIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3Rw
bGliL0NNYWtlTGlzdHMudHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxp
Yi9NYWtlZmlsZS5hbQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvTWFr
ZWZpbGUubm1ha2UKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL21lc29u
LmJ1aWxkCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L21l
c29uLmJ1aWxkCiBjcmVhdGUgbW9kZSAxMDA3NTUgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHAuaAogY3JlYXRlIG1vZGUgMTAwNzU1IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9z
Y3RwX2FzY29uZi5jCiBjcmVhdGUgbW9kZSAxMDA3NTUgU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRp
bmV0L3NjdHBfYXNjb25mLmgKIGNyZWF0ZSBtb2RlIDEwMDc1NSBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGli
L25ldGluZXQvc2N0cF9hdXRoLmMKIGNyZWF0ZSBtb2RlIDEwMDc1NSBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3Rw
bGliL25ldGluZXQvc2N0cF9hdXRoLmgKIGNyZWF0ZSBtb2RlIDEwMDc1NSBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3Jz
Y3RwbGliL25ldGluZXQvc2N0cF9ic2RfYWRkci5jCiBjcmVhdGUgbW9kZSAxMDA3NTUgU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYnNkX2FkZHIuaAogY3JlYXRlIG1vZGUgMTAwNzU1
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NhbGxvdXQuYwogY3JlYXRlIG1vZGUg
MTAwNzU1IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NhbGxvdXQuaAogY3JlYXRl
IG1vZGUgMTAwNzU1IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NjX2Z1bmN0aW9u
cy5jCiBjcmVhdGUgbW9kZSAxMDA3NTUgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBf
Y29uc3RhbnRzLmgKIGNyZWF0ZSBtb2RlIDEwMDc1NSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGlu
ZXQvc2N0cF9jcmMzMi5oCiBjcmVhdGUgbW9kZSAxMDA3NTUgU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9u
ZXRpbmV0L3NjdHBfaGVhZGVyLmgKIGNyZWF0ZSBtb2RlIDEwMDc1NSBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3Rw
bGliL25ldGluZXQvc2N0cF9pbmRhdGEuYwogY3JlYXRlIG1vZGUgMTAwNzU1IFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Vz
cnNjdHBsaWIvbmV0aW5ldC9zY3RwX2luZGF0YS5oCiBjcmVhdGUgbW9kZSAxMDA3NTUgU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5wdXQuYwogY3JlYXRlIG1vZGUgMTAwNzU1IFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2lucHV0LmgKIGNyZWF0ZSBtb2RlIDEwMDc1
NSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9sb2NrX3VzZXJzcGFjZS5oCiBjcmVh
dGUgbW9kZSAxMDA3NTUgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3MuaAogY3Jl
YXRlIG1vZGUgMTAwNzU1IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX29zX3VzZXJz
cGFjZS5oCiBjcmVhdGUgbW9kZSAxMDA3NTUgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfb3V0cHV0LmMKIGNyZWF0ZSBtb2RlIDEwMDc1NSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGlu
ZXQvc2N0cF9vdXRwdXQuaAogY3JlYXRlIG1vZGUgMTAwNzU1IFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIv
bmV0aW5ldC9zY3RwX3BjYi5jCiBjcmVhdGUgbW9kZSAxMDA3NTUgU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxp
Yi9uZXRpbmV0L3NjdHBfcGNiLmgKIGNyZWF0ZSBtb2RlIDEwMDc1NSBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3Rw
bGliL25ldGluZXQvc2N0cF9wZWVsb2ZmLmMKIGNyZWF0ZSBtb2RlIDEwMDc1NSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91
c3JzY3RwbGliL25ldGluZXQvc2N0cF9wZWVsb2ZmLmgKIGNyZWF0ZSBtb2RlIDEwMDc1NSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wcm9jZXNzX2xvY2suaAogY3JlYXRlIG1vZGUg
MTAwNzU1IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NoYTEuYwogY3JlYXRlIG1v
ZGUgMTAwNzU1IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NoYTEuaAogY3JlYXRl
IG1vZGUgMTAwNzU1IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NzX2Z1bmN0aW9u
cy5jCiBjcmVhdGUgbW9kZSAxMDA3NTUgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBf
c3RydWN0cy5oCiBjcmVhdGUgbW9kZSAxMDA3NTUgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfc3lzY3RsLmMKIGNyZWF0ZSBtb2RlIDEwMDc1NSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25l
dGluZXQvc2N0cF9zeXNjdGwuaAogY3JlYXRlIG1vZGUgMTAwNzU1IFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBs
aWIvbmV0aW5ldC9zY3RwX3RpbWVyLmMKIGNyZWF0ZSBtb2RlIDEwMDc1NSBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3Jz
Y3RwbGliL25ldGluZXQvc2N0cF90aW1lci5oCiBjcmVhdGUgbW9kZSAxMDA3NTUgU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIv
dXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdWlvLmgKIGNyZWF0ZSBtb2RlIDEwMDc1NSBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi91c3JzY3RwbGliL25ldGluZXQvc2N0cF91c2Vyc3BhY2UuYwogY3JlYXRlIG1vZGUgMTAwNzU1
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3VzcnJlcS5jCiBjcmVhdGUgbW9kZSAx
MDA3NTUgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdmFyLmgKIGNyZWF0ZSBtb2Rl
IDEwMDc1NSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cHV0aWwuYwogY3JlYXRlIG1v
ZGUgMTAwNzU1IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwdXRpbC5oCiBjcmVhdGUg
bW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0Ni9tZXNvbi5idWlsZAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldDYvc2N0cDZfdXNycmVx
LmMKIGNyZWF0ZSBtb2RlIDEwMDc1NSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQ2L3NjdHA2
X3Zhci5oCiBjcmVhdGUgbW9kZSAxMDA3NTUgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2F0b21p
Yy5oCiBjcmVhdGUgbW9kZSAxMDA3NTUgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2Vudmlyb25t
ZW50LmMKIGNyZWF0ZSBtb2RlIDEwMDc1NSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfZW52aXJv
bm1lbnQuaAogY3JlYXRlIG1vZGUgMTAwNzU1IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9pbnBj
Yi5oCiBjcmVhdGUgbW9kZSAxMDA3NTUgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2lwNl92YXIu
aAogY3JlYXRlIG1vZGUgMTAwNzU1IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9pcF9pY21wLmgK
IGNyZWF0ZSBtb2RlIDEwMDc1NSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfbWFsbG9jLmgKIGNy
ZWF0ZSBtb2RlIDEwMDc1NSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfbWJ1Zi5jCiBjcmVhdGUg
bW9kZSAxMDA3NTUgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX21idWYuaAogY3JlYXRlIG1vZGUg
MTAwNzU1IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9xdWV1ZS5oCiBjcmVhdGUgbW9kZSAxMDA3
NTUgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX3JlY3ZfdGhyZWFkLmMKIGNyZWF0ZSBtb2RlIDEw
MDc1NSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfcmVjdl90aHJlYWQuaAogY3JlYXRlIG1vZGUg
MTAwNzU1IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9yb3V0ZS5oCiBjcmVhdGUgbW9kZSAxMDA3
NTUgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX3NvY2tldC5jCiBjcmVhdGUgbW9kZSAxMDA3NTUg
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX3NvY2tldHZhci5oCiBjcmVhdGUgbW9kZSAxMDA3NTUg
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX3VtYS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvdXNyc2N0cGxpYi91c3JzY3RwLmgKIGRlbGV0ZSBtb2RlIDEwMDc1NSBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9uZXQvZGNzY3RwL3BhY2tldC9zY3RwX2NyYzMy
LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9wYXRjaDEuMQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9XZWJLaXQvMDAwMi1GaXhpbmctdXNyY3RwLWxpYnJhcnktY29tcGlsYXRpb24tZXJy
b3JzLnBhdGNoCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1dlYktpdC9wYXRjaC11c3JzY3RwLmRpZmYKCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
Q01ha2VMaXN0cy50eHQKaW5kZXggOWQyYzc0ZDA4Y2U2Li42NTVlMzZhNGNhZTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ01ha2VMaXN0cy50eHQKQEAgLTIwODEsNiArMjA4MSwz
MCBAQCBlbHNlICgpCiAgICAgICAgIFNvdXJjZS90aGlyZF9wYXJ0eS9saWJ5dXYvc291cmNlL3Nj
YWxlX25lb24uY2MKICAgICAgICAgU291cmNlL3RoaXJkX3BhcnR5L2xpYnl1di9zb3VyY2Uvc2Nh
bGVfbmVvbjY0LmNjCiAKKyAgICAgICAgU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9hc2NvbmYuYworICAgICAgICBTb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2F1dGgu
YworICAgICAgICBTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBs
aWIvbmV0aW5ldC9zY3RwX2JzZF9hZGRyLmMKKyAgICAgICAgU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jYWxsb3V0LmMKKyAgICAg
ICAgU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGlu
ZXQvc2N0cF9jY19mdW5jdGlvbnMuYworICAgICAgICBTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NyYzMyLmMKKyAgICAgICAgU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0
cF9pbmRhdGEuYworICAgICAgICBTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2lucHV0LmMKKyAgICAgICAgU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vdXRwdXQuYwor
ICAgICAgICBTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIv
bmV0aW5ldC9zY3RwX3BjYi5jCisgICAgICAgIFNvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcGVlbG9mZi5jCisgICAgICAgIFNvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBf
c2hhMS5jCisgICAgICAgIFNvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNy
c2N0cGxpYi9uZXRpbmV0L3NjdHBfc3NfZnVuY3Rpb25zLmMKKyAgICAgICAgU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9zeXNjdGwu
YworICAgICAgICBTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBs
aWIvbmV0aW5ldC9zY3RwX3RpbWVyLmMKKyAgICAgICAgU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF91c2Vyc3BhY2UuYworICAgICAg
ICBTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5l
dC9zY3RwX3VzcnJlcS5jCisgICAgICAgIFNvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHB1dGlsLmMKKyAgICAgICAgU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQ2L3NjdHA2X3VzcnJl
cS5jCisgICAgICAgIFNvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0
cGxpYi91c2VyX2Vudmlyb25tZW50LmMKKyAgICAgICAgU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfbWJ1Zi5jCisgICAgICAgIFNvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX3JlY3ZfdGhyZWFkLmMK
KyAgICAgICAgU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGli
L3VzZXJfc29ja2V0LmMKKwogICAgICAgICBTb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2
aWNlL2xpbnV4L2Fsc2FzeW1ib2x0YWJsZV9saW51eC5jYwogICAgICAgICBTb3VyY2Uvd2VicnRj
L21vZHVsZXMvYXVkaW9fZGV2aWNlL2xpbnV4L2F1ZGlvX2RldmljZV9hbHNhX2xpbnV4LmNjCiAg
ICAgICAgIFNvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvbGludXgvYXVkaW9fZGV2
aWNlX3B1bHNlX2xpbnV4LmNjCkBAIC0yMTkyLDYgKzIyMTYsMTAgQEAgc2V0KHdlYnJ0Y19JTkNM
VURFX0RJUkVDVE9SSUVTIFBSSVZBVEUKICAgICBTb3VyY2UvdGhpcmRfcGFydHkvb3B1cy9zcmMv
aW5jbHVkZQogICAgIFNvdXJjZS90aGlyZF9wYXJ0eS9vcHVzL3NyYy9zaWxrCiAgICAgU291cmNl
L3RoaXJkX3BhcnR5L29wdXMvc3JjL3NpbGsvZmxvYXQKKyAgICBTb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cAorICAgIFNvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIKKyAgICBT
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIKKyAgICBTb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldAogICAg
IFNvdXJjZS93ZWJydGMKICAgICBTb3VyY2Uvd2VicnRjL2NvbW1vbl9hdWRpby9yZXNhbXBsZXIv
aW5jbHVkZQogICAgIFNvdXJjZS93ZWJydGMvY29tbW9uX2F1ZGlvL3NpZ25hbF9wcm9jZXNzaW5n
L2luY2x1ZGUKQEAgLTIyNzcsNiArMjMwNSw0NyBAQCB0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmll
cyhsaWJzcnRwIFBSSVZBVEUKICkKIAogaWYgKEFQUExFKQorICAgIGFkZF9saWJyYXJ5KHVzcnNj
dHAgU1RBVElDCisgICAgICAgIFNvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIv
dXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYXNjb25mLmMKKyAgICAgICAgU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9hdXRoLmMKKyAg
ICAgICAgU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25l
dGluZXQvc2N0cF9ic2RfYWRkci5jCisgICAgICAgIFNvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY2FsbG91dC5jCisgICAgICAgIFNv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfY2NfZnVuY3Rpb25zLmMKKyAgICAgICAgU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jcmMzMi5jCisgICAgICAgIFNvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5k
YXRhLmMKKyAgICAgICAgU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3Jz
Y3RwbGliL25ldGluZXQvc2N0cF9pbnB1dC5jCisgICAgICAgIFNvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3V0cHV0LmMKKyAgICAg
ICAgU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGlu
ZXQvc2N0cF9wY2IuYworICAgICAgICBTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3BlZWxvZmYuYworICAgICAgICBTb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NoYTEu
YworICAgICAgICBTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBs
aWIvbmV0aW5ldC9zY3RwX3NzX2Z1bmN0aW9ucy5jCisgICAgICAgIFNvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc3lzY3RsLmMKKyAg
ICAgICAgU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25l
dGluZXQvc2N0cF90aW1lci5jCisgICAgICAgIFNvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdXNlcnNwYWNlLmMKKyAgICAgICAgU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0
cF91c3JyZXEuYworICAgICAgICBTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwdXRpbC5jCisgICAgICAgIFNvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0Ni9zY3RwNl91c3JyZXEuYwor
ICAgICAgICBTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIv
dXNlcl9lbnZpcm9ubWVudC5jCisgICAgICAgIFNvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX21idWYuYworICAgICAgICBTb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9yZWN2X3RocmVhZC5jCisgICAg
ICAgIFNvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2Vy
X3NvY2tldC5jCisgICAgKQorICAgIHRhcmdldF9jb21waWxlX29wdGlvbnModXNyc2N0cCBQUklW
QVRFCisgICAgICAgIC1EX19Vc2Vyc3BhY2Vfb3NfRGFyd2luCisgICAgKQorCisgICAgdGFyZ2V0
X2luY2x1ZGVfZGlyZWN0b3JpZXModXNyc2N0cCBQUklWQVRFCisgICAgICAgIFNvdXJjZS90aGly
ZF9wYXJ0eS9ib3Jpbmdzc2wvc3JjL2luY2x1ZGUKKyAgICAgICAgU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliCisgICAgKQorCisgICAgdGFyZ2V0X2NvbXBp
bGVfZGVmaW5pdGlvbnModXNyc2N0cCBQUklWQVRFCisgICAgICAgIF9fVXNlcnNwYWNlX18KKyAg
ICAgICAgU0NUUF9TSU1QTEVfQUxMT0NBVE9SCisgICAgICAgIFNDVFBfUFJPQ0VTU19MRVZFTF9M
T0NLUworICAgICAgICBTQ1RQX1VTRV9PUEVOU1NMX1NIQTEKKyAgICApCisKICAgICBzZXQob3B1
c19TT1VSQ0VTCiAgICAgICAgIFNvdXJjZS90aGlyZF9wYXJ0eS9vcHVzL3NyYy9jZWx0L2tpc3Nf
ZmZ0LmMKICAgICAgICAgU291cmNlL3RoaXJkX3BhcnR5L29wdXMvc3JjL2NlbHQvcmF0ZS5jCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmlndXJhdGlvbnMvbGli
d2VicnRjLnhjY29uZmlnIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRp
b25zL2xpYndlYnJ0Yy54Y2NvbmZpZwppbmRleCBlNTk3NmJkYzIwODQuLmU2NzBiZTM4ODY4NSAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZpZ3VyYXRpb25zL2xp
YndlYnJ0Yy54Y2NvbmZpZworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ29uZmln
dXJhdGlvbnMvbGlid2VicnRjLnhjY29uZmlnCkBAIC01MCw3ICs1MCw3IEBAIERZTElCX0lOU1RB
TExfTkFNRV9CQVNFX1dLX1JFTE9DQVRBQkxFX0ZSQU1FV09SS1NfID0gJChOT1JNQUxfV0VCQ09S
RV9GUkFNRVdPUktTCiBEWUxJQl9JTlNUQUxMX05BTUVfQkFTRV9XS19SRUxPQ0FUQUJMRV9GUkFN
RVdPUktTX1lFUyA9IEBsb2FkZXJfcGF0aC8uLi8uLi8uLi87CiAKIEdDQ19XQVJOXzY0X1RPXzMy
X0JJVF9DT05WRVJTSU9OID0gTk87Ci1IRUFERVJfU0VBUkNIX1BBVEhTID0gU291cmNlIFNvdXJj
ZS90aGlyZF9wYXJ0eS9saWJzcnRwL2NyeXB0by9pbmNsdWRlIFNvdXJjZS90aGlyZF9wYXJ0eS9s
aWJzcnRwL2luY2x1ZGUgU291cmNlL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9zcmMvaW5jbHVkZSBT
b3VyY2UvdGhpcmRfcGFydHkvbGlieXV2L2luY2x1ZGUgU291cmNlL3dlYnJ0Yy9zZGsvb2JqYy9G
cmFtZXdvcmsvSGVhZGVycyBTb3VyY2Uvd2VicnRjL2NvbW1vbl9hdWRpby9zaWduYWxfcHJvY2Vz
c2luZy9pbmNsdWRlIFNvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19jb2RpbmcvY29kZWNzL2lz
YWMvbWFpbi9pbmNsdWRlIFNvdXJjZS90aGlyZF9wYXJ0eS9vcHVzL3NyYy9jZWx0IFNvdXJjZS90
aGlyZF9wYXJ0eS9vcHVzL3NyYy9pbmNsdWRlIFNvdXJjZS90aGlyZF9wYXJ0eS9vcHVzL3NyYy9z
cmMgU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9tYWMgU291cmNlL3dlYnJ0Yy9t
b2R1bGVzL2F1ZGlvX2RldmljZS9pb3MgU291cmNlL3dlYnJ0YyBTb3VyY2Uvd2VicnRjL3Nkay9v
YmpjIFNvdXJjZS93ZWJydGMvc2RrL29iamMvYmFzZSBTb3VyY2Uvd2VicnRjL3Nkay9vYmpjL0Zy
YW1ld29yay9DbGFzc2VzIFNvdXJjZS90aGlyZF9wYXJ0eS9saWJzcnRwL2NvbmZpZyBTb3VyY2Uv
d2VicnRjL3Nkay9vYmpjL0ZyYW1ld29yay9DbGFzc2VzL0NvbW1vbiBTb3VyY2Uvd2VicnRjL3Nk
ay9vYmpjL0ZyYW1ld29yay9DbGFzc2VzL1ZpZGVvIFNvdXJjZS93ZWJydGMvc2RrL29iamMvRnJh
bWV3b3JrL0NsYXNzZXMvUGVlckNvbm5lY3Rpb24gU291cmNlL3RoaXJkX3BhcnR5L2Fic2VpbC1j
cHAgU291cmNlL3RoaXJkX3BhcnR5L2xpYnZweC9zb3VyY2UvbGlidnB4IFNvdXJjZS90aGlyZF9w
YXJ0eS9saWJ3ZWJtL3dlYm1fcGFyc2VyL2luY2x1ZGU7CitIRUFERVJfU0VBUkNIX1BBVEhTID0g
U291cmNlIFNvdXJjZS90aGlyZF9wYXJ0eS9saWJzcnRwL2NyeXB0by9pbmNsdWRlIFNvdXJjZS90
aGlyZF9wYXJ0eS9saWJzcnRwL2luY2x1ZGUgU291cmNlL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9z
cmMvaW5jbHVkZSBTb3VyY2UvdGhpcmRfcGFydHkvbGlieXV2L2luY2x1ZGUgU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAgU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYiBTb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIgU291cmNlL3dlYnJ0
Yy9zZGsvb2JqYy9GcmFtZXdvcmsvSGVhZGVycyBTb3VyY2Uvd2VicnRjL2NvbW1vbl9hdWRpby9z
aWduYWxfcHJvY2Vzc2luZy9pbmNsdWRlIFNvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19jb2Rp
bmcvY29kZWNzL2lzYWMvbWFpbi9pbmNsdWRlIFNvdXJjZS90aGlyZF9wYXJ0eS9vcHVzL3NyYy9j
ZWx0IFNvdXJjZS90aGlyZF9wYXJ0eS9vcHVzL3NyYy9pbmNsdWRlIFNvdXJjZS90aGlyZF9wYXJ0
eS9vcHVzL3NyYy9zcmMgU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9tYWMgU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQgU291
cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9pb3MgU291cmNlL3dlYnJ0YyBTb3VyY2Uv
d2VicnRjL3Nkay9vYmpjIFNvdXJjZS93ZWJydGMvc2RrL29iamMvYmFzZSBTb3VyY2Uvd2VicnRj
L3Nkay9vYmpjL0ZyYW1ld29yay9DbGFzc2VzIFNvdXJjZS90aGlyZF9wYXJ0eS9saWJzcnRwL2Nv
bmZpZyBTb3VyY2Uvd2VicnRjL3Nkay9vYmpjL0ZyYW1ld29yay9DbGFzc2VzL0NvbW1vbiBTb3Vy
Y2Uvd2VicnRjL3Nkay9vYmpjL0ZyYW1ld29yay9DbGFzc2VzL1ZpZGVvIFNvdXJjZS93ZWJydGMv
c2RrL29iamMvRnJhbWV3b3JrL0NsYXNzZXMvUGVlckNvbm5lY3Rpb24gU291cmNlL3RoaXJkX3Bh
cnR5L2Fic2VpbC1jcHAgU291cmNlL3RoaXJkX3BhcnR5L2xpYnZweC9zb3VyY2UvbGlidnB4IFNv
dXJjZS90aGlyZF9wYXJ0eS9saWJ3ZWJtL3dlYm1fcGFyc2VyL2luY2x1ZGU7CiAKIFBVQkxJQ19I
RUFERVJTX0ZPTERFUl9QUkVGSVggPSAkKFdLX0xJQlJBUllfSEVBREVSU19GT0xERVJfUEFUSCk7
CiBJTlNUQUxMX1BVQkxJQ19IRUFERVJfUFJFRklYID0gJChJTlNUQUxMX1BBVEhfUFJFRklYKSQo
UFVCTElDX0hFQURFUlNfRk9MREVSX1BSRUZJWCk7CkBAIC02Miw3ICs2Miw3IEBAIFBVQkxJQ19M
SUJSQVJZX0ZPTERFUl9QUkVGSVggPSAkKFdLX0xJQlJBUllfSU5TVEFMTF9QQVRIKTsKIElOU1RB
TExfUFVCTElDX0xJQlJBUllfUFJFRklYID0gJChJTlNUQUxMX1BBVEhfUFJFRklYKSQoUFVCTElD
X0xJQlJBUllfRk9MREVSX1BSRUZJWCk7CiBTWVNURU1fUFVCTElDX0xJQlJBUllfUFJFRklYID0g
JChTWVNURU1fUFVCTElDX0xJQlJBUllfUFJFRklYXyQoVVNFX1NZU1RFTV9DT05URU5UX1BBVEgp
KTsKIFNZU1RFTV9QVUJMSUNfTElCUkFSWV9QUkVGSVhfWUVTID0gJChEU1RST09UKSQoUFVCTElD
X0xJQlJBUllfRk9MREVSX1BSRUZJWCk7Ci1MSUJSQVJZX0xJU1QgPSBsaWJib3Jpbmdzc2wuYSBs
aWJvcHVzLmEgbGlic3J0cC5hIGxpYnZweC5hIGxpYndlYm0uYSBsaWJ5dXYuYQorTElCUkFSWV9M
SVNUID0gbGliYm9yaW5nc3NsLmEgbGlib3B1cy5hIGxpYnNydHAuYSBsaWJ1c3JzY3RwLmEgbGli
dnB4LmEgbGlid2VibS5hIGxpYnl1di5hCiAKIENSRUFURV9TWU1MSU5LX09VVFBVVF9GSUxFUyA9
ICR7U1lTVEVNX1BVQkxJQ19IRUFERVJfUFJFRklYfSAgJHtTWVNURU1fUFVCTElDX0xJQlJBUllf
UFJFRklYfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NvbmZp
Z3VyYXRpb25zL3VzcnNjdHAueGNjb25maWcgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
Q29uZmlndXJhdGlvbnMvdXNyc2N0cC54Y2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLjRjMmFhZjk5YjM4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Db25maWd1cmF0aW9ucy91c3JzY3RwLnhjY29uZmlnCkBAIC0w
LDAgKzEsMTggQEAKK1BST0RVQ1RfTkFNRSA9IHVzcnNjdHA7CisKK0NMQU5HX1dBUk5fQk9PTF9D
T05WRVJTSU9OID0gWUVTOworQ0xBTkdfV0FSTl9FTlVNX0NPTlZFUlNJT04gPSBZRVM7CitDTEFO
R19XQVJOX0lOVF9DT05WRVJTSU9OID0gWUVTOworR0NDX1dBUk5fNjRfVE9fMzJfQklUX0NPTlZF
UlNJT04gPSBOTzsKK0NPTUJJTkVfSElEUElfSU1BR0VTID0gTk87CitFTkFCTEVfU1RSSUNUX09C
SkNfTVNHU0VORCA9IFlFUzsKKworSEVBREVSX1NFQVJDSF9QQVRIUyA9IFNvdXJjZS8gU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvIFNvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi8gU291cmNlL3RoaXJk
X3BhcnR5L2JvcmluZ3NzbC9zcmMvaW5jbHVkZS87CitJTlNUQUxMX1BBVEggPSAkKElOU1RBTExf
UEFUSF9QUkVGSVgpJChXS19MSUJSQVJZX0lOU1RBTExfUEFUSCk7CitQVUJMSUNfSEVBREVSU19G
T0xERVJfUEFUSCA9ICQoSU5TVEFMTF9QQVRIX1BSRUZJWCkkKFdLX0xJQlJBUllfSEVBREVSU19G
T0xERVJfUEFUSCkvbGlid2VicnRjOworVVNFX0hFQURFUk1BUCA9IE5POworV0FSTklOR19DRkxB
R1MgPSAtV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zICQoaW5oZXJpdGVkKTsKK0dDQ19QUkVQ
Uk9DRVNTT1JfREVGSU5JVElPTlMgPSBTQ1RQX1BST0NFU1NfTEVWRUxfTE9DS1MgU0NUUF9TSU1Q
TEVfQUxMT0NBVE9SIFNDVFBfVVNFX09QRU5TU0xfU0hBMSBfX1VzZXJzcGFjZV9fIEhBVkVfU0Ff
TEVOIEhBVkVfU0NPTk5fTEVOIF9fQVBQTEVfVVNFX1JGQ18yMjkyIF9fVXNlcnNwYWNlX29zX0Rh
cndpbiAkKGluaGVyaXRlZCk7CitPVEhFUl9DRkxBR1MgPSAtVUlORVQgLVVJTkVUNjsKKworT1RI
RVJfTERGTEFHUyA9ICQoaW5oZXJpdGVkKSAkKFNPVVJDRV9WRVJTSU9OX0xERkxBR1MpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS9ERVBTIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS9ERVBTCmluZGV4IDM3MjQ3MTQyOTFkMy4uZTNi
NmUxMDUxNWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L0RFUFMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS9ERVBTCkBAIC02
OSw2ICs2OSw4IEBAIGRlcHMgPSB7CiAgICAgVmFyKCdjaHJvbWl1bV9naXQnKSArICcvZXh0ZXJu
YWwvZ2l0aHViLmNvbS9jaXNjby9vcGVuaDI2NCcgKyAnQCcgKyAnMGZkODhkZjkzYzVkY2FmODU4
YzU3ZWI3ODkyYmQyNzc2M2YwZjBhYycsCiAgICdzcmMvdGhpcmRfcGFydHkvb3Blbm1heF9kbCc6
CiAgICAgVmFyKCdjaHJvbWl1bV9naXQnKSArICcvZXh0ZXJuYWwvd2VicnRjL2RlcHMvdGhpcmRf
cGFydHkvb3Blbm1heC5naXQnICsgJ0AnICsgIFZhcignb3Blbm1heF9kbF9yZXZpc2lvbicpLAor
ICAnc3JjL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYic6CisgICAgVmFyKCdjaHJvbWl1
bV9naXQnKSArICcvZXh0ZXJuYWwvZ2l0aHViLmNvbS9zY3RwbGFiL3VzcnNjdHAnICsgJ0AnICsg
JzJmNjQ3OGViOGQ0MGYxNzY2YTk2YjViMDMzZWQyNmMwYzIyNDQ1ODknLAogICAnc3JjL3RoaXJk
X3BhcnR5L3lhc20vc291cmNlL3BhdGNoZWQteWFzbSc6CiAgICAgVmFyKCdjaHJvbWl1bV9naXQn
KSArICcvY2hyb21pdW0vZGVwcy95YXNtL3BhdGNoZWQteWFzbS5naXQnICsgJ0AnICsgJzdkYTI4
YzZjN2M2YTEzODcyMTczNTJjZTAyYjMxNzU0ZGViNTRkMmEnLAogICAnc3JjL3Rvb2xzJzoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
LmdpdGF0dHJpYnV0ZXMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5Ly5naXRhdHRyaWJ1dGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMC4uYTNiNGRjZGRmNGYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS8uZ2l0YXR0cmlidXRlcwpAQCAtMCwwICsxIEBA
Cit1c3JzY3RwIHN2bi1wcm9wZXJ0aWVzPWFsbG93LXRhYnM9b24KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvY3JjMzJjL0JVSUxELmdu
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9jcmMzMmMv
QlVJTEQuZ24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MDI0YmJkOGQwOS4uMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvY3JjMzJjL0JVSUxELmduCisrKyAvZGV2L251bGwKQEAgLTEsMTc5ICswLDAgQEAKLSMg
Q29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0
KCIvL2J1aWxkL2NvbmZpZy9mZWF0dXJlcy5nbmkiKQotaW1wb3J0KCIvL3Rlc3RpbmcvdGVzdC5n
bmkiKQotaW1wb3J0KCIvL3RoaXJkX3BhcnR5L2dvb2dsZV9iZW5jaG1hcmsvYnVpbGRjb25maWcu
Z25pIikKLQotIyBPbmx5IGFwcGxpZWQgdG8gQ1JDMzJDIHNvdXJjZSBhbmQgdGVzdHMuIChub3Qg
ZXhwb3J0ZWQpCi1jb25maWcoImNyYzMyY19jb25maWciKSB7Ci0gIHZpc2liaWxpdHkgPSBbICI6
KiIgXQotCi0gIGluY2x1ZGVfZGlycyA9IFsKLSAgICAiY29uZmlnIiwKLSAgICAic3JjL2luY2x1
ZGUiLAotICBdCi0KLSAgZGVmaW5lcyA9IFsKLSAgICAiQllURV9PUkRFUl9CSUdfRU5ESUFOPTAi
LAotICAgICJDUkMzMkNfVEVTVFNfQlVJTFRfV0lUSF9HTE9HPTAiLAotICBdCi0KLSAgIyBJZiB3
ZSBldmVyIHN1cHBvcnQgYmlnLWVuZGlhbiBidWlsZHMsIGFkZCBsb2dpYyB0byBjb25kaXRpb25h
bGx5IGVuYWJsZQotICAjIEJZVEVfT1JERVJfQklHX0VORElBTi4KLQotICBpZiAoY3VycmVudF9j
cHUgPT0gIng4NiIgfHwgY3VycmVudF9jcHUgPT0gIng2NCIpIHsKLSAgICBkZWZpbmVzICs9IFsK
LSAgICAgICJIQVZFX01NX1BSRUZFVENIPTEiLAotICAgICAgIkhBVkVfU1NFNDI9MSIsCi0gICAg
XQotICB9IGVsc2UgewotICAgIGRlZmluZXMgKz0gWwotICAgICAgIkhBVkVfTU1fUFJFRkVUQ0g9
MCIsCi0gICAgICAiSEFWRV9TU0U0Mj0wIiwKLSAgICBdCi0gIH0KLSAgaWYgKGlzX2NsYW5nIHx8
ICFpc193aW4pIHsKLSAgICBkZWZpbmVzICs9IFsgIkhBVkVfQlVJTFRJTl9QUkVGRVRDSD0xIiBd
Ci0gIH0gZWxzZSB7Ci0gICAgZGVmaW5lcyArPSBbICJIQVZFX0JVSUxUSU5fUFJFRkVUQ0g9MCIg
XQotICB9Ci0KLSAgaWYgKGN1cnJlbnRfY3B1ID09ICJhcm02NCIpIHsKLSAgICBkZWZpbmVzICs9
IFsgIkhBVkVfQVJNNjRfQ1JDMzJDPTEiIF0KLSAgfSBlbHNlIHsKLSAgICBkZWZpbmVzICs9IFsg
IkhBVkVfQVJNNjRfQ1JDMzJDPTAiIF0KLSAgfQotCi0gICMgQW5kcm9pZCBhZGRlZCA8c3lzL2F1
eHYuaD4gaW4gQVBJIGxldmVsIDE4LgotICBpZiAoaXNfbGludXggfHwgaXNfY2hyb21lb3MgfHwg
aXNfYW5kcm9pZCkgewotICAgIGRlZmluZXMgKz0gWwotICAgICAgIkhBVkVfU1RST05HX0dFVEFV
WFZBTD0xIiwKLSAgICAgICJIQVZFX1dFQUtfR0VUQVVYVkFMPTEiLAotICAgIF0KLSAgfSBlbHNl
IHsKLSAgICBkZWZpbmVzICs9IFsKLSAgICAgICJIQVZFX1NUUk9OR19HRVRBVVhWQUw9MCIsCi0g
ICAgICAiSEFWRV9XRUFLX0dFVEFVWFZBTD0wIiwKLSAgICBdCi0gIH0KLX0KLQotc291cmNlX3Nl
dCgiY3JjMzJjIikgewotICBzb3VyY2VzID0gWwotICAgICJzcmMvaW5jbHVkZS9jcmMzMmMvY3Jj
MzJjLmgiLAotICAgICJzcmMvc3JjL2NyYzMyYy5jYyIsCi0gICAgInNyYy9zcmMvY3JjMzJjX3Bv
cnRhYmxlLmNjIiwKLSAgXQotCi0gIGNvbmZpZ3MgKz0gWyAiOmNyYzMyY19jb25maWciIF0KLSAg
ZGVwcyA9IFsKLSAgICAiOmNyYzMyY19hcm02NCIsCi0gICAgIjpjcmMzMmNfaW50ZXJuYWxfaGVh
ZGVycyIsCi0gICAgIjpjcmMzMmNfc3NlNDIiLAotICBdCi19Ci0KLXNvdXJjZV9zZXQoImNyYzMy
Y19zc2U0MiIpIHsKLSAgdmlzaWJpbGl0eSA9IFsgIjoqIiBdCi0KLSAgc291cmNlcyA9IFsKLSAg
ICAic3JjL3NyYy9jcmMzMmNfc3NlNDIuY2MiLAotICAgICJzcmMvc3JjL2NyYzMyY19zc2U0Mi5o
IiwKLSAgICAic3JjL3NyYy9jcmMzMmNfc3NlNDJfY2hlY2suaCIsCi0gIF0KLQotICBjb25maWdz
ICs9IFsgIjpjcmMzMmNfY29uZmlnIiBdCi0gIGlmIChjdXJyZW50X2NwdSA9PSAieDg2IiB8fCBj
dXJyZW50X2NwdSA9PSAieDY0IikgewotICAgIGlmIChpc193aW4gJiYgIWlzX2NsYW5nKSB7Ci0g
ICAgICBjZmxhZ3MgPSBbICIvYXJjaDpBVlgiIF0KLSAgICB9IGVsc2UgewotICAgICAgY2ZsYWdz
ID0gWyAiLW1zc2U0LjIiIF0KLSAgICB9Ci0gIH0KLQotICBkZXBzID0gWyAiOmNyYzMyY19pbnRl
cm5hbF9oZWFkZXJzIiBdCi19Ci0KLXNvdXJjZV9zZXQoImNyYzMyY19hcm02NCIpIHsKLSAgdmlz
aWJpbGl0eSA9IFsgIjoqIiBdCi0KLSAgc291cmNlcyA9IFsKLSAgICAic3JjL3NyYy9jcmMzMmNf
YXJtNjQuY2MiLAotICAgICJzcmMvc3JjL2NyYzMyY19hcm02NC5oIiwKLSAgICAic3JjL3NyYy9j
cmMzMmNfYXJtNjRfY2hlY2suaCIsCi0gIF0KLQotICBjb25maWdzICs9IFsgIjpjcmMzMmNfY29u
ZmlnIiBdCi0gIGlmIChjdXJyZW50X2NwdSA9PSAiYXJtNjQiKSB7Ci0gICAgaWYgKGlzX2NsYW5n
KSB7Ci0gICAgICBjZmxhZ3MgPSBbCi0gICAgICAgICItbWFyY2g9YXJtdjgtYSIsCi0KLSAgICAg
ICAgIyBTb21lIGJ1aWxkcyBzZXQgLW1hcmNoIHRvIGEgZGlmZmVyZW50IHZhbHVlIGZyb20gdGhl
IGFib3ZlLgotICAgICAgICAjIFRoZSBzcGVjaWZpYyBmZWF0dXJlIGZsYWdzIGJlbG93IGVuYWJs
ZSB0aGUgaW5zdHJ1Y3Rpb25zIHdlIG5lZWQKLSAgICAgICAgIyBpbiB0aGVzZSBjYXNlcy4gU2Vl
IGh0dHBzOi8vY3JidWcuY29tLzkzNDAxNiBmb3IgZXhhbXBsZS4KLSAgICAgICAgIi1YY2xhbmci
LAotICAgICAgICAiLXRhcmdldC1mZWF0dXJlIiwKLSAgICAgICAgIi1YY2xhbmciLAotICAgICAg
ICAiK2NyYyIsCi0gICAgICAgICItWGNsYW5nIiwKLSAgICAgICAgIi10YXJnZXQtZmVhdHVyZSIs
Ci0gICAgICAgICItWGNsYW5nIiwKLSAgICAgICAgIitjcnlwdG8iLAotICAgICAgXQotICAgIH0g
ZWxzZSB7Ci0gICAgICBjZmxhZ3MgPSBbICItbWFyY2g9YXJtdjgtYStjcmMrY3J5cHRvIiBdCi0g
ICAgfQotICB9Ci0KLSAgZGVwcyA9IFsgIjpjcmMzMmNfaW50ZXJuYWxfaGVhZGVycyIgXQotfQot
Ci1zb3VyY2Vfc2V0KCJjcmMzMmNfaW50ZXJuYWxfaGVhZGVycyIpIHsKLSAgc291cmNlcyA9IFsK
LSAgICAiY29uZmlnL2NyYzMyYy9jcmMzMmNfY29uZmlnLmgiLAotICAgICJzcmMvc3JjL2NyYzMy
Y19pbnRlcm5hbC5oIiwKLSAgICAic3JjL3NyYy9jcmMzMmNfcHJlZmV0Y2guaCIsCi0gICAgInNy
Yy9zcmMvY3JjMzJjX3JlYWRfbGUuaCIsCi0gICAgInNyYy9zcmMvY3JjMzJjX3JvdW5kX3VwLmgi
LAotICBdCi19Ci0KLXRlc3QoImNyYzMyY190ZXN0cyIpIHsKLSAgc291cmNlcyA9IFsKLSAgICAi
c3JjL3NyYy9jcmMzMmNfYXJtNjRfdW5pdHRlc3QuY2MiLAotICAgICJzcmMvc3JjL2NyYzMyY19l
eHRlbmRfdW5pdHRlc3RzLmgiLAotICAgICJzcmMvc3JjL2NyYzMyY19wb3J0YWJsZV91bml0dGVz
dC5jYyIsCi0gICAgInNyYy9zcmMvY3JjMzJjX3ByZWZldGNoX3VuaXR0ZXN0LmNjIiwKLSAgICAi
c3JjL3NyYy9jcmMzMmNfcmVhZF9sZV91bml0dGVzdC5jYyIsCi0gICAgInNyYy9zcmMvY3JjMzJj
X3JvdW5kX3VwX3VuaXR0ZXN0LmNjIiwKLSAgICAic3JjL3NyYy9jcmMzMmNfc3NlNDJfdW5pdHRl
c3QuY2MiLAotICAgICJzcmMvc3JjL2NyYzMyY191bml0dGVzdC5jYyIsCi0gIF0KLQotICBjb25m
aWdzICs9IFsgIjpjcmMzMmNfY29uZmlnIiBdCi0gIGRlcHMgPSBbCi0gICAgIjpjcmMzMmMiLAot
ICAgICI6Y3JjMzJjX2FybTY0IiwKLSAgICAiOmNyYzMyY19pbnRlcm5hbF9oZWFkZXJzIiwKLSAg
ICAiOmNyYzMyY19zc2U0MiIsCi0gICAgIi8vdGVzdGluZy9ndGVzdDpndGVzdF9tYWluIiwKLSAg
ICAiLy90aGlyZF9wYXJ0eS9nb29nbGV0ZXN0Omd0ZXN0IiwKLSAgXQotfQotCi1pZiAoZW5hYmxl
X2dvb2dsZV9iZW5jaG1hcmtzKSB7Ci0gIHRlc3QoImNyYzMyY19iZW5jaG1hcmsiKSB7Ci0gICAg
c291cmNlcyA9IFsgInNyYy9zcmMvY3JjMzJjX2JlbmNobWFyay5jYyIgXQotICAgIGNvbmZpZ3Mg
Kz0gWyAiOmNyYzMyY19jb25maWciIF0KLSAgICBkZXBzID0gWwotICAgICAgIjpjcmMzMmMiLAot
ICAgICAgIjpjcmMzMmNfYXJtNjQiLAotICAgICAgIjpjcmMzMmNfaW50ZXJuYWxfaGVhZGVycyIs
Ci0gICAgICAiOmNyYzMyY19zc2U0MiIsCi0gICAgICAiLy90aGlyZF9wYXJ0eS9nb29nbGVfYmVu
Y2htYXJrIiwKLSAgICBdCi0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvY3JjMzJjL0RJUl9NRVRBREFUQSBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvY3JjMzJjL0RJUl9NRVRBREFU
QQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFlNzhiYjQxZWUwLi4wMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9j
cmMzMmMvRElSX01FVEFEQVRBCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1tb25vcmFp
bCB7Ci0gIGNvbXBvbmVudDogIkludGVybmFscz5TdG9yYWdlIgotfQotdGVhbV9lbWFpbDogInN0
b3JhZ2UtZGV2QGNocm9taXVtLm9yZyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvY3JjMzJjL09XTkVSUyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvY3JjMzJjL09XTkVSUwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMWNkMWMxZGQ3MmYxLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9jcmMzMmMvT1dORVJT
CisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jIFByaW1hcnkgZm9yIGJ1Z3MsIHJldmll
d3M6Ci1hc3VsbHlAY2hyb21pdW0ub3JnCi0KLSMgU2Vjb25kYXJ5OgotYXl1aUBjaHJvbWl1bS5v
cmcKLWpzYmVsbEBjaHJvbWl1bS5vcmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvY3JjMzJjL1JFQURNRS5jaHJvbWl1bSBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvY3JjMzJjL1JFQURNRS5j
aHJvbWl1bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMxNzA0ZWVlNzdkLi4wMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9jcmMzMmMvUkVBRE1FLmNocm9taXVtCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBA
QAotTmFtZTogQ1JDMzJDCi1TaG9ydCBOYW1lOiBjcmMzMmMKLVVSTDogaHR0cHM6Ly9naXRodWIu
Y29tL2dvb2dsZS9jcmMzMmMKLVZlcnNpb246IDEuMC43LmdpdC01OTk4Zjg0NTE1NDgyNDRkZThj
ZGU3ZmFiMzg3YTU1MGU3YzQ0OTdkCi1MaWNlbnNlOiBOZXcgQlNECi1MaWNlbnNlIEZpbGU6IHNy
Yy9MSUNFTlNFCi1TZWN1cml0eSBDcml0aWNhbDogeWVzCi0KLURlc2NyaXB0aW9uOgotQ1JDMzJD
IGltcGxlbWVudGF0aW9uIHdpdGggc3VwcG9ydCBmb3IgQ1BVLXNwZWNpZmljIGFjY2VsZXJhdGlv
biBpbnN0cnVjdGlvbnMKLQotTG9jYWwgQWRkaXRpb25zOgotKiBnbiBmaWxlIGZvciBidWlsZGlu
ZyBpbiBjaHJvbWl1bQotKiBNYW51YWxseSBnZW5lcmF0ZWQgY29uZmlnL3thbmRyb2lkLG1hYyxs
aW51eCx3aW4zMix3aW42NH0vY3JjMzJjX2NvbmZpZy5oCi0gICogVXNlZCB0aGUgYnVpbGQgY29t
bWFuZHMgaW4gdGhlIFJFQURNRQotICAqIFBpY2tlZCB1cCB0aGUgb3V0cHV0IGluIGluY2x1ZGUv
Y3JjMzJjL2NyYzMyY19jb25maWcuaApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9jcmMzMmMvY29uZmlnL2NyYzMyYy9jcmMzMmNfY29u
ZmlnLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2Ny
YzMyYy9jb25maWcvY3JjMzJjL2NyYzMyY19jb25maWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMzU4OWZhNjc4YzYwLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9jcmMzMmMvY29uZmlnL2NyYzMyYy9jcmMz
MmNfY29uZmlnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLS8vIENvcHlyaWdodCAy
MDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotLy8gVGhpcyBpcyBhIHN0
dWIuIFRoZSBwcmVwcm9jZXNzb3IgbWFjcm9zIHRoYXQgYXJlIHVzdWFsbHkgZGVmaW5lZCBoZXJl
IGFyZQotLy8gc3VwcGxpZWQgYnkgQlVJTEQuZ24gaW5zdGVhZC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC8uZ2l0aWdu
b3JlIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40
YTM4MDEzOGRmNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDc3IEBA
CisjIE9iamVjdCBmaWxlcworKi5vCisqLmtvCisqLm9iagorKi5lbGYKKworIyBQcmVjb21waWxl
ZCBIZWFkZXJzCisqLmdjaAorKi5wY2gKKworIyBMaWJyYXJpZXMKKyoubGliCisqLmEKKyoubGEK
KyoubG8KKworIyBTaGFyZWQgb2JqZWN0cyAoaW5jLiBXaW5kb3dzIERMTHMpCisqLmRsbAorKi5z
bworKi5zby4qCisqLmR5bGliCisKKyMgRXhlY3V0YWJsZXMKKyouZXhlCisqLm91dAorKi5hcHAK
KyouaSo4NgorKi54ODZfNjQKKyouaGV4CisKKyMgRGVidWcgZmlsZXMKKyouZFNZTQorCisjIEF1
dG9tYWtlIGFuZCBtYWtlIHJlbGVhdGVkIHN0dWZmCitNYWtlZmlsZQorTWFrZWZpbGUuaW4KKy5k
ZXBzCisubGlicworL2F1dG9tNHRlLmNhY2hlCisvYWNsb2NhbC5tNAorL2NvbXBpbGUKKy9jb25m
aWd1cmUKKy9kZXBjb21wCisvaW5zdGFsbC1zaAorL21pc3NpbmcKKy9zdGFtcC1oMQorL2NvbmZp
Zy5ndWVzcworL2NvbmZpZy5sb2cKKy9jb25maWcuc3RhdHVzCisvY29uZmlnLnN1YgorL2xpYnRv
b2wKKy9sdG1haW4uc2gKKy9tNAorL3VzcnNjdHAucGMKKy5kaXJzdGFtcAorCisjIGJpbmFyaWVz
Citwcm9ncmFtcy9jbGllbnQKK3Byb2dyYW1zL2RheXRpbWVfc2VydmVyCitwcm9ncmFtcy9kaXNj
YXJkX3NlcnZlcgorcHJvZ3JhbXMvZWNob19zZXJ2ZXIKK3Byb2dyYW1zL2Vrcl9jbGllbnQKK3By
b2dyYW1zL2Vrcl9sb29wCitwcm9ncmFtcy9la3JfbG9vcF9vZmZsb2FkCitwcm9ncmFtcy9la3Jf
cGVlcgorcHJvZ3JhbXMvZWtyX3NlcnZlcgorcHJvZ3JhbXMvaHR0cF9jbGllbnQKK3Byb2dyYW1z
L3J0Y3dlYgorcHJvZ3JhbXMvdHNjdHAKK3Byb2dyYW1zL3Rlc3RfbGlibWdtdAorcHJvZ3JhbXMv
dGVzdF90aW1lcgorCisjIGNhbGxncmluZAorY2FsbGdyaW5kLm91dCoKKworIyBjbWFrZSBidWls
ZAorL2J1aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvQlVJTEQuZ24gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvQlVJTEQuZ24KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45MDYxOTRlZWMwYWEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvQlVJ
TEQuZ24KQEAgLTAsMCArMSwxODkgQEAKKyMgQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyMgZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKworaW1wb3J0KCIvL2J1aWxkL3Rvb2xjaGFpbi90b29sY2hhaW4u
Z25pIikKK2ltcG9ydCgiLy90ZXN0aW5nL2xpYmZ1enplci9mdXp6ZXJfdGVzdC5nbmkiKQorCitj
b25maWcoInVzcnNjdHBfcHVibGljX2NvbmZpZyIpIHsKKyAgaW5jbHVkZV9kaXJzID0gWworICAg
ICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0
aW5ldCIsCisgIF0KKworICAjIFRoaXMgaXMgcGFydCBvZiB0aGUgcHVibGljIGNvbmZpZyBiZWNh
dXNlIGl0J3MgdXNlZCBib3RoIGJ5IHVzcnNjdHAgYW5kCisgICMgdGhlIGNsaWVudCAoV2ViUlRD
KSwgdG8gZGV0ZXJtaW5lIGlmIHRoZSBsZW5ndGggZmllbGQgbmVlZHMgcG9wdWxhdGluZy4KKyAg
aWYgKGlzX21hYyB8fCBpc19pb3MgfHwgdGFyZ2V0X29zID09ICJmcmVlYnNkIikgeworICAgIGRl
ZmluZXMgPSBbICJIQVZFX1NDT05OX0xFTiIgXQorICB9Cit9CisKKyMgVXNlZCBieSBib3RoIHVz
cnNjdHAgc3RhdGljIGxpYnJhcnkgYW5kIGZ1enplcnMuCitjb25maWcoInVzcnNjdHBfaW50ZXJu
YWxfY29uZmlnIikgeworICBkZWZpbmVzID0gW10KKyAgaWYgKGlzX2xpbnV4IHx8IGlzX2Nocm9t
ZW9zIHx8IGlzX2FuZHJvaWQpIHsKKyAgICBkZWZpbmVzICs9IFsgIl9HTlVfU09VUkNFIiBdCisg
IH0gZWxzZSBpZiAoaXNfYXBwbGUpIHsKKyAgICBkZWZpbmVzICs9IFsgIl9fQVBQTEVfVVNFX1JG
Q18yMjkyIiBdCisgIH0KK30KKworY29uZmlnKCJ1c3JzY3RwX3dhcm5pbmdzIikgeworICBpZiAo
aXNfY2xhbmcpIHsKKyAgICBjZmxhZ3MgPSBbCisgICAgICAjIGF0b21pY19pbml0IGluIHVzZXJf
YXRvbWljLmggaXMgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYSBoZWFkZXIuCisgICAgICAiLVduby11
bnVzZWQtZnVuY3Rpb24iLAorCisgICAgICAjIFVzZSBvZiBkZXByZWNhdGVkIE9TQXRvbWljKiBm
dW5jdGlvbnMgaW4gdXNlcl9hdG9taWMuaC4gVGhpcyBpcworICAgICAgIyB3aGF0IHRoZXkgZGlk
IGluIGNvbmZpZ3VyZS5hYy4gV2UgY2FuIHJlbW92ZSB0aGlzIG9uY2UKKyAgICAgICMgaHR0cHM6
Ly9naXRodWIuY29tL3NjdHBsYWIvdXNyc2N0cC9pc3N1ZXMvMTc3IGlzIGZpeGVkLgorICAgICAg
Ii1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiLAorCisgICAgICAjIHVzcnNjdHAgdXNlcyB0
aW1pbmdzYWZlX2JjbXAgd2hpY2ggaXMgbm90IGF2YWlsYWJsZSBpbiBhbGwKKyAgICAgICMgdmVy
c2lvbnMgb2YgT1MgWCwgaG93ZXZlciB0aGlzIGlzbid0IGFjdHVhbGx5IGFuIGlzc3VlIHNpbmNl
CisgICAgICAjIHVzcnNjdHAgcHJvdmlkZXMgaXRzIG93biBpbXBsZW1lbnRhdGlvbi4KKyAgICAg
ICItV25vLXVuZ3VhcmRlZC1hdmFpbGFiaWxpdHkiLAorICAgIF0KKyAgfQorfQorCitzdGF0aWNf
bGlicmFyeSgidXNyc2N0cCIpIHsKKyAgc291cmNlcyA9IFsKKyAgICAidXNyc2N0cGxpYi91c3Jz
Y3RwbGliL25ldGluZXQvc2N0cC5oIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGlu
ZXQvc2N0cF9hc2NvbmYuYyIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfYXNjb25mLmgiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2F1
dGguYyIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYXV0aC5oIiwK
KyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9ic2RfYWRkci5jIiwKKyAg
ICAidXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9ic2RfYWRkci5oIiwKKyAgICAi
dXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jYWxsb3V0LmMiLAorICAgICJ1c3Jz
Y3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NhbGxvdXQuaCIsCisgICAgInVzcnNjdHBs
aWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY2NfZnVuY3Rpb25zLmMiLAorICAgICJ1c3JzY3Rw
bGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NvbnN0YW50cy5oIiwKKyAgICAidXNyc2N0cGxp
Yi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jcmMzMi5jIiwKKyAgICAidXNyc2N0cGxpYi91c3Jz
Y3RwbGliL25ldGluZXQvc2N0cF9jcmMzMi5oIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGli
L25ldGluZXQvc2N0cF9oZWFkZXIuaCIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRp
bmV0L3NjdHBfaW5kYXRhLmMiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9z
Y3RwX2luZGF0YS5oIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9p
bnB1dC5jIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9pbnB1dC5o
IiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9sb2NrX3VzZXJzcGFj
ZS5oIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vcy5oIiwKKyAg
ICAidXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vc191c2Vyc3BhY2UuaCIsCisg
ICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3V0cHV0LmMiLAorICAgICJ1
c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX291dHB1dC5oIiwKKyAgICAidXNyc2N0
cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wY2IuYyIsCisgICAgInVzcnNjdHBsaWIvdXNy
c2N0cGxpYi9uZXRpbmV0L3NjdHBfcGNiLmgiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIv
bmV0aW5ldC9zY3RwX3BlZWxvZmYuYyIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRp
bmV0L3NjdHBfcGVlbG9mZi5oIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQv
c2N0cF9wcm9jZXNzX2xvY2suaCIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfc2hhMS5jIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9z
aGExLmgiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NzX2Z1bmN0
aW9ucy5jIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9zdHJ1Y3Rz
LmgiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3N5c2N0bC5jIiwK
KyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9zeXNjdGwuaCIsCisgICAg
InVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdGltZXIuYyIsCisgICAgInVzcnNj
dHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdGltZXIuaCIsCisgICAgInVzcnNjdHBsaWIv
dXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdWlvLmgiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBs
aWIvbmV0aW5ldC9zY3RwX3VzZXJzcGFjZS5jIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGli
L25ldGluZXQvc2N0cF91c3JyZXEuYyIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRp
bmV0L3NjdHBfdmFyLmgiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3Rw
dXRpbC5jIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cHV0aWwuaCIs
CisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0Ni9zY3RwNl91c3JyZXEuYyIsCisg
ICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0Ni9zY3RwNl92YXIuaCIsCisgICAgInVz
cnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2F0b21pYy5oIiwKKyAgICAidXNyc2N0cGxpYi91c3Jz
Y3RwbGliL3VzZXJfZW52aXJvbm1lbnQuYyIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi91
c2VyX2Vudmlyb25tZW50LmgiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9pbnBj
Yi5oIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfaXA2X3Zhci5oIiwKKyAgICAi
dXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfaXBfaWNtcC5oIiwKKyAgICAidXNyc2N0cGxpYi91
c3JzY3RwbGliL3VzZXJfbWFsbG9jLmgiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNl
cl9tYnVmLmMiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9tYnVmLmgiLAorICAg
ICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9xdWV1ZS5oIiwKKyAgICAidXNyc2N0cGxpYi91
c3JzY3RwbGliL3VzZXJfcmVjdl90aHJlYWQuYyIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxp
Yi91c2VyX3JlY3ZfdGhyZWFkLmgiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9y
b3V0ZS5oIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfc29ja2V0LmMiLAorICAg
ICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9zb2NrZXR2YXIuaCIsCisgICAgInVzcnNjdHBs
aWIvdXNyc2N0cGxpYi91c2VyX3VtYS5oIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL3Vz
cnNjdHAuaCIsCisgIF0KKworICBkZWZpbmVzID0gWworICAgICJTQ1RQX1BST0NFU1NfTEVWRUxf
TE9DS1MiLAorICAgICJTQ1RQX1NJTVBMRV9BTExPQ0FUT1IiLAorICAgICJTQ1RQX1VTRV9PUEVO
U1NMX1NIQTEiLAorICAgICJTQ1RQX1VTRV9PUEVOU1NMX1JBTkQiLAorICAgICJfX1VzZXJzcGFj
ZV9fIiwKKworICAgICMgIlNDVFBfREVCVUciLCAjIFVuY29tbWVudCBmb3IgU0NUUCBkZWJ1Z2dp
bmcuCisgIF0KKworICBjb25maWdzIC09IFsgIi8vYnVpbGQvY29uZmlnL2NvbXBpbGVyOmNocm9t
aXVtX2NvZGUiIF0KKyAgY29uZmlncyArPSBbCisgICAgIi8vYnVpbGQvY29uZmlnL2NvbXBpbGVy
Om5vX2Nocm9taXVtX2NvZGUiLAorCisgICAgIyBUaGVzZSBtdXN0IGJlIGFmdGVyIG5vX2Nocm9t
aXVtX2NvZGUgZm9yIHdhcm5pbmcgZmxhZ3MgdG8gYmUgb3JkZXJlZAorICAgICMgY29ycmVjdGx5
LgorICAgICIvL2J1aWxkL2NvbmZpZy9jb21waWxlcjpub19pbmNvbXBhdGlibGVfcG9pbnRlcl93
YXJuaW5ncyIsCisgICAgIjp1c3JzY3RwX3dhcm5pbmdzIiwKKyAgICAiOnVzcnNjdHBfaW50ZXJu
YWxfY29uZmlnIiwKKyAgXQorCisgIHB1YmxpY19jb25maWdzID0gWyAiOnVzcnNjdHBfcHVibGlj
X2NvbmZpZyIgXQorCisgIGNmbGFncyA9IFsKKyAgICAiLVVJTkVUIiwKKyAgICAiLVVJTkVUNiIs
CisgIF0KKworICBpZiAodXNlX2Z1enppbmdfZW5naW5lKSB7CisgICAgZGVmaW5lcyArPSBbICJJ
TlZBUklBTlRTIiBdCisgIH0KKyAgZGVwcyA9IFsgIi8vdGhpcmRfcGFydHkvYm9yaW5nc3NsIiBd
Cit9CisKK2Z1enplcl90ZXN0KCJ1c3JzY3RwX2Z1enplcl9saXN0ZW4iKSB7CisgIHNvdXJjZXMg
PSBbCisgICAgInVzcnNjdHBsaWIvZnV6emVyL2Z1enplcl9saXN0ZW4uYyIsCisgICAgInVzcnNj
dHBsaWIvcHJvZ3JhbXMvcHJvZ3JhbXNfaGVscGVyLmMiLAorICBdCisgIGFkZGl0aW9uYWxfY29u
ZmlncyA9IFsgIjp1c3JzY3RwX2ludGVybmFsX2NvbmZpZyIgXQorICBkZXBzID0gWyAiOnVzcnNj
dHAiIF0KKyAgc2VlZF9jb3JwdXMgPSAidXNyc2N0cGxpYi9mdXp6ZXIvQ09SUFVTX0xJU1RFTiIK
KyAgbGliZnV6emVyX29wdGlvbnMgPSBbICJtYXhfbGVuPTQwODYiIF0KK30KKworZnV6emVyX3Rl
c3QoInVzcnNjdHBfZnV6emVyX2ZyYWdtZW50IikgeworICBzb3VyY2VzID0gWworICAgICJ1c3Jz
Y3RwbGliL2Z1enplci9mdXp6ZXJfZnJhZ21lbnQuYyIsCisgICAgInVzcnNjdHBsaWIvcHJvZ3Jh
bXMvcHJvZ3JhbXNfaGVscGVyLmMiLAorICBdCisgIGFkZGl0aW9uYWxfY29uZmlncyA9IFsgIjp1
c3JzY3RwX2ludGVybmFsX2NvbmZpZyIgXQorICBkZXBzID0gWyAiOnVzcnNjdHAiIF0KKyAgc2Vl
ZF9jb3JwdXMgPSAidXNyc2N0cGxpYi9mdXp6ZXIvQ09SUFVTX0ZSQUdNRU5UIgorICBsaWJmdXp6
ZXJfb3B0aW9ucyA9IFsgIm1heF9sZW49NDA4NiIgXQorfQorCitmdXp6ZXJfdGVzdCgidXNyc2N0
cF9mdXp6ZXJfY29ubmVjdF9tdWx0aSIpIHsKKyAgc291cmNlcyA9IFsKKyAgICAidXNyc2N0cGxp
Yi9mdXp6ZXIvZnV6emVyX2Nvbm5lY3QuYyIsCisgICAgInVzcnNjdHBsaWIvcHJvZ3JhbXMvcHJv
Z3JhbXNfaGVscGVyLmMiLAorICBdCisKKyAgYWRkaXRpb25hbF9jb25maWdzID0gWyAiOnVzcnNj
dHBfaW50ZXJuYWxfY29uZmlnIiBdCisKKyAgIyBTZWUgdXNyc2N0cGxpYi9mdXp6ZXIvQ01ha2VM
aXN0cy50eHQuCisgICMgU3RhZ2UgMCBpcyAibXVsdGkiLCB3aGljaCBjYW4gc3RhcnQgZnV6emlu
ZyBhdCBkaWZmZXJlbnQgcG9pbnRzIGR1cmluZyB0aGUKKyAgIyBoYW5kc2hha2UgYmFzZWQgb24g
dGhlIGZpcnN0IGZ1enplZCBieXRlLiBUaGVyZSB3ZXJlIHBsYW5zIHRvIGhhdmUgZGVkaWNhdGVk
CisgICMgZnV6emVycyBmb3IgdmFyaW91cyBzdGFnZXMsIGJ1dCB0aGlzIGlkZWEgd2FzIGFiYW5k
b25lZCB3aGF0IHdhcyBmb3VuZCB0aGF0CisgICMgdGhlICJtdWx0aSIgZnV6emVyIHBlcmZvcm1l
ZCBqdXN0IGFzIHdlbGwuCisgIGRlZmluZXMgPSBbICJGVVpaSU5HX1NUQUdFPTAiIF0KKworICBk
ZXBzID0gWyAiOnVzcnNjdHAiIF0KKyAgc2VlZF9jb3JwdXMgPSAidXNyc2N0cGxpYi9mdXp6ZXIv
Q09SUFVTX0NPTk5FQ1QiCisgIGxpYmZ1enplcl9vcHRpb25zID0gWyAibWF4X2xlbj0zMjAwMCIg
XQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL0RJUl9NRVRBREFUQSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9ESVJfTUVUQURBVEEKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kZjBhMmQwMTgxMTYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
RElSX01FVEFEQVRBCkBAIC0wLDAgKzEsMyBAQAorbW9ub3JhaWw6IHsKKyAgY29tcG9uZW50OiAi
Qmxpbms+V2ViUlRDPk5ldHdvcmsiCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvTElDRU5TRSBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9MSUNFTlNFCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZjYxNGJlOWUyMmNjCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL0xJQ0VOU0UKQEAgLTAsMCArMSwzMCBAQAorKENvcGllZCBmcm9tIHRoZSBDT1BZ
UklHSFQgZmlsZSBvZgoraHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9zY3RwLXJlZmltcGwvc291
cmNlL2Jyb3dzZS90cnVuay9DT1BZUklHSFQpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitD
b3B5cmlnaHQgKGMpIDIwMDEsIDIwMDIgQ2lzY28gU3lzdGVtcywgSW5jLgorQ29weXJpZ2h0IChj
KSAyMDAyLTEyIFJhbmRhbGwgUi4gU3Rld2FydAorQ29weXJpZ2h0IChjKSAyMDAyLTEyIE1pY2hh
ZWwgVHVleGVuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
YXJlIG1ldDoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRI
T1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1Ig
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9PV05FUlMgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvT1dORVJTCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMGUzNDk3MDg5OWZmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL09XTkVSUwpAQCAtMCwwICsxLDIgQEAKK2h0YUBjaHJvbWl1bS5vcmcKK29ycGhp
c0BjaHJvbWl1bS5vcmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9SRUFETUUuY2hyb21pdW0gYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvUkVBRE1FLmNocm9taXVt
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjRjYTQzYzA5MmE1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL1JFQURNRS5jaHJvbWl1bQpAQCAtMCwwICsxLDIxIEBACitOYW1lOiB1
c3JzY3RwCitVUkw6IGh0dHA6Ly9naXRodWIuY29tL3NjdHBsYWIvdXNyc2N0cAorVmVyc2lvbjog
MAorQ1BFUHJlZml4OiBjcGU6L2E6dXNyc2N0cF9wcm9qZWN0OnVzcnNjdHA6MjAxOS0xMi0yMAor
RGF0ZTogTWF5IDEwLCAyMDIxCitSZXZpc2lvbjogYWNmY2U0NmU0MjhjYzA4NGI0YmQwMTY0ZTFi
MDE5MjYxYThkYmVkYQorTGljZW5zZTogTmV3IEJTRAorTGljZW5zZSBGaWxlOiBMSUNFTlNFCitT
ZWN1cml0eSBDcml0aWNhbDogeWVzCisKK0Rlc2NyaXB0aW9uOgorVGhlIHVzcnNjdHBsaWIgcHJv
dmlkZXMgaW1wbGVtZW50YXRpb24gb2YgU0NUUCBwcm90b2NvbCB3aGljaCBmdWxseSBzdXBwb3J0
cworUkZDIDI5NjAKK2FzIHdlbGwgYXMgdXBkYXRlcyBhbmQgZW5oYW5jZW1lbnRzIGZyb20gdGhl
IGZvbGxvd2luZyBJbnRlcm5ldCBEcmFmdHM6CisgICBkcmFmdC1pZXRmLXRzdndnLXNjdHBjc3Vt
LTA1LnR4dAorICAgZHJhZnQtaWV0Zi10c3Z3Zy1zY3RwaW1wZ3VpZGUtMDUudHh0CisgICBkcmFm
dC1pZXRmLXRzdndnLXNjdHBzb2NrZXQtMDQudHh0CisgICBkcmFmdC1pZXRmLXRzdndnLWFkZGlw
LXNjdHAtMDUudHh0CisgICBkcmFmdC1zdGV3YXJ0LXByc2N0cC0wMC50eHQKKyAgIGRyYWZ0LXN0
ZXdhcnQtdHN2d2ctc2N0cGlwdjYtMDAudHh0CisgICBkcmFmdC1peWVuZ2FyLXNjdHAtY2FjYy0w
MC50eHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliLy5naXRhdHRyaWJ1dGVzIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvLmdp
dGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yZGRm
MTg5N2U4NGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi8uZ2l0YXR0cmlidXRlcwpAQCAt
MCwwICsxIEBACitwcm9ncmFtcyBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJzPW9uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi8uZ2l0aWdub3JlIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvLmdpdGlnbm9yZQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjllMmQxYTJhMzcxZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliLy5naXRpZ25vcmUKQEAgLTAsMCArMSw4NCBAQAorIyBPYmplY3QgZmls
ZXMKKyoubworKi5rbworKi5vYmoKKyouZWxmCisKKyMgUHJlY29tcGlsZWQgSGVhZGVycworKi5n
Y2gKKyoucGNoCisKKyMgTGlicmFyaWVzCisqLmxpYgorKi5hCisqLmxhCisqLmxvCisKKyMgU2hh
cmVkIG9iamVjdHMgKGluYy4gV2luZG93cyBETExzKQorKi5kbGwKKyouc28KKyouc28uKgorKi5k
eWxpYgorCisjIEV4ZWN1dGFibGVzCisqLmV4ZQorKi5vdXQKKyouYXBwCisqLmkqODYKKyoueDg2
XzY0CisqLmhleAorCisjIERlYnVnIGZpbGVzCisqLmRTWU0KKworIyBBdXRvbWFrZSBhbmQgbWFr
ZSByZWxlYXRlZCBzdHVmZgorTWFrZWZpbGUKK01ha2VmaWxlLmluCisuZGVwcworLmxpYnMKKy9h
dXRvbTR0ZS5jYWNoZQorL2FjbG9jYWwubTQKKy9jb21waWxlCisvY29uZmlndXJlCisvZGVwY29t
cAorL2luc3RhbGwtc2gKKy9taXNzaW5nCisvc3RhbXAtaDEKKy9jb25maWcuZ3Vlc3MKKy9jb25m
aWcubG9nCisvY29uZmlnLnN0YXR1cworL2NvbmZpZy5zdWIKKy9saWJ0b29sCisvbHRtYWluLnNo
CisvbTQKKy91c3JzY3RwLnBjCisuZGlyc3RhbXAKKworIyBiaW5hcmllcworcHJvZ3JhbXMvY2hh
cmdlbl9zZXJ2ZXJfdXBjYWxsCitwcm9ncmFtcy9jbGllbnQKK3Byb2dyYW1zL2NsaWVudF91cGNh
bGwKK3Byb2dyYW1zL2RheXRpbWVfc2VydmVyCitwcm9ncmFtcy9kYXl0aW1lX3NlcnZlcl91cGNh
bGwKK3Byb2dyYW1zL2Rpc2NhcmRfc2VydmVyCitwcm9ncmFtcy9kaXNjYXJkX3NlcnZlcl91cGNh
bGwKK3Byb2dyYW1zL2VjaG9fc2VydmVyCitwcm9ncmFtcy9lY2hvX3NlcnZlcl91cGNhbGwKK3By
b2dyYW1zL2Vrcl9jbGllbnQKK3Byb2dyYW1zL2Vrcl9sb29wCitwcm9ncmFtcy9la3JfbG9vcF91
cGNhbGwKK3Byb2dyYW1zL2Vrcl9wZWVyCitwcm9ncmFtcy9la3Jfc2VydmVyCitwcm9ncmFtcy9o
dHRwX2NsaWVudAorcHJvZ3JhbXMvaHR0cF9jbGllbnRfdXBjYWxsCitwcm9ncmFtcy9ydGN3ZWIK
K3Byb2dyYW1zL3N0X2NsaWVudAorcHJvZ3JhbXMvdHNjdHAKK3Byb2dyYW1zL3Rlc3RfbGlibWdt
dAorcHJvZ3JhbXMvdGVzdF90aW1lcgorCisjIGNhbGxncmluZAorY2FsbGdyaW5kLm91dCoKKwor
IyBjbWFrZSBidWlsZAorL2J1aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9DTWFrZUxpc3RzLnR4
dCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMC4uNWUzMzE5NTQyNTEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvQ01h
a2VMaXN0cy50eHQKQEAgLTAsMCArMSwyNzkgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTUgT2xlZyBBbGV4ZWVua292CisjIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEZlbGl4IFdlaW5y
YW5rCisjCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
dGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisjICAgIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz
b2Z0d2FyZQorIyAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
CisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFCisjIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
CisjIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKQorIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorIyBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
CisjIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YKKyMgU1VDSCBEQU1BR0UuCisjCisKK3Byb2plY3QodXNyc2N0cGxp
YiBDKQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMCkKKworIyBEZWJ1ZyBidWls
ZCB0eXBlIGFzIGRlZmF1bHQKK2lmIChOT1QgQ01BS0VfQlVJTERfVFlQRSkKKwltZXNzYWdlKFNU
QVRVUyAiTm8gYnVpbGQgdHlwZSBzZWxlY3RlZCwgdXNpbmcgREVCVUciKQorCXNldChDTUFLRV9C
VUlMRF9UWVBFICJERUJVRyIpCitlbmRpZiAoKQorCitsaXN0KEFQUEVORCBDTUFLRV9NT0RVTEVf
UEFUSCAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vY21ha2UpCisKK2luY2x1ZGUoQ2hlY2tT
dHJ1Y3RIYXNNZW1iZXIpCitpbmNsdWRlKENoZWNrSW5jbHVkZUZpbGUpCitpbmNsdWRlKENoZWNr
SW5jbHVkZUZpbGVzKQoraW5jbHVkZShDaGVja0NDb21waWxlckZsYWcpCisKKyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ0hFQ0sgT1BUSU9OUwor
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitvcHRp
b24oc2N0cF9pbnZhcmlhbnRzICJBZGQgcnVudGltZSBjaGVja3MiIDApCitpZiAoc2N0cF9pbnZh
cmlhbnRzKQorCWFkZF9kZWZpbml0aW9ucygtRElOVkFSSUFOVFMpCitlbmRpZiAoKQorCitvcHRp
b24oc2N0cF9kZWJ1ZyAiUHJvdmlkZSBkZWJ1ZyBpbmZvcm1hdGlvbiIgMSkKK2lmIChzY3RwX2Rl
YnVnKQorCWFkZF9kZWZpbml0aW9ucygtRFNDVFBfREVCVUcpCitlbmRpZiAoKQorCitvcHRpb24o
c2N0cF9pbmV0ICJTdXBwb3J0IElQdjQiIDEpCitpZiAoc2N0cF9pbmV0KQorCWFkZF9kZWZpbml0
aW9ucygtRElORVQpCitlbmRpZiAoKQorCitvcHRpb24oc2N0cF9pbmV0NiAiU3VwcG9ydCBJUHY2
IiAxKQoraWYgKHNjdHBfaW5ldDYpCisJYWRkX2RlZmluaXRpb25zKC1ESU5FVDYpCitlbmRpZiAo
KQorCitvcHRpb24oc2N0cF93ZXJyb3IgIlRyZWF0IHdhcm5pbmcgYXMgZXJyb3IiIDEpCisKK29w
dGlvbihzY3RwX2J1aWxkX3NoYXJlZF9saWIgIkJ1aWxkIFVTUlNDVFAgYXMgc2hhcmVkIGxpYnJh
cnkiIDApCisKK29wdGlvbihzY3RwX2J1aWxkX3Byb2dyYW1zICJCdWlsZCBleGFtcGxlIHByb2dy
YW1zIiAxKQorCitvcHRpb24oc2N0cF9zYW5pdGl6ZXJfYWRkcmVzcyAiQ29tcGlsZSB3aXRoIGFk
ZHJlc3Mgc2FuaXRpemVyIiAwKQorCitvcHRpb24oc2N0cF9zYW5pdGl6ZXJfbWVtb3J5ICJDb21w
aWxlIHdpdGggbWVtb3J5IHNhbml0aXplciIgMCkKKworb3B0aW9uKHNjdHBfYnVpbGRfZnV6emVy
ICJDb21waWxlIGluIGNsYW5nIGZ1enppbmcgbW9kZSIgMCkKKworaWYgKHNjdHBfc2FuaXRpemVy
X2FkZHJlc3MgQU5EIHNjdHBfc2FuaXRpemVyX21lbW9yeSkKKwltZXNzYWdlKEZBVEFMX0VSUk9S
ICJDYW4gbm90IGNvbXBpbGUgd2l0aCBib3RoIHNhbml0aXplciBvcHRpb25zIikKK2VuZGlmICgp
CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor
IyBDSEVDSyBGT1IgVFlQRVMgQU5EIEZVTkNUSU9OUworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjaGVja19pbmNsdWRlX2ZpbGVzKCJzeXMvcXVl
dWUuaCIgaGF2ZV9zeXNfcXVldWVfaCkKK2lmIChoYXZlX3N5c19xdWV1ZV9oKQorCWFkZF9kZWZp
bml0aW9ucygtREhBVkVfU1lTX1FVRVVFX0gpCitlbmRpZiAoKQorCitjaGVja19pbmNsdWRlX2Zp
bGVzKCJzeXMvc29ja2V0Lmg7bGludXgvaWZfYWRkci5oIiBoYXZlX2xpbnV4X2lmX2FkZHJfaCkK
K2lmIChoYXZlX2xpbnV4X2lmX2FkZHJfaCkKKwlhZGRfZGVmaW5pdGlvbnMoLURIQVZFX0xJTlVY
X0lGX0FERFJfSCkKK2VuZGlmICgpCisKK2NoZWNrX2luY2x1ZGVfZmlsZXMoInN5cy9zb2NrZXQu
aDtsaW51eC9ydG5ldGxpbmsuaCIgaGF2ZV9saW51eF9ydG5ldGxpbmtfaCkKK2lmIChoYXZlX2xp
bnV4X3J0bmV0bGlua19oKQorCWFkZF9kZWZpbml0aW9ucygtREhBVkVfTElOVVhfUlRORVRMSU5L
X0gpCitlbmRpZiAoKQorCitjaGVja19pbmNsdWRlX2ZpbGVzKCJzeXMvdHlwZXMuaDtuZXRpbmV0
L2luLmg7bmV0aW5ldC9pcC5oO25ldGluZXQvaXBfaWNtcC5oIiBoYXZlX25ldGluZXRfaXBfaWNt
cF9oKQoraWYgKGhhdmVfbmV0aW5ldF9pcF9pY21wX2gpCisJYWRkX2RlZmluaXRpb25zKC1ESEFW
RV9ORVRJTkVUX0lQX0lDTVBfSCkKK2VuZGlmICgpCisKK2NoZWNrX2luY2x1ZGVfZmlsZXMoInN0
ZGF0b21pYy5oIiBoYXZlX3N0ZGF0b21pY19oKQoraWYgKGhhdmVfc3RkYXRvbWljX2gpCisJYWRk
X2RlZmluaXRpb25zKC1ESEFWRV9TVERBVE9NSUNfSCkKK2VuZGlmICgpCisKKworIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDSEVDSyBTVFJVQ1Qg
TUVNQkVSUworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IworCitzZXQoQ01BS0VfUkVRVUlSRURfSU5DTFVERVMgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0Vf
RElSfS91c3JzY3RwbGliIikKKworY2hlY2tfaW5jbHVkZV9maWxlKHVzcnNjdHAuaCBoYXZlX3Vz
cnNjdHBfaCkKK2lmIChOT1QgaGF2ZV91c3JzY3RwX2gpCisJbWVzc2FnZShGQVRBTF9FUlJPUiAi
dXNyc2N0cC5oIG5vdCBmb3VuZCIpCitlbmRpZiAoKQorCitjaGVja19zdHJ1Y3RfaGFzX21lbWJl
cigic3RydWN0IHNvY2thZGRyIiAic2FfbGVuIiAic3lzL3R5cGVzLmg7c3lzL3NvY2tldC5oIiBo
YXZlX3NhX2xlbikKK2lmIChoYXZlX3NhX2xlbikKKwltZXNzYWdlKFNUQVRVUyAiaGF2ZV9zYV9s
ZW4iKQorCWFkZF9kZWZpbml0aW9ucygtREhBVkVfU0FfTEVOKQorZW5kaWYgKCkKKworY2hlY2tf
c3RydWN0X2hhc19tZW1iZXIoInN0cnVjdCBzb2NrYWRkcl9pbiIgInNpbl9sZW4iICJzeXMvdHlw
ZXMuaDtuZXRpbmV0L2luLmgiIGhhdmVfc2luX2xlbikKK2lmIChoYXZlX3Npbl9sZW4pCisJbWVz
c2FnZShTVEFUVVMgImhhdmVfc2luX2xlbiIpCisJYWRkX2RlZmluaXRpb25zKC1ESEFWRV9TSU5f
TEVOKQorZW5kaWYgKCkKKworY2hlY2tfc3RydWN0X2hhc19tZW1iZXIoInN0cnVjdCBzb2NrYWRk
cl9pbjYiICJzaW42X2xlbiIgInN5cy90eXBlcy5oO25ldGluZXQvaW4uaCIgaGF2ZV9zaW42X2xl
bikKK2lmIChoYXZlX3NpbjZfbGVuKQorCW1lc3NhZ2UoU1RBVFVTICJoYXZlX3NpbjZfbGVuIikK
KwlhZGRfZGVmaW5pdGlvbnMoLURIQVZFX1NJTjZfTEVOKQorZW5kaWYgKCkKKworY2hlY2tfc3Ry
dWN0X2hhc19tZW1iZXIoInN0cnVjdCBzb2NrYWRkcl9jb25uIiAic2Nvbm5fbGVuIiAidXNyc2N0
cC5oIiBoYXZlX3Njb25uX2xlbikKK2lmIChoYXZlX3Njb25uX2xlbikKKwltZXNzYWdlKFNUQVRV
UyAiSEFWRV9TQ09OTl9MRU4iKQorCWFkZF9kZWZpbml0aW9ucygtREhBVkVfU0NPTk5fTEVOKQor
ZW5kaWYgKCkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjCisjIENPTVBJTEVSIFNFVFRJTkdTCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgRGV0ZXJtaW5lIGlmIGNvbXBpbGVyIGlzIFZpc3Vh
bCBTdHVkaW8gY29tcGlsZXIgb3IgQ2xhbmcgaW4gTVNWQyBjb21wYXRpYmxlIG1vZGUKK2lmIChD
TUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMgIk1TVkMiIE9SIENNQUtFX0NfU0lNVUxBVEVfSUQg
TUFUQ0hFUyAiTVNWQyIpCisgIHNldChDX0NPTVBJTEVSX0lTX01TVkNfTElLRSBUUlVFKQorZW5k
aWYoKQorCisjIFNFVFRJTkdTIEZPUiBWSVNVQUwgU1RVRElPIENPTVBJTEVSCitpZiAoQ19DT01Q
SUxFUl9JU19NU1ZDX0xJS0UpCisJaWYgKENNQUtFX0NfRkxBR1MgTUFUQ0hFUyAiL1dbMC00XSIp
CisJCXN0cmluZyhSRUdFWCBSRVBMQUNFICIvV1swLTRdIiAiL1c0IiBDTUFLRV9DX0ZMQUdTICIk
e0NNQUtFX0NfRkxBR1N9IikKKwllbHNlICgpCisJCXNldChDTUFLRV9DX0ZMQUdTICIke0NNQUtF
X0NfRkxBR1N9IC9XNCIpCisJZW5kaWYgKCkKKworCXNldChDTUFLRV9DX0ZMQUdTICIke0NNQUtF
X0NfRkxBR1N9IC93ZDQxMDAiKSAjICdpZGVudGlmaWVyJyA6IHVucmVmZXJlbmNlZCBmb3JtYWwg
cGFyYW1ldGVyCisJc2V0KENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gL3dkNDEyNyIp
ICMgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBpcyBjb25zdGFudAorCXNldChDTUFLRV9DX0ZMQUdT
ICIke0NNQUtFX0NfRkxBR1N9IC93ZDQyMDAiKSAjIG5vbnN0YW5kYXJkIGV4dGVuc2lvbiB1c2Vk
IDogemVyby1zaXplZCBhcnJheSBpbiBzdHJ1Y3QvdW5pb24KKwlzZXQoQ01BS0VfQ19GTEFHUyAi
JHtDTUFLRV9DX0ZMQUdTfSAvd2Q0MjE0IikgIyBiaXQgZmllbGQgdHlwZXMgb3RoZXIgdGhhbiBp
bnQKKwlzZXQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAvd2Q0NzA2IikgIyBhc3Np
Z25tZW50IHdpdGhpbiBjb25kaXRpb25hbCBleHByZXNzaW9uCisJc2V0KENNQUtFX0NfRkxBR1Mg
IiR7Q01BS0VfQ19GTEFHU30gL3dkNDI0NSIpICMgJ2NvbnZlcnNpb24nIDogY29udmVyc2lvbiBm
cm9tICd0eXBlMScgdG8gJ3R5cGUyJywgc2lnbmVkL3Vuc2lnbmVkIG1pc21hdGNoCisJc2V0KENN
QUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gL3dkNDM4OSIpICMgJ29wZXJhdG9yJyA6IHNp
Z25lZC91bnNpZ25lZCBtaXNtYXRjaAorCXNldChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxB
R1N9IC93ZDQ3MDIiKSAjIHVucmVhY2hhYmxlIGNvZGUKKwlzZXQoQ01BS0VfQ19GTEFHUyAiJHtD
TUFLRV9DX0ZMQUdTfSAvd2Q0NzAxIikgIyBQb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGxvY2Fs
IHZhcmlhYmxlICduYW1lJyB1c2VkCisKKwkjIFRvRG8KKwlzZXQoQ01BS0VfQ19GTEFHUyAiJHtD
TUFLRV9DX0ZMQUdTfSAvd2Q0MjQ0IikgIyAnY29udmVyc2lvbicgY29udmVyc2lvbiBmcm9tICd0
eXBlMScgdG8gJ3R5cGUyJywgcG9zc2libGUgbG9zcyBvZiBkYXRhCisKKwlpZiAoc2N0cF93ZXJy
b3IpCisJCXNldChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC9XWCIpCisKKwkJaWYg
KENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiQ2xhbmciKQorCQkJIyB0ZW1wb3JhcnkgZGlz
YWJsZSBleHRhIGNsYW5nIHdhcm5pbmdzIHByZXZlbnRpbmcgY29tcGlsYXRpb24KKwkJCXNldChD
TUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC9jbGFuZzotV25vLXVudXNlZC1mdW5jdGlv
biIpCisJCQlzZXQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAvY2xhbmc6LVduby1t
aXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyIpCisJCQlzZXQoQ01BS0VfQ19GTEFHUyAiJHtDTUFL
RV9DX0ZMQUdTfSAvY2xhbmc6LVduby1zaWduLWNvbXBhcmUiKQorCQkJc2V0KENNQUtFX0NfRkxB
R1MgIiR7Q01BS0VfQ19GTEFHU30gL2NsYW5nOi1Xbm8tZm9ybWF0IikKKwkJZW5kaWYoKQorCWVu
ZGlmICgpCisjIFNFVFRJTkdTIEZPUiBVTklYIENPTVBJTEVSCitlbHNlaWYgKENNQUtFX0NfQ09N
UElMRVJfSUQgTUFUQ0hFUyAiQ2xhbmciIE9SIENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAi
QXBwbGVDbGFuZyIgT1IgQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJHTlUiKQorCXNldChD
TUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC1zdGQ9Yzk5IC1wZWRhbnRpYyAtV2FsbCAt
V2V4dHJhIikKKworCWNoZWNrX2NfY29tcGlsZXJfZmxhZygtV2Zsb2F0LWVxdWFsIGhhc193Zmxv
YXRfZXF1YWwpCisJaWYgKGhhc193ZmxvYXRfZXF1YWwpCisJCXNldChDTUFLRV9DX0ZMQUdTICAi
JHtDTUFLRV9DX0ZMQUdTfSAtV2Zsb2F0LWVxdWFsIikKKwllbmRpZiAoKQorCisJY2hlY2tfY19j
b21waWxlcl9mbGFnKC1Xc2hhZG93IGhhc193c2hhZG93KQorCWlmIChoYXNfd3NoYWRvdykKKwkJ
c2V0KENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gLVdzaGFkb3ciKQorCWVuZGlmICgp
CisKKwljaGVja19jX2NvbXBpbGVyX2ZsYWcoLVdwb2ludGVyLWFyaXRoIGhhc193cG9pbnRlcl9h
cml0aWgpCisJaWYgKGhhc193cG9pbnRlcl9hcml0aWgpCisJCXNldChDTUFLRV9DX0ZMQUdTICIk
e0NNQUtFX0NfRkxBR1N9IC1XcG9pbnRlci1hcml0aCIpCisJZW5kaWYgKCkKKworCWNoZWNrX2Nf
Y29tcGlsZXJfZmxhZygtV3VucmVhY2hhYmxlLWNvZGUgaGFzX3d1bnJlYWNoYWJsZV9jb2RlKQor
CWlmIChoYXNfd3VucmVhY2hhYmxlX2NvZGUpCisJCXNldChDTUFLRV9DX0ZMQUdTICIke0NNQUtF
X0NfRkxBR1N9IC1XdW5yZWFjaGFibGUtY29kZSIpCisJZW5kaWYgKCkKKworCWNoZWNrX2NfY29t
cGlsZXJfZmxhZygtV2luaXQtc2VsZiBoYXNfd2luaXRfc2VsZikKKwlpZiAoaGFzX3dpbml0X3Nl
bGYpCisJCXNldChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC1XaW5pdC1zZWxmIikK
KwllbmRpZiAoKQorCisJY2hlY2tfY19jb21waWxlcl9mbGFnKC1Xbm8tdW51c2VkLWZ1bmN0aW9u
IGhhc193bm9fdW51c2VkX2Z1bmN0aW9uKQorCWlmIChoYXNfd25vX3VudXNlZF9mdW5jdGlvbikK
KwkJc2V0KENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gLVduby11bnVzZWQtZnVuY3Rp
b24iKQorCWVuZGlmICgpCisKKwljaGVja19jX2NvbXBpbGVyX2ZsYWcoLVduby11bnVzZWQtcGFy
YW1ldGVyIGhhc193bm9fdW51c2VkX3BhcmFtZXRlcikKKwlpZiAoaGFzX3dub191bnVzZWRfcGFy
YW1ldGVyKQorCQlzZXQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAtV25vLXVudXNl
ZC1wYXJhbWV0ZXIiKQorCWVuZGlmICgpCisKKwljaGVja19jX2NvbXBpbGVyX2ZsYWcoLVduby11
bnJlYWNoYWJsZS1jb2RlIGhhc193bm9fdW5yZWFjaGFibGVfY29kZSkKKwlpZiAoaGFzX3dub191
bnJlYWNoYWJsZV9jb2RlKQorCQlzZXQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAt
V25vLXVucmVhY2hhYmxlLWNvZGUiKQorCWVuZGlmICgpCisKKwljaGVja19jX2NvbXBpbGVyX2Zs
YWcoLVdzdHJpY3QtcHJvdG90eXBlcyBoYXNfd3N0cmljdF9wcm90b3R5cGVzKQorCWlmIChoYXNf
d3N0cmljdF9wcm90b3R5cGVzKQorCQlzZXQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdT
fSAtV3N0cmljdC1wcm90b3R5cGVzIikKKwllbmRpZiAoKQorCisJaWYgKHNjdHBfd2Vycm9yKQor
CQlzZXQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAtV2Vycm9yIikKKwllbmRpZiAo
KQorCisJaWYgKHNjdHBfc2FuaXRpemVyX2FkZHJlc3MpCisJCXNldChDTUFLRV9DX0ZMQUdTICIk
e0NNQUtFX0NfRkxBR1N9IC1mc2FuaXRpemU9YWRkcmVzcyx1bmRlZmluZWQsc2lnbmVkLWludGVn
ZXItb3ZlcmZsb3cgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLWZuby1zYW5pdGl6ZS1yZWNvdmVy
PWFsbCAtZnNhbml0aXplLWFkZHJlc3MtdXNlLWFmdGVyLXNjb3BlICIpCisJZW5kaWYgKCkKKwor
CWlmIChzY3RwX3Nhbml0aXplcl9tZW1vcnkpCisJCXNldChDTUFLRV9DX0ZMQUdTICIke0NNQUtF
X0NfRkxBR1N9IC1mc2FuaXRpemU9bWVtb3J5IC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIC1mc2Fu
aXRpemUtbWVtb3J5LXRyYWNrLW9yaWdpbnMgLWZQSUUiKQorCWVuZGlmICgpCisKKwlpZiAoc2N0
cF9idWlsZF9mdXp6ZXIpCisJCXNldChDTUFLRV9CVUlMRF9UWVBFICJSZWxXaXRoRGViSW5mbyIp
CisJCWFkZF9kZWZpbml0aW9ucygtREZVWlpJTkdfQlVJTERfTU9ERV9VTlNBRkVfRk9SX1BST0RV
Q1RJT04pCisJCXNldChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC1mc2FuaXRpemU9
ZnV6emVyLW5vLWxpbmsiKQorCWVuZGlmICgpCitlbmRpZiAoKQorCittZXNzYWdlKFNUQVRVUyAi
Q29tcGlsZXIgZmxhZ3MgKENNQUtFX0NfRkxBR1MpOiAke0NNQUtFX0NfRkxBR1N9IikKKworCisj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIElOQ0xV
REUgU1VCRElSUworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIworCithZGRfc3ViZGlyZWN0b3J5KHVzcnNjdHBsaWIpCisKK2lmIChzY3RwX2J1aWxkX3By
b2dyYW1zKQorCWFkZF9zdWJkaXJlY3RvcnkocHJvZ3JhbXMpCitlbmRpZiAoKQorCitpZiAoc2N0
cF9idWlsZF9mdXp6ZXIpCisJYWRkX3N1YmRpcmVjdG9yeShmdXp6ZXIpCitlbmRpZiAoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvTElDRU5TRS5tZCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL0xJQ0VOU0UubWQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hMmQxZjk4OWNmZmEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi9MSUNFTlNFLm1kCkBAIC0wLDAgKzEsMjcgQEAKK0NvcHlyaWdo
dCAoYykgMjAxNSwgIFJhbmRhbGwgU3Rld2FydCBhbmQgTWljaGFlbCBUdWV4ZW4KK0FsbCByaWdo
dHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzCisgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorCisqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIHVzcnNjdHAgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgorU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKK0NBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
CitPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L01ha2VmaWxlLmFtIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwLi40YmQ5OThmYmU3MGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDM4IEBACisjCisjIENvcHlyaWdodCAoQykgMjAx
MS0yMDEyIE1pY2hhZWwgVHVleGVuCisjCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5l
aXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzCisjICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorIyAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
UFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisj
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisjIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTCisjIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorIyBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAor
IyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZCisjIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyMgU1VDSCBEQU1BR0UuCisjCisK
K2lmIENPTkRfUFJPR1JBTVMKK01BWUJFUFJPR1JBTVMgPSBwcm9ncmFtcworZW5kaWYKKworU1VC
RElSUyA9IHVzcnNjdHBsaWIgJChNQVlCRVBST0dSQU1TKQorRVhUUkFfRElTVCA9IGJvb3RzdHJh
cCBNYWtlZmlsZS5ubWFrZQorQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQKKyMgcGtnY29uZmlnX0RB
VEEgPSB1c3JzY3RwLnBjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9NYWtlZmlsZS5ubWFrZSBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL01ha2VmaWxlLm5tYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMC4uNmY5ZDcwMTQ3ODQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvTWFrZWZpbGUu
bm1ha2UKQEAgLTAsMCArMSw0NSBAQAorIw0KKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgTWlj
aGFlbCBUdWV4ZW4NCisjDQorIyBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyMNCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dA0KKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zDQorIyBhcmUgbWV0Og0KKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisj
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0DQorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyMgMy4g
TmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250
cmlidXRvcnMNCisjICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQ0KKyMgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uDQorIw0KKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQNCisjIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQ0KKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UNCisjIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQorIyBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTA0KKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMNCisjIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQ0KKyMgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QNCisjIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkNCisjIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YNCisjIFNV
Q0ggREFNQUdFLg0KKyMNCisNCithbGw6DQorCWNkIHVzcnNjdHBsaWINCisJbm1ha2UgLWYgTWFr
ZWZpbGUubm1ha2UNCisJY2QgLi4NCisJY2QgcHJvZ3JhbXMNCisJbm1ha2UgYWxsIC1mIE1ha2Vm
aWxlLm5tYWtlDQorCWNkIC4uDQorDQorY2xlYW46DQorCWNkIHVzcnNjdHBsaWINCisJbm1ha2Ug
Y2xlYW4gLWYgTWFrZWZpbGUubm1ha2UNCisJY2QgLi4NCisJY2QgcHJvZ3JhbXMNCisJbm1ha2Ug
Y2xlYW4gLWYgTWFrZWZpbGUubm1ha2UNCisJY2QgLi4NCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9N
YW51YWwubWQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi9NYW51YWwubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi41ZWZjNzg1OTU3ODgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9N
YW51YWwubWQKQEAgLTAsMCArMSw3ODYgQEAKKyMgU0NUUCB1c2VyLWxhbmQgaW1wbGVtZW50YXRp
b24gKHVzcnNjdHApCisKK1NDVFAgaXMgYSBtZXNzYWdlIG9yaWVudGVkLCByZWxpYWJsZSB0cmFu
c3BvcnQgcHJvdG9jb2wgd2l0aCBkaXJlY3Qgc3VwcG9ydCBmb3IgbXVsdGlob21pbmcgdGhhdCBy
dW5zIG9uIHRvcCBvZiBJUCBvciBVRFAsIGFuZCBzdXBwb3J0cyBib3RoIHY0IGFuZCB2NiB2ZXJz
aW9ucy4KKworTGlrZSBUQ1AsIFNDVFAgcHJvdmlkZXMgcmVsaWFibGUsIGNvbm5lY3Rpb24gb3Jp
ZW50ZWQgZGF0YSBkZWxpdmVyeSB3aXRoIGNvbmdlc3Rpb24gY29udHJvbC4gVW5saWtlIFRDUCwg
U0NUUCBhbHNvIHByb3ZpZGVzIG1lc3NhZ2UgYm91bmRhcnkgcHJlc2VydmF0aW9uLCBvcmRlcmVk
IGFuZCB1bm9yZGVyZWQgbWVzc2FnZSBkZWxpdmVyeSwgbXVsdGktc3RyZWFtaW5nIGFuZCBtdWx0
aS1ob21pbmcuIERldGVjdGlvbiBvZiBkYXRhIGNvcnJ1cHRpb24sIGxvc3Mgb2YgZGF0YSBhbmQg
ZHVwbGljYXRpb24gb2YgZGF0YSBpcyBhY2hpZXZlZCBieSB1c2luZyBjaGVja3N1bXMgYW5kIHNl
cXVlbmNlIG51bWJlcnMuIEEgc2VsZWN0aXZlIHJldHJhbnNtaXNzaW9uIG1lY2hhbmlzbSBpcyBh
cHBsaWVkIHRvIGNvcnJlY3QgbG9zcyBvciBjb3JydXB0aW9uIG9mIGRhdGEuCisKK0luIHRoaXMg
bWFudWFsIHRoZSBzb2NrZXQgQVBJIGZvciB0aGUgU0NUUCBVc2VyLWxhbmQgaW1wbGVtZW50YXRp
b24gd2lsbCBiZSBkZXNjcmliZWQuICBJdCBpcyBiYXNlZCBvbiBbUkZDIDY0NThdKGh0dHBzOi8v
dG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NDU4KS4gVGhlIG1haW4gZm9jdXMgb2YgdGhpcyBkb2N1
bWVudCBpcyBvbiBwb2ludGluZyBvdXQgdGhlIGRpZmZlcmVuY2VzIHRvIHRoZSBTQ1RQIFNvY2tl
dHMgQVBJLiBGb3IgYWxsIGFzcGVjdHMgb2YgdGhlIHNvY2tldHMgQVBJIHRoYXQgYXJlIG5vdCBt
ZW50aW9uZWQgaW4gdGhpcyBkb2N1bWVudCwgcGxlYXNlIHJlZmVyIHRvIFtSRkMgNjQ1OF0oaHR0
cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY0NTgpLiBRdWVzdGlvbnMgYWJvdXQgU0NUUCBp
dHNlbGYgY2FuIGhvcGVmdWxseSBiZSBhbnN3ZXJlZCBieSBbUkZDIDQ5NjBdKGh0dHBzOi8vdG9v
bHMuaWV0Zi5vcmcvaHRtbC9yZmM0OTYwKS4KKworIyMgR2V0dGluZyBTdGFydGVkCitUaGUgdXNl
ci1sYW5kIHN0YWNrIGhhcyBiZWVuIHRlc3RlZCBvbiBGcmVlQlNEIDEwLjAsIFVidW50dSAxMS4x
MCwgV2luZG93cyA3LCBNYWMgT1MgWCAxMC42LCBhbmQgTWFjIE9TIFggMTAuNy4gVGhlIGN1cnJl
bnQgdmVyc2lvbiBvZiB0aGUgdXNlci1sYW5kIHN0YWNrIGlzIHByb3ZpZGVkIG9uIFtnaXRodWJd
KGh0dHBzOi8vZ2l0aHViLmNvbS9zY3RwbGFiL3VzcnNjdHApLiBEb3dubG9hZCB0aGUgdGFyYmFs
bCBhbmQgdW50YXIgaXQgaW4gYSBmb2xkZXIgb2YgeW91ciBjaG9pY2UuIFRoZSB0YXJiYWxsIGNv
bnRhaW5zIGFsbCB0aGUgc291cmNlcyB0byBidWlsZCB0aGUgbGlidXNyc2N0cCwgd2hpY2ggaGFz
IHRvIGJlIGxpbmtlZCB0byB0aGUgb2JqZWN0IGZpbGUgb2YgYW4gZXhhbXBsZSBwcm9ncmFtLiBJ
biBhZGRpdGlvbiB0aGVyZSBhcmUgdHdvIGFwcGxpY2F0aW9ucyBpbiB0aGUgZm9sZGVyIGBwcm9n
cmFtc2AgdGhhdCBjYW4gYmUgYnVpbHQgYW5kIHJ1bi4KKworIyMjIEJ1aWxkaW5nIHRoZSBMaWJy
YXJ5IGFuZCB0aGUgQXBwbGljYXRpb25zCisjIyMjIFVuaXgtbGlrZSBPcGVyYXRpbmcgU3lzdGVt
cworSW4gdGhlIGZvbGRlciBgdXNyc2N0cGAgdHlwZQorCisgICAgJCAuL2Jvb3RzdHJhcAorICAg
ICQgLi9jb25maWd1cmUKKyAgICAkIG1ha2UKKworTm93LCB0aGUgbGlicmFyeSBgbGlidXNyc2N0
cC5sYWAgaGFzIGJlZW4gYnVpbHQgaW4gdGhlIHN1YmRpcmVjdG9yeSBgdXNyc2N0cGxpYmAsIGFu
ZCB0aGUgZXhhbXBsZSBwcm9ncmFtcyBhcmUgcmVhZHkgdG8gcnVuIGZyb20gdGhlIHN1YmRpcmVj
dG9yeSBgcHJvZ3JhbXNgLgorCitJZiB5b3UgaGF2ZSByb290IHByaXZpbGVnZXMgb3IgYXJlIGlu
IHRoZSBzdWRvZXIgZ3JvdXAsIHlvdSBjYW4gaW5zdGFsbCB0aGUgbGlicmFyeSBpbiBgL3Vzci9s
b2NhbC9saWJgIGFuZCBjb3B5IHRoZSBoZWFkZXIgZmlsZSB0byBgL3Vzci9pbmNsdWRlYCB3aXRo
IHRoZSBjb21tYW5kCisKKyAgICAkIHN1ZG8gbWFrZSBpbnN0YWxsCisKKyMjIyMgV2luZG93cwor
T24gV2luZG93cyB5b3UgbmVlZCBhIGNvbXBpbGVyIGxpa2UgTWljcm9zb2Z0IFZpc3VhbCBTdHVk
aW8uIFlvdSBjYW4gYnVpbGQgdGhlIGxpYnJhcnkgYW5kIHRoZSBleGFtcGxlIHByb2dyYW1zIHdp
dGggdGhlIGNvbW1hbmQgbGluZSB0b29sIG9mIHRoZSBjb21waWxlciBieSB0eXBpbmcKKworICAg
ICQgbm1ha2UgLWYgTWFrZWZpbGUubm1ha2UKKworaW4gdGhlIGRpcmVjdG9yeSBgdXNyc2N0cGAu
CisKKyMjIyMgQ01ha2UKK0NyZWF0ZSBhIGRpcmVjdG9yeSBvdXRzaWRlIHRoZSBgdXNyc2N0cGAg
ZGlyZWN0b3J5LCBlbnRlciBpdCBhbmQgZ2VuZXJhdGUgZmlsZXMgYnkgdHlwaW5nCisKKyAgICAk
IGNtYWtlIDxwYXRoLXRvLXVzcnNjdHAtc291cmNlcz4KKyAgICAkIGNtYWtlIC0tYnVpbGQgLgor
CitCeSBkZWZhdWx0IENNYWtlIGdlbmVyYXRlcyBhIERFQlVHIGJ1aWxkIHdpdGggdmVyYm9zZSBv
dXRwdXQuCisKKyMjIyBSdW5uaW5nIHRoZSBUZXN0IFByb2dyYW1zCisKK1NldmVyYWwgdGVzdCBw
cm9ncmFtcyBhcmUgaW5jbHVkZWQsIGluY2x1ZGluZyBhIGRpc2NhcmQgc2VydmVyIGFuZCBhIGNs
aWVudC4gWW91IGNhbiBydW4gYm90aCB0byBzZW5kIGRhdGEgZnJvbSB0aGUgY2xpZW50IHRvIHRo
ZSBzZXJ2ZXIuIFRoZSBjbGllbnQgcmVhZHMgZGF0YSBmcm9tIHN0ZGluIGFuZCBzZW5kcyB0aGVt
IHRvIHRoZSBzZXJ2ZXIsIHdoaWNoIHByaW50cyB0aGUgbWVzc2FnZSBpbiB0aGUgdGVybWluYWwg
YW5kIGRpc2NhcmRzIGl0LiBUaGUgc291cmNlcyBvZiB0aGUgc2VydmVyIGFyZSBhbHNvIHByb3Zp
ZGVkIFtoZXJlXShodHRwczovL2dpdGh1Yi5jb20vc2N0cGxhYi91c3JzY3RwL2Jsb2IvbWFzdGVy
L3Byb2dyYW1zL2Rpc2NhcmRfc2VydmVyLmMpIGFuZCB0aG9zZSBvZiB0aGUgY2xpZW50IFtoZXJl
XShodHRwczovL2dpdGh1Yi5jb20vc2N0cGxhYi91c3JzY3RwL2Jsb2IvbWFzdGVyL3Byb2dyYW1z
L2NsaWVudC5jKS4KKworIyMjIFVzaW5nIFVEUCBFbmNhcHN1bGF0aW9uCisKK0JvdGggcHJvZ3Jh
bXMgY2FuIGVpdGhlciBzZW5kIGRhdGEgb3ZlciBTQ1RQIGRpcmVjdGx5IG9yIHVzZSBVRFAgZW5j
YXBzdWxhdGlvbiwgdGh1cyBlbmNhcHN1bGF0aW5nIHRoZSBTQ1RQIHBhY2tldCBpbiBhIFVEUCBk
YXRhZ3JhbS4gVGhlIGZpcnN0IG1vZGUgd29ya3Mgb24gbG9vcGJhY2sgb3IgaW4gYSBwcm90ZWN0
ZWQgc2V0dXAgd2l0aG91dCBhbnkgTkFUIGJveGVzIGludm9sdmVkLiBJbiBhbGwgb3RoZXIgY2Fz
ZXMgaXQgaXMgYmV0dGVyIHRvIHVzZSBVRFAgZW5jYXBzdWxhdGlvbi4KKworVGhlIHVzYWdlIG9m
IHRoZSBgZGlzY2FyZF9zZXJ2ZXJgIGlzCisKKyAgICAkIGRpc2NhcmRfc2VydmVyIFtsb2NhbF9l
bmNhcHNfcG9ydCByZW1vdGVfZW5jYXBzX3BvcnRdCisKK0ZvciBVRFAgZW5jYXBzdWxhdGlvbiB0
aGUgcG9ydHMgaGF2ZSB0byBiZSBzcGVjaWZpZWQuIFRoZSBsb2NhbCBhbmQgcmVtb3RlIGVuY2Fw
c3VsYXRpb24gcG9ydHMgY2FuIGJlIGFyYml0cmFyaWx5IHNldC4gRm9yIGV4YW1wbGUsIHlvdSBj
YW4gY2FsbAorCisgICAgJCAuL2Rpc2NhcmRfc2VydmVyIDExMTExIDIyMjIyCisKK29uIGEgVW5p
eC1saWtlIE9TIGFuZAorCisgICAgJCBkaXNjYXJkX3NlcnZlci5leGUgMTExMTEgMjIyMjIKKwor
b24gV2luZG93cy4KKworVGhlIGNsaWVudCBuZWVkcyB0d28gYWRkaXRpb25hbCBwYXJhbWV0ZXJz
LCB0aGUgc2VydmVyJ3MgYWRkcmVzcyBhbmQgaXRzIHBvcnQuIEl0cyB1c2FnZSBpcworCisgICAg
JCBjbGllbnQgcmVtb3RlX2FkZHIgcmVtb3RlX3BvcnQgW2xvY2FsX3BvcnQgbG9jYWxfZW5jYXBz
X3BvcnQgcmVtb3RlX2VuY2Fwc19wb3J0XQorCitUaGUgcmVtb3RlIGFkZHJlc3MgaXMgdGhlIHNl
cnZlcidzIGFkZHJlc3MuIElmIGNsaWVudCBhbmQgc2VydmVyIGFyZSBzdGFydGVkIG9uIHRoZSBz
YW1lIG1hY2hpbmUsIHRoZSBsb29wYmFjayBhZGRyZXNzIGAxMjcuMC4wLjFgIGNhbiBiZSB1c2Vk
IGZvciBVbml4LWxpa2UgT1NzIGFuZCB0aGUgbG9jYWwgYWRkcmVzcyBvbiBXaW5kb3dzLiBUaGUg
ZGlzY2FyZCBwb3J0IGlzIDksIHRodXMgOSBoYXMgdG8gYmUgdGFrZW4gYXMgcmVtb3RlIHBvcnQu
IFRoZSBlbmNhcHN1bGF0aW9uIHBvcnRzIGhhdmUgdG8gbWF0Y2ggdGhvc2Ugb2YgdGhlIHNlcnZl
ciwgaS5lLiB0aGUgc2VydmVyJ3MgYGxvY2FsX2VuY2Fwc19wb3J0YCBpcyB0aGUgY2xpZW50J3Mg
YHJlbW90ZV9lbmNhcHNfcG9ydGAgYW5kIHZpY2UgdmVyc2EuIFRodXMsIHRoZSBjbGllbnQgY2Fu
IGJlIHN0YXJ0ZWQgd2l0aAorCisgICAgJCAuL2NsaWVudCAxMjcuMC4wLjEgOSAwIDIyMjIyIDEx
MTExCisKK29uIGEgVW5peC1saWtlIE9TIGFuZAorCisgICAgJCBjbGllbnQuZXhlIDE5Mi4xNjgu
MC4xIDkgMCAyMjIyMiAxMTExMQorCitvbiBXaW5kb3dzIHByb3ZpZGVkIHlvdXIgbG9jYWwgSVAg
YWRkcmVzcyBpcyAxOTIuMTY4LjAuMS4KKworIyMjIFNlbmRpbmcgb3ZlciBTQ1RQCisKK1RvIHNl
bmQgZGF0YSBvdmVyIFNDVFAgZGlyZWN0bHkgeW91IG1pZ2h0IG5lZWQgcm9vdCBwcml2aWxlZ2Vz
IGJlY2F1c2UgcmF3IHNvY2tldHMgYXJlIHVzZWQuIFRodXMgaW5zdGVhZCBvZiBzcGVjaWZ5aW5n
IHRoZSBlbmNhcHN1bGF0aW9uIHBvcnRzIHlvdSBoYXZlIHRvIHN0YXJ0IHRoZSBwcm9ncmFtcyBw
cmVwZW5kaW5nIGBzdWRvYCBvciBpbiBjYXNlIG9mIFdpbmRvd3Mgc3RhcnQgdGhlIHByb2dyYW0g
ZnJvbSBhbiBhZG1pbmlzdHJhdG9yIGNvbnNvbGUuCisKKyMjIyBVc2luZyB0aGUgQ2FsbGJhY2sg
QVBJCisKK0luc3RlYWQgb2YgYXNraW5nIGNvbnN0YW50bHkgZm9yIG5ldyBkYXRhLCBhIGNhbGxi
YWNrIEFQSSBjYW4gYmUgdXNlZCB0aGF0IGlzIHRyaWdnZXJlZCBieSBTQ1RQLiBBIGNhbGxiYWNr
IGZ1bmN0aW9uIGhhcyB0byBiZSByZWdpc3RlcmVkIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbmV2
ZXIgZGF0YSBpcyByZWFkeSB0byBiZSBkZWxpdmVyZWQgdG8gdGhlIGFwcGxpY2F0aW9uLgorCitU
aGUgYGRpc2NhcmRfc2VydmVyYCBoYXMgYSBmbGFnIHRvIHN3aXRjaCBiZXR3ZWVuIHRoZSB0d28g
bW9kaS4gSWYgIGB1c2VfY2JgIGlzIHNldCB0byAxLCB0aGUgY2FsbGJhY2sgQVBJIHdpbGwgYmUg
dXNlZC4gVG8gY2hhbmdlIHRoZSBzZXR0aW5nLCBqdXN0IHNldCB0aGUgZmxhZyBhbmQgY29tcGls
ZSB0aGUgcHJvZ3JhbSBhZ2Fpbi4KKworCisjIyBCYXNpYyBPcGVyYXRpb25zCisKK0FsbCBzeXN0
ZW0gY2FsbHMgc3RhcnQgd2l0aCB0aGUgcHJlZml4IGB1c3JzY3RwX2AgdG8gZGlzdGluZ3Vpc2gg
dGhlbSBmcm9tIHRoZSBrZXJuZWwgdmFyaWFudHMuIFNvbWUgb2YgdGhlbSBhcmUgY2hhbmdlZCB0
byBhY2NvdW50IGZvciB0aGUgZGlmZmVyZW50IGRlbWFuZHMgaW4gdGhlIHVzZXJsYW5kIGVudmly
b25tZW50LgorCisjIyBEaWZmZXJlbmNlcyB0byBSRkMgNjQ1OAorCisjIyMgdXNyc2N0cF9pbml0
KCkKKworRXZlcnkgYXBwbGljYXRpb24gaGFzIHRvIHN0YXJ0IHdpdGggYHVzcnNjdHBfaW5pdCgp
YC4gVGhpcyBmdW5jdGlvbiBjYWxscyBgc2N0cF9pbml0KClgIGFuZCByZXNlcnZlcyB0aGUgbWVt
b3J5IG5lY2Vzc2FyeSB0byBhZG1pbmlzdGVyIHRoZSBkYXRhIHRyYW5zZmVyLiBUaGUgZnVuY3Rp
b24gcHJvdG90eXBlIGlzCisKK2BgYGMKK3ZvaWQgdXNyc2N0cF9pbml0KHVpbnQxNl90IHVkcF9w
b3J0KQorYGBgCisKK0FzIGl0IGlzIG5vdCBhbHdheXMgcG9zc2libGUgdG8gc2VuZCBkYXRhIGRp
cmVjdGx5IG92ZXIgU0NUUCBiZWNhdXNlIG5vdCBhbGwgTkFUIGJveGVzIGNhbiBwcm9jZXNzIFND
VFAgcGFja2V0cywgdGhlIGRhdGEgY2FuIGJlIHNlbnQgb3ZlciBVRFAuIFRvIGVuY2Fwc3VsYXRl
IFNDVFAgaW50byBVRFAgYSBVRFAgcG9ydCBoYXMgdG8gYmUgc3BlY2lmaWVkLCB0byB3aGljaCB0
aGUgZGF0YWdyYW1zIGNhbiBiZSBzZW50LiBUaGlzIGxvY2FsIFVEUCBwb3J0ICBpcyBzZXQgd2l0
aCB0aGUgcGFyYW1ldGVyIGB1ZHBfcG9ydGAuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDk4OTksIHRo
ZSBzdGFuZGFyZCBVRFAgZW5jYXBzdWxhdGlvbiBwb3J0LiBJZiBVRFAgZW5jYXBzdWxhdGlvbiBp
cyBub3QgbmVjZXNzYXJ5LCB0aGUgVURQIHBvcnQgaGFzIHRvIGJlIHNldCB0byAwLgorCisjIyMg
dXNyc2N0cF9maW5pc2goKQorCitBdCB0aGUgZW5kIG9mIHRoZSBwcm9ncmFtIGB1c3JzY3RwX2Zp
bmlzaCgpYCBzaG91bGQgYmUgY2FsbGVkIHRvIGZyZWUgYWxsIHRoZSBtZW1vcnkgdGhhdCBoYXMg
YmVlbiBhbGxvY2F0ZWQgYmVmb3JlLiBUaGUgZnVuY3Rpb24gcHJvdG90eXBlIGlzCisKK2BgYGMK
K2ludCB1c3JzY3RwX2ZpbmlzaCh2b2lkKQorYGBgCisKK1RoZSByZXR1cm4gY29kZSBpcyAwIG9u
IHN1Y2Nlc3MgYW5kIC0xIGluIGNhc2Ugb2YgYW4gZXJyb3IuCisKKyMjIyB1c3JzY3RwX3NvY2tl
dCgpCisKK0EgcmVwcmVzZW50YXRpb24gb2YgYW4gU0NUUCBlbmRwb2ludCBpcyBhIHNvY2tldC4g
SXMgaXQgY3JlYXRlZCB3aXRoIGB1c3JzY3RwX3NvY2tldCgpYC4gVGhlIGZ1bmN0aW9uIHByb3Rv
dHlwZSBpczoKKworYGBgYworc3RydWN0IHNvY2tldCAqCit1c3JzY3RwX3NvY2tldChpbnQgZG9t
YWluLAorICAgICAgICAgICAgICAgaW50IHR5cGUsCisgICAgICAgICAgICAgICBpbnQgcHJvdG9j
b2wsCisgICAgICAgICAgICAgICBpbnQgKCpyZWNlaXZlX2NiKShzdHJ1Y3Qgc29ja2V0ICpzb2Nr
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gc2N0cF9zb2Nrc3RvcmUg
YWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3JjdmluZm8sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2b2lkICp1bHBfaW5mbyksCisgICAgICAgICAgICAgICBpbnQgKCpzZW5kX2NiKShz
dHJ1Y3Qgc29ja2V0ICpzb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy
X3Qgc2JfZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVscF9pbmZv
KSwKKyAgICAgICAgICAgICAgIHVpbnQzMl90IHNiX3RocmVzaG9sZCwKKyAgICAgICAgICAgICAg
IHZvaWQgKnVscF9pbmZvKQorYGBgCisKK1RoZSBhcmd1bWVudHMgdGFrZW4gZnJvbSBbUkZDIDY0
NThdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NDU4KSBhcmU6CisKKyogZG9tYWlu
OiBQRl9JTkVUIG9yIFBGX0lORVQ2IGNhbiBiZSB1c2VkLgorKiB0eXBlOiBJbiBjYXNlIG9mIGEg
b25lLXRvLW1hbnkgc3R5bGUgc29ja2V0IGl0IGlzIFNPQ0tfU0VRUEFDS0VULCBpbiBjYXNlIG9m
IGEgb25lLXRvLW9uZSBzdHlsZQorc29ja2V0IGl0IGlzIFNPQ0tfU1RSRUFNLiBGb3IgYW4gZXhw
bGFuYXRpb24gb2YgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHNvY2tldCB0eXBlcyBwbGVh
c2UKK3JlZmVyIHRvIFtSRkMgNjQ1OF0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY0
NTgpLgorKiBwcm90b2NvbDogU2V0IElQUFJPVE9fU0NUUC4KKworSW4gdXNyc2N0cCwgYSBjYWxs
YmFjayBBUEkgY2FuIGJlIHVzZWQuCisKKyogVGhlIGZ1bmN0aW9uIHBvaW50ZXJzIG9mIHRoZSBy
ZWNlaXZlIGFuZCBzZW5kIGNhbGxiYWNrcyBhcmUgbmV3IGFyZ3VtZW50cyB0byB0aGUgc29ja2V0
IGNhbGwuIElmIG5vIGNhbGxiYWNrIEFQSSBpcyB1c2VkLCB0aGVzZSBtdXN0IGJlIGBOVUxMYC4K
KyogVGhlIGBzYl90aHJlc2hvbGRgIHNwZWNpZmllcyB0aGUgYW1vdW50IG9mIGZyZWUgc3BhY2Ug
aW4gdGhlIHNlbmQgc29ja2V0IGJ1ZmZlciBiZWZvcmUgdGhlIHNlbmQgZnVuY3Rpb24gaW4gdGhl
IGFwcGxpY2F0aW9uIGlzIGNhbGxlZC4gSWYgYSBzZW5kIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIHNw
ZWNpZmllZCBhbmQgYHNiX3RocmVzaG9sZGAgaXMgMCwgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3
aGVuZXZlciB0aGVyZSBpcyByb29tIGluIHRoZSBzZW5kIHNvY2tldCBidWZmZXIuCisqIEFkZGl0
aW9uYWwgZGF0YSBtYXkgYmUgcGFzc2VkIGFsb25nIHdpdGhpbiB0aGUgYHVscF9pbmZvYCBwYXJh
bWV0ZXIuIFRoaXMgdmFsdWUgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGByZWNlaXZlX2NiYCB3aGVu
IGl0IGlzIGludm9rZWQuCisKK09uIHN1Y2Nlc3MgYHVzcnNjdHBfc29ja2V0KClgIHJldHVybnMg
dGhlIHBvaW50ZXIgdG8gdGhlIG5ldyBzb2NrZXQgaW4gdGhlIGBzdHJ1Y3Qgc29ja2V0YCBkYXRh
IHR5cGUuIEl0IHdpbGwgYmUgbmVlZGVkIGluIGFsbCBvdGhlciBzeXN0ZW0gY2FsbHMuIEluIGNh
c2Ugb2YgYSBmYWlsdXJlIE5VTEwgaXMgcmV0dXJuZWQgYW5kIGVycm5vIGlzIHNldCB0byB0aGUg
YXBwcm9wcmlhdGUgZXJyb3IgY29kZS4KKworIyMjIHVzcnNjdHBfY2xvc2UoKQorCitUaGUgZnVu
Y3Rpb24gcHJvdG90eXBlIG9mIGB1c3JzY3RwX2Nsb3NlKClgIGlzCisKK2BgYGMKK3ZvaWQgdXNy
c2N0cF9jbG9zZShzdHJ1Y3Qgc29ja2V0ICpzbykKKyBgYGAKK1RodXMgdGhlIG9ubHkgZGlmZmVy
ZW5jZSBpcyB0aGUgYWJzZW5jZSBvZiBhIHJldHVybiBjb2RlLgorCisjIyBTYW1lIEZ1bmN0aW9u
YWxpdHkgYXMgUkZDIDY0NTgKKworVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgaGF2ZSB0aGUgc2Ft
ZSBmdW5jdGlvbmFsaXR5IGFzIHRoZWlyIGtlcm5lbCBwZW5kYW50cy4gVGhlcmUgcHJvdG90eXBl
cworYXJlIGRlc2NyaWJlZCBpbiB0aGUgZm9sbG93aW5nIHN1YnNlY3Rpb25zLiBGb3IgYSBkZXRh
aWxlZCBkZXNjcmlwdGlvbiBwbGVhc2UgcmVmZXIgdG8gW1JGQyA2NDU4XShodHRwczovL3Rvb2xz
LmlldGYub3JnL2h0bWwvcmZjNjQ1OCkuCisKKyMjIyB1c3JzY3RwX2JpbmQoKQorCitgYGBjCitp
bnQKK3VzcnNjdHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICBzdHJ1Y3Qg
c29ja2FkZHIgKmFkZHIsCisgICAgICAgICAgICAgc29ja2xlbl90IGFkZHJsZW4pCitgYGAKKwor
KiBzbzogUG9pbnRlciB0byB0aGUgc29ja2V0IGFzIHJldHVybmVkIGJ5IGB1c3JzY3RwX3NvY2tl
dCgpYC4KKyogYWRkcjogVGhlIGFkZHJlc3Mgc3RydWN0dXJlIChgc3RydWN0IHNvY2thZGRyX2lu
YCBmb3IgYW4gSVB2NCBhZGRyZXNzIG9yIGBzdHJ1Y3Qgc29ja2FkZHJfaW42YCBmb3IgYW4gSVB2
NiBhZGRyZXNzKS4KKyogYWRkcmxlbjogVGhlIHNpemUgb2YgdGhlIGFkZHJlc3Mgc3RydWN0dXJl
LgorCitgdXNyc2N0cF9iaW5kKClgIHJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCAtMSBpbiBjYXNl
IG9mIGFuIGVycm9yLgorCisjIyMgdXNyc2N0cF9saXN0ZW4oKQorCitgYGBjCitpbnQKK3VzcnNj
dHBfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvLAorICAgICAgICAgICAgICAgaW50IGJhY2tsb2cp
CitgYGAKKworKiBzbzogUG9pbnRlciB0byB0aGUgc29ja2V0IGFzIHJldHVybmVkIGJ5IGB1c3Jz
Y3RwX3NvY2tldCgpYC4KKyogYmFja2xvZzogSWYgYmFja2xvZyBpcyBub24temVybywgZW5hYmxl
IGxpc3RlbmluZywgZWxzZSBkaXNhYmxlIGxpc3RlbmluZy4KKworYHVzcnNjdHBfbGlzdGVuKClg
IHJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCAtMSBpbiBjYXNlIG9mIGFuIGVycm9yLgorCisjIyMg
dXNyc2N0cF9hY2NlcHQoKQorCitgYGBjCitzdHJ1Y3Qgc29ja2V0ICoKK3VzcnNjdHBfYWNjZXB0
KHN0cnVjdCBzb2NrZXQgKnNvLAorICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICogYWRk
ciwKKyAgICAgICAgICAgICAgIHNvY2tsZW5fdCAqIGFkZHJsZW4pCitgYGAKKworKiBzbzogUG9p
bnRlciB0byB0aGUgc29ja2V0IGFzIHJldHVybmVkIGJ5IGB1c3JzY3RwX3NvY2tldCgpYC4KKyog
YWRkcjogT24gcmV0dXJuLCAgdGhlIHByaW1hcnkgYWRkcmVzcyBvZiB0aGUgcGVlciAoYHN0cnVj
dCBzb2NrYWRkcl9pbmAgZm9yIGFuIElQdjQgYWRkcmVzcyBvciBgc3RydWN0IHNvY2thZGRyX2lu
NmAgZm9yIGFuIElQdjYgYWRkcmVzcykuCisqIGFkZHJsZW46IFNpemUgb2YgdGhlIHJldHVybmVk
IGFkZHJlc3Mgc3RydWN0dXJlLgorCitgdXNyc2N0cF9hY2NlcHQoKWAgcmV0dXJucyB0aGUgYWNj
ZXB0ZWQgc29ja2V0IG9uIHN1Y2Nlc3MgYW5kIE5VTEwgaW4gY2FzZSBvZiBhbiBlcnJvci4KKwor
IyMjIHVzcnNjdHBfY29ubmVjdCgpCisKK2BgYGMKK2ludAordXNyc2N0cF9jb25uZWN0KHN0cnVj
dCBzb2NrZXQgKnNvLAorICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqbmFtZSwKKyAg
ICAgICAgICAgICAgICBzb2NrbGVuX3QgYWRkcmxlbikKK2BgYAorCisqIHNvOiBQb2ludGVyIHRv
IHRoZSBzb2NrZXQgYXMgcmV0dXJuZWQgYnkgYHVzcnNjdHBfc29ja2V0KClgLgorKiBuYW1lOiBB
ZGRyZXNzIG9mIHRoZSBwZWVyIHRvIGNvbm5lY3QgdG8gKGBzdHJ1Y3Qgc29ja2FkZHJfaW5gIGZv
ciBhbiBJUHY0IGFkZHJlc3Mgb3IgYHN0cnVjdCBzb2NrYWRkcl9pbjZgIGZvciBhbiBJUHY2IGFk
ZHJlc3MpLgorKiBhZGRybGVuOiBTaXplIG9mIHRoZSBwZWVyJ3MgYWRkcmVzcy4KKworYHVzcnNj
dHBfY29ubmVjdCgpYCByZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBhbiBl
cnJvci4KKworIyMjIHVzcnNjdHBfc2h1dGRvd24oKQorCitgYGBjCitpbnQKK3VzcnNjdHBfc2h1
dGRvd24oc3RydWN0IHNvY2tldCAqc28sIGludCBob3cpCitgYGAKKworKiBzbzogUG9pbnRlciB0
byB0aGUgc29ja2V0IG9mIHRoZSBhc3NvY2lhdGlvbiB0byBiZSBjbG9zZWQKKyogaG93OiBTcGVj
aWZpZXMgdGhlIHR5cGUgb2Ygc2h1dGRvd24uICBUaGUgdmFsdWVzIGFyZSBhcyBmb2xsb3dzOgor
ICAqIFNIVVRfUkQ6ICBEaXNhYmxlcyBmdXJ0aGVyIHJlY2VpdmUgb3BlcmF0aW9ucy4gIE5vIFND
VFAgcHJvdG9jb2wgYWN0aW9uIGlzIHRha2VuLgorICAqIFNIVVRfV1I6ICBEaXNhYmxlcyBmdXJ0
aGVyIHNlbmQgb3BlcmF0aW9ucywgYW5kIGluaXRpYXRlcyB0aGUgU0NUUCBzaHV0ZG93biBzZXF1
ZW5jZS4KKyAgKiBTSFVUX1JEV1I6ICBEaXNhYmxlcyBmdXJ0aGVyIHNlbmQgYW5kIHJlY2VpdmUg
b3BlcmF0aW9ucywgYW5kIGluaXRpYXRlcyB0aGUgU0NUUCBzaHV0ZG93biBzZXF1ZW5jZS4KKwor
YHVzcnNjdHBfc2h1dGRvd24oKWAgcmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIC0xIGluIGNhc2Ug
b2YgYW4gZXJyb3IuCisKKyMjIFNlbmRpbmcgYW5kIFJlY2VpdmluZyBEYXRhCitTaW5jZSB0aGUg
cHVibGljYXRpb24gb2YgW1JGQyA2NDU4XShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZj
NjQ1OCkgdGhlcmUgaXMgb25seSBvbmUgZnVuY3Rpb24gZm9yIHNlbmRpbmcgYW5kIG9uZSBmb3Ig
cmVjZWl2aW5nCit0aGF0IGlzIG5vdCBkZXByZWNhdGVkLiBUaGVyZWZvcmUsIG9ubHkgdGhlc2Ug
dHdvIGFyZSBkZXNjcmliZWQgaGVyZS4KKworIyMjIHVzcnNjdHBfc2VuZHYoKQorCitgYGBjCitz
c2l6ZV90Cit1c3JzY3RwX3NlbmR2KHN0cnVjdCBzb2NrZXQgKnNvLAorICAgICAgICAgICAgICBj
b25zdCB2b2lkICpkYXRhLAorICAgICAgICAgICAgICBzaXplX3QgbGVuLAorICAgICAgICAgICAg
ICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJzLAorICAgICAgICAgICAgICBpbnQgYWRkcmNudCwKKyAg
ICAgICAgICAgICAgdm9pZCAqaW5mbywKKyAgICAgICAgICAgICAgc29ja2xlbl90IGluZm9sZW4s
CisgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbmZvdHlwZSwKKyAgICAgICAgICAgICAgaW50
IGZsYWdzKQorYGBgCisKKyogc286IFRoZSBzb2NrZXQgdG8gc2VuZCBkYXRhIG9uLgorKiBkYXRh
OiBBcyBpdCBpcyBtb3JlIGNvbnZlbmllbnQgdG8gc2VuZCBkYXRhIGluIGEgYnVmZmVyIGFuZCBu
b3QgYSBgc3RydWN0IGlvdmVjYCBkYXRhIHN0cnVjdHVyZSwgd2UgY2hvc2UgdG8gcGFzcyB0aGUg
ZGF0YSBhcyBhIHZvaWQgcG9pbnRlci4KKyogbGVuOiBMZW5ndGggb2YgdGhlIGRhdGEuCisqIGFk
ZHJzOiBJbiB0aGlzIHZlcnNpb24gb2YgdXNyc2N0cCBhdCBtb3N0IG9uZSBkZXN0aW5hdGlvbiBh
ZGRyZXNzIGlzIHN1cHBvcnRlZC4gSW4gdGhlIGNhc2Ugb2YgYSBjb25uZWN0ZWQgc29ja2V0LCB0
aGUgcGFyYW1ldGVyIGBhZGRyc2AgY2FuIGJlIHNldCB0byBOVUxMLgorKiBhZGRyY250OiBOdW1i
ZXIgb2YgYWRkcmVzc2VzLiBBcyBhdCBtb3N0IG9uZSBhZGRyZXNzIGlzIHN1cHBvcnRlZCwgYWRk
cmNudCBpcyAwIGlmIGFkZHJzIGlzIE5VTEwgYW5kIDEgb3RoZXJ3aXNlLgorKiBpbmZvOiBBZGRp
dGlvbmFsIGluZm9ybWF0aW9uIGZvciBhIG1lc3NhZ2UgaXMgc3RvcmVkIGluIGB2b2lkICppbmZv
YC4gVGhlIGRhdGEgdHlwZXMgYHN0cnVjdCBzY3RwX3NuZGluZm9gLCBgc3RydWN0IHNjdHBfcHJp
bmZvYCwgYW5kIGBzdHJ1Y3Qgc2N0cF9zZW5kdl9zcGFgIGFyZSBzdXBwb3J0ZWQgYXMgZGVmaW5l
ZCBpbiBbUkZDIDY0NThdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NDU4KS4gU3Vw
cG9ydCBmb3IgYHN0cnVjdCBzY3RwX2F1dGhpbmZvYCBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LCB0
aGVyZWZvcmUsIGVycm5vIGlzIHNldCBFSU5WQUwgYW5kIC0xIHdpbGwgYmUgcmV0dXJuZWQsIGlm
IGl0IGlzIHVzZWQuCisqIGluZm9sZW46IExlbmd0aCBvZiBpbmZvIGluIGJ5dGVzLgorKiBpbmZv
dHlwZTogSWRlbnRpZmllcyB0aGUgdHlwZSBvZiB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgaW4g
aW5mby4gUG9zc2libGUgdmFsdWVzIGFyZQorICAqIFNDVFBfU0VORFZfTk9JTkZPCisgICogU0NU
UF9TRU5EVl9TTkRJTkZPCisgICogU0NUUF9TRU5EVl9QUklORk8KKyAgKiBTQ1RQX1NFTkRWX1NQ
QSAoRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcGxlYXNlIHJlZmVyIHRvIFtSRkMgNjQ1OF0o
aHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY0NTgpLikKKyogZmxhZ3M6IEZsYWdzIGFz
IGRlc2NyaWJlZCBpbiBbUkZDIDY0NThdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2
NDU4KS4KKworYHVzcnNjdHBfc2VuZHYoKWAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNl
bnQsIG9yIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkLiAgVGhlIHZhcmlhYmxlIGVycm5vIGlzIHRo
ZW4gc2V0IGFwcHJvcHJpYXRlbHkuCisKKyMjIyB1c3JzY3RwX3JlY3Z2KCkKKworYGBgYworc3Np
emVfdAordXNyc2N0cF9yZWN2dihzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICB2b2lk
ICpkYnVmLAorICAgICAgICAgICAgIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgc3RydWN0IHNv
Y2thZGRyICpmcm9tLAorICAgICAgICAgICAgIHNvY2tsZW5fdCAqIGZyb21sZW4sCisgICAgICAg
ICAgICAgdm9pZCAqaW5mbywKKyAgICAgICAgICAgICBzb2NrbGVuX3QgKmluZm9sZW4sCisgICAg
ICAgICAgICAgdW5zaWduZWQgaW50ICppbmZvdHlwZSwKKyAgICAgICAgICAgICBpbnQgKm1zZ19m
bGFncykKK2BgYAorCisqIHNvOiBUaGUgc29ja2V0IHRvIHJlY2VpdmUgZGF0YSBvbi4KKyogZGJ1
ZjogQW5hbG9nIHRvIGB1c3JzY3RwX3NlbmR2KClgIHRoZSBkYXRhIGlzIHJldHVybmVkIGluIGEg
YnVmZmVyLgorKiBsZW46IExlbmd0aCBvZiB0aGUgYnVmZmVyIGluIGJ5dGVzLgorKiBmcm9tOiBB
IHBvaW50ZXIgdG8gYW4gYWRkcmVzcyB0byBiZSBmaWxsZWQgd2l0aCB0aGUgc2VuZGVyIG9mIHRo
ZSByZWNlaXZlZCBtZXNzYWdlJ3MgYWRkcmVzcy4KKyogZnJvbWxlbjogQW4gaW4vb3V0IHBhcmFt
ZXRlciBkZXNjcmliaW5nIHRoZSBmcm9tIGxlbmd0aC4KKyogaW5mbzogQSBwb2ludGVyIHRvIHRo
ZSBidWZmZXIgdG8gaG9sZCB0aGUgYXR0cmlidXRlcyBvZiB0aGUgcmVjZWl2ZWQgbWVzc2FnZS4g
IFRoZSBzdHJ1Y3R1cmUgdHlwZSBvZiBpbmZvIGlzIGRldGVybWluZWQgYnkgdGhlIGluZm90eXBl
IHBhcmFtZXRlci4gVGhlIGF0dHJpYnV0ZXMgcmV0dXJuZWQgaW4gYGluZm9gIGhhdmUgdG8gYmUg
aGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgc3BlY2lmaWVkIGluIFtSRkMgNjQ1OF0oaHR0cHM6
Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY0NTgpLgorKiBpbmZvbGVuOiAgQW4gaW4vb3V0IHBh
cmFtZXRlciBkZXNjcmliaW5nIHRoZSBzaXplIG9mIHRoZSBpbmZvIGJ1ZmZlci4KKyogaW5mb3R5
cGU6ICBPbiByZXR1cm4sIGAqaW5mb3R5cGVgIGlzIHNldCB0byB0aGUgdHlwZSBvZiB0aGUgaW5m
byBidWZmZXIuICBUaGUgY3VycmVudCBkZWZpbmVkIHZhbHVlcyBhcmUKKyAgKiBTQ1RQX1JFQ1ZW
X05PSU5GTworICAqIFNDVFBfUkVDVlZfUkNWSU5GTworICAqIFNDVFBfUkVDVlZfTlhUSU5GTwor
ICAqIFNDVFBfUkVDVlZfUk4gKEEgZGV0YWlsZWQgZGVzY3JpcHRpb24gaXMgZ2l2ZW4gaW4gW1JG
QyA2NDU4XShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjQ1OCkpCisqIGZsYWdzOiBB
IHBvaW50ZXIgdG8gYW4gaW50ZWdlciB0byBiZSBmaWxsZWQgd2l0aCBhbnkgbWVzc2FnZSBmbGFn
cyAoZS5nLiwgYE1TR19OT1RJRklDQVRJT05gKS4gIE5vdGUgdGhhdCB0aGlzIGZpZWxkIGlzIGFu
IGluL291dCBwYXJhbWV0ZXIuICBPcHRpb25zIGZvciB0aGUgcmVjZWl2ZSBtYXkgYWxzbyBiZSBw
YXNzZWQgaW50byB0aGUgdmFsdWUgKGUuZy4sIGBNU0dfRU9SYCkuICBSZXR1cm5pbmcgZnJvbSB0
aGUgY2FsbCwgdGhlIGZsYWdzJyB2YWx1ZSB3aWxsIGRpZmZlciBmcm9tIGl0cyBvcmlnaW5hbCB2
YWx1ZS4KKworYHVzcnNjdHBfcmVjdnYoKWAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJl
Y2VpdmVkLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZC4gIFRoZSB2YXJpYWJsZSBlcnJubyBp
cyB0aGVuIHNldCBhcHByb3ByaWF0ZWx5LgorCisjIyBTb2NrZXQgT3B0aW9ucworU29ja2V0IG9w
dGlvbnMgYXJlIHVzZWQgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHNvY2tldCBj
YWxscy4KK1RoZWlyIGJlaGF2aW9yIGlzIHNwZWNpZmllZCBpbiBbUkZDIDY0NThdKGh0dHBzOi8v
dG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NDU4KS4gVGhlIGZ1bmN0aW9ucyB0byBnZXQgb3Igc2V0
IHRoZW0gYXJlCisKK2BgYGMKK2ludAordXNyc2N0cF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQg
KnNvLAorICAgICAgICAgICAgICAgICAgICAgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAg
ICAgaW50IG9wdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpvcHR2YWwsCisgICAg
ICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKm9wdGxlbikKK2BgYAorYW5kCitgYGBjCitpbnQK
K3VzcnNjdHBfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICAgICAg
ICAgIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgIGludCBvcHRuYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqb3B0dmFsLAorICAgICAgICAgICAgICAgICAgICAg
c29ja2xlbl90IG9wdGxlbikKK2BgYAorCithbmQgdGhlIGFyZ3VtZW50cyBhcmUKKyogc286ICBU
aGUgc29ja2V0IG9mIHR5cGUgc3RydWN0IHNvY2tldC4KKyogbGV2ZWw6ICBTZXQgdG8gSVBQUk9U
T19TQ1RQIGZvciBhbGwgU0NUUCBvcHRpb25zLgorKiBvcHRuYW1lOiAgVGhlIG9wdGlvbiBuYW1l
IGFzIHNwZWNpZmllZCBpbiBUaGUgU29ja2V0IE9wdGlvbnMgdGFibGUgYmVsb3cuCisqIG9wdHZh
bDogVGhlIGJ1ZmZlciB0byBzdG9yZSB0aGUgdmFsdWUgb2YgdGhlIG9wdGlvbiBhcyBzcGVjaWZp
ZWQgaW4gdGhlIHNlY29uZCBjb2x1bW4gb2YgU29ja2V0IE9wdGlvbnMgYmVsb3cuCisqIG9wdGxl
bjogIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgKG9yIHRoZSBsZW5ndGggb2YgdGhlIG9wdGlvbiBy
ZXR1cm5lZCBpbiBjYXNlIG9mIGB1c3JzY3RwX2dldHNvY2tvcHRgKS4KKworVGhlc2UgZnVuY3Rp
b25zIHJldHVybiAwIG9uIHN1Y2Nlc3MgYW5kIC0xIGluIGNhc2Ugb2YgYW4gZXJyb3IuCisKKyMj
IyBTb2NrZXQgT3B0aW9ucyBzdXBwb3J0ZWQgYnkgdXNyc2N0cAorCitPcHRpb24gfCBEYXRhdHlw
ZSB8IHIvdworLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tCitTQ1RQX1JUT0lORk8gfCBzdHJ1Y3Qg
c2N0cF9ydG9pbmZvIHwgci93CitTQ1RQX0FTU09DSU5GTyB8IHN0cnVjdCBzY3RwX2Fzc29jcGFy
YW1zIHwgci93CitTQ1RQX0lOSVRNU0cgfCBzdHJ1Y3Qgc2N0cF9pbml0bXNnIHwgci93CitTQ1RQ
X05PREVMQVkgfCBpbnQgfCByL3cKK1NDVFBfQVVUT0NMT1NFIHwgaW50IHwgci93CitTQ1RQX1BS
SU1BUllfQUREUiB8IHN0cnVjdCBzY3RwX3NldHByaW0gfCByL3cKK1NDVFBfQURBUFRBVElPTl9M
QVlFUiB8IHN0cnVjdCBzY3RwX3NldGFkYXB0YXRpb24gfCByL3cKK1NDVFBfRElTQUJMRV9GUkFH
TUVOVFMgfCBpbnQgfCByL3cKK1NDVFBfUEVFUl9BRERSX1BBUkFNUyB8IHN0cnVjdCBzY3RwX3Bh
ZGRycGFyYW1zIHwgci93CitTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQUREUiB8IGludCB8IHIvdwor
U0NUUF9NQVhTRUcgfCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSB8IHIvdworU0NUUF9ERUxBWUVE
X1NBQ0sgfCBzdHJ1Y3Qgc2N0cF9zYWNrX2luZm8gfCByL3cKK1NDVFBfRlJBR01FTlRfSU5URVJM
RUFWRSB8IGludCB8IHIvdworU0NUUF9QQVJUSUFMX0RFTElWRVJZX1BPSU5UIHwgaW50IHwgci93
CitTQ1RQX0hNQUNfSURFTlQgfCBzdHJ1Y3Qgc2N0cF9obWFjYWxnbyB8IHIvdworU0NUUF9BVVRI
X0FDVElWRV9LRVkgfCBzdHJ1Y3Qgc2N0cF9hdXRoa2V5aWQgfCByL3cKK1NDVFBfQVVUT19BU0NP
TkYgfCBpbnQgfCByL3cKK1NDVFBfTUFYX0JVUlNUIHwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUg
fCByL3cKK1NDVFBfQ09OVEVYVCB8IHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIHwgci93CitTQ1RQ
X0VYUExJQ0lUX0VPUiB8IGludCB8IHIvdworU0NUUF9SRVVTRV9QT1JUIHwgaW50IHwgci93CitT
Q1RQX0VWRU5UIHwgc3RydWN0IHNjdHBfZXZlbnQgfCByL3cKK1NDVFBfUkVDVlJDVklORk8gfCBp
bnQgfCByL3cKK1NDVFBfUkVDVk5YVElORk8gfCBpbnQgfCByL3cKK1NDVFBfREVGQVVMVF9TTkRJ
TkZPIHwgc3RydWN0IHNjdHBfc25kaW5mbyB8IHIvdworU0NUUF9ERUZBVUxUX1BSSU5GTyB8IHN0
cnVjdCBzY3RwX2RlZmF1bHRfcHJpbmZvIHwgci93CitTQ1RQX1JFTU9URV9VRFBfRU5DQVBTX1BP
UlQgfCBzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMgfCByL3cKK1NDVFBfRU5BQkxFX1NUUkVBTV9SRVNF
VCB8IHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIHwgci93CitTQ1RQX1NUQVRVUyB8IHN0cnVjdCBz
Y3RwX3N0YXR1cyB8IHIKK1NDVFBfR0VUX1BFRVJfQUREUl9JTkZPIHwgc3RydWN0IHNjdHBfcGFk
ZHJpbmZvIHwgcgorU0NUUF9QRUVSX0FVVEhfQ0hVTktTIHwgc3RydWN0IHNjdHBfYXV0aGNodW5r
cyB8IHIKK1NDVFBfTE9DQUxfQVVUSF9DSFVOS1MgfCBzdHJ1Y3Qgc2N0cF9hdXRoY2h1bmtzIHwg
cgorU0NUUF9HRVRfQVNTT0NfTlVNQkVSIHwgdWludDMyX3QgfCByCitTQ1RQX0dFVF9BU1NPQ19J
RF9MSVNUIHwgc3RydWN0IHNjdHBfYXNzb2NfaWRzIHwgcgorU0NUUF9SRVNFVF9TVFJFQU1TIHwg
c3RydWN0IHNjdHBfcmVzZXRfc3RyZWFtcyB8IHcKK1NDVFBfUkVTRVRfQVNTT0MgfCBzdHJ1Y3Qg
c2N0cF9hc3NvY190IHwgdworU0NUUF9BRERfU1RSRUFNUyB8IHN0cnVjdCBzY3RwX2FkZF9zdHJl
YW1zIHwgdworCitGdXJ0aGVyIHVzYWdlIGRldGFpbHMgYXJlIGRlc2NyaWJlZCBpbiBbUkZDIDY0
NThdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NDU4KSwgW1JGQyA2NTI1XShodHRw
czovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjUyNSksIGFuZCBbZHJhZnQtaWV0Zi10c3Z3Zy1z
Y3RwLXVkcC1lbmNhcHMtMDNdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRm
LXRzdndnLXNjdHAtdWRwLWVuY2Fwcy0wMykgKHdvcmsgaW4gcHJvZ3Jlc3MpLgorCisjIyBTeXNj
dGwgdmFyaWFibGVzCisKK0luIGtlcm5lbCBpbXBsZW1lbnRhdGlvbnMgbGlrZSBmb3IgaW5zdGFu
Y2UgRnJlZUJTRCwgaXQgaXMgcG9zc2libGUgdG8gY2hhbmdlIHBhcmFtZXRlcnMgaW4gdGhlIG9w
ZXJhdGluZyBzeXN0ZW0uIFRoZXNlIHBhcmFtZXRlcnMgYXJlIGNhbGxlZCBzeXNjdGwgdmFyaWFi
bGVzLgorCitJbiB1c3JzY3RwIGFwcGxpY2F0aW9ucyBjYW4gc2V0IG9yIHJldHJpZXZlIHRoZXNl
IHZhcmlhYmxlcyB3aXRoIHRoZSBmdW5jdGlvbnMKK2BgYGMKK3ZvaWQgdXNyc2N0cF9zeXNjdGxf
c2V0XyAjIyAodWludDMyX3QgdmFsdWUpCitgYGAKK2FuZAorYGBgYwordWludDMyX3QgdXNyc2N0
cF9zeXNjdGxfZ2V0XyAjIyAodm9pZCkKK2BgYAorcmVzcGVjdGl2ZWx5LCB3aGVyZSBgIyNgIHN0
YW5kcyBmb3IgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlLgorCitJbiB0aGUgZm9sbG93aW5nIHBh
cmFncmFwaHMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgcGFyYW1ldGVycyB3aWxsIGJlIGdp
dmVuLgorCisjIyBNYW5pcHVsYXRlIE1lbW9yeQorIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0
cF9zZW5kc3BhY2UoKQorVGhlIHNwYWNlIG9mIHRoZSBhdmFpbGFibGUgc2VuZCBidWZmZXIgY2Fu
IGJlIGNoYW5nZWQgZnJvbSBpdHMgZGVmYXVsdCB2YWx1ZSBvZiAyNjIsMTQ0IGJ5dGVzIHRvIGEg
dmFsdWUgYmV0d2VlbiAwIGFuZCBgMl4zMiAtIDFgIGJ5dGVzLgorCisjIyMjIHVzcnNjdHBfc3lz
Y3RsX3NldF9zY3RwX3JlY3ZzcGFjZSgpCitUaGUgc3BhY2Ugb2YgdGhlIGF2YWlsYWJsZSByZWNl
aXZlIGJ1ZmZlciBjYW4gYmUgY2hhbmdlZCBmcm9tIGl0cyBkZWZhdWx0IHZhbHVlIG9mIDI2Miwx
NDQgYnl0ZXMgdG8gYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIGAyXjMyIC0gMWAgYnl0ZXMuCisKKyMj
IyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfaGFzaHRibHNpemUoKQorVGhlIFRDQiAoVGhyZWFk
IENvbnRyb2wgQmxvY2spIGhhc2ggdGFibGUgc2l6ZXMsIGkuZS4gdGhlIHNpemUgb2Ygb25lIFRD
QiBpbiB0aGUgaGFzaCB0YWJsZSwgY2FuIGJlIHR1bmVkIGJldHdlZW4gMSBhbmQgYDJeMzIgLSAx
YCBieXRlcy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMSwwMjQgYnl0ZXMuIEEgVENCIGNvbnRhaW5z
IGZvciBpbnN0YW5jZSBwb2ludGVycyB0byB0aGUgc29ja2V0LCB0aGUgZW5kcG9pbnQsIGluZm9y
bWF0aW9uIGFib3V0IHRoZSBhc3NvY2lhdGlvbiBhbmQgc29tZSBzdGF0aXN0aWMgZGF0YS4KKwor
IyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9wY2J0YmxzaXplKCkKK1RoZSBQQ0IgKFByb3Rv
Y29sIENvbnRyb2wgQmxvY2spIGhhc2ggdGFibGUgc2l6ZXMsIGkuZS4gdGhlIHNpemUgb2Ygb25l
IFBDQiBpbiB0aGUgaGFzaCB0YWJsZSwgY2FuIGJlIHR1bmVkIGJldHdlZW4gMSBhbmQgYDJeMzIg
LSAxYCBieXRlcy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMjU2IGJ5dGVzLiBUaGUgUENCIGNvbnRh
aW5zIGFsbCB2YXJpYWJsZXMgdGhhdCBjaGFyYWN0ZXJpemUgYW4gZW5kcG9pbnQuCisKKyMjIyMg
dXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfc3lzdGVtX2ZyZWVfcmVzY19saW1pdCgpCitUaGlzIHBh
cmFtZXRlcnMgdHVuZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNhY2hlZCByZXNvdXJjZXMgaW4g
dGhlIHN5c3RlbS4gSXQgY2FuIGJlIHNldCBiZXR3ZWVuIDAgYW5kIGAyXjMyIC0gMWAuIFRoZSBk
ZWZhdWx0IHZhbHVlIGlzIDEwMDAuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYXNv
Y19mcmVlX3Jlc2NfbGltaXQoKQorVGhpcyBwYXJhbWV0ZXJzIHR1bmVzIHRoZSBtYXhpbXVtIG51
bWJlciBvZiBjYWNoZWQgcmVzb3VyY2VzIGluIGFuIGFzc29jaWF0aW9uLiBJdCBjYW4gYmUgc2V0
IGJldHdlZW4gMCBhbmQgYDJeMzIgLSAxYC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAuCisKKyMj
IyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfbWJ1Zl90aHJlc2hvbGRfY291bnQoKQorRGF0YSBp
cyBzdG9yZWQgaW4gbWJ1ZnMuIFNldmVyYWwgbWJ1ZnMgY2FuIGJlIGNoYWluZWQgdG9nZXRoZXIu
IFRoZSBtYXhpbXVtIG51bWJlciBvZiBzbWFsbCBtYnVmcyBpbiBhIGNoYWluIGNhbiBiZSBzZXQg
d2l0aCB0aGlzIHBhcmFtZXRlciwgYmVmb3JlIGFuIG1idWYgY2x1c2V0IGlzIHVzZWQuIFRoZSBk
ZWZhdWx0IGlzIDUuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYWRkX21vcmVfdGhy
ZXNob2xkKCkKK1RCRAorVGhpcyBwYXJhbWV0ZXIgY29uZmlndXJlcyB0aGUgdGhyZXNob2xkIGJl
bG93IHdoaWNoIG1vcmUgc3BhY2Ugc2hvdWxkIGJlIGFkZGVkIHRvIGEgc29ja2V0IHNlbmQgYnVm
ZmVyLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxNDUyIGJ5dGVzLgorCisKKyMjIENvbmZpZ3VyZSBS
VE8KK1RoZSByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IChSVE8pLCBpLmUuIHRoZSB0aW1lIHRoYXQg
Y29udHJvbHMgdGhlIHJldHJhbnNtaXNzaW9uIG9mIG1lc3NhZ2VzLCBoYXMgc2V2ZXJhbCBwYXJh
bWV0ZXJzLCB0aGF0IGNhbiBiZSBjaGFuZ2VkLCBmb3IgZXhhbXBsZSB0byBzaG9ydGVuIHRoZSB0
aW1lLCBiZWZvcmUgYSBtZXNzYWdlIGlzIHJldHJhbnNtaXR0ZWQuIFRoZSByYW5nZSBvZiB0aGVz
ZSBwYXJhbWV0ZXJzIGlzIGJldHdlZW4gMCBhbmQgYDJeMzIgLSAxYG1zLgorCisjIyMjIHVzcnNj
dHBfc3lzY3RsX3NldF9zY3RwX3J0b19tYXhfZGVmYXVsdCgpCitUaGUgZGVmYXVsdCB2YWx1ZSBm
b3IgdGhlIG1heGltdW0gcmV0cmFuc21pc3Npb24gdGltZW91dCBpbiBtcyBpcyA2MCwwMDAgKDYw
c2VjcykuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfcnRvX21pbl9kZWZhdWx0KCkK
K1RoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgbWluaW11bSByZXRyYW5zbWlzc2lvbiB0aW1lb3V0
IGluIG1zIGlzIDEsMDAwICgxc2VjKS4KKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9y
dG9faW5pdGlhbF9kZWZhdWx0KCkKK1RoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgaW5pdGlhbCBy
ZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGluIG1zIGlzIDMsMDAwICgzc2VjKS4gVGhpcyB2YWx1ZSBp
cyBvbmx5IG5lZWRlZCBiZWZvcmUgdGhlIGZpcnN0IGNhbGN1bGF0aW9uIG9mIGEgcm91bmQgdHJp
cCB0aW1lIHRvb2sgcGxhY2UuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfaW5pdF9y
dG9fbWF4X2RlZmF1bHQoKQorVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBtYXhpbXVtIHJldHJh
bnNtaXNzaW9uIHRpbWVvdXQgZm9yIGFuIElOSVQgY2h1bmsgaW4gbXMgaXMgNjAsMDAwICg2MHNl
Y3MpLgorCisKKyMjIFNldCBUaW1lcnMKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfdmFs
aWRfY29va2llX2xpZmVfZGVmYXVsdCgpCitBIGNvb2tpZSBoYXMgYSBzcGVjaWZpZWQgbGlmZSB0
aW1lLiBJZiBpdCBleHBpcmVzIHRoZSBjb29raWUgaXMgbm90IHZhbGlkIGFueSBtb3JlIGFuZCBh
biBBQk9SVCBpcyBzZW50LiBUaGUgZGVmYXVsdCB2YWx1ZSBpbiBtcyBpcyA2MCwwMDAgKDYwc2Vj
cykuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfaGVhcnRiZWF0X2ludGVydmFsX2Rl
ZmF1bHQoKQorU2V0IHRoZSBkZWZhdWx0IHRpbWUgYmV0d2VlbiB0d28gaGVhcnRiZWF0cy4gVGhl
IGRlZmF1bHQgaXMgMzAsMDAwbXMuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfc2h1
dGRvd25fZ3VhcmRfdGltZV9kZWZhdWx0KCkKK0lmIGEgU0hVVERPV04gaXMgbm90IGFuc3dlcmVk
IHdpdGggYSBTSFVURE9XTi1BQ0sgd2hpbGUgdGhlIHNodXRkb3duIGd1YXJkIHRpbWVyIGlzIHN0
aWxsIHJ1bm5pbmcsIHRoZSBhc3NvY2lhdGlvbiB3aWxsIGJlIGFib3J0ZWQgYWZ0ZXIgdGhlIGRl
ZmF1bHQgb2YgMTgwc2Vjcy4KKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9wbXR1X3Jh
aXNlX3RpbWVfZGVmYXVsdCgpCitUQkQKK1RvIHNldCB0aGUgc2l6ZSBvZiB0aGUgcGFja2V0cyB0
byB0aGUgaGlnaGVzdCB2YWx1ZSBwb3NzaWJsZSwgdGhlIG1heGltdW0gdHJhbnNmZXIgdW5pdCAo
TVRVKSBvZiB0aGUgY29tcGxldGUgcGF0aCBoYXMgdG8gYmUga25vd24uIFRoZSBkZWZhdWx0IHRp
bWUgaW50ZXJ2YWwgZm9yIHRoZSBwYXRoIG10dSBkaXNjb3ZlcnkgaXMgNjAwc2Vjcy4KKworIyMj
IyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9zZWNyZXRfbGlmZXRpbWVfZGVmYXVsdCgpCitUQkQK
K1RoZSBkZWZhdWx0IHNlY3JldCBsaWZldGltZSBvZiBhIHNlcnZlciBpcyAzNjAwc2Vjcy4KKwor
IyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF92dGFnX3RpbWVfd2FpdCgpCitUQkQKK1Z0YWcg
dGltZSB3YWl0IHRpbWUsIDAgZGlzYWJsZXMgaXQuIERlZmF1bHQ6IDYwc2VjcworCisKKyMjIFNl
dCBGYWlsdXJlIExpbWl0cworVHJhbnNtaXNzaW9ucyBhbmQgcmV0cmFuc21pc3Npb25zIG9mIG1l
c3NhZ2VzIG1pZ2h0IGZhaWwuIFRvIHByb3RlY3QgdGhlIHN5c3RlbSBhZ2FpbnN0IHRvbyBtYW55
IHJldHJhbnNtaXNzaW9ucywgbGltaXRzIGhhdmUgdG8gYmUgZGVmaW5lZC4KKworIyMjIyB1c3Jz
Y3RwX3N5c2N0bF9zZXRfc2N0cF9pbml0X3J0eF9tYXhfZGVmYXVsdCgpCitUaGUgZGVmYXVsdCBt
YXhpbXVtIG51bWJlciBvZiByZXRyYW5zbWlzc2lvbnMgb2YgYW4gSU5JVCBjaHVua3MgaXMgOCwg
YmVmb3JlIGFuIEFCT1JUIGlzIHNlbnQuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBf
YXNzb2NfcnR4X21heF9kZWZhdWx0KCkKK1RoaXMgcGFyYW1ldGVyIHNldHMgdGhlIG1heGltdW0g
bnVtYmVyIG9mIGZhaWxlZCByZXRyYW5zbWlzc2lvbnMgYmVmb3JlIHRoZSBhc3NvY2lhdGlvbiBp
cyBhYm9ydGVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMC4KKworIyMjIyB1c3JzY3RwX3N5c2N0
bF9zZXRfc2N0cF9wYXRoX3J0eF9tYXhfZGVmYXVsdCgpCitUaGlzIHBhcmFtZXRlciBzZXRzIHRo
ZSBtYXhpbXVtIG51bWJlciBvZiBwYXRoIGZhaWx1cmVzIGJlZm9yZSB0aGUgYXNzb2NpYXRpb24g
aXMgYWJvcnRlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgNS4gTm90aWNlIHRoYXQgdGhlIG51bWJl
ciBvZiBwYXRocyBtdWx0aXBsaWVkIGJ5IHRoaXMgdmFsdWUgc2hvdWxkIGJlIGVxdWFsIHRvIGBz
Y3RwX2Fzc29jX3J0eF9tYXhfZGVmYXVsdGAuIFRoYXQgbWVhbnMgdGhhdCB0aGUgZGVmYXVsdCBj
b25maWd1cmF0aW9uIGlzIGdvb2QgZm9yIHR3byBwYXRocy4KKworIyMjIyB1c3JzY3RwX3N5c2N0
bF9zZXRfc2N0cF9tYXhfcmV0cmFuX2NodW5rKCkKK1RoZSBwYXJhbWV0ZXIgY29uZmlndXJlcyBo
b3cgbWFueSB0aW1lcyBhbiB1bmx1Y2t5IGNodW5rIGNhbiBiZSByZXRyYW5zbWl0dGVkIGJlZm9y
ZSB0aGUgYXNzb2NpYXRpb24gYWJvcnRzLiBUaGUgZGVmYXVsdCBpcyBzZXQgdG8gMzAuCisKKyMj
IyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfcGF0aF9wZl90aHJlc2hvbGQoKQorVEJECitEZWZh
dWx0IHBvdGVudGlhbGx5IGZhaWxlZCB0aHJlc2hvbGQuIERlZmF1bHQ6IDY1NTM1CQkKKworIyMj
IyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9hYm9ydF9pZl9vbmVfMl9vbmVfaGl0c19saW1pdCgp
CitUQkQKK1doZW4gb25lLTItb25lIGhpdHMgcWxpbWl0IGFib3J0LiBEZWZhdWx0OiAwCisKKwor
IyMgQ29udHJvbCB0aGUgU2VuZGluZyBvZiBTQUNLcworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRf
c2N0cF9zYWNrX2ZyZXFfZGVmYXVsdCgpCitUaGUgU0FDSyBmcmVxdWVuY3kgZGVmaW5lcyB0aGUg
bnVtYmVyIG9mIHBhY2tldHMgdGhhdCBhcmUgYXdhaXRlZCwgYmVmb3JlIGEgU0FDSyBpcyBzZW50
LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyLgorCisjIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3Rw
X2RlbGF5ZWRfc2Fja190aW1lX2RlZmF1bHQoKQorQXMgYSBTQUNLIChTZWxlY3RpdmUgQWNrbm93
bGVnbWVudCkgaXMgc2VudCBhZnRlciBldmVyeSBvdGhlciBwYWNrZXQsIGEgdGltZXIgaXMgc2V0
IHRvIHNlbmQgYSBTQUNLIGluIGNhc2UgYW5vdGhlciBwYWNrZXQgZG9lcyBub3QgYXJyaXZlIGlu
IGR1ZSB0aW1lLiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyB0aW1lciBpcyAyMDBtcy4KKwor
IyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9zdHJpY3Rfc2Fja3MoKQorVEJECitUaGlzIGlz
IGEgZmxhZyB0byB0dXJuIHRoZSBjb250cm9sbGluZyBvZiB0aGUgY29oZXJlbmNlIG9mIFNBQ0tz
IG9uIG9yIG9mZi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMSAob24pLgorCisjIyMjIHVzcnNjdHBf
c3lzY3RsX3NldF9zY3RwX25yX3NhY2tfb25fb2ZmKCkKK0lmIGEgc2xvdyBob3N0cyByZWNlaXZl
cyBkYXRhIG9uIGEgbG9zc3kgbGluayBpdCBpcyBwb3NzaWJsZSB0aGF0IGl0cyByZWNlaXZlciB3
aW5kb3cgaXMgZnVsbCBhbmQgbmV3IGRhdGEgY2FuIG9ubHkgYmUgYWNjZXB0ZWQgaWYgb25lIGNo
dW5rIHdpdGggYSBoaWdoZXIgVFNOIChUcmFuc21pc3Npb24gU2VxdWVuY2UgTnVtYmVyKSB0aGF0
IGhhcyBwcmV2aW91c2x5IGJlZW4gYWNrbm93bGVkZ2VkIGlzIGRyb3BwZWQuIEFzIGEgY29uc2Vx
dWVuY2UgdGhlIHNlbmRlciBoYXMgdG8gc3RvcmUgZGF0YSwgZXZlbiBpZiB0aGV5IGhhdmUgYmVl
biBhY2tub3dsZWRnZWQgaW4gY2FzZSB0aGV5IGhhdmUgdG8gYmUgcmV0cmFuc21pdHRlZC4gSWYg
dGhpcyBiZWhhdmlvciBpcyBub3QgbmVjZXNzYXJ5LCBub24tcmVuZWdhYmxlIFNBQ0tzIGNhbiBi
ZSB0dXJuZWQgb24uIEJ5IGRlZmF1bHQgdGhlIHVzZSBvZiBub24tcmVuZWdhYmxlIFNBQ0tzIGlz
IHR1cm5lZCBvZmYuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZW5hYmxlX3NhY2tf
aW1tZWRpYXRlbHkoKQorSW4gc29tZSBjYXNlcyBpdCBpcyBub3QgZGVzaXJhYmxlIHRvIHdhaXQg
Zm9yIHRoZSBTQUNLIHRpbWVyIHRvIGV4cGlyZSBiZWZvcmUgYSBTQUNLIGlzIHNlbnQuIEluIHRo
ZXNlIGNhc2VzIGEgYml0IGNhbGxlZCBTQUNLLUlNTUVESUFURUxZIChzZWUgW2RyYWZ0LXR1ZXhl
bi10c3Z3Zy1zY3RwLXNhY2staW1tZWRpYXRlbHktMDldKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcv
aHRtbC9kcmFmdC10dWV4ZW4tdHN2d2ctc2N0cC1zYWNrLWltbWVkaWF0ZWx5LTA5KSkgY2FuIGJl
IHNldCB0byBwcm92b2tlIHRoZSBpbnN0YW50IHNlbmRpbmcgb2YgYSBTQUNLLiBUaGUgZGVmYXVs
dCBpcyB0byB0dXJuIGl0IG9mZi4KKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9MMl9h
YmNfdmFyaWFibGUoKQorVEJECitTQ1RQIEFCQyBtYXggaW5jcmVhc2UgcGVyIFNBQ0sgKEwpLiBE
ZWZhdWx0OiAxCisKKyMjIENoYW5nZSBNYXggQnVyc3QKK01heCBidXJzdCBkZWZpbmVzIHRoZSBt
YXhpbXVtIG51bWJlciBvZiBwYWNrZXRzIHRoYXQgbWF5IGJlIHNlbnQgaW4gb25lIGZsaWdodC4K
KworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9tYXhfYnVyc3RfZGVmYXVsdCgpCitUaGUg
ZGVmYXVsdCB2YWx1ZSBmb3IgbWF4IGJ1cnN0IGlzIDAsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIG51
bWJlciBvZiBwYWNrZXRzIHNlbnQgYXMgYSBmbGlnaHQgaXMgbm90IGxpbWl0ZWQgYnkgdGhpcyBw
YXJhbWV0ZXIsIGJ1dCBtYXkgYmUgYnkgYW5vdGhlciBvbmUsIHNlZSB0aGUgbmV4dCBwYXJhZ3Jh
cGguCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfdXNlX2N3bmRfYmFzZWRfbWF4YnVy
c3QoKQorVGhlIHVzZSBvZiBtYXggYnVyc3QgaXMgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlIGNv
bmdlc3Rpb24gd2luZG93IChjd25kKS4gVGhpcyBwYXJhbWV0ZXIgaXMgc2V0IGJ5IGRlZmF1bHQu
CisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfaGJfbWF4YnVyc3QoKQorSGVhcnRiZWF0
cyBhcmUgbW9zdGx5IHVzZWQgdG8gdmVyaWZ5IGEgcGF0aC4gVGhlaXIgbnVtYmVyIGNhbiBiZSBs
aW1pdGVkLiBUaGUgZGVmYXVsdCBpcyA0LgorCisjIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3Rw
X2ZyX21heF9idXJzdF9kZWZhdWx0KCkKK0luIHRoZSBzdGF0ZSBvZiBmYXN0IHJldHJhbnNtaXNz
aW9uIHRoZSBudW1iZXIgb2YgcGFja2V0IGJ1cnN0cyBjYW4gYmUgbGltaXRlZC4gVGhlIGRlZmF1
bHQgdmFsdWUgaXMgNC4KKworCisjIyBIYW5kbGUgQ2h1bmtzCisjIyMjIHVzcnNjdHBfc3lzY3Rs
X3NldF9zY3RwX3BlZXJfY2h1bmtfb2goKQorSW4gb3JkZXIgdG8ga2VlcCB0cmFjayBvZiB0aGUg
cGVlcidzIGFkdmVydGlzZWQgcmVjZWl2ZXIgd2luZG93LCB0aGUgc2VuZGVyIGNhbGN1bGF0ZXMg
dGhlIHdpbmRvdyBieSBzdWJ0cmFjdGluZyB0aGUgYW1vdW50IG9mIGRhdGEgc2VudC4gWWV0LCBz
b21lIE9TcyByZWR1Y2UgdGhlIHJlY2VpdmVyIHdpbmRvdyBieSB0aGUgcmVhbCBzcGFjZSBuZWVk
ZWQgdG8gc3RvcmUgdGhlIGRhdGEuIFRoaXMgcGFyYW1ldGVyIHNldHMgdGhlIGFkZGl0aW9uYWwg
YW1vdW50IHRvIGRlYml0IHRoZSBwZWVyJ3MgcmVjZWl2ZXIgd2luZG93IHBlciBjaHVuayBzZW50
LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyNTYsIHdoaWNoIGlzIHRoZSB2YWx1ZSBuZWVkZWQgYnkg
RnJlZUJTRC4KKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9tYXhfY2h1bmtzX29uX3F1
ZXVlKCkKK1RoaXMgcGFyYW1ldGVyIHNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNodW5rcyB0
aGF0IGNhbiBiZSBxdWV1ZWQgcGVyIGFzc29jaWF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA1
MTIuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfbWluX3NwbGl0X3BvaW50KCkKK1RC
RAorVGhlIG1pbmltdW0gc2l6ZSB3aGVuIHNwbGl0dGluZyBhIGNodW5rIGlzIDI5MDQgYnl0ZXMg
YnkgZGVmYXVsdC4KKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9jaHVua3NjYWxlKCkK
K1RCRAorVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHR1bmVkIGZvciBzY2FsaW5nIG9mIG51bWJlciBv
ZiBjaHVua3MgYW5kIG1lc3NhZ2VzLiBUaGUgZGVmYXVsdCBpczEwLgorCisjIyMjIHVzcnNjdHBf
c3lzY3RsX3NldF9zY3RwX21pbl9yZXNpZHVhbCgpCitUQkQKK1RoaXMgcGFyYW1ldGVyIGNvbmZp
Z3VyZXMgdGhlIG1pbmltdW0gc2l6ZSBvZiB0aGUgcmVzaWR1YWwgZGF0YSBjaHVuayBpbiB0aGUg
c2Vjb25kIHBhcnQgb2YgdGhlIHNwbGl0LiBUaGUgZGVmYXVsdCBpcyAxNDUyLgorCisKKyMjIENh
bGN1bGF0ZSBSVFQKK1RoZSBjYWxjdWxhdGlvbiBvZiB0aGUgcm91bmQgdHJpcCB0aW1lIChSVFQp
IGRlcGVuZHMgb24gc2V2ZXJhbCBwYXJhbWV0ZXJzLgorCisjIyMjIHVzcnNjdHBfc3lzY3RsX3Nl
dF9zY3RwX3J0dHZhcl9idygpCitUQkQKK1NoaWZ0IGFtb3VudCBmb3IgYncgc21vb3RoaW5nIG9u
IHJ0dCBjYWxjLiBEZWZhdWx0OiA0CisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfcnR0
dmFyX3J0dCgpCitUQkQKK1NoaWZ0IGFtb3VudCBmb3IgcnR0IHNtb290aGluZyBvbiBydHQgY2Fs
Yy4gRGVmYXVsdDogNQorCisjIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX3J0dHZhcl9lcXJl
dCgpCitUQkQKK1doYXQgdG8gcmV0dXJuIHdoZW4gcnR0IGFuZCBidyBhcmUgdW5jaGFuZ2VkLiBE
ZWZhdWx0OiAwCisKKworIyMgSW5mbHVlbmNlIHRoZSBDb25nZXN0aW9uIENvbnRyb2wKK1RoZSBj
b25nZXN0aW9uIGNvbnRyb2wgc2hvdWxkIHByb3RlY3QgdGhlIG5ldHdvcmsgYWdhaW5zdCBmYXN0
IHNlbmRlcnMuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZWNuX2VuYWJsZQorRXhw
bGljaXQgY29uZ2VzdGlvbiBub3RpZmljYXRpb25zIGFyZSB0dXJuZWQgb24gYnkgZGVmYXVsdC4K
KworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWZhdWx0X2NjX21vZHVsZSgpCitUaGlz
IHBhcmFtZXRlciBzZXRzIHRoZSBkZWZhdWx0IGFsZ29yaXRobSBmb3IgdGhlIGNvbmdlc3Rpb24g
Y29udHJvbC4gRGVmYXVsdCBpcyAwLCBpLmUuIHRoZSBvbmUgc3BlY2lmaWVkIGluIFtSRkMgNDk2
MF0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ5NjApLgorCisjIyMjIHVzcnNjdHBf
c3lzY3RsX3NldF9zY3RwX2luaXRpYWxfY3duZCgpCitTZXQgdGhlIGluaXRpYWwgY29uZ2VzdGlv
biB3aW5kb3cgaW4gTVRVcy4gVGhlIGRlZmF1bHQgaXMgMy4KKworIyMjIyB1c3JzY3RwX3N5c2N0
bF9zZXRfc2N0cF91c2VfZGNjY19lY24oKQorVEJECitFbmFibGUgZm9yIFJUQ0MgQ0MgZGF0YWNl
bnRlciBFQ04uIERlZmF1bHQ6IDEKKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9zdGVh
ZHlfc3RlcCgpCitUQkQKK0hvdyBtYW55IHRoZSBzYW1lcyBpdCB0YWtlcyB0byB0cnkgc3RlcCBk
b3duIG9mIGN3bmQuIERlZmF1bHQ6IDIwCisKKworIyMgQ29uZmlndXJlIEFVVEggYW5kIEFERC1J
UAorQW4gaW1wb3J0YW50IGV4dGVuc2lvbiBvZiBTQ1RQIGlzIHRoZSBkeW5hbWljIGFkZHJlc3Mg
cmVjb25maWd1cmF0aW9uIChzZWUgW1JGQyA1MDYxXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0
bWwvcmZjNTA2MSkpLCBhbHNvIGtub3duIGFzIEFERC1JUCwgd2hpY2ggYWxsb3dzIHRoZSBjaGFu
Z2luZyBvZiBhZGRyZXNzZXMgZHVyaW5nIHRoZSBsaWZldGltZSBvZiBhbiBhc3NvY2lhdGlvbi4g
Rm9yIHRoaXMgZmVhdHVyZSB0aGUgQVVUSCBleHRlbnNpb24gKHNlZSBbUkZDIDQ4OTVdKGh0dHBz
Oi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0ODk1KSkgaXMgbmVjZXNzYXJ5LgorCisjIyMjIHVz
cnNjdHBfc3lzY3RsX3NldF9zY3RwX2F1dG9fYXNjb25mKCkKK0lmIFNDVFAgQXV0by1BU0NPTkYg
aXMgZW5hYmxlZCwgdGhlIHBlZXIgaXMgaW5mb3JtZWQgYXV0b21hdGljYWxseSB3aGVuIGEgbmV3
IGFkZHJlc3MKK2lzIGFkZGVkIG9yIHJlbW92ZWQuIFRoaXMgZmVhdHVyZSBpcyBlbmFibGVkIGJ5
IGRlZmF1bHQuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfbXVsdGlwbGVfYXNjb25m
cygpCitCeSBkZWZhdWx0IHRoZSBzZW5kaW5nIG9mIG11bHRpcGxlIEFTQ09ORnMgaXMgZGlzYWJs
ZWQuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYXV0aF9lbmFibGUoKQorVGhlIHVz
ZSBvZiBBVVRILCB3aGljaCBpcyBub3JtYWxseSB0dXJuZWQgb24sIGNhbiBiZSBkaXNhYmxlZCBi
eSBzZXR0aW5nIHRoaXMgcGFyYW1ldGVyIHRvIDAuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0
X3NjdHBfYXNjb25mX2F1dGhfbm9jaGsoKQorSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBkaXNhYmxl
IHRoZSByZXF1aXJlbWVudCB0byB1c2UgQVVUSCBpbiBjb25qdW5jdGlvbiB3aXRoIEFERC1JUCBi
eSBzZXR0aW5nIHRoaXMgcGFyYW1ldGVyCit0byAxLgorCisKKyMjIENvbmN1cnJlbnQgTXVsdGlw
YXRoIFRyYW5zZmVyIChDTVQpCitBIHByb21pbmVudCBmZWF0dXJlIG9mIFNDVFAgaXMgdGhlIHBv
c3NpYmlsaXR5IHRvIHVzZSBzZXZlcmFsIGFkZHJlc3NlcyBmb3IgdGhlIHNhbWUgYXNzb2NpYXRp
b24uIE9uZSBpcyB0aGUgcHJpbWFyeSBwYXRoLCBhbmQgdGhlIG90aGVycyBhcmUgbmVlZGVkIGlu
IGNhc2Ugb2YgYSBwYXRoIGZhaWx1cmUuIFVzaW5nIENNVCB0aGUgZGF0YSBpcyBzZW50IG9uIHNl
dmVyYWwgcGF0aHMgdG8gZW5oYW5jZSB0aGUgdGhyb3VnaHB1dC4KKworIyMjIyB1c3JzY3RwX3N5
c2N0bF9zZXRfc2N0cF9jbXRfb25fb2ZmKCkKK1RvIHR1cm4gQ01UIG9uLCB0aGlzIHBhcmFtZXRl
ciBoYXMgdG8gYmUgc2V0IHRvIDEuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfY210
X3VzZV9kYWMoKQorVG8gdXNlIGRlbGF5ZWQgYWNrbm93bGVkZ21lbnRzIHdpdGggQ01UIHRoaXMg
cGFyYW1ldGVyIGhhcyB0byBiZSBzZXQgdG8gMS4KKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRf
c2N0cF9idWZmZXJfc3BsaXR0aW5nKCkKK0ZvciBDTVQgaXQgbWFrZXMgc2Vuc2UgdG8gc3BsaXQg
dGhlIHNlbmQgYW5kIHJlY2VpdmUgYnVmZmVyIHRvIGhhdmUgc2hhcmVzIGZvciBlYWNoIHBhdGgu
IEJ5IGRlZmF1bHQgYnVmZmVyIHNwbGl0dGluZyBpcyB0dXJuZWQgb2ZmLgorCisKKyMjIE5ldHdv
cmsgQWRkcmVzcyBUcmFuc2xhdGlvbiAoTkFUKQorVG8gYmUgYWJsZSB0byBwYXNzIE5BVCBib3hl
cywgdGhlIGJveGVzIGhhdmUgdG8gaGFuZGxlIFNDVFAgcGFja2V0cyBpbiBhIHNwZWNpZmljIHdh
eS4KKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9uYXRfZnJpZW5kbHkoKQorU0NUUCBO
QVQgZnJpZW5kbHkgb3BlcmF0aW9uLiBEZWZhdWx0OjEKKworIyMjIyB1c3JzY3RwX3N5c2N0bF9z
ZXRfc2N0cF9pbml0c19pbmNsdWRlX25hdF9mcmllbmRseSgpCitFbmFibGUgc2VuZGluZyBvZiB0
aGUgbmF0LWZyaWVuZGx5IFNDVFAgb3B0aW9uIG9uIElOSVRzLiBEZWZhdWx0OiAwCisKKyMjIyMg
dXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfdWRwX3R1bm5lbGluZ19wb3J0KCkKK1NldCB0aGUgU0NU
UC9VRFAgdHVubmVsaW5nIHBvcnQuIERlZmF1bHQ6IDk4OTkKKworIyMgU0NUUCBNb2JpbGl0eQor
IyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9tb2JpbGl0eV9iYXNlKCkKK1RCRAorRW5hYmxl
IFNDVFAgYmFzZSBtb2JpbGl0eS4gRGVmYXVsdDogMAorCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxf
c2V0X3NjdHBfbW9iaWxpdHlfZmFzdGhhbmRvZmYoKQorVEJECitFbmFibGUgU0NUUCBmYXN0IGhh
bmRvZmYuIGRlZmF1bHQ6IDAKKworCisjIyBNaXNjZWxsYW5lb3VzCisjIyMjIHVzcnNjdHBfc3lz
Y3RsX3NldF9zY3RwX25vX2NzdW1fb25fbG9vcGJhY2soKQorQ2FsY3VsYXRpbmcgdGhlIGNoZWNr
c3VtIGZvciBwYWNrZXRzIHNlbnQgb24gbG9vcGJhY2sgaXMgdHVybmVkIG9mZiBieSBkZWZhdWx0
LiBUbyB0dXJuIGl0IG9uLCBzZXQgdGhpcyBwYXJhbWV0ZXIgdG8gMC4KKworIyMjIyB1c3JzY3Rw
X3N5c2N0bF9zZXRfc2N0cF9ucl9vdXRnb2luZ19zdHJlYW1zX2RlZmF1bHQoKQorVGhlIHBlZXIg
aXMgbm90aWZpZWQgYWJvdXQgdGhlIG51bWJlciBvZiBvdXRnb2luZyBzdHJlYW1zIGluIHRoZSBJ
TklUIG9yIElOSVQtQUNLIGNodW5rLiBUaGUgZGVmYXVsdCBpcyAxMC4KKworIyMjIyB1c3JzY3Rw
X3N5c2N0bF9zZXRfc2N0cF9kb19kcmFpbigpCitEZXRlcm1pbmVzIHdoZXRoZXIgU0NUUCBzaG91
bGQgcmVzcG9uZCB0byB0aGUgZHJhaW4gY2FsbHMuIERlZmF1bHQ6IDEJCQorCisjIyMjIHVzcnNj
dHBfc3lzY3RsX3NldF9zY3RwX3N0cmljdF9kYXRhX29yZGVyKCkKK1RCRAorRW5mb3JjZSBzdHJp
Y3QgZGF0YSBvcmRlcmluZywgYWJvcnQgaWYgY29udHJvbCBpbnNpZGUgZGF0YS4gRGVmYXVsdDog
MAorCisjIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2RlZmF1bHRfc3NfbW9kdWxlKCkKK1Nl
dCB0aGUgZGVmYXVsdCBzdHJlYW0gc2NoZWR1bGluZyBtb2R1bGUuIEltcGxlbWVudGVkIG1vZHVs
ZXMgYXJlOgorKiBTQ1RQX1NTX0RFRkFVTFQKKyogU0NUUF9TU19ST1VORF9ST0JJTgorKiBTQ1RQ
X1NTX1JPVU5EX1JPQklOX1BBQ0tFVAorKiBTQ1RQX1NTX1BSSU9SSVRZCisqIFNDVFBfU1NfRkFJ
Ul9CQU5EV0lUSAorKiBTQ1RQX1NTX0ZJUlNUX0NPTUUKKworIyMjIyB1c3JzY3RwX3N5c2N0bF9z
ZXRfc2N0cF9kZWZhdWx0X2ZyYWdfaW50ZXJsZWF2ZSgpCitUQkQKK0RlZmF1bHQgZnJhZ21lbnQg
aW50ZXJsZWF2ZSBsZXZlbC4gRGVmYXVsdDogMQorCisjIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9z
Y3RwX2JsYWNraG9sZSgpCitUQkQKK0VuYWJsZSBTQ1RQIGJsYWNraG9saW5nLiBEZWZhdWx0OiAw
CisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfbG9nZ2luZ19sZXZlbCgpCitTZXQgdGhl
IGxvZ2dpbmcgbGV2ZWwuIFRoZSBkZWZhdWx0IGlzIDAuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxf
c2V0X3NjdHBfZGVidWdfb24oKQorVHVybiBkZWJ1ZyBvdXRwdXQgb24gb3Igb2ZmLiBJdCBpcyBk
aXNhYmxlZCBieSBkZWZhdWx0LiBUbyBvYnRhaW4gZGVidWcgb3V0cHV0LCBgU0NUUF9ERUJVR2Ag
aGFzIHRvIGJlIHNldCBhcyBhIGNvbXBpbGUgZmxhZy4KKworCisjIyMgc3lzY3RsIHZhcmlhYmxl
cyBzdXBwb3J0ZWQgYnkgdXNyc2N0cAorCitQYXJhbWV0ZXIgfCBNZWFuaW5nIHwgRGVmYXVsdCBW
YWx1ZQorLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0KK3NjdHBfc2VuZHNwYWNl
IHwgU2VuZCBidWZmZXIgc3BhY2UgfCAxODY0MTM1CitzY3RwX3JlY3ZzcGFjZSB8IFJlY2VpdmUg
YnVmZmVyIHNwYWNlIHwgMTg2NDEzNQorc2N0cF9oYXNodGJsc2l6ZSB8IFR1bmFibGUgZm9yIFRD
QiBoYXNoIHRhYmxlIHNpemVzIHwgMTAyNAorc2N0cF9wY2J0YmxzaXplIHwgVHVuYWJsZSBmb3Ig
UENCIGhhc2ggdGFibGUgc2l6ZXMgfCAyNTYKK3NjdHBfc3lzdGVtX2ZyZWVfcmVzY19saW1pdCB8
IENhY2hlZCByZXNvdXJjZXMgaW4gdGhlIHN5c3RlbSB8IDEwMDAKK3NjdHBfYXNvY19mcmVlX3Jl
c2NfbGltaXQgfCBDYXNoZWQgcmVzb3VyY2VzIGluIGFuIGFzc29jaWF0aW9uIHwgMTAKK3NjdHBf
cnRvX21heF9kZWZhdWx0IHwgRGVmYXVsdCB2YWx1ZSBmb3IgUlRPX21heCB8IDYwMDAwbXMKK3Nj
dHBfcnRvX21pbl9kZWZhdWx0IHwgRGVmYXVsdCB2YWx1ZSBmb3IgUlRPX21pbiB8IDEwMDBtcwor
c2N0cF9ydG9faW5pdGlhbF9kZWZhdWx0IHwgRGVmYXVsdCB2YWx1ZSBmb3IgUlRPX2luaXRpYWwg
fCAzMDAwbXMKK3NjdHBfaW5pdF9ydG9fbWF4X2RlZmF1bHQgfCBEZWZhdWx0IHZhbHVlIGZvciB0
aGUgbWF4aW11bSBSVE8gZm9yIHNlbmRpbmcgYW4gSU5JVCB8IDYwMDAwbXMKK3NjdHBfdmFsaWRf
Y29va2llX2xpZmVfZGVmYXVsdCB8IFZhbGlkIGNvb2tpZSBsaWZlIHRpbWUgfCA2MDAwMG1zCitz
Y3RwX2luaXRfcnR4X21heF9kZWZhdWx0IHwgTWF4aW11bSBudW1iZXIgb2YgSU5JVCByZXRyYW5z
bWlzc2lvbnMgfCA4CitzY3RwX2Fzc29jX3J0eF9tYXhfZGVmYXVsdCB8IE1heGltdW0gbnVtYmVy
IG9mIGZhaWxlZCByZXRyYW5zbWlzc2lvbnMgYmVmb3JlIHRoZSBhc3NvY2lhdGlvbiBpcyBhYm9y
dGVkIHwgMTAKK3NjdHBfcGF0aF9ydHhfbWF4X2RlZmF1bHQgfCBNYXhpbXVtIG51bWJlciBvZiBm
YWlsZWQgcmV0cmFuc21pc3Npb25zIGJlZm9yZSBhIHBhdGggZmFpbHMgfCA1CitzY3RwX2Vjbl9l
bmFibGUgfCBFbmFibGluZyBleHBsaWNpdCBjb25nZXN0aW9uIG5vdGlmaWNhdGlvbnMgfCAxCitz
Y3RwX3N0cmljdF9zYWNrcyB8IENvbnRyb2wgdGhlIGNvaGVyZW5jZSBvZiBTQUNLcyB8IDEKK3Nj
dHBfZGVsYXllZF9zYWNrX3RpbWVfZGVmYXVsdCB8IERlZmF1bHQgZGVsYXllZCBTQUNLIHRpbWVy
IHwgMjAwbXMKK3NjdHBfc2Fja19mcmVxX2RlZmF1bHQgfCBEZWZhdWx0IFNBQ0sgZnJlcXVlbmN5
IHwgMgorc2N0cF9ucl9zYWNrX29uX29mZiB8IFR1cm4gbm9uLXJlbmVnYWJsZSBTQUNLcyBvbiBv
ciBvZmYgfCAwCitzY3RwX2VuYWJsZV9zYWNrX2ltbWVkaWF0ZWx5IHwgRW5hYmxlIHNlbmRpbmcg
b2YgdGhlIFNBQ0stSU1NRURJQVRFTFkgYml0IHwgMAorc2N0cF9ub19jc3VtX29uX2xvb3BiYWNr
IHwgRW5hYmxlIHRoZSBjb21waWxhdGlvbiBvZiB0aGUgY2hlY2tzdW0gb24gcGFja2V0cyBzZW50
IG9uIGxvb3BiYWNrIHwgMQorc2N0cF9wZWVyX2NodW5rX29oIHwgQW1vdW50IHRvIGRlYml0IHBl
ZXJzIHJ3bmQgcGVyIGNodW5rIHNlbnQgfCAyNTYKK3NjdHBfbWF4X2J1cnN0X2RlZmF1bHQgfCBE
ZWZhdWx0IG1heCBidXJzdCBmb3IgU0NUUCBlbmRwb2ludHMgfCAwCitzY3RwX3VzZV9jd25kX2Jh
c2VkX21heGJ1cnN0IHwgVXNlIG1heCBidXJzdCBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgY29u
Z2VzdGlvbiB3aW5kb3cgfCAxCitzY3RwX2hiX21heGJ1cnN0IHwgQ29uZmlybWF0aW9uIEhlYXJ0
YmVhdCBtYXggYnVyc3QgfCA0CitzY3RwX21heF9jaHVua3Nfb25fcXVldWUgfCBEZWZhdWx0IG1h
eCBjaHVua3Mgb24gcXVldWUgcGVyIGFzb2MgfCA1MTIKK3NjdHBfbWluX3NwbGl0X3BvaW50IHwg
TWluaW11bSBzaXplIHdoZW4gc3BsaXR0aW5nIGEgY2h1bmsgfCAyOTA0CitzY3RwX2NodW5rc2Nh
bGUgfCBUdW5hYmxlIGZvciBTY2FsaW5nIG9mIG51bWJlciBvZiBjaHVua3MgYW5kIG1lc3NhZ2Vz
IHwgMTAKK3NjdHBfbWJ1Zl90aHJlc2hvbGRfY291bnQgfCBNYXhpbXVtIG51bWJlciBvZiBzbWFs
bCBtYnVmcyBpbiBhIGNoYWluIHwgNQorc2N0cF9oZWFydGJlYXRfaW50ZXJ2YWxfZGVmYXVsdCB8
IERlYWZ1bHQgdGltZSBiZXR3ZWVuIHR3byBIZWFydGJlYXRzIHwgMzAwMDBtcworc2N0cF9wbXR1
X3JhaXNlX3RpbWVfZGVmYXVsdCB8IERlZmF1bHQgUE1UVSByYWlzZSB0aW1lciB8IDYwMHNlY3MK
K3NjdHBfc2h1dGRvd25fZ3VhcmRfdGltZV9kZWZhdWx0IHwgRGVmYXVsdCBzaHV0ZG93biBndWFy
ZCB0aW1lciB8IDE4MHNlY3MKK3NjdHBfc2VjcmV0X2xpZmV0aW1lX2RlZmF1bHQgfCBEZWZhdWx0
IHNlY3JldCBsaWZldGltZSB8IDM2MDBzZWNzCitzY3RwX2FkZF9tb3JlX3RocmVzaG9sZCB8IFRo
cmVzaG9sZCB3aGVuIG1vcmUgc3BhY2Ugc2hvdWxkIGJlIGFkZGVkIHRvIGEgc29ja2V0IHNlbmQg
YnVmZmVyIHwgMTQ1Mgorc2N0cF9ucl9vdXRnb2luZ19zdHJlYW1zX2RlZmF1bHQgfCBEZWZhdWx0
IG51bWJlciBvZiBvdXRnb2luZyBzdHJlYW1zIHwgMTAKK3NjdHBfY210X29uX29mZiB8IFR1cm4g
Q01UIG9uIG9yIG9mZi4gfCAwCitzY3RwX2NtdF91c2VfZGFjIHwgVXNlIGRlbGF5ZWQgYWNrbm93
bGVkZ21lbnQgZm9yIENNVCB8IDAKK3NjdHBfZnJfbWF4X2J1cnN0X2RlZmF1bHQgfCBEZWZhdWx0
IG1heCBidXJzdCBmb3IgU0NUUCBlbmRwb2ludHMgd2hlbiBmYXN0IHJldHJhbnNtaXR0aW5nIHwg
NAorc2N0cF9hdXRvX2FzY29uZiB8IEVuYWJsZSBTQ1RQIEF1dG8tQVNDT05GIHwgMQorc2N0cF9t
dWx0aXBsZV9hc2NvbmZzIHwgRW5hYmxlIFNDVFAgTXVsaXBsZS1BU0NPTkZzIHwgMAorc2N0cF9h
c2NvbmZfYXV0aF9ub2NoayB8IERpc2FibGUgU0NUUCBBU0NPTkYgQVVUSCByZXF1aXJlbWVudCB8
IDAKK3NjdHBfYXV0aF9kaXNhYmxlIHwgRGlzYWJsZSBTQ1RQIEFVVEggZnVuY3Rpb24gfCAwCitz
Y3RwX25hdF9mcmllbmRseSB8IFNDVFAgTkFUIGZyaWVuZGx5IG9wZXJhdGlvbiB8IDEKK3NjdHBf
aW5pdHNfaW5jbHVkZV9uYXRfZnJpZW5kbHkgfCBFbmFibGUgc2VuZGluZyBvZiB0aGUgbmF0LWZy
aWVuZGx5IFNDVFAgb3B0aW9uIG9uIElOSVRzLiB8IDAKK3NjdHBfdWRwX3R1bm5lbGluZ19wb3J0
IHwgU2V0IHRoZSBTQ1RQL1VEUCB0dW5uZWxpbmcgcG9ydCB8IDk4OTkKK3NjdHBfZG9fZHJhaW4g
fCBEZXRlcm1pbmVzIHdoZXRoZXIgU0NUUCBzaG91bGQgcmVzcG9uZCB0byB0aGUgZHJhaW4gY2Fs
bHMgfCAxCitzY3RwX2Fib3J0X2lmX29uZV8yX29uZV9oaXRzX2xpbWl0IHwgV2hlbiBvbmUtMi1v
bmUgaGl0cyBxbGltaXQgYWJvcnQgfCAwCitzY3RwX3N0cmljdF9kYXRhX29yZGVyIHwgRW5mb3Jj
ZSBzdHJpY3QgZGF0YSBvcmRlcmluZywgYWJvcnQgaWYgY29udHJvbCBpbnNpZGUgZGF0YSB8IDAK
K3NjdHBfbWluX3Jlc2lkdWFsIHwgTWluaW11bSByZXNpZHVhbCBkYXRhIGNodW5rIGluIHNlY29u
ZCBwYXJ0IG9mIHNwbGl0IHwgMTQ1Mgorc2N0cF9tYXhfcmV0cmFuX2NodW5rIHwgTWF4aW11bSB0
aW1lcyBhbiB1bmx1Y2t5IGNodW5rIGNhbiBiZSByZXRyYW5zbWl0dGVkIGJlZm9yZSB0aGUgYXNz
b2NpYXRpb24gYWJvcnRzIHwgMzAKK3NjdHBfZGVmYXVsdF9jY19tb2R1bGUgfCBEZWZhdWx0IGNv
bmdlc3Rpb24gY29udHJvbCBtb2R1bGUgfCAwCitzY3RwX2RlZmF1bHRfc3NfbW9kdWxlIHwgRGVm
YXVsdCBzdHJlYW0gc2NoZWR1bGluZyBtb2R1bGUgfCAwCitzY3RwX2RlZmF1bHRfZnJhZ19pbnRl
cmxlYXZlIHwgRGVmYXVsdCBmcmFnbWVudCBpbnRlcmxlYXZlIGxldmVsIHwgMQorc2N0cF9tb2Jp
bGl0eV9iYXNlIHwgRW5hYmxlIFNDVFAgYmFzZSBtb2JpbGl0eSB8IDAKK3NjdHBfbW9iaWxpdHlf
ZmFzdGhhbmRvZmYgfCBFbmFibGUgU0NUUCBmYXN0IGhhbmRvZmYgfCAwCitzY3RwX0wyX2FiY192
YXJpYWJsZSB8IFNDVFAgQUJDIG1heCBpbmNyZWFzZSBwZXIgU0FDSyAoTCkgfCAxCitzY3RwX3Z0
YWdfdGltZV93YWl0IHwgVnRhZyB0aW1lIHdhaXQgdGltZSwgMCBkaXNhYmxlcyBpdC4gfCA2MHNl
Y3MKK3NjdHBfYmxhY2tob2xlIHwgRW5hYmxlIFNDVFAgYmxhY2tob2xpbmcgfCAwCitzY3RwX3Bh
dGhfcGZfdGhyZXNob2xkIHwgRGVmYXVsdCBwb3RlbnRpYWxseSBmYWlsZWQgdGhyZXNob2xkIHwg
NjU1MzUKK3NjdHBfcnR0dmFyX2J3IHwgU2hpZnQgYW1vdW50IGZvciBidyBzbW9vdGhpbmcgb24g
cnR0IGNhbGMgfCA0CitzY3RwX3J0dHZhcl9ydHQgfCBTaGlmdCBhbW91bnQgZm9yIHJ0dCBzbW9v
dGhpbmcgb24gcnR0IGNhbGMgfCA1CitzY3RwX3J0dHZhcl9lcXJldCAgfCBXaGF0IHRvIHJldHVy
biB3aGVuIHJ0dCBhbmQgYncgYXJlIHVuY2hhbmdlZCB8IDAKK3NjdHBfc3RlYWR5X3N0ZXAgfCBI
b3cgbWFueSB0aGUgc2FtZXMgaXQgdGFrZXMgdG8gdHJ5IHN0ZXAgZG93biBvZiBjd25kIHwgMjAK
K3NjdHBfdXNlX2RjY2NfZWNuIHwgRW5hYmxlIGZvciBSVENDIENDIGRhdGFjZW50ZXIgRUNOIHwg
MQorc2N0cF9idWZmZXJfc3BsaXR0aW5nIHwgRW5hYmxlIHNlbmQvcmVjZWl2ZSBidWZmZXIgc3Bs
aXR0aW5nIHwgMAorc2N0cF9pbml0aWFsX2N3bmQgfCBJbml0aWFsIGNvbmdlc3Rpb24gd2luZG93
IGluIE1UVXMgfCAzCitzY3RwX2xvZ2dpbmdfbGV2ZWwgfCBMb2dnaW5nIGxldmVsIHwgMAorc2N0
cF9kZWJ1Z19vbiB8IFR1cm5zIGRlYnVnIG91dHB1dCBvbiBvciBvZmYuIHwgMAorCisjIyBFeGFt
cGxlcworCitTZWUgaHR0cHM6Ly9naXRodWIuY29tL3NjdHBsYWIvdXNyc2N0cC90cmVlL21hc3Rl
ci9wcm9ncmFtcworCisKKyMjIFJlZmVyZW5jZXMKKworIyMjIyBTQ1RQCitSLiBTdGV3YXJ0Ojwv
YnI+CitgU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sYC48L2JyPgorW1JGQyA0
OTYwXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDk2MCksIFNlcHRlbWJlciAyMDA3
LgorCisjIyMjIGF1dGgKK00uIFTDvHhlbiwgUi4gU3Rld2FydCwgUC4gTGVpLCBhbmQgRS4gUmVz
Y29ybGE6PC9icj4KK2BBdXRoZW50aWNhdGVkIENodW5rcyBmb3IgdGhlIFN0cmVhbSBDb250cm9s
IFRyYW5zbWlzc2lvbiBQcm90b2NvbCAoU0NUUClgLjwvYnI+CitbUkZDIDQ4OTVdKGh0dHBzOi8v
dG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0ODk1KSwgQXVndXN0IDIwMDcuCisKKyMjIyMgYWRkaXAK
K1IuIFN0ZXdhcnQsIFEuIFhpZSwgTS4gVMO8eGVuLCBTLiBNYXJ1eWFtYSwgYW5kIE0uIEtvenVr
YTo8L2JyPgorYFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbCAoU0NUUCkgRHlu
YW1pYyBBZGRyZXNzIFJlY29uZmlndXJhdGlvbmAuPC9icj4KK1tSRkMgNTA2MV0oaHR0cHM6Ly90
b29scy5pZXRmLm9yZy9odG1sL3JmYzUwNjEpLCBTZXB0ZW1iZXIgMjAwNy4KKworIyMjIyBzb2Nr
ZXRBUEkKK1IuIFN0ZXdhcnQsIE0uIFTDvHhlbiwgSy4gUG9vbiwgYW5kIFYuIFlhc2V2aWNoOjwv
YnI+CitgU29ja2V0cyBBUEkgRXh0ZW5zaW9ucyBmb3IgdGhlIFN0cmVhbSBDb250cm9sIFRyYW5z
bWlzc2lvbiBQcm90b2NvbCAoU0NUUClgLjwvYnI+CitbUkZDIDY0NThdKGh0dHBzOi8vdG9vbHMu
aWV0Zi5vcmcvaHRtbC9yZmM2NDU4KSwgRGV6ZW1iZXIgMjAxMS4KKworIyMjIyBzdHJlYW1SZXNl
dAorUi4gU3Rld2FydCwgTS4gVMO8eGVuLCBhbmQgUC4gTGVpOjwvYnI+CitgU3RyZWFtIENvbnRy
b2wgVHJhbnNtaXNzaW9uIFByb3RvY29sIChTQ1RQKSBTdHJlYW0gUmVjb25maWd1cmF0aW9uYC48
L2JyPgorW1JGQyA2NTI1XShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjUyNSksIEZl
YnJ1YXJ5IDIwMTIuCisKKyMjIyMgdWRwZW5jYXBzCitNLiBUw7x4ZW4gYW5kIFIuIFN0ZXdhcnQ8
L2JyPgorYFVEUCBFbmNhcHN1bGF0aW9uIG9mIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQ
cm90b2NvbCAoU0NUUCkgUGFja2V0cyBmb3IgRW5kLUhvc3QgdG8gRW5kLUhvc3QgQ29tbXVuaWNh
dGlvbmA8L2JyPgorW1JGQyA2OTUxXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjk1
MSksIE1heSAyMDEzLgorCisjIyMjIHNhY2staW1tCitNLiBUw7x4ZW4sIEkuIFLDvG5nZWxlciwg
YW5kIFIuIFN0ZXdhcnQ6PC9icj4KK2BTQUNLLUlNTUVESUFURUxZIEV4dGVuc2lvbiBmb3IgdGhl
IFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbGA8L2JyPgorW1JGQyA3MDUzXSho
dHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzA1MyksIE5vdmVtYmVyIDIwMTMuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi9NYW51YWwudGV4IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvTWFudWFsLnRleApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjMyNzExZWU5NzQ1YQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL01hbnVhbC50ZXgKQEAgLTAsMCArMSwxMzM0IEBACislCislIENv
cHlyaWdodCAoQykgMjAxMi0yMDE1IElyZW5lIFJ1ZW5nZWxlcgorJSBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxNSBNaWNoYWVsIFR1ZXhlbgorJQorJSBBbGwgcmlnaHRzIHJlc2VydmVkLgorJQorJSBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyUgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCislIGFyZSBtZXQ6CislIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CislICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyUgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyUgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorJSAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorJSAzLiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRy
aWJ1dG9ycworJSAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyUgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCislCislIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECislIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
JSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQorJSBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorJSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorJSBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUworJSBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyUgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QK
KyUgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWQorJSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCislIFNVQ0ggREFNQUdFLgorJQor
XGRvY3VtZW50Y2xhc3NbYTRwYXBlcl17YXJ0aWNsZX0KKyUKK1x1c2VwYWNrYWdle2xvbmd0YWJs
ZX0KKyUKK1x0aXRsZXtTb2NrZXQgQVBJIGZvciB0aGUgU0NUUCBVc2VyLWxhbmQgSW1wbGVtZW50
YXRpb24gKHVzcnNjdHApfQorXGF1dGhvcntJLn5SXCJ1bmdlbGVyJQorICAgICAgICBcdGhhbmtz
e01cInVuc3RlciBVbml2ZXJzaXR5IG9mIEFwcGxpZWQgU2NpZW5jZXMsCisgICAgICAgICAgICAg
ICAgRGVwYXJ0bWVudCBvZiBFbGVjdHJpY2FsIEVuZ2luZWVyaW5nCisgICAgICAgICAgICAgICAg
YW5kIENvbXB1dGVyIFNjaWVuY2UsCisgICAgICAgICAgICAgICAgU3RlZ2Vyd2FsZHN0ci5+Mzks
CisgICAgICAgICAgICAgICAgRC00ODU2NSBTdGVpbmZ1cnQsCisgICAgICAgICAgICAgICAgR2Vy
bWFueSwKKyAgICAgICAgICAgICAgICBcdGV4dHR0e2kucnVlbmdlbGVyQGZoLW11ZW5zdGVyLmRl
fS59CisgICAgICAgIFxhbmQKKyAgICAgICAgTS5+VFwidXhlbiUKKyAgICAgICAgXHRoYW5rc3tN
XCJ1bnN0ZXIgVW5pdmVyc2l0eSBvZiBBcHBsaWVkIFNjaWVuY2VzLAorICAgICAgICAgICAgICAg
IERlcGFydG1lbnQgb2YgRWxlY3RyaWNhbCBFbmdpbmVlcmluZworICAgICAgICAgICAgICAgIGFu
ZCBDb21wdXRlciBTY2llbmNlLAorICAgICAgICAgICAgICAgIFN0ZWdlcndhbGRzdHIufjM5LAor
ICAgICAgICAgICAgICAgIEQtNDg1NjUgU3RlaW5mdXJ0LAorICAgICAgICAgICAgICAgIEdlcm1h
bnksCisgICAgICAgICAgICAgICAgXHRleHR0dHt0dWV4ZW5AZmgtbXVlbnN0ZXIuZGV9Ln0KK30K
KyUKK1xiZWdpbntkb2N1bWVudH0KK1xzZXRjb3VudGVye3NlY251bWRlcHRofXs0fQorXHNldGNv
dW50ZXJ7dG9jZGVwdGh9ezR9CitcbWFrZXRpdGxlCitcdGFibGVvZmNvbnRlbnRzCisKK1xzZWN0
aW9ue0ludHJvZHVjdGlvbn0KK0luIHRoaXMgbWFudWFsIHRoZSBzb2NrZXQgQVBJIGZvciB0aGUg
U0NUUCBVc2VyLWxhbmQgaW1wbGVtZW50YXRpb24gd2lsbCBiZSBkZXNjcmliZWQuIAorSXQgaXMg
YmFzZWQgb24gUkZDIDY0NTh+XGNpdGV7c29ja2V0QVBJfS4gVGhlIG1haW4gZm9jdXMgb2YgdGhp
cyBkb2N1bWVudCBpcyBvbiBwb2ludGluZyBvdXQKKyB0aGUgZGlmZmVyZW5jZXMgdG8gdGhlIFND
VFAgU29ja2V0cyBBUEkuIEZvciBhbGwgYXNwZWN0cyBvZiB0aGUgc29ja2V0cyBBUEkgdGhhdCBh
cmUgbm90CisgbWVudGlvbmVkIGluIHRoaXMgZG9jdW1lbnQsIHBsZWFzZSByZWZlciB0byBSRkN+
NjQ1OC4gUXVlc3Rpb25zIGFib3V0IFNDVFAgY2FuIGhvcGVmdWxseSBiZQorIGFuc3dlcmVkIGJ5
IFJGQ340OTYwflxjaXRle1NDVFB9LgorIAorXHNlY3Rpb257R2V0dGluZyBTdGFydGVkfQorVGhl
IFVzZXItbGFuZCBzdGFjayBoYXMgYmVlbiB0ZXN0ZWQgb24gRnJlZUJTRCAxMC4wLCBVYnVudHUg
MTEuMTAsIFdpbmRvd3MgNywgTWFjIE9TIFggMTAuNiwgCithbmQgTUFDIE9TIFggMTAuNy4KK1Ro
ZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIFVzZXItbGFuZCBzdGFjayBpcyBwcm92aWRlZCBvbiBc
dGV4dGl0e2h0dHA6Ly9zY3RwLmZoLW11ZW5zdGVyLmRlL3NjdHAtdXNlci1sYW5kLXN0YWNrLmh0
bWx9LgorRG93bmxvYWQgdGhlIHRhcmJhbGwgYW5kIHVudGFyIGl0IGluIGEgZm9sZGVyIG9mIHlv
dXIgY2hvaWNlLiAKK1RoZSB0YXJiYWxsIGNvbnRhaW5zIGFsbCB0aGUgc291cmNlcyB0byBidWls
ZCB0aGUgbGlidXNyc2N0cCwgd2hpY2ggaGFzIHRvIGJlIGxpbmtlZCB0byB0aGUgb2JqZWN0IGZp
bGUgb2YgYW4gCitleGFtcGxlIHByb2dyYW0uIEluIGFkZGl0aW9uIHRoZXJlIGFyZSB0d28gYXBw
bGljYXRpb25zIGluIHRoZSBmb2xkZXIgXHRleHRpdHtwcm9ncmFtc30gdGhhdCBjYW4gYmUgYnVp
bHQgYW5kIHJ1bi4KKyAKK1xzdWJzZWN0aW9ue0J1aWxkaW5nIHRoZSBMaWJyYXJ5IGFuZCB0aGUg
QXBwbGljYXRpb25zfQorXHN1YnN1YnNlY3Rpb257VW5peC1saWtlIE9wZXJhdGluZyBTeXN0ZW1z
fQorSW4gdGhlIGZvbGRlciBcdGV4dGl0e3VzcnNjdHB9IHR5cGUKK1xiZWdpbnt2ZXJiYXRpbX0K
Ky4vYm9vdHN0cmFwCisuL2NvbmZpZ3VyZQorbWFrZQorXGVuZHt2ZXJiYXRpbX0KK05vdywgdGhl
IGxpYnJhcnkgXHRleHRpdHtsaWJ1c3JzY3RwLmxhfSBoYXMgYmVlbiBidWlsdCBpbiB0aGUgc3Vi
ZGlyZWN0b3J5IFx0ZXh0aXR7dXNyc2N0cGxpYn0sIGFuZCB0aGUgZXhhbXBsZSAKK3Byb2dyYW1z
IGFyZSByZWFkeSB0byBydW4gZnJvbSB0aGUgc3ViZGlyZWN0b3J5IFx0ZXh0aXR7cHJvZ3JhbXN9
LgorCitJZiB5b3UgaGF2ZSByb290IHByaXZpbGVnZXMgb3IgYXJlIGluIHRoZSBzdWRvZXIgZ3Jv
dXAsIHlvdSBjYW4gaW5zdGFsbCB0aGUgbGlicmFyeSBpbiBcdGV4dGl0ey91c3IvbG9jYWwvbGli
fSAKK2FuZCBjb3B5IHRoZSBoZWFkZXIgZmlsZSB0byBcdGV4dGl0ey91c3IvaW5jbHVkZX0gd2l0
aCB0aGUgY29tbWFuZAorXGJlZ2lue3ZlcmJhdGltfQorc3VkbyBtYWtlIGluc3RhbGwKK1xlbmR7
dmVyYmF0aW19CisKK1xzdWJzdWJzZWN0aW9ue1dpbmRvd3N9CitPbiBXaW5kb3dzIHlvdSBuZWVk
IGEgY29tcGlsZXIgbGlrZSBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpby4gWW91IGNhbiBidWlsZCB0
aGUgbGlicmFyeSBhbmQgdGhlCitleGFtcGxlIHByb2dyYW1zIHdpdGggdGhlIGNvbW1hbmQgbGlu
ZSB0b29sIG9mIHRoZSBjb21waWxlciBieSB0eXBpbmcKK1xiZWdpbnt2ZXJiYXRpbX0KK25tYWtl
IC1mIE1ha2VmaWxlLm5tYWtlCitcZW5ke3ZlcmJhdGltfQoraW4gdGhlIGRpcmVjdG9yeSBcdGV4
dGl0e3VzcnNjdHB9LgorCitcc3Vic2VjdGlvbntSdW5uaW5nIHRoZSBUZXN0IFByb2dyYW1zfQor
VGhlcmUgYXJlIHR3byB0ZXN0IHByb2dyYW1zIGluY2x1ZGVkLCBhIGRpc2NhcmQgc2VydmVyIGFu
ZCBhIGNsaWVudC4gWW91IGNhbiBydW4gYm90aCB0byBzZW5kIGRhdGEgZnJvbSB0aGUKK2NsaWVu
dCB0byB0aGUgc2VydmVyLiBUaGUgY2xpZW50IHJlYWRzIGRhdGEgZnJvbSBzdGRpbiBhbmQgc2Vu
ZHMgdGhlbSB0byB0aGUgc2VydmVyLCB3aGljaCBwcmludHMgdGhlIG1lc3NhZ2UKK2luIHRoZSB0
ZXJtaW5hbCBhbmQgZGlzY2FyZHMgaXQuIFRoZSBzb3VyY2VzIG9mIHRoZSBzZXJ2ZXIgYXJlIGFs
c28gcHJvdmlkZWQgaW4gU2VjdGlvbn5ccmVme3NlcnZlcn0gYW5kIHRob3NlCitvZiB0aGUgY2xp
ZW50IGluIFNlY3Rpb25+XHJlZntjbGllbnR9LgorCitcc3Vic3Vic2VjdGlvbntVc2luZyBVRFAg
RW5jYXBzdWxhdGlvbn0KK0JvdGggcHJvZ3JhbXMgY2FuIGVpdGhlciBzZW5kIGRhdGEgb3ZlciBT
Q1RQIGRpcmVjdGx5IG9yIHVzZSBVRFAgZW5jYXBzdWxhdGlvbiwgdGh1cyBlbmNhcHN1bGF0aW5n
IHRoZQorU0NUUCBwYWNrZXQgaW4gYSBVRFAgZGF0YWdyYW0uIFRoZSBmaXJzdCBtb2RlIHdvcmtz
IG9uIGxvb3BiYWNrIG9yIGluIGEgcHJvdGVjdGVkIHNldHVwIHdpdGhvdXQgYW55IAorTkFUIGJv
eGVzIGludm9sdmVkLiBJbiBhbGwgb3RoZXIgY2FzZXMgaXQgaXMgYmV0dGVyIHRvIHVzZSBVRFAg
ZW5jYXBzdWxhdGlvbi4KKworVGhlIHVzYWdlIG9mIHRoZSBkaXNjYXJkXF9zZXJ2ZXIgaXMKK1xi
ZWdpbnt2ZXJiYXRpbX0KK2Rpc2NhcmRfc2VydmVyIFtsb2NhbF9lbmNhcHNfcG9ydCByZW1vdGVf
ZW5jYXBzX3BvcnRdCitcZW5ke3ZlcmJhdGltfQorRm9yIFVEUCBlbmNhcHN1bGF0aW9uIHRoZSBw
b3J0cyBoYXZlIHRvIGJlIHNwZWNpZmllZC4gVGhlIGxvY2FsIGFuZCByZW1vdGUgZW5jYXBzdWxh
dGlvbiBwb3J0cyBjYW4gYmUgYXJiaXRyYXJpbHkKK3NldC4KK0ZvciBleGFtcGxlLCB5b3UgY2Fu
IGNhbGwKK1xiZWdpbnt2ZXJiYXRpbX0KKy4vZGlzY2FyZF9zZXJ2ZXIgMTExMTEgMjIyMjIKK1xl
bmR7dmVyYmF0aW19CitvbiBhIFVuaXgtbGlrZSBPUyBhbmQKK1xiZWdpbnt2ZXJiYXRpbX0KK2Rp
c2NhcmRfc2VydmVyLmV4ZSAxMTExMSAyMjIyMgorXGVuZHt2ZXJiYXRpbX0KK29uIFdpbmRvd3Mu
CisKK1RoZSBjbGllbnQgbmVlZHMgdHdvIGFkZGl0aW9uYWwgcGFyYW1ldGVycywgdGhlIHNlcnZl
cidzIGFkZHJlc3MgYW5kIGl0cyBwb3J0LgorSXRzIHVzYWdlIGlzCitcYmVnaW57dmVyYmF0aW19
CitjbGllbnQgcmVtb3RlX2FkZHIgcmVtb3RlX3BvcnQgW2xvY2FsX3BvcnQgbG9jYWxfZW5jYXBz
X3BvcnQgcmVtb3RlX2VuY2Fwc19wb3J0XQorXGVuZHt2ZXJiYXRpbX0KK1RoZSByZW1vdGUgYWRk
cmVzcyBpcyB0aGUgc2VydmVyJ3MgYWRkcmVzcy4gSWYgY2xpZW50IGFuZCBzZXJ2ZXIgYXJlIHN0
YXJ0ZWQgb24gdGhlIHNhbWUgbWFjaGluZSwKK3RoZSBsb29wYmFjayBhZGRyZXNzIDEyNy4wLjAu
MSBjYW4gYmUgdXNlZCBmb3IgVW5peC1saWtlIE9TcyBhbmQgdGhlIGxvY2FsIGFkZHJlc3Mgb24g
V2luZG93cy4KK1RoZSBkaXNjYXJkIHBvcnQgaXMgOSwgdGh1cyA5IGhhcyB0byBiZSB0YWtlbiBh
cyByZW1vdGUgcG9ydC4gVGhlIGVuY2Fwc3VsYXRpb24gcG9ydHMgaGF2ZSB0bworbWF0Y2ggdGhv
c2Ugb2YgdGhlIHNlcnZlciwgaS5lLiB0aGUgc2VydmVyJ3MgbG9jYWxcX2VuY2Fwc1xfcG9ydCBp
cyB0aGUgY2xpZW50J3MKK3JlbW90ZVxfZW5jYXBzXF9wb3J0IGFuZCB2aWNlIHZlcnNhLiBUaHVz
LCB0aGUgY2xpZW50IGNhbiBiZSBzdGFydGVkIHdpdGgKK1xiZWdpbnt2ZXJiYXRpbX0KKy4vY2xp
ZW50IDEyNy4wLjAuMSA5IDAgMjIyMjIgMTExMTEKK1xlbmR7dmVyYmF0aW19CitvbiBhIFVuaXgt
bGlrZSBPUyBhbmQKK1xiZWdpbnt2ZXJiYXRpbX0KK2NsaWVudC5leGUgMTkyLjE2OC4wLjEgOSAw
IDIyMjIyIDExMTExCitcZW5ke3ZlcmJhdGltfQorb24gV2luZG93cyBwcm92aWRlZCB5b3VyIGxv
Y2FsIElQIGFkZHJlc3MgaXMgMTkyLjE2OC4wLjEuCisKK1xzdWJzdWJzZWN0aW9ue1NlbmRpbmcg
b3ZlciBTQ1RQfQorVG8gc2VuZCBkYXRhIG92ZXIgU0NUUCBkaXJlY3RseSB5b3UgbWlnaHQgbmVl
ZCByb290IHByaXZpbGVnZXMgYmVjYXVzZSByYXcgc29ja2V0cyBhcmUgdXNlZC4KK1RodXMgaW5z
dGVhZCBvZiBzcGVjaWZ5aW5nIHRoZSBlbmNhcHN1bGF0aW9uIHBvcnRzIHlvdSBoYXZlIHRvIHN0
YXJ0IHRoZSBwcm9ncmFtcyBwcmVwZW5kaW5nIAorXHRleHR0dHtzdWRvfSBvciBpbiBjYXNlIG9m
IFdpbmRvd3Mgc3RhcnQgdGhlIHByb2dyYW0gZnJvbSBhbiBhZG1pbmlzdHJhdG9yIGNvbnNvbGUu
CisKK1xzdWJzdWJzZWN0aW9ue1VzaW5nIHRoZSBDYWxsYmFjayBBUEl9CitJbnN0ZWFkIG9mIGFz
a2luZyBjb25zdGFudGx5IGZvciBuZXcgZGF0YSwgYSBjYWxsYmFjayBBUEkgY2FuIGJlIHVzZWQg
dGhhdCBpcyB0cmlnZ2VyZWQgYnkgCitTQ1RQLiBBIGNhbGxiYWNrIGZ1bmN0aW9uIGhhcyB0byBi
ZSByZWdpc3RlcmVkIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgZGF0YSBpcyByZWFkeSB0
bworYmUgZGVsaXZlcmVkIHRvIHRoZSBhcHBsaWNhdGlvbi4KKworVGhlIGRpc2NhcmRcX3NlcnZl
ciBoYXMgYSBmbGFnIHRvIHN3aXRjaCBiZXR3ZWVuIHRoZSB0d28gbW9kaS4gSWYgIHVzZVxfY2Ig
aXMgc2V0IHRvIDEsIHRoZQorY2FsbGJhY2sgQVBJIHdpbGwgYmUgdXNlZC4gVG8gY2hhbmdlIHRo
ZSBzZXR0aW5nLCBqdXN0IHNldCB0aGUgZmxhZyBhbmQgY29tcGlsZSB0aGUgcHJvZ3JhbSBhZ2Fp
bi4KKworCisKKworXHNlY3Rpb257QmFzaWMgT3BlcmF0aW9uc30KK0FsbCBzeXN0ZW0gY2FsbHMg
c3RhcnQgd2l0aCB0aGUgcHJlZml4IFx0ZXh0aXR7dXNyc2N0cFxffSB0byBkaXN0aW5ndWlzaCB0
aGVtIGZyb20gdGhlIGtlcm5lbCB2YXJpYW50cy4gCitTb21lIG9mIHRoZW0gYXJlIGNoYW5nZWQg
dG8gYWNjb3VudCBmb3IgdGhlIGRpZmZlcmVudCBkZW1hbmRzIGluIHRoZSB1c2VybGFuZCBlbnZp
cm9ubWVudC4gCisKK1xzdWJzZWN0aW9ue0RpZmZlcmVuY2VzIHRvIFJGQyA2NDU4fQorXHN1YnN1
YnNlY3Rpb257dXNyc2N0cFxfaW5pdCgpfQorRXZlcnkgYXBwbGljYXRpb24gaGFzIHRvIHN0YXJ0
IHdpdGggXHRleHRpdHt1c3JzY3RwXF9pbml0KCl9LiBUaGlzIGZ1bmN0aW9uIGNhbGxzIFx0ZXh0
aXR7c2N0cFxfaW5pdCgpfSBhbmQgcmVzZXJ2ZXMKK3RoZSBtZW1vcnkgbmVjZXNzYXJ5IHRvIGFk
bWluaXN0ZXIgdGhlIGRhdGEgdHJhbnNmZXIuCitUaGUgZnVuY3Rpb24gcHJvdG90eXBlIGlzIAor
XGJlZ2lue3ZlcmJhdGltfQordm9pZAordXNyc2N0cF9pbml0KHVpbnQxNl90IHVkcF9wb3J0KQor
XGVuZHt2ZXJiYXRpbX0KK0FzIGl0IGlzIG5vdCBhbHdheXMgcG9zc2libGUgdG8gc2VuZCBkYXRh
IGRpcmVjdGx5IG92ZXIgU0NUUCBiZWNhdXNlIG5vdCBhbGwgTkFUIGJveGVzIGNhbgorcHJvY2Vz
cyBTQ1RQIHBhY2tldHMsIHRoZSBkYXRhIGNhbiBiZSBzZW50IG92ZXIgVURQLiBUbyBlbmNhcHN1
bGF0ZSBTQ1RQIGludG8gVURQCithIFVEUCBwb3J0IGhhcyB0byBiZSBzcGVjaWZpZWQsIHRvIHdo
aWNoIHRoZSBkYXRhZ3JhbXMgY2FuIGJlIHNlbnQuIFRoaXMgbG9jYWwgVURQIHBvcnQgIGlzIHNl
dCAKK3dpdGggdGhlIHBhcmFtZXRlciBcdGV4dHR0e3VkcFxfcG9ydH0uIFRoZSBkZWZhdWx0IHZh
bHVlIGlzIDk4OTksIHRoZSBzdGFuZGFyZCBVRFAgZW5jYXBzdWxhdGlvbiBwb3J0LgorSWYgVURQ
IGVuY2Fwc3VsYXRpb24gaXMgbm90IG5lY2Vzc2FyeSwgdGhlIFVEUCBwb3J0IGhhcyB0byBiZSBz
ZXQgdG8gMC4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfZmluaXNoKCl9CitBdCB0aGUgZW5k
IG9mIHRoZSBwcm9ncmFtIFx0ZXh0aXR7dXNyc2N0cFxfZmluaXNoKCl9IHNob3VsZCBiZSBjYWxs
ZWQgdG8gZnJlZSBhbGwgdGhlIG1lbW9yeSB0aGF0IGhhcyBiZWVuCithbGxvY2F0ZWQgYmVmb3Jl
LgorVGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBpcyAKK1xiZWdpbnt2ZXJiYXRpbX0KK2ludAordXNy
c2N0cF9maW5pc2godm9pZCkuCitcZW5ke3ZlcmJhdGltfQorVGhlIHJldHVybiBjb2RlIGlzIDAg
b24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBhbiBlcnJvci4KKworXHN1YnN1YnNlY3Rpb257
dXNyc2N0cFxfc29ja2V0KCl9CitBIHJlcHJlc2VudGF0aW9uIG9mIGFuIFNDVFAgZW5kcG9pbnQg
aXMgYSBzb2NrZXQuIElzIGl0IGNyZWF0ZWQgd2l0aCBcdGV4dGl0e3VzcnNjdHBcX3NvY2tldCgp
fS4KK1RoZSBmdW5jdGlvbiBwcm90b3R5cGUgaXM6CitcYmVnaW57dmVyYmF0aW19CitzdHJ1Y3Qg
c29ja2V0ICoKK3VzcnNjdHBfc29ja2V0KGludCBkb21haW4sIAorICAgICAgICAgICAgICAgaW50
IHR5cGUsIAorICAgICAgICAgICAgICAgaW50IHByb3RvY29sLAorICAgICAgICAgICAgICAgaW50
ICgqcmVjZWl2ZV9jYikoc3RydWN0IHNvY2tldCAqc29jaywgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgZGF0YWxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3Qgc2N0cF9yY3ZpbmZvLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVscF9p
bmZvKSwKKyAgICAgICAgICAgICAgIGludCAoKnNlbmRfY2IpKHN0cnVjdCBzb2NrZXQgKnNvY2ss
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2JfZnJlZSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1bHBfaW5mbyksIAorICAgICAgICAgICAg
ICAgdWludDMyX3Qgc2JfdGhyZXNob2xkLAorICAgICAgICAgICAgICAgdm9pZCAqdWxwX2luZm8p
LgorXGVuZHt2ZXJiYXRpbX0KK1RoZSBhcmd1bWVudHMgdGFrZW4gZnJvbSBSRkN+NjQ1OCBhcmU6
CitcYmVnaW57aXRlbWl6ZX0KK1xpdGVtIGRvbWFpbjogUEZcX0lORVQgb3IgUEZcX0lORVQ2IGNh
biBiZSB1c2VkLgorXGl0ZW0gdHlwZTogSW4gY2FzZSBvZiBhIG9uZS10by1tYW55IHN0eWxlIHNv
Y2tldCBpdCBpcyBTT0NLXF9TRVFQQUNLRVQsIGluIGNhc2Ugb2YgYSBvbmUtdG8tb25lIHN0eWxl
IAorc29ja2V0IGl0IGlzIFNPQ0tcX1NUUkVBTS4gRm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBk
aWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBzb2NrZXQgdHlwZXMgcGxlYXNlCityZWZlciB0byBSRkN+
NjQ1OC4KK1xpdGVtIHByb3RvY29sOiBTZXQgSVBQUk9UT1xfU0NUUC4KK1xlbmR7aXRlbWl6ZX0K
KworSW4gdXNyc2N0cCwgYSBjYWxsYmFjayBBUEkgY2FuIGJlIHVzZWQuCitcYmVnaW57aXRlbWl6
ZX0KK1xpdGVtIFRoZSBmdW5jdGlvbiBwb2ludGVycyBvZiB0aGUgcmVjZWl2ZSBhbmQgc2VuZCBj
YWxsYmFja3MgYXJlIG5ldyBhcmd1bWVudHMgdG8gdGhlIHNvY2tldCBjYWxsLiBJZiBubyBjYWxs
YmFjayBBUEkgaXMgdXNlZCwgdGhlc2UgbXVzdCBiZSBcdGV4dGl0e05VTEx9LgorXGl0ZW0gVGhl
IFx0ZXh0aXR7c2JcX3RocmVzaG9sZH0gc3BlY2lmaWVzIHRoZSBhbW91bnQgb2YgZnJlZSBzcGFj
ZSBpbiB0aGUgc2VuZCBzb2NrZXQgYnVmZmVyIGJlZm9yZSB0aGUgc2VuZCBmdW5jdGlvbiBpbiB0
aGUgYXBwbGljYXRpb24gaXMgY2FsbGVkLiBJZiBhIHNlbmQgY2FsbGJhY2sgZnVuY3Rpb24gaXMg
c3BlY2lmaWVkIGFuZCBcdGV4dGl0e3NiXF90aHJlc2hvbGR9IGlzIDAsIHRoZSBmdW5jdGlvbiBp
cyBjYWxsZWQgd2hlbmV2ZXIgdGhlcmUgaXMgcm9vbSBpbiB0aGUgc2VuZCBzb2NrZXQgYnVmZmVy
LgorXGl0ZW0gQWRkaXRpb25hbCBkYXRhIG1heSBiZSBwYXNzZWQgYWxvbmcgd2l0aGluIHRoZSBc
dGV4dGl0e3VscFxfaW5mb30gcGFyYW1ldGVyLiBUaGlzIHZhbHVlIHdpbGwgYmUgcGFzc2VkIHRv
IHRoZSBcdGV4dGl0e3JlY2VpdmVcX2NifSB3aGVuIGl0IGlzIGludm9rZWQuCitcZW5ke2l0ZW1p
emV9CisKK09uIHN1Y2Nlc3MgXHRleHRpdHt1c3JzY3RwXF9zb2NrZXQoKX0gcmV0dXJucyB0aGUg
cG9pbnRlciB0byB0aGUgbmV3IHNvY2tldCBpbiB0aGUgXHRleHR0dHtzdHJ1Y3Qgc29ja2V0fSBk
YXRhIHR5cGUuIAorSXQgd2lsbCBiZSBuZWVkZWQgaW4gYWxsIG90aGVyIHN5c3RlbSBjYWxscy4g
SW4gY2FzZSBvZiBhIGZhaWx1cmUgTlVMTCBpcyByZXR1cm5lZCBhbmQKK2Vycm5vIGlzIHNldCB0
byB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgY29kZS4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxf
Y2xvc2UoKX0KKworVGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBvZiBcdGV4dGl0e3VzcnNjdHBcX2Ns
b3NlKCl9IGlzIAorXGJlZ2lue3ZlcmJhdGltfSAgIAordm9pZAordXNyc2N0cF9jbG9zZShzdHJ1
Y3Qgc29ja2V0ICpzbykuCisgXGVuZHt2ZXJiYXRpbX0KK1RodXMgdGhlIG9ubHkgZGlmZmVyZW5j
ZSBpcyB0aGUgYWJzZW5jZSBvZiBhIHJldHVybiBjb2RlLiAKKyAKK1xzdWJzZWN0aW9ue1NhbWUg
RnVuY3Rpb25hbGl0eSBhcyBSRkMgNjQ1OH0KK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGhhdmUg
dGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBhcyB0aGVpciBrZXJuZWwgcGVuZGFudHMuIFRoZXJlIHBy
b3RvdHlwZXMKK2FyZSBkZXNjcmliZWQgaW4gdGhlIGZvbGxvd2luZyBzdWJzZWN0aW9ucy4gRm9y
IGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gcGxlYXNlIHJlZmVyIHRvIFJGQ342NDU4LgorCitcc3Vi
c3Vic2VjdGlvbnt1c3JzY3RwXF9iaW5kKCl9CitUaGUgZnVuY3Rpb24gcHJvdG90eXBlIG9mIFx0
ZXh0aXR7dXNyc2N0cFxfYmluZCgpfSBpcyAKK1xiZWdpbnt2ZXJiYXRpbX0KK2ludAordXNyc2N0
cF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvLAorICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAq
YWRkciwKKyAgICAgICAgICAgICBzb2NrbGVuX3QgYWRkcmxlbikuCitcZW5ke3ZlcmJhdGltfSAg
ICAgCitUaGUgYXJndW1lbnRzIGFyZQorXGJlZ2lue2l0ZW1pemV9CitcaXRlbSBzbzogUG9pbnRl
ciB0byB0aGUgc29ja2V0IGFzIHJldHVybmVkIGJ5IFx0ZXh0aXR7dXNyc2N0cFxfc29ja2V0KCl9
LgorXGl0ZW0gYWRkcjogVGhlIGFkZHJlc3Mgc3RydWN0dXJlIChzdHJ1Y3Qgc29ja2FkZHJcX2lu
IGZvciBhbiBJUHY0IGFkZHJlc3MKKyAgICAgIG9yIHN0cnVjdCBzb2NrYWRkclxfaW42IGZvciBh
biBJUHY2IGFkZHJlc3MpLgorXGl0ZW0gYWRkcmxlbjogVGhlIHNpemUgb2YgdGhlIGFkZHJlc3Mg
c3RydWN0dXJlLgorXGVuZHtpdGVtaXplfQorXHRleHRpdHt1c3JzY3RwXF9iaW5kKCl9IHJldHVy
bnMgMCBvbiBzdWNjZXNzIGFuZCAtMSBpbiBjYXNlIG9mIGFuIGVycm9yLgorCitcc3Vic3Vic2Vj
dGlvbnt1c3JzY3RwXF9saXN0ZW4oKX0KK1RoZSBmdW5jdGlvbiBwcm90b3R5cGUgb2YgXHRleHRp
dHt1c3JzY3RwXF9saXN0ZW4oKX0gaXMgCitcYmVnaW57dmVyYmF0aW19CitpbnQKK3VzcnNjdHBf
bGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvLAorICAgICAgICAgICAgICAgaW50IGJhY2tsb2cpLgor
IFxlbmR7dmVyYmF0aW19ICAgICAgCitUaGUgYXJndW1lbnRzIGFyZQorXGJlZ2lue2l0ZW1pemV9
CitcaXRlbSBzbzogUG9pbnRlciB0byB0aGUgc29ja2V0IGFzIHJldHVybmVkIGJ5IFx0ZXh0aXR7
dXNyc2N0cFxfc29ja2V0KCl9LgorXGl0ZW0gYmFja2xvZzogSWYgYmFja2xvZyBpcyBub24temVy
bywgZW5hYmxlIGxpc3RlbmluZywgZWxzZSBkaXNhYmxlCisgICAgICBsaXN0ZW5pbmcuCitcZW5k
e2l0ZW1pemV9CitcdGV4dGl0e3VzcnNjdHBcX2xpc3RlbigpfSByZXR1cm5zIDAgb24gc3VjY2Vz
cyBhbmQgLTEgaW4gY2FzZSBvZiBhbiBlcnJvci4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxf
YWNjZXB0KCl9CitUaGUgZnVuY3Rpb24gcHJvdG90eXBlIG9mIFx0ZXh0aXR7dXNyc2N0cFxfYWNj
ZXB0KCl9IGlzIAorXGJlZ2lue3ZlcmJhdGltfSAgICAgICAgICAgICAgICAKK3N0cnVjdCBzb2Nr
ZXQgKgordXNyc2N0cF9hY2NlcHQoc3RydWN0IHNvY2tldCAqc28sCisgICAgICAgICAgICAgICBz
dHJ1Y3Qgc29ja2FkZHIgKiBhZGRyLAorICAgICAgICAgICAgICAgc29ja2xlbl90ICogYWRkcmxl
bikuCisgXGVuZHt2ZXJiYXRpbX0KKyBUaGUgYXJndW1lbnRzIGFyZQorXGJlZ2lue2l0ZW1pemV9
CitcaXRlbSBzbzogUG9pbnRlciB0byB0aGUgc29ja2V0IGFzIHJldHVybmVkIGJ5IFx0ZXh0aXR7
dXNyc2N0cFxfc29ja2V0KCl9LgorXGl0ZW0gYWRkcjogT24gcmV0dXJuLCAgdGhlIHByaW1hcnkg
YWRkcmVzcyBvZiB0aGUgcGVlciAoc3RydWN0IHNvY2thZGRyXF9pbiBmb3IgYW4gSVB2NCBhZGRy
ZXNzIG9yCisgICAgICBzdHJ1Y3Qgc29ja2FkZHJcX2luNiBmb3IgYW4gSVB2NiBhZGRyZXNzKS4K
K1xpdGVtIGFkZHJsZW46IFNpemUgb2YgdGhlIHJldHVybmVkIGFkZHJlc3Mgc3RydWN0dXJlLgor
XGVuZHtpdGVtaXplfQorXHRleHRpdHt1c3JzY3RwXF9hY2NlcHQoKX0gcmV0dXJucyB0aGUgYWNj
ZXB0ZWQgc29ja2V0IG9uIHN1Y2Nlc3MgYW5kIE5VTEwgaW4gY2FzZSBvZiBhbiBlcnJvci4KKwor
XHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfY29ubmVjdCgpfQorVGhlIGZ1bmN0aW9uIHByb3RvdHlw
ZSBvZiBcdGV4dGl0e3VzcnNjdHBcX2Nvbm5lY3QoKX0gaXMgCitcYmVnaW57dmVyYmF0aW19ICAg
ICAKK2ludAordXNyc2N0cF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvLAorICAgICAgICAgICAg
ICAgIHN0cnVjdCBzb2NrYWRkciAqbmFtZSwKKyAgICAgICAgICAgICAgICBzb2NrbGVuX3QgYWRk
cmxlbikKKyBcZW5ke3ZlcmJhdGltfQorVGhlIGFyZ3VtZW50cyBhcmUKK1xiZWdpbntpdGVtaXpl
fQorXGl0ZW0gc286IFBvaW50ZXIgdG8gdGhlIHNvY2tldCBhcyByZXR1cm5lZCBieSBcdGV4dGl0
e3VzcnNjdHBcX3NvY2tldCgpfS4KKyBcaXRlbSBuYW1lOiBBZGRyZXNzIG9mIHRoZSBwZWVyIHRv
IGNvbm5lY3QgdG8gKHN0cnVjdCBzb2NrYWRkclxfaW4gZm9yIGFuIElQdjQgYWRkcmVzcyBvcgor
ICAgICAgc3RydWN0IHNvY2thZGRyXF9pbjYgZm9yIGFuIElQdjYgYWRkcmVzcykuCitcaXRlbSBh
ZGRybGVuOiBTaXplIG9mIHRoZSBwZWVyJ3MgYWRkcmVzcy4KK1xlbmR7aXRlbWl6ZX0KK1x0ZXh0
aXR7dXNyc2N0cFxfY29ubmVjdCgpfSByZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgLTEgaW4gY2Fz
ZSBvZiBhbiBlcnJvci4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc2h1dGRvd24oKX0gCitU
aGUgZnVuY3Rpb24gcHJvdG90eXBlIG9mIFx0ZXh0aXR7dXNyc2N0cFxfc2h1dGRvd24oKX0gaXMg
CitcYmVnaW57dmVyYmF0aW19ICAgCitpbnQKK3VzcnNjdHBfc2h1dGRvd24oc3RydWN0IHNvY2tl
dCAqc28sIGludCBob3cpLgorXGVuZHt2ZXJiYXRpbX0KK1RoZSBhcmd1bWVudHMgYXJlCitcYmVn
aW57aXRlbWl6ZX0KK1xpdGVtIHNvOiBQb2ludGVyIHRvIHRoZSBzb2NrZXQgb2YgdGhlIGFzc29j
aWF0aW9uIHRvIGJlIGNsb3NlZC4KK1xpdGVtIGhvdzogU3BlY2lmaWVzIHRoZSB0eXBlIG9mIHNo
dXRkb3duLiAgVGhlIHZhbHVlcyBhcmUgYXMgZm9sbG93czoKK1xiZWdpbntpdGVtaXplfQorXGl0
ZW0gU0hVVFxfUkQ6ICBEaXNhYmxlcyBmdXJ0aGVyIHJlY2VpdmUgb3BlcmF0aW9ucy4gIE5vIFND
VFAgcHJvdG9jb2wKKyAgICAgICAgIGFjdGlvbiBpcyB0YWtlbi4KK1xpdGVtIFNIVVRcX1dSOiAg
RGlzYWJsZXMgZnVydGhlciBzZW5kIG9wZXJhdGlvbnMsIGFuZCBpbml0aWF0ZXMgdGhlIFNDVFAK
KyAgICAgICAgIHNodXRkb3duIHNlcXVlbmNlLgorXGl0ZW0gU0hVVFxfUkRXUjogIERpc2FibGVz
IGZ1cnRoZXIgc2VuZCBhbmQgcmVjZWl2ZSBvcGVyYXRpb25zLCBhbmQKKyAgICAgICAgIGluaXRp
YXRlcyB0aGUgU0NUUCBzaHV0ZG93biBzZXF1ZW5jZS4KK1xlbmR7aXRlbWl6ZX0KK1xlbmR7aXRl
bWl6ZX0KK1x0ZXh0aXR7dXNyc2N0cFxfc2h1dGRvd24oKX0gcmV0dXJucyAwIG9uIHN1Y2Nlc3Mg
YW5kIC0xIGluIGNhc2Ugb2YgYW4gZXJyb3IuCisKK1xzZWN0aW9ue1NlbmRpbmcgYW5kIFJlY2Vp
dmluZyBEYXRhfQorU2luY2UgdGhlIHB1YmxpY2F0aW9uIG9mIFJGQ342NDU4IHRoZXJlIGlzIG9u
bHkgb25lIGZ1bmN0aW9uIGZvciBzZW5kaW5nIGFuZCBvbmUgZm9yIHJlY2VpdmluZwordGhhdCBp
cyBub3QgZGVwcmVjYXRlZC4gVGhlcmVmb3JlLCBvbmx5IHRoZXNlIHR3byBhcmUgZGVzY3JpYmVk
IGhlcmUuCisKK1xzdWJzZWN0aW9ue3VzcnNjdHBcX3NlbmR2KCl9CitUaGUgZnVuY3Rpb24gcHJv
dG90eXBlIGlzCitcYmVnaW57dmVyYmF0aW19Citzc2l6ZV90Cit1c3JzY3RwX3NlbmR2KHN0cnVj
dCBzb2NrZXQgKnNvLAorICAgICAgICAgICAgICBjb25zdCB2b2lkICpkYXRhLAorICAgICAgICAg
ICAgICBzaXplX3QgbGVuLAorICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJzLAor
ICAgICAgICAgICAgICBpbnQgYWRkcmNudCwKKyAgICAgICAgICAgICAgdm9pZCAqaW5mbywKKyAg
ICAgICAgICAgICAgc29ja2xlbl90IGluZm9sZW4sCisgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBpbmZvdHlwZSwKKyAgICAgICAgICAgICAgaW50IGZsYWdzKS4KK1xlbmR7dmVyYmF0aW19CitU
aGUgYXJndW1lbnRzIGFyZQorXGJlZ2lue2l0ZW1pemV9CitcaXRlbSBzbzogVGhlIHNvY2tldCB0
byBzZW5kIGRhdGEgb24uCitcaXRlbSBkYXRhOiBBcyBpdCBpcyBtb3JlIGNvbnZlbmllbnQgdG8g
c2VuZCBkYXRhIGluIGEgYnVmZmVyIGFuZCBub3QgYSBcdGV4dHR0e3N0cnVjdCBpb3ZlY30gZGF0
YSBzdHJ1Y3R1cmUsIHdlCitjaG9zZSB0byBwYXNzIHRoZSBkYXRhIGFzIGEgdm9pZCBwb2ludGVy
LgorXGl0ZW0gbGVuOiBMZW5ndGggb2YgdGhlIGRhdGEuCitcaXRlbSBhZGRyczogSW4gdGhpcyB2
ZXJzaW9uIG9mIHVzcnNjdHAgYXQgbW9zdCBvbmUgZGVzdGluYXRpb24gYWRkcmVzcyBpcyBzdXBw
b3J0ZWQuIEluIHRoZSBjYXNlIG9mIGEgY29ubmVjdGVkCitzb2NrZXQsIHRoZSBwYXJhbWV0ZXIg
XHRleHR0dHthZGRyc30gY2FuIGJlIHNldCB0byBOVUxMLgorXGl0ZW0gYWRkcmNudDogTnVtYmVy
IG9mIGFkZHJlc3Nlcy4gQXMgYXQgbW9zdCBvbmUgYWRkcmVzcyBpcyBzdXBwb3J0ZWQsIGFkZHJj
bnQgaXMgMCBpZiBhZGRycyBpcyBOVUxMIGFuZCAKKzEgb3RoZXJ3aXNlLgorXGl0ZW0gaW5mbzog
QWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgYSBtZXNzYWdlIGlzIHN0b3JlZCBpbiBcdGV4dHR0
e3ZvaWQgKmluZm99LiBUaGUgZGF0YSB0eXBlcyBcdGV4dHR0e3N0cnVjdH5zY3RwXF9zbmRpbmZv
fSwKK1x0ZXh0dHR7c3RydWN0fnNjdHBcX3ByaW5mb30sIGFuZCBcdGV4dHR0e3N0cnVjdH0gXGxp
bmVicmVhayBcdGV4dHR0e3NjdHBcX3NlbmR2XF9zcGF9IGFyZSBzdXBwb3J0ZWQgYXMgZGVmaW5l
ZCBpbiAKK1JGQ342NDU4LiBTdXBwb3J0IGZvciBcdGV4dHR0e3N0cnVjdHNjdHBcX2F1dGhpbmZv
fSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LCB0aGVyZWZvcmUsIGVycm5vIGlzIHNldCBFSU5WQUwK
K2FuZCAtMSB3aWxsIGJlIHJldHVybmVkLCBpZiBpdCBpcyB1c2VkLgorXGl0ZW0gaW5mb2xlbjog
TGVuZ3RoIG9mIGluZm8gaW4gYnl0ZXMuCitcaXRlbSBpbmZvdHlwZTogSWRlbnRpZmllcyB0aGUg
dHlwZSBvZiB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgaW4gaW5mby4gUG9zc2libGUgdmFsdWVz
IGFyZQorU0NUUFxfU0VORFZcX05PSU5GTywgU0NUUFxfU0VORFZcX1NORElORk8sIFxsaW5lYnJl
YWsgU0NUUFxfU0VORFZcX1BSSU5GTywgU0NUUFxfU0VORFZcX1NQQS4gCitGb3IgYWRkaXRpb25h
bCBpbmZvcm1hdGlvbiBwbGVhc2UgcmVmZXIgdG8gUkZDfjY0NTguCitcaXRlbSBmbGFnczogRmxh
Z3MgYXMgZGVzY3JpYmVkIGluIFJGQ342NDU4LgorXGVuZHtpdGVtaXplfQorCitcdGV4dGl0e3Vz
cnNjdHBcX3NlbmR2KCl9IHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBzZW50LCBvciAtMSBp
ZiBhbiBlcnJvcgorb2NjdXJyZWQuICBUaGUgdmFyaWFibGUgZXJybm8gaXMgdGhlbiBzZXQgYXBw
cm9wcmlhdGVseS4KKworXHN1YnNlY3Rpb257dXNyc2N0cFxfcmVjdnYoKX0KK1RoZSBmdW5jdGlv
biBwcm90b3R5cGUgaXMKK1xiZWdpbnt2ZXJiYXRpbX0KK3NzaXplX3QKK3VzcnNjdHBfcmVjdnYo
c3RydWN0IHNvY2tldCAqc28sCisgICAgICAgICAgICAgdm9pZCAqZGJ1ZiwKKyAgICAgICAgICAg
ICBzaXplX3QgbGVuLAorICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqZnJvbSwKKyAgICAg
ICAgICAgICBzb2NrbGVuX3QgKiBmcm9tbGVuLAorICAgICAgICAgICAgIHZvaWQgKmluZm8sCisg
ICAgICAgICAgICAgc29ja2xlbl90ICppbmZvbGVuLAorICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCAqaW5mb3R5cGUsCisgICAgICAgICAgICAgaW50ICptc2dfZmxhZ3MpLgorXGVuZHt2ZXJiYXRp
bX0KK1RoZSBhcmd1bWVudHMgYXJlCitcYmVnaW57aXRlbWl6ZX0KK1xpdGVtIHNvOiBUaGUgc29j
a2V0IHRvIHJlY2VpdmUgZGF0YSBvbi4KK1xpdGVtIGRidWY6IEFuYWxvZyB0byBcdGV4dGl0e3Vz
cnNjdHBcX3NlbmR2KCl9IHRoZSBkYXRhIGlzIHJldHVybmVkIGluIGEgYnVmZmVyLgorXGl0ZW0g
bGVuOiBMZW5ndGggb2YgdGhlIGJ1ZmZlciBpbiBieXRlcy4KK1xpdGVtIGZyb206IEEgcG9pbnRl
ciB0byBhbiBhZGRyZXNzIHRvIGJlIGZpbGxlZCB3aXRoIHRoZSBzZW5kZXIgb2YgdGhlCisgICAg
ICByZWNlaXZlZCBtZXNzYWdlJ3MgYWRkcmVzcy4KK1xpdGVtIGZyb21sZW46IEFuIGluL291dCBw
YXJhbWV0ZXIgZGVzY3JpYmluZyB0aGUgZnJvbSBsZW5ndGguCitcaXRlbSBpbmZvOiBBIHBvaW50
ZXIgdG8gdGhlIGJ1ZmZlciB0byBob2xkIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSByZWNlaXZlZAor
ICAgICAgbWVzc2FnZS4gIFRoZSBzdHJ1Y3R1cmUgdHlwZSBvZiBpbmZvIGlzIGRldGVybWluZWQg
YnkgdGhlCisgICAgICBpbmZvdHlwZSBwYXJhbWV0ZXIuIFRoZSBhdHRyaWJ1dGVzIHJldHVybmVk
IGluIFx0ZXh0dHR7aW5mb30gaGF2ZSB0byBiZSAKKyAgICAgIGhhbmRsZWQgaW4gdGhlIHNhbWUg
d2F5IGFzIHNwZWNpZmllZCBpbiBSRkN+NjQ1OC4KK1xpdGVtIGluZm9sZW46ICBBbiBpbi9vdXQg
cGFyYW1ldGVyIGRlc2NyaWJpbmcgdGhlIHNpemUgb2YgdGhlIGluZm8gYnVmZmVyLgorXGl0ZW0g
aW5mb3R5cGU6ICBPbiByZXR1cm4sICppbmZvdHlwZSBpcyBzZXQgdG8gdGhlIHR5cGUgb2YgdGhl
IGluZm8KKyAgICAgIGJ1ZmZlci4gIFRoZSBjdXJyZW50IGRlZmluZWQgdmFsdWVzIGFyZSBTQ1RQ
XF9SRUNWVlxfTk9JTkZPLCAKKyAgICAgIFNDVFBcX1JFQ1ZWXF9SQ1ZJTkZPLCBTQ1RQXF9SRUNW
VlxfTlhUSU5GTywgYW5kCisgICAgICBTQ1RQXF9SRUNWVlxfUk4uIEEgZGV0YWlsZWQgZGVzY3Jp
cHRpb24gaXMgZ2l2ZW4gaW4gUkZDfjY0NTguCitcaXRlbSBmbGFnczogQSBwb2ludGVyIHRvIGFu
IGludGVnZXIgdG8gYmUgZmlsbGVkIHdpdGggYW55IG1lc3NhZ2UgZmxhZ3MKKyAgICAgIChlLmcu
LCBNU0dcX05PVElGSUNBVElPTikuICBOb3RlIHRoYXQgdGhpcyBmaWVsZCBpcyBhbiBpbi9vdXQK
KyAgICAgIHBhcmFtZXRlci4gIE9wdGlvbnMgZm9yIHRoZSByZWNlaXZlIG1heSBhbHNvIGJlIHBh
c3NlZCBpbnRvIHRoZQorICAgICAgdmFsdWUgKGUuZy4sIE1TR1xfRU9SKS4gIFJldHVybmluZyBm
cm9tIHRoZSBjYWxsLCB0aGUgZmxhZ3MnIHZhbHVlCisgICAgICB3aWxsIGRpZmZlciBmcm9tIGl0
cyBvcmlnaW5hbCB2YWx1ZS4KK1xlbmR7aXRlbWl6ZX0KKworXHRleHRpdHt1c3JzY3RwXF9yZWN2
digpfSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCwgb3IgLTEgaWYgYW4gZXJyb3IK
K29jY3VycmVkLiAgVGhlIHZhcmlhYmxlIGVycm5vIGlzIHRoZW4gc2V0IGFwcHJvcHJpYXRlbHku
CisKKyAgCisKK1xzZWN0aW9ue1NvY2tldCBPcHRpb25zfQorU29ja2V0IG9wdGlvbnMgYXJlIHVz
ZWQgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHNvY2tldCBjYWxscy4KK1RoZWly
IGJlaGF2aW9yIGlzIHNwZWNpZmllZCBpbiBSRkN+NjQ1OC4gVGhlIGZ1bmN0aW9ucyB0byBnZXQg
b3Igc2V0IHRoZW0gYXJlCisKK1xiZWdpbnt2ZXJiYXRpbX0KK2ludAordXNyc2N0cF9nZXRzb2Nr
b3B0KHN0cnVjdCBzb2NrZXQgKnNvLAorICAgICAgICAgICAgICAgICAgICAgaW50IGxldmVsLAor
ICAgICAgICAgICAgICAgICAgICAgaW50IG9wdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICB2
b2lkICpvcHR2YWwsCisgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKm9wdGxlbikKK1xl
bmR7dmVyYmF0aW19CithbmQKK1xiZWdpbnt2ZXJiYXRpbX0KK2ludAordXNyc2N0cF9zZXRzb2Nr
b3B0KHN0cnVjdCBzb2NrZXQgKnNvLAorICAgICAgICAgICAgICAgICAgICAgaW50IGxldmVsLAor
ICAgICAgICAgICAgICAgICAgICAgaW50IG9wdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICBj
b25zdCB2b2lkICpvcHR2YWwsCisgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3Qgb3B0bGVu
KS4KK1xlbmR7dmVyYmF0aW19CisKK2FuZCB0aGUgYXJndW1lbnRzIGFyZQorXGJlZ2lue2l0ZW1p
emV9CitcaXRlbSBzbzogIFRoZSBzb2NrZXQgb2YgdHlwZSBzdHJ1Y3Qgc29ja2V0LgorXGl0ZW0g
bGV2ZWw6ICBTZXQgdG8gSVBQUk9UT1xfU0NUUCBmb3IgYWxsIFNDVFAgb3B0aW9ucy4KK1xpdGVt
IG9wdG5hbWU6ICBUaGUgb3B0aW9uIG5hbWUgYXMgc3BlY2lmaWVkIGluIFRhYmxlflxyZWZ7b3B0
aW9uc30uCitcaXRlbSBvcHR2YWw6IFRoZSBidWZmZXIgdG8gc3RvcmUgdGhlIHZhbHVlIG9mIHRo
ZSBvcHRpb24gYXMgc3BlY2lmaWVkIGluIHRoZSBzZWNvbmQgY29sdW1uIG9mIFRhYmxlflxyZWZ7
b3B0aW9uc30uCitcaXRlbSBvcHRsZW46ICBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIChvciB0aGUg
bGVuZ3RoIG9mIHRoZSBvcHRpb24KKyAgICAgIHJldHVybmVkIGluIGNhc2Ugb2YgXHRleHRpdHt1
c3JzY3RwXF9nZXRzb2Nrb3B0fSkuCitcZW5ke2l0ZW1pemV9CisKK1RoZXNlIGZ1bmN0aW9ucyBy
ZXR1cm4gMCBvbiBzdWNjZXNzIGFuZCAtMSBpbiBjYXNlIG9mIGFuIGVycm9yLgorCitcYmVnaW57
bG9uZ3RhYmxlfXt8bHxsfGN8fSAKK1xobGluZQore1xiZnNlcmllcyBPcHRpb259JntcYmZzZXJp
ZXMgRGF0YXR5cGV9ICZ7XGJmc2VyaWVzIHIvd31cdGFidWxhcm5ld2xpbmUgCitcZW5kaGVhZAor
XGhsaW5lCitTQ1RQXF9SVE9JTkZPJnN0cnVjdCBzY3RwXF9ydG9pbmZvJnIvd1x0YWJ1bGFybmV3
bGluZSBcaGxpbmUKK1NDVFBcX0FTU09DSU5GTyZzdHJ1Y3Qgc2N0cFxfYXNzb2NwYXJhbXMmci93
XHRhYnVsYXJuZXdsaW5lIFxobGluZQorU0NUUFxfSU5JVE1TRyZzdHJ1Y3Qgc2N0cFxfaW5pdG1z
ZyZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9OT0RFTEFZJmludCZyL3dcdGFidWxh
cm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9BVVRPQ0xPU0UmaW50JnIvd1x0YWJ1bGFybmV3bGluZSBc
aGxpbmUKK1NDVFBcX1BSSU1BUllcX0FERFImc3RydWN0IHNjdHBcX3NldHByaW0mci93XHRhYnVs
YXJuZXdsaW5lIFxobGluZQorU0NUUFxfQURBUFRBVElPTlxfTEFZRVImc3RydWN0IHNjdHBcX3Nl
dGFkYXB0YXRpb24mci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQorU0NUUFxfRElTQUJMRVxfRlJB
R01FTlRTJmludCZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9QRUVSXF9BRERSXF9Q
QVJBTVMmc3RydWN0IHNjdHBcX3BhZGRycGFyYW1zJnIvd1x0YWJ1bGFybmV3bGluZSBcaGxpbmUK
K1NDVFBcX0lcX1dBTlRcX01BUFBFRFxfVjRcX0FERFImaW50JnIvd1x0YWJ1bGFybmV3bGluZSBc
aGxpbmUKK1NDVFBcX01BWFNFRyZzdHJ1Y3Qgc2N0cFxfYXNzb2NcX3ZhbHVlJnIvd1x0YWJ1bGFy
bmV3bGluZSBcaGxpbmUKK1NDVFBcX0RFTEFZRURcX1NBQ0smc3RydWN0IHNjdHBcX3NhY2tcX2lu
Zm8mci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQorU0NUUFxfRlJBR01FTlRcX0lOVEVSTEVBVkUm
aW50JnIvd1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKK1NDVFBcX1BBUlRJQUxcX0RFTElWRVJZXF9Q
T0lOVCZpbnQmci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQorU0NUUFxfSE1BQ1xfSURFTlQmc3Ry
dWN0IHNjdHBcX2htYWNhbGdvJnIvd1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKK1NDVFBcX0FVVEhc
X0FDVElWRVxfS0VZJnN0cnVjdCBzY3RwXF9hdXRoa2V5aWQmci93XHRhYnVsYXJuZXdsaW5lIFxo
bGluZQorU0NUUFxfQVVUT1xfQVNDT05GJmludCZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCitT
Q1RQXF9NQVhcX0JVUlNUJnN0cnVjdCBzY3RwXF9hc3NvY1xfdmFsdWUmci93XHRhYnVsYXJuZXds
aW5lIFxobGluZQorU0NUUFxfQ09OVEVYVCZzdHJ1Y3Qgc2N0cFxfYXNzb2NcX3ZhbHVlJnIvd1x0
YWJ1bGFybmV3bGluZSBcaGxpbmUKK1NDVFBcX0VYUExJQ0lUXF9FT1ImaW50JnIvd1x0YWJ1bGFy
bmV3bGluZSBcaGxpbmUKK1NDVFBcX1JFVVNFXF9QT1JUJmludCZyL3dcdGFidWxhcm5ld2xpbmUg
XGhsaW5lCitTQ1RQXF9FVkVOVCZzdHJ1Y3Qgc2N0cFxfZXZlbnQmci93XHRhYnVsYXJuZXdsaW5l
IFxobGluZQorU0NUUFxfUkVDVlJDVklORk8maW50JnIvd1x0YWJ1bGFybmV3bGluZSBcaGxpbmUK
K1NDVFBcX1JFQ1ZOWFRJTkZPJmludCZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9E
RUZBVUxUXF9TTkRJTkZPJnN0cnVjdCBzY3RwXF9zbmRpbmZvJnIvd1x0YWJ1bGFybmV3bGluZSBc
aGxpbmUKK1NDVFBcX0RFRkFVTFRcX1BSSU5GTyZzdHJ1Y3Qgc2N0cFxfZGVmYXVsdFxfcHJpbmZv
JnIvd1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKK1NDVFBcX1JFTU9URVxfVURQXF9FTkNBUFNcX1BP
UlQmaW50JnIvd1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKK1NDVFBcX0VOQUJMRVxfU1RSRUFNXF9S
RVNFVCZzdHJ1Y3Qgc2N0cFxfYXNzb2NcX3ZhbHVlJnIvd1x0YWJ1bGFybmV3bGluZSBcaGxpbmUK
K1NDVFBcX1NUQVRVUyZzdHJ1Y3Qgc2N0cFxfc3RhdHVzJnJcdGFidWxhcm5ld2xpbmUgXGhsaW5l
CitTQ1RQXF9HRVRcX1BFRVJcX0FERFJcX0lORk8mc3RydWN0IHNjdHBcX3BhZGRyaW5mbyZyXHRh
YnVsYXJuZXdsaW5lIFxobGluZQorU0NUUFxfUEVFUlxfQVVUSFxfQ0hVTktTJnN0cnVjdCBzY3Rw
XF9hdXRoY2h1bmtzJnJcdGFidWxhcm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9MT0NBTFxfQVVUSFxf
Q0hVTktTJnN0cnVjdCBzY3RwXF9hdXRoY2h1bmtzJnJcdGFidWxhcm5ld2xpbmUgXGhsaW5lCitT
Q1RQXF9HRVRcX0FTU09DXF9OVU1CRVImdWludDMyXF90JnJcdGFidWxhcm5ld2xpbmUgXGhsaW5l
CitTQ1RQXF9HRVRcX0FTU09DXF9JRFxfTElTVCZzdHJ1Y3Qgc2N0cFxfYXNzb2NcX2lkcyZyXHRh
YnVsYXJuZXdsaW5lIFxobGluZQorU0NUUFxfUkVTRVRcX1NUUkVBTVMmc3RydWN0IHNjdHBcX3Jl
c2V0XF9zdHJlYW1zJndcdGFidWxhcm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9SRVNFVFxfQVNTT0Mm
c3RydWN0IHNjdHBcX2Fzc29jXF90JndcdGFidWxhcm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9BRERc
X1NUUkVBTVMmc3RydWN0IHNjdHBcX2FkZFxfc3RyZWFtcyZ3XHRhYnVsYXJuZXdsaW5lIFxobGlu
ZQorXGNhcHRpb257U29ja2V0IE9wdGlvbnMgc3VwcG9ydGVkIGJ5IHVzcnNjdHB9CitcbGFiZWx7
b3B0aW9uc30KK1xlbmR7bG9uZ3RhYmxlfQorQW4gb3ZlcnZpZXcgb2YgdGhlIHN1cHBvcnRlZCBv
cHRpb25zIGlzIGdpdmVuIGluIFRhYmxlflxyZWZ7b3B0aW9uc30uIFRoZWlyIHVzZSBpcyBkZXNj
cmliZWQgaW4gUkZDfjY0NTh+XGNpdGV7c29ja2V0QVBJfSwgUkZDfjY1MjV+XGNpdGV7c3RyZWFt
UmVzZXR9LCBhbmR+XGNpdGV7dWRwZW5jYXBzfS4KKworXHNlY3Rpb257U3lzY3RsIHZhcmlhYmxl
c30KKworSW4ga2VybmVsIGltcGxlbWVudGF0aW9ucyBsaWtlIGZvciBpbnN0YW5jZSBGcmVlQlNE
LCBpdCBpcyBwb3NzaWJsZSB0byBjaGFuZ2UgcGFyYW1ldGVycworaW4gdGhlIG9wZXJhdGluZyBz
eXN0ZW0uIFRoZXNlIHBhcmFtZXRlcnMgYXJlIGNhbGxlZCBzeXNjdGwgdmFyaWFibGVzLgorCitJ
biB1c3JzY3RwIGFwcGxpY2F0aW9ucyBjYW4gc2V0IG9yIHJldHJpZXZlIHRoZXNlIHZhcmlhYmxl
cyB3aXRoIHRoZSBmdW5jdGlvbnMKK1xiZWdpbnt2ZXJiYXRpbX0KK3ZvaWQKK3VzcnNjdHBfc3lz
Y3RsX3NldF8gIyMgKHVpbnQzMl90IHZhbHVlKQorXGVuZHt2ZXJiYXRpbX0KK2FuZAorXGJlZ2lu
e3ZlcmJhdGltfQordWludDMyX3QKK3VzcnNjdHBfc3lzY3RsX2dldF8gIyMgKHZvaWQpCitcZW5k
e3ZlcmJhdGltfQorcmVzcGVjdGl2ZWx5LCB3aGVyZSBcI1wjIHN0YW5kcyBmb3IgdGhlIG5hbWUg
b2YgdGhlIHZhcmlhYmxlLgorCitJbiB0aGUgZm9sbG93aW5nIHBhcmFncmFwaHMgYSBzaG9ydCBk
ZXNjcmlwdGlvbiBvZiB0aGUgcGFyYW1ldGVycyB3aWxsIGJlIGdpdmVuLgorCitcc3Vic2VjdGlv
bntNYW5pcHVsYXRlIE1lbW9yeX0KK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0
XF9zY3RwXF9zZW5kc3BhY2UoKX0KK1RoZSBzcGFjZSBvZiB0aGUgYXZhaWxhYmxlIHNlbmQgYnVm
ZmVyIGNhbiBiZSBjaGFuZ2VkIGZyb20gaXRzIGRlZmF1bHQgdmFsdWUgb2YgMjYyLDE0NCBieXRl
cwordG8gYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kICQyXnszMn0tMSQgYnl0ZXMuCisKK1xzdWJzdWJz
ZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9yZWN2c3BhY2UoKX0KK1RoZSBzcGFj
ZSBvZiB0aGUgYXZhaWxhYmxlIHJlY2VpdmUgYnVmZmVyIGNhbiBiZSBjaGFuZ2VkIGZyb20gaXRz
IGRlZmF1bHQgdmFsdWUgb2YgMjYyLDE0NCBieXRlcwordG8gYSB2YWx1ZSBiZXR3ZWVuIDAgYW5k
ICQyXnszMn0tMSQgYnl0ZXMuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0
XF9zY3RwXF9oYXNodGJsc2l6ZSgpfQorVGhlIFRDQiAoVGhyZWFkIENvbnRyb2wgQmxvY2spIGhh
c2ggdGFibGUgc2l6ZXMsIGkuZS4gdGhlIHNpemUgb2Ygb25lIFRDQiBpbiB0aGUgaGFzaCB0YWJs
ZSwgY2FuIGJlIHR1bmVkIGJldHdlZW4gCisxIGFuZCAkMl57MzJ9LTEkIGJ5dGVzLiBUaGUgZGVm
YXVsdCB2YWx1ZSBpcyAxLDAyNCBieXRlcy4gQSBUQ0IgY29udGFpbnMgZm9yIGluc3RhbmNlIHBv
aW50ZXJzIHRvIHRoZSBzb2NrZXQsIHRoZQorZW5kcG9pbnQsIGluZm9ybWF0aW9uIGFib3V0IHRo
ZSBhc3NvY2lhdGlvbiBhbmQgc29tZSBzdGF0aXN0aWMgZGF0YS4KKworXHN1YnN1YnNlY3Rpb257
dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX3BjYnRibHNpemUoKX0KK1RoZSBQQ0IgKFByb3Rv
Y29sIENvbnRyb2wgQmxvY2spIGhhc2ggdGFibGUgc2l6ZXMsIGkuZS4gdGhlIHNpemUgb2Ygb25l
IFBDQiBpbiB0aGUgaGFzaCB0YWJsZSwgY2FuIGJlIHR1bmVkIGJldHdlZW4gCisxIGFuZCAkMl57
MzJ9LTEkIGJ5dGVzLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyNTYgYnl0ZXMuIFRoZSBQQ0IgY29u
dGFpbnMgYWxsIHZhcmlhYmxlcyB0aGF0IGNoYXJhY3Rlcml6ZSBhbiBlbmRwb2ludC4KKworXHN1
YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX3N5c3RlbVxfZnJlZVxfcmVz
Y1xfbGltaXQoKX0KK1RoaXMgcGFyYW1ldGVycyB0dW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2Yg
Y2FjaGVkIHJlc291cmNlcyBpbiB0aGUgc3lzdGVtLiBJdCBjYW4gYmUgc2V0IGJldHdlZW4gCisw
IGFuZCAkMl57MzJ9LTEkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMDAwLgorCitcc3Vic3Vic2Vj
dGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfYXNvY1xfZnJlZVxfcmVzY1xfbGltaXQo
KX0KK1RoaXMgcGFyYW1ldGVycyB0dW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2FjaGVkIHJl
c291cmNlcyBpbiBhbiBhc3NvY2lhdGlvbi4gSXQgY2FuIGJlIHNldCBiZXR3ZWVuIAorMCBhbmQg
JDJeezMyfS0xJC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAuCisKK1xzdWJzdWJzZWN0aW9ue3Vz
cnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9tYnVmXF90aHJlc2hvbGRcX2NvdW50KCl9CitEYXRh
IGlzIHN0b3JlZCBpbiBtYnVmcy4gU2V2ZXJhbCBtYnVmcyBjYW4gYmUgY2hhaW5lZCB0b2dldGhl
ci4gVGhlIG1heGltdW0gbnVtYmVyIG9mIHNtYWxsIG1idWZzIGluIGEgY2hhaW4KK2NhbiBiZSBz
ZXQgd2l0aCB0aGlzIHBhcmFtZXRlciwgYmVmb3JlIGFuIG1idWYgY2x1c2V0IGlzIHVzZWQuIFRo
ZSBkZWZhdWx0IGlzIDUuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9z
Y3RwXF9hZGRcX21vcmVcX3RocmVzaG9sZCgpfQorVEJECitUaGlzIHBhcmFtZXRlciBjb25maWd1
cmVzIHRoZSB0aHJlc2hvbGQgYmVsb3cgd2hpY2ggbW9yZSBzcGFjZSBzaG91bGQgYmUgYWRkZWQg
dG8gYSBzb2NrZXQgc2VuZCBidWZmZXIuCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxNDUyIGJ5dGVz
LgorCisKK1xzdWJzZWN0aW9ue0NvbmZpZ3VyZSBSVE99CitUaGUgcmV0cmFuc21pc3Npb24gdGlt
ZW91dCAoUlRPKSwgaS5lLiB0aGUgdGltZSB0aGF0IGNvbnRyb2xzIHRoZSByZXRyYW5zbWlzc2lv
biBvZiBtZXNzYWdlcywgaGFzCitzZXZlcmFsIHBhcmFtZXRlcnMsIHRoYXQgY2FuIGJlIGNoYW5n
ZWQsIGZvciBleGFtcGxlIHRvIHNob3J0ZW4gdGhlIHRpbWUsIGJlZm9yZSBhIG1lc3NhZ2UgaXMK
K3JldHJhbnNtaXR0ZWQuIFRoZSByYW5nZSBvZiB0aGVzZSBwYXJhbWV0ZXJzIGlzIGJldHdlZW4g
MCBhbmQgJDJeezMyfS0xJH5tcy4gCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxf
c2V0XF9zY3RwXF9ydG9cX21heFxfZGVmYXVsdCgpfQorVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRo
ZSBtYXhpbXVtIHJldHJhbnNtaXNzaW9uIHRpbWVvdXQgaW4gbXMgaXMgNjAsMDAwICg2MH5zZWNz
KS4gCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9ydG9cX21p
blxfZGVmYXVsdCgpfQorVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBtaW5pbXVtIHJldHJhbnNt
aXNzaW9uIHRpbWVvdXQgaW4gbXMgaXMgMSwwMDAgKDF+c2VjKS4gCisKK1xzdWJzdWJzZWN0aW9u
e3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9ydG9cX2luaXRpYWxcX2RlZmF1bHQoKX0KK1Ro
ZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgaW5pdGlhbCByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGlu
IG1zIGlzIDMsMDAwICgzfnNlYykuIFRoaXMgdmFsdWUgaXMgb25seQorbmVlZGVkIGJlZm9yZSB0
aGUgZmlyc3QgY2FsY3VsYXRpb24gb2YgYSByb3VuZCB0cmlwIHRpbWUgdG9vayBwbGFjZS4KKwor
XHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2luaXRcX3J0b1xfbWF4
XF9kZWZhdWx0KCl9CitUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIG1heGltdW0gcmV0cmFuc21p
c3Npb24gdGltZW91dCBmb3IgYW4gSU5JVCBjaHVuayBpbiBtcyBpcyA2MCwwMDAgKDYwfnNlY3Mp
LiAKKworCitcc3Vic2VjdGlvbntTZXQgVGltZXJzfQorXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxf
c3lzY3RsXF9zZXRcX3NjdHBcX3ZhbGlkXF9jb29raWVcX2xpZmVcX2RlZmF1bHQoKX0KK0EgY29v
a2llIGhhcyBhIHNwZWNpZmllZCBsaWZlIHRpbWUuIElmIGl0IGV4cGlyZXMgdGhlIGNvb2tpZSBp
cyBub3QgdmFsaWQgYW55IG1vcmUgYW5kIGFuIEFCT1JUIGlzIHNlbnQuCitUaGUgZGVmYXVsdCB2
YWx1ZSBpbiBtcyBpcyA2MCwwMDAgKDYwfnNlY3MpLgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3Rw
XF9zeXNjdGxcX3NldFxfc2N0cFxfaGVhcnRiZWF0XF9pbnRlcnZhbFxfZGVmYXVsdCgpfQorU2V0
IHRoZSBkZWZhdWx0IHRpbWUgYmV0d2VlbiB0d28gaGVhcnRiZWF0cy4gVGhlIGRlZmF1bHQgaXMg
MzAsMDAwfm1zLgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxf
c2h1dGRvd25cX2d1YXJkXF90aW1lXF9kZWZhdWx0KCl9CitJZiBhIFNIVVRET1dOIGlzIG5vdCBh
bnN3ZXJlZCB3aXRoIGEgU0hVVERPV04tQUNLIHdoaWxlIHRoZSBzaHV0ZG93biBndWFyZCB0aW1l
ciBpcyBzdGlsbAorcnVubmluZywgdGhlIGFzc29jaWF0aW9uIHdpbGwgYmUgYWJvcnRlZCBhZnRl
ciB0aGUgZGVmYXVsdCBvZiAxODB+c2Vjcy4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lz
Y3RsXF9zZXRcX3NjdHBcX3BtdHVcX3JhaXNlXF90aW1lXF9kZWZhdWx0KCl9CitUQkQKK1RvIHNl
dCB0aGUgc2l6ZSBvZiB0aGUgcGFja2V0cyB0byB0aGUgaGlnaGVzdCB2YWx1ZSBwb3NzaWJsZSwg
dGhlIG1heGltdW0gdHJhbnNmZXIgdW5pdCAoTVRVKQorb2YgdGhlIGNvbXBsZXRlIHBhdGggaGFz
IHRvIGJlIGtub3duLiBUaGUgZGVmYXVsdCB0aW1lIGludGVydmFsIGZvciB0aGUgcGF0aCBtdHUg
ZGlzY292ZXJ5CitpcyA2MDB+c2Vjcy4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3Rs
XF9zZXRcX3NjdHBcX3NlY3JldFxfbGlmZXRpbWVcX2RlZmF1bHQoKX0KK1RCRAorVGhlIGRlZmF1
bHQgc2VjcmV0IGxpZmV0aW1lIG9mIGEgc2VydmVyIGlzIDM2MDB+c2Vjcy4KKworXHN1YnN1YnNl
Y3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX3Z0YWdcX3RpbWVcX3dhaXQoKX0KK1RC
RAorVnRhZyB0aW1lIHdhaXQgdGltZSwgMCBkaXNhYmxlcyBpdC4gRGVmYXVsdDogNjB+c2Vjcwor
CisKK1xzdWJzZWN0aW9ue1NldCBGYWlsdXJlIExpbWl0c30KK1RyYW5zbWlzc2lvbnMgYW5kIHJl
dHJhbnNtaXNzaW9ucyBvZiBtZXNzYWdlcyBtaWdodCBmYWlsLiBUbyBwcm90ZWN0IHRoZSBzeXN0
ZW0gYWdhaW5zdCB0b28gbWFueQorcmV0cmFuc21pc3Npb25zLCBsaW1pdHMgaGF2ZSB0byBiZSBk
ZWZpbmVkLgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfaW5p
dFxfcnR4XF9tYXhcX2RlZmF1bHQoKX0KK1RoZSBkZWZhdWx0IG1heGltdW0gbnVtYmVyIG9mIHJl
dHJhbnNtaXNzaW9ucyBvZiBhbiBJTklUIGNodW5rcyBpcyA4LCBiZWZvcmUgYW4gQUJPUlQgaXMg
c2VudC4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2Fzc29j
XF9ydHhcX21heFxfZGVmYXVsdCgpfQorVGhpcyBwYXJhbWV0ZXIgc2V0cyB0aGUgbWF4aW11bSBu
dW1iZXIgb2YgZmFpbGVkIHJldHJhbnNtaXNzaW9ucyBiZWZvcmUgdGhlIGFzc29jaWF0aW9uIGlz
IGFib3J0ZWQuCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMC4KKworXHN1YnN1YnNlY3Rpb257dXNy
c2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX3BhdGhcX3J0eFxfbWF4XF9kZWZhdWx0KCl9CitUaGlz
IHBhcmFtZXRlciBzZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXRoIGZhaWx1cmVzIGJlZm9y
ZSB0aGUgYXNzb2NpYXRpb24gaXMgYWJvcnRlZC4KK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDUuIE5v
dGljZSB0aGF0IHRoZSBudW1iZXIgb2YgcGF0aHMgbXVsdGlwbGllZCBieSB0aGlzIHZhbHVlIHNo
b3VsZCBiZSAKK2VxdWFsIHRvIHNjdHBcX2Fzc29jXF9ydHhcX21heFxfZGVmYXVsdC4gVGhhdCBt
ZWFucyB0aGF0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaXMgZ29vZCBmb3IgdHdvIAorcGF0
aHMuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9tYXhcX3Jl
dHJhblxfY2h1bmsoKX0KK1RoZSBwYXJhbWV0ZXIgY29uZmlndXJlcyBob3cgbWFueSB0aW1lcyBh
biB1bmx1Y2t5IGNodW5rIGNhbiBiZSByZXRyYW5zbWl0dGVkIGJlZm9yZSB0aGUgCithc3NvY2lh
dGlvbiBhYm9ydHMuIFRoZSBkZWZhdWx0IGlzIHNldCB0byAzMC4KKwkJCQkKK1xzdWJzdWJzZWN0
aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9wYXRoXF9wZlxfdGhyZXNob2xkKCl9CitU
QkQKK0RlZmF1bHQgcG90ZW50aWFsbHkgZmFpbGVkIHRocmVzaG9sZC4gRGVmYXVsdDogNjU1MzUJ
CQorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfYWJvcnRcX2lm
XF9vbmVcXzJcX29uZVxfaGl0c1xfbGltaXQoKX0KK1RCRAorV2hlbiBvbmUtMi1vbmUgaGl0cyBx
bGltaXQgYWJvcnQuIERlZmF1bHQ6IDAKKworCQkKK1xzdWJzZWN0aW9ue0NvbnRyb2wgdGhlIFNl
bmRpbmcgb2YgU0FDS3N9Citcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0
cFxfc2Fja1xfZnJlcVxfZGVmYXVsdCgpfQorVGhlIFNBQ0sgZnJlcXVlbmN5IGRlZmluZXMgdGhl
IG51bWJlciBvZiBwYWNrZXRzIHRoYXQgYXJlIGF3YWl0ZWQsIGJlZm9yZSBhIFNBQ0sgaXMgc2Vu
dC4gCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyLgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9z
eXNjdGxcX3NldFxfc2N0cFxfZGVsYXllZFxfc2Fja1xfdGltZVxfZGVmYXVsdCgpfQorQXMgYSBT
QUNLIChTZWxlY3RpdmUgQWNrbm93bGVnbWVudCkgaXMgc2VudCBhZnRlciBldmVyeSBvdGhlciBw
YWNrZXQsIGEgdGltZXIgaXMgc2V0IHRvIHNlbmQgYQorU0FDSyBpbiBjYXNlIGFub3RoZXIgcGFj
a2V0IGRvZXMgbm90IGFycml2ZSBpbiBkdWUgdGltZS4gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRo
aXMgdGltZXIgaXMKKzIwMH5tcy4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9z
ZXRcX3NjdHBcX3N0cmljdFxfc2Fja3MoKX0KK1RCRAorVGhpcyBpcyBhIGZsYWcgdG8gdHVybiB0
aGUgY29udHJvbGxpbmcgb2YgdGhlIGNvaGVyZW5jZSBvZiBTQUNLcyBvbiBvciBvZmYuIFRoZSBk
ZWZhdWx0IHZhbHVlIGlzCisxIChvbikuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0
bFxfc2V0XF9zY3RwXF9uclxfc2Fja1xfb25cX29mZigpfQorSWYgYSBzbG93IGhvc3RzIHJlY2Vp
dmVzIGRhdGEgb24gYSBsb3NzeSBsaW5rIGl0IGlzIHBvc3NpYmxlIHRoYXQgaXRzIHJlY2VpdmVy
IHdpbmRvdyBpcyBmdWxsIGFuZCBuZXcgCitkYXRhIGNhbiBvbmx5IGJlIGFjY2VwdGVkIGlmIG9u
ZSBjaHVuayB3aXRoIGEgaGlnaGVyIFRTTiAoVHJhbnNtaXNzaW9uIFNlcXVlbmNlIE51bWJlcikg
dGhhdCBoYXMgCitwcmV2aW91c2x5IGJlZW4gYWNrbm93bGVkZ2VkIGlzIGRyb3BwZWQuIEFzIGEg
Y29uc2VxdWVuY2UgdGhlIHNlbmRlciBoYXMgdG8gc3RvcmUgZGF0YSwgZXZlbiBpZgordGhleSBo
YXZlIGJlZW4gYWNrbm93bGVkZ2VkIGluIGNhc2UgdGhleSBoYXZlIHRvIGJlIHJldHJhbnNtaXR0
ZWQuIElmIHRoaXMgYmVoYXZpb3IgaXMgbm90IG5lY2Vzc2FyeSwKK25vbi1yZW5lZ2FibGUgU0FD
S3MgY2FuIGJlIHR1cm5lZCBvbi4gCitCeSBkZWZhdWx0IHRoZSB1c2Ugb2Ygbm9uLXJlbmVnYWJs
ZSBTQUNLcyBpcyB0dXJuZWQgb2ZmLgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxc
X3NldFxfc2N0cFxfZW5hYmxlXF9zYWNrXF9pbW1lZGlhdGVseSgpfQorSW4gc29tZSBjYXNlcyBp
dCBpcyBub3QgZGVzaXJhYmxlIHRvIHdhaXQgZm9yIHRoZSBTQUNLIHRpbWVyIHRvIGV4cGlyZSBi
ZWZvcmUgYSBTQUNLIGlzIHNlbnQuIEluIHRoZXNlCitjYXNlcyBhIGJpdCBjYWxsZWQgU0FDSy1J
TU1FRElBVEVMWX5cY2l0ZXtzYWNrLWltbX0gY2FuIGJlIHNldCB0byBwcm92b2tlIHRoZSBpbnN0
YW50IHNlbmRpbmcgb2YgYSBTQUNLLiAKK1RoZSBkZWZhdWx0IGlzIHRvIHR1cm4gaXQgb2ZmLiAK
KworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX0wyXF9hYmNcX3Zh
cmlhYmxlKCl9CitUQkQKK1NDVFAgQUJDIG1heCBpbmNyZWFzZSBwZXIgU0FDSyAoTCkuIERlZmF1
bHQ6IDEKKworXHN1YnNlY3Rpb257Q2hhbmdlIE1heCBCdXJzdH0KK01heCBidXJzdCBkZWZpbmVz
IHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXRzIHRoYXQgbWF5IGJlIHNlbnQgaW4gb25lIGZs
aWdodC4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX21heFxf
YnVyc3RcX2RlZmF1bHQoKX0KK1RoZSBkZWZhdWx0IHZhbHVlIGZvciBtYXggYnVyc3QgaXMgMCwg
d2hpY2ggbWVhbnMgdGhhdCB0aGUgbnVtYmVyIG9mIHBhY2tldHMgc2VudCBhcyBhIGZsaWdodAor
aXMgbm90IGxpbWl0ZWQgYnkgdGhpcyBwYXJhbWV0ZXIsIGJ1dCBtYXkgYmUgYnkgYW5vdGhlciBv
bmUsIHNlZSB0aGUgbmV4dCBwYXJhZ3JhcGguCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5
c2N0bFxfc2V0XF9zY3RwXF91c2VcX2N3bmRcX2Jhc2VkXF9tYXhidXJzdCgpfQorVGhlIHVzZSBv
ZiBtYXggYnVyc3QgaXMgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlIGNvbmdlc3Rpb24gd2luZG93
IChjd25kKS4gCitUaGlzIHBhcmFtZXRlciBpcyBzZXQgYnkgZGVmYXVsdC4KKworXHN1YnN1YnNl
Y3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2hiXF9tYXhidXJzdCgpfQorSGVhcnRi
ZWF0cyBhcmUgbW9zdGx5IHVzZWQgdG8gdmVyaWZ5IGEgcGF0aC4gVGhlaXIgbnVtYmVyIGNhbiBi
ZSBsaW1pdGVkLiBUaGUgZGVmYXVsdCBpcyA0LgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9z
eXNjdGxcX3NldFxfc2N0cFxfZnJcX21heFxfYnVyc3RcX2RlZmF1bHQoKX0KK0luIHRoZSBzdGF0
ZSBvZiBmYXN0IHJldHJhbnNtaXNzaW9uIHRoZSBudW1iZXIgb2YgcGFja2V0IGJ1cnN0cyBjYW4g
YmUgbGltaXRlZC4gVGhlIGRlZmF1bHQKK3ZhbHVlIGlzIDQuCisKKworXHN1YnNlY3Rpb257SGFu
ZGxlIENodW5rc30KK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9w
ZWVyXF9jaHVua1xfb2goKX0KK0luIG9yZGVyIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHBlZXIncyBh
ZHZlcnRpc2VkIHJlY2VpdmVyIHdpbmRvdywgdGhlIHNlbmRlciBjYWxjdWxhdGVzIHRoZSB3aW5k
b3cgYnkKK3N1YnRyYWN0aW5nIHRoZSBhbW91bnQgb2YgZGF0YSBzZW50LiBZZXQsIHNvbWUgT1Nz
IHJlZHVjZSB0aGUgcmVjZWl2ZXIgd2luZG93IGJ5IHRoZSByZWFsIHNwYWNlIG5lZWRlZAordG8g
c3RvcmUgdGhlIGRhdGEuIFRoaXMgcGFyYW1ldGVyIHNldHMgdGhlIGFkZGl0aW9uYWwgYW1vdW50
IHRvIGRlYml0IHRoZSBwZWVyJ3MgcmVjZWl2ZXIgd2luZG93IHBlcgorY2h1bmsgc2VudC4gVGhl
IGRlZmF1bHQgdmFsdWUgaXMgMjU2LCB3aGljaCBpcyB0aGUgdmFsdWUgbmVlZGVkIGJ5IEZyZWVC
U0QuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9tYXhcX2No
dW5rc1xfb25cX3F1ZXVlKCl9CitUaGlzIHBhcmFtZXRlciBzZXRzIHRoZSBtYXhpbXVtIG51bWJl
ciBvZiBjaHVua3MgdGhhdCBjYW4gYmUgcXVldWVkIHBlciBhc3NvY2lhdGlvbi4gVGhlIGRlZmF1
bHQgCit2YWx1ZSBpcyA1MTIuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0
XF9zY3RwXF9taW5cX3NwbGl0XF9wb2ludCgpfQorVEJECitUaGUgbWluaW11bSBzaXplIHdoZW4g
c3BsaXR0aW5nIGEgY2h1bmsgaXMgMjkwNCBieXRlcyBieSBkZWZhdWx0LgorCitcc3Vic3Vic2Vj
dGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfY2h1bmtzY2FsZSgpfQorVEJECitUaGlz
IHBhcmFtZXRlciBjYW4gYmUgdHVuZWQgZm9yIHNjYWxpbmcgb2YgbnVtYmVyIG9mIGNodW5rcyBh
bmQgbWVzc2FnZXMuIFRoZSBkZWZhdWx0IGlzMTAuCQkKKwkJCQkKK1xzdWJzdWJzZWN0aW9ue3Vz
cnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9taW5cX3Jlc2lkdWFsKCl9CitUQkQKK1RoaXMgcGFy
YW1ldGVyIGNvbmZpZ3VyZXMgdGhlIG1pbmltdW0gc2l6ZSBvZiB0aGUgcmVzaWR1YWwgZGF0YSBj
aHVuayBpbiB0aGUgc2Vjb25kCitwYXJ0IG9mIHRoZSBzcGxpdC4gVGhlIGRlZmF1bHQgaXMgMTQ1
Mi4KKworCitcc3Vic2VjdGlvbntDYWxjdWxhdGUgUlRUfQorVGhlIGNhbGN1bGF0aW9uIG9mIHRo
ZSByb3VuZCB0cmlwIHRpbWUgKFJUVCkgZGVwZW5kcyBvbiBzZXZlcmFsIHBhcmFtZXRlcnMuCisK
K1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9ydHR2YXJcX2J3KCl9
CitUQkQKK1NoaWZ0IGFtb3VudCBmb3IgYncgc21vb3RoaW5nIG9uIHJ0dCBjYWxjLiBEZWZhdWx0
OiA0CisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9ydHR2YXJc
X3J0dCgpfQorVEJECitTaGlmdCBhbW91bnQgZm9yIHJ0dCBzbW9vdGhpbmcgb24gcnR0IGNhbGMu
IERlZmF1bHQ6IDUKKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBc
X3J0dHZhclxfZXFyZXQoKX0KK1RCRAorV2hhdCB0byByZXR1cm4gd2hlbiBydHQgYW5kIGJ3IGFy
ZSB1bmNoYW5nZWQuIERlZmF1bHQ6IDAKKworCitcc3Vic2VjdGlvbntJbmZsdWVuY2UgdGhlIENv
bmdlc3Rpb24gQ29udHJvbH0KK1RoZSBjb25nZXN0aW9uIGNvbnRyb2wgc2hvdWxkIHByb3RlY3Qg
dGhlIG5ldHdvcmsgYWdhaW5zdCBmYXN0IHNlbmRlcnMuIAorCitcc3Vic3Vic2VjdGlvbnt1c3Jz
Y3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfZWNuXF9lbmFibGV9CitFeHBsaWNpdCBjb25nZXN0aW9u
IG5vdGlmaWNhdGlvbnMgYXJlIHR1cm5lZCBvbiBieSBkZWZhdWx0LgorCitcc3Vic3Vic2VjdGlv
bnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfZGVmYXVsdFxfY2NcX21vZHVsZSgpfQorVGhp
cyBwYXJhbWV0ZXIgc2V0cyB0aGUgZGVmYXVsdCBhbGdvcml0aG0gZm9yIHRoZSBjb25nZXN0aW9u
IGNvbnRyb2wuCitEZWZhdWx0IGlzIDAsIGkuZS4gdGhlIG9uZSBzcGVjaWZpZWQgaW4gUkZDfjQ5
NjAuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9pbml0aWFs
XF9jd25kKCl9CitTZXQgdGhlIGluaXRpYWwgY29uZ2VzdGlvbiB3aW5kb3cgaW4gTVRVcy4gVGhl
IGRlZmF1bHQgaXMgMy4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3Nj
dHBcX3VzZVxfZGNjY1xfZWNuKCl9CitUQkQKK0VuYWJsZSBmb3IgUlRDQyBDQyBkYXRhY2VudGVy
IEVDTi4gRGVmYXVsdDogMQorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxf
c2N0cFxfc3RlYWR5XF9zdGVwKCl9CitUQkQKK0hvdyBtYW55IHRoZSBzYW1lcyBpdCB0YWtlcyB0
byB0cnkgc3RlcCBkb3duIG9mIGN3bmQuIERlZmF1bHQ6IDIwCisKKworXHN1YnNlY3Rpb257Q29u
ZmlndXJlIEFVVEggYW5kIEFERC1JUH0KK0FuIGltcG9ydGFudCBleHRlbnNpb24gb2YgU0NUUCBp
cyB0aGUgZHluYW1pYyBhZGRyZXNzIHJlY29uZmlndXJhdGlvbn5cY2l0ZXthZGRpcH0sIGFsc28g
a25vd24gYXMKK0FERC1JUCwgd2hpY2ggYWxsb3dzIHRoZSBjaGFuZ2luZyBvZiBhZGRyZXNzZXMg
ZHVyaW5nIHRoZSBsaWZldGltZSBvZiBhbiBhc3NvY2lhdGlvbi4KK0ZvciB0aGlzIGZlYXR1cmUg
dGhlIEFVVEggZXh0ZW5zaW9uflxjaXRle2F1dGh9IGlzIG5lY2Vzc2FyeS4KKworXHN1YnN1YnNl
Y3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2F1dG9cX2FzY29uZigpfQorSWYgU0NU
UCBBdXRvLUFTQ09ORiBpcyBlbmFibGVkLCB0aGUgcGVlciBpcyBpbmZvcm1lZCBhdXRvbWF0aWNh
bGx5IHdoZW4gYSBuZXcgYWRkcmVzcworaXMgYWRkZWQgb3IgcmVtb3ZlZC4gVGhpcyBmZWF0dXJl
IGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3Rs
XF9zZXRcX3NjdHBcX211bHRpcGxlXF9hc2NvbmZzKCl9CitCeSBkZWZhdWx0IHRoZSBzZW5kaW5n
IG9mIG11bHRpcGxlIEFTQ09ORnMgaXMgZGlzYWJsZWQuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNj
dHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9hdXRoXF9kaXNhYmxlKCl9CitUaGUgdXNlIG9mIEFVVEgs
IHdoaWNoIGlzIG5vcm1hbGx5IHR1cm5lZCBvbiwgY2FuIGJlIGRpc2FibGVkIGJ5IHNldHRpbmcg
dGhpcyBwYXJhbWV0ZXIgdG8gMS4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9z
ZXRcX3NjdHBcX2FzY29uZlxfYXV0aFxfbm9jaGsoKX0KK0l0IGlzIGFsc28gcG9zc2libGUgdG8g
ZGlzYWJsZSB0aGUgcmVxdWlyZW1lbnQgdG8gdXNlIEFVVEggaW4gY29uanVuY3Rpb24gd2l0aCBB
REQtSVAgYnkgc2V0dGluZyB0aGlzIHBhcmFtZXRlcgordG8gMS4KKworCitcc3Vic2VjdGlvbntD
b25jdXJyZW50IE11bHRpcGF0aCBUcmFuc2ZlciAoQ01UKX0KK0EgcHJvbWluZW50IGZlYXR1cmUg
b2YgU0NUUCBpcyB0aGUgcG9zc2liaWxpdHkgdG8gdXNlIHNldmVyYWwgYWRkcmVzc2VzIGZvciB0
aGUgc2FtZSBhc3NvY2lhdGlvbi4KK09uZSBpcyB0aGUgcHJpbWFyeSBwYXRoLCBhbmQgdGhlIG90
aGVycyBhcmUgbmVlZGVkIGluIGNhc2Ugb2YgYSBwYXRoIGZhaWx1cmUuIFVzaW5nIENNVCB0aGUg
ZGF0YSBpcyBzZW50IAorb24gc2V2ZXJhbCBwYXRocyB0byBlbmhhbmNlIHRoZSB0aHJvdWdocHV0
LgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfY210XF9vblxf
b2ZmKCl9CitUbyB0dXJuIENNVCBvbiwgdGhpcyBwYXJhbWV0ZXIgaGFzIHRvIGJlIHNldCB0byAx
LgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfY210XF91c2Vc
X2RhYygpfQorVG8gdXNlIGRlbGF5ZWQgYWNrbm93bGVkZ21lbnRzIHdpdGggQ01UIHRoaXMgcGFy
YW1ldGVyIGhhcyB0byBiZSBzZXQgdG8gMS4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lz
Y3RsXF9zZXRcX3NjdHBcX2J1ZmZlclxfc3BsaXR0aW5nKCl9CitGb3IgQ01UIGl0IG1ha2VzIHNl
bnNlIHRvIHNwbGl0IHRoZSBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlciB0byBoYXZlIHNoYXJlcyBm
b3IgZWFjaCBwYXRoLiAKK0J5IGRlZmF1bHQgYnVmZmVyIHNwbGl0dGluZyBpcyB0dXJuZWQgb2Zm
LgorCisKK1xzdWJzZWN0aW9ue05ldHdvcmsgQWRkcmVzcyBUcmFuc2xhdGlvbiAoTkFUKX0KK1Rv
IGJlIGFibGUgdG8gcGFzcyBOQVQgYm94ZXMsIHRoZSBib3hlcyBoYXZlIHRvIGhhbmRsZSBTQ1RQ
IHBhY2tldHMgaW4gYSBzcGVjaWZpYyB3YXkuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5
c2N0bFxfc2V0XF9zY3RwXF9uYXRcX2ZyaWVuZGx5KCl9CitTQ1RQIE5BVCBmcmllbmRseSBvcGVy
YXRpb24uIERlZmF1bHQ6MQorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxf
c2N0cFxfaW5pdHNcX2luY2x1ZGVcX25hdFxfZnJpZW5kbHkoKX0KK0VuYWJsZSBzZW5kaW5nIG9m
IHRoZSBuYXQtZnJpZW5kbHkgU0NUUCBvcHRpb24gb24gSU5JVHMuIERlZmF1bHQ6IDAKKworXHN1
YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX3VkcFxfdHVubmVsaW5nXF9w
b3J0KCl9CitTZXQgdGhlIFNDVFAvVURQIHR1bm5lbGluZyBwb3J0LiBEZWZhdWx0OiA5ODk5CisK
K1xzdWJzZWN0aW9ue1NDVFAgTW9iaWxpdHl9Citcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNj
dGxcX3NldFxfc2N0cFxfbW9iaWxpdHlcX2Jhc2UoKX0KK1RCRAorRW5hYmxlIFNDVFAgYmFzZSBt
b2JpbGl0eS4gRGVmYXVsdDogMAorCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxf
c2V0XF9zY3RwXF9tb2JpbGl0eVxfZmFzdGhhbmRvZmYoKX0KK1RCRAorRW5hYmxlIFNDVFAgZmFz
dCBoYW5kb2ZmLiBkZWZhdWx0OiAwCisKKworXHN1YnNlY3Rpb257TWlzY2VsbGFuZW91c30KK1xz
dWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9ub1xfY3N1bVxfb25cX2xv
b3BiYWNrKCl9CitDYWxjdWxhdGluZyB0aGUgY2hlY2tzdW0gZm9yIHBhY2tldHMgc2VudCBvbiBs
b29wYmFjayBpcyB0dXJuZWQgb2ZmIGJ5IGRlZmF1bHQuCitUbyB0dXJuIGl0IG9uLCBzZXQgdGhp
cyBwYXJhbWV0ZXIgdG8gMC4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRc
X3NjdHBcX25yXF9vdXRnb2luZ1xfc3RyZWFtc1xfZGVmYXVsdCgpfQorVGhlIHBlZXIgaXMgbm90
aWZpZWQgYWJvdXQgdGhlIG51bWJlciBvZiBvdXRnb2luZyBzdHJlYW1zIGluIHRoZSBJTklUIG9y
IElOSVQtQUNLIGNodW5rLgorVGhlIGRlZmF1bHQgaXMgMTAuIAorCitcc3Vic3Vic2VjdGlvbnt1
c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfZG9cX2RyYWluKCl9CitEZXRlcm1pbmVzIHdoZXRo
ZXIgU0NUUCBzaG91bGQgcmVzcG9uZCB0byB0aGUgZHJhaW4gY2FsbHMuIERlZmF1bHQ6IDEJCQor
Citcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfc3RyaWN0XF9kYXRh
XF9vcmRlcigpfQorVEJECitFbmZvcmNlIHN0cmljdCBkYXRhIG9yZGVyaW5nLCBhYm9ydCBpZiBj
b250cm9sIGluc2lkZSBkYXRhLiBEZWZhdWx0OiAwCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBc
X3N5c2N0bFxfc2V0XF9zY3RwXF9kZWZhdWx0XF9zc1xfbW9kdWxlKCl9CitTZXQgdGhlIGRlZmF1
bHQgc3RyZWFtIHNjaGVkdWxpbmcgbW9kdWxlLiBJbXBsZW1lbnRlZCBtb2R1bGVzIGFyZToKK1ND
VFBcX1NTXF9ERUZBVUxULCBTQ1RQXF9TU1xfUk9VTkRcX1JPQklOLCBTQ1RQXF9TU1xfUk9VTkRc
X1JPQklOXF9QQUNLRVQsCitTQ1RQXF9TU1xfUFJJT1JJVFksIFNDVFBcX1NTXF9GQUlSXF9CQU5E
V0lUSCwgYW5kIFNDVFBcX1NTXF9GSVJTVFxfQ09NRS4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0
cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2RlZmF1bHRcX2ZyYWdcX2ludGVybGVhdmUoKX0KK1RCRAor
RGVmYXVsdCBmcmFnbWVudCBpbnRlcmxlYXZlIGxldmVsLiBEZWZhdWx0OiAxCisKK1xzdWJzdWJz
ZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9ibGFja2hvbGUoKX0KK1RCRAorRW5h
YmxlIFNDVFAgYmxhY2tob2xpbmcuIERlZmF1bHQ6IDAKKworXHN1YnN1YnNlY3Rpb257dXNyc2N0
cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2xvZ2dpbmdcX2xldmVsKCl9CitTZXQgdGhlIGxvZ2dpbmcg
bGV2ZWwuIFRoZSBkZWZhdWx0IGlzIDAuCisKKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lz
Y3RsXF9zZXRcX3NjdHBcX2RlYnVnXF9vbigpfQorVHVybiBkZWJ1ZyBvdXRwdXQgb24gb3Igb2Zm
LiBJdCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LiBUbyBvYnRhaW4gZGVidWcgb3V0cHV0LAorU0NU
UFxfREVCVUcgaGFzIHRvIGJlIHNldCBhcyBhIGNvbXBpbGUgZmxhZy4KKworCQkJCQkJCislVGhl
IGZvbGxvd2luZyB2YXJpYWJsZXMgYXJlIHN1cHBvcnRlZDoKKyVcYmVnaW57bG9uZ3RhYmxlfXt8
bHxsfGN8fSAKKyVcaGxpbmUKKyV7XGJmc2VyaWVzIFBhcmFtZXRlcn0me1xiZnNlcmllcyBNZWFu
aW5nfSZ7XGJmc2VyaWVzIERlZmF1bHQgVmFsdWV9IFx0YWJ1bGFybmV3bGluZSAKKyVcZW5kaGVh
ZAorJVxobGluZQorJXNjdHBcX3NlbmRzcGFjZSZTZW5kIGJ1ZmZlciBzcGFjZSYxODY0MTM1XHRh
YnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX3JlY3ZzcGFjZSZSZWNlaXZlIGJ1ZmZlciBzcGFj
ZSYxODY0MTM1IFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9oYXNodGJsc2l6ZSZUdW5h
YmxlIGZvciBUQ0IgaGFzaCB0YWJsZSBzaXplcyYxMDI0IFx0YWJ1bGFybmV3bGluZSBcaGxpbmUK
KyVzY3RwXF9wY2J0YmxzaXplJlR1bmFibGUgZm9yIFBDQiBoYXNoIHRhYmxlIHNpemVzJjI1NiBc
dGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfc3lzdGVtXF9mcmVlXF9yZXNjXF9saW1pdCZD
YWNoZWQgcmVzb3VyY2VzIGluIHRoZSBzeXN0ZW0mMTAwMCBcdGFidWxhcm5ld2xpbmUgXGhsaW5l
Cislc2N0cFxfYXNvY1xfZnJlZVxfcmVzY1xfbGltaXQmQ2FzaGVkIHJlc291cmNlcyBpbiBhbiBh
c3NvY2lhdGlvbiYxMCBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfcnRvXF9tYXhcX2Rl
ZmF1bHQmRGVmYXVsdCB2YWx1ZSBmb3IgUlRPXF9tYXgmNjAwMDB+bXMgXHRhYnVsYXJuZXdsaW5l
IFxobGluZQorJXNjdHBcX3J0b1xfbWluXF9kZWZhdWx0JkRlZmF1bHQgdmFsdWUgZm9yIFJUT1xf
bWluJjEwMDB+bXMgXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX3J0b1xfaW5pdGlhbFxf
ZGVmYXVsdCZEZWZhdWx0IHZhbHVlIGZvciBSVE9cX2luaXRpYWwmMzAwMH5tcyBcdGFidWxhcm5l
d2xpbmUgXGhsaW5lCislc2N0cFxfaW5pdFxfcnRvXF9tYXhcX2RlZmF1bHQmRGVmYXVsdCB2YWx1
ZSBmb3IgdGhlIG1heGltdW0gUlRPJjYwMDAwfm1zIFx0YWJ1bGFybmV3bGluZQorICUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb3Igc2VuZGluZyBh
biBJTklUJiBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfdmFsaWRcX2Nvb2tpZVxfbGlm
ZVxfZGVmYXVsdCZWYWxpZCBjb29raWUgbGlmZSB0aW1lJjYwMDAwfm1zIFx0YWJ1bGFybmV3bGlu
ZSBcaGxpbmUKKyVzY3RwXF9pbml0XF9ydHhcX21heFxfZGVmYXVsdCZNYXhpbXVtIG51bWJlciBv
ZiBJTklUIHJldHJhbnNtaXNzaW9ucyY4IFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9h
c3NvY1xfcnR4XF9tYXhcX2RlZmF1bHQmTWF4aW11bSBudW1iZXIgb2YgZmFpbGVkIHJldHJhbnNt
aXNzaW9ucyYxMFx0YWJ1bGFybmV3bGluZQorJQkJCQkJCSYgYmVmb3JlIHRoZSBhc3NvY2lhdGlv
biBpcyBhYm9ydGVkJlx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9wYXRoXF9ydHhcX21h
eFxfZGVmYXVsdCZNYXhpbXVtIG51bWJlciBvZiBmYWlsZWQgcmV0cmFuc21pc3Npb25zJjVcdGFi
dWxhcm5ld2xpbmUKKyUJCQkJCQkmYmVmb3JlIGEgcGF0aCBmYWlscyZcdGFidWxhcm5ld2xpbmUg
XGhsaW5lCislc2N0cFxfZWNuXF9lbmFibGUmRW5hYmxpbmcgZXhwbGljaXQgY29uZ2VzdGlvbiBu
b3RpZmljYXRpb25zJjFcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfc3RyaWN0XF9zYWNr
cyZDb250cm9sIHRoZSBjb2hlcmVuY2Ugb2YgU0FDS3MmMSBcdGFidWxhcm5ld2xpbmUgXGhsaW5l
Cislc2N0cFxfZGVsYXllZFxfc2Fja1xfdGltZVxfZGVmYXVsdCZEZWZhdWx0IGRlbGF5ZWQgU0FD
SyB0aW1lciYyMDB+bXNcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfc2Fja1xfZnJlcVxf
ZGVmYXVsdCZEZWZhdWx0IFNBQ0sgZnJlcXVlbmN5JjIgXHRhYnVsYXJuZXdsaW5lIFxobGluZQor
JXNjdHBcX25yXF9zYWNrXF9vblxfb2ZmJlR1cm4gbm9uLXJlbmVnYWJsZSBTQUNLcyBvbiBvciBv
ZmYmMCBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfZW5hYmxlXF9zYWNrXF9pbW1lZGlh
dGVseSZFbmFibGUgc2VuZGluZyBvZiB0aGUgU0FDSy0mMCBcdGFidWxhcm5ld2xpbmUgCQkJCQkJ
JklNTUVESUFURUxZIGJpdC4mXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX25vXF9jc3Vt
XF9vblxfbG9vcGJhY2smRW5hYmxlIHRoZSBjb21waWxhdGlvbiBvZiB0aGUgY2hlY2tzdW0gb24m
MSBcdGFidWxhcm5ld2xpbmUKKyUJCQkJCQkmcGFja2V0cyBzZW50IG9uIGxvb3BiYWNrJlx0YWJ1
bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9wZWVyXF9jaHVua1xfb2gmQW1vdW50IHRvIGRlYml0
IHBlZXJzIHJ3bmQgcGVyIGNodW5rIHNlbnQmMjU2IFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVz
Y3RwXF9tYXhcX2J1cnN0XF9kZWZhdWx0JkRlZmF1bHQgbWF4IGJ1cnN0IGZvciBTQ1RQIGVuZHBv
aW50cyYwIFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF91c2VcX2N3bmRcX2Jhc2VkXF9t
YXhidXJzdCZVc2UgbWF4IGJ1cnN0IGJhc2VkIG9uIHRoZSBzaXplIG9mICYxXHRhYnVsYXJuZXds
aW5lCQkJCSUJCQkJCQkJJnRoZSBjb25nZXN0aW9uIHdpbmRvdyZcdGFidWxhcm5ld2xpbmUgXGhs
aW5lCislc2N0cFxfaGJcX21heGJ1cnN0JkNvbmZpcm1hdGlvbiBIZWFydGJlYXQgbWF4IGJ1cnN0
JjQgXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX21heFxfY2h1bmtzXF9vblxfcXVldWUm
RGVmYXVsdCBtYXggY2h1bmtzIG9uIHF1ZXVlIHBlciBhc29jJjUxMiBcdGFidWxhcm5ld2xpbmUg
XGhsaW5lCislc2N0cFxfbWluXF9zcGxpdFxfcG9pbnQmTWluaW11bSBzaXplIHdoZW4gc3BsaXR0
aW5nIGEgY2h1bmsmMjkwNCBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfY2h1bmtzY2Fs
ZSZUdW5hYmxlIGZvciBTY2FsaW5nIG9mIG51bWJlciBvZiBjaHVua3MgYW5kJjEwXHRhYnVsYXJu
ZXdsaW5lIAorJQkJCQkJCSZtZXNzYWdlcyZcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxf
bWJ1ZlxfdGhyZXNob2xkXF9jb3VudCZNYXhpbXVtIG51bWJlciBvZiBzbWFsbCBtYnVmcyBpbiBh
IGNoYWluJjVcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfaGVhcnRiZWF0XF9pbnRlcnZh
bFxfZGVmYXVsdCZEZWFmdWx0IHRpbWUgYmV0d2VlbiB0d28gSGVhcnRiZWF0cyYzMDAwMH5tc1x0
YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9wbXR1XF9yYWlzZVxfdGltZVxfZGVmYXVsdCZE
ZWZhdWx0IFBNVFUgcmFpc2UgdGltZXImNjAwfnNlY3NcdGFidWxhcm5ld2xpbmUgXGhsaW5lCisl
c2N0cFxfc2h1dGRvd25cX2d1YXJkXF90aW1lXF9kZWZhdWx0JkRlZmF1bHQgc2h1dGRvd24gZ3Vh
cmQgdGltZXImMTgwfnNlY3NcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfc2VjcmV0XF9s
aWZldGltZVxfZGVmYXVsdCZEZWZhdWx0IHNlY3JldCBsaWZldGltZSYzNjAwfnNlY3MgXHRhYnVs
YXJuZXdsaW5lIFxobGluZQorJXNjdHBcX2FkZFxfbW9yZVxfdGhyZXNob2xkJlRocmVzaG9sZCB3
aGVuIG1vcmUgc3BhY2Ugc2hvdWxkICYxNDUyXHRhYnVsYXJuZXdsaW5lIAorJQkJCQkJCSZiZSBh
ZGRlZCB0byBhIHNvY2tldCBzZW5kIGJ1ZmZlciZcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0
cFxfbnJcX291dGdvaW5nXF9zdHJlYW1zXF9kZWZhdWx0JkRlZmF1bHQgbnVtYmVyIG9mIG91dGdv
aW5nIHN0cmVhbXMmMTBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfY210XF9vblxfb2Zm
JlR1cm4gQ01UIG9uIG9yIG9mZi4mMFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9jbXRc
X3VzZVxfZGFjJlVzZSBkZWxheWVkIGFja25vd2xlZGdtZW50IGZvciBDTVQmMFx0YWJ1bGFybmV3
bGluZSBcaGxpbmUKKyVzY3RwXF9mclxfbWF4XF9idXJzdFxfZGVmYXVsdCZEZWZhdWx0IG1heCBi
dXJzdCBmb3IgU0NUUCBlbmRwb2ludHMgd2hlbiAmNFx0YWJ1bGFybmV3bGluZQorJQkJCQkJCSZm
YXN0IHJldHJhbnNtaXR0aW5nJlx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9hdXRvXF9h
c2NvbmYmRW5hYmxlIFNDVFAgQXV0by1BU0NPTkYmMVx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVz
Y3RwXF9tdWx0aXBsZVxfYXNjb25mcyZFbmFibGUgU0NUUCBNdWxpcGxlLUFTQ09ORnMmMCBcdGFi
dWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfYXNjb25mXF9hdXRoXF9ub2NoayZEaXNhYmxlIFND
VFAgQVNDT05GIEFVVEggcmVxdWlyZW1lbnQmMFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3Rw
XF9hdXRoXF9kaXNhYmxlJkRpc2FibGUgU0NUUCBBVVRIIGZ1bmN0aW9uJjBcdGFidWxhcm5ld2xp
bmUgXGhsaW5lCislc2N0cFxfbmF0XF9mcmllbmRseSZTQ1RQIE5BVCBmcmllbmRseSBvcGVyYXRp
b24mMVx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9pbml0c1xfaW5jbHVkZVxfbmF0XF9m
cmllbmRseSZFbmFibGUgc2VuZGluZyBvZiB0aGUgbmF0LWZyaWVuZGx5ICYwXHRhYnVsYXJuZXds
aW5lCislCQkJCQkmU0NUUCBvcHRpb24gb24gSU5JVHMuJlx0YWJ1bGFybmV3bGluZSBcaGxpbmUK
KyVzY3RwXF91ZHBcX3R1bm5lbGluZ1xfcG9ydCZTZXQgdGhlIFNDVFAvVURQIHR1bm5lbGluZyBw
b3J0Jjk4OTlcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfZG9cX2RyYWluJkRldGVybWlu
ZXMgd2hldGhlciBTQ1RQIHNob3VsZCByZXNwb25kJjFcdGFidWxhcm5ld2xpbmUKKyUJCQkJCSZ0
byB0aGUgZHJhaW4gY2FsbHMmXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX2Fib3J0XF9p
Zlxfb25lXF8yXF9vbmVcX2hpdHNcX2xpbWl0JldoZW4gb25lLTItb25lIGhpdHMgcWxpbWl0IGFi
b3J0JjAgXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX3N0cmljdFxfZGF0YVxfb3JkZXIm
RW5mb3JjZSBzdHJpY3QgZGF0YSBvcmRlcmluZywgYWJvcnQgaWYgY29udHJvbCYwXHRhYnVsYXJu
ZXdsaW5lCislCQkJCQkmaW5zaWRlIGRhdGEmXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBc
X21pblxfcmVzaWR1YWwmTWluaW11bSByZXNpZHVhbCBkYXRhIGNodW5rIGluIHNlY29uZCYxNDUy
XHRhYnVsYXJuZXdsaW5lCislCQkJCQkmcGFydCBvZiBzcGxpdCZcdGFidWxhcm5ld2xpbmUgXGhs
aW5lCislc2N0cFxfbWF4XF9yZXRyYW5cX2NodW5rJk1heGltdW0gdGltZXMgYW4gdW5sdWNreSBj
aHVuayBjYW4gYmUmMzBcdGFidWxhcm5ld2xpbmUKKyUJCQkJJiByZXRyYW5zbWl0dGVkIGJlZm9y
ZSB0aGUgYXNzb2NpYXRpb24gYWJvcnRzJlx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9k
ZWZhdWx0XF9jY1xfbW9kdWxlJkRlZmF1bHQgY29uZ2VzdGlvbiBjb250cm9sIG1vZHVsZSYwXHRh
YnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX2RlZmF1bHRcX3NzXF9tb2R1bGUmRGVmYXVsdCBz
dHJlYW0gc2NoZWR1bGluZyBtb2R1bGUmMCBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxf
ZGVmYXVsdFxfZnJhZ1xfaW50ZXJsZWF2ZSZEZWZhdWx0IGZyYWdtZW50IGludGVybGVhdmUgbGV2
ZWwmMVx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9tb2JpbGl0eVxfYmFzZSZFbmFibGUg
U0NUUCBiYXNlIG1vYmlsaXR5JjBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfbW9iaWxp
dHlcX2Zhc3RoYW5kb2ZmJkVuYWJsZSBTQ1RQIGZhc3QgaGFuZG9mZiYwXHRhYnVsYXJuZXdsaW5l
IFxobGluZQorJXNjdHBcX0wyXF9hYmNcX3ZhcmlhYmxlJlNDVFAgQUJDIG1heCBpbmNyZWFzZSBw
ZXIgU0FDSyAoTCkmMVx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF92dGFnXF90aW1lXF93
YWl0JlZ0YWcgdGltZSB3YWl0IHRpbWUsIDAgZGlzYWJsZXMgaXQuJjYwfnNlY3NcdGFidWxhcm5l
d2xpbmUgXGhsaW5lCislc2N0cFxfYmxhY2tob2xlJkVuYWJsZSBTQ1RQIGJsYWNraG9saW5nJjBc
dGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfcGF0aFxfcGZcX3RocmVzaG9sZCZEZWZhdWx0
IHBvdGVudGlhbGx5IGZhaWxlZCB0aHJlc2hvbGQmNjU1MzVcdGFidWxhcm5ld2xpbmUgXGhsaW5l
Cislc2N0cFxfcnR0dmFyXF9idyZTaGlmdCBhbW91bnQgZm9yIGJ3IHNtb290aGluZyBvbiBydHQg
Y2FsYyY0IFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9ydHR2YXJcX3J0dCZTaGlmdCBh
bW91bnQgZm9yIHJ0dCBzbW9vdGhpbmcgb24gcnR0IGNhbGMmNSBcdGFidWxhcm5ld2xpbmUgXGhs
aW5lCislc2N0cFxfcnR0dmFyXF9lcXJldCAmV2hhdCB0byByZXR1cm4gd2hlbiBydHQgYW5kIGJ3
IGFyZSYwXHRhYnVsYXJuZXdsaW5lCislCQkJCQkmdW5jaGFuZ2VkJlx0YWJ1bGFybmV3bGluZSBc
aGxpbmUKKyVzY3RwXF9zdGVhZHlcX3N0ZXAmSG93IG1hbnkgdGhlIHNhbWVzIGl0IHRha2VzIHRv
IHRyeSBzdGVwJjIwXHRhYnVsYXJuZXdsaW5lCislCQkJCQkmZG93biBvZiBjd25kJlx0YWJ1bGFy
bmV3bGluZSBcaGxpbmUKKyVzY3RwXF91c2VcX2RjY2NcX2VjbiZFbmFibGUgZm9yIFJUQ0MgQ0Mg
ZGF0YWNlbnRlciBFQ04mMSBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfYnVmZmVyXF9z
cGxpdHRpbmcmRW5hYmxlIHNlbmQvcmVjZWl2ZSBidWZmZXIgc3BsaXR0aW5nJjAgXHRhYnVsYXJu
ZXdsaW5lIFxobGluZQorJXNjdHBcX2luaXRpYWxcX2N3bmQmSW5pdGlhbCBjb25nZXN0aW9uIHdp
bmRvdyBpbiBNVFVzJjNcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfbG9nZ2luZ1xfbGV2
ZWwmTG9nZ2luZyBsZXZlbCYwIFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9kZWJ1Z1xf
b24mVHVybnMgZGVidWcgb3V0cHV0IG9uIG9yIG9mZi4mMCBcdGFidWxhcm5ld2xpbmUgXGhsaW5l
CisKKyVcY2FwdGlvbntTeXNjdGwgdmFyaWFibGVzIHN1cHBvcnRlZCBieSB1c3JzY3RwfQorJVxl
bmR7bG9uZ3RhYmxlfQorCitcc2VjdGlvbntFeGFtcGxlc30KK1xzdWJzZWN0aW9ue0Rpc2NhcmQg
U2VydmVyfVxsYWJlbHtzZXJ2ZXJ9CitcYmVnaW57dmVyYmF0aW19CisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMTIgTWljaGFlbCBUdWV4ZW4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhl
IG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVND
TEFJTUVELglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBVc2FnZTogZGlzY2Fy
ZF9zZXJ2ZXIgW2xvY2FsX2VuY2Fwc19wb3J0XSBbcmVtb3RlX2VuY2Fwc19wb3J0XQorICovCisK
KyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmlu
Zy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmICFkZWZpbmVkKF9XSU4zMikKKyNpbmNs
dWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5l
dC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaW5jbHVkZSA8dXNyc2N0
cC5oPgorCisjZGVmaW5lIEJVRkZFUl9TSVpFIDEwMjQwCisKK2NvbnN0IGludCB1c2VfY2IgPSAw
OworCitzdGF0aWMgaW50CityZWNlaXZlX2NiKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuaW9uIHNj
dHBfc29ja3N0b3JlIGFkZHIsIHZvaWQgKmRhdGEsCisgICAgICAgICAgIHNpemVfdCBkYXRhbGVu
LCBzdHJ1Y3Qgc2N0cF9yY3ZpbmZvIHJjdiwgaW50IGZsYWdzKQoreworICAgIGNoYXIgbmFtZVtJ
TkVUNl9BRERSU1RSTEVOXTsKKworICAgIGlmIChkYXRhKSB7CisgICAgICAgIGlmIChmbGFncyAm
IE1TR19OT1RJRklDQVRJT04pIHsKKyAgICAgICAgICAgIHByaW50ZigiTm90aWZpY2F0aW9uIG9m
IGxlbmd0aCAlZCByZWNlaXZlZC5cbiIsIChpbnQpZGF0YWxlbik7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBwcmludGYoIk1zZyBvZiBsZW5ndGggJWQgcmVjZWl2ZWQgZnJvbSAlczol
dSBvbiBzdHJlYW0gJWQgd2l0aCAiCisgICAgICAgICAgICAgICAgICAgIlNTTiAldSBhbmQgVFNO
ICV1LCBQUElEICVkLCBjb250ZXh0ICV1LlxuIiwKKyAgICAgICAgICAgICAgICAgICAoaW50KWRh
dGFsZW4sCisgICAgICAgICAgICAgICAgICAgYWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCA/
CisgICAgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvcChBRl9JTkVULCAmYWRkci5zaW4uc2lu
X2FkZHIsIG5hbWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5FVDZfQURE
UlNUUkxFTik6CisgICAgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgJmFk
ZHIuc2luNi5zaW42X2FkZHIsIG5hbWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSU5FVDZfQUREUlNUUkxFTiksCisgICAgICAgICAgICAgICAgICAgbnRvaHMoYWRkci5zaW4u
c2luX3BvcnQpLAorICAgICAgICAgICAgICAgICAgIHJjdi5yY3Zfc2lkLAorICAgICAgICAgICAg
ICAgICAgIHJjdi5yY3Zfc3NuLAorICAgICAgICAgICAgICAgICAgIHJjdi5yY3ZfdHNuLAorICAg
ICAgICAgICAgICAgICAgIG50b2hsKHJjdi5yY3ZfcHBpZCksCisgICAgICAgICAgICAgICAgICAg
cmN2LnJjdl9jb250ZXh0KTsKKyAgICAgICAgfQorICAgICAgICBmcmVlKGRhdGEpOworICAgIH0K
KyAgICByZXR1cm4gMTsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7
CisgICAgc3RydWN0IHNvY2tldCAqc29jazsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI7
CisgICAgc3RydWN0IHNjdHBfdWRwZW5jYXBzIGVuY2FwczsKKyAgICBzdHJ1Y3Qgc2N0cF9ldmVu
dCBldmVudDsKKyAgICB1aW50MTZfdCBldmVudF90eXBlc1tdID0ge1NDVFBfQVNTT0NfQ0hBTkdF
LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfUEVFUl9BRERSX0NIQU5HRSwK
KwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1JFTU9URV9FUlJPUiwKKwkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1NIVVRET1dOX0VWRU5ULAorCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNDVFBfQURBUFRBVElPTl9JTkRJQ0FUSU9OLAorCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfUEFSVElBTF9ERUxJVkVSWV9FVkVOVH07Cisg
ICAgdW5zaWduZWQgaW50IGk7CisgICAgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgYXY7CisgICAg
Y29uc3QgaW50IG9uID0gMTsKKyAgICBpbnQgbiwgZmxhZ3M7CisgICAgc29ja2xlbl90IGZyb21f
bGVuOworICAgIGNoYXIgYnVmZmVyW0JVRkZFUl9TSVpFXTsKKyAgICBjaGFyIG5hbWVbSU5FVDZf
QUREUlNUUkxFTl07CisgICAgc3RydWN0IHNjdHBfcmVjdnZfcm4gcm47CisgICAgc29ja2xlbl90
IGluZm9sZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfcmVjdnZfcm4pOworICAgIHN0cnVjdCBzY3Rw
X3JjdmluZm8gcmN2OworICAgIHN0cnVjdCBzY3RwX254dGluZm8gbnh0OworICAgIHVuc2lnbmVk
IGludCBpbmZvdHlwZSA9IDA7CisKKyAgICBpZiAoYXJnYyA+IDEpIHsKKyAgICAgICAgdXNyc2N0
cF9pbml0KGF0b2koYXJndlsxXSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHVzcnNjdHBfaW5p
dCg5ODk5KTsKKyAgICB9CisgICAgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdfb24oMCk7
CisgICAgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYmxhY2tob2xlKDIpOworCisgICAgaWYgKChz
b2NrID0gdXNyc2N0cF9zb2NrZXQoQUZfSU5FVDYsIFNPQ0tfU0VRUEFDS0VULCBJUFBST1RPX1ND
VFAsIAorICAgIAkgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9jYj9yZWNlaXZlX2NiOk5V
TEwsIE5VTEwsIDApKSA9PSBOVUxMKSB7CisgICAgICAgIHBlcnJvcigidXNlcnNwYWNlX3NvY2tl
dCIpOworICAgIH0KKyAgICBpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NU
UCwgU0NUUF9JX1dBTlRfTUFQUEVEX1Y0X0FERFIsIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGNvbnN0IHZvaWQqKSZvbiwgKHNvY2tsZW5fdClzaXplb2YoaW50KSkgPCAwKSB7CisgICAg
ICAgIHBlcnJvcigic2V0c29ja29wdCIpOworICAgIH0KKyAgICBtZW1zZXQoJmF2LCAwLCBzaXpl
b2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKTsKKyAgICBhdi5hc3NvY19pZCA9IFNDVFBfQUxM
X0FTU09DOworICAgIGF2LmFzc29jX3ZhbHVlID0gNDc7CisKKyAgICBpZiAodXNyc2N0cF9zZXRz
b2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9DT05URVhULCAoY29uc3Qgdm9pZCopJmF2
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBz
Y3RwX2Fzc29jX3ZhbHVlKSkgPCAwKSB7CisgICAgICAgIHBlcnJvcigic2V0c29ja29wdCIpOwor
ICAgIH0KKyAgICBpZiAoYXJnYyA+IDIpIHsKKyAgICAgICAgbWVtc2V0KCZlbmNhcHMsIDAsIHNp
emVvZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKTsKKyAgICAgICAgZW5jYXBzLnN1ZV9hZGRyZXNz
LnNzX2ZhbWlseSA9IEFGX0lORVQ2OworICAgICAgICBlbmNhcHMuc3VlX3BvcnQgPSBodG9ucyhh
dG9pKGFyZ3ZbMl0pKTsKKyAgICAgICAgaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBS
T1RPX1NDVFAsIFNDVFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVCwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGNvbnN0IHZvaWQqKSZlbmNhcHMsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpIDwg
MCkgeworICAgICAgICAgICAgcGVycm9yKCJzZXRzb2Nrb3B0Iik7CisgICAgICAgIH0KKyAgICB9
CisgICAgbWVtc2V0KCZldmVudCwgMCwgc2l6ZW9mKGV2ZW50KSk7CisgICAgZXZlbnQuc2VfYXNz
b2NfaWQgPSBTQ1RQX0ZVVFVSRV9BU1NPQzsKKyAgICBldmVudC5zZV9vbiA9IDE7CisgICAgZm9y
IChpID0gMDsgaSA8ICh1bnNpZ25lZCBpbnQpKHNpemVvZihldmVudF90eXBlcykvc2l6ZW9mKHVp
bnQxNl90KSk7IGkrKykgeworICAgICAgICBldmVudC5zZV90eXBlID0gZXZlbnRfdHlwZXNbaV07
CisgICAgICAgIGlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQ
X0VWRU5ULCAmZXZlbnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihz
dHJ1Y3Qgc2N0cF9ldmVudCkpIDwgMCkgeworICAgICAgICAgICAgcGVycm9yKCJ1c2Vyc3BhY2Vf
c2V0c29ja29wdCIpOworICAgICAgICB9CisgICAgfQorICAgIG1lbXNldCgodm9pZCAqKSZhZGRy
LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworI2lmZGVmIEhBVkVfU0lOX0xFTgor
ICAgIGFkZHIuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYK
KyAgICBhZGRyLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgYWRkci5zaW42X3BvcnQgPSBo
dG9ucyg5KTsKKyAgICBhZGRyLnNpbjZfYWRkciA9IGluNmFkZHJfYW55OworICAgIGlmICh1c3Jz
Y3RwX2JpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCAKKyAgICAgICAgICAgICAg
ICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgPCAwKSB7CisgICAgICAgIHBlcnJv
cigidXNlcnNwYWNlX2JpbmQiKTsKKyAgICB9CisgICAgaWYgKHVzcnNjdHBfbGlzdGVuKHNvY2ss
IDEpIDwgMCkgeworICAgICAgICBwZXJyb3IoInVzZXJzcGFjZV9saXN0ZW4iKTsKKyAgICB9Cisg
ICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaWYgKHVzZV9jYikgeworI2lmIGRlZmluZWQoX1dJTjMy
KQorICAgICAgICAgICAgU2xlZXAoMSoxMDAwKTsKKyNlbHNlCisgICAgICAgICAgICBzbGVlcCgx
KTsKKyNlbmRpZgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZnJvbV9sZW4gPSAoc29j
a2xlbl90KXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyAgICAgICAgICAgIGZsYWdzID0g
MDsKKyAgICAgICAgICAgIHJuLnJlY3Z2X3JjdmluZm8gPSByY3Y7CisgICAgICAgICAgICBybi5y
ZWN2dl9ueHRpbmZvID0gbnh0OworICAgICAgICAgICAgbiA9IHVzcnNjdHBfcmVjdnYoc29jaywg
KHZvaWQqKWJ1ZmZlciwgQlVGRkVSX1NJWkUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwgJmZyb21fbGVuLCAodm9pZCAqKSZybiwKKwkg
ICAgICAgICAgICAgICAgICAgICAmaW5mb2xlbiwgJmluZm90eXBlLCAmZmxhZ3MpOworICAgICAg
ICAgICAgaWYgKG4gPiAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgTVNHX05PVElG
SUNBVElPTikgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIk5vdGlmaWNhdGlvbiBvZiBs
ZW5ndGggJWQgcmVjZWl2ZWQuXG4iLCBuKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBwcmludGYoIk1zZyBvZiBsZW5ndGggJWQgcmVjZWl2ZWQgZnJvbSAl
czoldSBvbiBzdHJlYW0gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVkIHdpdGggU1NO
ICV1IGFuZCBUU04gJXUsIFBQSUQgJWQsIGNvbnRleHQgJXUsICIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJjb21wbGV0ZSAlZC5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBu
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9wKEFGX0lORVQ2LCAmYWRkci5z
aW42X2FkZHIsIG5hbWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElO
RVQ2X0FERFJTVFJMRU4pLCBudG9ocyhhZGRyLnNpbjZfcG9ydCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBybi5yZWN2dl9yY3ZpbmZvLnJjdl9zaWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBybi5yZWN2dl9yY3ZpbmZvLnJjdl9zc24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBybi5yZWN2dl9yY3ZpbmZvLnJjdl90c24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBudG9obChybi5yZWN2dl9yY3ZpbmZvLnJjdl9wcGlkKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJuLnJlY3Z2X3JjdmluZm8ucmN2X2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoZmxhZ3MgJiBNU0dfRU9SKSA/IDEgOiAwKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgdXNyc2N0cF9jbG9zZShzb2NrKTsK
KyAgICB3aGlsZSAodXNyc2N0cF9maW5pc2goKSAhPSAwKSB7CisjaWYgZGVmaW5lZChfV0lOMzIp
CisgICAgICAgIFNsZWVwKDEwMDApOworI2Vsc2UKKyAgICAgICAgc2xlZXAoMSk7CisjZW5kaWYK
KyAgICB9CisgICAgcmV0dXJuICgwKTsKK30KKworXGVuZHt2ZXJiYXRpbX0KKworXHN1YnNlY3Rp
b257Q2xpZW50fVxsYWJlbHtjbGllbnR9CitcYmVnaW57dmVyYmF0aW19CisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExLTIwMTIgTWljaGFlbCBUdWV4ZW4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBE
SVNDTEFJTUVELglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAq
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBVc2FnZTogY2xp
ZW50IHJlbW90ZV9hZGRyIHJlbW90ZV9wb3J0IFtsb2NhbF9lbmNhcHNfcG9ydCByZW1vdGVfZW5j
YXBzX3BvcnRdCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+
CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgIWRlZmluZWQoX1dJTjMyKQorI2luY2x1ZGUgPHVu
aXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgIWRlZmluZWQoX1dJ
TjMyKQorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Cisj
aW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDx1c3JzY3RwLmg+CisKK2lu
dCBkb25lID0gMDsKKworc3RhdGljIGludAorcmVjZWl2ZV9jYihzdHJ1Y3Qgc29ja2V0ICpzb2Nr
LCB1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyLCB2b2lkICpkYXRhLAorICAgICAgICAgICBzaXpl
X3QgZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2aW5mbyByY3YsIGludCBmbGFncykKK3sKKyAgICBp
ZiAoZGF0YSA9PSBOVUxMKSB7CisgICAgICAgIGRvbmUgPSAxOworICAgICAgICB1c3JzY3RwX2Ns
b3NlKHNvY2spOworICAgIH0gZWxzZSB7CisgICAgICAgIHdyaXRlKGZpbGVubyhzdGRvdXQpLCBk
YXRhLCBkYXRhbGVuKTsKKyAgICAgICAgZnJlZShkYXRhKTsKKyAgICB9CisgICAgcmV0dXJuIDE7
Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIHN0cnVjdCBz
b2NrZXQgKnNvY2s7CisgICAgc3RydWN0IHNvY2thZGRyX2luIGFkZHI0OworICAgIHN0cnVjdCBz
b2NrYWRkcl9pbjYgYWRkcjY7CisgICAgc3RydWN0IHNjdHBfdWRwZW5jYXBzIGVuY2FwczsKKyAg
ICBjaGFyIGJ1ZmZlcls4MF07CisKKyAgICBpZiAoYXJnYyA+IDMpIHsKKyAgICAgICAgdXNyc2N0
cF9pbml0KGF0b2koYXJndlszXSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHVzcnNjdHBfaW5p
dCg5ODk5KTsKKyAgICB9CisgICAgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdfb24oMCk7
CisgICAgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYmxhY2tob2xlKDIpOworICAgIGlmICgoc29j
ayA9IHVzcnNjdHBfc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFAsIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVfY2IsIE5VTEwsIDApKSA9PSBO
VUxMKSB7CisgICAgICAgIHBlcnJvcigidXNlcnNwYWNlX3NvY2tldCBpcHY2Iik7CisgICAgfQor
ICAgIGlmIChhcmdjID4gNCkgeworICAgICAgICBtZW1zZXQoJmVuY2FwcywgMCwgc2l6ZW9mKHN0
cnVjdCBzY3RwX3VkcGVuY2FwcykpOworICAgICAgICBlbmNhcHMuc3VlX2FkZHJlc3Muc3NfZmFt
aWx5ID0gQUZfSU5FVDY7CisgICAgICAgIGVuY2Fwcy5zdWVfcG9ydCA9IGh0b25zKGF0b2koYXJn
dls0XSkpOworICAgICAgICBpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NU
UCwgU0NUUF9SRU1PVEVfVURQX0VOQ0FQU19QT1JULCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoY29uc3Qgdm9pZCopJmVuY2FwcywgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSkgPCAwKSB7Cisg
ICAgICAgICAgICBwZXJyb3IoInNldHNvY2tvcHQiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBt
ZW1zZXQoKHZvaWQgKikmYWRkcjQsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKyAg
ICBtZW1zZXQoKHZvaWQgKikmYWRkcjYsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7
CisjaWYgIWRlZmluZWQoX19saW51eF9fKSAmJiAhZGVmaW5lZChfV0lOMzIpCisgICAgYWRkcjQu
c2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworICAgIGFkZHI2LnNpbjZfbGVu
ID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisgICAgYWRkcjQuc2luX2Zh
bWlseSA9IEFGX0lORVQ7CisgICAgYWRkcjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICBh
ZGRyNC5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOworICAgIGFkZHI2LnNpbjZfcG9y
dCA9IGh0b25zKGF0b2koYXJndlsyXSkpOworICAgIGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIGFy
Z3ZbMV0sICZhZGRyNi5zaW42X2FkZHIpID09IDEpIHsKKyAgICAgICAgaWYgKHVzcnNjdHBfY29u
bmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHI2LCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIDwgMCkgeworICAgICAgICAg
ICAgcGVycm9yKCJ1c2Vyc3BhY2VfY29ubmVjdCIpOworICAgICAgICB9CisgICAgfSBlbHNlIGlm
IChpbmV0X3B0b24oQUZfSU5FVCwgYXJndlsxXSwgJmFkZHI0LnNpbl9hZGRyKSA9PSAxKSB7Cisg
ICAgICAgIGlmICh1c3JzY3RwX2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRy
NCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bikpIDwgMCkgeworICAgICAgICAgICAgcGVycm9yKCJ1c2Vyc3BhY2VfY29ubmVjdCIpOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRmKCJJbGxlZ2FsIGRlc3RpbmF0aW9u
IGFkZHJlc3MuXG4iKTsKKyAgICB9CisgICAgd2hpbGUgKChmZ2V0cyhidWZmZXIsIHNpemVvZihi
dWZmZXIpLCBzdGRpbikgIT0gTlVMTCkgJiYgIWRvbmUpIHsKKyAgICAgICAgdXNyc2N0cF9zZW5k
dihzb2NrLCBidWZmZXIsIHN0cmxlbihidWZmZXIpLCBOVUxMLCAwLAorCQkJCSAgICAgICAgICAg
ICAgICAgIE5VTEwsIDAsIFNDVFBfU0VORFZfTk9JTkZPLCAwKTsKKyAgICB9CisgICAgaWYgKCFk
b25lKSB7CisgICAgICAgIHVzcnNjdHBfc2h1dGRvd24oc29jaywgU0hVVF9XUik7CisgICAgfQor
ICAgIHdoaWxlICghZG9uZSkgeworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgICAgICBTbGVlcCgx
KjEwMDApOworI2Vsc2UKKyAgICAgICAgc2xlZXAoMSk7CisjZW5kaWYKKyAgICB9CisgICAgd2hp
bGUgKHVzcnNjdHBfZmluaXNoKCkgIT0gMCkgeworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgICAg
ICBTbGVlcCgxMDAwKTsKKyNlbHNlCisgICAgICAgIHNsZWVwKDEpOworI2VuZGlmCisgICAgfQor
ICAgIHJldHVybigwKTsKK30KKworXGVuZHt2ZXJiYXRpbX0KK1xiaWJsaW9ncmFwaHlzdHlsZXtw
bGFpbn0KKyUKK1xiZWdpbnt0aGViaWJsaW9ncmFwaHl9ezk5fQorCitcYmliaXRlbXtzb2NrZXRB
UEl9CitSLn5TdGV3YXJ0LCBNLn5UXCJ1eGVuLCBLLn5Qb29uLCBhbmQgVi5+WWFzZXZpY2g6Citc
dGV4dGl0e1NvY2tldHMgQVBJIEV4dGVuc2lvbnMgZm9yIHRoZSBTdHJlYW0gQ29udHJvbCBUcmFu
c21pc3Npb24gUHJvdG9jb2wgKFNDVFApfS4KK1JGQ342NDU4LCBEZXplbWJlcn4yMDExLgorCitc
YmliaXRlbXtTQ1RQfQorUi5+U3Rld2FydDoKK1x0ZXh0aXR7U3RyZWFtIENvbnRyb2wgVHJhbnNt
aXNzaW9uIFByb3RvY29sfS4KK1JGQ340OTYwLCBTZXB0ZW1iZXJ+MjAwNy4KKworCitcYmliaXRl
bXthdXRofQorTS5+VFwidXhlbiwgUi5+U3Rld2FydCwgUC5+TGVpLCBhbmQgRS5+UmVzY29ybGE6
CitcdGV4dGl0e0F1dGhlbnRpY2F0ZWQgQ2h1bmtzIGZvciB0aGUgU3RyZWFtIENvbnRyb2wgVHJh
bnNtaXNzaW9uIFByb3RvY29sIChTQ1RQKX0uCitSRkN+NDg5NSwgQXVndXN0fjIwMDcuCisKK1xi
aWJpdGVte3N0cmVhbVJlc2V0fQorUi5+U3Rld2FydCwgTS5+VFwidXhlbiwgYW5kIFAufkxlaToK
K1x0ZXh0aXR7U3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sIChTQ1RQKSBTdHJl
YW0gUmVjb25maWd1cmF0aW9ufS4KK1JGQ342NTI1LCBGZWJydWFyeX4yMDEyLgorCisKK1xiaWJp
dGVte2FkZGlwfQorUi5+U3Rld2FydCwgIFEuflhpZSwgTS5+VFwidXhlbiwgUy5+TWFydXlhbWEs
IGFuZCBNLn5Lb3p1a2E6CitcdGV4dGl0e1N0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90
b2NvbCAoU0NUUCkgRHluYW1pYyBBZGRyZXNzIFJlY29uZmlndXJhdGlvbn0uCitSRkN+NTA2MSwg
U2VwdGVtYmVyfjIwMDcuCisKK1xiaWJpdGVte3NhY2staW1tfQorTS5+VFwidXhlbiwgSS5+Ulwi
dW5nZWxlciwgYW5kIFIuflN0ZXdhcnQ6CitcdGV4dGl0e1NBQ0stSU1NRURJQVRFTFkgRXh0ZW5z
aW9uIGZvciB0aGUgU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sfS4KK2RyYWZ0
LXR1ZXhlbi10c3Z3Zy1zY3RwLXNhY2staW1tZWRpYXRlbHktMDkgKHdvcmsgaW4gcHJvZ3Jlc3Mp
LCBBcHJpbH4yMDEyLgorCitcYmliaXRlbXt1ZHBlbmNhcHN9CitNLn5UXCJ1eGVuIGFuZCBSLn5T
dGV3YXJ0CitcdGV4dGl0e1VEUCBFbmNhcHN1bGF0aW9uIG9mIFNDVFAgUGFja2V0c2x9LgorZHJh
ZnQtaWV0Zi10c3Z3Zy1zY3RwLXVkcC1lbmNhcHMtMDMgKHdvcmsgaW4gcHJvZ3Jlc3MpLCBNYXJj
aH4yMDEyLgorCitcZW5ke3RoZWJpYmxpb2dyYXBoeX0KK1xlbmR7ZG9jdW1lbnR9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi9SRUFETUUubWQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9SRUFETUUubWQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi42ZjJhZjFmNDVhZTEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi9SRUFETUUubWQKQEAgLTAsMCArMSwxMCBAQAorIyB1c3JzY3RwCitbIVtD
b3Zlcml0eSBTY2FuIEJ1aWxkIFN0YXR1c10oaHR0cHM6Ly9zY2FuLmNvdmVyaXR5LmNvbS9wcm9q
ZWN0cy8xMzQzMC9iYWRnZS5zdmcpXShodHRwczovL3NjYW4uY292ZXJpdHkuY29tL3Byb2plY3Rz
L3VzcnNjdHApCisKKyFbR2l0SHViIEFjdGlvbnMgQnVpbGQgU3RhdHVzIChDTWFrZS1iYXNlZCBi
dWlsZCBvbmx5KV0oaHR0cHM6Ly9naXRodWIuY29tL3NjdHBsYWIvdXNyc2N0cC93b3JrZmxvd3Mv
QnVpbGQlMjB3aXRoJTIwQ01ha2UvYmFkZ2Uuc3ZnKQorCitUaGlzIGlzIGEgdXNlcmxhbmQgU0NU
UCBzdGFjayBzdXBwb3J0aW5nIEZyZWVCU0QsIExpbnV4LCBNYWMgT1MgWCBhbmQgV2luZG93cy4K
KworU2VlIFttYW51YWxdKE1hbnVhbC5tZCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1RoZSBz
dGF0dXMgb2YgY29udGludW91cyBpbnRlZ3JhdGlvbiB0ZXN0aW5nIGlzIGF2YWlsYWJsZSBmcm9t
IG91ciBbQnVpbGRib3RdKGh0dHA6Ly9idWlsZGJvdC5ucGxhYi5kZToxODAxMC8jL2NvbnNvbGUp
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvYm9vdHN0cmFwIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvYm9vdHN0cmFwCm5l
dyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMC4uODljN2JiYWJkOTAzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvYm9vdHN0cmFwCkBAIC0wLDAgKzEsNjYgQEAKKyMhIC9i
aW4vc2gKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgTWljaGFlbCBUdWV4ZW4KKyMKKyMg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVj
dCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyMgICAgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisj
ICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJ
U0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUKKyMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pCisjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisjIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyMgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRgorIyBTVUNIIERBTUFHRS4KKyMKKworI2JhaWwgb3V0IG9uIGVycm9yCitzZXQgLWUK
KworI2RldGVjdCAoZylsaWJ0b29saXplCitpZiB3aGljaCBsaWJ0b29saXplID4vZGV2L251bGwK
K3RoZW4KKwlfTElCVE9PTElaRT1gd2hpY2ggbGlidG9vbGl6ZWAKK2VsaWYgd2hpY2ggZ2xpYnRv
b2xpemUgPi9kZXYvbnVsbAordGhlbgorCV9MSUJUT09MSVpFPWB3aGljaCBnbGlidG9vbGl6ZWAK
K2Vsc2UKKwllY2hvICJFUlJPUjogSSBjYW5ub3QgZmluZCBsaWJ0b29saXplIG9yIGdsaWJ0b29s
aXplISIKKwlleGl0IDEKK2ZpCisKKyNleGVjdXRlIChnKWxpYnRvb2xpemUKKyR7X0xJQlRPT0xJ
WkV9CisKKyNleGVjdXRlIGFjbG9jYWwKK2lmIFsgLWUgL3Vzci9sb2NhbC9zaGFyZS9hY2xvY2Fs
IF0KK3RoZW4KKyAgIGFjbG9jYWwgLUkgL3Vzci9sb2NhbC9zaGFyZS9hY2xvY2FsCitlbGlmIFsg
LWUgL3Vzci9zaGFyZS9hY2xvY2FsIF0KK3RoZW4KKyAgIGFjbG9jYWwgLUkgL3Vzci9zaGFyZS9h
Y2xvY2FsCitlbHNlCisgICBhY2xvY2FsCitmaQorCisjZXhlY3V0ZSBhdXRvY29uZgorYXV0b2Nv
bmYKKworI2dlbmVyYXRlIHRoZSAuL2NvbmZpZ3VyZQorYXV0b21ha2UgLS1mb3JlaWduIC0tYWRk
LW1pc3NpbmcgLS1jb3B5CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL2NvbmZpZ3VyZS5hYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL2NvbmZpZ3VyZS5hYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLjIwNGU3ZWJkZTc1ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL2NvbmZpZ3VyZS5h
YwpAQCAtMCwwICsxLDE4OCBAQAorZG5sCitkbmwgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgTWlj
aGFlbCBUdWV4ZW4KK2RubAorZG5sIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitkbmwKK2RubCBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKK2RubCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKK2RubCBhcmUgbWV0OgorZG5sIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CitkbmwgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorZG5sIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CitkbmwgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorZG5sICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCitkbmwgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVz
IG9mIGl0cyBjb250cmlidXRvcnMKK2RubCAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKK2RubCAgICB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KK2RubAorZG5sIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5ECitkbmwgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCitkbmwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK2RubCBBUkUgRElT
Q0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRQorZG5sIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitkbmwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK2RubCBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikKK2RubCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorZG5sIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK
K2RubCBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GCitkbmwgU1VDSCBEQU1BR0UuCitkbmwKKworQUNfSU5JVChbbGli
dXNyc2N0cF0sIFswLjkuNS4wXSkKK0FNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ25dKQorCitBQ19Q
Uk9HX0NDCitBQ19QUk9HX0xJQlRPT0wKK0FDX0NBTk9OSUNBTF9IT1NUCitBQ19DT05GSUdfTUFD
Uk9fRElSKFttNF0pCisKK2RubCBEaXNhYmxlIHBrZ19jb25maWcgc3VwcG9ydCBmb3Igbm93Citk
bmwgUEtHX1BST0dfUEtHX0NPTkZJRworZG5sIFBLR19JTlNUQUxMRElSCisKK0xJQkNGTEFHUz0i
LURTQ1RQX1BST0NFU1NfTEVWRUxfTE9DS1MgLURTQ1RQX1NJTVBMRV9BTExPQ0FUT1IgLURfX1Vz
ZXJzcGFjZV9fIgorQVBQQ0ZMQUdTPSIiCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2RhcndpbiopCisg
IENGTEFHUz0iJENGTEFHUyAtc3RkPWM5OSAtV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIC1E
X19BUFBMRV9VU0VfUkZDXzIyOTIiCisgIDs7CitkcmFnb25mbHkqKQorICBDRkxBR1M9IiRDRkxB
R1MgLXN0ZD1jOTkgLXB0aHJlYWQiCisgIDs7CitmcmVlYnNkKikKKyAgQ0ZMQUdTPSIkQ0ZMQUdT
IC1zdGQ9Yzk5IC1wdGhyZWFkIgorICBpZiAkQ0MgLS12ZXJzaW9uIHwgZ3JlcCAtcSBjbGFuZzsg
dGhlbgorICAgIENGTEFHUz0iJENGTEFHUyAtV25vLXVua25vd24td2FybmluZy1vcHRpb24iCisg
ICAgTERGTEFHUz0iJExERkxBR1MgLVF1bnVzZWQtYXJndW1lbnRzIgorICBmaQorICA7OworbGlu
dXgqKQorICBDRkxBR1M9IiRDRkxBR1MgLXN0ZD1jOTkgLXB0aHJlYWQgLURfR05VX1NPVVJDRSAt
V25vLWFkZHJlc3Mtb2YtcGFja2VkLW1lbWJlciIKKyAgOzsKK25ldGJzZCopCisgIENGTEFHUz0i
JENGTEFHUyAtc3RkPWM5OSAtcHRocmVhZCIKKyAgOzsKK29wZW5ic2QqKQorICBDRkxBR1M9IiRD
RkxBR1MgLXN0ZD1jOTkgLXB0aHJlYWQiCisgIDs7Citzb2xhcmlzKikKKyAgQ0ZMQUdTPSIkQ0ZM
QUdTIC1EX1hQRzRfMiIKKyAgOzsKK2VzYWMKKworaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiIC1v
ICJ4JENDIiA9ICJ4Y2xhbmciIDsgdGhlbgorICAgICAgICBhY19zdXBwb3J0c19nY2NfZmxhZ3M9
eWVzCitmaQorCitpZiB0ZXN0ICJ4JGFjX3N1cHBvcnRzX2djY19mbGFncyIgPSAieHllcyIgOyB0
aGVuCisgICAgICAgIENGTEFHUz0iJENGTEFHUyAtcGVkYW50aWMgLVdhbGwiCitmaQorCitBQ19N
U0dfQ0hFQ0tJTkcod2hldGhlciB3ZSBzaG91bGQgdHJlYXQgY29tcGlsZXIgd2FybmluZ3MgYXMg
ZXJyb3JzKQorQUNfQVJHX0VOQUJMRSh3YXJuaW5ncy1hcy1lcnJvcnMsCisgIEFDX0hFTFBfU1RS
SU5HKCBbLS1lbmFibGUtd2FybmluZ3MtYXMtZXJyb3JzXSwKKyAgICAgICAgICAgICAgICAgIFt0
cmVhdCB3YXJuaW5ncyBhcyBlcnJvcnMgKG9ubHkgZm9yIEdDQyBvciBjbGFuZykgQDw6QGRlZmF1
bHQ9eWVzQDo+QF0pLAorICAgIGVuYWJsZV93YXJuaW5nc19hc19lcnJvcnM9JGVuYWJsZXZhbCxl
bmFibGVfd2FybmluZ3NfYXNfZXJyb3JzPXllcykKK2lmIHRlc3QgIngkYWNfc3VwcG9ydHNfZ2Nj
X2ZsYWdzIiA9ICJ4eWVzIiAtYSB4JGVuYWJsZV93YXJuaW5nc19hc19lcnJvcnMgPSB4eWVzOyB0
aGVuCisgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgICBDRkxBR1M9IiRDRkxBR1Mg
LVdlcnJvciIKK2Vsc2UKKyAgICAgICAgQUNfTVNHX1JFU1VMVChubykKK2ZpCisKK0FDX0FSR19F
TkFCTEUoaW52YXJpYW50cywKKyAgQUNfSEVMUF9TVFJJTkcoIFstLWVuYWJsZS1pbnZhcmlhbnRz
XSwKKyAgICAgICAgICAgICAgICAgIFthZGQgYWRkaXRpb25hbCBydW50aW1lIGNoZWNrcyBAPDpA
ZGVmYXVsdD1ub0A6PkBdKSwKKyAgICBlbmFibGVfaW52YXJpYW50cz0kZW5hYmxldmFsLGVuYWJs
ZV9pbnZhcmlhbnRzPW5vKQoraWYgdGVzdCB4JGVuYWJsZV9pbnZhcmlhbnRzID0geHllczsgdGhl
bgorICAgICAgICBBQ19ERUZJTkUoSU5WQVJJQU5UUywgMSwgW0FkZCBhZGRpdGlvbmFsIHJ1bnRp
bWUgY2hlY2tzXSkKK2ZpCisKK0FDX0FSR19FTkFCTEUoZGVidWcsCisgIEFDX0hFTFBfU1RSSU5H
KCBbLS1lbmFibGUtZGVidWddLAorICAgICAgICAgICAgICAgICAgW3Byb3ZpZGUgZGVidWcgaW5m
b3JtYXRpb24gQDw6QGRlZmF1bHQ9eWVzQDo+QF0pLAorICAgIGVuYWJsZV9kZWJ1Zz0kZW5hYmxl
dmFsLGVuYWJsZV9kZWJ1Zz15ZXMpCitpZiB0ZXN0IHgkZW5hYmxlX2RlYnVnID0geHllczsgdGhl
bgorICAgICAgICBBQ19ERUZJTkUoU0NUUF9ERUJVRywgMSwgW1Byb3ZpZGUgZGVidWcgaW5mb3Jt
YXRpb25dKQorICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLWcgLU8wIgorZmkKKworQUNfQVJHX0VO
QUJMRShpbmV0LAorICBBQ19IRUxQX1NUUklORyggWy0tZW5hYmxlLWluZXRdLAorICAgICAgICAg
ICAgICAgICAgW1N1cHBvcnQgSVB2NCBAPDpAZGVmYXVsdD15ZXNAOj5AXSksCisgICAgZW5hYmxl
X2luZXQ9JGVuYWJsZXZhbCxlbmFibGVfaW5ldD15ZXMpCitpZiB0ZXN0IHgkZW5hYmxlX2luZXQg
PSB4eWVzOyB0aGVuCisgICAgICAgIEFQUENGTEFHUz0iJEFQUENGTEFHUyAtRElORVQiCisgICAg
ICAgIEFDX0RFRklORShJTkVULCAxLCBbU3VwcG9ydCBJUHY0XSkKK2ZpCisKK0FDX0FSR19FTkFC
TEUoaW5ldDYsCisgIEFDX0hFTFBfU1RSSU5HKCBbLS1lbmFibGUtaW5ldDZdLAorICAgICAgICAg
ICAgICAgICAgW1N1cHBvcnQgSVB2NiBAPDpAZGVmYXVsdD15ZXNAOj5AXSksCisgICAgZW5hYmxl
X2luZXQ2PSRlbmFibGV2YWwsZW5hYmxlX2luZXQ2PXllcykKK2lmIHRlc3QgeCRlbmFibGVfaW5l
dDYgPSB4eWVzOyB0aGVuCisgICAgICAgIEFQUENGTEFHUz0iJEFQUENGTEFHUyAtRElORVQ2Igor
ICAgICAgICBBQ19ERUZJTkUoSU5FVDYsIDEsIFtTdXBwb3J0IElQdjZdKQorZmkKKworQUNfQVJH
X0VOQUJMRShwcm9ncmFtcywKKyAgQUNfSEVMUF9TVFJJTkcoIFstLWVuYWJsZS1wcm9ncmFtc10s
CisgICAgICAgICAgICAgICAgICBbYnVpbGQgZXhhbXBsZSBwcm9ncmFtcyBAPDpAZGVmYXVsdD15
ZXNAOj5AXSksCisgICAgZW5hYmxlX3Byb2dyYW1zPSRlbmFibGV2YWwsZW5hYmxlX3Byb2dyYW1z
PXllcykKK0FNX0NPTkRJVElPTkFMKFtDT05EX1BST0dSQU1TXSwgW3Rlc3QgIiRlbmFibGVfcHJv
Z3JhbXMiID0geWVzXSkKKworQUNfQ0hFQ0tfVFlQRShzaXplX3QpCitBQ19DSEVDS19UWVBFKHNz
aXplX3QpCisKK0FDX0NIRUNLX0ZVTkNTKHNvY2tldCwgLCBBQ19DSEVDS19MSUIoc29ja2V0LCBz
b2NrZXQpKQorQUNfQ0hFQ0tfRlVOQ1MoaW5ldF9hZGRyLCAsIEFDX0NIRUNLX0xJQihuc2wsIGlu
ZXRfYWRkcikpCisKK0FDX0NIRUNLX0hFQURFUlMoc3RkYXRvbWljLmgpCitBQ19DSEVDS19IRUFE
RVJTKHN5cy9xdWV1ZS5oKQorQUNfQ0hFQ0tfSEVBREVSUyhsaW51eC9pZl9hZGRyLmgsIFtdLCBb
XSwgWyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+XSkKK0FDX0NIRUNLX0hFQURFUlMobGludXgvcnRu
ZXRsaW5rLmgsIFtdLCBbXSwgWyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+XSkKK0FDX0NIRUNLX0hF
QURFUlMobmV0aW5ldC9pcF9pY21wLmgsIFtdLCBbXSwgWyNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+
XSkKKworQUNfQ0hFQ0tfTUVNQkVSKHN0cnVjdCBzb2NrYWRkci5zYV9sZW4sCisgICAgICAgICAg
ICAgICAgQUNfREVGSU5FKEhBVkVfU0FfTEVOLCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91ciBzdGFj
ayBoYXMgc2FfbGVuIGluIHNvY2thZGRyIHN0cnVjdC5dKSwsCisgICAgICAgICAgICAgICAgWyNp
ZmRlZiBIQVZFX1NZU19UWVBFU19ICisgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzeXMvdHlw
ZXMuaD4KKyAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICNpbmNsdWRl
IDxzeXMvc29ja2V0Lmg+XSkKKworQUNfQ0hFQ0tfTUVNQkVSKHN0cnVjdCBzb2NrYWRkcl9pbi5z
aW5fbGVuLAorICAgICAgICAgICAgICAgIEFDX0RFRklORShIQVZFX1NJTl9MRU4sIDEsIFtEZWZp
bmUgdGhpcyBpZiB5b3VyIElQdjQgaGFzIHNpbl9sZW4gaW4gc29ja2FkZHJfaW4gc3RydWN0Ll0p
LCwKKyAgICAgICAgICAgICAgICBbI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyAgICAgICAgICAg
ICAgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICAgICAgICAgICAgICAjZW5kaWYKKyAg
ICAgICAgICAgICAgICAgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD5dKQorCitBQ19DSEVDS19NRU1C
RVIoc3RydWN0IHNvY2thZGRyX2luNi5zaW42X2xlbiwKKyAgICAgICAgICAgICAgICBBQ19ERUZJ
TkUoSEFWRV9TSU42X0xFTiwgMSwgW0RlZmluZSB0aGlzIGlmIHlvdXIgSVB2NiBoYXMgc2luNl9s
ZW4gaW4gc29ja2FkZHJfaW42IHN0cnVjdC5dKSwsCisgICAgICAgICAgICAgICAgWyNpZmRlZiBI
QVZFX1NZU19UWVBFU19ICisgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4K
KyAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxuZXRp
bmV0L2luLmg+XSkKKworQUNfQ0hFQ0tfTUVNQkVSKHN0cnVjdCBzb2NrYWRkcl9jb25uLnNjb25u
X2xlbiwKKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9TQ09OTl9MRU4sIDEsIFtEZWZp
bmUgdGhpcyBpZiB5b3VyIHVzZXJsYW5kIHN0YWNrIGhhcyBzY29ubl9sZW4gaW4gc29ja2FkZHJf
Y29ubiBzdHJ1Y3QuXSksLAorICAgICAgICAgICAgICAgIFsjaW5jbHVkZSAidXNyc2N0cGxpYi91
c3JzY3RwLmgiXSkKKworQUNfTVNHX0NIRUNLSU5HKGZvciBzb2NrbGVuX3QpCitBQ19UUllfQ09N
UElMRShbI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyAgICAgICAgICAgICAgICAjaW5jbHVkZSA8
c3lzL3R5cGVzLmg+CisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgI2lu
Y2x1ZGUgPHN5cy9zb2NrZXQuaD5dLAorICAgICAgICAgICAgICAgW3NvY2tsZW5fdCB4OyB4ID0g
MTsgcmV0dXJuICgoaW50KXgpO10sCisgICAgICAgICAgICAgICBbQUNfTVNHX1JFU1VMVCh5ZXMp
XSwKKyAgICAgICAgICAgICAgIFtBQ19NU0dfUkVTVUxUKGludCkKKyAgICAgICAgICAgICAgICBB
Q19ERUZJTkUoc29ja2xlbl90LCBpbnQsIFtEZWZpbmUgYSB0eXBlIGZvciBzb2NrbGVuX3QuXSld
KQorCitBQ19DX0JJR0VORElBTgorCitBQ19TVUJTVChbTElCQ0ZMQUdTXSkKK0FDX1NVQlNUKFtB
UFBDRkxBR1NdKQorZG5sIEFDX0NPTkZJR19GSUxFUyhbdXNyc2N0cC5wY10pCitBQ19DT05GSUdf
RklMRVModXNyc2N0cGxpYi9NYWtlZmlsZSBwcm9ncmFtcy9NYWtlZmlsZSBNYWtlZmlsZSkKK0FD
X09VVFBVVApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvZ2VuLWRlZi5weSBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL2dlbi1k
ZWYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41NWMwMjg1NDQy
OGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9nZW4tZGVmLnB5CkBAIC0wLDAgKzEsMjYg
QEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKyMKKyMgZ2VuLWRlZi5weSB1c3JzY3RwLmxpYgor
aW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgc3VicHJvY2VzcworZnJvbSBzaHV0aWwgaW1w
b3J0IHdoaWNoCisKK3RyeToKKyAgICBsaWJfZmlsZSA9IHN5cy5hcmd2WzFdCitleGNlcHQ6Cisg
ICAgcHJpbnQoJ1VzYWdlOiBnZW4tZGVmLnB5IExJQi1GSUxFJykKKyAgICBleGl0KC0xKQorCitw
cmludCgnRVhQT1JUUycpCisKK2lmIHdoaWNoKCdkdW1wYmluJyk6CisgICAgZHVtcGJpbl9jbWQg
PSBzdWJwcm9jZXNzLnJ1bihbJ2R1bXBiaW4nLCAnL2xpbmtlcm1lbWJlcjoxJywgbGliX2ZpbGVd
LAorICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorCisgICAgcGF0dGVybiA9IHJlLmNv
bXBpbGUoJ1xzKlswLTlhLWZBLUZdKyBfPyg/UDxmdW5jdGlvbm5hbWU+dXNyc2N0cF9bXlxzXSop
JykKKworICAgIGZvciBsaW5lIGluIGR1bXBiaW5fY21kLnN0ZG91dC5kZWNvZGUoJ3V0Zi04Jyku
c3BsaXRsaW5lcygpOgorICAgICAgICBtYXRjaCA9IHBhdHRlcm4ubWF0Y2gobGluZSkKKyAgICAg
ICAgaWYgbWF0Y2g6CisgICAgICAgICAgICBwcmludChtYXRjaC5ncm91cCgnZnVuY3Rpb25uYW1l
JykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9tZXNvbi5idWlsZCBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL21lc29uLmJ1
aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZGFhYzkyNWJkYTA1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbWVzb24uYnVpbGQKQEAgLTAsMCArMSwyMjUg
QEAKKyMgUHJvamVjdCBkZWZpbml0aW9uCitwcm9qZWN0KCd1c3JzY3RwbGliJywgJ2MnLAorICAg
IHZlcnNpb246ICcwLjkuNS4wJywKKyAgICBkZWZhdWx0X29wdGlvbnM6IFsnY19zdGQ9Yzk5J10s
CisgICAgbWVzb25fdmVyc2lvbjogJz49MC40OS4wJykKKworIyBTaGFyZWQgbGlicmFyeSBBUEkg
YW5kIEFCSSB2ZXJzaW9ucworIyBOb3RpY2U6IHNoYXJlZCBsaWJyYXJ5IHZlcnNpb24gbXVzdCBi
ZSBpbiBYLlkuWiBmb3JtYXQgb25seQorc292ZXJzaW9uX2Z1bGwgPSAnMi4wLjAnCitzb3ZlcnNp
b25fc2hvcnQgPSAnMicKKworIyBTZXQgY29tcGlsZXIgd2FybmluZyBmbGFncworY29tcGlsZXIg
PSBtZXNvbi5nZXRfY29tcGlsZXIoJ2MnKQoraWYgY29tcGlsZXIuZ2V0X2FyZ3VtZW50X3N5bnRh
eCgpID09ICdtc3ZjJworICAgIGNvbXBpbGVyX2FyZ3MgPSBjb21waWxlci5nZXRfc3VwcG9ydGVk
X2FyZ3VtZW50cyhbCisgICAgICAgICcvd2Q0MTAwJywgIyAnaWRlbnRpZmllcicgOiB1bnJlZmVy
ZW5jZWQgZm9ybWFsIHBhcmFtZXRlcgorICAgICAgICAnL3dkNDEyNycsICMgY29uZGl0aW9uYWwg
ZXhwcmVzc2lvbiBpcyBjb25zdGFudAorICAgICAgICAnL3dkNDIwMCcsICMgbm9uc3RhbmRhcmQg
ZXh0ZW5zaW9uIHVzZWQgOiB6ZXJvLXNpemVkIGFycmF5IGluIHN0cnVjdC91bmlvbgorICAgICAg
ICAnL3dkNDIxNCcsICMgYml0IGZpZWxkIHR5cGVzIG90aGVyIHRoYW4gaW50CisgICAgICAgICcv
d2Q0NzA2JywgIyBhc3NpZ25tZW50IHdpdGhpbiBjb25kaXRpb25hbCBleHByZXNzaW9uCisgICAg
ICAgICcvd2Q0MjQ1JywgIyAnY29udmVyc2lvbicgOiBjb252ZXJzaW9uIGZyb20gJ3R5cGUxJyB0
byAndHlwZTInLCBzaWduZWQvdW5zaWduZWQgbWlzbWF0Y2gKKyAgICAgICAgJy93ZDQzODknLCAj
ICdvcGVyYXRvcicgOiBzaWduZWQvdW5zaWduZWQgbWlzbWF0Y2gKKyAgICAgICAgJy93ZDQ3MDIn
LCAjIHVucmVhY2hhYmxlIGNvZGUKKyAgICAgICAgJy93ZDQ3MDEnLCAjIFBvdGVudGlhbGx5IHVu
aW5pdGlhbGl6ZWQgbG9jYWwgdmFyaWFibGUgJ25hbWUnIHVzZWQKKyAgICAgICAgJy93ZDQyNDQn
LCAjICdjb252ZXJzaW9uJyBjb252ZXJzaW9uIGZyb20gJ3R5cGUxJyB0byAndHlwZTInLCBwb3Nz
aWJsZSBsb3NzIG9mIGRhdGEKKyAgICBdKQorZWxzZQorICAgIGNvbXBpbGVyX2FyZ3MgPSBjb21w
aWxlci5nZXRfc3VwcG9ydGVkX2FyZ3VtZW50cyhbCisgICAgICAgICctcGVkYW50aWMnLAorICAg
ICAgICAnLVdhbGwnLAorICAgICAgICAnLVdleHRyYScsCisgICAgICAgICctV2Zsb2F0LWVxdWFs
JywKKyAgICAgICAgJy1Xc2hhZG93JywKKyAgICAgICAgJy1XcG9pbnRlci1hcml0aCcsCisgICAg
ICAgICctV2luaXQtc2VsZicsCisgICAgICAgICctV25vLXVudXNlZC1mdW5jdGlvbicsCisgICAg
ICAgICctV25vLXVudXNlZC1wYXJhbWV0ZXInLAorICAgICAgICAnLVduby11bnJlYWNoYWJsZS1j
b2RlJywKKyAgICAgICAgJy1Xc3RyaWN0LXByb3RvdHlwZXMnLAorICAgIF0pCitlbmRpZgorYWRk
X3Byb2plY3RfYXJndW1lbnRzKGNvbXBpbGVyX2FyZ3MsIGxhbmd1YWdlOiAnYycpCisKKyMgQ29u
ZmlndXJhdGlvbgorY29tcGlsZV9hcmdzID0gW10KKworIyBEZXBlbmRlbmN5OiBUaHJlYWRzCit0
aHJlYWRfZGVwID0gZGVwZW5kZW5jeSgndGhyZWFkcycsIHJlcXVpcmVkOiB0cnVlKQorCisjIERl
cGVuZGVuY2llcyBsaXN0CitkZXBlbmRlbmNpZXMgPSBbCisgICAgdGhyZWFkX2RlcCwKK10KKwor
IyBHbG9iYWwgc2V0dGluZ3MKK2FkZF9wcm9qZWN0X2FyZ3VtZW50cyhbCisgICAgJy1EX19Vc2Vy
c3BhY2VfXycsCisgICAgJy1EU0NUUF9TSU1QTEVfQUxMT0NBVE9SJywKKyAgICAnLURTQ1RQX1BS
T0NFU1NfTEVWRUxfTE9DS1MnLAorXSwgbGFuZ3VhZ2U6ICdjJykKKworIyBPUy1zcGVjaWZpYyBz
ZXR0aW5ncworc3lzdGVtID0gaG9zdF9tYWNoaW5lLnN5c3RlbSgpCitpZiBzeXN0ZW0gaW4gWyds
aW51eCcsICdhbmRyb2lkJ10KKyAgICBhZGRfcHJvamVjdF9hcmd1bWVudHMoWworICAgICAgICAn
LURfR05VX1NPVVJDRScsCisgICAgXSwgbGFuZ3VhZ2U6ICdjJykKK2VsaWYgc3lzdGVtID09ICdm
cmVlYnNkJworICAgIGFkZF9wcm9qZWN0X2FyZ3VtZW50cyhjb21waWxlci5nZXRfc3VwcG9ydGVk
X2FyZ3VtZW50cyhbCisgICAgICAgICAgICAnLVduby1hZGRyZXNzLW9mLXBhY2tlZC1tZW1iZXIn
LAorICAgICAgICBdKSwgbGFuZ3VhZ2U6ICdjJykKK2VsaWYgc3lzdGVtIGluIFsnZGFyd2luJywg
J2lvcyddCisgICAgYWRkX3Byb2plY3RfYXJndW1lbnRzKFsKKyAgICAgICAgICAgICctRF9fQVBQ
TEVfVVNFX1JGQ18yMjkyJywKKyAgICAgICAgXSArIGNvbXBpbGVyLmdldF9zdXBwb3J0ZWRfYXJn
dW1lbnRzKFsKKyAgICAgICAgICAgICctV25vLWFkZHJlc3Mtb2YtcGFja2VkLW1lbWJlcicsCisg
ICAgICAgICAgICAnLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucycsCisgICAgICAgIF0pLCBs
YW5ndWFnZTogJ2MnKQorZWxpZiBzeXN0ZW0gPT0gJ3dpbmRvd3MnCisgICAgZGVwZW5kZW5jaWVz
ICs9IGNvbXBpbGVyLmZpbmRfbGlicmFyeSgnd3MyXzMyJywgcmVxdWlyZWQ6IHRydWUpCisgICAg
ZGVwZW5kZW5jaWVzICs9IGNvbXBpbGVyLmZpbmRfbGlicmFyeSgnaXBobHBhcGknLCByZXF1aXJl
ZDogdHJ1ZSkKKyAgICBpZiBjb21waWxlci5nZXRfaWQoKSA9PSAnZ2NjJworICAgICAgICBhZGRf
cHJvamVjdF9hcmd1bWVudHMoY29tcGlsZXIuZ2V0X3N1cHBvcnRlZF9hcmd1bWVudHMoWworICAg
ICAgICAgICAgJy1Xbm8tZm9ybWF0JywKKyAgICAgICAgICAgICctRF9XSU4zMl9XSU5OVD0weDYw
MScsICAjIEVuYWJsZXMgaW5ldF9udG9wIGFuZCBmcmllbmRzCisgICAgICAgIF0pLCBsYW5ndWFn
ZTogJ2MnKQorICAgIGVuZGlmCitlbHNlCisgICAgZXJyb3IoJ1Vua25vd24gc3lzdGVtOiBAMEAn
LmZvcm1hdChzeXN0ZW0pKQorZW5kaWYKKworIyBGZWF0dXJlOiBzeXMvcXVldWUKK2lmIGNvbXBp
bGVyLmhhc19oZWFkZXIoJ3N5cy9xdWV1ZS5oJykKKyAgICBhZGRfcHJvamVjdF9hcmd1bWVudHMo
Jy1ESEFWRV9TWVNfUVVFVUVfSCcsIGxhbmd1YWdlOiAnYycpCitlbmRpZgorCisjIEZlYXR1cmU6
IHN5cy9zb2NrZXQsIGxpbnV4L2lmYWRkciwgbGludXgvcnRuZXRsaW5rCitpZiBjb21waWxlci5o
YXNfaGVhZGVyKCdzeXMvc29ja2V0LmgnKQorICAgIGlmIGNvbXBpbGVyLmhhc19oZWFkZXIoJ2xp
bnV4L2lmX2FkZHIuaCcpCisgICAgICAgIGFkZF9wcm9qZWN0X2FyZ3VtZW50cygnLURIQVZFX0xJ
TlVYX0lGX0FERFJfSCcsIGxhbmd1YWdlOiAnYycpCisgICAgZW5kaWYKKworICAgIGlmIGNvbXBp
bGVyLmhhc19oZWFkZXIoJ2xpbnV4L3J0bmV0bGluay5oJykKKyAgICAgICAgYWRkX3Byb2plY3Rf
YXJndW1lbnRzKCctREhBVkVfTElOVVhfUlRORVRMSU5LX0gnLCBsYW5ndWFnZTogJ2MnKQorICAg
IGVuZGlmCitlbmRpZgorCisjIEZlYXR1cmU6IElDTVAKK2hhdmVfc3lzX3R5cGVzID0gY29tcGls
ZXIuaGFzX2hlYWRlcignc3lzL3R5cGVzLmgnKQoraGF2ZV9uZXRpbmV0X2luID0gY29tcGlsZXIu
aGFzX2hlYWRlcignbmV0aW5ldC9pbi5oJykKK2hhdmVfbmV0aW5ldF9pcCA9IGNvbXBpbGVyLmhh
c19oZWFkZXIoJ25ldGluZXQvaXAuaCcpCitoYXZlX25ldGluZXRfaXBfaWNtcCA9IGNvbXBpbGVy
Lmhhc19oZWFkZXIoJ25ldGluZXQvaXBfaWNtcC5oJykKK2lmIGhhdmVfc3lzX3R5cGVzIGFuZCBo
YXZlX25ldGluZXRfaW4gYW5kIGhhdmVfbmV0aW5ldF9pcCBhbmQgaGF2ZV9uZXRpbmV0X2lwX2lj
bXAKKyAgICBhZGRfcHJvamVjdF9hcmd1bWVudHMoJy1ESEFWRV9ORVRJTkVUX0lQX0lDTVBfSCcs
IGxhbmd1YWdlOiAnYycpCitlbmRpZgorCisjIEZlYXR1cmU6IHN0ZGF0b21pYworaWYgY29tcGls
ZXIuaGFzX2hlYWRlcignc3RkYXRvbWljLmgnKQorICAgIGFkZF9wcm9qZWN0X2FyZ3VtZW50cygn
LURIQVZFX1NUREFUT01JQ19IJywgbGFuZ3VhZ2U6ICdjJykKK2VuZGlmCisKKyMgRmVhdHVyZTog
c29ja2FkZHIuc2FfbGVuCitwcmVmaXggPSAnJycKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNp
bmNsdWRlIDxzeXMvc29ja2V0Lmg+CisnJycKK2hhdmVfc2FfbGVuID0gY29tcGlsZXIuaGFzX21l
bWJlcignc3RydWN0IHNvY2thZGRyJywgJ3NhX2xlbicsIHByZWZpeDogcHJlZml4KQoraWYgaGF2
ZV9zYV9sZW4KKyAgICBhZGRfcHJvamVjdF9hcmd1bWVudHMoJy1ESEFWRV9TQV9MRU4nLCBsYW5n
dWFnZTogJ2MnKQorZW5kaWYKKworIyBGZWF0dXJlOiBzb2NrYWRkcl9pbi5zaW5fbGVuIC8gc29j
a2FkZHJfaW42LnNpbjZfbGVuIC8gc29ja2FkZHJfY29ubi5zY29ubl9sZW4KK3ByZWZpeCA9ICcn
JworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKycnJwor
aGF2ZV9zaW5fbGVuID0gY29tcGlsZXIuaGFzX21lbWJlcignc3RydWN0IHNvY2thZGRyX2luJywg
J3Npbl9sZW4nLCBwcmVmaXg6IHByZWZpeCkKK2lmIGhhdmVfc2luX2xlbgorICAgIGFkZF9wcm9q
ZWN0X2FyZ3VtZW50cygnLURIQVZFX1NJTl9MRU4nLCBsYW5ndWFnZTogJ2MnKQorZW5kaWYKK2hh
dmVfc2luNl9sZW4gPSBjb21waWxlci5oYXNfbWVtYmVyKCdzdHJ1Y3Qgc29ja2FkZHJfaW42Jywg
J3NpbjZfbGVuJywgcHJlZml4OiBwcmVmaXgpCitpZiBoYXZlX3NpbjZfbGVuCisgICAgYWRkX3By
b2plY3RfYXJndW1lbnRzKCctREhBVkVfU0lONl9MRU4nLCBsYW5ndWFnZTogJ2MnKQorZW5kaWYK
K2hhdmVfc2Nvbm5fbGVuID0gY29tcGlsZXIuaGFzX21lbWJlcignc3RydWN0IHNvY2thZGRyX2Nv
bm4nLCAnc2Nvbm5fbGVuJywgcHJlZml4OiAnI2luY2x1ZGUgInVzcnNjdHAuaCInLCBpbmNsdWRl
X2RpcmVjdG9yaWVzOiBpbmNsdWRlX2RpcmVjdG9yaWVzKCd1c3JzY3RwbGliJykpCitpZiBoYXZl
X3Njb25uX2xlbgorICAgIGFkZF9wcm9qZWN0X2FyZ3VtZW50cygnLURIQVZFX1NDT05OX0xFTics
IGxhbmd1YWdlOiAnYycpCitlbmRpZgorCisjIE9wdGlvbnMKK2lmIGdldF9vcHRpb24oJ3NjdHBf
aW52YXJpYW50cycpCisgICAgYWRkX3Byb2plY3RfYXJndW1lbnRzKCctRElOVkFSSUFOVFMnLCBs
YW5ndWFnZTogJ2MnKQorZW5kaWYKK2lmIGdldF9vcHRpb24oJ3NjdHBfZGVidWcnKQorICAgIGFk
ZF9wcm9qZWN0X2FyZ3VtZW50cygnLURTQ1RQX0RFQlVHJywgbGFuZ3VhZ2U6ICdjJykKKyAgICBj
b21waWxlX2FyZ3MgKz0gJy1EU0NUUF9ERUJVRycKK2VuZGlmCitpZiBnZXRfb3B0aW9uKCdzY3Rw
X2luZXQnKQorICAgIGFkZF9wcm9qZWN0X2FyZ3VtZW50cygnLURJTkVUJywgbGFuZ3VhZ2U6ICdj
JykKK2VuZGlmCitpZiBnZXRfb3B0aW9uKCdzY3RwX2luZXQ2JykKKyAgICBhZGRfcHJvamVjdF9h
cmd1bWVudHMoJy1ESU5FVDYnLCBsYW5ndWFnZTogJ2MnKQorZW5kaWYKKworIyBMaWJyYXJ5Citz
dWJkaXIoJ3VzcnNjdHBsaWInKQorCisjIEJ1aWxkIGxpYnJhcnkKK2lmIGNvbXBpbGVyLmdldF9p
ZCgpID09ICdtc3ZjJyBhbmQgZ2V0X29wdGlvbignZGVmYXVsdF9saWJyYXJ5JykgPT0gJ3NoYXJl
ZCcKKyAgICAjIE5lZWRlZCBieSB1c3JzY3RwX2RlZgorICAgIGZpbmRfcHJvZ3JhbSgnZHVtcGJp
bicpCisKKyAgICB1c3JzY3RwX3N0YXRpYyA9IHN0YXRpY19saWJyYXJ5KCd1c3JzY3RwLXN0YXRp
YycsIHNvdXJjZXMsCisgICAgICAgIGRlcGVuZGVuY2llczogZGVwZW5kZW5jaWVzLAorICAgICAg
ICBpbmNsdWRlX2RpcmVjdG9yaWVzOiBpbmNsdWRlX2RpcnMpCisKKyAgIHVzcnNjdHBfZGVmID0g
Y3VzdG9tX3RhcmdldCgndXNyc2N0cC5kZWYnLAorICAgICAgICBjb21tYW5kOiBbZmluZF9wcm9n
cmFtKCdnZW4tZGVmLnB5JyksICdASU5QVVRAJ10sCisgICAgICAgIGlucHV0OiB1c3JzY3RwX3N0
YXRpYywKKyAgICAgICAgb3V0cHV0OiAndXNyc2N0cC5kZWYnLAorICAgICAgICBjYXB0dXJlOiB0
cnVlKQorCisgICAgdXNyc2N0cCA9IHNoYXJlZF9saWJyYXJ5KCd1c3JzY3RwJywKKyAgICAgICAg
bGlua193aG9sZTogdXNyc2N0cF9zdGF0aWMsCisgICAgICAgIGRlcGVuZGVuY2llczogZGVwZW5k
ZW5jaWVzLAorICAgICAgICB2c19tb2R1bGVfZGVmczogdXNyc2N0cF9kZWYsCisgICAgICAgIGlu
c3RhbGw6IHRydWUsCisgICAgICAgIHZlcnNpb246IG1lc29uLnByb2plY3RfdmVyc2lvbigpKQor
ZWxzZQorICAgIHVzcnNjdHAgPSBsaWJyYXJ5KCd1c3JzY3RwJywgc291cmNlcywKKyAgICAgICAg
ZGVwZW5kZW5jaWVzOiBkZXBlbmRlbmNpZXMsCisgICAgICAgIGluY2x1ZGVfZGlyZWN0b3JpZXM6
IGluY2x1ZGVfZGlycywKKyAgICAgICAgaW5zdGFsbDogdHJ1ZSwKKyAgICAgICAgdmVyc2lvbjog
c292ZXJzaW9uX2Z1bGwsCisgICAgICAgIHNvdmVyc2lvbjogc292ZXJzaW9uX3Nob3J0KQorZW5k
aWYKKworIyBEZWNsYXJlIGRlcGVuZGVuY3kKK3VzcnNjdHBfZGVwID0gZGVjbGFyZV9kZXBlbmRl
bmN5KAorICAgIGNvbXBpbGVfYXJnczogY29tcGlsZV9hcmdzLAorICAgIGluY2x1ZGVfZGlyZWN0
b3JpZXM6IGluY2x1ZGVfZGlycywKKyAgICBsaW5rX3dpdGg6IHVzcnNjdHApCisKKyMgR2VuZXJh
dGUgcGtnLWNvbmZpZyBmaWxlCitwa2cgPSBpbXBvcnQoJ3BrZ2NvbmZpZycpCitwa2cuZ2VuZXJh
dGUodXNyc2N0cCwKKyAgICBuYW1lOiAndXNyc2N0cCcsCisgICAgZGVzY3JpcHRpb246ICdBIHBv
cnRhYmxlIFNDVFAgdXNlcmxhbmQgc3RhY2snLAorICAgIHVybDogJ2h0dHBzOi8vZ2l0aHViLmNv
bS9zY3RwbGFiL3VzcnNjdHAnLAorICAgIGV4dHJhX2NmbGFnczogY29tcGlsZV9hcmdzKQorCisj
IFByb2dyYW1zIChvcHRpb25hbCkKK2lmIGdldF9vcHRpb24oJ3NjdHBfYnVpbGRfcHJvZ3JhbXMn
KQorICAgIHN1YmRpcigncHJvZ3JhbXMnKQorCisgICAgIyBCdWlsZCBleGVjdXRhYmxlcworICAg
IGZvcmVhY2ggbmFtZSwgc291cmNlcyA6IHByb2dyYW1zCisgICAgICAgIGV4ZWN1dGFibGUoCisg
ICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgcHJvZ3JhbXNfaGVscGVyX3NvdXJjZXMgKyBz
b3VyY2VzLAorICAgICAgICAgICAgZGVwZW5kZW5jaWVzOiBkZXBlbmRlbmNpZXMsCisgICAgICAg
ICAgICBsaW5rX3dpdGg6IHVzcnNjdHAsCisgICAgICAgICAgICBpbmNsdWRlX2RpcmVjdG9yaWVz
OiBpbmNsdWRlX2RpcnMpCisgICAgZW5kZm9yZWFjaAorZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL21lc29uX29wdGlvbnMudHh0IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbWVzb25fb3B0aW9ucy50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41NmQ5NTA2MTIxNTYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi9tZXNvbl9vcHRpb25zLnR4dApAQCAtMCwwICsxLDEwIEBACitv
cHRpb24oJ3NjdHBfaW52YXJpYW50cycsIHR5cGU6ICdib29sZWFuJywgdmFsdWU6IGZhbHNlLAor
ICAgIGRlc2NyaXB0aW9uOiAnQWRkIHJ1bnRpbWUgY2hlY2tzJykKK29wdGlvbignc2N0cF9kZWJ1
ZycsIHR5cGU6ICdib29sZWFuJywgdmFsdWU6IGZhbHNlLAorICAgIGRlc2NyaXB0aW9uOiAnUHJv
dmlkZSBkZWJ1ZyBpbmZvcm1hdGlvbicpCitvcHRpb24oJ3NjdHBfaW5ldCcsIHR5cGU6ICdib29s
ZWFuJywgdmFsdWU6IHRydWUsCisgICAgZGVzY3JpcHRpb246ICdTdXBwb3J0IElQdjQnKQorb3B0
aW9uKCdzY3RwX2luZXQ2JywgdHlwZTogJ2Jvb2xlYW4nLCB2YWx1ZTogdHJ1ZSwKKyAgICBkZXNj
cmlwdGlvbjogJ1N1cHBvcnQgSVB2NicpCitvcHRpb24oJ3NjdHBfYnVpbGRfcHJvZ3JhbXMnLCB0
eXBlOiAnYm9vbGVhbicsIHZhbHVlOiB0cnVlLAorICAgIGRlc2NyaXB0aW9uOiAnQnVpbGQgZXhh
bXBsZSBwcm9ncmFtcycpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwLnBjLmluIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvdXNyc2N0cC5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLmExZWNkMmY3NGViZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHAucGMu
aW4KQEAgLTAsMCArMSwxMiBAQAorcHJlZml4PUBwcmVmaXhACitleGVjX3ByZWZpeD1AZXhlY19w
cmVmaXhACitsaWJkaXI9QGxpYmRpckAKK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisKK05hbWU6
IHVzcnNjdHAKK0Rlc2NyaXB0aW9uOiBTQ1RQIGltcGxlbWVudGF0aW9uCitVUkw6IGh0dHBzOi8v
Z2l0aHViLmNvbS9zY3RwbGFiL3VzcnNjdHAKK1ZlcnNpb246IEBWRVJTSU9OQAorUmVxdWlyZXM6
IAorTGliczogLUwke2xpYmRpcn0gLWx1c3JzY3RwCitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfSBA
QVBQQ0ZMQUdTQApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9DTWFrZUxpc3RzLnR4
dCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44NDU3NzJmYzRmMDYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi91c3JzY3RwbGliL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMjE2IEBACisjCisj
IENvcHlyaWdodCAoQykgMjAxNS0yMDE1IE9sZWcgQWxleGVlbmtvdgorIyBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAyMCBGZWxpeCBXZWlucmFuaworIworIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAz
LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNv
bnRyaWJ1dG9ycworIyAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyMgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorIyBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUworIyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyMgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QKKyMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisjIFNVQ0ggREFNQUdFLgor
IworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK
KyMgSU5DTFVERSBNT0RVTEVTIEFORCBTRVRUSU5HUworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzZXQoVkVSU0lPTiAiMC45LjUuMCIpCisKKyMg
U2hhcmVkIGxpYnJhcnkgQVBJIGFuZCBBQkkgdmVyc2lvbnMKKyMgTm90aWNlOiBzaGFyZWQgbGli
cmFyeSB2ZXJzaW9uIG11c3QgYmUgaW4gWC5ZLlogZm9ybWF0IG9ubHkKK3NldChTT1ZFUlNJT05f
RlVMTCAiMi4wLjAiKQorc2V0KFNPVkVSU0lPTl9TSE9SVCAiMiIpCisKK2luY2x1ZGUoR05VSW5z
dGFsbERpcnMpCitzZXQocHJlZml4ICR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9KQorc2V0KGV4ZWNf
cHJlZml4ICR7cHJlZml4fSkKK3NldChsaWJkaXIgJHtleGVjX3ByZWZpeH0vJHtDTUFLRV9JTlNU
QUxMX0xJQkRJUn0pCitzZXQoaW5jbHVkZWRpciAke3ByZWZpeH0vJHtDTUFLRV9JTlNUQUxMX0lO
Q0xVREVESVJ9KQorCitzZXQoQ01BS0VfUkVRVUlSRURfSU5DTFVERVMgJHtDTUFLRV9DVVJSRU5U
X1NPVVJDRV9ESVJ9KQorc2V0KENNQUtFX01BQ09TWF9SUEFUSCAxKQorCitpbmNsdWRlKENoZWNr
Q0NvbXBpbGVyRmxhZykKKworCitvcHRpb24oU0NUUF9VU0VfTUJFRFRMU19TSEExICJCdWlsZCB3
aXRoIG1iZWR0bHMgc2hhMSBzdXBwb3J0LiIgT0ZGKQorCithZGRfZGVmaW5pdGlvbnMoLURfX1Vz
ZXJzcGFjZV9fKQorYWRkX2RlZmluaXRpb25zKC1EU0NUUF9TSU1QTEVfQUxMT0NBVE9SKQorYWRk
X2RlZmluaXRpb25zKC1EU0NUUF9QUk9DRVNTX0xFVkVMX0xPQ0tTKQorCitpZihTQ1RQX1VTRV9N
QkVEVExTX1NIQTEpCisJYWRkX2RlZmluaXRpb25zKC1EU0NUUF9VU0VfTUJFRFRMU19TSEExKQor
CWZpbmRfcGFja2FnZShNYmVkVExTIFJFUVVJUkVEKQorZW5kaWYoKQorCisKKyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgT1MgREVQRU5ERU5UCisj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NoZWNr
X2NfY29tcGlsZXJfZmxhZygtV25vLWFkZHJlc3Mtb2YtcGFja2VkLW1lbWJlciBoYXNfd25vX2Fk
ZHJlc3Nfb2ZfcGFja2VkX21lbWJlcikKK2lmIChoYXNfd25vX2FkZHJlc3Nfb2ZfcGFja2VkX21l
bWJlcikKKwlzZXQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAtV25vLWFkZHJlc3Mt
b2YtcGFja2VkLW1lbWJlciIpCitlbmRpZiAoKQorCitjaGVja19jX2NvbXBpbGVyX2ZsYWcoLVdu
by1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucyBoYXNfd25vX2RlcHJlY2F0ZWRfZGVjbGFyYXRpb25z
KQoraWYgKGhhc193bm9fZGVwcmVjYXRlZF9kZWNsYXJhdGlvbnMpCisJc2V0KENNQUtFX0NfRkxB
R1MgIiR7Q01BS0VfQ19GTEFHU30gLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIpCitlbmRp
ZiAoKQorCitpZiAoQ01BS0VfU1lTVEVNX05BTUUgTUFUQ0hFUyAiTGludXgiKQorCWFkZF9kZWZp
bml0aW9ucygtRF9HTlVfU09VUkNFKQorZW5kaWYgKCkKKworaWYgKENNQUtFX1NZU1RFTV9OQU1F
IE1BVENIRVMgIkRhcndpbiIpCisJYWRkX2RlZmluaXRpb25zKC1EX19BUFBMRV9VU0VfUkZDXzIy
OTIpCitlbmRpZiAoKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjCisjIE1JU0MKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMKKworaWYgKHNjdHBfYnVpbGRfc2hhcmVkX2xpYikKKwlzZXQoQlVJTERfU0hB
UkVEX0xJQlMgMSkKK2VuZGlmICgpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMKKyMgTElCUkFSWSBGSUxFUworIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitpbmNsdWRlX2RpcmVjdG9yaWVzKCR7Q01B
S0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSkKKworbGlzdChBUFBFTkQgdXNyc2N0cF9yb290X2hlYWRl
cnMKKwl1c2VyX2F0b21pYy5oCisJdXNlcl9lbnZpcm9ubWVudC5oCisJdXNlcl9pbnBjYi5oCisJ
dXNlcl9pcF9pY21wLmgKKwl1c2VyX2lwNl92YXIuaAorCXVzZXJfbWFsbG9jLmgKKwl1c2VyX21i
dWYuaAorCXVzZXJfcXVldWUuaAorCXVzZXJfcmVjdl90aHJlYWQuaAorCXVzZXJfcm91dGUuaAor
CXVzZXJfc29ja2V0dmFyLmgKKwl1c2VyX3VtYS5oCisJdXNyc2N0cC5oCispCisKK2xpc3QoQVBQ
RU5EIHVzcnNjdHBfbmV0aW5ldF9oZWFkZXJzCisJbmV0aW5ldC9zY3RwX2FzY29uZi5oCisJbmV0
aW5ldC9zY3RwX2F1dGguaAorCW5ldGluZXQvc2N0cF9ic2RfYWRkci5oCisJbmV0aW5ldC9zY3Rw
X2NhbGxvdXQuaAorCW5ldGluZXQvc2N0cF9jb25zdGFudHMuaAorCW5ldGluZXQvc2N0cF9jcmMz
Mi5oCisJbmV0aW5ldC9zY3RwX2hlYWRlci5oCisJbmV0aW5ldC9zY3RwX2luZGF0YS5oCisJbmV0
aW5ldC9zY3RwX2lucHV0LmgKKwluZXRpbmV0L3NjdHBfbG9ja191c2Vyc3BhY2UuaAorCW5ldGlu
ZXQvc2N0cF9vc191c2Vyc3BhY2UuaAorCW5ldGluZXQvc2N0cF9vcy5oCisJbmV0aW5ldC9zY3Rw
X291dHB1dC5oCisJbmV0aW5ldC9zY3RwX3BjYi5oCisJbmV0aW5ldC9zY3RwX3BlZWxvZmYuaAor
CW5ldGluZXQvc2N0cF9wcm9jZXNzX2xvY2suaAorCW5ldGluZXQvc2N0cF9zaGExLmgKKwluZXRp
bmV0L3NjdHBfc3RydWN0cy5oCisJbmV0aW5ldC9zY3RwX3N5c2N0bC5oCisJbmV0aW5ldC9zY3Rw
X3RpbWVyLmgKKwluZXRpbmV0L3NjdHBfdWlvLmgKKwluZXRpbmV0L3NjdHBfdmFyLmgKKwluZXRp
bmV0L3NjdHB1dGlsLmgKKwluZXRpbmV0L3NjdHAuaAorKQorCitsaXN0KEFQUEVORCB1c3JzY3Rw
X25ldGluZXQ2X2hlYWRlcnMKKwluZXRpbmV0Ni9zY3RwNl92YXIuaAorKQorCitsaXN0KEFQUEVO
RCB1c3JzY3RwX2hlYWRlcnMKKwkke3VzcnNjdHBfcm9vdF9oZWFkZXJzfQorCSR7dXNyc2N0cF9u
ZXRpbmV0X2hlYWRlcnN9CisJJHt1c3JzY3RwX25ldGluZXQ2X2hlYWRlcnN9CispCisKK2xpc3Qo
QVBQRU5EIHVzcnNjdHBfc291cmNlcworCW5ldGluZXQvc2N0cF9hc2NvbmYuYworCW5ldGluZXQv
c2N0cF9hdXRoLmMKKwluZXRpbmV0L3NjdHBfYnNkX2FkZHIuYworCW5ldGluZXQvc2N0cF9jYWxs
b3V0LmMKKwluZXRpbmV0L3NjdHBfY2NfZnVuY3Rpb25zLmMKKwluZXRpbmV0L3NjdHBfY3JjMzIu
YworCW5ldGluZXQvc2N0cF9pbmRhdGEuYworCW5ldGluZXQvc2N0cF9pbnB1dC5jCisJbmV0aW5l
dC9zY3RwX291dHB1dC5jCisJbmV0aW5ldC9zY3RwX3BjYi5jCisJbmV0aW5ldC9zY3RwX3BlZWxv
ZmYuYworCW5ldGluZXQvc2N0cF9zaGExLmMKKwluZXRpbmV0L3NjdHBfc3NfZnVuY3Rpb25zLmMK
KwluZXRpbmV0L3NjdHBfc3lzY3RsLmMKKwluZXRpbmV0L3NjdHBfdGltZXIuYworCW5ldGluZXQv
c2N0cF91c2Vyc3BhY2UuYworCW5ldGluZXQvc2N0cF91c3JyZXEuYworCW5ldGluZXQvc2N0cHV0
aWwuYworCW5ldGluZXQ2L3NjdHA2X3VzcnJlcS5jCisJdXNlcl9lbnZpcm9ubWVudC5jCisJdXNl
cl9tYnVmLmMKKwl1c2VyX3JlY3ZfdGhyZWFkLmMKKwl1c2VyX3NvY2tldC5jCispCisKK2FkZF9s
aWJyYXJ5KHVzcnNjdHAgJHt1c3JzY3RwX3NvdXJjZXN9ICR7dXNyc2N0cF9oZWFkZXJzfSkKKwor
dGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXModXNyc2N0cCBQVUJMSUMgJHtDTUFLRV9DVVJSRU5U
X1NPVVJDRV9ESVJ9KQorCitpZihTQ1RQX1VTRV9NQkVEVExTX1NIQTEpCisJdGFyZ2V0X2luY2x1
ZGVfZGlyZWN0b3JpZXModXNyc2N0cCBQUklWQVRFICR7TUJFRFRMU19JTkNMVURFX0RJUlN9KQor
ZW5kaWYoKQorCitpZiAoV0lOMzIpCisJbWVzc2FnZShTVEFUVVMgImxpbmsgbGlicmFyeTogd3My
XzMyIikKKwl0YXJnZXRfbGlua19saWJyYXJpZXModXNyc2N0cCB3czJfMzIgaXBobHBhcGkpCitl
bmRpZiAoKQorCitpZihTQ1RQX1VTRV9NQkVEVExTX1NIQTEpCisJdGFyZ2V0X2xpbmtfbGlicmFy
aWVzKHVzcnNjdHAgUFJJVkFURSAke01CRURUTFNfTElCUkFSSUVTfSkKK2VuZGlmKCkKKworCitz
ZXRfdGFyZ2V0X3Byb3BlcnRpZXModXNyc2N0cCBQUk9QRVJUSUVTIElNUE9SVF9TVUZGSVggIl9p
bXBvcnQubGliIikKK3NldF90YXJnZXRfcHJvcGVydGllcyh1c3JzY3RwIFBST1BFUlRJRVMgU09W
RVJTSU9OICR7U09WRVJTSU9OX1NIT1JUfSBWRVJTSU9OICR7U09WRVJTSU9OX0ZVTEx9KQorCisj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIElOU1RB
TEwgTElCUkFSWSBBTkQgSEVBREVSCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjCisKK2luc3RhbGwoVEFSR0VUUyB1c3JzY3RwIERFU1RJTkFUSU9OICR7
Q01BS0VfSU5TVEFMTF9MSUJESVJ9KQoraW5zdGFsbChGSUxFUyB1c3JzY3RwLmggREVTVElOQVRJ
T04gJHtDTUFLRV9JTlNUQUxMX0lOQ0xVREVESVJ9KQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEdFTkVSQVRFIEFORCBJTlNUQUxMIFBLRy1D
T05GSUcgRklMRQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIworCitjb25maWd1cmVfZmlsZSgiJHtQUk9KRUNUX1NPVVJDRV9ESVJ9L3VzcnNjdHAucGMu
aW4iICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vdXNyc2N0cC5wYyIgQE9OTFkpCitpbnN0
YWxsKEZJTEVTICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vdXNyc2N0cC5wYyIgREVTVElO
QVRJT04gIiR7Q01BS0VfSU5TVEFMTF9MSUJESVJ9L3BrZ2NvbmZpZyIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi91c3JzY3RwbGliL01ha2VmaWxlLmFtIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9NYWtl
ZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmRjMDdjNmUx
N2ZiYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvTWFrZWZpbGUuYW0K
QEAgLTAsMCArMSw4MSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBNaWNoYWVsIFR1
ZXhlbgorIworIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9m
IHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworIyAgICBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg
c29mdHdhcmUKKyMgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQorIyBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRQorIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UworIyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikKKyMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyMgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WQorIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GCisjIFNVQ0ggREFNQUdFLgorIworCitBVVRPTUFLRV9PUFRJT05T
ICAgICAgID0gc3ViZGlyLW9iamVjdHMKK0VYVFJBX0RJU1QgICAgICAgICAgICAgPSBNYWtlZmls
ZS5ubWFrZQorbGliX0xUTElCUkFSSUVTICAgICAgICA9IGxpYnVzcnNjdHAubGEKK2xpYnVzcnNj
dHBfbGFfU09VUkNFUyAgPSB1c2VyX2F0b21pYy5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICB1c2VyX2Vudmlyb25tZW50LmMgdXNlcl9lbnZpcm9ubWVudC5oIFwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICB1c2VyX2lucGNiLmggXAorICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJf
aXBfaWNtcC5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2lwNl92YXIuaCBcCisg
ICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9tYWxsb2MuaCBcCisgICAgICAgICAgICAgICAg
ICAgICAgICAgdXNlcl9tYnVmLmMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfbWJ1
Zi5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX3F1ZXVlLmggXAorICAgICAgICAg
ICAgICAgICAgICAgICAgIHVzZXJfcmVjdl90aHJlYWQuYyB1c2VyX3JlY3ZfdGhyZWFkLmggXAor
ICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfcm91dGUuaCBcCisgICAgICAgICAgICAgICAg
ICAgICAgICAgdXNlcl9zb2NrZXQuYyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9z
b2NrZXR2YXIuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl91bWEuaCBcCisgICAg
ICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwLmggXAorICAgICAgICAgICAgICAgICAg
ICAgICAgIG5ldGluZXQvc2N0cF9hc2NvbmYuYyBuZXRpbmV0L3NjdHBfYXNjb25mLmggXAorICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cF9hdXRoLmMgbmV0aW5ldC9zY3RwX2F1
dGguaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX2JzZF9hZGRyLmMg
bmV0aW5ldC9zY3RwX2JzZF9hZGRyLmggXAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGlu
ZXQvc2N0cF9jYWxsb3V0LmMgbmV0aW5ldC9zY3RwX2NhbGxvdXQuaCBcCisgICAgICAgICAgICAg
ICAgICAgICAgICAgbmV0aW5ldC9zY3RwX2NjX2Z1bmN0aW9ucy5jIFwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXRpbmV0L3NjdHBfY29uc3RhbnRzLmggXAorICAgICAgICAgICAgICAgICAg
ICAgICAgIG5ldGluZXQvc2N0cF9jcmMzMi5jIG5ldGluZXQvc2N0cF9jcmMzMi5oIFwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfaGVhZGVyLmggXAorICAgICAgICAgICAg
ICAgICAgICAgICAgIG5ldGluZXQvc2N0cF9pbmRhdGEuYyBuZXRpbmV0L3NjdHBfaW5kYXRhLmgg
XAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cF9pbnB1dC5jIG5ldGluZXQv
c2N0cF9pbnB1dC5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfbG9j
a191c2Vyc3BhY2UuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX29z
LmggXAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cF9vc191c2Vyc3BhY2Uu
aCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX291dHB1dC5jIG5ldGlu
ZXQvc2N0cF9vdXRwdXQuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3Rw
X3BjYi5jIG5ldGluZXQvc2N0cF9wY2IuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV0
aW5ldC9zY3RwX3BlZWxvZmYuYyBuZXRpbmV0L3NjdHBfcGVlbG9mZi5oIFwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfcHJvY2Vzc19sb2NrLmggXAorICAgICAgICAgICAg
ICAgICAgICAgICAgIG5ldGluZXQvc2N0cF9zaGExLmMgbmV0aW5ldC9zY3RwX3NoYTEuaCBcCisg
ICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX3NzX2Z1bmN0aW9ucy5jIFwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfc3RydWN0cy5oIFwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfc3lzY3RsLmMgbmV0aW5ldC9zY3RwX3N5c2N0
bC5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfdXNlcnNwYWNlLmMg
XAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cF90aW1lci5jIG5ldGluZXQv
c2N0cF90aW1lci5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfdWlv
LmggXAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cF91c3JyZXEuYyBcCisg
ICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX3Zhci5oIFwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBuZXRpbmV0L3NjdHB1dGlsLmMgbmV0aW5ldC9zY3RwdXRpbC5oIFwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0Ni9zY3RwNl92YXIuaCBcCisgICAgICAgICAg
ICAgICAgICAgICAgICAgbmV0aW5ldDYvc2N0cDZfdXNycmVxLmMKK2xpYnVzcnNjdHBfbGFfQ0ZM
QUdTID0gJChMSUJDRkxBR1MpCitsaWJ1c3JzY3RwX2xhX0xERkxBR1MgPSAtdmVyc2lvbi1pbmZv
IDI6MDowCitpbmNsdWRlX0hFQURFUlMgPSB1c3JzY3RwLmgKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvdXNyc2N0cGxpYi9NYWtlZmlsZS5ubWFrZSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvTWFrZWZp
bGUubm1ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hZmNkYTZk
OTE1ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL01ha2VmaWxlLm5t
YWtlCkBAIC0wLDAgKzEsMTc5IEBACisjDQorIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBNaWNo
YWVsIFR1ZXhlbg0KKyMNCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorIw0KKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
DQorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMNCisjIGFyZSBtZXQ6DQorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyMg
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQNCisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUNCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorIyAzLiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRy
aWJ1dG9ycw0KKyMgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlDQorIyAgICB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4NCisjDQorIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORA0KKyMgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFDQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQ0KKyMgQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5U
IFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCisjIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMDQorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUw0KKyMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pDQorIyBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVA0KKyMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQ0KKyMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRg0KKyMgU1VD
SCBEQU1BR0UuDQorIw0KKw0KK0NGTEFHUz0vSS4gL1czIC9XWA0KKw0KK0NWQVJTRExMPS1EU0NU
UF9ERUJVRyAtRFNDVFBfU0lNUExFX0FMTE9DQVRPUiAtRFNDVFBfUFJPQ0VTU19MRVZFTF9MT0NL
Uw0KK0NWQVJTRExMPSQoQ1ZBUlNETEwpIC1EX19Vc2Vyc3BhY2VfXw0KK0NWQVJTRExMPSQoQ1ZB
UlNETEwpIC1ESU5FVCAtRElORVQ2DQorQ1ZBUlNETEw9JChDVkFSU0RMTCkgLURfTElCDQorDQor
TElOS0ZMQUdTPS9MSUJQQVRIOi4gV3MyXzMyLmxpYg0KKw0KK3VzcnNjdHBfT0JKRUNUUyA9IFwN
CisJdXNlcl9lbnZpcm9ubWVudC5vYmogXA0KKwl1c2VyX21idWYub2JqIFwNCisJdXNlcl9yZWN2
X3RocmVhZC5vYmogXA0KKwl1c2VyX3NvY2tldC5vYmogXA0KKwlzY3RwX2FzY29uZi5vYmogXA0K
KwlzY3RwX2F1dGgub2JqIFwNCisJc2N0cF9ic2RfYWRkci5vYmogXA0KKwlzY3RwX2NhbGxvdXQu
b2JqIFwNCisJc2N0cF9jY19mdW5jdGlvbnMub2JqIFwNCisJc2N0cF9jcmMzMi5vYmogXA0KKwlz
Y3RwX2luZGF0YS5vYmogXA0KKwlzY3RwX2lucHV0Lm9iaiBcDQorCXNjdHBfb3V0cHV0Lm9iaiBc
DQorCXNjdHBfcGNiLm9iaiBcDQorCXNjdHBfcGVlbG9mZi5vYmogXA0KKwlzY3RwX3NoYTEub2Jq
IFwNCisJc2N0cF9zc19mdW5jdGlvbnMub2JqIFwNCisJc2N0cF9zeXNjdGwub2JqIFwNCisJc2N0
cF90aW1lci5vYmogXA0KKwlzY3RwX3VzZXJzcGFjZS5vYmogIFwNCisJc2N0cF91c3JyZXEub2Jq
IFwNCisJc2N0cHV0aWwub2JqIFwNCisJc2N0cDZfdXNycmVxLm9iag0KKw0KK3VzcnNjdHBfSEVB
REVSUyA9IFwNCisJdXNlcl9hdG9taWMuaCBcDQorCXVzZXJfZW52aXJvbm1lbnQuaCBcDQorCXVz
ZXJfaW5wY2IuaCBcDQorCXVzZXJfaXA2X3Zhci5oIFwNCisJdXNlcl9tYWxsb2MuaCBcDQorCXVz
ZXJfbWJ1Zi5oIFwNCisJdXNlcl9yZWN2X3RocmVhZC5oIFwNCisJdXNlcl9yb3V0ZS5oIFwNCisJ
dXNlcl9zb2NrZXR2YXIuaCBcDQorCXVzZXJfdW1hLmggXA0KKwl1c2VyX3F1ZXVlLmggXA0KKwl1
c2VyX2lwX2ljbXAuaCBcDQorCXVzZXJfaXA2X3Zhci5oIFwNCisJbmV0aW5ldFxzY3RwLmggXA0K
KwluZXRpbmV0XHNjdHBfYXNjb25mLmggXA0KKwluZXRpbmV0XHNjdHBfYXV0aC5oIFwNCisJbmV0
aW5ldFxzY3RwX2JzZF9hZGRyLmggXA0KKwluZXRpbmV0XHNjdHBfY2FsbG91dC5oIFwNCisJbmV0
aW5ldFxzY3RwX2NvbnN0YW50cy5oIFwNCisJbmV0aW5ldFxzY3RwX2NyYzMyLmggXA0KKwluZXRp
bmV0XHNjdHBfaGVhZGVyLmggXA0KKwluZXRpbmV0XHNjdHBfaW5kYXRhLmggXA0KKwluZXRpbmV0
XHNjdHBfaW5wdXQuaCBcDQorCW5ldGluZXRcc2N0cF9sb2NrX3VzZXJzcGFjZS5oIFwNCisJbmV0
aW5ldFxzY3RwX29zLmggXA0KKwluZXRpbmV0XHNjdHBfb3NfdXNlcnNwYWNlLmggXA0KKwluZXRp
bmV0XHNjdHBfb3V0cHV0LmggXA0KKwluZXRpbmV0XHNjdHBfcGNiLmggXA0KKwluZXRpbmV0XHNj
dHBfcGVlbG9mZi5oIFwNCisJbmV0aW5ldFxzY3RwX3Byb2Nlc3NfbG9jay5oIFwNCisJbmV0aW5l
dFxzY3RwX3NoYTEuaCBcDQorCW5ldGluZXRcc2N0cF9zdHJ1Y3RzLmggXA0KKwluZXRpbmV0XHNj
dHBfc3lzY3RsLmggXA0KKwluZXRpbmV0XHNjdHBfdGltZXIuaCBcDQorCW5ldGluZXRcc2N0cF91
aW8uaCBcDQorCW5ldGluZXRcc2N0cF92YXIuaCBcDQorCW5ldGluZXRcc2N0cHV0aWwuaCBcDQor
CW5ldGluZXQ2XHNjdHA2X3Zhci5oDQorDQordXNyc2N0cC5saWIgOiAkKHVzcnNjdHBfT0JKRUNU
UykNCisJbGliIC9vdXQ6dXNyc2N0cC5saWIgJChMSU5LRkxBR1MpICQodXNyc2N0cF9PQkpFQ1RT
KQ0KKw0KK3VzZXJfZW52aXJvbm1lbnQub2JqIDogdXNlcl9lbnZpcm9ubWVudC5jICQodXNyc2N0
cF9IRUFERVJTKQ0KKwljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgdXNlcl9lbnZpcm9ubWVu
dC5jDQorDQordXNlcl9tYnVmLm9iaiAgOiB1c2VyX21idWYuYyAkKHVzcnNjdHBfSEVBREVSUykN
CisJY2wgJChDVkFSU0RMTCkgJChDRkxBR1MpIC1jIHVzZXJfbWJ1Zi5jDQorDQordXNlcl9yZWN2
X3RocmVhZC5vYmo6IHVzZXJfcmVjdl90aHJlYWQuYyAkKHVzcnNjdHBfSEVBREVSUykNCisJY2wg
JChDVkFSU0RMTCkgJChDRkxBR1MpIC1jIHVzZXJfcmVjdl90aHJlYWQuYw0KKw0KK3VzZXJfc29j
a2V0Lm9iaiA6IHVzZXJfc29ja2V0LmMgJCh1c3JzY3RwX0hFQURFUlMpDQorCWNsICQoQ1ZBUlNE
TEwpICQoQ0ZMQUdTKSAtYyB1c2VyX3NvY2tldC5jDQorDQorc2N0cF9hc2NvbmYub2JqIDogbmV0
aW5ldFxzY3RwX2FzY29uZi5jICQodXNyc2N0cF9IRUFERVJTKQ0KKwljbCAkKENWQVJTRExMKSAk
KENGTEFHUykgLWMgbmV0aW5ldFxzY3RwX2FzY29uZi5jDQorDQorc2N0cF9hdXRoLm9iaiA6IG5l
dGluZXRcc2N0cF9hdXRoLmMgJCh1c3JzY3RwX0hFQURFUlMpDQorCWNsICQoQ1ZBUlNETEwpICQo
Q0ZMQUdTKSAtYyBuZXRpbmV0XHNjdHBfYXV0aC5jDQorDQorc2N0cF9ic2RfYWRkci5vYmogOiBu
ZXRpbmV0XHNjdHBfYnNkX2FkZHIuYyAkKHVzcnNjdHBfSEVBREVSUykNCisJY2wgJChDVkFSU0RM
TCkgJChDRkxBR1MpIC1jIG5ldGluZXRcc2N0cF9ic2RfYWRkci5jDQorDQorc2N0cF9jYWxsb3V0
Lm9iaiA6IG5ldGluZXRcc2N0cF9jYWxsb3V0LmMgJCh1c3JzY3RwX0hFQURFUlMpDQorCWNsICQo
Q1ZBUlNETEwpICQoQ0ZMQUdTKSAtYyBuZXRpbmV0XHNjdHBfY2FsbG91dC5jDQorDQorc2N0cF9j
Y19mdW5jdGlvbnMub2JqIDogbmV0aW5ldFxzY3RwX2NjX2Z1bmN0aW9ucy5jICQodXNyc2N0cF9I
RUFERVJTKQ0KKwljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgbmV0aW5ldFxzY3RwX2NjX2Z1
bmN0aW9ucy5jDQorDQorc2N0cF9jcmMzMi5vYmogOiBuZXRpbmV0XHNjdHBfY3JjMzIuYyAkKHVz
cnNjdHBfSEVBREVSUykNCisJY2wgJChDVkFSU0RMTCkgJChDRkxBR1MpIC1jIG5ldGluZXRcc2N0
cF9jcmMzMi5jDQorDQorc2N0cF9pbmRhdGEub2JqIDogbmV0aW5ldFxzY3RwX2luZGF0YS5jICQo
dXNyc2N0cF9IRUFERVJTKQ0KKwljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgbmV0aW5ldFxz
Y3RwX2luZGF0YS5jDQorDQorc2N0cF9pbnB1dC5vYmogOiBuZXRpbmV0XHNjdHBfaW5wdXQuYyAk
KHVzcnNjdHBfSEVBREVSUykNCisJY2wgJChDVkFSU0RMTCkgJChDRkxBR1MpIC1jIG5ldGluZXRc
c2N0cF9pbnB1dC5jDQorDQorc2N0cF9vdXRwdXQub2JqIDogbmV0aW5ldFxzY3RwX291dHB1dC5j
ICQodXNyc2N0cF9IRUFERVJTKQ0KKwljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgbmV0aW5l
dFxzY3RwX291dHB1dC5jDQorDQorc2N0cF9wY2Iub2JqIDogbmV0aW5ldFxzY3RwX3BjYi5jICQo
dXNyc2N0cF9IRUFERVJTKQ0KKwljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgbmV0aW5ldFxz
Y3RwX3BjYi5jDQorDQorc2N0cF9wZWVsb2ZmLm9iaiA6IG5ldGluZXRcc2N0cF9wZWVsb2ZmLmMg
JCh1c3JzY3RwX0hFQURFUlMpDQorCWNsICQoQ1ZBUlNETEwpICQoQ0ZMQUdTKSAtYyBuZXRpbmV0
XHNjdHBfcGVlbG9mZi5jDQorDQorc2N0cF9zaGExLm9iaiA6IG5ldGluZXRcc2N0cF9zaGExLmMg
JCh1c3JzY3RwX0hFQURFUlMpDQorCWNsICQoQ1ZBUlNETEwpICQoQ0ZMQUdTKSAtYyBuZXRpbmV0
XHNjdHBfc2hhMS5jDQorDQorc2N0cF9zc19mdW5jdGlvbnMub2JqIDogbmV0aW5ldFxzY3RwX3Nz
X2Z1bmN0aW9ucy5jICQodXNyc2N0cF9IRUFERVJTKQ0KKwljbCAkKENWQVJTRExMKSAkKENGTEFH
UykgLWMgbmV0aW5ldFxzY3RwX3NzX2Z1bmN0aW9ucy5jDQorDQorc2N0cF9zeXNjdGwub2JqIDog
bmV0aW5ldFxzY3RwX3N5c2N0bC5jICQodXNyc2N0cF9IRUFERVJTKQ0KKwljbCAkKENWQVJTRExM
KSAkKENGTEFHUykgLWMgbmV0aW5ldFxzY3RwX3N5c2N0bC5jDQorDQorc2N0cF90aW1lci5vYmog
OiBuZXRpbmV0XHNjdHBfdGltZXIuYyAkKHVzcnNjdHBfSEVBREVSUykNCisJY2wgJChDVkFSU0RM
TCkgJChDRkxBR1MpIC1jIG5ldGluZXRcc2N0cF90aW1lci5jDQorDQorc2N0cF91c2Vyc3BhY2Uu
b2JqIDogbmV0aW5ldFxzY3RwX3VzZXJzcGFjZS5jICQodXNyc2N0cF9IRUFERVJTKQ0KKwljbCAk
KENWQVJTRExMKSAkKENGTEFHUykgLWMgbmV0aW5ldFxzY3RwX3VzZXJzcGFjZS5jDQorDQorc2N0
cF91c3JyZXEub2JqIDogbmV0aW5ldFxzY3RwX3VzcnJlcS5jICQodXNyc2N0cF9IRUFERVJTKQ0K
KwljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgbmV0aW5ldFxzY3RwX3VzcnJlcS5jDQorDQor
c2N0cHV0aWwub2JqIDogbmV0aW5ldFxzY3RwdXRpbC5jICQodXNyc2N0cF9IRUFERVJTKQ0KKwlj
bCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgbmV0aW5ldFxzY3RwdXRpbC5jDQorDQorc2N0cDZf
dXNycmVxLm9iaiA6IG5ldGluZXQ2XHNjdHA2X3VzcnJlcS5jICQodXNyc2N0cF9IRUFERVJTKQ0K
KwljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgbmV0aW5ldDZcc2N0cDZfdXNycmVxLmMNCisN
CitjbGVhbjoNCisJZGVsICoub2JqDQorCWRlbCB1c3JzY3RwLmxpYg0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3VzcnNjdHBsaWIvbWVzb24uYnVpbGQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL21lc29u
LmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYzFhNjY1NmYx
ZGE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9tZXNvbi5idWlsZApA
QCAtMCwwICsxLDIwIEBACisjIEluY2x1ZGVzCitpbmNsdWRlX2RpcnMgPSBpbmNsdWRlX2RpcmVj
dG9yaWVzKAorICAgICcuJywKKyAgICAnbmV0aW5ldCcsCisgICAgJ25ldGluZXQ2JywKKykKKwor
IyBTb3VyY2VzCitzb3VyY2VzID0gZmlsZXMoWworICAgICd1c2VyX2Vudmlyb25tZW50LmMnLAor
ICAgICd1c2VyX21idWYuYycsCisgICAgJ3VzZXJfcmVjdl90aHJlYWQuYycsCisgICAgJ3VzZXJf
c29ja2V0LmMnLAorXSkKKworc3ViZGlyKCduZXRpbmV0JykKK3N1YmRpcignbmV0aW5ldDYnKQor
CisjIEluc3RhbGwgdXNyc2N0cC5oCitpbnN0YWxsX2hlYWRlcnMoJ3VzcnNjdHAuaCcpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvbWVzb24uYnVpbGQgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi91c3JzY3RwbGliL25ldGluZXQvbWVzb24uYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi40YTg2NjE1YmNkNGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi91c3JzY3RwbGliL25ldGluZXQvbWVzb24uYnVpbGQKQEAgLTAsMCArMSwyMCBAQAorc291cmNl
cyArPSBmaWxlcyhbCisgICAgJ3NjdHBfYXNjb25mLmMnLAorICAgICdzY3RwX2F1dGguYycsCisg
ICAgJ3NjdHBfYnNkX2FkZHIuYycsCisgICAgJ3NjdHBfY2FsbG91dC5jJywKKyAgICAnc2N0cF9j
Y19mdW5jdGlvbnMuYycsCisgICAgJ3NjdHBfY3JjMzIuYycsCisgICAgJ3NjdHBfaW5kYXRhLmMn
LAorICAgICdzY3RwX2lucHV0LmMnLAorICAgICdzY3RwX291dHB1dC5jJywKKyAgICAnc2N0cF9w
Y2IuYycsCisgICAgJ3NjdHBfcGVlbG9mZi5jJywKKyAgICAnc2N0cF9zaGExLmMnLAorICAgICdz
Y3RwX3NzX2Z1bmN0aW9ucy5jJywKKyAgICAnc2N0cF9zeXNjdGwuYycsCisgICAgJ3NjdHBfdGlt
ZXIuYycsCisgICAgJ3NjdHBfdXNlcnNwYWNlLmMnLAorICAgICdzY3RwX3VzcnJlcS5jJywKKyAg
ICAnc2N0cHV0aWwuYycsCitdKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRp
bmV0L3NjdHAuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwLmgKbmV3IGZpbGUg
bW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwLi5mMGRjMzVhZDU2OWIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cC5oCkBAIC0wLDAgKzEsNjY2
IEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisg
KiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwOCwgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rl
d2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBi
eSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgor
ICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2luY2x1ZGUgPHN5
cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHAuaCAz
NjY3NTAgMjAyMC0xMC0xNiAxMDo0NDo0OFogdHVleGVuICQiKTsKKyNlbmRpZgorCisjaWZuZGVm
IF9ORVRJTkVUX1NDVFBfSF8KKyNkZWZpbmUgX05FVElORVRfU0NUUF9IXworCisjaWYgZGVmaW5l
ZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19saW51eF9fKQorI2luY2x1ZGUgPHN0ZGludC5oPgor
I2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpZiAhZGVmaW5lZChfV0lOMzIpCisj
ZGVmaW5lIFNDVFBfUEFDS0VEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpCisjZWxzZQorI3ByYWdt
YSBwYWNrIChwdXNoLCAxKQorI2RlZmluZSBTQ1RQX1BBQ0tFRAorI2VuZGlmCisKKy8qCisgKiBT
Q1RQIHByb3RvY29sIC0gUkZDNDk2MC4KKyAqLworc3RydWN0IHNjdHBoZHIgeworCXVpbnQxNl90
IHNyY19wb3J0OwkvKiBzb3VyY2UgcG9ydCAqLworCXVpbnQxNl90IGRlc3RfcG9ydDsJLyogZGVz
dGluYXRpb24gcG9ydCAqLworCXVpbnQzMl90IHZfdGFnOwkJLyogdmVyaWZpY2F0aW9uIHRhZyBv
ZiBwYWNrZXQgKi8KKwl1aW50MzJfdCBjaGVja3N1bTsJLyogQ1JDMzJDIGNoZWNrc3VtICovCisJ
LyogY2h1bmtzIGZvbGxvdy4uLiAqLworfSBTQ1RQX1BBQ0tFRDsKKworLyoKKyAqIFNDVFAgQ2h1
bmtzCisgKi8KK3N0cnVjdCBzY3RwX2NodW5raGRyIHsKKwl1aW50OF90IGNodW5rX3R5cGU7CS8q
IGNodW5rIHR5cGUgKi8KKwl1aW50OF90IGNodW5rX2ZsYWdzOwkvKiBjaHVuayBmbGFncyAqLwor
CXVpbnQxNl90IGNodW5rX2xlbmd0aDsJLyogY2h1bmsgbGVuZ3RoICovCisJLyogb3B0aW9uYWwg
cGFyYW1zIGZvbGxvdyAqLworfSBTQ1RQX1BBQ0tFRDsKKworLyoKKyAqIFNDVFAgY2h1bmsgcGFy
YW1ldGVycworICovCitzdHJ1Y3Qgc2N0cF9wYXJhbWhkciB7CisJdWludDE2X3QgcGFyYW1fdHlw
ZTsJLyogcGFyYW1ldGVyIHR5cGUgKi8KKwl1aW50MTZfdCBwYXJhbV9sZW5ndGg7CS8qIHBhcmFt
ZXRlciBsZW5ndGggKi8KK30gU0NUUF9QQUNLRUQ7CisKKy8qCisgKiB1c2VyIHNvY2tldCBvcHRp
b25zOiBzb2NrZXQgQVBJIGRlZmluZWQKKyAqLworLyoKKyAqIHJlYWQtd3JpdGUgb3B0aW9ucwor
ICovCisjZGVmaW5lIFNDVFBfUlRPSU5GTwkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgU0NUUF9BU1NP
Q0lORk8JCQkweDAwMDAwMDAyCisjZGVmaW5lIFNDVFBfSU5JVE1TRwkJCTB4MDAwMDAwMDMKKyNk
ZWZpbmUgU0NUUF9OT0RFTEFZCQkJMHgwMDAwMDAwNAorI2RlZmluZSBTQ1RQX0FVVE9DTE9TRQkJ
CTB4MDAwMDAwMDUKKyNkZWZpbmUgU0NUUF9TRVRfUEVFUl9QUklNQVJZX0FERFIJMHgwMDAwMDAw
NgorI2RlZmluZSBTQ1RQX1BSSU1BUllfQUREUgkJMHgwMDAwMDAwNworI2RlZmluZSBTQ1RQX0FE
QVBUQVRJT05fTEFZRVIJCTB4MDAwMDAwMDgKKy8qIHNhbWUgYXMgYWJvdmUgKi8KKyNkZWZpbmUg
U0NUUF9BREFQVElPTl9MQVlFUgkJMHgwMDAwMDAwOAorI2RlZmluZSBTQ1RQX0RJU0FCTEVfRlJB
R01FTlRTCQkweDAwMDAwMDA5CisjZGVmaW5lIFNDVFBfUEVFUl9BRERSX1BBUkFNUyAJCTB4MDAw
MDAwMGEKKyNkZWZpbmUgU0NUUF9ERUZBVUxUX1NFTkRfUEFSQU0JCTB4MDAwMDAwMGIKKy8qIGFu
Y2lsbGFyeSBkYXRhL25vdGlmaWNhdGlvbiBpbnRlcmVzdCBvcHRpb25zICovCisjZGVmaW5lIFND
VFBfRVZFTlRTCQkJMHgwMDAwMDAwYyAvKiBkZXByZWNhdGVkICovCisvKiBXaXRob3V0IHRoaXMg
YXBwbGllZCB3ZSB3aWxsIGdpdmUgVjQgYW5kIFY2IGFkZHJlc3NlcyBvbiBhIFY2IHNvY2tldCAq
LworI2RlZmluZSBTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQUREUgkweDAwMDAwMDBkCisjZGVmaW5l
IFNDVFBfTUFYU0VHIAkJCTB4MDAwMDAwMGUKKyNkZWZpbmUgU0NUUF9ERUxBWUVEX1NBQ0sgICAg
ICAgICAgICAgICAweDAwMDAwMDBmCisjZGVmaW5lIFNDVFBfRlJBR01FTlRfSU5URVJMRUFWRSAg
ICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBTQ1RQX1BBUlRJQUxfREVMSVZFUllfUE9JTlQgICAg
IDB4MDAwMDAwMTEKKy8qIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnQgKi8KKyNkZWZpbmUgU0NUUF9B
VVRIX0NIVU5LIAkJMHgwMDAwMDAxMgorI2RlZmluZSBTQ1RQX0FVVEhfS0VZIAkJCTB4MDAwMDAw
MTMKKyNkZWZpbmUgU0NUUF9ITUFDX0lERU5UIAkJMHgwMDAwMDAxNAorI2RlZmluZSBTQ1RQX0FV
VEhfQUNUSVZFX0tFWSAJCTB4MDAwMDAwMTUKKyNkZWZpbmUgU0NUUF9BVVRIX0RFTEVURV9LRVkg
CQkweDAwMDAwMDE2CisjZGVmaW5lIFNDVFBfVVNFX0VYVF9SQ1ZJTkZPCQkweDAwMDAwMDE3Cisj
ZGVmaW5lIFNDVFBfQVVUT19BU0NPTkYJCTB4MDAwMDAwMTggLyogcncgKi8KKyNkZWZpbmUgU0NU
UF9NQVhCVVJTVAkJCTB4MDAwMDAwMTkgLyogcncgKi8KKyNkZWZpbmUgU0NUUF9NQVhfQlVSU1QJ
CQkweDAwMDAwMDE5IC8qIHJ3ICovCisvKiBhc3NvYyBsZXZlbCBjb250ZXh0ICovCisjZGVmaW5l
IFNDVFBfQ09OVEVYVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxYSAvKiBydyAqLworLyog
ZXhwbGljaXQgRU9SIHNpZ25hbGxpbmcgKi8KKyNkZWZpbmUgU0NUUF9FWFBMSUNJVF9FT1IgICAg
ICAgICAgICAgICAweDAwMDAwMDFiCisjZGVmaW5lIFNDVFBfUkVVU0VfUE9SVCAgICAgICAgICAg
ICAgICAgMHgwMDAwMDAxYyAvKiBydyAqLworI2RlZmluZSBTQ1RQX0FVVEhfREVBQ1RJVkFURV9L
RVkJMHgwMDAwMDAxZAorI2RlZmluZSBTQ1RQX0VWRU5UICAgICAgICAgICAgICAgICAgICAgIDB4
MDAwMDAwMWUKKyNkZWZpbmUgU0NUUF9SRUNWUkNWSU5GTyAgICAgICAgICAgICAgICAweDAwMDAw
MDFmCisjZGVmaW5lIFNDVFBfUkVDVk5YVElORk8gICAgICAgICAgICAgICAgMHgwMDAwMDAyMAor
I2RlZmluZSBTQ1RQX0RFRkFVTFRfU05ESU5GTyAgICAgICAgICAgIDB4MDAwMDAwMjEKKyNkZWZp
bmUgU0NUUF9ERUZBVUxUX1BSSU5GTyAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIFND
VFBfUEVFUl9BRERSX1RITERTICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBTQ1RQX1JF
TU9URV9VRFBfRU5DQVBTX1BPUlQgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgU0NUUF9FQ05fU1VQ
UE9SVEVEICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIFNDVFBfUFJfU1VQUE9SVEVE
ICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBTQ1RQX0FVVEhfU1VQUE9SVEVEICAg
ICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgU0NUUF9BU0NPTkZfU1VQUE9SVEVEICAgICAg
ICAgICAweDAwMDAwMDI4CisjZGVmaW5lIFNDVFBfUkVDT05GSUdfU1VQUE9SVEVEICAgICAgICAg
MHgwMDAwMDAyOQorI2RlZmluZSBTQ1RQX05SU0FDS19TVVBQT1JURUQgICAgICAgICAgIDB4MDAw
MDAwMzAKKyNkZWZpbmUgU0NUUF9QS1REUk9QX1NVUFBPUlRFRCAgICAgICAgICAweDAwMDAwMDMx
CisjZGVmaW5lIFNDVFBfTUFYX0NXTkQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMgorCisv
KgorICogcmVhZC1vbmx5IG9wdGlvbnMKKyAqLworI2RlZmluZSBTQ1RQX1NUQVRVUwkJCTB4MDAw
MDAxMDAKKyNkZWZpbmUgU0NUUF9HRVRfUEVFUl9BRERSX0lORk8JCTB4MDAwMDAxMDEKKy8qIGF1
dGhlbnRpY2F0aW9uIHN1cHBvcnQgKi8KKyNkZWZpbmUgU0NUUF9QRUVSX0FVVEhfQ0hVTktTIAkJ
MHgwMDAwMDEwMgorI2RlZmluZSBTQ1RQX0xPQ0FMX0FVVEhfQ0hVTktTIAkJMHgwMDAwMDEwMwor
I2RlZmluZSBTQ1RQX0dFVF9BU1NPQ19OVU1CRVIgICAgICAgICAgIDB4MDAwMDAxMDQgLyogcm8g
Ki8KKyNkZWZpbmUgU0NUUF9HRVRfQVNTT0NfSURfTElTVCAgICAgICAgICAweDAwMDAwMTA1IC8q
IHJvICovCisjZGVmaW5lIFNDVFBfVElNRU9VVFMgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEw
NgorI2RlZmluZSBTQ1RQX1BSX1NUUkVBTV9TVEFUVVMgICAgICAgICAgIDB4MDAwMDAxMDcKKyNk
ZWZpbmUgU0NUUF9QUl9BU1NPQ19TVEFUVVMgICAgICAgICAgICAweDAwMDAwMTA4CisKKy8qCisg
KiB1c2VyIHNvY2tldCBvcHRpb25zOiBCU0QgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMKKyAqLwor
LyoKKyAqIEJsb2NraW5nIEkvTyBpcyBlbmFibGVkIG9uIGFueSBUQ1AgdHlwZSBzb2NrZXQgYnkg
ZGVmYXVsdC4gRm9yIHRoZSBVRFAKKyAqIG1vZGVsIGlmIHRoaXMgaXMgdHVybmVkIG9uIHRoZW4g
dGhlIHNvY2tldCBidWZmZXIgaXMgc2hhcmVkIGZvciBzZW5kCisgKiByZXNvdXJjZXMgYW1vbmdz
dCBhbGwgYXNzb2NpYXRpb25zLiAgVGhlIGRlZmF1bHQgZm9yIHRoZSBVRFAgbW9kZWwgaXMgdGhh
dAorICogaXMgU1NfTkJJTyBpcyBzZXQuICBXaGljaCBtZWFucyBhbGwgYXNzb2NpYXRpb25zIGhh
dmUgYSBzZXBhcmF0ZSBzZW5kCisgKiBsaW1pdCBCVVQgdGhleSB3aWxsIE5PVCBldmVyIEJMT0NL
IGluc3RlYWQgeW91IHdpbGwgZ2V0IGFuIGVycm9yIGJhY2sKKyAqIEVBR0FJTiBpZiB5b3UgdHJ5
IHRvIHNlbmQgdG9vIG11Y2guIElmIHlvdSB3YW50IHRoZSBibG9ja2luZyBzZW1hbnRpY3MgeW91
CisgKiBzZXQgdGhpcyBvcHRpb24gYXQgdGhlIGNvc3Qgb2Ygc2hhcmluZyBvbmUgc29ja2V0IHNl
bmQgYnVmZmVyIHNpemUgYW1vbmdzdAorICogYWxsIGFzc29jaWF0aW9ucy4gUGVlbGVkIG9mZiBz
b2NrZXRzIHR1cm4gdGhpcyBvcHRpb24gb2ZmIGFuZCBibG9jay4gQnV0CisgKiBzaW5jZSBib3Ro
IFRDUCBhbmQgcGVlbGVkIG9mZiBzb2NrZXRzIGhhdmUgb25seSBvbmUgYXNzb2MgcGVyIHNvY2tl
dCB0aGlzCisgKiBpcyBmaW5lLiBJdCBwcm9iYWJseSBkb2VzIE5PVCBtYWtlIHNlbnNlIHRvIHNl
dCB0aGlzIG9uIFNTX05CSU8gb24gYSBUQ1AKKyAqIG1vZGVsIE9SIHBlZWxlZCBvZmYgVURQIG1v
ZGVsLCBidXQgd2UgZG8gYWxsb3cgeW91IHRvIGRvIHNvLiBZb3UganVzdCB1c2UKKyAqIHRoZSBu
b3JtYWwgc3lzY2FsbCB0byB0b2dnbGUgU1NfTkJJTyB0aGUgd2F5IHlvdSB3YW50LgorICoKKyAq
IEJsb2NraW5nIEkvTyBpcyBjb250cm9sbGVkIGJ5IHRoZSBTU19OQklPIGZsYWcgb24gdGhlIHNv
Y2tldCBzdGF0ZSBzb19zdGF0ZQorICogZmllbGQuCisgKi8KKworI2RlZmluZSBTQ1RQX0VOQUJM
RV9TVFJFQU1fUkVTRVQJMHgwMDAwMDkwMCAvKiBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqLwor
I2RlZmluZSBTQ1RQX1JFU0VUX1NUUkVBTVMJCTB4MDAwMDA5MDEgLyogc3RydWN0IHNjdHBfcmVz
ZXRfc3RyZWFtcyAqLworI2RlZmluZSBTQ1RQX1JFU0VUX0FTU09DCQkweDAwMDAwOTAyIC8qIHNj
dHBfYXNzb2NfdCAqLworI2RlZmluZSBTQ1RQX0FERF9TVFJFQU1TCQkweDAwMDAwOTAzIC8qIHN0
cnVjdCBzY3RwX2FkZF9zdHJlYW1zICovCisKKy8qIEZvciBlbmFibGUgc3RyZWFtIHJlc2V0ICov
CisjZGVmaW5lIFNDVFBfRU5BQkxFX1JFU0VUX1NUUkVBTV9SRVEgCTB4MDAwMDAwMDEKKyNkZWZp
bmUgU0NUUF9FTkFCTEVfUkVTRVRfQVNTT0NfUkVRIAkweDAwMDAwMDAyCisjZGVmaW5lIFNDVFBf
RU5BQkxFX0NIQU5HRV9BU1NPQ19SRVEgCTB4MDAwMDAwMDQKKyNkZWZpbmUgU0NUUF9FTkFCTEVf
VkFMVUVfTUFTSwkJMHgwMDAwMDAwNworLyogRm9yIHJlc2V0IHN0cmVhbXMgKi8KKyNkZWZpbmUg
U0NUUF9TVFJFQU1fUkVTRVRfSU5DT01JTkcJMHgwMDAwMDAwMQorI2RlZmluZSBTQ1RQX1NUUkVB
TV9SRVNFVF9PVVRHT0lORwkweDAwMDAwMDAyCisKKy8qIGhlcmUgb24gZG93biBhcmUgbW9yZSBp
bXBsZW1lbnRhdGlvbiBzcGVjaWZpYyAqLworI2RlZmluZSBTQ1RQX1NFVF9ERUJVR19MRVZFTAkJ
MHgwMDAwMTAwNQorI2RlZmluZSBTQ1RQX0NMUl9TVEFUX0xPRyAgICAgICAgICAgICAgIDB4MDAw
MDEwMDcKKy8qIENNVCBPTi9PRkYgc29ja2V0IG9wdGlvbiAqLworI2RlZmluZSBTQ1RQX0NNVF9P
Tl9PRkYgICAgICAgICAgICAgICAgIDB4MDAwMDEyMDAKKyNkZWZpbmUgU0NUUF9DTVRfVVNFX0RB
QyAgICAgICAgICAgICAgICAweDAwMDAxMjAxCisvKiBKUlMgLSBQbHVnZ2FibGUgQ29uZ2VzdGlv
biBDb250cm9sIFNvY2tldCBvcHRpb24gKi8KKyNkZWZpbmUgU0NUUF9QTFVHR0FCTEVfQ0MgICAg
ICAgICAgICAgICAweDAwMDAxMjAyCisvKiBSUyAtIFBsdWdnYWJsZSBTdHJlYW0gU2NoZWR1bGlu
ZyBTb2NrZXQgb3B0aW9uICovCisjZGVmaW5lIFNDVFBfUExVR0dBQkxFX1NTCQkweDAwMDAxMjAz
CisjZGVmaW5lIFNDVFBfU1NfVkFMVUUJCQkweDAwMDAxMjA0CisjZGVmaW5lIFNDVFBfQ0NfT1BU
SU9OCQkJMHgwMDAwMTIwNSAvKiBPcHRpb25zIGZvciBDQyBtb2R1bGVzICovCisvKiBGb3IgSS1E
QVRBICovCisjZGVmaW5lIFNDVFBfSU5URVJMRUFWSU5HX1NVUFBPUlRFRAkweDAwMDAxMjA2CisK
Ky8qIHJlYWQgb25seSAqLworI2RlZmluZSBTQ1RQX0dFVF9TTkRCVUZfVVNFCQkweDAwMDAxMTAx
CisjZGVmaW5lIFNDVFBfR0VUX1NUQVRfTE9HCQkweDAwMDAxMTAzCisjZGVmaW5lIFNDVFBfUENC
X1NUQVRVUwkJCTB4MDAwMDExMDQKKyNkZWZpbmUgU0NUUF9HRVRfTk9OQ0VfVkFMVUVTICAgICAg
ICAgICAweDAwMDAxMTA1CisKKy8qIFNwZWNpYWwgaG9vayBmb3IgZHluYW1pY2FsbHkgc2V0dGlu
ZyBwcmltYXJ5IGZvciBhbGwgYXNzb2MncywKKyAqIHRoaXMgaXMgYSB3cml0ZSBvbmx5IG9wdGlv
biB0aGF0IHJlcXVpcmVzIHJvb3QgcHJpdmlsZWdlLgorICovCisjZGVmaW5lIFNDVFBfU0VUX0RZ
TkFNSUNfUFJJTUFSWSAgICAgICAgMHgwMDAwMjAwMQorCisvKiBWUkYgKHZpcnR1YWwgcm91dGVy
IGZlYXR1cmUpIGFuZCBtdWx0aS1WUkYgc3VwcG9ydAorICogb3B0aW9ucy4gVlJGJ3MgcHJvdmlk
ZSBzcGxpdHMgd2l0aGluIGEgcm91dGVyCisgKiB0aGF0IGdpdmUgdGhlIHZpZXdzIG9mIG11bHRp
cGxlIHJvdXRlcnMuIEEKKyAqIHN0YW5kYXJkIGhvc3QsIHdpdGhvdXQgVlJGIHN1cHBvcnQsIGlz
IGp1c3QKKyAqIGEgc2luZ2xlIFZSRi4gSWYgVlJGJ3MgYXJlIHN1cHBvcnRlZCB0aGVuCisgKiB0
aGUgdHJhbnNwb3J0IG11c3QgYmUgVlJGIGF3YXJlLiBUaGlzIG1lYW5zCisgKiB0aGF0IGV2ZXJ5
IHNvY2tldCBjYWxsIGNvbWluZyBpbiBtdXN0IGJlIGRpcmVjdGVkCisgKiB3aXRoaW4gdGhlIGVu
ZHBvaW50IHRvIG9uZSBvZiB0aGUgVlJGJ3MgaXQgYmVsb25ncworICogdG8uIFRoZSBlbmRwb2lu
dCwgYmVmb3JlIGJpbmRpbmcsIG1heSBzZWxlY3QKKyAqIHRoZSAiZGVmYXVsdCIgVlJGIGl0IGlz
IGluIGJ5IHVzaW5nIGEgc2V0IHNvY2tldAorICogb3B0aW9uIHdpdGggU0NUUF9WUkZfSUQuIFRo
aXMgd2lsbCBhbHNvCisgKiBnZXQgcHJvcGFnYXRlZCB0byB0aGUgZGVmYXVsdCBWUkYuIE9uY2Ug
dGhlCisgKiBlbmRwb2ludCBiaW5kcyBhbiBhZGRyZXNzIHRoZW4gaXQgQ0FOTk9UIGFkZAorICog
YWRkaXRpb25hbCBWUkYncyB0byBiZWNvbWUgYSBNdWx0aS1WUkYgZW5kcG9pbnQuCisgKgorICog
QmVmb3JlIEJJTkRJTkcgYWRkaXRpb25hbCBWUkYncyBjYW4gYmUgYWRkZWQgd2l0aAorICogdGhl
IFNDVFBfQUREX1ZSRl9JRCBjYWxsIG9yIGRlbGV0ZWQgd2l0aAorICogU0NUUF9ERUxfVlJGX0lE
LgorICoKKyAqIEFzc29jaWF0aW9ucyBhcmUgQUxXQVlTIGNvbnRhaW5lZCBpbnNpZGUgYSBzaW5n
bGUKKyAqIFZSRi4gVGhleSBjYW5ub3QgcmVzaWRlIGluIHR3byAob3IgbW9yZSkgVlJGJ3MuIElu
Y29taW5nCisgKiBwYWNrZXRzLCBhc3N1bWluZyB0aGUgcm91dGVyIGlzIFZSRiBhd2FyZSwgY2Fu
IGFsd2F5cworICogdGVsbCB1cyB3aGF0IFZSRiB0aGV5IGFycml2ZWQgb24uIEEgaG9zdCBub3Qg
c3VwcG9ydGluZworICogYW55IFZSRidzIHdpbGwgZmluZCB0aGF0IHRoZSBwYWNrZXRzIGFsd2F5
cyBhcnJpdmVkIG9uIHRoZQorICogc2luZ2xlIFZSRiB0aGF0IHRoZSBob3N0IGhhcy4KKyAqCisg
Ki8KKworI2RlZmluZSBTQ1RQX1ZSRl9JRAkJCTB4MDAwMDMwMDEKKyNkZWZpbmUgU0NUUF9BRERf
VlJGX0lECQkJMHgwMDAwMzAwMgorI2RlZmluZSBTQ1RQX0dFVF9WUkZfSURTCQkweDAwMDAzMDAz
CisjZGVmaW5lIFNDVFBfR0VUX0FTT0NfVlJGICAgICAgICAgICAgICAgMHgwMDAwMzAwNAorI2Rl
ZmluZSBTQ1RQX0RFTF9WUkZfSUQgICAgICAgICAgICAgICAgIDB4MDAwMDMwMDUKKworLyoKKyAq
IElmIHlvdSBlbmFibGUgcGFja2V0IGxvZ2dpbmcgeW91IGNhbiBnZXQKKyAqIGEgcG9vciBtYW5z
IGV0aGVyZWFsIG91dHB1dCBpbiBiaW5hcnkKKyAqIGZvcm0uIE5vdGUgdGhpcyBpcyBhIGNvbXBp
bGUgb3B0aW9uIHRvCisgKiB0aGUga2VybmVsLCAgU0NUUF9QQUNLRVRfTE9HR0lORywgYW5kCisg
KiB3aXRob3V0IGl0IGluIHlvdXIga2VybmVsIHlvdQorICogd2lsbCBnZXQgYSBFT1BOT1RTVVBQ
CisgKi8KKyNkZWZpbmUgU0NUUF9HRVRfUEFDS0VUX0xPRyAgICAgICAgICAgICAweDAwMDA0MDAx
CisKKy8qCisgKiBoaWRkZW4gaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgb3B0aW9ucyB0aGVzZSBh
cmUgTk9UIHVzZXIgdmlzaWJsZSAoc2hvdWxkCisgKiBtb3ZlIG91dCBvZiBzY3RwLmgpCisgKi8K
Ky8qIHNjdHBfYmluZHgoKSBmbGFncyBhcyBoaWRkZW4gc29ja2V0IG9wdGlvbnMgKi8KKyNkZWZp
bmUgU0NUUF9CSU5EWF9BRERfQUREUgkJMHgwMDAwODAwMQorI2RlZmluZSBTQ1RQX0JJTkRYX1JF
TV9BRERSCQkweDAwMDA4MDAyCisvKiBIaWRkZW4gc29ja2V0IG9wdGlvbiB0aGF0IGdldHMgdGhl
IGFkZHJlc3NlcyAqLworI2RlZmluZSBTQ1RQX0dFVF9QRUVSX0FERFJFU1NFUwkJMHgwMDAwODAw
MworI2RlZmluZSBTQ1RQX0dFVF9MT0NBTF9BRERSRVNTRVMJMHgwMDAwODAwNAorLyogcmV0dXJu
IHRoZSB0b3RhbCBjb3VudCBpbiBieXRlcyBuZWVkZWQgdG8gaG9sZCBhbGwgbG9jYWwgYWRkcmVz
c2VzIGJvdW5kICovCisjZGVmaW5lIFNDVFBfR0VUX0xPQ0FMX0FERFJfU0laRQkweDAwMDA4MDA1
CisvKiBSZXR1cm4gdGhlIHRvdGFsIGNvdW50IGluIGJ5dGVzIG5lZWRlZCB0byBob2xkIHRoZSBy
ZW1vdGUgYWRkcmVzcyAqLworI2RlZmluZSBTQ1RQX0dFVF9SRU1PVEVfQUREUl9TSVpFCTB4MDAw
MDgwMDYKKy8qIGhpZGRlbiBvcHRpb24gZm9yIGNvbm5lY3R4ICovCisjZGVmaW5lIFNDVFBfQ09O
TkVDVF9YCQkJMHgwMDAwODAwNworLyogaGlkZGVuIG9wdGlvbiBmb3IgY29ubmVjdHhfZGVsYXll
ZCwgcGFydCBvZiBzZW5keCAqLworI2RlZmluZSBTQ1RQX0NPTk5FQ1RfWF9ERUxBWUVECQkweDAw
MDA4MDA4CisjZGVmaW5lIFNDVFBfQ09OTkVDVF9YX0NPTVBMRVRFICAgICAgICAgMHgwMDAwODAw
OQorLyogaGlkZGVuIHNvY2tldCBvcHRpb24gYmFzZWQgc2N0cF9wZWVsb2ZmICovCisjZGVmaW5l
IFNDVFBfUEVFTE9GRiAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwYQorLyogdGhlIHJlYWwg
d29ya2VyIGZvciBzY3RwX2dldGFkZHJsZW4oKSAqLworI2RlZmluZSBTQ1RQX0dFVF9BRERSX0xF
TiAgICAgICAgICAgICAgIDB4MDAwMDgwMGIKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKKy8qIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBBcHBsZSBs
aXN0ZW4oKSBpc3N1ZSwgbm8gYXJncyB1c2VkICovCisjZGVmaW5lIFNDVFBfTElTVEVOX0ZJWAkJ
CTB4MDAwMDgwMGMKKyNlbmRpZgorI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorLyogd29ya2Fyb3VuZCBmb3IgQ3lnd2luIG9uIFdpbmRvd3M6IHJldHVybnMg
dGhlIFNPQ0tFVCBoYW5kbGUgKi8KKyNkZWZpbmUgU0NUUF9HRVRfSEFORExFCQkJMHgwMDAwODAw
ZAorI2VuZGlmCisvKiBEZWJ1ZyB0aGluZ3MgdGhhdCBuZWVkIHRvIGJlIHB1cmdlZCAqLworI2Rl
ZmluZSBTQ1RQX1NFVF9JTklUSUFMX0RCR19TRVEJMHgwMDAwOWYwMAorCisvKiBKUlMgLSBTdXBw
b3J0ZWQgY29uZ2VzdGlvbiBjb250cm9sIG1vZHVsZXMgZm9yIHBsdWdnYWJsZQorICogY29uZ2Vz
dGlvbiBjb250cm9sCisgKi8KKy8qIFN0YW5kYXJkIFRDUCBDb25nZXN0aW9uIENvbnRyb2wgKi8K
KyNkZWZpbmUgU0NUUF9DQ19SRkMyNTgxCQkweDAwMDAwMDAwCisvKiBIaWdoIFNwZWVkIFRDUCBD
b25nZXN0aW9uIENvbnRyb2wgKEZsb3lkKSAqLworI2RlZmluZSBTQ1RQX0NDX0hTVENQCQkweDAw
MDAwMDAxCisvKiBIVENQIENvbmdlc3Rpb24gQ29udHJvbCAqLworI2RlZmluZSBTQ1RQX0NDX0hU
Q1AJCTB4MDAwMDAwMDIKKy8qIFJUQ0MgQ29uZ2VzdGlvbiBDb250cm9sIC0gUkZDMjU4MSBwbHVz
ICovCisjZGVmaW5lIFNDVFBfQ0NfUlRDQyAgICAgICAgICAgIDB4MDAwMDAwMDMKKworI2RlZmlu
ZSBTQ1RQX0NDX09QVF9SVENDX1NFVE1PREUJMHgwMDAwMjAwMAorI2RlZmluZSBTQ1RQX0NDX09Q
VF9VU0VfRENDQ19FQ04JMHgwMDAwMjAwMQorI2RlZmluZSBTQ1RQX0NDX09QVF9TVEVBRFlfU1RF
UCAgICAgICAgIDB4MDAwMDIwMDIKKworI2RlZmluZSBTQ1RQX0NNVF9PRkYgICAgICAgICAgICAw
CisjZGVmaW5lIFNDVFBfQ01UX0JBU0UgICAgICAgICAgIDEKKyNkZWZpbmUgU0NUUF9DTVRfUlBW
MSAgICAgICAgICAgMgorI2RlZmluZSBTQ1RQX0NNVF9SUFYyICAgICAgICAgICAzCisjZGVmaW5l
IFNDVFBfQ01UX01QVENQICAgICAgICAgIDQKKyNkZWZpbmUgU0NUUF9DTVRfTUFYICAgICAgICAg
ICAgU0NUUF9DTVRfTVBUQ1AKKworLyogUlMgLSBTdXBwb3J0ZWQgc3RyZWFtIHNjaGVkdWxpbmcg
bW9kdWxlcyBmb3IgcGx1Z2dhYmxlCisgKiBzdHJlYW0gc2NoZWR1bGluZworICovCisvKiBEZWZh
dWx0IHNpbXBsZSByb3VuZC1yb2JpbiAqLworI2RlZmluZSBTQ1RQX1NTX0RFRkFVTFQJCQkweDAw
MDAwMDAwCisvKiBSZWFsIHJvdW5kLXJvYmluICovCisjZGVmaW5lIFNDVFBfU1NfUk9VTkRfUk9C
SU4JCTB4MDAwMDAwMDEKKy8qIFJlYWwgcm91bmQtcm9iaW4gcGVyIHBhY2tldCAqLworI2RlZmlu
ZSBTQ1RQX1NTX1JPVU5EX1JPQklOX1BBQ0tFVAkweDAwMDAwMDAyCisvKiBQcmlvcml0eSAqLwor
I2RlZmluZSBTQ1RQX1NTX1BSSU9SSVRZCQkweDAwMDAwMDAzCisvKiBGYWlyIEJhbmR3aWR0aCAq
LworI2RlZmluZSBTQ1RQX1NTX0ZBSVJfQkFORFdJVEgJCTB4MDAwMDAwMDQKKy8qIEZpcnN0LWNv
bWUsIGZpcnN0LXNlcnZlICovCisjZGVmaW5lIFNDVFBfU1NfRklSU1RfQ09NRQkJMHgwMDAwMDAw
NQorCisvKiBmcmFnbWVudCBpbnRlcmxlYXZlIGNvbnN0YW50cworICogc2V0dGluZyBtdXN0IGJl
IG9uZSBvZiB0aGVzZSBvcgorICogRUlOVkFMIHJldHVybmVkLgorICovCisjZGVmaW5lIFNDVFBf
RlJBR19MRVZFTF8wICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgU0NUUF9GUkFHX0xFVkVMXzEgICAg
MHgwMDAwMDAwMQorI2RlZmluZSBTQ1RQX0ZSQUdfTEVWRUxfMiAgICAweDAwMDAwMDAyCisKKy8q
CisgKiB1c2VyIHN0YXRlIHZhbHVlcworICovCisjZGVmaW5lIFNDVFBfQ0xPU0VECQkJMHgwMDAw
CisjZGVmaW5lIFNDVFBfQk9VTkQJCQkweDEwMDAKKyNkZWZpbmUgU0NUUF9MSVNURU4JCQkweDIw
MDAKKyNkZWZpbmUgU0NUUF9DT09LSUVfV0FJVAkJMHgwMDAyCisjZGVmaW5lIFNDVFBfQ09PS0lF
X0VDSE9FRAkJMHgwMDA0CisjZGVmaW5lIFNDVFBfRVNUQUJMSVNIRUQJCTB4MDAwOAorI2RlZmlu
ZSBTQ1RQX1NIVVRET1dOX1NFTlQJCTB4MDAxMAorI2RlZmluZSBTQ1RQX1NIVVRET1dOX1JFQ0VJ
VkVECQkweDAwMjAKKyNkZWZpbmUgU0NUUF9TSFVURE9XTl9BQ0tfU0VOVAkJMHgwMDQwCisjZGVm
aW5lIFNDVFBfU0hVVERPV05fUEVORElORwkJMHgwMDgwCisKKy8qCisgKiBTQ1RQIG9wZXJhdGlv
bmFsIGVycm9yIGNvZGVzICh1c2VyIHZpc2libGUpCisgKi8KKyNkZWZpbmUgU0NUUF9DQVVTRV9O
T19FUlJPUgkJMHgwMDAwCisjZGVmaW5lIFNDVFBfQ0FVU0VfSU5WQUxJRF9TVFJFQU0JMHgwMDAx
CisjZGVmaW5lIFNDVFBfQ0FVU0VfTUlTU0lOR19QQVJBTQkweDAwMDIKKyNkZWZpbmUgU0NUUF9D
QVVTRV9TVEFMRV9DT09LSUUJCTB4MDAwMworI2RlZmluZSBTQ1RQX0NBVVNFX09VVF9PRl9SRVND
CQkweDAwMDQKKyNkZWZpbmUgU0NUUF9DQVVTRV9VTlJFU09MVkFCTEVfQUREUgkweDAwMDUKKyNk
ZWZpbmUgU0NUUF9DQVVTRV9VTlJFQ09HX0NIVU5LCTB4MDAwNgorI2RlZmluZSBTQ1RQX0NBVVNF
X0lOVkFMSURfUEFSQU0JMHgwMDA3CisjZGVmaW5lIFNDVFBfQ0FVU0VfVU5SRUNPR19QQVJBTQkw
eDAwMDgKKyNkZWZpbmUgU0NUUF9DQVVTRV9OT19VU0VSX0RBVEEJCTB4MDAwOQorI2RlZmluZSBT
Q1RQX0NBVVNFX0NPT0tJRV9JTl9TSFVURE9XTgkweDAwMGEKKyNkZWZpbmUgU0NUUF9DQVVTRV9S
RVNUQVJUX1dfTkVXQUREUgkweDAwMGIKKyNkZWZpbmUgU0NUUF9DQVVTRV9VU0VSX0lOSVRJQVRF
RF9BQlQJMHgwMDBjCisjZGVmaW5lIFNDVFBfQ0FVU0VfUFJPVE9DT0xfVklPTEFUSU9OCTB4MDAw
ZAorCisvKiBFcnJvciBjYXVzZXMgZnJvbSBSRkM1MDYxICovCisjZGVmaW5lIFNDVFBfQ0FVU0Vf
REVMRVRJTkdfTEFTVF9BRERSCTB4MDBhMAorI2RlZmluZSBTQ1RQX0NBVVNFX1JFU09VUkNFX1NI
T1JUQUdFCTB4MDBhMQorI2RlZmluZSBTQ1RQX0NBVVNFX0RFTEVUSU5HX1NSQ19BRERSCTB4MDBh
MgorI2RlZmluZSBTQ1RQX0NBVVNFX0lMTEVHQUxfQVNDT05GX0FDSwkweDAwYTMKKyNkZWZpbmUg
U0NUUF9DQVVTRV9SRVFVRVNUX1JFRlVTRUQJMHgwMGE0CisKKy8qIEVycm9yIGNhdXNlcyBmcm9t
IG5hdC1kcmFmdCAqLworI2RlZmluZSBTQ1RQX0NBVVNFX05BVF9DT0xMSURJTkdfU1RBVEUgIDB4
MDBiMAorI2RlZmluZSBTQ1RQX0NBVVNFX05BVF9NSVNTSU5HX1NUQVRFICAgIDB4MDBiMQorCisv
KiBFcnJvciBjYXVzZXMgZnJvbSBSRkM0ODk1ICovCisjZGVmaW5lIFNDVFBfQ0FVU0VfVU5TVVBQ
T1JURURfSE1BQ0lECTB4MDEwNQorCisvKgorICogZXJyb3IgY2F1c2UgcGFyYW1ldGVycyAodXNl
ciB2aXNpYmxlKQorICovCitzdHJ1Y3Qgc2N0cF9nZW5fZXJyb3JfY2F1c2UgeworCXVpbnQxNl90
IGNvZGU7CisJdWludDE2X3QgbGVuZ3RoOworCXVpbnQ4X3QgaW5mb1tdOworfSBTQ1RQX1BBQ0tF
RDsKKworc3RydWN0IHNjdHBfZXJyb3JfY2F1c2UgeworCXVpbnQxNl90IGNvZGU7CisJdWludDE2
X3QgbGVuZ3RoOworCS8qIG9wdGlvbmFsIGNhdXNlLXNwZWNpZmljIGluZm8gbWF5IGZvbGxvdyAq
LworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHNjdHBfZXJyb3JfaW52YWxpZF9zdHJlYW0gewor
CXN0cnVjdCBzY3RwX2Vycm9yX2NhdXNlIGNhdXNlOwkvKiBjb2RlPVNDVFBfQ0FVU0VfSU5WQUxJ
RF9TVFJFQU0gKi8KKwl1aW50MTZfdCBzdHJlYW1faWQ7CS8qIHN0cmVhbSBpZCBvZiB0aGUgREFU
QSBpbiBlcnJvciAqLworCXVpbnQxNl90IHJlc2VydmVkOworfSBTQ1RQX1BBQ0tFRDsKKworc3Ry
dWN0IHNjdHBfZXJyb3JfbWlzc2luZ19wYXJhbSB7CisJc3RydWN0IHNjdHBfZXJyb3JfY2F1c2Ug
Y2F1c2U7CS8qIGNvZGU9U0NUUF9DQVVTRV9NSVNTSU5HX1BBUkFNICovCisJdWludDMyX3QgbnVt
X21pc3NpbmdfcGFyYW1zOwkvKiBudW1iZXIgb2YgbWlzc2luZyBwYXJhbWV0ZXJzICovCisJdWlu
dDE2X3QgdHlwZVtdOworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHNjdHBfZXJyb3Jfc3RhbGVf
Y29va2llIHsKKwlzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSBjYXVzZTsJLyogY29kZT1TQ1RQX0NB
VVNFX1NUQUxFX0NPT0tJRSAqLworCXVpbnQzMl90IHN0YWxlX3RpbWU7CS8qIHRpbWUgaW4gdXNl
YyBvZiBzdGFsZW5lc3MgKi8KK30gU0NUUF9QQUNLRUQ7CisKK3N0cnVjdCBzY3RwX2Vycm9yX291
dF9vZl9yZXNvdXJjZSB7CisJc3RydWN0IHNjdHBfZXJyb3JfY2F1c2UgY2F1c2U7CS8qIGNvZGU9
U0NUUF9DQVVTRV9PVVRfT0ZfUkVTT1VSQ0VTICovCit9IFNDVFBfUEFDS0VEOworCitzdHJ1Y3Qg
c2N0cF9lcnJvcl91bnJlc29sdl9hZGRyIHsKKwlzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSBjYXVz
ZTsJLyogY29kZT1TQ1RQX0NBVVNFX1VOUkVTT0xWQUJMRV9BRERSICovCit9IFNDVFBfUEFDS0VE
OworCitzdHJ1Y3Qgc2N0cF9lcnJvcl91bnJlY29nbml6ZWRfY2h1bmsgeworCXN0cnVjdCBzY3Rw
X2Vycm9yX2NhdXNlIGNhdXNlOwkvKiBjb2RlPVNDVFBfQ0FVU0VfVU5SRUNPR19DSFVOSyAqLwor
CXN0cnVjdCBzY3RwX2NodW5raGRyIGNoOy8qIGhlYWRlciBmcm9tIGNodW5rIGluIGVycm9yICov
Cit9IFNDVFBfUEFDS0VEOworCitzdHJ1Y3Qgc2N0cF9lcnJvcl9ub191c2VyX2RhdGEgeworCXN0
cnVjdCBzY3RwX2Vycm9yX2NhdXNlIGNhdXNlOwkvKiBjb2RlPVNDVFBfQ0FVU0VfTk9fVVNFUl9E
QVRBICovCisJdWludDMyX3QgdHNuOwkJCS8qIFRTTiBvZiB0aGUgZW1wdHkgZGF0YSBjaHVuayAq
LworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHNjdHBfZXJyb3JfYXV0aF9pbnZhbGlkX2htYWMg
eworCXN0cnVjdCBzY3RwX2Vycm9yX2NhdXNlIGNhdXNlOwkvKiBjb2RlPVNDVFBfQ0FVU0VfVU5T
VVBQT1JURURfSE1BQ0lEICovCisJdWludDE2X3QgaG1hY19pZDsKK30gU0NUUF9QQUNLRUQ7CisK
Ky8qCisgKiBNYWluIFNDVFAgY2h1bmsgdHlwZXMgd2UgcGxhY2UgdGhlc2UgaGVyZSBzbyBuYXRk
IGFuZCBmL3cncyBpbiB1c2VyIGxhbmQKKyAqIGNhbiBmaW5kIHRoZW0uCisgKi8KKy8qKioqKioq
KioqKioweDAwIHNlcmllcyAqKioqKioqKioqKi8KKyNkZWZpbmUgU0NUUF9EQVRBCQkweDAwCisj
ZGVmaW5lIFNDVFBfSU5JVElBVElPTgkJMHgwMQorI2RlZmluZSBTQ1RQX0lOSVRJQVRJT05fQUNL
CTB4MDIKKyNkZWZpbmUgU0NUUF9TRUxFQ1RJVkVfQUNLCTB4MDMKKyNkZWZpbmUgU0NUUF9IRUFS
VEJFQVRfUkVRVUVTVAkweDA0CisjZGVmaW5lIFNDVFBfSEVBUlRCRUFUX0FDSwkweDA1CisjZGVm
aW5lIFNDVFBfQUJPUlRfQVNTT0NJQVRJT04JMHgwNgorI2RlZmluZSBTQ1RQX1NIVVRET1dOCQkw
eDA3CisjZGVmaW5lIFNDVFBfU0hVVERPV05fQUNLCTB4MDgKKyNkZWZpbmUgU0NUUF9PUEVSQVRJ
T05fRVJST1IJMHgwOQorI2RlZmluZSBTQ1RQX0NPT0tJRV9FQ0hPCTB4MGEKKyNkZWZpbmUgU0NU
UF9DT09LSUVfQUNLCQkweDBiCisjZGVmaW5lIFNDVFBfRUNOX0VDSE8JCTB4MGMKKyNkZWZpbmUg
U0NUUF9FQ05fQ1dSCQkweDBkCisjZGVmaW5lIFNDVFBfU0hVVERPV05fQ09NUExFVEUJMHgwZQor
LyogUkZDNDg5NSAqLworI2RlZmluZSBTQ1RQX0FVVEhFTlRJQ0FUSU9OICAgICAweDBmCisvKiBF
WSBucl9zYWNrIGNodW5rIGlkKi8KKyNkZWZpbmUgU0NUUF9OUl9TRUxFQ1RJVkVfQUNLCTB4MTAK
Ky8qKioqKioqKioqKioweDQwIHNlcmllcyAqKioqKioqKioqKi8KKyNkZWZpbmUgU0NUUF9JREFU
QQkJMHg0MAorLyoqKioqKioqKioqKjB4ODAgc2VyaWVzICoqKioqKioqKioqLworLyogUkZDNTA2
MSAqLworI2RlZmluZQlTQ1RQX0FTQ09ORl9BQ0sJCTB4ODAKKy8qIGRyYWZ0LWlldGYtc3Rld2Fy
dC1wa3RkcnBzY3RwICovCisjZGVmaW5lIFNDVFBfUEFDS0VUX0RST1BQRUQJMHg4MQorLyogZHJh
ZnQtaWV0Zi1zdGV3YXJ0LXN0cnJlc2V0LXh4eCAqLworI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNF
VCAgICAgICAweDgyCisKKy8qIFJGQzQ4MjAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNk
ZWZpbmUgU0NUUF9QQURfQ0hVTksgICAgICAgICAgMHg4NAorLyoqKioqKioqKioqKjB4YzAgc2Vy
aWVzICoqKioqKioqKioqLworLyogUkZDMzc1OCAqLworI2RlZmluZSBTQ1RQX0ZPUldBUkRfQ1VN
X1RTTgkweGMwCisvKiBSRkM1MDYxICovCisjZGVmaW5lIFNDVFBfQVNDT05GCQkweGMxCisjZGVm
aW5lIFNDVFBfSUZPUldBUkRfQ1VNX1RTTgkweGMyCisKKy8qIEFCT1JUIGFuZCBTSFVURE9XTiBD
T01QTEVURSBGTEFHICovCisjZGVmaW5lIFNDVFBfSEFEX05PX1RDQgkJMHgwMQorCisvKiBQYWNr
ZXQgZHJvcHBlZCBmbGFncyAqLworI2RlZmluZSBTQ1RQX0ZST01fTUlERExFX0JPWAlTQ1RQX0hB
RF9OT19UQ0IKKyNkZWZpbmUgU0NUUF9CQURDUkMJCTB4MDIKKyNkZWZpbmUgU0NUUF9QQUNLRVRf
VFJVTkNBVEVECTB4MDQKKworLyogRmxhZyBmb3IgRUNOIC1DV1IgKi8KKyNkZWZpbmUgU0NUUF9D
V1JfUkVEVUNFX09WRVJSSURFIDB4MDEKKyNkZWZpbmUgU0NUUF9DV1JfSU5fU0FNRV9XSU5ET1cg
IDB4MDIKKworI2RlZmluZSBTQ1RQX1NBVF9ORVRXT1JLX01JTgk0MDAJLyogbWluIG1zIGZvciBS
VFQgdG8gc2V0IHNhdGVsbGl0ZQorCQkJCQkgKiB0aW1lICovCisjZGVmaW5lIFNDVFBfU0FUX05F
VFdPUktfQlVSU1RfSU5DUiAgMgkvKiBob3cgbWFueSB0aW1lcyB0byBtdWx0aXBseSBtYXhidXJz
dAorCQkJCQkgKiBpbiBzYXQgKi8KKworLyogRGF0YSBDaHVjayBTcGVjaWZpYyBGbGFncyAqLwor
I2RlZmluZSBTQ1RQX0RBVEFfRlJBR19NQVNLICAgICAgICAweDAzCisjZGVmaW5lIFNDVFBfREFU
QV9NSURETEVfRlJBRyAgICAgIDB4MDAKKyNkZWZpbmUgU0NUUF9EQVRBX0xBU1RfRlJBRyAgICAg
ICAgMHgwMQorI2RlZmluZSBTQ1RQX0RBVEFfRklSU1RfRlJBRyAgICAgICAweDAyCisjZGVmaW5l
IFNDVFBfREFUQV9OT1RfRlJBRyAgICAgICAgIDB4MDMKKyNkZWZpbmUgU0NUUF9EQVRBX1VOT1JE
RVJFRCAgICAgICAgMHgwNAorI2RlZmluZSBTQ1RQX0RBVEFfU0FDS19JTU1FRElBVEVMWSAweDA4
CisvKiBFQ04gTm9uY2U6IFNBQ0sgQ2h1bmsgU3BlY2lmaWMgRmxhZ3MgKi8KKyNkZWZpbmUgU0NU
UF9TQUNLX05PTkNFX1NVTSAgICAgICAgMHgwMQorCisvKiBDTVQgREFDIGFsZ29yaXRobSBTQUNL
IGZsYWcgKi8KKyNkZWZpbmUgU0NUUF9TQUNLX0NNVF9EQUMgICAgICAgICAgMHg4MAorCisvKgor
ICogUENCIGZsYWdzIChpbiBzY3RwX2ZsYWdzIGJpdG1hc2spLgorICogTm90ZSB0aGUgZmVhdHVy
ZXMgYW5kIGZsYWdzIGFyZSBtZWFudAorICogZm9yIHVzZSBieSBuZXRzdGF0LgorICovCisjZGVm
aW5lIFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUJCTB4MDAwMDAwMDEKKyNkZWZpbmUgU0NUUF9QQ0Jf
RkxBR1NfVENQVFlQRQkJMHgwMDAwMDAwMgorI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19CT1VOREFM
TAkJMHgwMDAwMDAwNAorI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19BQ0NFUFRJTkcJMHgwMDAwMDAw
OAorI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19VTkJPVU5ECQkweDAwMDAwMDEwCisjZGVmaW5lIFND
VFBfUENCX0ZMQUdTX1NORF9JVEVSQVRPUl9VUCAgMHgwMDAwMDAyMAorI2RlZmluZSBTQ1RQX1BD
Ql9GTEFHU19DTE9TRV9JUCAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgU0NUUF9QQ0JfRkxB
R1NfV0FTX0NPTk5FQ1RFRCAgICAweDAwMDgwMDAwCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX1dB
U19BQk9SVEVEICAgICAgMHgwMDEwMDAwMAorLyogVENQIG1vZGVsIHN1cHBvcnQgKi8KKworI2Rl
ZmluZSBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQJMHgwMDIwMDAwMAorI2RlZmluZSBTQ1RQX1BD
Ql9GTEFHU19JTl9UQ1BQT09MCTB4MDA0MDAwMDAKKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfRE9O
VF9XQUtFCTB4MDA4MDAwMDAKKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfV0FLRU9VVFBVVAkweDAx
MDAwMDAwCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX1dBS0VJTlBVVAkweDAyMDAwMDAwCisjZGVm
aW5lIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2CQkweDA0MDAwMDAwCisjZGVmaW5lIFNDVFBfUENC
X0ZMQUdTX0JMT0NLSU5HX0lPCTB4MDgwMDAwMDAKKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfU09D
S0VUX0dPTkUJMHgxMDAwMDAwMAorI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09O
RQkweDIwMDAwMDAwCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9DQU5UX1JFQUQJMHg0
MDAwMDAwMAorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNkZWZpbmUgU0NUUF9QQ0JfRkxB
R1NfQk9VTkRfQ09OTiAgICAgICAweDgwMDAwMDAwCisKKy8qIGZsYWdzIHRvIGNvcHkgdG8gbmV3
IFBDQiAqLworI2RlZmluZSBTQ1RQX1BDQl9DT1BZX0ZMQUdTCQkoU0NUUF9QQ0JfRkxBR1NfQk9V
TkRBTEx8XAorCQkJCQkgU0NUUF9QQ0JfRkxBR1NfV0FLRUlOUFVUfFwKKwkJCQkJIFNDVFBfUENC
X0ZMQUdTX0JPVU5EX1Y2fFwKKwkJCQkJIFNDVFBfUENCX0ZMQUdTX0JPVU5EX0NPTk4pCisjZWxz
ZQorCisvKiBmbGFncyB0byBjb3B5IHRvIG5ldyBQQ0IgKi8KKyNkZWZpbmUgU0NUUF9QQ0JfQ09Q
WV9GTEFHUwkJKFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMfFwKKwkJCQkJIFNDVFBfUENCX0ZMQUdT
X1dBS0VJTlBVVHxcCisJCQkJCSBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikKKyNlbmRpZgorCisv
KgorICogUENCIEZlYXR1cmVzIChpbiBzY3RwX2ZlYXR1cmVzIGJpdG1hc2spCisgKi8KKyNkZWZp
bmUgU0NUUF9QQ0JfRkxBR1NfRE9fTk9UX1BNVFVEICAgICAgMHgwMDAwMDAwMDAwMDAwMDAxCisj
ZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0VYVF9SQ1ZJTkZPICAgICAgIDB4MDAwMDAwMDAwMDAwMDAw
MiAvKiBkZXByZWNhdGVkICovCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0RPTk9UX0hFQVJUQkVB
VCAgIDB4MDAwMDAwMDAwMDAwMDAwNAorI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19GUkFHX0lOVEVS
TEVBVkUgICAweDAwMDAwMDAwMDAwMDAwMDgKKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfSU5URVJM
RUFWRV9TVFJNUyAgMHgwMDAwMDAwMDAwMDAwMDEwCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0RP
X0FTQ09ORiAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDAyMAorI2RlZmluZSBTQ1RQX1BDQl9GTEFH
U19BVVRPX0FTQ09ORiAgICAgICAweDAwMDAwMDAwMDAwMDAwNDAKKy8qIHNvY2tldCBvcHRpb25z
ICovCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX05PREVMQVkgICAgICAgICAgIDB4MDAwMDAwMDAw
MDAwMDEwMAorI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19BVVRPQ0xPU0UgICAgICAgICAweDAwMDAw
MDAwMDAwMDAyMDAKKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfUkVDVkRBVEFJT0VWTlQgICAgMHgw
MDAwMDAwMDAwMDAwNDAwIC8qIGRlcHJlY2F0ZWQgKi8KKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1Nf
UkVDVkFTU09DRVZOVCAgICAgMHgwMDAwMDAwMDAwMDAwODAwCisjZGVmaW5lIFNDVFBfUENCX0ZM
QUdTX1JFQ1ZQQUREUkVWTlQgICAgIDB4MDAwMDAwMDAwMDAwMTAwMAorI2RlZmluZSBTQ1RQX1BD
Ql9GTEFHU19SRUNWUEVFUkVSUiAgICAgICAweDAwMDAwMDAwMDAwMDIwMDAKKyNkZWZpbmUgU0NU
UF9QQ0JfRkxBR1NfUkVDVlNFTkRGQUlMRVZOVCAgMHgwMDAwMDAwMDAwMDA0MDAwIC8qIGRlcHJl
Y2F0ZWQgKi8KKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfUkVDVlNIVVRET1dORVZOVCAgMHgwMDAw
MDAwMDAwMDA4MDAwCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0FEQVBUQVRJT05FVk5UICAgIDB4
MDAwMDAwMDAwMDAxMDAwMAorI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19QREFQSUVWTlQgICAgICAg
ICAweDAwMDAwMDAwMDAwMjAwMDAKKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfQVVUSEVWTlQgICAg
ICAgICAgMHgwMDAwMDAwMDAwMDQwMDAwCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX1NUUkVBTV9S
RVNFVEVWTlQgIDB4MDAwMDAwMDAwMDA4MDAwMAorI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19OT19G
UkFHTUVOVCAgICAgICAweDAwMDAwMDAwMDAxMDAwMDAKKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1Nf
RVhQTElDSVRfRU9SICAgICAgMHgwMDAwMDAwMDAwNDAwMDAwCisjZGVmaW5lIFNDVFBfUENCX0ZM
QUdTX05FRURTX01BUFBFRF9WNCAgIDB4MDAwMDAwMDAwMDgwMDAwMAorI2RlZmluZSBTQ1RQX1BD
Ql9GTEFHU19NVUxUSVBMRV9BU0NPTkZTICAweDAwMDAwMDAwMDEwMDAwMDAKKyNkZWZpbmUgU0NU
UF9QQ0JfRkxBR1NfUE9SVFJFVVNFICAgICAgICAgMHgwMDAwMDAwMDAyMDAwMDAwCisjZGVmaW5l
IFNDVFBfUENCX0ZMQUdTX0RSWUVWTlQgICAgICAgICAgIDB4MDAwMDAwMDAwNDAwMDAwMAorI2Rl
ZmluZSBTQ1RQX1BDQl9GTEFHU19SRUNWUkNWSU5GTyAgICAgICAweDAwMDAwMDAwMDgwMDAwMDAK
KyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfUkVDVk5YVElORk8gICAgICAgMHgwMDAwMDAwMDEwMDAw
MDAwCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0FTU09DX1JFU0VURVZOVCAgIDB4MDAwMDAwMDAy
MDAwMDAwMAorI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19TVFJFQU1fQ0hBTkdFRVZOVCAweDAwMDAw
MDAwNDAwMDAwMDAKKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfUkVDVk5TRU5ERkFJTEVWTlQgMHgw
MDAwMDAwMDgwMDAwMDAwCisKKy8qLQorICogbW9iaWxpdHlfZmVhdHVyZXMgcGFyYW1ldGVycyAo
YnkgbWljY2hpZSkuTm90ZQorICogdGhlc2UgZmVhdHVyZXMgYXJlIGFwcGxpZWQgYWdhaW5zdCB0
aGUKKyAqIHNjdHBfbW9iaWxpdHlfZmVhdHVyZXMgZmxhZ3MuLiBub3QgdGhlIHNjdHBfZmVhdHVy
ZXMKKyAqIGZsYWdzLgorICovCisjZGVmaW5lIFNDVFBfTU9CSUxJVFlfQkFTRSAgICAgICAgICAg
ICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU0NUUF9NT0JJTElUWV9GQVNUSEFORE9GRiAgICAgICAg
MHgwMDAwMDAwMgorI2RlZmluZSBTQ1RQX01PQklMSVRZX1BSSU1fREVMRVRFRCAgICAgICAweDAw
MDAwMDA0CisKKy8qIFNtYWxsZXN0IFBNVFUgYWxsb3dlZCB3aGVuIGRpc2FibGluZyBQTVRVIGRp
c2NvdmVyeSAqLworI2RlZmluZSBTQ1RQX1NNQUxMRVNUX1BNVFUgNTEyCisvKiBMYXJnZXN0IFBN
VFUgYWxsb3dlZCB3aGVuIGRpc2FibGluZyBQTVRVIGRpc2NvdmVyeSAqLworI2RlZmluZSBTQ1RQ
X0xBUkdFU1RfUE1UVSAgNjU1MzYKKworI2lmIGRlZmluZWQoX1dJTjMyKQorI3ByYWdtYSBwYWNr
KHBvcCkKKyNlbmRpZgorI3VuZGVmIFNDVFBfUEFDS0VECisKKyNpbmNsdWRlIDxuZXRpbmV0L3Nj
dHBfdWlvLmg+CisKKy8qIFRoaXMgZGljdGF0ZXMgdGhlIHNpemUgb2YgdGhlIHBhY2tldAorICog
Y29sbGVjdGlvbiBidWZmZXIuIFRoaXMgb25seSBhcHBsaWVzCisgKiBpZiBTQ1RQX1BBQ0tFVF9M
T0dHSU5HIGlzIGVuYWJsZWQgaW4KKyAqIHlvdXIgY29uZmlnLgorICovCisjZGVmaW5lIFNDVFBf
UEFDS0VUX0xPR19TSVpFIDY1NTM2CisKKy8qIE1heGltdW0gZGVsYXlzIGFuZCBzdWNoIGEgdXNl
ciBjYW4gc2V0IGZvciBvcHRpb25zIHRoYXQKKyAqIHRha2UgbXMuCisgKi8KKyNkZWZpbmUgU0NU
UF9NQVhfU0FDS19ERUxBWSA1MDAgLyogcGVyIFJGQzQ5NjAgKi8KKyNkZWZpbmUgU0NUUF9NQVhf
SEJfSU5URVJWQUwgMTQ0MDAwMDAgLyogNCBob3VycyBpbiBtcyAqLworI2RlZmluZSBTQ1RQX01J
Tl9DT09LSUVfTElGRSAgICAgMTAwMCAvKiAxIHNlY29uZCBpbiBtcyAqLworI2RlZmluZSBTQ1RQ
X01BWF9DT09LSUVfTElGRSAgMzYwMDAwMCAvKiAxIGhvdXIgaW4gbXMgKi8KKworLyogVHlwZXMg
b2YgbG9nZ2luZy9LVFIgdHJhY2luZyAgdGhhdCBjYW4gYmUgZW5hYmxlZCB2aWEgdGhlCisgKiBz
eXNjdGwgbmV0LmluZXQuc2N0cC5zY3RwX2xvZ2dpbmcuIFlvdSBtdXN0IGFsc28gZW5hYmxlCisg
KiBTVUJTWVMgdHJhY2luZy4KKyAqIE5vdGUgdGhhdCB5b3UgbXVzdCBoYXZlIHRoZSBTQ1RQIG9w
dGlvbiBpbiB0aGUga2VybmVsCisgKiB0byBlbmFibGUgdGhlc2UgYXMgd2VsbC4KKyAqLworI2Rl
ZmluZSBTQ1RQX0JMS19MT0dHSU5HX0VOQUJMRQkJCQkweDAwMDAwMDAxCisjZGVmaW5lIFNDVFBf
Q1dORF9NT05JVE9SX0VOQUJMRQkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgU0NUUF9DV05EX0xPR0dJ
TkdfRU5BQkxFCQkJMHgwMDAwMDAwNAorI2RlZmluZSBTQ1RQX0ZMSUdIVF9MT0dHSU5HX0VOQUJM
RQkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgU0NUUF9GUl9MT0dHSU5HX0VOQUJMRQkJCQkweDAwMDAw
MDQwCisjZGVmaW5lIFNDVFBfTE9DS19MT0dHSU5HX0VOQUJMRQkJCTB4MDAwMDAwODAKKyNkZWZp
bmUgU0NUUF9NQVBfTE9HR0lOR19FTkFCTEUJCQkJMHgwMDAwMDEwMAorI2RlZmluZSBTQ1RQX01C
Q05UX0xPR0dJTkdfRU5BQkxFCQkJMHgwMDAwMDIwMAorI2RlZmluZSBTQ1RQX01CVUZfTE9HR0lO
R19FTkFCTEUJCQkweDAwMDAwNDAwCisjZGVmaW5lIFNDVFBfTkFHTEVfTE9HR0lOR19FTkFCTEUJ
CQkweDAwMDAwODAwCisjZGVmaW5lIFNDVFBfUkVDVl9SV05EX0xPR0dJTkdfRU5BQkxFCQkJMHgw
MDAwMTAwMAorI2RlZmluZSBTQ1RQX1JUVFZBUl9MT0dHSU5HX0VOQUJMRQkJCTB4MDAwMDIwMDAK
KyNkZWZpbmUgU0NUUF9TQUNLX0xPR0dJTkdfRU5BQkxFCQkJMHgwMDAwNDAwMAorI2RlZmluZSBT
Q1RQX1NBQ0tfUldORF9MT0dHSU5HX0VOQUJMRQkJCTB4MDAwMDgwMDAKKyNkZWZpbmUgU0NUUF9T
Ql9MT0dHSU5HX0VOQUJMRQkJCQkweDAwMDEwMDAwCisjZGVmaW5lIFNDVFBfU1RSX0xPR0dJTkdf
RU5BQkxFCQkJCTB4MDAwMjAwMDAKKyNkZWZpbmUgU0NUUF9XQUtFX0xPR0dJTkdfRU5BQkxFCQkJ
MHgwMDA0MDAwMAorI2RlZmluZSBTQ1RQX0xPR19NQVhCVVJTVF9FTkFCTEUJCQkweDAwMDgwMDAw
CisjZGVmaW5lIFNDVFBfTE9HX1JXTkRfRU5BQkxFICAgIAkJCTB4MDAxMDAwMDAKKyNkZWZpbmUg
U0NUUF9MT0dfU0FDS19BUlJJVkFMU19FTkFCTEUJCQkweDAwMjAwMDAwCisjZGVmaW5lIFNDVFBf
TFRSQUNFX0NIVU5LX0VOQUJMRQkJCTB4MDA0MDAwMDAKKyNkZWZpbmUgU0NUUF9MVFJBQ0VfRVJS
T1JfRU5BQkxFCQkJMHgwMDgwMDAwMAorI2RlZmluZSBTQ1RQX0xBU1RfUEFDS0VUX1RSQUNJTkcJ
CQkweDAxMDAwMDAwCisjZGVmaW5lIFNDVFBfVEhSRVNIT0xEX0xPR0dJTkcJCQkJMHgwMjAwMDAw
MAorI2RlZmluZSBTQ1RQX0xPR19BVF9TRU5EXzJfU0NUUAkJCQkweDA0MDAwMDAwCisjZGVmaW5l
IFNDVFBfTE9HX0FUX1NFTkRfMl9PVVRRCQkJCTB4MDgwMDAwMDAKKyNkZWZpbmUgU0NUUF9MT0df
VFJZX0FEVkFOQ0UJCQkJMHgxMDAwMDAwMAorCisjZW5kaWYJCQkJLyogIV9ORVRJTkVUX1NDVFBf
SF8gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2FzY29u
Zi5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYXNjb25mLmMKbmV3IGZpbGUg
bW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwLi5jZDI5NDQzODlmMTgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9hc2NvbmYuYwpAQCAtMCww
ICsxLDM1MTggQEAKKy8qLQorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVz
ZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA3LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFu
ZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4
LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogYSkgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAor
ICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqCisgKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
KyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaW5j
bHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisjZW5kaWYKKworI2lu
Y2x1ZGUgPG5ldGluZXQvc2N0cF9vcy5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF92YXIuaD4K
KyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfc3lzY3RsLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3Rw
X3BjYi5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9oZWFkZXIuaD4KKyNpbmNsdWRlIDxuZXRp
bmV0L3NjdHB1dGlsLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX291dHB1dC5oPgorI2luY2x1
ZGUgPG5ldGluZXQvc2N0cF9hc2NvbmYuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdGltZXIu
aD4KKworLyoKKyAqIGRlYnVnIGZsYWdzOgorICogU0NUUF9ERUJVR19BU0NPTkYxOiBwcm90b2Nv
bCBpbmZvLCBnZW5lcmFsIGluZm8gYW5kIGVycm9ycworICogU0NUUF9ERUJVR19BU0NPTkYyOiBk
ZXRhaWxlZCBpbmZvCisgKi8KKworLyoKKyAqIFJGQyA1MDYxCisgKgorICogQW4gQVNDT05GIHBh
cmFtZXRlciBxdWV1ZSBleGlzdHMgcGVyIGFzb2Mgd2hpY2ggaG9sZHMgdGhlIHBlbmRpbmcgYWRk
cmVzcworICogb3BlcmF0aW9ucy4gIExpc3RzIGFyZSB1cGRhdGVkIHVwb24gcmVjZWlwdCBvZiBB
U0NPTkYtQUNLLgorICoKKyAqIEEgcmVzdHJpY3RlZF9hZGRycyBsaXN0IGV4aXN0cyBwZXIgYXNz
b2MgdG8gaG9sZCBsb2NhbCBhZGRyZXNzZXMgdGhhdCBhcmUKKyAqIG5vdCAoeWV0KSB1c2FibGUg
YnkgdGhlIGFzc29jIGFzIGEgc291cmNlIGFkZHJlc3MuICBUaGVzZSBhZGRyZXNzZXMgYXJlCisg
KiBlaXRoZXIgcGVuZGluZyBhbiBBU0NPTkYgb3BlcmF0aW9uIChhbmQgZXhpc3Qgb24gdGhlIEFT
Q09ORiBwYXJhbWV0ZXIKKyAqIHF1ZXVlKSwgb3IgdGhleSBhcmUgcGVybWFuZW50bHkgcmVzdHJp
Y3RlZCAodGhlIHBlZXIgaGFzIHJldHVybmVkIGFuCisgKiBFUlJPUiBpbmRpY2F0aW9uIHRvIGFu
IEFTQ09ORihBREQpLCBvciB0aGUgcGVlciBkb2VzIG5vdCBzdXBwb3J0IEFTQ09ORikuCisgKgor
ICogRGVsZXRlZCBhZGRyZXNzZXMgYXJlIGFsd2F5cyBpbW1lZGlhdGVseSByZW1vdmVkIGZyb20g
dGhlIGxpc3RzIGFzIHRoZXkgd2lsbAorICogKHNob3J0bHkpIG5vIGxvbmdlciBleGlzdCBpbiB0
aGUga2VybmVsLiAgV2Ugc2VuZCBBU0NPTkZzIGFzIGEgY291cnRlc3ksCisgKiBvbmx5IGlmIGFs
bG93ZWQuCisgKi8KKworLyoKKyAqIEFTQ09ORiBwYXJhbWV0ZXIgcHJvY2Vzc2luZy4KKyAqIHJl
c3BvbnNlX3JlcXVpcmVkOiBzZXQgaWYgYSByZXBseSBpcyByZXF1aXJlZCAoZWcuIFNVQ0NFU1Nf
UkVQT1JUKS4KKyAqIHJldHVybnMgYSBtYnVmIHRvIGFuICJlcnJvciIgcmVzcG9uc2UgcGFyYW1l
dGVyIG9yIE5VTEwvInN1Y2Nlc3MiIGlmIG9rLgorICogRklYOiBhbGxvY2F0aW5nIHRoaXMgbWFu
eSBtYnVmcyBvbiB0aGUgZmx5IGlzIHByZXR0eSBpbmVmZmljaWVudC4uLgorICovCitzdGF0aWMg
c3RydWN0IG1idWYgKgorc2N0cF9hc2NvbmZfc3VjY2Vzc19yZXNwb25zZSh1aW50MzJfdCBpZCkK
K3sKKwlzdHJ1Y3QgbWJ1ZiAqbV9yZXBseSA9IE5VTEw7CisJc3RydWN0IHNjdHBfYXNjb25mX3Bh
cmFtaGRyICphcGg7CisKKwltX3JlcGx5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihz
dHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIpLAorCQkJCQkwLCBNX05PV0FJVCwgMSwgTVRfREFU
QSk7CisJaWYgKG1fcmVwbHkgPT0gTlVMTCkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05G
MSwKKwkJCSJhc2NvbmZfc3VjY2Vzc19yZXNwb25zZTogY291bGRuJ3QgZ2V0IG1idWYhXG4iKTsK
KwkJcmV0dXJuIChOVUxMKTsKKwl9CisJYXBoID0gbXRvZChtX3JlcGx5LCBzdHJ1Y3Qgc2N0cF9h
c2NvbmZfcGFyYW1oZHIgKik7CisJYXBoLT5jb3JyZWxhdGlvbl9pZCA9IGlkOworCWFwaC0+cGgu
cGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfU1VDQ0VTU19SRVBPUlQpOworCWFwaC0+cGgucGFyYW1f
bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkcik7CisJU0NUUF9CVUZf
TEVOKG1fcmVwbHkpID0gYXBoLT5waC5wYXJhbV9sZW5ndGg7CisJYXBoLT5waC5wYXJhbV9sZW5n
dGggPSBodG9ucyhhcGgtPnBoLnBhcmFtX2xlbmd0aCk7CisKKwlyZXR1cm4gKG1fcmVwbHkpOwor
fQorCitzdGF0aWMgc3RydWN0IG1idWYgKgorc2N0cF9hc2NvbmZfZXJyb3JfcmVzcG9uc2UodWlu
dDMyX3QgaWQsIHVpbnQxNl90IGNhdXNlLCB1aW50OF90ICplcnJvcl90bHYsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1aW50MTZfdCB0bHZfbGVuZ3RoKQoreworCXN0cnVjdCBtYnVmICpt
X3JlcGx5ID0gTlVMTDsKKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgKmFwaDsKKwlzdHJ1
Y3Qgc2N0cF9lcnJvcl9jYXVzZSAqZXJyb3I7CisJdWludDMyX3QgYnVmX2xlbjsKKwl1aW50MTZf
dCBpLCBwYXJhbV9sZW5ndGgsIGNhdXNlX2xlbmd0aCwgcGFkZGluZ19sZW5ndGg7CisJdWludDhf
dCAqdGx2OworCisJaWYgKGVycm9yX3RsdiA9PSBOVUxMKSB7CisJCXRsdl9sZW5ndGggPSAwOwor
CX0KKwljYXVzZV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfZXJyb3JfY2F1c2UpICsgdGx2
X2xlbmd0aDsKKwlwYXJhbV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFt
aGRyKSArIGNhdXNlX2xlbmd0aDsKKwlwYWRkaW5nX2xlbmd0aCA9IHRsdl9sZW5ndGggJSA0Owor
CWlmIChwYWRkaW5nX2xlbmd0aCAhPSAwKSB7CisJCXBhZGRpbmdfbGVuZ3RoID0gNCAtIHBhZGRp
bmdfbGVuZ3RoOworCX0KKwlidWZfbGVuID0gcGFyYW1fbGVuZ3RoICsgcGFkZGluZ19sZW5ndGg7
CisJaWYgKGJ1Zl9sZW4gPiBNTEVOKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAor
CQkJImFzY29uZl9lcnJvcl9yZXNwb25zZTogdGx2X2xlbmd0aCAoJXhoKSB0b28gYmlnXG4iLAor
CQkJdGx2X2xlbmd0aCk7CisJCXJldHVybiAoTlVMTCk7CisJfQorCW1fcmVwbHkgPSBzY3RwX2dl
dF9tYnVmX2Zvcl9tc2coYnVmX2xlbiwgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOworCWlmICht
X3JlcGx5ID09IE5VTEwpIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCQkiYXNj
b25mX2Vycm9yX3Jlc3BvbnNlOiBjb3VsZG4ndCBnZXQgbWJ1ZiFcbiIpOworCQlyZXR1cm4gKE5V
TEwpOworCX0KKwlhcGggPSBtdG9kKG1fcmVwbHksIHN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhk
ciAqKTsKKwlhcGgtPnBoLnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX0VSUk9SX0NBVVNFX0lORCk7
CisJYXBoLT5waC5wYXJhbV9sZW5ndGggPSBodG9ucyhwYXJhbV9sZW5ndGgpOworCWFwaC0+Y29y
cmVsYXRpb25faWQgPSBpZDsKKwllcnJvciA9IChzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSAqKShh
cGggKyAxKTsKKwllcnJvci0+Y29kZSA9IGh0b25zKGNhdXNlKTsKKwllcnJvci0+bGVuZ3RoID0g
aHRvbnMoY2F1c2VfbGVuZ3RoKTsKKwlpZiAoZXJyb3JfdGx2ICE9IE5VTEwpIHsKKwkJdGx2ID0g
KHVpbnQ4X3QgKikgKGVycm9yICsgMSk7CisJCW1lbWNweSh0bHYsIGVycm9yX3RsdiwgdGx2X2xl
bmd0aCk7CisJCWZvciAoaSA9IDA7IGkgPCBwYWRkaW5nX2xlbmd0aDsgaSsrKSB7CisJCQl0bHZb
dGx2X2xlbmd0aCArIGldID0gMDsKKwkJfQorCX0KKwlTQ1RQX0JVRl9MRU4obV9yZXBseSkgPSBi
dWZfbGVuOworCXJldHVybiAobV9yZXBseSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWJ1ZiAqCitz
Y3RwX3Byb2Nlc3NfYXNjb25mX2FkZF9pcChzdHJ1Y3Qgc29ja2FkZHIgKnNyYywgc3RydWN0IHNj
dHBfYXNjb25mX3BhcmFtaGRyICphcGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCBzZW5kX2hiLCBpbnQgcmVzcG9uc2VfcmVxdWlyZWQpCit7
CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCXN0cnVjdCBtYnVmICptX3JlcGx5ID0gTlVMTDsK
Kwl1bmlvbiBzY3RwX3NvY2tzdG9yZSBzdG9yZTsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGg7
CisJdWludDE2X3QgcGFyYW1fdHlwZSwgYXBhcmFtX2xlbmd0aDsKKyNpZiBkZWZpbmVkKElORVQp
IHx8IGRlZmluZWQoSU5FVDYpCisJdWludDE2X3QgcGFyYW1fbGVuZ3RoOworI2VuZGlmCisJc3Ry
dWN0IHNvY2thZGRyICpzYTsKKwlpbnQgemVyb19hZGRyZXNzID0gMDsKKwlpbnQgYmFkX2FkZHJl
c3MgPSAwOworI2lmZGVmIElORVQKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKwlzdHJ1Y3Qg
c2N0cF9pcHY0YWRkcl9wYXJhbSAqdjRhZGRyOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwlzdHJ1
Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCXN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICp2NmFk
ZHI7CisjZW5kaWYKKworCWFwYXJhbV9sZW5ndGggPSBudG9ocyhhcGgtPnBoLnBhcmFtX2xlbmd0
aCk7CisJaWYgKGFwYXJhbV9sZW5ndGggPCBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFt
aGRyKSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpIHsKKwkJcmV0dXJuIChOVUxMKTsK
Kwl9CisJcGggPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKikoYXBoICsgMSk7CisJcGFyYW1fdHlw
ZSA9IG50b2hzKHBoLT5wYXJhbV90eXBlKTsKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQo
SU5FVDYpCisJcGFyYW1fbGVuZ3RoID0gbnRvaHMocGgtPnBhcmFtX2xlbmd0aCk7CisJaWYgKHBh
cmFtX2xlbmd0aCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIpICE9IGFwYXJh
bV9sZW5ndGgpIHsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisjZW5kaWYKKwlzYSA9ICZzdG9yZS5z
YTsKKwlzd2l0Y2ggKHBhcmFtX3R5cGUpIHsKKyNpZmRlZiBJTkVUCisJY2FzZSBTQ1RQX0lQVjRf
QUREUkVTUzoKKwkJaWYgKHBhcmFtX2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFk
ZHJfcGFyYW0pKSB7CisJCQkvKiBpbnZhbGlkIHBhcmFtIHNpemUgKi8KKwkJCXJldHVybiAoTlVM
TCk7CisJCX0KKwkJdjRhZGRyID0gKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtICopcGg7CisJ
CXNpbiA9ICZzdG9yZS5zaW47CisJCW1lbXNldChzaW4sIDAsIHNpemVvZigqc2luKSk7CisJCXNp
bi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJCXNpbi0+c2lu
X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJCXNpbi0+c2luX3Bv
cnQgPSBzdGNiLT5ycG9ydDsKKwkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSB2NGFkZHItPmFkZHI7
CisJCWlmICgoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0JST0FEQ0FTVCkgfHwKKwkJ
ICAgIElOX01VTFRJQ0FTVChudG9obChzaW4tPnNpbl9hZGRyLnNfYWRkcikpKSB7CisJCQliYWRf
YWRkcmVzcyA9IDE7CisJCX0KKwkJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRyID09IElOQUREUl9B
TlkpCisJCQl6ZXJvX2FkZHJlc3MgPSAxOworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwg
InByb2Nlc3NfYXNjb25mX2FkZF9pcDogYWRkaW5nICIpOworCQlTQ1RQREJHX0FERFIoU0NUUF9E
RUJVR19BU0NPTkYxLCBzYSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNl
IFNDVFBfSVBWNl9BRERSRVNTOgorCQlpZiAocGFyYW1fbGVuZ3RoICE9IHNpemVvZihzdHJ1Y3Qg
c2N0cF9pcHY2YWRkcl9wYXJhbSkpIHsKKwkJCS8qIGludmFsaWQgcGFyYW0gc2l6ZSAqLworCQkJ
cmV0dXJuIChOVUxMKTsKKwkJfQorCQl2NmFkZHIgPSAoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFy
YW0gKilwaDsKKwkJc2luNiA9ICZzdG9yZS5zaW42OworCQltZW1zZXQoc2luNiwgMCwgc2l6ZW9m
KCpzaW42KSk7CisJCXNpbjYtPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisjaWZkZWYgSEFWRV9T
SU42X0xFTgorCQlzaW42LT5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsK
KyNlbmRpZgorCQlzaW42LT5zaW42X3BvcnQgPSBzdGNiLT5ycG9ydDsKKwkJbWVtY3B5KChjYWRk
cl90KSZzaW42LT5zaW42X2FkZHIsIHY2YWRkci0+YWRkciwKKwkJICAgIHNpemVvZihzdHJ1Y3Qg
aW42X2FkZHIpKTsKKwkJaWYgKElONl9JU19BRERSX01VTFRJQ0FTVCgmc2luNi0+c2luNl9hZGRy
KSkgeworCQkJYmFkX2FkZHJlc3MgPSAxOworCQl9CisJCWlmIChJTjZfSVNfQUREUl9VTlNQRUNJ
RklFRCgmc2luNi0+c2luNl9hZGRyKSkKKwkJCXplcm9fYWRkcmVzcyA9IDE7CisJCVNDVFBEQkco
U0NUUF9ERUJVR19BU0NPTkYxLCAicHJvY2Vzc19hc2NvbmZfYWRkX2lwOiBhZGRpbmcgIik7CisJ
CVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX0FTQ09ORjEsIHNhKTsKKwkJYnJlYWs7CisjZW5kaWYK
KwlkZWZhdWx0OgorCQltX3JlcGx5ID0gc2N0cF9hc2NvbmZfZXJyb3JfcmVzcG9uc2UoYXBoLT5j
b3JyZWxhdGlvbl9pZCwKKwkJICAgIFNDVFBfQ0FVU0VfSU5WQUxJRF9QQVJBTSwgKHVpbnQ4X3Qg
KikgYXBoLAorCQkgICAgYXBhcmFtX2xlbmd0aCk7CisJCXJldHVybiAobV9yZXBseSk7CisJfQkJ
CS8qIGVuZCBzd2l0Y2ggKi8KKworCS8qIGlmIDAuMC4wLjAvOjowLCBhZGQgdGhlIHNvdXJjZSBh
ZGRyZXNzIGluc3RlYWQgKi8KKwlpZiAoemVyb19hZGRyZXNzICYmIFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9uYXRfZnJpZW5kbHkpKSB7CisJCXNhID0gc3JjOworCQlTQ1RQREJHKFNDVFBfREVCVUdf
QVNDT05GMSwKKwkJICAgICAgICAicHJvY2Vzc19hc2NvbmZfYWRkX2lwOiB1c2luZyBzb3VyY2Ug
YWRkciAiKTsKKwkJU0NUUERCR19BRERSKFNDVFBfREVCVUdfQVNDT05GMSwgc3JjKTsKKwl9CisJ
bmV0ID0gTlVMTDsKKwkvKiBhZGQgdGhlIGFkZHJlc3MgKi8KKwlpZiAoYmFkX2FkZHJlc3MpIHsK
KwkJbV9yZXBseSA9IHNjdHBfYXNjb25mX2Vycm9yX3Jlc3BvbnNlKGFwaC0+Y29ycmVsYXRpb25f
aWQsCisJCSAgICBTQ1RQX0NBVVNFX0lOVkFMSURfUEFSQU0sICh1aW50OF90ICopIGFwaCwKKwkJ
ICAgIGFwYXJhbV9sZW5ndGgpOworCX0gZWxzZSBpZiAoc2N0cF9hZGRfcmVtb3RlX2FkZHIoc3Rj
Yiwgc2EsICZuZXQsIHN0Y2ItPmFzb2MucG9ydCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNDVFBfRE9OT1RfU0VUU0NPUEUsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTQ1RQX0FERFJfRFlOQU1JQ19BRERFRCkgIT0gMCkgeworCQlTQ1RQREJHKFNDVFBfREVC
VUdfQVNDT05GMSwKKwkJCSJwcm9jZXNzX2FzY29uZl9hZGRfaXA6IGVycm9yIGFkZGluZyBhZGRy
ZXNzXG4iKTsKKwkJbV9yZXBseSA9IHNjdHBfYXNjb25mX2Vycm9yX3Jlc3BvbnNlKGFwaC0+Y29y
cmVsYXRpb25faWQsCisJCSAgICBTQ1RQX0NBVVNFX1JFU09VUkNFX1NIT1JUQUdFLCAodWludDhf
dCAqKSBhcGgsCisJCSAgICBhcGFyYW1fbGVuZ3RoKTsKKwl9IGVsc2UgeworCQlpZiAocmVzcG9u
c2VfcmVxdWlyZWQpIHsKKwkJCW1fcmVwbHkgPQorCQkJICAgIHNjdHBfYXNjb25mX3N1Y2Nlc3Nf
cmVzcG9uc2UoYXBoLT5jb3JyZWxhdGlvbl9pZCk7CisJCX0KKwkJaWYgKG5ldCAhPSBOVUxMKSB7
CisJCQkvKiBub3RpZnkgdXBwZXIgbGF5ZXIgKi8KKwkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05P
VElGWV9BU0NPTkZfQUREX0lQLCBzdGNiLCAwLCBzYSwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJ
CXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1BBVEhNVFVSQUlTRSwgc3RjYi0+c2N0
cF9lcCwgc3RjYiwgbmV0KTsKKwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0hF
QVJUQkVBVCwgc3RjYi0+c2N0cF9lcCwKKwkJCQkJIHN0Y2IsIG5ldCk7CisJCQlpZiAoc2VuZF9o
YikgeworCQkJCXNjdHBfc2VuZF9oYihzdGNiLCBuZXQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJ
CQl9CisJCX0KKwl9CisJcmV0dXJuIChtX3JlcGx5KTsKK30KKworc3RhdGljIGludAorc2N0cF9h
c2NvbmZfZGVsX3JlbW90ZV9hZGRyc19leGNlcHQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1
Y3Qgc29ja2FkZHIgKnNyYykKK3sKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpzcmNfbmV0LCAqbmV0LCAq
bm5ldDsKKworCS8qIG1ha2Ugc3VyZSB0aGUgc291cmNlIGFkZHJlc3MgZXhpc3RzIGFzIGEgZGVz
dGluYXRpb24gbmV0ICovCisJc3JjX25ldCA9IHNjdHBfZmluZG5ldChzdGNiLCBzcmMpOworCWlm
IChzcmNfbmV0ID09IE5VTEwpIHsKKwkJLyogbm90IGZvdW5kICovCisJCXJldHVybiAoLTEpOwor
CX0KKworCS8qIGRlbGV0ZSBhbGwgZGVzdGluYXRpb24gYWRkcmVzc2VzIGV4Y2VwdCB0aGUgc291
cmNlICovCisJVEFJTFFfRk9SRUFDSF9TQUZFKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9u
ZXh0LCBubmV0KSB7CisJCWlmIChuZXQgIT0gc3JjX25ldCkgeworCQkJLyogZGVsZXRlIHRoaXMg
YWRkcmVzcyAqLworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCQkJImFzY29uZl9k
ZWxfcmVtb3RlX2FkZHJzX2V4Y2VwdDogZGVsZXRpbmcgIik7CisJCQlTQ1RQREJHX0FERFIoU0NU
UF9ERUJVR19BU0NPTkYxLAorCQkJCSAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZuZXQtPnJvLl9s
X2FkZHIpOworCQkJLyogbm90aWZ5IHVwcGVyIGxheWVyICovCisJCQlzY3RwX3VscF9ub3RpZnko
U0NUUF9OT1RJRllfQVNDT05GX0RFTEVURV9JUCwgc3RjYiwgMCwKKwkJCSAgICAoc3RydWN0IHNv
Y2thZGRyICopJm5ldC0+cm8uX2xfYWRkciwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCXNjdHBf
cmVtb3ZlX25ldChzdGNiLCBuZXQpOworCQl9CisJfQorCXJldHVybiAoMCk7Cit9CisKK3N0YXRp
YyBzdHJ1Y3QgbWJ1ZiAqCitzY3RwX3Byb2Nlc3NfYXNjb25mX2RlbGV0ZV9pcChzdHJ1Y3Qgc29j
a2FkZHIgKnNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX2Fz
Y29uZl9wYXJhbWhkciAqYXBoLAorCQkJICAgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLCBpbnQg
cmVzcG9uc2VfcmVxdWlyZWQpCit7CisJc3RydWN0IG1idWYgKm1fcmVwbHkgPSBOVUxMOworCXVu
aW9uIHNjdHBfc29ja3N0b3JlIHN0b3JlOworCXN0cnVjdCBzY3RwX3BhcmFtaGRyICpwaDsKKwl1
aW50MTZfdCBwYXJhbV90eXBlLCBhcGFyYW1fbGVuZ3RoOworI2lmIGRlZmluZWQoSU5FVCkgfHwg
ZGVmaW5lZChJTkVUNikKKwl1aW50MTZfdCBwYXJhbV9sZW5ndGg7CisjZW5kaWYKKwlzdHJ1Y3Qg
c29ja2FkZHIgKnNhOworCWludCB6ZXJvX2FkZHJlc3MgPSAwOworCWludCByZXN1bHQ7CisjaWZk
ZWYgSU5FVAorCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCXN0cnVjdCBzY3RwX2lwdjRhZGRy
X3BhcmFtICp2NGFkZHI7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCXN0cnVjdCBzb2NrYWRkcl9p
bjYgKnNpbjY7CisJc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKnY2YWRkcjsKKyNlbmRpZgor
CisJYXBhcmFtX2xlbmd0aCA9IG50b2hzKGFwaC0+cGgucGFyYW1fbGVuZ3RoKTsKKwlpZiAoYXBh
cmFtX2xlbmd0aCA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIpICsgc2l6ZW9m
KHN0cnVjdCBzY3RwX3BhcmFtaGRyKSkgeworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlwaCA9IChz
dHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKShhcGggKyAxKTsKKwlwYXJhbV90eXBlID0gbnRvaHMocGgt
PnBhcmFtX3R5cGUpOworI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKwlwYXJh
bV9sZW5ndGggPSBudG9ocyhwaC0+cGFyYW1fbGVuZ3RoKTsKKwlpZiAocGFyYW1fbGVuZ3RoICsg
c2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkcikgIT0gYXBhcmFtX2xlbmd0aCkgewor
CQlyZXR1cm4gKE5VTEwpOworCX0KKyNlbmRpZgorCXNhID0gJnN0b3JlLnNhOworCXN3aXRjaCAo
cGFyYW1fdHlwZSkgeworI2lmZGVmIElORVQKKwljYXNlIFNDVFBfSVBWNF9BRERSRVNTOgorCQlp
ZiAocGFyYW1fbGVuZ3RoICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSkpIHsK
KwkJCS8qIGludmFsaWQgcGFyYW0gc2l6ZSAqLworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQl2
NGFkZHIgPSAoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0gKilwaDsKKwkJc2luID0gJnN0b3Jl
LnNpbjsKKwkJbWVtc2V0KHNpbiwgMCwgc2l6ZW9mKCpzaW4pKTsKKwkJc2luLT5zaW5fZmFtaWx5
ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwkJc2luLT5zaW5fbGVuID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwkJc2luLT5zaW5fcG9ydCA9IHN0Y2ItPnJw
b3J0OworCQlzaW4tPnNpbl9hZGRyLnNfYWRkciA9IHY0YWRkci0+YWRkcjsKKwkJaWYgKHNpbi0+
c2luX2FkZHIuc19hZGRyID09IElOQUREUl9BTlkpCisJCQl6ZXJvX2FkZHJlc3MgPSAxOworCQlT
Q1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwKKwkJCSJwcm9jZXNzX2FzY29uZl9kZWxldGVfaXA6
IGRlbGV0aW5nICIpOworCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19BU0NPTkYxLCBzYSk7CisJ
CWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNlIFNDVFBfSVBWNl9BRERSRVNTOgor
CQlpZiAocGFyYW1fbGVuZ3RoICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSkp
IHsKKwkJCS8qIGludmFsaWQgcGFyYW0gc2l6ZSAqLworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQor
CQl2NmFkZHIgPSAoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKilwaDsKKwkJc2luNiA9ICZz
dG9yZS5zaW42OworCQltZW1zZXQoc2luNiwgMCwgc2l6ZW9mKCpzaW42KSk7CisJCXNpbjYtPnNp
bjZfZmFtaWx5ID0gQUZfSU5FVDY7CisjaWZkZWYgSEFWRV9TSU42X0xFTgorCQlzaW42LT5zaW42
X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorCQlzaW42LT5zaW42
X3BvcnQgPSBzdGNiLT5ycG9ydDsKKwkJbWVtY3B5KCZzaW42LT5zaW42X2FkZHIsIHY2YWRkci0+
YWRkciwKKwkJICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKwkJaWYgKElONl9JU19BRERS
X1VOU1BFQ0lGSUVEKCZzaW42LT5zaW42X2FkZHIpKQorCQkJemVyb19hZGRyZXNzID0gMTsKKwkJ
U0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCQkicHJvY2Vzc19hc2NvbmZfZGVsZXRlX2lw
OiBkZWxldGluZyAiKTsKKwkJU0NUUERCR19BRERSKFNDVFBfREVCVUdfQVNDT05GMSwgc2EpOwor
CQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCW1fcmVwbHkgPSBzY3RwX2FzY29uZl9lcnJv
cl9yZXNwb25zZShhcGgtPmNvcnJlbGF0aW9uX2lkLAorCQkgICAgU0NUUF9DQVVTRV9VTlJFU09M
VkFCTEVfQUREUiwgKHVpbnQ4X3QgKikgYXBoLAorCQkgICAgYXBhcmFtX2xlbmd0aCk7CisJCXJl
dHVybiAobV9yZXBseSk7CisJfQorCisJLyogbWFrZSBzdXJlIHRoZSBzb3VyY2UgYWRkcmVzcyBp
cyBub3QgYmVpbmcgZGVsZXRlZCAqLworCWlmIChzY3RwX2NtcGFkZHIoc2EsIHNyYykpIHsKKwkJ
LyogdHJ5aW5nIHRvIGRlbGV0ZSB0aGUgc291cmNlIGFkZHJlc3MhICovCisJCVNDVFBEQkcoU0NU
UF9ERUJVR19BU0NPTkYxLCAicHJvY2Vzc19hc2NvbmZfZGVsZXRlX2lwOiB0cmllZCB0byBkZWxl
dGUgc291cmNlIGFkZHJcbiIpOworCQltX3JlcGx5ID0gc2N0cF9hc2NvbmZfZXJyb3JfcmVzcG9u
c2UoYXBoLT5jb3JyZWxhdGlvbl9pZCwKKwkJICAgIFNDVFBfQ0FVU0VfREVMRVRJTkdfU1JDX0FE
RFIsICh1aW50OF90ICopIGFwaCwKKwkJICAgIGFwYXJhbV9sZW5ndGgpOworCQlyZXR1cm4gKG1f
cmVwbHkpOworCX0KKworCS8qIGlmIGRlbGV0aW5nIDAuMC4wLjAvOjowLCBkZWxldGUgYWxsIGFk
ZHJlc3NlcyBleGNlcHQgc3JjIGFkZHIgKi8KKwlpZiAoemVyb19hZGRyZXNzICYmIFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9uYXRfZnJpZW5kbHkpKSB7CisJCXJlc3VsdCA9IHNjdHBfYXNjb25mX2Rl
bF9yZW1vdGVfYWRkcnNfZXhjZXB0KHN0Y2IsIHNyYyk7CisKKwkJaWYgKHJlc3VsdCkgeworCQkJ
Lyogc3JjIGFkZHJlc3MgZGlkIG5vdCBleGlzdD8gKi8KKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19B
U0NPTkYxLCAicHJvY2Vzc19hc2NvbmZfZGVsZXRlX2lwOiBzcmMgYWRkciBkb2VzIG5vdCBleGlz
dD9cbiIpOworCQkJLyogd2hhdCBlcnJvciB0byByZXBseSB3aXRoPz8gKi8KKwkJCW1fcmVwbHkg
PQorCQkJICAgIHNjdHBfYXNjb25mX2Vycm9yX3Jlc3BvbnNlKGFwaC0+Y29ycmVsYXRpb25faWQs
CisJCQkgICAgU0NUUF9DQVVTRV9SRVFVRVNUX1JFRlVTRUQsICh1aW50OF90ICopIGFwaCwKKwkJ
CSAgICBhcGFyYW1fbGVuZ3RoKTsKKwkJfSBlbHNlIGlmIChyZXNwb25zZV9yZXF1aXJlZCkgewor
CQkJbV9yZXBseSA9CisJCQkgICAgc2N0cF9hc2NvbmZfc3VjY2Vzc19yZXNwb25zZShhcGgtPmNv
cnJlbGF0aW9uX2lkKTsKKwkJfQorCQlyZXR1cm4gKG1fcmVwbHkpOworCX0KKworCS8qIGRlbGV0
ZSB0aGUgYWRkcmVzcyAqLworCXJlc3VsdCA9IHNjdHBfZGVsX3JlbW90ZV9hZGRyKHN0Y2IsIHNh
KTsKKwkvKgorCSAqIG5vdGUgaWYgcmVzdWx0ID09IC0yLCB0aGUgYWRkcmVzcyBkb2Vzbid0IGV4
aXN0IGluIHRoZSBhc29jIGJ1dAorCSAqIHNpbmNlIGl0J3MgYmVpbmcgZGVsZXRlZCBhbnl3YXlz
LCB3ZSBqdXN0IGFjayB0aGUgZGVsZXRlIC0tIGJ1dAorCSAqIHRoaXMgcHJvYmFibHkgbWVhbnMg
c29tZXRoaW5nIGhhcyBhbHJlYWR5IGdvbmUgYXdyeQorCSAqLworCWlmIChyZXN1bHQgPT0gLTEp
IHsKKwkJLyogb25seSBvbmUgYWRkcmVzcyBpbiB0aGUgYXNvYyAqLworCQlTQ1RQREJHKFNDVFBf
REVCVUdfQVNDT05GMSwgInByb2Nlc3NfYXNjb25mX2RlbGV0ZV9pcDogdHJpZWQgdG8gZGVsZXRl
IGxhc3QgSVAgYWRkciFcbiIpOworCQltX3JlcGx5ID0gc2N0cF9hc2NvbmZfZXJyb3JfcmVzcG9u
c2UoYXBoLT5jb3JyZWxhdGlvbl9pZCwKKwkJICAgIFNDVFBfQ0FVU0VfREVMRVRJTkdfTEFTVF9B
RERSLCAodWludDhfdCAqKSBhcGgsCisJCSAgICBhcGFyYW1fbGVuZ3RoKTsKKwl9IGVsc2Ugewor
CQlpZiAocmVzcG9uc2VfcmVxdWlyZWQpIHsKKwkJCW1fcmVwbHkgPSBzY3RwX2FzY29uZl9zdWNj
ZXNzX3Jlc3BvbnNlKGFwaC0+Y29ycmVsYXRpb25faWQpOworCQl9CisJCS8qIG5vdGlmeSB1cHBl
ciBsYXllciAqLworCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfQVNDT05GX0RFTEVURV9J
UCwgc3RjYiwgMCwgc2EsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJfQorCXJldHVybiAobV9yZXBs
eSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWJ1ZiAqCitzY3RwX3Byb2Nlc3NfYXNjb25mX3NldF9w
cmltYXJ5KHN0cnVjdCBzb2NrYWRkciAqc3JjLAorCQkJCXN0cnVjdCBzY3RwX2FzY29uZl9wYXJh
bWhkciAqYXBoLAorCQkJCXN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgaW50IHJlc3BvbnNlX3JlcXVp
cmVkKQoreworCXN0cnVjdCBtYnVmICptX3JlcGx5ID0gTlVMTDsKKwl1bmlvbiBzY3RwX3NvY2tz
dG9yZSBzdG9yZTsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGg7CisJdWludDE2X3QgcGFyYW1f
dHlwZSwgYXBhcmFtX2xlbmd0aDsKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYp
CisJdWludDE2X3QgcGFyYW1fbGVuZ3RoOworI2VuZGlmCisJc3RydWN0IHNvY2thZGRyICpzYTsK
KwlpbnQgemVyb19hZGRyZXNzID0gMDsKKyNpZmRlZiBJTkVUCisJc3RydWN0IHNvY2thZGRyX2lu
ICpzaW47CisJc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0gKnY0YWRkcjsKKyNlbmRpZgorI2lm
ZGVmIElORVQ2CisJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKwlzdHJ1Y3Qgc2N0cF9pcHY2
YWRkcl9wYXJhbSAqdjZhZGRyOworI2VuZGlmCisKKwlhcGFyYW1fbGVuZ3RoID0gbnRvaHMoYXBo
LT5waC5wYXJhbV9sZW5ndGgpOworCWlmIChhcGFyYW1fbGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBz
Y3RwX2FzY29uZl9wYXJhbWhkcikgKyBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSB7CisJ
CXJldHVybiAoTlVMTCk7CisJfQorCXBoID0gKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopKGFwaCAr
IDEpOworCXBhcmFtX3R5cGUgPSBudG9ocyhwaC0+cGFyYW1fdHlwZSk7CisjaWYgZGVmaW5lZChJ
TkVUKSB8fCBkZWZpbmVkKElORVQ2KQorCXBhcmFtX2xlbmd0aCA9IG50b2hzKHBoLT5wYXJhbV9s
ZW5ndGgpOworCWlmIChwYXJhbV9sZW5ndGggKyBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3Bh
cmFtaGRyKSAhPSBhcGFyYW1fbGVuZ3RoKSB7CisJCXJldHVybiAoTlVMTCk7CisJfQorI2VuZGlm
CisJc2EgPSAmc3RvcmUuc2E7CisJc3dpdGNoIChwYXJhbV90eXBlKSB7CisjaWZkZWYgSU5FVAor
CWNhc2UgU0NUUF9JUFY0X0FERFJFU1M6CisJCWlmIChwYXJhbV9sZW5ndGggIT0gc2l6ZW9mKHN0
cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtKSkgeworCQkJLyogaW52YWxpZCBwYXJhbSBzaXplICov
CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCXY0YWRkciA9IChzdHJ1Y3Qgc2N0cF9pcHY0YWRk
cl9wYXJhbSAqKXBoOworCQlzaW4gPSAmc3RvcmUuc2luOworCQltZW1zZXQoc2luLCAwLCBzaXpl
b2YoKnNpbikpOworCQlzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lO
X0xFTgorCQlzaW4tPnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRp
ZgorCQlzaW4tPnNpbl9hZGRyLnNfYWRkciA9IHY0YWRkci0+YWRkcjsKKwkJaWYgKHNpbi0+c2lu
X2FkZHIuc19hZGRyID09IElOQUREUl9BTlkpCisJCQl6ZXJvX2FkZHJlc3MgPSAxOworCQlTQ1RQ
REJHKFNDVFBfREVCVUdfQVNDT05GMSwgInByb2Nlc3NfYXNjb25mX3NldF9wcmltYXJ5OiAiKTsK
KwkJU0NUUERCR19BRERSKFNDVFBfREVCVUdfQVNDT05GMSwgc2EpOworCQlicmVhazsKKyNlbmRp
ZgorI2lmZGVmIElORVQ2CisJY2FzZSBTQ1RQX0lQVjZfQUREUkVTUzoKKwkJaWYgKHBhcmFtX2xl
bmd0aCAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pKSB7CisJCQkvKiBpbnZh
bGlkIHBhcmFtIHNpemUgKi8KKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJdjZhZGRyID0gKHN0
cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICopcGg7CisJCXNpbjYgPSAmc3RvcmUuc2luNjsKKwkJ
bWVtc2V0KHNpbjYsIDAsIHNpemVvZigqc2luNikpOworCQlzaW42LT5zaW42X2ZhbWlseSA9IEFG
X0lORVQ2OworI2lmZGVmIEhBVkVfU0lONl9MRU4KKwkJc2luNi0+c2luNl9sZW4gPSBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwkJbWVtY3B5KChjYWRkcl90KSZzaW42LT5z
aW42X2FkZHIsIHY2YWRkci0+YWRkciwKKwkJICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsK
KwkJaWYgKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzaW42LT5zaW42X2FkZHIpKQorCQkJemVy
b19hZGRyZXNzID0gMTsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJwcm9jZXNzX2Fz
Y29uZl9zZXRfcHJpbWFyeTogIik7CisJCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX0FTQ09ORjEs
IHNhKTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQltX3JlcGx5ID0gc2N0cF9hc2Nv
bmZfZXJyb3JfcmVzcG9uc2UoYXBoLT5jb3JyZWxhdGlvbl9pZCwKKwkJICAgIFNDVFBfQ0FVU0Vf
VU5SRVNPTFZBQkxFX0FERFIsICh1aW50OF90ICopIGFwaCwKKwkJICAgIGFwYXJhbV9sZW5ndGgp
OworCQlyZXR1cm4gKG1fcmVwbHkpOworCX0KKworCS8qIGlmIDAuMC4wLjAvOjowLCB1c2UgdGhl
IHNvdXJjZSBhZGRyZXNzIGluc3RlYWQgKi8KKwlpZiAoemVyb19hZGRyZXNzICYmIFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9uYXRfZnJpZW5kbHkpKSB7CisJCXNhID0gc3JjOworCQlTQ1RQREJHKFND
VFBfREVCVUdfQVNDT05GMSwKKwkJCSJwcm9jZXNzX2FzY29uZl9zZXRfcHJpbWFyeTogdXNpbmcg
c291cmNlIGFkZHIgIik7CisJCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX0FTQ09ORjEsIHNyYyk7
CisJfQorCS8qIHNldCB0aGUgcHJpbWFyeSBhZGRyZXNzICovCisJaWYgKHNjdHBfc2V0X3ByaW1h
cnlfYWRkcihzdGNiLCBzYSwgTlVMTCkgPT0gMCkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVND
T05GMSwKKwkJCSJwcm9jZXNzX2FzY29uZl9zZXRfcHJpbWFyeTogcHJpbWFyeSBhZGRyZXNzIHNl
dFxuIik7CisJCS8qIG5vdGlmeSB1cHBlciBsYXllciAqLworCQlzY3RwX3VscF9ub3RpZnkoU0NU
UF9OT1RJRllfQVNDT05GX1NFVF9QUklNQVJZLCBzdGNiLCAwLCBzYSwgU0NUUF9TT19OT1RfTE9D
S0VEKTsKKwkJaWYgKChzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24tPmRlc3Rfc3RhdGUg
JiBTQ1RQX0FERFJfUkVBQ0hBQkxFKSAmJgorCQkgICAgKCEoc3RjYi0+YXNvYy5wcmltYXJ5X2Rl
c3RpbmF0aW9uLT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1BGKSkgJiYKKwkJICAgIChzdGNiLT5h
c29jLmFsdGVybmF0ZSkpIHsKKwkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihzdGNiLT5hc29jLmFs
dGVybmF0ZSk7CisJCQlzdGNiLT5hc29jLmFsdGVybmF0ZSA9IE5VTEw7CisJCX0KKwkJaWYgKHJl
c3BvbnNlX3JlcXVpcmVkKSB7CisJCQltX3JlcGx5ID0gc2N0cF9hc2NvbmZfc3VjY2Vzc19yZXNw
b25zZShhcGgtPmNvcnJlbGF0aW9uX2lkKTsKKwkJfQorCQkvKiBNb2JpbGl0eSBhZGFwdGF0aW9u
LgorCQkgICBJZGVhbGx5LCB3aGVuIHRoZSByZWNlcHRpb24gb2YgU0VUIFBSSU1BUlkgd2l0aCBE
RUxFVEUgSVAKKwkJICAgQUREUkVTUyBvZiB0aGUgcHJldmlvdXMgcHJpbWFyeSBkZXN0aW5hdGlv
biwgdW5hY2tub3dsZWRnZWQKKwkJICAgREFUQSBhcmUgcmV0cmFuc21pdHRlZCBpbW1lZGlhdGVs
eSB0byB0aGUgbmV3IHByaW1hcnkKKwkJICAgZGVzdGluYXRpb24gZm9yIHNlYW1sZXNzIGhhbmRv
dmVyLgorCQkgICBJZiB0aGUgZGVzdGluYXRpb24gaXMgVU5DT05GSVJNRUQgYW5kIG1hcmtlZCB0
byBSRVFfUFJJTSwKKwkJICAgVGhlIHJldHJhbnNtaXNzaW9uIG9jY3VyIHdoZW4gcmVjZXB0aW9u
IG9mIHRoZQorCQkgICBIRUFSVEJFQVQtQUNLLiAgKFNlZSBzY3RwX2hhbmRsZV9oZWFydGJlYXRf
YWNrIGluCisJCSAgIHNjdHBfaW5wdXQuYykKKwkJICAgQWxzbywgd2hlbiBjaGFuZ2Ugb2YgdGhl
IHByaW1hcnkgZGVzdGluYXRpb24sIGl0IGlzIGJldHRlcgorCQkgICB0aGF0IGFsbCBzdWJzZXF1
ZW50IG5ldyBEQVRBIGNvbnRhaW5pbmcgYWxyZWFkeSBxdWV1ZWQgREFUQQorCQkgICBhcmUgdHJh
bnNtaXR0ZWQgdG8gdGhlIG5ldyBwcmltYXJ5IGRlc3RpbmF0aW9uLiAoYnkgbWljY2hpZSkKKwkJ
ICovCisJCWlmICgoc2N0cF9pc19tb2JpbGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsCisJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfTU9CSUxJVFlfQkFTRSkgfHwK
KwkJICAgIHNjdHBfaXNfbW9iaWxpdHlfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLAorCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfTU9CSUxJVFlfRkFTVEhBTkRPRkYpKSAm
JgorCQkgICAgc2N0cF9pc19tb2JpbGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsCisJCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9NT0JJTElUWV9QUklNX0RFTEVURUQp
ICYmCisJCSAgICAoc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLT5kZXN0X3N0YXRlICYK
KwkJICAgICBTQ1RQX0FERFJfVU5DT05GSVJNRUQpID09IDApIHsKKwkJCXNjdHBfdGltZXJfc3Rv
cChTQ1RQX1RJTUVSX1RZUEVfUFJJTV9ERUxFVEVELAorCQkJICAgICAgICAgICAgICAgIHN0Y2It
PnNjdHBfZXAsIHN0Y2IsIE5VTEwsCisJCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBf
QVNDT05GICsgU0NUUF9MT0NfMSk7CisJCQlpZiAoc2N0cF9pc19tb2JpbGl0eV9mZWF0dXJlX29u
KHN0Y2ItPnNjdHBfZXAsCisJCQkJCVNDVFBfTU9CSUxJVFlfRkFTVEhBTkRPRkYpKSB7CisJCQkJ
c2N0cF9hc3NvY19pbW1lZGlhdGVfcmV0cmFucyhzdGNiLAorCQkJCQkJc3RjYi0+YXNvYy5wcmlt
YXJ5X2Rlc3RpbmF0aW9uKTsKKwkJCX0KKwkJCWlmIChzY3RwX2lzX21vYmlsaXR5X2ZlYXR1cmVf
b24oc3RjYi0+c2N0cF9lcCwKKwkJCQkJU0NUUF9NT0JJTElUWV9CQVNFKSkgeworCQkJCXNjdHBf
bW92ZV9jaHVua3NfZnJvbV9uZXQoc3RjYiwKKwkJCQkJCXN0Y2ItPmFzb2MuZGVsZXRlZF9wcmlt
YXJ5KTsKKwkJCX0KKwkJCXNjdHBfZGVsZXRlX3ByaW1fdGltZXIoc3RjYi0+c2N0cF9lcCwgc3Rj
Yik7CisJCX0KKwl9IGVsc2UgeworCQkvKiBjb3VsZG4ndCBzZXQgdGhlIHJlcXVlc3RlZCBwcmlt
YXJ5IGFkZHJlc3MhICovCisJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAorCQkJInByb2Nl
c3NfYXNjb25mX3NldF9wcmltYXJ5OiBzZXQgcHJpbWFyeSBmYWlsZWQhXG4iKTsKKwkJLyogbXVz
dCBoYXZlIGJlZW4gYW4gaW52YWxpZCBhZGRyZXNzLCBzbyByZXBvcnQgKi8KKwkJbV9yZXBseSA9
IHNjdHBfYXNjb25mX2Vycm9yX3Jlc3BvbnNlKGFwaC0+Y29ycmVsYXRpb25faWQsCisJCSAgICBT
Q1RQX0NBVVNFX1VOUkVTT0xWQUJMRV9BRERSLCAodWludDhfdCAqKSBhcGgsCisJCSAgICBhcGFy
YW1fbGVuZ3RoKTsKKwl9CisKKwlyZXR1cm4gKG1fcmVwbHkpOworfQorCisvKgorICogaGFuZGxl
cyBhbiBBU0NPTkYgY2h1bmsuCisgKiBpZiBhbGwgcGFyYW1ldGVycyBhcmUgcHJvY2Vzc2VkIG9r
LCBzZW5kIGEgcGxhaW4gKGVtcHR5KSBBU0NPTkYtQUNLCisgKi8KK3ZvaWQKK3NjdHBfaGFuZGxl
X2FzY29uZihzdHJ1Y3QgbWJ1ZiAqbSwgdW5zaWduZWQgaW50IG9mZnNldCwKKyAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNyYywKKwkJICAgc3RydWN0IHNjdHBfYXNjb25mX2No
dW5rICpjcCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkgICBpbnQgZmlyc3QpCit7CisJc3Ry
dWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJdWludDMyX3Qgc2VyaWFsX251bTsKKwlzdHJ1
Y3QgbWJ1ZiAqbiwgKm1fYWNrLCAqbV9yZXN1bHQsICptX3RhaWw7CisJc3RydWN0IHNjdHBfYXNj
b25mX2Fja19jaHVuayAqYWNrX2NwOworCXN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkciAqYXBo
OworCXN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICpwX2FkZHI7CisJdW5zaWduZWQgaW50IGFz
Y29uZl9saW1pdCwgY250OworCWludCBlcnJvciA9IDA7CQkvKiBkaWQgYW4gZXJyb3Igb2NjdXI/
ICovCisKKwkvKiBhc2NvbmYgcGFyYW0gYnVmZmVyICovCisJdWludDhfdCBhcGFyYW1fYnVmW1ND
VFBfUEFSQU1fQlVGRkVSX1NJWkVdOworCXN0cnVjdCBzY3RwX2FzY29uZl9hY2sgKmFjaywgKmFj
a19uZXh0OworCisJLyogdmVyaWZ5IG1pbmltdW0gbGVuZ3RoICovCisJaWYgKG50b2hzKGNwLT5j
aC5jaHVua19sZW5ndGgpIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9jaHVuaykpIHsKKwkJ
U0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCQkiaGFuZGxlX2FzY29uZjogY2h1bmsgdG9v
IHNtYWxsID0gJXhoXG4iLAorCQkJbnRvaHMoY3AtPmNoLmNodW5rX2xlbmd0aCkpOworCQlyZXR1
cm47CisJfQorCWFzb2MgPSAmc3RjYi0+YXNvYzsKKwlzZXJpYWxfbnVtID0gbnRvaGwoY3AtPnNl
cmlhbF9udW1iZXIpOworCisJaWYgKFNDVFBfVFNOX0dFKGFzb2MtPmFzY29uZl9zZXFfaW4sIHNl
cmlhbF9udW0pKSB7CisJCS8qIGdvdCBhIGR1cGxpY2F0ZSBBU0NPTkYgKi8KKwkJU0NUUERCRyhT
Q1RQX0RFQlVHX0FTQ09ORjEsCisJCQkiaGFuZGxlX2FzY29uZjogZ290IGR1cGxpY2F0ZSBzZXJp
YWwgbnVtYmVyID0gJXhoXG4iLAorCQkJc2VyaWFsX251bSk7CisJCXJldHVybjsKKwl9IGVsc2Ug
aWYgKHNlcmlhbF9udW0gIT0gKGFzb2MtPmFzY29uZl9zZXFfaW4gKyAxKSkgeworCQlTQ1RQREJH
KFNDVFBfREVCVUdfQVNDT05GMSwgImhhbmRsZV9hc2NvbmY6IGluY29ycmVjdCBzZXJpYWwgbnVt
YmVyID0gJXhoIChleHBlY3RlZCBuZXh0ID0gJXhoKVxuIiwKKwkJCXNlcmlhbF9udW0sIGFzb2Mt
PmFzY29uZl9zZXFfaW4gKyAxKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGl0J3MgdGhlIGV4cGVj
dGVkICJuZXh0IiBzZXF1ZW5jZSBudW1iZXIsIHNvIHByb2Nlc3MgaXQgKi8KKwlhc29jLT5hc2Nv
bmZfc2VxX2luID0gc2VyaWFsX251bTsJLyogdXBkYXRlIHNlcXVlbmNlICovCisJLyogZ2V0IGxl
bmd0aCBvZiBhbGwgdGhlIHBhcmFtJ3MgaW4gdGhlIEFTQ09ORiAqLworCWFzY29uZl9saW1pdCA9
IG9mZnNldCArIG50b2hzKGNwLT5jaC5jaHVua19sZW5ndGgpOworCVNDVFBEQkcoU0NUUF9ERUJV
R19BU0NPTkYxLAorCQkiaGFuZGxlX2FzY29uZjogYXNjb25mX2xpbWl0PSV1LCBzZXF1ZW5jZT0l
eGhcbiIsCisJCWFzY29uZl9saW1pdCwgc2VyaWFsX251bSk7CisKKwlpZiAoZmlyc3QpIHsKKwkJ
LyogZGVsZXRlIG9sZCBjYWNoZSAqLworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwiaGFu
ZGxlX2FzY29uZjogTm93IHByb2Nlc3NpbmcgZmlyc3QgQVNDT05GLiBUcnkgdG8gZGVsZXRlIG9s
ZCBjYWNoZVxuIik7CisKKwkJVEFJTFFfRk9SRUFDSF9TQUZFKGFjaywgJmFzb2MtPmFzY29uZl9h
Y2tfc2VudCwgbmV4dCwgYWNrX25leHQpIHsKKwkJCWlmIChhY2stPnNlcmlhbF9udW1iZXIgPT0g
c2VyaWFsX251bSkKKwkJCQlicmVhazsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCJo
YW5kbGVfYXNjb25mOiBkZWxldGUgb2xkKCV1KSA8IGZpcnN0KCV1KVxuIiwKKwkJCSAgICBhY2st
PnNlcmlhbF9udW1iZXIsIHNlcmlhbF9udW0pOworCQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5hc2Nv
bmZfYWNrX3NlbnQsIGFjaywgbmV4dCk7CisJCQlpZiAoYWNrLT5kYXRhICE9IE5VTEwpIHsKKwkJ
CQlzY3RwX21fZnJlZW0oYWNrLT5kYXRhKTsKKwkJCX0KKwkJCVNDVFBfWk9ORV9GUkVFKFNDVFBf
QkFTRV9JTkZPKGlwaV96b25lX2FzY29uZl9hY2spLCBhY2spOworCQl9CisJfQorCisJbV9hY2sg
PSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9hY2tfY2h1
bmspLCAwLAorCQkJCSAgICAgIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwlpZiAobV9hY2sgPT0g
TlVMTCkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwKKwkJCSJoYW5kbGVfYXNjb25m
OiBjb3VsZG4ndCBnZXQgbWJ1ZiFcbiIpOworCQlyZXR1cm47CisJfQorCW1fdGFpbCA9IG1fYWNr
OwkJLyogY3VycmVudCByZXBseSBjaGFpbidzIHRhaWwgKi8KKworCS8qIGZpbGwgaW4gQVNDT05G
LUFDSyBoZWFkZXIgKi8KKwlhY2tfY3AgPSBtdG9kKG1fYWNrLCBzdHJ1Y3Qgc2N0cF9hc2NvbmZf
YWNrX2NodW5rICopOworCWFja19jcC0+Y2guY2h1bmtfdHlwZSA9IFNDVFBfQVNDT05GX0FDSzsK
KwlhY2tfY3AtPmNoLmNodW5rX2ZsYWdzID0gMDsKKwlhY2tfY3AtPnNlcmlhbF9udW1iZXIgPSBo
dG9ubChzZXJpYWxfbnVtKTsKKwkvKiBzZXQgaW5pdGlhbCBsZW5ndGhzIChlZy4ganVzdCBhbiBB
U0NPTkYtQUNLKSwgbnRvaHggYXQgdGhlIGVuZCEgKi8KKwlTQ1RQX0JVRl9MRU4obV9hY2spID0g
c2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9hY2tfY2h1bmspOworCWFja19jcC0+Y2guY2h1bmtf
bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9hY2tfY2h1bmspOworCisJLyogc2tp
cCB0aGUgbG9va3VwIGFkZHJlc3MgcGFyYW1ldGVyICovCisJb2Zmc2V0ICs9IHNpemVvZihzdHJ1
Y3Qgc2N0cF9hc2NvbmZfY2h1bmspOworCXBfYWRkciA9IChzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9w
YXJhbSAqKXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LCBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1o
ZHIpLCAodWludDhfdCAqKSZhcGFyYW1fYnVmKTsKKwlpZiAocF9hZGRyID09IE5VTEwpIHsKKwkJ
U0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCQkiaGFuZGxlX2FzY29uZjogY291bGRuJ3Qg
Z2V0IGxvb2t1cCBhZGRyIVxuIik7CisJCS8qIHJlc3BvbmQgd2l0aCBhIG1pc3NpbmcvaW52YWxp
ZCBtYW5kYXRvcnkgcGFyYW1ldGVyIGVycm9yICovCisJCXNjdHBfbV9mcmVlbShtX2Fjayk7CisJ
CXJldHVybjsKKwl9CisJLyogc2tpcCBsb29rdXAgYWRkciAqLworCW9mZnNldCArPSBTQ1RQX1NJ
WkUzMihudG9ocyhwX2FkZHItPnBoLnBhcmFtX2xlbmd0aCkpOworCS8qIGdldCBwb2ludGVyIHRv
IGZpcnN0IGFzY29uZiBwYXJhbSBpbiBBU0NPTkYgKi8KKwlhcGggPSAoc3RydWN0IHNjdHBfYXNj
b25mX3BhcmFtaGRyICopc2N0cF9tX2dldHB0cihtLCBvZmZzZXQsIHNpemVvZihzdHJ1Y3Qgc2N0
cF9hc2NvbmZfcGFyYW1oZHIpLCAodWludDhfdCAqKSZhcGFyYW1fYnVmKTsKKwlpZiAoYXBoID09
IE5VTEwpIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJFbXB0eSBBU0NPTkYgcmVj
ZWl2ZWQ/XG4iKTsKKwkJZ290byBzZW5kX3JlcGx5OworCX0KKwkvKiBwcm9jZXNzIHRocm91Z2gg
YWxsIHBhcmFtZXRlcnMgKi8KKwljbnQgPSAwOworCXdoaWxlIChhcGggIT0gTlVMTCkgeworCQl1
bnNpZ25lZCBpbnQgcGFyYW1fbGVuZ3RoLCBwYXJhbV90eXBlOworCisJCXBhcmFtX3R5cGUgPSBu
dG9ocyhhcGgtPnBoLnBhcmFtX3R5cGUpOworCQlwYXJhbV9sZW5ndGggPSBudG9ocyhhcGgtPnBo
LnBhcmFtX2xlbmd0aCk7CisJCWlmIChvZmZzZXQgKyBwYXJhbV9sZW5ndGggPiBhc2NvbmZfbGlt
aXQpIHsKKwkJCS8qIHBhcmFtZXRlciBnb2VzIGJleW9uZCBlbmQgb2YgY2h1bmshICovCisJCQlz
Y3RwX21fZnJlZW0obV9hY2spOworCQkJcmV0dXJuOworCQl9CisJCW1fcmVzdWx0ID0gTlVMTDsK
KworCQlpZiAocGFyYW1fbGVuZ3RoID4gc2l6ZW9mKGFwYXJhbV9idWYpKSB7CisJCQlTQ1RQREJH
KFNDVFBfREVCVUdfQVNDT05GMSwgImhhbmRsZV9hc2NvbmY6IHBhcmFtIGxlbmd0aCAoJXUpIGxh
cmdlciB0aGFuIGJ1ZmZlciBzaXplIVxuIiwgcGFyYW1fbGVuZ3RoKTsKKwkJCXNjdHBfbV9mcmVl
bShtX2Fjayk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKHBhcmFtX2xlbmd0aCA8IHNpemVvZihz
dHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIpKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVND
T05GMSwgImhhbmRsZV9hc2NvbmY6IHBhcmFtIGxlbmd0aCAoJXUpIHRvbyBzaG9ydFxuIiwgcGFy
YW1fbGVuZ3RoKTsKKwkJCXNjdHBfbV9mcmVlbShtX2Fjayk7CisJCQlyZXR1cm47CisJCX0KKwkJ
LyogZ2V0IHRoZSBlbnRpcmUgcGFyYW1ldGVyICovCisJCWFwaCA9IChzdHJ1Y3Qgc2N0cF9hc2Nv
bmZfcGFyYW1oZHIgKilzY3RwX21fZ2V0cHRyKG0sIG9mZnNldCwgcGFyYW1fbGVuZ3RoLCBhcGFy
YW1fYnVmKTsKKwkJaWYgKGFwaCA9PSBOVUxMKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVND
T05GMSwgImhhbmRsZV9hc2NvbmY6IGNvdWxkbid0IGdldCBlbnRpcmUgcGFyYW1cbiIpOworCQkJ
c2N0cF9tX2ZyZWVtKG1fYWNrKTsKKwkJCXJldHVybjsKKwkJfQorCQlzd2l0Y2ggKHBhcmFtX3R5
cGUpIHsKKwkJY2FzZSBTQ1RQX0FERF9JUF9BRERSRVNTOgorCQkJbV9yZXN1bHQgPSBzY3RwX3By
b2Nlc3NfYXNjb25mX2FkZF9pcChzcmMsIGFwaCwgc3RjYiwKKwkJCSAgICAoY250IDwgU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2hiX21heGJ1cnN0KSksIGVycm9yKTsKKwkJCWNudCsrOworCQkJYnJl
YWs7CisJCWNhc2UgU0NUUF9ERUxfSVBfQUREUkVTUzoKKwkJCW1fcmVzdWx0ID0gc2N0cF9wcm9j
ZXNzX2FzY29uZl9kZWxldGVfaXAoc3JjLCBhcGgsIHN0Y2IsCisJCQkgICAgZXJyb3IpOworCQkJ
YnJlYWs7CisJCWNhc2UgU0NUUF9FUlJPUl9DQVVTRV9JTkQ6CisJCQkvKiBub3QgdmFsaWQgaW4g
YW4gQVNDT05GIGNodW5rICovCisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX1NFVF9QUklNX0FERFI6
CisJCQltX3Jlc3VsdCA9IHNjdHBfcHJvY2Vzc19hc2NvbmZfc2V0X3ByaW1hcnkoc3JjLCBhcGgs
CisJCQkgICAgc3RjYiwgZXJyb3IpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9OQVRfVlRBR1M6
CisJCSAgICAgICAgU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJoYW5kbGVfYXNjb25mOiBz
ZWVzIGEgTkFUIFZUQUcgc3RhdGUgcGFyYW1ldGVyXG4iKTsKKwkJICAgICAgICBicmVhazsKKwkJ
Y2FzZSBTQ1RQX1NVQ0NFU1NfUkVQT1JUOgorCQkJLyogbm90IHZhbGlkIGluIGFuIEFTQ09ORiBj
aHVuayAqLworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9VTFBfQURBUFRBVElPTjoKKwkJCS8qIEZJ
WCAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpZiAoKHBhcmFtX3R5cGUgJiAweDgwMDAp
ID09IDApIHsKKwkJCQkvKiBCZWVuIHRvbGQgdG8gU1RPUCBhdCB0aGlzIHBhcmFtICovCisJCQkJ
YXNjb25mX2xpbWl0ID0gb2Zmc2V0OworCQkJCS8qCisJCQkJICogRklYIEZJWCAtIFdlIG5lZWQg
dG8gY2FsbAorCQkJCSAqIHNjdHBfYXJldGhlcmVfdW5yZWNvZ25pemVkX3BhcmFtZXRlcnMoKQor
CQkJCSAqIHRvIGdldCBhIG9wZXJyIGFuZCBzZW5kIGl0IGZvciBhbnkKKwkJCQkgKiBwYXJhbSdz
IHdpdGggdGhlIDB4NDAwMCBiaXQgc2V0IE9SIGRvIGl0CisJCQkJICogaGVyZSBvdXJzZWx2ZXMu
Li4gbm90ZSB3ZSBzdGlsbCBtdXN0IFNUT1AKKwkJCQkgKiBpZiB0aGUgMHg4MDAwIGJpdCBpcyBj
bGVhci4KKwkJCQkgKi8KKwkJCX0KKwkJCS8qIHVua25vd24vaW52YWxpZCBwYXJhbSB0eXBlICov
CisJCQlicmVhazsKKwkJfSAvKiBzd2l0Y2ggKi8KKworCQkvKiBhZGQgYW55IChlcnJvcikgcmVz
dWx0IHRvIHRoZSByZXBseSBtYnVmIGNoYWluICovCisJCWlmIChtX3Jlc3VsdCAhPSBOVUxMKSB7
CisJCQlTQ1RQX0JVRl9ORVhUKG1fdGFpbCkgPSBtX3Jlc3VsdDsKKwkJCW1fdGFpbCA9IG1fcmVz
dWx0OworCQkJYWNrX2NwLT5jaC5jaHVua19sZW5ndGggKz0gU0NUUF9CVUZfTEVOKG1fcmVzdWx0
KTsKKwkJCS8qIHNldCBmbGFnIHRvIGZvcmNlIHN1Y2Nlc3MgcmVwb3J0cyAqLworCQkJZXJyb3Ig
PSAxOworCQl9CisJCW9mZnNldCArPSBTQ1RQX1NJWkUzMihwYXJhbV9sZW5ndGgpOworCQkvKiB1
cGRhdGUgcmVtYWluaW5nIEFTQ09ORiBtZXNzYWdlIGxlbmd0aCB0byBwcm9jZXNzICovCisJCWlm
IChvZmZzZXQgPj0gYXNjb25mX2xpbWl0KSB7CisJCQkvKiBubyBtb3JlIGRhdGEgaW4gdGhlIG1i
dWYgY2hhaW4gKi8KKwkJCWJyZWFrOworCQl9CisJCS8qIGdldCBwb2ludGVyIHRvIG5leHQgYXNj
b25mIHBhcmFtICovCisJCWFwaCA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgKilzY3Rw
X21fZ2V0cHRyKG0sIG9mZnNldCwKKwkJICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFy
YW1oZHIpLAorCQkgICAgKHVpbnQ4X3QgKikmYXBhcmFtX2J1Zik7CisJCWlmIChhcGggPT0gTlVM
TCkgeworCQkJLyogY2FuJ3QgZ2V0IGFuIGFzY29uZiBwYXJhbWhkciAqLworCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX0FTQ09ORjEsICJoYW5kbGVfYXNjb25mOiBjYW4ndCBnZXQgYXNjb25mIHBhcmFt
IGhkciFcbiIpOworCQkJLyogRklYIE1FIC0gYWRkIGVycm9yIGhlcmUuLi4gKi8KKwkJfQorCX0K
KworIHNlbmRfcmVwbHk6CisJYWNrX2NwLT5jaC5jaHVua19sZW5ndGggPSBodG9ucyhhY2tfY3At
PmNoLmNodW5rX2xlbmd0aCk7CisJLyogc2F2ZSB0aGUgQVNDT05GLUFDSyByZXBseSAqLworCWFj
ayA9IFNDVFBfWk9ORV9HRVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfYXNjb25mX2FjayksCisJ
ICAgIHN0cnVjdCBzY3RwX2FzY29uZl9hY2spOworCWlmIChhY2sgPT0gTlVMTCkgeworCQlzY3Rw
X21fZnJlZW0obV9hY2spOworCQlyZXR1cm47CisJfQorCWFjay0+c2VyaWFsX251bWJlciA9IHNl
cmlhbF9udW07CisJYWNrLT5sYXN0X3NlbnRfdG8gPSBOVUxMOworCWFjay0+ZGF0YSA9IG1fYWNr
OworCWFjay0+bGVuID0gMDsKKwlmb3IgKG4gPSBtX2FjazsgbiAhPSBOVUxMOyBuID0gU0NUUF9C
VUZfTkVYVChuKSkgeworCQlhY2stPmxlbiArPSBTQ1RQX0JVRl9MRU4obik7CisJfQorCVRBSUxR
X0lOU0VSVF9UQUlMKCZzdGNiLT5hc29jLmFzY29uZl9hY2tfc2VudCwgYWNrLCBuZXh0KTsKKwor
CS8qIHNlZSBpZiBsYXN0X2NvbnRyb2xfY2h1bmtfZnJvbSBpcyBzZXQgcHJvcGVybHkgKHVzZSBJ
UCBzcmMgYWRkcikgKi8KKwlpZiAoc3RjYi0+YXNvYy5sYXN0X2NvbnRyb2xfY2h1bmtfZnJvbSA9
PSBOVUxMKSB7CisJCS8qCisJCSAqIHRoaXMgY291bGQgaGFwcGVuIGlmIHRoZSBzb3VyY2UgYWRk
cmVzcyB3YXMganVzdCBuZXdseQorCQkgKiBhZGRlZAorCQkgKi8KKwkJU0NUUERCRyhTQ1RQX0RF
QlVHX0FTQ09ORjEsICJoYW5kbGVfYXNjb25mOiBsb29raW5nIHVwIG5ldCBmb3IgSVAgc291cmNl
IGFkZHJlc3NcbiIpOworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgIkxvb2tpbmcgZm9y
IElQIHNvdXJjZTogIik7CisJCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX0FTQ09ORjEsIHNyYyk7
CisJCS8qIGxvb2sgdXAgdGhlIGZyb20gYWRkcmVzcyAqLworCQlzdGNiLT5hc29jLmxhc3RfY29u
dHJvbF9jaHVua19mcm9tID0gc2N0cF9maW5kbmV0KHN0Y2IsIHNyYyk7CisjaWZkZWYgU0NUUF9E
RUJVRworCQlpZiAoc3RjYi0+YXNvYy5sYXN0X2NvbnRyb2xfY2h1bmtfZnJvbSA9PSBOVUxMKSB7
CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgImhhbmRsZV9hc2NvbmY6IElQIHNvdXJj
ZSBhZGRyZXNzIG5vdCBmb3VuZD8hXG4iKTsKKwkJfQorI2VuZGlmCisJfQorfQorCisvKgorICog
ZG9lcyB0aGUgYWRkcmVzcyBtYXRjaD8gcmV0dXJucyAwIGlmIG5vdCwgMSBpZiBzbworICovCitz
dGF0aWMgdWludDMyX3QKK3NjdHBfYXNjb25mX2FkZHJfbWF0Y2goc3RydWN0IHNjdHBfYXNjb25m
X2FkZHIgKmFhLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhKQoreworCXN3aXRjaCAoc2EtPnNhX2ZhbWls
eSkgeworI2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKwl7CisJCS8qIFhYWCBzY29wZWlk
ICovCisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAq
KXNhOworCisJCWlmICgoYWEtPmFwLmFkZHJwLnBoLnBhcmFtX3R5cGUgPT0gU0NUUF9JUFY2X0FE
RFJFU1MpICYmCisJCSAgICAobWVtY21wKCZhYS0+YXAuYWRkcnAuYWRkciwgJnNpbjYtPnNpbjZf
YWRkciwKKwkJICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSA9PSAwKSkgeworCQkJcmV0dXJu
ICgxKTsKKwkJfQorCQlicmVhazsKKwl9CisjZW5kaWYKKyNpZmRlZiBJTkVUCisJY2FzZSBBRl9J
TkVUOgorCXsKKwkJc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2lu
ICopc2E7CisKKwkJaWYgKChhYS0+YXAuYWRkcnAucGgucGFyYW1fdHlwZSA9PSBTQ1RQX0lQVjRf
QUREUkVTUykgJiYKKwkJICAgIChtZW1jbXAoJmFhLT5hcC5hZGRycC5hZGRyLCAmc2luLT5zaW5f
YWRkciwKKwkJICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpID09IDApKSB7CisJCQlyZXR1cm4g
KDEpOworCQl9CisJCWJyZWFrOworCX0KKyNlbmRpZgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0K
KwlyZXR1cm4gKDApOworfQorCisvKgorICogZG9lcyB0aGUgYWRkcmVzcyBtYXRjaD8gcmV0dXJu
cyAwIGlmIG5vdCwgMSBpZiBzbworICovCitzdGF0aWMgdWludDMyX3QKK3NjdHBfYWRkcl9tYXRj
aChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGgsIHN0cnVjdCBzb2NrYWRkciAqc2EpCit7CisjaWYg
ZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQorCXVpbnQxNl90IHBhcmFtX3R5cGUsIHBh
cmFtX2xlbmd0aDsKKworCXBhcmFtX3R5cGUgPSBudG9ocyhwaC0+cGFyYW1fdHlwZSk7CisJcGFy
YW1fbGVuZ3RoID0gbnRvaHMocGgtPnBhcmFtX2xlbmd0aCk7CisjZW5kaWYKKwlzd2l0Y2ggKHNh
LT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJeworCQkvKiBY
WFggc2NvcGVpZCAqLworCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42ID0gKHN0cnVjdCBzb2Nr
YWRkcl9pbjYgKilzYTsKKwkJc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKnY2YWRkcjsKKwor
CQl2NmFkZHIgPSAoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKilwaDsKKwkJaWYgKChwYXJh
bV90eXBlID09IFNDVFBfSVBWNl9BRERSRVNTKSAmJgorCQkgICAgKHBhcmFtX2xlbmd0aCA9PSBz
aXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pKSAmJgorCQkgICAgKG1lbWNtcCgmdjZh
ZGRyLT5hZGRyLCAmc2luNi0+c2luNl9hZGRyLAorCQkgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRk
cikpID09IDApKSB7CisJCQlyZXR1cm4gKDEpOworCQl9CisJCWJyZWFrOworCX0KKyNlbmRpZgor
I2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisJeworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNp
biA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTsKKwkJc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFy
YW0gKnY0YWRkcjsKKworCQl2NGFkZHIgPSAoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0gKilw
aDsKKwkJaWYgKChwYXJhbV90eXBlID09IFNDVFBfSVBWNF9BRERSRVNTKSAmJgorCQkgICAgKHBh
cmFtX2xlbmd0aCA9PSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0pKSAmJgorCQkg
ICAgKG1lbWNtcCgmdjRhZGRyLT5hZGRyLCAmc2luLT5zaW5fYWRkciwKKwkJICAgIHNpemVvZihz
dHJ1Y3QgaW5fYWRkcikpID09IDApKSB7CisJCQlyZXR1cm4gKDEpOworCQl9CisJCWJyZWFrOwor
CX0KKyNlbmRpZgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gKDApOworfQorLyoK
KyAqIENsZWFudXAgZm9yIG5vbi1yZXNwb25kZWQvT1AgRVJSJ2QgQVNDT05GCisgKi8KK3ZvaWQK
K3NjdHBfYXNjb25mX2NsZWFudXAoc3RydWN0IHNjdHBfdGNiICpzdGNiKQoreworCS8qCisJICog
Y2xlYXIgb3V0IGFueSBleGlzdGluZyBhc2NvbmZzIGdvaW5nIG91dAorCSAqLworCXNjdHBfdGlt
ZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfQVNDT05GLCBzdGNiLT5zY3RwX2VwLCBzdGNiLCBOVUxM
LAorCQkJU0NUUF9GUk9NX1NDVFBfQVNDT05GICsgU0NUUF9MT0NfMik7CisJc3RjYi0+YXNvYy5h
c2NvbmZfc2VxX291dF9hY2tlZCA9IHN0Y2ItPmFzb2MuYXNjb25mX3NlcV9vdXQ7CisJLyogcmVt
b3ZlIHRoZSBvbGQgQVNDT05GIG9uIG91ciBvdXRib3VuZCBxdWV1ZSAqLworCXNjdHBfdG9zc19v
bGRfYXNjb25mKHN0Y2IpOworfQorCisvKgorICogY2xlYW51cCBhbnkgY2FjaGVkIHNvdXJjZSBh
ZGRyZXNzZXMgdGhhdCBtYXkgYmUgdG9wb2xvZ2ljYWxseQorICogaW5jb3JyZWN0IGFmdGVyIGEg
bmV3IGFkZHJlc3MgaGFzIGJlZW4gYWRkZWQgdG8gdGhpcyBpbnRlcmZhY2UuCisgKi8KK3N0YXRp
YyB2b2lkCitzY3RwX2FzY29uZl9uZXRzX2NsZWFudXAoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBz
dHJ1Y3Qgc2N0cF9pZm4gKmlmbikKK3sKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisKKwkvKgor
CSAqIElkZWFsbHksIHdlIHdhbnQgdG8gb25seSBjbGVhciBjYWNoZWQgcm91dGVzIGFuZCBzb3Vy
Y2UgYWRkcmVzc2VzCisJICogdGhhdCBhcmUgdG9wb2xvZ2ljYWxseSBpbmNvcnJlY3QuICBCdXQg
c2luY2UgdGhlcmUgaXMgbm8gZWFzeSB3YXkKKwkgKiB0byBrbm93IHdoZXRoZXIgdGhlIG5ld2x5
IGFkZGVkIGFkZHJlc3Mgb24gdGhlIGlmbiB3b3VsZCBjYXVzZSBhCisJICogcm91dGluZyBjaGFu
Z2UgKGkuZS4gYSBuZXcgZWdyZXNzIGludGVyZmFjZSB3b3VsZCBiZSBjaG9zZW4pCisJICogd2l0
aG91dCBkb2luZyBhIG5ldyByb3V0aW5nIGxvb2t1cCBhbmQgc291cmNlIGFkZHJlc3Mgc2VsZWN0
aW9uLAorCSAqIHdlIHdpbGwgKGZvciBub3cpIGp1c3QgZmx1c2ggYW55IGNhY2hlZCByb3V0ZSB1
c2luZyBhIGRpZmZlcmVudAorCSAqIGlmbiAoYW5kIGNhY2hlZCBzb3VyY2UgYWRkcnMpIGFuZCBs
ZXQgb3V0cHV0IHJlLWNob29zZSB0aGVtIGR1cmluZworCSAqIHRoZSBuZXh0IHNlbmQgb24gdGhh
dCBuZXQuCisJICovCisJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBf
bmV4dCkgeworCQkvKgorCQkgKiBjbGVhciBhbnkgY2FjaGVkIHJvdXRlIChhbmQgY2FjaGVkIHNv
dXJjZSBhZGRyZXNzKSBpZiB0aGUKKwkJICogcm91dGUncyBpbnRlcmZhY2UgaXMgTk9UIHRoZSBz
YW1lIGFzIHRoZSBhZGRyZXNzIGNoYW5nZS4KKwkJICogSWYgaXQncyB0aGUgc2FtZSBpbnRlcmZh
Y2UsIGp1c3QgY2xlYXIgdGhlIGNhY2hlZCBzb3VyY2UKKwkJICogYWRkcmVzcy4KKwkJICovCisJ
CWlmIChTQ1RQX1JPVVRFX0hBU19WQUxJRF9JRk4oJm5ldC0+cm8pICYmCisJCSAgICAoKGlmbiA9
PSBOVUxMKSB8fAorCQkgICAgIChTQ1RQX0dFVF9JRl9JTkRFWF9GUk9NX1JPVVRFKCZuZXQtPnJv
KSAhPSBpZm4tPmlmbl9pbmRleCkpKSB7CisJCQkvKiBjbGVhciBhbnkgY2FjaGVkIHJvdXRlICov
CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJ
CVJPX05IRlJFRSgmbmV0LT5ybyk7CisjZWxzZQorCQkJUlRGUkVFKG5ldC0+cm8ucm9fcnQpOwor
CQkJbmV0LT5yby5yb19ydCA9IE5VTEw7CisjZW5kaWYKKwkJfQorCQkvKiBjbGVhciBhbnkgY2Fj
aGVkIHNvdXJjZSBhZGRyZXNzICovCisJCWlmIChuZXQtPnNyY19hZGRyX3NlbGVjdGVkKSB7CisJ
CQlzY3RwX2ZyZWVfaWZhKG5ldC0+cm8uX3NfYWRkcik7CisJCQluZXQtPnJvLl9zX2FkZHIgPSBO
VUxMOworCQkJbmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDA7CisJCX0KKwl9Cit9CisKK3ZvaWQK
K3NjdHBfYXNzb2NfaW1tZWRpYXRlX3JldHJhbnMoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1
Y3Qgc2N0cF9uZXRzICpkc3RuZXQpCit7CisJaW50IGVycm9yOworCisJaWYgKGRzdG5ldC0+ZGVz
dF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkgeworCQlyZXR1cm47CisJfQorCWlmIChz
dGNiLT5hc29jLmRlbGV0ZWRfcHJpbWFyeSA9PSBOVUxMKSB7CisJCXJldHVybjsKKwl9CisKKwlp
ZiAoIVRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLnNlbnRfcXVldWUpKSB7CisJCVNDVFBEQkcoU0NU
UF9ERUJVR19BU0NPTkYxLCAiYXNzb2NfaW1tZWRpYXRlX3JldHJhbnM6IERlbGV0ZWQgcHJpbWFy
eSBpcyAiKTsKKwkJU0NUUERCR19BRERSKFNDVFBfREVCVUdfQVNDT05GMSwgJnN0Y2ItPmFzb2Mu
ZGVsZXRlZF9wcmltYXJ5LT5yby5fbF9hZGRyLnNhKTsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FT
Q09ORjEsICJDdXJyZW50IFByaW1hcnkgaXMgIik7CisJCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVH
X0FTQ09ORjEsICZzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24tPnJvLl9sX2FkZHIuc2Ep
OworCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX1NFTkQsIHN0Y2ItPnNjdHBfZXAs
IHN0Y2IsCisJCQkJc3RjYi0+YXNvYy5kZWxldGVkX3ByaW1hcnksCisJCQkJU0NUUF9GUk9NX1ND
VFBfQVNDT05GICsgU0NUUF9MT0NfMyk7CisJCXN0Y2ItPmFzb2MubnVtX3NlbmRfdGltZXJzX3Vw
LS07CisJCWlmIChzdGNiLT5hc29jLm51bV9zZW5kX3RpbWVyc191cCA8IDApIHsKKwkJCXN0Y2It
PmFzb2MubnVtX3NlbmRfdGltZXJzX3VwID0gMDsKKwkJfQorCQlTQ1RQX1RDQl9MT0NLX0FTU0VS
VChzdGNiKTsKKwkJZXJyb3IgPSBzY3RwX3Qzcnh0X3RpbWVyKHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
CisJCQkJCXN0Y2ItPmFzb2MuZGVsZXRlZF9wcmltYXJ5KTsKKwkJaWYgKGVycm9yKSB7CisJCQlT
Q1RQX0lOUF9ERUNSX1JFRihzdGNiLT5zY3RwX2VwKTsKKwkJCXJldHVybjsKKwkJfQorCQlTQ1RQ
X1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKyNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKKwkJ
c2N0cF9hdWRpdGluZyg0LCBzdGNiLT5zY3RwX2VwLCBzdGNiLCBzdGNiLT5hc29jLmRlbGV0ZWRf
cHJpbWFyeSk7CisjZW5kaWYKKwkJc2N0cF9jaHVua19vdXRwdXQoc3RjYi0+c2N0cF9lcCwgc3Rj
YiwgU0NUUF9PVVRQVVRfRlJPTV9UMywgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJaWYgKChzdGNi
LT5hc29jLm51bV9zZW5kX3RpbWVyc191cCA9PSAwKSAmJgorCQkgICAgKHN0Y2ItPmFzb2Muc2Vu
dF9xdWV1ZV9jbnQgPiAwKSkgeworCQkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOworCisJ
CQlUQUlMUV9GT1JFQUNIKGNoaywgJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7
CisJCQkJaWYgKGNoay0+d2hvVG8gIT0gTlVMTCkgeworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9
CisJCQlpZiAoY2hrICE9IE5VTEwpIHsKKwkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJf
VFlQRV9TRU5ELCBzdGNiLT5zY3RwX2VwLCBzdGNiLCBjaGstPndob1RvKTsKKwkJCX0KKwkJfQor
CX0KKwlyZXR1cm47Cit9CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9f
QVBQTEVfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorc3RhdGljIGludAorc2N0cF9hc2Nv
bmZfcXVldWVfbWdtdChzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfaWZhICosIHVpbnQx
Nl90KTsKKwordm9pZAorc2N0cF9uZXRfaW1tZWRpYXRlX3JldHJhbnMoc3RydWN0IHNjdHBfdGNi
ICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVu
ayAqY2hrOworCisJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJuZXRfaW1tZWRpYXRlX3Jl
dHJhbnM6IFJUTyBpcyAlZFxuIiwgbmV0LT5SVE8pOworCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJ
TUVSX1RZUEVfU0VORCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAorCSAgICAgICAgICAgICAg
ICBTQ1RQX0ZST01fU0NUUF9BU0NPTkYgKyBTQ1RQX0xPQ180KTsKKwlzdGNiLT5hc29jLmNjX2Z1
bmN0aW9ucy5zY3RwX3NldF9pbml0aWFsX2NjX3BhcmFtKHN0Y2IsIG5ldCk7CisJbmV0LT5lcnJv
cl9jb3VudCA9IDA7CisJVEFJTFFfRk9SRUFDSChjaGssICZzdGNiLT5hc29jLnNlbnRfcXVldWUs
IHNjdHBfbmV4dCkgeworCQlpZiAoY2hrLT53aG9UbyA9PSBuZXQpIHsKKwkJCWlmIChjaGstPnNl
bnQgPCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgeworCQkJCWNoay0+c2VudCA9IFNDVFBfREFUQUdS
QU1fUkVTRU5EOworCQkJCXNjdHBfdWNvdW50X2luY3Ioc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3Jl
dHJhbl9jbnQpOworCQkJCXNjdHBfZmxpZ2h0X3NpemVfZGVjcmVhc2UoY2hrKTsKKwkJCQlzY3Rw
X3RvdGFsX2ZsaWdodF9kZWNyZWFzZShzdGNiLCBjaGspOworCQkJCW5ldC0+bWFya2VkX3JldHJh
bnMrKzsKKwkJCQlzdGNiLT5hc29jLm1hcmtlZF9yZXRyYW5zKys7CisJCQl9CisJCX0KKwl9CisJ
aWYgKG5ldC0+bWFya2VkX3JldHJhbnMpIHsKKwkJc2N0cF9jaHVua19vdXRwdXQoc3RjYi0+c2N0
cF9lcCwgc3RjYiwgU0NUUF9PVVRQVVRfRlJPTV9UMywgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwl9
Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3BhdGhfY2hlY2tfYW5kX3JlYWN0KHN0cnVjdCBzY3Rw
X3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfaWZhICpuZXdpZmEpCit7CisJc3RydWN0IHNjdHBfbmV0
cyAqbmV0OworCWludCBhZGRybnVtLCBjaGFuZ2VkOworCisJLyogICBJZiBudW1iZXIgb2YgbG9j
YWwgdmFsaWQgYWRkcmVzc2VzIGlzIDEsIHRoZSB2YWxpZCBhZGRyZXNzIGlzCisJICAgICBwcm9i
YWJseSBuZXdseSBhZGRlZCBhZGRyZXNzLgorCSAgICAgU2V2ZXJhbCB2YWxpZCBhZGRyZXNzZXMg
aW4gdGhpcyBhc3NvY2lhdGlvbi4gIEEgc291cmNlIGFkZHJlc3MKKwkgICAgIG1heSBub3QgYmUg
Y2hhbmdlZC4gIEFkZGl0aW9uYWxseSwgdGhleSBjYW4gYmUgY29uZmlndXJlZCBvbiBhCisJICAg
ICBzYW1lIGludGVyZmFjZSBhcyAiYWxpYXMiIGFkZHJlc3Nlcy4gIChieSBtaWNjaGllKQorCSAq
LworCWFkZHJudW0gPSBzY3RwX2xvY2FsX2FkZHJfY291bnQoc3RjYik7CisJU0NUUERCRyhTQ1RQ
X0RFQlVHX0FTQ09ORjEsICJwX2NoZWNrX3JlYWN0KCk6ICVkIGxvY2FsIGFkZHJlc3Nlc1xuIiwK
KwkJYWRkcm51bSk7CisJaWYgKGFkZHJudW0gPT0gMSkgeworCQlUQUlMUV9GT1JFQUNIKG5ldCwg
JnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQkvKiBjbGVhciBhbnkgY2FjaGVkIHJv
dXRlIGFuZCBzb3VyY2UgYWRkcmVzcyAqLworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQlST19OSEZSRUUoJm5ldC0+cm8pOworI2Vsc2UKKwkJ
CWlmIChuZXQtPnJvLnJvX3J0KSB7CisJCQkJUlRGUkVFKG5ldC0+cm8ucm9fcnQpOworCQkJCW5l
dC0+cm8ucm9fcnQgPSBOVUxMOworCQkJfQorI2VuZGlmCisJCQlpZiAobmV0LT5zcmNfYWRkcl9z
ZWxlY3RlZCkgeworCQkJCXNjdHBfZnJlZV9pZmEobmV0LT5yby5fc19hZGRyKTsKKwkJCQluZXQt
PnJvLl9zX2FkZHIgPSBOVUxMOworCQkJCW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAwOworCQkJ
fQorCQkJLyogUmV0cmFuc21pdCB1bmFja25vd2xlZGdlZCBEQVRBIGNodW5rcyBpbW1lZGlhdGVs
eSAqLworCQkJaWYgKHNjdHBfaXNfbW9iaWxpdHlfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLAor
CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX01PQklMSVRZX0ZBU1RIQU5E
T0ZGKSkgeworCQkJCXNjdHBfbmV0X2ltbWVkaWF0ZV9yZXRyYW5zKHN0Y2IsIG5ldCk7CisJCQl9
CisJCQkvKiBhbHNvLCBTRVQgUFJJTUFSWSBpcyBtYXliZSBhbHJlYWR5IHNlbnQgKi8KKwkJfQor
CQlyZXR1cm47CisJfQorCisJLyogTXVsdGlwbGUgbG9jYWwgYWRkcmVzc2VzIGV4c2lzdCBpbiB0
aGUgYXNzb2NpYXRpb24uICAqLworCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRz
LCBzY3RwX25leHQpIHsKKwkJLyogY2xlYXIgYW55IGNhY2hlZCByb3V0ZSBhbmQgc291cmNlIGFk
ZHJlc3MgKi8KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorCQlST19OSEZSRUUoJm5ldC0+cm8pOworI2Vsc2UKKwkJaWYgKG5ldC0+cm8ucm9fcnQp
IHsKKwkJCVJURlJFRShuZXQtPnJvLnJvX3J0KTsKKwkJCW5ldC0+cm8ucm9fcnQgPSBOVUxMOwor
CQl9CisjZW5kaWYKKwkJaWYgKG5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQpIHsKKwkJCXNjdHBfZnJl
ZV9pZmEobmV0LT5yby5fc19hZGRyKTsKKwkJCW5ldC0+cm8uX3NfYWRkciA9IE5VTEw7CisJCQlu
ZXQtPnNyY19hZGRyX3NlbGVjdGVkID0gMDsKKwkJfQorCQkvKiBDaGVjayBpZiB0aGUgbmV4dGhv
cCBpcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBuZXcgYWRkcmVzcy4KKwkJICAgSWYgdGhlIG5ldyBh
ZGRyZXNzIGlzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGN1cnJlbnQgbmV4dGhvcCwKKwkJICAgdGhl
IHBhdGggd2lsbCBiZSBjaGFuZ2VkLgorCQkgICBJZiB0aGUgbmV3IGFkZHJlc3MgaXMgTk9UIGNv
cnJlc3BvbmRpbmcgdG8gdGhlIGN1cnJlbnQKKwkJICAgbmV4dGhvcCwgdGhlIHBhdGggd2lsbCBu
b3QgYmUgY2hhbmdlZC4KKwkJICovCisJCVNDVFBfUlRBTExPQygoc2N0cF9yb3V0ZV90ICopJm5l
dC0+cm8sCisJCQkgICAgIHN0Y2ItPnNjdHBfZXAtPmRlZl92cmZfaWQsCisJCQkgICAgIHN0Y2It
PnNjdHBfZXAtPmZpYm51bSk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKKwkJaWYgKG5ldC0+cm8ucm9fbmggPT0gTlVMTCkKKyNlbHNlCisJCWlm
IChuZXQtPnJvLnJvX3J0ID09IE5VTEwpCisjZW5kaWYKKwkJCWNvbnRpbnVlOworCisJCWNoYW5n
ZWQgPSAwOworCQlzd2l0Y2ggKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkpIHsKKyNpZmRl
ZiBJTkVUCisJCWNhc2UgQUZfSU5FVDoKKwkJCWlmIChzY3RwX3Y0c3JjX21hdGNoX25leHRob3Ao
bmV3aWZhLCAoc2N0cF9yb3V0ZV90ICopJm5ldC0+cm8pKSB7CisJCQkJY2hhbmdlZCA9IDE7CisJ
CQl9CisJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCWNhc2UgQUZfSU5FVDY6CisJ
CQlpZiAoc2N0cF92NnNyY19tYXRjaF9uZXh0aG9wKAorCQkJICAgICZuZXdpZmEtPmFkZHJlc3Mu
c2luNiwgKHNjdHBfcm91dGVfdCAqKSZuZXQtPnJvKSkgeworCQkJCWNoYW5nZWQgPSAxOworCQkJ
fQorCQkJYnJlYWs7CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCS8qIGlm
IHRoZSBuZXdseSBhZGRlZCBhZGRyZXNzIGRvZXMgbm90IHJlbGF0ZSByb3V0aW5nCisJCSAgIGlu
Zm9ybWF0aW9uLCB3ZSBza2lwLgorCQkgKi8KKwkJaWYgKGNoYW5nZWQgPT0gMCkKKwkJCWNvbnRp
bnVlOworCQkvKiBSZXRyYW5zbWl0IHVuYWNrbm93bGVkZ2VkIERBVEEgY2h1bmtzIGltbWVkaWF0
ZWx5ICovCisJCWlmIChzY3RwX2lzX21vYmlsaXR5X2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwK
KwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX01PQklMSVRZX0ZBU1RIQU5E
T0ZGKSkgeworCQkJc2N0cF9uZXRfaW1tZWRpYXRlX3JldHJhbnMoc3RjYiwgbmV0KTsKKwkJfQor
CQkvKiBTZW5kIFNFVCBQUklNQVJZIGZvciB0aGlzIG5ldyBhZGRyZXNzICovCisJCWlmIChuZXQg
PT0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uKSB7CisJCQkodm9pZClzY3RwX2FzY29u
Zl9xdWV1ZV9tZ210KHN0Y2IsIG5ld2lmYSwKKwkJCQkJCSAgICAgU0NUUF9TRVRfUFJJTV9BRERS
KTsKKwkJfQorCX0KK30KKyNlbmRpZgorCisvKgorICogcHJvY2VzcyBhbiBBREQvREVMRVRFIElQ
IGFjayBmcm9tIHBlZXIuCisgKiBhZGRyOiBjb3JyZXNwb25kaW5nIHNjdHBfaWZhIHRvIHRoZSBh
ZGRyZXNzIGJlaW5nIGFkZGVkL2RlbGV0ZWQuCisgKiB0eXBlOiBTQ1RQX0FERF9JUF9BRERSRVNT
IG9yIFNDVFBfREVMX0lQX0FERFJFU1MuCisgKiBmbGFnOiAxPXN1Y2Nlc3MsIDA9ZmFpbHVyZS4K
KyAqLworc3RhdGljIHZvaWQKK3NjdHBfYXNjb25mX2FkZHJfbWdtdF9hY2soc3RydWN0IHNjdHBf
dGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9pZmEgKmFkZHIsIHVpbnQzMl90IGZsYWcpCit7CisJLyoK
KwkgKiBkbyB0aGUgbmVjZXNzYXJ5IGFzb2MgbGlzdCB3b3JrLSBpZiB3ZSBnZXQgYSBmYWlsdXJl
IGluZGljYXRpb24sCisJICogbGVhdmUgdGhlIGFkZHJlc3Mgb24gdGhlIGFzc29jJ3MgcmVzdHJp
Y3RlZCBsaXN0LiAgSWYgd2UgZ2V0IGEKKwkgKiBzdWNjZXNzIGluZGljYXRpb24sIHJlbW92ZSB0
aGUgYWRkcmVzcyBmcm9tIHRoZSByZXN0cmljdGVkIGxpc3QuCisJICovCisJLyoKKwkgKiBOb3Rl
OiB0aGlzIHdpbGwgb25seSBvY2N1ciBmb3IgQUREX0lQX0FERFJFU1MsIHNpbmNlCisJICogREVM
X0lQX0FERFJFU1MgaXMgbmV2ZXIgYWN0dWFsbHkgYWRkZWQgdG8gdGhlIGxpc3QuLi4KKwkgKi8K
KwlpZiAoZmxhZykgeworCQkvKiBzdWNjZXNzIGNhc2UsIHNvIHJlbW92ZSBmcm9tIHRoZSByZXN0
cmljdGVkIGxpc3QgKi8KKwkJc2N0cF9kZWxfbG9jYWxfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIGFk
ZHIpOworCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJaWYgKHNjdHBfaXNfbW9iaWxpdHlfZmVhdHVyZV9v
bihzdGNiLT5zY3RwX2VwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBf
TU9CSUxJVFlfQkFTRSkgfHwKKwkJICAgIHNjdHBfaXNfbW9iaWxpdHlfZmVhdHVyZV9vbihzdGNi
LT5zY3RwX2VwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfTU9CSUxJ
VFlfRkFTVEhBTkRPRkYpKSB7CisJCQlzY3RwX3BhdGhfY2hlY2tfYW5kX3JlYWN0KHN0Y2IsIGFk
ZHIpOworCQkJcmV0dXJuOworCQl9CisjZW5kaWYKKwkJLyogY2xlYXIgYW55IGNhY2hlZC90b3Bv
bG9naWNhbGx5IGluY29ycmVjdCBzb3VyY2UgYWRkcmVzc2VzICovCisJCXNjdHBfYXNjb25mX25l
dHNfY2xlYW51cChzdGNiLCBhZGRyLT5pZm5fcCk7CisJfQorCS8qIGVsc2UsIGxlYXZlIGl0IG9u
IHRoZSBsaXN0ICovCit9CisKKy8qCisgKiBhZGQgYW4gYXNjb25mIGFkZC9kZWxldGUvc2V0IHBy
aW1hcnkgSVAgYWRkcmVzcyBwYXJhbWV0ZXIgdG8gdGhlIHF1ZXVlLgorICogdHlwZSA9IFNDVFBf
QUREX0lQX0FERFJFU1MsIFNDVFBfREVMX0lQX0FERFJFU1MsIFNDVFBfU0VUX1BSSU1fQUREUi4K
KyAqIHJldHVybnMgMCBpZiBxdWV1ZWQsIC0xIGlmIG5vdCBxdWV1ZWQvcmVtb3ZlZC4KKyAqIE5P
VEU6IGlmIGFkZGluZywgYnV0IGEgZGVsZXRlIGZvciB0aGUgc2FtZSBhZGRyZXNzIGlzIGFscmVh
ZHkgc2NoZWR1bGVkCisgKiAoYW5kIG5vdCB5ZXQgc2VudCBvdXQpLCBzaW1wbHkgcmVtb3ZlIGl0
IGZyb20gcXVldWUuICBTYW1lIGZvciBkZWxldGluZworICogYW4gYWRkcmVzcyBhbHJlYWR5IHNj
aGVkdWxlZCBmb3IgYWRkLiAgSWYgYSBkdXBsaWNhdGUgb3BlcmF0aW9uIGlzIGZvdW5kLAorICog
aWdub3JlIHRoZSBuZXcgb25lLgorICovCitzdGF0aWMgaW50CitzY3RwX2FzY29uZl9xdWV1ZV9t
Z210KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfaWZhICppZmEsCisJCSAgICAg
ICB1aW50MTZfdCB0eXBlKQoreworCXN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICphYSwgKmFhX25l
eHQ7CisKKwkvKiBtYWtlIHN1cmUgdGhlIHJlcXVlc3QgaXNuJ3QgYWxyZWFkeSBpbiB0aGUgcXVl
dWUgKi8KKwlUQUlMUV9GT1JFQUNIX1NBRkUoYWEsICZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSwg
bmV4dCwgYWFfbmV4dCkgeworCQkvKiBhZGRyZXNzIG1hdGNoPyAqLworCQlpZiAoc2N0cF9hc2Nv
bmZfYWRkcl9tYXRjaChhYSwgJmlmYS0+YWRkcmVzcy5zYSkgPT0gMCkKKwkJCWNvbnRpbnVlOwor
CQkvKiBpcyB0aGUgcmVxdWVzdCBhbHJlYWR5IGluIHF1ZXVlIGJ1dCBub3Qgc2VudD8KKwkJICog
cGFzcyB0aGUgcmVxdWVzdCBhbHJlYWR5IHNlbnQgaW4gb3JkZXIgdG8gcmVzb2x2ZSB0aGUgZm9s
bG93aW5nIGNhc2U6CisJCSAqICAxLiBhcnJpdmFsIG9mIEFERCwgdGhlbiBzZW50CisJCSAqICAy
LiBhcnJpdmFsIG9mIERFTC4gd2UgY2FuJ3QgcmVtb3ZlIHRoZSBBREQgcmVxdWVzdCBhbHJlYWR5
IHNlbnQKKwkJICogIDMuIGFycml2YWwgb2YgQURECisJCSAqLworCQlpZiAoYWEtPmFwLmFwaC5w
aC5wYXJhbV90eXBlID09IHR5cGUgJiYgYWEtPnNlbnQgPT0gMCkgeworCQkJcmV0dXJuICgtMSk7
CisJCX0KKwkJLyogaXMgdGhlIG5lZ2F0aXZlIHJlcXVlc3QgYWxyZWFkeSBpbiBxdWV1ZSwgYW5k
IG5vdCBzZW50ICovCisJCWlmICgoYWEtPnNlbnQgPT0gMCkgJiYgKHR5cGUgPT0gU0NUUF9BRERf
SVBfQUREUkVTUykgJiYKKwkJICAgIChhYS0+YXAuYXBoLnBoLnBhcmFtX3R5cGUgPT0gU0NUUF9E
RUxfSVBfQUREUkVTUykpIHsKKwkJCS8qIGFkZCByZXF1ZXN0ZWQsIGRlbGV0ZSBhbHJlYWR5IHF1
ZXVlZCAqLworCQkJVEFJTFFfUkVNT1ZFKCZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgYWEsIG5l
eHQpOworCQkJLyogcmVtb3ZlIHRoZSBpZmEgZnJvbSB0aGUgcmVzdHJpY3RlZCBsaXN0ICovCisJ
CQlzY3RwX2RlbF9sb2NhbF9hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgaWZhKTsKKwkJCS8qIGZyZWUg
dGhlIGFzY29uZiBwYXJhbSAqLworCQkJU0NUUF9GUkVFKGFhLCBTQ1RQX01fQVNDX0FERFIpOwor
CQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjIsICJhc2NvbmZfcXVldWVfbWdtdDogYWRkIHJl
bW92ZXMgcXVldWVkIGVudHJ5XG4iKTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCWlmICgoYWEt
PnNlbnQgPT0gMCkgJiYgKHR5cGUgPT0gU0NUUF9ERUxfSVBfQUREUkVTUykgJiYKKwkJICAgIChh
YS0+YXAuYXBoLnBoLnBhcmFtX3R5cGUgPT0gU0NUUF9BRERfSVBfQUREUkVTUykpIHsKKwkJCS8q
IGRlbGV0ZSByZXF1ZXN0ZWQsIGFkZCBhbHJlYWR5IHF1ZXVlZCAqLworCQkJVEFJTFFfUkVNT1ZF
KCZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgYWEsIG5leHQpOworCQkJLyogcmVtb3ZlIHRoZSBh
YS0+aWZhIGZyb20gdGhlIHJlc3RyaWN0ZWQgbGlzdCAqLworCQkJc2N0cF9kZWxfbG9jYWxfYWRk
cl9yZXN0cmljdGVkKHN0Y2IsIGFhLT5pZmEpOworCQkJLyogZnJlZSB0aGUgYXNjb25mIHBhcmFt
ICovCisJCQlTQ1RQX0ZSRUUoYWEsIFNDVFBfTV9BU0NfQUREUik7CisJCQlTQ1RQREJHKFNDVFBf
REVCVUdfQVNDT05GMiwgImFzY29uZl9xdWV1ZV9tZ210OiBkZWxldGUgcmVtb3ZlcyBxdWV1ZWQg
ZW50cnlcbiIpOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwl9IC8qIGZvciBlYWNoIGFhICovCisK
KwkvKiBhZGRpbmcgbmV3IHJlcXVlc3QgdG8gdGhlIHF1ZXVlICovCisJU0NUUF9NQUxMT0MoYWEs
IHN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICosIHNpemVvZigqYWEpLAorCQkgICAgU0NUUF9NX0FT
Q19BRERSKTsKKwlpZiAoYWEgPT0gTlVMTCkgeworCQkvKiBkaWRuJ3QgZ2V0IG1lbW9yeSAqLwor
CQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgImFzY29uZl9xdWV1ZV9tZ210OiBmYWlsZWQg
dG8gZ2V0IG1lbW9yeSFcbiIpOworCQlyZXR1cm4gKC0xKTsKKwl9CisJYWEtPnNwZWNpYWxfZGVs
ID0gMDsKKwkvKiBmaWxsIGluIGFzY29uZiBhZGRyZXNzIHBhcmFtZXRlciBmaWVsZHMgKi8KKwkv
KiB0b3AgbGV2ZWwgZWxlbWVudHMgYXJlICJuZXR3b3JrZWQiIGR1cmluZyBzZW5kICovCisJYWEt
PmFwLmFwaC5waC5wYXJhbV90eXBlID0gdHlwZTsKKwlhYS0+aWZhID0gaWZhOworCWF0b21pY19h
ZGRfaW50KCZpZmEtPnJlZmNvdW50LCAxKTsKKwkvKiBjb3JyZWxhdGlvbl9pZCBmaWxsZWQgaW4g
ZHVyaW5nIHNlbmQgcm91dGluZSBsYXRlci4uLiAqLworCXN3aXRjaCAoaWZhLT5hZGRyZXNzLnNh
LnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKwl7CisJCXN0cnVj
dCBzb2NrYWRkcl9pbjYgKnNpbjY7CisKKwkJc2luNiA9ICZpZmEtPmFkZHJlc3Muc2luNjsKKwkJ
YWEtPmFwLmFkZHJwLnBoLnBhcmFtX3R5cGUgPSBTQ1RQX0lQVjZfQUREUkVTUzsKKwkJYWEtPmFw
LmFkZHJwLnBoLnBhcmFtX2xlbmd0aCA9IChzaXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFy
YW0pKTsKKwkJYWEtPmFwLmFwaC5waC5wYXJhbV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBf
YXNjb25mX3BhcmFtaGRyKSArCisJCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFy
YW0pOworCQltZW1jcHkoJmFhLT5hcC5hZGRycC5hZGRyLCAmc2luNi0+c2luNl9hZGRyLAorCQkg
ICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworCQlicmVhazsKKwl9CisjZW5kaWYKKyNp
ZmRlZiBJTkVUCisJY2FzZSBBRl9JTkVUOgorCXsKKwkJc3RydWN0IHNvY2thZGRyX2luICpzaW47
CisKKwkJc2luID0gJmlmYS0+YWRkcmVzcy5zaW47CisJCWFhLT5hcC5hZGRycC5waC5wYXJhbV90
eXBlID0gU0NUUF9JUFY0X0FERFJFU1M7CisJCWFhLT5hcC5hZGRycC5waC5wYXJhbV9sZW5ndGgg
PSAoc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtKSk7CisJCWFhLT5hcC5hcGgucGgu
cGFyYW1fbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkcikgKworCQkg
ICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtKTsKKwkJbWVtY3B5KCZhYS0+YXAu
YWRkcnAuYWRkciwgJnNpbi0+c2luX2FkZHIsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGluX2Fk
ZHIpKTsKKwkJYnJlYWs7CisJfQorI2VuZGlmCisJZGVmYXVsdDoKKwkJLyogaW52YWxpZCBmYW1p
bHkhICovCisJCVNDVFBfRlJFRShhYSwgU0NUUF9NX0FTQ19BRERSKTsKKwkJc2N0cF9mcmVlX2lm
YShpZmEpOworCQlyZXR1cm4gKC0xKTsKKwl9CisJYWEtPnNlbnQgPSAwOwkJLyogY2xlYXIgc2Vu
dCBmbGFnICovCisKKwlUQUlMUV9JTlNFUlRfVEFJTCgmc3RjYi0+YXNvYy5hc2NvbmZfcXVldWUs
IGFhLCBuZXh0KTsKKyNpZmRlZiBTQ1RQX0RFQlVHCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9kZWJ1Z19vbikgJiBTQ1RQX0RFQlVHX0FTQ09ORjIpIHsKKwkJaWYgKHR5cGUgPT0gU0NUUF9B
RERfSVBfQUREUkVTUykgeworCQkJU0NUUF9QUklOVEYoImFzY29uZl9xdWV1ZV9tZ210OiBpbnNl
cnRlZCBhc2NvbmYgQUREX0lQX0FERFJFU1M6ICIpOworCQkJU0NUUERCR19BRERSKFNDVFBfREVC
VUdfQVNDT05GMiwgJmlmYS0+YWRkcmVzcy5zYSk7CisJCX0gZWxzZSBpZiAodHlwZSA9PSBTQ1RQ
X0RFTF9JUF9BRERSRVNTKSB7CisJCQlTQ1RQX1BSSU5URigiYXNjb25mX3F1ZXVlX21nbXQ6IGFw
cGVuZGVkIGFzY29uZiBERUxfSVBfQUREUkVTUzogIik7CisJCQlTQ1RQREJHX0FERFIoU0NUUF9E
RUJVR19BU0NPTkYyLCAmaWZhLT5hZGRyZXNzLnNhKTsKKwkJfSBlbHNlIHsKKwkJCVNDVFBfUFJJ
TlRGKCJhc2NvbmZfcXVldWVfbWdtdDogYXBwZW5kZWQgYXNjb25mIFNFVF9QUklNX0FERFI6ICIp
OworCQkJU0NUUERCR19BRERSKFNDVFBfREVCVUdfQVNDT05GMiwgJmlmYS0+YWRkcmVzcy5zYSk7
CisJCX0KKwl9CisjZW5kaWYKKworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBhZGQgYW4gYXNj
b25mIG9wZXJhdGlvbiBmb3IgdGhlIGdpdmVuIGlmYSBhbmQgdHlwZS4KKyAqIHR5cGUgPSBTQ1RQ
X0FERF9JUF9BRERSRVNTLCBTQ1RQX0RFTF9JUF9BRERSRVNTLCBTQ1RQX1NFVF9QUklNX0FERFIu
CisgKiByZXR1cm5zIDAgaWYgY29tcGxldGVkLCAtMSBpZiBub3QgY29tcGxldGVkLCAxIGlmIGlt
bWVkaWF0ZSBzZW5kIGlzCisgKiBhZHZpc2FibGUuCisgKi8KK3N0YXRpYyBpbnQKK3NjdHBfYXNj
b25mX3F1ZXVlX2FkZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2lmYSAqaWZh
LAorCQkgICAgICB1aW50MTZfdCB0eXBlKQoreworCXVpbnQzMl90IHN0YXR1czsKKwlpbnQgcGVu
ZGluZ19kZWxldGVfcXVldWVkID0gMDsKKwlpbnQgbGFzdDsKKworCS8qIHNlZSBpZiBwZWVyIHN1
cHBvcnRzIEFTQ09ORiAqLworCWlmIChzdGNiLT5hc29jLmFzY29uZl9zdXBwb3J0ZWQgPT0gMCkg
eworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwkvKgorCSAqIGlmIHRoaXMgaXMgZGVsZXRpbmcgdGhl
IGxhc3QgYWRkcmVzcyBmcm9tIHRoZSBhc3NvYywgbWFyayBpdCBhcworCSAqIHBlbmRpbmcuCisJ
ICovCisJaWYgKCh0eXBlID09IFNDVFBfREVMX0lQX0FERFJFU1MpICYmICFzdGNiLT5hc29jLmFz
Y29uZl9kZWxfcGVuZGluZykgeworCQlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX0JPVU5EQUxMKSB7CisJCQlsYXN0ID0gKHNjdHBfbG9jYWxfYWRkcl9jb3Vu
dChzdGNiKSA9PSAwKTsKKwkJfSBlbHNlIHsKKwkJCWxhc3QgPSAoc2N0cF9sb2NhbF9hZGRyX2Nv
dW50KHN0Y2IpID09IDEpOworCQl9CisJCWlmIChsYXN0KSB7CisJCQkvKiBzZXQgdGhlIHBlbmRp
bmcgZGVsZXRlIGluZm8gb25seSAqLworCQkJc3RjYi0+YXNvYy5hc2NvbmZfZGVsX3BlbmRpbmcg
PSAxOworCQkJc3RjYi0+YXNvYy5hc2NvbmZfYWRkcl9kZWxfcGVuZGluZyA9IGlmYTsKKwkJCWF0
b21pY19hZGRfaW50KCZpZmEtPnJlZmNvdW50LCAxKTsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19B
U0NPTkYyLAorCQkJCSJhc2NvbmZfcXVldWVfYWRkOiBtYXJrIGRlbGV0ZSBsYXN0IGFkZHJlc3Mg
cGVuZGluZ1xuIik7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCX0KKworCS8qIHF1ZXVlIGFuIGFz
Y29uZiBwYXJhbWV0ZXIgKi8KKwlzdGF0dXMgPSBzY3RwX2FzY29uZl9xdWV1ZV9tZ210KHN0Y2Is
IGlmYSwgdHlwZSk7CisKKwkvKgorCSAqIGlmIHRoaXMgaXMgYW4gYWRkLCBhbmQgdGhlcmUgaXMg
YSBkZWxldGUgYWxzbyBwZW5kaW5nIChpLmUuIHRoZQorCSAqIGxhc3QgbG9jYWwgYWRkcmVzcyBp
cyBiZWluZyBjaGFuZ2VkKSwgcXVldWUgdGhlIHBlbmRpbmcgZGVsZXRlIHRvby4KKwkgKi8KKwlp
ZiAoKHR5cGUgPT0gU0NUUF9BRERfSVBfQUREUkVTUykgJiYgc3RjYi0+YXNvYy5hc2NvbmZfZGVs
X3BlbmRpbmcgJiYgKHN0YXR1cyA9PSAwKSkgeworCQkvKiBxdWV1ZSBpbiB0aGUgcGVuZGluZyBk
ZWxldGUgKi8KKwkJaWYgKHNjdHBfYXNjb25mX3F1ZXVlX21nbXQoc3RjYiwKKwkJCQkJICAgc3Rj
Yi0+YXNvYy5hc2NvbmZfYWRkcl9kZWxfcGVuZGluZywKKwkJCQkJICAgU0NUUF9ERUxfSVBfQURE
UkVTUykgPT0gMCkgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjIsICJhc2NvbmZfcXVl
dWVfYWRkOiBxdWV1aW5nIHBlbmRpbmcgZGVsZXRlXG4iKTsKKwkJCXBlbmRpbmdfZGVsZXRlX3F1
ZXVlZCA9IDE7CisJCQkvKiBjbGVhciBvdXQgdGhlIHBlbmRpbmcgZGVsZXRlIGluZm8gKi8KKwkJ
CXN0Y2ItPmFzb2MuYXNjb25mX2RlbF9wZW5kaW5nID0gMDsKKwkJCXNjdHBfZnJlZV9pZmEoc3Rj
Yi0+YXNvYy5hc2NvbmZfYWRkcl9kZWxfcGVuZGluZyk7CisJCQlzdGNiLT5hc29jLmFzY29uZl9h
ZGRyX2RlbF9wZW5kaW5nID0gTlVMTDsKKwkJfQorCX0KKworCWlmIChwZW5kaW5nX2RlbGV0ZV9x
dWV1ZWQpIHsKKwkJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCQkvKgorCQkgKiBzaW5jZSB3ZSBr
bm93IHRoYXQgdGhlIG9ubHkvbGFzdCBhZGRyZXNzIGlzIG5vdyBiZWluZworCQkgKiBjaGFuZ2Vk
IGluIHRoaXMgY2FzZSwgcmVzZXQgdGhlIGN3bmQvcnRvIG9uIGFsbCBuZXRzIHRvCisJCSAqIHN0
YXJ0IGFzIGEgbmV3IGFkZHJlc3MgYW5kIHBhdGguICBBbHNvIGNsZWFyIHRoZSBlcnJvcgorCQkg
KiBjb3VudHMgdG8gZ2l2ZSB0aGUgYXNzb2MgdGhlIGJlc3QgY2hhbmNlIHRvIGNvbXBsZXRlIHRo
ZQorCQkgKiBhZGRyZXNzIGNoYW5nZS4KKwkJICovCisJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3Rj
Yi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKwkJCXN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNj
dHBfc2V0X2luaXRpYWxfY2NfcGFyYW0oc3RjYiwKKwkJCQkJCQkJCSAgbmV0KTsKKwkJCW5ldC0+
UlRPID0gMDsKKwkJCW5ldC0+ZXJyb3JfY291bnQgPSAwOworCQl9CisJCXN0Y2ItPmFzb2Mub3Zl
cmFsbF9lcnJvcl9jb3VudCA9IDA7CisJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2lu
Z19sZXZlbCkgJiBTQ1RQX1RIUkVTSE9MRF9MT0dHSU5HKSB7CisJCQlzY3RwX21pc2NfaW50cyhT
Q1RQX1RIUkVTSE9MRF9DTEVBUiwKKwkJCQkgICAgICAgc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9y
X2NvdW50LAorCQkJCSAgICAgICAwLAorCQkJCSAgICAgICBTQ1RQX0ZST01fU0NUUF9BU0NPTkYs
CisJCQkJICAgICAgIF9fTElORV9fKTsKKwkJfQorCisJCS8qIHF1ZXVlIGluIGFuIGFkdmlzb3J5
IHNldCBwcmltYXJ5IHRvbyAqLworCQkodm9pZClzY3RwX2FzY29uZl9xdWV1ZV9tZ210KHN0Y2Is
IGlmYSwgU0NUUF9TRVRfUFJJTV9BRERSKTsKKwkJLyogbGV0IGNhbGxlciBrbm93IHdlIHNob3Vs
ZCBzZW5kIHRoaXMgb3V0IGltbWVkaWF0ZWx5ICovCisJCXN0YXR1cyA9IDE7CisJfQorCXJldHVy
biAoc3RhdHVzKTsKK30KKworLyotCisgKiBhZGQgYW4gYXNjb25mIGRlbGV0ZSBJUCBhZGRyZXNz
IHBhcmFtZXRlciB0byB0aGUgcXVldWUgYnkgc29ja2FkZHIgYW5kCisgKiBwb3NzaWJseSB3aXRo
IG5vIHNjdHBfaWZhIGF2YWlsYWJsZS4gIFRoaXMgaXMgb25seSBjYWxsZWQgYnkgdGhlIHJvdXRp
bmUKKyAqIHRoYXQgY2hlY2tzIHRoZSBhZGRyZXNzZXMgaW4gYW4gSU5JVC1BQ0sgYWdhaW5zdCB0
aGUgY3VycmVudCBhZGRyZXNzIGxpc3QuCisgKiByZXR1cm5zIDAgaWYgY29tcGxldGVkLCBub24t
emVybyBpZiBub3QgY29tcGxldGVkLgorICogTk9URTogaWYgYW4gYWRkIGlzIGFscmVhZHkgc2No
ZWR1bGVkIChhbmQgbm90IHlldCBzZW50IG91dCksIHNpbXBseQorICogcmVtb3ZlIGl0IGZyb20g
cXVldWUuICBJZiBhIGR1cGxpY2F0ZSBvcGVyYXRpb24gaXMgZm91bmQsIGlnbm9yZSB0aGUKKyAq
IG5ldyBvbmUuCisgKi8KK3N0YXRpYyBpbnQKK3NjdHBfYXNjb25mX3F1ZXVlX3NhX2RlbGV0ZShz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzb2NrYWRkciAqc2EpCit7CisJc3RydWN0IHNj
dHBfaWZhICppZmE7CisJc3RydWN0IHNjdHBfYXNjb25mX2FkZHIgKmFhLCAqYWFfbmV4dDsKKwor
CWlmIChzdGNiID09IE5VTEwpIHsKKwkJcmV0dXJuICgtMSk7CisJfQorCS8qIHNlZSBpZiBwZWVy
IHN1cHBvcnRzIEFTQ09ORiAqLworCWlmIChzdGNiLT5hc29jLmFzY29uZl9zdXBwb3J0ZWQgPT0g
MCkgeworCQlyZXR1cm4gKC0xKTsKKwl9CisJLyogbWFrZSBzdXJlIHRoZSByZXF1ZXN0IGlzbid0
IGFscmVhZHkgaW4gdGhlIHF1ZXVlICovCisJVEFJTFFfRk9SRUFDSF9TQUZFKGFhLCAmc3RjYi0+
YXNvYy5hc2NvbmZfcXVldWUsIG5leHQsIGFhX25leHQpIHsKKwkJLyogYWRkcmVzcyBtYXRjaD8g
Ki8KKwkJaWYgKHNjdHBfYXNjb25mX2FkZHJfbWF0Y2goYWEsIHNhKSA9PSAwKQorCQkJY29udGlu
dWU7CisJCS8qIGlzIHRoZSByZXF1ZXN0IGFscmVhZHkgaW4gcXVldWUgKHNlbnQgb3Igbm90KSAq
LworCQlpZiAoYWEtPmFwLmFwaC5waC5wYXJhbV90eXBlID09IFNDVFBfREVMX0lQX0FERFJFU1Mp
IHsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCS8qIGlzIHRoZSBuZWdhdGl2ZSByZXF1ZXN0IGFs
cmVhZHkgaW4gcXVldWUsIGFuZCBub3Qgc2VudCAqLworCQlpZiAoYWEtPnNlbnQgPT0gMSkKKwkJ
CWNvbnRpbnVlOworCQlpZiAoYWEtPmFwLmFwaC5waC5wYXJhbV90eXBlID09IFNDVFBfQUREX0lQ
X0FERFJFU1MpIHsKKwkJCS8qIGFkZCBhbHJlYWR5IHF1ZXVlZCwgc28gcmVtb3ZlIGV4aXN0aW5n
IGVudHJ5ICovCisJCQlUQUlMUV9SRU1PVkUoJnN0Y2ItPmFzb2MuYXNjb25mX3F1ZXVlLCBhYSwg
bmV4dCk7CisJCQlzY3RwX2RlbF9sb2NhbF9hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgYWEtPmlmYSk7
CisJCQkvKiBmcmVlIHRoZSBlbnRyeSAqLworCQkJU0NUUF9GUkVFKGFhLCBTQ1RQX01fQVNDX0FE
RFIpOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwl9IC8qIGZvciBlYWNoIGFhICovCisKKwkvKiBm
aW5kIGFueSBleGlzdGluZyBpZmEtLSBOT1RFIGlmYSBDQU4gYmUgYWxsb3dlZCB0byBiZSBOVUxM
ICovCisJaWZhID0gc2N0cF9maW5kX2lmYV9ieV9hZGRyKHNhLCBzdGNiLT5hc29jLnZyZl9pZCwg
U0NUUF9BRERSX05PVF9MT0NLRUQpOworCisJLyogYWRkaW5nIG5ldyByZXF1ZXN0IHRvIHRoZSBx
dWV1ZSAqLworCVNDVFBfTUFMTE9DKGFhLCBzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkciAqLCBzaXpl
b2YoKmFhKSwKKwkJICAgIFNDVFBfTV9BU0NfQUREUik7CisJaWYgKGFhID09IE5VTEwpIHsKKwkJ
LyogZGlkbid0IGdldCBtZW1vcnkgKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJ
CQkic2N0cF9hc2NvbmZfcXVldWVfc2FfZGVsZXRlOiBmYWlsZWQgdG8gZ2V0IG1lbW9yeSFcbiIp
OworCQlyZXR1cm4gKC0xKTsKKwl9CisJYWEtPnNwZWNpYWxfZGVsID0gMDsKKwkvKiBmaWxsIGlu
IGFzY29uZiBhZGRyZXNzIHBhcmFtZXRlciBmaWVsZHMgKi8KKwkvKiB0b3AgbGV2ZWwgZWxlbWVu
dHMgYXJlICJuZXR3b3JrZWQiIGR1cmluZyBzZW5kICovCisJYWEtPmFwLmFwaC5waC5wYXJhbV90
eXBlID0gU0NUUF9ERUxfSVBfQUREUkVTUzsKKwlhYS0+aWZhID0gaWZhOworCWlmIChpZmEpCisJ
CWF0b21pY19hZGRfaW50KCZpZmEtPnJlZmNvdW50LCAxKTsKKwkvKiBjb3JyZWxhdGlvbl9pZCBm
aWxsZWQgaW4gZHVyaW5nIHNlbmQgcm91dGluZSBsYXRlci4uLiAqLworCXN3aXRjaCAoc2EtPnNh
X2ZhbWlseSkgeworI2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKwl7CisJCS8qIElQdjYg
YWRkcmVzcyAqLworCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCisJCXNpbjYgPSAoc3Ry
dWN0IHNvY2thZGRyX2luNiAqKXNhOworCQlhYS0+YXAuYWRkcnAucGgucGFyYW1fdHlwZSA9IFND
VFBfSVBWNl9BRERSRVNTOworCQlhYS0+YXAuYWRkcnAucGgucGFyYW1fbGVuZ3RoID0gKHNpemVv
ZihzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSkpOworCQlhYS0+YXAuYXBoLnBoLnBhcmFtX2xl
bmd0aCA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIpICsgc2l6ZW9mKHN0cnVj
dCBzY3RwX2lwdjZhZGRyX3BhcmFtKTsKKwkJbWVtY3B5KCZhYS0+YXAuYWRkcnAuYWRkciwgJnNp
bjYtPnNpbjZfYWRkciwKKwkJICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKwkJYnJlYWs7
CisJfQorI2VuZGlmCisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwl7CisJCS8qIElQdjQg
YWRkcmVzcyAqLworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJf
aW4gKilzYTsKKworCQlhYS0+YXAuYWRkcnAucGgucGFyYW1fdHlwZSA9IFNDVFBfSVBWNF9BRERS
RVNTOworCQlhYS0+YXAuYWRkcnAucGgucGFyYW1fbGVuZ3RoID0gKHNpemVvZihzdHJ1Y3Qgc2N0
cF9pcHY0YWRkcl9wYXJhbSkpOworCQlhYS0+YXAuYXBoLnBoLnBhcmFtX2xlbmd0aCA9IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIpICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjRh
ZGRyX3BhcmFtKTsKKwkJbWVtY3B5KCZhYS0+YXAuYWRkcnAuYWRkciwgJnNpbi0+c2luX2FkZHIs
CisJCSAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKKwkJYnJlYWs7CisJfQorI2VuZGlmCisJ
ZGVmYXVsdDoKKwkJLyogaW52YWxpZCBmYW1pbHkhICovCisJCVNDVFBfRlJFRShhYSwgU0NUUF9N
X0FTQ19BRERSKTsKKwkJaWYgKGlmYSkKKwkJCXNjdHBfZnJlZV9pZmEoaWZhKTsKKwkJcmV0dXJu
ICgtMSk7CisJfQorCWFhLT5zZW50ID0gMDsJCS8qIGNsZWFyIHNlbnQgZmxhZyAqLworCisJLyog
ZGVsZXRlIGdvZXMgdG8gdGhlIGJhY2sgb2YgdGhlIHF1ZXVlICovCisJVEFJTFFfSU5TRVJUX1RB
SUwoJnN0Y2ItPmFzb2MuYXNjb25mX3F1ZXVlLCBhYSwgbmV4dCk7CisKKwkvKiBzYV9pZ25vcmUg
TUVNTEVBSyB7bWVtb3J5IGlzIHB1dCBvbiB0aGUgdGFpbHF9ICovCisJcmV0dXJuICgwKTsKK30K
KworLyoKKyAqIGZpbmQgYSBzcGVjaWZpYyBhc2NvbmYgcGFyYW0gb24gb3VyICJzZW50IiBxdWV1
ZQorICovCitzdGF0aWMgc3RydWN0IHNjdHBfYXNjb25mX2FkZHIgKgorc2N0cF9hc2NvbmZfZmlu
ZF9wYXJhbShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQzMl90IGNvcnJlbGF0aW9uX2lkKQor
eworCXN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICphYTsKKworCVRBSUxRX0ZPUkVBQ0goYWEsICZz
dGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgbmV4dCkgeworCQlpZiAoYWEtPmFwLmFwaC5jb3JyZWxh
dGlvbl9pZCA9PSBjb3JyZWxhdGlvbl9pZCAmJgorCQkgICAgYWEtPnNlbnQgPT0gMSkgeworCQkJ
LyogZm91bmQgaXQgKi8KKwkJCXJldHVybiAoYWEpOworCQl9CisJfQorCS8qIGRpZG4ndCBmaW5k
IGl0ICovCisJcmV0dXJuIChOVUxMKTsKK30KKworLyoKKyAqIHByb2Nlc3MgYW4gU0NUUF9FUlJP
Ul9DQVVTRV9JTkQgZm9yIGEgQVNDT05GLUFDSyBwYXJhbWV0ZXIgYW5kIGRvCisgKiBub3RpZmlj
YXRpb25zIGJhc2VkIG9uIHRoZSBlcnJvciByZXNwb25zZQorICovCitzdGF0aWMgdm9pZAorc2N0
cF9hc2NvbmZfcHJvY2Vzc19lcnJvcihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQs
CisJCQkgIHN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkciAqYXBoKQoreworCXN0cnVjdCBzY3Rw
X2Vycm9yX2NhdXNlICplaDsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGg7CisJdWludDE2X3Qg
cGFyYW1fdHlwZTsKKwl1aW50MTZfdCBlcnJvcl9jb2RlOworCisJZWggPSAoc3RydWN0IHNjdHBf
ZXJyb3JfY2F1c2UgKikoYXBoICsgMSk7CisJcGggPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKiko
ZWggKyAxKTsKKwkvKiB2YWxpZGF0ZSBsZW5ndGhzICovCisJaWYgKGh0b25zKGVoLT5sZW5ndGgp
ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2Vycm9yX2NhdXNlKSA+CisJICAgIGh0b25zKGFwaC0+cGgu
cGFyYW1fbGVuZ3RoKSkgeworCQkvKiBpbnZhbGlkIGVycm9yIGNhdXNlIGxlbmd0aCAqLworCQlT
Q1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwKKwkJCSJhc2NvbmZfcHJvY2Vzc19lcnJvcjogY2F1
c2UgZWxlbWVudCB0b28gbG9uZ1xuIik7CisJCXJldHVybjsKKwl9CisJaWYgKGh0b25zKHBoLT5w
YXJhbV9sZW5ndGgpICsgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSA+CisJICAgIGh0b25z
KGVoLT5sZW5ndGgpKSB7CisJCS8qIGludmFsaWQgaW5jbHVkZWQgVExWIGxlbmd0aCAqLworCQlT
Q1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwKKwkJCSJhc2NvbmZfcHJvY2Vzc19lcnJvcjogaW5j
bHVkZWQgVExWIHRvbyBsb25nXG4iKTsKKwkJcmV0dXJuOworCX0KKwkvKiB3aGljaCBlcnJvciBj
b2RlID8gKi8KKwllcnJvcl9jb2RlID0gbnRvaHMoZWgtPmNvZGUpOworCXBhcmFtX3R5cGUgPSBu
dG9ocyhhcGgtPnBoLnBhcmFtX3R5cGUpOworCS8qIEZJWDogdGhpcyBzaG91bGQgZ28gYmFjayB1
cCB0aGUgUkVNT1RFX0VSUk9SIFVMUCBub3RpZnkgKi8KKwlzd2l0Y2ggKGVycm9yX2NvZGUpIHsK
KwljYXNlIFNDVFBfQ0FVU0VfUkVTT1VSQ0VfU0hPUlRBR0U6CisJCS8qIHdlIGFsbG93IG91cnNl
bHZlcyB0byAidHJ5IGFnYWluIiBmb3IgdGhpcyBlcnJvciAqLworCQlicmVhazsKKwlkZWZhdWx0
OgorCQkvKiBwZWVyIGNhbid0IGhhbmRsZSBpdC4uLiAqLworCQlzd2l0Y2ggKHBhcmFtX3R5cGUp
IHsKKwkJY2FzZSBTQ1RQX0FERF9JUF9BRERSRVNTOgorCQljYXNlIFNDVFBfREVMX0lQX0FERFJF
U1M6CisJCWNhc2UgU0NUUF9TRVRfUFJJTV9BRERSOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJ
CQlicmVhazsKKwkJfQorCX0KK30KKworLyoKKyAqIHByb2Nlc3MgYW4gYXNjb25mIHF1ZXVlIHBh
cmFtLgorICogYXBhcmFtOiBwYXJhbWV0ZXIgdG8gcHJvY2Vzcywgd2lsbCBiZSByZW1vdmVkIGZy
b20gdGhlIHF1ZXVlLgorICogZmxhZzogMT1zdWNjZXNzIGNhc2UsIDA9ZmFpbHVyZSBjYXNlCisg
Ki8KK3N0YXRpYyB2b2lkCitzY3RwX2FzY29uZl9wcm9jZXNzX3BhcmFtX2FjayhzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IsCisJCQkgICAgICBzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkciAqYXBhcmFtLCB1
aW50MzJfdCBmbGFnKQoreworCXVpbnQxNl90IHBhcmFtX3R5cGU7CisKKwkvKiBwcm9jZXNzIHRo
aXMgcGFyYW0gKi8KKwlwYXJhbV90eXBlID0gYXBhcmFtLT5hcC5hcGgucGgucGFyYW1fdHlwZTsK
Kwlzd2l0Y2ggKHBhcmFtX3R5cGUpIHsKKwljYXNlIFNDVFBfQUREX0lQX0FERFJFU1M6CisJCVND
VFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAorCQkJInByb2Nlc3NfcGFyYW1fYWNrOiBhZGRlZCBJ
UCBhZGRyZXNzXG4iKTsKKwkJc2N0cF9hc2NvbmZfYWRkcl9tZ210X2FjayhzdGNiLCBhcGFyYW0t
PmlmYSwgZmxhZyk7CisJCWJyZWFrOworCWNhc2UgU0NUUF9ERUxfSVBfQUREUkVTUzoKKwkJU0NU
UERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCQkicHJvY2Vzc19wYXJhbV9hY2s6IGRlbGV0ZWQg
SVAgYWRkcmVzc1xuIik7CisJCS8qIG5vdGhpbmcgcmVhbGx5IHRvIGRvLi4uIGxpc3RzIGFscmVh
ZHkgdXBkYXRlZCAqLworCQlicmVhazsKKwljYXNlIFNDVFBfU0VUX1BSSU1fQUREUjoKKwkJU0NU
UERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCQkicHJvY2Vzc19wYXJhbV9hY2s6IHNldCBwcmlt
YXJ5IElQIGFkZHJlc3NcbiIpOworCQkvKiBub3RoaW5nIHRvIGRvLi4uIHBlZXIgbWF5IHN0YXJ0
IHVzaW5nIHRoaXMgYWRkciAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBzaG91bGQgTkVW
RVIgaGFwcGVuICovCisJCWJyZWFrOworCX0KKworCS8qIHJlbW92ZSB0aGUgcGFyYW0gYW5kIGZy
ZWUgaXQgKi8KKwlUQUlMUV9SRU1PVkUoJnN0Y2ItPmFzb2MuYXNjb25mX3F1ZXVlLCBhcGFyYW0s
IG5leHQpOworCWlmIChhcGFyYW0tPmlmYSkKKwkJc2N0cF9mcmVlX2lmYShhcGFyYW0tPmlmYSk7
CisJU0NUUF9GUkVFKGFwYXJhbSwgU0NUUF9NX0FTQ19BRERSKTsKK30KKworLyoKKyAqIGNsZWFu
dXAgZnJvbSBhIGJhZCBhc2NvbmYgYWNrIHBhcmFtZXRlcgorICovCitzdGF0aWMgdm9pZAorc2N0
cF9hc2NvbmZfYWNrX2NsZWFyKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiBTQ1RQX1VOVVNFRCkKK3sK
KwkvKiBhc3N1bWUgcGVlciBkb2Vzbid0IHJlYWxseSBrbm93IGhvdyB0byBkbyBhc2NvbmZzICov
CisJLyogWFhYIHdlIGNvdWxkIGZyZWUgdGhlIHBlbmRpbmcgcXVldWUgaGVyZSAqLworCit9CisK
K3ZvaWQKK3NjdHBfaGFuZGxlX2FzY29uZl9hY2soc3RydWN0IG1idWYgKm0sIGludCBvZmZzZXQs
CisJCSAgICAgICBzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWNrX2NodW5rICpjcCwgc3RydWN0IHNjdHBf
dGNiICpzdGNiLAorCQkgICAgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0LCBpbnQgKmFib3J0X25v
X3VubG9jaykKK3sKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwl1aW50MzJfdCBz
ZXJpYWxfbnVtOworCXVpbnQxNl90IGFja19sZW5ndGg7CisJc3RydWN0IHNjdHBfYXNjb25mX3Bh
cmFtaGRyICphcGg7CisJc3RydWN0IHNjdHBfYXNjb25mX2FkZHIgKmFhLCAqYWFfbmV4dDsKKwl1
aW50MzJfdCBsYXN0X2Vycm9yX2lkID0gMDsJLyogbGFzdCBlcnJvciBjb3JyZWxhdGlvbiBpZCAq
LworCXVpbnQzMl90IGlkOworCXN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICphcDsKKworCS8qIGFz
Y29uZiBwYXJhbSBidWZmZXIgKi8KKwl1aW50OF90IGFwYXJhbV9idWZbU0NUUF9QQVJBTV9CVUZG
RVJfU0laRV07CisKKwkvKiB2ZXJpZnkgbWluaW11bSBsZW5ndGggKi8KKwlpZiAobnRvaHMoY3At
PmNoLmNodW5rX2xlbmd0aCkgPCBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2Fja19jaHVuaykp
IHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCQkiaGFuZGxlX2FzY29uZl9hY2s6
IGNodW5rIHRvbyBzbWFsbCA9ICV4aFxuIiwKKwkJCW50b2hzKGNwLT5jaC5jaHVua19sZW5ndGgp
KTsKKwkJcmV0dXJuOworCX0KKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJc2VyaWFsX251bSA9IG50
b2hsKGNwLT5zZXJpYWxfbnVtYmVyKTsKKworCS8qCisJICogTk9URTogd2UgbWF5IHdhbnQgdG8g
aGFuZGxlIHRoaXMgZGlmZmVyZW50bHktIGN1cnJlbnRseSwgd2Ugd2lsbAorCSAqIGFib3J0IHdo
ZW4gd2UgZ2V0IGFuIGFjayBmb3IgdGhlIGV4cGVjdGVkIHNlcmlhbCBudW1iZXIgKyAxIChlZy4K
KwkgKiB3ZSBkaWRuJ3Qgc2VuZCBpdCksIHByb2Nlc3MgYW4gYWNrIG5vcm1hbGx5IGlmIGl0IGlz
IHRoZSBleHBlY3RlZAorCSAqIHNlcmlhbCBudW1iZXIsIGFuZCByZS1zZW5kIHRoZSBwcmV2aW91
cyBhY2sgZm9yICpBTEwqIG90aGVyCisJICogc2VyaWFsIG51bWJlcnMKKwkgKi8KKworCS8qCisJ
ICogaWYgdGhlIHNlcmlhbCBudW1iZXIgaXMgdGhlIG5leHQgZXhwZWN0ZWQsIGJ1dCBJIGRpZG4n
dCBzZW5kIGl0LAorCSAqIGFib3J0IHRoZSBhc29jLCBzaW5jZSBzb21lb25lIHByb2JhYmx5IGp1
c3QgaGlqYWNrZWQgdXMuLi4KKwkgKi8KKwlpZiAoc2VyaWFsX251bSA9PSAoYXNvYy0+YXNjb25m
X3NlcV9vdXQgKyAxKSkgeworCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOworCQljaGFyIG1zZ1tTQ1RQ
X0RJQUdfSU5GT19MRU5dOworCisJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAiaGFuZGxl
X2FzY29uZl9hY2s6IGdvdCB1bmV4cGVjdGVkIG5leHQgc2VyaWFsIG51bWJlciEgQWJvcnRpbmcg
YXNvYyFcbiIpOworCQlTQ1RQX1NOUFJJTlRGKG1zZywgc2l6ZW9mKG1zZyksICJOZXZlciBzZW50
IHNlcmlhbCBudW1iZXIgJTguOHgiLCBzZXJpYWxfbnVtKTsKKwkJb3BfZXJyID0gc2N0cF9nZW5l
cmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RPQ09MX1ZJT0xBVElPTiwgbXNnKTsKKwkJc2N0cF9h
Ym9ydF9hbl9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBvcF9lcnIsIFNDVFBfU09f
Tk9UX0xPQ0tFRCk7CisJCSphYm9ydF9ub191bmxvY2sgPSAxOworCQlyZXR1cm47CisJfQorCWlm
IChzZXJpYWxfbnVtICE9IGFzb2MtPmFzY29uZl9zZXFfb3V0X2Fja2VkICsgMSkgeworCQkvKiBn
b3QgYSBkdXBsaWNhdGUvdW5leHBlY3RlZCBBU0NPTkYtQUNLICovCisJCVNDVFBEQkcoU0NUUF9E
RUJVR19BU0NPTkYxLCAiaGFuZGxlX2FzY29uZl9hY2s6IGdvdCBkdXBsaWNhdGUvdW5leHBlY3Rl
ZCBzZXJpYWwgbnVtYmVyID0gJXhoIChleHBlY3RlZCA9ICV4aClcbiIsCisJCQlzZXJpYWxfbnVt
LCBhc29jLT5hc2NvbmZfc2VxX291dF9hY2tlZCArIDEpOworCQlyZXR1cm47CisJfQorCisJaWYg
KHNlcmlhbF9udW0gPT0gYXNvYy0+YXNjb25mX3NlcV9vdXQgLSAxKSB7CisJCS8qIHN0b3Agb3Vy
IHRpbWVyICovCisJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfQVNDT05GLCBzdGNi
LT5zY3RwX2VwLCBzdGNiLCBOVUxMLAorCQkJCVNDVFBfRlJPTV9TQ1RQX0FTQ09ORiArIFNDVFBf
TE9DXzUpOworCX0KKworCS8qIHByb2Nlc3MgdGhlIEFTQ09ORi1BQ0sgY29udGVudHMgKi8KKwlh
Y2tfbGVuZ3RoID0gbnRvaHMoY3AtPmNoLmNodW5rX2xlbmd0aCkgLQorCSAgICBzaXplb2Yoc3Ry
dWN0IHNjdHBfYXNjb25mX2Fja19jaHVuayk7CisJb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3Qgc2N0
cF9hc2NvbmZfYWNrX2NodW5rKTsKKwkvKiBwcm9jZXNzIHRocm91Z2ggYWxsIHBhcmFtZXRlcnMg
Ki8KKwl3aGlsZSAoYWNrX2xlbmd0aCA+PSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFt
aGRyKSkgeworCQl1bnNpZ25lZCBpbnQgcGFyYW1fbGVuZ3RoLCBwYXJhbV90eXBlOworCisJCS8q
IGdldCBwb2ludGVyIHRvIG5leHQgYXNjb25mIHBhcmFtZXRlciAqLworCQlhcGggPSAoc3RydWN0
IHNjdHBfYXNjb25mX3BhcmFtaGRyICopc2N0cF9tX2dldHB0cihtLCBvZmZzZXQsCisJCSAgICBz
aXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyKSwgYXBhcmFtX2J1Zik7CisJCWlmIChh
cGggPT0gTlVMTCkgeworCQkJLyogY2FuJ3QgZ2V0IGFuIGFzY29uZiBwYXJhbWhkciAqLworCQkJ
c2N0cF9hc2NvbmZfYWNrX2NsZWFyKHN0Y2IpOworCQkJcmV0dXJuOworCQl9CisJCXBhcmFtX3R5
cGUgPSBudG9ocyhhcGgtPnBoLnBhcmFtX3R5cGUpOworCQlwYXJhbV9sZW5ndGggPSBudG9ocyhh
cGgtPnBoLnBhcmFtX2xlbmd0aCk7CisJCWlmIChwYXJhbV9sZW5ndGggPiBhY2tfbGVuZ3RoKSB7
CisJCQlzY3RwX2FzY29uZl9hY2tfY2xlYXIoc3RjYik7CisJCQlyZXR1cm47CisJCX0KKwkJaWYg
KHBhcmFtX2xlbmd0aCA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIpKSB7CisJ
CQlzY3RwX2FzY29uZl9hY2tfY2xlYXIoc3RjYik7CisJCQlyZXR1cm47CisJCX0KKwkJLyogZ2V0
IHRoZSBjb21wbGV0ZSBwYXJhbWV0ZXIuLi4gKi8KKwkJaWYgKHBhcmFtX2xlbmd0aCA+IHNpemVv
ZihhcGFyYW1fYnVmKSkgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCQkJInBh
cmFtIGxlbmd0aCAoJXUpIGxhcmdlciB0aGFuIGJ1ZmZlciBzaXplIVxuIiwgcGFyYW1fbGVuZ3Ro
KTsKKwkJCXNjdHBfYXNjb25mX2Fja19jbGVhcihzdGNiKTsKKwkJCXJldHVybjsKKwkJfQorCQlh
cGggPSAoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyICopc2N0cF9tX2dldHB0cihtLCBvZmZz
ZXQsIHBhcmFtX2xlbmd0aCwgYXBhcmFtX2J1Zik7CisJCWlmIChhcGggPT0gTlVMTCkgeworCQkJ
c2N0cF9hc2NvbmZfYWNrX2NsZWFyKHN0Y2IpOworCQkJcmV0dXJuOworCQl9CisJCS8qIGNvcnJl
bGF0aW9uX2lkIGlzIHRyYW5zcGFyZW50IHRvIHBlZXIsIG5vIG50b2hsIG5lZWRlZCAqLworCQlp
ZCA9IGFwaC0+Y29ycmVsYXRpb25faWQ7CisKKwkJc3dpdGNoIChwYXJhbV90eXBlKSB7CisJCWNh
c2UgU0NUUF9FUlJPUl9DQVVTRV9JTkQ6CisJCQlsYXN0X2Vycm9yX2lkID0gaWQ7CisJCQkvKiBm
aW5kIHRoZSBjb3JyZXNwb25kaW5nIGFzY29uZiBwYXJhbSBpbiBvdXIgcXVldWUgKi8KKwkJCWFw
ID0gc2N0cF9hc2NvbmZfZmluZF9wYXJhbShzdGNiLCBpZCk7CisJCQlpZiAoYXAgPT0gTlVMTCkg
eworCQkJCS8qIGhtbS4uLiBjYW4ndCBmaW5kIHRoaXMgaW4gb3VyIHF1ZXVlISAqLworCQkJCWJy
ZWFrOworCQkJfQorCQkJLyogcHJvY2VzcyB0aGUgcGFyYW1ldGVyLCBmYWlsZWQgZmxhZyAqLwor
CQkJc2N0cF9hc2NvbmZfcHJvY2Vzc19wYXJhbV9hY2soc3RjYiwgYXAsIDApOworCQkJLyogcHJv
Y2VzcyB0aGUgZXJyb3IgcmVzcG9uc2UgKi8KKwkJCXNjdHBfYXNjb25mX3Byb2Nlc3NfZXJyb3Io
c3RjYiwgYXBoKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfU1VDQ0VTU19SRVBPUlQ6CisJCQkv
KiBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGFzY29uZiBwYXJhbSBpbiBvdXIgcXVldWUgKi8KKwkJ
CWFwID0gc2N0cF9hc2NvbmZfZmluZF9wYXJhbShzdGNiLCBpZCk7CisJCQlpZiAoYXAgPT0gTlVM
TCkgeworCQkJCS8qIGhtbS4uLiBjYW4ndCBmaW5kIHRoaXMgaW4gb3VyIHF1ZXVlISAqLworCQkJ
CWJyZWFrOworCQkJfQorCQkJLyogcHJvY2VzcyB0aGUgcGFyYW1ldGVyLCBzdWNjZXNzIGZsYWcg
Ki8KKwkJCXNjdHBfYXNjb25mX3Byb2Nlc3NfcGFyYW1fYWNrKHN0Y2IsIGFwLCAxKTsKKwkJCWJy
ZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0JCS8qIHN3aXRjaCAqLworCisJCS8qIHVw
ZGF0ZSByZW1haW5pbmcgQVNDT05GLUFDSyBtZXNzYWdlIGxlbmd0aCB0byBwcm9jZXNzICovCisJ
CWlmIChhY2tfbGVuZ3RoID4gU0NUUF9TSVpFMzIocGFyYW1fbGVuZ3RoKSkgeworCQkJYWNrX2xl
bmd0aCAtPSBTQ1RQX1NJWkUzMihwYXJhbV9sZW5ndGgpOworCQl9IGVsc2UgeworCQkJYnJlYWs7
CisJCX0KKwkJb2Zmc2V0ICs9IFNDVFBfU0laRTMyKHBhcmFtX2xlbmd0aCk7CisJfSAvKiB3aGls
ZSAqLworCisJLyoKKwkgKiBpZiB0aGVyZSBhcmUgYW55ICJzZW50IiBwYXJhbXMgc3RpbGwgb24g
dGhlIHF1ZXVlLCB0aGVzZSBhcmUKKwkgKiBpbXBsaWNpdGx5ICJzdWNjZXNzIiwgb3IgImZhaWxl
ZCIgKGlmIHdlIGdvdCBhbiBlcnJvciBiYWNrKSAuLi4KKwkgKiBzbyBwcm9jZXNzIHRoZXNlIGFw
cHJvcHJpYXRlbHkKKwkgKgorCSAqIHdlIGFzc3VtZSB0aGF0IHRoZSBjb3JyZWxhdGlvbl9pZCdz
IGFyZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcKKwkgKiBiZWdpbm5pbmcgZnJvbSAxIGFuZCB0
aGF0IHdlIGRvbid0IGhhdmUgKnRoYXQqIG1hbnkgb3V0c3RhbmRpbmcKKwkgKiBhdCBhbnkgZ2l2
ZW4gdGltZQorCSAqLworCWlmIChsYXN0X2Vycm9yX2lkID09IDApCisJCWxhc3RfZXJyb3JfaWQt
LTsJLyogc2V0IHRvICJtYXgiIHZhbHVlICovCisJVEFJTFFfRk9SRUFDSF9TQUZFKGFhLCAmc3Rj
Yi0+YXNvYy5hc2NvbmZfcXVldWUsIG5leHQsIGFhX25leHQpIHsKKwkJaWYgKGFhLT5zZW50ID09
IDEpIHsKKwkJCS8qCisJCQkgKiBpbXBsaWNpdGx5IHN1Y2Nlc3NmdWwgb3IgZmFpbGVkIGlmIGNv
cnJlbGF0aW9uX2lkCisJCQkgKiA8IGxhc3RfZXJyb3JfaWQsIHRoZW4gc3VjY2VzcyBlbHNlLCBm
YWlsdXJlCisJCQkgKi8KKwkJCWlmIChhYS0+YXAuYXBoLmNvcnJlbGF0aW9uX2lkIDwgbGFzdF9l
cnJvcl9pZCkKKwkJCQlzY3RwX2FzY29uZl9wcm9jZXNzX3BhcmFtX2FjayhzdGNiLCBhYSwgMSk7
CisJCQllbHNlCisJCQkJc2N0cF9hc2NvbmZfcHJvY2Vzc19wYXJhbV9hY2soc3RjYiwgYWEsIDAp
OworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIHNpbmNlIHdlIGFsd2F5cyBwcm9jZXNzIGluIG9y
ZGVyIChGSUZPIHF1ZXVlKSBpZgorCQkJICogd2UgcmVhY2ggb25lIHRoYXQgaGFzbid0IGJlZW4g
c2VudCwgdGhlIHJlc3QKKwkJCSAqIHNob3VsZCBub3QgaGF2ZSBiZWVuIHNlbnQgZWl0aGVyLiBz
bywgd2UncmUKKwkJCSAqIGRvbmUuLi4KKwkJCSAqLworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkv
KiB1cGRhdGUgdGhlIG5leHQgc2VxdWVuY2UgbnVtYmVyIHRvIHVzZSAqLworCWFzb2MtPmFzY29u
Zl9zZXFfb3V0X2Fja2VkKys7CisJLyogcmVtb3ZlIHRoZSBvbGQgQVNDT05GIG9uIG91ciBvdXRi
b3VuZCBxdWV1ZSAqLworCXNjdHBfdG9zc19vbGRfYXNjb25mKHN0Y2IpOworCWlmICghVEFJTFFf
RU1QVFkoJnN0Y2ItPmFzb2MuYXNjb25mX3F1ZXVlKSkgeworI2lmZGVmIFNDVFBfVElNRVJfQkFT
RURfQVNDT05GCisJCS8qIHdlIGhhdmUgbW9yZSBwYXJhbXMsIHNvIHJlc3RhcnQgb3VyIHRpbWVy
ICovCisJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0FTQ09ORiwgc3RjYi0+c2N0
cF9lcCwKKwkJCQkgc3RjYiwgbmV0KTsKKyNlbHNlCisJCS8qIHdlIGhhdmUgbW9yZSBwYXJhbXMs
IHNvIHNlbmQgb3V0IG1vcmUgKi8KKwkJc2N0cF9zZW5kX2FzY29uZihzdGNiLCBuZXQsIFNDVFBf
QUREUl9OT1RfTE9DS0VEKTsKKyNlbmRpZgorCX0KK30KKworI2lmZGVmIElORVQ2CitzdGF0aWMg
dWludDMyX3QKK3NjdHBfaXNfc2NvcGVpZF9pbl9uZXRzKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwg
c3RydWN0IHNvY2thZGRyICpzYSkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42LCAqbmV0
NjsKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisKKwlpZiAoc2EtPnNhX2ZhbWlseSAhPSBBRl9J
TkVUNikgeworCQkvKiB3cm9uZyBmYW1pbHkgKi8KKwkJcmV0dXJuICgwKTsKKwl9CisJc2luNiA9
IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2E7CisJaWYgKElONl9JU19BRERSX0xJTktMT0NBTCgm
c2luNi0+c2luNl9hZGRyKSA9PSAwKSB7CisJCS8qIG5vdCBsaW5rIGxvY2FsIGFkZHJlc3MgKi8K
KwkJcmV0dXJuICgwKTsKKwl9CisJLyogaHVudCB0aHJvdWdoIG91ciBkZXN0aW5hdGlvbiBuZXRz
IGxpc3QgZm9yIHRoaXMgc2NvcGVfaWQgKi8KKwlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFz
b2MubmV0cywgc2N0cF9uZXh0KSB7CisJCWlmICgoKHN0cnVjdCBzb2NrYWRkciAqKSgmbmV0LT5y
by5fbF9hZGRyKSktPnNhX2ZhbWlseSAhPQorCQkgICAgQUZfSU5FVDYpCisJCQljb250aW51ZTsK
KwkJbmV0NiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJm5ldC0+cm8uX2xfYWRkcjsKKwkJaWYg
KElONl9JU19BRERSX0xJTktMT0NBTCgmbmV0Ni0+c2luNl9hZGRyKSA9PSAwKQorCQkJY29udGlu
dWU7CisJCWlmIChzY3RwX2lzX3NhbWVfc2NvcGUoc2luNiwgbmV0NikpIHsKKwkJCS8qIGZvdW5k
IG9uZSAqLworCQkJcmV0dXJuICgxKTsKKwkJfQorCX0KKwkvKiBkaWRuJ3QgZmluZCBvbmUgKi8K
KwlyZXR1cm4gKDApOworfQorI2VuZGlmCisKKy8qCisgKiBhZGRyZXNzIG1hbmFnZW1lbnQgZnVu
Y3Rpb25zCisgKi8KK3N0YXRpYyB2b2lkCitzY3RwX2FkZHJfbWdtdF9hc3NvYyhzdHJ1Y3Qgc2N0
cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCSAgICAgc3RydWN0IHNjdHBf
aWZhICppZmEsIHVpbnQxNl90IHR5cGUsIGludCBhZGRyX2xvY2tlZCkKK3sKKwlpbnQgc3RhdHVz
OworCisJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgPT0g
MCB8fAorCSAgICBzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfRE9fQVND
T05GKSkgeworCQkvKiBzdWJzZXQgYm91bmQsIG5vIEFTQ09ORiBhbGxvd2VkIGNhc2UsIHNvIGln
bm9yZSAqLworCQlyZXR1cm47CisJfQorCS8qCisJICogbm90ZTogd2Uga25vdyB0aGlzIGlzIG5v
dCB0aGUgc3Vic2V0IGJvdW5kLCBubyBBU0NPTkYgY2FzZSBlZy4KKwkgKiB0aGlzIGlzIGJvdW5k
YWxsIG9yIHN1YnNldCBib3VuZCB3L0FTQ09ORiBhbGxvd2VkCisJICovCisKKwkvKiBmaXJzdCwg
bWFrZSBzdXJlIHRoYXQgdGhlIGFkZHJlc3MgaXMgSVB2NCBvciBJUHY2IGFuZCBub3QgamFpbGVk
ICovCisJc3dpdGNoIChpZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVDYK
KwljYXNlIEFGX0lORVQ2OgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisJCWlmIChwcmlzb25fY2hlY2tfaXA2KGlucC0+aXBfaW5wLmlucC5pbnBf
Y3JlZCwKKwkJICAgICAgICAgICAgICAgICAgICAgJmlmYS0+YWRkcmVzcy5zaW42LnNpbjZfYWRk
cikgIT0gMCkgeworCQkJcmV0dXJuOworCQl9CisjZW5kaWYKKwkJYnJlYWs7CisjZW5kaWYKKyNp
ZmRlZiBJTkVUCisJY2FzZSBBRl9JTkVUOgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWlmIChwcmlzb25fY2hlY2tfaXA0KGlucC0+aXBfaW5w
LmlucC5pbnBfY3JlZCwKKwkJICAgICAgICAgICAgICAgICAgICAgJmlmYS0+YWRkcmVzcy5zaW4u
c2luX2FkZHIpICE9IDApIHsKKwkJCXJldHVybjsKKwkJfQorI2VuZGlmCisJCWJyZWFrOworI2Vu
ZGlmCisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKyNpZmRlZiBJTkVUNgorCS8qIG1ha2Ugc3Vy
ZSB3ZSdyZSAiYWxsb3dlZCIgdG8gYWRkIHRoaXMgdHlwZSBvZiBhZGRyICovCisJaWYgKGlmYS0+
YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJLyogaW52YWxpZCBpZiB3ZSdy
ZSBub3QgYSB2NiBlbmRwb2ludCAqLworCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX0JPVU5EX1Y2KSA9PSAwKQorCQkJcmV0dXJuOworCQkvKiBpcyB0aGUgdjYgYWRkciBy
ZWFsbHkgdmFsaWQgPyAqLworCQlpZiAoaWZhLT5sb2NhbGlmYV9mbGFncyAmIFNDVFBfQUREUl9J
RkFfVU5VU0VBQkxFKSB7CisJCQlyZXR1cm47CisJCX0KKwl9CisjZW5kaWYKKwkvKiBwdXQgdGhp
cyBhZGRyZXNzIG9uIHRoZSAicGVuZGluZy9kbyBub3QgdXNlIHlldCIgbGlzdCAqLworCXNjdHBf
YWRkX2xvY2FsX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBpZmEpOworCS8qCisJICogY2hlY2sgYWRk
cmVzcyBzY29wZSBpZiBhZGRyZXNzIGlzIG91dCBvZiBzY29wZSwgZG9uJ3QgcXVldWUKKwkgKiBh
bnl0aGluZy4uLiBub3RlOiB0aGlzIHdvdWxkIGxlYXZlIHRoZSBhZGRyZXNzIG9uIGJvdGggaW5w
IGFuZAorCSAqIGFzb2MgbGlzdHMKKwkgKi8KKwlzd2l0Y2ggKGlmYS0+YWRkcmVzcy5zYS5zYV9m
YW1pbHkpIHsKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJeworCQlzdHJ1Y3Qgc29j
a2FkZHJfaW42ICpzaW42OworCisJCXNpbjYgPSAmaWZhLT5hZGRyZXNzLnNpbjY7CisJCWlmIChJ
TjZfSVNfQUREUl9VTlNQRUNJRklFRCgmc2luNi0+c2luNl9hZGRyKSkgeworCQkJLyogd2Ugc2tp
cCB1bnNwZWNpZmVkIGFkZHJlc3NlcyAqLworCQkJcmV0dXJuOworCQl9CisJCWlmIChJTjZfSVNf
QUREUl9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCWlmIChzdGNiLT5hc29jLnNj
b3BlLmxvY2FsX3Njb3BlID09IDApIHsKKwkJCQlyZXR1cm47CisJCQl9CisJCQkvKiBpcyBpdCB0
aGUgcmlnaHQgbGluayBsb2NhbCBzY29wZT8gKi8KKwkJCWlmIChzY3RwX2lzX3Njb3BlaWRfaW5f
bmV0cyhzdGNiLCAmaWZhLT5hZGRyZXNzLnNhKSA9PSAwKSB7CisJCQkJcmV0dXJuOworCQkJfQor
CQl9CisJCWlmIChzdGNiLT5hc29jLnNjb3BlLnNpdGVfc2NvcGUgPT0gMCAmJgorCQkgICAgSU42
X0lTX0FERFJfU0lURUxPQ0FMKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQlyZXR1cm47CisJCX0K
KwkJYnJlYWs7CisJfQorI2VuZGlmCisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwl7CisJ
CXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCisJCS8qIGludmFsaWQgaWYgd2UgYXJlIGEgdjYg
b25seSBlbmRwb2ludCAqLworCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0JPVU5EX1Y2KSAmJgorCQkgICAgU0NUUF9JUFY2X1Y2T05MWShpbnApKQorCQkJcmV0dXJuOwor
CisJCXNpbiA9ICZpZmEtPmFkZHJlc3Muc2luOworCQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIg
PT0gMCkgeworCQkJLyogd2Ugc2tpcCB1bnNwZWNpZmVkIGFkZHJlc3NlcyAqLworCQkJcmV0dXJu
OworCQl9CisJCWlmIChzdGNiLT5hc29jLnNjb3BlLmlwdjRfbG9jYWxfc2NvcGUgPT0gMCAmJgor
CQkgICAgSU40X0lTUFJJVkFURV9BRERSRVNTKCZzaW4tPnNpbl9hZGRyKSkgeworCQkJcmV0dXJu
OworCQl9CisJCWJyZWFrOworCX0KKyNlbmRpZgorCWRlZmF1bHQ6CisJCS8qIGVsc2UsIG5vdCBB
Rl9JTkVUIG9yIEFGX0lORVQ2LCBzbyBza2lwICovCisJCXJldHVybjsKKwl9CisKKwkvKiBxdWV1
ZSBhbiBhc2NvbmYgZm9yIHRoaXMgYWRkcmVzcyBhZGQvZGVsZXRlICovCisJaWYgKHNjdHBfaXNf
ZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0RPX0FTQ09ORikpIHsKKwkJLyogZG9lcyB0
aGUgcGVlciBkbyBhc2NvbmY/ICovCisJCWlmIChzdGNiLT5hc29jLmFzY29uZl9zdXBwb3J0ZWQp
IHsKKwkJCS8qIHF1ZXVlIGFuIGFzY29uZiBmb3IgdGhpcyBhZGRyICovCisJCQlzdGF0dXMgPSBz
Y3RwX2FzY29uZl9xdWV1ZV9hZGQoc3RjYiwgaWZhLCB0eXBlKTsKKworCQkJLyoKKwkJCSAqIGlm
IHF1ZXVlZCBvaywgYW5kIGluIHRoZSBvcGVuIHN0YXRlLCBzZW5kIG91dCB0aGUKKwkJCSAqIEFT
Q09ORi4gIElmIGluIHRoZSBub24tb3BlbiBzdGF0ZSwgdGhlc2Ugd2lsbCBiZQorCQkJICogc2Vu
dCB3aGVuIHRoZSBzdGF0ZSBnb2VzIG9wZW4uCisJCQkgKi8KKwkJCWlmIChzdGF0dXMgPT0gMCAm
JgorCQkJICAgICgoU0NUUF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9PUEVOKSB8fAor
CQkJICAgICAoU0NUUF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNF
SVZFRCkpKSB7CisjaWZkZWYgU0NUUF9USU1FUl9CQVNFRF9BU0NPTkYKKwkJCQlzY3RwX3RpbWVy
X3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9BU0NPTkYsIGlucCwKKwkJCQkgICAgc3RjYiwgc3RjYi0+
YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uKTsKKyNlbHNlCisJCQkJc2N0cF9zZW5kX2FzY29uZihz
dGNiLCBOVUxMLCBhZGRyX2xvY2tlZCk7CisjZW5kaWYKKwkJCX0KKwkJfQorCX0KK30KKworaW50
CitzY3RwX2FzY29uZl9pdGVyYXRvcl9lcChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCB2b2lkICpw
dHIsIHVpbnQzMl90IHZhbCBTQ1RQX1VOVVNFRCkKK3sKKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfaXRl
cmF0b3IgKmFzYzsKKwlzdHJ1Y3Qgc2N0cF9pZmEgKmlmYTsKKwlzdHJ1Y3Qgc2N0cF9sYWRkciAq
bDsKKwlpbnQgY250X2ludmFsaWQgPSAwOworCisJYXNjID0gKHN0cnVjdCBzY3RwX2FzY29uZl9p
dGVyYXRvciAqKXB0cjsKKwlMSVNUX0ZPUkVBQ0gobCwgJmFzYy0+bGlzdF9vZl93b3JrLCBzY3Rw
X254dF9hZGRyKSB7CisJCWlmYSA9IGwtPmlmYTsKKwkJc3dpdGNoIChpZmEtPmFkZHJlc3Muc2Eu
c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVDYKKwkJY2FzZSBBRl9JTkVUNjoKKwkJCS8qIGludmFs
aWQgaWYgd2UncmUgbm90IGEgdjYgZW5kcG9pbnQgKi8KKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpID09IDApIHsKKwkJCQljbnRfaW52YWxpZCsrOwor
CQkJCWlmIChhc2MtPmNudCA9PSBjbnRfaW52YWxpZCkKKwkJCQkJcmV0dXJuICgxKTsKKwkJCX0K
KwkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVAorCQljYXNlIEFGX0lORVQ6CisJCXsKKwkJ
CS8qIGludmFsaWQgaWYgd2UgYXJlIGEgdjYgb25seSBlbmRwb2ludCAqLworCQkJaWYgKChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgJiYKKwkJCSAgICBTQ1RQX0lQ
VjZfVjZPTkxZKGlucCkpIHsKKwkJCQljbnRfaW52YWxpZCsrOworCQkJCWlmIChhc2MtPmNudCA9
PSBjbnRfaW52YWxpZCkKKwkJCQkJcmV0dXJuICgxKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9Cisj
ZW5kaWYKKwkJZGVmYXVsdDoKKwkJCS8qIGludmFsaWQgYWRkcmVzcyBmYW1pbHkgKi8KKwkJCWNu
dF9pbnZhbGlkKys7CisJCQlpZiAoYXNjLT5jbnQgPT0gY250X2ludmFsaWQpCisJCQkJcmV0dXJu
ICgxKTsKKwkJfQorCX0KKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitzY3RwX2FzY29u
Zl9pdGVyYXRvcl9lcF9lbmQoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgdm9pZCAqcHRyLCB1aW50
MzJfdCB2YWwgU0NUUF9VTlVTRUQpCit7CisJc3RydWN0IHNjdHBfaWZhICppZmE7CisJc3RydWN0
IHNjdHBfYXNjb25mX2l0ZXJhdG9yICphc2M7CisJc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyLCAq
bmxhZGRyLCAqbDsKKworCS8qIE9ubHkgZm9yIHNwZWNpZmljIGNhc2Ugbm90IGJvdW5kIGFsbCAq
LworCWFzYyA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfaXRlcmF0b3IgKilwdHI7CisJTElTVF9GT1JF
QUNIKGwsICZhc2MtPmxpc3Rfb2Zfd29yaywgc2N0cF9ueHRfYWRkcikgeworCQlpZmEgPSBsLT5p
ZmE7CisJCWlmIChsLT5hY3Rpb24gPT0gU0NUUF9BRERfSVBfQUREUkVTUykgeworCQkJTElTVF9G
T1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwKKwkJCQkgICAgIHNjdHBfbnh0X2Fk
ZHIpIHsKKwkJCQlpZiAobGFkZHItPmlmYSA9PSBpZmEpIHsKKwkJCQkJbGFkZHItPmFjdGlvbiA9
IDA7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmIChsLT5hY3Rpb24gPT0g
U0NUUF9ERUxfSVBfQUREUkVTUykgeworCQkJTElTVF9GT1JFQUNIX1NBRkUobGFkZHIsICZpbnAt
PnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyLCBubGFkZHIpIHsKKwkJCQkvKiByZW1vdmUg
b25seSBhZnRlciBhbGwgZ3V5cyBhcmUgZG9uZSAqLworCQkJCWlmIChsYWRkci0+aWZhID09IGlm
YSkgeworCQkJCQlzY3RwX2RlbF9sb2NhbF9hZGRyX2VwKGlucCwgaWZhKTsKKwkJCQl9CisJCQl9
CisJCX0KKwl9CisJcmV0dXJuICgwKTsKK30KKwordm9pZAorc2N0cF9hc2NvbmZfaXRlcmF0b3Jf
c3RjYihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCQkg
IHZvaWQgKnB0ciwgdWludDMyX3QgdmFsIFNDVFBfVU5VU0VEKQoreworCXN0cnVjdCBzY3RwX2Fz
Y29uZl9pdGVyYXRvciAqYXNjOworCXN0cnVjdCBzY3RwX2lmYSAqaWZhOworCXN0cnVjdCBzY3Rw
X2xhZGRyICpsOworCWludCBjbnRfaW52YWxpZCA9IDA7CisJaW50IHR5cGUsIHN0YXR1czsKKwlp
bnQgbnVtX3F1ZXVlZCA9IDA7CisKKwlhc2MgPSAoc3RydWN0IHNjdHBfYXNjb25mX2l0ZXJhdG9y
ICopcHRyOworCUxJU1RfRk9SRUFDSChsLCAmYXNjLT5saXN0X29mX3dvcmssIHNjdHBfbnh0X2Fk
ZHIpIHsKKwkJaWZhID0gbC0+aWZhOworCQl0eXBlID0gbC0+YWN0aW9uOworCisJCS8qIGFkZHJl
c3MncyB2cmZfaWQgbXVzdCBiZSB0aGUgdnJmX2lkIG9mIHRoZSBhc3NvYyAqLworCQlpZiAoaWZh
LT52cmZfaWQgIT0gc3RjYi0+YXNvYy52cmZfaWQpIHsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJ
LyogU2FtZSBjaGVja3MgYWdhaW4gZm9yIGFzc29jICovCisJCXN3aXRjaCAoaWZhLT5hZGRyZXNz
LnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQ2CisJCWNhc2UgQUZfSU5FVDY6CisJCXsKKwkJ
CS8qIGludmFsaWQgaWYgd2UncmUgbm90IGEgdjYgZW5kcG9pbnQgKi8KKwkJCXN0cnVjdCBzb2Nr
YWRkcl9pbjYgKnNpbjY7CisKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfQk9VTkRfVjYpID09IDApIHsKKwkJCQljbnRfaW52YWxpZCsrOworCQkJCWlmIChhc2MtPmNu
dCA9PSBjbnRfaW52YWxpZCkKKwkJCQkJcmV0dXJuOworCQkJCWVsc2UKKwkJCQkJY29udGludWU7
CisJCQl9CisJCQlzaW42ID0gJmlmYS0+YWRkcmVzcy5zaW42OworCQkJaWYgKElONl9JU19BRERS
X1VOU1BFQ0lGSUVEKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQkJLyogd2Ugc2tpcCB1bnNwZWNp
ZmVkIGFkZHJlc3NlcyAqLworCQkJCWNvbnRpbnVlOworCQkJfQorI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQlpZiAocHJpc29uX2NoZWNrX2lw
NihpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCQkgICAgICAgICAgICAgICAgICAgICAmc2lu
Ni0+c2luNl9hZGRyKSAhPSAwKSB7CisJCQkJY29udGludWU7CisJCQl9CisjZW5kaWYKKwkJCWlm
IChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCQlpZiAoc3Rj
Yi0+YXNvYy5zY29wZS5sb2NhbF9zY29wZSA9PSAwKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0K
KwkJCQkvKiBpcyBpdCB0aGUgcmlnaHQgbGluayBsb2NhbCBzY29wZT8gKi8KKwkJCQlpZiAoc2N0
cF9pc19zY29wZWlkX2luX25ldHMoc3RjYiwgJmlmYS0+YWRkcmVzcy5zYSkgPT0gMCkgeworCQkJ
CQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJfQorI2VuZGlmCisjaWZkZWYg
SU5FVAorCQljYXNlIEFGX0lORVQ6CisJCXsKKwkJCS8qIGludmFsaWQgaWYgd2UgYXJlIGEgdjYg
b25seSBlbmRwb2ludCAqLworCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisKKwkJCS8qIGlu
dmFsaWQgaWYgd2UgYXJlIGEgdjYgb25seSBlbmRwb2ludCAqLworCQkJaWYgKChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgJiYKKwkJCSAgICBTQ1RQX0lQVjZfVjZP
TkxZKGlucCkpCisJCQkJY29udGludWU7CisKKwkJCXNpbiA9ICZpZmEtPmFkZHJlc3Muc2luOwor
CQkJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRyID09IDApIHsKKwkJCQkvKiB3ZSBza2lwIHVuc3Bl
Y2lmZWQgYWRkcmVzc2VzICovCisJCQkJY29udGludWU7CisJCQl9CisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCWlmIChwcmlzb25fY2hlY2tf
aXA0KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICZz
aW4tPnNpbl9hZGRyKSAhPSAwKSB7CisJCQkJY29udGludWU7CisJCQl9CisjZW5kaWYKKwkJCWlm
IChzdGNiLT5hc29jLnNjb3BlLmlwdjRfbG9jYWxfc2NvcGUgPT0gMCAmJgorCQkJICAgIElONF9J
U1BSSVZBVEVfQUREUkVTUygmc2luLT5zaW5fYWRkcikpIHsKKwkJCQljb250aW51ZTsKKwkJCX0K
KwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpICYmCisJ
CQkgICAgU0NUUF9JUFY2X1Y2T05MWShpbnApKSB7CisJCQkJY250X2ludmFsaWQrKzsKKwkJCQlp
ZiAoYXNjLT5jbnQgPT0gY250X2ludmFsaWQpCisJCQkJCXJldHVybjsKKwkJCQllbHNlCisJCQkJ
CWNvbnRpbnVlOworCQkJfQorCQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCQlkZWZhdWx0OgorCQkJ
LyogaW52YWxpZCBhZGRyZXNzIGZhbWlseSAqLworCQkJY250X2ludmFsaWQrKzsKKwkJCWlmIChh
c2MtPmNudCA9PSBjbnRfaW52YWxpZCkKKwkJCQlyZXR1cm47CisJCQllbHNlCisJCQkJY29udGlu
dWU7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh0eXBlID09IFNDVFBfQUREX0lQX0FERFJFU1Mp
IHsKKwkJCS8qIHByZXZlbnQgdGhpcyBhZGRyZXNzIGZyb20gYmVpbmcgdXNlZCBhcyBhIHNvdXJj
ZSAqLworCQkJc2N0cF9hZGRfbG9jYWxfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIGlmYSk7CisJCX0g
ZWxzZSBpZiAodHlwZSA9PSBTQ1RQX0RFTF9JUF9BRERSRVNTKSB7CisJCQlzdHJ1Y3Qgc2N0cF9u
ZXRzICpuZXQ7CisJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9u
ZXh0KSB7CisJCQkJLyogZGVsZXRlIHRoaXMgYWRkcmVzcyBpZiBjYWNoZWQgKi8KKwkJCQlpZiAo
bmV0LT5yby5fc19hZGRyID09IGlmYSkgeworCQkJCQlzY3RwX2ZyZWVfaWZhKG5ldC0+cm8uX3Nf
YWRkcik7CisJCQkJCW5ldC0+cm8uX3NfYWRkciA9IE5VTEw7CisJCQkJCW5ldC0+c3JjX2FkZHJf
c2VsZWN0ZWQgPSAwOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisJCQkJCVJPX05IRlJFRSgmbmV0LT5ybyk7CisjZWxzZQorCQkJCQlpZiAobmV0
LT5yby5yb19ydCkgeworCQkJCQkJUlRGUkVFKG5ldC0+cm8ucm9fcnQpOworCQkJCQkJbmV0LT5y
by5yb19ydCA9IE5VTEw7CisJCQkJCX0KKyNlbmRpZgorCQkJCQkvKgorCQkJCQkgKiBOb3cgd2Ug
ZGVsZXRlZCBvdXIgc3JjIGFkZHJlc3MsCisJCQkJCSAqIHNob3VsZCB3ZSBub3QgYWxzbyBub3cg
cmVzZXQgdGhlCisJCQkJCSAqIGN3bmQvcnRvIHRvIHN0YXJ0IGFzIGlmIGl0cyBhIG5ldworCQkJ
CQkgKiBhZGRyZXNzPworCQkJCQkgKi8KKwkJCQkJc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0
cF9zZXRfaW5pdGlhbF9jY19wYXJhbShzdGNiLCBuZXQpOworCQkJCQluZXQtPlJUTyA9IDA7CisJ
CQkJfQorCQkJfQorCQl9IGVsc2UgaWYgKHR5cGUgPT0gU0NUUF9TRVRfUFJJTV9BRERSKSB7CisJ
CQlpZiAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFM
TCkgPT0gMCkgeworCQkJCS8qIG11c3QgdmFsaWRhdGUgdGhlIGlmYSBpcyBpbiB0aGUgZXAgKi8K
KwkJCQlpZiAoc2N0cF9pc19hZGRyX2luX2VwKHN0Y2ItPnNjdHBfZXAsIGlmYSkgPT0gMCkgewor
CQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIE5lZWQgdG8gY2hlY2sg
c2NvcGVzIGZvciB0aGlzIGd1eSAqLworCQkJCWlmIChzY3RwX2lzX2FkZHJlc3NfaW5fc2NvcGUo
aWZhLCAmc3RjYi0+YXNvYy5zY29wZSwgMCkgPT0gMCkgeworCQkJCQljb250aW51ZTsKKwkJCQl9
CisJCQl9CisJCX0KKwkJLyogcXVldWUgYW4gYXNjb25mIGZvciB0aGlzIGFkZHJlc3MgYWRkL2Rl
bGV0ZSAqLworCQlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfRE9f
QVNDT05GKSAmJgorCQkgICAgc3RjYi0+YXNvYy5hc2NvbmZfc3VwcG9ydGVkID09IDEpIHsKKwkJ
CS8qIHF1ZXVlIGFuIGFzY29uZiBmb3IgdGhpcyBhZGRyICovCisJCQlzdGF0dXMgPSBzY3RwX2Fz
Y29uZl9xdWV1ZV9hZGQoc3RjYiwgaWZhLCB0eXBlKTsKKwkJCS8qCisJCQkgKiBpZiBxdWV1ZWQg
b2ssIGFuZCBpbiB0aGUgb3BlbiBzdGF0ZSwgdXBkYXRlIHRoZQorCQkJICogY291bnQgb2YgcXVl
dWVkIHBhcmFtcy4gIElmIGluIHRoZSBub24tb3BlbiBzdGF0ZSwKKwkJCSAqIHRoZXNlIGdldCBz
ZW50IHdoZW4gdGhlIGFzc29jIGdvZXMgb3Blbi4KKwkJCSAqLworCQkJaWYgKChTQ1RQX0dFVF9T
VEFURShzdGNiKSA9PSBTQ1RQX1NUQVRFX09QRU4pIHx8CisJCQkgICAgKFNDVFBfR0VUX1NUQVRF
KHN0Y2IpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpKSB7CisJCQkJaWYgKHN0YXR1
cyA+PSAwKSB7CisJCQkJCW51bV9xdWV1ZWQrKzsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJLyoK
KwkgKiBJZiB3ZSBoYXZlIHF1ZXVlZCBwYXJhbXMgaW4gdGhlIG9wZW4gc3RhdGUsIHNlbmQgb3V0
IGFuIEFTQ09ORi4KKwkgKi8KKwlpZiAobnVtX3F1ZXVlZCA+IDApIHsKKwkJc2N0cF9zZW5kX2Fz
Y29uZihzdGNiLCBOVUxMLCBTQ1RQX0FERFJfTk9UX0xPQ0tFRCk7CisJfQorfQorCit2b2lkCitz
Y3RwX2FzY29uZl9pdGVyYXRvcl9lbmQodm9pZCAqcHRyLCB1aW50MzJfdCB2YWwgU0NUUF9VTlVT
RUQpCit7CisJc3RydWN0IHNjdHBfYXNjb25mX2l0ZXJhdG9yICphc2M7CisJc3RydWN0IHNjdHBf
aWZhICppZmE7CisJc3RydWN0IHNjdHBfbGFkZHIgKmwsICpubDsKKworCWFzYyA9IChzdHJ1Y3Qg
c2N0cF9hc2NvbmZfaXRlcmF0b3IgKilwdHI7CisJTElTVF9GT1JFQUNIX1NBRkUobCwgJmFzYy0+
bGlzdF9vZl93b3JrLCBzY3RwX254dF9hZGRyLCBubCkgeworCQlpZmEgPSBsLT5pZmE7CisJCWlm
IChsLT5hY3Rpb24gPT0gU0NUUF9BRERfSVBfQUREUkVTUykgeworCQkJLyogQ2xlYXIgdGhlIGRl
ZmVyIHVzZSBmbGFnICovCisJCQlpZmEtPmxvY2FsaWZhX2ZsYWdzICY9IH5TQ1RQX0FERFJfREVG
RVJfVVNFOworCQl9CisJCXNjdHBfZnJlZV9pZmEoaWZhKTsKKwkJU0NUUF9aT05FX0ZSRUUoU0NU
UF9CQVNFX0lORk8oaXBpX3pvbmVfbGFkZHIpLCBsKTsKKwkJU0NUUF9ERUNSX0xBRERSX0NPVU5U
KCk7CisJfQorCVNDVFBfRlJFRShhc2MsIFNDVFBfTV9BU0NfSVQpOworfQorCisvKgorICogc2Eg
aXMgdGhlIHNvY2thZGRyIHRvIGFzayB0aGUgcGVlciB0byBzZXQgcHJpbWFyeSB0by4KKyAqIHJl
dHVybnM6IDAgPSBjb21wbGV0ZWQsIC0xID0gZXJyb3IKKyAqLworaW50MzJfdAorc2N0cF9zZXRf
cHJpbWFyeV9pcF9hZGRyZXNzX3NhKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNvY2th
ZGRyICpzYSkKK3sKKwl1aW50MzJfdCB2cmZfaWQ7CisJc3RydWN0IHNjdHBfaWZhICppZmE7CisK
KwkvKiBmaW5kIHRoZSBpZmEgZm9yIHRoZSBkZXNpcmVkIHNldCBwcmltYXJ5ICovCisJdnJmX2lk
ID0gc3RjYi0+YXNvYy52cmZfaWQ7CisJaWZhID0gc2N0cF9maW5kX2lmYV9ieV9hZGRyKHNhLCB2
cmZfaWQsIFNDVFBfQUREUl9OT1RfTE9DS0VEKTsKKwlpZiAoaWZhID09IE5VTEwpIHsKKwkJLyog
SW52YWxpZCBhZGRyZXNzICovCisJCXJldHVybiAoLTEpOworCX0KKworCS8qIHF1ZXVlIGFuIEFT
Q09ORjpTRVRfUFJJTV9BRERSIHRvIGJlIHNlbnQgKi8KKwlpZiAoIXNjdHBfYXNjb25mX3F1ZXVl
X2FkZChzdGNiLCBpZmEsIFNDVFBfU0VUX1BSSU1fQUREUikpIHsKKwkJLyogc2V0IHByaW1hcnkg
cXVldWluZyBzdWNjZWVkZWQgKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCQki
c2V0X3ByaW1hcnlfaXBfYWRkcmVzc19zYTogcXVldWVkIG9uIHRjYj0lcCwgIiwKKwkJCSh2b2lk
ICopc3RjYik7CisJCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX0FTQ09ORjEsIHNhKTsKKwkJaWYg
KChTQ1RQX0dFVF9TVEFURShzdGNiKSA9PSBTQ1RQX1NUQVRFX09QRU4pIHx8CisJCSAgICAoU0NU
UF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkpIHsKKyNp
ZmRlZiBTQ1RQX1RJTUVSX0JBU0VEX0FTQ09ORgorCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJ
TUVSX1RZUEVfQVNDT05GLAorCQkJCQkgc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJCQkJIHN0Y2It
PmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbik7CisjZWxzZQorCQkJc2N0cF9zZW5kX2FzY29uZihz
dGNiLCBOVUxMLCBTQ1RQX0FERFJfTk9UX0xPQ0tFRCk7CisjZW5kaWYKKwkJfQorCX0gZWxzZSB7
CisJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAic2V0X3ByaW1hcnlfaXBfYWRkcmVzc19z
YTogZmFpbGVkIHRvIGFkZCB0byBxdWV1ZSBvbiB0Y2I9JXAsICIsCisJCQkodm9pZCAqKXN0Y2Ip
OworCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19BU0NPTkYxLCBzYSk7CisJCXJldHVybiAoLTEp
OworCX0KKwlyZXR1cm4gKDApOworfQorCitpbnQKK3NjdHBfaXNfYWRkcl9wZW5kaW5nKHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYSkKK3sKKwlzdHJ1Y3Qg
c2N0cF90bWl0X2NodW5rICpjaGssICpuY2hrOworCXVuc2lnbmVkIGludCBvZmZzZXQsIGFzY29u
Zl9saW1pdDsKKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfY2h1bmsgKmFjcDsKKwlzdHJ1Y3Qgc2N0cF9h
c2NvbmZfcGFyYW1oZHIgKmFwaDsKKwl1aW50OF90IGFwYXJhbV9idWZbU0NUUF9QQVJBTV9CVUZG
RVJfU0laRV07CisJc3RydWN0IHNjdHBfcGFyYW1oZHIgKnBoOworCWludCBhZGRfY250LCBkZWxf
Y250OworCXVpbnQxNl90IGxhc3RfcGFyYW1fdHlwZTsKKworCWFkZF9jbnQgPSBkZWxfY250ID0g
MDsKKwlsYXN0X3BhcmFtX3R5cGUgPSAwOworCVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGssICZzdGNi
LT5hc29jLmFzY29uZl9zZW5kX3F1ZXVlLCBzY3RwX25leHQsIG5jaGspIHsKKwkJaWYgKGNoay0+
ZGF0YSA9PSBOVUxMKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgImlzX2FkZHJf
cGVuZGluZzogTm8gbWJ1ZiBkYXRhP1xuIik7CisJCQljb250aW51ZTsKKwkJfQorCQlvZmZzZXQg
PSAwOworCQlhY3AgPSBtdG9kKGNoay0+ZGF0YSwgc3RydWN0IHNjdHBfYXNjb25mX2NodW5rICop
OworCQlvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9jaHVuayk7CisJCWFzY29u
Zl9saW1pdCA9IG50b2hzKGFjcC0+Y2guY2h1bmtfbGVuZ3RoKTsKKwkJcGggPSAoc3RydWN0IHNj
dHBfcGFyYW1oZHIgKilzY3RwX21fZ2V0cHRyKGNoay0+ZGF0YSwgb2Zmc2V0LCBzaXplb2Yoc3Ry
dWN0IHNjdHBfcGFyYW1oZHIpLCBhcGFyYW1fYnVmKTsKKwkJaWYgKHBoID09IE5VTEwpIHsKKwkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAiaXNfYWRkcl9wZW5kaW5nOiBjb3VsZG4ndCBn
ZXQgbG9va3VwIGFkZHIhXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCW9mZnNldCArPSBudG9o
cyhwaC0+cGFyYW1fbGVuZ3RoKTsKKworCQlhcGggPSAoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFt
aGRyICopc2N0cF9tX2dldHB0cihjaGstPmRhdGEsIG9mZnNldCwgc2l6ZW9mKHN0cnVjdCBzY3Rw
X2FzY29uZl9wYXJhbWhkciksIGFwYXJhbV9idWYpOworCQlpZiAoYXBoID09IE5VTEwpIHsKKwkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAiaXNfYWRkcl9wZW5kaW5nOiBFbXB0eSBBU0NP
TkYgd2lsbCBiZSBzZW50P1xuIik7CisJCQljb250aW51ZTsKKwkJfQorCQl3aGlsZSAoYXBoICE9
IE5VTEwpIHsKKwkJCXVuc2lnbmVkIGludCBwYXJhbV9sZW5ndGgsIHBhcmFtX3R5cGU7CisKKwkJ
CXBhcmFtX3R5cGUgPSBudG9ocyhhcGgtPnBoLnBhcmFtX3R5cGUpOworCQkJcGFyYW1fbGVuZ3Ro
ID0gbnRvaHMoYXBoLT5waC5wYXJhbV9sZW5ndGgpOworCQkJaWYgKG9mZnNldCArIHBhcmFtX2xl
bmd0aCA+IGFzY29uZl9saW1pdCkgeworCQkJCS8qIHBhcmFtZXRlciBnb2VzIGJleW9uZCBlbmQg
b2YgY2h1bmshICovCisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAocGFyYW1fbGVuZ3RoID4gc2l6
ZW9mKGFwYXJhbV9idWYpKSB7CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJpc19h
ZGRyX3BlbmRpbmc6IHBhcmFtIGxlbmd0aCAoJXUpIGxhcmdlciB0aGFuIGJ1ZmZlciBzaXplIVxu
IiwgcGFyYW1fbGVuZ3RoKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChwYXJhbV9sZW5ndGgg
PD0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSkgeworCQkJCVNDVFBEQkcoU0NUUF9ERUJV
R19BU0NPTkYxLCAiaXNfYWRkcl9wZW5kaW5nOiBwYXJhbSBsZW5ndGgoJXUpIHRvbyBzaG9ydFxu
IiwgcGFyYW1fbGVuZ3RoKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJYXBoID0gKHN0cnVjdCBz
Y3RwX2FzY29uZl9wYXJhbWhkciAqKXNjdHBfbV9nZXRwdHIoY2hrLT5kYXRhLCBvZmZzZXQsIHBh
cmFtX2xlbmd0aCwgYXBhcmFtX2J1Zik7CisJCQlpZiAoYXBoID09IE5VTEwpIHsKKwkJCQlTQ1RQ
REJHKFNDVFBfREVCVUdfQVNDT05GMSwgImlzX2FkZHJfcGVuZGluZzogY291bGRuJ3QgZ2V0IGVu
dGlyZSBwYXJhbVxuIik7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXBoID0gKHN0cnVjdCBzY3Rw
X3BhcmFtaGRyICopKGFwaCArIDEpOworCQkJaWYgKHNjdHBfYWRkcl9tYXRjaChwaCwgJnNjdHBf
aWZhLT5hZGRyZXNzLnNhKSAhPSAwKSB7CisJCQkJc3dpdGNoIChwYXJhbV90eXBlKSB7CisJCQkJ
Y2FzZSBTQ1RQX0FERF9JUF9BRERSRVNTOgorCQkJCQlhZGRfY250Kys7CisJCQkJCWJyZWFrOwor
CQkJCWNhc2UgU0NUUF9ERUxfSVBfQUREUkVTUzoKKwkJCQkJZGVsX2NudCsrOworCQkJCQlicmVh
azsKKwkJCQlkZWZhdWx0OgorCQkJCQlicmVhazsKKwkJCQl9CisJCQkJbGFzdF9wYXJhbV90eXBl
ID0gcGFyYW1fdHlwZTsKKwkJCX0KKworCQkJb2Zmc2V0ICs9IFNDVFBfU0laRTMyKHBhcmFtX2xl
bmd0aCk7CisJCQlpZiAob2Zmc2V0ID49IGFzY29uZl9saW1pdCkgeworCQkJCS8qIG5vIG1vcmUg
ZGF0YSBpbiB0aGUgbWJ1ZiBjaGFpbiAqLworCQkJCWJyZWFrOworCQkJfQorCQkJLyogZ2V0IHBv
aW50ZXIgdG8gbmV4dCBhc2NvbmYgcGFyYW0gKi8KKwkJCWFwaCA9IChzdHJ1Y3Qgc2N0cF9hc2Nv
bmZfcGFyYW1oZHIgKilzY3RwX21fZ2V0cHRyKGNoay0+ZGF0YSwgb2Zmc2V0LCBzaXplb2Yoc3Ry
dWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyKSwgYXBhcmFtX2J1Zik7CisJCX0KKwl9CisKKwkvKiB3
ZSB3YW50IHRvIGZpbmQgdGhlIHNlcXVlbmNlcyB3aGljaCBjb25zaXN0IG9mIEFERCAtPiBERUwg
LT4gQUREIG9yIERFTCAtPiBBREQgKi8KKwlpZiAoYWRkX2NudCA+IGRlbF9jbnQgfHwKKwkgICAg
KGFkZF9jbnQgPT0gZGVsX2NudCAmJiBsYXN0X3BhcmFtX3R5cGUgPT0gU0NUUF9BRERfSVBfQURE
UkVTUykpIHsKKwkJcmV0dXJuICgxKTsKKwl9CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHN0
cnVjdCBzb2NrYWRkciAqCitzY3RwX2ZpbmRfdmFsaWRfbG9jYWxhZGRyKHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwgaW50IGFkZHJfbG9ja2VkKQoreworCXN0cnVjdCBzY3RwX3ZyZiAqdnJmID0gTlVM
TDsKKwlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZuOworCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9p
ZmE7CisKKwlpZiAoYWRkcl9sb2NrZWQgPT0gU0NUUF9BRERSX05PVF9MT0NLRUQpCisJCVNDVFBf
SVBJX0FERFJfUkxPQ0soKTsKKwl2cmYgPSBzY3RwX2ZpbmRfdnJmKHN0Y2ItPmFzb2MudnJmX2lk
KTsKKwlpZiAodnJmID09IE5VTEwpIHsKKwkJaWYgKGFkZHJfbG9ja2VkID09IFNDVFBfQUREUl9O
T1RfTE9DS0VEKQorCQkJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7CisJCXJldHVybiAoTlVMTCk7
CisJfQorCUxJU1RfRk9SRUFDSChzY3RwX2lmbiwgJnZyZi0+aWZubGlzdCwgbmV4dF9pZm4pIHsK
KwkJaWYgKHN0Y2ItPmFzb2Muc2NvcGUubG9vcGJhY2tfc2NvcGUgPT0gMCAmJgorCQkgICAgU0NU
UF9JRk5fSVNfSUZUX0xPT1Aoc2N0cF9pZm4pKSB7CisJCQkvKiBTa2lwIGlmIGxvb3BiYWNrX3Nj
b3BlIG5vdCBzZXQgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCUxJU1RfRk9SRUFDSChzY3RwX2lm
YSwgJnNjdHBfaWZuLT5pZmFsaXN0LCBuZXh0X2lmYSkgeworCQkJc3dpdGNoIChzY3RwX2lmYS0+
YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQljYXNlIEFGX0lORVQ6CisJ
CQkJaWYgKHN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9hZGRyX2xlZ2FsKSB7CisJCQkJCXN0cnVjdCBz
b2NrYWRkcl9pbiAqc2luOworCisJCQkJCXNpbiA9ICZzY3RwX2lmYS0+YWRkcmVzcy5zaW47CisJ
CQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSAwKSB7CisJCQkJCQkvKiBza2lwIHVuc3Bl
Y2lmZWQgYWRkcmVzc2VzICovCisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJCWlmIChwcmlzb25f
Y2hlY2tfaXA0KHN0Y2ItPnNjdHBfZXAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCQkJCSAgICAg
ICAgICAgICAgICAgICAgICZzaW4tPnNpbl9hZGRyKSAhPSAwKSB7CisJCQkJCQljb250aW51ZTsK
KwkJCQkJfQorI2VuZGlmCisJCQkJCWlmIChzdGNiLT5hc29jLnNjb3BlLmlwdjRfbG9jYWxfc2Nv
cGUgPT0gMCAmJgorCQkJCQkgICAgSU40X0lTUFJJVkFURV9BRERSRVNTKCZzaW4tPnNpbl9hZGRy
KSkKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCWlmIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChz
dGNiLCBzY3RwX2lmYSkgJiYKKwkJCQkJICAgICghc2N0cF9pc19hZGRyX3BlbmRpbmcoc3RjYiwg
c2N0cF9pZmEpKSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQkvKiBmb3VuZCBhIHZhbGlkIGxvY2Fs
IHY0IGFkZHJlc3MgdG8gdXNlICovCisJCQkJCWlmIChhZGRyX2xvY2tlZCA9PSBTQ1RQX0FERFJf
Tk9UX0xPQ0tFRCkKKwkJCQkJCVNDVFBfSVBJX0FERFJfUlVOTE9DSygpOworCQkJCQlyZXR1cm4g
KCZzY3RwX2lmYS0+YWRkcmVzcy5zYSk7CisJCQkJfQorCQkJCWJyZWFrOworI2VuZGlmCisjaWZk
ZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6CisJCQkJaWYgKHN0Y2ItPmFzb2Muc2NvcGUuaXB2
Nl9hZGRyX2xlZ2FsKSB7CisJCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisKKwkJCQkJ
aWYgKHNjdHBfaWZhLT5sb2NhbGlmYV9mbGFncyAmIFNDVFBfQUREUl9JRkFfVU5VU0VBQkxFKSB7
CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCisJCQkJCXNpbjYgPSAmc2N0cF9pZmEtPmFkZHJl
c3Muc2luNjsKKwkJCQkJaWYgKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzaW42LT5zaW42X2Fk
ZHIpKSB7CisJCQkJCQkvKiB3ZSBza2lwIHVuc3BlY2lmZWQgYWRkcmVzc2VzICovCisJCQkJCQlj
b250aW51ZTsKKwkJCQkJfQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisJCQkJCWlmIChwcmlzb25fY2hlY2tfaXA2KHN0Y2ItPnNjdHBfZXAtPmlw
X2lucC5pbnAuaW5wX2NyZWQsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICZzaW42LT5zaW42
X2FkZHIpICE9IDApIHsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisjZW5kaWYKKwkJCQkJaWYg
KHN0Y2ItPmFzb2Muc2NvcGUubG9jYWxfc2NvcGUgPT0gMCAmJgorCQkJCQkgICAgSU42X0lTX0FE
RFJfTElOS0xPQ0FMKCZzaW42LT5zaW42X2FkZHIpKQorCQkJCQkJY29udGludWU7CisJCQkJCWlm
IChzdGNiLT5hc29jLnNjb3BlLnNpdGVfc2NvcGUgPT0gMCAmJgorCQkJCQkgICAgSU42X0lTX0FE
RFJfU0lURUxPQ0FMKCZzaW42LT5zaW42X2FkZHIpKQorCQkJCQkJY29udGludWU7CisKKwkJCQkJ
aWYgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNjdHBfaWZhKSAmJgorCQkJCQkgICAg
KCFzY3RwX2lzX2FkZHJfcGVuZGluZyhzdGNiLCBzY3RwX2lmYSkpKQorCQkJCQkJY29udGludWU7
CisJCQkJCS8qIGZvdW5kIGEgdmFsaWQgbG9jYWwgdjYgYWRkcmVzcyB0byB1c2UgKi8KKwkJCQkJ
aWYgKGFkZHJfbG9ja2VkID09IFNDVFBfQUREUl9OT1RfTE9DS0VEKQorCQkJCQkJU0NUUF9JUElf
QUREUl9SVU5MT0NLKCk7CisJCQkJCXJldHVybiAoJnNjdHBfaWZhLT5hZGRyZXNzLnNhKTsKKwkJ
CQl9CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJ
CX0KKwl9CisJLyogbm8gdmFsaWQgYWRkcmVzc2VzIGZvdW5kICovCisJaWYgKGFkZHJfbG9ja2Vk
ID09IFNDVFBfQUREUl9OT1RfTE9DS0VEKQorCQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKKwly
ZXR1cm4gKE5VTEwpOworfQorCitzdGF0aWMgc3RydWN0IHNvY2thZGRyICoKK3NjdHBfZmluZF92
YWxpZF9sb2NhbGFkZHJfZXAoc3RydWN0IHNjdHBfdGNiICpzdGNiKQoreworCXN0cnVjdCBzY3Rw
X2xhZGRyICpsYWRkcjsKKworCUxJU1RfRk9SRUFDSChsYWRkciwgJnN0Y2ItPnNjdHBfZXAtPnNj
dHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7CisJCWlmIChsYWRkci0+aWZhID09IE5VTEwp
IHsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIGlzIHRoZSBhZGRyZXNzIHJlc3RyaWN0ZWQgPyAq
LworCQlpZiAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgbGFkZHItPmlmYSkgJiYKKwkJ
ICAgICghc2N0cF9pc19hZGRyX3BlbmRpbmcoc3RjYiwgbGFkZHItPmlmYSkpKQorCQkJY29udGlu
dWU7CisKKwkJLyogZm91bmQgYSB2YWxpZCBsb2NhbCBhZGRyZXNzIHRvIHVzZSAqLworCQlyZXR1
cm4gKCZsYWRkci0+aWZhLT5hZGRyZXNzLnNhKTsKKwl9CisJLyogbm8gdmFsaWQgYWRkcmVzc2Vz
IGZvdW5kICovCisJcmV0dXJuIChOVUxMKTsKK30KKworLyoKKyAqIGJ1aWxkcyBhbiBBU0NPTkYg
Y2h1bmsgZnJvbSBxdWV1ZWQgQVNDT05GIHBhcmFtcy4KKyAqIHJldHVybnMgTlVMTCBvbiBlcnJv
ciAobm8gbWJ1Ziwgbm8gQVNDT05GIHBhcmFtcyBxdWV1ZWQsIGV0YykuCisgKi8KK3N0cnVjdCBt
YnVmICoKK3NjdHBfY29tcG9zZV9hc2NvbmYoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBpbnQgKnJl
dGxlbiwgaW50IGFkZHJfbG9ja2VkKQoreworCXN0cnVjdCBtYnVmICptX2FzY29uZiwgKm1fYXNj
b25mX2NoazsKKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkciAqYWE7CisJc3RydWN0IHNjdHBfYXNj
b25mX2NodW5rICphY3A7CisJc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyICphcGg7CisJc3Ry
dWN0IHNjdHBfYXNjb25mX2FkZHJfcGFyYW0gKmFhcDsKKwl1aW50MzJfdCBwX2xlbmd0aDsKKwl1
aW50MzJfdCBjb3JyZWxhdGlvbl9pZCA9IDE7CS8qIDAgaXMgcmVzZXJ2ZWQuLi4gKi8KKwljYWRk
cl90IHB0ciwgbG9va3VwX3B0cjsKKwl1aW50OF90IGxvb2t1cF91c2VkID0gMDsKKworCS8qIGFy
ZSB0aGVyZSBhbnkgYXNjb25mIHBhcmFtcyB0byBzZW5kPyAqLworCVRBSUxRX0ZPUkVBQ0goYWEs
ICZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgbmV4dCkgeworCQlpZiAoYWEtPnNlbnQgPT0gMCkK
KwkJCWJyZWFrOworCX0KKwlpZiAoYWEgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKworCS8q
CisJICogZ2V0IGEgY2h1bmsgaGVhZGVyIG1idWYgYW5kIGEgY2x1c3RlciBmb3IgdGhlIGFzY29u
ZiBwYXJhbXMgc2luY2UKKwkgKiBpdCdzIHNpbXBsZXIgdG8gZmlsbCBpbiB0aGUgYXNjb25mIGNo
dW5rIGhlYWRlciBsb29rdXAgYWRkcmVzcyBvbgorCSAqIHRoZSBmbHkKKwkgKi8KKwltX2FzY29u
Zl9jaGsgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9j
aHVuayksIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwlpZiAobV9hc2NvbmZfY2hrID09IE5V
TEwpIHsKKwkJLyogbm8gbWJ1ZidzICovCisJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAor
CQkJInNjdHBfY29tcG9zZV9hc2NvbmY6IGNvdWxkbid0IGdldCBjaHVuayBtYnVmIVxuIik7CisJ
CXJldHVybiAoTlVMTCk7CisJfQorCW1fYXNjb25mID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKE1D
TEJZVEVTLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJaWYgKG1fYXNjb25mID09IE5VTEwp
IHsKKwkJLyogbm8gbWJ1ZidzICovCisJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAorCQkJ
InNjdHBfY29tcG9zZV9hc2NvbmY6IGNvdWxkbid0IGdldCBtYnVmIVxuIik7CisJCXNjdHBfbV9m
cmVlbShtX2FzY29uZl9jaGspOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlTQ1RQX0JVRl9MRU4o
bV9hc2NvbmZfY2hrKSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfY2h1bmspOworCVNDVFBf
QlVGX0xFTihtX2FzY29uZikgPSAwOworCWFjcCA9IG10b2QobV9hc2NvbmZfY2hrLCBzdHJ1Y3Qg
c2N0cF9hc2NvbmZfY2h1bmsgKik7CisJbWVtc2V0KGFjcCwgMCwgc2l6ZW9mKHN0cnVjdCBzY3Rw
X2FzY29uZl9jaHVuaykpOworCS8qIHNhdmUgcG9pbnRlcnMgdG8gbG9va3VwIGFkZHJlc3MgYW5k
IGFzY29uZiBwYXJhbXMgKi8KKwlsb29rdXBfcHRyID0gKGNhZGRyX3QpKGFjcCArIDEpOwkvKiBh
ZnRlciB0aGUgaGVhZGVyICovCisJcHRyID0gbXRvZChtX2FzY29uZiwgY2FkZHJfdCk7CS8qIGJl
Z2lubmluZyBvZiBjbHVzdGVyICovCisKKwkvKiBmaWxsIGluIGNodW5rIGhlYWRlciBpbmZvICov
CisJYWNwLT5jaC5jaHVua190eXBlID0gU0NUUF9BU0NPTkY7CisJYWNwLT5jaC5jaHVua19mbGFn
cyA9IDA7CisJYWNwLT5zZXJpYWxfbnVtYmVyID0gaHRvbmwoc3RjYi0+YXNvYy5hc2NvbmZfc2Vx
X291dCk7CisJc3RjYi0+YXNvYy5hc2NvbmZfc2VxX291dCsrOworCisJLyogYWRkIHBhcmFtZXRl
cnMuLi4gdXAgdG8gc21hbGxlc3QgTVRVIGFsbG93ZWQgKi8KKwlUQUlMUV9GT1JFQUNIKGFhLCAm
c3RjYi0+YXNvYy5hc2NvbmZfcXVldWUsIG5leHQpIHsKKwkJaWYgKGFhLT5zZW50KQorCQkJY29u
dGludWU7CisJCS8qIGdldCB0aGUgcGFyYW1ldGVyIGxlbmd0aCAqLworCQlwX2xlbmd0aCA9IFND
VFBfU0laRTMyKGFhLT5hcC5hcGgucGgucGFyYW1fbGVuZ3RoKTsKKwkJLyogd2lsbCBpdCBmaXQg
aW4gY3VycmVudCBjaHVuaz8gKi8KKwkJaWYgKChTQ1RQX0JVRl9MRU4obV9hc2NvbmYpICsgcF9s
ZW5ndGggPiBzdGNiLT5hc29jLnNtYWxsZXN0X210dSkgfHwKKwkJICAgIChTQ1RQX0JVRl9MRU4o
bV9hc2NvbmYpICsgcF9sZW5ndGggPiBNQ0xCWVRFUykpIHsKKwkJCS8qIHdvbid0IGZpdCwgc28g
d2UncmUgZG9uZSB3aXRoIHRoaXMgY2h1bmsgKi8KKwkJCWJyZWFrOworCQl9CisJCS8qIGFzc2ln
biAoYW5kIHN0b3JlKSBhIGNvcnJlbGF0aW9uIGlkICovCisJCWFhLT5hcC5hcGguY29ycmVsYXRp
b25faWQgPSBjb3JyZWxhdGlvbl9pZCsrOworCisJCS8qCisJCSAqIGZpbGwgaW4gYWRkcmVzcyBp
ZiB3ZSdyZSBkb2luZyBhIGRlbGV0ZSB0aGlzIGlzIGEgc2ltcGxlCisJCSAqIHdheSBmb3IgdXMg
dG8gZmlsbCBpbiB0aGUgY29ycmVsYXRpb24gYWRkcmVzcywgd2hpY2gKKwkJICogc2hvdWxkIG9u
bHkgYmUgdXNlZCBieSB0aGUgcGVlciBpZiB3ZSdyZSBkZWxldGluZyBvdXIKKwkJICogc291cmNl
IGFkZHJlc3MgYW5kIGFkZGluZyBhIG5ldyBhZGRyZXNzIChlLmcuIHJlbnVtYmVyaW5nCisJCSAq
IGNhc2UpCisJCSAqLworCQlpZiAobG9va3VwX3VzZWQgPT0gMCAmJgorCQkgICAgKGFhLT5zcGVj
aWFsX2RlbCA9PSAwKSAmJgorCQkgICAgYWEtPmFwLmFwaC5waC5wYXJhbV90eXBlID09IFNDVFBf
REVMX0lQX0FERFJFU1MpIHsKKwkJCXN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICpsb29rdXA7
CisJCQl1aW50MTZfdCBwX3NpemUsIGFkZHJfc2l6ZTsKKworCQkJbG9va3VwID0gKHN0cnVjdCBz
Y3RwX2lwdjZhZGRyX3BhcmFtICopbG9va3VwX3B0cjsKKwkJCWxvb2t1cC0+cGgucGFyYW1fdHlw
ZSA9CisJCQkgICAgaHRvbnMoYWEtPmFwLmFkZHJwLnBoLnBhcmFtX3R5cGUpOworCQkJaWYgKGFh
LT5hcC5hZGRycC5waC5wYXJhbV90eXBlID09IFNDVFBfSVBWNl9BRERSRVNTKSB7CisJCQkJLyog
Y29weSBJUHY2IGFkZHJlc3MgKi8KKwkJCQlwX3NpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2
NmFkZHJfcGFyYW0pOworCQkJCWFkZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpOwor
CQkJfSBlbHNlIHsKKwkJCQkvKiBjb3B5IElQdjQgYWRkcmVzcyAqLworCQkJCXBfc2l6ZSA9IHNp
emVvZihzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSk7CisJCQkJYWRkcl9zaXplID0gc2l6ZW9m
KHN0cnVjdCBpbl9hZGRyKTsKKwkJCX0KKwkJCWxvb2t1cC0+cGgucGFyYW1fbGVuZ3RoID0gaHRv
bnMoU0NUUF9TSVpFMzIocF9zaXplKSk7CisJCQltZW1jcHkobG9va3VwLT5hZGRyLCAmYWEtPmFw
LmFkZHJwLmFkZHIsIGFkZHJfc2l6ZSk7CisJCQlTQ1RQX0JVRl9MRU4obV9hc2NvbmZfY2hrKSAr
PSBTQ1RQX1NJWkUzMihwX3NpemUpOworCQkJbG9va3VwX3VzZWQgPSAxOworCQl9CisJCS8qIGNv
cHkgaW50byBjdXJyZW50IHNwYWNlICovCisJCW1lbWNweShwdHIsICZhYS0+YXAsIHBfbGVuZ3Ro
KTsKKworCQkvKiBuZXR3b3JrIGVsZW1lbnRzIGFuZCB1cGRhdGUgbGVuZ3RocyAqLworCQlhcGgg
PSAoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyICopcHRyOworCQlhYXAgPSAoc3RydWN0IHNj
dHBfYXNjb25mX2FkZHJfcGFyYW0gKilwdHI7CisJCS8qIGNvcnJlbGF0aW9uX2lkIGlzIHRyYW5z
cGFyZW50IHRvIHBlZXIsIG5vIGh0b25sIG5lZWRlZCAqLworCQlhcGgtPnBoLnBhcmFtX3R5cGUg
PSBodG9ucyhhcGgtPnBoLnBhcmFtX3R5cGUpOworCQlhcGgtPnBoLnBhcmFtX2xlbmd0aCA9IGh0
b25zKGFwaC0+cGgucGFyYW1fbGVuZ3RoKTsKKwkJYWFwLT5hZGRycC5waC5wYXJhbV90eXBlID0g
aHRvbnMoYWFwLT5hZGRycC5waC5wYXJhbV90eXBlKTsKKwkJYWFwLT5hZGRycC5waC5wYXJhbV9s
ZW5ndGggPSBodG9ucyhhYXAtPmFkZHJwLnBoLnBhcmFtX2xlbmd0aCk7CisKKwkJU0NUUF9CVUZf
TEVOKG1fYXNjb25mKSArPSBTQ1RQX1NJWkUzMihwX2xlbmd0aCk7CisJCXB0ciArPSBTQ1RQX1NJ
WkUzMihwX2xlbmd0aCk7CisKKwkJLyoKKwkJICogdGhlc2UgcGFyYW1zIGFyZSByZW1vdmVkIG9m
ZiB0aGUgcGVuZGluZyBsaXN0IHVwb24KKwkJICogZ2V0dGluZyBhbiBBU0NPTkYtQUNLIGJhY2sg
ZnJvbSB0aGUgcGVlciwganVzdCBzZXQgZmxhZworCQkgKi8KKwkJYWEtPnNlbnQgPSAxOworCX0K
KwkvKiBjaGVjayB0byBzZWUgaWYgdGhlIGxvb2t1cCBhZGRyIGhhcyBiZWVuIHBvcHVsYXRlZCB5
ZXQgKi8KKwlpZiAobG9va3VwX3VzZWQgPT0gMCkgeworCQkvKiBOT1RFOiBpZiB0aGUgYWRkcmVz
cyBwYXJhbSBpcyBvcHRpb25hbCwgY2FuIHNraXAgdGhpcy4uLiAqLworCQkvKiBhZGQgYW55IHZh
bGlkIChleGlzdGluZykgYWRkcmVzcy4uLiAqLworCQlzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJh
bSAqbG9va3VwOworCQl1aW50MTZfdCBwX3NpemUsIGFkZHJfc2l6ZTsKKwkJc3RydWN0IHNvY2th
ZGRyICpmb3VuZF9hZGRyOworCQljYWRkcl90IGFkZHJfcHRyOworCisJCWlmIChzdGNiLT5zY3Rw
X2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpCisJCQlmb3VuZF9hZGRy
ID0gc2N0cF9maW5kX3ZhbGlkX2xvY2FsYWRkcihzdGNiLAorCQkJCQkJCSAgICAgICBhZGRyX2xv
Y2tlZCk7CisJCWVsc2UKKwkJCWZvdW5kX2FkZHIgPSBzY3RwX2ZpbmRfdmFsaWRfbG9jYWxhZGRy
X2VwKHN0Y2IpOworCisJCWxvb2t1cCA9IChzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSAqKWxv
b2t1cF9wdHI7CisJCWlmIChmb3VuZF9hZGRyICE9IE5VTEwpIHsKKwkJCXN3aXRjaCAoZm91bmRf
YWRkci0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6CisJCQkJ
LyogY29weSBJUHY2IGFkZHJlc3MgKi8KKwkJCQlsb29rdXAtPnBoLnBhcmFtX3R5cGUgPQorCQkJ
CSAgICBodG9ucyhTQ1RQX0lQVjZfQUREUkVTUyk7CisJCQkJcF9zaXplID0gc2l6ZW9mKHN0cnVj
dCBzY3RwX2lwdjZhZGRyX3BhcmFtKTsKKwkJCQlhZGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGlu
Nl9hZGRyKTsKKwkJCQlhZGRyX3B0ciA9IChjYWRkcl90KSYoKHN0cnVjdCBzb2NrYWRkcl9pbjYg
KikKKwkJCQkgICAgZm91bmRfYWRkciktPnNpbjZfYWRkcjsKKwkJCQlicmVhazsKKyNlbmRpZgor
I2lmZGVmIElORVQKKwkJCWNhc2UgQUZfSU5FVDoKKwkJCQkvKiBjb3B5IElQdjQgYWRkcmVzcyAq
LworCQkJCWxvb2t1cC0+cGgucGFyYW1fdHlwZSA9CisJCQkJICAgIGh0b25zKFNDVFBfSVBWNF9B
RERSRVNTKTsKKwkJCQlwX3NpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0p
OworCQkJCWFkZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW5fYWRkcik7CisJCQkJYWRkcl9wdHIg
PSAoY2FkZHJfdCkmKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikKKwkJCQkgICAgZm91bmRfYWRkcikt
PnNpbl9hZGRyOworCQkJCWJyZWFrOworI2VuZGlmCisJCQlkZWZhdWx0OgorCQkJCVNDVFBEQkco
U0NUUF9ERUJVR19BU0NPTkYxLAorCQkJCQkic2N0cF9jb21wb3NlX2FzY29uZjogbm8gdXNhYmxl
IGxvb2t1cCBhZGRyIChmYW1pbHkgPSAlZCkhXG4iLAorCQkJCQlmb3VuZF9hZGRyLT5zYV9mYW1p
bHkpOworCQkJCXNjdHBfbV9mcmVlbShtX2FzY29uZl9jaGspOworCQkJCXNjdHBfbV9mcmVlbSht
X2FzY29uZik7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJCWxvb2t1cC0+cGgucGFyYW1f
bGVuZ3RoID0gaHRvbnMoU0NUUF9TSVpFMzIocF9zaXplKSk7CisJCQltZW1jcHkobG9va3VwLT5h
ZGRyLCBhZGRyX3B0ciwgYWRkcl9zaXplKTsKKwkJCVNDVFBfQlVGX0xFTihtX2FzY29uZl9jaGsp
ICs9IFNDVFBfU0laRTMyKHBfc2l6ZSk7CisJCX0gZWxzZSB7CisJCQkvKiB1aCBvaC4uLiBkb24n
dCBoYXZlIGFueSBhZGRyZXNzPz8gKi8KKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAor
CQkJCSJzY3RwX2NvbXBvc2VfYXNjb25mOiBubyBsb29rdXAgYWRkciFcbiIpOworCQkJc2N0cF9t
X2ZyZWVtKG1fYXNjb25mX2Noayk7CisJCQlzY3RwX21fZnJlZW0obV9hc2NvbmYpOworCQkJcmV0
dXJuIChOVUxMKTsKKwkJfQorCX0KKwkvKiBjaGFpbiBpdCBhbGwgdG9nZXRoZXIgKi8KKwlTQ1RQ
X0JVRl9ORVhUKG1fYXNjb25mX2NoaykgPSBtX2FzY29uZjsKKwkqcmV0bGVuID0gU0NUUF9CVUZf
TEVOKG1fYXNjb25mX2NoaykgKyBTQ1RQX0JVRl9MRU4obV9hc2NvbmYpOworCWFjcC0+Y2guY2h1
bmtfbGVuZ3RoID0gaHRvbnMoKnJldGxlbik7CisKKwlyZXR1cm4gKG1fYXNjb25mX2Noayk7Cit9
CisKKy8qCisgKiBzZWN0aW9uIHRvIGhhbmRsZSBhZGRyZXNzIGNoYW5nZXMgYmVmb3JlIGFuIGFz
c29jaWF0aW9uIGlzIHVwIGVnLiBjaGFuZ2VzCisgKiBkdXJpbmcgSU5JVC9JTklULUFDSy9DT09L
SUUtRUNITyBoYW5kc2hha2UKKyAqLworCisvKgorICogcHJvY2Vzc2VzIHRoZSAobG9jYWwpIGFk
ZHJlc3NlcyBpbiB0aGUgSU5JVC1BQ0sgY2h1bmsKKyAqLworc3RhdGljIHZvaWQKK3NjdHBfcHJv
Y2Vzc19pbml0YWNrX2FkZHJlc3NlcyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBtYnVm
ICptLAorICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBsZW5ndGgpCit7CisJ
c3RydWN0IHNjdHBfcGFyYW1oZHIgdG1wX3BhcmFtLCAqcGg7CisJdWludDE2X3QgcGxlbiwgcHR5
cGU7CisJc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYTsKKwl1bmlvbiBzY3RwX3NvY2tzdG9yZSBz
dG9yZTsKKyNpZmRlZiBJTkVUNgorCXN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtIGFkZHI2X3N0
b3JlOworI2VuZGlmCisjaWZkZWYgSU5FVAorCXN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtIGFk
ZHI0X3N0b3JlOworI2VuZGlmCisKKwlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMiwgInByb2Nl
c3NpbmcgaW5pdC1hY2sgYWRkcmVzc2VzXG4iKTsKKwlpZiAoc3RjYiA9PSBOVUxMKSAvKiBVbi1u
ZWVkZWQgY2hlY2sgZm9yIFNBICovCisJCXJldHVybjsKKworCS8qIGNvbnZlcnQgdG8gdXBwZXIg
Ym91bmQgKi8KKwlsZW5ndGggKz0gb2Zmc2V0OworCisJaWYgKChvZmZzZXQgKyBzaXplb2Yoc3Ry
dWN0IHNjdHBfcGFyYW1oZHIpKSA+IGxlbmd0aCkgeworCQlyZXR1cm47CisJfQorCS8qIGdvIHRo
cm91Z2ggdGhlIGFkZHJlc3NlcyBpbiB0aGUgaW5pdC1hY2sgKi8KKwlwaCA9IChzdHJ1Y3Qgc2N0
cF9wYXJhbWhkciAqKQorCSAgICAgc2N0cF9tX2dldHB0cihtLCBvZmZzZXQsIHNpemVvZihzdHJ1
Y3Qgc2N0cF9wYXJhbWhkciksCisJICAgICAgICAgICAgICAgICAgICh1aW50OF90ICopJnRtcF9w
YXJhbSk7CisJd2hpbGUgKHBoICE9IE5VTEwpIHsKKwkJcHR5cGUgPSBudG9ocyhwaC0+cGFyYW1f
dHlwZSk7CisJCXBsZW4gPSBudG9ocyhwaC0+cGFyYW1fbGVuZ3RoKTsKKwkJc3dpdGNoIChwdHlw
ZSkgeworI2lmZGVmIElORVQ2CisJCWNhc2UgU0NUUF9JUFY2X0FERFJFU1M6CisJCXsKKwkJCXN0
cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICphNnA7CisKKwkJCS8qIGdldCB0aGUgZW50aXJlIElQ
djYgYWRkcmVzcyBwYXJhbSAqLworCQkJYTZwID0gKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFt
ICopCisJCQkgICAgc2N0cF9tX2dldHB0cihtLCBvZmZzZXQsCisJCQkgICAgc2l6ZW9mKHN0cnVj
dCBzY3RwX2lwdjZhZGRyX3BhcmFtKSwKKwkJCSAgICAodWludDhfdCAqKSZhZGRyNl9zdG9yZSk7
CisJCQlpZiAocGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pIHx8CisJ
CQkgICAgYTZwID09IE5VTEwpIHsKKwkJCQlyZXR1cm47CisJCQl9CisJCQltZW1zZXQoJnN0b3Jl
LCAwLCBzaXplb2YodW5pb24gc2N0cF9zb2Nrc3RvcmUpKTsKKwkJCXN0b3JlLnNpbjYuc2luNl9m
YW1pbHkgPSBBRl9JTkVUNjsKKyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJCQlzdG9yZS5zaW42LnNp
bjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisJCQlzdG9yZS5z
aW42LnNpbjZfcG9ydCA9IHN0Y2ItPnJwb3J0OworCQkJbWVtY3B5KCZzdG9yZS5zaW42LnNpbjZf
YWRkciwgYTZwLT5hZGRyLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisJCQlicmVhazsKKwkJ
fQorI2VuZGlmCisjaWZkZWYgSU5FVAorCQljYXNlIFNDVFBfSVBWNF9BRERSRVNTOgorCQl7CisJ
CQlzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAqYTRwOworCisJCQkvKiBnZXQgdGhlIGVudGly
ZSBJUHY0IGFkZHJlc3MgcGFyYW0gKi8KKwkJCWE0cCA9IChzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9w
YXJhbSAqKXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LAorCQkJCQkJCQkJICBzaXplb2Yoc3RydWN0
IHNjdHBfaXB2NGFkZHJfcGFyYW0pLAorCQkJCQkJCQkJICAodWludDhfdCAqKSZhZGRyNF9zdG9y
ZSk7CisJCQlpZiAocGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0pIHx8
CisJCQkgICAgYTRwID09IE5VTEwpIHsKKwkJCQlyZXR1cm47CisJCQl9CisJCQltZW1zZXQoJnN0
b3JlLCAwLCBzaXplb2YodW5pb24gc2N0cF9zb2Nrc3RvcmUpKTsKKwkJCXN0b3JlLnNpbi5zaW5f
ZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwkJCXN0b3JlLnNpbi5zaW5f
bGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwkJCXN0b3JlLnNpbi5z
aW5fcG9ydCA9IHN0Y2ItPnJwb3J0OworCQkJc3RvcmUuc2luLnNpbl9hZGRyLnNfYWRkciA9IGE0
cC0+YWRkcjsKKwkJCWJyZWFrOworCQl9CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCWdvdG8gbmV4
dF9hZGRyOworCQl9CisKKwkJLyogc2VlIGlmIHRoaXMgYWRkcmVzcyByZWFsbHkgKHN0aWxsKSBl
eGlzdHMgKi8KKwkJc2N0cF9pZmEgPSBzY3RwX2ZpbmRfaWZhX2J5X2FkZHIoJnN0b3JlLnNhLCBz
dGNiLT5hc29jLnZyZl9pZCwKKwkJCQkJCSBTQ1RQX0FERFJfTk9UX0xPQ0tFRCk7CisJCWlmIChz
Y3RwX2lmYSA9PSBOVUxMKSB7CisJCQkvKiBhZGRyZXNzIGRvZXNuJ3QgZXhpc3QgYW55bW9yZSAq
LworCQkJaW50IHN0YXR1czsKKworCQkJLyogYXJlIEFTQ09ORnMgYWxsb3dlZCA/ICovCisJCQlp
ZiAoKHNjdHBfaXNfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLAorCQkJICAgIFNDVFBfUENCX0ZM
QUdTX0RPX0FTQ09ORikpICYmCisJCQkgICAgc3RjYi0+YXNvYy5hc2NvbmZfc3VwcG9ydGVkKSB7
CisJCQkJLyogcXVldWUgYW4gQVNDT05GIERFTF9JUF9BRERSRVNTICovCisJCQkJc3RhdHVzID0g
c2N0cF9hc2NvbmZfcXVldWVfc2FfZGVsZXRlKHN0Y2IsICZzdG9yZS5zYSk7CisJCQkJLyoKKwkJ
CQkgKiBpZiBxdWV1ZWQgb2ssIGFuZCBpbiBjb3JyZWN0IHN0YXRlLCBzZW5kCisJCQkJICogb3V0
IHRoZSBBU0NPTkYuCisJCQkJICovCisJCQkJaWYgKHN0YXR1cyA9PSAwICYmCisJCQkJICAgIFND
VFBfR0VUX1NUQVRFKHN0Y2IpID09IFNDVFBfU1RBVEVfT1BFTikgeworI2lmZGVmIFNDVFBfVElN
RVJfQkFTRURfQVNDT05GCisJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0FT
Q09ORiwKKwkJCQkJCQkgc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJCQkJCQkgc3RjYi0+YXNvYy5w
cmltYXJ5X2Rlc3RpbmF0aW9uKTsKKyNlbHNlCisJCQkJCXNjdHBfc2VuZF9hc2NvbmYoc3RjYiwg
TlVMTCwgU0NUUF9BRERSX05PVF9MT0NLRUQpOworI2VuZGlmCisJCQkJfQorCQkJfQorCQl9CisK
K25leHRfYWRkcjoKKwkJLyoKKwkJICogU2FuaXR5IGNoZWNrOiAgTWFrZSBzdXJlIHRoZSBsZW5n
dGggaXNuJ3QgMCwgb3RoZXJ3aXNlCisJCSAqIHdlJ2xsIGJlIHN0dWNrIGluIHRoaXMgbG9vcCBm
b3IgYSBsb25nIHRpbWUuLi4KKwkJICovCisJCWlmIChTQ1RQX1NJWkUzMihwbGVuKSA9PSAwKSB7
CisJCQlTQ1RQX1BSSU5URigicHJvY2Vzc19pbml0YWNrX2FkZHJzOiBiYWQgbGVuICglZCkgdHlw
ZT0leGhcbiIsCisJCQkJICAgIHBsZW4sIHB0eXBlKTsKKwkJCXJldHVybjsKKwkJfQorCQkvKiBn
ZXQgbmV4dCBwYXJhbWV0ZXIgKi8KKwkJb2Zmc2V0ICs9IFNDVFBfU0laRTMyKHBsZW4pOworCQlp
ZiAoKG9mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpID4gbGVuZ3RoKQorCQkJ
cmV0dXJuOworCQlwaCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKXNjdHBfbV9nZXRwdHIobSwg
b2Zmc2V0LAorCQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSwgKHVpbnQ4X3QgKikm
dG1wX3BhcmFtKTsKKwl9IC8qIHdoaWxlICovCit9CisKKy8qIEZJWCBNRTogbmVlZCB0byB2ZXJp
ZnkgcmV0dXJuIHJlc3VsdCBmb3IgdjYgYWRkcmVzcyB0eXBlIGlmIHY2IGRpc2FibGVkICovCisv
KgorICogY2hlY2tzIHRvIHNlZSBpZiBhIHNwZWNpZmljIGFkZHJlc3MgaXMgaW4gdGhlIGluaXRh
Y2sgYWRkcmVzcyBsaXN0IHJldHVybnMKKyAqIDEgaWYgZm91bmQsIDAgaWYgbm90CisgKi8KK3N0
YXRpYyB1aW50MzJfdAorc2N0cF9hZGRyX2luX2luaXRhY2soc3RydWN0IG1idWYgKm0sIHVpbnQz
Ml90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhKQoreworCXN0
cnVjdCBzY3RwX3BhcmFtaGRyIHRtcF9wYXJhbSwgKnBoOworCXVpbnQxNl90IHBsZW4sIHB0eXBl
OworI2lmZGVmIElORVQKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKwlzdHJ1Y3Qgc2N0cF9p
cHY0YWRkcl9wYXJhbSAqYTRwOworCXN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtIGFkZHI0X3N0
b3JlOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42Owor
CXN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICphNnA7CisJc3RydWN0IHNjdHBfaXB2NmFkZHJf
cGFyYW0gYWRkcjZfc3RvcmU7CisjaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQorCXN0cnVj
dCBzb2NrYWRkcl9pbjYgc2luNl90bXA7CisjZW5kaWYKKyNlbmRpZgorCisJc3dpdGNoIChzYS0+
c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwkJYnJlYWs7CisjZW5k
aWYKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJCWJyZWFrOworI2VuZGlmCisJZGVm
YXVsdDoKKwkJcmV0dXJuICgwKTsKKwl9CisKKwlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMiwg
ImZpbmRfaW5pdGFja19hZGRyOiBzdGFydGluZyBzZWFyY2ggZm9yICIpOworCVNDVFBEQkdfQURE
UihTQ1RQX0RFQlVHX0FTQ09ORjIsIHNhKTsKKwkvKiBjb252ZXJ0IHRvIHVwcGVyIGJvdW5kICov
CisJbGVuZ3RoICs9IG9mZnNldDsKKworCWlmICgob2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3Rw
X3BhcmFtaGRyKSkgPiBsZW5ndGgpIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJ
CQkiZmluZF9pbml0YWNrX2FkZHI6IGludmFsaWQgb2Zmc2V0P1xuIik7CisJCXJldHVybiAoMCk7
CisJfQorCS8qIGdvIHRocm91Z2ggdGhlIGFkZHJlc3NlcyBpbiB0aGUgaW5pdC1hY2sgKi8KKwlw
aCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LAorCSAg
ICBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpLCAodWludDhfdCAqKSAmIHRtcF9wYXJhbSk7
CisJd2hpbGUgKHBoICE9IE5VTEwpIHsKKwkJcHR5cGUgPSBudG9ocyhwaC0+cGFyYW1fdHlwZSk7
CisJCXBsZW4gPSBudG9ocyhwaC0+cGFyYW1fbGVuZ3RoKTsKKwkJc3dpdGNoIChwdHlwZSkgewor
I2lmZGVmIElORVQ2CisJCWNhc2UgU0NUUF9JUFY2X0FERFJFU1M6CisJCQlpZiAoc2EtPnNhX2Zh
bWlseSA9PSBBRl9JTkVUNikgeworCQkJCS8qIGdldCB0aGUgZW50aXJlIElQdjYgYWRkcmVzcyBw
YXJhbSAqLworCQkJCWlmIChwbGVuICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJh
bSkpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS8qIGdldCB0aGUgZW50aXJlIElQdjYgYWRk
cmVzcyBwYXJhbSAqLworCQkJCWE2cCA9IChzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSAqKQor
CQkJCSAgICAgIHNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LAorCQkJCSAgICAgICAgICAgICAgICAg
ICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtKSwKKwkJCQkgICAgICAgICAgICAg
ICAgICAgICh1aW50OF90ICopJmFkZHI2X3N0b3JlKTsKKwkJCQlpZiAoYTZwID09IE5VTEwpIHsK
KwkJCQkJcmV0dXJuICgwKTsKKwkJCQl9CisJCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42
ICopc2E7CisjaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQorCQkJCWlmIChJTjZfSVNfU0NP
UEVfTElOS0xPQ0FMKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQkJCS8qIGNyZWF0ZSBhIGNvcHkg
YW5kIGNsZWFyIHNjb3BlICovCisJCQkJCW1lbWNweSgmc2luNl90bXAsIHNpbjYsCisJCQkJCSAg
ICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworCQkJCQlzaW42ID0gJnNpbjZfdG1w
OworCQkJCQlpbjZfY2xlYXJzY29wZSgmc2luNi0+c2luNl9hZGRyKTsKKwkJCQl9CisjZW5kaWYg
LyogU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLworCQkJCWlmIChtZW1jbXAoJnNpbjYtPnNpbjZf
YWRkciwgYTZwLT5hZGRyLAorCQkJCSAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikp
ID09IDApIHsKKwkJCQkJLyogZm91bmQgaXQgKi8KKwkJCQkJcmV0dXJuICgxKTsKKwkJCQl9CisJ
CQl9CisJCQlicmVhazsKKyNlbmRpZiAvKiBJTkVUNiAqLworI2lmZGVmIElORVQKKwkJY2FzZSBT
Q1RQX0lQVjRfQUREUkVTUzoKKwkJCWlmIChzYS0+c2FfZmFtaWx5ID09IEFGX0lORVQpIHsKKwkJ
CQlpZiAocGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0pKSB7CisJCQkJ
CWJyZWFrOworCQkJCX0KKwkJCQkvKiBnZXQgdGhlIGVudGlyZSBJUHY0IGFkZHJlc3MgcGFyYW0g
Ki8KKwkJCQlhNHAgPSAoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0gKikKKwkJCQkgICAgICBz
Y3RwX21fZ2V0cHRyKG0sIG9mZnNldCwKKwkJCQkgICAgICAgICAgICAgICAgICAgIHNpemVvZihz
dHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSksCisJCQkJICAgICAgICAgICAgICAgICAgICAodWlu
dDhfdCAqKSZhZGRyNF9zdG9yZSk7CisJCQkJaWYgKGE0cCA9PSBOVUxMKSB7CisJCQkJCXJldHVy
biAoMCk7CisJCQkJfQorCQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTsKKwkJCQlp
ZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gYTRwLT5hZGRyKSB7CisJCQkJCS8qIGZvdW5kIGl0
ICovCisJCQkJCXJldHVybiAoMSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisjZW5kaWYKKwkJ
ZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCS8qIGdldCBuZXh0IHBhcmFtZXRlciAqLworCQlv
ZmZzZXQgKz0gU0NUUF9TSVpFMzIocGxlbik7CisJCWlmIChvZmZzZXQgKyBzaXplb2Yoc3RydWN0
IHNjdHBfcGFyYW1oZHIpID4gbGVuZ3RoKSB7CisJCQlyZXR1cm4gKDApOworCQl9CisJCXBoID0g
KHN0cnVjdCBzY3RwX3BhcmFtaGRyICopCisJCSAgICBzY3RwX21fZ2V0cHRyKG0sIG9mZnNldCwg
c2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSwKKwkJICAgICh1aW50OF90ICopICYgdG1wX3Bh
cmFtKTsKKwl9IC8qIHdoaWxlICovCisJLyogbm90IGZvdW5kISAqLworCXJldHVybiAoMCk7Cit9
CisKKy8qCisgKiBtYWtlcyBzdXJlIHRoYXQgdGhlIGN1cnJlbnQgZW5kcG9pbnQgbG9jYWwgYWRk
ciBsaXN0IGlzIGNvbnNpc3RlbnQgd2l0aAorICogdGhlIG5ldyBhc3NvY2lhdGlvbiAoZWcuIHN1
YnNldCBib3VuZCwgYXNjb25mIGFsbG93ZWQpIGFkZHMgYWRkcmVzc2VzIGFzCisgKiBuZWNlc3Nh
cnkKKyAqLworc3RhdGljIHZvaWQKK3NjdHBfY2hlY2tfYWRkcmVzc19saXN0X2VwKHN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiwgc3RydWN0IG1idWYgKm0sIGludCBvZmZzZXQsCisgICAgaW50IGxlbmd0
aCwgc3RydWN0IHNvY2thZGRyICppbml0X2FkZHIpCit7CisJc3RydWN0IHNjdHBfbGFkZHIgKmxh
ZGRyOworCisJLyogZ28gdGhyb3VnaCB0aGUgZW5kcG9pbnQgbGlzdCAqLworCUxJU1RfRk9SRUFD
SChsYWRkciwgJnN0Y2ItPnNjdHBfZXAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7
CisJCS8qIGJlIHBhcmFub2lkIGFuZCB2YWxpZGF0ZSB0aGUgbGFkZHIgKi8KKwkJaWYgKGxhZGRy
LT5pZmEgPT0gTlVMTCkgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCQkJImNo
ZWNrX2FkZHJfbGlzdF9lcDogbGFkZHItPmlmYSBpcyBOVUxMIik7CisJCQljb250aW51ZTsKKwkJ
fQorCQkvKiBkbyBpIGhhdmUgaXQgaW1wbGljaXRseT8gKi8KKwkJaWYgKHNjdHBfY21wYWRkcigm
bGFkZHItPmlmYS0+YWRkcmVzcy5zYSwgaW5pdF9hZGRyKSkgeworCQkJY29udGludWU7CisJCX0K
KwkJLyogY2hlY2sgdG8gc2VlIGlmIGluIHRoZSBpbml0LWFjayAqLworCQlpZiAoIXNjdHBfYWRk
cl9pbl9pbml0YWNrKG0sIG9mZnNldCwgbGVuZ3RoLCAmbGFkZHItPmlmYS0+YWRkcmVzcy5zYSkp
IHsKKwkJCS8qIHRyeSB0byBhZGQgaXQgKi8KKwkJCXNjdHBfYWRkcl9tZ210X2Fzc29jKHN0Y2It
PnNjdHBfZXAsIHN0Y2IsIGxhZGRyLT5pZmEsCisJCQkgICAgU0NUUF9BRERfSVBfQUREUkVTUywg
U0NUUF9BRERSX05PVF9MT0NLRUQpOworCQl9CisJfQorfQorCisvKgorICogbWFrZXMgc3VyZSB0
aGF0IHRoZSBjdXJyZW50IGtlcm5lbCBhZGRyZXNzIGxpc3QgaXMgY29uc2lzdGVudCB3aXRoIHRo
ZSBuZXcKKyAqIGFzc29jaWF0aW9uICh3aXRoIGFsbCBhZGRycyBib3VuZCkgYWRkcyBhZGRyZXNz
ZXMgYXMgbmVjZXNzYXJ5CisgKi8KK3N0YXRpYyB2b2lkCitzY3RwX2NoZWNrX2FkZHJlc3NfbGlz
dF9hbGwoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3QgbWJ1ZiAqbSwgaW50IG9mZnNldCwK
KyAgICBpbnQgbGVuZ3RoLCBzdHJ1Y3Qgc29ja2FkZHIgKmluaXRfYWRkciwKKyAgICB1aW50MTZf
dCBsb2NhbF9zY29wZSwgdWludDE2X3Qgc2l0ZV9zY29wZSwKKyAgICB1aW50MTZfdCBpcHY0X3Nj
b3BlLCB1aW50MTZfdCBsb29wYmFja19zY29wZSkKK3sKKwlzdHJ1Y3Qgc2N0cF92cmYgKnZyZiA9
IE5VTEw7CisJc3RydWN0IHNjdHBfaWZuICpzY3RwX2lmbjsKKwlzdHJ1Y3Qgc2N0cF9pZmEgKnNj
dHBfaWZhOworCXVpbnQzMl90IHZyZl9pZDsKKyNpZmRlZiBJTkVUCisJc3RydWN0IHNvY2thZGRy
X2luICpzaW47CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNp
bjY7CisjZW5kaWYKKworCWlmIChzdGNiKSB7CisJCXZyZl9pZCA9IHN0Y2ItPmFzb2MudnJmX2lk
OworCX0gZWxzZSB7CisJCXJldHVybjsKKwl9CisJU0NUUF9JUElfQUREUl9STE9DSygpOworCXZy
ZiA9IHNjdHBfZmluZF92cmYodnJmX2lkKTsKKwlpZiAodnJmID09IE5VTEwpIHsKKwkJU0NUUF9J
UElfQUREUl9SVU5MT0NLKCk7CisJCXJldHVybjsKKwl9CisJLyogZ28gdGhyb3VnaCBhbGwgb3Vy
IGtub3duIGludGVyZmFjZXMgKi8KKwlMSVNUX0ZPUkVBQ0goc2N0cF9pZm4sICZ2cmYtPmlmbmxp
c3QsIG5leHRfaWZuKSB7CisJCWlmIChsb29wYmFja19zY29wZSA9PSAwICYmIFNDVFBfSUZOX0lT
X0lGVF9MT09QKHNjdHBfaWZuKSkgeworCQkJLyogc2tpcCBsb29wYmFjayBpbnRlcmZhY2UgKi8K
KwkJCWNvbnRpbnVlOworCQl9CisJCS8qIGdvIHRocm91Z2ggZWFjaCBpbnRlcmZhY2UgYWRkcmVz
cyAqLworCQlMSVNUX0ZPUkVBQ0goc2N0cF9pZmEsICZzY3RwX2lmbi0+aWZhbGlzdCwgbmV4dF9p
ZmEpIHsKKwkJCS8qIGRvIGkgaGF2ZSBpdCBpbXBsaWNpdGx5PyAqLworCQkJaWYgKHNjdHBfY21w
YWRkcigmc2N0cF9pZmEtPmFkZHJlc3Muc2EsIGluaXRfYWRkcikpIHsKKwkJCQljb250aW51ZTsK
KwkJCX0KKwkJCXN3aXRjaCAoc2N0cF9pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7CisjaWZk
ZWYgSU5FVAorCQkJY2FzZSBBRl9JTkVUOgorCQkJCXNpbiA9ICZzY3RwX2lmYS0+YWRkcmVzcy5z
aW47CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KwkJCQlpZiAocHJpc29uX2NoZWNrX2lwNChzdGNiLT5zY3RwX2VwLT5pcF9pbnAuaW5wLmlucF9j
cmVkLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICZzaW4tPnNpbl9hZGRyKSAhPSAwKSB7CisJ
CQkJCWNvbnRpbnVlOworCQkJCX0KKyNlbmRpZgorCQkJCWlmICgoaXB2NF9zY29wZSA9PSAwKSAm
JgorCQkJCSAgICAoSU40X0lTUFJJVkFURV9BRERSRVNTKCZzaW4tPnNpbl9hZGRyKSkpIHsKKwkJ
CQkJLyogcHJpdmF0ZSBhZGRyZXNzIG5vdCBpbiBzY29wZSAqLworCQkJCQljb250aW51ZTsKKwkJ
CQl9CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJY2FzZSBBRl9JTkVUNjoK
KwkJCQlzaW42ID0gJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjY7CisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQlpZiAocHJpc29uX2NoZWNrX2lw
NihzdGNiLT5zY3RwX2VwLT5pcF9pbnAuaW5wLmlucF9jcmVkLAorCQkJCSAgICAgICAgICAgICAg
ICAgICAgICZzaW42LT5zaW42X2FkZHIpICE9IDApIHsKKwkJCQkJY29udGludWU7CisJCQkJfQor
I2VuZGlmCisJCQkJaWYgKChsb2NhbF9zY29wZSA9PSAwKSAmJgorCQkJCSAgICAoSU42X0lTX0FE
RFJfTElOS0xPQ0FMKCZzaW42LT5zaW42X2FkZHIpKSkgeworCQkJCQljb250aW51ZTsKKwkJCQl9
CisJCQkJaWYgKChzaXRlX3Njb3BlID09IDApICYmCisJCQkJICAgIChJTjZfSVNfQUREUl9TSVRF
TE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQli
cmVhazsKKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIGNoZWNr
IHRvIHNlZSBpZiBpbiB0aGUgaW5pdC1hY2sgKi8KKwkJCWlmICghc2N0cF9hZGRyX2luX2luaXRh
Y2sobSwgb2Zmc2V0LCBsZW5ndGgsICZzY3RwX2lmYS0+YWRkcmVzcy5zYSkpIHsKKwkJCQkvKiB0
cnkgdG8gYWRkIGl0ICovCisJCQkJc2N0cF9hZGRyX21nbXRfYXNzb2Moc3RjYi0+c2N0cF9lcCwg
c3RjYiwKKwkJCQkgICAgc2N0cF9pZmEsIFNDVFBfQUREX0lQX0FERFJFU1MsCisJCQkJICAgIFND
VFBfQUREUl9MT0NLRUQpOworCQkJfQorCQl9IC8qIGVuZCBmb3JlYWNoIGlmYSAqLworCX0gLyog
ZW5kIGZvcmVhY2ggaWZuICovCisJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7Cit9CisKKy8qCisg
KiB2YWxpZGF0ZXMgYW4gaW5pdC1hY2sgY2h1bmsgKGZyb20gYSBjb29raWUtZWNobykgd2l0aCBj
dXJyZW50IGFkZHJlc3NlcworICogYWRkcyBhZGRyZXNzZXMgZnJvbSB0aGUgaW5pdC1hY2sgaW50
byBvdXIgbG9jYWwgYWRkcmVzcyBsaXN0LCBpZiBuZWVkZWQKKyAqIHF1ZXVlcyBhc2NvbmYgYWRk
cy9kZWxldGVzIGFkZHJlc3NlcyBhcyBuZWVkZWQgYW5kIG1ha2VzIGFwcHJvcHJpYXRlIGxpc3QK
KyAqIGNoYW5nZXMgZm9yIHNvdXJjZSBhZGRyZXNzIHNlbGVjdGlvbiBtLCBvZmZzZXQ6IHBvaW50
cyB0byB0aGUgc3RhcnQgb2YgdGhlCisgKiBhZGRyZXNzIGxpc3QgaW4gYW4gaW5pdC1hY2sgY2h1
bmsgbGVuZ3RoOiB0b3RhbCBsZW5ndGggb2YgdGhlIGFkZHJlc3MKKyAqIHBhcmFtcyBvbmx5IGlu
aXRfYWRkcjogYWRkcmVzcyB3aGVyZSBteSBJTklULUFDSyB3YXMgc2VudCBmcm9tCisgKi8KK3Zv
aWQKK3NjdHBfY2hlY2tfYWRkcmVzc19saXN0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0
IG1idWYgKm0sIGludCBvZmZzZXQsCisgICAgaW50IGxlbmd0aCwgc3RydWN0IHNvY2thZGRyICpp
bml0X2FkZHIsCisgICAgdWludDE2X3QgbG9jYWxfc2NvcGUsIHVpbnQxNl90IHNpdGVfc2NvcGUs
CisgICAgdWludDE2X3QgaXB2NF9zY29wZSwgdWludDE2X3QgbG9vcGJhY2tfc2NvcGUpCit7CisJ
LyogcHJvY2VzcyB0aGUgbG9jYWwgYWRkcmVzc2VzIGluIHRoZSBpbml0YWNrICovCisJc2N0cF9w
cm9jZXNzX2luaXRhY2tfYWRkcmVzc2VzKHN0Y2IsIG0sIG9mZnNldCwgbGVuZ3RoKTsKKworCWlm
IChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpIHsK
KwkJLyogYm91bmQgYWxsIGNhc2UgKi8KKwkJc2N0cF9jaGVja19hZGRyZXNzX2xpc3RfYWxsKHN0
Y2IsIG0sIG9mZnNldCwgbGVuZ3RoLCBpbml0X2FkZHIsCisJCSAgICBsb2NhbF9zY29wZSwgc2l0
ZV9zY29wZSwgaXB2NF9zY29wZSwgbG9vcGJhY2tfc2NvcGUpOworCX0gZWxzZSB7CisJCS8qIHN1
YnNldCBib3VuZCBjYXNlICovCisJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9l
cCwKKwkJICAgIFNDVFBfUENCX0ZMQUdTX0RPX0FTQ09ORikpIHsKKwkJCS8qIGFzY29uZidzIGFs
bG93ZWQgKi8KKwkJCXNjdHBfY2hlY2tfYWRkcmVzc19saXN0X2VwKHN0Y2IsIG0sIG9mZnNldCwg
bGVuZ3RoLAorCQkJICAgIGluaXRfYWRkcik7CisJCX0KKwkJLyogZWxzZSwgbm8gYXNjb25mcyBh
bGxvd2VkLCBzbyB3aGF0IHdlIHNlbnQgaXMgd2hhdCB3ZSBnZXQgKi8KKwl9Cit9CisKKy8qCisg
KiBzY3RwX2JpbmR4KCkgc3VwcG9ydAorICovCit1aW50MzJfdAorc2N0cF9hZGRyX21nbXRfZXBf
c2Eoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNvY2thZGRyICpzYSwKKyAgICAgICAg
ICAgICAgICAgICAgIHVpbnQzMl90IHR5cGUsIHVpbnQzMl90IHZyZl9pZCkKK3sKKwlzdHJ1Y3Qg
c2N0cF9pZmEgKmlmYTsKKwlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHIsICpubGFkZHI7CisKKyNp
ZmRlZiBIQVZFX1NBX0xFTgorCWlmIChzYS0+c2FfbGVuID09IDApIHsKKwkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX0FTQ09ORiwgRUlOVkFMKTsK
KwkJcmV0dXJuIChFSU5WQUwpOworCX0KKyNlbmRpZgorCWlmICh0eXBlID09IFNDVFBfQUREX0lQ
X0FERFJFU1MpIHsKKwkJLyogRm9yIGFuIGFkZCB0aGUgYWRkcmVzcyBNVVNUIGJlIG9uIHRoZSBz
eXN0ZW0gKi8KKwkJaWZhID0gc2N0cF9maW5kX2lmYV9ieV9hZGRyKHNhLCB2cmZfaWQsIFNDVFBf
QUREUl9OT1RfTE9DS0VEKTsKKwl9IGVsc2UgaWYgKHR5cGUgPT0gU0NUUF9ERUxfSVBfQUREUkVT
UykgeworCQkvKiBGb3IgYSBkZWxldGUgd2UgbmVlZCB0byBmaW5kIGl0IGluIHRoZSBpbnAgKi8K
KwkJaWZhID0gc2N0cF9maW5kX2lmYV9pbl9lcChpbnAsIHNhLCBTQ1RQX0FERFJfTk9UX0xPQ0tF
RCk7CisJfSBlbHNlIHsKKwkJaWZhID0gTlVMTDsKKwl9CisJaWYgKGlmYSAhPSBOVUxMKSB7CisJ
CWlmICh0eXBlID09IFNDVFBfQUREX0lQX0FERFJFU1MpIHsKKwkJCXNjdHBfYWRkX2xvY2FsX2Fk
ZHJfZXAoaW5wLCBpZmEsIHR5cGUpOworCQl9IGVsc2UgaWYgKHR5cGUgPT0gU0NUUF9ERUxfSVBf
QUREUkVTUykgeworCQkJaWYgKGlucC0+bGFkZHJfY291bnQgPCAyKSB7CisJCQkJLyogY2FuJ3Qg
ZGVsZXRlIHRoZSBsYXN0IGxvY2FsIGFkZHJlc3MgKi8KKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfQVNDT05GLCBFSU5WQUwpOworCQkJCXJl
dHVybiAoRUlOVkFMKTsKKwkJCX0KKwkJCUxJU1RfRk9SRUFDSChsYWRkciwgJmlucC0+c2N0cF9h
ZGRyX2xpc3QsCisJCQkJICAgICBzY3RwX254dF9hZGRyKSB7CisJCQkJaWYgKGlmYSA9PSBsYWRk
ci0+aWZhKSB7CisJCQkJCS8qIE1hcmsgaW4gdGhlIGRlbGV0ZSAqLworCQkJCQlsYWRkci0+YWN0
aW9uID0gdHlwZTsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKExJU1RfRU1QVFkoJmlucC0+c2N0
cF9hc29jX2xpc3QpKSB7CisJCQkvKgorCQkJICogVGhlcmUgaXMgbm8gbmVlZCB0byBzdGFydCB0
aGUgaXRlcmF0b3IgaWYKKwkJCSAqIHRoZSBpbnAgaGFzIG5vIGFzc29jaWF0aW9ucy4KKwkJCSAq
LworCQkJaWYgKHR5cGUgPT0gU0NUUF9ERUxfSVBfQUREUkVTUykgeworCQkJCUxJU1RfRk9SRUFD
SF9TQUZFKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwgc2N0cF9ueHRfYWRkciwgbmxhZGRy
KSB7CisJCQkJCWlmIChsYWRkci0+aWZhID09IGlmYSkgeworCQkJCQkJc2N0cF9kZWxfbG9jYWxf
YWRkcl9lcChpbnAsIGlmYSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQlz
dHJ1Y3Qgc2N0cF9hc2NvbmZfaXRlcmF0b3IgKmFzYzsKKwkJCXN0cnVjdCBzY3RwX2xhZGRyICp3
aTsKKwkJCWludCByZXQ7CisKKwkJCVNDVFBfTUFMTE9DKGFzYywgc3RydWN0IHNjdHBfYXNjb25m
X2l0ZXJhdG9yICosCisJCQkgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2l0
ZXJhdG9yKSwKKwkJCSAgICAgICAgICAgIFNDVFBfTV9BU0NfSVQpOworCQkJaWYgKGFzYyA9PSBO
VUxMKSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX0FTQ09ORiwgRU5PTUVNKTsKKwkJCQlyZXR1cm4gKEVOT01FTSk7CisJCQl9CisJCQl3
aSA9IFNDVFBfWk9ORV9HRVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfbGFkZHIpLCBzdHJ1Y3Qg
c2N0cF9sYWRkcik7CisJCQlpZiAod2kgPT0gTlVMTCkgeworCQkJCVNDVFBfRlJFRShhc2MsIFND
VFBfTV9BU0NfSVQpOworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9BU0NPTkYsIEVOT01FTSk7CisJCQkJcmV0dXJuIChFTk9NRU0pOworCQkJ
fQorCQkJTElTVF9JTklUKCZhc2MtPmxpc3Rfb2Zfd29yayk7CisJCQlhc2MtPmNudCA9IDE7CisJ
CQlTQ1RQX0lOQ1JfTEFERFJfQ09VTlQoKTsKKwkJCXdpLT5pZmEgPSBpZmE7CisJCQl3aS0+YWN0
aW9uID0gdHlwZTsKKwkJCWF0b21pY19hZGRfaW50KCZpZmEtPnJlZmNvdW50LCAxKTsKKwkJCUxJ
U1RfSU5TRVJUX0hFQUQoJmFzYy0+bGlzdF9vZl93b3JrLCB3aSwgc2N0cF9ueHRfYWRkcik7CisJ
CQlyZXQgPSBzY3RwX2luaXRpYXRlX2l0ZXJhdG9yKHNjdHBfYXNjb25mX2l0ZXJhdG9yX2VwLAor
CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3RwX2FzY29uZl9pdGVyYXRvcl9zdGNi
LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3RwX2FzY29uZl9pdGVyYXRvcl9l
cF9lbmQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfUENCX0FOWV9GTEFH
UywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9QQ0JfQU5ZX0ZFQVRVUkVT
LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0FTT0NfQU5ZX1NUQVRFLAor
CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKWFzYywgMCwKKwkJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2N0cF9hc2NvbmZfaXRlcmF0b3JfZW5kLCBpbnAsIDAp
OworCQkJaWYgKHJldCkgeworCQkJCVNDVFBfUFJJTlRGKCJGYWlsZWQgdG8gaW5pdGlhdGUgaXRl
cmF0b3IgZm9yIGFkZHJfbWdtdF9lcF9zYVxuIik7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX0FTQ09ORiwgRUZBVUxUKTsKKwkJCQkgICAg
ICAgICAgICAgICAgICAgIHNjdHBfYXNjb25mX2l0ZXJhdG9yX2VuZChhc2MsIDApOworCQkJCXJl
dHVybiAoRUZBVUxUKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gKDApOworCX0gZWxzZSB7CisJCS8q
IGludmFsaWQgYWRkcmVzcyEgKi8KKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9BU0NPTkYsIEVBRERSTk9UQVZBSUwpOworCQlyZXR1cm4gKEVB
RERSTk9UQVZBSUwpOworCX0KK30KKwordm9pZAorc2N0cF9hc2NvbmZfc2VuZF9uYXRfc3RhdGVf
dXBkYXRlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQorewor
CXN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICphYV92dGFnLCAqYWFfYWRkLCAqYWFfZGVsOworCXN0
cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmFwOworCXN0cnVjdCBzY3RwX2FzY29uZl90YWdfcGFyYW0g
KnZ0YWc7CisjaWZkZWYgSU5FVAorCXN0cnVjdCBzb2NrYWRkcl9pbiAqdG87CisjZW5kaWYKKyNp
ZmRlZiBJTkVUNgorCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnRvNjsKKyNlbmRpZgorCisJaWYgKG5l
dCA9PSBOVUxMKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAic2N0cF9hc2NvbmZf
c2VuZF9uYXRfc3RhdGVfdXBkYXRlOiBNaXNzaW5nIG5ldFxuIik7CisJCXJldHVybjsKKwl9CisJ
aWYgKHN0Y2IgPT0gTlVMTCkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgInNjdHBf
YXNjb25mX3NlbmRfbmF0X3N0YXRlX3VwZGF0ZTogTWlzc2luZyBzdGNiXG4iKTsKKwkJcmV0dXJu
OworCX0KKwkvKiBOZWVkIHRvIGhhdmUgaW4gdGhlIEFTQ09ORjoKKwkgKiAtIFZUQUcobXlfdnRh
Zy9wZWVyX3Z0YWcpCisJICogLSBBREQod2lsZGNhcmQpCisJICogLSBERUwod2lsZGNhcmQpCisJ
ICogLSBBREQoQW55IGdsb2JhbCBhZGRyZXNzZXMpCisJICovCisJU0NUUF9NQUxMT0MoYWFfdnRh
Zywgc3RydWN0IHNjdHBfYXNjb25mX2FkZHIgKiwgc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9h
ZGRyKSwgU0NUUF9NX0FTQ19BRERSKTsKKwlTQ1RQX01BTExPQyhhYV9hZGQsIHN0cnVjdCBzY3Rw
X2FzY29uZl9hZGRyICosIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkciksIFNDVFBfTV9B
U0NfQUREUik7CisJU0NUUF9NQUxMT0MoYWFfZGVsLCBzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkciAq
LCBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2FkZHIpLCBTQ1RQX01fQVNDX0FERFIpOworCisJ
aWYgKChhYV92dGFnID09IE5VTEwpIHx8IChhYV9hZGQgPT0gTlVMTCkgfHwgKGFhX2RlbCA9PSBO
VUxMKSkgeworCQkvKiBEaWRuJ3QgZ2V0IG1lbW9yeSAqLworCQlTQ1RQREJHKFNDVFBfREVCVUdf
QVNDT05GMSwgInNjdHBfYXNjb25mX3NlbmRfbmF0X3N0YXRlX3VwZGF0ZTogZmFpbGVkIHRvIGdl
dCBtZW1vcnkhXG4iKTsKK291dDoKKwkJaWYgKGFhX3Z0YWcgIT0gTlVMTCkgeworCQkJU0NUUF9G
UkVFKGFhX3Z0YWcsIFNDVFBfTV9BU0NfQUREUik7CisJCX0KKwkJaWYgKGFhX2FkZCAhPSBOVUxM
KSB7CisJCQlTQ1RQX0ZSRUUoYWFfYWRkLCBTQ1RQX01fQVNDX0FERFIpOworCQl9CisJCWlmIChh
YV9kZWwgIT0gTlVMTCkgeworCQkJU0NUUF9GUkVFKGFhX2RlbCwgU0NUUF9NX0FTQ19BRERSKTsK
KwkJfQorCQlyZXR1cm47CisJfQorCW1lbXNldChhYV92dGFnLCAwLCBzaXplb2Yoc3RydWN0IHNj
dHBfYXNjb25mX2FkZHIpKTsKKwlhYV92dGFnLT5zcGVjaWFsX2RlbCA9IDA7CisJLyogRmlsbCBp
biBBU0NPTkYgYWRkcmVzcyBwYXJhbWV0ZXIgZmllbGRzLiAqLworCS8qIFRvcCBsZXZlbCBlbGVt
ZW50cyBhcmUgIm5ldHdvcmtlZCIgZHVyaW5nIHNlbmQuICovCisJYWFfdnRhZy0+aWZhID0gTlVM
TDsKKwlhYV92dGFnLT5zZW50ID0gMDsJCS8qIGNsZWFyIHNlbnQgZmxhZyAqLworCXZ0YWcgPSAo
c3RydWN0IHNjdHBfYXNjb25mX3RhZ19wYXJhbSAqKSZhYV92dGFnLT5hcC5hcGg7CisJdnRhZy0+
YXBoLnBoLnBhcmFtX3R5cGUgPSBTQ1RQX05BVF9WVEFHUzsKKwl2dGFnLT5hcGgucGgucGFyYW1f
bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl90YWdfcGFyYW0pOworCXZ0YWctPmxv
Y2FsX3Z0YWcgPSBodG9ubChzdGNiLT5hc29jLm15X3Z0YWcpOworCXZ0YWctPnJlbW90ZV92dGFn
ID0gaHRvbmwoc3RjYi0+YXNvYy5wZWVyX3Z0YWcpOworCisJbWVtc2V0KGFhX2FkZCwgMCwgc2l6
ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9hZGRyKSk7CisJbWVtc2V0KGFhX2RlbCwgMCwgc2l6ZW9m
KHN0cnVjdCBzY3RwX2FzY29uZl9hZGRyKSk7CisJc3dpdGNoIChuZXQtPnJvLl9sX2FkZHIuc2Eu
c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwkJYWFfYWRkLT5hcC5h
cGgucGgucGFyYW1fdHlwZSA9IFNDVFBfQUREX0lQX0FERFJFU1M7CisJCWFhX2FkZC0+YXAuYXBo
LnBoLnBhcmFtX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkcnY0X3BhcmFt
KTsKKwkJYWFfYWRkLT5hcC5hZGRycC5waC5wYXJhbV90eXBlID0gU0NUUF9JUFY0X0FERFJFU1M7
CisJCWFhX2FkZC0+YXAuYWRkcnAucGgucGFyYW1fbGVuZ3RoID0gc2l6ZW9mIChzdHJ1Y3Qgc2N0
cF9pcHY0YWRkcl9wYXJhbSk7CisJCS8qIE5vIG5lZWQgdG8gZmlsbCB0aGUgYWRkcmVzcywgd2Ug
YXJlIHVzaW5nIDAuMC4wLjAgKi8KKwkJYWFfZGVsLT5hcC5hcGgucGgucGFyYW1fdHlwZSA9IFND
VFBfQUREX0lQX0FERFJFU1M7CisJCWFhX2RlbC0+YXAuYXBoLnBoLnBhcmFtX2xlbmd0aCA9IHNp
emVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkcnY0X3BhcmFtKTsKKwkJYWFfZGVsLT5hcC5hZGRy
cC5waC5wYXJhbV90eXBlID0gU0NUUF9JUFY0X0FERFJFU1M7CisJCWFhX2RlbC0+YXAuYWRkcnAu
cGgucGFyYW1fbGVuZ3RoID0gc2l6ZW9mIChzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSk7CisJ
CS8qIE5vIG5lZWQgdG8gZmlsbCB0aGUgYWRkcmVzcywgd2UgYXJlIHVzaW5nIDAuMC4wLjAgKi8K
KwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJCWFhX2Fk
ZC0+YXAuYXBoLnBoLnBhcmFtX3R5cGUgPSBTQ1RQX0FERF9JUF9BRERSRVNTOworCQlhYV9hZGQt
PmFwLmFwaC5waC5wYXJhbV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2FkZHJf
cGFyYW0pOworCQlhYV9hZGQtPmFwLmFkZHJwLnBoLnBhcmFtX3R5cGUgPSBTQ1RQX0lQVjZfQURE
UkVTUzsKKwkJYWFfYWRkLT5hcC5hZGRycC5waC5wYXJhbV9sZW5ndGggPSBzaXplb2YgKHN0cnVj
dCBzY3RwX2lwdjZhZGRyX3BhcmFtKTsKKwkJLyogTm8gbmVlZCB0byBmaWxsIHRoZSBhZGRyZXNz
LCB3ZSBhcmUgdXNpbmcgOjowICovCisJCWFhX2RlbC0+YXAuYXBoLnBoLnBhcmFtX3R5cGUgPSBT
Q1RQX0RFTF9JUF9BRERSRVNTOworCQlhYV9kZWwtPmFwLmFwaC5waC5wYXJhbV9sZW5ndGggPSBz
aXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2FkZHJfcGFyYW0pOworCQlhYV9kZWwtPmFwLmFkZHJw
LnBoLnBhcmFtX3R5cGUgPSBTQ1RQX0lQVjZfQUREUkVTUzsKKwkJYWFfZGVsLT5hcC5hZGRycC5w
aC5wYXJhbV9sZW5ndGggPSBzaXplb2YgKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtKTsKKwkJ
LyogTm8gbmVlZCB0byBmaWxsIHRoZSBhZGRyZXNzLCB3ZSBhcmUgdXNpbmcgOjowICovCisJCWJy
ZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJ
CSAgICAgICAgInNjdHBfYXNjb25mX3NlbmRfbmF0X3N0YXRlX3VwZGF0ZTogdW5rbm93biBhZGRy
ZXNzIGZhbWlseSAlZFxuIiwKKwkJICAgICAgICBuZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5
KTsKKwkJZ290byBvdXQ7CisJfQorCVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5hc29jLmFzY29u
Zl9xdWV1ZSwgYWFfdnRhZywgbmV4dCk7CisJVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2ItPmFzb2Mu
YXNjb25mX3F1ZXVlLCBhYV9hZGQsIG5leHQpOworCVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5h
c29jLmFzY29uZl9xdWV1ZSwgYWFfZGVsLCBuZXh0KTsKKworCS8qIE5vdyB3ZSBtdXN0IGh1bnQg
dGhlIGFkZHJlc3NlcyBhbmQgYWRkIGFsbCBnbG9iYWwgYWRkcmVzc2VzICovCisJaWYgKHN0Y2It
PnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgeworCQlzdHJ1
Y3Qgc2N0cF92cmYgKnZyZiA9IE5VTEw7CisJCXN0cnVjdCBzY3RwX2lmbiAqc2N0cF9pZm5wOwor
CQl1aW50MzJfdCB2cmZfaWQ7CisKKwkJdnJmX2lkID0gc3RjYi0+c2N0cF9lcC0+ZGVmX3ZyZl9p
ZDsKKwkJdnJmID0gc2N0cF9maW5kX3ZyZih2cmZfaWQpOworCQlpZiAodnJmID09IE5VTEwpIHsK
KwkJCWdvdG8gc2tpcF9yZXN0OworCQl9CisKKwkJU0NUUF9JUElfQUREUl9STE9DSygpOworCQlM
SVNUX0ZPUkVBQ0goc2N0cF9pZm5wLCAmdnJmLT5pZm5saXN0LCBuZXh0X2lmbikgeworCQkJTElT
VF9GT1JFQUNIKHNjdHBfaWZhcCwgJnNjdHBfaWZucC0+aWZhbGlzdCwgbmV4dF9pZmEpIHsKKwkJ
CQlzd2l0Y2ggKHNjdHBfaWZhcC0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVU
CisJCQkJY2FzZSBBRl9JTkVUOgorCQkJCQl0byA9ICZzY3RwX2lmYXAtPmFkZHJlc3Muc2luOwor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJ
CWlmIChwcmlzb25fY2hlY2tfaXA0KHN0Y2ItPnNjdHBfZXAtPmlwX2lucC5pbnAuaW5wX2NyZWQs
CisJCQkJCSAgICAgICAgICAgICAgICAgICAgICZ0by0+c2luX2FkZHIpICE9IDApIHsKKwkJCQkJ
CWNvbnRpbnVlOworCQkJCQl9CisjZW5kaWYKKwkJCQkJaWYgKElONF9JU1BSSVZBVEVfQUREUkVT
UygmdG8tPnNpbl9hZGRyKSkgeworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQkJaWYgKElO
NF9JU0xPT1BCQUNLX0FERFJFU1MoJnRvLT5zaW5fYWRkcikpIHsKKwkJCQkJCWNvbnRpbnVlOwor
CQkJCQl9CisJCQkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCQljYXNlIEFGX0lO
RVQ2OgorCQkJCQl0bzYgPSAmc2N0cF9pZmFwLT5hZGRyZXNzLnNpbjY7CisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQkJaWYgKHByaXNvbl9j
aGVja19pcDYoc3RjYi0+c2N0cF9lcC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKKwkJCQkJICAgICAg
ICAgICAgICAgICAgICAgJnRvNi0+c2luNl9hZGRyKSAhPSAwKSB7CisJCQkJCQljb250aW51ZTsK
KwkJCQkJfQorI2VuZGlmCisJCQkJCWlmIChJTjZfSVNfQUREUl9MT09QQkFDSygmdG82LT5zaW42
X2FkZHIpKSB7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlpZiAoSU42X0lTX0FERFJf
TElOS0xPQ0FMKCZ0bzYtPnNpbjZfYWRkcikpIHsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJ
CQkJCWJyZWFrOworI2VuZGlmCisJCQkJZGVmYXVsdDoKKwkJCQkJY29udGludWU7CisJCQkJfQor
CQkJCXNjdHBfYXNjb25mX3F1ZXVlX21nbXQoc3RjYiwgc2N0cF9pZmFwLCBTQ1RQX0FERF9JUF9B
RERSRVNTKTsKKwkJCX0KKwkJfQorCQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKKwl9IGVsc2Ug
eworCQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7CisKKwkJTElTVF9GT1JFQUNIKGxhZGRyLCAm
c3RjYi0+c2N0cF9lcC0+c2N0cF9hZGRyX2xpc3QsIHNjdHBfbnh0X2FkZHIpIHsKKwkJCWlmIChs
YWRkci0+aWZhID09IE5VTEwpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChsYWRkci0+
aWZhLT5sb2NhbGlmYV9mbGFncyAmIFNDVFBfQkVJTkdfREVMRVRFRCkKKwkJCQkvKiBBZGRyZXNz
IGJlaW5nIGRlbGV0ZWQgYnkgdGhlIHN5c3RlbSwgZG9udAorCQkJCSAqIGxpc3QuCisJCQkJICov
CisJCQkJY29udGludWU7CisJCQlpZiAobGFkZHItPmFjdGlvbiA9PSBTQ1RQX0RFTF9JUF9BRERS
RVNTKSB7CisJCQkJLyogQWRkcmVzcyBiZWluZyBkZWxldGVkIG9uIHRoaXMgZXAKKwkJCQkgKiBk
b24ndCBsaXN0LgorCQkJCSAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc2N0cF9pZmFwID0g
bGFkZHItPmlmYTsKKwkJCXN3aXRjaCAoc2N0cF9pZmFwLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkg
eworI2lmZGVmIElORVQKKwkJCWNhc2UgQUZfSU5FVDoKKwkJCQl0byA9ICZzY3RwX2lmYXAtPmFk
ZHJlc3Muc2luOworCQkJCWlmIChJTjRfSVNQUklWQVRFX0FERFJFU1MoJnRvLT5zaW5fYWRkcikp
IHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWlmIChJTjRfSVNMT09QQkFDS19BRERSRVNT
KCZ0by0+c2luX2FkZHIpKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlicmVhazsKKyNl
bmRpZgorI2lmZGVmIElORVQ2CisJCQljYXNlIEFGX0lORVQ2OgorCQkJCXRvNiA9ICZzY3RwX2lm
YXAtPmFkZHJlc3Muc2luNjsKKwkJCQlpZiAoSU42X0lTX0FERFJfTE9PUEJBQ0soJnRvNi0+c2lu
Nl9hZGRyKSkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJaWYgKElONl9JU19BRERSX0xJ
TktMT0NBTCgmdG82LT5zaW42X2FkZHIpKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQli
cmVhazsKKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXNjdHBf
YXNjb25mX3F1ZXVlX21nbXQoc3RjYiwgc2N0cF9pZmFwLCBTQ1RQX0FERF9JUF9BRERSRVNTKTsK
KwkJfQorCX0KKyBza2lwX3Jlc3Q6CisJLyogTm93IHdlIG11c3Qgc2VuZCB0aGUgYXNjb25mIGlu
dG8gdGhlIHF1ZXVlICovCisJc2N0cF9zZW5kX2FzY29uZihzdGNiLCBuZXQsIFNDVFBfQUREUl9O
T1RfTE9DS0VEKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9z
Y3RwX2FzY29uZi5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYXNjb25mLmgK
bmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwLi4zODY4OTQ5MjA4NDYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9hc2NvbmYu
aApAQCAtMCwwICsxLDk0IEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0Qt
My1DbGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVt
cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIs
IGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
YykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIGEpIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5v
dGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKgorICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9u
ZXRpbmV0L3NjdHBfYXNjb25mLmggMzY1MDcxIDIwMjAtMDktMDEgMjE6MTk6MTRaIG1qZyAkIik7
CisjZW5kaWYKKworI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX0FTQ09ORl9IXworI2RlZmluZSBfTkVU
SU5FVF9TQ1RQX0FTQ09ORl9IXworCisjaWYgZGVmaW5lZChfS0VSTkVMKSB8fCBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisKKy8qCisgKiBmdW5jdGlvbiBwcm90b3R5cGVzCisgKi8KK2V4dGVybiB2
b2lkIHNjdHBfYXNjb25mX2NsZWFudXAoc3RydWN0IHNjdHBfdGNiICopOworCitleHRlcm4gc3Ry
dWN0IG1idWYgKnNjdHBfY29tcG9zZV9hc2NvbmYoc3RydWN0IHNjdHBfdGNiICosIGludCAqLCBp
bnQpOworCitleHRlcm4gdm9pZAorc2N0cF9oYW5kbGVfYXNjb25mKHN0cnVjdCBtYnVmICosIHVu
c2lnbmVkIGludCwgc3RydWN0IHNvY2thZGRyICosCisgICAgICAgICAgICAgICAgICAgc3RydWN0
IHNjdHBfYXNjb25mX2NodW5rICosIHN0cnVjdCBzY3RwX3RjYiAqLCBpbnQpOworCitleHRlcm4g
dm9pZAorc2N0cF9oYW5kbGVfYXNjb25mX2FjayhzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIHN0cnVjdCBz
Y3RwX2FzY29uZl9hY2tfY2h1bmsgKiwKKyAgICAgc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBz
Y3RwX25ldHMgKiwgaW50ICopOworCitleHRlcm4gdWludDMyX3QKK3NjdHBfYWRkcl9tZ210X2Vw
X3NhKHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzb2NrYWRkciAqLCB1aW50MzJfdCwKKyAg
ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90KTsKKworZXh0ZXJuIGludCBzY3RwX2FzY29uZl9p
dGVyYXRvcl9lcChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCB2b2lkICpwdHIsCisJCQkJICAgdWlu
dDMyX3QgdmFsKTsKK2V4dGVybiB2b2lkIHNjdHBfYXNjb25mX2l0ZXJhdG9yX3N0Y2Ioc3RydWN0
IHNjdHBfaW5wY2IgKmlucCwKKwkJCQkgICAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCQkJ
ICAgICAgdm9pZCAqcHRyLCB1aW50MzJfdCB0eXBlKTsKK2V4dGVybiB2b2lkIHNjdHBfYXNjb25m
X2l0ZXJhdG9yX2VuZCh2b2lkICpwdHIsIHVpbnQzMl90IHZhbCk7CisKK2V4dGVybiBpbnQzMl90
CitzY3RwX3NldF9wcmltYXJ5X2lwX2FkZHJlc3Nfc2Eoc3RydWN0IHNjdHBfdGNiICosCisgICAg
c3RydWN0IHNvY2thZGRyICopOworCitleHRlcm4gdm9pZAorc2N0cF9jaGVja19hZGRyZXNzX2xp
c3Qoc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBtYnVmICosIGludCwgaW50LAorICAgIHN0cnVj
dCBzb2NrYWRkciAqLCB1aW50MTZfdCwgdWludDE2X3QsIHVpbnQxNl90LCB1aW50MTZfdCk7CisK
K2V4dGVybiB2b2lkCitzY3RwX2Fzc29jX2ltbWVkaWF0ZV9yZXRyYW5zKHN0cnVjdCBzY3RwX3Rj
YiAqLCBzdHJ1Y3Qgc2N0cF9uZXRzICopOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRl
ZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitleHRlcm4gdm9pZAor
c2N0cF9uZXRfaW1tZWRpYXRlX3JldHJhbnMoc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3Rw
X25ldHMgKik7CisjZW5kaWYKKworZXh0ZXJuIHZvaWQKK3NjdHBfYXNjb25mX3NlbmRfbmF0X3N0
YXRlX3VwZGF0ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCQkJICBzdHJ1Y3Qgc2N0cF9uZXRz
ICpuZXQpOworCitleHRlcm4gaW50CitzY3RwX2lzX2FkZHJfcGVuZGluZyhzdHJ1Y3Qgc2N0cF90
Y2IgKiwgc3RydWN0IHNjdHBfaWZhICopOworI2VuZGlmCQkJCS8qIF9LRVJORUwgKi8KKworI2Vu
ZGlmCQkJCS8qICFfTkVUSU5FVF9TQ1RQX0FTQ09ORl9IXyAqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYXV0aC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9u
ZXRpbmV0L3NjdHBfYXV0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAw
MC4uOTI4MWUwNzgwMzk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9u
ZXRpbmV0L3NjdHBfYXV0aC5jCkBAIC0wLDAgKzEsMjMwMiBAQAorLyotCisgKiBTUERYLUxpY2Vu
c2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIw
MDgsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoK
KyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUg
b2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIk
RnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX2F1dGguYyAzNjUwNzEgMjAyMC0wOS0wMSAy
MToxOToxNFogbWpnICQiKTsKKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+
CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2hlYWRl
ci5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9wY2IuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3Nj
dHBfdmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5oPgorI2luY2x1ZGUgPG5l
dGluZXQvc2N0cHV0aWwuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaW5kYXRhLmg+CisjaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX291dHB1dC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9hdXRo
Lmg+CisKKyNpZmRlZiBTQ1RQX0RFQlVHCisjZGVmaW5lIFNDVFBfQVVUSF9ERUJVRwkJKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9kZWJ1Z19vbikgJiBTQ1RQX0RFQlVHX0FVVEgxKQorI2RlZmluZSBT
Q1RQX0FVVEhfREVCVUcyCShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVidWdfb24pICYgU0NUUF9E
RUJVR19BVVRIMikKKyNlbmRpZiAvKiBTQ1RQX0RFQlVHICovCisKK3ZvaWQKK3NjdHBfY2xlYXJf
Y2h1bmtsaXN0KHNjdHBfYXV0aF9jaGtsaXN0X3QgKmNoa2xpc3QpCit7CisJbWVtc2V0KGNoa2xp
c3QsIDAsIHNpemVvZigqY2hrbGlzdCkpOworCS8qIGNoa2xpc3QtPm51bV9jaHVua3MgPSAwOyAq
LworfQorCitzY3RwX2F1dGhfY2hrbGlzdF90ICoKK3NjdHBfYWxsb2NfY2h1bmtsaXN0KHZvaWQp
Cit7CisJc2N0cF9hdXRoX2Noa2xpc3RfdCAqY2hrbGlzdDsKKworCVNDVFBfTUFMTE9DKGNoa2xp
c3QsIHNjdHBfYXV0aF9jaGtsaXN0X3QgKiwgc2l6ZW9mKCpjaGtsaXN0KSwKKwkJICAgIFNDVFBf
TV9BVVRIX0NMKTsKKwlpZiAoY2hrbGlzdCA9PSBOVUxMKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJV
R19BVVRIMSwgInNjdHBfYWxsb2NfY2h1bmtsaXN0OiBmYWlsZWQgdG8gZ2V0IG1lbW9yeSFcbiIp
OworCX0gZWxzZSB7CisJCXNjdHBfY2xlYXJfY2h1bmtsaXN0KGNoa2xpc3QpOworCX0KKwlyZXR1
cm4gKGNoa2xpc3QpOworfQorCit2b2lkCitzY3RwX2ZyZWVfY2h1bmtsaXN0KHNjdHBfYXV0aF9j
aGtsaXN0X3QgKmxpc3QpCit7CisJaWYgKGxpc3QgIT0gTlVMTCkKKwkJU0NUUF9GUkVFKGxpc3Qs
IFNDVFBfTV9BVVRIX0NMKTsKK30KKworc2N0cF9hdXRoX2Noa2xpc3RfdCAqCitzY3RwX2NvcHlf
Y2h1bmtsaXN0KHNjdHBfYXV0aF9jaGtsaXN0X3QgKmxpc3QpCit7CisJc2N0cF9hdXRoX2Noa2xp
c3RfdCAqbmV3X2xpc3Q7CisKKwlpZiAobGlzdCA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOwor
CisJLyogZ2V0IGEgbmV3IGxpc3QgKi8KKwluZXdfbGlzdCA9IHNjdHBfYWxsb2NfY2h1bmtsaXN0
KCk7CisJaWYgKG5ld19saXN0ID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJLyogY29weSBp
dCAqLworCW1lbWNweShuZXdfbGlzdCwgbGlzdCwgc2l6ZW9mKCpuZXdfbGlzdCkpOworCisJcmV0
dXJuIChuZXdfbGlzdCk7Cit9CisKKy8qCisgKiBhZGQgYSBjaHVuayB0byB0aGUgcmVxdWlyZWQg
Y2h1bmtzIGxpc3QKKyAqLworaW50CitzY3RwX2F1dGhfYWRkX2NodW5rKHVpbnQ4X3QgY2h1bmss
IHNjdHBfYXV0aF9jaGtsaXN0X3QgKmxpc3QpCit7CisJaWYgKGxpc3QgPT0gTlVMTCkKKwkJcmV0
dXJuICgtMSk7CisKKwkvKiBpcyBjaHVuayByZXN0cmljdGVkPyAqLworCWlmICgoY2h1bmsgPT0g
U0NUUF9JTklUSUFUSU9OKSB8fAorCSAgICAoY2h1bmsgPT0gU0NUUF9JTklUSUFUSU9OX0FDSykg
fHwKKwkgICAgKGNodW5rID09IFNDVFBfU0hVVERPV05fQ09NUExFVEUpIHx8CisJICAgIChjaHVu
ayA9PSBTQ1RQX0FVVEhFTlRJQ0FUSU9OKSkgeworCQlyZXR1cm4gKC0xKTsKKwl9CisJaWYgKGxp
c3QtPmNodW5rc1tjaHVua10gPT0gMCkgeworCQlsaXN0LT5jaHVua3NbY2h1bmtdID0gMTsKKwkJ
bGlzdC0+bnVtX2NodW5rcysrOworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVVUSDEsCisJCQkiU0NU
UDogYWRkZWQgY2h1bmsgJXUgKDB4JTAyeCkgdG8gQXV0aCBsaXN0XG4iLAorCQkJY2h1bmssIGNo
dW5rKTsKKwl9CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIGRlbGV0ZSBhIGNodW5rIGZyb20g
dGhlIHJlcXVpcmVkIGNodW5rcyBsaXN0CisgKi8KK2ludAorc2N0cF9hdXRoX2RlbGV0ZV9jaHVu
ayh1aW50OF90IGNodW5rLCBzY3RwX2F1dGhfY2hrbGlzdF90ICpsaXN0KQoreworCWlmIChsaXN0
ID09IE5VTEwpCisJCXJldHVybiAoLTEpOworCisJaWYgKGxpc3QtPmNodW5rc1tjaHVua10gPT0g
MSkgeworCQlsaXN0LT5jaHVua3NbY2h1bmtdID0gMDsKKwkJbGlzdC0+bnVtX2NodW5rcy0tOwor
CQlTQ1RQREJHKFNDVFBfREVCVUdfQVVUSDEsCisJCQkiU0NUUDogZGVsZXRlZCBjaHVuayAldSAo
MHglMDJ4KSBmcm9tIEF1dGggbGlzdFxuIiwKKwkJCWNodW5rLCBjaHVuayk7CisJfQorCXJldHVy
biAoMCk7Cit9CisKK3NpemVfdAorc2N0cF9hdXRoX2dldF9jaGtsaXN0X3NpemUoY29uc3Qgc2N0
cF9hdXRoX2Noa2xpc3RfdCAqbGlzdCkKK3sKKwlpZiAobGlzdCA9PSBOVUxMKQorCQlyZXR1cm4g
KDApOworCWVsc2UKKwkJcmV0dXJuIChsaXN0LT5udW1fY2h1bmtzKTsKK30KKworLyoKKyAqIHJl
dHVybiB0aGUgY3VycmVudCBudW1iZXIgYW5kIGxpc3Qgb2YgcmVxdWlyZWQgY2h1bmtzIGNhbGxl
ciBtdXN0CisgKiBndWFyYW50ZWUgcHRyIGhhcyBzcGFjZSBmb3IgdXAgdG8gMjU2IGJ5dGVzCisg
Ki8KK2ludAorc2N0cF9zZXJpYWxpemVfYXV0aF9jaHVua3MoY29uc3Qgc2N0cF9hdXRoX2Noa2xp
c3RfdCAqbGlzdCwgdWludDhfdCAqcHRyKQoreworCWludCBpLCBjb3VudCA9IDA7CisKKwlpZiAo
bGlzdCA9PSBOVUxMKQorCQlyZXR1cm4gKDApOworCisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsr
KSB7CisJCWlmIChsaXN0LT5jaHVua3NbaV0gIT0gMCkgeworCQkJKnB0cisrID0gaTsKKwkJCWNv
dW50Kys7CisJCX0KKwl9CisJcmV0dXJuIChjb3VudCk7Cit9CisKK2ludAorc2N0cF9wYWNrX2F1
dGhfY2h1bmtzKGNvbnN0IHNjdHBfYXV0aF9jaGtsaXN0X3QgKmxpc3QsIHVpbnQ4X3QgKnB0cikK
K3sKKwlpbnQgaSwgc2l6ZSA9IDA7CisKKwlpZiAobGlzdCA9PSBOVUxMKQorCQlyZXR1cm4gKDAp
OworCisJaWYgKGxpc3QtPm51bV9jaHVua3MgPD0gMzIpIHsKKwkJLyoganVzdCBsaXN0IHRoZW0s
IG9uZSBieXRlIGVhY2ggKi8KKwkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCQlpZiAo
bGlzdC0+Y2h1bmtzW2ldICE9IDApIHsKKwkJCQkqcHRyKysgPSBpOworCQkJCXNpemUrKzsKKwkJ
CX0KKwkJfQorCX0gZWxzZSB7CisJCWludCBpbmRleCwgb2Zmc2V0OworCisJCS8qIHBhY2sgaW50
byBhIDMyIGJ5dGUgYml0ZmllbGQgKi8KKwkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJ
CQlpZiAobGlzdC0+Y2h1bmtzW2ldICE9IDApIHsKKwkJCQlpbmRleCA9IGkgLyA4OworCQkJCW9m
ZnNldCA9IGkgJSA4OworCQkJCXB0cltpbmRleF0gfD0gKDEgPDwgb2Zmc2V0KTsKKwkJCX0KKwkJ
fQorCQlzaXplID0gMzI7CisJfQorCXJldHVybiAoc2l6ZSk7Cit9CisKK2ludAorc2N0cF91bnBh
Y2tfYXV0aF9jaHVua3MoY29uc3QgdWludDhfdCAqcHRyLCB1aW50OF90IG51bV9jaHVua3MsCisg
ICAgc2N0cF9hdXRoX2Noa2xpc3RfdCAqbGlzdCkKK3sKKwlpbnQgaTsKKwlpbnQgc2l6ZTsKKwor
CWlmIChsaXN0ID09IE5VTEwpCisJCXJldHVybiAoMCk7CisKKwlpZiAobnVtX2NodW5rcyA8PSAz
MikgeworCQkvKiBqdXN0IHB1bGwgdGhlbSwgb25lIGJ5dGUgZWFjaCAqLworCQlmb3IgKGkgPSAw
OyBpIDwgbnVtX2NodW5rczsgaSsrKSB7CisJCQkodm9pZClzY3RwX2F1dGhfYWRkX2NodW5rKCpw
dHIrKywgbGlzdCk7CisJCX0KKwkJc2l6ZSA9IG51bV9jaHVua3M7CisJfSBlbHNlIHsKKwkJaW50
IGluZGV4LCBvZmZzZXQ7CisKKwkJLyogdW5wYWNrIGZyb20gYSAzMiBieXRlIGJpdGZpZWxkICov
CisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IDMyOyBpbmRleCsrKSB7CisJCQlmb3IgKG9mZnNl
dCA9IDA7IG9mZnNldCA8IDg7IG9mZnNldCsrKSB7CisJCQkJaWYgKHB0cltpbmRleF0gJiAoMSA8
PCBvZmZzZXQpKSB7CisJCQkJCSh2b2lkKXNjdHBfYXV0aF9hZGRfY2h1bmsoKGluZGV4ICogOCkg
KyBvZmZzZXQsIGxpc3QpOworCQkJCX0KKwkJCX0KKwkJfQorCQlzaXplID0gMzI7CisJfQorCXJl
dHVybiAoc2l6ZSk7Cit9CisKKy8qCisgKiBhbGxvY2F0ZSBzdHJ1Y3R1cmUgc3BhY2UgZm9yIGEg
a2V5IG9mIGxlbmd0aCBrZXlsZW4KKyAqLworc2N0cF9rZXlfdCAqCitzY3RwX2FsbG9jX2tleSh1
aW50MzJfdCBrZXlsZW4pCit7CisJc2N0cF9rZXlfdCAqbmV3X2tleTsKKworCVNDVFBfTUFMTE9D
KG5ld19rZXksIHNjdHBfa2V5X3QgKiwgc2l6ZW9mKCpuZXdfa2V5KSArIGtleWxlbiwKKwkJICAg
IFNDVFBfTV9BVVRIX0tZKTsKKwlpZiAobmV3X2tleSA9PSBOVUxMKSB7CisJCS8qIG91dCBvZiBt
ZW1vcnkgKi8KKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJbmV3X2tleS0+a2V5bGVuID0ga2V5bGVu
OworCXJldHVybiAobmV3X2tleSk7Cit9CisKK3ZvaWQKK3NjdHBfZnJlZV9rZXkoc2N0cF9rZXlf
dCAqa2V5KQoreworCWlmIChrZXkgIT0gTlVMTCkKKwkJU0NUUF9GUkVFKGtleSxTQ1RQX01fQVVU
SF9LWSk7Cit9CisKK3ZvaWQKK3NjdHBfcHJpbnRfa2V5KHNjdHBfa2V5X3QgKmtleSwgY29uc3Qg
Y2hhciAqc3RyKQoreworCXVpbnQzMl90IGk7CisKKwlpZiAoa2V5ID09IE5VTEwpIHsKKwkJU0NU
UF9QUklOVEYoIiVzOiBbTnVsbCBrZXldXG4iLCBzdHIpOworCQlyZXR1cm47CisJfQorCVNDVFBf
UFJJTlRGKCIlczogbGVuICV1LCAiLCBzdHIsIGtleS0+a2V5bGVuKTsKKwlpZiAoa2V5LT5rZXls
ZW4pIHsKKwkJZm9yIChpID0gMDsgaSA8IGtleS0+a2V5bGVuOyBpKyspCisJCQlTQ1RQX1BSSU5U
RigiJTAyeCIsIGtleS0+a2V5W2ldKTsKKwkJU0NUUF9QUklOVEYoIlxuIik7CisJfSBlbHNlIHsK
KwkJU0NUUF9QUklOVEYoIltOdWxsIGtleV1cbiIpOworCX0KK30KKwordm9pZAorc2N0cF9zaG93
X2tleShzY3RwX2tleV90ICprZXksIGNvbnN0IGNoYXIgKnN0cikKK3sKKwl1aW50MzJfdCBpOwor
CisJaWYgKGtleSA9PSBOVUxMKSB7CisJCVNDVFBfUFJJTlRGKCIlczogW051bGwga2V5XVxuIiwg
c3RyKTsKKwkJcmV0dXJuOworCX0KKwlTQ1RQX1BSSU5URigiJXM6IGxlbiAldSwgIiwgc3RyLCBr
ZXktPmtleWxlbik7CisJaWYgKGtleS0+a2V5bGVuKSB7CisJCWZvciAoaSA9IDA7IGkgPCBrZXkt
PmtleWxlbjsgaSsrKQorCQkJU0NUUF9QUklOVEYoIiUwMngiLCBrZXktPmtleVtpXSk7CisJCVND
VFBfUFJJTlRGKCJcbiIpOworCX0gZWxzZSB7CisJCVNDVFBfUFJJTlRGKCJbTnVsbCBrZXldXG4i
KTsKKwl9Cit9CisKK3N0YXRpYyB1aW50MzJfdAorc2N0cF9nZXRfa2V5bGVuKHNjdHBfa2V5X3Qg
KmtleSkKK3sKKwlpZiAoa2V5ICE9IE5VTEwpCisJCXJldHVybiAoa2V5LT5rZXlsZW4pOworCWVs
c2UKKwkJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIGdlbmVyYXRlIGEgbmV3IHJhbmRvbSBrZXkg
b2YgbGVuZ3RoICdrZXlsZW4nCisgKi8KK3NjdHBfa2V5X3QgKgorc2N0cF9nZW5lcmF0ZV9yYW5k
b21fa2V5KHVpbnQzMl90IGtleWxlbikKK3sKKwlzY3RwX2tleV90ICpuZXdfa2V5OworCisJbmV3
X2tleSA9IHNjdHBfYWxsb2Nfa2V5KGtleWxlbik7CisJaWYgKG5ld19rZXkgPT0gTlVMTCkgewor
CQkvKiBvdXQgb2YgbWVtb3J5ICovCisJCXJldHVybiAoTlVMTCk7CisJfQorCVNDVFBfUkVBRF9S
QU5ET00obmV3X2tleS0+a2V5LCBrZXlsZW4pOworCW5ld19rZXktPmtleWxlbiA9IGtleWxlbjsK
KwlyZXR1cm4gKG5ld19rZXkpOworfQorCitzY3RwX2tleV90ICoKK3NjdHBfc2V0X2tleSh1aW50
OF90ICprZXksIHVpbnQzMl90IGtleWxlbikKK3sKKwlzY3RwX2tleV90ICpuZXdfa2V5OworCisJ
bmV3X2tleSA9IHNjdHBfYWxsb2Nfa2V5KGtleWxlbik7CisJaWYgKG5ld19rZXkgPT0gTlVMTCkg
eworCQkvKiBvdXQgb2YgbWVtb3J5ICovCisJCXJldHVybiAoTlVMTCk7CisJfQorCW1lbWNweShu
ZXdfa2V5LT5rZXksIGtleSwga2V5bGVuKTsKKwlyZXR1cm4gKG5ld19rZXkpOworfQorCisvKi0K
KyAqIGdpdmVuIHR3byBrZXlzIG9mIHZhcmlhYmxlIHNpemUsIGNvbXB1dGUgd2hpY2gga2V5IGlz
ICJsYXJnZXIvc21hbGxlciIKKyAqIHJldHVybnM6ICAxIGlmIGtleTEgPiBrZXkyCisgKiAgICAg
ICAgICAtMSBpZiBrZXkxIDwga2V5MgorICogICAgICAgICAgIDAgaWYga2V5MSA9IGtleTIKKyAq
Lworc3RhdGljIGludAorc2N0cF9jb21wYXJlX2tleShzY3RwX2tleV90ICprZXkxLCBzY3RwX2tl
eV90ICprZXkyKQoreworCXVpbnQzMl90IG1heGxlbjsKKwl1aW50MzJfdCBpOworCXVpbnQzMl90
IGtleTFsZW4sIGtleTJsZW47CisJdWludDhfdCAqa2V5XzEsICprZXlfMjsKKwl1aW50OF90IHZh
bDEsIHZhbDI7CisKKwkvKiBzYW5pdHkvbGVuZ3RoIGNoZWNrICovCisJa2V5MWxlbiA9IHNjdHBf
Z2V0X2tleWxlbihrZXkxKTsKKwlrZXkybGVuID0gc2N0cF9nZXRfa2V5bGVuKGtleTIpOworCWlm
ICgoa2V5MWxlbiA9PSAwKSAmJiAoa2V5MmxlbiA9PSAwKSkKKwkJcmV0dXJuICgwKTsKKwllbHNl
IGlmIChrZXkxbGVuID09IDApCisJCXJldHVybiAoLTEpOworCWVsc2UgaWYgKGtleTJsZW4gPT0g
MCkKKwkJcmV0dXJuICgxKTsKKworCWlmIChrZXkxbGVuIDwga2V5MmxlbikgeworCQltYXhsZW4g
PSBrZXkybGVuOworCX0gZWxzZSB7CisJCW1heGxlbiA9IGtleTFsZW47CisJfQorCWtleV8xID0g
a2V5MS0+a2V5OworCWtleV8yID0ga2V5Mi0+a2V5OworCS8qIGNoZWNrIGZvciBudW1lcmljIGVx
dWFsaXR5ICovCisJZm9yIChpID0gMDsgaSA8IG1heGxlbjsgaSsrKSB7CisJCS8qIGxlZnQtcGFk
IHdpdGggemVyb3MgKi8KKwkJdmFsMSA9IChpIDwgKG1heGxlbiAtIGtleTFsZW4pKSA/IDAgOiAq
KGtleV8xKyspOworCQl2YWwyID0gKGkgPCAobWF4bGVuIC0ga2V5MmxlbikpID8gMCA6ICooa2V5
XzIrKyk7CisJCWlmICh2YWwxID4gdmFsMikgeworCQkJcmV0dXJuICgxKTsKKwkJfSBlbHNlIGlm
ICh2YWwxIDwgdmFsMikgeworCQkJcmV0dXJuICgtMSk7CisJCX0KKwl9CisJLyoga2V5cyBhcmUg
ZXF1YWwgdmFsdWUsIHNvIGNoZWNrIGxlbmd0aHMgKi8KKwlpZiAoa2V5MWxlbiA9PSBrZXkybGVu
KQorCQlyZXR1cm4gKDApOworCWVsc2UgaWYgKGtleTFsZW4gPCBrZXkybGVuKQorCQlyZXR1cm4g
KC0xKTsKKwllbHNlCisJCXJldHVybiAoMSk7Cit9CisKKy8qCisgKiBnZW5lcmF0ZSB0aGUgY29u
Y2F0ZW5hdGVkIGtleWluZyBtYXRlcmlhbCBiYXNlZCBvbiB0aGUgdHdvIGtleXMgYW5kIHRoZQor
ICogc2hhcmVkIGtleSAoaWYgYXZhaWxhYmxlKS4gZHJhZnQtaWV0Zi10c3Z3Zy1hdXRoIHNwZWNp
ZmllcyB0aGUgc3BlY2lmaWMKKyAqIG9yZGVyIGZvciBjb25jYXRlbmF0aW9uCisgKi8KK3NjdHBf
a2V5X3QgKgorc2N0cF9jb21wdXRlX2hhc2hrZXkoc2N0cF9rZXlfdCAqa2V5MSwgc2N0cF9rZXlf
dCAqa2V5Miwgc2N0cF9rZXlfdCAqc2hhcmVkKQoreworCXVpbnQzMl90IGtleWxlbjsKKwlzY3Rw
X2tleV90ICpuZXdfa2V5OworCXVpbnQ4X3QgKmtleV9wdHI7CisKKwlrZXlsZW4gPSBzY3RwX2dl
dF9rZXlsZW4oa2V5MSkgKyBzY3RwX2dldF9rZXlsZW4oa2V5MikgKworCSAgICBzY3RwX2dldF9r
ZXlsZW4oc2hhcmVkKTsKKworCWlmIChrZXlsZW4gPiAwKSB7CisJCS8qIGdldCBzcGFjZSBmb3Ig
dGhlIG5ldyBrZXkgKi8KKwkJbmV3X2tleSA9IHNjdHBfYWxsb2Nfa2V5KGtleWxlbik7CisJCWlm
IChuZXdfa2V5ID09IE5VTEwpIHsKKwkJCS8qIG91dCBvZiBtZW1vcnkgKi8KKwkJCXJldHVybiAo
TlVMTCk7CisJCX0KKwkJbmV3X2tleS0+a2V5bGVuID0ga2V5bGVuOworCQlrZXlfcHRyID0gbmV3
X2tleS0+a2V5OworCX0gZWxzZSB7CisJCS8qIGFsbCBrZXlzIGVtcHR5L251bGw/ISAqLworCQly
ZXR1cm4gKE5VTEwpOworCX0KKworCS8qIGNvbmNhdGVuYXRlIHRoZSBrZXlzICovCisJaWYgKHNj
dHBfY29tcGFyZV9rZXkoa2V5MSwga2V5MikgPD0gMCkgeworCQkvKiBrZXkgaXMgc2hhcmVkICsg
a2V5MSArIGtleTIgKi8KKwkJaWYgKHNjdHBfZ2V0X2tleWxlbihzaGFyZWQpKSB7CisJCQltZW1j
cHkoa2V5X3B0ciwgc2hhcmVkLT5rZXksIHNoYXJlZC0+a2V5bGVuKTsKKwkJCWtleV9wdHIgKz0g
c2hhcmVkLT5rZXlsZW47CisJCX0KKwkJaWYgKHNjdHBfZ2V0X2tleWxlbihrZXkxKSkgeworCQkJ
bWVtY3B5KGtleV9wdHIsIGtleTEtPmtleSwga2V5MS0+a2V5bGVuKTsKKwkJCWtleV9wdHIgKz0g
a2V5MS0+a2V5bGVuOworCQl9CisJCWlmIChzY3RwX2dldF9rZXlsZW4oa2V5MikpIHsKKwkJCW1l
bWNweShrZXlfcHRyLCBrZXkyLT5rZXksIGtleTItPmtleWxlbik7CisJCX0KKwl9IGVsc2Ugewor
CQkvKiBrZXkgaXMgc2hhcmVkICsga2V5MiArIGtleTEgKi8KKwkJaWYgKHNjdHBfZ2V0X2tleWxl
bihzaGFyZWQpKSB7CisJCQltZW1jcHkoa2V5X3B0ciwgc2hhcmVkLT5rZXksIHNoYXJlZC0+a2V5
bGVuKTsKKwkJCWtleV9wdHIgKz0gc2hhcmVkLT5rZXlsZW47CisJCX0KKwkJaWYgKHNjdHBfZ2V0
X2tleWxlbihrZXkyKSkgeworCQkJbWVtY3B5KGtleV9wdHIsIGtleTItPmtleSwga2V5Mi0+a2V5
bGVuKTsKKwkJCWtleV9wdHIgKz0ga2V5Mi0+a2V5bGVuOworCQl9CisJCWlmIChzY3RwX2dldF9r
ZXlsZW4oa2V5MSkpIHsKKwkJCW1lbWNweShrZXlfcHRyLCBrZXkxLT5rZXksIGtleTEtPmtleWxl
bik7CisJCX0KKwl9CisJcmV0dXJuIChuZXdfa2V5KTsKK30KKworc2N0cF9zaGFyZWRrZXlfdCAq
CitzY3RwX2FsbG9jX3NoYXJlZGtleSh2b2lkKQoreworCXNjdHBfc2hhcmVka2V5X3QgKm5ld19r
ZXk7CisKKwlTQ1RQX01BTExPQyhuZXdfa2V5LCBzY3RwX3NoYXJlZGtleV90ICosIHNpemVvZigq
bmV3X2tleSksCisJCSAgICBTQ1RQX01fQVVUSF9LWSk7CisJaWYgKG5ld19rZXkgPT0gTlVMTCkg
eworCQkvKiBvdXQgb2YgbWVtb3J5ICovCisJCXJldHVybiAoTlVMTCk7CisJfQorCW5ld19rZXkt
PmtleWlkID0gMDsKKwluZXdfa2V5LT5rZXkgPSBOVUxMOworCW5ld19rZXktPnJlZmNvdW50ID0g
MTsKKwluZXdfa2V5LT5kZWFjdGl2YXRlZCA9IDA7CisJcmV0dXJuIChuZXdfa2V5KTsKK30KKwor
dm9pZAorc2N0cF9mcmVlX3NoYXJlZGtleShzY3RwX3NoYXJlZGtleV90ICpza2V5KQoreworCWlm
IChza2V5ID09IE5VTEwpCisJCXJldHVybjsKKworCWlmIChTQ1RQX0RFQ1JFTUVOVF9BTkRfQ0hF
Q0tfUkVGQ09VTlQoJnNrZXktPnJlZmNvdW50KSkgeworCQlpZiAoc2tleS0+a2V5ICE9IE5VTEwp
CisJCQlzY3RwX2ZyZWVfa2V5KHNrZXktPmtleSk7CisJCVNDVFBfRlJFRShza2V5LCBTQ1RQX01f
QVVUSF9LWSk7CisJfQorfQorCitzY3RwX3NoYXJlZGtleV90ICoKK3NjdHBfZmluZF9zaGFyZWRr
ZXkoc3RydWN0IHNjdHBfa2V5aGVhZCAqc2hhcmVkX2tleXMsIHVpbnQxNl90IGtleV9pZCkKK3sK
KwlzY3RwX3NoYXJlZGtleV90ICpza2V5OworCisJTElTVF9GT1JFQUNIKHNrZXksIHNoYXJlZF9r
ZXlzLCBuZXh0KSB7CisJCWlmIChza2V5LT5rZXlpZCA9PSBrZXlfaWQpCisJCQlyZXR1cm4gKHNr
ZXkpOworCX0KKwlyZXR1cm4gKE5VTEwpOworfQorCitpbnQKK3NjdHBfaW5zZXJ0X3NoYXJlZGtl
eShzdHJ1Y3Qgc2N0cF9rZXloZWFkICpzaGFyZWRfa2V5cywKKwkJICAgICAgc2N0cF9zaGFyZWRr
ZXlfdCAqbmV3X3NrZXkpCit7CisJc2N0cF9zaGFyZWRrZXlfdCAqc2tleTsKKworCWlmICgoc2hh
cmVkX2tleXMgPT0gTlVMTCkgfHwgKG5ld19za2V5ID09IE5VTEwpKQorCQlyZXR1cm4gKEVJTlZB
TCk7CisKKwkvKiBpbnNlcnQgaW50byBhbiBlbXB0eSBsaXN0PyAqLworCWlmIChMSVNUX0VNUFRZ
KHNoYXJlZF9rZXlzKSkgeworCQlMSVNUX0lOU0VSVF9IRUFEKHNoYXJlZF9rZXlzLCBuZXdfc2tl
eSwgbmV4dCk7CisJCXJldHVybiAoMCk7CisJfQorCS8qIGluc2VydCBpbnRvIHRoZSBleGlzdGlu
ZyBsaXN0LCBvcmRlcmVkIGJ5IGtleSBpZCAqLworCUxJU1RfRk9SRUFDSChza2V5LCBzaGFyZWRf
a2V5cywgbmV4dCkgeworCQlpZiAobmV3X3NrZXktPmtleWlkIDwgc2tleS0+a2V5aWQpIHsKKwkJ
CS8qIGluc2VydCBpdCBiZWZvcmUgaGVyZSAqLworCQkJTElTVF9JTlNFUlRfQkVGT1JFKHNrZXks
IG5ld19za2V5LCBuZXh0KTsKKwkJCXJldHVybiAoMCk7CisJCX0gZWxzZSBpZiAobmV3X3NrZXkt
PmtleWlkID09IHNrZXktPmtleWlkKSB7CisJCQkvKiByZXBsYWNlIHRoZSBleGlzdGluZyBrZXkg
Ki8KKwkJCS8qIHZlcmlmeSB0aGlzIGtleSAqY2FuKiBiZSByZXBsYWNlZCAqLworCQkJaWYgKChz
a2V5LT5kZWFjdGl2YXRlZCkgfHwgKHNrZXktPnJlZmNvdW50ID4gMSkpIHsKKwkJCQlTQ1RQREJH
KFNDVFBfREVCVUdfQVVUSDEsCisJCQkJCSJjYW4ndCByZXBsYWNlIHNoYXJlZCBrZXkgaWQgJXVc
biIsCisJCQkJCW5ld19za2V5LT5rZXlpZCk7CisJCQkJcmV0dXJuIChFQlVTWSk7CisJCQl9CisJ
CQlTQ1RQREJHKFNDVFBfREVCVUdfQVVUSDEsCisJCQkJInJlcGxhY2luZyBzaGFyZWQga2V5IGlk
ICV1XG4iLAorCQkJCW5ld19za2V5LT5rZXlpZCk7CisJCQlMSVNUX0lOU0VSVF9CRUZPUkUoc2tl
eSwgbmV3X3NrZXksIG5leHQpOworCQkJTElTVF9SRU1PVkUoc2tleSwgbmV4dCk7CisJCQlzY3Rw
X2ZyZWVfc2hhcmVka2V5KHNrZXkpOworCQkJcmV0dXJuICgwKTsKKwkJfQorCQlpZiAoTElTVF9O
RVhUKHNrZXksIG5leHQpID09IE5VTEwpIHsKKwkJCS8qIGJlbG9uZ3MgYXQgdGhlIGVuZCBvZiB0
aGUgbGlzdCAqLworCQkJTElTVF9JTlNFUlRfQUZURVIoc2tleSwgbmV3X3NrZXksIG5leHQpOwor
CQkJcmV0dXJuICgwKTsKKwkJfQorCX0KKwkvKiBzaG91bGRuJ3QgcmVhY2ggaGVyZSAqLworCXJl
dHVybiAoRUlOVkFMKTsKK30KKwordm9pZAorc2N0cF9hdXRoX2tleV9hY3F1aXJlKHN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiwgdWludDE2X3Qga2V5X2lkKQoreworCXNjdHBfc2hhcmVka2V5X3QgKnNr
ZXk7CisKKwkvKiBmaW5kIHRoZSBzaGFyZWQga2V5ICovCisJc2tleSA9IHNjdHBfZmluZF9zaGFy
ZWRrZXkoJnN0Y2ItPmFzb2Muc2hhcmVkX2tleXMsIGtleV9pZCk7CisKKwkvKiBidW1wIHRoZSBy
ZWYgY291bnQgKi8KKwlpZiAoc2tleSkgeworCQlhdG9taWNfYWRkX2ludCgmc2tleS0+cmVmY291
bnQsIDEpOworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVVUSDIsCisJCQkiJXM6IHN0Y2IgJXAga2V5
ICV1IHJlZmNvdW50IGFjcXVpcmUgdG8gJWRcbiIsCisJCQlfX2Z1bmNfXywgKHZvaWQgKilzdGNi
LCBrZXlfaWQsIHNrZXktPnJlZmNvdW50KTsKKwl9Cit9CisKK3ZvaWQKK3NjdHBfYXV0aF9rZXlf
cmVsZWFzZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQxNl90IGtleV9pZCwgaW50IHNvX2xv
Y2tlZCkKK3sKKwlzY3RwX3NoYXJlZGtleV90ICpza2V5OworCisJLyogZmluZCB0aGUgc2hhcmVk
IGtleSAqLworCXNrZXkgPSBzY3RwX2ZpbmRfc2hhcmVka2V5KCZzdGNiLT5hc29jLnNoYXJlZF9r
ZXlzLCBrZXlfaWQpOworCisJLyogZGVjcmVtZW50IHRoZSByZWYgY291bnQgKi8KKwlpZiAoc2tl
eSkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVVUSDIsCisJCQkiJXM6IHN0Y2IgJXAga2V5ICV1
IHJlZmNvdW50IHJlbGVhc2UgdG8gJWRcbiIsCisJCQlfX2Z1bmNfXywgKHZvaWQgKilzdGNiLCBr
ZXlfaWQsIHNrZXktPnJlZmNvdW50KTsKKworCQkvKiBzZWUgaWYgYSBub3RpZmljYXRpb24gc2hv
dWxkIGJlIGdlbmVyYXRlZCAqLworCQlpZiAoKHNrZXktPnJlZmNvdW50IDw9IDIpICYmIChza2V5
LT5kZWFjdGl2YXRlZCkpIHsKKwkJCS8qIG5vdGlmeSBVTFAgdGhhdCBrZXkgaXMgbm8gbG9uZ2Vy
IHVzZWQgKi8KKwkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9BVVRIX0ZSRUVfS0VZLCBz
dGNiLAorCQkJCQlrZXlfaWQsIDAsIHNvX2xvY2tlZCk7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdf
QVVUSDIsCisJCQkJIiVzOiBzdGNiICVwIGtleSAldSBubyBsb25nZXIgdXNlZCwgJWRcbiIsCisJ
CQkJX19mdW5jX18sICh2b2lkICopc3RjYiwga2V5X2lkLCBza2V5LT5yZWZjb3VudCk7CisJCX0K
KwkJc2N0cF9mcmVlX3NoYXJlZGtleShza2V5KTsKKwl9Cit9CisKK3N0YXRpYyBzY3RwX3NoYXJl
ZGtleV90ICoKK3NjdHBfY29weV9zaGFyZWRrZXkoY29uc3Qgc2N0cF9zaGFyZWRrZXlfdCAqc2tl
eSkKK3sKKwlzY3RwX3NoYXJlZGtleV90ICpuZXdfc2tleTsKKworCWlmIChza2V5ID09IE5VTEwp
CisJCXJldHVybiAoTlVMTCk7CisJbmV3X3NrZXkgPSBzY3RwX2FsbG9jX3NoYXJlZGtleSgpOwor
CWlmIChuZXdfc2tleSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCWlmIChza2V5LT5rZXkg
IT0gTlVMTCkKKwkJbmV3X3NrZXktPmtleSA9IHNjdHBfc2V0X2tleShza2V5LT5rZXktPmtleSwg
c2tleS0+a2V5LT5rZXlsZW4pOworCWVsc2UKKwkJbmV3X3NrZXktPmtleSA9IE5VTEw7CisJbmV3
X3NrZXktPmtleWlkID0gc2tleS0+a2V5aWQ7CisJcmV0dXJuIChuZXdfc2tleSk7Cit9CisKK2lu
dAorc2N0cF9jb3B5X3NrZXlsaXN0KGNvbnN0IHN0cnVjdCBzY3RwX2tleWhlYWQgKnNyYywgc3Ry
dWN0IHNjdHBfa2V5aGVhZCAqZGVzdCkKK3sKKwlzY3RwX3NoYXJlZGtleV90ICpza2V5LCAqbmV3
X3NrZXk7CisJaW50IGNvdW50ID0gMDsKKworCWlmICgoc3JjID09IE5VTEwpIHx8IChkZXN0ID09
IE5VTEwpKQorCQlyZXR1cm4gKDApOworCUxJU1RfRk9SRUFDSChza2V5LCBzcmMsIG5leHQpIHsK
KwkJbmV3X3NrZXkgPSBzY3RwX2NvcHlfc2hhcmVka2V5KHNrZXkpOworCQlpZiAobmV3X3NrZXkg
IT0gTlVMTCkgeworCQkJaWYgKHNjdHBfaW5zZXJ0X3NoYXJlZGtleShkZXN0LCBuZXdfc2tleSkp
IHsKKwkJCQlzY3RwX2ZyZWVfc2hhcmVka2V5KG5ld19za2V5KTsKKwkJCX0gZWxzZSB7CisJCQkJ
Y291bnQrKzsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gKGNvdW50KTsKK30KKworc2N0cF9obWFj
bGlzdF90ICoKK3NjdHBfYWxsb2NfaG1hY2xpc3QodWludDE2X3QgbnVtX2htYWNzKQoreworCXNj
dHBfaG1hY2xpc3RfdCAqbmV3X2xpc3Q7CisJaW50IGFsbG9jX3NpemU7CisKKwlhbGxvY19zaXpl
ID0gc2l6ZW9mKCpuZXdfbGlzdCkgKyBudW1faG1hY3MgKiBzaXplb2YobmV3X2xpc3QtPmhtYWNb
MF0pOworCVNDVFBfTUFMTE9DKG5ld19saXN0LCBzY3RwX2htYWNsaXN0X3QgKiwgYWxsb2Nfc2l6
ZSwKKwkJICAgIFNDVFBfTV9BVVRIX0hMKTsKKwlpZiAobmV3X2xpc3QgPT0gTlVMTCkgeworCQkv
KiBvdXQgb2YgbWVtb3J5ICovCisJCXJldHVybiAoTlVMTCk7CisJfQorCW5ld19saXN0LT5tYXhf
YWxnbyA9IG51bV9obWFjczsKKwluZXdfbGlzdC0+bnVtX2FsZ28gPSAwOworCXJldHVybiAobmV3
X2xpc3QpOworfQorCit2b2lkCitzY3RwX2ZyZWVfaG1hY2xpc3Qoc2N0cF9obWFjbGlzdF90ICps
aXN0KQoreworCWlmIChsaXN0ICE9IE5VTEwpIHsKKwkJU0NUUF9GUkVFKGxpc3QsU0NUUF9NX0FV
VEhfSEwpOworCX0KK30KKworaW50CitzY3RwX2F1dGhfYWRkX2htYWNpZChzY3RwX2htYWNsaXN0
X3QgKmxpc3QsIHVpbnQxNl90IGhtYWNfaWQpCit7CisJaW50IGk7CisJaWYgKGxpc3QgPT0gTlVM
TCkKKwkJcmV0dXJuICgtMSk7CisJaWYgKGxpc3QtPm51bV9hbGdvID09IGxpc3QtPm1heF9hbGdv
KSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19BVVRIMSwKKwkJCSJTQ1RQOiBITUFDIGlkIGxpc3Qg
ZnVsbCwgaWdub3JpbmcgYWRkICV1XG4iLCBobWFjX2lkKTsKKwkJcmV0dXJuICgtMSk7CisJfQor
I2lmIGRlZmluZWQoU0NUUF9TVVBQT1JUX0hNQUNfU0hBMjU2KQorCWlmICgoaG1hY19pZCAhPSBT
Q1RQX0FVVEhfSE1BQ19JRF9TSEExKSAmJgorCSAgICAoaG1hY19pZCAhPSBTQ1RQX0FVVEhfSE1B
Q19JRF9TSEEyNTYpKSB7CisjZWxzZQorCWlmIChobWFjX2lkICE9IFNDVFBfQVVUSF9ITUFDX0lE
X1NIQTEpIHsKKyNlbmRpZgorCQlyZXR1cm4gKC0xKTsKKwl9CisJLyogTm93IGlzIGl0IGFscmVh
ZHkgaW4gdGhlIGxpc3QgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC0+bnVtX2FsZ287IGkrKykg
eworCQlpZiAobGlzdC0+aG1hY1tpXSA9PSBobWFjX2lkKSB7CisJCQkvKiBhbHJlYWR5IGluIGxp
c3QgKi8KKwkJCXJldHVybiAoLTEpOworCQl9CisJfQorCVNDVFBEQkcoU0NUUF9ERUJVR19BVVRI
MSwgIlNDVFA6IGFkZCBITUFDIGlkICV1IHRvIGxpc3RcbiIsIGhtYWNfaWQpOworCWxpc3QtPmht
YWNbbGlzdC0+bnVtX2FsZ28rK10gPSBobWFjX2lkOworCXJldHVybiAoMCk7Cit9CisKK3NjdHBf
aG1hY2xpc3RfdCAqCitzY3RwX2NvcHlfaG1hY2xpc3Qoc2N0cF9obWFjbGlzdF90ICpsaXN0KQor
eworCXNjdHBfaG1hY2xpc3RfdCAqbmV3X2xpc3Q7CisJaW50IGk7CisKKwlpZiAobGlzdCA9PSBO
VUxMKQorCQlyZXR1cm4gKE5VTEwpOworCS8qIGdldCBhIG5ldyBsaXN0ICovCisJbmV3X2xpc3Qg
PSBzY3RwX2FsbG9jX2htYWNsaXN0KGxpc3QtPm1heF9hbGdvKTsKKwlpZiAobmV3X2xpc3QgPT0g
TlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwkvKiBjb3B5IGl0ICovCisJbmV3X2xpc3QtPm1heF9h
bGdvID0gbGlzdC0+bWF4X2FsZ287CisJbmV3X2xpc3QtPm51bV9hbGdvID0gbGlzdC0+bnVtX2Fs
Z287CisJZm9yIChpID0gMDsgaSA8IGxpc3QtPm51bV9hbGdvOyBpKyspCisJCW5ld19saXN0LT5o
bWFjW2ldID0gbGlzdC0+aG1hY1tpXTsKKwlyZXR1cm4gKG5ld19saXN0KTsKK30KKworc2N0cF9o
bWFjbGlzdF90ICoKK3NjdHBfZGVmYXVsdF9zdXBwb3J0ZWRfaG1hY2xpc3Qodm9pZCkKK3sKKwlz
Y3RwX2htYWNsaXN0X3QgKm5ld19saXN0OworCisjaWYgZGVmaW5lZChTQ1RQX1NVUFBPUlRfSE1B
Q19TSEEyNTYpCisJbmV3X2xpc3QgPSBzY3RwX2FsbG9jX2htYWNsaXN0KDIpOworI2Vsc2UKKwlu
ZXdfbGlzdCA9IHNjdHBfYWxsb2NfaG1hY2xpc3QoMSk7CisjZW5kaWYKKwlpZiAobmV3X2xpc3Qg
PT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKyNpZiBkZWZpbmVkKFNDVFBfU1VQUE9SVF9ITUFD
X1NIQTI1NikKKwkvKiBXZSBwcmVmZXIgU0hBMjU2LCBzbyBsaXN0IGl0IGZpcnN0ICovCisJKHZv
aWQpc2N0cF9hdXRoX2FkZF9obWFjaWQobmV3X2xpc3QsIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTI1
Nik7CisjZW5kaWYKKwkodm9pZClzY3RwX2F1dGhfYWRkX2htYWNpZChuZXdfbGlzdCwgU0NUUF9B
VVRIX0hNQUNfSURfU0hBMSk7CisJcmV0dXJuIChuZXdfbGlzdCk7Cit9CisKKy8qLQorICogSE1B
QyBhbGdvcyBhcmUgbGlzdGVkIGluIHByaW9yaXR5L3ByZWZlcmVuY2Ugb3JkZXIKKyAqIGZpbmQg
dGhlIGJlc3QgSE1BQyBpZCB0byB1c2UgZm9yIHRoZSBwZWVyIGJhc2VkIG9uIGxvY2FsIHN1cHBv
cnQKKyAqLwordWludDE2X3QKK3NjdHBfbmVnb3RpYXRlX2htYWNpZChzY3RwX2htYWNsaXN0X3Qg
KnBlZXIsIHNjdHBfaG1hY2xpc3RfdCAqbG9jYWwpCit7CisJaW50IGksIGo7CisKKwlpZiAoKGxv
Y2FsID09IE5VTEwpIHx8IChwZWVyID09IE5VTEwpKQorCQlyZXR1cm4gKFNDVFBfQVVUSF9ITUFD
X0lEX1JTVkQpOworCisJZm9yIChpID0gMDsgaSA8IHBlZXItPm51bV9hbGdvOyBpKyspIHsKKwkJ
Zm9yIChqID0gMDsgaiA8IGxvY2FsLT5udW1fYWxnbzsgaisrKSB7CisJCQlpZiAocGVlci0+aG1h
Y1tpXSA9PSBsb2NhbC0+aG1hY1tqXSkgeworCQkJCS8qIGZvdW5kIHRoZSAiYmVzdCIgb25lICov
CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgxLAorCQkJCQkiU0NUUDogbmVnb3RpYXRlZCBw
ZWVyIEhNQUMgaWQgJXVcbiIsCisJCQkJCXBlZXItPmhtYWNbaV0pOworCQkJCXJldHVybiAocGVl
ci0+aG1hY1tpXSk7CisJCQl9CisJCX0KKwl9CisJLyogZGlkbid0IGZpbmQgb25lISAqLworCXJl
dHVybiAoU0NUUF9BVVRIX0hNQUNfSURfUlNWRCk7Cit9CisKKy8qLQorICogc2VyaWFsaXplIHRo
ZSBITUFDIGFsZ28gbGlzdCBhbmQgcmV0dXJuIHNwYWNlIHVzZWQKKyAqIGNhbGxlciBtdXN0IGd1
YXJhbnRlZSBwdHIgaGFzIGFwcHJvcHJpYXRlIHNwYWNlCisgKi8KK2ludAorc2N0cF9zZXJpYWxp
emVfaG1hY2xpc3Qoc2N0cF9obWFjbGlzdF90ICpsaXN0LCB1aW50OF90ICpwdHIpCit7CisJaW50
IGk7CisJdWludDE2X3QgaG1hY19pZDsKKworCWlmIChsaXN0ID09IE5VTEwpCisJCXJldHVybiAo
MCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC0+bnVtX2FsZ287IGkrKykgeworCQlobWFjX2lk
ID0gaHRvbnMobGlzdC0+aG1hY1tpXSk7CisJCW1lbWNweShwdHIsICZobWFjX2lkLCBzaXplb2Yo
aG1hY19pZCkpOworCQlwdHIgKz0gc2l6ZW9mKGhtYWNfaWQpOworCX0KKwlyZXR1cm4gKGxpc3Qt
Pm51bV9hbGdvICogc2l6ZW9mKGhtYWNfaWQpKTsKK30KKworaW50CitzY3RwX3ZlcmlmeV9obWFj
X3BhcmFtIChzdHJ1Y3Qgc2N0cF9hdXRoX2htYWNfYWxnbyAqaG1hY3MsIHVpbnQzMl90IG51bV9o
bWFjcykKK3sKKwl1aW50MzJfdCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9obWFjczsgaSsr
KSB7CisJCWlmIChudG9ocyhobWFjcy0+aG1hY19pZHNbaV0pID09IFNDVFBfQVVUSF9ITUFDX0lE
X1NIQTEpIHsKKwkJCXJldHVybiAoMCk7CisJCX0KKwl9CisJcmV0dXJuICgtMSk7Cit9CisKK3Nj
dHBfYXV0aGluZm9fdCAqCitzY3RwX2FsbG9jX2F1dGhpbmZvKHZvaWQpCit7CisJc2N0cF9hdXRo
aW5mb190ICpuZXdfYXV0aGluZm87CisKKwlTQ1RQX01BTExPQyhuZXdfYXV0aGluZm8sIHNjdHBf
YXV0aGluZm9fdCAqLCBzaXplb2YoKm5ld19hdXRoaW5mbyksCisJCSAgICBTQ1RQX01fQVVUSF9J
Rik7CisKKwlpZiAobmV3X2F1dGhpbmZvID09IE5VTEwpIHsKKwkJLyogb3V0IG9mIG1lbW9yeSAq
LworCQlyZXR1cm4gKE5VTEwpOworCX0KKwltZW1zZXQobmV3X2F1dGhpbmZvLCAwLCBzaXplb2Yo
Km5ld19hdXRoaW5mbykpOworCXJldHVybiAobmV3X2F1dGhpbmZvKTsKK30KKwordm9pZAorc2N0
cF9mcmVlX2F1dGhpbmZvKHNjdHBfYXV0aGluZm9fdCAqYXV0aGluZm8pCit7CisJaWYgKGF1dGhp
bmZvID09IE5VTEwpCisJCXJldHVybjsKKworCWlmIChhdXRoaW5mby0+cmFuZG9tICE9IE5VTEwp
CisJCXNjdHBfZnJlZV9rZXkoYXV0aGluZm8tPnJhbmRvbSk7CisJaWYgKGF1dGhpbmZvLT5wZWVy
X3JhbmRvbSAhPSBOVUxMKQorCQlzY3RwX2ZyZWVfa2V5KGF1dGhpbmZvLT5wZWVyX3JhbmRvbSk7
CisJaWYgKGF1dGhpbmZvLT5hc3NvY19rZXkgIT0gTlVMTCkKKwkJc2N0cF9mcmVlX2tleShhdXRo
aW5mby0+YXNzb2Nfa2V5KTsKKwlpZiAoYXV0aGluZm8tPnJlY3Zfa2V5ICE9IE5VTEwpCisJCXNj
dHBfZnJlZV9rZXkoYXV0aGluZm8tPnJlY3Zfa2V5KTsKKworCS8qIFdlIGFyZSBOT1QgZHluYW1p
Y2FsbHkgYWxsb2NhdGluZyBhdXRoaW5mbydzIHJpZ2h0IG5vdy4uLiAqLworCS8qIFNDVFBfRlJF
RShhdXRoaW5mbywgU0NUUF9NX0FVVEhfPz8pOyAqLworfQorCit1aW50MzJfdAorc2N0cF9nZXRf
YXV0aF9jaHVua19sZW4odWludDE2X3QgaG1hY19hbGdvKQoreworCWludCBzaXplOworCisJc2l6
ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rKSArIHNjdHBfZ2V0X2htYWNfZGlnZXN0
X2xlbihobWFjX2FsZ28pOworCXJldHVybiAoU0NUUF9TSVpFMzIoc2l6ZSkpOworfQorCit1aW50
MzJfdAorc2N0cF9nZXRfaG1hY19kaWdlc3RfbGVuKHVpbnQxNl90IGhtYWNfYWxnbykKK3sKKwlz
d2l0Y2ggKGhtYWNfYWxnbykgeworCWNhc2UgU0NUUF9BVVRIX0hNQUNfSURfU0hBMToKKwkJcmV0
dXJuIChTQ1RQX0FVVEhfRElHRVNUX0xFTl9TSEExKTsKKyNpZiBkZWZpbmVkKFNDVFBfU1VQUE9S
VF9ITUFDX1NIQTI1NikKKwljYXNlIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTI1NjoKKwkJcmV0dXJu
IChTQ1RQX0FVVEhfRElHRVNUX0xFTl9TSEEyNTYpOworI2VuZGlmCisJZGVmYXVsdDoKKwkJLyog
dW5rbm93biBITUFDIGFsZ29yaXRobTogY2FuJ3QgZG8gYW55dGhpbmcgKi8KKwkJcmV0dXJuICgw
KTsKKwl9IC8qIGVuZCBzd2l0Y2ggKi8KK30KKworc3RhdGljIGlubGluZSBpbnQKK3NjdHBfZ2V0
X2htYWNfYmxvY2tfbGVuKHVpbnQxNl90IGhtYWNfYWxnbykKK3sKKwlzd2l0Y2ggKGhtYWNfYWxn
bykgeworCWNhc2UgU0NUUF9BVVRIX0hNQUNfSURfU0hBMToKKwkJcmV0dXJuICg2NCk7CisjaWYg
ZGVmaW5lZChTQ1RQX1NVUFBPUlRfSE1BQ19TSEEyNTYpCisJY2FzZSBTQ1RQX0FVVEhfSE1BQ19J
RF9TSEEyNTY6CisJCXJldHVybiAoNjQpOworI2VuZGlmCisJY2FzZSBTQ1RQX0FVVEhfSE1BQ19J
RF9SU1ZEOgorCWRlZmF1bHQ6CisJCS8qIHVua25vd24gSE1BQyBhbGdvcml0aG06IGNhbid0IGRv
IGFueXRoaW5nICovCisJCXJldHVybiAoMCk7CisJfSAvKiBlbmQgc3dpdGNoICovCit9CisKKyNp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisvKiBfX1VzZXJzcGFjZV9fIFNIQTFfSW5pdCBpcyBk
ZWZpbmVkIGluIGxpYmNyeXB0by5hIChsaWJzc2wtZGV2IG9uIFVidW50dSkgKi8KKyNlbmRpZgor
c3RhdGljIHZvaWQKK3NjdHBfaG1hY19pbml0KHVpbnQxNl90IGhtYWNfYWxnbywgc2N0cF9oYXNo
X2NvbnRleHRfdCAqY3R4KQoreworCXN3aXRjaCAoaG1hY19hbGdvKSB7CisJY2FzZSBTQ1RQX0FV
VEhfSE1BQ19JRF9TSEExOgorCQlTQ1RQX1NIQTFfSU5JVCgmY3R4LT5zaGExKTsKKwkJYnJlYWs7
CisjaWYgZGVmaW5lZChTQ1RQX1NVUFBPUlRfSE1BQ19TSEEyNTYpCisJY2FzZSBTQ1RQX0FVVEhf
SE1BQ19JRF9TSEEyNTY6CisJCVNDVFBfU0hBMjU2X0lOSVQoJmN0eC0+c2hhMjU2KTsKKwkJYnJl
YWs7CisjZW5kaWYKKwljYXNlIFNDVFBfQVVUSF9ITUFDX0lEX1JTVkQ6CisJZGVmYXVsdDoKKwkJ
LyogdW5rbm93biBITUFDIGFsZ29yaXRobTogY2FuJ3QgZG8gYW55dGhpbmcgKi8KKwkJcmV0dXJu
OworCX0gLyogZW5kIHN3aXRjaCAqLworfQorCitzdGF0aWMgdm9pZAorc2N0cF9obWFjX3VwZGF0
ZSh1aW50MTZfdCBobWFjX2FsZ28sIHNjdHBfaGFzaF9jb250ZXh0X3QgKmN0eCwKKyAgICB1aW50
OF90ICp0ZXh0LCB1aW50MzJfdCB0ZXh0bGVuKQoreworCXN3aXRjaCAoaG1hY19hbGdvKSB7CisJ
Y2FzZSBTQ1RQX0FVVEhfSE1BQ19JRF9TSEExOgorCQlTQ1RQX1NIQTFfVVBEQVRFKCZjdHgtPnNo
YTEsIHRleHQsIHRleHRsZW4pOworCQlicmVhazsKKyNpZiBkZWZpbmVkKFNDVFBfU1VQUE9SVF9I
TUFDX1NIQTI1NikKKwljYXNlIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTI1NjoKKwkJU0NUUF9TSEEy
NTZfVVBEQVRFKCZjdHgtPnNoYTI1NiwgdGV4dCwgdGV4dGxlbik7CisJCWJyZWFrOworI2VuZGlm
CisJY2FzZSBTQ1RQX0FVVEhfSE1BQ19JRF9SU1ZEOgorCWRlZmF1bHQ6CisJCS8qIHVua25vd24g
SE1BQyBhbGdvcml0aG06IGNhbid0IGRvIGFueXRoaW5nICovCisJCXJldHVybjsKKwl9IC8qIGVu
ZCBzd2l0Y2ggKi8KK30KKworc3RhdGljIHZvaWQKK3NjdHBfaG1hY19maW5hbCh1aW50MTZfdCBo
bWFjX2FsZ28sIHNjdHBfaGFzaF9jb250ZXh0X3QgKmN0eCwKKyAgICB1aW50OF90ICpkaWdlc3Qp
Cit7CisJc3dpdGNoIChobWFjX2FsZ28pIHsKKwljYXNlIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTE6
CisJCVNDVFBfU0hBMV9GSU5BTChkaWdlc3QsICZjdHgtPnNoYTEpOworCQlicmVhazsKKyNpZiBk
ZWZpbmVkKFNDVFBfU1VQUE9SVF9ITUFDX1NIQTI1NikKKwljYXNlIFNDVFBfQVVUSF9ITUFDX0lE
X1NIQTI1NjoKKwkJU0NUUF9TSEEyNTZfRklOQUwoZGlnZXN0LCAmY3R4LT5zaGEyNTYpOworCQli
cmVhazsKKyNlbmRpZgorCWNhc2UgU0NUUF9BVVRIX0hNQUNfSURfUlNWRDoKKwlkZWZhdWx0Ogor
CQkvKiB1bmtub3duIEhNQUMgYWxnb3JpdGhtOiBjYW4ndCBkbyBhbnl0aGluZyAqLworCQlyZXR1
cm47CisJfSAvKiBlbmQgc3dpdGNoICovCit9CisKKy8qLQorICogS2V5ZWQtSGFzaGluZyBmb3Ig
TWVzc2FnZSBBdXRoZW50aWNhdGlvbjogRklQUyAxOTggKFJGQyAyMTA0KQorICoKKyAqIENvbXB1
dGUgdGhlIEhNQUMgZGlnZXN0IHVzaW5nIHRoZSBkZXNpcmVkIGhhc2gga2V5LCB0ZXh0LCBhbmQg
SE1BQworICogYWxnb3JpdGhtLiAgUmVzdWx0aW5nIGRpZ2VzdCBpcyBwbGFjZWQgaW4gJ2RpZ2Vz
dCcgYW5kIGRpZ2VzdCBsZW5ndGgKKyAqIGlzIHJldHVybmVkLCBpZiB0aGUgSE1BQyB3YXMgcGVy
Zm9ybWVkLgorICoKKyAqIFdBUk5JTkc6IGl0IGlzIHVwIHRvIHRoZSBjYWxsZXIgdG8gc3VwcGx5
IHN1ZmZpY2llbnQgc3BhY2UgdG8gaG9sZCB0aGUKKyAqIHJlc3VsdGFudCBkaWdlc3QuCisgKi8K
K3VpbnQzMl90CitzY3RwX2htYWModWludDE2X3QgaG1hY19hbGdvLCB1aW50OF90ICprZXksIHVp
bnQzMl90IGtleWxlbiwKKyAgICB1aW50OF90ICp0ZXh0LCB1aW50MzJfdCB0ZXh0bGVuLCB1aW50
OF90ICpkaWdlc3QpCit7CisJdWludDMyX3QgZGlnZXN0bGVuOworCXVpbnQzMl90IGJsb2NrbGVu
OworCXNjdHBfaGFzaF9jb250ZXh0X3QgY3R4OworCXVpbnQ4X3QgaXBhZFsxMjhdLCBvcGFkWzEy
OF07CS8qIGtleWVkIGhhc2ggaW5uZXIvb3V0ZXIgcGFkcyAqLworCXVpbnQ4X3QgdGVtcFtTQ1RQ
X0FVVEhfRElHRVNUX0xFTl9NQVhdOworCXVpbnQzMl90IGk7CisKKwkvKiBzYW5pdHkgY2hlY2sg
dGhlIG1hdGVyaWFsIGFuZCBsZW5ndGggKi8KKwlpZiAoKGtleSA9PSBOVUxMKSB8fCAoa2V5bGVu
ID09IDApIHx8ICh0ZXh0ID09IE5VTEwpIHx8CisJICAgICh0ZXh0bGVuID09IDApIHx8IChkaWdl
c3QgPT0gTlVMTCkpIHsKKwkJLyogY2FuJ3QgZG8gSE1BQyB3aXRoIGVtcHR5IGtleSBvciB0ZXh0
IG9yIGRpZ2VzdCBzdG9yZSAqLworCQlyZXR1cm4gKDApOworCX0KKwkvKiB2YWxpZGF0ZSB0aGUg
aG1hYyBhbGdvIGFuZCBnZXQgdGhlIGRpZ2VzdCBsZW5ndGggKi8KKwlkaWdlc3RsZW4gPSBzY3Rw
X2dldF9obWFjX2RpZ2VzdF9sZW4oaG1hY19hbGdvKTsKKwlpZiAoZGlnZXN0bGVuID09IDApCisJ
CXJldHVybiAoMCk7CisKKwkvKiBoYXNoIHRoZSBrZXkgaWYgaXQgaXMgbG9uZ2VyIHRoYW4gdGhl
IGhhc2ggYmxvY2sgc2l6ZSAqLworCWJsb2NrbGVuID0gc2N0cF9nZXRfaG1hY19ibG9ja19sZW4o
aG1hY19hbGdvKTsKKwlpZiAoa2V5bGVuID4gYmxvY2tsZW4pIHsKKwkJc2N0cF9obWFjX2luaXQo
aG1hY19hbGdvLCAmY3R4KTsKKwkJc2N0cF9obWFjX3VwZGF0ZShobWFjX2FsZ28sICZjdHgsIGtl
eSwga2V5bGVuKTsKKwkJc2N0cF9obWFjX2ZpbmFsKGhtYWNfYWxnbywgJmN0eCwgdGVtcCk7CisJ
CS8qIHNldCB0aGUgaGFzaGVkIGtleSBhcyB0aGUga2V5ICovCisJCWtleWxlbiA9IGRpZ2VzdGxl
bjsKKwkJa2V5ID0gdGVtcDsKKwl9CisJLyogaW5pdGlhbGl6ZSB0aGUgaW5uZXIvb3V0ZXIgcGFk
cyB3aXRoIHRoZSBrZXkgYW5kICJhcHBlbmQiIHplcm9lcyAqLworCW1lbXNldChpcGFkLCAwLCBi
bG9ja2xlbik7CisJbWVtc2V0KG9wYWQsIDAsIGJsb2NrbGVuKTsKKwltZW1jcHkoaXBhZCwga2V5
LCBrZXlsZW4pOworCW1lbWNweShvcGFkLCBrZXksIGtleWxlbik7CisKKwkvKiBYT1IgdGhlIGtl
eSB3aXRoIGlwYWQgYW5kIG9wYWQgdmFsdWVzICovCisJZm9yIChpID0gMDsgaSA8IGJsb2NrbGVu
OyBpKyspIHsKKwkJaXBhZFtpXSBePSAweDM2OworCQlvcGFkW2ldIF49IDB4NWM7CisJfQorCisJ
LyogcGVyZm9ybSBpbm5lciBoYXNoICovCisJc2N0cF9obWFjX2luaXQoaG1hY19hbGdvLCAmY3R4
KTsKKwlzY3RwX2htYWNfdXBkYXRlKGhtYWNfYWxnbywgJmN0eCwgaXBhZCwgYmxvY2tsZW4pOwor
CXNjdHBfaG1hY191cGRhdGUoaG1hY19hbGdvLCAmY3R4LCB0ZXh0LCB0ZXh0bGVuKTsKKwlzY3Rw
X2htYWNfZmluYWwoaG1hY19hbGdvLCAmY3R4LCB0ZW1wKTsKKworCS8qIHBlcmZvcm0gb3V0ZXIg
aGFzaCAqLworCXNjdHBfaG1hY19pbml0KGhtYWNfYWxnbywgJmN0eCk7CisJc2N0cF9obWFjX3Vw
ZGF0ZShobWFjX2FsZ28sICZjdHgsIG9wYWQsIGJsb2NrbGVuKTsKKwlzY3RwX2htYWNfdXBkYXRl
KGhtYWNfYWxnbywgJmN0eCwgdGVtcCwgZGlnZXN0bGVuKTsKKwlzY3RwX2htYWNfZmluYWwoaG1h
Y19hbGdvLCAmY3R4LCBkaWdlc3QpOworCisJcmV0dXJuIChkaWdlc3RsZW4pOworfQorCisvKiBt
YnVmIHZlcnNpb24gKi8KK3VpbnQzMl90CitzY3RwX2htYWNfbSh1aW50MTZfdCBobWFjX2FsZ28s
IHVpbnQ4X3QgKmtleSwgdWludDMyX3Qga2V5bGVuLAorICAgIHN0cnVjdCBtYnVmICptLCB1aW50
MzJfdCBtX29mZnNldCwgdWludDhfdCAqZGlnZXN0LCB1aW50MzJfdCB0cmFpbGVyKQoreworCXVp
bnQzMl90IGRpZ2VzdGxlbjsKKwl1aW50MzJfdCBibG9ja2xlbjsKKwlzY3RwX2hhc2hfY29udGV4
dF90IGN0eDsKKwl1aW50OF90IGlwYWRbMTI4XSwgb3BhZFsxMjhdOwkvKiBrZXllZCBoYXNoIGlu
bmVyL291dGVyIHBhZHMgKi8KKwl1aW50OF90IHRlbXBbU0NUUF9BVVRIX0RJR0VTVF9MRU5fTUFY
XTsKKwl1aW50MzJfdCBpOworCXN0cnVjdCBtYnVmICptX3RtcDsKKworCS8qIHNhbml0eSBjaGVj
ayB0aGUgbWF0ZXJpYWwgYW5kIGxlbmd0aCAqLworCWlmICgoa2V5ID09IE5VTEwpIHx8IChrZXls
ZW4gPT0gMCkgfHwgKG0gPT0gTlVMTCkgfHwgKGRpZ2VzdCA9PSBOVUxMKSkgeworCQkvKiBjYW4n
dCBkbyBITUFDIHdpdGggZW1wdHkga2V5IG9yIHRleHQgb3IgZGlnZXN0IHN0b3JlICovCisJCXJl
dHVybiAoMCk7CisJfQorCS8qIHZhbGlkYXRlIHRoZSBobWFjIGFsZ28gYW5kIGdldCB0aGUgZGln
ZXN0IGxlbmd0aCAqLworCWRpZ2VzdGxlbiA9IHNjdHBfZ2V0X2htYWNfZGlnZXN0X2xlbihobWFj
X2FsZ28pOworCWlmIChkaWdlc3RsZW4gPT0gMCkKKwkJcmV0dXJuICgwKTsKKworCS8qIGhhc2gg
dGhlIGtleSBpZiBpdCBpcyBsb25nZXIgdGhhbiB0aGUgaGFzaCBibG9jayBzaXplICovCisJYmxv
Y2tsZW4gPSBzY3RwX2dldF9obWFjX2Jsb2NrX2xlbihobWFjX2FsZ28pOworCWlmIChrZXlsZW4g
PiBibG9ja2xlbikgeworCQlzY3RwX2htYWNfaW5pdChobWFjX2FsZ28sICZjdHgpOworCQlzY3Rw
X2htYWNfdXBkYXRlKGhtYWNfYWxnbywgJmN0eCwga2V5LCBrZXlsZW4pOworCQlzY3RwX2htYWNf
ZmluYWwoaG1hY19hbGdvLCAmY3R4LCB0ZW1wKTsKKwkJLyogc2V0IHRoZSBoYXNoZWQga2V5IGFz
IHRoZSBrZXkgKi8KKwkJa2V5bGVuID0gZGlnZXN0bGVuOworCQlrZXkgPSB0ZW1wOworCX0KKwkv
KiBpbml0aWFsaXplIHRoZSBpbm5lci9vdXRlciBwYWRzIHdpdGggdGhlIGtleSBhbmQgImFwcGVu
ZCIgemVyb2VzICovCisJbWVtc2V0KGlwYWQsIDAsIGJsb2NrbGVuKTsKKwltZW1zZXQob3BhZCwg
MCwgYmxvY2tsZW4pOworCW1lbWNweShpcGFkLCBrZXksIGtleWxlbik7CisJbWVtY3B5KG9wYWQs
IGtleSwga2V5bGVuKTsKKworCS8qIFhPUiB0aGUga2V5IHdpdGggaXBhZCBhbmQgb3BhZCB2YWx1
ZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYmxvY2tsZW47IGkrKykgeworCQlpcGFkW2ldIF49IDB4
MzY7CisJCW9wYWRbaV0gXj0gMHg1YzsKKwl9CisKKwkvKiBwZXJmb3JtIGlubmVyIGhhc2ggKi8K
KwlzY3RwX2htYWNfaW5pdChobWFjX2FsZ28sICZjdHgpOworCXNjdHBfaG1hY191cGRhdGUoaG1h
Y19hbGdvLCAmY3R4LCBpcGFkLCBibG9ja2xlbik7CisJLyogZmluZCB0aGUgY29ycmVjdCBzdGFy
dGluZyBtYnVmIGFuZCBvZmZzZXQgKGdldCBzdGFydCBvZiB0ZXh0KSAqLworCW1fdG1wID0gbTsK
Kwl3aGlsZSAoKG1fdG1wICE9IE5VTEwpICYmIChtX29mZnNldCA+PSAodWludDMyX3QpIFNDVFBf
QlVGX0xFTihtX3RtcCkpKSB7CisJCW1fb2Zmc2V0IC09IFNDVFBfQlVGX0xFTihtX3RtcCk7CisJ
CW1fdG1wID0gU0NUUF9CVUZfTkVYVChtX3RtcCk7CisJfQorCS8qIG5vdyB1c2UgdGhlIHJlc3Qg
b2YgdGhlIG1idWYgY2hhaW4gZm9yIHRoZSB0ZXh0ICovCisJd2hpbGUgKG1fdG1wICE9IE5VTEwp
IHsKKwkJaWYgKChTQ1RQX0JVRl9ORVhUKG1fdG1wKSA9PSBOVUxMKSAmJiB0cmFpbGVyKSB7CisJ
CQlzY3RwX2htYWNfdXBkYXRlKGhtYWNfYWxnbywgJmN0eCwgbXRvZChtX3RtcCwgdWludDhfdCAq
KSArIG1fb2Zmc2V0LAorCQkJCQkgU0NUUF9CVUZfTEVOKG1fdG1wKSAtICh0cmFpbGVyK21fb2Zm
c2V0KSk7CisJCX0gZWxzZSB7CisJCQlzY3RwX2htYWNfdXBkYXRlKGhtYWNfYWxnbywgJmN0eCwg
bXRvZChtX3RtcCwgdWludDhfdCAqKSArIG1fb2Zmc2V0LAorCQkJCQkgU0NUUF9CVUZfTEVOKG1f
dG1wKSAtIG1fb2Zmc2V0KTsKKwkJfQorCisJCS8qIGNsZWFyIHRoZSBvZmZzZXQgc2luY2UgaXQn
cyBvbmx5IGZvciB0aGUgZmlyc3QgbWJ1ZiAqLworCQltX29mZnNldCA9IDA7CisJCW1fdG1wID0g
U0NUUF9CVUZfTkVYVChtX3RtcCk7CisJfQorCXNjdHBfaG1hY19maW5hbChobWFjX2FsZ28sICZj
dHgsIHRlbXApOworCisJLyogcGVyZm9ybSBvdXRlciBoYXNoICovCisJc2N0cF9obWFjX2luaXQo
aG1hY19hbGdvLCAmY3R4KTsKKwlzY3RwX2htYWNfdXBkYXRlKGhtYWNfYWxnbywgJmN0eCwgb3Bh
ZCwgYmxvY2tsZW4pOworCXNjdHBfaG1hY191cGRhdGUoaG1hY19hbGdvLCAmY3R4LCB0ZW1wLCBk
aWdlc3RsZW4pOworCXNjdHBfaG1hY19maW5hbChobWFjX2FsZ28sICZjdHgsIGRpZ2VzdCk7CisK
KwlyZXR1cm4gKGRpZ2VzdGxlbik7Cit9CisKKy8qCisgKiBjb21wdXRlcyB0aGUgcmVxdWVzdGVk
IEhNQUMgdXNpbmcgYSBrZXkgc3RydWN0ICh3aGljaCBtYXkgYmUgbW9kaWZpZWQgaWYKKyAqIHRo
ZSBrZXlsZW4gZXhjZWVkcyB0aGUgSE1BQyBibG9jayBsZW4pLgorICovCit1aW50MzJfdAorc2N0
cF9jb21wdXRlX2htYWModWludDE2X3QgaG1hY19hbGdvLCBzY3RwX2tleV90ICprZXksIHVpbnQ4
X3QgKnRleHQsCisgICAgdWludDMyX3QgdGV4dGxlbiwgdWludDhfdCAqZGlnZXN0KQoreworCXVp
bnQzMl90IGRpZ2VzdGxlbjsKKwl1aW50MzJfdCBibG9ja2xlbjsKKwlzY3RwX2hhc2hfY29udGV4
dF90IGN0eDsKKwl1aW50OF90IHRlbXBbU0NUUF9BVVRIX0RJR0VTVF9MRU5fTUFYXTsKKworCS8q
IHNhbml0eSBjaGVjayAqLworCWlmICgoa2V5ID09IE5VTEwpIHx8ICh0ZXh0ID09IE5VTEwpIHx8
ICh0ZXh0bGVuID09IDApIHx8CisJICAgIChkaWdlc3QgPT0gTlVMTCkpIHsKKwkJLyogY2FuJ3Qg
ZG8gSE1BQyB3aXRoIGVtcHR5IGtleSBvciB0ZXh0IG9yIGRpZ2VzdCBzdG9yZSAqLworCQlyZXR1
cm4gKDApOworCX0KKwkvKiB2YWxpZGF0ZSB0aGUgaG1hYyBhbGdvIGFuZCBnZXQgdGhlIGRpZ2Vz
dCBsZW5ndGggKi8KKwlkaWdlc3RsZW4gPSBzY3RwX2dldF9obWFjX2RpZ2VzdF9sZW4oaG1hY19h
bGdvKTsKKwlpZiAoZGlnZXN0bGVuID09IDApCisJCXJldHVybiAoMCk7CisKKwkvKiBoYXNoIHRo
ZSBrZXkgaWYgaXQgaXMgbG9uZ2VyIHRoYW4gdGhlIGhhc2ggYmxvY2sgc2l6ZSAqLworCWJsb2Nr
bGVuID0gc2N0cF9nZXRfaG1hY19ibG9ja19sZW4oaG1hY19hbGdvKTsKKwlpZiAoa2V5LT5rZXls
ZW4gPiBibG9ja2xlbikgeworCQlzY3RwX2htYWNfaW5pdChobWFjX2FsZ28sICZjdHgpOworCQlz
Y3RwX2htYWNfdXBkYXRlKGhtYWNfYWxnbywgJmN0eCwga2V5LT5rZXksIGtleS0+a2V5bGVuKTsK
KwkJc2N0cF9obWFjX2ZpbmFsKGhtYWNfYWxnbywgJmN0eCwgdGVtcCk7CisJCS8qIHNhdmUgdGhl
IGhhc2hlZCBrZXkgYXMgdGhlIG5ldyBrZXkgKi8KKwkJa2V5LT5rZXlsZW4gPSBkaWdlc3RsZW47
CisJCW1lbWNweShrZXktPmtleSwgdGVtcCwga2V5LT5rZXlsZW4pOworCX0KKwlyZXR1cm4gKHNj
dHBfaG1hYyhobWFjX2FsZ28sIGtleS0+a2V5LCBrZXktPmtleWxlbiwgdGV4dCwgdGV4dGxlbiwK
KwkgICAgZGlnZXN0KSk7Cit9CisKKy8qIG1idWYgdmVyc2lvbiAqLwordWludDMyX3QKK3NjdHBf
Y29tcHV0ZV9obWFjX20odWludDE2X3QgaG1hY19hbGdvLCBzY3RwX2tleV90ICprZXksIHN0cnVj
dCBtYnVmICptLAorICAgIHVpbnQzMl90IG1fb2Zmc2V0LCB1aW50OF90ICpkaWdlc3QpCit7CisJ
dWludDMyX3QgZGlnZXN0bGVuOworCXVpbnQzMl90IGJsb2NrbGVuOworCXNjdHBfaGFzaF9jb250
ZXh0X3QgY3R4OworCXVpbnQ4X3QgdGVtcFtTQ1RQX0FVVEhfRElHRVNUX0xFTl9NQVhdOworCisJ
Lyogc2FuaXR5IGNoZWNrICovCisJaWYgKChrZXkgPT0gTlVMTCkgfHwgKG0gPT0gTlVMTCkgfHwg
KGRpZ2VzdCA9PSBOVUxMKSkgeworCQkvKiBjYW4ndCBkbyBITUFDIHdpdGggZW1wdHkga2V5IG9y
IHRleHQgb3IgZGlnZXN0IHN0b3JlICovCisJCXJldHVybiAoMCk7CisJfQorCS8qIHZhbGlkYXRl
IHRoZSBobWFjIGFsZ28gYW5kIGdldCB0aGUgZGlnZXN0IGxlbmd0aCAqLworCWRpZ2VzdGxlbiA9
IHNjdHBfZ2V0X2htYWNfZGlnZXN0X2xlbihobWFjX2FsZ28pOworCWlmIChkaWdlc3RsZW4gPT0g
MCkKKwkJcmV0dXJuICgwKTsKKworCS8qIGhhc2ggdGhlIGtleSBpZiBpdCBpcyBsb25nZXIgdGhh
biB0aGUgaGFzaCBibG9jayBzaXplICovCisJYmxvY2tsZW4gPSBzY3RwX2dldF9obWFjX2Jsb2Nr
X2xlbihobWFjX2FsZ28pOworCWlmIChrZXktPmtleWxlbiA+IGJsb2NrbGVuKSB7CisJCXNjdHBf
aG1hY19pbml0KGhtYWNfYWxnbywgJmN0eCk7CisJCXNjdHBfaG1hY191cGRhdGUoaG1hY19hbGdv
LCAmY3R4LCBrZXktPmtleSwga2V5LT5rZXlsZW4pOworCQlzY3RwX2htYWNfZmluYWwoaG1hY19h
bGdvLCAmY3R4LCB0ZW1wKTsKKwkJLyogc2F2ZSB0aGUgaGFzaGVkIGtleSBhcyB0aGUgbmV3IGtl
eSAqLworCQlrZXktPmtleWxlbiA9IGRpZ2VzdGxlbjsKKwkJbWVtY3B5KGtleS0+a2V5LCB0ZW1w
LCBrZXktPmtleWxlbik7CisJfQorCXJldHVybiAoc2N0cF9obWFjX20oaG1hY19hbGdvLCBrZXkt
PmtleSwga2V5LT5rZXlsZW4sIG0sIG1fb2Zmc2V0LCBkaWdlc3QsIDApKTsKK30KKworaW50Citz
Y3RwX2F1dGhfaXNfc3VwcG9ydGVkX2htYWMoc2N0cF9obWFjbGlzdF90ICpsaXN0LCB1aW50MTZf
dCBpZCkKK3sKKwlpbnQgaTsKKworCWlmICgobGlzdCA9PSBOVUxMKSB8fCAoaWQgPT0gU0NUUF9B
VVRIX0hNQUNfSURfUlNWRCkpCisJCXJldHVybiAoMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGlz
dC0+bnVtX2FsZ287IGkrKykKKwkJaWYgKGxpc3QtPmhtYWNbaV0gPT0gaWQpCisJCQlyZXR1cm4g
KDEpOworCisJLyogbm90IGluIHRoZSBsaXN0ICovCisJcmV0dXJuICgwKTsKK30KKworLyotCisg
KiBjbGVhciBhbnkgY2FjaGVkIGtleShzKSBpZiB0aGV5IG1hdGNoIHRoZSBnaXZlbiBrZXkgaWQg
b24gYW4gYXNzb2NpYXRpb24uCisgKiB0aGUgY2FjaGVkIGtleShzKSB3aWxsIGJlIHJlY29tcHV0
ZWQgYW5kIHJlLWNhY2hlZCBhdCBuZXh0IHVzZS4KKyAqIEFTU1VNRVMgVENCX0xPQ0sgaXMgYWxy
ZWFkeSBoZWxkCisgKi8KK3ZvaWQKK3NjdHBfY2xlYXJfY2FjaGVka2V5cyhzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsIHVpbnQxNl90IGtleWlkKQoreworCWlmIChzdGNiID09IE5VTEwpCisJCXJldHVy
bjsKKworCWlmIChrZXlpZCA9PSBzdGNiLT5hc29jLmF1dGhpbmZvLmFzc29jX2tleWlkKSB7CisJ
CXNjdHBfZnJlZV9rZXkoc3RjYi0+YXNvYy5hdXRoaW5mby5hc3NvY19rZXkpOworCQlzdGNiLT5h
c29jLmF1dGhpbmZvLmFzc29jX2tleSA9IE5VTEw7CisJfQorCWlmIChrZXlpZCA9PSBzdGNiLT5h
c29jLmF1dGhpbmZvLnJlY3Zfa2V5aWQpIHsKKwkJc2N0cF9mcmVlX2tleShzdGNiLT5hc29jLmF1
dGhpbmZvLnJlY3Zfa2V5KTsKKwkJc3RjYi0+YXNvYy5hdXRoaW5mby5yZWN2X2tleSA9IE5VTEw7
CisJfQorfQorCisvKi0KKyAqIGNsZWFyIGFueSBjYWNoZWQga2V5KHMpIGlmIHRoZXkgbWF0Y2gg
dGhlIGdpdmVuIGtleSBpZCBmb3IgYWxsIGFzc29jcyBvbgorICogYW4gZW5kcG9pbnQuCisgKiBB
U1NVTUVTIElOUF9XTE9DSyBpcyBhbHJlYWR5IGhlbGQKKyAqLwordm9pZAorc2N0cF9jbGVhcl9j
YWNoZWRrZXlzX2VwKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHVpbnQxNl90IGtleWlkKQorewor
CXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKKworCWlmIChpbnAgPT0gTlVMTCkKKwkJcmV0dXJuOwor
CisJLyogY2xlYXIgdGhlIGNhY2hlZCBrZXlzIG9uIGFsbCBhc3NvY3Mgb24gdGhpcyBpbnN0YW5j
ZSAqLworCUxJU1RfRk9SRUFDSChzdGNiLCAmaW5wLT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2Js
aXN0KSB7CisJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCXNjdHBfY2xlYXJfY2FjaGVka2V5cyhz
dGNiLCBrZXlpZCk7CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwl9Cit9CisKKy8qLQorICog
ZGVsZXRlIGEgc2hhcmVkIGtleSBmcm9tIGFuIGFzc29jaWF0aW9uCisgKiBBU1NVTUVTIFRDQl9M
T0NLIGlzIGFscmVhZHkgaGVsZAorICovCitpbnQKK3NjdHBfZGVsZXRlX3NoYXJlZGtleShzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQxNl90IGtleWlkKQoreworCXNjdHBfc2hhcmVka2V5X3Qg
KnNrZXk7CisKKwlpZiAoc3RjYiA9PSBOVUxMKQorCQlyZXR1cm4gKC0xKTsKKworCS8qIGlzIHRo
ZSBrZXlpZCB0aGUgYXNzb2MgYWN0aXZlIHNlbmRpbmcga2V5ICovCisJaWYgKGtleWlkID09IHN0
Y2ItPmFzb2MuYXV0aGluZm8uYWN0aXZlX2tleWlkKQorCQlyZXR1cm4gKC0xKTsKKworCS8qIGRv
ZXMgdGhlIGtleSBleGlzdD8gKi8KKwlza2V5ID0gc2N0cF9maW5kX3NoYXJlZGtleSgmc3RjYi0+
YXNvYy5zaGFyZWRfa2V5cywga2V5aWQpOworCWlmIChza2V5ID09IE5VTEwpCisJCXJldHVybiAo
LTEpOworCisJLyogYXJlIHRoZXJlIG90aGVyIHJlZmNvdW50IGhvbGRlcnMgb24gdGhlIGtleT8g
Ki8KKwlpZiAoc2tleS0+cmVmY291bnQgPiAxKQorCQlyZXR1cm4gKC0xKTsKKworCS8qIHJlbW92
ZSBpdCAqLworCUxJU1RfUkVNT1ZFKHNrZXksIG5leHQpOworCXNjdHBfZnJlZV9zaGFyZWRrZXko
c2tleSk7CS8qIGZyZWVzIHNrZXktPmtleSBhcyB3ZWxsICovCisKKwkvKiBjbGVhciBhbnkgY2Fj
aGVkIGtleXMgKi8KKwlzY3RwX2NsZWFyX2NhY2hlZGtleXMoc3RjYiwga2V5aWQpOworCXJldHVy
biAoMCk7Cit9CisKKy8qLQorICogZGVsZXRlcyBhIHNoYXJlZCBrZXkgZnJvbSB0aGUgZW5kcG9p
bnQKKyAqIEFTU1VNRVMgSU5QX1dMT0NLIGlzIGFscmVhZHkgaGVsZAorICovCitpbnQKK3NjdHBf
ZGVsZXRlX3NoYXJlZGtleV9lcChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCB1aW50MTZfdCBrZXlp
ZCkKK3sKKwlzY3RwX3NoYXJlZGtleV90ICpza2V5OworCisJaWYgKGlucCA9PSBOVUxMKQorCQly
ZXR1cm4gKC0xKTsKKworCS8qIGlzIHRoZSBrZXlpZCB0aGUgYWN0aXZlIHNlbmRpbmcga2V5IG9u
IHRoZSBlbmRwb2ludCAqLworCWlmIChrZXlpZCA9PSBpbnAtPnNjdHBfZXAuZGVmYXVsdF9rZXlp
ZCkKKwkJcmV0dXJuICgtMSk7CisKKwkvKiBkb2VzIHRoZSBrZXkgZXhpc3Q/ICovCisJc2tleSA9
IHNjdHBfZmluZF9zaGFyZWRrZXkoJmlucC0+c2N0cF9lcC5zaGFyZWRfa2V5cywga2V5aWQpOwor
CWlmIChza2V5ID09IE5VTEwpCisJCXJldHVybiAoLTEpOworCisJLyogZW5kcG9pbnQga2V5cyBh
cmUgbm90IHJlZmNvdW50ZWQgKi8KKworCS8qIHJlbW92ZSBpdCAqLworCUxJU1RfUkVNT1ZFKHNr
ZXksIG5leHQpOworCXNjdHBfZnJlZV9zaGFyZWRrZXkoc2tleSk7CS8qIGZyZWVzIHNrZXktPmtl
eSBhcyB3ZWxsICovCisKKwkvKiBjbGVhciBhbnkgY2FjaGVkIGtleXMgKi8KKwlzY3RwX2NsZWFy
X2NhY2hlZGtleXNfZXAoaW5wLCBrZXlpZCk7CisJcmV0dXJuICgwKTsKK30KKworLyotCisgKiBz
ZXQgdGhlIGFjdGl2ZSBrZXkgb24gYW4gYXNzb2NpYXRpb24KKyAqIEFTU1VNRVMgVENCX0xPQ0sg
aXMgYWxyZWFkeSBoZWxkCisgKi8KK2ludAorc2N0cF9hdXRoX3NldGFjdGl2ZWtleShzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IsIHVpbnQxNl90IGtleWlkKQoreworCXNjdHBfc2hhcmVka2V5X3QgKnNr
ZXkgPSBOVUxMOworCisJLyogZmluZCB0aGUga2V5IG9uIHRoZSBhc3NvYyAqLworCXNrZXkgPSBz
Y3RwX2ZpbmRfc2hhcmVka2V5KCZzdGNiLT5hc29jLnNoYXJlZF9rZXlzLCBrZXlpZCk7CisJaWYg
KHNrZXkgPT0gTlVMTCkgeworCQkvKiB0aGF0IGtleSBkb2Vzbid0IGV4aXN0ICovCisJCXJldHVy
biAoLTEpOworCX0KKwlpZiAoKHNrZXktPmRlYWN0aXZhdGVkKSAmJiAoc2tleS0+cmVmY291bnQg
PiAxKSkgeworCQkvKiBjYW4ndCByZWFjdGl2YXRlIGEgZGVhY3RpdmF0ZWQga2V5IHdpdGggb3Ro
ZXIgcmVmY291bnRzICovCisJCXJldHVybiAoLTEpOworCX0KKworCS8qIHNldCB0aGUgKG5ldykg
YWN0aXZlIGtleSAqLworCXN0Y2ItPmFzb2MuYXV0aGluZm8uYWN0aXZlX2tleWlkID0ga2V5aWQ7
CisJLyogcmVzZXQgdGhlIGRlYWN0aXZhdGVkIGZsYWcgKi8KKwlza2V5LT5kZWFjdGl2YXRlZCA9
IDA7CisKKwlyZXR1cm4gKDApOworfQorCisvKi0KKyAqIHNldCB0aGUgYWN0aXZlIGtleSBvbiBh
biBlbmRwb2ludAorICogQVNTVU1FUyBJTlBfV0xPQ0sgaXMgYWxyZWFkeSBoZWxkCisgKi8KK2lu
dAorc2N0cF9hdXRoX3NldGFjdGl2ZWtleV9lcChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCB1aW50
MTZfdCBrZXlpZCkKK3sKKwlzY3RwX3NoYXJlZGtleV90ICpza2V5OworCisJLyogZmluZCB0aGUg
a2V5ICovCisJc2tleSA9IHNjdHBfZmluZF9zaGFyZWRrZXkoJmlucC0+c2N0cF9lcC5zaGFyZWRf
a2V5cywga2V5aWQpOworCWlmIChza2V5ID09IE5VTEwpIHsKKwkJLyogdGhhdCBrZXkgZG9lc24n
dCBleGlzdCAqLworCQlyZXR1cm4gKC0xKTsKKwl9CisJaW5wLT5zY3RwX2VwLmRlZmF1bHRfa2V5
aWQgPSBrZXlpZDsKKwlyZXR1cm4gKDApOworfQorCisvKi0KKyAqIGRlYWN0aXZhdGVzIGEgc2hh
cmVkIGtleSBmcm9tIHRoZSBhc3NvY2lhdGlvbgorICogQVNTVU1FUyBJTlBfV0xPQ0sgaXMgYWxy
ZWFkeSBoZWxkCisgKi8KK2ludAorc2N0cF9kZWFjdF9zaGFyZWRrZXkoc3RydWN0IHNjdHBfdGNi
ICpzdGNiLCB1aW50MTZfdCBrZXlpZCkKK3sKKwlzY3RwX3NoYXJlZGtleV90ICpza2V5OworCisJ
aWYgKHN0Y2IgPT0gTlVMTCkKKwkJcmV0dXJuICgtMSk7CisKKwkvKiBpcyB0aGUga2V5aWQgdGhl
IGFzc29jIGFjdGl2ZSBzZW5kaW5nIGtleSAqLworCWlmIChrZXlpZCA9PSBzdGNiLT5hc29jLmF1
dGhpbmZvLmFjdGl2ZV9rZXlpZCkKKwkJcmV0dXJuICgtMSk7CisKKwkvKiBkb2VzIHRoZSBrZXkg
ZXhpc3Q/ICovCisJc2tleSA9IHNjdHBfZmluZF9zaGFyZWRrZXkoJnN0Y2ItPmFzb2Muc2hhcmVk
X2tleXMsIGtleWlkKTsKKwlpZiAoc2tleSA9PSBOVUxMKQorCQlyZXR1cm4gKC0xKTsKKworCS8q
IGFyZSB0aGVyZSBvdGhlciByZWZjb3VudCBob2xkZXJzIG9uIHRoZSBrZXk/ICovCisJaWYgKHNr
ZXktPnJlZmNvdW50ID09IDEpIHsKKwkJLyogbm8gb3RoZXIgdXNlcnMsIHNlbmQgYSBub3RpZmlj
YXRpb24gZm9yIHRoaXMga2V5ICovCisJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9BVVRI
X0ZSRUVfS0VZLCBzdGNiLCBrZXlpZCwgMCwKKwkJCQlTQ1RQX1NPX0xPQ0tFRCk7CisJfQorCisJ
LyogbWFyayB0aGUga2V5IGFzIGRlYWN0aXZhdGVkICovCisJc2tleS0+ZGVhY3RpdmF0ZWQgPSAx
OworCisJcmV0dXJuICgwKTsKK30KKworLyotCisgKiBkZWFjdGl2YXRlcyBhIHNoYXJlZCBrZXkg
ZnJvbSB0aGUgZW5kcG9pbnQKKyAqIEFTU1VNRVMgSU5QX1dMT0NLIGlzIGFscmVhZHkgaGVsZAor
ICovCitpbnQKK3NjdHBfZGVhY3Rfc2hhcmVka2V5X2VwKHN0cnVjdCBzY3RwX2lucGNiICppbnAs
IHVpbnQxNl90IGtleWlkKQoreworCXNjdHBfc2hhcmVka2V5X3QgKnNrZXk7CisKKwlpZiAoaW5w
ID09IE5VTEwpCisJCXJldHVybiAoLTEpOworCisJLyogaXMgdGhlIGtleWlkIHRoZSBhY3RpdmUg
c2VuZGluZyBrZXkgb24gdGhlIGVuZHBvaW50ICovCisJaWYgKGtleWlkID09IGlucC0+c2N0cF9l
cC5kZWZhdWx0X2tleWlkKQorCQlyZXR1cm4gKC0xKTsKKworCS8qIGRvZXMgdGhlIGtleSBleGlz
dD8gKi8KKwlza2V5ID0gc2N0cF9maW5kX3NoYXJlZGtleSgmaW5wLT5zY3RwX2VwLnNoYXJlZF9r
ZXlzLCBrZXlpZCk7CisJaWYgKHNrZXkgPT0gTlVMTCkKKwkJcmV0dXJuICgtMSk7CisKKwkvKiBl
bmRwb2ludCBrZXlzIGFyZSBub3QgcmVmY291bnRlZCAqLworCisJLyogcmVtb3ZlIGl0ICovCisJ
TElTVF9SRU1PVkUoc2tleSwgbmV4dCk7CisJc2N0cF9mcmVlX3NoYXJlZGtleShza2V5KTsJLyog
ZnJlZXMgc2tleS0+a2V5IGFzIHdlbGwgKi8KKworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBn
ZXQgbG9jYWwgYXV0aGVudGljYXRpb24gcGFyYW1ldGVycyBmcm9tIGNvb2tpZSAoZnJvbSBJTklU
LUFDSykKKyAqLwordm9pZAorc2N0cF9hdXRoX2dldF9jb29raWVfcGFyYW1zKHN0cnVjdCBzY3Rw
X3RjYiAqc3RjYiwgc3RydWN0IG1idWYgKm0sCisgICAgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJf
dCBsZW5ndGgpCit7CisJc3RydWN0IHNjdHBfcGFyYW1oZHIgKnBoZHIsIHRtcF9wYXJhbTsKKwl1
aW50MTZfdCBwbGVuLCBwdHlwZTsKKwl1aW50OF90IHJhbmRvbV9zdG9yZVtTQ1RQX1BBUkFNX0JV
RkZFUl9TSVpFXTsKKwlzdHJ1Y3Qgc2N0cF9hdXRoX3JhbmRvbSAqcF9yYW5kb20gPSBOVUxMOwor
CXVpbnQxNl90IHJhbmRvbV9sZW4gPSAwOworCXVpbnQ4X3QgaG1hY3Nfc3RvcmVbU0NUUF9QQVJB
TV9CVUZGRVJfU0laRV07CisJc3RydWN0IHNjdHBfYXV0aF9obWFjX2FsZ28gKmhtYWNzID0gTlVM
TDsKKwl1aW50MTZfdCBobWFjc19sZW4gPSAwOworCXVpbnQ4X3QgY2h1bmtzX3N0b3JlW1NDVFBf
UEFSQU1fQlVGRkVSX1NJWkVdOworCXN0cnVjdCBzY3RwX2F1dGhfY2h1bmtfbGlzdCAqY2h1bmtz
ID0gTlVMTDsKKwl1aW50MTZfdCBudW1fY2h1bmtzID0gMDsKKwlzY3RwX2tleV90ICpuZXdfa2V5
OworCXVpbnQzMl90IGtleWxlbjsKKworCS8qIGNvbnZlcnQgdG8gdXBwZXIgYm91bmQgKi8KKwls
ZW5ndGggKz0gb2Zmc2V0OworCisJcGhkciA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKXNjdHBf
bV9nZXRwdHIobSwgb2Zmc2V0LAorCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpLCAo
dWludDhfdCAqKSZ0bXBfcGFyYW0pOworCXdoaWxlIChwaGRyICE9IE5VTEwpIHsKKwkJcHR5cGUg
PSBudG9ocyhwaGRyLT5wYXJhbV90eXBlKTsKKwkJcGxlbiA9IG50b2hzKHBoZHItPnBhcmFtX2xl
bmd0aCk7CisKKwkJaWYgKChwbGVuIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSkgfHwK
KwkJICAgIChvZmZzZXQgKyBwbGVuID4gbGVuZ3RoKSkKKwkJCWJyZWFrOworCisJCWlmIChwdHlw
ZSA9PSBTQ1RQX1JBTkRPTSkgeworCQkJaWYgKHBsZW4gPiBzaXplb2YocmFuZG9tX3N0b3JlKSkK
KwkJCQlicmVhazsKKwkJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwKKwkJ
CSAgICAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKilyYW5kb21fc3RvcmUsIHBsZW4pOworCQkJaWYg
KHBoZHIgPT0gTlVMTCkKKwkJCQlyZXR1cm47CisJCQkvKiBzYXZlIHRoZSByYW5kb20gYW5kIGxl
bmd0aCBmb3IgdGhlIGtleSAqLworCQkJcF9yYW5kb20gPSAoc3RydWN0IHNjdHBfYXV0aF9yYW5k
b20gKilwaGRyOworCQkJcmFuZG9tX2xlbiA9IHBsZW4gLSBzaXplb2YoKnBfcmFuZG9tKTsKKwkJ
fSBlbHNlIGlmIChwdHlwZSA9PSBTQ1RQX0hNQUNfTElTVCkgeworCQkJdWludDE2X3QgbnVtX2ht
YWNzOworCQkJdWludDE2X3QgaTsKKworCQkJaWYgKHBsZW4gPiBzaXplb2YoaG1hY3Nfc3RvcmUp
KQorCQkJCWJyZWFrOworCQkJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obSwgb2Zmc2V0LAor
CQkJICAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKWhtYWNzX3N0b3JlLCBwbGVuKTsKKwkJCWlm
IChwaGRyID09IE5VTEwpCisJCQkJcmV0dXJuOworCQkJLyogc2F2ZSB0aGUgaG1hY3MgbGlzdCBh
bmQgbnVtIGZvciB0aGUga2V5ICovCisJCQlobWFjcyA9IChzdHJ1Y3Qgc2N0cF9hdXRoX2htYWNf
YWxnbyAqKXBoZHI7CisJCQlobWFjc19sZW4gPSBwbGVuIC0gc2l6ZW9mKCpobWFjcyk7CisJCQlu
dW1faG1hY3MgPSBobWFjc19sZW4gLyBzaXplb2YoaG1hY3MtPmhtYWNfaWRzWzBdKTsKKwkJCWlm
IChzdGNiLT5hc29jLmxvY2FsX2htYWNzICE9IE5VTEwpCisJCQkJc2N0cF9mcmVlX2htYWNsaXN0
KHN0Y2ItPmFzb2MubG9jYWxfaG1hY3MpOworCQkJc3RjYi0+YXNvYy5sb2NhbF9obWFjcyA9IHNj
dHBfYWxsb2NfaG1hY2xpc3QobnVtX2htYWNzKTsKKwkJCWlmIChzdGNiLT5hc29jLmxvY2FsX2ht
YWNzICE9IE5VTEwpIHsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2htYWNzOyBpKyspIHsKKwkJ
CQkJKHZvaWQpc2N0cF9hdXRoX2FkZF9obWFjaWQoc3RjYi0+YXNvYy5sb2NhbF9obWFjcywKKwkJ
CQkJICAgIG50b2hzKGhtYWNzLT5obWFjX2lkc1tpXSkpOworCQkJCX0KKwkJCX0KKwkJfSBlbHNl
IGlmIChwdHlwZSA9PSBTQ1RQX0NIVU5LX0xJU1QpIHsKKwkJCWludCBpOworCisJCQlpZiAocGxl
biA+IHNpemVvZihjaHVua3Nfc3RvcmUpKQorCQkJCWJyZWFrOworCQkJcGhkciA9IHNjdHBfZ2V0
X25leHRfcGFyYW0obSwgb2Zmc2V0LAorCQkJICAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKWNo
dW5rc19zdG9yZSwgcGxlbik7CisJCQlpZiAocGhkciA9PSBOVUxMKQorCQkJCXJldHVybjsKKwkJ
CWNodW5rcyA9IChzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rX2xpc3QgKilwaGRyOworCQkJbnVtX2No
dW5rcyA9IHBsZW4gLSBzaXplb2YoKmNodW5rcyk7CisJCQkvKiBzYXZlIGNodW5rcyBsaXN0IGFu
ZCBudW0gZm9yIHRoZSBrZXkgKi8KKwkJCWlmIChzdGNiLT5hc29jLmxvY2FsX2F1dGhfY2h1bmtz
ICE9IE5VTEwpCisJCQkJc2N0cF9jbGVhcl9jaHVua2xpc3Qoc3RjYi0+YXNvYy5sb2NhbF9hdXRo
X2NodW5rcyk7CisJCQllbHNlCisJCQkJc3RjYi0+YXNvYy5sb2NhbF9hdXRoX2NodW5rcyA9IHNj
dHBfYWxsb2NfY2h1bmtsaXN0KCk7CisJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2NodW5rczsgaSsr
KSB7CisJCQkJKHZvaWQpc2N0cF9hdXRoX2FkZF9jaHVuayhjaHVua3MtPmNodW5rX3R5cGVzW2ld
LAorCQkJCSAgICBzdGNiLT5hc29jLmxvY2FsX2F1dGhfY2h1bmtzKTsKKwkJCX0KKwkJfQorCQkv
KiBnZXQgbmV4dCBwYXJhbWV0ZXIgKi8KKwkJb2Zmc2V0ICs9IFNDVFBfU0laRTMyKHBsZW4pOwor
CQlpZiAob2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSA+IGxlbmd0aCkKKwkJ
CWJyZWFrOworCQlwaGRyID0gKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopc2N0cF9tX2dldHB0ciht
LCBvZmZzZXQsIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkciksCisJCSAgICAodWludDhfdCAq
KSZ0bXBfcGFyYW0pOworCX0KKwkvKiBjb25jYXRlbmF0ZSB0aGUgZnVsbCByYW5kb20ga2V5ICov
CisJa2V5bGVuID0gc2l6ZW9mKCpwX3JhbmRvbSkgKyByYW5kb21fbGVuICsgc2l6ZW9mKCpobWFj
cykgKyBobWFjc19sZW47CisJaWYgKGNodW5rcyAhPSBOVUxMKSB7CisJCWtleWxlbiArPSBzaXpl
b2YoKmNodW5rcykgKyBudW1fY2h1bmtzOworCX0KKwluZXdfa2V5ID0gc2N0cF9hbGxvY19rZXko
a2V5bGVuKTsKKwlpZiAobmV3X2tleSAhPSBOVUxMKSB7CisJCS8qIGNvcHkgaW4gdGhlIFJBTkRP
TSAqLworCQlpZiAocF9yYW5kb20gIT0gTlVMTCkgeworCQkJa2V5bGVuID0gc2l6ZW9mKCpwX3Jh
bmRvbSkgKyByYW5kb21fbGVuOworCQkJbWVtY3B5KG5ld19rZXktPmtleSwgcF9yYW5kb20sIGtl
eWxlbik7CisJCX0gZWxzZSB7CisJCQlrZXlsZW4gPSAwOworCQl9CisJCS8qIGFwcGVuZCBpbiB0
aGUgQVVUSCBjaHVua3MgKi8KKwkJaWYgKGNodW5rcyAhPSBOVUxMKSB7CisJCQltZW1jcHkobmV3
X2tleS0+a2V5ICsga2V5bGVuLCBjaHVua3MsCisJCQkgICAgICAgc2l6ZW9mKCpjaHVua3MpICsg
bnVtX2NodW5rcyk7CisJCQlrZXlsZW4gKz0gc2l6ZW9mKCpjaHVua3MpICsgbnVtX2NodW5rczsK
KwkJfQorCQkvKiBhcHBlbmQgaW4gdGhlIEhNQUNzICovCisJCWlmIChobWFjcyAhPSBOVUxMKSB7
CisJCQltZW1jcHkobmV3X2tleS0+a2V5ICsga2V5bGVuLCBobWFjcywKKwkJCSAgICAgICBzaXpl
b2YoKmhtYWNzKSArIGhtYWNzX2xlbik7CisJCX0KKwl9CisJaWYgKHN0Y2ItPmFzb2MuYXV0aGlu
Zm8ucmFuZG9tICE9IE5VTEwpCisJCXNjdHBfZnJlZV9rZXkoc3RjYi0+YXNvYy5hdXRoaW5mby5y
YW5kb20pOworCXN0Y2ItPmFzb2MuYXV0aGluZm8ucmFuZG9tID0gbmV3X2tleTsKKwlzdGNiLT5h
c29jLmF1dGhpbmZvLnJhbmRvbV9sZW4gPSByYW5kb21fbGVuOworCXNjdHBfY2xlYXJfY2FjaGVk
a2V5cyhzdGNiLCBzdGNiLT5hc29jLmF1dGhpbmZvLmFzc29jX2tleWlkKTsKKwlzY3RwX2NsZWFy
X2NhY2hlZGtleXMoc3RjYiwgc3RjYi0+YXNvYy5hdXRoaW5mby5yZWN2X2tleWlkKTsKKworCS8q
IG5lZ290aWF0ZSB3aGF0IEhNQUMgdG8gdXNlIGZvciB0aGUgcGVlciAqLworCXN0Y2ItPmFzb2Mu
cGVlcl9obWFjX2lkID0gc2N0cF9uZWdvdGlhdGVfaG1hY2lkKHN0Y2ItPmFzb2MucGVlcl9obWFj
cywKKwkgICAgc3RjYi0+YXNvYy5sb2NhbF9obWFjcyk7CisKKwkvKiBjb3B5IGRlZmF1bHRzIGZy
b20gdGhlIGVuZHBvaW50ICovCisJLyogRklYIE1FOiBwdXQgaW4gY29va2llPyAqLworCXN0Y2It
PmFzb2MuYXV0aGluZm8uYWN0aXZlX2tleWlkID0gc3RjYi0+c2N0cF9lcC0+c2N0cF9lcC5kZWZh
dWx0X2tleWlkOworCS8qIGNvcHkgb3V0IHRoZSBzaGFyZWQga2V5IGxpc3QgKGJ5IHJlZmVyZW5j
ZSkgZnJvbSB0aGUgZW5kcG9pbnQgKi8KKwkodm9pZClzY3RwX2NvcHlfc2tleWxpc3QoJnN0Y2It
PnNjdHBfZXAtPnNjdHBfZXAuc2hhcmVkX2tleXMsCisJCQkJICZzdGNiLT5hc29jLnNoYXJlZF9r
ZXlzKTsKK30KKworLyoKKyAqIGNvbXB1dGUgYW5kIGZpbGwgaW4gdGhlIEhNQUMgZGlnZXN0IGZv
ciBhIHBhY2tldAorICovCit2b2lkCitzY3RwX2ZpbGxfaG1hY19kaWdlc3RfbShzdHJ1Y3QgbWJ1
ZiAqbSwgdWludDMyX3QgYXV0aF9vZmZzZXQsCisgICAgc3RydWN0IHNjdHBfYXV0aF9jaHVuayAq
YXV0aCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MTZfdCBrZXlpZCkKK3sKKwl1aW50MzJf
dCBkaWdlc3RsZW47CisJc2N0cF9zaGFyZWRrZXlfdCAqc2tleTsKKwlzY3RwX2tleV90ICprZXk7
CisKKwlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKGF1dGggPT0gTlVMTCkpCisJCXJldHVybjsKKwor
CS8qIHplcm8gdGhlIGRpZ2VzdCArIGNodW5rIHBhZGRpbmcgKi8KKwlkaWdlc3RsZW4gPSBzY3Rw
X2dldF9obWFjX2RpZ2VzdF9sZW4oc3RjYi0+YXNvYy5wZWVyX2htYWNfaWQpOworCW1lbXNldChh
dXRoLT5obWFjLCAwLCBTQ1RQX1NJWkUzMihkaWdlc3RsZW4pKTsKKworCS8qIGlzIHRoZSBkZXNp
cmVkIGtleSBjYWNoZWQ/ICovCisJaWYgKChrZXlpZCAhPSBzdGNiLT5hc29jLmF1dGhpbmZvLmFz
c29jX2tleWlkKSB8fAorCSAgICAoc3RjYi0+YXNvYy5hdXRoaW5mby5hc3NvY19rZXkgPT0gTlVM
TCkpIHsKKwkJaWYgKHN0Y2ItPmFzb2MuYXV0aGluZm8uYXNzb2Nfa2V5ICE9IE5VTEwpIHsKKwkJ
CS8qIGZyZWUgdGhlIG9sZCBjYWNoZWQga2V5ICovCisJCQlzY3RwX2ZyZWVfa2V5KHN0Y2ItPmFz
b2MuYXV0aGluZm8uYXNzb2Nfa2V5KTsKKwkJfQorCQlza2V5ID0gc2N0cF9maW5kX3NoYXJlZGtl
eSgmc3RjYi0+YXNvYy5zaGFyZWRfa2V5cywga2V5aWQpOworCQkvKiB0aGUgb25seSB3YXkgc2tl
eSBpcyBOVUxMIGlzIGlmIG51bGwga2V5IGlkIDAgaXMgdXNlZCAqLworCQlpZiAoc2tleSAhPSBO
VUxMKQorCQkJa2V5ID0gc2tleS0+a2V5OworCQllbHNlCisJCQlrZXkgPSBOVUxMOworCQkvKiBj
b21wdXRlIGEgbmV3IGFzc29jIGtleSBhbmQgY2FjaGUgaXQgKi8KKwkJc3RjYi0+YXNvYy5hdXRo
aW5mby5hc3NvY19rZXkgPQorCQkgICAgc2N0cF9jb21wdXRlX2hhc2hrZXkoc3RjYi0+YXNvYy5h
dXRoaW5mby5yYW5kb20sCisJCQkJCSBzdGNiLT5hc29jLmF1dGhpbmZvLnBlZXJfcmFuZG9tLCBr
ZXkpOworCQlzdGNiLT5hc29jLmF1dGhpbmZvLmFzc29jX2tleWlkID0ga2V5aWQ7CisJCVNDVFBE
QkcoU0NUUF9ERUJVR19BVVRIMSwgImNhY2hpbmcga2V5IGlkICV1XG4iLAorCQkJc3RjYi0+YXNv
Yy5hdXRoaW5mby5hc3NvY19rZXlpZCk7CisjaWZkZWYgU0NUUF9ERUJVRworCQlpZiAoU0NUUF9B
VVRIX0RFQlVHKQorCQkJc2N0cF9wcmludF9rZXkoc3RjYi0+YXNvYy5hdXRoaW5mby5hc3NvY19r
ZXksCisJCQkJICAgICAgICJBc3NvYyBLZXkiKTsKKyNlbmRpZgorCX0KKworCS8qIHNldCBpbiB0
aGUgYWN0aXZlIGtleSBpZCAqLworCWF1dGgtPnNoYXJlZF9rZXlfaWQgPSBodG9ucyhrZXlpZCk7
CisKKwkvKiBjb21wdXRlIGFuZCBmaWxsIGluIHRoZSBkaWdlc3QgKi8KKwkodm9pZClzY3RwX2Nv
bXB1dGVfaG1hY19tKHN0Y2ItPmFzb2MucGVlcl9obWFjX2lkLCBzdGNiLT5hc29jLmF1dGhpbmZv
LmFzc29jX2tleSwKKwkJCQkgIG0sIGF1dGhfb2Zmc2V0LCBhdXRoLT5obWFjKTsKK30KKworc3Rh
dGljIHZvaWQKK3NjdHBfemVyb19tKHN0cnVjdCBtYnVmICptLCB1aW50MzJfdCBtX29mZnNldCwg
dWludDMyX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbV90bXA7CisJdWludDhfdCAqZGF0YTsK
KworCS8qIHNhbml0eSBjaGVjayAqLworCWlmIChtID09IE5VTEwpCisJCXJldHVybjsKKworCS8q
IGZpbmQgdGhlIGNvcnJlY3Qgc3RhcnRpbmcgbWJ1ZiBhbmQgb2Zmc2V0IChnZXQgc3RhcnQgcG9z
aXRpb24pICovCisJbV90bXAgPSBtOworCXdoaWxlICgobV90bXAgIT0gTlVMTCkgJiYgKG1fb2Zm
c2V0ID49ICh1aW50MzJfdCkgU0NUUF9CVUZfTEVOKG1fdG1wKSkpIHsKKwkJbV9vZmZzZXQgLT0g
U0NUUF9CVUZfTEVOKG1fdG1wKTsKKwkJbV90bXAgPSBTQ1RQX0JVRl9ORVhUKG1fdG1wKTsKKwl9
CisJLyogbm93IHVzZSB0aGUgcmVzdCBvZiB0aGUgbWJ1ZiBjaGFpbiAqLworCXdoaWxlICgobV90
bXAgIT0gTlVMTCkgJiYgKHNpemUgPiAwKSkgeworCQlkYXRhID0gbXRvZChtX3RtcCwgdWludDhf
dCAqKSArIG1fb2Zmc2V0OworCQlpZiAoc2l6ZSA+ICh1aW50MzJfdCkoU0NUUF9CVUZfTEVOKG1f
dG1wKSAtIG1fb2Zmc2V0KSkgeworCQkJbWVtc2V0KGRhdGEsIDAsIFNDVFBfQlVGX0xFTihtX3Rt
cCkgLSBtX29mZnNldCk7CisJCQlzaXplIC09IFNDVFBfQlVGX0xFTihtX3RtcCkgLSBtX29mZnNl
dDsKKwkJfSBlbHNlIHsKKwkJCW1lbXNldChkYXRhLCAwLCBzaXplKTsKKwkJCXNpemUgPSAwOwor
CQl9CisJCS8qIGNsZWFyIHRoZSBvZmZzZXQgc2luY2UgaXQncyBvbmx5IGZvciB0aGUgZmlyc3Qg
bWJ1ZiAqLworCQltX29mZnNldCA9IDA7CisJCW1fdG1wID0gU0NUUF9CVUZfTkVYVChtX3RtcCk7
CisJfQorfQorCisvKi0KKyAqIHByb2Nlc3MgdGhlIGluY29taW5nIEF1dGhlbnRpY2F0aW9uIGNo
dW5rCisgKiByZXR1cm4gY29kZXM6CisgKiAgIC0xIG9uIGFueSBhdXRoZW50aWNhdGlvbiBlcnJv
cgorICogICAgMCBvbiBhdXRoZW50aWNhdGlvbiB2ZXJpZmljYXRpb24KKyAqLworaW50CitzY3Rw
X2hhbmRsZV9hdXRoKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXV0aF9jaHVu
ayAqYXV0aCwKKyAgICBzdHJ1Y3QgbWJ1ZiAqbSwgdWludDMyX3Qgb2Zmc2V0KQoreworCXVpbnQx
Nl90IGNodW5rbGVuOworCXVpbnQxNl90IHNoYXJlZF9rZXlfaWQ7CisJdWludDE2X3QgaG1hY19p
ZDsKKwlzY3RwX3NoYXJlZGtleV90ICpza2V5OworCXVpbnQzMl90IGRpZ2VzdGxlbjsKKwl1aW50
OF90IGRpZ2VzdFtTQ1RQX0FVVEhfRElHRVNUX0xFTl9NQVhdOworCXVpbnQ4X3QgY29tcHV0ZWRf
ZGlnZXN0W1NDVFBfQVVUSF9ESUdFU1RfTEVOX01BWF07CisKKwkvKiBhdXRoIGlzIGNoZWNrZWQg
Zm9yIE5VTEwgYnkgY2FsbGVyICovCisJY2h1bmtsZW4gPSBudG9ocyhhdXRoLT5jaC5jaHVua19s
ZW5ndGgpOworCWlmIChjaHVua2xlbiA8IHNpemVvZigqYXV0aCkpIHsKKwkJU0NUUF9TVEFUX0lO
Q1Ioc2N0cHNfcmVjdmF1dGhmYWlsZWQpOworCQlyZXR1cm4gKC0xKTsKKwl9CisJU0NUUF9TVEFU
X0lOQ1Ioc2N0cHNfcmVjdmF1dGgpOworCisJLyogZ2V0IHRoZSBhdXRoIHBhcmFtcyAqLworCXNo
YXJlZF9rZXlfaWQgPSBudG9ocyhhdXRoLT5zaGFyZWRfa2V5X2lkKTsKKwlobWFjX2lkID0gbnRv
aHMoYXV0aC0+aG1hY19pZCk7CisJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgxLAorCQkiU0NUUCBB
VVRIIENodW5rOiBzaGFyZWQga2V5ICV1LCBITUFDIGlkICV1XG4iLAorCQlzaGFyZWRfa2V5X2lk
LCBobWFjX2lkKTsKKworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykgJiYgZGVmaW5lZChGVVpa
SU5HX0JVSUxEX01PREVfVU5TQUZFX0ZPUl9QUk9EVUNUSU9OKQorCXJldHVybiAoMCk7CisjZW5k
aWYKKwkvKiBpcyB0aGUgaW5kaWNhdGVkIEhNQUMgc3VwcG9ydGVkPyAqLworCWlmICghc2N0cF9h
dXRoX2lzX3N1cHBvcnRlZF9obWFjKHN0Y2ItPmFzb2MubG9jYWxfaG1hY3MsIGhtYWNfaWQpKSB7
CisJCXN0cnVjdCBtYnVmICpvcF9lcnI7CisJCXN0cnVjdCBzY3RwX2Vycm9yX2F1dGhfaW52YWxp
ZF9obWFjICpjYXVzZTsKKworCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2aXZhbGhtYWNpZCk7
CisJCVNDVFBEQkcoU0NUUF9ERUJVR19BVVRIMSwKKwkJCSJTQ1RQIEF1dGg6IHVuc3VwcG9ydGVk
IEhNQUMgaWQgJXVcbiIsCisJCQlobWFjX2lkKTsKKwkJLyoKKwkJICogcmVwb3J0IHRoaXMgaW4g
YW4gRXJyb3IgQ2h1bms6IFVuc3VwcG9ydGVkIEhNQUMKKwkJICogSWRlbnRpZmllcgorCQkgKi8K
KwkJb3BfZXJyID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJv
cl9hdXRoX2ludmFsaWRfaG1hYyksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LCBNX05PV0FJVCwgMSwgTVRfSEVBREVSKTsKKwkJaWYgKG9wX2VyciAhPSBOVUxMKSB7CisJCQkv
KiBwcmUtcmVzZXJ2ZSBzb21lIHNwYWNlICovCisJCQlTQ1RQX0JVRl9SRVNWX1VGKG9wX2Vyciwg
c2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSk7CisJCQkvKiBmaWxsIGluIHRoZSBlcnJvciAq
LworCQkJY2F1c2UgPSBtdG9kKG9wX2Vyciwgc3RydWN0IHNjdHBfZXJyb3JfYXV0aF9pbnZhbGlk
X2htYWMgKik7CisJCQljYXVzZS0+Y2F1c2UuY29kZSA9IGh0b25zKFNDVFBfQ0FVU0VfVU5TVVBQ
T1JURURfSE1BQ0lEKTsKKwkJCWNhdXNlLT5jYXVzZS5sZW5ndGggPSBodG9ucyhzaXplb2Yoc3Ry
dWN0IHNjdHBfZXJyb3JfYXV0aF9pbnZhbGlkX2htYWMpKTsKKwkJCWNhdXNlLT5obWFjX2lkID0g
bnRvaHMoaG1hY19pZCk7CisJCQlTQ1RQX0JVRl9MRU4ob3BfZXJyKSA9IHNpemVvZihzdHJ1Y3Qg
c2N0cF9lcnJvcl9hdXRoX2ludmFsaWRfaG1hYyk7CisJCQkvKiBxdWV1ZSBpdCAqLworCQkJc2N0
cF9xdWV1ZV9vcF9lcnIoc3RjYiwgb3BfZXJyKTsKKwkJfQorCQlyZXR1cm4gKC0xKTsKKwl9CisJ
LyogZ2V0IHRoZSBpbmRpY2F0ZWQgc2hhcmVkIGtleSwgaWYgYXZhaWxhYmxlICovCisJaWYgKChz
dGNiLT5hc29jLmF1dGhpbmZvLnJlY3Zfa2V5ID09IE5VTEwpIHx8CisJICAgIChzdGNiLT5hc29j
LmF1dGhpbmZvLnJlY3Zfa2V5aWQgIT0gc2hhcmVkX2tleV9pZCkpIHsKKwkJLyogZmluZCB0aGUg
c2hhcmVkIGtleSBvbiB0aGUgYXNzb2MgZmlyc3QgKi8KKwkJc2tleSA9IHNjdHBfZmluZF9zaGFy
ZWRrZXkoJnN0Y2ItPmFzb2Muc2hhcmVkX2tleXMsCisJCQkJCSAgIHNoYXJlZF9rZXlfaWQpOwor
CQkvKiBpZiB0aGUgc2hhcmVkIGtleSBpc24ndCBmb3VuZCwgZGlzY2FyZCB0aGUgY2h1bmsgKi8K
KwkJaWYgKHNrZXkgPT0gTlVMTCkgeworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdml2YWxr
ZXlpZCk7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVVUSDEsCisJCQkJIlNDVFAgQXV0aDogdW5r
bm93biBrZXkgaWQgJXVcbiIsCisJCQkJc2hhcmVkX2tleV9pZCk7CisJCQlyZXR1cm4gKC0xKTsK
KwkJfQorCQkvKiBnZW5lcmF0ZSBhIG5vdGlmaWNhdGlvbiBpZiB0aGlzIGlzIGEgbmV3IGtleSBp
ZCAqLworCQlpZiAoc3RjYi0+YXNvYy5hdXRoaW5mby5yZWN2X2tleWlkICE9IHNoYXJlZF9rZXlf
aWQpCisJCQkvKgorCQkJICogc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0FVVEhfTkVXX0tF
WSwgc3RjYiwKKwkJCSAqIHNoYXJlZF9rZXlfaWQsICh2b2lkCisJCQkgKiAqKXN0Y2ItPmFzb2Mu
YXV0aGluZm8ucmVjdl9rZXlpZCk7CisJCQkgKi8KKwkJCXNjdHBfbm90aWZ5X2F1dGhlbnRpY2F0
aW9uKHN0Y2IsIFNDVFBfQVVUSF9ORVdfS0VZLAorCQkJICAgIHNoYXJlZF9rZXlfaWQsIHN0Y2It
PmFzb2MuYXV0aGluZm8ucmVjdl9rZXlpZCwKKwkJCSAgICBTQ1RQX1NPX05PVF9MT0NLRUQpOwor
CQkvKiBjb21wdXRlIGEgbmV3IHJlY3YgYXNzb2Mga2V5IGFuZCBjYWNoZSBpdCAqLworCQlpZiAo
c3RjYi0+YXNvYy5hdXRoaW5mby5yZWN2X2tleSAhPSBOVUxMKQorCQkJc2N0cF9mcmVlX2tleShz
dGNiLT5hc29jLmF1dGhpbmZvLnJlY3Zfa2V5KTsKKwkJc3RjYi0+YXNvYy5hdXRoaW5mby5yZWN2
X2tleSA9CisJCSAgICBzY3RwX2NvbXB1dGVfaGFzaGtleShzdGNiLT5hc29jLmF1dGhpbmZvLnJh
bmRvbSwKKwkJICAgIHN0Y2ItPmFzb2MuYXV0aGluZm8ucGVlcl9yYW5kb20sIHNrZXktPmtleSk7
CisJCXN0Y2ItPmFzb2MuYXV0aGluZm8ucmVjdl9rZXlpZCA9IHNoYXJlZF9rZXlfaWQ7CisjaWZk
ZWYgU0NUUF9ERUJVRworCQlpZiAoU0NUUF9BVVRIX0RFQlVHKQorCQkJc2N0cF9wcmludF9rZXko
c3RjYi0+YXNvYy5hdXRoaW5mby5yZWN2X2tleSwgIlJlY3YgS2V5Iik7CisjZW5kaWYKKwl9CisJ
LyogdmFsaWRhdGUgdGhlIGRpZ2VzdCBsZW5ndGggKi8KKwlkaWdlc3RsZW4gPSBzY3RwX2dldF9o
bWFjX2RpZ2VzdF9sZW4oaG1hY19pZCk7CisJaWYgKGNodW5rbGVuIDwgKHNpemVvZigqYXV0aCkg
KyBkaWdlc3RsZW4pKSB7CisJCS8qIGludmFsaWQgZGlnZXN0IGxlbmd0aCAqLworCQlTQ1RQX1NU
QVRfSU5DUihzY3Rwc19yZWN2YXV0aGZhaWxlZCk7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19BVVRI
MSwKKwkJCSJTQ1RQIEF1dGg6IGNodW5rIHRvbyBzaG9ydCBmb3IgSE1BQ1xuIik7CisJCXJldHVy
biAoLTEpOworCX0KKwkvKiBzYXZlIGEgY29weSBvZiB0aGUgZGlnZXN0LCB6ZXJvIHRoZSBwc2V1
ZG8gaGVhZGVyLCBhbmQgdmFsaWRhdGUgKi8KKwltZW1jcHkoZGlnZXN0LCBhdXRoLT5obWFjLCBk
aWdlc3RsZW4pOworCXNjdHBfemVyb19tKG0sIG9mZnNldCArIHNpemVvZigqYXV0aCksIFNDVFBf
U0laRTMyKGRpZ2VzdGxlbikpOworCSh2b2lkKXNjdHBfY29tcHV0ZV9obWFjX20oaG1hY19pZCwg
c3RjYi0+YXNvYy5hdXRoaW5mby5yZWN2X2tleSwKKwkgICAgbSwgb2Zmc2V0LCBjb21wdXRlZF9k
aWdlc3QpOworCisJLyogY29tcGFyZSB0aGUgY29tcHV0ZWQgZGlnZXN0IHdpdGggdGhlIG9uZSBp
biB0aGUgQVVUSCBjaHVuayAqLworCWlmICh0aW1pbmdzYWZlX2JjbXAoZGlnZXN0LCBjb21wdXRl
ZF9kaWdlc3QsIGRpZ2VzdGxlbikgIT0gMCkgeworCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2
YXV0aGZhaWxlZCk7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19BVVRIMSwKKwkJCSJTQ1RQIEF1dGg6
IEhNQUMgZGlnZXN0IGNoZWNrIGZhaWxlZFxuIik7CisJCXJldHVybiAoLTEpOworCX0KKwlyZXR1
cm4gKDApOworfQorCisvKgorICogR2VuZXJhdGUgTk9USUZJQ0FUSU9OCisgKi8KK3ZvaWQKK3Nj
dHBfbm90aWZ5X2F1dGhlbnRpY2F0aW9uKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDMyX3Qg
aW5kaWNhdGlvbiwKKwkJCSAgIHVpbnQxNl90IGtleWlkLCB1aW50MTZfdCBhbHRfa2V5aWQsIGlu
dCBzb19sb2NrZWQpCit7CisJc3RydWN0IG1idWYgKm1fbm90aWZ5OworCXN0cnVjdCBzY3RwX2F1
dGhrZXlfZXZlbnQgKmF1dGg7CisJc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2w7
CisKKwlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwKKwkgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB8fAorCSAgIChzdGNiLT5zY3RwX2VwLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpIHx8CisJICAgKHN0Y2It
PmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQpCisJCSkgeworCQkvKiBJZiB0
aGUgc29ja2V0IGlzIGdvbmUgd2UgYXJlIG91dCBvZiBoZXJlICovCisJCXJldHVybjsKKwl9CisK
KwlpZiAoc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb2ZmKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBf
UENCX0ZMQUdTX0FVVEhFVk5UKSkKKwkJLyogZXZlbnQgbm90IGVuYWJsZWQgKi8KKwkJcmV0dXJu
OworCisJbV9ub3RpZnkgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc2l6ZW9mKHN0cnVjdCBzY3Rw
X2F1dGhrZXlfZXZlbnQpLAorCQkJCQkgIDAsIE1fTk9XQUlULCAxLCBNVF9IRUFERVIpOworCWlm
IChtX25vdGlmeSA9PSBOVUxMKQorCQkvKiBubyBzcGFjZSBsZWZ0ICovCisJCXJldHVybjsKKwor
CVNDVFBfQlVGX0xFTihtX25vdGlmeSkgPSAwOworCWF1dGggPSBtdG9kKG1fbm90aWZ5LCBzdHJ1
Y3Qgc2N0cF9hdXRoa2V5X2V2ZW50ICopOworCW1lbXNldChhdXRoLCAwLCBzaXplb2Yoc3RydWN0
IHNjdHBfYXV0aGtleV9ldmVudCkpOworCWF1dGgtPmF1dGhfdHlwZSA9IFNDVFBfQVVUSEVOVElD
QVRJT05fRVZFTlQ7CisJYXV0aC0+YXV0aF9mbGFncyA9IDA7CisJYXV0aC0+YXV0aF9sZW5ndGgg
PSBzaXplb2YoKmF1dGgpOworCWF1dGgtPmF1dGhfa2V5bnVtYmVyID0ga2V5aWQ7CisJYXV0aC0+
YXV0aF9hbHRrZXludW1iZXIgPSBhbHRfa2V5aWQ7CisJYXV0aC0+YXV0aF9pbmRpY2F0aW9uID0g
aW5kaWNhdGlvbjsKKwlhdXRoLT5hdXRoX2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNi
KTsKKworCVNDVFBfQlVGX0xFTihtX25vdGlmeSkgPSBzaXplb2YoKmF1dGgpOworCVNDVFBfQlVG
X05FWFQobV9ub3RpZnkpID0gTlVMTDsKKworCS8qIGFwcGVuZCB0byBzb2NrZXQgKi8KKwljb250
cm9sID0gc2N0cF9idWlsZF9yZWFkcV9lbnRyeShzdGNiLCBzdGNiLT5hc29jLnByaW1hcnlfZGVz
dGluYXRpb24sCisJICAgIDAsIDAsIHN0Y2ItPmFzb2MuY29udGV4dCwgMCwgMCwgMCwgbV9ub3Rp
ZnkpOworCWlmIChjb250cm9sID09IE5VTEwpIHsKKwkJLyogbm8gbWVtb3J5ICovCisJCXNjdHBf
bV9mcmVlbShtX25vdGlmeSk7CisJCXJldHVybjsKKwl9CisJY29udHJvbC0+bGVuZ3RoID0gU0NU
UF9CVUZfTEVOKG1fbm90aWZ5KTsKKwljb250cm9sLT5zcGVjX2ZsYWdzID0gTV9OT1RJRklDQVRJ
T047CisJLyogbm90IHRoYXQgd2UgbmVlZCB0aGlzICovCisJY29udHJvbC0+dGFpbF9tYnVmID0g
bV9ub3RpZnk7CisJc2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwgY29udHJv
bCwKKwkgICAgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIDEsIFNDVFBfUkVBRF9MT0NLX05P
VF9IRUxELCBzb19sb2NrZWQpOworfQorCisvKi0KKyAqIHZhbGlkYXRlcyB0aGUgQVVUSGVudGlj
YXRpb24gcmVsYXRlZCBwYXJhbWV0ZXJzIGluIGFuIElOSVQvSU5JVC1BQ0sKKyAqIE5vdGU6IGN1
cnJlbnRseSBvbmx5IHVzZWQgZm9yIElOSVQgYXMgSU5JVC1BQ0sgaXMgaGFuZGxlZCBpbmxpbmUK
KyAqIHdpdGggc2N0cF9sb2FkX2FkZHJlc3Nlc19mcm9tX2luaXQoKQorICovCitpbnQKK3NjdHBf
dmFsaWRhdGVfaW5pdF9hdXRoX3BhcmFtcyhzdHJ1Y3QgbWJ1ZiAqbSwgaW50IG9mZnNldCwgaW50
IGxpbWl0KQoreworCXN0cnVjdCBzY3RwX3BhcmFtaGRyICpwaGRyLCBwYXJhbV9idWY7CisJdWlu
dDE2X3QgcHR5cGUsIHBsZW47CisJaW50IHBlZXJfc3VwcG9ydHNfYXNjb25mID0gMDsKKwlpbnQg
cGVlcl9zdXBwb3J0c19hdXRoID0gMDsKKwlpbnQgZ290X3JhbmRvbSA9IDAsIGdvdF9obWFjcyA9
IDAsIGdvdF9jaGtsaXN0ID0gMDsKKwl1aW50OF90IHNhd19hc2NvbmYgPSAwOworCXVpbnQ4X3Qg
c2F3X2FzY29uZl9hY2sgPSAwOworCisJLyogZ28gdGhyb3VnaCBlYWNoIG9mIHRoZSBwYXJhbXMu
ICovCisJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obSwgb2Zmc2V0LCAmcGFyYW1fYnVmLCBz
aXplb2YocGFyYW1fYnVmKSk7CisJd2hpbGUgKHBoZHIpIHsKKwkJcHR5cGUgPSBudG9ocyhwaGRy
LT5wYXJhbV90eXBlKTsKKwkJcGxlbiA9IG50b2hzKHBoZHItPnBhcmFtX2xlbmd0aCk7CisKKwkJ
aWYgKG9mZnNldCArIHBsZW4gPiBsaW1pdCkgeworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHBsZW4g
PCBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSB7CisJCQlicmVhazsKKwkJfQorCQlpZiAo
cHR5cGUgPT0gU0NUUF9TVVBQT1JURURfQ0hVTktfRVhUKSB7CisJCQkvKiBBIHN1cHBvcnRlZCBl
eHRlbnNpb24gY2h1bmsgKi8KKwkJCXN0cnVjdCBzY3RwX3N1cHBvcnRlZF9jaHVua190eXBlc19w
YXJhbSAqcHJfc3VwcG9ydGVkOworCQkJdWludDhfdCBsb2NhbF9zdG9yZVtTQ1RQX1NNQUxMX0NI
VU5LX1NUT1JFXTsKKwkJCWludCBudW1fZW50LCBpOworCisJCQlpZiAocGxlbiA+IHNpemVvZihs
b2NhbF9zdG9yZSkpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXBoZHIgPSBzY3RwX2dldF9uZXh0
X3BhcmFtKG0sIG9mZnNldCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qg
c2N0cF9wYXJhbWhkciAqKSZsb2NhbF9zdG9yZSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBsZW4pOworCQkJaWYgKHBoZHIgPT0gTlVMTCkgeworCQkJCXJldHVybiAoLTEpOworCQkJ
fQorCQkJcHJfc3VwcG9ydGVkID0gKHN0cnVjdCBzY3RwX3N1cHBvcnRlZF9jaHVua190eXBlc19w
YXJhbSAqKXBoZHI7CisJCQludW1fZW50ID0gcGxlbiAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJh
bWhkcik7CisJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2VudDsgaSsrKSB7CisJCQkJc3dpdGNoIChw
cl9zdXBwb3J0ZWQtPmNodW5rX3R5cGVzW2ldKSB7CisJCQkJY2FzZSBTQ1RQX0FTQ09ORjoKKwkJ
CQljYXNlIFNDVFBfQVNDT05GX0FDSzoKKwkJCQkJcGVlcl9zdXBwb3J0c19hc2NvbmYgPSAxOwor
CQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQkvKiBvbmUgd2UgZG9uJ3QgY2FyZSBhYm91
dCAqLworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAocHR5cGUgPT0gU0NU
UF9SQU5ET00pIHsKKwkJCS8qIGVuZm9yY2UgdGhlIHJhbmRvbSBsZW5ndGggKi8KKwkJCWlmIChw
bGVuICE9IChzaXplb2Yoc3RydWN0IHNjdHBfYXV0aF9yYW5kb20pICsKKwkJCQkgICAgIFNDVFBf
QVVUSF9SQU5ET01fU0laRV9SRVFVSVJFRCkpIHsKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVVU
SDEsCisJCQkJCSJTQ1RQOiBpbnZhbGlkIFJBTkRPTSBsZW5cbiIpOworCQkJCXJldHVybiAoLTEp
OworCQkJfQorCQkJZ290X3JhbmRvbSA9IDE7CisJCX0gZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9I
TUFDX0xJU1QpIHsKKwkJCXN0cnVjdCBzY3RwX2F1dGhfaG1hY19hbGdvICpobWFjczsKKwkJCXVp
bnQ4X3Qgc3RvcmVbU0NUUF9QQVJBTV9CVUZGRVJfU0laRV07CisJCQlpbnQgbnVtX2htYWNzOwor
CisJCQlpZiAocGxlbiA+IHNpemVvZihzdG9yZSkpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXBo
ZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwKKwkJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKXN0b3JlLAorCQkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGxlbik7CisJCQlpZiAocGhkciA9PSBOVUxMKSB7CisJCQkJcmV0dXJu
ICgtMSk7CisJCQl9CisJCQlobWFjcyA9IChzdHJ1Y3Qgc2N0cF9hdXRoX2htYWNfYWxnbyAqKXBo
ZHI7CisJCQludW1faG1hY3MgPSAocGxlbiAtIHNpemVvZigqaG1hY3MpKSAvIHNpemVvZihobWFj
cy0+aG1hY19pZHNbMF0pOworCQkJLyogdmFsaWRhdGUgdGhlIGhtYWMgbGlzdCAqLworCQkJaWYg
KHNjdHBfdmVyaWZ5X2htYWNfcGFyYW0oaG1hY3MsIG51bV9obWFjcykpIHsKKwkJCQlTQ1RQREJH
KFNDVFBfREVCVUdfQVVUSDEsCisJCQkJCSJTQ1RQOiBpbnZhbGlkIEhNQUMgcGFyYW1cbiIpOwor
CQkJCXJldHVybiAoLTEpOworCQkJfQorCQkJZ290X2htYWNzID0gMTsKKwkJfSBlbHNlIGlmIChw
dHlwZSA9PSBTQ1RQX0NIVU5LX0xJU1QpIHsKKwkJCXN0cnVjdCBzY3RwX2F1dGhfY2h1bmtfbGlz
dCAqY2h1bmtzOworCQkJdWludDhfdCBjaHVua3Nfc3RvcmVbU0NUUF9TTUFMTF9DSFVOS19TVE9S
RV07CisJCQlpbnQgaSwgbnVtX2NodW5rczsKKworCQkJaWYgKHBsZW4gPiBzaXplb2YoY2h1bmtz
X3N0b3JlKSkgeworCQkJCWJyZWFrOworCQkJfQorCQkJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFy
YW0obSwgb2Zmc2V0LAorCQkJCQkJICAgKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopY2h1bmtzX3N0
b3JlLAorCQkJCQkJICAgcGxlbik7CisJCQlpZiAocGhkciA9PSBOVUxMKSB7CisJCQkJcmV0dXJu
ICgtMSk7CisJCQl9CisJCQkvKi0KKwkJCSAqIEZsaXAgdGhyb3VnaCB0aGUgbGlzdCBhbmQgbWFy
ayB0aGF0IHRoZQorCQkJICogcGVlciBzdXBwb3J0cyBhc2NvbmYvYXNjb25mX2Fjay4KKwkJCSAq
LworCQkJY2h1bmtzID0gKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmtfbGlzdCAqKXBoZHI7CisJCQlu
dW1fY2h1bmtzID0gcGxlbiAtIHNpemVvZigqY2h1bmtzKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBu
dW1fY2h1bmtzOyBpKyspIHsKKwkJCQkvKiByZWNvcmQgYXNjb25mL2FzY29uZi1hY2sgaWYgbGlz
dGVkICovCisJCQkJaWYgKGNodW5rcy0+Y2h1bmtfdHlwZXNbaV0gPT0gU0NUUF9BU0NPTkYpCisJ
CQkJCXNhd19hc2NvbmYgPSAxOworCQkJCWlmIChjaHVua3MtPmNodW5rX3R5cGVzW2ldID09IFND
VFBfQVNDT05GX0FDSykKKwkJCQkJc2F3X2FzY29uZl9hY2sgPSAxOworCQkJfQorCQkJaWYgKG51
bV9jaHVua3MpCisJCQkJZ290X2Noa2xpc3QgPSAxOworCQl9CisKKwkJb2Zmc2V0ICs9IFNDVFBf
U0laRTMyKHBsZW4pOworCQlpZiAob2Zmc2V0ID49IGxpbWl0KSB7CisJCQlicmVhazsKKwkJfQor
CQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShtLCBvZmZzZXQsICZwYXJhbV9idWYsCisJCSAg
ICBzaXplb2YocGFyYW1fYnVmKSk7CisJfQorCS8qIHZhbGlkYXRlIGF1dGhlbnRpY2F0aW9uIHJl
cXVpcmVkIHBhcmFtZXRlcnMgKi8KKwlpZiAoZ290X3JhbmRvbSAmJiBnb3RfaG1hY3MpIHsKKwkJ
cGVlcl9zdXBwb3J0c19hdXRoID0gMTsKKwl9IGVsc2UgeworCQlwZWVyX3N1cHBvcnRzX2F1dGgg
PSAwOworCX0KKwlpZiAoIXBlZXJfc3VwcG9ydHNfYXV0aCAmJiBnb3RfY2hrbGlzdCkgeworCQlT
Q1RQREJHKFNDVFBfREVCVUdfQVVUSDEsCisJCQkiU0NUUDogcGVlciBzZW50IGNodW5rIGxpc3Qg
dy9vIEFVVEhcbiIpOworCQlyZXR1cm4gKC0xKTsKKwl9CisJaWYgKHBlZXJfc3VwcG9ydHNfYXNj
b25mICYmICFwZWVyX3N1cHBvcnRzX2F1dGgpIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgx
LAorCQkJIlNDVFA6IHBlZXIgc3VwcG9ydHMgQVNDT05GIGJ1dCBub3QgQVVUSFxuIik7CisJCXJl
dHVybiAoLTEpOworCX0gZWxzZSBpZiAoKHBlZXJfc3VwcG9ydHNfYXNjb25mKSAmJiAocGVlcl9z
dXBwb3J0c19hdXRoKSAmJgorCQkgICAoKHNhd19hc2NvbmYgPT0gMCkgfHwgKHNhd19hc2NvbmZf
YWNrID09IDApKSkgeworCQlyZXR1cm4gKC0yKTsKKwl9CisJcmV0dXJuICgwKTsKK30KKwordm9p
ZAorc2N0cF9pbml0aWFsaXplX2F1dGhfcGFyYW1zKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0
cnVjdCBzY3RwX3RjYiAqc3RjYikKK3sKKwl1aW50MTZfdCBjaHVua3NfbGVuID0gMDsKKwl1aW50
MTZfdCBobWFjc19sZW4gPSAwOworCXVpbnQxNl90IHJhbmRvbV9sZW4gPSBTQ1RQX0FVVEhfUkFO
RE9NX1NJWkVfREVGQVVMVDsKKwlzY3RwX2tleV90ICpuZXdfa2V5OworCXVpbnQxNl90IGtleWxl
bjsKKworCS8qIGluaXRpYWxpemUgaG1hYyBsaXN0IGZyb20gZW5kcG9pbnQgKi8KKwlzdGNiLT5h
c29jLmxvY2FsX2htYWNzID0gc2N0cF9jb3B5X2htYWNsaXN0KGlucC0+c2N0cF9lcC5sb2NhbF9o
bWFjcyk7CisJaWYgKHN0Y2ItPmFzb2MubG9jYWxfaG1hY3MgIT0gTlVMTCkgeworCQlobWFjc19s
ZW4gPSBzdGNiLT5hc29jLmxvY2FsX2htYWNzLT5udW1fYWxnbyAqCisJCSAgICBzaXplb2Yoc3Rj
Yi0+YXNvYy5sb2NhbF9obWFjcy0+aG1hY1swXSk7CisJfQorCS8qIGluaXRpYWxpemUgYXV0aCBj
aHVua3MgbGlzdCBmcm9tIGVuZHBvaW50ICovCisJc3RjYi0+YXNvYy5sb2NhbF9hdXRoX2NodW5r
cyA9CisJICAgIHNjdHBfY29weV9jaHVua2xpc3QoaW5wLT5zY3RwX2VwLmxvY2FsX2F1dGhfY2h1
bmtzKTsKKwlpZiAoc3RjYi0+YXNvYy5sb2NhbF9hdXRoX2NodW5rcyAhPSBOVUxMKSB7CisJCWlu
dCBpOworCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJCWlmIChzdGNiLT5hc29jLmxv
Y2FsX2F1dGhfY2h1bmtzLT5jaHVua3NbaV0pCisJCQkJY2h1bmtzX2xlbisrOworCQl9CisJfQor
CS8qIGNvcHkgZGVmYXVsdHMgZnJvbSB0aGUgZW5kcG9pbnQgKi8KKwlzdGNiLT5hc29jLmF1dGhp
bmZvLmFjdGl2ZV9rZXlpZCA9IGlucC0+c2N0cF9lcC5kZWZhdWx0X2tleWlkOworCisJLyogY29w
eSBvdXQgdGhlIHNoYXJlZCBrZXkgbGlzdCAoYnkgcmVmZXJlbmNlKSBmcm9tIHRoZSBlbmRwb2lu
dCAqLworCSh2b2lkKXNjdHBfY29weV9za2V5bGlzdCgmaW5wLT5zY3RwX2VwLnNoYXJlZF9rZXlz
LAorCQkJCSAmc3RjYi0+YXNvYy5zaGFyZWRfa2V5cyk7CisKKwkvKiBub3cgc2V0IHRoZSBjb25j
YXRlbmF0ZWQga2V5IChyYW5kb20gKyBjaHVua3MgKyBobWFjcykgKi8KKwkvKiBrZXkgaW5jbHVk
ZXMgcGFyYW1ldGVyIGhlYWRlcnMgKi8KKwlrZXlsZW4gPSAoMyAqIHNpemVvZihzdHJ1Y3Qgc2N0
cF9wYXJhbWhkcikpICsgcmFuZG9tX2xlbiArIGNodW5rc19sZW4gKworCSAgICBobWFjc19sZW47
CisJbmV3X2tleSA9IHNjdHBfYWxsb2Nfa2V5KGtleWxlbik7CisJaWYgKG5ld19rZXkgIT0gTlVM
TCkgeworCQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGg7CisJCWludCBwbGVuOworCQkvKiBnZW5l
cmF0ZSBhbmQgY29weSBpbiB0aGUgUkFORE9NICovCisJCXBoID0gKHN0cnVjdCBzY3RwX3BhcmFt
aGRyICopbmV3X2tleS0+a2V5OworCQlwaC0+cGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfUkFORE9N
KTsKKwkJcGxlbiA9IHNpemVvZigqcGgpICsgcmFuZG9tX2xlbjsKKwkJcGgtPnBhcmFtX2xlbmd0
aCA9IGh0b25zKHBsZW4pOworCQlTQ1RQX1JFQURfUkFORE9NKG5ld19rZXktPmtleSArIHNpemVv
ZigqcGgpLCByYW5kb21fbGVuKTsKKwkJa2V5bGVuID0gcGxlbjsKKworCQkvKiBhcHBlbmQgaW4g
dGhlIEFVVEggY2h1bmtzICovCisJCS8qIE5PVEU6IGN1cnJlbnRseSB3ZSBhbHdheXMgaGF2ZSBj
aHVua3MgdG8gbGlzdCAqLworCQlwaCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKShuZXdfa2V5
LT5rZXkgKyBrZXlsZW4pOworCQlwaC0+cGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfQ0hVTktfTElT
VCk7CisJCXBsZW4gPSBzaXplb2YoKnBoKSArIGNodW5rc19sZW47CisJCXBoLT5wYXJhbV9sZW5n
dGggPSBodG9ucyhwbGVuKTsKKwkJa2V5bGVuICs9IHNpemVvZigqcGgpOworCQlpZiAoc3RjYi0+
YXNvYy5sb2NhbF9hdXRoX2NodW5rcykgeworCQkJaW50IGk7CisJCQlmb3IgKGkgPSAwOyBpIDwg
MjU2OyBpKyspIHsKKwkJCQlpZiAoc3RjYi0+YXNvYy5sb2NhbF9hdXRoX2NodW5rcy0+Y2h1bmtz
W2ldKQorCQkJCQluZXdfa2V5LT5rZXlba2V5bGVuKytdID0gaTsKKwkJCX0KKwkJfQorCisJCS8q
IGFwcGVuZCBpbiB0aGUgSE1BQ3MgKi8KKwkJcGggPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKiko
bmV3X2tleS0+a2V5ICsga2V5bGVuKTsKKwkJcGgtPnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX0hN
QUNfTElTVCk7CisJCXBsZW4gPSBzaXplb2YoKnBoKSArIGhtYWNzX2xlbjsKKwkJcGgtPnBhcmFt
X2xlbmd0aCA9IGh0b25zKHBsZW4pOworCQlrZXlsZW4gKz0gc2l6ZW9mKCpwaCk7CisJCSh2b2lk
KXNjdHBfc2VyaWFsaXplX2htYWNsaXN0KHN0Y2ItPmFzb2MubG9jYWxfaG1hY3MsCisJCQkJCW5l
d19rZXktPmtleSArIGtleWxlbik7CisJfQorCWlmIChzdGNiLT5hc29jLmF1dGhpbmZvLnJhbmRv
bSAhPSBOVUxMKQorCSAgICBzY3RwX2ZyZWVfa2V5KHN0Y2ItPmFzb2MuYXV0aGluZm8ucmFuZG9t
KTsKKwlzdGNiLT5hc29jLmF1dGhpbmZvLnJhbmRvbSA9IG5ld19rZXk7CisJc3RjYi0+YXNvYy5h
dXRoaW5mby5yYW5kb21fbGVuID0gcmFuZG9tX2xlbjsKK30KKworCisjaWZkZWYgU0NUUF9ITUFD
X1RFU1QKKy8qCisgKiBITUFDIGFuZCBrZXkgY29uY2F0ZW5hdGlvbiB0ZXN0cworICovCitzdGF0
aWMgdm9pZAorc2N0cF9wcmludF9kaWdlc3QodWludDhfdCAqZGlnZXN0LCB1aW50MzJfdCBkaWdl
c3RsZW4sIGNvbnN0IGNoYXIgKnN0cikKK3sKKwl1aW50MzJfdCBpOworCisJU0NUUF9QUklOVEYo
IlxuJXM6IDB4Iiwgc3RyKTsKKwlpZiAoZGlnZXN0ID09IE5VTEwpCisJCXJldHVybjsKKworCWZv
ciAoaSA9IDA7IGkgPCBkaWdlc3RsZW47IGkrKykKKwkJU0NUUF9QUklOVEYoIiUwMngiLCBkaWdl
c3RbaV0pOworfQorCitzdGF0aWMgaW50CitzY3RwX3Rlc3RfaG1hYyhjb25zdCBjaGFyICpzdHIs
IHVpbnQxNl90IGhtYWNfaWQsIHVpbnQ4X3QgKmtleSwKKyAgICB1aW50MzJfdCBrZXlsZW4sIHVp
bnQ4X3QgKnRleHQsIHVpbnQzMl90IHRleHRsZW4sCisgICAgdWludDhfdCAqZGlnZXN0LCB1aW50
MzJfdCBkaWdlc3RsZW4pCit7CisJdWludDhfdCBjb21wdXRlZF9kaWdlc3RbU0NUUF9BVVRIX0RJ
R0VTVF9MRU5fTUFYXTsKKworCVNDVFBfUFJJTlRGKCJcbiVzOiIsIHN0cik7CisJc2N0cF9obWFj
KGhtYWNfaWQsIGtleSwga2V5bGVuLCB0ZXh0LCB0ZXh0bGVuLCBjb21wdXRlZF9kaWdlc3QpOwor
CXNjdHBfcHJpbnRfZGlnZXN0KGRpZ2VzdCwgZGlnZXN0bGVuLCAiRXhwZWN0ZWQgZGlnZXN0Iik7
CisJc2N0cF9wcmludF9kaWdlc3QoY29tcHV0ZWRfZGlnZXN0LCBkaWdlc3RsZW4sICJDb21wdXRl
ZCBkaWdlc3QiKTsKKwlpZiAobWVtY21wKGRpZ2VzdCwgY29tcHV0ZWRfZGlnZXN0LCBkaWdlc3Rs
ZW4pICE9IDApIHsKKwkJU0NUUF9QUklOVEYoIlxuRkFJTEVEIik7CisJCXJldHVybiAoLTEpOwor
CX0gZWxzZSB7CisJCVNDVFBfUFJJTlRGKCJcblBBU1NFRCIpOworCQlyZXR1cm4gKDApOworCX0K
K30KKworCisvKgorICogUkZDIDIyMDI6IEhNQUMtU0hBMSB0ZXN0IGNhc2VzCisgKi8KK3ZvaWQK
K3NjdHBfdGVzdF9obWFjX3NoYTEodm9pZCkKK3sKKwl1aW50OF90ICpkaWdlc3Q7CisJdWludDhf
dCBrZXlbMTI4XTsKKwl1aW50MzJfdCBrZXlsZW47CisJdWludDhfdCB0ZXh0WzEyOF07CisJdWlu
dDMyX3QgdGV4dGxlbjsKKwl1aW50MzJfdCBkaWdlc3RsZW4gPSAyMDsKKwlpbnQgZmFpbGVkID0g
MDsKKworCS8qLQorCSAqIHRlc3RfY2FzZSA9ICAgICAxCisJICoga2V5ID0gICAgICAgICAgIDB4
MGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYgorCSAqIGtleV9sZW4gPSAg
ICAgICAyMAorCSAqIGRhdGEgPSAgICAgICAgICAiSGkgVGhlcmUiCisJICogZGF0YV9sZW4gPSAg
ICAgIDgKKwkgKiBkaWdlc3QgPSAgICAgICAgMHhiNjE3MzE4NjU1MDU3MjY0ZTI4YmMwYjZmYjM3
OGM4ZWYxNDZiZTAwCisJICovCisJa2V5bGVuID0gMjA7CisJbWVtc2V0KGtleSwgMHgwYiwga2V5
bGVuKTsKKwl0ZXh0bGVuID0gODsKKwlzdHJjcHkodGV4dCwgIkhpIFRoZXJlIik7CisJZGlnZXN0
ID0gIlx4YjZceDE3XHgzMVx4ODZceDU1XHgwNVx4NzJceDY0XHhlMlx4OGJceGMwXHhiNlx4ZmJc
eDM3XHg4Y1x4OGVceGYxXHg0Nlx4YmVceDAwIjsKKwlpZiAoc2N0cF90ZXN0X2htYWMoIlNIQTEg
dGVzdCBjYXNlIDEiLCBTQ1RQX0FVVEhfSE1BQ19JRF9TSEExLCBrZXksIGtleWxlbiwKKwkgICAg
dGV4dCwgdGV4dGxlbiwgZGlnZXN0LCBkaWdlc3RsZW4pIDwgMCkKKwkJZmFpbGVkKys7CisKKwkv
Ki0KKwkgKiB0ZXN0X2Nhc2UgPSAgICAgMgorCSAqIGtleSA9ICAgICAgICAgICAiSmVmZSIKKwkg
KiBrZXlfbGVuID0gICAgICAgNAorCSAqIGRhdGEgPSAgICAgICAgICAid2hhdCBkbyB5YSB3YW50
IGZvciBub3RoaW5nPyIKKwkgKiBkYXRhX2xlbiA9ICAgICAgMjgKKwkgKiBkaWdlc3QgPSAgICAg
ICAgMHhlZmZjZGY2YWU1ZWIyZmEyZDI3NDE2ZDVmMTg0ZGY5YzI1OWE3Yzc5CisJICovCisJa2V5
bGVuID0gNDsKKwlzdHJjcHkoa2V5LCAiSmVmZSIpOworCXRleHRsZW4gPSAyODsKKwlzdHJjcHko
dGV4dCwgIndoYXQgZG8geWEgd2FudCBmb3Igbm90aGluZz8iKTsKKwlkaWdlc3QgPSAiXHhlZlx4
ZmNceGRmXHg2YVx4ZTVceGViXHgyZlx4YTJceGQyXHg3NFx4MTZceGQ1XHhmMVx4ODRceGRmXHg5
Y1x4MjVceDlhXHg3Y1x4NzkiOworCWlmIChzY3RwX3Rlc3RfaG1hYygiU0hBMSB0ZXN0IGNhc2Ug
MiIsIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTEsIGtleSwga2V5bGVuLAorCSAgICB0ZXh0LCB0ZXh0
bGVuLCBkaWdlc3QsIGRpZ2VzdGxlbikgPCAwKQorCQlmYWlsZWQrKzsKKworCS8qLQorCSAqIHRl
c3RfY2FzZSA9ICAgICAzCisJICoga2V5ID0gICAgICAgICAgIDB4YWFhYWFhYWFhYWFhYWFhYWFh
YWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorCSAqIGtleV9sZW4gPSAgICAgICAyMAorCSAqIGRhdGEg
PSAgICAgICAgICAweGRkIHJlcGVhdGVkIDUwIHRpbWVzCisJICogZGF0YV9sZW4gPSAgICAgIDUw
CisJICogZGlnZXN0ID0gICAgICAgIDB4MTI1ZDczNDJiOWFjMTFjZDkxYTM5YWY0OGFhMTdiNGY2
M2YxNzVkMworCSAqLworCWtleWxlbiA9IDIwOworCW1lbXNldChrZXksIDB4YWEsIGtleWxlbik7
CisJdGV4dGxlbiA9IDUwOworCW1lbXNldCh0ZXh0LCAweGRkLCB0ZXh0bGVuKTsKKwlkaWdlc3Qg
PSAiXHgxMlx4NWRceDczXHg0Mlx4YjlceGFjXHgxMVx4Y2RceDkxXHhhM1x4OWFceGY0XHg4YVx4
YTFceDdiXHg0Zlx4NjNceGYxXHg3NVx4ZDMiOworCWlmIChzY3RwX3Rlc3RfaG1hYygiU0hBMSB0
ZXN0IGNhc2UgMyIsIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTEsIGtleSwga2V5bGVuLAorCSAgICB0
ZXh0LCB0ZXh0bGVuLCBkaWdlc3QsIGRpZ2VzdGxlbikgPCAwKQorCQlmYWlsZWQrKzsKKworCS8q
LQorCSAqIHRlc3RfY2FzZSA9ICAgICA0CisJICoga2V5ID0gICAgICAgICAgIDB4MDEwMjAzMDQw
NTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkKKwkgKiBrZXlfbGVuID0g
ICAgICAgMjUKKwkgKiBkYXRhID0gICAgICAgICAgMHhjZCByZXBlYXRlZCA1MCB0aW1lcworCSAq
IGRhdGFfbGVuID0gICAgICA1MAorCSAqIGRpZ2VzdCA9ICAgICAgICAweDRjOTAwN2Y0MDI2MjUw
YzZiYzg0MTRmOWJmNTBjODZjMmQ3MjM1ZGEKKwkgKi8KKwlrZXlsZW4gPSAyNTsKKwltZW1jcHko
a2V5LCAiXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDA5XHgwYVx4MGJceDBjXHgw
ZFx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOSIsIGtleWxl
bik7CisJdGV4dGxlbiA9IDUwOworCW1lbXNldCh0ZXh0LCAweGNkLCB0ZXh0bGVuKTsKKwlkaWdl
c3QgPSAiXHg0Y1x4OTBceDA3XHhmNFx4MDJceDYyXHg1MFx4YzZceGJjXHg4NFx4MTRceGY5XHhi
Zlx4NTBceGM4XHg2Y1x4MmRceDcyXHgzNVx4ZGEiOworCWlmIChzY3RwX3Rlc3RfaG1hYygiU0hB
MSB0ZXN0IGNhc2UgNCIsIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTEsIGtleSwga2V5bGVuLAorCSAg
ICB0ZXh0LCB0ZXh0bGVuLCBkaWdlc3QsIGRpZ2VzdGxlbikgPCAwKQorCQlmYWlsZWQrKzsKKwor
CS8qLQorCSAqIHRlc3RfY2FzZSA9ICAgICA1CisJICoga2V5ID0gICAgICAgICAgIDB4MGMwYzBj
MGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYworCSAqIGtleV9sZW4gPSAgICAgICAy
MAorCSAqIGRhdGEgPSAgICAgICAgICAiVGVzdCBXaXRoIFRydW5jYXRpb24iCisJICogZGF0YV9s
ZW4gPSAgICAgIDIwCisJICogZGlnZXN0ID0gICAgICAgIDB4NGMxYTAzNDI0YjU1ZTA3ZmU3ZjI3
YmUxZDU4YmI5MzI0YTlhNWEwNAorCSAqIGRpZ2VzdC05NiA9ICAgICAweDRjMWEwMzQyNGI1NWUw
N2ZlN2YyN2JlMQorCSAqLworCWtleWxlbiA9IDIwOworCW1lbXNldChrZXksIDB4MGMsIGtleWxl
bik7CisJdGV4dGxlbiA9IDIwOworCXN0cmNweSh0ZXh0LCAiVGVzdCBXaXRoIFRydW5jYXRpb24i
KTsKKwlkaWdlc3QgPSAiXHg0Y1x4MWFceDAzXHg0Mlx4NGJceDU1XHhlMFx4N2ZceGU3XHhmMlx4
N2JceGUxXHhkNVx4OGJceGI5XHgzMlx4NGFceDlhXHg1YVx4MDQiOworCWlmIChzY3RwX3Rlc3Rf
aG1hYygiU0hBMSB0ZXN0IGNhc2UgNSIsIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTEsIGtleSwga2V5
bGVuLAorCSAgICB0ZXh0LCB0ZXh0bGVuLCBkaWdlc3QsIGRpZ2VzdGxlbikgPCAwKQorCQlmYWls
ZWQrKzsKKworCS8qLQorCSAqIHRlc3RfY2FzZSA9ICAgICA2CisJICoga2V5ID0gICAgICAgICAg
IDB4YWEgcmVwZWF0ZWQgODAgdGltZXMKKwkgKiBrZXlfbGVuID0gICAgICAgODAKKwkgKiBkYXRh
ID0gICAgICAgICAgIlRlc3QgVXNpbmcgTGFyZ2VyIFRoYW4gQmxvY2stU2l6ZSBLZXkgLSBIYXNo
IEtleSBGaXJzdCIKKwkgKiBkYXRhX2xlbiA9ICAgICAgNTQKKwkgKiBkaWdlc3QgPSAgICAgICAg
MHhhYTRhZTVlMTUyNzJkMDBlOTU3MDU2MzdjZThhM2I1NWVkNDAyMTEyCisJICovCisJa2V5bGVu
ID0gODA7CisJbWVtc2V0KGtleSwgMHhhYSwga2V5bGVuKTsKKwl0ZXh0bGVuID0gNTQ7CisJc3Ry
Y3B5KHRleHQsICJUZXN0IFVzaW5nIExhcmdlciBUaGFuIEJsb2NrLVNpemUgS2V5IC0gSGFzaCBL
ZXkgRmlyc3QiKTsKKwlkaWdlc3QgPSAiXHhhYVx4NGFceGU1XHhlMVx4NTJceDcyXHhkMFx4MGVc
eDk1XHg3MFx4NTZceDM3XHhjZVx4OGFceDNiXHg1NVx4ZWRceDQwXHgyMVx4MTIiOworCWlmIChz
Y3RwX3Rlc3RfaG1hYygiU0hBMSB0ZXN0IGNhc2UgNiIsIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTEs
IGtleSwga2V5bGVuLAorCSAgICB0ZXh0LCB0ZXh0bGVuLCBkaWdlc3QsIGRpZ2VzdGxlbikgPCAw
KQorCQlmYWlsZWQrKzsKKworCS8qLQorCSAqIHRlc3RfY2FzZSA9ICAgICA3CisJICoga2V5ID0g
ICAgICAgICAgIDB4YWEgcmVwZWF0ZWQgODAgdGltZXMKKwkgKiBrZXlfbGVuID0gICAgICAgODAK
KwkgKiBkYXRhID0gICAgICAgICAgIlRlc3QgVXNpbmcgTGFyZ2VyIFRoYW4gQmxvY2stU2l6ZSBL
ZXkgYW5kIExhcmdlciBUaGFuIE9uZSBCbG9jay1TaXplIERhdGEiCisJICogZGF0YV9sZW4gPSAg
ICAgIDczCisJICogZGlnZXN0ID0gICAgICAgIDB4ZThlOTlkMGY0NTIzN2Q3ODZkNmJiYWE3OTY1
Yzc4MDhiYmZmMWE5MQorCSAqLworCWtleWxlbiA9IDgwOworCW1lbXNldChrZXksIDB4YWEsIGtl
eWxlbik7CisJdGV4dGxlbiA9IDczOworCXN0cmNweSh0ZXh0LCAiVGVzdCBVc2luZyBMYXJnZXIg
VGhhbiBCbG9jay1TaXplIEtleSBhbmQgTGFyZ2VyIFRoYW4gT25lIEJsb2NrLVNpemUgRGF0YSIp
OworCWRpZ2VzdCA9ICJceGU4XHhlOVx4OWRceDBmXHg0NVx4MjNceDdkXHg3OFx4NmRceDZiXHhi
YVx4YTdceDk2XHg1Y1x4NzhceDA4XHhiYlx4ZmZceDFhXHg5MSI7CisJaWYgKHNjdHBfdGVzdF9o
bWFjKCJTSEExIHRlc3QgY2FzZSA3IiwgU0NUUF9BVVRIX0hNQUNfSURfU0hBMSwga2V5LCBrZXls
ZW4sCisJICAgIHRleHQsIHRleHRsZW4sIGRpZ2VzdCwgZGlnZXN0bGVuKSA8IDApCisJCWZhaWxl
ZCsrOworCisJLyogZG9uZSB3aXRoIGFsbCB0ZXN0cyAqLworCWlmIChmYWlsZWQpCisJCVNDVFBf
UFJJTlRGKCJcblNIQTEgdGVzdCByZXN1bHRzOiAlZCBjYXNlcyBmYWlsZWQiLCBmYWlsZWQpOwor
CWVsc2UKKwkJU0NUUF9QUklOVEYoIlxuU0hBMSB0ZXN0IHJlc3VsdHM6IGFsbCB0ZXN0IGNhc2Vz
IHBhc3NlZCIpOworfQorCisvKgorICogdGVzdCBhc3NvYyBrZXkgY29uY2F0ZW5hdGlvbgorICov
CitzdGF0aWMgaW50CitzY3RwX3Rlc3Rfa2V5X2NvbmNhdGVuYXRpb24oc2N0cF9rZXlfdCAqa2V5
MSwgc2N0cF9rZXlfdCAqa2V5MiwKKyAgICBzY3RwX2tleV90ICpleHBlY3RlZF9rZXkpCit7CisJ
c2N0cF9rZXlfdCAqa2V5OworCWludCByZXRfdmFsOworCisJc2N0cF9zaG93X2tleShrZXkxLCAi
XG5rZXkxIik7CisJc2N0cF9zaG93X2tleShrZXkyLCAiXG5rZXkyIik7CisJa2V5ID0gc2N0cF9j
b21wdXRlX2hhc2hrZXkoa2V5MSwga2V5MiwgTlVMTCk7CisJc2N0cF9zaG93X2tleShleHBlY3Rl
ZF9rZXksICJcbkV4cGVjdGVkIik7CisJc2N0cF9zaG93X2tleShrZXksICJcbkNvbXB1dGVkIik7
CisJaWYgKG1lbWNtcChrZXksIGV4cGVjdGVkX2tleSwgZXhwZWN0ZWRfa2V5LT5rZXlsZW4pICE9
IDApIHsKKwkJU0NUUF9QUklOVEYoIlxuRkFJTEVEIik7CisJCXJldF92YWwgPSAtMTsKKwl9IGVs
c2UgeworCQlTQ1RQX1BSSU5URigiXG5QQVNTRUQiKTsKKwkJcmV0X3ZhbCA9IDA7CisJfQorCXNj
dHBfZnJlZV9rZXkoa2V5MSk7CisJc2N0cF9mcmVlX2tleShrZXkyKTsKKwlzY3RwX2ZyZWVfa2V5
KGV4cGVjdGVkX2tleSk7CisJc2N0cF9mcmVlX2tleShrZXkpOworCXJldHVybiAocmV0X3ZhbCk7
Cit9CisKKwordm9pZAorc2N0cF90ZXN0X2F1dGhrZXkodm9pZCkKK3sKKwlzY3RwX2tleV90ICpr
ZXkxLCAqa2V5MiwgKmV4cGVjdGVkX2tleTsKKwlpbnQgZmFpbGVkID0gMDsKKworCS8qIHRlc3Qg
Y2FzZSAxICovCisJa2V5MSA9IHNjdHBfc2V0X2tleSgiXHgwMVx4MDFceDAxXHgwMSIsIDQpOwor
CWtleTIgPSBzY3RwX3NldF9rZXkoIlx4MDFceDAyXHgwM1x4MDQiLCA0KTsKKwlleHBlY3RlZF9r
ZXkgPSBzY3RwX3NldF9rZXkoIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMlx4MDNceDA0IiwgOCk7
CisJaWYgKHNjdHBfdGVzdF9rZXlfY29uY2F0ZW5hdGlvbihrZXkxLCBrZXkyLCBleHBlY3RlZF9r
ZXkpIDwgMCkKKwkJZmFpbGVkKys7CisKKwkvKiB0ZXN0IGNhc2UgMiAqLworCWtleTEgPSBzY3Rw
X3NldF9rZXkoIlx4MDBceDAwXHgwMFx4MDEiLCA0KTsKKwlrZXkyID0gc2N0cF9zZXRfa2V5KCJc
eDAyIiwgMSk7CisJZXhwZWN0ZWRfa2V5ID0gc2N0cF9zZXRfa2V5KCJceDAwXHgwMFx4MDBceDAx
XHgwMiIsIDUpOworCWlmIChzY3RwX3Rlc3Rfa2V5X2NvbmNhdGVuYXRpb24oa2V5MSwga2V5Miwg
ZXhwZWN0ZWRfa2V5KSA8IDApCisJCWZhaWxlZCsrOworCisJLyogdGVzdCBjYXNlIDMgKi8KKwlr
ZXkxID0gc2N0cF9zZXRfa2V5KCJceDAxIiwgMSk7CisJa2V5MiA9IHNjdHBfc2V0X2tleSgiXHgw
MFx4MDBceDAwXHgwMiIsIDQpOworCWV4cGVjdGVkX2tleSA9IHNjdHBfc2V0X2tleSgiXHgwMVx4
MDBceDAwXHgwMFx4MDIiLCA1KTsKKwlpZiAoc2N0cF90ZXN0X2tleV9jb25jYXRlbmF0aW9uKGtl
eTEsIGtleTIsIGV4cGVjdGVkX2tleSkgPCAwKQorCQlmYWlsZWQrKzsKKworCS8qIHRlc3QgY2Fz
ZSA0ICovCisJa2V5MSA9IHNjdHBfc2V0X2tleSgiXHgwMFx4MDBceDAwXHgwMSIsIDQpOworCWtl
eTIgPSBzY3RwX3NldF9rZXkoIlx4MDEiLCAxKTsKKwlleHBlY3RlZF9rZXkgPSBzY3RwX3NldF9r
ZXkoIlx4MDFceDAwXHgwMFx4MDBceDAxIiwgNSk7CisJaWYgKHNjdHBfdGVzdF9rZXlfY29uY2F0
ZW5hdGlvbihrZXkxLCBrZXkyLCBleHBlY3RlZF9rZXkpIDwgMCkKKwkJZmFpbGVkKys7CisKKwkv
KiB0ZXN0IGNhc2UgNSAqLworCWtleTEgPSBzY3RwX3NldF9rZXkoIlx4MDEiLCAxKTsKKwlrZXky
ID0gc2N0cF9zZXRfa2V5KCJceDAwXHgwMFx4MDBceDAxIiwgNCk7CisJZXhwZWN0ZWRfa2V5ID0g
c2N0cF9zZXRfa2V5KCJceDAxXHgwMFx4MDBceDAwXHgwMSIsIDUpOworCWlmIChzY3RwX3Rlc3Rf
a2V5X2NvbmNhdGVuYXRpb24oa2V5MSwga2V5MiwgZXhwZWN0ZWRfa2V5KSA8IDApCisJCWZhaWxl
ZCsrOworCisJLyogdGVzdCBjYXNlIDYgKi8KKwlrZXkxID0gc2N0cF9zZXRfa2V5KCJceDAwXHgw
MFx4MDBceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIsIDExKTsKKwlrZXkyID0gc2N0
cF9zZXRfa2V5KCJceDAwXHgwMFx4MDBceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwOCIs
IDExKTsKKwlleHBlY3RlZF9rZXkgPSBzY3RwX3NldF9rZXkoIlx4MDBceDAwXHgwMFx4MDBceDAx
XHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwMFx4MDBceDAwXHgwMFx4MDFceDAyXHgwM1x4MDRc
eDA1XHgwNlx4MDgiLCAyMik7CisJaWYgKHNjdHBfdGVzdF9rZXlfY29uY2F0ZW5hdGlvbihrZXkx
LCBrZXkyLCBleHBlY3RlZF9rZXkpIDwgMCkKKwkJZmFpbGVkKys7CisKKwkvKiB0ZXN0IGNhc2Ug
NyAqLworCWtleTEgPSBzY3RwX3NldF9rZXkoIlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMlx4MDNc
eDA0XHgwNVx4MDZceDA4IiwgMTEpOworCWtleTIgPSBzY3RwX3NldF9rZXkoIlx4MDBceDAwXHgw
MFx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IiwgMTEpOworCWV4cGVjdGVkX2tleSA9
IHNjdHBfc2V0X2tleSgiXHgwMFx4MDBceDAwXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4
MDdceDAwXHgwMFx4MDBceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwOCIsIDIyKTsKKwlp
ZiAoc2N0cF90ZXN0X2tleV9jb25jYXRlbmF0aW9uKGtleTEsIGtleTIsIGV4cGVjdGVkX2tleSkg
PCAwKQorCQlmYWlsZWQrKzsKKworCS8qIGRvbmUgd2l0aCBhbGwgdGVzdHMgKi8KKwlpZiAoZmFp
bGVkKQorCQlTQ1RQX1BSSU5URigiXG5LZXkgY29uY2F0ZW5hdGlvbiB0ZXN0IHJlc3VsdHM6ICVk
IGNhc2VzIGZhaWxlZCIsIGZhaWxlZCk7CisJZWxzZQorCQlTQ1RQX1BSSU5URigiXG5LZXkgY29u
Y2F0ZW5hdGlvbiB0ZXN0IHJlc3VsdHM6IGFsbCB0ZXN0IGNhc2VzIHBhc3NlZCIpOworfQorCisK
KyNpZiBkZWZpbmVkKFNUQU5EQUxPTkVfSE1BQ19URVNUKQoraW50CittYWluKHZvaWQpCit7CisJ
c2N0cF90ZXN0X2htYWNfc2hhMSgpOworCXNjdHBfdGVzdF9hdXRoa2V5KCk7Cit9CisKKyNlbmRp
ZiAvKiBTVEFOREFMT05FX0hNQUNfVEVTVCAqLworCisjZW5kaWYgLyogU0NUUF9ITUFDX1RFU1Qg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2F1dGguaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2F1dGguaApuZXcgZmlsZSBtb2RlIDEw
MDc1NQppbmRleCAwMDAwMDAwMDAwMDAuLmQ0M2FkYTkwZGE2MgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2F1dGguaApAQCAtMCwwICsxLDIxMyBA
QAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgorICog
Q29weXJpZ2h0IChjKSAyMDAxLTIwMDgsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdh
cnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkg
TWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAq
IGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpbmNsdWRlIDxzeXMv
Y2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX2F1dGgu
aCAzNjUwNzEgMjAyMC0wOS0wMSAyMToxOToxNFogbWpnICQiKTsKKyNlbmRpZgorCisjaWZuZGVm
IF9ORVRJTkVUX1NDVFBfQVVUSF9IXworI2RlZmluZSBfTkVUSU5FVF9TQ1RQX0FVVEhfSF8KKwor
I2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vcy5oPgorCisvKiBkaWdlc3QgbGVuZ3RocyAqLworI2Rl
ZmluZSBTQ1RQX0FVVEhfRElHRVNUX0xFTl9TSEExCTIwCisjZGVmaW5lIFNDVFBfQVVUSF9ESUdF
U1RfTEVOX1NIQTI1NgkzMgorI2RlZmluZSBTQ1RQX0FVVEhfRElHRVNUX0xFTl9NQVgJU0NUUF9B
VVRIX0RJR0VTVF9MRU5fU0hBMjU2CisKKy8qIHJhbmRvbSBzaXplcyAqLworI2RlZmluZSBTQ1RQ
X0FVVEhfUkFORE9NX1NJWkVfREVGQVVMVAkzMgorI2RlZmluZSBTQ1RQX0FVVEhfUkFORE9NX1NJ
WkVfUkVRVUlSRUQJMzIKKworLyogdW5pb24gb2YgYWxsIHN1cHBvcnRlZCBITUFDIGFsZ29yaXRo
bSBjb250ZXh0cyAqLwordHlwZWRlZiB1bmlvbiBzY3RwX2hhc2hfY29udGV4dCB7CisJU0NUUF9T
SEExX0NUWCBzaGExOworI2lmIGRlZmluZWQoU0NUUF9TVVBQT1JUX0hNQUNfU0hBMjU2KQorCVND
VFBfU0hBMjU2X0NUWCBzaGEyNTY7CisjZW5kaWYKK30gc2N0cF9oYXNoX2NvbnRleHRfdDsKKwor
dHlwZWRlZiBzdHJ1Y3Qgc2N0cF9rZXkgeworCXVpbnQzMl90IGtleWxlbjsKKwl1aW50OF90IGtl
eVtdOworfSBzY3RwX2tleV90OworCit0eXBlZGVmIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgewor
CUxJU1RfRU5UUlkoc2N0cF9zaGFyZWRfa2V5KSBuZXh0OworCXNjdHBfa2V5X3QgKmtleTsJLyog
a2V5IHRleHQgKi8KKwl1aW50MzJfdCByZWZjb3VudDsJLyogcmVmZXJlbmNlIGNvdW50ICovCisJ
dWludDE2X3Qga2V5aWQ7CQkvKiBzaGFyZWQga2V5IElEICovCisJdWludDhfdCBkZWFjdGl2YXRl
ZDsJLyoga2V5IGlzIGRlYWN0aXZhdGVkICovCit9IHNjdHBfc2hhcmVka2V5X3Q7CisKK0xJU1Rf
SEVBRChzY3RwX2tleWhlYWQsIHNjdHBfc2hhcmVkX2tleSk7CisKKy8qIGF1dGhlbnRpY2F0aW9u
IGNodW5rcyBsaXN0ICovCit0eXBlZGVmIHN0cnVjdCBzY3RwX2F1dGhfY2hrbGlzdCB7CisJdWlu
dDhfdCBjaHVua3NbMjU2XTsKKwl1aW50OF90IG51bV9jaHVua3M7Cit9IHNjdHBfYXV0aF9jaGts
aXN0X3Q7CisKKy8qIGhtYWMgYWxnb3Mgc3VwcG9ydGVkIGxpc3QgKi8KK3R5cGVkZWYgc3RydWN0
IHNjdHBfaG1hY2xpc3QgeworCXVpbnQxNl90IG1heF9hbGdvOwkvKiBtYXggYWxnb3JpdGhtcyBh
bGxvY2F0ZWQgKi8KKwl1aW50MTZfdCBudW1fYWxnbzsJLyogbnVtIGFsZ29yaXRobXMgdXNlZCAq
LworCXVpbnQxNl90IGhtYWNbXTsKK30gc2N0cF9obWFjbGlzdF90OworCisvKiBhdXRoZW50aWNh
dGlvbiBpbmZvICovCit0eXBlZGVmIHN0cnVjdCBzY3RwX2F1dGhpbmZvcm1hdGlvbiB7CisJc2N0
cF9rZXlfdCAqcmFuZG9tOwkvKiBsb2NhbCByYW5kb20ga2V5IChjb25jYXRlbmF0ZWQpICovCisJ
dWludDMyX3QgcmFuZG9tX2xlbjsJLyogbG9jYWwgcmFuZG9tIG51bWJlciBsZW5ndGggZm9yIHBh
cmFtICovCisJc2N0cF9rZXlfdCAqcGVlcl9yYW5kb207LyogcGVlcidzIHJhbmRvbSBrZXkgKGNv
bmNhdGVuYXRlZCkgKi8KKwlzY3RwX2tleV90ICphc3NvY19rZXk7CS8qIGNhY2hlZCBjb25jYXRl
bmF0ZWQgc2VuZCBrZXkgKi8KKwlzY3RwX2tleV90ICpyZWN2X2tleTsJLyogY2FjaGVkIGNvbmNh
dGVuYXRlZCByZWN2IGtleSAqLworCXVpbnQxNl90IGFjdGl2ZV9rZXlpZDsJLyogYWN0aXZlIHNl
bmQga2V5aWQgKi8KKwl1aW50MTZfdCBhc3NvY19rZXlpZDsJLyogY3VycmVudCBzZW5kIGtleWlk
IChjYWNoZWQpICovCisJdWludDE2X3QgcmVjdl9rZXlpZDsJLyogbGFzdCByZWN2IGtleWlkIChj
YWNoZWQpICovCit9IHNjdHBfYXV0aGluZm9fdDsKKworLyoKKyAqIE1hY3JvcworICovCisjZGVm
aW5lIHNjdHBfYXV0aF9pc19yZXF1aXJlZF9jaHVuayhjaHVuaywgbGlzdCkgKChsaXN0ID09IE5V
TEwpID8gKDApIDogKGxpc3QtPmNodW5rc1tjaHVua10gIT0gMCkpCisKKy8qCisgKiBmdW5jdGlv
biBwcm90b3R5cGVzCisgKi8KKworLyogc29ja2V0IG9wdGlvbiBhcGkgZnVuY3Rpb25zICovCitl
eHRlcm4gc2N0cF9hdXRoX2Noa2xpc3RfdCAqc2N0cF9hbGxvY19jaHVua2xpc3Qodm9pZCk7Citl
eHRlcm4gdm9pZCBzY3RwX2ZyZWVfY2h1bmtsaXN0KHNjdHBfYXV0aF9jaGtsaXN0X3QgKmNoa2xp
c3QpOworZXh0ZXJuIHZvaWQgc2N0cF9jbGVhcl9jaHVua2xpc3Qoc2N0cF9hdXRoX2Noa2xpc3Rf
dCAqY2hrbGlzdCk7CitleHRlcm4gc2N0cF9hdXRoX2Noa2xpc3RfdCAqc2N0cF9jb3B5X2NodW5r
bGlzdChzY3RwX2F1dGhfY2hrbGlzdF90ICpjaGtsaXN0KTsKK2V4dGVybiBpbnQgc2N0cF9hdXRo
X2FkZF9jaHVuayh1aW50OF90IGNodW5rLCBzY3RwX2F1dGhfY2hrbGlzdF90ICpsaXN0KTsKK2V4
dGVybiBpbnQgc2N0cF9hdXRoX2RlbGV0ZV9jaHVuayh1aW50OF90IGNodW5rLCBzY3RwX2F1dGhf
Y2hrbGlzdF90ICpsaXN0KTsKK2V4dGVybiBzaXplX3Qgc2N0cF9hdXRoX2dldF9jaGtsaXN0X3Np
emUoY29uc3Qgc2N0cF9hdXRoX2Noa2xpc3RfdCAqbGlzdCk7CitleHRlcm4gaW50IHNjdHBfc2Vy
aWFsaXplX2F1dGhfY2h1bmtzKGNvbnN0IHNjdHBfYXV0aF9jaGtsaXN0X3QgKmxpc3QsCisgICAg
dWludDhfdCAqcHRyKTsKK2V4dGVybiBpbnQgc2N0cF9wYWNrX2F1dGhfY2h1bmtzKGNvbnN0IHNj
dHBfYXV0aF9jaGtsaXN0X3QgKmxpc3QsCisgICAgdWludDhfdCAqcHRyKTsKK2V4dGVybiBpbnQg
c2N0cF91bnBhY2tfYXV0aF9jaHVua3MoY29uc3QgdWludDhfdCAqcHRyLCB1aW50OF90IG51bV9j
aHVua3MsCisgICAgc2N0cF9hdXRoX2Noa2xpc3RfdCAqbGlzdCk7CisKKy8qIGtleSBoYW5kbGlu
ZyAqLworZXh0ZXJuIHNjdHBfa2V5X3QgKnNjdHBfYWxsb2Nfa2V5KHVpbnQzMl90IGtleWxlbik7
CitleHRlcm4gdm9pZCBzY3RwX2ZyZWVfa2V5KHNjdHBfa2V5X3QgKmtleSk7CitleHRlcm4gdm9p
ZCBzY3RwX3ByaW50X2tleShzY3RwX2tleV90ICprZXksIGNvbnN0IGNoYXIgKnN0cik7CitleHRl
cm4gdm9pZCBzY3RwX3Nob3dfa2V5KHNjdHBfa2V5X3QgKmtleSwgY29uc3QgY2hhciAqc3RyKTsK
K2V4dGVybiBzY3RwX2tleV90ICpzY3RwX2dlbmVyYXRlX3JhbmRvbV9rZXkodWludDMyX3Qga2V5
bGVuKTsKK2V4dGVybiBzY3RwX2tleV90ICpzY3RwX3NldF9rZXkodWludDhfdCAqa2V5LCB1aW50
MzJfdCBrZXlsZW4pOworZXh0ZXJuIHNjdHBfa2V5X3QgKnNjdHBfY29tcHV0ZV9oYXNoa2V5KHNj
dHBfa2V5X3QgKmtleTEsIHNjdHBfa2V5X3QgKmtleTIsCisgICAgc2N0cF9rZXlfdCAqc2hhcmVk
KTsKKworLyogc2hhcmVkIGtleSBoYW5kbGluZyAqLworZXh0ZXJuIHNjdHBfc2hhcmVka2V5X3Qg
KnNjdHBfYWxsb2Nfc2hhcmVka2V5KHZvaWQpOworZXh0ZXJuIHZvaWQgc2N0cF9mcmVlX3NoYXJl
ZGtleShzY3RwX3NoYXJlZGtleV90ICpza2V5KTsKK2V4dGVybiBzY3RwX3NoYXJlZGtleV90ICpz
Y3RwX2ZpbmRfc2hhcmVka2V5KHN0cnVjdCBzY3RwX2tleWhlYWQgKnNoYXJlZF9rZXlzLAorICAg
IHVpbnQxNl90IGtleV9pZCk7CitleHRlcm4gaW50IHNjdHBfaW5zZXJ0X3NoYXJlZGtleShzdHJ1
Y3Qgc2N0cF9rZXloZWFkICpzaGFyZWRfa2V5cywKKyAgICBzY3RwX3NoYXJlZGtleV90ICpuZXdf
c2tleSk7CitleHRlcm4gaW50IHNjdHBfY29weV9za2V5bGlzdChjb25zdCBzdHJ1Y3Qgc2N0cF9r
ZXloZWFkICpzcmMsCisgICAgc3RydWN0IHNjdHBfa2V5aGVhZCAqZGVzdCk7CisvKiByZWYgY291
bnRzIG9uIHNoYXJlZCBrZXlzLCBieSBrZXkgaWQgKi8KK2V4dGVybiB2b2lkIHNjdHBfYXV0aF9r
ZXlfYWNxdWlyZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQxNl90IGtleWlkKTsKK2V4dGVy
biB2b2lkIHNjdHBfYXV0aF9rZXlfcmVsZWFzZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQx
Nl90IGtleWlkLAorICAgIGludCBzb19sb2NrZWQpOworCisvKiBobWFjIGxpc3QgaGFuZGxpbmcg
Ki8KK2V4dGVybiBzY3RwX2htYWNsaXN0X3QgKnNjdHBfYWxsb2NfaG1hY2xpc3QodWludDE2X3Qg
bnVtX2htYWNzKTsKK2V4dGVybiB2b2lkIHNjdHBfZnJlZV9obWFjbGlzdChzY3RwX2htYWNsaXN0
X3QgKmxpc3QpOworZXh0ZXJuIGludCBzY3RwX2F1dGhfYWRkX2htYWNpZChzY3RwX2htYWNsaXN0
X3QgKmxpc3QsIHVpbnQxNl90IGhtYWNfaWQpOworZXh0ZXJuIHNjdHBfaG1hY2xpc3RfdCAqc2N0
cF9jb3B5X2htYWNsaXN0KHNjdHBfaG1hY2xpc3RfdCAqbGlzdCk7CitleHRlcm4gc2N0cF9obWFj
bGlzdF90ICpzY3RwX2RlZmF1bHRfc3VwcG9ydGVkX2htYWNsaXN0KHZvaWQpOworZXh0ZXJuIHVp
bnQxNl90IHNjdHBfbmVnb3RpYXRlX2htYWNpZChzY3RwX2htYWNsaXN0X3QgKnBlZXIsCisgICAg
c2N0cF9obWFjbGlzdF90ICpsb2NhbCk7CitleHRlcm4gaW50IHNjdHBfc2VyaWFsaXplX2htYWNs
aXN0KHNjdHBfaG1hY2xpc3RfdCAqbGlzdCwgdWludDhfdCAqcHRyKTsKK2V4dGVybiBpbnQgc2N0
cF92ZXJpZnlfaG1hY19wYXJhbShzdHJ1Y3Qgc2N0cF9hdXRoX2htYWNfYWxnbyAqaG1hY3MsCisg
ICAgdWludDMyX3QgbnVtX2htYWNzKTsKKworZXh0ZXJuIHNjdHBfYXV0aGluZm9fdCAqc2N0cF9h
bGxvY19hdXRoaW5mbyh2b2lkKTsKK2V4dGVybiB2b2lkIHNjdHBfZnJlZV9hdXRoaW5mbyhzY3Rw
X2F1dGhpbmZvX3QgKmF1dGhpbmZvKTsKKworLyoga2V5ZWQtSE1BQyBmdW5jdGlvbnMgKi8KK2V4
dGVybiB1aW50MzJfdCBzY3RwX2dldF9hdXRoX2NodW5rX2xlbih1aW50MTZfdCBobWFjX2FsZ28p
OworZXh0ZXJuIHVpbnQzMl90IHNjdHBfZ2V0X2htYWNfZGlnZXN0X2xlbih1aW50MTZfdCBobWFj
X2FsZ28pOworZXh0ZXJuIHVpbnQzMl90IHNjdHBfaG1hYyh1aW50MTZfdCBobWFjX2FsZ28sIHVp
bnQ4X3QgKmtleSwgdWludDMyX3Qga2V5bGVuLAorICAgIHVpbnQ4X3QgKnRleHQsIHVpbnQzMl90
IHRleHRsZW4sIHVpbnQ4X3QgKmRpZ2VzdCk7CitleHRlcm4gdWludDMyX3Qgc2N0cF9jb21wdXRl
X2htYWModWludDE2X3QgaG1hY19hbGdvLCBzY3RwX2tleV90ICprZXksCisgICAgdWludDhfdCAq
dGV4dCwgdWludDMyX3QgdGV4dGxlbiwgdWludDhfdCAqZGlnZXN0KTsKK2V4dGVybiBpbnQgc2N0
cF9hdXRoX2lzX3N1cHBvcnRlZF9obWFjKHNjdHBfaG1hY2xpc3RfdCAqbGlzdCwgdWludDE2X3Qg
aWQpOworCisvKiBtYnVmIHZlcnNpb25zICovCitleHRlcm4gdWludDMyX3Qgc2N0cF9obWFjX20o
dWludDE2X3QgaG1hY19hbGdvLCB1aW50OF90ICprZXksIHVpbnQzMl90IGtleWxlbiwKKyAgICBz
dHJ1Y3QgbWJ1ZiAqbSwgdWludDMyX3QgbV9vZmZzZXQsIHVpbnQ4X3QgKmRpZ2VzdCwgdWludDMy
X3QgdHJhaWxlcik7CitleHRlcm4gdWludDMyX3Qgc2N0cF9jb21wdXRlX2htYWNfbSh1aW50MTZf
dCBobWFjX2FsZ28sIHNjdHBfa2V5X3QgKmtleSwKKyAgICBzdHJ1Y3QgbWJ1ZiAqbSwgdWludDMy
X3QgbV9vZmZzZXQsIHVpbnQ4X3QgKmRpZ2VzdCk7CisKKy8qCisgKiBhdXRoZW50aWNhdGlvbiBy
b3V0aW5lcworICovCitleHRlcm4gdm9pZCBzY3RwX2NsZWFyX2NhY2hlZGtleXMoc3RydWN0IHNj
dHBfdGNiICpzdGNiLCB1aW50MTZfdCBrZXlpZCk7CitleHRlcm4gdm9pZCBzY3RwX2NsZWFyX2Nh
Y2hlZGtleXNfZXAoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgdWludDE2X3Qga2V5aWQpOworZXh0
ZXJuIGludCBzY3RwX2RlbGV0ZV9zaGFyZWRrZXkoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50
MTZfdCBrZXlpZCk7CitleHRlcm4gaW50IHNjdHBfZGVsZXRlX3NoYXJlZGtleV9lcChzdHJ1Y3Qg
c2N0cF9pbnBjYiAqaW5wLCB1aW50MTZfdCBrZXlpZCk7CitleHRlcm4gaW50IHNjdHBfYXV0aF9z
ZXRhY3RpdmVrZXkoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MTZfdCBrZXlpZCk7CitleHRl
cm4gaW50IHNjdHBfYXV0aF9zZXRhY3RpdmVrZXlfZXAoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwg
dWludDE2X3Qga2V5aWQpOworZXh0ZXJuIGludCBzY3RwX2RlYWN0X3NoYXJlZGtleShzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IsIHVpbnQxNl90IGtleWlkKTsKK2V4dGVybiBpbnQgc2N0cF9kZWFjdF9z
aGFyZWRrZXlfZXAoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgdWludDE2X3Qga2V5aWQpOworCitl
eHRlcm4gdm9pZCBzY3RwX2F1dGhfZ2V0X2Nvb2tpZV9wYXJhbXMoc3RydWN0IHNjdHBfdGNiICpz
dGNiLCBzdHJ1Y3QgbWJ1ZiAqbSwKKyAgICB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0
aCk7CitleHRlcm4gdm9pZCBzY3RwX2ZpbGxfaG1hY19kaWdlc3RfbShzdHJ1Y3QgbWJ1ZiAqbSwg
dWludDMyX3QgYXV0aF9vZmZzZXQsCisgICAgc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqYXV0aCwg
c3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MTZfdCBrZXlfaWQpOworZXh0ZXJuIHN0cnVjdCBt
YnVmICpzY3RwX2FkZF9hdXRoX2NodW5rKHN0cnVjdCBtYnVmICptLCBzdHJ1Y3QgbWJ1ZiAqKm1f
ZW5kLAorICAgIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKiphdXRoX3JldCwgdWludDMyX3QgKm9m
ZnNldCwKKyAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQ4X3QgY2h1bmspOworZXh0ZXJu
IGludCBzY3RwX2hhbmRsZV9hdXRoKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBf
YXV0aF9jaHVuayAqY2gsCisgICAgc3RydWN0IG1idWYgKm0sIHVpbnQzMl90IG9mZnNldCk7Citl
eHRlcm4gdm9pZCBzY3RwX25vdGlmeV9hdXRoZW50aWNhdGlvbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsCisgICAgdWludDMyX3QgaW5kaWNhdGlvbiwgdWludDE2X3Qga2V5aWQsIHVpbnQxNl90IGFs
dF9rZXlpZCwgaW50IHNvX2xvY2tlZCk7CitleHRlcm4gaW50IHNjdHBfdmFsaWRhdGVfaW5pdF9h
dXRoX3BhcmFtcyhzdHJ1Y3QgbWJ1ZiAqbSwgaW50IG9mZnNldCwKKyAgICBpbnQgbGltaXQpOwor
ZXh0ZXJuIHZvaWQgc2N0cF9pbml0aWFsaXplX2F1dGhfcGFyYW1zKHN0cnVjdCBzY3RwX2lucGNi
ICppbnAsCisgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiKTsKKworLyogdGVzdCBmdW5jdGlvbnMg
Ki8KKyNpZmRlZiBTQ1RQX0hNQUNfVEVTVAorZXh0ZXJuIHZvaWQgc2N0cF90ZXN0X2htYWNfc2hh
MSh2b2lkKTsKK2V4dGVybiB2b2lkIHNjdHBfdGVzdF9hdXRoa2V5KHZvaWQpOworI2VuZGlmCisj
ZW5kaWYgLyogX19TQ1RQX0FVVEhfSF9fICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3Rw
bGliL25ldGluZXQvc2N0cF9ic2RfYWRkci5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfYnNkX2FkZHIuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAu
LjgzMjAxNzEyYTQ3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX2JzZF9hZGRyLmMKQEAgLTAsMCArMSw5OTAgQEAKKy8qLQorICogU1BEWC1MaWNl
bnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0y
MDA3LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6
CisgKgorICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBiKSBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBjKSBOZWl0aGVyIHRoZSBuYW1l
IG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgi
JEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0cF9ic2RfYWRkci5jIDM2NjQyNiAyMDIwLTEw
LTA0IDE1OjM3OjM0WiB0dWV4ZW4gJCIpOworI2VuZGlmCisKKyNpbmNsdWRlIDxuZXRpbmV0L3Nj
dHBfb3MuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdmFyLmg+CisjaW5jbHVkZSA8bmV0aW5l
dC9zY3RwX3BjYi5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9oZWFkZXIuaD4KKyNpbmNsdWRl
IDxuZXRpbmV0L3NjdHB1dGlsLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX291dHB1dC5oPgor
I2luY2x1ZGUgPG5ldGluZXQvc2N0cF9ic2RfYWRkci5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0
cF91aW8uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHB1dGlsLmg+CisjaW5jbHVkZSA8bmV0aW5l
dC9zY3RwX3RpbWVyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2FzY29uZi5oPgorI2luY2x1
ZGUgPG5ldGluZXQvc2N0cF9zeXNjdGwuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaW5kYXRh
Lmg+CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KyNpbmNsdWRlIDxzeXMvdW5pc3RkLmg+CisjZW5kaWYKKworLyogRGVjbGFyZSBhbGwgb2Ygb3Vy
IG1hbGxvYyBuYW1lZCB0eXBlcyAqLworTUFMTE9DX0RFRklORShTQ1RQX01fTUFQLCAic2N0cF9t
YXAiLCAic2N0cCBhc29jIG1hcCBkZXNjcmlwdG9yIik7CitNQUxMT0NfREVGSU5FKFNDVFBfTV9T
VFJNSSwgInNjdHBfc3RyaSIsICJzY3RwIHN0cmVhbSBpbiBhcnJheSIpOworTUFMTE9DX0RFRklO
RShTQ1RQX01fU1RSTU8sICJzY3RwX3N0cm8iLCAic2N0cCBzdHJlYW0gb3V0IGFycmF5Iik7CitN
QUxMT0NfREVGSU5FKFNDVFBfTV9BU0NfQUREUiwgInNjdHBfYWFkciIsICJzY3RwIGFzY29uZiBh
ZGRyZXNzIik7CitNQUxMT0NfREVGSU5FKFNDVFBfTV9BU0NfSVQsICJzY3RwX2FfaXQiLCAic2N0
cCBhc2NvbmYgaXRlcmF0b3IiKTsKK01BTExPQ19ERUZJTkUoU0NUUF9NX0FVVEhfQ0wsICJzY3Rw
X2F0Y2wiLCAic2N0cCBhdXRoIGNodW5rbGlzdCIpOworTUFMTE9DX0RFRklORShTQ1RQX01fQVVU
SF9LWSwgInNjdHBfYXRreSIsICJzY3RwIGF1dGgga2V5Iik7CitNQUxMT0NfREVGSU5FKFNDVFBf
TV9BVVRIX0hMLCAic2N0cF9hdGhtIiwgInNjdHAgYXV0aCBobWFjIGxpc3QiKTsKK01BTExPQ19E
RUZJTkUoU0NUUF9NX0FVVEhfSUYsICJzY3RwX2F0aGkiLCAic2N0cCBhdXRoIGluZm8iKTsKK01B
TExPQ19ERUZJTkUoU0NUUF9NX1NUUkVTRVQsICJzY3RwX3N0cmUiLCAic2N0cCBzdHJlYW0gcmVz
ZXQiKTsKK01BTExPQ19ERUZJTkUoU0NUUF9NX0NNU0csICJzY3RwX2Ntc2ciLCAic2N0cCBDTVNH
IGJ1ZmZlciIpOworTUFMTE9DX0RFRklORShTQ1RQX01fQ09QWUFMLCAic2N0cF9jcGFsIiwgInNj
dHAgY29weSBhbGwiKTsKK01BTExPQ19ERUZJTkUoU0NUUF9NX1ZSRiwgInNjdHBfdnJmIiwgInNj
dHAgdnJmIHN0cnVjdCIpOworTUFMTE9DX0RFRklORShTQ1RQX01fSUZBLCAic2N0cF9pZmEiLCAi
c2N0cCBpZmEgc3RydWN0Iik7CitNQUxMT0NfREVGSU5FKFNDVFBfTV9JRk4sICJzY3RwX2lmbiIs
ICJzY3RwIGlmbiBzdHJ1Y3QiKTsKK01BTExPQ19ERUZJTkUoU0NUUF9NX1RJTVcsICJzY3RwX3Rp
bXciLCAic2N0cCB0aW1lIGJsb2NrIik7CitNQUxMT0NfREVGSU5FKFNDVFBfTV9NVlJGLCAic2N0
cF9tdnJmIiwgInNjdHAgbXZyZiBwY2IgbGlzdCIpOworTUFMTE9DX0RFRklORShTQ1RQX01fSVRF
UiwgInNjdHBfaXRlciIsICJzY3RwIGl0ZXJhdG9yIGNvbnRyb2wiKTsKK01BTExPQ19ERUZJTkUo
U0NUUF9NX1NPQ0tPUFQsICJzY3RwX3NvY2tvIiwgInNjdHAgc29ja2V0IG9wdGlvbiIpOworTUFM
TE9DX0RFRklORShTQ1RQX01fTUNPUkUsICJzY3RwX21jb3JlIiwgInNjdHAgbWNvcmUgcXVldWUi
KTsKKworLyogR2xvYmFsIE5PTi1WTkVUIHN0cnVjdHVyZSB0aGF0IGNvbnRyb2xzIHRoZSBpdGVy
YXRvciAqLworc3RydWN0IGl0ZXJhdG9yX2NvbnRyb2wgc2N0cF9pdF9jdGw7CisjaWYgIShkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkKKworc3RhdGljIHZv
aWQKK3NjdHBfY2xlYW51cF9pdHF1ZXVlKHZvaWQpCit7CisJc3RydWN0IHNjdHBfaXRlcmF0b3Ig
Kml0LCAqbml0OworCisJVEFJTFFfRk9SRUFDSF9TQUZFKGl0LCAmc2N0cF9pdF9jdGwuaXRlcmF0
b3JoZWFkLCBzY3RwX254dF9pdHIsIG5pdCkgeworCQlpZiAoaXQtPmZ1bmN0aW9uX2F0ZW5kICE9
IE5VTEwpIHsKKwkJCSgqaXQtPmZ1bmN0aW9uX2F0ZW5kKSAoaXQtPnBvaW50ZXIsIGl0LT52YWwp
OworCQl9CisJCVRBSUxRX1JFTU9WRSgmc2N0cF9pdF9jdGwuaXRlcmF0b3JoZWFkLCBpdCwgc2N0
cF9ueHRfaXRyKTsKKwkJU0NUUF9GUkVFKGl0LCBTQ1RQX01fSVRFUik7CisJfQorfQorI2VuZGlm
CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorLypfX1VzZXJzcGFjZV9fIFRPRE8gaWYgd2Ug
dXNlIHRocmVhZCBiYXNlZCBpdGVyYXRvcgorICogdGhlbiB0aGUgaW1wbGVtZW50YXRpb24gb2Yg
d2FrZXVwIHdpbGwgbmVlZCB0byBjaGFuZ2UuCisgKiBDdXJyZW50bHkgd2UgYXJlIHVzaW5nIHRp
bWVvX2NvbmQgZm9yIGlkZW50IHNvX3RpbWVvCisgKiBidXQgdGhhdCBpcyBub3Qgc3VmZmljaWVu
dCBpZiB3ZSBuZWVkIHRvIHVzZSBhbm90aGVyIGlkZW50CisgKiBsaWtlIHdha2V1cCgmc2N0cHBj
YmluZm8uaXRlcmF0b3JfcnVubmluZyk7CisgKi8KKyNlbmRpZgorCit2b2lkCitzY3RwX3dha2V1
cF9pdGVyYXRvcih2b2lkKQoreworI2lmIGRlZmluZWQoU0NUUF9QUk9DRVNTX0xFVkVMX0xPQ0tT
KQorI2lmIGRlZmluZWQoX1dJTjMyKQorCVdha2VBbGxDb25kaXRpb25WYXJpYWJsZSgmc2N0cF9p
dF9jdGwuaXRlcmF0b3Jfd2FrZXVwKTsKKyNlbHNlCisJcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgm
c2N0cF9pdF9jdGwuaXRlcmF0b3Jfd2FrZXVwKTsKKyNlbmRpZgorI2Vsc2UKKwl3YWtldXAoJnNj
dHBfaXRfY3RsLml0ZXJhdG9yX3J1bm5pbmcpOworI2VuZGlmCit9CisKKyNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCitzdGF0aWMgdm9pZCAqCisjZWxzZQorc3RhdGljIHZvaWQKKyNlbmRpZgor
c2N0cF9pdGVyYXRvcl90aHJlYWQodm9pZCAqdiBTQ1RQX1VOVVNFRCkKK3sKKyNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCisJc2N0cF91c2Vyc3BhY2Vfc2V0X3RocmVhZG5hbWUoIlNDVFAgaXRl
cmF0b3IiKTsKKyNlbmRpZgorCVNDVFBfSVBJX0lURVJBVE9SX1dRX0xPQ0soKTsKKwkvKiBJbiBG
cmVlQlNEIHRoaXMgdGhyZWFkIG5ldmVyIHRlcm1pbmF0ZXMuICovCisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlmb3IgKDs7KSB7CisjZWxzZQor
CXdoaWxlICgoc2N0cF9pdF9jdGwuaXRlcmF0b3JfZmxhZ3MgJiBTQ1RQX0lURVJBVE9SX01VU1Rf
RVhJVCkgPT0gMCkgeworI2VuZGlmCisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJbXNs
ZWVwKCZzY3RwX2l0X2N0bC5pdGVyYXRvcl9ydW5uaW5nLAorI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pCisJCSAgICAgICAmc2N0cF9pdF9jdGwuaXBpX2l0ZXJhdG9yX3dxX210eCwKKyNlbGlmIGRl
ZmluZWQoX19BUFBMRV9fKQorCQkgICAgICAgc2N0cF9pdF9jdGwuaXBpX2l0ZXJhdG9yX3dxX210
eCwKKyNlbmRpZgorCQkgICAgICAgMCwgIndhaXRpbmdfZm9yX3dvcmsiLCAwKTsKKyNlbHNlCisj
aWYgZGVmaW5lZChfV0lOMzIpCisJCVNsZWVwQ29uZGl0aW9uVmFyaWFibGVDUygmc2N0cF9pdF9j
dGwuaXRlcmF0b3Jfd2FrZXVwLCAmc2N0cF9pdF9jdGwuaXBpX2l0ZXJhdG9yX3dxX210eCwgSU5G
SU5JVEUpOworI2Vsc2UKKwkJcHRocmVhZF9jb25kX3dhaXQoJnNjdHBfaXRfY3RsLml0ZXJhdG9y
X3dha2V1cCwgJnNjdHBfaXRfY3RsLmlwaV9pdGVyYXRvcl93cV9tdHgpOworI2VuZGlmCisjZW5k
aWYKKyNpZiAhKGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18p
KQorCQlpZiAoc2N0cF9pdF9jdGwuaXRlcmF0b3JfZmxhZ3MgJiBTQ1RQX0lURVJBVE9SX01VU1Rf
RVhJVCkgeworCQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCQlzY3RwX2l0ZXJhdG9yX3dvcmtlcigp
OworCX0KKyNpZiAhKGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNl
X18pKQorCS8qIE5vdyB0aGlzIHRocmVhZCBuZWVkcyB0byBiZSB0ZXJtaW5hdGVkICovCisJc2N0
cF9jbGVhbnVwX2l0cXVldWUoKTsKKwlzY3RwX2l0X2N0bC5pdGVyYXRvcl9mbGFncyB8PSBTQ1RQ
X0lURVJBVE9SX0VYSVRFRDsKKwlTQ1RQX0lQSV9JVEVSQVRPUl9XUV9VTkxPQ0soKTsKKyNpZiBk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJc2N0cF93YWtldXBfaXRlcmF0b3IoKTsKKwlyZXR1cm4g
KE5VTEwpOworI2Vsc2UKKwl3YWtldXAoJnNjdHBfaXRfY3RsLml0ZXJhdG9yX2ZsYWdzKTsKKwl0
aHJlYWRfdGVybWluYXRlKGN1cnJlbnRfdGhyZWFkKCkpOworI2lmZGVmIElOVkFSSUFOVFMKKwlw
YW5pYygiSG1tLiB0aHJlYWRfdGVybWluYXRlKCkgY29udGludWVzLi4uIik7CisjZW5kaWYKKyNl
bmRpZgorI2VuZGlmCit9CisKK3ZvaWQKK3NjdHBfc3RhcnR1cF9pdGVyYXRvcih2b2lkKQorewor
CWlmIChzY3RwX2l0X2N0bC50aHJlYWRfcHJvYykgeworCQkvKiBZb3Ugb25seSBnZXQgb25lICov
CisJCXJldHVybjsKKwl9CisJLyogSW5pdGlhbGl6ZSBnbG9iYWwgbG9ja3MgaGVyZSwgdGh1cyBv
bmx5IG9uY2UuICovCisJU0NUUF9JVEVSQVRPUl9MT0NLX0lOSVQoKTsKKwlTQ1RQX0lQSV9JVEVS
QVRPUl9XUV9JTklUKCk7CisJVEFJTFFfSU5JVCgmc2N0cF9pdF9jdGwuaXRlcmF0b3JoZWFkKTsK
KyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaWYgKHNjdHBfdXNlcnNwYWNlX3RocmVhZF9j
cmVhdGUoJnNjdHBfaXRfY3RsLnRocmVhZF9wcm9jLCAmc2N0cF9pdGVyYXRvcl90aHJlYWQpKSB7
CisJCVNDVFBfUFJJTlRGKCJFUlJPUjogQ3JlYXRpbmcgc2N0cF9pdGVyYXRvcl90aHJlYWQgZmFp
bGVkLlxuIik7CisJfSBlbHNlIHsKKwkJU0NUUF9CQVNFX1ZBUihpdGVyYXRvcl90aHJlYWRfc3Rh
cnRlZCkgPSAxOworCX0KKyNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18pCisJa3Byb2NfY3JlYXRl
KHNjdHBfaXRlcmF0b3JfdGhyZWFkLAorCSAgICAgICAgICAgICAodm9pZCAqKU5VTEwsCisJICAg
ICAgICAgICAgICZzY3RwX2l0X2N0bC50aHJlYWRfcHJvYywKKwkgICAgICAgICAgICAgMCwKKwkg
ICAgICAgICAgICAgU0NUUF9LVEhSRUFEX1BBR0VTLAorCSAgICAgICAgICAgICBTQ1RQX0tUUkhF
QURfTkFNRSk7CisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwlrZXJuZWxfdGhyZWFkX3N0YXJ0
KCh0aHJlYWRfY29udGludWVfdClzY3RwX2l0ZXJhdG9yX3RocmVhZCwgTlVMTCwgJnNjdHBfaXRf
Y3RsLnRocmVhZF9wcm9jKTsKKyNlbmRpZgorfQorCisjaWZkZWYgSU5FVDYKKworI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKy8qIF9fVXNlcnNwYWNlX18gVE9ETy4gc3RydWN0IGluNl9pZmFk
ZHIgaXMgZGVmaW5lZCBpbiBzeXMvbmV0aW5ldDYvaW42X3Zhci5oCisgICBpcDZfdXNlX2RlcHJl
Y2F0ZWQgaXMgZGVmaW5lZCBhcyAgaW50IGlwNl91c2VfZGVwcmVjYXRlZCA9IDE7IGluIC9zcmMv
c3lzL25ldGluZXQ2L2luNl9wcm90by5jCisgKi8KK3ZvaWQKK3NjdHBfZ2F0aGVyX2ludGVybmFs
X2lmYV9mbGFncyhzdHJ1Y3Qgc2N0cF9pZmEgKmlmYSkKK3sKKyAgICByZXR1cm47IC8qIHN0dWIg
Ki8KK30KKyNlbHNlCit2b2lkCitzY3RwX2dhdGhlcl9pbnRlcm5hbF9pZmFfZmxhZ3Moc3RydWN0
IHNjdHBfaWZhICppZmEpCit7CisJc3RydWN0IGluNl9pZmFkZHIgKmlmYTY7CisKKwlpZmE2ID0g
KHN0cnVjdCBpbjZfaWZhZGRyICopaWZhLT5pZmE7CisJaWZhLT5mbGFncyA9IGlmYTYtPmlhNl9m
bGFnczsKKwlpZiAoIU1PRFVMRV9HTE9CQUwoaXA2X3VzZV9kZXByZWNhdGVkKSkgeworCQlpZiAo
aWZhLT5mbGFncyAmCisJCSAgICBJTjZfSUZGX0RFUFJFQ0FURUQpIHsKKwkJCWlmYS0+bG9jYWxp
ZmFfZmxhZ3MgfD0gU0NUUF9BRERSX0lGQV9VTlVTRUFCTEU7CisJCX0gZWxzZSB7CisJCQlpZmEt
PmxvY2FsaWZhX2ZsYWdzICY9IH5TQ1RQX0FERFJfSUZBX1VOVVNFQUJMRTsKKwkJfQorCX0gZWxz
ZSB7CisJCWlmYS0+bG9jYWxpZmFfZmxhZ3MgJj0gflNDVFBfQUREUl9JRkFfVU5VU0VBQkxFOwor
CX0KKwlpZiAoaWZhLT5mbGFncyAmCisJICAgIChJTjZfSUZGX0RFVEFDSEVEIHwKKwkgICAgIElO
Nl9JRkZfQU5ZQ0FTVCB8CisJICAgICBJTjZfSUZGX05PVFJFQURZKSkgeworCQlpZmEtPmxvY2Fs
aWZhX2ZsYWdzIHw9IFNDVFBfQUREUl9JRkFfVU5VU0VBQkxFOworCX0gZWxzZSB7CisJCWlmYS0+
bG9jYWxpZmFfZmxhZ3MgJj0gflNDVFBfQUREUl9JRkFfVU5VU0VBQkxFOworCX0KK30KKyNlbmRp
ZiAvKiBfX1VzZXJzcGFjZV9fICovCisjZW5kaWYgLyogSU5FVDYgKi8KKworI2lmICFkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCitzdGF0aWMgdWludDMyX3QKK3NjdHBfaXNfZGVzaXJlZF9pbnRlcmZh
Y2VfdHlwZShzdHJ1Y3QgaWZuZXQgKmlmbikKK3sKKwlpbnQgcmVzdWx0OworCisJLyogY2hlY2sg
dGhlIGludGVyZmFjZSB0eXBlIHRvIHNlZSBpZiBpdCdzIG9uZSB3ZSBjYXJlIGFib3V0ICovCisj
aWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJc3dpdGNo
KGlmbmV0X3R5cGUoaWZuKSkgeworI2Vsc2UKKwlzd2l0Y2ggKGlmbi0+aWZfdHlwZSkgeworI2Vu
ZGlmCisJY2FzZSBJRlRfRVRIRVI6CisJY2FzZSBJRlRfSVNPODgwMjM6CisJY2FzZSBJRlRfSVNP
ODgwMjQ6CisJY2FzZSBJRlRfSVNPODgwMjU6CisJY2FzZSBJRlRfSVNPODgwMjY6CisJY2FzZSBJ
RlRfU1RBUkxBTjoKKwljYXNlIElGVF9QMTA6CisJY2FzZSBJRlRfUDgwOgorCWNhc2UgSUZUX0hZ
OgorCWNhc2UgSUZUX0ZEREk6CisJY2FzZSBJRlRfWEVUSEVSOgorCWNhc2UgSUZUX0lTRE5CQVNJ
QzoKKwljYXNlIElGVF9JU0ROUFJJTUFSWToKKwljYXNlIElGVF9QVFBTRVJJQUw6CisJY2FzZSBJ
RlRfT1RIRVI6CisJY2FzZSBJRlRfUFBQOgorCWNhc2UgSUZUX0xPT1A6CisJY2FzZSBJRlRfU0xJ
UDoKKwljYXNlIElGVF9HSUY6CisJY2FzZSBJRlRfTDJWTEFOOgorCWNhc2UgSUZUX1NURjoKKyNp
ZiAhKGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkKKwljYXNl
IElGVF9JUDoKKwljYXNlIElGVF9JUE9WRVJDRExDOgorCWNhc2UgSUZUX0lQT1ZFUkNMQVc6CisJ
Y2FzZSBJRlRfUFJPUFZJUlRVQUw6IC8qIE5ldEdyYXBoIFZpcnR1YWwgdG9vICovCisJY2FzZSBJ
RlRfVklSVFVBTElQQUREUkVTUzoKKyNlbmRpZgorCQlyZXN1bHQgPSAxOworCQlicmVhazsKKwlk
ZWZhdWx0OgorCQlyZXN1bHQgPSAwOworCX0KKworCXJldHVybiAocmVzdWx0KTsKK30KKyNlbmRp
ZgorI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCitp
bnQKK3NjdHBfaXNfdm13YXJlX2ludGVyZmFjZShzdHJ1Y3QgaWZuZXQgKmlmbikKK3sKKwlyZXR1
cm4gKHN0cm5jbXAoaWZuZXRfbmFtZShpZm4pLCAidm1uZXQiLCA1KSA9PSAwKTsKK30KKworI2Vu
ZGlmCisKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lm
ZGVmIE1BTExPQworI3VuZGVmIE1BTExPQworI2RlZmluZSBNQUxMT0MoeCkgSGVhcEFsbG9jKEdl
dFByb2Nlc3NIZWFwKCksIDAsICh4KSkKKyNlbmRpZgorI2lmZGVmIEZSRUUKKyN1bmRlZiBGUkVF
CisjZGVmaW5lIEZSRUUoeCkgSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwgMCwgKHgpKQorI2Vu
ZGlmCitzdGF0aWMgdm9pZAorc2N0cF9pbml0X2lmbnNfZm9yX3ZyZihpbnQgdnJmaWQpCit7Cisj
aWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQorCXN0cnVjdCBzY3RwX2lmYSAqc2N0
cF9pZmE7CisJRFdPUkQgRXJyLCBBZGFwdGVyQWRkcnNTaXplOworCVBJUF9BREFQVEVSX0FERFJF
U1NFUyBwQWRhcHRlckFkZHJzLCBwQWRhcHQ7CisJUElQX0FEQVBURVJfVU5JQ0FTVF9BRERSRVNT
IHBVbmljYXN0OworI2VuZGlmCisKKyNpZmRlZiBJTkVUCisJQWRhcHRlckFkZHJzU2l6ZSA9IDA7
CisKKwlpZiAoKEVyciA9IEdldEFkYXB0ZXJzQWRkcmVzc2VzKEFGX0lORVQsIDAsIE5VTEwsIE5V
TEwsICZBZGFwdGVyQWRkcnNTaXplKSkgIT0gMCkgeworCQlpZiAoKEVyciAhPSBFUlJPUl9CVUZG
RVJfT1ZFUkZMT1cpICYmIChFcnIgIT0gRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUikpIHsKKwkJ
CVNDVFBfUFJJTlRGKCJHZXRBZGFwdGVyc1Y0QWRkcmVzc2VzKCkgc2l6aW5nIGZhaWxlZCB3aXRo
IGVycm9yIGNvZGUgJWRcbiIsIEVycik7CisJCQlTQ1RQX1BSSU5URigiZXJyID0gJWQ7IEFkYXB0
ZXJBZGRyc1NpemUgPSAlZFxuIiwgRXJyLCBBZGFwdGVyQWRkcnNTaXplKTsKKwkJCXJldHVybjsK
KwkJfQorCX0KKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmcm9tIHNpemluZyBpbmZvcm1hdGlvbiAq
LworCWlmICgocEFkYXB0ZXJBZGRycyA9IChQSVBfQURBUFRFUl9BRERSRVNTRVMpIEdsb2JhbEFs
bG9jKEdQVFIsIEFkYXB0ZXJBZGRyc1NpemUpKSA9PSBOVUxMKSB7CisJCVNDVFBfUFJJTlRGKCJN
ZW1vcnkgYWxsb2NhdGlvbiBlcnJvciFcbiIpOworCQlyZXR1cm47CisJfQorCS8qIEdldCBhY3R1
YWwgYWRhcHRlciBpbmZvcm1hdGlvbiAqLworCWlmICgoRXJyID0gR2V0QWRhcHRlcnNBZGRyZXNz
ZXMoQUZfSU5FVCwgMCwgTlVMTCwgcEFkYXB0ZXJBZGRycywgJkFkYXB0ZXJBZGRyc1NpemUpKSAh
PSBFUlJPUl9TVUNDRVNTKSB7CisJCVNDVFBfUFJJTlRGKCJHZXRBZGFwdGVyc1Y0QWRkcmVzc2Vz
KCkgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgRXJyKTsKKwkJRlJFRShwQWRhcHRlckFk
ZHJzKTsKKwkJcmV0dXJuOworCX0KKwkvKiBFbnVtZXJhdGUgdGhyb3VnaCBlYWNoIHJldHVybmVk
IGFkYXB0ZXIgYW5kIHNhdmUgaXRzIGluZm9ybWF0aW9uICovCisJZm9yIChwQWRhcHQgPSBwQWRh
cHRlckFkZHJzOyBwQWRhcHQ7IHBBZGFwdCA9IHBBZGFwdC0+TmV4dCkgeworCQlpZiAocEFkYXB0
LT5JZlR5cGUgPT0gSUZfVFlQRV9JRUVFODAyMTEgfHwgcEFkYXB0LT5JZlR5cGUgPT0gSUZfVFlQ
RV9FVEhFUk5FVF9DU01BQ0QpIHsKKwkJCWZvciAocFVuaWNhc3QgPSBwQWRhcHQtPkZpcnN0VW5p
Y2FzdEFkZHJlc3M7IHBVbmljYXN0OyBwVW5pY2FzdCA9IHBVbmljYXN0LT5OZXh0KSB7CisJCQkJ
aWYgKElONF9JU0xJTktMT0NBTF9BRERSRVNTKCYoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikocFVu
aWNhc3QtPkFkZHJlc3MubHBTb2NrYWRkcikpLT5zaW5fYWRkcikpKSB7CisJCQkJCWNvbnRpbnVl
OworCQkJCX0KKwkJCQlzY3RwX2lmYSA9IHNjdHBfYWRkX2FkZHJfdG9fdnJmKDAsCisJCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorCQkJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcEFkYXB0LT5JZkluZGV4LAorCQkJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHBBZGFwdC0+SWZUeXBlID09IElGX1RZUEVfSUVFRTgwMjExKT9NSUJfSUZf
VFlQRV9FVEhFUk5FVDpwQWRhcHQtPklmVHlwZSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBBZGFwdC0+QWRhcHRlck5hbWUsCisJCQkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOVUxMLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFVu
aWNhc3QtPkFkZHJlc3MubHBTb2NrYWRkciwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBBZGFwdC0+RmxhZ3MsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwKTsKKwkJCQlpZiAoc2N0cF9pZmEpIHsKKwkJCQkJc2N0cF9pZmEtPmxvY2FsaWZhX2ZsYWdz
ICY9IH5TQ1RQX0FERFJfREVGRVJfVVNFOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlGUkVFKHBB
ZGFwdGVyQWRkcnMpOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwlBZGFwdGVyQWRkcnNTaXplID0g
MDsKKworCWlmICgoRXJyID0gR2V0QWRhcHRlcnNBZGRyZXNzZXMoQUZfSU5FVDYsIDAsIE5VTEws
IE5VTEwsICZBZGFwdGVyQWRkcnNTaXplKSkgIT0gMCkgeworCQlpZiAoKEVyciAhPSBFUlJPUl9C
VUZGRVJfT1ZFUkZMT1cpICYmIChFcnIgIT0gRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUikpIHsK
KwkJCVNDVFBfUFJJTlRGKCJHZXRBZGFwdGVyc1Y2QWRkcmVzc2VzKCkgc2l6aW5nIGZhaWxlZCB3
aXRoIGVycm9yIGNvZGUgJWRcbiIsIEVycik7CisJCQlTQ1RQX1BSSU5URigiZXJyID0gJWQ7IEFk
YXB0ZXJBZGRyc1NpemUgPSAlZFxuIiwgRXJyLCBBZGFwdGVyQWRkcnNTaXplKTsKKwkJCXJldHVy
bjsKKwkJfQorCX0KKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZnJvbSBzaXppbmcgaW5mb3JtYXRpb24g
Ki8KKwlpZiAoKHBBZGFwdGVyQWRkcnMgPSAoUElQX0FEQVBURVJfQUREUkVTU0VTKSBHbG9iYWxB
bGxvYyhHUFRSLCBBZGFwdGVyQWRkcnNTaXplKSkgPT0gTlVMTCkgeworCQlTQ1RQX1BSSU5URigi
TWVtb3J5IGFsbG9jYXRpb24gZXJyb3IhXG4iKTsKKwkJcmV0dXJuOworCX0KKwkvKiBHZXQgYWN0
dWFsIGFkYXB0ZXIgaW5mb3JtYXRpb24gKi8KKwlpZiAoKEVyciA9IEdldEFkYXB0ZXJzQWRkcmVz
c2VzKEFGX0lORVQ2LCAwLCBOVUxMLCBwQWRhcHRlckFkZHJzLCAmQWRhcHRlckFkZHJzU2l6ZSkp
ICE9IEVSUk9SX1NVQ0NFU1MpIHsKKwkJU0NUUF9QUklOVEYoIkdldEFkYXB0ZXJzVjZBZGRyZXNz
ZXMoKSBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCBFcnIpOworCQlGUkVFKHBBZGFwdGVy
QWRkcnMpOworCQlyZXR1cm47CisJfQorCS8qIEVudW1lcmF0ZSB0aHJvdWdoIGVhY2ggcmV0dXJu
ZWQgYWRhcHRlciBhbmQgc2F2ZSBpdHMgaW5mb3JtYXRpb24gKi8KKwlmb3IgKHBBZGFwdCA9IHBB
ZGFwdGVyQWRkcnM7IHBBZGFwdDsgcEFkYXB0ID0gcEFkYXB0LT5OZXh0KSB7CisJCWlmIChwQWRh
cHQtPklmVHlwZSA9PSBJRl9UWVBFX0lFRUU4MDIxMSB8fCBwQWRhcHQtPklmVHlwZSA9PSBJRl9U
WVBFX0VUSEVSTkVUX0NTTUFDRCkgeworCQkJZm9yIChwVW5pY2FzdCA9IHBBZGFwdC0+Rmlyc3RV
bmljYXN0QWRkcmVzczsgcFVuaWNhc3Q7IHBVbmljYXN0ID0gcFVuaWNhc3QtPk5leHQpIHsKKwkJ
CQlzY3RwX2lmYSA9IHNjdHBfYWRkX2FkZHJfdG9fdnJmKDAsCisJCQkJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOVUxMLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcEFkYXB0LT5JcHY2SWZJbmRleCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChwQWRhcHQtPklmVHlwZSA9PSBJRl9UWVBFX0lFRUU4MDIxMSk/TUlCX0lGX1RZUEVfRVRI
RVJORVQ6cEFkYXB0LT5JZlR5cGUsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwQWRhcHQtPkFkYXB0ZXJOYW1lLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTlVMTCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBVbmljYXN0LT5B
ZGRyZXNzLmxwU29ja2FkZHIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
QWRhcHQtPkZsYWdzLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisJ
CQkJaWYgKHNjdHBfaWZhKSB7CisJCQkJCXNjdHBfaWZhLT5sb2NhbGlmYV9mbGFncyAmPSB+U0NU
UF9BRERSX0RFRkVSX1VTRTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJRlJFRShwQWRhcHRlckFk
ZHJzKTsKKyNlbmRpZgorfQorI2VsaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorc3RhdGljIHZv
aWQKK3NjdHBfaW5pdF9pZm5zX2Zvcl92cmYoaW50IHZyZmlkKQoreworI2lmIGRlZmluZWQoSU5F
VCkgfHwgZGVmaW5lZChJTkVUNikKKwlpbnQgcmM7CisJc3RydWN0IGlmYWRkcnMgKmlmYSwgKmlm
YXM7CisJc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYTsKKwl1aW50MzJfdCBpZmFfZmxhZ3M7CisK
KwlyYyA9IGdldGlmYWRkcnMoJmlmYXMpOworCWlmIChyYyAhPSAwKSB7CisJCXJldHVybjsKKwl9
CisJZm9yIChpZmEgPSBpZmFzOyBpZmE7IGlmYSA9IGlmYS0+aWZhX25leHQpIHsKKwkJaWYgKGlm
YS0+aWZhX2FkZHIgPT0gTlVMTCkgeworCQkJY29udGludWU7CisJCX0KKyNpZiAhZGVmaW5lZChJ
TkVUKQorCQlpZiAoaWZhLT5pZmFfYWRkci0+c2FfZmFtaWx5ICE9IEFGX0lORVQ2KSB7CisJCQkv
KiBub24gaW5ldDYgc2tpcCAqLworCQkJY29udGludWU7CisJCX0KKyNlbGlmICFkZWZpbmVkKElO
RVQ2KQorCQlpZiAoaWZhLT5pZmFfYWRkci0+c2FfZmFtaWx5ICE9IEFGX0lORVQpIHsKKwkJCS8q
IG5vbiBpbmV0IHNraXAgKi8KKwkJCWNvbnRpbnVlOworCQl9CisjZWxzZQorCQlpZiAoKGlmYS0+
aWZhX2FkZHItPnNhX2ZhbWlseSAhPSBBRl9JTkVUKSAmJiAoaWZhLT5pZmFfYWRkci0+c2FfZmFt
aWx5ICE9IEFGX0lORVQ2KSkgeworCQkJLyogbm9uIGluZXQvaW5ldDYgc2tpcCAqLworCQkJY29u
dGludWU7CisJCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoSU5FVDYpCisJCWlmICgoaWZhLT5pZmFf
YWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSAmJgorCQkgICAgSU42X0lTX0FERFJfVU5TUEVD
SUZJRUQoJigoc3RydWN0IHNvY2thZGRyX2luNiAqKWlmYS0+aWZhX2FkZHIpLT5zaW42X2FkZHIp
KSB7CisJCQkvKiBza2lwIHVuc3BlY2lmZWQgYWRkcmVzc2VzICovCisJCQljb250aW51ZTsKKwkJ
fQorI2VuZGlmCisjaWYgZGVmaW5lZChJTkVUKQorCQlpZiAoaWZhLT5pZmFfYWRkci0+c2FfZmFt
aWx5ID09IEFGX0lORVQgJiYKKwkJICAgICgoc3RydWN0IHNvY2thZGRyX2luICopaWZhLT5pZmFf
YWRkciktPnNpbl9hZGRyLnNfYWRkciA9PSAwKSB7CisJCQljb250aW51ZTsKKwkJfQorI2VuZGlm
CisJCWlmYV9mbGFncyA9IDA7CisJCXNjdHBfaWZhID0gc2N0cF9hZGRfYWRkcl90b192cmYodnJm
aWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKwkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZl9uYW1ldG9pbmRleChpZmEtPmlmYV9uYW1lKSwKKwkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmYS0+aWZhX25hbWUsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTlVMTCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmEtPmlmYV9h
ZGRyLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmYV9mbGFncywKKwkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKwkJaWYgKHNjdHBfaWZhKSB7CisJCQlz
Y3RwX2lmYS0+bG9jYWxpZmFfZmxhZ3MgJj0gflNDVFBfQUREUl9ERUZFUl9VU0U7CisJCX0KKwl9
CisJZnJlZWlmYWRkcnMoaWZhcyk7CisjZW5kaWYKK30KKyNlbmRpZgorI2lmIGRlZmluZWQoX19B
UFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorc3RhdGljIHZvaWQKK3NjdHBfaW5p
dF9pZm5zX2Zvcl92cmYoaW50IHZyZmlkKQoreworCS8qIEhlcmUgd2UgbXVzdCBhcHBseSBBTlkg
bG9ja3MgbmVlZGVkIGJ5IHRoZQorCSAqIElGTiB3ZSBhY2Nlc3MgYW5kIGFsc28gbWFrZSBzdXJl
IHdlIGxvY2sKKwkgKiBhbnkgSUZBIHRoYXQgZXhpc3RzIGFzIHdlIGZsb2F0IHRocm91Z2ggdGhl
CisJICogbGlzdCBvZiBJRkEncworCSAqLworCXN0cnVjdCBpZm5ldCAqKmlmbmV0bGlzdDsKKwl1
aW50MzJfdCBpLCBqLCBjb3VudDsKKwljaGFyIG5hbWVbU0NUUF9JRk5BTVNJWl07CisJc3RydWN0
IGlmbmV0ICppZm47CisJc3RydWN0IGlmYWRkciAqKmlmYWRkcmxpc3Q7CisJc3RydWN0IGlmYWRk
ciAqaWZhOworCXN0cnVjdCBpbjZfaWZhZGRyICppZmE2OworCXN0cnVjdCBzY3RwX2lmYSAqc2N0
cF9pZmE7CisJdWludDMyX3QgaWZhX2ZsYWdzOworCisJaWYgKGlmbmV0X2xpc3RfZ2V0KElGTkVU
X0ZBTUlMWV9BTlksICZpZm5ldGxpc3QsICZjb3VudCkgIT0gMCkgeworCQlyZXR1cm47CisJfQor
CWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmbiA9IGlmbmV0bGlzdFtpXTsKKwkJ
aWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pZ25vcmVfdm13YXJlX2ludGVyZmFjZXMpICYmIHNj
dHBfaXNfdm13YXJlX2ludGVyZmFjZShpZm4pKSB7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAo
c2N0cF9pc19kZXNpcmVkX2ludGVyZmFjZV90eXBlKGlmbikgPT0gMCkgeworCQkJLyogbm9uIGRl
c2lyZWQgdHlwZSAqLworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGlmbmV0X2dldF9hZGRyZXNz
X2xpc3QoaWZuLCAmaWZhZGRybGlzdCkgIT0gMCkgeworCQkJY29udGludWU7CisJCX0KKwkJZm9y
IChqID0gMDsgaWZhZGRybGlzdFtqXSAhPSBOVUxMOyBqKyspIHsKKwkJCWlmYSA9IGlmYWRkcmxp
c3Rbal07CisJCQlpZiAoaWZhLT5pZmFfYWRkciA9PSBOVUxMKSB7CisJCQkJY29udGludWU7CisJ
CQl9CisJCQlpZiAoKGlmYS0+aWZhX2FkZHItPnNhX2ZhbWlseSAhPSBBRl9JTkVUKSAmJiAoaWZh
LT5pZmFfYWRkci0+c2FfZmFtaWx5ICE9IEFGX0lORVQ2KSkgeworCQkJCS8qIG5vbiBpbmV0L2lu
ZXQ2IHNraXAgKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChpZmEtPmlmYV9hZGRyLT5z
YV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCQlpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQo
Jigoc3RydWN0IHNvY2thZGRyX2luNiAqKWlmYS0+aWZhX2FkZHIpLT5zaW42X2FkZHIpKSB7CisJ
CQkJCS8qIHNraXAgdW5zcGVjaWZlZCBhZGRyZXNzZXMgKi8KKwkJCQkJY29udGludWU7CisJCQkJ
fQorCQkJfSBlbHNlIHsKKwkJCQlpZiAoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilpZmEtPmlmYV9h
ZGRyKS0+c2luX2FkZHIuc19hZGRyID09IElOQUREUl9BTlkpIHsKKwkJCQkJY29udGludWU7CisJ
CQkJfQorCQkJfQorCQkJaWYgKGlmYS0+aWZhX2FkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikg
eworCQkJCWlmYTYgPSAoc3RydWN0IGluNl9pZmFkZHIgKilpZmE7CisJCQkJaWZhX2ZsYWdzID0g
aWZhNi0+aWE2X2ZsYWdzOworCQkJfSBlbHNlIHsKKwkJCQlpZmFfZmxhZ3MgPSAwOworCQkJfQor
CQkJU0NUUF9TTlBSSU5URihuYW1lLCBTQ1RQX0lGTkFNU0laLCAiJXMlZCIsIGlmbmV0X25hbWUo
aWZuKSwgaWZuZXRfdW5pdChpZm4pKTsKKwkJCXNjdHBfaWZhID0gc2N0cF9hZGRfYWRkcl90b192
cmYodnJmaWQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopaWZu
LCAvKiBYWFggKi8KKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZuZXRfaW5k
ZXgoaWZuKSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZuZXRfdHlwZShp
Zm4pLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAorCQkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKWlmYSwgLyogWFhYICovCisJCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmYS0+aWZhX2FkZHIsCisJCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmYV9mbGFncywKKwkJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCk7CisJCQlpZiAoc2N0cF9pZmEpIHsKKwkJCQlzY3RwX2lmYS0+bG9jYWxp
ZmFfZmxhZ3MgJj0gflNDVFBfQUREUl9ERUZFUl9VU0U7CisJCQl9CisJCX0KKwkJaWZuZXRfZnJl
ZV9hZGRyZXNzX2xpc3QoaWZhZGRybGlzdCk7CisJfQorCWlmbmV0X2xpc3RfZnJlZShpZm5ldGxp
c3QpOworfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19V
c2Vyc3BhY2VfXykKK3N0YXRpYyB2b2lkCitzY3RwX2luaXRfaWZuc19mb3JfdnJmKGludCB2cmZp
ZCkKK3sKKwkvKiBIZXJlIHdlIG11c3QgYXBwbHkgQU5ZIGxvY2tzIG5lZWRlZCBieSB0aGUKKwkg
KiBJRk4gd2UgYWNjZXNzIGFuZCBhbHNvIG1ha2Ugc3VyZSB3ZSBsb2NrCisJICogYW55IElGQSB0
aGF0IGV4aXN0cyBhcyB3ZSBmbG9hdCB0aHJvdWdoIHRoZQorCSAqIGxpc3Qgb2YgSUZBJ3MKKwkg
Ki8KKwlzdHJ1Y3QgZXBvY2hfdHJhY2tlciBldDsKKwlzdHJ1Y3QgaWZuZXQgKmlmbjsKKwlzdHJ1
Y3QgaWZhZGRyICppZmE7CisJc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYTsKKwl1aW50MzJfdCBp
ZmFfZmxhZ3M7CisjaWZkZWYgSU5FVDYKKwlzdHJ1Y3QgaW42X2lmYWRkciAqaWZhNjsKKyNlbmRp
ZgorCisJSUZORVRfUkxPQ0soKTsKKwlORVRfRVBPQ0hfRU5URVIoZXQpOworCUNLX1NUQUlMUV9G
T1JFQUNIKGlmbiwgJk1PRFVMRV9HTE9CQUwoaWZuZXQpLCBpZl9saW5rKSB7CisJCWlmIChzY3Rw
X2lzX2Rlc2lyZWRfaW50ZXJmYWNlX3R5cGUoaWZuKSA9PSAwKSB7CisJCQkvKiBub24gZGVzaXJl
ZCB0eXBlICovCisJCQljb250aW51ZTsKKwkJfQorCQlDS19TVEFJTFFfRk9SRUFDSChpZmEsICZp
Zm4tPmlmX2FkZHJoZWFkLCBpZmFfbGluaykgeworCQkJaWYgKGlmYS0+aWZhX2FkZHIgPT0gTlVM
TCkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc3dpdGNoIChpZmEtPmlmYV9hZGRyLT5zYV9m
YW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQljYXNlIEFGX0lORVQ6CisJCQkJaWYgKCgoc3RydWN0
IHNvY2thZGRyX2luICopaWZhLT5pZmFfYWRkciktPnNpbl9hZGRyLnNfYWRkciA9PSAwKSB7CisJ
CQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJ
CQljYXNlIEFGX0lORVQ2OgorCQkJCWlmIChJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmKChzdHJ1
Y3Qgc29ja2FkZHJfaW42ICopaWZhLT5pZmFfYWRkciktPnNpbjZfYWRkcikpIHsKKwkJCQkJLyog
c2tpcCB1bnNwZWNpZmVkIGFkZHJlc3NlcyAqLworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJ
YnJlYWs7CisjZW5kaWYKKwkJCWRlZmF1bHQ6CisJCQkJY29udGludWU7CisJCQl9CisJCQlzd2l0
Y2ggKGlmYS0+aWZhX2FkZHItPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCWNhc2UgQUZf
SU5FVDoKKwkJCQlpZmFfZmxhZ3MgPSAwOworCQkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5F
VDYKKwkJCWNhc2UgQUZfSU5FVDY6CisJCQkJaWZhNiA9IChzdHJ1Y3QgaW42X2lmYWRkciAqKWlm
YTsKKwkJCQlpZmFfZmxhZ3MgPSBpZmE2LT5pYTZfZmxhZ3M7CisJCQkJYnJlYWs7CisjZW5kaWYK
KwkJCWRlZmF1bHQ6CisJCQkJaWZhX2ZsYWdzID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXNj
dHBfaWZhID0gc2N0cF9hZGRfYWRkcl90b192cmYodnJmaWQsCisJCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICh2b2lkICopaWZuLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZm4tPmlmX2luZGV4LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZm4tPmlmX3R5cGUsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmbi0+
aWZfeG5hbWUsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopaWZh
LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmEtPmlmYV9hZGRyLAorCQkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmFfZmxhZ3MsCisJCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDApOworCQkJaWYgKHNjdHBfaWZhKSB7CisJCQkJc2N0cF9p
ZmEtPmxvY2FsaWZhX2ZsYWdzICY9IH5TQ1RQX0FERFJfREVGRVJfVVNFOworCQkJfQorCQl9CisJ
fQorCU5FVF9FUE9DSF9FWElUKGV0KTsKKwlJRk5FVF9SVU5MT0NLKCk7Cit9CisjZW5kaWYKKwor
dm9pZAorc2N0cF9pbml0X3ZyZl9saXN0KGludCB2cmZpZCkKK3sKKwlpZiAodnJmaWQgPiBTQ1RQ
X01BWF9WUkZfSUQpCisJCS8qIGNhbid0IGRvIHRoYXQgKi8KKwkJcmV0dXJuOworCisJLyogRG9u
J3QgY2FyZSBhYm91dCByZXR1cm4gaGVyZSAqLworCSh2b2lkKXNjdHBfYWxsb2NhdGVfdnJmKHZy
ZmlkKTsKKworCS8qIE5vdyB3ZSBuZWVkIHRvIGJ1aWxkIGFsbCB0aGUgaWZuJ3MKKwkgKiBmb3Ig
dGhpcyB2cmYgYW5kIHRoZXJlIGFkZHJlc3NlcworCSAqLworCXNjdHBfaW5pdF9pZm5zX2Zvcl92
cmYodnJmaWQpOworfQorCit2b2lkCitzY3RwX2FkZHJfY2hhbmdlKHN0cnVjdCBpZmFkZHIgKmlm
YSwgaW50IGNtZCkKK3sKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisgICAgICAgIHJldHVy
bjsKKyNlbHNlCisJdWludDMyX3QgaWZhX2ZsYWdzID0gMDsKKworCWlmIChTQ1RQX0JBU0VfVkFS
KHNjdHBfcGNiX2luaXRpYWxpemVkKSA9PSAwKSB7CisJCXJldHVybjsKKwl9CisJLyogQlNEIG9u
bHkgaGFzIG9uZSBWUkYsIGlmIHRoaXMgY2hhbmdlcworCSAqIHdlIHdpbGwgbmVlZCB0byBob29r
IGluIHRoZSByaWdodAorCSAqIHRoaW5ncyBoZXJlIHRvIGdldCB0aGUgaWQgdG8gcGFzcyB0bwor
CSAqIHRoZSBhZGRyZXNzIG1hbmFnZW1lbnQgcm91dGluZS4KKwkgKi8KKwlpZiAoU0NUUF9CQVNF
X1ZBUihmaXJzdF90aW1lKSA9PSAwKSB7CisJCS8qIFNwZWNpYWwgdGVzdCB0byBzZWUgaWYgbXkg
OjoxIHdpbGwgc2hvd3VwIHdpdGggdGhpcyAqLworCQlTQ1RQX0JBU0VfVkFSKGZpcnN0X3RpbWUp
ID0gMTsKKwkJc2N0cF9pbml0X2lmbnNfZm9yX3ZyZihTQ1RQX0RFRkFVTFRfVlJGSUQpOworCX0K
KworCWlmICgoY21kICE9IFJUTV9BREQpICYmIChjbWQgIT0gUlRNX0RFTEVURSkpIHsKKwkJLyog
ZG9uJ3Qga25vdyB3aGF0IHRvIGRvIHdpdGggdGhpcyAqLworCQlyZXR1cm47CisJfQorCisJaWYg
KGlmYS0+aWZhX2FkZHIgPT0gTlVMTCkgeworCQlyZXR1cm47CisJfQorCWlmIChzY3RwX2lzX2Rl
c2lyZWRfaW50ZXJmYWNlX3R5cGUoaWZhLT5pZmFfaWZwKSA9PSAwKSB7CisJCS8qIG5vbiBkZXNp
cmVkIHR5cGUgKi8KKwkJcmV0dXJuOworCX0KKwlzd2l0Y2ggKGlmYS0+aWZhX2FkZHItPnNhX2Zh
bWlseSkgeworI2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisJCWlmICgoKHN0cnVjdCBzb2Nr
YWRkcl9pbiAqKWlmYS0+aWZhX2FkZHIpLT5zaW5fYWRkci5zX2FkZHIgPT0gMCkgeworCQkJcmV0
dXJuOworCQl9CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2
OgorCQlpZmFfZmxhZ3MgPSAoKHN0cnVjdCBpbjZfaWZhZGRyICopaWZhKS0+aWE2X2ZsYWdzOwor
CQlpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJigoc3RydWN0IHNvY2thZGRyX2luNiAqKWlm
YS0+aWZhX2FkZHIpLT5zaW42X2FkZHIpKSB7CisJCQkvKiBza2lwIHVuc3BlY2lmZWQgYWRkcmVz
c2VzICovCisJCQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQkv
KiBub24gaW5ldC9pbmV0NiBza2lwICovCisJCXJldHVybjsKKwl9CisJaWYgKGNtZCA9PSBSVE1f
QUREKSB7CisJCSh2b2lkKXNjdHBfYWRkX2FkZHJfdG9fdnJmKFNDVFBfREVGQVVMVF9WUkZJRCwg
KHZvaWQgKilpZmEtPmlmYV9pZnAsCisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmbmV0X2luZGV4
KGlmYS0+aWZhX2lmcCksIGlmbmV0X3R5cGUoaWZhLT5pZmFfaWZwKSwgaWZuZXRfbmFtZShpZmEt
PmlmYV9pZnApLAorI2Vsc2UKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhLT5pZmFf
aWZwLT5pZl9pbmRleCwgaWZhLT5pZmFfaWZwLT5pZl90eXBlLCBpZmEtPmlmYV9pZnAtPmlmX3hu
YW1lLAorI2VuZGlmCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopaWZhLCBp
ZmEtPmlmYV9hZGRyLCBpZmFfZmxhZ3MsIDEpOworCX0gZWxzZSB7CisJCXNjdHBfZGVsX2FkZHJf
ZnJvbV92cmYoU0NUUF9ERUZBVUxUX1ZSRklELCBpZmEtPmlmYV9hZGRyLAorI2lmIGRlZmluZWQo
X19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkgICAgICAgICAgICAgICAg
ICAgICAgIGlmbmV0X2luZGV4KGlmYS0+aWZhX2lmcCksCisJCSAgICAgICAgICAgICAgICAgICAg
ICAgaWZuZXRfbmFtZShpZmEtPmlmYV9pZnApKTsKKyNlbHNlCisJCSAgICAgICAgICAgICAgICAg
ICAgICAgaWZhLT5pZmFfaWZwLT5pZl9pbmRleCwKKwkJICAgICAgICAgICAgICAgICAgICAgICBp
ZmEtPmlmYV9pZnAtPmlmX3huYW1lKTsKKyNlbmRpZgorCisJCS8qIFdlIGRvbid0IGJ1bXAgcmVm
Y291bnQgaGVyZSBzbyB3aGVuIGl0IGNvbXBsZXRlcworCQkgKiB0aGUgZmluYWwgZGVsZXRlIHdp
bGwgaGFwcGVuLgorCQkgKi8KKwl9CisjZW5kaWYKK30KKworI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCit2b2lkCitzY3RwX2FkZHJfY2hhbmdlX2V2
ZW50X2hhbmRsZXIodm9pZCAqYXJnIF9fdW51c2VkLCBzdHJ1Y3QgaWZhZGRyICppZmEsIGludCBj
bWQpIHsKKwlzY3RwX2FkZHJfY2hhbmdlKGlmYSwgY21kKTsKK30KKyNlbmRpZgorI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQordm9pZAorc2N0cF9hZGRf
b3JfZGVsX2ludGVyZmFjZXMoaW50ICgqcHJlZCkoc3RydWN0IGlmbmV0ICopLCBpbnQgYWRkKQor
eworCXN0cnVjdCBpZm5ldCAqKmlmbmV0bGlzdDsKKwlzdHJ1Y3QgaWZhZGRyICoqaWZhZGRybGlz
dDsKKwl1aW50MzJfdCBpLCBqLCBjb3VudDsKKworCWlmIChpZm5ldF9saXN0X2dldChJRk5FVF9G
QU1JTFlfQU5ZLCAmaWZuZXRsaXN0LCAmY291bnQpICE9IDApIHsKKwkJcmV0dXJuOworCX0KKwlm
b3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpZiAoISgqcHJlZCkoaWZuZXRsaXN0W2ld
KSkgeworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGlmbmV0X2dldF9hZGRyZXNzX2xpc3QoaWZu
ZXRsaXN0W2ldLCAmaWZhZGRybGlzdCkgIT0gMCkgeworCQkJY29udGludWU7CisJCX0KKwkJZm9y
IChqID0gMDsgaWZhZGRybGlzdFtqXSAhPSBOVUxMOyBqKyspIHsKKwkJCXNjdHBfYWRkcl9jaGFu
Z2UoaWZhZGRybGlzdFtqXSwgYWRkID8gUlRNX0FERCA6IFJUTV9ERUxFVEUpOworCQl9CisJCWlm
bmV0X2ZyZWVfYWRkcmVzc19saXN0KGlmYWRkcmxpc3QpOworCX0KKwlpZm5ldF9saXN0X2ZyZWUo
aWZuZXRsaXN0KTsKKwlyZXR1cm47Cit9CisjZW5kaWYKKworc3RydWN0IG1idWYgKgorc2N0cF9n
ZXRfbWJ1Zl9mb3JfbXNnKHVuc2lnbmVkIGludCBzcGFjZV9uZWVkZWQsIGludCB3YW50X2hlYWRl
ciwKKwkJICAgICAgaW50IGhvdywgaW50IGFsbG9uZWJ1ZiwgaW50IHR5cGUpCit7CisJc3RydWN0
IG1idWYgKm0gPSBOVUxMOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJbSA9ICBtX2dldG0yKE5V
TEwsIHNwYWNlX25lZWRlZCwgaG93LCB0eXBlLCB3YW50X2hlYWRlciA/IE1fUEtUSERSIDogMCwg
YWxsb25lYnVmKTsKKyNlbHNlCisJbSA9ICBtX2dldG0yKE5VTEwsIHNwYWNlX25lZWRlZCwgaG93
LCB0eXBlLCB3YW50X2hlYWRlciA/IE1fUEtUSERSIDogMCk7CisjZW5kaWYKKwlpZiAobSA9PSBO
VUxMKSB7CisJCS8qIGJhZCwgbm8gbWVtb3J5ICovCisJCXJldHVybiAobSk7CisJfQorI2lmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaWYgKGFsbG9uZWJ1ZikgeworCQlpZiAoU0NUUF9CVUZf
U0laRShtKSA8IHNwYWNlX25lZWRlZCkgeworCQkJbV9mcmVlbShtKTsKKwkJCXJldHVybiAoTlVM
TCk7CisJCX0KKwkJS0FTU0VSVChTQ1RQX0JVRl9ORVhUKG0pID09IE5VTEwsICgiJXM6IG5vIGNo
YWluIGFsbG93ZWQiLCBfX2Z1bmNfXykpOworCX0KKyNlbmRpZgorI2lmZGVmIFNDVFBfTUJVRl9M
T0dHSU5HCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBf
TUJVRl9MT0dHSU5HX0VOQUJMRSkgeworCQlzY3RwX2xvZ19tYihtLCBTQ1RQX01CVUZfSUFMTE9D
KTsKKwl9CisjZW5kaWYKKyNlbHNlCisJaW50IG1idWZfdGhyZXNob2xkOworCXVuc2lnbmVkIGlu
dCBzaXplOworCisJaWYgKHdhbnRfaGVhZGVyKSB7CisJCU1HRVRIRFIobSwgaG93LCB0eXBlKTsK
KwkJc2l6ZSA9IE1ITEVOOworCX0gZWxzZSB7CisJCU1HRVQobSwgaG93LCB0eXBlKTsKKwkJc2l6
ZSA9IE1MRU47CisJfQorCWlmIChtID09IE5VTEwpIHsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJ
aWYgKGFsbG9uZWJ1ZiA9PSAwKSB7CisJCW1idWZfdGhyZXNob2xkID0gU0NUUF9CQVNFX1NZU0NU
TChzY3RwX21idWZfdGhyZXNob2xkX2NvdW50KTsKKwl9IGVsc2UgeworCQltYnVmX3RocmVzaG9s
ZCA9IDE7CisJfQorCisJaWYgKHNwYWNlX25lZWRlZCA+ICh1bnNpZ25lZCBpbnQpKCgobWJ1Zl90
aHJlc2hvbGQgLSAxKSAqIE1MRU4pICsgTUhMRU4pKSB7CisJCU1DTEdFVChtLCBob3cpOworCQlp
ZiAobSA9PSBOVUxMKSB7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCWlmIChTQ1RQX0JVRl9J
U19FWFRFTkRFRChtKSA9PSAwKSB7CisJCQlzY3RwX21fZnJlZW0obSk7CisJCQlyZXR1cm4gKE5V
TEwpOworCQl9CisJCXNpemUgPSBTQ1RQX0JVRl9FWFRFTkRfU0laRShtKTsKKwl9CisJaWYgKGFs
bG9uZWJ1ZiAhPSAwICYmIHNpemUgPCBzcGFjZV9uZWVkZWQpIHsKKwkJbV9mcmVlbShtKTsKKwkJ
cmV0dXJuIChOVUxMKTsKKwl9CisJU0NUUF9CVUZfTEVOKG0pID0gMDsKKwlTQ1RQX0JVRl9ORVhU
KG0pID0gU0NUUF9CVUZfTkVYVF9QS1QobSkgPSBOVUxMOworI2lmZGVmIFNDVFBfTUJVRl9MT0dH
SU5HCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUJV
Rl9MT0dHSU5HX0VOQUJMRSkgeworCQlzY3RwX2xvZ19tYihtLCBTQ1RQX01CVUZfSUFMTE9DKTsK
Kwl9CisjZW5kaWYKKyNlbmRpZgorCXJldHVybiAobSk7Cit9CisKKyNpZmRlZiBTQ1RQX1BBQ0tF
VF9MT0dHSU5HCit2b2lkCitzY3RwX3BhY2tldF9sb2coc3RydWN0IG1idWYgKm0pCit7CisJaW50
ICpsZW5hdCwgdGhpc29uZTsKKwl2b2lkICpjb3B5dG87CisJdWludDMyX3QgKnRpY2tfdG9jazsK
KwlpbnQgbGVuZ3RoOworCWludCB0b3RhbF9sZW47CisJaW50IGdyYWJiZWRfbG9jayA9IDA7CisJ
aW50IHZhbHVlLCBuZXd2YWwsIHRoaXNlbmQsIHRoaXNiZWdpbjsKKwkvKgorCSAqIEJ1ZmZlciBs
YXlvdXQuCisJICogLXNpemVvZiB0aGlzIGVudHJ5ICh0b3RhbF9sZW4pCisJICogLXByZXZpb3Vz
IGVuZCAgICAgICh2YWx1ZSkKKwkgKiAtdGlja3Mgb2YgbG9nICAgICAgKHRpY2tzKQorCSAqIG8g
LWlwIHBhY2tldAorCSAqIG8gLWFzIGxvZ2dlZAorCSAqIC0gd2hlcmUgdGhpcyBzdGFydGVkICh0
aGlzYmVnaW4pCisJICogeCA8LS1lbmQgcG9pbnRzIGhlcmUKKwkgKi8KKwlsZW5ndGggPSBTQ1RQ
X0hFQURFUl9MRU4obSk7CisJdG90YWxfbGVuID0gU0NUUF9TSVpFMzIoKGxlbmd0aCArICg0ICog
c2l6ZW9mKGludCkpKSk7CisJLyogTG9nIGEgcGFja2V0IHRvIHRoZSBidWZmZXIuICovCisJaWYg
KHRvdGFsX2xlbj4gU0NUUF9QQUNLRVRfTE9HX1NJWkUpIHsKKwkJLyogQ2FuJ3QgbG9nIHRoaXMg
cGFja2V0IEkgaGF2ZSBub3QgYSBidWZmZXIgYmlnIGVub3VnaCAqLworCQlyZXR1cm47CisJfQor
CWlmIChsZW5ndGggPCAoaW50KShTQ1RQX01JTl9WNF9PVkVSSEVBRCArIHNpemVvZihzdHJ1Y3Qg
c2N0cF9jb29raWVfYWNrX2NodW5rKSkpIHsKKwkJcmV0dXJuOworCX0KKwlhdG9taWNfYWRkX2lu
dCgmU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9nX3dyaXRlcnMpLCAxKTsKKyB0cnlfYWdhaW46CisJ
aWYgKFNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ193cml0ZXJzKSA+IFNDVFBfUEtUTE9HX1dSSVRF
UlNfTkVFRF9MT0NLKSB7CisJCVNDVFBfSVBfUEtUTE9HX0xPQ0soKTsKKwkJZ3JhYmJlZF9sb2Nr
ID0gMTsKKwlhZ2Fpbl9sb2NrZWQ6CisJCXZhbHVlID0gU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9n
X2VuZCk7CisJCW5ld3ZhbCA9IFNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ19lbmQpICsgdG90YWxf
bGVuOworCQlpZiAobmV3dmFsID49IFNDVFBfUEFDS0VUX0xPR19TSVpFKSB7CisJCQkvKiB3ZSB3
cmFwcGVkICovCisJCQl0aGlzYmVnaW4gPSAwOworCQkJdGhpc2VuZCA9IHRvdGFsX2xlbjsKKwkJ
fSBlbHNlIHsKKwkJCXRoaXNiZWdpbiA9IFNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ19lbmQpOwor
CQkJdGhpc2VuZCA9IG5ld3ZhbDsKKwkJfQorCQlpZiAoIShhdG9taWNfY21wc2V0X2ludCgmU0NU
UF9CQVNFX1ZBUihwYWNrZXRfbG9nX2VuZCksIHZhbHVlLCB0aGlzZW5kKSkpIHsKKwkJCWdvdG8g
YWdhaW5fbG9ja2VkOworCQl9CisJfSBlbHNlIHsKKwkJdmFsdWUgPSBTQ1RQX0JBU0VfVkFSKHBh
Y2tldF9sb2dfZW5kKTsKKwkJbmV3dmFsID0gU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9nX2VuZCkg
KyB0b3RhbF9sZW47CisJCWlmIChuZXd2YWwgPj0gU0NUUF9QQUNLRVRfTE9HX1NJWkUpIHsKKwkJ
CS8qIHdlIHdyYXBwZWQgKi8KKwkJCXRoaXNiZWdpbiA9IDA7CisJCQl0aGlzZW5kID0gdG90YWxf
bGVuOworCQl9IGVsc2UgeworCQkJdGhpc2JlZ2luID0gU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9n
X2VuZCk7CisJCQl0aGlzZW5kID0gbmV3dmFsOworCQl9CisJCWlmICghKGF0b21pY19jbXBzZXRf
aW50KCZTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfZW5kKSwgdmFsdWUsIHRoaXNlbmQpKSkgewor
CQkJZ290byB0cnlfYWdhaW47CisJCX0KKwl9CisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKHRo
aXNlbmQgPj0gU0NUUF9QQUNLRVRfTE9HX1NJWkUpIHsKKwkJU0NUUF9QUklOVEYoIkluc2FuaXR5
IHN0b3BzIGEgbG9nIHRoaXNiZWdpbjolZCB0aGlzZW5kOiVkIHdyaXRlcnM6JWQgbG9jazolZCBl
bmQ6JWRcbiIsCisJCSAgICAgICAgICAgIHRoaXNiZWdpbiwKKwkJICAgICAgICAgICAgdGhpc2Vu
ZCwKKwkJICAgICAgICAgICAgU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9nX3dyaXRlcnMpLAorCQkg
ICAgICAgICAgICBncmFiYmVkX2xvY2ssCisJCSAgICAgICAgICAgIFNDVFBfQkFTRV9WQVIocGFj
a2V0X2xvZ19lbmQpKTsKKwkJU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9nX2VuZCkgPSAwOworCQln
b3RvIG5vX2xvZzsKKwl9CisJbGVuYXQgPSAoaW50ICopJlNDVFBfQkFTRV9WQVIocGFja2V0X2xv
Z19idWZmZXIpW3RoaXNiZWdpbl07CisJKmxlbmF0ID0gdG90YWxfbGVuOworCWxlbmF0Kys7CisJ
KmxlbmF0ID0gdmFsdWU7CisJbGVuYXQrKzsKKwl0aWNrX3RvY2sgPSAodWludDMyX3QgKilsZW5h
dDsKKwlsZW5hdCsrOworCSp0aWNrX3RvY2sgPSBzY3RwX2dldF90aWNrX2NvdW50KCk7CisJY29w
eXRvID0gKHZvaWQgKilsZW5hdDsKKwl0aGlzb25lID0gdGhpc2VuZCAtIHNpemVvZihpbnQpOwor
CWxlbmF0ID0gKGludCAqKSZTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfYnVmZmVyKVt0aGlzb25l
XTsKKwkqbGVuYXQgPSB0aGlzYmVnaW47CisJaWYgKGdyYWJiZWRfbG9jaykgeworCQlTQ1RQX0lQ
X1BLVExPR19VTkxPQ0soKTsKKwkJZ3JhYmJlZF9sb2NrID0gMDsKKwl9CisJbV9jb3B5ZGF0YSht
LCAwLCBsZW5ndGgsIChjYWRkcl90KWNvcHl0byk7Cisgbm9fbG9nOgorCWlmIChncmFiYmVkX2xv
Y2spIHsKKwkJU0NUUF9JUF9QS1RMT0dfVU5MT0NLKCk7CisJfQorCWF0b21pY19zdWJ0cmFjdF9p
bnQoJlNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ193cml0ZXJzKSwgMSk7Cit9CisKK2ludAorc2N0
cF9jb3B5X291dF9wYWNrZXRfbG9nKHVpbnQ4X3QgKnRhcmdldCwgaW50IGxlbmd0aCkKK3sKKwkv
KiBXZSB3aW5kIHRocm91Z2ggdGhlIHBhY2tldCBsb2cgc3RhcnRpbmcgYXQKKwkgKiBzdGFydCBj
b3B5aW5nIHVwIHRvIGxlbmd0aCBieXRlcyBvdXQuCisJICogV2UgcmV0dXJuIHRoZSBudW1iZXIg
b2YgYnl0ZXMgY29waWVkLgorCSAqLworCWludCB0b2NvcHksIHRoaXNfY29weTsKKwlpbnQgKmxl
bmF0OworCWludCBkaWRfZGVsYXkgPSAwOworCisJdG9jb3B5ID0gbGVuZ3RoOworCWlmIChsZW5n
dGggPCAoaW50KSgyICogc2l6ZW9mKGludCkpKSB7CisJCS8qIG5vdCBlbm91Z2ggcm9vbSAqLwor
CQlyZXR1cm4gKDApOworCX0KKwlpZiAoU0NUUF9QS1RMT0dfV1JJVEVSU19ORUVEX0xPQ0spIHsK
KwkJYXRvbWljX2FkZF9pbnQoJlNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ193cml0ZXJzKSwgU0NU
UF9QS1RMT0dfV1JJVEVSU19ORUVEX0xPQ0spOworCWFnYWluOgorCQlpZiAoKGRpZF9kZWxheSA9
PSAwKSAmJiAoU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9nX3dyaXRlcnMpICE9IFNDVFBfUEtUTE9H
X1dSSVRFUlNfTkVFRF9MT0NLKSkgeworCQkJLyogd2UgZGVsYXkgaGVyZSBmb3IganVzdCBhIG1v
bWVudCBob3BpbmcgdGhlIHdyaXRlcihzKSB0aGF0IHdlcmUKKwkJCSAqIHByZXNlbnQgd2hlbiB3
ZSBlbnRlcmVkIHdpbGwgaGF2ZSBsZWZ0IGFuZCB3ZSBvbmx5IGhhdmUKKwkJCSAqIGxvY2tpbmcg
b25lcyB0aGF0IHdpbGwgY29udGVuZCB3aXRoIHVzIGZvciB0aGUgbG9jay4gVGhpcworCQkJICog
ZG9lcyBub3QgYXNzdXJlIDEwMCUgYWNjZXNzLCBidXQgaXRzIGdvb2QgZW5vdWdoIGZvcgorCQkJ
ICogYSBsb2dnaW5nIGZhY2lsaXR5IGxpa2UgdGhpcy4KKwkJCSAqLworCQkJZGlkX2RlbGF5ID0g
MTsKKwkJCURFTEFZKDEwKTsKKwkJCWdvdG8gYWdhaW47CisJCX0KKwl9CisJU0NUUF9JUF9QS1RM
T0dfTE9DSygpOworCWxlbmF0ID0gKGludCAqKXRhcmdldDsKKwkqbGVuYXQgPSBTQ1RQX0JBU0Vf
VkFSKHBhY2tldF9sb2dfZW5kKTsKKwlsZW5hdCsrOworCXRoaXNfY29weSA9IG1pbigobGVuZ3Ro
IC0gc2l6ZW9mKGludCkpLCBTQ1RQX1BBQ0tFVF9MT0dfU0laRSk7CisJbWVtY3B5KCh2b2lkICop
bGVuYXQsICh2b2lkICopU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9nX2J1ZmZlciksIHRoaXNfY29w
eSk7CisJaWYgKFNDVFBfUEtUTE9HX1dSSVRFUlNfTkVFRF9MT0NLKSB7CisJCWF0b21pY19zdWJ0
cmFjdF9pbnQoJlNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ193cml0ZXJzKSwKKwkJCQkgICAgU0NU
UF9QS1RMT0dfV1JJVEVSU19ORUVEX0xPQ0spOworCX0KKwlTQ1RQX0lQX1BLVExPR19VTkxPQ0so
KTsKKwlyZXR1cm4gKHRoaXNfY29weSArIHNpemVvZihpbnQpKTsKK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9ic2RfYWRkci5oIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYnNkX2FkZHIuaApuZXcgZmlsZSBtb2RlIDEw
MDc1NQppbmRleCAwMDAwMDAwMDAwMDAuLmQ2YWI5MWI1YjViOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2JzZF9hZGRyLmgKQEAgLTAsMCArMSw3
MiBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgor
ICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0
ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwg
YnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoK
KyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpbmNsdWRlIDxz
eXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX2Jz
ZF9hZGRyLmggMzY1MDcxIDIwMjAtMDktMDEgMjE6MTk6MTRaIG1qZyAkIik7CisjZW5kaWYKKwor
I2lmbmRlZiBfTkVUSU5FVF9TQ1RQX0JTRF9BRERSX0hfCisjZGVmaW5lIF9ORVRJTkVUX1NDVFBf
QlNEX0FERFJfSF8KKworI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9wY2IuaD4KKworI2lmIGRlZmlu
ZWQoX0tFUk5FTCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCitleHRlcm4gc3RydWN0IGl0
ZXJhdG9yX2NvbnRyb2wgc2N0cF9pdF9jdGw7Cit2b2lkIHNjdHBfd2FrZXVwX2l0ZXJhdG9yKHZv
aWQpOworCit2b2lkIHNjdHBfc3RhcnR1cF9pdGVyYXRvcih2b2lkKTsKKworI2lmZGVmIElORVQ2
Cit2b2lkIHNjdHBfZ2F0aGVyX2ludGVybmFsX2lmYV9mbGFncyhzdHJ1Y3Qgc2N0cF9pZmEgKmlm
YSk7CisjZW5kaWYKKworI2lmZGVmICBTQ1RQX1BBQ0tFVF9MT0dHSU5HCisKK3ZvaWQgc2N0cF9w
YWNrZXRfbG9nKHN0cnVjdCBtYnVmICptKTsKK2ludCBzY3RwX2NvcHlfb3V0X3BhY2tldF9sb2co
dWludDhfdCAqdGFyZ2V0LCBpbnQgbGVuZ3RoKTsKKworI2VuZGlmCisKK3ZvaWQgc2N0cF9hZGRy
X2NoYW5nZShzdHJ1Y3QgaWZhZGRyICppZmEsIGludCBjbWQpOworI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisKK3ZvaWQgc2N0cF9hZGRyX2NoYW5n
ZV9ldmVudF9oYW5kbGVyKHZvaWQgKiwgc3RydWN0IGlmYWRkciAqLCBpbnQpOworI2VuZGlmCisK
K3ZvaWQgc2N0cF9hZGRfb3JfZGVsX2ludGVyZmFjZXMoaW50ICgqcHJlZCkoc3RydWN0IGlmbmV0
ICopLCBpbnQgYWRkKTsKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Vz
cnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NhbGxvdXQuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX2NhbGxvdXQuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAw
MDAuLjRjOWJlNzU2OGJmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIv
bmV0aW5ldC9zY3RwX2NhbGxvdXQuYwpAQCAtMCwwICsxLDI0OSBAQAorLyotCisgKiBTUERYLUxp
Y2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAx
LTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1l
dDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5h
bWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
I2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmICFkZWZpbmVkKF9XSU4zMikKKyNpbmNsdWRlIDxz
eXMvd2FpdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNl
bmRpZgorI2lmIGRlZmluZWQoX19uYXRpdmVfY2xpZW50X18pCisjaW5jbHVkZSA8c3lzL3NlbGVj
dC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+Cisj
aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVzZXJfYXRv
bWljLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5oPgorI2luY2x1ZGUgPG5ldGlu
ZXQvc2N0cF9wY2IuaD4KKyNlbHNlCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+CisjaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX2NhbGxvdXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfcGNi
Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHB1dGlsLmg+CisKKy8qCisgKiBDYWxs
b3V0L1RpbWVyIHJvdXRpbmVzIGZvciBPUyB0aGF0IGRvZXNuJ3QgaGF2ZSB0aGVtCisgKi8KKyNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorc3RhdGljIHVp
bnQzMl90IHRpY2tzID0gMDsKKyNlbHNlCitleHRlcm4gaW50IHRpY2tzOworI2VuZGlmCisKK3Vp
bnQzMl90IHNjdHBfZ2V0X3RpY2tfY291bnQodm9pZCkgeworCXVpbnQzMl90IHJldDsKKworCVND
VFBfVElNRVJRX0xPQ0soKTsKKwlyZXQgPSB0aWNrczsKKwlTQ1RQX1RJTUVSUV9VTkxPQ0soKTsK
KwlyZXR1cm4gcmV0OworfQorCisvKgorICogU0NUUF9USU1FUlFfTE9DSyBwcm90ZWN0czoKKyAq
IC0gU0NUUF9CQVNFX0lORk8oY2FsbHF1ZXVlKQorICogLSBzY3RwX29zX3RpbWVyX25leHQ6IG5l
eHQgdGltZXIgdG8gY2hlY2sKKyAqLworc3RhdGljIHNjdHBfb3NfdGltZXJfdCAqc2N0cF9vc190
aW1lcl9uZXh0ID0gTlVMTDsKKwordm9pZAorc2N0cF9vc190aW1lcl9pbml0KHNjdHBfb3NfdGlt
ZXJfdCAqYykKK3sKKwltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7Cit9CisKK2ludAorc2N0cF9v
c190aW1lcl9zdGFydChzY3RwX29zX3RpbWVyX3QgKmMsIHVpbnQzMl90IHRvX3RpY2tzLCB2b2lk
ICgqZnRuKSAodm9pZCAqKSwKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnKQoreworCWlu
dCByZXQgPSAwOworCisJLyogcGFyYW5vaWEgKi8KKwlpZiAoKGMgPT0gTlVMTCkgfHwgKGZ0biA9
PSBOVUxMKSkKKwkJcmV0dXJuIChyZXQpOworCisJU0NUUF9USU1FUlFfTE9DSygpOworCS8qIGNo
ZWNrIHRvIHNlZSBpZiB3ZSdyZSByZXNjaGVkdWxpbmcgYSB0aW1lciAqLworCWlmIChjLT5jX2Zs
YWdzICYgU0NUUF9DQUxMT1VUX1BFTkRJTkcpIHsKKwkJcmV0ID0gMTsKKwkJaWYgKGMgPT0gc2N0
cF9vc190aW1lcl9uZXh0KSB7CisJCQlzY3RwX29zX3RpbWVyX25leHQgPSBUQUlMUV9ORVhUKGMs
IHRxZSk7CisJCX0KKwkJVEFJTFFfUkVNT1ZFKCZTQ1RQX0JBU0VfSU5GTyhjYWxscXVldWUpLCBj
LCB0cWUpOworCQkvKgorCQkgKiBwYXJ0IG9mIHRoZSBub3JtYWwgInN0b3AgYSBwZW5kaW5nIGNh
bGxvdXQiIHByb2Nlc3MKKwkJICogaXMgdG8gY2xlYXIgdGhlIENBTExPVVRfQUNUSVZFIGFuZCBD
QUxMT1VUX1BFTkRJTkcKKwkJICogZmxhZ3MuICBXZSBkb24ndCBib3RoZXIgc2luY2Ugd2UgYXJl
IHNldHRpbmcgdGhlc2UKKwkJICogYmVsb3cgYW5kIHdlIHN0aWxsIGhvbGQgdGhlIGxvY2suCisJ
CSAqLworCX0KKworCS8qCisJICogV2UgY291bGQgdW5sb2NrL3NwbHggaGVyZSBhbmQgbG9jay9z
cGwgYXQgdGhlIFRBSUxRX0lOU0VSVF9UQUlMLAorCSAqIGJ1dCB0aGVyZSdzIG5vIHBvaW50IHNp
bmNlIGRvaW5nIHRoaXMgc2V0dXAgZG9lc24ndCB0YWtlIG11Y2ggdGltZS4KKwkgKi8KKwlpZiAo
dG9fdGlja3MgPT0gMCkKKwkJdG9fdGlja3MgPSAxOworCisJYy0+Y19hcmcgPSBhcmc7CisJYy0+
Y19mbGFncyA9IChTQ1RQX0NBTExPVVRfQUNUSVZFIHwgU0NUUF9DQUxMT1VUX1BFTkRJTkcpOwor
CWMtPmNfZnVuYyA9IGZ0bjsKKwljLT5jX3RpbWUgPSB0aWNrcyArIHRvX3RpY2tzOworCVRBSUxR
X0lOU0VSVF9UQUlMKCZTQ1RQX0JBU0VfSU5GTyhjYWxscXVldWUpLCBjLCB0cWUpOworCVNDVFBf
VElNRVJRX1VOTE9DSygpOworCXJldHVybiAocmV0KTsKK30KKworaW50CitzY3RwX29zX3RpbWVy
X3N0b3Aoc2N0cF9vc190aW1lcl90ICpjKQoreworCVNDVFBfVElNRVJRX0xPQ0soKTsKKwkvKgor
CSAqIERvbid0IGF0dGVtcHQgdG8gZGVsZXRlIGEgY2FsbG91dCB0aGF0J3Mgbm90IG9uIHRoZSBx
dWV1ZS4KKwkgKi8KKwlpZiAoIShjLT5jX2ZsYWdzICYgU0NUUF9DQUxMT1VUX1BFTkRJTkcpKSB7
CisJCWMtPmNfZmxhZ3MgJj0gflNDVFBfQ0FMTE9VVF9BQ1RJVkU7CisJCVNDVFBfVElNRVJRX1VO
TE9DSygpOworCQlyZXR1cm4gKDApOworCX0KKwljLT5jX2ZsYWdzICY9IH4oU0NUUF9DQUxMT1VU
X0FDVElWRSB8IFNDVFBfQ0FMTE9VVF9QRU5ESU5HKTsKKwlpZiAoYyA9PSBzY3RwX29zX3RpbWVy
X25leHQpIHsKKwkJc2N0cF9vc190aW1lcl9uZXh0ID0gVEFJTFFfTkVYVChjLCB0cWUpOworCX0K
KwlUQUlMUV9SRU1PVkUoJlNDVFBfQkFTRV9JTkZPKGNhbGxxdWV1ZSksIGMsIHRxZSk7CisJU0NU
UF9USU1FUlFfVU5MT0NLKCk7CisJcmV0dXJuICgxKTsKK30KKwordm9pZAorc2N0cF9oYW5kbGVf
dGljayh1aW50MzJfdCBlbGFwc2VkX3RpY2tzKQoreworCXNjdHBfb3NfdGltZXJfdCAqYzsKKwl2
b2lkICgqY19mdW5jKSh2b2lkICopOworCXZvaWQgKmNfYXJnOworCisJU0NUUF9USU1FUlFfTE9D
SygpOworCS8qIHVwZGF0ZSBvdXIgdGljayBjb3VudCAqLworCXRpY2tzICs9IGVsYXBzZWRfdGlj
a3M7CisJYyA9IFRBSUxRX0ZJUlNUKCZTQ1RQX0JBU0VfSU5GTyhjYWxscXVldWUpKTsKKwl3aGls
ZSAoYykgeworCQlpZiAoU0NUUF9VSU5UMzJfR0UodGlja3MsIGMtPmNfdGltZSkpIHsKKwkJCXNj
dHBfb3NfdGltZXJfbmV4dCA9IFRBSUxRX05FWFQoYywgdHFlKTsKKwkJCVRBSUxRX1JFTU9WRSgm
U0NUUF9CQVNFX0lORk8oY2FsbHF1ZXVlKSwgYywgdHFlKTsKKwkJCWNfZnVuYyA9IGMtPmNfZnVu
YzsKKwkJCWNfYXJnID0gYy0+Y19hcmc7CisJCQljLT5jX2ZsYWdzICY9IH5TQ1RQX0NBTExPVVRf
UEVORElORzsKKwkJCVNDVFBfVElNRVJRX1VOTE9DSygpOworCQkJY19mdW5jKGNfYXJnKTsKKwkJ
CVNDVFBfVElNRVJRX0xPQ0soKTsKKwkJCWMgPSBzY3RwX29zX3RpbWVyX25leHQ7CisJCX0gZWxz
ZSB7CisJCQljID0gVEFJTFFfTkVYVChjLCB0cWUpOworCQl9CisJfQorCXNjdHBfb3NfdGltZXJf
bmV4dCA9IE5VTEw7CisJU0NUUF9USU1FUlFfVU5MT0NLKCk7Cit9CisKKyNpZiBkZWZpbmVkKF9f
QVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK3ZvaWQKK3NjdHBfdGltZW91dCh2
b2lkICphcmcgU0NUUF9VTlVTRUQpCit7CisJc2N0cF9oYW5kbGVfdGljayhTQ1RQX0JBU0VfVkFS
KHNjdHBfbWFpbl90aW1lcl90aWNrcykpOworCXNjdHBfc3RhcnRfbWFpbl90aW1lcigpOworfQor
I2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjZGVmaW5lIFRJTUVPVVRfSU5U
RVJWQUwgMTAKKwordm9pZCAqCit1c2VyX3NjdHBfdGltZXJfaXRlcmF0ZSh2b2lkICphcmcpCit7
CisJc2N0cF91c2Vyc3BhY2Vfc2V0X3RocmVhZG5hbWUoIlNDVFAgdGltZXIiKTsKKwlmb3IgKDs7
KSB7CisjaWYgZGVmaW5lZChfV0lOMzIpCisJCVNsZWVwKFRJTUVPVVRfSU5URVJWQUwpOworI2Vs
c2UKKwkJc3RydWN0IHRpbWVzcGVjIGFtb3VudCwgcmVtYWluaW5nOworCisJCXJlbWFpbmluZy50
dl9zZWMgPSAwOworCQlyZW1haW5pbmcudHZfbnNlYyA9IFRJTUVPVVRfSU5URVJWQUwgKiAxMDAw
ICogMTAwMDsKKwkJZG8geworCQkJYW1vdW50ID0gcmVtYWluaW5nOworCQl9IHdoaWxlIChuYW5v
c2xlZXAoJmFtb3VudCwgJnJlbWFpbmluZykgPT0gLTEpOworI2VuZGlmCisJCWlmIChhdG9taWNf
Y21wc2V0X2ludCgmU0NUUF9CQVNFX1ZBUih0aW1lcl90aHJlYWRfc2hvdWxkX2V4aXQpLCAxLCAx
KSkgeworCQkJYnJlYWs7CisJCX0KKwkJc2N0cF9oYW5kbGVfdGljayhzY3RwX21zZWNzX3RvX3Rp
Y2tzKFRJTUVPVVRfSU5URVJWQUwpKTsKKwl9CisJcmV0dXJuIChOVUxMKTsKK30KKwordm9pZAor
c2N0cF9zdGFydF90aW1lcl90aHJlYWQodm9pZCkKK3sKKwkvKgorCSAqIE5vIG5lZWQgdG8gZG8g
U0NUUF9USU1FUlFfTE9DS19JTklUKCk7CisJICogaGVyZSwgaXQgaXMgYmVpbmcgZG9uZSBpbiBz
Y3RwX3BjYl9pbml0KCkKKwkgKi8KKwlpbnQgcmM7CisKKwlyYyA9IHNjdHBfdXNlcnNwYWNlX3Ro
cmVhZF9jcmVhdGUoJlNDVFBfQkFTRV9WQVIodGltZXJfdGhyZWFkKSwgdXNlcl9zY3RwX3RpbWVy
X2l0ZXJhdGUpOworCWlmIChyYykgeworCQlTQ1RQX1BSSU5URigiRVJST1I7IHJldHVybiBjb2Rl
IGZyb20gc2N0cF90aHJlYWRfY3JlYXRlKCkgaXMgJWRcbiIsIHJjKTsKKwl9IGVsc2UgeworCQlT
Q1RQX0JBU0VfVkFSKHRpbWVyX3RocmVhZF9zdGFydGVkKSA9IDE7CisJfQorfQorCit2b2lkCitz
Y3RwX3N0b3BfdGltZXJfdGhyZWFkKHZvaWQpCit7CisJYXRvbWljX2NtcHNldF9pbnQoJlNDVFBf
QkFTRV9WQVIodGltZXJfdGhyZWFkX3Nob3VsZF9leGl0KSwgMCwgMSk7CisJaWYgKFNDVFBfQkFT
RV9WQVIodGltZXJfdGhyZWFkX3N0YXJ0ZWQpKSB7CisjaWYgZGVmaW5lZChfV0lOMzIpCisJCVdh
aXRGb3JTaW5nbGVPYmplY3QoU0NUUF9CQVNFX1ZBUih0aW1lcl90aHJlYWQpLCBJTkZJTklURSk7
CisJCUNsb3NlSGFuZGxlKFNDVFBfQkFTRV9WQVIodGltZXJfdGhyZWFkKSk7CisjZWxzZQorCQlw
dGhyZWFkX2pvaW4oU0NUUF9CQVNFX1ZBUih0aW1lcl90aHJlYWQpLCBOVUxMKTsKKyNlbmRpZgor
CX0KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfY2FsbG91dC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY2FsbG91dC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMC4uODFmZDg1MzBkMWY2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY2FsbG91
dC5oCkBAIC0wLDAgKzEsMTE5IEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBC
U0QtMy1DbGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lz
dGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIw
MTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBu
YW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+Citf
X0ZCU0RJRCgiJEZyZWVCU0QkIik7CisjZW5kaWYKKworI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX0NB
TExPVVRfCisjZGVmaW5lIF9ORVRJTkVUX1NDVFBfQ0FMTE9VVF8KKworLyoKKyAqIE5PVEU6IHRo
ZSBmb2xsb3dpbmcgTUFDUk9TIGFyZSByZXF1aXJlZCBmb3IgbG9ja2luZyB0aGUgY2FsbG91dAor
ICogcXVldWUgYWxvbmcgd2l0aCBhIGxvY2svbXV0ZXggaW4gdGhlIE9TIHNwZWNpZmljIGhlYWRl
cnMgYW5kCisgKiBpbXBsZW1lbnRhdGlvbiBmaWxlczo6CisgKiAtIFNDVFBfVElNRVJRX0xPQ0so
KQorICogLSBTQ1RQX1RJTUVSUV9VTkxPQ0soKQorICogLSBTQ1RQX1RJTUVSUV9MT0NLX0lOSVQo
KQorICogLSBTQ1RQX1RJTUVSUV9MT0NLX0RFU1RST1koKQorICovCisKKyNkZWZpbmUgX1NDVFBf
TkVFRFNfQ0FMTE9VVF8gMQorCisjZGVmaW5lIFNDVFBfVElDS1NfUEVSX0ZBU1RUSU1PIDIwCS8q
IGNhbGxlZCBhYm91dCBldmVyeSAyMG1zICovCisKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisjaWYgZGVmaW5lZChfV0lOMzIpCisjZGVmaW5lIFNDVFBfVElNRVJRX0xPQ0soKSAgICAgICAg
ICBFbnRlckNyaXRpY2FsU2VjdGlvbigmU0NUUF9CQVNFX1ZBUih0aW1lcl9tdHgpKQorI2RlZmlu
ZSBTQ1RQX1RJTUVSUV9VTkxPQ0soKSAgICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJlNDVFBf
QkFTRV9WQVIodGltZXJfbXR4KSkKKyNkZWZpbmUgU0NUUF9USU1FUlFfTE9DS19JTklUKCkgICAg
IEluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9WQVIodGltZXJfbXR4KSkKKyNk
ZWZpbmUgU0NUUF9USU1FUlFfTE9DS19ERVNUUk9ZKCkgIERlbGV0ZUNyaXRpY2FsU2VjdGlvbigm
U0NUUF9CQVNFX1ZBUih0aW1lcl9tdHgpKQorI2Vsc2UKKyNpZmRlZiBJTlZBUklBTlRTCisjZGVm
aW5lIFNDVFBfVElNRVJRX0xPQ0soKSAgICAgICAgICBLQVNTRVJUKHB0aHJlYWRfbXV0ZXhfbG9j
aygmU0NUUF9CQVNFX1ZBUih0aW1lcl9tdHgpKSA9PSAwLCAoIiVzOiB0aW1lcl9tdHggYWxyZWFk
eSBsb2NrZWQiLCBfX2Z1bmNfXykpCisjZGVmaW5lIFNDVFBfVElNRVJRX1VOTE9DSygpICAgICAg
ICBLQVNTRVJUKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZTQ1RQX0JBU0VfVkFSKHRpbWVyX210eCkp
ID09IDAsICgiJXM6IHRpbWVyX210eCBub3QgbG9ja2VkIiwgX19mdW5jX18pKQorI2Vsc2UKKyNk
ZWZpbmUgU0NUUF9USU1FUlFfTE9DSygpICAgICAgICAgICh2b2lkKXB0aHJlYWRfbXV0ZXhfbG9j
aygmU0NUUF9CQVNFX1ZBUih0aW1lcl9tdHgpKQorI2RlZmluZSBTQ1RQX1RJTUVSUV9VTkxPQ0so
KSAgICAgICAgKHZvaWQpcHRocmVhZF9tdXRleF91bmxvY2soJlNDVFBfQkFTRV9WQVIodGltZXJf
bXR4KSkKKyNlbmRpZgorI2RlZmluZSBTQ1RQX1RJTUVSUV9MT0NLX0lOSVQoKSAgICAgKHZvaWQp
cHRocmVhZF9tdXRleF9pbml0KCZTQ1RQX0JBU0VfVkFSKHRpbWVyX210eCksICZTQ1RQX0JBU0Vf
VkFSKG10eF9hdHRyKSkKKyNkZWZpbmUgU0NUUF9USU1FUlFfTE9DS19ERVNUUk9ZKCkgICh2b2lk
KXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmU0NUUF9CQVNFX1ZBUih0aW1lcl9tdHgpKQorI2VuZGlm
CisjZW5kaWYKKwordWludDMyX3Qgc2N0cF9nZXRfdGlja19jb3VudCh2b2lkKTsKKworVEFJTFFf
SEVBRChjYWxsb3V0bGlzdCwgc2N0cF9jYWxsb3V0KTsKKworc3RydWN0IHNjdHBfY2FsbG91dCB7
CisJVEFJTFFfRU5UUlkoc2N0cF9jYWxsb3V0KSB0cWU7CisJdWludDMyX3QgY190aW1lOwkJLyog
dGlja3MgdG8gdGhlIGV2ZW50ICovCisJdm9pZCAqY19hcmc7CQkvKiBmdW5jdGlvbiBhcmd1bWVu
dCAqLworCXZvaWQgKCpjX2Z1bmMpKHZvaWQgKik7CS8qIGZ1bmN0aW9uIHRvIGNhbGwgKi8KKwlp
bnQgY19mbGFnczsJCS8qIHN0YXRlIG9mIHRoaXMgZW50cnkgKi8KK307Cit0eXBlZGVmIHN0cnVj
dCBzY3RwX2NhbGxvdXQgc2N0cF9vc190aW1lcl90OworCisjZGVmaW5lCVNDVFBfQ0FMTE9VVF9B
Q1RJVkUJMHgwMDAyCS8qIGNhbGxvdXQgaXMgY3VycmVudGx5IGFjdGl2ZSAqLworI2RlZmluZQlT
Q1RQX0NBTExPVVRfUEVORElORwkweDAwMDQJLyogY2FsbG91dCBpcyB3YWl0aW5nIGZvciB0aW1l
b3V0ICovCisKK3ZvaWQgc2N0cF9vc190aW1lcl9pbml0KHNjdHBfb3NfdGltZXJfdCAqdG1yKTsK
Ky8qIFJldHVybnMgMSBpZiBwZW5kaW5nIHRpbWVyIHdhcyByZXNjaGVkdWxlZCwgMCBvdGhlcndp
c2UuICovCitpbnQgc2N0cF9vc190aW1lcl9zdGFydChzY3RwX29zX3RpbWVyX3QgKiwgdWludDMy
X3QsIHZvaWQgKCopKHZvaWQgKiksIHZvaWQgKik7CisvKiBSZXR1cm5zIDEgaWYgcGVuZGluZyB0
aW1lciB3YXMgc3RvcHBlZCwgMCBvdGhlcndpc2UuICovCitpbnQgc2N0cF9vc190aW1lcl9zdG9w
KHNjdHBfb3NfdGltZXJfdCAqKTsKK3ZvaWQgc2N0cF9oYW5kbGVfdGljayh1aW50MzJfdCk7CisK
KyNkZWZpbmUgU0NUUF9PU19USU1FUl9JTklUCXNjdHBfb3NfdGltZXJfaW5pdAorLyoKKyAqIE5P
VEU6IFRoZSBuZXh0IHR3byBzaG91bGRuJ3QgYmUgY2FsbGVkIGRpcmVjdGx5IG91dHNpZGUgb2Yg
c2N0cF90aW1lcl9zdGFydCgpCisgKiBhbmQgc2N0cF90aW1lcl9zdG9wKCksIHNpbmNlIHRoZXkg
ZG9uJ3QgaGFuZGxlIGluY3JlbWVudGluZy9kZWNyZW1lbnRpbmcKKyAqIHJlbGV2YW50IHJlZmVy
ZW5jZSBjb3VudHMuCisgKi8KKyNkZWZpbmUgU0NUUF9PU19USU1FUl9TVEFSVAlzY3RwX29zX3Rp
bWVyX3N0YXJ0CisjZGVmaW5lIFNDVFBfT1NfVElNRVJfU1RPUAlzY3RwX29zX3RpbWVyX3N0b3AK
Ky8qIE1UIEZJWE1FOiBJcyB0aGUgZm9sbG93aW5nIGNvcnJlY3Q/ICovCisjZGVmaW5lIFNDVFBf
T1NfVElNRVJfU1RPUF9EUkFJTiBTQ1RQX09TX1RJTUVSX1NUT1AKKyNkZWZpbmUJU0NUUF9PU19U
SU1FUl9QRU5ESU5HKHRtcikgKCh0bXIpLT5jX2ZsYWdzICYgU0NUUF9DQUxMT1VUX1BFTkRJTkcp
CisjZGVmaW5lCVNDVFBfT1NfVElNRVJfQUNUSVZFKHRtcikgKCh0bXIpLT5jX2ZsYWdzICYgU0NU
UF9DQUxMT1VUX0FDVElWRSkKKyNkZWZpbmUJU0NUUF9PU19USU1FUl9ERUFDVElWQVRFKHRtcikg
KCh0bXIpLT5jX2ZsYWdzICY9IH5TQ1RQX0NBTExPVVRfQUNUSVZFKQorCisjaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQordm9pZCBzY3RwX3N0YXJ0X3RpbWVyX3RocmVhZCh2b2lkKTsKK3ZvaWQg
c2N0cF9zdG9wX3RpbWVyX3RocmVhZCh2b2lkKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19BUFBM
RV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQordm9pZCBzY3RwX3RpbWVvdXQodm9pZCAq
KTsKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX2NjX2Z1bmN0aW9ucy5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfY2NfZnVuY3Rpb25zLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAw
Li41N2JjZGFhYTVhMDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25l
dGluZXQvc2N0cF9jY19mdW5jdGlvbnMuYwpAQCAtMCwwICsxLDI0OTUgQEAKKy8qLQorICogU1BE
WC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICoKKyAqIENvcHlyaWdodCAoYykg
MjAwMS0yMDA3LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVu
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZSBtZXQ6CisgKgorICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBiKSBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBjKSBOZWl0aGVyIHRo
ZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAg
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorICog
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZC
U0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0cF9jY19mdW5jdGlvbnMuYyAzNjY1
MTcgMjAyMC0xMC0wNyAxNToyMjo0OFogdHVleGVuICQiKTsKKyNlbmRpZgorCisjaW5jbHVkZSA8
bmV0aW5ldC9zY3RwX29zLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Zhci5oPgorI2luY2x1
ZGUgPG5ldGluZXQvc2N0cF9zeXNjdGwuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfcGNiLmg+
CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2hlYWRlci5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0
cHV0aWwuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3V0cHV0Lmg+CisjaW5jbHVkZSA8bmV0
aW5ldC9zY3RwX2lucHV0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2luZGF0YS5oPgorI2lu
Y2x1ZGUgPG5ldGluZXQvc2N0cF91aW8uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdGltZXIu
aD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYXV0aC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0
cF9hc2NvbmYuaD4KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9rZHRyYWNlLmg+CisjZW5kaWYKKworI2Rl
ZmluZSBTSElGVF9NUFRDUF9NVUxUSV9OIDQwCisjZGVmaW5lIFNISUZUX01QVENQX01VTFRJX1og
MTYKKyNkZWZpbmUgU0hJRlRfTVBUQ1BfTVVMVEkgOAorCitzdGF0aWMgdm9pZAorc2N0cF9lbmZv
cmNlX2N3bmRfbGltaXQoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzc29jLCBzdHJ1Y3Qgc2N0
cF9uZXRzICpuZXQpCit7CisJaWYgKChhc3NvYy0+bWF4X2N3bmQgPiAwKSAmJgorCSAgICAobmV0
LT5jd25kID4gYXNzb2MtPm1heF9jd25kKSAmJgorCSAgICAobmV0LT5jd25kID4gKG5ldC0+bXR1
IC0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSkpKSB7CisJCW5ldC0+Y3duZCA9IGFzc29jLT5tYXhf
Y3duZDsKKwkJaWYgKG5ldC0+Y3duZCA8IChuZXQtPm10dSAtIHNpemVvZihzdHJ1Y3Qgc2N0cGhk
cikpKSB7CisJCQluZXQtPmN3bmQgPSBuZXQtPm10dSAtIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7
CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3NldF9pbml0aWFsX2NjX3BhcmFtKHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworCXN0cnVjdCBz
Y3RwX2Fzc29jaWF0aW9uICphc3NvYzsKKwl1aW50MzJfdCBjd25kX2luX210dTsKKworCWFzc29j
ID0gJnN0Y2ItPmFzb2M7CisJY3duZF9pbl9tdHUgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaW5p
dGlhbF9jd25kKTsKKwlpZiAoY3duZF9pbl9tdHUgPT0gMCkgeworCQkvKiBVc2luZyAwIG1lYW5z
IHRoYXQgdGhlIHZhbHVlIG9mIFJGQyA0OTYwIGlzIHVzZWQuICovCisJCW5ldC0+Y3duZCA9IG1p
bigobmV0LT5tdHUgKiA0KSwgbWF4KCgyICogbmV0LT5tdHUpLCBTQ1RQX0lOSVRJQUxfQ1dORCkp
OworCX0gZWxzZSB7CisJCS8qCisJCSAqIFdlIHRha2UgdGhlIG1pbmltdW0gb2YgdGhlIGJ1cnN0
IGxpbWl0IGFuZCB0aGUKKwkJICogaW5pdGlhbCBjb25nZXN0aW9uIHdpbmRvdy4KKwkJICovCisJ
CWlmICgoYXNzb2MtPm1heF9idXJzdCA+IDApICYmIChjd25kX2luX210dSA+IGFzc29jLT5tYXhf
YnVyc3QpKQorCQkJY3duZF9pbl9tdHUgPSBhc3NvYy0+bWF4X2J1cnN0OworCQluZXQtPmN3bmQg
PSAobmV0LT5tdHUgLSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKSAqIGN3bmRfaW5fbXR1OworCX0K
KwlpZiAoKHN0Y2ItPmFzb2Muc2N0cF9jbXRfb25fb2ZmID09IFNDVFBfQ01UX1JQVjEpIHx8CisJ
ICAgIChzdGNiLT5hc29jLnNjdHBfY210X29uX29mZiA9PSBTQ1RQX0NNVF9SUFYyKSkgeworCQkv
KiBJbiBjYXNlIG9mIHJlc291cmNlIHBvb2xpbmcgaW5pdGlhbGl6ZSBhcHByb3ByaWF0ZWx5ICov
CisJCW5ldC0+Y3duZCAvPSBhc3NvYy0+bnVtbmV0czsKKwkJaWYgKG5ldC0+Y3duZCA8IChuZXQt
Pm10dSAtIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpKSB7CisJCQluZXQtPmN3bmQgPSBuZXQtPm10
dSAtIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7CisJCX0KKwl9CisJc2N0cF9lbmZvcmNlX2N3bmRf
bGltaXQoYXNzb2MsIG5ldCk7CisJbmV0LT5zc3RocmVzaCA9IGFzc29jLT5wZWVyc19yd25kOwor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJU0RU
X1BST0JFNShzY3RwLCBjd25kLCBuZXQsIGluaXQsCisJICAgICAgICAgIHN0Y2ItPmFzb2MubXlf
dnRhZywgKChzdGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0IDw8IDE2KSB8IChzdGNiLT5ycG9ydCkp
LCBuZXQsCisJICAgICAgICAgIDAsIG5ldC0+Y3duZCk7CisjZW5kaWYKKwlpZiAoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYKKwkgICAgKFNDVFBfQ1dORF9NT05JVE9SX0VO
QUJMRXxTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpKSB7CisJCXNjdHBfbG9nX2N3bmQoc3RjYiwg
bmV0LCAwLCBTQ1RQX0NXTkRfSU5JVElBTElaQVRJT04pOworCX0KK30KKworc3RhdGljIHZvaWQK
K3NjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZnIoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKK3sKKwlz
dHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJdWludDMyX3QgdF9zc3RocmVzaCwgdF9jd25kOworCXVp
bnQ2NF90IHRfdWN3bmRfc2J3OworCisJLyogTVQgRklYTUU6IERvbid0IGNvbXB1dGUgdGhpcyBv
dmVyIGFuZCBvdmVyIGFnYWluICovCisJdF9zc3RocmVzaCA9IDA7CisJdF9jd25kID0gMDsKKwl0
X3Vjd25kX3NidyA9IDA7CisJaWYgKChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPT0gU0NUUF9DTVRf
UlBWMSkgfHwKKwkgICAgKGFzb2MtPnNjdHBfY210X29uX29mZiA9PSBTQ1RQX0NNVF9SUFYyKSkg
eworCQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgeworCQkJdF9z
c3RocmVzaCArPSBuZXQtPnNzdGhyZXNoOworCQkJdF9jd25kICs9IG5ldC0+Y3duZDsKKwkJCWlm
IChuZXQtPmxhc3RzYSA+IDApIHsKKwkJCQl0X3Vjd25kX3NidyArPSAodWludDY0X3QpbmV0LT5j
d25kIC8gKHVpbnQ2NF90KW5ldC0+bGFzdHNhOworCQkJfQorCQl9CisJCWlmICh0X3Vjd25kX3Ni
dyA9PSAwKSB7CisJCQl0X3Vjd25kX3NidyA9IDE7CisJCX0KKwl9CisKKwkvKi0KKwkgKiBDTVQg
ZmFzdCByZWNvdmVyeSBjb2RlLiBOZWVkIHRvIGRlYnVnLiAoKHNjdHBfY210X29uX29mZiA+IDAp
ICYmCisJICogKG5ldC0+ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVyeSA9PSAwKSkpCisJICovCisJ
VEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKKwkJaWYgKChhc29j
LT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ID09IDApIHx8CisJCSAgICAoYXNvYy0+c2N0cF9j
bXRfb25fb2ZmID4gMCkpIHsKKwkJCS8qIG91dCBvZiBhIFJGQzI1ODIgRmFzdCByZWNvdmVyeSB3
aW5kb3c/ICovCisJCQlpZiAobmV0LT5uZXRfYWNrID4gMCkgeworCQkJCS8qCisJCQkJICogcGVy
IHNlY3Rpb24gNy4yLjMsIGFyZSB0aGVyZSBhbnkKKwkJCQkgKiBkZXN0aW5hdGlvbnMgdGhhdCBo
YWQgYSBmYXN0IHJldHJhbnNtaXQKKwkJCQkgKiB0byB0aGVtLiBJZiBzbyB3aGF0IHdlIG5lZWQg
dG8gZG8gaXMKKwkJCQkgKiBhZGp1c3Qgc3N0aHJlc2ggYW5kIGN3bmQuCisJCQkJICovCisJCQkJ
c3RydWN0IHNjdHBfdG1pdF9jaHVuayAqbGNoazsKKwkJCQlpbnQgb2xkX2N3bmQgPSBuZXQtPmN3
bmQ7CisKKwkJCQlpZiAoKGFzb2MtPnNjdHBfY210X29uX29mZiA9PSBTQ1RQX0NNVF9SUFYxKSB8
fAorCQkJCSAgICAoYXNvYy0+c2N0cF9jbXRfb25fb2ZmID09IFNDVFBfQ01UX1JQVjIpKSB7CisJ
CQkJCWlmIChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPT0gU0NUUF9DTVRfUlBWMSkgeworCQkJCQkJ
bmV0LT5zc3RocmVzaCA9ICh1aW50MzJfdCkoKCh1aW50NjRfdCk0ICoKKwkJCQkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KW5ldC0+bXR1ICoKKwkJCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KW5ldC0+c3N0aHJlc2gp
IC8KKwkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50NjRfdCl0X3NzdGhyZXNo
KTsKKwkJCQkJfQorCQkJCQlpZiAoYXNvYy0+c2N0cF9jbXRfb25fb2ZmID09IFNDVFBfQ01UX1JQ
VjIpIHsKKwkJCQkJCXVpbnQzMl90IHNydHQ7CisKKwkJCQkJCXNydHQgPSBuZXQtPmxhc3RzYTsK
KwkJCQkJCS8qIGxhc3RzYT4+MzsgIHdlIGRvbid0IG5lZWQgdG8gZGV2aWRlIC4uLiovCisJCQkJ
CQlpZiAoc3J0dCA9PSAwKSB7CisJCQkJCQkJc3J0dCA9IDE7CisJCQkJCQl9CisJCQkJCQkvKiBT
aG9ydCBWZXJzaW9uID0+IEVxdWFsIHRvIENvbnRlbCBWZXJzaW9uIE1CZSAqLworCQkJCQkJbmV0
LT5zc3RocmVzaCA9ICh1aW50MzJfdCkgKCgodWludDY0X3QpNCAqCisJCQkJCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICh1aW50NjRfdCluZXQtPm10dSAqCisJCQkJCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICh1aW50NjRfdCluZXQtPmN3bmQpIC8KKwkJCQkJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoKHVpbnQ2NF90KXNydHQgKgorCQkJCQkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0X3Vjd25kX3NidykpOworCQkJCQkJCQkJICAgICAvKiBJTkNSRUFT
RSBGQUNUT1IgKi87CisJCQkJCX0KKwkJCQkJaWYgKChuZXQtPmN3bmQgPiB0X2N3bmQgLyAyKSAm
JgorCQkJCQkgICAgKG5ldC0+c3N0aHJlc2ggPCBuZXQtPmN3bmQgLSB0X2N3bmQgLyAyKSkgewor
CQkJCQkJbmV0LT5zc3RocmVzaCA9IG5ldC0+Y3duZCAtIHRfY3duZCAvIDI7CisJCQkJCX0KKwkJ
CQkJaWYgKG5ldC0+c3N0aHJlc2ggPCBuZXQtPm10dSkgeworCQkJCQkJbmV0LT5zc3RocmVzaCA9
IG5ldC0+bXR1OworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJbmV0LT5zc3RocmVzaCA9IG5l
dC0+Y3duZCAvIDI7CisJCQkJCWlmIChuZXQtPnNzdGhyZXNoIDwgKG5ldC0+bXR1ICogMikpIHsK
KwkJCQkJCW5ldC0+c3N0aHJlc2ggPSAyICogbmV0LT5tdHU7CisJCQkJCX0KKwkJCQl9CisJCQkJ
bmV0LT5jd25kID0gbmV0LT5zc3RocmVzaDsKKwkJCQlzY3RwX2VuZm9yY2VfY3duZF9saW1pdChh
c29jLCBuZXQpOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisJCQkJU0RUX1BST0JFNShzY3RwLCBjd25kLCBuZXQsIGZyLAorCQkJCQkgIHN0Y2It
PmFzb2MubXlfdnRhZywgKChzdGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0IDw8IDE2KSB8IChzdGNi
LT5ycG9ydCkpLCBuZXQsCisJCQkJCSAgb2xkX2N3bmQsIG5ldC0+Y3duZCk7CisjZW5kaWYKKwkJ
CQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01P
TklUT1JfRU5BQkxFKSB7CisJCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCAobmV0LT5jd25k
IC0gb2xkX2N3bmQpLAorCQkJCQkJU0NUUF9DV05EX0xPR19GUk9NX0ZSKTsKKwkJCQl9CisJCQkJ
bGNoayA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zZW5kX3F1ZXVlKTsKKworCQkJCW5ldC0+cGFydGlh
bF9ieXRlc19hY2tlZCA9IDA7CisJCQkJLyogVHVybiBvbiBmYXN0IHJlY292ZXJ5IHdpbmRvdyAq
LworCQkJCWFzb2MtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgPSAxOworCQkJCWlmIChsY2hr
ID09IE5VTEwpIHsKKwkJCQkJLyogTWFyayBlbmQgb2YgdGhlIHdpbmRvdyAqLworCQkJCQlhc29j
LT5mYXN0X3JlY292ZXJ5X3RzbiA9IGFzb2MtPnNlbmRpbmdfc2VxIC0gMTsKKwkJCQl9IGVsc2Ug
eworCQkJCQlhc29jLT5mYXN0X3JlY292ZXJ5X3RzbiA9IGxjaGstPnJlYy5kYXRhLnRzbiAtIDE7
CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBDTVQgZmFzdCByZWNvdmVyeSAtLSBwZXIgZGVzdGlu
YXRpb24KKwkJCQkgKiByZWNvdmVyeSB2YXJpYWJsZS4KKwkJCQkgKi8KKwkJCQluZXQtPmZhc3Rf
cmV0cmFuX2xvc3NfcmVjb3ZlcnkgPSAxOworCisJCQkJaWYgKGxjaGsgPT0gTlVMTCkgeworCQkJ
CQkvKiBNYXJrIGVuZCBvZiB0aGUgd2luZG93ICovCisJCQkJCW5ldC0+ZmFzdF9yZWNvdmVyeV90
c24gPSBhc29jLT5zZW5kaW5nX3NlcSAtIDE7CisJCQkJfSBlbHNlIHsKKwkJCQkJbmV0LT5mYXN0
X3JlY292ZXJ5X3RzbiA9IGxjaGstPnJlYy5kYXRhLnRzbiAtIDE7CisJCQkJfQorCisJCQkJc2N0
cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TRU5ELAorCQkJCQkJc3RjYi0+c2N0cF9lcCwg
c3RjYiwgbmV0LAorCQkJCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9DQ19GVU5DVElP
TlMgKyBTQ1RQX0xPQ18xKTsKKwkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9T
RU5ELAorCQkJCQkJIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCk7CisJCQl9CisJCX0gZWxzZSBp
ZiAobmV0LT5uZXRfYWNrID4gMCkgeworCQkJLyoKKwkJCSAqIE1hcmsgYSBwZWcgdGhhdCB3ZSBX
T1VMRCBoYXZlIGRvbmUgYSBjd25kCisJCQkgKiByZWR1Y3Rpb24gYnV0IFJGQzI1ODIgcHJldmVu
dGVkIHRoaXMgYWN0aW9uLgorCQkJICovCisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19mYXN0cmV0
cmFuc2lucnR0KTsKKwkJfQorCX0KK30KKworLyogRGVmaW5lcyBmb3IgaW5zdGFudGFuZW91cyBi
dyBkZWNpc2lvbnMgKi8KKyNkZWZpbmUgU0NUUF9JTlNUX0xPT1NJTkcgMSAvKiBMb3NpbmcgdG8g
b3RoZXIgZmxvd3MgKi8KKyNkZWZpbmUgU0NUUF9JTlNUX05FVVRSQUwgMiAvKiBOZXV0cmFsLCBu
byBpbmRpY2F0aW9uICovCisjZGVmaW5lIFNDVFBfSU5TVF9HQUlOSU5HIDMgLyogR2FpbmluZywg
c3RlcCBkb3duIHBvc3NpYmxlICovCisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorc3RhdGljIGludAorY2NfYndfc2FtZShzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgdWludDY0X3QgbmJ3LAorICAgICAgICAg
ICB1aW50NjRfdCBydHRfb2Zmc2V0LCB1aW50NjRfdCB2dGFnLCB1aW50OF90IGluc3RfaW5kKQor
I2Vsc2UKK3N0YXRpYyBpbnQKK2NjX2J3X3NhbWUoc3RydWN0IHNjdHBfdGNiICpzdGNiIFNDVFBf
VU5VU0VELCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIHVpbnQ2NF90IG5idywKKyAgICAgICAgICAg
dWludDY0X3QgcnR0X29mZnNldCwgdWludDhfdCBpbnN0X2luZCkKKyNlbmRpZgoreworI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJdWludDY0X3Qg
b3RoLCBwcm9iZXBvaW50OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXByb2JlcG9pbnQgPSAoKCh1aW50NjRfdCluZXQtPmN3
bmQpIDw8IDMyKTsKKyNlbmRpZgorCWlmIChuZXQtPnJ0dCA+IG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3
X3J0dCArIHJ0dF9vZmZzZXQpIHsKKwkJLyoKKwkJICogcnR0IGluY3JlYXNlZAorCQkgKiB3ZSBk
b24ndCB1cGRhdGUgYncuLiBzbyB3ZSBkb24ndAorCQkgKiB1cGRhdGUgdGhlIHJ0dCBlaXRoZXIu
CisJCSAqLworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisJCS8qIFByb2JlIHBvaW50IDUgKi8KKwkJcHJvYmVwb2ludCB8PSAgKCg1IDw8IDE2KSB8
IDEpOworCQlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgcnR0dmFyLAorCQkJICB2dGFnLAor
CQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3IDw8IDMyKSB8IG5idyksCisJCQkgICgobmV0LT5j
Y19tb2QucnRjYy5sYndfcnR0IDw8IDMyKSB8IG5ldC0+cnR0KSwKKwkJCSAgbmV0LT5mbGlnaHRf
c2l6ZSwKKwkJCSAgcHJvYmVwb2ludCk7CisjZW5kaWYKKwkJaWYgKChuZXQtPmNjX21vZC5ydGNj
LnN0ZWFkeV9zdGVwKSAmJiAoaW5zdF9pbmQgIT0gU0NUUF9JTlNUX0xPT1NJTkcpKSB7CisJCQlp
ZiAobmV0LT5jY19tb2QucnRjYy5sYXN0X3N0ZXBfc3RhdGUgPT0gNSkKKwkJCQluZXQtPmNjX21v
ZC5ydGNjLnN0ZXBfY250Kys7CisJCQllbHNlCisJCQkJbmV0LT5jY19tb2QucnRjYy5zdGVwX2Nu
dCA9IDE7CisJCQluZXQtPmNjX21vZC5ydGNjLmxhc3Rfc3RlcF9zdGF0ZSA9IDU7CisJCQlpZiAo
KG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQgPT0gbmV0LT5jY19tb2QucnRjYy5zdGVhZHlfc3Rl
cCkgfHwKKwkJCSAgICAoKG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQgPiBuZXQtPmNjX21vZC5y
dGNjLnN0ZWFkeV9zdGVwKSAmJgorCQkJICAgICAoKG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQg
JSBuZXQtPmNjX21vZC5ydGNjLnN0ZWFkeV9zdGVwKSA9PSAwKSkpIHsKKwkJCQkvKiBUcnkgYSBz
dGVwIGRvd24gKi8KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorCQkJCW90aCA9IG5ldC0+Y2NfbW9kLnJ0Y2Mudm9sX3JlZHVjZTsKKwkJCQlvdGgg
PDw9IDE2OworCQkJCW90aCB8PSBuZXQtPmNjX21vZC5ydGNjLnN0ZXBfY250OworCQkJCW90aCA8
PD0gMTY7CisJCQkJb3RoIHw9IG5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9zdGVwX3N0YXRlOworCQkJ
CVNEVF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBydHRzdGVwLAorCQkJCQkgIHZ0YWcsCisJCQkJ
CSAgKChuZXQtPmNjX21vZC5ydGNjLmxidyA8PCAzMikgfCBuYncpLAorCQkJCQkgICgobmV0LT5j
Y19tb2QucnRjYy5sYndfcnR0IDw8IDMyKSB8IG5ldC0+cnR0KSwKKwkJCQkJICBvdGgsCisJCQkJ
CSAgcHJvYmVwb2ludCk7CisjZW5kaWYKKwkJCQlpZiAobmV0LT5jd25kID4gKDQgKiBuZXQtPm10
dSkpIHsKKwkJCQkJbmV0LT5jd25kIC09IG5ldC0+bXR1OworCQkJCQluZXQtPmNjX21vZC5ydGNj
LnZvbF9yZWR1Y2UrKzsKKwkJCQl9IGVsc2UgeworCQkJCQluZXQtPmNjX21vZC5ydGNjLnN0ZXBf
Y250ID0gMDsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuICgxKTsKKwl9CisJaWYgKG5ldC0+
cnR0IDwgbmV0LT5jY19tb2QucnRjYy5sYndfcnR0LXJ0dF9vZmZzZXQpIHsKKwkJLyoKKwkJICog
cnR0IGRlY3JlYXNlZCwgdGhlcmUgY291bGQgYmUgbW9yZSByb29tLgorCQkgKiB3ZSB1cGRhdGUg
Ym90aCB0aGUgYncgYW5kIHRoZSBydHQgaGVyZSB0bworCQkgKiBsb2NrIHRoaXMgaW4gYXMgYSBn
b29kIHN0ZXAgZG93bi4KKwkJICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwkJLyogUHJvYmUgcG9pbnQgNiAqLworCQlwcm9iZXBvaW50IHw9
ICAoKDYgPDwgMTYpIHwgMCk7CisJCVNEVF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBydHR2YXIs
CisJCQkgIHZ0YWcsCisJCQkgICgobmV0LT5jY19tb2QucnRjYy5sYncgPDwgMzIpIHwgbmJ3KSwK
KwkJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxid19ydHQgPDwgMzIpIHwgbmV0LT5ydHQpLAorCQkJ
ICBuZXQtPmZsaWdodF9zaXplLAorCQkJICBwcm9iZXBvaW50KTsKKyNlbmRpZgorCQlpZiAobmV0
LT5jY19tb2QucnRjYy5zdGVhZHlfc3RlcCkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYm
ICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQlvdGggPSBuZXQtPmNjX21vZC5ydGNjLnZvbF9y
ZWR1Y2U7CisJCQlvdGggPDw9IDE2OworCQkJb3RoIHw9IG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9j
bnQ7CisJCQlvdGggPDw9IDE2OworCQkJb3RoIHw9IG5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9zdGVw
X3N0YXRlOworCQkJU0RUX1BST0JFNShzY3RwLCBjd25kLCBuZXQsIHJ0dHN0ZXAsCisJCQkJICB2
dGFnLAorCQkJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxidyA8PCAzMikgfCBuYncpLAorCQkJCSAg
KChuZXQtPmNjX21vZC5ydGNjLmxid19ydHQgPDwgMzIpIHwgbmV0LT5ydHQpLAorCQkJCSAgb3Ro
LAorCQkJCSAgcHJvYmVwb2ludCk7CisjZW5kaWYKKwkJCWlmICgobmV0LT5jY19tb2QucnRjYy5s
YXN0X3N0ZXBfc3RhdGUgPT0gNSkgJiYKKwkJCSAgICAobmV0LT5jY19tb2QucnRjYy5zdGVwX2Nu
dCA+IG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlYWR5X3N0ZXApKSB7CisJCQkJLyogU3RlcCBkb3duIHdv
cmtlZCAqLworCQkJCW5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQgPSAwOworCQkJCXJldHVybiAo
MSk7CisJCQl9IGVsc2UgeworCQkJCW5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9zdGVwX3N0YXRlID0g
NjsKKwkJCQluZXQtPmNjX21vZC5ydGNjLnN0ZXBfY250ID0gMDsKKwkJCX0KKwkJfQorCQluZXQt
PmNjX21vZC5ydGNjLmxidyA9IG5idzsKKwkJbmV0LT5jY19tb2QucnRjYy5sYndfcnR0ID0gbmV0
LT5ydHQ7CisJCW5ldC0+Y2NfbW9kLnJ0Y2MuY3duZF9hdF9id19zZXQgPSBuZXQtPmN3bmQ7CisJ
CWlmIChpbnN0X2luZCA9PSBTQ1RQX0lOU1RfR0FJTklORykKKwkJCXJldHVybiAoMSk7CisJCWVs
c2UgaWYgKGluc3RfaW5kID09IFNDVFBfSU5TVF9ORVVUUkFMKQorCQkJcmV0dXJuICgxKTsKKwkJ
ZWxzZQorCQkJcmV0dXJuICgwKTsKKwl9CisJLyogT2sgYncgYW5kIHJ0dCByZW1haW5lZCB0aGUg
c2FtZSAuLiBubyB1cGRhdGUgdG8gYW55CisJICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkvKiBQcm9iZSBwb2ludCA3ICovCisJcHJvYmVw
b2ludCB8PSAgKCg3IDw8IDE2KSB8IG5ldC0+Y2NfbW9kLnJ0Y2MucmV0X2Zyb21fZXEpOworCVNE
VF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBydHR2YXIsCisJCSAgdnRhZywKKwkJICAoKG5ldC0+
Y2NfbW9kLnJ0Y2MubGJ3IDw8IDMyKSB8IG5idyksCisJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxi
d19ydHQgPDwgMzIpIHwgbmV0LT5ydHQpLAorCQkgIG5ldC0+ZmxpZ2h0X3NpemUsCisJCSAgcHJv
YmVwb2ludCk7CisjZW5kaWYKKwlpZiAoKG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlYWR5X3N0ZXApICYm
IChpbnN0X2luZCAhPSBTQ1RQX0lOU1RfTE9PU0lORykpIHsKKwkJaWYgKG5ldC0+Y2NfbW9kLnJ0
Y2MubGFzdF9zdGVwX3N0YXRlID09IDUpCisJCQluZXQtPmNjX21vZC5ydGNjLnN0ZXBfY250Kys7
CisJCWVsc2UKKwkJCW5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQgPSAxOworCQluZXQtPmNjX21v
ZC5ydGNjLmxhc3Rfc3RlcF9zdGF0ZSA9IDU7CisJCWlmICgobmV0LT5jY19tb2QucnRjYy5zdGVw
X2NudCA9PSBuZXQtPmNjX21vZC5ydGNjLnN0ZWFkeV9zdGVwKSB8fAorCQkgICAgKChuZXQtPmNj
X21vZC5ydGNjLnN0ZXBfY250ID4gbmV0LT5jY19tb2QucnRjYy5zdGVhZHlfc3RlcCkgJiYKKwkJ
ICAgICAoKG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQgJSBuZXQtPmNjX21vZC5ydGNjLnN0ZWFk
eV9zdGVwKSA9PSAwKSkpIHsKKwkJCS8qIFRyeSBhIHN0ZXAgZG93biAqLworCQkJaWYgKG5ldC0+
Y3duZCA+ICg0ICogbmV0LT5tdHUpKSB7CisJCQkJbmV0LT5jd25kIC09IG5ldC0+bXR1OworCQkJ
CW5ldC0+Y2NfbW9kLnJ0Y2Mudm9sX3JlZHVjZSsrOworCQkJCXJldHVybiAoMSk7CisJCQl9IGVs
c2UgeworCQkJCW5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQgPSAwOworCQkJfQorCQl9CisJfQor
CWlmIChpbnN0X2luZCA9PSBTQ1RQX0lOU1RfR0FJTklORykKKwkJcmV0dXJuICgxKTsKKwllbHNl
IGlmIChpbnN0X2luZCA9PSBTQ1RQX0lOU1RfTkVVVFJBTCkKKwkJcmV0dXJuICgxKTsKKwllbHNl
CisJCXJldHVybiAoKGludCluZXQtPmNjX21vZC5ydGNjLnJldF9mcm9tX2VxKTsKK30KKworI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitzdGF0aWMg
aW50CitjY19id19kZWNyZWFzZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25l
dHMgKm5ldCwgdWludDY0X3QgbmJ3LCB1aW50NjRfdCBydHRfb2Zmc2V0LAorICAgICAgICAgICAg
ICAgdWludDY0X3QgdnRhZywgdWludDhfdCBpbnN0X2luZCkKKyNlbHNlCitzdGF0aWMgaW50Citj
Y19id19kZWNyZWFzZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBz
Y3RwX25ldHMgKm5ldCwgdWludDY0X3QgbmJ3LCB1aW50NjRfdCBydHRfb2Zmc2V0LAorICAgICAg
ICAgICAgICAgdWludDhfdCBpbnN0X2luZCkKKyNlbmRpZgoreworI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJdWludDY0X3Qgb3RoLCBwcm9iZXBv
aW50OworI2VuZGlmCisKKwkvKiBCYW5kd2lkdGggZGVjcmVhc2VkLiovCisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlwcm9iZXBvaW50ID0gKCgo
dWludDY0X3QpbmV0LT5jd25kKSA8PCAzMik7CisjZW5kaWYKKwlpZiAobmV0LT5ydHQgID4gbmV0
LT5jY19tb2QucnRjYy5sYndfcnR0K3J0dF9vZmZzZXQpIHsKKwkJLyogcnR0IGluY3JlYXNlZCAq
LworCQkvKiBEaWQgd2UgYWRkIG1vcmUgKi8KKwkJaWYgKChuZXQtPmN3bmQgPiBuZXQtPmNjX21v
ZC5ydGNjLmN3bmRfYXRfYndfc2V0KSAmJgorCQkgICAgKGluc3RfaW5kICE9IFNDVFBfSU5TVF9M
T09TSU5HKSkgeworCQkJLyogV2UgY2F1c2VkIGl0IG1heWJlLi4gYmFjayBvZmY/ICovCisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCS8qIFBS
T0JFIFBPSU5UIDEgKi8KKwkJCXByb2JlcG9pbnQgfD0gICgoMSA8PCAxNikgfCAxKTsKKwkJCVNE
VF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBydHR2YXIsCisJCQkJICB2dGFnLAorCQkJCSAgKChu
ZXQtPmNjX21vZC5ydGNjLmxidyA8PCAzMikgfCBuYncpLAorCQkJCSAgKChuZXQtPmNjX21vZC5y
dGNjLmxid19ydHQgPDwgMzIpIHwgbmV0LT5ydHQpLAorCQkJCSAgbmV0LT5mbGlnaHRfc2l6ZSwK
KwkJCQkgIHByb2JlcG9pbnQpOworI2VuZGlmCisJCQlpZiAobmV0LT5jY19tb2QucnRjYy5yZXRf
ZnJvbV9lcSkgeworCQkJCS8qIFN3aXRjaCBvdmVyIHRvIENBIGlmIHdlIGFyZSBsZXNzIGFnZ3Jl
c3NpdmUgKi8KKwkJCQluZXQtPnNzdGhyZXNoID0gbmV0LT5jd25kLTE7CisJCQkJbmV0LT5wYXJ0
aWFsX2J5dGVzX2Fja2VkID0gMDsKKwkJCX0KKwkJCXJldHVybiAoMSk7CisJCX0KKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkvKiBQcm9iZSBw
b2ludCAyICovCisJCXByb2JlcG9pbnQgfD0gICgoMiA8PCAxNikgfCAwKTsKKwkJU0RUX1BST0JF
NShzY3RwLCBjd25kLCBuZXQsIHJ0dHZhciwKKwkJCSAgdnRhZywKKwkJCSAgKChuZXQtPmNjX21v
ZC5ydGNjLmxidyA8PCAzMikgfCBuYncpLAorCQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0
dCA8PCAzMikgfCBuZXQtPnJ0dCksCisJCQkgIG5ldC0+ZmxpZ2h0X3NpemUsCisJCQkgIHByb2Jl
cG9pbnQpOworI2VuZGlmCisJCS8qIFNvbWVvbmUgZWxzZSAtIGZpZ2h0IGZvciBtb3JlPyAqLwor
CQlpZiAobmV0LT5jY19tb2QucnRjYy5zdGVhZHlfc3RlcCkgeworI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQlvdGggPSBuZXQtPmNjX21vZC5y
dGNjLnZvbF9yZWR1Y2U7CisJCQlvdGggPDw9IDE2OworCQkJb3RoIHw9IG5ldC0+Y2NfbW9kLnJ0
Y2Muc3RlcF9jbnQ7CisJCQlvdGggPDw9IDE2OworCQkJb3RoIHw9IG5ldC0+Y2NfbW9kLnJ0Y2Mu
bGFzdF9zdGVwX3N0YXRlOworCQkJU0RUX1BST0JFNShzY3RwLCBjd25kLCBuZXQsIHJ0dHN0ZXAs
CisJCQkJICB2dGFnLAorCQkJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxidyA8PCAzMikgfCBuYncp
LAorCQkJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxid19ydHQgPDwgMzIpIHwgbmV0LT5ydHQpLAor
CQkJCSAgb3RoLAorCQkJCSAgcHJvYmVwb2ludCk7CisjZW5kaWYKKwkJCS8qIERpZCB3ZSB2b2x1
bnRhcmlseSBnaXZlIHVwIHNvbWU/IGlmIHNvIHRha2UKKwkJCSAqIG9uZSBiYWNrIHBsZWFzZQor
CQkJICovCisJCQlpZiAoKG5ldC0+Y2NfbW9kLnJ0Y2Mudm9sX3JlZHVjZSkgJiYKKwkJCSAgICAo
aW5zdF9pbmQgIT0gU0NUUF9JTlNUX0dBSU5JTkcpKSB7CisJCQkJbmV0LT5jd25kICs9IG5ldC0+
bXR1OworCQkJCXNjdHBfZW5mb3JjZV9jd25kX2xpbWl0KCZzdGNiLT5hc29jLCBuZXQpOworCQkJ
CW5ldC0+Y2NfbW9kLnJ0Y2Mudm9sX3JlZHVjZS0tOworCQkJfQorCQkJbmV0LT5jY19tb2QucnRj
Yy5sYXN0X3N0ZXBfc3RhdGUgPSAyOworCQkJbmV0LT5jY19tb2QucnRjYy5zdGVwX2NudCA9IDA7
CisJCX0KKwkJZ290byBvdXRfZGVjaXNpb247CisJfSBlbHNlICBpZiAobmV0LT5ydHQgIDwgbmV0
LT5jY19tb2QucnRjYy5sYndfcnR0LXJ0dF9vZmZzZXQpIHsKKwkJLyogYncgJiBydHQgZGVjcmVh
c2VkICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwkJLyogUHJvYmUgcG9pbnQgMyAqLworCQlwcm9iZXBvaW50IHw9ICAoKDMgPDwgMTYpIHwg
MCk7CisJCVNEVF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBydHR2YXIsCisJCQkgIHZ0YWcsCisJ
CQkgICgobmV0LT5jY19tb2QucnRjYy5sYncgPDwgMzIpIHwgbmJ3KSwKKwkJCSAgKChuZXQtPmNj
X21vZC5ydGNjLmxid19ydHQgPDwgMzIpIHwgbmV0LT5ydHQpLAorCQkJICBuZXQtPmZsaWdodF9z
aXplLAorCQkJICBwcm9iZXBvaW50KTsKKyNlbmRpZgorCQlpZiAobmV0LT5jY19tb2QucnRjYy5z
dGVhZHlfc3RlcCkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisJCQlvdGggPSBuZXQtPmNjX21vZC5ydGNjLnZvbF9yZWR1Y2U7CisJCQlvdGgg
PDw9IDE2OworCQkJb3RoIHw9IG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQ7CisJCQlvdGggPDw9
IDE2OworCQkJb3RoIHw9IG5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9zdGVwX3N0YXRlOworCQkJU0RU
X1BST0JFNShzY3RwLCBjd25kLCBuZXQsIHJ0dHN0ZXAsCisJCQkJICB2dGFnLAorCQkJCSAgKChu
ZXQtPmNjX21vZC5ydGNjLmxidyA8PCAzMikgfCBuYncpLAorCQkJCSAgKChuZXQtPmNjX21vZC5y
dGNjLmxid19ydHQgPDwgMzIpIHwgbmV0LT5ydHQpLAorCQkJCSAgb3RoLAorCQkJCSAgcHJvYmVw
b2ludCk7CisjZW5kaWYKKwkJCWlmICgobmV0LT5jY19tb2QucnRjYy52b2xfcmVkdWNlKSAmJgor
CQkJICAgIChpbnN0X2luZCAhPSBTQ1RQX0lOU1RfR0FJTklORykpIHsKKwkJCQluZXQtPmN3bmQg
Kz0gbmV0LT5tdHU7CisJCQkJc2N0cF9lbmZvcmNlX2N3bmRfbGltaXQoJnN0Y2ItPmFzb2MsIG5l
dCk7CisJCQkJbmV0LT5jY19tb2QucnRjYy52b2xfcmVkdWNlLS07CisJCQl9CisJCQluZXQtPmNj
X21vZC5ydGNjLmxhc3Rfc3RlcF9zdGF0ZSA9IDM7CisJCQluZXQtPmNjX21vZC5ydGNjLnN0ZXBf
Y250ID0gMDsKKwkJfQorCQlnb3RvIG91dF9kZWNpc2lvbjsKKwl9CisJLyogVGhlIGJ3IGRlY3Jl
YXNlZCBidXQgcnR0IHN0YXllZCB0aGUgc2FtZSAqLworI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJLyogUHJvYmUgcG9pbnQgNCAqLworCXByb2Jl
cG9pbnQgfD0gICgoNCA8PCAxNikgfCAwKTsKKwlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwg
cnR0dmFyLAorCQkgIHZ0YWcsCisJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxidyA8PCAzMikgfCBu
YncpLAorCQkgICgobmV0LT5jY19tb2QucnRjYy5sYndfcnR0IDw8IDMyKSB8IG5ldC0+cnR0KSwK
KwkJICBuZXQtPmZsaWdodF9zaXplLAorCQkgIHByb2JlcG9pbnQpOworI2VuZGlmCisJaWYgKG5l
dC0+Y2NfbW9kLnJ0Y2Muc3RlYWR5X3N0ZXApIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAm
JiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlvdGggPSBuZXQtPmNjX21vZC5ydGNjLnZvbF9y
ZWR1Y2U7CisJCW90aCA8PD0gMTY7CisJCW90aCB8PSBuZXQtPmNjX21vZC5ydGNjLnN0ZXBfY250
OworCQlvdGggPDw9IDE2OworCQlvdGggfD0gbmV0LT5jY19tb2QucnRjYy5sYXN0X3N0ZXBfc3Rh
dGU7CisJCVNEVF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBydHRzdGVwLAorCQkJICB2dGFnLAor
CQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3IDw8IDMyKSB8IG5idyksCisJCQkgICgobmV0LT5j
Y19tb2QucnRjYy5sYndfcnR0IDw8IDMyKSB8IG5ldC0+cnR0KSwKKwkJCSAgb3RoLAorCQkJICBw
cm9iZXBvaW50KTsKKyNlbmRpZgorCQlpZiAoKG5ldC0+Y2NfbW9kLnJ0Y2Mudm9sX3JlZHVjZSkg
JiYKKwkJICAgIChpbnN0X2luZCAhPSBTQ1RQX0lOU1RfR0FJTklORykpIHsKKwkJCW5ldC0+Y3du
ZCArPSBuZXQtPm10dTsKKwkJCXNjdHBfZW5mb3JjZV9jd25kX2xpbWl0KCZzdGNiLT5hc29jLCBu
ZXQpOworCQkJbmV0LT5jY19tb2QucnRjYy52b2xfcmVkdWNlLS07CisJCX0KKwkJbmV0LT5jY19t
b2QucnRjYy5sYXN0X3N0ZXBfc3RhdGUgPSA0OworCQluZXQtPmNjX21vZC5ydGNjLnN0ZXBfY250
ID0gMDsKKwl9CitvdXRfZGVjaXNpb246CisJbmV0LT5jY19tb2QucnRjYy5sYncgPSBuYnc7CisJ
bmV0LT5jY19tb2QucnRjYy5sYndfcnR0ID0gbmV0LT5ydHQ7CisJbmV0LT5jY19tb2QucnRjYy5j
d25kX2F0X2J3X3NldCA9IG5ldC0+Y3duZDsKKwlpZiAoaW5zdF9pbmQgPT0gU0NUUF9JTlNUX0dB
SU5JTkcpIHsKKwkJcmV0dXJuICgxKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gKDApOworCX0KK30K
KworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitz
dGF0aWMgaW50CitjY19id19pbmNyZWFzZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBz
Y3RwX25ldHMgKm5ldCwgdWludDY0X3QgbmJ3LCB1aW50NjRfdCB2dGFnKQorI2Vsc2UKK3N0YXRp
YyBpbnQKK2NjX2J3X2luY3JlYXNlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiBTQ1RQX1VOVVNFRCwg
c3RydWN0IHNjdHBfbmV0cyAqbmV0LCB1aW50NjRfdCBuYncpCisjZW5kaWYKK3sKKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXVpbnQ2NF90IG90
aCwgcHJvYmVwb2ludDsKKworI2VuZGlmCisJLyogQlcgaW5jcmVhc2VkLCBzbyB1cGRhdGUgYW5k
CisJICogcmV0dXJuIDAsIHNpbmNlIGFsbCBhY3Rpb25zIGluCisJICogb3VyIHRhYmxlIHNheSB0
byBkbyB0aGUgbm9ybWFsIENDCisJICogdXBkYXRlLiBOb3RlIHRoYXQgd2UgcGF5IG5vIGF0dGVu
dGlvbiB0bworCSAqIHRoZSBpbnN0X2luZCBzaW5jZSBvdXIgb3ZlcmFsbCBzdW0gaXMgaW5jcmVh
c2luZy4KKwkgKi8KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorCS8qIFBST0JFIFBPSU5UIDAgKi8KKwlwcm9iZXBvaW50ID0gKCgodWludDY0X3Qp
bmV0LT5jd25kKSA8PCAzMik7CisJU0RUX1BST0JFNShzY3RwLCBjd25kLCBuZXQsIHJ0dHZhciwK
KwkJICB2dGFnLAorCQkgICgobmV0LT5jY19tb2QucnRjYy5sYncgPDwgMzIpIHwgbmJ3KSwKKwkJ
ICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCA8PCAzMikgfCBuZXQtPnJ0dCksCisJCSAgbmV0
LT5mbGlnaHRfc2l6ZSwKKwkJICBwcm9iZXBvaW50KTsKKyNlbmRpZgorCWlmIChuZXQtPmNjX21v
ZC5ydGNjLnN0ZWFkeV9zdGVwKSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwkJb3RoID0gbmV0LT5jY19tb2QucnRjYy52b2xfcmVkdWNlOwor
CQlvdGggPDw9IDE2OworCQlvdGggfD0gbmV0LT5jY19tb2QucnRjYy5zdGVwX2NudDsKKwkJb3Ro
IDw8PSAxNjsKKwkJb3RoIHw9IG5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9zdGVwX3N0YXRlOworCQlT
RFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgcnR0c3RlcCwKKwkJCSAgdnRhZywKKwkJCSAgKChu
ZXQtPmNjX21vZC5ydGNjLmxidyA8PCAzMikgfCBuYncpLAorCQkJICAoKG5ldC0+Y2NfbW9kLnJ0
Y2MubGJ3X3J0dCA8PCAzMikgfCBuZXQtPnJ0dCksCisJCQkgIG90aCwKKwkJCSAgcHJvYmVwb2lu
dCk7CisjZW5kaWYKKwkJbmV0LT5jY19tb2QucnRjYy5sYXN0X3N0ZXBfc3RhdGUgPSAwOworCQlu
ZXQtPmNjX21vZC5ydGNjLnN0ZXBfY250ID0gMDsKKwkJbmV0LT5jY19tb2QucnRjYy52b2xfcmVk
dWNlID0gMDsKKwl9CisJbmV0LT5jY19tb2QucnRjYy5sYncgPSBuYnc7CisJbmV0LT5jY19tb2Qu
cnRjYy5sYndfcnR0ID0gbmV0LT5ydHQ7CisJbmV0LT5jY19tb2QucnRjYy5jd25kX2F0X2J3X3Nl
dCA9IG5ldC0+Y3duZDsKKwlyZXR1cm4gKDApOworfQorCisvKiBSVENDIEFsZ29yaXRobSB0byBs
aW1pdCBncm93dGggb2YgY3duZCwgcmV0dXJuCisgKiB0cnVlIGlmIHlvdSB3YW50IHRvIE5PVCBh
bGxvdyBjd25kIGdyb3d0aAorICovCitzdGF0aWMgaW50CitjY19id19saW1pdChzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgdWludDY0X3QgbmJ3KQoreworCXVp
bnQ2NF90IGJ3X29mZnNldCwgcnR0X29mZnNldDsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAm
JiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXVpbnQ2NF90IHByb2JlcG9pbnQsIHJ0dCwgdnRh
ZzsKKyNlbmRpZgorCXVpbnQ2NF90IGJ5dGVzX2Zvcl90aGlzX3J0dCwgaW5zdF9idzsKKwl1aW50
NjRfdCBkaXYsIGluc3Rfb2ZmOworCWludCBid19zaGlmdDsKKwl1aW50OF90IGluc3RfaW5kOwor
CWludCByZXQ7CisJLyotCisJICogSGVyZSB3ZSBuZWVkIHRvIHNlZSBpZiB3ZSB3YW50CisJICog
dG8gbGltaXQgY3duZCBncm93dGggZHVlIHRvIGluY3JlYXNlCisJICogaW4gb3ZlcmFsbCBydHQg
YnV0IG5vIGluY3JlYXNlIGluIGJ3LgorCSAqIFdlIHVzZSB0aGUgZm9sbG93aW5nIHRhYmxlIHRv
IGZpZ3VyZQorCSAqIG91dCB3aGF0IHdlIHNob3VsZCBkby4gV2hlbiB3ZSByZXR1cm4KKwkgKiAw
LCBjYyB1cGRhdGUgZ29lcyBvbiBhcyBwbGFubmVkLiBJZiB3ZQorCSAqIHJldHVybiAxLCB0aGVu
IG5vIGNjIHVwZGF0ZSBoYXBwZW5zIGFuZCBjd25kCisJICogc3RheXMgd2hlcmUgaXQgaXMgYXQu
CisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgQlcgICAgfCAg
ICBSVFQgICB8IEFjdGlvbgorCSAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgor
CSAqICAgSU5DICAgfCAgICBJTkMgICB8IHJldHVybiAwCisJICogLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCSAqICAgSU5DICAgfCAgICBTQU1FICB8IHJldHVybiAwCisJICog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgSU5DICAgfCAgICBERUNS
ICB8IHJldHVybiAwCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAq
ICAgU0FNRSAgfCAgICBJTkMgICB8IHJldHVybiAxCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCSAqICAgU0FNRSAgfCAgICBTQU1FICB8IHJldHVybiAxCisJICogLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgU0FNRSAgfCAgICBERUNSICB8
IHJldHVybiAwCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAg
REVDUiAgfCAgICBJTkMgICB8IHJldHVybiAwIG9yIDEgYmFzZWQgb24gaWYgd2UgY2F1c2VkLgor
CSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAgIERFQ1IgIHwgICAg
U0FNRSAgfCByZXR1cm4gMAorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KwkgKiAgIERFQ1IgIHwgICAgREVDUiAgfCByZXR1cm4gMAorCSAqIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKwkgKgorCSAqIFdlIGFyZSBhIGJpdCBmdXp6IG9uIHdoYXQgYW4g
aW5jcmVhc2Ugb3IKKwkgKiBkZWNyZWFzZSBpcy4gRm9yIEJXIGl0IGlzIHRoZSBzYW1lIGlmCisJ
ICogaXQgZGlkIG5vdCBjaGFuZ2Ugd2l0aGluIDEvNjR0aC4gRm9yCisJICogUlRUIGl0IHN0YXll
ZCB0aGUgc2FtZSBpZiBpdCBkaWQgbm90CisJICogY2hhbmdlIHdpdGhpbiAxLzMybmQKKwkgKi8K
Kwlid19zaGlmdCA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydHR2YXJfYncpOworI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJcnR0ID0gc3RjYi0+
YXNvYy5teV92dGFnOworCXZ0YWcgPSAocnR0IDw8IDMyKSB8ICgoKHVpbnQzMl90KShzdGNiLT5z
Y3RwX2VwLT5zY3RwX2xwb3J0KSkgPDwgMTYpIHwgKHN0Y2ItPnJwb3J0KTsKKwlwcm9iZXBvaW50
ID0gKCgodWludDY0X3QpbmV0LT5jd25kKSA8PCAzMik7CisJcnR0ID0gbmV0LT5ydHQ7CisjZW5k
aWYKKwlpZiAobmV0LT5jY19tb2QucnRjYy5ydHRfc2V0X3RoaXNfc2FjaykgeworCQluZXQtPmNj
X21vZC5ydGNjLnJ0dF9zZXRfdGhpc19zYWNrID0gMDsKKwkJYnl0ZXNfZm9yX3RoaXNfcnR0ID0g
bmV0LT5jY19tb2QucnRjYy5id19ieXRlcyAtIG5ldC0+Y2NfbW9kLnJ0Y2MuYndfYnl0ZXNfYXRf
bGFzdF9ydHRjOworCQluZXQtPmNjX21vZC5ydGNjLmJ3X2J5dGVzX2F0X2xhc3RfcnR0YyA9IG5l
dC0+Y2NfbW9kLnJ0Y2MuYndfYnl0ZXM7CisJCWlmIChuZXQtPnJ0dCkgeworCQkJZGl2ID0gbmV0
LT5ydHQgLyAxMDAwOworCQkJaWYgKGRpdikgeworCQkJCWluc3RfYncgPSBieXRlc19mb3JfdGhp
c19ydHQgLyBkaXY7CisJCQkJaW5zdF9vZmYgPSBpbnN0X2J3ID4+IGJ3X3NoaWZ0OworCQkJCWlm
IChpbnN0X2J3ID4gbmJ3KQorCQkJCQlpbnN0X2luZCA9IFNDVFBfSU5TVF9HQUlOSU5HOworCQkJ
CWVsc2UgaWYgKChpbnN0X2J3K2luc3Rfb2ZmKSA8IG5idykKKwkJCQkJaW5zdF9pbmQgPSBTQ1RQ
X0lOU1RfTE9PU0lORzsKKwkJCQllbHNlCisJCQkJCWluc3RfaW5kID0gU0NUUF9JTlNUX05FVVRS
QUw7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KwkJCQlwcm9iZXBvaW50IHw9ICAoKDB4YiA8PCAxNikgfCBpbnN0X2luZCk7CisjZW5kaWYKKwkJ
CX0gZWxzZSB7CisJCQkJaW5zdF9pbmQgPSBuZXQtPmNjX21vZC5ydGNjLmxhc3RfaW5zdF9pbmQ7
CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJ
CQlpbnN0X2J3ID0gYnl0ZXNfZm9yX3RoaXNfcnR0IC8gKHVpbnQ2NF90KShuZXQtPnJ0dCk7CisJ
CQkJLyogQ2FuJ3QgZGV0ZXJtaW5lIGRvIG5vdCBjaGFuZ2UgKi8KKwkJCQlwcm9iZXBvaW50IHw9
ICAoKDB4YyA8PCAxNikgfCBpbnN0X2luZCk7CisjZW5kaWYKKwkJCX0KKwkJfSBlbHNlIHsKKwkJ
CWluc3RfaW5kID0gbmV0LT5jY19tb2QucnRjYy5sYXN0X2luc3RfaW5kOworI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQlpbnN0X2J3ID0gYnl0
ZXNfZm9yX3RoaXNfcnR0OworCQkJLyogQ2FuJ3QgZGV0ZXJtaW5lIGRvIG5vdCBjaGFuZ2UgKi8K
KwkJCXByb2JlcG9pbnQgfD0gICgoMHhkIDw8IDE2KSB8IGluc3RfaW5kKTsKKyNlbmRpZgorCQl9
CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJ
U0RUX1BST0JFNShzY3RwLCBjd25kLCBuZXQsIHJ0dHZhciwKKwkJCSAgdnRhZywKKwkJCSAgKChu
YncgPDwgMzIpIHwgaW5zdF9idyksCisJCQkgICgobmV0LT5jY19tb2QucnRjYy5sYndfcnR0IDw8
IDMyKSB8IHJ0dCksCisJCQkgIG5ldC0+ZmxpZ2h0X3NpemUsCisJCQkgIHByb2JlcG9pbnQpOwor
I2VuZGlmCisJfSBlbHNlIHsKKwkJLyogTm8gcnR0IG1lYXN1cmVtZW50LCB1c2UgbGFzdCBvbmUg
Ki8KKwkJaW5zdF9pbmQgPSBuZXQtPmNjX21vZC5ydGNjLmxhc3RfaW5zdF9pbmQ7CisJfQorCWJ3
X29mZnNldCA9IG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3ID4+IGJ3X3NoaWZ0OworCWlmIChuYncgPiBu
ZXQtPmNjX21vZC5ydGNjLmxidyArIGJ3X29mZnNldCkgeworI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCXJldCA9IGNjX2J3X2luY3JlYXNlKHN0
Y2IsIG5ldCwgbmJ3LCB2dGFnKTsKKyNlbHNlCisJCXJldCA9IGNjX2J3X2luY3JlYXNlKHN0Y2Is
IG5ldCwgbmJ3KTsKKyNlbmRpZgorCQlnb3RvIG91dDsKKwl9CisJcnR0X29mZnNldCA9IG5ldC0+
Y2NfbW9kLnJ0Y2MubGJ3X3J0dCA+PiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcnR0dmFyX3J0dCk7
CisJaWYgKG5idyA8IG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3IC0gYndfb2Zmc2V0KSB7CisjaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJcmV0ID0gY2Nf
YndfZGVjcmVhc2Uoc3RjYiwgbmV0LCBuYncsIHJ0dF9vZmZzZXQsIHZ0YWcsIGluc3RfaW5kKTsK
KyNlbHNlCisJCXJldCA9IGNjX2J3X2RlY3JlYXNlKHN0Y2IsIG5ldCwgbmJ3LCBydHRfb2Zmc2V0
LCBpbnN0X2luZCk7CisjZW5kaWYKKwkJZ290byBvdXQ7CisJfQorCS8qIElmIHdlIHJlYWNoIGhl
cmUgdGhlbgorCSAqIHdlIGFyZSBpbiBhIHNpdHVhdGlvbiB3aGVyZQorCSAqIHRoZSBidyBzdGF5
ZWQgdGhlIHNhbWUuCisJICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKKwlyZXQgPSBjY19id19zYW1lKHN0Y2IsIG5ldCwgbmJ3LCBydHRfb2Zm
c2V0LCB2dGFnLCBpbnN0X2luZCk7CisjZWxzZQorCXJldCA9IGNjX2J3X3NhbWUoc3RjYiwgbmV0
LCBuYncsIHJ0dF9vZmZzZXQsIGluc3RfaW5kKTsKKyNlbmRpZgorb3V0OgorCW5ldC0+Y2NfbW9k
LnJ0Y2MubGFzdF9pbnN0X2luZCA9IGluc3RfaW5kOworCXJldHVybiAocmV0KTsKK30KKworc3Rh
dGljIHZvaWQKK3NjdHBfY3duZF91cGRhdGVfYWZ0ZXJfc2Fja19jb21tb24oc3RydWN0IHNjdHBf
dGNiICpzdGNiLAorCQkJCSAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCQkJCSAg
IGludCBhY2N1bV9tb3ZlZCwgaW50IHJlbmVnZWRfYWxsIFNDVFBfVU5VU0VELCBpbnQgd2lsbF9l
eGl0LCBpbnQgdXNlX3J0Y2MpCit7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaW50IG9sZF9jd25k
OworI2VuZGlmCisJdWludDMyX3QgdF9zc3RocmVzaCwgdF9jd25kLCBpbmNyOworCXVpbnQ2NF90
IHRfdWN3bmRfc2J3OworCXVpbnQ2NF90IHRfcGF0aF9tcHRjcDsKKwl1aW50NjRfdCBtcHRjcF9s
aWtlX2FscGhhOworCXVpbnQzMl90IHNydHQ7CisJdWludDY0X3QgbWF4X3BhdGg7CisKKwkvKiBN
VCBGSVhNRTogRG9uJ3QgY29tcHV0ZSB0aGlzIG92ZXIgYW5kIG92ZXIgYWdhaW4gKi8KKwl0X3Nz
dGhyZXNoID0gMDsKKwl0X2N3bmQgPSAwOworCXRfdWN3bmRfc2J3ID0gMDsKKwl0X3BhdGhfbXB0
Y3AgPSAwOworCW1wdGNwX2xpa2VfYWxwaGEgPSAxOworCWlmICgoc3RjYi0+YXNvYy5zY3RwX2Nt
dF9vbl9vZmYgPT0gU0NUUF9DTVRfUlBWMSkgfHwKKwkgICAgKHN0Y2ItPmFzb2Muc2N0cF9jbXRf
b25fb2ZmID09IFNDVFBfQ01UX1JQVjIpIHx8CisJICAgIChzdGNiLT5hc29jLnNjdHBfY210X29u
X29mZiA9PSBTQ1RQX0NNVF9NUFRDUCkpIHsKKwkJbWF4X3BhdGggPSAwOworCQlUQUlMUV9GT1JF
QUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQl0X3NzdGhyZXNoICs9
IG5ldC0+c3N0aHJlc2g7CisJCQl0X2N3bmQgKz0gbmV0LT5jd25kOworCQkJLyogbGFzdHNhPj4z
OyAgd2UgZG9uJ3QgbmVlZCB0byBkZXZpZGUgLi4uKi8KKwkJCXNydHQgPSBuZXQtPmxhc3RzYTsK
KwkJCWlmIChzcnR0ID4gMCkgeworCQkJCXVpbnQ2NF90IHRtcDsKKworCQkJCXRfdWN3bmRfc2J3
ICs9ICh1aW50NjRfdCluZXQtPmN3bmQgLyAodWludDY0X3Qpc3J0dDsKKwkJCQl0X3BhdGhfbXB0
Y3AgKz0gKCgodWludDY0X3QpbmV0LT5jd25kKSA8PCBTSElGVF9NUFRDUF9NVUxUSV9aKSAvCisJ
CQkJICAgICAgICAgICAgICAgICgoKHVpbnQ2NF90KW5ldC0+bXR1KSAqICh1aW50NjRfdClzcnR0
KTsKKwkJCQl0bXAgPSAoKCh1aW50NjRfdCluZXQtPmN3bmQpIDw8IFNISUZUX01QVENQX01VTFRJ
X04pIC8KKwkJCQkgICAgICAoKHVpbnQ2NF90KW5ldC0+bXR1ICogKHVpbnQ2NF90KShzcnR0ICog
c3J0dCkpOworCQkJCWlmICh0bXAgPiBtYXhfcGF0aCkgeworCQkJCQltYXhfcGF0aCA9IHRtcDsK
KwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKHRfcGF0aF9tcHRjcCA+IDApIHsKKwkJCW1wdGNwX2xp
a2VfYWxwaGEgPSBtYXhfcGF0aCAvICh0X3BhdGhfbXB0Y3AgKiB0X3BhdGhfbXB0Y3ApOworCQl9
IGVsc2UgeworCQkJbXB0Y3BfbGlrZV9hbHBoYSA9IDE7CisJCX0KKwl9CisJaWYgKHRfc3N0aHJl
c2ggPT0gMCkgeworCQl0X3NzdGhyZXNoID0gMTsKKwl9CisJaWYgKHRfdWN3bmRfc2J3ID09IDAp
IHsKKwkJdF91Y3duZF9zYncgPSAxOworCX0KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworCS8qIHVwZGF0ZSBjd25kIGFuZCBFYXJseSBGUiAgICovCisJLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKwlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBf
bmV4dCkgeworI2lmZGVmIEpBTkFfQ01UX0ZBU1RfUkVDT1ZFUlkKKwkJLyoKKwkJICogQ01UIGZh
c3QgcmVjb3ZlcnkgY29kZS4gTmVlZCB0byBkZWJ1Zy4KKwkJICovCisJCWlmIChuZXQtPmZhc3Rf
cmV0cmFuX2xvc3NfcmVjb3ZlcnkgJiYgbmV0LT5uZXdfcHNldWRvX2N1bWFjaykgeworCQkJaWYg
KFNDVFBfVFNOX0dFKGFzb2MtPmxhc3RfYWNrZWRfc2VxLCBuZXQtPmZhc3RfcmVjb3ZlcnlfdHNu
KSB8fAorCQkJICAgIFNDVFBfVFNOX0dFKG5ldC0+cHNldWRvX2N1bWFjayxuZXQtPmZhc3RfcmVj
b3ZlcnlfdHNuKSkgeworCQkJCW5ldC0+d2lsbF9leGl0X2Zhc3RfcmVjb3ZlcnkgPSAxOworCQkJ
fQorCQl9CisjZW5kaWYKKwkJLyogaWYgbm90aGluZyB3YXMgYWNrZWQgb24gdGhpcyBkZXN0aW5h
dGlvbiBza2lwIGl0ICovCisJCWlmIChuZXQtPm5ldF9hY2sgPT0gMCkgeworCQkJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJM
RSkgeworCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCAwLCBTQ1RQX0NXTkRfTE9HX0ZST01f
U0FDSyk7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorI2lmZGVmIEpBTkFfQ01UX0ZBU1RfUkVD
T1ZFUlkKKwkJLyogQ01UIGZhc3QgcmVjb3ZlcnkgY29kZQorCQkgKi8KKwkJLyoKKwkJICBpZiAo
c2N0cF9jbXRfb25fb2ZmID4gMCAmJiBuZXQtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgJiYg
bmV0LT53aWxsX2V4aXRfZmFzdF9yZWNvdmVyeSA9PSAwKSB7CisJCSAgQEBAIERvIHNvbWV0aGlu
ZworCQkgIH0KKwkJICBlbHNlIGlmIChzY3RwX2NtdF9vbl9vZmYgPT0gMCAmJiBhc29jLT5mYXN0
X3JldHJhbl9sb3NzX3JlY292ZXJ5ICYmIHdpbGxfZXhpdCA9PSAwKSB7CisJCSovCisjZW5kaWYK
KworCQlpZiAoYXNvYy0+ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVyeSAmJgorCQkgICAgKHdpbGxf
ZXhpdCA9PSAwKSAmJgorCQkgICAgKGFzb2MtPnNjdHBfY210X29uX29mZiA9PSAwKSkgeworCQkJ
LyoKKwkJCSAqIElmIHdlIGFyZSBpbiBsb3NzIHJlY292ZXJ5IHdlIHNraXAgYW55IGN3bmQKKwkJ
CSAqIHVwZGF0ZQorCQkJICovCisJCQlyZXR1cm47CisJCX0KKwkJLyoKKwkJICogRGlkIGFueSBt
ZWFzdXJlbWVudHMgZ28gb24gZm9yIHRoaXMgbmV0d29yaz8KKwkJICovCisJCWlmICh1c2VfcnRj
YyAmJiAobmV0LT5jY19tb2QucnRjYy50bHNfbmVlZHNfc2V0ID4gMCkpIHsKKwkJCXVpbnQ2NF90
IG5idzsKKwkJCS8qCisJCQkgKiBBdCB0aGlzIHBvaW50IG91ciBid19ieXRlcyBoYXMgYmVlbiB1
cGRhdGVkCisJCQkgKiBieSBpbmNvbWluZyBzYWNrIGluZm9ybWF0aW9uLgorCQkJICoKKwkJCSAq
IEJ1dCBvdXIgYncgbWF5IG5vdCB5ZXQgYmUgc2V0LgorCQkJICoKKwkJCSAqLworCQkJaWYgKChu
ZXQtPmNjX21vZC5ydGNjLm5ld190b3RfdGltZS8xMDAwKSA+IDApIHsKKwkJCQluYncgPSBuZXQt
PmNjX21vZC5ydGNjLmJ3X2J5dGVzLyhuZXQtPmNjX21vZC5ydGNjLm5ld190b3RfdGltZS8xMDAw
KTsKKwkJCX0gZWxzZSB7CisJCQkJbmJ3ID0gbmV0LT5jY19tb2QucnRjYy5id19ieXRlczsKKwkJ
CX0KKwkJCWlmIChuZXQtPmNjX21vZC5ydGNjLmxidykgeworCQkJCWlmIChjY19id19saW1pdChz
dGNiLCBuZXQsIG5idykpIHsKKwkJCQkJLyogSG9sZCBoZXJlLCBubyB1cGRhdGUgKi8KKwkJCQkJ
Y29udGludWU7CisJCQkJfQorCQkJfSBlbHNlIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAm
JiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCXVpbnQ2NF90IHZ0YWcsIHByb2JlcG9pbnQ7
CisKKwkJCQlwcm9iZXBvaW50ID0gKCgodWludDY0X3QpbmV0LT5jd25kKSA8PCAzMik7CisJCQkJ
cHJvYmVwb2ludCB8PSAgKCgweGEgPDwgMTYpIHwgMCk7CisJCQkJdnRhZyA9IChuZXQtPnJ0dCA8
PCAzMikgfAorCQkJCQkoKCh1aW50MzJfdCkoc3RjYi0+c2N0cF9lcC0+c2N0cF9scG9ydCkpIDw8
IDE2KSB8CisJCQkJCShzdGNiLT5ycG9ydCk7CisKKwkJCQlTRFRfUFJPQkU1KHNjdHAsIGN3bmQs
IG5ldCwgcnR0dmFyLAorCQkJCQkgIHZ0YWcsCisJCQkJCSAgbmJ3LAorCQkJCQkgICgobmV0LT5j
Y19tb2QucnRjYy5sYndfcnR0IDw8IDMyKSB8IG5ldC0+cnR0KSwKKwkJCQkJICBuZXQtPmZsaWdo
dF9zaXplLAorCQkJCQkgIHByb2JlcG9pbnQpOworI2VuZGlmCisJCQkJbmV0LT5jY19tb2QucnRj
Yy5sYncgPSBuYnc7CisJCQkJbmV0LT5jY19tb2QucnRjYy5sYndfcnR0ID0gbmV0LT5ydHQ7CisJ
CQkJaWYgKG5ldC0+Y2NfbW9kLnJ0Y2MucnR0X3NldF90aGlzX3NhY2spIHsKKwkJCQkJbmV0LT5j
Y19tb2QucnRjYy5ydHRfc2V0X3RoaXNfc2FjayA9IDA7CisJCQkJCW5ldC0+Y2NfbW9kLnJ0Y2Mu
YndfYnl0ZXNfYXRfbGFzdF9ydHRjID0gbmV0LT5jY19tb2QucnRjYy5id19ieXRlczsKKwkJCQl9
CisJCQl9CisJCX0KKwkJLyoKKwkJICogQ01UOiBDVUMgYWxnb3JpdGhtLiBVcGRhdGUgY3duZCBp
ZiBwc2V1ZG8tY3VtYWNrIGhhcworCQkgKiBtb3ZlZC4KKwkJICovCisJCWlmIChhY2N1bV9tb3Zl
ZCB8fAorCQkgICAgKChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPiAwKSAmJiBuZXQtPm5ld19wc2V1
ZG9fY3VtYWNrKSkgeworCQkJLyogSWYgdGhlIGN1bXVsYXRpdmUgYWNrIG1vdmVkIHdlIGNhbiBw
cm9jZWVkICovCisJCQlpZiAobmV0LT5jd25kIDw9IG5ldC0+c3N0aHJlc2gpIHsKKwkJCQkvKiBX
ZSBhcmUgaW4gc2xvdyBzdGFydCAqLworCQkJCWlmIChuZXQtPmZsaWdodF9zaXplICsgbmV0LT5u
ZXRfYWNrID49IG5ldC0+Y3duZCkgeworCQkJCQl1aW50MzJfdCBsaW1pdDsKKworI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJCW9sZF9jd25k
ID0gbmV0LT5jd25kOworI2VuZGlmCisJCQkJCXN3aXRjaCAoYXNvYy0+c2N0cF9jbXRfb25fb2Zm
KSB7CisJCQkJCWNhc2UgU0NUUF9DTVRfUlBWMToKKwkJCQkJCWxpbWl0ID0gKHVpbnQzMl90KSgo
KHVpbnQ2NF90KW5ldC0+bXR1ICoKKwkJCQkJCSAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90
KVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9MMl9hYmNfdmFyaWFibGUpICoKKwkJCQkJCSAgICAgICAg
ICAgICAgICAgICAgKHVpbnQ2NF90KW5ldC0+c3N0aHJlc2gpIC8KKwkJCQkJCSAgICAgICAgICAg
ICAgICAgICAodWludDY0X3QpdF9zc3RocmVzaCk7CisJCQkJCQlpbmNyID0gKHVpbnQzMl90KSgo
KHVpbnQ2NF90KW5ldC0+bmV0X2FjayAqCisJCQkJCQkgICAgICAgICAgICAgICAgICAgKHVpbnQ2
NF90KW5ldC0+c3N0aHJlc2gpIC8KKwkJCQkJCSAgICAgICAgICAgICAgICAgICh1aW50NjRfdCl0
X3NzdGhyZXNoKTsKKwkJCQkJCWlmIChpbmNyID4gbGltaXQpIHsKKwkJCQkJCQlpbmNyID0gbGlt
aXQ7CisJCQkJCQl9CisJCQkJCQlpZiAoaW5jciA9PSAwKSB7CisJCQkJCQkJaW5jciA9IDE7CisJ
CQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBTQ1RQX0NNVF9SUFYyOgorCQkJCQkJLyog
bGFzdHNhPj4zOyAgd2UgZG9uJ3QgbmVlZCB0byBkaXZpZGUgLi4uKi8KKwkJCQkJCXNydHQgPSBu
ZXQtPmxhc3RzYTsKKwkJCQkJCWlmIChzcnR0ID09IDApIHsKKwkJCQkJCQlzcnR0ID0gMTsKKwkJ
CQkJCX0KKwkJCQkJCWxpbWl0ID0gKHVpbnQzMl90KSgoKHVpbnQ2NF90KW5ldC0+bXR1ICoKKwkJ
CQkJCSAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9M
Ml9hYmNfdmFyaWFibGUpICoKKwkJCQkJCSAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KW5l
dC0+Y3duZCkgLworCQkJCQkJICAgICAgICAgICAgICAgICAgICgodWludDY0X3Qpc3J0dCAqIHRf
dWN3bmRfc2J3KSk7CisJCQkJCQkgICAgICAgICAgICAgICAgICAgLyogSU5DUkVBU0UgRkFDVE9S
ICovCisJCQkJCQlpbmNyID0gKHVpbnQzMl90KSgoKHVpbnQ2NF90KW5ldC0+bmV0X2FjayAqCisJ
CQkJCQkgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KW5ldC0+Y3duZCkgLworCQkJCQkJICAg
ICAgICAgICAgICAgICAgKCh1aW50NjRfdClzcnR0ICogdF91Y3duZF9zYncpKTsKKwkJCQkJCSAg
ICAgICAgICAgICAgICAgIC8qIElOQ1JFQVNFIEZBQ1RPUiAqLworCQkJCQkJaWYgKGluY3IgPiBs
aW1pdCkgeworCQkJCQkJCWluY3IgPSBsaW1pdDsKKwkJCQkJCX0KKwkJCQkJCWlmIChpbmNyID09
IDApIHsKKwkJCQkJCQlpbmNyID0gMTsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQljYXNl
IFNDVFBfQ01UX01QVENQOgorCQkJCQkJbGltaXQgPSAodWludDMyX3QpKCgodWludDY0X3QpbmV0
LT5tdHUgKgorCQkJCQkJICAgICAgICAgICAgICAgICAgICBtcHRjcF9saWtlX2FscGhhICoKKwkJ
CQkJCSAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9M
Ml9hYmNfdmFyaWFibGUpKSA+PgorCQkJCQkJICAgICAgICAgICAgICAgICAgIFNISUZUX01QVENQ
X01VTFRJKTsKKwkJCQkJCWluY3IgID0gKHVpbnQzMl90KSgoKHVpbnQ2NF90KW5ldC0+bmV0X2Fj
ayAqCisJCQkJCQkgICAgICAgICAgICAgICAgICAgIG1wdGNwX2xpa2VfYWxwaGEpID4+CisJCQkJ
CQkgICAgICAgICAgICAgICAgICAgU0hJRlRfTVBUQ1BfTVVMVEkpOworCQkJCQkJaWYgKGluY3Ig
PiBsaW1pdCkgeworCQkJCQkJCWluY3IgPSBsaW1pdDsKKwkJCQkJCX0KKwkJCQkJCWlmIChpbmNy
ID4gbmV0LT5uZXRfYWNrKSB7CisJCQkJCQkJaW5jciA9IG5ldC0+bmV0X2FjazsKKwkJCQkJCX0K
KwkJCQkJCWlmIChpbmNyID4gbmV0LT5tdHUpIHsKKwkJCQkJCQlpbmNyID0gbmV0LT5tdHU7CisJ
CQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCWluY3IgPSBuZXQtPm5l
dF9hY2s7CisJCQkJCQlpZiAoaW5jciA+IG5ldC0+bXR1ICogU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X0wyX2FiY192YXJpYWJsZSkpIHsKKwkJCQkJCQlpbmNyID0gbmV0LT5tdHUgKiBTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfTDJfYWJjX3ZhcmlhYmxlKTsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJ
CQl9CisJCQkJCW5ldC0+Y3duZCArPSBpbmNyOworCQkJCQlzY3RwX2VuZm9yY2VfY3duZF9saW1p
dChhc29jLCBuZXQpOworCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2
ZWwpICYgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7CisJCQkJCQlzY3RwX2xvZ19jd25kKHN0
Y2IsIG5ldCwgaW5jciwKKwkJCQkJCSAgICAgICAgICAgICAgU0NUUF9DV05EX0xPR19GUk9NX1NT
KTsKKwkJCQkJfQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisJCQkJCVNEVF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBhY2ssCisJCQkJCSAgICAg
ICAgICBzdGNiLT5hc29jLm15X3Z0YWcsCisJCQkJCSAgICAgICAgICAoKHN0Y2ItPnNjdHBfZXAt
PnNjdHBfbHBvcnQgPDwgMTYpIHwgKHN0Y2ItPnJwb3J0KSksCisJCQkJCSAgICAgICAgICBuZXQs
CisJCQkJCSAgICAgICAgICBvbGRfY3duZCwgbmV0LT5jd25kKTsKKyNlbmRpZgorCQkJCX0gZWxz
ZSB7CisJCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQ
X0NXTkRfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCBu
ZXQtPm5ldF9hY2ssCisJCQkJCQkJICAgICAgU0NUUF9DV05EX0xPR19OT0FEVl9TUyk7CisJCQkJ
CX0KKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIFdlIGFyZSBpbiBjb25nZXN0aW9uIGF2b2lk
YW5jZSAqLworCQkJCS8qCisJCQkJICogQWRkIHRvIHBiYQorCQkJCSAqLworCQkJICAgICAgICBu
ZXQtPnBhcnRpYWxfYnl0ZXNfYWNrZWQgKz0gbmV0LT5uZXRfYWNrOworCisJCQkJaWYgKChuZXQt
PmZsaWdodF9zaXplICsgbmV0LT5uZXRfYWNrID49IG5ldC0+Y3duZCkgJiYKKwkJCQkgICAgKG5l
dC0+cGFydGlhbF9ieXRlc19hY2tlZCA+PSBuZXQtPmN3bmQpKSB7CisJCQkJCW5ldC0+cGFydGlh
bF9ieXRlc19hY2tlZCAtPSBuZXQtPmN3bmQ7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
IWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQkJb2xkX2N3bmQgPSBuZXQtPmN3bmQ7CisjZW5k
aWYKKwkJCQkJc3dpdGNoIChhc29jLT5zY3RwX2NtdF9vbl9vZmYpIHsKKwkJCQkJY2FzZSBTQ1RQ
X0NNVF9SUFYxOgorCQkJCQkJaW5jciA9ICh1aW50MzJfdCkoKCh1aW50NjRfdCluZXQtPm10dSAq
CisJCQkJCQkgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KW5ldC0+c3N0aHJlc2gpIC8KKwkJ
CQkJCSAgICAgICAgICAgICAgICAgICh1aW50NjRfdCl0X3NzdGhyZXNoKTsKKwkJCQkJCWlmIChp
bmNyID09IDApIHsKKwkJCQkJCQlpbmNyID0gMTsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJ
CQljYXNlIFNDVFBfQ01UX1JQVjI6CisJCQkJCQkvKiBsYXN0c2E+PjM7ICB3ZSBkb24ndCBuZWVk
IHRvIGRpdmlkZSAuLi4gKi8KKwkJCQkJCXNydHQgPSBuZXQtPmxhc3RzYTsKKwkJCQkJCWlmIChz
cnR0ID09IDApIHsKKwkJCQkJCQlzcnR0ID0gMTsKKwkJCQkJCX0KKwkJCQkJCWluY3IgPSAodWlu
dDMyX3QpKCh1aW50NjRfdCluZXQtPm10dSAqCisJCQkJCQkgICAgICAgICAgICAgICAgICAodWlu
dDY0X3QpbmV0LT5jd25kIC8KKwkJCQkJCSAgICAgICAgICAgICAgICAgICgodWludDY0X3Qpc3J0
dCAqCisJCQkJCQkgICAgICAgICAgICAgICAgICAgdF91Y3duZF9zYncpKTsKKwkJCQkJCSAgICAg
ICAgICAgICAgICAgIC8qIElOQ1JFQVNFIEZBQ1RPUiAqLworCQkJCQkJaWYgKGluY3IgPT0gMCkg
eworCQkJCQkJCWluY3IgPSAxOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgU0NU
UF9DTVRfTVBUQ1A6CisJCQkJCQlpbmNyID0gKHVpbnQzMl90KSgobXB0Y3BfbGlrZV9hbHBoYSAq
CisJCQkJCQkgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KSBuZXQtPmN3bmQpID4+CisJCQkJ
CQkgICAgICAgICAgICAgICAgICBTSElGVF9NUFRDUF9NVUxUSSk7CisJCQkJCQlpZiAoaW5jciA+
IG5ldC0+bXR1KSB7CisJCQkJCQkJaW5jciA9IG5ldC0+bXR1OworCQkJCQkJfQorCQkJCQkJYnJl
YWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQlpbmNyID0gbmV0LT5tdHU7CisJCQkJCQlicmVhazsK
KwkJCQkJfQorCQkJCQluZXQtPmN3bmQgKz0gaW5jcjsKKwkJCQkJc2N0cF9lbmZvcmNlX2N3bmRf
bGltaXQoYXNvYywgbmV0KTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorCQkJCQlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgYWNrLAorCQkJ
CQkJICBzdGNiLT5hc29jLm15X3Z0YWcsCisJCQkJCQkgICgoc3RjYi0+c2N0cF9lcC0+c2N0cF9s
cG9ydCA8PCAxNikgfCAoc3RjYi0+cnBvcnQpKSwKKwkJCQkJCSAgbmV0LAorCQkJCQkJICBvbGRf
Y3duZCwgbmV0LT5jd25kKTsKKyNlbmRpZgorCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7CisJCQkJCQlzY3Rw
X2xvZ19jd25kKHN0Y2IsIG5ldCwgbmV0LT5tdHUsCisJCQkJCQkJICAgICAgU0NUUF9DV05EX0xP
R19GUk9NX0NBKTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpIHsKKwkJ
CQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCBuZXQtPm5ldF9hY2ssCisJCQkJCQkJICAgICAg
U0NUUF9DV05EX0xPR19OT0FEVl9DQSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7
CisJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05E
X0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIG5ldC0+bXR1
LAorCQkJCQkgICAgICBTQ1RQX0NXTkRfTE9HX05PX0NVTUFDSyk7CisJCQl9CisJCX0KKwl9Cit9
CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
c3RhdGljIHZvaWQKK3NjdHBfY3duZF91cGRhdGVfZXhpdF9wZl9jb21tb24oc3RydWN0IHNjdHBf
dGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCisjZWxzZQorc3RhdGljIHZvaWQKK3Nj
dHBfY3duZF91cGRhdGVfZXhpdF9wZl9jb21tb24oc3RydWN0IHNjdHBfdGNiICpzdGNiIFNDVFBf
VU5VU0VELCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCisjZW5kaWYKK3sKKyNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWludCBvbGRfY3duZDsKKwor
CW9sZF9jd25kID0gbmV0LT5jd25kOworI2VuZGlmCisJbmV0LT5jd25kID0gbmV0LT5tdHU7Cisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlTRFRf
UFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgYWNrLAorCSAgICAgICAgICBzdGNiLT5hc29jLm15X3Z0
YWcsICgoc3RjYi0+c2N0cF9lcC0+c2N0cF9scG9ydCA8PCAxNikgfCAoc3RjYi0+cnBvcnQpKSwg
bmV0LAorCSAgICAgICAgICBvbGRfY3duZCwgbmV0LT5jd25kKTsKKyNlbmRpZgorCVNDVFBEQkco
U0NUUF9ERUJVR19JTkRBVEExLCAiRGVzdGluYXRpb24gJXAgbW92ZWQgZnJvbSBQRiB0byByZWFj
aGFibGUgd2l0aCBjd25kICVkLlxuIiwKKwkgICAgICAgICh2b2lkICopbmV0LCBuZXQtPmN3bmQp
OworfQorCitzdGF0aWMgdm9pZAorc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl90aW1lb3V0KHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworCWludCBvbGRfY3du
ZCA9IG5ldC0+Y3duZDsKKwl1aW50MzJfdCB0X3NzdGhyZXNoLCB0X2N3bmQ7CisJdWludDY0X3Qg
dF91Y3duZF9zYnc7CisKKwkvKiBNVCBGSVhNRTogRG9uJ3QgY29tcHV0ZSB0aGlzIG92ZXIgYW5k
IG92ZXIgYWdhaW4gKi8KKwl0X3NzdGhyZXNoID0gMDsKKwl0X2N3bmQgPSAwOworCWlmICgoc3Rj
Yi0+YXNvYy5zY3RwX2NtdF9vbl9vZmYgPT0gU0NUUF9DTVRfUlBWMSkgfHwKKwkgICAgKHN0Y2It
PmFzb2Muc2N0cF9jbXRfb25fb2ZmID09IFNDVFBfQ01UX1JQVjIpKSB7CisJCXN0cnVjdCBzY3Rw
X25ldHMgKmxuZXQ7CisJCXVpbnQzMl90IHNydHQ7CisKKwkJdF91Y3duZF9zYncgPSAwOworCQlU
QUlMUV9GT1JFQUNIKGxuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQkJdF9z
c3RocmVzaCArPSBsbmV0LT5zc3RocmVzaDsKKwkJCXRfY3duZCArPSBsbmV0LT5jd25kOworCQkJ
c3J0dCA9IGxuZXQtPmxhc3RzYTsKKwkJCS8qIGxhc3RzYT4+MzsgIHdlIGRvbid0IG5lZWQgdG8g
ZGl2aWRlIC4uLiAqLworCQkJaWYgKHNydHQgPiAwKSB7CisJCQkJdF91Y3duZF9zYncgKz0gKHVp
bnQ2NF90KWxuZXQtPmN3bmQgLyAodWludDY0X3Qpc3J0dDsKKwkJCX0KKwkJfQorCQlpZiAodF9z
c3RocmVzaCA8IDEpIHsKKwkJCXRfc3N0aHJlc2ggPSAxOworCQl9CisJCWlmICh0X3Vjd25kX3Ni
dyA8IDEpIHsKKwkJCXRfdWN3bmRfc2J3ID0gMTsKKwkJfQorCQlpZiAoc3RjYi0+YXNvYy5zY3Rw
X2NtdF9vbl9vZmYgPT0gU0NUUF9DTVRfUlBWMSkgeworCQkJbmV0LT5zc3RocmVzaCA9ICh1aW50
MzJfdCkoKCh1aW50NjRfdCk0ICoKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWlu
dDY0X3QpbmV0LT5tdHUgKgorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50NjRf
dCluZXQtPnNzdGhyZXNoKSAvCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDY0
X3QpdF9zc3RocmVzaCk7CisJCX0gZWxzZSB7CisJCQl1aW50NjRfdCBjY19kZWx0YTsKKworCQkJ
c3J0dCA9IG5ldC0+bGFzdHNhOworCQkJLyogbGFzdHNhPj4zOyAgd2UgZG9uJ3QgbmVlZCB0byBk
aXZpZGUgLi4uICovCisJCQlpZiAoc3J0dCA9PSAwKSB7CisJCQkJc3J0dCA9IDE7CisJCQl9CisJ
CQljY19kZWx0YSA9IHRfdWN3bmRfc2J3ICogKHVpbnQ2NF90KXNydHQgLyAyOworCQkJaWYgKGNj
X2RlbHRhIDwgdF9jd25kKSB7CisJCQkJbmV0LT5zc3RocmVzaCA9ICh1aW50MzJfdCkoKHVpbnQ2
NF90KXRfY3duZCAtIGNjX2RlbHRhKTsKKwkJCX0gZWxzZSB7CisJCQkJbmV0LT5zc3RocmVzaCAg
PSBuZXQtPm10dTsKKwkJCX0KKwkJfQorCQlpZiAoKG5ldC0+Y3duZCA+IHRfY3duZCAvIDIpICYm
CisJCSAgICAobmV0LT5zc3RocmVzaCA8IG5ldC0+Y3duZCAtIHRfY3duZCAvIDIpKSB7CisJCQlu
ZXQtPnNzdGhyZXNoID0gbmV0LT5jd25kIC0gdF9jd25kIC8gMjsKKwkJfQorCQlpZiAobmV0LT5z
c3RocmVzaCA8IG5ldC0+bXR1KSB7CisJCQluZXQtPnNzdGhyZXNoID0gbmV0LT5tdHU7CisJCX0K
Kwl9IGVsc2UgeworCQluZXQtPnNzdGhyZXNoID0gbWF4KG5ldC0+Y3duZCAvIDIsIDQgKiBuZXQt
Pm10dSk7CisJfQorCW5ldC0+Y3duZCA9IG5ldC0+bXR1OworCW5ldC0+cGFydGlhbF9ieXRlc19h
Y2tlZCA9IDA7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKKwlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgdG8sCisJCSAgc3RjYi0+YXNvYy5t
eV92dGFnLAorCQkgICgoc3RjYi0+c2N0cF9lcC0+c2N0cF9scG9ydCA8PCAxNikgfCAoc3RjYi0+
cnBvcnQpKSwKKwkJICBuZXQsCisJCSAgb2xkX2N3bmQsIG5ldC0+Y3duZCk7CisjZW5kaWYKKwlp
ZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklU
T1JfRU5BQkxFKSB7CisJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCBuZXQtPmN3bmQgLSBvbGRf
Y3duZCwgU0NUUF9DV05EX0xPR19GUk9NX1JUWCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorc2N0
cF9jd25kX3VwZGF0ZV9hZnRlcl9lY25fZWNob19jb21tb24oc3RydWN0IHNjdHBfdGNiICpzdGNi
LCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5fd2luZG93LCBpbnQgbnVtX3BrdF9sb3N0LCBpbnQgdXNlX3J0Y2MpCit7
CisJaW50IG9sZF9jd25kID0gbmV0LT5jd25kOworCWlmICgodXNlX3J0Y2MpICYmIChuZXQtPmxh
bl90eXBlID09IFNDVFBfTEFOX0xPQ0FMKSAmJiAobmV0LT5jY19tb2QucnRjYy51c2VfZGNjY19l
Y24pKSB7CisJCS8qIERhdGEgY2VudGVyIENvbmdlc3Rpb24gQ29udHJvbCAqLworCQlpZiAoaW5f
d2luZG93ID09IDApIHsKKwkJCS8qIEdvIHRvIENBIHdpdGggdGhlIGN3bmQgYXQgdGhlIHBvaW50
IHdlIHNlbnQKKwkJCSAqIHRoZSBUU04gdGhhdCB3YXMgbWFya2VkIHdpdGggYSBDRS4KKwkJCSAq
LworCQkJaWYgKG5ldC0+ZWNuX3ByZXZfY3duZCA8IG5ldC0+Y3duZCkgeworCQkJCS8qIFJlc3Rv
cmUgdG8gcHJldiBjd25kICovCisJCQkJbmV0LT5jd25kID0gbmV0LT5lY25fcHJldl9jd25kIC0g
KG5ldC0+bXR1ICogbnVtX3BrdF9sb3N0KTsKKwkJCX0gZWxzZSB7CisJCQkJLyogSnVzdCBjdXQg
aW4gMS8yICovCisJCQkJbmV0LT5jd25kIC89IDI7CisJCQl9CisJCQkvKiBEcm9wIHRvIENBICov
CisJCQluZXQtPnNzdGhyZXNoID0gbmV0LT5jd25kIC0gKG51bV9wa3RfbG9zdCAqIG5ldC0+bXR1
KTsKKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NX
TkRfTU9OSVRPUl9FTkFCTEUpIHsKKwkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgKG5ldC0+
Y3duZCAtIG9sZF9jd25kKSwgU0NUUF9DV05EX0xPR19GUk9NX1NBVCk7CisJCQl9CisJCX0gZWxz
ZSB7CisJCQkvKiBGdXJ0aGVyIHR1bmluZyBkb3duIHJlcXVpcmVkIG92ZXIgdGhlIGRyYXN0aWMg
b3JpZ2luYWwgY3V0ICovCisJCQluZXQtPnNzdGhyZXNoIC09IChuZXQtPm10dSAqIG51bV9wa3Rf
bG9zdCk7CisJCQluZXQtPmN3bmQgLT0gKG5ldC0+bXR1ICogbnVtX3BrdF9sb3N0KTsKKwkJCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTU9OSVRP
Ul9FTkFCTEUpIHsKKwkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgKG5ldC0+Y3duZCAtIG9s
ZF9jd25kKSwgU0NUUF9DV05EX0xPR19GUk9NX1NBVCk7CisJCQl9CisJCX0KKwkJU0NUUF9TVEFU
X0lOQ1Ioc2N0cHNfZWNuZXJlZHVjZWRjd25kKTsKKwl9IGVsc2UgeworCQlpZiAoaW5fd2luZG93
ID09IDApIHsKKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX2VjbmVyZWR1Y2VkY3duZCk7CisJCQlu
ZXQtPnNzdGhyZXNoID0gbmV0LT5jd25kIC8gMjsKKwkJCWlmIChuZXQtPnNzdGhyZXNoIDwgbmV0
LT5tdHUpIHsKKwkJCQluZXQtPnNzdGhyZXNoID0gbmV0LT5tdHU7CisJCQkJLyogaGVyZSBiYWNr
IG9mZiB0aGUgdGltZXIgYXMgd2VsbCwgdG8gc2xvdyB1cyBkb3duICovCisJCQkJbmV0LT5SVE8g
PDw9IDE7CisJCQl9CisJCQluZXQtPmN3bmQgPSBuZXQtPnNzdGhyZXNoOworI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQlTRFRfUFJPQkU1KHNj
dHAsIGN3bmQsIG5ldCwgZWNuLAorCQkJCSAgc3RjYi0+YXNvYy5teV92dGFnLAorCQkJCSAgKChz
dGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0IDw8IDE2KSB8IChzdGNiLT5ycG9ydCkpLAorCQkJCSAg
bmV0LAorCQkJCSAgb2xkX2N3bmQsIG5ldC0+Y3duZCk7CisjZW5kaWYKKwkJCWlmIChTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTU9OSVRPUl9FTkFCTEUp
IHsKKwkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgKG5ldC0+Y3duZCAtIG9sZF9jd25kKSwg
U0NUUF9DV05EX0xPR19GUk9NX1NBVCk7CisJCQl9CisJCX0KKwl9CisKK30KKworc3RhdGljIHZv
aWQKK3NjdHBfY3duZF91cGRhdGVfYWZ0ZXJfcGFja2V0X2Ryb3BwZWQoc3RydWN0IHNjdHBfdGNi
ICpzdGNiLAorCXN0cnVjdCBzY3RwX25ldHMgKm5ldCwgc3RydWN0IHNjdHBfcGt0ZHJvcF9jaHVu
ayAqY3AsCisJdWludDMyX3QgKmJvdHRsZV9idywgdWludDMyX3QgKm9uX3F1ZXVlKQoreworCXVp
bnQzMl90IGJ3X2F2YWlsOworCXVuc2lnbmVkIGludCBpbmNyOworCWludCBvbGRfY3duZCA9IG5l
dC0+Y3duZDsKKworCS8qIGdldCBib3R0bGUgbmVjayBidyAqLworCSpib3R0bGVfYncgPSBudG9o
bChjcC0+Ym90dGxlX2J3KTsKKwkvKiBhbmQgd2hhdHMgb24gcXVldWUgKi8KKwkqb25fcXVldWUg
PSBudG9obChjcC0+Y3VycmVudF9vbnEpOworCS8qCisJICogYWRqdXN0IHRoZSBvbi1xdWV1ZSBp
ZiBvdXIgZmxpZ2h0IGlzIG1vcmUgaXQgY291bGQgYmUKKwkgKiB0aGF0IHRoZSByb3V0ZXIgaGFz
IG5vdCB5ZXQgZ290dGVuIGRhdGEgImluLWZsaWdodCIgdG8gaXQKKwkgKi8KKwlpZiAoKm9uX3F1
ZXVlIDwgbmV0LT5mbGlnaHRfc2l6ZSkgeworCQkqb25fcXVldWUgPSBuZXQtPmZsaWdodF9zaXpl
OworCX0KKwkvKiBydHQgaXMgbWVhc3VyZWQgaW4gbWljcm8gc2Vjb25kcywgYm90dGxlX2J3IGlu
IGJ5dGVzIHBlciBzZWNvbmQgKi8KKwlid19hdmFpbCA9ICh1aW50MzJfdCkoKCh1aW50NjRfdCko
KmJvdHRsZV9idykgKiBuZXQtPnJ0dCkgLyAodWludDY0X3QpMTAwMDAwMCk7CisJaWYgKGJ3X2F2
YWlsID4gKmJvdHRsZV9idykgeworCQkvKgorCQkgKiBDYXAgdGhlIGdyb3d0aCB0byBubyBtb3Jl
IHRoYW4gdGhlIGJvdHRsZSBuZWNrLgorCQkgKiBUaGlzIGNhbiBoYXBwZW4gYXMgUlRUIHNsaWRl
cyB1cCBkdWUgdG8gcXVldWVzLgorCQkgKiBJdCBhbHNvIG1lYW5zIGlmIHlvdSBoYXZlIG1vcmUg
dGhhbiBhIDEgc2Vjb25kCisJCSAqIFJUVCB3aXRoIGEgZW1wdHkgcXVldWUgeW91IHdpbGwgYmUg
bGltaXRlZCB0byB0aGUKKwkJICogYm90dGxlX2J3IHBlciBzZWNvbmQgbm8gbWF0dGVyIGlmIG90
aGVyIHBvaW50cworCQkgKiBoYXZlIDEvMiB0aGUgUlRUIGFuZCB5b3UgY291bGQgZ2V0IG1vcmUg
b3V0Li4uCisJCSAqLworCQlid19hdmFpbCA9ICpib3R0bGVfYnc7CisJfQorCWlmICgqb25fcXVl
dWUgPiBid19hdmFpbCkgeworCQkvKgorCQkgKiBObyByb29tIGZvciBhbnl0aGluZyBlbHNlIGRv
bid0IGFsbG93IGFueXRoaW5nCisJCSAqIGVsc2UgdG8gYmUgImFkZGVkIHRvIHRoZSBmaXJlIi4K
KwkJICovCisJCWludCBzZWdfaW5mbGlnaHQsIHNlZ19vbnF1ZXVlLCBteV9wb3J0aW9uOworCisJ
CW5ldC0+cGFydGlhbF9ieXRlc19hY2tlZCA9IDA7CisJCS8qIGhvdyBtdWNoIGFyZSB3ZSBvdmVy
IHF1ZXVlIHNpemU/ICovCisJCWluY3IgPSAqb25fcXVldWUgLSBid19hdmFpbDsKKwkJaWYgKHN0
Y2ItPmFzb2Muc2Vlbl9hX3NhY2tfdGhpc19wa3QpIHsKKwkJCS8qCisJCQkgKiB1bmRvIGFueSBj
d25kIGFkanVzdG1lbnQgdGhhdCB0aGUgc2FjaworCQkJICogbWlnaHQgaGF2ZSBtYWRlCisJCQkg
Ki8KKwkJCW5ldC0+Y3duZCA9IG5ldC0+cHJldl9jd25kOworCQl9CisJCS8qIE5vdyBob3cgbXVj
aCBvZiB0aGF0IGlzIG1pbmU/ICovCisJCXNlZ19pbmZsaWdodCA9IG5ldC0+ZmxpZ2h0X3NpemUg
LyBuZXQtPm10dTsKKwkJc2VnX29ucXVldWUgPSAqb25fcXVldWUgLyBuZXQtPm10dTsKKwkJbXlf
cG9ydGlvbiA9IChpbmNyICogc2VnX2luZmxpZ2h0KSAvIHNlZ19vbnF1ZXVlOworCisJCS8qIEhh
dmUgSSBtYWRlIGFuIGFkanVzdG1lbnQgYWxyZWFkeSAqLworCQlpZiAobmV0LT5jd25kID4gbmV0
LT5mbGlnaHRfc2l6ZSkgeworCQkJLyoKKwkJCSAqIGZvciB0aGlzIGZsaWdodCBJIG1hZGUgYW4g
YWRqdXN0bWVudCB3ZQorCQkJICogbmVlZCB0byBkZWNyZWFzZSB0aGUgcG9ydGlvbiBieSBhIHNo
YXJlCisJCQkgKiBvdXIgcHJldmlvdXMgYWRqdXN0bWVudC4KKwkJCSAqLworCQkJaW50IGRpZmZf
YWRqOworCisJCQlkaWZmX2FkaiA9IG5ldC0+Y3duZCAtIG5ldC0+ZmxpZ2h0X3NpemU7CisJCQlp
ZiAoZGlmZl9hZGogPiBteV9wb3J0aW9uKQorCQkJCW15X3BvcnRpb24gPSAwOworCQkJZWxzZQor
CQkJCW15X3BvcnRpb24gLT0gZGlmZl9hZGo7CisJCX0KKwkJLyoKKwkJICogYmFjayBkb3duIHRv
IHRoZSBwcmV2aW91cyBjd25kIChhc3N1bWUgd2UgaGF2ZQorCQkgKiBoYWQgYSBzYWNrIGJlZm9y
ZSB0aGlzIHBhY2tldCkuIG1pbnVzIHdoYXQgZXZlcgorCQkgKiBwb3J0aW9uIG9mIHRoZSBvdmVy
YWdlIGlzIG15IGZhdWx0LgorCQkgKi8KKwkJbmV0LT5jd25kIC09IG15X3BvcnRpb247CisKKwkJ
Lyogd2Ugd2lsbCBOT1QgYmFjayBkb3duIG1vcmUgdGhhbiAxIE1UVSAqLworCQlpZiAobmV0LT5j
d25kIDw9IG5ldC0+bXR1KSB7CisJCQluZXQtPmN3bmQgPSBuZXQtPm10dTsKKwkJfQorCQkvKiBm
b3JjZSBpbnRvIENBICovCisJCW5ldC0+c3N0aHJlc2ggPSBuZXQtPmN3bmQgLSAxOworCX0gZWxz
ZSB7CisJCS8qCisJCSAqIFRha2UgMS80IG9mIHRoZSBzcGFjZSBsZWZ0IG9yIG1heCBidXJzdCB1
cCAuLgorCQkgKiB3aGljaGV2ZXIgaXMgbGVzcy4KKwkJICovCisJCWluY3IgPSAoYndfYXZhaWwg
LSAqb25fcXVldWUpID4+IDI7CisJCWlmICgoc3RjYi0+YXNvYy5tYXhfYnVyc3QgPiAwKSAmJgor
CQkgICAgKHN0Y2ItPmFzb2MubWF4X2J1cnN0ICogbmV0LT5tdHUgPCBpbmNyKSkgeworCQkJaW5j
ciA9IHN0Y2ItPmFzb2MubWF4X2J1cnN0ICogbmV0LT5tdHU7CisJCX0KKwkJbmV0LT5jd25kICs9
IGluY3I7CisJfQorCWlmIChuZXQtPmN3bmQgPiBid19hdmFpbCkgeworCQkvKiBXZSBjYW4ndCBl
eGNlZWQgdGhlIHBpcGUgc2l6ZSAqLworCQluZXQtPmN3bmQgPSBid19hdmFpbDsKKwl9CisJaWYg
KG5ldC0+Y3duZCA8IG5ldC0+bXR1KSB7CisJCS8qIFdlIGFsd2F5cyBoYXZlIDEgTVRVICovCisJ
CW5ldC0+Y3duZCA9IG5ldC0+bXR1OworCX0KKwlzY3RwX2VuZm9yY2VfY3duZF9saW1pdCgmc3Rj
Yi0+YXNvYywgbmV0KTsKKwlpZiAobmV0LT5jd25kIC0gb2xkX2N3bmQgIT0gMCkgeworCQkvKiBs
b2cgb25seSBjaGFuZ2VzICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKKwkJU0RUX1BST0JFNShzY3RwLCBjd25kLCBuZXQsIHBkLAorCQkJICBz
dGNiLT5hc29jLm15X3Z0YWcsCisJCQkgICgoc3RjYi0+c2N0cF9lcC0+c2N0cF9scG9ydCA8PCAx
NikgfCAoc3RjYi0+cnBvcnQpKSwKKwkJCSAgbmV0LAorCQkJICBvbGRfY3duZCwgbmV0LT5jd25k
KTsKKyNlbmRpZgorCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYg
U0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7CisJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwg
KG5ldC0+Y3duZCAtIG9sZF9jd25kKSwKKwkJCQlTQ1RQX0NXTkRfTE9HX0ZST01fU0FUKTsKKwkJ
fQorCX0KK30KKworc3RhdGljIHZvaWQKK3NjdHBfY3duZF91cGRhdGVfYWZ0ZXJfb3V0cHV0KHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBzY3RwX25ldHMgKm5ldCwgaW50IGJ1cnN0X2xpbWl0KQoreworCWludCBvbGRfY3duZCA9IG5l
dC0+Y3duZDsKKworCWlmIChuZXQtPnNzdGhyZXNoIDwgbmV0LT5jd25kKQorCQluZXQtPnNzdGhy
ZXNoID0gbmV0LT5jd25kOworCWlmIChidXJzdF9saW1pdCkgeworCQluZXQtPmN3bmQgPSAobmV0
LT5mbGlnaHRfc2l6ZSArIChidXJzdF9saW1pdCAqIG5ldC0+bXR1KSk7CisJCXNjdHBfZW5mb3Jj
ZV9jd25kX2xpbWl0KCZzdGNiLT5hc29jLCBuZXQpOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCVNEVF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0
LCBibCwKKwkJCSAgc3RjYi0+YXNvYy5teV92dGFnLAorCQkJICAoKHN0Y2ItPnNjdHBfZXAtPnNj
dHBfbHBvcnQgPDwgMTYpIHwgKHN0Y2ItPnJwb3J0KSksCisJCQkgIG5ldCwKKwkJCSAgb2xkX2N3
bmQsIG5ldC0+Y3duZCk7CisjZW5kaWYKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dn
aW5nX2xldmVsKSAmIFNDVFBfQ1dORF9NT05JVE9SX0VOQUJMRSkgeworCQkJc2N0cF9sb2dfY3du
ZChzdGNiLCBuZXQsIChuZXQtPmN3bmQgLSBvbGRfY3duZCksIFNDVFBfQ1dORF9MT0dfRlJPTV9C
UlNUKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQKK3NjdHBfY3duZF91cGRhdGVfYWZ0ZXJf
c2FjayhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGFjY3VtX21vdmVkLCBpbnQgcmVuZWdlZF9hbGwsIGludCB3aWxsX2V4aXQpCit7CisJ
LyogUGFzc2luZyBhIHplcm8gYXJndW1lbnQgaW4gbGFzdCBkaXNhYmxlcyB0aGUgcnRjYyBhbGdv
cml0aG0gKi8KKwlzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3NhY2tfY29tbW9uKHN0Y2IsIGFzb2Ms
IGFjY3VtX21vdmVkLCByZW5lZ2VkX2FsbCwgd2lsbF9leGl0LCAwKTsKK30KKworc3RhdGljIHZv
aWQKK3NjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZWNuX2VjaG8oc3RydWN0IHNjdHBfdGNiICpzdGNi
LCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbl93aW5kb3csIGludCBudW1fcGt0X2xvc3QpCit7CisJLyogUGFzc2luZyBhIHplcm8g
YXJndW1lbnQgaW4gbGFzdCBkaXNhYmxlcyB0aGUgcnRjYyBhbGdvcml0aG0gKi8KKwlzY3RwX2N3
bmRfdXBkYXRlX2FmdGVyX2Vjbl9lY2hvX2NvbW1vbihzdGNiLCBuZXQsIGluX3dpbmRvdywgbnVt
X3BrdF9sb3N0LCAwKTsKK30KKworLyogSGVyZSBzdGFydHMgdGhlIFJUQ0NWQVIgdHlwZSBDQyBp
bnZlbnRlZCBieSBSUlMgd2hpY2gKKyAqIGlzIGEgc2xpZ2h0IG1vZCB0byBSRkMyNTgxLiBXZSBy
ZXVzZSBhIGNvbW1vbiByb3V0aW5lIG9yCisgKiB0d28gc2luY2UgdGhlc2UgYWxnb3JpdGhtcyBh
cmUgc28gY2xvc2UgYW5kIG5lZWQgdG8KKyAqIHJlbWFpbiB0aGUgc2FtZS4KKyAqLworc3RhdGlj
IHZvaWQKK3NjdHBfY3duZF91cGRhdGVfcnRjY19hZnRlcl9lY25fZWNobyhzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5fd2luZG93LCBpbnQgbnVtX3BrdF9sb3N0KQoreworCXNjdHBf
Y3duZF91cGRhdGVfYWZ0ZXJfZWNuX2VjaG9fY29tbW9uKHN0Y2IsIG5ldCwgaW5fd2luZG93LCBu
dW1fcGt0X2xvc3QsIDEpOworfQorCitzdGF0aWMgdm9pZCBzY3RwX2N3bmRfdXBkYXRlX3J0Y2Nf
dHNuX2Fja25vd2xlZGdlZChzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF90bWl0X2NodW5r
ICp0cDEpCit7CisJbmV0LT5jY19tb2QucnRjYy5id19ieXRlcyArPSB0cDEtPnNlbmRfc2l6ZTsK
K30KKworc3RhdGljIHZvaWQKK3NjdHBfY3duZF9wcmVwYXJlX3J0Y2NfbmV0X2Zvcl9zYWNrKHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiBTQ1RQX1VOVVNFRCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwlpZiAobmV0LT5jY19tb2Qu
cnRjYy50bHNfbmVlZHNfc2V0ID4gMCkgeworCQkvKiBXZSBoYWQgYSBidyBtZWFzdXJtZW50IGdv
aW5nIG9uICovCisJCXN0cnVjdCB0aW1ldmFsIGx0bHM7CisJCVNDVFBfR0VUUFRJTUVfVElNRVZB
TCgmbHRscyk7CisJCXRpbWV2YWxzdWIoJmx0bHMsICZuZXQtPmNjX21vZC5ydGNjLnRscyk7CisJ
CW5ldC0+Y2NfbW9kLnJ0Y2MubmV3X3RvdF90aW1lID0gKGx0bHMudHZfc2VjICogMTAwMDAwMCkg
KyBsdGxzLnR2X3VzZWM7CisJfQorfQorCitzdGF0aWMgdm9pZAorc2N0cF9jd25kX25ld19ydGNj
X3RyYW5zbWlzc2lvbl9iZWdpbnMoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJdWludDY0
X3QgdnRhZywgcHJvYmVwb2ludDsKKworI2VuZGlmCisJaWYgKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3
KSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KwkJLyogQ2xlYXIgdGhlIG9sZCBidy4uIHdlIHdlbnQgdG8gMCBpbi1mbGlnaHQgKi8KKwkJdnRh
ZyA9IChuZXQtPnJ0dCA8PCAzMikgfCAoKCh1aW50MzJfdCkoc3RjYi0+c2N0cF9lcC0+c2N0cF9s
cG9ydCkpIDw8IDE2KSB8CisJCQkoc3RjYi0+cnBvcnQpOworCQlwcm9iZXBvaW50ID0gKCgodWlu
dDY0X3QpbmV0LT5jd25kKSA8PCAzMik7CisJCS8qIFByb2JlIHBvaW50IDggKi8KKwkJcHJvYmVw
b2ludCB8PSAgKCg4IDw8IDE2KSB8IDApOworCQlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwg
cnR0dmFyLAorCQkJICB2dGFnLAorCQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3IDw8IDMyKSB8
IDApLAorCQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCA8PCAzMikgfCBuZXQtPnJ0dCks
CisJCQkgIG5ldC0+ZmxpZ2h0X3NpemUsCisJCQkgIHByb2JlcG9pbnQpOworI2VuZGlmCisJCW5l
dC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCA9IDA7CisJCW5ldC0+Y2NfbW9kLnJ0Y2MuY3duZF9hdF9i
d19zZXQgPSAwOworCQluZXQtPmNjX21vZC5ydGNjLmxidyA9IDA7CisJCW5ldC0+Y2NfbW9kLnJ0
Y2MuYndfYnl0ZXNfYXRfbGFzdF9ydHRjID0gMDsKKwkJbmV0LT5jY19tb2QucnRjYy52b2xfcmVk
dWNlID0gMDsKKwkJbmV0LT5jY19tb2QucnRjYy5id190b3RfdGltZSA9IDA7CisJCW5ldC0+Y2Nf
bW9kLnJ0Y2MuYndfYnl0ZXMgPSAwOworCQluZXQtPmNjX21vZC5ydGNjLnRsc19uZWVkc19zZXQg
PSAwOworCQlpZiAobmV0LT5jY19tb2QucnRjYy5zdGVhZHlfc3RlcCkgeworCQkJbmV0LT5jY19t
b2QucnRjYy52b2xfcmVkdWNlID0gMDsKKwkJCW5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQgPSAw
OworCQkJbmV0LT5jY19tb2QucnRjYy5sYXN0X3N0ZXBfc3RhdGUgPSAwOworCQl9CisJCWlmIChu
ZXQtPmNjX21vZC5ydGNjLnJldF9mcm9tX2VxKSB7CisJCQkvKiBsZXNzIGFnZ3Jlc3NpdmUgb25l
IC0gcmVzZXQgY3duZCB0b28gKi8KKwkJCXVpbnQzMl90IGN3bmRfaW5fbXR1LCBjd25kOworCisJ
CQljd25kX2luX210dSA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pbml0aWFsX2N3bmQpOworCQkJ
aWYgKGN3bmRfaW5fbXR1ID09IDApIHsKKwkJCQkvKiBVc2luZyAwIG1lYW5zIHRoYXQgdGhlIHZh
bHVlIG9mIFJGQyA0OTYwIGlzIHVzZWQuICovCisJCQkJY3duZCA9IG1pbigobmV0LT5tdHUgKiA0
KSwgbWF4KCgyICogbmV0LT5tdHUpLCBTQ1RQX0lOSVRJQUxfQ1dORCkpOworCQkJfSBlbHNlIHsK
KwkJCQkvKgorCQkJCSAqIFdlIHRha2UgdGhlIG1pbmltdW0gb2YgdGhlIGJ1cnN0IGxpbWl0IGFu
ZCB0aGUKKwkJCQkgKiBpbml0aWFsIGNvbmdlc3Rpb24gd2luZG93LgorCQkJCSAqLworCQkJCWlm
ICgoc3RjYi0+YXNvYy5tYXhfYnVyc3QgPiAwKSAmJiAoY3duZF9pbl9tdHUgPiBzdGNiLT5hc29j
Lm1heF9idXJzdCkpCisJCQkJCWN3bmRfaW5fbXR1ID0gc3RjYi0+YXNvYy5tYXhfYnVyc3Q7CisJ
CQkJY3duZCA9IChuZXQtPm10dSAtIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpICogY3duZF9pbl9t
dHU7CisJCQl9CisJCQlpZiAobmV0LT5jd25kID4gY3duZCkgeworCQkJCS8qIE9ubHkgc2V0IGlm
IHdlIGFyZSBub3QgYSB0aW1lb3V0IChpLmUuIGRvd24gdG8gMSBtdHUpICovCisJCQkJbmV0LT5j
d25kID0gY3duZDsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQKK3NjdHBfc2V0X3J0
Y2NfaW5pdGlhbF9jY19wYXJhbShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJdWludDY0X3QgdnRhZywg
cHJvYmVwb2ludDsKKworI2VuZGlmCisJc2N0cF9zZXRfaW5pdGlhbF9jY19wYXJhbShzdGNiLCBu
ZXQpOworCXN0Y2ItPmFzb2MudXNlX3ByZWNpc2VfdGltZSA9IDE7CisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlwcm9iZXBvaW50ID0gKCgodWlu
dDY0X3QpbmV0LT5jd25kKSA8PCAzMik7CisJcHJvYmVwb2ludCB8PSAgKCg5IDw8IDE2KSB8IDAp
OworCXZ0YWcgPSAobmV0LT5ydHQgPDwgMzIpIHwKKwkJKCgodWludDMyX3QpKHN0Y2ItPnNjdHBf
ZXAtPnNjdHBfbHBvcnQpKSA8PCAxNikgfAorCQkoc3RjYi0+cnBvcnQpOworCVNEVF9QUk9CRTUo
c2N0cCwgY3duZCwgbmV0LCBydHR2YXIsCisJCSAgdnRhZywKKwkJICAwLAorCQkgIDAsCisJCSAg
MCwKKwkJICBwcm9iZXBvaW50KTsKKyNlbmRpZgorCW5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCA9
IDA7CisJbmV0LT5jY19tb2QucnRjYy5jd25kX2F0X2J3X3NldCA9IDA7CisJbmV0LT5jY19tb2Qu
cnRjYy52b2xfcmVkdWNlID0gMDsKKwluZXQtPmNjX21vZC5ydGNjLmxidyA9IDA7CisJbmV0LT5j
Y19tb2QucnRjYy52b2xfcmVkdWNlID0gMDsKKwluZXQtPmNjX21vZC5ydGNjLmJ3X2J5dGVzX2F0
X2xhc3RfcnR0YyA9IDA7CisJbmV0LT5jY19tb2QucnRjYy5id190b3RfdGltZSA9IDA7CisJbmV0
LT5jY19tb2QucnRjYy5id19ieXRlcyA9IDA7CisJbmV0LT5jY19tb2QucnRjYy50bHNfbmVlZHNf
c2V0ID0gMDsKKwluZXQtPmNjX21vZC5ydGNjLnJldF9mcm9tX2VxID0gU0NUUF9CQVNFX1NZU0NU
TChzY3RwX3J0dHZhcl9lcXJldCk7CisJbmV0LT5jY19tb2QucnRjYy5zdGVhZHlfc3RlcCA9IFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9zdGVhZHlfc3RlcCk7CisJbmV0LT5jY19tb2QucnRjYy51c2Vf
ZGNjY19lY24gPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdXNlX2RjY2NfZWNuKTsKKwluZXQtPmNj
X21vZC5ydGNjLnN0ZXBfY250ID0gMDsKKwluZXQtPmNjX21vZC5ydGNjLmxhc3Rfc3RlcF9zdGF0
ZSA9IDA7Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfY3duZF9ydGNjX3NvY2tldF9vcHRpb24oc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLCBpbnQgc2V0b3JnZXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCBzY3RwX2NjX29wdGlvbiAqY2Nfb3B0KQoreworCXN0cnVjdCBzY3RwX25l
dHMgKm5ldDsKKworCWlmIChzZXRvcmdldCA9PSAxKSB7CisJCS8qIGEgc2V0ICovCisJCWlmIChj
Y19vcHQtPm9wdGlvbiA9PSBTQ1RQX0NDX09QVF9SVENDX1NFVE1PREUpIHsKKwkJCWlmICgoY2Nf
b3B0LT5haWRfdmFsdWUuYXNzb2NfdmFsdWUgIT0gMCkgJiYKKwkJCSAgICAoY2Nfb3B0LT5haWRf
dmFsdWUuYXNzb2NfdmFsdWUgIT0gMSkpIHsKKwkJCQlyZXR1cm4gKEVJTlZBTCk7CisJCQl9CisJ
CQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQkJ
bmV0LT5jY19tb2QucnRjYy5yZXRfZnJvbV9lcSA9IGNjX29wdC0+YWlkX3ZhbHVlLmFzc29jX3Zh
bHVlOworCQkJfQorCQl9IGVsc2UgaWYgKGNjX29wdC0+b3B0aW9uID09IFNDVFBfQ0NfT1BUX1VT
RV9EQ0NDX0VDTikgeworCQkJaWYgKChjY19vcHQtPmFpZF92YWx1ZS5hc3NvY192YWx1ZSAhPSAw
KSAmJgorCQkJICAgIChjY19vcHQtPmFpZF92YWx1ZS5hc3NvY192YWx1ZSAhPSAxKSkgeworCQkJ
CXJldHVybiAoRUlOVkFMKTsKKwkJCX0KKwkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNv
Yy5uZXRzLCBzY3RwX25leHQpIHsKKwkJCQluZXQtPmNjX21vZC5ydGNjLnVzZV9kY2NjX2VjbiA9
IGNjX29wdC0+YWlkX3ZhbHVlLmFzc29jX3ZhbHVlOworCQkJfQorCQl9IGVsc2UgaWYgKGNjX29w
dC0+b3B0aW9uID09IFNDVFBfQ0NfT1BUX1NURUFEWV9TVEVQKSB7CisJCQlUQUlMUV9GT1JFQUNI
KG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQkJbmV0LT5jY19tb2QucnRj
Yy5zdGVhZHlfc3RlcCA9IGNjX29wdC0+YWlkX3ZhbHVlLmFzc29jX3ZhbHVlOworCQkJfQorCQl9
IGVsc2UgeworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisJfSBlbHNlIHsKKwkJLyogYSBnZXQg
Ki8KKwkJaWYgKGNjX29wdC0+b3B0aW9uID09IFNDVFBfQ0NfT1BUX1JUQ0NfU0VUTU9ERSkgewor
CQkJbmV0ID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2MubmV0cyk7CisJCQlpZiAobmV0ID09IE5V
TEwpIHsKKwkJCQlyZXR1cm4gKEVGQVVMVCk7CisJCQl9CisJCQljY19vcHQtPmFpZF92YWx1ZS5h
c3NvY192YWx1ZSA9IG5ldC0+Y2NfbW9kLnJ0Y2MucmV0X2Zyb21fZXE7CisJCX0gZWxzZSBpZiAo
Y2Nfb3B0LT5vcHRpb24gPT0gU0NUUF9DQ19PUFRfVVNFX0RDQ0NfRUNOKSB7CisJCQluZXQgPSBU
QUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5uZXRzKTsKKwkJCWlmIChuZXQgPT0gTlVMTCkgeworCQkJ
CXJldHVybiAoRUZBVUxUKTsKKwkJCX0KKwkJCWNjX29wdC0+YWlkX3ZhbHVlLmFzc29jX3ZhbHVl
ID0gbmV0LT5jY19tb2QucnRjYy51c2VfZGNjY19lY247CisJCX0gZWxzZSBpZiAoY2Nfb3B0LT5v
cHRpb24gPT0gU0NUUF9DQ19PUFRfU1RFQURZX1NURVApIHsKKwkJCW5ldCA9IFRBSUxRX0ZJUlNU
KCZzdGNiLT5hc29jLm5ldHMpOworCQkJaWYgKG5ldCA9PSBOVUxMKSB7CisJCQkJcmV0dXJuIChF
RkFVTFQpOworCQkJfQorCQkJY2Nfb3B0LT5haWRfdmFsdWUuYXNzb2NfdmFsdWUgPSBuZXQtPmNj
X21vZC5ydGNjLnN0ZWFkeV9zdGVwOworCQl9IGVsc2UgeworCQkJcmV0dXJuIChFSU5WQUwpOwor
CQl9CisJfQorCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2N3bmRfdXBkYXRl
X3J0Y2NfcGFja2V0X3RyYW5zbWl0dGVkKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiBTQ1RQX1VOVVNF
RCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBf
bmV0cyAqbmV0KQoreworCWlmIChuZXQtPmNjX21vZC5ydGNjLnRsc19uZWVkc19zZXQgPT0gMCkg
eworCQlTQ1RQX0dFVFBUSU1FX1RJTUVWQUwoJm5ldC0+Y2NfbW9kLnJ0Y2MudGxzKTsKKwkJbmV0
LT5jY19tb2QucnRjYy50bHNfbmVlZHNfc2V0ID0gMjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitz
Y3RwX2N3bmRfdXBkYXRlX3J0Y2NfYWZ0ZXJfc2FjayhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAq
YXNvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhY2N1bV9tb3ZlZCwg
aW50IHJlbmVnZWRfYWxsLCBpbnQgd2lsbF9leGl0KQoreworCS8qIFBhc3NpbmcgYSBvbmUgYXJn
dW1lbnQgYXQgdGhlIGxhc3QgZW5hYmxlcyB0aGUgcnRjYyBhbGdvcml0aG0gKi8KKwlzY3RwX2N3
bmRfdXBkYXRlX2FmdGVyX3NhY2tfY29tbW9uKHN0Y2IsIGFzb2MsIGFjY3VtX21vdmVkLCByZW5l
Z2VkX2FsbCwgd2lsbF9leGl0LCAxKTsKK30KKworc3RhdGljIHZvaWQKK3NjdHBfcnR0X3J0Y2Nf
Y2FsY3VsYXRlZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCB0aW1ldmFsICpub3cgU0NUUF9VTlVTRUQpCit7CisJbmV0LT5jY19tb2Qu
cnRjYy5ydHRfc2V0X3RoaXNfc2FjayA9IDE7Cit9CisKKy8qIEhlcmUgc3RhcnRzIFNhbGx5IEZs
b3lkcyBIUy1UQ1AgKi8KKworc3RydWN0IHNjdHBfaHNfcmFpc2VfZHJvcCB7CisJaW50MzJfdCBj
d25kOworCWludDhfdCBpbmNyZWFzZTsKKwlpbnQ4X3QgZHJvcF9wZXJjZW50OworfTsKKworI2Rl
ZmluZSBTQ1RQX0hTX1RBQkxFX1NJWkUgNzMKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzY3RwX2hz
X3JhaXNlX2Ryb3Agc2N0cF9jd25kX2FkanVzdFtTQ1RQX0hTX1RBQkxFX1NJWkVdID0geworCXsz
OCwgMSwgNTB9LAkJLyogMCAgICovCisJezExOCwgMiwgNDR9LAkJLyogMSAgICovCisJezIyMSwg
MywgNDF9LAkJLyogMiAgICovCisJezM0NywgNCwgMzh9LAkJLyogMyAgICovCisJezQ5NSwgNSwg
Mzd9LAkJLyogNCAgICovCisJezY2MywgNiwgMzV9LAkJLyogNSAgICovCisJezg1MSwgNywgMzR9
LAkJLyogNiAgICovCisJezEwNTgsIDgsIDMzfSwJCS8qIDcgICAqLworCXsxMjg0LCA5LCAzMn0s
CQkvKiA4ICAgKi8KKwl7MTUyOSwgMTAsIDMxfSwJCS8qIDkgICAqLworCXsxNzkzLCAxMSwgMzB9
LAkJLyogMTAgICovCisJezIwNzYsIDEyLCAyOX0sCQkvKiAxMSAgKi8KKwl7MjM3OCwgMTMsIDI4
fSwJCS8qIDEyICAqLworCXsyNjk5LCAxNCwgMjh9LAkJLyogMTMgICovCisJezMwMzksIDE1LCAy
N30sCQkvKiAxNCAgKi8KKwl7MzM5OSwgMTYsIDI3fSwJCS8qIDE1ICAqLworCXszNzc4LCAxNywg
MjZ9LAkJLyogMTYgICovCisJezQxNzcsIDE4LCAyNn0sCQkvKiAxNyAgKi8KKwl7NDU5NiwgMTks
IDI1fSwJCS8qIDE4ICAqLworCXs1MDM2LCAyMCwgMjV9LAkJLyogMTkgICovCisJezU0OTcsIDIx
LCAyNH0sCQkvKiAyMCAgKi8KKwl7NTk3OSwgMjIsIDI0fSwJCS8qIDIxICAqLworCXs2NDgzLCAy
MywgMjN9LAkJLyogMjIgICovCisJezcwMDksIDI0LCAyM30sCQkvKiAyMyAgKi8KKwl7NzU1OCwg
MjUsIDIyfSwJCS8qIDI0ICAqLworCXs4MTMwLCAyNiwgMjJ9LAkJLyogMjUgICovCisJezg3MjYs
IDI3LCAyMn0sCQkvKiAyNiAgKi8KKwl7OTM0NiwgMjgsIDIxfSwJCS8qIDI3ICAqLworCXs5OTkx
LCAyOSwgMjF9LAkJLyogMjggICovCisJezEwNjYxLCAzMCwgMjF9LAkvKiAyOSAgKi8KKwl7MTEz
NTgsIDMxLCAyMH0sCS8qIDMwICAqLworCXsxMjA4MiwgMzIsIDIwfSwJLyogMzEgICovCisJezEy
ODM0LCAzMywgMjB9LAkvKiAzMiAgKi8KKwl7MTM2MTQsIDM0LCAxOX0sCS8qIDMzICAqLworCXsx
NDQyNCwgMzUsIDE5fSwJLyogMzQgICovCisJezE1MjY1LCAzNiwgMTl9LAkvKiAzNSAgKi8KKwl7
MTYxMzcsIDM3LCAxOX0sCS8qIDM2ICAqLworCXsxNzA0MiwgMzgsIDE4fSwJLyogMzcgICovCisJ
ezE3OTgxLCAzOSwgMTh9LAkvKiAzOCAgKi8KKwl7MTg5NTUsIDQwLCAxOH0sCS8qIDM5ICAqLwor
CXsxOTk2NSwgNDEsIDE3fSwJLyogNDAgICovCisJezIxMDEzLCA0MiwgMTd9LAkvKiA0MSAgKi8K
Kwl7MjIxMDEsIDQzLCAxN30sCS8qIDQyICAqLworCXsyMzIzMCwgNDQsIDE3fSwJLyogNDMgICov
CisJezI0NDAyLCA0NSwgMTZ9LAkvKiA0NCAgKi8KKwl7MjU2MTgsIDQ2LCAxNn0sCS8qIDQ1ICAq
LworCXsyNjg4MSwgNDcsIDE2fSwJLyogNDYgICovCisJezI4MTkzLCA0OCwgMTZ9LAkvKiA0NyAg
Ki8KKwl7Mjk1NTcsIDQ5LCAxNX0sCS8qIDQ4ICAqLworCXszMDk3NSwgNTAsIDE1fSwJLyogNDkg
ICovCisJezMyNDUwLCA1MSwgMTV9LAkvKiA1MCAgKi8KKwl7MzM5ODYsIDUyLCAxNX0sCS8qIDUx
ICAqLworCXszNTU4NiwgNTMsIDE0fSwJLyogNTIgICovCisJezM3MjUzLCA1NCwgMTR9LAkvKiA1
MyAgKi8KKwl7Mzg5OTIsIDU1LCAxNH0sCS8qIDU0ICAqLworCXs0MDgwOCwgNTYsIDE0fSwJLyog
NTUgICovCisJezQyNzA3LCA1NywgMTN9LAkvKiA1NiAgKi8KKwl7NDQ2OTQsIDU4LCAxM30sCS8q
IDU3ICAqLworCXs0Njc3NiwgNTksIDEzfSwJLyogNTggICovCisJezQ4OTYxLCA2MCwgMTN9LAkv
KiA1OSAgKi8KKwl7NTEyNTgsIDYxLCAxM30sCS8qIDYwICAqLworCXs1MzY3NywgNjIsIDEyfSwJ
LyogNjEgICovCisJezU2MjMwLCA2MywgMTJ9LAkvKiA2MiAgKi8KKwl7NTg5MzIsIDY0LCAxMn0s
CS8qIDYzICAqLworCXs2MTc5OSwgNjUsIDEyfSwJLyogNjQgICovCisJezY0ODUxLCA2NiwgMTF9
LAkvKiA2NSAgKi8KKwl7NjgxMTMsIDY3LCAxMX0sCS8qIDY2ICAqLworCXs3MTYxNywgNjgsIDEx
fSwJLyogNjcgICovCisJezc1NDAxLCA2OSwgMTB9LAkvKiA2OCAgKi8KKwl7Nzk1MTcsIDcwLCAx
MH0sCS8qIDY5ICAqLworCXs4NDAzNSwgNzEsIDEwfSwJLyogNzAgICovCisJezg5MDUzLCA3Miwg
MTB9LAkvKiA3MSAgKi8KKwl7OTQ3MTcsIDczLCA5fQkJLyogNzIgICovCit9OworCitzdGF0aWMg
dm9pZAorc2N0cF9oc19jd25kX2luY3JlYXNlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0
IHNjdHBfbmV0cyAqbmV0KQoreworCWludCBjdXJfdmFsLCBpLCBpbmR4LCBpbmNyOworCWludCBv
bGRfY3duZCA9IG5ldC0+Y3duZDsKKworCWN1cl92YWwgPSBuZXQtPmN3bmQgPj4gMTA7CisJaW5k
eCA9IFNDVFBfSFNfVEFCTEVfU0laRSAtIDE7CisKKwlpZiAoY3VyX3ZhbCA8IHNjdHBfY3duZF9h
ZGp1c3RbMF0uY3duZCkgeworCQkvKiBub3JtYWwgbW9kZSAqLworCQlpZiAobmV0LT5uZXRfYWNr
ID4gbmV0LT5tdHUpIHsKKwkJCW5ldC0+Y3duZCArPSBuZXQtPm10dTsKKwkJfSBlbHNlIHsKKwkJ
CW5ldC0+Y3duZCArPSBuZXQtPm5ldF9hY2s7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSBu
ZXQtPmxhc3RfaHNfdXNlZDsgaSA8IFNDVFBfSFNfVEFCTEVfU0laRTsgaSsrKSB7CisJCQlpZiAo
Y3VyX3ZhbCA8IHNjdHBfY3duZF9hZGp1c3RbaV0uY3duZCkgeworCQkJCWluZHggPSBpOworCQkJ
CWJyZWFrOworCQkJfQorCQl9CisJCW5ldC0+bGFzdF9oc191c2VkID0gaW5keDsKKwkJaW5jciA9
ICgoKGludDMyX3Qpc2N0cF9jd25kX2FkanVzdFtpbmR4XS5pbmNyZWFzZSkgPDwgMTApOworCQlu
ZXQtPmN3bmQgKz0gaW5jcjsKKwl9CisJc2N0cF9lbmZvcmNlX2N3bmRfbGltaXQoJnN0Y2ItPmFz
b2MsIG5ldCk7CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFND
VFBfQ1dORF9NT05JVE9SX0VOQUJMRSkgeworCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgKG5l
dC0+Y3duZCAtIG9sZF9jd25kKSwgU0NUUF9DV05EX0xPR19GUk9NX1NTKTsKKwl9Cit9CisKK3N0
YXRpYyB2b2lkCitzY3RwX2hzX2N3bmRfZGVjcmVhc2Uoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBz
dHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJaW50IGN1cl92YWwsIGksIGluZHg7CisJaW50IG9s
ZF9jd25kID0gbmV0LT5jd25kOworCisJY3VyX3ZhbCA9IG5ldC0+Y3duZCA+PiAxMDsKKwlpZiAo
Y3VyX3ZhbCA8IHNjdHBfY3duZF9hZGp1c3RbMF0uY3duZCkgeworCQkvKiBub3JtYWwgbW9kZSAq
LworCQluZXQtPnNzdGhyZXNoID0gbmV0LT5jd25kIC8gMjsKKwkJaWYgKG5ldC0+c3N0aHJlc2gg
PCAobmV0LT5tdHUgKiAyKSkgeworCQkJbmV0LT5zc3RocmVzaCA9IDIgKiBuZXQtPm10dTsKKwkJ
fQorCQluZXQtPmN3bmQgPSBuZXQtPnNzdGhyZXNoOworCX0gZWxzZSB7CisJCS8qIGRyb3AgYnkg
dGhlIHByb3BlciBhbW91bnQgKi8KKwkJbmV0LT5zc3RocmVzaCA9IG5ldC0+Y3duZCAtIChpbnQp
KChuZXQtPmN3bmQgLyAxMDApICoKKwkJICAgIChpbnQzMl90KXNjdHBfY3duZF9hZGp1c3RbbmV0
LT5sYXN0X2hzX3VzZWRdLmRyb3BfcGVyY2VudCk7CisJCW5ldC0+Y3duZCA9IG5ldC0+c3N0aHJl
c2g7CisJCS8qIG5vdyB3aGVyZSBhcmUgd2UgKi8KKwkJaW5keCA9IG5ldC0+bGFzdF9oc191c2Vk
OworCQljdXJfdmFsID0gbmV0LT5jd25kID4+IDEwOworCQkvKiByZXNldCB3aGVyZSB3ZSBhcmUg
aW4gdGhlIHRhYmxlICovCisJCWlmIChjdXJfdmFsIDwgc2N0cF9jd25kX2FkanVzdFswXS5jd25k
KSB7CisJCQkvKiBmZWVsIG91dCBvZiBocyAqLworCQkJbmV0LT5sYXN0X2hzX3VzZWQgPSAwOwor
CQl9IGVsc2UgeworCQkJZm9yIChpID0gaW5keDsgaSA+PSAxOyBpLS0pIHsKKwkJCQlpZiAoY3Vy
X3ZhbCA+IHNjdHBfY3duZF9hZGp1c3RbaSAtIDFdLmN3bmQpIHsKKwkJCQkJYnJlYWs7CisJCQkJ
fQorCQkJfQorCQkJbmV0LT5sYXN0X2hzX3VzZWQgPSBpbmR4OworCQl9CisJfQorCXNjdHBfZW5m
b3JjZV9jd25kX2xpbWl0KCZzdGNiLT5hc29jLCBuZXQpOworCWlmIChTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTU9OSVRPUl9FTkFCTEUpIHsKKwkJc2N0
cF9sb2dfY3duZChzdGNiLCBuZXQsIChuZXQtPmN3bmQgLSBvbGRfY3duZCksIFNDVFBfQ1dORF9M
T0dfRlJPTV9GUik7CisJfQorfQorCitzdGF0aWMgdm9pZAorc2N0cF9oc19jd25kX3VwZGF0ZV9h
ZnRlcl9mcihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQoreworCXN0cnVjdCBzY3RwX25ldHMg
Km5ldDsKKwkJLyoKKwkgKiBDTVQgZmFzdCByZWNvdmVyeSBjb2RlLiBOZWVkIHRvIGRlYnVnLiAo
KHNjdHBfY210X29uX29mZiA+IDApICYmCisJICogKG5ldC0+ZmFzdF9yZXRyYW5fbG9zc19yZWNv
dmVyeSA9PSAwKSkpCisJICovCisJVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3Rw
X25leHQpIHsKKwkJaWYgKChhc29jLT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ID09IDApIHx8
CisJCSAgICAoYXNvYy0+c2N0cF9jbXRfb25fb2ZmID4gMCkpIHsKKwkJCS8qIG91dCBvZiBhIFJG
QzI1ODIgRmFzdCByZWNvdmVyeSB3aW5kb3c/ICovCisJCQlpZiAobmV0LT5uZXRfYWNrID4gMCkg
eworCQkJCS8qCisJCQkJICogcGVyIHNlY3Rpb24gNy4yLjMsIGFyZSB0aGVyZSBhbnkKKwkJCQkg
KiBkZXN0aW5hdGlvbnMgdGhhdCBoYWQgYSBmYXN0IHJldHJhbnNtaXQKKwkJCQkgKiB0byB0aGVt
LiBJZiBzbyB3aGF0IHdlIG5lZWQgdG8gZG8gaXMKKwkJCQkgKiBhZGp1c3Qgc3N0aHJlc2ggYW5k
IGN3bmQuCisJCQkJICovCisJCQkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqbGNoazsKKworCQkJ
CXNjdHBfaHNfY3duZF9kZWNyZWFzZShzdGNiLCBuZXQpOworCisJCQkJbGNoayA9IFRBSUxRX0ZJ
UlNUKCZhc29jLT5zZW5kX3F1ZXVlKTsKKworCQkJCW5ldC0+cGFydGlhbF9ieXRlc19hY2tlZCA9
IDA7CisJCQkJLyogVHVybiBvbiBmYXN0IHJlY292ZXJ5IHdpbmRvdyAqLworCQkJCWFzb2MtPmZh
c3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgPSAxOworCQkJCWlmIChsY2hrID09IE5VTEwpIHsKKwkJ
CQkJLyogTWFyayBlbmQgb2YgdGhlIHdpbmRvdyAqLworCQkJCQlhc29jLT5mYXN0X3JlY292ZXJ5
X3RzbiA9IGFzb2MtPnNlbmRpbmdfc2VxIC0gMTsKKwkJCQl9IGVsc2UgeworCQkJCQlhc29jLT5m
YXN0X3JlY292ZXJ5X3RzbiA9IGxjaGstPnJlYy5kYXRhLnRzbiAtIDE7CisJCQkJfQorCisJCQkJ
LyoKKwkJCQkgKiBDTVQgZmFzdCByZWNvdmVyeSAtLSBwZXIgZGVzdGluYXRpb24KKwkJCQkgKiBy
ZWNvdmVyeSB2YXJpYWJsZS4KKwkJCQkgKi8KKwkJCQluZXQtPmZhc3RfcmV0cmFuX2xvc3NfcmVj
b3ZlcnkgPSAxOworCisJCQkJaWYgKGxjaGsgPT0gTlVMTCkgeworCQkJCQkvKiBNYXJrIGVuZCBv
ZiB0aGUgd2luZG93ICovCisJCQkJCW5ldC0+ZmFzdF9yZWNvdmVyeV90c24gPSBhc29jLT5zZW5k
aW5nX3NlcSAtIDE7CisJCQkJfSBlbHNlIHsKKwkJCQkJbmV0LT5mYXN0X3JlY292ZXJ5X3RzbiA9
IGxjaGstPnJlYy5kYXRhLnRzbiAtIDE7CisJCQkJfQorCisJCQkJc2N0cF90aW1lcl9zdG9wKFND
VFBfVElNRVJfVFlQRV9TRU5ELAorCQkJCQkJc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAorCQkJ
CSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9DQ19GVU5DVElPTlMgKyBTQ1RQX0xPQ18y
KTsKKwkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5ELAorCQkJCQkJIHN0
Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCk7CisJCQl9CisJCX0gZWxzZSBpZiAobmV0LT5uZXRfYWNr
ID4gMCkgeworCQkJLyoKKwkJCSAqIE1hcmsgYSBwZWcgdGhhdCB3ZSBXT1VMRCBoYXZlIGRvbmUg
YSBjd25kCisJCQkgKiByZWR1Y3Rpb24gYnV0IFJGQzI1ODIgcHJldmVudGVkIHRoaXMgYWN0aW9u
LgorCQkJICovCisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19mYXN0cmV0cmFuc2lucnR0KTsKKwkJ
fQorCX0KK30KKworc3RhdGljIHZvaWQKK3NjdHBfaHNfY3duZF91cGRhdGVfYWZ0ZXJfc2Fjayhz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGFjY3VtX21vdmVkLCBpbnQgcmVuZWdlZF9hbGwgU0NUUF9VTlVTRUQsIGludCB3aWxs
X2V4aXQpCit7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCS8qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCisJLyogdXBkYXRlIGN3bmQgYW5kIEVhcmx5IEZSICAgKi8KKwkvKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0
cywgc2N0cF9uZXh0KSB7CisjaWZkZWYgSkFOQV9DTVRfRkFTVF9SRUNPVkVSWQorCQkvKgorCQkg
KiBDTVQgZmFzdCByZWNvdmVyeSBjb2RlLiBOZWVkIHRvIGRlYnVnLgorCQkgKi8KKwkJaWYgKG5l
dC0+ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVyeSAmJiBuZXQtPm5ld19wc2V1ZG9fY3VtYWNrKSB7
CisJCQlpZiAoU0NUUF9UU05fR0UoYXNvYy0+bGFzdF9hY2tlZF9zZXEsIG5ldC0+ZmFzdF9yZWNv
dmVyeV90c24pIHx8CisJCQkgICAgU0NUUF9UU05fR0UobmV0LT5wc2V1ZG9fY3VtYWNrLG5ldC0+
ZmFzdF9yZWNvdmVyeV90c24pKSB7CisJCQkJbmV0LT53aWxsX2V4aXRfZmFzdF9yZWNvdmVyeSA9
IDE7CisJCQl9CisJCX0KKyNlbmRpZgorCQkvKiBpZiBub3RoaW5nIHdhcyBhY2tlZCBvbiB0aGlz
IGRlc3RpbmF0aW9uIHNraXAgaXQgKi8KKwkJaWYgKG5ldC0+bmV0X2FjayA9PSAwKSB7CisJCQlp
ZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJ
TkdfRU5BQkxFKSB7CisJCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIDAsIFNDVFBfQ1dORF9M
T0dfRlJPTV9TQUNLKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisjaWZkZWYgSkFOQV9DTVRf
RkFTVF9SRUNPVkVSWQorCQkvKiBDTVQgZmFzdCByZWNvdmVyeSBjb2RlCisJCSAqLworCQkvKgor
CQlpZiAoc2N0cF9jbXRfb25fb2ZmID4gMCAmJiBuZXQtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3Zl
cnkgJiYgbmV0LT53aWxsX2V4aXRfZmFzdF9yZWNvdmVyeSA9PSAwKSB7CisJCSAgICBAQEAgRG8g
c29tZXRoaW5nCisJCSB9CisJCSBlbHNlIGlmIChzY3RwX2NtdF9vbl9vZmYgPT0gMCAmJiBhc29j
LT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ICYmIHdpbGxfZXhpdCA9PSAwKSB7CisJCSovCisj
ZW5kaWYKKworCQkgaWYgKGFzb2MtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgJiYKKwkJICAg
ICAod2lsbF9leGl0ID09IDApICYmCisJCSAgICAgKGFzb2MtPnNjdHBfY210X29uX29mZiA9PSAw
KSkgeworCQkJLyoKKwkJCSAqIElmIHdlIGFyZSBpbiBsb3NzIHJlY292ZXJ5IHdlIHNraXAgYW55
IGN3bmQKKwkJCSAqIHVwZGF0ZQorCQkJICovCisJCQlyZXR1cm47CisJCX0KKwkJLyoKKwkJICog
Q01UOiBDVUMgYWxnb3JpdGhtLiBVcGRhdGUgY3duZCBpZiBwc2V1ZG8tY3VtYWNrIGhhcworCQkg
KiBtb3ZlZC4KKwkJICovCisJCWlmIChhY2N1bV9tb3ZlZCB8fAorCQkgICAgKChhc29jLT5zY3Rw
X2NtdF9vbl9vZmYgPiAwKSAmJiBuZXQtPm5ld19wc2V1ZG9fY3VtYWNrKSkgeworCQkJLyogSWYg
dGhlIGN1bXVsYXRpdmUgYWNrIG1vdmVkIHdlIGNhbiBwcm9jZWVkICovCisJCQlpZiAobmV0LT5j
d25kIDw9IG5ldC0+c3N0aHJlc2gpIHsKKwkJCQkvKiBXZSBhcmUgaW4gc2xvdyBzdGFydCAqLwor
CQkJCWlmIChuZXQtPmZsaWdodF9zaXplICsgbmV0LT5uZXRfYWNrID49IG5ldC0+Y3duZCkgewor
CQkJCQlzY3RwX2hzX2N3bmRfaW5jcmVhc2Uoc3RjYiwgbmV0KTsKKwkJCQl9IGVsc2UgeworCQkJ
CQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xP
R0dJTkdfRU5BQkxFKSB7CisJCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgbmV0LT5uZXRf
YWNrLAorCQkJCQkJCVNDVFBfQ1dORF9MT0dfTk9BRFZfU1MpOworCQkJCQl9CisJCQkJfQorCQkJ
fSBlbHNlIHsKKwkJCQkvKiBXZSBhcmUgaW4gY29uZ2VzdGlvbiBhdm9pZGFuY2UgKi8KKwkJCQlu
ZXQtPnBhcnRpYWxfYnl0ZXNfYWNrZWQgKz0gbmV0LT5uZXRfYWNrOworCQkJCWlmICgobmV0LT5m
bGlnaHRfc2l6ZSArIG5ldC0+bmV0X2FjayA+PSBuZXQtPmN3bmQpICYmCisJCQkJICAgIChuZXQt
PnBhcnRpYWxfYnl0ZXNfYWNrZWQgPj0gbmV0LT5jd25kKSkgeworCQkJCQluZXQtPnBhcnRpYWxf
Ynl0ZXNfYWNrZWQgLT0gbmV0LT5jd25kOworCQkJCQluZXQtPmN3bmQgKz0gbmV0LT5tdHU7CisJ
CQkJCXNjdHBfZW5mb3JjZV9jd25kX2xpbWl0KGFzb2MsIG5ldCk7CisJCQkJCWlmIChTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTU9OSVRPUl9FTkFCTEUp
IHsKKwkJCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCBuZXQtPm10dSwKKwkJCQkJCQlTQ1RQ
X0NXTkRfTE9HX0ZST01fQ0EpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJM
RSkgeworCQkJCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIG5ldC0+bmV0X2FjaywKKwkJCQkJ
CQlTQ1RQX0NXTkRfTE9HX05PQURWX0NBKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfSBlbHNl
IHsKKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NX
TkRfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgbmV0LT5t
dHUsCisJCQkJCVNDVFBfQ1dORF9MT0dfTk9fQ1VNQUNLKTsKKwkJCX0KKwkJfQorCX0KK30KKwor
LyoKKyAqIEgtVENQIGNvbmdlc3Rpb24gY29udHJvbC4gVGhlIGFsZ29yaXRobSBpcyBkZXRhaWxl
ZCBpbjoKKyAqIFIuTi5TaG9ydGVuLCBELkouTGVpdGg6CisgKiAgICJILVRDUDogVENQIGZvciBo
aWdoLXNwZWVkIGFuZCBsb25nLWRpc3RhbmNlIG5ldHdvcmtzIgorICogICBQcm9jLiBQRkxEbmV0
LCBBcmdvbm5lLCAyMDA0LgorICogaHR0cDovL3d3dy5oYW1pbHRvbi5pZS9uZXQvaHRjcDMucGRm
CisgKi8KKworc3RhdGljIGludCB1c2VfcnR0X3NjYWxpbmcgPSAxOworc3RhdGljIGludCB1c2Vf
YmFuZHdpZHRoX3N3aXRjaCA9IDE7CisKK3N0YXRpYyBpbmxpbmUgaW50CitiZXR3ZWVuKHVpbnQz
Ml90IHNlcTEsIHVpbnQzMl90IHNlcTIsIHVpbnQzMl90IHNlcTMpCit7CisJcmV0dXJuIChzZXEz
IC0gc2VxMiA+PSBzZXExIC0gc2VxMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QKK2h0
Y3BfY29uZ190aW1lKHN0cnVjdCBodGNwICpjYSkKK3sKKwlyZXR1cm4gKHNjdHBfZ2V0X3RpY2tf
Y291bnQoKSAtIGNhLT5sYXN0X2NvbmcpOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90Cito
dGNwX2Njb3VudChzdHJ1Y3QgaHRjcCAqY2EpCit7CisJcmV0dXJuIChjYS0+bWluUlRUID09IDAg
PyBodGNwX2NvbmdfdGltZShjYSkgOiBodGNwX2NvbmdfdGltZShjYSkvY2EtPm1pblJUVCk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraHRjcF9yZXNldChzdHJ1Y3QgaHRjcCAqY2EpCit7CisJ
Y2EtPnVuZG9fbGFzdF9jb25nID0gY2EtPmxhc3RfY29uZzsKKwljYS0+dW5kb19tYXhSVFQgPSBj
YS0+bWF4UlRUOworCWNhLT51bmRvX29sZF9tYXhCID0gY2EtPm9sZF9tYXhCOworCWNhLT5sYXN0
X2NvbmcgPSBzY3RwX2dldF90aWNrX2NvdW50KCk7Cit9CisKKyNpZmRlZiBTQ1RQX05PVF9VU0VE
CisKK3N0YXRpYyB1aW50MzJfdAoraHRjcF9jd25kX3VuZG8oc3RydWN0IHNjdHBfdGNiICpzdGNi
LCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJbmV0LT5jY19tb2QuaHRjcF9jYS5sYXN0X2Nv
bmcgPSBuZXQtPmNjX21vZC5odGNwX2NhLnVuZG9fbGFzdF9jb25nOworCW5ldC0+Y2NfbW9kLmh0
Y3BfY2EubWF4UlRUID0gbmV0LT5jY19tb2QuaHRjcF9jYS51bmRvX21heFJUVDsKKwluZXQtPmNj
X21vZC5odGNwX2NhLm9sZF9tYXhCID0gbmV0LT5jY19tb2QuaHRjcF9jYS51bmRvX29sZF9tYXhC
OworCXJldHVybiAobWF4KG5ldC0+Y3duZCwgKChuZXQtPnNzdGhyZXNoL25ldC0+bXR1PDw3KS9u
ZXQtPmNjX21vZC5odGNwX2NhLmJldGEpKm5ldC0+bXR1KSk7Cit9CisKKyNlbmRpZgorCitzdGF0
aWMgaW5saW5lIHZvaWQKK21lYXN1cmVfcnR0KHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwl1
aW50MzJfdCBzcnR0ID0gbmV0LT5sYXN0c2E+PlNDVFBfUlRUX1NISUZUOworCisJLyoga2VlcCB0
cmFjayBvZiBtaW5pbXVtIFJUVCBzZWVuIHNvIGZhciwgbWluUlRUIGlzIHplcm8gYXQgZmlyc3Qg
Ki8KKwlpZiAobmV0LT5jY19tb2QuaHRjcF9jYS5taW5SVFQgPiBzcnR0IHx8ICFuZXQtPmNjX21v
ZC5odGNwX2NhLm1pblJUVCkKKwkJbmV0LT5jY19tb2QuaHRjcF9jYS5taW5SVFQgPSBzcnR0Owor
CisJLyogbWF4IFJUVCAqLworCWlmIChuZXQtPmZhc3RfcmV0cmFuX2lwID09IDAgJiYgbmV0LT5z
c3RocmVzaCA8IDB4RkZGRiAmJiBodGNwX2Njb3VudCgmbmV0LT5jY19tb2QuaHRjcF9jYSkgPiAz
KSB7CisJCWlmIChuZXQtPmNjX21vZC5odGNwX2NhLm1heFJUVCA8IG5ldC0+Y2NfbW9kLmh0Y3Bf
Y2EubWluUlRUKQorCQkJbmV0LT5jY19tb2QuaHRjcF9jYS5tYXhSVFQgPSBuZXQtPmNjX21vZC5o
dGNwX2NhLm1pblJUVDsKKwkJaWYgKG5ldC0+Y2NfbW9kLmh0Y3BfY2EubWF4UlRUIDwgc3J0dCAm
JiBzcnR0IDw9IG5ldC0+Y2NfbW9kLmh0Y3BfY2EubWF4UlRUK3NjdHBfbXNlY3NfdG9fdGlja3Mo
MjApKQorCQkJbmV0LT5jY19tb2QuaHRjcF9jYS5tYXhSVFQgPSBzcnR0OworCX0KK30KKworc3Rh
dGljIHZvaWQKK21lYXN1cmVfYWNoaWV2ZWRfdGhyb3VnaHB1dChzdHJ1Y3Qgc2N0cF9uZXRzICpu
ZXQpCit7CisJdWludDMyX3Qgbm93ID0gc2N0cF9nZXRfdGlja19jb3VudCgpOworCisJaWYgKG5l
dC0+ZmFzdF9yZXRyYW5faXAgPT0gMCkKKwkJbmV0LT5jY19tb2QuaHRjcF9jYS5ieXRlc19hY2tl
ZCA9IG5ldC0+bmV0X2FjazsKKworCWlmICghdXNlX2JhbmR3aWR0aF9zd2l0Y2gpCisJCXJldHVy
bjsKKworCS8qIGFjaGlldmVkIHRocm91Z2hwdXQgY2FsY3VsYXRpb25zICovCisJLyogSlJTIC0g
bm90IDEwMCUgc3VyZSBvZiB0aGlzIHN0YXRlbWVudCAqLworCWlmIChuZXQtPmZhc3RfcmV0cmFu
X2lwID09IDEpIHsKKwkJbmV0LT5jY19tb2QuaHRjcF9jYS5ieXRlY291bnQgPSAwOworCQluZXQt
PmNjX21vZC5odGNwX2NhLmxhc3R0aW1lID0gbm93OworCQlyZXR1cm47CisJfQorCisJbmV0LT5j
Y19tb2QuaHRjcF9jYS5ieXRlY291bnQgKz0gbmV0LT5uZXRfYWNrOworCWlmICgobmV0LT5jY19t
b2QuaHRjcF9jYS5ieXRlY291bnQgPj0gbmV0LT5jd25kIC0gKCgobmV0LT5jY19tb2QuaHRjcF9j
YS5hbHBoYSA+PiA3KSA/IChuZXQtPmNjX21vZC5odGNwX2NhLmFscGhhID4+IDcpIDogMSkgKiBu
ZXQtPm10dSkpICYmCisJICAgIChub3cgLSBuZXQtPmNjX21vZC5odGNwX2NhLmxhc3R0aW1lID49
IG5ldC0+Y2NfbW9kLmh0Y3BfY2EubWluUlRUKSAmJgorCSAgICAobmV0LT5jY19tb2QuaHRjcF9j
YS5taW5SVFQgPiAwKSkgeworCQl1aW50MzJfdCBjdXJfQmkgPSBuZXQtPmNjX21vZC5odGNwX2Nh
LmJ5dGVjb3VudC9uZXQtPm10dSpoei8obm93IC0gbmV0LT5jY19tb2QuaHRjcF9jYS5sYXN0dGlt
ZSk7CisKKwkJaWYgKGh0Y3BfY2NvdW50KCZuZXQtPmNjX21vZC5odGNwX2NhKSA8PSAzKSB7CisJ
CQkvKiBqdXN0IGFmdGVyIGJhY2tvZmYgKi8KKwkJCW5ldC0+Y2NfbW9kLmh0Y3BfY2EubWluQiA9
IG5ldC0+Y2NfbW9kLmh0Y3BfY2EubWF4QiA9IG5ldC0+Y2NfbW9kLmh0Y3BfY2EuQmkgPSBjdXJf
Qmk7CisJCX0gZWxzZSB7CisJCQluZXQtPmNjX21vZC5odGNwX2NhLkJpID0gKDMqbmV0LT5jY19t
b2QuaHRjcF9jYS5CaSArIGN1cl9CaSkvNDsKKwkJCWlmIChuZXQtPmNjX21vZC5odGNwX2NhLkJp
ID4gbmV0LT5jY19tb2QuaHRjcF9jYS5tYXhCKQorCQkJCW5ldC0+Y2NfbW9kLmh0Y3BfY2EubWF4
QiA9IG5ldC0+Y2NfbW9kLmh0Y3BfY2EuQmk7CisJCQlpZiAobmV0LT5jY19tb2QuaHRjcF9jYS5t
aW5CID4gbmV0LT5jY19tb2QuaHRjcF9jYS5tYXhCKQorCQkJCW5ldC0+Y2NfbW9kLmh0Y3BfY2Eu
bWluQiA9IG5ldC0+Y2NfbW9kLmh0Y3BfY2EubWF4QjsKKwkJfQorCQluZXQtPmNjX21vZC5odGNw
X2NhLmJ5dGVjb3VudCA9IDA7CisJCW5ldC0+Y2NfbW9kLmh0Y3BfY2EubGFzdHRpbWUgPSBub3c7
CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2h0Y3BfYmV0YV91cGRhdGUoc3RydWN0IGh0
Y3AgKmNhLCB1aW50MzJfdCBtaW5SVFQsIHVpbnQzMl90IG1heFJUVCkKK3sKKwlpZiAodXNlX2Jh
bmR3aWR0aF9zd2l0Y2gpIHsKKwkJdWludDMyX3QgbWF4QiA9IGNhLT5tYXhCOworCQl1aW50MzJf
dCBvbGRfbWF4QiA9IGNhLT5vbGRfbWF4QjsKKwkJY2EtPm9sZF9tYXhCID0gY2EtPm1heEI7CisK
KwkJaWYgKCFiZXR3ZWVuKDUqbWF4QiwgNCpvbGRfbWF4QiwgNipvbGRfbWF4QikpIHsKKwkJCWNh
LT5iZXRhID0gQkVUQV9NSU47CisJCQljYS0+bW9kZXN3aXRjaCA9IDA7CisJCQlyZXR1cm47CisJ
CX0KKwl9CisKKwlpZiAoY2EtPm1vZGVzd2l0Y2ggJiYgbWluUlRUID4gc2N0cF9tc2Vjc190b190
aWNrcygxMCkgJiYgbWF4UlRUKSB7CisJCWNhLT5iZXRhID0gKG1pblJUVDw8NykvbWF4UlRUOwor
CQlpZiAoY2EtPmJldGEgPCBCRVRBX01JTikKKwkJCWNhLT5iZXRhID0gQkVUQV9NSU47CisJCWVs
c2UgaWYgKGNhLT5iZXRhID4gQkVUQV9NQVgpCisJCQljYS0+YmV0YSA9IEJFVEFfTUFYOworCX0g
ZWxzZSB7CisJCWNhLT5iZXRhID0gQkVUQV9NSU47CisJCWNhLT5tb2Rlc3dpdGNoID0gMTsKKwl9
Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraHRjcF9hbHBoYV91cGRhdGUoc3RydWN0IGh0Y3Ag
KmNhKQoreworCXVpbnQzMl90IG1pblJUVCA9IGNhLT5taW5SVFQ7CisJdWludDMyX3QgZmFjdG9y
ID0gMTsKKwl1aW50MzJfdCBkaWZmID0gaHRjcF9jb25nX3RpbWUoY2EpOworCisJaWYgKGRpZmYg
PiAodWludDMyX3QpaHopIHsKKwkJZGlmZiAtPSBoejsKKwkJZmFjdG9yID0gMSsgKDEwICogZGlm
ZiArICgoZGlmZiAvIDIpICogKGRpZmYgLyAyKSAvIGh6KSkgLyBoejsKKwl9CisKKwlpZiAodXNl
X3J0dF9zY2FsaW5nICYmIG1pblJUVCkgeworCQl1aW50MzJfdCBzY2FsZSA9IChoeiA8PCAzKSAv
ICgxMCAqIG1pblJUVCk7CisJCXNjYWxlID0gbWluKG1heChzY2FsZSwgMVUgPDwgMiksIDEwVSA8
PCAzKTsgLyogY2xhbXBpbmcgcmF0aW8gdG8gaW50ZXJ2YWwgWzAuNSwxMF08PDMgKi8KKwkJZmFj
dG9yID0gKGZhY3RvciA8PCAzKSAvIHNjYWxlOworCQlpZiAoZmFjdG9yICE9IDApCisJCQlmYWN0
b3IgPSAxOworCX0KKworCWNhLT5hbHBoYSA9IDIgKiBmYWN0b3IgKiAoKDEgPDwgNykgLSBjYS0+
YmV0YSk7CisJaWYgKGNhLT5hbHBoYSAhPSAwKQorCQljYS0+YWxwaGEgPSBBTFBIQV9CQVNFOwor
fQorCisvKiBBZnRlciB3ZSBoYXZlIHRoZSBydHQgZGF0YSB0byBjYWxjdWxhdGUgYmV0YSwgd2Un
ZCBzdGlsbCBwcmVmZXIgdG8gd2FpdCBvbmUKKyAqIHJ0dCBiZWZvcmUgd2UgYWRqdXN0IG91ciBi
ZXRhIHRvIGVuc3VyZSB3ZSBhcmUgd29ya2luZyBmcm9tIGEgY29uc2lzdGVudAorICogZGF0YS4K
KyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2hlbiB3ZSBoaXQgYSBjb25n
ZXN0aW9uIGV2ZW50IHNpbmNlIG9ubHkgYXQKKyAqIHRoYXQgcG9pbnQgZG8gd2UgcmVhbGx5IGhh
dmUgYSByZWFsIHNlbnNlIG9mIG1heFJUVCAodGhlIHF1ZXVlcyBlbiByb3V0ZQorICogd2VyZSBn
ZXR0aW5nIGp1c3QgdG9vIGZ1bGwgbm93KS4KKyAqLworc3RhdGljIHZvaWQKK2h0Y3BfcGFyYW1f
dXBkYXRlKHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwl1aW50MzJfdCBtaW5SVFQgPSBuZXQt
PmNjX21vZC5odGNwX2NhLm1pblJUVDsKKwl1aW50MzJfdCBtYXhSVFQgPSBuZXQtPmNjX21vZC5o
dGNwX2NhLm1heFJUVDsKKworCWh0Y3BfYmV0YV91cGRhdGUoJm5ldC0+Y2NfbW9kLmh0Y3BfY2Es
IG1pblJUVCwgbWF4UlRUKTsKKwlodGNwX2FscGhhX3VwZGF0ZSgmbmV0LT5jY19tb2QuaHRjcF9j
YSk7CisKKwkvKiBhZGQgc2xvd2x5IGZhZGluZyBtZW1vcnkgZm9yIG1heFJUVCB0byBhY2NvbW1v
ZGF0ZSByb3V0aW5nIGNoYW5nZXMgZXRjICovCisJaWYgKG1pblJUVCA+IDAgJiYgbWF4UlRUID4g
bWluUlRUKQorCQluZXQtPmNjX21vZC5odGNwX2NhLm1heFJUVCA9IG1pblJUVCArICgobWF4UlRU
LW1pblJUVCkqOTUpLzEwMDsKK30KKworc3RhdGljIHVpbnQzMl90CitodGNwX3JlY2FsY19zc3Ro
cmVzaChzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJaHRjcF9wYXJhbV91cGRhdGUobmV0KTsK
KwlyZXR1cm4gKG1heCgoKG5ldC0+Y3duZC9uZXQtPm10dSAqIG5ldC0+Y2NfbW9kLmh0Y3BfY2Eu
YmV0YSkgPj4gNykqbmV0LT5tdHUsIDJVKm5ldC0+bXR1KSk7Cit9CisKK3N0YXRpYyB2b2lkCito
dGNwX2NvbmdfYXZvaWQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpu
ZXQpCit7CisJLyotCisJICogSG93IHRvIGhhbmRsZSB0aGVzZSBmdW5jdGlvbnM/CisJICoJaWYg
KCF0Y3BfaXNfY3duZF9saW1pdGVkKHNrLCBpbl9mbGlnaHQpKSBSUlMgLSBnb29kIHF1ZXN0aW9u
LgorCSAqCQlyZXR1cm47CisJICovCisJaWYgKG5ldC0+Y3duZCA8PSBuZXQtPnNzdGhyZXNoKSB7
CisJCS8qIFdlIGFyZSBpbiBzbG93IHN0YXJ0ICovCisJCWlmIChuZXQtPmZsaWdodF9zaXplICsg
bmV0LT5uZXRfYWNrID49IG5ldC0+Y3duZCkgeworCQkJaWYgKG5ldC0+bmV0X2FjayA+IChuZXQt
Pm10dSAqIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9MMl9hYmNfdmFyaWFibGUpKSkgeworCQkJCW5l
dC0+Y3duZCArPSAobmV0LT5tdHUgKiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfTDJfYWJjX3Zhcmlh
YmxlKSk7CisJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFND
VFBfQ1dORF9NT05JVE9SX0VOQUJMRSkgeworCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwg
bmV0LT5tdHUsCisJCQkJCQlTQ1RQX0NXTkRfTE9HX0ZST01fU1MpOworCQkJCX0KKworCQkJfSBl
bHNlIHsKKwkJCQluZXQtPmN3bmQgKz0gbmV0LT5uZXRfYWNrOworCQkJCWlmIChTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTU9OSVRPUl9FTkFCTEUpIHsK
KwkJCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIG5ldC0+bmV0X2FjaywKKwkJCQkJCVNDVFBf
Q1dORF9MT0dfRlJPTV9TUyk7CisJCQkJfQorCQkJfQorCQkJc2N0cF9lbmZvcmNlX2N3bmRfbGlt
aXQoJnN0Y2ItPmFzb2MsIG5ldCk7CisJCX0gZWxzZSB7CisJCQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJ
c2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIG5ldC0+bmV0X2FjaywKKwkJCQkJU0NUUF9DV05EX0xP
R19OT0FEVl9TUyk7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQltZWFzdXJlX3J0dChuZXQpOwor
CisJCS8qIEluIGRhbmdlcm91cyBhcmVhLCBpbmNyZWFzZSBzbG93bHkuCisJCSAqIEluIHRoZW9y
eSB0aGlzIGlzIG5ldC0+Y3duZCArPSBhbHBoYSAvIG5ldC0+Y3duZAorCQkgKi8KKwkJLyogV2hh
dCBpcyBzbmRfY3duZF9jbnQ/PyAqLworCQlpZiAoKChuZXQtPnBhcnRpYWxfYnl0ZXNfYWNrZWQv
bmV0LT5tdHUgKiBuZXQtPmNjX21vZC5odGNwX2NhLmFscGhhKSA+PiA3KSpuZXQtPm10dSA+PSBu
ZXQtPmN3bmQpIHsKKwkJCS8qLQorCQkJICogRG9lcyBTQ1RQIGhhdmUgYSBjd25kIGNsYW1wPwor
CQkJICogaWYgKG5ldC0+c25kX2N3bmQgPCBuZXQtPnNuZF9jd25kX2NsYW1wKSAtIE5vcGUgKFJS
UykuCisJCQkgKi8KKwkJCW5ldC0+Y3duZCArPSBuZXQtPm10dTsKKwkJCW5ldC0+cGFydGlhbF9i
eXRlc19hY2tlZCA9IDA7CisJCQlzY3RwX2VuZm9yY2VfY3duZF9saW1pdCgmc3RjYi0+YXNvYywg
bmV0KTsKKwkJCWh0Y3BfYWxwaGFfdXBkYXRlKCZuZXQtPmNjX21vZC5odGNwX2NhKTsKKwkJCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTU9OSVRP
Ul9FTkFCTEUpIHsKKwkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgbmV0LT5tdHUsCisJCQkJ
CVNDVFBfQ1dORF9MT0dfRlJPTV9DQSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQluZXQtPnBhcnRp
YWxfYnl0ZXNfYWNrZWQgKz0gbmV0LT5uZXRfYWNrOworCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkgeworCQkJCXNj
dHBfbG9nX2N3bmQoc3RjYiwgbmV0LCBuZXQtPm5ldF9hY2ssCisJCQkJCVNDVFBfQ1dORF9MT0df
Tk9BRFZfQ0EpOworCQkJfQorCQl9CisKKwkJbmV0LT5jY19tb2QuaHRjcF9jYS5ieXRlc19hY2tl
ZCA9IG5ldC0+bXR1OworCX0KK30KKworI2lmZGVmIFNDVFBfTk9UX1VTRUQKKy8qIExvd2VyIGJv
dW5kIG9uIGNvbmdlc3Rpb24gd2luZG93LiAqLworc3RhdGljIHVpbnQzMl90CitodGNwX21pbl9j
d25kKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworCXJl
dHVybiAobmV0LT5zc3RocmVzaCk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQKK2h0Y3BfaW5p
dChzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJbWVtc2V0KCZuZXQtPmNjX21vZC5odGNwX2Nh
LCAwLCBzaXplb2Yoc3RydWN0IGh0Y3ApKTsKKwluZXQtPmNjX21vZC5odGNwX2NhLmFscGhhID0g
QUxQSEFfQkFTRTsKKwluZXQtPmNjX21vZC5odGNwX2NhLmJldGEgPSBCRVRBX01JTjsKKwluZXQt
PmNjX21vZC5odGNwX2NhLmJ5dGVzX2Fja2VkID0gbmV0LT5tdHU7CisJbmV0LT5jY19tb2QuaHRj
cF9jYS5sYXN0X2NvbmcgPSBzY3RwX2dldF90aWNrX2NvdW50KCk7Cit9CisKK3N0YXRpYyB2b2lk
CitzY3RwX2h0Y3Bfc2V0X2luaXRpYWxfY2NfcGFyYW0oc3RydWN0IHNjdHBfdGNiICpzdGNiLCBz
dHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJLyoKKwkgKiBXZSB0YWtlIHRoZSBtYXggb2YgdGhl
IGJ1cnN0IGxpbWl0IHRpbWVzIGEgTVRVIG9yIHRoZQorCSAqIElOSVRJQUxfQ1dORC4gV2UgdGhl
biBsaW1pdCB0aGlzIHRvIDQgTVRVJ3Mgb2Ygc2VuZGluZy4KKwkgKi8KKwluZXQtPmN3bmQgPSBt
aW4oKG5ldC0+bXR1ICogNCksIG1heCgoMiAqIG5ldC0+bXR1KSwgU0NUUF9JTklUSUFMX0NXTkQp
KTsKKwluZXQtPnNzdGhyZXNoID0gc3RjYi0+YXNvYy5wZWVyc19yd25kOworCXNjdHBfZW5mb3Jj
ZV9jd25kX2xpbWl0KCZzdGNiLT5hc29jLCBuZXQpOworCWh0Y3BfaW5pdChuZXQpOworCisJaWYg
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIChTQ1RQX0NXTkRfTU9OSVRP
Ul9FTkFCTEV8U0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSkgeworCQlzY3RwX2xvZ19jd25kKHN0
Y2IsIG5ldCwgMCwgU0NUUF9DV05EX0lOSVRJQUxJWkFUSU9OKTsKKwl9Cit9CisKK3N0YXRpYyB2
b2lkCitzY3RwX2h0Y3BfY3duZF91cGRhdGVfYWZ0ZXJfc2FjayhzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsCisJCSBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKwkJIGludCBhY2N1bV9tb3Zl
ZCwgaW50IHJlbmVnZWRfYWxsIFNDVFBfVU5VU0VELCBpbnQgd2lsbF9leGl0KQoreworCXN0cnVj
dCBzY3RwX25ldHMgKm5ldDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJ
LyogdXBkYXRlIGN3bmQgYW5kIEVhcmx5IEZSICAgKi8KKwkvKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0KSB7
CisjaWZkZWYgSkFOQV9DTVRfRkFTVF9SRUNPVkVSWQorCQkvKgorCQkgKiBDTVQgZmFzdCByZWNv
dmVyeSBjb2RlLiBOZWVkIHRvIGRlYnVnLgorCQkgKi8KKwkJaWYgKG5ldC0+ZmFzdF9yZXRyYW5f
bG9zc19yZWNvdmVyeSAmJiBuZXQtPm5ld19wc2V1ZG9fY3VtYWNrKSB7CisJCQlpZiAoU0NUUF9U
U05fR0UoYXNvYy0+bGFzdF9hY2tlZF9zZXEsIG5ldC0+ZmFzdF9yZWNvdmVyeV90c24pIHx8CisJ
CQkgICAgU0NUUF9UU05fR0UobmV0LT5wc2V1ZG9fY3VtYWNrLG5ldC0+ZmFzdF9yZWNvdmVyeV90
c24pKSB7CisJCQkJbmV0LT53aWxsX2V4aXRfZmFzdF9yZWNvdmVyeSA9IDE7CisJCQl9CisJCX0K
KyNlbmRpZgorCQkvKiBpZiBub3RoaW5nIHdhcyBhY2tlZCBvbiB0aGlzIGRlc3RpbmF0aW9uIHNr
aXAgaXQgKi8KKwkJaWYgKG5ldC0+bmV0X2FjayA9PSAwKSB7CisJCQlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSB7CisJ
CQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIDAsIFNDVFBfQ1dORF9MT0dfRlJPTV9TQUNLKTsK
KwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisjaWZkZWYgSkFOQV9DTVRfRkFTVF9SRUNPVkVSWQor
CQkvKiBDTVQgZmFzdCByZWNvdmVyeSBjb2RlCisJCSAqLworCQkvKgorCQlpZiAoc2N0cF9jbXRf
b25fb2ZmID4gMCAmJiBuZXQtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgJiYgbmV0LT53aWxs
X2V4aXRfZmFzdF9yZWNvdmVyeSA9PSAwKSB7CisJCSAgICBAQEAgRG8gc29tZXRoaW5nCisJCSB9
CisJCSBlbHNlIGlmIChzY3RwX2NtdF9vbl9vZmYgPT0gMCAmJiBhc29jLT5mYXN0X3JldHJhbl9s
b3NzX3JlY292ZXJ5ICYmIHdpbGxfZXhpdCA9PSAwKSB7CisJCSovCisjZW5kaWYKKworCQlpZiAo
YXNvYy0+ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVyeSAmJgorCQkgICAgd2lsbF9leGl0ID09IDAg
JiYKKwkJICAgIChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPT0gMCkpIHsKKwkJCS8qCisJCQkgKiBJ
ZiB3ZSBhcmUgaW4gbG9zcyByZWNvdmVyeSB3ZSBza2lwIGFueSBjd25kCisJCQkgKiB1cGRhdGUK
KwkJCSAqLworCQkJcmV0dXJuOworCQl9CisJCS8qCisJCSAqIENNVDogQ1VDIGFsZ29yaXRobS4g
VXBkYXRlIGN3bmQgaWYgcHNldWRvLWN1bWFjayBoYXMKKwkJICogbW92ZWQuCisJCSAqLworCQlp
ZiAoYWNjdW1fbW92ZWQgfHwKKwkJICAgICgoYXNvYy0+c2N0cF9jbXRfb25fb2ZmID4gMCkgJiYg
bmV0LT5uZXdfcHNldWRvX2N1bWFjaykpIHsKKwkJCWh0Y3BfY29uZ19hdm9pZChzdGNiLCBuZXQp
OworCQkJbWVhc3VyZV9hY2hpZXZlZF90aHJvdWdocHV0KG5ldCk7CisJCX0gZWxzZSB7CisJCQlp
ZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJ
TkdfRU5BQkxFKSB7CisJCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIG5ldC0+bXR1LAorCQkJ
CQlTQ1RQX0NXTkRfTE9HX05PX0NVTUFDSyk7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2
b2lkCitzY3RwX2h0Y3BfY3duZF91cGRhdGVfYWZ0ZXJfZnIoc3RydWN0IHNjdHBfdGNiICpzdGNi
LAorCQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKK3sKKwlzdHJ1Y3Qgc2N0cF9uZXRz
ICpuZXQ7CisJLyoKKwkgKiBDTVQgZmFzdCByZWNvdmVyeSBjb2RlLiBOZWVkIHRvIGRlYnVnLiAo
KHNjdHBfY210X29uX29mZiA+IDApICYmCisJICogKG5ldC0+ZmFzdF9yZXRyYW5fbG9zc19yZWNv
dmVyeSA9PSAwKSkpCisJICovCisJVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3Rw
X25leHQpIHsKKwkJaWYgKChhc29jLT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ID09IDApIHx8
CisJCSAgICAoYXNvYy0+c2N0cF9jbXRfb25fb2ZmID4gMCkpIHsKKwkJCS8qIG91dCBvZiBhIFJG
QzI1ODIgRmFzdCByZWNvdmVyeSB3aW5kb3c/ICovCisJCQlpZiAobmV0LT5uZXRfYWNrID4gMCkg
eworCQkJCS8qCisJCQkJICogcGVyIHNlY3Rpb24gNy4yLjMsIGFyZSB0aGVyZSBhbnkKKwkJCQkg
KiBkZXN0aW5hdGlvbnMgdGhhdCBoYWQgYSBmYXN0IHJldHJhbnNtaXQKKwkJCQkgKiB0byB0aGVt
LiBJZiBzbyB3aGF0IHdlIG5lZWQgdG8gZG8gaXMKKwkJCQkgKiBhZGp1c3Qgc3N0aHJlc2ggYW5k
IGN3bmQuCisJCQkJICovCisJCQkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqbGNoazsKKwkJCQlp
bnQgb2xkX2N3bmQgPSBuZXQtPmN3bmQ7CisKKwkJCQkvKiBKUlMgLSByZXNldCBhcyBpZiBzdGF0
ZSB3ZXJlIGNoYW5nZWQgKi8KKwkJCQlodGNwX3Jlc2V0KCZuZXQtPmNjX21vZC5odGNwX2NhKTsK
KwkJCQluZXQtPnNzdGhyZXNoID0gaHRjcF9yZWNhbGNfc3N0aHJlc2gobmV0KTsKKwkJCQluZXQt
PmN3bmQgPSBuZXQtPnNzdGhyZXNoOworCQkJCXNjdHBfZW5mb3JjZV9jd25kX2xpbWl0KGFzb2Ms
IG5ldCk7CisJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFND
VFBfQ1dORF9NT05JVE9SX0VOQUJMRSkgeworCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwg
KG5ldC0+Y3duZCAtIG9sZF9jd25kKSwKKwkJCQkJCVNDVFBfQ1dORF9MT0dfRlJPTV9GUik7CisJ
CQkJfQorCQkJCWxjaGsgPSBUQUlMUV9GSVJTVCgmYXNvYy0+c2VuZF9xdWV1ZSk7CisKKwkJCQlu
ZXQtPnBhcnRpYWxfYnl0ZXNfYWNrZWQgPSAwOworCQkJCS8qIFR1cm4gb24gZmFzdCByZWNvdmVy
eSB3aW5kb3cgKi8KKwkJCQlhc29jLT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ID0gMTsKKwkJ
CQlpZiAobGNoayA9PSBOVUxMKSB7CisJCQkJCS8qIE1hcmsgZW5kIG9mIHRoZSB3aW5kb3cgKi8K
KwkJCQkJYXNvYy0+ZmFzdF9yZWNvdmVyeV90c24gPSBhc29jLT5zZW5kaW5nX3NlcSAtIDE7CisJ
CQkJfSBlbHNlIHsKKwkJCQkJYXNvYy0+ZmFzdF9yZWNvdmVyeV90c24gPSBsY2hrLT5yZWMuZGF0
YS50c24gLSAxOworCQkJCX0KKworCQkJCS8qCisJCQkJICogQ01UIGZhc3QgcmVjb3ZlcnkgLS0g
cGVyIGRlc3RpbmF0aW9uCisJCQkJICogcmVjb3ZlcnkgdmFyaWFibGUuCisJCQkJICovCisJCQkJ
bmV0LT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ID0gMTsKKworCQkJCWlmIChsY2hrID09IE5V
TEwpIHsKKwkJCQkJLyogTWFyayBlbmQgb2YgdGhlIHdpbmRvdyAqLworCQkJCQluZXQtPmZhc3Rf
cmVjb3ZlcnlfdHNuID0gYXNvYy0+c2VuZGluZ19zZXEgLSAxOworCQkJCX0gZWxzZSB7CisJCQkJ
CW5ldC0+ZmFzdF9yZWNvdmVyeV90c24gPSBsY2hrLT5yZWMuZGF0YS50c24gLSAxOworCQkJCX0K
KworCQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfU0VORCwKKwkJCQkJCXN0Y2It
PnNjdHBfZXAsIHN0Y2IsIG5ldCwKKwkJCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBf
Q0NfRlVOQ1RJT05TICsgU0NUUF9MT0NfMyk7CisJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJ
TUVSX1RZUEVfU0VORCwKKwkJCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXQpOworCQkJfQor
CQl9IGVsc2UgaWYgKG5ldC0+bmV0X2FjayA+IDApIHsKKwkJCS8qCisJCQkgKiBNYXJrIGEgcGVn
IHRoYXQgd2UgV09VTEQgaGF2ZSBkb25lIGEgY3duZAorCQkJICogcmVkdWN0aW9uIGJ1dCBSRkMy
NTgyIHByZXZlbnRlZCB0aGlzIGFjdGlvbi4KKwkJCSAqLworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0
cHNfZmFzdHJldHJhbnNpbnJ0dCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2h0
Y3BfY3duZF91cGRhdGVfYWZ0ZXJfdGltZW91dChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJc3Ry
dWN0IHNjdHBfbmV0cyAqbmV0KQoreworCQlpbnQgb2xkX2N3bmQgPSBuZXQtPmN3bmQ7CisKKwkJ
LyogSlJTIC0gcmVzZXQgYXMgaWYgdGhlIHN0YXRlIHdlcmUgYmVpbmcgY2hhbmdlZCB0byB0aW1l
b3V0ICovCisJCWh0Y3BfcmVzZXQoJm5ldC0+Y2NfbW9kLmh0Y3BfY2EpOworCQluZXQtPnNzdGhy
ZXNoID0gaHRjcF9yZWNhbGNfc3N0aHJlc2gobmV0KTsKKwkJbmV0LT5jd25kID0gbmV0LT5tdHU7
CisJCW5ldC0+cGFydGlhbF9ieXRlc19hY2tlZCA9IDA7CisJCWlmIChTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTU9OSVRPUl9FTkFCTEUpIHsKKwkJCXNj
dHBfbG9nX2N3bmQoc3RjYiwgbmV0LCBuZXQtPmN3bmQgLSBvbGRfY3duZCwgU0NUUF9DV05EX0xP
R19GUk9NX1JUWCk7CisJCX0KK30KKworc3RhdGljIHZvaWQKK3NjdHBfaHRjcF9jd25kX3VwZGF0
ZV9hZnRlcl9lY25fZWNobyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCXN0cnVjdCBzY3RwX25l
dHMgKm5ldCwgaW50IGluX3dpbmRvdywgaW50IG51bV9wa3RfbG9zdCBTQ1RQX1VOVVNFRCkKK3sK
KwlpbnQgb2xkX2N3bmQ7CisJb2xkX2N3bmQgPSBuZXQtPmN3bmQ7CisKKwkvKiBKUlMgLSByZXNl
dCBoY3RwIGFzIGlmIHN0YXRlIGNoYW5nZWQgKi8KKwlpZiAoaW5fd2luZG93ID09IDApIHsKKwkJ
aHRjcF9yZXNldCgmbmV0LT5jY19tb2QuaHRjcF9jYSk7CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBz
X2VjbmVyZWR1Y2VkY3duZCk7CisJCW5ldC0+c3N0aHJlc2ggPSBodGNwX3JlY2FsY19zc3RocmVz
aChuZXQpOworCQlpZiAobmV0LT5zc3RocmVzaCA8IG5ldC0+bXR1KSB7CisJCQluZXQtPnNzdGhy
ZXNoID0gbmV0LT5tdHU7CisJCQkvKiBoZXJlIGJhY2sgb2ZmIHRoZSB0aW1lciBhcyB3ZWxsLCB0
byBzbG93IHVzIGRvd24gKi8KKwkJCW5ldC0+UlRPIDw8PSAxOworCQl9CisJCW5ldC0+Y3duZCA9
IG5ldC0+c3N0aHJlc2g7CisJCXNjdHBfZW5mb3JjZV9jd25kX2xpbWl0KCZzdGNiLT5hc29jLCBu
ZXQpOworCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9D
V05EX01PTklUT1JfRU5BQkxFKSB7CisJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgKG5ldC0+
Y3duZCAtIG9sZF9jd25kKSwgU0NUUF9DV05EX0xPR19GUk9NX1NBVCk7CisJCX0KKwl9Cit9CisK
K2NvbnN0IHN0cnVjdCBzY3RwX2NjX2Z1bmN0aW9ucyBzY3RwX2NjX2Z1bmN0aW9uc1tdID0gewor
eworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX01JTkdXMzJfXykKKwlzY3RwX3Nl
dF9pbml0aWFsX2NjX3BhcmFtLAorCXNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfc2FjaywKKwlzY3Rw
X2N3bmRfdXBkYXRlX2V4aXRfcGZfY29tbW9uLAorCXNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZnIs
CisJc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl90aW1lb3V0LAorCXNjdHBfY3duZF91cGRhdGVfYWZ0
ZXJfZWNuX2VjaG8sCisJc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9wYWNrZXRfZHJvcHBlZCwKKwlz
Y3RwX2N3bmRfdXBkYXRlX2FmdGVyX291dHB1dCwKKyNlbHNlCisJLnNjdHBfc2V0X2luaXRpYWxf
Y2NfcGFyYW0gPSBzY3RwX3NldF9pbml0aWFsX2NjX3BhcmFtLAorCS5zY3RwX2N3bmRfdXBkYXRl
X2FmdGVyX3NhY2sgPSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3NhY2ssCisJLnNjdHBfY3duZF91
cGRhdGVfZXhpdF9wZiA9IHNjdHBfY3duZF91cGRhdGVfZXhpdF9wZl9jb21tb24sCisJLnNjdHBf
Y3duZF91cGRhdGVfYWZ0ZXJfZnIgPSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX2ZyLAorCS5zY3Rw
X2N3bmRfdXBkYXRlX2FmdGVyX3RpbWVvdXQgPSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3RpbWVv
dXQsCisJLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZWNuX2VjaG8gPSBzY3RwX2N3bmRfdXBkYXRl
X2FmdGVyX2Vjbl9lY2hvLAorCS5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3BhY2tldF9kcm9wcGVk
ID0gc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9wYWNrZXRfZHJvcHBlZCwKKwkuc2N0cF9jd25kX3Vw
ZGF0ZV9hZnRlcl9vdXRwdXQgPSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX291dHB1dCwKKyNlbmRp
ZgorfSwKK3sKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19NSU5HVzMyX18pCisJ
c2N0cF9zZXRfaW5pdGlhbF9jY19wYXJhbSwKKwlzY3RwX2hzX2N3bmRfdXBkYXRlX2FmdGVyX3Nh
Y2ssCisJc2N0cF9jd25kX3VwZGF0ZV9leGl0X3BmX2NvbW1vbiwKKwlzY3RwX2hzX2N3bmRfdXBk
YXRlX2FmdGVyX2ZyLAorCXNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfdGltZW91dCwKKwlzY3RwX2N3
bmRfdXBkYXRlX2FmdGVyX2Vjbl9lY2hvLAorCXNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfcGFja2V0
X2Ryb3BwZWQsCisJc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9vdXRwdXQsCisjZWxzZQorCS5zY3Rw
X3NldF9pbml0aWFsX2NjX3BhcmFtID0gc2N0cF9zZXRfaW5pdGlhbF9jY19wYXJhbSwKKwkuc2N0
cF9jd25kX3VwZGF0ZV9hZnRlcl9zYWNrID0gc2N0cF9oc19jd25kX3VwZGF0ZV9hZnRlcl9zYWNr
LAorCS5zY3RwX2N3bmRfdXBkYXRlX2V4aXRfcGYgPSBzY3RwX2N3bmRfdXBkYXRlX2V4aXRfcGZf
Y29tbW9uLAorCS5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX2ZyID0gc2N0cF9oc19jd25kX3VwZGF0
ZV9hZnRlcl9mciwKKwkuc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl90aW1lb3V0ID0gc2N0cF9jd25k
X3VwZGF0ZV9hZnRlcl90aW1lb3V0LAorCS5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX2Vjbl9lY2hv
ID0gc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9lY25fZWNobywKKwkuc2N0cF9jd25kX3VwZGF0ZV9h
ZnRlcl9wYWNrZXRfZHJvcHBlZCA9IHNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfcGFja2V0X2Ryb3Bw
ZWQsCisJLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfb3V0cHV0ID0gc2N0cF9jd25kX3VwZGF0ZV9h
ZnRlcl9vdXRwdXQsCisjZW5kaWYKK30sCit7CisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZp
bmVkKF9fTUlOR1czMl9fKQorCXNjdHBfaHRjcF9zZXRfaW5pdGlhbF9jY19wYXJhbSwKKwlzY3Rw
X2h0Y3BfY3duZF91cGRhdGVfYWZ0ZXJfc2FjaywKKwlzY3RwX2N3bmRfdXBkYXRlX2V4aXRfcGZf
Y29tbW9uLAorCXNjdHBfaHRjcF9jd25kX3VwZGF0ZV9hZnRlcl9mciwKKwlzY3RwX2h0Y3BfY3du
ZF91cGRhdGVfYWZ0ZXJfdGltZW91dCwKKwlzY3RwX2h0Y3BfY3duZF91cGRhdGVfYWZ0ZXJfZWNu
X2VjaG8sCisJc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9wYWNrZXRfZHJvcHBlZCwKKwlzY3RwX2N3
bmRfdXBkYXRlX2FmdGVyX291dHB1dCwKKyNlbHNlCisJLnNjdHBfc2V0X2luaXRpYWxfY2NfcGFy
YW0gPSBzY3RwX2h0Y3Bfc2V0X2luaXRpYWxfY2NfcGFyYW0sCisJLnNjdHBfY3duZF91cGRhdGVf
YWZ0ZXJfc2FjayA9IHNjdHBfaHRjcF9jd25kX3VwZGF0ZV9hZnRlcl9zYWNrLAorCS5zY3RwX2N3
bmRfdXBkYXRlX2V4aXRfcGYgPSBzY3RwX2N3bmRfdXBkYXRlX2V4aXRfcGZfY29tbW9uLAorCS5z
Y3RwX2N3bmRfdXBkYXRlX2FmdGVyX2ZyID0gc2N0cF9odGNwX2N3bmRfdXBkYXRlX2FmdGVyX2Zy
LAorCS5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3RpbWVvdXQgPSBzY3RwX2h0Y3BfY3duZF91cGRh
dGVfYWZ0ZXJfdGltZW91dCwKKwkuc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9lY25fZWNobyA9IHNj
dHBfaHRjcF9jd25kX3VwZGF0ZV9hZnRlcl9lY25fZWNobywKKwkuc2N0cF9jd25kX3VwZGF0ZV9h
ZnRlcl9wYWNrZXRfZHJvcHBlZCA9IHNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfcGFja2V0X2Ryb3Bw
ZWQsCisJLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfb3V0cHV0ID0gc2N0cF9jd25kX3VwZGF0ZV9h
ZnRlcl9vdXRwdXQsCisjZW5kaWYKK30sCit7CisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZp
bmVkKF9fTUlOR1czMl9fKQorCXNjdHBfc2V0X3J0Y2NfaW5pdGlhbF9jY19wYXJhbSwKKwlzY3Rw
X2N3bmRfdXBkYXRlX3J0Y2NfYWZ0ZXJfc2FjaywKKwlzY3RwX2N3bmRfdXBkYXRlX2V4aXRfcGZf
Y29tbW9uLAorCXNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZnIsCisJc2N0cF9jd25kX3VwZGF0ZV9h
ZnRlcl90aW1lb3V0LAorCXNjdHBfY3duZF91cGRhdGVfcnRjY19hZnRlcl9lY25fZWNobywKKwlz
Y3RwX2N3bmRfdXBkYXRlX2FmdGVyX3BhY2tldF9kcm9wcGVkLAorCXNjdHBfY3duZF91cGRhdGVf
YWZ0ZXJfb3V0cHV0LAorCXNjdHBfY3duZF91cGRhdGVfcnRjY19wYWNrZXRfdHJhbnNtaXR0ZWQs
CisJc2N0cF9jd25kX3VwZGF0ZV9ydGNjX3Rzbl9hY2tub3dsZWRnZWQsCisJc2N0cF9jd25kX25l
d19ydGNjX3RyYW5zbWlzc2lvbl9iZWdpbnMsCisJc2N0cF9jd25kX3ByZXBhcmVfcnRjY19uZXRf
Zm9yX3NhY2ssCisJc2N0cF9jd25kX3J0Y2Nfc29ja2V0X29wdGlvbiwKKwlzY3RwX3J0dF9ydGNj
X2NhbGN1bGF0ZWQKKyNlbHNlCisJLnNjdHBfc2V0X2luaXRpYWxfY2NfcGFyYW0gPSBzY3RwX3Nl
dF9ydGNjX2luaXRpYWxfY2NfcGFyYW0sCisJLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfc2FjayA9
IHNjdHBfY3duZF91cGRhdGVfcnRjY19hZnRlcl9zYWNrLAorCS5zY3RwX2N3bmRfdXBkYXRlX2V4
aXRfcGYgPSBzY3RwX2N3bmRfdXBkYXRlX2V4aXRfcGZfY29tbW9uLAorCS5zY3RwX2N3bmRfdXBk
YXRlX2FmdGVyX2ZyID0gc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9mciwKKwkuc2N0cF9jd25kX3Vw
ZGF0ZV9hZnRlcl90aW1lb3V0ID0gc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl90aW1lb3V0LAorCS5z
Y3RwX2N3bmRfdXBkYXRlX2FmdGVyX2Vjbl9lY2hvID0gc2N0cF9jd25kX3VwZGF0ZV9ydGNjX2Fm
dGVyX2Vjbl9lY2hvLAorCS5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3BhY2tldF9kcm9wcGVkID0g
c2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9wYWNrZXRfZHJvcHBlZCwKKwkuc2N0cF9jd25kX3VwZGF0
ZV9hZnRlcl9vdXRwdXQgPSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX291dHB1dCwKKwkuc2N0cF9j
d25kX3VwZGF0ZV9wYWNrZXRfdHJhbnNtaXR0ZWQgPSBzY3RwX2N3bmRfdXBkYXRlX3J0Y2NfcGFj
a2V0X3RyYW5zbWl0dGVkLAorCS5zY3RwX2N3bmRfdXBkYXRlX3Rzbl9hY2tub3dsZWRnZWQgPSBz
Y3RwX2N3bmRfdXBkYXRlX3J0Y2NfdHNuX2Fja25vd2xlZGdlZCwKKwkuc2N0cF9jd25kX25ld190
cmFuc21pc3Npb25fYmVnaW5zID0gc2N0cF9jd25kX25ld19ydGNjX3RyYW5zbWlzc2lvbl9iZWdp
bnMsCisJLnNjdHBfY3duZF9wcmVwYXJlX25ldF9mb3Jfc2FjayA9IHNjdHBfY3duZF9wcmVwYXJl
X3J0Y2NfbmV0X2Zvcl9zYWNrLAorCS5zY3RwX2N3bmRfc29ja2V0X29wdGlvbiA9IHNjdHBfY3du
ZF9ydGNjX3NvY2tldF9vcHRpb24sCisJLnNjdHBfcnR0X2NhbGN1bGF0ZWQgPSBzY3RwX3J0dF9y
dGNjX2NhbGN1bGF0ZWQKKyNlbmRpZgorfQorfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNj
dHBsaWIvbmV0aW5ldC9zY3RwX2NvbnN0YW50cy5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRp
bmV0L3NjdHBfY29uc3RhbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAw
MDAwLi5iZTIwMjhlYjI3NTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGli
L25ldGluZXQvc2N0cF9jb25zdGFudHMuaApAQCAtMCwwICsxLDEwNjkgQEAKKy8qLQorICogU1BE
WC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICoKKyAqIENvcHlyaWdodCAoYykg
MjAwMS0yMDA4LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVu
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZSBtZXQ6CisgKgorICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBiKSBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBjKSBOZWl0aGVyIHRo
ZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAg
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorICog
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZC
U0RJRCgiJEZyZWVCU0QkIik7CisjZW5kaWYKKworI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX0NPTlNU
QU5UU19IXworI2RlZmluZSBfTkVUSU5FVF9TQ1RQX0NPTlNUQU5UU19IXworCisjaWYgZGVmaW5l
ZChfV0lOMzIpICYmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK2V4dGVybiB2b2lkIGdldHdpbnRp
bWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYpOworCisjZW5kaWYKKy8qIElBTkEgYXNzaWduZWQg
cG9ydCBudW1iZXIgZm9yIFNDVFAgb3ZlciBVRFAgZW5jYXBzdWxhdGlvbiAqLworI2RlZmluZSBT
Q1RQX09WRVJfVURQX1RVTk5FTElOR19QT1JUIDk4OTkKKworLyogTnVtYmVyIG9mIHBhY2tldHMg
dG8gZ2V0IGJlZm9yZSBzYWNrIHNlbnQgYnkgZGVmYXVsdCAqLworI2RlZmluZSBTQ1RQX0RFRkFV
TFRfU0FDS19GUkVRIDIKKworLyogQWRkcmVzcyBsaW1pdCAtIFRoaXMgdmFyaWFibGUgaXMgY2Fs
Y3VsYXRlZAorICogYmFzZWQgb24gYW4gNjU1MzUgYnl0ZSBtYXggaXAgcGFja2V0LiBXZSB0YWtl
IG91dCAxMDAgYnl0ZXMKKyAqIGZvciB0aGUgY29va2llLCA0MCBieXRlcyBmb3IgYSB2NiBoZWFk
ZXIgYW5kIDMyCisgKiBieXRlcyBmb3IgdGhlIGluaXQgc3RydWN0dXJlLiBBIHNlY29uZCBpbml0
IHN0cnVjdHVyZQorICogZm9yIHRoZSBpbml0LWFjayBhbmQgdGhlbiBmaW5hbGx5IGEgdGhpcmQg
b25lIGZvciB0aGUKKyAqIGltYmVkZGVkIGluaXQuIFRoaXMgeWVpbGRzIDEwMCs0MCsoMyAqIDMy
KSA9IDIzNiBieXRlcy4KKyAqIFRoaXMgbGVhdmVzIDY1Mjk5IGJ5dGVzIGZvciBhZGRyZXNzZXMu
IFdlIHRocm93IG91dCB0aGUgMjk5IGJ5dGVzLgorICogTm93IHdoYXRldmVyIHdlIHNlbmQgaW4g
dGhlIElOSVQoKSB3ZSBuZWVkIHRvIGFsbG93IHRvIGdldCBiYWNrIGluIHRoZQorICogSU5JVC1B
Q0sgcGx1cyBhbGwgdGhlIHZhbHVlcyBmcm9tIElOSVQgYW5kIElOSVQtQUNLCisgKiBsaXN0ZWQg
aW4gdGhlIGNvb2tpZS4gUGx1cyB3ZSBuZWVkIHNvbWUgb3ZlcmhlYWQgZm9yCisgKiBtYXliZSBj
b3BpZWQgcGFyYW1ldGVycyBpbiB0aGUgQ09PS0lFLiBJZiB3ZQorICogYWxsb3cgMTA4MCBhZGRy
ZXNzZXMsIGFuZCBlYWNoIHNpZGUgaGFzIDEwODAgVjYgYWRkcmVzc2VzCisgKiB0aGF0IHdpbGwg
YmUgMjE2MDAgYnl0ZXMuIEluIHRoZSBJTklULUFDSyB3ZSB3aWxsCisgKiBzZWUgdGhlIElOSVQt
QUNLIDIxNjAwICsgNDMyMDAgaW4gdGhlIGNvb2tpZS4gVGhpcyBsZWF2ZXMKKyAqIGFib3V0IDUw
MCBieXRlcyBzbGFjayBmb3IgbWlzYyB0aGluZ3MgaW4gdGhlIGNvb2tpZS4KKyAqLworI2RlZmlu
ZSBTQ1RQX0FERFJFU1NfTElNSVQgMTA4MAorCisvKiBXZSBuZWVkIGF0IGxlYXN0IDJrIG9mIHNw
YWNlIGZvciB1cywgaW5pdHMKKyAqIGxhcmdlciB0aGFuIHRoYXQgbGV0cyBhYm9ydC4KKyAqLwor
I2RlZmluZSBTQ1RQX0xBUkdFU1RfSU5JVF9BQ0NFUFRFRCAoNjU1MzUgLSAyMDQ4KQorCisvKiBM
YXJnZXN0IGxlbmd0aCBvZiBhIGNodW5rICovCisjZGVmaW5lIFNDVFBfTUFYX0NIVU5LX0xFTkdU
SCAweGZmZmYKKy8qIExhcmdlc3QgbGVuZ3RoIG9mIGFuIGVycm9yIGNhdXNlICovCisjZGVmaW5l
IFNDVFBfTUFYX0NBVVNFX0xFTkdUSCAweGZmZmYKKy8qIE51bWJlciBvZiBhZGRyZXNzZXMgd2hl
cmUgd2UganVzdCBza2lwIHRoZSBjb3VudGluZyAqLworI2RlZmluZSBTQ1RQX0NPVU5UX0xJTUlU
IDQwCisKKyNkZWZpbmUgU0NUUF9aRVJPX0NPUFlfVElDS19ERUxBWSAoKCgxMDAgKiBoeikgKyA5
OTkpIC8gMTAwMCkKKyNkZWZpbmUgU0NUUF9aRVJPX0NPUFlfU0VORFFfVElDS19ERUxBWSAoKCgx
MDAgKiBoeikgKyA5OTkpIC8gMTAwMCkKKworLyogTnVtYmVyIG9mIHRpY2tzIHRvIGRlbGF5IGJl
Zm9yZSBydW5uaW5nCisgKiBpdGVyYXRvciBvbiBhbiBhZGRyZXNzIGNoYW5nZS4KKyAqLworI2Rl
ZmluZSBTQ1RQX0FERFJFU1NfVElDS19ERUxBWSAyCisKKyNkZWZpbmUgU0NUUF9WRVJTSU9OX1NU
UklORyAiS0FNRS1CU0QgMS4xIgorLyogI2RlZmluZSBTQ1RQX0FVRElUSU5HX0VOQUJMRUQgMSB1
c2VkIGZvciBkZWJ1Zy9hdWRpdGluZyAqLworI2RlZmluZSBTQ1RQX0FVRElUX1NJWkUgMjU2CisK
KyNkZWZpbmUgU0NUUF9LVFJIRUFEX05BTUUgInNjdHBfaXRlcmF0b3IiCisjZGVmaW5lIFNDVFBf
S1RIUkVBRF9QQUdFUyAwCisKKyNkZWZpbmUgU0NUUF9NQ09SRV9OQU1FICJzY3RwX2NvcmVfd29y
a2VyIgorCisvKiBJZiB5b3Ugc3VwcG9ydCBNdWx0aS1WUkYgaG93IGJpZyB0bworICogbWFrZSB0
aGUgaW5pdGlhbCBhcnJheSBvZiBWUkYncyB0by4KKyAqLworI2RlZmluZSBTQ1RQX0RFRkFVTFRf
VlJGX1NJWkUgNAorCisvKiBKUlMgLSBWYWx1ZXMgZGVmaW5lZCBmb3IgdGhlIEhUQ1AgYWxnb3Jp
dGhtICovCisjZGVmaW5lIEFMUEhBX0JBU0UJKDE8PDcpICAvKiAxLjAgd2l0aCBzaGlmdCA8PCA3
ICovCisjZGVmaW5lIEJFVEFfTUlOCSgxPDw2KSAgLyogMC41IHdpdGggc2hpZnQgPDwgNyAqLwor
I2RlZmluZSBCRVRBX01BWAkxMDIJLyogMC44IHdpdGggc2hpZnQgPDwgNyAqLworCisvKiBQbGFj
ZXMgdGhhdCBDV05EIGxvZyBjYW4gaGFwcGVuIGZyb20gKi8KKyNkZWZpbmUgU0NUUF9DV05EX0xP
R19GUk9NX0ZSCTEKKyNkZWZpbmUgU0NUUF9DV05EX0xPR19GUk9NX1JUWAkyCisjZGVmaW5lIFND
VFBfQ1dORF9MT0dfRlJPTV9CUlNUCTMKKyNkZWZpbmUgU0NUUF9DV05EX0xPR19GUk9NX1NTCTQK
KyNkZWZpbmUgU0NUUF9DV05EX0xPR19GUk9NX0NBCTUKKyNkZWZpbmUgU0NUUF9DV05EX0xPR19G
Uk9NX1NBVAk2CisjZGVmaW5lIFNDVFBfQkxPQ0tfTE9HX0lOVE9fQkxLIDcKKyNkZWZpbmUgU0NU
UF9CTE9DS19MT0dfT1VUT0ZfQkxLIDgKKyNkZWZpbmUgU0NUUF9CTE9DS19MT0dfQ0hFQ0sgICAg
IDkKKyNkZWZpbmUgU0NUUF9TVFJfTE9HX0ZST01fSU5UT19TVFJEIDEwCisjZGVmaW5lIFNDVFBf
U1RSX0xPR19GUk9NX0lNTUVEX0RFTCAxMQorI2RlZmluZSBTQ1RQX1NUUl9MT0dfRlJPTV9JTlNF
UlRfSEQgMTIKKyNkZWZpbmUgU0NUUF9TVFJfTE9HX0ZST01fSU5TRVJUX01EIDEzCisjZGVmaW5l
IFNDVFBfU1RSX0xPR19GUk9NX0lOU0VSVF9UTCAxNAorI2RlZmluZSBTQ1RQX1NUUl9MT0dfRlJP
TV9NQVJLX1RTTiAgMTUKKyNkZWZpbmUgU0NUUF9TVFJfTE9HX0ZST01fRVhQUlNfREVMIDE2Cisj
ZGVmaW5lIFNDVFBfRlJfTE9HX0JJR0dFU1RfVFNOUyAgICAxNworI2RlZmluZSBTQ1RQX0ZSX0xP
R19TVFJJS0VfVEVTVCAgICAgMTgKKyNkZWZpbmUgU0NUUF9GUl9MT0dfU1RSSUtFX0NIVU5LICAg
IDE5CisjZGVmaW5lIFNDVFBfRlJfVDNfVElNRU9VVCAgICAgICAgICAyMAorI2RlZmluZSBTQ1RQ
X01BUF9QUkVQQVJFX1NMSURFICAgICAgMjEKKyNkZWZpbmUgU0NUUF9NQVBfU0xJREVfRlJPTSAg
ICAgICAgIDIyCisjZGVmaW5lIFNDVFBfTUFQX1NMSURFX1JFU1VMVCAgICAgICAyMworI2RlZmlu
ZSBTQ1RQX01BUF9TTElERV9DTEVBUkVECSAgICAyNAorI2RlZmluZSBTQ1RQX01BUF9TTElERV9O
T05FICAgICAgICAgMjUKKyNkZWZpbmUgU0NUUF9GUl9UM19NQVJLX1RJTUUgICAgICAgIDI2Cisj
ZGVmaW5lIFNDVFBfRlJfVDNfTUFSS0VEICAgICAgICAgICAyNworI2RlZmluZSBTQ1RQX0ZSX1Qz
X1NUT1BQRUQgICAgICAgICAgMjgKKyNkZWZpbmUgU0NUUF9GUl9NQVJLRUQgICAgICAgICAgICAg
IDMwCisjZGVmaW5lIFNDVFBfQ1dORF9MT0dfTk9BRFZfU1MgICAgICAzMQorI2RlZmluZSBTQ1RQ
X0NXTkRfTE9HX05PQURWX0NBICAgICAgMzIKKyNkZWZpbmUgU0NUUF9NQVhfQlVSU1RfQVBQTElF
RCAgICAgIDMzCisjZGVmaW5lIFNDVFBfTUFYX0lGUF9BUFBMSUVEICAgICAgICAzNAorI2RlZmlu
ZSBTQ1RQX01BWF9CVVJTVF9FUlJPUl9TVE9QICAgMzUKKyNkZWZpbmUgU0NUUF9JTkNSRUFTRV9Q
RUVSX1JXTkQgICAgIDM2CisjZGVmaW5lIFNDVFBfREVDUkVBU0VfUEVFUl9SV05EICAgICAzNwor
I2RlZmluZSBTQ1RQX1NFVF9QRUVSX1JXTkRfVklBX1NBQ0sgMzgKKyNkZWZpbmUgU0NUUF9MT0df
TUJDTlRfSU5DUkVBU0UgICAgIDM5CisjZGVmaW5lIFNDVFBfTE9HX01CQ05UX0RFQ1JFQVNFICAg
ICA0MAorI2RlZmluZSBTQ1RQX0xPR19NQkNOVF9DSEtTRVQgICAgICAgNDEKKyNkZWZpbmUgU0NU
UF9MT0dfTkVXX1NBQ0sgICAgICAgICAgIDQyCisjZGVmaW5lIFNDVFBfTE9HX1RTTl9BQ0tFRCAg
ICAgICAgICA0MworI2RlZmluZSBTQ1RQX0xPR19UU05fUkVWT0tFRCAgICAgICAgNDQKKyNkZWZp
bmUgU0NUUF9MT0dfTE9DS19UQ0IgICAgICAgICAgIDQ1CisjZGVmaW5lIFNDVFBfTE9HX0xPQ0tf
SU5QICAgICAgICAgICA0NgorI2RlZmluZSBTQ1RQX0xPR19MT0NLX1NPQ0sgICAgICAgICAgNDcK
KyNkZWZpbmUgU0NUUF9MT0dfTE9DS19TT0NLQlVGX1IgICAgIDQ4CisjZGVmaW5lIFNDVFBfTE9H
X0xPQ0tfU09DS0JVRl9TICAgICA0OQorI2RlZmluZSBTQ1RQX0xPR19MT0NLX0NSRUFURSAgICAg
ICAgNTAKKyNkZWZpbmUgU0NUUF9MT0dfSU5JVElBTF9SVFQgICAgICAgIDUxCisjZGVmaW5lIFND
VFBfTE9HX1JUVFZBUiAgICAgICAgICAgICA1MgorI2RlZmluZSBTQ1RQX0xPR19TQkFMTE9DICAg
ICAgICAgICAgNTMKKyNkZWZpbmUgU0NUUF9MT0dfU0JGUkVFICAgICAgICAgICAgIDU0CisjZGVm
aW5lIFNDVFBfTE9HX1NCUkVTVUxUICAgICAgICAgICA1NQorI2RlZmluZSBTQ1RQX0ZSX0RVUEVE
ICAgICAgICAgICAgICAgNTYKKyNkZWZpbmUgU0NUUF9GUl9NQVJLRURfRUFSTFkgICAgICAgIDU3
CisjZGVmaW5lIFNDVFBfRlJfQ1dORF9SRVBPUlQgICAgICAgICA1OAorI2RlZmluZSBTQ1RQX0ZS
X0NXTkRfUkVQT1JUX1NUQVJUICAgNTkKKyNkZWZpbmUgU0NUUF9GUl9DV05EX1JFUE9SVF9TVE9Q
ICAgIDYwCisjZGVmaW5lIFNDVFBfQ1dORF9MT0dfRlJPTV9TRU5EICAgICA2MQorI2RlZmluZSBT
Q1RQX0NXTkRfSU5JVElBTElaQVRJT04gICAgNjIKKyNkZWZpbmUgU0NUUF9DV05EX0xPR19GUk9N
X1QzICAgICAgIDYzCisjZGVmaW5lIFNDVFBfQ1dORF9MT0dfRlJPTV9TQUNLICAgICA2NAorI2Rl
ZmluZSBTQ1RQX0NXTkRfTE9HX05PX0NVTUFDSyAgICAgNjUKKyNkZWZpbmUgU0NUUF9DV05EX0xP
R19GUk9NX1JFU0VORCAgIDY2CisjZGVmaW5lIFNDVFBfRlJfTE9HX0NIRUNLX1NUUklLRSAgICA2
NworI2RlZmluZSBTQ1RQX1NFTkRfTk9XX0NPTVBMRVRFUyAgICAgNjgKKyNkZWZpbmUgU0NUUF9D
V05EX0xPR19GSUxMX09VVFFfQ0FMTEVEIDY5CisjZGVmaW5lIFNDVFBfQ1dORF9MT0dfRklMTF9P
VVRRX0ZJTExTICA3MAorI2RlZmluZSBTQ1RQX0xPR19GUkVFX1NFTlQgICAgICAgICAgICAgNzEK
KyNkZWZpbmUgU0NUUF9OQUdMRV9BUFBMSUVEICAgICAgICAgIDcyCisjZGVmaW5lIFNDVFBfTkFH
TEVfU0tJUFBFRCAgICAgICAgICA3MworI2RlZmluZSBTQ1RQX1dBS0VTTkRfRlJPTV9TQUNLICAg
ICAgNzQKKyNkZWZpbmUgU0NUUF9XQUtFU05EX0ZST01fRldEVFNOICAgIDc1CisjZGVmaW5lIFND
VFBfTk9XQUtFX0ZST01fU0FDSyAgICAgICA3NgorI2RlZmluZSBTQ1RQX0NXTkRMT0dfUFJFU0VO
RCAgICAgICAgNzcKKyNkZWZpbmUgU0NUUF9DV05ETE9HX0VORFNFTkQgICAgICAgIDc4CisjZGVm
aW5lIFNDVFBfQVRfRU5EX09GX1NBQ0sgICAgICAgICA3OQorI2RlZmluZSBTQ1RQX1JFQVNPTl9G
T1JfU0MgICAgICAgICAgODAKKyNkZWZpbmUgU0NUUF9CTE9DS19MT0dfSU5UT19CTEtBICAgIDgx
CisjZGVmaW5lIFNDVFBfRU5URVJfVVNFUl9SRUNWICAgICAgICA4MgorI2RlZmluZSBTQ1RQX1VT
RVJfUkVDVl9TQUNLUyAgICAgICAgODMKKyNkZWZpbmUgU0NUUF9TT1JFQ1ZfQkxPQ0tTQSAgICAg
ICAgIDg0CisjZGVmaW5lIFNDVFBfU09SRUNWX0JMT0NLU0IgICAgICAgICA4NQorI2RlZmluZSBT
Q1RQX1NPUkVDVl9ET05FICAgICAgICAgICAgODYKKyNkZWZpbmUgU0NUUF9TQUNLX1JXTkRfVVBE
QVRFICAgICAgIDg3CisjZGVmaW5lIFNDVFBfU09SRUNWX0VOVEVSICAgICAgICAgICA4OAorI2Rl
ZmluZSBTQ1RQX1NPUkVDVl9FTlRFUlBMICAgICAgICAgODkKKyNkZWZpbmUgU0NUUF9NQlVGX0lO
UFVUICAgICAgICAgICAgIDkwCisjZGVmaW5lIFNDVFBfTUJVRl9JQUxMT0MgICAgICAgICAgICA5
MQorI2RlZmluZSBTQ1RQX01CVUZfSUZSRUUgICAgICAgICAgICAgOTIKKyNkZWZpbmUgU0NUUF9N
QlVGX0lDT1BZICAgICAgICAgICAgIDkzCisjZGVmaW5lIFNDVFBfTUJVRl9TUExJVCAgICAgICAg
ICAgICA5NAorI2RlZmluZSBTQ1RQX1NPUkNWX0ZSRUVDVEwgICAgICAgICAgOTUKKyNkZWZpbmUg
U0NUUF9TT1JDVl9ET0VTQ1BZICAgICAgICAgIDk2CisjZGVmaW5lIFNDVFBfU09SQ1ZfRE9FU0xD
SyAgICAgICAgICA5NworI2RlZmluZSBTQ1RQX1NPUkNWX0RPRVNBREogICAgICAgICAgOTgKKyNk
ZWZpbmUgU0NUUF9TT1JDVl9CT1RXSElMRSAgICAgICAgIDk5CisjZGVmaW5lIFNDVFBfU09SQ1Zf
UEFTU0JGICAgICAgICAgIDEwMAorI2RlZmluZSBTQ1RQX1NPUkNWX0FESkQgICAgICAgICAgICAx
MDEKKyNkZWZpbmUgU0NUUF9VTktOT1dOX01BWCAgICAgICAgICAgMTAyCisjZGVmaW5lIFNDVFBf
UkFORFlfU1RVRkYgICAgICAgICAgIDEwMworI2RlZmluZSBTQ1RQX1JBTkRZX1NUVUZGMSAgICAg
ICAgICAxMDQKKyNkZWZpbmUgU0NUUF9TVFJNT1VUX0xPR19BU1NJR04JICAgMTA1CisjZGVmaW5l
IFNDVFBfU1RSTU9VVF9MT0dfU0VORAkgICAxMDYKKyNkZWZpbmUgU0NUUF9GTElHSFRfTE9HX0RP
V05fQ0EgICAgMTA3CisjZGVmaW5lIFNDVFBfRkxJR0hUX0xPR19VUCAgICAgICAgIDEwOAorI2Rl
ZmluZSBTQ1RQX0ZMSUdIVF9MT0dfRE9XTl9HQVAgICAxMDkKKyNkZWZpbmUgU0NUUF9GTElHSFRf
TE9HX0RPV05fUlNORCAgMTEwCisjZGVmaW5lIFNDVFBfRkxJR0hUX0xPR19VUF9SU05EICAgIDEx
MQorI2RlZmluZSBTQ1RQX0ZMSUdIVF9MT0dfRE9XTl9SU05EX1RPICAgIDExMgorI2RlZmluZSBT
Q1RQX0ZMSUdIVF9MT0dfRE9XTl9XUCAgICAxMTMKKyNkZWZpbmUgU0NUUF9GTElHSFRfTE9HX1VQ
X1JFVk9LRSAgMTE0CisjZGVmaW5lIFNDVFBfRkxJR0hUX0xPR19ET1dOX1BEUlAgIDExNQorI2Rl
ZmluZSBTQ1RQX0ZMSUdIVF9MT0dfRE9XTl9QTVRVICAxMTYKKyNkZWZpbmUgU0NUUF9TQUNLX0xP
R19OT1JNQUwJICAgMTE3CisjZGVmaW5lIFNDVFBfU0FDS19MT0dfRVhQUkVTUwkgICAxMTgKKyNk
ZWZpbmUgU0NUUF9NQVBfVFNOX0VOVEVSUyAgICAgICAgMTE5CisjZGVmaW5lIFNDVFBfVEhSRVNI
T0xEX0NMRUFSICAgICAgIDEyMAorI2RlZmluZSBTQ1RQX1RIUkVTSE9MRF9JTkNSICAgICAgICAx
MjEKKyNkZWZpbmUgU0NUUF9GTElHSFRfTE9HX0RXTl9XUF9GV0QgMTIyCisjZGVmaW5lIFNDVFBf
RldEX1RTTl9DSEVDSyAgICAgICAgIDEyMworI2RlZmluZSBTQ1RQX0xPR19NQVhfVFlQRVMgMTI0
CisvKgorICogVG8gdHVybiBvbiB2YXJpb3VzIGxvZ2dpbmcsIHlvdSBtdXN0IGZpcnN0IGVuYWJs
ZSAnb3B0aW9ucyBLVFInIGFuZAorICogeW91IG1pZ2h0IHdhbnQgdG8gYnVtcCB0aGUgZW50aXJl
cyAnb3B0aW9ucyBLVFJfRU5UUklFUz04MDAwMCcuCisgKiBUbyBnZXQgc29tZXRoaW5nIHRvIGxv
ZyB5b3UgZGVmaW5lIG9uZSBvZiB0aGUgbG9nZ2luZyBkZWZpbmVzLgorICogKHNlZSBMSU5UKS4K
KyAqCisgKiBUaGlzIGdldHMgdGhlIGNvbXBpbGUgaW4gcGxhY2UsIGJ1dCB5b3Ugc3RpbGwgbmVl
ZCB0byB0dXJuIHRoZQorICogbG9nZ2luZyBmbGFnIG9uIHRvbyBpbiB0aGUgc3lzY3RsIChzZWUg
aW4gc2N0cC5oKS4KKyAqLworCisjZGVmaW5lIFNDVFBfTE9HX0VWRU5UX1VOS05PV04gMAorI2Rl
ZmluZSBTQ1RQX0xPR19FVkVOVF9DV05EICAxCisjZGVmaW5lIFNDVFBfTE9HX0VWRU5UX0JMT0NL
IDIKKyNkZWZpbmUgU0NUUF9MT0dfRVZFTlRfU1RSTSAgMworI2RlZmluZSBTQ1RQX0xPR19FVkVO
VF9GUiAgICA0CisjZGVmaW5lIFNDVFBfTE9HX0VWRU5UX01BUCAgIDUKKyNkZWZpbmUgU0NUUF9M
T0dfRVZFTlRfTUFYQlVSU1QgNgorI2RlZmluZSBTQ1RQX0xPR19FVkVOVF9SV05EICA3CisjZGVm
aW5lIFNDVFBfTE9HX0VWRU5UX01CQ05UIDgKKyNkZWZpbmUgU0NUUF9MT0dfRVZFTlRfU0FDSyAg
OQorI2RlZmluZSBTQ1RQX0xPR19MT0NLX0VWRU5UIDEwCisjZGVmaW5lIFNDVFBfTE9HX0VWRU5U
X1JUVCAgMTEKKyNkZWZpbmUgU0NUUF9MT0dfRVZFTlRfU0IgICAxMgorI2RlZmluZSBTQ1RQX0xP
R19FVkVOVF9OQUdMRSAxMworI2RlZmluZSBTQ1RQX0xPR19FVkVOVF9XQUtFIDE0CisjZGVmaW5l
IFNDVFBfTE9HX01JU0NfRVZFTlQgMTUKKyNkZWZpbmUgU0NUUF9MT0dfRVZFTlRfQ0xPU0UgMTYK
KyNkZWZpbmUgU0NUUF9MT0dfRVZFTlRfTUJVRiAxNworI2RlZmluZSBTQ1RQX0xPR19DSFVOS19Q
Uk9DIDE4CisjZGVmaW5lIFNDVFBfTE9HX0VSUk9SX1JFVCAgMTkKKworI2RlZmluZSBTQ1RQX0xP
R19NQVhfRVZFTlQgMjAKKworI2RlZmluZSBTQ1RQX0xPQ0tfVU5LTk9XTiAyCisKKy8qIG51bWJl
ciBvZiBhc3NvY2lhdGlvbnMgYnkgZGVmYXVsdCBmb3Igem9uZSBhbGxvY2F0aW9uICovCisjZGVm
aW5lIFNDVFBfTUFYX05VTV9PRl9BU09DCTQwMDAwCisvKiBob3cgbWFueSBhZGRyZXNzZXMgcGVy
IGFzc29jIHJlbW90ZSBhbmQgbG9jYWwgKi8KKyNkZWZpbmUgU0NUUF9TQ0FMRV9GT1JfQUREUgky
CisKKy8qIGRlZmF1bHQgTVVMVElQTEVfQVNDT05GIG1vZGUgZW5hYmxlKDEpL2Rpc2FibGUoMCkg
dmFsdWUgKHN5c2N0bCkgKi8KKyNkZWZpbmUgU0NUUF9ERUZBVUxUX01VTFRJUExFX0FTQ09ORlMJ
MAorCisvKgorICogVGhyZXNob2xkIGZvciByd25kIHVwZGF0ZXMsIHdlIGhhdmUgdG8gcmVhZCAo
c2JfaGl3YXQgPj4KKyAqIFNDVFBfUldORF9ISVdBVF9TSElGVCkgYmVmb3JlIHdlIHdpbGwgbG9v
ayB0byBzZWUgaWYgd2UgbmVlZCB0byBzZW5kIGEKKyAqIHdpbmRvdyB1cGRhdGUgc2Fjay4gV2hl
biB3ZSBsb29rLCB3ZSBjb21wYXJlIHRoZSBsYXN0IHJ3bmQgd2Ugc2VudCB2cyB0aGUKKyAqIGN1
cnJlbnQgcnduZC4gSXQgdG9vIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoaXMgdmFsdWUuIFVzaW5n
IDMgZGl2ZGVzIHRoZQorICogaGl3YXQgYnkgOCwgc28gZm9yIDIwMGsgcnduZCB3ZSBuZWVkIHRv
IHJlYWQgMjRrLiBGb3IgYSA2NGsgcnduZCB3ZSBuZWVkCisgKiB0byByZWFkIDhrLiBUaGlzIHNl
ZW1zIGFib3V0IHJpZ2h0Li4gSSBob3BlIDotRC4uIHdlIGRvIHNldCBhCisgKiBtaW4gb2YgYSBN
VFUgb24gaXQgc28gaWYgdGhlIHJ3bmQgaXMgcmVhbCBzbWFsbCB3ZSB3aWxsIGluc2lzdAorICog
b24gYSBmdWxsIE1UVSBvZiAxNTAwIGJ5dGVzLgorICovCisjZGVmaW5lIFNDVFBfUldORF9ISVdB
VF9TSElGVCAzCisKKy8qIEhvdyBtdWNoIG9mIHRoZSByd25kIG11c3QgdGhlCisgKiBtZXNzYWdl
IGJlIHRha2luZyB1cCB0byBzdGFydCBwYXJ0aWFsIGRlbGl2ZXJ5LgorICogV2UgY2FsY3VsYXRl
IHRoaXMgYnkgc2hpZmluZyB0aGUgaGlfd2F0ZXIgKHJlY3Zfd2luKQorICogbGVmdCB0aGUgZm9s
bG93aW5nIC4uIHNldCB0byAxLCB3aGVuIGEgbWVzc2FnZSBob2xkcworICogMS8yIHRoZSByd25k
LiBJZiB3ZSBzZXQgaXQgdG8gMiB3aGVuIGEgbWVzc2FnZSBob2xkcworICogMS80IHRoZSByd25k
Li4uZXRjLi4KKyAqLworCisjZGVmaW5lIFNDVFBfUEFSVElBTF9ERUxJVkVSWV9TSElGVCAxCisK
Ky8qCisgKiBkZWZhdWx0IEhNQUMgZm9yIGNvb2tpZXMsIGV0Yy4uLiB1c2Ugb25lIG9mIHRoZSBB
VVRIIEhNQUMgaWQncworICogU0NUUF9ITUFDIGlzIHRoZSBITUFDX0lEIHRvIHVzZQorICogU0NU
UF9TSUdOQVRVUkVfU0laRSBpcyB0aGUgZGlnZXN0IGxlbmd0aAorICovCisjZGVmaW5lIFNDVFBf
SE1BQwkJU0NUUF9BVVRIX0hNQUNfSURfU0hBMQorI2RlZmluZSBTQ1RQX1NJR05BVFVSRV9TSVpF
CVNDVFBfQVVUSF9ESUdFU1RfTEVOX1NIQTEKKyNkZWZpbmUgU0NUUF9TSUdOQVRVUkVfQUxPQ19T
SVpFIFNDVFBfU0lHTkFUVVJFX1NJWkUKKworLyoKKyAqIHRoZSBTQ1RQIHByb3RvY29sIHNpZ25h
dHVyZSB0aGlzIGluY2x1ZGVzIHRoZSB2ZXJzaW9uIG51bWJlciBlbmNvZGVkIGluCisgKiB0aGUg
bGFzdCA0IGJpdHMgb2YgdGhlIHNpZ25hdHVyZS4KKyAqLworI2RlZmluZSBQUk9UT19TSUdOQVRV
UkVfQQkweDMwMDAwMDAwCisjZGVmaW5lIFNDVFBfVkVSU0lPTl9OVU1CRVIJMHgzCisKKyNkZWZp
bmUgTUFYX1RTTgkweGZmZmZmZmZmCisKKy8qIGhvdyBtYW55IGV4ZWN1dGlvbnMgZXZlcnkgTiB0
aWNrJ3MgKi8KKyNkZWZpbmUgU0NUUF9JVEVSQVRPUl9NQVhfQVRfT05DRSAyMAorCisvKiBudW1i
ZXIgb2YgY2xvY2sgdGlja3MgYmV0d2VlbiBpdGVyYXRvciBleGVjdXRpb25zICovCisjZGVmaW5l
IFNDVFBfSVRFUkFUT1JfVElDS1MgMQorCisvKgorICogb3B0aW9uOiBJZiB5b3UgY29tbWVudCBv
dXQgdGhlIGZvbGxvd2luZyB5b3Ugd2lsbCByZWNlaXZlIHRoZSBvbGQgYmVoYXZpb3IKKyAqIG9m
IG9iZXlpbmcgY3duZCBmb3IgdGhlIGZhc3QgcmV0cmFuc21pdCBhbGdvcml0aG0uIFdpdGggdGhp
cyBkZWZpbmVkIGEgRlIKKyAqIGhhcHBlbnMgcmlnaHQgYXdheSB3aXRoLW91dCB3YWl0aW5nIGZv
ciB0aGUgZmxpZ2h0c2l6ZSB0byBkcm9wIGJlbG93IHRoZQorICogY3duZCB2YWx1ZSAod2hpY2gg
aXMgcmVkdWNlZCBieSB0aGUgRlIgdG8gMS8yIHRoZSBpbmZsaWdodCBwYWNrZXRzKS4KKyAqLwor
I2RlZmluZSBTQ1RQX0lHTk9SRV9DV05EX09OX0ZSIDEKKworLyoKKyAqIEFkZHMgaW1wbGVtZW50
b3JzIGd1aWRlIGJlaGF2aW9yIHRvIG9ubHkgdXNlIG5ld2VzdCBoaWdoZXN0IHVwZGF0ZSBpbiBT
QUNLCisgKiBnYXAgYWNrJ3MgdG8gZmlndXJlIG91dCBpZiB5b3UgbmVlZCB0byBzdHJva2UgYSBj
aHVuayBmb3IgRlIuCisgKi8KKyNkZWZpbmUgU0NUUF9OT19GUl9VTkxFU1NfU0VHTUVOVF9TTUFM
TEVSIDEKKworLyogZGVmYXVsdCBtYXggSSBjYW4gYnVyc3Qgb3V0IGFmdGVyIGEgZmFzdCByZXRy
YW5zbWl0LCAwIGRpc2FibGVzIGl0ICovCisjZGVmaW5lIFNDVFBfREVGX01BWF9CVVJTVCA0Cisj
ZGVmaW5lIFNDVFBfREVGX0hCTUFYX0JVUlNUIDQKKyNkZWZpbmUgU0NUUF9ERUZfRlJNQVhfQlVS
U1QgNAorCisvKiBSVE8gY2FsY3VsYXRpb24gZmxhZyB0byBzYXkgaWYgaXQKKyAqIGlzIHNhZmUg
dG8gZGV0ZXJtaW5lIGxvY2FsIGxhbiBvciBub3QuCisgKi8KKyNkZWZpbmUgU0NUUF9SVFRfRlJP
TV9OT05fREFUQSAwCisjZGVmaW5lIFNDVFBfUlRUX0ZST01fREFUQSAgICAgMQorCisjZGVmaW5l
IFBSX1NDVFBfVU5PUkRFUkVEX0ZMQUcgMHgwMDAxCisKKy8qIElQIGhkciAoMjAvNDApICsgMTIr
MisyIChlbmV0KSArIHNjdHAgY29tbW9uIDEyICovCisjZGVmaW5lIFNDVFBfRklSU1RfTUJVRl9S
RVNWIDY4CisvKiBQYWNrZXQgdHJhbnNtaXQgc3RhdGVzIGluIHRoZSBzZW50IGZpZWxkICovCisj
ZGVmaW5lIFNDVFBfREFUQUdSQU1fVU5TRU5UCQkwCisjZGVmaW5lIFNDVFBfREFUQUdSQU1fU0VO
VAkJMQorI2RlZmluZSBTQ1RQX0RBVEFHUkFNX1JFU0VORDEJCTIJLyogbm90IHVzZWQgKGluIGNv
ZGUsIGJ1dCBtYXkKKwkJCQkJCSAqIGhpdCB0aGlzIHZhbHVlKSAqLworI2RlZmluZSBTQ1RQX0RB
VEFHUkFNX1JFU0VORDIJCTMJLyogbm90IHVzZWQgKGluIGNvZGUsIGJ1dCBtYXkKKwkJCQkJCSAq
IGhpdCB0aGlzIHZhbHVlKSAqLworI2RlZmluZSBTQ1RQX0RBVEFHUkFNX1JFU0VORAkJNAorI2Rl
ZmluZSBTQ1RQX0RBVEFHUkFNX0FDS0VECQkxMDAxMAorI2RlZmluZSBTQ1RQX0RBVEFHUkFNX01B
UktFRAkJMjAwMTAKKyNkZWZpbmUgU0NUUF9GT1JXQVJEX1RTTl9TS0lQCQkzMDAxMAorI2RlZmlu
ZSBTQ1RQX0RBVEFHUkFNX05SX0FDS0VECQk0MDAxMAorCisvKiBjaHVuayBvdXRwdXQgc2VuZCBm
cm9tIGxvY2F0aW9ucyAqLworI2RlZmluZSBTQ1RQX09VVFBVVF9GUk9NX1VTUl9TRU5EICAgICAg
IDAKKyNkZWZpbmUgU0NUUF9PVVRQVVRfRlJPTV9UMyAgICAgICAJMQorI2RlZmluZSBTQ1RQX09V
VFBVVF9GUk9NX0lOUFVUX0VSUk9SICAgIDIKKyNkZWZpbmUgU0NUUF9PVVRQVVRfRlJPTV9DT05U
Uk9MX1BST0MgICAzCisjZGVmaW5lIFNDVFBfT1VUUFVUX0ZST01fU0FDS19UTVIgICAgICAgNAor
I2RlZmluZSBTQ1RQX09VVFBVVF9GUk9NX1NIVVRfVE1SICAgICAgIDUKKyNkZWZpbmUgU0NUUF9P
VVRQVVRfRlJPTV9IQl9UTVIgICAgICAgICA2CisjZGVmaW5lIFNDVFBfT1VUUFVUX0ZST01fU0hV
VF9BQ0tfVE1SICAgNworI2RlZmluZSBTQ1RQX09VVFBVVF9GUk9NX0FTQ09ORl9UTVIgICAgIDgK
KyNkZWZpbmUgU0NUUF9PVVRQVVRfRlJPTV9TVFJSU1RfVE1SICAgICA5CisjZGVmaW5lIFNDVFBf
T1VUUFVUX0ZST01fQVVUT0NMT1NFX1RNUiAgMTAKKyNkZWZpbmUgU0NUUF9PVVRQVVRfRlJPTV9F
QVJMWV9GUl9UTVIgICAxMQorI2RlZmluZSBTQ1RQX09VVFBVVF9GUk9NX1NUUlJTVF9SRVEgICAg
IDEyCisjZGVmaW5lIFNDVFBfT1VUUFVUX0ZST01fVVNSX1JDVkQgICAgICAgMTMKKyNkZWZpbmUg
U0NUUF9PVVRQVVRfRlJPTV9DT09LSUVfQUNLICAgICAxNAorI2RlZmluZSBTQ1RQX09VVFBVVF9G
Uk9NX0RSQUlOICAgICAgICAgIDE1CisjZGVmaW5lIFNDVFBfT1VUUFVUX0ZST01fQ0xPU0lORyAg
ICAgICAgMTYKKyNkZWZpbmUgU0NUUF9PVVRQVVRfRlJPTV9TT0NLT1BUICAgICAgICAxNworCisv
KiBTQ1RQIGNodW5rIHR5cGVzIGFyZSBtb3ZlZCBzY3RwLmggZm9yIGFwcGxpY2F0aW9uIChOQVQs
IEZXKSB1c2UgKi8KKworLyogYWxpZ24gdG8gMzItYml0IHNpemVzICovCisjZGVmaW5lIFNDVFBf
U0laRTMyKHgpCSgoKCh4KSArIDMpID4+IDIpIDw8IDIpCisKKyNkZWZpbmUgSVNfU0NUUF9DT05U
Uk9MKGEpICgoKGEpLT5jaHVua190eXBlICE9IFNDVFBfREFUQSkgJiYgKChhKS0+Y2h1bmtfdHlw
ZSAhPSBTQ1RQX0lEQVRBKSkKKyNkZWZpbmUgSVNfU0NUUF9EQVRBKGEpICgoKGEpLT5jaHVua190
eXBlID09IFNDVFBfREFUQSkgfHwgKChhKS0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0lEQVRBKSkKKwor
LyogU0NUUCBwYXJhbWV0ZXIgdHlwZXMgKi8KKy8qKioqKioqKioqKioqMHgwMDAwIHNlcmllcyoq
KioqKioqKioqKiovCisjZGVmaW5lIFNDVFBfSEVBUlRCRUFUX0lORk8JCTB4MDAwMQorI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNkZWZpbmUgU0NUUF9DT05OX0FERFJFU1MJCTB4MDAwNAor
I2VuZGlmCisjZGVmaW5lIFNDVFBfSVBWNF9BRERSRVNTCQkweDAwMDUKKyNkZWZpbmUgU0NUUF9J
UFY2X0FERFJFU1MJCTB4MDAwNgorI2RlZmluZSBTQ1RQX1NUQVRFX0NPT0tJRQkJMHgwMDA3Cisj
ZGVmaW5lIFNDVFBfVU5SRUNPR19QQVJBTQkJMHgwMDA4CisjZGVmaW5lIFNDVFBfQ09PS0lFX1BS
RVNFUlZFCQkweDAwMDkKKyNkZWZpbmUgU0NUUF9IT1NUTkFNRV9BRERSRVNTCQkweDAwMGIKKyNk
ZWZpbmUgU0NUUF9TVVBQT1JURURfQUREUlRZUEUJCTB4MDAwYworCisvKiBSRkMgNjUyNSAqLwor
I2RlZmluZSBTQ1RQX1NUUl9SRVNFVF9PVVRfUkVRVUVTVAkweDAwMGQKKyNkZWZpbmUgU0NUUF9T
VFJfUkVTRVRfSU5fUkVRVUVTVAkweDAwMGUKKyNkZWZpbmUgU0NUUF9TVFJfUkVTRVRfVFNOX1JF
UVVFU1QJMHgwMDBmCisjZGVmaW5lIFNDVFBfU1RSX1JFU0VUX1JFU1BPTlNFCQkweDAwMTAKKyNk
ZWZpbmUgU0NUUF9TVFJfUkVTRVRfQUREX09VVF9TVFJFQU1TCTB4MDAxMQorI2RlZmluZSBTQ1RQ
X1NUUl9SRVNFVF9BRERfSU5fU1RSRUFNUwkweDAwMTIKKworI2RlZmluZSBTQ1RQX01BWF9SRVNF
VF9QQVJBTVMgMgorI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9UU05fREVMVEEJMHgxMDAwCisK
Ky8qKioqKioqKioqKioqMHg0MDAwIHNlcmllcyoqKioqKioqKioqKiovCisKKy8qKioqKioqKioq
KioqMHg4MDAwIHNlcmllcyoqKioqKioqKioqKiovCisjZGVmaW5lIFNDVFBfRUNOX0NBUEFCTEUJ
CTB4ODAwMAorCisvKiBSRkMgNDg5NSAqLworI2RlZmluZSBTQ1RQX1JBTkRPTQkJCTB4ODAwMgor
I2RlZmluZSBTQ1RQX0NIVU5LX0xJU1QJCQkweDgwMDMKKyNkZWZpbmUgU0NUUF9ITUFDX0xJU1QJ
CQkweDgwMDQKKy8qIFJGQyA0ODIwICovCisjZGVmaW5lIFNDVFBfUEFECQkJMHg4MDA1CisvKiBS
RkMgNTA2MSAqLworI2RlZmluZSBTQ1RQX1NVUFBPUlRFRF9DSFVOS19FWFQJMHg4MDA4CisKKy8q
KioqKioqKioqKioqMHhDMDAwIHNlcmllcyoqKioqKioqKioqKiovCisjZGVmaW5lIFNDVFBfUFJT
Q1RQX1NVUFBPUlRFRAkJMHhjMDAwCisvKiBSRkMgNTA2MSAqLworI2RlZmluZSBTQ1RQX0FERF9J
UF9BRERSRVNTCQkweGMwMDEKKyNkZWZpbmUgU0NUUF9ERUxfSVBfQUREUkVTUwkJMHhjMDAyCisj
ZGVmaW5lIFNDVFBfRVJST1JfQ0FVU0VfSU5ECQkweGMwMDMKKyNkZWZpbmUgU0NUUF9TRVRfUFJJ
TV9BRERSCQkweGMwMDQKKyNkZWZpbmUgU0NUUF9TVUNDRVNTX1JFUE9SVAkJMHhjMDA1CisjZGVm
aW5lIFNDVFBfVUxQX0FEQVBUQVRJT04JCTB4YzAwNgorLyogYmVoYXZlLW5hdC1kcmFmdCAqLwor
I2RlZmluZSBTQ1RQX0hBU19OQVRfU1VQUE9SVAkJMHhjMDA3CisjZGVmaW5lIFNDVFBfTkFUX1ZU
QUdTCQkJMHhjMDA4CisKKy8qIGJpdHMgZm9yIFRPUyBmaWVsZCAqLworI2RlZmluZSBTQ1RQX0VD
VDBfQklUCQkweDAyCisjZGVmaW5lIFNDVFBfRUNUMV9CSVQJCTB4MDEKKyNkZWZpbmUgU0NUUF9D
RV9CSVRTCQkweDAzCisKKy8qIGJlbG93IHR1cm5zIG9mZiBhYm92ZSAqLworI2RlZmluZSBTQ1RQ
X0ZMRVhJQkxFX0FERFJFU1MJMHgyMAorI2RlZmluZSBTQ1RQX05PX0hFQVJUQkVBVAkweDQwCisK
Ky8qIG1hc2sgdG8gZ2V0IHN0aWNreSAqLworI2RlZmluZSBTQ1RQX1NUSUNLWV9PUFRJT05TX01B
U0sJMHgwYworCisvKgorICogU0NUUCBzdGF0ZXMgZm9yIGludGVybmFsIHN0YXRlIG1hY2hpbmUK
KyAqLworI2RlZmluZSBTQ1RQX1NUQVRFX0VNUFRZCQkweDAwMDAKKyNkZWZpbmUgU0NUUF9TVEFU
RV9JTlVTRQkJMHgwMDAxCisjZGVmaW5lIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQJCTB4MDAwMgor
I2RlZmluZSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQJMHgwMDA0CisjZGVmaW5lIFNDVFBfU1RB
VEVfT1BFTgkJCTB4MDAwOAorI2RlZmluZSBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQJMHgwMDEw
CisjZGVmaW5lIFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQJMHgwMDIwCisjZGVmaW5lIFND
VFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQJMHgwMDQwCisjZGVmaW5lIFNDVFBfU1RBVEVfU0hV
VERPV05fUEVORElORwkweDAwODAKKyNkZWZpbmUgU0NUUF9TVEFURV9DTE9TRURfU09DS0VUCTB4
MDEwMAorI2RlZmluZSBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEICAgIDB4MDIwMAorI2Rl
ZmluZSBTQ1RQX1NUQVRFX1BBUlRJQUxfTVNHX0xFRlQgICAgIDB4MDQwMAorI2RlZmluZSBTQ1RQ
X1NUQVRFX1dBU19BQk9SVEVEICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBTQ1RQX1NUQVRFX0lO
X0FDQ0VQVF9RVUVVRSAgICAgIDB4MTAwMAorI2RlZmluZSBTQ1RQX1NUQVRFX01BU0sJCQkweDAw
N2YKKworI2RlZmluZSBTQ1RQX0dFVF9TVEFURShfc3RjYikgXAorCSgoX3N0Y2IpLT5hc29jLnN0
YXRlICYgU0NUUF9TVEFURV9NQVNLKQorI2RlZmluZSBTQ1RQX1NFVF9TVEFURShfc3RjYiwgX3N0
YXRlKSBcCisJc2N0cF9zZXRfc3RhdGUoX3N0Y2IsIF9zdGF0ZSkKKyNkZWZpbmUgU0NUUF9DTEVB
Ul9TVUJTVEFURShfc3RjYiwgX3N1YnN0YXRlKSBcCisJKF9zdGNiKS0+YXNvYy5zdGF0ZSAmPSB+
KF9zdWJzdGF0ZSkKKyNkZWZpbmUgU0NUUF9BRERfU1VCU1RBVEUoX3N0Y2IsIF9zdWJzdGF0ZSkg
XAorCXNjdHBfYWRkX3N1YnN0YXRlKF9zdGNiLCBfc3Vic3RhdGUpCisKKy8qIFNDVFAgcmVhY2hh
YmlsaXR5IHN0YXRlIGZvciBlYWNoIGFkZHJlc3MgKi8KKyNkZWZpbmUgU0NUUF9BRERSX1JFQUNI
QUJMRQkJMHgwMDEKKyNkZWZpbmUgU0NUUF9BRERSX05PX1BNVFVEICAgICAgICAgICAgICAweDAw
MgorI2RlZmluZSBTQ1RQX0FERFJfTk9IQgkJCTB4MDA0CisjZGVmaW5lIFNDVFBfQUREUl9CRUlO
R19ERUxFVEVECQkweDAwOAorI2RlZmluZSBTQ1RQX0FERFJfTk9UX0lOX0FTU09DCQkweDAxMAor
I2RlZmluZSBTQ1RQX0FERFJfT1VUX09GX1NDT1BFCQkweDA4MAorI2RlZmluZSBTQ1RQX0FERFJf
VU5DT05GSVJNRUQJCTB4MjAwCisjZGVmaW5lIFNDVFBfQUREUl9SRVFfUFJJTUFSWSAgICAgICAg
ICAgMHg0MDAKKy8qIEpSUyA1LzEzLzA3IC0gQWRkZWQgcG90ZW50aWFsbHkgZmFpbGVkIHN0YXRl
IGZvciBDTVQgUEYgKi8KKyNkZWZpbmUgU0NUUF9BRERSX1BGICAgICAgICAgICAgICAgICAgICAw
eDgwMAorCisvKiBib3VuZCBhZGRyZXNzIHR5cGVzIChlLmcuIHZhbGlkIGFkZHJlc3MgdHlwZXMg
dG8gYWxsb3cpICovCisjZGVmaW5lIFNDVFBfQk9VTkRfVjYJCTB4MDEKKyNkZWZpbmUgU0NUUF9C
T1VORF9WNAkJMHgwMgorCisvKgorICogd2hhdCBpcyB0aGUgZGVmYXVsdCBudW1iZXIgb2YgbWJ1
ZnMgaW4gYSBjaGFpbiBJIGFsbG93IGJlZm9yZSBzd2l0Y2hpbmcgdG8KKyAqIGEgY2x1c3Rlcgor
ICovCisjZGVmaW5lIFNDVFBfREVGQVVMVF9NQlVGU19JTl9DSEFJTiA1CisKKy8qIEhvdyBsb25n
IGEgY29va2llIGxpdmVzIGluIG1pbGxpLXNlY29uZHMgKi8KKyNkZWZpbmUgU0NUUF9ERUZBVUxU
X0NPT0tJRV9MSUZFCTYwMDAwCisKKy8qIE1heGltdW0gdGhlIG1hcHBpbmcgYXJyYXkgd2lsbCAg
Z3JvdyB0byAoVFNOIG1hcHBpbmcgYXJyYXkpICovCisjZGVmaW5lIFNDVFBfTUFQUElOR19BUlJB
WQk1MTIKKworLyogc2l6ZSBvZiB0aGUgaW5pdGlhbCBtYWxsb2Mgb24gdGhlIG1hcHBpbmcgYXJy
YXkgKi8KKyNkZWZpbmUgU0NUUF9JTklUSUFMX01BUFBJTkdfQVJSQVkgIDE2CisvKiBob3cgbXVj
aCB3ZSBncm93IHRoZSBtYXBwaW5nIGFycmF5IGVhY2ggY2FsbCAqLworI2RlZmluZSBTQ1RQX01B
UFBJTkdfQVJSQVlfSU5DUiAgICAgMzIKKworLyoKKyAqIEhlcmUgd2UgZGVmaW5lIHRoZSB0aW1l
ciB0eXBlcyB1c2VkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiBhcyBhcmd1bWVudHMgaW4KKyAqIHRo
ZSBzZXQvZ2V0IHRpbWVyIHR5cGUgY2FsbHMuCisgKi8KKyNkZWZpbmUgU0NUUF9USU1FUl9JTklU
IAkwCisjZGVmaW5lIFNDVFBfVElNRVJfUkVDViAJMQorI2RlZmluZSBTQ1RQX1RJTUVSX1NFTkQg
CTIKKyNkZWZpbmUgU0NUUF9USU1FUl9IRUFSVEJFQVQJMworI2RlZmluZSBTQ1RQX1RJTUVSX1BN
VFUJCTQKKyNkZWZpbmUgU0NUUF9USU1FUl9NQVhTSFVURE9XTgk1CisjZGVmaW5lIFNDVFBfVElN
RVJfU0lHTkFUVVJFCTYKKy8qCisgKiBudW1iZXIgb2YgdGltZXIgdHlwZXMgaW4gdGhlIGJhc2Ug
U0NUUCBzdHJ1Y3R1cmUgdXNlZCBpbiB0aGUgc2V0L2dldCBhbmQKKyAqIGhhcyB0aGUgYmFzZSBk
ZWZhdWx0LgorICovCisjZGVmaW5lIFNDVFBfTlVNX1RNUlMJNworCisvKiB0aW1lciB0eXBlcyAq
LworI2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVfTk9ORQkJMAorI2RlZmluZSBTQ1RQX1RJTUVSX1RZ
UEVfU0VORAkJMQorI2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVfSU5JVAkJMgorI2RlZmluZSBTQ1RQ
X1RJTUVSX1RZUEVfUkVDVgkJMworI2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV04JNAor
I2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFUCTUKKyNkZWZpbmUgU0NUUF9USU1FUl9U
WVBFX0NPT0tJRQkJNgorI2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVfTkVXQ09PS0lFCTcKKyNkZWZp
bmUgU0NUUF9USU1FUl9UWVBFX1BBVEhNVFVSQUlTRQk4CisjZGVmaW5lIFNDVFBfVElNRVJfVFlQ
RV9TSFVURE9XTkFDSwk5CisjZGVmaW5lIFNDVFBfVElNRVJfVFlQRV9BU0NPTkYJCTEwCisjZGVm
aW5lIFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdVQVJECTExCisjZGVmaW5lIFNDVFBfVElNRVJf
VFlQRV9BVVRPQ0xPU0UJMTIKKyNkZWZpbmUgU0NUUF9USU1FUl9UWVBFX1NUUlJFU0VUCTEzCisj
ZGVmaW5lIFNDVFBfVElNRVJfVFlQRV9JTlBLSUxMCQkxNAorI2RlZmluZSBTQ1RQX1RJTUVSX1RZ
UEVfQVNPQ0tJTEwJMTUKKyNkZWZpbmUgU0NUUF9USU1FUl9UWVBFX0FERFJfV1EJCTE2CisjZGVm
aW5lIFNDVFBfVElNRVJfVFlQRV9QUklNX0RFTEVURUQJMTcKKy8qIGFkZCBuZXcgdGltZXJzIGhl
cmUgLSBhbmQgaW5jcmVtZW50IExBU1QgKi8KKyNkZWZpbmUgU0NUUF9USU1FUl9UWVBFX0xBU1QJ
CTE4CisKKyNkZWZpbmUgU0NUUF9JU19USU1FUl9UWVBFX1ZBTElEKHQpCSgoKHQpID4gU0NUUF9U
SU1FUl9UWVBFX05PTkUpICYmIFwKKwkJCQkJICgodCkgPCBTQ1RQX1RJTUVSX1RZUEVfTEFTVCkp
CisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKy8q
IE51bWJlciBvZiB0aWNrcyB0byBydW4gdGhlIG1haW4gdGltZXIgYXQgaW4gbXNlYyAqLworI2Rl
ZmluZSBTQ1RQX01BSU5fVElNRVJfREVGQVVMVAkJMTAKKworI2VuZGlmCisvKiBtYXggbnVtYmVy
IG9mIFRTTidzIGR1cCdkIHRoYXQgSSB3aWxsIGhvbGQgKi8KKyNkZWZpbmUgU0NUUF9NQVhfRFVQ
X1RTTlMJMjAKKworLyoKKyAqIEhlcmUgd2UgZGVmaW5lIHRoZSB0eXBlcyB1c2VkIHdoZW4gc2V0
dGluZyB0aGUgcmV0cnkgYW1vdW50cy4KKyAqLworLyogSG93IG1hbnkgZHJvcCByZS1hdHRlbXB0
cyB3ZSBtYWtlIG9uICBJTklUL0NPT0tJRS1FQ0hPICovCisjZGVmaW5lIFNDVFBfUkVUUllfRFJP
UFBFRF9USFJFU0ggNAorCisvKgorICogTWF4bWl1bSBudW1iZXIgb2YgY2h1bmtzIGEgc2luZ2xl
IGFzc29jaWF0aW9uIGNhbiBoYXZlIG9uIGl0LiBOb3RlIHRoYXQKKyAqIHRoaXMgaXMgYSBzcXVp
c2h5IG51bWJlciBzaW5jZSB0aGUgY291bnQgY2FuIHJ1biBvdmVyIHRoaXMgaWYgdGhlIHVzZXIK
KyAqIHNlbmRzIGEgbGFyZ2UgbWVzc2FnZSBkb3duIC4uIHRoZSBmcmFnbWVudGVkIGNodW5rcyBk
b24ndCBjb3VudCB1bnRpbAorICogQUZURVIgdGhlIG1lc3NhZ2UgaXMgb24gcXVldWUuLiBpdCB3
b3VsZCBiZSB0aGUgbmV4dCBzZW5kIHRoYXQgYmxvY2tzCisgKiB0aGluZ3MuIFRoaXMgbnVtYmVy
IHdpbGwgZ2V0IHR1bmVkIHVwIGF0IGJvb3QgaW4gdGhlIHNjdHBfaW5pdCBhbmQgdXNlIHRoZQor
ICogbnVtYmVyIG9mIGNsdXN0ZXJzIGFzIGEgYmFzZS4gVGhpcyB3YXkgaGlnaCBiYW5kd2lkdGgg
ZW52aXJvbm1lbnRzIHdpbGwKKyAqIG5vdCBnZXQgaW1wYWN0ZWQgYnkgdGhlIGxvd2VyIGJhbmR3
aWR0aCBzZW5kaW5nIGEgYnVuY2ggb2YgMSBieXRlIGNodW5rcworICovCisjZGVmaW5lIFNDVFBf
QVNPQ19NQVhfQ0hVTktTX09OX1FVRVVFIDUxMgorCisvKgorICogQmFzaWNhbGx5IHRoZSBtaW5p
bXVtIGFtb3VudCBvZiB0aW1lIGJlZm9yZSBJIGRvIGEgZWFybHkgRlIuIE1ha2luZyB0aGlzCisg
KiB2YWx1ZSB0byBsb3cgd2lsbCBjYXVzZSBkdXBsaWNhdGUgcmV0cmFuc21pc3Npb25zLgorICov
CisjZGVmaW5lIFNDVFBfTUlORlJfTVNFQ19USU1FUiAyNTAKKy8qIFRoZSBmbG9vciB0aGlzIHZh
bHVlIGlzIGFsbG93ZWQgdG8gZmFsbCB0byB3aGVuIHN0YXJ0aW5nIGEgdGltZXIuICovCisjZGVm
aW5lIFNDVFBfTUlORlJfTVNFQ19GTE9PUiAyMAorCisvKiBpbml0IHRpbWVyIGRlZiA9IDEgc2Vj
ICovCisjZGVmaW5lIFNDVFBfSU5JVF9TRUMJMQorCisvKiBzZW5kIHRpbWVyIGRlZiA9IDEgc2Vj
b25kcyAqLworI2RlZmluZSBTQ1RQX1NFTkRfU0VDCTEKKworLyogcmVjdiB0aW1lciBkZWYgPSAy
MDBtcyAgKi8KKyNkZWZpbmUgU0NUUF9SRUNWX01TRUMJMjAwCisKKy8qIDMwIHNlY29uZHMgKyBS
VE8gKGluIG1zKSAqLworI2RlZmluZSBTQ1RQX0hCX0RFRkFVTFRfTVNFQwkzMDAwMAorCisvKgor
ICogVGhpcyBpcyBob3cgbG9uZyBhIHNlY3JldCBsaXZlcywgTk9UIGhvdyBsb25nIGEgY29va2ll
IGxpdmVzIGhvdyBtYW55CisgKiB0aWNrcyB0aGUgY3VycmVudCBzZWNyZXQgd2lsbCBsaXZlLgor
ICovCisjZGVmaW5lIFNDVFBfREVGQVVMVF9TRUNSRVRfTElGRV9TRUMgMzYwMAorCisjZGVmaW5l
IFNDVFBfUlRPX1VQUEVSX0JPVU5ECSg2MDAwMCkJLyogNjAgc2VjIGluIG1zICovCisjZGVmaW5l
IFNDVFBfUlRPX0xPV0VSX0JPVU5ECSgxMDAwKQkvKiAxIHNlYyBpcyBtcyAqLworI2RlZmluZSBT
Q1RQX1JUT19JTklUSUFMCSgxMDAwKQkvKiAxIHNlYyBpbiBtcyAqLworCisjZGVmaW5lIFNDVFBf
SU5QX0tJTExfVElNRU9VVCAyMAkvKiBudW1iZXIgb2YgbXMgdG8gcmV0cnkga2lsbCBvZiBpbnBj
YiAqLworI2RlZmluZSBTQ1RQX0FTT0NfS0lMTF9USU1FT1VUIDEwCS8qIG51bWJlciBvZiBtcyB0
byByZXRyeSBraWxsIG9mIGlucGNiICovCisKKyNkZWZpbmUgU0NUUF9ERUZfTUFYX0lOSVQJCTgK
KyNkZWZpbmUgU0NUUF9ERUZfTUFYX1NFTkQJCTEwCisjZGVmaW5lIFNDVFBfREVGX01BWF9QQVRI
X1JUWAkJNQorI2RlZmluZSBTQ1RQX0RFRl9QQVRIX1BGX1RIUkVTSE9MRAlTQ1RQX0RFRl9NQVhf
UEFUSF9SVFgKKworI2RlZmluZSBTQ1RQX0RFRl9QTVRVX1JBSVNFX1NFQwk2MDAJLyogMTAgbWlu
IGJldHdlZW4gcmFpc2UgYXR0ZW1wdHMgKi8KKworLyogSG93IG1hbnkgc3RyZWFtcyBJIHJlcXVl
c3QgaW5pdGlhbGx5IGJ5IGRlZmF1bHQgKi8KKyNkZWZpbmUgU0NUUF9PU1RSRUFNX0lOSVRJQUwg
MTAKKyNkZWZpbmUgU0NUUF9JU1RSRUFNX0lOSVRJQUwgMjA0OAorCisvKgorICogSG93IG1hbnkg
c21hbGxlc3RfbXR1J3MgbmVlZCB0byBpbmNyZWFzZSBiZWZvcmUgYSB3aW5kb3cgdXBkYXRlIHNh
Y2sgaXMKKyAqIHNlbnQgKHNob3VsZCBiZSBhIHBvd2VyIG9mIDIpLgorICovCisvKiBTZW5kIHdp
bmRvdyB1cGRhdGUgKGluY3IgKiB0aGlzID4gaGl3YXQpLiBTaG91bGQgYmUgYSBwb3dlciBvZiAy
ICovCisjZGVmaW5lIFNDVFBfTUlOSU1BTF9SV05ECQkoNDA5NikJLyogbWluaW1hbCByd25kICov
CisKKyNkZWZpbmUgU0NUUF9BRERSTUFYCQkxNgorCisvKiBTQ1RQIERFQlVHIFN3aXRjaCBwYXJh
bWV0ZXJzICovCisjZGVmaW5lIFNDVFBfREVCVUdfVElNRVIxCTB4MDAwMDAwMDEKKyNkZWZpbmUg
U0NUUF9ERUJVR19USU1FUjIJMHgwMDAwMDAwMgkvKiB1bnVzZWQgKi8KKyNkZWZpbmUgU0NUUF9E
RUJVR19USU1FUjMJMHgwMDAwMDAwNAkvKiB1bnVzZWQgKi8KKyNkZWZpbmUgU0NUUF9ERUJVR19U
SU1FUjQJMHgwMDAwMDAwOAorI2RlZmluZSBTQ1RQX0RFQlVHX09VVFBVVDEJMHgwMDAwMDAxMAor
I2RlZmluZSBTQ1RQX0RFQlVHX09VVFBVVDIJMHgwMDAwMDAyMAorI2RlZmluZSBTQ1RQX0RFQlVH
X09VVFBVVDMJMHgwMDAwMDA0MAorI2RlZmluZSBTQ1RQX0RFQlVHX09VVFBVVDQJMHgwMDAwMDA4
MAorI2RlZmluZSBTQ1RQX0RFQlVHX1VUSUwxCTB4MDAwMDAxMDAKKyNkZWZpbmUgU0NUUF9ERUJV
R19VVElMMgkweDAwMDAwMjAwCS8qIHVudXNlZCAqLworI2RlZmluZSBTQ1RQX0RFQlVHX0FVVEgx
CTB4MDAwMDA0MDAKKyNkZWZpbmUgU0NUUF9ERUJVR19BVVRIMgkweDAwMDAwODAwCS8qIHVudXNl
ZCAqLworI2RlZmluZSBTQ1RQX0RFQlVHX0lOUFVUMQkweDAwMDAxMDAwCisjZGVmaW5lIFNDVFBf
REVCVUdfSU5QVVQyCTB4MDAwMDIwMDAKKyNkZWZpbmUgU0NUUF9ERUJVR19JTlBVVDMJMHgwMDAw
NDAwMAorI2RlZmluZSBTQ1RQX0RFQlVHX0lOUFVUNAkweDAwMDA4MDAwCS8qIHVudXNlZCAqLwor
I2RlZmluZSBTQ1RQX0RFQlVHX0FTQ09ORjEJMHgwMDAxMDAwMAorI2RlZmluZSBTQ1RQX0RFQlVH
X0FTQ09ORjIJMHgwMDAyMDAwMAorI2RlZmluZSBTQ1RQX0RFQlVHX09VVFBVVDUJMHgwMDA0MDAw
MAkvKiB1bnVzZWQgKi8KKyNkZWZpbmUgU0NUUF9ERUJVR19YWFgJCTB4MDAwODAwMDAJLyogdW51
c2VkICovCisjZGVmaW5lIFNDVFBfREVCVUdfUENCMQkJMHgwMDEwMDAwMAorI2RlZmluZSBTQ1RQ
X0RFQlVHX1BDQjIJCTB4MDAyMDAwMDAJLyogdW51c2VkICovCisjZGVmaW5lIFNDVFBfREVCVUdf
UENCMwkJMHgwMDQwMDAwMAorI2RlZmluZSBTQ1RQX0RFQlVHX1BDQjQJCTB4MDA4MDAwMDAKKyNk
ZWZpbmUgU0NUUF9ERUJVR19JTkRBVEExCTB4MDEwMDAwMDAKKyNkZWZpbmUgU0NUUF9ERUJVR19J
TkRBVEEyCTB4MDIwMDAwMDAJLyogdW51c2VkICovCisjZGVmaW5lIFNDVFBfREVCVUdfSU5EQVRB
MwkweDA0MDAwMDAwCS8qIHVudXNlZCAqLworI2RlZmluZSBTQ1RQX0RFQlVHX0NSQ09GRkxPQUQJ
MHgwODAwMDAwMAkvKiB1bnVzZWQgKi8KKyNkZWZpbmUgU0NUUF9ERUJVR19VU1JSRVExCTB4MTAw
MDAwMDAJLyogdW51c2VkICovCisjZGVmaW5lIFNDVFBfREVCVUdfVVNSUkVRMgkweDIwMDAwMDAw
CS8qIHVudXNlZCAqLworI2RlZmluZSBTQ1RQX0RFQlVHX1BFRUwxCTB4NDAwMDAwMDAKKyNpZiBk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjZGVmaW5lIFNDVFBfREVCVUdfVVNSIAkJMHg4MDAwMDAw
MAorI2Vsc2UKKyNkZWZpbmUgU0NUUF9ERUJVR19YWFhYWAkweDgwMDAwMDAwCS8qIHVudXNlZCAq
LworI2VuZGlmCisjZGVmaW5lIFNDVFBfREVCVUdfQUxMCQkweDdmZjNmZmZmCisjZGVmaW5lIFND
VFBfREVCVUdfTk9JU1kJMHgwMDA0MDAwMAorCisvKiBXaGF0IHNlbmRlciBuZWVkcyB0byBzZWUg
dG8gYXZvaWQgU1dTIG9yIHdlIGNvbnNpZGVyIHBlZXJzIHJ3bmQgMCAqLworI2RlZmluZSBTQ1RQ
X1NXU19TRU5ERVJfREVGCTE0MjAKKworLyoKKyAqIFNXUyBpcyBzY2FsZWQgdG8gdGhlIHNiX2hp
d2F0IG9mIHRoZSBzb2NrZXQuIEEgdmFsdWUgb2YgMiBpcyBoaXdhdC80LCAxCisgKiB3b3VsZCBi
ZSBoaXdhdC8yIGV0Yy4KKyAqLworLyogV2hhdCByZWNlaXZlciBuZWVkcyB0byBzZWUgaW4gc29j
a2J1ZiBvciB3ZSB0ZWxsIHBlZXIgaXRzIDEgKi8KKyNkZWZpbmUgU0NUUF9TV1NfUkVDRUlWRVJf
REVGCTMwMDAKKworI2RlZmluZSBTQ1RQX0lOSVRJQUxfQ1dORCA0MzgwCisKKyNkZWZpbmUgU0NU
UF9ERUZBVUxUX01UVSAxNTAwIC8qIGVtZXJnZW5jeSBkZWZhdWx0IE1UVSAqLworLyogYW1vdW50
IHBlZXIgaXMgb2JsaWdhdGVkIHRvIGhhdmUgaW4gcnduZCBvciBJIHdpbGwgYWJvcnQgKi8KKyNk
ZWZpbmUgU0NUUF9NSU5fUldORAkxNTAwCisKKyNkZWZpbmUgU0NUUF9ERUZBVUxUX01BWFNFR01F
TlQgNjU1MzUKKworI2RlZmluZSBTQ1RQX0NIVU5LX0JVRkZFUl9TSVpFCTUxMgorI2RlZmluZSBT
Q1RQX1BBUkFNX0JVRkZFUl9TSVpFCTUxMgorCisvKiBzbWFsbCBjaHVuayBzdG9yZSBmb3IgbG9v
a2luZyBhdCBjaHVua19saXN0IGluIGF1dGggKi8KKyNkZWZpbmUgU0NUUF9TTUFMTF9DSFVOS19T
VE9SRSAyNjAKKworI2RlZmluZSBTQ1RQX0hPV19NQU5ZX1NFQ1JFVFMJMgkvKiBob3cgbWFueSBz
ZWNyZXRzIEkga2VlcCAqLworCisjZGVmaW5lIFNDVFBfTlVNQkVSX09GX1NFQ1JFVFMJOAkvKiBv
ciA4ICogNCA9IDMyIG9jdGV0cyAqLworI2RlZmluZSBTQ1RQX1NFQ1JFVF9TSVpFCTMyCS8qIG51
bWJlciBvZiBvY3RldHMgaW4gYSAyNTYgYml0cyAqLworCisvKgorICogU0NUUCB1cHBlciBsYXll
ciBub3RpZmljYXRpb25zCisgKi8KKyNkZWZpbmUgU0NUUF9OT1RJRllfQVNTT0NfVVAgICAgICAg
ICAgICAgICAgICAgICAxCisjZGVmaW5lIFNDVFBfTk9USUZZX0FTU09DX0RPV04gICAgICAgICAg
ICAgICAgICAgMgorI2RlZmluZSBTQ1RQX05PVElGWV9JTlRFUkZBQ0VfRE9XTiAgICAgICAgICAg
ICAgIDMKKyNkZWZpbmUgU0NUUF9OT1RJRllfSU5URVJGQUNFX1VQICAgICAgICAgICAgICAgICA0
CisjZGVmaW5lIFNDVFBfTk9USUZZX1NFTlRfREdfRkFJTCAgICAgICAgICAgICAgICAgNQorI2Rl
ZmluZSBTQ1RQX05PVElGWV9VTlNFTlRfREdfRkFJTCAgICAgICAgICAgICAgIDYKKyNkZWZpbmUg
U0NUUF9OT1RJRllfU1BFQ0lBTF9TUF9GQUlMICAgICAgICAgICAgICA3CisjZGVmaW5lIFNDVFBf
Tk9USUZZX0FTU09DX0xPQ19BQk9SVEVEICAgICAgICAgICAgOAorI2RlZmluZSBTQ1RQX05PVElG
WV9BU1NPQ19SRU1fQUJPUlRFRCAgICAgICAgICAgIDkKKyNkZWZpbmUgU0NUUF9OT1RJRllfQVNT
T0NfUkVTVEFSVCAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFNDVFBfTk9USUZZX1BFRVJfU0hV
VERPV04gICAgICAgICAgICAgICAxMQorI2RlZmluZSBTQ1RQX05PVElGWV9BU0NPTkZfQUREX0lQ
ICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgU0NUUF9OT1RJRllfQVNDT05GX0RFTEVURV9JUCAg
ICAgICAgICAgIDEzCisjZGVmaW5lIFNDVFBfTk9USUZZX0FTQ09ORl9TRVRfUFJJTUFSWSAgICAg
ICAgICAxNAorI2RlZmluZSBTQ1RQX05PVElGWV9QQVJUSUFMX0RFTFZJRVJZX0lORElDQVRJT04g
MTUKKyNkZWZpbmUgU0NUUF9OT1RJRllfSU5URVJGQUNFX0NPTkZJUk1FRCAgICAgICAgIDE2Cisj
ZGVmaW5lIFNDVFBfTk9USUZZX1NUUl9SRVNFVF9SRUNWICAgICAgICAgICAgICAxNworI2RlZmlu
ZSBTQ1RQX05PVElGWV9TVFJfUkVTRVRfU0VORCAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgU0NU
UF9OT1RJRllfU1RSX1JFU0VUX0ZBSUxFRF9PVVQgICAgICAgIDE5CisjZGVmaW5lIFNDVFBfTk9U
SUZZX1NUUl9SRVNFVF9GQUlMRURfSU4gICAgICAgICAyMAorI2RlZmluZSBTQ1RQX05PVElGWV9T
VFJfUkVTRVRfREVOSUVEX09VVCAgICAgICAgMjEKKyNkZWZpbmUgU0NUUF9OT1RJRllfU1RSX1JF
U0VUX0RFTklFRF9JTiAgICAgICAgIDIyCisjZGVmaW5lIFNDVFBfTk9USUZZX0FVVEhfTkVXX0tF
WSAgICAgICAgICAgICAgICAyMworI2RlZmluZSBTQ1RQX05PVElGWV9BVVRIX0ZSRUVfS0VZICAg
ICAgICAgICAgICAgMjQKKyNkZWZpbmUgU0NUUF9OT1RJRllfTk9fUEVFUl9BVVRIICAgICAgICAg
ICAgICAgIDI1CisjZGVmaW5lIFNDVFBfTk9USUZZX1NFTkRFUl9EUlkgICAgICAgICAgICAgICAg
ICAyNgorI2RlZmluZSBTQ1RQX05PVElGWV9SRU1PVEVfRVJST1IgICAgICAgICAgICAgICAgMjcK
KworLyogVGhpcyBpcyB0aGUgdmFsdWUgZm9yIG1lc3NhZ2VzIHRoYXQgYXJlIE5PVCBjb21wbGV0
ZWx5CisgKiBjb3BpZWQgZG93biB3aGVyZSB3ZSB3aWxsIHN0YXJ0IHRvIHNwbGl0IHRoZSBtZXNz
YWdlLgorICogU28sIHdpdGggb3VyIGRlZmF1bHQsIHdlIHNwbGl0IG9ubHkgaWYgdGhlIHBpZWNl
IHdlCisgKiB3YW50IHRvIHRha2Ugd2lsbCBmaWxsIHVwIGEgZnVsbCBNVFUgKGFzc3VtaW5nCisg
KiBhIDE1MDAgYnl0ZSBNVFUpLgorICovCisjZGVmaW5lIFNDVFBfREVGQVVMVF9TUExJVF9QT0lO
VF9NSU4gMjkwNAorCisvKiBNYXhpbXVtIGxlbmd0aCBvZiBkaWFnbm9zdGljIGluZm9ybWF0aW9u
IGluIGVycm9yIGNhdXNlcyAqLworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNkZWZpbmUg
U0NUUF9ESUFHX0lORk9fTEVOIDI1NgorI2Vsc2UKKyNkZWZpbmUgU0NUUF9ESUFHX0lORk9fTEVO
IDEyOAorI2VuZGlmCisKKy8qIEFCT1JUIENPREVTIGFuZCBvdGhlciB0ZWxsLXRhbGUgbG9jYXRp
b24KKyAqIGNvZGVzIGFyZSBnZW5lcmF0ZWQgYnkgYWRkaW5nIHRoZSBiZWxvdworICogdG8gdGhl
IGluc3RhbmNlIGlkLgorICovCisKKy8qIEZpbGUgZGVmaW5lcyAqLworI2RlZmluZSBTQ1RQX0ZS
T01fU0NUUF9JTlBVVCAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBTQ1RQX0ZST01fU0NUUF9Q
Q0IgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgICAg
ICAgMHgzMDAwMDAwMAorI2RlZmluZSBTQ1RQX0ZST01fU0NUUF9USU1FUiAgICAgICAgMHg0MDAw
MDAwMAorI2RlZmluZSBTQ1RQX0ZST01fU0NUUF9VU1JSRVEgICAgICAgMHg1MDAwMDAwMAorI2Rl
ZmluZSBTQ1RQX0ZST01fU0NUUFVUSUwgICAgICAgICAgMHg2MDAwMDAwMAorI2RlZmluZSBTQ1RQ
X0ZST01fU0NUUDZfVVNSUkVRICAgICAgMHg3MDAwMDAwMAorI2RlZmluZSBTQ1RQX0ZST01fU0NU
UF9BU0NPTkYgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBTQ1RQX0ZST01fU0NUUF9PVVRQVVQg
ICAgICAgMHg5MDAwMDAwMAorI2RlZmluZSBTQ1RQX0ZST01fU0NUUF9QRUVMT0ZGICAgICAgMHhh
MDAwMDAwMAorI2RlZmluZSBTQ1RQX0ZST01fU0NUUF9TWVNDVEwgICAgICAgMHhiMDAwMDAwMAor
I2RlZmluZSBTQ1RQX0ZST01fU0NUUF9DQ19GVU5DVElPTlMgMHhjMDAwMDAwMAorCisvKiBMb2Nh
dGlvbiBJRCdzICovCisjZGVmaW5lIFNDVFBfTE9DXzEgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU0NU
UF9MT0NfMiAgMHgwMDAwMDAwMgorI2RlZmluZSBTQ1RQX0xPQ18zICAweDAwMDAwMDAzCisjZGVm
aW5lIFNDVFBfTE9DXzQgIDB4MDAwMDAwMDQKKyNkZWZpbmUgU0NUUF9MT0NfNSAgMHgwMDAwMDAw
NQorI2RlZmluZSBTQ1RQX0xPQ182ICAweDAwMDAwMDA2CisjZGVmaW5lIFNDVFBfTE9DXzcgIDB4
MDAwMDAwMDcKKyNkZWZpbmUgU0NUUF9MT0NfOCAgMHgwMDAwMDAwOAorI2RlZmluZSBTQ1RQX0xP
Q185ICAweDAwMDAwMDA5CisjZGVmaW5lIFNDVFBfTE9DXzEwIDB4MDAwMDAwMGEKKyNkZWZpbmUg
U0NUUF9MT0NfMTEgMHgwMDAwMDAwYgorI2RlZmluZSBTQ1RQX0xPQ18xMiAweDAwMDAwMDBjCisj
ZGVmaW5lIFNDVFBfTE9DXzEzIDB4MDAwMDAwMGQKKyNkZWZpbmUgU0NUUF9MT0NfMTQgMHgwMDAw
MDAwZQorI2RlZmluZSBTQ1RQX0xPQ18xNSAweDAwMDAwMDBmCisjZGVmaW5lIFNDVFBfTE9DXzE2
IDB4MDAwMDAwMTAKKyNkZWZpbmUgU0NUUF9MT0NfMTcgMHgwMDAwMDAxMQorI2RlZmluZSBTQ1RQ
X0xPQ18xOCAweDAwMDAwMDEyCisjZGVmaW5lIFNDVFBfTE9DXzE5IDB4MDAwMDAwMTMKKyNkZWZp
bmUgU0NUUF9MT0NfMjAgMHgwMDAwMDAxNAorI2RlZmluZSBTQ1RQX0xPQ18yMSAweDAwMDAwMDE1
CisjZGVmaW5lIFNDVFBfTE9DXzIyIDB4MDAwMDAwMTYKKyNkZWZpbmUgU0NUUF9MT0NfMjMgMHgw
MDAwMDAxNworI2RlZmluZSBTQ1RQX0xPQ18yNCAweDAwMDAwMDE4CisjZGVmaW5lIFNDVFBfTE9D
XzI1IDB4MDAwMDAwMTkKKyNkZWZpbmUgU0NUUF9MT0NfMjYgMHgwMDAwMDAxYQorI2RlZmluZSBT
Q1RQX0xPQ18yNyAweDAwMDAwMDFiCisjZGVmaW5lIFNDVFBfTE9DXzI4IDB4MDAwMDAwMWMKKyNk
ZWZpbmUgU0NUUF9MT0NfMjkgMHgwMDAwMDAxZAorI2RlZmluZSBTQ1RQX0xPQ18zMCAweDAwMDAw
MDFlCisjZGVmaW5lIFNDVFBfTE9DXzMxIDB4MDAwMDAwMWYKKyNkZWZpbmUgU0NUUF9MT0NfMzIg
MHgwMDAwMDAyMAorI2RlZmluZSBTQ1RQX0xPQ18zMyAweDAwMDAwMDIxCisjZGVmaW5lIFNDVFBf
TE9DXzM0IDB4MDAwMDAwMjIKKyNkZWZpbmUgU0NUUF9MT0NfMzUgMHgwMDAwMDAyMworI2RlZmlu
ZSBTQ1RQX0xPQ18zNiAweDAwMDAwMDI0CisjZGVmaW5lIFNDVFBfTE9DXzM3IDB4MDAwMDAwMjUK
KworLyogRnJlZSBhc3NvYyBjb2RlcyAqLworI2RlZmluZSBTQ1RQX05PUk1BTF9QUk9DICAgICAg
MAorI2RlZmluZSBTQ1RQX1BDQkZSRUVfTk9GT1JDRSAgMQorI2RlZmluZSBTQ1RQX1BDQkZSRUVf
Rk9SQ0UgICAgMgorCisvKiBGcm9tIGNvZGVzIGZvciBhZGRpbmcgYWRkcmVzc2VzICovCisjZGVm
aW5lIFNDVFBfQUREUl9JU19DT05GSVJNRUQgOAorI2RlZmluZSBTQ1RQX0FERFJfRFlOQU1JQ19B
RERFRCA2CisjZGVmaW5lIFNDVFBfSU5fQ09PS0lFX1BST0MgMTAwCisjZGVmaW5lIFNDVFBfQUxM
T0NfQVNPQyAgMQorI2RlZmluZSBTQ1RQX0xPQURfQUREUl8yIDIKKyNkZWZpbmUgU0NUUF9MT0FE
X0FERFJfMyAzCisjZGVmaW5lIFNDVFBfTE9BRF9BRERSXzQgNAorI2RlZmluZSBTQ1RQX0xPQURf
QUREUl81IDUKKworI2RlZmluZSBTQ1RQX0RPTk9UX1NFVFNDT1BFIDAKKyNkZWZpbmUgU0NUUF9E
T19TRVRTQ09QRSAxCisKKy8qIFRoaXMgdmFsdWUgZGV0ZXJtaW5lcyB0aGUgZGVmYXVsdCBmb3Ig
d2hlbgorICogd2UgdHJ5IHRvIGFkZCBtb3JlIG9uIHRoZSBzZW5kIHF1ZXVlLiwgaWYKKyAqIHRo
ZXJlIGlzIHJvb20uIFRoaXMgcHJldmVudHMgdXMgZnJvbSBjeWNsaW5nCisgKiBpbnRvIHRoZSBj
b3B5X3Jlc3VtZSByb3V0aW5lIHRvIG9mdGVuIGlmCisgKiB3ZSBoYXZlIG5vdCBnb3QgZW5vdWdo
IHNwYWNlIHRvIGFkZCBhIGRlY2VudAorICogZW5vdWdoIHNpemUgbWVzc2FnZS4gTm90ZSB0aGF0
IGlmIHdlIGhhdmUgZW5vdWdoCisgKiBzcGFjZSB0byBjb21wbGV0ZSB0aGUgbWVzc2FnZSBjb3B5
IHdlIHdpbGwgYWx3YXlzCisgKiBhZGQgdG8gdGhlIG1lc3NhZ2UsIG5vIG1hdHRlciB3aGF0IHRo
ZSBzaXplLiBJdHMKKyAqIG9ubHkgd2hlbiB3ZSByZWFjaCB0aGUgcG9pbnQgdGhhdCB3ZSBoYXZl
IHNvbWUgbGVmdAorICogdG8gYWRkLCB0aGVyZSBpcyBvbmx5IHJvb20gZm9yIHBhcnQgb2YgaXQg
dGhhdCB3ZQorICogd2lsbCB1c2UgdGhpcyB0aHJlc2hvbGQuIEl0cyBhbHNvIGEgc3lzY3RsLgor
ICovCisjZGVmaW5lIFNDVFBfREVGQVVMVF9BRERfTU9SRSAxNDUyCisKKyNpZm5kZWYgU0NUUF9Q
Q0JIQVNIU0laRQorLyogZGVmYXVsdCBudW1iZXIgb2YgYXNzb2NpYXRpb24gaGFzaCBidWNrZXRz
IGluIGVhY2ggZW5kcG9pbnQgKi8KKyNkZWZpbmUgU0NUUF9QQ0JIQVNIU0laRSAyNTYKKyNlbmRp
ZgorI2lmbmRlZiBTQ1RQX1RDQkhBU0hTSVpFCisjZGVmaW5lIFNDVFBfVENCSEFTSFNJWkUgMTAy
NAorI2VuZGlmCisKKyNpZm5kZWYgU0NUUF9DSFVOS1FVRVVFX1NDQUxFCisjZGVmaW5lIFNDVFBf
Q0hVTktRVUVVRV9TQ0FMRSAxMAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAm
JiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorLyogY2xvY2sgdmFyaWFuY2UgaXMgMSBtcyAqLwor
I2RlZmluZSBTQ1RQX0NMT0NLX0dSQU5VTEFSSVRZCTEKKyNlbHNlCisvKiBjbG9jayB2YXJpYW5j
ZSBpcyAxMCBtcyAqLworI2RlZmluZSBTQ1RQX0NMT0NLX0dSQU5VTEFSSVRZCTEwCisjZW5kaWYK
KyNkZWZpbmUgSVBfSERSX1NJWkUgNDAJCS8qIHdlIHVzZSB0aGUgc2l6ZSBvZiBhIElQNiBoZWFk
ZXIgaGVyZSB0aGlzCisJCQkJICogZGV0cmFjdHMgYSBzbWFsbCBhbW91bnQgZm9yIGlwdjQgYnV0
IGl0CisJCQkJICogc2ltcGxpZmllcyB0aGUgaXB2NiBhZGRpdGlvbiAqLworCisvKiBBcmd1bWVu
dCBtYWdpYyBudW1iZXIgZm9yIHNjdHBfaW5wY2JfZnJlZSgpICovCisKKy8qIHRoaXJkIGFyZ3Vt
ZW50ICovCisjZGVmaW5lIFNDVFBfQ0FMTEVEX0RJUkVDVExZX05PQ01QU0VUICAgICAwCisjZGVm
aW5lIFNDVFBfQ0FMTEVEX0FGVEVSX0NNUFNFVF9PRkNMT1NFICAxCisjZGVmaW5lIFNDVFBfQ0FM
TEVEX0ZST01fSU5QS0lMTF9USU1FUiAgICAyCisvKiBzZWNvbmQgYXJndW1lbnQgKi8KKyNkZWZp
bmUgU0NUUF9GUkVFX1NIT1VMRF9VU0VfQUJPUlQgICAgICAgICAgMQorI2RlZmluZSBTQ1RQX0ZS
RUVfU0hPVUxEX1VTRV9HUkFDRUZVTF9DTE9TRSAwCisKKyNpZm5kZWYgSVBQUk9UT19TQ1RQCisj
ZGVmaW5lIElQUFJPVE9fU0NUUCAxMzIJLyogdGhlIE9mZmljaWFsIElBTkEgbnVtYmVyIDotKSAq
LworI2VuZGlmCQkJCS8qICFJUFBST1RPX1NDVFAgKi8KKworI2RlZmluZSBTQ1RQX01BWF9EQVRB
X0JVTkRMSU5HCQkyNTYKKworLyogbW9kdWxhciBjb21wYXJpc29uICovCisvKiBTZWUgUkZDIDE5
ODIgZm9yIGRldGFpbHMuICovCisjZGVmaW5lIFNDVFBfVUlOVDE2X0dUKGEsIGIpICgoKGEgPCBi
KSAmJiAoKHVpbnQxNl90KShiIC0gYSkgPiAoMVU8PDE1KSkpIHx8IFwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICgoYSA+IGIpICYmICgodWludDE2X3QpKGEgLSBiKSA8ICgxVTw8MTUp
KSkpCisjZGVmaW5lIFNDVFBfVUlOVDE2X0dFKGEsIGIpIChTQ1RQX1VJTlQxNl9HVChhLCBiKSB8
fCAoYSA9PSBiKSkKKyNkZWZpbmUgU0NUUF9VSU5UMzJfR1QoYSwgYikgKCgoYSA8IGIpICYmICgo
dWludDMyX3QpKGIgLSBhKSA+ICgxVTw8MzEpKSkgfHwgXAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKChhID4gYikgJiYgKCh1aW50MzJfdCkoYSAtIGIpIDwgKDFVPDwzMSkpKSkKKyNk
ZWZpbmUgU0NUUF9VSU5UMzJfR0UoYSwgYikgKFNDVFBfVUlOVDMyX0dUKGEsIGIpIHx8IChhID09
IGIpKQorCisjZGVmaW5lIFNDVFBfU1NOX0dUKGEsIGIpIFNDVFBfVUlOVDE2X0dUKGEsIGIpCisj
ZGVmaW5lIFNDVFBfU1NOX0dFKGEsIGIpIFNDVFBfVUlOVDE2X0dFKGEsIGIpCisjZGVmaW5lIFND
VFBfVFNOX0dUKGEsIGIpIFNDVFBfVUlOVDMyX0dUKGEsIGIpCisjZGVmaW5lIFNDVFBfVFNOX0dF
KGEsIGIpIFNDVFBfVUlOVDMyX0dFKGEsIGIpCisjZGVmaW5lIFNDVFBfTUlEX0dUKGksIGEsIGIp
ICgoKGkpID09IDEpID8gU0NUUF9VSU5UMzJfR1QoYSwgYikgOiBTQ1RQX1VJTlQxNl9HVCgodWlu
dDE2X3QpYSwgKHVpbnQxNl90KWIpKQorI2RlZmluZSBTQ1RQX01JRF9HRShpLCBhLCBiKSAoKChp
KSA9PSAxKSA/IFNDVFBfVUlOVDMyX0dFKGEsIGIpIDogU0NUUF9VSU5UMTZfR0UoKHVpbnQxNl90
KWEsICh1aW50MTZfdCliKSkKKyNkZWZpbmUgU0NUUF9NSURfRVEoaSwgYSwgYikgKCgoaSkgPT0g
MSkgPyBhID09IGIgOiAodWludDE2X3QpYSA9PSAodWludDE2X3QpYikKKworLyogTWFwcGluZyBh
cnJheSBtYW5pcHVsYXRpb24gcm91dGluZXMgKi8KKyNkZWZpbmUgU0NUUF9JU19UU05fUFJFU0VO
VChhcnJ5LCBnYXApICgoYXJyeVsoZ2FwID4+IDMpXSA+PiAoZ2FwICYgMHgwNykpICYgMHgwMSkK
KyNkZWZpbmUgU0NUUF9TRVRfVFNOX1BSRVNFTlQoYXJyeSwgZ2FwKSAoYXJyeVsoZ2FwID4+IDMp
XSB8PSAoMHgwMSA8PCAoKGdhcCAmIDB4MDcpKSkpCisjZGVmaW5lIFNDVFBfVU5TRVRfVFNOX1BS
RVNFTlQoYXJyeSwgZ2FwKSAoYXJyeVsoZ2FwID4+IDMpXSAmPSAoKH4oMHgwMSA8PCAoKGdhcCAm
IDB4MDcpKSkpICYgMHhmZikpCisjZGVmaW5lIFNDVFBfQ0FMQ19UU05fVE9fR0FQKGdhcCwgdHNu
LCBtYXBwaW5nX3RzbikgZG8geyBcCisJICAgICAgICAgICAgICAgIGlmICh0c24gPj0gbWFwcGlu
Z190c24pIHsgXAorCQkJCQkJZ2FwID0gdHNuIC0gbWFwcGluZ190c247IFwKKwkJCQkJfSBlbHNl
IHsgXAorCQkJCQkJZ2FwID0gKE1BWF9UU04gLSBtYXBwaW5nX3RzbikgKyB0c24gKyAxOyBcCisJ
CQkJCX0gXAorICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBTQ1RQX1JF
VFJBTl9ET05FIC0xCisjZGVmaW5lIFNDVFBfUkVUUkFOX0VYSVQgLTIKKworLyoKKyAqIFRoaXMg
dmFsdWUgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIHZ0YWcgYmxvY2sgdGltZSB3YWl0IGVudHJ5J3Mg
cGVyIGxpc3QKKyAqIGVsZW1lbnQuICBFYWNoIGVudHJ5IHdpbGwgdGFrZSAyIDQgYnl0ZSBpbnRz
IChhbmQgb2YgY291cnNlIHRoZSBvdmVyaGVhZAorICogb2YgdGhlIG5leHQgcG9pbnRlciBhcyB3
ZWxsKS4gVXNpbmcgMTUgYXMgYW4gZXhhbXBsZSB3aWxsIHlpZWxkICogKCg4ICoKKyAqIDE1KSAr
IDgpIG9yIDEyOCBieXRlcyBvZiBvdmVyaGVhZCBmb3IgZWFjaCB0aW1ld2FpdCBibG9jayB0aGF0
IGdldHMKKyAqIGluaXRpYWxpemVkLiBJbmNyZWFzaW5nIGl0IHRvIDMxIHdvdWxkIHlpZWxkIDI1
NiBieXRlcyBwZXIgYmxvY2suCisgKi8KKyNkZWZpbmUgU0NUUF9OVU1CRVJfSU5fVlRBR19CTE9D
SyAxNQorLyoKKyAqIElmIHdlIHVzZSB0aGUgU1RBQ0sgb3B0aW9uLCB3ZSBoYXZlIGFuIGFycmF5
IG9mIHRoaXMgc2l6ZSBoZWFkIHBvaW50ZXJzLgorICogVGhpcyBhcnJheSBpcyBtb2QnZCB0aGUg
d2l0aCB0aGUgc2l6ZSB0byBmaW5kIHdoaWNoIGJ1Y2tldCBhbmQgdGhlbiBhbGwKKyAqIGVudHJp
ZXMgbXVzdCBiZSBzZWFyY2hlZCB0byBzZWUgaWYgdGhlIHRhZyBpcyBpbiB0aW1lZCB3YWl0LiBJ
ZiBzbyB3ZQorICogcmVqZWN0IGl0LgorICovCisjZGVmaW5lIFNDVFBfU1RBQ0tfVlRBR19IQVNI
X1NJWkUgICAzMgorCisvKgorICogTnVtYmVyIG9mIHNlY29uZHMgb2YgdGltZSB3YWl0IGZvciBh
IHZ0YWcuCisgKi8KKyNkZWZpbmUgU0NUUF9USU1FX1dBSVQgNjAKKworLyogSG93IG1hbnkgbWlj
cm8gc2Vjb25kcyBpcyB0aGUgY3V0b2ZmIGZyb20KKyAqIGxvY2FsIGxhbiB0eXBlIHJ0dCdzCisg
Ki8KKyAvKgorICAqIFdlIGFsbG93IDkwMHVzIGZvciB0aGUgcnR0LgorICAqLworI2RlZmluZSBT
Q1RQX0xPQ0FMX0xBTl9SVFQgOTAwCisjZGVmaW5lIFNDVFBfTEFOX1VOS05PV04gIDAKKyNkZWZp
bmUgU0NUUF9MQU5fTE9DQUwgICAgMQorI2RlZmluZSBTQ1RQX0xBTl9JTlRFUk5FVCAyCisKKyNk
ZWZpbmUgU0NUUF9TRU5EX0JVRkZFUl9TUExJVFRJTkcgMHgwMDAwMDAwMQorI2RlZmluZSBTQ1RQ
X1JFQ1ZfQlVGRkVSX1NQTElUVElORyAweDAwMDAwMDAyCisKKy8qIFRoZSBzeXN0ZW0gcmV0YWlu
cyBhIGNhY2hlIG9mIGZyZWUgY2h1bmtzIHN1Y2ggdG8KKyAqIGN1dCBkb3duIG9uIGNhbGxzIHRo
ZSBtZW1vcnkgYWxsb2NhdGlvbiBzeXN0ZW0uIFRoZXJlCisgKiBpcyBhIHBlciBhc3NvY2lhdGlv
biBsaW1pdCBvZiBmcmVlIGl0ZW1zIGFuZCBhIG92ZXJhbGwKKyAqIHN5c3RlbSBsaW1pdC4gSWYg
ZWl0aGVyIG9uZSBnZXRzIGhpdCB0aGVuIHRoZSByZXNvdXJjZQorICogc3RvcHMgYmVpbmcgY2Fj
aGVkLgorICovCisKKyNkZWZpbmUgU0NUUF9ERUZfQVNPQ19SRVNDX0xJTUlUIDEwCisjZGVmaW5l
IFNDVFBfREVGX1NZU1RFTV9SRVNDX0xJTUlUIDEwMDAKKworLyotCisgKiBkZWZpbmVzIGZvciBz
b2NrZXQgbG9jayBzdGF0ZXMuCisgKiBVc2VkIGJ5IF9fQVBQTEVfXworICovCisjZGVmaW5lIFND
VFBfU09fTE9DS0VECQkxCisjZGVmaW5lIFNDVFBfU09fTk9UX0xPQ0tFRAkwCisKKy8qLQorICog
Rm9yIGFkZHJlc3MgbG9ja3MsIGRvIHdlIGhvbGQgdGhlIGxvY2s/CisgKi8KKyNkZWZpbmUgU0NU
UF9BRERSX0xPQ0tFRCAxCisjZGVmaW5lIFNDVFBfQUREUl9OT1RfTE9DS0VEIDAKKworI2RlZmlu
ZSBJTjRfSVNQUklWQVRFX0FERFJFU1MoYSkgXAorICAgKCgoKHVpbnQ4X3QgKikmKGEpLT5zX2Fk
ZHIpWzBdID09IDEwKSB8fCBcCisgICAgKCgoKHVpbnQ4X3QgKikmKGEpLT5zX2FkZHIpWzBdID09
IDE3MikgJiYgXAorICAgICAoKCh1aW50OF90ICopJihhKS0+c19hZGRyKVsxXSA+PSAxNikgJiYg
XAorICAgICAoKCh1aW50OF90ICopJihhKS0+c19hZGRyKVsxXSA8PSAzMikpIHx8IFwKKyAgICAo
KCgodWludDhfdCAqKSYoYSktPnNfYWRkcilbMF0gPT0gMTkyKSAmJiBcCisgICAgICgoKHVpbnQ4
X3QgKikmKGEpLT5zX2FkZHIpWzFdID09IDE2OCkpKQorCisjZGVmaW5lIElONF9JU0xPT1BCQUNL
X0FERFJFU1MoYSkgXAorICAgICgoKHVpbnQ4X3QgKikmKGEpLT5zX2FkZHIpWzBdID09IDEyNykK
KworI2RlZmluZSBJTjRfSVNMSU5LTE9DQUxfQUREUkVTUyhhKSBcCisgICAgKCgoKHVpbnQ4X3Qg
KikmKGEpLT5zX2FkZHIpWzBdID09IDE2OSkgJiYgXAorICAgICAoKCh1aW50OF90ICopJihhKS0+
c19hZGRyKVsxXSA9PSAyNTQpKQorCisvKiBNYXhpbXVtIHNpemUgb2Ygb3B0dmFsIGZvciBJUFBS
T1RPX1NDVFAgbGV2ZWwgc29ja2V0IG9wdGlvbnMuICovCisjZGVmaW5lIFNDVFBfU09DS0VUX09Q
VElPTl9MSU1JVCAoNjQgKiAxMDI0KQorCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lm
IGRlZmluZWQoX1dJTjMyKQorI2RlZmluZSBTQ1RQX0dFVFRJTUVfVElNRVZBTCh4KQlnZXR3aW50
aW1lb2ZkYXkoeCkKKyNkZWZpbmUgU0NUUF9HRVRQVElNRV9USU1FVkFMKHgpIGdldHdpbnRpbWVv
ZmRheSh4KSAvKiB0aGlzIGRvZXNuJ3Qgc2VlbSB0byBldmVyIGJlIHVzZWQuLiAqLworI2Vsc2UK
KyNkZWZpbmUgU0NUUF9HRVRUSU1FX1RJTUVWQUwoeCkJZ2V0dGltZW9mZGF5KHgsIE5VTEwpCisj
ZGVmaW5lIFNDVFBfR0VUUFRJTUVfVElNRVZBTCh4KSBnZXR0aW1lb2ZkYXkoeCwgTlVMTCkKKyNl
bmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfS0VSTkVMKQorI2RlZmluZSBTQ1RQX0dFVFRJTUVf
VElNRVZBTCh4KSAoZ2V0bWljcm91cHRpbWUoeCkpCisjZGVmaW5lIFNDVFBfR0VUUFRJTUVfVElN
RVZBTCh4KSAobWljcm91cHRpbWUoeCkpCisjZW5kaWYKKworI2lmIGRlZmluZWQoX0tFUk5FTCkg
fHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2RlZmluZSBzY3RwX3Nvd3dha2V1cChpbnAsIHNv
KSBcCitkbyB7IFwKKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfRE9OVF9X
QUtFKSB7IFwKKwkJaW5wLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdTX1dBS0VPVVRQVVQ7
IFwKKwl9IGVsc2UgeyBcCisJCXNvd3dha2V1cChzbyk7IFwKKwl9IFwKK30gd2hpbGUgKDApCisK
KyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorI2RlZmluZSBzY3RwX3Nvd3dha2V1cF9sb2NrZWQoaW5wLCBzbykgXAor
ZG8geyBcCisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRSkg
eyBcCisJCVNPQ0tCVUZfVU5MT0NLKCYoKHNvKS0+c29fc25kKSk7IFwKKwkJaW5wLT5zY3RwX2Zs
YWdzIHw9IFNDVFBfUENCX0ZMQUdTX1dBS0VPVVRQVVQ7IFwKKwl9IGVsc2UgeyBcCisJCXNvd3dh
a2V1cF9sb2NrZWQoc28pOyBcCisJfSBcCit9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgc2N0
cF9zb3d3YWtldXBfbG9ja2VkKGlucCwgc28pIFwKK2RvIHsgXAorCWlmIChpbnAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19ET05UX1dBS0UpIHsgXAorCQlTT0NLQlVGX1VOTE9DSygmKChz
byktPnNvX3NuZCkpOyBcCisJCWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19XQUtF
T1VUUFVUOyBcCisJfSBlbHNlIHsgXAorCQlzb3d3YWtldXAoc28pOyBcCisJfSBcCit9IHdoaWxl
ICgwKQorI2VuZGlmCisKKyNkZWZpbmUgc2N0cF9zb3J3YWtldXAoaW5wLCBzbykgXAorZG8geyBc
CisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRSkgeyBcCisJ
CWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19XQUtFSU5QVVQ7IFwKKwl9IGVsc2Ug
eyBcCisJCXNvcndha2V1cChzbyk7IFwKKwl9IFwKK30gd2hpbGUgKDApCisKKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorI2RlZmluZSBzY3RwX3Nvcndha2V1cF9sb2NrZWQoaW5wLCBzbykgXAorZG8geyBcCisJaWYg
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRSkgeyBcCisJCWlucC0+
c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19XQUtFSU5QVVQ7IFwKKwkJU09DS0JVRl9VTkxP
Q0soJigoc28pLT5zb19yY3YpKTsgXAorCX0gZWxzZSB7IFwKKwkJc29yd2FrZXVwX2xvY2tlZChz
byk7IFwKKwl9IFwKK30gd2hpbGUgKDApCisjZWxzZQorCisjZGVmaW5lIHNjdHBfc29yd2FrZXVw
X2xvY2tlZChpbnAsIHNvKSBcCitkbyB7IFwKKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfRE9OVF9XQUtFKSB7IFwKKwkJaW5wLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZM
QUdTX1dBS0VJTlBVVDsgXAorCQlTT0NLQlVGX1VOTE9DSygmKChzbyktPnNvX3JjdikpOyBcCisJ
fSBlbHNlIHsgXAorCQlzb3J3YWtldXAoc28pOyBcCisJfSBcCit9IHdoaWxlICgwKQorI2VuZGlm
CisKKyNlbmRpZgkJCQkvKiBfS0VSTkVMIHx8IF9fVXNlcnNwYWNlX18qLworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jcmMzMi5oIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY3JjMzIuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQpp
bmRleCAwMDAwMDAwMDAwMDAuLjVlNzZmZjIxYmY5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NyYzMyLmgKQEAgLTAsMCArMSw1NiBAQAorLyot
CisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJp
Z2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFl
bCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpbmNsdWRlIDxzeXMvY2RlZnMu
aD4KK19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX2NyYzMyLmggMzYy
MzM4IDIwMjAtMDYtMTggMTk6MzI6MzRaIG1hcmtqICQiKTsKKyNlbmRpZgorCisjaWZuZGVmIF9O
RVRJTkVUX1NDVFBfQ1JDMzJfSF8KKyNkZWZpbmUgX05FVElORVRfU0NUUF9DUkMzMl9IXworCisj
aWYgZGVmaW5lZChfS0VSTkVMKQordWludDMyX3Qgc2N0cF9jYWxjdWxhdGVfY2tzdW0oc3RydWN0
IG1idWYgKiwgdWludDMyX3QpOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCisjaWYgZGVmaW5lZChTQ1RQKSB8fCBkZWZpbmVkKFNDVFBfU1VQUE9S
VCkKK3ZvaWQgc2N0cF9kZWxheWVkX2Nrc3VtKHN0cnVjdCBtYnVmICosIHVpbnQzMl90IG9mZnNl
dCk7CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCQkJCS8qIF9LRVJORUwgKi8KKyNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCit1aW50MzJfdCBjYWxjdWxhdGVfY3JjMzJjKHVpbnQzMl90LCBjb25z
dCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGludCk7Cit1aW50MzJfdCBzY3RwX2ZpbmFsaXpl
X2NyYzMyYyh1aW50MzJfdCk7Cit1aW50MzJfdCBzY3RwX2NhbGN1bGF0ZV9ja3N1bShzdHJ1Y3Qg
bWJ1ZiAqLCB1aW50MzJfdCk7CisjZW5kaWYKKyNlbmRpZgkJCQkvKiBfX2NyYzMyY19oX18gKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2hlYWRlci5oIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaGVhZGVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwLi45MjI2YTllZjk5ZjIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9oZWFkZXIuaApAQCAtMCwwICsxLDU5
NSBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgor
ICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0
ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwg
YnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoK
KyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpbmNsdWRlIDxz
eXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX2hl
YWRlci5oIDM2NjExNCAyMDIwLTA5LTI0IDEyOjI2OjA2WiB0dWV4ZW4gJCIpOworI2VuZGlmCisK
KyNpZm5kZWYgX05FVElORVRfU0NUUF9IRUFERVJfSF8KKyNkZWZpbmUgX05FVElORVRfU0NUUF9I
RUFERVJfSF8KKworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorI2luY2x1ZGUgPHBhY2tvbi5oPgorI2VuZGlmCisjaWYgIWRlZmluZWQoX1dJTjMyKQorI2lu
Y2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHAuaD4KKyNp
bmNsdWRlIDxuZXRpbmV0L3NjdHBfY29uc3RhbnRzLmg+CisKKyNpZiAhZGVmaW5lZChfV0lOMzIp
CisjZGVmaW5lIFNDVFBfUEFDS0VEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpCisjZWxzZQorI3By
YWdtYSBwYWNrIChwdXNoLCAxKQorI2RlZmluZSBTQ1RQX1BBQ0tFRAorI2VuZGlmCisKKy8qCisg
KiBQYXJhbWV0ZXIgc3RydWN0dXJlcworICovCitzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSB7
CisJc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7LyogdHlwZT1TQ1RQX0lQVjRfUEFSQU1fVFlQRSwg
bGVuPTggKi8KKwl1aW50MzJfdCBhZGRyOwkJLyogSVBWNCBhZGRyZXNzICovCit9IFNDVFBfUEFD
S0VEOworCisjZGVmaW5lIFNDVFBfVjZfQUREUl9CWVRFUyAxNgorCitzdHJ1Y3Qgc2N0cF9pcHY2
YWRkcl9wYXJhbSB7CisJc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7LyogdHlwZT1TQ1RQX0lQVjZf
UEFSQU1fVFlQRSwgbGVuPTIwICovCisJdWludDhfdCBhZGRyW1NDVFBfVjZfQUREUl9CWVRFU107
CS8qIElQVjYgYWRkcmVzcyAqLworfSBTQ1RQX1BBQ0tFRDsKKworLyogQ29va2llIFByZXNlcnZh
dGl2ZSAqLworc3RydWN0IHNjdHBfY29va2llX3BlcnNlcnZlX3BhcmFtIHsKKwlzdHJ1Y3Qgc2N0
cF9wYXJhbWhkciBwaDsvKiB0eXBlPVNDVFBfQ09PS0lFX1BSRVNFUlZFLCBsZW49OCAqLworCXVp
bnQzMl90IHRpbWU7CQkvKiB0aW1lIGluIG1zIHRvIGV4dGVuZCBjb29raWUgKi8KK30gU0NUUF9Q
QUNLRUQ7CisKKyNkZWZpbmUgU0NUUF9BUlJBWV9NSU5fTEVOIDEKKy8qIEhvc3QgTmFtZSBBZGRy
ZXNzICovCitzdHJ1Y3Qgc2N0cF9ob3N0X25hbWVfcGFyYW0geworCXN0cnVjdCBzY3RwX3BhcmFt
aGRyIHBoOy8qIHR5cGU9U0NUUF9IT1NUTkFNRV9BRERSRVNTICovCisJY2hhciBuYW1lW1NDVFBf
QVJSQVlfTUlOX0xFTl07CQkvKiBob3N0IG5hbWUgKi8KK30gU0NUUF9QQUNLRUQ7CisKKy8qCisg
KiBUaGlzIGlzIHRoZSBtYXhpbXVtIHBhZGRlZCBzaXplIG9mIGEgcy1hLXAKKyAqIHNvIHBhcmFt
aGVhZHIgKyAzIGFkZHJlc3MgdHlwZXMgKDYgYnl0ZXMpICsgMiBieXRlIHBhZCA9IDEyCisgKi8K
KyNkZWZpbmUgU0NUUF9NQVhfQUREUl9QQVJBTVNfU0laRSAxMgorLyogc3VwcG9ydGVkIGFkZHJl
c3MgdHlwZSAqLworc3RydWN0IHNjdHBfc3VwcG9ydGVkX2FkZHJfcGFyYW0geworCXN0cnVjdCBz
Y3RwX3BhcmFtaGRyIHBoOy8qIHR5cGU9U0NUUF9TVVBQT1JURURfQUREUlRZUEUgKi8KKwl1aW50
MTZfdCBhZGRyX3R5cGVbMl07CS8qIGFycmF5IG9mIHN1cHBvcnRlZCBhZGRyZXNzIHR5cGVzICov
Cit9IFNDVFBfUEFDS0VEOworCisvKiBoZWFydGJlYXQgaW5mbyBwYXJhbWV0ZXIgKi8KK3N0cnVj
dCBzY3RwX2hlYXJ0YmVhdF9pbmZvX3BhcmFtIHsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwaDsK
Kwl1aW50MzJfdCB0aW1lX3ZhbHVlXzE7CisJdWludDMyX3QgdGltZV92YWx1ZV8yOworCXVpbnQz
Ml90IHJhbmRvbV92YWx1ZTE7CisJdWludDMyX3QgcmFuZG9tX3ZhbHVlMjsKKwl1aW50OF90IGFk
ZHJfZmFtaWx5OworCXVpbnQ4X3QgYWRkcl9sZW47CisJLyogbWFrZSBzdXJlIHRoYXQgdGhpcyBz
dHJ1Y3R1cmUgaXMgNCBieXRlIGFsaWduZWQgKi8KKwl1aW50OF90IHBhZGRpbmdbMl07CisJY2hh
ciBhZGRyZXNzW1NDVFBfQUREUk1BWF07Cit9IFNDVFBfUEFDS0VEOworCisvKiBkcmFmdC1pZXRm
LXRzdndnLXByc2N0cCAqLworLyogUFItU0NUUCBzdXBwb3J0ZWQgcGFyYW1ldGVyICovCitzdHJ1
Y3Qgc2N0cF9wcnNjdHBfc3VwcG9ydGVkX3BhcmFtIHsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBw
aDsKK30gU0NUUF9QQUNLRUQ7CisKKy8qIGRyYWZ0LWlldGYtdHN2d2ctYWRkaXAtc2N0cCAqLwor
c3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyIHsJLyogYW4gQVNDT05GICJwYXJhbWV0ZXIiICov
CisJc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7LyogYSBTQ1RQIHBhcmFtZXRlciBoZWFkZXIgKi8K
Kwl1aW50MzJfdCBjb3JyZWxhdGlvbl9pZDsvKiBjb3JyZWxhdGlvbiBpZCBmb3IgdGhpcyBwYXJh
bSAqLworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHNjdHBfYXNjb25mX2FkZHJfcGFyYW0gewkv
KiBhbiBBU0NPTkYgYWRkcmVzcyBwYXJhbWV0ZXIgKi8KKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFy
YW1oZHIgYXBoOwkvKiBhc2NvbmYgInBhcmFtZXRlciIgKi8KKwlzdHJ1Y3Qgc2N0cF9pcHY2YWRk
cl9wYXJhbSBhZGRycDsJLyogbWF4IHN0b3JhZ2Ugc2l6ZSAqLworfSBTQ1RQX1BBQ0tFRDsKKwor
c3RydWN0IHNjdHBfYXNjb25mX3RhZ19wYXJhbSB7CS8qIGFuIEFTQ09ORiBOQVQtVnRhZyBwYXJh
bWV0ZXIgKi8KKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgYXBoOwkvKiBhc2NvbmYgInBh
cmFtZXRlciIgKi8KKwl1aW50MzJfdCBsb2NhbF92dGFnOworCXVpbnQzMl90IHJlbW90ZV92dGFn
OworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHNjdHBfYXNjb25mX2FkZHJ2NF9wYXJhbSB7CS8q
IGFuIEFTQ09ORiBhZGRyZXNzICh2NCkgcGFyYW1ldGVyICovCisJc3RydWN0IHNjdHBfYXNjb25m
X3BhcmFtaGRyIGFwaDsJLyogYXNjb25mICJwYXJhbWV0ZXIiICovCisJc3RydWN0IHNjdHBfaXB2
NGFkZHJfcGFyYW0gYWRkcnA7CS8qIG1heCBzdG9yYWdlIHNpemUgKi8KK30gU0NUUF9QQUNLRUQ7
CisKKyNkZWZpbmUgU0NUUF9NQVhfU1VQUE9SVEVEX0VYVCAyNTYKKworc3RydWN0IHNjdHBfc3Vw
cG9ydGVkX2NodW5rX3R5cGVzX3BhcmFtIHsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwaDsvKiB0
eXBlID0gMHg4MDA4ICBsZW4gPSB4ICovCisJdWludDhfdCBjaHVua190eXBlc1tdOworfSBTQ1RQ
X1BBQ0tFRDsKKworLyoKKyAqIFN0cnVjdHVyZXMgZm9yIERBVEEgY2h1bmtzCisgKi8KK3N0cnVj
dCBzY3RwX2RhdGEgeworCXVpbnQzMl90IHRzbjsKKwl1aW50MTZfdCBzaWQ7CisJdWludDE2X3Qg
c3NuOworCXVpbnQzMl90IHBwaWQ7CisJLyogdXNlciBkYXRhIGZvbGxvd3MgKi8KK30gU0NUUF9Q
QUNLRUQ7CisKK3N0cnVjdCBzY3RwX2RhdGFfY2h1bmsgeworCXN0cnVjdCBzY3RwX2NodW5raGRy
IGNoOworCXN0cnVjdCBzY3RwX2RhdGEgZHA7Cit9IFNDVFBfUEFDS0VEOworCitzdHJ1Y3Qgc2N0
cF9pZGF0YSB7CisJdWludDMyX3QgdHNuOworCXVpbnQxNl90IHNpZDsKKwl1aW50MTZfdCByZXNl
cnZlZDsJLyogV2hlcmUgZG9lcyB0aGUgU1NOIGdvPyAqLworCXVpbnQzMl90IG1pZDsKKwl1bmlv
biB7CisJCXVpbnQzMl90IHBwaWQ7CisJCXVpbnQzMl90IGZzbjsJLyogRnJhZ21lbnQgU2VxdWVu
Y2UgTnVtYmVyICovCisJfSBwcGlkX2ZzbjsKKwkvKiB1c2VyIGRhdGEgZm9sbG93cyAqLworfSBT
Q1RQX1BBQ0tFRDsKKworc3RydWN0IHNjdHBfaWRhdGFfY2h1bmsgeworCXN0cnVjdCBzY3RwX2No
dW5raGRyIGNoOworCXN0cnVjdCBzY3RwX2lkYXRhIGRwOworfSBTQ1RQX1BBQ0tFRDsKKworLyoK
KyAqIFN0cnVjdHVyZXMgZm9yIHRoZSBjb250cm9sIGNodW5rcworICovCisKKy8qIEluaXRpYXRl
IChJTklUKS9Jbml0aWF0ZSBBY2sgKElOSVQgQUNLKSAqLworc3RydWN0IHNjdHBfaW5pdCB7CisJ
dWludDMyX3QgaW5pdGlhdGVfdGFnOwkvKiBpbml0aWF0ZSB0YWcgKi8KKwl1aW50MzJfdCBhX3J3
bmQ7CS8qIGFfcnduZCAqLworCXVpbnQxNl90IG51bV9vdXRib3VuZF9zdHJlYW1zOwkvKiBPUyAq
LworCXVpbnQxNl90IG51bV9pbmJvdW5kX3N0cmVhbXM7CS8qIE1JUyAqLworCXVpbnQzMl90IGlu
aXRpYWxfdHNuOwkvKiBJLVRTTiAqLworCS8qIG9wdGlvbmFsIHBhcmFtJ3MgZm9sbG93ICovCit9
IFNDVFBfUEFDS0VEOworI2RlZmluZSBTQ1RQX0lERU5USUZJQ0FUSU9OX1NJWkUgMTYKKyNkZWZp
bmUgU0NUUF9BRERSRVNTX1NJWkUgNAorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNkZWZp
bmUgU0NUUF9SRVNFUlZFX1NQQUNFIDUKKyNlbHNlCisjZGVmaW5lIFNDVFBfUkVTRVJWRV9TUEFD
RSA2CisjZW5kaWYKKy8qIHN0YXRlIGNvb2tpZSBoZWFkZXIgKi8KK3N0cnVjdCBzY3RwX3N0YXRl
X2Nvb2tpZSB7CS8qIHRoaXMgaXMgb3VyIGRlZmluaXRpb24uLi4gKi8KKwl1aW50OF90IGlkZW50
aWZpY2F0aW9uW1NDVFBfSURFTlRJRklDQVRJT05fU0laRV07LyogaWQgb2Ygd2hvIHdlIGFyZSAq
LworCXN0cnVjdCB0aW1ldmFsIHRpbWVfZW50ZXJlZDsJLyogdGhlIHRpbWUgSSBidWlsdCBjb29r
aWUgKi8KKwl1aW50MzJfdCBjb29raWVfbGlmZTsJLyogbGlmZSBJIHdpbGwgYXdhcmQgdGhpcyBj
b29raWUgKi8KKwl1aW50MzJfdCB0aWVfdGFnX215X3Z0YWc7CS8qIG15IHRhZyBpbiBvbGQgYXNz
b2NpYXRpb24gKi8KKworCXVpbnQzMl90IHRpZV90YWdfcGVlcl92dGFnOwkvKiBwZWVycyB0YWcg
aW4gb2xkIGFzc29jaWF0aW9uICovCisJdWludDMyX3QgcGVlcnNfdnRhZzsJLyogcGVlcnMgdGFn
IGluIElOSVQgKGZvciBxdWljayByZWYpICovCisKKwl1aW50MzJfdCBteV92dGFnOwkvKiBteSB0
YWcgaW4gSU5JVC1BQ0sgKGZvciBxdWljayByZWYpICovCisJdWludDMyX3QgYWRkcmVzc1tTQ1RQ
X0FERFJFU1NfU0laRV07CS8qIDQgaW50cy8xMjggYml0cyAqLworCXVpbnQzMl90IGFkZHJfdHlw
ZTsJLyogYWRkcmVzcyB0eXBlICovCisJdWludDMyX3QgbGFkZHJlc3NbU0NUUF9BRERSRVNTX1NJ
WkVdOwkvKiBteSBsb2NhbCBmcm9tIGFkZHJlc3MgKi8KKwl1aW50MzJfdCBsYWRkcl90eXBlOwkv
KiBteSBsb2NhbCBmcm9tIGFkZHJlc3MgdHlwZSAqLworCXVpbnQzMl90IHNjb3BlX2lkOwkvKiB2
NiBzY29wZSBpZCBmb3IgbGluay1sb2NhbHMgKi8KKworCXVpbnQxNl90IHBlZXJwb3J0OwkvKiBw
b3J0IGFkZHJlc3Mgb2YgdGhlIHBlZXIgaW4gdGhlIElOSVQgKi8KKwl1aW50MTZfdCBteXBvcnQ7
CS8qIG15IHBvcnQgYWRkcmVzcyB1c2VkIGluIHRoZSBJTklUICovCisJdWludDhfdCBpcHY0X2Fk
ZHJfbGVnYWw7LyogQXJlIFY0IGFkZHIgbGVnYWw/ICovCisJdWludDhfdCBpcHY2X2FkZHJfbGVn
YWw7LyogQXJlIFY2IGFkZHIgbGVnYWw/ICovCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CXVpbnQ4X3QgY29ubl9hZGRyX2xlZ2FsOworI2VuZGlmCisJdWludDhfdCBsb2NhbF9zY29wZTsJ
LyogSVB2NiBsb2NhbCBzY29wZSBmbGFnICovCisJdWludDhfdCBzaXRlX3Njb3BlOwkvKiBJUHY2
IHNpdGUgc2NvcGUgZmxhZyAqLworCisJdWludDhfdCBpcHY0X3Njb3BlOwkvKiBJUHY0IHByaXZh
dGUgYWRkciBzY29wZSAqLworCXVpbnQ4X3QgbG9vcGJhY2tfc2NvcGU7CS8qIGxvb3BiYWNrIHNj
b3BlIGluZm9ybWF0aW9uICovCisJdWludDhfdCByZXNlcnZlZFtTQ1RQX1JFU0VSVkVfU1BBQ0Vd
OyAgICAvKiBBbGlnbiB0byA2NCBiaXRzICovCisJLyoKKwkgKiBhdCB0aGUgZW5kIGlzIHRhY2tl
ZCBvbiB0aGUgSU5JVCBjaHVuayBhbmQgdGhlIElOSVQtQUNLIGNodW5rCisJICogKG1pbnVzIHRo
ZSBjb29raWUpLgorCSAqLworfSBTQ1RQX1BBQ0tFRDsKKworLyogc3RhdGUgY29va2llIHBhcmFt
ZXRlciAqLworc3RydWN0IHNjdHBfc3RhdGVfY29va2llX3BhcmFtIHsKKwlzdHJ1Y3Qgc2N0cF9w
YXJhbWhkciBwaDsKKwlzdHJ1Y3Qgc2N0cF9zdGF0ZV9jb29raWUgY29va2llOworfSBTQ1RQX1BB
Q0tFRDsKKworc3RydWN0IHNjdHBfaW5pdF9jaHVuayB7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIg
Y2g7CisJc3RydWN0IHNjdHBfaW5pdCBpbml0OworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHNj
dHBfaW5pdF9tc2cgeworCXN0cnVjdCBzY3RwaGRyIHNoOworCXN0cnVjdCBzY3RwX2luaXRfY2h1
bmsgbXNnOworfSBTQ1RQX1BBQ0tFRDsKKworLyogLi4uIHVzZWQgZm9yIGJvdGggSU5JVCBhbmQg
SU5JVCBBQ0sgKi8KKyNkZWZpbmUgc2N0cF9pbml0X2FjawkJc2N0cF9pbml0CisjZGVmaW5lIHNj
dHBfaW5pdF9hY2tfY2h1bmsJc2N0cF9pbml0X2NodW5rCisjZGVmaW5lIHNjdHBfaW5pdF9hY2tf
bXNnCXNjdHBfaW5pdF9tc2cKKworLyogU2VsZWN0aXZlIEFjayAoU0FDSykgKi8KK3N0cnVjdCBz
Y3RwX2dhcF9hY2tfYmxvY2sgeworCXVpbnQxNl90IHN0YXJ0OwkJLyogR2FwIEFjayBibG9jayBz
dGFydCAqLworCXVpbnQxNl90IGVuZDsJCS8qIEdhcCBBY2sgYmxvY2sgZW5kICovCit9IFNDVFBf
UEFDS0VEOworCitzdHJ1Y3Qgc2N0cF9zYWNrIHsKKwl1aW50MzJfdCBjdW1fdHNuX2FjazsJLyog
Y3VtdWxhdGl2ZSBUU04gQWNrICovCisJdWludDMyX3QgYV9yd25kOwkvKiB1cGRhdGVkIGFfcndu
ZCBvZiBzZW5kZXIgKi8KKwl1aW50MTZfdCBudW1fZ2FwX2Fja19ibGtzOwkvKiBudW1iZXIgb2Yg
R2FwIEFjayBibG9ja3MgKi8KKwl1aW50MTZfdCBudW1fZHVwX3RzbnM7CS8qIG51bWJlciBvZiBk
dXBsaWNhdGUgVFNOcyAqLworCS8qIHN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2sncyBmb2xsb3cg
Ki8KKwkvKiB1aW50MzJfdCBkdXBsaWNhdGVfdHNuJ3MgZm9sbG93ICovCit9IFNDVFBfUEFDS0VE
OworCitzdHJ1Y3Qgc2N0cF9zYWNrX2NodW5rIHsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsK
KwlzdHJ1Y3Qgc2N0cF9zYWNrIHNhY2s7Cit9IFNDVFBfUEFDS0VEOworCitzdHJ1Y3Qgc2N0cF9u
cl9zYWNrIHsKKwl1aW50MzJfdCBjdW1fdHNuX2FjazsJLyogY3VtdWxhdGl2ZSBUU04gQWNrICov
CisJdWludDMyX3QgYV9yd25kOwkvKiB1cGRhdGVkIGFfcnduZCBvZiBzZW5kZXIgKi8KKwl1aW50
MTZfdCBudW1fZ2FwX2Fja19ibGtzOwkvKiBudW1iZXIgb2YgR2FwIEFjayBibG9ja3MgKi8KKwl1
aW50MTZfdCBudW1fbnJfZ2FwX2Fja19ibGtzOwkvKiBudW1iZXIgb2YgTlIgR2FwIEFjayBibG9j
a3MgKi8KKwl1aW50MTZfdCBudW1fZHVwX3RzbnM7CS8qIG51bWJlciBvZiBkdXBsaWNhdGUgVFNO
cyAqLworCXVpbnQxNl90IHJlc2VydmVkOwkvKiBub3QgY3VycmVudGx5IHVzZWQqLworCS8qIHN0
cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2sncyBmb2xsb3cgKi8KKwkvKiB1aW50MzJfdCBkdXBsaWNh
dGVfdHNuJ3MgZm9sbG93ICovCit9IFNDVFBfUEFDS0VEOworCitzdHJ1Y3Qgc2N0cF9ucl9zYWNr
X2NodW5rIHsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKKwlzdHJ1Y3Qgc2N0cF9ucl9zYWNr
IG5yX3NhY2s7Cit9IFNDVFBfUEFDS0VEOworCisvKiBIZWFydGJlYXQgUmVxdWVzdCAoSEVBUlRC
RUFUKSAqLworc3RydWN0IHNjdHBfaGVhcnRiZWF0IHsKKwlzdHJ1Y3Qgc2N0cF9oZWFydGJlYXRf
aW5mb19wYXJhbSBoYl9pbmZvOworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHNjdHBfaGVhcnRi
ZWF0X2NodW5rIHsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKKwlzdHJ1Y3Qgc2N0cF9oZWFy
dGJlYXQgaGVhcnRiZWF0OworfSBTQ1RQX1BBQ0tFRDsKKworLyogLi4uIHVzZWQgZm9yIEhlYXJ0
YmVhdCBBY2sgKEhFQVJUQkVBVCBBQ0spICovCisjZGVmaW5lIHNjdHBfaGVhcnRiZWF0X2FjawkJ
c2N0cF9oZWFydGJlYXQKKyNkZWZpbmUgc2N0cF9oZWFydGJlYXRfYWNrX2NodW5rCXNjdHBfaGVh
cnRiZWF0X2NodW5rCisKKy8qIEFib3J0IEFzc3NvY2lhdGlvbiAoQUJPUlQpICovCitzdHJ1Y3Qg
c2N0cF9hYm9ydF9jaHVuayB7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7CisJLyogb3B0aW9u
YWwgZXJyb3IgY2F1c2UgbWF5IGZvbGxvdyAqLworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHNj
dHBfYWJvcnRfbXNnIHsKKwlzdHJ1Y3Qgc2N0cGhkciBzaDsKKwlzdHJ1Y3Qgc2N0cF9hYm9ydF9j
aHVuayBtc2c7Cit9IFNDVFBfUEFDS0VEOworCisvKiBTaHV0ZG93biBBc3NvY2lhdGlvbiAoU0hV
VERPV04pICovCitzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jaHVuayB7CisJc3RydWN0IHNjdHBfY2h1
bmtoZHIgY2g7CisJdWludDMyX3QgY3VtdWxhdGl2ZV90c25fYWNrOworfSBTQ1RQX1BBQ0tFRDsK
KworLyogU2h1dGRvd24gQWNrbm93bGVkZ21lbnQgKFNIVVRET1dOIEFDSykgKi8KK3N0cnVjdCBz
Y3RwX3NodXRkb3duX2Fja19jaHVuayB7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7Cit9IFND
VFBfUEFDS0VEOworCisvKiBPcGVyYXRpb24gRXJyb3IgKEVSUk9SKSAqLworc3RydWN0IHNjdHBf
ZXJyb3JfY2h1bmsgeworCXN0cnVjdCBzY3RwX2NodW5raGRyIGNoOworCS8qIG9wdGlvbmFsIGVy
cm9yIGNhdXNlcyBmb2xsb3cgKi8KK30gU0NUUF9QQUNLRUQ7CisKKy8qIENvb2tpZSBFY2hvIChD
T09LSUUgRUNITykgKi8KK3N0cnVjdCBzY3RwX2Nvb2tpZV9lY2hvX2NodW5rIHsKKwlzdHJ1Y3Qg
c2N0cF9jaHVua2hkciBjaDsKKwlzdHJ1Y3Qgc2N0cF9zdGF0ZV9jb29raWUgY29va2llOworfSBT
Q1RQX1BBQ0tFRDsKKworLyogQ29va2llIEFja25vd2xlZGdtZW50IChDT09LSUUgQUNLKSAqLwor
c3RydWN0IHNjdHBfY29va2llX2Fja19jaHVuayB7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7
Cit9IFNDVFBfUEFDS0VEOworCisvKiBFeHBsaWNpdCBDb25nZXN0aW9uIE5vdGlmaWNhdGlvbiBF
Y2hvIChFQ05FKSAqLworc3RydWN0IG9sZF9zY3RwX2VjbmVfY2h1bmsgeworCXN0cnVjdCBzY3Rw
X2NodW5raGRyIGNoOworCXVpbnQzMl90IHRzbjsKK30gU0NUUF9QQUNLRUQ7CisKK3N0cnVjdCBz
Y3RwX2VjbmVfY2h1bmsgeworCXN0cnVjdCBzY3RwX2NodW5raGRyIGNoOworCXVpbnQzMl90IHRz
bjsKKwl1aW50MzJfdCBudW1fcGt0c19zaW5jZV9jd3I7Cit9IFNDVFBfUEFDS0VEOworCisvKiBD
b25nZXN0aW9uIFdpbmRvdyBSZWR1Y2VkIChDV1IpICovCitzdHJ1Y3Qgc2N0cF9jd3JfY2h1bmsg
eworCXN0cnVjdCBzY3RwX2NodW5raGRyIGNoOworCXVpbnQzMl90IHRzbjsKK30gU0NUUF9QQUNL
RUQ7CisKKy8qIFNodXRkb3duIENvbXBsZXRlIChTSFVURE9XTiBDT01QTEVURSkgKi8KK3N0cnVj
dCBzY3RwX3NodXRkb3duX2NvbXBsZXRlX2NodW5rIHsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBj
aDsKK30gU0NUUF9QQUNLRUQ7CisKK3N0cnVjdCBzY3RwX2FkYXB0YXRpb25fbGF5ZXJfaW5kaWNh
dGlvbiB7CisJc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7CisJdWludDMyX3QgaW5kaWNhdGlvbjsK
K30gU0NUUF9QQUNLRUQ7CisKKy8qCisgKiBkcmFmdC1pZXRmLXRzdndnLWFkZGlwLXNjdHAKKyAq
LworLyogQWRkcmVzcy9TdHJlYW0gQ29uZmlndXJhdGlvbiBDaGFuZ2UgKEFTQ09ORikgKi8KK3N0
cnVjdCBzY3RwX2FzY29uZl9jaHVuayB7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7CisJdWlu
dDMyX3Qgc2VyaWFsX251bWJlcjsKKwkvKiBsb29rdXAgYWRkcmVzcyBwYXJhbWV0ZXIgKG1hbmRh
dG9yeSkgKi8KKwkvKiBhc2NvbmYgcGFyYW1ldGVycyBmb2xsb3cgKi8KK30gU0NUUF9QQUNLRUQ7
CisKKy8qIEFkZHJlc3MvU3RyZWFtIENvbmZpZ3VyYXRpb24gQWNrbm93bGVkZ2UgKEFTQ09ORiBB
Q0spICovCitzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWNrX2NodW5rIHsKKwlzdHJ1Y3Qgc2N0cF9jaHVu
a2hkciBjaDsKKwl1aW50MzJfdCBzZXJpYWxfbnVtYmVyOworCS8qIGFzY29uZiBwYXJhbWV0ZXJz
IGZvbGxvdyAqLworfSBTQ1RQX1BBQ0tFRDsKKworLyogZHJhZnQtaWV0Zi10c3Z3Zy1wcnNjdHAg
Ki8KKy8qIEZvcndhcmQgQ3VtdWxhdGl2ZSBUU04gKEZPUldBUkQgVFNOKSAqLworc3RydWN0IHNj
dHBfZm9yd2FyZF90c25fY2h1bmsgeworCXN0cnVjdCBzY3RwX2NodW5raGRyIGNoOworCXVpbnQz
Ml90IG5ld19jdW11bGF0aXZlX3RzbjsKKwkvKiBzdHJlYW0vc2VxdWVuY2UgcGFpcnMgKHNjdHBf
c3Ryc2VxKSBmb2xsb3cgKi8KK30gU0NUUF9QQUNLRUQ7CisKK3N0cnVjdCBzY3RwX3N0cnNlcSB7
CisJdWludDE2X3Qgc2lkOworCXVpbnQxNl90IHNzbjsKK30gU0NUUF9QQUNLRUQ7CisKK3N0cnVj
dCBzY3RwX3N0cnNlcV9taWQgeworCXVpbnQxNl90IHNpZDsKKwl1aW50MTZfdCBmbGFnczsKKwl1
aW50MzJfdCBtaWQ7Cit9OworCitzdHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9tc2cgeworCXN0cnVj
dCBzY3RwaGRyIHNoOworCXN0cnVjdCBzY3RwX2ZvcndhcmRfdHNuX2NodW5rIG1zZzsKK30gU0NU
UF9QQUNLRUQ7CisKKy8qIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIDQgLSAxIGFrYSAzLzcvMTEg
ZXRjLiAqLworCisjZGVmaW5lIFNDVFBfTlVNX0RCX1RPX1ZFUklGWSAzMQorCitzdHJ1Y3Qgc2N0
cF9jaHVua19kZXNjIHsKKwl1aW50OF90IGNodW5rX3R5cGU7CisJdWludDhfdCBkYXRhX2J5dGVz
W1NDVFBfTlVNX0RCX1RPX1ZFUklGWV07CisJdWludDMyX3QgdHNuX2lmYW55OworfSBTQ1RQX1BB
Q0tFRDsKKworc3RydWN0IHNjdHBfcGt0ZHJvcF9jaHVuayB7CisJc3RydWN0IHNjdHBfY2h1bmto
ZHIgY2g7CisJdWludDMyX3QgYm90dGxlX2J3OworCXVpbnQzMl90IGN1cnJlbnRfb25xOworCXVp
bnQxNl90IHRydW5jX2xlbjsKKwl1aW50MTZfdCByZXNlcnZlZDsKKwl1aW50OF90IGRhdGFbXTsK
K30gU0NUUF9QQUNLRUQ7CisKKy8qKioqKioqKioqU1RSRUFNIFJFU0VUIFNUVUZGICoqKioqKioq
KioqKioqKioqKi8KKworc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3JlcXVlc3QgeworCXN0cnVj
dCBzY3RwX3BhcmFtaGRyIHBoOworCXVpbnQzMl90IHJlcXVlc3Rfc2VxOworfSBTQ1RQX1BBQ0tF
RDsKKworc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X291dF9yZXF1ZXN0IHsKKwlzdHJ1Y3Qgc2N0
cF9wYXJhbWhkciBwaDsKKwl1aW50MzJfdCByZXF1ZXN0X3NlcTsJLyogbW9ub3RvbmljYWxseSBp
bmNyZWFzaW5nIHNlcSBubyAqLworCXVpbnQzMl90IHJlc3BvbnNlX3NlcTsJLyogaWYgYSByZXNw
b25zZSwgdGhlIHJlc3Agc2VxIG5vICovCisJdWludDMyX3Qgc2VuZF9yZXNldF9hdF90c247CS8q
IGxhc3QgVFNOIEkgYXNzaWduZWQgb3V0Ym91bmQgKi8KKwl1aW50MTZfdCBsaXN0X29mX3N0cmVh
bXNbXTsJLyogaWYgbm90IGFsbCBsaXN0IG9mIHN0cmVhbXMgKi8KK30gU0NUUF9QQUNLRUQ7CisK
K3N0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9pbl9yZXF1ZXN0IHsKKwlzdHJ1Y3Qgc2N0cF9wYXJh
bWhkciBwaDsKKwl1aW50MzJfdCByZXF1ZXN0X3NlcTsKKwl1aW50MTZfdCBsaXN0X29mX3N0cmVh
bXNbXTsJLyogaWYgbm90IGFsbCBsaXN0IG9mIHN0cmVhbXMgKi8KK30gU0NUUF9QQUNLRUQ7CisK
K3N0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF90c25fcmVxdWVzdCB7CisJc3RydWN0IHNjdHBfcGFy
YW1oZHIgcGg7CisJdWludDMyX3QgcmVxdWVzdF9zZXE7Cit9IFNDVFBfUEFDS0VEOworCitzdHJ1
Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVzcG9uc2UgeworCXN0cnVjdCBzY3RwX3BhcmFtaGRyIHBo
OworCXVpbnQzMl90IHJlc3BvbnNlX3NlcTsJLyogaWYgYSByZXNwb25zZSwgdGhlIHJlc3Agc2Vx
IG5vICovCisJdWludDMyX3QgcmVzdWx0OworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHNjdHBf
c3RyZWFtX3Jlc2V0X3Jlc3BvbnNlX3RzbiB7CisJc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7CisJ
dWludDMyX3QgcmVzcG9uc2Vfc2VxOwkvKiBpZiBhIHJlc3BvbnNlLCB0aGUgcmVzcCBzZXEgbm8g
Ki8KKwl1aW50MzJfdCByZXN1bHQ7CisJdWludDMyX3Qgc2VuZGVyc19uZXh0X3RzbjsKKwl1aW50
MzJfdCByZWNlaXZlcnNfbmV4dF90c247Cit9IFNDVFBfUEFDS0VEOworCitzdHJ1Y3Qgc2N0cF9z
dHJlYW1fcmVzZXRfYWRkX3N0cm0geworCXN0cnVjdCBzY3RwX3BhcmFtaGRyIHBoOworCXVpbnQz
Ml90IHJlcXVlc3Rfc2VxOworCXVpbnQxNl90IG51bWJlcl9vZl9zdHJlYW1zOworCXVpbnQxNl90
IHJlc2VydmVkOworfSBTQ1RQX1BBQ0tFRDsKKworI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9S
RVNVTFRfTk9USElOR19UT19ETyAgIDB4MDAwMDAwMDAgLyogWFhYOiB1bnVzZWQgKi8KKyNkZWZp
bmUgU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX1BFUkZPUk1FRCAgICAgICAweDAwMDAwMDAxCisj
ZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9ERU5JRUQgICAgICAgICAgMHgwMDAwMDAw
MgorI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfRVJSX19XUk9OR19TU04gIDB4MDAw
MDAwMDMgLyogWFhYOiB1bnVzZWQgKi8KKyNkZWZpbmUgU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxU
X0VSUl9JTl9QUk9HUkVTUyAweDAwMDAwMDA0CisjZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUX1JF
U1VMVF9FUlJfQkFEX1NFUU5PICAgMHgwMDAwMDAwNQorI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNF
VF9SRVNVTFRfSU5fUFJPR1JFU1MgICAgIDB4MDAwMDAwMDYgLyogWFhYOiB1bnVzZWQgKi8KKwor
LyoKKyAqIGNvbnZpZW5jZSBzdHJ1Y3R1cmVzLCBub3RlIHRoYXQgaWYgeW91IGFyZSBtYWtpbmcg
YSByZXF1ZXN0IGZvciBzcGVjaWZpYworICogc3RyZWFtcyB0aGVuIHRoZSByZXF1ZXN0IHdpbGwg
bmVlZCB0byBiZSBhbiBvdmVybGF5IHN0cnVjdHVyZS4KKyAqLworCitzdHJ1Y3Qgc2N0cF9zdHJl
YW1fcmVzZXRfdHNuX3JlcSB7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7CisJc3RydWN0IHNj
dHBfc3RyZWFtX3Jlc2V0X3Rzbl9yZXF1ZXN0IHNyX3JlcTsKK30gU0NUUF9QQUNLRUQ7CisKK3N0
cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9yZXNwIHsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsK
KwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVzcG9uc2Ugc3JfcmVzcDsKK30gU0NUUF9QQUNL
RUQ7CisKKy8qIHJlc3BvbmUgb25seSB2YWxpZCB3aXRoIGEgVFNOIHJlcXVlc3QgKi8KK3N0cnVj
dCBzY3RwX3N0cmVhbV9yZXNldF9yZXNwX3RzbiB7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7
CisJc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlX3RzbiBzcl9yZXNwOworfSBTQ1RQ
X1BBQ0tFRDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisKKy8qCisgKiBBdXRoZW50aWNhdGVkIGNodW5rcyBzdXBwb3J0IGRyYWZ0LWll
dGYtdHN2d2ctc2N0cC1hdXRoCisgKi8KKworLyogU2hvdWxkIHdlIG1ha2UgdGhlIG1heCBiZSAz
Mj8gKi8KKyNkZWZpbmUgU0NUUF9SQU5ET01fTUFYX1NJWkUgMjU2CitzdHJ1Y3Qgc2N0cF9hdXRo
X3JhbmRvbSB7CisJc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7LyogdHlwZSA9IDB4ODAwMiAqLwor
CXVpbnQ4X3QgcmFuZG9tX2RhdGFbXTsKK30gU0NUUF9QQUNLRUQ7CisKK3N0cnVjdCBzY3RwX2F1
dGhfY2h1bmtfbGlzdCB7CisJc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7LyogdHlwZSA9IDB4ODAw
MyAqLworCXVpbnQ4X3QgY2h1bmtfdHlwZXNbXTsKK30gU0NUUF9QQUNLRUQ7CisKK3N0cnVjdCBz
Y3RwX2F1dGhfaG1hY19hbGdvIHsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwaDsvKiB0eXBlID0g
MHg4MDA0ICovCisJdWludDE2X3QgaG1hY19pZHNbXTsKK30gU0NUUF9QQUNLRUQ7CisKK3N0cnVj
dCBzY3RwX2F1dGhfY2h1bmsgeworCXN0cnVjdCBzY3RwX2NodW5raGRyIGNoOworCXVpbnQxNl90
IHNoYXJlZF9rZXlfaWQ7CisJdWludDE2X3QgaG1hY19pZDsKKwl1aW50OF90IGhtYWNbXTsKK30g
U0NUUF9QQUNLRUQ7CisKKy8qCisgKiB3ZSBwcmUtcmVzZXJ2ZSBlbm91Z2ggcm9vbSBmb3IgYSBF
Q05FIG9yIENXUiBBTkQgYSBTQUNLIHdpdGggbm8gbWlzc2luZworICogcGllY2VzLiBJZiBFTkNF
IGlzIG1pc3Npbmcgd2UgY291bGQgaGF2ZSBhIGNvdXBsZSBvZiBibG9ja3MuIFRoaXMgd2F5IHdl
CisgKiBvcHRpbWl6ZSBzbyB3ZSBNT1NUIGxpa2VseSBjYW4gYnVuZGxlIGEgU0FDSy9FQ04gd2l0
aCB0aGUgc21hbGxlc3Qgc2l6ZQorICogZGF0YSBjaHVuayBJIHdpbGwgc3BsaXQgaW50by4gV2Ug
Y291bGQgaW5jcmVhc2UgdGhyb3VnaHB1dCBzbGlnaHRseSBieQorICogdGFraW5nIG91dCB0aGVz
ZSB0d28gYnV0IHRoZSAgMjQtc2Fjay84LUNXUiBpLmUuIDMyIGJ5dGVzIEkgcHJlLXJlc2VydmUg
SQorICogZmVlbCBpcyB3b3J0aCBpdCBmb3Igbm93LgorICovCisjaWZuZGVmIFNDVFBfTUFYX09W
RVJIRUFECisjaWZkZWYgSU5FVDYKKyNkZWZpbmUgU0NUUF9NQVhfT1ZFUkhFQUQgKHNpemVvZihz
dHJ1Y3Qgc2N0cF9kYXRhX2NodW5rKSArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVvZihzdHJ1Y3Qgc2N0cGhkcikgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
b2Yoc3RydWN0IHNjdHBfZWNuZV9jaHVuaykgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplb2Yoc3RydWN0IHNjdHBfc2Fja19jaHVuaykgKyBcCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplb2Yoc3RydWN0IGlwNl9oZHIpKQorCisjZGVmaW5lIFNDVFBfTUVEX09WRVJI
RUFEIChzaXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuaykgKyBcCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBoZHIpICsgXAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSkKKworI2RlZmluZSBTQ1RQX01JTl9PVkVS
SEVBRCAoc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSArIFwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpCisKKyNlbHNlCisjZGVmaW5lIFNDVFBfTUFYX09W
RVJIRUFEIChzaXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuaykgKyBcCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBoZHIpICsgXAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2VjbmVfY2h1bmspICsgXAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3NhY2tfY2h1bmspICsgXAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpcCkpCisKKyNkZWZpbmUgU0NU
UF9NRURfT1ZFUkhFQUQgKHNpemVvZihzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rKSArIFwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKyBcCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGlwKSkKKworI2RlZmluZSBTQ1RQX01J
Tl9PVkVSSEVBRCAoc2l6ZW9mKHN0cnVjdCBpcCkgKyBcCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKQorCisjZW5kaWYgLyogSU5FVDYgKi8KKyNlbmRp
ZiAvKiAhU0NUUF9NQVhfT1ZFUkhFQUQgKi8KKworI2RlZmluZSBTQ1RQX01FRF9WNF9PVkVSSEVB
RCAoc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspICsgXAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSArIFwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaXApKQorCisjZGVmaW5lIFNDVFBfTUlOX1Y0X09W
RVJIRUFEIChzaXplb2Yoc3RydWN0IGlwKSArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpCisKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpbmNsdWRlIDxwYWNrb2ZmLmg+CisjZW5kaWYKKyNpZiBk
ZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI3ByYWdtYSBwYWNrKHBv
cCkKKyNlbmRpZgorI3VuZGVmIFNDVFBfUEFDS0VECisjZW5kaWYJCQkJLyogIV9fc2N0cF9oZWFk
ZXJfaF9fICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9p
bmRhdGEuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2luZGF0YS5jCm5ldyBm
aWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMC4uZmVkYzE0ZjBlMGIwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5kYXRhLmMKQEAg
LTAsMCArMSw1ODAwIEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1D
bGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5
IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykg
MjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIGEpIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj
ZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKgorICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
I2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworI2VuZGlmCisK
KyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAm
JiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjZW5kaWYK
KyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5
c2N0bC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9oZWFkZXIuaD4KKyNpbmNsdWRlIDxuZXRp
bmV0L3NjdHBfcGNiLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgorI2luY2x1ZGUg
PG5ldGluZXQvc2N0cF9vdXRwdXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdWlvLmg+Cisj
aW5jbHVkZSA8bmV0aW5ldC9zY3RwX2F1dGguaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdGlt
ZXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYXNjb25mLmg+CisjaW5jbHVkZSA8bmV0aW5l
dC9zY3RwX2luZGF0YS5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9ic2RfYWRkci5oPgorI2lu
Y2x1ZGUgPG5ldGluZXQvc2N0cF9pbnB1dC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9jcmMz
Mi5oPgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2xvY2tfYnNkLmg+CisjZW5kaWYKKy8qCisgKiBOT1RF
UzogT24gdGhlIG91dGJvdW5kIHNpZGUgb2YgdGhpbmdzIEkgbmVlZCB0byBjaGVjayB0aGUgc2Fj
ayB0aW1lciB0bworICogc2VlIGlmIEkgc2hvdWxkIGdlbmVyYXRlIGEgc2FjayBpbnRvIHRoZSBj
aHVuayBxdWV1ZSAoaWYgSSBoYXZlIGRhdGEgdG8KKyAqIHNlbmQgdGhhdCBpcyBhbmQgd2lsbCBi
ZSBzZW5kaW5nIGl0IC4uIGZvciBidW5kbGluZy4KKyAqCisgKiBUaGUgY2FsbGJhY2sgaW4gc2N0
cF91c3JyZXEuYyB3aWxsIGdldCBjYWxsZWQgd2hlbiB0aGUgc29ja2V0IGlzIHJlYWQgZnJvbS4K
KyAqIFRoaXMgd2lsbCBjYXVzZSBzY3RwX3NlcnZpY2VfcXVldWVzKCkgdG8gZ2V0IGNhbGxlZCBv
biB0aGUgdG9wIGVudHJ5IGluCisgKiB0aGUgbGlzdC4KKyAqLworc3RhdGljIHVpbnQzMl90Citz
Y3RwX2FkZF9jaGtfdG9fY29udHJvbChzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJv
bCwKKwkJCXN0cnVjdCBzY3RwX3N0cmVhbV9pbiAqc3RybSwKKwkJCXN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwKKwkJCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCQkJc3RydWN0IHNjdHBf
dG1pdF9jaHVuayAqY2hrLCBpbnQgaG9sZF9ybG9jayk7CisKK3ZvaWQKK3NjdHBfc2V0X3J3bmQo
c3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKK3sK
Kwlhc29jLT5teV9yd25kID0gc2N0cF9jYWxjX3J3bmQoc3RjYiwgYXNvYyk7Cit9CisKKy8qIENh
bGN1bGF0ZSB3aGF0IHRoZSByd25kIHdvdWxkIGJlICovCit1aW50MzJfdAorc2N0cF9jYWxjX3J3
bmQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykK
K3sKKwl1aW50MzJfdCBjYWxjID0gMDsKKworCS8qCisJICogVGhpcyBpcyByZWFsbHkgc2V0IHdy
b25nIHdpdGggcmVzcGVjdCB0byBhIDEtMi1tIHNvY2tldC4gU2luY2UKKwkgKiB0aGUgc2JfY2Mg
aXMgdGhlIGNvdW50IHRoYXQgZXZlcnlvbmUgYXMgcHV0IHVwLiBXaGVuIHdlIHJlLXdyaXRlCisJ
ICogc2N0cF9zb3JlY2VpdmUgdGhlbiB3ZSB3aWxsIGZpeCB0aGlzIHNvIHRoYXQgT05MWSB0aGlz
CisJICogYXNzb2NpYXRpb25zIGRhdGEgaXMgdGFrZW4gaW50byBhY2NvdW50LgorCSAqLworCWlm
IChzdGNiLT5zY3RwX3NvY2tldCA9PSBOVUxMKSB7CisJCXJldHVybiAoY2FsYyk7CisJfQorCisJ
S0FTU0VSVChhc29jLT5jbnRfb25fcmVhc21fcXVldWUgPiAwIHx8IGFzb2MtPnNpemVfb25fcmVh
c21fcXVldWUgPT0gMCwKKwkgICAgICAgICgic2l6ZV9vbl9yZWFzbV9xdWV1ZSBpcyAldSIsIGFz
b2MtPnNpemVfb25fcmVhc21fcXVldWUpKTsKKwlLQVNTRVJUKGFzb2MtPmNudF9vbl9hbGxfc3Ry
ZWFtcyA+IDAgfHwgYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyA9PSAwLAorCSAgICAgICAgKCJz
aXplX29uX2FsbF9zdHJlYW1zIGlzICV1IiwgYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcykpOwor
CWlmIChzdGNiLT5hc29jLnNiX2NjID09IDAgJiYKKwkgICAgYXNvYy0+Y250X29uX3JlYXNtX3F1
ZXVlID09IDAgJiYKKwkgICAgYXNvYy0+Y250X29uX2FsbF9zdHJlYW1zID09IDApIHsKKwkJLyog
RnVsbCByd25kIGdyYW50ZWQgKi8KKwkJY2FsYyA9IG1heChTQ1RQX1NCX0xJTUlUX1JDVihzdGNi
LT5zY3RwX3NvY2tldCksIFNDVFBfTUlOSU1BTF9SV05EKTsKKwkJcmV0dXJuIChjYWxjKTsKKwl9
CisJLyogZ2V0IGFjdHVhbCBzcGFjZSAqLworCWNhbGMgPSAodWludDMyX3QpIHNjdHBfc2JzcGFj
ZSgmc3RjYi0+YXNvYywgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YpOworCS8qCisJICogdGFr
ZSBvdXQgd2hhdCBoYXMgTk9UIGJlZW4gcHV0IG9uIHNvY2tldCBxdWV1ZSBhbmQgd2UgeWV0IGhv
bGQKKwkgKiBmb3IgcHV0dGluZyB1cC4KKwkgKi8KKwljYWxjID0gc2N0cF9zYnNwYWNlX3N1Yihj
YWxjLCAodWludDMyX3QpKGFzb2MtPnNpemVfb25fcmVhc21fcXVldWUgKworCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNvYy0+Y250X29uX3JlYXNtX3F1ZXVlICog
TVNJWkUpKTsKKwljYWxjID0gc2N0cF9zYnNwYWNlX3N1YihjYWxjLCAodWludDMyX3QpKGFzb2Mt
PnNpemVfb25fYWxsX3N0cmVhbXMgKworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXNvYy0+Y250X29uX2FsbF9zdHJlYW1zICogTVNJWkUpKTsKKwlpZiAoY2FsYyA9
PSAwKSB7CisJCS8qIG91dCBvZiBzcGFjZSAqLworCQlyZXR1cm4gKGNhbGMpOworCX0KKworCS8q
IHdoYXQgaXMgdGhlIG92ZXJoZWFkIG9mIGFsbCB0aGVzZSByd25kJ3MgKi8KKwljYWxjID0gc2N0
cF9zYnNwYWNlX3N1YihjYWxjLCBzdGNiLT5hc29jLm15X3J3bmRfY29udHJvbF9sZW4pOworCS8q
IElmIHRoZSB3aW5kb3cgZ2V0cyB0b28gc21hbGwgZHVlIHRvIGN0cmwtc3R1ZmYsIHJlZHVjZSBp
dAorCSAqIHRvIDEsIGV2ZW4gaXQgaXMgMC4gU1dTIGVuZ2FnZWQKKwkgKi8KKwlpZiAoY2FsYyA8
IHN0Y2ItPmFzb2MubXlfcnduZF9jb250cm9sX2xlbikgeworCQljYWxjID0gMTsKKwl9CisJcmV0
dXJuIChjYWxjKTsKK30KKworLyoKKyAqIEJ1aWxkIG91dCBvdXIgcmVhZHEgZW50cnkgYmFzZWQg
b24gdGhlIGluY29taW5nIHBhY2tldC4KKyAqLworc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQg
Kgorc2N0cF9idWlsZF9yZWFkcV9lbnRyeShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgc3Ry
dWN0IHNjdHBfbmV0cyAqbmV0LAorICAgIHVpbnQzMl90IHRzbiwgdWludDMyX3QgcHBpZCwKKyAg
ICB1aW50MzJfdCBjb250ZXh0LCB1aW50MTZfdCBzaWQsCisgICAgdWludDMyX3QgbWlkLCB1aW50
OF90IGZsYWdzLAorICAgIHN0cnVjdCBtYnVmICpkbSkKK3sKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRf
dG9fcmVhZCAqcmVhZF9xdWV1ZV9lID0gTlVMTDsKKworCXNjdHBfYWxsb2NfYV9yZWFkcShzdGNi
LCByZWFkX3F1ZXVlX2UpOworCWlmIChyZWFkX3F1ZXVlX2UgPT0gTlVMTCkgeworCQlnb3RvIGZh
aWxlZF9idWlsZDsKKwl9CisJbWVtc2V0KHJlYWRfcXVldWVfZSwgMCwgc2l6ZW9mKHN0cnVjdCBz
Y3RwX3F1ZXVlZF90b19yZWFkKSk7CisJcmVhZF9xdWV1ZV9lLT5zaW5mb19zdHJlYW0gPSBzaWQ7
CisJcmVhZF9xdWV1ZV9lLT5zaW5mb19mbGFncyA9IChmbGFncyA8PCA4KTsKKwlyZWFkX3F1ZXVl
X2UtPnNpbmZvX3BwaWQgPSBwcGlkOworCXJlYWRfcXVldWVfZS0+c2luZm9fY29udGV4dCA9IGNv
bnRleHQ7CisJcmVhZF9xdWV1ZV9lLT5zaW5mb190c24gPSB0c247CisJcmVhZF9xdWV1ZV9lLT5z
aW5mb19jdW10c24gPSB0c247CisJcmVhZF9xdWV1ZV9lLT5zaW5mb19hc3NvY19pZCA9IHNjdHBf
Z2V0X2Fzc29jaWQoc3RjYik7CisJcmVhZF9xdWV1ZV9lLT5taWQgPSBtaWQ7CisJcmVhZF9xdWV1
ZV9lLT50b3BfZnNuID0gcmVhZF9xdWV1ZV9lLT5mc25faW5jbHVkZWQgPSAweGZmZmZmZmZmOwor
CVRBSUxRX0lOSVQoJnJlYWRfcXVldWVfZS0+cmVhc20pOworCXJlYWRfcXVldWVfZS0+d2hvRnJv
bSA9IG5ldDsKKwlhdG9taWNfYWRkX2ludCgmbmV0LT5yZWZfY291bnQsIDEpOworCXJlYWRfcXVl
dWVfZS0+ZGF0YSA9IGRtOworCXJlYWRfcXVldWVfZS0+c3RjYiA9IHN0Y2I7CisJcmVhZF9xdWV1
ZV9lLT5wb3J0X2Zyb20gPSBzdGNiLT5ycG9ydDsKKwlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFND
VFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKKwkJcmVhZF9xdWV1ZV9lLT5kb19ub3RfcmVm
X3N0Y2IgPSAxOworCX0KK2ZhaWxlZF9idWlsZDoKKwlyZXR1cm4gKHJlYWRfcXVldWVfZSk7Cit9
CisKK3N0cnVjdCBtYnVmICoKK3NjdHBfYnVpbGRfY3RsX25jaHVuayhzdHJ1Y3Qgc2N0cF9pbnBj
YiAqaW5wLCBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzaW5mbykKK3sKKwlzdHJ1Y3Qgc2N0cF9l
eHRyY3ZpbmZvICpzZWluZm87CisJc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqb3V0aW5mbzsKKwlz
dHJ1Y3Qgc2N0cF9yY3ZpbmZvICpyY3ZpbmZvOworCXN0cnVjdCBzY3RwX254dGluZm8gKm54dGlu
Zm87CisjaWYgZGVmaW5lZChfV0lOMzIpCisJV1NBQ01TR0hEUiAqY21oOworI2Vsc2UKKwlzdHJ1
Y3QgY21zZ2hkciAqY21oOworI2VuZGlmCisJc3RydWN0IG1idWYgKnJldDsKKwlpbnQgbGVuOwor
CWludCB1c2VfZXh0ZW5kZWQ7CisJaW50IHByb3ZpZGVfbnh0OworCisJaWYgKHNjdHBfaXNfZmVh
dHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWREFUQUlPRVZOVCkgJiYKKwkgICAgc2N0
cF9pc19mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZSQ1ZJTkZPKSAmJgorCSAg
ICBzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVk5YVElORk8pKSB7
CisJCS8qIHVzZXIgZG9lcyBub3Qgd2FudCBhbnkgYW5jaWxsYXJ5IGRhdGEgKi8KKwkJcmV0dXJu
IChOVUxMKTsKKwl9CisKKwlsZW4gPSAwOworCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBT
Q1RQX1BDQl9GTEFHU19SRUNWUkNWSU5GTykpIHsKKwkJbGVuICs9IENNU0dfU1BBQ0Uoc2l6ZW9m
KHN0cnVjdCBzY3RwX3JjdmluZm8pKTsKKwl9CisJc2VpbmZvID0gKHN0cnVjdCBzY3RwX2V4dHJj
dmluZm8gKilzaW5mbzsKKwlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxB
R1NfUkVDVk5YVElORk8pICYmCisJICAgIChzZWluZm8tPnNlcmluZm9fbmV4dF9mbGFncyAmIFND
VFBfTkVYVF9NU0dfQVZBSUwpKSB7CisJCXByb3ZpZGVfbnh0ID0gMTsKKwkJbGVuICs9IENNU0df
U1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzY3RwX254dGluZm8pKTsKKwl9IGVsc2UgeworCQlwcm92aWRl
X254dCA9IDA7CisJfQorCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFH
U19SRUNWREFUQUlPRVZOVCkpIHsKKwkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBf
UENCX0ZMQUdTX0VYVF9SQ1ZJTkZPKSkgeworCQkJdXNlX2V4dGVuZGVkID0gMTsKKwkJCWxlbiAr
PSBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2N0cF9leHRyY3ZpbmZvKSk7CisJCX0gZWxzZSB7
CisJCQl1c2VfZXh0ZW5kZWQgPSAwOworCQkJbGVuICs9IENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVj
dCBzY3RwX3NuZHJjdmluZm8pKTsKKwkJfQorCX0gZWxzZSB7CisJCXVzZV9leHRlbmRlZCA9IDA7
CisJfQorCisJcmV0ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGxlbiwgMCwgTV9OT1dBSVQsIDEs
IE1UX0RBVEEpOworCWlmIChyZXQgPT0gTlVMTCkgeworCQkvKiBObyBzcGFjZSAqLworCQlyZXR1
cm4gKHJldCk7CisJfQorCVNDVFBfQlVGX0xFTihyZXQpID0gMDsKKworCS8qIFdlIG5lZWQgYSBD
TVNHIGhlYWRlciBmb2xsb3dlZCBieSB0aGUgc3RydWN0ICovCisjaWYgZGVmaW5lZChfV0lOMzIp
CisJY21oID0gbXRvZChyZXQsIFdTQUNNU0dIRFIgKik7CisjZWxzZQorCWNtaCA9IG10b2QocmV0
LCBzdHJ1Y3QgY21zZ2hkciAqKTsKKyNlbmRpZgorCS8qCisJICogTWFrZSBzdXJlIHRoYXQgdGhl
cmUgaXMgbm8gdW4taW5pdGlhbGl6ZWQgcGFkZGluZyBiZXR3ZWVuCisJICogdGhlIGNtc2cgaGVh
ZGVyIGFuZCBjbXNnIGRhdGEgYW5kIGFmdGVyIHRoZSBjbXNnIGRhdGEuCisJICovCisJbWVtc2V0
KGNtaCwgMCwgbGVuKTsKKwlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxB
R1NfUkVDVlJDVklORk8pKSB7CisJCWNtaC0+Y21zZ19sZXZlbCA9IElQUFJPVE9fU0NUUDsKKwkJ
Y21oLT5jbXNnX2xlbiA9IENNU0dfTEVOKHNpemVvZihzdHJ1Y3Qgc2N0cF9yY3ZpbmZvKSk7CisJ
CWNtaC0+Y21zZ190eXBlID0gU0NUUF9SQ1ZJTkZPOworCQlyY3ZpbmZvID0gKHN0cnVjdCBzY3Rw
X3JjdmluZm8gKilDTVNHX0RBVEEoY21oKTsKKwkJcmN2aW5mby0+cmN2X3NpZCA9IHNpbmZvLT5z
aW5mb19zdHJlYW07CisJCXJjdmluZm8tPnJjdl9zc24gPSBzaW5mby0+c2luZm9fc3NuOworCQly
Y3ZpbmZvLT5yY3ZfZmxhZ3MgPSBzaW5mby0+c2luZm9fZmxhZ3M7CisJCXJjdmluZm8tPnJjdl9w
cGlkID0gc2luZm8tPnNpbmZvX3BwaWQ7CisJCXJjdmluZm8tPnJjdl90c24gPSBzaW5mby0+c2lu
Zm9fdHNuOworCQlyY3ZpbmZvLT5yY3ZfY3VtdHNuID0gc2luZm8tPnNpbmZvX2N1bXRzbjsKKwkJ
cmN2aW5mby0+cmN2X2NvbnRleHQgPSBzaW5mby0+c2luZm9fY29udGV4dDsKKwkJcmN2aW5mby0+
cmN2X2Fzc29jX2lkID0gc2luZm8tPnNpbmZvX2Fzc29jX2lkOworI2lmIGRlZmluZWQoX1dJTjMy
KQorCQljbWggPSAoV1NBQ01TR0hEUiAqKSgoY2FkZHJfdCljbWggKyBDTVNHX1NQQUNFKHNpemVv
ZihzdHJ1Y3Qgc2N0cF9yY3ZpbmZvKSkpOworI2Vsc2UKKwkJY21oID0gKHN0cnVjdCBjbXNnaGRy
ICopKChjYWRkcl90KWNtaCArIENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzY3RwX3JjdmluZm8p
KSk7CisjZW5kaWYKKwkJU0NUUF9CVUZfTEVOKHJldCkgKz0gQ01TR19TUEFDRShzaXplb2Yoc3Ry
dWN0IHNjdHBfcmN2aW5mbykpOworCX0KKwlpZiAocHJvdmlkZV9ueHQpIHsKKwkJY21oLT5jbXNn
X2xldmVsID0gSVBQUk9UT19TQ1RQOworCQljbWgtPmNtc2dfbGVuID0gQ01TR19MRU4oc2l6ZW9m
KHN0cnVjdCBzY3RwX254dGluZm8pKTsKKwkJY21oLT5jbXNnX3R5cGUgPSBTQ1RQX05YVElORk87
CisJCW54dGluZm8gPSAoc3RydWN0IHNjdHBfbnh0aW5mbyAqKUNNU0dfREFUQShjbWgpOworCQlu
eHRpbmZvLT5ueHRfc2lkID0gc2VpbmZvLT5zZXJpbmZvX25leHRfc3RyZWFtOworCQlueHRpbmZv
LT5ueHRfZmxhZ3MgPSAwOworCQlpZiAoc2VpbmZvLT5zZXJpbmZvX25leHRfZmxhZ3MgJiBTQ1RQ
X05FWFRfTVNHX0lTX1VOT1JERVJFRCkgeworCQkJbnh0aW5mby0+bnh0X2ZsYWdzIHw9IFNDVFBf
VU5PUkRFUkVEOworCQl9CisJCWlmIChzZWluZm8tPnNlcmluZm9fbmV4dF9mbGFncyAmIFNDVFBf
TkVYVF9NU0dfSVNfTk9USUZJQ0FUSU9OKSB7CisJCQlueHRpbmZvLT5ueHRfZmxhZ3MgfD0gU0NU
UF9OT1RJRklDQVRJT047CisJCX0KKwkJaWYgKHNlaW5mby0+c2VyaW5mb19uZXh0X2ZsYWdzICYg
U0NUUF9ORVhUX01TR19JU0NPTVBMRVRFKSB7CisJCQlueHRpbmZvLT5ueHRfZmxhZ3MgfD0gU0NU
UF9DT01QTEVURTsKKwkJfQorCQlueHRpbmZvLT5ueHRfcHBpZCA9IHNlaW5mby0+c2VyaW5mb19u
ZXh0X3BwaWQ7CisJCW54dGluZm8tPm54dF9sZW5ndGggPSBzZWluZm8tPnNlcmluZm9fbmV4dF9s
ZW5ndGg7CisJCW54dGluZm8tPm54dF9hc3NvY19pZCA9IHNlaW5mby0+c2VyaW5mb19uZXh0X2Fp
ZDsKKyNpZiBkZWZpbmVkKF9XSU4zMikKKwkJY21oID0gKFdTQUNNU0dIRFIgKikoKGNhZGRyX3Qp
Y21oICsgQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNjdHBfbnh0aW5mbykpKTsKKyNlbHNlCisJ
CWNtaCA9IChzdHJ1Y3QgY21zZ2hkciAqKSgoY2FkZHJfdCljbWggKyBDTVNHX1NQQUNFKHNpemVv
ZihzdHJ1Y3Qgc2N0cF9ueHRpbmZvKSkpOworI2VuZGlmCisJCVNDVFBfQlVGX0xFTihyZXQpICs9
IENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzY3RwX254dGluZm8pKTsKKwl9CisJaWYgKHNjdHBf
aXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZEQVRBSU9FVk5UKSkgeworCQlj
bWgtPmNtc2dfbGV2ZWwgPSBJUFBST1RPX1NDVFA7CisJCW91dGluZm8gPSAoc3RydWN0IHNjdHBf
c25kcmN2aW5mbyAqKUNNU0dfREFUQShjbWgpOworCQlpZiAodXNlX2V4dGVuZGVkKSB7CisJCQlj
bWgtPmNtc2dfbGVuID0gQ01TR19MRU4oc2l6ZW9mKHN0cnVjdCBzY3RwX2V4dHJjdmluZm8pKTsK
KwkJCWNtaC0+Y21zZ190eXBlID0gU0NUUF9FWFRSQ1Y7CisJCQltZW1jcHkob3V0aW5mbywgc2lu
Zm8sIHNpemVvZihzdHJ1Y3Qgc2N0cF9leHRyY3ZpbmZvKSk7CisJCQlTQ1RQX0JVRl9MRU4ocmV0
KSArPSBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2N0cF9leHRyY3ZpbmZvKSk7CisJCX0gZWxz
ZSB7CisJCQljbWgtPmNtc2dfbGVuID0gQ01TR19MRU4oc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJj
dmluZm8pKTsKKwkJCWNtaC0+Y21zZ190eXBlID0gU0NUUF9TTkRSQ1Y7CisJCQkqb3V0aW5mbyA9
ICpzaW5mbzsKKwkJCVNDVFBfQlVGX0xFTihyZXQpICs9IENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVj
dCBzY3RwX3NuZHJjdmluZm8pKTsKKwkJfQorCX0KKwlyZXR1cm4gKHJldCk7Cit9CisKK3N0YXRp
YyB2b2lkCitzY3RwX21hcmtfbm9uX3Jldm9rYWJsZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAq
YXNvYywgdWludDMyX3QgdHNuKQoreworCXVpbnQzMl90IGdhcCwgaTsKKwlpbnQgaW5fciwgaW5f
bnI7CisKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RvX2RyYWluKSA9PSAwKSB7CisJCXJl
dHVybjsKKwl9CisJaWYgKFNDVFBfVFNOX0dFKGFzb2MtPmN1bXVsYXRpdmVfdHNuLCB0c24pKSB7
CisJCS8qCisJCSAqIFRoaXMgdHNuIGlzIGJlaGluZCB0aGUgY3VtIGFjayBhbmQgdGh1cyB3ZSBk
b24ndAorCQkgKiBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0IGJlaW5nIG1vdmVkIGZyb20gb25lIHRv
IHRoZSBvdGhlci4KKwkJICovCisJCXJldHVybjsKKwl9CisJU0NUUF9DQUxDX1RTTl9UT19HQVAo
Z2FwLCB0c24sIGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24pOworCWluX3IgPSBTQ1RQX0lT
X1RTTl9QUkVTRU5UKGFzb2MtPm1hcHBpbmdfYXJyYXksIGdhcCk7CisJaW5fbnIgPSBTQ1RQX0lT
X1RTTl9QUkVTRU5UKGFzb2MtPm5yX21hcHBpbmdfYXJyYXksIGdhcCk7CisJS0FTU0VSVChpbl9y
IHx8IGluX25yLCAoIiVzOiBUaGluZ3MgYXJlIHJlYWxseSBtZXNzZWQgdXAgbm93IiwgX19mdW5j
X18pKTsKKwlpZiAoIWluX25yKSB7CisJCVNDVFBfU0VUX1RTTl9QUkVTRU5UKGFzb2MtPm5yX21h
cHBpbmdfYXJyYXksIGdhcCk7CisJCWlmIChTQ1RQX1RTTl9HVCh0c24sIGFzb2MtPmhpZ2hlc3Rf
dHNuX2luc2lkZV9ucl9tYXApKSB7CisJCQlhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFw
ID0gdHNuOworCQl9CisJfQorCWlmIChpbl9yKSB7CisJCVNDVFBfVU5TRVRfVFNOX1BSRVNFTlQo
YXNvYy0+bWFwcGluZ19hcnJheSwgZ2FwKTsKKwkJaWYgKHRzbiA9PSBhc29jLT5oaWdoZXN0X3Rz
bl9pbnNpZGVfbWFwKSB7CisJCQkvKiBXZSBtdXN0IGJhY2sgZG93biB0byBzZWUgd2hhdCB0aGUg
bmV3IGhpZ2hlc3QgaXMuICovCisJCQlmb3IgKGkgPSB0c24gLSAxOyBTQ1RQX1RTTl9HRShpLCBh
c29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuKTsgaS0tKSB7CisJCQkJU0NUUF9DQUxDX1RTTl9U
T19HQVAoZ2FwLCBpLCBhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuKTsKKwkJCQlpZiAoU0NU
UF9JU19UU05fUFJFU0VOVChhc29jLT5tYXBwaW5nX2FycmF5LCBnYXApKSB7CisJCQkJCWFzb2Mt
PmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAgPSBpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJ
CQlpZiAoIVNDVFBfVFNOX0dFKGksIGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24pKSB7CisJ
CQkJYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCA9IGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFz
ZV90c24gLSAxOworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgaW50CitzY3RwX3BsYWNlX2Nv
bnRyb2xfaW5fc3RyZWFtKHN0cnVjdCBzY3RwX3N0cmVhbV9pbiAqc3RybSwKKwkJCSAgICAgc3Ry
dWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisJCQkgICAgIHN0cnVjdCBzY3RwX3F1ZXVlZF90
b19yZWFkICpjb250cm9sKQoreworCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICphdDsKKwlz
dHJ1Y3Qgc2N0cF9yZWFkaGVhZCAqcTsKKwl1aW50OF90IGZsYWdzLCB1bm9yZGVyZWQ7CisKKwlm
bGFncyA9IChjb250cm9sLT5zaW5mb19mbGFncyA+PiA4KTsKKwl1bm9yZGVyZWQgPSBmbGFncyAm
IFNDVFBfREFUQV9VTk9SREVSRUQ7CisJaWYgKHVub3JkZXJlZCkgeworCQlxID0gJnN0cm0tPnVu
b19pbnF1ZXVlOworCQlpZiAoYXNvYy0+aWRhdGFfc3VwcG9ydGVkID09IDApIHsKKwkJCWlmICgh
VEFJTFFfRU1QVFkocSkpIHsKKwkJCQkvKiBPbmx5IG9uZSBzdHJlYW0gY2FuIGJlIGhlcmUgaW4g
b2xkIHN0eWxlICAtLSBhYm9ydCAqLworCQkJCXJldHVybiAoLTEpOworCQkJfQorCQkJVEFJTFFf
SU5TRVJUX1RBSUwocSwgY29udHJvbCwgbmV4dF9pbnN0cm0pOworCQkJY29udHJvbC0+b25fc3Ry
bV9xID0gU0NUUF9PTl9VTk9SREVSRUQ7CisJCQlyZXR1cm4gKDApOworCQl9CisJfSBlbHNlIHsK
KwkJcSA9ICZzdHJtLT5pbnF1ZXVlOworCX0KKwlpZiAoKGZsYWdzICYgU0NUUF9EQVRBX05PVF9G
UkFHKSA9PSBTQ1RQX0RBVEFfTk9UX0ZSQUcpIHsKKwkJY29udHJvbC0+ZW5kX2FkZGVkID0gMTsK
KwkJY29udHJvbC0+Zmlyc3RfZnJhZ19zZWVuID0gMTsKKwkJY29udHJvbC0+bGFzdF9mcmFnX3Nl
ZW4gPSAxOworCX0KKwlpZiAoVEFJTFFfRU1QVFkocSkpIHsKKwkJLyogRW1wdHkgcXVldWUgKi8K
KwkJVEFJTFFfSU5TRVJUX0hFQUQocSwgY29udHJvbCwgbmV4dF9pbnN0cm0pOworCQlpZiAodW5v
cmRlcmVkKSB7CisJCQljb250cm9sLT5vbl9zdHJtX3EgPSBTQ1RQX09OX1VOT1JERVJFRDsKKwkJ
fSBlbHNlIHsKKwkJCWNvbnRyb2wtPm9uX3N0cm1fcSA9IFNDVFBfT05fT1JERVJFRDsKKwkJfQor
CQlyZXR1cm4gKDApOworCX0gZWxzZSB7CisJCVRBSUxRX0ZPUkVBQ0goYXQsIHEsIG5leHRfaW5z
dHJtKSB7CisJCQlpZiAoU0NUUF9NSURfR1QoYXNvYy0+aWRhdGFfc3VwcG9ydGVkLCBhdC0+bWlk
LCBjb250cm9sLT5taWQpKSB7CisJCQkJLyoKKwkJCQkgKiBvbmUgaW4gcXVldWUgaXMgYmlnZ2Vy
IHRoYW4gdGhlCisJCQkJICogbmV3IG9uZSwgaW5zZXJ0IGJlZm9yZSB0aGlzIG9uZQorCQkJCSAq
LworCQkJCVRBSUxRX0lOU0VSVF9CRUZPUkUoYXQsIGNvbnRyb2wsIG5leHRfaW5zdHJtKTsKKwkJ
CQlpZiAodW5vcmRlcmVkKSB7CisJCQkJCWNvbnRyb2wtPm9uX3N0cm1fcSA9IFNDVFBfT05fVU5P
UkRFUkVEOworCQkJCX0gZWxzZSB7CisJCQkJCWNvbnRyb2wtPm9uX3N0cm1fcSA9IFNDVFBfT05f
T1JERVJFRDsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9IGVsc2UgaWYgKFNDVFBfTUlEX0VRKGFz
b2MtPmlkYXRhX3N1cHBvcnRlZCwgYXQtPm1pZCwgY29udHJvbC0+bWlkKSkgeworCQkJCS8qCisJ
CQkJICogR2FrLCBIZSBzZW50IG1lIGEgZHVwbGljYXRlIG1zZworCQkJCSAqIGlkIG51bWJlcj8/
IHJldHVybiAtMSB0byBhYm9ydC4KKwkJCQkgKi8KKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0gZWxz
ZSB7CisJCQkJaWYgKFRBSUxRX05FWFQoYXQsIG5leHRfaW5zdHJtKSA9PSBOVUxMKSB7CisJCQkJ
CS8qCisJCQkJCSAqIFdlIGFyZSBhdCB0aGUgZW5kLCBpbnNlcnQKKwkJCQkJICogaXQgYWZ0ZXIg
dGhpcyBvbmUKKwkJCQkJICovCisJCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2lu
Z19sZXZlbCkgJiBTQ1RQX1NUUl9MT0dHSU5HX0VOQUJMRSkgeworCQkJCQkJc2N0cF9sb2dfc3Ry
bV9kZWwoY29udHJvbCwgYXQsCisJCQkJCQkJCSAgU0NUUF9TVFJfTE9HX0ZST01fSU5TRVJUX1RM
KTsKKwkJCQkJfQorCQkJCQlUQUlMUV9JTlNFUlRfQUZURVIocSwgYXQsIGNvbnRyb2wsIG5leHRf
aW5zdHJtKTsKKwkJCQkJaWYgKHVub3JkZXJlZCkgeworCQkJCQkJY29udHJvbC0+b25fc3RybV9x
ID0gU0NUUF9PTl9VTk9SREVSRUQ7CisJCQkJCX0gZWxzZSB7CisJCQkJCQljb250cm9sLT5vbl9z
dHJtX3EgPSBTQ1RQX09OX09SREVSRUQ7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJ
fQorCQl9CisJfQorCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2Fib3J0X2lu
X3JlYXNtKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0
IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBzY3RwX3RtaXRfY2h1bmsgKmNoaywKKyAgICAgICAgICAgICAgICAgICAgaW50ICphYm9ydF9m
bGFnLCBpbnQgb3BzcG90KQoreworCWNoYXIgbXNnW1NDVFBfRElBR19JTkZPX0xFTl07CisJc3Ry
dWN0IG1idWYgKm9wZXI7CisKKwlpZiAoc3RjYi0+YXNvYy5pZGF0YV9zdXBwb3J0ZWQpIHsKKwkJ
U0NUUF9TTlBSSU5URihtc2csIHNpemVvZihtc2cpLAorCQkgICAgICAgICAgICAgICJSZWFzcyAl
eCxDRjoleCxUU049JTguOHgsU0lEPSU0LjR4LEZTTj0lOC44eCxNSUQ6JTguOHgiLAorCQkgICAg
ICAgICAgICAgIG9wc3BvdCwKKwkJICAgICAgICAgICAgICBjb250cm9sLT5mc25faW5jbHVkZWQs
CisJCSAgICAgICAgICAgICAgY2hrLT5yZWMuZGF0YS50c24sCisJCSAgICAgICAgICAgICAgY2hr
LT5yZWMuZGF0YS5zaWQsCisJCSAgICAgICAgICAgICAgY2hrLT5yZWMuZGF0YS5mc24sIGNoay0+
cmVjLmRhdGEubWlkKTsKKwl9IGVsc2UgeworCQlTQ1RQX1NOUFJJTlRGKG1zZywgc2l6ZW9mKG1z
ZyksCisJCSAgICAgICAgICAgICAgIlJlYXNzICV4LENJOiV4LFRTTj0lOC44eCxTSUQ9JTQuNHgs
RlNOPSU0LjR4LFNTTjolNC40eCIsCisJCSAgICAgICAgICAgICAgb3BzcG90LAorCQkgICAgICAg
ICAgICAgIGNvbnRyb2wtPmZzbl9pbmNsdWRlZCwKKwkJICAgICAgICAgICAgICBjaGstPnJlYy5k
YXRhLnRzbiwKKwkJICAgICAgICAgICAgICBjaGstPnJlYy5kYXRhLnNpZCwKKwkJICAgICAgICAg
ICAgICBjaGstPnJlYy5kYXRhLmZzbiwKKwkJICAgICAgICAgICAgICAodWludDE2X3QpY2hrLT5y
ZWMuZGF0YS5taWQpOworCX0KKwlvcGVyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNF
X1BST1RPQ09MX1ZJT0xBVElPTiwgbXNnKTsKKwlzY3RwX21fZnJlZW0oY2hrLT5kYXRhKTsKKwlj
aGstPmRhdGEgPSBOVUxMOworCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgU0NUUF9TT19O
T1RfTE9DS0VEKTsKKwlzdGNiLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2NvZGUgPSBTQ1RQX0ZST01f
U0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18xOworCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oc3Rj
Yi0+c2N0cF9lcCwgc3RjYiwgb3BlciwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkqYWJvcnRfZmxh
ZyA9IDE7Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2NsZWFuX3VwX2NvbnRyb2woc3RydWN0IHNj
dHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCkKK3sKKwkv
KgorCSAqIFRoZSBjb250cm9sIGNvdWxkIG5vdCBiZSBwbGFjZWQgYW5kIG11c3QgYmUgY2xlYW5l
ZC4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssICpuY2hrOworCVRBSUxRX0ZP
UkVBQ0hfU0FGRShjaGssICZjb250cm9sLT5yZWFzbSwgc2N0cF9uZXh0LCBuY2hrKSB7CisJCVRB
SUxRX1JFTU9WRSgmY29udHJvbC0+cmVhc20sIGNoaywgc2N0cF9uZXh0KTsKKwkJaWYgKGNoay0+
ZGF0YSkKKwkJCXNjdHBfbV9mcmVlbShjaGstPmRhdGEpOworCQljaGstPmRhdGEgPSBOVUxMOwor
CQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNiLCBjaGssIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJfQor
CXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjb250cm9sLT53aG9Gcm9tKTsKKwlpZiAoY29udHJvbC0+
ZGF0YSkgeworCQlzY3RwX21fZnJlZW0oY29udHJvbC0+ZGF0YSk7CisJCWNvbnRyb2wtPmRhdGEg
PSBOVUxMOworCX0KKwlzY3RwX2ZyZWVfYV9yZWFkcShzdGNiLCBjb250cm9sKTsKK30KKworLyoK
KyAqIFF1ZXVlIHRoZSBjaHVuayBlaXRoZXIgcmlnaHQgaW50byB0aGUgc29ja2V0IGJ1ZmZlciBp
ZiBpdCBpcyB0aGUgbmV4dCBvbmUKKyAqIHRvIGdvIE9SIHB1dCBpdCBpbiB0aGUgY29ycmVjdCBw
bGFjZSBpbiB0aGUgZGVsaXZlcnkgcXVldWUuICBJZiB3ZSBkbworICogYXBwZW5kIHRvIHRoZSBz
b19idWYsIGtlZXAgZG9pbmcgc28gdW50aWwgd2UgYXJlIG91dCBvZiBvcmRlciBhcworICogbG9u
ZyBhcyB0aGUgY29udHJvbCdzIGVudGVyZWQgYXJlIG5vbi1mcmFnbWVudGVkLgorICovCitzdGF0
aWMgdm9pZAorc2N0cF9xdWV1ZV9kYXRhX3RvX3N0cmVhbShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Is
CisgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisgICAgc3RydWN0IHNjdHBfcXVl
dWVkX3RvX3JlYWQgKmNvbnRyb2wsIGludCAqYWJvcnRfZmxhZywgaW50ICpuZWVkX3JlYXNtKQor
eworCS8qCisJICogRklYLU1FIG1heWJlPyBXaGF0IGhhcHBlbnMgd2hlbiB0aGUgc3NuIHdyYXBz
PyBJZiB3ZSBhcmUgZ2V0dGluZworCSAqIGFsbCB0aGUgZGF0YSBpbiBvbmUgc3RyZWFtIHRoaXMg
Y291bGQgaGFwcGVuIHF1aXRlIHJhcGlkbHkuIE9uZQorCSAqIGNvdWxkIHVzZSB0aGUgVFNOIHRv
IGtlZXAgdHJhY2sgb2YgdGhpbmdzLCBidXQgdGhpcyBzY2hlbWUgYnJlYWtzCisJICogZG93biBp
biB0aGUgb3RoZXIgdHlwZSBvZiBzdHJlYW0gdXNhZ2UgdGhhdCBjb3VsZCBvY2N1ci4gU2VuZCBh
CisJICogc2luZ2xlIG1zZyB0byBzdHJlYW0gMCwgc2VuZCA0QmlsbGlvbiBtZXNzYWdlcyB0byBz
dHJlYW0gMSwgbm93CisJICogc2VuZCBhIG1lc3NhZ2UgdG8gc3RyZWFtIDAuIFlvdSBoYXZlIGEg
c2l0dWF0aW9uIHdoZXJlIHRoZSBUU04KKwkgKiBoYXMgd3JhcHBlZCBidXQgbm90IGluIHRoZSBz
dHJlYW0uIElzIHRoaXMgd29ydGggd29ycnlpbmcgYWJvdXQKKwkgKiBvciBzaG91bGQgd2UganVz
dCBjaGFuZ2Ugb3VyIHF1ZXVlIHNvcnQgYXQgdGhlIGJvdHRvbSB0byBiZSBieQorCSAqIFRTTi4K
KwkgKgorCSAqIENvdWxkIGl0IGFsc28gYmUgbGVnYWwgZm9yIGEgcGVlciB0byBzZW5kIHNzbiAx
IHdpdGggVFNOIDIgYW5kIHNzbiAyCisJICogd2l0aCBUU04gMT8gSWYgdGhlIHBlZXIgaXMgZG9p
bmcgc29tZSBzb3J0IG9mIGZ1bmt5IFRTTi9TU04KKwkgKiBhc3NpZ25tZW50IHRoaXMgY291bGQg
aGFwcGVuLi4uIGFuZCBJIGRvbid0IHNlZSBob3cgdGhpcyB3b3VsZCBiZQorCSAqIGEgdmlvbGF0
aW9uLiBTbyBmb3Igbm93IEkgYW0gdW5kZWNpZGVkIGFuIHdpbGwgbGVhdmUgdGhlIHNvcnQgYnkK
KwkgKiBTU04gYWxvbmUuIE1heWJlIGEgaHlicmVkIGFwcHJvYWNoIGlzIHRoZSBhbnN3ZXIKKwkg
KgorCSAqLworCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICphdDsKKwlpbnQgcXVldWVfbmVl
ZGVkOworCXVpbnQzMl90IG54dF90b2RlbDsKKwlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOworCXN0cnVj
dCBzY3RwX3N0cmVhbV9pbiAqc3RybTsKKwljaGFyIG1zZ1tTQ1RQX0RJQUdfSU5GT19MRU5dOwor
CisJc3RybSA9ICZhc29jLT5zdHJtaW5bY29udHJvbC0+c2luZm9fc3RyZWFtXTsKKwlpZiAoU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TVFJfTE9HR0lOR19FTkFC
TEUpIHsKKwkJc2N0cF9sb2dfc3RybV9kZWwoY29udHJvbCwgTlVMTCwgU0NUUF9TVFJfTE9HX0ZS
T01fSU5UT19TVFJEKTsKKwl9CisJaWYgKFNDVFBfTUlEX0dUKChhc29jLT5pZGF0YV9zdXBwb3J0
ZWQpLCBzdHJtLT5sYXN0X21pZF9kZWxpdmVyZWQsIGNvbnRyb2wtPm1pZCkpIHsKKwkJLyogVGhl
IGluY29taW5nIHNzZXEgaXMgYmVoaW5kIHdoZXJlIHdlIGxhc3QgZGVsaXZlcmVkPyAqLworCQlT
Q1RQREJHKFNDVFBfREVCVUdfSU5EQVRBMSwgIkR1cGxpY2F0ZSBTLVNFUTogJXUgZGVsaXZlcmVk
OiAldSBmcm9tIHBlZXIsIEFib3J0IGFzc29jaWF0aW9uXG4iLAorCQkJc3RybS0+bGFzdF9taWRf
ZGVsaXZlcmVkLCBjb250cm9sLT5taWQpOworCQkvKgorCQkgKiB0aHJvdyBpdCBpbiB0aGUgc3Ry
ZWFtIHNvIGl0IGdldHMgY2xlYW5lZCB1cCBpbgorCQkgKiBhc3NvY2lhdGlvbiBkZXN0cnVjdGlv
bgorCQkgKi8KKwkJVEFJTFFfSU5TRVJUX0hFQUQoJnN0cm0tPmlucXVldWUsIGNvbnRyb2wsIG5l
eHRfaW5zdHJtKTsKKwkJaWYgKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCkgeworCQkJU0NUUF9TTlBS
SU5URihtc2csIHNpemVvZihtc2cpLCAiRGVsaXZlcmVkIE1JRD0lOC44eCwgZ290IFRTTj0lOC44
eCwgU0lEPSU0LjR4LCBNSUQ9JTguOHgiLAorCQkJICAgICAgICAgICAgICBzdHJtLT5sYXN0X21p
ZF9kZWxpdmVyZWQsIGNvbnRyb2wtPnNpbmZvX3RzbiwKKwkJCSAgICAgICAgICAgICAgY29udHJv
bC0+c2luZm9fc3RyZWFtLCBjb250cm9sLT5taWQpOworCQl9IGVsc2UgeworCQkJU0NUUF9TTlBS
SU5URihtc2csIHNpemVvZihtc2cpLCAiRGVsaXZlcmVkIFNTTj0lNC40eCwgZ290IFRTTj0lOC44
eCwgU0lEPSU0LjR4LCBTU049JTQuNHgiLAorCQkJICAgICAgICAgICAgICAodWludDE2X3Qpc3Ry
bS0+bGFzdF9taWRfZGVsaXZlcmVkLAorCQkJICAgICAgICAgICAgICBjb250cm9sLT5zaW5mb190
c24sCisJCQkgICAgICAgICAgICAgIGNvbnRyb2wtPnNpbmZvX3N0cmVhbSwKKwkJCSAgICAgICAg
ICAgICAgKHVpbnQxNl90KWNvbnRyb2wtPm1pZCk7CisJCX0KKwkJb3BfZXJyID0gc2N0cF9nZW5l
cmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RPQ09MX1ZJT0xBVElPTiwgbXNnKTsKKwkJc3RjYi0+
c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9M
T0NfMjsKKwkJc2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBv
cF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCSphYm9ydF9mbGFnID0gMTsKKwkJcmV0dXJu
OworCX0KKwlxdWV1ZV9uZWVkZWQgPSAxOworCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgKz0g
Y29udHJvbC0+bGVuZ3RoOworCXNjdHBfdWNvdW50X2luY3IoYXNvYy0+Y250X29uX2FsbF9zdHJl
YW1zKTsKKwlueHRfdG9kZWwgPSBzdHJtLT5sYXN0X21pZF9kZWxpdmVyZWQgKyAxOworCWlmIChT
Q1RQX01JRF9FUShhc29jLT5pZGF0YV9zdXBwb3J0ZWQsIG54dF90b2RlbCwgY29udHJvbC0+bWlk
KSkgeworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CQlzdHJ1Y3Qgc29ja2V0ICpzbzsKKworCQlzbyA9IFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXAp
OworCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQlTQ1RQX1RDQl9V
TkxPQ0soc3RjYik7CisJCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOworCQlTQ1RQX1RDQl9MT0NL
KHN0Y2IpOworCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJ
CWlmIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dP
TkUpIHsKKwkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisJCQlyZXR1cm47CisJCX0KKyNl
bmRpZgorCQkvKiBjYW4gYmUgZGVsaXZlcmVkIHJpZ2h0IGF3YXk/ICovCisJCWlmIChTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NUUl9MT0dHSU5HX0VOQUJMRSkg
eworCQkJc2N0cF9sb2dfc3RybV9kZWwoY29udHJvbCwgTlVMTCwgU0NUUF9TVFJfTE9HX0ZST01f
SU1NRURfREVMKTsKKwkJfQorCQkvKiBFWSBpdCB3b250IGJlIHF1ZXVlZCBpZiBpdCBjb3VsZCBi
ZSBkZWxpdmVyZWQgZGlyZWN0bHkgKi8KKwkJcXVldWVfbmVlZGVkID0gMDsKKwkJaWYgKGFzb2Mt
PnNpemVfb25fYWxsX3N0cmVhbXMgPj0gY29udHJvbC0+bGVuZ3RoKSB7CisJCQlhc29jLT5zaXpl
X29uX2FsbF9zdHJlYW1zIC09IGNvbnRyb2wtPmxlbmd0aDsKKwkJfSBlbHNlIHsKKyNpZmRlZiBJ
TlZBUklBTlRTCisJCQlwYW5pYygic2l6ZV9vbl9hbGxfc3RyZWFtcyA9ICV1IHNtYWxsZXIgdGhh
biBjb250cm9sIGxlbmd0aCAldSIsIGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMsIGNvbnRyb2wt
Pmxlbmd0aCk7CisjZWxzZQorCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyA9IDA7CisjZW5k
aWYKKwkJfQorCQlzY3RwX3Vjb3VudF9kZWNyKGFzb2MtPmNudF9vbl9hbGxfc3RyZWFtcyk7CisJ
CXN0cm0tPmxhc3RfbWlkX2RlbGl2ZXJlZCsrOworCQlzY3RwX21hcmtfbm9uX3Jldm9rYWJsZShh
c29jLCBjb250cm9sLT5zaW5mb190c24pOworCQlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3Rw
X2VwLCBzdGNiLAorCQkgICAgICAgICAgICAgICAgICBjb250cm9sLAorCQkgICAgICAgICAgICAg
ICAgICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwgMSwKKwkJICAgICAgICAgICAgICAgICAg
U0NUUF9SRUFEX0xPQ0tfTk9UX0hFTEQsIFNDVFBfU09fTE9DS0VEKTsKKwkJVEFJTFFfRk9SRUFD
SF9TQUZFKGNvbnRyb2wsICZzdHJtLT5pbnF1ZXVlLCBuZXh0X2luc3RybSwgYXQpIHsKKwkJCS8q
IGFsbCBkZWxpdmVyZWQgKi8KKwkJCW54dF90b2RlbCA9IHN0cm0tPmxhc3RfbWlkX2RlbGl2ZXJl
ZCArIDE7CisJCQlpZiAoU0NUUF9NSURfRVEoYXNvYy0+aWRhdGFfc3VwcG9ydGVkLCBueHRfdG9k
ZWwsIGNvbnRyb2wtPm1pZCkgJiYKKwkJCSAgICAoKChjb250cm9sLT5zaW5mb19mbGFncyA+PiA4
KSAmIFNDVFBfREFUQV9OT1RfRlJBRykgPT0gU0NUUF9EQVRBX05PVF9GUkFHKSkgeworCQkJCWlm
IChjb250cm9sLT5vbl9zdHJtX3EgPT0gU0NUUF9PTl9PUkRFUkVEKSB7CisJCQkJCVRBSUxRX1JF
TU9WRSgmc3RybS0+aW5xdWV1ZSwgY29udHJvbCwgbmV4dF9pbnN0cm0pOworCQkJCQlpZiAoYXNv
Yy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyA+PSBjb250cm9sLT5sZW5ndGgpIHsKKwkJCQkJCWFzb2Mt
PnNpemVfb25fYWxsX3N0cmVhbXMgLT0gY29udHJvbC0+bGVuZ3RoOworCQkJCQl9IGVsc2Ugewor
I2lmZGVmIElOVkFSSUFOVFMKKwkJCQkJCXBhbmljKCJzaXplX29uX2FsbF9zdHJlYW1zID0gJXUg
c21hbGxlciB0aGFuIGNvbnRyb2wgbGVuZ3RoICV1IiwgYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFt
cywgY29udHJvbC0+bGVuZ3RoKTsKKyNlbHNlCisJCQkJCQlhc29jLT5zaXplX29uX2FsbF9zdHJl
YW1zID0gMDsKKyNlbmRpZgorCQkJCQl9CisJCQkJCXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+Y250
X29uX2FsbF9zdHJlYW1zKTsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQkJfSBlbHNlIHsKKwkJCQkJ
cGFuaWMoIkh1aCBjb250cm9sOiAlcCBpcyBvbl9zdHJtX3E6ICVkIiwKKwkJCQkJICAgICAgY29u
dHJvbCwgY29udHJvbC0+b25fc3RybV9xKTsKKyNlbmRpZgorCQkJCX0KKwkJCQljb250cm9sLT5v
bl9zdHJtX3EgPSAwOworCQkJCXN0cm0tPmxhc3RfbWlkX2RlbGl2ZXJlZCsrOworCQkJCS8qCisJ
CQkJICogV2UgaWdub3JlIHRoZSByZXR1cm4gb2YgZGVsaXZlcl9kYXRhIGhlcmUKKwkJCQkgKiBz
aW5jZSB3ZSBhbHdheXMgY2FuIGhvbGQgdGhlIGNodW5rIG9uIHRoZQorCQkJCSAqIGQtcXVldWUu
IEFuZCB3ZSBoYXZlIGEgZmluaXRlIG51bWJlciB0aGF0CisJCQkJICogY2FuIGJlIGRlbGl2ZXJl
ZCBmcm9tIHRoZSBzdHJxLgorCQkJCSAqLworCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NUUl9MT0dHSU5HX0VOQUJMRSkgeworCQkJCQlzY3RwX2xv
Z19zdHJtX2RlbChjb250cm9sLCBOVUxMLAorCQkJCQkJCSAgU0NUUF9TVFJfTE9HX0ZST01fSU1N
RURfREVMKTsKKwkJCQl9CisJCQkJc2N0cF9tYXJrX25vbl9yZXZva2FibGUoYXNvYywgY29udHJv
bC0+c2luZm9fdHNuKTsKKwkJCQlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNi
LAorCQkJCSAgICAgICAgICAgICAgICAgIGNvbnRyb2wsCisJCQkJICAgICAgICAgICAgICAgICAg
JnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIDEsCisJCQkJICAgICAgICAgICAgICAgICAgU0NU
UF9SRUFEX0xPQ0tfTk9UX0hFTEQsCisJCQkJICAgICAgICAgICAgICAgICAgU0NUUF9TT19MT0NL
RUQpOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmIChTQ1RQX01JRF9FUShhc29jLT5pZGF0
YV9zdXBwb3J0ZWQsIG54dF90b2RlbCwgY29udHJvbC0+bWlkKSkgeworCQkJCSpuZWVkX3JlYXNt
ID0gMTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisjZW5k
aWYKKwl9CisJaWYgKHF1ZXVlX25lZWRlZCkgeworCQkvKgorCQkgKiBPaywgd2UgZGlkIG5vdCBk
ZWxpdmVyIHRoaXMgZ3V5LCBmaW5kIHRoZSBjb3JyZWN0IHBsYWNlCisJCSAqIHRvIHB1dCBpdCBv
biB0aGUgcXVldWUuCisJCSAqLworCQlpZiAoc2N0cF9wbGFjZV9jb250cm9sX2luX3N0cmVhbShz
dHJtLCBhc29jLCBjb250cm9sKSkgeworCQkJU0NUUF9TTlBSSU5URihtc2csIHNpemVvZihtc2cp
LAorCQkJICAgICAgICAgICAgICAiUXVldWUgdG8gc3RyIE1JRDogJXUgZHVwbGljYXRlIiwgY29u
dHJvbC0+bWlkKTsKKwkJCXNjdHBfY2xlYW5fdXBfY29udHJvbChzdGNiLCBjb250cm9sKTsKKwkJ
CW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9QUk9UT0NPTF9WSU9MQVRJ
T04sIG1zZyk7CisJCQlzdGNiLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2NvZGUgPSBTQ1RQX0ZST01f
U0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18zOworCQkJc2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihz
dGNiLT5zY3RwX2VwLCBzdGNiLCBvcF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQkqYWJv
cnRfZmxhZyA9IDE7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3NldHVwX3RhaWxf
cG9pbnRlcihzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCkKK3sKKwlzdHJ1Y3Qg
bWJ1ZiAqbSwgKnByZXYgPSBOVUxMOworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKKworCXN0Y2Ig
PSBjb250cm9sLT5zdGNiOworCWNvbnRyb2wtPmhlbGRfbGVuZ3RoID0gMDsKKwljb250cm9sLT5s
ZW5ndGggPSAwOworCW0gPSBjb250cm9sLT5kYXRhOworCXdoaWxlIChtKSB7CisJCWlmIChTQ1RQ
X0JVRl9MRU4obSkgPT0gMCkgeworCQkJLyogU2tpcCBtYnVmcyB3aXRoIE5PIGxlbmd0aCAqLwor
CQkJaWYgKHByZXYgPT0gTlVMTCkgeworCQkJCS8qIEZpcnN0IG9uZSAqLworCQkJCWNvbnRyb2wt
PmRhdGEgPSBzY3RwX21fZnJlZShtKTsKKwkJCQltID0gY29udHJvbC0+ZGF0YTsKKwkJCX0gZWxz
ZSB7CisJCQkJU0NUUF9CVUZfTkVYVChwcmV2KSA9IHNjdHBfbV9mcmVlKG0pOworCQkJCW0gPSBT
Q1RQX0JVRl9ORVhUKHByZXYpOworCQkJfQorCQkJaWYgKG0gPT0gTlVMTCkgeworCQkJCWNvbnRy
b2wtPnRhaWxfbWJ1ZiA9IHByZXY7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCQlwcmV2ID0g
bTsKKwkJYXRvbWljX2FkZF9pbnQoJmNvbnRyb2wtPmxlbmd0aCwgU0NUUF9CVUZfTEVOKG0pKTsK
KwkJaWYgKGNvbnRyb2wtPm9uX3JlYWRfcSkgeworCQkJLyoKKwkJCSAqIE9uIHJlYWQgcXVldWUg
c28gd2UgbXVzdCBpbmNyZW1lbnQgdGhlCisJCQkgKiBTQiBzdHVmZiwgd2UgYXNzdW1lIGNhbGxl
ciBoYXMgZG9uZSBhbnkgbG9ja3Mgb2YgU0IuCisJCQkgKi8KKwkJCXNjdHBfc2JhbGxvYyhzdGNi
LCAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwgbSk7CisJCX0KKwkJbSA9IFNDVFBfQlVGX05F
WFQobSk7CisJfQorCWlmIChwcmV2KSB7CisJCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IHByZXY7CisJ
fQorfQorCitzdGF0aWMgdm9pZAorc2N0cF9hZGRfdG9fdGFpbF9wb2ludGVyKHN0cnVjdCBzY3Rw
X3F1ZXVlZF90b19yZWFkICpjb250cm9sLCBzdHJ1Y3QgbWJ1ZiAqbSwgdWludDMyX3QgKmFkZGVk
KQoreworCXN0cnVjdCBtYnVmICpwcmV2PU5VTEw7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiOwor
CisJc3RjYiA9IGNvbnRyb2wtPnN0Y2I7CisJaWYgKHN0Y2IgPT0gTlVMTCkgeworI2lmZGVmIElO
VkFSSUFOVFMKKwkJcGFuaWMoIkNvbnRyb2wgYnJva2VuIik7CisjZWxzZQorCQlyZXR1cm47Cisj
ZW5kaWYKKwl9CisJaWYgKGNvbnRyb2wtPnRhaWxfbWJ1ZiA9PSBOVUxMKSB7CisJCS8qIFRTTkgg
Ki8KKwkJc2N0cF9tX2ZyZWVtKGNvbnRyb2wtPmRhdGEpOworCQljb250cm9sLT5kYXRhID0gbTsK
KwkJc2N0cF9zZXR1cF90YWlsX3BvaW50ZXIoY29udHJvbCk7CisJCXJldHVybjsKKwl9CisJY29u
dHJvbC0+dGFpbF9tYnVmLT5tX25leHQgPSBtOworCXdoaWxlIChtKSB7CisJCWlmIChTQ1RQX0JV
Rl9MRU4obSkgPT0gMCkgeworCQkJLyogU2tpcCBtYnVmcyB3aXRoIE5PIGxlbmd0aCAqLworCQkJ
aWYgKHByZXYgPT0gTlVMTCkgeworCQkJCS8qIEZpcnN0IG9uZSAqLworCQkJCWNvbnRyb2wtPnRh
aWxfbWJ1Zi0+bV9uZXh0ID0gc2N0cF9tX2ZyZWUobSk7CisJCQkJbSA9IGNvbnRyb2wtPnRhaWxf
bWJ1Zi0+bV9uZXh0OworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0JVRl9ORVhUKHByZXYpID0gc2N0
cF9tX2ZyZWUobSk7CisJCQkJbSA9IFNDVFBfQlVGX05FWFQocHJldik7CisJCQl9CisJCQlpZiAo
bSA9PSBOVUxMKSB7CisJCQkJY29udHJvbC0+dGFpbF9tYnVmID0gcHJldjsKKwkJCX0KKwkJCWNv
bnRpbnVlOworCQl9CisJCXByZXYgPSBtOworCQlpZiAoY29udHJvbC0+b25fcmVhZF9xKSB7CisJ
CQkvKgorCQkJICogT24gcmVhZCBxdWV1ZSBzbyB3ZSBtdXN0IGluY3JlbWVudCB0aGUKKwkJCSAq
IFNCIHN0dWZmLCB3ZSBhc3N1bWUgY2FsbGVyIGhhcyBkb25lIGFueSBsb2NrcyBvZiBTQi4KKwkJ
CSAqLworCQkJc2N0cF9zYmFsbG9jKHN0Y2IsICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCBt
KTsKKwkJfQorCQkqYWRkZWQgKz0gU0NUUF9CVUZfTEVOKG0pOworCQlhdG9taWNfYWRkX2ludCgm
Y29udHJvbC0+bGVuZ3RoLCBTQ1RQX0JVRl9MRU4obSkpOworCQltID0gU0NUUF9CVUZfTkVYVCht
KTsKKwl9CisJaWYgKHByZXYpIHsKKwkJY29udHJvbC0+dGFpbF9tYnVmID0gcHJldjsKKwl9Cit9
CisKK3N0YXRpYyB2b2lkCitzY3RwX2J1aWxkX3JlYWRxX2VudHJ5X2Zyb21fY3RsKHN0cnVjdCBz
Y3RwX3F1ZXVlZF90b19yZWFkICpuYywgc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRy
b2wpCit7CisJbWVtc2V0KG5jLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQp
KTsKKwluYy0+c2luZm9fc3RyZWFtID0gY29udHJvbC0+c2luZm9fc3RyZWFtOworCW5jLT5taWQg
PSBjb250cm9sLT5taWQ7CisJVEFJTFFfSU5JVCgmbmMtPnJlYXNtKTsKKwluYy0+dG9wX2ZzbiA9
IGNvbnRyb2wtPnRvcF9mc247CisJbmMtPm1pZCA9IGNvbnRyb2wtPm1pZDsKKwluYy0+c2luZm9f
ZmxhZ3MgPSBjb250cm9sLT5zaW5mb19mbGFnczsKKwluYy0+c2luZm9fcHBpZCA9IGNvbnRyb2wt
PnNpbmZvX3BwaWQ7CisJbmMtPnNpbmZvX2NvbnRleHQgPSBjb250cm9sLT5zaW5mb19jb250ZXh0
OworCW5jLT5mc25faW5jbHVkZWQgPSAweGZmZmZmZmZmOworCW5jLT5zaW5mb190c24gPSBjb250
cm9sLT5zaW5mb190c247CisJbmMtPnNpbmZvX2N1bXRzbiA9IGNvbnRyb2wtPnNpbmZvX2N1bXRz
bjsKKwluYy0+c2luZm9fYXNzb2NfaWQgPSBjb250cm9sLT5zaW5mb19hc3NvY19pZDsKKwluYy0+
d2hvRnJvbSA9IGNvbnRyb2wtPndob0Zyb207CisJYXRvbWljX2FkZF9pbnQoJm5jLT53aG9Gcm9t
LT5yZWZfY291bnQsIDEpOworCW5jLT5zdGNiID0gY29udHJvbC0+c3RjYjsKKwluYy0+cG9ydF9m
cm9tID0gY29udHJvbC0+cG9ydF9mcm9tOworCW5jLT5kb19ub3RfcmVmX3N0Y2IgPSBjb250cm9s
LT5kb19ub3RfcmVmX3N0Y2I7Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3Jlc2V0X2FfY29udHJv
bChzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCwKKyAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHVpbnQzMl90IHRzbikKK3sKKwljb250cm9sLT5m
c25faW5jbHVkZWQgPSB0c247CisJaWYgKGNvbnRyb2wtPm9uX3JlYWRfcSkgeworCQkvKgorCQkg
KiBXZSBoYXZlIHRvIHB1cmdlIGl0IGZyb20gdGhlcmUsCisJCSAqIGhvcGVmdWxseSB0aGlzIHdp
bGwgd29yayA6LSkKKwkJICovCisJCVRBSUxRX1JFTU9WRSgmaW5wLT5yZWFkX3F1ZXVlLCBjb250
cm9sLCBuZXh0KTsKKwkJY29udHJvbC0+b25fcmVhZF9xID0gMDsKKwl9Cit9CisKK3N0YXRpYyBp
bnQKK3NjdHBfaGFuZGxlX29sZF91bm9yZGVyZWRfZGF0YShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Is
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24g
KmFzb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfc3RyZWFt
X2luICpzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3F1
ZXVlZF90b19yZWFkICpjb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90IHBkX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnBf
cmVhZF9sb2NrX2hlbGQpCit7CisJLyogU3BlY2lhbCBoYW5kbGluZyBmb3IgdGhlIG9sZCB1bi1v
cmRlcmVkIGRhdGEgY2h1bmsuCisJICogQWxsIHRoZSBjaHVua3MvVFNOJ3MgZ28gdG8gbWlkIDAu
IFNvCisJICogd2UgaGF2ZSB0byBkbyB0aGUgb2xkIHN0eWxlIHdhdGNoaW5nIHRvIHNlZQorCSAq
IGlmIHdlIGhhdmUgaXQgYWxsLiBJZiB5b3UgcmV0dXJuIG9uZSwgbm8gb3RoZXIKKwkgKiBjb250
cm9sIGVudHJpZXMgb24gdGhlIHVuLW9yZGVyZWQgcXVldWUgd2lsbAorCSAqIGJlIGxvb2tlZCBh
dC4gSW4gdGhlb3J5IHRoZXJlIHNob3VsZCBiZSBubyBvdGhlcnMKKwkgKiBlbnRyaWVzIGluIHJl
YWxpdHksIHVubGVzcyB0aGUgZ3V5IGlzIHNlbmRpbmcgYm90aAorCSAqIHVub3JkZXJlZCBOREFU
QSBhbmQgdW5vcmRlcmVkIERBVEEuLi4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpj
aGssICpsY2hrLCAqdGNoazsKKwl1aW50MzJfdCBmc247CisJc3RydWN0IHNjdHBfcXVldWVkX3Rv
X3JlYWQgKm5jOworCWludCBjbnRfYWRkZWQ7CisKKwlpZiAoY29udHJvbC0+Zmlyc3RfZnJhZ19z
ZWVuID09IDApIHsKKwkJLyogTm90aGluZyB3ZSBjYW4gZG8sIHdlIGhhdmUgbm90IHNlZW4gdGhl
IGZpcnN0IHBpZWNlIHlldCAqLworCQlyZXR1cm4gKDEpOworCX0KKwkvKiBDb2xsYXBzZSBhbnkg
d2UgY2FuICovCisJY250X2FkZGVkID0gMDsKK3Jlc3RhcnQ6CisJZnNuID0gY29udHJvbC0+ZnNu
X2luY2x1ZGVkICsgMTsKKwkvKiBOb3cgd2hhdCBjYW4gd2UgYWRkPyAqLworCVRBSUxRX0ZPUkVB
Q0hfU0FGRShjaGssICZjb250cm9sLT5yZWFzbSwgc2N0cF9uZXh0LCBsY2hrKSB7CisJCWlmIChj
aGstPnJlYy5kYXRhLmZzbiA9PSBmc24pIHsKKwkJCS8qIE9rIGxldHMgYWRkIGl0ICovCisJCQlz
Y3RwX2FsbG9jX2FfcmVhZHEoc3RjYiwgbmMpOworCQkJaWYgKG5jID09IE5VTEwpIHsKKwkJCQli
cmVhazsKKwkJCX0KKwkJCW1lbXNldChuYywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3F1ZXVlZF90
b19yZWFkKSk7CisJCQlUQUlMUV9SRU1PVkUoJmNvbnRyb2wtPnJlYXNtLCBjaGssIHNjdHBfbmV4
dCk7CisJCQlzY3RwX2FkZF9jaGtfdG9fY29udHJvbChjb250cm9sLCBzdHJtLCBzdGNiLCBhc29j
LCBjaGssIGlucF9yZWFkX2xvY2tfaGVsZCk7CisJCQlmc24rKzsKKwkJCWNudF9hZGRlZCsrOwor
CQkJY2hrID0gTlVMTDsKKwkJCWlmIChjb250cm9sLT5lbmRfYWRkZWQpIHsKKwkJCQkvKiBXZSBh
cmUgZG9uZSAqLworCQkJCWlmICghVEFJTFFfRU1QVFkoJmNvbnRyb2wtPnJlYXNtKSkgeworCQkJ
CQkvKgorCQkJCQkgKiBPayB3ZSBoYXZlIHRvIG1vdmUgYW55dGhpbmcgbGVmdCBvbgorCQkJCQkg
KiB0aGUgY29udHJvbCBxdWV1ZSB0byBhIG5ldyBjb250cm9sLgorCQkJCQkgKi8KKwkJCQkJc2N0
cF9idWlsZF9yZWFkcV9lbnRyeV9mcm9tX2N0bChuYywgY29udHJvbCk7CisJCQkJCXRjaGsgPSBU
QUlMUV9GSVJTVCgmY29udHJvbC0+cmVhc20pOworCQkJCQlpZiAodGNoay0+cmVjLmRhdGEucmN2
X2ZsYWdzICYgU0NUUF9EQVRBX0ZJUlNUX0ZSQUcpIHsKKwkJCQkJCVRBSUxRX1JFTU9WRSgmY29u
dHJvbC0+cmVhc20sIHRjaGssIHNjdHBfbmV4dCk7CisJCQkJCQlpZiAoYXNvYy0+c2l6ZV9vbl9y
ZWFzbV9xdWV1ZSA+PSB0Y2hrLT5zZW5kX3NpemUpIHsKKwkJCQkJCQlhc29jLT5zaXplX29uX3Jl
YXNtX3F1ZXVlIC09IHRjaGstPnNlbmRfc2l6ZTsKKwkJCQkJCX0gZWxzZSB7CisjaWZkZWYgSU5W
QVJJQU5UUworCQkJCQkJcGFuaWMoInNpemVfb25fcmVhc21fcXVldWUgPSAldSBzbWFsbGVyIHRo
YW4gY2h1bmsgbGVuZ3RoICV1IiwgYXNvYy0+c2l6ZV9vbl9yZWFzbV9xdWV1ZSwgdGNoay0+c2Vu
ZF9zaXplKTsKKyNlbHNlCisJCQkJCQlhc29jLT5zaXplX29uX3JlYXNtX3F1ZXVlID0gMDsKKyNl
bmRpZgorCQkJCQkJfQorCQkJCQkJc2N0cF91Y291bnRfZGVjcihhc29jLT5jbnRfb25fcmVhc21f
cXVldWUpOworCQkJCQkJbmMtPmZpcnN0X2ZyYWdfc2VlbiA9IDE7CisJCQkJCQluYy0+ZnNuX2lu
Y2x1ZGVkID0gdGNoay0+cmVjLmRhdGEuZnNuOworCQkJCQkJbmMtPmRhdGEgPSB0Y2hrLT5kYXRh
OworCQkJCQkJbmMtPnNpbmZvX3BwaWQgPSB0Y2hrLT5yZWMuZGF0YS5wcGlkOworCQkJCQkJbmMt
PnNpbmZvX3RzbiA9IHRjaGstPnJlYy5kYXRhLnRzbjsKKwkJCQkJCXNjdHBfbWFya19ub25fcmV2
b2thYmxlKGFzb2MsIHRjaGstPnJlYy5kYXRhLnRzbik7CisJCQkJCQl0Y2hrLT5kYXRhID0gTlVM
TDsKKwkJCQkJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIHRjaGssIFNDVFBfU09fTk9UX0xPQ0tF
RCk7CisJCQkJCQlzY3RwX3NldHVwX3RhaWxfcG9pbnRlcihuYyk7CisJCQkJCQl0Y2hrID0gVEFJ
TFFfRklSU1QoJmNvbnRyb2wtPnJlYXNtKTsKKwkJCQkJfQorCQkJCQkvKiBTcGluIHRoZSByZXN0
IG9udG8gdGhlIHF1ZXVlICovCisJCQkJCXdoaWxlICh0Y2hrKSB7CisJCQkJCQlUQUlMUV9SRU1P
VkUoJmNvbnRyb2wtPnJlYXNtLCB0Y2hrLCBzY3RwX25leHQpOworCQkJCQkJVEFJTFFfSU5TRVJU
X1RBSUwoJm5jLT5yZWFzbSwgdGNoaywgc2N0cF9uZXh0KTsKKwkJCQkJCXRjaGsgPSBUQUlMUV9G
SVJTVCgmY29udHJvbC0+cmVhc20pOworCQkJCQl9CisJCQkJCS8qIE5vdyBsZXRzIGFkZCBpdCB0
byB0aGUgcXVldWUgYWZ0ZXIgcmVtb3ZpbmcgY29udHJvbCAqLworCQkJCQlUQUlMUV9JTlNFUlRf
VEFJTCgmc3RybS0+dW5vX2lucXVldWUsIG5jLCBuZXh0X2luc3RybSk7CisJCQkJCW5jLT5vbl9z
dHJtX3EgPSBTQ1RQX09OX1VOT1JERVJFRDsKKwkJCQkJaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSkg
eworCQkJCQkJVEFJTFFfUkVNT1ZFKCZzdHJtLT51bm9faW5xdWV1ZSwgY29udHJvbCwgbmV4dF9p
bnN0cm0pOworCQkJCQkJY29udHJvbC0+b25fc3RybV9xID0gMDsKKwkJCQkJfQorCQkJCX0KKwkJ
CQlpZiAoY29udHJvbC0+cGRhcGlfc3RhcnRlZCkgeworCQkJCQlzdHJtLT5wZF9hcGlfc3RhcnRl
ZCA9IDA7CisJCQkJCWNvbnRyb2wtPnBkYXBpX3N0YXJ0ZWQgPSAwOworCQkJCX0KKwkJCQlpZiAo
Y29udHJvbC0+b25fc3RybV9xKSB7CisJCQkJCVRBSUxRX1JFTU9WRSgmc3RybS0+dW5vX2lucXVl
dWUsIGNvbnRyb2wsIG5leHRfaW5zdHJtKTsKKwkJCQkJY29udHJvbC0+b25fc3RybV9xID0gMDsK
KwkJCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX3JlYXNtdXNybXNncyk7CisJCQkJ
fQorCQkJCWlmIChjb250cm9sLT5vbl9yZWFkX3EgPT0gMCkgeworCQkJCQlzY3RwX2FkZF90b19y
ZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLCBjb250cm9sLAorCQkJCQkJCSAgJnN0Y2ItPnNjdHBf
c29ja2V0LT5zb19yY3YsIGNvbnRyb2wtPmVuZF9hZGRlZCwKKwkJCQkJCQkgIGlucF9yZWFkX2xv
Y2tfaGVsZCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisJCQkJfSBlbHNlIHsKKwkJCQkJc2N0cF9pbnZva2VfcmVjdl9jYWxsYmFjayhzdGNiLT5zY3Rw
X2VwLCBzdGNiLCBjb250cm9sLCBpbnBfcmVhZF9sb2NrX2hlbGQpOworI2VuZGlmCisJCQkJfQor
CQkJCXNjdHBfd2FrZXVwX3RoZV9yZWFkX3NvY2tldChzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQ
X1NPX05PVF9MT0NLRUQpOworCQkJCWlmICgobmMtPmZpcnN0X2ZyYWdfc2VlbikgJiYgIVRBSUxR
X0VNUFRZKCZuYy0+cmVhc20pKSB7CisJCQkJCS8qIFN3aXRjaCB0byB0aGUgbmV3IGd1eSBhbmQg
Y29udGludWUgKi8KKwkJCQkJY29udHJvbCA9IG5jOworCQkJCQlnb3RvIHJlc3RhcnQ7CisJCQkJ
fSBlbHNlIHsKKwkJCQkJaWYgKG5jLT5vbl9zdHJtX3EgPT0gMCkgeworCQkJCQkJc2N0cF9mcmVl
X2FfcmVhZHEoc3RjYiwgbmMpOworCQkJCQl9CisJCQkJfQorCQkJCXJldHVybiAoMSk7CisJCQl9
IGVsc2UgeworCQkJCXNjdHBfZnJlZV9hX3JlYWRxKHN0Y2IsIG5jKTsKKwkJCX0KKwkJfSBlbHNl
IHsKKwkJCS8qIENhbid0IGFkZCBtb3JlICovCisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoY250
X2FkZGVkICYmIHN0cm0tPnBkX2FwaV9zdGFydGVkKSB7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorCQlzY3RwX2ludm9rZV9yZWN2X2NhbGxiYWNrKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIGNv
bnRyb2wsIGlucF9yZWFkX2xvY2tfaGVsZCk7CisjZW5kaWYKKwkJc2N0cF93YWtldXBfdGhlX3Jl
YWRfc29ja2V0KHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJfQor
CWlmICgoY29udHJvbC0+bGVuZ3RoID4gcGRfcG9pbnQpICYmIChzdHJtLT5wZF9hcGlfc3RhcnRl
ZCA9PSAwKSkgeworCQlzdHJtLT5wZF9hcGlfc3RhcnRlZCA9IDE7CisJCWNvbnRyb2wtPnBkYXBp
X3N0YXJ0ZWQgPSAxOworCQlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLCBj
b250cm9sLAorCQkgICAgICAgICAgICAgICAgICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3Jjdiwg
Y29udHJvbC0+ZW5kX2FkZGVkLAorCQkgICAgICAgICAgICAgICAgICBpbnBfcmVhZF9sb2NrX2hl
bGQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCXNjdHBfd2FrZXVwX3RoZV9yZWFkX3NvY2tldChz
dGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQlyZXR1cm4gKDApOwor
CX0gZWxzZSB7CisJCXJldHVybiAoMSk7CisJfQorfQorCitzdGF0aWMgdm9pZAorc2N0cF9pbmpl
Y3Rfb2xkX3Vub3JkZXJlZF9kYXRhKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29u
dHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF90bWl0X2No
dW5rICpjaGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICphYm9ydF9mbGFn
KQoreworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmF0OworCWludCBpbnNlcnRlZDsKKwkvKgor
CSAqIEhlcmUgd2UgbmVlZCB0byBwbGFjZSB0aGUgY2h1bmsgaW50byB0aGUgY29udHJvbCBzdHJ1
Y3R1cmUKKwkgKiBzb3J0ZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuCisJICovCisJaWYgKGNoay0+
cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX0ZJUlNUX0ZSQUcpIHsKKwkJLyogSXRzIHRo
ZSB2ZXJ5IGZpcnN0IG9uZS4gKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwKKwkJCSJjaHVu
ayBpcyBhIGZpcnN0IGZzbjogJXUgYmVjb21lcyBmc25faW5jbHVkZWRcbiIsCisJCQljaGstPnJl
Yy5kYXRhLmZzbik7CisJCWF0ID0gVEFJTFFfRklSU1QoJmNvbnRyb2wtPnJlYXNtKTsKKwkJaWYg
KGF0ICYmIFNDVFBfVFNOX0dUKGNoay0+cmVjLmRhdGEuZnNuLCBhdC0+cmVjLmRhdGEuZnNuKSkg
eworCQkJLyoKKwkJCSAqIFRoZSBmaXJzdCBjaHVuayBpbiB0aGUgcmVhc3NlbWJseSBpcworCQkJ
ICogYSBzbWFsbGVyIFRTTiB0aGFuIHRoaXMgb25lLCBldmVuIHRob3VnaAorCQkJICogdGhpcyBo
YXMgYSBmaXJzdCwgaXQgbXVzdCBiZSBmcm9tIGEgc3Vic2VxdWVudAorCQkJICogbXNnLgorCQkJ
ICovCisJCQlnb3RvIHBsYWNlX2NodW5rOworCQl9CisJCWlmIChjb250cm9sLT5maXJzdF9mcmFn
X3NlZW4pIHsKKwkJCS8qCisJCQkgKiBJbiBvbGQgdW4tb3JkZXJlZCB3ZSBjYW4gcmVhc3NlbWJs
eSBvbgorCQkJICogb25lIGNvbnRyb2wgbXVsdGlwbGUgbWVzc2FnZXMuIEFzIGxvbmcKKwkJCSAq
IGFzIHRoZSBuZXh0IEZJUlNUIGlzIGdyZWF0ZXIgdGhlbiB0aGUgb2xkCisJCQkgKiBmaXJzdCAo
VFNOIGkuZS4gRlNOIHdpc2UpCisJCQkgKi8KKwkJCXN0cnVjdCBtYnVmICp0ZGF0YTsKKwkJCXVp
bnQzMl90IHRtcDsKKworCQkJaWYgKFNDVFBfVFNOX0dUKGNoay0+cmVjLmRhdGEuZnNuLCBjb250
cm9sLT5mc25faW5jbHVkZWQpKSB7CisJCQkJLyogRWFzeSB3YXkgdGhlIHN0YXJ0IG9mIGEgbmV3
IGd1eSBiZXlvbmQgdGhlIGxvd2VzdCAqLworCQkJCWdvdG8gcGxhY2VfY2h1bms7CisJCQl9CisJ
CQlpZiAoKGNoay0+cmVjLmRhdGEuZnNuID09IGNvbnRyb2wtPmZzbl9pbmNsdWRlZCkgfHwKKwkJ
CSAgICAoY29udHJvbC0+cGRhcGlfc3RhcnRlZCkpIHsKKwkJCQkvKgorCQkJCSAqIE9rIHRoaXMg
c2hvdWxkIG5vdCBoYXBwZW4sIGlmIGl0IGRvZXMKKwkJCQkgKiB3ZSBzdGFydGVkIHRoZSBwZC1h
cGkgb24gdGhlIGhpZ2hlciBUU04gKHNpbmNlCisJCQkJICogdGhlIGVxdWFscyBwYXJ0IGlzIGEg
VFNOIGZhaWx1cmUgaXQgbXVzdCBiZSB0aGF0KS4KKwkJCQkgKgorCQkJCSAqIFdlIGFyZSBjb21w
bGV0bHkgaG9zZWQgaW4gdGhhdCBjYXNlIHNpbmNlIEkgaGF2ZQorCQkJCSAqIG5vIHdheSB0byBy
ZWNvdmVyLiBUaGlzIHJlYWxseSB3aWxsIG9ubHkgaGFwcGVuCisJCQkJICogaWYgd2UgY2FuIGdl
dCBtb3JlIFRTTidzIGhpZ2hlciBiZWZvcmUgdGhlIHBkLWFwaS1wb2ludC4KKwkJCQkgKi8KKwkJ
CQlzY3RwX2Fib3J0X2luX3JlYXNtKHN0Y2IsIGNvbnRyb2wsIGNoaywKKwkJCQkJCSAgICBhYm9y
dF9mbGFnLAorCQkJCQkJICAgIFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzQpOwor
CisJCQkJcmV0dXJuOworCQkJfQorCQkJLyoKKwkJCSAqIE9rIHdlIGhhdmUgdHdvIGZpcnN0cyBh
bmQgdGhlIG9uZSB3ZSBqdXN0IGdvdAorCQkJICogaXMgc21hbGxlciB0aGFuIHRoZSBvbmUgd2Ug
cHJldmlvdXNseSBwbGFjZWQuLiB5dWNrIQorCQkJICogV2UgbXVzdCBzd2FwIHRoZW0gb3V0Lgor
CQkJICovCisJCQkvKiBzd2FwIHRoZSBtYnVmcyAqLworCQkJdGRhdGEgPSBjb250cm9sLT5kYXRh
OworCQkJY29udHJvbC0+ZGF0YSA9IGNoay0+ZGF0YTsKKwkJCWNoay0+ZGF0YSA9IHRkYXRhOwor
CQkJLyogU2F2ZSB0aGUgbGVuZ3RocyAqLworCQkJY2hrLT5zZW5kX3NpemUgPSBjb250cm9sLT5s
ZW5ndGg7CisJCQkvKiBSZWNvbXB1dGUgbGVuZ3RoIG9mIGNvbnRyb2wgYW5kIHRhaWwgcG9pbnRl
ciAqLworCQkJc2N0cF9zZXR1cF90YWlsX3BvaW50ZXIoY29udHJvbCk7CisJCQkvKiBGaXggdGhl
IEZTTiBpbmNsdWRlZCAqLworCQkJdG1wID0gY29udHJvbC0+ZnNuX2luY2x1ZGVkOworCQkJY29u
dHJvbC0+ZnNuX2luY2x1ZGVkID0gY2hrLT5yZWMuZGF0YS5mc247CisJCQljaGstPnJlYy5kYXRh
LmZzbiA9IHRtcDsKKwkJCS8qIEZpeCB0aGUgVFNOIGluY2x1ZGVkICovCisJCQl0bXAgPSBjb250
cm9sLT5zaW5mb190c247CisJCQljb250cm9sLT5zaW5mb190c24gPSBjaGstPnJlYy5kYXRhLnRz
bjsKKwkJCWNoay0+cmVjLmRhdGEudHNuID0gdG1wOworCQkJLyogRml4IHRoZSBQUElEIGluY2x1
ZGVkICovCisJCQl0bXAgPSBjb250cm9sLT5zaW5mb19wcGlkOworCQkJY29udHJvbC0+c2luZm9f
cHBpZCA9IGNoay0+cmVjLmRhdGEucHBpZDsKKwkJCWNoay0+cmVjLmRhdGEucHBpZCA9IHRtcDsK
KwkJCS8qIEZpeCB0YWlsIHBvaW50ZXIgKi8KKwkJCWdvdG8gcGxhY2VfY2h1bms7CisJCX0KKwkJ
Y29udHJvbC0+Zmlyc3RfZnJhZ19zZWVuID0gMTsKKwkJY29udHJvbC0+ZnNuX2luY2x1ZGVkID0g
Y2hrLT5yZWMuZGF0YS5mc247CisJCWNvbnRyb2wtPnRvcF9mc24gPSBjaGstPnJlYy5kYXRhLmZz
bjsKKwkJY29udHJvbC0+c2luZm9fdHNuID0gY2hrLT5yZWMuZGF0YS50c247CisJCWNvbnRyb2wt
PnNpbmZvX3BwaWQgPSBjaGstPnJlYy5kYXRhLnBwaWQ7CisJCWNvbnRyb2wtPmRhdGEgPSBjaGst
PmRhdGE7CisJCXNjdHBfbWFya19ub25fcmV2b2thYmxlKGFzb2MsIGNoay0+cmVjLmRhdGEudHNu
KTsKKwkJY2hrLT5kYXRhID0gTlVMTDsKKwkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBT
Q1RQX1NPX05PVF9MT0NLRUQpOworCQlzY3RwX3NldHVwX3RhaWxfcG9pbnRlcihjb250cm9sKTsK
KwkJcmV0dXJuOworCX0KK3BsYWNlX2NodW5rOgorCWluc2VydGVkID0gMDsKKwlUQUlMUV9GT1JF
QUNIKGF0LCAmY29udHJvbC0+cmVhc20sIHNjdHBfbmV4dCkgeworCQlpZiAoU0NUUF9UU05fR1Qo
YXQtPnJlYy5kYXRhLmZzbiwgY2hrLT5yZWMuZGF0YS5mc24pKSB7CisJCQkvKgorCQkJICogVGhp
cyBvbmUgaW4gcXVldWUgaXMgYmlnZ2VyIHRoYW4gdGhlIG5ldyBvbmUsIGluc2VydAorCQkJICog
dGhlIG5ldyBvbmUgYmVmb3JlIGF0LgorCQkJICovCisJCQlhc29jLT5zaXplX29uX3JlYXNtX3F1
ZXVlICs9IGNoay0+c2VuZF9zaXplOworCQkJc2N0cF91Y291bnRfaW5jcihhc29jLT5jbnRfb25f
cmVhc21fcXVldWUpOworCQkJaW5zZXJ0ZWQgPSAxOworCQkJVEFJTFFfSU5TRVJUX0JFRk9SRShh
dCwgY2hrLCBzY3RwX25leHQpOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoYXQtPnJlYy5kYXRh
LmZzbiA9PSBjaGstPnJlYy5kYXRhLmZzbikgeworCQkJLyoKKwkJCSAqIFRoZXkgc2VudCBhIGR1
cGxpY2F0ZSBmc24gbnVtYmVyLiBUaGlzCisJCQkgKiByZWFsbHkgc2hvdWxkIG5vdCBoYXBwZW4g
c2luY2UgdGhlIEZTTiBpcworCQkJICogYSBUU04gYW5kIGl0IHNob3VsZCBoYXZlIGJlZW4gZHJv
cHBlZCBlYXJsaWVyLgorCQkJICovCisJCQlzY3RwX2Fib3J0X2luX3JlYXNtKHN0Y2IsIGNvbnRy
b2wsIGNoaywKKwkJCSAgICAgICAgICAgICAgICAgICAgYWJvcnRfZmxhZywKKwkJCSAgICAgICAg
ICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfNSk7CisJCQlyZXR1
cm47CisJCX0KKwl9CisJaWYgKGluc2VydGVkID09IDApIHsKKwkJLyogSXRzIGF0IHRoZSBlbmQg
Ki8KKwkJYXNvYy0+c2l6ZV9vbl9yZWFzbV9xdWV1ZSArPSBjaGstPnNlbmRfc2l6ZTsKKwkJc2N0
cF91Y291bnRfaW5jcihhc29jLT5jbnRfb25fcmVhc21fcXVldWUpOworCQljb250cm9sLT50b3Bf
ZnNuID0gY2hrLT5yZWMuZGF0YS5mc247CisJCVRBSUxRX0lOU0VSVF9UQUlMKCZjb250cm9sLT5y
ZWFzbSwgY2hrLCBzY3RwX25leHQpOworCX0KK30KKworc3RhdGljIGludAorc2N0cF9kZWxpdmVy
X3JlYXNtX2NoZWNrKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRp
b24gKmFzb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfc3RyZWFtX2lu
ICpzdHJtLCBpbnQgaW5wX3JlYWRfbG9ja19oZWxkKQoreworCS8qCisJICogR2l2ZW4gYSBzdHJl
YW0sIHN0cm0sIHNlZSBpZiBhbnkgb2YKKwkgKiB0aGUgU1NOJ3Mgb24gaXQgdGhhdCBhcmUgZnJh
Z21lbnRlZAorCSAqIGFyZSByZWFkeSB0byBkZWxpdmVyLiBJZiBzbyBnbyBhaGVhZAorCSAqIGFu
ZCBwbGFjZSB0aGVtIG9uIHRoZSByZWFkIHF1ZXVlLiBJbgorCSAqIHNvIHBsYWNpbmcgaWYgd2Ug
aGF2ZSBoaXQgdGhlIGVuZCwgdGhlbgorCSAqIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZW0gZnJvbSB0
aGUgc3RyZWFtJ3MgcXVldWUuCisJICovCisJc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNv
bnRyb2wsICpuY3RsID0gTlVMTDsKKwl1aW50MzJfdCBuZXh0X3RvX2RlbDsKKwl1aW50MzJfdCBw
ZF9wb2ludDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChzdGNiLT5zY3RwX3NvY2tldCkgeworCQlw
ZF9wb2ludCA9IG1pbihTQ1RQX1NCX0xJTUlUX1JDVihzdGNiLT5zY3RwX3NvY2tldCkgPj4gU0NU
UF9QQVJUSUFMX0RFTElWRVJZX1NISUZULAorCQkJICAgICAgIHN0Y2ItPnNjdHBfZXAtPnBhcnRp
YWxfZGVsaXZlcnlfcG9pbnQpOworCX0gZWxzZSB7CisJCXBkX3BvaW50ID0gc3RjYi0+c2N0cF9l
cC0+cGFydGlhbF9kZWxpdmVyeV9wb2ludDsKKwl9CisJY29udHJvbCA9IFRBSUxRX0ZJUlNUKCZz
dHJtLT51bm9faW5xdWV1ZSk7CisKKwlpZiAoKGNvbnRyb2wgIT0gTlVMTCkgJiYKKwkgICAgKGFz
b2MtPmlkYXRhX3N1cHBvcnRlZCA9PSAwKSkgeworCQkvKiBTcGVjaWFsIGhhbmRsaW5nIG5lZWRl
ZCBmb3IgIm9sZCIgZGF0YSBmb3JtYXQgKi8KKwkJaWYgKHNjdHBfaGFuZGxlX29sZF91bm9yZGVy
ZWRfZGF0YShzdGNiLCBhc29jLCBzdHJtLCBjb250cm9sLCBwZF9wb2ludCwgaW5wX3JlYWRfbG9j
a19oZWxkKSkgeworCQkJZ290byBkb25lX3VuOworCQl9CisJfQorCWlmIChzdHJtLT5wZF9hcGlf
c3RhcnRlZCkgeworCQkvKiBDYW4ndCBhZGQgbW9yZSAqLworCQlyZXR1cm4gKDApOworCX0KKwl3
aGlsZSAoY29udHJvbCkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfWFhYLCAiTG9va2luZyBhdCBj
b250cm9sOiAlcCBlKCVkKSBzc246ICV1IHRvcF9mc246ICV1IGluY19mc246ICV1IC11b1xuIiwK
KwkJCWNvbnRyb2wsIGNvbnRyb2wtPmVuZF9hZGRlZCwgY29udHJvbC0+bWlkLCBjb250cm9sLT50
b3BfZnNuLCBjb250cm9sLT5mc25faW5jbHVkZWQpOworCQluY3RsID0gVEFJTFFfTkVYVChjb250
cm9sLCBuZXh0X2luc3RybSk7CisJCWlmIChjb250cm9sLT5lbmRfYWRkZWQpIHsKKwkJCS8qIFdl
IGp1c3QgcHV0IHRoZSBsYXN0IGJpdCBvbiAqLworCQkJaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSkg
eworI2lmZGVmIElOVkFSSUFOVFMKKwkJCQlpZiAoY29udHJvbC0+b25fc3RybV9xICE9IFNDVFBf
T05fVU5PUkRFUkVEKSB7CisJCQkJCXBhbmljKCJIdWggY29udHJvbDogJXAgb25fcTogJWQgLS0g
bm90IHVub3JkZXJlZD8iLAorCQkJCQkgICAgICBjb250cm9sLCBjb250cm9sLT5vbl9zdHJtX3Ep
OworCQkJCX0KKyNlbmRpZgorCQkJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19yZWFz
bXVzcm1zZ3MpOworCQkJCVRBSUxRX1JFTU9WRSgmc3RybS0+dW5vX2lucXVldWUsIGNvbnRyb2ws
IG5leHRfaW5zdHJtKTsKKwkJCQlpZiAoYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyA+PSBjb250
cm9sLT5sZW5ndGgpIHsKKwkJCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyAtPSBjb250cm9s
LT5sZW5ndGg7CisJCQkJfSBlbHNlIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQkJCXBhbmljKCJz
aXplX29uX2FsbF9zdHJlYW1zID0gJXUgc21hbGxlciB0aGFuIGNvbnRyb2wgbGVuZ3RoICV1Iiwg
YXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcywgY29udHJvbC0+bGVuZ3RoKTsKKyNlbHNlCisJCQkJ
CWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPSAwOworI2VuZGlmCisJCQkJfQorCQkJCXNjdHBf
dWNvdW50X2RlY3IoYXNvYy0+Y250X29uX2FsbF9zdHJlYW1zKTsKKwkJCQljb250cm9sLT5vbl9z
dHJtX3EgPSAwOworCQkJfQorCQkJaWYgKGNvbnRyb2wtPm9uX3JlYWRfcSA9PSAwKSB7CisJCQkJ
c2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJCQkJCSAgY29udHJvbCwK
KwkJCQkJCSAgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIGNvbnRyb2wtPmVuZF9hZGRlZCwK
KwkJCQkJCSAgaW5wX3JlYWRfbG9ja19oZWxkLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJfQor
CQl9IGVsc2UgeworCQkJLyogQ2FuIHdlIGRvIGEgUEQtQVBJIGZvciB0aGlzIHVuLW9yZGVyZWQg
Z3V5PyAqLworCQkJaWYgKChjb250cm9sLT5sZW5ndGggPj0gcGRfcG9pbnQpICYmIChzdHJtLT5w
ZF9hcGlfc3RhcnRlZCA9PSAwKSkgeworCQkJCXN0cm0tPnBkX2FwaV9zdGFydGVkID0gMTsKKwkJ
CQljb250cm9sLT5wZGFwaV9zdGFydGVkID0gMTsKKwkJCQlzY3RwX2FkZF90b19yZWFkcShzdGNi
LT5zY3RwX2VwLCBzdGNiLAorCQkJCQkJICBjb250cm9sLAorCQkJCQkJICAmc3RjYi0+c2N0cF9z
b2NrZXQtPnNvX3JjdiwgY29udHJvbC0+ZW5kX2FkZGVkLAorCQkJCQkJICBpbnBfcmVhZF9sb2Nr
X2hlbGQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlj
b250cm9sID0gbmN0bDsKKwl9Citkb25lX3VuOgorCWNvbnRyb2wgPSBUQUlMUV9GSVJTVCgmc3Ry
bS0+aW5xdWV1ZSk7CisJaWYgKHN0cm0tPnBkX2FwaV9zdGFydGVkKSB7CisJCS8qIENhbid0IGFk
ZCBtb3JlICovCisJCXJldHVybiAoMCk7CisJfQorCWlmIChjb250cm9sID09IE5VTEwpIHsKKwkJ
cmV0dXJuIChyZXQpOworCX0KKwlpZiAoU0NUUF9NSURfRVEoYXNvYy0+aWRhdGFfc3VwcG9ydGVk
LCBzdHJtLT5sYXN0X21pZF9kZWxpdmVyZWQsIGNvbnRyb2wtPm1pZCkpIHsKKwkJLyogT2sgdGhl
IGd1eSBhdCB0aGUgdG9wIHdhcyBiZWluZyBwYXJ0aWFsbHkgZGVsaXZlcmVkCisJCSAqIGNvbXBs
ZXRlZCwgc28gd2UgcmVtb3ZlIGl0LiBOb3RlCisJCSAqIHRoZSBwZF9hcGkgZmxhZyB3YXMgdGFr
ZW4gb2ZmIHdoZW4gdGhlCisJCSAqIGNodW5rIHdhcyBtZXJnZWQgb24gaW4gc2N0cF9xdWV1ZV9k
YXRhX2Zvcl9yZWFzbSBiZWxvdy4KKwkJICovCisJCW5jdGwgPSBUQUlMUV9ORVhUKGNvbnRyb2ws
IG5leHRfaW5zdHJtKTsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwKKwkJCSJMb29raW5nIGF0
IGNvbnRyb2w6ICVwIGUoJWQpIHNzbjogJXUgdG9wX2ZzbjogJXUgaW5jX2ZzbjogJXUgKGxhc3Rk
ZWw6ICV1KS0gb1xuIiwKKwkJCWNvbnRyb2wsIGNvbnRyb2wtPmVuZF9hZGRlZCwgY29udHJvbC0+
bWlkLAorCQkJY29udHJvbC0+dG9wX2ZzbiwgY29udHJvbC0+ZnNuX2luY2x1ZGVkLAorCQkJc3Ry
bS0+bGFzdF9taWRfZGVsaXZlcmVkKTsKKwkJaWYgKGNvbnRyb2wtPmVuZF9hZGRlZCkgeworCQkJ
aWYgKGNvbnRyb2wtPm9uX3N0cm1fcSkgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJCQlpZiAoY29u
dHJvbC0+b25fc3RybV9xICE9IFNDVFBfT05fT1JERVJFRCkgeworCQkJCQlwYW5pYygiSHVoIGNv
bnRyb2w6ICVwIG9uX3E6ICVkIC0tIG5vdCBvcmRlcmVkPyIsCisJCQkJCSAgICAgIGNvbnRyb2ws
IGNvbnRyb2wtPm9uX3N0cm1fcSk7CisJCQkJfQorI2VuZGlmCisJCQkJU0NUUF9TVEFUX0lOQ1Jf
Q09VTlRFUjY0KHNjdHBzX3JlYXNtdXNybXNncyk7CisJCQkJVEFJTFFfUkVNT1ZFKCZzdHJtLT5p
bnF1ZXVlLCBjb250cm9sLCBuZXh0X2luc3RybSk7CisJCQkJaWYgKGFzb2MtPnNpemVfb25fYWxs
X3N0cmVhbXMgPj0gY29udHJvbC0+bGVuZ3RoKSB7CisJCQkJCWFzb2MtPnNpemVfb25fYWxsX3N0
cmVhbXMgLT0gY29udHJvbC0+bGVuZ3RoOworCQkJCX0gZWxzZSB7CisjaWZkZWYgSU5WQVJJQU5U
UworCQkJCQlwYW5pYygic2l6ZV9vbl9hbGxfc3RyZWFtcyA9ICV1IHNtYWxsZXIgdGhhbiBjb250
cm9sIGxlbmd0aCAldSIsIGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMsIGNvbnRyb2wtPmxlbmd0
aCk7CisjZWxzZQorCQkJCQlhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zID0gMDsKKyNlbmRpZgor
CQkJCX0KKwkJCQlzY3RwX3Vjb3VudF9kZWNyKGFzb2MtPmNudF9vbl9hbGxfc3RyZWFtcyk7CisJ
CQkJY29udHJvbC0+b25fc3RybV9xID0gMDsKKwkJCX0KKwkJCWlmIChzdHJtLT5wZF9hcGlfc3Rh
cnRlZCAmJiBjb250cm9sLT5wZGFwaV9zdGFydGVkKSB7CisJCQkJY29udHJvbC0+cGRhcGlfc3Rh
cnRlZCA9IDA7CisJCQkJc3RybS0+cGRfYXBpX3N0YXJ0ZWQgPSAwOworCQkJfQorCQkJaWYgKGNv
bnRyb2wtPm9uX3JlYWRfcSA9PSAwKSB7CisJCQkJc2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0
cF9lcCwgc3RjYiwKKwkJCQkJCSAgY29udHJvbCwKKwkJCQkJCSAgJnN0Y2ItPnNjdHBfc29ja2V0
LT5zb19yY3YsIGNvbnRyb2wtPmVuZF9hZGRlZCwKKwkJCQkJCSAgaW5wX3JlYWRfbG9ja19oZWxk
LCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJfQorCQkJY29udHJvbCA9IG5jdGw7CisJCX0KKwl9
CisJaWYgKHN0cm0tPnBkX2FwaV9zdGFydGVkKSB7CisJCS8qIENhbid0IGFkZCBtb3JlIG11c3Qg
aGF2ZSBnb3R0ZW4gYW4gdW4tb3JkZXJlZCBhYm92ZSBiZWluZyBwYXJ0aWFsbHkgZGVsaXZlcmVk
LiAqLworCQlyZXR1cm4gKDApOworCX0KK2RlbGl2ZXJfbW9yZToKKwluZXh0X3RvX2RlbCA9IHN0
cm0tPmxhc3RfbWlkX2RlbGl2ZXJlZCArIDE7CisJaWYgKGNvbnRyb2wpIHsKKwkJU0NUUERCRyhT
Q1RQX0RFQlVHX1hYWCwKKwkJCSJMb29raW5nIGF0IGNvbnRyb2w6ICVwIGUoJWQpIHNzbjogJXUg
dG9wX2ZzbjogJXUgaW5jX2ZzbjogJXUgKG54dGRlbDogJXUpLSBvXG4iLAorCQkJY29udHJvbCwg
Y29udHJvbC0+ZW5kX2FkZGVkLCBjb250cm9sLT5taWQsIGNvbnRyb2wtPnRvcF9mc24sIGNvbnRy
b2wtPmZzbl9pbmNsdWRlZCwKKwkJCW5leHRfdG9fZGVsKTsKKwkJbmN0bCA9IFRBSUxRX05FWFQo
Y29udHJvbCwgbmV4dF9pbnN0cm0pOworCQlpZiAoU0NUUF9NSURfRVEoYXNvYy0+aWRhdGFfc3Vw
cG9ydGVkLCBjb250cm9sLT5taWQsIG5leHRfdG9fZGVsKSAmJgorCQkgICAgKGNvbnRyb2wtPmZp
cnN0X2ZyYWdfc2VlbikpIHsKKwkJCWludCBkb25lOworCisJCQkvKiBPayB3ZSBjYW4gZGVsaXZl
ciBpdCBvbnRvIHRoZSBzdHJlYW0uICovCisJCQlpZiAoY29udHJvbC0+ZW5kX2FkZGVkKSB7CisJ
CQkJLyogV2UgYXJlIGRvbmUgd2l0aCBpdCBhZnRlcndhcmRzICovCisJCQkJaWYgKGNvbnRyb2wt
Pm9uX3N0cm1fcSkgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJCQkJaWYgKGNvbnRyb2wtPm9uX3N0
cm1fcSAhPSBTQ1RQX09OX09SREVSRUQpIHsKKwkJCQkJCXBhbmljKCJIdWggY29udHJvbDogJXAg
b25fcTogJWQgLS0gbm90IG9yZGVyZWQ/IiwKKwkJCQkJCSAgICAgIGNvbnRyb2wsIGNvbnRyb2wt
Pm9uX3N0cm1fcSk7CisJCQkJCX0KKyNlbmRpZgorCQkJCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVS
NjQoc2N0cHNfcmVhc211c3Jtc2dzKTsKKwkJCQkJVEFJTFFfUkVNT1ZFKCZzdHJtLT5pbnF1ZXVl
LCBjb250cm9sLCBuZXh0X2luc3RybSk7CisJCQkJCWlmIChhc29jLT5zaXplX29uX2FsbF9zdHJl
YW1zID49IGNvbnRyb2wtPmxlbmd0aCkgeworCQkJCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFt
cyAtPSBjb250cm9sLT5sZW5ndGg7CisJCQkJCX0gZWxzZSB7CisjaWZkZWYgSU5WQVJJQU5UUwor
CQkJCQkJcGFuaWMoInNpemVfb25fYWxsX3N0cmVhbXMgPSAldSBzbWFsbGVyIHRoYW4gY29udHJv
bCBsZW5ndGggJXUiLCBhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zLCBjb250cm9sLT5sZW5ndGgp
OworI2Vsc2UKKwkJCQkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPSAwOworI2VuZGlmCisJ
CQkJCX0KKwkJCQkJc2N0cF91Y291bnRfZGVjcihhc29jLT5jbnRfb25fYWxsX3N0cmVhbXMpOwor
CQkJCQljb250cm9sLT5vbl9zdHJtX3EgPSAwOworCQkJCX0KKwkJCQlyZXQrKzsKKwkJCX0KKwkJ
CWlmICgoKGNvbnRyb2wtPnNpbmZvX2ZsYWdzID4+IDgpICYgU0NUUF9EQVRBX05PVF9GUkFHKSA9
PSBTQ1RQX0RBVEFfTk9UX0ZSQUcpIHsKKwkJCQkvKiBBIHNpbmdsZXRvbiBub3cgc2xpcHBpbmcg
dGhyb3VnaCAtIG1hcmsgaXQgbm9uLXJldm9rYWJsZSB0b28gKi8KKwkJCQlzY3RwX21hcmtfbm9u
X3Jldm9rYWJsZShhc29jLCBjb250cm9sLT5zaW5mb190c24pOworCQkJfSBlbHNlIGlmIChjb250
cm9sLT5lbmRfYWRkZWQgPT0gMCkgeworCQkJCS8qIENoZWNrIGlmIHdlIGNhbiBkZWZlciBhZGRp
bmcgdW50aWwgaXRzIGFsbCB0aGVyZSAqLworCQkJCWlmICgoY29udHJvbC0+bGVuZ3RoIDwgcGRf
cG9pbnQpIHx8IChzdHJtLT5wZF9hcGlfc3RhcnRlZCkpIHsKKwkJCQkJLyogRG9uJ3QgbmVlZCBp
dCBvciBjYW5ub3QgYWRkIG1vcmUgKG9uZSBiZWluZyBkZWxpdmVyZWQgdGhhdCB3YXkpICovCisJ
CQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCX0KKwkJCWRvbmUgPSAoY29udHJvbC0+ZW5kX2FkZGVk
KSAmJiAoY29udHJvbC0+bGFzdF9mcmFnX3NlZW4pOworCQkJaWYgKGNvbnRyb2wtPm9uX3JlYWRf
cSA9PSAwKSB7CisJCQkJaWYgKCFkb25lKSB7CisJCQkJCWlmIChhc29jLT5zaXplX29uX2FsbF9z
dHJlYW1zID49IGNvbnRyb2wtPmxlbmd0aCkgeworCQkJCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3Ry
ZWFtcyAtPSBjb250cm9sLT5sZW5ndGg7CisJCQkJCX0gZWxzZSB7CisjaWZkZWYgSU5WQVJJQU5U
UworCQkJCQkJcGFuaWMoInNpemVfb25fYWxsX3N0cmVhbXMgPSAldSBzbWFsbGVyIHRoYW4gY29u
dHJvbCBsZW5ndGggJXUiLCBhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zLCBjb250cm9sLT5sZW5n
dGgpOworI2Vsc2UKKwkJCQkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPSAwOworI2VuZGlm
CisJCQkJCX0KKwkJCQkJc3RybS0+cGRfYXBpX3N0YXJ0ZWQgPSAxOworCQkJCQljb250cm9sLT5w
ZGFwaV9zdGFydGVkID0gMTsKKwkJCQl9CisJCQkJc2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0
cF9lcCwgc3RjYiwKKwkJCQkJCSAgY29udHJvbCwKKwkJCQkJCSAgJnN0Y2ItPnNjdHBfc29ja2V0
LT5zb19yY3YsIGNvbnRyb2wtPmVuZF9hZGRlZCwKKwkJCQkJCSAgaW5wX3JlYWRfbG9ja19oZWxk
LCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJfQorCQkJc3RybS0+bGFzdF9taWRfZGVsaXZlcmVk
ID0gbmV4dF90b19kZWw7CisJCQlpZiAoZG9uZSkgeworCQkJCWNvbnRyb2wgPSBuY3RsOworCQkJ
CWdvdG8gZGVsaXZlcl9tb3JlOworCQkJfQorCQl9CisJfQorb3V0OgorCXJldHVybiAocmV0KTsK
K30KKwordWludDMyX3QKK3NjdHBfYWRkX2Noa190b19jb250cm9sKHN0cnVjdCBzY3RwX3F1ZXVl
ZF90b19yZWFkICpjb250cm9sLAorCQkJc3RydWN0IHNjdHBfc3RyZWFtX2luICpzdHJtLAorCQkJ
c3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKwkJ
CXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywgaW50IGhvbGRfcmxvY2spCit7CisJLyoKKwkg
KiBHaXZlbiBhIGNvbnRyb2wgYW5kIGEgY2h1bmssIG1lcmdlIHRoZQorCSAqIGRhdGEgZnJvbSB0
aGUgY2hrIG9udG8gdGhlIGNvbnRyb2wgYW5kIGZyZWUKKwkgKiB1cCB0aGUgY2h1bmsgcmVzb3Vy
Y2VzLgorCSAqLworCXVpbnQzMl90IGFkZGVkPTA7CisJaW50IGlfbG9ja2VkID0gMDsKKworCWlm
IChjb250cm9sLT5vbl9yZWFkX3EgJiYgKGhvbGRfcmxvY2sgPT0gMCkpIHsKKwkJLyoKKwkJICog
SXRzIGJlaW5nIHBkLWFwaSdkIHNvIHdlIG11c3QKKwkJICogZG8gc29tZSBsb2Nrcy4KKwkJICov
CisJCVNDVFBfSU5QX1JFQURfTE9DSyhzdGNiLT5zY3RwX2VwKTsKKwkJaV9sb2NrZWQgPSAxOwor
CX0KKwlpZiAoY29udHJvbC0+ZGF0YSA9PSBOVUxMKSB7CisJCWNvbnRyb2wtPmRhdGEgPSBjaGst
PmRhdGE7CisJCXNjdHBfc2V0dXBfdGFpbF9wb2ludGVyKGNvbnRyb2wpOworCX0gZWxzZSB7CisJ
CXNjdHBfYWRkX3RvX3RhaWxfcG9pbnRlcihjb250cm9sLCBjaGstPmRhdGEsICZhZGRlZCk7CisJ
fQorCWNvbnRyb2wtPmZzbl9pbmNsdWRlZCA9IGNoay0+cmVjLmRhdGEuZnNuOworCWFzb2MtPnNp
emVfb25fcmVhc21fcXVldWUgLT0gY2hrLT5zZW5kX3NpemU7CisJc2N0cF91Y291bnRfZGVjcihh
c29jLT5jbnRfb25fcmVhc21fcXVldWUpOworCXNjdHBfbWFya19ub25fcmV2b2thYmxlKGFzb2Ms
IGNoay0+cmVjLmRhdGEudHNuKTsKKwljaGstPmRhdGEgPSBOVUxMOworCWlmIChjaGstPnJlYy5k
YXRhLnJjdl9mbGFncyAmIFNDVFBfREFUQV9GSVJTVF9GUkFHKSB7CisJCWNvbnRyb2wtPmZpcnN0
X2ZyYWdfc2VlbiA9IDE7CisJCWNvbnRyb2wtPnNpbmZvX3RzbiA9IGNoay0+cmVjLmRhdGEudHNu
OworCQljb250cm9sLT5zaW5mb19wcGlkID0gY2hrLT5yZWMuZGF0YS5wcGlkOworCX0KKwlpZiAo
Y2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfTEFTVF9GUkFHKSB7CisJCS8qIEl0
cyBjb21wbGV0ZSAqLworCQlpZiAoKGNvbnRyb2wtPm9uX3N0cm1fcSkgJiYgKGNvbnRyb2wtPm9u
X3JlYWRfcSkpIHsKKwkJCWlmIChjb250cm9sLT5wZGFwaV9zdGFydGVkKSB7CisJCQkJY29udHJv
bC0+cGRhcGlfc3RhcnRlZCA9IDA7CisJCQkJc3RybS0+cGRfYXBpX3N0YXJ0ZWQgPSAwOworCQkJ
fQorCQkJaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSA9PSBTQ1RQX09OX1VOT1JERVJFRCkgeworCQkJ
CS8qIFVub3JkZXJlZCAqLworCQkJCVRBSUxRX1JFTU9WRSgmc3RybS0+dW5vX2lucXVldWUsIGNv
bnRyb2wsIG5leHRfaW5zdHJtKTsKKwkJCQljb250cm9sLT5vbl9zdHJtX3EgPSAwOworCQkJfSBl
bHNlIGlmIChjb250cm9sLT5vbl9zdHJtX3EgPT0gU0NUUF9PTl9PUkRFUkVEKSB7CisJCQkJLyog
T3JkZXJlZCAqLworCQkJCVRBSUxRX1JFTU9WRSgmc3RybS0+aW5xdWV1ZSwgY29udHJvbCwgbmV4
dF9pbnN0cm0pOworCQkJCS8qCisJCQkJICogRG9uJ3QgbmVlZCB0byBkZWNyZW1lbnQgc2l6ZV9v
bl9hbGxfc3RyZWFtcywKKwkJCQkgKiBzaW5jZSBjb250cm9sIGlzIG9uIHRoZSByZWFkIHF1ZXVl
LgorCQkJCSAqLworCQkJCXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+Y250X29uX2FsbF9zdHJlYW1z
KTsKKwkJCQljb250cm9sLT5vbl9zdHJtX3EgPSAwOworI2lmZGVmIElOVkFSSUFOVFMKKwkJCX0g
ZWxzZSBpZiAoY29udHJvbC0+b25fc3RybV9xKSB7CisJCQkJcGFuaWMoIlVua25vd24gc3RhdGUg
b24gY3RybDogJXAgb25fc3RybV9xOiAlZCIsIGNvbnRyb2wsCisJCQkJICAgICAgY29udHJvbC0+
b25fc3RybV9xKTsKKyNlbmRpZgorCQkJfQorCQl9CisJCWNvbnRyb2wtPmVuZF9hZGRlZCA9IDE7
CisJCWNvbnRyb2wtPmxhc3RfZnJhZ19zZWVuID0gMTsKKwl9CisJaWYgKGlfbG9ja2VkKSB7CisJ
CVNDVFBfSU5QX1JFQURfVU5MT0NLKHN0Y2ItPnNjdHBfZXApOworCX0KKwlzY3RwX2ZyZWVfYV9j
aHVuayhzdGNiLCBjaGssIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJcmV0dXJuIChhZGRlZCk7Cit9
CisKKy8qCisgKiBEdW1wIG9udG8gdGhlIHJlLWFzc2VtYmx5IHF1ZXVlLCBpbiBpdHMgcHJvcGVy
IHBsYWNlLiBBZnRlciBkdW1waW5nIG9uIHRoZQorICogcXVldWUsIHNlZSBpZiBhbnRoaW5nIGNh
biBiZSBkZWxpdmVyZWQuIElmIHNvIHB1bGwgaXQgb2ZmIChvciBhcyBtdWNoIGFzCisgKiB3ZSBj
YW4uIElmIHdlIHJ1biBvdXQgb2Ygc3BhY2UgdGhlbiB3ZSBtdXN0IGR1bXAgd2hhdCB3ZSBjYW4g
YW5kIHNldCB0aGUKKyAqIGFwcHJvcHJpYXRlIGZsYWcgdG8gc2F5IHdlIHF1ZXVlZCB3aGF0IHdl
IGNvdWxkLgorICovCitzdGF0aWMgdm9pZAorc2N0cF9xdWV1ZV9kYXRhX2Zvcl9yZWFzbShzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCQkJICBz
dHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCwKKwkJCSAgc3RydWN0IHNjdHBfdG1p
dF9jaHVuayAqY2hrLAorCQkJICBpbnQgY3JlYXRlZF9jb250cm9sLAorCQkJICBpbnQgKmFib3J0
X2ZsYWcsIHVpbnQzMl90IHRzbikKK3sKKwl1aW50MzJfdCBuZXh0X2ZzbjsKKwlzdHJ1Y3Qgc2N0
cF90bWl0X2NodW5rICphdCwgKm5hdDsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1faW4gKnN0cm07CisJ
aW50IGRvX3dha2V1cCwgdW5vcmRlcmVkOworCXVpbnQzMl90IGxlbmFkZGVkOworCisJc3RybSA9
ICZhc29jLT5zdHJtaW5bY29udHJvbC0+c2luZm9fc3RyZWFtXTsKKwkvKgorCSAqIEZvciBvbGQg
dW4tb3JkZXJlZCBkYXRhIGNodW5rcy4KKwkgKi8KKwlpZiAoKGNvbnRyb2wtPnNpbmZvX2ZsYWdz
ID4+IDgpICYgU0NUUF9EQVRBX1VOT1JERVJFRCkgeworCQl1bm9yZGVyZWQgPSAxOworCX0gZWxz
ZSB7CisJCXVub3JkZXJlZCA9IDA7CisJfQorCS8qIE11c3QgYmUgYWRkZWQgdG8gdGhlIHN0cmVh
bS1pbiBxdWV1ZSAqLworCWlmIChjcmVhdGVkX2NvbnRyb2wpIHsKKwkJaWYgKCh1bm9yZGVyZWQg
PT0gMCkgfHwgKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCkpIHsKKwkJCXNjdHBfdWNvdW50X2luY3Io
YXNvYy0+Y250X29uX2FsbF9zdHJlYW1zKTsKKwkJfQorCQlpZiAoc2N0cF9wbGFjZV9jb250cm9s
X2luX3N0cmVhbShzdHJtLCBhc29jLCBjb250cm9sKSkgeworCQkJLyogRHVwbGljYXRlIFNTTj8g
Ki8KKwkJCXNjdHBfYWJvcnRfaW5fcmVhc20oc3RjYiwgY29udHJvbCwgY2hrLAorCQkJCQkgICAg
YWJvcnRfZmxhZywKKwkJCQkJICAgIFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzYp
OworCQkJc2N0cF9jbGVhbl91cF9jb250cm9sKHN0Y2IsIGNvbnRyb2wpOworCQkJcmV0dXJuOwor
CQl9CisJCWlmICgodHNuID09IChhc29jLT5jdW11bGF0aXZlX3RzbiArIDEpICYmIChhc29jLT5p
ZGF0YV9zdXBwb3J0ZWQgPT0gMCkpKSB7CisJCQkvKiBPayB3ZSBjcmVhdGVkIHRoaXMgY29udHJv
bCBhbmQgbm93CisJCQkgKiBsZXRzIHZhbGlkYXRlIHRoYXQgaXRzIGxlZ2FsIGkuZS4gdGhlcmUK
KwkJCSAqIGlzIGEgQiBiaXQgc2V0LCBpZiBub3QgYW5kIHdlIGhhdmUKKwkJCSAqIHVwIHRvIHRo
ZSBjdW0tYWNrIHRoZW4gaXRzIGludmFsaWQuCisJCQkgKi8KKwkJCWlmICgoY2hrLT5yZWMuZGF0
YS5yY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfRklSU1RfRlJBRykgPT0gMCkgeworCQkJCXNjdHBfYWJv
cnRfaW5fcmVhc20oc3RjYiwgY29udHJvbCwgY2hrLAorCQkJCSAgICAgICAgICAgICAgICAgICAg
YWJvcnRfZmxhZywKKwkJCQkgICAgICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOREFU
QSArIFNDVFBfTE9DXzcpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCX0KKwlpZiAoKGFzb2Mt
PmlkYXRhX3N1cHBvcnRlZCA9PSAwKSAmJiAodW5vcmRlcmVkID09IDEpKSB7CisJCXNjdHBfaW5q
ZWN0X29sZF91bm9yZGVyZWRfZGF0YShzdGNiLCBhc29jLCBjb250cm9sLCBjaGssIGFib3J0X2Zs
YWcpOworCQlyZXR1cm47CisJfQorCS8qCisJICogT2sgd2UgbXVzdCBxdWV1ZSB0aGUgY2h1bmsg
aW50byB0aGUgcmVhc2VtYmx5IHBvcnRpb246CisJICogIG8gaWYgaXRzIHRoZSBmaXJzdCBpdCBn
b2VzIHRvIHRoZSBjb250cm9sIG1idWYuCisJICogIG8gaWYgaXRzIG5vdCBmaXJzdCBidXQgdGhl
IG5leHQgaW4gc2VxdWVuY2UgaXQgZ29lcyB0byB0aGUgY29udHJvbCwKKwkgKiAgICBhbmQgZWFj
aCBzdWNjZWVkaW5nIG9uZSBpbiBvcmRlciBhbHNvIGdvZXMuCisJICogIG8gaWYgaXRzIG5vdCBp
biBvcmRlciB3ZSBwbGFjZSBpdCBvbiB0aGUgbGlzdCBpbiBpdHMgcGxhY2UuCisJICovCisJaWYg
KGNoay0+cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX0ZJUlNUX0ZSQUcpIHsKKwkJLyog
SXRzIHRoZSB2ZXJ5IGZpcnN0IG9uZS4gKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwKKwkJ
CSJjaHVuayBpcyBhIGZpcnN0IGZzbjogJXUgYmVjb21lcyBmc25faW5jbHVkZWRcbiIsCisJCQlj
aGstPnJlYy5kYXRhLmZzbik7CisJCWlmIChjb250cm9sLT5maXJzdF9mcmFnX3NlZW4pIHsKKwkJ
CS8qCisJCQkgKiBFcnJvciBvbiBzZW5kZXJzIHBhcnQsIHRoZXkgZWl0aGVyCisJCQkgKiBzZW50
IHVzIHR3byBkYXRhIGNodW5rcyB3aXRoIEZJUlNULAorCQkJICogb3IgdGhleSBzZW50IHR3byB1
bi1vcmRlcmVkIGNodW5rcyB0aGF0CisJCQkgKiB3ZXJlIGZyYWdtZW50ZWQgYXQgdGhlIHNhbWUg
dGltZSBpbiB0aGUgc2FtZSBzdHJlYW0uCisJCQkgKi8KKwkJCXNjdHBfYWJvcnRfaW5fcmVhc20o
c3RjYiwgY29udHJvbCwgY2hrLAorCQkJICAgICAgICAgICAgICAgICAgICBhYm9ydF9mbGFnLAor
CQkJICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ184
KTsKKwkJCXJldHVybjsKKwkJfQorCQljb250cm9sLT5maXJzdF9mcmFnX3NlZW4gPSAxOworCQlj
b250cm9sLT5zaW5mb19wcGlkID0gY2hrLT5yZWMuZGF0YS5wcGlkOworCQljb250cm9sLT5zaW5m
b190c24gPSBjaGstPnJlYy5kYXRhLnRzbjsKKwkJY29udHJvbC0+ZnNuX2luY2x1ZGVkID0gY2hr
LT5yZWMuZGF0YS5mc247CisJCWNvbnRyb2wtPmRhdGEgPSBjaGstPmRhdGE7CisJCXNjdHBfbWFy
a19ub25fcmV2b2thYmxlKGFzb2MsIGNoay0+cmVjLmRhdGEudHNuKTsKKwkJY2hrLT5kYXRhID0g
TlVMTDsKKwkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQp
OworCQlzY3RwX3NldHVwX3RhaWxfcG9pbnRlcihjb250cm9sKTsKKwkJYXNvYy0+c2l6ZV9vbl9h
bGxfc3RyZWFtcyArPSBjb250cm9sLT5sZW5ndGg7CisJfSBlbHNlIHsKKwkJLyogUGxhY2UgdGhl
IGNodW5rIGluIG91ciBsaXN0ICovCisJCWludCBpbnNlcnRlZD0wOworCQlpZiAoY29udHJvbC0+
bGFzdF9mcmFnX3NlZW4gPT0gMCkgeworCQkJLyogU3RpbGwgd2lsbGluZyB0byByYWlzZSBoaWdo
ZXN0IEZTTiBzZWVuICovCisJCQlpZiAoU0NUUF9UU05fR1QoY2hrLT5yZWMuZGF0YS5mc24sIGNv
bnRyb2wtPnRvcF9mc24pKSB7CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwKKwkJCQkJIldl
IGhhdmUgYSBuZXcgdG9wX2ZzbjogJXVcbiIsCisJCQkJCWNoay0+cmVjLmRhdGEuZnNuKTsKKwkJ
CQljb250cm9sLT50b3BfZnNuID0gY2hrLT5yZWMuZGF0YS5mc247CisJCQl9CisJCQlpZiAoY2hr
LT5yZWMuZGF0YS5yY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfTEFTVF9GUkFHKSB7CisJCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX1hYWCwKKwkJCQkJIlRoZSBsYXN0IGZzbiBpcyBub3cgaW4gcGxhY2UgZnNu
OiAldVxuIiwKKwkJCQkJY2hrLT5yZWMuZGF0YS5mc24pOworCQkJCWNvbnRyb2wtPmxhc3RfZnJh
Z19zZWVuID0gMTsKKwkJCQlpZiAoU0NUUF9UU05fR1QoY29udHJvbC0+dG9wX2ZzbiwgY2hrLT5y
ZWMuZGF0YS5mc24pKSB7CisJCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19YWFgsCisJCQkJCQkiTmV3
IGZzbjogJXUgaXMgbm90IGF0IHRvcF9mc246ICV1IC0tIGFib3J0XG4iLAorCQkJCQkJY2hrLT5y
ZWMuZGF0YS5mc24sCisJCQkJCQljb250cm9sLT50b3BfZnNuKTsKKwkJCQkJc2N0cF9hYm9ydF9p
bl9yZWFzbShzdGNiLCBjb250cm9sLCBjaGssCisJCQkJCQkJICAgIGFib3J0X2ZsYWcsCisJCQkJ
CQkJICAgIFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzkpOworCQkJCQlyZXR1cm47
CisJCQkJfQorCQkJfQorCQkJaWYgKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCB8fCBjb250cm9sLT5m
aXJzdF9mcmFnX3NlZW4pIHsKKwkJCQkvKgorCQkJCSAqIEZvciBJREFUQSB3ZSBhbHdheXMgY2hl
Y2sgc2luY2Ugd2Uga25vdyB0aGF0CisJCQkJICogdGhlIGZpcnN0IGZyYWdtZW50IGlzIDAuIEZv
ciBvbGQgREFUQSB3ZSBoYXZlCisJCQkJICogdG8gcmVjZWl2ZSB0aGUgZmlyc3QgYmVmb3JlIHdl
IGtub3cgdGhlIGZpcnN0IEZTTgorCQkJCSAqICh3aGljaCBpcyB0aGUgVFNOKS4KKwkJCQkgKi8K
KwkJCQlpZiAoU0NUUF9UU05fR0UoY29udHJvbC0+ZnNuX2luY2x1ZGVkLCBjaGstPnJlYy5kYXRh
LmZzbikpIHsKKwkJCQkJLyogV2UgaGF2ZSBhbHJlYWR5IGRlbGl2ZXJlZCB1cCB0byB0aGlzIHNv
IGl0cyBhIGR1cCAqLworCQkJCQlzY3RwX2Fib3J0X2luX3JlYXNtKHN0Y2IsIGNvbnRyb2wsIGNo
aywKKwkJCQkJCQkgICAgYWJvcnRfZmxhZywKKwkJCQkJCQkgICAgU0NUUF9GUk9NX1NDVFBfSU5E
QVRBICsgU0NUUF9MT0NfMTApOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJfQorCQl9IGVsc2Ug
eworCQkJaWYgKGNoay0+cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX0xBU1RfRlJBRykg
eworCQkJCS8qIFNlY29uZCBsYXN0PyBodWg/ICovCisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1hY
WCwKKwkJCQkJIkR1cGxpY2F0ZSBsYXN0IGZzbjogJXUgKHRvcDogJXUpIC0tIGFib3J0XG4iLAor
CQkJCQljaGstPnJlYy5kYXRhLmZzbiwgY29udHJvbC0+dG9wX2Zzbik7CisJCQkJc2N0cF9hYm9y
dF9pbl9yZWFzbShzdGNiLCBjb250cm9sLAorCQkJCQkJICAgIGNoaywgYWJvcnRfZmxhZywKKwkJ
CQkJCSAgICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18xMSk7CisJCQkJcmV0dXJu
OworCQkJfQorCQkJaWYgKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCB8fCBjb250cm9sLT5maXJzdF9m
cmFnX3NlZW4pIHsKKwkJCQkvKgorCQkJCSAqIEZvciBJREFUQSB3ZSBhbHdheXMgY2hlY2sgc2lu
Y2Ugd2Uga25vdyB0aGF0CisJCQkJICogdGhlIGZpcnN0IGZyYWdtZW50IGlzIDAuIEZvciBvbGQg
REFUQSB3ZSBoYXZlCisJCQkJICogdG8gcmVjZWl2ZSB0aGUgZmlyc3QgYmVmb3JlIHdlIGtub3cg
dGhlIGZpcnN0IEZTTgorCQkJCSAqICh3aGljaCBpcyB0aGUgVFNOKS4KKwkJCQkgKi8KKworCQkJ
CWlmIChTQ1RQX1RTTl9HRShjb250cm9sLT5mc25faW5jbHVkZWQsIGNoay0+cmVjLmRhdGEuZnNu
KSkgeworCQkJCQkvKiBXZSBoYXZlIGFscmVhZHkgZGVsaXZlcmVkIHVwIHRvIHRoaXMgc28gaXRz
IGEgZHVwICovCisJCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19YWFgsCisJCQkJCQkiTmV3IGZzbjog
JXUgaXMgYWxyZWFkeSBzZWVuIGluIGluY2x1ZGVkX2ZzbjogJXUgLS0gYWJvcnRcbiIsCisJCQkJ
CQljaGstPnJlYy5kYXRhLmZzbiwgY29udHJvbC0+ZnNuX2luY2x1ZGVkKTsKKwkJCQkJc2N0cF9h
Ym9ydF9pbl9yZWFzbShzdGNiLCBjb250cm9sLCBjaGssCisJCQkJCQkJICAgIGFib3J0X2ZsYWcs
CisJCQkJCQkJICAgIFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzEyKTsKKwkJCQkJ
cmV0dXJuOworCQkJCX0KKwkJCX0KKwkJCS8qIHZhbGlkYXRlIG5vdCBiZXlvbmQgdG9wIEZTTiBp
ZiB3ZSBoYXZlIHNlZW4gbGFzdCBvbmUgKi8KKwkJCWlmIChTQ1RQX1RTTl9HVChjaGstPnJlYy5k
YXRhLmZzbiwgY29udHJvbC0+dG9wX2ZzbikpIHsKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfWFhY
LAorCQkJCQkiTmV3IGZzbjogJXUgaXMgYmV5b25kIG9yIGF0IHRvcF9mc246ICV1IC0tIGFib3J0
XG4iLAorCQkJCQljaGstPnJlYy5kYXRhLmZzbiwKKwkJCQkJY29udHJvbC0+dG9wX2Zzbik7CisJ
CQkJc2N0cF9hYm9ydF9pbl9yZWFzbShzdGNiLCBjb250cm9sLCBjaGssCisJCQkJCQkgICAgYWJv
cnRfZmxhZywKKwkJCQkJCSAgICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18xMyk7
CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJCS8qCisJCSAqIElmIHdlIHJlYWNoIGhlcmUsIHdl
IG5lZWQgdG8gcGxhY2UgdGhlCisJCSAqIG5ldyBjaHVuayBpbiB0aGUgcmVhc3NlbWJseSBmb3Ig
dGhpcworCQkgKiBjb250cm9sLgorCQkgKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwKKwkJ
CSJjaHVuayBpcyBhIG5vdCBmaXJzdCBmc246ICV1IG5lZWRzIHRvIGJlIGluc2VydGVkXG4iLAor
CQkJY2hrLT5yZWMuZGF0YS5mc24pOworCQlUQUlMUV9GT1JFQUNIKGF0LCAmY29udHJvbC0+cmVh
c20sIHNjdHBfbmV4dCkgeworCQkJaWYgKFNDVFBfVFNOX0dUKGF0LT5yZWMuZGF0YS5mc24sIGNo
ay0+cmVjLmRhdGEuZnNuKSkgeworCQkJCWlmIChjaGstPnJlYy5kYXRhLnJjdl9mbGFncyAmIFND
VFBfREFUQV9MQVNUX0ZSQUcpIHsKKwkJCQkJLyogTGFzdCBub3QgYXQgdGhlIGVuZD8gaHVoPyAq
LworCQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfWFhYLAorCQkJCQkgICAgICAgICJMYXN0IGZyYWdt
ZW50IG5vdCBsYXN0IGluIGxpc3Q6IC0tIGFib3J0XG4iKTsKKwkJCQkJc2N0cF9hYm9ydF9pbl9y
ZWFzbShzdGNiLCBjb250cm9sLAorCQkJCQkgICAgICAgICAgICAgICAgICAgIGNoaywgYWJvcnRf
ZmxhZywKKwkJCQkJICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBT
Q1RQX0xPQ18xNCk7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQkJLyoKKwkJCQkgKiBUaGlzIG9u
ZSBpbiBxdWV1ZSBpcyBiaWdnZXIgdGhhbiB0aGUgbmV3IG9uZSwgaW5zZXJ0CisJCQkJICogdGhl
IG5ldyBvbmUgYmVmb3JlIGF0LgorCQkJCSAqLworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19YWFgs
CisJCQkJCSJJbnNlcnQgaXQgYmVmb3JlIGZzbjogJXVcbiIsCisJCQkJCWF0LT5yZWMuZGF0YS5m
c24pOworCQkJCWFzb2MtPnNpemVfb25fcmVhc21fcXVldWUgKz0gY2hrLT5zZW5kX3NpemU7CisJ
CQkJc2N0cF91Y291bnRfaW5jcihhc29jLT5jbnRfb25fcmVhc21fcXVldWUpOworCQkJCVRBSUxR
X0lOU0VSVF9CRUZPUkUoYXQsIGNoaywgc2N0cF9uZXh0KTsKKwkJCQlpbnNlcnRlZCA9IDE7CisJ
CQkJYnJlYWs7CisJCQl9IGVsc2UgaWYgKGF0LT5yZWMuZGF0YS5mc24gPT0gY2hrLT5yZWMuZGF0
YS5mc24pIHsKKwkJCQkvKiBHYWssIEhlIHNlbnQgbWUgYSBkdXBsaWNhdGUgc3RyIHNlcSBudW1i
ZXIgKi8KKwkJCQkvKgorCQkJCSAqIGZvbyBiYXIsIEkgZ3Vlc3MgSSB3aWxsIGp1c3QgZnJlZSB0
aGlzIG5ldyBndXksCisJCQkJICogc2hvdWxkIHdlIGFib3J0IHRvbz8gRklYIE1FIE1BWUJFPyBP
ciBpdCBDT1VMRCBiZQorCQkJCSAqIHRoYXQgdGhlIFNTTidzIGhhdmUgd3JhcHBlZC4gTWF5YmUg
SSBzaG91bGQKKwkJCQkgKiBjb21wYXJlIHRvIFRTTiBzb21laG93Li4uIHNpZ2ggZm9yIG5vdyBq
dXN0IGJsb3cKKwkJCQkgKiBhd2F5IHRoZSBjaHVuayEKKwkJCQkgKi8KKwkJCQlTQ1RQREJHKFND
VFBfREVCVUdfWFhYLAorCQkJCQkiRHVwbGljYXRlIHRvIGZzbjogJXUgLS0gYWJvcnRcbiIsCisJ
CQkJCWF0LT5yZWMuZGF0YS5mc24pOworCQkJCXNjdHBfYWJvcnRfaW5fcmVhc20oc3RjYiwgY29u
dHJvbCwKKwkJCQkJCSAgICBjaGssIGFib3J0X2ZsYWcsCisJCQkJCQkgICAgU0NUUF9GUk9NX1ND
VFBfSU5EQVRBICsgU0NUUF9MT0NfMTUpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCQlpZiAo
aW5zZXJ0ZWQgPT0gMCkgeworCQkJLyogR29lcyBvbiB0aGUgZW5kICovCisJCQlTQ1RQREJHKFND
VFBfREVCVUdfWFhYLCAiSW5zZXJ0aW5nIGF0IHRhaWwgb2YgbGlzdCBmc246ICV1XG4iLAorCQkJ
CWNoay0+cmVjLmRhdGEuZnNuKTsKKwkJCWFzb2MtPnNpemVfb25fcmVhc21fcXVldWUgKz0gY2hr
LT5zZW5kX3NpemU7CisJCQlzY3RwX3Vjb3VudF9pbmNyKGFzb2MtPmNudF9vbl9yZWFzbV9xdWV1
ZSk7CisJCQlUQUlMUV9JTlNFUlRfVEFJTCgmY29udHJvbC0+cmVhc20sIGNoaywgc2N0cF9uZXh0
KTsKKwkJfQorCX0KKwkvKgorCSAqIE9rIGxldHMgc2VlIGlmIHdlIGNhbiBzdWNrIGFueSB1cCBp
bnRvIHRoZSBjb250cm9sCisJICogc3RydWN0dXJlIHRoYXQgYXJlIGluIHNlcSBpZiBpdCBtYWtl
cyBzZW5zZS4KKwkgKi8KKwlkb193YWtldXAgPSAwOworCS8qCisJICogSWYgdGhlIGZpcnN0IGZy
YWdtZW50IGhhcyBub3QgYmVlbgorCSAqIHNlZW4gdGhlcmUgaXMgbm8gc2Vuc2UgaW4gbG9va2lu
Zy4KKwkgKi8KKwlpZiAoY29udHJvbC0+Zmlyc3RfZnJhZ19zZWVuKSB7CisJCW5leHRfZnNuID0g
Y29udHJvbC0+ZnNuX2luY2x1ZGVkICsgMTsKKwkJVEFJTFFfRk9SRUFDSF9TQUZFKGF0LCAmY29u
dHJvbC0+cmVhc20sIHNjdHBfbmV4dCwgbmF0KSB7CisJCQlpZiAoYXQtPnJlYy5kYXRhLmZzbiA9
PSBuZXh0X2ZzbikgeworCQkJCS8qIFdlIGNhbiBhZGQgdGhpcyBvbmUgbm93IHRvIHRoZSBjb250
cm9sICovCisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwKKwkJCQkJIkFkZGluZyBtb3JlIHRv
IGNvbnRyb2w6ICVwIGF0OiAlcCBmc246ICV1IG5leHRfZnNuOiAldSBpbmNsdWRlZDogJXVcbiIs
CisJCQkJCWNvbnRyb2wsIGF0LAorCQkJCQlhdC0+cmVjLmRhdGEuZnNuLAorCQkJCQluZXh0X2Zz
biwgY29udHJvbC0+ZnNuX2luY2x1ZGVkKTsKKwkJCQlUQUlMUV9SRU1PVkUoJmNvbnRyb2wtPnJl
YXNtLCBhdCwgc2N0cF9uZXh0KTsKKwkJCQlsZW5hZGRlZCA9IHNjdHBfYWRkX2Noa190b19jb250
cm9sKGNvbnRyb2wsIHN0cm0sIHN0Y2IsIGFzb2MsIGF0LCBTQ1RQX1JFQURfTE9DS19OT1RfSEVM
RCk7CisJCQkJaWYgKGNvbnRyb2wtPm9uX3JlYWRfcSkgeworCQkJCQlkb193YWtldXAgPSAxOwor
CQkJCX0gZWxzZSB7CisJCQkJCS8qCisJCQkJCSAqIFdlIG9ubHkgYWRkIHRvIHRoZSBzaXplLW9u
LWFsbC1zdHJlYW1zCisJCQkJCSAqIGlmIGl0cyBub3Qgb24gdGhlIHJlYWQgcS4gVGhlIHJlYWQg
cQorCQkJCQkgKiBmbGFnIHdpbGwgY2F1c2UgYSBzYmFsbG9jIHNvIGl0cyBhY2NvdW50ZWQKKwkJ
CQkJICogZm9yIHRoZXJlLgorCQkJCQkgKi8KKwkJCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFt
cyArPSBsZW5hZGRlZDsKKwkJCQl9CisJCQkJbmV4dF9mc24rKzsKKwkJCQlpZiAoY29udHJvbC0+
ZW5kX2FkZGVkICYmIGNvbnRyb2wtPnBkYXBpX3N0YXJ0ZWQpIHsKKwkJCQkJaWYgKHN0cm0tPnBk
X2FwaV9zdGFydGVkKSB7CisJCQkJCQlzdHJtLT5wZF9hcGlfc3RhcnRlZCA9IDA7CisJCQkJCQlj
b250cm9sLT5wZGFwaV9zdGFydGVkID0gMDsKKwkJCQkJfQorCQkJCQlpZiAoY29udHJvbC0+b25f
cmVhZF9xID09IDApIHsKKwkJCQkJCXNjdHBfYWRkX3RvX3JlYWRxKHN0Y2ItPnNjdHBfZXAsIHN0
Y2IsCisJCQkJCQkJCSAgY29udHJvbCwKKwkJCQkJCQkJICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNv
X3JjdiwgY29udHJvbC0+ZW5kX2FkZGVkLAorCQkJCQkJCQkgIFNDVFBfUkVBRF9MT0NLX05PVF9I
RUxELCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKwkJ
CX0gZWxzZSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJaWYgKGRvX3dha2V1cCkgewor
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJc2N0cF9pbnZva2VfcmVjdl9jYWxsYmFjayhz
dGNiLT5zY3RwX2VwLCBzdGNiLCBjb250cm9sLCBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCk7Cisj
ZW5kaWYKKwkJLyogTmVlZCB0byB3YWtldXAgdGhlIHJlYWRlciAqLworCQlzY3RwX3dha2V1cF90
aGVfcmVhZF9zb2NrZXQoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9TT19OT1RfTE9DS0VEKTsK
Kwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqCitzY3RwX2ZpbmRf
cmVhc21fZW50cnkoc3RydWN0IHNjdHBfc3RyZWFtX2luICpzdHJtLCB1aW50MzJfdCBtaWQsIGlu
dCBvcmRlcmVkLCBpbnQgaWRhdGFfc3VwcG9ydGVkKQoreworCXN0cnVjdCBzY3RwX3F1ZXVlZF90
b19yZWFkICpjb250cm9sOworCisJaWYgKG9yZGVyZWQpIHsKKwkJVEFJTFFfRk9SRUFDSChjb250
cm9sLCAmc3RybS0+aW5xdWV1ZSwgbmV4dF9pbnN0cm0pIHsKKwkJCWlmIChTQ1RQX01JRF9FUShp
ZGF0YV9zdXBwb3J0ZWQsIGNvbnRyb2wtPm1pZCwgbWlkKSkgeworCQkJCWJyZWFrOworCQkJfQor
CQl9CisJfSBlbHNlIHsKKwkJaWYgKGlkYXRhX3N1cHBvcnRlZCkgeworCQkJVEFJTFFfRk9SRUFD
SChjb250cm9sLCAmc3RybS0+dW5vX2lucXVldWUsIG5leHRfaW5zdHJtKSB7CisJCQkJaWYgKFND
VFBfTUlEX0VRKGlkYXRhX3N1cHBvcnRlZCwgY29udHJvbC0+bWlkLCBtaWQpKSB7CisJCQkJCWJy
ZWFrOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWNvbnRyb2wgPSBUQUlMUV9GSVJTVCgm
c3RybS0+dW5vX2lucXVldWUpOworCQl9CisJfQorCXJldHVybiAoY29udHJvbCk7Cit9CisKK3N0
YXRpYyBpbnQKK3NjdHBfcHJvY2Vzc19hX2RhdGFfY2h1bmsoc3RydWN0IHNjdHBfdGNiICpzdGNi
LCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKwkJCSAgc3RydWN0IG1idWYgKiptLCBp
bnQgb2Zmc2V0LCAgaW50IGNoa19sZW5ndGgsCisJCQkgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwg
dWludDMyX3QgKmhpZ2hfdHNuLCBpbnQgKmFib3J0X2ZsYWcsCisJCQkgIGludCAqYnJlYWtfZmxh
ZywgaW50IGxhc3RfY2h1bmssIHVpbnQ4X3QgY2hrX3R5cGUpCit7CisJc3RydWN0IHNjdHBfdG1p
dF9jaHVuayAqY2hrID0gTlVMTDsgLyogbWFrZSBnY2MgaGFwcHkgKi8KKwlzdHJ1Y3Qgc2N0cF9z
dHJlYW1faW4gKnN0cm07CisJdWludDMyX3QgdHNuLCBmc24sIGdhcCwgbWlkOworCXN0cnVjdCBt
YnVmICpkbWJ1ZjsKKwlpbnQgdGhlX2xlbjsKKwlpbnQgbmVlZF9yZWFzbV9jaGVjayA9IDA7CisJ
dWludDE2X3Qgc2lkOworCXN0cnVjdCBtYnVmICpvcF9lcnI7CisJY2hhciBtc2dbU0NUUF9ESUFH
X0lORk9fTEVOXTsKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCwgKm5jb250
cm9sOworCXVpbnQzMl90IHBwaWQ7CisJdWludDhfdCBjaGtfZmxhZ3M7CisJc3RydWN0IHNjdHBf
c3RyZWFtX3Jlc2V0X2xpc3QgKmxpc3RlOworCWludCBvcmRlcmVkOworCXNpemVfdCBjbGVuOwor
CWludCBjcmVhdGVkX2NvbnRyb2wgPSAwOworCisJaWYgKGNoa190eXBlID09IFNDVFBfSURBVEEp
IHsKKwkJc3RydWN0IHNjdHBfaWRhdGFfY2h1bmsgKmNodW5rLCBjaHVua19idWY7CisKKwkJY2h1
bmsgPSAoc3RydWN0IHNjdHBfaWRhdGFfY2h1bmsgKilzY3RwX21fZ2V0cHRyKCptLCBvZmZzZXQs
CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
b2Yoc3RydWN0IHNjdHBfaWRhdGFfY2h1bmspLCAodWludDhfdCAqKSZjaHVua19idWYpOworCQlj
aGtfZmxhZ3MgPSBjaHVuay0+Y2guY2h1bmtfZmxhZ3M7CisJCWNsZW4gPSBzaXplb2Yoc3RydWN0
IHNjdHBfaWRhdGFfY2h1bmspOworCQl0c24gPSBudG9obChjaHVuay0+ZHAudHNuKTsKKwkJc2lk
ID0gbnRvaHMoY2h1bmstPmRwLnNpZCk7CisJCW1pZCA9IG50b2hsKGNodW5rLT5kcC5taWQpOwor
CQlpZiAoY2hrX2ZsYWdzICYgU0NUUF9EQVRBX0ZJUlNUX0ZSQUcpIHsKKwkJCWZzbiA9IDA7CisJ
CQlwcGlkID0gY2h1bmstPmRwLnBwaWRfZnNuLnBwaWQ7CisJCX0gZWxzZSB7CisJCQlmc24gPSBu
dG9obChjaHVuay0+ZHAucHBpZF9mc24uZnNuKTsKKwkJCXBwaWQgPSAweGZmZmZmZmZmOyAvKiBV
c2UgYXMgYW4gaW52YWxpZCB2YWx1ZS4gKi8KKwkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCBzY3Rw
X2RhdGFfY2h1bmsgKmNodW5rLCBjaHVua19idWY7CisKKwkJY2h1bmsgPSAoc3RydWN0IHNjdHBf
ZGF0YV9jaHVuayAqKXNjdHBfbV9nZXRwdHIoKm0sIG9mZnNldCwKKwkJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFf
Y2h1bmspLCAodWludDhfdCAqKSZjaHVua19idWYpOworCQljaGtfZmxhZ3MgPSBjaHVuay0+Y2gu
Y2h1bmtfZmxhZ3M7CisJCWNsZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuayk7CisJ
CXRzbiA9IG50b2hsKGNodW5rLT5kcC50c24pOworCQlzaWQgPSBudG9ocyhjaHVuay0+ZHAuc2lk
KTsKKwkJbWlkID0gKHVpbnQzMl90KShudG9ocyhjaHVuay0+ZHAuc3NuKSk7CisJCWZzbiA9IHRz
bjsKKwkJcHBpZCA9IGNodW5rLT5kcC5wcGlkOworCX0KKwlpZiAoKHNpemVfdCljaGtfbGVuZ3Ro
ID09IGNsZW4pIHsKKwkJLyoKKwkJICogTmVlZCB0byBzZW5kIGFuIGFib3J0IHNpbmNlIHdlIGhh
ZCBhCisJCSAqIGVtcHR5IGRhdGEgY2h1bmsuCisJCSAqLworCQlvcF9lcnIgPSBzY3RwX2dlbmVy
YXRlX25vX3VzZXJfZGF0YV9jYXVzZSh0c24pOworCQlzdGNiLT5zY3RwX2VwLT5sYXN0X2Fib3J0
X2NvZGUgPSBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18xNjsKKwkJc2N0cF9hYm9y
dF9hbl9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBvcF9lcnIsIFNDVFBfU09fTk9U
X0xPQ0tFRCk7CisJCSphYm9ydF9mbGFnID0gMTsKKwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKChj
aGtfZmxhZ3MgJiBTQ1RQX0RBVEFfU0FDS19JTU1FRElBVEVMWSkgPT0gU0NUUF9EQVRBX1NBQ0tf
SU1NRURJQVRFTFkpIHsKKwkJYXNvYy0+c2VuZF9zYWNrID0gMTsKKwl9CisJb3JkZXJlZCA9ICgo
Y2hrX2ZsYWdzICYgU0NUUF9EQVRBX1VOT1JERVJFRCkgPT0gMCk7CisJaWYgKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUFQX0xPR0dJTkdfRU5BQkxFKSB7CisJ
CXNjdHBfbG9nX21hcCh0c24sIGFzb2MtPmN1bXVsYXRpdmVfdHNuLCBhc29jLT5oaWdoZXN0X3Rz
bl9pbnNpZGVfbWFwLCBTQ1RQX01BUF9UU05fRU5URVJTKTsKKwl9CisJaWYgKHN0Y2IgPT0gTlVM
TCkgeworCQlyZXR1cm4gKDApOworCX0KKwlTQ1RQX0xUUkFDRV9DSEsoc3RjYi0+c2N0cF9lcCwg
c3RjYiwgY2hrX3R5cGUsIHRzbik7CisJaWYgKFNDVFBfVFNOX0dFKGFzb2MtPmN1bXVsYXRpdmVf
dHNuLCB0c24pKSB7CisJCS8qIEl0IGlzIGEgZHVwbGljYXRlICovCisJCVNDVFBfU1RBVF9JTkNS
KHNjdHBzX3JlY3ZkdXBkYXRhKTsKKwkJaWYgKGFzb2MtPm51bWR1cHRzbnMgPCBTQ1RQX01BWF9E
VVBfVFNOUykgeworCQkJLyogUmVjb3JkIGEgZHVwIGZvciB0aGUgbmV4dCBvdXRib3VuZCBzYWNr
ICovCisJCQlhc29jLT5kdXBfdHNuc1thc29jLT5udW1kdXB0c25zXSA9IHRzbjsKKwkJCWFzb2Mt
Pm51bWR1cHRzbnMrKzsKKwkJfQorCQlhc29jLT5zZW5kX3NhY2sgPSAxOworCQlyZXR1cm4gKDAp
OworCX0KKwkvKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBUU04ncyBiZXR3ZWVuIHRoZSBiYXNl
IGFuZCB0aGlzIFRTTiAqLworCVNDVFBfQ0FMQ19UU05fVE9fR0FQKGdhcCwgdHNuLCBhc29jLT5t
YXBwaW5nX2FycmF5X2Jhc2VfdHNuKTsKKwlpZiAoZ2FwID49IChTQ1RQX01BUFBJTkdfQVJSQVkg
PDwgMykpIHsKKwkJLyogQ2FuJ3QgaG9sZCB0aGUgYml0IGluIHRoZSBtYXBwaW5nIGF0IG1heCBh
cnJheSwgdG9zcyBpdCAqLworCQlyZXR1cm4gKDApOworCX0KKwlpZiAoZ2FwID49ICh1aW50MzJf
dCkgKGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6ZSA8PCAzKSkgeworCQlTQ1RQX1RDQl9MT0NLX0FT
U0VSVChzdGNiKTsKKwkJaWYgKHNjdHBfZXhwYW5kX21hcHBpbmdfYXJyYXkoYXNvYywgZ2FwKSkg
eworCQkJLyogQ2FuJ3QgZXhwYW5kLCBkcm9wIGl0ICovCisJCQlyZXR1cm4gKDApOworCQl9CisJ
fQorCWlmIChTQ1RQX1RTTl9HVCh0c24sICpoaWdoX3RzbikpIHsKKwkJKmhpZ2hfdHNuID0gdHNu
OworCX0KKwkvKiBTZWUgaWYgd2UgaGF2ZSByZWNlaXZlZCB0aGlzIG9uZSBhbHJlYWR5ICovCisJ
aWYgKFNDVFBfSVNfVFNOX1BSRVNFTlQoYXNvYy0+bWFwcGluZ19hcnJheSwgZ2FwKSB8fAorCSAg
ICBTQ1RQX0lTX1RTTl9QUkVTRU5UKGFzb2MtPm5yX21hcHBpbmdfYXJyYXksIGdhcCkpIHsKKwkJ
U0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmR1cGRhdGEpOworCQlpZiAoYXNvYy0+bnVtZHVwdHNu
cyA8IFNDVFBfTUFYX0RVUF9UU05TKSB7CisJCQkvKiBSZWNvcmQgYSBkdXAgZm9yIHRoZSBuZXh0
IG91dGJvdW5kIHNhY2sgKi8KKwkJCWFzb2MtPmR1cF90c25zW2Fzb2MtPm51bWR1cHRzbnNdID0g
dHNuOworCQkJYXNvYy0+bnVtZHVwdHNucysrOworCQl9CisJCWFzb2MtPnNlbmRfc2FjayA9IDE7
CisJCXJldHVybiAoMCk7CisJfQorCS8qCisJICogQ2hlY2sgdG8gc2VlIGFib3V0IHRoZSBHT05F
IGZsYWcsIGR1cGxpY2F0ZXMgd291bGQgY2F1c2UgYSBzYWNrCisJICogdG8gYmUgc2VudCB1cCBh
Ym92ZQorCSAqLworCWlmICgoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19TT0NLRVRfR09ORSkgfHwKKwkgICAgIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpIHx8CisJICAgICAoc3RjYi0+YXNvYy5zdGF0
ZSAmIFNDVFBfU1RBVEVfQ0xPU0VEX1NPQ0tFVCkpKSB7CisJCS8qCisJCSAqIHdhaXQgYSBtaW51
dGUsIHRoaXMgZ3V5IGlzIGdvbmUsIHRoZXJlIGlzIG5vIGxvbmdlciBhCisJCSAqIHJlY2VpdmVy
LiBTZW5kIHBlZXIgYW4gQUJPUlQhCisJCSAqLworCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2Nh
dXNlKFNDVFBfQ0FVU0VfT1VUX09GX1JFU0MsICIiKTsKKwkJc2N0cF9hYm9ydF9hbl9hc3NvY2lh
dGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBvcF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJ
CSphYm9ydF9mbGFnID0gMTsKKwkJcmV0dXJuICgwKTsKKwl9CisJLyoKKwkgKiBOb3cgYmVmb3Jl
IGdvaW5nIGZ1cnRoZXIgd2Ugc2VlIGlmIHRoZXJlIGlzIHJvb20uIElmIE5PVCB0aGVuIHdlCisJ
ICogTUFZIGxldCBvbmUgdGhyb3VnaCBvbmx5IElGIHRoaXMgVFNOIGlzIHRoZSBvbmUgd2UgYXJl
IHdhaXRpbmcKKwkgKiBmb3Igb24gYSBwYXJ0aWFsIGRlbGl2ZXJ5IEFQSS4KKwkgKi8KKworCS8q
IElzIHRoZSBzdHJlYW0gdmFsaWQ/ICovCisJaWYgKHNpZCA+PSBhc29jLT5zdHJlYW1pbmNudCkg
eworCQlzdHJ1Y3Qgc2N0cF9lcnJvcl9pbnZhbGlkX3N0cmVhbSAqY2F1c2U7CisKKwkJb3BfZXJy
ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJvcl9pbnZhbGlk
X3N0cmVhbSksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBNX05PV0FJVCwg
MSwgTVRfREFUQSk7CisJCWlmIChvcF9lcnIgIT0gTlVMTCkgeworCQkJLyogYWRkIHNvbWUgc3Bh
Y2UgdXAgZnJvbnQgc28gcHJlcGVuZCB3aWxsIHdvcmsgd2VsbCAqLworCQkJU0NUUF9CVUZfUkVT
Vl9VRihvcF9lcnIsIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikpOworCQkJY2F1c2UgPSBt
dG9kKG9wX2Vyciwgc3RydWN0IHNjdHBfZXJyb3JfaW52YWxpZF9zdHJlYW0gKik7CisJCQkvKgor
CQkJICogRXJyb3IgY2F1c2VzIGFyZSBqdXN0IHBhcmFtJ3MgYW5kIHRoaXMgb25lIGhhcworCQkJ
ICogdHdvIGJhY2sgdG8gYmFjayBwaGRyLCBvbmUgd2l0aCB0aGUgZXJyb3IgdHlwZQorCQkJICog
YW5kIHNpemUsIHRoZSBvdGhlciB3aXRoIHRoZSBzdHJlYW1pZCBhbmQgYSByc3ZkCisJCQkgKi8K
KwkJCVNDVFBfQlVGX0xFTihvcF9lcnIpID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Vycm9yX2ludmFs
aWRfc3RyZWFtKTsKKwkJCWNhdXNlLT5jYXVzZS5jb2RlID0gaHRvbnMoU0NUUF9DQVVTRV9JTlZB
TElEX1NUUkVBTSk7CisJCQljYXVzZS0+Y2F1c2UubGVuZ3RoID0gaHRvbnMoc2l6ZW9mKHN0cnVj
dCBzY3RwX2Vycm9yX2ludmFsaWRfc3RyZWFtKSk7CisJCQljYXVzZS0+c3RyZWFtX2lkID0gaHRv
bnMoc2lkKTsKKwkJCWNhdXNlLT5yZXNlcnZlZCA9IGh0b25zKDApOworCQkJc2N0cF9xdWV1ZV9v
cF9lcnIoc3RjYiwgb3BfZXJyKTsKKwkJfQorCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19iYWRzaWQp
OworCQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKwkJU0NUUF9TRVRfVFNOX1BSRVNFTlQo
YXNvYy0+bnJfbWFwcGluZ19hcnJheSwgZ2FwKTsKKwkJaWYgKFNDVFBfVFNOX0dUKHRzbiwgYXNv
Yy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCkpIHsKKwkJCWFzb2MtPmhpZ2hlc3RfdHNuX2lu
c2lkZV9ucl9tYXAgPSB0c247CisJCX0KKwkJaWYgKHRzbiA9PSAoYXNvYy0+Y3VtdWxhdGl2ZV90
c24gKyAxKSkgeworCQkJLyogVXBkYXRlIGN1bS1hY2sgKi8KKwkJCWFzb2MtPmN1bXVsYXRpdmVf
dHNuID0gdHNuOworCQl9CisJCXJldHVybiAoMCk7CisJfQorCS8qCisJICogSWYgaXRzIGEgZnJh
Z21lbnRlZCBtZXNzYWdlLCBsZXRzIHNlZSBpZiB3ZSBjYW4KKwkgKiBmaW5kIHRoZSBjb250cm9s
IG9uIHRoZSByZWFzc2VtYmx5IHF1ZXVlcy4KKwkgKi8KKwlpZiAoKGNoa190eXBlID09IFNDVFBf
SURBVEEpICYmCisJICAgICgoY2hrX2ZsYWdzICYgU0NUUF9EQVRBX0ZJUlNUX0ZSQUcpID09IDAp
ICYmCisJICAgIChmc24gPT0gMCkpIHsKKwkJLyoKKwkJICogIFRoZSBmaXJzdCAqbXVzdCogYmUg
ZnNuIDAsIGFuZCBvdGhlcgorCQkgKiAgKG1pZGRsZS9lbmQpIHBpZWNlcyBjYW4gKm5vdCogYmUg
ZnNuIDAuCisJCSAqIFhYWDogVGhpcyBjYW4gaGFwcGVuIGluIGNhc2Ugb2YgYSB3cmFwIGFyb3Vu
ZC4KKwkJICogICAgICBJZ25vcmUgaXMgZm9yIG5vdy4KKwkJICovCisJCVNDVFBfU05QUklOVEYo
bXNnLCBzaXplb2YobXNnKSwgIkZTTiB6ZXJvIGZvciBNSUQ9JTguOHgsIGJ1dCBmbGFncz0lMi4y
eCIsIG1pZCwgY2hrX2ZsYWdzKTsKKwkJZ290byBlcnJfb3V0OworCX0KKwljb250cm9sID0gc2N0
cF9maW5kX3JlYXNtX2VudHJ5KCZhc29jLT5zdHJtaW5bc2lkXSwgbWlkLCBvcmRlcmVkLCBhc29j
LT5pZGF0YV9zdXBwb3J0ZWQpOworCVNDVFBEQkcoU0NUUF9ERUJVR19YWFgsICJjaHVua19mbGFn
czoweCV4IGxvb2sgZm9yIGNvbnRyb2wgb24gcXVldWVzICVwXG4iLAorCQljaGtfZmxhZ3MsIGNv
bnRyb2wpOworCWlmICgoY2hrX2ZsYWdzICYgU0NUUF9EQVRBX05PVF9GUkFHKSAhPSBTQ1RQX0RB
VEFfTk9UX0ZSQUcpIHsKKwkJLyogU2VlIGlmIHdlIGNhbiBmaW5kIHRoZSByZS1hc3NlbWJseSBl
bnRpdHkgKi8KKwkJaWYgKGNvbnRyb2wgIT0gTlVMTCkgeworCQkJLyogV2UgZm91bmQgc29tZXRo
aW5nLCBkb2VzIGl0IGJlbG9uZz8gKi8KKwkJCWlmIChvcmRlcmVkICYmIChtaWQgIT0gY29udHJv
bC0+bWlkKSkgeworCQkJCVNDVFBfU05QUklOVEYobXNnLCBzaXplb2YobXNnKSwgIlJlYXNzZW1i
bHkgcHJvYmxlbSAoTUlEPSU4Ljh4KSIsIG1pZCk7CisJCQllcnJfb3V0OgorCQkJCW9wX2VyciA9
IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9QUk9UT0NPTF9WSU9MQVRJT04sIG1zZyk7
CisJCQkJc3RjYi0+c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfSU5E
QVRBICsgU0NUUF9MT0NfMTc7CisJCQkJc2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihzdGNiLT5z
Y3RwX2VwLCBzdGNiLCBvcF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQkJKmFib3J0X2Zs
YWcgPSAxOworCQkJCXJldHVybiAoMCk7CisJCQl9CisJCQlpZiAob3JkZXJlZCAmJiAoKGNvbnRy
b2wtPnNpbmZvX2ZsYWdzID4+IDgpICYgU0NUUF9EQVRBX1VOT1JERVJFRCkpIHsKKwkJCQkvKiBX
ZSBjYW4ndCBoYXZlIGEgc3dpdGNoZWQgb3JkZXIgd2l0aCBhbiB1bm9yZGVyZWQgY2h1bmsgKi8K
KwkJCQlTQ1RQX1NOUFJJTlRGKG1zZywgc2l6ZW9mKG1zZyksCisJCQkJICAgICAgICAgICAgICAi
QWxsIGZyYWdtZW50cyBvZiBhIHVzZXIgbWVzc2FnZSBtdXN0IGJlIG9yZGVyZWQgb3IgdW5vcmRl
cmVkIChUU049JTguOHgpIiwKKwkJCQkgICAgICAgICAgICAgIHRzbik7CisJCQkJZ290byBlcnJf
b3V0OworCQkJfQorCQkJaWYgKCFvcmRlcmVkICYmICgoKGNvbnRyb2wtPnNpbmZvX2ZsYWdzID4+
IDgpICYgU0NUUF9EQVRBX1VOT1JERVJFRCkgPT0gMCkpIHsKKwkJCQkvKiBXZSBjYW4ndCBoYXZl
IGEgc3dpdGNoZWQgdW5vcmRlcmVkIHdpdGggYSBvcmRlcmVkIGNodW5rICovCisJCQkJU0NUUF9T
TlBSSU5URihtc2csIHNpemVvZihtc2cpLAorCQkJCSAgICAgICAgICAgICAiQWxsIGZyYWdtZW50
cyBvZiBhIHVzZXIgbWVzc2FnZSBtdXN0IGJlIG9yZGVyZWQgb3IgdW5vcmRlcmVkIChUU049JTgu
OHgpIiwKKwkJCQkgICAgICAgICAgICAgdHNuKTsKKwkJCQlnb3RvIGVycl9vdXQ7CisJCQl9CisJ
CX0KKwl9IGVsc2UgeworCQkvKiBJdHMgYSBjb21wbGV0ZSBzZWdtZW50LiBMZXRzIHZhbGlkYXRl
IHdlCisJCSAqIGRvbid0IGhhdmUgYSByZS1hc3NlbWJseSBnb2luZyBvbiB3aXRoCisJCSAqIHRo
ZSBzYW1lIFN0cmVhbS9TZXEgKGZvciBvcmRlcmVkKSBvciBpbgorCQkgKiB0aGUgc2FtZSBTdHJl
YW0gZm9yIHVub3JkZXJlZC4KKwkJICovCisJCWlmIChjb250cm9sICE9IE5VTEwpIHsKKwkJCWlm
IChvcmRlcmVkIHx8IGFzb2MtPmlkYXRhX3N1cHBvcnRlZCkgeworCQkJCVNDVFBEQkcoU0NUUF9E
RUJVR19YWFgsICJjaHVua19mbGFnczogMHgleCBkdXAgZGV0ZWN0ZWQgb24gTUlEOiAldVxuIiwK
KwkJCQkJY2hrX2ZsYWdzLCBtaWQpOworCQkJCVNDVFBfU05QUklOVEYobXNnLCBzaXplb2YobXNn
KSwgIkR1cGxpY2F0ZSBNSUQ9JTguOHggZGV0ZWN0ZWQuIiwgbWlkKTsKKwkJCQlnb3RvIGVycl9v
dXQ7CisJCQl9IGVsc2UgeworCQkJCWlmICgodHNuID09IGNvbnRyb2wtPmZzbl9pbmNsdWRlZCAr
IDEpICYmCisJCQkJICAgIChjb250cm9sLT5lbmRfYWRkZWQgPT0gMCkpIHsKKwkJCQkJU0NUUF9T
TlBSSU5URihtc2csIHNpemVvZihtc2cpLAorCQkJCQkgICAgICAgICAgICAgICJJbGxlZ2FsIG1l
c3NhZ2Ugc2VxdWVuY2UsIG1pc3NpbmcgZW5kIGZvciBNSUQ6ICU4Ljh4IiwKKwkJCQkJICAgICAg
ICAgICAgICBjb250cm9sLT5mc25faW5jbHVkZWQpOworCQkJCQlnb3RvIGVycl9vdXQ7CisJCQkJ
fSBlbHNlIHsKKwkJCQkJY29udHJvbCA9IE5VTEw7CisJCQkJfQorCQkJfQorCQl9CisJfQorCS8q
IG5vdyBkbyB0aGUgdGVzdHMgKi8KKwlpZiAoKChhc29jLT5jbnRfb25fYWxsX3N0cmVhbXMgKwor
CSAgICAgIGFzb2MtPmNudF9vbl9yZWFzbV9xdWV1ZSArCisJICAgICAgYXNvYy0+Y250X21zZ19v
bl9zYikgPj0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX21heF9jaHVua3Nfb25fcXVldWUpKSB8fAor
CSAgICAoKChpbnQpYXNvYy0+bXlfcnduZCkgPD0gMCkpIHsKKwkJLyoKKwkJICogV2hlbiB3ZSBo
YXZlIE5PIHJvb20gaW4gdGhlIHJ3bmQgd2UgY2hlY2sgdG8gbWFrZSBzdXJlCisJCSAqIHRoZSBy
ZWFkZXIgaXMgZG9pbmcgaXRzIGpvYi4uLgorCQkgKi8KKwkJaWYgKHN0Y2ItPnNjdHBfc29ja2V0
LT5zb19yY3Yuc2JfY2MpIHsKKwkJCS8qIHNvbWUgdG8gcmVhZCwgd2FrZS11cCAqLworI2lmIGRl
ZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJc3RydWN0IHNv
Y2tldCAqc287CisKKwkJCXNvID0gU0NUUF9JTlBfU08oc3RjYi0+c2N0cF9lcCk7CisJCQlhdG9t
aWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0
Y2IpOworCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisJCQlTQ1RQX1RDQl9MT0NLKHN0Y2Ip
OworCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJaWYg
KHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQpIHsKKwkJCQkvKiBh
c3NvYyB3YXMgZnJlZWQgd2hpbGUgd2Ugd2VyZSB1bmxvY2tlZCAqLworCQkJCVNDVFBfU09DS0VU
X1VOTE9DSyhzbywgMSk7CisJCQkJcmV0dXJuICgwKTsKKwkJCX0KKyNlbmRpZgorCQkJc2N0cF9z
b3J3YWtldXAoc3RjYi0+c2N0cF9lcCwgc3RjYi0+c2N0cF9zb2NrZXQpOworI2lmIGRlZmluZWQo
X19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJU0NUUF9TT0NLRVRfVU5M
T0NLKHNvLCAxKTsKKyNlbmRpZgorCQl9CisJCS8qIG5vdyBpcyBpdCBpbiB0aGUgbWFwcGluZyBh
cnJheSBvZiB3aGF0IHdlIGhhdmUgYWNjZXB0ZWQ/ICovCisJCWlmIChjaGtfdHlwZSA9PSBTQ1RQ
X0RBVEEpIHsKKwkJCWlmIChTQ1RQX1RTTl9HVCh0c24sIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lk
ZV9tYXApICYmCisJCQkgICAgU0NUUF9UU05fR1QodHNuLCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNp
ZGVfbnJfbWFwKSkgeworCQkJCS8qIE5vcGUgbm90IGluIHRoZSB2YWxpZCByYW5nZSBkdW1wIGl0
ICovCisJCQlkdW1wX3BhY2tldDoKKwkJCQlzY3RwX3NldF9yd25kKHN0Y2IsIGFzb2MpOworCQkJ
CWlmICgoYXNvYy0+Y250X29uX2FsbF9zdHJlYW1zICsKKwkJCQkgICAgIGFzb2MtPmNudF9vbl9y
ZWFzbV9xdWV1ZSArCisJCQkJICAgICBhc29jLT5jbnRfbXNnX29uX3NiKSA+PSBTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfbWF4X2NodW5rc19vbl9xdWV1ZSkpIHsKKwkJCQkJU0NUUF9TVEFUX0lOQ1Io
c2N0cHNfZGF0YWRyb3BjaGtsbXQpOworCQkJCX0gZWxzZSB7CisJCQkJCVNDVFBfU1RBVF9JTkNS
KHNjdHBzX2RhdGFkcm9wcnduZCk7CisJCQkJfQorCQkJCSpicmVha19mbGFnID0gMTsKKwkJCQly
ZXR1cm4gKDApOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGNvbnRyb2wgPT0gTlVMTCkgewor
CQkJCWdvdG8gZHVtcF9wYWNrZXQ7CisJCQl9CisJCQlpZiAoU0NUUF9UU05fR1QoZnNuLCBjb250
cm9sLT50b3BfZnNuKSkgeworCQkJCWdvdG8gZHVtcF9wYWNrZXQ7CisJCQl9CisJCX0KKwl9Cisj
aWZkZWYgU0NUUF9BU09DTE9HX09GX1RTTlMKKwlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsK
KwlpZiAoYXNvYy0+dHNuX2luX2F0ID49IFNDVFBfVFNOX0xPR19TSVpFKSB7CisJCWFzb2MtPnRz
bl9pbl9hdCA9IDA7CisJCWFzb2MtPnRzbl9pbl93cmFwcGVkID0gMTsKKwl9CisJYXNvYy0+aW5f
dHNubG9nW2Fzb2MtPnRzbl9pbl9hdF0udHNuID0gdHNuOworCWFzb2MtPmluX3RzbmxvZ1thc29j
LT50c25faW5fYXRdLnN0cm0gPSBzaWQ7CisJYXNvYy0+aW5fdHNubG9nW2Fzb2MtPnRzbl9pbl9h
dF0uc2VxID0gbWlkOworCWFzb2MtPmluX3RzbmxvZ1thc29jLT50c25faW5fYXRdLnN6ID0gY2hr
X2xlbmd0aDsKKwlhc29jLT5pbl90c25sb2dbYXNvYy0+dHNuX2luX2F0XS5mbGdzID0gY2h1bmtf
ZmxhZ3M7CisJYXNvYy0+aW5fdHNubG9nW2Fzb2MtPnRzbl9pbl9hdF0uc3RjYiA9ICh2b2lkICop
c3RjYjsKKwlhc29jLT5pbl90c25sb2dbYXNvYy0+dHNuX2luX2F0XS5pbl9wb3MgPSBhc29jLT50
c25faW5fYXQ7CisJYXNvYy0+aW5fdHNubG9nW2Fzb2MtPnRzbl9pbl9hdF0uaW5fb3V0ID0gMTsK
Kwlhc29jLT50c25faW5fYXQrKzsKKyNlbmRpZgorCS8qCisJICogQmVmb3JlIHdlIGNvbnRpbnVl
IGxldHMgdmFsaWRhdGUgdGhhdCB3ZSBhcmUgbm90IGJlaW5nIGZvb2xlZCBieQorCSAqIGFuIGV2
aWwgYXR0YWNrZXIuIFdlIGNhbiBvbmx5IGhhdmUgTmsgY2h1bmtzIGJhc2VkIG9uIG91ciBUU04K
KwkgKiBzcHJlYWQgYWxsb3dlZCBieSB0aGUgbWFwcGluZyBhcnJheSBOICogOCBiaXRzLCBzbyB0
aGVyZSBpcyBubworCSAqIHdheSBvdXIgc3RyZWFtIHNlcXVlbmNlIG51bWJlcnMgY291bGQgaGF2
ZSB3cmFwcGVkLiBXZSBvZiBjb3Vyc2UKKwkgKiBvbmx5IHZhbGlkYXRlIHRoZSBGSVJTVCBmcmFn
bWVudCBzbyB0aGUgYml0IG11c3QgYmUgc2V0LgorCSAqLworCWlmICgoY2hrX2ZsYWdzICYgU0NU
UF9EQVRBX0ZJUlNUX0ZSQUcpICYmCisJICAgIChUQUlMUV9FTVBUWSgmYXNvYy0+cmVzZXRIZWFk
KSkgJiYKKwkgICAgKGNoa19mbGFncyAmIFNDVFBfREFUQV9VTk9SREVSRUQpID09IDAgJiYKKwkg
ICAgU0NUUF9NSURfR0UoYXNvYy0+aWRhdGFfc3VwcG9ydGVkLCBhc29jLT5zdHJtaW5bc2lkXS5s
YXN0X21pZF9kZWxpdmVyZWQsIG1pZCkpIHsKKwkJLyogVGhlIGluY29taW5nIHNzZXEgaXMgYmVo
aW5kIHdoZXJlIHdlIGxhc3QgZGVsaXZlcmVkPyAqLworCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5E
QVRBMSwgIkVWSUwvQnJva2VuLUR1cCBTLVNFUTogJXUgZGVsaXZlcmVkOiAldSBmcm9tIHBlZXIs
IEFib3J0IVxuIiwKKwkJCW1pZCwgYXNvYy0+c3RybWluW3NpZF0ubGFzdF9taWRfZGVsaXZlcmVk
KTsKKworCQlpZiAoYXNvYy0+aWRhdGFfc3VwcG9ydGVkKSB7CisJCQlTQ1RQX1NOUFJJTlRGKG1z
Zywgc2l6ZW9mKG1zZyksICJEZWxpdmVyZWQgTUlEPSU4Ljh4LCBnb3QgVFNOPSU4Ljh4LCBTSUQ9
JTQuNHgsIE1JRD0lOC44eCIsCisJCQkgICAgICAgICAgICAgIGFzb2MtPnN0cm1pbltzaWRdLmxh
c3RfbWlkX2RlbGl2ZXJlZCwKKwkJCSAgICAgICAgICAgICAgdHNuLAorCQkJICAgICAgICAgICAg
ICBzaWQsCisJCQkgICAgICAgICAgICAgIG1pZCk7CisJCX0gZWxzZSB7CisJCQlTQ1RQX1NOUFJJ
TlRGKG1zZywgc2l6ZW9mKG1zZyksICJEZWxpdmVyZWQgU1NOPSU0LjR4LCBnb3QgVFNOPSU4Ljh4
LCBTSUQ9JTQuNHgsIFNTTj0lNC40eCIsCisJCQkgICAgICAgICAgICAgICh1aW50MTZfdClhc29j
LT5zdHJtaW5bc2lkXS5sYXN0X21pZF9kZWxpdmVyZWQsCisJCQkgICAgICAgICAgICAgIHRzbiwK
KwkJCSAgICAgICAgICAgICAgc2lkLAorCQkJICAgICAgICAgICAgICAodWludDE2X3QpbWlkKTsK
KwkJfQorCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfUFJPVE9DT0xf
VklPTEFUSU9OLCBtc2cpOworCQlzdGNiLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2NvZGUgPSBTQ1RQ
X0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18xODsKKwkJc2N0cF9hYm9ydF9hbl9hc3NvY2lh
dGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBvcF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJ
CSphYm9ydF9mbGFnID0gMTsKKwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKGNoa190eXBlID09IFND
VFBfSURBVEEpIHsKKwkJdGhlX2xlbiA9IChjaGtfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBzY3Rw
X2lkYXRhX2NodW5rKSk7CisJfSBlbHNlIHsKKwkJdGhlX2xlbiA9IChjaGtfbGVuZ3RoIC0gc2l6
ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspKTsKKwl9CisJaWYgKGxhc3RfY2h1bmsgPT0gMCkg
eworCQlpZiAoY2hrX3R5cGUgPT0gU0NUUF9JREFUQSkgeworCQkJZG1idWYgPSBTQ1RQX01fQ09Q
WU0oKm0sCisJCQkJCSAgICAgKG9mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9pZGF0YV9jaHVu
aykpLAorCQkJCQkgICAgIHRoZV9sZW4sIE1fTk9XQUlUKTsKKwkJfSBlbHNlIHsKKwkJCWRtYnVm
ID0gU0NUUF9NX0NPUFlNKCptLAorCQkJCQkgICAgIChvZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNj
dHBfZGF0YV9jaHVuaykpLAorCQkJCQkgICAgIHRoZV9sZW4sIE1fTk9XQUlUKTsKKwkJfQorI2lm
ZGVmIFNDVFBfTUJVRl9MT0dHSU5HCisJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2lu
Z19sZXZlbCkgJiBTQ1RQX01CVUZfTE9HR0lOR19FTkFCTEUpIHsKKwkJCXNjdHBfbG9nX21iYyhk
bWJ1ZiwgU0NUUF9NQlVGX0lDT1BZKTsKKwkJfQorI2VuZGlmCisJfSBlbHNlIHsKKwkJLyogV2Ug
Y2FuIHN0ZWFsIHRoZSBsYXN0IGNodW5rICovCisJCWludCBsX2xlbjsKKwkJZG1idWYgPSAqbTsK
KwkJLyogbG9wIG9mZiB0aGUgdG9wIHBhcnQgKi8KKwkJaWYgKGNoa190eXBlID09IFNDVFBfSURB
VEEpIHsKKwkJCW1fYWRqKGRtYnVmLCAob2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2lkYXRh
X2NodW5rKSkpOworCQl9IGVsc2UgeworCQkJbV9hZGooZG1idWYsIChvZmZzZXQgKyBzaXplb2Yo
c3RydWN0IHNjdHBfZGF0YV9jaHVuaykpKTsKKwkJfQorCQlpZiAoU0NUUF9CVUZfTkVYVChkbWJ1
ZikgPT0gTlVMTCkgeworCQkJbF9sZW4gPSBTQ1RQX0JVRl9MRU4oZG1idWYpOworCQl9IGVsc2Ug
eworCQkJLyogbmVlZCB0byBjb3VudCB1cCB0aGUgc2l6ZSBob3BlZnVsbHkKKwkJCSAqIGRvZXMg
bm90IGhpdCB0aGlzIHRvIG9mdGVuIDotMAorCQkJICovCisJCQlzdHJ1Y3QgbWJ1ZiAqbGF0Owor
CisJCQlsX2xlbiA9IDA7CisJCQlmb3IgKGxhdCA9IGRtYnVmOyBsYXQ7IGxhdCA9IFNDVFBfQlVG
X05FWFQobGF0KSkgeworCQkJCWxfbGVuICs9IFNDVFBfQlVGX0xFTihsYXQpOworCQkJfQorCQl9
CisJCWlmIChsX2xlbiA+IHRoZV9sZW4pIHsKKwkJCS8qIFRyaW0gdGhlIGVuZCByb3VuZCBieXRl
cyBvZmYgIHRvbyAqLworCQkJbV9hZGooZG1idWYsIC0obF9sZW4gLSB0aGVfbGVuKSk7CisJCX0K
Kwl9CisJaWYgKGRtYnVmID09IE5VTEwpIHsKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbm9tZW0p
OworCQlyZXR1cm4gKDApOworCX0KKwkvKgorCSAqIE5vdyBubyBtYXR0ZXIgd2hhdCwgd2UgbmVl
ZCBhIGNvbnRyb2wsIGdldCBvbmUKKwkgKiBpZiB3ZSBkb24ndCBoYXZlIG9uZSAod2UgbWF5IGhh
dmUgZ290dGVuIGl0CisJICogYWJvdmUgd2hlbiB3ZSBmb3VuZCB0aGUgbWVzc2FnZSB3YXMgZnJh
Z21lbnRlZAorCSAqLworCWlmIChjb250cm9sID09IE5VTEwpIHsKKwkJc2N0cF9hbGxvY19hX3Jl
YWRxKHN0Y2IsIGNvbnRyb2wpOworCQlzY3RwX2J1aWxkX3JlYWRxX2VudHJ5X21hYyhjb250cm9s
LCBzdGNiLCBhc29jLT5jb250ZXh0LCBuZXQsIHRzbiwKKwkJCQkJICAgcHBpZCwKKwkJCQkJICAg
c2lkLAorCQkJCQkgICBjaGtfZmxhZ3MsCisJCQkJCSAgIE5VTEwsIGZzbiwgbWlkKTsKKwkJaWYg
KGNvbnRyb2wgPT0gTlVMTCkgeworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbm9tZW0pOworCQkJ
cmV0dXJuICgwKTsKKwkJfQorCQlpZiAoKGNoa19mbGFncyAmIFNDVFBfREFUQV9OT1RfRlJBRykg
PT0gU0NUUF9EQVRBX05PVF9GUkFHKSB7CisJCQlzdHJ1Y3QgbWJ1ZiAqbW07CisKKwkJCWNvbnRy
b2wtPmRhdGEgPSBkbWJ1ZjsKKwkJCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IE5VTEw7CisJCQlmb3Ig
KG1tID0gY29udHJvbC0+ZGF0YTsgbW07IG1tID0gbW0tPm1fbmV4dCkgeworCQkJCWNvbnRyb2wt
Pmxlbmd0aCArPSBTQ1RQX0JVRl9MRU4obW0pOworCQkJCWlmIChTQ1RQX0JVRl9ORVhUKG1tKSA9
PSBOVUxMKSB7CisJCQkJCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IG1tOworCQkJCX0KKwkJCX0KKwkJ
CWNvbnRyb2wtPmVuZF9hZGRlZCA9IDE7CisJCQljb250cm9sLT5sYXN0X2ZyYWdfc2VlbiA9IDE7
CisJCQljb250cm9sLT5maXJzdF9mcmFnX3NlZW4gPSAxOworCQkJY29udHJvbC0+ZnNuX2luY2x1
ZGVkID0gZnNuOworCQkJY29udHJvbC0+dG9wX2ZzbiA9IGZzbjsKKwkJfQorCQljcmVhdGVkX2Nv
bnRyb2wgPSAxOworCX0KKwlTQ1RQREJHKFNDVFBfREVCVUdfWFhYLCAiY2h1bmtfZmxhZ3M6IDB4
JXggb3JkZXJlZDogJWQgTUlEOiAldSBjb250cm9sOiAlcFxuIiwKKwkJY2hrX2ZsYWdzLCBvcmRl
cmVkLCBtaWQsIGNvbnRyb2wpOworCWlmICgoY2hrX2ZsYWdzICYgU0NUUF9EQVRBX05PVF9GUkFH
KSA9PSBTQ1RQX0RBVEFfTk9UX0ZSQUcgJiYKKwkgICAgVEFJTFFfRU1QVFkoJmFzb2MtPnJlc2V0
SGVhZCkgJiYKKwkgICAgKChvcmRlcmVkID09IDApIHx8CisJICAgICAoU0NUUF9NSURfRVEoYXNv
Yy0+aWRhdGFfc3VwcG9ydGVkLCBhc29jLT5zdHJtaW5bc2lkXS5sYXN0X21pZF9kZWxpdmVyZWQg
KyAxLCBtaWQpICYmCisJICAgICAgVEFJTFFfRU1QVFkoJmFzb2MtPnN0cm1pbltzaWRdLmlucXVl
dWUpKSkpIHsKKwkJLyogQ2FuZGlkYXRlIGZvciBleHByZXNzIGRlbGl2ZXJ5ICovCisJCS8qCisJ
CSAqIEl0cyBub3QgZnJhZ21lbnRlZCwgTm8gUEQtQVBJIGlzIHVwLCBOb3RoaW5nIGluIHRoZQor
CQkgKiBkZWxpdmVyeSBxdWV1ZSwgSXRzIHVuLW9yZGVyZWQgT1Igb3JkZXJlZCBhbmQgdGhlIG5l
eHQgdG8KKwkJICogZGVsaXZlciBBTkQgbm90aGluZyBlbHNlIGlzIHN0dWNrIG9uIHRoZSBzdHJl
YW0gcXVldWUsCisJCSAqIEFuZCB0aGVyZSBpcyByb29tIGZvciBpdCBpbiB0aGUgc29ja2V0IGJ1
ZmZlci4gTGV0cyBqdXN0CisJCSAqIHN0dWZmIGl0IHVwIHRoZSBidWZmZXIuLi4uCisJCSAqLwor
CQlTQ1RQX1NFVF9UU05fUFJFU0VOVChhc29jLT5ucl9tYXBwaW5nX2FycmF5LCBnYXApOworCQlp
ZiAoU0NUUF9UU05fR1QodHNuLCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwKSkgewor
CQkJYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCA9IHRzbjsKKwkJfQorCQlTQ1RQREJH
KFNDVFBfREVCVUdfWFhYLCAiSW5qZWN0aW5nIGNvbnRyb2w6ICVwIHRvIGJlIHJlYWQgKE1JRDog
JXUpXG4iLAorCQkJY29udHJvbCwgbWlkKTsKKworCQlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5z
Y3RwX2VwLCBzdGNiLAorCQkgICAgICAgICAgICAgICAgICBjb250cm9sLCAmc3RjYi0+c2N0cF9z
b2NrZXQtPnNvX3JjdiwKKwkJICAgICAgICAgICAgICAgICAgMSwgU0NUUF9SRUFEX0xPQ0tfTk9U
X0hFTEQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisKKwkJaWYgKChjaGtfZmxhZ3MgJiBTQ1RQX0RB
VEFfVU5PUkRFUkVEKSA9PSAwKSB7CisJCQkvKiBmb3Igb3JkZXJlZCwgYnVtcCB3aGF0IHdlIGRl
bGl2ZXJlZCAqLworCQkJYXNvYy0+c3RybWluW3NpZF0ubGFzdF9taWRfZGVsaXZlcmVkKys7CisJ
CX0KKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmV4cHJlc3MpOworCQlpZiAoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TVFJfTE9HR0lOR19FTkFCTEUpIHsK
KwkJCXNjdHBfbG9nX3N0cm1fZGVsX2FsdChzdGNiLCB0c24sIG1pZCwgc2lkLAorCQkJCQkgICAg
ICBTQ1RQX1NUUl9MT0dfRlJPTV9FWFBSU19ERUwpOworCQl9CisJCWNvbnRyb2wgPSBOVUxMOwor
CQlnb3RvIGZpbmlzaF9leHByZXNzX2RlbDsKKwl9CisKKwkvKiBOb3cgd2lsbCB3ZSBuZWVkIGEg
Y2h1bmsgdG9vPyAqLworCWlmICgoY2hrX2ZsYWdzICYgU0NUUF9EQVRBX05PVF9GUkFHKSAhPSBT
Q1RQX0RBVEFfTk9UX0ZSQUcpIHsKKwkJc2N0cF9hbGxvY19hX2NodW5rKHN0Y2IsIGNoayk7CisJ
CWlmIChjaGsgPT0gTlVMTCkgeworCQkJLyogTm8gbWVtb3J5IHNvIHdlIGRyb3AgdGhlIGNodW5r
ICovCisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19ub21lbSk7CisJCQlpZiAobGFzdF9jaHVuayA9
PSAwKSB7CisJCQkJLyogd2UgY29waWVkIGl0LCBmcmVlIHRoZSBjb3B5ICovCisJCQkJc2N0cF9t
X2ZyZWVtKGRtYnVmKTsKKwkJCX0KKwkJCXJldHVybiAoMCk7CisJCX0KKwkJY2hrLT5yZWMuZGF0
YS50c24gPSB0c247CisJCWNoay0+bm9fZnJfYWxsb3dlZCA9IDA7CisJCWNoay0+cmVjLmRhdGEu
ZnNuID0gZnNuOworCQljaGstPnJlYy5kYXRhLm1pZCA9IG1pZDsKKwkJY2hrLT5yZWMuZGF0YS5z
aWQgPSBzaWQ7CisJCWNoay0+cmVjLmRhdGEucHBpZCA9IHBwaWQ7CisJCWNoay0+cmVjLmRhdGEu
Y29udGV4dCA9IHN0Y2ItPmFzb2MuY29udGV4dDsKKwkJY2hrLT5yZWMuZGF0YS5kb2luZ19mYXN0
X3JldHJhbnNtaXQgPSAwOworCQljaGstPnJlYy5kYXRhLnJjdl9mbGFncyA9IGNoa19mbGFnczsK
KwkJY2hrLT5hc29jID0gYXNvYzsKKwkJY2hrLT5zZW5kX3NpemUgPSB0aGVfbGVuOworCQljaGst
Pndob1RvID0gbmV0OworCQlTQ1RQREJHKFNDVFBfREVCVUdfWFhYLCAiQnVpbGRpbmcgY2s6ICVw
IGZvciBjb250cm9sOiAlcCB0byBiZSByZWFkIChNSUQ6ICV1KVxuIiwKKwkJCWNoaywKKwkJCWNv
bnRyb2wsIG1pZCk7CisJCWF0b21pY19hZGRfaW50KCZuZXQtPnJlZl9jb3VudCwgMSk7CisJCWNo
ay0+ZGF0YSA9IGRtYnVmOworCX0KKwkvKiBTZXQgdGhlIGFwcHJvcHJpYXRlIFRTTiBtYXJrICov
CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kb19kcmFpbikgPT0gMCkgeworCQlTQ1RQX1NF
VF9UU05fUFJFU0VOVChhc29jLT5ucl9tYXBwaW5nX2FycmF5LCBnYXApOworCQlpZiAoU0NUUF9U
U05fR1QodHNuLCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwKSkgeworCQkJYXNvYy0+
aGlnaGVzdF90c25faW5zaWRlX25yX21hcCA9IHRzbjsKKwkJfQorCX0gZWxzZSB7CisJCVNDVFBf
U0VUX1RTTl9QUkVTRU5UKGFzb2MtPm1hcHBpbmdfYXJyYXksIGdhcCk7CisJCWlmIChTQ1RQX1RT
Tl9HVCh0c24sIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXApKSB7CisJCQlhc29jLT5oaWdo
ZXN0X3Rzbl9pbnNpZGVfbWFwID0gdHNuOworCQl9CisJfQorCS8qIE5vdyBpcyBpdCBjb21wbGV0
ZSAoaS5lLiBub3QgZnJhZ21lbnRlZCk/ICovCisJaWYgKChjaGtfZmxhZ3MgJiBTQ1RQX0RBVEFf
Tk9UX0ZSQUcpID09IFNDVFBfREFUQV9OT1RfRlJBRykgeworCQkvKgorCQkgKiBTcGVjaWFsIGNo
ZWNrIGZvciB3aGVuIHN0cmVhbXMgYXJlIHJlc2V0dGluZy4gV2UKKwkJICogY291bGQgYmUgbW9y
ZSBzbWFydCBhYm91dCB0aGlzIGFuZCBjaGVjayB0aGUKKwkJICogYWN0dWFsIHN0cmVhbSB0byBz
ZWUgaWYgaXQgaXMgbm90IGJlaW5nIHJlc2V0Li4KKwkJICogdGhhdCB3YXkgd2Ugd291bGQgbm90
IGNyZWF0ZSBhIEhPTEIgd2hlbiBhbW9uZ3N0CisJCSAqIHN0cmVhbXMgYmVpbmcgcmVzZXQgYW5k
IHRob3NlIG5vdCBiZWluZyByZXNldC4KKwkJICoKKwkJICovCisJCWlmICgoKGxpc3RlID0gVEFJ
TFFfRklSU1QoJmFzb2MtPnJlc2V0SGVhZCkpICE9IE5VTEwpICYmCisJCSAgICBTQ1RQX1RTTl9H
VCh0c24sIGxpc3RlLT50c24pKSB7CisJCQkvKgorCQkJICogeWVwIGl0cyBwYXN0IHdoZXJlIHdl
IG5lZWQgdG8gcmVzZXQuLi4gZ28KKwkJCSAqIGFoZWFkIGFuZCBxdWV1ZSBpdC4KKwkJCSAqLwor
CQkJaWYgKFRBSUxRX0VNUFRZKCZhc29jLT5wZW5kaW5nX3JlcGx5X3F1ZXVlKSkgeworCQkJCS8q
IGZpcnN0IG9uZSBvbiAqLworCQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZhc29jLT5wZW5kaW5nX3Jl
cGx5X3F1ZXVlLCBjb250cm9sLCBuZXh0KTsKKwkJCX0gZWxzZSB7CisJCQkJc3RydWN0IHNjdHBf
cXVldWVkX3RvX3JlYWQgKmxjb250cm9sLCAqbmxjb250cm9sOworCQkJCXVuc2lnbmVkIGNoYXIg
aW5zZXJ0ZWQgPSAwOworCQkJCVRBSUxRX0ZPUkVBQ0hfU0FGRShsY29udHJvbCwgJmFzb2MtPnBl
bmRpbmdfcmVwbHlfcXVldWUsIG5leHQsIG5sY29udHJvbCkgeworCQkJCQlpZiAoU0NUUF9UU05f
R1QoY29udHJvbC0+c2luZm9fdHNuLCBsY29udHJvbC0+c2luZm9fdHNuKSkgeworCQkJCQkJY29u
dGludWU7CisJCQkJCX0gZWxzZSB7CisJCQkJCQkvKiBmb3VuZCBpdCAqLworCQkJCQkJVEFJTFFf
SU5TRVJUX0JFRk9SRShsY29udHJvbCwgY29udHJvbCwgbmV4dCk7CisJCQkJCQlpbnNlcnRlZCA9
IDE7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoaW5zZXJ0ZWQgPT0gMCkg
eworCQkJCQkvKgorCQkJCQkgKiBtdXN0IGJlIHB1dCBhdCBlbmQsIHVzZQorCQkJCQkgKiBwcmV2
UCAoYWxsIHNldHVwIGZyb20KKwkJCQkJICogbG9vcCkgdG8gc2V0dXAgbmV4dFAuCisJCQkJCSAq
LworCQkJCQlUQUlMUV9JTlNFUlRfVEFJTCgmYXNvYy0+cGVuZGluZ19yZXBseV9xdWV1ZSwgY29u
dHJvbCwgbmV4dCk7CisJCQkJfQorCQkJfQorCQkJZ290byBmaW5pc2hfZXhwcmVzc19kZWw7CisJ
CX0KKwkJaWYgKGNoa19mbGFncyAmIFNDVFBfREFUQV9VTk9SREVSRUQpIHsKKwkJCS8qIHF1ZXVl
IGRpcmVjdGx5IGludG8gc29ja2V0IGJ1ZmZlciAqLworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1hY
WCwgIlVub3JkZXJlZCBkYXRhIHRvIGJlIHJlYWQgY29udHJvbDogJXAgTUlEOiAldVxuIiwKKwkJ
CQljb250cm9sLCBtaWQpOworCQkJc2N0cF9tYXJrX25vbl9yZXZva2FibGUoYXNvYywgY29udHJv
bC0+c2luZm9fdHNuKTsKKwkJCXNjdHBfYWRkX3RvX3JlYWRxKHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
CisJCQkgICAgICAgICAgICAgICAgICBjb250cm9sLAorCQkJICAgICAgICAgICAgICAgICAgJnN0
Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIDEsCisJCQkgICAgICAgICAgICAgICAgICBTQ1RQX1JF
QURfTE9DS19OT1RfSEVMRCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKworCQl9IGVsc2UgeworCQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwgIlF1ZXVlIGNvbnRyb2w6ICVwIGZvciByZW9yZGVyaW5n
IE1JRDogJXVcbiIsIGNvbnRyb2wsCisJCQkJbWlkKTsKKwkJCXNjdHBfcXVldWVfZGF0YV90b19z
dHJlYW0oc3RjYiwgYXNvYywgY29udHJvbCwgYWJvcnRfZmxhZywgJm5lZWRfcmVhc21fY2hlY2sp
OworCQkJaWYgKCphYm9ydF9mbGFnKSB7CisJCQkJaWYgKGxhc3RfY2h1bmspIHsKKwkJCQkJKm0g
PSBOVUxMOworCQkJCX0KKwkJCQlyZXR1cm4gKDApOworCQkJfQorCQl9CisJCWdvdG8gZmluaXNo
X2V4cHJlc3NfZGVsOworCX0KKwkvKiBJZiB3ZSByZWFjaCBoZXJlIGl0cyBhIHJlYXNzZW1ibHkg
Ki8KKwluZWVkX3JlYXNtX2NoZWNrID0gMTsKKwlTQ1RQREJHKFNDVFBfREVCVUdfWFhYLAorCQki
UXVldWUgZGF0YSB0byBzdHJlYW0gZm9yIHJlYXNtIGNvbnRyb2w6ICVwIE1JRDogJXVcbiIsCisJ
CWNvbnRyb2wsIG1pZCk7CisJc2N0cF9xdWV1ZV9kYXRhX2Zvcl9yZWFzbShzdGNiLCBhc29jLCBj
b250cm9sLCBjaGssIGNyZWF0ZWRfY29udHJvbCwgYWJvcnRfZmxhZywgdHNuKTsKKwlpZiAoKmFi
b3J0X2ZsYWcpIHsKKwkJLyoKKwkJICogdGhlIGFzc29jIGlzIG5vdyBnb25lIGFuZCBjaGsgd2Fz
IHB1dCBvbnRvIHRoZQorCQkgKiByZWFzbSBxdWV1ZSwgd2hpY2ggaGFzIGFsbCBiZWVuIGZyZWVk
LgorCQkgKi8KKwkJaWYgKGxhc3RfY2h1bmspIHsKKwkJCSptID0gTlVMTDsKKwkJfQorCQlyZXR1
cm4gKDApOworCX0KK2ZpbmlzaF9leHByZXNzX2RlbDoKKwkvKiBIZXJlIHdlIHRpZHkgdXAgdGhp
bmdzICovCisJaWYgKHRzbiA9PSAoYXNvYy0+Y3VtdWxhdGl2ZV90c24gKyAxKSkgeworCQkvKiBV
cGRhdGUgY3VtLWFjayAqLworCQlhc29jLT5jdW11bGF0aXZlX3RzbiA9IHRzbjsKKwl9CisJaWYg
KGxhc3RfY2h1bmspIHsKKwkJKm0gPSBOVUxMOworCX0KKwlpZiAob3JkZXJlZCkgeworCQlTQ1RQ
X1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfaW5vcmRlcmNodW5rcyk7CisJfSBlbHNlIHsKKwkJ
U0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX2ludW5vcmRlcmNodW5rcyk7CisJfQorCVND
VFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZkYXRhKTsKKwkvKiBTZXQgaXQgcHJlc2VudCBwbGVhc2Ug
Ki8KKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TVFJf
TE9HR0lOR19FTkFCTEUpIHsKKwkJc2N0cF9sb2dfc3RybV9kZWxfYWx0KHN0Y2IsIHRzbiwgbWlk
LCBzaWQsIFNDVFBfU1RSX0xPR19GUk9NX01BUktfVFNOKTsKKwl9CisJaWYgKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUFQX0xPR0dJTkdfRU5BQkxFKSB7CisJ
CXNjdHBfbG9nX21hcChhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuLCBhc29jLT5jdW11bGF0
aXZlX3RzbiwKKwkJCSAgICAgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCwgU0NUUF9NQVBf
UFJFUEFSRV9TTElERSk7CisJfQorCWlmIChuZWVkX3JlYXNtX2NoZWNrKSB7CisJCSh2b2lkKXNj
dHBfZGVsaXZlcl9yZWFzbV9jaGVjayhzdGNiLCBhc29jLCAmYXNvYy0+c3RybWluW3NpZF0sIFND
VFBfUkVBRF9MT0NLX05PVF9IRUxEKTsKKwkJbmVlZF9yZWFzbV9jaGVjayA9IDA7CisJfQorCS8q
IGNoZWNrIHRoZSBzcGVjaWFsIGZsYWcgZm9yIHN0cmVhbSByZXNldHMgKi8KKwlpZiAoKChsaXN0
ZSA9IFRBSUxRX0ZJUlNUKCZhc29jLT5yZXNldEhlYWQpKSAhPSBOVUxMKSAmJgorCSAgICBTQ1RQ
X1RTTl9HRShhc29jLT5jdW11bGF0aXZlX3RzbiwgbGlzdGUtPnRzbikpIHsKKwkJLyoKKwkJICog
d2UgaGF2ZSBmaW5pc2hlZCB3b3JraW5nIHRocm91Z2ggdGhlIGJhY2tsb2dnZWQgVFNOJ3Mgbm93
CisJCSAqIHRpbWUgdG8gcmVzZXQgc3RyZWFtcy4gMTogY2FsbCByZXNldCBmdW5jdGlvbi4gMjog
ZnJlZQorCQkgKiBwZW5kaW5nX3JlcGx5IHNwYWNlIDM6IGRpc3RyaWJ1dGUgYW55IGNodW5rcyBp
bgorCQkgKiBwZW5kaW5nX3JlcGx5X3F1ZXVlLgorCQkgKi8KKwkJc2N0cF9yZXNldF9pbl9zdHJl
YW0oc3RjYiwgbGlzdGUtPm51bWJlcl9lbnRyaWVzLCBsaXN0ZS0+bGlzdF9vZl9zdHJlYW1zKTsK
KwkJVEFJTFFfUkVNT1ZFKCZhc29jLT5yZXNldEhlYWQsIGxpc3RlLCBuZXh0X3Jlc3ApOworCQlz
Y3RwX3NlbmRfZGVmZXJyZWRfcmVzZXRfcmVzcG9uc2Uoc3RjYiwgbGlzdGUsIFNDVFBfU1RSRUFN
X1JFU0VUX1JFU1VMVF9QRVJGT1JNRUQpOworCQlTQ1RQX0ZSRUUobGlzdGUsIFNDVFBfTV9TVFJF
U0VUKTsKKwkJLypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KKwkJbGlzdGUgPSBUQUlMUV9GSVJT
VCgmYXNvYy0+cmVzZXRIZWFkKTsKKwkJaWYgKFRBSUxRX0VNUFRZKCZhc29jLT5yZXNldEhlYWQp
KSB7CisJCQkvKiBBbGwgY2FuIGJlIHJlbW92ZWQgKi8KKwkJCVRBSUxRX0ZPUkVBQ0hfU0FGRShj
b250cm9sLCAmYXNvYy0+cGVuZGluZ19yZXBseV9xdWV1ZSwgbmV4dCwgbmNvbnRyb2wpIHsKKwkJ
CQlUQUlMUV9SRU1PVkUoJmFzb2MtPnBlbmRpbmdfcmVwbHlfcXVldWUsIGNvbnRyb2wsIG5leHQp
OworCQkJCXN0cm0gPSAmYXNvYy0+c3RybWluW2NvbnRyb2wtPnNpbmZvX3N0cmVhbV07CisJCQkJ
c2N0cF9xdWV1ZV9kYXRhX3RvX3N0cmVhbShzdGNiLCBhc29jLCBjb250cm9sLCBhYm9ydF9mbGFn
LCAmbmVlZF9yZWFzbV9jaGVjayk7CisJCQkJaWYgKCphYm9ydF9mbGFnKSB7CisJCQkJCXJldHVy
biAoMCk7CisJCQkJfQorCQkJCWlmIChuZWVkX3JlYXNtX2NoZWNrKSB7CisJCQkJCSh2b2lkKXNj
dHBfZGVsaXZlcl9yZWFzbV9jaGVjayhzdGNiLCBhc29jLCBzdHJtLCBTQ1RQX1JFQURfTE9DS19O
T1RfSEVMRCk7CisJCQkJCW5lZWRfcmVhc21fY2hlY2sgPSAwOworCQkJCX0KKwkJCX0KKwkJfSBl
bHNlIHsKKwkJCVRBSUxRX0ZPUkVBQ0hfU0FGRShjb250cm9sLCAmYXNvYy0+cGVuZGluZ19yZXBs
eV9xdWV1ZSwgbmV4dCwgbmNvbnRyb2wpIHsKKwkJCQlpZiAoU0NUUF9UU05fR1QoY29udHJvbC0+
c2luZm9fdHNuLCBsaXN0ZS0+dHNuKSkgeworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLyoKKwkJ
CQkgKiBpZiBjb250cm9sLT5zaW5mb190c24gaXMgPD0gbGlzdGUtPnRzbiB3ZSBjYW4KKwkJCQkg
KiBwcm9jZXNzIGl0IHdoaWNoIGlzIHRoZSBOT1Qgb2YKKwkJCQkgKiBjb250cm9sLT5zaW5mb190
c24gPiBsaXN0ZS0+dHNuCisJCQkJICovCisJCQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5wZW5kaW5n
X3JlcGx5X3F1ZXVlLCBjb250cm9sLCBuZXh0KTsKKwkJCQlzdHJtID0gJmFzb2MtPnN0cm1pbltj
b250cm9sLT5zaW5mb19zdHJlYW1dOworCQkJCXNjdHBfcXVldWVfZGF0YV90b19zdHJlYW0oc3Rj
YiwgYXNvYywgY29udHJvbCwgYWJvcnRfZmxhZywgJm5lZWRfcmVhc21fY2hlY2spOworCQkJCWlm
ICgqYWJvcnRfZmxhZykgeworCQkJCQlyZXR1cm4gKDApOworCQkJCX0KKwkJCQlpZiAobmVlZF9y
ZWFzbV9jaGVjaykgeworCQkJCQkodm9pZClzY3RwX2RlbGl2ZXJfcmVhc21fY2hlY2soc3RjYiwg
YXNvYywgc3RybSwgU0NUUF9SRUFEX0xPQ0tfTk9UX0hFTEQpOworCQkJCQluZWVkX3JlYXNtX2No
ZWNrID0gMDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJcmV0dXJuICgxKTsKK30KKworc3RhdGlj
IGNvbnN0IGludDhfdCBzY3RwX21hcF9sb29rdXBfdGFiWzI1Nl0gPSB7CisgIDAsIDEsIDAsIDIs
IDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDQsCisgIDAsIDEsIDAsIDIsIDAs
IDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDUsCisgIDAsIDEsIDAsIDIsIDAsIDEs
IDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDQsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAs
IDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDYsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMs
CisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDQsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisg
IDAsIDEsIDAsIDIsIDAsIDEsIDAsIDUsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAs
IDEsIDAsIDIsIDAsIDEsIDAsIDQsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAsIDEs
IDAsIDIsIDAsIDEsIDAsIDcsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAsIDEsIDAs
IDIsIDAsIDEsIDAsIDQsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIs
IDAsIDEsIDAsIDUsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAs
IDEsIDAsIDQsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEs
IDAsIDYsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAs
IDQsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDUs
CisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDQsCisg
IDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDgKK307CisK
K3ZvaWQKK3NjdHBfc2xpZGVfbWFwcGluZ19hcnJheXMoc3RydWN0IHNjdHBfdGNiICpzdGNiKQor
eworCS8qCisJICogTm93IHdlIGFsc28gbmVlZCB0byBjaGVjayB0aGUgbWFwcGluZyBhcnJheSBp
biBhIGNvdXBsZSBvZiB3YXlzLgorCSAqIDEpIERpZCB3ZSBtb3ZlIHRoZSBjdW0tYWNrIHBvaW50
PworCSAqCisJICogV2hlbiB5b3UgZmlyc3QgZ2xhbmNlIGF0IHRoaXMgeW91IG1pZ2h0IHRoaW5r
CisJICogdGhhdCBhbGwgZW50cmllcyB0aGF0IG1ha2UgdXAgdGhlIHBvc2l0aW9uCisJICogb2Yg
dGhlIGN1bS1hY2sgd291bGQgYmUgaW4gdGhlIG5yLW1hcHBpbmcgYXJyYXkKKwkgKiBvbmx5Li4g
aS5lLiB0aGluZ3MgdXAgdG8gdGhlIGN1bS1hY2sgYXJlIGFsd2F5cworCSAqIGRlbGl2ZXJhYmxl
LiBUaGF0cyB0cnVlIHdpdGggb25lIGV4Y2VwdGlvbiwgd2hlbgorCSAqIGl0cyBhIGZyYWdtZW50
ZWQgbWVzc2FnZSB3ZSBtYXkgbm90IGRlbGl2ZXIgdGhlIGRhdGEKKwkgKiB1bnRpbCBzb21lIHRo
cmVzaG9sZCAob3IgYWxsIG9mIGl0KSBpcyBpbiBwbGFjZS4gU28KKwkgKiB3ZSBtdXN0IE9SIHRo
ZSBucl9tYXBwaW5nX2FycmF5IGFuZCBtYXBwaW5nX2FycmF5IHRvCisJICogZ2V0IGEgdHJ1ZSBw
aWN0dXJlIG9mIHRoZSBjdW0tYWNrLgorCSAqLworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICph
c29jOworCWludCBhdDsKKwl1aW50OF90IHZhbDsKKwlpbnQgc2xpZGVfZnJvbSwgc2xpZGVfZW5k
LCBsZ2FwLCBkaXN0YW5jZTsKKwl1aW50MzJfdCBvbGRfY3VtYWNrLCBvbGRfYmFzZSwgb2xkX2hp
Z2hlc3QsIGhpZ2hlc3RfdHNuOworCisJYXNvYyA9ICZzdGNiLT5hc29jOworCisJb2xkX2N1bWFj
ayA9IGFzb2MtPmN1bXVsYXRpdmVfdHNuOworCW9sZF9iYXNlID0gYXNvYy0+bWFwcGluZ19hcnJh
eV9iYXNlX3RzbjsKKwlvbGRfaGlnaGVzdCA9IGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXA7
CisJLyoKKwkgKiBXZSBjb3VsZCBwcm9iYWJseSBpbXByb3ZlIHRoaXMgYSBzbWFsbCBiaXQgYnkg
Y2FsY3VsYXRpbmcgdGhlCisJICogb2Zmc2V0IG9mIHRoZSBjdXJyZW50IGN1bS1hY2sgYXMgdGhl
IHN0YXJ0aW5nIHBvaW50LgorCSAqLworCWF0ID0gMDsKKwlmb3IgKHNsaWRlX2Zyb20gPSAwOyBz
bGlkZV9mcm9tIDwgc3RjYi0+YXNvYy5tYXBwaW5nX2FycmF5X3NpemU7IHNsaWRlX2Zyb20rKykg
eworCQl2YWwgPSBhc29jLT5ucl9tYXBwaW5nX2FycmF5W3NsaWRlX2Zyb21dIHwgYXNvYy0+bWFw
cGluZ19hcnJheVtzbGlkZV9mcm9tXTsKKwkJaWYgKHZhbCA9PSAweGZmKSB7CisJCQlhdCArPSA4
OworCQl9IGVsc2UgeworCQkJLyogdGhlcmUgaXMgYSAwIGJpdCAqLworCQkJYXQgKz0gc2N0cF9t
YXBfbG9va3VwX3RhYlt2YWxdOworCQkJYnJlYWs7CisJCX0KKwl9CisJYXNvYy0+Y3VtdWxhdGl2
ZV90c24gPSBhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuICsgKGF0LTEpOworCisJaWYgKFND
VFBfVFNOX0dUKGFzb2MtPmN1bXVsYXRpdmVfdHNuLCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVf
bWFwKSAmJgorICAgICAgICAgICAgU0NUUF9UU05fR1QoYXNvYy0+Y3VtdWxhdGl2ZV90c24sIGFz
b2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXApKSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQlw
YW5pYygiaHVoLCBjdW1hY2sgMHgleCBncmVhdGVyIHRoYW4gaGlnaC10c24gMHgleCBpbiBtYXAi
LAorCQkgICAgICBhc29jLT5jdW11bGF0aXZlX3RzbiwgYXNvYy0+aGlnaGVzdF90c25faW5zaWRl
X21hcCk7CisjZWxzZQorCQlTQ1RQX1BSSU5URigiaHVoLCBjdW1hY2sgMHgleCBncmVhdGVyIHRo
YW4gaGlnaC10c24gMHgleCBpbiBtYXAgLSBzaG91bGQgcGFuaWM/XG4iLAorCQkJICAgIGFzb2Mt
PmN1bXVsYXRpdmVfdHNuLCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwKTsKKwkJc2N0cF9w
cmludF9tYXBwaW5nX2FycmF5KGFzb2MpOworCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xv
Z2dpbmdfbGV2ZWwpICYgU0NUUF9NQVBfTE9HR0lOR19FTkFCTEUpIHsKKwkJCXNjdHBfbG9nX21h
cCgwLCA2LCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwLCBTQ1RQX01BUF9TTElERV9SRVNV
TFQpOworCQl9CisJCWFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAgPSBhc29jLT5jdW11bGF0
aXZlX3RzbjsKKwkJYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCA9IGFzb2MtPmN1bXVs
YXRpdmVfdHNuOworI2VuZGlmCisJfQorCWlmIChTQ1RQX1RTTl9HVChhc29jLT5oaWdoZXN0X3Rz
bl9pbnNpZGVfbnJfbWFwLCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwKSkgeworCQloaWdo
ZXN0X3RzbiA9IGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXA7CisJfSBlbHNlIHsKKwkJ
aGlnaGVzdF90c24gPSBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwOworCX0KKwlpZiAoKGFz
b2MtPmN1bXVsYXRpdmVfdHNuID09IGhpZ2hlc3RfdHNuKSAmJiAoYXQgPj0gOCkpIHsKKwkJLyog
VGhlIGNvbXBsZXRlIGFycmF5IHdhcyBjb21wbGV0ZWQgYnkgYSBzaW5nbGUgRlIgKi8KKwkJLyog
aGlnaGVzdCBiZWNvbWVzIHRoZSBjdW0tYWNrICovCisJCWludCBjbHI7CisjaWZkZWYgSU5WQVJJ
QU5UUworCQl1bnNpZ25lZCBpbnQgaTsKKyNlbmRpZgorCisJCS8qIGNsZWFyIHRoZSBhcnJheSAq
LworCQljbHIgPSAoKGF0KzcpID4+IDMpOworCQlpZiAoY2xyID4gYXNvYy0+bWFwcGluZ19hcnJh
eV9zaXplKSB7CisJCQljbHIgPSBhc29jLT5tYXBwaW5nX2FycmF5X3NpemU7CisJCX0KKwkJbWVt
c2V0KGFzb2MtPm1hcHBpbmdfYXJyYXksIDAsIGNscik7CisJCW1lbXNldChhc29jLT5ucl9tYXBw
aW5nX2FycmF5LCAwLCBjbHIpOworI2lmZGVmIElOVkFSSUFOVFMKKwkJZm9yIChpID0gMDsgaSA8
IGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6ZTsgaSsrKSB7CisJCQlpZiAoKGFzb2MtPm1hcHBpbmdf
YXJyYXlbaV0pIHx8IChhc29jLT5ucl9tYXBwaW5nX2FycmF5W2ldKSkgeworCQkJCVNDVFBfUFJJ
TlRGKCJFcnJvciBNYXBwaW5nIGFycmF5J3Mgbm90IGNsZWFuIGF0IGNsZWFyXG4iKTsKKwkJCQlz
Y3RwX3ByaW50X21hcHBpbmdfYXJyYXkoYXNvYyk7CisJCQl9CisJCX0KKyNlbmRpZgorCQlhc29j
LT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuID0gYXNvYy0+Y3VtdWxhdGl2ZV90c24gKyAxOworCQlh
c29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwID0gYXNvYy0+aGlnaGVzdF90c25faW5zaWRl
X21hcCA9IGFzb2MtPmN1bXVsYXRpdmVfdHNuOworCX0gZWxzZSBpZiAoYXQgPj0gOCkgeworCQkv
KiB3ZSBjYW4gc2xpZGUgdGhlIG1hcHBpbmcgYXJyYXkgZG93biAqLworCQkvKiBzbGlkZV9mcm9t
IGhvbGRzIHdoZXJlIHdlIGhpdCB0aGUgZmlyc3QgTk9OIDB4ZmYgYnl0ZSAqLworCisJCS8qCisJ
CSAqIG5vdyBjYWxjdWxhdGUgdGhlIGNlaWxpbmcgb2YgdGhlIG1vdmUgdXNpbmcgb3VyIGhpZ2hl
c3QKKwkJICogVFNOIHZhbHVlCisJCSAqLworCQlTQ1RQX0NBTENfVFNOX1RPX0dBUChsZ2FwLCBo
aWdoZXN0X3RzbiwgYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3Rzbik7CisJCXNsaWRlX2VuZCA9
IChsZ2FwID4+IDMpOworCQlpZiAoc2xpZGVfZW5kIDwgc2xpZGVfZnJvbSkgeworCQkJc2N0cF9w
cmludF9tYXBwaW5nX2FycmF5KGFzb2MpOworI2lmZGVmIElOVkFSSUFOVFMKKwkJCXBhbmljKCJp
bXBvc3NpYmxlIHNsaWRlIik7CisjZWxzZQorCQkJU0NUUF9QUklOVEYoImltcG9zc2libGUgc2xp
ZGUgbGdhcDogJXggc2xpZGVfZW5kOiAleCBzbGlkZV9mcm9tOiAleD8gYXQ6ICVkXG4iLAorCQkJ
ICAgICAgICAgICAgbGdhcCwgc2xpZGVfZW5kLCBzbGlkZV9mcm9tLCBhdCk7CisJCQlyZXR1cm47
CisjZW5kaWYKKwkJfQorCQlpZiAoc2xpZGVfZW5kID4gYXNvYy0+bWFwcGluZ19hcnJheV9zaXpl
KSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQkJcGFuaWMoIndvdWxkIG92ZXJydW4gYnVmZmVyIik7
CisjZWxzZQorCQkJU0NUUF9QUklOVEYoIkdhaywgd291bGQgaGF2ZSBvdmVycnVuIG1hcCBlbmQ6
ICVkIHNsaWRlX2VuZDogJWRcbiIsCisJCQkgICAgICAgICAgICBhc29jLT5tYXBwaW5nX2FycmF5
X3NpemUsIHNsaWRlX2VuZCk7CisJCQlzbGlkZV9lbmQgPSBhc29jLT5tYXBwaW5nX2FycmF5X3Np
emU7CisjZW5kaWYKKwkJfQorCQlkaXN0YW5jZSA9IChzbGlkZV9lbmQgLSBzbGlkZV9mcm9tKSAr
IDE7CisJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX01B
UF9MT0dHSU5HX0VOQUJMRSkgeworCQkJc2N0cF9sb2dfbWFwKG9sZF9iYXNlLCBvbGRfY3VtYWNr
LCBvbGRfaGlnaGVzdCwKKwkJCQkgICAgIFNDVFBfTUFQX1BSRVBBUkVfU0xJREUpOworCQkJc2N0
cF9sb2dfbWFwKCh1aW50MzJfdCkgc2xpZGVfZnJvbSwgKHVpbnQzMl90KSBzbGlkZV9lbmQsCisJ
CQkJICAgICAodWludDMyX3QpIGxnYXAsIFNDVFBfTUFQX1NMSURFX0ZST00pOworCQl9CisJCWlm
IChkaXN0YW5jZSArIHNsaWRlX2Zyb20gPiBhc29jLT5tYXBwaW5nX2FycmF5X3NpemUgfHwKKwkJ
ICAgIGRpc3RhbmNlIDwgMCkgeworCQkJLyoKKwkJCSAqIEhlcmUgd2UgZG8gTk9UIHNsaWRlIGZv
cndhcmQgdGhlIGFycmF5IHNvIHRoYXQKKwkJCSAqIGhvcGVmdWxseSB3aGVuIG1vcmUgZGF0YSBj
b21lcyBpbiB0byBmaWxsIGl0IHVwCisJCQkgKiB3ZSB3aWxsIGJlIGFibGUgdG8gc2xpZGUgaXQg
Zm9yd2FyZC4gUmVhbGx5IEkKKwkJCSAqIGRvbid0IHRoaW5rIHRoaXMgc2hvdWxkIGhhcHBlbiA6
LTAKKwkJCSAqLworCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAm
IFNDVFBfTUFQX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJc2N0cF9sb2dfbWFwKCh1aW50MzJfdCkg
ZGlzdGFuY2UsICh1aW50MzJfdCkgc2xpZGVfZnJvbSwKKwkJCQkJICAgICAodWludDMyX3QpIGFz
b2MtPm1hcHBpbmdfYXJyYXlfc2l6ZSwKKwkJCQkJICAgICBTQ1RQX01BUF9TTElERV9OT05FKTsK
KwkJCX0KKwkJfSBlbHNlIHsKKwkJCWludCBpaTsKKworCQkJZm9yIChpaSA9IDA7IGlpIDwgZGlz
dGFuY2U7IGlpKyspIHsKKwkJCQlhc29jLT5tYXBwaW5nX2FycmF5W2lpXSA9IGFzb2MtPm1hcHBp
bmdfYXJyYXlbc2xpZGVfZnJvbSArIGlpXTsKKwkJCQlhc29jLT5ucl9tYXBwaW5nX2FycmF5W2lp
XSA9IGFzb2MtPm5yX21hcHBpbmdfYXJyYXlbc2xpZGVfZnJvbSArIGlpXTsKKwkJCX0KKwkJCWZv
ciAoaWkgPSBkaXN0YW5jZTsgaWkgPCBhc29jLT5tYXBwaW5nX2FycmF5X3NpemU7IGlpKyspIHsK
KwkJCQlhc29jLT5tYXBwaW5nX2FycmF5W2lpXSA9IDA7CisJCQkJYXNvYy0+bnJfbWFwcGluZ19h
cnJheVtpaV0gPSAwOworCQkJfQorCQkJaWYgKGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAg
KyAxID09IGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24pIHsKKwkJCQlhc29jLT5oaWdoZXN0
X3Rzbl9pbnNpZGVfbWFwICs9IChzbGlkZV9mcm9tIDw8IDMpOworCQkJfQorCQkJaWYgKGFzb2Mt
PmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXAgKyAxID09IGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFz
ZV90c24pIHsKKwkJCQlhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwICs9IChzbGlkZV9m
cm9tIDw8IDMpOworCQkJfQorCQkJYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbiArPSAoc2xp
ZGVfZnJvbSA8PCAzKTsKKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZl
bCkgJiBTQ1RQX01BUF9MT0dHSU5HX0VOQUJMRSkgeworCQkJCXNjdHBfbG9nX21hcChhc29jLT5t
YXBwaW5nX2FycmF5X2Jhc2VfdHNuLAorCQkJCQkgICAgIGFzb2MtPmN1bXVsYXRpdmVfdHNuLCBh
c29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwLAorCQkJCQkgICAgIFNDVFBfTUFQX1NMSURFX1JF
U1VMVCk7CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQKK3NjdHBfc2Fja19jaGVjayhzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IsIGludCB3YXNfYV9nYXApCit7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRp
b24gKmFzb2M7CisJdWludDMyX3QgaGlnaGVzdF90c247CisJaW50IGlzX2FfZ2FwOworCisJc2N0
cF9zbGlkZV9tYXBwaW5nX2FycmF5cyhzdGNiKTsKKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJaWYg
KFNDVFBfVFNOX0dUKGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXAsIGFzb2MtPmhpZ2hl
c3RfdHNuX2luc2lkZV9tYXApKSB7CisJCWhpZ2hlc3RfdHNuID0gYXNvYy0+aGlnaGVzdF90c25f
aW5zaWRlX25yX21hcDsKKwl9IGVsc2UgeworCQloaWdoZXN0X3RzbiA9IGFzb2MtPmhpZ2hlc3Rf
dHNuX2luc2lkZV9tYXA7CisJfQorCS8qIElzIHRoZXJlIGEgZ2FwIG5vdz8gKi8KKwlpc19hX2dh
cCA9IFNDVFBfVFNOX0dUKGhpZ2hlc3RfdHNuLCBzdGNiLT5hc29jLmN1bXVsYXRpdmVfdHNuKTsK
KworCS8qCisJICogTm93IHdlIG5lZWQgdG8gc2VlIGlmIHdlIG5lZWQgdG8gcXVldWUgYSBzYWNr
IG9yIGp1c3Qgc3RhcnQgdGhlCisJICogdGltZXIgKGlmIGFsbG93ZWQpLgorCSAqLworCWlmIChT
Q1RQX0dFVF9TVEFURShzdGNiKSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQpIHsKKwkJLyoK
KwkJICogT2sgc3BlY2lhbCBjYXNlLCBpbiBTSFVURE9XTi1TRU5UIGNhc2UuIGhlcmUgd2UKKwkJ
ICogbWFrZXIgc3VyZSBTQUNLIHRpbWVyIGlzIG9mZiBhbmQgaW5zdGVhZCBzZW5kIGEKKwkJICog
U0hVVERPV04gYW5kIGEgU0FDSworCQkgKi8KKwkJaWYgKFNDVFBfT1NfVElNRVJfUEVORElORygm
c3RjYi0+YXNvYy5kYWNrX3RpbWVyLnRpbWVyKSkgeworCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBf
VElNRVJfVFlQRV9SRUNWLAorCQkJICAgICAgICAgICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
IE5VTEwsCisJCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9M
T0NfMTkpOworCQl9CisJCXNjdHBfc2VuZF9zaHV0ZG93bihzdGNiLAorCQkgICAgICAgICAgICAg
ICAgICAgKChzdGNiLT5hc29jLmFsdGVybmF0ZSkgPyBzdGNiLT5hc29jLmFsdGVybmF0ZSA6IHN0
Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbikpOworCQlpZiAoaXNfYV9nYXApIHsKKwkJCXNj
dHBfc2VuZF9zYWNrKHN0Y2IsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCX0KKwl9IGVsc2Ugewor
CQkvKgorCQkgKiBDTVQgREFDIGFsZ29yaXRobTogaW5jcmVhc2UgbnVtYmVyIG9mIHBhY2tldHMK
KwkJICogcmVjZWl2ZWQgc2luY2UgbGFzdCBhY2sKKwkJICovCisJCXN0Y2ItPmFzb2MuY210X2Rh
Y19wa3RzX3JjdmQrKzsKKworCQlpZiAoKHN0Y2ItPmFzb2Muc2VuZF9zYWNrID09IDEpIHx8ICAg
ICAgLyogV2UgbmVlZCB0byBzZW5kIGEgU0FDSyAqLworCQkgICAgKCh3YXNfYV9nYXApICYmIChp
c19hX2dhcCA9PSAwKSkgfHwJLyogd2FzIGEgZ2FwLCBidXQgbm8KKwkJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqIGxvbmdlciBpcyBvbmUgKi8KKwkJICAgIChzdGNi
LT5hc29jLm51bWR1cHRzbnMpIHx8ICAgICAgICAgIC8qIHdlIGhhdmUgZHVwJ3MgKi8KKwkJICAg
IChpc19hX2dhcCkgfHwgICAgICAgICAgICAgICAgICAgICAgIC8qIGlzIHN0aWxsIGEgZ2FwICov
CisJCSAgICAoc3RjYi0+YXNvYy5kZWxheWVkX2FjayA9PSAwKSB8fCAgICAvKiBEZWxheWVkIHNh
Y2sgZGlzYWJsZWQgKi8KKwkJICAgIChzdGNiLT5hc29jLmRhdGFfcGt0c19zZWVuID49IHN0Y2It
PmFzb2Muc2Fja19mcmVxKSkgewkvKiBoaXQgbGltaXQgb2YgcGt0cyAqLworCQkJaWYgKChzdGNi
LT5hc29jLnNjdHBfY210X29uX29mZiA+IDApICYmCisJCQkgICAgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9jbXRfdXNlX2RhYykpICYmCisJCQkgICAgKHN0Y2ItPmFzb2Muc2VuZF9zYWNrID09IDAp
ICYmCisJCQkgICAgKHN0Y2ItPmFzb2MubnVtZHVwdHNucyA9PSAwKSAmJgorCQkJICAgIChzdGNi
LT5hc29jLmRlbGF5ZWRfYWNrKSAmJgorCQkJICAgICghU0NUUF9PU19USU1FUl9QRU5ESU5HKCZz
dGNiLT5hc29jLmRhY2tfdGltZXIudGltZXIpKSkgeworCQkJCS8qCisJCQkJICogQ01UIERBQyBh
bGdvcml0aG06IFdpdGggQ01ULAorCQkJCSAqIGRlbGF5IGFja3MgZXZlbiBpbiB0aGUgZmFjZSBv
ZgorCQkJCSAqIHJlb3JkZXJpbmcuIFRoZXJlZm9yZSwgaWYgYWNrcworCQkJCSAqIHRoYXQgZG8g
bm90IGhhdmUgdG8gYmUgc2VudAorCQkJCSAqIGJlY2F1c2Ugb2YgdGhlIGFib3ZlIHJlYXNvbnMs
CisJCQkJICogd2lsbCBiZSBkZWxheWVkLiBUaGF0IGlzLCBhY2tzCisJCQkJICogdGhhdCB3b3Vs
ZCBoYXZlIGJlZW4gc2VudCBkdWUgdG8KKwkJCQkgKiBnYXAgcmVwb3J0cyB3aWxsIGJlIGRlbGF5
ZWQgd2l0aAorCQkJCSAqIERBQy4gU3RhcnQgdGhlIGRlbGF5ZWQgYWNrIHRpbWVyLgorCQkJCSAq
LworCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1JFQ1YsCisJCQkJICAgICAg
ICAgICAgICAgICBzdGNiLT5zY3RwX2VwLCBzdGNiLCBOVUxMKTsKKwkJCX0gZWxzZSB7CisJCQkJ
LyoKKwkJCQkgKiBPayB3ZSBtdXN0IGJ1aWxkIGEgU0FDSyBzaW5jZSB0aGUKKwkJCQkgKiB0aW1l
ciBpcyBwZW5kaW5nLCB3ZSBnb3Qgb3VyCisJCQkJICogZmlyc3QgcGFja2V0IE9SIHRoZXJlIGFy
ZSBnYXBzIG9yCisJCQkJICogZHVwbGljYXRlcy4KKwkJCQkgKi8KKwkJCQlzY3RwX3RpbWVyX3N0
b3AoU0NUUF9USU1FUl9UWVBFX1JFQ1YsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIE5VTEwsCisJCQkJ
ICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzIwKTsKKwkJ
CQlzY3RwX3NlbmRfc2FjayhzdGNiLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJfQorCQl9IGVs
c2UgeworCQkJaWYgKCFTQ1RQX09TX1RJTUVSX1BFTkRJTkcoJnN0Y2ItPmFzb2MuZGFja190aW1l
ci50aW1lcikpIHsKKwkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9SRUNWLAor
CQkJCSAgICAgICAgICAgICAgICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgTlVMTCk7CisJCQl9CisJ
CX0KKwl9Cit9CisKK2ludAorc2N0cF9wcm9jZXNzX2RhdGEoc3RydWN0IG1idWYgKiptbSwgaW50
IGlwaGxlbiwgaW50ICpvZmZzZXQsIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICBzdHJ1
Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAg
ICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIHVpbnQzMl90ICpoaWdoX3RzbikKK3sKKwlzdHJ1
Y3Qgc2N0cF9jaHVua2hkciAqY2gsIGNodW5rX2J1ZjsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlv
biAqYXNvYzsKKwlpbnQgbnVtX2NodW5rcyA9IDA7CS8qIG51bWJlciBvZiBjb250cm9sIGNodW5r
cyBwcm9jZXNzZWQgKi8KKwlpbnQgc3RvcF9wcm9jID0gMDsKKwlpbnQgYnJlYWtfZmxhZywgbGFz
dF9jaHVuazsKKwlpbnQgYWJvcnRfZmxhZyA9IDAsIHdhc19hX2dhcDsKKwlzdHJ1Y3QgbWJ1ZiAq
bTsKKwl1aW50MzJfdCBoaWdoZXN0X3RzbjsKKwl1aW50MTZfdCBjaGtfbGVuZ3RoOworCisJLyog
c2V0IHRoZSByd25kICovCisJc2N0cF9zZXRfcnduZChzdGNiLCAmc3RjYi0+YXNvYyk7CisKKwlt
ID0gKm1tOworCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOworCWFzb2MgPSAmc3RjYi0+YXNv
YzsKKwlpZiAoU0NUUF9UU05fR1QoYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCwgYXNv
Yy0+aGlnaGVzdF90c25faW5zaWRlX21hcCkpIHsKKwkJaGlnaGVzdF90c24gPSBhc29jLT5oaWdo
ZXN0X3Rzbl9pbnNpZGVfbnJfbWFwOworCX0gZWxzZSB7CisJCWhpZ2hlc3RfdHNuID0gYXNvYy0+
aGlnaGVzdF90c25faW5zaWRlX21hcDsKKwl9CisJd2FzX2FfZ2FwID0gU0NUUF9UU05fR1QoaGln
aGVzdF90c24sIHN0Y2ItPmFzb2MuY3VtdWxhdGl2ZV90c24pOworCS8qCisJICogc2V0dXAgd2hl
cmUgd2UgZ290IHRoZSBsYXN0IERBVEEgcGFja2V0IGZyb20gZm9yIGFueSBTQUNLIHRoYXQKKwkg
KiBtYXkgbmVlZCB0byBnbyBvdXQuIERvbid0IGJ1bXAgdGhlIG5ldC4gVGhpcyBpcyBkb25lIE9O
TFkgd2hlbiBhCisJICogY2h1bmsgaXMgYXNzaWduZWQuCisJICovCisJYXNvYy0+bGFzdF9kYXRh
X2NodW5rX2Zyb20gPSBuZXQ7CisKKwkvKi0KKwkgKiBOb3cgYmVmb3JlIHdlIHByb2NlZWQgd2Ug
bXVzdCBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgYSB3YXN0ZWQKKwkgKiBjbHVzdGVyLi4uIGkuZS4g
aXQgaXMgYSBzbWFsbCBwYWNrZXQgc2VudCBpbiBhbmQgeWV0IHRoZSBkcml2ZXIKKwkgKiB1bmRl
cm5lYXRoIGFsbG9jYXRlZCBhIGZ1bGwgY2x1c3RlciBmb3IgaXQuIElmIHNvIHdlIG11c3QgY29w
eSBpdAorCSAqIHRvIGEgc21hbGxlciBtYnVmIGFuZCBmcmVlIHVwIHRoZSBjbHVzdGVyIG1idWYu
IFRoaXMgd2lsbCBoZWxwCisJICogd2l0aCBjbHVzdGVyIHN0YXJ2YXRpb24uCisJICovCisJaWYg
KFNDVFBfQlVGX0xFTihtKSA8IChsb25nKU1MRU4gJiYgU0NUUF9CVUZfTkVYVChtKSA9PSBOVUxM
KSB7CisJCS8qIHdlIG9ubHkgaGFuZGxlIG1idWZzIHRoYXQgYXJlIHNpbmdsZXRvbnMuLiBub3Qg
Y2hhaW5zICovCisJCW0gPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coU0NUUF9CVUZfTEVOKG0pLCAw
LCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJCWlmIChtKSB7CisJCQkvKiBvayBsZXRzIHNlZSBp
ZiB3ZSBjYW4gY29weSB0aGUgZGF0YSB1cCAqLworCQkJY2FkZHJfdCAqZnJvbSwgKnRvOworCQkJ
LyogZ2V0IHRoZSBwb2ludGVycyBhbmQgY29weSAqLworCQkJdG8gPSBtdG9kKG0sIGNhZGRyX3Qg
Kik7CisJCQlmcm9tID0gbXRvZCgoKm1tKSwgY2FkZHJfdCAqKTsKKwkJCW1lbWNweSh0bywgZnJv
bSwgU0NUUF9CVUZfTEVOKCgqbW0pKSk7CisJCQkvKiBjb3B5IHRoZSBsZW5ndGggYW5kIGZyZWUg
dXAgdGhlIG9sZCAqLworCQkJU0NUUF9CVUZfTEVOKG0pID0gU0NUUF9CVUZfTEVOKCgqbW0pKTsK
KwkJCXNjdHBfbV9mcmVlbSgqbW0pOworCQkJLyogc3VjY2VzcywgYmFjayBjb3B5ICovCisJCQkq
bW0gPSBtOworCQl9IGVsc2UgeworCQkJLyogV2UgYXJlIGluIHRyb3VibGUgaW4gdGhlIG1idWYg
d29ybGQgLi4geWlrZXMgKi8KKwkJCW0gPSAqbW07CisJCX0KKwl9CisJLyogZ2V0IHBvaW50ZXIg
dG8gdGhlIGZpcnN0IGNodW5rIGhlYWRlciAqLworCWNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRy
ICopc2N0cF9tX2dldHB0cihtLCAqb2Zmc2V0LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpLAorCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKSZjaHVua19idWYp
OworCWlmIChjaCA9PSBOVUxMKSB7CisJCXJldHVybiAoMSk7CisJfQorCS8qCisJICogcHJvY2Vz
cyBhbGwgREFUQSBjaHVua3MuLi4KKwkgKi8KKwkqaGlnaF90c24gPSBhc29jLT5jdW11bGF0aXZl
X3RzbjsKKwlicmVha19mbGFnID0gMDsKKwlhc29jLT5kYXRhX3BrdHNfc2VlbisrOworCXdoaWxl
IChzdG9wX3Byb2MgPT0gMCkgeworCQkvKiB2YWxpZGF0ZSBjaHVuayBsZW5ndGggKi8KKwkJY2hr
X2xlbmd0aCA9IG50b2hzKGNoLT5jaHVua19sZW5ndGgpOworCQlpZiAobGVuZ3RoIC0gKm9mZnNl
dCA8IGNoa19sZW5ndGgpIHsKKwkJCS8qIGFsbCBkb25lLCBtdXR1bGF0ZWQgY2h1bmsgKi8KKwkJ
CXN0b3BfcHJvYyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoKGFzb2MtPmlkYXRhX3N1
cHBvcnRlZCA9PSAxKSAmJgorCQkgICAgKGNoLT5jaHVua190eXBlID09IFNDVFBfREFUQSkpIHsK
KwkJCXN0cnVjdCBtYnVmICpvcF9lcnI7CisJCQljaGFyIG1zZ1tTQ1RQX0RJQUdfSU5GT19MRU5d
OworCisJCQlTQ1RQX1NOUFJJTlRGKG1zZywgc2l6ZW9mKG1zZyksICIlcyIsICJEQVRBIGNodW5r
IHJlY2VpdmVkIHdoZW4gSS1EQVRBIHdhcyBuZWdvdGlhdGVkIik7CisJCQlvcF9lcnIgPSBzY3Rw
X2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfUFJPVE9DT0xfVklPTEFUSU9OLCBtc2cpOworCQkJ
c3RjYi0+c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsg
U0NUUF9MT0NfMjE7CisJCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKGlucCwgc3RjYiwgb3Bf
ZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJcmV0dXJuICgyKTsKKwkJfQorCQlpZiAoKGFz
b2MtPmlkYXRhX3N1cHBvcnRlZCA9PSAwKSAmJgorCQkgICAgKGNoLT5jaHVua190eXBlID09IFND
VFBfSURBVEEpKSB7CisJCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOworCQkJY2hhciBtc2dbU0NUUF9E
SUFHX0lORk9fTEVOXTsKKworCQkJU0NUUF9TTlBSSU5URihtc2csIHNpemVvZihtc2cpLCAiJXMi
LCAiSS1EQVRBIGNodW5rIHJlY2VpdmVkIHdoZW4gREFUQSB3YXMgbmVnb3RpYXRlZCIpOworCQkJ
b3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RPQ09MX1ZJT0xBVElP
TiwgbXNnKTsKKwkJCXN0Y2ItPnNjdHBfZXAtPmxhc3RfYWJvcnRfY29kZSA9IFNDVFBfRlJPTV9T
Q1RQX0lOREFUQSArIFNDVFBfTE9DXzIyOworCQkJc2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihp
bnAsIHN0Y2IsIG9wX2VyciwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCXJldHVybiAoMik7CisJ
CX0KKwkJaWYgKChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0RBVEEpIHx8CisJCSAgICAoY2gtPmNo
dW5rX3R5cGUgPT0gU0NUUF9JREFUQSkpIHsKKwkJCXVpbnQxNl90IGNsZW47CisKKwkJCWlmIChj
aC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0RBVEEpIHsKKwkJCQljbGVuID0gc2l6ZW9mKHN0cnVjdCBz
Y3RwX2RhdGFfY2h1bmspOworCQkJfSBlbHNlIHsKKwkJCQljbGVuID0gc2l6ZW9mKHN0cnVjdCBz
Y3RwX2lkYXRhX2NodW5rKTsKKwkJCX0KKwkJCWlmIChjaGtfbGVuZ3RoIDwgY2xlbikgeworCQkJ
CS8qCisJCQkJICogTmVlZCB0byBzZW5kIGFuIGFib3J0IHNpbmNlIHdlIGhhZCBhCisJCQkJICog
aW52YWxpZCBkYXRhIGNodW5rLgorCQkJCSAqLworCQkJCXN0cnVjdCBtYnVmICpvcF9lcnI7CisJ
CQkJY2hhciBtc2dbU0NUUF9ESUFHX0lORk9fTEVOXTsKKworCQkJCVNDVFBfU05QUklOVEYobXNn
LCBzaXplb2YobXNnKSwgIiVzIGNodW5rIG9mIGxlbmd0aCAldSIsCisJCQkJICAgICAgICAgICAg
ICBjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0RBVEEgPyAiREFUQSIgOiAiSS1EQVRBIiwKKwkJCQkg
ICAgICAgICAgICAgIGNoa19sZW5ndGgpOworCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1
c2UoU0NUUF9DQVVTRV9QUk9UT0NPTF9WSU9MQVRJT04sIG1zZyk7CisJCQkJc3RjYi0+c2N0cF9l
cC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfMjM7
CisJCQkJc2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihpbnAsIHN0Y2IsIG9wX2VyciwgU0NUUF9T
T19OT1RfTE9DS0VEKTsKKwkJCQlyZXR1cm4gKDIpOworCQkJfQorI2lmZGVmIFNDVFBfQVVESVRJ
TkdfRU5BQkxFRAorCQkJc2N0cF9hdWRpdF9sb2coMHhCMSwgMCk7CisjZW5kaWYKKwkJCWlmIChT
Q1RQX1NJWkUzMihjaGtfbGVuZ3RoKSA9PSAobGVuZ3RoIC0gKm9mZnNldCkpIHsKKwkJCQlsYXN0
X2NodW5rID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJbGFzdF9jaHVuayA9IDA7CisJCQl9CisJCQlp
ZiAoc2N0cF9wcm9jZXNzX2FfZGF0YV9jaHVuayhzdGNiLCBhc29jLCBtbSwgKm9mZnNldCwKKwkJ
CQkJCSAgICAgIGNoa19sZW5ndGgsIG5ldCwgaGlnaF90c24sICZhYm9ydF9mbGFnLCAmYnJlYWtf
ZmxhZywKKwkJCQkJCSAgICAgIGxhc3RfY2h1bmssIGNoLT5jaHVua190eXBlKSkgeworCQkJCW51
bV9jaHVua3MrKzsKKwkJCX0KKwkJCWlmIChhYm9ydF9mbGFnKQorCQkJCXJldHVybiAoMik7CisK
KwkJCWlmIChicmVha19mbGFnKSB7CisJCQkJLyoKKwkJCQkgKiBTZXQgYmVjYXVzZSBvZiBvdXQg
b2YgcnduZCBzcGFjZSBhbmQgbm8KKwkJCQkgKiBkcm9wIHJlcCBzcGFjZSBsZWZ0LgorCQkJCSAq
LworCQkJCXN0b3BfcHJvYyA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCX0gZWxzZSB7CisJ
CQkvKiBub3QgYSBkYXRhIGNodW5rIGluIHRoZSBkYXRhIHJlZ2lvbiAqLworCQkJc3dpdGNoIChj
aC0+Y2h1bmtfdHlwZSkgeworCQkJY2FzZSBTQ1RQX0lOSVRJQVRJT046CisJCQljYXNlIFNDVFBf
SU5JVElBVElPTl9BQ0s6CisJCQljYXNlIFNDVFBfU0VMRUNUSVZFX0FDSzoKKwkJCWNhc2UgU0NU
UF9OUl9TRUxFQ1RJVkVfQUNLOgorCQkJY2FzZSBTQ1RQX0hFQVJUQkVBVF9SRVFVRVNUOgorCQkJ
Y2FzZSBTQ1RQX0hFQVJUQkVBVF9BQ0s6CisJCQljYXNlIFNDVFBfQUJPUlRfQVNTT0NJQVRJT046
CisJCQljYXNlIFNDVFBfU0hVVERPV046CisJCQljYXNlIFNDVFBfU0hVVERPV05fQUNLOgorCQkJ
Y2FzZSBTQ1RQX09QRVJBVElPTl9FUlJPUjoKKwkJCWNhc2UgU0NUUF9DT09LSUVfRUNITzoKKwkJ
CWNhc2UgU0NUUF9DT09LSUVfQUNLOgorCQkJY2FzZSBTQ1RQX0VDTl9FQ0hPOgorCQkJY2FzZSBT
Q1RQX0VDTl9DV1I6CisJCQljYXNlIFNDVFBfU0hVVERPV05fQ09NUExFVEU6CisJCQljYXNlIFND
VFBfQVVUSEVOVElDQVRJT046CisJCQljYXNlIFNDVFBfQVNDT05GX0FDSzoKKwkJCWNhc2UgU0NU
UF9QQUNLRVRfRFJPUFBFRDoKKwkJCWNhc2UgU0NUUF9TVFJFQU1fUkVTRVQ6CisJCQljYXNlIFND
VFBfRk9SV0FSRF9DVU1fVFNOOgorCQkJY2FzZSBTQ1RQX0FTQ09ORjoKKwkJCXsKKwkJCQkvKgor
CQkJCSAqIE5vdywgd2hhdCBkbyB3ZSBkbyB3aXRoIEtOT1dOIGNodW5rcyB0aGF0CisJCQkJICog
YXJlIE5PVCBpbiB0aGUgcmlnaHQgcGxhY2U/CisJCQkJICoKKwkJCQkgKiBGb3Igbm93LCBJIGRv
IG5vdGhpbmcgYnV0IGlnbm9yZSB0aGVtLiBXZQorCQkJCSAqIG1heSBsYXRlciB3YW50IHRvIGFk
ZCBzeXNjdGwgc3R1ZmYgdG8KKwkJCQkgKiBzd2l0Y2ggb3V0IGFuZCBkbyBlaXRoZXIgYW4gQUJP
UlQoKSBvcgorCQkJCSAqIHBvc3NpYmx5IHByb2Nlc3MgdGhlbS4KKwkJCQkgKi8KKwkJCQlzdHJ1
Y3QgbWJ1ZiAqb3BfZXJyOworCQkJCWNoYXIgbXNnW1NDVFBfRElBR19JTkZPX0xFTl07CisKKwkJ
CQlTQ1RQX1NOUFJJTlRGKG1zZywgc2l6ZW9mKG1zZyksICJEQVRBIGNodW5rIGZvbGxvd2VkIGJ5
IGNodW5rIG9mIHR5cGUgJTIuMngiLAorCQkJCSAgICAgICAgICAgICAgY2gtPmNodW5rX3R5cGUp
OworCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9QUk9UT0NPTF9W
SU9MQVRJT04sIG1zZyk7CisJCQkJc2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihpbnAsIHN0Y2Is
IG9wX2VyciwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCQlyZXR1cm4gKDIpOworCQkJfQorCQkJ
ZGVmYXVsdDoKKwkJCQkvKgorCQkJCSAqIFVua25vd24gY2h1bmsgdHlwZTogdXNlIGJpdCBydWxl
cyBhZnRlcgorCQkJCSAqIGNoZWNraW5nIGxlbmd0aAorCQkJCSAqLworCQkJCWlmIChjaGtfbGVu
Z3RoIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSkgeworCQkJCQkvKgorCQkJCQkgKiBO
ZWVkIHRvIHNlbmQgYW4gYWJvcnQgc2luY2Ugd2UgaGFkIGEKKwkJCQkJICogaW52YWxpZCBjaHVu
ay4KKwkJCQkJICovCisJCQkJCXN0cnVjdCBtYnVmICpvcF9lcnI7CisJCQkJCWNoYXIgbXNnW1ND
VFBfRElBR19JTkZPX0xFTl07CisKKwkJCQkJU0NUUF9TTlBSSU5URihtc2csIHNpemVvZihtc2cp
LCAiQ2h1bmsgb2YgbGVuZ3RoICV1IiwgY2hrX2xlbmd0aCk7CisJCQkJCW9wX2VyciA9IHNjdHBf
Z2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9QUk9UT0NPTF9WSU9MQVRJT04sIG1zZyk7CisJCQkJ
CXN0Y2ItPnNjdHBfZXAtPmxhc3RfYWJvcnRfY29kZSA9IFNDVFBfRlJPTV9TQ1RQX0lOREFUQSAr
IFNDVFBfTE9DXzI0OworCQkJCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKGlucCwgc3RjYiwg
b3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJCQlyZXR1cm4gKDIpOworCQkJCX0KKwkJ
CQlpZiAoY2gtPmNodW5rX3R5cGUgJiAweDQwKSB7CisJCQkJCS8qIEFkZCBhIGVycm9yIHJlcG9y
dCB0byB0aGUgcXVldWUgKi8KKwkJCQkJc3RydWN0IG1idWYgKm9wX2VycjsKKwkJCQkJc3RydWN0
IHNjdHBfZ2VuX2Vycm9yX2NhdXNlICpjYXVzZTsKKworCQkJCQlvcF9lcnIgPSBzY3RwX2dldF9t
YnVmX2Zvcl9tc2coc2l6ZW9mKHN0cnVjdCBzY3RwX2dlbl9lcnJvcl9jYXVzZSksCisJCQkJCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJ
CQkJCWlmIChvcF9lcnIgIT0gTlVMTCkgeworCQkJCQkJY2F1c2UgID0gbXRvZChvcF9lcnIsIHN0
cnVjdCBzY3RwX2dlbl9lcnJvcl9jYXVzZSAqKTsKKwkJCQkJCWNhdXNlLT5jb2RlID0gaHRvbnMo
U0NUUF9DQVVTRV9VTlJFQ09HX0NIVU5LKTsKKwkJCQkJCWNhdXNlLT5sZW5ndGggPSBodG9ucygo
dWludDE2X3QpKGNoa19sZW5ndGggKyBzaXplb2Yoc3RydWN0IHNjdHBfZ2VuX2Vycm9yX2NhdXNl
KSkpOworCQkJCQkJU0NUUF9CVUZfTEVOKG9wX2VycikgPSBzaXplb2Yoc3RydWN0IHNjdHBfZ2Vu
X2Vycm9yX2NhdXNlKTsKKwkJCQkJCVNDVFBfQlVGX05FWFQob3BfZXJyKSA9IFNDVFBfTV9DT1BZ
TShtLCAqb2Zmc2V0LCBjaGtfbGVuZ3RoLCBNX05PV0FJVCk7CisJCQkJCQlpZiAoU0NUUF9CVUZf
TkVYVChvcF9lcnIpICE9IE5VTEwpIHsKKwkJCQkJCQlzY3RwX3F1ZXVlX29wX2VycihzdGNiLCBv
cF9lcnIpOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlzY3RwX21fZnJlZW0ob3BfZXJyKTsKKwkJ
CQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoKGNoLT5jaHVua190eXBlICYgMHg4MCkgPT0g
MCkgeworCQkJCQkvKiBkaXNjYXJkIHRoZSByZXN0IG9mIHRoaXMgcGFja2V0ICovCisJCQkJCXN0
b3BfcHJvYyA9IDE7CisJCQkJfQkvKiBlbHNlIHNraXAgdGhpcyBiYWQgY2h1bmsgYW5kCisJCQkJ
CSAqIGNvbnRpbnVlLi4uICovCisJCQkJYnJlYWs7CisJCQl9CS8qIHN3aXRjaCBvZiBjaHVuayB0
eXBlICovCisJCX0KKwkJKm9mZnNldCArPSBTQ1RQX1NJWkUzMihjaGtfbGVuZ3RoKTsKKwkJaWYg
KCgqb2Zmc2V0ID49IGxlbmd0aCkgfHwgc3RvcF9wcm9jKSB7CisJCQkvKiBubyBtb3JlIGRhdGEg
bGVmdCBpbiB0aGUgbWJ1ZiBjaGFpbiAqLworCQkJc3RvcF9wcm9jID0gMTsKKwkJCWNvbnRpbnVl
OworCQl9CisJCWNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopc2N0cF9tX2dldHB0cihtLCAq
b2Zmc2V0LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICh1aW50OF90ICopJmNodW5rX2J1Zik7CisJCWlmIChjaCA9PSBOVUxM
KSB7CisJCQkqb2Zmc2V0ID0gbGVuZ3RoOworCQkJc3RvcF9wcm9jID0gMTsKKwkJCWNvbnRpbnVl
OworCQl9CisJfQorCWlmIChicmVha19mbGFnKSB7CisJCS8qCisJCSAqIHdlIG5lZWQgdG8gcmVw
b3J0IHJ3bmQgb3ZlcnJ1biBkcm9wcy4KKwkJICovCisJCXNjdHBfc2VuZF9wYWNrZXRfZHJvcHBl
ZChzdGNiLCBuZXQsICptbSwgbGVuZ3RoLCBpcGhsZW4sIDApOworCX0KKwlpZiAobnVtX2NodW5r
cykgeworCQkvKgorCQkgKiBEaWQgd2UgZ2V0IGRhdGEsIGlmIHNvIHVwZGF0ZSB0aGUgdGltZSBm
b3IgYXV0by1jbG9zZSBhbmQKKwkJICogZ2l2ZSBwZWVyIGNyZWRpdCBmb3IgYmVpbmcgYWxpdmUu
CisJCSAqLworCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2cGt0d2l0aGRhdGEpOworCQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9USFJFU0hPTERfTE9H
R0lORykgeworCQkJc2N0cF9taXNjX2ludHMoU0NUUF9USFJFU0hPTERfQ0xFQVIsCisJCQkJICAg
ICAgIHN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCwKKwkJCQkgICAgICAgMCwKKwkJCQkg
ICAgICAgU0NUUF9GUk9NX1NDVFBfSU5EQVRBLAorCQkJCSAgICAgICBfX0xJTkVfXyk7CisJCX0K
KwkJc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50ID0gMDsKKwkJKHZvaWQpU0NUUF9HRVRU
SU1FX1RJTUVWQUwoJnN0Y2ItPmFzb2MudGltZV9sYXN0X3JjdmQpOworCX0KKwkvKiBub3cgc2Vy
dmljZSBhbGwgb2YgdGhlIHJlYXNzbSBxdWV1ZSBpZiBuZWVkZWQgKi8KKwlpZiAoU0NUUF9HRVRf
U1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKSB7CisJCS8qIEFzc3VyZSB0
aGF0IHdlIGFjayByaWdodCBhd2F5ICovCisJCXN0Y2ItPmFzb2Muc2VuZF9zYWNrID0gMTsKKwl9
CisJLyogU3RhcnQgYSBzYWNrIHRpbWVyIG9yIFFVRVVFIGEgU0FDSyBmb3Igc2VuZGluZyAqLwor
CXNjdHBfc2Fja19jaGVjayhzdGNiLCB3YXNfYV9nYXApOworCXJldHVybiAoMCk7Cit9CisKK3N0
YXRpYyBpbnQKK3NjdHBfcHJvY2Vzc19zZWdtZW50X3JhbmdlKHN0cnVjdCBzY3RwX3RjYiAqc3Rj
Yiwgc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqKnBfdHAxLCB1aW50MzJfdCBsYXN0X3RzbiwKKwkJ
CSAgIHVpbnQxNl90IGZyYWdfc3RydCwgdWludDE2X3QgZnJhZ19lbmQsIGludCBucl9zYWNraW5n
LAorCQkJICAgaW50ICpudW1fZnJzLAorCQkJICAgdWludDMyX3QgKmJpZ2dlc3RfbmV3bHlfYWNr
ZWRfdHNuLAorCQkJICAgdWludDMyX3QgICp0aGlzX3NhY2tfbG93ZXN0X25ld2FjaywKKwkJCSAg
IGludCAqcnRvX29rKQoreworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKnRwMTsKKwl1bnNpZ25l
ZCBpbnQgdGhlVFNOOworCWludCBqLCB3YWtlX2hpbSA9IDAsIGNpcmNsZWQgPSAwOworCisJLyog
UmVjb3ZlciB0aGUgdHAxIHdlIGxhc3Qgc2F3ICovCisJdHAxID0gKnBfdHAxOworCWlmICh0cDEg
PT0gTlVMTCkgeworCQl0cDEgPSBUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5zZW50X3F1ZXVlKTsK
Kwl9CisJZm9yIChqID0gZnJhZ19zdHJ0OyBqIDw9IGZyYWdfZW5kOyBqKyspIHsKKwkJdGhlVFNO
ID0gaiArIGxhc3RfdHNuOworCQl3aGlsZSAodHAxKSB7CisJCQlpZiAodHAxLT5yZWMuZGF0YS5k
b2luZ19mYXN0X3JldHJhbnNtaXQpCisJCQkJKCpudW1fZnJzKSArPSAxOworCisJCQkvKi0KKwkJ
CSAqIENNVDogQ1VDdjIgYWxnb3JpdGhtLiBGb3IgZWFjaCBUU04gYmVpbmcKKwkJCSAqIHByb2Nl
c3NlZCBmcm9tIHRoZSBzZW50IHF1ZXVlLCB0cmFjayB0aGUKKwkJCSAqIG5leHQgZXhwZWN0ZWQg
cHNldWRvLWN1bWFjaywgb3IKKwkJCSAqIHJ0eF9wc2V1ZG9fY3VtYWNrLCBpZiByZXF1aXJlZC4g
U2VwYXJhdGUKKwkJCSAqIGN1bWFjayB0cmFja2VycyBmb3IgZmlyc3QgdHJhbnNtaXNzaW9ucywK
KwkJCSAqIGFuZCByZXRyYW5zbWlzc2lvbnMuCisJCQkgKi8KKwkJCWlmICgodHAxLT5zZW50IDwg
U0NUUF9EQVRBR1JBTV9SRVNFTkQpICYmCisJCQkgICAgKHRwMS0+d2hvVG8tPmZpbmRfcHNldWRv
X2N1bWFjayA9PSAxKSAmJgorCQkJICAgICh0cDEtPnNuZF9jb3VudCA9PSAxKSkgeworCQkJCXRw
MS0+d2hvVG8tPnBzZXVkb19jdW1hY2sgPSB0cDEtPnJlYy5kYXRhLnRzbjsKKwkJCQl0cDEtPndo
b1RvLT5maW5kX3BzZXVkb19jdW1hY2sgPSAwOworCQkJfQorCQkJaWYgKCh0cDEtPnNlbnQgPCBT
Q1RQX0RBVEFHUkFNX1JFU0VORCkgJiYKKwkJCSAgICAodHAxLT53aG9Uby0+ZmluZF9ydHhfcHNl
dWRvX2N1bWFjayA9PSAxKSAmJgorCQkJICAgICh0cDEtPnNuZF9jb3VudCA+IDEpKSB7CisJCQkJ
dHAxLT53aG9Uby0+cnR4X3BzZXVkb19jdW1hY2sgPSB0cDEtPnJlYy5kYXRhLnRzbjsKKwkJCQl0
cDEtPndob1RvLT5maW5kX3J0eF9wc2V1ZG9fY3VtYWNrID0gMDsKKwkJCX0KKwkJCWlmICh0cDEt
PnJlYy5kYXRhLnRzbiA9PSB0aGVUU04pIHsKKwkJCQlpZiAodHAxLT5zZW50ICE9IFNDVFBfREFU
QUdSQU1fVU5TRU5UKSB7CisJCQkJCS8qLQorCQkJCQkgKiBtdXN0IGJlIGhlbGQgdW50aWwKKwkJ
CQkJICogY3VtLWFjayBwYXNzZXMKKwkJCQkJICovCisJCQkJCWlmICh0cDEtPnNlbnQgPCBTQ1RQ
X0RBVEFHUkFNX1JFU0VORCkgeworCQkJCQkJLyotCisJCQkJCQkgKiBJZiBpdCBpcyBsZXNzIHRo
YW4gUkVTRU5ELCBpdCBpcworCQkJCQkJICogbm93IG5vLWxvbmdlciBpbiBmbGlnaHQuCisJCQkJ
CQkgKiBIaWdoZXIgdmFsdWVzIG1heSBhbHJlYWR5IGJlIHNldAorCQkJCQkJICogdmlhIHByZXZp
b3VzIEdhcCBBY2sgQmxvY2tzLi4uCisJCQkJCQkgKiBpLmUuIEFDS0VEIG9yIFJFU0VORC4KKwkJ
CQkJCSAqLworCQkJCQkJaWYgKFNDVFBfVFNOX0dUKHRwMS0+cmVjLmRhdGEudHNuLAorCQkJCQkJ
ICAgICAgICAgICAgICAgICpiaWdnZXN0X25ld2x5X2Fja2VkX3RzbikpIHsKKwkJCQkJCQkqYmln
Z2VzdF9uZXdseV9hY2tlZF90c24gPSB0cDEtPnJlYy5kYXRhLnRzbjsKKwkJCQkJCX0KKwkJCQkJ
CS8qLQorCQkJCQkJICogQ01UOiBTRlIgYWxnbyAoYW5kIEhUTkEpIC0gc2V0CisJCQkJCQkgKiBz
YXdfbmV3YWNrIHRvIDEgZm9yIGRlc3QgYmVpbmcKKwkJCQkJCSAqIG5ld2x5IGFja2VkLiB1cGRh
dGUKKwkJCQkJCSAqIHRoaXNfc2Fja19oaWdoZXN0X25ld2FjayBpZgorCQkJCQkJICogYXBwcm9w
cmlhdGUuCisJCQkJCQkgKi8KKwkJCQkJCWlmICh0cDEtPnJlYy5kYXRhLmNodW5rX3dhc19yZXZv
a2VkID09IDApCisJCQkJCQkJdHAxLT53aG9Uby0+c2F3X25ld2FjayA9IDE7CisKKwkJCQkJCWlm
IChTQ1RQX1RTTl9HVCh0cDEtPnJlYy5kYXRhLnRzbiwKKwkJCQkJCSAgICAgICAgICAgICAgICB0
cDEtPndob1RvLT50aGlzX3NhY2tfaGlnaGVzdF9uZXdhY2spKSB7CisJCQkJCQkJdHAxLT53aG9U
by0+dGhpc19zYWNrX2hpZ2hlc3RfbmV3YWNrID0KKwkJCQkJCQkJdHAxLT5yZWMuZGF0YS50c247
CisJCQkJCQl9CisJCQkJCQkvKi0KKwkJCQkJCSAqIENNVCBEQUMgYWxnbzogYWxzbyB1cGRhdGUK
KwkJCQkJCSAqIHRoaXNfc2Fja19sb3dlc3RfbmV3YWNrCisJCQkJCQkgKi8KKwkJCQkJCWlmICgq
dGhpc19zYWNrX2xvd2VzdF9uZXdhY2sgPT0gMCkgeworCQkJCQkJCWlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NBQ0tfTE9HR0lOR19FTkFCTEUpIHsKKwkJ
CQkJCQkJc2N0cF9sb2dfc2FjaygqdGhpc19zYWNrX2xvd2VzdF9uZXdhY2ssCisJCQkJCQkJCQkg
ICAgICBsYXN0X3RzbiwKKwkJCQkJCQkJCSAgICAgIHRwMS0+cmVjLmRhdGEudHNuLAorCQkJCQkJ
CQkJICAgICAgMCwKKwkJCQkJCQkJCSAgICAgIDAsCisJCQkJCQkJCQkgICAgICBTQ1RQX0xPR19U
U05fQUNLRUQpOworCQkJCQkJCX0KKwkJCQkJCQkqdGhpc19zYWNrX2xvd2VzdF9uZXdhY2sgPSB0
cDEtPnJlYy5kYXRhLnRzbjsKKwkJCQkJCX0KKwkJCQkJCS8qLQorCQkJCQkJICogQ01UOiBDVUN2
MiBhbGdvcml0aG0uIElmIChydHgtKXBzZXVkby1jdW1hY2sgZm9yIGNvcnJlc3AKKwkJCQkJCSAq
IGRlc3QgaXMgYmVpbmcgYWNrZWQsIHRoZW4gd2UgaGF2ZSBhIG5ldyAocnR4LSlwc2V1ZG8tY3Vt
YWNrLiBTZXQKKwkJCQkJCSAqIG5ld18ocnR4Xylwc2V1ZG9fY3VtYWNrIHRvIFRSVUUgc28gdGhh
dCB0aGUgY3duZCBmb3IgdGhpcyBkZXN0IGNhbiBiZQorCQkJCQkJICogdXBkYXRlZC4gQWxzbyB0
cmlnZ2VyIHNlYXJjaCBmb3IgdGhlIG5leHQgZXhwZWN0ZWQgKHJ0eC0pcHNldWRvLWN1bWFjay4K
KwkJCQkJCSAqIFNlcGFyYXRlIHBzZXVkb19jdW1hY2sgdHJhY2tlcnMgZm9yIGZpcnN0IHRyYW5z
bWlzc2lvbnMgYW5kCisJCQkJCQkgKiByZXRyYW5zbWlzc2lvbnMuCisJCQkJCQkgKi8KKwkJCQkJ
CWlmICh0cDEtPnJlYy5kYXRhLnRzbiA9PSB0cDEtPndob1RvLT5wc2V1ZG9fY3VtYWNrKSB7CisJ
CQkJCQkJaWYgKHRwMS0+cmVjLmRhdGEuY2h1bmtfd2FzX3Jldm9rZWQgPT0gMCkgeworCQkJCQkJ
CQl0cDEtPndob1RvLT5uZXdfcHNldWRvX2N1bWFjayA9IDE7CisJCQkJCQkJfQorCQkJCQkJCXRw
MS0+d2hvVG8tPmZpbmRfcHNldWRvX2N1bWFjayA9IDE7CisJCQkJCQl9CisJCQkJCQlpZiAoU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdfRU5B
QkxFKSB7CisJCQkJCQkJc2N0cF9sb2dfY3duZChzdGNiLCB0cDEtPndob1RvLCB0cDEtPnJlYy5k
YXRhLnRzbiwgU0NUUF9DV05EX0xPR19GUk9NX1NBQ0spOworCQkJCQkJfQorCQkJCQkJaWYgKHRw
MS0+cmVjLmRhdGEudHNuID09IHRwMS0+d2hvVG8tPnJ0eF9wc2V1ZG9fY3VtYWNrKSB7CisJCQkJ
CQkJaWYgKHRwMS0+cmVjLmRhdGEuY2h1bmtfd2FzX3Jldm9rZWQgPT0gMCkgeworCQkJCQkJCQl0
cDEtPndob1RvLT5uZXdfcHNldWRvX2N1bWFjayA9IDE7CisJCQkJCQkJfQorCQkJCQkJCXRwMS0+
d2hvVG8tPmZpbmRfcnR4X3BzZXVkb19jdW1hY2sgPSAxOworCQkJCQkJfQorCQkJCQkJaWYgKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfU0FDS19MT0dHSU5HX0VO
QUJMRSkgeworCQkJCQkJCXNjdHBfbG9nX3NhY2soKmJpZ2dlc3RfbmV3bHlfYWNrZWRfdHNuLAor
CQkJCQkJCQkgICAgICBsYXN0X3RzbiwKKwkJCQkJCQkJICAgICAgdHAxLT5yZWMuZGF0YS50c24s
CisJCQkJCQkJCSAgICAgIGZyYWdfc3RydCwKKwkJCQkJCQkJICAgICAgZnJhZ19lbmQsCisJCQkJ
CQkJCSAgICAgIFNDVFBfTE9HX1RTTl9BQ0tFRCk7CisJCQkJCQl9CisJCQkJCQlpZiAoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GTElHSFRfTE9HR0lOR19FTkFC
TEUpIHsKKwkJCQkJCQlzY3RwX21pc2NfaW50cyhTQ1RQX0ZMSUdIVF9MT0dfRE9XTl9HQVAsCisJ
CQkJCQkJCSAgICAgICB0cDEtPndob1RvLT5mbGlnaHRfc2l6ZSwKKwkJCQkJCQkJICAgICAgIHRw
MS0+Ym9va19zaXplLAorCQkJCQkJCQkgICAgICAgKHVpbnQzMl90KSh1aW50cHRyX3QpdHAxLT53
aG9UbywKKwkJCQkJCQkJICAgICAgIHRwMS0+cmVjLmRhdGEudHNuKTsKKwkJCQkJCX0KKwkJCQkJ
CXNjdHBfZmxpZ2h0X3NpemVfZGVjcmVhc2UodHAxKTsKKwkJCQkJCWlmIChzdGNiLT5hc29jLmNj
X2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBkYXRlX3Rzbl9hY2tub3dsZWRnZWQpIHsKKwkJCQkJCQko
KnN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF91cGRhdGVfdHNuX2Fja25vd2xlZGdl
ZCkodHAxLT53aG9UbywKKwkJCQkJCQkJCQkJCQkJICAgICB0cDEpOworCQkJCQkJfQorCQkJCQkJ
c2N0cF90b3RhbF9mbGlnaHRfZGVjcmVhc2Uoc3RjYiwgdHAxKTsKKworCQkJCQkJdHAxLT53aG9U
by0+bmV0X2FjayArPSB0cDEtPnNlbmRfc2l6ZTsKKwkJCQkJCWlmICh0cDEtPnNuZF9jb3VudCA8
IDIpIHsKKwkJCQkJCQkvKi0KKwkJCQkJCQkgKiBUcnVlIG5vbi1yZXRyYW5zbWl0dGVkIGNodW5r
CisJCQkJCQkJICovCisJCQkJCQkJdHAxLT53aG9Uby0+bmV0X2FjazIgKz0gdHAxLT5zZW5kX3Np
emU7CisKKwkJCQkJCQkvKi0KKwkJCQkJCQkgKiB1cGRhdGUgUlRPIHRvbyA/CisJCQkJCQkJICov
CisJCQkJCQkJaWYgKHRwMS0+ZG9fcnR0KSB7CisJCQkJCQkJCWlmICgqcnRvX29rICYmCisJCQkJ
CQkJCSAgICBzY3RwX2NhbGN1bGF0ZV9ydG8oc3RjYiwKKwkJCQkJCQkJICAgICAgICAgICAgICAg
ICAgICAgICAmc3RjYi0+YXNvYywKKwkJCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICB0cDEt
Pndob1RvLAorCQkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICZ0cDEtPnNlbnRfcmN2X3Rp
bWUsCisJCQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9SVFRfRlJPTV9EQVRBKSkg
eworCQkJCQkJCQkJKnJ0b19vayA9IDA7CisJCQkJCQkJCX0KKwkJCQkJCQkJaWYgKHRwMS0+d2hv
VG8tPnJ0b19uZWVkZWQgPT0gMCkgeworCQkJCQkJCQkJdHAxLT53aG9Uby0+cnRvX25lZWRlZCA9
IDE7CisJCQkJCQkJCX0KKwkJCQkJCQkJdHAxLT5kb19ydHQgPSAwOworCQkJCQkJCX0KKwkJCQkJ
CX0KKwkJCQkJfQorCQkJCQlpZiAodHAxLT5zZW50IDw9IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7
CisJCQkJCQlpZiAoU0NUUF9UU05fR1QodHAxLT5yZWMuZGF0YS50c24sCisJCQkJCQkgICAgICAg
ICAgICAgICAgc3RjYi0+YXNvYy50aGlzX3NhY2tfaGlnaGVzdF9nYXApKSB7CisJCQkJCQkJc3Rj
Yi0+YXNvYy50aGlzX3NhY2tfaGlnaGVzdF9nYXAgPQorCQkJCQkJCQl0cDEtPnJlYy5kYXRhLnRz
bjsKKwkJCQkJCX0KKwkJCQkJCWlmICh0cDEtPnNlbnQgPT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQp
IHsKKwkJCQkJCQlzY3RwX3Vjb3VudF9kZWNyKHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5f
Y250KTsKKyNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKKwkJCQkJCQlzY3RwX2F1ZGl0X2xv
ZygweEIyLAorCQkJCQkJCQkgICAgICAgKHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250
ICYgMHgwMDAwMDBmZikpOworI2VuZGlmCisJCQkJCQl9CisJCQkJCX0KKwkJCQkJLyotCisJCQkJ
CSAqIEFsbCBjaHVua3MgTk9UIFVOU0VOVCBmYWxsIHRocm91Z2ggaGVyZSBhbmQgYXJlIG1hcmtl
ZAorCQkJCQkgKiAobGVhdmUgUFItU0NUUCBvbmVzIHRoYXQgYXJlIHRvIHNraXAgYWxvbmUgdGhv
dWdoKQorCQkJCQkgKi8KKwkJCQkJaWYgKCh0cDEtPnNlbnQgIT0gU0NUUF9GT1JXQVJEX1RTTl9T
S0lQKSAmJgorCQkJCQkgICAgKHRwMS0+c2VudCAhPSBTQ1RQX0RBVEFHUkFNX05SX0FDS0VEKSkg
eworCQkJCQkJdHAxLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9NQVJLRUQ7CisJCQkJCX0KKwkJCQkJ
aWYgKHRwMS0+cmVjLmRhdGEuY2h1bmtfd2FzX3Jldm9rZWQpIHsKKwkJCQkJCS8qIGRlZmxhdGUg
dGhlIGN3bmQgKi8KKwkJCQkJCXRwMS0+d2hvVG8tPmN3bmQgLT0gdHAxLT5ib29rX3NpemU7CisJ
CQkJCQl0cDEtPnJlYy5kYXRhLmNodW5rX3dhc19yZXZva2VkID0gMDsKKwkJCQkJfQorCQkJCQkv
KiBOUiBTYWNrIGNvZGUgaGVyZSAqLworCQkJCQlpZiAobnJfc2Fja2luZyAmJgorCQkJCQkgICAg
KHRwMS0+c2VudCAhPSBTQ1RQX0RBVEFHUkFNX05SX0FDS0VEKSkgeworCQkJCQkJaWYgKHN0Y2It
PmFzb2Muc3RybW91dFt0cDEtPnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcyA+IDApIHsK
KwkJCQkJCQlzdGNiLT5hc29jLnN0cm1vdXRbdHAxLT5yZWMuZGF0YS5zaWRdLmNodW5rc19vbl9x
dWV1ZXMtLTsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQkJCQl9IGVsc2UgeworCQkJCQkJCXBhbmlj
KCJObyBjaHVua3Mgb24gdGhlIHF1ZXVlcyBmb3Igc2lkICV1LiIsIHRwMS0+cmVjLmRhdGEuc2lk
KTsKKyNlbmRpZgorCQkJCQkJfQorCQkJCQkJaWYgKChzdGNiLT5hc29jLnN0cm1vdXRbdHAxLT5y
ZWMuZGF0YS5zaWRdLmNodW5rc19vbl9xdWV1ZXMgPT0gMCkgJiYKKwkJCQkJCSAgICAoc3RjYi0+
YXNvYy5zdHJtb3V0W3RwMS0+cmVjLmRhdGEuc2lkXS5zdGF0ZSA9PSBTQ1RQX1NUUkVBTV9SRVNF
VF9QRU5ESU5HKSAmJgorCQkJCQkJICAgIFRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLnN0cm1vdXRb
dHAxLT5yZWMuZGF0YS5zaWRdLm91dHF1ZXVlKSkgeworCQkJCQkJCXN0Y2ItPmFzb2MudHJpZ2dl
cl9yZXNldCA9IDE7CisJCQkJCQl9CisJCQkJCQl0cDEtPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX05S
X0FDS0VEOworCQkJCQkJaWYgKHRwMS0+ZGF0YSkgeworCQkJCQkJCS8qIHNhX2lnbm9yZSBOT19O
VUxMX0NISyAqLworCQkJCQkJCXNjdHBfZnJlZV9idWZzcGFjZShzdGNiLCAmc3RjYi0+YXNvYywg
dHAxLCAxKTsKKwkJCQkJCQlzY3RwX21fZnJlZW0odHAxLT5kYXRhKTsKKwkJCQkJCQl0cDEtPmRh
dGEgPSBOVUxMOworCQkJCQkJfQorCQkJCQkJd2FrZV9oaW0rKzsKKwkJCQkJfQorCQkJCX0KKwkJ
CQlicmVhazsKKwkJCX0JLyogaWYgKHRwMS0+dHNuID09IHRoZVRTTikgKi8KKwkJCWlmIChTQ1RQ
X1RTTl9HVCh0cDEtPnJlYy5kYXRhLnRzbiwgdGhlVFNOKSkgeworCQkJCWJyZWFrOworCQkJfQor
CQkJdHAxID0gVEFJTFFfTkVYVCh0cDEsIHNjdHBfbmV4dCk7CisJCQlpZiAoKHRwMSA9PSBOVUxM
KSAmJiAoY2lyY2xlZCA9PSAwKSkgeworCQkJCWNpcmNsZWQrKzsKKwkJCQl0cDEgPSBUQUlMUV9G
SVJTVCgmc3RjYi0+YXNvYy5zZW50X3F1ZXVlKTsKKwkJCX0KKwkJfQkvKiBlbmQgd2hpbGUgKHRw
MSkgKi8KKwkJaWYgKHRwMSA9PSBOVUxMKSB7CisJCQljaXJjbGVkID0gMDsKKwkJCXRwMSA9IFRB
SUxRX0ZJUlNUKCZzdGNiLT5hc29jLnNlbnRfcXVldWUpOworCQl9CisJCS8qIEluIGNhc2UgdGhl
IGZyYWdtZW50cyB3ZXJlIG5vdCBpbiBvcmRlciB3ZSBtdXN0IHJlc2V0ICovCisJfSAvKiBlbmQg
Zm9yIChqID0gZnJhZ1N0YXJ0ICovCisJKnBfdHAxID0gdHAxOworCXJldHVybiAod2FrZV9oaW0p
OwkvKiBSZXR1cm4gdmFsdWUgb25seSB1c2VkIGZvciBuci1zYWNrICovCit9CisKK3N0YXRpYyBp
bnQKK3NjdHBfaGFuZGxlX3NlZ21lbnRzKHN0cnVjdCBtYnVmICptLCBpbnQgKm9mZnNldCwgc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKwkJdWlu
dDMyX3QgbGFzdF90c24sIHVpbnQzMl90ICpiaWdnZXN0X3Rzbl9hY2tlZCwKKwkJdWludDMyX3Qg
KmJpZ2dlc3RfbmV3bHlfYWNrZWRfdHNuLCB1aW50MzJfdCAqdGhpc19zYWNrX2xvd2VzdF9uZXdh
Y2ssCisJCWludCBudW1fc2VnLCBpbnQgbnVtX25yX3NlZywgaW50ICpydG9fb2spCit7CisJc3Ry
dWN0IHNjdHBfZ2FwX2Fja19ibG9jayAqZnJhZywgYmxvY2s7CisJc3RydWN0IHNjdHBfdG1pdF9j
aHVuayAqdHAxOworCWludCBpOworCWludCBudW1fZnJzID0gMDsKKwlpbnQgY2h1bmtfZnJlZWQ7
CisJaW50IG5vbl9yZXZvY2FibGU7CisJdWludDE2X3QgZnJhZ19zdHJ0LCBmcmFnX2VuZCwgcHJl
dl9mcmFnX2VuZDsKKworCXRwMSA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zZW50X3F1ZXVlKTsKKwlw
cmV2X2ZyYWdfZW5kID0gMDsKKwljaHVua19mcmVlZCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwg
KG51bV9zZWcgKyBudW1fbnJfc2VnKTsgaSsrKSB7CisJCWlmIChpID09IG51bV9zZWcpIHsKKwkJ
CXByZXZfZnJhZ19lbmQgPSAwOworCQkJdHAxID0gVEFJTFFfRklSU1QoJmFzb2MtPnNlbnRfcXVl
dWUpOworCQl9CisJCWZyYWcgPSAoc3RydWN0IHNjdHBfZ2FwX2Fja19ibG9jayAqKXNjdHBfbV9n
ZXRwdHIobSwgKm9mZnNldCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfZ2FwX2Fja19ibG9jayksICh1aW50OF90
ICopICZibG9jayk7CisJCSpvZmZzZXQgKz0gc2l6ZW9mKGJsb2NrKTsKKwkJaWYgKGZyYWcgPT0g
TlVMTCkgeworCQkJcmV0dXJuIChjaHVua19mcmVlZCk7CisJCX0KKwkJZnJhZ19zdHJ0ID0gbnRv
aHMoZnJhZy0+c3RhcnQpOworCQlmcmFnX2VuZCA9IG50b2hzKGZyYWctPmVuZCk7CisKKwkJaWYg
KGZyYWdfc3RydCA+IGZyYWdfZW5kKSB7CisJCQkvKiBUaGlzIGdhcCByZXBvcnQgaXMgbWFsZm9y
bWVkLCBza2lwIGl0LiAqLworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGZyYWdfc3RydCA8PSBw
cmV2X2ZyYWdfZW5kKSB7CisJCQkvKiBUaGlzIGdhcCByZXBvcnQgaXMgbm90IGluIG9yZGVyLCBz
byByZXN0YXJ0LiAqLworCQkJIHRwMSA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zZW50X3F1ZXVlKTsK
KwkJfQorCQlpZiAoU0NUUF9UU05fR1QoKGxhc3RfdHNuICsgZnJhZ19lbmQpLCAqYmlnZ2VzdF90
c25fYWNrZWQpKSB7CisJCQkqYmlnZ2VzdF90c25fYWNrZWQgPSBsYXN0X3RzbiArIGZyYWdfZW5k
OworCQl9CisJCWlmIChpIDwgbnVtX3NlZykgeworCQkJbm9uX3Jldm9jYWJsZSA9IDA7CisJCX0g
ZWxzZSB7CisJCQlub25fcmV2b2NhYmxlID0gMTsKKwkJfQorCQlpZiAoc2N0cF9wcm9jZXNzX3Nl
Z21lbnRfcmFuZ2Uoc3RjYiwgJnRwMSwgbGFzdF90c24sIGZyYWdfc3RydCwgZnJhZ19lbmQsCisJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25fcmV2b2NhYmxlLCAmbnVtX2Zycywg
YmlnZ2VzdF9uZXdseV9hY2tlZF90c24sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzX3NhY2tfbG93ZXN0X25ld2FjaywgcnRvX29rKSkgeworCQkJY2h1bmtfZnJlZWQgPSAx
OworCQl9CisJCXByZXZfZnJhZ19lbmQgPSBmcmFnX2VuZDsKKwl9CisJaWYgKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRlJfTE9HR0lOR19FTkFCTEUpIHsKKwkJ
aWYgKG51bV9mcnMpCisJCQlzY3RwX2xvZ19mcigqYmlnZ2VzdF90c25fYWNrZWQsCisJCQkgICAg
ICAgICAgICAqYmlnZ2VzdF9uZXdseV9hY2tlZF90c24sCisJCQkgICAgICAgICAgICBsYXN0X3Rz
biwgU0NUUF9GUl9MT0dfQklHR0VTVF9UU05TKTsKKwl9CisJcmV0dXJuIChjaHVua19mcmVlZCk7
Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2NoZWNrX2Zvcl9yZXZva2VkKHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwKKwkJICAgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCB1aW50MzJf
dCBjdW1hY2ssCisJCSAgICAgICB1aW50MzJfdCBiaWdnZXN0X3Rzbl9hY2tlZCkKK3sKKwlzdHJ1
Y3Qgc2N0cF90bWl0X2NodW5rICp0cDE7CisKKwlUQUlMUV9GT1JFQUNIKHRwMSwgJmFzb2MtPnNl
bnRfcXVldWUsIHNjdHBfbmV4dCkgeworCQlpZiAoU0NUUF9UU05fR1QodHAxLT5yZWMuZGF0YS50
c24sIGN1bWFjaykpIHsKKwkJCS8qCisJCQkgKiBvayB0aGlzIGd1eSBpcyBlaXRoZXIgQUNLIG9y
IE1BUktFRC4gSWYgaXQgaXMKKwkJCSAqIEFDS0VEIGl0IGhhcyBiZWVuIHByZXZpb3VzbHkgYWNr
ZWQgYnV0IG5vdCB0aGlzCisJCQkgKiB0aW1lIGkuZS4gcmV2b2tlZC4gIElmIGl0IGlzIE1BUktF
RCBpdCB3YXMgQUNLJ2VkCisJCQkgKiBhZ2Fpbi4KKwkJCSAqLworCQkJaWYgKFNDVFBfVFNOX0dU
KHRwMS0+cmVjLmRhdGEudHNuLCBiaWdnZXN0X3Rzbl9hY2tlZCkpIHsKKwkJCQlicmVhazsKKwkJ
CX0KKwkJCWlmICh0cDEtPnNlbnQgPT0gU0NUUF9EQVRBR1JBTV9BQ0tFRCkgeworCQkJCS8qIGl0
IGhhcyBiZWVuIHJldm9rZWQgKi8KKwkJCQl0cDEtPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1NFTlQ7
CisJCQkJdHAxLT5yZWMuZGF0YS5jaHVua193YXNfcmV2b2tlZCA9IDE7CisJCQkJLyogV2UgbXVz
dCBhZGQgdGhpcyBzdHVmZiBiYWNrIGluIHRvCisJCQkJICogYXNzdXJlIHRpbWVycyBhbmQgc3Vj
aCBnZXQgc3RhcnRlZC4KKwkJCQkgKi8KKwkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xv
Z2dpbmdfbGV2ZWwpICYgU0NUUF9GTElHSFRfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQkJc2N0cF9t
aXNjX2ludHMoU0NUUF9GTElHSFRfTE9HX1VQX1JFVk9LRSwKKwkJCQkJCSAgICAgICB0cDEtPndo
b1RvLT5mbGlnaHRfc2l6ZSwKKwkJCQkJCSAgICAgICB0cDEtPmJvb2tfc2l6ZSwKKwkJCQkJCSAg
ICAgICAodWludDMyX3QpKHVpbnRwdHJfdCl0cDEtPndob1RvLAorCQkJCQkJICAgICAgIHRwMS0+
cmVjLmRhdGEudHNuKTsKKwkJCQl9CisJCQkJc2N0cF9mbGlnaHRfc2l6ZV9pbmNyZWFzZSh0cDEp
OworCQkJCXNjdHBfdG90YWxfZmxpZ2h0X2luY3JlYXNlKHN0Y2IsIHRwMSk7CisJCQkJLyogV2Ug
aW5mbGF0ZSB0aGUgY3duZCB0byBjb21wZW5zYXRlIGZvciBvdXIKKwkJCQkgKiBhcnRpZmljaWFs
IGluZmxhdGlvbiBvZiB0aGUgZmxpZ2h0X3NpemUuCisJCQkJICovCisJCQkJdHAxLT53aG9Uby0+
Y3duZCArPSB0cDEtPmJvb2tfc2l6ZTsKKwkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xv
Z2dpbmdfbGV2ZWwpICYgU0NUUF9TQUNLX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCXNjdHBfbG9n
X3NhY2soYXNvYy0+bGFzdF9hY2tlZF9zZXEsCisJCQkJCQkgICAgICBjdW1hY2ssCisJCQkJCQkg
ICAgICB0cDEtPnJlYy5kYXRhLnRzbiwKKwkJCQkJCSAgICAgIDAsCisJCQkJCQkgICAgICAwLAor
CQkJCQkJICAgICAgU0NUUF9MT0dfVFNOX1JFVk9LRUQpOworCQkJCX0KKwkJCX0gZWxzZSBpZiAo
dHAxLT5zZW50ID09IFNDVFBfREFUQUdSQU1fTUFSS0VEKSB7CisJCQkJLyogaXQgaGFzIGJlZW4g
cmUtYWNrZWQgaW4gdGhpcyBTQUNLICovCisJCQkJdHAxLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9B
Q0tFRDsKKwkJCX0KKwkJfQorCQlpZiAodHAxLT5zZW50ID09IFNDVFBfREFUQUdSQU1fVU5TRU5U
KQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZAorc2N0cF9zdHJpa2VfZ2FwX2Fja19j
aHVua3Moc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNv
YywKKwkJCSAgIHVpbnQzMl90IGJpZ2dlc3RfdHNuX2Fja2VkLCB1aW50MzJfdCBiaWdnZXN0X3Rz
bl9uZXdseV9hY2tlZCwgdWludDMyX3QgdGhpc19zYWNrX2xvd2VzdF9uZXdhY2ssIGludCBhY2N1
bV9tb3ZlZCkKK3sKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICp0cDE7CisJaW50IHN0cmlrZV9m
bGFnID0gMDsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJaW50IHRvdF9yZXRyYW5zID0gMDsKKwl1
aW50MzJfdCBzZW5kaW5nX3NlcTsKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJaW50IG51bV9k
ZXN0c19zYWNrZWQgPSAwOworCisJLyoKKwkgKiBzZWxlY3QgdGhlIHNlbmRpbmdfc2VxLCB0aGlz
IGlzIGVpdGhlciB0aGUgbmV4dCB0aGluZyByZWFkeSB0byBiZQorCSAqIHNlbnQgYnV0IG5vdCB0
cmFuc21pdHRlZCwgT1IsIHRoZSBuZXh0IHNlcSB3ZSBhc3NpZ24uCisJICovCisJdHAxID0gVEFJ
TFFfRklSU1QoJnN0Y2ItPmFzb2Muc2VuZF9xdWV1ZSk7CisJaWYgKHRwMSA9PSBOVUxMKSB7CisJ
CXNlbmRpbmdfc2VxID0gYXNvYy0+c2VuZGluZ19zZXE7CisJfSBlbHNlIHsKKwkJc2VuZGluZ19z
ZXEgPSB0cDEtPnJlYy5kYXRhLnRzbjsKKwl9CisKKwkvKiBDTVQgREFDIGFsZ286IGZpbmRpbmcg
b3V0IGlmIFNBQ0sgaXMgYSBtaXhlZCBTQUNLICovCisJaWYgKChhc29jLT5zY3RwX2NtdF9vbl9v
ZmYgPiAwKSAmJgorCSAgICBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY210X3VzZV9kYWMpKSB7CisJ
CVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0KSB7CisJCQlpZiAobmV0
LT5zYXdfbmV3YWNrKQorCQkJCW51bV9kZXN0c19zYWNrZWQrKzsKKwkJfQorCX0KKwlpZiAoc3Rj
Yi0+YXNvYy5wcnNjdHBfc3VwcG9ydGVkKSB7CisJCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFM
KCZub3cpOworCX0KKwlUQUlMUV9GT1JFQUNIKHRwMSwgJmFzb2MtPnNlbnRfcXVldWUsIHNjdHBf
bmV4dCkgeworCQlzdHJpa2VfZmxhZyA9IDA7CisJCWlmICh0cDEtPm5vX2ZyX2FsbG93ZWQpIHsK
KwkJCS8qIHRoaXMgb25lIGhhZCBhIHRpbWVvdXQgb3Igc29tZXRoaW5nICovCisJCQljb250aW51
ZTsKKwkJfQorCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9GUl9MT0dHSU5HX0VOQUJMRSkgeworCQkJaWYgKHRwMS0+c2VudCA8IFNDVFBfREFUQUdSQU1f
UkVTRU5EKQorCQkJCXNjdHBfbG9nX2ZyKGJpZ2dlc3RfdHNuX25ld2x5X2Fja2VkLAorCQkJCQkg
ICAgdHAxLT5yZWMuZGF0YS50c24sCisJCQkJCSAgICB0cDEtPnNlbnQsCisJCQkJCSAgICBTQ1RQ
X0ZSX0xPR19DSEVDS19TVFJJS0UpOworCQl9CisJCWlmIChTQ1RQX1RTTl9HVCh0cDEtPnJlYy5k
YXRhLnRzbiwgYmlnZ2VzdF90c25fYWNrZWQpIHx8CisJCSAgICB0cDEtPnNlbnQgPT0gU0NUUF9E
QVRBR1JBTV9VTlNFTlQpIHsKKwkJCS8qIGRvbmUgKi8KKwkJCWJyZWFrOworCQl9CisJCWlmIChz
dGNiLT5hc29jLnByc2N0cF9zdXBwb3J0ZWQpIHsKKwkJCWlmICgoUFJfU0NUUF9UVExfRU5BQkxF
RCh0cDEtPmZsYWdzKSkgJiYgdHAxLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9BQ0tFRCkgeworCQkJ
CS8qIElzIGl0IGV4cGlyZWQ/ICovCisjaWYgIShkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVm
aW5lZChfX1VzZXJzcGFjZV9fKSkKKwkJCQlpZiAodGltZXJjbXAoJm5vdywgJnRwMS0+cmVjLmRh
dGEudGltZXRvZHJvcCwgPikpIHsKKyNlbHNlCisJCQkJaWYgKHRpbWV2YWxjbXAoJm5vdywgJnRw
MS0+cmVjLmRhdGEudGltZXRvZHJvcCwgPikpIHsKKyNlbmRpZgorCQkJCQkvKiBZZXMgc28gZHJv
cCBpdCAqLworCQkJCQlpZiAodHAxLT5kYXRhICE9IE5VTEwpIHsKKwkJCQkJCSh2b2lkKXNjdHBf
cmVsZWFzZV9wcl9zY3RwX2NodW5rKHN0Y2IsIHRwMSwgMSwKKwkJCQkJCQkJCQkgU0NUUF9TT19O
T1RfTE9DS0VEKTsKKwkJCQkJfQorCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCX0KKwkJ
aWYgKFNDVFBfVFNOX0dUKHRwMS0+cmVjLmRhdGEudHNuLCBhc29jLT50aGlzX3NhY2tfaGlnaGVz
dF9nYXApICYmCisJCSAgICAgICAgICAgICAgICAhKGFjY3VtX21vdmVkICYmIGFzb2MtPmZhc3Rf
cmV0cmFuX2xvc3NfcmVjb3ZlcnkpKSB7CisJCQkvKiB3ZSBhcmUgYmV5b25kIHRoZSB0c24gaW4g
dGhlIHNhY2sgICovCisJCQlicmVhazsKKwkJfQorCQlpZiAodHAxLT5zZW50ID49IFNDVFBfREFU
QUdSQU1fUkVTRU5EKSB7CisJCQkvKiBlaXRoZXIgYSBSRVNFTkQsIEFDS0VELCBvciBNQVJLRUQg
Ki8KKwkJCS8qIHNraXAgKi8KKwkJCWlmICh0cDEtPnNlbnQgPT0gU0NUUF9GT1JXQVJEX1RTTl9T
S0lQKSB7CisJCQkJLyogQ29udGludWUgc3RyaWtpbiBGV0QtVFNOIGNodW5rcyAqLworCQkJCXRw
MS0+cmVjLmRhdGEuZndkX3Rzbl9jbnQrKzsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCS8q
CisJCSAqIENNVCA6IFNGUiBhbGdvIChjb3ZlcnMgcGFydCBvZiBEQUMgYW5kIEhUTkEgYXMgd2Vs
bCkKKwkJICovCisJCWlmICh0cDEtPndob1RvICYmIHRwMS0+d2hvVG8tPnNhd19uZXdhY2sgPT0g
MCkgeworCQkJLyoKKwkJCSAqIE5vIG5ldyBhY2tzIHdlcmUgcmVjZWlldmVkIGZvciBkYXRhIHNl
bnQgdG8gdGhpcworCQkJICogZGVzdC4gVGhlcmVmb3JlLCBhY2NvcmRpbmcgdG8gdGhlIFNGUiBh
bGdvIGZvcgorCQkJICogQ01ULCBubyBkYXRhIHNlbnQgdG8gdGhpcyBkZXN0IGNhbiBiZSBtYXJr
ZWQgZm9yCisJCQkgKiBGUiB1c2luZyB0aGlzIFNBQ0suCisJCQkgKi8KKwkJCWNvbnRpbnVlOwor
CQl9IGVsc2UgaWYgKHRwMS0+d2hvVG8gJiYKKwkJICAgICAgICAgICBTQ1RQX1RTTl9HVCh0cDEt
PnJlYy5kYXRhLnRzbiwKKwkJICAgICAgICAgICAgICAgICAgICAgICB0cDEtPndob1RvLT50aGlz
X3NhY2tfaGlnaGVzdF9uZXdhY2spICYmCisJCSAgICAgICAgICAgIShhY2N1bV9tb3ZlZCAmJiBh
c29jLT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5KSkgeworCQkJLyoKKwkJCSAqIENNVDogTmV3
IGFja3Mgd2VyZSByZWNlaWV2ZWQgZm9yIGRhdGEgc2VudCB0bworCQkJICogdGhpcyBkZXN0LiBC
dXQgbm8gbmV3IGFja3Mgd2VyZSBzZWVuIGZvciBkYXRhCisJCQkgKiBzZW50IGFmdGVyIHRwMS4g
VGhlcmVmb3JlLCBhY2NvcmRpbmcgdG8gdGhlIFNGUgorCQkJICogYWxnbyBmb3IgQ01ULCB0cDEg
Y2Fubm90IGJlIG1hcmtlZCBmb3IgRlIgdXNpbmcKKwkJCSAqIHRoaXMgU0FDSy4gVGhpcyBzdGVw
IGNvdmVycyBwYXJ0IG9mIHRoZSBEQUMgYWxnbworCQkJICogYW5kIHRoZSBIVE5BIGFsZ28gYXMg
d2VsbC4KKwkJCSAqLworCQkJY29udGludWU7CisJCX0KKwkJLyoKKwkJICogSGVyZSB3ZSBjaGVj
ayB0byBzZWUgaWYgd2Ugd2VyZSBoYXZlIGFscmVhZHkgZG9uZSBhIEZSCisJCSAqIGFuZCBpZiBz
byB3ZSBzZWUgaWYgdGhlIGJpZ2dlc3QgVFNOIHdlIHNhdyBpbiB0aGUgc2FjayBpcworCQkgKiBz
bWFsbGVyIHRoYW4gdGhlIHJlY292ZXJ5IHBvaW50LiBJZiBzbyB3ZSBkb24ndCBzdHJpa2UKKwkJ
ICogdGhlIHRzbi4uLiBvdGhlcndpc2Ugd2UgQ0FOIHN0cmlrZSB0aGUgVFNOLgorCQkgKi8KKwkJ
LyoKKwkJICogQEBAIEpSSTogQ2hlY2sgZm9yIENNVAorCQkgKiBpZiAoYWNjdW1fbW92ZWQgJiYg
YXNvYy0+ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVyeSAmJiAoc2N0cF9jbXRfb25fb2ZmID09IDAp
KSB7CisJCSAqLworCQlpZiAoYWNjdW1fbW92ZWQgJiYgYXNvYy0+ZmFzdF9yZXRyYW5fbG9zc19y
ZWNvdmVyeSkgeworCQkJLyoKKwkJCSAqIFN0cmlrZSB0aGUgVFNOIGlmIGluIGZhc3QtcmVjb3Zl
cnkgYW5kIGN1bS1hY2sKKwkJCSAqIG1vdmVkLgorCQkJICovCisJCQlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5HX0VOQUJMRSkgeworCQkJ
CXNjdHBfbG9nX2ZyKGJpZ2dlc3RfdHNuX25ld2x5X2Fja2VkLAorCQkJCQkgICAgdHAxLT5yZWMu
ZGF0YS50c24sCisJCQkJCSAgICB0cDEtPnNlbnQsCisJCQkJCSAgICBTQ1RQX0ZSX0xPR19TVFJJ
S0VfQ0hVTkspOworCQkJfQorCQkJaWYgKHRwMS0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5E
KSB7CisJCQkJdHAxLT5zZW50Kys7CisJCQl9CisJCQlpZiAoKGFzb2MtPnNjdHBfY210X29uX29m
ZiA+IDApICYmCisJCQkgICAgU0NUUF9CQVNFX1NZU0NUTChzY3RwX2NtdF91c2VfZGFjKSkgewor
CQkJCS8qCisJCQkJICogQ01UIERBQyBhbGdvcml0aG06IElmIFNBQ0sgZmxhZyBpcyBzZXQgdG8K
KwkJCQkgKiAwLCB0aGVuIGxvd2VzdF9uZXdhY2sgdGVzdCB3aWxsIG5vdCBwYXNzCisJCQkJICog
YmVjYXVzZSBpdCB3b3VsZCBoYXZlIGJlZW4gc2V0IHRvIHRoZQorCQkJCSAqIGN1bWFjayBlYXJs
aWVyLiBJZiBub3QgYWxyZWFkeSB0byBiZQorCQkJCSAqIHJ0eCdkLCBJZiBub3QgYSBtaXhlZCBz
YWNrIGFuZCBpZiB0cDEgaXMKKwkJCQkgKiBub3QgYmV0d2VlbiB0d28gc2Fja2VkIFRTTnMsIHRo
ZW4gbWFyayBieQorCQkJCSAqIG9uZSBtb3JlLgorCQkJCSAqIE5PVEUgdGhhdCB3ZSBhcmUgbWFy
a2luZyBieSBvbmUgYWRkaXRpb25hbCB0aW1lIHNpbmNlIHRoZSBTQUNLIERBQyBmbGFnIGluZGlj
YXRlcyB0aGF0CisJCQkJICogdHdvIHBhY2tldHMgaGF2ZSBiZWVuIHJlY2VpdmVkIGFmdGVyIHRo
aXMgbWlzc2luZyBUU04uCisJCQkJICovCisJCQkJaWYgKCh0cDEtPnNlbnQgPCBTQ1RQX0RBVEFH
UkFNX1JFU0VORCkgJiYgKG51bV9kZXN0c19zYWNrZWQgPT0gMSkgJiYKKwkJCQkgICAgU0NUUF9U
U05fR1QodGhpc19zYWNrX2xvd2VzdF9uZXdhY2ssIHRwMS0+cmVjLmRhdGEudHNuKSkgeworCQkJ
CQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dH
SU5HX0VOQUJMRSkgeworCQkJCQkJc2N0cF9sb2dfZnIoMTYgKyBudW1fZGVzdHNfc2Fja2VkLAor
CQkJCQkJCSAgICB0cDEtPnJlYy5kYXRhLnRzbiwKKwkJCQkJCQkgICAgdHAxLT5zZW50LAorCQkJ
CQkJCSAgICBTQ1RQX0ZSX0xPR19TVFJJS0VfQ0hVTkspOworCQkJCQl9CisJCQkJCXRwMS0+c2Vu
dCsrOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmICgodHAxLT5yZWMuZGF0YS5kb2luZ19mYXN0
X3JldHJhbnNtaXQpICYmCisJCSAgICAgICAgICAgKGFzb2MtPnNjdHBfY210X29uX29mZiA9PSAw
KSkgeworCQkJLyoKKwkJCSAqIEZvciB0aG9zZSB0aGF0IGhhdmUgZG9uZSBhIEZSIHdlIG11c3Qg
dGFrZQorCQkJICogc3BlY2lhbCBjb25zaWRlcmF0aW9uIGlmIHdlIHN0cmlrZS4gSS5lIHRoZQor
CQkJICogYmlnZ2VzdF9uZXdseV9hY2tlZCBtdXN0IGJlIGhpZ2hlciB0aGFuIHRoZQorCQkJICog
c2VuZGluZ19zZXEgYXQgdGhlIHRpbWUgd2UgZGlkIHRoZSBGUi4KKwkJCSAqLworCQkJaWYgKAor
I2lmZGVmIFNDVFBfRlJfVE9fQUxURVJOQVRFCisJCQkJLyoKKwkJCQkgKiBJZiBGUidzIGdvIHRv
IG5ldyBuZXR3b3JrcywgdGhlbiB3ZSBtdXN0IG9ubHkgZG8KKwkJCQkgKiB0aGlzIGZvciBzaW5n
bHkgaG9tZWQgYXNvYydzLiBIb3dldmVyIGlmIHRoZSBGUidzCisJCQkJICogZ28gdG8gdGhlIHNh
bWUgbmV0d29yayAoQXJtYW5kbydzIHdvcmspIHRoZW4gaXRzCisJCQkJICogb2sgdG8gRlIgbXVs
dGlwbGUgdGltZXMuCisJCQkJICovCisJCQkJKGFzb2MtPm51bW5ldHMgPCAyKQorI2Vsc2UKKwkJ
CQkoMSkKKyNlbmRpZgorCQkJCSkgeworCQkJCWlmIChTQ1RQX1RTTl9HRShiaWdnZXN0X3Rzbl9u
ZXdseV9hY2tlZCwKKwkJCQkgICAgICAgICAgICAgICAgdHAxLT5yZWMuZGF0YS5mYXN0X3JldHJh
bl90c24pKSB7CisJCQkJCS8qCisJCQkJCSAqIFN0cmlrZSB0aGUgVFNOLCBzaW5jZSB0aGlzIGFj
ayBpcworCQkJCQkgKiBiZXlvbmQgd2hlcmUgdGhpbmdzIHdlcmUgd2hlbiB3ZQorCQkJCQkgKiBk
aWQgYSBGUi4KKwkJCQkJICovCisJCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2lu
Z19sZXZlbCkgJiBTQ1RQX0ZSX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCQlzY3RwX2xvZ19mcihi
aWdnZXN0X3Rzbl9uZXdseV9hY2tlZCwKKwkJCQkJCQkgICAgdHAxLT5yZWMuZGF0YS50c24sCisJ
CQkJCQkJICAgIHRwMS0+c2VudCwKKwkJCQkJCQkgICAgU0NUUF9GUl9MT0dfU1RSSUtFX0NIVU5L
KTsKKwkJCQkJfQorCQkJCQlpZiAodHAxLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsK
KwkJCQkJCXRwMS0+c2VudCsrOworCQkJCQl9CisJCQkJCXN0cmlrZV9mbGFnID0gMTsKKwkJCQkJ
aWYgKChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPiAwKSAmJgorCQkJCQkgICAgU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2NtdF91c2VfZGFjKSkgeworCQkJCQkJLyoKKwkJCQkJCSAqIENNVCBEQUMgYWxn
b3JpdGhtOiBJZgorCQkJCQkJICogU0FDSyBmbGFnIGlzIHNldCB0byAwLAorCQkJCQkJICogdGhl
biBsb3dlc3RfbmV3YWNrIHRlc3QKKwkJCQkJCSAqIHdpbGwgbm90IHBhc3MgYmVjYXVzZSBpdAor
CQkJCQkJICogd291bGQgaGF2ZSBiZWVuIHNldCB0bworCQkJCQkJICogdGhlIGN1bWFjayBlYXJs
aWVyLiBJZgorCQkJCQkJICogbm90IGFscmVhZHkgdG8gYmUgcnR4J2QsCisJCQkJCQkgKiBJZiBu
b3QgYSBtaXhlZCBzYWNrIGFuZAorCQkJCQkJICogaWYgdHAxIGlzIG5vdCBiZXR3ZWVuIHR3bwor
CQkJCQkJICogc2Fja2VkIFRTTnMsIHRoZW4gbWFyayBieQorCQkJCQkJICogb25lIG1vcmUuCisJ
CQkJCQkgKiBOT1RFIHRoYXQgd2UgYXJlIG1hcmtpbmcgYnkgb25lIGFkZGl0aW9uYWwgdGltZSBz
aW5jZSB0aGUgU0FDSyBEQUMgZmxhZyBpbmRpY2F0ZXMgdGhhdAorCQkJCQkJICogdHdvIHBhY2tl
dHMgaGF2ZSBiZWVuIHJlY2VpdmVkIGFmdGVyIHRoaXMgbWlzc2luZyBUU04uCisJCQkJCQkgKi8K
KwkJCQkJCWlmICgodHAxLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9SRVNFTkQpICYmCisJCQkJCQkg
ICAgKG51bV9kZXN0c19zYWNrZWQgPT0gMSkgJiYKKwkJCQkJCSAgICBTQ1RQX1RTTl9HVCh0aGlz
X3NhY2tfbG93ZXN0X25ld2FjaywKKwkJCQkJCSAgICAgICAgICAgICAgICB0cDEtPnJlYy5kYXRh
LnRzbikpIHsKKwkJCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwp
ICYgU0NUUF9GUl9MT0dHSU5HX0VOQUJMRSkgeworCQkJCQkJCQlzY3RwX2xvZ19mcigzMiArIG51
bV9kZXN0c19zYWNrZWQsCisJCQkJCQkJCQkgICAgdHAxLT5yZWMuZGF0YS50c24sCisJCQkJCQkJ
CQkgICAgdHAxLT5zZW50LAorCQkJCQkJCQkJICAgIFNDVFBfRlJfTE9HX1NUUklLRV9DSFVOSyk7
CisJCQkJCQkJfQorCQkJCQkJCWlmICh0cDEtPnNlbnQgPCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkg
eworCQkJCQkJCQl0cDEtPnNlbnQrKzsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9
CisJCQl9CisJCQkvKgorCQkJICogSlJJOiBUT0RPOiByZW1vdmUgY29kZSBmb3IgSFROQSBhbGdv
LiBDTVQncworCQkJICogU0ZSIGFsZ28gY292ZXJzIEhUTkEuCisJCQkgKi8KKwkJfSBlbHNlIGlm
IChTQ1RQX1RTTl9HVCh0cDEtPnJlYy5kYXRhLnRzbiwKKwkJICAgICAgICAgICAgICAgICAgICAg
ICBiaWdnZXN0X3Rzbl9uZXdseV9hY2tlZCkpIHsKKwkJCS8qCisJCQkgKiBXZSBkb24ndCBzdHJp
a2UgdGhlc2U6IFRoaXMgaXMgdGhlICBIVE5BCisJCQkgKiBhbGdvcml0aG0gaS5lLiB3ZSBkb24n
dCBzdHJpa2UgSWYgb3VyIFRTTiBpcworCQkJICogbGFyZ2VyIHRoYW4gdGhlIEhpZ2hlc3QgVFNO
IE5ld2x5IEFja2VkLgorCQkJICovCisJCQk7CisJCX0gZWxzZSB7CisJCQkvKiBTdHJpa2UgdGhl
IFRTTiAqLworCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFND
VFBfRlJfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQlzY3RwX2xvZ19mcihiaWdnZXN0X3Rzbl9uZXds
eV9hY2tlZCwKKwkJCQkJICAgIHRwMS0+cmVjLmRhdGEudHNuLAorCQkJCQkgICAgdHAxLT5zZW50
LAorCQkJCQkgICAgU0NUUF9GUl9MT0dfU1RSSUtFX0NIVU5LKTsKKwkJCX0KKwkJCWlmICh0cDEt
PnNlbnQgPCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgeworCQkJCXRwMS0+c2VudCsrOworCQkJfQor
CQkJaWYgKChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPiAwKSAmJgorCQkJICAgIFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9jbXRfdXNlX2RhYykpIHsKKwkJCQkvKgorCQkJCSAqIENNVCBEQUMgYWxnb3Jp
dGhtOiBJZiBTQUNLIGZsYWcgaXMgc2V0IHRvCisJCQkJICogMCwgdGhlbiBsb3dlc3RfbmV3YWNr
IHRlc3Qgd2lsbCBub3QgcGFzcworCQkJCSAqIGJlY2F1c2UgaXQgd291bGQgaGF2ZSBiZWVuIHNl
dCB0byB0aGUKKwkJCQkgKiBjdW1hY2sgZWFybGllci4gSWYgbm90IGFscmVhZHkgdG8gYmUKKwkJ
CQkgKiBydHgnZCwgSWYgbm90IGEgbWl4ZWQgc2FjayBhbmQgaWYgdHAxIGlzCisJCQkJICogbm90
IGJldHdlZW4gdHdvIHNhY2tlZCBUU05zLCB0aGVuIG1hcmsgYnkKKwkJCQkgKiBvbmUgbW9yZS4K
KwkJCQkgKiBOT1RFIHRoYXQgd2UgYXJlIG1hcmtpbmcgYnkgb25lIGFkZGl0aW9uYWwgdGltZSBz
aW5jZSB0aGUgU0FDSyBEQUMgZmxhZyBpbmRpY2F0ZXMgdGhhdAorCQkJCSAqIHR3byBwYWNrZXRz
IGhhdmUgYmVlbiByZWNlaXZlZCBhZnRlciB0aGlzIG1pc3NpbmcgVFNOLgorCQkJCSAqLworCQkJ
CWlmICgodHAxLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9SRVNFTkQpICYmIChudW1fZGVzdHNfc2Fj
a2VkID09IDEpICYmCisJCQkJICAgIFNDVFBfVFNOX0dUKHRoaXNfc2Fja19sb3dlc3RfbmV3YWNr
LCB0cDEtPnJlYy5kYXRhLnRzbikpIHsKKwkJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9s
b2dnaW5nX2xldmVsKSAmIFNDVFBfRlJfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQkJCXNjdHBfbG9n
X2ZyKDQ4ICsgbnVtX2Rlc3RzX3NhY2tlZCwKKwkJCQkJCQkgICAgdHAxLT5yZWMuZGF0YS50c24s
CisJCQkJCQkJICAgIHRwMS0+c2VudCwKKwkJCQkJCQkgICAgU0NUUF9GUl9MT0dfU1RSSUtFX0NI
VU5LKTsKKwkJCQkJfQorCQkJCQl0cDEtPnNlbnQrKzsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYg
KHRwMS0+c2VudCA9PSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgeworCQkJc3RydWN0IHNjdHBfbmV0
cyAqYWx0OworCisJCQkvKiBmaXggY291bnRzIGFuZCB0aGluZ3MgKi8KKwkJCWlmIChTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0ZMSUdIVF9MT0dHSU5HX0VOQUJM
RSkgeworCQkJCXNjdHBfbWlzY19pbnRzKFNDVFBfRkxJR0hUX0xPR19ET1dOX1JTTkQsCisJCQkJ
CSAgICAgICAodHAxLT53aG9UbyA/ICh0cDEtPndob1RvLT5mbGlnaHRfc2l6ZSkgOiAwKSwKKwkJ
CQkJICAgICAgIHRwMS0+Ym9va19zaXplLAorCQkJCQkgICAgICAgKHVpbnQzMl90KSh1aW50cHRy
X3QpdHAxLT53aG9UbywKKwkJCQkJICAgICAgIHRwMS0+cmVjLmRhdGEudHNuKTsKKwkJCX0KKwkJ
CWlmICh0cDEtPndob1RvKSB7CisJCQkJdHAxLT53aG9Uby0+bmV0X2FjaysrOworCQkJCXNjdHBf
ZmxpZ2h0X3NpemVfZGVjcmVhc2UodHAxKTsKKwkJCQlpZiAoc3RjYi0+YXNvYy5jY19mdW5jdGlv
bnMuc2N0cF9jd25kX3VwZGF0ZV90c25fYWNrbm93bGVkZ2VkKSB7CisJCQkJCSgqc3RjYi0+YXNv
Yy5jY19mdW5jdGlvbnMuc2N0cF9jd25kX3VwZGF0ZV90c25fYWNrbm93bGVkZ2VkKSh0cDEtPndo
b1RvLAorCQkJCQkJCQkJCQkJICAgICB0cDEpOworCQkJCX0KKwkJCX0KKworCQkJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9HX1JXTkRfRU5BQkxFKSB7
CisJCQkJc2N0cF9sb2dfcnduZChTQ1RQX0lOQ1JFQVNFX1BFRVJfUldORCwKKwkJCQkJICAgICAg
YXNvYy0+cGVlcnNfcnduZCwgdHAxLT5zZW5kX3NpemUsIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9w
ZWVyX2NodW5rX29oKSk7CisJCQl9CisJCQkvKiBhZGQgYmFjayB0byB0aGUgcnduZCAqLworCQkJ
YXNvYy0+cGVlcnNfcnduZCArPSAodHAxLT5zZW5kX3NpemUgKyBTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfcGVlcl9jaHVua19vaCkpOworCisJCQkvKiByZW1vdmUgZnJvbSB0aGUgdG90YWwgZmxpZ2h0
ICovCisJCQlzY3RwX3RvdGFsX2ZsaWdodF9kZWNyZWFzZShzdGNiLCB0cDEpOworCisJCQlpZiAo
KHN0Y2ItPmFzb2MucHJzY3RwX3N1cHBvcnRlZCkgJiYKKwkJCSAgICAoUFJfU0NUUF9SVFhfRU5B
QkxFRCh0cDEtPmZsYWdzKSkpIHsKKwkJCQkvKiBIYXMgaXQgYmVlbiByZXRyYW5zbWl0dGVkIHR2
X3NlYyB0aW1lcz8gLSB3ZSBzdG9yZSB0aGUgcmV0cmFuIGNvdW50IHRoZXJlLiAqLworCQkJCWlm
ICh0cDEtPnNuZF9jb3VudCA+IHRwMS0+cmVjLmRhdGEudGltZXRvZHJvcC50dl9zZWMpIHsKKwkJ
CQkJLyogWWVzLCBzbyBkcm9wIGl0ICovCisJCQkJCWlmICh0cDEtPmRhdGEgIT0gTlVMTCkgewor
CQkJCQkJKHZvaWQpc2N0cF9yZWxlYXNlX3ByX3NjdHBfY2h1bmsoc3RjYiwgdHAxLCAxLAorCQkJ
CQkJCQkJCSBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJCQl9CisJCQkJCS8qIE1ha2Ugc3VyZSB0
byBmbGFnIHdlIGhhZCBhIEZSICovCisJCQkJCWlmICh0cDEtPndob1RvICE9IE5VTEwpIHsKKwkJ
CQkJCXRwMS0+d2hvVG8tPm5ldF9hY2srKzsKKwkJCQkJfQorCQkJCQljb250aW51ZTsKKwkJCQl9
CisJCQl9CisJCQkvKiBTQ1RQX1BSSU5URigiT0ssIHdlIGFyZSBub3cgcmVhZHkgdG8gRlIgdGhp
cyBndXlcbiIpOyAqLworCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVs
KSAmIFNDVFBfRlJfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQlzY3RwX2xvZ19mcih0cDEtPnJlYy5k
YXRhLnRzbiwgdHAxLT5zbmRfY291bnQsCisJCQkJCSAgICAwLCBTQ1RQX0ZSX01BUktFRCk7CisJ
CQl9CisJCQlpZiAoc3RyaWtlX2ZsYWcpIHsKKwkJCQkvKiBUaGlzIGlzIGEgc3Vic2VxdWVudCBG
UiAqLworCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRtdWx0ZmFzdHJldHJhbnMpOworCQkJ
fQorCQkJc2N0cF91Y291bnRfaW5jcihzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCk7
CisJCQlpZiAoYXNvYy0+c2N0cF9jbXRfb25fb2ZmID4gMCkgeworCQkJCS8qCisJCQkJICogQ01U
OiBVc2luZyBSVFhfU1NUSFJFU0ggcG9saWN5IGZvciBDTVQuCisJCQkJICogSWYgQ01UIGlzIGJl
aW5nIHVzZWQsIHRoZW4gcGljayBkZXN0IHdpdGgKKwkJCQkgKiBsYXJnZXN0IHNzdGhyZXNoIGZv
ciBhbnkgcmV0cmFuc21pc3Npb24uCisJCQkJICovCisJCQkJdHAxLT5ub19mcl9hbGxvd2VkID0g
MTsKKwkJCQlhbHQgPSB0cDEtPndob1RvOworCQkJCS8qc2FfaWdub3JlIE5PX05VTExfQ0hLKi8K
KwkJCQlpZiAoYXNvYy0+c2N0cF9jbXRfcGYgPiAwKSB7CisJCQkJCS8qIEpSUyA1LzE4LzA3IC0g
SWYgQ01UIFBGIGlzIG9uLCB1c2UgdGhlIFBGIHZlcnNpb24gb2YgZmluZF9hbHRfbmV0KCkgKi8K
KwkJCQkJYWx0ID0gc2N0cF9maW5kX2FsdGVybmF0ZV9uZXQoc3RjYiwgYWx0LCAyKTsKKwkJCQl9
IGVsc2UgeworCQkJCQkvKiBKUlMgNS8xOC8wNyAtIElmIG9ubHkgQ01UIGlzIG9uLCB1c2UgdGhl
IENNVCB2ZXJzaW9uIG9mIGZpbmRfYWx0X25ldCgpICovCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLypzYV9pZ25vcmUgTk9fTlVMTF9DSEsqLworCQkJCQlhbHQgPSBz
Y3RwX2ZpbmRfYWx0ZXJuYXRlX25ldChzdGNiLCBhbHQsIDEpOworCQkJCX0KKwkJCQlpZiAoYWx0
ID09IE5VTEwpIHsKKwkJCQkJYWx0ID0gdHAxLT53aG9UbzsKKwkJCQl9CisJCQkJLyoKKwkJCQkg
KiBDVUN2MjogSWYgYSBkaWZmZXJlbnQgZGVzdCBpcyBwaWNrZWQgZm9yCisJCQkJICogdGhlIHJl
dHJhbnNtaXNzaW9uLCB0aGVuIG5ldworCQkJCSAqIChydHgtKXBzZXVkb19jdW1hY2sgbmVlZHMg
dG8gYmUgdHJhY2tlZAorCQkJCSAqIGZvciBvcmlnIGRlc3QuIExldCBDVUN2MiB0cmFjayBuZXcg
KHJ0eC0pCisJCQkJICogcHNldWRvLWN1bWFjayBhbHdheXMuCisJCQkJICovCisJCQkJaWYgKHRw
MS0+d2hvVG8pIHsKKwkJCQkJdHAxLT53aG9Uby0+ZmluZF9wc2V1ZG9fY3VtYWNrID0gMTsKKwkJ
CQkJdHAxLT53aG9Uby0+ZmluZF9ydHhfcHNldWRvX2N1bWFjayA9IDE7CisJCQkJfQorCQkJfSBl
bHNlIHsvKiBDTVQgaXMgT0ZGICovCisjaWZkZWYgU0NUUF9GUl9UT19BTFRFUk5BVEUKKwkJCQkv
KiBDYW4gd2UgZmluZCBhbiBhbHRlcm5hdGU/ICovCisJCQkJYWx0ID0gc2N0cF9maW5kX2FsdGVy
bmF0ZV9uZXQoc3RjYiwgdHAxLT53aG9UbywgMCk7CisjZWxzZQorCQkJCS8qCisJCQkJICogZGVm
YXVsdCBiZWhhdmlvciBpcyB0byBOT1QgcmV0cmFuc21pdAorCQkJCSAqIEZSJ3MgdG8gYW4gYWx0
ZXJuYXRlLiBBcm1hbmRvIENhcm8ncworCQkJCSAqIHBhcGVyIGRldGFpbHMgd2h5LgorCQkJCSAq
LworCQkJCWFsdCA9IHRwMS0+d2hvVG87CisjZW5kaWYKKwkJCX0KKworCQkJdHAxLT5yZWMuZGF0
YS5kb2luZ19mYXN0X3JldHJhbnNtaXQgPSAxOworCQkJdG90X3JldHJhbnMrKzsKKwkJCS8qIG1h
cmsgdGhlIHNlbmRpbmcgc2VxIGZvciBwb3NzaWJsZSBzdWJzZXF1ZW50IEZSJ3MgKi8KKwkJCS8q
CisJCQkgKiBTQ1RQX1BSSU5URigiTWFya2luZyBUU04gZm9yIEZSIG5ldyB2YWx1ZSAleFxuIiwK
KwkJCSAqICh1aW50MzJfdCl0cGktPnJlYy5kYXRhLnRzbik7CisJCQkgKi8KKwkJCWlmIChUQUlM
UV9FTVBUWSgmYXNvYy0+c2VuZF9xdWV1ZSkpIHsKKwkJCQkvKgorCQkJCSAqIElmIHRoZSBxdWV1
ZSBvZiBzZW5kIGlzIGVtcHR5IHRoZW4gaXRzCisJCQkJICogdGhlIG5leHQgc2VxdWVuY2UgbnVt
YmVyIHRoYXQgd2lsbCBiZQorCQkJCSAqIGFzc2lnbmVkIHNvIHdlIHN1YnRyYWN0IG9uZSBmcm9t
IHRoaXMgdG8KKwkJCQkgKiBnZXQgdGhlIG9uZSB3ZSBsYXN0IHNlbnQuCisJCQkJICovCisJCQkJ
dHAxLT5yZWMuZGF0YS5mYXN0X3JldHJhbl90c24gPSBzZW5kaW5nX3NlcTsKKwkJCX0gZWxzZSB7
CisJCQkJLyoKKwkJCQkgKiBJZiB0aGVyZSBhcmUgY2h1bmtzIG9uIHRoZSBzZW5kIHF1ZXVlCisJ
CQkJICogKHVuc2VudCBkYXRhIHRoYXQgaGFzIG1hZGUgaXQgZnJvbSB0aGUKKwkJCQkgKiBzdHJl
YW0gcXVldWVzIGJ1dCBub3Qgb3V0IHRoZSBkb29yLCB3ZQorCQkJCSAqIHRha2UgdGhlIGZpcnN0
IG9uZSAod2hpY2ggd2lsbCBoYXZlIHRoZQorCQkJCSAqIGxvd2VzdCBUU04pIGFuZCBzdWJ0cmFj
dCBvbmUgdG8gZ2V0IHRoZQorCQkJCSAqIG9uZSB3ZSBsYXN0IHNlbnQuCisJCQkJICovCisJCQkJ
c3RydWN0IHNjdHBfdG1pdF9jaHVuayAqdHR0OworCisJCQkJdHR0ID0gVEFJTFFfRklSU1QoJmFz
b2MtPnNlbmRfcXVldWUpOworCQkJCXRwMS0+cmVjLmRhdGEuZmFzdF9yZXRyYW5fdHNuID0KKwkJ
CQkJdHR0LT5yZWMuZGF0YS50c247CisJCQl9CisKKwkJCWlmICh0cDEtPmRvX3J0dCkgeworCQkJ
CS8qCisJCQkJICogdGhpcyBndXkgaGFkIGEgUlRPIGNhbGN1bGF0aW9uIHBlbmRpbmcgb24KKwkJ
CQkgKiBpdCwgY2FuY2VsIGl0CisJCQkJICovCisJCQkJaWYgKCh0cDEtPndob1RvICE9IE5VTEwp
ICYmCisJCQkJICAgICh0cDEtPndob1RvLT5ydG9fbmVlZGVkID09IDApKSB7CisJCQkJCXRwMS0+
d2hvVG8tPnJ0b19uZWVkZWQgPSAxOworCQkJCX0KKwkJCQl0cDEtPmRvX3J0dCA9IDA7CisJCQl9
CisJCQlpZiAoYWx0ICE9IHRwMS0+d2hvVG8pIHsKKwkJCQkvKiB5ZXMsIHRoZXJlIGlzIGFuIGFs
dGVybmF0ZS4gKi8KKwkJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIodHAxLT53aG9Ubyk7CisJCQkJ
LypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KKwkJCQl0cDEtPndob1RvID0gYWx0OworCQkJCWF0
b21pY19hZGRfaW50KCZhbHQtPnJlZl9jb3VudCwgMSk7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0
cnVjdCBzY3RwX3RtaXRfY2h1bmsgKgorc2N0cF90cnlfYWR2YW5jZV9wZWVyX2Fja19wb2ludChz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2Mp
Cit7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqdHAxLCAqdHAyLCAqYV9hZHYgPSBOVUxMOwor
CXN0cnVjdCB0aW1ldmFsIG5vdzsKKwlpbnQgbm93X2ZpbGxlZCA9IDA7CisKKwlpZiAoYXNvYy0+
cHJzY3RwX3N1cHBvcnRlZCA9PSAwKSB7CisJCXJldHVybiAoTlVMTCk7CisJfQorCVRBSUxRX0ZP
UkVBQ0hfU0FGRSh0cDEsICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQsIHRwMikgeworCQlp
ZiAodHAxLT5zZW50ICE9IFNDVFBfRk9SV0FSRF9UU05fU0tJUCAmJgorCQkgICAgdHAxLT5zZW50
ICE9IFNDVFBfREFUQUdSQU1fUkVTRU5EICYmCisJCSAgICB0cDEtPnNlbnQgIT0gU0NUUF9EQVRB
R1JBTV9OUl9BQ0tFRCkgeworCQkJLyogbm8gY2hhbmNlIHRvIGFkdmFuY2UsIG91dCBvZiBoZXJl
ICovCisJCQlicmVhazsKKwkJfQorCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdf
bGV2ZWwpICYgU0NUUF9MT0dfVFJZX0FEVkFOQ0UpIHsKKwkJCWlmICgodHAxLT5zZW50ID09IFND
VFBfRk9SV0FSRF9UU05fU0tJUCkgfHwKKwkJCSAgICAodHAxLT5zZW50ID09IFNDVFBfREFUQUdS
QU1fTlJfQUNLRUQpKSB7CisJCQkJc2N0cF9taXNjX2ludHMoU0NUUF9GV0RfVFNOX0NIRUNLLAor
CQkJCQkgICAgICAgYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQsCisJCQkJCSAgICAgICB0
cDEtPnJlYy5kYXRhLnRzbiwgMCwgMCk7CisJCQl9CisJCX0KKwkJaWYgKCFQUl9TQ1RQX0VOQUJM
RUQodHAxLT5mbGFncykpIHsKKwkJCS8qCisJCQkgKiBXZSBjYW4ndCBmd2QtdHNuIHBhc3QgYW55
IHRoYXQgYXJlIHJlbGlhYmxlIGFrYQorCQkJICogcmV0cmFuc21pdHRlZCB1bnRpbCB0aGUgYXNv
YyBmYWlscy4KKwkJCSAqLworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFub3dfZmlsbGVkKSB7CisJ
CQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmbm93KTsKKwkJCW5vd19maWxsZWQgPSAxOwor
CQl9CisJCS8qCisJCSAqIG5vdyB3ZSBnb3QgYSBjaHVuayB3aGljaCBpcyBtYXJrZWQgZm9yIGFu
b3RoZXIKKwkJICogcmV0cmFuc21pc3Npb24gdG8gYSBQUi1zdHJlYW0gYnV0IGhhcyBydW4gb3V0
IGl0cyBjaGFuY2VzCisJCSAqIGFscmVhZHkgbWF5YmUgT1IgaGFzIGJlZW4gbWFya2VkIHRvIHNr
aXAgbm93LiBDYW4gd2Ugc2tpcAorCQkgKiBpdCBpZiBpdHMgYSByZXNlbmQ/CisJCSAqLworCQlp
ZiAodHAxLT5zZW50ID09IFNDVFBfREFUQUdSQU1fUkVTRU5EICYmCisJCSAgICAoUFJfU0NUUF9U
VExfRU5BQkxFRCh0cDEtPmZsYWdzKSkpIHsKKwkJCS8qCisJCQkgKiBOb3cgaXMgdGhpcyBvbmUg
bWFya2VkIGZvciByZXNlbmQgYW5kIGl0cyB0aW1lIGlzCisJCQkgKiBub3cgdXA/CisJCQkgKi8K
KyNpZiAhKGRlZmluZWQoX19GcmVlQlNEX18pICAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkK
KwkJCWlmICh0aW1lcmNtcCgmbm93LCAmdHAxLT5yZWMuZGF0YS50aW1ldG9kcm9wLCA+KSkgewor
I2Vsc2UKKwkJCWlmICh0aW1ldmFsY21wKCZub3csICZ0cDEtPnJlYy5kYXRhLnRpbWV0b2Ryb3As
ID4pKSB7CisjZW5kaWYKKwkJCQkvKiBZZXMgc28gZHJvcCBpdCAqLworCQkJCWlmICh0cDEtPmRh
dGEpIHsKKwkJCQkJKHZvaWQpc2N0cF9yZWxlYXNlX3ByX3NjdHBfY2h1bmsoc3RjYiwgdHAxLAor
CQkJCQkgICAgMSwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJ
CS8qCisJCQkJICogTm8sIHdlIGFyZSBkb25lIHdoZW4gaGl0IG9uZSBmb3IgcmVzZW5kCisJCQkJ
ICogd2hvcyB0aW1lIGFzIG5vdCBleHBpcmVkLgorCQkJCSAqLworCQkJCWJyZWFrOworCQkJfQor
CQl9CisJCS8qCisJCSAqIE9rIG5vdyBpZiB0aGlzIGNodW5rIGlzIG1hcmtlZCB0byBkcm9wIGl0
IHdlIGNhbiBjbGVhbiB1cAorCQkgKiB0aGUgY2h1bmssIGFkdmFuY2Ugb3VyIHBlZXIgYWNrIHBv
aW50IGFuZCB3ZSBjYW4gY2hlY2sKKwkJICogdGhlIG5leHQgY2h1bmsuCisJCSAqLworCQlpZiAo
KHRwMS0+c2VudCA9PSBTQ1RQX0ZPUldBUkRfVFNOX1NLSVApIHx8CisJCSAgICAodHAxLT5zZW50
ID09IFNDVFBfREFUQUdSQU1fTlJfQUNLRUQpKSB7CisJCQkvKiBhZHZhbmNlIFBlZXJBY2tQb2lu
dCBnb2VzIGZvcndhcmQgKi8KKwkJCWlmIChTQ1RQX1RTTl9HVCh0cDEtPnJlYy5kYXRhLnRzbiwg
YXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQpKSB7CisJCQkJYXNvYy0+YWR2YW5jZWRfcGVl
cl9hY2tfcG9pbnQgPSB0cDEtPnJlYy5kYXRhLnRzbjsKKwkJCQlhX2FkdiA9IHRwMTsKKwkJCX0g
ZWxzZSBpZiAodHAxLT5yZWMuZGF0YS50c24gPT0gYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9p
bnQpIHsKKwkJCQkvKiBObyB1cGRhdGUgYnV0IHdlIGRvIHNhdmUgdGhlIGNoayAqLworCQkJCWFf
YWR2ID0gdHAxOworCQkJfQorCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIElmIGl0IGlzIHN0aWxs
IGluIFJFU0VORCB3ZSBjYW4gYWR2YW5jZSBubworCQkJICogZnVydGhlcgorCQkJICovCisJCQli
cmVhazsKKwkJfQorCX0KKwlyZXR1cm4gKGFfYWR2KTsKK30KKworc3RhdGljIGludAorc2N0cF9m
c19hdWRpdChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKK3sKKwlzdHJ1Y3Qgc2N0cF90
bWl0X2NodW5rICpjaGs7CisJaW50IGluZmxpZ2h0ID0gMCwgcmVzZW5kID0gMCwgaW5iZXR3ZWVu
ID0gMCwgYWNrZWQgPSAwLCBhYm92ZSA9IDA7CisJaW50IHJldDsKKyNpZm5kZWYgSU5WQVJJQU5U
UworCWludCBlbnRyeV9mbGlnaHQsIGVudHJ5X2NudDsKKyNlbmRpZgorCisJcmV0ID0gMDsKKyNp
Zm5kZWYgSU5WQVJJQU5UUworCWVudHJ5X2ZsaWdodCA9IGFzb2MtPnRvdGFsX2ZsaWdodDsKKwll
bnRyeV9jbnQgPSBhc29jLT50b3RhbF9mbGlnaHRfY291bnQ7CisjZW5kaWYKKwlpZiAoYXNvYy0+
cHJfc2N0cF9jbnQgPj0gYXNvYy0+c2VudF9xdWV1ZV9jbnQpCisJCXJldHVybiAoMCk7CisKKwlU
QUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPnNlbnRfcXVldWUsIHNjdHBfbmV4dCkgeworCQlpZiAo
Y2hrLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKKwkJCVNDVFBfUFJJTlRGKCJDaGsg
VFNOOiAldSBzaXplOiAlZCBpbmZsaWdodCBjbnQ6ICVkXG4iLAorCQkJICAgICAgICAgICAgY2hr
LT5yZWMuZGF0YS50c24sCisJCQkgICAgICAgICAgICBjaGstPnNlbmRfc2l6ZSwKKwkJCSAgICAg
ICAgICAgIGNoay0+c25kX2NvdW50KTsKKwkJCWluZmxpZ2h0Kys7CisJCX0gZWxzZSBpZiAoY2hr
LT5zZW50ID09IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7CisJCQlyZXNlbmQrKzsKKwkJfSBlbHNl
IGlmIChjaGstPnNlbnQgPCBTQ1RQX0RBVEFHUkFNX0FDS0VEKSB7CisJCQlpbmJldHdlZW4rKzsK
KwkJfSBlbHNlIGlmIChjaGstPnNlbnQgPiBTQ1RQX0RBVEFHUkFNX0FDS0VEKSB7CisJCQlhYm92
ZSsrOworCQl9IGVsc2UgeworCQkJYWNrZWQrKzsKKwkJfQorCX0KKworCWlmICgoaW5mbGlnaHQg
PiAwKSB8fCAoaW5iZXR3ZWVuID4gMCkpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCXBhbmljKCJG
bGlnaHQgc2l6ZS1leHByZXNzIGluY29ycmVjdD8gXG4iKTsKKyNlbHNlCisJCVNDVFBfUFJJTlRG
KCJhc29jLT50b3RhbF9mbGlnaHQ6ICVkIGNudDogJWRcbiIsCisJCSAgICAgICAgICAgIGVudHJ5
X2ZsaWdodCwgZW50cnlfY250KTsKKworCQlTQ1RQX1BSSU5URigiRmxpZ2h0IHNpemUtZXhwcmVz
cyBpbmNvcnJlY3QgRjogJWQgSTogJWQgUjogJWQgQWI6ICVkIEFDSzogJWRcbiIsCisJCQkgICAg
aW5mbGlnaHQsIGluYmV0d2VlbiwgcmVzZW5kLCBhYm92ZSwgYWNrZWQpOworCQlyZXQgPSAxOwor
I2VuZGlmCisJfQorCXJldHVybiAocmV0KTsKK30KKworc3RhdGljIHZvaWQKK3NjdHBfd2luZG93
X3Byb2JlX3JlY292ZXJ5KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqdHAxKQoreworCXRwMS0+d2luZG93
X3Byb2JlID0gMDsKKwlpZiAoKHRwMS0+c2VudCA+PSBTQ1RQX0RBVEFHUkFNX0FDS0VEKSB8fCAo
dHAxLT5kYXRhID09IE5VTEwpKSB7CisJCS8qIFRTTidzIHNraXBwZWQgd2UgZG8gTk9UIG1vdmUg
YmFjay4gKi8KKwkJc2N0cF9taXNjX2ludHMoU0NUUF9GTElHSFRfTE9HX0RXTl9XUF9GV0QsCisJ
CQkgICAgICAgdHAxLT53aG9UbyA/IHRwMS0+d2hvVG8tPmZsaWdodF9zaXplIDogMCwKKwkJCSAg
ICAgICB0cDEtPmJvb2tfc2l6ZSwKKwkJCSAgICAgICAodWludDMyX3QpKHVpbnRwdHJfdCl0cDEt
Pndob1RvLAorCQkJICAgICAgIHRwMS0+cmVjLmRhdGEudHNuKTsKKwkJcmV0dXJuOworCX0KKwkv
KiBGaXJzdCBzZXR1cCB0aGlzIGJ5IHNocmlua2luZyBmbGlnaHQgKi8KKwlpZiAoc3RjYi0+YXNv
Yy5jY19mdW5jdGlvbnMuc2N0cF9jd25kX3VwZGF0ZV90c25fYWNrbm93bGVkZ2VkKSB7CisJCSgq
c3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9jd25kX3VwZGF0ZV90c25fYWNrbm93bGVkZ2Vk
KSh0cDEtPndob1RvLAorCQkJCQkJCQkJICAgICB0cDEpOworCX0KKwlzY3RwX2ZsaWdodF9zaXpl
X2RlY3JlYXNlKHRwMSk7CisJc2N0cF90b3RhbF9mbGlnaHRfZGVjcmVhc2Uoc3RjYiwgdHAxKTsK
KwkvKiBOb3cgbWFyayBmb3IgcmVzZW5kICovCisJdHAxLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9S
RVNFTkQ7CisJc2N0cF91Y291bnRfaW5jcihhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOwor
CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRkxJR0hU
X0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBfbWlzY19pbnRzKFNDVFBfRkxJR0hUX0xPR19ET1dO
X1dQLAorCQkJICAgICAgIHRwMS0+d2hvVG8tPmZsaWdodF9zaXplLAorCQkJICAgICAgIHRwMS0+
Ym9va19zaXplLAorCQkJICAgICAgICh1aW50MzJfdCkodWludHB0cl90KXRwMS0+d2hvVG8sCisJ
CQkgICAgICAgdHAxLT5yZWMuZGF0YS50c24pOworCX0KK30KKwordm9pZAorc2N0cF9leHByZXNz
X2hhbmRsZV9zYWNrKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDMyX3QgY3VtYWNrLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHJ3bmQsIGludCAqYWJvcnRfbm93LCBpbnQg
ZWNuZV9zZWVuKQoreworCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKwlzdHJ1Y3Qgc2N0cF9hc3Nv
Y2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICp0cDEsICp0cDI7CisJdWlu
dDMyX3Qgb2xkX3J3bmQ7CisJaW50IHdpbl9wcm9iZV9yZWNvdmVyeSA9IDA7CisJaW50IHdpbl9w
cm9iZV9yZWNvdmVyZWQgPSAwOworCWludCBqLCBkb25lX29uY2UgPSAwOworCWludCBydG9fb2sg
PSAxOworCXVpbnQzMl90IHNlbmRfczsKKworCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9n
Z2luZ19sZXZlbCkgJiBTQ1RQX0xPR19TQUNLX0FSUklWQUxTX0VOQUJMRSkgeworCQlzY3RwX21p
c2NfaW50cyhTQ1RQX1NBQ0tfTE9HX0VYUFJFU1MsIGN1bWFjaywKKwkJICAgICAgICAgICAgICAg
cnduZCwgc3RjYi0+YXNvYy5sYXN0X2Fja2VkX3NlcSwgc3RjYi0+YXNvYy5wZWVyc19yd25kKTsK
Kwl9CisJU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7CisjaWZkZWYgU0NUUF9BU09DTE9HX09G
X1RTTlMKKwlzdGNiLT5hc29jLmN1bWFja19sb2dbc3RjYi0+YXNvYy5jdW1hY2tfbG9nX2F0XSA9
IGN1bWFjazsKKwlzdGNiLT5hc29jLmN1bWFja19sb2dfYXQrKzsKKwlpZiAoc3RjYi0+YXNvYy5j
dW1hY2tfbG9nX2F0ID4gU0NUUF9UU05fTE9HX1NJWkUpIHsKKwkJc3RjYi0+YXNvYy5jdW1hY2tf
bG9nX2F0ID0gMDsKKwl9CisjZW5kaWYKKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJb2xkX3J3bmQg
PSBhc29jLT5wZWVyc19yd25kOworCWlmIChTQ1RQX1RTTl9HVChhc29jLT5sYXN0X2Fja2VkX3Nl
cSwgY3VtYWNrKSkgeworCQkvKiBvbGQgYWNrICovCisJCXJldHVybjsKKwl9IGVsc2UgaWYgKGFz
b2MtPmxhc3RfYWNrZWRfc2VxID09IGN1bWFjaykgeworCQkvKiBXaW5kb3cgdXBkYXRlIHNhY2sg
Ki8KKwkJYXNvYy0+cGVlcnNfcnduZCA9IHNjdHBfc2JzcGFjZV9zdWIocnduZCwKKwkJCQkJCSAg
ICAodWludDMyX3QpIChhc29jLT50b3RhbF9mbGlnaHQgKyAoYXNvYy0+dG90YWxfZmxpZ2h0X2Nv
dW50ICogU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BlZXJfY2h1bmtfb2gpKSkpOworCQlpZiAoYXNv
Yy0+cGVlcnNfcnduZCA8IHN0Y2ItPnNjdHBfZXAtPnNjdHBfZXAuc2N0cF9zd3Nfc2VuZGVyKSB7
CisJCQkvKiBTV1Mgc2VuZGVyIHNpZGUgZW5nYWdlcyAqLworCQkJYXNvYy0+cGVlcnNfcnduZCA9
IDA7CisJCX0KKwkJaWYgKGFzb2MtPnBlZXJzX3J3bmQgPiBvbGRfcnduZCkgeworCQkJZ290byBh
Z2FpbjsKKwkJfQorCQlyZXR1cm47CisJfQorCisJLyogRmlyc3Qgc2V0dXAgZm9yIENDIHN0dWZm
ICovCisJVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKKwkJaWYg
KFNDVFBfVFNOX0dUKGN1bWFjaywgbmV0LT5jd3Jfd2luZG93X3RzbikpIHsKKwkJCS8qIERyYWcg
YWxvbmcgdGhlIHdpbmRvd190c24gZm9yIGN3cidzICovCisJCQluZXQtPmN3cl93aW5kb3dfdHNu
ID0gY3VtYWNrOworCQl9CisJCW5ldC0+cHJldl9jd25kID0gbmV0LT5jd25kOworCQluZXQtPm5l
dF9hY2sgPSAwOworCQluZXQtPm5ldF9hY2syID0gMDsKKworCQkvKgorCQkgKiBDTVQ6IFJlc2V0
IENVQyBhbmQgRmFzdCByZWNvdmVyeSBhbGdvIHZhcmlhYmxlcyBiZWZvcmUKKwkJICogU0FDSyBw
cm9jZXNzaW5nCisJCSAqLworCQluZXQtPm5ld19wc2V1ZG9fY3VtYWNrID0gMDsKKwkJbmV0LT53
aWxsX2V4aXRfZmFzdF9yZWNvdmVyeSA9IDA7CisJCWlmIChzdGNiLT5hc29jLmNjX2Z1bmN0aW9u
cy5zY3RwX2N3bmRfcHJlcGFyZV9uZXRfZm9yX3NhY2spIHsKKwkJCSgqc3RjYi0+YXNvYy5jY19m
dW5jdGlvbnMuc2N0cF9jd25kX3ByZXBhcmVfbmV0X2Zvcl9zYWNrKShzdGNiLCBuZXQpOworCQl9
CisJfQorCWlmICghVEFJTFFfRU1QVFkoJmFzb2MtPnNlbnRfcXVldWUpKSB7CisJCXRwMSA9IFRB
SUxRX0xBU1QoJmFzb2MtPnNlbnRfcXVldWUsCisJCQkJIHNjdHBjaHVua19saXN0aGVhZCk7CisJ
CXNlbmRfcyA9IHRwMS0+cmVjLmRhdGEudHNuICsgMTsKKwl9IGVsc2UgeworCQlzZW5kX3MgPSBh
c29jLT5zZW5kaW5nX3NlcTsKKwl9CisJaWYgKFNDVFBfVFNOX0dFKGN1bWFjaywgc2VuZF9zKSkg
eworCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOworCQljaGFyIG1zZ1tTQ1RQX0RJQUdfSU5GT19MRU5d
OworCisJCSphYm9ydF9ub3cgPSAxOworCQkvKiBYWFggKi8KKwkJU0NUUF9TTlBSSU5URihtc2cs
IHNpemVvZihtc2cpLAorCQkgICAgICAgICAgICAgICJDdW0gYWNrICU4Ljh4IGdyZWF0ZXIgb3Ig
ZXF1YWwgdGhhbiBUU04gJTguOHgiLAorCQkgICAgICAgICAgICAgIGN1bWFjaywgc2VuZF9zKTsK
KwkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RPQ09MX1ZJT0xB
VElPTiwgbXNnKTsKKwkJc3RjYi0+c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9N
X1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfMjU7CisJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24o
c3RjYi0+c2N0cF9lcCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQlyZXR1
cm47CisJfQorCWFzb2MtPnRoaXNfc2Fja19oaWdoZXN0X2dhcCA9IGN1bWFjazsKKwlpZiAoU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9USFJFU0hPTERfTE9HR0lO
RykgeworCQlzY3RwX21pc2NfaW50cyhTQ1RQX1RIUkVTSE9MRF9DTEVBUiwKKwkJCSAgICAgICBz
dGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQsCisJCQkgICAgICAgMCwKKwkJCSAgICAgICBT
Q1RQX0ZST01fU0NUUF9JTkRBVEEsCisJCQkgICAgICAgX19MSU5FX18pOworCX0KKwlzdGNiLT5h
c29jLm92ZXJhbGxfZXJyb3JfY291bnQgPSAwOworCWlmIChTQ1RQX1RTTl9HVChjdW1hY2ssIGFz
b2MtPmxhc3RfYWNrZWRfc2VxKSkgeworCQkvKiBwcm9jZXNzIHRoZSBuZXcgY29uc2VjdXRpdmUg
VFNOIGZpcnN0ICovCisJCVRBSUxRX0ZPUkVBQ0hfU0FGRSh0cDEsICZhc29jLT5zZW50X3F1ZXVl
LCBzY3RwX25leHQsIHRwMikgeworCQkJaWYgKFNDVFBfVFNOX0dFKGN1bWFjaywgdHAxLT5yZWMu
ZGF0YS50c24pKSB7CisJCQkJaWYgKHRwMS0+c2VudCA9PSBTQ1RQX0RBVEFHUkFNX1VOU0VOVCkg
eworCQkJCQlTQ1RQX1BSSU5URigiV2FybmluZywgYW4gdW5zZW50IGlzIG5vdyBhY2tlZD9cbiIp
OworCQkJCX0KKwkJCQlpZiAodHAxLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9BQ0tFRCkgeworCQkJ
CQkvKgorCQkJCQkgKiBJZiBpdCBpcyBsZXNzIHRoYW4gQUNLRUQsIGl0IGlzCisJCQkJCSAqIG5v
dyBuby1sb25nZXIgaW4gZmxpZ2h0LiBIaWdoZXIKKwkJCQkJICogdmFsdWVzIG1heSBvY2N1ciBk
dXJpbmcgbWFya2luZworCQkJCQkgKi8KKwkJCQkJaWYgKHRwMS0+c2VudCA8IFNDVFBfREFUQUdS
QU1fUkVTRU5EKSB7CisJCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2
ZWwpICYgU0NUUF9GTElHSFRfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQkJCQlzY3RwX21pc2NfaW50
cyhTQ1RQX0ZMSUdIVF9MT0dfRE9XTl9DQSwKKwkJCQkJCQkJICAgICAgIHRwMS0+d2hvVG8tPmZs
aWdodF9zaXplLAorCQkJCQkJCQkgICAgICAgdHAxLT5ib29rX3NpemUsCisJCQkJCQkJCSAgICAg
ICAodWludDMyX3QpKHVpbnRwdHJfdCl0cDEtPndob1RvLAorCQkJCQkJCQkgICAgICAgdHAxLT5y
ZWMuZGF0YS50c24pOworCQkJCQkJfQorCQkJCQkJc2N0cF9mbGlnaHRfc2l6ZV9kZWNyZWFzZSh0
cDEpOworCQkJCQkJaWYgKHN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF91cGRhdGVf
dHNuX2Fja25vd2xlZGdlZCkgeworCQkJCQkJCSgqc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0
cF9jd25kX3VwZGF0ZV90c25fYWNrbm93bGVkZ2VkKSh0cDEtPndob1RvLAorCQkJCQkJCQkJCQkJ
CQkgICAgIHRwMSk7CisJCQkJCQl9CisJCQkJCQkvKiBzYV9pZ25vcmUgTk9fTlVMTF9DSEsgKi8K
KwkJCQkJCXNjdHBfdG90YWxfZmxpZ2h0X2RlY3JlYXNlKHN0Y2IsIHRwMSk7CisJCQkJCX0KKwkJ
CQkJdHAxLT53aG9Uby0+bmV0X2FjayArPSB0cDEtPnNlbmRfc2l6ZTsKKwkJCQkJaWYgKHRwMS0+
c25kX2NvdW50IDwgMikgeworCQkJCQkJLyoKKwkJCQkJCSAqIFRydWUgbm9uLXJldHJhbnNtaXR0
ZWQKKwkJCQkJCSAqIGNodW5rCisJCQkJCQkgKi8KKwkJCQkJCXRwMS0+d2hvVG8tPm5ldF9hY2sy
ICs9CisJCQkJCQkJdHAxLT5zZW5kX3NpemU7CisKKwkJCQkJCS8qIHVwZGF0ZSBSVE8gdG9vPyAq
LworCQkJCQkJaWYgKHRwMS0+ZG9fcnR0KSB7CisJCQkJCQkJaWYgKHJ0b19vayAmJgorCQkJCQkJ
CSAgICBzY3RwX2NhbGN1bGF0ZV9ydG8oc3RjYiwKKwkJCQkJCQkJCSAgICAgICAmc3RjYi0+YXNv
YywKKwkJCQkJCQkJCSAgICAgICB0cDEtPndob1RvLAorCQkJCQkJCQkJICAgICAgICZ0cDEtPnNl
bnRfcmN2X3RpbWUsCisJCQkJCQkJCQkgICAgICAgU0NUUF9SVFRfRlJPTV9EQVRBKSkgeworCQkJ
CQkJCQlydG9fb2sgPSAwOworCQkJCQkJCX0KKwkJCQkJCQlpZiAodHAxLT53aG9Uby0+cnRvX25l
ZWRlZCA9PSAwKSB7CisJCQkJCQkJCXRwMS0+d2hvVG8tPnJ0b19uZWVkZWQgPSAxOworCQkJCQkJ
CX0KKwkJCQkJCQl0cDEtPmRvX3J0dCA9IDA7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJLyoKKwkJ
CQkJICogQ01UOiBDVUN2MiBhbGdvcml0aG0uIEZyb20gdGhlCisJCQkJCSAqIGN1bWFjaydkIFRT
TnMsIGZvciBlYWNoIFRTTiBiZWluZworCQkJCQkgKiBhY2tlZCBmb3IgdGhlIGZpcnN0IHRpbWUs
IHNldCB0aGUKKwkJCQkJICogZm9sbG93aW5nIHZhcmlhYmxlcyBmb3IgdGhlCisJCQkJCSAqIGNv
cnJlc3AgZGVzdGluYXRpb24uCisJCQkJCSAqIG5ld19wc2V1ZG9fY3VtYWNrIHdpbGwgdHJpZ2dl
ciBhCisJCQkJCSAqIGN3bmQgdXBkYXRlLgorCQkJCQkgKiBmaW5kXyhydHhfKXBzZXVkb19jdW1h
Y2sgd2lsbAorCQkJCQkgKiB0cmlnZ2VyIHNlYXJjaCBmb3IgdGhlIG5leHQKKwkJCQkJICogZXhw
ZWN0ZWQgKHJ0eC0pcHNldWRvLWN1bWFjay4KKwkJCQkJICovCisJCQkJCXRwMS0+d2hvVG8tPm5l
d19wc2V1ZG9fY3VtYWNrID0gMTsKKwkJCQkJdHAxLT53aG9Uby0+ZmluZF9wc2V1ZG9fY3VtYWNr
ID0gMTsKKwkJCQkJdHAxLT53aG9Uby0+ZmluZF9ydHhfcHNldWRvX2N1bWFjayA9IDE7CisJCQkJ
CWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9H
R0lOR19FTkFCTEUpIHsKKwkJCQkJCS8qIHNhX2lnbm9yZSBOT19OVUxMX0NISyAqLworCQkJCQkJ
c2N0cF9sb2dfY3duZChzdGNiLCB0cDEtPndob1RvLCB0cDEtPnJlYy5kYXRhLnRzbiwgU0NUUF9D
V05EX0xPR19GUk9NX1NBQ0spOworCQkJCQl9CisJCQkJfQorCQkJCWlmICh0cDEtPnNlbnQgPT0g
U0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKKwkJCQkJc2N0cF91Y291bnRfZGVjcihhc29jLT5zZW50
X3F1ZXVlX3JldHJhbl9jbnQpOworCQkJCX0KKwkJCQlpZiAodHAxLT5yZWMuZGF0YS5jaHVua193
YXNfcmV2b2tlZCkgeworCQkJCQkvKiBkZWZsYXRlIHRoZSBjd25kICovCisJCQkJCXRwMS0+d2hv
VG8tPmN3bmQgLT0gdHAxLT5ib29rX3NpemU7CisJCQkJCXRwMS0+cmVjLmRhdGEuY2h1bmtfd2Fz
X3Jldm9rZWQgPSAwOworCQkJCX0KKwkJCQlpZiAodHAxLT5zZW50ICE9IFNDVFBfREFUQUdSQU1f
TlJfQUNLRUQpIHsKKwkJCQkJaWYgKGFzb2MtPnN0cm1vdXRbdHAxLT5yZWMuZGF0YS5zaWRdLmNo
dW5rc19vbl9xdWV1ZXMgPiAwKSB7CisJCQkJCQlhc29jLT5zdHJtb3V0W3RwMS0+cmVjLmRhdGEu
c2lkXS5jaHVua3Nfb25fcXVldWVzLS07CisjaWZkZWYgSU5WQVJJQU5UUworCQkJCQl9IGVsc2Ug
eworCQkJCQkJcGFuaWMoIk5vIGNodW5rcyBvbiB0aGUgcXVldWVzIGZvciBzaWQgJXUuIiwgdHAx
LT5yZWMuZGF0YS5zaWQpOworI2VuZGlmCisJCQkJCX0KKwkJCQl9CisJCQkJaWYgKChhc29jLT5z
dHJtb3V0W3RwMS0+cmVjLmRhdGEuc2lkXS5jaHVua3Nfb25fcXVldWVzID09IDApICYmCisJCQkJ
ICAgIChhc29jLT5zdHJtb3V0W3RwMS0+cmVjLmRhdGEuc2lkXS5zdGF0ZSA9PSBTQ1RQX1NUUkVB
TV9SRVNFVF9QRU5ESU5HKSAmJgorCQkJCSAgICBUQUlMUV9FTVBUWSgmYXNvYy0+c3RybW91dFt0
cDEtPnJlYy5kYXRhLnNpZF0ub3V0cXVldWUpKSB7CisJCQkJCWFzb2MtPnRyaWdnZXJfcmVzZXQg
PSAxOworCQkJCX0KKwkJCQlUQUlMUV9SRU1PVkUoJmFzb2MtPnNlbnRfcXVldWUsIHRwMSwgc2N0
cF9uZXh0KTsKKwkJCQlpZiAodHAxLT5kYXRhKSB7CisJCQkJCS8qIHNhX2lnbm9yZSBOT19OVUxM
X0NISyAqLworCQkJCQlzY3RwX2ZyZWVfYnVmc3BhY2Uoc3RjYiwgYXNvYywgdHAxLCAxKTsKKwkJ
CQkJc2N0cF9tX2ZyZWVtKHRwMS0+ZGF0YSk7CisJCQkJCXRwMS0+ZGF0YSA9IE5VTEw7CisJCQkJ
fQorCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NB
Q0tfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQkJc2N0cF9sb2dfc2Fjayhhc29jLT5sYXN0X2Fja2Vk
X3NlcSwKKwkJCQkJCSAgICAgIGN1bWFjaywKKwkJCQkJCSAgICAgIHRwMS0+cmVjLmRhdGEudHNu
LAorCQkJCQkJICAgICAgMCwKKwkJCQkJCSAgICAgIDAsCisJCQkJCQkgICAgICBTQ1RQX0xPR19G
UkVFX1NFTlQpOworCQkJCX0KKwkJCQlhc29jLT5zZW50X3F1ZXVlX2NudC0tOworCQkJCXNjdHBf
ZnJlZV9hX2NodW5rKHN0Y2IsIHRwMSwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCX0gZWxzZSB7
CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CWlmIChzdGNiLT5zY3RwX2VwLT5yZWN2X2NhbGxiYWNrKSB7CisJCWlmIChzdGNiLT5zY3RwX3Nv
Y2tldCkgeworCQkJdWludDMyX3QgaW5xdWV1ZV9ieXRlcywgc2JfZnJlZV9ub3c7CisJCQlzdHJ1
Y3Qgc2N0cF9pbnBjYiAqaW5wOworCisJCQlpbnAgPSBzdGNiLT5zY3RwX2VwOworCQkJaW5xdWV1
ZV9ieXRlcyA9IHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgLSAoc3RjYi0+YXNv
Yy5jaHVua3Nfb25fb3V0X3F1ZXVlICogc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspKTsK
KwkJCXNiX2ZyZWVfbm93ID0gU0NUUF9TQl9MSU1JVF9TTkQoc3RjYi0+c2N0cF9zb2NrZXQpIC0g
KGlucXVldWVfYnl0ZXMgKyBzdGNiLT5hc29jLnNiX3NlbmRfcmVzdik7CisKKwkJCS8qIGNoZWNr
IGlmIHRoZSBhbW91bnQgZnJlZSBpbiB0aGUgc2VuZCBzb2NrZXQgYnVmZmVyIGNyb3NzZWQgdGhl
IHRocmVzaG9sZCAqLworCQkJaWYgKGlucC0+c2VuZF9jYWxsYmFjayAmJgorCQkJICAgICgoKGlu
cC0+c2VuZF9zYl90aHJlc2hvbGQgPiAwKSAmJgorCQkJICAgICAgKHNiX2ZyZWVfbm93ID49IGlu
cC0+c2VuZF9zYl90aHJlc2hvbGQpICYmCisJCQkgICAgICAoc3RjYi0+YXNvYy5jaHVua3Nfb25f
b3V0X3F1ZXVlIDw9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYXhfY2h1bmtzX29uX3F1ZXVlKSkp
IHx8CisJCQkgICAgIChpbnAtPnNlbmRfc2JfdGhyZXNob2xkID09IDApKSkgeworCQkJCWF0b21p
Y19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0
Y2IpOworCQkJCWlucC0+c2VuZF9jYWxsYmFjayhzdGNiLT5zY3RwX3NvY2tldCwgc2JfZnJlZV9u
b3csIGlucC0+dWxwX2luZm8pOworCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQkJYXRvbWlj
X3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJfQorCQl9CisJfSBlbHNl
IGlmIChzdGNiLT5zY3RwX3NvY2tldCkgeworI2Vsc2UKKwkvKiBzYV9pZ25vcmUgTk9fTlVMTF9D
SEsgKi8KKwlpZiAoc3RjYi0+c2N0cF9zb2NrZXQpIHsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19B
UFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlzdHJ1Y3Qgc29ja2V0ICpzbzsK
KworI2VuZGlmCisJCVNPQ0tCVUZfTE9DSygmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3NuZCk7CisJ
CWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1dBS0VfTE9H
R0lOR19FTkFCTEUpIHsKKwkJCS8qIHNhX2lnbm9yZSBOT19OVUxMX0NISyAqLworCQkJc2N0cF93
YWtldXBfbG9nKHN0Y2IsIDEsIFNDVFBfV0FLRVNORF9GUk9NX1NBQ0spOworCQl9CisjaWYgZGVm
aW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCXNvID0gU0NUUF9J
TlBfU08oc3RjYi0+c2N0cF9lcCk7CisJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNu
dCwgMSk7CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJU0NUUF9TT0NLRVRfTE9DSyhzbywg
MSk7CisJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2It
PmFzb2MucmVmY250LCAxKTsKKwkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NM
T1NFRF9TT0NLRVQpIHsKKwkJCS8qIGFzc29jIHdhcyBmcmVlZCB3aGlsZSB3ZSB3ZXJlIHVubG9j
a2VkICovCisJCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworCQkJcmV0dXJuOworCQl9Cisj
ZW5kaWYKKwkJc2N0cF9zb3d3YWtldXBfbG9ja2VkKHN0Y2ItPnNjdHBfZXAsIHN0Y2ItPnNjdHBf
c29ja2V0KTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKyNlbmRpZgorCX0gZWxzZSB7CisJCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1dBS0VfTE9HR0lO
R19FTkFCTEUpIHsKKwkJCXNjdHBfd2FrZXVwX2xvZyhzdGNiLCAxLCBTQ1RQX05PV0FLRV9GUk9N
X1NBQ0spOworCQl9CisJfQorCisJLyogSlJTIC0gVXNlIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wg
Z2l2ZW4gaW4gdGhlIENDIG1vZHVsZSAqLworCWlmICgoYXNvYy0+bGFzdF9hY2tlZF9zZXEgIT0g
Y3VtYWNrKSAmJiAoZWNuZV9zZWVuID09IDApKSB7CisJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNv
Yy0+bmV0cywgc2N0cF9uZXh0KSB7CisJCQlpZiAobmV0LT5uZXRfYWNrMiA+IDApIHsKKwkJCQkv
KgorCQkJCSAqIEthcm4ncyBydWxlIGFwcGxpZXMgdG8gY2xlYXJpbmcgZXJyb3IgY291bnQsIHRo
aXMKKwkJCQkgKiBpcyBvcHRpb25hbC4KKwkJCQkgKi8KKwkJCQluZXQtPmVycm9yX2NvdW50ID0g
MDsKKwkJCQlpZiAoIShuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUkVBQ0hBQkxFKSkgewor
CQkJCQkvKiBhZGRyIGNhbWUgZ29vZCAqLworCQkJCQluZXQtPmRlc3Rfc3RhdGUgfD0gU0NUUF9B
RERSX1JFQUNIQUJMRTsKKwkJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0lOVEVSRkFD
RV9VUCwgc3RjYiwKKwkJCQkJICAgICAgICAgICAgICAgIDAsICh2b2lkICopbmV0LCBTQ1RQX1NP
X05PVF9MT0NLRUQpOworCQkJCX0KKwkJCQlpZiAobmV0ID09IHN0Y2ItPmFzb2MucHJpbWFyeV9k
ZXN0aW5hdGlvbikgeworCQkJCQlpZiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsKKwkJCQkJCS8q
IHJlbGVhc2UgdGhlIGFsdGVybmF0ZSwgcHJpbWFyeSBpcyBnb29kICovCisJCQkJCQlzY3RwX2Zy
ZWVfcmVtb3RlX2FkZHIoc3RjYi0+YXNvYy5hbHRlcm5hdGUpOworCQkJCQkJc3RjYi0+YXNvYy5h
bHRlcm5hdGUgPSBOVUxMOworCQkJCQl9CisJCQkJfQorCQkJCWlmIChuZXQtPmRlc3Rfc3RhdGUg
JiBTQ1RQX0FERFJfUEYpIHsKKwkJCQkJbmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfUEY7
CisJCQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULAorCQkJCQkg
ICAgICAgICAgICAgICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAorCQkJCQkgICAgICAgICAg
ICAgICAgU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfMjYpOworCQkJCQlzY3RwX3Rp
bWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
IG5ldCk7CisJCQkJCWFzb2MtPmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBkYXRlX2V4aXRfcGYo
c3RjYiwgbmV0KTsKKwkJCQkJLyogRG9uZSB3aXRoIHRoaXMgbmV0ICovCisJCQkJCW5ldC0+bmV0
X2FjayA9IDA7CisJCQkJfQorCQkJCS8qIHJlc3RvcmUgYW55IGRvdWJsZWQgdGltZXJzICovCisJ
CQkJbmV0LT5SVE8gPSAobmV0LT5sYXN0c2EgPj4gU0NUUF9SVFRfU0hJRlQpICsgbmV0LT5sYXN0
c3Y7CisJCQkJaWYgKG5ldC0+UlRPIDwgc3RjYi0+YXNvYy5taW5ydG8pIHsKKwkJCQkJbmV0LT5S
VE8gPSBzdGNiLT5hc29jLm1pbnJ0bzsKKwkJCQl9CisJCQkJaWYgKG5ldC0+UlRPID4gc3RjYi0+
YXNvYy5tYXhydG8pIHsKKwkJCQkJbmV0LT5SVE8gPSBzdGNiLT5hc29jLm1heHJ0bzsKKwkJCQl9
CisJCQl9CisJCX0KKwkJYXNvYy0+Y2NfZnVuY3Rpb25zLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJf
c2FjayhzdGNiLCBhc29jLCAxLCAwLCAwKTsKKwl9CisJYXNvYy0+bGFzdF9hY2tlZF9zZXEgPSBj
dW1hY2s7CisKKwlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNlbnRfcXVldWUpKSB7CisJCS8qIG5v
dGhpbmcgbGVmdCBpbi1mbGlnaHQgKi8KKwkJVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRz
LCBzY3RwX25leHQpIHsKKwkJCW5ldC0+ZmxpZ2h0X3NpemUgPSAwOworCQkJbmV0LT5wYXJ0aWFs
X2J5dGVzX2Fja2VkID0gMDsKKwkJfQorCQlhc29jLT50b3RhbF9mbGlnaHQgPSAwOworCQlhc29j
LT50b3RhbF9mbGlnaHRfY291bnQgPSAwOworCX0KKworCS8qIFJXTkQgdXBkYXRlICovCisJYXNv
Yy0+cGVlcnNfcnduZCA9IHNjdHBfc2JzcGFjZV9zdWIocnduZCwKKwkJCQkJICAgICh1aW50MzJf
dCkgKGFzb2MtPnRvdGFsX2ZsaWdodCArIChhc29jLT50b3RhbF9mbGlnaHRfY291bnQgKiBTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfcGVlcl9jaHVua19vaCkpKSk7CisJaWYgKGFzb2MtPnBlZXJzX3J3
bmQgPCBzdGNiLT5zY3RwX2VwLT5zY3RwX2VwLnNjdHBfc3dzX3NlbmRlcikgeworCQkvKiBTV1Mg
c2VuZGVyIHNpZGUgZW5nYWdlcyAqLworCQlhc29jLT5wZWVyc19yd25kID0gMDsKKwl9CisJaWYg
KGFzb2MtPnBlZXJzX3J3bmQgPiBvbGRfcnduZCkgeworCQl3aW5fcHJvYmVfcmVjb3ZlcnkgPSAx
OworCX0KKwkvKiBOb3cgYXNzdXJlIGEgdGltZXIgd2hlcmUgZGF0YSBpcyBxdWV1ZWQgYXQgKi8K
K2FnYWluOgorCWogPSAwOworCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0cywgc2N0cF9u
ZXh0KSB7CisJCWlmICh3aW5fcHJvYmVfcmVjb3ZlcnkgJiYgKG5ldC0+d2luZG93X3Byb2JlKSkg
eworCQkJd2luX3Byb2JlX3JlY292ZXJlZCA9IDE7CisJCQkvKgorCQkJICogRmluZCBmaXJzdCBj
aHVuayB0aGF0IHdhcyB1c2VkIHdpdGggd2luZG93IHByb2JlCisJCQkgKiBhbmQgY2xlYXIgdGhl
IHNlbnQKKwkJCSAqLworCQkJLyogc2FfaWdub3JlIEZSRUVEX01FTU9SWSAqLworCQkJVEFJTFFf
Rk9SRUFDSCh0cDEsICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQpIHsKKwkJCQlpZiAodHAx
LT53aW5kb3dfcHJvYmUpIHsKKwkJCQkJLyogbW92ZSBiYWNrIHRvIGRhdGEgc2VuZCBxdWV1ZSAq
LworCQkJCQlzY3RwX3dpbmRvd19wcm9iZV9yZWNvdmVyeShzdGNiLCBhc29jLCB0cDEpOworCQkJ
CQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKG5ldC0+ZmxpZ2h0X3NpemUpIHsKKwkJ
CWorKzsKKwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NFTkQsIHN0Y2ItPnNj
dHBfZXAsIHN0Y2IsIG5ldCk7CisJCQlpZiAobmV0LT53aW5kb3dfcHJvYmUpIHsKKwkJCQluZXQt
PndpbmRvd19wcm9iZSA9IDA7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAobmV0LT53aW5kb3df
cHJvYmUpIHsKKwkJCQkvKiBJbiB3aW5kb3cgcHJvYmVzIHdlIG11c3QgYXNzdXJlIGEgdGltZXIg
aXMgc3RpbGwgcnVubmluZyB0aGVyZSAqLworCQkJCW5ldC0+d2luZG93X3Byb2JlID0gMDsKKwkJ
CQlpZiAoIVNDVFBfT1NfVElNRVJfUEVORElORygmbmV0LT5yeHRfdGltZXIudGltZXIpKSB7CisJ
CQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NFTkQsIHN0Y2ItPnNjdHBfZXAs
IHN0Y2IsIG5ldCk7CisJCQkJfQorCQkJfSBlbHNlIGlmIChTQ1RQX09TX1RJTUVSX1BFTkRJTkco
Jm5ldC0+cnh0X3RpbWVyLnRpbWVyKSkgeworCQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVS
X1RZUEVfU0VORCwgc3RjYi0+c2N0cF9lcCwKKwkJCQkgICAgICAgICAgICAgICAgc3RjYiwgbmV0
LAorCQkJCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18y
Nyk7CisJCQl9CisJCX0KKwl9CisJaWYgKChqID09IDApICYmCisJICAgICghVEFJTFFfRU1QVFko
JmFzb2MtPnNlbnRfcXVldWUpKSAmJgorCSAgICAoYXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5fY250
ID09IDApICYmCisJICAgICh3aW5fcHJvYmVfcmVjb3ZlcmVkID09IDApICYmCisJICAgIChkb25l
X29uY2UgPT0gMCkpIHsKKwkJLyogaHVoLCB0aGlzIHNob3VsZCBub3QgaGFwcGVuIHVubGVzcyBh
bGwgcGFja2V0cworCQkgKiBhcmUgUFItU0NUUCBhbmQgbWFya2VkIHRvIHNraXAgb2YgY291cnNl
LgorCQkgKi8KKwkJaWYgKHNjdHBfZnNfYXVkaXQoYXNvYykpIHsKKwkJCVRBSUxRX0ZPUkVBQ0go
bmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0KSB7CisJCQkJbmV0LT5mbGlnaHRfc2l6ZSA9IDA7
CisJCQl9CisJCQlhc29jLT50b3RhbF9mbGlnaHQgPSAwOworCQkJYXNvYy0+dG90YWxfZmxpZ2h0
X2NvdW50ID0gMDsKKwkJCWFzb2MtPnNlbnRfcXVldWVfcmV0cmFuX2NudCA9IDA7CisJCQlUQUlM
UV9GT1JFQUNIKHRwMSwgJmFzb2MtPnNlbnRfcXVldWUsIHNjdHBfbmV4dCkgeworCQkJCWlmICh0
cDEtPnNlbnQgPCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgeworCQkJCQlzY3RwX2ZsaWdodF9zaXpl
X2luY3JlYXNlKHRwMSk7CisJCQkJCXNjdHBfdG90YWxfZmxpZ2h0X2luY3JlYXNlKHN0Y2IsIHRw
MSk7CisJCQkJfSBlbHNlIGlmICh0cDEtPnNlbnQgPT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsK
KwkJCQkJc2N0cF91Y291bnRfaW5jcihhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOworCQkJ
CX0KKwkJCX0KKwkJfQorCQlkb25lX29uY2UgPSAxOworCQlnb3RvIGFnYWluOworCX0KKwkvKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBOb3cgd2hhdCBhYm91dCBzaHV0
ZG93biBpc3N1ZXMgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlp
ZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRfcXVldWUpICYmIFRBSUxRX0VNUFRZKCZhc29jLT5z
ZW50X3F1ZXVlKSkgeworCQkvKiBub3RoaW5nIGxlZnQgb24gc2VuZHF1ZXVlLi4gY29uc2lkZXIg
ZG9uZSAqLworCQkvKiBjbGVhbiB1cCAqLworCQlpZiAoKGFzb2MtPnN0cmVhbV9xdWV1ZV9jbnQg
PT0gMSkgJiYKKwkJICAgICgoYXNvYy0+c3RhdGUgJiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJ
TkcpIHx8CisJCSAgICAgKFNDVFBfR0VUX1NUQVRFKHN0Y2IpID09IFNDVFBfU1RBVEVfU0hVVERP
V05fUkVDRUlWRUQpKSAmJgorCQkgICAgKCgqYXNvYy0+c3NfZnVuY3Rpb25zLnNjdHBfc3NfaXNf
dXNlcl9tc2dzX2luY29tcGxldGUpKHN0Y2IsIGFzb2MpKSkgeworCQkJU0NUUF9BRERfU1VCU1RB
VEUoc3RjYiwgU0NUUF9TVEFURV9QQVJUSUFMX01TR19MRUZUKTsKKwkJfQorCQlpZiAoKChhc29j
LT5zdGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykgfHwKKwkJICAgICAoU0NUUF9H
RVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkpICYmCisJCSAg
ICAoYXNvYy0+c3RyZWFtX3F1ZXVlX2NudCA9PSAxKSAmJgorCQkgICAgKGFzb2MtPnN0YXRlICYg
U0NUUF9TVEFURV9QQVJUSUFMX01TR19MRUZUKSkgeworCQkJc3RydWN0IG1idWYgKm9wX2VycjsK
KworCQkJKmFib3J0X25vdyA9IDE7CisJCQkvKiBYWFggKi8KKwkJCW9wX2VyciA9IHNjdHBfZ2Vu
ZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9VU0VSX0lOSVRJQVRFRF9BQlQsICIiKTsKKwkJCXN0Y2It
PnNjdHBfZXAtPmxhc3RfYWJvcnRfY29kZSA9IFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBf
TE9DXzI4OworCQkJc2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNi
LCBvcF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKChh
c29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykgJiYKKwkJICAgIChhc29j
LT5zdHJlYW1fcXVldWVfY250ID09IDApKSB7CisJCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXRwOwor
CisJCQlpZiAoKFNDVFBfR0VUX1NUQVRFKHN0Y2IpID09IFNDVFBfU1RBVEVfT1BFTikgfHwKKwkJ
CSAgICAoU0NUUF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZF
RCkpIHsKKwkJCQlTQ1RQX1NUQVRfREVDUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7CisJCQl9
CisJCQlTQ1RQX1NFVF9TVEFURShzdGNiLCBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQpOworCQkJ
c2N0cF9zdG9wX3RpbWVyc19mb3Jfc2h1dGRvd24oc3RjYik7CisJCQlpZiAoYXNvYy0+YWx0ZXJu
YXRlKSB7CisJCQkJbmV0cCA9IGFzb2MtPmFsdGVybmF0ZTsKKwkJCX0gZWxzZSB7CisJCQkJbmV0
cCA9IGFzb2MtPnByaW1hcnlfZGVzdGluYXRpb247CisJCQl9CisJCQlzY3RwX3NlbmRfc2h1dGRv
d24oc3RjYiwgbmV0cCk7CisJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVU
RE9XTiwKKwkJCQkJIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldHApOworCQkJc2N0cF90aW1lcl9z
dGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05HVUFSRCwKKwkJCQkJIHN0Y2ItPnNjdHBfZXAs
IHN0Y2IsIE5VTEwpOworCQl9IGVsc2UgaWYgKChTQ1RQX0dFVF9TVEFURShzdGNiKSA9PSBTQ1RQ
X1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSAmJgorCQkJICAgKGFzb2MtPnN0cmVhbV9xdWV1ZV9j
bnQgPT0gMCkpIHsKKwkJCXN0cnVjdCBzY3RwX25ldHMgKm5ldHA7CisKKwkJCVNDVFBfU1RBVF9E
RUNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKKwkJCVNDVFBfU0VUX1NUQVRFKHN0Y2IsIFND
VFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQpOworCQkJc2N0cF9zdG9wX3RpbWVyc19mb3Jfc2h1
dGRvd24oc3RjYik7CisJCQlpZiAoYXNvYy0+YWx0ZXJuYXRlKSB7CisJCQkJbmV0cCA9IGFzb2Mt
PmFsdGVybmF0ZTsKKwkJCX0gZWxzZSB7CisJCQkJbmV0cCA9IGFzb2MtPnByaW1hcnlfZGVzdGlu
YXRpb247CisJCQl9CisJCQlzY3RwX3NlbmRfc2h1dGRvd25fYWNrKHN0Y2IsIG5ldHApOworCQkJ
c2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05BQ0ssCisJCQkJCSBzdGNi
LT5zY3RwX2VwLCBzdGNiLCBuZXRwKTsKKwkJfQorCX0KKwkvKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIEhlcmUgd2UgcGVyZm9ybSBQUi1TQ1RQIHBy
b2NlZHVyZXMgICAgICAgICovCisJLyogKHNlY3Rpb24gNC4yKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworCS8qIEMxLiB1cGRhdGUgYWR2YW5jZWRQZWVyQWNrUG9pbnQgKi8KKwlpZiAoU0NUUF9U
U05fR1QoY3VtYWNrLCBhc29jLT5hZHZhbmNlZF9wZWVyX2Fja19wb2ludCkpIHsKKwkJYXNvYy0+
YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQgPSBjdW1hY2s7CisJfQorCS8qIFBSLVNjdHAgaXNzdWVz
IG5lZWQgdG8gYmUgYWRkcmVzc2VkIHRvbyAqLworCWlmICgoYXNvYy0+cHJzY3RwX3N1cHBvcnRl
ZCkgJiYgKGFzb2MtPnByX3NjdHBfY250ID4gMCkpIHsKKwkJc3RydWN0IHNjdHBfdG1pdF9jaHVu
ayAqbGNoazsKKwkJdWludDMyX3Qgb2xkX2Fkdl9wZWVyX2Fja19wb2ludDsKKworCQlvbGRfYWR2
X3BlZXJfYWNrX3BvaW50ID0gYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQ7CisJCWxjaGsg
PSBzY3RwX3RyeV9hZHZhbmNlX3BlZXJfYWNrX3BvaW50KHN0Y2IsIGFzb2MpOworCQkvKiBDMy4g
U2VlIGlmIHdlIG5lZWQgdG8gc2VuZCBhIEZ3ZC1UU04gKi8KKwkJaWYgKFNDVFBfVFNOX0dUKGFz
b2MtPmFkdmFuY2VkX3BlZXJfYWNrX3BvaW50LCBjdW1hY2spKSB7CisJCQkvKgorCQkJICogSVNT
VUUgd2l0aCBFQ04sIHNlZSBGV0QtVFNOIHByb2Nlc3NpbmcuCisJCQkgKi8KKwkJCWlmIChTQ1RQ
X1RTTl9HVChhc29jLT5hZHZhbmNlZF9wZWVyX2Fja19wb2ludCwgb2xkX2Fkdl9wZWVyX2Fja19w
b2ludCkpIHsKKwkJCQlzZW5kX2ZvcndhcmRfdHNuKHN0Y2IsIGFzb2MpOworCQkJfSBlbHNlIGlm
IChsY2hrKSB7CisJCQkJLyogdHJ5IHRvIEZSIGZ3ZC10c24ncyB0aGF0IGdldCBsb3N0IHRvbyAq
LworCQkJCWlmIChsY2hrLT5yZWMuZGF0YS5md2RfdHNuX2NudCA+PSAzKSB7CisJCQkJCXNlbmRf
Zm9yd2FyZF90c24oc3RjYiwgYXNvYyk7CisJCQkJfQorCQkJfQorCQl9CisJCWZvciAoOyBsY2hr
ICE9IE5VTEw7IGxjaGsgPSBUQUlMUV9ORVhUKGxjaGssIHNjdHBfbmV4dCkpIHsKKwkJCWlmIChs
Y2hrLT53aG9UbyAhPSBOVUxMKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGxjaGsg
IT0gTlVMTCkgeworCQkJLyogQXNzdXJlIGEgdGltZXIgaXMgdXAgKi8KKwkJCXNjdHBfdGltZXJf
c3RhcnQoU0NUUF9USU1FUl9UWVBFX1NFTkQsCisJCQkgICAgICAgICAgICAgICAgIHN0Y2ItPnNj
dHBfZXAsIHN0Y2IsIGxjaGstPndob1RvKTsKKwkJfQorCX0KKwlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TQUNLX1JXTkRfTE9HR0lOR19FTkFCTEUpIHsK
KwkJc2N0cF9taXNjX2ludHMoU0NUUF9TQUNLX1JXTkRfVVBEQVRFLAorCQkJICAgICAgIHJ3bmQs
CisJCQkgICAgICAgc3RjYi0+YXNvYy5wZWVyc19yd25kLAorCQkJICAgICAgIHN0Y2ItPmFzb2Mu
dG90YWxfZmxpZ2h0LAorCQkJICAgICAgIHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3Np
emUpOworCX0KK30KKwordm9pZAorc2N0cF9oYW5kbGVfc2FjayhzdHJ1Y3QgbWJ1ZiAqbSwgaW50
IG9mZnNldF9zZWcsIGludCBvZmZzZXRfZHVwLAorICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAgICAgIHVpbnQxNl90IG51bV9zZWcsIHVpbnQxNl90
IG51bV9ucl9zZWcsIHVpbnQxNl90IG51bV9kdXAsCisgICAgICAgICAgICAgICAgIGludCAqYWJv
cnRfbm93LCB1aW50OF90IGZsYWdzLAorICAgICAgICAgICAgICAgICB1aW50MzJfdCBjdW1fYWNr
LCB1aW50MzJfdCByd25kLCBpbnQgZWNuZV9zZWVuKQoreworCXN0cnVjdCBzY3RwX2Fzc29jaWF0
aW9uICphc29jOworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKnRwMSwgKnRwMjsKKwl1aW50MzJf
dCBsYXN0X3RzbiwgYmlnZ2VzdF90c25fYWNrZWQsIGJpZ2dlc3RfdHNuX25ld2x5X2Fja2VkLCB0
aGlzX3NhY2tfbG93ZXN0X25ld2FjazsKKwl1aW50MTZfdCB3YWtlX2hpbSA9IDA7CisJdWludDMy
X3Qgc2VuZF9zID0gMDsKKwlsb25nIGo7CisJaW50IGFjY3VtX21vdmVkID0gMDsKKwlpbnQgd2ls
bF9leGl0X2Zhc3RfcmVjb3ZlcnkgPSAwOworCXVpbnQzMl90IGFfcnduZCwgb2xkX3J3bmQ7CisJ
aW50IHdpbl9wcm9iZV9yZWNvdmVyeSA9IDA7CisJaW50IHdpbl9wcm9iZV9yZWNvdmVyZWQgPSAw
OworCXN0cnVjdCBzY3RwX25ldHMgKm5ldCA9IE5VTEw7CisJaW50IGRvbmVfb25jZTsKKwlpbnQg
cnRvX29rID0gMTsKKwl1aW50OF90IHJlbmVnZWRfYWxsID0gMDsKKwl1aW50OF90IGNtdF9kYWNf
ZmxhZzsKKwkvKgorCSAqIHdlIHRha2UgYW55IGNoYW5jZSB3ZSBjYW4gdG8gc2VydmljZSBvdXIg
cXVldWVzIHNpbmNlIHdlIGNhbm5vdAorCSAqIGdldCBhd29rZW4gd2hlbiB0aGUgc29ja2V0IGlz
IHJlYWQgZnJvbSA6PAorCSAqLworCS8qCisJICogTm93IHBlcmZvcm0gdGhlIGFjdHVhbCBTQUNL
IGhhbmRsaW5nOiAxKSBWZXJpZnkgdGhhdCBpdCBpcyBub3QgYW4KKwkgKiBvbGQgc2FjaywgaWYg
c28gZGlzY2FyZC4gMikgSWYgdGhlcmUgaXMgbm90aGluZyBsZWZ0IGluIHRoZSBzZW5kCisJICog
cXVldWUgKGN1bS1hY2sgaXMgZXF1YWwgdG8gbGFzdCBhY2tlZCkgdGhlbiB5b3UgaGF2ZSBhIGR1
cGxpY2F0ZQorCSAqIHRvbywgdXBkYXRlIGFueSByd25kIGNoYW5nZSBhbmQgdmVyaWZ5IG5vIHRp
bWVycyBhcmUgcnVubmluZy4KKwkgKiB0aGVuIHJldHVybi4gMykgUHJvY2VzcyBhbnkgbmV3IGNv
bnNlcXV0aXZlIGRhdGEgaS5lLiBjdW0tYWNrCisJICogbW92ZWQgcHJvY2VzcyB0aGVzZSBmaXJz
dCBhbmQgbm90ZSB0aGF0IGl0IG1vdmVkLiA0KSBQcm9jZXNzIGFueQorCSAqIHNhY2sgYmxvY2tz
LiA1KSBEcm9wIGFueSBhY2tlZCBmcm9tIHRoZSBxdWV1ZS4gNikgQ2hlY2sgZm9yIGFueQorCSAq
IHJldm9rZWQgYmxvY2tzIGFuZCBtYXJrLiA3KSBVcGRhdGUgdGhlIGN3bmQuIDgpIE5vdGhpbmcg
bGVmdCwKKwkgKiBzeW5jIHVwIGZsaWdodHNpemVzIGFuZCB0aGluZ3MsIHN0b3AgYWxsIHRpbWVy
cyBhbmQgYWxzbyBjaGVjaworCSAqIGZvciBzaHV0ZG93bl9wZW5kaW5nIHN0YXRlLiBJZiBzbyB0
aGVuIGdvIGFoZWFkIGFuZCBzZW5kIG9mZiB0aGUKKwkgKiBzaHV0ZG93bi4gSWYgaW4gc2h1dGRv
d24gcmVjdiwgc2VuZCBvZmYgdGhlIHNodXRkb3duLWFjayBhbmQKKwkgKiBzdGFydCB0aGF0IHRp
bWVyLCBSZXQuIDkpIFN0cmlrZSBhbnkgbm9uLWFja2VkIHRoaW5ncyBhbmQgZG8gRlIKKwkgKiBw
cm9jZWR1cmUgaWYgbmVlZGVkIGJlaW5nIHN1cmUgdG8gc2V0IHRoZSBGUiBmbGFnLiAxMCkgRG8g
cHItc2N0cAorCSAqIHByb2NlZHVyZXMuIDExKSBBcHBseSBhbnkgRlIgcGVuYWx0aWVzLiAxMikg
QXNzdXJlIHdlIHdpbGwgU0FDSworCSAqIGlmIGluIHNodXRkb3duX3JlY3Ygc3RhdGUuCisJICov
CisJU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7CisJLyogQ01UIERBQyBhbGdvICovCisJdGhp
c19zYWNrX2xvd2VzdF9uZXdhY2sgPSAwOworCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Nsb3dwYXRo
X3NhY2spOworCWxhc3RfdHNuID0gY3VtX2FjazsKKwljbXRfZGFjX2ZsYWcgPSBmbGFncyAmIFND
VFBfU0FDS19DTVRfREFDOworI2lmZGVmIFNDVFBfQVNPQ0xPR19PRl9UU05TCisJc3RjYi0+YXNv
Yy5jdW1hY2tfbG9nW3N0Y2ItPmFzb2MuY3VtYWNrX2xvZ19hdF0gPSBjdW1fYWNrOworCXN0Y2It
PmFzb2MuY3VtYWNrX2xvZ19hdCsrOworCWlmIChzdGNiLT5hc29jLmN1bWFja19sb2dfYXQgPiBT
Q1RQX1RTTl9MT0dfU0laRSkgeworCQlzdGNiLT5hc29jLmN1bWFja19sb2dfYXQgPSAwOworCX0K
KyNlbmRpZgorCWFfcnduZCA9IHJ3bmQ7CisKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xv
Z2dpbmdfbGV2ZWwpICYgU0NUUF9MT0dfU0FDS19BUlJJVkFMU19FTkFCTEUpIHsKKwkJc2N0cF9t
aXNjX2ludHMoU0NUUF9TQUNLX0xPR19OT1JNQUwsIGN1bV9hY2ssCisJCSAgICAgICAgICAgICAg
IHJ3bmQsIHN0Y2ItPmFzb2MubGFzdF9hY2tlZF9zZXEsIHN0Y2ItPmFzb2MucGVlcnNfcnduZCk7
CisJfQorCisJb2xkX3J3bmQgPSBzdGNiLT5hc29jLnBlZXJzX3J3bmQ7CisJaWYgKFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfVEhSRVNIT0xEX0xPR0dJTkcpIHsK
KwkJc2N0cF9taXNjX2ludHMoU0NUUF9USFJFU0hPTERfQ0xFQVIsCisJCSAgICAgICAgICAgICAg
IHN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCwKKwkJICAgICAgICAgICAgICAgMCwKKwkJ
ICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5EQVRBLAorCQkgICAgICAgICAgICAgICBf
X0xJTkVfXyk7CisJfQorCXN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCA9IDA7CisJYXNv
YyA9ICZzdGNiLT5hc29jOworCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZl
bCkgJiBTQ1RQX1NBQ0tfTE9HR0lOR19FTkFCTEUpIHsKKwkJc2N0cF9sb2dfc2Fjayhhc29jLT5s
YXN0X2Fja2VkX3NlcSwKKwkJICAgICAgICAgICAgICBjdW1fYWNrLAorCQkgICAgICAgICAgICAg
IDAsCisJCSAgICAgICAgICAgICAgbnVtX3NlZywKKwkJICAgICAgICAgICAgICBudW1fZHVwLAor
CQkgICAgICAgICAgICAgIFNDVFBfTE9HX05FV19TQUNLKTsKKwl9CisJaWYgKChudW1fZHVwKSAm
JiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5H
X0VOQUJMRSkpIHsKKwkJdWludDE2X3QgaTsKKwkJdWludDMyX3QgKmR1cGRhdGEsIGRibG9jazsK
KworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2R1cDsgaSsrKSB7CisJCQlkdXBkYXRhID0gKHVpbnQz
Ml90ICopc2N0cF9tX2dldHB0cihtLCBvZmZzZXRfZHVwICsgaSAqIHNpemVvZih1aW50MzJfdCks
CisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodWludDMyX3Qp
LCAodWludDhfdCAqKSZkYmxvY2spOworCQkJaWYgKGR1cGRhdGEgPT0gTlVMTCkgeworCQkJCWJy
ZWFrOworCQkJfQorCQkJc2N0cF9sb2dfZnIoKmR1cGRhdGEsIDAsIDAsIFNDVFBfRlJfRFVQRUQp
OworCQl9CisJfQorCS8qIHJlYWxpdHkgY2hlY2sgKi8KKwlpZiAoIVRBSUxRX0VNUFRZKCZhc29j
LT5zZW50X3F1ZXVlKSkgeworCQl0cDEgPSBUQUlMUV9MQVNUKCZhc29jLT5zZW50X3F1ZXVlLAor
CQkJCSBzY3RwY2h1bmtfbGlzdGhlYWQpOworCQlzZW5kX3MgPSB0cDEtPnJlYy5kYXRhLnRzbiAr
IDE7CisJfSBlbHNlIHsKKwkJdHAxID0gTlVMTDsKKwkJc2VuZF9zID0gYXNvYy0+c2VuZGluZ19z
ZXE7CisJfQorCWlmIChTQ1RQX1RTTl9HRShjdW1fYWNrLCBzZW5kX3MpKSB7CisJCXN0cnVjdCBt
YnVmICpvcF9lcnI7CisJCWNoYXIgbXNnW1NDVFBfRElBR19JTkZPX0xFTl07CisKKwkJLyoKKwkJ
ICogbm8gd2F5LCB3ZSBoYXZlIG5vdCBldmVuIHNlbnQgdGhpcyBUU04gb3V0IHlldC4KKwkJICog
UGVlciBpcyBob3BlbGVzc2x5IG1lc3NlZCB1cCB3aXRoIHVzLgorCQkgKi8KKwkJU0NUUF9QUklO
VEYoIk5FVyBjdW1fYWNrOiV4IHNlbmRfczoleCBpcyBzbWFsbGVyIG9yIGVxdWFsXG4iLAorCQkJ
ICAgIGN1bV9hY2ssIHNlbmRfcyk7CisJCWlmICh0cDEpIHsKKwkJCVNDVFBfUFJJTlRGKCJHb3Qg
c2VuZF9zIGZyb20gdHNuOiV4ICsgMSBvZiB0cDE6ICVwXG4iLAorCQkJCSAgICB0cDEtPnJlYy5k
YXRhLnRzbiwgKHZvaWQgKil0cDEpOworCQl9CisJaG9wZWxlc3NfcGVlcjoKKwkJKmFib3J0X25v
dyA9IDE7CisJCS8qIFhYWCAqLworCQlTQ1RQX1NOUFJJTlRGKG1zZywgc2l6ZW9mKG1zZyksCisJ
CSAgICAgICAgICAgICAgIkN1bSBhY2sgJTguOHggZ3JlYXRlciBvciBlcXVhbCB0aGFuIFRTTiAl
OC44eCIsCisJCSAgICAgICAgICAgICAgY3VtX2Fjaywgc2VuZF9zKTsKKwkJb3BfZXJyID0gc2N0
cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RPQ09MX1ZJT0xBVElPTiwgbXNnKTsKKwkJ
c3RjYi0+c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsg
U0NUUF9MT0NfMjk7CisJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9lcCwg
c3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQlyZXR1cm47CisJfQorCS8qKioq
KioqKioqKioqKioqKioqKioqLworCS8qIDEpIGNoZWNrIHRoZSByYW5nZSAqLworCS8qKioqKioq
KioqKioqKioqKioqKioqLworCWlmIChTQ1RQX1RTTl9HVChhc29jLT5sYXN0X2Fja2VkX3NlcSwg
bGFzdF90c24pKSB7CisJCS8qIGFja2luZyBzb21ldGhpbmcgYmVoaW5kICovCisJCXJldHVybjsK
Kwl9CisKKwkvKiB1cGRhdGUgdGhlIFJ3bmQgb2YgdGhlIHBlZXIgKi8KKwlpZiAoVEFJTFFfRU1Q
VFkoJmFzb2MtPnNlbnRfcXVldWUpICYmCisJICAgIFRBSUxRX0VNUFRZKCZhc29jLT5zZW5kX3F1
ZXVlKSAmJgorCSAgICAoYXNvYy0+c3RyZWFtX3F1ZXVlX2NudCA9PSAwKSkgeworCQkvKiBub3Ro
aW5nIGxlZnQgb24gc2VuZC9zZW50IGFuZCBzdHJtcSAqLworCQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0dfUldORF9FTkFCTEUpIHsKKwkJCXNjdHBf
bG9nX3J3bmRfc2V0KFNDVFBfU0VUX1BFRVJfUldORF9WSUFfU0FDSywKKwkJCSAgICAgICAgICAg
ICAgICAgIGFzb2MtPnBlZXJzX3J3bmQsIDAsIDAsIGFfcnduZCk7CisJCX0KKwkJYXNvYy0+cGVl
cnNfcnduZCA9IGFfcnduZDsKKwkJaWYgKGFzb2MtPnNlbnRfcXVldWVfcmV0cmFuX2NudCkgewor
CQkJYXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5fY250ID0gMDsKKwkJfQorCQlpZiAoYXNvYy0+cGVl
cnNfcnduZCA8IHN0Y2ItPnNjdHBfZXAtPnNjdHBfZXAuc2N0cF9zd3Nfc2VuZGVyKSB7CisJCQkv
KiBTV1Mgc2VuZGVyIHNpZGUgZW5nYWdlcyAqLworCQkJYXNvYy0+cGVlcnNfcnduZCA9IDA7CisJ
CX0KKwkJLyogc3RvcCBhbnkgdGltZXJzICovCisJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+
bmV0cywgc2N0cF9uZXh0KSB7CisJCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX1NF
TkQsIHN0Y2ItPnNjdHBfZXAsCisJCQkgICAgICAgICAgICAgICAgc3RjYiwgbmV0LCBTQ1RQX0ZS
T01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18zMCk7CisJCQluZXQtPnBhcnRpYWxfYnl0ZXNfYWNr
ZWQgPSAwOworCQkJbmV0LT5mbGlnaHRfc2l6ZSA9IDA7CisJCX0KKwkJYXNvYy0+dG90YWxfZmxp
Z2h0ID0gMDsKKwkJYXNvYy0+dG90YWxfZmxpZ2h0X2NvdW50ID0gMDsKKwkJcmV0dXJuOworCX0K
KwkvKgorCSAqIFdlIGluaXQgbmV0QWNrU3ogYW5kIG5ldEFja1N6MiB0byAwLiBUaGVzZSBhcmUg
dXNlZCB0byB0cmFjayAyCisJICogdGhpbmdzLiBUaGUgdG90YWwgYnl0ZSBjb3VudCBhY2tlZCBp
cyB0cmFja2VkIGluIG5ldEFja1N6IEFORAorCSAqIG5ldEFjazIgaXMgdXNlZCB0byB0cmFjayB0
aGUgdG90YWwgYnl0ZXMgYWNrZWQgdGhhdCBhcmUgdW4tCisJICogYW1pYmd1aW91cyBhbmQgd2Vy
ZSBuZXZlciByZXRyYW5zbWl0dGVkLiBXZSB0cmFjayB0aGVzZSBvbiBhIHBlcgorCSAqIGRlc3Rp
bmF0aW9uIGFkZHJlc3MgYmFzaXMuCisJICovCisJVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5u
ZXRzLCBzY3RwX25leHQpIHsKKwkJaWYgKFNDVFBfVFNOX0dUKGN1bV9hY2ssIG5ldC0+Y3dyX3dp
bmRvd190c24pKSB7CisJCQkvKiBEcmFnIGFsb25nIHRoZSB3aW5kb3dfdHNuIGZvciBjd3IncyAq
LworCQkJbmV0LT5jd3Jfd2luZG93X3RzbiA9IGN1bV9hY2s7CisJCX0KKwkJbmV0LT5wcmV2X2N3
bmQgPSBuZXQtPmN3bmQ7CisJCW5ldC0+bmV0X2FjayA9IDA7CisJCW5ldC0+bmV0X2FjazIgPSAw
OworCisJCS8qCisJCSAqIENNVDogUmVzZXQgQ1VDIGFuZCBGYXN0IHJlY292ZXJ5IGFsZ28gdmFy
aWFibGVzIGJlZm9yZQorCQkgKiBTQUNLIHByb2Nlc3NpbmcKKwkJICovCisJCW5ldC0+bmV3X3Bz
ZXVkb19jdW1hY2sgPSAwOworCQluZXQtPndpbGxfZXhpdF9mYXN0X3JlY292ZXJ5ID0gMDsKKwkJ
aWYgKHN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF9wcmVwYXJlX25ldF9mb3Jfc2Fj
aykgeworCQkJKCpzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfcHJlcGFyZV9uZXRf
Zm9yX3NhY2spKHN0Y2IsIG5ldCk7CisJCX0KKworCQkvKgorCQkgKiBDTVQ6IFNGUiBhbGdvIChh
bmQgSFROQSkgLSB0aGlzX3NhY2tfaGlnaGVzdF9uZXdhY2sgaGFzCisJCSAqIHRvIGJlIGdyZWF0
ZXIgdGhhbiB0aGUgY3VtYWNrLiBBbHNvIHJlc2V0IHNhd19uZXdhY2sgdG8gMAorCQkgKiBmb3Ig
YWxsIGRlc3RzLgorCQkgKi8KKwkJbmV0LT5zYXdfbmV3YWNrID0gMDsKKwkJbmV0LT50aGlzX3Nh
Y2tfaGlnaGVzdF9uZXdhY2sgPSBsYXN0X3RzbjsKKwl9CisJLyogcHJvY2VzcyB0aGUgbmV3IGNv
bnNlY3V0aXZlIFRTTiBmaXJzdCAqLworCVRBSUxRX0ZPUkVBQ0godHAxLCAmYXNvYy0+c2VudF9x
dWV1ZSwgc2N0cF9uZXh0KSB7CisJCWlmIChTQ1RQX1RTTl9HRShsYXN0X3RzbiwgdHAxLT5yZWMu
ZGF0YS50c24pKSB7CisJCQlpZiAodHAxLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fVU5TRU5UKSB7
CisJCQkJYWNjdW1fbW92ZWQgPSAxOworCQkJCWlmICh0cDEtPnNlbnQgPCBTQ1RQX0RBVEFHUkFN
X0FDS0VEKSB7CisJCQkJCS8qCisJCQkJCSAqIElmIGl0IGlzIGxlc3MgdGhhbiBBQ0tFRCwgaXQg
aXMKKwkJCQkJICogbm93IG5vLWxvbmdlciBpbiBmbGlnaHQuIEhpZ2hlcgorCQkJCQkgKiB2YWx1
ZXMgbWF5IG9jY3VyIGR1cmluZyBtYXJraW5nCisJCQkJCSAqLworCQkJCQlpZiAoKHRwMS0+d2hv
VG8tPmRlc3Rfc3RhdGUgJgorCQkJCQkgICAgIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkgJiYKKwkJ
CQkJICAgICh0cDEtPnNuZF9jb3VudCA8IDIpKSB7CisJCQkJCQkvKgorCQkJCQkJICogSWYgdGhl
cmUgd2FzIG5vIHJldHJhbgorCQkJCQkJICogYW5kIHRoZSBhZGRyZXNzIGlzCisJCQkJCQkgKiB1
bi1jb25maXJtZWQgYW5kIHdlIHNlbnQKKwkJCQkJCSAqIHRoZXJlIGFuZCBhcmUgbm93CisJCQkJ
CQkgKiBzYWNrZWQuLiBpdHMgY29uZmlybWVkLAorCQkJCQkJICogbWFyayBpdCBzby4KKwkJCQkJ
CSAqLworCQkJCQkJdHAxLT53aG9Uby0+ZGVzdF9zdGF0ZSAmPQorCQkJCQkJCX5TQ1RQX0FERFJf
VU5DT05GSVJNRUQ7CisJCQkJCX0KKwkJCQkJaWYgKHRwMS0+c2VudCA8IFNDVFBfREFUQUdSQU1f
UkVTRU5EKSB7CisJCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwp
ICYgU0NUUF9GTElHSFRfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQkJCQlzY3RwX21pc2NfaW50cyhT
Q1RQX0ZMSUdIVF9MT0dfRE9XTl9DQSwKKwkJCQkJCQkgICAgICAgICAgICAgICB0cDEtPndob1Rv
LT5mbGlnaHRfc2l6ZSwKKwkJCQkJCQkgICAgICAgICAgICAgICB0cDEtPmJvb2tfc2l6ZSwKKwkJ
CQkJCQkgICAgICAgICAgICAgICAodWludDMyX3QpKHVpbnRwdHJfdCl0cDEtPndob1RvLAorCQkJ
CQkJCSAgICAgICAgICAgICAgIHRwMS0+cmVjLmRhdGEudHNuKTsKKwkJCQkJCX0KKwkJCQkJCXNj
dHBfZmxpZ2h0X3NpemVfZGVjcmVhc2UodHAxKTsKKwkJCQkJCXNjdHBfdG90YWxfZmxpZ2h0X2Rl
Y3JlYXNlKHN0Y2IsIHRwMSk7CisJCQkJCQlpZiAoc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0
cF9jd25kX3VwZGF0ZV90c25fYWNrbm93bGVkZ2VkKSB7CisJCQkJCQkJKCpzdGNiLT5hc29jLmNj
X2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBkYXRlX3Rzbl9hY2tub3dsZWRnZWQpKHRwMS0+d2hvVG8s
CisJCQkJCQkJCQkJCQkJCSAgICAgdHAxKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQl0cDEtPndo
b1RvLT5uZXRfYWNrICs9IHRwMS0+c2VuZF9zaXplOworCisJCQkJCS8qIENNVCBTRlIgYW5kIERB
QyBhbGdvcyAqLworCQkJCQl0aGlzX3NhY2tfbG93ZXN0X25ld2FjayA9IHRwMS0+cmVjLmRhdGEu
dHNuOworCQkJCQl0cDEtPndob1RvLT5zYXdfbmV3YWNrID0gMTsKKworCQkJCQlpZiAodHAxLT5z
bmRfY291bnQgPCAyKSB7CisJCQkJCQkvKgorCQkJCQkJICogVHJ1ZSBub24tcmV0cmFuc21pdHRl
ZAorCQkJCQkJICogY2h1bmsKKwkJCQkJCSAqLworCQkJCQkJdHAxLT53aG9Uby0+bmV0X2FjazIg
Kz0KKwkJCQkJCQl0cDEtPnNlbmRfc2l6ZTsKKworCQkJCQkJLyogdXBkYXRlIFJUTyB0b28/ICov
CisJCQkJCQlpZiAodHAxLT5kb19ydHQpIHsKKwkJCQkJCQlpZiAocnRvX29rICYmCisJCQkJCQkJ
ICAgIHNjdHBfY2FsY3VsYXRlX3J0byhzdGNiLAorCQkJCQkJCQkJICAgICAgICZzdGNiLT5hc29j
LAorCQkJCQkJCQkJICAgICAgIHRwMS0+d2hvVG8sCisJCQkJCQkJCQkgICAgICAgJnRwMS0+c2Vu
dF9yY3ZfdGltZSwKKwkJCQkJCQkJCSAgICAgICBTQ1RQX1JUVF9GUk9NX0RBVEEpKSB7CisJCQkJ
CQkJCXJ0b19vayA9IDA7CisJCQkJCQkJfQorCQkJCQkJCWlmICh0cDEtPndob1RvLT5ydG9fbmVl
ZGVkID09IDApIHsKKwkJCQkJCQkJdHAxLT53aG9Uby0+cnRvX25lZWRlZCA9IDE7CisJCQkJCQkJ
fQorCQkJCQkJCXRwMS0+ZG9fcnR0ID0gMDsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQkvKgorCQkJ
CQkgKiBDTVQ6IENVQ3YyIGFsZ29yaXRobS4gRnJvbSB0aGUKKwkJCQkJICogY3VtYWNrJ2QgVFNO
cywgZm9yIGVhY2ggVFNOIGJlaW5nCisJCQkJCSAqIGFja2VkIGZvciB0aGUgZmlyc3QgdGltZSwg
c2V0IHRoZQorCQkJCQkgKiBmb2xsb3dpbmcgdmFyaWFibGVzIGZvciB0aGUKKwkJCQkJICogY29y
cmVzcCBkZXN0aW5hdGlvbi4KKwkJCQkJICogbmV3X3BzZXVkb19jdW1hY2sgd2lsbCB0cmlnZ2Vy
IGEKKwkJCQkJICogY3duZCB1cGRhdGUuCisJCQkJCSAqIGZpbmRfKHJ0eF8pcHNldWRvX2N1bWFj
ayB3aWxsCisJCQkJCSAqIHRyaWdnZXIgc2VhcmNoIGZvciB0aGUgbmV4dAorCQkJCQkgKiBleHBl
Y3RlZCAocnR4LSlwc2V1ZG8tY3VtYWNrLgorCQkJCQkgKi8KKwkJCQkJdHAxLT53aG9Uby0+bmV3
X3BzZXVkb19jdW1hY2sgPSAxOworCQkJCQl0cDEtPndob1RvLT5maW5kX3BzZXVkb19jdW1hY2sg
PSAxOworCQkJCQl0cDEtPndob1RvLT5maW5kX3J0eF9wc2V1ZG9fY3VtYWNrID0gMTsKKwkJCQkJ
aWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfU0FDS19MT0dH
SU5HX0VOQUJMRSkgeworCQkJCQkJc2N0cF9sb2dfc2Fjayhhc29jLT5sYXN0X2Fja2VkX3NlcSwK
KwkJCQkJCSAgICAgICAgICAgICAgY3VtX2FjaywKKwkJCQkJCSAgICAgICAgICAgICAgdHAxLT5y
ZWMuZGF0YS50c24sCisJCQkJCQkgICAgICAgICAgICAgIDAsCisJCQkJCQkgICAgICAgICAgICAg
IDAsCisJCQkJCQkgICAgICAgICAgICAgIFNDVFBfTE9HX1RTTl9BQ0tFRCk7CisJCQkJCX0KKwkJ
CQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9M
T0dHSU5HX0VOQUJMRSkgeworCQkJCQkJc2N0cF9sb2dfY3duZChzdGNiLCB0cDEtPndob1RvLCB0
cDEtPnJlYy5kYXRhLnRzbiwgU0NUUF9DV05EX0xPR19GUk9NX1NBQ0spOworCQkJCQl9CisJCQkJ
fQorCQkJCWlmICh0cDEtPnNlbnQgPT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKKwkJCQkJc2N0
cF91Y291bnRfZGVjcihhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOworI2lmZGVmIFNDVFBf
QVVESVRJTkdfRU5BQkxFRAorCQkJCQlzY3RwX2F1ZGl0X2xvZygweEIzLAorCQkJCQkgICAgICAg
ICAgICAgICAoYXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5fY250ICYgMHgwMDAwMDBmZikpOworI2Vu
ZGlmCisJCQkJfQorCQkJCWlmICh0cDEtPnJlYy5kYXRhLmNodW5rX3dhc19yZXZva2VkKSB7CisJ
CQkJCS8qIGRlZmxhdGUgdGhlIGN3bmQgKi8KKwkJCQkJdHAxLT53aG9Uby0+Y3duZCAtPSB0cDEt
PmJvb2tfc2l6ZTsKKwkJCQkJdHAxLT5yZWMuZGF0YS5jaHVua193YXNfcmV2b2tlZCA9IDA7CisJ
CQkJfQorCQkJCWlmICh0cDEtPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9OUl9BQ0tFRCkgeworCQkJ
CQl0cDEtPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX0FDS0VEOworCQkJCX0KKwkJCX0KKwkJfSBlbHNl
IHsKKwkJCWJyZWFrOworCQl9CisJfQorCWJpZ2dlc3RfdHNuX25ld2x5X2Fja2VkID0gYmlnZ2Vz
dF90c25fYWNrZWQgPSBsYXN0X3RzbjsKKwkvKiBhbHdheXMgc2V0IHRoaXMgdXAgdG8gY3VtLWFj
ayAqLworCWFzb2MtPnRoaXNfc2Fja19oaWdoZXN0X2dhcCA9IGxhc3RfdHNuOworCisJaWYgKChu
dW1fc2VnID4gMCkgfHwgKG51bV9ucl9zZWcgPiAwKSkgeworCQkvKgorCQkgKiB0aGlzU2Fja0hp
Z2hlc3RHYXAgd2lsbCBpbmNyZWFzZSB3aGlsZSBoYW5kbGluZyBORVcKKwkJICogc2VnbWVudHMg
dGhpc19zYWNrX2hpZ2hlc3RfbmV3YWNrIHdpbGwgaW5jcmVhc2Ugd2hpbGUKKwkJICogaGFuZGxp
bmcgTkVXTFkgQUNLRUQgY2h1bmtzLiB0aGlzX3NhY2tfbG93ZXN0X25ld2FjayBpcworCQkgKiB1
c2VkIGZvciBDTVQgREFDIGFsZ28uIHNhd19uZXdhY2sgd2lsbCBhbHNvIGNoYW5nZS4KKwkJICov
CisJCWlmIChzY3RwX2hhbmRsZV9zZWdtZW50cyhtLCAmb2Zmc2V0X3NlZywgc3RjYiwgYXNvYywg
bGFzdF90c24sICZiaWdnZXN0X3Rzbl9hY2tlZCwKKwkJCSZiaWdnZXN0X3Rzbl9uZXdseV9hY2tl
ZCwgJnRoaXNfc2Fja19sb3dlc3RfbmV3YWNrLAorCQkJbnVtX3NlZywgbnVtX25yX3NlZywgJnJ0
b19vaykpIHsKKwkJCXdha2VfaGltKys7CisJCX0KKwkJLyoKKwkJICogdmFsaWRhdGUgdGhlIGJp
Z2dlc3RfdHNuX2Fja2VkIGluIHRoZSBnYXAgYWNrcyBpZgorCQkgKiBzdHJpY3QgYWRoZXJlbmNl
IGlzIHdhbnRlZC4KKwkJICovCisJCWlmIChTQ1RQX1RTTl9HRShiaWdnZXN0X3Rzbl9hY2tlZCwg
c2VuZF9zKSkgeworCQkJLyoKKwkJCSAqIHBlZXIgaXMgZWl0aGVyIGNvbmZ1c2VkIG9yIHdlIGFy
ZSB1bmRlcgorCQkJICogYXR0YWNrLiBXZSBtdXN0IGFib3J0LgorCQkJICovCisJCQlTQ1RQX1BS
SU5URigiSG9wZWxlc3MgcGVlciEgYmlnZ2VzdF90c25fYWNrZWQ6JXggbGFyZ2VzdCBzZXE6JXhc
biIsCisJCQkJICAgIGJpZ2dlc3RfdHNuX2Fja2VkLCBzZW5kX3MpOworCQkJZ290byBob3BlbGVz
c19wZWVyOworCQl9CisJfQorCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworCS8qIGNhbmNlbCBBTEwgVDMtc2VuZCB0aW1lciBpZiBhY2N1bSBtb3ZlZCAqLwor
CS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCWlmIChhc29j
LT5zY3RwX2NtdF9vbl9vZmYgPiAwKSB7CisJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0
cywgc2N0cF9uZXh0KSB7CisJCQlpZiAobmV0LT5uZXdfcHNldWRvX2N1bWFjaykKKwkJCQlzY3Rw
X3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX1NFTkQsIHN0Y2ItPnNjdHBfZXAsCisJCQkJICAg
ICAgICAgICAgICAgIHN0Y2IsIG5ldCwKKwkJCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1ND
VFBfSU5EQVRBICsgU0NUUF9MT0NfMzEpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGFjY3VtX21v
dmVkKSB7CisJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgewor
CQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfU0VORCwgc3RjYi0+c2N0cF9lcCwK
KwkJCQkgICAgICAgICAgICAgICAgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBT
Q1RQX0xPQ18zMik7CisJCQl9CisJCX0KKwl9CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworCS8qIGRyb3AgdGhlIGFja2VkIGNodW5rcyBmcm9tIHRoZSBz
ZW50cXVldWUgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCisJYXNvYy0+bGFzdF9hY2tlZF9zZXEgPSBjdW1fYWNrOworCisJVEFJTFFfRk9SRUFDSF9T
QUZFKHRwMSwgJmFzb2MtPnNlbnRfcXVldWUsIHNjdHBfbmV4dCwgdHAyKSB7CisJCWlmIChTQ1RQ
X1RTTl9HVCh0cDEtPnJlYy5kYXRhLnRzbiwgY3VtX2FjaykpIHsKKwkJCWJyZWFrOworCQl9CisJ
CWlmICh0cDEtPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9OUl9BQ0tFRCkgeworCQkJaWYgKGFzb2Mt
PnN0cm1vdXRbdHAxLT5yZWMuZGF0YS5zaWRdLmNodW5rc19vbl9xdWV1ZXMgPiAwKSB7CisJCQkJ
YXNvYy0+c3RybW91dFt0cDEtPnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcy0tOworI2lm
ZGVmIElOVkFSSUFOVFMKKwkJCX0gZWxzZSB7CisJCQkJcGFuaWMoIk5vIGNodW5rcyBvbiB0aGUg
cXVldWVzIGZvciBzaWQgJXUuIiwgdHAxLT5yZWMuZGF0YS5zaWQpOworI2VuZGlmCisJCQl9CisJ
CX0KKwkJaWYgKChhc29jLT5zdHJtb3V0W3RwMS0+cmVjLmRhdGEuc2lkXS5jaHVua3Nfb25fcXVl
dWVzID09IDApICYmCisJCSAgICAoYXNvYy0+c3RybW91dFt0cDEtPnJlYy5kYXRhLnNpZF0uc3Rh
dGUgPT0gU0NUUF9TVFJFQU1fUkVTRVRfUEVORElORykgJiYKKwkJICAgIFRBSUxRX0VNUFRZKCZh
c29jLT5zdHJtb3V0W3RwMS0+cmVjLmRhdGEuc2lkXS5vdXRxdWV1ZSkpIHsKKwkJCWFzb2MtPnRy
aWdnZXJfcmVzZXQgPSAxOworCQl9CisJCVRBSUxRX1JFTU9WRSgmYXNvYy0+c2VudF9xdWV1ZSwg
dHAxLCBzY3RwX25leHQpOworCQlpZiAoUFJfU0NUUF9FTkFCTEVEKHRwMS0+ZmxhZ3MpKSB7CisJ
CQlpZiAoYXNvYy0+cHJfc2N0cF9jbnQgIT0gMCkKKwkJCQlhc29jLT5wcl9zY3RwX2NudC0tOwor
CQl9CisJCWFzb2MtPnNlbnRfcXVldWVfY250LS07CisJCWlmICh0cDEtPmRhdGEpIHsKKwkJCS8q
IHNhX2lnbm9yZSBOT19OVUxMX0NISyAqLworCQkJc2N0cF9mcmVlX2J1ZnNwYWNlKHN0Y2IsIGFz
b2MsIHRwMSwgMSk7CisJCQlzY3RwX21fZnJlZW0odHAxLT5kYXRhKTsKKwkJCXRwMS0+ZGF0YSA9
IE5VTEw7CisJCQlpZiAoYXNvYy0+cHJzY3RwX3N1cHBvcnRlZCAmJiBQUl9TQ1RQX0JVRl9FTkFC
TEVEKHRwMS0+ZmxhZ3MpKSB7CisJCQkJYXNvYy0+c2VudF9xdWV1ZV9jbnRfcmVtb3ZlYWJsZS0t
OworCQkJfQorCQl9CisJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkg
JiBTQ1RQX1NBQ0tfTE9HR0lOR19FTkFCTEUpIHsKKwkJCXNjdHBfbG9nX3NhY2soYXNvYy0+bGFz
dF9hY2tlZF9zZXEsCisJCQkgICAgICAgICAgICAgIGN1bV9hY2ssCisJCQkgICAgICAgICAgICAg
IHRwMS0+cmVjLmRhdGEudHNuLAorCQkJICAgICAgICAgICAgICAwLAorCQkJICAgICAgICAgICAg
ICAwLAorCQkJICAgICAgICAgICAgICBTQ1RQX0xPR19GUkVFX1NFTlQpOworCQl9CisJCXNjdHBf
ZnJlZV9hX2NodW5rKHN0Y2IsIHRwMSwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJd2FrZV9oaW0r
KzsKKwl9CisJaWYgKFRBSUxRX0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSAmJiAoYXNvYy0+dG90
YWxfZmxpZ2h0ID4gMCkpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCXBhbmljKCJXYXJuaW5nIGZs
aWdodCBzaXplIGlzIHBvc2l0aXZlIGFuZCBzaG91bGQgYmUgMCIpOworI2Vsc2UKKwkJU0NUUF9Q
UklOVEYoIldhcm5pbmcgZmxpZ2h0IHNpemUgaW5jb3JyZWN0IHNob3VsZCBiZSAwIGlzICVkXG4i
LAorCQkgICAgICAgICAgICBhc29jLT50b3RhbF9mbGlnaHQpOworI2VuZGlmCisJCWFzb2MtPnRv
dGFsX2ZsaWdodCA9IDA7CisJfQorCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWlmIChz
dGNiLT5zY3RwX2VwLT5yZWN2X2NhbGxiYWNrKSB7CisJCWlmIChzdGNiLT5zY3RwX3NvY2tldCkg
eworCQkJdWludDMyX3QgaW5xdWV1ZV9ieXRlcywgc2JfZnJlZV9ub3c7CisJCQlzdHJ1Y3Qgc2N0
cF9pbnBjYiAqaW5wOworCisJCQlpbnAgPSBzdGNiLT5zY3RwX2VwOworCQkJaW5xdWV1ZV9ieXRl
cyA9IHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgLSAoc3RjYi0+YXNvYy5jaHVu
a3Nfb25fb3V0X3F1ZXVlICogc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspKTsKKwkJCXNi
X2ZyZWVfbm93ID0gU0NUUF9TQl9MSU1JVF9TTkQoc3RjYi0+c2N0cF9zb2NrZXQpIC0gKGlucXVl
dWVfYnl0ZXMgKyBzdGNiLT5hc29jLnNiX3NlbmRfcmVzdik7CisKKwkJCS8qIGNoZWNrIGlmIHRo
ZSBhbW91bnQgZnJlZSBpbiB0aGUgc2VuZCBzb2NrZXQgYnVmZmVyIGNyb3NzZWQgdGhlIHRocmVz
aG9sZCAqLworCQkJaWYgKGlucC0+c2VuZF9jYWxsYmFjayAmJgorCQkJICAgKCgoaW5wLT5zZW5k
X3NiX3RocmVzaG9sZCA+IDApICYmIChzYl9mcmVlX25vdyA+PSBpbnAtPnNlbmRfc2JfdGhyZXNo
b2xkKSkgfHwKKwkJCSAgICAoaW5wLT5zZW5kX3NiX3RocmVzaG9sZCA9PSAwKSkpIHsKKwkJCQlh
dG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKKwkJCQlpbnAtPnNlbmRfY2FsbGJhY2soc3RjYi0+c2N0cF9zb2NrZXQsIHNiX2Zy
ZWVfbm93LCBpbnAtPnVscF9pbmZvKTsKKwkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJCWF0
b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCX0KKwkJfQorCX0g
ZWxzZSBpZiAoKHdha2VfaGltKSAmJiAoc3RjYi0+c2N0cF9zb2NrZXQpKSB7CisjZWxzZQorCS8q
IHNhX2lnbm9yZSBOT19OVUxMX0NISyAqLworCWlmICgod2FrZV9oaW0pICYmIChzdGNiLT5zY3Rw
X3NvY2tldCkpIHsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorCQlzdHJ1Y3Qgc29ja2V0ICpzbzsKKworI2VuZGlmCisJCVNPQ0tCVUZf
TE9DSygmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3NuZCk7CisJCWlmIChTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1dBS0VfTE9HR0lOR19FTkFCTEUpIHsKKwkJCXNj
dHBfd2FrZXVwX2xvZyhzdGNiLCB3YWtlX2hpbSwgU0NUUF9XQUtFU05EX0ZST01fU0FDSyk7CisJ
CX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJ
c28gPSBTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKTsKKwkJYXRvbWljX2FkZF9pbnQoJnN0Y2It
PmFzb2MucmVmY250LCAxKTsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlTQ1RQX1NPQ0tF
VF9MT0NLKHNvLCAxKTsKKwkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJYXRvbWljX3N1YnRyYWN0
X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFND
VFBfU1RBVEVfQ0xPU0VEX1NPQ0tFVCkgeworCQkJLyogYXNzb2Mgd2FzIGZyZWVkIHdoaWxlIHdl
IHdlcmUgdW5sb2NrZWQgKi8KKwkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisJCQlyZXR1
cm47CisJCX0KKyNlbmRpZgorCQlzY3RwX3Nvd3dha2V1cF9sb2NrZWQoc3RjYi0+c2N0cF9lcCwg
c3RjYi0+c2N0cF9zb2NrZXQpOworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworI2VuZGlmCisJfSBl
bHNlIHsKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBf
V0FLRV9MT0dHSU5HX0VOQUJMRSkgeworCQkJc2N0cF93YWtldXBfbG9nKHN0Y2IsIHdha2VfaGlt
LCBTQ1RQX05PV0FLRV9GUk9NX1NBQ0spOworCQl9CisJfQorCisJaWYgKGFzb2MtPmZhc3RfcmV0
cmFuX2xvc3NfcmVjb3ZlcnkgJiYgYWNjdW1fbW92ZWQpIHsKKwkJaWYgKFNDVFBfVFNOX0dFKGFz
b2MtPmxhc3RfYWNrZWRfc2VxLCBhc29jLT5mYXN0X3JlY292ZXJ5X3RzbikpIHsKKwkJCS8qIFNl
dHVwIHNvIHdlIHdpbGwgZXhpdCBSRkMyNTgyIGZhc3QgcmVjb3ZlcnkgKi8KKwkJCXdpbGxfZXhp
dF9mYXN0X3JlY292ZXJ5ID0gMTsKKwkJfQorCX0KKwkvKgorCSAqIENoZWNrIGZvciByZXZva2Vk
IGZyYWdtZW50czoKKwkgKgorCSAqIGlmIFByZXZpb3VzIHNhY2sgLSBIYWQgbm8gZnJhZ3MgdGhl
biB3ZSBjYW4ndCBoYXZlIGFueSByZXZva2VkIGlmCisJICogUHJldmlvdXMgc2FjayAtIEhhZCBm
cmFnJ3MgdGhlbiAtIElmIHdlIG5vdyBoYXZlIGZyYWdzIGFrYQorCSAqIG51bV9zZWcgPiAwIGNh
bGwgc2N0cF9jaGVja19mb3JfcmV2b2tlZCgpIHRvIHRlbGwgaWYgcGVlciByZXZva2VkCisJICog
c29tZSBvZiB0aGVtLiBlbHNlIC0gVGhlIHBlZXIgcmV2b2tlZCBhbGwgQUNLRUQgZnJhZ21lbnRz
LCBzaW5jZQorCSAqIHdlIGhhZCBzb21lIGJlZm9yZSBhbmQgbm93IHdlIGhhdmUgTk9ORS4KKwkg
Ki8KKworCWlmIChudW1fc2VnKSB7CisJCXNjdHBfY2hlY2tfZm9yX3Jldm9rZWQoc3RjYiwgYXNv
YywgY3VtX2FjaywgYmlnZ2VzdF90c25fYWNrZWQpOworCQlhc29jLT5zYXdfc2Fja193aXRoX2Zy
YWdzID0gMTsKKwl9IGVsc2UgaWYgKGFzb2MtPnNhd19zYWNrX3dpdGhfZnJhZ3MpIHsKKwkJaW50
IGNudF9yZXZva2VkID0gMDsKKworCQkvKiBQZWVyIHJldm9rZWQgYWxsIGRnJ3MgbWFya2VkIG9y
IGFja2VkICovCisJCVRBSUxRX0ZPUkVBQ0godHAxLCAmYXNvYy0+c2VudF9xdWV1ZSwgc2N0cF9u
ZXh0KSB7CisJCQlpZiAodHAxLT5zZW50ID09IFNDVFBfREFUQUdSQU1fQUNLRUQpIHsKKwkJCQl0
cDEtPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1NFTlQ7CisJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRkxJR0hUX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJ
CXNjdHBfbWlzY19pbnRzKFNDVFBfRkxJR0hUX0xPR19VUF9SRVZPS0UsCisJCQkJCSAgICAgICAg
ICAgICAgIHRwMS0+d2hvVG8tPmZsaWdodF9zaXplLAorCQkJCQkgICAgICAgICAgICAgICB0cDEt
PmJvb2tfc2l6ZSwKKwkJCQkJICAgICAgICAgICAgICAgKHVpbnQzMl90KSh1aW50cHRyX3QpdHAx
LT53aG9UbywKKwkJCQkJICAgICAgICAgICAgICAgdHAxLT5yZWMuZGF0YS50c24pOworCQkJCX0K
KwkJCQlzY3RwX2ZsaWdodF9zaXplX2luY3JlYXNlKHRwMSk7CisJCQkJc2N0cF90b3RhbF9mbGln
aHRfaW5jcmVhc2Uoc3RjYiwgdHAxKTsKKwkJCQl0cDEtPnJlYy5kYXRhLmNodW5rX3dhc19yZXZv
a2VkID0gMTsKKwkJCQkvKgorCQkJCSAqIFRvIGVuc3VyZSB0aGF0IHRoaXMgaW5jcmVhc2UgaW4K
KwkJCQkgKiBmbGlnaHRzaXplLCB3aGljaCBpcyBhcnRpZmljaWFsLAorCQkJCSAqIGRvZXMgbm90
IHRocm90dGxlIHRoZSBzZW5kZXIsIHdlCisJCQkJICogYWxzbyBpbmNyZWFzZSB0aGUgY3duZAor
CQkJCSAqIGFydGlmaWNpYWxseS4KKwkJCQkgKi8KKwkJCQl0cDEtPndob1RvLT5jd25kICs9IHRw
MS0+Ym9va19zaXplOworCQkJCWNudF9yZXZva2VkKys7CisJCQl9CisJCX0KKwkJaWYgKGNudF9y
ZXZva2VkKSB7CisJCQlyZW5lZ2VkX2FsbCA9IDE7CisJCX0KKwkJYXNvYy0+c2F3X3NhY2tfd2l0
aF9mcmFncyA9IDA7CisJfQorCWlmIChudW1fbnJfc2VnID4gMCkKKwkJYXNvYy0+c2F3X3NhY2tf
d2l0aF9ucl9mcmFncyA9IDE7CisJZWxzZQorCQlhc29jLT5zYXdfc2Fja193aXRoX25yX2ZyYWdz
ID0gMDsKKworCS8qIEpSUyAtIFVzZSB0aGUgY29uZ2VzdGlvbiBjb250cm9sIGdpdmVuIGluIHRo
ZSBDQyBtb2R1bGUgKi8KKwlpZiAoZWNuZV9zZWVuID09IDApIHsKKwkJVEFJTFFfRk9SRUFDSChu
ZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKKwkJCWlmIChuZXQtPm5ldF9hY2syID4gMCkg
eworCQkJCS8qCisJCQkJICogS2FybidzIHJ1bGUgYXBwbGllcyB0byBjbGVhcmluZyBlcnJvciBj
b3VudCwgdGhpcworCQkJCSAqIGlzIG9wdGlvbmFsLgorCQkJCSAqLworCQkJCW5ldC0+ZXJyb3Jf
Y291bnQgPSAwOworCQkJCWlmICghKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFC
TEUpKSB7CisJCQkJCS8qIGFkZHIgY2FtZSBnb29kICovCisJCQkJCW5ldC0+ZGVzdF9zdGF0ZSB8
PSBTQ1RQX0FERFJfUkVBQ0hBQkxFOworCQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllf
SU5URVJGQUNFX1VQLCBzdGNiLAorCQkJCQkgICAgICAgICAgICAgICAgMCwgKHZvaWQgKiluZXQs
IFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQkJfQorCisJCQkJaWYgKG5ldCA9PSBzdGNiLT5hc29j
LnByaW1hcnlfZGVzdGluYXRpb24pIHsKKwkJCQkJaWYgKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSB7
CisJCQkJCQkvKiByZWxlYXNlIHRoZSBhbHRlcm5hdGUsIHByaW1hcnkgaXMgZ29vZCAqLworCQkJ
CQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKTsKKwkJCQkJCXN0
Y2ItPmFzb2MuYWx0ZXJuYXRlID0gTlVMTDsKKwkJCQkJfQorCQkJCX0KKworCQkJCWlmIChuZXQt
PmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYpIHsKKwkJCQkJbmV0LT5kZXN0X3N0YXRlICY9IH5T
Q1RQX0FERFJfUEY7CisJCQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRC
RUFULAorCQkJCQkgICAgICAgICAgICAgICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAorCQkJ
CQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfMzMpOwor
CQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIHN0Y2ItPnNj
dHBfZXAsIHN0Y2IsIG5ldCk7CisJCQkJCWFzb2MtPmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBk
YXRlX2V4aXRfcGYoc3RjYiwgbmV0KTsKKwkJCQkJLyogRG9uZSB3aXRoIHRoaXMgbmV0ICovCisJ
CQkJCW5ldC0+bmV0X2FjayA9IDA7CisJCQkJfQorCQkJCS8qIHJlc3RvcmUgYW55IGRvdWJsZWQg
dGltZXJzICovCisJCQkJbmV0LT5SVE8gPSAobmV0LT5sYXN0c2EgPj4gU0NUUF9SVFRfU0hJRlQp
ICsgbmV0LT5sYXN0c3Y7CisJCQkJaWYgKG5ldC0+UlRPIDwgc3RjYi0+YXNvYy5taW5ydG8pIHsK
KwkJCQkJbmV0LT5SVE8gPSBzdGNiLT5hc29jLm1pbnJ0bzsKKwkJCQl9CisJCQkJaWYgKG5ldC0+
UlRPID4gc3RjYi0+YXNvYy5tYXhydG8pIHsKKwkJCQkJbmV0LT5SVE8gPSBzdGNiLT5hc29jLm1h
eHJ0bzsKKwkJCQl9CisJCQl9CisJCX0KKwkJYXNvYy0+Y2NfZnVuY3Rpb25zLnNjdHBfY3duZF91
cGRhdGVfYWZ0ZXJfc2FjayhzdGNiLCBhc29jLCBhY2N1bV9tb3ZlZCwgcmVuZWdlZF9hbGwsIHdp
bGxfZXhpdF9mYXN0X3JlY292ZXJ5KTsKKwl9CisKKwlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNl
bnRfcXVldWUpKSB7CisJCS8qIG5vdGhpbmcgbGVmdCBpbi1mbGlnaHQgKi8KKwkJVEFJTFFfRk9S
RUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKKwkJCS8qIHN0b3AgYWxsIHRpbWVy
cyAqLworCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TRU5ELCBzdGNiLT5zY3Rw
X2VwLAorCQkJICAgICAgICAgICAgICAgIHN0Y2IsIG5ldCwKKwkJCSAgICAgICAgICAgICAgICBT
Q1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18zNCk7CisJCQluZXQtPmZsaWdodF9zaXpl
ID0gMDsKKwkJCW5ldC0+cGFydGlhbF9ieXRlc19hY2tlZCA9IDA7CisJCX0KKwkJYXNvYy0+dG90
YWxfZmxpZ2h0ID0gMDsKKwkJYXNvYy0+dG90YWxfZmxpZ2h0X2NvdW50ID0gMDsKKwl9CisKKwkv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBOb3cgd2hhdCBhYm91dCBz
aHV0ZG93biBpc3N1ZXMgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
KwlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRfcXVldWUpICYmIFRBSUxRX0VNUFRZKCZhc29j
LT5zZW50X3F1ZXVlKSkgeworCQkvKiBub3RoaW5nIGxlZnQgb24gc2VuZHF1ZXVlLi4gY29uc2lk
ZXIgZG9uZSAqLworCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYg
U0NUUF9MT0dfUldORF9FTkFCTEUpIHsKKwkJCXNjdHBfbG9nX3J3bmRfc2V0KFNDVFBfU0VUX1BF
RVJfUldORF9WSUFfU0FDSywKKwkJCSAgICAgICAgICAgICAgICAgIGFzb2MtPnBlZXJzX3J3bmQs
IDAsIDAsIGFfcnduZCk7CisJCX0KKwkJYXNvYy0+cGVlcnNfcnduZCA9IGFfcnduZDsKKwkJaWYg
KGFzb2MtPnBlZXJzX3J3bmQgPCBzdGNiLT5zY3RwX2VwLT5zY3RwX2VwLnNjdHBfc3dzX3NlbmRl
cikgeworCQkJLyogU1dTIHNlbmRlciBzaWRlIGVuZ2FnZXMgKi8KKwkJCWFzb2MtPnBlZXJzX3J3
bmQgPSAwOworCQl9CisJCS8qIGNsZWFuIHVwICovCisJCWlmICgoYXNvYy0+c3RyZWFtX3F1ZXVl
X2NudCA9PSAxKSAmJgorCQkgICAgKChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05f
UEVORElORykgfHwKKwkJICAgICAoU0NUUF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9T
SFVURE9XTl9SRUNFSVZFRCkpICYmCisJCSAgICAoKCphc29jLT5zc19mdW5jdGlvbnMuc2N0cF9z
c19pc191c2VyX21zZ3NfaW5jb21wbGV0ZSkoc3RjYiwgYXNvYykpKSB7CisJCQlTQ1RQX0FERF9T
VUJTVEFURShzdGNiLCBTQ1RQX1NUQVRFX1BBUlRJQUxfTVNHX0xFRlQpOworCQl9CisJCWlmICgo
KGFzb2MtPnN0YXRlICYgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKSB8fAorCQkgICAgIChT
Q1RQX0dFVF9TVEFURShzdGNiKSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSkgJiYK
KwkJICAgIChhc29jLT5zdHJlYW1fcXVldWVfY250ID09IDEpICYmCisJCSAgICAoYXNvYy0+c3Rh
dGUgJiBTQ1RQX1NUQVRFX1BBUlRJQUxfTVNHX0xFRlQpKSB7CisJCQlzdHJ1Y3QgbWJ1ZiAqb3Bf
ZXJyOworCisJCQkqYWJvcnRfbm93ID0gMTsKKwkJCS8qIFhYWCAqLworCQkJb3BfZXJyID0gc2N0
cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1VTRVJfSU5JVElBVEVEX0FCVCwgIiIpOworCQkJ
c3RjYi0+c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsg
U0NUUF9MT0NfMzU7CisJCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAs
IHN0Y2IsIG9wX2VyciwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCXJldHVybjsKKwkJfQorCQlp
ZiAoKGFzb2MtPnN0YXRlICYgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKSAmJgorCQkgICAg
KGFzb2MtPnN0cmVhbV9xdWV1ZV9jbnQgPT0gMCkpIHsKKwkJCXN0cnVjdCBzY3RwX25ldHMgKm5l
dHA7CisKKwkJCWlmICgoU0NUUF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9PUEVOKSB8
fAorCQkJICAgIChTQ1RQX0dFVF9TVEFURShzdGNiKSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JF
Q0VJVkVEKSkgeworCQkJCVNDVFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsK
KwkJCX0KKwkJCVNDVFBfU0VUX1NUQVRFKHN0Y2IsIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCk7
CisJCQlzY3RwX3N0b3BfdGltZXJzX2Zvcl9zaHV0ZG93bihzdGNiKTsKKwkJCWlmIChhc29jLT5h
bHRlcm5hdGUpIHsKKwkJCQluZXRwID0gYXNvYy0+YWx0ZXJuYXRlOworCQkJfSBlbHNlIHsKKwkJ
CQluZXRwID0gYXNvYy0+cHJpbWFyeV9kZXN0aW5hdGlvbjsKKwkJCX0KKwkJCXNjdHBfc2VuZF9z
aHV0ZG93bihzdGNiLCBuZXRwKTsKKwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBF
X1NIVVRET1dOLAorCQkJCQkgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0cCk7CisJCQlzY3RwX3Rp
bWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdVQVJELAorCQkJCQkgc3RjYi0+c2N0
cF9lcCwgc3RjYiwgTlVMTCk7CisJCQlyZXR1cm47CisJCX0gZWxzZSBpZiAoKFNDVFBfR0VUX1NU
QVRFKHN0Y2IpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpICYmCisJCQkgICAoYXNv
Yy0+c3RyZWFtX3F1ZXVlX2NudCA9PSAwKSkgeworCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0cDsK
KworCQkJU0NUUF9TVEFUX0RFQ1JfR0FVR0UzMihzY3Rwc19jdXJyZXN0YWIpOworCQkJU0NUUF9T
RVRfU1RBVEUoc3RjYiwgU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCk7CisJCQlzY3RwX3N0
b3BfdGltZXJzX2Zvcl9zaHV0ZG93bihzdGNiKTsKKwkJCWlmIChhc29jLT5hbHRlcm5hdGUpIHsK
KwkJCQluZXRwID0gYXNvYy0+YWx0ZXJuYXRlOworCQkJfSBlbHNlIHsKKwkJCQluZXRwID0gYXNv
Yy0+cHJpbWFyeV9kZXN0aW5hdGlvbjsKKwkJCX0KKwkJCXNjdHBfc2VuZF9zaHV0ZG93bl9hY2so
c3RjYiwgbmV0cCk7CisJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVURE9X
TkFDSywKKwkJCSAgICAgICAgICAgICAgICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0cCk7CisJ
CQlyZXR1cm47CisJCX0KKwl9CisJLyoKKwkgKiBOb3cgaGVyZSB3ZSBhcmUgZ29pbmcgdG8gcmVj
eWNsZSBuZXRfYWNrIGZvciBhIGRpZmZlcmVudCB1c2UuLi4KKwkgKiBIRUFEUyBVUC4KKwkgKi8K
KwlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgeworCQluZXQtPm5l
dF9hY2sgPSAwOworCX0KKworCS8qCisJICogQ01UIERBQyBhbGdvcml0aG06IElmIFNBQ0sgREFD
IGZsYWcgd2FzIDAsIHRoZW4gbm8gZXh0cmEgbWFya2luZworCSAqIHRvIGJlIGRvbmUuIFNldHRp
bmcgdGhpc19zYWNrX2xvd2VzdF9uZXdhY2sgdG8gdGhlIGN1bV9hY2sgd2lsbAorCSAqIGF1dG9t
YXRpY2FsbHkgZW5zdXJlIHRoYXQuCisJICovCisJaWYgKChhc29jLT5zY3RwX2NtdF9vbl9vZmYg
PiAwKSAmJgorCSAgICBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY210X3VzZV9kYWMpICYmCisJICAg
IChjbXRfZGFjX2ZsYWcgPT0gMCkpIHsKKwkJdGhpc19zYWNrX2xvd2VzdF9uZXdhY2sgPSBjdW1f
YWNrOworCX0KKwlpZiAoKG51bV9zZWcgPiAwKSB8fCAobnVtX25yX3NlZyA+IDApKSB7CisJCXNj
dHBfc3RyaWtlX2dhcF9hY2tfY2h1bmtzKHN0Y2IsIGFzb2MsIGJpZ2dlc3RfdHNuX2Fja2VkLAor
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWdnZXN0X3Rzbl9uZXdseV9hY2tlZCwgdGhp
c19zYWNrX2xvd2VzdF9uZXdhY2ssIGFjY3VtX21vdmVkKTsKKwl9CisJLyogSlJTIC0gVXNlIHRo
ZSBjb25nZXN0aW9uIGNvbnRyb2wgZ2l2ZW4gaW4gdGhlIENDIG1vZHVsZSAqLworCWFzb2MtPmNj
X2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX2ZyKHN0Y2IsIGFzb2MpOworCisJLyog
Tm93IGFyZSB3ZSBleGl0aW5nIGxvc3MgcmVjb3ZlcnkgPyAqLworCWlmICh3aWxsX2V4aXRfZmFz
dF9yZWNvdmVyeSkgeworCQkvKiBPaywgd2UgbXVzdCBleGl0IGZhc3QgcmVjb3ZlcnkgKi8KKwkJ
YXNvYy0+ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVyeSA9IDA7CisJfQorCWlmICgoYXNvYy0+c2F0
X3QzX2xvc3NfcmVjb3ZlcnkpICYmCisJICAgIFNDVFBfVFNOX0dFKGFzb2MtPmxhc3RfYWNrZWRf
c2VxLCBhc29jLT5zYXRfdDNfcmVjb3ZlcnlfdHNuKSkgeworCQkvKiBlbmQgc2F0ZWxsaXRlIHQz
IGxvc3MgcmVjb3ZlcnkgKi8KKwkJYXNvYy0+c2F0X3QzX2xvc3NfcmVjb3ZlcnkgPSAwOworCX0K
KwkvKgorCSAqIENNVCBGYXN0IHJlY292ZXJ5CisJICovCisJVEFJTFFfRk9SRUFDSChuZXQsICZh
c29jLT5uZXRzLCBzY3RwX25leHQpIHsKKwkJaWYgKG5ldC0+d2lsbF9leGl0X2Zhc3RfcmVjb3Zl
cnkpIHsKKwkJCS8qIE9rLCB3ZSBtdXN0IGV4aXQgZmFzdCByZWNvdmVyeSAqLworCQkJbmV0LT5m
YXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ID0gMDsKKwkJfQorCX0KKworCS8qIEFkanVzdCBhbmQg
c2V0IHRoZSBuZXcgcnduZCB2YWx1ZSAqLworCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9n
Z2luZ19sZXZlbCkgJiBTQ1RQX0xPR19SV05EX0VOQUJMRSkgeworCQlzY3RwX2xvZ19yd25kX3Nl
dChTQ1RQX1NFVF9QRUVSX1JXTkRfVklBX1NBQ0ssCisJCSAgICAgICAgICAgICAgICAgIGFzb2Mt
PnBlZXJzX3J3bmQsIGFzb2MtPnRvdGFsX2ZsaWdodCwgKGFzb2MtPnRvdGFsX2ZsaWdodF9jb3Vu
dCAqIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wZWVyX2NodW5rX29oKSksIGFfcnduZCk7CisJfQor
CWFzb2MtPnBlZXJzX3J3bmQgPSBzY3RwX3Nic3BhY2Vfc3ViKGFfcnduZCwKKwkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpIChhc29jLT50b3RhbF9mbGlnaHQg
KyAoYXNvYy0+dG90YWxfZmxpZ2h0X2NvdW50ICogU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BlZXJf
Y2h1bmtfb2gpKSkpOworCWlmIChhc29jLT5wZWVyc19yd25kIDwgc3RjYi0+c2N0cF9lcC0+c2N0
cF9lcC5zY3RwX3N3c19zZW5kZXIpIHsKKwkJLyogU1dTIHNlbmRlciBzaWRlIGVuZ2FnZXMgKi8K
KwkJYXNvYy0+cGVlcnNfcnduZCA9IDA7CisJfQorCWlmIChhc29jLT5wZWVyc19yd25kID4gb2xk
X3J3bmQpIHsKKwkJd2luX3Byb2JlX3JlY292ZXJ5ID0gMTsKKwl9CisKKwkvKgorCSAqIE5vdyB3
ZSBtdXN0IHNldHVwIHNvIHdlIGhhdmUgYSB0aW1lciB1cCBmb3IgYW55b25lIHdpdGgKKwkgKiBv
dXRzdGFuZGluZyBkYXRhLgorCSAqLworCWRvbmVfb25jZSA9IDA7CithZ2FpbjoKKwlqID0gMDsK
KwlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgeworCQlpZiAod2lu
X3Byb2JlX3JlY292ZXJ5ICYmIChuZXQtPndpbmRvd19wcm9iZSkpIHsKKwkJCXdpbl9wcm9iZV9y
ZWNvdmVyZWQgPSAxOworCQkJLyotCisJCQkgKiBGaW5kIGZpcnN0IGNodW5rIHRoYXQgd2FzIHVz
ZWQgd2l0aAorCQkJICogd2luZG93IHByb2JlIGFuZCBjbGVhciB0aGUgZXZlbnQuIFB1dAorCQkJ
ICogaXQgYmFjayBpbnRvIHRoZSBzZW5kIHF1ZXVlIGFzIGlmIGhhcworCQkJICogbm90IGJlZW4g
c2VudC4KKwkJCSAqLworCQkJVEFJTFFfRk9SRUFDSCh0cDEsICZhc29jLT5zZW50X3F1ZXVlLCBz
Y3RwX25leHQpIHsKKwkJCQlpZiAodHAxLT53aW5kb3dfcHJvYmUpIHsKKwkJCQkJc2N0cF93aW5k
b3dfcHJvYmVfcmVjb3Zlcnkoc3RjYiwgYXNvYywgdHAxKTsKKwkJCQkJYnJlYWs7CisJCQkJfQor
CQkJfQorCQl9CisJCWlmIChuZXQtPmZsaWdodF9zaXplKSB7CisJCQlqKys7CisJCQlpZiAoIVND
VFBfT1NfVElNRVJfUEVORElORygmbmV0LT5yeHRfdGltZXIudGltZXIpKSB7CisJCQkJc2N0cF90
aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0VORCwKKwkJCQkgICAgICAgICAgICAgICAgIHN0
Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCk7CisJCQl9CisJCQlpZiAobmV0LT53aW5kb3dfcHJvYmUp
IHsKKwkJCQluZXQtPndpbmRvd19wcm9iZSA9IDA7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAo
bmV0LT53aW5kb3dfcHJvYmUpIHsKKwkJCQkvKiBJbiB3aW5kb3cgcHJvYmVzIHdlIG11c3QgYXNz
dXJlIGEgdGltZXIgaXMgc3RpbGwgcnVubmluZyB0aGVyZSAqLworCQkJCWlmICghU0NUUF9PU19U
SU1FUl9QRU5ESU5HKCZuZXQtPnJ4dF90aW1lci50aW1lcikpIHsKKwkJCQkJc2N0cF90aW1lcl9z
dGFydChTQ1RQX1RJTUVSX1RZUEVfU0VORCwKKwkJCQkJICAgICAgICAgICAgICAgICBzdGNiLT5z
Y3RwX2VwLCBzdGNiLCBuZXQpOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoU0NUUF9PU19USU1FUl9Q
RU5ESU5HKCZuZXQtPnJ4dF90aW1lci50aW1lcikpIHsKKwkJCQlzY3RwX3RpbWVyX3N0b3AoU0NU
UF9USU1FUl9UWVBFX1NFTkQsIHN0Y2ItPnNjdHBfZXAsCisJCQkJICAgICAgICAgICAgICAgIHN0
Y2IsIG5ldCwKKwkJCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NU
UF9MT0NfMzYpOworCQkJfQorCQl9CisJfQorCWlmICgoaiA9PSAwKSAmJgorCSAgICAoIVRBSUxR
X0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSkgJiYKKwkgICAgKGFzb2MtPnNlbnRfcXVldWVfcmV0
cmFuX2NudCA9PSAwKSAmJgorCSAgICAod2luX3Byb2JlX3JlY292ZXJlZCA9PSAwKSAmJgorCSAg
ICAoZG9uZV9vbmNlID09IDApKSB7CisJCS8qIGh1aCwgdGhpcyBzaG91bGQgbm90IGhhcHBlbiB1
bmxlc3MgYWxsIHBhY2tldHMKKwkJICogYXJlIFBSLVNDVFAgYW5kIG1hcmtlZCB0byBza2lwIG9m
IGNvdXJzZS4KKwkJICovCisJCWlmIChzY3RwX2ZzX2F1ZGl0KGFzb2MpKSB7CisJCQlUQUlMUV9G
T1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgeworCQkJCW5ldC0+ZmxpZ2h0X3Np
emUgPSAwOworCQkJfQorCQkJYXNvYy0+dG90YWxfZmxpZ2h0ID0gMDsKKwkJCWFzb2MtPnRvdGFs
X2ZsaWdodF9jb3VudCA9IDA7CisJCQlhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9jbnQgPSAwOwor
CQkJVEFJTFFfRk9SRUFDSCh0cDEsICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQpIHsKKwkJ
CQlpZiAodHAxLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKKwkJCQkJc2N0cF9mbGln
aHRfc2l6ZV9pbmNyZWFzZSh0cDEpOworCQkJCQlzY3RwX3RvdGFsX2ZsaWdodF9pbmNyZWFzZShz
dGNiLCB0cDEpOworCQkJCX0gZWxzZSBpZiAodHAxLT5zZW50ID09IFNDVFBfREFUQUdSQU1fUkVT
RU5EKSB7CisJCQkJCXNjdHBfdWNvdW50X2luY3IoYXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5fY250
KTsKKwkJCQl9CisJCQl9CisJCX0KKwkJZG9uZV9vbmNlID0gMTsKKwkJZ290byBhZ2FpbjsKKwl9
CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBI
ZXJlIHdlIHBlcmZvcm0gUFItU0NUUCBwcm9jZWR1cmVzICAgICAgICAqLworCS8qIChzZWN0aW9u
IDQuMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBDMS4gdXBkYXRlIGFkdmFuY2VkUGVl
ckFja1BvaW50ICovCisJaWYgKFNDVFBfVFNOX0dUKGN1bV9hY2ssIGFzb2MtPmFkdmFuY2VkX3Bl
ZXJfYWNrX3BvaW50KSkgeworCQlhc29jLT5hZHZhbmNlZF9wZWVyX2Fja19wb2ludCA9IGN1bV9h
Y2s7CisJfQorCS8qIEMyLiB0cnkgdG8gZnVydGhlciBtb3ZlIGFkdmFuY2VkUGVlckFja1BvaW50
IGFoZWFkICovCisJaWYgKChhc29jLT5wcnNjdHBfc3VwcG9ydGVkKSAmJiAoYXNvYy0+cHJfc2N0
cF9jbnQgPiAwKSkgeworCQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpsY2hrOworCQl1aW50MzJf
dCBvbGRfYWR2X3BlZXJfYWNrX3BvaW50OworCisJCW9sZF9hZHZfcGVlcl9hY2tfcG9pbnQgPSBh
c29jLT5hZHZhbmNlZF9wZWVyX2Fja19wb2ludDsKKwkJbGNoayA9IHNjdHBfdHJ5X2FkdmFuY2Vf
cGVlcl9hY2tfcG9pbnQoc3RjYiwgYXNvYyk7CisJCS8qIEMzLiBTZWUgaWYgd2UgbmVlZCB0byBz
ZW5kIGEgRndkLVRTTiAqLworCQlpZiAoU0NUUF9UU05fR1QoYXNvYy0+YWR2YW5jZWRfcGVlcl9h
Y2tfcG9pbnQsIGN1bV9hY2spKSB7CisJCQkvKgorCQkJICogSVNTVUUgd2l0aCBFQ04sIHNlZSBG
V0QtVFNOIHByb2Nlc3NpbmcuCisJCQkgKi8KKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0xPR19UUllfQURWQU5DRSkgeworCQkJCXNjdHBfbWlzY19p
bnRzKFNDVFBfRldEX1RTTl9DSEVDSywKKwkJCQkgICAgICAgICAgICAgICAweGVlLCBjdW1fYWNr
LCBhc29jLT5hZHZhbmNlZF9wZWVyX2Fja19wb2ludCwKKwkJCQkgICAgICAgICAgICAgICBvbGRf
YWR2X3BlZXJfYWNrX3BvaW50KTsKKwkJCX0KKwkJCWlmIChTQ1RQX1RTTl9HVChhc29jLT5hZHZh
bmNlZF9wZWVyX2Fja19wb2ludCwgb2xkX2Fkdl9wZWVyX2Fja19wb2ludCkpIHsKKwkJCQlzZW5k
X2ZvcndhcmRfdHNuKHN0Y2IsIGFzb2MpOworCQkJfSBlbHNlIGlmIChsY2hrKSB7CisJCQkJLyog
dHJ5IHRvIEZSIGZ3ZC10c24ncyB0aGF0IGdldCBsb3N0IHRvbyAqLworCQkJCWlmIChsY2hrLT5y
ZWMuZGF0YS5md2RfdHNuX2NudCA+PSAzKSB7CisJCQkJCXNlbmRfZm9yd2FyZF90c24oc3RjYiwg
YXNvYyk7CisJCQkJfQorCQkJfQorCQl9CisJCWZvciAoOyBsY2hrICE9IE5VTEw7IGxjaGsgPSBU
QUlMUV9ORVhUKGxjaGssIHNjdHBfbmV4dCkpIHsKKwkJCWlmIChsY2hrLT53aG9UbyAhPSBOVUxM
KSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGxjaGsgIT0gTlVMTCkgeworCQkJLyog
QXNzdXJlIGEgdGltZXIgaXMgdXAgKi8KKwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9U
WVBFX1NFTkQsCisJCQkgICAgICAgICAgICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIGxjaGst
Pndob1RvKTsKKwkJfQorCX0KKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2
ZWwpICYgU0NUUF9TQUNLX1JXTkRfTE9HR0lOR19FTkFCTEUpIHsKKwkJc2N0cF9taXNjX2ludHMo
U0NUUF9TQUNLX1JXTkRfVVBEQVRFLAorCQkgICAgICAgICAgICAgICBhX3J3bmQsCisJCSAgICAg
ICAgICAgICAgIHN0Y2ItPmFzb2MucGVlcnNfcnduZCwKKwkJICAgICAgICAgICAgICAgc3RjYi0+
YXNvYy50b3RhbF9mbGlnaHQsCisJCSAgICAgICAgICAgICAgIHN0Y2ItPmFzb2MudG90YWxfb3V0
cHV0X3F1ZXVlX3NpemUpOworCX0KK30KKwordm9pZAorc2N0cF91cGRhdGVfYWNrZWQoc3RydWN0
IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jaHVuayAqY3AsIGludCAqYWJv
cnRfZmxhZykKK3sKKwkvKiBDb3B5IGN1bS1hY2sgKi8KKwl1aW50MzJfdCBjdW1fYWNrLCBhX3J3
bmQ7CisKKwljdW1fYWNrID0gbnRvaGwoY3AtPmN1bXVsYXRpdmVfdHNuX2Fjayk7CisJLyogQXJy
YW5nZSBzbyBhX3J3bmQgZG9lcyBOT1QgY2hhbmdlICovCisJYV9yd25kID0gc3RjYi0+YXNvYy5w
ZWVyc19yd25kICsgc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQ7CisKKwkvKiBOb3cgY2FsbCB0aGUg
ZXhwcmVzcyBzYWNrIGhhbmRsaW5nICovCisJc2N0cF9leHByZXNzX2hhbmRsZV9zYWNrKHN0Y2Is
IGN1bV9hY2ssIGFfcnduZCwgYWJvcnRfZmxhZywgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitzY3Rw
X2tpY2tfcHJzY3RwX3Jlb3JkZXJfcXVldWUoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkJICAg
ICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9pbiAqc3RybWluKQoreworCXN0cnVjdCBzY3RwX3F1ZXVl
ZF90b19yZWFkICpjb250cm9sLCAqbmNvbnRyb2w7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24g
KmFzb2M7CisJdWludDMyX3QgbWlkOworCWludCBuZWVkX3JlYXNtX2NoZWNrID0gMDsKKworCWFz
b2MgPSAmc3RjYi0+YXNvYzsKKwltaWQgPSBzdHJtaW4tPmxhc3RfbWlkX2RlbGl2ZXJlZDsKKwkv
KgorCSAqIEZpcnN0IGRlbGl2ZXIgYW55dGhpbmcgcHJpb3IgdG8gYW5kIGluY2x1ZGluZyB0aGUg
c3RyZWFtIG5vIHRoYXQKKwkgKiBjYW1lIGluLgorCSAqLworCVRBSUxRX0ZPUkVBQ0hfU0FGRShj
b250cm9sLCAmc3RybWluLT5pbnF1ZXVlLCBuZXh0X2luc3RybSwgbmNvbnRyb2wpIHsKKwkJaWYg
KFNDVFBfTUlEX0dFKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCwgbWlkLCBjb250cm9sLT5taWQpKSB7
CisJCQkvKiB0aGlzIGlzIGRlbGl2ZXJhYmxlIG5vdyAqLworCQkJaWYgKCgoY29udHJvbC0+c2lu
Zm9fZmxhZ3MgPj4gOCkgJiBTQ1RQX0RBVEFfTk9UX0ZSQUcpICA9PSBTQ1RQX0RBVEFfTk9UX0ZS
QUcpIHsKKwkJCQlpZiAoY29udHJvbC0+b25fc3RybV9xKSB7CisJCQkJCWlmIChjb250cm9sLT5v
bl9zdHJtX3EgPT0gU0NUUF9PTl9PUkRFUkVEKSB7CisJCQkJCQlUQUlMUV9SRU1PVkUoJnN0cm1p
bi0+aW5xdWV1ZSwgY29udHJvbCwgbmV4dF9pbnN0cm0pOworCQkJCQl9IGVsc2UgaWYgKGNvbnRy
b2wtPm9uX3N0cm1fcSA9PSBTQ1RQX09OX1VOT1JERVJFRCkgeworCQkJCQkJVEFJTFFfUkVNT1ZF
KCZzdHJtaW4tPnVub19pbnF1ZXVlLCBjb250cm9sLCBuZXh0X2luc3RybSk7CisjaWZkZWYgSU5W
QVJJQU5UUworCQkJCQl9IGVsc2UgeworCQkJCQkJcGFuaWMoInN0cm1pbjogJXAgY3RsOiAlcCB1
bmtub3duICVkIiwKKwkJCQkJCSAgICAgIHN0cm1pbiwgY29udHJvbCwgY29udHJvbC0+b25fc3Ry
bV9xKTsKKyNlbmRpZgorCQkJCQl9CisJCQkJCWNvbnRyb2wtPm9uX3N0cm1fcSA9IDA7CisJCQkJ
fQorCQkJCS8qIHN1YnRyYWN0IHBlbmRpbmcgb24gc3RyZWFtcyAqLworCQkJCWlmIChhc29jLT5z
aXplX29uX2FsbF9zdHJlYW1zID49IGNvbnRyb2wtPmxlbmd0aCkgeworCQkJCQlhc29jLT5zaXpl
X29uX2FsbF9zdHJlYW1zIC09IGNvbnRyb2wtPmxlbmd0aDsKKwkJCQl9IGVsc2UgeworI2lmZGVm
IElOVkFSSUFOVFMKKwkJCQkJcGFuaWMoInNpemVfb25fYWxsX3N0cmVhbXMgPSAldSBzbWFsbGVy
IHRoYW4gY29udHJvbCBsZW5ndGggJXUiLCBhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zLCBjb250
cm9sLT5sZW5ndGgpOworI2Vsc2UKKwkJCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyA9IDA7
CisjZW5kaWYKKwkJCQl9CisJCQkJc2N0cF91Y291bnRfZGVjcihhc29jLT5jbnRfb25fYWxsX3N0
cmVhbXMpOworCQkJCS8qIGRlbGl2ZXIgaXQgdG8gYXQgbGVhc3QgdGhlIGRlbGl2ZXJ5LXEgKi8K
KwkJCQlpZiAoc3RjYi0+c2N0cF9zb2NrZXQpIHsKKwkJCQkJc2N0cF9tYXJrX25vbl9yZXZva2Fi
bGUoYXNvYywgY29udHJvbC0+c2luZm9fdHNuKTsKKwkJCQkJc2N0cF9hZGRfdG9fcmVhZHEoc3Rj
Yi0+c2N0cF9lcCwgc3RjYiwKKwkJCQkJCQkgIGNvbnRyb2wsCisJCQkJCQkJICAmc3RjYi0+c2N0
cF9zb2NrZXQtPnNvX3JjdiwKKwkJCQkJCQkgIDEsIFNDVFBfUkVBRF9MT0NLX0hFTEQsCisJCQkJ
CQkJICBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogSXRz
IGEgZnJhZ21lbnRlZCBtZXNzYWdlICovCisJCQkJaWYgKGNvbnRyb2wtPmZpcnN0X2ZyYWdfc2Vl
bikgeworCQkJCQkvKiBNYWtlIGl0IHNvIHRoaXMgaXMgbmV4dCB0byBkZWxpdmVyLCB3ZSByZXN0
b3JlIGxhdGVyICovCisJCQkJCXN0cm1pbi0+bGFzdF9taWRfZGVsaXZlcmVkID0gY29udHJvbC0+
bWlkIC0gMTsKKwkJCQkJbmVlZF9yZWFzbV9jaGVjayA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0K
KwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIG5vIG1vcmUgZGVsaXZlcnkgbm93LiAqLworCQkJYnJl
YWs7CisJCX0KKwl9CisJaWYgKG5lZWRfcmVhc21fY2hlY2spIHsKKwkJaW50IHJldDsKKwkJcmV0
ID0gc2N0cF9kZWxpdmVyX3JlYXNtX2NoZWNrKHN0Y2IsICZzdGNiLT5hc29jLCBzdHJtaW4sIFND
VFBfUkVBRF9MT0NLX0hFTEQpOworCQlpZiAoU0NUUF9NSURfR1QoYXNvYy0+aWRhdGFfc3VwcG9y
dGVkLCBtaWQsIHN0cm1pbi0+bGFzdF9taWRfZGVsaXZlcmVkKSkgeworCQkJLyogUmVzdG9yZSB0
aGUgbmV4dCB0byBkZWxpdmVyIHVubGVzcyB3ZSBhcmUgYWhlYWQgKi8KKwkJCXN0cm1pbi0+bGFz
dF9taWRfZGVsaXZlcmVkID0gbWlkOworCQl9CisJCWlmIChyZXQgPT0gMCkgeworCQkJLyogTGVm
dCB0aGUgZnJvbnQgUGFydGlhbCBvbmUgb24gKi8KKwkJCXJldHVybjsKKwkJfQorCQluZWVkX3Jl
YXNtX2NoZWNrID0gMDsKKwl9CisJLyoKKwkgKiBub3cgd2UgbXVzdCBkZWxpdmVyIHRoaW5ncyBp
biBxdWV1ZSB0aGUgbm9ybWFsIHdheSAgaWYgYW55IGFyZQorCSAqIG5vdyByZWFkeS4KKwkgKi8K
KwltaWQgPSBzdHJtaW4tPmxhc3RfbWlkX2RlbGl2ZXJlZCArIDE7CisJVEFJTFFfRk9SRUFDSF9T
QUZFKGNvbnRyb2wsICZzdHJtaW4tPmlucXVldWUsIG5leHRfaW5zdHJtLCBuY29udHJvbCkgewor
CQlpZiAoU0NUUF9NSURfRVEoYXNvYy0+aWRhdGFfc3VwcG9ydGVkLCBtaWQsIGNvbnRyb2wtPm1p
ZCkpIHsKKwkJCWlmICgoKGNvbnRyb2wtPnNpbmZvX2ZsYWdzID4+IDgpICYgU0NUUF9EQVRBX05P
VF9GUkFHKSA9PSBTQ1RQX0RBVEFfTk9UX0ZSQUcpIHsKKwkJCQkvKiB0aGlzIGlzIGRlbGl2ZXJh
YmxlIG5vdyAqLworCQkJCWlmIChjb250cm9sLT5vbl9zdHJtX3EpIHsKKwkJCQkJaWYgKGNvbnRy
b2wtPm9uX3N0cm1fcSA9PSBTQ1RQX09OX09SREVSRUQpIHsKKwkJCQkJCVRBSUxRX1JFTU9WRSgm
c3RybWluLT5pbnF1ZXVlLCBjb250cm9sLCBuZXh0X2luc3RybSk7CisJCQkJCX0gZWxzZSBpZiAo
Y29udHJvbC0+b25fc3RybV9xID09IFNDVFBfT05fVU5PUkRFUkVEKSB7CisJCQkJCQlUQUlMUV9S
RU1PVkUoJnN0cm1pbi0+dW5vX2lucXVldWUsIGNvbnRyb2wsIG5leHRfaW5zdHJtKTsKKyNpZmRl
ZiBJTlZBUklBTlRTCisJCQkJCX0gZWxzZSB7CisJCQkJCQlwYW5pYygic3RybWluOiAlcCBjdGw6
ICVwIHVua25vd24gJWQiLAorCQkJCQkJICAgICAgc3RybWluLCBjb250cm9sLCBjb250cm9sLT5v
bl9zdHJtX3EpOworI2VuZGlmCisJCQkJCX0KKwkJCQkJY29udHJvbC0+b25fc3RybV9xID0gMDsK
KwkJCQl9CisJCQkJLyogc3VidHJhY3QgcGVuZGluZyBvbiBzdHJlYW1zICovCisJCQkJaWYgKGFz
b2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPj0gY29udHJvbC0+bGVuZ3RoKSB7CisJCQkJCWFzb2Mt
PnNpemVfb25fYWxsX3N0cmVhbXMgLT0gY29udHJvbC0+bGVuZ3RoOworCQkJCX0gZWxzZSB7Cisj
aWZkZWYgSU5WQVJJQU5UUworCQkJCQlwYW5pYygic2l6ZV9vbl9hbGxfc3RyZWFtcyA9ICV1IHNt
YWxsZXIgdGhhbiBjb250cm9sIGxlbmd0aCAldSIsIGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMs
IGNvbnRyb2wtPmxlbmd0aCk7CisjZWxzZQorCQkJCQlhc29jLT5zaXplX29uX2FsbF9zdHJlYW1z
ID0gMDsKKyNlbmRpZgorCQkJCX0KKwkJCQlzY3RwX3Vjb3VudF9kZWNyKGFzb2MtPmNudF9vbl9h
bGxfc3RyZWFtcyk7CisJCQkJLyogZGVsaXZlciBpdCB0byBhdCBsZWFzdCB0aGUgZGVsaXZlcnkt
cSAqLworCQkJCXN0cm1pbi0+bGFzdF9taWRfZGVsaXZlcmVkID0gY29udHJvbC0+bWlkOworCQkJ
CWlmIChzdGNiLT5zY3RwX3NvY2tldCkgeworCQkJCQlzY3RwX21hcmtfbm9uX3Jldm9rYWJsZShh
c29jLCBjb250cm9sLT5zaW5mb190c24pOworCQkJCQlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5z
Y3RwX2VwLCBzdGNiLAorCQkJCQkJCSAgY29udHJvbCwKKwkJCQkJCQkgICZzdGNiLT5zY3RwX3Nv
Y2tldC0+c29fcmN2LCAxLAorCQkJCQkJCSAgU0NUUF9SRUFEX0xPQ0tfSEVMRCwgU0NUUF9TT19O
T1RfTE9DS0VEKTsKKwkJCQl9CisJCQkJbWlkID0gc3RybWluLT5sYXN0X21pZF9kZWxpdmVyZWQg
KyAxOworCQkJfSBlbHNlIHsKKwkJCQkvKiBJdHMgYSBmcmFnbWVudGVkIG1lc3NhZ2UgKi8KKwkJ
CQlpZiAoY29udHJvbC0+Zmlyc3RfZnJhZ19zZWVuKSB7CisJCQkJCS8qIE1ha2UgaXQgc28gdGhp
cyBpcyBuZXh0IHRvIGRlbGl2ZXIgKi8KKwkJCQkJc3RybWluLT5sYXN0X21pZF9kZWxpdmVyZWQg
PSBjb250cm9sLT5taWQgLSAxOworCQkJCQluZWVkX3JlYXNtX2NoZWNrID0gMTsKKwkJCQkJYnJl
YWs7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKG5l
ZWRfcmVhc21fY2hlY2spIHsKKwkJKHZvaWQpc2N0cF9kZWxpdmVyX3JlYXNtX2NoZWNrKHN0Y2Is
ICZzdGNiLT5hc29jLCBzdHJtaW4sIFNDVFBfUkVBRF9MT0NLX0hFTEQpOworCX0KK30KKworc3Rh
dGljIHZvaWQKK3NjdHBfZmx1c2hfcmVhc3NtX2Zvcl9zdHJfc2VxKHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgc3RydWN0IHNjdHBfc3RyZWFt
X2luICpzdHJtLAorCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sLCBpbnQgb3Jk
ZXJlZCwgdWludDMyX3QgY3VtdHNuKQoreworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywg
Km5jaGs7CisKKwkvKgorCSAqIEZvciBub3cgbGFyZ2UgbWVzc2FnZXMgaGVsZCBvbiB0aGUgc3Ry
ZWFtIHJlYXNtIHRoYXQgYXJlCisJICogY29tcGxldGUgd2lsbCBiZSB0b3NzZWQgdG9vLiBXZSBj
b3VsZCBpbiB0aGVvcnkgZG8gbW9yZQorCSAqIHdvcmsgdG8gc3BpbiB0aHJvdWdoIGFuZCBzdG9w
IGFmdGVyIGR1bXBpbmcgb25lIG1zZyBha2EKKwkgKiBzZWVpbmcgdGhlIHN0YXJ0IG9mIGEgbmV3
IG1zZyBhdCB0aGUgaGVhZCwgYW5kIGNhbGwgdGhlCisJICogZGVsaXZlcnkgZnVuY3Rpb24uLi4g
dG8gc2VlIGlmIGl0IGNhbiBiZSBkZWxpdmVyZWQuLi4gQnV0CisJICogZm9yIG5vdyB3ZSBqdXN0
IGR1bXAgZXZlcnl0aGluZyBvbiB0aGUgcXVldWUuCisJICovCisJaWYgKCFhc29jLT5pZGF0YV9z
dXBwb3J0ZWQgJiYgIW9yZGVyZWQgJiYKKwkgICAgY29udHJvbC0+Zmlyc3RfZnJhZ19zZWVuICYm
CisJICAgIFNDVFBfVFNOX0dUKGNvbnRyb2wtPmZzbl9pbmNsdWRlZCwgY3VtdHNuKSkgeworCQly
ZXR1cm47CisJfQorCVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGssICZjb250cm9sLT5yZWFzbSwgc2N0
cF9uZXh0LCBuY2hrKSB7CisJCS8qIFB1cmdlIGhhbmdpbmcgY2h1bmtzICovCisJCWlmICghYXNv
Yy0+aWRhdGFfc3VwcG9ydGVkICYmICFvcmRlcmVkKSB7CisJCQlpZiAoU0NUUF9UU05fR1QoY2hr
LT5yZWMuZGF0YS50c24sIGN1bXRzbikpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlUQUlM
UV9SRU1PVkUoJmNvbnRyb2wtPnJlYXNtLCBjaGssIHNjdHBfbmV4dCk7CisJCWlmIChhc29jLT5z
aXplX29uX3JlYXNtX3F1ZXVlID49IGNoay0+c2VuZF9zaXplKSB7CisJCQlhc29jLT5zaXplX29u
X3JlYXNtX3F1ZXVlIC09IGNoay0+c2VuZF9zaXplOworCQl9IGVsc2UgeworI2lmZGVmIElOVkFS
SUFOVFMKKwkJCXBhbmljKCJzaXplX29uX3JlYXNtX3F1ZXVlID0gJXUgc21hbGxlciB0aGFuIGNo
dW5rIGxlbmd0aCAldSIsIGFzb2MtPnNpemVfb25fcmVhc21fcXVldWUsIGNoay0+c2VuZF9zaXpl
KTsKKyNlbHNlCisJCQlhc29jLT5zaXplX29uX3JlYXNtX3F1ZXVlID0gMDsKKyNlbmRpZgorCQl9
CisJCXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+Y250X29uX3JlYXNtX3F1ZXVlKTsKKwkJaWYgKGNo
ay0+ZGF0YSkgeworCQkJc2N0cF9tX2ZyZWVtKGNoay0+ZGF0YSk7CisJCQljaGstPmRhdGEgPSBO
VUxMOworCQl9CisJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9D
S0VEKTsKKwl9CisJaWYgKCFUQUlMUV9FTVBUWSgmY29udHJvbC0+cmVhc20pKSB7CisJCS8qIFRo
aXMgaGFzIHRvIGJlIG9sZCBkYXRhLCB1bm9yZGVyZWQgKi8KKwkJaWYgKGNvbnRyb2wtPmRhdGEp
IHsKKwkJCXNjdHBfbV9mcmVlbShjb250cm9sLT5kYXRhKTsKKwkJCWNvbnRyb2wtPmRhdGEgPSBO
VUxMOworCQl9CisJCXNjdHBfcmVzZXRfYV9jb250cm9sKGNvbnRyb2wsIHN0Y2ItPnNjdHBfZXAs
IGN1bXRzbik7CisJCWNoayA9IFRBSUxRX0ZJUlNUKCZjb250cm9sLT5yZWFzbSk7CisJCWlmIChj
aGstPnJlYy5kYXRhLnJjdl9mbGFncyAmIFNDVFBfREFUQV9GSVJTVF9GUkFHKSB7CisJCQlUQUlM
UV9SRU1PVkUoJmNvbnRyb2wtPnJlYXNtLCBjaGssIHNjdHBfbmV4dCk7CisJCQlzY3RwX2FkZF9j
aGtfdG9fY29udHJvbChjb250cm9sLCBzdHJtLCBzdGNiLCBhc29jLAorCQkJCQkJY2hrLCBTQ1RQ
X1JFQURfTE9DS19IRUxEKTsKKwkJfQorCQlzY3RwX2RlbGl2ZXJfcmVhc21fY2hlY2soc3RjYiwg
YXNvYywgc3RybSwgU0NUUF9SRUFEX0xPQ0tfSEVMRCk7CisJCXJldHVybjsKKwl9CisJaWYgKGNv
bnRyb2wtPm9uX3N0cm1fcSA9PSBTQ1RQX09OX09SREVSRUQpIHsKKwkJVEFJTFFfUkVNT1ZFKCZz
dHJtLT5pbnF1ZXVlLCBjb250cm9sLCBuZXh0X2luc3RybSk7CisJCWlmIChhc29jLT5zaXplX29u
X2FsbF9zdHJlYW1zID49IGNvbnRyb2wtPmxlbmd0aCkgeworCQkJYXNvYy0+c2l6ZV9vbl9hbGxf
c3RyZWFtcyAtPSBjb250cm9sLT5sZW5ndGg7CisJCX0gZWxzZSB7CisjaWZkZWYgSU5WQVJJQU5U
UworCQkJcGFuaWMoInNpemVfb25fYWxsX3N0cmVhbXMgPSAldSBzbWFsbGVyIHRoYW4gY29udHJv
bCBsZW5ndGggJXUiLCBhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zLCBjb250cm9sLT5sZW5ndGgp
OworI2Vsc2UKKwkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPSAwOworI2VuZGlmCisJCX0K
KwkJc2N0cF91Y291bnRfZGVjcihhc29jLT5jbnRfb25fYWxsX3N0cmVhbXMpOworCQljb250cm9s
LT5vbl9zdHJtX3EgPSAwOworCX0gZWxzZSBpZiAoY29udHJvbC0+b25fc3RybV9xID09IFNDVFBf
T05fVU5PUkRFUkVEKSB7CisJCVRBSUxRX1JFTU9WRSgmc3RybS0+dW5vX2lucXVldWUsIGNvbnRy
b2wsIG5leHRfaW5zdHJtKTsKKwkJY29udHJvbC0+b25fc3RybV9xID0gMDsKKyNpZmRlZiBJTlZB
UklBTlRTCisJfSBlbHNlIGlmIChjb250cm9sLT5vbl9zdHJtX3EpIHsKKwkJcGFuaWMoInN0cm06
ICVwIGN0bDogJXAgdW5rbm93biAlZCIsCisJCSAgICBzdHJtLCBjb250cm9sLCBjb250cm9sLT5v
bl9zdHJtX3EpOworI2VuZGlmCisJfQorCWNvbnRyb2wtPm9uX3N0cm1fcSA9IDA7CisJaWYgKGNv
bnRyb2wtPm9uX3JlYWRfcSA9PSAwKSB7CisJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjb250cm9s
LT53aG9Gcm9tKTsKKwkJaWYgKGNvbnRyb2wtPmRhdGEpIHsKKwkJCXNjdHBfbV9mcmVlbShjb250
cm9sLT5kYXRhKTsKKwkJCWNvbnRyb2wtPmRhdGEgPSBOVUxMOworCQl9CisJCXNjdHBfZnJlZV9h
X3JlYWRxKHN0Y2IsIGNvbnRyb2wpOworCX0KK30KKwordm9pZAorc2N0cF9oYW5kbGVfZm9yd2Fy
ZF90c24oc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IHNjdHBfZm9yd2FyZF90c25fY2h1bmsgKmZ3ZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGludCAqYWJvcnRfZmxhZywgc3RydWN0IG1idWYgKm0gLCBpbnQgb2Zmc2V0KQoreworCS8qIFRo
ZSBwci1zY3RwIGZ3ZCB0c24gKi8KKwkvKgorCSAqIGhlcmUgd2Ugd2lsbCBwZXJmb3JtIGFsbCB0
aGUgZGF0YSByZWNlaXZlciBzaWRlIHN0ZXBzIGZvcgorCSAqIHByb2Nlc3NpbmcgRndkVFNOLCBh
cyByZXF1aXJlZCBpbiBieSBwci1zY3RwIGRyYWZ0OgorCSAqCisJICogQXNzdW1lIHdlIGdldCBG
d2RUU04oeCk6CisJICoKKwkgKiAxKSB1cGRhdGUgbG9jYWwgY3VtVFNOIHRvIHgKKwkgKiAyKSB0
cnkgdG8gZnVydGhlciBhZHZhbmNlIGN1bVRTTiB0byB4ICsgb3RoZXJzIHdlIGhhdmUKKwkgKiAz
KSBleGFtaW5lIGFuZCB1cGRhdGUgcmUtb3JkZXJpbmcgcXVldWUgb24gcHItaW4tc3RyZWFtcwor
CSAqIDQpIGNsZWFuIHVwIHJlLWFzc2VtYmx5IHF1ZXVlCisJICogNSkgU2VuZCBhIHNhY2sgdG8g
cmVwb3J0IHdoZXJlIHdlIGFyZS4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNv
YzsKKwl1aW50MzJfdCBuZXdfY3VtX3RzbiwgZ2FwOworCXVuc2lnbmVkIGludCBpLCBmd2Rfc3os
IG1fc2l6ZTsKKwl1aW50MzJfdCBzdHJfc2VxOworCXN0cnVjdCBzY3RwX3N0cmVhbV9pbiAqc3Ry
bTsKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCwgKm5jb250cm9sLCAqc3Y7
CisKKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJaWYgKChmd2Rfc3ogPSBudG9ocyhmd2QtPmNoLmNo
dW5rX2xlbmd0aCkpIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX2ZvcndhcmRfdHNuX2NodW5rKSkgewor
CQlTQ1RQREJHKFNDVFBfREVCVUdfSU5EQVRBMSwKKwkJCSJCYWQgc2l6ZSB0b28gc21hbGwvYmln
IGZ3ZC10c25cbiIpOworCQlyZXR1cm47CisJfQorCW1fc2l6ZSA9IChzdGNiLT5hc29jLm1hcHBp
bmdfYXJyYXlfc2l6ZSA8PCAzKTsKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiAxLiBIZXJlIHdlIHVwZGF0ZSBsb2Nh
bCBjdW1UU04gYW5kIHNoaWZ0IHRoZSBiaXRtYXAgYXJyYXkgKi8KKwkvKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwluZXdfY3Vt
X3RzbiA9IG50b2hsKGZ3ZC0+bmV3X2N1bXVsYXRpdmVfdHNuKTsKKworCWlmIChTQ1RQX1RTTl9H
RShhc29jLT5jdW11bGF0aXZlX3RzbiwgbmV3X2N1bV90c24pKSB7CisJCS8qIEFscmVhZHkgZ290
IHRoZXJlIC4uLiAqLworCQlyZXR1cm47CisJfQorCS8qCisJICogbm93IHdlIGtub3cgdGhlIG5l
dyBUU04gaXMgbW9yZSBhZHZhbmNlZCwgbGV0J3MgZmluZCB0aGUgYWN0dWFsCisJICogZ2FwCisJ
ICovCisJU0NUUF9DQUxDX1RTTl9UT19HQVAoZ2FwLCBuZXdfY3VtX3RzbiwgYXNvYy0+bWFwcGlu
Z19hcnJheV9iYXNlX3Rzbik7CisJYXNvYy0+Y3VtdWxhdGl2ZV90c24gPSBuZXdfY3VtX3RzbjsK
KwlpZiAoZ2FwID49IG1fc2l6ZSkgeworCQlpZiAoKGxvbmcpZ2FwID4gc2N0cF9zYnNwYWNlKCZz
dGNiLT5hc29jLCAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdikpIHsKKwkJCXN0cnVjdCBtYnVm
ICpvcF9lcnI7CisJCQljaGFyIG1zZ1tTQ1RQX0RJQUdfSU5GT19MRU5dOworCisJCQkvKgorCQkJ
ICogb3V0IG9mIHJhbmdlIChvZiBzaW5nbGUgYnl0ZSBjaHVua3MgaW4gdGhlIHJ3bmQgSQorCQkJ
ICogZ2l2ZSBvdXQpLiBUaGlzIG11c3QgYmUgYW4gYXR0YWNrZXIuCisJCQkgKi8KKwkJCSphYm9y
dF9mbGFnID0gMTsKKwkJCVNDVFBfU05QUklOVEYobXNnLCBzaXplb2YobXNnKSwKKwkJCSAgICAg
ICAgICAgICAgIk5ldyBjdW0gYWNrICU4Ljh4IHRvbyBoaWdoLCBoaWdoZXN0IFRTTiAlOC44eCIs
CisJCQkgICAgICAgICAgICAgIG5ld19jdW1fdHNuLCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVf
bWFwKTsKKwkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9QUk9UT0NP
TF9WSU9MQVRJT04sIG1zZyk7CisJCQlzdGNiLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2NvZGUgPSBT
Q1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18zNzsKKwkJCXNjdHBfYWJvcnRfYW5fYXNz
b2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQp
OworCQkJcmV0dXJuOworCQl9CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX2Z3ZHRzbl9tYXBfb3Zl
cik7CisKKwkJbWVtc2V0KHN0Y2ItPmFzb2MubWFwcGluZ19hcnJheSwgMCwgc3RjYi0+YXNvYy5t
YXBwaW5nX2FycmF5X3NpemUpOworCQlhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuID0gbmV3
X2N1bV90c24gKyAxOworCQlhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwID0gbmV3X2N1bV90
c247CisKKwkJbWVtc2V0KHN0Y2ItPmFzb2MubnJfbWFwcGluZ19hcnJheSwgMCwgc3RjYi0+YXNv
Yy5tYXBwaW5nX2FycmF5X3NpemUpOworCQlhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFw
ID0gbmV3X2N1bV90c247CisKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xl
dmVsKSAmIFNDVFBfTUFQX0xPR0dJTkdfRU5BQkxFKSB7CisJCQlzY3RwX2xvZ19tYXAoMCwgMywg
YXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCwgU0NUUF9NQVBfU0xJREVfUkVTVUxUKTsKKwkJ
fQorCX0gZWxzZSB7CisJCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOworCQlmb3IgKGkgPSAw
OyBpIDw9IGdhcDsgaSsrKSB7CisJCQlpZiAoIVNDVFBfSVNfVFNOX1BSRVNFTlQoYXNvYy0+bWFw
cGluZ19hcnJheSwgaSkgJiYKKwkJCSAgICAhU0NUUF9JU19UU05fUFJFU0VOVChhc29jLT5ucl9t
YXBwaW5nX2FycmF5LCBpKSkgeworCQkJCVNDVFBfU0VUX1RTTl9QUkVTRU5UKGFzb2MtPm5yX21h
cHBpbmdfYXJyYXksIGkpOworCQkJCWlmIChTQ1RQX1RTTl9HVChhc29jLT5tYXBwaW5nX2FycmF5
X2Jhc2VfdHNuICsgaSwgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCkpIHsKKwkJCQkJ
YXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCA9IGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFz
ZV90c24gKyBpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkvKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiAyLiBDbGVhciB1
cCByZS1hc3NlbWJseSBxdWV1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KKworCS8qIFRoaXMgaXMgbm93IGRvbmUgYXMgcGFydCBvZiBjbGVhcmluZyB1cCB0aGUgc3Ry
ZWFtL3NlcSAqLworCWlmIChhc29jLT5pZGF0YV9zdXBwb3J0ZWQgPT0gMCkgeworCQl1aW50MTZf
dCBzaWQ7CisKKwkJLyogRmx1c2ggYWxsIHRoZSB1bi1vcmRlcmVkIGRhdGEgYmFzZWQgb24gY3Vt
LXRzbiAqLworCQlTQ1RQX0lOUF9SRUFEX0xPQ0soc3RjYi0+c2N0cF9lcCk7CisJCWZvciAoc2lk
ID0gMDsgc2lkIDwgYXNvYy0+c3RyZWFtaW5jbnQ7IHNpZCsrKSB7CisJCQlzdHJtID0gJmFzb2Mt
PnN0cm1pbltzaWRdOworCQkJaWYgKCFUQUlMUV9FTVBUWSgmc3RybS0+dW5vX2lucXVldWUpKSB7
CisJCQkJc2N0cF9mbHVzaF9yZWFzc21fZm9yX3N0cl9zZXEoc3RjYiwgYXNvYywgc3RybSwgVEFJ
TFFfRklSU1QoJnN0cm0tPnVub19pbnF1ZXVlKSwgMCwgbmV3X2N1bV90c24pOworCQkJfQorCQl9
CisJCVNDVFBfSU5QX1JFQURfVU5MT0NLKHN0Y2ItPnNjdHBfZXApOworCX0KKwkvKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiAzLiBV
cGRhdGUgdGhlIFBSLXN0cmVhbSByZS1vcmRlcmluZyBxdWV1ZXMgYW5kIGZpeCAgKi8KKwkvKiAg
ICBkZWxpdmVyeSBpc3N1ZXMgYXMgbmVlZGVkLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Kwlmd2Rfc3ogLT0gc2l6ZW9mKCpmd2QpOworCWlmIChtICYmIGZ3ZF9zeikgeworCQkvKiBOZXcg
bWV0aG9kLiAqLworCQl1bnNpZ25lZCBpbnQgbnVtX3N0cjsKKwkJdWludDMyX3QgbWlkOworCQl1
aW50MTZfdCBzaWQ7CisJCXVpbnQxNl90IG9yZGVyZWQsIGZsYWdzOworCQlzdHJ1Y3Qgc2N0cF9z
dHJzZXEgKnN0c2VxLCBzdHJzZXFidWY7CisJCXN0cnVjdCBzY3RwX3N0cnNlcV9taWQgKnN0c2Vx
X20sIHN0cnNlcWJ1Zl9tOworCQlvZmZzZXQgKz0gc2l6ZW9mKCpmd2QpOworCisJCVNDVFBfSU5Q
X1JFQURfTE9DSyhzdGNiLT5zY3RwX2VwKTsKKwkJaWYgKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCkg
eworCQkJbnVtX3N0ciA9IGZ3ZF9zeiAvIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJzZXFfbWlkKTsK
KwkJfSBlbHNlIHsKKwkJCW51bV9zdHIgPSBmd2Rfc3ogLyBzaXplb2Yoc3RydWN0IHNjdHBfc3Ry
c2VxKTsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3N0cjsgaSsrKSB7CisJCQlpZiAoYXNv
Yy0+aWRhdGFfc3VwcG9ydGVkKSB7CisJCQkJc3RzZXFfbSA9IChzdHJ1Y3Qgc2N0cF9zdHJzZXFf
bWlkICopc2N0cF9tX2dldHB0cihtLCBvZmZzZXQsCisJCQkJCQkJCQkgICAgc2l6ZW9mKHN0cnVj
dCBzY3RwX3N0cnNlcV9taWQpLAorCQkJCQkJCQkJICAgICh1aW50OF90ICopJnN0cnNlcWJ1Zl9t
KTsKKwkJCQlvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cnNlcV9taWQpOworCQkJCWlm
IChzdHNlcV9tID09IE5VTEwpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXNpZCA9IG50b2hz
KHN0c2VxX20tPnNpZCk7CisJCQkJbWlkID0gbnRvaGwoc3RzZXFfbS0+bWlkKTsKKwkJCQlmbGFn
cyA9IG50b2hzKHN0c2VxX20tPmZsYWdzKTsKKwkJCQlpZiAoZmxhZ3MgJiBQUl9TQ1RQX1VOT1JE
RVJFRF9GTEFHKSB7CisJCQkJCW9yZGVyZWQgPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCW9yZGVy
ZWQgPSAxOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJc3RzZXEgPSAoc3RydWN0IHNjdHBfc3Ry
c2VxICopc2N0cF9tX2dldHB0cihtLCBvZmZzZXQsCisJCQkJCQkJCQkgICAgc2l6ZW9mKHN0cnVj
dCBzY3RwX3N0cnNlcSksCisJCQkJCQkJCQkgICAgKHVpbnQ4X3QgKikmc3Ryc2VxYnVmKTsKKwkJ
CQlvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cnNlcSk7CisJCQkJaWYgKHN0c2VxID09
IE5VTEwpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXNpZCA9IG50b2hzKHN0c2VxLT5zaWQp
OworCQkJCW1pZCA9ICh1aW50MzJfdCludG9ocyhzdHNlcS0+c3NuKTsKKwkJCQlvcmRlcmVkID0g
MTsKKwkJCX0KKwkJCS8qIENvbnZlcnQgKi8KKworCQkJLyogbm93IHByb2Nlc3MgKi8KKworCQkJ
LyoKKwkJCSAqIE9rIHdlIG5vdyBsb29rIGZvciB0aGUgc3RyZWFtL3NlcSBvbiB0aGUgcmVhZCBx
dWV1ZQorCQkJICogd2hlcmUgaXRzIG5vdCBhbGwgZGVsaXZlcmVkLiBJZiB3ZSBmaW5kIGl0IHdl
IHRyYW5zbXV0ZSB0aGUKKwkJCSAqIHJlYWQgZW50cnkgaW50byBhIFBESV9BQk9SVEVELgorCQkJ
ICovCisJCQlpZiAoc2lkID49IGFzb2MtPnN0cmVhbWluY250KSB7CisJCQkJLyogc2NyZXdlZCB1
cCBzdHJlYW1zLCBzdG9wISAgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmICgoYXNvYy0+c3Ry
X29mX3BkYXBpID09IHNpZCkgJiYKKwkJCSAgICAoYXNvYy0+c3NuX29mX3BkYXBpID09IG1pZCkp
IHsKKwkJCQkvKiBJZiB0aGlzIGlzIHRoZSBvbmUgd2Ugd2VyZSBwYXJ0aWFsbHkgZGVsaXZlcmlu
ZworCQkJCSAqIG5vdyB0aGVuIHdlIG5vIGxvbmdlciBhcmUuIE5vdGUgdGhpcyB3aWxsIGNoYW5n
ZQorCQkJCSAqIHdpdGggdGhlIHJlYXNzZW1ibHkgcmUtd3JpdGUuCisJCQkJICovCisJCQkJYXNv
Yy0+ZnJhZ21lbnRlZF9kZWxpdmVyeV9pbnByb2dyZXNzID0gMDsKKwkJCX0KKwkJCXN0cm0gPSAm
YXNvYy0+c3RybWluW3NpZF07CisJCQlpZiAob3JkZXJlZCkgeworCQkJCVRBSUxRX0ZPUkVBQ0hf
U0FGRShjb250cm9sLCAmc3RybS0+aW5xdWV1ZSwgbmV4dF9pbnN0cm0sIG5jb250cm9sKSB7CisJ
CQkJCWlmIChTQ1RQX01JRF9HRShhc29jLT5pZGF0YV9zdXBwb3J0ZWQsIG1pZCwgY29udHJvbC0+
bWlkKSkgeworCQkJCQkJc2N0cF9mbHVzaF9yZWFzc21fZm9yX3N0cl9zZXEoc3RjYiwgYXNvYywg
c3RybSwgY29udHJvbCwgb3JkZXJlZCwgbmV3X2N1bV90c24pOworCQkJCQl9CisJCQkJfQorCQkJ
fSBlbHNlIHsKKwkJCQlpZiAoYXNvYy0+aWRhdGFfc3VwcG9ydGVkKSB7CisJCQkJCVRBSUxRX0ZP
UkVBQ0hfU0FGRShjb250cm9sLCAmc3RybS0+dW5vX2lucXVldWUsIG5leHRfaW5zdHJtLCBuY29u
dHJvbCkgeworCQkJCQkJaWYgKFNDVFBfTUlEX0dFKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCwgbWlk
LCBjb250cm9sLT5taWQpKSB7CisJCQkJCQkJc2N0cF9mbHVzaF9yZWFzc21fZm9yX3N0cl9zZXEo
c3RjYiwgYXNvYywgc3RybSwgY29udHJvbCwgb3JkZXJlZCwgbmV3X2N1bV90c24pOworCQkJCQkJ
fQorCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKCFUQUlMUV9FTVBUWSgmc3RybS0+dW5v
X2lucXVldWUpKSB7CisJCQkJCQlzY3RwX2ZsdXNoX3JlYXNzbV9mb3Jfc3RyX3NlcShzdGNiLCBh
c29jLCBzdHJtLCBUQUlMUV9GSVJTVCgmc3RybS0+dW5vX2lucXVldWUpLCBvcmRlcmVkLCBuZXdf
Y3VtX3Rzbik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlUQUlMUV9GT1JFQUNIKGNvbnRyb2ws
ICZzdGNiLT5zY3RwX2VwLT5yZWFkX3F1ZXVlLCBuZXh0KSB7CisJCQkJaWYgKChjb250cm9sLT5z
aW5mb19zdHJlYW0gPT0gc2lkKSAmJgorCQkJCSAgICAoU0NUUF9NSURfRVEoYXNvYy0+aWRhdGFf
c3VwcG9ydGVkLCBjb250cm9sLT5taWQsIG1pZCkpKSB7CisJCQkJCXN0cl9zZXEgPSAoc2lkIDw8
IDE2KSB8ICgweDAwMDBmZmZmICYgbWlkKTsKKwkJCQkJY29udHJvbC0+cGRhcGlfYWJvcnRlZCA9
IDE7CisJCQkJCXN2ID0gc3RjYi0+YXNvYy5jb250cm9sX3BkYXBpOworCQkJCQljb250cm9sLT5l
bmRfYWRkZWQgPSAxOworCQkJCQlpZiAoY29udHJvbC0+b25fc3RybV9xID09IFNDVFBfT05fT1JE
RVJFRCkgeworCQkJCQkJVEFJTFFfUkVNT1ZFKCZzdHJtLT5pbnF1ZXVlLCBjb250cm9sLCBuZXh0
X2luc3RybSk7CisJCQkJCQlpZiAoYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyA+PSBjb250cm9s
LT5sZW5ndGgpIHsKKwkJCQkJCQlhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zIC09IGNvbnRyb2wt
Pmxlbmd0aDsKKwkJCQkJCX0gZWxzZSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQkJCQkJCXBhbmlj
KCJzaXplX29uX2FsbF9zdHJlYW1zID0gJXUgc21hbGxlciB0aGFuIGNvbnRyb2wgbGVuZ3RoICV1
IiwgYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcywgY29udHJvbC0+bGVuZ3RoKTsKKyNlbHNlCisJ
CQkJCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyA9IDA7CisjZW5kaWYKKwkJCQkJCX0KKwkJ
CQkJCXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+Y250X29uX2FsbF9zdHJlYW1zKTsKKwkJCQkJfSBl
bHNlIGlmIChjb250cm9sLT5vbl9zdHJtX3EgPT0gU0NUUF9PTl9VTk9SREVSRUQpIHsKKwkJCQkJ
CVRBSUxRX1JFTU9WRSgmc3RybS0+dW5vX2lucXVldWUsIGNvbnRyb2wsIG5leHRfaW5zdHJtKTsK
KyNpZmRlZiBJTlZBUklBTlRTCisJCQkJCX0gZWxzZSBpZiAoY29udHJvbC0+b25fc3RybV9xKSB7
CisJCQkJCQlwYW5pYygic3RybTogJXAgY3RsOiAlcCB1bmtub3duICVkIiwKKwkJCQkJCSAgICAg
IHN0cm0sIGNvbnRyb2wsIGNvbnRyb2wtPm9uX3N0cm1fcSk7CisjZW5kaWYKKwkJCQkJfQorCQkJ
CQljb250cm9sLT5vbl9zdHJtX3EgPSAwOworCQkJCQlzdGNiLT5hc29jLmNvbnRyb2xfcGRhcGkg
PSBjb250cm9sOworCQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfUEFSVElBTF9ERUxW
SUVSWV9JTkRJQ0FUSU9OLAorCQkJCQkgICAgICAgICAgICAgICAgc3RjYiwKKwkJCQkJICAgICAg
ICAgICAgICAgIFNDVFBfUEFSVElBTF9ERUxJVkVSWV9BQk9SVEVELAorCQkJCQkgICAgICAgICAg
ICAgICAgKHZvaWQgKikmc3RyX3NlcSwKKwkJCQkJCQlTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJ
CQlzdGNiLT5hc29jLmNvbnRyb2xfcGRhcGkgPSBzdjsKKwkJCQkJYnJlYWs7CisJCQkJfSBlbHNl
IGlmICgoY29udHJvbC0+c2luZm9fc3RyZWFtID09IHNpZCkgJiYKKwkJCQkJICAgU0NUUF9NSURf
R1QoYXNvYy0+aWRhdGFfc3VwcG9ydGVkLCBjb250cm9sLT5taWQsIG1pZCkpIHsKKwkJCQkJLyog
V2UgYXJlIHBhc3Qgb3VyIHZpY3RpbSBTU04gKi8KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQor
CQkJaWYgKFNDVFBfTUlEX0dUKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCwgbWlkLCBzdHJtLT5sYXN0
X21pZF9kZWxpdmVyZWQpKSB7CisJCQkJLyogVXBkYXRlIHRoZSBzZXF1ZW5jZSBudW1iZXIgKi8K
KwkJCQlzdHJtLT5sYXN0X21pZF9kZWxpdmVyZWQgPSBtaWQ7CisJCQl9CisJCQkvKiBub3cga2lj
ayB0aGUgc3RyZWFtIHRoZSBuZXcgd2F5ICovCisJCQkvKnNhX2lnbm9yZSBOT19OVUxMX0NISyov
CisJCQlzY3RwX2tpY2tfcHJzY3RwX3Jlb3JkZXJfcXVldWUoc3RjYiwgc3RybSk7CisJCX0KKwkJ
U0NUUF9JTlBfUkVBRF9VTkxPQ0soc3RjYi0+c2N0cF9lcCk7CisJfQorCS8qCisJICogTm93IHNs
aWRlIHRoaW5nIGZvcndhcmQuCisJICovCisJc2N0cF9zbGlkZV9tYXBwaW5nX2FycmF5cyhzdGNi
KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2luZGF0
YS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5kYXRhLmgKbmV3IGZpbGUg
bW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwLi42NTE0OTNiOTE3ZDMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9pbmRhdGEuaApAQCAtMCww
ICsxLDEyMSBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNl
CisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5k
YWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgt
MjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisg
KiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor
ICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpbmNs
dWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9z
Y3RwX2luZGF0YS5oIDM2NTA3MSAyMDIwLTA5LTAxIDIxOjE5OjE0WiBtamcgJCIpOworI2VuZGlm
CisKKyNpZm5kZWYgX05FVElORVRfU0NUUF9JTkRBVEFfSF8KKyNkZWZpbmUgX05FVElORVRfU0NU
UF9JTkRBVEFfSF8KKworI2lmIGRlZmluZWQoX0tFUk5FTCkgfHwgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorCitzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqCitzY3RwX2J1aWxkX3JlYWRxX2Vu
dHJ5KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IHNjdHBfbmV0cyAqbmV0LAorICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0c24sIHVp
bnQzMl90IHBwaWQsCisgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGNvbnRleHQsIHVp
bnQxNl90IHNpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbWlkLCB1aW50OF90
IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWJ1ZiAqZG0pOworCisjZGVm
aW5lIHNjdHBfYnVpbGRfcmVhZHFfZW50cnlfbWFjKF9jdGwsIGluX2l0LCBjb250ZXh0LCBuZXQs
IHRzbiwgcHBpZCwgc2lkLCBmbGFncywgZG0sIHRmc24sIG1pZCkgZG8geyBcCisJaWYgKF9jdGwp
IHsgXAorCQlhdG9taWNfYWRkX2ludCgmKChuZXQpLT5yZWZfY291bnQpLCAxKTsgXAorCQltZW1z
ZXQoX2N0bCwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkKSk7IFwKKwkJKF9j
dGwpLT5zaW5mb19zdHJlYW0gPSBzaWQ7IFwKKwkJVEFJTFFfSU5JVCgmX2N0bC0+cmVhc20pOyBc
CisJCShfY3RsKS0+dG9wX2ZzbiA9IHRmc247IFwKKwkJKF9jdGwpLT5taWQgPSBtaWQ7IFwKKwkJ
KF9jdGwpLT5zaW5mb19mbGFncyA9IChmbGFncyA8PCA4KTsgXAorCQkoX2N0bCktPnNpbmZvX3Bw
aWQgPSBwcGlkOyBcCisJCShfY3RsKS0+c2luZm9fY29udGV4dCA9IGNvbnRleHQ7IFwKKwkJKF9j
dGwpLT5mc25faW5jbHVkZWQgPSAweGZmZmZmZmZmOyBcCisJCShfY3RsKS0+c2luZm9fdHNuID0g
dHNuOyBcCisJCShfY3RsKS0+c2luZm9fY3VtdHNuID0gdHNuOyBcCisJCShfY3RsKS0+c2luZm9f
YXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKChpbl9pdCkpOyBcCisJCShfY3RsKS0+d2hvRnJv
bSA9IG5ldDsgXAorCQkoX2N0bCktPmRhdGEgPSBkbTsgXAorCQkoX2N0bCktPnN0Y2IgPSAoaW5f
aXQpOyBcCisJCShfY3RsKS0+cG9ydF9mcm9tID0gKGluX2l0KS0+cnBvcnQ7IFwKKwkJaWYgKChp
bl9pdCktPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEKSB7IFwKKwkJ
CShfY3RsKS0+ZG9fbm90X3JlZl9zdGNiID0gMTsgXAorCQl9XAorCX0gXAorfSB3aGlsZSAoMCkK
Kworc3RydWN0IG1idWYgKgorc2N0cF9idWlsZF9jdGxfbmNodW5rKHN0cnVjdCBzY3RwX2lucGNi
ICppbnAsCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqc2lu
Zm8pOworCit2b2lkIHNjdHBfc2V0X3J3bmQoc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3Rw
X2Fzc29jaWF0aW9uICopOworCit1aW50MzJfdAorc2N0cF9jYWxjX3J3bmQoc3RydWN0IHNjdHBf
dGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyk7CisKK3ZvaWQKK3NjdHBf
ZXhwcmVzc19oYW5kbGVfc2FjayhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQzMl90IGN1bWFj
aywKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCByd25kLCBpbnQgKmFib3J0X25v
dywgaW50IGVjbmVfc2Vlbik7CisKK3ZvaWQKK3NjdHBfaGFuZGxlX3NhY2soc3RydWN0IG1idWYg
Km0sIGludCBvZmZzZXRfc2VnLCBpbnQgb2Zmc2V0X2R1cCwKKyAgICAgICAgICAgICAgICAgc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLAorICAgICAgICAgICAgICAgICB1aW50MTZfdCBudW1fc2VnLCB1
aW50MTZfdCBudW1fbnJfc2VnLCB1aW50MTZfdCBudW1fZHVwLAorICAgICAgICAgICAgICAgICBp
bnQgKmFib3J0X25vdywgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgdWludDMyX3Qg
Y3VtX2FjaywgdWludDMyX3QgcnduZCwgaW50IGVjbmVfc2Vlbik7CisKKy8qIGRyYWZ0LWlldGYt
dHN2d2ctdXNjdHAgKi8KK3ZvaWQKK3NjdHBfaGFuZGxlX2ZvcndhcmRfdHNuKHN0cnVjdCBzY3Rw
X3RjYiAqLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfZm9yd2FyZF90c25f
Y2h1bmsgKiwgaW50ICosIHN0cnVjdCBtYnVmICosIGludCk7CisKK3N0cnVjdCBzY3RwX3RtaXRf
Y2h1bmsgKgorc2N0cF90cnlfYWR2YW5jZV9wZWVyX2Fja19wb2ludChzdHJ1Y3Qgc2N0cF90Y2Ig
Kiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKik7CisKK3ZvaWQgc2N0cF9zZXJ2aWNlX3F1ZXVl
cyhzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKik7CisKK3ZvaWQK
K3NjdHBfdXBkYXRlX2Fja2VkKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9zaHV0ZG93
bl9jaHVuayAqLCBpbnQgKik7CisKK2ludAorc2N0cF9wcm9jZXNzX2RhdGEoc3RydWN0IG1idWYg
KiosIGludCwgaW50ICosIGludCwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX2lucGNi
ICosIHN0cnVjdCBzY3RwX3RjYiAqLAorICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfbmV0
cyAqLCB1aW50MzJfdCAqKTsKKwordm9pZCBzY3RwX3NsaWRlX21hcHBpbmdfYXJyYXlzKHN0cnVj
dCBzY3RwX3RjYiAqc3RjYik7CisKK3ZvaWQgc2N0cF9zYWNrX2NoZWNrKHN0cnVjdCBzY3RwX3Rj
YiAqLCBpbnQpOworCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0
cGxpYi9uZXRpbmV0L3NjdHBfaW5wdXQuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9z
Y3RwX2lucHV0LmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwLi5mYjZl
NGMyM2ViODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQv
c2N0cF9pbnB1dC5jCkBAIC0wLDAgKzEsNjQzOCBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRl
bnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDgsIGJ5
IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
YykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisg
KiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4K
KyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lz
Y28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJT
RCQiKTsKKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+CisjaW5jbHVkZSA8
bmV0aW5ldC9zY3RwX3Zhci5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9zeXNjdGwuaD4KKyNp
bmNsdWRlIDxuZXRpbmV0L3NjdHBfcGNiLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2hlYWRl
ci5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cHV0aWwuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3Nj
dHBfb3V0cHV0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2lucHV0Lmg+CisjaW5jbHVkZSA8
bmV0aW5ldC9zY3RwX2F1dGguaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaW5kYXRhLmg+Cisj
aW5jbHVkZSA8bmV0aW5ldC9zY3RwX2FzY29uZi5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9i
c2RfYWRkci5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF90aW1lci5oPgorI2luY2x1ZGUgPG5l
dGluZXQvc2N0cF9jcmMzMi5oPgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2tkdHJhY2UuaD4KKyNlbmRp
ZgorI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKyNpZiAhZGVmaW5lZChfV0lO
MzIpCisjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpbmNsdWRlIDxzeXMv
c21wLmg+CisjZW5kaWYKKworc3RhdGljIHZvaWQKK3NjdHBfc3RvcF9hbGxfY29va2llX3RpbWVy
cyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCit7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCisJ
LyogVGhpcyBub3cgbm90IG9ubHkgc3RvcHMgYWxsIGNvb2tpZSB0aW1lcnMKKwkgKiBpdCBhbHNv
IHN0b3BzIGFueSBJTklUIHRpbWVycyBhcyB3ZWxsLiBUaGlzCisJICogd2lsbCBtYWtlIHN1cmUg
dGhhdCB0aGUgdGltZXJzIGFyZSBzdG9wcGVkIGluCisJICogYWxsIGNvbGxpc2lvbiBjYXNlcy4K
KwkgKi8KKwlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKwlUQUlMUV9GT1JFQUNIKG5ldCwg
JnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCWlmIChuZXQtPnJ4dF90aW1lci50eXBl
ID09IFNDVFBfVElNRVJfVFlQRV9DT09LSUUpIHsKKwkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJ
TUVSX1RZUEVfQ09PS0lFLAorCQkJCQlzdGNiLT5zY3RwX2VwLAorCQkJCQlzdGNiLAorCQkJCQlu
ZXQsIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfMSk7CisJCX0gZWxzZSBpZiAobmV0
LT5yeHRfdGltZXIudHlwZSA9PSBTQ1RQX1RJTUVSX1RZUEVfSU5JVCkgeworCQkJc2N0cF90aW1l
cl9zdG9wKFNDVFBfVElNRVJfVFlQRV9JTklULAorCQkJCQlzdGNiLT5zY3RwX2VwLAorCQkJCQlz
dGNiLAorCQkJCQluZXQsIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfMik7CisJCX0K
Kwl9Cit9CisKKy8qIElOSVQgaGFuZGxlciAqLworc3RhdGljIHZvaWQKK3NjdHBfaGFuZGxlX2lu
aXQoc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIGludCBvZmZzZXQsCisgICAgICAgICAgICAg
ICAgIHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwgc3RydWN0IHNj
dHBoZHIgKnNoLAorICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICpjcCwg
c3RydWN0IHNjdHBfaW5wY2IgKmlucCwKKyAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfdGNi
ICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIGludCAqYWJvcnRfbm9fdW5sb2NrLAorI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisgICAgICAg
ICAgICAgICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxvd2lkLAorI2VuZGlmCisg
ICAgICAgICAgICAgICAgIHVpbnQzMl90IHZyZl9pZCwgdWludDE2X3QgcG9ydCkKK3sKKwlzdHJ1
Y3Qgc2N0cF9pbml0ICppbml0OworCXN0cnVjdCBtYnVmICpvcF9lcnI7CisKKwlTQ1RQREJHKFND
VFBfREVCVUdfSU5QVVQyLCAic2N0cF9oYW5kbGVfaW5pdDogaGFuZGxpbmcgSU5JVCB0Y2I6JXBc
biIsCisJCSh2b2lkICopc3RjYik7CisJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQlTQ1RQX0lOUF9S
TE9DSyhpbnApOworCX0KKwkvKiBWYWxpZGF0ZSBwYXJhbWV0ZXJzICovCisJaW5pdCA9ICZjcC0+
aW5pdDsKKwlpZiAoKG50b2hsKGluaXQtPmluaXRpYXRlX3RhZykgPT0gMCkgfHwKKwkgICAgKG50
b2hsKGluaXQtPmFfcnduZCkgPCBTQ1RQX01JTl9SV05EKSB8fAorCSAgICAobnRvaHMoaW5pdC0+
bnVtX2luYm91bmRfc3RyZWFtcykgPT0gMCkgfHwKKwkgICAgKG50b2hzKGluaXQtPm51bV9vdXRi
b3VuZF9zdHJlYW1zKSA9PSAwKSkgeworCQkvKiBwcm90b2NvbCBlcnJvci4uLiBzZW5kIGFib3J0
ICovCisJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9JTlZBTElEX1BB
UkFNLCAiIik7CisJCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oaW5wLCBzdGNiLCBtLCBpcGhsZW4s
IHNyYywgZHN0LCBzaCwgb3BfZXJyLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCisJCSAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBt
Zmxvd2lkLAorI2VuZGlmCisJCQkJICAgICAgIHZyZl9pZCwgcG9ydCk7CisJCWlmIChzdGNiKQor
CQkJKmFib3J0X25vX3VubG9jayA9IDE7CisJCWdvdG8gb3V0bm93OworCX0KKwlpZiAoc2N0cF92
YWxpZGF0ZV9pbml0X2F1dGhfcGFyYW1zKG0sIG9mZnNldCArIHNpemVvZigqY3ApLAorCQkJCQkg
ICBvZmZzZXQgKyBudG9ocyhjcC0+Y2guY2h1bmtfbGVuZ3RoKSkpIHsKKwkJLyogYXV0aCBwYXJh
bWV0ZXIocykgZXJyb3IuLi4gc2VuZCBhYm9ydCAqLworCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRl
X2NhdXNlKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9fY29kZSksCisJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIlByb2JsZW0gd2l0aCBBVVRIIHBhcmFtZXRlcnMiKTsKKwkJ
c2N0cF9hYm9ydF9hc3NvY2lhdGlvbihpbnAsIHN0Y2IsIG0sIGlwaGxlbiwgc3JjLCBkc3QsIHNo
LCBvcF9lcnIsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKKwkJICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCisjZW5k
aWYKKwkJICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOworCQlpZiAoc3RjYikK
KwkJCSphYm9ydF9ub191bmxvY2sgPSAxOworCQlnb3RvIG91dG5vdzsKKwl9CisJLyogV2UgYXJl
IG9ubHkgYWNjZXB0aW5nIGlmIHdlIGhhdmUgYSBsaXN0ZW5pbmcgc29ja2V0LiovCisJaWYgKChz
dGNiID09IE5VTEwpICYmCisJICAgICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
U09DS0VUX0dPTkUpIHx8CisJICAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
U09DS0VUX0FMTEdPTkUpIHx8CisJICAgICAoIVNDVFBfSVNfTElTVEVOSU5HKGlucCkpKSkgewor
CQkvKgorCQkgKiBGSVggTUUgPz8gV2hhdCBhYm91dCBUQ1AgbW9kZWwgYW5kIHdlIGhhdmUgYQor
CQkgKiBtYXRjaC9yZXN0YXJ0IGNhc2U/IEFjdHVhbGx5IG5vIGZpeCBpcyBuZWVkZWQuCisJCSAq
IHRoZSBsb29rdXAgd2lsbCBhbHdheXMgZmluZCB0aGUgZXhpc3RpbmcgYXNzb2Mgc28gc3RjYgor
CQkgKiB3b3VsZCBub3QgYmUgTlVMTC4gSXQgbWF5IGJlIHF1ZXN0aW9uYWJsZSB0byBkbyB0aGlz
CisJCSAqIHNpbmNlIHdlIENPVUxEIGp1c3Qgc2VuZCBiYWNrIHRoZSBJTklULUFDSyBhbmQgaG9w
ZSB0aGF0CisJCSAqIHRoZSBhcHAgZGlkIGFjY2VwdCgpJ3MgYnkgdGhlIHRpbWUgdGhlIENPT0tJ
RSB3YXMgc2VudC4gQnV0CisJCSAqIHRoZXJlIGlzIGEgcHJpY2UgdG8gcGF5IGZvciBDT09LSUUg
Z2VuZXJhdGlvbiBhbmQgSSBkb24ndAorCQkgKiB3YW50IHRvIHBheSBpdCBvbiB0aGUgY2hhbmNl
IHRoYXQgdGhlIGFwcCB3aWxsIGFjdHVhbGx5IGRvCisJCSAqIHNvbWUgYWNjZXB0cygpLiBUaGUg
QXBwIGp1c3QgbG9vc2VzIGFuZCBzaG91bGQgTk9UIGJlIGluCisJCSAqIHRoaXMgc3RhdGUgOi0p
CisJCSAqLworCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2JsYWNraG9sZSkgPT0gMCkgewor
CQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlh
Z19pbmZvX2NvZGUpLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm8gbGlzdGVu
ZXIiKTsKKwkJCXNjdHBfc2VuZF9hYm9ydChtLCBpcGhsZW4sIHNyYywgZHN0LCBzaCwgMCwgb3Bf
ZXJyLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisJCQkgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBpbnAtPmZpYm51bSwKKyNl
bmRpZgorCQkJICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7CisJCX0KKwkJZ290byBvdXRu
b3c7CisJfQorCWlmICgoc3RjYiAhPSBOVUxMKSAmJgorCSAgICAoU0NUUF9HRVRfU1RBVEUoc3Rj
YikgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkpIHsKKwkJU0NUUERCRyhTQ1RQX0RF
QlVHX0lOUFVUMywgInNjdHBfaGFuZGxlX2luaXQ6IHNlbmRpbmcgU0hVVERPV04tQUNLXG4iKTsK
KwkJc2N0cF9zZW5kX3NodXRkb3duX2FjayhzdGNiLCBOVUxMKTsKKwkJc2N0cF9jaHVua19vdXRw
dXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX0NPTlRST0xfUFJPQywgU0NUUF9TT19OT1Rf
TE9DS0VEKTsKKwl9IGVsc2UgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAic2N0cF9o
YW5kbGVfaW5pdDogc2VuZGluZyBJTklULUFDS1xuIik7CisJCXNjdHBfc2VuZF9pbml0aWF0ZV9h
Y2soaW5wLCBzdGNiLCBuZXQsIG0sIGlwaGxlbiwgb2Zmc2V0LAorCQkgICAgICAgICAgICAgICAg
ICAgICAgIHNyYywgZHN0LCBzaCwgY3AsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUs
IG1mbG93aWQsCisjZW5kaWYKKwkJICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQp
OworCX0KKyBvdXRub3c6CisJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQlTQ1RQX0lOUF9SVU5MT0NL
KGlucCk7CisJfQorfQorCisvKgorICogcHJvY2VzcyBwZWVyICJJTklUL0lOSVQtQUNLIiBjaHVu
ayByZXR1cm5zIHZhbHVlIDwgMCBvbiBlcnJvcgorICovCisKK2ludAorc2N0cF9pc190aGVyZV91
bnNlbnRfZGF0YShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCBzb19sb2NrZWQpCit7CisJaW50
IHVuc2VudF9kYXRhOworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1
ZV9wZW5kaW5nICpzcDsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKworCS8qIFRo
aXMgZnVuY3Rpb24gcmV0dXJucyBpZiBhbnkgc3RyZWFtIGhhcyB0cnVlIHVuc2VudCBkYXRhIG9u
IGl0LgorCSAqIE5vdGUgdGhhdCBhcyBpdCBsb29rcyB0aHJvdWdoIGl0IHdpbGwgY2xlYW4gdXAg
YW55IHBsYWNlcyB0aGF0CisJICogaGF2ZSBvbGQgZGF0YSB0aGF0IGhhcyBiZWVuIHNlbnQgYnV0
IGxlZnQgYXQgdG9wIG9mIHN0cmVhbSBxdWV1ZS4KKwkgKi8KKwlhc29jID0gJnN0Y2ItPmFzb2M7
CisJdW5zZW50X2RhdGEgPSAwOworCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKKwlpZiAoIXN0
Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3NfaXNfZW1wdHkoc3RjYiwgYXNvYykpIHsKKwkJ
LyogQ2hlY2sgdG8gc2VlIGlmIHNvbWUgZGF0YSBxdWV1ZWQgKi8KKwkJZm9yIChpID0gMDsgaSA8
IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OyBpKyspIHsKKwkJCS8qc2FfaWdub3JlIEZSRUVEX01F
TU9SWSovCisJCQlzcCA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLnN0cm1vdXRbaV0ub3V0cXVl
dWUpOworCQkJaWYgKHNwID09IE5VTEwpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICgo
c3AtPm1zZ19pc19jb21wbGV0ZSkgJiYKKwkJCSAgICAoc3AtPmxlbmd0aCA9PSAwKSAgJiYKKwkJ
CSAgICAoc3AtPnNlbmRlcl9hbGxfZG9uZSkpIHsKKwkJCQkvKiBXZSBhcmUgZG9pbmcgZGlmZmVy
ZWQgY2xlYW51cC4gTGFzdAorCQkJCSAqIHRpbWUgdGhyb3VnaCB3aGVuIHdlIHRvb2sgYWxsIHRo
ZSBkYXRhCisJCQkJICogdGhlIHNlbmRlcl9hbGxfZG9uZSB3YXMgbm90IHNldC4KKwkJCQkgKi8K
KwkJCQlpZiAoc3AtPnB1dF9sYXN0X291dCA9PSAwKSB7CisJCQkJCVNDVFBfUFJJTlRGKCJHYWss
IHB1dCBvdXQgZW50aXJlIG1zZyB3aXRoIE5PIGVuZCEtMVxuIik7CisJCQkJCVNDVFBfUFJJTlRG
KCJzZW5kZXJfZG9uZTolZCBsZW46JWQgbXNnX2NvbXA6JWQgcHV0X2xhc3Rfb3V0OiVkXG4iLAor
CQkJCQkgICAgICAgICAgICBzcC0+c2VuZGVyX2FsbF9kb25lLAorCQkJCQkgICAgICAgICAgICBz
cC0+bGVuZ3RoLAorCQkJCQkgICAgICAgICAgICBzcC0+bXNnX2lzX2NvbXBsZXRlLAorCQkJCQkg
ICAgICAgICAgICBzcC0+cHV0X2xhc3Rfb3V0KTsKKwkJCQl9CisJCQkJYXRvbWljX3N1YnRyYWN0
X2ludCgmc3RjYi0+YXNvYy5zdHJlYW1fcXVldWVfY250LCAxKTsKKwkJCQlUQUlMUV9SRU1PVkUo
JnN0Y2ItPmFzb2Muc3RybW91dFtpXS5vdXRxdWV1ZSwgc3AsIG5leHQpOworCQkJCXN0Y2ItPmFz
b2Muc3NfZnVuY3Rpb25zLnNjdHBfc3NfcmVtb3ZlX2Zyb21fc3RyZWFtKHN0Y2IsIGFzb2MsICZh
c29jLT5zdHJtb3V0W2ldLCBzcCwgMSk7CisJCQkJaWYgKHNwLT5uZXQpIHsKKwkJCQkJc2N0cF9m
cmVlX3JlbW90ZV9hZGRyKHNwLT5uZXQpOworCQkJCQlzcC0+bmV0ID0gTlVMTDsKKwkJCQl9CisJ
CQkJaWYgKHNwLT5kYXRhKSB7CisJCQkJCXNjdHBfbV9mcmVlbShzcC0+ZGF0YSk7CisJCQkJCXNw
LT5kYXRhID0gTlVMTDsKKwkJCQl9CisJCQkJc2N0cF9mcmVlX2Ffc3RybW9xKHN0Y2IsIHNwLCBz
b19sb2NrZWQpOworCQkJCWlmICghVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc3RybW91dFtpXS5v
dXRxdWV1ZSkpIHsKKwkJCQkJdW5zZW50X2RhdGErKzsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJ
CXVuc2VudF9kYXRhKys7CisJCQl9CisJCQlpZiAodW5zZW50X2RhdGEgPiAwKSB7CisJCQkJYnJl
YWs7CisJCQl9CisJCX0KKwl9CisJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJcmV0dXJu
ICh1bnNlbnRfZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfcHJvY2Vzc19pbml0KHN0cnVj
dCBzY3RwX2luaXRfY2h1bmsgKmNwLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCit7CisJc3RydWN0
IHNjdHBfaW5pdCAqaW5pdDsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1
Y3Qgc2N0cF9uZXRzICpsbmV0OworCXVuc2lnbmVkIGludCBpOworCisJaW5pdCA9ICZjcC0+aW5p
dDsKKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJLyogc2F2ZSBvZmYgcGFyYW1ldGVycyAqLworCWFz
b2MtPnBlZXJfdnRhZyA9IG50b2hsKGluaXQtPmluaXRpYXRlX3RhZyk7CisJYXNvYy0+cGVlcnNf
cnduZCA9IG50b2hsKGluaXQtPmFfcnduZCk7CisJLyogaW5pdCB0c24ncyAqLworCWFzb2MtPmhp
Z2hlc3RfdHNuX2luc2lkZV9tYXAgPSBhc29jLT5hc2NvbmZfc2VxX2luID0gbnRvaGwoaW5pdC0+
aW5pdGlhbF90c24pIC0gMTsKKworCWlmICghVEFJTFFfRU1QVFkoJmFzb2MtPm5ldHMpKSB7CisJ
CS8qIHVwZGF0ZSBhbnkgc3N0aHJlc2gncyB0aGF0IG1heSBoYXZlIGEgZGVmYXVsdCAqLworCQlU
QUlMUV9GT1JFQUNIKGxuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKKwkJCWxuZXQtPnNz
dGhyZXNoID0gYXNvYy0+cGVlcnNfcnduZDsKKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCkgJiAoU0NUUF9DV05EX01PTklUT1JfRU5BQkxFfFNDVFBfQ1dORF9MT0dH
SU5HX0VOQUJMRSkpIHsKKwkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIGxuZXQsIDAsIFNDVFBfQ1dO
RF9JTklUSUFMSVpBVElPTik7CisJCQl9CisJCX0KKwl9CisJU0NUUF9UQ0JfU0VORF9MT0NLKHN0
Y2IpOworCWlmIChhc29jLT5wcmVfb3Blbl9zdHJlYW1zID4gbnRvaHMoaW5pdC0+bnVtX2luYm91
bmRfc3RyZWFtcykpIHsKKwkJdW5zaWduZWQgaW50IG5ld2NudDsKKwkJc3RydWN0IHNjdHBfc3Ry
ZWFtX291dCAqb3V0czsKKwkJc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwLCAq
bnNwOworCQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssICpuY2hrOworCisJCS8qIGFiYW5k
b24gdGhlIHVwcGVyIHN0cmVhbXMgKi8KKwkJbmV3Y250ID0gbnRvaHMoaW5pdC0+bnVtX2luYm91
bmRfc3RyZWFtcyk7CisJCVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGssICZhc29jLT5zZW5kX3F1ZXVl
LCBzY3RwX25leHQsIG5jaGspIHsKKwkJCWlmIChjaGstPnJlYy5kYXRhLnNpZCA+PSBuZXdjbnQp
IHsKKwkJCQlUQUlMUV9SRU1PVkUoJmFzb2MtPnNlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsK
KwkJCQlhc29jLT5zZW5kX3F1ZXVlX2NudC0tOworCQkJCWlmIChhc29jLT5zdHJtb3V0W2Noay0+
cmVjLmRhdGEuc2lkXS5jaHVua3Nfb25fcXVldWVzID4gMCkgeworCQkJCQlhc29jLT5zdHJtb3V0
W2Noay0+cmVjLmRhdGEuc2lkXS5jaHVua3Nfb25fcXVldWVzLS07CisjaWZkZWYgSU5WQVJJQU5U
UworCQkJCX0gZWxzZSB7CisJCQkJCXBhbmljKCJObyBjaHVua3Mgb24gdGhlIHF1ZXVlcyBmb3Ig
c2lkICV1LiIsIGNoay0+cmVjLmRhdGEuc2lkKTsKKyNlbmRpZgorCQkJCX0KKwkJCQlpZiAoY2hr
LT5kYXRhICE9IE5VTEwpIHsKKwkJCQkJc2N0cF9mcmVlX2J1ZnNwYWNlKHN0Y2IsIGFzb2MsIGNo
aywgMSk7CisJCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9VTlNFTlRfREdfRkFJTCwg
c3RjYiwKKwkJCQkJICAgICAgICAgICAgICAgIDAsIGNoaywgU0NUUF9TT19OT1RfTE9DS0VEKTsK
KwkJCQkJaWYgKGNoay0+ZGF0YSkgeworCQkJCQkJc2N0cF9tX2ZyZWVtKGNoay0+ZGF0YSk7CisJ
CQkJCQljaGstPmRhdGEgPSBOVUxMOworCQkJCQl9CisJCQkJfQorCQkJCXNjdHBfZnJlZV9hX2No
dW5rKHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCQkvKnNhX2lnbm9yZSBGUkVF
RF9NRU1PUlkqLworCQkJfQorCQl9CisJCWlmIChhc29jLT5zdHJtb3V0KSB7CisJCQlmb3IgKGkg
PSBuZXdjbnQ7IGkgPCBhc29jLT5wcmVfb3Blbl9zdHJlYW1zOyBpKyspIHsKKwkJCQlvdXRzID0g
JmFzb2MtPnN0cm1vdXRbaV07CisJCQkJVEFJTFFfRk9SRUFDSF9TQUZFKHNwLCAmb3V0cy0+b3V0
cXVldWUsIG5leHQsIG5zcCkgeworCQkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29j
LnN0cmVhbV9xdWV1ZV9jbnQsIDEpOworCQkJCQlUQUlMUV9SRU1PVkUoJm91dHMtPm91dHF1ZXVl
LCBzcCwgbmV4dCk7CisJCQkJCXN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3NfcmVtb3Zl
X2Zyb21fc3RyZWFtKHN0Y2IsIGFzb2MsIG91dHMsIHNwLCAxKTsKKwkJCQkJc2N0cF91bHBfbm90
aWZ5KFNDVFBfTk9USUZZX1NQRUNJQUxfU1BfRkFJTCwKKwkJCQkJICAgIHN0Y2IsIDAsIHNwLCBT
Q1RQX1NPX05PVF9MT0NLRUQpOworCQkJCQlpZiAoc3AtPmRhdGEpIHsKKwkJCQkJCXNjdHBfbV9m
cmVlbShzcC0+ZGF0YSk7CisJCQkJCQlzcC0+ZGF0YSA9IE5VTEw7CisJCQkJCX0KKwkJCQkJaWYg
KHNwLT5uZXQpIHsKKwkJCQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihzcC0+bmV0KTsKKwkJCQkJ
CXNwLT5uZXQgPSBOVUxMOworCQkJCQl9CisJCQkJCS8qIEZyZWUgdGhlIGNodW5rICovCisJCQkJ
CXNjdHBfZnJlZV9hX3N0cm1vcShzdGNiLCBzcCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCQkJ
LypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KKwkJCQl9CisJCQkJb3V0cy0+c3RhdGUgPSBTQ1RQ
X1NUUkVBTV9DTE9TRUQ7CisJCQl9CisJCX0KKwkJLyogY3V0IGJhY2sgdGhlIGNvdW50ICovCisJ
CWFzb2MtPnByZV9vcGVuX3N0cmVhbXMgPSBuZXdjbnQ7CisJfQorCVNDVFBfVENCX1NFTkRfVU5M
T0NLKHN0Y2IpOworCWFzb2MtPnN0cmVhbW91dGNudCA9IGFzb2MtPnByZV9vcGVuX3N0cmVhbXM7
CisJaWYgKGFzb2MtPnN0cm1vdXQpIHsKKwkJZm9yIChpID0gMDsgaSA8IGFzb2MtPnN0cmVhbW91
dGNudDsgaSsrKSB7CisJCQlhc29jLT5zdHJtb3V0W2ldLnN0YXRlID0gU0NUUF9TVFJFQU1fT1BF
TjsKKwkJfQorCX0KKwkvKiBFWSAtIG5yX3NhY2s6IGluaXRpYWxpemUgaGlnaGVzdCB0c24gaW4g
bnJfbWFwcGluZ19hcnJheSAqLworCWFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXAgPSBh
c29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwOworCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCkgJiBTQ1RQX01BUF9MT0dHSU5HX0VOQUJMRSkgeworCQlzY3RwX2xvZ19t
YXAoMCwgNSwgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCwgU0NUUF9NQVBfU0xJREVfUkVT
VUxUKTsKKwl9CisJLyogVGhpcyBpcyB0aGUgbmV4dCBvbmUgd2UgZXhwZWN0ICovCisJYXNvYy0+
c3RyX3Jlc2V0X3NlcV9pbiA9IGFzb2MtPmFzY29uZl9zZXFfaW4gKyAxOworCisJYXNvYy0+bWFw
cGluZ19hcnJheV9iYXNlX3RzbiA9IG50b2hsKGluaXQtPmluaXRpYWxfdHNuKTsKKwlhc29jLT50
c25fbGFzdF9kZWxpdmVyZWQgPSBhc29jLT5jdW11bGF0aXZlX3RzbiA9IGFzb2MtPmFzY29uZl9z
ZXFfaW47CisKKwlhc29jLT5hZHZhbmNlZF9wZWVyX2Fja19wb2ludCA9IGFzb2MtPmxhc3RfYWNr
ZWRfc2VxOworCS8qIG9wZW4gdGhlIHJlcXVlc3RlZCBzdHJlYW1zICovCisKKwlpZiAoYXNvYy0+
c3RybWluICE9IE5VTEwpIHsKKwkJLyogRnJlZSB0aGUgb2xkIG9uZXMgKi8KKwkJZm9yIChpID0g
MDsgaSA8IGFzb2MtPnN0cmVhbWluY250OyBpKyspIHsKKwkJCXNjdHBfY2xlYW5fdXBfc3RyZWFt
KHN0Y2IsICZhc29jLT5zdHJtaW5baV0uaW5xdWV1ZSk7CisJCQlzY3RwX2NsZWFuX3VwX3N0cmVh
bShzdGNiLCAmYXNvYy0+c3RybWluW2ldLnVub19pbnF1ZXVlKTsKKwkJfQorCQlTQ1RQX0ZSRUUo
YXNvYy0+c3RybWluLCBTQ1RQX01fU1RSTUkpOworCX0KKwlpZiAoYXNvYy0+bWF4X2luYm91bmRf
c3RyZWFtcyA+IG50b2hzKGluaXQtPm51bV9vdXRib3VuZF9zdHJlYW1zKSkgeworCQlhc29jLT5z
dHJlYW1pbmNudCA9IG50b2hzKGluaXQtPm51bV9vdXRib3VuZF9zdHJlYW1zKTsKKwl9IGVsc2Ug
eworCQlhc29jLT5zdHJlYW1pbmNudCA9IGFzb2MtPm1heF9pbmJvdW5kX3N0cmVhbXM7CisJfQor
CVNDVFBfTUFMTE9DKGFzb2MtPnN0cm1pbiwgc3RydWN0IHNjdHBfc3RyZWFtX2luICosIGFzb2Mt
PnN0cmVhbWluY250ICoKKwkJICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1faW4pLCBTQ1RQ
X01fU1RSTUkpOworCWlmIChhc29jLT5zdHJtaW4gPT0gTlVMTCkgeworCQkvKiB3ZSBkaWRuJ3Qg
Z2V0IG1lbW9yeSBmb3IgdGhlIHN0cmVhbXMhICovCisJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBV
VDIsICJwcm9jZXNzX2luaXQ6IGNvdWxkbid0IGdldCBtZW1vcnkgZm9yIHRoZSBzdHJlYW1zIVxu
Iik7CisJCXJldHVybiAoLTEpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgYXNvYy0+c3RyZWFtaW5j
bnQ7IGkrKykgeworCQlhc29jLT5zdHJtaW5baV0uc2lkID0gaTsKKwkJYXNvYy0+c3RybWluW2ld
Lmxhc3RfbWlkX2RlbGl2ZXJlZCA9IDB4ZmZmZmZmZmY7CisJCVRBSUxRX0lOSVQoJmFzb2MtPnN0
cm1pbltpXS5pbnF1ZXVlKTsKKwkJVEFJTFFfSU5JVCgmYXNvYy0+c3RybWluW2ldLnVub19pbnF1
ZXVlKTsKKwkJYXNvYy0+c3RybWluW2ldLnBkX2FwaV9zdGFydGVkID0gMDsKKwkJYXNvYy0+c3Ry
bWluW2ldLmRlbGl2ZXJ5X3N0YXJ0ZWQgPSAwOworCX0KKwkvKgorCSAqIGxvYWRfYWRkcmVzc19m
cm9tX2luaXQgd2lsbCBwdXQgdGhlIGFkZHJlc3NlcyBpbnRvIHRoZQorCSAqIGFzc29jaWF0aW9u
IHdoZW4gdGhlIENPT0tJRSBpcyBwcm9jZXNzZWQgb3IgdGhlIElOSVQtQUNLIGlzCisJICogcHJv
Y2Vzc2VkLiBCb3RoIHR5cGVzIG9mIENPT0tJRSdzIGV4aXN0aW5nIGFuZCBuZXcgY2FsbCB0aGlz
CisJICogcm91dGluZS4gSXQgd2lsbCByZW1vdmUgYWRkcmVzc2VzIHRoYXQgYXJlIG5vIGxvbmdl
ciBpbiB0aGUKKwkgKiBhc3NvY2lhdGlvbiAoZm9yIHRoZSByZXN0YXJ0aW5nIGNhc2Ugd2hlcmUg
YWRkcmVzc2VzIGFyZQorCSAqIHJlbW92ZWQpLiBVcCBmcm9udCB3aGVuIHRoZSBJTklUIGFycml2
ZXMgd2Ugd2lsbCBkaXNjYXJkIGl0IGlmIGl0CisJICogaXMgYSByZXN0YXJ0IGFuZCBuZXcgYWRk
cmVzc2VzIGhhdmUgYmVlbiBhZGRlZC4KKwkgKi8KKwkvKiBzYV9pZ25vcmUgTUVNTEVBSyAqLwor
CXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBJTklULUFDSyBtZXNzYWdlIHByb2Nlc3NpbmcvY29u
c3VtcHRpb24gcmV0dXJucyB2YWx1ZSA8IDAgb24gZXJyb3IKKyAqLworc3RhdGljIGludAorc2N0
cF9wcm9jZXNzX2luaXRfYWNrKHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQgb2Zmc2V0
LAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qgc29j
a2FkZHIgKmRzdCwgc3RydWN0IHNjdHBoZHIgKnNoLAorICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdCBzY3RwX2luaXRfYWNrX2NodW5rICpjcCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgaW50ICphYm9ydF9ub191
bmxvY2ssCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwkJICAgICAgdWludDhfdCBtZmxvd3R5cGUsIHVpbnQzMl90IG1mbG93aWQsCisjZW5kaWYK
KyAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2cmZfaWQpCit7CisJc3RydWN0IHNjdHBf
YXNzb2NpYXRpb24gKmFzb2M7CisJc3RydWN0IG1idWYgKm9wX2VycjsKKwlpbnQgcmV0dmFsLCBh
Ym9ydF9mbGFnLCBjb29raWVfZm91bmQ7CisJaW50IGluaXRhY2tfbGltaXQ7CisJaW50IG5hdF9m
cmllbmRseSA9IDA7CisKKwkvKiBGaXJzdCB2ZXJpZnkgdGhhdCB3ZSBoYXZlIG5vIGlsbGVnYWwg
cGFyYW0ncyAqLworCWFib3J0X2ZsYWcgPSAwOworCWNvb2tpZV9mb3VuZCA9IDA7CisKKwlvcF9l
cnIgPSBzY3RwX2FyZXRoZXJlX3VucmVjb2duaXplZF9wYXJhbWV0ZXJzKG0sCisJCQkJCQkgICAg
ICAgKG9mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rKSksCisJCQkJCQkgICAg
ICAgJmFib3J0X2ZsYWcsIChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKWNwLAorCQkJCQkJICAgICAg
ICZuYXRfZnJpZW5kbHksICZjb29raWVfZm91bmQpOworCWlmIChhYm9ydF9mbGFnKSB7CisJCS8q
IFNlbmQgYW4gYWJvcnQgYW5kIG5vdGlmeSBwZWVyICovCisJCXNjdHBfYWJvcnRfYW5fYXNzb2Np
YXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwor
CQkqYWJvcnRfbm9fdW5sb2NrID0gMTsKKwkJcmV0dXJuICgtMSk7CisJfQorCWlmICghY29va2ll
X2ZvdW5kKSB7CisJCXVpbnQxNl90IGxlbjsKKworCQkvKiBPbmx5IHJlcG9ydCB0aGUgbWlzc2lu
ZyBjb29raWUgcGFyYW1ldGVyICovCisJCWlmIChvcF9lcnIgIT0gTlVMTCkgeworCQkJc2N0cF9t
X2ZyZWVtKG9wX2Vycik7CisJCX0KKwkJbGVuID0gKHVpbnQxNl90KShzaXplb2Yoc3RydWN0IHNj
dHBfZXJyb3JfbWlzc2luZ19wYXJhbSkgKyBzaXplb2YodWludDE2X3QpKTsKKwkJLyogV2UgYWJv
cnQgd2l0aCBhbiBlcnJvciBvZiBtaXNzaW5nIG1hbmRhdG9yeSBwYXJhbSAqLworCQlvcF9lcnIg
PSBzY3RwX2dldF9tYnVmX2Zvcl9tc2cobGVuLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJ
CWlmIChvcF9lcnIgIT0gTlVMTCkgeworCQkJc3RydWN0IHNjdHBfZXJyb3JfbWlzc2luZ19wYXJh
bSAqY2F1c2U7CisKKwkJCVNDVFBfQlVGX0xFTihvcF9lcnIpID0gbGVuOworCQkJY2F1c2UgPSBt
dG9kKG9wX2Vyciwgc3RydWN0IHNjdHBfZXJyb3JfbWlzc2luZ19wYXJhbSAqKTsKKwkJCS8qIFN1
YnRyYWN0IHRoZSByZXNlcnZlZCBwYXJhbSAqLworCQkJY2F1c2UtPmNhdXNlLmNvZGUgPSBodG9u
cyhTQ1RQX0NBVVNFX01JU1NJTkdfUEFSQU0pOworCQkJY2F1c2UtPmNhdXNlLmxlbmd0aCA9IGh0
b25zKGxlbik7CisJCQljYXVzZS0+bnVtX21pc3NpbmdfcGFyYW1zID0gaHRvbmwoMSk7CisJCQlj
YXVzZS0+dHlwZVswXSA9IGh0b25zKFNDVFBfU1RBVEVfQ09PS0lFKTsKKwkJfQorCQlzY3RwX2Fi
b3J0X2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG0sIGlwaGxlbiwKKwkJCQkgICAg
ICAgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQkgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAorI2Vu
ZGlmCisJCQkJICAgICAgIHZyZl9pZCwgbmV0LT5wb3J0KTsKKwkJKmFib3J0X25vX3VubG9jayA9
IDE7CisJCXJldHVybiAoLTMpOworCX0KKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJYXNvYy0+cGVl
cl9zdXBwb3J0c19uYXQgPSAodWludDhfdCluYXRfZnJpZW5kbHk7CisJLyogcHJvY2VzcyB0aGUg
cGVlcidzIHBhcmFtZXRlcnMgaW4gdGhlIElOSVQtQUNLICovCisJaWYgKHNjdHBfcHJvY2Vzc19p
bml0KChzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICopY3AsIHN0Y2IpIDwgMCkgeworCQlpZiAob3Bf
ZXJyICE9IE5VTEwpIHsKKwkJCXNjdHBfbV9mcmVlbShvcF9lcnIpOworCQl9CisJCW9wX2VyciA9
IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9PVVRfT0ZfUkVTQywgIiIpOworCQlTQ1RQ
REJHKFNDVFBfREVCVUdfSU5QVVQxLCAic2N0cF9wcm9jZXNzX2luaXQoKSBmYWlsZWRcbiIpOwor
CQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG0sIGlwaGxlbiwK
KwkJICAgICAgICAgICAgICAgICAgICAgICBzcmMsIGRzdCwgc2gsIG9wX2VyciwKKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkgICAgICAgICAg
ICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKKyNlbmRpZgorCQkgICAgICAgICAgICAg
ICAgICAgICAgIHZyZl9pZCwgbmV0LT5wb3J0KTsKKwkJKmFib3J0X25vX3VubG9jayA9IDE7CisJ
CXJldHVybiAoLTEpOworCX0KKwlpbml0YWNrX2xpbWl0ID0gb2Zmc2V0ICsgbnRvaHMoY3AtPmNo
LmNodW5rX2xlbmd0aCk7CisJLyogbG9hZCBhbGwgYWRkcmVzc2VzICovCisJaWYgKChyZXR2YWwg
PSBzY3RwX2xvYWRfYWRkcmVzc2VzX2Zyb21faW5pdChzdGNiLCBtLAorCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3Rw
X2luaXRfY2h1bmspLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5pdGFja19saW1pdCwgc3JjLCBkc3QsIE5VTEwsIHN0Y2ItPmFzb2MucG9ydCkpIDwgMCkg
eworCQlpZiAob3BfZXJyICE9IE5VTEwpIHsKKwkJCXNjdHBfbV9mcmVlbShvcF9lcnIpOworCQl9
CisJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2Rp
YWdfaW5mb19jb2RlKSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvYmxlbSB3
aXRoIGFkZHJlc3MgcGFyYW1ldGVycyIpOworCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQxLAor
CQkgICAgICAgICJMb2FkIGFkZHJlc3NlcyBmcm9tIElOSVQgY2F1c2VzIGFuIGFib3J0ICVkXG4i
LAorCQkgICAgICAgIHJldHZhbCk7CisJCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oc3RjYi0+c2N0
cF9lcCwgc3RjYiwgbSwgaXBobGVuLAorCQkgICAgICAgICAgICAgICAgICAgICAgIHNyYywgZHN0
LCBzaCwgb3BfZXJyLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisJCSAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAor
I2VuZGlmCisJCSAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lkLCBuZXQtPnBvcnQpOworCQkq
YWJvcnRfbm9fdW5sb2NrID0gMTsKKwkJcmV0dXJuICgtMSk7CisJfQorCS8qIGlmIHRoZSBwZWVy
IGRvZXNuJ3Qgc3VwcG9ydCBhc2NvbmYsIGZsdXNoIHRoZSBhc2NvbmYgcXVldWUgKi8KKwlpZiAo
YXNvYy0+YXNjb25mX3N1cHBvcnRlZCA9PSAwKSB7CisJCXN0cnVjdCBzY3RwX2FzY29uZl9hZGRy
ICpwYXJhbSwgKm5wYXJhbTsKKworCQlUQUlMUV9GT1JFQUNIX1NBRkUocGFyYW0sICZhc29jLT5h
c2NvbmZfcXVldWUsIG5leHQsIG5wYXJhbSkgeworCQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5hc2Nv
bmZfcXVldWUsIHBhcmFtLCBuZXh0KTsKKwkJCVNDVFBfRlJFRShwYXJhbSwgU0NUUF9NX0FTQ19B
RERSKTsKKwkJfQorCX0KKworCXN0Y2ItPmFzb2MucGVlcl9obWFjX2lkID0gc2N0cF9uZWdvdGlh
dGVfaG1hY2lkKHN0Y2ItPmFzb2MucGVlcl9obWFjcywKKwkgICAgc3RjYi0+YXNvYy5sb2NhbF9o
bWFjcyk7CisJaWYgKG9wX2VycikgeworCQlzY3RwX3F1ZXVlX29wX2VycihzdGNiLCBvcF9lcnIp
OworCQkvKiBxdWV1aW5nIHdpbGwgc3RlYWwgYXdheSB0aGUgbWJ1ZiBjaGFpbiB0byB0aGUgb3V0
IHF1ZXVlICovCisJCW9wX2VyciA9IE5VTEw7CisJfQorCS8qIGV4dHJhY3QgdGhlIGNvb2tpZSBh
bmQgcXVldWUgaXQgdG8gImVjaG8iIGl0IGJhY2suLi4gKi8KKwlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9USFJFU0hPTERfTE9HR0lORykgeworCQlzY3Rw
X21pc2NfaW50cyhTQ1RQX1RIUkVTSE9MRF9DTEVBUiwKKwkJCSAgICAgICBzdGNiLT5hc29jLm92
ZXJhbGxfZXJyb3JfY291bnQsCisJCQkgICAgICAgMCwKKwkJCSAgICAgICBTQ1RQX0ZST01fU0NU
UF9JTlBVVCwKKwkJCSAgICAgICBfX0xJTkVfXyk7CisJfQorCXN0Y2ItPmFzb2Mub3ZlcmFsbF9l
cnJvcl9jb3VudCA9IDA7CisJbmV0LT5lcnJvcl9jb3VudCA9IDA7CisKKwkvKgorCSAqIENhbmNl
bCB0aGUgSU5JVCB0aW1lciwgV2UgZG8gdGhpcyBmaXJzdCBiZWZvcmUgcXVldWVpbmcgdGhlCisJ
ICogY29va2llLiBXZSBhbHdheXMgY2FuY2VsIGF0IHRoZSBwcmltYXJ5IHRvIGFzc3VlIHRoYXQg
d2UgYXJlCisJICogY2FuY2VsaW5nIHRoZSB0aW1lciBzdGFydGVkIGJ5IHRoZSBJTklUIHdoaWNo
IGFsd2F5cyBnb2VzIHRvIHRoZQorCSAqIHByaW1hcnkuCisJICovCisJc2N0cF90aW1lcl9zdG9w
KFNDVFBfVElNRVJfVFlQRV9JTklULCBzdGNiLT5zY3RwX2VwLCBzdGNiLAorCSAgICBhc29jLT5w
cmltYXJ5X2Rlc3RpbmF0aW9uLCBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzMpOwor
CisJLyogY2FsY3VsYXRlIHRoZSBSVE8gKi8KKwlzY3RwX2NhbGN1bGF0ZV9ydG8oc3RjYiwgYXNv
YywgbmV0LCAmYXNvYy0+dGltZV9lbnRlcmVkLAorCSAgICAgICAgICAgICAgICAgICBTQ1RQX1JU
VF9GUk9NX05PTl9EQVRBKTsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaWYgKHN0Y2It
PnNjdHBfZXAtPnJlY3ZfY2FsbGJhY2spIHsKKwkJaWYgKHN0Y2ItPnNjdHBfc29ja2V0KSB7CisJ
CQl1aW50MzJfdCBpbnF1ZXVlX2J5dGVzLCBzYl9mcmVlX25vdzsKKwkJCXN0cnVjdCBzY3RwX2lu
cGNiICppbnA7CisKKwkJCWlucCA9IHN0Y2ItPnNjdHBfZXA7CisJCQlpbnF1ZXVlX2J5dGVzID0g
c3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSAtIChzdGNiLT5hc29jLmNodW5rc19v
bl9vdXRfcXVldWUgKiBzaXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuaykpOworCQkJc2JfZnJl
ZV9ub3cgPSBTQ1RQX1NCX0xJTUlUX1NORChzdGNiLT5zY3RwX3NvY2tldCkgLSAoaW5xdWV1ZV9i
eXRlcyArIHN0Y2ItPmFzb2Muc2Jfc2VuZF9yZXN2KTsKKworCQkJLyogY2hlY2sgaWYgdGhlIGFt
b3VudCBmcmVlIGluIHRoZSBzZW5kIHNvY2tldCBidWZmZXIgY3Jvc3NlZCB0aGUgdGhyZXNob2xk
ICovCisJCQlpZiAoaW5wLT5zZW5kX2NhbGxiYWNrICYmCisJCQkgICAgKCgoaW5wLT5zZW5kX3Ni
X3RocmVzaG9sZCA+IDApICYmCisJCQkgICAgICAoc2JfZnJlZV9ub3cgPj0gaW5wLT5zZW5kX3Ni
X3RocmVzaG9sZCkgJiYKKwkJCSAgICAgIChzdGNiLT5hc29jLmNodW5rc19vbl9vdXRfcXVldWUg
PD0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX21heF9jaHVua3Nfb25fcXVldWUpKSkgfHwKKwkJCSAg
ICAgKGlucC0+c2VuZF9zYl90aHJlc2hvbGQgPT0gMCkpKSB7CisJCQkJYXRvbWljX2FkZF9pbnQo
JnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJ
aW5wLT5zZW5kX2NhbGxiYWNrKHN0Y2ItPnNjdHBfc29ja2V0LCBzYl9mcmVlX25vdywgaW5wLT51
bHBfaW5mbyk7CisJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQlhdG9taWNfc3VidHJhY3Rf
aW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQl9CisJCX0KKwl9CisjZW5kaWYKKwlyZXR2
YWwgPSBzY3RwX3NlbmRfY29va2llX2VjaG8obSwgb2Zmc2V0LCBpbml0YWNrX2xpbWl0LCBzdGNi
LCBuZXQpOworCXJldHVybiAocmV0dmFsKTsKK30KKworc3RhdGljIHZvaWQKK3NjdHBfaGFuZGxl
X2hlYXJ0YmVhdF9hY2soc3RydWN0IHNjdHBfaGVhcnRiZWF0X2NodW5rICpjcCwKKyAgICBzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwl1bmlvbiBzY3Rw
X3NvY2tzdG9yZSBzdG9yZTsKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpyX25ldCwgKmZfbmV0OworCXN0
cnVjdCB0aW1ldmFsIHR2OworCWludCByZXFfcHJpbSA9IDA7CisJdWludDE2X3Qgb2xkX2Vycm9y
X2NvdW50ZXI7CisKKwlpZiAobnRvaHMoY3AtPmNoLmNodW5rX2xlbmd0aCkgIT0gc2l6ZW9mKHN0
cnVjdCBzY3RwX2hlYXJ0YmVhdF9jaHVuaykpIHsKKwkJLyogSW52YWxpZCBsZW5ndGggKi8KKwkJ
cmV0dXJuOworCX0KKworCW1lbXNldCgmc3RvcmUsIDAsIHNpemVvZihzdG9yZSkpOworCXN3aXRj
aCAoY3AtPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCWNh
c2UgQUZfSU5FVDoKKwkJaWYgKGNwLT5oZWFydGJlYXQuaGJfaW5mby5hZGRyX2xlbiA9PSBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luKSkgeworCQkJc3RvcmUuc2luLnNpbl9mYW1pbHkgPSBjcC0+
aGVhcnRiZWF0LmhiX2luZm8uYWRkcl9mYW1pbHk7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJCQlz
dG9yZS5zaW4uc2luX2xlbiA9IGNwLT5oZWFydGJlYXQuaGJfaW5mby5hZGRyX2xlbjsKKyNlbmRp
ZgorCQkJc3RvcmUuc2luLnNpbl9wb3J0ID0gc3RjYi0+cnBvcnQ7CisJCQltZW1jcHkoJnN0b3Jl
LnNpbi5zaW5fYWRkciwgY3AtPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJlc3MsCisJCQkgICAgICAg
c2l6ZW9mKHN0b3JlLnNpbi5zaW5fYWRkcikpOworCQl9IGVsc2UgeworCQkJcmV0dXJuOworCQl9
CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCQlpZiAo
Y3AtPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJfbGVuID09IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW42KSkgeworCQkJc3RvcmUuc2luNi5zaW42X2ZhbWlseSA9IGNwLT5oZWFydGJlYXQuaGJfaW5m
by5hZGRyX2ZhbWlseTsKKyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJCQlzdG9yZS5zaW42LnNpbjZf
bGVuID0gY3AtPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJfbGVuOworI2VuZGlmCisJCQlzdG9yZS5z
aW42LnNpbjZfcG9ydCA9IHN0Y2ItPnJwb3J0OworCQkJbWVtY3B5KCZzdG9yZS5zaW42LnNpbjZf
YWRkciwgY3AtPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJlc3MsIHNpemVvZihzdHJ1Y3QgaW42X2Fk
ZHIpKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKyNlbmRpZgorI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwljYXNlIEFGX0NPTk46CisJCWlmIChjcC0+aGVhcnRi
ZWF0LmhiX2luZm8uYWRkcl9sZW4gPT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSkgewor
CQkJc3RvcmUuc2Nvbm4uc2Nvbm5fZmFtaWx5ID0gY3AtPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJf
ZmFtaWx5OworI2lmZGVmIEhBVkVfU0NPTk5fTEVOCisJCQlzdG9yZS5zY29ubi5zY29ubl9sZW4g
PSBjcC0+aGVhcnRiZWF0LmhiX2luZm8uYWRkcl9sZW47CisjZW5kaWYKKwkJCXN0b3JlLnNjb25u
LnNjb25uX3BvcnQgPSBzdGNiLT5ycG9ydDsKKwkJCW1lbWNweSgmc3RvcmUuc2Nvbm4uc2Nvbm5f
YWRkciwgY3AtPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJlc3MsIHNpemVvZih2b2lkICopKTsKKwkJ
fSBlbHNlIHsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJ
CXJldHVybjsKKwl9CisJcl9uZXQgPSBzY3RwX2ZpbmRuZXQoc3RjYiwgJnN0b3JlLnNhKTsKKwlp
ZiAocl9uZXQgPT0gTlVMTCkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQxLCAiSHVoPyBJ
IGNhbid0IGZpbmQgdGhlIGFkZHJlc3MgSSBzZW50IGl0IHRvLCBkaXNjYXJkXG4iKTsKKwkJcmV0
dXJuOworCX0KKwlpZiAoKHJfbmV0ICYmIChyX25ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9V
TkNPTkZJUk1FRCkpICYmCisJICAgIChyX25ldC0+aGVhcnRiZWF0X3JhbmRvbTEgPT0gY3AtPmhl
YXJ0YmVhdC5oYl9pbmZvLnJhbmRvbV92YWx1ZTEpICYmCisJICAgIChyX25ldC0+aGVhcnRiZWF0
X3JhbmRvbTIgPT0gY3AtPmhlYXJ0YmVhdC5oYl9pbmZvLnJhbmRvbV92YWx1ZTIpKSB7CisJCS8q
CisJCSAqIElmIHRoZSBpdHMgYSBIQiBhbmQgaXQncyByYW5kb20gdmFsdWUgaXMgY29ycmVjdCB3
aGVuIGNhbgorCQkgKiBjb25maXJtIHRoZSBkZXN0aW5hdGlvbi4KKwkJICovCisJCXJfbmV0LT5k
ZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfVU5DT05GSVJNRUQ7CisJCWlmIChyX25ldC0+ZGVzdF9z
dGF0ZSAmIFNDVFBfQUREUl9SRVFfUFJJTUFSWSkgeworCQkJc3RjYi0+YXNvYy5wcmltYXJ5X2Rl
c3RpbmF0aW9uID0gcl9uZXQ7CisJCQlyX25ldC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9BRERSX1JF
UV9QUklNQVJZOworCQkJZl9uZXQgPSBUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5uZXRzKTsKKwkJ
CWlmIChmX25ldCAhPSByX25ldCkgeworCQkJCS8qIGZpcnN0IG9uZSBvbiB0aGUgbGlzdCBpcyBO
T1QgdGhlIHByaW1hcnkKKwkJCQkgKiBzY3RwX2NtcGFkZHIoKSBpcyBtdWNoIG1vcmUgZWZmaWNp
ZW50IGlmCisJCQkJICogdGhlIHByaW1hcnkgaXMgdGhlIGZpcnN0IG9uIHRoZSBsaXN0LCBtYWtl
IGl0CisJCQkJICogc28uCisJCQkJICovCisJCQkJVEFJTFFfUkVNT1ZFKCZzdGNiLT5hc29jLm5l
dHMsIHJfbmV0LCBzY3RwX25leHQpOworCQkJCVRBSUxRX0lOU0VSVF9IRUFEKCZzdGNiLT5hc29j
Lm5ldHMsIHJfbmV0LCBzY3RwX25leHQpOworCQkJfQorCQkJcmVxX3ByaW0gPSAxOworCQl9CisJ
CXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9JTlRFUkZBQ0VfQ09ORklSTUVELAorCQkgICAg
c3RjYiwgMCwgKHZvaWQgKilyX25ldCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJc2N0cF90aW1l
cl9zdG9wKFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCisJ
CSAgICAgICAgICAgICAgICByX25ldCwgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ180
KTsKKwkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULCBzdGNiLT5z
Y3RwX2VwLCBzdGNiLCByX25ldCk7CisJfQorCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9n
Z2luZ19sZXZlbCkgJiBTQ1RQX1RIUkVTSE9MRF9MT0dHSU5HKSB7CisJCXNjdHBfbWlzY19pbnRz
KFNDVFBfVEhSRVNIT0xEX0NMRUFSLAorCQkJICAgICAgIHN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJv
cl9jb3VudCwKKwkJCSAgICAgICAwLAorCQkJICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVULAor
CQkJICAgICAgIF9fTElORV9fKTsKKwl9CisJc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50
ID0gMDsKKwlvbGRfZXJyb3JfY291bnRlciA9IHJfbmV0LT5lcnJvcl9jb3VudDsKKwlyX25ldC0+
ZXJyb3JfY291bnQgPSAwOworCXJfbmV0LT5oYl9yZXNwb25kZWQgPSAxOworCXR2LnR2X3NlYyA9
IGNwLT5oZWFydGJlYXQuaGJfaW5mby50aW1lX3ZhbHVlXzE7CisJdHYudHZfdXNlYyA9IGNwLT5o
ZWFydGJlYXQuaGJfaW5mby50aW1lX3ZhbHVlXzI7CisJLyogTm93IGxldHMgZG8gYSBSVE8gd2l0
aCB0aGlzICovCisJc2N0cF9jYWxjdWxhdGVfcnRvKHN0Y2IsICZzdGNiLT5hc29jLCByX25ldCwg
JnR2LAorCSAgICAgICAgICAgICAgICAgICBTQ1RQX1JUVF9GUk9NX05PTl9EQVRBKTsKKwlpZiAo
IShyX25ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpKSB7CisJCXJfbmV0LT5k
ZXN0X3N0YXRlIHw9IFNDVFBfQUREUl9SRUFDSEFCTEU7CisJCXNjdHBfdWxwX25vdGlmeShTQ1RQ
X05PVElGWV9JTlRFUkZBQ0VfVVAsIHN0Y2IsCisJCQkJMCwgKHZvaWQgKilyX25ldCwgU0NUUF9T
T19OT1RfTE9DS0VEKTsKKwl9CisJaWYgKHJfbmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1BG
KSB7CisJCXJfbmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfUEY7CisJCXN0Y2ItPmFzb2Mu
Y2NfZnVuY3Rpb25zLnNjdHBfY3duZF91cGRhdGVfZXhpdF9wZihzdGNiLCBuZXQpOworCX0KKwlp
ZiAob2xkX2Vycm9yX2NvdW50ZXIgPiAwKSB7CisJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVS
X1RZUEVfSEVBUlRCRUFULCBzdGNiLT5zY3RwX2VwLAorCQkgICAgICAgICAgICAgICAgc3RjYiwg
cl9uZXQsIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfNSk7CisJCXNjdHBfdGltZXJf
c3RhcnQoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgcl9u
ZXQpOworCX0KKwlpZiAocl9uZXQgPT0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uKSB7
CisJCWlmIChzdGNiLT5hc29jLmFsdGVybmF0ZSkgeworCQkJLyogcmVsZWFzZSB0aGUgYWx0ZXJu
YXRlLCBwcmltYXJ5IGlzIGdvb2QgKi8KKwkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihzdGNiLT5h
c29jLmFsdGVybmF0ZSk7CisJCQlzdGNiLT5hc29jLmFsdGVybmF0ZSA9IE5VTEw7CisJCX0KKwl9
CisJLyogTW9iaWxpdHkgYWRhcHRhdGlvbiAqLworCWlmIChyZXFfcHJpbSkgeworCQlpZiAoKHNj
dHBfaXNfbW9iaWxpdHlfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLAorCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTQ1RQX01PQklMSVRZX0JBU0UpIHx8CisJCSAgICBzY3RwX2lz
X21vYmlsaXR5X2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwKKwkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTQ1RQX01PQklMSVRZX0ZBU1RIQU5ET0ZGKSkgJiYKKwkJICAgIHNjdHBf
aXNfbW9iaWxpdHlfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLAorCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNDVFBfTU9CSUxJVFlfUFJJTV9ERUxFVEVEKSkgeworCQkJc2N0cF90
aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9QUklNX0RFTEVURUQsCisJCQkgICAgICAgICAgICAg
ICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgTlVMTCwKKwkJCSAgICAgICAgICAgICAgICBTQ1RQX0ZS
T01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzYpOworCQkJaWYgKHNjdHBfaXNfbW9iaWxpdHlfZmVh
dHVyZV9vbihzdGNiLT5zY3RwX2VwLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTQ1RQX01PQklMSVRZX0ZBU1RIQU5ET0ZGKSkgeworCQkJCXNjdHBfYXNzb2NfaW1tZWRpYXRl
X3JldHJhbnMoc3RjYiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0Y2ItPmFz
b2MucHJpbWFyeV9kZXN0aW5hdGlvbik7CisJCQl9CisJCQlpZiAoc2N0cF9pc19tb2JpbGl0eV9m
ZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgU0NU
UF9NT0JJTElUWV9CQVNFKSkgeworCQkJCXNjdHBfbW92ZV9jaHVua3NfZnJvbV9uZXQoc3RjYiwK
KwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgIHN0Y2ItPmFzb2MuZGVsZXRlZF9wcmltYXJ5
KTsKKwkJCX0KKwkJCXNjdHBfZGVsZXRlX3ByaW1fdGltZXIoc3RjYi0+c2N0cF9lcCwgc3RjYik7
CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfaGFuZGxlX25hdF9jb2xsaWRpbmdfc3Rh
dGUoc3RydWN0IHNjdHBfdGNiICpzdGNiKQoreworCS8qCisJICogUmV0dXJuIDAgbWVhbnMgd2Ug
d2FudCB5b3UgdG8gcHJvY2VlZCB3aXRoIHRoZSBhYm9ydAorCSAqIG5vbi16ZXJvIG1lYW5zIG5v
IGFib3J0IHByb2Nlc3NpbmcuCisJICovCisJdWludDMyX3QgbmV3X3Z0YWc7CisJc3RydWN0IHNj
dHBhc29jaGVhZCAqaGVhZDsKKworCWlmICgoU0NUUF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9T
VEFURV9DT09LSUVfV0FJVCkgfHwKKwkgICAgKFNDVFBfR0VUX1NUQVRFKHN0Y2IpID09IFNDVFBf
U1RBVEVfQ09PS0lFX0VDSE9FRCkpIHsKKwkJbmV3X3Z0YWcgPSBzY3RwX3NlbGVjdF9hX3RhZyhz
dGNiLT5zY3RwX2VwLCBzdGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0LCBzdGNiLT5ycG9ydCwgMSk7
CisJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCVNDVFBfVENCX1VO
TE9DSyhzdGNiKTsKKwkJU0NUUF9JTlBfSU5GT19XTE9DSygpOworCQlTQ1RQX1RDQl9MT0NLKHN0
Y2IpOworCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJfSBl
bHNlIHsKKwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKFNDVFBfR0VUX1NUQVRFKHN0Y2IpID09IFND
VFBfU1RBVEVfQ09PS0lFX1dBSVQpIHsKKwkJLyogZ2VuZXJhdGUgYSBuZXcgdnRhZyBhbmQgc2Vu
ZCBpbml0ICovCisJCUxJU1RfUkVNT1ZFKHN0Y2IsIHNjdHBfYXNvY3MpOworCQlzdGNiLT5hc29j
Lm15X3Z0YWcgPSBuZXdfdnRhZzsKKwkJaGVhZCA9ICZTQ1RQX0JBU0VfSU5GTyhzY3RwX2Fzb2No
YXNoKVtTQ1RQX1BDQkhBU0hfQVNPQyhzdGNiLT5hc29jLm15X3Z0YWcsIFNDVFBfQkFTRV9JTkZP
KGhhc2hhc29jbWFyaykpXTsKKwkJLyogcHV0IGl0IGluIHRoZSBidWNrZXQgaW4gdGhlIHZ0YWcg
aGFzaCBvZiBhc3NvYydzIGZvciB0aGUgc3lzdGVtICovCisJCUxJU1RfSU5TRVJUX0hFQUQoaGVh
ZCwgc3RjYiwgc2N0cF9hc29jcyk7CisJCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOworCQlzY3Rw
X3NlbmRfaW5pdGlhdGUoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9TT19OT1RfTE9DS0VEKTsK
KwkJcmV0dXJuICgxKTsKKwl9IGVsc2UgeworCQkvKiB0cmVhdCBsaWtlIGEgY2FzZSB3aGVyZSB0
aGUgY29va2llIGV4cGlyZWQgaS5lLjoKKwkJKiAtIGR1bXAgY3VycmVudCBjb29raWUuCisJCSog
LSBnZW5lcmF0ZSBhIG5ldyB2dGFnLgorCQkqIC0gcmVzZW5kIGluaXQuCisJCSovCisJCS8qIGdl
bmVyYXRlIGEgbmV3IHZ0YWcgYW5kIHNlbmQgaW5pdCAqLworCQlMSVNUX1JFTU9WRShzdGNiLCBz
Y3RwX2Fzb2NzKTsKKwkJU0NUUF9TRVRfU1RBVEUoc3RjYiwgU0NUUF9TVEFURV9DT09LSUVfV0FJ
VCk7CisJCXNjdHBfc3RvcF9hbGxfY29va2llX3RpbWVycyhzdGNiKTsKKwkJc2N0cF90b3NzX29s
ZF9jb29raWVzKHN0Y2IsICZzdGNiLT5hc29jKTsKKwkJc3RjYi0+YXNvYy5teV92dGFnID0gbmV3
X3Z0YWc7CisJCWhlYWQgPSAmU0NUUF9CQVNFX0lORk8oc2N0cF9hc29jaGFzaClbU0NUUF9QQ0JI
QVNIX0FTT0Moc3RjYi0+YXNvYy5teV92dGFnLCBTQ1RQX0JBU0VfSU5GTyhoYXNoYXNvY21hcmsp
KV07CisJCS8qIHB1dCBpdCBpbiB0aGUgYnVja2V0IGluIHRoZSB2dGFnIGhhc2ggb2YgYXNzb2Mn
cyBmb3IgdGhlIHN5c3RlbSAqLworCQlMSVNUX0lOU0VSVF9IRUFEKGhlYWQsIHN0Y2IsIHNjdHBf
YXNvY3MpOworCQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKKwkJc2N0cF9zZW5kX2luaXRpYXRl
KHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCXJldHVybiAoMSk7
CisJfQorCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfaGFuZGxlX25hdF9taXNz
aW5nX3N0YXRlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKwkJCSAgICAgIHN0cnVjdCBzY3RwX25l
dHMgKm5ldCkKK3sKKwkvKiByZXR1cm4gMCBtZWFucyB3ZSB3YW50IHlvdSB0byBwcm9jZWVkIHdp
dGggdGhlIGFib3J0CisJICogbm9uLXplcm8gbWVhbnMgbm8gYWJvcnQgcHJvY2Vzc2luZworCSAq
LworCWlmIChzdGNiLT5hc29jLmF1dGhfc3VwcG9ydGVkID09IDApIHsKKwkJU0NUUERCRyhTQ1RQ
X0RFQlVHX0lOUFVUMiwgInNjdHBfaGFuZGxlX25hdF9taXNzaW5nX3N0YXRlOiBQZWVyIGRvZXMg
bm90IHN1cHBvcnQgQVVUSCwgY2Fubm90IHNlbmQgYW4gYXNjb25mXG4iKTsKKwkJcmV0dXJuICgw
KTsKKwl9CisJc2N0cF9hc2NvbmZfc2VuZF9uYXRfc3RhdGVfdXBkYXRlKHN0Y2IsIG5ldCk7CisJ
cmV0dXJuICgxKTsKK30KKworLyogUmV0dXJucyAxIGlmIHRoZSBzdGNiIHdhcyBhYm9ydGVkLCAw
IG90aGVyd2lzZSAqLworc3RhdGljIGludAorc2N0cF9oYW5kbGVfYWJvcnQoc3RydWN0IHNjdHBf
YWJvcnRfY2h1bmsgKmFib3J0LAorICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNj
dHBfbmV0cyAqbmV0KQoreworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorCXN0cnVjdCBzb2NrZXQgKnNvOworI2VuZGlmCisJdWludDE2X3QgbGVuOwor
CXVpbnQxNl90IGVycm9yOworCisJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwgInNjdHBfaGFu
ZGxlX2Fib3J0OiBoYW5kbGluZyBBQk9SVFxuIik7CisJaWYgKHN0Y2IgPT0gTlVMTCkKKwkJcmV0
dXJuICgwKTsKKworCWxlbiA9IG50b2hzKGFib3J0LT5jaC5jaHVua19sZW5ndGgpOworCWlmIChs
ZW4gPj0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9l
cnJvcl9jYXVzZSkpIHsKKwkJLyogTmVlZCB0byBjaGVjayB0aGUgY2F1c2UgY29kZXMgZm9yIG91
cgorCQkgKiB0d28gbWFnaWMgbmF0IGFib3J0cyB3aGljaCBkb24ndCBraWxsIHRoZSBhc3NvYwor
CQkgKiBuZWNlc3NhcmlseS4KKwkJICovCisJCXN0cnVjdCBzY3RwX2Vycm9yX2NhdXNlICpjYXVz
ZTsKKworCQljYXVzZSA9IChzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSAqKShhYm9ydCArIDEpOwor
CQllcnJvciA9IG50b2hzKGNhdXNlLT5jb2RlKTsKKwkJaWYgKGVycm9yID09IFNDVFBfQ0FVU0Vf
TkFUX0NPTExJRElOR19TVEFURSkgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwgIlJl
Y2VpdmVkIENvbGxpZGluZyBzdGF0ZSwgQUJPUlQgZmxhZ3M6JXhcbiIsCisJCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhYm9ydC0+Y2guY2h1bmtfZmxhZ3MpOworCQkJaWYgKHNjdHBfaGFu
ZGxlX25hdF9jb2xsaWRpbmdfc3RhdGUoc3RjYikpIHsKKwkJCQlyZXR1cm4gKDApOworCQkJfQor
CQl9IGVsc2UgaWYgKGVycm9yID09IFNDVFBfQ0FVU0VfTkFUX01JU1NJTkdfU1RBVEUpIHsKKwkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDIsICJSZWNlaXZlZCBtaXNzaW5nIHN0YXRlLCBBQk9S
VCBmbGFnczoleFxuIiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0LT5jaC5j
aHVua19mbGFncyk7CisJCQlpZiAoc2N0cF9oYW5kbGVfbmF0X21pc3Npbmdfc3RhdGUoc3RjYiwg
bmV0KSkgeworCQkJCXJldHVybiAoMCk7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQllcnJvciA9
IDA7CisJfQorCS8qIHN0b3AgYW55IHJlY2VpdmUgdGltZXJzICovCisJc2N0cF90aW1lcl9zdG9w
KFNDVFBfVElNRVJfVFlQRV9SRUNWLCBzdGNiLT5zY3RwX2VwLCBzdGNiLCBOVUxMLAorCSAgICAg
ICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzcpOworCS8qIG5vdGlm
eSB1c2VyIG9mIHRoZSBhYm9ydCBhbmQgY2xlYW4gdXAuLi4gKi8KKwlzY3RwX2Fib3J0X25vdGlm
aWNhdGlvbihzdGNiLCAxLCBlcnJvciwgYWJvcnQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJLyog
ZnJlZSB0aGUgdGNiICovCisJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjMyKHNjdHBzX2Fib3J0ZWQp
OworCWlmICgoU0NUUF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9PUEVOKSB8fAorCSAg
ICAoU0NUUF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkp
IHsKKwkJU0NUUF9TVEFUX0RFQ1JfR0FVR0UzMihzY3Rwc19jdXJyZXN0YWIpOworCX0KKyNpZmRl
ZiBTQ1RQX0FTT0NMT0dfT0ZfVFNOUworCXNjdHBfcHJpbnRfb3V0X3RyYWNrX2xvZyhzdGNiKTsK
KyNlbmRpZgorI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorCXNvID0gU0NUUF9JTlBfU08oc3RjYi0+c2N0cF9lcCk7CisJYXRvbWljX2FkZF9pbnQoJnN0
Y2ItPmFzb2MucmVmY250LCAxKTsKKwlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJU0NUUF9TT0NL
RVRfTE9DSyhzbywgMSk7CisJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwlhdG9taWNfc3VidHJhY3Rf
aW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisjZW5kaWYKKwkodm9pZClzY3RwX2ZyZWVfYXNz
b2Moc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9OT1JNQUxfUFJPQywKKwkJCSAgICAgIFNDVFBf
RlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfOCk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYm
ICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKyNl
bmRpZgorCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDIsICJzY3RwX2hhbmRsZV9hYm9ydDogZmlu
aXNoZWRcbiIpOworCXJldHVybiAoMSk7Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3N0YXJ0X25l
dF90aW1lcnMoc3RydWN0IHNjdHBfdGNiICpzdGNiKQoreworCXVpbnQzMl90IGNudF9oYl9zZW50
OworCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKworCWNudF9oYl9zZW50ID0gMDsKKwlUQUlMUV9G
T1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCS8qIEZvciBlYWNo
IG5ldHdvcmsgc3RhcnQ6CisJCSAqIDEpIEEgcG10dSB0aW1lci4KKwkJICogMikgQSBIQiB0aW1l
cgorCQkgKiAzKSBJZiB0aGUgZGVzdCBpbiB1bmNvbmZpcm1lZCBzZW5kCisJCSAqICAgIGEgaGIg
YXMgd2VsbCBpZiB1bmRlciBtYXhfaGJfYnVyc3QgaGF2ZQorCQkgKiAgICBiZWVuIHNlbnQuCisJ
CSAqLworCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9QQVRITVRVUkFJU0UsIHN0
Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCk7CisJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9U
WVBFX0hFQVJUQkVBVCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0KTsKKwkJaWYgKChuZXQtPmRl
c3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQpICYmCisJCSAgICAoY250X2hiX3NlbnQg
PCBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaGJfbWF4YnVyc3QpKSkgeworCQkJc2N0cF9zZW5kX2hi
KHN0Y2IsIG5ldCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCWNudF9oYl9zZW50Kys7CisJCX0K
Kwl9CisJaWYgKGNudF9oYl9zZW50KSB7CisJCXNjdHBfY2h1bmtfb3V0cHV0KHN0Y2ItPnNjdHBf
ZXAsIHN0Y2IsCisJCQkJICBTQ1RQX09VVFBVVF9GUk9NX0NPT0tJRV9BQ0ssCisJCQkJICBTQ1RQ
X1NPX05PVF9MT0NLRUQpOworCX0KK30KKworc3RhdGljIHZvaWQKK3NjdHBfaGFuZGxlX3NodXRk
b3duKHN0cnVjdCBzY3RwX3NodXRkb3duX2NodW5rICpjcCwKKyAgICBzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgaW50ICphYm9ydF9mbGFnKQoreworCXN0cnVj
dCBzY3RwX2Fzc29jaWF0aW9uICphc29jOworCWludCBzb21lX29uX3N0cmVhbXdoZWVsOworCWlu
dCBvbGRfc3RhdGU7CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisJc3RydWN0IHNvY2tldCAqc287CisjZW5kaWYKKworCVNDVFBEQkcoU0NUUF9ERUJV
R19JTlBVVDIsCisJCSJzY3RwX2hhbmRsZV9zaHV0ZG93bjogaGFuZGxpbmcgU0hVVERPV05cbiIp
OworCWlmIChzdGNiID09IE5VTEwpCisJCXJldHVybjsKKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJ
aWYgKChTQ1RQX0dFVF9TVEFURShzdGNiKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKSB8fAor
CSAgICAoU0NUUF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEKSkg
eworCQlyZXR1cm47CisJfQorCWlmIChudG9ocyhjcC0+Y2guY2h1bmtfbGVuZ3RoKSAhPSBzaXpl
b2Yoc3RydWN0IHNjdHBfc2h1dGRvd25fY2h1bmspKSB7CisJCS8qIFNodXRkb3duIE5PVCB0aGUg
ZXhwZWN0ZWQgc2l6ZSAqLworCQlyZXR1cm47CisJfQorCW9sZF9zdGF0ZSA9IFNDVFBfR0VUX1NU
QVRFKHN0Y2IpOworCXNjdHBfdXBkYXRlX2Fja2VkKHN0Y2IsIGNwLCBhYm9ydF9mbGFnKTsKKwlp
ZiAoKmFib3J0X2ZsYWcpIHsKKwkJcmV0dXJuOworCX0KKwlpZiAoYXNvYy0+Y29udHJvbF9wZGFw
aSkgeworCQkvKiBXaXRoIGEgbm9ybWFsIHNodXRkb3duCisJCSAqIHdlIGFzc3VtZSB0aGUgZW5k
IG9mIGxhc3QgcmVjb3JkLgorCQkgKi8KKwkJU0NUUF9JTlBfUkVBRF9MT0NLKHN0Y2ItPnNjdHBf
ZXApOworCQlpZiAoYXNvYy0+Y29udHJvbF9wZGFwaS0+b25fc3RybV9xKSB7CisJCQlzdHJ1Y3Qg
c2N0cF9zdHJlYW1faW4gKnN0cm07CisKKwkJCXN0cm0gPSAmYXNvYy0+c3RybWluW2Fzb2MtPmNv
bnRyb2xfcGRhcGktPnNpbmZvX3N0cmVhbV07CisJCQlpZiAoYXNvYy0+Y29udHJvbF9wZGFwaS0+
b25fc3RybV9xID09IFNDVFBfT05fVU5PUkRFUkVEKSB7CisJCQkJLyogVW5vcmRlcmVkICovCisJ
CQkJVEFJTFFfUkVNT1ZFKCZzdHJtLT51bm9faW5xdWV1ZSwgYXNvYy0+Y29udHJvbF9wZGFwaSwg
bmV4dF9pbnN0cm0pOworCQkJCWFzb2MtPmNvbnRyb2xfcGRhcGktPm9uX3N0cm1fcSA9IDA7CisJ
CQl9IGVsc2UgaWYgKGFzb2MtPmNvbnRyb2xfcGRhcGktPm9uX3N0cm1fcSA9PSBTQ1RQX09OX09S
REVSRUQpIHsKKwkJCQkvKiBPcmRlcmVkICovCisJCQkJVEFJTFFfUkVNT1ZFKCZzdHJtLT5pbnF1
ZXVlLCBhc29jLT5jb250cm9sX3BkYXBpLCBuZXh0X2luc3RybSk7CisJCQkJYXNvYy0+Y29udHJv
bF9wZGFwaS0+b25fc3RybV9xID0gMDsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQl9IGVsc2Ugewor
CQkJCXBhbmljKCJVbmtub3duIHN0YXRlIG9uIGN0cmw6JXAgb25fc3RybV9xOiVkIiwKKwkJCQkg
ICAgICBhc29jLT5jb250cm9sX3BkYXBpLAorCQkJCSAgICAgIGFzb2MtPmNvbnRyb2xfcGRhcGkt
Pm9uX3N0cm1fcSk7CisjZW5kaWYKKwkJCX0KKwkJfQorCQlhc29jLT5jb250cm9sX3BkYXBpLT5l
bmRfYWRkZWQgPSAxOworCQlhc29jLT5jb250cm9sX3BkYXBpLT5wZGFwaV9hYm9ydGVkID0gMTsK
KwkJYXNvYy0+Y29udHJvbF9wZGFwaSA9IE5VTEw7CisJCVNDVFBfSU5QX1JFQURfVU5MT0NLKHN0
Y2ItPnNjdHBfZXApOworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorCQlzbyA9IFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApOworCQlhdG9taWNfYWRk
X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJ
CVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOworCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQlhdG9t
aWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCWlmIChzdGNiLT5hc29j
LnN0YXRlICYgU0NUUF9TVEFURV9DTE9TRURfU09DS0VUKSB7CisJCQkvKiBhc3NvYyB3YXMgZnJl
ZWQgd2hpbGUgd2Ugd2VyZSB1bmxvY2tlZCAqLworCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAx
KTsKKwkJCXJldHVybjsKKwkJfQorI2VuZGlmCisJCWlmIChzdGNiLT5zY3RwX3NvY2tldCkgewor
CQkJc2N0cF9zb3J3YWtldXAoc3RjYi0+c2N0cF9lcCwgc3RjYi0+c2N0cF9zb2NrZXQpOworCQl9
CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCVND
VFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisjZW5kaWYKKwl9CisJLyogZ290byBTSFVURE9XTl9S
RUNFSVZFRCBzdGF0ZSB0byBibG9jayBuZXcgcmVxdWVzdHMgKi8KKwlpZiAoc3RjYi0+c2N0cF9z
b2NrZXQpIHsKKwkJaWYgKChTQ1RQX0dFVF9TVEFURShzdGNiKSAhPSBTQ1RQX1NUQVRFX1NIVVRE
T1dOX1JFQ0VJVkVEKSAmJgorCQkgICAgKFNDVFBfR0VUX1NUQVRFKHN0Y2IpICE9IFNDVFBfU1RB
VEVfU0hVVERPV05fQUNLX1NFTlQpICYmCisJCSAgICAoU0NUUF9HRVRfU1RBVEUoc3RjYikgIT0g
U0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKSkgeworCQkJU0NUUF9TRVRfU1RBVEUoc3RjYiwgU0NU
UF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCk7CisJCQkvKiBub3RpZnkgdXBwZXIgbGF5ZXIgdGhh
dCBwZWVyIGhhcyBpbml0aWF0ZWQgYSBzaHV0ZG93biAqLworCQkJc2N0cF91bHBfbm90aWZ5KFND
VFBfTk9USUZZX1BFRVJfU0hVVERPV04sIHN0Y2IsIDAsIE5VTEwsIFNDVFBfU09fTk9UX0xPQ0tF
RCk7CisKKwkJCS8qIHJlc2V0IHRpbWUgKi8KKwkJCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFM
KCZhc29jLT50aW1lX2VudGVyZWQpOworCQl9CisJfQorCWlmIChTQ1RQX0dFVF9TVEFURShzdGNi
KSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQpIHsKKwkJLyoKKwkJICogc3RvcCB0aGUgc2h1
dGRvd24gdGltZXIsIHNpbmNlIHdlIFdJTEwgbW92ZSB0bworCQkgKiBTSFVURE9XTi1BQ0stU0VO
VC4KKwkJICovCisJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV04sIHN0
Y2ItPnNjdHBfZXAsIHN0Y2IsCisJCSAgICAgICAgICAgICAgICBuZXQsIFNDVFBfRlJPTV9TQ1RQ
X0lOUFVUICsgU0NUUF9MT0NfOSk7CisJfQorCS8qIE5vdyBpcyB0aGVyZSB1bnNlbnQgZGF0YSBv
biBhIHN0cmVhbSBzb21ld2hlcmU/ICovCisJc29tZV9vbl9zdHJlYW13aGVlbCA9IHNjdHBfaXNf
dGhlcmVfdW5zZW50X2RhdGEoc3RjYiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKworCWlmICghVEFJ
TFFfRU1QVFkoJmFzb2MtPnNlbmRfcXVldWUpIHx8CisJICAgICFUQUlMUV9FTVBUWSgmYXNvYy0+
c2VudF9xdWV1ZSkgfHwKKwkgICAgc29tZV9vbl9zdHJlYW13aGVlbCkgeworCQkvKiBCeSByZXR1
cm5pbmcgd2Ugd2lsbCBwdXNoIG1vcmUgZGF0YSBvdXQgKi8KKwkJcmV0dXJuOworCX0gZWxzZSB7
CisJCS8qIG5vIG91dHN0YW5kaW5nIGRhdGEgdG8gc2VuZCwgc28gbW92ZSBvbi4uLiAqLworCQkv
KiBzZW5kIFNIVVRET1dOLUFDSyAqLworCQkvKiBtb3ZlIHRvIFNIVVRET1dOLUFDSy1TRU5UIHN0
YXRlICovCisJCWlmICgoU0NUUF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9PUEVOKSB8
fAorCQkgICAgKFNDVFBfR0VUX1NUQVRFKHN0Y2IpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVD
RUlWRUQpKSB7CisJCQlTQ1RQX1NUQVRfREVDUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7CisJ
CX0KKwkJaWYgKFNDVFBfR0VUX1NUQVRFKHN0Y2IpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fQUNL
X1NFTlQpIHsKKwkJCVNDVFBfU0VUX1NUQVRFKHN0Y2IsIFNDVFBfU1RBVEVfU0hVVERPV05fQUNL
X1NFTlQpOworCQkJc2N0cF9zdG9wX3RpbWVyc19mb3Jfc2h1dGRvd24oc3RjYik7CisJCQlzY3Rw
X3NlbmRfc2h1dGRvd25fYWNrKHN0Y2IsIG5ldCk7CisJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBf
VElNRVJfVFlQRV9TSFVURE9XTkFDSywKKwkJCSAgICAgICAgICAgICAgICAgc3RjYi0+c2N0cF9l
cCwgc3RjYiwgbmV0KTsKKwkJfSBlbHNlIGlmIChvbGRfc3RhdGUgPT0gU0NUUF9TVEFURV9TSFVU
RE9XTl9BQ0tfU0VOVCkgeworCQkJc2N0cF9zZW5kX3NodXRkb3duX2FjayhzdGNiLCBuZXQpOwor
CQl9CisJfQorfQorCitzdGF0aWMgdm9pZAorc2N0cF9oYW5kbGVfc2h1dGRvd25fYWNrKHN0cnVj
dCBzY3RwX3NodXRkb3duX2Fja19jaHVuayAqY3AgU0NUUF9VTlVTRUQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAq
YXNvYzsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KwlzdHJ1Y3Qgc29ja2V0ICpzbzsKKworCXNvID0gU0NUUF9JTlBfU08oc3RjYi0+c2N0cF9lcCk7
CisjZW5kaWYKKwlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQyLAorCQkic2N0cF9oYW5kbGVfc2h1
dGRvd25fYWNrOiBoYW5kbGluZyBTSFVURE9XTiBBQ0tcbiIpOworCWlmIChzdGNiID09IE5VTEwp
CisJCXJldHVybjsKKworCWFzb2MgPSAmc3RjYi0+YXNvYzsKKwkvKiBwcm9jZXNzIGFjY29yZGlu
ZyB0byBhc3NvY2lhdGlvbiBzdGF0ZSAqLworCWlmICgoU0NUUF9HRVRfU1RBVEUoc3RjYikgPT0g
U0NUUF9TVEFURV9DT09LSUVfV0FJVCkgfHwKKwkgICAgKFNDVFBfR0VUX1NUQVRFKHN0Y2IpID09
IFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCkpIHsKKwkJLyogdW5leHBlY3RlZCBTSFVURE9XTi1B
Q0suLi4gZG8gT09UQiBoYW5kbGluZy4uLiAqLworCQlzY3RwX3NlbmRfc2h1dGRvd25fY29tcGxl
dGUoc3RjYiwgbmV0LCAxKTsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlyZXR1cm47CisJ
fQorCWlmICgoU0NUUF9HRVRfU1RBVEUoc3RjYikgIT0gU0NUUF9TVEFURV9TSFVURE9XTl9TRU5U
KSAmJgorCSAgICAoU0NUUF9HRVRfU1RBVEUoc3RjYikgIT0gU0NUUF9TVEFURV9TSFVURE9XTl9B
Q0tfU0VOVCkpIHsKKwkJLyogdW5leHBlY3RlZCBTSFVURE9XTi1BQ0suLi4gc28gaWdub3JlLi4u
ICovCisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoYXNvYy0+
Y29udHJvbF9wZGFwaSkgeworCQkvKiBXaXRoIGEgbm9ybWFsIHNodXRkb3duCisJCSAqIHdlIGFz
c3VtZSB0aGUgZW5kIG9mIGxhc3QgcmVjb3JkLgorCQkgKi8KKwkJU0NUUF9JTlBfUkVBRF9MT0NL
KHN0Y2ItPnNjdHBfZXApOworCQlhc29jLT5jb250cm9sX3BkYXBpLT5lbmRfYWRkZWQgPSAxOwor
CQlhc29jLT5jb250cm9sX3BkYXBpLT5wZGFwaV9hYm9ydGVkID0gMTsKKwkJYXNvYy0+Y29udHJv
bF9wZGFwaSA9IE5VTEw7CisJCVNDVFBfSU5QX1JFQURfVU5MT0NLKHN0Y2ItPnNjdHBfZXApOwor
I2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlhdG9t
aWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7CisJCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOworCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwor
CQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCWlmIChzdGNi
LT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9DTE9TRURfU09DS0VUKSB7CisJCQkvKiBhc3NvYyB3
YXMgZnJlZWQgd2hpbGUgd2Ugd2VyZSB1bmxvY2tlZCAqLworCQkJU0NUUF9TT0NLRVRfVU5MT0NL
KHNvLCAxKTsKKwkJCXJldHVybjsKKwkJfQorI2VuZGlmCisJCXNjdHBfc29yd2FrZXVwKHN0Y2It
PnNjdHBfZXAsIHN0Y2ItPnNjdHBfc29ja2V0KTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYg
IWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKyNl
bmRpZgorCX0KKyNpZmRlZiBJTlZBUklBTlRTCisJaWYgKCFUQUlMUV9FTVBUWSgmYXNvYy0+c2Vu
ZF9xdWV1ZSkgfHwKKwkgICAgIVRBSUxRX0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSB8fAorCSAg
ICBzY3RwX2lzX3RoZXJlX3Vuc2VudF9kYXRhKHN0Y2IsIFNDVFBfU09fTk9UX0xPQ0tFRCkpIHsK
KwkJcGFuaWMoIlF1ZXVlcyBhcmUgbm90IGVtcHR5IHdoZW4gaGFuZGxpbmcgU0hVVERPV04tQUNL
Iik7CisJfQorI2VuZGlmCisJLyogc3RvcCB0aGUgdGltZXIgKi8KKwlzY3RwX3RpbWVyX3N0b3Ao
U0NUUF9USU1FUl9UWVBFX1NIVVRET1dOLCBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXQsCisJICAg
ICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfMTApOworCS8qIHNl
bmQgU0hVVERPV04tQ09NUExFVEUgKi8KKwlzY3RwX3NlbmRfc2h1dGRvd25fY29tcGxldGUoc3Rj
YiwgbmV0LCAwKTsKKwkvKiBub3RpZnkgdXBwZXIgbGF5ZXIgcHJvdG9jb2wgKi8KKwlpZiAoc3Rj
Yi0+c2N0cF9zb2NrZXQpIHsKKwkJaWYgKChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJICAgIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkpIHsKKwkJCXN0Y2ItPnNjdHBfc29ja2V0LT5z
b19zbmQuc2JfY2MgPSAwOworCQl9CisJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9BU1NP
Q19ET1dOLCBzdGNiLCAwLCBOVUxMLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCX0KKwlTQ1RQX1NU
QVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfc2h1dGRvd24pOworCS8qIGZyZWUgdGhlIFRDQiBidXQg
Zmlyc3Qgc2F2ZSBvZmYgdGhlIGVwICovCisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCisJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAx
KTsKKwlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisJ
U0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJl
ZmNudCwgMSk7CisjZW5kaWYKKwkodm9pZClzY3RwX2ZyZWVfYXNzb2Moc3RjYi0+c2N0cF9lcCwg
c3RjYiwgU0NUUF9OT1JNQUxfUFJPQywKKwkJCSAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsg
U0NUUF9MT0NfMTEpOworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisjZW5kaWYKK30KKworc3RhdGlj
IHZvaWQKK3NjdHBfcHJvY2Vzc191bnJlY29nX2NodW5rKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwg
dWludDhfdCBjaHVua190eXBlKQoreworCXN3aXRjaCAoY2h1bmtfdHlwZSkgeworCWNhc2UgU0NU
UF9BU0NPTkZfQUNLOgorCWNhc2UgU0NUUF9BU0NPTkY6CisJCXNjdHBfYXNjb25mX2NsZWFudXAo
c3RjYik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9JRk9SV0FSRF9DVU1fVFNOOgorCWNhc2UgU0NU
UF9GT1JXQVJEX0NVTV9UU046CisJCXN0Y2ItPmFzb2MucHJzY3RwX3N1cHBvcnRlZCA9IDA7CisJ
CWJyZWFrOworCWRlZmF1bHQ6CisJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDIsCisJCQkiUGVl
ciBkb2VzIG5vdCBzdXBwb3J0IGNodW5rIHR5cGUgJWQgKDB4JXgpLlxuIiwKKwkJCWNodW5rX3R5
cGUsIGNodW5rX3R5cGUpOworCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBTa2lwIHBhc3QgdGhl
IHBhcmFtIGhlYWRlciBhbmQgdGhlbiB3ZSB3aWxsIGZpbmQgdGhlIHBhcmFtIHRoYXQgY2F1c2Vk
IHRoZQorICogcHJvYmxlbS4gIFRoZXJlIGFyZSBhIG51bWJlciBvZiBwYXJhbSdzIGluIGEgQVND
T05GIE9SIHRoZSBwcnNjdHAgcGFyYW0KKyAqIHRoZXNlIHdpbGwgdHVybiBvZiBzcGVjaWZpYyBm
ZWF0dXJlcy4KKyAqIFhYWDogSXMgdGhpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8/CisgKi8KK3N0
YXRpYyB2b2lkCitzY3RwX3Byb2Nlc3NfdW5yZWNvZ19wYXJhbShzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsIHVpbnQxNl90IHBhcmFtZXRlcl90eXBlKQoreworCXN3aXRjaCAocGFyYW1ldGVyX3R5cGUp
IHsKKwkJLyogcHItc2N0cCBkcmFmdCAqLworCWNhc2UgU0NUUF9QUlNDVFBfU1VQUE9SVEVEOgor
CQlzdGNiLT5hc29jLnByc2N0cF9zdXBwb3J0ZWQgPSAwOworCQlicmVhazsKKwljYXNlIFNDVFBf
U1VQUE9SVEVEX0NIVU5LX0VYVDoKKwkJYnJlYWs7CisJCS8qIGRyYWZ0LWlldGYtdHN2d2ctYWRk
aXAtc2N0cCAqLworCWNhc2UgU0NUUF9IQVNfTkFUX1NVUFBPUlQ6CisJICAgICAgICBzdGNiLT5h
c29jLnBlZXJfc3VwcG9ydHNfbmF0ID0gMDsKKwkgICAgICAgIGJyZWFrOworCWNhc2UgU0NUUF9B
RERfSVBfQUREUkVTUzoKKwljYXNlIFNDVFBfREVMX0lQX0FERFJFU1M6CisJY2FzZSBTQ1RQX1NF
VF9QUklNX0FERFI6CisJCXN0Y2ItPmFzb2MuYXNjb25mX3N1cHBvcnRlZCA9IDA7CisJCWJyZWFr
OworCWNhc2UgU0NUUF9TVUNDRVNTX1JFUE9SVDoKKwljYXNlIFNDVFBfRVJST1JfQ0FVU0VfSU5E
OgorCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQyLCAiSHVoLCB0aGUgcGVlciBkb2VzIG5vdCBz
dXBwb3J0IHN1Y2Nlc3M/IG9yIGVycm9yIGNhdXNlP1xuIik7CisJCVNDVFBEQkcoU0NUUF9ERUJV
R19JTlBVVDIsCisJCQkiVHVybmluZyBvZmYgQVNDT05GIHRvIHRoaXMgc3RyYW5nZSBwZWVyXG4i
KTsKKwkJc3RjYi0+YXNvYy5hc2NvbmZfc3VwcG9ydGVkID0gMDsKKwkJYnJlYWs7CisJZGVmYXVs
dDoKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwKKwkJCSJQZWVyIGRvZXMgbm90IHN1cHBv
cnQgcGFyYW0gdHlwZSAlZCAoMHgleCk/P1xuIiwKKwkJCXBhcmFtZXRlcl90eXBlLCBwYXJhbWV0
ZXJfdHlwZSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludAorc2N0cF9oYW5kbGVfZXJy
b3Ioc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoLAorICAgICAgICAgICAgICAgICAgc3RydWN0IHNj
dHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIHVpbnQzMl90IGxpbWl0KQorewor
CXN0cnVjdCBzY3RwX2Vycm9yX2NhdXNlICpjYXVzZTsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlv
biAqYXNvYzsKKwl1aW50MzJfdCByZW1haW5pbmdfbGVuZ3RoLCBhZGp1c3Q7CisJdWludDE2X3Qg
Y29kZSwgY2F1c2VfY29kZSwgY2F1c2VfbGVuZ3RoOworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAm
JiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXN0cnVjdCBzb2NrZXQgKnNvOworI2VuZGlmCisK
KwkvKiBwYXJzZSB0aHJvdWdoIGFsbCBvZiB0aGUgZXJyb3JzIGFuZCBwcm9jZXNzICovCisJYXNv
YyA9ICZzdGNiLT5hc29jOworCWNhdXNlID0gKHN0cnVjdCBzY3RwX2Vycm9yX2NhdXNlICopKChj
YWRkcl90KWNoICsKKwkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSk7CisJcmVtYWlu
aW5nX2xlbmd0aCA9IG50b2hzKGNoLT5jaHVua19sZW5ndGgpOworCWlmIChyZW1haW5pbmdfbGVu
Z3RoID4gbGltaXQpIHsKKwkJcmVtYWluaW5nX2xlbmd0aCA9IGxpbWl0OworCX0KKwlpZiAocmVt
YWluaW5nX2xlbmd0aCA+PSBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKSB7CisJCXJlbWFp
bmluZ19sZW5ndGggLT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKTsKKwl9IGVsc2Ugewor
CQlyZW1haW5pbmdfbGVuZ3RoID0gMDsKKwl9CisJY29kZSA9IDA7CisJd2hpbGUgKHJlbWFpbmlu
Z19sZW5ndGggPj0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Vycm9yX2NhdXNlKSkgeworCQkvKiBQcm9j
ZXNzIGFuIEVycm9yIENhdXNlICovCisJCWNhdXNlX2NvZGUgPSBudG9ocyhjYXVzZS0+Y29kZSk7
CisJCWNhdXNlX2xlbmd0aCA9IG50b2hzKGNhdXNlLT5sZW5ndGgpOworCQlpZiAoKGNhdXNlX2xl
bmd0aCA+IHJlbWFpbmluZ19sZW5ndGgpIHx8IChjYXVzZV9sZW5ndGggPT0gMCkpIHsKKwkJCS8q
IEludmFsaWQgY2F1c2UgbGVuZ3RoLCBwb3NzaWJseSBkdWUgdG8gdHJ1bmNhdGlvbi4gKi8KKwkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsICJCb2d1cyBsZW5ndGggaW4gY2F1c2UgLSBieXRl
cyBsZWZ0OiAldSBjYXVzZSBsZW5ndGg6ICV1XG4iLAorCQkJCXJlbWFpbmluZ19sZW5ndGgsIGNh
dXNlX2xlbmd0aCk7CisJCQlyZXR1cm4gKDApOworCQl9CisJCWlmIChjb2RlID09IDApIHsKKwkJ
CS8qIHJlcG9ydCB0aGUgZmlyc3QgZXJyb3IgY2F1c2UgKi8KKwkJCWNvZGUgPSBjYXVzZV9jb2Rl
OworCQl9CisJCXN3aXRjaCAoY2F1c2VfY29kZSkgeworCQljYXNlIFNDVFBfQ0FVU0VfSU5WQUxJ
RF9TVFJFQU06CisJCWNhc2UgU0NUUF9DQVVTRV9NSVNTSU5HX1BBUkFNOgorCQljYXNlIFNDVFBf
Q0FVU0VfSU5WQUxJRF9QQVJBTToKKwkJY2FzZSBTQ1RQX0NBVVNFX05PX1VTRVJfREFUQToKKwkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsICJTb2Z0d2FyZSBlcnJvciB3ZSBnb3QgYSAldSBi
YWNrPyBXZSBoYXZlIGEgYnVnIDovIChvciBkbyB0aGV5PylcbiIsCisJCQkJY2F1c2VfY29kZSk7
CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0NBVVNFX05BVF9DT0xMSURJTkdfU1RBVEU6CisJCQlT
Q1RQREJHKFNDVFBfREVCVUdfSU5QVVQyLCAiUmVjZWl2ZWQgQ29sbGlkaW5nIHN0YXRlLCBFUlJP
UiBmbGFnczogJXhcbiIsCisJCQkJY2gtPmNodW5rX2ZsYWdzKTsKKwkJCWlmIChzY3RwX2hhbmRs
ZV9uYXRfY29sbGlkaW5nX3N0YXRlKHN0Y2IpKSB7CisJCQkJcmV0dXJuICgwKTsKKwkJCX0KKwkJ
CWJyZWFrOworCQljYXNlIFNDVFBfQ0FVU0VfTkFUX01JU1NJTkdfU1RBVEU6CisJCQlTQ1RQREJH
KFNDVFBfREVCVUdfSU5QVVQyLCAiUmVjZWl2ZWQgbWlzc2luZyBzdGF0ZSwgRVJST1IgZmxhZ3M6
ICV4XG4iLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgY2gtPmNodW5rX2ZsYWdzKTsK
KwkJCWlmIChzY3RwX2hhbmRsZV9uYXRfbWlzc2luZ19zdGF0ZShzdGNiLCBuZXQpKSB7CisJCQkJ
cmV0dXJuICgwKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNDVFBfQ0FVU0VfU1RBTEVfQ09P
S0lFOgorCQkJLyoKKwkJCSAqIFdlIG9ubHkgYWN0IGlmIHdlIGhhdmUgZWNob2VkIGEgY29va2ll
IGFuZCBhcmUKKwkJCSAqIHdhaXRpbmcuCisJCQkgKi8KKwkJCWlmICgoY2F1c2VfbGVuZ3RoID49
IHNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJvcl9zdGFsZV9jb29raWUpKSAmJgorCQkJICAgIChTQ1RQ
X0dFVF9TVEFURShzdGNiKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQpKSB7CisJCQkJc3Ry
dWN0IHNjdHBfZXJyb3Jfc3RhbGVfY29va2llICpzdGFsZV9jb29raWU7CisKKwkJCQlzdGFsZV9j
b29raWUgPSAoc3RydWN0IHNjdHBfZXJyb3Jfc3RhbGVfY29va2llICopY2F1c2U7CisJCQkJLyog
c3RhYmxlX3RpbWUgaXMgaW4gdXNlYywgY29udmVydCB0byBtc2VjLiAqLworCQkJCWFzb2MtPmNv
b2tpZV9wcmVzZXJ2ZV9yZXEgPSBudG9obChzdGFsZV9jb29raWUtPnN0YWxlX3RpbWUpIC8gMTAw
MDsKKwkJCQkvKiBEb3VibGUgaXQgdG8gYmUgbW9yZSByb2J1c3Qgb24gUlRYLiAqLworCQkJCWFz
b2MtPmNvb2tpZV9wcmVzZXJ2ZV9yZXEgKj0gMjsKKwkJCQlhc29jLT5zdGFsZV9jb29raWVfY291
bnQrKzsKKwkJCQlpZiAoYXNvYy0+c3RhbGVfY29va2llX2NvdW50ID4KKwkJCQkgICAgYXNvYy0+
bWF4X2luaXRfdGltZXMpIHsKKwkJCQkJc2N0cF9hYm9ydF9ub3RpZmljYXRpb24oc3RjYiwgMCwg
MCwgTlVMTCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCQkJLyogbm93IGZyZWUgdGhlIGFzb2Mg
Ki8KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJ
CQkJc28gPSBTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKTsKKwkJCQkJYXRvbWljX2FkZF9pbnQo
JnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJ
CQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKKwkJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJ
CQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworI2VuZGlmCisJ
CQkJCSh2b2lkKXNjdHBfZnJlZV9hc3NvYyhzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX05PUk1B
TF9QUk9DLAorCQkJCQkJCSAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfMTIp
OworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJ
CQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworI2VuZGlmCisJCQkJCXJldHVybiAoLTEpOwor
CQkJCX0KKwkJCQkvKiBibGFzdCBiYWNrIHRvIElOSVQgc3RhdGUgKi8KKwkJCQlzY3RwX3Rvc3Nf
b2xkX2Nvb2tpZXMoc3RjYiwgJnN0Y2ItPmFzb2MpOworCQkJCVNDVFBfU0VUX1NUQVRFKHN0Y2Is
IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpOworCQkJCXNjdHBfc3RvcF9hbGxfY29va2llX3RpbWVy
cyhzdGNiKTsKKwkJCQlzY3RwX3NlbmRfaW5pdGlhdGUoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NU
UF9TT19OT1RfTE9DS0VEKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNDVFBfQ0FVU0VfVU5S
RVNPTFZBQkxFX0FERFI6CisJCQkvKgorCQkJICogTm90aGluZyB3ZSBjYW4gZG8gaGVyZSwgd2Ug
ZG9uJ3QgZG8gaG9zdG5hbWUKKwkJCSAqIGFkZHJlc3NlcyBzbyBpZiB0aGUgcGVlciBkb2VzIG5v
dCBsaWtlIG15IElQdjYKKwkJCSAqIChvciBJUHY0IGZvciB0aGF0IG1hdHRlcikgaXQgZG9lcyBu
b3QgbWF0dGVyLiBJZgorCQkJICogdGhleSBkb24ndCBzdXBwb3J0IHRoYXQgdHlwZSBvZiBhZGRy
ZXNzLCB0aGV5IGNhbgorCQkJICogTk9UIHBvc3NpYmx5IGdldCB0aGF0IHBhY2tldCB0eXBlLi4u
IGkuZS4gd2l0aCBubworCQkJICogSVB2NiB5b3UgY2FuJ3QgcmVjZWl2ZSBhIElQdjYgcGFja2V0
LiBzbyB3ZSBjYW4KKwkJCSAqIHNhZmVseSBpZ25vcmUgdGhpcyBvbmUuIElmIHdlIGV2ZXIgYWRk
ZWQgc3VwcG9ydAorCQkJICogZm9yIEhPU1ROQU1FIEFkZHJlc3NlcywgdGhlbiB3ZSB3b3VsZCBu
ZWVkIHRvIGRvCisJCQkgKiBzb21ldGhpbmcgaGVyZS4KKwkJCSAqLworCQkJYnJlYWs7CisJCWNh
c2UgU0NUUF9DQVVTRV9VTlJFQ09HX0NIVU5LOgorCQkJaWYgKGNhdXNlX2xlbmd0aCA+PSBzaXpl
b2Yoc3RydWN0IHNjdHBfZXJyb3JfdW5yZWNvZ25pemVkX2NodW5rKSkgeworCQkJCXN0cnVjdCBz
Y3RwX2Vycm9yX3VucmVjb2duaXplZF9jaHVuayAqdW5yZWNfY2h1bms7CisKKwkJCQl1bnJlY19j
aHVuayA9IChzdHJ1Y3Qgc2N0cF9lcnJvcl91bnJlY29nbml6ZWRfY2h1bmsgKiljYXVzZTsKKwkJ
CQlzY3RwX3Byb2Nlc3NfdW5yZWNvZ19jaHVuayhzdGNiLCB1bnJlY19jaHVuay0+Y2guY2h1bmtf
dHlwZSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0NBVVNFX1VOUkVDT0dfUEFSQU06
CisJCQkvKiBYWFg6IFdlIG9ubHkgY29uc2lkZXIgdGhlIGZpcnN0IHBhcmFtZXRlciAqLworCQkJ
aWYgKGNhdXNlX2xlbmd0aCA+PSBzaXplb2Yoc3RydWN0IHNjdHBfZXJyb3JfY2F1c2UpICsgc2l6
ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSkgeworCQkJCXN0cnVjdCBzY3RwX3BhcmFtaGRyICp1
bnJlY19wYXJhbWV0ZXI7CisKKwkJCQl1bnJlY19wYXJhbWV0ZXIgPSAoc3RydWN0IHNjdHBfcGFy
YW1oZHIgKikoY2F1c2UgKyAxKTsKKwkJCQlzY3RwX3Byb2Nlc3NfdW5yZWNvZ19wYXJhbShzdGNi
LCBudG9ocyh1bnJlY19wYXJhbWV0ZXItPnBhcmFtX3R5cGUpKTsKKwkJCX0KKwkJCWJyZWFrOwor
CQljYXNlIFNDVFBfQ0FVU0VfQ09PS0lFX0lOX1NIVVRET1dOOgorCQkJLyoKKwkJCSAqIFdlIGln
bm9yZSB0aGlzIHNpbmNlIHRoZSB0aW1lciB3aWxsIGRyaXZlIG91dCBhCisJCQkgKiBuZXcgY29v
a2llIGFueXdheSBhbmQgdGhlcmUgdGltZXIgd2lsbCBkcml2ZSB1cworCQkJICogdG8gc2VuZCBh
IFNIVVRET1dOX0NPTVBMRVRFLiBXZSBjYW4ndCBzZW5kIG9uZQorCQkJICogaGVyZSBzaW5jZSB3
ZSBkb24ndCBoYXZlIHRoZWlyIHRhZy4KKwkJCSAqLworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9D
QVVTRV9ERUxFVElOR19MQVNUX0FERFI6CisJCWNhc2UgU0NUUF9DQVVTRV9SRVNPVVJDRV9TSE9S
VEFHRToKKwkJY2FzZSBTQ1RQX0NBVVNFX0RFTEVUSU5HX1NSQ19BRERSOgorCQkJLyoKKwkJCSAq
IFdlIHNob3VsZCBOT1QgZ2V0IHRoZXNlIGhlcmUsIGJ1dCBpbiBhCisJCQkgKiBBU0NPTkYtQUNL
LgorCQkJICovCisJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQyLCAiUGVlciBzZW5kcyBBU0NP
TkYgZXJyb3JzIGluIGEgZXJyb3IgY2F1c2Ugd2l0aCBjb2RlICV1LlxuIiwKKwkJCQljYXVzZV9j
b2RlKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfQ0FVU0VfT1VUX09GX1JFU0M6CisJCQkvKgor
CQkJICogQW5kIHdoYXQsIHByYXkgdGVsbCBkbyB3ZSBkbyB3aXRoIHRoZSBmYWN0IHRoYXQKKwkJ
CSAqIHRoZSBwZWVyIGlzIG91dCBvZiByZXNvdXJjZXM/IE5vdCByZWFsbHkgc3VyZSB3ZQorCQkJ
ICogY291bGQgZG8gYW55dGhpbmcgYnV0IGFib3J0LiBJIHN1c3BlY3QgdGhpcworCQkJICogc2hv
dWxkIGhhdmUgY2FtZSBXSVRIIGFuIGFib3J0IGluc3RlYWQgb2YgaW4gYQorCQkJICogT1AtRVJS
T1IuCisJCQkgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJU0NUUERCRyhTQ1RQX0RFQlVH
X0lOUFVUMSwgInNjdHBfaGFuZGxlX2Vycm9yOiB1bmtub3duIGNvZGUgMHgleFxuIiwKKwkJCQlj
YXVzZV9jb2RlKTsKKwkJCWJyZWFrOworCQl9CisJCWFkanVzdCA9IFNDVFBfU0laRTMyKGNhdXNl
X2xlbmd0aCk7CisJCWlmIChyZW1haW5pbmdfbGVuZ3RoID49IGFkanVzdCkgeworCQkJcmVtYWlu
aW5nX2xlbmd0aCAtPSBhZGp1c3Q7CisJCX0gZWxzZSB7CisJCQlyZW1haW5pbmdfbGVuZ3RoID0g
MDsKKwkJfQorCQljYXVzZSA9IChzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSAqKSgoY2FkZHJfdClj
YXVzZSArIGFkanVzdCk7CisJfQorCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9SRU1PVEVf
RVJST1IsIHN0Y2IsIGNvZGUsIGNoLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCXJldHVybiAoMCk7
Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfaGFuZGxlX2luaXRfYWNrKHN0cnVjdCBtYnVmICptLCBp
bnQgaXBobGVuLCBpbnQgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2th
ZGRyICpzcmMsIHN0cnVjdCBzb2NrYWRkciAqZHN0LCBzdHJ1Y3Qgc2N0cGhkciAqc2gsCisgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9pbml0X2Fja19jaHVuayAqY3AsIHN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiwKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX25ldHMgKm5l
dCwgaW50ICphYm9ydF9ub191bmxvY2ssCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKKyAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWZsb3d0
eXBlLCB1aW50MzJfdCBtZmxvd2lkLAorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICB1aW50
MzJfdCB2cmZfaWQpCit7CisJc3RydWN0IHNjdHBfaW5pdF9hY2sgKmluaXRfYWNrOworCXN0cnVj
dCBtYnVmICpvcF9lcnI7CisKKwlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQyLAorCQkic2N0cF9o
YW5kbGVfaW5pdF9hY2s6IGhhbmRsaW5nIElOSVQtQUNLXG4iKTsKKworCWlmIChzdGNiID09IE5V
TEwpIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwKKwkJCSJzY3RwX2hhbmRsZV9pbml0
X2FjazogVENCIGlzIG51bGxcbiIpOworCQlyZXR1cm4gKC0xKTsKKwl9CisJaW5pdF9hY2sgPSAm
Y3AtPmluaXQ7CisJLyogVmFsaWRhdGUgcGFyYW1ldGVycy4gKi8KKwlpZiAoKG50b2hsKGluaXRf
YWNrLT5pbml0aWF0ZV90YWcpID09IDApIHx8CisJICAgIChudG9obChpbml0X2Fjay0+YV9yd25k
KSA8IFNDVFBfTUlOX1JXTkQpIHx8CisJICAgIChudG9ocyhpbml0X2Fjay0+bnVtX2luYm91bmRf
c3RyZWFtcykgPT0gMCkgfHwKKwkgICAgKG50b2hzKGluaXRfYWNrLT5udW1fb3V0Ym91bmRfc3Ry
ZWFtcykgPT0gMCkpIHsKKwkJLyogcHJvdG9jb2wgZXJyb3IuLi4gc2VuZCBhbiBhYm9ydCAqLwor
CQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfSU5WQUxJRF9QQVJBTSwg
IiIpOworCQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG0sIGlw
aGxlbiwKKwkJICAgICAgICAgICAgICAgICAgICAgICBzcmMsIGRzdCwgc2gsIG9wX2VyciwKKyNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkgICAg
ICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKKyNlbmRpZgorCQkgICAgICAg
ICAgICAgICAgICAgICAgIHZyZl9pZCwgbmV0LT5wb3J0KTsKKwkJKmFib3J0X25vX3VubG9jayA9
IDE7CisJCXJldHVybiAoLTEpOworCX0KKwkvKiBwcm9jZXNzIGFjY29yZGluZyB0byBhc3NvY2lh
dGlvbiBzdGF0ZS4uLiAqLworCXN3aXRjaCAoU0NUUF9HRVRfU1RBVEUoc3RjYikpIHsKKwljYXNl
IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQ6CisJCS8qIHRoaXMgaXMgdGhlIGV4cGVjdGVkIHN0YXRl
IGZvciB0aGlzIGNodW5rICovCisJCS8qIHByb2Nlc3MgdGhlIElOSVQtQUNLIHBhcmFtZXRlcnMg
Ki8KKwkJaWYgKHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbi0+ZGVzdF9zdGF0ZSAmCisJ
CSAgICBTQ1RQX0FERFJfVU5DT05GSVJNRUQpIHsKKwkJCS8qCisJCQkgKiBUaGUgcHJpbWFyeSBp
cyB3aGVyZSB3ZSBzZW50IHRoZSBJTklULCB3ZSBjYW4KKwkJCSAqIGFsd2F5cyBjb25zaWRlciBp
dCBjb25maXJtZWQgd2hlbiB0aGUgSU5JVC1BQ0sgaXMKKwkJCSAqIHJldHVybmVkLiBEbyB0aGlz
IGJlZm9yZSB3ZSBsb2FkIGFkZHJlc3NlcworCQkJICogdGhvdWdoLgorCQkJICovCisJCQlzdGNi
LT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24tPmRlc3Rfc3RhdGUgJj0KKwkJCSAgICB+U0NUUF9B
RERSX1VOQ09ORklSTUVEOworCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0lOVEVSRkFD
RV9DT05GSVJNRUQsCisJCQkgICAgc3RjYiwgMCwgKHZvaWQgKilzdGNiLT5hc29jLnByaW1hcnlf
ZGVzdGluYXRpb24sIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCX0KKwkJaWYgKHNjdHBfcHJvY2Vz
c19pbml0X2FjayhtLCBpcGhsZW4sIG9mZnNldCwgc3JjLCBkc3QsIHNoLCBjcCwgc3RjYiwKKwkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICBuZXQsIGFib3J0X25vX3VubG9jaywKKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKKyNlbmRpZgorCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZyZl9pZCkgPCAwKSB7CisJCQkvKiBlcnJvciBpbiBwYXJzaW5nIHBh
cmFtZXRlcnMgKi8KKwkJCXJldHVybiAoLTEpOworCQl9CisJCS8qIHVwZGF0ZSBvdXIgc3RhdGUg
Ki8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwgIm1vdmluZyB0byBDT09LSUUtRUNIT0VE
IHN0YXRlXG4iKTsKKwkJU0NUUF9TRVRfU1RBVEUoc3RjYiwgU0NUUF9TVEFURV9DT09LSUVfRUNI
T0VEKTsKKworCQkvKiByZXNldCB0aGUgUlRPIGNhbGMgKi8KKwkJaWYgKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfVEhSRVNIT0xEX0xPR0dJTkcpIHsKKwkJCXNj
dHBfbWlzY19pbnRzKFNDVFBfVEhSRVNIT0xEX0NMRUFSLAorCQkJCSAgICAgICBzdGNiLT5hc29j
Lm92ZXJhbGxfZXJyb3JfY291bnQsCisJCQkJICAgICAgIDAsCisJCQkJICAgICAgIFNDVFBfRlJP
TV9TQ1RQX0lOUFVULAorCQkJCSAgICAgICBfX0xJTkVfXyk7CisJCX0KKwkJc3RjYi0+YXNvYy5v
dmVyYWxsX2Vycm9yX2NvdW50ID0gMDsKKwkJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJnN0
Y2ItPmFzb2MudGltZV9lbnRlcmVkKTsKKwkJLyoKKwkJICogY29sbGFwc2UgdGhlIGluaXQgdGlt
ZXIgYmFjayBpbiBjYXNlIG9mIGEgZXhwb25lbnRpYWwKKwkJICogYmFja29mZgorCQkgKi8KKwkJ
c2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfQ09PS0lFLCBzdGNiLT5zY3RwX2VwLAor
CQkgICAgc3RjYiwgbmV0KTsKKwkJLyoKKwkJICogdGhlIHNlbmQgYXQgdGhlIGVuZCBvZiB0aGUg
aW5ib3VuZCBkYXRhIHByb2Nlc3Npbmcgd2lsbAorCQkgKiBjYXVzZSB0aGUgY29va2llIHRvIGJl
IHNlbnQKKwkJICovCisJCWJyZWFrOworCWNhc2UgU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UOgor
CQkvKiBpbmNvcnJlY3Qgc3RhdGUuLi4gZGlzY2FyZCAqLworCQlicmVhazsKKwljYXNlIFNDVFBf
U1RBVEVfQ09PS0lFX0VDSE9FRDoKKwkJLyogaW5jb3JyZWN0IHN0YXRlLi4uIGRpc2NhcmQgKi8K
KwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NUQVRFX09QRU46CisJCS8qIGluY29ycmVjdCBzdGF0ZS4u
LiBkaXNjYXJkICovCisJCWJyZWFrOworCWNhc2UgU0NUUF9TVEFURV9FTVBUWToKKwljYXNlIFND
VFBfU1RBVEVfSU5VU0U6CisJZGVmYXVsdDoKKwkJLyogaW5jb3JyZWN0IHN0YXRlLi4uIGRpc2Nh
cmQgKi8KKwkJcmV0dXJuICgtMSk7CisJCWJyZWFrOworCX0KKwlTQ1RQREJHKFNDVFBfREVCVUdf
SU5QVVQxLCAiTGVhdmluZyBoYW5kbGUtaW5pdC1hY2sgZW5kXG4iKTsKKwlyZXR1cm4gKDApOwor
fQorCitzdGF0aWMgc3RydWN0IHNjdHBfdGNiICoKK3NjdHBfcHJvY2Vzc19jb29raWVfbmV3KHN0
cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQgb2Zmc2V0LAorICAgIHN0cnVjdCBzb2NrYWRk
ciAqc3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwKKyAgICBzdHJ1Y3Qgc2N0cGhkciAqc2gsIHN0
cnVjdCBzY3RwX3N0YXRlX2Nvb2tpZSAqY29va2llLCBpbnQgY29va2llX2xlbiwKKyAgICBzdHJ1
Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF9uZXRzICoqbmV0cCwKKyAgICBzdHJ1Y3Qg
c29ja2FkZHIgKmluaXRfc3JjLCBpbnQgKm5vdGlmaWNhdGlvbiwKKyAgICBpbnQgYXV0aF9za2lw
cGVkLCB1aW50MzJfdCBhdXRoX29mZnNldCwgdWludDMyX3QgYXV0aF9sZW4sCisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyAgICB1aW50OF90IG1m
bG93dHlwZSwgdWludDMyX3QgbWZsb3dpZCwKKyNlbmRpZgorICAgIHVpbnQzMl90IHZyZl9pZCwg
dWludDE2X3QgcG9ydCk7CisKKy8qCisgKiBoYW5kbGUgYSBzdGF0ZSBjb29raWUgZm9yIGFuIGV4
aXN0aW5nIGFzc29jaWF0aW9uIG06IGlucHV0IHBhY2tldCBtYnVmCisgKiBjaGFpbi0tIGFzc3Vt
ZXMgYSBwdWxsdXAgb24gSVAvU0NUUC9DT09LSUUtRUNITyBjaHVuayBub3RlOiB0aGlzIGlzIGEK
KyAqICJzcGxpdCIgbWJ1ZiBhbmQgdGhlIGNvb2tpZSBzaWduYXR1cmUgZG9lcyBub3QgZXhpc3Qg
b2Zmc2V0OiBvZmZzZXQgaW50bworICogbWJ1ZiB0byB0aGUgY29va2llLWVjaG8gY2h1bmsKKyAq
Lworc3RhdGljIHN0cnVjdCBzY3RwX3RjYiAqCitzY3RwX3Byb2Nlc3NfY29va2llX2V4aXN0aW5n
KHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQgb2Zmc2V0LAorICAgIHN0cnVjdCBzb2Nr
YWRkciAqc3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwKKyAgICBzdHJ1Y3Qgc2N0cGhkciAqc2gs
IHN0cnVjdCBzY3RwX3N0YXRlX2Nvb2tpZSAqY29va2llLCBpbnQgY29va2llX2xlbiwKKyAgICBz
dHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3Rw
X25ldHMgKipuZXRwLAorICAgIHN0cnVjdCBzb2NrYWRkciAqaW5pdF9zcmMsIGludCAqbm90aWZp
Y2F0aW9uLAorICAgIGludCBhdXRoX3NraXBwZWQsIHVpbnQzMl90IGF1dGhfb2Zmc2V0LCB1aW50
MzJfdCBhdXRoX2xlbiwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxvd2lkLAorI2Vu
ZGlmCisgICAgdWludDMyX3QgdnJmX2lkLCB1aW50MTZfdCBwb3J0KQoreworCXN0cnVjdCBzY3Rw
X2Fzc29jaWF0aW9uICphc29jOworCXN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKmluaXRfY3AsIGlu
aXRfYnVmOworCXN0cnVjdCBzY3RwX2luaXRfYWNrX2NodW5rICppbml0YWNrX2NwLCBpbml0YWNr
X2J1ZjsKKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkciAqYXBhcmFtLCAqbmFwYXJhbTsKKwlzdHJ1
Y3Qgc2N0cF9hc2NvbmZfYWNrICphYWNrLCAqbmFhY2s7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVu
ayAqY2hrLCAqbmNoazsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfbGlzdCAqc3RycnN0LCAq
bnN0cnJzdDsKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqc3EsICpuc3E7CisJc3RydWN0
IHNjdHBfbmV0cyAqbmV0OworCXN0cnVjdCBtYnVmICpvcF9lcnI7CisJc3RydWN0IHRpbWV2YWwg
b2xkOworCWludCBpbml0X29mZnNldCwgaW5pdGFja19vZmZzZXQsIGk7CisJaW50IHJldHZhbDsK
KwlpbnQgc3BlY19mbGFnID0gMDsKKwl1aW50MzJfdCBob3dfaW5keDsKKyNpZiBkZWZpbmVkKFND
VFBfREVUQUlMRURfU1RSX1NUQVRTKQorCWludCBqOworI2VuZGlmCisKKwluZXQgPSAqbmV0cDsK
KwkvKiBJIGtub3cgdGhhdCB0aGUgVENCIGlzIG5vbi1OVUxMIGZyb20gdGhlIGNhbGxlciAqLwor
CWFzb2MgPSAmc3RjYi0+YXNvYzsKKwlmb3IgKGhvd19pbmR4ID0gMDsgaG93X2luZHggIDwgc2l6
ZW9mKGFzb2MtPmNvb2tpZV9ob3cpOyBob3dfaW5keCsrKSB7CisJCWlmIChhc29jLT5jb29raWVf
aG93W2hvd19pbmR4XSA9PSAwKQorCQkJYnJlYWs7CisJfQorCWlmIChob3dfaW5keCA8IHNpemVv
Zihhc29jLT5jb29raWVfaG93KSkgeworCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDE7
CisJfQorCWlmIChTQ1RQX0dFVF9TVEFURShzdGNiKSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX0FD
S19TRU5UKSB7CisJCS8qIFNIVVRET1dOIGNhbWUgaW4gYWZ0ZXIgc2VuZGluZyBJTklULUFDSyAq
LworCQlzY3RwX3NlbmRfc2h1dGRvd25fYWNrKHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0
aW5hdGlvbik7CisJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9DT09L
SUVfSU5fU0hVVERPV04sICIiKTsKKwkJc2N0cF9zZW5kX29wZXJyX3RvKHNyYywgZHN0LCBzaCwg
Y29va2llLT5wZWVyc192dGFnLCBvcF9lcnIsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
IWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwg
bWZsb3dpZCwgaW5wLT5maWJudW0sCisjZW5kaWYKKwkJICAgICAgICAgICAgICAgICAgIHZyZl9p
ZCwgbmV0LT5wb3J0KTsKKwkJaWYgKGhvd19pbmR4IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cp
KQorCQkJYXNvYy0+Y29va2llX2hvd1tob3dfaW5keF0gPSAyOworCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7CisJCXJldHVybiAoTlVMTCk7CisJfQorCS8qCisJICogZmluZCBhbmQgdmFsaWRhdGUg
dGhlIElOSVQgY2h1bmsgaW4gdGhlIGNvb2tpZSAocGVlcidzIGluZm8pIHRoZQorCSAqIElOSVQg
c2hvdWxkIHN0YXJ0IGFmdGVyIHRoZSBjb29raWUtZWNobyBoZWFkZXIgc3RydWN0IChjaHVuawor
CSAqIGhlYWRlciwgc3RhdGUgY29va2llIGhlYWRlciBzdHJ1Y3QpCisJICovCisJaW5pdF9vZmZz
ZXQgPSBvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Nvb2tpZV9lY2hvX2NodW5rKTsKKwor
CWluaXRfY3AgPSAoc3RydWN0IHNjdHBfaW5pdF9jaHVuayAqKQorCQlzY3RwX21fZ2V0cHRyKG0s
IGluaXRfb2Zmc2V0LCBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9jaHVuayksCisJCQkgICAgICAo
dWludDhfdCAqKSAmIGluaXRfYnVmKTsKKwlpZiAoaW5pdF9jcCA9PSBOVUxMKSB7CisJCS8qIGNv
dWxkIG5vdCBwdWxsIGEgSU5JVCBjaHVuayBpbiBjb29raWUgKi8KKwkJU0NUUF9UQ0JfVU5MT0NL
KHN0Y2IpOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlpZiAoaW5pdF9jcC0+Y2guY2h1bmtfdHlw
ZSAhPSBTQ1RQX0lOSVRJQVRJT04pIHsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlyZXR1
cm4gKE5VTEwpOworCX0KKwkvKgorCSAqIGZpbmQgYW5kIHZhbGlkYXRlIHRoZSBJTklULUFDSyBj
aHVuayBpbiB0aGUgY29va2llIChteSBpbmZvKSB0aGUKKwkgKiBJTklULUFDSyBmb2xsb3dzIHRo
ZSBJTklUIGNodW5rCisJICovCisJaW5pdGFja19vZmZzZXQgPSBpbml0X29mZnNldCArIFNDVFBf
U0laRTMyKG50b2hzKGluaXRfY3AtPmNoLmNodW5rX2xlbmd0aCkpOworCWluaXRhY2tfY3AgPSAo
c3RydWN0IHNjdHBfaW5pdF9hY2tfY2h1bmsgKikKKwkJc2N0cF9tX2dldHB0cihtLCBpbml0YWNr
X29mZnNldCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfYWNrX2NodW5rKSwKKwkJCSAgICAgICh1
aW50OF90ICopICYgaW5pdGFja19idWYpOworCWlmIChpbml0YWNrX2NwID09IE5VTEwpIHsKKwkJ
LyogY291bGQgbm90IHB1bGwgSU5JVC1BQ0sgY2h1bmsgaW4gY29va2llICovCisJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWYgKGluaXRhY2tfY3AtPmNo
LmNodW5rX3R5cGUgIT0gU0NUUF9JTklUSUFUSU9OX0FDSykgeworCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWlmICgobnRvaGwoaW5pdGFja19jcC0+aW5p
dC5pbml0aWF0ZV90YWcpID09IGFzb2MtPm15X3Z0YWcpICYmCisJICAgIChudG9obChpbml0X2Nw
LT5pbml0LmluaXRpYXRlX3RhZykgPT0gYXNvYy0+cGVlcl92dGFnKSkgeworCQkvKgorCQkgKiBj
YXNlIEQgaW4gU2VjdGlvbiA1LjIuNCBUYWJsZSAyOiBNTUFBIHByb2Nlc3MgYWNjb3JkaW5nbHkK
KwkJICogdG8gZ2V0IGludG8gdGhlIE9QRU4gc3RhdGUKKwkJICovCisJCWlmIChudG9obChpbml0
YWNrX2NwLT5pbml0LmluaXRpYWxfdHNuKSAhPSBhc29jLT5pbml0X3NlcV9udW1iZXIpIHsKKwkJ
CS8qLQorCQkJICogT3BwcywgdGhpcyBtZWFucyB0aGF0IHdlIHNvbWVob3cgZ2VuZXJhdGVkIHR3
byB2dGFnJ3MKKwkJCSAqIHRoZSBzYW1lLiBJLmUuIHdlIGRpZDoKKwkJCSAqICBVcyAgICAgICAg
ICAgICAgIFBlZXIKKwkJCSAqICAgPC0tLUlOSVQodGFnPWEpLS0tLS0tCisJCQkgKiAgIC0tLS1J
TklULUFDSyh0YWc9dCktLT4KKwkJCSAqICAgLS0tLUlOSVQodGFnPXQpLS0tLS0tPiAqMQorCQkJ
ICogICA8LS0tSU5JVC1BQ0sodGFnPWEpLS0tCisJCQkgKiAgIDwtLS0tQ0UodGFnPXQpLS0tLS0t
LS0tLS0tLSAqMgorCQkJICoKKwkJCSAqIEF0IHBvaW50ICoxIHdlIHNob3VsZCBiZSBnZW5lcmF0
aW5nIGEgZGlmZmVyZW50CisJCQkgKiB0YWcgdCcuIFdoaWNoIG1lYW5zIHdlIHdvdWxkIHRocm93
IGF3YXkgdGhlIENFIGFuZCBzZW5kCisJCQkgKiBvdXJzIGluc3RlYWQuIEJhc2ljYWxseSB0aGlz
IGlzIGNhc2UgQyAodGhyb3cgYXdheSBzaWRlKS4KKwkJCSAqLworCQkJaWYgKGhvd19pbmR4IDwg
c2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQorCQkJCWFzb2MtPmNvb2tpZV9ob3dbaG93X2luZHhd
ID0gMTc7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9
CisJCXN3aXRjaCAoU0NUUF9HRVRfU1RBVEUoc3RjYikpIHsKKwkJCWNhc2UgU0NUUF9TVEFURV9D
T09LSUVfV0FJVDoKKwkJCWNhc2UgU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEOgorCQkJCS8qCisJ
CQkJICogSU5JVCB3YXMgc2VudCBidXQgZ290IGEgQ09PS0lFX0VDSE8gd2l0aCB0aGUKKwkJCQkg
KiBjb3JyZWN0IHRhZ3MuLi4ganVzdCBhY2NlcHQgaXQuLi5idXQgd2UgbXVzdAorCQkJCSAqIHBy
b2Nlc3MgdGhlIGluaXQgc28gdGhhdCB3ZSBjYW4gbWFrZSBzdXJlIHdlCisJCQkJICogaGF2ZSB0
aGUgcmlnaHQgc2VxIG5vJ3MuCisJCQkJICovCisJCQkJLyogRmlyc3Qgd2UgbXVzdCBwcm9jZXNz
IHRoZSBJTklUICEhICovCisJCQkJaWYgKHNjdHBfcHJvY2Vzc19pbml0KGluaXRfY3AsIHN0Y2Ip
IDwgMCkgeworCQkJCQlpZiAoaG93X2luZHggPCBzaXplb2YoYXNvYy0+Y29va2llX2hvdykpCisJ
CQkJCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDM7CisJCQkJCW9wX2VyciA9IHNjdHBf
Z2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9PVVRfT0ZfUkVTQywgIiIpOworCQkJCQlTQ1RQREJH
KFNDVFBfREVCVUdfSU5QVVQxLCAic2N0cF9wcm9jZXNzX2luaXQoKSBmYWlsZWRcbiIpOworCQkJ
CQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG0sIGlwaGxlbiwK
KwkJCQkJICAgICAgICAgICAgICAgICAgICAgICBzcmMsIGRzdCwgc2gsIG9wX2VyciwKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCQkgICAg
ICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKKyNlbmRpZgorCQkJCQkgICAg
ICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgbmV0LT5wb3J0KTsKKwkJCQkJcmV0dXJuIChOVUxM
KTsKKwkJCQl9CisJCQkJLyogd2UgaGF2ZSBhbHJlYWR5IHByb2Nlc3NlZCB0aGUgSU5JVCBzbyBu
byBwcm9ibGVtICovCisJCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9IRUFSVEJF
QVQsIGlucCwKKwkJCQkgICAgICAgICAgICAgICAgc3RjYiwgbmV0LAorCQkJCSAgICAgICAgICAg
ICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzEzKTsKKwkJCQlzY3RwX3RpbWVy
X3N0b3AoU0NUUF9USU1FUl9UWVBFX0lOSVQsIGlucCwKKwkJCQkgICAgICAgICAgICAgICAgc3Rj
YiwgbmV0LAorCQkJCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBf
TE9DXzE0KTsKKwkJCQkvKiB1cGRhdGUgY3VycmVudCBzdGF0ZSAqLworCQkJCWlmIChTQ1RQX0dF
VF9TVEFURShzdGNiKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQpCisJCQkJCVNDVFBfU1RB
VF9JTkNSX0NPVU5URVIzMihzY3Rwc19hY3RpdmVlc3RhYik7CisJCQkJZWxzZQorCQkJCQlTQ1RQ
X1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfY29sbGlzaW9uZXN0YWIpOworCisJCQkJU0NUUF9T
RVRfU1RBVEUoc3RjYiwgU0NUUF9TVEFURV9PUEVOKTsKKwkJCQlpZiAoYXNvYy0+c3RhdGUgJiBT
Q1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcpIHsKKwkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQ
X1RJTUVSX1RZUEVfU0hVVERPV05HVUFSRCwKKwkJCQkJICAgICAgICAgICAgICAgICBzdGNiLT5z
Y3RwX2VwLCBzdGNiLCBOVUxMKTsKKwkJCQl9CisJCQkJU0NUUF9TVEFUX0lOQ1JfR0FVR0UzMihz
Y3Rwc19jdXJyZXN0YWIpOworCQkJCXNjdHBfc3RvcF9hbGxfY29va2llX3RpbWVycyhzdGNiKTsK
KwkJCQlpZiAoKChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQ
VFlQRSkgfHwKKwkJCQkgICAgIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfSU5fVENQUE9PTCkpICYmCisJCQkJICAgICghU0NUUF9JU19MSVNURU5JTkcoaW5wKSkp
IHsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJ
CQkJc3RydWN0IHNvY2tldCAqc287CisjZW5kaWYKKwkJCQkJLyoKKwkJCQkJICogSGVyZSBpcyB3
aGVyZSBjb2xsaXNpb24gd291bGQgZ28gaWYgd2UKKwkJCQkJICogZGlkIGEgY29ubmVjdCgpIGFu
ZCBpbnN0ZWFkIGdvdCBhCisJCQkJCSAqIGluaXQvaW5pdC1hY2svY29va2llIGRvbmUgYmVmb3Jl
IHRoZQorCQkJCQkgKiBpbml0LWFjayBjYW1lIGJhY2suLgorCQkJCQkgKi8KKwkJCQkJc3RjYi0+
c2N0cF9lcC0+c2N0cF9mbGFncyB8PQorCQkJCQkJU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEOwor
I2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCQlz
byA9IFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApOworCQkJCQlhdG9taWNfYWRkX2ludCgmc3Rj
Yi0+YXNvYy5yZWZjbnQsIDEpOworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCVND
VFBfU09DS0VUX0xPQ0soc28sIDEpOworCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJCQlh
dG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsKKwkJCQkJaWYgKHN0Y2ItPmFz
b2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQpIHsKKwkJCQkJCVNDVFBfVENCX1VO
TE9DSyhzdGNiKTsKKwkJCQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisJCQkJCQlyZXR1
cm4gKE5VTEwpOworCQkJCQl9CisjZW5kaWYKKwkJCQkJc29pc2Nvbm5lY3RlZChzdGNiLT5zY3Rw
X3NvY2tldCk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisJCQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisjZW5kaWYKKwkJCQl9CisJCQkJ
Lyogbm90aWZ5IHVwcGVyIGxheWVyICovCisJCQkJKm5vdGlmaWNhdGlvbiA9IFNDVFBfTk9USUZZ
X0FTU09DX1VQOworCQkJCS8qCisJCQkJICogc2luY2Ugd2UgZGlkIG5vdCBzZW5kIGEgSEIgbWFr
ZSBzdXJlIHdlCisJCQkJICogZG9uJ3QgZG91YmxlIHRoaW5ncworCQkJCSAqLworCQkJCW9sZC50
dl9zZWMgPSBjb29raWUtPnRpbWVfZW50ZXJlZC50dl9zZWM7CisJCQkJb2xkLnR2X3VzZWMgPSBj
b29raWUtPnRpbWVfZW50ZXJlZC50dl91c2VjOworCQkJCW5ldC0+aGJfcmVzcG9uZGVkID0gMTsK
KwkJCQlzY3RwX2NhbGN1bGF0ZV9ydG8oc3RjYiwgYXNvYywgbmV0LCAmb2xkLAorCQkJCSAgICAg
ICAgICAgICAgICAgICBTQ1RQX1JUVF9GUk9NX05PTl9EQVRBKTsKKworCQkJCWlmIChzdGNiLT5h
c29jLnNjdHBfYXV0b2Nsb3NlX3RpY2tzICYmCisJCQkJICAgIChzY3RwX2lzX2ZlYXR1cmVfb24o
aW5wLCBTQ1RQX1BDQl9GTEFHU19BVVRPQ0xPU0UpKSkgeworCQkJCQlzY3RwX3RpbWVyX3N0YXJ0
KFNDVFBfVElNRVJfVFlQRV9BVVRPQ0xPU0UsCisJCQkJCSAgICAgICAgICAgICAgICAgaW5wLCBz
dGNiLCBOVUxMKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCS8qCisJCQkJ
ICogd2UncmUgaW4gdGhlIE9QRU4gc3RhdGUgKG9yIGJleW9uZCksIHNvCisJCQkJICogcGVlciBt
dXN0IGhhdmUgc2ltcGx5IGxvc3QgdGhlIENPT0tJRS1BQ0sKKwkJCQkgKi8KKwkJCQlicmVhazsK
KwkJfQkvKiBlbmQgc3dpdGNoICovCisJCXNjdHBfc3RvcF9hbGxfY29va2llX3RpbWVycyhzdGNi
KTsKKwkJaWYgKChyZXR2YWwgPSBzY3RwX2xvYWRfYWRkcmVzc2VzX2Zyb21faW5pdChzdGNiLCBt
LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9vZmZzZXQgKyBz
aXplb2Yoc3RydWN0IHNjdHBfaW5pdF9jaHVuayksCisJCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbml0YWNrX29mZnNldCwgc3JjLCBkc3QsIGluaXRfc3JjLCBzdGNiLT5h
c29jLnBvcnQpKSA8IDApIHsKKwkJCWlmIChob3dfaW5keCA8IHNpemVvZihhc29jLT5jb29raWVf
aG93KSkKKwkJCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDQ7CisJCQlvcF9lcnIgPSBz
Y3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9fY29kZSks
CisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcm9ibGVtIHdpdGggYWRkcmVzcyBw
YXJhbWV0ZXJzIik7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQxLAorCQkJICAgICAgICAi
TG9hZCBhZGRyZXNzZXMgZnJvbSBJTklUIGNhdXNlcyBhbiBhYm9ydCAlZFxuIiwKKwkJCSAgICAg
ICAgcmV0dmFsKTsKKwkJCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3Rj
YiwgbSwgaXBobGVuLAorCQkJICAgICAgICAgICAgICAgICAgICAgICBzcmMsIGRzdCwgc2gsIG9w
X2VyciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorCQkJICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCisjZW5kaWYK
KwkJCSAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lkLCBuZXQtPnBvcnQpOworCQkJcmV0dXJu
IChOVUxMKTsKKwkJfQorCQkvKiByZXNwb25kIHdpdGggYSBDT09LSUUtQUNLICovCisJCXNjdHBf
dG9zc19vbGRfY29va2llcyhzdGNiLCBhc29jKTsKKwkJc2N0cF9zZW5kX2Nvb2tpZV9hY2soc3Rj
Yik7CisJCWlmIChob3dfaW5keCA8IHNpemVvZihhc29jLT5jb29raWVfaG93KSkKKwkJCWFzb2Mt
PmNvb2tpZV9ob3dbaG93X2luZHhdID0gNTsKKwkJcmV0dXJuIChzdGNiKTsKKwl9CisKKwlpZiAo
bnRvaGwoaW5pdGFja19jcC0+aW5pdC5pbml0aWF0ZV90YWcpICE9IGFzb2MtPm15X3Z0YWcgJiYK
KwkgICAgbnRvaGwoaW5pdF9jcC0+aW5pdC5pbml0aWF0ZV90YWcpID09IGFzb2MtPnBlZXJfdnRh
ZyAmJgorCSAgICBjb29raWUtPnRpZV90YWdfbXlfdnRhZyA9PSAwICYmCisJICAgIGNvb2tpZS0+
dGllX3RhZ19wZWVyX3Z0YWcgPT0gMCkgeworCQkvKgorCQkgKiBjYXNlIEMgaW4gU2VjdGlvbiA1
LjIuNCBUYWJsZSAyOiBYTU9PIHNpbGVudGx5IGRpc2NhcmQKKwkJICovCisJCWlmIChob3dfaW5k
eCA8IHNpemVvZihhc29jLT5jb29raWVfaG93KSkKKwkJCWFzb2MtPmNvb2tpZV9ob3dbaG93X2lu
ZHhdID0gNjsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlyZXR1cm4gKE5VTEwpOworCX0K
KwkvKiBJZiBuYXQgc3VwcG9ydCwgYW5kIHRoZSBiZWxvdyBhbmQgc3RjYiBpcyBlc3RhYmxpc2hl
ZCwKKwkgKiBzZW5kIGJhY2sgYSBBQk9SVChjb2xsaWRpbmcgc3RhdGUpIGlmIHdlIGFyZSBlc3Rh
Ymxpc2hlZC4KKwkgKi8KKwlpZiAoKFNDVFBfR0VUX1NUQVRFKHN0Y2IpID09IFNDVFBfU1RBVEVf
T1BFTikgICYmCisJICAgIChhc29jLT5wZWVyX3N1cHBvcnRzX25hdCkgJiYKKwkgICAgKChudG9o
bChpbml0YWNrX2NwLT5pbml0LmluaXRpYXRlX3RhZykgPT0gYXNvYy0+bXlfdnRhZykgJiYKKwkg
ICAgKChudG9obChpbml0X2NwLT5pbml0LmluaXRpYXRlX3RhZykgIT0gYXNvYy0+cGVlcl92dGFn
KSB8fAorCSAgICAgKGFzb2MtPnBlZXJfdnRhZyA9PSAwKSkpKSB7CisJCS8qIFNwZWNpYWwgY2Fz
ZSAtIFBlZXIncyBzdXBwb3J0IG5hdC4gV2UgbWF5IGhhdmUKKwkJICogdHdvIGluaXQncyB0aGF0
IHdlIGdhdmUgb3V0IHRoZSBzYW1lIHRhZyBvbiBzaW5jZQorCQkgKiBvbmUgd2FzIG5vdCBlc3Rh
Ymxpc2hlZC4uIGkuZS4gd2UgZ2V0IElOSVQgZnJvbSBob3N0LTEKKwkJICogYmVoaW5kIHRoZSBu
YXQgYW5kIHdlIHJlc3BvbmQgdGFnLWEsIHdlIGdldCBhIElOSVQgZnJvbQorCQkgKiBob3N0LTIg
YmVoaW5kIHRoZSBuYXQgYW5kIHdlIGdldCB0YWctYSBhZ2Fpbi4gVGhlbiB3ZQorCQkgKiBicmlu
ZyB1cCBob3N0LTEgKG9yIDIncykgYXNzb2MsIFRoZW4gY29tZXMgdGhlIGNvb2tpZQorCQkgKiBm
cm9tIGhzb3QtMiAob3IgMSkuIE5vdyB3ZSBoYXZlIGNvbGxpZGluZyBzdGF0ZS4gV2UgbXVzdAor
CQkgKiBzZW5kIGFuIGFib3J0IGhlcmUgd2l0aCBjb2xsaWRpbmcgc3RhdGUgaW5kaWNhdGlvbi4K
KwkJICovCisJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9OQVRfQ09M
TElESU5HX1NUQVRFLCAiIik7CisJCXNjdHBfc2VuZF9hYm9ydChtLCBpcGhsZW4sICBzcmMsIGRz
dCwgc2gsIDAsIG9wX2VyciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorCQkgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBpbnAt
PmZpYm51bSwKKyNlbmRpZgorCQkgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKKwkJU0NU
UF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlpZiAoKG50b2hsKGlu
aXRhY2tfY3AtPmluaXQuaW5pdGlhdGVfdGFnKSA9PSBhc29jLT5teV92dGFnKSAmJgorCSAgICAo
KG50b2hsKGluaXRfY3AtPmluaXQuaW5pdGlhdGVfdGFnKSAhPSBhc29jLT5wZWVyX3Z0YWcpIHx8
CisJICAgICAoYXNvYy0+cGVlcl92dGFnID09IDApKSkgeworCQkvKgorCQkgKiBjYXNlIEIgaW4g
U2VjdGlvbiA1LjIuNCBUYWJsZSAyOiBNWEFBIG9yIE1PQUEgbXkgaW5mbworCQkgKiBzaG91bGQg
YmUgb2ssIHJlLWFjY2VwdCBwZWVyIGluZm8KKwkJICovCisJCWlmIChudG9obChpbml0YWNrX2Nw
LT5pbml0LmluaXRpYWxfdHNuKSAhPSBhc29jLT5pbml0X3NlcV9udW1iZXIpIHsKKwkJCS8qIEV4
dGVuc2lvbiBvZiBjYXNlIEMuCisJCQkgKiBJZiB3ZSBoaXQgdGhpcywgdGhlbiB0aGUgcmFuZG9t
IG51bWJlcgorCQkJICogZ2VuZXJhdG9yIHJldHVybmVkIHRoZSBzYW1lIHZ0YWcgd2hlbiB3ZQor
CQkJICogZmlyc3Qgc2VudCBvdXIgSU5JVC1BQ0sgYW5kIHdoZW4gd2UgbGF0ZXIgc2VudAorCQkJ
ICogb3VyIElOSVQuIFRoZSBzaWRlIHdpdGggdGhlIHNlcSBudW1iZXJzIHRoYXQgYXJlCisJCQkg
KiBkaWZmZXJlbnQgd2lsbCBiZSB0aGUgb25lIHRoYXQgbm9ybW5hbGx5IHdvdWxkCisJCQkgKiBo
YXZlIGhpdCBjYXNlIEMuIFRoaXMgaW4gZWZmZWN0ICJleHRlbmRzIiBvdXIgdnRhZ3MKKwkJCSAq
IGluIHRoaXMgY29sbGlzaW9uIGNhc2UgdG8gYmUgNjQgYml0cy4gVGhlIHNhbWUgY29sbGlzaW9u
CisJCQkgKiBjb3VsZCBvY2N1ciBha2EgeW91IGdldCBib3RoIHZ0YWcgYW5kIHNlcSBudW1iZXIg
dGhlCisJCQkgKiBzYW1lIHR3aWNlIGluIGEgcm93Li4gYnV0IGlzIG11Y2ggbGVzcyBsaWtlbHku
IElmIGl0CisJCQkgKiBkaWQgaGFwcGVuIHRoZW4gd2Ugd291bGQgcHJvY2VlZCB0aHJvdWdoIGFu
ZCBicmluZworCQkJICogdXAgdGhlIGFzc29jLi4gd2UgbWF5IGVuZCB1cCB3aXRoIHRoZSB3cm9u
ZyBzdHJlYW0KKwkJCSAqIHNldHVwIGhvd2V2ZXIuLiB3aGljaCB3b3VsZCBiZSBiYWQuLiBidXQg
dGhlcmUgaXMKKwkJCSAqIG5vIHdheSB0byB0ZWxsLi4gdW50aWwgd2Ugc2VuZCBvbiBhIHN0cmVh
bSB0aGF0IGRvZXMKKwkJCSAqIG5vdCBleGlzdCA6LSkKKwkJCSAqLworCQkJaWYgKGhvd19pbmR4
IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQorCQkJCWFzb2MtPmNvb2tpZV9ob3dbaG93X2lu
ZHhdID0gNzsKKworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJcmV0dXJuIChOVUxMKTsK
KwkJfQorCQlpZiAoaG93X2luZHggPCBzaXplb2YoYXNvYy0+Y29va2llX2hvdykpCisJCQlhc29j
LT5jb29raWVfaG93W2hvd19pbmR4XSA9IDg7CisJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVS
X1RZUEVfSEVBUlRCRUFULCBpbnAsIHN0Y2IsIG5ldCwKKwkJICAgICAgICAgICAgICAgIFNDVFBf
RlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfMTUpOworCQlzY3RwX3N0b3BfYWxsX2Nvb2tpZV90
aW1lcnMoc3RjYik7CisJCS8qCisJCSAqIHNpbmNlIHdlIGRpZCBub3Qgc2VuZCBhIEhCIG1ha2Ug
c3VyZSB3ZSBkb24ndCBkb3VibGUKKwkJICogdGhpbmdzCisJCSAqLworCQluZXQtPmhiX3Jlc3Bv
bmRlZCA9IDE7CisJCWlmIChzdGNiLT5hc29jLnNjdHBfYXV0b2Nsb3NlX3RpY2tzICYmCisJCSAg
ICBzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19BVVRPQ0xPU0UpKSB7CisJ
CQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9BVVRPQ0xPU0UsIGlucCwgc3RjYiwK
KwkJCSAgICAgICAgICAgICAgICAgTlVMTCk7CisJCX0KKwkJYXNvYy0+bXlfcnduZCA9IG50b2hs
KGluaXRhY2tfY3AtPmluaXQuYV9yd25kKTsKKwkJaWYgKGFzb2MtPnByZV9vcGVuX3N0cmVhbXMg
PCBhc29jLT5zdHJlYW1vdXRjbnQpIHsKKwkJCWFzb2MtPnByZV9vcGVuX3N0cmVhbXMgPSBhc29j
LT5zdHJlYW1vdXRjbnQ7CisJCX0KKworCQlpZiAobnRvaGwoaW5pdF9jcC0+aW5pdC5pbml0aWF0
ZV90YWcpICE9IGFzb2MtPnBlZXJfdnRhZykgeworCQkJLyogT2sgdGhlIHBlZXIgcHJvYmFibHkg
ZGlzY2FyZGVkIG91cgorCQkJICogZGF0YSAoaWYgd2UgZWNob2VkIGEgY29va2llK2RhdGEpLiBT
byBhbnl0aGluZworCQkJICogb24gdGhlIHNlbnRfcXVldWUgc2hvdWxkIGJlIG1hcmtlZCBmb3IK
KwkJCSAqIHJldHJhbnNtaXQsIHdlIG1heSBub3QgZ2V0IHNvbWV0aGluZyB0bworCQkJICoga2lj
ayB1cyBzbyBpdCBDT1VMRCBzdGlsbCB0YWtlIGEgdGltZW91dAorCQkJICogdG8gbW92ZSB0aGVz
ZS4uIGJ1dCBpdCBjYW4ndCBodXJ0IHRvIG1hcmsgdGhlbS4KKwkJCSAqLworCisJCQlUQUlMUV9G
T1JFQUNIKGNoaywgJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJCQkJaWYg
KGNoay0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7CisJCQkJCWNoay0+c2VudCA9IFND
VFBfREFUQUdSQU1fUkVTRU5EOworCQkJCQlzY3RwX2ZsaWdodF9zaXplX2RlY3JlYXNlKGNoayk7
CisJCQkJCXNjdHBfdG90YWxfZmxpZ2h0X2RlY3JlYXNlKHN0Y2IsIGNoayk7CisJCQkJCXNjdHBf
dWNvdW50X2luY3Ioc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOworCQkJCQlzcGVj
X2ZsYWcrKzsKKwkJCQl9CisJCQl9CisJCX0KKwkJLyogcHJvY2VzcyB0aGUgSU5JVCBpbmZvIChw
ZWVyJ3MgaW5mbykgKi8KKwkJaWYgKHNjdHBfcHJvY2Vzc19pbml0KGluaXRfY3AsIHN0Y2IpIDwg
MCkgeworCQkJaWYgKGhvd19pbmR4IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQorCQkJCWFz
b2MtPmNvb2tpZV9ob3dbaG93X2luZHhdID0gOTsKKwkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVf
Y2F1c2UoU0NUUF9DQVVTRV9PVVRfT0ZfUkVTQywgIiIpOworCQkJU0NUUERCRyhTQ1RQX0RFQlVH
X0lOUFVUMSwgInNjdHBfcHJvY2Vzc19pbml0KCkgZmFpbGVkXG4iKTsKKwkJCXNjdHBfYWJvcnRf
YXNzb2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgbSwgaXBobGVuLAorCQkJICAgICAgICAg
ICAgICAgICAgICAgICBzcmMsIGRzdCwgc2gsIG9wX2VyciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJICAgICAgICAgICAgICAgICAgICAg
ICBtZmxvd3R5cGUsIG1mbG93aWQsCisjZW5kaWYKKwkJCSAgICAgICAgICAgICAgICAgICAgICAg
dnJmX2lkLCBuZXQtPnBvcnQpOworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQlpZiAoKHJldHZh
bCA9IHNjdHBfbG9hZF9hZGRyZXNzZXNfZnJvbV9pbml0KHN0Y2IsIG0sCisJCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9vZmZzZXQgKyBzaXplb2Yoc3Ry
dWN0IHNjdHBfaW5pdF9jaHVuayksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5pdGFja19vZmZzZXQsIHNyYywgZHN0LCBpbml0X3NyYywgc3RjYi0+YXNv
Yy5wb3J0KSkgPCAwKSB7CisJCQlpZiAoaG93X2luZHggPCBzaXplb2YoYXNvYy0+Y29va2llX2hv
dykpCisJCQkJYXNvYy0+Y29va2llX2hvd1tob3dfaW5keF0gPSAxMDsKKwkJCW9wX2VyciA9IHNj
dHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwK
KwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb2JsZW0gd2l0aCBhZGRyZXNzIHBh
cmFtZXRlcnMiKTsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsCisJCQkgICAgICAgICJM
b2FkIGFkZHJlc3NlcyBmcm9tIElOSVQgY2F1c2VzIGFuIGFib3J0ICVkXG4iLAorCQkJICAgICAg
ICByZXR2YWwpOworCQkJc2N0cF9hYm9ydF9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNi
LCBtLCBpcGhsZW4sCisJCQkgICAgICAgICAgICAgICAgICAgICAgIHNyYywgZHN0LCBzaCwgb3Bf
ZXJyLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisJCQkgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKKyNlbmRpZgor
CQkJICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIG5ldC0+cG9ydCk7CisJCQlyZXR1cm4g
KE5VTEwpOworCQl9CisJCWlmICgoU0NUUF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9D
T09LSUVfV0FJVCkgfHwKKwkJICAgIChTQ1RQX0dFVF9TVEFURShzdGNiKSA9PSBTQ1RQX1NUQVRF
X0NPT0tJRV9FQ0hPRUQpKSB7CisJCQkqbm90aWZpY2F0aW9uID0gU0NUUF9OT1RJRllfQVNTT0Nf
VVA7CisKKwkJCWlmICgoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFH
U19UQ1BUWVBFKSB8fAorCQkJICAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX0lOX1RDUFBPT0wpKSAmJgorCQkJICAgICghU0NUUF9JU19MSVNURU5JTkcoaW5w
KSkpIHsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KwkJCQlzdHJ1Y3Qgc29ja2V0ICpzbzsKKyNlbmRpZgorCQkJCXN0Y2ItPnNjdHBfZXAtPnNjdHBf
ZmxhZ3MgfD0gU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEOworI2lmIGRlZmluZWQoX19BUFBMRV9f
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCXNvID0gU0NUUF9JTlBfU08oc3RjYi0+
c2N0cF9lcCk7CisJCQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJ
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisJ
CQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5y
ZWZjbnQsIC0xKTsKKwkJCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQ0xPU0VE
X1NPQ0tFVCkgeworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCVNDVFBfU09DS0VU
X1VOTE9DSyhzbywgMSk7CisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJfQorI2VuZGlmCisJCQkJ
c29pc2Nvbm5lY3RlZChzdGNiLT5zY3RwX3NvY2tldCk7CisjaWYgZGVmaW5lZChfX0FQUExFX18p
ICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAx
KTsKKyNlbmRpZgorCQkJfQorCQkJaWYgKFNDVFBfR0VUX1NUQVRFKHN0Y2IpID09IFNDVFBfU1RB
VEVfQ09PS0lFX0VDSE9FRCkKKwkJCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfYWN0
aXZlZXN0YWIpOworCQkJZWxzZQorCQkJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVIzMihzY3Rwc19j
b2xsaXNpb25lc3RhYik7CisJCQlTQ1RQX1NUQVRfSU5DUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3Rh
Yik7CisJCX0gZWxzZSBpZiAoU0NUUF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9PUEVO
KSB7CisJCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfcmVzdGFydGVzdGFiKTsKKwkJ
fSBlbHNlIHsKKwkJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVIzMihzY3Rwc19jb2xsaXNpb25lc3Rh
Yik7CisJCX0KKwkJU0NUUF9TRVRfU1RBVEUoc3RjYiwgU0NUUF9TVEFURV9PUEVOKTsKKwkJaWYg
KGFzb2MtPnN0YXRlICYgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKSB7CisJCQlzY3RwX3Rp
bWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdVQVJELAorCQkJICAgICAgICAgICAg
ICAgICBzdGNiLT5zY3RwX2VwLCBzdGNiLCBOVUxMKTsKKwkJfQorCQlzY3RwX3N0b3BfYWxsX2Nv
b2tpZV90aW1lcnMoc3RjYik7CisJCXNjdHBfdG9zc19vbGRfY29va2llcyhzdGNiLCBhc29jKTsK
KwkJc2N0cF9zZW5kX2Nvb2tpZV9hY2soc3RjYik7CisJCWlmIChzcGVjX2ZsYWcpIHsKKwkJCS8q
IG9ubHkgaWYgd2UgaGF2ZSByZXRyYW5zIHNldCBkbyB3ZSBkbyB0aGlzLiBXaGF0CisJCQkgKiB0
aGlzIGNhbGwgZG9lcyBpcyBnZXQgb25seSB0aGUgQ09PS0lFLUFDSyBvdXQKKwkJCSAqIGFuZCB0
aGVuIHdoZW4gd2UgcmV0dXJuIHRoZSBub3JtYWwgY2FsbCB0bworCQkJICogc2N0cF9jaHVua19v
dXRwdXQgd2lsbCBnZXQgdGhlIHJldHJhbnMgb3V0CisJCQkgKiBiZWhpbmQgdGhpcy4KKwkJCSAq
LworCQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fQ09PS0lF
X0FDSywgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJfQorCQlpZiAoaG93X2luZHggPCBzaXplb2Yo
YXNvYy0+Y29va2llX2hvdykpCisJCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDExOwor
CisJCXJldHVybiAoc3RjYik7CisJfQorCWlmICgobnRvaGwoaW5pdGFja19jcC0+aW5pdC5pbml0
aWF0ZV90YWcpICE9IGFzb2MtPm15X3Z0YWcgJiYKKwkgICAgIG50b2hsKGluaXRfY3AtPmluaXQu
aW5pdGlhdGVfdGFnKSAhPSBhc29jLT5wZWVyX3Z0YWcpICYmCisJICAgIGNvb2tpZS0+dGllX3Rh
Z19teV92dGFnID09IGFzb2MtPm15X3Z0YWdfbm9uY2UgJiYKKwkgICAgY29va2llLT50aWVfdGFn
X3BlZXJfdnRhZyA9PSBhc29jLT5wZWVyX3Z0YWdfbm9uY2UgJiYKKwkgICAgY29va2llLT50aWVf
dGFnX3BlZXJfdnRhZyAhPSAwKSB7CisJCXN0cnVjdCBzY3RwYXNvY2hlYWQgKmhlYWQ7CisjaWYg
ZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCXN0cnVjdCBz
b2NrZXQgKnNvOworI2VuZGlmCisKKwkJaWYgKGFzb2MtPnBlZXJfc3VwcG9ydHNfbmF0KSB7CisJ
CQlzdHJ1Y3Qgc2N0cF90Y2IgKmxvY2FsX3N0Y2I7CisKKwkJCS8qIFRoaXMgaXMgYSBncm9zcyBn
cm9zcyBoYWNrLgorCQkJICogSnVzdCBjYWxsIHRoZSBjb29raWVfbmV3IGNvZGUgc2luY2Ugd2UK
KwkJCSAqIGFyZSBhbGxvd2luZyBhIGR1cGxpY2F0ZSBhc3NvY2lhdGlvbi4KKwkJCSAqIEkgaG9w
ZSB0aGlzIHdvcmtzLi4uCisJCQkgKi8KKwkJCWxvY2FsX3N0Y2IgPSBzY3RwX3Byb2Nlc3NfY29v
a2llX25ldyhtLCBpcGhsZW4sIG9mZnNldCwgc3JjLCBkc3QsCisJCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2gsIGNvb2tpZSwgY29va2llX2xlbiwKKwkJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnAsIG5ldHAsIGluaXRfc3JjLG5vdGlmaWNh
dGlvbiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX3NraXBw
ZWQsIGF1dGhfb2Zmc2V0LCBhdXRoX2xlbiwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKKyNlbmRpZgorCQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7CisJCQlpZiAobG9jYWxfc3RjYiA9PSBO
VUxMKSB7CisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJfQorCQkJcmV0dXJuIChsb2Nh
bF9zdGNiKTsKKwkJfQorCQkvKgorCQkgKiBjYXNlIEEgaW4gU2VjdGlvbiA1LjIuNCBUYWJsZSAy
OiBYWE1NIChwZWVyIHJlc3RhcnRlZCkKKwkJICovCisJCS8qIHRlbXAgY29kZSAqLworCQlpZiAo
aG93X2luZHggPCBzaXplb2YoYXNvYy0+Y29va2llX2hvdykpCisJCQlhc29jLT5jb29raWVfaG93
W2hvd19pbmR4XSA9IDEyOworCQlzY3RwX3N0b3BfYXNzb2NpYXRpb25fdGltZXJzKHN0Y2IsIGZh
bHNlKTsKKwkJLyogbm90aWZ5IHVwcGVyIGxheWVyICovCisJCSpub3RpZmljYXRpb24gPSBTQ1RQ
X05PVElGWV9BU1NPQ19SRVNUQVJUOworCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZj
bnQsIDEpOworCQlpZiAoKFNDVFBfR0VUX1NUQVRFKHN0Y2IpICE9IFNDVFBfU1RBVEVfT1BFTikg
JiYKKwkJICAgIChTQ1RQX0dFVF9TVEFURShzdGNiKSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JF
Q0VJVkVEKSAmJgorCQkgICAgKFNDVFBfR0VUX1NUQVRFKHN0Y2IpICE9IFNDVFBfU1RBVEVfU0hV
VERPV05fU0VOVCkpIHsKKwkJCVNDVFBfU1RBVF9JTkNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFi
KTsKKwkJfQorCQlpZiAoU0NUUF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9PUEVOKSB7
CisJCQlTQ1RQX1NUQVRfSU5DUl9HQVVHRTMyKHNjdHBzX3Jlc3RhcnRlc3RhYik7CisJCX0gZWxz
ZSBpZiAoU0NUUF9HRVRfU1RBVEUoc3RjYikgIT0gU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKSB7
CisJCQlTQ1RQX1NUQVRfSU5DUl9HQVVHRTMyKHNjdHBzX2NvbGxpc2lvbmVzdGFiKTsKKwkJfQor
CQlpZiAoYXNvYy0+c3RhdGUgJiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcpIHsKKwkJCVND
VFBfU0VUX1NUQVRFKHN0Y2IsIFNDVFBfU1RBVEVfT1BFTik7CisJCQlzY3RwX3RpbWVyX3N0YXJ0
KFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdVQVJELAorCQkJICAgICAgICAgICAgICAgICBzdGNi
LT5zY3RwX2VwLCBzdGNiLCBOVUxMKTsKKworCQl9IGVsc2UgaWYgKFNDVFBfR0VUX1NUQVRFKHN0
Y2IpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCkgeworCQkJLyogbW92ZSB0byBPUEVOIHN0
YXRlLCBpZiBub3QgaW4gU0hVVERPV05fU0VOVCAqLworCQkJU0NUUF9TRVRfU1RBVEUoc3RjYiwg
U0NUUF9TVEFURV9PUEVOKTsKKwkJfQorCQlpZiAoYXNvYy0+cHJlX29wZW5fc3RyZWFtcyA8IGFz
b2MtPnN0cmVhbW91dGNudCkgeworCQkJYXNvYy0+cHJlX29wZW5fc3RyZWFtcyA9IGFzb2MtPnN0
cmVhbW91dGNudDsKKwkJfQorCQlhc29jLT5pbml0X3NlcV9udW1iZXIgPSBudG9obChpbml0YWNr
X2NwLT5pbml0LmluaXRpYWxfdHNuKTsKKwkJYXNvYy0+c2VuZGluZ19zZXEgPSBhc29jLT5hc2Nv
bmZfc2VxX291dCA9IGFzb2MtPnN0cl9yZXNldF9zZXFfb3V0ID0gYXNvYy0+aW5pdF9zZXFfbnVt
YmVyOworCQlhc29jLT5hc2NvbmZfc2VxX291dF9hY2tlZCA9IGFzb2MtPmFzY29uZl9zZXFfb3V0
IC0gMTsKKwkJYXNvYy0+YXNjb25mX3NlcV9pbiA9IGFzb2MtPmxhc3RfYWNrZWRfc2VxID0gYXNv
Yy0+aW5pdF9zZXFfbnVtYmVyIC0gMTsKKwkJYXNvYy0+c3RyX3Jlc2V0X3NlcV9pbiA9IGFzb2Mt
PmluaXRfc2VxX251bWJlcjsKKwkJYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQgPSBhc29j
LT5sYXN0X2Fja2VkX3NlcTsKKwkJYXNvYy0+c2VuZF9zYWNrID0gMTsKKwkJYXNvYy0+ZGF0YV9w
a3RzX3NlZW4gPSAwOworCQlhc29jLT5sYXN0X2RhdGFfY2h1bmtfZnJvbSA9IE5VTEw7CisJCWFz
b2MtPmxhc3RfY29udHJvbF9jaHVua19mcm9tID0gTlVMTDsKKwkJYXNvYy0+bGFzdF9uZXRfY210
X3NlbmRfc3RhcnRlZCA9IE5VTEw7CisJCWlmIChhc29jLT5tYXBwaW5nX2FycmF5KSB7CisJCQlt
ZW1zZXQoYXNvYy0+bWFwcGluZ19hcnJheSwgMCwKKwkJCSAgICAgICBhc29jLT5tYXBwaW5nX2Fy
cmF5X3NpemUpOworCQl9CisJCWlmIChhc29jLT5ucl9tYXBwaW5nX2FycmF5KSB7CisJCQltZW1z
ZXQoYXNvYy0+bnJfbWFwcGluZ19hcnJheSwgMCwKKwkJCSAgICBhc29jLT5tYXBwaW5nX2FycmF5
X3NpemUpOworCQl9CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKyNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJc28gPSBTQ1RQX0lOUF9TTyhzdGNi
LT5zY3RwX2VwKTsKKwkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisjZW5kaWYKKwkJU0NUUF9J
TlBfSU5GT19XTE9DSygpOworCQlTQ1RQX0lOUF9XTE9DSyhzdGNiLT5zY3RwX2VwKTsKKwkJU0NU
UF9UQ0JfTE9DSyhzdGNiKTsKKwkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAt
MSk7CisJCS8qIHNlbmQgdXAgYWxsIHRoZSBkYXRhICovCisJCVNDVFBfVENCX1NFTkRfTE9DSyhz
dGNiKTsKKworCQlzY3RwX3JlcG9ydF9hbGxfb3V0Ym91bmQoc3RjYiwgMCwgU0NUUF9TT19MT0NL
RUQpOworCQlmb3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7IGkrKykgewor
CQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLmNodW5rc19vbl9xdWV1ZXMgPSAwOworI2lmIGRlZmlu
ZWQoU0NUUF9ERVRBSUxFRF9TVFJfU1RBVFMpCisJCQlmb3IgKGogPSAwOyBqIDwgU0NUUF9QUl9T
Q1RQX01BWCArIDE7IGorKykgeworCQkJCWFzb2MtPnN0cm1vdXRbaV0uYWJhbmRvbmVkX3NlbnRb
al0gPSAwOworCQkJCWFzb2MtPnN0cm1vdXRbaV0uYWJhbmRvbmVkX3Vuc2VudFtqXSA9IDA7CisJ
CQl9CisjZWxzZQorCQkJYXNvYy0+c3RybW91dFtpXS5hYmFuZG9uZWRfc2VudFswXSA9IDA7CisJ
CQlhc29jLT5zdHJtb3V0W2ldLmFiYW5kb25lZF91bnNlbnRbMF0gPSAwOworI2VuZGlmCisJCQlz
dGNiLT5hc29jLnN0cm1vdXRbaV0ubmV4dF9taWRfb3JkZXJlZCA9IDA7CisJCQlzdGNiLT5hc29j
LnN0cm1vdXRbaV0ubmV4dF9taWRfdW5vcmRlcmVkID0gMDsKKwkJCXN0Y2ItPmFzb2Muc3RybW91
dFtpXS5zaWQgPSBpOworCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLmxhc3RfbXNnX2luY29tcGxl
dGUgPSAwOworCQl9CisJCVRBSUxRX0ZPUkVBQ0hfU0FGRShzdHJyc3QsICZhc29jLT5yZXNldEhl
YWQsIG5leHRfcmVzcCwgbnN0cnJzdCkgeworCQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5yZXNldEhl
YWQsIHN0cnJzdCwgbmV4dF9yZXNwKTsKKwkJCVNDVFBfRlJFRShzdHJyc3QsIFNDVFBfTV9TVFJF
U0VUKTsKKwkJfQorCQlUQUlMUV9GT1JFQUNIX1NBRkUoc3EsICZhc29jLT5wZW5kaW5nX3JlcGx5
X3F1ZXVlLCBuZXh0LCBuc3EpIHsKKwkJCVRBSUxRX1JFTU9WRSgmYXNvYy0+cGVuZGluZ19yZXBs
eV9xdWV1ZSwgc3EsIG5leHQpOworCQkJaWYgKHNxLT5kYXRhKSB7CisJCQkJc2N0cF9tX2ZyZWVt
KHNxLT5kYXRhKTsKKwkJCQlzcS0+ZGF0YSA9IE5VTEw7CisJCQl9CisJCQlzY3RwX2ZyZWVfcmVt
b3RlX2FkZHIoc3EtPndob0Zyb20pOworCQkJc3EtPndob0Zyb20gPSBOVUxMOworCQkJc3EtPnN0
Y2IgPSBOVUxMOworCQkJc2N0cF9mcmVlX2FfcmVhZHEoc3RjYiwgc3EpOworCQl9CisJCVRBSUxR
X0ZPUkVBQ0hfU0FGRShjaGssICZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsIHNjdHBfbmV4dCwg
bmNoaykgeworCQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsIGNoaywg
c2N0cF9uZXh0KTsKKwkJCWlmIChjaGstPmRhdGEpIHsKKwkJCQlzY3RwX21fZnJlZW0oY2hrLT5k
YXRhKTsKKwkJCQljaGstPmRhdGEgPSBOVUxMOworCQkJfQorCQkJaWYgKGNoay0+aG9sZHNfa2V5
X3JlZikKKwkJCQlzY3RwX2F1dGhfa2V5X3JlbGVhc2Uoc3RjYiwgY2hrLT5hdXRoX2tleWlkLCBT
Q1RQX1NPX0xPQ0tFRCk7CisJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoY2hrLT53aG9Ubyk7CisJ
CQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9jaHVuayksIGNoayk7CisJ
CQlTQ1RQX0RFQ1JfQ0hLX0NPVU5UKCk7CisJCX0KKwkJYXNvYy0+Y3RybF9xdWV1ZV9jbnQgPSAw
OworCQlhc29jLT5zdHJfcmVzZXQgPSBOVUxMOworCQlhc29jLT5zdHJlYW1fcmVzZXRfb3V0c3Rh
bmRpbmcgPSAwOworCQlUQUlMUV9GT1JFQUNIX1NBRkUoY2hrLCAmYXNvYy0+YXNjb25mX3NlbmRf
cXVldWUsIHNjdHBfbmV4dCwgbmNoaykgeworCQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5hc2NvbmZf
c2VuZF9xdWV1ZSwgY2hrLCBzY3RwX25leHQpOworCQkJaWYgKGNoay0+ZGF0YSkgeworCQkJCXNj
dHBfbV9mcmVlbShjaGstPmRhdGEpOworCQkJCWNoay0+ZGF0YSA9IE5VTEw7CisJCQl9CisJCQlp
ZiAoY2hrLT5ob2xkc19rZXlfcmVmKQorCQkJCXNjdHBfYXV0aF9rZXlfcmVsZWFzZShzdGNiLCBj
aGstPmF1dGhfa2V5aWQsIFNDVFBfU09fTE9DS0VEKTsKKwkJCXNjdHBfZnJlZV9yZW1vdGVfYWRk
cihjaGstPndob1RvKTsKKwkJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25l
X2NodW5rKSwgY2hrKTsKKwkJCVNDVFBfREVDUl9DSEtfQ09VTlQoKTsKKwkJfQorCQlUQUlMUV9G
T1JFQUNIX1NBRkUoYXBhcmFtLCAmYXNvYy0+YXNjb25mX3F1ZXVlLCBuZXh0LCBuYXBhcmFtKSB7
CisJCQlUQUlMUV9SRU1PVkUoJmFzb2MtPmFzY29uZl9xdWV1ZSwgYXBhcmFtLCBuZXh0KTsKKwkJ
CVNDVFBfRlJFRShhcGFyYW0sU0NUUF9NX0FTQ19BRERSKTsKKwkJfQorCQlUQUlMUV9GT1JFQUNI
X1NBRkUoYWFjaywgJmFzb2MtPmFzY29uZl9hY2tfc2VudCwgbmV4dCwgbmFhY2spIHsKKwkJCVRB
SUxRX1JFTU9WRSgmYXNvYy0+YXNjb25mX2Fja19zZW50LCBhYWNrLCBuZXh0KTsKKwkJCWlmIChh
YWNrLT5kYXRhICE9IE5VTEwpIHsKKwkJCQlzY3RwX21fZnJlZW0oYWFjay0+ZGF0YSk7CisJCQl9
CisJCQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9hc2NvbmZfYWNrKSwg
YWFjayk7CisJCX0KKworCQkvKiBwcm9jZXNzIHRoZSBJTklULUFDSyBpbmZvIChteSBpbmZvKSAq
LworCQlhc29jLT5teV92dGFnID0gbnRvaGwoaW5pdGFja19jcC0+aW5pdC5pbml0aWF0ZV90YWcp
OworCQlhc29jLT5teV9yd25kID0gbnRvaGwoaW5pdGFja19jcC0+aW5pdC5hX3J3bmQpOworCisJ
CS8qIHB1bGwgZnJvbSB2dGFnIGhhc2ggKi8KKwkJTElTVF9SRU1PVkUoc3RjYiwgc2N0cF9hc29j
cyk7CisJCS8qIHJlLWluc2VydCB0byBuZXcgdnRhZyBwb3NpdGlvbiAqLworCQloZWFkID0gJlND
VFBfQkFTRV9JTkZPKHNjdHBfYXNvY2hhc2gpW1NDVFBfUENCSEFTSF9BU09DKHN0Y2ItPmFzb2Mu
bXlfdnRhZywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTQ1RQX0JBU0VfSU5GTyhoYXNoYXNvY21hcmspKV07CisJCS8qCisJCSAqIHB1
dCBpdCBpbiB0aGUgYnVja2V0IGluIHRoZSB2dGFnIGhhc2ggb2YgYXNzb2MncyBmb3IgdGhlCisJ
CSAqIHN5c3RlbQorCQkgKi8KKwkJTElTVF9JTlNFUlRfSEVBRChoZWFkLCBzdGNiLCBzY3RwX2Fz
b2NzKTsKKworCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKKwkJU0NUUF9JTlBfV1VOTE9D
SyhzdGNiLT5zY3RwX2VwKTsKKwkJU0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7CisjaWYgZGVmaW5l
ZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCVNDVFBfU09DS0VUX1VO
TE9DSyhzbywgMSk7CisjZW5kaWYKKwkJYXNvYy0+dG90YWxfZmxpZ2h0ID0gMDsKKwkJYXNvYy0+
dG90YWxfZmxpZ2h0X2NvdW50ID0gMDsKKwkJLyogcHJvY2VzcyB0aGUgSU5JVCBpbmZvIChwZWVy
J3MgaW5mbykgKi8KKwkJaWYgKHNjdHBfcHJvY2Vzc19pbml0KGluaXRfY3AsIHN0Y2IpIDwgMCkg
eworCQkJaWYgKGhvd19pbmR4IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQorCQkJCWFzb2Mt
PmNvb2tpZV9ob3dbaG93X2luZHhdID0gMTM7CisJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2Nh
dXNlKFNDVFBfQ0FVU0VfT1VUX09GX1JFU0MsICIiKTsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19J
TlBVVDEsICJzY3RwX3Byb2Nlc3NfaW5pdCgpIGZhaWxlZFxuIik7CisJCQlzY3RwX2Fib3J0X2Fz
c29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG0sIGlwaGxlbiwKKwkJCSAgICAgICAgICAg
ICAgICAgICAgICAgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCSAgICAgICAgICAgICAgICAgICAgICAg
bWZsb3d0eXBlLCBtZmxvd2lkLAorI2VuZGlmCisJCQkgICAgICAgICAgICAgICAgICAgICAgIHZy
Zl9pZCwgbmV0LT5wb3J0KTsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJLyoKKwkJICogc2lu
Y2Ugd2UgZGlkIG5vdCBzZW5kIGEgSEIgbWFrZSBzdXJlIHdlIGRvbid0IGRvdWJsZQorCQkgKiB0
aGluZ3MKKwkJICovCisJCW5ldC0+aGJfcmVzcG9uZGVkID0gMTsKKworCQlpZiAoKHJldHZhbCA9
IHNjdHBfbG9hZF9hZGRyZXNzZXNfZnJvbV9pbml0KHN0Y2IsIG0sCisJCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9vZmZzZXQgKyBzaXplb2Yoc3RydWN0
IHNjdHBfaW5pdF9jaHVuayksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5pdGFja19vZmZzZXQsIHNyYywgZHN0LCBpbml0X3NyYywgc3RjYi0+YXNvYy5w
b3J0KSkgPCAwKSB7CisJCQlpZiAoaG93X2luZHggPCBzaXplb2YoYXNvYy0+Y29va2llX2hvdykp
CisJCQkJYXNvYy0+Y29va2llX2hvd1tob3dfaW5keF0gPSAxNDsKKwkJCW9wX2VyciA9IHNjdHBf
Z2VuZXJhdGVfY2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKKwkJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb2JsZW0gd2l0aCBhZGRyZXNzIHBhcmFt
ZXRlcnMiKTsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsCisJCQkgICAgICAgICJMb2Fk
IGFkZHJlc3NlcyBmcm9tIElOSVQgY2F1c2VzIGFuIGFib3J0ICVkXG4iLAorCQkJICAgICAgICBy
ZXR2YWwpOworCQkJc2N0cF9hYm9ydF9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBt
LCBpcGhsZW4sCisJCQkgICAgICAgICAgICAgICAgICAgICAgIHNyYywgZHN0LCBzaCwgb3BfZXJy
LAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJ
CQkgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKKyNlbmRpZgorCQkJ
ICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIG5ldC0+cG9ydCk7CisJCQlyZXR1cm4gKE5V
TEwpOworCQl9CisJCS8qIHJlc3BvbmQgd2l0aCBhIENPT0tJRS1BQ0sgKi8KKwkJc2N0cF9zZW5k
X2Nvb2tpZV9hY2soc3RjYik7CisJCWlmIChob3dfaW5keCA8IHNpemVvZihhc29jLT5jb29raWVf
aG93KSkKKwkJCWFzb2MtPmNvb2tpZV9ob3dbaG93X2luZHhdID0gMTU7CisJCWlmIChzY3RwX2lz
X2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19BVVRPQ0xPU0UpICYmCisJCSAgICAoYXNv
Yy0+c2N0cF9hdXRvY2xvc2VfdGlja3MgPiAwKSkgeworCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQ
X1RJTUVSX1RZUEVfQVVUT0NMT1NFLCBpbnAsIHN0Y2IsIE5VTEwpOworCQl9CisJCXJldHVybiAo
c3RjYik7CisJfQorCWlmIChob3dfaW5keCA8IHNpemVvZihhc29jLT5jb29raWVfaG93KSkKKwkJ
YXNvYy0+Y29va2llX2hvd1tob3dfaW5keF0gPSAxNjsKKwkvKiBhbGwgb3RoZXIgY2FzZXMuLi4g
Ki8KKwlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJcmV0dXJuIChOVUxMKTsKK30KKworLyoKKyAq
IGhhbmRsZSBhIHN0YXRlIGNvb2tpZSBmb3IgYSBuZXcgYXNzb2NpYXRpb24gbTogaW5wdXQgcGFj
a2V0IG1idWYgY2hhaW4tLQorICogYXNzdW1lcyBhIHB1bGx1cCBvbiBJUC9TQ1RQL0NPT0tJRS1F
Q0hPIGNodW5rIG5vdGU6IHRoaXMgaXMgYSAic3BsaXQiIG1idWYKKyAqIGFuZCB0aGUgY29va2ll
IHNpZ25hdHVyZSBkb2VzIG5vdCBleGlzdCBvZmZzZXQ6IG9mZnNldCBpbnRvIG1idWYgdG8gdGhl
CisgKiBjb29raWUtZWNobyBjaHVuayBsZW5ndGg6IGxlbmd0aCBvZiB0aGUgY29va2llIGNodW5r
IHRvOiB3aGVyZSB0aGUgaW5pdAorICogd2FzIGZyb20gcmV0dXJucyBhIG5ldyBUQ0IKKyAqLwor
c3RhdGljIHN0cnVjdCBzY3RwX3RjYiAqCitzY3RwX3Byb2Nlc3NfY29va2llX25ldyhzdHJ1Y3Qg
bWJ1ZiAqbSwgaW50IGlwaGxlbiwgaW50IG9mZnNldCwKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNy
Yywgc3RydWN0IHNvY2thZGRyICpkc3QsCisgICAgc3RydWN0IHNjdHBoZHIgKnNoLCBzdHJ1Y3Qg
c2N0cF9zdGF0ZV9jb29raWUgKmNvb2tpZSwgaW50IGNvb2tpZV9sZW4sCisgICAgc3RydWN0IHNj
dHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfbmV0cyAqKm5ldHAsCisgICAgc3RydWN0IHNvY2th
ZGRyICppbml0X3NyYywgaW50ICpub3RpZmljYXRpb24sCisgICAgaW50IGF1dGhfc2tpcHBlZCwg
dWludDMyX3QgYXV0aF9vZmZzZXQsIHVpbnQzMl90IGF1dGhfbGVuLAorI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisgICAgdWludDhfdCBtZmxvd3R5
cGUsIHVpbnQzMl90IG1mbG93aWQsCisjZW5kaWYKKyAgICB1aW50MzJfdCB2cmZfaWQsIHVpbnQx
Nl90IHBvcnQpCit7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCXN0cnVjdCBzY3RwX2luaXRf
Y2h1bmsgKmluaXRfY3AsIGluaXRfYnVmOworCXN0cnVjdCBzY3RwX2luaXRfYWNrX2NodW5rICpp
bml0YWNrX2NwLCBpbml0YWNrX2J1ZjsKKwl1bmlvbiBzY3RwX3NvY2tzdG9yZSBzdG9yZTsKKwlz
dHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlpbnQgaW5pdF9vZmZzZXQsIGluaXRhY2tf
b2Zmc2V0LCBpbml0YWNrX2xpbWl0OworCWludCByZXR2YWw7CisJaW50IGVycm9yID0gMDsKKwl1
aW50OF90IGF1dGhfY2h1bmtfYnVmW1NDVFBfQ0hVTktfQlVGRkVSX1NJWkVdOworI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXN0cnVjdCBzb2NrZXQg
KnNvOworCisJc28gPSBTQ1RQX0lOUF9TTyhpbnApOworI2VuZGlmCisKKwkvKgorCSAqIGZpbmQg
YW5kIHZhbGlkYXRlIHRoZSBJTklUIGNodW5rIGluIHRoZSBjb29raWUgKHBlZXIncyBpbmZvKSB0
aGUKKwkgKiBJTklUIHNob3VsZCBzdGFydCBhZnRlciB0aGUgY29va2llLWVjaG8gaGVhZGVyIHN0
cnVjdCAoY2h1bmsKKwkgKiBoZWFkZXIsIHN0YXRlIGNvb2tpZSBoZWFkZXIgc3RydWN0KQorCSAq
LworCWluaXRfb2Zmc2V0ID0gb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2Nvb2tpZV9lY2hv
X2NodW5rKTsKKwlpbml0X2NwID0gKHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKikKKwkgICAgc2N0
cF9tX2dldHB0cihtLCBpbml0X29mZnNldCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfY2h1bmsp
LAorCSAgICAodWludDhfdCAqKSAmIGluaXRfYnVmKTsKKwlpZiAoaW5pdF9jcCA9PSBOVUxMKSB7
CisJCS8qIGNvdWxkIG5vdCBwdWxsIGEgSU5JVCBjaHVuayBpbiBjb29raWUgKi8KKwkJU0NUUERC
RyhTQ1RQX0RFQlVHX0lOUFVUMSwKKwkJCSJwcm9jZXNzX2Nvb2tpZV9uZXc6IGNvdWxkIG5vdCBw
dWxsIElOSVQgY2h1bmsgaGRyXG4iKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWYgKGluaXRf
Y3AtPmNoLmNodW5rX3R5cGUgIT0gU0NUUF9JTklUSUFUSU9OKSB7CisJCVNDVFBEQkcoU0NUUF9E
RUJVR19JTlBVVDEsICJIVUg/IHByb2Nlc3NfY29va2llX25ldzogY291bGQgbm90IGZpbmQgSU5J
VCBjaHVuayFcbiIpOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlpbml0YWNrX29mZnNldCA9IGlu
aXRfb2Zmc2V0ICsgU0NUUF9TSVpFMzIobnRvaHMoaW5pdF9jcC0+Y2guY2h1bmtfbGVuZ3RoKSk7
CisJLyoKKwkgKiBmaW5kIGFuZCB2YWxpZGF0ZSB0aGUgSU5JVC1BQ0sgY2h1bmsgaW4gdGhlIGNv
b2tpZSAobXkgaW5mbykgdGhlCisJICogSU5JVC1BQ0sgZm9sbG93cyB0aGUgSU5JVCBjaHVuawor
CSAqLworCWluaXRhY2tfY3AgPSAoc3RydWN0IHNjdHBfaW5pdF9hY2tfY2h1bmsgKikKKwkgICAg
c2N0cF9tX2dldHB0cihtLCBpbml0YWNrX29mZnNldCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRf
YWNrX2NodW5rKSwKKwkgICAgKHVpbnQ4X3QgKikgJiBpbml0YWNrX2J1Zik7CisJaWYgKGluaXRh
Y2tfY3AgPT0gTlVMTCkgeworCQkvKiBjb3VsZCBub3QgcHVsbCBJTklULUFDSyBjaHVuayBpbiBj
b29raWUgKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMSwgInByb2Nlc3NfY29va2llX25l
dzogY291bGQgbm90IHB1bGwgSU5JVC1BQ0sgY2h1bmsgaGRyXG4iKTsKKwkJcmV0dXJuIChOVUxM
KTsKKwl9CisJaWYgKGluaXRhY2tfY3AtPmNoLmNodW5rX3R5cGUgIT0gU0NUUF9JTklUSUFUSU9O
X0FDSykgeworCQlyZXR1cm4gKE5VTEwpOworCX0KKwkvKgorCSAqIE5PVEU6IFdlIGNhbid0IHVz
ZSB0aGUgSU5JVF9BQ0sncyBjaGtfbGVuZ3RoIHRvIGRldGVybWluZSB0aGUKKwkgKiAiaW5pdGFj
a19saW1pdCIgdmFsdWUuICBUaGlzIGlzIGJlY2F1c2UgdGhlIGNoa19sZW5ndGggZmllbGQKKwkg
KiBpbmNsdWRlcyB0aGUgbGVuZ3RoIG9mIHRoZSBjb29raWUsIGJ1dCB0aGUgY29va2llIGlzIG9t
aXR0ZWQgd2hlbgorCSAqIHRoZSBJTklUIGFuZCBJTklUX0FDSyBhcmUgdGFja2VkIG9udG8gdGhl
IGNvb2tpZS4uLgorCSAqLworCWluaXRhY2tfbGltaXQgPSBvZmZzZXQgKyBjb29raWVfbGVuOwor
CisJLyoKKwkgKiBub3cgdGhhdCB3ZSBrbm93IHRoZSBJTklUL0lOSVQtQUNLIGFyZSBpbiBwbGFj
ZSwgY3JlYXRlIGEgbmV3IFRDQgorCSAqIGFuZCBwb3BsdWF0ZQorCSAqLworCisJLyoKKwkgKiBI
ZXJlIHdlIGRvIGEgdHJpY2ssIHdlIHNldCBpbiBOVUxMIGZvciB0aGUgcHJvYy90aHJlYWQgYXJn
dW1lbnQuIFdlCisJICogZG8gdGhpcyBzaW5jZSBpbiBlZmZlY3Qgd2Ugb25seSB1c2UgdGhlIHAg
YXJndW1lbnQgd2hlbgorCSAqIHRoZSBzb2NrZXQgaXMgdW5ib3VuZCBhbmQgd2UgbXVzdCBkbyBh
biBpbXBsaWNpdCBiaW5kLgorCSAqIFNpbmNlIHdlIGFyZSBnZXR0aW5nIGEgY29va2llLCB3ZSBj
YW5ub3QgYmUgdW5ib3VuZC4KKwkgKi8KKwlzdGNiID0gc2N0cF9hbG9jX2Fzc29jKGlucCwgaW5p
dF9zcmMsICZlcnJvciwKKwkgICAgICAgICAgICAgICAgICAgICAgIG50b2hsKGluaXRhY2tfY3At
PmluaXQuaW5pdGlhdGVfdGFnKSwgdnJmX2lkLAorCSAgICAgICAgICAgICAgICAgICAgICAgbnRv
aHMoaW5pdGFja19jcC0+aW5pdC5udW1fb3V0Ym91bmRfc3RyZWFtcyksCisJICAgICAgICAgICAg
ICAgICAgICAgICBwb3J0LAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisJICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHRocmVhZCAqKU5V
TEwsCisjZWxpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkg
ICAgICAgICAgICAgICAgICAgICAgIChQS1RIUkVBRClOVUxMLAorI2Vsc2UKKwkgICAgICAgICAg
ICAgICAgICAgICAgIChzdHJ1Y3QgcHJvYyAqKU5VTEwsCisjZW5kaWYKKwkgICAgICAgICAgICAg
ICAgICAgICAgIFNDVFBfRE9OVF9JTklUSUFMSVpFX0FVVEhfUEFSQU1TKTsKKwlpZiAoc3RjYiA9
PSBOVUxMKSB7CisJCXN0cnVjdCBtYnVmICpvcF9lcnI7CisKKwkJLyogbWVtb3J5IHByb2JsZW0/
ICovCisJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsCisJCQkicHJvY2Vzc19jb29raWVfbmV3
OiBubyByb29tIGZvciBhbm90aGVyIFRDQiFcbiIpOworCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRl
X2NhdXNlKFNDVFBfQ0FVU0VfT1VUX09GX1JFU0MsICIiKTsKKwkJc2N0cF9hYm9ydF9hc3NvY2lh
dGlvbihpbnAsIChzdHJ1Y3Qgc2N0cF90Y2IgKilOVUxMLCBtLCBpcGhsZW4sCisJCSAgICAgICAg
ICAgICAgICAgICAgICAgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJICAgICAgICAgICAgICAgICAgICAg
ICBtZmxvd3R5cGUsIG1mbG93aWQsCisjZW5kaWYKKwkJICAgICAgICAgICAgICAgICAgICAgICB2
cmZfaWQsIHBvcnQpOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlhc29jID0gJnN0Y2ItPmFzb2M7
CisJLyogZ2V0IHNjb3BlIHZhcmlhYmxlcyBvdXQgb2YgY29va2llICovCisJYXNvYy0+c2NvcGUu
aXB2NF9sb2NhbF9zY29wZSA9IGNvb2tpZS0+aXB2NF9zY29wZTsKKwlhc29jLT5zY29wZS5zaXRl
X3Njb3BlID0gY29va2llLT5zaXRlX3Njb3BlOworCWFzb2MtPnNjb3BlLmxvY2FsX3Njb3BlID0g
Y29va2llLT5sb2NhbF9zY29wZTsKKwlhc29jLT5zY29wZS5sb29wYmFja19zY29wZSA9IGNvb2tp
ZS0+bG9vcGJhY2tfc2NvcGU7CisKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaWYgKChh
c29jLT5zY29wZS5pcHY0X2FkZHJfbGVnYWwgIT0gY29va2llLT5pcHY0X2FkZHJfbGVnYWwpIHx8
CisJICAgIChhc29jLT5zY29wZS5pcHY2X2FkZHJfbGVnYWwgIT0gY29va2llLT5pcHY2X2FkZHJf
bGVnYWwpIHx8CisJICAgIChhc29jLT5zY29wZS5jb25uX2FkZHJfbGVnYWwgIT0gY29va2llLT5j
b25uX2FkZHJfbGVnYWwpKSB7CisjZWxzZQorCWlmICgoYXNvYy0+c2NvcGUuaXB2NF9hZGRyX2xl
Z2FsICE9IGNvb2tpZS0+aXB2NF9hZGRyX2xlZ2FsKSB8fAorCSAgICAoYXNvYy0+c2NvcGUuaXB2
Nl9hZGRyX2xlZ2FsICE9IGNvb2tpZS0+aXB2Nl9hZGRyX2xlZ2FsKSkgeworI2VuZGlmCisJCXN0
cnVjdCBtYnVmICpvcF9lcnI7CisKKwkJLyoKKwkJICogSG91c3RvbiB3ZSBoYXZlIGEgcHJvYmxl
bS4gVGhlIEVQIGNoYW5nZWQgd2hpbGUgdGhlCisJCSAqIGNvb2tpZSB3YXMgaW4gZmxpZ2h0LiBP
bmx5IHJlY291cnNlIGlzIHRvIGFib3J0IHRoZQorCQkgKiBhc3NvY2lhdGlvbi4KKwkJICovCisJ
CW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9PVVRfT0ZfUkVTQywgIiIp
OworCQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKGlucCwgKHN0cnVjdCBzY3RwX3RjYiAqKU5VTEws
IG0sIGlwaGxlbiwKKwkJCQkgICAgICAgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJICAgICAgICAgICAg
ICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCisjZW5kaWYKKwkJICAgICAgICAgICAgICAg
ICAgICAgICB2cmZfaWQsIHBvcnQpOworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQorCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEp
OworCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOwor
CQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29j
LnJlZmNudCwgMSk7CisjZW5kaWYKKwkJKHZvaWQpc2N0cF9mcmVlX2Fzc29jKGlucCwgc3RjYiwg
U0NUUF9OT1JNQUxfUFJPQywKKwkJCQkgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBf
TE9DXzE4KTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKyNlbmRpZgorCQlyZXR1cm4gKE5VTEwp
OworCX0KKwkvKiBwcm9jZXNzIHRoZSBJTklULUFDSyBpbmZvIChteSBpbmZvKSAqLworCWFzb2Mt
Pm15X3Z0YWcgPSBudG9obChpbml0YWNrX2NwLT5pbml0LmluaXRpYXRlX3RhZyk7CisJYXNvYy0+
bXlfcnduZCA9IG50b2hsKGluaXRhY2tfY3AtPmluaXQuYV9yd25kKTsKKwlhc29jLT5pbml0X3Nl
cV9udW1iZXIgPSBudG9obChpbml0YWNrX2NwLT5pbml0LmluaXRpYWxfdHNuKTsKKwlhc29jLT5z
ZW5kaW5nX3NlcSA9IGFzb2MtPmFzY29uZl9zZXFfb3V0ID0gYXNvYy0+c3RyX3Jlc2V0X3NlcV9v
dXQgPSBhc29jLT5pbml0X3NlcV9udW1iZXI7CisJYXNvYy0+YXNjb25mX3NlcV9vdXRfYWNrZWQg
PSBhc29jLT5hc2NvbmZfc2VxX291dCAtIDE7CisJYXNvYy0+YXNjb25mX3NlcV9pbiA9IGFzb2Mt
Pmxhc3RfYWNrZWRfc2VxID0gYXNvYy0+aW5pdF9zZXFfbnVtYmVyIC0gMTsKKwlhc29jLT5zdHJf
cmVzZXRfc2VxX2luID0gYXNvYy0+aW5pdF9zZXFfbnVtYmVyOworCisJYXNvYy0+YWR2YW5jZWRf
cGVlcl9hY2tfcG9pbnQgPSBhc29jLT5sYXN0X2Fja2VkX3NlcTsKKworCS8qIHByb2Nlc3MgdGhl
IElOSVQgaW5mbyAocGVlcidzIGluZm8pICovCisJaWYgKHNjdHBfcHJvY2Vzc19pbml0KGluaXRf
Y3AsIHN0Y2IpIDwgMCkgeworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQlT
Q1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOworCQlTQ1RQ
X1RDQl9MT0NLKHN0Y2IpOworCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNu
dCwgMSk7CisjZW5kaWYKKwkJKHZvaWQpc2N0cF9mcmVlX2Fzc29jKGlucCwgc3RjYiwgU0NUUF9O
T1JNQUxfUFJPQywKKwkJICAgICAgICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVU
ICsgU0NUUF9MT0NfMTkpOworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworI2VuZGlmCisJCXJldHVy
biAoTlVMTCk7CisJfQorCS8qIGxvYWQgYWxsIGFkZHJlc3NlcyAqLworCWlmICgocmV0dmFsID0g
c2N0cF9sb2FkX2FkZHJlc3Nlc19mcm9tX2luaXQoc3RjYiwgbSwKKwkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBz
Y3RwX2luaXRfY2h1bmspLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5pdGFja19vZmZzZXQsIHNyYywgZHN0LCBpbml0X3NyYywgcG9ydCkpIDwgMCkgewor
I2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlhdG9t
aWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7CisJCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOworCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwor
CQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisjZW5kaWYKKwkJ
KHZvaWQpc2N0cF9mcmVlX2Fzc29jKGlucCwgc3RjYiwgU0NUUF9OT1JNQUxfUFJPQywKKwkJICAg
ICAgICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfMjApOwor
I2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlTQ1RQ
X1NPQ0tFVF9VTkxPQ0soc28sIDEpOworI2VuZGlmCisJCXJldHVybiAoTlVMTCk7CisJfQorCS8q
CisJICogdmVyaWZ5IGFueSBwcmVjZWRpbmcgQVVUSCBjaHVuayB0aGF0IHdhcyBza2lwcGVkCisJ
ICovCisJLyogcHVsbCB0aGUgbG9jYWwgYXV0aGVudGljYXRpb24gcGFyYW1ldGVycyBmcm9tIHRo
ZSBjb29raWUvaW5pdC1hY2sgKi8KKwlzY3RwX2F1dGhfZ2V0X2Nvb2tpZV9wYXJhbXMoc3RjYiwg
bSwKKwkgICAgaW5pdGFja19vZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9hY2tfY2h1
bmspLAorCSAgICBpbml0YWNrX2xpbWl0IC0gKGluaXRhY2tfb2Zmc2V0ICsgc2l6ZW9mKHN0cnVj
dCBzY3RwX2luaXRfYWNrX2NodW5rKSkpOworCWlmIChhdXRoX3NraXBwZWQpIHsKKwkJc3RydWN0
IHNjdHBfYXV0aF9jaHVuayAqYXV0aDsKKworCQlpZiAoYXV0aF9sZW4gPD0gU0NUUF9DSFVOS19C
VUZGRVJfU0laRSkgeworCQkJYXV0aCA9IChzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICopc2N0cF9t
X2dldHB0cihtLCBhdXRoX29mZnNldCwgYXV0aF9sZW4sIGF1dGhfY2h1bmtfYnVmKTsKKwkJfSBl
bHNlIHsKKwkJCWF1dGggPSBOVUxMOworCQl9CisJCWlmICgoYXV0aCA9PSBOVUxMKSB8fCBzY3Rw
X2hhbmRsZV9hdXRoKHN0Y2IsIGF1dGgsIG0sIGF1dGhfb2Zmc2V0KSkgeworCQkJLyogYXV0aCBI
TUFDIGZhaWxlZCwgZHVtcCB0aGUgYXNzb2MgYW5kIHBhY2tldCAqLworCQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX0FVVEgxLAorCQkJCSJDT09LSUUtRUNITzogQVVUSCBmYWlsZWRcbiIpOworI2lmIGRl
ZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJYXRvbWljX2Fk
ZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsK
KwkJCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOworCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJ
CWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKyNlbmRpZgorCQkJ
KHZvaWQpc2N0cF9mcmVlX2Fzc29jKGlucCwgc3RjYiwgU0NUUF9OT1JNQUxfUFJPQywKKwkJCSAg
ICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzIxKTsK
KyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCVND
VFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisjZW5kaWYKKwkJCXJldHVybiAoTlVMTCk7CisJCX0g
ZWxzZSB7CisJCQkvKiByZW1haW5pbmcgY2h1bmtzIGNoZWNrZWQuLi4gZ29vZCB0byBnbyAqLwor
CQkJc3RjYi0+YXNvYy5hdXRoZW50aWNhdGVkID0gMTsKKwkJfQorCX0KKworCS8qCisJICogaWYg
d2UncmUgZG9pbmcgQVNDT05GcywgY2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYW55IG5ldyBsb2Nh
bAorCSAqIGFkZHJlc3NlcyB0aGF0IG5lZWQgdG8gZ2V0IGFkZGVkIHRvIHRoZSBwZWVyIChlZy4g
YWRkcmVzc2VzCisJICogY2hhbmdlZCB3aGlsZSBjb29raWUgZWNobyBpbiBmbGlnaHQpLiAgVGhp
cyBuZWVkcyB0byBiZSBkb25lCisJICogYWZ0ZXIgd2UgZ28gdG8gdGhlIE9QRU4gc3RhdGUgdG8g
ZG8gdGhlIGNvcnJlY3QgYXNjb25mCisJICogcHJvY2Vzc2luZy4gZWxzZSwgbWFrZSBzdXJlIHdl
IGhhdmUgdGhlIGNvcnJlY3QgYWRkcmVzc2VzIGluIG91cgorCSAqIGxpc3RzCisJICovCisKKwkv
KiB3YXJuaW5nLCB3ZSByZS11c2Ugc2luLCBzaW42LCBzYV9zdG9yZSBoZXJlISAqLworCS8qIHB1
bGwgaW4gbG9jYWxfYWRkcmVzcyAob3VyICJmcm9tIiBhZGRyZXNzKSAqLworCXN3aXRjaCAoY29v
a2llLT5sYWRkcl90eXBlKSB7CisjaWZkZWYgSU5FVAorCWNhc2UgU0NUUF9JUFY0X0FERFJFU1M6
CisJCS8qIHNvdXJjZSBhZGRyIGlzIElQdjQgKi8KKwkJbWVtc2V0KCZzdG9yZS5zaW4sIDAsIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwkJc3RvcmUuc2luLnNpbl9mYW1pbHkgPSBBRl9J
TkVUOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCQlzdG9yZS5zaW4uc2luX2xlbiA9IHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJCXN0b3JlLnNpbi5zaW5fYWRkci5zX2FkZHIg
PSBjb29raWUtPmxhZGRyZXNzWzBdOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJ
Y2FzZSBTQ1RQX0lQVjZfQUREUkVTUzoKKwkJLyogc291cmNlIGFkZHIgaXMgSVB2NiAqLworCQlt
ZW1zZXQoJnN0b3JlLnNpbjYsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJCXN0
b3JlLnNpbjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJ
CXN0b3JlLnNpbjYuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5k
aWYKKwkJc3RvcmUuc2luNi5zaW42X3Njb3BlX2lkID0gY29va2llLT5zY29wZV9pZDsKKwkJbWVt
Y3B5KCZzdG9yZS5zaW42LnNpbjZfYWRkciwgY29va2llLT5sYWRkcmVzcywgc2l6ZW9mKHN0cnVj
dCBpbjZfYWRkcikpOworCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwljYXNlIFNDVFBfQ09OTl9BRERSRVNTOgorCQkvKiBzb3VyY2UgYWRkciBpcyBjb25uICov
CisJCW1lbXNldCgmc3RvcmUuc2Nvbm4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikp
OworCQlzdG9yZS5zY29ubi5zY29ubl9mYW1pbHkgPSBBRl9DT05OOworI2lmZGVmIEhBVkVfU0NP
Tk5fTEVOCisJCXN0b3JlLnNjb25uLnNjb25uX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
Y29ubik7CisjZW5kaWYKKwkJbWVtY3B5KCZzdG9yZS5zY29ubi5zY29ubl9hZGRyLCBjb29raWUt
PmxhZGRyZXNzLCBzaXplb2Yodm9pZCAqKSk7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoK
KyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJYXRv
bWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0
Y2IpOworCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKKwkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsK
KwkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworI2VuZGlmCisJ
CSh2b2lkKXNjdHBfZnJlZV9hc3NvYyhpbnAsIHN0Y2IsIFNDVFBfTk9STUFMX1BST0MsCisJCSAg
ICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzIyKTsK
KyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJU0NU
UF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKyNlbmRpZgorCQlyZXR1cm4gKE5VTEwpOworCX0KKwor
CS8qIHVwZGF0ZSBjdXJyZW50IHN0YXRlICovCisJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwg
Im1vdmluZyB0byBPUEVOIHN0YXRlXG4iKTsKKwlTQ1RQX1NFVF9TVEFURShzdGNiLCBTQ1RQX1NU
QVRFX09QRU4pOworCWlmIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElO
RykgeworCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdVQVJELAor
CQkgICAgICAgICAgICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIE5VTEwpOworCX0KKwlzY3Rw
X3N0b3BfYWxsX2Nvb2tpZV90aW1lcnMoc3RjYik7CisJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjMy
KHNjdHBzX3Bhc3NpdmVlc3RhYik7CisJU0NUUF9TVEFUX0lOQ1JfR0FVR0UzMihzY3Rwc19jdXJy
ZXN0YWIpOworCisJLyogc2V0IHVwIHRvIG5vdGlmeSB1cHBlciBsYXllciAqLworCSpub3RpZmlj
YXRpb24gPSBTQ1RQX05PVElGWV9BU1NPQ19VUDsKKwlpZiAoKChzdGNiLT5zY3RwX2VwLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkgICAgKHN0Y2ItPnNjdHBfZXAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSkgJiYKKwkgICAgKCFTQ1RQ
X0lTX0xJU1RFTklORyhpbnApKSkgeworCQkvKgorCQkgKiBUaGlzIGlzIGFuIGVuZHBvaW50IHRo
YXQgY2FsbGVkIGNvbm5lY3QoKSBob3cgaXQgZ290IGEKKwkJICogY29va2llIHRoYXQgaXMgTkVX
IGlzIGEgYml0IG9mIGEgbXlzdGVyeS4gSXQgbXVzdCBiZSB0aGF0CisJCSAqIHRoZSBJTklUIHdh
cyBzZW50LCBidXQgYmVmb3JlIGl0IGdvdCB0aGVyZS4uIGEgY29tcGxldGUKKwkJICogSU5JVC9J
TklULUFDSy9DT09LSUUgYXJyaXZlZC4gQnV0IG9mIGNvdXJzZSB0aGVuIGl0CisJCSAqIHNob3Vs
ZCBoYXZlIHdlbnQgdG8gdGhlIG90aGVyIGNvZGUuLiBub3QgaGVyZS4uIG9oIHdlbGwuLgorCQkg
KiBhIGJpdCBvZiBwcm90ZWN0aW9uIGlzIHdvcnRoIGhhdmluZy4uCisJCSAqLworCQlzdGNiLT5z
Y3RwX2VwLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRDsKKyNpZiBkZWZp
bmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJYXRvbWljX2FkZF9p
bnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlT
Q1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKKwkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJYXRvbWlj
X3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQlpZiAoc3RjYi0+YXNvYy5z
dGF0ZSAmIFNDVFBfU1RBVEVfQ0xPU0VEX1NPQ0tFVCkgeworCQkJU0NUUF9TT0NLRVRfVU5MT0NL
KHNvLCAxKTsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKyNlbmRpZgorCQlzb2lzY29ubmVjdGVk
KHN0Y2ItPnNjdHBfc29ja2V0KTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKKwkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKyNlbmRpZgorCX0g
ZWxzZSBpZiAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BU
WVBFKSAmJgorCSAgICAgICAgICAgKFNDVFBfSVNfTElTVEVOSU5HKGlucCkpKSB7CisJCS8qCisJ
CSAqIFdlIGRvbid0IHdhbnQgdG8gZG8gYW55dGhpbmcgd2l0aCB0aGlzIG9uZS4gU2luY2UgaXQg
aXMKKwkJICogdGhlIGxpc3RlbmluZyBndXkuIFRoZSB0aW1lciB3aWxsIGdldCBzdGFydGVkIGZv
cgorCQkgKiBhY2NlcHRlZCBjb25uZWN0aW9ucyBpbiB0aGUgY2FsbGVyLgorCQkgKi8KKwkJOwor
CX0KKwlpZiAoc3RjYi0+YXNvYy5zY3RwX2F1dG9jbG9zZV90aWNrcyAmJgorCSAgICBzY3RwX2lz
X2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19BVVRPQ0xPU0UpKSB7CisJCXNjdHBfdGlt
ZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0FVVE9DTE9TRSwgaW5wLCBzdGNiLCBOVUxMKTsKKwl9
CisJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJnN0Y2ItPmFzb2MudGltZV9lbnRlcmVkKTsK
KwkqbmV0cCA9IHNjdHBfZmluZG5ldChzdGNiLCBpbml0X3NyYyk7CisJaWYgKCpuZXRwICE9IE5V
TEwpIHsKKwkJc3RydWN0IHRpbWV2YWwgb2xkOworCisJCS8qCisJCSAqIFNpbmNlIHdlIGRpZCBu
b3Qgc2VuZCBhIEhCLCBtYWtlIHN1cmUgd2UgZG9uJ3QgZG91YmxlCisJCSAqIHRoaW5ncy4KKwkJ
ICovCisJCSgqbmV0cCktPmhiX3Jlc3BvbmRlZCA9IDE7CisJCS8qIENhbGN1bGF0ZSB0aGUgUlRU
LiAqLworCQlvbGQudHZfc2VjID0gY29va2llLT50aW1lX2VudGVyZWQudHZfc2VjOworCQlvbGQu
dHZfdXNlYyA9IGNvb2tpZS0+dGltZV9lbnRlcmVkLnR2X3VzZWM7CisJCXNjdHBfY2FsY3VsYXRl
X3J0byhzdGNiLCBhc29jLCAqbmV0cCwgJm9sZCwgU0NUUF9SVFRfRlJPTV9OT05fREFUQSk7CisJ
fQorCS8qIHJlc3BvbmQgd2l0aCBhIENPT0tJRS1BQ0sgKi8KKwlzY3RwX3NlbmRfY29va2llX2Fj
ayhzdGNiKTsKKworCS8qCisJICogY2hlY2sgdGhlIGFkZHJlc3MgbGlzdHMgZm9yIGFueSBBU0NP
TkZzIHRoYXQgbmVlZCB0byBiZSBzZW50CisJICogQUZURVIgdGhlIGNvb2tpZS1hY2sgaXMgc2Vu
dAorCSAqLworCXNjdHBfY2hlY2tfYWRkcmVzc19saXN0KHN0Y2IsIG0sCisJICAgIGluaXRhY2tf
b2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfYWNrX2NodW5rKSwKKwkgICAgaW5pdGFj
a19saW1pdCAtIChpbml0YWNrX29mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X2Fja19j
aHVuaykpLAorCSAgICAmc3RvcmUuc2EsIGNvb2tpZS0+bG9jYWxfc2NvcGUsIGNvb2tpZS0+c2l0
ZV9zY29wZSwKKwkgICAgY29va2llLT5pcHY0X3Njb3BlLCBjb29raWUtPmxvb3BiYWNrX3Njb3Bl
KTsKKworCXJldHVybiAoc3RjYik7Cit9CisKKy8qCisgKiBDT0RFIExJS0UgVEhJUyBORUVEUyBU
TyBSVU4gSUYgdGhlIHBlZXIgc3VwcG9ydHMgdGhlIE5BVCBleHRlbnNpb24sIGkuZQorICogd2Ug
TkVFRCB0byBtYWtlIHN1cmUgd2UgYXJlIG5vdCBhbHJlYWR5IHVzaW5nIHRoZSB2dGFnLiBJZiBz
byB3ZQorICogbmVlZCB0byBzZW5kIGJhY2sgYW4gQUJPUlQtVFJZLUFHQUlOLVdJVEgtTkVXLVRB
RyBObyBtaWRkbGUgYm94IGJpdCEKKwloZWFkID0gJlNDVFBfQkFTRV9JTkZPKHNjdHBfYXNvY2hh
c2gpW1NDVFBfUENCSEFTSF9BU09DKHRhZywKKwkJCQkJCQkgICAgU0NUUF9CQVNFX0lORk8oaGFz
aGFzb2NtYXJrKSldOworCUxJU1RfRk9SRUFDSChzdGNiLCBoZWFkLCBzY3RwX2Fzb2NzKSB7CisJ
ICAgICAgICBpZiAoKHN0Y2ItPmFzb2MubXlfdnRhZyA9PSB0YWcpICYmIChzdGNiLT5ycG9ydCA9
PSBycG9ydCkgJiYgKGlucCA9PSBzdGNiLT5zY3RwX2VwKSkgIHsKKwkJICAgICAgIC0tIFNFTkQg
QUJPUlQgLSBUUlkgQUdBSU4gLS0KKwkJfQorCX0KKyovCisKKy8qCisgKiBoYW5kbGVzIGEgQ09P
S0lFLUVDSE8gbWVzc2FnZSBzdGNiOiBtb2RpZmllZCB0byBlaXRoZXIgYSBuZXcgb3IgbGVmdCBh
cworICogZXhpc3RpbmcgKG5vbi1OVUxMKSBUQ0IKKyAqLworc3RhdGljIHN0cnVjdCBtYnVmICoK
K3NjdHBfaGFuZGxlX2Nvb2tpZV9lY2hvKHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQg
b2Zmc2V0LAorICAgIHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwK
KyAgICBzdHJ1Y3Qgc2N0cGhkciAqc2gsIHN0cnVjdCBzY3RwX2Nvb2tpZV9lY2hvX2NodW5rICpj
cCwKKyAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqKmlucF9wLCBzdHJ1Y3Qgc2N0cF90Y2IgKipzdGNi
LCBzdHJ1Y3Qgc2N0cF9uZXRzICoqbmV0cCwKKyAgICBpbnQgYXV0aF9za2lwcGVkLCB1aW50MzJf
dCBhdXRoX29mZnNldCwgdWludDMyX3QgYXV0aF9sZW4sCisgICAgc3RydWN0IHNjdHBfdGNiICoq
bG9ja2VkX3RjYiwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxvd2lkLAorI2VuZGlm
CisgICAgdWludDMyX3QgdnJmX2lkLCB1aW50MTZfdCBwb3J0KQoreworCXN0cnVjdCBzY3RwX3N0
YXRlX2Nvb2tpZSAqY29va2llOworCXN0cnVjdCBzY3RwX3RjYiAqbF9zdGNiID0gKnN0Y2I7CisJ
c3RydWN0IHNjdHBfaW5wY2IgKmxfaW5wOworCXN0cnVjdCBzb2NrYWRkciAqdG87CisJc3RydWN0
IHNjdHBfcGNiICplcDsKKwlzdHJ1Y3QgbWJ1ZiAqbV9zaWc7CisJdWludDhfdCBjYWxjX3NpZ1tT
Q1RQX1NJR05BVFVSRV9TSVpFXSwgdG1wX3NpZ1tTQ1RQX1NJR05BVFVSRV9TSVpFXTsKKwl1aW50
OF90ICpzaWc7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKSAmJiBkZWZpbmVkKEZVWlpJTkdf
QlVJTERfTU9ERV9VTlNBRkVfRk9SX1BST0RVQ1RJT04pCisJdWludDhfdCBjb29raWVfb2sgPSAx
OworI2Vsc2UKKwl1aW50OF90IGNvb2tpZV9vayA9IDA7CisjZW5kaWYKKwl1bnNpZ25lZCBpbnQg
c2lnX29mZnNldCwgY29va2llX29mZnNldDsKKwl1bnNpZ25lZCBpbnQgY29va2llX2xlbjsKKwlz
dHJ1Y3QgdGltZXZhbCBub3c7CisJc3RydWN0IHRpbWV2YWwgdGltZV9lbnRlcmVkLCB0aW1lX2V4
cGlyZXM7CisJaW50IG5vdGlmaWNhdGlvbiA9IDA7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0bDsK
KwlpbnQgaGFkX2FfZXhpc3RpbmdfdGNiID0gMDsKKwlpbnQgc2VuZF9pbnRfY29uZiA9IDA7Cisj
aWZkZWYgSU5FVAorCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisjZW5kaWYKKyNpZmRlZiBJTkVU
NgorCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNjsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKwlzdHJ1Y3Qgc29ja2FkZHJfY29ubiBzY29ubjsKKyNlbmRpZgorCisJU0NUUERC
RyhTQ1RQX0RFQlVHX0lOUFVUMiwKKwkJInNjdHBfaGFuZGxlX2Nvb2tpZTogaGFuZGxpbmcgQ09P
S0lFLUVDSE9cbiIpOworCisJaWYgKGlucF9wID09IE5VTEwpIHsKKwkJcmV0dXJuIChOVUxMKTsK
Kwl9CisJY29va2llID0gJmNwLT5jb29raWU7CisJY29va2llX29mZnNldCA9IG9mZnNldCArIHNp
emVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7CisJY29va2llX2xlbiA9IG50b2hzKGNwLT5jaC5j
aHVua19sZW5ndGgpOworCisJaWYgKGNvb2tpZV9sZW4gPCBzaXplb2Yoc3RydWN0IHNjdHBfY29v
a2llX2VjaG9fY2h1bmspICsKKwkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfY2h1bmspICsK
KwkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfYWNrX2NodW5rKSArIFNDVFBfU0lHTkFUVVJF
X1NJWkUpIHsKKwkJLyogY29va2llIHRvbyBzbWFsbCAqLworCQlyZXR1cm4gKE5VTEwpOworCX0K
KwlpZiAoKGNvb2tpZS0+cGVlcnBvcnQgIT0gc2gtPnNyY19wb3J0KSB8fAorCSAgICAoY29va2ll
LT5teXBvcnQgIT0gc2gtPmRlc3RfcG9ydCkgfHwKKwkgICAgKGNvb2tpZS0+bXlfdnRhZyAhPSBz
aC0+dl90YWcpKSB7CisJCS8qCisJCSAqIGludmFsaWQgcG9ydHMgb3IgYmFkIHRhZy4gIE5vdGUg
dGhhdCB3ZSBhbHdheXMgbGVhdmUgdGhlCisJCSAqIHZfdGFnIGluIHRoZSBoZWFkZXIgaW4gbmV0
d29yayBvcmRlciBhbmQgd2hlbiB3ZSBzdG9yZWQKKwkJICogaXQgaW4gdGhlIG15X3Z0YWcgc2xv
dCB3ZSBhbHNvIGxlZnQgaXQgaW4gbmV0d29yayBvcmRlci4KKwkJICogVGhpcyBtYWludGFpbnMg
dGhlIG1hdGNoIGV2ZW4gdGhvdWdoIGl0IG1heSBiZSBpbiB0aGUKKwkJICogb3Bwb3NpdGUgYnl0
ZSBvcmRlciBvZiB0aGUgbWFjaGluZSA6LT4KKwkJICovCisJCXJldHVybiAoTlVMTCk7CisJfQor
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkvKgorCSAqIFJlY292ZXIgdGhlIEFGX0NPTk4g
YWRkcmVzc2VzIHdpdGhpbiB0aGUgY29va2llLgorCSAqIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBp
biB0aGUgYnVmZmVyIHByb3ZpZGVkIGZvciBsYXRlciBwcm9jZXNzaW5nCisJICogb2YgdGhlIGNv
b2tpZSBhbmQgaW4gdGhlIG1idWYgY2hhaW4gZm9yIEhNQUMgdmFsaWRhdGlvbi4KKwkgKi8KKwlp
ZiAoKGNvb2tpZS0+YWRkcl90eXBlID09IFNDVFBfQ09OTl9BRERSRVNTKSAmJiAoc3JjLT5zYV9m
YW1pbHkgPT0gQUZfQ09OTikpIHsKKwkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25ucCA9IChz
dHJ1Y3Qgc29ja2FkZHJfY29ubiAqKXNyYzsKKworCQltZW1jcHkoY29va2llLT5hZGRyZXNzLCAm
c2Nvbm5wLT5zY29ubl9hZGRyICwgc2l6ZW9mKHZvaWQgKikpOworCQltX2NvcHliYWNrKG0sIGNv
b2tpZV9vZmZzZXQgKyBvZmZzZXRvZihzdHJ1Y3Qgc2N0cF9zdGF0ZV9jb29raWUsIGFkZHJlc3Mp
LAorCQkgICAgICAgICAgIChpbnQpc2l6ZW9mKHZvaWQgKiksIChjYWRkcl90KSZzY29ubnAtPnNj
b25uX2FkZHIpOworCX0KKwlpZiAoKGNvb2tpZS0+bGFkZHJfdHlwZSA9PSBTQ1RQX0NPTk5fQURE
UkVTUykgJiYgKGRzdC0+c2FfZmFtaWx5ID09IEFGX0NPTk4pKSB7CisJCXN0cnVjdCBzb2NrYWRk
cl9jb25uICpzY29ubnAgPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilkc3Q7CisKKwkJbWVtY3B5
KGNvb2tpZS0+bGFkZHJlc3MsICZzY29ubnAtPnNjb25uX2FkZHIgLCBzaXplb2Yodm9pZCAqKSk7
CisJCW1fY29weWJhY2sobSwgY29va2llX29mZnNldCArIG9mZnNldG9mKHN0cnVjdCBzY3RwX3N0
YXRlX2Nvb2tpZSwgbGFkZHJlc3MpLAorCQkgICAgICAgICAgIChpbnQpc2l6ZW9mKHZvaWQgKiks
IChjYWRkcl90KSZzY29ubnAtPnNjb25uX2FkZHIpOworCX0KKyNlbmRpZgorCS8qCisJICogc3Bs
aXQgb2ZmIHRoZSBzaWduYXR1cmUgaW50byBpdHMgb3duIG1idWYgKHNpbmNlIGl0IHNob3VsZCBu
b3QgYmUKKwkgKiBjYWxjdWxhdGVkIGluIHRoZSBzY3RwX2htYWNfbSgpIGNhbGwpLgorCSAqLwor
CXNpZ19vZmZzZXQgPSBvZmZzZXQgKyBjb29raWVfbGVuIC0gU0NUUF9TSUdOQVRVUkVfU0laRTsK
KwltX3NpZyA9IG1fc3BsaXQobSwgc2lnX29mZnNldCwgTV9OT1dBSVQpOworCWlmIChtX3NpZyA9
PSBOVUxMKSB7CisJCS8qIG91dCBvZiBtZW1vcnkgb3IgPz8gKi8KKwkJcmV0dXJuIChOVUxMKTsK
Kwl9CisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQlVGX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBfbG9n
X21iYyhtX3NpZywgU0NUUF9NQlVGX1NQTElUKTsKKwl9CisjZW5kaWYKKworCS8qCisJICogY29t
cHV0ZSB0aGUgc2lnbmF0dXJlL2RpZ2VzdCBmb3IgdGhlIGNvb2tpZQorCSAqLworCWVwID0gJigq
aW5wX3ApLT5zY3RwX2VwOworCWxfaW5wID0gKmlucF9wOworCWlmIChsX3N0Y2IpIHsKKwkJU0NU
UF9UQ0JfVU5MT0NLKGxfc3RjYik7CisJfQorCVNDVFBfSU5QX1JMT0NLKGxfaW5wKTsKKwlpZiAo
bF9zdGNiKSB7CisJCVNDVFBfVENCX0xPQ0sobF9zdGNiKTsKKwl9CisJLyogd2hpY2ggY29va2ll
IGlzIGl0PyAqLworCWlmICgoY29va2llLT50aW1lX2VudGVyZWQudHZfc2VjIDwgKGxvbmcpZXAt
PnRpbWVfb2Zfc2VjcmV0X2NoYW5nZSkgJiYKKwkgICAgKGVwLT5jdXJyZW50X3NlY3JldF9udW1i
ZXIgIT0gZXAtPmxhc3Rfc2VjcmV0X251bWJlcikpIHsKKwkJLyogaXQncyB0aGUgb2xkIGNvb2tp
ZSAqLworCQkodm9pZClzY3RwX2htYWNfbShTQ1RQX0hNQUMsCisJCSAgICAodWludDhfdCAqKWVw
LT5zZWNyZXRfa2V5WyhpbnQpZXAtPmxhc3Rfc2VjcmV0X251bWJlcl0sCisJCSAgICBTQ1RQX1NF
Q1JFVF9TSVpFLCBtLCBjb29raWVfb2Zmc2V0LCBjYWxjX3NpZywgMCk7CisJfSBlbHNlIHsKKwkJ
LyogaXQncyB0aGUgY3VycmVudCBjb29raWUgKi8KKwkJKHZvaWQpc2N0cF9obWFjX20oU0NUUF9I
TUFDLAorCQkgICAgKHVpbnQ4X3QgKillcC0+c2VjcmV0X2tleVsoaW50KWVwLT5jdXJyZW50X3Nl
Y3JldF9udW1iZXJdLAorCQkgICAgU0NUUF9TRUNSRVRfU0laRSwgbSwgY29va2llX29mZnNldCwg
Y2FsY19zaWcsIDApOworCX0KKwkvKiBnZXQgdGhlIHNpZ25hdHVyZSAqLworCVNDVFBfSU5QX1JV
TkxPQ0sobF9pbnApOworCXNpZyA9ICh1aW50OF90ICopIHNjdHBfbV9nZXRwdHIobV9zaWcsIDAs
IFNDVFBfU0lHTkFUVVJFX1NJWkUsICh1aW50OF90ICopICYgdG1wX3NpZyk7CisJaWYgKHNpZyA9
PSBOVUxMKSB7CisJCS8qIGNvdWxkbid0IGZpbmQgc2lnbmF0dXJlICovCisJCXNjdHBfbV9mcmVl
bShtX3NpZyk7CisJCXJldHVybiAoTlVMTCk7CisJfQorCS8qIGNvbXBhcmUgdGhlIHJlY2VpdmVk
IGRpZ2VzdCB3aXRoIHRoZSBjb21wdXRlZCBkaWdlc3QgKi8KKwlpZiAodGltaW5nc2FmZV9iY21w
KGNhbGNfc2lnLCBzaWcsIFNDVFBfU0lHTkFUVVJFX1NJWkUpICE9IDApIHsKKwkJLyogdHJ5IHRo
ZSBvbGQgY29va2llPyAqLworCQlpZiAoKGNvb2tpZS0+dGltZV9lbnRlcmVkLnR2X3NlYyA9PSAo
bG9uZyllcC0+dGltZV9vZl9zZWNyZXRfY2hhbmdlKSAmJgorCQkgICAgKGVwLT5jdXJyZW50X3Nl
Y3JldF9udW1iZXIgIT0gZXAtPmxhc3Rfc2VjcmV0X251bWJlcikpIHsKKwkJCS8qIGNvbXB1dGUg
ZGlnZXN0IHdpdGggb2xkICovCisJCQkodm9pZClzY3RwX2htYWNfbShTQ1RQX0hNQUMsCisJCQkg
ICAgKHVpbnQ4X3QgKillcC0+c2VjcmV0X2tleVsoaW50KWVwLT5sYXN0X3NlY3JldF9udW1iZXJd
LAorCQkJICAgIFNDVFBfU0VDUkVUX1NJWkUsIG0sIGNvb2tpZV9vZmZzZXQsIGNhbGNfc2lnLCAw
KTsKKwkJCS8qIGNvbXBhcmUgKi8KKwkJCWlmICh0aW1pbmdzYWZlX2JjbXAoY2FsY19zaWcsIHNp
ZywgU0NUUF9TSUdOQVRVUkVfU0laRSkgPT0gMCkKKwkJCQljb29raWVfb2sgPSAxOworCQl9CisJ
fSBlbHNlIHsKKwkJY29va2llX29rID0gMTsKKwl9CisKKwkvKgorCSAqIE5vdyBiZWZvcmUgd2Ug
Y29udGludWUgd2UgbXVzdCByZWNvbnN0cnVjdCBvdXIgbWJ1ZiBzbyB0aGF0CisJICogbm9ybWFs
IHByb2Nlc3Npbmcgb2YgYW55IG90aGVyIGNodW5rcyB3aWxsIHdvcmsuCisJICovCisJeworCQlz
dHJ1Y3QgbWJ1ZiAqbV9hdDsKKworCQltX2F0ID0gbTsKKwkJd2hpbGUgKFNDVFBfQlVGX05FWFQo
bV9hdCkgIT0gTlVMTCkgeworCQkJbV9hdCA9IFNDVFBfQlVGX05FWFQobV9hdCk7CisJCX0KKwkJ
U0NUUF9CVUZfTkVYVChtX2F0KSA9IG1fc2lnOworCX0KKworCWlmIChjb29raWVfb2sgPT0gMCkg
eworCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQyLCAiaGFuZGxlX2Nvb2tpZV9lY2hvOiBjb29r
aWUgc2lnbmF0dXJlIHZhbGlkYXRpb24gZmFpbGVkIVxuIik7CisJCVNDVFBEQkcoU0NUUF9ERUJV
R19JTlBVVDIsCisJCQkib2Zmc2V0ID0gJXUsIGNvb2tpZV9vZmZzZXQgPSAldSwgc2lnX29mZnNl
dCA9ICV1XG4iLAorCQkJKHVpbnQzMl90KSBvZmZzZXQsIGNvb2tpZV9vZmZzZXQsIHNpZ19vZmZz
ZXQpOworCQlyZXR1cm4gKE5VTEwpOworCX0KKworCWlmIChzY3RwX3RpY2tzX3RvX21zZWNzKGNv
b2tpZS0+Y29va2llX2xpZmUpID4gU0NUUF9NQVhfQ09PS0lFX0xJRkUpIHsKKwkJU0NUUERCRyhT
Q1RQX0RFQlVHX0lOUFVUMiwgImhhbmRsZV9jb29raWVfZWNobzogSW52YWxpZCBjb29raWUgbGlm
ZXRpbWVcbiIpOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwl0aW1lX2VudGVyZWQudHZfc2VjID0g
Y29va2llLT50aW1lX2VudGVyZWQudHZfc2VjOworCXRpbWVfZW50ZXJlZC50dl91c2VjID0gY29v
a2llLT50aW1lX2VudGVyZWQudHZfdXNlYzsKKwlpZiAoKHRpbWVfZW50ZXJlZC50dl9zZWMgPCAw
KSB8fAorCSAgICAodGltZV9lbnRlcmVkLnR2X3VzZWMgPCAwKSB8fAorCSAgICAodGltZV9lbnRl
cmVkLnR2X3VzZWMgPj0gMTAwMDAwMCkpIHsKKwkJLyogSW52YWxpZCB0aW1lIHN0YW1wLiBDb29r
aWUgbXVzdCBoYXZlIGJlZW4gbW9kaWZpZWQuICovCisJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBV
VDIsICJoYW5kbGVfY29va2llX2VjaG86IEludmFsaWQgdGltZSBzdGFtcFxuIik7CisJCXJldHVy
biAoTlVMTCk7CisJfQorCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZub3cpOworI2lmICEo
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykpCisJaWYgKHRp
bWVyY21wKCZub3csICZ0aW1lX2VudGVyZWQsIDwpKSB7CisjZWxzZQorCWlmICh0aW1ldmFsY21w
KCZub3csICZ0aW1lX2VudGVyZWQsIDwpKSB7CisjZW5kaWYKKwkJU0NUUERCRyhTQ1RQX0RFQlVH
X0lOUFVUMiwgImhhbmRsZV9jb29raWVfZWNobzogY29va2llIGdlbmVyYXRlZCBpbiB0aGUgZnV0
dXJlIVxuIik7CisJCXJldHVybiAoTlVMTCk7CisJfQorCS8qCisJICogQ2hlY2sgdGhlIGNvb2tp
ZSB0aW1lc3RhbXBzIHRvIGJlIHN1cmUgaXQncyBub3Qgc3RhbGUuCisJICogY29va2llX2xpZmUg
aXMgaW4gdGlja3MsIHNvIHdlIGNvbnZlcnQgdG8gc2Vjb25kcy4KKwkgKi8KKwl0aW1lX2V4cGly
ZXMudHZfc2VjID0gdGltZV9lbnRlcmVkLnR2X3NlYyArIHNjdHBfdGlja3NfdG9fc2Vjcyhjb29r
aWUtPmNvb2tpZV9saWZlKTsKKwl0aW1lX2V4cGlyZXMudHZfdXNlYyA9IHRpbWVfZW50ZXJlZC50
dl91c2VjOworI2lmICEoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykpCisJaWYgKHRpbWVyY21wKCZub3csICZ0aW1lX2V4cGlyZXMsID4pKQorI2Vsc2UKKwlp
ZiAodGltZXZhbGNtcCgmbm93LCAmdGltZV9leHBpcmVzLCA+KSkKKyNlbmRpZgorCXsKKwkJLyog
Y29va2llIGlzIHN0YWxlISAqLworCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOworCQlzdHJ1Y3Qgc2N0
cF9lcnJvcl9zdGFsZV9jb29raWUgKmNhdXNlOworCQlzdHJ1Y3QgdGltZXZhbCBkaWZmOworCQl1
aW50MzJfdCBzdGFsZW5lc3M7CisKKwkJb3BfZXJyID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNp
emVvZihzdHJ1Y3Qgc2N0cF9lcnJvcl9zdGFsZV9jb29raWUpLAorCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOworCQlpZiAob3BfZXJyID09
IE5VTEwpIHsKKwkJCS8qIEZPT0JBUiAqLworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQkvKiBT
ZXQgdGhlIGxlbiAqLworCQlTQ1RQX0JVRl9MRU4ob3BfZXJyKSA9IHNpemVvZihzdHJ1Y3Qgc2N0
cF9lcnJvcl9zdGFsZV9jb29raWUpOworCQljYXVzZSA9IG10b2Qob3BfZXJyLCBzdHJ1Y3Qgc2N0
cF9lcnJvcl9zdGFsZV9jb29raWUgKik7CisJCWNhdXNlLT5jYXVzZS5jb2RlID0gaHRvbnMoU0NU
UF9DQVVTRV9TVEFMRV9DT09LSUUpOworCQljYXVzZS0+Y2F1c2UubGVuZ3RoID0gaHRvbnMoc2l6
ZW9mKHN0cnVjdCBzY3RwX2Vycm9yX3N0YWxlX2Nvb2tpZSkpOworI2lmICEoZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykpCisJCXRpbWVyc3ViKCZub3csICZ0
aW1lX2V4cGlyZXMsICZkaWZmKTsKKyNlbHNlCisJCWRpZmYgPSBub3c7CisJCXRpbWV2YWxzdWIo
JmRpZmYsICZ0aW1lX2V4cGlyZXMpOworI2VuZGlmCisJCWlmICgodWludDMyX3QpZGlmZi50dl9z
ZWMgPiBVSU5UMzJfTUFYIC8gMTAwMDAwMCkgeworCQkJc3RhbGVuZXNzID0gVUlOVDMyX01BWDsK
KwkJfSBlbHNlIHsKKwkJCXN0YWxlbmVzcyA9IGRpZmYudHZfc2VjICogMTAwMDAwMDsKKwkJfQor
CQlpZiAoVUlOVDMyX01BWCAtIHN0YWxlbmVzcyA+PSAodWludDMyX3QpZGlmZi50dl91c2VjKSB7
CisJCQlzdGFsZW5lc3MgKz0gZGlmZi50dl91c2VjOworCQl9IGVsc2UgeworCQkJc3RhbGVuZXNz
ID0gVUlOVDMyX01BWDsKKwkJfQorCQljYXVzZS0+c3RhbGVfdGltZSA9IGh0b25sKHN0YWxlbmVz
cyk7CisJCXNjdHBfc2VuZF9vcGVycl90byhzcmMsIGRzdCwgc2gsIGNvb2tpZS0+cGVlcnNfdnRh
Zywgb3BfZXJyLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisJCSAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGxfaW5wLT5m
aWJudW0sCisjZW5kaWYKKwkJICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7CisJCXJl
dHVybiAoTlVMTCk7CisJfQorCS8qCisJICogTm93IHdlIG11c3Qgc2VlIHdpdGggdGhlIGxvb2t1
cCBhZGRyZXNzIGlmIHdlIGhhdmUgYW4gZXhpc3RpbmcKKwkgKiBhc29jLiBUaGlzIHdpbGwgb25s
eSBoYXBwZW4gaWYgd2Ugd2VyZSBpbiB0aGUgQ09PS0lFLVdBSVQgc3RhdGUKKwkgKiBhbmQgYSBJ
TklUIGNvbGxpZGVkIHdpdGggdXMgYW5kIHNvbWV3aGVyZSB0aGUgcGVlciBzZW50IHRoZQorCSAq
IGNvb2tpZSBvbiBhbm90aGVyIGFkZHJlc3MgYmVzaWRlcyB0aGUgc2luZ2xlIGFkZHJlc3Mgb3Vy
IGFzc29jCisJICogaGFkIGZvciBoaW0uIEluIHRoaXMgY2FzZSB3ZSB3aWxsIGhhdmUgb25lIG9m
IHRoZSB0aWUtdGFncyBzZXQgYXQKKwkgKiBsZWFzdCBBTkQgdGhlIGFkZHJlc3MgZmllbGQgaW4g
dGhlIGNvb2tpZSBjYW4gYmUgdXNlZCB0byBsb29rIGl0CisJICogdXAuCisJICovCisJdG8gPSBO
VUxMOworCXN3aXRjaCAoY29va2llLT5hZGRyX3R5cGUpIHsKKyNpZmRlZiBJTkVUNgorCWNhc2Ug
U0NUUF9JUFY2X0FERFJFU1M6CisJCW1lbXNldCgmc2luNiwgMCwgc2l6ZW9mKHNpbjYpKTsKKwkJ
c2luNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworI2lmZGVmIEhBVkVfU0lONl9MRU4KKwkJc2lu
Ni5zaW42X2xlbiA9IHNpemVvZihzaW42KTsKKyNlbmRpZgorCQlzaW42LnNpbjZfcG9ydCA9IHNo
LT5zcmNfcG9ydDsKKwkJc2luNi5zaW42X3Njb3BlX2lkID0gY29va2llLT5zY29wZV9pZDsKKwkJ
bWVtY3B5KCZzaW42LnNpbjZfYWRkci5zNl9hZGRyLCBjb29raWUtPmFkZHJlc3MsCisJCSAgICBz
aXplb2Yoc2luNi5zaW42X2FkZHIuczZfYWRkcikpOworCQl0byA9IChzdHJ1Y3Qgc29ja2FkZHIg
Kikmc2luNjsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUCisJY2FzZSBTQ1RQX0lQVjRf
QUREUkVTUzoKKwkJbWVtc2V0KCZzaW4sIDAsIHNpemVvZihzaW4pKTsKKwkJc2luLnNpbl9mYW1p
bHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCQlzaW4uc2luX2xlbiA9IHNpemVv
ZihzaW4pOworI2VuZGlmCisJCXNpbi5zaW5fcG9ydCA9IHNoLT5zcmNfcG9ydDsKKwkJc2luLnNp
bl9hZGRyLnNfYWRkciA9IGNvb2tpZS0+YWRkcmVzc1swXTsKKwkJdG8gPSAoc3RydWN0IHNvY2th
ZGRyICopJnNpbjsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisJY2FzZSBTQ1RQX0NPTk5fQUREUkVTUzoKKwkJbWVtc2V0KCZzY29ubiwgMCwgc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9jb25uKSk7CisJCXNjb25uLnNjb25uX2ZhbWlseSA9IEFGX0NPTk47Cisj
aWZkZWYgSEFWRV9TQ09OTl9MRU4KKwkJc2Nvbm4uc2Nvbm5fbGVuID0gc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9jb25uKTsKKyNlbmRpZgorCQlzY29ubi5zY29ubl9wb3J0ID0gc2gtPnNyY19wb3J0
OworCQltZW1jcHkoJnNjb25uLnNjb25uX2FkZHIsIGNvb2tpZS0+YWRkcmVzcywgc2l6ZW9mKHZv
aWQgKikpOworCQl0byA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2Nvbm47CisJCWJyZWFrOworI2Vu
ZGlmCisJZGVmYXVsdDoKKwkJLyogVGhpcyBzaG91bGQgbm90IGhhcHBlbiAqLworCQlyZXR1cm4g
KE5VTEwpOworCX0KKwlpZiAoKnN0Y2IgPT0gTlVMTCkgeworCQkvKiBZZXAsIGxldHMgY2hlY2sg
Ki8KKwkJKnN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKGlucF9wLCB0bywgbmV0
cCwgZHN0LCBOVUxMKTsKKwkJaWYgKCpzdGNiID09IE5VTEwpIHsKKwkJCS8qCisJCQkgKiBXZSBz
aG91bGQgaGF2ZSBvbmx5IGdvdCBiYWNrIHRoZSBzYW1lIGlucC4gSWYgd2UKKwkJCSAqIGdvdCBi
YWNrIGEgZGlmZmVyZW50IGVwIHdlIGhhdmUgYSBwcm9ibGVtLiBUaGUKKwkJCSAqIG9yaWdpbmFs
IGZpbmRlcCBnb3QgYmFjayBsX2lucCBhbmQgbm93CisJCQkgKi8KKwkJCWlmIChsX2lucCAhPSAq
aW5wX3ApIHsKKwkJCQlTQ1RQX1BSSU5URigiQmFkIHByb2JsZW0gZmluZF9lcCBnb3QgYSBkaWZm
IGlucCB0aGVuIHNwZWNpYWxfbG9jYXRlP1xuIik7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAo
KmxvY2tlZF90Y2IgPT0gTlVMTCkgeworCQkJCS8qIEluIHRoaXMgY2FzZSB3ZSBmb3VuZCB0aGUg
YXNzb2Mgb25seQorCQkJCSAqIGFmdGVyIHdlIGxvY2tlZCB0aGUgY3JlYXRlIGxvY2suIFRoaXMg
bWVhbnMKKwkJCQkgKiB3ZSBhcmUgaW4gYSBjb2xsaWRpbmcgY2FzZSBhbmQgd2UgbXVzdCBtYWtl
CisJCQkJICogc3VyZSB0aGF0IHdlIHVubG9jayB0aGUgdGNiIGlmIGl0cyBvbmUgb2YgdGhlCisJ
CQkJICogY2FzZXMgd2hlcmUgd2UgdGhyb3cgYXdheSB0aGUgaW5jb21pbmcgcGFja2V0cy4KKwkJ
CQkgKi8KKwkJCQkqbG9ja2VkX3RjYiA9ICpzdGNiOworCisJCQkJLyogV2UgbXVzdCBhbHNvIGlu
Y3JlbWVudCB0aGUgaW5wIHJlZiBjb3VudAorCQkJCSAqIHNpbmNlIHRoZSByZWZfY291bnQgZmxh
Z3Mgd2FzIHNldCB3aGVuIHdlCisJCQkJICogZGlkIG5vdCBmaW5kIHRoZSBUQ0IsIG5vdyB3ZSBm
b3VuZCBpdCB3aGljaAorCQkJCSAqIHJlZHVjZXMgdGhlIHJlZmNvdW50Li4gd2UgbXVzdCByYWlz
ZSBpdCBiYWNrCisJCQkJICogb3V0IHRvIGJhbGFuY2UgaXQgYWxsIDotKQorCQkJCSAqLworCQkJ
CVNDVFBfSU5QX0lOQ1JfUkVGKCgqc3RjYiktPnNjdHBfZXApOworCQkJCWlmICgoKnN0Y2IpLT5z
Y3RwX2VwICE9IGxfaW5wKSB7CisJCQkJCVNDVFBfUFJJTlRGKCJIdWg/IGVwOiVwIGRpZmYgdGhl
biBsX2lucDolcD9cbiIsCisJCQkJCQkgICAgKHZvaWQgKikoKnN0Y2IpLT5zY3RwX2VwLCAodm9p
ZCAqKWxfaW5wKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwljb29raWVfbGVuIC09IFNDVFBf
U0lHTkFUVVJFX1NJWkU7CisJaWYgKCpzdGNiID09IE5VTEwpIHsKKwkJLyogdGhpcyBpcyB0aGUg
Im5vcm1hbCIgY2FzZS4uLiBnZXQgYSBuZXcgVENCICovCisJCSpzdGNiID0gc2N0cF9wcm9jZXNz
X2Nvb2tpZV9uZXcobSwgaXBobGVuLCBvZmZzZXQsIHNyYywgZHN0LCBzaCwKKwkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb29raWUsIGNvb2tpZV9sZW4sICppbnBfcCwKKwkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRwLCB0bywgJm5vdGlmaWNhdGlvbiwKKwkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX3NraXBwZWQsIGF1dGhfb2Zmc2V0
LCBhdXRoX2xlbiwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZs
b3dpZCwKKyNlbmRpZgorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCwg
cG9ydCk7CisJfSBlbHNlIHsKKwkJLyogdGhpcyBpcyBhYm5vcm1hbC4uLiBjb29raWUtZWNobyBv
biBleGlzdGluZyBUQ0IgKi8KKwkJaGFkX2FfZXhpc3RpbmdfdGNiID0gMTsKKwkJKnN0Y2IgPSBz
Y3RwX3Byb2Nlc3NfY29va2llX2V4aXN0aW5nKG0sIGlwaGxlbiwgb2Zmc2V0LAorCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjLCBkc3QsIHNoLAorCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2llLCBjb29raWVfbGVuLCAqaW5wX3AsICpz
dGNiLCBuZXRwLCB0bywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZu
b3RpZmljYXRpb24sIGF1dGhfc2tpcHBlZCwgYXV0aF9vZmZzZXQsIGF1dGhfbGVuLAorI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCisjZW5kaWYK
KwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7CisJ
CWlmICgqc3RjYiA9PSBOVUxMKSB7CisJCQkqbG9ja2VkX3RjYiA9IE5VTEw7CisJCX0KKwl9CisK
KwlpZiAoKnN0Y2IgPT0gTlVMTCkgeworCQkvKiBzdGlsbCBubyBUQ0IuLi4gbXVzdCBiZSBiYWQg
Y29va2llLWVjaG8gKi8KKwkJcmV0dXJuIChOVUxMKTsKKwl9CisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlpZiAoKm5ldHAgIT0gTlVMTCkgewor
CQkoKm5ldHApLT5mbG93dHlwZSA9IG1mbG93dHlwZTsKKwkJKCpuZXRwKS0+Zmxvd2lkID0gbWZs
b3dpZDsKKwl9CisjZW5kaWYKKwkvKgorCSAqIE9rLCB3ZSBidWlsdCBhbiBhc3NvY2lhdGlvbiBz
byBjb25maXJtIHRoZSBhZGRyZXNzIHdlIHNlbnQgdGhlCisJICogSU5JVC1BQ0sgdG8uCisJICov
CisJbmV0bCA9IHNjdHBfZmluZG5ldCgqc3RjYiwgdG8pOworCS8qCisJICogVGhpcyBjb2RlIHNo
b3VsZCBpbiB0aGVvcnkgTk9UIHJ1biBidXQKKwkgKi8KKwlpZiAobmV0bCA9PSBOVUxMKSB7CisJ
CS8qIFRTTkghIEh1aCwgd2h5IGRvIEkgbmVlZCB0byBhZGQgdGhpcyBhZGRyZXNzIGhlcmU/ICov
CisJCWlmIChzY3RwX2FkZF9yZW1vdGVfYWRkcigqc3RjYiwgdG8sIE5VTEwsIHBvcnQsCisJCSAg
ICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0RPTk9UX1NFVFNDT1BFLCBTQ1RQX0lOX0NPT0tJ
RV9QUk9DKSkgeworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQluZXRsID0gc2N0cF9maW5kbmV0
KCpzdGNiLCB0byk7CisJfQorCWlmIChuZXRsKSB7CisJCWlmIChuZXRsLT5kZXN0X3N0YXRlICYg
U0NUUF9BRERSX1VOQ09ORklSTUVEKSB7CisJCQluZXRsLT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FE
RFJfVU5DT05GSVJNRUQ7CisJCQkodm9pZClzY3RwX3NldF9wcmltYXJ5X2FkZHIoKCpzdGNiKSwg
KHN0cnVjdCBzb2NrYWRkciAqKU5VTEwsCisJCQkgICAgbmV0bCk7CisJCQlzZW5kX2ludF9jb25m
ID0gMTsKKwkJfQorCX0KKwlzY3RwX3N0YXJ0X25ldF90aW1lcnMoKnN0Y2IpOworCWlmICgoKmlu
cF9wKS0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHsKKwkJaWYgKCFoYWRf
YV9leGlzdGluZ190Y2IgfHwKKwkJICAgICgoKCppbnBfcCktPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19DT05ORUNURUQpID09IDApKSB7CisJCQkvKgorCQkJICogSWYgd2UgaGF2ZSBhIE5F
VyBjb29raWUgb3IgdGhlIGNvbm5lY3QgbmV2ZXIKKwkJCSAqIHJlYWNoZWQgdGhlIGNvbm5lY3Rl
ZCBzdGF0ZSBkdXJpbmcgY29sbGlzaW9uIHdlCisJCQkgKiBtdXN0IGRvIHRoZSBUQ1AgYWNjZXB0
IHRoaW5nLgorCQkJICovCisJCQlzdHJ1Y3Qgc29ja2V0ICpzbywgKm9zbzsKKwkJCXN0cnVjdCBz
Y3RwX2lucGNiICppbnA7CisKKwkJCWlmIChub3RpZmljYXRpb24gPT0gU0NUUF9OT1RJRllfQVNT
T0NfUkVTVEFSVCkgeworCQkJCS8qCisJCQkJICogRm9yIGEgcmVzdGFydCB3ZSB3aWxsIGtlZXAg
dGhlIHNhbWUKKwkJCQkgKiBzb2NrZXQsIG5vIG5lZWQgdG8gZG8gYW55dGhpbmcuIEkgVEhJTksh
IQorCQkJCSAqLworCQkJCXNjdHBfdWxwX25vdGlmeShub3RpZmljYXRpb24sICpzdGNiLCAwLCBO
VUxMLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJCWlmIChzZW5kX2ludF9jb25mKSB7CisJCQkJ
CXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9JTlRFUkZBQ0VfQ09ORklSTUVELAorCQkJCQkg
ICAgICAgICAgICAgICAgKCpzdGNiKSwgMCwgKHZvaWQgKiluZXRsLCBTQ1RQX1NPX05PVF9MT0NL
RUQpOworCQkJCX0KKwkJCQlyZXR1cm4gKG0pOworCQkJfQorCQkJb3NvID0gKCppbnBfcCktPnNj
dHBfc29ja2V0OworCQkJYXRvbWljX2FkZF9pbnQoJigqc3RjYiktPmFzb2MucmVmY250LCAxKTsK
KwkJCVNDVFBfVENCX1VOTE9DSygoKnN0Y2IpKTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAm
JiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJQ1VSVk5FVF9TRVQob3NvLT5zb192bmV0KTsK
KyNlbmRpZgorI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorCQkJU0NUUF9TT0NLRVRfTE9DSyhvc28sIDEpOworI2VuZGlmCisJCQlzbyA9IHNvbmV3Y29u
bihvc28sIDAKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwkJCSAgICAsTlVMTAorI2VuZGlmCisJCQkgICAgKTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVf
XykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCVNDVFBfU09DS0VUX1VOTE9DSyhvc28s
IDEpOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKwkJCUNVUlZORVRfUkVTVE9SRSgpOworI2VuZGlmCisJCQlTQ1RQX1RDQl9MT0NL
KCgqc3RjYikpOworCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmKCpzdGNiKS0+YXNvYy5yZWZjbnQs
IDEpOworCisJCQlpZiAoc28gPT0gTlVMTCkgeworCQkJCXN0cnVjdCBtYnVmICpvcF9lcnI7Cisj
aWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJc3Ry
dWN0IHNvY2tldCAqcGNiX3NvOworI2VuZGlmCisJCQkJLyogVG9vIG1hbnkgc29ja2V0cyAqLwor
CQkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsICJwcm9jZXNzX2Nvb2tpZV9uZXc6IG5vIHJv
b20gZm9yIGFub3RoZXIgc29ja2V0IVxuIik7CisJCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9j
YXVzZShTQ1RQX0NBVVNFX09VVF9PRl9SRVNDLCAiIik7CisJCQkJc2N0cF9hYm9ydF9hc3NvY2lh
dGlvbigqaW5wX3AsIE5VTEwsIG0sIGlwaGxlbiwKKwkJCQkJCSAgICAgICBzcmMsIGRzdCwgc2gs
IG9wX2VyciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAorI2Vu
ZGlmCisJCQkJICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOworI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCXBjYl9zbyA9IFND
VFBfSU5QX1NPKCppbnBfcCk7CisJCQkJYXRvbWljX2FkZF9pbnQoJigqc3RjYiktPmFzb2MucmVm
Y250LCAxKTsKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soKCpzdGNiKSk7CisJCQkJU0NUUF9TT0NLRVRf
TE9DSyhwY2Jfc28sIDEpOworCQkJCVNDVFBfVENCX0xPQ0soKCpzdGNiKSk7CisJCQkJYXRvbWlj
X3N1YnRyYWN0X2ludCgmKCpzdGNiKS0+YXNvYy5yZWZjbnQsIDEpOworI2VuZGlmCisJCQkJKHZv
aWQpc2N0cF9mcmVlX2Fzc29jKCppbnBfcCwgKnN0Y2IsIFNDVFBfTk9STUFMX1BST0MsCisJCQkJ
ICAgICAgICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfMjMp
OworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJ
CVNDVFBfU09DS0VUX1VOTE9DSyhwY2Jfc28sIDEpOworI2VuZGlmCisJCQkJcmV0dXJuIChOVUxM
KTsKKwkJCX0KKwkJCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7CisJCQlT
Q1RQX0lOUF9JTkNSX1JFRihpbnApOworCQkJLyoKKwkJCSAqIFdlIGFkZCB0aGUgdW5ib3VuZCBm
bGFnIGhlcmUgc28gdGhhdAorCQkJICogaWYgd2UgZ2V0IGFuIHNvYWJvcnQoKSBiZWZvcmUgd2Ug
Z2V0IHRoZQorCQkJICogbW92ZV9wY2IgZG9uZSwgd2Ugd2lsbCBwcm9wZXJseSBjbGVhbnVwLgor
CQkJICovCisJCQlpbnAtPnNjdHBfZmxhZ3MgPSAoU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSB8CisJ
CQkgICAgU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEIHwKKwkJCSAgICBTQ1RQX1BDQl9GTEFHU19J
Tl9UQ1BQT09MIHwKKwkJCSAgICBTQ1RQX1BDQl9GTEFHU19VTkJPVU5EIHwKKwkJCSAgICAoU0NU
UF9QQ0JfQ09QWV9GTEFHUyAmICgqaW5wX3ApLT5zY3RwX2ZsYWdzKSB8CisJCQkgICAgU0NUUF9Q
Q0JfRkxBR1NfRE9OVF9XQUtFKTsKKwkJCWlucC0+c2N0cF9mZWF0dXJlcyA9ICgqaW5wX3ApLT5z
Y3RwX2ZlYXR1cmVzOworCQkJaW5wLT5zY3RwX21vYmlsaXR5X2ZlYXR1cmVzID0gKCppbnBfcCkt
PnNjdHBfbW9iaWxpdHlfZmVhdHVyZXM7CisJCQlpbnAtPnNjdHBfc29ja2V0ID0gc287CisJCQlp
bnAtPnNjdHBfZnJhZ19wb2ludCA9ICgqaW5wX3ApLT5zY3RwX2ZyYWdfcG9pbnQ7CisJCQlpbnAt
Pm1heF9jd25kID0gKCppbnBfcCktPm1heF9jd25kOworCQkJaW5wLT5zY3RwX2NtdF9vbl9vZmYg
PSAoKmlucF9wKS0+c2N0cF9jbXRfb25fb2ZmOworCQkJaW5wLT5lY25fc3VwcG9ydGVkID0gKCpp
bnBfcCktPmVjbl9zdXBwb3J0ZWQ7CisJCQlpbnAtPnByc2N0cF9zdXBwb3J0ZWQgPSAoKmlucF9w
KS0+cHJzY3RwX3N1cHBvcnRlZDsKKwkJCWlucC0+YXV0aF9zdXBwb3J0ZWQgPSAoKmlucF9wKS0+
YXV0aF9zdXBwb3J0ZWQ7CisJCQlpbnAtPmFzY29uZl9zdXBwb3J0ZWQgPSAoKmlucF9wKS0+YXNj
b25mX3N1cHBvcnRlZDsKKwkJCWlucC0+cmVjb25maWdfc3VwcG9ydGVkID0gKCppbnBfcCktPnJl
Y29uZmlnX3N1cHBvcnRlZDsKKwkJCWlucC0+bnJzYWNrX3N1cHBvcnRlZCA9ICgqaW5wX3ApLT5u
cnNhY2tfc3VwcG9ydGVkOworCQkJaW5wLT5wa3Rkcm9wX3N1cHBvcnRlZCA9ICgqaW5wX3ApLT5w
a3Rkcm9wX3N1cHBvcnRlZDsKKwkJCWlucC0+cGFydGlhbF9kZWxpdmVyeV9wb2ludCA9ICgqaW5w
X3ApLT5wYXJ0aWFsX2RlbGl2ZXJ5X3BvaW50OworCQkJaW5wLT5zY3RwX2NvbnRleHQgPSAoKmlu
cF9wKS0+c2N0cF9jb250ZXh0OworCQkJaW5wLT5sb2NhbF9zdHJyZXNldF9zdXBwb3J0ID0gKCpp
bnBfcCktPmxvY2FsX3N0cnJlc2V0X3N1cHBvcnQ7CisJCQlpbnAtPmZpYm51bSA9ICgqaW5wX3Ap
LT5maWJudW07CisJCQlpbnAtPmlucF9zdGFydGluZ19wb2ludF9mb3JfaXRlcmF0b3IgPSBOVUxM
OworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCWlucC0+dWxwX2luZm8gPSAoKmlucF9w
KS0+dWxwX2luZm87CisJCQlpbnAtPnJlY3ZfY2FsbGJhY2sgPSAoKmlucF9wKS0+cmVjdl9jYWxs
YmFjazsKKwkJCWlucC0+c2VuZF9jYWxsYmFjayA9ICgqaW5wX3ApLT5zZW5kX2NhbGxiYWNrOwor
CQkJaW5wLT5zZW5kX3NiX3RocmVzaG9sZCA9ICgqaW5wX3ApLT5zZW5kX3NiX3RocmVzaG9sZDsK
KyNlbmRpZgorCQkJLyoKKwkJCSAqIGNvcHkgaW4gdGhlIGF1dGhlbnRpY2F0aW9uIHBhcmFtZXRl
cnMgZnJvbSB0aGUKKwkJCSAqIG9yaWdpbmFsIGVuZHBvaW50CisJCQkgKi8KKwkJCWlmIChpbnAt
PnNjdHBfZXAubG9jYWxfaG1hY3MpCisJCQkJc2N0cF9mcmVlX2htYWNsaXN0KGlucC0+c2N0cF9l
cC5sb2NhbF9obWFjcyk7CisJCQlpbnAtPnNjdHBfZXAubG9jYWxfaG1hY3MgPQorCQkJICAgIHNj
dHBfY29weV9obWFjbGlzdCgoKmlucF9wKS0+c2N0cF9lcC5sb2NhbF9obWFjcyk7CisJCQlpZiAo
aW5wLT5zY3RwX2VwLmxvY2FsX2F1dGhfY2h1bmtzKQorCQkJCXNjdHBfZnJlZV9jaHVua2xpc3Qo
aW5wLT5zY3RwX2VwLmxvY2FsX2F1dGhfY2h1bmtzKTsKKwkJCWlucC0+c2N0cF9lcC5sb2NhbF9h
dXRoX2NodW5rcyA9CisJCQkgICAgc2N0cF9jb3B5X2NodW5rbGlzdCgoKmlucF9wKS0+c2N0cF9l
cC5sb2NhbF9hdXRoX2NodW5rcyk7CisKKwkJCS8qCisJCQkgKiBOb3cgd2UgbXVzdCBtb3ZlIGl0
IGZyb20gb25lIGhhc2ggdGFibGUgdG8KKwkJCSAqIGFub3RoZXIgYW5kIGdldCB0aGUgdGNiIGlu
IHRoZSByaWdodCBwbGFjZS4KKwkJCSAqLworCisJCQkvKiBUaGlzIGlzIHdoZXJlIHRoZSBvbmUt
Mi1vbmUgc29ja2V0IGlzIHB1dCBpbnRvCisJCQkgKiB0aGUgYWNjZXB0IHN0YXRlIHdhaXRpbmcg
Zm9yIHRoZSBhY2NlcHQhCisJCQkgKi8KKwkJCWlmICgqc3RjYikgeworCQkJCVNDVFBfQUREX1NV
QlNUQVRFKCpzdGNiLCBTQ1RQX1NUQVRFX0lOX0FDQ0VQVF9RVUVVRSk7CisJCQl9CisJCQlzY3Rw
X21vdmVfcGNiX2FuZF9hc3NvYygqaW5wX3AsIGlucCwgKnN0Y2IpOworCisJCQlhdG9taWNfYWRk
X2ludCgmKCpzdGNiKS0+YXNvYy5yZWZjbnQsIDEpOworCQkJU0NUUF9UQ0JfVU5MT0NLKCgqc3Rj
YikpOworCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwkJCXNjdHBfcHVsbF9vZmZfY29udHJvbF90b19uZXdfaW5wKCgqaW5wX3ApLCBpbnAsICpz
dGNiLAorCQkJICAgIDApOworI2Vsc2UKKwkJCXNjdHBfcHVsbF9vZmZfY29udHJvbF90b19uZXdf
aW5wKCgqaW5wX3ApLCBpbnAsICpzdGNiLCBNX05PV0FJVCk7CisjZW5kaWYKKwkJCVNDVFBfVENC
X0xPQ0soKCpzdGNiKSk7CisJCQlhdG9taWNfc3VidHJhY3RfaW50KCYoKnN0Y2IpLT5hc29jLnJl
ZmNudCwgMSk7CisKKwkJCS8qIG5vdyB3ZSBtdXN0IGNoZWNrIHRvIHNlZSBpZiB3ZSB3ZXJlIGFi
b3J0ZWQgd2hpbGUKKwkJCSAqIHRoZSBtb3ZlIHdhcyBnb2luZyBvbiBhbmQgdGhlIGxvY2svdW5s
b2NrIGhhcHBlbmVkLgorCQkJICovCisJCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfU09DS0VUX0dPTkUpIHsKKwkJCQkvKiB5ZXAgaXQgd2FzLCB3ZSBsZWF2ZSB0aGUKKwkJ
CQkgKiBhc3NvYyBhdHRhY2hlZCB0byB0aGUgc29ja2V0IHNpbmNlCisJCQkJICogdGhlIHNjdHBf
aW5wY2JfZnJlZSgpIGNhbGwgd2lsbCBzZW5kCisJCQkJICogYW4gYWJvcnQgZm9yIHVzLgorCQkJ
CSAqLworCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJ
CX0KKwkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQkvKiBTd2l0Y2ggb3ZlciB0byB0aGUg
bmV3IGd1eSAqLworCQkJKmlucF9wID0gaW5wOworCQkJc2N0cF91bHBfbm90aWZ5KG5vdGlmaWNh
dGlvbiwgKnN0Y2IsIDAsIE5VTEwsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQlpZiAoc2VuZF9p
bnRfY29uZikgeworCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9JTlRFUkZBQ0VfQ09O
RklSTUVELAorCQkJCSAgICAgICAgICAgICAgICAoKnN0Y2IpLCAwLCAodm9pZCAqKW5ldGwsIFND
VFBfU09fTk9UX0xPQ0tFRCk7CisJCQl9CisKKwkJCS8qIFB1bGwgaXQgZnJvbSB0aGUgaW5jb21w
bGV0ZSBxdWV1ZSBhbmQgd2FrZSB0aGUgZ3V5ICovCisjaWYgZGVmaW5lZChfX0FQUExFX18pICYm
ICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQlhdG9taWNfYWRkX2ludCgmKCpzdGNiKS0+YXNv
Yy5yZWZjbnQsIDEpOworCQkJU0NUUF9UQ0JfVU5MT0NLKCgqc3RjYikpOworCQkJU0NUUF9TT0NL
RVRfTE9DSyhzbywgMSk7CisjZW5kaWYKKwkJCXNvaXNjb25uZWN0ZWQoc28pOworI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJU0NUUF9UQ0JfTE9D
SygoKnN0Y2IpKTsKKwkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJigqc3RjYiktPmFzb2MucmVmY250
LCAxKTsKKwkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisjZW5kaWYKKwkJCXJldHVybiAo
bSk7CisJCX0KKwl9CisJaWYgKG5vdGlmaWNhdGlvbikgeworCQlzY3RwX3VscF9ub3RpZnkobm90
aWZpY2F0aW9uLCAqc3RjYiwgMCwgTlVMTCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwl9CisJaWYg
KHNlbmRfaW50X2NvbmYpIHsKKwkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0lOVEVSRkFD
RV9DT05GSVJNRUQsCisJCSAgICAgICAgICAgICAgICAoKnN0Y2IpLCAwLCAodm9pZCAqKW5ldGws
IFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJfQorCXJldHVybiAobSk7Cit9CisKK3N0YXRpYyB2b2lk
CitzY3RwX2hhbmRsZV9jb29raWVfYWNrKHN0cnVjdCBzY3RwX2Nvb2tpZV9hY2tfY2h1bmsgKmNw
IFNDVFBfVU5VU0VELAorICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0
cyAqbmV0KQoreworCS8qIGNwIG11c3Qgbm90IGJlIHVzZWQsIG90aGVycyBjYWxsIHRoaXMgd2l0
aG91dCBhIGMtYWNrIDotKSAqLworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOworCXN0
cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKKworCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDIs
CisJCSJzY3RwX2hhbmRsZV9jb29raWVfYWNrOiBoYW5kbGluZyBDT09LSUUtQUNLXG4iKTsKKwlp
ZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKG5ldCA9PSBOVUxMKSkgeworCQlyZXR1cm47CisJfQorCisJ
YXNvYyA9ICZzdGNiLT5hc29jOworCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19s
ZXZlbCkgJiBTQ1RQX1RIUkVTSE9MRF9MT0dHSU5HKSB7CisJCXNjdHBfbWlzY19pbnRzKFNDVFBf
VEhSRVNIT0xEX0NMRUFSLAorCQkJICAgICAgIGFzb2MtPm92ZXJhbGxfZXJyb3JfY291bnQsCisJ
CQkgICAgICAgMCwKKwkJCSAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCwKKwkJCSAgICAgICBf
X0xJTkVfXyk7CisJfQorCWFzb2MtPm92ZXJhbGxfZXJyb3JfY291bnQgPSAwOworCXNjdHBfc3Rv
cF9hbGxfY29va2llX3RpbWVycyhzdGNiKTsKKwkvKiBwcm9jZXNzIGFjY29yZGluZyB0byBhc3Nv
Y2lhdGlvbiBzdGF0ZSAqLworCWlmIChTQ1RQX0dFVF9TVEFURShzdGNiKSA9PSBTQ1RQX1NUQVRF
X0NPT0tJRV9FQ0hPRUQpIHsKKwkJLyogc3RhdGUgY2hhbmdlIG9ubHkgbmVlZGVkIHdoZW4gSSBh
bSBpbiByaWdodCBzdGF0ZSAqLworCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQyLCAibW92aW5n
IHRvIE9QRU4gc3RhdGVcbiIpOworCQlTQ1RQX1NFVF9TVEFURShzdGNiLCBTQ1RQX1NUQVRFX09Q
RU4pOworCQlzY3RwX3N0YXJ0X25ldF90aW1lcnMoc3RjYik7CisJCWlmIChhc29jLT5zdGF0ZSAm
IFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykgeworCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQ
X1RJTUVSX1RZUEVfU0hVVERPV05HVUFSRCwKKwkJCSAgICAgICAgICAgICAgICAgc3RjYi0+c2N0
cF9lcCwgc3RjYiwgTlVMTCk7CisJCX0KKwkJLyogdXBkYXRlIFJUTyAqLworCQlTQ1RQX1NUQVRf
SU5DUl9DT1VOVEVSMzIoc2N0cHNfYWN0aXZlZXN0YWIpOworCQlTQ1RQX1NUQVRfSU5DUl9HQVVH
RTMyKHNjdHBzX2N1cnJlc3RhYik7CisJCWlmIChhc29jLT5vdmVyYWxsX2Vycm9yX2NvdW50ID09
IDApIHsKKwkJCXNjdHBfY2FsY3VsYXRlX3J0byhzdGNiLCBhc29jLCBuZXQsICZhc29jLT50aW1l
X2VudGVyZWQsCisJCQkgICAgICAgICAgICAgICAgICAgU0NUUF9SVFRfRlJPTV9OT05fREFUQSk7
CisJCX0KKwkJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJmFzb2MtPnRpbWVfZW50ZXJlZCk7
CisJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9BU1NPQ19VUCwgc3RjYiwgMCwgTlVMTCwg
U0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJaWYgKChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJICAgIChzdGNiLT5zY3RwX2VwLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkpIHsKKyNpZiBkZWZpbmVkKF9fQVBQTEVf
XykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCXN0cnVjdCBzb2NrZXQgKnNvOworCisj
ZW5kaWYKKwkJCXN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgfD0gU0NUUF9QQ0JfRkxBR1NfQ09O
TkVDVEVEOworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorCQkJc28gPSBTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKTsKKwkJCWF0b21pY19hZGRfaW50
KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQlT
Q1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKKwkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQlhdG9t
aWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisjZW5kaWYKKwkJCWlmICgo
c3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQ0xPU0VEX1NPQ0tFVCkgPT0gMCkgeworCQkJ
CXNvaXNjb25uZWN0ZWQoc3RjYi0+c2N0cF9zb2NrZXQpOworCQkJfQorI2lmIGRlZmluZWQoX19B
UFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJU0NUUF9TT0NLRVRfVU5MT0NL
KHNvLCAxKTsKKyNlbmRpZgorCQl9CisJCS8qCisJCSAqIHNpbmNlIHdlIGRpZCBub3Qgc2VuZCBh
IEhCIG1ha2Ugc3VyZSB3ZSBkb24ndCBkb3VibGUKKwkJICogdGhpbmdzCisJCSAqLworCQluZXQt
PmhiX3Jlc3BvbmRlZCA9IDE7CisKKwkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRF
X0NMT1NFRF9TT0NLRVQpIHsKKwkJCS8qIFdlIGRvbid0IG5lZWQgdG8gZG8gdGhlIGFzY29uZiB0
aGluZywKKwkJCSAqIG5vciBoYiBvciBhdXRvY2xvc2UgaWYgdGhlIHNvY2tldCBpcyBjbG9zZWQu
CisJCQkgKi8KKwkJCWdvdG8gY2xvc2VkX3NvY2tldDsKKwkJfQorCisJCXNjdHBfdGltZXJfc3Rh
cnQoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgc3RjYi0+c2N0cF9lcCwKKwkJICAgIHN0Y2Is
IG5ldCk7CisKKwkJaWYgKHN0Y2ItPmFzb2Muc2N0cF9hdXRvY2xvc2VfdGlja3MgJiYKKwkJICAg
IHNjdHBfaXNfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLCBTQ1RQX1BDQl9GTEFHU19BVVRPQ0xP
U0UpKSB7CisJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9BVVRPQ0xPU0UsCisJ
CQkgICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgTlVMTCk7CisJCX0KKwkJLyoKKwkJICogc2VuZCBB
U0NPTkYgaWYgcGFyYW1ldGVycyBhcmUgcGVuZGluZyBhbmQgQVNDT05GcyBhcmUKKwkJICogYWxs
b3dlZCAoZWcuIGFkZHJlc3NlcyBjaGFuZ2VkIHdoZW4gaW5pdC9jb29raWUgZWNobyB3ZXJlCisJ
CSAqIGluIGZsaWdodCkKKwkJICovCisJCWlmICgoc2N0cF9pc19mZWF0dXJlX29uKHN0Y2ItPnNj
dHBfZXAsIFNDVFBfUENCX0ZMQUdTX0RPX0FTQ09ORikpICYmCisJCSAgICAoc3RjYi0+YXNvYy5h
c2NvbmZfc3VwcG9ydGVkID09IDEpICYmCisJCSAgICAoIVRBSUxRX0VNUFRZKCZzdGNiLT5hc29j
LmFzY29uZl9xdWV1ZSkpKSB7CisjaWZkZWYgU0NUUF9USU1FUl9CQVNFRF9BU0NPTkYKKwkJCXNj
dHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0FTQ09ORiwKKwkJCQkJIHN0Y2ItPnNjdHBf
ZXAsIHN0Y2IsCisJCQkJCSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24pOworI2Vsc2UK
KwkJCXNjdHBfc2VuZF9hc2NvbmYoc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9u
LAorCQkJCQkgU0NUUF9BRERSX05PVF9MT0NLRUQpOworI2VuZGlmCisJCX0KKwl9CitjbG9zZWRf
c29ja2V0OgorCS8qIFRvc3MgdGhlIGNvb2tpZSBpZiBJIGNhbiAqLworCXNjdHBfdG9zc19vbGRf
Y29va2llcyhzdGNiLCBhc29jKTsKKwkvKiBSZXN0YXJ0IHRoZSB0aW1lciBpZiB3ZSBoYXZlIHBl
bmRpbmcgZGF0YSAqLworCVRBSUxRX0ZPUkVBQ0goY2hrLCAmYXNvYy0+c2VudF9xdWV1ZSwgc2N0
cF9uZXh0KSB7CisJCWlmIChjaGstPndob1RvICE9IE5VTEwpIHsKKwkJCWJyZWFrOworCQl9CisJ
fQorCWlmIChjaGsgIT0gTlVMTCkgeworCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQ
RV9TRU5ELCBzdGNiLT5zY3RwX2VwLCBzdGNiLCBjaGstPndob1RvKTsKKwl9Cit9CisKK3N0YXRp
YyB2b2lkCitzY3RwX2hhbmRsZV9lY25fZWNobyhzdHJ1Y3Qgc2N0cF9lY25lX2NodW5rICpjcCwK
KwkJICAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCit7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0
OworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmxjaGs7CisJc3RydWN0IHNjdHBfZWNuZV9jaHVu
ayBia3VwOworCXVpbnQ4X3Qgb3ZlcnJpZGVfYml0OworCXVpbnQzMl90IHRzbiwgd2luZG93X2Rh
dGFfdHNuOworCWludCBsZW47CisJdW5zaWduZWQgaW50IHBrdF9jbnQ7CisKKwlsZW4gPSBudG9o
cyhjcC0+Y2guY2h1bmtfbGVuZ3RoKTsKKwlpZiAoKGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBf
ZWNuZV9jaHVuaykpICYmCisJICAgIChsZW4gIT0gc2l6ZW9mKHN0cnVjdCBvbGRfc2N0cF9lY25l
X2NodW5rKSkpIHsKKwkJcmV0dXJuOworCX0KKwlpZiAobGVuID09IHNpemVvZihzdHJ1Y3Qgb2xk
X3NjdHBfZWNuZV9jaHVuaykpIHsKKwkJLyogSXRzIHRoZSBvbGQgZm9ybWF0ICovCisJCW1lbWNw
eSgmYmt1cCwgY3AsIHNpemVvZihzdHJ1Y3Qgb2xkX3NjdHBfZWNuZV9jaHVuaykpOworCQlia3Vw
Lm51bV9wa3RzX3NpbmNlX2N3ciA9IGh0b25sKDEpOworCQljcCA9ICZia3VwOworCX0KKwlTQ1RQ
X1NUQVRfSU5DUihzY3Rwc19yZWN2ZWNuZSk7CisJdHNuID0gbnRvaGwoY3AtPnRzbik7CisJcGt0
X2NudCA9IG50b2hsKGNwLT5udW1fcGt0c19zaW5jZV9jd3IpOworCWxjaGsgPSBUQUlMUV9MQVNU
KCZzdGNiLT5hc29jLnNlbmRfcXVldWUsIHNjdHBjaHVua19saXN0aGVhZCk7CisJaWYgKGxjaGsg
PT0gTlVMTCkgeworCQl3aW5kb3dfZGF0YV90c24gPSBzdGNiLT5hc29jLnNlbmRpbmdfc2VxIC0g
MTsKKwl9IGVsc2UgeworCQl3aW5kb3dfZGF0YV90c24gPSBsY2hrLT5yZWMuZGF0YS50c247CisJ
fQorCisJLyogRmluZCB3aGVyZSBpdCB3YXMgc2VudCB0byBpZiBwb3NzaWJsZS4gKi8KKwluZXQg
PSBOVUxMOworCVRBSUxRX0ZPUkVBQ0gobGNoaywgJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSwgc2N0
cF9uZXh0KSB7CisJCWlmIChsY2hrLT5yZWMuZGF0YS50c24gPT0gdHNuKSB7CisJCQluZXQgPSBs
Y2hrLT53aG9UbzsKKwkJCW5ldC0+ZWNuX3ByZXZfY3duZCA9IGxjaGstPnJlYy5kYXRhLmN3bmRf
YXRfc2VuZDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChTQ1RQX1RTTl9HVChsY2hrLT5yZWMuZGF0
YS50c24sIHRzbikpIHsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChuZXQgPT0gTlVMTCkgewor
CQkvKgorCQkgKiBXaGF0IHRvIGRvLiBBIHByZXZpb3VzIHNlbmQgb2YgYQorCQkgKiBDV1Igd2Fz
IHBvc3NpYmx5IGxvc3QuIFNlZSBob3cgb2xkIGl0IGlzLCB3ZQorCQkgKiBtYXkgaGF2ZSBpdCBt
YXJrZWQgb24gdGhlIGFjdHVhbCBuZXQuCisJCSAqLworCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0
Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQlpZiAodHNuID09IG5ldC0+bGFzdF9jd3Jf
dHNuKSB7CisJCQkJLyogRm91bmQgaGltLCBzZW5kIGl0IG9mZiAqLworCQkJCWJyZWFrOworCQkJ
fQorCQl9CisJCWlmIChuZXQgPT0gTlVMTCkgeworCQkJLyoKKwkJCSAqIElmIHdlIHJlYWNoIGhl
cmUsIHdlIG5lZWQgdG8gc2VuZCBhIHNwZWNpYWwKKwkJCSAqIENXUiB0aGF0IHNheXMgaGV5LCB3
ZSBkaWQgdGhpcyBhIGxvbmcgdGltZQorCQkJICogYWdvIGFuZCB5b3UgbG9zdCB0aGUgcmVzcG9u
c2UuCisJCQkgKi8KKwkJCW5ldCA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMpOworCQkJ
aWYgKG5ldCA9PSBOVUxMKSB7CisJCQkJLyogVFNOSCAqLworCQkJCXJldHVybjsKKwkJCX0KKwkJ
CW92ZXJyaWRlX2JpdCA9IFNDVFBfQ1dSX1JFRFVDRV9PVkVSUklERTsKKwkJfSBlbHNlIHsKKwkJ
CW92ZXJyaWRlX2JpdCA9IDA7CisJCX0KKwl9IGVsc2UgeworCQlvdmVycmlkZV9iaXQgPSAwOwor
CX0KKwlpZiAoU0NUUF9UU05fR1QodHNuLCBuZXQtPmN3cl93aW5kb3dfdHNuKSAmJgorCSAgICAo
KG92ZXJyaWRlX2JpdCZTQ1RQX0NXUl9SRURVQ0VfT1ZFUlJJREUpID09IDApKSB7CisJCS8qIEpS
UyAtIFVzZSB0aGUgY29uZ2VzdGlvbiBjb250cm9sIGdpdmVuIGluIHRoZSBwbHVnZ2FibGUgQ0Mg
bW9kdWxlICovCisJCXN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF91cGRhdGVfYWZ0
ZXJfZWNuX2VjaG8oc3RjYiwgbmV0LCAwLCBwa3RfY250KTsKKwkJLyoKKwkJICogV2UgcmVkdWNl
IG9uY2UgZXZlcnkgUlRULiBTbyB3ZSB3aWxsIG9ubHkgbG93ZXIgY3duZCBhdAorCQkgKiB0aGUg
bmV4dCBzZW5kaW5nIHNlcSBpLmUuIHRoZSB3aW5kb3dfZGF0YV90c24KKwkJICovCisJCW5ldC0+
Y3dyX3dpbmRvd190c24gPSB3aW5kb3dfZGF0YV90c247CisJCW5ldC0+ZWNuX2NlX3BrdF9jbnQg
Kz0gcGt0X2NudDsKKwkJbmV0LT5sb3N0X2NudCA9IHBrdF9jbnQ7CisJCW5ldC0+bGFzdF9jd3Jf
dHNuID0gdHNuOworCX0gZWxzZSB7CisJCW92ZXJyaWRlX2JpdCB8PSBTQ1RQX0NXUl9JTl9TQU1F
X1dJTkRPVzsKKwkJaWYgKFNDVFBfVFNOX0dUKHRzbiwgbmV0LT5sYXN0X2N3cl90c24pICYmCisJ
CSAgICAoKG92ZXJyaWRlX2JpdCZTQ1RQX0NXUl9SRURVQ0VfT1ZFUlJJREUpID09IDApKSB7CisJ
CQkvKgorCQkJICogQW5vdGhlciBsb3NzIGluIHRoZSBzYW1lIHdpbmRvdyB1cGRhdGUgaG93CisJ
CQkgKiBtYW55IG1hcmtzL3BhY2tldHMgbG9zdCB3ZSBoYXZlIGhhZC4KKwkJCSAqLworCQkJaW50
IGNudCA9IDE7CisJCQlpZiAocGt0X2NudCA+IG5ldC0+bG9zdF9jbnQpIHsKKwkJCQkvKiBTaG91
bGQgYmUgdGhlIGNhc2UgKi8KKwkJCQljbnQgPSAocGt0X2NudCAtIG5ldC0+bG9zdF9jbnQpOwor
CQkJCW5ldC0+ZWNuX2NlX3BrdF9jbnQgKz0gY250OworCQkJfQorCQkJbmV0LT5sb3N0X2NudCA9
IHBrdF9jbnQ7CisJCQluZXQtPmxhc3RfY3dyX3RzbiA9IHRzbjsKKwkJCS8qCisJCQkgKiBNb3N0
IENDIGZ1bmN0aW9ucyB3aWxsIGlnbm9yZSB0aGlzIGNhbGwsIHNpbmNlIHdlIGFyZSBpbi13aW5k
b3cKKwkJCSAqIHlldCBvZiB0aGUgaW5pdGlhbCBDRSB0aGUgcGVlciBzYXcuCisJCQkgKi8KKwkJ
CXN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZWNuX2VjaG8o
c3RjYiwgbmV0LCAxLCBjbnQpOworCQl9CisJfQorCS8qCisJICogV2UgYWx3YXlzIHNlbmQgYSBD
V1IgdGhpcyB3YXkgaWYgb3VyIHByZXZpb3VzIG9uZSB3YXMgbG9zdCBvdXIKKwkgKiBwZWVyIHdp
bGwgZ2V0IGFuIHVwZGF0ZSwgb3IgaWYgaXQgaXMgbm90IHRpbWUgYWdhaW4gdG8gcmVkdWNlIHdl
CisJICogc3RpbGwgZ2V0IHRoZSBjd3IgdG8gdGhlIHBlZXIuIE5vdGUgd2Ugc2V0IHRoZSBvdmVy
cmlkZSB3aGVuIHdlCisJICogY291bGQgbm90IGZpbmQgdGhlIFRTTiBvbiB0aGUgY2h1bmsgb3Ig
dGhlIGRlc3RpbmF0aW9uIG5ldHdvcmsuCisJICovCisJc2N0cF9zZW5kX2N3cihzdGNiLCBuZXQs
IG5ldC0+bGFzdF9jd3JfdHNuLCBvdmVycmlkZV9iaXQpOworfQorCitzdGF0aWMgdm9pZAorc2N0
cF9oYW5kbGVfZWNuX2N3cihzdHJ1Y3Qgc2N0cF9jd3JfY2h1bmsgKmNwLCBzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwkvKgorCSAqIEhlcmUgd2UgZ2V0
IGEgQ1dSIGZyb20gdGhlIHBlZXIuIFdlIG11c3QgbG9vayBpbiB0aGUgb3V0cXVldWUgYW5kCisJ
ICogbWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIGNvdmVyZWQgRUNORSBpbiB0aGUgY29udHJvbCBj
aHVuayBwYXJ0LgorCSAqIElmIHNvIHJlbW92ZSBpdC4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF90bWl0
X2NodW5rICpjaGssICpuY2hrOworCXN0cnVjdCBzY3RwX2VjbmVfY2h1bmsgKmVjbmU7CisJaW50
IG92ZXJyaWRlOworCXVpbnQzMl90IGN3cl90c247CisKKwljd3JfdHNuID0gbnRvaGwoY3AtPnRz
bik7CisJb3ZlcnJpZGUgPSBjcC0+Y2guY2h1bmtfZmxhZ3MgJiBTQ1RQX0NXUl9SRURVQ0VfT1ZF
UlJJREU7CisJVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJnN0Y2ItPmFzb2MuY29udHJvbF9zZW5k
X3F1ZXVlLCBzY3RwX25leHQsIG5jaGspIHsKKwkJaWYgKGNoay0+cmVjLmNodW5rX2lkLmlkICE9
IFNDVFBfRUNOX0VDSE8pIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgob3ZlcnJpZGUgPT0g
MCkgJiYgKGNoay0+d2hvVG8gIT0gbmV0KSkgeworCQkJLyogTXVzdCBiZSBmcm9tIHRoZSByaWdo
dCBzcmMgdW5sZXNzIG92ZXJyaWRlIGlzIHNldCAqLworCQkJY29udGludWU7CisJCX0KKwkJZWNu
ZSA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9lY25lX2NodW5rICopOworCQlpZiAoU0NU
UF9UU05fR0UoY3dyX3RzbiwgbnRvaGwoZWNuZS0+dHNuKSkpIHsKKwkJCS8qIHRoaXMgY292ZXJz
IHRoaXMgRUNORSwgd2UgY2FuIHJlbW92ZSBpdCAqLworCQkJc3RjYi0+YXNvYy5lY25fZWNob19j
bnRfb25xLS07CisJCQlUQUlMUV9SRU1PVkUoJnN0Y2ItPmFzb2MuY29udHJvbF9zZW5kX3F1ZXVl
LCBjaGssCisJCQkgICAgc2N0cF9uZXh0KTsKKwkJCXN0Y2ItPmFzb2MuY3RybF9xdWV1ZV9jbnQt
LTsKKwkJCXNjdHBfbV9mcmVlbShjaGstPmRhdGEpOworCQkJY2hrLT5kYXRhID0gTlVMTDsKKwkJ
CXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCWlm
IChvdmVycmlkZSA9PSAwKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRp
YyB2b2lkCitzY3RwX2hhbmRsZV9zaHV0ZG93bl9jb21wbGV0ZShzdHJ1Y3Qgc2N0cF9zaHV0ZG93
bl9jb21wbGV0ZV9jaHVuayAqY3AgU0NUUF9VTlVTRUQsCisgICAgc3RydWN0IHNjdHBfdGNiICpz
dGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYm
ICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJc3RydWN0IHNvY2tldCAqc287CisjZW5kaWYKKwor
CVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDIsCisJCSJzY3RwX2hhbmRsZV9zaHV0ZG93bl9jb21w
bGV0ZTogaGFuZGxpbmcgU0hVVERPV04tQ09NUExFVEVcbiIpOworCWlmIChzdGNiID09IE5VTEwp
CisJCXJldHVybjsKKworCS8qIHByb2Nlc3MgYWNjb3JkaW5nIHRvIGFzc29jaWF0aW9uIHN0YXRl
ICovCisJaWYgKFNDVFBfR0VUX1NUQVRFKHN0Y2IpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fQUNL
X1NFTlQpIHsKKwkJLyogdW5leHBlY3RlZCBTSFVURE9XTi1DT01QTEVURS4uLiBzbyBpZ25vcmUu
Li4gKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwKKwkJCSJzY3RwX2hhbmRsZV9zaHV0
ZG93bl9jb21wbGV0ZTogbm90IGluIFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQgLS0tIGln
bm9yZVxuIik7CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJcmV0dXJuOworCX0KKwkvKiBu
b3RpZnkgdXBwZXIgbGF5ZXIgcHJvdG9jb2wgKi8KKwlpZiAoc3RjYi0+c2N0cF9zb2NrZXQpIHsK
KwkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0FTU09DX0RPV04sIHN0Y2IsIDAsIE5VTEws
IFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJfQorI2lmZGVmIElOVkFSSUFOVFMKKwlpZiAoIVRBSUxR
X0VNUFRZKCZzdGNiLT5hc29jLnNlbmRfcXVldWUpIHx8CisJICAgICFUQUlMUV9FTVBUWSgmc3Rj
Yi0+YXNvYy5zZW50X3F1ZXVlKSB8fAorCSAgICBzY3RwX2lzX3RoZXJlX3Vuc2VudF9kYXRhKHN0
Y2IsIFNDVFBfU09fTk9UX0xPQ0tFRCkpIHsKKwkJcGFuaWMoIlF1ZXVlcyBhcmUgbm90IGVtcHR5
IHdoZW4gaGFuZGxpbmcgU0hVVERPV04tQ09NUExFVEUiKTsKKwl9CisjZW5kaWYKKwkvKiBzdG9w
IHRoZSB0aW1lciAqLworCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05B
Q0ssIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCwKKwkgICAgICAgICAgICAgICAgU0NUUF9GUk9N
X1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ18yNCk7CisJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjMyKHNj
dHBzX3NodXRkb3duKTsKKwkvKiBmcmVlIHRoZSBUQ0IgKi8KKwlTQ1RQREJHKFNDVFBfREVCVUdf
SU5QVVQyLAorCQkic2N0cF9oYW5kbGVfc2h1dGRvd25fY29tcGxldGU6IGNhbGxzIGZyZWUtYXNv
Y1xuIik7CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisJc28gPSBTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKTsKKwlhdG9taWNfYWRkX2ludCgmc3Rj
Yi0+YXNvYy5yZWZjbnQsIDEpOworCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwlTQ1RQX1NPQ0tF
VF9MT0NLKHNvLCAxKTsKKwlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCWF0b21pY19zdWJ0cmFjdF9p
bnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKyNlbmRpZgorCSh2b2lkKXNjdHBfZnJlZV9hc3Nv
YyhzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAorCSAgICAgICAgICAgICAg
ICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzI1KTsKKyNpZiBkZWZpbmVk
KF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlTQ1RQX1NPQ0tFVF9VTkxP
Q0soc28sIDEpOworI2VuZGlmCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50Citwcm9jZXNzX2No
dW5rX2Ryb3Aoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9jaHVua19kZXNjICpk
ZXNjLAorICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgdWludDhfdCBmbGcpCit7CisJc3dpdGNo
IChkZXNjLT5jaHVua190eXBlKSB7CisJY2FzZSBTQ1RQX0RBVEE6CisJY2FzZSBTQ1RQX0lEQVRB
OgorCQkvKiBmaW5kIHRoZSB0c24gdG8gcmVzZW5kIChwb3NzaWJseSkgKi8KKwl7CisJCXVpbnQz
Ml90IHRzbjsKKwkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqdHAxOworCisJCXRzbiA9IG50b2hs
KGRlc2MtPnRzbl9pZmFueSk7CisJCVRBSUxRX0ZPUkVBQ0godHAxLCAmc3RjYi0+YXNvYy5zZW50
X3F1ZXVlLCBzY3RwX25leHQpIHsKKwkJCWlmICh0cDEtPnJlYy5kYXRhLnRzbiA9PSB0c24pIHsK
KwkJCQkvKiBmb3VuZCBpdCAqLworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKFNDVFBfVFNOX0dU
KHRwMS0+cmVjLmRhdGEudHNuLCB0c24pKSB7CisJCQkJLyogbm90IGZvdW5kICovCisJCQkJdHAx
ID0gTlVMTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAodHAxID09IE5VTEwpIHsKKwkJ
CS8qCisJCQkgKiBEbyBpdCB0aGUgb3RoZXIgd2F5ICwgYWthIHdpdGhvdXQgcGF5aW5nCisJCQkg
KiBhdHRlbnRpb24gdG8gcXVldWUgc2VxIG9yZGVyLgorCQkJICovCisJCQlTQ1RQX1NUQVRfSU5D
UihzY3Rwc19wZHJwZG5mbmQpOworCQkJVEFJTFFfRk9SRUFDSCh0cDEsICZzdGNiLT5hc29jLnNl
bnRfcXVldWUsIHNjdHBfbmV4dCkgeworCQkJCWlmICh0cDEtPnJlYy5kYXRhLnRzbiA9PSB0c24p
IHsKKwkJCQkJLyogZm91bmQgaXQgKi8KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJ
CWlmICh0cDEgPT0gTlVMTCkgeworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcGRycHRzbm5mKTsK
KwkJfQorCQlpZiAoKHRwMSkgJiYgKHRwMS0+c2VudCA8IFNDVFBfREFUQUdSQU1fQUNLRUQpKSB7
CisJCQlpZiAoKChmbGcgJiBTQ1RQX0JBRENSQykgPT0gMCkgJiYKKwkJCSAgICAoKGZsZyAmIFND
VFBfRlJPTV9NSURETEVfQk9YKSA9PSAwKSkgeworCQkJCXJldHVybiAoMCk7CisJCQl9CisJCQlp
ZiAoKHN0Y2ItPmFzb2MucGVlcnNfcnduZCA9PSAwKSAmJgorCQkJICAgICgoZmxnICYgU0NUUF9G
Uk9NX01JRERMRV9CT1gpID09IDApKSB7CisJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcGRycGRp
d25wKTsKKwkJCQlyZXR1cm4gKDApOworCQkJfQorCQkJaWYgKHN0Y2ItPmFzb2MucGVlcnNfcndu
ZCA9PSAwICYmCisJCQkgICAgKGZsZyAmIFNDVFBfRlJPTV9NSURETEVfQk9YKSkgeworCQkJCVND
VFBfU1RBVF9JTkNSKHNjdHBzX3BkcnBkaXpydyk7CisJCQkJcmV0dXJuICgwKTsKKwkJCX0KKwkJ
CWlmICgodWludDMyX3QpU0NUUF9CVUZfTEVOKHRwMS0+ZGF0YSkgPAorCQkJICAgIFNDVFBfREFU
QV9DSFVOS19PVkVSSEVBRChzdGNiKSArIFNDVFBfTlVNX0RCX1RPX1ZFUklGWSkgeworCQkJCS8q
IFBheWxvYWQgbm90IG1hdGNoaW5nLiAqLworCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3BkcnBi
YWRkKTsKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJCWlmIChtZW1jbXAobXRvZCh0cDEtPmRh
dGEsIGNhZGRyX3QpICsgU0NUUF9EQVRBX0NIVU5LX09WRVJIRUFEKHN0Y2IpLAorCQkJICAgICAg
ICAgICBkZXNjLT5kYXRhX2J5dGVzLCBTQ1RQX05VTV9EQl9UT19WRVJJRlkpICE9IDApIHsKKwkJ
CQkvKiBQYXlsb2FkIG5vdCBtYXRjaGluZy4gKi8KKwkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19w
ZHJwYmFkZCk7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisJCQlpZiAodHAxLT5kb19ydHQpIHsK
KwkJCQkvKgorCQkJCSAqIHRoaXMgZ3V5IGhhZCBhIFJUTyBjYWxjdWxhdGlvbgorCQkJCSAqIHBl
bmRpbmcgb24gaXQsIGNhbmNlbCBpdAorCQkJCSAqLworCQkJCWlmICh0cDEtPndob1RvLT5ydG9f
bmVlZGVkID09IDApIHsKKwkJCQkJdHAxLT53aG9Uby0+cnRvX25lZWRlZCA9IDE7CisJCQkJfQor
CQkJCXRwMS0+ZG9fcnR0ID0gMDsKKwkJCX0KKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3BkcnBt
YXJrKTsKKwkJCWlmICh0cDEtPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpCisJCQkJc2N0
cF91Y291bnRfaW5jcihzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCk7CisJCQkvKgor
CQkJICogbWFyayBpdCBhcyBpZiB3ZSB3ZXJlIGRvaW5nIGEgRlIsIHNpbmNlCisJCQkgKiB3ZSB3
aWxsIGJlIGdldHRpbmcgZ2FwIGFjayByZXBvcnRzIGJlaGluZAorCQkJICogdGhlIGluZm8gZnJv
bSB0aGUgcm91dGVyLgorCQkJICovCisJCQl0cDEtPnJlYy5kYXRhLmRvaW5nX2Zhc3RfcmV0cmFu
c21pdCA9IDE7CisJCQkvKgorCQkJICogbWFyayB0aGUgdHNuIHdpdGggd2hhdCBzZXF1ZW5jZXMg
Y2FuCisJCQkgKiBjYXVzZSBhIG5ldyBGUi4KKwkJCSAqLworCQkJaWYgKFRBSUxRX0VNUFRZKCZz
dGNiLT5hc29jLnNlbmRfcXVldWUpKSB7CisJCQkJdHAxLT5yZWMuZGF0YS5mYXN0X3JldHJhbl90
c24gPSBzdGNiLT5hc29jLnNlbmRpbmdfc2VxOworCQkJfSBlbHNlIHsKKwkJCQl0cDEtPnJlYy5k
YXRhLmZhc3RfcmV0cmFuX3RzbiA9IChUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5zZW5kX3F1ZXVl
KSktPnJlYy5kYXRhLnRzbjsKKwkJCX0KKworCQkJLyogcmVzdGFydCB0aGUgdGltZXIgKi8KKwkJ
CXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfU0VORCwgc3RjYi0+c2N0cF9lcCwKKwkJ
CQkJc3RjYiwgdHAxLT53aG9UbywKKwkJCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9J
TlBVVCArIFNDVFBfTE9DXzI2KTsKKwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBF
X1NFTkQsIHN0Y2ItPnNjdHBfZXAsCisJCQkJCSBzdGNiLCB0cDEtPndob1RvKTsKKworCQkJLyog
Zml4IGNvdW50cyBhbmQgdGhpbmdzICovCisJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xv
Z2dpbmdfbGV2ZWwpICYgU0NUUF9GTElHSFRfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQlzY3RwX21p
c2NfaW50cyhTQ1RQX0ZMSUdIVF9MT0dfRE9XTl9QRFJQLAorCQkJCQkgICAgICAgdHAxLT53aG9U
by0+ZmxpZ2h0X3NpemUsCisJCQkJCSAgICAgICB0cDEtPmJvb2tfc2l6ZSwKKwkJCQkJICAgICAg
ICh1aW50MzJfdCkodWludHB0cl90KXN0Y2IsCisJCQkJCSAgICAgICB0cDEtPnJlYy5kYXRhLnRz
bik7CisJCQl9CisJCQlpZiAodHAxLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKKwkJ
CQlzY3RwX2ZsaWdodF9zaXplX2RlY3JlYXNlKHRwMSk7CisJCQkJc2N0cF90b3RhbF9mbGlnaHRf
ZGVjcmVhc2Uoc3RjYiwgdHAxKTsKKwkJCX0KKwkJCXRwMS0+c2VudCA9IFNDVFBfREFUQUdSQU1f
UkVTRU5EOworCQl9IHsKKwkJCS8qIGF1ZGl0IGNvZGUgKi8KKwkJCXVuc2lnbmVkIGludCBhdWRp
dDsKKworCQkJYXVkaXQgPSAwOworCQkJVEFJTFFfRk9SRUFDSCh0cDEsICZzdGNiLT5hc29jLnNl
bnRfcXVldWUsIHNjdHBfbmV4dCkgeworCQkJCWlmICh0cDEtPnNlbnQgPT0gU0NUUF9EQVRBR1JB
TV9SRVNFTkQpCisJCQkJCWF1ZGl0Kys7CisJCQl9CisJCQlUQUlMUV9GT1JFQUNIKHRwMSwgJnN0
Y2ItPmFzb2MuY29udHJvbF9zZW5kX3F1ZXVlLAorCQkJCSAgICAgIHNjdHBfbmV4dCkgeworCQkJ
CWlmICh0cDEtPnNlbnQgPT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpCisJCQkJCWF1ZGl0Kys7CisJ
CQl9CisJCQlpZiAoYXVkaXQgIT0gc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpIHsK
KwkJCQlTQ1RQX1BSSU5URigiKipMb2NhbCBBdWRpdCBmaW5kcyBjbnQ6JWQgYXNvYyBjbnQ6JWRc
biIsCisJCQkJCSAgICBhdWRpdCwgc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOwor
I2lmbmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKKwkJCQlzdGNiLT5hc29jLnNlbnRfcXVldWVf
cmV0cmFuX2NudCA9IGF1ZGl0OworI2VuZGlmCisJCQl9CisJCX0KKwl9CisJYnJlYWs7CisJY2Fz
ZSBTQ1RQX0FTQ09ORjoKKwl7CisJCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmFzY29uZjsKKwor
CQlUQUlMUV9GT1JFQUNIKGFzY29uZiwgJnN0Y2ItPmFzb2MuY29udHJvbF9zZW5kX3F1ZXVlLAor
CQkJICAgICAgc2N0cF9uZXh0KSB7CisJCQlpZiAoYXNjb25mLT5yZWMuY2h1bmtfaWQuaWQgPT0g
U0NUUF9BU0NPTkYpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoYXNjb25mKSB7CisJ
CQlpZiAoYXNjb25mLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fUkVTRU5EKQorCQkJCXNjdHBfdWNv
dW50X2luY3Ioc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOworCQkJYXNjb25mLT5z
ZW50ID0gU0NUUF9EQVRBR1JBTV9SRVNFTkQ7CisJCQlhc2NvbmYtPnNuZF9jb3VudC0tOworCQl9
CisJfQorCWJyZWFrOworCWNhc2UgU0NUUF9JTklUSUFUSU9OOgorCQkvKiByZXNlbmQgdGhlIElO
SVQgKi8KKwkJc3RjYi0+YXNvYy5kcm9wcGVkX3NwZWNpYWxfY250Kys7CisJCWlmIChzdGNiLT5h
c29jLmRyb3BwZWRfc3BlY2lhbF9jbnQgPCBTQ1RQX1JFVFJZX0RST1BQRURfVEhSRVNIKSB7CisJ
CQkvKgorCQkJICogSWYgd2UgY2FuIGdldCBpdCBpbiwgaW4gYSBmZXcgYXR0ZW1wdHMgd2UgZG8K
KwkJCSAqIHRoaXMsIG90aGVyd2lzZSB3ZSBsZXQgdGhlIHRpbWVyIGZpcmUuCisJCQkgKi8KKwkJ
CXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfSU5JVCwgc3RjYi0+c2N0cF9lcCwKKwkJ
CQkJc3RjYiwgbmV0LAorCQkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsg
U0NUUF9MT0NfMjcpOworCQkJc2N0cF9zZW5kX2luaXRpYXRlKHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
IFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NFTEVDVElW
RV9BQ0s6CisJY2FzZSBTQ1RQX05SX1NFTEVDVElWRV9BQ0s6CisJCS8qIHJlc2VuZCB0aGUgc2Fj
ayAqLworCQlzY3RwX3NlbmRfc2FjayhzdGNiLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQlicmVh
azsKKwljYXNlIFNDVFBfSEVBUlRCRUFUX1JFUVVFU1Q6CisJCS8qIHJlc2VuZCBhIGRlbWFuZCBI
QiAqLworCQlpZiAoKHN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCArIDMpIDwgc3RjYi0+
YXNvYy5tYXhfc2VuZF90aW1lcykgeworCQkJLyogT25seSByZXRyYW5zbWl0IGlmIHdlIEtOT1cg
d2Ugd29udCBkZXN0cm95IHRoZSB0Y2IgKi8KKwkJCXNjdHBfc2VuZF9oYihzdGNiLCBuZXQsIFND
VFBfU09fTk9UX0xPQ0tFRCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NIVVRET1dOOgor
CQlzY3RwX3NlbmRfc2h1dGRvd24oc3RjYiwgbmV0KTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NI
VVRET1dOX0FDSzoKKwkJc2N0cF9zZW5kX3NodXRkb3duX2FjayhzdGNiLCBuZXQpOworCQlicmVh
azsKKwljYXNlIFNDVFBfQ09PS0lFX0VDSE86CisJeworCQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5r
ICpjb29raWU7CisKKwkJY29va2llID0gTlVMTDsKKwkJVEFJTFFfRk9SRUFDSChjb29raWUsICZz
dGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1ZSwKKwkJCSAgICAgIHNjdHBfbmV4dCkgeworCQkJ
aWYgKGNvb2tpZS0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfQ09PS0lFX0VDSE8pIHsKKwkJCQli
cmVhazsKKwkJCX0KKwkJfQorCQlpZiAoY29va2llKSB7CisJCQlpZiAoY29va2llLT5zZW50ICE9
IFNDVFBfREFUQUdSQU1fUkVTRU5EKQorCQkJCXNjdHBfdWNvdW50X2luY3Ioc3RjYi0+YXNvYy5z
ZW50X3F1ZXVlX3JldHJhbl9jbnQpOworCQkJY29va2llLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9S
RVNFTkQ7CisJCQlzY3RwX3N0b3BfYWxsX2Nvb2tpZV90aW1lcnMoc3RjYik7CisJCX0KKwl9CisJ
YnJlYWs7CisJY2FzZSBTQ1RQX0NPT0tJRV9BQ0s6CisJCXNjdHBfc2VuZF9jb29raWVfYWNrKHN0
Y2IpOworCQlicmVhazsKKwljYXNlIFNDVFBfQVNDT05GX0FDSzoKKwkJLyogcmVzZW5kIGxhc3Qg
YXNjb25mIGFjayAqLworCQlzY3RwX3NlbmRfYXNjb25mX2FjayhzdGNiKTsKKwkJYnJlYWs7CisJ
Y2FzZSBTQ1RQX0lGT1JXQVJEX0NVTV9UU046CisJY2FzZSBTQ1RQX0ZPUldBUkRfQ1VNX1RTTjoK
KwkJc2VuZF9mb3J3YXJkX3RzbihzdGNiLCAmc3RjYi0+YXNvYyk7CisJCWJyZWFrOworCQkvKiBj
YW4ndCBkbyBhbnl0aGluZyB3aXRoIHRoZXNlICovCisJY2FzZSBTQ1RQX1BBQ0tFVF9EUk9QUEVE
OgorCWNhc2UgU0NUUF9JTklUSUFUSU9OX0FDSzoJLyogdGhpcyBzaG91bGQgbm90IGhhcHBlbiAq
LworCWNhc2UgU0NUUF9IRUFSVEJFQVRfQUNLOgorCWNhc2UgU0NUUF9BQk9SVF9BU1NPQ0lBVElP
TjoKKwljYXNlIFNDVFBfT1BFUkFUSU9OX0VSUk9SOgorCWNhc2UgU0NUUF9TSFVURE9XTl9DT01Q
TEVURToKKwljYXNlIFNDVFBfRUNOX0VDSE86CisJY2FzZSBTQ1RQX0VDTl9DV1I6CisJZGVmYXVs
dDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAoMCk7Cit9CisKK3ZvaWQKK3NjdHBfcmVzZXRfaW5f
c3RyZWFtKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDMyX3QgbnVtYmVyX2VudHJpZXMsIHVp
bnQxNl90ICpsaXN0KQoreworCXVpbnQzMl90IGk7CisJdWludDE2X3QgdGVtcDsKKworCS8qCisJ
ICogV2Ugc2V0IHRoaW5ncyB0byAweGZmZmZmZmZmIHNpbmNlIHRoaXMgaXMgdGhlIGxhc3QgZGVs
aXZlcmVkIHNlcXVlbmNlCisJICogYW5kIHdlIHdpbGwgYmUgc2VuZGluZyBpbiAwIGFmdGVyIHRo
ZSByZXNldC4KKwkgKi8KKworCWlmIChudW1iZXJfZW50cmllcykgeworCQlmb3IgKGkgPSAwOyBp
IDwgbnVtYmVyX2VudHJpZXM7IGkrKykgeworCQkJdGVtcCA9IG50b2hzKGxpc3RbaV0pOworCQkJ
aWYgKHRlbXAgPj0gc3RjYi0+YXNvYy5zdHJlYW1pbmNudCkgeworCQkJCWNvbnRpbnVlOworCQkJ
fQorCQkJc3RjYi0+YXNvYy5zdHJtaW5bdGVtcF0ubGFzdF9taWRfZGVsaXZlcmVkID0gMHhmZmZm
ZmZmZjsKKwkJfQorCX0gZWxzZSB7CisJCWxpc3QgPSBOVUxMOworCQlmb3IgKGkgPSAwOyBpIDwg
c3RjYi0+YXNvYy5zdHJlYW1pbmNudDsgaSsrKSB7CisJCQlzdGNiLT5hc29jLnN0cm1pbltpXS5s
YXN0X21pZF9kZWxpdmVyZWQgPSAweGZmZmZmZmZmOworCQl9CisJfQorCXNjdHBfdWxwX25vdGlm
eShTQ1RQX05PVElGWV9TVFJfUkVTRVRfUkVDViwgc3RjYiwgbnVtYmVyX2VudHJpZXMsICh2b2lk
ICopbGlzdCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKK30KKworc3RhdGljIHZvaWQKK3NjdHBfcmVz
ZXRfb3V0X3N0cmVhbXMoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBudW1iZXJfZW50
cmllcywgdWludDE2X3QgKmxpc3QpCit7CisJdWludDMyX3QgaTsKKwl1aW50MTZfdCB0ZW1wOwor
CisJaWYgKG51bWJlcl9lbnRyaWVzID4gMCkgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyX2Vu
dHJpZXM7IGkrKykgeworCQkJdGVtcCA9IG50b2hzKGxpc3RbaV0pOworCQkJaWYgKHRlbXAgPj0g
c3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQpIHsKKwkJCQkvKiBubyBzdWNoIHN0cmVhbSAqLworCQkJ
CWNvbnRpbnVlOworCQkJfQorCQkJc3RjYi0+YXNvYy5zdHJtb3V0W3RlbXBdLm5leHRfbWlkX29y
ZGVyZWQgPSAwOworCQkJc3RjYi0+YXNvYy5zdHJtb3V0W3RlbXBdLm5leHRfbWlkX3Vub3JkZXJl
ZCA9IDA7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNvYy5zdHJl
YW1vdXRjbnQ7IGkrKykgeworCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm5leHRfbWlkX29yZGVy
ZWQgPSAwOworCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm5leHRfbWlkX3Vub3JkZXJlZCA9IDA7
CisJCX0KKwl9CisJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1NUUl9SRVNFVF9TRU5ELCBz
dGNiLCBudW1iZXJfZW50cmllcywgKHZvaWQgKilsaXN0LCBTQ1RQX1NPX05PVF9MT0NLRUQpOwor
fQorCitzdGF0aWMgdm9pZAorc2N0cF9yZXNldF9jbGVhcl9wZW5kaW5nKHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwgdWludDMyX3QgbnVtYmVyX2VudHJpZXMsIHVpbnQxNl90ICpsaXN0KQoreworCXVp
bnQzMl90IGk7CisJdWludDE2X3QgdGVtcDsKKworCWlmIChudW1iZXJfZW50cmllcyA+IDApIHsK
KwkJZm9yIChpID0gMDsgaSA8IG51bWJlcl9lbnRyaWVzOyBpKyspIHsKKwkJCXRlbXAgPSBudG9o
cyhsaXN0W2ldKTsKKwkJCWlmICh0ZW1wID49IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250KSB7CisJ
CQkJLyogbm8gc3VjaCBzdHJlYW0gKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXN0Y2ItPmFz
b2Muc3RybW91dFt0ZW1wXS5zdGF0ZSA9IFNDVFBfU1RSRUFNX09QRU47CisJCX0KKwl9IGVsc2Ug
eworCQlmb3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7IGkrKykgeworCQkJ
c3RjYi0+YXNvYy5zdHJtb3V0W2ldLnN0YXRlID0gU0NUUF9TVFJFQU1fT1BFTjsKKwkJfQorCX0K
K30KKworc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3JlcXVlc3QgKgorc2N0cF9maW5kX3N0cmVh
bV9yZXNldChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQzMl90IHNlcSwgc3RydWN0IHNjdHBf
dG1pdF9jaHVuayAqKmJjaGspCit7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJ
c3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOworCXN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9yZXF1
ZXN0ICpyOworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKKwlpbnQgbGVuLCBjbGVuOwor
CisJYXNvYyA9ICZzdGNiLT5hc29jOworCWNoayA9IGFzb2MtPnN0cl9yZXNldDsKKwlpZiAoVEFJ
TFFfRU1QVFkoJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSkgfHwKKwkgICAgKGNoayA9PSBOVUxM
KSkgeworCQlhc29jLT5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcgPSAwOworCQlyZXR1cm4gKE5V
TEwpOworCX0KKwlpZiAoY2hrLT5kYXRhID09IE5VTEwpIHsKKwkJcmV0dXJuIChOVUxMKTsKKwl9
CisJaWYgKGJjaGsgIT0gTlVMTCkgeworCQkvKiBoZSB3YW50cyBhIGNvcHkgb2YgdGhlIGNoayBw
b2ludGVyICovCisJCSpiY2hrID0gY2hrOworCX0KKwljbGVuID0gY2hrLT5zZW5kX3NpemU7CisJ
Y2ggPSBtdG9kKGNoay0+ZGF0YSwgc3RydWN0IHNjdHBfY2h1bmtoZHIgKik7CisJciA9IChzdHJ1
Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVxdWVzdCAqKShjaCArIDEpOworCWlmIChudG9obChyLT5y
ZXF1ZXN0X3NlcSkgPT0gc2VxKSB7CisJCS8qIGZvdW5kIGl0ICovCisJCXJldHVybiAocik7CisJ
fQorCWxlbiA9IFNDVFBfU0laRTMyKG50b2hzKHItPnBoLnBhcmFtX2xlbmd0aCkpOworCWlmIChj
bGVuID4gKGxlbiArIChpbnQpc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSkpIHsKKwkJLyog
bW92ZSB0byB0aGUgbmV4dCBvbmUsIHRoZXJlIGNhbiBvbmx5IGJlIGEgbWF4IG9mIHR3byAqLwor
CQlyID0gKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9yZXF1ZXN0ICopKChjYWRkcl90KXIgKyBs
ZW4pOworCQlpZiAobnRvaGwoci0+cmVxdWVzdF9zZXEpID09IHNlcSkgeworCQkJcmV0dXJuIChy
KTsKKwkJfQorCX0KKwkvKiB0aGF0IHNlcSBpcyBub3QgaGVyZSAqLworCXJldHVybiAoTlVMTCk7
Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2NsZWFuX3VwX3N0cmVhbV9yZXNldChzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IpCit7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJc3RydWN0
IHNjdHBfdG1pdF9jaHVuayAqY2hrOworCisJYXNvYyA9ICZzdGNiLT5hc29jOworCWNoayA9IGFz
b2MtPnN0cl9yZXNldDsKKwlpZiAoY2hrID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKwlhc29j
LT5zdHJfcmVzZXQgPSBOVUxMOworCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfU1RS
UkVTRVQsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCisJICAgICAgICAgICAgICAgIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfMjgpOworCVRBSUxRX1JFTU9WRSgmYXNvYy0+Y29u
dHJvbF9zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7CisJYXNvYy0+Y3RybF9xdWV1ZV9jbnQt
LTsKKwlpZiAoY2hrLT5kYXRhKSB7CisJCXNjdHBfbV9mcmVlbShjaGstPmRhdGEpOworCQljaGst
PmRhdGEgPSBOVUxMOworCX0KKwlzY3RwX2ZyZWVfYV9jaHVuayhzdGNiLCBjaGssIFNDVFBfU09f
Tk9UX0xPQ0tFRCk7Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfaGFuZGxlX3N0cmVhbV9yZXNldF9y
ZXNwb25zZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCQkJICB1aW50MzJfdCBzZXEsIHVpbnQz
Ml90IGFjdGlvbiwKKwkJCQkgIHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9yZXNwb25zZSAqcmVz
cGluKQoreworCXVpbnQxNl90IHR5cGU7CisJaW50IGxwYXJhbV9sZW47CisJc3RydWN0IHNjdHBf
YXNzb2NpYXRpb24gKmFzb2MgPSAmc3RjYi0+YXNvYzsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5r
ICpjaGs7CisJc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3JlcXVlc3QgKnJlcV9wYXJhbTsKKwlz
dHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfb3V0X3JlcXVlc3QgKnJlcV9vdXRfcGFyYW07CisJc3Ry
dWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2luX3JlcXVlc3QgKnJlcV9pbl9wYXJhbTsKKwl1aW50MzJf
dCBudW1iZXJfZW50cmllczsKKworCWlmIChhc29jLT5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcg
PT0gMCkgeworCQkvKiBkdXBsaWNhdGUgKi8KKwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKHNlcSA9
PSBzdGNiLT5hc29jLnN0cl9yZXNldF9zZXFfb3V0KSB7CisJCXJlcV9wYXJhbSA9IHNjdHBfZmlu
ZF9zdHJlYW1fcmVzZXQoc3RjYiwgc2VxLCAmY2hrKTsKKwkJaWYgKHJlcV9wYXJhbSAhPSBOVUxM
KSB7CisJCQlzdGNiLT5hc29jLnN0cl9yZXNldF9zZXFfb3V0Kys7CisJCQl0eXBlID0gbnRvaHMo
cmVxX3BhcmFtLT5waC5wYXJhbV90eXBlKTsKKwkJCWxwYXJhbV9sZW4gPSBudG9ocyhyZXFfcGFy
YW0tPnBoLnBhcmFtX2xlbmd0aCk7CisJCQlpZiAodHlwZSA9PSBTQ1RQX1NUUl9SRVNFVF9PVVRf
UkVRVUVTVCkgeworCQkJCWludCBub19jbGVhciA9IDA7CisKKwkJCQlyZXFfb3V0X3BhcmFtID0g
KHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9vdXRfcmVxdWVzdCAqKXJlcV9wYXJhbTsKKwkJCQlu
dW1iZXJfZW50cmllcyA9IChscGFyYW1fbGVuIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9y
ZXNldF9vdXRfcmVxdWVzdCkpIC8gc2l6ZW9mKHVpbnQxNl90KTsKKwkJCQlhc29jLT5zdHJlYW1f
cmVzZXRfb3V0X2lzX291dHN0YW5kaW5nID0gMDsKKwkJCQlpZiAoYXNvYy0+c3RyZWFtX3Jlc2V0
X291dHN0YW5kaW5nKQorCQkJCQlhc29jLT5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmctLTsKKwkJ
CQlpZiAoYWN0aW9uID09IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9QRVJGT1JNRUQpIHsKKwkJ
CQkJLyogZG8gaXQgKi8KKwkJCQkJc2N0cF9yZXNldF9vdXRfc3RyZWFtcyhzdGNiLCBudW1iZXJf
ZW50cmllcywgcmVxX291dF9wYXJhbS0+bGlzdF9vZl9zdHJlYW1zKTsKKwkJCQl9IGVsc2UgaWYg
KGFjdGlvbiA9PSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfREVOSUVEKSB7CisJCQkJCXNjdHBf
dWxwX25vdGlmeShTQ1RQX05PVElGWV9TVFJfUkVTRVRfREVOSUVEX09VVCwgc3RjYiwgbnVtYmVy
X2VudHJpZXMsIHJlcV9vdXRfcGFyYW0tPmxpc3Rfb2Zfc3RyZWFtcywgU0NUUF9TT19OT1RfTE9D
S0VEKTsKKwkJCQl9IGVsc2UgaWYgKGFjdGlvbiA9PSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRf
SU5fUFJPR1JFU1MpIHsKKwkJCQkJLyogU2V0IGl0IHVwIHNvIHdlIGRvbid0IHN0b3AgcmV0cmFu
c21pdHRpbmcgKi8KKwkJCQkJYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKys7CisJCQkJ
CXN0Y2ItPmFzb2Muc3RyX3Jlc2V0X3NlcV9vdXQtLTsKKwkJCQkJYXNvYy0+c3RyZWFtX3Jlc2V0
X291dF9pc19vdXRzdGFuZGluZyA9IDE7CisJCQkJCW5vX2NsZWFyID0gMTsKKwkJCQl9IGVsc2Ug
eworCQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfU1RSX1JFU0VUX0ZBSUxFRF9PVVQs
IHN0Y2IsIG51bWJlcl9lbnRyaWVzLCByZXFfb3V0X3BhcmFtLT5saXN0X29mX3N0cmVhbXMsIFND
VFBfU09fTk9UX0xPQ0tFRCk7CisJCQkJfQorCQkJCWlmIChub19jbGVhciA9PSAwKSB7CisJCQkJ
CXNjdHBfcmVzZXRfY2xlYXJfcGVuZGluZyhzdGNiLCBudW1iZXJfZW50cmllcywgcmVxX291dF9w
YXJhbS0+bGlzdF9vZl9zdHJlYW1zKTsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKHR5cGUgPT0gU0NU
UF9TVFJfUkVTRVRfSU5fUkVRVUVTVCkgeworCQkJCXJlcV9pbl9wYXJhbSA9IChzdHJ1Y3Qgc2N0
cF9zdHJlYW1fcmVzZXRfaW5fcmVxdWVzdCAqKXJlcV9wYXJhbTsKKwkJCQludW1iZXJfZW50cmll
cyA9IChscGFyYW1fbGVuIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9pbl9yZXF1
ZXN0KSkgLyBzaXplb2YodWludDE2X3QpOworCQkJCWlmIChhc29jLT5zdHJlYW1fcmVzZXRfb3V0
c3RhbmRpbmcpCisJCQkJCWFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZy0tOworCQkJCWlm
IChhY3Rpb24gPT0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0RFTklFRCkgeworCQkJCQlzY3Rw
X3VscF9ub3RpZnkoU0NUUF9OT1RJRllfU1RSX1JFU0VUX0RFTklFRF9JTiwgc3RjYiwKKwkJCQkJ
CQludW1iZXJfZW50cmllcywgcmVxX2luX3BhcmFtLT5saXN0X29mX3N0cmVhbXMsIFNDVFBfU09f
Tk9UX0xPQ0tFRCk7CisJCQkJfSBlbHNlIGlmIChhY3Rpb24gIT0gU0NUUF9TVFJFQU1fUkVTRVRf
UkVTVUxUX1BFUkZPUk1FRCkgeworCQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfU1RS
X1JFU0VUX0ZBSUxFRF9JTiwgc3RjYiwKKwkJCQkJCQludW1iZXJfZW50cmllcywgcmVxX2luX3Bh
cmFtLT5saXN0X29mX3N0cmVhbXMsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQkJfQorCQkJfSBl
bHNlIGlmICh0eXBlID09IFNDVFBfU1RSX1JFU0VUX0FERF9PVVRfU1RSRUFNUykgeworCQkJCS8q
IE9rIHdlIG5vdyBtYXkgaGF2ZSBtb3JlIHN0cmVhbXMgKi8KKwkJCQlpbnQgbnVtX3N0cmVhbTsK
KworCQkJCW51bV9zdHJlYW0gPSBzdGNiLT5hc29jLnN0cm1fcGVuZGluZ19hZGRfc2l6ZTsKKwkJ
CQlpZiAobnVtX3N0cmVhbSA+IChzdGNiLT5hc29jLnN0cm1fcmVhbG91dHNpemUgLSBzdGNiLT5h
c29jLnN0cmVhbW91dGNudCkpIHsKKwkJCQkJLyogVFNOSCAqLworCQkJCQludW1fc3RyZWFtID0g
c3RjYi0+YXNvYy5zdHJtX3JlYWxvdXRzaXplIC0gc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7CisJ
CQkJfQorCQkJCXN0Y2ItPmFzb2Muc3RybV9wZW5kaW5nX2FkZF9zaXplID0gMDsKKwkJCQlpZiAo
YXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKQorCQkJCQlhc29jLT5zdHJlYW1fcmVzZXRf
b3V0c3RhbmRpbmctLTsKKwkJCQlpZiAoYWN0aW9uID09IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VM
VF9QRVJGT1JNRUQpIHsKKwkJCQkJLyogUHV0IHRoZSBuZXcgc3RyZWFtcyBpbnRvIGVmZmVjdCAq
LworCQkJCQlpbnQgaTsKKwkJCQkJZm9yIChpID0gYXNvYy0+c3RyZWFtb3V0Y250OyBpIDwgKGFz
b2MtPnN0cmVhbW91dGNudCArIG51bV9zdHJlYW0pOyBpKyspIHsKKwkJCQkJCWFzb2MtPnN0cm1v
dXRbaV0uc3RhdGUgPSBTQ1RQX1NUUkVBTV9PUEVOOworCQkJCQl9CisJCQkJCWFzb2MtPnN0cmVh
bW91dGNudCArPSBudW1fc3RyZWFtOworCQkJCQlzY3RwX25vdGlmeV9zdHJlYW1fcmVzZXRfYWRk
KHN0Y2IsIHN0Y2ItPmFzb2Muc3RyZWFtaW5jbnQsIHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250LCAw
KTsKKwkJCQl9IGVsc2UgaWYgKGFjdGlvbiA9PSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfREVO
SUVEKSB7CisJCQkJCXNjdHBfbm90aWZ5X3N0cmVhbV9yZXNldF9hZGQoc3RjYiwgc3RjYi0+YXNv
Yy5zdHJlYW1pbmNudCwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQsCisJCQkJCQkJCSAgICAgU0NU
UF9TVFJFQU1fQ0hBTkdFX0RFTklFRCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJc2N0cF9ub3RpZnlf
c3RyZWFtX3Jlc2V0X2FkZChzdGNiLCBzdGNiLT5hc29jLnN0cmVhbWluY250LCBzdGNiLT5hc29j
LnN0cmVhbW91dGNudCwKKwkJCQkJCQkJICAgICBTQ1RQX1NUUkVBTV9DSEFOR0VfRkFJTEVEKTsK
KwkJCQl9CisJCQl9IGVsc2UgaWYgKHR5cGUgPT0gU0NUUF9TVFJfUkVTRVRfQUREX0lOX1NUUkVB
TVMpIHsKKwkJCQlpZiAoYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKQorCQkJCQlhc29j
LT5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmctLTsKKwkJCQlpZiAoYWN0aW9uID09IFNDVFBfU1RS
RUFNX1JFU0VUX1JFU1VMVF9ERU5JRUQpIHsKKwkJCQkJc2N0cF9ub3RpZnlfc3RyZWFtX3Jlc2V0
X2FkZChzdGNiLCBzdGNiLT5hc29jLnN0cmVhbWluY250LCBzdGNiLT5hc29jLnN0cmVhbW91dGNu
dCwKKwkJCQkJCQkJICAgICBTQ1RQX1NUUkVBTV9DSEFOR0VfREVOSUVEKTsKKwkJCQl9IGVsc2Ug
aWYgKGFjdGlvbiAhPSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfUEVSRk9STUVEKSB7CisJCQkJ
CXNjdHBfbm90aWZ5X3N0cmVhbV9yZXNldF9hZGQoc3RjYiwgc3RjYi0+YXNvYy5zdHJlYW1pbmNu
dCwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQsCisJCQkJCQkJCSAgICAgU0NUUF9TVFJFQU1fQ0hB
TkdFX0ZBSUxFRCk7CisJCQkJfQorCQkJfSBlbHNlIGlmICh0eXBlID09IFNDVFBfU1RSX1JFU0VU
X1RTTl9SRVFVRVNUKSB7CisJCQkJLyoqCisJCQkJICogYSkgQWRvcHQgdGhlIG5ldyBpbiB0c24u
CisJCQkJICogYikgcmVzZXQgdGhlIG1hcAorCQkJCSAqIGMpIEFkb3B0IHRoZSBuZXcgb3V0LXRz
bgorCQkJCSAqLworCQkJCXN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9yZXNwb25zZV90c24gKnJl
c3A7CisJCQkJc3RydWN0IHNjdHBfZm9yd2FyZF90c25fY2h1bmsgZndkdHNuOworCQkJCWludCBh
Ym9ydF9mbGFnID0gMDsKKwkJCQlpZiAocmVzcGluID09IE5VTEwpIHsKKwkJCQkJLyogaHVoID8g
Ki8KKwkJCQkJcmV0dXJuICgwKTsKKwkJCQl9CisJCQkJaWYgKG50b2hzKHJlc3Bpbi0+cGgucGFy
YW1fbGVuZ3RoKSA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVzcG9uc2VfdHNu
KSkgeworCQkJCQlyZXR1cm4gKDApOworCQkJCX0KKwkJCQlpZiAoYWN0aW9uID09IFNDVFBfU1RS
RUFNX1JFU0VUX1JFU1VMVF9QRVJGT1JNRUQpIHsKKwkJCQkJcmVzcCA9IChzdHJ1Y3Qgc2N0cF9z
dHJlYW1fcmVzZXRfcmVzcG9uc2VfdHNuICopcmVzcGluOworCQkJCQlhc29jLT5zdHJlYW1fcmVz
ZXRfb3V0c3RhbmRpbmctLTsKKwkJCQkJZndkdHNuLmNoLmNodW5rX2xlbmd0aCA9IGh0b25zKHNp
emVvZihzdHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9jaHVuaykpOworCQkJCQlmd2R0c24uY2guY2h1
bmtfdHlwZSA9IFNDVFBfRk9SV0FSRF9DVU1fVFNOOworCQkJCQlmd2R0c24ubmV3X2N1bXVsYXRp
dmVfdHNuID0gaHRvbmwobnRvaGwocmVzcC0+c2VuZGVyc19uZXh0X3RzbikgLSAxKTsKKwkJCQkJ
c2N0cF9oYW5kbGVfZm9yd2FyZF90c24oc3RjYiwgJmZ3ZHRzbiwgJmFib3J0X2ZsYWcsIE5VTEws
IDApOworCQkJCQlpZiAoYWJvcnRfZmxhZykgeworCQkJCQkJcmV0dXJuICgxKTsKKwkJCQkJfQor
CQkJCQlzdGNiLT5hc29jLmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAgPSAobnRvaGwocmVzcC0+c2Vu
ZGVyc19uZXh0X3RzbikgLSAxKTsKKwkJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dn
aW5nX2xldmVsKSAmIFNDVFBfTUFQX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCQlzY3RwX2xvZ19t
YXAoMCwgNywgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCwgU0NUUF9NQVBfU0xJREVfUkVT
VUxUKTsKKwkJCQkJfQorCisJCQkJCXN0Y2ItPmFzb2MudHNuX2xhc3RfZGVsaXZlcmVkID0gc3Rj
Yi0+YXNvYy5jdW11bGF0aXZlX3RzbiA9IHN0Y2ItPmFzb2MuaGlnaGVzdF90c25faW5zaWRlX21h
cDsKKwkJCQkJc3RjYi0+YXNvYy5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuID0gbnRvaGwocmVzcC0+
c2VuZGVyc19uZXh0X3Rzbik7CisJCQkJCW1lbXNldChzdGNiLT5hc29jLm1hcHBpbmdfYXJyYXks
IDAsIHN0Y2ItPmFzb2MubWFwcGluZ19hcnJheV9zaXplKTsKKworCQkJCQlzdGNiLT5hc29jLmhp
Z2hlc3RfdHNuX2luc2lkZV9ucl9tYXAgPSBzdGNiLT5hc29jLmhpZ2hlc3RfdHNuX2luc2lkZV9t
YXA7CisJCQkJCW1lbXNldChzdGNiLT5hc29jLm5yX21hcHBpbmdfYXJyYXksIDAsIHN0Y2ItPmFz
b2MubWFwcGluZ19hcnJheV9zaXplKTsKKworCQkJCQlzdGNiLT5hc29jLnNlbmRpbmdfc2VxID0g
bnRvaGwocmVzcC0+cmVjZWl2ZXJzX25leHRfdHNuKTsKKwkJCQkJc3RjYi0+YXNvYy5sYXN0X2Fj
a2VkX3NlcSA9IHN0Y2ItPmFzb2MuY3VtdWxhdGl2ZV90c247CisKKwkJCQkJc2N0cF9yZXNldF9v
dXRfc3RyZWFtcyhzdGNiLCAwLCAodWludDE2X3QgKikgTlVMTCk7CisJCQkJCXNjdHBfcmVzZXRf
aW5fc3RyZWFtKHN0Y2IsIDAsICh1aW50MTZfdCAqKSBOVUxMKTsKKwkJCQkJc2N0cF9ub3RpZnlf
c3RyZWFtX3Jlc2V0X3RzbihzdGNiLCBzdGNiLT5hc29jLnNlbmRpbmdfc2VxLCAoc3RjYi0+YXNv
Yy5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuICsgMSksIDApOworCQkJCX0gZWxzZSBpZiAoYWN0aW9u
ID09IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9ERU5JRUQpIHsKKwkJCQkJc2N0cF9ub3RpZnlf
c3RyZWFtX3Jlc2V0X3RzbihzdGNiLCBzdGNiLT5hc29jLnNlbmRpbmdfc2VxLCAoc3RjYi0+YXNv
Yy5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuICsgMSksCisJCQkJCQkJCSAgICAgU0NUUF9BU1NPQ19S
RVNFVF9ERU5JRUQpOworCQkJCX0gZWxzZSB7CisJCQkJCXNjdHBfbm90aWZ5X3N0cmVhbV9yZXNl
dF90c24oc3RjYiwgc3RjYi0+YXNvYy5zZW5kaW5nX3NlcSwgKHN0Y2ItPmFzb2MubWFwcGluZ19h
cnJheV9iYXNlX3RzbiArIDEpLAorCQkJCQkJCQkgICAgIFNDVFBfQVNTT0NfUkVTRVRfRkFJTEVE
KTsKKwkJCQl9CisJCQl9CisJCQkvKiBnZXQgcmlkIG9mIHRoZSByZXF1ZXN0IGFuZCBnZXQgdGhl
IHJlcXVlc3QgZmxhZ3MgKi8KKwkJCWlmIChhc29jLT5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcg
PT0gMCkgeworCQkJCXNjdHBfY2xlYW5fdXBfc3RyZWFtX3Jlc2V0KHN0Y2IpOworCQkJfQorCQl9
CisJfQorCWlmIChhc29jLT5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcgPT0gMCkgeworCQlzY3Rw
X3NlbmRfc3RyZWFtX3Jlc2V0X291dF9pZl9wb3NzaWJsZShzdGNiLCBTQ1RQX1NPX05PVF9MT0NL
RUQpOworCX0KKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAorc2N0cF9oYW5kbGVfc3Ry
X3Jlc2V0X3JlcXVlc3RfaW4oc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgIHN0cnVjdCBzY3Rw
X3RtaXRfY2h1bmsgKmNoaywKKyAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfaW5fcmVxdWVz
dCAqcmVxLCBpbnQgdHJ1bmMpCit7CisJdWludDMyX3Qgc2VxOworCWludCBsZW4sIGk7CisJaW50
IG51bWJlcl9lbnRyaWVzOworCXVpbnQxNl90IHRlbXA7CisKKwkvKgorCSAqIHBlZXIgd2FudHMg
bWUgdG8gc2VuZCBhIHN0ci1yZXNldCB0byBoaW0gZm9yIG15IG91dGdvaW5nIHNlcSdzIGlmCisJ
ICogc2VxX2luIGlzIHJpZ2h0LgorCSAqLworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29j
ID0gJnN0Y2ItPmFzb2M7CisKKwlzZXEgPSBudG9obChyZXEtPnJlcXVlc3Rfc2VxKTsKKwlpZiAo
YXNvYy0+c3RyX3Jlc2V0X3NlcV9pbiA9PSBzZXEpIHsKKwkJYXNvYy0+bGFzdF9yZXNldF9hY3Rp
b25bMV0gPSBhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXTsKKwkJaWYgKCEoYXNvYy0+bG9jYWxf
c3RycmVzZXRfc3VwcG9ydCAmIFNDVFBfRU5BQkxFX1JFU0VUX1NUUkVBTV9SRVEpKSB7CisJCQlh
c29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSA9IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9ERU5J
RUQ7CisJCX0gZWxzZSBpZiAodHJ1bmMpIHsKKwkJCS8qIENhbid0IGRvIGl0LCBzaW5jZSB0aGV5
IGV4Y2VlZGVkIG91ciBidWZmZXIgc2l6ZSAgKi8KKwkJCWFzb2MtPmxhc3RfcmVzZXRfYWN0aW9u
WzBdID0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0RFTklFRDsKKwkJfSBlbHNlIGlmIChzdGNi
LT5hc29jLnN0cmVhbV9yZXNldF9vdXRfaXNfb3V0c3RhbmRpbmcgPT0gMCkgeworCQkJbGVuID0g
bnRvaHMocmVxLT5waC5wYXJhbV9sZW5ndGgpOworCQkJbnVtYmVyX2VudHJpZXMgPSAoKGxlbiAt
IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfaW5fcmVxdWVzdCkpIC8gc2l6ZW9mKHVp
bnQxNl90KSk7CisJCQlpZiAobnVtYmVyX2VudHJpZXMpIHsKKwkJCQlmb3IgKGkgPSAwOyBpIDwg
bnVtYmVyX2VudHJpZXM7IGkrKykgeworCQkJCQl0ZW1wID0gbnRvaHMocmVxLT5saXN0X29mX3N0
cmVhbXNbaV0pOworCQkJCQlpZiAodGVtcCA+PSBzdGNiLT5hc29jLnN0cmVhbW91dGNudCkgewor
CQkJCQkJYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0gPSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNV
TFRfREVOSUVEOworCQkJCQkJZ290byBiYWRfYm95OworCQkJCQl9CisJCQkJCXJlcS0+bGlzdF9v
Zl9zdHJlYW1zW2ldID0gdGVtcDsKKwkJCQl9CisJCQkJZm9yIChpID0gMDsgaSA8IG51bWJlcl9l
bnRyaWVzOyBpKyspIHsKKwkJCQkJaWYgKHN0Y2ItPmFzb2Muc3RybW91dFtyZXEtPmxpc3Rfb2Zf
c3RyZWFtc1tpXV0uc3RhdGUgPT0gU0NUUF9TVFJFQU1fT1BFTikgeworCQkJCQkJc3RjYi0+YXNv
Yy5zdHJtb3V0W3JlcS0+bGlzdF9vZl9zdHJlYW1zW2ldXS5zdGF0ZSA9IFNDVFBfU1RSRUFNX1JF
U0VUX1BFTkRJTkc7CisJCQkJCX0KKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIEl0cyBhbGwg
Ki8KKwkJCQlmb3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7IGkrKykgewor
CQkJCQlpZiAoc3RjYi0+YXNvYy5zdHJtb3V0W2ldLnN0YXRlID09IFNDVFBfU1RSRUFNX09QRU4p
CisJCQkJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uc3RhdGUgPSBTQ1RQX1NUUkVBTV9SRVNFVF9Q
RU5ESU5HOworCQkJCX0KKwkJCX0KKwkJCWFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzBdID0gU0NU
UF9TVFJFQU1fUkVTRVRfUkVTVUxUX1BFUkZPUk1FRDsKKwkJfSBlbHNlIHsKKwkJCS8qIENhbid0
IGRvIGl0LCBzaW5jZSB3ZSBoYXZlIHNlbnQgb25lIG91dCAqLworCQkJYXNvYy0+bGFzdF9yZXNl
dF9hY3Rpb25bMF0gPSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfRVJSX0lOX1BST0dSRVNTOwor
CQl9CisJYmFkX2JveToKKwkJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jlc3VsdChjaGssIHNlcSwg
YXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0pOworCQlhc29jLT5zdHJfcmVzZXRfc2VxX2luKys7
CisJfSBlbHNlIGlmIChhc29jLT5zdHJfcmVzZXRfc2VxX2luIC0gMSA9PSBzZXEpIHsKKwkJc2N0
cF9hZGRfc3RyZWFtX3Jlc2V0X3Jlc3VsdChjaGssIHNlcSwgYXNvYy0+bGFzdF9yZXNldF9hY3Rp
b25bMF0pOworCX0gZWxzZSBpZiAoYXNvYy0+c3RyX3Jlc2V0X3NlcV9pbiAtIDIgPT0gc2VxKSB7
CisJCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHQoY2hrLCBzZXEsIGFzb2MtPmxhc3RfcmVz
ZXRfYWN0aW9uWzFdKTsKKwl9IGVsc2UgeworCQlzY3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0
KGNoaywgc2VxLCBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfRVJSX0JBRF9TRVFOTyk7CisJfQor
CXNjdHBfc2VuZF9zdHJlYW1fcmVzZXRfb3V0X2lmX3Bvc3NpYmxlKHN0Y2IsIFNDVFBfU09fTk9U
X0xPQ0tFRCk7Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfaGFuZGxlX3N0cl9yZXNldF9yZXF1ZXN0
X3RzbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNjdHBfdG1pdF9jaHVuayAq
Y2hrLAorICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF90c25fcmVxdWVzdCAqcmVxKQorewor
CS8qIHJlc2V0IGFsbCBpbiBhbmQgb3V0IGFuZCB1cGRhdGUgdGhlIHRzbiAqLworCS8qCisJICog
QSkgcmVzZXQgbXkgc3RyLXNlcSdzIG9uIGluIGFuZCBvdXQuIEIpIFNlbGVjdCBhIHJlY2VpdmUg
bmV4dCwKKwkgKiBhbmQgc2V0IGN1bS1hY2sgdG8gaXQuIEFsc28gcHJvY2VzcyB0aGlzIHNlbGVj
dGVkIG51bWJlciBhcyBhCisJICogZndkLXRzbiBhcyB3ZWxsLiBDKSBzZXQgaW4gdGhlIHJlc3Bv
bnNlIG15IG5leHQgc2VuZGluZyBzZXEuCisJICovCisJc3RydWN0IHNjdHBfZm9yd2FyZF90c25f
Y2h1bmsgZndkdHNuOworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jID0gJnN0Y2ItPmFz
b2M7CisJaW50IGFib3J0X2ZsYWcgPSAwOworCXVpbnQzMl90IHNlcTsKKworCXNlcSA9IG50b2hs
KHJlcS0+cmVxdWVzdF9zZXEpOworCWlmIChhc29jLT5zdHJfcmVzZXRfc2VxX2luID09IHNlcSkg
eworCQlhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblsxXSA9IHN0Y2ItPmFzb2MubGFzdF9yZXNldF9h
Y3Rpb25bMF07CisJCWlmICghKGFzb2MtPmxvY2FsX3N0cnJlc2V0X3N1cHBvcnQgJiBTQ1RQX0VO
QUJMRV9DSEFOR0VfQVNTT0NfUkVRKSkgeworCQkJYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0g
PSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfREVOSUVEOworCQl9IGVsc2UgeworCQkJZndkdHNu
LmNoLmNodW5rX2xlbmd0aCA9IGh0b25zKHNpemVvZihzdHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9j
aHVuaykpOworCQkJZndkdHNuLmNoLmNodW5rX3R5cGUgPSBTQ1RQX0ZPUldBUkRfQ1VNX1RTTjsK
KwkJCWZ3ZHRzbi5jaC5jaHVua19mbGFncyA9IDA7CisJCQlmd2R0c24ubmV3X2N1bXVsYXRpdmVf
dHNuID0gaHRvbmwoc3RjYi0+YXNvYy5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwICsgMSk7CisJCQlz
Y3RwX2hhbmRsZV9mb3J3YXJkX3RzbihzdGNiLCAmZndkdHNuLCAmYWJvcnRfZmxhZywgTlVMTCwg
MCk7CisJCQlpZiAoYWJvcnRfZmxhZykgeworCQkJCXJldHVybiAoMSk7CisJCQl9CisJCQlhc29j
LT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwICs9IFNDVFBfU1RSRUFNX1JFU0VUX1RTTl9ERUxUQTsK
KwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX01BUF9M
T0dHSU5HX0VOQUJMRSkgeworCQkJCXNjdHBfbG9nX21hcCgwLCAxMCwgYXNvYy0+aGlnaGVzdF90
c25faW5zaWRlX21hcCwgU0NUUF9NQVBfU0xJREVfUkVTVUxUKTsKKwkJCX0KKwkJCWFzb2MtPnRz
bl9sYXN0X2RlbGl2ZXJlZCA9IGFzb2MtPmN1bXVsYXRpdmVfdHNuID0gYXNvYy0+aGlnaGVzdF90
c25faW5zaWRlX21hcDsKKwkJCWFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24gPSBhc29jLT5o
aWdoZXN0X3Rzbl9pbnNpZGVfbWFwICsgMTsKKwkJCW1lbXNldChhc29jLT5tYXBwaW5nX2FycmF5
LCAwLCBhc29jLT5tYXBwaW5nX2FycmF5X3NpemUpOworCQkJYXNvYy0+aGlnaGVzdF90c25faW5z
aWRlX25yX21hcCA9IGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXA7CisJCQltZW1zZXQoYXNv
Yy0+bnJfbWFwcGluZ19hcnJheSwgMCwgYXNvYy0+bWFwcGluZ19hcnJheV9zaXplKTsKKwkJCWF0
b21pY19hZGRfaW50KCZhc29jLT5zZW5kaW5nX3NlcSwgMSk7CisJCQkvKiBzYXZlIG9mZiBoaXN0
b3JpY2FsIGRhdGEgZm9yIHJldHJhbnMgKi8KKwkJCWFzb2MtPmxhc3Rfc2VuZGluZ19zZXFbMV0g
PSBhc29jLT5sYXN0X3NlbmRpbmdfc2VxWzBdOworCQkJYXNvYy0+bGFzdF9zZW5kaW5nX3NlcVsw
XSA9IGFzb2MtPnNlbmRpbmdfc2VxOworCQkJYXNvYy0+bGFzdF9iYXNlX3RzbnNlbnRbMV0gPSBh
c29jLT5sYXN0X2Jhc2VfdHNuc2VudFswXTsKKwkJCWFzb2MtPmxhc3RfYmFzZV90c25zZW50WzBd
ID0gYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbjsKKwkJCXNjdHBfcmVzZXRfb3V0X3N0cmVh
bXMoc3RjYiwgMCwgKHVpbnQxNl90ICopIE5VTEwpOworCQkJc2N0cF9yZXNldF9pbl9zdHJlYW0o
c3RjYiwgMCwgKHVpbnQxNl90ICopIE5VTEwpOworCQkJYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25b
MF0gPSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfUEVSRk9STUVEOworCQkJc2N0cF9ub3RpZnlf
c3RyZWFtX3Jlc2V0X3RzbihzdGNiLCBhc29jLT5zZW5kaW5nX3NlcSwgKGFzb2MtPm1hcHBpbmdf
YXJyYXlfYmFzZV90c24gKyAxKSwgMCk7CisJCX0KKwkJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jl
c3VsdF90c24oY2hrLCBzZXEsIGFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzBdLAorCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhc29jLT5sYXN0X3NlbmRpbmdfc2VxWzBdLCBhc29j
LT5sYXN0X2Jhc2VfdHNuc2VudFswXSk7CisJCWFzb2MtPnN0cl9yZXNldF9zZXFfaW4rKzsKKwl9
IGVsc2UgaWYgKGFzb2MtPnN0cl9yZXNldF9zZXFfaW4gLSAxID09IHNlcSkgeworCQlzY3RwX2Fk
ZF9zdHJlYW1fcmVzZXRfcmVzdWx0X3RzbihjaGssIHNlcSwgYXNvYy0+bGFzdF9yZXNldF9hY3Rp
b25bMF0sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzb2MtPmxhc3Rfc2Vu
ZGluZ19zZXFbMF0sIGFzb2MtPmxhc3RfYmFzZV90c25zZW50WzBdKTsKKwl9IGVsc2UgaWYgKGFz
b2MtPnN0cl9yZXNldF9zZXFfaW4gLSAyID09IHNlcSkgeworCQlzY3RwX2FkZF9zdHJlYW1fcmVz
ZXRfcmVzdWx0X3RzbihjaGssIHNlcSwgYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMV0sCisJCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzb2MtPmxhc3Rfc2VuZGluZ19zZXFbMV0s
IGFzb2MtPmxhc3RfYmFzZV90c25zZW50WzFdKTsKKwl9IGVsc2UgeworCQlzY3RwX2FkZF9zdHJl
YW1fcmVzZXRfcmVzdWx0KGNoaywgc2VxLCBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfRVJSX0JB
RF9TRVFOTyk7CisJfQorCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2hhbmRs
ZV9zdHJfcmVzZXRfcmVxdWVzdF9vdXQoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgIHN0cnVj
dCBzY3RwX3RtaXRfY2h1bmsgKmNoaywKKyAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfb3V0
X3JlcXVlc3QgKnJlcSwgaW50IHRydW5jKQoreworCXVpbnQzMl90IHNlcSwgdHNuOworCWludCBu
dW1iZXJfZW50cmllcywgbGVuOworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jID0gJnN0
Y2ItPmFzb2M7CisKKwlzZXEgPSBudG9obChyZXEtPnJlcXVlc3Rfc2VxKTsKKworCS8qIG5vdyBp
ZiBpdHMgbm90IGEgZHVwbGljYXRlIHdlIHByb2Nlc3MgaXQgKi8KKwlpZiAoYXNvYy0+c3RyX3Jl
c2V0X3NlcV9pbiA9PSBzZXEpIHsKKwkJbGVuID0gbnRvaHMocmVxLT5waC5wYXJhbV9sZW5ndGgp
OworCQludW1iZXJfZW50cmllcyA9ICgobGVuIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9y
ZXNldF9vdXRfcmVxdWVzdCkpIC8gc2l6ZW9mKHVpbnQxNl90KSk7CisJCS8qCisJCSAqIHRoZSBz
ZW5kZXIgaXMgcmVzZXR0aW5nLCBoYW5kbGUgdGhlIGxpc3QgaXNzdWUuLiB3ZSBtdXN0CisJCSAq
IGEpIHZlcmlmeSBpZiB3ZSBjYW4gZG8gdGhlIHJlc2V0LCBpZiBzbyBubyBwcm9ibGVtIGIpIElm
CisJCSAqIHdlIGNhbid0IGRvIHRoZSByZXNldCB3ZSBtdXN0IGNvcHkgdGhlIHJlcXVlc3QuIGMp
IHF1ZXVlCisJCSAqIGl0LCBhbmQgc2V0dXAgdGhlIGRhdGEgaW4gcHJvY2Vzc29yIHRvIHRyaWdn
ZXIgaXQgb2ZmCisJCSAqIHdoZW4gbmVlZGVkIGFuZCBkZXF1ZXVlIGFsbCB0aGUgcXVldWVkIGRh
dGEuCisJCSAqLworCQl0c24gPSBudG9obChyZXEtPnNlbmRfcmVzZXRfYXRfdHNuKTsKKworCQkv
KiBtb3ZlIHRoZSByZXNldCBhY3Rpb24gYmFjayBvbmUgKi8KKwkJYXNvYy0+bGFzdF9yZXNldF9h
Y3Rpb25bMV0gPSBhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXTsKKwkJaWYgKCEoYXNvYy0+bG9j
YWxfc3RycmVzZXRfc3VwcG9ydCAmIFNDVFBfRU5BQkxFX1JFU0VUX1NUUkVBTV9SRVEpKSB7CisJ
CQlhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSA9IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9E
RU5JRUQ7CisJCX0gZWxzZSBpZiAodHJ1bmMpIHsKKwkJCWFzb2MtPmxhc3RfcmVzZXRfYWN0aW9u
WzBdID0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0RFTklFRDsKKwkJfSBlbHNlIGlmIChTQ1RQ
X1RTTl9HRShhc29jLT5jdW11bGF0aXZlX3RzbiwgdHNuKSkgeworCQkJLyogd2UgY2FuIGRvIGl0
IG5vdyAqLworCQkJc2N0cF9yZXNldF9pbl9zdHJlYW0oc3RjYiwgbnVtYmVyX2VudHJpZXMsIHJl
cS0+bGlzdF9vZl9zdHJlYW1zKTsKKwkJCWFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzBdID0gU0NU
UF9TVFJFQU1fUkVTRVRfUkVTVUxUX1BFUkZPUk1FRDsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkg
KiB3ZSBtdXN0IHF1ZXVlIGl0IHVwIGFuZCB0aHVzIHdhaXQgZm9yIHRoZSBUU04ncworCQkJICog
dG8gYXJyaXZlIHRoYXQgYXJlIGF0IG9yIGJlZm9yZSB0c24KKwkJCSAqLworCQkJc3RydWN0IHNj
dHBfc3RyZWFtX3Jlc2V0X2xpc3QgKmxpc3RlOworCQkJaW50IHNpejsKKworCQkJc2l6ID0gc2l6
ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9saXN0KSArIChudW1iZXJfZW50cmllcyAqIHNp
emVvZih1aW50MTZfdCkpOworCQkJU0NUUF9NQUxMT0MobGlzdGUsIHN0cnVjdCBzY3RwX3N0cmVh
bV9yZXNldF9saXN0ICosCisJCQkJICAgIHNpeiwgU0NUUF9NX1NUUkVTRVQpOworCQkJaWYgKGxp
c3RlID09IE5VTEwpIHsKKwkJCQkvKiBnYWsgb3V0IG9mIG1lbW9yeSAqLworCQkJCWFzb2MtPmxh
c3RfcmVzZXRfYWN0aW9uWzBdID0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0RFTklFRDsKKwkJ
CQlzY3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0KGNoaywgc2VxLCBhc29jLT5sYXN0X3Jlc2V0
X2FjdGlvblswXSk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJbGlzdGUtPnNlcSA9IHNlcTsKKwkJ
CWxpc3RlLT50c24gPSB0c247CisJCQlsaXN0ZS0+bnVtYmVyX2VudHJpZXMgPSBudW1iZXJfZW50
cmllczsKKwkJCW1lbWNweSgmbGlzdGUtPmxpc3Rfb2Zfc3RyZWFtcywgcmVxLT5saXN0X29mX3N0
cmVhbXMsIG51bWJlcl9lbnRyaWVzICogc2l6ZW9mKHVpbnQxNl90KSk7CisJCQlUQUlMUV9JTlNF
UlRfVEFJTCgmYXNvYy0+cmVzZXRIZWFkLCBsaXN0ZSwgbmV4dF9yZXNwKTsKKwkJCWFzb2MtPmxh
c3RfcmVzZXRfYWN0aW9uWzBdID0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0lOX1BST0dSRVNT
OworCQl9CisJCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHQoY2hrLCBzZXEsIGFzb2MtPmxh
c3RfcmVzZXRfYWN0aW9uWzBdKTsKKwkJYXNvYy0+c3RyX3Jlc2V0X3NlcV9pbisrOworCX0gZWxz
ZSBpZiAoKGFzb2MtPnN0cl9yZXNldF9zZXFfaW4gLSAxKSA9PSBzZXEpIHsKKwkJLyoKKwkJICog
b25lIHNlcSBiYWNrLCBqdXN0IGVjaG8gYmFjayBsYXN0IGFjdGlvbiBzaW5jZSBteQorCQkgKiBy
ZXNwb25zZSB3YXMgbG9zdC4KKwkJICovCisJCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHQo
Y2hrLCBzZXEsIGFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzBdKTsKKwl9IGVsc2UgaWYgKChhc29j
LT5zdHJfcmVzZXRfc2VxX2luIC0gMikgPT0gc2VxKSB7CisJCS8qCisJCSAqIHR3byBzZXEgYmFj
aywganVzdCBlY2hvIGJhY2sgbGFzdCBhY3Rpb24gc2luY2UgbXkKKwkJICogcmVzcG9uc2Ugd2Fz
IGxvc3QuCisJCSAqLworCQlzY3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0KGNoaywgc2VxLCBh
c29jLT5sYXN0X3Jlc2V0X2FjdGlvblsxXSk7CisJfSBlbHNlIHsKKwkJc2N0cF9hZGRfc3RyZWFt
X3Jlc2V0X3Jlc3VsdChjaGssIHNlcSwgU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0VSUl9CQURf
U0VRTk8pOworCX0KK30KKworc3RhdGljIHZvaWQKK3NjdHBfaGFuZGxlX3N0cl9yZXNldF9hZGRf
c3RybShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywK
KwkJCSAgICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfYWRkX3N0cm0gICpzdHJfYWRkKQor
eworCS8qCisJICogUGVlciBpcyByZXF1ZXN0aW5nIHRvIGFkZCBtb3JlIHN0cmVhbXMuCisJICog
SWYgaXRzIHdpdGhpbiBvdXIgbWF4LXN0cmVhbXMgd2Ugd2lsbAorCSAqIGFsbG93IGl0LgorCSAq
LworCXVpbnQzMl90IG51bV9zdHJlYW0sIGk7CisJdWludDMyX3Qgc2VxOworCXN0cnVjdCBzY3Rw
X2Fzc29jaWF0aW9uICphc29jID0gJnN0Y2ItPmFzb2M7CisJc3RydWN0IHNjdHBfcXVldWVkX3Rv
X3JlYWQgKmN0bCwgKm5jdGw7CisKKwkvKiBHZXQgdGhlIG51bWJlci4gKi8KKwlzZXEgPSBudG9o
bChzdHJfYWRkLT5yZXF1ZXN0X3NlcSk7CisJbnVtX3N0cmVhbSA9IG50b2hzKHN0cl9hZGQtPm51
bWJlcl9vZl9zdHJlYW1zKTsKKwkvKiBOb3cgd2hhdCB3b3VsZCBiZSB0aGUgbmV3IHRvdGFsPyAq
LworCWlmIChhc29jLT5zdHJfcmVzZXRfc2VxX2luID09IHNlcSkgeworCQludW1fc3RyZWFtICs9
IHN0Y2ItPmFzb2Muc3RyZWFtaW5jbnQ7CisJCXN0Y2ItPmFzb2MubGFzdF9yZXNldF9hY3Rpb25b
MV0gPSBzdGNiLT5hc29jLmxhc3RfcmVzZXRfYWN0aW9uWzBdOworCQlpZiAoIShhc29jLT5sb2Nh
bF9zdHJyZXNldF9zdXBwb3J0ICYgU0NUUF9FTkFCTEVfQ0hBTkdFX0FTU09DX1JFUSkpIHsKKwkJ
CWFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzBdID0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0RF
TklFRDsKKwkJfSBlbHNlIGlmICgobnVtX3N0cmVhbSA+IHN0Y2ItPmFzb2MubWF4X2luYm91bmRf
c3RyZWFtcykgfHwKKwkJICAgICAgICAgICAobnVtX3N0cmVhbSA+IDB4ZmZmZikpIHsKKwkJCS8q
IFdlIG11c3QgcmVqZWN0IGl0IHRoZXkgYXNrIGZvciB0byBtYW55ICovCisgIGRlbmllZDoKKwkJ
CXN0Y2ItPmFzb2MubGFzdF9yZXNldF9hY3Rpb25bMF0gPSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNV
TFRfREVOSUVEOworCQl9IGVsc2UgeworCQkJLyogT2ssIHdlIGNhbiBkbyB0aGF0IDotKSAqLwor
CQkJc3RydWN0IHNjdHBfc3RyZWFtX2luICpvbGRzdHJtOworCisJCQkvKiBzYXZlIG9mZiB0aGUg
b2xkICovCisJCQlvbGRzdHJtID0gc3RjYi0+YXNvYy5zdHJtaW47CisJCQlTQ1RQX01BTExPQyhz
dGNiLT5hc29jLnN0cm1pbiwgc3RydWN0IHNjdHBfc3RyZWFtX2luICosCisJCQkgICAgICAgICAg
ICAobnVtX3N0cmVhbSAqIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1faW4pKSwKKwkJCSAgICAg
ICAgICAgIFNDVFBfTV9TVFJNSSk7CisJCQlpZiAoc3RjYi0+YXNvYy5zdHJtaW4gPT0gTlVMTCkg
eworCQkJCXN0Y2ItPmFzb2Muc3RybWluID0gb2xkc3RybTsKKwkJCQlnb3RvIGRlbmllZDsKKwkJ
CX0KKwkJCS8qIGNvcHkgb2ZmIHRoZSBvbGQgZGF0YSAqLworCQkJZm9yIChpID0gMDsgaSA8IHN0
Y2ItPmFzb2Muc3RyZWFtaW5jbnQ7IGkrKykgeworCQkJCVRBSUxRX0lOSVQoJnN0Y2ItPmFzb2Mu
c3RybWluW2ldLmlucXVldWUpOworCQkJCVRBSUxRX0lOSVQoJnN0Y2ItPmFzb2Muc3RybWluW2ld
LnVub19pbnF1ZXVlKTsKKwkJCQlzdGNiLT5hc29jLnN0cm1pbltpXS5zaWQgPSBpOworCQkJCXN0
Y2ItPmFzb2Muc3RybWluW2ldLmxhc3RfbWlkX2RlbGl2ZXJlZCA9IG9sZHN0cm1baV0ubGFzdF9t
aWRfZGVsaXZlcmVkOworCQkJCXN0Y2ItPmFzb2Muc3RybWluW2ldLmRlbGl2ZXJ5X3N0YXJ0ZWQg
PSBvbGRzdHJtW2ldLmRlbGl2ZXJ5X3N0YXJ0ZWQ7CisJCQkJc3RjYi0+YXNvYy5zdHJtaW5baV0u
cGRfYXBpX3N0YXJ0ZWQgPSBvbGRzdHJtW2ldLnBkX2FwaV9zdGFydGVkOworCQkJCS8qIG5vdyBh
bnl0aGluZyBvbiB0aG9zZSBxdWV1ZXM/ICovCisJCQkJVEFJTFFfRk9SRUFDSF9TQUZFKGN0bCwg
Jm9sZHN0cm1baV0uaW5xdWV1ZSwgbmV4dF9pbnN0cm0sIG5jdGwpIHsKKwkJCQkJVEFJTFFfUkVN
T1ZFKCZvbGRzdHJtW2ldLmlucXVldWUsIGN0bCwgbmV4dF9pbnN0cm0pOworCQkJCQlUQUlMUV9J
TlNFUlRfVEFJTCgmc3RjYi0+YXNvYy5zdHJtaW5baV0uaW5xdWV1ZSwgY3RsLCBuZXh0X2luc3Ry
bSk7CisJCQkJfQorCQkJCVRBSUxRX0ZPUkVBQ0hfU0FGRShjdGwsICZvbGRzdHJtW2ldLnVub19p
bnF1ZXVlLCBuZXh0X2luc3RybSwgbmN0bCkgeworCQkJCQlUQUlMUV9SRU1PVkUoJm9sZHN0cm1b
aV0udW5vX2lucXVldWUsIGN0bCwgbmV4dF9pbnN0cm0pOworCQkJCQlUQUlMUV9JTlNFUlRfVEFJ
TCgmc3RjYi0+YXNvYy5zdHJtaW5baV0udW5vX2lucXVldWUsIGN0bCwgbmV4dF9pbnN0cm0pOwor
CQkJCX0KKwkJCX0KKwkJCS8qIEluaXQgdGhlIG5ldyBzdHJlYW1zICovCisJCQlmb3IgKGkgPSBz
dGNiLT5hc29jLnN0cmVhbWluY250OyBpIDwgbnVtX3N0cmVhbTsgaSsrKSB7CisJCQkJVEFJTFFf
SU5JVCgmc3RjYi0+YXNvYy5zdHJtaW5baV0uaW5xdWV1ZSk7CisJCQkJVEFJTFFfSU5JVCgmc3Rj
Yi0+YXNvYy5zdHJtaW5baV0udW5vX2lucXVldWUpOworCQkJCXN0Y2ItPmFzb2Muc3RybWluW2ld
LnNpZCA9IGk7CisJCQkJc3RjYi0+YXNvYy5zdHJtaW5baV0ubGFzdF9taWRfZGVsaXZlcmVkID0g
MHhmZmZmZmZmZjsKKwkJCQlzdGNiLT5hc29jLnN0cm1pbltpXS5wZF9hcGlfc3RhcnRlZCA9IDA7
CisJCQkJc3RjYi0+YXNvYy5zdHJtaW5baV0uZGVsaXZlcnlfc3RhcnRlZCA9IDA7CisJCQl9CisJ
CQlTQ1RQX0ZSRUUob2xkc3RybSwgU0NUUF9NX1NUUk1JKTsKKwkJCS8qIHVwZGF0ZSB0aGUgc2l6
ZSAqLworCQkJc3RjYi0+YXNvYy5zdHJlYW1pbmNudCA9IG51bV9zdHJlYW07CisJCQlzdGNiLT5h
c29jLmxhc3RfcmVzZXRfYWN0aW9uWzBdID0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX1BFUkZP
Uk1FRDsKKwkJCXNjdHBfbm90aWZ5X3N0cmVhbV9yZXNldF9hZGQoc3RjYiwgc3RjYi0+YXNvYy5z
dHJlYW1pbmNudCwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQsIDApOworCQl9CisJCXNjdHBfYWRk
X3N0cmVhbV9yZXNldF9yZXN1bHQoY2hrLCBzZXEsIGFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzBd
KTsKKwkJYXNvYy0+c3RyX3Jlc2V0X3NlcV9pbisrOworCX0gZWxzZSBpZiAoKGFzb2MtPnN0cl9y
ZXNldF9zZXFfaW4gLSAxKSA9PSBzZXEpIHsKKwkJLyoKKwkJICogb25lIHNlcSBiYWNrLCBqdXN0
IGVjaG8gYmFjayBsYXN0IGFjdGlvbiBzaW5jZSBteQorCQkgKiByZXNwb25zZSB3YXMgbG9zdC4K
KwkJICovCisJCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHQoY2hrLCBzZXEsIGFzb2MtPmxh
c3RfcmVzZXRfYWN0aW9uWzBdKTsKKwl9IGVsc2UgaWYgKChhc29jLT5zdHJfcmVzZXRfc2VxX2lu
IC0gMikgPT0gc2VxKSB7CisJCS8qCisJCSAqIHR3byBzZXEgYmFjaywganVzdCBlY2hvIGJhY2sg
bGFzdCBhY3Rpb24gc2luY2UgbXkKKwkJICogcmVzcG9uc2Ugd2FzIGxvc3QuCisJCSAqLworCQlz
Y3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0KGNoaywgc2VxLCBhc29jLT5sYXN0X3Jlc2V0X2Fj
dGlvblsxXSk7CisJfSBlbHNlIHsKKwkJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jlc3VsdChjaGss
IHNlcSwgU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0VSUl9CQURfU0VRTk8pOworCX0KK30KKwor
c3RhdGljIHZvaWQKK3NjdHBfaGFuZGxlX3N0cl9yZXNldF9hZGRfb3V0X3N0cm0oc3RydWN0IHNj
dHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssCisJCQkJICAgc3RydWN0
IHNjdHBfc3RyZWFtX3Jlc2V0X2FkZF9zdHJtICAqc3RyX2FkZCkKK3sKKwkvKgorCSAqIFBlZXIg
aXMgcmVxdWVzdGluZyB0byBhZGQgbW9yZSBzdHJlYW1zLgorCSAqIElmIGl0cyB3aXRoaW4gb3Vy
IG1heC1zdHJlYW1zIHdlIHdpbGwKKwkgKiBhbGxvdyBpdC4KKwkgKi8KKwl1aW50MTZfdCBudW1f
c3RyZWFtOworCXVpbnQzMl90IHNlcTsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyA9
ICZzdGNiLT5hc29jOworCisJLyogR2V0IHRoZSBudW1iZXIuICovCisJc2VxID0gbnRvaGwoc3Ry
X2FkZC0+cmVxdWVzdF9zZXEpOworCW51bV9zdHJlYW0gPSBudG9ocyhzdHJfYWRkLT5udW1iZXJf
b2Zfc3RyZWFtcyk7CisJLyogTm93IHdoYXQgd291bGQgYmUgdGhlIG5ldyB0b3RhbD8gKi8KKwlp
ZiAoYXNvYy0+c3RyX3Jlc2V0X3NlcV9pbiA9PSBzZXEpIHsKKwkJc3RjYi0+YXNvYy5sYXN0X3Jl
c2V0X2FjdGlvblsxXSA9IHN0Y2ItPmFzb2MubGFzdF9yZXNldF9hY3Rpb25bMF07CisJCWlmICgh
KGFzb2MtPmxvY2FsX3N0cnJlc2V0X3N1cHBvcnQgJiBTQ1RQX0VOQUJMRV9DSEFOR0VfQVNTT0Nf
UkVRKSkgeworCQkJYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0gPSBTQ1RQX1NUUkVBTV9SRVNF
VF9SRVNVTFRfREVOSUVEOworCQl9IGVsc2UgaWYgKHN0Y2ItPmFzb2Muc3RyZWFtX3Jlc2V0X291
dHN0YW5kaW5nKSB7CisJCQkvKiBXZSBtdXN0IHJlamVjdCBpdCB3ZSBoYXZlIHNvbWV0aGluZyBw
ZW5kaW5nICovCisJCQlzdGNiLT5hc29jLmxhc3RfcmVzZXRfYWN0aW9uWzBdID0gU0NUUF9TVFJF
QU1fUkVTRVRfUkVTVUxUX0VSUl9JTl9QUk9HUkVTUzsKKwkJfSBlbHNlIHsKKwkJCS8qIE9rLCB3
ZSBjYW4gZG8gdGhhdCA6LSkgKi8KKwkJCWludCBteWNoazsKKwkJCW15Y2hrID0gc3RjYi0+YXNv
Yy5zdHJlYW1vdXRjbnQ7CisJCQlteWNoayArPSBudW1fc3RyZWFtOworCQkJaWYgKG15Y2hrIDwg
MHgxMDAwMCkgeworCQkJCXN0Y2ItPmFzb2MubGFzdF9yZXNldF9hY3Rpb25bMF0gPSBTQ1RQX1NU
UkVBTV9SRVNFVF9SRVNVTFRfUEVSRk9STUVEOworCQkJCWlmIChzY3RwX3NlbmRfc3RyX3Jlc2V0
X3JlcShzdGNiLCAwLCBOVUxMLCAwLCAwLCAxLCBudW1fc3RyZWFtLCAwLCAxKSkgeworCQkJCQlz
dGNiLT5hc29jLmxhc3RfcmVzZXRfYWN0aW9uWzBdID0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxU
X0RFTklFRDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXN0Y2ItPmFzb2MubGFzdF9yZXNldF9h
Y3Rpb25bMF0gPSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfREVOSUVEOworCQkJfQorCQl9CisJ
CXNjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHQoY2hrLCBzZXEsIHN0Y2ItPmFzb2MubGFzdF9y
ZXNldF9hY3Rpb25bMF0pOworCQlhc29jLT5zdHJfcmVzZXRfc2VxX2luKys7CisJfSBlbHNlIGlm
ICgoYXNvYy0+c3RyX3Jlc2V0X3NlcV9pbiAtIDEpID09IHNlcSkgeworCQkvKgorCQkgKiBvbmUg
c2VxIGJhY2ssIGp1c3QgZWNobyBiYWNrIGxhc3QgYWN0aW9uIHNpbmNlIG15CisJCSAqIHJlc3Bv
bnNlIHdhcyBsb3N0LgorCQkgKi8KKwkJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jlc3VsdChjaGss
IHNlcSwgYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0pOworCX0gZWxzZSBpZiAoKGFzb2MtPnN0
cl9yZXNldF9zZXFfaW4gLSAyKSA9PSBzZXEpIHsKKwkJLyoKKwkJICogdHdvIHNlcSBiYWNrLCBq
dXN0IGVjaG8gYmFjayBsYXN0IGFjdGlvbiBzaW5jZSBteQorCQkgKiByZXNwb25zZSB3YXMgbG9z
dC4KKwkJICovCisJCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHQoY2hrLCBzZXEsIGFzb2Mt
Pmxhc3RfcmVzZXRfYWN0aW9uWzFdKTsKKwl9IGVsc2UgeworCQlzY3RwX2FkZF9zdHJlYW1fcmVz
ZXRfcmVzdWx0KGNoaywgc2VxLCBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfRVJSX0JBRF9TRVFO
Tyk7CisJfQorfQorCisjaWZkZWYgX19HTlVDX18KK19fYXR0cmlidXRlX18gKChub2lubGluZSkp
CisjZW5kaWYKK3N0YXRpYyBpbnQKK3NjdHBfaGFuZGxlX3N0cmVhbV9yZXNldChzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IsIHN0cnVjdCBtYnVmICptLCBpbnQgb2Zmc2V0LAorCQkJIHN0cnVjdCBzY3Rw
X2NodW5raGRyICpjaF9yZXEpCit7CisJdWludDE2X3QgcmVtYWluaW5nX2xlbmd0aCwgcGFyYW1f
bGVuLCBwdHlwZTsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwc3RvcmU7CisJdWludDhfdCBjc3Rv
cmVbU0NUUF9DSFVOS19CVUZGRVJfU0laRV07CisJdWludDMyX3Qgc2VxID0gMDsKKwlpbnQgbnVt
X3JlcSA9IDA7CisJaW50IHRydW5jID0gMDsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7
CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOworCXN0cnVjdCBzY3RwX3BhcmFtaGRyICpwaDsK
KwlpbnQgcmV0X2NvZGUgPSAwOworCWludCBudW1fcGFyYW0gPSAwOworCisJLyogbm93IGl0IG1h
eSBiZSBhIHJlc2V0IG9yIGEgcmVzZXQtcmVzcG9uc2UgKi8KKwlyZW1haW5pbmdfbGVuZ3RoID0g
bnRvaHMoY2hfcmVxLT5jaHVua19sZW5ndGgpIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRy
KTsKKworCS8qIHNldHVwIGZvciBhZGRpbmcgdGhlIHJlc3BvbnNlICovCisJc2N0cF9hbGxvY19h
X2NodW5rKHN0Y2IsIGNoayk7CisJaWYgKGNoayA9PSBOVUxMKSB7CisJCXJldHVybiAocmV0X2Nv
ZGUpOworCX0KKwljaGstPmNvcHlfYnlfcmVmID0gMDsKKwljaGstPnJlYy5jaHVua19pZC5pZCA9
IFNDVFBfU1RSRUFNX1JFU0VUOworCWNoay0+cmVjLmNodW5rX2lkLmNhbl90YWtlX2RhdGEgPSAw
OworCWNoay0+ZmxhZ3MgPSAwOworCWNoay0+YXNvYyA9ICZzdGNiLT5hc29jOworCWNoay0+bm9f
ZnJfYWxsb3dlZCA9IDA7CisJY2hrLT5ib29rX3NpemUgPSBjaGstPnNlbmRfc2l6ZSA9IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7CisJY2hrLT5ib29rX3NpemVfc2NhbGUgPSAwOworCWNo
ay0+ZGF0YSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhNQ0xCWVRFUywgMCwgTV9OT1dBSVQsIDEs
IE1UX0RBVEEpOworCWlmIChjaGstPmRhdGEgPT0gTlVMTCkgeworCXN0cnJlc19ub2NodW5rOgor
CQlpZiAoY2hrLT5kYXRhKSB7CisJCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRhKTsKKwkJCWNoay0+
ZGF0YSA9IE5VTEw7CisJCX0KKwkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBTQ1RQX1NP
X05PVF9MT0NLRUQpOworCQlyZXR1cm4gKHJldF9jb2RlKTsKKwl9CisJU0NUUF9CVUZfUkVTVl9V
RihjaGstPmRhdGEsIFNDVFBfTUlOX09WRVJIRUFEKTsKKworCS8qIHNldHVwIGNodW5rIHBhcmFt
ZXRlcnMgKi8KKwljaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1VOU0VOVDsKKwljaGstPnNuZF9j
b3VudCA9IDA7CisJY2hrLT53aG9UbyA9IE5VTEw7CisKKwljaCA9IG10b2QoY2hrLT5kYXRhLCBz
dHJ1Y3Qgc2N0cF9jaHVua2hkciAqKTsKKwljaC0+Y2h1bmtfdHlwZSA9IFNDVFBfU1RSRUFNX1JF
U0VUOworCWNoLT5jaHVua19mbGFncyA9IDA7CisJY2gtPmNodW5rX2xlbmd0aCA9IGh0b25zKGNo
ay0+c2VuZF9zaXplKTsKKwlTQ1RQX0JVRl9MRU4oY2hrLT5kYXRhKSA9IFNDVFBfU0laRTMyKGNo
ay0+c2VuZF9zaXplKTsKKwlvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKTsK
Kwl3aGlsZSAocmVtYWluaW5nX2xlbmd0aCA+PSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIp
KSB7CisJCXBoID0gKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopc2N0cF9tX2dldHB0cihtLCBvZmZz
ZXQsIHNpemVvZihwc3RvcmUpLCAodWludDhfdCAqKSZwc3RvcmUpOworCQlpZiAocGggPT0gTlVM
TCkgeworCQkJLyogVFNOSCAqLworCQkJYnJlYWs7CisJCX0KKwkJcGFyYW1fbGVuID0gbnRvaHMo
cGgtPnBhcmFtX2xlbmd0aCk7CisJCWlmICgocGFyYW1fbGVuID4gcmVtYWluaW5nX2xlbmd0aCkg
fHwKKwkJICAgIChwYXJhbV9sZW4gPCAoc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSArIHNp
emVvZih1aW50MzJfdCkpKSkgeworCQkJLyogYmFkIHBhcmFtZXRlciBsZW5ndGggKi8KKwkJCWJy
ZWFrOworCQl9CisJCXBoID0gKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopc2N0cF9tX2dldHB0ciht
LCBvZmZzZXQsIG1pbihwYXJhbV9sZW4sIHNpemVvZihjc3RvcmUpKSwKKwkJCQkJCQkgICAodWlu
dDhfdCAqKSZjc3RvcmUpOworCQlpZiAocGggPT0gTlVMTCkgeworCQkJLyogVFNOSCAqLworCQkJ
YnJlYWs7CisJCX0KKwkJcHR5cGUgPSBudG9ocyhwaC0+cGFyYW1fdHlwZSk7CisJCW51bV9wYXJh
bSsrOworCQlpZiAocGFyYW1fbGVuID4gc2l6ZW9mKGNzdG9yZSkpIHsKKwkJCXRydW5jID0gMTsK
KwkJfSBlbHNlIHsKKwkJCXRydW5jID0gMDsKKwkJfQorCQlpZiAobnVtX3BhcmFtID4gU0NUUF9N
QVhfUkVTRVRfUEFSQU1TKSB7CisJCQkvKiBoaXQgdGhlIG1heCBvZiBwYXJhbWV0ZXJzIGFscmVh
ZHkgc29ycnkuLiAqLworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHB0eXBlID09IFNDVFBfU1RSX1JF
U0VUX09VVF9SRVFVRVNUKSB7CisJCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfb3V0X3JlcXVl
c3QgKnJlcV9vdXQ7CisKKwkJCWlmIChwYXJhbV9sZW4gPCBzaXplb2Yoc3RydWN0IHNjdHBfc3Ry
ZWFtX3Jlc2V0X291dF9yZXF1ZXN0KSkgeworCQkJCWJyZWFrOworCQkJfQorCQkJcmVxX291dCA9
IChzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfb3V0X3JlcXVlc3QgKilwaDsKKwkJCW51bV9yZXEr
KzsKKwkJCWlmIChzdGNiLT5hc29jLnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZykgeworCQkJCXNl
cSA9IG50b2hsKHJlcV9vdXQtPnJlc3BvbnNlX3NlcSk7CisJCQkJaWYgKHNlcSA9PSBzdGNiLT5h
c29jLnN0cl9yZXNldF9zZXFfb3V0KSB7CisJCQkJCS8qIGltcGxpY2l0IGFjayAqLworCQkJCQko
dm9pZClzY3RwX2hhbmRsZV9zdHJlYW1fcmVzZXRfcmVzcG9uc2Uoc3RjYiwgc2VxLCBTQ1RQX1NU
UkVBTV9SRVNFVF9SRVNVTFRfUEVSRk9STUVELCBOVUxMKTsKKwkJCQl9CisJCQl9CisJCQlzY3Rw
X2hhbmRsZV9zdHJfcmVzZXRfcmVxdWVzdF9vdXQoc3RjYiwgY2hrLCByZXFfb3V0LCB0cnVuYyk7
CisJCX0gZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9TVFJfUkVTRVRfQUREX09VVF9TVFJFQU1TKSB7
CisJCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfYWRkX3N0cm0gICpzdHJfYWRkOworCisJCQlp
ZiAocGFyYW1fbGVuIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9hZGRfc3RybSkp
IHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXN0cl9hZGQgPSAoc3RydWN0IHNjdHBfc3RyZWFtX3Jl
c2V0X2FkZF9zdHJtICAqKXBoOworCQkJbnVtX3JlcSsrOworCQkJc2N0cF9oYW5kbGVfc3RyX3Jl
c2V0X2FkZF9zdHJtKHN0Y2IsIGNoaywgc3RyX2FkZCk7CisJCX0gZWxzZSBpZiAocHR5cGUgPT0g
U0NUUF9TVFJfUkVTRVRfQUREX0lOX1NUUkVBTVMpIHsKKwkJCXN0cnVjdCBzY3RwX3N0cmVhbV9y
ZXNldF9hZGRfc3RybSAgKnN0cl9hZGQ7CisKKwkJCWlmIChwYXJhbV9sZW4gPCBzaXplb2Yoc3Ry
dWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2FkZF9zdHJtKSkgeworCQkJCWJyZWFrOworCQkJfQorCQkJ
c3RyX2FkZCA9IChzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfYWRkX3N0cm0gICopcGg7CisJCQlu
dW1fcmVxKys7CisJCQlzY3RwX2hhbmRsZV9zdHJfcmVzZXRfYWRkX291dF9zdHJtKHN0Y2IsIGNo
aywgc3RyX2FkZCk7CisJCX0gZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9TVFJfUkVTRVRfSU5fUkVR
VUVTVCkgeworCQkJc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2luX3JlcXVlc3QgKnJlcV9pbjsK
KworCQkJbnVtX3JlcSsrOworCQkJcmVxX2luID0gKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9p
bl9yZXF1ZXN0ICopcGg7CisJCQlzY3RwX2hhbmRsZV9zdHJfcmVzZXRfcmVxdWVzdF9pbihzdGNi
LCBjaGssIHJlcV9pbiwgdHJ1bmMpOworCQl9IGVsc2UgaWYgKHB0eXBlID09IFNDVFBfU1RSX1JF
U0VUX1RTTl9SRVFVRVNUKSB7CisJCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfdHNuX3JlcXVl
c3QgKnJlcV90c247CisKKwkJCW51bV9yZXErKzsKKwkJCXJlcV90c24gPSAoc3RydWN0IHNjdHBf
c3RyZWFtX3Jlc2V0X3Rzbl9yZXF1ZXN0ICopcGg7CisJCQlpZiAoc2N0cF9oYW5kbGVfc3RyX3Jl
c2V0X3JlcXVlc3RfdHNuKHN0Y2IsIGNoaywgcmVxX3RzbikpIHsKKwkJCQlyZXRfY29kZSA9IDE7
CisJCQkJZ290byBzdHJyZXNfbm9jaHVuazsKKwkJCX0KKwkJCS8qIG5vIG1vcmUgKi8KKwkJCWJy
ZWFrOworCQl9IGVsc2UgaWYgKHB0eXBlID09IFNDVFBfU1RSX1JFU0VUX1JFU1BPTlNFKSB7CisJ
CQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVzcG9uc2UgKnJlc3A7CisJCQl1aW50MzJfdCBy
ZXN1bHQ7CisKKwkJCWlmIChwYXJhbV9sZW4gPCBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX3Jl
c2V0X3Jlc3BvbnNlKSkgeworCQkJCWJyZWFrOworCQkJfQorCQkJcmVzcCA9IChzdHJ1Y3Qgc2N0
cF9zdHJlYW1fcmVzZXRfcmVzcG9uc2UgKilwaDsKKwkJCXNlcSA9IG50b2hsKHJlc3AtPnJlc3Bv
bnNlX3NlcSk7CisJCQlyZXN1bHQgPSBudG9obChyZXNwLT5yZXN1bHQpOworCQkJaWYgKHNjdHBf
aGFuZGxlX3N0cmVhbV9yZXNldF9yZXNwb25zZShzdGNiLCBzZXEsIHJlc3VsdCwgcmVzcCkpIHsK
KwkJCQlyZXRfY29kZSA9IDE7CisJCQkJZ290byBzdHJyZXNfbm9jaHVuazsKKwkJCX0KKwkJfSBl
bHNlIHsKKwkJCWJyZWFrOworCQl9CisJCW9mZnNldCArPSBTQ1RQX1NJWkUzMihwYXJhbV9sZW4p
OworCQlpZiAocmVtYWluaW5nX2xlbmd0aCA+PSBTQ1RQX1NJWkUzMihwYXJhbV9sZW4pKSB7CisJ
CQlyZW1haW5pbmdfbGVuZ3RoIC09IFNDVFBfU0laRTMyKHBhcmFtX2xlbik7CisJCX0gZWxzZSB7
CisJCQlyZW1haW5pbmdfbGVuZ3RoID0gMDsKKwkJfQorCX0KKwlpZiAobnVtX3JlcSA9PSAwKSB7
CisJCS8qIHdlIGhhdmUgbm8gcmVzcG9uc2UgZnJlZSB0aGUgc3R1ZmYgKi8KKwkJZ290byBzdHJy
ZXNfbm9jaHVuazsKKwl9CisJLyogb2sgd2UgaGF2ZSBhIGNodW5rIHRvIGxpbmsgaW4gKi8KKwlU
QUlMUV9JTlNFUlRfVEFJTCgmc3RjYi0+YXNvYy5jb250cm9sX3NlbmRfcXVldWUsCisJCQkgIGNo
aywKKwkJCSAgc2N0cF9uZXh0KTsKKwlzdGNiLT5hc29jLmN0cmxfcXVldWVfY250Kys7CisJcmV0
dXJuIChyZXRfY29kZSk7Cit9CisKKy8qCisgKiBIYW5kbGUgYSByb3V0ZXIgb3IgZW5kcG9pbnRz
IHJlcG9ydCBvZiBhIHBhY2tldCBsb3NzLCB0aGVyZSBhcmUgdHdvIHdheXMKKyAqIHRvIGhhbmRs
ZSB0aGlzLCBlaXRoZXIgd2UgZ2V0IHRoZSB3aG9sZSBwYWNrZXQgYW5kIG11c3QgZGlzZWN0IGl0
CisgKiBvdXJzZWx2ZXMgKHBvc3NpYmx5IHdpdGggdHJ1bmNhdGlvbiBhbmQgb3IgY29ycnVwdGlv
bikgb3IgaXQgaXMgYSBzdW1tYXJ5CisgKiBmcm9tIGEgbWlkZGxlIGJveCB0aGF0IGRpZCB0aGUg
ZGlzZWN0dGluZyBmb3IgdXMuCisgKi8KK3N0YXRpYyB2b2lkCitzY3RwX2hhbmRsZV9wYWNrZXRf
ZHJvcHBlZChzdHJ1Y3Qgc2N0cF9wa3Rkcm9wX2NodW5rICpjcCwKKyAgICBzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgdWludDMyX3QgbGltaXQpCit7CisJc3Ry
dWN0IHNjdHBfY2h1bmtfZGVzYyBkZXNjOworCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaGtfaGRy
OworCXN0cnVjdCBzY3RwX2RhdGFfY2h1bmsgKmRhdGFfY2h1bms7CisJc3RydWN0IHNjdHBfaWRh
dGFfY2h1bmsgKmlkYXRhX2NodW5rOworCXVpbnQzMl90IGJvdHRsZV9idywgb25fcXVldWU7CisJ
dWludDMyX3Qgb2Zmc2V0LCBjaGtfbGVuOworCXVpbnQxNl90IHBrdGRycF9sZW47CisJdWludDhf
dCBwa3RkcnBfZmxhZ3M7CisKKwlLQVNTRVJUKHNpemVvZihzdHJ1Y3Qgc2N0cF9wa3Rkcm9wX2No
dW5rKSA8PSBsaW1pdCwKKwkgICAgICAgICgiUEtURFJPUCBjaHVuayB0b28gc21hbGwiKSk7CisJ
cGt0ZHJwX2ZsYWdzID0gY3AtPmNoLmNodW5rX2ZsYWdzOworCXBrdGRycF9sZW4gPSBudG9ocyhj
cC0+Y2guY2h1bmtfbGVuZ3RoKTsKKwlLQVNTRVJUKGxpbWl0IDw9IHBrdGRycF9sZW4sICgiSW5j
b25zaXN0ZW50IGxpbWl0IikpOworCWlmIChwa3RkcnBfZmxhZ3MgJiBTQ1RQX1BBQ0tFVF9UUlVO
Q0FURUQpIHsKKwkJaWYgKG50b2hzKGNwLT50cnVuY19sZW4pIDw9IHBrdGRycF9sZW4gLSBzaXpl
b2Yoc3RydWN0IHNjdHBfcGt0ZHJvcF9jaHVuaykpIHsKKwkJCS8qIFRoZSBwZWVyIHBsYXlzIGdh
bWVzIHdpdGggdXMuICovCisJCQlyZXR1cm47CisJCX0KKwl9CisJbGltaXQgLT0gc2l6ZW9mKHN0
cnVjdCBzY3RwX3BrdGRyb3BfY2h1bmspOworCW9mZnNldCA9IDA7CisJaWYgKG9mZnNldCA9PSBs
aW1pdCkgeworCQlpZiAocGt0ZHJwX2ZsYWdzICYgU0NUUF9GUk9NX01JRERMRV9CT1gpIHsKKwkJ
CVNDVFBfU1RBVF9JTkNSKHNjdHBzX3BkcnBid3JwdCk7CisJCX0KKwl9IGVsc2UgaWYgKG9mZnNl
dCArIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgPiBsaW1pdCkgeworCQkvKiBPbmx5IGEgcGFydGlh
bCBTQ1RQIGNvbW1vbiBoZWFkZXIuICovCisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3BkcnBjcnVw
dCk7CisJCW9mZnNldCA9IGxpbWl0OworCX0gZWxzZSB7CisJCS8qIFhYWDogQ2hlY2sgZW1iZWRk
ZWQgU0NUUCBjb21tb24gaGVhZGVyLiAqLworCQlvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBzY3Rw
aGRyKTsKKwl9CisJLyogTm93IHBhcnNlIHRocm91Z2ggdGhlIGNodW5rcyB0aGVtc2VsdmVzLiAq
LworCXdoaWxlIChvZmZzZXQgPCBsaW1pdCkgeworCQlpZiAob2Zmc2V0ICsgc2l6ZW9mKHN0cnVj
dCBzY3RwX2NodW5raGRyKSA+IGxpbWl0KSB7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19wZHJw
Y3J1cHQpOworCQkJYnJlYWs7CisJCX0KKwkJY2hrX2hkciA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hk
ciAqKShjcC0+ZGF0YSArIG9mZnNldCk7CisJCWRlc2MuY2h1bmtfdHlwZSA9IGNoa19oZHItPmNo
dW5rX3R5cGU7CisJCS8qIGdldCBhbW91bnQgd2UgbmVlZCB0byBtb3ZlICovCisJCWNoa19sZW4g
PSAodWludDMyX3QpbnRvaHMoY2hrX2hkci0+Y2h1bmtfbGVuZ3RoKTsKKwkJaWYgKGNoa19sZW4g
PCBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKSB7CisJCQkvKiBTb21lb25lIGlzIGx5aW5n
Li4uICovCisJCQlicmVhazsKKwkJfQorCQlpZiAoZGVzYy5jaHVua190eXBlID09IFNDVFBfREFU
QSkgeworCQkJaWYgKHN0Y2ItPmFzb2MuaWRhdGFfc3VwcG9ydGVkKSB7CisJCQkJLyogU29tZSBp
cyBwbGF5aW5nIGdhbWVzIHdpdGggdXMuICovCisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoY2hr
X2xlbiA8PSBzaXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuaykpIHsKKwkJCQkvKiBTb21lIGlz
IHBsYXlpbmcgZ2FtZXMgd2l0aCB1cy4gKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChjaGtf
bGVuIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspICsgU0NUUF9OVU1fREJfVE9fVkVS
SUZZKSB7CisJCQkJLyogTm90IGVub3VnaCBkYXRhIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgY2h1
bmsuICovCisJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcGRycG5lZGF0KTsKKwkJCQlnb3RvIG5l
eHRfY2h1bms7CisJCQl9CisJCQlpZiAob2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFf
Y2h1bmspICsgU0NUUF9OVU1fREJfVE9fVkVSSUZZID4gbGltaXQpIHsKKwkJCQkvKiBOb3QgZW5v
dWdoIGRhdGEgaW4gYnVmZmVyLiAqLworCQkJCWJyZWFrOworCQkJfQorCQkJZGF0YV9jaHVuayA9
IChzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rICopKGNwLT5kYXRhICsgb2Zmc2V0KTsKKwkJCW1lbWNw
eShkZXNjLmRhdGFfYnl0ZXMsIGRhdGFfY2h1bmsgKyAxLCBTQ1RQX05VTV9EQl9UT19WRVJJRlkp
OworCQkJZGVzYy50c25faWZhbnkgPSBkYXRhX2NodW5rLT5kcC50c247CisJCQlpZiAocGt0ZHJw
X2ZsYWdzICYgU0NUUF9GUk9NX01JRERMRV9CT1gpIHsKKwkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rw
c19wZHJwbWJkYSk7CisJCQl9CisJCX0gZWxzZSBpZiAoZGVzYy5jaHVua190eXBlID09IFNDVFBf
SURBVEEpIHsKKwkJCWlmICghc3RjYi0+YXNvYy5pZGF0YV9zdXBwb3J0ZWQpIHsKKwkJCQkvKiBT
b21lIGlzIHBsYXlpbmcgZ2FtZXMgd2l0aCB1cy4gKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJCWlm
IChjaGtfbGVuIDw9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pZGF0YV9jaHVuaykpIHsKKwkJCQkvKiBT
b21lIGlzIHBsYXlpbmcgZ2FtZXMgd2l0aCB1cy4gKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJCWlm
IChjaGtfbGVuIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX2lkYXRhX2NodW5rKSArIFNDVFBfTlVNX0RC
X1RPX1ZFUklGWSkgeworCQkJCS8qIE5vdCBlbm91Z2ggZGF0YSBieXRlcyBhdmFpbGFibGUgaW4g
dGhlIGNodW5rLiAqLworCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3BkcnBuZWRhdCk7CisJCQkJ
Z290byBuZXh0X2NodW5rOworCQkJfQorCQkJaWYgKG9mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0
cF9pZGF0YV9jaHVuaykgKyBTQ1RQX05VTV9EQl9UT19WRVJJRlkgPiBsaW1pdCkgeworCQkJCS8q
IE5vdCBlbm91Z2ggZGF0YSBpbiBidWZmZXIuICovCisJCQkJYnJlYWs7CisJCQl9CisJCQlpZGF0
YV9jaHVuayA9IChzdHJ1Y3Qgc2N0cF9pZGF0YV9jaHVuayAqKShjcC0+ZGF0YSArIG9mZnNldCk7
CisJCQltZW1jcHkoZGVzYy5kYXRhX2J5dGVzLCBpZGF0YV9jaHVuayArIDEsIFNDVFBfTlVNX0RC
X1RPX1ZFUklGWSk7CisJCQlkZXNjLnRzbl9pZmFueSA9IGlkYXRhX2NodW5rLT5kcC50c247CisJ
CQlpZiAocGt0ZHJwX2ZsYWdzICYgU0NUUF9GUk9NX01JRERMRV9CT1gpIHsKKwkJCQlTQ1RQX1NU
QVRfSU5DUihzY3Rwc19wZHJwbWJkYSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAocGt0ZHJw
X2ZsYWdzICYgU0NUUF9GUk9NX01JRERMRV9CT1gpIHsKKwkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rw
c19wZHJwbWJjdCk7CisJCQl9CisJCX0KKwkJaWYgKHByb2Nlc3NfY2h1bmtfZHJvcChzdGNiLCAm
ZGVzYywgbmV0LCBwa3RkcnBfZmxhZ3MpKSB7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19wZHJw
cGRicmspOworCQkJYnJlYWs7CisJCX0KK25leHRfY2h1bms6CisJCW9mZnNldCArPSBTQ1RQX1NJ
WkUzMihjaGtfbGVuKTsKKwl9CisJLyogTm93IHVwZGF0ZSBhbnkgcnduZCAtLS0gcG9zc2libHkg
Ki8KKwlpZiAoKHBrdGRycF9mbGFncyAmIFNDVFBfRlJPTV9NSURETEVfQk9YKSA9PSAwKSB7CisJ
CS8qIEZyb20gYSBwZWVyLCB3ZSBnZXQgYSByd25kIHJlcG9ydCAqLworCQl1aW50MzJfdCBhX3J3
bmQ7CisKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcGRycGZlaG9zKTsKKworCQlib3R0bGVfYncg
PSBudG9obChjcC0+Ym90dGxlX2J3KTsKKwkJb25fcXVldWUgPSBudG9obChjcC0+Y3VycmVudF9v
bnEpOworCQlpZiAoYm90dGxlX2J3ICYmIG9uX3F1ZXVlKSB7CisJCQkvKiBhIHJ3bmQgcmVwb3J0
IGlzIGluIGhlcmUgKi8KKwkJCWlmIChib3R0bGVfYncgPiBvbl9xdWV1ZSkKKwkJCQlhX3J3bmQg
PSBib3R0bGVfYncgLSBvbl9xdWV1ZTsKKwkJCWVsc2UKKwkJCQlhX3J3bmQgPSAwOworCisJCQlp
ZiAoYV9yd25kID09IDApCisJCQkJc3RjYi0+YXNvYy5wZWVyc19yd25kID0gMDsKKwkJCWVsc2Ug
eworCQkJCWlmIChhX3J3bmQgPiBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCkgeworCQkJCQlzdGNi
LT5hc29jLnBlZXJzX3J3bmQgPQorCQkJCQkgICAgYV9yd25kIC0gc3RjYi0+YXNvYy50b3RhbF9m
bGlnaHQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJc3RjYi0+YXNvYy5wZWVyc19yd25kID0gMDsKKwkJ
CQl9CisJCQkJaWYgKHN0Y2ItPmFzb2MucGVlcnNfcnduZCA8CisJCQkJICAgIHN0Y2ItPnNjdHBf
ZXAtPnNjdHBfZXAuc2N0cF9zd3Nfc2VuZGVyKSB7CisJCQkJCS8qIFNXUyBzZW5kZXIgc2lkZSBl
bmdhZ2VzICovCisJCQkJCXN0Y2ItPmFzb2MucGVlcnNfcnduZCA9IDA7CisJCQkJfQorCQkJfQor
CQl9CisJfSBlbHNlIHsKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcGRycGZtYm94KTsKKwl9CisK
KwkvKiBub3cgbWlkZGxlIGJveGVzIGluIHNhdCBuZXR3b3JrcyBnZXQgYSBjd25kIGJ1bXAgKi8K
KwlpZiAoKHBrdGRycF9mbGFncyAmIFNDVFBfRlJPTV9NSURETEVfQk9YKSAmJgorCSAgICAoc3Rj
Yi0+YXNvYy5zYXRfdDNfbG9zc19yZWNvdmVyeSA9PSAwKSAmJgorCSAgICAoc3RjYi0+YXNvYy5z
YXRfbmV0d29yaykpIHsKKwkJLyoKKwkJICogVGhpcyBpcyBkZWJhdGFibGUgYnV0IGZvciBzYXQg
bmV0d29ya3MgaXQgbWFrZXMgc2Vuc2UKKwkJICogTm90ZSBpZiBhIFQzIHRpbWVyIGhhcyB3ZW50
IG9mZiwgd2Ugd2lsbCBwcm9oaWJpdCBhbnkKKwkJICogY2hhbmdlcyB0byBjd25kIHVudGlsIHdl
IGV4aXQgdGhlIHQzIGxvc3MgcmVjb3ZlcnkuCisJCSAqLworCQlzdGNiLT5hc29jLmNjX2Z1bmN0
aW9ucy5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3BhY2tldF9kcm9wcGVkKHN0Y2IsCisJCQluZXQs
IGNwLCAmYm90dGxlX2J3LCAmb25fcXVldWUpOworCX0KK30KKworLyoKKyAqIGhhbmRsZXMgYWxs
IGNvbnRyb2wgY2h1bmtzIGluIGEgcGFja2V0IGlucHV0czogLSBtOiBtYnVmIGNoYWluLCBhc3N1
bWVkIHRvCisgKiBzdGlsbCBjb250YWluIElQL1NDVFAgaGVhZGVyIC0gc3RjYjogaXMgdGhlIHRj
YiBmb3VuZCBmb3IgdGhpcyBwYWNrZXQgLQorICogb2Zmc2V0OiBvZmZzZXQgaW50byB0aGUgbWJ1
ZiBjaGFpbiB0byBmaXJzdCBjaHVua2hkciAtIGxlbmd0aDogaXMgdGhlCisgKiBsZW5ndGggb2Yg
dGhlIGNvbXBsZXRlIHBhY2tldCBvdXRwdXRzOiAtIGxlbmd0aDogbW9kaWZpZWQgdG8gcmVtYWlu
aW5nCisgKiBsZW5ndGggYWZ0ZXIgY29udHJvbCBwcm9jZXNzaW5nIC0gbmV0cDogbW9kaWZpZWQg
dG8gbmV3IHNjdHBfbmV0cyBhZnRlcgorICogY29va2llLWVjaG8gcHJvY2Vzc2luZyAtIHJldHVy
biBOVUxMIHRvIGRpc2NhcmQgdGhlIHBhY2tldCAoaWUuIG5vIGFzb2MsCisgKiBiYWQgcGFja2V0
LC4uLikgb3RoZXJ3aXNlIHJldHVybiB0aGUgdGNiIGZvciB0aGlzIHBhY2tldAorICovCisjaWZk
ZWYgX19HTlVDX18KK19fYXR0cmlidXRlX18gKChub2lubGluZSkpCisjZW5kaWYKK3N0YXRpYyBz
dHJ1Y3Qgc2N0cF90Y2IgKgorc2N0cF9wcm9jZXNzX2NvbnRyb2woc3RydWN0IG1idWYgKm0sIGlu
dCBpcGhsZW4sIGludCAqb2Zmc2V0LCBpbnQgbGVuZ3RoLAorICAgIHN0cnVjdCBzb2NrYWRkciAq
c3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwKKyAgICBzdHJ1Y3Qgc2N0cGhkciAqc2gsIHN0cnVj
dCBzY3RwX2NodW5raGRyICpjaCwgc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKKyAgICBzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKipuZXRwLCBpbnQgKmZ3ZF90c25fc2Vl
biwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
ICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxvd2lkLCB1aW50MTZfdCBmaWJudW0s
CisjZW5kaWYKKyAgICB1aW50MzJfdCB2cmZfaWQsIHVpbnQxNl90IHBvcnQpCit7CisJc3RydWN0
IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJc3RydWN0IG1idWYgKm9wX2VycjsKKwljaGFyIG1z
Z1tTQ1RQX0RJQUdfSU5GT19MRU5dOworCXVpbnQzMl90IHZ0YWdfaW47CisJaW50IG51bV9jaHVu
a3MgPSAwOwkvKiBudW1iZXIgb2YgY29udHJvbCBjaHVua3MgcHJvY2Vzc2VkICovCisJdWludDMy
X3QgY2hrX2xlbmd0aCwgY29udGlndW91czsKKwlpbnQgcmV0OworCWludCBhYm9ydF9ub191bmxv
Y2sgPSAwOworCWludCBlY25lX3NlZW4gPSAwOworCWludCBhYm9ydF9mbGFnOworCS8qCisJICog
SG93IGJpZyBzaG91bGQgdGhpcyBiZSwgYW5kIHNob3VsZCBpdCBiZSBhbGxvYydkPyBMZXRzIHRy
eSB0aGUKKwkgKiBkLW10dS1jZWlsaW5nIGZvciBub3cgKDJrKSBhbmQgdGhhdCBzaG91bGQgaG9w
ZWZ1bGx5IHdvcmsgLi4uCisJICogdW50aWwgd2UgZ2V0IGludG8ganVtYm8gZ3JhbXMgYW5kIHN1
Y2guLgorCSAqLworCXVpbnQ4X3QgY2h1bmtfYnVmW1NDVFBfQ0hVTktfQlVGRkVSX1NJWkVdOwor
CWludCBnb3RfYXV0aCA9IDA7CisJdWludDMyX3QgYXV0aF9vZmZzZXQgPSAwLCBhdXRoX2xlbiA9
IDA7CisJaW50IGF1dGhfc2tpcHBlZCA9IDA7CisJaW50IGFzY29uZl9jbnQgPSAwOworI2lmIGRl
ZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXN0cnVjdCBzb2Nr
ZXQgKnNvOworI2VuZGlmCisKKwlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQxLCAic2N0cF9wcm9j
ZXNzX2NvbnRyb2w6IGlwaGxlbj0ldSwgb2Zmc2V0PSV1LCBsZW5ndGg9JXUgc3RjYjolcFxuIiwK
KwkJaXBobGVuLCAqb2Zmc2V0LCBsZW5ndGgsICh2b2lkICopc3RjYik7CisKKwlpZiAoc3RjYikg
eworCQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKwl9CisJLyogdmFsaWRhdGUgY2h1bmsg
aGVhZGVyIGxlbmd0aC4uLiAqLworCWlmIChudG9ocyhjaC0+Y2h1bmtfbGVuZ3RoKSA8IHNpemVv
ZigqY2gpKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsICJJbnZhbGlkIGhlYWRlciBs
ZW5ndGggJWRcbiIsCisJCQludG9ocyhjaC0+Y2h1bmtfbGVuZ3RoKSk7CisJCSpvZmZzZXQgPSBs
ZW5ndGg7CisJCXJldHVybiAoc3RjYik7CisJfQorCS8qCisJICogdmFsaWRhdGUgdGhlIHZlcmlm
aWNhdGlvbiB0YWcKKwkgKi8KKwl2dGFnX2luID0gbnRvaGwoc2gtPnZfdGFnKTsKKworCWlmIChj
aC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0lOSVRJQVRJT04pIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVH
X0lOUFVUMSwgIkl0cyBhbiBJTklUIG9mIGxlbjolZCB2dGFnOiV4XG4iLAorCQkJbnRvaHMoY2gt
PmNodW5rX2xlbmd0aCksIHZ0YWdfaW4pOworCQlpZiAodnRhZ19pbiAhPSAwKSB7CisJCQkvKiBw
cm90b2NvbCBlcnJvci0gc2lsZW50bHkgZGlzY2FyZC4uLiAqLworCQkJU0NUUF9TVEFUX0lOQ1Io
c2N0cHNfYmFkdnRhZyk7CisJCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCQkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOworCQkJfQorCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCX0gZWxzZSBpZiAoY2gt
PmNodW5rX3R5cGUgIT0gU0NUUF9DT09LSUVfRUNITykgeworCQkvKgorCQkgKiBJZiB0aGVyZSBp
cyBubyBzdGNiLCBza2lwIHRoZSBBVVRIIGNodW5rIGFuZCBwcm9jZXNzCisJCSAqIGxhdGVyIGFm
dGVyIGEgc3RjYiBpcyBmb3VuZCAodG8gdmFsaWRhdGUgdGhlIGxvb2t1cCB3YXMKKwkJICogdmFs
aWQuCisJCSAqLworCQlpZiAoKGNoLT5jaHVua190eXBlID09IFNDVFBfQVVUSEVOVElDQVRJT04p
ICYmCisJCSAgICAoc3RjYiA9PSBOVUxMKSAmJgorCQkgICAgKGlucC0+YXV0aF9zdXBwb3J0ZWQg
PT0gMSkpIHsKKwkJCS8qIHNhdmUgdGhpcyBjaHVuayBmb3IgbGF0ZXIgcHJvY2Vzc2luZyAqLwor
CQkJYXV0aF9za2lwcGVkID0gMTsKKwkJCWF1dGhfb2Zmc2V0ID0gKm9mZnNldDsKKwkJCWF1dGhf
bGVuID0gbnRvaHMoY2gtPmNodW5rX2xlbmd0aCk7CisKKwkJCS8qICh0ZW1wb3JhcmlseSkgbW92
ZSBwYXN0IHRoaXMgY2h1bmsgKi8KKwkJCSpvZmZzZXQgKz0gU0NUUF9TSVpFMzIoYXV0aF9sZW4p
OworCQkJaWYgKCpvZmZzZXQgPj0gbGVuZ3RoKSB7CisJCQkJLyogbm8gbW9yZSBkYXRhIGxlZnQg
aW4gdGhlIG1idWYgY2hhaW4gKi8KKwkJCQkqb2Zmc2V0ID0gbGVuZ3RoOworCQkJCXJldHVybiAo
TlVMTCk7CisJCQl9CisJCQljaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKXNjdHBfbV9nZXRw
dHIobSwgKm9mZnNldCwKKwkJCQkJCQkJICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSwg
Y2h1bmtfYnVmKTsKKwkJfQorCQlpZiAoY2ggPT0gTlVMTCkgeworCQkJLyogSGVscCAqLworCQkJ
Km9mZnNldCA9IGxlbmd0aDsKKwkJCXJldHVybiAoc3RjYik7CisJCX0KKwkJaWYgKGNoLT5jaHVu
a190eXBlID09IFNDVFBfQ09PS0lFX0VDSE8pIHsKKwkJCWdvdG8gcHJvY2Vzc19jb250cm9sX2No
dW5rczsKKwkJfQorCQkvKgorCQkgKiBmaXJzdCBjaGVjayBpZiBpdCdzIGFuIEFTQ09ORiB3aXRo
IGFuIHVua25vd24gc3JjIGFkZHIgd2UKKwkJICogbmVlZCB0byBsb29rIGluc2lkZSB0byBmaW5k
IHRoZSBhc3NvY2lhdGlvbgorCQkgKi8KKwkJaWYgKGNoLT5jaHVua190eXBlID09IFNDVFBfQVND
T05GICYmIHN0Y2IgPT0gTlVMTCkgeworCQkJc3RydWN0IHNjdHBfY2h1bmtoZHIgKmFzY29uZl9j
aCA9IGNoOworCQkJdWludDMyX3QgYXNjb25mX29mZnNldCA9IDAsIGFzY29uZl9sZW4gPSAwOwor
CisJCQkvKiBpbnAncyByZWZjb3VudCBtYXkgYmUgcmVkdWNlZCAqLworCQkJU0NUUF9JTlBfSU5D
Ul9SRUYoaW5wKTsKKworCQkJYXNjb25mX29mZnNldCA9ICpvZmZzZXQ7CisJCQlkbyB7CisJCQkJ
YXNjb25mX2xlbiA9IG50b2hzKGFzY29uZl9jaC0+Y2h1bmtfbGVuZ3RoKTsKKwkJCQlpZiAoYXNj
b25mX2xlbiA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIpKQorCQkJCQlicmVh
azsKKwkJCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYXNjb25mKG0sCisJCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb2Zmc2V0LAorCQkJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0LAorCQkJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2gsICZpbnAsIG5ldHAsIHZyZl9pZCk7CisJCQkJaWYgKHN0
Y2IgIT0gTlVMTCkKKwkJCQkJYnJlYWs7CisJCQkJYXNjb25mX29mZnNldCArPSBTQ1RQX1NJWkUz
Mihhc2NvbmZfbGVuKTsKKwkJCQlhc2NvbmZfY2ggPSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKilz
Y3RwX21fZ2V0cHRyKG0sIGFzY29uZl9vZmZzZXQsCisJCQkJCQkJCQkJICBzaXplb2Yoc3RydWN0
IHNjdHBfY2h1bmtoZHIpLCBjaHVua19idWYpOworCQkJfSB3aGlsZSAoYXNjb25mX2NoICE9IE5V
TEwgJiYgYXNjb25mX2NoLT5jaHVua190eXBlID09IFNDVFBfQVNDT05GKTsKKwkJCWlmIChzdGNi
ID09IE5VTEwpIHsKKwkJCQkvKgorCQkJCSAqIHJlZHVjZSBpbnAncyByZWZjb3VudCBpZiBub3Qg
cmVkdWNlZCBpbgorCQkJCSAqIHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FzY29uZigpLgorCQkJ
CSAqLworCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQl9CisKKwkJCS8qIG5vdyBnbyBi
YWNrIGFuZCB2ZXJpZnkgYW55IGF1dGggY2h1bmsgdG8gYmUgc3VyZSAqLworCQkJaWYgKGF1dGhf
c2tpcHBlZCAmJiAoc3RjYiAhPSBOVUxMKSkgeworCQkJCXN0cnVjdCBzY3RwX2F1dGhfY2h1bmsg
KmF1dGg7CisKKwkJCQlpZiAoYXV0aF9sZW4gPD0gU0NUUF9DSFVOS19CVUZGRVJfU0laRSkgewor
CQkJCQlhdXRoID0gKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKilzY3RwX21fZ2V0cHRyKG0sIGF1
dGhfb2Zmc2V0LCBhdXRoX2xlbiwgY2h1bmtfYnVmKTsKKwkJCQkJZ290X2F1dGggPSAxOworCQkJ
CQlhdXRoX3NraXBwZWQgPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCWF1dGggPSBOVUxMOworCQkJ
CX0KKwkJCQlpZiAoKGF1dGggPT0gTlVMTCkgfHwgc2N0cF9oYW5kbGVfYXV0aChzdGNiLCBhdXRo
LCBtLAorCQkJCQkJCQkgICAgICAgYXV0aF9vZmZzZXQpKSB7CisJCQkJCS8qIGF1dGggSE1BQyBm
YWlsZWQgc28gZHVtcCBpdCAqLworCQkJCQkqb2Zmc2V0ID0gbGVuZ3RoOworCQkJCQlyZXR1cm4g
KHN0Y2IpOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIHJlbWFpbmluZyBjaHVua3MgYXJlIEhNQUMg
Y2hlY2tlZCAqLworCQkJCQlzdGNiLT5hc29jLmF1dGhlbnRpY2F0ZWQgPSAxOworCQkJCX0KKwkJ
CX0KKwkJfQorCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCQlTQ1RQX1NOUFJJTlRGKG1zZywgc2l6
ZW9mKG1zZyksICJPT1RCLCAlczolZCBhdCAlcyIsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5j
X18pOworCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfZGlhZ19pbmZvX2NvZGUpLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cp
OworCQkJLyogbm8gYXNzb2NpYXRpb24sIHNvIGl0J3Mgb3V0IG9mIHRoZSBibHVlLi4uICovCisJ
CQlzY3RwX2hhbmRsZV9vb3RiKG0sIGlwaGxlbiwgKm9mZnNldCwgc3JjLCBkc3QsIHNoLCBpbnAs
IG9wX2VyciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorCQkJICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGlucC0+ZmlibnVt
LAorI2VuZGlmCisJCQkJCSB2cmZfaWQsIHBvcnQpOworCQkJKm9mZnNldCA9IGxlbmd0aDsKKwkJ
CXJldHVybiAoTlVMTCk7CisJCX0KKwkJYXNvYyA9ICZzdGNiLT5hc29jOworCQkvKiBBQk9SVCBh
bmQgU0hVVERPV04gY2FuIHVzZSBlaXRoZXIgdl90YWcuLi4gKi8KKwkJaWYgKChjaC0+Y2h1bmtf
dHlwZSA9PSBTQ1RQX0FCT1JUX0FTU09DSUFUSU9OKSB8fAorCQkgICAgKGNoLT5jaHVua190eXBl
ID09IFNDVFBfU0hVVERPV05fQ09NUExFVEUpIHx8CisJCSAgICAoY2gtPmNodW5rX3R5cGUgPT0g
U0NUUF9QQUNLRVRfRFJPUFBFRCkpIHsKKwkJCS8qIFRha2UgdGhlIFQtYml0IGFsd2F5cyBpbnRv
IGFjY291bnQuICovCisJCQlpZiAoKCgoY2gtPmNodW5rX2ZsYWdzICYgU0NUUF9IQURfTk9fVENC
KSA9PSAwKSAmJgorCQkJICAgICAodnRhZ19pbiA9PSBhc29jLT5teV92dGFnKSkgfHwKKwkJCSAg
ICAoKChjaC0+Y2h1bmtfZmxhZ3MgJiBTQ1RQX0hBRF9OT19UQ0IpID09IFNDVFBfSEFEX05PX1RD
QikgJiYKKwkJCSAgICAgKGFzb2MtPnBlZXJfdnRhZyAhPSBodG9ubCgwKSkgJiYKKwkJCSAgICAg
KHZ0YWdfaW4gPT0gYXNvYy0+cGVlcl92dGFnKSkpIHsKKwkJCQkvKiB0aGlzIGlzIHZhbGlkICov
CisJCQl9IGVsc2UgeworCQkJCS8qIGRyb3AgdGhpcyBwYWNrZXQuLi4gKi8KKwkJCQlTQ1RQX1NU
QVRfSU5DUihzY3Rwc19iYWR2dGFnKTsKKwkJCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCQkJCVND
VFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQl9CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJ
fSBlbHNlIHsKKwkJCS8qIGZvciBhbGwgb3RoZXIgY2h1bmtzLCB2dGFnIG11c3QgbWF0Y2ggKi8K
KwkJCWlmICh2dGFnX2luICE9IGFzb2MtPm15X3Z0YWcpIHsKKwkJCQkvKiBpbnZhbGlkIHZ0YWcu
Li4gKi8KKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLAorCQkJCQkiaW52YWxpZCB2dGFn
OiAleGgsIGV4cGVjdCAleGhcbiIsCisJCQkJCXZ0YWdfaW4sIGFzb2MtPm15X3Z0YWcpOworCQkJ
CVNDVFBfU1RBVF9JTkNSKHNjdHBzX2JhZHZ0YWcpOworCQkJCWlmIChzdGNiICE9IE5VTEwpIHsK
KwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCX0KKwkJCQkqb2Zmc2V0ID0gbGVuZ3Ro
OworCQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisJCX0KKwl9CQkJLyogZW5kIGlmICFTQ1RQX0NP
T0tJRV9FQ0hPICovCisJLyoKKwkgKiBwcm9jZXNzIGFsbCBjb250cm9sIGNodW5rcy4uLgorCSAq
LworCWlmICgoKGNoLT5jaHVua190eXBlID09IFNDVFBfU0VMRUNUSVZFX0FDSykgfHwKKwkgICAg
IChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX05SX1NFTEVDVElWRV9BQ0spIHx8CisJICAgICAoY2gt
PmNodW5rX3R5cGUgPT0gU0NUUF9IRUFSVEJFQVRfUkVRVUVTVCkpICYmCisJICAgIChTQ1RQX0dF
VF9TVEFURShzdGNiKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQpKSB7CisJCS8qIGltcGxp
ZWQgY29va2llLWFjay4uIHdlIG11c3QgaGF2ZSBsb3N0IHRoZSBhY2sgKi8KKwkJc2N0cF9oYW5k
bGVfY29va2llX2Fjaygoc3RydWN0IHNjdHBfY29va2llX2Fja19jaHVuayAqKWNoLCBzdGNiLAor
CQkJCSAgICAgICAqbmV0cCk7CisJfQorCisgcHJvY2Vzc19jb250cm9sX2NodW5rczoKKwl3aGls
ZSAoSVNfU0NUUF9DT05UUk9MKGNoKSkgeworCQkvKiB2YWxpZGF0ZSBjaHVuayBsZW5ndGggKi8K
KwkJY2hrX2xlbmd0aCA9IG50b2hzKGNoLT5jaHVua19sZW5ndGgpOworCQlTQ1RQREJHKFNDVFBf
REVCVUdfSU5QVVQyLCAic2N0cF9wcm9jZXNzX2NvbnRyb2w6IHByb2Nlc3NpbmcgYSBjaHVuayB0
eXBlPSV1LCBsZW49JXVcbiIsCisJCQljaC0+Y2h1bmtfdHlwZSwgY2hrX2xlbmd0aCk7CisJCVND
VFBfTFRSQUNFX0NISyhpbnAsIHN0Y2IsIGNoLT5jaHVua190eXBlLCBjaGtfbGVuZ3RoKTsKKwkJ
aWYgKGNoa19sZW5ndGggPCBzaXplb2YoKmNoKSB8fAorCQkgICAgKCpvZmZzZXQgKyAoaW50KWNo
a19sZW5ndGgpID4gbGVuZ3RoKSB7CisJCQkqb2Zmc2V0ID0gbGVuZ3RoOworCQkJcmV0dXJuIChz
dGNiKTsKKwkJfQorCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfaW5jb250cm9sY2h1
bmtzKTsKKwkJLyoKKwkJICogSU5JVCBhbmQgSU5JVC1BQ0sgb25seSBnZXRzIHRoZSBpbml0IGFj
ayAiaGVhZGVyIiBwb3J0aW9uCisJCSAqIG9ubHkgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRvIHBy
b2Nlc3MgdGhlIHBlZXIncyBDT09LSUUuCisJCSAqIEFsbCBvdGhlcnMgZ2V0IGEgY29tcGxldGUg
Y2h1bmsuCisJCSAqLworCQlzd2l0Y2ggKGNoLT5jaHVua190eXBlKSB7CisJCWNhc2UgU0NUUF9J
TklUSUFUSU9OOgorCQkJY29udGlndW91cyA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X2NodW5r
KTsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfSU5JVElBVElPTl9BQ0s6CisJCQljb250aWd1b3Vz
ID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfYWNrX2NodW5rKTsKKwkJCWJyZWFrOworCQlkZWZh
dWx0OgorCQkJY29udGlndW91cyA9IG1pbihjaGtfbGVuZ3RoLCBzaXplb2YoY2h1bmtfYnVmKSk7
CisJCQlicmVhazsKKwkJfQorCQljaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKXNjdHBfbV9n
ZXRwdHIobSwgKm9mZnNldCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpZ3VvdXMsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaHVua19idWYpOworCQlpZiAoY2ggPT0gTlVMTCkgeworCQkJKm9mZnNldCA9IGxl
bmd0aDsKKwkJCXJldHVybiAoc3RjYik7CisJCX0KKworCQludW1fY2h1bmtzKys7CisJCS8qIFNh
dmUgb2ZmIHRoZSBsYXN0IHBsYWNlIHdlIGdvdCBhIGNvbnRyb2wgZnJvbSAqLworCQlpZiAoc3Rj
YiAhPSBOVUxMKSB7CisJCQlpZiAoKChuZXRwICE9IE5VTEwpICYmICgqbmV0cCAhPSBOVUxMKSkg
fHwgKGNoLT5jaHVua190eXBlID09IFNDVFBfQVNDT05GKSkgeworCQkJCS8qCisJCQkJICogYWxs
b3cgbGFzdF9jb250cm9sIHRvIGJlIE5VTEwgaWYKKwkJCQkgKiBBU0NPTkYuLi4gQVNDT05GIHBy
b2Nlc3Npbmcgd2lsbCBmaW5kIHRoZQorCQkJCSAqIHJpZ2h0IG5ldCBsYXRlcgorCQkJCSAqLwor
CQkJCWlmICgobmV0cCAhPSBOVUxMKSAmJiAoKm5ldHAgIT0gTlVMTCkpCisJCQkJCXN0Y2ItPmFz
b2MubGFzdF9jb250cm9sX2NodW5rX2Zyb20gPSAqbmV0cDsKKwkJCX0KKwkJfQorI2lmZGVmIFND
VFBfQVVESVRJTkdfRU5BQkxFRAorCQlzY3RwX2F1ZGl0X2xvZygweEIwLCBjaC0+Y2h1bmtfdHlw
ZSk7CisjZW5kaWYKKworCQkvKiBjaGVjayB0byBzZWUgaWYgdGhpcyBjaHVuayByZXF1aXJlZCBh
dXRoLCBidXQgaXNuJ3QgKi8KKwkJaWYgKChzdGNiICE9IE5VTEwpICYmCisJCSAgICBzY3RwX2F1
dGhfaXNfcmVxdWlyZWRfY2h1bmsoY2gtPmNodW5rX3R5cGUsIHN0Y2ItPmFzb2MubG9jYWxfYXV0
aF9jaHVua3MpICYmCisJCSAgICAhc3RjYi0+YXNvYy5hdXRoZW50aWNhdGVkKSB7CisJCQkvKiAi
c2lsZW50bHkiIGlnbm9yZSAqLworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmF1dGhtaXNz
aW5nKTsKKwkJCWdvdG8gbmV4dF9jaHVuazsKKwkJfQorCQlzd2l0Y2ggKGNoLT5jaHVua190eXBl
KSB7CisJCWNhc2UgU0NUUF9JTklUSUFUSU9OOgorCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVU
MywgIlNDVFBfSU5JVFxuIik7CisJCQkvKiBUaGUgSU5JVCBjaHVuayBtdXN0IGJlIHRoZSBvbmx5
IGNodW5rLiAqLworCQkJaWYgKChudW1fY2h1bmtzID4gMSkgfHwKKwkJCSAgICAobGVuZ3RoIC0g
Km9mZnNldCA+IChpbnQpU0NUUF9TSVpFMzIoY2hrX2xlbmd0aCkpKSB7CisJCQkJLyoKKwkJCQkg
KiBSRkMgNDk2MGJpcyByZXF1aXJlcyBzdG9wcGluZyB0aGUKKwkJCQkgKiBwcm9jZXNzaW5nIG9m
IHRoZSBwYWNrZXQuCisJCQkJICovCisJCQkJKm9mZnNldCA9IGxlbmd0aDsKKwkJCQlyZXR1cm4g
KHN0Y2IpOworCQkJfQorCQkJLyogSG9ub3Igb3VyIHJlc291cmNlIGxpbWl0LiAqLworCQkJaWYg
KGNoa19sZW5ndGggPiBTQ1RQX0xBUkdFU1RfSU5JVF9BQ0NFUFRFRCkgeworCQkJCW9wX2VyciA9
IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9PVVRfT0ZfUkVTQywgIiIpOworCQkJCXNj
dHBfYWJvcnRfYXNzb2NpYXRpb24oaW5wLCBzdGNiLCBtLCBpcGhsZW4sCisJCQkJCQkgICAgICAg
c3JjLCBkc3QsIHNoLCBvcF9lcnIsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwg
bWZsb3dpZCwKKyNlbmRpZgorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0
KTsKKwkJCQkqb2Zmc2V0ID0gbGVuZ3RoOworCQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisJCQlz
Y3RwX2hhbmRsZV9pbml0KG0sIGlwaGxlbiwgKm9mZnNldCwgc3JjLCBkc3QsIHNoLAorCQkJICAg
ICAgICAgICAgICAgICAoc3RydWN0IHNjdHBfaW5pdF9jaHVuayAqKWNoLCBpbnAsCisJCQkgICAg
ICAgICAgICAgICAgIHN0Y2IsICpuZXRwLCAmYWJvcnRfbm9fdW5sb2NrLAorI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkgICAgICAgICAgICAg
ICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKKyNlbmRpZgorCQkJICAgICAgICAgICAgICAgICB2cmZf
aWQsIHBvcnQpOworCQkJKm9mZnNldCA9IGxlbmd0aDsKKwkJCWlmICgoIWFib3J0X25vX3VubG9j
aykgJiYgKHN0Y2IgIT0gTlVMTCkpIHsKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQl9
CisJCQlyZXR1cm4gKE5VTEwpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9QQURfQ0hVTks6CisJ
CQlicmVhazsKKwkJY2FzZSBTQ1RQX0lOSVRJQVRJT05fQUNLOgorCQkJU0NUUERCRyhTQ1RQX0RF
QlVHX0lOUFVUMywgIlNDVFBfSU5JVF9BQ0tcbiIpOworCQkJaWYgKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB7CisJCQkJLyogV2UgYXJlIG5vdCBpbnRlcmVz
dGVkIGFueW1vcmUgKi8KKwkJCQlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYgKHN0Y2ItPmFzb2MudG90
YWxfb3V0cHV0X3F1ZXVlX3NpemUpKSB7CisJCQkJCTsKKwkJCQl9IGVsc2UgeworCQkJCQkqb2Zm
c2V0ID0gbGVuZ3RoOworCQkJCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisjaWYgZGVmaW5lZChfX0FQ
UExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJCQlzbyA9IFNDVFBfSU5QX1NP
KGlucCk7CisJCQkJCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJ
CQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7
CisJCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJCQkJYXRvbWljX3N1YnRyYWN0X2ludCgm
c3RjYi0+YXNvYy5yZWZjbnQsIDEpOworI2VuZGlmCisJCQkJCQkodm9pZClzY3RwX2ZyZWVfYXNz
b2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAorCQkJCQkJICAgICAgICAgICAgICAgICAg
ICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfMjkpOworI2lmIGRlZmluZWQoX19B
UFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCQkJU0NUUF9TT0NLRVRfVU5M
T0NLKHNvLCAxKTsKKyNlbmRpZgorCQkJCQl9CisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJfQor
CQkJfQorCQkJLyogVGhlIElOSVQtQUNLIGNodW5rIG11c3QgYmUgdGhlIG9ubHkgY2h1bmsuICov
CisJCQlpZiAoKG51bV9jaHVua3MgPiAxKSB8fAorCQkJICAgIChsZW5ndGggLSAqb2Zmc2V0ID4g
KGludClTQ1RQX1NJWkUzMihjaGtfbGVuZ3RoKSkpIHsKKwkJCQkqb2Zmc2V0ID0gbGVuZ3RoOwor
CQkJCXJldHVybiAoc3RjYik7CisJCQl9CisJCQlpZiAoKG5ldHAgIT0gTlVMTCkgJiYgKCpuZXRw
ICE9IE5VTEwpKSB7CisJCQkJcmV0ID0gc2N0cF9oYW5kbGVfaW5pdF9hY2sobSwgaXBobGVuLCAq
b2Zmc2V0LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYywgZHN0LCBzaCwKKwkJ
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNjdHBfaW5pdF9hY2tfY2h1bmsg
KiljaCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGNiLCAqbmV0cCwKKwkJCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmYWJvcnRfbm9fdW5sb2NrLAorI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAorI2VuZGlmCisJCQkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdnJmX2lkKTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0ID0gLTE7CisJ
CQl9CisJCQkqb2Zmc2V0ID0gbGVuZ3RoOworCQkJaWYgKGFib3J0X25vX3VubG9jaykgeworCQkJ
CXJldHVybiAoTlVMTCk7CisJCQl9CisJCQkvKgorCQkJICogU3BlY2lhbCBjYXNlLCBJIG11c3Qg
Y2FsbCB0aGUgb3V0cHV0IHJvdXRpbmUgdG8KKwkJCSAqIGdldCB0aGUgY29va2llIGVjaG9lZAor
CQkJICovCisJCQlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYgKHJldCA9PSAwKSkgeworCQkJCXNjdHBf
Y2h1bmtfb3V0cHV0KHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fQ09OVFJP
TF9QUk9DLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJfQorCQkJcmV0dXJuIChzdGNiKTsKKwkJ
CWJyZWFrOworCQljYXNlIFNDVFBfU0VMRUNUSVZFX0FDSzoKKwkJY2FzZSBTQ1RQX05SX1NFTEVD
VElWRV9BQ0s6CisJCXsKKwkJCWludCBhYm9ydF9ub3cgPSAwOworCQkJdWludDMyX3QgYV9yd25k
LCBjdW1fYWNrOworCQkJdWludDE2X3QgbnVtX3NlZywgbnVtX25yX3NlZywgbnVtX2R1cDsKKwkJ
CXVpbnQ4X3QgZmxhZ3M7CisJCQlpbnQgb2Zmc2V0X3NlZywgb2Zmc2V0X2R1cDsKKworCQkJU0NU
UERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIiVzXG4iLAorCQkJCWNoLT5jaHVua190eXBlID09IFND
VFBfU0VMRUNUSVZFX0FDSyA/ICJTQ1RQX1NBQ0siIDogIlNDVFBfTlJfU0FDSyIpOworCQkJU0NU
UF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdnNhY2tzKTsKKwkJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJ
CQlTQ1RQREJHKFNDVFBfREVCVUdfSU5EQVRBMSwgIk5vIHN0Y2Igd2hlbiBwcm9jZXNzaW5nICVz
IGNodW5rXG4iLAorCQkJCSAgICAgICAgKGNoLT5jaHVua190eXBlID09IFNDVFBfU0VMRUNUSVZF
X0FDSykgPyAiU0NUUF9TQUNLIiA6ICJTQ1RQX05SX1NBQ0siKTsKKwkJCQlicmVhazsKKwkJCX0K
KwkJCWlmIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX1NFTEVDVElWRV9BQ0spIHsKKwkJCQlpZiAo
Y2hrX2xlbmd0aCA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9zYWNrX2NodW5rKSkgeworCQkJCQlTQ1RQ
REJHKFNDVFBfREVCVUdfSU5EQVRBMSwgIkJhZCBzaXplIG9uIFNBQ0sgY2h1bmssIHRvbyBzbWFs
bFxuIik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKHN0Y2ItPmFz
b2MubnJzYWNrX3N1cHBvcnRlZCA9PSAwKSB7CisJCQkJCWdvdG8gdW5rbm93bl9jaHVuazsKKwkJ
CQl9CisJCQkJaWYgKGNoa19sZW5ndGggPCBzaXplb2Yoc3RydWN0IHNjdHBfbnJfc2Fja19jaHVu
aykpIHsKKwkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOREFUQTEsICJCYWQgc2l6ZSBvbiBOUl9T
QUNLIGNodW5rLCB0b28gc21hbGxcbiIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlp
ZiAoU0NUUF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkg
eworCQkJCS8qLQorCQkJCSAqIElmIHdlIGhhdmUgc2VudCBhIHNodXRkb3duLWFjaywgd2Ugd2ls
bCBwYXkgbm8KKwkJCQkgKiBhdHRlbnRpb24gdG8gYSBzYWNrIHNlbnQgaW4gdG8gdXMgc2luY2UK
KwkJCQkgKiB3ZSBkb24ndCBjYXJlIGFueW1vcmUuCisJCQkJICovCisJCQkJYnJlYWs7CisJCQl9
CisJCQlmbGFncyA9IGNoLT5jaHVua19mbGFnczsKKwkJCWlmIChjaC0+Y2h1bmtfdHlwZSA9PSBT
Q1RQX1NFTEVDVElWRV9BQ0spIHsKKwkJCQlzdHJ1Y3Qgc2N0cF9zYWNrX2NodW5rICpzYWNrOwor
CisJCQkJc2FjayA9IChzdHJ1Y3Qgc2N0cF9zYWNrX2NodW5rICopY2g7CisJCQkJY3VtX2FjayA9
IG50b2hsKHNhY2stPnNhY2suY3VtX3Rzbl9hY2spOworCQkJCW51bV9zZWcgPSBudG9ocyhzYWNr
LT5zYWNrLm51bV9nYXBfYWNrX2Jsa3MpOworCQkJCW51bV9ucl9zZWcgPSAwOworCQkJCW51bV9k
dXAgPSBudG9ocyhzYWNrLT5zYWNrLm51bV9kdXBfdHNucyk7CisJCQkJYV9yd25kID0gbnRvaGwo
c2Fjay0+c2Fjay5hX3J3bmQpOworCQkJCWlmIChzaXplb2Yoc3RydWN0IHNjdHBfc2Fja19jaHVu
aykgKworCQkJCSAgICBudW1fc2VnICogc2l6ZW9mKHN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2sp
ICsKKwkJCQkgICAgbnVtX2R1cCAqIHNpemVvZih1aW50MzJfdCkgIT0gY2hrX2xlbmd0aCkgewor
CQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5EQVRBMSwgIkJhZCBzaXplIG9mIFNBQ0sgY2h1bmtc
biIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJb2Zmc2V0X3NlZyA9ICpvZmZzZXQgKyBzaXpl
b2Yoc3RydWN0IHNjdHBfc2Fja19jaHVuayk7CisJCQkJb2Zmc2V0X2R1cCA9IG9mZnNldF9zZWcg
KyBudW1fc2VnICogc2l6ZW9mKHN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2spOworCQkJfSBlbHNl
IHsKKwkJCQlzdHJ1Y3Qgc2N0cF9ucl9zYWNrX2NodW5rICpucl9zYWNrOworCisJCQkJbnJfc2Fj
ayA9IChzdHJ1Y3Qgc2N0cF9ucl9zYWNrX2NodW5rICopY2g7CisJCQkJY3VtX2FjayA9IG50b2hs
KG5yX3NhY2stPm5yX3NhY2suY3VtX3Rzbl9hY2spOworCQkJCW51bV9zZWcgPSBudG9ocyhucl9z
YWNrLT5ucl9zYWNrLm51bV9nYXBfYWNrX2Jsa3MpOworCQkJCW51bV9ucl9zZWcgPSBudG9ocyhu
cl9zYWNrLT5ucl9zYWNrLm51bV9ucl9nYXBfYWNrX2Jsa3MpOworCQkJCW51bV9kdXAgPSBudG9o
cyhucl9zYWNrLT5ucl9zYWNrLm51bV9kdXBfdHNucyk7CisJCQkJYV9yd25kID0gbnRvaGwobnJf
c2Fjay0+bnJfc2Fjay5hX3J3bmQpOworCQkJCWlmIChzaXplb2Yoc3RydWN0IHNjdHBfbnJfc2Fj
a19jaHVuaykgKworCQkJCSAgICAobnVtX3NlZyArIG51bV9ucl9zZWcpICogc2l6ZW9mKHN0cnVj
dCBzY3RwX2dhcF9hY2tfYmxvY2spICsKKwkJCQkgICAgbnVtX2R1cCAqIHNpemVvZih1aW50MzJf
dCkgIT0gY2hrX2xlbmd0aCkgeworCQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5EQVRBMSwgIkJh
ZCBzaXplIG9mIE5SX1NBQ0sgY2h1bmtcbiIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJb2Zm
c2V0X3NlZyA9ICpvZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBfbnJfc2Fja19jaHVuayk7CisJ
CQkJb2Zmc2V0X2R1cCA9IG9mZnNldF9zZWcgKyAobnVtX3NlZyArIG51bV9ucl9zZWcpICogc2l6
ZW9mKHN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2spOworCQkJfQorCQkJU0NUUERCRyhTQ1RQX0RF
QlVHX0lOUFVUMywgIiVzIHByb2Nlc3MgY3VtX2FjazoleCBudW1fc2VnOiVkIGFfcnduZDolZFxu
IiwKKwkJCQkoY2gtPmNodW5rX3R5cGUgPT0gU0NUUF9TRUxFQ1RJVkVfQUNLKSA/ICJTQ1RQX1NB
Q0siIDogIlNDVFBfTlJfU0FDSyIsCisJCQkgICAgICAgIGN1bV9hY2ssIG51bV9zZWcsIGFfcndu
ZCk7CisJCQlzdGNiLT5hc29jLnNlZW5fYV9zYWNrX3RoaXNfcGt0ID0gMTsKKwkJCWlmICgoc3Rj
Yi0+YXNvYy5wcl9zY3RwX2NudCA9PSAwKSAmJgorCQkJICAgIChudW1fc2VnID09IDApICYmIChu
dW1fbnJfc2VnID09IDApICYmCisJCQkgICAgU0NUUF9UU05fR0UoY3VtX2Fjaywgc3RjYi0+YXNv
Yy5sYXN0X2Fja2VkX3NlcSkgJiYKKwkJCSAgICAoc3RjYi0+YXNvYy5zYXdfc2Fja193aXRoX2Zy
YWdzID09IDApICYmCisJCQkgICAgKHN0Y2ItPmFzb2Muc2F3X3NhY2tfd2l0aF9ucl9mcmFncyA9
PSAwKSAmJgorCQkJICAgICghVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSkpKSB7
CisJCQkJLyoKKwkJCQkgKiBXZSBoYXZlIGEgU0lNUExFIHNhY2sgaGF2aW5nIG5vCisJCQkJICog
cHJpb3Igc2VnbWVudHMgYW5kIGRhdGEgb24gc2VudAorCQkJCSAqIHF1ZXVlIHRvIGJlIGFja2Vk
LiBVc2UgdGhlCisJCQkJICogZmFzdGVyIHBhdGggc2FjayBwcm9jZXNzaW5nLiBXZQorCQkJCSAq
IGFsc28gYWxsb3cgd2luZG93IHVwZGF0ZSBzYWNrcworCQkJCSAqIHdpdGggbm8gbWlzc2luZyBz
ZWdtZW50cyB0byBnbworCQkJCSAqIHRoaXMgd2F5IHRvby4KKwkJCQkgKi8KKwkJCQlzY3RwX2V4
cHJlc3NfaGFuZGxlX3NhY2soc3RjYiwgY3VtX2FjaywgYV9yd25kLAorCQkJCSAgICAgICAgICAg
ICAgICAgICAgICAgICAmYWJvcnRfbm93LCBlY25lX3NlZW4pOworCQkJfSBlbHNlIHsKKwkJCQlp
ZiAoKG5ldHAgIT0gTlVMTCkgJiYgKCpuZXRwICE9IE5VTEwpKSB7CisJCQkJCXNjdHBfaGFuZGxl
X3NhY2sobSwgb2Zmc2V0X3NlZywgb2Zmc2V0X2R1cCwgc3RjYiwKKwkJCQkJICAgICAgICAgICAg
ICAgICBudW1fc2VnLCBudW1fbnJfc2VnLCBudW1fZHVwLCAmYWJvcnRfbm93LCBmbGFncywKKwkJ
CQkJICAgICAgICAgICAgICAgICBjdW1fYWNrLCBhX3J3bmQsIGVjbmVfc2Vlbik7CisJCQkJfQor
CQkJfQorCQkJaWYgKGFib3J0X25vdykgeworCQkJCS8qIEFCT1JUIHNpZ25hbCBmcm9tIHNhY2sg
cHJvY2Vzc2luZyAqLworCQkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJcmV0dXJuIChOVUxMKTsK
KwkJCX0KKwkJCWlmIChUQUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5zZW5kX3F1ZXVlKSAmJgorCQkJ
ICAgIFRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLnNlbnRfcXVldWUpICYmCisJCQkgICAgKHN0Y2It
PmFzb2Muc3RyZWFtX3F1ZXVlX2NudCA9PSAwKSkgeworCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQ
X05PVElGWV9TRU5ERVJfRFJZLCBzdGNiLCAgMCwgTlVMTCwgU0NUUF9TT19OT1RfTE9DS0VEKTsK
KwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWNhc2UgU0NUUF9IRUFSVEJFQVRfUkVRVUVTVDoKKwkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQX0hFQVJUQkVBVFxuIik7CisJCQlpZiAo
KHN0Y2IgIT0gTlVMTCkgJiYgKG5ldHAgIT0gTlVMTCkgJiYgKCpuZXRwICE9IE5VTEwpKSB7CisJ
CQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmhlYXJ0YmVhdCk7CisJCQkJc2N0cF9zZW5kX2hl
YXJ0YmVhdF9hY2soc3RjYiwgbSwgKm9mZnNldCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAg
ICBjaGtfbGVuZ3RoLCAqbmV0cCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0hFQVJU
QkVBVF9BQ0s6CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiU0NUUF9IRUFSVEJFQVRf
QUNLXG4iKTsKKwkJCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAoY2hrX2xlbmd0aCAhPSBzaXplb2Yo
c3RydWN0IHNjdHBfaGVhcnRiZWF0X2NodW5rKSkpIHsKKwkJCQkvKiBJdHMgbm90IG91cnMgKi8K
KwkJCQlicmVhazsKKwkJCX0KKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZoZWFydGJlYXRh
Y2spOworCQkJaWYgKChuZXRwICE9IE5VTEwpICYmICgqbmV0cCAhPSBOVUxMKSkgeworCQkJCXNj
dHBfaGFuZGxlX2hlYXJ0YmVhdF9hY2soKHN0cnVjdCBzY3RwX2hlYXJ0YmVhdF9jaHVuayAqKWNo
LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RjYiwgKm5ldHApOworCQkJfQorCQkJ
YnJlYWs7CisJCWNhc2UgU0NUUF9BQk9SVF9BU1NPQ0lBVElPTjoKKwkJCVNDVFBEQkcoU0NUUF9E
RUJVR19JTlBVVDMsICJTQ1RQX0FCT1JULCBzdGNiICVwXG4iLAorCQkJCSh2b2lkICopc3RjYik7
CisJCQkqb2Zmc2V0ID0gbGVuZ3RoOworCQkJaWYgKChzdGNiICE9IE5VTEwpICYmIChuZXRwICE9
IE5VTEwpICYmICgqbmV0cCAhPSBOVUxMKSkgeworCQkJCWlmIChzY3RwX2hhbmRsZV9hYm9ydCgo
c3RydWN0IHNjdHBfYWJvcnRfY2h1bmsgKiljaCwgc3RjYiwgKm5ldHApKSB7CisJCQkJCXJldHVy
biAoTlVMTCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJcmV0dXJuIChzdGNiKTsKKwkJCQl9CisJCQl9
IGVsc2UgeworCQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQ
X1NIVVRET1dOOgorCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIlNDVFBfU0hVVERPV04s
IHN0Y2IgJXBcbiIsCisJCQkJKHZvaWQgKilzdGNiKTsKKwkJCWlmICgoc3RjYiA9PSBOVUxMKSB8
fCAoY2hrX2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IHNjdHBfc2h1dGRvd25fY2h1bmspKSkgewor
CQkJCWJyZWFrOworCQkJfQorCQkJaWYgKChuZXRwICE9IE5VTEwpICYmICgqbmV0cCAhPSBOVUxM
KSkgeworCQkJCWFib3J0X2ZsYWcgPSAwOworCQkJCXNjdHBfaGFuZGxlX3NodXRkb3duKChzdHJ1
Y3Qgc2N0cF9zaHV0ZG93bl9jaHVuayAqKWNoLAorCQkJCSAgICAgICAgICAgICAgICAgICAgIHN0
Y2IsICpuZXRwLCAmYWJvcnRfZmxhZyk7CisJCQkJaWYgKGFib3J0X2ZsYWcpIHsKKwkJCQkJKm9m
ZnNldCA9IGxlbmd0aDsKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9CisJCQl9CisJCQlicmVh
azsKKwkJY2FzZSBTQ1RQX1NIVVRET1dOX0FDSzoKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBV
VDMsICJTQ1RQX1NIVVRET1dOX0FDSywgc3RjYiAlcFxuIiwgKHZvaWQgKilzdGNiKTsKKwkJCWlm
ICgoY2hrX2xlbmd0aCA9PSBzaXplb2Yoc3RydWN0IHNjdHBfc2h1dGRvd25fYWNrX2NodW5rKSkg
JiYKKwkJCSAgICAoc3RjYiAhPSBOVUxMKSAmJiAobmV0cCAhPSBOVUxMKSAmJiAoKm5ldHAgIT0g
TlVMTCkpIHsKKwkJCQlzY3RwX2hhbmRsZV9zaHV0ZG93bl9hY2soKHN0cnVjdCBzY3RwX3NodXRk
b3duX2Fja19jaHVuayAqKWNoLCBzdGNiLCAqbmV0cCk7CisJCQkJKm9mZnNldCA9IGxlbmd0aDsK
KwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9PUEVSQVRJ
T05fRVJST1I6CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiU0NUUF9PUF9FUlJcbiIp
OworCQkJaWYgKChzdGNiICE9IE5VTEwpICYmIChuZXRwICE9IE5VTEwpICYmICgqbmV0cCAhPSBO
VUxMKSAmJgorCQkJICAgIHNjdHBfaGFuZGxlX2Vycm9yKGNoLCBzdGNiLCAqbmV0cCwgY29udGln
dW91cykgPCAwKSB7CisJCQkJKm9mZnNldCA9IGxlbmd0aDsKKwkJCQlyZXR1cm4gKE5VTEwpOwor
CQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9DT09LSUVfRUNITzoKKwkJCVNDVFBEQkcoU0NU
UF9ERUJVR19JTlBVVDMsCisJCQkJIlNDVFBfQ09PS0lFX0VDSE8sIHN0Y2IgJXBcbiIsICh2b2lk
ICopc3RjYik7CisJCQlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYgKHN0Y2ItPmFzb2MudG90YWxfb3V0
cHV0X3F1ZXVlX3NpemUgPiAwKSkgeworCQkJCTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB7CisJCQkJCS8qIFdlIGFy
ZSBub3QgaW50ZXJlc3RlZCBhbnltb3JlICovCisJCQkJYWJlbmQ6CisJCQkJCWlmIChzdGNiICE9
IE5VTEwpIHsKKwkJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQkJfQorCQkJCQkqb2Zm
c2V0ID0gbGVuZ3RoOworCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCX0KKwkJCX0KKwkJCS8qLQor
CQkJICogRmlyc3QgYXJlIHdlIGFjY2VwdGluZz8gV2UgZG8gdGhpcyBhZ2FpbiBoZXJlCisJCQkg
KiBzaW5jZSBpdCBpcyBwb3NzaWJsZSB0aGF0IGEgcHJldmlvdXMgZW5kcG9pbnQgV0FTCisJCQkg
KiBsaXN0ZW5pbmcgcmVzcG9uZGVkIHRvIGEgSU5JVC1BQ0sgYW5kIHRoZW4KKwkJCSAqIGNsb3Nl
ZC4gV2Ugb3BlbmVkIGFuZCBib3VuZC4uIGFuZCBhcmUgbm93IG5vCisJCQkgKiBsb25nZXIgbGlz
dGVuaW5nLgorCQkJICoKKwkJCSAqIFhYWEdMOiBub3RlcyBvbiBjaGVja2luZyBsaXN0ZW4gcXVl
dWUgbGVuZ3RoLgorCQkJICogMSkgU0NUUF9JU19MSVNURU5JTkcoKSBkb2Vzbid0IG5lY2Vzc2Fy
aWx5IG1lYW4KKwkJCSAqICAgIFNPTElTVEVOSU5HKCksIGJlY2F1c2UgYSBsaXN0ZW5pbmcgIlVE
UCB0eXBlIgorCQkJICogICAgc29ja2V0IGlzbid0IGxpc3RlbmluZyBpbiB0ZXJtcyBvZiB0aGUg
c29ja2V0CisJCQkgKiAgICBsYXllci4gIEl0IGlzIGEgbm9ybWFsIGRhdGEgZmxvdyBzb2NrZXQs
IHRoYXQKKwkJCSAqICAgIGNhbiBmb3JrIG9mZiBuZXcgY29ubmVjdGlvbnMuICBUaHVzLCB3ZSBz
aG91bGQKKwkJCSAqICAgIGxvb2sgaW50byBzb2xfcWxlbiBvbmx5IGluIGNhc2Ugd2UgYXJlICFV
RFAuCisJCQkgKiAyKSBDaGVja2luZyBzb2xfcWxlbiBpbiBnZW5lcmFsIHJlcXVpcmVzIGxvY2tp
bmcKKwkJCSAqICAgIHRoZSBzb2NrZXQsIGFuZCB0aGlzIGNvZGUgbGFja3MgdGhhdC4KKwkJCSAq
LworCQkJaWYgKChzdGNiID09IE5VTEwpICYmCisJCQkgICAgKCFTQ1RQX0lTX0xJU1RFTklORyhp
bnApIHx8CisJCQkgICAgICghKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1VEUFRZ
UEUpICYmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwkJCSAgICAgIGlucC0+c2N0cF9zb2NrZXQtPnNvbF9xbGVuID49IGlucC0+c2N0cF9zb2Nr
ZXQtPnNvbF9xbGltaXQpKSkgeworI2Vsc2UKKwkJCSAgICAgIGlucC0+c2N0cF9zb2NrZXQtPnNv
X3FsZW4gPj0gaW5wLT5zY3RwX3NvY2tldC0+c29fcWxpbWl0KSkpIHsKKyNlbmRpZgorCQkJCWlm
ICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgJiYKKwkJCQkgICAg
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hYm9ydF9pZl9vbmVfMl9vbmVfaGl0c19saW1pdCkpKSB7
CisJCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9PVVRfT0ZfUkVT
QywgIiIpOworCQkJCQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKGlucCwgc3RjYiwgbSwgaXBobGVu
LAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgIHNyYywgZHN0LCBzaCwgb3BfZXJyLAorI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJCSAg
ICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAorI2VuZGlmCisJCQkJCSAg
ICAgICAgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKKwkJCQl9CisJCQkJKm9mZnNldCA9
IGxlbmd0aDsKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfSBlbHNlIHsKKwkJCQlzdHJ1Y3QgbWJ1
ZiAqcmV0X2J1ZjsKKwkJCQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqbGlucDsKKwkJCQlzdHJ1Y3Qgc2N0
cF90bWl0X2NodW5rICpjaGs7CisKKwkJCQlpZiAoc3RjYikgeworCQkJCQlsaW5wID0gTlVMTDsK
KwkJCQl9IGVsc2UgeworCQkJCQlsaW5wID0gaW5wOworCQkJCX0KKworCQkJCWlmIChsaW5wICE9
IE5VTEwpIHsKKwkJCQkJU0NUUF9BU09DX0NSRUFURV9MT0NLKGxpbnApOworCQkJCQlpZiAoKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB8fAorCQkJCQkgICAg
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSkgeworCQkJ
CQkJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0sobGlucCk7CisJCQkJCQlnb3RvIGFiZW5kOworCQkJ
CQl9CisJCQkJfQorCisJCQkJaWYgKG5ldHAgIT0gTlVMTCkgeworCQkJCQlzdHJ1Y3Qgc2N0cF90
Y2IgKmxvY2tlZF9zdGNiOworCisJCQkJCWxvY2tlZF9zdGNiID0gc3RjYjsKKwkJCQkJcmV0X2J1
ZiA9CisJCQkJCQlzY3RwX2hhbmRsZV9jb29raWVfZWNobyhtLCBpcGhsZW4sCisJCQkJCQkgICAg
ICAgICAgICAgICAgICAgICAgICAqb2Zmc2V0LAorCQkJCQkJICAgICAgICAgICAgICAgICAgICAg
ICAgc3JjLCBkc3QsCisJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICBzaCwKKwkJCQkJCSAg
ICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc2N0cF9jb29raWVfZWNob19jaHVuayAqKWNo
LAorCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgJmlucCwgJnN0Y2IsIG5ldHAsCisJCQkJ
CQkgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX3NraXBwZWQsCisJCQkJCQkgICAgICAgICAg
ICAgICAgICAgICAgICBhdXRoX29mZnNldCwKKwkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAg
IGF1dGhfbGVuLAorCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgJmxvY2tlZF9zdGNiLAor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJ
CQkgICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsCisJCQkJCQkgICAgICAgICAgICAg
ICAgICAgICAgICBtZmxvd2lkLAorI2VuZGlmCisJCQkJCQkgICAgICAgICAgICAgICAgICAgICAg
ICB2cmZfaWQsCisJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICBwb3J0KTsKKwkJCQkJaWYg
KChsb2NrZWRfc3RjYiAhPSBOVUxMKSAmJiAobG9ja2VkX3N0Y2IgIT0gc3RjYikpIHsKKwkJCQkJ
CVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfc3RjYik7CisJCQkJCX0KKwkJCQkJaWYgKHN0Y2IgIT0g
TlVMTCkgeworCQkJCQkJU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7CisJCQkJCX0KKwkJCQl9
IGVsc2UgeworCQkJCQlyZXRfYnVmID0gTlVMTDsKKwkJCQl9CisJCQkJaWYgKGxpbnAgIT0gTlVM
TCkgeworCQkJCQlTQ1RQX0FTT0NfQ1JFQVRFX1VOTE9DSyhsaW5wKTsKKwkJCQl9CisJCQkJaWYg
KHJldF9idWYgPT0gTlVMTCkgeworCQkJCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCQkJCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCX0KKwkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVU
MywKKwkJCQkJCSJHQUssIG51bGwgYnVmZmVyXG4iKTsKKwkJCQkJKm9mZnNldCA9IGxlbmd0aDsK
KwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9CisJCQkJLyogaWYgQVVUSCBza2lwcGVkLCBzZWUg
aWYgaXQgdmVyaWZpZWQuLi4gKi8KKwkJCQlpZiAoYXV0aF9za2lwcGVkKSB7CisJCQkJCWdvdF9h
dXRoID0gMTsKKwkJCQkJYXV0aF9za2lwcGVkID0gMDsKKwkJCQl9CisJCQkJLyogUmVzdGFydCB0
aGUgdGltZXIgaWYgd2UgaGF2ZSBwZW5kaW5nIGRhdGEgKi8KKwkJCQlUQUlMUV9GT1JFQUNIKGNo
aywgJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJCQkJCWlmIChjaGstPndo
b1RvICE9IE5VTEwpIHsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCWlmIChjaGsg
IT0gTlVMTCkgeworCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5ELCBz
dGNiLT5zY3RwX2VwLCBzdGNiLCBjaGstPndob1RvKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsK
KwkJY2FzZSBTQ1RQX0NPT0tJRV9BQ0s6CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAi
U0NUUF9DT09LSUVfQUNLLCBzdGNiICVwXG4iLCAodm9pZCAqKXN0Y2IpOworCQkJaWYgKChzdGNi
ID09IE5VTEwpIHx8IGNoa19sZW5ndGggIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Nvb2tpZV9hY2tf
Y2h1bmspKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpIHsKKwkJCQkvKiBXZSBhcmUgbm90IGludGVyZXN0ZWQg
YW55bW9yZSAqLworCQkJCWlmICgoc3RjYikgJiYgKHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1
ZXVlX3NpemUpKSB7CisJCQkJCTsKKwkJCQl9IGVsc2UgaWYgKHN0Y2IpIHsKKyNpZiBkZWZpbmVk
KF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQkJc28gPSBTQ1RQX0lO
UF9TTyhpbnApOworCQkJCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwor
CQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCVNDVFBfU09DS0VUX0xPQ0soc28sIDEp
OworCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZz
dGNiLT5hc29jLnJlZmNudCwgMSk7CisjZW5kaWYKKwkJCQkJKHZvaWQpc2N0cF9mcmVlX2Fzc29j
KGlucCwgc3RjYiwgU0NUUF9OT1JNQUxfUFJPQywKKwkJCQkJICAgICAgICAgICAgICAgICAgICAg
IFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfMzApOworI2lmIGRlZmluZWQoX19BUFBM
RV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCQlTQ1RQX1NPQ0tFVF9VTkxPQ0so
c28sIDEpOworI2VuZGlmCisJCQkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJCXJldHVybiAoTlVM
TCk7CisJCQkJfQorCQkJfQorCQkJaWYgKChuZXRwICE9IE5VTEwpICYmICgqbmV0cCAhPSBOVUxM
KSkgeworCQkJCXNjdHBfaGFuZGxlX2Nvb2tpZV9hY2soKHN0cnVjdCBzY3RwX2Nvb2tpZV9hY2tf
Y2h1bmsgKiljaCwgc3RjYiwgKm5ldHApOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9F
Q05fRUNITzoKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQX0VDTl9FQ0hPXG4i
KTsKKwkJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChzdGNi
LT5hc29jLmVjbl9zdXBwb3J0ZWQgPT0gMCkgeworCQkJCWdvdG8gdW5rbm93bl9jaHVuazsKKwkJ
CX0KKwkJCWlmIChjaGtfbGVuZ3RoICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9lY25lX2NodW5rKSkg
eworCQkJCWJyZWFrOworCQkJfQorCQkJc2N0cF9oYW5kbGVfZWNuX2VjaG8oKHN0cnVjdCBzY3Rw
X2VjbmVfY2h1bmsgKiljaCwgc3RjYik7CisJCQllY25lX3NlZW4gPSAxOworCQkJYnJlYWs7CisJ
CWNhc2UgU0NUUF9FQ05fQ1dSOgorCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIlNDVFBf
RUNOX0NXUlxuIik7CisJCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCQkJYnJlYWs7CisJCQl9CisJ
CQlpZiAoc3RjYi0+YXNvYy5lY25fc3VwcG9ydGVkID09IDApIHsKKwkJCQlnb3RvIHVua25vd25f
Y2h1bms7CisJCQl9CisJCQlpZiAoY2hrX2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IHNjdHBfY3dy
X2NodW5rKSkgeworCQkJCWJyZWFrOworCQkJfQorCQkJc2N0cF9oYW5kbGVfZWNuX2N3cigoc3Ry
dWN0IHNjdHBfY3dyX2NodW5rICopY2gsIHN0Y2IsICpuZXRwKTsKKwkJCWJyZWFrOworCQljYXNl
IFNDVFBfU0hVVERPV05fQ09NUExFVEU6CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAi
U0NUUF9TSFVURE9XTl9DT01QTEVURSwgc3RjYiAlcFxuIiwgKHZvaWQgKilzdGNiKTsKKwkJCS8q
IG11c3QgYmUgZmlyc3QgYW5kIG9ubHkgY2h1bmsgKi8KKwkJCWlmICgobnVtX2NodW5rcyA+IDEp
IHx8CisJCQkgICAgKGxlbmd0aCAtICpvZmZzZXQgPiAoaW50KVNDVFBfU0laRTMyKGNoa19sZW5n
dGgpKSkgeworCQkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJcmV0dXJuIChzdGNiKTsKKwkJCX0K
KwkJCWlmICgoY2hrX2xlbmd0aCA9PSBzaXplb2Yoc3RydWN0IHNjdHBfc2h1dGRvd25fY29tcGxl
dGVfY2h1bmspKSAmJgorCQkJICAgIChzdGNiICE9IE5VTEwpICYmIChuZXRwICE9IE5VTEwpICYm
ICgqbmV0cCAhPSBOVUxMKSkgeworCQkJCXNjdHBfaGFuZGxlX3NodXRkb3duX2NvbXBsZXRlKChz
dHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jb21wbGV0ZV9jaHVuayAqKWNoLAorCQkJCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0Y2IsICpuZXRwKTsKKwkJCQkqb2Zmc2V0ID0gbGVuZ3RoOwor
CQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0FTQ09ORjoK
KwkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQX0FTQ09ORlxuIik7CisJCQlpZiAo
c3RjYiAhPSBOVUxMKSB7CisJCQkJaWYgKHN0Y2ItPmFzb2MuYXNjb25mX3N1cHBvcnRlZCA9PSAw
KSB7CisJCQkJCWdvdG8gdW5rbm93bl9jaHVuazsKKwkJCQl9CisJCQkJc2N0cF9oYW5kbGVfYXNj
b25mKG0sICpvZmZzZXQsIHNyYywKKwkJCQkgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzY3Rw
X2FzY29uZl9jaHVuayAqKWNoLCBzdGNiLCBhc2NvbmZfY250ID09IDApOworCQkJCWFzY29uZl9j
bnQrKzsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNDVFBfQVNDT05GX0FDSzoKKwkJCVNDVFBE
QkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQX0FTQ09ORl9BQ0tcbiIpOworCQkJaWYgKHN0Y2Ig
PT0gTlVMTCkgeworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHN0Y2ItPmFzb2MuYXNjb25mX3N1
cHBvcnRlZCA9PSAwKSB7CisJCQkJZ290byB1bmtub3duX2NodW5rOworCQkJfQorCQkJaWYgKGNo
a19sZW5ndGggPCBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2Fja19jaHVuaykpIHsKKwkJCQli
cmVhazsKKwkJCX0KKwkJCWlmICgobmV0cCAhPSBOVUxMKSAmJiAoKm5ldHAgIT0gTlVMTCkpIHsK
KwkJCQkvKiBIZSdzIGFsaXZlIHNvIGdpdmUgaGltIGNyZWRpdCAqLworCQkJCWlmIChTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1RIUkVTSE9MRF9MT0dHSU5HKSB7
CisJCQkJCXNjdHBfbWlzY19pbnRzKFNDVFBfVEhSRVNIT0xEX0NMRUFSLAorCQkJCQkgICAgICAg
ICAgICAgICBzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQsCisJCQkJCSAgICAgICAgICAg
ICAgIDAsCisJCQkJCSAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVULAorCQkJCQkg
ICAgICAgICAgICAgICBfX0xJTkVfXyk7CisJCQkJfQorCQkJCXN0Y2ItPmFzb2Mub3ZlcmFsbF9l
cnJvcl9jb3VudCA9IDA7CisJCQkJc2N0cF9oYW5kbGVfYXNjb25mX2FjayhtLCAqb2Zmc2V0LAor
CQkJCSAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzY3RwX2FzY29uZl9hY2tfY2h1bmsg
KiljaCwgc3RjYiwgKm5ldHAsICZhYm9ydF9ub191bmxvY2spOworCQkJCWlmIChhYm9ydF9ub191
bmxvY2spCisJCQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQ
X0ZPUldBUkRfQ1VNX1RTTjoKKwkJY2FzZSBTQ1RQX0lGT1JXQVJEX0NVTV9UU046CisJCQlTQ1RQ
REJHKFNDVFBfREVCVUdfSU5QVVQzLCAiJXNcbiIsCisJCQkJY2gtPmNodW5rX3R5cGUgPT0gU0NU
UF9GT1JXQVJEX0NVTV9UU04gPyAiRk9SV0FSRF9UU04iIDogIklfRk9SV0FSRF9UU04iKTsKKwkJ
CWlmIChzdGNiID09IE5VTEwpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChzdGNiLT5hc29j
LnByc2N0cF9zdXBwb3J0ZWQgPT0gMCkgeworCQkJCWdvdG8gdW5rbm93bl9jaHVuazsKKwkJCX0K
KwkJCWlmIChjaGtfbGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX2ZvcndhcmRfdHNuX2NodW5r
KSkgeworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKCgoc3RjYi0+YXNvYy5pZGF0YV9zdXBwb3J0
ZWQgPT0gMSkgJiYgKGNoLT5jaHVua190eXBlID09IFNDVFBfRk9SV0FSRF9DVU1fVFNOKSkgfHwK
KwkJCSAgICAoKHN0Y2ItPmFzb2MuaWRhdGFfc3VwcG9ydGVkID09IDApICYmIChjaC0+Y2h1bmtf
dHlwZSA9PSBTQ1RQX0lGT1JXQVJEX0NVTV9UU04pKSkgeworCQkJCWlmIChjaC0+Y2h1bmtfdHlw
ZSA9PSBTQ1RQX0ZPUldBUkRfQ1VNX1RTTikgeworCQkJCQlTQ1RQX1NOUFJJTlRGKG1zZywgc2l6
ZW9mKG1zZyksICIlcyIsICJGT1JXQVJELVRTTiBjaHVuayByZWNlaXZlZCB3aGVuIEktRk9SV0FS
RC1UU04gd2FzIG5lZ290aWF0ZWQiKTsKKwkJCQl9IGVsc2UgeworCQkJCQlTQ1RQX1NOUFJJTlRG
KG1zZywgc2l6ZW9mKG1zZyksICIlcyIsICJJLUZPUldBUkQtVFNOIGNodW5rIHJlY2VpdmVkIHdo
ZW4gRk9SV0FSRC1UU04gd2FzIG5lZ290aWF0ZWQiKTsKKwkJCQl9CisJCQkJb3BfZXJyID0gc2N0
cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RPQ09MX1ZJT0xBVElPTiwgbXNnKTsKKwkJ
CQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKGlucCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05P
VF9MT0NLRUQpOworCQkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJ
CX0KKwkJCSpmd2RfdHNuX3NlZW4gPSAxOworCQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB7CisJCQkJLyogV2UgYXJlIG5vdCBpbnRlcmVzdGVkIGFu
eW1vcmUgKi8KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwkJCQlzbyA9IFNDVFBfSU5QX1NPKGlucCk7CisJCQkJYXRvbWljX2FkZF9pbnQoJnN0Y2It
PmFzb2MucmVmY250LCAxKTsKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJU0NUUF9T
T0NLRVRfTE9DSyhzbywgMSk7CisJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQlhdG9taWNf
c3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisjZW5kaWYKKwkJCQkodm9pZClz
Y3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAorCQkJCSAgICAgICAg
ICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzMxKTsKKyNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQlTQ1RQX1NP
Q0tFVF9VTkxPQ0soc28sIDEpOworI2VuZGlmCisJCQkJKm9mZnNldCA9IGxlbmd0aDsKKwkJCQly
ZXR1cm4gKE5VTEwpOworCQkJfQorCQkJLyoKKwkJCSAqIEZvciBzZW5kaW5nIGEgU0FDSyB0aGlz
IGxvb2tzIGxpa2UgREFUQQorCQkJICogY2h1bmtzLgorCQkJICovCisJCQlzdGNiLT5hc29jLmxh
c3RfZGF0YV9jaHVua19mcm9tID0gc3RjYi0+YXNvYy5sYXN0X2NvbnRyb2xfY2h1bmtfZnJvbTsK
KwkJCWFib3J0X2ZsYWcgPSAwOworCQkJc2N0cF9oYW5kbGVfZm9yd2FyZF90c24oc3RjYiwKKwkJ
CSAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9jaHVuayAq
KWNoLCAmYWJvcnRfZmxhZywgbSwgKm9mZnNldCk7CisJCQlpZiAoYWJvcnRfZmxhZykgeworCQkJ
CSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJCWJyZWFrOwor
CQljYXNlIFNDVFBfU1RSRUFNX1JFU0VUOgorCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywg
IlNDVFBfU1RSRUFNX1JFU0VUXG4iKTsKKwkJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCQlicmVh
azsKKwkJCX0KKwkJCWlmIChzdGNiLT5hc29jLnJlY29uZmlnX3N1cHBvcnRlZCA9PSAwKSB7CisJ
CQkJZ290byB1bmtub3duX2NodW5rOworCQkJfQorCQkJaWYgKGNoa19sZW5ndGggPCBzaXplb2Yo
c3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Rzbl9yZXEpKSB7CisJCQkJYnJlYWs7CisJCQl9CisJ
CQlpZiAoc2N0cF9oYW5kbGVfc3RyZWFtX3Jlc2V0KHN0Y2IsIG0sICpvZmZzZXQsIGNoKSkgewor
CQkJCS8qIHN0b3AgcHJvY2Vzc2luZyAqLworCQkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJcmV0
dXJuIChOVUxMKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNDVFBfUEFDS0VUX0RST1BQRUQ6
CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiU0NUUF9QQUNLRVRfRFJPUFBFRFxuIik7
CisJCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoc3RjYi0+
YXNvYy5wa3Rkcm9wX3N1cHBvcnRlZCA9PSAwKSB7CisJCQkJZ290byB1bmtub3duX2NodW5rOwor
CQkJfQorCQkJaWYgKGNoa19sZW5ndGggPCBzaXplb2Yoc3RydWN0IHNjdHBfcGt0ZHJvcF9jaHVu
aykpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmICgobmV0cCAhPSBOVUxMKSAmJiAoKm5ldHAg
IT0gTlVMTCkpIHsKKwkJCQlzY3RwX2hhbmRsZV9wYWNrZXRfZHJvcHBlZCgoc3RydWN0IHNjdHBf
cGt0ZHJvcF9jaHVuayAqKWNoLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0Y2Is
ICpuZXRwLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbihjaGtfbGVuZ3RoLCBj
b250aWd1b3VzKSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0FVVEhFTlRJQ0FUSU9O
OgorCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIlNDVFBfQVVUSEVOVElDQVRJT05cbiIp
OworCQkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJCS8qIHNhdmUgdGhlIGZpcnN0IEFVVEggZm9y
IGxhdGVyIHByb2Nlc3NpbmcgKi8KKwkJCQlpZiAoYXV0aF9za2lwcGVkID09IDApIHsKKwkJCQkJ
YXV0aF9vZmZzZXQgPSAqb2Zmc2V0OworCQkJCQlhdXRoX2xlbiA9IGNoa19sZW5ndGg7CisJCQkJ
CWF1dGhfc2tpcHBlZCA9IDE7CisJCQkJfQorCQkJCS8qIHNraXAgdGhpcyBjaHVuayAodGVtcG9y
YXJpbHkpICovCisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoc3RjYi0+YXNvYy5hdXRoX3N1cHBv
cnRlZCA9PSAwKSB7CisJCQkJZ290byB1bmtub3duX2NodW5rOworCQkJfQorCQkJaWYgKChjaGtf
bGVuZ3RoIDwgKHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rKSkpIHx8CisJCQkgICAgKGNo
a19sZW5ndGggPiAoc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmspICsKKwkJCSAgICAgICAg
ICAgICAgICAgIFNDVFBfQVVUSF9ESUdFU1RfTEVOX01BWCkpKSB7CisJCQkJLyogSXRzIG5vdCBv
dXJzICovCisJCQkJKm9mZnNldCA9IGxlbmd0aDsKKwkJCQlyZXR1cm4gKHN0Y2IpOworCQkJfQor
CQkJaWYgKGdvdF9hdXRoID09IDEpIHsKKwkJCQkvKiBza2lwIHRoaXMgY2h1bmsuLi4gaXQncyBh
bHJlYWR5IGF1dGgnZCAqLworCQkJCWJyZWFrOworCQkJfQorCQkJZ290X2F1dGggPSAxOworCQkJ
aWYgKHNjdHBfaGFuZGxlX2F1dGgoc3RjYiwgKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKiljaCwg
bSwgKm9mZnNldCkpIHsKKwkJCQkvKiBhdXRoIEhNQUMgZmFpbGVkIHNvIGR1bXAgdGhlIHBhY2tl
dCAqLworCQkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJcmV0dXJuIChzdGNiKTsKKwkJCX0gZWxz
ZSB7CisJCQkJLyogcmVtYWluaW5nIGNodW5rcyBhcmUgSE1BQyBjaGVja2VkICovCisJCQkJc3Rj
Yi0+YXNvYy5hdXRoZW50aWNhdGVkID0gMTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6
CisJCXVua25vd25fY2h1bms6CisJCQkvKiBpdCdzIGFuIHVua25vd24gY2h1bmshICovCisJCQlp
ZiAoKGNoLT5jaHVua190eXBlICYgMHg0MCkgJiYKKwkJCSAgICAoc3RjYiAhPSBOVUxMKSAmJgor
CQkJICAgIChTQ1RQX0dFVF9TVEFURShzdGNiKSAhPSBTQ1RQX1NUQVRFX0VNUFRZKSAmJgorCQkJ
ICAgIChTQ1RQX0dFVF9TVEFURShzdGNiKSAhPSBTQ1RQX1NUQVRFX0lOVVNFKSAmJgorCQkJICAg
IChTQ1RQX0dFVF9TVEFURShzdGNiKSAhPSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKSkgeworCQkJ
CXN0cnVjdCBzY3RwX2dlbl9lcnJvcl9jYXVzZSAqY2F1c2U7CisJCQkJaW50IGxlbjsKKworCQkJ
CW9wX2VyciA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhzaXplb2Yoc3RydWN0IHNjdHBfZ2VuX2Vy
cm9yX2NhdXNlKSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgTV9OT1dB
SVQsIDEsIE1UX0RBVEEpOworCQkJCWlmIChvcF9lcnIgIT0gTlVMTCkgeworCQkJCQlsZW4gPSBt
aW4oU0NUUF9TSVpFMzIoY2hrX2xlbmd0aCksICh1aW50MzJfdCkobGVuZ3RoIC0gKm9mZnNldCkp
OworCQkJCQljYXVzZSA9IG10b2Qob3BfZXJyLCBzdHJ1Y3Qgc2N0cF9nZW5fZXJyb3JfY2F1c2Ug
Kik7CisJCQkJCWNhdXNlLT5jb2RlID0gaHRvbnMoU0NUUF9DQVVTRV9VTlJFQ09HX0NIVU5LKTsK
KwkJCQkJY2F1c2UtPmxlbmd0aCA9IGh0b25zKCh1aW50MTZfdCkobGVuICsgc2l6ZW9mKHN0cnVj
dCBzY3RwX2dlbl9lcnJvcl9jYXVzZSkpKTsKKwkJCQkJU0NUUF9CVUZfTEVOKG9wX2VycikgPSBz
aXplb2Yoc3RydWN0IHNjdHBfZ2VuX2Vycm9yX2NhdXNlKTsKKwkJCQkJU0NUUF9CVUZfTkVYVChv
cF9lcnIpID0gU0NUUF9NX0NPUFlNKG0sICpvZmZzZXQsIGxlbiwgTV9OT1dBSVQpOworCQkJCQlp
ZiAoU0NUUF9CVUZfTkVYVChvcF9lcnIpICE9IE5VTEwpIHsKKyNpZmRlZiBTQ1RQX01CVUZfTE9H
R0lORworCQkJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFND
VFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkgeworCQkJCQkJCXNjdHBfbG9nX21iYyhTQ1RQX0JVRl9O
RVhUKG9wX2VyciksIFNDVFBfTUJVRl9JQ09QWSk7CisJCQkJCQl9CisjZW5kaWYKKwkJCQkJCXNj
dHBfcXVldWVfb3BfZXJyKHN0Y2IsIG9wX2Vycik7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlzY3Rw
X21fZnJlZW0ob3BfZXJyKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWlmICgoY2gtPmNodW5r
X3R5cGUgJiAweDgwKSA9PSAwKSB7CisJCQkJLyogZGlzY2FyZCB0aGlzIHBhY2tldCAqLworCQkJ
CSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJcmV0dXJuIChzdGNiKTsKKwkJCX0JLyogZWxzZSBza2lw
IHRoaXMgYmFkIGNodW5rIGFuZCBjb250aW51ZS4uLiAqLworCQkJYnJlYWs7CisJCX0JCS8qIHN3
aXRjaCAoY2gtPmNodW5rX3R5cGUpICovCisKKwluZXh0X2NodW5rOgorCQkvKiBnZXQgdGhlIG5l
eHQgY2h1bmsgKi8KKwkJKm9mZnNldCArPSBTQ1RQX1NJWkUzMihjaGtfbGVuZ3RoKTsKKwkJaWYg
KCpvZmZzZXQgPj0gbGVuZ3RoKSB7CisJCQkvKiBubyBtb3JlIGRhdGEgbGVmdCBpbiB0aGUgbWJ1
ZiBjaGFpbiAqLworCQkJYnJlYWs7CisJCX0KKwkJY2ggPSAoc3RydWN0IHNjdHBfY2h1bmtoZHIg
KilzY3RwX21fZ2V0cHRyKG0sICpvZmZzZXQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpLCBjaHVua19idWYp
OworCQlpZiAoY2ggPT0gTlVMTCkgeworCQkJKm9mZnNldCA9IGxlbmd0aDsKKwkJCXJldHVybiAo
c3RjYik7CisJCX0KKwl9CQkJLyogd2hpbGUgKi8KKworCWlmICgoYXNjb25mX2NudCA+IDApICYm
IChzdGNiICE9IE5VTEwpKSB7CisJCXNjdHBfc2VuZF9hc2NvbmZfYWNrKHN0Y2IpOworCX0KKwly
ZXR1cm4gKHN0Y2IpOworfQorCisvKgorICogY29tbW9uIGlucHV0IGNodW5rIHByb2Nlc3Npbmcg
KHY0IGFuZCB2NikKKyAqLwordm9pZAorc2N0cF9jb21tb25faW5wdXRfcHJvY2Vzc2luZyhzdHJ1
Y3QgbWJ1ZiAqKm1tLCBpbnQgaXBobGVuLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNyYywgc3RydWN0IHNvY2th
ZGRyICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwaGRyICpz
aCwgc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50OF90IGNvbXB1dGVfY3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
OF90IGVjbl9iaXRzLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWZsb3d0eXBl
LCB1aW50MzJfdCBtZmxvd2lkLCB1aW50MTZfdCBmaWJudW0sCisjZW5kaWYKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdWludDMyX3QgdnJmX2lkLCB1aW50MTZfdCBwb3J0KQoreworCXVp
bnQzMl90IGhpZ2hfdHNuOworCWludCBmd2RfdHNuX3NlZW4gPSAwLCBkYXRhX3Byb2Nlc3NlZCA9
IDA7CisJc3RydWN0IG1idWYgKm0gPSAqbW0sICpvcF9lcnI7CisJY2hhciBtc2dbU0NUUF9ESUFH
X0lORk9fTEVOXTsKKwlpbnQgdW5fc2VudDsKKwlpbnQgY250X2N0cmxfcmVhZHkgPSAwOworCXN0
cnVjdCBzY3RwX2lucGNiICppbnAgPSBOVUxMLCAqaW5wX2RlY3IgPSBOVUxMOworCXN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiA9IE5VTEw7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0ID0gTlVMTDsKKyNp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJc3RydWN0IHNvY2tldCAqdXBjYWxsX3NvY2tldCA9
IE5VTEw7CisjZW5kaWYKKworCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZkYXRhZ3JhbXMpOwor
I2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAorCXNjdHBfYXVkaXRfbG9nKDB4RTAsIDEpOwor
CXNjdHBfYXVkaXRpbmcoMCwgaW5wLCBzdGNiLCBuZXQpOworI2VuZGlmCisJaWYgKGNvbXB1dGVf
Y3JjICE9IDApIHsKKwkJdWludDMyX3QgY2hlY2ssIGNhbGNfY2hlY2s7CisKKwkJY2hlY2sgPSBz
aC0+Y2hlY2tzdW07CisJCXNoLT5jaGVja3N1bSA9IDA7CisJCWNhbGNfY2hlY2sgPSBzY3RwX2Nh
bGN1bGF0ZV9ja3N1bShtLCBpcGhsZW4pOworCQlzaC0+Y2hlY2tzdW0gPSBjaGVjazsKKwkJaWYg
KGNhbGNfY2hlY2sgIT0gY2hlY2spIHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsICJC
YWQgQ1NVTSBvbiBTQ1RQIHBhY2tldCBjYWxjX2NoZWNrOiV4IGNoZWNrOiV4ICBtOiVwIG1sZW46
JWQgaXBobGVuOiVkXG4iLAorCQkJICAgICAgICBjYWxjX2NoZWNrLCBjaGVjaywgKHZvaWQgKilt
LCBsZW5ndGgsIGlwaGxlbik7CisJCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fYWRkciht
LCBvZmZzZXQsIHNyYywgZHN0LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2gsIGNoLCAmaW5wLCAmbmV0LCB2cmZfaWQpOworI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5l
ZChJTkVUNikKKwkJCWlmICgoY2gtPmNodW5rX3R5cGUgIT0gU0NUUF9JTklUSUFUSU9OKSAmJgor
CQkJICAgIChuZXQgIT0gTlVMTCkgJiYgKG5ldC0+cG9ydCAhPSBwb3J0KSkgeworCQkJCWlmIChu
ZXQtPnBvcnQgPT0gMCkgeworCQkJCQkvKiBVRFAgZW5jYXBzdWxhdGlvbiB0dXJuZWQgb24uICov
CisJCQkJCW5ldC0+bXR1IC09IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKKwkJCQkJaWYgKHN0Y2It
PmFzb2Muc21hbGxlc3RfbXR1ID4gbmV0LT5tdHUpIHsKKwkJCQkJCXNjdHBfcGF0aG10dV9hZGp1
c3RtZW50KHN0Y2IsIG5ldC0+bXR1KTsKKwkJCQkJfQorCQkJCX0gZWxzZSBpZiAocG9ydCA9PSAw
KSB7CisJCQkJCS8qIFVEUCBlbmNhcHN1bGF0aW9uIHR1cm5lZCBvZmYuICovCisJCQkJCW5ldC0+
bXR1ICs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKKwkJCQkJLyogWFhYIFVwZGF0ZSBzbWFsbGVz
dF9tdHUgKi8KKwkJCQl9CisJCQkJbmV0LT5wb3J0ID0gcG9ydDsKKwkJCX0KKyNlbmRpZgorI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQlpZiAo
bmV0ICE9IE5VTEwpIHsKKwkJCQluZXQtPmZsb3d0eXBlID0gbWZsb3d0eXBlOworCQkJCW5ldC0+
Zmxvd2lkID0gbWZsb3dpZDsKKwkJCX0KKwkJCVNDVFBfUFJPQkU1KHJlY2VpdmUsIE5VTEwsIHN0
Y2IsIG0sIHN0Y2IsIHNoKTsKKyNlbmRpZgorCQkJaWYgKChpbnAgIT0gTlVMTCkgJiYgKHN0Y2Ig
IT0gTlVMTCkpIHsKKwkJCQlzY3RwX3NlbmRfcGFja2V0X2Ryb3BwZWQoc3RjYiwgbmV0LCBtLCBs
ZW5ndGgsIGlwaGxlbiwgMSk7CisJCQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBTQ1RQ
X09VVFBVVF9GUk9NX0lOUFVUX0VSUk9SLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJfSBlbHNl
IGlmICgoaW5wICE9IE5VTEwpICYmIChzdGNiID09IE5VTEwpKSB7CisJCQkJaW5wX2RlY3IgPSBp
bnA7CisJCQl9CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19iYWRzdW0pOworCQkJU0NUUF9TVEFU
X0lOQ1JfQ09VTlRFUjMyKHNjdHBzX2NoZWNrc3VtZXJyb3JzKTsKKwkJCWdvdG8gb3V0OworCQl9
CisJfQorCS8qIERlc3RpbmF0aW9uIHBvcnQgb2YgMCBpcyBpbGxlZ2FsLCBiYXNlZCBvbiBSRkM0
OTYwLiAqLworCWlmIChzaC0+ZGVzdF9wb3J0ID09IDApIHsKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0
cHNfaGRyb3BzKTsKKwkJZ290byBvdXQ7CisJfQorCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlv
bl9hZGRyKG0sIG9mZnNldCwgc3JjLCBkc3QsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2gsIGNoLCAmaW5wLCAmbmV0LCB2cmZfaWQpOworI2lmIGRlZmluZWQoSU5FVCkgfHwg
ZGVmaW5lZChJTkVUNikKKwlpZiAoKGNoLT5jaHVua190eXBlICE9IFNDVFBfSU5JVElBVElPTikg
JiYKKwkgICAgKG5ldCAhPSBOVUxMKSAmJiAobmV0LT5wb3J0ICE9IHBvcnQpKSB7CisJCWlmIChu
ZXQtPnBvcnQgPT0gMCkgeworCQkJLyogVURQIGVuY2Fwc3VsYXRpb24gdHVybmVkIG9uLiAqLwor
CQkJbmV0LT5tdHUgLT0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCQkJaWYgKHN0Y2ItPmFzb2Mu
c21hbGxlc3RfbXR1ID4gbmV0LT5tdHUpIHsKKwkJCQlzY3RwX3BhdGhtdHVfYWRqdXN0bWVudChz
dGNiLCBuZXQtPm10dSk7CisJCQl9CisJCX0gZWxzZSBpZiAocG9ydCA9PSAwKSB7CisJCQkvKiBV
RFAgZW5jYXBzdWxhdGlvbiB0dXJuZWQgb2ZmLiAqLworCQkJbmV0LT5tdHUgKz0gc2l6ZW9mKHN0
cnVjdCB1ZHBoZHIpOworCQkJLyogWFhYIFVwZGF0ZSBzbWFsbGVzdF9tdHUgKi8KKwkJfQorCQlu
ZXQtPnBvcnQgPSBwb3J0OworCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYm
ICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaWYgKG5ldCAhPSBOVUxMKSB7CisJCW5ldC0+Zmxv
d3R5cGUgPSBtZmxvd3R5cGU7CisJCW5ldC0+Zmxvd2lkID0gbWZsb3dpZDsKKwl9CisjZW5kaWYK
KwlpZiAoaW5wID09IE5VTEwpIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQorCQlTQ1RQX1BST0JFNShyZWNlaXZlLCBOVUxMLCBzdGNiLCBtLCBz
dGNiLCBzaCk7CisjZW5kaWYKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbm9wb3J0KTsKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlpZiAoYmFk
cG9ydF9iYW5kbGltKEJBTkRMSU1fU0NUUF9PT1RCKSA8IDApIHsKKwkJCWdvdG8gb3V0OworCQl9
CisjZW5kaWYKKwkJaWYgKGNoLT5jaHVua190eXBlID09IFNDVFBfU0hVVERPV05fQUNLKSB7CisJ
CQlzY3RwX3NlbmRfc2h1dGRvd25fY29tcGxldGUyKHNyYywgZHN0LCBzaCwKKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGZpYm51bSwKKyNlbmRpZgorCQkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOworCQkJZ290byBvdXQ7
CisJCX0KKwkJaWYgKGNoLT5jaHVua190eXBlID09IFNDVFBfU0hVVERPV05fQ09NUExFVEUpIHsK
KwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChjaC0+Y2h1bmtfdHlwZSAhPSBTQ1RQX0FCT1JUX0FT
U09DSUFUSU9OKSB7CisJCQlpZiAoKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ibGFja2hvbGUpID09
IDApIHx8CisJCQkgICAgKChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYmxhY2tob2xlKSA9PSAxKSAm
JgorCQkJICAgICAoY2gtPmNodW5rX3R5cGUgIT0gU0NUUF9JTklUKSkpIHsKKwkJCQlvcF9lcnIg
PSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9fY29k
ZSksCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT3V0IG9mIHRoZSBibHVlIik7
CisJCQkJc2N0cF9zZW5kX2Fib3J0KG0sIGlwaGxlbiwgc3JjLCBkc3QsCisJCQkJICAgICAgICAg
ICAgICAgIHNoLCAwLCBvcF9lcnIsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQkgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lk
LCBmaWJudW0sCisjZW5kaWYKKwkJCQkgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKKwkJ
CX0KKwkJfQorCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKHN0Y2IgPT0gTlVMTCkgeworCQlpbnBf
ZGVjciA9IGlucDsKKwl9CisJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMSwgIk9rLCBDb21tb24g
aW5wdXQgcHJvY2Vzc2luZyBjYWxsZWQsIG06JXAgaXBobGVuOiVkIG9mZnNldDolZCBsZW5ndGg6
JWQgc3RjYjolcFxuIiwKKwkJKHZvaWQgKiltLCBpcGhsZW4sIG9mZnNldCwgbGVuZ3RoLCAodm9p
ZCAqKXN0Y2IpOworCWlmIChzdGNiKSB7CisJCS8qIGFsd2F5cyBjbGVhciB0aGlzIGJlZm9yZSBi
ZWdpbm5pbmcgYSBwYWNrZXQgKi8KKwkJc3RjYi0+YXNvYy5hdXRoZW50aWNhdGVkID0gMDsKKwkJ
c3RjYi0+YXNvYy5zZWVuX2Ffc2Fja190aGlzX3BrdCA9IDA7CisJCVNDVFBEQkcoU0NUUF9ERUJV
R19JTlBVVDEsICJzdGNiOiVwIHN0YXRlOiV4XG4iLAorCQkJKHZvaWQgKilzdGNiLCBzdGNiLT5h
c29jLnN0YXRlKTsKKworCQlpZiAoKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX1dBU19B
Qk9SVEVEKSB8fAorCQkgICAgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0FCT1VUX1RP
X0JFX0ZSRUVEKSkgeworCQkJLyotCisJCQkgKiBJZiB3ZSBoaXQgaGVyZSwgd2UgaGFkIGEgcmVm
IGNvdW50CisJCQkgKiB1cCB3aGVuIHRoZSBhc3NvYyB3YXMgYWJvcnRlZCBhbmQgdGhlCisJCQkg
KiB0aW1lciBpcyBjbGVhcmluZyBvdXQgdGhlIGFzc29jLCB3ZSBzaG91bGQKKwkJCSAqIE5PVCBy
ZXNwb25kIHRvIGFueSBwYWNrZXQuLiBpdHMgT09UQi4KKwkJCSAqLworCQkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOworCQkJc3RjYiA9IE5VTEw7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
IWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCVNDVFBfUFJPQkU1KHJlY2VpdmUsIE5VTEwsIHN0
Y2IsIG0sIHN0Y2IsIHNoKTsKKyNlbmRpZgorCQkJU0NUUF9TTlBSSU5URihtc2csIHNpemVvZiht
c2cpLCAiT09UQiwgJXM6JWQgYXQgJXMiLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsK
KwkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2Rp
YWdfaW5mb19jb2RlKSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnKTsKKwkJ
CXNjdHBfaGFuZGxlX29vdGIobSwgaXBobGVuLCBvZmZzZXQsIHNyYywgZHN0LCBzaCwgaW5wLCBv
cF9lcnIsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwkJCSAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBpbnAtPmZpYm51bSwK
KyNlbmRpZgorCQkJICAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOworCQkJZ290byBvdXQ7
CisJCX0KKwl9CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWlmICgoc3RjYiAhPSBOVUxM
KSAmJgorCSAgICAhKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19T
T0NLRVRfR09ORSkgJiYKKwkgICAgKHN0Y2ItPnNjdHBfc29ja2V0ICE9IE5VTEwpKSB7CisJCWlm
IChzdGNiLT5zY3RwX3NvY2tldC0+c29faGVhZCAhPSBOVUxMKSB7CisJCQl1cGNhbGxfc29ja2V0
ID0gc3RjYi0+c2N0cF9zb2NrZXQtPnNvX2hlYWQ7CisJCX0gZWxzZSB7CisJCQl1cGNhbGxfc29j
a2V0ID0gc3RjYi0+c2N0cF9zb2NrZXQ7CisJCX0KKwkJU09DS19MT0NLKHVwY2FsbF9zb2NrZXQp
OworCQlzb3JlZih1cGNhbGxfc29ja2V0KTsKKwkJU09DS19VTkxPQ0sodXBjYWxsX3NvY2tldCk7
CisJfQorI2VuZGlmCisJaWYgKElTX1NDVFBfQ09OVFJPTChjaCkpIHsKKwkJLyogcHJvY2VzcyB0
aGUgY29udHJvbCBwb3J0aW9uIG9mIHRoZSBTQ1RQIHBhY2tldCAqLworCQkvKiBzYV9pZ25vcmUg
Tk9fTlVMTF9DSEsgKi8KKwkJc3RjYiA9IHNjdHBfcHJvY2Vzc19jb250cm9sKG0sIGlwaGxlbiwg
Jm9mZnNldCwgbGVuZ3RoLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjLCBkc3Qs
IHNoLCBjaCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucCwgc3RjYiwgJm5ldCwg
JmZ3ZF90c25fc2VlbiwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxv
d2lkLCBmaWJudW0sCisjZW5kaWYKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZyZl9p
ZCwgcG9ydCk7CisJCWlmIChzdGNiKSB7CisJCQkvKiBUaGlzIGNvdmVycyB1cyBpZiB0aGUgY29v
a2llLWVjaG8gd2FzIHRoZXJlCisJCQkgKiBhbmQgaXQgY2hhbmdlcyBvdXIgSU5QLgorCQkJICov
CisJCQlpbnAgPSBzdGNiLT5zY3RwX2VwOworI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJ
TkVUNikKKwkJCWlmICgoY2gtPmNodW5rX3R5cGUgIT0gU0NUUF9JTklUSUFUSU9OKSAmJgorCQkJ
ICAgIChuZXQgIT0gTlVMTCkgJiYgKG5ldC0+cG9ydCAhPSBwb3J0KSkgeworCQkJCWlmIChuZXQt
PnBvcnQgPT0gMCkgeworCQkJCQkvKiBVRFAgZW5jYXBzdWxhdGlvbiB0dXJuZWQgb24uICovCisJ
CQkJCW5ldC0+bXR1IC09IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKKwkJCQkJaWYgKHN0Y2ItPmFz
b2Muc21hbGxlc3RfbXR1ID4gbmV0LT5tdHUpIHsKKwkJCQkJCXNjdHBfcGF0aG10dV9hZGp1c3Rt
ZW50KHN0Y2IsIG5ldC0+bXR1KTsKKwkJCQkJfQorCQkJCX0gZWxzZSBpZiAocG9ydCA9PSAwKSB7
CisJCQkJCS8qIFVEUCBlbmNhcHN1bGF0aW9uIHR1cm5lZCBvZmYuICovCisJCQkJCW5ldC0+bXR1
ICs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKKwkJCQkJLyogWFhYIFVwZGF0ZSBzbWFsbGVzdF9t
dHUgKi8KKwkJCQl9CisJCQkJbmV0LT5wb3J0ID0gcG9ydDsKKwkJCX0KKyNlbmRpZgorCQl9CisJ
fSBlbHNlIHsKKwkJLyoKKwkJICogbm8gY29udHJvbCBjaHVua3MsIHNvIHByZS1wcm9jZXNzIERB
VEEgY2h1bmtzICh0aGVzZQorCQkgKiBjaGVja3MgYXJlIHRha2VuIGNhcmUgb2YgYnkgY29udHJv
bCBwcm9jZXNzaW5nKQorCQkgKi8KKworCQkvKgorCQkgKiBpZiBEQVRBIG9ubHkgcGFja2V0LCBh
bmQgYXV0aCBpcyByZXF1aXJlZCwgdGhlbiBwdW50Li4uCisJCSAqIGNhbid0IGhhdmUgYXV0aGVu
dGljYXRlZCB3aXRob3V0IGFueSBBVVRIIChjb250cm9sKQorCQkgKiBjaHVua3MKKwkJICovCisJ
CWlmICgoc3RjYiAhPSBOVUxMKSAmJgorCQkgICAgc2N0cF9hdXRoX2lzX3JlcXVpcmVkX2NodW5r
KFNDVFBfREFUQSwgc3RjYi0+YXNvYy5sb2NhbF9hdXRoX2NodW5rcykpIHsKKwkJCS8qICJzaWxl
bnRseSIgaWdub3JlICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKwkJCVNDVFBfUFJPQkU1KHJlY2VpdmUsIE5VTEwsIHN0Y2IsIG0sIHN0Y2Is
IHNoKTsKKyNlbmRpZgorCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmF1dGhtaXNzaW5nKTsK
KwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCS8qIG91dCBvZiB0
aGUgYmx1ZSBEQVRBIGNodW5rICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwkJCVNDVFBfUFJPQkU1KHJlY2VpdmUsIE5VTEwsIE5VTEwsIG0s
IE5VTEwsIHNoKTsKKyNlbmRpZgorCQkJU0NUUF9TTlBSSU5URihtc2csIHNpemVvZihtc2cpLCAi
T09UQiwgJXM6JWQgYXQgJXMiLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJCW9w
X2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5m
b19jb2RlKSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnKTsKKwkJCXNjdHBf
aGFuZGxlX29vdGIobSwgaXBobGVuLCBvZmZzZXQsIHNyYywgZHN0LCBzaCwgaW5wLCBvcF9lcnIs
CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJ
CSAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBmaWJudW0sCisjZW5kaWYKKwkJ
CQkJIHZyZl9pZCwgcG9ydCk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAoc3RjYi0+YXNvYy5t
eV92dGFnICE9IG50b2hsKHNoLT52X3RhZykpIHsKKwkJCS8qIHZfdGFnIG1pc21hdGNoISAqLwor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQlT
Q1RQX1BST0JFNShyZWNlaXZlLCBOVUxMLCBzdGNiLCBtLCBzdGNiLCBzaCk7CisjZW5kaWYKKwkJ
CVNDVFBfU1RBVF9JTkNSKHNjdHBzX2JhZHZ0YWcpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisK
KyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCVND
VFBfUFJPQkU1KHJlY2VpdmUsIE5VTEwsIHN0Y2IsIG0sIHN0Y2IsIHNoKTsKKyNlbmRpZgorCWlm
IChzdGNiID09IE5VTEwpIHsKKwkJLyoKKwkJICogbm8gdmFsaWQgVENCIGZvciB0aGlzIHBhY2tl
dCwgb3Igd2UgZm91bmQgaXQncyBhIGJhZAorCQkgKiBwYWNrZXQgd2hpbGUgcHJvY2Vzc2luZyBj
b250cm9sLCBvciB3ZSdyZSBkb25lIHdpdGggdGhpcworCQkgKiBwYWNrZXQgKGRvbmUgb3Igc2tp
cCByZXN0IG9mIGRhdGEpLCBzbyB3ZSBkcm9wIGl0Li4uCisJCSAqLworCQlnb3RvIG91dDsKKwl9
CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWlmICgodXBjYWxsX3NvY2tldCA9PSBOVUxM
KSAmJgorCSAgICAhKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19T
T0NLRVRfR09ORSkgJiYKKwkgICAgKHN0Y2ItPnNjdHBfc29ja2V0ICE9IE5VTEwpKSB7CisJCWlm
IChzdGNiLT5zY3RwX3NvY2tldC0+c29faGVhZCAhPSBOVUxMKSB7CisJCQl1cGNhbGxfc29ja2V0
ID0gc3RjYi0+c2N0cF9zb2NrZXQtPnNvX2hlYWQ7CisJCX0gZWxzZSB7CisJCQl1cGNhbGxfc29j
a2V0ID0gc3RjYi0+c2N0cF9zb2NrZXQ7CisJCX0KKwkJU09DS19MT0NLKHVwY2FsbF9zb2NrZXQp
OworCQlzb3JlZih1cGNhbGxfc29ja2V0KTsKKwkJU09DS19VTkxPQ0sodXBjYWxsX3NvY2tldCk7
CisJfQorI2VuZGlmCisKKwkvKgorCSAqIERBVEEgY2h1bmsgcHJvY2Vzc2luZworCSAqLworCS8q
IHBsb3cgdGhyb3VnaCB0aGUgZGF0YSBjaHVua3Mgd2hpbGUgbGVuZ3RoID4gb2Zmc2V0ICovCisK
KwkvKgorCSAqIFJlc3Qgc2hvdWxkIGJlIERBVEEgb25seS4gIENoZWNrIGF1dGhlbnRpY2F0aW9u
IHN0YXRlIGlmIEFVVEggZm9yCisJICogREFUQSBpcyByZXF1aXJlZC4KKwkgKi8KKwlpZiAoKGxl
bmd0aCA+IG9mZnNldCkgJiYKKwkgICAgKHN0Y2IgIT0gTlVMTCkgJiYKKwkgICAgc2N0cF9hdXRo
X2lzX3JlcXVpcmVkX2NodW5rKFNDVFBfREFUQSwgc3RjYi0+YXNvYy5sb2NhbF9hdXRoX2NodW5r
cykgJiYKKwkgICAgIXN0Y2ItPmFzb2MuYXV0aGVudGljYXRlZCkgeworCQkvKiAic2lsZW50bHki
IGlnbm9yZSAqLworCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2YXV0aG1pc3NpbmcpOworCQlT
Q1RQREJHKFNDVFBfREVCVUdfQVVUSDEsCisJCQkiRGF0YSBjaHVuayByZXF1aXJlcyBBVVRILCBz
a2lwcGVkXG4iKTsKKwkJZ290byB0cmlnZ2VyX3NlbmQ7CisJfQorCWlmIChsZW5ndGggPiBvZmZz
ZXQpIHsKKwkJaW50IHJldHZhbDsKKworCQkvKgorCQkgKiBGaXJzdCBjaGVjayB0byBtYWtlIHN1
cmUgb3VyIHN0YXRlIGlzIGNvcnJlY3QuIFdlIHdvdWxkCisJCSAqIG5vdCBnZXQgaGVyZSB1bmxl
c3Mgd2UgcmVhbGx5IGRpZCBoYXZlIGEgdGFnLCBzbyB3ZSBkb24ndAorCQkgKiBhYm9ydCBpZiB0
aGlzIGhhcHBlbnMsIGp1c3QgZHVtcCB0aGUgY2h1bmsgc2lsZW50bHkuCisJCSAqLworCQlzd2l0
Y2ggKFNDVFBfR0VUX1NUQVRFKHN0Y2IpKSB7CisJCWNhc2UgU0NUUF9TVEFURV9DT09LSUVfRUNI
T0VEOgorCQkJLyoKKwkJCSAqIHdlIGNvbnNpZGVyIGRhdGEgd2l0aCB2YWxpZCB0YWdzIGluIHRo
aXMgc3RhdGUKKwkJCSAqIHNob3dzIHVzIHRoZSBjb29raWUtYWNrIHdhcyBsb3N0LiBJbXBseSBp
dCB3YXMKKwkJCSAqIHRoZXJlLgorCQkJICovCisJCQlzY3RwX2hhbmRsZV9jb29raWVfYWNrKChz
dHJ1Y3Qgc2N0cF9jb29raWVfYWNrX2NodW5rICopY2gsIHN0Y2IsIG5ldCk7CisJCQlicmVhazsK
KwkJY2FzZSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUOgorCQkJLyoKKwkJCSAqIFdlIGNvbnNpZGVy
IE9PVEIgYW55IGRhdGEgc2VudCBkdXJpbmcgYXNvYyBzZXR1cC4KKwkJCSAqLworCQkJU0NUUF9T
TlBSSU5URihtc2csIHNpemVvZihtc2cpLCAiT09UQiwgJXM6JWQgYXQgJXMiLCBfX0ZJTEVfXywg
X19MSU5FX18sIF9fZnVuY19fKTsKKwkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKKwkJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbXNnKTsKKwkJCXNjdHBfaGFuZGxlX29vdGIobSwgaXBobGVuLCBvZmZzZXQs
IHNyYywgZHN0LCBzaCwgaW5wLCBvcF9lcnIsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
IWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCSAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBt
Zmxvd2lkLCBpbnAtPmZpYm51bSwKKyNlbmRpZgorCQkJCQkgdnJmX2lkLCBwb3J0KTsKKwkJCWdv
dG8gb3V0OworCQkJLypzYV9pZ25vcmUgTk9UUkVBQ0hFRCovCisJCQlicmVhazsKKwkJY2FzZSBT
Q1RQX1NUQVRFX0VNUFRZOgkvKiBzaG91bGQgbm90IGhhcHBlbiAqLworCQljYXNlIFNDVFBfU1RB
VEVfSU5VU0U6CS8qIHNob3VsZCBub3QgaGFwcGVuICovCisJCWNhc2UgU0NUUF9TVEFURV9TSFVU
RE9XTl9SRUNFSVZFRDoJLyogVGhpcyBpcyBhIHBlZXIgZXJyb3IgKi8KKwkJY2FzZSBTQ1RQX1NU
QVRFX1NIVVRET1dOX0FDS19TRU5UOgorCQlkZWZhdWx0OgorCQkJZ290byBvdXQ7CisJCQkvKnNh
X2lnbm9yZSBOT1RSRUFDSEVEKi8KKwkJCWJyZWFrOworCQljYXNlIFNDVFBfU1RBVEVfT1BFTjoK
KwkJY2FzZSBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQ6CisJCQlicmVhazsKKwkJfQorCQkvKiBw
bG93IHRocm91Z2ggdGhlIGRhdGEgY2h1bmtzIHdoaWxlIGxlbmd0aCA+IG9mZnNldCAqLworCQly
ZXR2YWwgPSBzY3RwX3Byb2Nlc3NfZGF0YShtbSwgaXBobGVuLCAmb2Zmc2V0LCBsZW5ndGgsCisJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucCwgc3RjYiwgbmV0LCAmaGlnaF90c24pOwor
CQlpZiAocmV0dmFsID09IDIpIHsKKwkJCS8qCisJCQkgKiBUaGUgYXNzb2NpYXRpb24gYWJvcnRl
ZCwgTk8gVU5MT0NLIG5lZWRlZCBzaW5jZQorCQkJICogdGhlIGFzc29jaWF0aW9uIGlzIGRlc3Ry
b3llZC4KKwkJCSAqLworCQkJc3RjYiA9IE5VTEw7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAo
cmV0dmFsID09IDApIHsKKwkJCWRhdGFfcHJvY2Vzc2VkID0gMTsKKwkJfQorCQkvKgorCQkgKiBB
bnl0aGluZyBpbXBvcnRhbnQgbmVlZHMgdG8gaGF2ZSBiZWVuIG1fY29weSdlZCBpbgorCQkgKiBw
cm9jZXNzX2RhdGEKKwkJICovCisJfQorCisJLyogdGFrZSBjYXJlIG9mIGVjbiAqLworCWlmICgo
ZGF0YV9wcm9jZXNzZWQgPT0gMSkgJiYKKwkgICAgKHN0Y2ItPmFzb2MuZWNuX3N1cHBvcnRlZCA9
PSAxKSAmJgorCSAgICAoKGVjbl9iaXRzICYgU0NUUF9DRV9CSVRTKSA9PSBTQ1RQX0NFX0JJVFMp
KSB7CisJCS8qIFllcCwgd2UgbmVlZCB0byBhZGQgYSBFQ05FICovCisJCXNjdHBfc2VuZF9lY25f
ZWNobyhzdGNiLCBuZXQsIGhpZ2hfdHNuKTsKKwl9CisKKwlpZiAoKGRhdGFfcHJvY2Vzc2VkID09
IDApICYmIChmd2RfdHNuX3NlZW4pKSB7CisJCWludCB3YXNfYV9nYXA7CisJCXVpbnQzMl90IGhp
Z2hlc3RfdHNuOworCisJCWlmIChTQ1RQX1RTTl9HVChzdGNiLT5hc29jLmhpZ2hlc3RfdHNuX2lu
c2lkZV9ucl9tYXAsIHN0Y2ItPmFzb2MuaGlnaGVzdF90c25faW5zaWRlX21hcCkpIHsKKwkJCWhp
Z2hlc3RfdHNuID0gc3RjYi0+YXNvYy5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwOworCQl9IGVs
c2UgeworCQkJaGlnaGVzdF90c24gPSBzdGNiLT5hc29jLmhpZ2hlc3RfdHNuX2luc2lkZV9tYXA7
CisJCX0KKwkJd2FzX2FfZ2FwID0gU0NUUF9UU05fR1QoaGlnaGVzdF90c24sIHN0Y2ItPmFzb2Mu
Y3VtdWxhdGl2ZV90c24pOworCQlzdGNiLT5hc29jLnNlbmRfc2FjayA9IDE7CisJCXNjdHBfc2Fj
a19jaGVjayhzdGNiLCB3YXNfYV9nYXApOworCX0gZWxzZSBpZiAoZndkX3Rzbl9zZWVuKSB7CisJ
CXN0Y2ItPmFzb2Muc2VuZF9zYWNrID0gMTsKKwl9CisJLyogdHJpZ2dlciBzZW5kIG9mIGFueSBj
aHVua3MgaW4gcXVldWUuLi4gKi8KK3RyaWdnZXJfc2VuZDoKKyNpZmRlZiBTQ1RQX0FVRElUSU5H
X0VOQUJMRUQKKwlzY3RwX2F1ZGl0X2xvZygweEUwLCAyKTsKKwlzY3RwX2F1ZGl0aW5nKDEsIGlu
cCwgc3RjYiwgbmV0KTsKKyNlbmRpZgorCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsCisJCSJD
aGVjayBmb3IgY2h1bmsgb3V0cHV0IHBydzolZCB0cWU6JWQgdGY9JWRcbiIsCisJCXN0Y2ItPmFz
b2MucGVlcnNfcnduZCwKKwkJVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2MuY29udHJvbF9zZW5kX3F1
ZXVlKSwKKwkJc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQpOworCXVuX3NlbnQgPSAoc3RjYi0+YXNv
Yy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSAtIHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0KTsKKwlp
ZiAoIVRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1ZSkpIHsKKwkJY250
X2N0cmxfcmVhZHkgPSBzdGNiLT5hc29jLmN0cmxfcXVldWVfY250IC0gc3RjYi0+YXNvYy5lY25f
ZWNob19jbnRfb25xOworCX0KKwlpZiAoIVRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLmFzY29uZl9z
ZW5kX3F1ZXVlKSB8fAorCSAgICBjbnRfY3RybF9yZWFkeSB8fAorCSAgICBzdGNiLT5hc29jLnRy
aWdnZXJfcmVzZXQgfHwKKwkgICAgKCh1bl9zZW50ID4gMCkgJiYKKwkgICAgIChzdGNiLT5hc29j
LnBlZXJzX3J3bmQgPiAwIHx8IHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0ID09IDApKSkgeworCQlT
Q1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiQ2FsbGluZyBjaHVuayBPVVRQVVRcbiIpOworCQlz
Y3RwX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fQ09OVFJPTF9QUk9D
LCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiY2h1
bmsgT1VUUFVUIHJldHVybnNcbiIpOworCX0KKyNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQK
KwlzY3RwX2F1ZGl0X2xvZygweEUwLCAzKTsKKwlzY3RwX2F1ZGl0aW5nKDIsIGlucCwgc3RjYiwg
bmV0KTsKKyNlbmRpZgorIG91dDoKKwlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCVNDVFBfVENCX1VO
TE9DSyhzdGNiKTsKKwl9CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWlmICh1cGNhbGxf
c29ja2V0ICE9IE5VTEwpIHsKKwkJaWYgKHVwY2FsbF9zb2NrZXQtPnNvX3VwY2FsbCAhPSBOVUxM
KSB7CisJCQlpZiAoc29yZWFkYWJsZSh1cGNhbGxfc29ja2V0KSB8fAorCQkJICAgIHNvd3JpdGVh
YmxlKHVwY2FsbF9zb2NrZXQpIHx8CisJCQkgICAgdXBjYWxsX3NvY2tldC0+c29fZXJyb3IpIHsK
KwkJCQkoKnVwY2FsbF9zb2NrZXQtPnNvX3VwY2FsbCkodXBjYWxsX3NvY2tldCwgdXBjYWxsX3Nv
Y2tldC0+c29fdXBjYWxsYXJnLCBNX05PV0FJVCk7CisJCQl9CisJCX0KKwkJQUNDRVBUX0xPQ0so
KTsKKwkJU09DS19MT0NLKHVwY2FsbF9zb2NrZXQpOworCQlzb3JlbGUodXBjYWxsX3NvY2tldCk7
CisJfQorI2VuZGlmCisJaWYgKGlucF9kZWNyICE9IE5VTEwpIHsKKwkJLyogcmVkdWNlIHJlZi1j
b3VudCAqLworCQlTQ1RQX0lOUF9XTE9DSyhpbnBfZGVjcik7CisJCVNDVFBfSU5QX0RFQ1JfUkVG
KGlucF9kZWNyKTsKKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnBfZGVjcik7CisJfQorCXJldHVybjsK
K30KKworI2lmZGVmIElORVQKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQordm9pZAorc2N0
cF9pbnB1dF93aXRoX3BvcnQoc3RydWN0IG1idWYgKmlfcGFrLCBpbnQgb2ZmLCB1aW50MTZfdCBw
b3J0KQoreworCXN0cnVjdCBtYnVmICptOworCWludCBpcGhsZW47CisJdWludDMyX3QgdnJmX2lk
ID0gMDsKKwl1aW50OF90IGVjbl9iaXRzOworCXN0cnVjdCBzb2NrYWRkcl9pbiBzcmMsIGRzdDsK
KwlzdHJ1Y3QgaXAgKmlwOworCXN0cnVjdCBzY3RwaGRyICpzaDsKKwlzdHJ1Y3Qgc2N0cF9jaHVu
a2hkciAqY2g7CisJaW50IGxlbmd0aCwgb2Zmc2V0OworCXVpbnQ4X3QgY29tcHV0ZV9jcmM7Cisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwl1aW50
MzJfdCBtZmxvd2lkOworCXVpbnQ4X3QgbWZsb3d0eXBlOworCXVpbnQxNl90IGZpYm51bTsKKyNl
bmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwl1aW50MTZfdCBwb3J0ID0gMDsKKyNl
bmRpZgorCisJaXBobGVuID0gb2ZmOworCWlmIChTQ1RQX0dFVF9QS1RfVlJGSUQoaV9wYWssIHZy
Zl9pZCkpIHsKKwkJU0NUUF9SRUxFQVNFX1BLVChpX3Bhayk7CisJCXJldHVybjsKKwl9CisJbSA9
IFNDVFBfSEVBREVSX1RPX0NIQUlOKGlfcGFrKTsKKyNpZmRlZiBTQ1RQX01CVUZfTE9HR0lORwor
CS8qIExvZyBpbiBhbnkgaW5wdXQgbWJ1ZnMgKi8KKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQlVGX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBfbG9n
X21iYyhtLCBTQ1RQX01CVUZfSU5QVVQpOworCX0KKyNlbmRpZgorI2lmZGVmIFNDVFBfUEFDS0VU
X0xPR0dJTkcKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9MQVNUX1BBQ0tFVF9UUkFDSU5HKSB7CisJCXNjdHBfcGFja2V0X2xvZyhtKTsKKwl9CisjZW5k
aWYKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CVNDVFBEQkcoU0NUUF9ERUJVR19DUkNPRkZMT0FELAorCSAgICAgICAgInNjdHBfaW5wdXQoKTog
UGFja2V0IG9mIGxlbmd0aCAlZCByZWNlaXZlZCBvbiAlcyB3aXRoIGNzdW1fZmxhZ3MgMHglYi5c
biIsCisJICAgICAgICBtLT5tX3BrdGhkci5sZW4sCisJICAgICAgICBpZl9uYW1lKG0tPm1fcGt0
aGRyLnJjdmlmKSwKKwkgICAgICAgIChpbnQpbS0+bV9wa3RoZHIuY3N1bV9mbGFncywgQ1NVTV9C
SVRTKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorCVNDVFBEQkcoU0NUUF9ERUJVR19DUkNPRkZMT0FELAorCSAgICAgICAgInNjdHBf
aW5wdXQoKTogUGFja2V0IG9mIGxlbmd0aCAlZCByZWNlaXZlZCBvbiAlcyVkIHdpdGggY3N1bV9m
bGFncyAweCV4LlxuIiwKKwkgICAgICAgIG0tPm1fcGt0aGRyLmxlbiwKKwkgICAgICAgIG0tPm1f
cGt0aGRyLnJjdmlmLT5pZl9uYW1lLAorCSAgICAgICAgbS0+bV9wa3RoZHIucmN2aWYtPmlmX3Vu
aXQsCisJICAgICAgICBtLT5tX3BrdGhkci5jc3VtX2ZsYWdzKTsKKyNlbmRpZgorI2lmIGRlZmlu
ZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCVNDVFBEQkcoU0NUUF9ERUJV
R19DUkNPRkZMT0FELAorCSAgICAgICAgInNjdHBfaW5wdXQoKTogUGFja2V0IG9mIGxlbmd0aCAl
ZCByZWNlaXZlZCBvbiAlcyB3aXRoIGNzdW1fZmxhZ3MgMHgleC5cbiIsCisJICAgICAgICBtLT5t
X3BrdGhkci5sZW4sCisJICAgICAgICBtLT5tX3BrdGhkci5yY3ZpZi0+aWZfeG5hbWUsCisJICAg
ICAgICBtLT5tX3BrdGhkci5jc3VtX2ZsYWdzKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJbWZsb3dpZCA9IG0tPm1fcGt0aGRy
LmZsb3dpZDsKKwltZmxvd3R5cGUgPSBNX0hBU0hUWVBFX0dFVChtKTsKKwlmaWJudW0gPSBNX0dF
VEZJQihtKTsKKyNlbmRpZgorCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZwYWNrZXRzKTsKKwlT
Q1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfaW5wYWNrZXRzKTsKKwkvKiBHZXQgSVAsIFND
VFAsIGFuZCBmaXJzdCBjaHVuayBoZWFkZXIgdG9nZXRoZXIgaW4gdGhlIGZpcnN0IG1idWYuICov
CisJb2Zmc2V0ID0gaXBobGVuICsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSArIHNpemVvZihzdHJ1
Y3Qgc2N0cF9jaHVua2hkcik7CisJaWYgKFNDVFBfQlVGX0xFTihtKSA8IG9mZnNldCkgeworCQlp
ZiAoKG0gPSBtX3B1bGx1cChtLCBvZmZzZXQpKSA9PSBOVUxMKSB7CisJCQlTQ1RQX1NUQVRfSU5D
UihzY3Rwc19oZHJvcHMpOworCQkJcmV0dXJuOworCQl9CisJfQorCWlwID0gbXRvZChtLCBzdHJ1
Y3QgaXAgKik7CisJc2ggPSAoc3RydWN0IHNjdHBoZHIgKikoKGNhZGRyX3QpaXAgKyBpcGhsZW4p
OworCWNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopKChjYWRkcl90KXNoICsgc2l6ZW9mKHN0
cnVjdCBzY3RwaGRyKSk7CisJb2Zmc2V0IC09IHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7
CisJbWVtc2V0KCZzcmMsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwlzcmMuc2lu
X2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJc3JjLnNpbl9sZW4gPSBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCXNyYy5zaW5fcG9ydCA9IHNoLT5z
cmNfcG9ydDsKKwlzcmMuc2luX2FkZHIgPSBpcC0+aXBfc3JjOworCW1lbXNldCgmZHN0LCAwLCBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJZHN0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOwor
I2lmZGVmIEhBVkVfU0lOX0xFTgorCWRzdC5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbik7CisjZW5kaWYKKwlkc3Quc2luX3BvcnQgPSBzaC0+ZGVzdF9wb3J0OworCWRzdC5zaW5f
YWRkciA9IGlwLT5pcF9kc3Q7CisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisJTlRPSFMoaXAtPmlwX2xlbik7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fbGlu
dXhfXykgfHwgKGRlZmluZWQoX1dJTjMyKSAmJiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQorCWlw
LT5pcF9sZW4gPSBudG9ocyhpcC0+aXBfbGVuKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKyNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfV0lOMzIpCisJbGVu
Z3RoID0gaXAtPmlwX2xlbjsKKyNlbHNlCisJbGVuZ3RoID0gaXAtPmlwX2xlbiArIGlwaGxlbjsK
KyNlbmRpZgorI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwlsZW5ndGggPSBudG9ocyhpcC0+
aXBfbGVuKTsKKyNlbGlmIGRlZmluZWQoX19BUFBMRV9fKQorCWxlbmd0aCA9IGlwLT5pcF9sZW4g
KyBpcGhsZW47CisjZWxzZQorCWxlbmd0aCA9IGlwLT5pcF9sZW47CisjZW5kaWYKKwkvKiBWYWxp
ZGF0ZSBtYnVmIGNoYWluIGxlbmd0aCB3aXRoIElQIHBheWxvYWQgbGVuZ3RoLiAqLworCWlmIChT
Q1RQX0hFQURFUl9MRU4obSkgIT0gbGVuZ3RoKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBV
VDEsCisJCSAgICAgICAgInNjdHBfaW5wdXQoKSBsZW5ndGg6JWQgcmVwb3J0ZWQgbGVuZ3RoOiVk
XG4iLCBsZW5ndGgsIFNDVFBfSEVBREVSX0xFTihtKSk7CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBz
X2hkcm9wcyk7CisJCWdvdG8gb3V0OworCX0KKwkvKiBTQ1RQIGRvZXMgbm90IGFsbG93IGJyb2Fk
Y2FzdHMgb3IgbXVsdGljYXN0cyAqLworCWlmIChJTl9NVUxUSUNBU1QobnRvaGwoZHN0LnNpbl9h
ZGRyLnNfYWRkcikpKSB7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoU0NUUF9JU19JVF9CUk9BRENB
U1QoZHN0LnNpbl9hZGRyLCBtKSkgeworCQlnb3RvIG91dDsKKwl9CisJZWNuX2JpdHMgPSBpcC0+
aXBfdG9zOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisJaWYgKG0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MgJiBDU1VNX1NDVFBfVkFMSUQpIHsKKwkJ
U0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmh3Y3JjKTsKKwkJY29tcHV0ZV9jcmMgPSAwOworCX0g
ZWxzZSB7CisjZWxzZQorCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbm9fY3N1bV9vbl9sb29w
YmFjaykgJiYKKwkgICAgKChzcmMuc2luX2FkZHIuc19hZGRyID09IGRzdC5zaW5fYWRkci5zX2Fk
ZHIpIHx8CisJICAgICAoU0NUUF9JU19JVF9MT09QQkFDSyhtKSkpKSB7CisJCVNDVFBfU1RBVF9J
TkNSKHNjdHBzX3JlY3Zod2NyYyk7CisJCWNvbXB1dGVfY3JjID0gMDsKKwl9IGVsc2UgeworI2Vu
ZGlmCisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3Zzd2NyYyk7CisJCWNvbXB1dGVfY3JjID0g
MTsKKwl9CisJc2N0cF9jb21tb25faW5wdXRfcHJvY2Vzc2luZygmbSwgaXBobGVuLCBvZmZzZXQs
IGxlbmd0aCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIg
Kikmc3JjLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAq
KSZkc3QsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaCwgY2gsCisJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb21wdXRlX2NyYywKKwkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVjbl9iaXRzLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1m
bG93aWQsIGZpYm51bSwKKyNlbmRpZgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnJm
X2lkLCBwb3J0KTsKKyBvdXQ6CisJaWYgKG0pIHsKKwkJc2N0cF9tX2ZyZWVtKG0pOworCX0KKwly
ZXR1cm47Cit9CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorI2lmIGRlZmluZWQoU0NUUF9NQ09SRV9JTlBVVCkgJiYgZGVmaW5lZChTTVApCitl
eHRlcm4gaW50ICpzY3RwX2NwdWFycnk7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK2ludAorc2N0cF9pbnB1dChz
dHJ1Y3QgbWJ1ZiAqKm1wLCBpbnQgKm9mZnAsIGludCBwcm90byBTQ1RQX1VOVVNFRCkKK3sKKwlz
dHJ1Y3QgbWJ1ZiAqbTsKKwlpbnQgb2ZmOworCisJbSA9ICptcDsKKwlvZmYgPSAqb2ZmcDsKKyNl
bHNlCit2b2lkCitzY3RwX2lucHV0KHN0cnVjdCBtYnVmICptLCBpbnQgb2ZmKQoreworI2VuZGlm
CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNp
ZiBkZWZpbmVkKFNDVFBfTUNPUkVfSU5QVVQpICYmIGRlZmluZWQoU01QKQorCWlmIChtcF9uY3B1
cyA+IDEpIHsKKwkJc3RydWN0IGlwICppcDsKKwkJc3RydWN0IHNjdHBoZHIgKnNoOworCQlpbnQg
b2Zmc2V0OworCQlpbnQgY3B1X3RvX3VzZTsKKwkJdWludDMyX3QgZmxvd2lkLCB0YWc7CisKKwkJ
aWYgKE1fSEFTSFRZUEVfR0VUKG0pICE9IE1fSEFTSFRZUEVfTk9ORSkgeworCQkJZmxvd2lkID0g
bS0+bV9wa3RoZHIuZmxvd2lkOworCQl9IGVsc2UgeworCQkJLyogTm8gZmxvdyBpZCBidWlsdCBi
eSBsb3dlciBsYXllcnMKKwkJCSAqIGZpeCBpdCBzbyB3ZSBjcmVhdGUgb25lLgorCQkJICovCisJ
CQlvZmZzZXQgPSBvZmYgKyBzaXplb2Yoc3RydWN0IHNjdHBoZHIpOworCQkJaWYgKFNDVFBfQlVG
X0xFTihtKSA8IG9mZnNldCkgeworCQkJCWlmICgobSA9IG1fcHVsbHVwKG0sIG9mZnNldCkpID09
IE5VTEwpIHsKKwkJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfaGRyb3BzKTsKKwkJCQkJcmV0dXJu
IChJUFBST1RPX0RPTkUpOworCQkJCX0KKwkJCX0KKwkJCWlwID0gbXRvZChtLCBzdHJ1Y3QgaXAg
Kik7CisJCQlzaCA9IChzdHJ1Y3Qgc2N0cGhkciAqKSgoY2FkZHJfdClpcCArIG9mZik7CisJCQl0
YWcgPSBodG9ubChzaC0+dl90YWcpOworCQkJZmxvd2lkID0gdGFnIF4gbnRvaHMoc2gtPmRlc3Rf
cG9ydCkgXiBudG9ocyhzaC0+c3JjX3BvcnQpOworCQkJbS0+bV9wa3RoZHIuZmxvd2lkID0gZmxv
d2lkOworCQkJTV9IQVNIVFlQRV9TRVQobSwgTV9IQVNIVFlQRV9PUEFRVUVfSEFTSCk7CisJCX0K
KwkJY3B1X3RvX3VzZSA9IHNjdHBfY3B1YXJyeVtmbG93aWQgJSBtcF9uY3B1c107CisJCXNjdHBf
cXVldWVfdG9fbWNvcmUobSwgb2ZmLCBjcHVfdG9fdXNlKTsKKwkJcmV0dXJuIChJUFBST1RPX0RP
TkUpOworCX0KKyNlbmRpZgorI2VuZGlmCisJc2N0cF9pbnB1dF93aXRoX3BvcnQobSwgb2ZmLCAw
KTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CXJldHVybiAoSVBQUk9UT19ET05FKTsKKyNlbmRpZgorfQorI2VuZGlmCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2lucHV0LmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9pbnB1dC5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1Cmlu
ZGV4IDAwMDAwMDAwMDAwMC4uNDdhZTIxMjdiZTE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5wdXQuaApAQCAtMCwwICsxLDY2IEBACisvKi0K
KyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKiBDb3B5cmln
aHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVs
IFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUgbWV0OgorICoKKyAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogYikgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogYykgTmVp
dGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2luY2x1ZGUgPHN5cy9jZGVmcy5o
PgorX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfaW5wdXQuaCAzNjUw
NzEgMjAyMC0wOS0wMSAyMToxOToxNFogbWpnICQiKTsKKyNlbmRpZgorCisjaWZuZGVmIF9ORVRJ
TkVUX1NDVFBfSU5QVVRfSF8KKyNkZWZpbmUgX05FVElORVRfU0NUUF9JTlBVVF9IXworCisjaWYg
ZGVmaW5lZChfS0VSTkVMKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCit2b2lkCitzY3RwX2Nv
bW1vbl9pbnB1dF9wcm9jZXNzaW5nKHN0cnVjdCBtYnVmICoqLCBpbnQsIGludCwgaW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHNvY2th
ZGRyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwaGRyICosIHN0
cnVjdCBzY3RwX2NodW5raGRyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4
X3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QsCisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDhfdCwgdWludDMyX3QsIHVpbnQxNl90LAorI2VuZGlmCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90LCB1aW50MTZfdCk7CisKK3N0cnVjdCBzY3Rw
X3N0cmVhbV9yZXNldF9yZXF1ZXN0ICoKK3NjdHBfZmluZF9zdHJlYW1fcmVzZXQoc3RydWN0IHNj
dHBfdGNiICpzdGNiLCB1aW50MzJfdCBzZXEsCisgICAgc3RydWN0IHNjdHBfdG1pdF9jaHVuayAq
KmJjaGspOworCit2b2lkCitzY3RwX3Jlc2V0X2luX3N0cmVhbShzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsIHVpbnQzMl90IG51bWJlcl9lbnRyaWVzLCAKKyAgICAgICAgICAgICAgICAgICAgIHVpbnQx
Nl90ICpsaXN0KTsKKworaW50IHNjdHBfaXNfdGhlcmVfdW5zZW50X2RhdGEoc3RydWN0IHNjdHBf
dGNiICpzdGNiLCBpbnQgc29fbG9ja2VkKTsKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2xvY2tfdXNlcnNwYWNlLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9sb2NrX3VzZXJzcGFjZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMC4uMGFlZDM0NzcwYWE4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfbG9ja191c2Vyc3BhY2UuaApA
QCAtMCwwICsxLDI0NSBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMt
Q2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBi
eSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMp
IDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgQnJhZCBQZW5vZmYuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKgorICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3Rl
bXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7Cisj
ZW5kaWYKKworI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX0xPQ0tfRU1QVFlfSF8KKyNkZWZpbmUgX05F
VElORVRfU0NUUF9MT0NLX0VNUFRZX0hfCisKKy8qCisgKiBFbXB0eSBMb2NrIGRlY2xhcmF0aW9u
cyBmb3IgYWxsIG90aGVyIHBsYXRmb3Jtcy4gUHJlLXByb2Nlc3MgYXdheSB0bworICogbm90aGlu
Zy4KKyAqLworCisvKiBfX1VzZXJzcGFjZV9fIHB1dHRpbmcgbG9jayBtYWNyb3MgaW4gc2FtZSBv
cmRlciBhcyBzY3RwX2xvY2tfYnNkLmggLi4uKi8KKworI2RlZmluZSBTQ1RQX0lQSV9DT1VOVF9J
TklUKCkKKworI2RlZmluZSBTQ1RQX1NUQVRMT0dfSU5JVF9MT0NLKCkKKyNkZWZpbmUgU0NUUF9T
VEFUTE9HX0xPQ0soKQorI2RlZmluZSBTQ1RQX1NUQVRMT0dfVU5MT0NLKCkKKyNkZWZpbmUgU0NU
UF9TVEFUTE9HX0RFU1RST1koKQorCisjZGVmaW5lIFNDVFBfSU5QX0lORk9fTE9DS19ERVNUUk9Z
KCkKKworI2RlZmluZSBTQ1RQX0lOUF9JTkZPX0xPQ0tfSU5JVCgpCisjZGVmaW5lIFNDVFBfSU5Q
X0lORk9fUkxPQ0soKQorI2RlZmluZSBTQ1RQX0lOUF9JTkZPX1dMT0NLKCkKKyNkZWZpbmUgU0NU
UF9JTlBfSU5GT19UUllMT0NLKCkgMQorI2RlZmluZSBTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKQor
I2RlZmluZSBTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKQorCisjZGVmaW5lIFNDVFBfV1FfQUREUl9J
TklUKCkKKyNkZWZpbmUgU0NUUF9XUV9BRERSX0RFU1RST1koKQorI2RlZmluZSBTQ1RQX1dRX0FE
RFJfTE9DSygpCisjZGVmaW5lIFNDVFBfV1FfQUREUl9VTkxPQ0soKQorI2RlZmluZSBTQ1RQX1dR
X0FERFJfTE9DS19BU1NFUlQoKQorCisjZGVmaW5lIFNDVFBfSVBJX0FERFJfSU5JVCgpCisjZGVm
aW5lIFNDVFBfSVBJX0FERFJfREVTVFJPWSgpCisjZGVmaW5lIFNDVFBfSVBJX0FERFJfUkxPQ0so
KQorI2RlZmluZSBTQ1RQX0lQSV9BRERSX1dMT0NLKCkKKyNkZWZpbmUgU0NUUF9JUElfQUREUl9S
VU5MT0NLKCkKKyNkZWZpbmUgU0NUUF9JUElfQUREUl9XVU5MT0NLKCkKKyNkZWZpbmUgU0NUUF9J
UElfQUREUl9MT0NLX0FTU0VSVCgpCisjZGVmaW5lIFNDVFBfSVBJX0FERFJfV0xPQ0tfQVNTRVJU
KCkKKworI2RlZmluZSBTQ1RQX0lQSV9JVEVSQVRPUl9XUV9JTklUKCkKKyNkZWZpbmUgU0NUUF9J
UElfSVRFUkFUT1JfV1FfREVTVFJPWSgpCisjZGVmaW5lIFNDVFBfSVBJX0lURVJBVE9SX1dRX0xP
Q0soKQorI2RlZmluZSBTQ1RQX0lQSV9JVEVSQVRPUl9XUV9VTkxPQ0soKQorCisjZGVmaW5lIFND
VFBfSVBfUEtUTE9HX0lOSVQoKQorI2RlZmluZSBTQ1RQX0lQX1BLVExPR19MT0NLKCkKKyNkZWZp
bmUgU0NUUF9JUF9QS1RMT0dfVU5MT0NLKCkKKyNkZWZpbmUgU0NUUF9JUF9QS1RMT0dfREVTVFJP
WSgpCisKKyNkZWZpbmUgU0NUUF9JTlBfUkVBRF9JTklUKF9pbnApCisjZGVmaW5lIFNDVFBfSU5Q
X1JFQURfREVTVFJPWShfaW5wKQorI2RlZmluZSBTQ1RQX0lOUF9SRUFEX0xPQ0soX2lucCkKKyNk
ZWZpbmUgU0NUUF9JTlBfUkVBRF9VTkxPQ0soX2lucCkKKworI2RlZmluZSBTQ1RQX0lOUF9MT0NL
X0lOSVQoX2lucCkKKyNkZWZpbmUgU0NUUF9BU09DX0NSRUFURV9MT0NLX0lOSVQoX2lucCkKKyNk
ZWZpbmUgU0NUUF9JTlBfTE9DS19ERVNUUk9ZKF9pbnApCisjZGVmaW5lIFNDVFBfQVNPQ19DUkVB
VEVfTE9DS19ERVNUUk9ZKF9pbnApCisKKyNkZWZpbmUgU0NUUF9JTlBfUkxPQ0soX2lucCkKKyNk
ZWZpbmUgU0NUUF9JTlBfV0xPQ0soX2lucCkKKyNkZWZpbmUgU0NUUF9JTlBfUkxPQ0tfQVNTRVJU
KF9pbnApCisjZGVmaW5lIFNDVFBfSU5QX1dMT0NLX0FTU0VSVChfaW5wKQorCisjZGVmaW5lIFND
VFBfSU5QX0xPQ0tfQ09OVEVOREVEKF9pbnApICgwKSAvKiBEb24ndCBrbm93IGlmIHRoaXMgaXMg
cG9zc2libGUgKi8KKworI2RlZmluZSBTQ1RQX0lOUF9SRUFEX0NPTlRFTkRFRChfaW5wKSAoMCkg
LyogRG9uJ3Qga25vdyBpZiB0aGlzIGlzIHBvc3NpYmxlICovCisKKyNkZWZpbmUgU0NUUF9BU09D
X0NSRUFURV9MT0NLX0NPTlRFTkRFRChfaW5wKSAoMCkgLyogRG9uJ3Qga25vdyBpZiB0aGlzIGlz
IHBvc3NpYmxlICovCisKKworI2RlZmluZSBTQ1RQX1RDQl9TRU5EX0xPQ0tfSU5JVChfdGNiKQor
I2RlZmluZSBTQ1RQX1RDQl9TRU5EX0xPQ0tfREVTVFJPWShfdGNiKQorI2RlZmluZSBTQ1RQX1RD
Ql9TRU5EX0xPQ0soX3RjYikKKyNkZWZpbmUgU0NUUF9UQ0JfU0VORF9VTkxPQ0soX3RjYikKKwor
I2RlZmluZSBTQ1RQX0lOUF9JTkNSX1JFRihfaW5wKQorI2RlZmluZSBTQ1RQX0lOUF9ERUNSX1JF
RihfaW5wKQorCisjZGVmaW5lIFNDVFBfQVNPQ19DUkVBVEVfTE9DSyhfaW5wKQorCisjZGVmaW5l
IFNDVFBfSU5QX1JVTkxPQ0soX2lucCkKKyNkZWZpbmUgU0NUUF9JTlBfV1VOTE9DSyhfaW5wKQor
I2RlZmluZSBTQ1RQX0FTT0NfQ1JFQVRFX1VOTE9DSyhfaW5wKQorCisKKyNkZWZpbmUgU0NUUF9U
Q0JfTE9DS19JTklUKF90Y2IpCisjZGVmaW5lIFNDVFBfVENCX0xPQ0tfREVTVFJPWShfdGNiKQor
I2RlZmluZSBTQ1RQX1RDQl9MT0NLKF90Y2IpCisjZGVmaW5lIFNDVFBfVENCX1RSWUxPQ0soX3Rj
YikgMQorI2RlZmluZSBTQ1RQX1RDQl9VTkxPQ0soX3RjYikKKyNkZWZpbmUgU0NUUF9UQ0JfVU5M
T0NLX0lGT1dORUQoX3RjYikKKyNkZWZpbmUgU0NUUF9UQ0JfTE9DS19BU1NFUlQoX3RjYikKKwor
CisKKyNkZWZpbmUgU0NUUF9JVEVSQVRPUl9MT0NLX0lOSVQoKQorI2RlZmluZSBTQ1RQX0lURVJB
VE9SX0xPQ0soKQorI2RlZmluZSBTQ1RQX0lURVJBVE9SX1VOTE9DSygpCisjZGVmaW5lIFNDVFBf
SVRFUkFUT1JfTE9DS19ERVNUUk9ZKCkKKworCisKKyNkZWZpbmUgU0NUUF9JTkNSX0VQX0NPVU5U
KCkgXAorICAgICAgICAgICAgICAgIGRvIHsgXAorCQkgICAgICAgc2N0cHBjYmluZm8uaXBpX2Nv
dW50X2VwKys7IFwKKwkgICAgICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0NUUF9ERUNSX0VQ
X0NPVU5UKCkgXAorICAgICAgICAgICAgICAgIGRvIHsgXAorCQkgICAgICAgc2N0cHBjYmluZm8u
aXBpX2NvdW50X2VwLS07IFwKKwkgICAgICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0NUUF9J
TkNSX0FTT0NfQ09VTlQoKSBcCisgICAgICAgICAgICAgICAgZG8geyBcCisJICAgICAgICAgICAg
ICAgc2N0cHBjYmluZm8uaXBpX2NvdW50X2Fzb2MrKzsgXAorCSAgICAgICAgfSB3aGlsZSAoMCkK
KworI2RlZmluZSBTQ1RQX0RFQ1JfQVNPQ19DT1VOVCgpIFwKKyAgICAgICAgICAgICAgICBkbyB7
IFwKKwkgICAgICAgICAgICAgICBzY3RwcGNiaW5mby5pcGlfY291bnRfYXNvYy0tOyBcCisJICAg
ICAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNDVFBfSU5DUl9MQUREUl9DT1VOVCgpIFwKKyAg
ICAgICAgICAgICAgICBkbyB7IFwKKwkgICAgICAgICAgICAgICBzY3RwcGNiaW5mby5pcGlfY291
bnRfbGFkZHIrKzsgXAorCSAgICAgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBTQ1RQX0RFQ1Jf
TEFERFJfQ09VTlQoKSBcCisgICAgICAgICAgICAgICAgZG8geyBcCisJICAgICAgICAgICAgICAg
c2N0cHBjYmluZm8uaXBpX2NvdW50X2xhZGRyLS07IFwKKwkgICAgICAgIH0gd2hpbGUgKDApCisK
KyNkZWZpbmUgU0NUUF9JTkNSX1JBRERSX0NPVU5UKCkgXAorICAgICAgICAgICAgICAgIGRvIHsg
XAorIAkgICAgICAgICAgICAgICBzY3RwcGNiaW5mby5pcGlfY291bnRfcmFkZHIrKzsgXAorCSAg
ICAgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBTQ1RQX0RFQ1JfUkFERFJfQ09VTlQoKSBcCisg
ICAgICAgICAgICAgICAgZG8geyBcCisgCSAgICAgICAgICAgICAgIHNjdHBwY2JpbmZvLmlwaV9j
b3VudF9yYWRkci0tOyBcCisJICAgICAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNDVFBfSU5D
Ul9DSEtfQ09VTlQoKSBcCisgICAgICAgICAgICAgICAgZG8geyBcCisgIAkgICAgICAgICAgICAg
ICBzY3RwcGNiaW5mby5pcGlfY291bnRfY2h1bmsrKzsgXAorCSAgICAgICAgfSB3aGlsZSAoMCkK
KworI2RlZmluZSBTQ1RQX0RFQ1JfQ0hLX0NPVU5UKCkgXAorICAgICAgICAgICAgICAgIGRvIHsg
XAorICAJICAgICAgICAgICAgICAgc2N0cHBjYmluZm8uaXBpX2NvdW50X2NodW5rLS07IFwKKwkg
ICAgICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0NUUF9JTkNSX1JFQURRX0NPVU5UKCkgXAor
ICAgICAgICAgICAgICAgIGRvIHsgXAorCQkgICAgICAgc2N0cHBjYmluZm8uaXBpX2NvdW50X3Jl
YWRxKys7IFwKKwkgICAgICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0NUUF9ERUNSX1JFQURR
X0NPVU5UKCkgXAorICAgICAgICAgICAgICAgIGRvIHsgXAorCQkgICAgICAgc2N0cHBjYmluZm8u
aXBpX2NvdW50X3JlYWRxLS07IFwKKwkgICAgICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0NU
UF9JTkNSX1NUUk1PUV9DT1VOVCgpIFwKKyAgICAgICAgICAgICAgICBkbyB7IFwKKwkJICAgICAg
IHNjdHBwY2JpbmZvLmlwaV9jb3VudF9zdHJtb3ErKzsgXAorCSAgICAgICAgfSB3aGlsZSAoMCkK
KworI2RlZmluZSBTQ1RQX0RFQ1JfU1RSTU9RX0NPVU5UKCkgXAorICAgICAgICAgICAgICAgIGRv
IHsgXAorCQkgICAgICAgc2N0cHBjYmluZm8uaXBpX2NvdW50X3N0cm1vcS0tOyBcCisJICAgICAg
ICB9IHdoaWxlICgwKQorCisKKy8qIHRoZXNlIHdlcmUgaW4gc2N0cF9sb2NrX2VtcHR5LmggYnV0
IGFyZW4ndCBpbiBzY3RwX2xvY2tfYnNkLmggLi4uICovCisjaWYgMAorI2RlZmluZSBTQ1RQX0lQ
SV9BRERSX0xPQ0soKQorI2RlZmluZSBTQ1RQX0lQSV9BRERSX1VOTE9DSygpCisjZW5kaWYKKwor
CisvKiBUaGVzZSB3ZXJlIGluIHNjdHBfbG9ja19lbXB0eS5oIGJlY2F1c2UgdGhleSB3ZXJlIGNv
bW1lbnRlZCBvdXQgd2l0aGluCisgKiAgd2l0aGluIHVzZXJfaW5jbHVkZS91c2VyX3NvY2tldHZh
ci5oIC4gIElmIHRoZXkgYXJlIE5PVCBjb21tZW50ZWQgb3V0CisgKiAgaW4gdXNlcl9zb2NrZXR2
YXIuaCAoYmVjYXVzZSB0aGF0IHNlZW1zIHRoZSBtb3JlIG5hdHVyYWwgcGxhY2UgZm9yIHRoZW0K
KyAqICB0byBsaXZlKSwgdGhlbiBjaGFuZ2UgdGhpcyAiaWYiIHRvIDAuICBLZWVwIHRoZSAiaWYi
IGFzIDEgaWYgdGhlc2UgQVJFCisgKiAgaW5kZWVkIGNvbW1lbnRlZCBvdXQgaW4gdXNlcl9zb2Nr
ZXR2YXIuaCAuCisgKgorICogVGhpcyBtb2R1bGFyaXR5IGlzIGtlcHQgc28gdGhpcyBmaWxlIGNh
biBlYXNpbHkgYmUgY2hvc2VuIGFzIGFuIGFsdGVybmF0aXZlCisgKiAgdG8gU0NUUF9QUk9DRVNT
X0xFVkVMX0xPQ0tTLiAgSWYgb25lIGRlZmluZXMgU0NUUF9QUk9DRVNTX0xFVkVMX0xPQ0tTIGlu
CisgKiAgdXNlcl9pbmNsdWRlL29wdF9zY3RwLmgsIHRoZW4gdGhlIGZpbGUgc2N0cF9wcm9jZXNz
X2xvY2suaCAod2hpY2ggd2UgZGlkbid0CisgKiAgaW1wbGVtZW50KSBpcyB1c2VkLCBhbmQgdGhh
dCBkZWNsYXJlcyB0aGVzZSBsb2NrcyBhbHJlYWR5IChzbyB1c2luZworICogIFNDVFBfUFJPQ0VT
U19MRVZFTF9MT0NLUyAqcmVxdWlyZXMqIHRoYXQgdGhlc2UgZGVmaW50aW9ucyBiZSBjb21tZW50
ZWQgb3V0CisgKiAgaW4gdXNlcl9zb2NrZXR2YXIuaCkuCisgKi8KKyNpZiAxCisjZGVmaW5lIFNP
Q0tfTE9DSyhfc28pCisjZGVmaW5lIFNPQ0tfVU5MT0NLKF9zbykKKyNkZWZpbmUgU09DS0JVRl9M
T0NLKF9zb19idWYpCisjZGVmaW5lIFNPQ0tCVUZfVU5MT0NLKF9zb19idWYpCisjZGVmaW5lIFNP
Q0tCVUZfTE9DS19BU1NFUlQoX3NvX2J1ZikKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX29zLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3Rw
bGliL25ldGluZXQvc2N0cF9vcy5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAw
MDAwMC4uMGUwM2NlOWU1OWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxp
Yi9uZXRpbmV0L3NjdHBfb3MuaApAQCAtMCwwICsxLDg5IEBACisvKi0KKyAqIFNQRFgtTGljZW5z
ZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAw
NywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Ogor
ICoKKyAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogYikgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogYykgTmVpdGhlciB0aGUgbmFtZSBv
ZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRG
cmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfb3MuaCAzNjUwNzEgMjAyMC0wOS0wMSAyMTox
OToxNFogbWpnICQiKTsKKyNlbmRpZgorCisjaWZuZGVmIF9ORVRJTkVUX1NDVFBfT1NfSF8KKyNk
ZWZpbmUgX05FVElORVRfU0NUUF9PU19IXworCisvKgorICogR2VuZXJhbCBrZXJuZWwgbWVtb3J5
IGFsbG9jYXRpb246CisgKiAgU0NUUF9NQUxMT0MoZWxlbWVudCwgdHlwZSwgc2l6ZSwgbmFtZSkK
KyAqICBTQ1RQX0ZSRUUoZWxlbWVudCkKKyAqIEtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbiBmb3Ig
InNvbmFtZSItIG1lbW9yeSBtdXN0IGJlIHplcm9lZC4KKyAqICBTQ1RQX01BTExPQ19TT05BTUUo
bmFtZSwgdHlwZSwgc2l6ZSkKKyAqICBTQ1RQX0ZSRUVfU09OQU1FKG5hbWUpCisgKi8KKworLyoK
KyAqIFpvbmUocG9vbCkgYWxsb2NhdGlvbiByb3V0aW5lczogTVVTVCBiZSBkZWZpbmVkIGZvciBl
YWNoIE9TLgorICogIHpvbmUgPSB6b25lL3Bvb2wgcG9pbnRlci4KKyAqICBuYW1lID0gc3RyaW5n
IG5hbWUgb2YgdGhlIHpvbmUvcG9vbC4KKyAqICBzaXplID0gc2l6ZSBvZiBlYWNoIHpvbmUvcG9v
bCBlbGVtZW50LgorICogIG51bWJlciA9IG51bWJlciBvZiBlbGVtZW50cyBpbiB6b25lL3Bvb2wu
CisgKiAgdHlwZSA9IHN0cnVjdHVyZSB0eXBlIHRvIGFsbG9jYXRlCisgKgorICogc2N0cF96b25l
X3QKKyAqIFNDVFBfWk9ORV9JTklUKHpvbmUsIG5hbWUsIHNpemUsIG51bWJlcikKKyAqIFNDVFBf
Wk9ORV9HRVQoem9uZSwgdHlwZSkKKyAqIFNDVFBfWk9ORV9GUkVFKHpvbmUsIGVsZW1lbnQpCisg
KiBTQ1RQX1pPTkVfREVTVFJPWSh6b25lKQorICovCisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vc19i
c2QuaD4KKyNlbHNlCisjZGVmaW5lIE1PRFVMRV9HTE9CQUwoX0IpIChfQikKKyNlbmRpZgorI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3NfdXNlcnNw
YWNlLmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3NfbWFjb3N4Lmg+CisjZW5kaWYKKyNp
ZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfb3Nfd2luZG93cy5oPgorI2VuZGlmCisKKy8qIEFsbCBvcydzIG11c3QgaW1w
bGVtZW50IHRoaXMgYWRkcmVzcyBnYXRoZXJlci4gSWYKKyAqIG5vIFZSRidzIGV4aXN0LCB0aGVu
IHZyZiAwIGlzIHRoZSBvbmx5IG9uZSBhbmQgYWxsCisgKiBhZGRyZXNzZXMgYW5kIGlmbidzIGxp
dmUgaGVyZS4KKyAqLworI2RlZmluZSBTQ1RQX0RFRkFVTFRfVlJGIDAKK3ZvaWQgc2N0cF9pbml0
X3ZyZl9saXN0KGludCB2cmZpZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNy
c2N0cGxpYi9uZXRpbmV0L3NjdHBfb3NfdXNlcnNwYWNlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGli
L25ldGluZXQvc2N0cF9vc191c2Vyc3BhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAw
MDAwMDAwMDAwMDAuLjQ2YjYxODExMGMzNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Vz
cnNjdHBsaWIvbmV0aW5ldC9zY3RwX29zX3VzZXJzcGFjZS5oCkBAIC0wLDAgKzEsMTE0NCBAQAor
LyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgorICogQ29w
eXJpZ2h0IChjKSAyMDA2LTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDExLCBieSBSYW5kYWxsIFN0ZXdhcnQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMSwgYnkgTWlj
aGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgt
MjAxMSwgYnkgQnJhZCBQZW5vZmYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAg
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KgorICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBfX3NjdHBfb3NfdXNlcnNwYWNlX2hfXworI2RlZmluZSBfX3NjdHBfb3NfdXNlcnNwYWNlX2hf
XworLyoKKyAqIFVzZXJzcGFjZSBpbmNsdWRlcworICogQWxsIHRoZSBvcHRfeHh4LmggZmlsZXMg
YXJlIHBsYWNlZCBpbiB0aGUga2VybmVsIGJ1aWxkIGRpcmVjdG9yeS4KKyAqIFdlIHdpbGwgcGxh
Y2UgdGhlbSBpbiB1c2Vyc3BhY2Ugc3RhY2sgYnVpbGQgZGlyZWN0b3J5LgorICovCisKKyNpbmNs
dWRlIDxlcnJuby5oPgorCisjaWYgZGVmaW5lZChfV0lOMzIpCisjaW5jbHVkZSA8d2luc29jazIu
aD4KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2luY2x1ZGUgPGlwaGxwYXBpLmg+CisjaW5jbHVk
ZSA8bXN3c29jay5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlICJ1c2VyX2Vudmly
b25tZW50LmgiCit0eXBlZGVmIENSSVRJQ0FMX1NFQ1RJT04gdXNlcmxhbmRfbXV0ZXhfdDsKKyNp
ZiBXSU5WRVIgPCAweDA2MDAKK2VudW0geworCUNfU0lHTkFMID0gMCwKKwlDX0JST0FEQ0FTVCA9
IDEsCisJQ19NQVhfRVZFTlRTID0gMgorfTsKK3R5cGVkZWYgc3RydWN0Cit7CisJdV9pbnQgd2Fp
dGVyc19jb3VudDsKKwlDUklUSUNBTF9TRUNUSU9OIHdhaXRlcnNfY291bnRfbG9jazsKKwlIQU5E
TEUgZXZlbnRzX1tDX01BWF9FVkVOVFNdOworfSB1c2VybGFuZF9jb25kX3Q7Cit2b2lkIEluaXRp
YWxpemVYUENvbmRpdGlvblZhcmlhYmxlKHVzZXJsYW5kX2NvbmRfdCAqKTsKK3ZvaWQgRGVsZXRl
WFBDb25kaXRpb25WYXJpYWJsZSh1c2VybGFuZF9jb25kX3QgKik7CitpbnQgU2xlZXBYUENvbmRp
dGlvblZhcmlhYmxlKHVzZXJsYW5kX2NvbmRfdCAqLCB1c2VybGFuZF9tdXRleF90ICopOwordm9p
ZCBXYWtlQWxsWFBDb25kaXRpb25WYXJpYWJsZSh1c2VybGFuZF9jb25kX3QgKik7CisjZGVmaW5l
IEluaXRpYWxpemVDb25kaXRpb25WYXJpYWJsZShjb25kKSBJbml0aWFsaXplWFBDb25kaXRpb25W
YXJpYWJsZShjb25kKQorI2RlZmluZSBEZWxldGVDb25kaXRpb25WYXJpYWJsZShjb25kKSBEZWxl
dGVYUENvbmRpdGlvblZhcmlhYmxlKGNvbmQpCisjZGVmaW5lIFNsZWVwQ29uZGl0aW9uVmFyaWFi
bGVDUyhjb25kLCBtdHgsIHRpbWUpIFNsZWVwWFBDb25kaXRpb25WYXJpYWJsZShjb25kLCBtdHgp
CisjZGVmaW5lIFdha2VBbGxDb25kaXRpb25WYXJpYWJsZShjb25kKSBXYWtlQWxsWFBDb25kaXRp
b25WYXJpYWJsZShjb25kKQorI2Vsc2UKKyNkZWZpbmUgRGVsZXRlQ29uZGl0aW9uVmFyaWFibGUo
Y29uZCkKK3R5cGVkZWYgQ09ORElUSU9OX1ZBUklBQkxFIHVzZXJsYW5kX2NvbmRfdDsKKyNlbmRp
ZgordHlwZWRlZiBIQU5ETEUgdXNlcmxhbmRfdGhyZWFkX3Q7CisjZGVmaW5lIEFERFJFU1NfRkFN
SUxZCXVuc2lnbmVkIF9faW50OAorI2RlZmluZSBJUFZFUlNJT04gIDQKKyNkZWZpbmUgTUFYVFRM
ICAgICAyNTUKKy8qIFZTMjAxMCBjb21lcyB3aXRoIHN0ZGludC5oICovCisjaWYgIWRlZmluZWQo
X01TQ19WRVIpIHx8IChfTVNDX1ZFUiA+PSAxNjAwKQorI2luY2x1ZGUgPHN0ZGludC5oPgorI2Vs
c2UKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCB1aW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQg
X19pbnQzMiB1aW50MzJfdDsKK3R5cGVkZWYgX19pbnQzMiAgICAgICAgICBpbnQzMl90OwordHlw
ZWRlZiB1bnNpZ25lZCBfX2ludDE2IHVpbnQxNl90OwordHlwZWRlZiBfX2ludDE2ICAgICAgICAg
IGludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIF9faW50OCAgdWludDhfdDsKK3R5cGVkZWYgX19p
bnQ4ICAgICAgICAgICBpbnQ4X3Q7CisjZW5kaWYKKyNpZm5kZWYgX1NJWkVfVF9ERUZJTkVECisj
dHlwZWRlZiBfX2ludDMyICAgICAgICAgc2l6ZV90OworI2VuZGlmCit0eXBlZGVmIHVuc2lnbmVk
IF9faW50MzIgdV9pbnQ7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAgdV9jaGFyOwordHlwZWRl
ZiB1bnNpZ25lZCBfX2ludDE2IHVfc2hvcnQ7Cit0eXBlZGVmIHVuc2lnbmVkIF9faW50OCAgc2Ff
ZmFtaWx5X3Q7CisjaWZuZGVmIF9TU0laRV9UX0RFRklORUQKK3R5cGVkZWYgX19pbnQ2NCAgICAg
ICAgICBzc2l6ZV90OworI2VuZGlmCisjaWYgIWRlZmluZWQoX19NSU5HVzMyX18pCisjZGVmaW5l
IF9fZnVuY19fCV9fRlVOQ1RJT05fXworI2VuZGlmCisjaWZuZGVmIEVXT1VMREJMT0NLCisjZGVm
aW5lIEVXT1VMREJMT0NLICAgICAgICAgICAgIFdTQUVXT1VMREJMT0NLCisjZW5kaWYKKyNpZm5k
ZWYgRUlOUFJPR1JFU1MKKyNkZWZpbmUgRUlOUFJPR1JFU1MgICAgICAgICAgICAgV1NBRUlOUFJP
R1JFU1MKKyNlbmRpZgorI2lmbmRlZiBFQUxSRUFEWQorI2RlZmluZSBFQUxSRUFEWSAgICAgICAg
ICAgICAgICBXU0FFQUxSRUFEWQorI2VuZGlmCisjaWZuZGVmIEVOT1RTT0NLCisjZGVmaW5lIEVO
T1RTT0NLICAgICAgICAgICAgICAgIFdTQUVOT1RTT0NLCisjZW5kaWYKKyNpZm5kZWYgRURFU1RB
RERSUkVRCisjZGVmaW5lIEVERVNUQUREUlJFUSAgICAgICAgICAgIFdTQUVERVNUQUREUlJFUQor
I2VuZGlmCisjaWZuZGVmIEVNU0dTSVpFCisjZGVmaW5lIEVNU0dTSVpFICAgICAgICAgICAgICAg
IFdTQUVNU0dTSVpFCisjZW5kaWYKKyNpZm5kZWYgRVBST1RPVFlQRQorI2RlZmluZSBFUFJPVE9U
WVBFICAgICAgICAgICAgICBXU0FFUFJPVE9UWVBFCisjZW5kaWYKKyNpZm5kZWYgRU5PUFJPVE9P
UFQKKyNkZWZpbmUgRU5PUFJPVE9PUFQgICAgICAgICAgICAgV1NBRU5PUFJPVE9PUFQKKyNlbmRp
ZgorI2lmbmRlZiBFUFJPVE9OT1NVUFBPUlQKKyNkZWZpbmUgRVBST1RPTk9TVVBQT1JUICAgICAg
ICAgV1NBRVBST1RPTk9TVVBQT1JUCisjZW5kaWYKKyNpZm5kZWYgRVNPQ0tUTk9TVVBQT1JUCisj
ZGVmaW5lIEVTT0NLVE5PU1VQUE9SVCAgICAgICAgIFdTQUVTT0NLVE5PU1VQUE9SVAorI2VuZGlm
CisjaWZuZGVmIEVPUE5PVFNVUFAKKyNkZWZpbmUgRU9QTk9UU1VQUCAgICAgICAgICAgICAgV1NB
RU9QTk9UU1VQUAorI2VuZGlmCisjaWZuZGVmIEVOT1RTVVAKKyNkZWZpbmUgRU5PVFNVUCAgICAg
ICAgICAgICAgICAgV1NBRU9QTk9UU1VQUAorI2VuZGlmCisjaWZuZGVmIEVQRk5PU1VQUE9SVAor
I2RlZmluZSBFUEZOT1NVUFBPUlQgICAgICAgICAgICBXU0FFUEZOT1NVUFBPUlQKKyNlbmRpZgor
I2lmbmRlZiBFQUZOT1NVUFBPUlQKKyNkZWZpbmUgRUFGTk9TVVBQT1JUICAgICAgICAgICAgV1NB
RUFGTk9TVVBQT1JUCisjZW5kaWYKKyNpZm5kZWYgRUFERFJJTlVTRQorI2RlZmluZSBFQUREUklO
VVNFICAgICAgICAgICAgICBXU0FFQUREUklOVVNFCisjZW5kaWYKKyNpZm5kZWYgRUFERFJOT1RB
VkFJTAorI2RlZmluZSBFQUREUk5PVEFWQUlMICAgICAgICAgICBXU0FFQUREUk5PVEFWQUlMCisj
ZW5kaWYKKyNpZm5kZWYgRU5FVERPV04KKyNkZWZpbmUgRU5FVERPV04gICAgICAgICAgICAgICAg
V1NBRU5FVERPV04KKyNlbmRpZgorI2lmbmRlZiBFTkVUVU5SRUFDSAorI2RlZmluZSBFTkVUVU5S
RUFDSCAgICAgICAgICAgICBXU0FFTkVUVU5SRUFDSAorI2VuZGlmCisjaWZuZGVmIEVORVRSRVNF
VAorI2RlZmluZSBFTkVUUkVTRVQgICAgICAgICAgICAgICBXU0FFTkVUUkVTRVQKKyNlbmRpZgor
I2lmbmRlZiBFQ09OTkFCT1JURUQKKyNkZWZpbmUgRUNPTk5BQk9SVEVEICAgICAgICAgICAgV1NB
RUNPTk5BQk9SVEVECisjZW5kaWYKKyNpZm5kZWYgRUNPTk5SRVNFVAorI2RlZmluZSBFQ09OTlJF
U0VUICAgICAgICAgICAgICBXU0FFQ09OTlJFU0VUCisjZW5kaWYKKyNpZm5kZWYgRU5PQlVGUwor
I2RlZmluZSBFTk9CVUZTICAgICAgICAgICAgICAgICBXU0FFTk9CVUZTCisjZW5kaWYKKyNpZm5k
ZWYgRUlTQ09OTgorI2RlZmluZSBFSVNDT05OICAgICAgICAgICAgICAgICBXU0FFSVNDT05OCisj
ZW5kaWYKKyNpZm5kZWYgRU5PVENPTk4KKyNkZWZpbmUgRU5PVENPTk4gICAgICAgICAgICAgICAg
V1NBRU5PVENPTk4KKyNlbmRpZgorI2lmbmRlZiBFU0hVVERPV04KKyNkZWZpbmUgRVNIVVRET1dO
ICAgICAgICAgICAgICAgV1NBRVNIVVRET1dOCisjZW5kaWYKKyNpZm5kZWYgRVRPT01BTllSRUZT
CisjZGVmaW5lIEVUT09NQU5ZUkVGUyAgICAgICAgICAgIFdTQUVUT09NQU5ZUkVGUworI2VuZGlm
CisjaWZuZGVmIEVUSU1FRE9VVAorI2RlZmluZSBFVElNRURPVVQgICAgICAgICAgICAgICBXU0FF
VElNRURPVVQKKyNlbmRpZgorI2lmbmRlZiBFQ09OTlJFRlVTRUQKKyNkZWZpbmUgRUNPTk5SRUZV
U0VEICAgICAgICAgICAgV1NBRUNPTk5SRUZVU0VECisjZW5kaWYKKyNpZm5kZWYgRUxPT1AKKyNk
ZWZpbmUgRUxPT1AgICAgICAgICAgICAgICAgICAgV1NBRUxPT1AKKyNlbmRpZgorI2lmbmRlZiBF
SE9TVERPV04KKyNkZWZpbmUgRUhPU1RET1dOICAgICAgICAgICAgICAgV1NBRUhPU1RET1dOCisj
ZW5kaWYKKyNpZm5kZWYgRUhPU1RVTlJFQUNICisjZGVmaW5lIEVIT1NUVU5SRUFDSCAgICAgICAg
ICAgIFdTQUVIT1NUVU5SRUFDSAorI2VuZGlmCisjaWZuZGVmIEVQUk9DTElNCisjZGVmaW5lIEVQ
Uk9DTElNICAgICAgICAgICAgICAgIFdTQUVQUk9DTElNCisjZW5kaWYKKyNpZm5kZWYgRVVTRVJT
CisjZGVmaW5lIEVVU0VSUyAgICAgICAgICAgICAgICAgIFdTQUVVU0VSUworI2VuZGlmCisjaWZu
ZGVmIEVEUVVPVAorI2RlZmluZSBFRFFVT1QgICAgICAgICAgICAgICAgICBXU0FFRFFVT1QKKyNl
bmRpZgorI2lmbmRlZiBFU1RBTEUKKyNkZWZpbmUgRVNUQUxFICAgICAgICAgICAgICAgICAgV1NB
RVNUQUxFCisjZW5kaWYKKyNpZm5kZWYgRVJFTU9URQorI2RlZmluZSBFUkVNT1RFICAgICAgICAg
ICAgICAgICBXU0FFUkVNT1RFCisjZW5kaWYKKwordHlwZWRlZiBjaGFyKiBjYWRkcl90OworCisj
ZGVmaW5lIGJ6ZXJvKGJ1ZiwgbGVuKSBtZW1zZXQoYnVmLCAwLCBsZW4pCisjZGVmaW5lIGJjb3B5
KHNyY0tleSwgZHN0S2V5LCBsZW4pIG1lbWNweShkc3RLZXksIHNyY0tleSwgbGVuKQorCisjaWYg
ZGVmaW5lZChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSIDwgMTkwMCkgJiYgIWRlZmluZWQoX19NSU5H
VzMyX18pCisjZGVmaW5lIFNDVFBfU05QUklOVEYoZGF0YSwgc2l6ZSwgZm9ybWF0LCAuLi4pIAkJ
CQkJXAorCWlmIChfc25wcmludGZfcyhkYXRhLCBzaXplLCBfVFJVTkNBVEUsIGZvcm1hdCwgX19W
QV9BUkdTX18pIDwgMCkgewlcCisJCWRhdGFbMF0gPSAnXDAnOwkJCQkJCQlcCisJfQorI2Vsc2UK
KyNkZWZpbmUgU0NUUF9TTlBSSU5URihkYXRhLCAuLi4pCQkJCQkJXAorCWlmIChzbnByaW50Zihk
YXRhLCBfX1ZBX0FSR1NfXykgPCAwICkgewkJCQkJXAorCQlkYXRhWzBdID0gJ1wwJzsJCQkJCQkJ
XAorCX0KKyNlbmRpZgorCisjZGVmaW5lIGlubGluZSBfX2lubGluZQorI2RlZmluZSBfX2lubGlu
ZV9fIF9faW5saW5lCisjZGVmaW5lCU1TR19FT1IJCTB4OAkJLyogZGF0YSBjb21wbGV0ZXMgcmVj
b3JkICovCisjZGVmaW5lCU1TR19ET05UV0FJVAkweDgwCQkvKiB0aGlzIG1lc3NhZ2Ugc2hvdWxk
IGJlIG5vbmJsb2NraW5nICovCisKKyNpZmRlZiBDTVNHX0RBVEEKKyN1bmRlZiBDTVNHX0RBVEEK
KyNlbmRpZgorLyoKKyAqIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgc2hvdWxkIGFwcGx5IGlm
ZiBXSU5WRVIgPCAweDA2MDAKKyAqIGJ1dCB0aGF0IGNoZWNrIGRvZXNuJ3Qgd29yayBpbiBhbGwg
Y2FzZXMuIFNvIGJlIG1vcmUgcGVkYW50aWMuLi4KKyAqLworI2RlZmluZSBDTVNHX0RBVEEoeCkg
V1NBX0NNU0dfREFUQSh4KQorI2RlZmluZSBDTVNHX0FMSUdOKHgpIFdTQV9DTVNHREFUQV9BTElH
Tih4KQorI2lmbmRlZiBDTVNHX0ZJUlNUSERSCisjZGVmaW5lIENNU0dfRklSU1RIRFIoeCkgV1NB
X0NNU0dfRklSU1RIRFIoeCkKKyNlbmRpZgorI2lmbmRlZiBDTVNHX05YVEhEUgorI2RlZmluZSBD
TVNHX05YVEhEUih4LCB5KSBXU0FfQ01TR19OWFRIRFIoeCwgeSkKKyNlbmRpZgorI2lmbmRlZiBD
TVNHX1NQQUNFCisjZGVmaW5lIENNU0dfU1BBQ0UoeCkgV1NBX0NNU0dfU1BBQ0UoeCkKKyNlbmRp
ZgorI2lmbmRlZiBDTVNHX0xFTgorI2RlZmluZSBDTVNHX0xFTih4KSBXU0FfQ01TR19MRU4oeCkK
KyNlbmRpZgorCisvKioqKiAgZnJvbSBzY3RwX29zX3dpbmRvd3MuaCAqKioqKioqKioqKioqKiov
CisjZGVmaW5lIFNDVFBfSUZOX0lTX0lGVF9MT09QKGlmbikJKChpZm4pLT5pZm5fdHlwZSA9PSBJ
RlRfTE9PUCkKKyNkZWZpbmUgU0NUUF9ST1VURV9JU19SRUFMX0xPT1Aocm8pICgocm8pLT5yb19y
dCAmJiAocm8pLT5yb19ydC0+cnRfaWZhICYmIChybyktPnJvX3J0LT5ydF9pZmEtPmlmYV9pZnAg
JiYgKHJvKS0+cm9fcnQtPnJ0X2lmYS0+aWZhX2lmcC0+aWZfdHlwZSA9PSBJRlRfTE9PUCkKKwor
LyoKKyAqIEFjY2VzcyB0byBJRk4ncyB0byBoZWxwIHdpdGggc3JjLWFkZHItc2VsZWN0aW9uCisg
Ki8KKy8qIFRoaXMgY291bGQgcmV0dXJuIFZPSUQgaWYgdGhlIGluZGV4IHdvcmtzIGJ1dCBmb3Ig
QlNEIHdlIHByb3ZpZGUgYm90aC4gKi8KKyNkZWZpbmUgU0NUUF9HRVRfSUZOX1ZPSURfRlJPTV9S
T1VURShybykgXAorCSgocm8pLT5yb19ydCAhPSBOVUxMID8gKHJvKS0+cm9fcnQtPnJ0X2lmcCA6
IE5VTEwpCisjZGVmaW5lIFNDVFBfUk9VVEVfSEFTX1ZBTElEX0lGTihybykgXAorCSgocm8pLT5y
b19ydCAmJiAocm8pLT5yb19ydC0+cnRfaWZwKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBTQ1RQX0dFVF9JRl9JTkRFWF9GUk9NX1JPVVRF
KHJvKSAxIC8qIGNvbXBpbGVzLi4uICBUT0RPIHVzZSByb3V0aW5nIHNvY2tldCB0byBkZXRlcm1p
bmUgKi8KKworI2RlZmluZSBCSUdfRU5ESUFOIDEKKyNkZWZpbmUgTElUVExFX0VORElBTiAwCisj
aWZkZWYgV09SRFNfQklHRU5ESUFOCisjZGVmaW5lIEJZVEVfT1JERVIgQklHX0VORElBTgorI2Vs
c2UKKyNkZWZpbmUgQllURV9PUkRFUiBMSVRUTEVfRU5ESUFOCisjZW5kaWYKKworI2Vsc2UgLyog
IWRlZmluZWQoVXNlcnNwYWNlX29zX1dpbmRvd3MpICovCisjaW5jbHVkZSA8c3lzL3NvY2tldC5o
PgorCisjaWYgZGVmaW5lZChfX0VNU0NSSVBURU5fXykgJiYgIWRlZmluZWQoX19FTVNDUklQVEVO
X1BUSFJFQURTX18pCisjZXJyb3IgIlVuc3VwcG9ydGVkIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIgor
I2VuZGlmCisKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisKK3R5cGVkZWYgcHRocmVhZF9tdXRleF90
IHVzZXJsYW5kX211dGV4X3Q7Cit0eXBlZGVmIHB0aHJlYWRfY29uZF90IHVzZXJsYW5kX2NvbmRf
dDsKK3R5cGVkZWYgcHRocmVhZF90IHVzZXJsYW5kX3RocmVhZF90OworI2VuZGlmCisKKyNpZiBk
ZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX25hdGl2ZV9jbGllbnRfXykKKworI2RlZmluZSBJ
Rk5BTVNJWiA2NAorCisjZGVmaW5lIHJhbmRvbSgpIHJhbmQoKQorI2RlZmluZSBzcmFuZG9tKHMp
IHNyYW5kKHMpCisKKyNkZWZpbmUgdGltZXJhZGQodHZwLCB1dnAsIHZ2cCkgICBcCisJZG8geyAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAodnZwKS0+dHZfc2VjID0gKHR2cCktPnR2
X3NlYyArICh1dnApLT50dl9zZWM7ICBcCisJCSh2dnApLT50dl91c2VjID0gKHR2cCktPnR2X3Vz
ZWMgKyAodXZwKS0+dHZfdXNlYzsgIFwKKwkJaWYgKCh2dnApLT50dl91c2VjID49IDEwMDAwMDAp
IHsgICAgICAgICAgICAgICAgICAgXAorCQkgICAgKHZ2cCktPnR2X3NlYysrOyAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKwkJCSh2dnApLT50dl91c2VjIC09IDEwMDAwMDA7ICAgICAgICAgICAg
IFwKKwkJfSAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSB3aGlsZSAoMCkKKworI2RlZmlu
ZSB0aW1lcnN1Yih0dnAsIHV2cCwgdnZwKSAgIFwKKwlkbyB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisJICAgICh2dnApLT50dl9zZWMgPSAodHZwKS0+dHZfc2VjIC0gKHV2cCktPnR2X3Nl
YzsgIFwKKwkJKHZ2cCktPnR2X3VzZWMgPSAodHZwKS0+dHZfdXNlYyAtICh1dnApLT50dl91c2Vj
OyAgXAorCQlpZiAoKHZ2cCktPnR2X3VzZWMgPCAwKSB7ICAgICAgICAgICAgICAgICAgIFwKKwkJ
ICAgICh2dnApLT50dl9zZWMtLTsgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkodnZwKS0+
dHZfdXNlYyArPSAxMDAwMDAwOyAgICAgICAgICAgICBcCisJCX0gICAgICAgICAgICAgICAgICAg
ICAgIFwKKwl9IHdoaWxlICgwKQorCisvKiNpbmNsdWRlIDxwYWNrb24uaD4KKyNwcmFnbWEgcGFj
ayhwdXNoLCAxKSovCitzdHJ1Y3QgaXAgeworCXVfY2hhciAgICBpcF9obDo0LCBpcF92OjQ7CisJ
dV9jaGFyICAgIGlwX3RvczsKKwl1X3Nob3J0ICAgaXBfbGVuOworCXVfc2hvcnQgICBpcF9pZDsK
Kwl1X3Nob3J0ICAgaXBfb2ZmOworI2RlZmluZSBJUF9SUCAweDgwMDAKKyNkZWZpbmUgSVBfREYg
MHg0MDAwCisjZGVmaW5lIElQX01GIDB4MjAwMAorI2RlZmluZSBJUF9PRkZNQVNLIDB4MWZmZgor
CXVfY2hhciAgICBpcF90dGw7CisJdV9jaGFyICAgIGlwX3A7CisJdV9zaG9ydCAgIGlwX3N1bTsK
KwlzdHJ1Y3QgaW5fYWRkciBpcF9zcmMsIGlwX2RzdDsKK307CisKK3N0cnVjdCBpZmFkZHJzIHsK
KwlzdHJ1Y3QgaWZhZGRycyAgKmlmYV9uZXh0OworCWNoYXIJCSppZmFfbmFtZTsKKwl1bnNpZ25l
ZCBpbnQJCSBpZmFfZmxhZ3M7CisJc3RydWN0IHNvY2thZGRyCSppZmFfYWRkcjsKKwlzdHJ1Y3Qg
c29ja2FkZHIJKmlmYV9uZXRtYXNrOworCXN0cnVjdCBzb2NrYWRkcgkqaWZhX2RzdGFkZHI7CisJ
dm9pZAkJKmlmYV9kYXRhOworfTsKKworc3RydWN0IHVkcGhkciB7CisJdWludDE2X3QgdWhfc3Bv
cnQ7CisJdWludDE2X3QgdWhfZHBvcnQ7CisJdWludDE2X3QgdWhfdWxlbjsKKwl1aW50MTZfdCB1
aF9zdW07Cit9OworCitzdHJ1Y3QgaW92ZWMgeworCXNpemVfdCBsZW47CisJY2hhciAqYnVmOwor
fTsKKworI2RlZmluZSBpb3ZfYmFzZSBidWYKKyNkZWZpbmUgaW92X2xlbglsZW4KKworc3RydWN0
IGlmYV9tc2doZHIgeworCXVpbnQxNl90ICAgICAgICAgaWZhbV9tc2dsZW47CisJdW5zaWduZWQg
Y2hhciAgICBpZmFtX3ZlcnNpb247CisJdW5zaWduZWQgY2hhciAgICBpZmFtX3R5cGU7CisJdWlu
dDMyX3QgICAgICAgICBpZmFtX2FkZHJzOworCXVpbnQzMl90ICAgICAgICAgaWZhbV9mbGFnczsK
Kwl1aW50MTZfdCAgICAgICAgIGlmYW1faW5kZXg7CisJdWludDMyX3QgICAgICAgICBpZmFtX21l
dHJpYzsKK307CisKK3N0cnVjdCBpZmRldm10dSB7CisJaW50IGlmZG1fY3VycmVudDsKKwlpbnQg
aWZkbV9taW47CisJaW50IGlmZG1fbWF4OworfTsKKworc3RydWN0IGlma3BpIHsKKwl1bnNpZ25l
ZCBpbnQgIGlma19tb2R1bGVfaWQ7CisJdW5zaWduZWQgaW50ICBpZmtfdHlwZTsKKwl1bmlvbiB7
CisJCXZvaWQgKmlma19wdHI7CisJCWludCBpZmtfdmFsdWU7CisJfSBpZmtfZGF0YTsKK307Cisj
ZW5kaWYKKworI2lmIGRlZmluZWQoX1dJTjMyKQoraW50IFdpbl9nZXRpZmFkZHJzKHN0cnVjdCBp
ZmFkZHJzKiopOworI2RlZmluZSBnZXRpZmFkZHJzKGludGVyZmFjZXMpICAoaW50KVdpbl9nZXRp
ZmFkZHJzKGludGVyZmFjZXMpCitpbnQgd2luX2lmX25hbWV0b2luZGV4KGNvbnN0IGNoYXIgKik7
CisjZGVmaW5lIGlmX25hbWV0b2luZGV4KHgpIHdpbl9pZl9uYW1ldG9pbmRleCh4KQorI2VuZGlm
CisKKyNkZWZpbmUgbXR4X2xvY2soYXJnMSkKKyNkZWZpbmUgbXR4X3VubG9jayhhcmcxKQorI2Rl
ZmluZSBtdHhfYXNzZXJ0KGFyZzEsYXJnMikKKyNkZWZpbmUgTUFfT1dORUQgNyAvKiBzeXMvbXV0
ZXguaCB0eXBpY2FsbHkgb24gRnJlZUJTRCAqLworI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKQor
c3RydWN0IG10eCB7aW50IGR1bW15O307CisjaWYgIWRlZmluZWQoX19OZXRCU0RfXykKK3N0cnVj
dCBzZWxpbmZvIHtpbnQgZHVtbXk7fTsKKyNlbmRpZgorc3RydWN0IHN4IHtpbnQgZHVtbXk7fTsK
KyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNs
dWRlIDxzdGRib29sLmg+CisvKiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+ICBpbiBGcmVlQlNEIGRl
ZmluZXMgTVNJWkUgKi8KKy8qICNpbmNsdWRlIDxzeXMva3RyLmg+ICovCisvKiAjaW5jbHVkZSA8
c3lzL3N5c3RtLmg+ICovCisjaWYgZGVmaW5lZChIQVZFX1NZU19RVUVVRV9IKQorI2luY2x1ZGUg
PHN5cy9xdWV1ZS5oPgorI2Vsc2UKKyNpbmNsdWRlIDx1c2VyX3F1ZXVlLmg+CisjZW5kaWYKKyNp
bmNsdWRlIDx1c2VyX21hbGxvYy5oPgorLyogI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4gKi8KKy8q
ICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+ICovCisvKiAjaW5jbHVkZSA8c3lzL3Byb3Rvc3cuaD4g
Ki8KKy8qIG9uIEZyZWVCU0QsIHRoaXMgcmVzdWx0cyBpbiBhIHJlZGVmaW50aW9uIG9mIFNPQ0so
QlVGKV8oVU4pTE9DSyBhbmQKKyAqICB1a25vd24gdHlwZSBvZiBzdHJ1Y3QgbXR4IGZvciBzYl9t
dHggaW4gc3RydWN0IHNvY2tidWYgKi8KKyNpbmNsdWRlICJ1c2VyX3NvY2tldHZhci5oIiAvKiBN
QUxMT0NfREVDTEFSRSdzIE1fUENCLiBSZXBsYWNlbWVudCBmb3Igc3lzL3NvY2tldHZhci5oICov
CisvKiAjaW5jbHVkZSA8c3lzL2phaWwuaD4gKi8KKy8qICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+
ICovCisjaW5jbHVkZSA8dXNlcl9lbnZpcm9ubWVudC5oPgorI2luY2x1ZGUgPHVzZXJfYXRvbWlj
Lmg+CisjaW5jbHVkZSA8dXNlcl9tYnVmLmg+CisvKiAjaW5jbHVkZSA8c3lzL3Vpby5oPiAqLwor
LyogI2luY2x1ZGUgPHN5cy9sb2NrLmg+ICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
IWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpbmNsdWRlIDxzeXMvcndsb2NrLmg+CisjZW5kaWYK
Ky8qICNpbmNsdWRlIDxzeXMva3RocmVhZC5oPiAqLworI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaW5jbHVkZSA8c3lzL3ByaXYuaD4KKyNlbmRp
ZgorLyogI2luY2x1ZGUgPHN5cy9yYW5kb20uaD4gKi8KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKy8q
ICNpbmNsdWRlIDxtYWNoaW5lL2NwdS5oPiAqLworCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisv
KiB3YXMgYSAwIGJ5dGUgZmlsZS4gIG5lZWRlZCBmb3Igc3RydWN0cyBpZl9kYXRhKDY0KSBhbmQg
bmV0X2V2ZW50X2RhdGEgKi8KKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKQorI2luY2x1ZGUgPG5ldC9pZl90eXBlcy5oPgorLyogI2luY2x1
ZGUgPG5ldC9pZl92YXIuaD4gd2FzIGEgMCBieXRlIGZpbGUuICBjYXVzZXMgc3RydWN0IG10eCBy
ZWRlZmluaXRpb24gKi8KKyNlbmRpZgorLyogT09UQiBvbmx5IC0gZHVtbXkgcm91dGUgdXNlZCBh
dCB0aGUgbW9tZW50LiBzaG91bGQgd2UgcG9ydCByb3V0ZSB0bworICogIHVzZXJzcGFjZSBhcyB3
ZWxsPyAqLworLyogb24gRnJlZUJTRCwgdGhpcyByZXN1bHRzIGluIGEgcmVkZWZpbnRpb24gb2Yg
c3RydWN0IHJvdXRlICovCisvKiAjaW5jbHVkZSA8bmV0L3JvdXRlLmg+ICovCisjaWYgIWRlZmlu
ZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX25hdGl2ZV9jbGllbnRfXykKKyNpbmNsdWRlIDxuZXQv
aWYuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbl9zeXN0
bS5oPgorI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9O
RVRJTkVUX0lQX0lDTVBfSCkKKyNpbmNsdWRlIDxuZXRpbmV0L2lwX2ljbXAuaD4KKyNlbHNlCisj
aW5jbHVkZSA8dXNlcl9pcF9pY21wLmg+CisjZW5kaWYKKy8qICNpbmNsdWRlIDxuZXRpbmV0L2lu
X3BjYi5oPiBwb3J0ZWQgdG8gdXNlcnNwYWNlICovCisjaW5jbHVkZSA8dXNlcl9pbnBjYi5oPgor
CisvKiBmb3IgZ2V0aWZhZGRycyAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmICFkZWZp
bmVkKF9XSU4zMikKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisjaW5jbHVk
ZSA8aWZhZGRycy5oPgorI2VuZGlmCisKKy8qIGZvciBpb2N0bCAqLworI2luY2x1ZGUgPHN5cy9p
b2N0bC5oPgorCisvKiBmb3IgY2xvc2UsIGV0Yy4gKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKy8q
IGZvciBnZXR0aW1lb2ZkYXkgKi8KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisKKy8q
IGxvdHMgb2YgZXJybm8ncyB1c2VkIGFuZCBuZWVkZWQgaW4gdXNlcnNwYWNlICovCisKKy8qIGZv
ciBvZmZzZXRvZiAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaWYgZGVmaW5lZChTQ1RQX1BS
T0NFU1NfTEVWRUxfTE9DS1MpICYmICFkZWZpbmVkKF9XSU4zMikKKy8qIGZvciBwdGhyZWFkX211
dGV4X2xvY2ssIHB0aHJlYWRfbXV0ZXhfdW5sb2NrLCBldGMuICovCisjaW5jbHVkZSA8cHRocmVh
ZC5oPgorI2VuZGlmCisKKyNpZmRlZiBJUFNFQworI2luY2x1ZGUgPG5ldGlwc2VjL2lwc2VjLmg+
CisjaW5jbHVkZSA8bmV0aXBzZWMva2V5Lmg+CisjZW5kaWYJCQkJLyogSVBTRUMgKi8KKworI2lm
ZGVmIElORVQ2CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpbmNsdWRlIDxzeXMvZG9tYWlu
Lmg+CisjZW5kaWYKKyNpZmRlZiBJUFNFQworI2luY2x1ZGUgPG5ldGlwc2VjL2lwc2VjNi5oPgor
I2VuZGlmCisjaWYgIWRlZmluZWQoX1dJTjMyKQorI2luY2x1ZGUgPG5ldGluZXQvaXA2Lmg+Cisj
ZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwg
ZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykgfHwgZGVmaW5lZChfX09w
ZW5CU0RfXykgfHwgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19FTVNDUklQVEVOX18pCisj
aW5jbHVkZSAidXNlcl9pcDZfdmFyLmgiCisjZWxzZQorI2luY2x1ZGUgPG5ldGluZXQ2L2lwNl92
YXIuaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisjaW5jbHVkZSA8bmV0aW5l
dDYvaW42X3BjYi5oPgorI2luY2x1ZGUgPG5ldGluZXQ2L2lwNnByb3Rvc3cuaD4KKy8qICNpbmNs
dWRlIDxuZXRpbmV0Ni9uZDYuaD4gd2FzIGEgMCBieXRlIGZpbGUgKi8KKyNpbmNsdWRlIDxuZXRp
bmV0Ni9zY29wZTZfdmFyLmg+CisjZW5kaWYKKyNlbmRpZiAvKiBJTkVUNiAqLworCisjaWYgZGVm
aW5lZChIQVZFX1NDVFBfUEVFTE9GRl9TT0NLT1BUKQorI2luY2x1ZGUgPHN5cy9maWxlLmg+Cisj
aW5jbHVkZSA8c3lzL2ZpbGVkZXNjLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIm5ldGluZXQvc2N0
cF9zaGExLmgiCisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorI2luY2x1ZGUgPG5ldGluZXQvaXBfb3B0aW9ucy5oPgorI2VuZGlmCisKKyNkZWZp
bmUgU0NUUF9QUklOVEYoLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJ
aWYgKFNDVFBfQkFTRV9WQVIoZGVidWdfcHJpbnRmKSkgeyAgICAgICAgICAgICAgICBcCisJCVND
VFBfQkFTRV9WQVIoZGVidWdfcHJpbnRmKShfX1ZBX0FSR1NfXyk7IFwKKwl9CisKKy8qIERlY2xh
cmUgYWxsIHRoZSBtYWxsb2MgbmFtZXMgZm9yIGFsbCB0aGUgdmFyaW91cyBtYWxsb2NzICovCitN
QUxMT0NfREVDTEFSRShTQ1RQX01fTUFQKTsKK01BTExPQ19ERUNMQVJFKFNDVFBfTV9TVFJNSSk7
CitNQUxMT0NfREVDTEFSRShTQ1RQX01fU1RSTU8pOworTUFMTE9DX0RFQ0xBUkUoU0NUUF9NX0FT
Q19BRERSKTsKK01BTExPQ19ERUNMQVJFKFNDVFBfTV9BU0NfSVQpOworTUFMTE9DX0RFQ0xBUkUo
U0NUUF9NX0FVVEhfQ0wpOworTUFMTE9DX0RFQ0xBUkUoU0NUUF9NX0FVVEhfS1kpOworTUFMTE9D
X0RFQ0xBUkUoU0NUUF9NX0FVVEhfSEwpOworTUFMTE9DX0RFQ0xBUkUoU0NUUF9NX0FVVEhfSUYp
OworTUFMTE9DX0RFQ0xBUkUoU0NUUF9NX1NUUkVTRVQpOworTUFMTE9DX0RFQ0xBUkUoU0NUUF9N
X0NNU0cpOworTUFMTE9DX0RFQ0xBUkUoU0NUUF9NX0NPUFlBTCk7CitNQUxMT0NfREVDTEFSRShT
Q1RQX01fVlJGKTsKK01BTExPQ19ERUNMQVJFKFNDVFBfTV9JRkEpOworTUFMTE9DX0RFQ0xBUkUo
U0NUUF9NX0lGTik7CitNQUxMT0NfREVDTEFSRShTQ1RQX01fVElNVyk7CitNQUxMT0NfREVDTEFS
RShTQ1RQX01fTVZSRik7CitNQUxMT0NfREVDTEFSRShTQ1RQX01fSVRFUik7CitNQUxMT0NfREVD
TEFSRShTQ1RQX01fU09DS09QVCk7CisKKyNpZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVG
KQorCisjZGVmaW5lIFNDVFBfR0VUX0NZQ0xFQ09VTlQgZ2V0X2N5Y2xlY291bnQoKQorI2RlZmlu
ZSBTQ1RQX0NUUjYgc2N0cF9sb2dfdHJhY2UKKworI2Vsc2UKKyNkZWZpbmUgU0NUUF9DVFI2IENU
UjYKKyNlbmRpZgorCisvKiBFbXB0eSBrdHIgc3RhdGVtZW50IGZvciBfVXNlcnNwYWNlX18gKHNp
bWlsYXIgdG8gd2hhdCBpcyBkb25lIGZvciBtYWMpICovCisjZGVmaW5lCUNUUjYobSwgZCwgcDEs
IHAyLCBwMywgcDQsIHA1LCBwNikKKworCisKKyNkZWZpbmUgU0NUUF9CQVNFX0lORk8oX19tKSBz
eXN0ZW1fYmFzZV9pbmZvLnNjdHBwY2JpbmZvLl9fbQorI2RlZmluZSBTQ1RQX0JBU0VfU1RBVFMg
c3lzdGVtX2Jhc2VfaW5mby5zY3Rwc3RhdAorI2RlZmluZSBTQ1RQX0JBU0VfU1RBVChfX20pICAg
ICBzeXN0ZW1fYmFzZV9pbmZvLnNjdHBzdGF0Ll9fbQorI2RlZmluZSBTQ1RQX0JBU0VfU1lTQ1RM
KF9fbSkgc3lzdGVtX2Jhc2VfaW5mby5zY3Rwc3lzY3RsLl9fbQorI2RlZmluZSBTQ1RQX0JBU0Vf
VkFSKF9fbSkgc3lzdGVtX2Jhc2VfaW5mby5fX20KKworLyoKKyAqCisgKi8KKyNpZiAhZGVmaW5l
ZChfX0FQUExFX18pCisjZGVmaW5lIFVTRVJfQUREUl9OVUxMCShOVUxMKQkJLyogRklYIE1FOiB0
ZW1wICovCisjZW5kaWYKKworI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9jb25zdGFudHMuaD4KKyNp
ZiBkZWZpbmVkKFNDVFBfREVCVUcpCisjZGVmaW5lIFNDVFBEQkcobGV2ZWwsIC4uLikJCQkJCVwK
K3sJCQkJCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9k
ZWJ1Z19vbikgJiBsZXZlbCkgewlcCisJCQlTQ1RQX1BSSU5URihfX1ZBX0FSR1NfXyk7CQlcCisJ
CX0JCQkJCQlcCisJfSB3aGlsZSAoMCk7CQkJCQkJXAorfQorI2RlZmluZSBTQ1RQREJHX0FERFIo
bGV2ZWwsIGFkZHIpCQkJCVwKK3sJCQkJCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9kZWJ1Z19vbikgJiBsZXZlbCApIHsJXAorCQkgICAgc2N0cF9wcmlu
dF9hZGRyZXNzKGFkZHIpOwkJCVwKKwkJfQkJCQkJCVwKKwl9IHdoaWxlICgwKTsJCQkJCQlcCit9
CisjZWxzZQorI2RlZmluZSBTQ1RQREJHKGxldmVsLCAuLi4pCisjZGVmaW5lIFNDVFBEQkdfQURE
UihsZXZlbCwgYWRkcikKKyNlbmRpZgorCisjaWZkZWYgU0NUUF9MVFJBQ0VfQ0hVTktTCisjZGVm
aW5lIFNDVFBfTFRSQUNFX0NISyhhLCBiLCBjLCBkKSBpZihzY3RwX2xvZ2dpbmdfbGV2ZWwgJiBT
Q1RQX0xUUkFDRV9DSFVOS19FTkFCTEUpIENUUjYoS1RSX1NVQlNZUywgIlNDVFA6JWRbJWRdOiV4
LSV4LSV4LSV4IiwgU0NUUF9MT0dfQ0hVTktfUFJPQywgMCwgYSwgYiwgYywgZCkKKyNlbHNlCisj
ZGVmaW5lIFNDVFBfTFRSQUNFX0NISyhhLCBiLCBjLCBkKQorI2VuZGlmCisKKyNpZmRlZiBTQ1RQ
X0xUUkFDRV9FUlJPUlMKKyNkZWZpbmUgU0NUUF9MVFJBQ0VfRVJSX1JFVF9QS1QobSwgaW5wLCBz
dGNiLCBuZXQsIGZpbGUsIGVycikgXAorCWlmIChzY3RwX2xvZ2dpbmdfbGV2ZWwgJiBTQ1RQX0xU
UkFDRV9FUlJPUl9FTkFCTEUpIFwKKwkJU0NUUF9QUklOVEYoIm1idWY6JXAgaW5wOiVwIHN0Y2I6
JXAgbmV0OiVwIGZpbGU6JXggbGluZTolZCBlcnJvcjolZFxuIiwgXAorCQkgICAgICAgICAgICAo
dm9pZCAqKW0sICh2b2lkICopaW5wLCAodm9pZCAqKXN0Y2IsICh2b2lkICopbmV0LCBmaWxlLCBf
X0xJTkVfXywgZXJyKTsKKyNkZWZpbmUgU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5l
dCwgZmlsZSwgZXJyKSBcCisJaWYgKHNjdHBfbG9nZ2luZ19sZXZlbCAmIFNDVFBfTFRSQUNFX0VS
Uk9SX0VOQUJMRSkgXAorCQlTQ1RQX1BSSU5URigiaW5wOiVwIHN0Y2I6JXAgbmV0OiVwIGZpbGU6
JXggbGluZTolZCBlcnJvcjolZFxuIiwgXAorCQkgICAgICAgICAgICAodm9pZCAqKWlucCwgKHZv
aWQgKilzdGNiLCAodm9pZCAqKW5ldCwgZmlsZSwgX19MSU5FX18sIGVycik7CisjZWxzZQorI2Rl
ZmluZSBTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIHN0Y2IsIG5ldCwgZmlsZSwgZXJy
KQorI2RlZmluZSBTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBmaWxlLCBlcnIp
CisjZW5kaWYKKworCisvKgorICogTG9jYWwgYWRkcmVzcyBhbmQgaW50ZXJmYWNlIGxpc3QgaGFu
ZGxpbmcKKyAqLworI2RlZmluZSBTQ1RQX01BWF9WUkZfSUQJCTAKKyNkZWZpbmUgU0NUUF9TSVpF
X09GX1ZSRl9IQVNICTMKKyNkZWZpbmUgU0NUUF9JRk5BTVNJWgkJSUZOQU1TSVoKKyNkZWZpbmUg
U0NUUF9ERUZBVUxUX1ZSRklECTAKKyNkZWZpbmUgU0NUUF9WUkZfQUREUl9IQVNIX1NJWkUJMTYK
KyNkZWZpbmUgU0NUUF9WUkZfSUZOX0hBU0hfU0laRQkzCisjZGVmaW5lCVNDVFBfSU5JVF9WUkZf
VEFCTEVJRCh2cmYpCisKKyNpZiAhZGVmaW5lZChfV0lOMzIpCisjZGVmaW5lIFNDVFBfSUZOX0lT
X0lGVF9MT09QKGlmbikgKHN0cm5jbXAoKGlmbiktPmlmbl9uYW1lLCAibG8iLCAyKSA9PSAwKQor
LyogQlNEIGRlZmluaXRpb24gKi8KKy8qICNkZWZpbmUgU0NUUF9ST1VURV9JU19SRUFMX0xPT1Ao
cm8pICgocm8pLT5yb19ydCAmJiAocm8pLT5yb19ydC0+cnRfaWZhICYmIChybyktPnJvX3J0LT5y
dF9pZmEtPmlmYV9pZnAgJiYgKHJvKS0+cm9fcnQtPnJ0X2lmYS0+aWZhX2lmcC0+aWZfdHlwZSA9
PSBJRlRfTE9PUCkgKi8KKy8qIG9ubHkgdXNlZCBpbiBJUHY2IHNjZW5hcmlvLCB3aGljaCBpc24n
dCBzdXBwb3J0ZWQgeWV0ICovCisjZGVmaW5lIFNDVFBfUk9VVEVfSVNfUkVBTF9MT09QKHJvKSAw
CisKKy8qCisgKiBBY2Nlc3MgdG8gSUZOJ3MgdG8gaGVscCB3aXRoIHNyYy1hZGRyLXNlbGVjdGlv
bgorICovCisvKiBUaGlzIGNvdWxkIHJldHVybiBWT0lEIGlmIHRoZSBpbmRleCB3b3JrcyBidXQg
Zm9yIEJTRCB3ZSBwcm92aWRlIGJvdGguICovCisjZGVmaW5lIFNDVFBfR0VUX0lGTl9WT0lEX0ZS
T01fUk9VVEUocm8pICh2b2lkICopcm8tPnJvX3J0LT5ydF9pZnAKKyNkZWZpbmUgU0NUUF9HRVRf
SUZfSU5ERVhfRlJPTV9ST1VURShybykgMSAvKiBjb21waWxlcy4uLiAgVE9ETyB1c2Ugcm91dGlu
ZyBzb2NrZXQgdG8gZGV0ZXJtaW5lICovCisjZGVmaW5lIFNDVFBfUk9VVEVfSEFTX1ZBTElEX0lG
TihybykgKChybyktPnJvX3J0ICYmIChybyktPnJvX3J0LT5ydF9pZnApCisjZW5kaWYKKworLyoK
KyAqIGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRpb24KKyAqLworI2RlZmluZSBTQ1RQX01BTExPQyh2
YXIsIHR5cGUsIHNpemUsIG5hbWUpCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCU1BTExPQyh2YXIs
IHR5cGUsIHNpemUsIG5hbWUsIE1fTk9XQUlUKTsJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5l
IFNDVFBfRlJFRSh2YXIsIHR5cGUpCUZSRUUodmFyLCB0eXBlKQorCisjZGVmaW5lIFNDVFBfTUFM
TE9DX1NPTkFNRSh2YXIsIHR5cGUsIHNpemUpCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCU1BTExP
Qyh2YXIsIHR5cGUsIHNpemUsIE1fU09OQU1FLCAoTV9XQUlUT0sgfCBNX1pFUk8pKTsJXAorCX0g
d2hpbGUgKDApCisKKyNkZWZpbmUgU0NUUF9GUkVFX1NPTkFNRSh2YXIpCUZSRUUodmFyLCBNX1NP
TkFNRSkKKworI2RlZmluZSBTQ1RQX1BST0NFU1NfU1RSVUNUIHN0cnVjdCBwcm9jICoKKworLyoK
KyAqIHpvbmUgYWxsb2NhdGlvbiBmdW5jdGlvbnMKKyAqLworCisKKyNpZiBkZWZpbmVkKFNDVFBf
U0lNUExFX0FMTE9DQVRPUikKKy8qdHlwZWRlZiBzaXplX3Qgc2N0cF96b25lX3Q7Ki8KKyNkZWZp
bmUgU0NUUF9aT05FX0lOSVQoem9uZSwgbmFtZSwgc2l6ZSwgbnVtYmVyKSB7IFwKKwl6b25lID0g
c2l6ZTsgXAorfQorCisvKiBfX1VzZXJzcGFjZV9fIFNDVFBfWk9ORV9HRVQ6IGFsbG9jYXRlIGVs
ZW1lbnQgZnJvbSB0aGUgem9uZSAqLworI2RlZmluZSBTQ1RQX1pPTkVfR0VUKHpvbmUsIHR5cGUp
ICBcCisgICAgICAgICh0eXBlICopbWFsbG9jKHpvbmUpOworCisKKy8qIF9fVXNlcnNwYWNlX18g
U0NUUF9aT05FX0ZSRUU6IGZyZWUgZWxlbWVudCBmcm9tIHRoZSB6b25lICovCisjZGVmaW5lIFND
VFBfWk9ORV9GUkVFKHpvbmUsIGVsZW1lbnQpIHsgXAorCWZyZWUoZWxlbWVudCk7ICBcCit9CisK
KyNkZWZpbmUgU0NUUF9aT05FX0RFU1RST1koem9uZSkKKyNlbHNlCisvKl9fVXNlcnNwYWNlX18K
KyAgQ29tcGlsaW5nICYgbGlua2luZyBub3RlczogTmVlZHMgbGlidW1lbSwgd2hpY2ggaGFzIGJl
ZW4gcGxhY2VkIGluIC4vdXNlcl9saWIKKyAgQWxsIHVzZXJzcGFjZSBoZWFkZXIgZmlsZXMgYXJl
IGluIC4vdXNlcl9pbmNsdWRlLiBNYWtlZmlsZSB3aWxsIG5lZWQgdGhlCisgIGZvbGxvd2luZy4K
KyAgQ0ZMQUdTID0gLUkuLyAtV2FsbAorICBMREZMQUdTID0gLUwuL3VzZXJfbGliIC1SLi91c2Vy
X2xpYiAtbHVtZW0KKyovCisjaW5jbHVkZSAidXNlcl9pbmNsdWRlL3VtZW0uaCIKKworLyogX19V
c2Vyc3BhY2VfXyBTQ1RQX1pPTkVfSU5JVDogaW5pdGlhbGl6ZSB0aGUgem9uZSAqLworLyoKKyAg
X19Vc2Vyc3BhY2VfXworICBObyBlcXVpdmFsZW50IGZ1bmN0aW9uIHRvIHVtYV96b25lX3NldF9t
YXggYWRkZWQgeWV0LiAoU2VlIFNDVFBfWk9ORV9JTklUIGluIHNjdHBfb3NfYnNkLmgKKyAgZm9y
IHJlZmVyZW5jZSkuIEl0IG1heSBub3QgYmUgcmVxdWlyZWQgYXMgbWVudGlvbmVkIGluCisgIGh0
dHA6Ly9uaXhkb2MubmV0L21hbi1wYWdlcy9GcmVlQlNEL3VtYV96YWxsb2MuOS5odG1sIHRoYXQK
KyAgbWF4IGxpbWl0cyBtYXkgbm90IGVuZm9yY2VkIG9uIHN5c3RlbXMgd2l0aCBtb3JlIHRoYW4g
b25lIENQVS4KKyovCisjZGVmaW5lIFNDVFBfWk9ORV9JTklUKHpvbmUsIG5hbWUsIHNpemUsIG51
bWJlcikgeyBcCisJem9uZSA9IHVtZW1fY2FjaGVfY3JlYXRlKG5hbWUsIHNpemUsIDAsIE5VTEws
IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIDApOyBcCisgIH0KKworLyogX19Vc2Vyc3BhY2VfXyBT
Q1RQX1pPTkVfR0VUOiBhbGxvY2F0ZSBlbGVtZW50IGZyb20gdGhlIHpvbmUgKi8KKyNkZWZpbmUg
U0NUUF9aT05FX0dFVCh6b25lLCB0eXBlKSBcCisgICAgICAgICh0eXBlICopdW1lbV9jYWNoZV9h
bGxvYyh6b25lLCBVTUVNX0RFRkFVTFQpOworCisKKy8qIF9fVXNlcnNwYWNlX18gU0NUUF9aT05F
X0ZSRUU6IGZyZWUgZWxlbWVudCBmcm9tIHRoZSB6b25lICovCisjZGVmaW5lIFNDVFBfWk9ORV9G
UkVFKHpvbmUsIGVsZW1lbnQpIFwKKwl1bWVtX2NhY2hlX2ZyZWUoem9uZSwgZWxlbWVudCk7CisK
KworLyogX19Vc2Vyc3BhY2VfXyBTQ1RQX1pPTkVfREVTVFJPWTogZGVzdHJveSB0aGUgem9uZSAq
LworI2RlZmluZSBTQ1RQX1pPTkVfREVTVFJPWSh6b25lKSBcCisJdW1lbV9jYWNoZV9kZXN0cm95
KHpvbmUpOworI2VuZGlmCisKKy8qCisgKiBfX1VzZXJzcGFjZV9fIERlZmluaW5nIHNjdHBfaGFz
aGluaXRfZmxhZ3MoKSBhbmQgc2N0cF9oYXNoZGVzdHJveSgpIGZvciB1c2VybGFuZC4KKyAqLwor
dm9pZCAqc2N0cF9oYXNoaW5pdF9mbGFncyhpbnQgZWxlbWVudHMsIHN0cnVjdCBtYWxsb2NfdHlw
ZSAqdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgdV9sb25nICpoYXNobWFzaywgaW50IGZsYWdz
KTsKK3ZvaWQKK3NjdHBfaGFzaGRlc3Ryb3kodm9pZCAqdmhhc2h0YmwsIHN0cnVjdCBtYWxsb2Nf
dHlwZSAqdHlwZSwgdV9sb25nIGhhc2htYXNrKTsKKwordm9pZAorc2N0cF9oYXNoZnJlZWRlc3Ry
b3kodm9pZCAqdmhhc2h0YmwsIHN0cnVjdCBtYWxsb2NfdHlwZSAqdHlwZSwgdV9sb25nIGhhc2ht
YXNrKTsKKworCisjZGVmaW5lIEhBU0hfTk9XQUlUIDB4MDAwMDAwMDEKKyNkZWZpbmUgSEFTSF9X
QUlUT0sgMHgwMDAwMDAwMgorCisvKiBNX1BDQiBpcyBNQUxMT0NfREVDTEFSRSdkIGluIHN5cy9z
b2NrZXR2YXIuaCAqLworI2RlZmluZSBTQ1RQX0hBU0hfSU5JVChzaXplLCBoYXNobWFyaykgc2N0
cF9oYXNoaW5pdF9mbGFncyhzaXplLCBNX1BDQiwgaGFzaG1hcmssIEhBU0hfTk9XQUlUKQorCisj
ZGVmaW5lIFNDVFBfSEFTSF9GUkVFKHRhYmxlLCBoYXNobWFyaykgc2N0cF9oYXNoZGVzdHJveSh0
YWJsZSwgTV9QQ0IsIGhhc2htYXJrKQorCisjZGVmaW5lIFNDVFBfSEFTSF9GUkVFX0RFU1RST1ko
dGFibGUsIGhhc2htYXJrKSAgc2N0cF9oYXNoZnJlZWRlc3Ryb3kodGFibGUsIE1fUENCLCBoYXNo
bWFyaykKKyNkZWZpbmUgU0NUUF9NX0NPUFlNCW1fY29weW0KKworLyoKKyAqIHRpbWVycworICov
CisvKiBfX1VzZXJzcGFjZV9fCisgKiB1c2VyX3NjdHBfY2FsbG91dC5oIGhhcyB0eXBlZGVmIHN0
cnVjdCBzY3RwX2NhbGxvdXQgc2N0cF9vc190aW1lcl90OworICogd2hpY2ggaXMgdXNlZCBpbiB0
aGUgdGltZXIgcmVsYXRlZCBmdW5jdGlvbnMgc3VjaCBhcworICogU0NUUF9PU19USU1FUl9JTklU
IGV0Yy4KKyovCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2NhbGxvdXQuaD4KKworLyogX19Vc2Vy
c3BhY2VfXyBDcmVhdGluZyBhIHJlY2VpdmUgdGhyZWFkICovCisjaW5jbHVkZSA8dXNlcl9yZWN2
X3RocmVhZC5oPgorCisvKl9fVXNlcnNwYWNlX18gZGVmaW5pbmcgS1RSX1NVQlNZUyAxIGFzIGRv
bmUgaW4gc2N0cF9vc19tYWNvc3guaCAqLworI2RlZmluZSBLVFJfU1VCU1lTIDEKKworLyogVGhl
IHBhY2tlZCBkZWZpbmUgZm9yIDY0IGJpdCBwbGF0Zm9ybXMgKi8KKyNpZiAhZGVmaW5lZChfV0lO
MzIpCisjZGVmaW5lIFNDVFBfUEFDS0VEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpCisjZGVmaW5l
IFNDVFBfVU5VU0VEIF9fYXR0cmlidXRlX18oKHVudXNlZCkpCisjZWxzZQorI2RlZmluZSBTQ1RQ
X1BBQ0tFRAorI2RlZmluZSBTQ1RQX1VOVVNFRAorI2VuZGlmCisKKy8qCisgKiBGdW5jdGlvbnMK
KyAqLworLyogTWJ1ZiBtYW5pcHVsYXRpb24gYW5kIGFjY2VzcyBtYWNyb3MgICovCisjZGVmaW5l
IFNDVFBfQlVGX0xFTihtKSAobS0+bV9sZW4pCisjZGVmaW5lIFNDVFBfQlVGX05FWFQobSkgKG0t
Pm1fbmV4dCkKKyNkZWZpbmUgU0NUUF9CVUZfTkVYVF9QS1QobSkgKG0tPm1fbmV4dHBrdCkKKyNk
ZWZpbmUgU0NUUF9CVUZfUkVTVl9VRihtLCBzaXplKSBtLT5tX2RhdGEgKz0gc2l6ZQorI2RlZmlu
ZSBTQ1RQX0JVRl9BVChtLCBzaXplKSBtLT5tX2RhdGEgKyBzaXplCisjZGVmaW5lIFNDVFBfQlVG
X0lTX0VYVEVOREVEKG0pIChtLT5tX2ZsYWdzICYgTV9FWFQpCisjZGVmaW5lIFNDVFBfQlVGX0VY
VEVORF9TSVpFKG0pIChtLT5tX2V4dC5leHRfc2l6ZSkKKyNkZWZpbmUgU0NUUF9CVUZfVFlQRSht
KSAobS0+bV90eXBlKQorI2RlZmluZSBTQ1RQX0JVRl9SRUNWSUYobSkgKG0tPm1fcGt0aGRyLnJj
dmlmKQorI2RlZmluZSBTQ1RQX0JVRl9QUkVQRU5ECU1fUFJFUEVORAorCisjZGVmaW5lIFNDVFBf
QUxJR05fVE9fRU5EKG0sIGxlbikgaWYobS0+bV9mbGFncyAmIE1fUEtUSERSKSB7IFwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSF9BTElHTihtLCBsZW4pOyBcCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgobS0+bV9mbGFncyAmIE1f
RVhUKSA9PSAwKSB7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNX0FM
SUdOKG0sIGxlbik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyNp
ZiAhZGVmaW5lZChfV0lOMzIpCisjZGVmaW5lIFNDVFBfU05QUklOVEYoZGF0YSwgLi4uKQkJCQkJ
CVwKKwlpZiAoc25wcmludGYoZGF0YSwgX19WQV9BUkdTX18pIDwgMCkgewkJCQkJXAorCQlkYXRh
WzBdID0gJ1wwJzsJCQkJCQkJXAorCX0KKyNlbmRpZgorCisvKiBXZSBtYWtlIGl0IHNvIGlmIHlv
dSBoYXZlIHVwIHRvIDQgdGhyZWFkcworICogd3JpdHRpbmcgYmFzZWQgb24gdGhlIGRlZmF1bHQg
c2l6ZSBvZgorICogdGhlIHBhY2tldCBsb2cgNjUgaywgdGhhdCB3b3VsZCBiZQorICogNCAxNmsg
cGFja2V0cyBiZWZvcmUgd2Ugd291bGQgaGl0CisgKiBhIHByb2JsZW0uCisgKi8KKyNkZWZpbmUg
U0NUUF9QS1RMT0dfV1JJVEVSU19ORUVEX0xPQ0sgMworCisKKy8qCisgKiByb3V0ZXMsIG91dHB1
dCwgZXRjLgorICovCisKK3R5cGVkZWYgc3RydWN0IHNjdHBfcm91dGUJc2N0cF9yb3V0ZV90Owor
dHlwZWRlZiBzdHJ1Y3Qgc2N0cF9ydGVudHJ5CXNjdHBfcnRlbnRyeV90OworCitzdGF0aWMgaW5s
aW5lIHZvaWQgc2N0cF91c2Vyc3BhY2VfcnRhbGxvYyhzY3RwX3JvdXRlX3QgKnJvKQoreworCWlm
IChyby0+cm9fcnQgIT0gTlVMTCkgeworCQlyby0+cm9fcnQtPnJ0X3JlZmNudCsrOworCQlyZXR1
cm47CisJfQorCisJcm8tPnJvX3J0ID0gKHNjdHBfcnRlbnRyeV90ICopIG1hbGxvYyhzaXplb2Yo
c2N0cF9ydGVudHJ5X3QpKTsKKwlpZiAocm8tPnJvX3J0ID09IE5VTEwpCisJCXJldHVybjsKKwor
CS8qIGluaXRpYWxpemUgKi8KKwltZW1zZXQocm8tPnJvX3J0LCAwLCBzaXplb2Yoc2N0cF9ydGVu
dHJ5X3QpKTsKKwlyby0+cm9fcnQtPnJ0X3JlZmNudCA9IDE7CisKKwkvKiBzZXQgTVRVICovCisJ
LyogVE9ETyBzZXQgdGhpcyBiYXNlZCBvbiB0aGUgcm8tPnJvX2RzdCwgbG9va2luZyB1cCBNVFUg
d2l0aCByb3V0aW5nIHNvY2tldCAqLworI2lmIDAKKwlpZiAodXNlcnNwYWNlX3Jhd3JvdXRlID09
IC0xKSB7CisJCXVzZXJzcGFjZV9yYXdyb3V0ZSA9IHNvY2tldChBRl9ST1VURSwgU09DS19SQVcs
IDApOworCQlpZiAodXNlcnNwYWNlX3Jhd3JvdXRlID09IC0xKQorCQkJcmV0dXJuOworCX0KKyNl
bmRpZgorCXJvLT5yb19ydC0+cnRfcm14LnJteF9tdHUgPSAxNTAwOyAvKiBGSVhNRSB0ZW1wb3Jh
cnkgc29sdXRpb24gKi8KKworCS8qIFRPRE8gZW5hYmxlIHRoZSBhYmlsaXR5IHRvIG9idGFpbiBp
bnRlcmZhY2UgaW5kZXggb2Ygcm91dGUgZm9yCisJICogIFNDVFBfR0VUX0lGX0lOREVYX0ZST01f
Uk9VVEUgbWFjcm8uCisJICovCit9CisjZGVmaW5lIFNDVFBfUlRBTExPQyhybywgdnJmX2lkLCBm
aWJudW0pIHNjdHBfdXNlcnNwYWNlX3J0YWxsb2MoKHNjdHBfcm91dGVfdCAqKXJvKQorCisvKiBk
dW1teSBydGZyZWUgbmVlZGVkIG9uY2UgdXNlcl9yb3V0ZS5oIGlzIGluY2x1ZGVkICovCitzdGF0
aWMgaW5saW5lIHZvaWQgc2N0cF91c2Vyc3BhY2VfcnRmcmVlKHNjdHBfcnRlbnRyeV90ICpydCkK
K3sKKwlpZihydCA9PSBOVUxMKSB7CisJCXJldHVybjsKKwl9CisJaWYoLS1ydC0+cnRfcmVmY250
ID4gMCkgeworCQlyZXR1cm47CisJfQorCWZyZWUocnQpOworfQorI2RlZmluZSBydGZyZWUoYXJn
MSkgc2N0cF91c2Vyc3BhY2VfcnRmcmVlKGFyZzEpCisKKworLyoqKioqKioqKioqKioqKioqKioq
KioqKiovCisvKiAgICAgIE1UVSAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioq
KioqKioqLworaW50IHNjdHBfdXNlcnNwYWNlX2dldF9tdHVfZnJvbV9pZm4odWludDMyX3QgaWZf
aW5kZXgsIGludCBhZik7CisKKyNkZWZpbmUgU0NUUF9HQVRIRVJfTVRVX0ZST01fSUZOX0lORk8o
aWZuLCBpZm5faW5kZXgsIGFmKSBzY3RwX3VzZXJzcGFjZV9nZXRfbXR1X2Zyb21faWZuKGlmbl9p
bmRleCwgYWYpCisKKyNkZWZpbmUgU0NUUF9HQVRIRVJfTVRVX0ZST01fUk9VVEUoc2N0cF9pZmEs
IHNhLCBydCkgKChydCAhPSBOVUxMKSA/IHJ0LT5ydF9ybXgucm14X210dSA6IDApCisKKyNkZWZp
bmUgU0NUUF9HQVRIRVJfTVRVX0ZST01fSU5URkMoc2N0cF9pZm4pIChzY3RwX2lmbi0+aWZuX210
dSkKKworI2RlZmluZSBTQ1RQX1NFVF9NVFVfT0ZfUk9VVEUoc2EsIHJ0LCBtdHUpIGRvIHsgXAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydCAhPSBO
VUxMKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cnQtPnJ0X3JteC5ybXhfbXR1ID0gbXR1OyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioq
LworLyogVGhlc2UgYXJlIGZvciBsb2dnaW5nICovCisvKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KKy8qIHJldHVybiB0aGUgYmFzZSBleHQgZGF0YSBwb2ludGVyICovCisjZGVmaW5lIFNDVFBf
QlVGX0VYVEVORF9CQVNFKG0pIChtLT5tX2V4dC5leHRfYnVmKQorIC8qIHJldHVybiB0aGUgcmVm
Y250IG9mIHRoZSBkYXRhIHBvaW50ZXIgKi8KKyNkZWZpbmUgU0NUUF9CVUZfRVhURU5EX1JFRkNO
VChtKSAoKm0tPm1fZXh0LnJlZl9jbnQpCisvKiByZXR1cm4gYW55IGJ1ZmZlciByZWxhdGVkIGZs
YWdzLCB0aGlzIGlzCisgKiB1c2VkIGJleW9uZCBsb2dnaW5nIGZvciBhcHBsZSBvbmx5LgorICov
CisjZGVmaW5lIFNDVFBfQlVGX0dFVF9GTEFHUyhtKSAobS0+bV9mbGFncykKKworLyogRm9yIEJT
RCB0aGlzIGp1c3QgYWNjZXNzZXMgdGhlIE1fUEtUSERSIGxlbmd0aAorICogc28gaXQgb3BlcmF0
ZXMgb24gYW4gbWJ1ZiB3aXRoIGhkciBmbGFnLiBPdGhlcgorICogTy9TJ3MgbWF5IGhhdmUgc2Vw
ZXJhdGUgcGFja2V0IGhlYWRlciBhbmQgbWJ1ZgorICogY2hhaW4gcG9pbnRlcnMuLiB0aHVzIHRo
ZSBtYWNyby4KKyAqLworI2RlZmluZSBTQ1RQX0hFQURFUl9UT19DSEFJTihtKSAobSkKKyNkZWZp
bmUgU0NUUF9ERVRBQ0hfSEVBREVSX0ZST01fQ0hBSU4obSkKKyNkZWZpbmUgU0NUUF9IRUFERVJf
TEVOKG0pICgobSktPm1fcGt0aGRyLmxlbikKKyNkZWZpbmUgU0NUUF9HRVRfSEVBREVSX0ZPUl9P
VVRQVVQob19wYWspIDAKKyNkZWZpbmUgU0NUUF9SRUxFQVNFX0hFQURFUihtKQorI2RlZmluZSBT
Q1RQX1JFTEVBU0VfUEtUKG0pCXNjdHBfbV9mcmVlbShtKQorCisjZGVmaW5lIFNDVFBfR0VUX1BL
VF9WUkZJRChtLCB2cmZfaWQpICAoKHZyZl9pZCA9IFNDVFBfREVGQVVMVF9WUkZJRCkgIT0gU0NU
UF9ERUZBVUxUX1ZSRklEKQorCisKKworLyogQXR0YWNoIHRoZSBjaGFpbiBvZiBkYXRhIGludG8g
dGhlIHNlbmRhYmxlIHBhY2tldC4gKi8KKyNkZWZpbmUgU0NUUF9BVFRBQ0hfQ0hBSU4ocGFrLCBt
LCBwYWNrZXRfbGVuZ3RoKSBkbyB7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFrID0gbTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYWstPm1fcGt0aGRyLmxlbiA9IHBhY2tldF9sZW5ndGg7
IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorCisvKiBPdGhlciBtX3Br
dGhkciB0eXBlIHRoaW5ncyAqLworLyogRklYTUUgbmVlZCByZWFsIGRlZmluaXRpb25zICovCisj
ZGVmaW5lIFNDVFBfSVNfSVRfQlJPQURDQVNUKGRzdCwgbSkgMAorLyogT09UQiBvbmx5ICNkZWZp
bmUgU0NUUF9JU19JVF9CUk9BRENBU1QoZHN0LCBtKSAoKG0tPm1fZmxhZ3MgJiBNX1BLVEhEUikg
PyBpbl9icm9hZGNhc3QoZHN0LCBtLT5tX3BrdGhkci5yY3ZpZikgOiAwKSAgQlNEIGRlZiAqLwor
I2RlZmluZSBTQ1RQX0lTX0lUX0xPT1BCQUNLKG0pIDAKKy8qIE9PVEIgT05MWSAjZGVmaW5lIFND
VFBfSVNfSVRfTE9PUEJBQ0sobSkgKChtLT5tX2ZsYWdzICYgTV9QS1RIRFIpICYmICgobS0+bV9w
a3RoZHIucmN2aWYgPT0gTlVMTCkgfHwgKG0tPm1fcGt0aGRyLnJjdmlmLT5pZl90eXBlID09IElG
VF9MT09QKSkpICBCU0QgZGVmICovCisKKworLyogVGhpcyBjb252ZXJ0cyBhbnkgaW5wdXQgcGFj
a2V0IGhlYWRlcgorICogaW50byB0aGUgY2hhaW4gb2YgZGF0YSBob2xkZXJzLCBmb3IgQlNECisg
KiBpdHMgYSBOT1AuCisgKi8KKworLyogZ2V0IHRoZSB2NiBob3AgbGltaXQgKi8KKyNkZWZpbmUg
U0NUUF9HRVRfSExJTShpbnAsIHJvKSAxMjgKKyNkZWZpbmUgSVB2Nl9IT1BfTElNSVQgMTI4CisK
Ky8qIGlzIHRoZSBlbmRwb2ludCB2Nm9ubHk/ICovCisjZGVmaW5lIFNDVFBfSVBWNl9WNk9OTFko
c2N0cF9pbnBjYikJKChzY3RwX2lucGNiKS0+aXBfaW5wLmlucC5pbnBfZmxhZ3MgJiBJTjZQX0lQ
VjZfVjZPTkxZKQorLyogaXMgdGhlIHNvY2tldCBub24tYmxvY2tpbmc/ICovCisjZGVmaW5lIFND
VFBfU09fSVNfTkJJTyhzbykJKChzbyktPnNvX3N0YXRlICYgU1NfTkJJTykKKyNkZWZpbmUgU0NU
UF9TRVRfU09fTkJJTyhzbykJKChzbyktPnNvX3N0YXRlIHw9IFNTX05CSU8pCisjZGVmaW5lIFND
VFBfQ0xFQVJfU09fTkJJTyhzbykJKChzbyktPnNvX3N0YXRlICY9IH5TU19OQklPKQorLyogZ2V0
IHRoZSBzb2NrZXQgdHlwZSAqLworI2RlZmluZSBTQ1RQX1NPX1RZUEUoc28pCSgoc28pLT5zb190
eXBlKQorCisvKiByZXNlcnZlIHNiIHNwYWNlIGZvciBhIHNvY2tldCAqLworI2RlZmluZSBTQ1RQ
X1NPUkVTRVJWRShzbywgc2VuZCwgcmVjdikJc29yZXNlcnZlKHNvLCBzZW5kLCByZWN2KQorCisv
KiB3YWtldXAgYSBzb2NrZXQgKi8KKyNkZWZpbmUgU0NUUF9TT1dBS0VVUChzbykJd2FrZXVwKCYo
c28pLT5zb190aW1lbywgc28pCisvKiBjbGVhciB0aGUgc29ja2V0IGJ1ZmZlciBzdGF0ZSAqLwor
I2RlZmluZSBTQ1RQX1NCX0NMRUFSKHNiKQlcCisJKHNiKS5zYl9jYyA9IDA7CQlcCisJKHNiKS5z
Yl9tYiA9IE5VTEw7CVwKKwkoc2IpLnNiX21iY250ID0gMDsKKworI2RlZmluZSBTQ1RQX1NCX0xJ
TUlUX1JDVihzbykgc28tPnNvX3Jjdi5zYl9oaXdhdAorI2RlZmluZSBTQ1RQX1NCX0xJTUlUX1NO
RChzbykgc28tPnNvX3NuZC5zYl9oaXdhdAorCisjZGVmaW5lIFNDVFBfUkVBRF9SQU5ET00oYnVm
LCBsZW4pCXJlYWRfcmFuZG9tKGJ1ZiwgbGVuKQorCisjZGVmaW5lIFNDVFBfU0hBMV9DVFgJCXN0
cnVjdCBzY3RwX3NoYTFfY29udGV4dAorI2RlZmluZSBTQ1RQX1NIQTFfSU5JVAkJc2N0cF9zaGEx
X2luaXQKKyNkZWZpbmUgU0NUUF9TSEExX1VQREFURQlzY3RwX3NoYTFfdXBkYXRlCisjZGVmaW5l
IFNDVFBfU0hBMV9GSU5BTCh4LHkpCXNjdHBfc2hhMV9maW5hbCgodW5zaWduZWQgY2hhciAqKXgs
IHkpCisKKy8qIHN0YXJ0IE9PVEIgb25seSBzdHVmZiAqLworLyogVE9ETyBJRlRfTE9PUCBpcyBp
biBuZXQvaWZfdHlwZXMuaCBvbiBMaW51eCAqLworI2RlZmluZSBJRlRfTE9PUCAweDE4CisKKy8q
IHNjdHBfcGNiLmggKi8KKworI2lmIGRlZmluZWQoX1dJTjMyKQorI2RlZmluZSBTSFVUX1JEIDEK
KyNkZWZpbmUgU0hVVF9XUiAyCisjZGVmaW5lIFNIVVRfUkRXUiAzCisjZW5kaWYKKyNkZWZpbmUg
UFJVX0ZMVVNIX1JEIFNIVVRfUkQKKyNkZWZpbmUgUFJVX0ZMVVNIX1dSIFNIVVRfV1IKKyNkZWZp
bmUgUFJVX0ZMVVNIX1JEV1IgU0hVVF9SRFdSCisKKy8qIG5ldGluZXQvaXBfdmFyLmggZGVmaW50
aW9ucyBhcmUgYmVoaW5kIGFuIGlmIGRlZmluZWQgZm9yIF9LRVJORUwgb24gRnJlZUJTRCAqLwor
I2RlZmluZQlJUF9SQVdPVVRQVVQJCTB4MgorCisKKy8qIGVuZCBPT1RCIG9ubHkgc3R1ZmYgKi8K
KworI2RlZmluZSBBRl9DT05OIDEyMworc3RydWN0IHNvY2thZGRyX2Nvbm4geworI2lmZGVmIEhB
VkVfU0NPTk5fTEVOCisJdWludDhfdCBzY29ubl9sZW47CisJdWludDhfdCBzY29ubl9mYW1pbHk7
CisjZWxzZQorCXVpbnQxNl90IHNjb25uX2ZhbWlseTsKKyNlbmRpZgorCXVpbnQxNl90IHNjb25u
X3BvcnQ7CisJdm9pZCAqc2Nvbm5fYWRkcjsKK307CisKK3R5cGVkZWYgdm9pZCAqKCpzdGFydF9y
b3V0aW5lX3QpKHZvaWQgKik7CisKK2V4dGVybiBpbnQKK3NjdHBfdXNlcnNwYWNlX3RocmVhZF9j
cmVhdGUodXNlcmxhbmRfdGhyZWFkX3QgKnRocmVhZCwgc3RhcnRfcm91dGluZV90IHN0YXJ0X3Jv
dXRpbmUpOworCit2b2lkCitzY3RwX3VzZXJzcGFjZV9zZXRfdGhyZWFkbmFtZShjb25zdCBjaGFy
ICpuYW1lKTsKKworLyoKKyAqIFNDVFAgcHJvdG9jb2wgc3BlY2lmaWMgbWJ1ZiBmbGFncy4KKyAq
LworI2RlZmluZQlNX05PVElGSUNBVElPTgkJTV9QUk9UTzUJLyogU0NUUCBub3RpZmljYXRpb24g
Ki8KKworLyoKKyAqIElQIG91dHB1dCByb3V0aW5lcworICovCisKKy8qIERlZmluaW5nIFNDVFBf
SVBfSUQgbWFjcm8uCisgICBJbiBuZXRpbmV0L2lwX291dHB1dC5jLCB3ZSBoYXZlIHVfc2hvcnQg
aXBfaWQ7CisgICBJbiBuZXRpbmV0L2lwX3Zhci5oLCB3ZSBoYXZlIGV4dGVybiB1X3Nob3J0CWlw
X2lkOyAoZW5jbG9zZWQgd2l0aGluIF9LRVJORUxfKQorICAgU2VlIHN0YXRpYyBfX2lubGluZSB1
aW50MTZfdCBpcF9uZXdpZCh2b2lkKSBpbiBuZXRpbmV0L2lwX3Zhci5oCisgKi8KKyNkZWZpbmUg
U0NUUF9JUF9JRChpbnApIChpcF9pZCkKKworLyogbmVlZCBzY3RwaGRyIHRvIGdldCBwb3J0IGlu
IFNDVFBfSVBfT1VUUFVULiBzY3RwaGRyIGRlZmluZWQgaW4gc2N0cC5oICAqLworI2luY2x1ZGUg
PG5ldGluZXQvc2N0cC5oPgorZXh0ZXJuIHZvaWQgc2N0cF91c2Vyc3BhY2VfaXBfb3V0cHV0KGlu
dCAqcmVzdWx0LCBzdHJ1Y3QgbWJ1ZiAqb19wYWssCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2N0cF9yb3V0ZV90ICpybywgdm9pZCAqc3RjYiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2cmZfaWQpOworCisjZGVmaW5lIFNDVFBf
SVBfT1VUUFVUKHJlc3VsdCwgb19wYWssIHJvLCBzdGNiLCB2cmZfaWQpIHNjdHBfdXNlcnNwYWNl
X2lwX291dHB1dCgmcmVzdWx0LCBvX3Bhaywgcm8sIHN0Y2IsIHZyZl9pZCk7CisKKyNpZiBkZWZp
bmVkKElORVQ2KQorZXh0ZXJuIHZvaWQgc2N0cF91c2Vyc3BhY2VfaXA2X291dHB1dChpbnQgKnJl
c3VsdCwgc3RydWN0IG1idWYgKm9fcGFrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3Qgcm91dGVfaW42ICpybywgdm9pZCAqc3RjYiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdnJmX2lkKTsKKyNkZWZpbmUgU0NUUF9J
UDZfT1VUUFVUKHJlc3VsdCwgb19wYWssIHJvLCBpZnAsIHN0Y2IsIHZyZl9pZCkgc2N0cF91c2Vy
c3BhY2VfaXA2X291dHB1dCgmcmVzdWx0LCBvX3Bhaywgcm8sIHN0Y2IsIHZyZl9pZCk7CisjZW5k
aWYKKworCisKKyNpZiAwCisjZGVmaW5lIFNDVFBfSVA2X09VVFBVVChyZXN1bHQsIG9fcGFrLCBy
bywgaWZwLCBzdGNiLCB2cmZfaWQpIFwKK3sgXAorCWlmIChzdGNiICYmIHN0Y2ItPnNjdHBfZXAp
IFwKKwkJcmVzdWx0ID0gaXA2X291dHB1dChvX3BhaywgXAorCQkJCSAgICAoKHN0cnVjdCBpbnBj
YiAqKShzdGNiLT5zY3RwX2VwKSktPmluNnBfb3V0cHV0b3B0cywgXAorCQkJCSAgICAocm8pLCAw
LCAwLCBpZnAsIE5VTEwpOyBcCisJZWxzZSBcCisJCXJlc3VsdCA9IGlwNl9vdXRwdXQob19wYWss
IE5VTEwsIChybyksIDAsIDAsIGlmcCwgTlVMTCk7IFwKK30KKyNlbmRpZgorCitzdHJ1Y3QgbWJ1
ZiAqCitzY3RwX2dldF9tYnVmX2Zvcl9tc2codW5zaWduZWQgaW50IHNwYWNlX25lZWRlZCwgaW50
IHdhbnRfaGVhZGVyLCBpbnQgaG93LCBpbnQgYWxsb25lYnVmLCBpbnQgdHlwZSk7CisKKworLyog
d2l0aCB0aGUgY3VycmVudCBpbmNsdWRlZCBmaWxlcywgdGhpcyBpcyBkZWZpbmVkIGluIExpbnV4
IGJ1dAorICogIGluIEZyZWVCU0QsIGl0IGlzIGJlaGluZCBhIF9LRVJORUwgaW4gc3lzL3NvY2tl
dC5oIC4uLgorICovCisjaWYgZGVmaW5lZChfX0RyYWdvbkZseV9fKSB8fCBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fbmF0aXZlX2NsaWVu
dF9fKQorLyogc3RvbGVuIGZyb20gL3Vzci9pbmNsdWRlL3N5cy9zb2NrZXQuaCAqLworI2RlZmlu
ZSBDTVNHX0FMSUdOKG4pICAgX0FMSUdOKG4pCisjZWxpZiBkZWZpbmVkKF9fTmV0QlNEX18pCisj
ZGVmaW5lIENNU0dfQUxJR04obikgICAoKChuKSArIF9fQUxJR05CWVRFUykgJiB+X19BTElHTkJZ
VEVTKQorI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCisjaWYgIWRlZmluZWQoX19EQVJXSU5fQUxJ
R05CWVRFUykKKyNkZWZpbmUJX19EQVJXSU5fQUxJR05CWVRFUwkoc2l6ZW9mKF9fZGFyd2luX3Np
emVfdCkgLSAxKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX0RBUldJTl9BTElHTikKKyNkZWZp
bmUJX19EQVJXSU5fQUxJR04ocCkJKChfX2Rhcndpbl9zaXplX3QpKChjaGFyICopKHVpbnRwdHJf
dCkocCkgKyBfX0RBUldJTl9BTElHTkJZVEVTKSAmfiBfX0RBUldJTl9BTElHTkJZVEVTKQorI2Vu
ZGlmCisKKyNpZiAhZGVmaW5lZChfX0RBUldJTl9BTElHTkJZVEVTMzIpCisjZGVmaW5lIF9fREFS
V0lOX0FMSUdOQllURVMzMiAgICAgKHNpemVvZihfX3VpbnQzMl90KSAtIDEpCisjZW5kaWYKKwor
I2lmICFkZWZpbmVkKF9fREFSV0lOX0FMSUdOMzIpCisjZGVmaW5lIF9fREFSV0lOX0FMSUdOMzIo
cCkgICAgICAgKChfX2Rhcndpbl9zaXplX3QpKChjaGFyICopKHVpbnRwdHJfdCkocCkgKyBfX0RB
UldJTl9BTElHTkJZVEVTMzIpICZ+IF9fREFSV0lOX0FMSUdOQllURVMzMikKKyNlbmRpZgorI2Rl
ZmluZSBDTVNHX0FMSUdOKG4pICAgX19EQVJXSU5fQUxJR04zMihuKQorI2VuZGlmCisjZGVmaW5l
IElfQU1fSEVSRSBcCisgICAgICAgICAgICAgICAgZG8geyBcCisJCQlTQ1RQX1BSSU5URigiJXM6
JWQgYXQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyAsIF9fZnVuY19fKTsgXAorCQl9IHdoaWxl
ICgwKQorCisjaWZuZGVmIHRpbWV2YWxzdWIKKyNkZWZpbmUgdGltZXZhbHN1Yih0cDEsIHRwMikg
ICAgICAgICAgICAgICAgICAgICAgIFwKKwlkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorCQkodHAxKS0+dHZfc2VjIC09ICh0cDIpLT50dl9zZWM7ICAgIFwKKwkJ
KHRwMSktPnR2X3VzZWMgLT0gKHRwMiktPnR2X3VzZWM7ICBcCisJCWlmICgodHAxKS0+dHZfdXNl
YyA8IDApIHsgICAgICAgICAgXAorCQkJKHRwMSktPnR2X3NlYy0tOyAgICAgICAgICAgXAorCQkJ
KHRwMSktPnR2X3VzZWMgKz0gMTAwMDAwMDsgXAorCQl9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKwl9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fbGludXhf
XykKKyNpZiAhZGVmaW5lZChUQUlMUV9GT1JFQUNIX1NBRkUpCisjZGVmaW5lIFRBSUxRX0ZPUkVB
Q0hfU0FGRSh2YXIsIGhlYWQsIGZpZWxkLCB0dmFyKSAgICAgICAgICAgICBcCisgICAgICAgICBm
b3IgKCh2YXIpID0gKChoZWFkKS0+dHFoX2ZpcnN0KTsgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICAgICh2YXIpICYmICgodHZhcikgPSBUQUlMUV9ORVhUKCh2YXIpLCBmaWVsZCks
IDEpOyBcCisgICAgICAgICAgICAgICh2YXIpID0gKHR2YXIpKQorI2VuZGlmCisjaWYgIWRlZmlu
ZWQoTElTVF9GT1JFQUNIX1NBRkUpCisjZGVmaW5lIExJU1RfRk9SRUFDSF9TQUZFKHZhciwgaGVh
ZCwgZmllbGQsIHR2YXIpICAgICAgICAgICAgICBcCisgICAgICAgICBmb3IgKCh2YXIpID0gKCho
ZWFkKS0+bGhfZmlyc3QpOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICh2
YXIpICYmICgodHZhcikgPSBMSVNUX05FWFQoKHZhciksIGZpZWxkKSwgMSk7ICBcCisgICAgICAg
ICAgICAgICh2YXIpID0gKHR2YXIpKQorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fRHJh
Z29uRmx5X18pCisjZGVmaW5lIFRBSUxRX0ZPUkVBQ0hfU0FGRSBUQUlMUV9GT1JFQUNIX01VVEFC
TEUKKyNkZWZpbmUgTElTVF9GT1JFQUNIX1NBRkUgTElTVF9GT1JFQUNIX01VVEFCTEUKKyNlbmRp
ZgorCisjaWYgZGVmaW5lZChfX25hdGl2ZV9jbGllbnRfXykKKyNkZWZpbmUJdGltZXJjbXAodHZw
LCB1dnAsIGNtcCkJCQkJCQlcCisJKCgodHZwKS0+dHZfc2VjID09ICh1dnApLT50dl9zZWMpID8J
CQkJXAorCSAgICAoKHR2cCktPnR2X3VzZWMgY21wICh1dnApLT50dl91c2VjKSA6CQkJXAorCSAg
ICAoKHR2cCktPnR2X3NlYyBjbXAgKHV2cCktPnR2X3NlYykpCisjZW5kaWYKKworI2RlZmluZSBT
Q1RQX0lTX0xJU1RFTklORyhpbnApICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
QUNDRVBUSU5HKSAhPSAwKQorCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19E
cmFnb25GbHlfXykgfHwgZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoX19uYXRpdmVfY2xp
ZW50X18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykgfHwgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmlu
ZWQoX19GdWNoc2lhX18pIHx8IGRlZmluZWQoX19FTVNDUklQVEVOX18pCitpbnQKK3RpbWluZ3Nh
ZmVfYmNtcChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKKyNlbmRpZgorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX291dHB1
dC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3V0cHV0LmMKbmV3IGZpbGUg
bW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwLi44MDBlMTM2Y2I3NjgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vdXRwdXQuYwpAQCAtMCww
ICsxLDE1MDE3IEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1
c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwOCwgYnkgQ2lzY28gU3lzdGVtcywgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJh
bmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAw
OC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIGEpIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwK
KyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKgorICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
CisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lu
Y2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworI2VuZGlmCisKKyNp
bmNsdWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjZW5kaWYKKyNp
bmNsdWRlIDxuZXRpbmV0L3NjdHBfdmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0
bC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9oZWFkZXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0
L3NjdHBfcGNiLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgorI2luY2x1ZGUgPG5l
dGluZXQvc2N0cF9vdXRwdXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdWlvLmg+CisjaW5j
bHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9hdXRoLmg+
CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3RpbWVyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3Rw
X2FzY29uZi5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9pbmRhdGEuaD4KKyNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfYnNkX2FkZHIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaW5wdXQuaD4K
KyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfY3JjMzIuaD4KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9rZHRy
YWNlLmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fbGludXhfXykKKyNkZWZpbmUgX19GQVZPUl9C
U0QgICAgLyogKG9uIFVidW50dSBhdCBsZWFzdCkgZW5hYmxlcyBVRFAgaGVhZGVyIGZpZWxkIG5h
bWVzIGxpa2UgQlNEIGluIFJGQyA3NjggKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoSU5FVCkgfHwg
ZGVmaW5lZChJTkVUNikKKyNpZiAhZGVmaW5lZChfV0lOMzIpCisjaW5jbHVkZSA8bmV0aW5ldC91
ZHAuaD4KKyNlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2luY2x1ZGUg
PG5ldGluZXQvdWRwX3Zhci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvaW5fY2tzdW0uaD4KKyNlbmRp
ZgorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKSAmJiBkZWZpbmVkKElORVQ2KQor
I2luY2x1ZGUgPG5ldGluZXQ2L3NjdHA2X3Zhci5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChfX0FQ
UExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYgIShkZWZpbmVkKEFQUExFX0xF
T1BBUkQpIHx8IGRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpKQorI2RlZmluZSBTQ1RQX01BWF9M
SU5LSERSIDE2CisjZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIFNDVFBfTUFYX0dBUFNfSU5BUlJB
WSA0CitzdHJ1Y3Qgc2Fja190cmFjayB7CisJdWludDhfdCByaWdodF9lZGdlOwkvKiBtZXJnYWJs
ZSBvbiB0aGUgcmlnaHQgZWRnZSAqLworCXVpbnQ4X3QgbGVmdF9lZGdlOwkvKiBtZXJnYWJsZSBv
biB0aGUgbGVmdCBlZGdlICovCisJdWludDhfdCBudW1fZW50cmllczsKKwl1aW50OF90IHNwYXJl
OworCXN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2sgZ2Fwc1tTQ1RQX01BWF9HQVBTX0lOQVJSQVld
OworfTsKKworY29uc3Qgc3RydWN0IHNhY2tfdHJhY2sgc2Fja19hcnJheVsyNTZdID0geworCXsw
LCAwLCAwLCAwLAkJLyogMHgwMCAqLworCQl7ezAsIDB9LAorCQl7MCwgMH0sCisJCXswLCAwfSwK
KwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAxLCAwLAkJLyogMHgwMSAqLworCQl7ezAsIDB9
LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAxLCAw
LAkJLyogMHgwMiAqLworCQl7ezEsIDF9LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9
CisJCX0KKwl9LAorCXsxLCAwLCAxLCAwLAkJLyogMHgwMyAqLworCQl7ezAsIDF9LAorCQl7MCwg
MH0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAxLCAwLAkJLyogMHgw
NCAqLworCQl7ezIsIDJ9LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9
LAorCXsxLCAwLCAyLCAwLAkJLyogMHgwNSAqLworCQl7ezAsIDB9LAorCQl7MiwgMn0sCisJCXsw
LCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAxLCAwLAkJLyogMHgwNiAqLworCQl7
ezEsIDJ9LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAw
LCAxLCAwLAkJLyogMHgwNyAqLworCQl7ezAsIDJ9LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJ
ezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAxLCAwLAkJLyogMHgwOCAqLworCQl7ezMsIDN9LAor
CQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAyLCAwLAkJ
LyogMHgwOSAqLworCQl7ezAsIDB9LAorCQl7MywgM30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJ
CX0KKwl9LAorCXswLCAwLCAyLCAwLAkJLyogMHgwYSAqLworCQl7ezEsIDF9LAorCQl7MywgM30s
CisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAyLCAwLAkJLyogMHgwYiAq
LworCQl7ezAsIDF9LAorCQl7MywgM30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAor
CXswLCAwLCAxLCAwLAkJLyogMHgwYyAqLworCQl7ezIsIDN9LAorCQl7MCwgMH0sCisJCXswLCAw
fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAyLCAwLAkJLyogMHgwZCAqLworCQl7ezAs
IDB9LAorCQl7MiwgM30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAx
LCAwLAkJLyogMHgwZSAqLworCQl7ezEsIDN9LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAs
IDB9CisJCX0KKwl9LAorCXsxLCAwLCAxLCAwLAkJLyogMHgwZiAqLworCQl7ezAsIDN9LAorCQl7
MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAxLCAwLAkJLyog
MHgxMCAqLworCQl7ezQsIDR9LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0K
Kwl9LAorCXsxLCAwLCAyLCAwLAkJLyogMHgxMSAqLworCQl7ezAsIDB9LAorCQl7NCwgNH0sCisJ
CXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAyLCAwLAkJLyogMHgxMiAqLwor
CQl7ezEsIDF9LAorCQl7NCwgNH0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsx
LCAwLCAyLCAwLAkJLyogMHgxMyAqLworCQl7ezAsIDF9LAorCQl7NCwgNH0sCisJCXswLCAwfSwK
KwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAyLCAwLAkJLyogMHgxNCAqLworCQl7ezIsIDJ9
LAorCQl7NCwgNH0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAzLCAw
LAkJLyogMHgxNSAqLworCQl7ezAsIDB9LAorCQl7MiwgMn0sCisJCXs0LCA0fSwKKwkJezAsIDB9
CisJCX0KKwl9LAorCXswLCAwLCAyLCAwLAkJLyogMHgxNiAqLworCQl7ezEsIDJ9LAorCQl7NCwg
NH0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAyLCAwLAkJLyogMHgx
NyAqLworCQl7ezAsIDJ9LAorCQl7NCwgNH0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9
LAorCXswLCAwLCAxLCAwLAkJLyogMHgxOCAqLworCQl7ezMsIDR9LAorCQl7MCwgMH0sCisJCXsw
LCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAyLCAwLAkJLyogMHgxOSAqLworCQl7
ezAsIDB9LAorCQl7MywgNH0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAw
LCAyLCAwLAkJLyogMHgxYSAqLworCQl7ezEsIDF9LAorCQl7MywgNH0sCisJCXswLCAwfSwKKwkJ
ezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAyLCAwLAkJLyogMHgxYiAqLworCQl7ezAsIDF9LAor
CQl7MywgNH0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAxLCAwLAkJ
LyogMHgxYyAqLworCQl7ezIsIDR9LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJ
CX0KKwl9LAorCXsxLCAwLCAyLCAwLAkJLyogMHgxZCAqLworCQl7ezAsIDB9LAorCQl7MiwgNH0s
CisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAxLCAwLAkJLyogMHgxZSAq
LworCQl7ezEsIDR9LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAor
CXsxLCAwLCAxLCAwLAkJLyogMHgxZiAqLworCQl7ezAsIDR9LAorCQl7MCwgMH0sCisJCXswLCAw
fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAxLCAwLAkJLyogMHgyMCAqLworCQl7ezUs
IDV9LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAy
LCAwLAkJLyogMHgyMSAqLworCQl7ezAsIDB9LAorCQl7NSwgNX0sCisJCXswLCAwfSwKKwkJezAs
IDB9CisJCX0KKwl9LAorCXswLCAwLCAyLCAwLAkJLyogMHgyMiAqLworCQl7ezEsIDF9LAorCQl7
NSwgNX0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAyLCAwLAkJLyog
MHgyMyAqLworCQl7ezAsIDF9LAorCQl7NSwgNX0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0K
Kwl9LAorCXswLCAwLCAyLCAwLAkJLyogMHgyNCAqLworCQl7ezIsIDJ9LAorCQl7NSwgNX0sCisJ
CXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAzLCAwLAkJLyogMHgyNSAqLwor
CQl7ezAsIDB9LAorCQl7MiwgMn0sCisJCXs1LCA1fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsw
LCAwLCAyLCAwLAkJLyogMHgyNiAqLworCQl7ezEsIDJ9LAorCQl7NSwgNX0sCisJCXswLCAwfSwK
KwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAyLCAwLAkJLyogMHgyNyAqLworCQl7ezAsIDJ9
LAorCQl7NSwgNX0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAyLCAw
LAkJLyogMHgyOCAqLworCQl7ezMsIDN9LAorCQl7NSwgNX0sCisJCXswLCAwfSwKKwkJezAsIDB9
CisJCX0KKwl9LAorCXsxLCAwLCAzLCAwLAkJLyogMHgyOSAqLworCQl7ezAsIDB9LAorCQl7Mywg
M30sCisJCXs1LCA1fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAzLCAwLAkJLyogMHgy
YSAqLworCQl7ezEsIDF9LAorCQl7MywgM30sCisJCXs1LCA1fSwKKwkJezAsIDB9CisJCX0KKwl9
LAorCXsxLCAwLCAzLCAwLAkJLyogMHgyYiAqLworCQl7ezAsIDF9LAorCQl7MywgM30sCisJCXs1
LCA1fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAyLCAwLAkJLyogMHgyYyAqLworCQl7
ezIsIDN9LAorCQl7NSwgNX0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAw
LCAzLCAwLAkJLyogMHgyZCAqLworCQl7ezAsIDB9LAorCQl7MiwgM30sCisJCXs1LCA1fSwKKwkJ
ezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAyLCAwLAkJLyogMHgyZSAqLworCQl7ezEsIDN9LAor
CQl7NSwgNX0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAyLCAwLAkJ
LyogMHgyZiAqLworCQl7ezAsIDN9LAorCQl7NSwgNX0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJ
CX0KKwl9LAorCXswLCAwLCAxLCAwLAkJLyogMHgzMCAqLworCQl7ezQsIDV9LAorCQl7MCwgMH0s
CisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAyLCAwLAkJLyogMHgzMSAq
LworCQl7ezAsIDB9LAorCQl7NCwgNX0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAor
CXswLCAwLCAyLCAwLAkJLyogMHgzMiAqLworCQl7ezEsIDF9LAorCQl7NCwgNX0sCisJCXswLCAw
fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAyLCAwLAkJLyogMHgzMyAqLworCQl7ezAs
IDF9LAorCQl7NCwgNX0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAy
LCAwLAkJLyogMHgzNCAqLworCQl7ezIsIDJ9LAorCQl7NCwgNX0sCisJCXswLCAwfSwKKwkJezAs
IDB9CisJCX0KKwl9LAorCXsxLCAwLCAzLCAwLAkJLyogMHgzNSAqLworCQl7ezAsIDB9LAorCQl7
MiwgMn0sCisJCXs0LCA1fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAyLCAwLAkJLyog
MHgzNiAqLworCQl7ezEsIDJ9LAorCQl7NCwgNX0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0K
Kwl9LAorCXsxLCAwLCAyLCAwLAkJLyogMHgzNyAqLworCQl7ezAsIDJ9LAorCQl7NCwgNX0sCisJ
CXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAxLCAwLAkJLyogMHgzOCAqLwor
CQl7ezMsIDV9LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsx
LCAwLCAyLCAwLAkJLyogMHgzOSAqLworCQl7ezAsIDB9LAorCQl7MywgNX0sCisJCXswLCAwfSwK
KwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAyLCAwLAkJLyogMHgzYSAqLworCQl7ezEsIDF9
LAorCQl7MywgNX0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAyLCAw
LAkJLyogMHgzYiAqLworCQl7ezAsIDF9LAorCQl7MywgNX0sCisJCXswLCAwfSwKKwkJezAsIDB9
CisJCX0KKwl9LAorCXswLCAwLCAxLCAwLAkJLyogMHgzYyAqLworCQl7ezIsIDV9LAorCQl7MCwg
MH0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAyLCAwLAkJLyogMHgz
ZCAqLworCQl7ezAsIDB9LAorCQl7MiwgNX0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9
LAorCXswLCAwLCAxLCAwLAkJLyogMHgzZSAqLworCQl7ezEsIDV9LAorCQl7MCwgMH0sCisJCXsw
LCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAxLCAwLAkJLyogMHgzZiAqLworCQl7
ezAsIDV9LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAw
LCAxLCAwLAkJLyogMHg0MCAqLworCQl7ezYsIDZ9LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJ
ezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAyLCAwLAkJLyogMHg0MSAqLworCQl7ezAsIDB9LAor
CQl7NiwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAyLCAwLAkJ
LyogMHg0MiAqLworCQl7ezEsIDF9LAorCQl7NiwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJ
CX0KKwl9LAorCXsxLCAwLCAyLCAwLAkJLyogMHg0MyAqLworCQl7ezAsIDF9LAorCQl7NiwgNn0s
CisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAyLCAwLAkJLyogMHg0NCAq
LworCQl7ezIsIDJ9LAorCQl7NiwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAor
CXsxLCAwLCAzLCAwLAkJLyogMHg0NSAqLworCQl7ezAsIDB9LAorCQl7MiwgMn0sCisJCXs2LCA2
fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAyLCAwLAkJLyogMHg0NiAqLworCQl7ezEs
IDJ9LAorCQl7NiwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAy
LCAwLAkJLyogMHg0NyAqLworCQl7ezAsIDJ9LAorCQl7NiwgNn0sCisJCXswLCAwfSwKKwkJezAs
IDB9CisJCX0KKwl9LAorCXswLCAwLCAyLCAwLAkJLyogMHg0OCAqLworCQl7ezMsIDN9LAorCQl7
NiwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAzLCAwLAkJLyog
MHg0OSAqLworCQl7ezAsIDB9LAorCQl7MywgM30sCisJCXs2LCA2fSwKKwkJezAsIDB9CisJCX0K
Kwl9LAorCXswLCAwLCAzLCAwLAkJLyogMHg0YSAqLworCQl7ezEsIDF9LAorCQl7MywgM30sCisJ
CXs2LCA2fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAzLCAwLAkJLyogMHg0YiAqLwor
CQl7ezAsIDF9LAorCQl7MywgM30sCisJCXs2LCA2fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsw
LCAwLCAyLCAwLAkJLyogMHg0YyAqLworCQl7ezIsIDN9LAorCQl7NiwgNn0sCisJCXswLCAwfSwK
KwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAzLCAwLAkJLyogMHg0ZCAqLworCQl7ezAsIDB9
LAorCQl7MiwgM30sCisJCXs2LCA2fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAyLCAw
LAkJLyogMHg0ZSAqLworCQl7ezEsIDN9LAorCQl7NiwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9
CisJCX0KKwl9LAorCXsxLCAwLCAyLCAwLAkJLyogMHg0ZiAqLworCQl7ezAsIDN9LAorCQl7Niwg
Nn0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAyLCAwLAkJLyogMHg1
MCAqLworCQl7ezQsIDR9LAorCQl7NiwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9
LAorCXsxLCAwLCAzLCAwLAkJLyogMHg1MSAqLworCQl7ezAsIDB9LAorCQl7NCwgNH0sCisJCXs2
LCA2fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAzLCAwLAkJLyogMHg1MiAqLworCQl7
ezEsIDF9LAorCQl7NCwgNH0sCisJCXs2LCA2fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAw
LCAzLCAwLAkJLyogMHg1MyAqLworCQl7ezAsIDF9LAorCQl7NCwgNH0sCisJCXs2LCA2fSwKKwkJ
ezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAzLCAwLAkJLyogMHg1NCAqLworCQl7ezIsIDJ9LAor
CQl7NCwgNH0sCisJCXs2LCA2fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCA0LCAwLAkJ
LyogMHg1NSAqLworCQl7ezAsIDB9LAorCQl7MiwgMn0sCisJCXs0LCA0fSwKKwkJezYsIDZ9CisJ
CX0KKwl9LAorCXswLCAwLCAzLCAwLAkJLyogMHg1NiAqLworCQl7ezEsIDJ9LAorCQl7NCwgNH0s
CisJCXs2LCA2fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAzLCAwLAkJLyogMHg1NyAq
LworCQl7ezAsIDJ9LAorCQl7NCwgNH0sCisJCXs2LCA2fSwKKwkJezAsIDB9CisJCX0KKwl9LAor
CXswLCAwLCAyLCAwLAkJLyogMHg1OCAqLworCQl7ezMsIDR9LAorCQl7NiwgNn0sCisJCXswLCAw
fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAzLCAwLAkJLyogMHg1OSAqLworCQl7ezAs
IDB9LAorCQl7MywgNH0sCisJCXs2LCA2fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAz
LCAwLAkJLyogMHg1YSAqLworCQl7ezEsIDF9LAorCQl7MywgNH0sCisJCXs2LCA2fSwKKwkJezAs
IDB9CisJCX0KKwl9LAorCXsxLCAwLCAzLCAwLAkJLyogMHg1YiAqLworCQl7ezAsIDF9LAorCQl7
MywgNH0sCisJCXs2LCA2fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAyLCAwLAkJLyog
MHg1YyAqLworCQl7ezIsIDR9LAorCQl7NiwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0K
Kwl9LAorCXsxLCAwLCAzLCAwLAkJLyogMHg1ZCAqLworCQl7ezAsIDB9LAorCQl7MiwgNH0sCisJ
CXs2LCA2fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAyLCAwLAkJLyogMHg1ZSAqLwor
CQl7ezEsIDR9LAorCQl7NiwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsx
LCAwLCAyLCAwLAkJLyogMHg1ZiAqLworCQl7ezAsIDR9LAorCQl7NiwgNn0sCisJCXswLCAwfSwK
KwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAxLCAwLAkJLyogMHg2MCAqLworCQl7ezUsIDZ9
LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAyLCAw
LAkJLyogMHg2MSAqLworCQl7ezAsIDB9LAorCQl7NSwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9
CisJCX0KKwl9LAorCXswLCAwLCAyLCAwLAkJLyogMHg2MiAqLworCQl7ezEsIDF9LAorCQl7NSwg
Nn0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAyLCAwLAkJLyogMHg2
MyAqLworCQl7ezAsIDF9LAorCQl7NSwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9
LAorCXswLCAwLCAyLCAwLAkJLyogMHg2NCAqLworCQl7ezIsIDJ9LAorCQl7NSwgNn0sCisJCXsw
LCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAzLCAwLAkJLyogMHg2NSAqLworCQl7
ezAsIDB9LAorCQl7MiwgMn0sCisJCXs1LCA2fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAw
LCAyLCAwLAkJLyogMHg2NiAqLworCQl7ezEsIDJ9LAorCQl7NSwgNn0sCisJCXswLCAwfSwKKwkJ
ezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAyLCAwLAkJLyogMHg2NyAqLworCQl7ezAsIDJ9LAor
CQl7NSwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAyLCAwLAkJ
LyogMHg2OCAqLworCQl7ezMsIDN9LAorCQl7NSwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJ
CX0KKwl9LAorCXsxLCAwLCAzLCAwLAkJLyogMHg2OSAqLworCQl7ezAsIDB9LAorCQl7MywgM30s
CisJCXs1LCA2fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAzLCAwLAkJLyogMHg2YSAq
LworCQl7ezEsIDF9LAorCQl7MywgM30sCisJCXs1LCA2fSwKKwkJezAsIDB9CisJCX0KKwl9LAor
CXsxLCAwLCAzLCAwLAkJLyogMHg2YiAqLworCQl7ezAsIDF9LAorCQl7MywgM30sCisJCXs1LCA2
fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAyLCAwLAkJLyogMHg2YyAqLworCQl7ezIs
IDN9LAorCQl7NSwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAz
LCAwLAkJLyogMHg2ZCAqLworCQl7ezAsIDB9LAorCQl7MiwgM30sCisJCXs1LCA2fSwKKwkJezAs
IDB9CisJCX0KKwl9LAorCXswLCAwLCAyLCAwLAkJLyogMHg2ZSAqLworCQl7ezEsIDN9LAorCQl7
NSwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAyLCAwLAkJLyog
MHg2ZiAqLworCQl7ezAsIDN9LAorCQl7NSwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0K
Kwl9LAorCXswLCAwLCAxLCAwLAkJLyogMHg3MCAqLworCQl7ezQsIDZ9LAorCQl7MCwgMH0sCisJ
CXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAyLCAwLAkJLyogMHg3MSAqLwor
CQl7ezAsIDB9LAorCQl7NCwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsw
LCAwLCAyLCAwLAkJLyogMHg3MiAqLworCQl7ezEsIDF9LAorCQl7NCwgNn0sCisJCXswLCAwfSwK
KwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAyLCAwLAkJLyogMHg3MyAqLworCQl7ezAsIDF9
LAorCQl7NCwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAyLCAw
LAkJLyogMHg3NCAqLworCQl7ezIsIDJ9LAorCQl7NCwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9
CisJCX0KKwl9LAorCXsxLCAwLCAzLCAwLAkJLyogMHg3NSAqLworCQl7ezAsIDB9LAorCQl7Miwg
Mn0sCisJCXs0LCA2fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAyLCAwLAkJLyogMHg3
NiAqLworCQl7ezEsIDJ9LAorCQl7NCwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9
LAorCXsxLCAwLCAyLCAwLAkJLyogMHg3NyAqLworCQl7ezAsIDJ9LAorCQl7NCwgNn0sCisJCXsw
LCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAxLCAwLAkJLyogMHg3OCAqLworCQl7
ezMsIDZ9LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAw
LCAyLCAwLAkJLyogMHg3OSAqLworCQl7ezAsIDB9LAorCQl7MywgNn0sCisJCXswLCAwfSwKKwkJ
ezAsIDB9CisJCX0KKwl9LAorCXswLCAwLCAyLCAwLAkJLyogMHg3YSAqLworCQl7ezEsIDF9LAor
CQl7MywgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAyLCAwLAkJ
LyogMHg3YiAqLworCQl7ezAsIDF9LAorCQl7MywgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJ
CX0KKwl9LAorCXswLCAwLCAxLCAwLAkJLyogMHg3YyAqLworCQl7ezIsIDZ9LAorCQl7MCwgMH0s
CisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAyLCAwLAkJLyogMHg3ZCAq
LworCQl7ezAsIDB9LAorCQl7MiwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAor
CXswLCAwLCAxLCAwLAkJLyogMHg3ZSAqLworCQl7ezEsIDZ9LAorCQl7MCwgMH0sCisJCXswLCAw
fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAwLCAxLCAwLAkJLyogMHg3ZiAqLworCQl7ezAs
IDZ9LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAx
LCAwLAkJLyogMHg4MCAqLworCQl7ezcsIDd9LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAs
IDB9CisJCX0KKwl9LAorCXsxLCAxLCAyLCAwLAkJLyogMHg4MSAqLworCQl7ezAsIDB9LAorCQl7
NywgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAyLCAwLAkJLyog
MHg4MiAqLworCQl7ezEsIDF9LAorCQl7NywgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0K
Kwl9LAorCXsxLCAxLCAyLCAwLAkJLyogMHg4MyAqLworCQl7ezAsIDF9LAorCQl7NywgN30sCisJ
CXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAyLCAwLAkJLyogMHg4NCAqLwor
CQl7ezIsIDJ9LAorCQl7NywgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsx
LCAxLCAzLCAwLAkJLyogMHg4NSAqLworCQl7ezAsIDB9LAorCQl7MiwgMn0sCisJCXs3LCA3fSwK
KwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAyLCAwLAkJLyogMHg4NiAqLworCQl7ezEsIDJ9
LAorCQl7NywgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAyLCAw
LAkJLyogMHg4NyAqLworCQl7ezAsIDJ9LAorCQl7NywgN30sCisJCXswLCAwfSwKKwkJezAsIDB9
CisJCX0KKwl9LAorCXswLCAxLCAyLCAwLAkJLyogMHg4OCAqLworCQl7ezMsIDN9LAorCQl7Nywg
N30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAzLCAwLAkJLyogMHg4
OSAqLworCQl7ezAsIDB9LAorCQl7MywgM30sCisJCXs3LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9
LAorCXswLCAxLCAzLCAwLAkJLyogMHg4YSAqLworCQl7ezEsIDF9LAorCQl7MywgM30sCisJCXs3
LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAzLCAwLAkJLyogMHg4YiAqLworCQl7
ezAsIDF9LAorCQl7MywgM30sCisJCXs3LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAx
LCAyLCAwLAkJLyogMHg4YyAqLworCQl7ezIsIDN9LAorCQl7NywgN30sCisJCXswLCAwfSwKKwkJ
ezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAzLCAwLAkJLyogMHg4ZCAqLworCQl7ezAsIDB9LAor
CQl7MiwgM30sCisJCXs3LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAyLCAwLAkJ
LyogMHg4ZSAqLworCQl7ezEsIDN9LAorCQl7NywgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJ
CX0KKwl9LAorCXsxLCAxLCAyLCAwLAkJLyogMHg4ZiAqLworCQl7ezAsIDN9LAorCQl7NywgN30s
CisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAyLCAwLAkJLyogMHg5MCAq
LworCQl7ezQsIDR9LAorCQl7NywgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAor
CXsxLCAxLCAzLCAwLAkJLyogMHg5MSAqLworCQl7ezAsIDB9LAorCQl7NCwgNH0sCisJCXs3LCA3
fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAzLCAwLAkJLyogMHg5MiAqLworCQl7ezEs
IDF9LAorCQl7NCwgNH0sCisJCXs3LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAz
LCAwLAkJLyogMHg5MyAqLworCQl7ezAsIDF9LAorCQl7NCwgNH0sCisJCXs3LCA3fSwKKwkJezAs
IDB9CisJCX0KKwl9LAorCXswLCAxLCAzLCAwLAkJLyogMHg5NCAqLworCQl7ezIsIDJ9LAorCQl7
NCwgNH0sCisJCXs3LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCA0LCAwLAkJLyog
MHg5NSAqLworCQl7ezAsIDB9LAorCQl7MiwgMn0sCisJCXs0LCA0fSwKKwkJezcsIDd9CisJCX0K
Kwl9LAorCXswLCAxLCAzLCAwLAkJLyogMHg5NiAqLworCQl7ezEsIDJ9LAorCQl7NCwgNH0sCisJ
CXs3LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAzLCAwLAkJLyogMHg5NyAqLwor
CQl7ezAsIDJ9LAorCQl7NCwgNH0sCisJCXs3LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsw
LCAxLCAyLCAwLAkJLyogMHg5OCAqLworCQl7ezMsIDR9LAorCQl7NywgN30sCisJCXswLCAwfSwK
KwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAzLCAwLAkJLyogMHg5OSAqLworCQl7ezAsIDB9
LAorCQl7MywgNH0sCisJCXs3LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAzLCAw
LAkJLyogMHg5YSAqLworCQl7ezEsIDF9LAorCQl7MywgNH0sCisJCXs3LCA3fSwKKwkJezAsIDB9
CisJCX0KKwl9LAorCXsxLCAxLCAzLCAwLAkJLyogMHg5YiAqLworCQl7ezAsIDF9LAorCQl7Mywg
NH0sCisJCXs3LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAyLCAwLAkJLyogMHg5
YyAqLworCQl7ezIsIDR9LAorCQl7NywgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9
LAorCXsxLCAxLCAzLCAwLAkJLyogMHg5ZCAqLworCQl7ezAsIDB9LAorCQl7MiwgNH0sCisJCXs3
LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAyLCAwLAkJLyogMHg5ZSAqLworCQl7
ezEsIDR9LAorCQl7NywgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAx
LCAyLCAwLAkJLyogMHg5ZiAqLworCQl7ezAsIDR9LAorCQl7NywgN30sCisJCXswLCAwfSwKKwkJ
ezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAyLCAwLAkJLyogMHhhMCAqLworCQl7ezUsIDV9LAor
CQl7NywgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAzLCAwLAkJ
LyogMHhhMSAqLworCQl7ezAsIDB9LAorCQl7NSwgNX0sCisJCXs3LCA3fSwKKwkJezAsIDB9CisJ
CX0KKwl9LAorCXswLCAxLCAzLCAwLAkJLyogMHhhMiAqLworCQl7ezEsIDF9LAorCQl7NSwgNX0s
CisJCXs3LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAzLCAwLAkJLyogMHhhMyAq
LworCQl7ezAsIDF9LAorCQl7NSwgNX0sCisJCXs3LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAor
CXswLCAxLCAzLCAwLAkJLyogMHhhNCAqLworCQl7ezIsIDJ9LAorCQl7NSwgNX0sCisJCXs3LCA3
fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCA0LCAwLAkJLyogMHhhNSAqLworCQl7ezAs
IDB9LAorCQl7MiwgMn0sCisJCXs1LCA1fSwKKwkJezcsIDd9CisJCX0KKwl9LAorCXswLCAxLCAz
LCAwLAkJLyogMHhhNiAqLworCQl7ezEsIDJ9LAorCQl7NSwgNX0sCisJCXs3LCA3fSwKKwkJezAs
IDB9CisJCX0KKwl9LAorCXsxLCAxLCAzLCAwLAkJLyogMHhhNyAqLworCQl7ezAsIDJ9LAorCQl7
NSwgNX0sCisJCXs3LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAzLCAwLAkJLyog
MHhhOCAqLworCQl7ezMsIDN9LAorCQl7NSwgNX0sCisJCXs3LCA3fSwKKwkJezAsIDB9CisJCX0K
Kwl9LAorCXsxLCAxLCA0LCAwLAkJLyogMHhhOSAqLworCQl7ezAsIDB9LAorCQl7MywgM30sCisJ
CXs1LCA1fSwKKwkJezcsIDd9CisJCX0KKwl9LAorCXswLCAxLCA0LCAwLAkJLyogMHhhYSAqLwor
CQl7ezEsIDF9LAorCQl7MywgM30sCisJCXs1LCA1fSwKKwkJezcsIDd9CisJCX0KKwl9LAorCXsx
LCAxLCA0LCAwLAkJLyogMHhhYiAqLworCQl7ezAsIDF9LAorCQl7MywgM30sCisJCXs1LCA1fSwK
KwkJezcsIDd9CisJCX0KKwl9LAorCXswLCAxLCAzLCAwLAkJLyogMHhhYyAqLworCQl7ezIsIDN9
LAorCQl7NSwgNX0sCisJCXs3LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCA0LCAw
LAkJLyogMHhhZCAqLworCQl7ezAsIDB9LAorCQl7MiwgM30sCisJCXs1LCA1fSwKKwkJezcsIDd9
CisJCX0KKwl9LAorCXswLCAxLCAzLCAwLAkJLyogMHhhZSAqLworCQl7ezEsIDN9LAorCQl7NSwg
NX0sCisJCXs3LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAzLCAwLAkJLyogMHhh
ZiAqLworCQl7ezAsIDN9LAorCQl7NSwgNX0sCisJCXs3LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9
LAorCXswLCAxLCAyLCAwLAkJLyogMHhiMCAqLworCQl7ezQsIDV9LAorCQl7NywgN30sCisJCXsw
LCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAzLCAwLAkJLyogMHhiMSAqLworCQl7
ezAsIDB9LAorCQl7NCwgNX0sCisJCXs3LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAx
LCAzLCAwLAkJLyogMHhiMiAqLworCQl7ezEsIDF9LAorCQl7NCwgNX0sCisJCXs3LCA3fSwKKwkJ
ezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAzLCAwLAkJLyogMHhiMyAqLworCQl7ezAsIDF9LAor
CQl7NCwgNX0sCisJCXs3LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAzLCAwLAkJ
LyogMHhiNCAqLworCQl7ezIsIDJ9LAorCQl7NCwgNX0sCisJCXs3LCA3fSwKKwkJezAsIDB9CisJ
CX0KKwl9LAorCXsxLCAxLCA0LCAwLAkJLyogMHhiNSAqLworCQl7ezAsIDB9LAorCQl7MiwgMn0s
CisJCXs0LCA1fSwKKwkJezcsIDd9CisJCX0KKwl9LAorCXswLCAxLCAzLCAwLAkJLyogMHhiNiAq
LworCQl7ezEsIDJ9LAorCQl7NCwgNX0sCisJCXs3LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAor
CXsxLCAxLCAzLCAwLAkJLyogMHhiNyAqLworCQl7ezAsIDJ9LAorCQl7NCwgNX0sCisJCXs3LCA3
fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAyLCAwLAkJLyogMHhiOCAqLworCQl7ezMs
IDV9LAorCQl7NywgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAz
LCAwLAkJLyogMHhiOSAqLworCQl7ezAsIDB9LAorCQl7MywgNX0sCisJCXs3LCA3fSwKKwkJezAs
IDB9CisJCX0KKwl9LAorCXswLCAxLCAzLCAwLAkJLyogMHhiYSAqLworCQl7ezEsIDF9LAorCQl7
MywgNX0sCisJCXs3LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAzLCAwLAkJLyog
MHhiYiAqLworCQl7ezAsIDF9LAorCQl7MywgNX0sCisJCXs3LCA3fSwKKwkJezAsIDB9CisJCX0K
Kwl9LAorCXswLCAxLCAyLCAwLAkJLyogMHhiYyAqLworCQl7ezIsIDV9LAorCQl7NywgN30sCisJ
CXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAzLCAwLAkJLyogMHhiZCAqLwor
CQl7ezAsIDB9LAorCQl7MiwgNX0sCisJCXs3LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsw
LCAxLCAyLCAwLAkJLyogMHhiZSAqLworCQl7ezEsIDV9LAorCQl7NywgN30sCisJCXswLCAwfSwK
KwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAyLCAwLAkJLyogMHhiZiAqLworCQl7ezAsIDV9
LAorCQl7NywgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAxLCAw
LAkJLyogMHhjMCAqLworCQl7ezYsIDd9LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9
CisJCX0KKwl9LAorCXsxLCAxLCAyLCAwLAkJLyogMHhjMSAqLworCQl7ezAsIDB9LAorCQl7Niwg
N30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAyLCAwLAkJLyogMHhj
MiAqLworCQl7ezEsIDF9LAorCQl7NiwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9
LAorCXsxLCAxLCAyLCAwLAkJLyogMHhjMyAqLworCQl7ezAsIDF9LAorCQl7NiwgN30sCisJCXsw
LCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAyLCAwLAkJLyogMHhjNCAqLworCQl7
ezIsIDJ9LAorCQl7NiwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAx
LCAzLCAwLAkJLyogMHhjNSAqLworCQl7ezAsIDB9LAorCQl7MiwgMn0sCisJCXs2LCA3fSwKKwkJ
ezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAyLCAwLAkJLyogMHhjNiAqLworCQl7ezEsIDJ9LAor
CQl7NiwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAyLCAwLAkJ
LyogMHhjNyAqLworCQl7ezAsIDJ9LAorCQl7NiwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJ
CX0KKwl9LAorCXswLCAxLCAyLCAwLAkJLyogMHhjOCAqLworCQl7ezMsIDN9LAorCQl7NiwgN30s
CisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAzLCAwLAkJLyogMHhjOSAq
LworCQl7ezAsIDB9LAorCQl7MywgM30sCisJCXs2LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAor
CXswLCAxLCAzLCAwLAkJLyogMHhjYSAqLworCQl7ezEsIDF9LAorCQl7MywgM30sCisJCXs2LCA3
fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAzLCAwLAkJLyogMHhjYiAqLworCQl7ezAs
IDF9LAorCQl7MywgM30sCisJCXs2LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAy
LCAwLAkJLyogMHhjYyAqLworCQl7ezIsIDN9LAorCQl7NiwgN30sCisJCXswLCAwfSwKKwkJezAs
IDB9CisJCX0KKwl9LAorCXsxLCAxLCAzLCAwLAkJLyogMHhjZCAqLworCQl7ezAsIDB9LAorCQl7
MiwgM30sCisJCXs2LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAyLCAwLAkJLyog
MHhjZSAqLworCQl7ezEsIDN9LAorCQl7NiwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0K
Kwl9LAorCXsxLCAxLCAyLCAwLAkJLyogMHhjZiAqLworCQl7ezAsIDN9LAorCQl7NiwgN30sCisJ
CXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAyLCAwLAkJLyogMHhkMCAqLwor
CQl7ezQsIDR9LAorCQl7NiwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsx
LCAxLCAzLCAwLAkJLyogMHhkMSAqLworCQl7ezAsIDB9LAorCQl7NCwgNH0sCisJCXs2LCA3fSwK
KwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAzLCAwLAkJLyogMHhkMiAqLworCQl7ezEsIDF9
LAorCQl7NCwgNH0sCisJCXs2LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAzLCAw
LAkJLyogMHhkMyAqLworCQl7ezAsIDF9LAorCQl7NCwgNH0sCisJCXs2LCA3fSwKKwkJezAsIDB9
CisJCX0KKwl9LAorCXswLCAxLCAzLCAwLAkJLyogMHhkNCAqLworCQl7ezIsIDJ9LAorCQl7NCwg
NH0sCisJCXs2LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCA0LCAwLAkJLyogMHhk
NSAqLworCQl7ezAsIDB9LAorCQl7MiwgMn0sCisJCXs0LCA0fSwKKwkJezYsIDd9CisJCX0KKwl9
LAorCXswLCAxLCAzLCAwLAkJLyogMHhkNiAqLworCQl7ezEsIDJ9LAorCQl7NCwgNH0sCisJCXs2
LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAzLCAwLAkJLyogMHhkNyAqLworCQl7
ezAsIDJ9LAorCQl7NCwgNH0sCisJCXs2LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAx
LCAyLCAwLAkJLyogMHhkOCAqLworCQl7ezMsIDR9LAorCQl7NiwgN30sCisJCXswLCAwfSwKKwkJ
ezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAzLCAwLAkJLyogMHhkOSAqLworCQl7ezAsIDB9LAor
CQl7MywgNH0sCisJCXs2LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAzLCAwLAkJ
LyogMHhkYSAqLworCQl7ezEsIDF9LAorCQl7MywgNH0sCisJCXs2LCA3fSwKKwkJezAsIDB9CisJ
CX0KKwl9LAorCXsxLCAxLCAzLCAwLAkJLyogMHhkYiAqLworCQl7ezAsIDF9LAorCQl7MywgNH0s
CisJCXs2LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAyLCAwLAkJLyogMHhkYyAq
LworCQl7ezIsIDR9LAorCQl7NiwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAor
CXsxLCAxLCAzLCAwLAkJLyogMHhkZCAqLworCQl7ezAsIDB9LAorCQl7MiwgNH0sCisJCXs2LCA3
fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAyLCAwLAkJLyogMHhkZSAqLworCQl7ezEs
IDR9LAorCQl7NiwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAy
LCAwLAkJLyogMHhkZiAqLworCQl7ezAsIDR9LAorCQl7NiwgN30sCisJCXswLCAwfSwKKwkJezAs
IDB9CisJCX0KKwl9LAorCXswLCAxLCAxLCAwLAkJLyogMHhlMCAqLworCQl7ezUsIDd9LAorCQl7
MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAyLCAwLAkJLyog
MHhlMSAqLworCQl7ezAsIDB9LAorCQl7NSwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0K
Kwl9LAorCXswLCAxLCAyLCAwLAkJLyogMHhlMiAqLworCQl7ezEsIDF9LAorCQl7NSwgN30sCisJ
CXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAyLCAwLAkJLyogMHhlMyAqLwor
CQl7ezAsIDF9LAorCQl7NSwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsw
LCAxLCAyLCAwLAkJLyogMHhlNCAqLworCQl7ezIsIDJ9LAorCQl7NSwgN30sCisJCXswLCAwfSwK
KwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAzLCAwLAkJLyogMHhlNSAqLworCQl7ezAsIDB9
LAorCQl7MiwgMn0sCisJCXs1LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAyLCAw
LAkJLyogMHhlNiAqLworCQl7ezEsIDJ9LAorCQl7NSwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9
CisJCX0KKwl9LAorCXsxLCAxLCAyLCAwLAkJLyogMHhlNyAqLworCQl7ezAsIDJ9LAorCQl7NSwg
N30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAyLCAwLAkJLyogMHhl
OCAqLworCQl7ezMsIDN9LAorCQl7NSwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9
LAorCXsxLCAxLCAzLCAwLAkJLyogMHhlOSAqLworCQl7ezAsIDB9LAorCQl7MywgM30sCisJCXs1
LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAzLCAwLAkJLyogMHhlYSAqLworCQl7
ezEsIDF9LAorCQl7MywgM30sCisJCXs1LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAx
LCAzLCAwLAkJLyogMHhlYiAqLworCQl7ezAsIDF9LAorCQl7MywgM30sCisJCXs1LCA3fSwKKwkJ
ezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAyLCAwLAkJLyogMHhlYyAqLworCQl7ezIsIDN9LAor
CQl7NSwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAzLCAwLAkJ
LyogMHhlZCAqLworCQl7ezAsIDB9LAorCQl7MiwgM30sCisJCXs1LCA3fSwKKwkJezAsIDB9CisJ
CX0KKwl9LAorCXswLCAxLCAyLCAwLAkJLyogMHhlZSAqLworCQl7ezEsIDN9LAorCQl7NSwgN30s
CisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAyLCAwLAkJLyogMHhlZiAq
LworCQl7ezAsIDN9LAorCQl7NSwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAor
CXswLCAxLCAxLCAwLAkJLyogMHhmMCAqLworCQl7ezQsIDd9LAorCQl7MCwgMH0sCisJCXswLCAw
fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAyLCAwLAkJLyogMHhmMSAqLworCQl7ezAs
IDB9LAorCQl7NCwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAy
LCAwLAkJLyogMHhmMiAqLworCQl7ezEsIDF9LAorCQl7NCwgN30sCisJCXswLCAwfSwKKwkJezAs
IDB9CisJCX0KKwl9LAorCXsxLCAxLCAyLCAwLAkJLyogMHhmMyAqLworCQl7ezAsIDF9LAorCQl7
NCwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAyLCAwLAkJLyog
MHhmNCAqLworCQl7ezIsIDJ9LAorCQl7NCwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0K
Kwl9LAorCXsxLCAxLCAzLCAwLAkJLyogMHhmNSAqLworCQl7ezAsIDB9LAorCQl7MiwgMn0sCisJ
CXs0LCA3fSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAyLCAwLAkJLyogMHhmNiAqLwor
CQl7ezEsIDJ9LAorCQl7NCwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsx
LCAxLCAyLCAwLAkJLyogMHhmNyAqLworCQl7ezAsIDJ9LAorCQl7NCwgN30sCisJCXswLCAwfSwK
KwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAxLCAxLCAwLAkJLyogMHhmOCAqLworCQl7ezMsIDd9
LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAyLCAw
LAkJLyogMHhmOSAqLworCQl7ezAsIDB9LAorCQl7MywgN30sCisJCXswLCAwfSwKKwkJezAsIDB9
CisJCX0KKwl9LAorCXswLCAxLCAyLCAwLAkJLyogMHhmYSAqLworCQl7ezEsIDF9LAorCQl7Mywg
N30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAyLCAwLAkJLyogMHhm
YiAqLworCQl7ezAsIDF9LAorCQl7MywgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9
LAorCXswLCAxLCAxLCAwLAkJLyogMHhmYyAqLworCQl7ezIsIDd9LAorCQl7MCwgMH0sCisJCXsw
LCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAyLCAwLAkJLyogMHhmZCAqLworCQl7
ezAsIDB9LAorCQl7MiwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9LAorCXswLCAx
LCAxLCAwLAkJLyogMHhmZSAqLworCQl7ezEsIDd9LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJ
ezAsIDB9CisJCX0KKwl9LAorCXsxLCAxLCAxLCAwLAkJLyogMHhmZiAqLworCQl7ezAsIDd9LAor
CQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9CisJCX0KKwl9Cit9OworCitpbnQKK3NjdHBf
aXNfYWRkcmVzc19pbl9zY29wZShzdHJ1Y3Qgc2N0cF9pZmEgKmlmYSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9zY29waW5nICpzY29wZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgZG9fdXBkYXRlKQoreworCWlmICgoc2NvcGUtPmxvb3BiYWNrX3Njb3BlID09
IDApICYmCisJICAgIChpZmEtPmlmbl9wKSAmJiBTQ1RQX0lGTl9JU19JRlRfTE9PUChpZmEtPmlm
bl9wKSkgeworCQkvKgorCQkgKiBza2lwIGxvb3BiYWNrIGlmIG5vdCBpbiBzY29wZSAqCisJCSAq
LworCQlyZXR1cm4gKDApOworCX0KKwlzd2l0Y2ggKGlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkp
IHsKKyNpZmRlZiBJTkVUCisJY2FzZSBBRl9JTkVUOgorCQlpZiAoc2NvcGUtPmlwdjRfYWRkcl9s
ZWdhbCkgeworCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisKKwkJCXNpbiA9ICZpZmEtPmFk
ZHJlc3Muc2luOworCQkJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRyID09IDApIHsKKwkJCQkvKiBu
b3QgaW4gc2NvcGUgLCB1bnNwZWNpZmllZCAqLworCQkJCXJldHVybiAoMCk7CisJCQl9CisJCQlp
ZiAoKHNjb3BlLT5pcHY0X2xvY2FsX3Njb3BlID09IDApICYmCisJCQkgICAgKElONF9JU1BSSVZB
VEVfQUREUkVTUygmc2luLT5zaW5fYWRkcikpKSB7CisJCQkJLyogcHJpdmF0ZSBhZGRyZXNzIG5v
dCBpbiBzY29wZSAqLworCQkJCXJldHVybiAoMCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlyZXR1
cm4gKDApOworCQl9CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lO
RVQ2OgorCQlpZiAoc2NvcGUtPmlwdjZfYWRkcl9sZWdhbCkgeworCQkJc3RydWN0IHNvY2thZGRy
X2luNiAqc2luNjsKKworCQkJLyogTXVzdCB1cGRhdGUgdGhlIGZsYWdzLCAgYnVtbWVyLCB3aGlj
aAorCQkJICogbWVhbnMgYW55IElGQSBsb2NrcyBtdXN0IG5vdyBiZSBhcHBsaWVkIEhFUkUgPC0+
CisJCQkgKi8KKwkJCWlmIChkb191cGRhdGUpIHsKKwkJCQlzY3RwX2dhdGhlcl9pbnRlcm5hbF9p
ZmFfZmxhZ3MoaWZhKTsKKwkJCX0KKwkJCWlmIChpZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9B
RERSX0lGQV9VTlVTRUFCTEUpIHsKKwkJCQlyZXR1cm4gKDApOworCQkJfQorCQkJLyogb2sgdG8g
dXNlIGRlcHJlY2F0ZWQgYWRkcmVzc2VzPyAqLworCQkJc2luNiA9ICZpZmEtPmFkZHJlc3Muc2lu
NjsKKwkJCWlmIChJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmc2luNi0+c2luNl9hZGRyKSkgewor
CQkJCS8qIHNraXAgdW5zcGVjaWZlZCBhZGRyZXNzZXMgKi8KKwkJCQlyZXR1cm4gKDApOworCQkJ
fQorCQkJaWYgKAkJLyogKGxvY2FsX3Njb3BlID09IDApICYmICovCisJCQkgICAgKElONl9JU19B
RERSX0xJTktMT0NBTCgmc2luNi0+c2luNl9hZGRyKSkpIHsKKwkJCQlyZXR1cm4gKDApOworCQkJ
fQorCQkJaWYgKChzY29wZS0+c2l0ZV9zY29wZSA9PSAwKSAmJgorCQkJICAgIChJTjZfSVNfQURE
Ul9TSVRFTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpKSB7CisJCQkJcmV0dXJuICgwKTsKKwkJCX0K
KwkJfSBlbHNlIHsKKwkJCXJldHVybiAoMCk7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYKKyNpZiBk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJY2FzZSBBRl9DT05OOgorCQlpZiAoIXNjb3BlLT5jb25u
X2FkZHJfbGVnYWwpIHsKKwkJCXJldHVybiAoMCk7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYKKwlk
ZWZhdWx0OgorCQlyZXR1cm4gKDApOworCX0KKwlyZXR1cm4gKDEpOworfQorCitzdGF0aWMgc3Ry
dWN0IG1idWYgKgorc2N0cF9hZGRfYWRkcl90b19tYnVmKHN0cnVjdCBtYnVmICptLCBzdHJ1Y3Qg
c2N0cF9pZmEgKmlmYSwgdWludDE2X3QgKmxlbikKK3sKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRl
ZmluZWQoSU5FVDYpCisJc3RydWN0IHNjdHBfcGFyYW1oZHIgKnBhcmFtaDsKKwlzdHJ1Y3QgbWJ1
ZiAqbXJldDsKKwl1aW50MTZfdCBwbGVuOworI2VuZGlmCisKKwlzd2l0Y2ggKGlmYS0+YWRkcmVz
cy5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJY2FzZSBBRl9JTkVUOgorCQlwbGVuID0g
KHVpbnQxNl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSk7CisJCWJyZWFrOwor
I2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCQlwbGVuID0gKHVpbnQxNl90
KXNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSk7CisJCWJyZWFrOworI2VuZGlmCisJ
ZGVmYXVsdDoKKwkJcmV0dXJuIChtKTsKKwl9CisjaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVk
KElORVQ2KQorCWlmIChNX1RSQUlMSU5HU1BBQ0UobSkgPj0gcGxlbikgeworCQkvKiBlYXN5IHNp
ZGUgd2UganVzdCBkcm9wIGl0IG9uIHRoZSBlbmQgKi8KKwkJcGFyYW1oID0gKHN0cnVjdCBzY3Rw
X3BhcmFtaGRyICopKFNDVFBfQlVGX0FUKG0sIFNDVFBfQlVGX0xFTihtKSkpOworCQltcmV0ID0g
bTsKKwl9IGVsc2UgeworCQkvKiBOZWVkIG1vcmUgc3BhY2UgKi8KKwkJbXJldCA9IG07CisJCXdo
aWxlIChTQ1RQX0JVRl9ORVhUKG1yZXQpICE9IE5VTEwpIHsKKwkJCW1yZXQgPSBTQ1RQX0JVRl9O
RVhUKG1yZXQpOworCQl9CisJCVNDVFBfQlVGX05FWFQobXJldCkgPSBzY3RwX2dldF9tYnVmX2Zv
cl9tc2cocGxlbiwgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOworCQlpZiAoU0NUUF9CVUZfTkVY
VChtcmV0KSA9PSBOVUxMKSB7CisJCQkvKiBXZSBhcmUgaG9zZWQsIGNhbid0IGFkZCBtb3JlIGFk
ZHJlc3NlcyAqLworCQkJcmV0dXJuIChtKTsKKwkJfQorCQltcmV0ID0gU0NUUF9CVUZfTkVYVCht
cmV0KTsKKwkJcGFyYW1oID0gbXRvZChtcmV0LCBzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKTsKKwl9
CisJLyogbm93IGFkZCB0aGUgcGFyYW1ldGVyICovCisJc3dpdGNoIChpZmEtPmFkZHJlc3Muc2Eu
c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwl7CisJCXN0cnVjdCBz
Y3RwX2lwdjRhZGRyX3BhcmFtICppcHY0cDsKKwkJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisK
KwkJc2luID0gJmlmYS0+YWRkcmVzcy5zaW47CisJCWlwdjRwID0gKHN0cnVjdCBzY3RwX2lwdjRh
ZGRyX3BhcmFtICopcGFyYW1oOworCQlwYXJhbWgtPnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX0lQ
VjRfQUREUkVTUyk7CisJCXBhcmFtaC0+cGFyYW1fbGVuZ3RoID0gaHRvbnMocGxlbik7CisJCWlw
djRwLT5hZGRyID0gc2luLT5zaW5fYWRkci5zX2FkZHI7CisJCVNDVFBfQlVGX0xFTihtcmV0KSAr
PSBwbGVuOworCQlicmVhazsKKwl9CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5F
VDY6CisJeworCQlzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSAqaXB2NnA7CisJCXN0cnVjdCBz
b2NrYWRkcl9pbjYgKnNpbjY7CisKKwkJc2luNiA9ICZpZmEtPmFkZHJlc3Muc2luNjsKKwkJaXB2
NnAgPSAoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKilwYXJhbWg7CisJCXBhcmFtaC0+cGFy
YW1fdHlwZSA9IGh0b25zKFNDVFBfSVBWNl9BRERSRVNTKTsKKwkJcGFyYW1oLT5wYXJhbV9sZW5n
dGggPSBodG9ucyhwbGVuKTsKKwkJbWVtY3B5KGlwdjZwLT5hZGRyLCAmc2luNi0+c2luNl9hZGRy
LAorCQkgICAgc2l6ZW9mKGlwdjZwLT5hZGRyKSk7CisjaWYgZGVmaW5lZChTQ1RQX0VNQkVEREVE
X1Y2X1NDT1BFKQorCQkvKiBjbGVhciBlbWJlZGRlZCBzY29wZSBpbiB0aGUgYWRkcmVzcyAqLwor
CQlpbjZfY2xlYXJzY29wZSgoc3RydWN0IGluNl9hZGRyICopaXB2NnAtPmFkZHIpOworI2VuZGlm
CisJCVNDVFBfQlVGX0xFTihtcmV0KSArPSBwbGVuOworCQlicmVhazsKKwl9CisjZW5kaWYKKwlk
ZWZhdWx0OgorCQlyZXR1cm4gKG0pOworCX0KKwlpZiAobGVuICE9IE5VTEwpIHsKKwkJKmxlbiAr
PSBwbGVuOworCX0KKwlyZXR1cm4gKG1yZXQpOworI2VuZGlmCit9CisKK3N0cnVjdCBtYnVmICoK
K3NjdHBfYWRkX2FkZHJlc3Nlc190b19pX2lhKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3Rw
X3Njb3BpbmcgKnNjb3BlLAorCQkJICAgc3RydWN0IG1idWYgKm1fYXQsIGludCBjbnRfaW5pdHNf
dG8sCisJCQkgICB1aW50MTZfdCAqcGFkZGluZ19sZW4sIHVpbnQxNl90ICpjaHVua19sZW4pCit7
CisJc3RydWN0IHNjdHBfdnJmICp2cmYgPSBOVUxMOworCWludCBjbnQsIGxpbWl0X291dCA9IDAs
IHRvdGFsX2NvdW50OworCXVpbnQzMl90IHZyZl9pZDsKKworCXZyZl9pZCA9IGlucC0+ZGVmX3Zy
Zl9pZDsKKwlTQ1RQX0lQSV9BRERSX1JMT0NLKCk7CisJdnJmID0gc2N0cF9maW5kX3ZyZih2cmZf
aWQpOworCWlmICh2cmYgPT0gTlVMTCkgeworCQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKKwkJ
cmV0dXJuIChtX2F0KTsKKwl9CisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0JPVU5EQUxMKSB7CisJCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmFwOworCQlzdHJ1Y3Qgc2N0
cF9pZm4gKnNjdHBfaWZucDsKKworCQljbnQgPSBjbnRfaW5pdHNfdG87CisJCWlmICh2cmYtPnRv
dGFsX2lmYV9jb3VudCA+IFNDVFBfQ09VTlRfTElNSVQpIHsKKwkJCWxpbWl0X291dCA9IDE7CisJ
CQljbnQgPSBTQ1RQX0FERFJFU1NfTElNSVQ7CisJCQlnb3RvIHNraXBfY291bnQ7CisJCX0KKwkJ
TElTVF9GT1JFQUNIKHNjdHBfaWZucCwgJnZyZi0+aWZubGlzdCwgbmV4dF9pZm4pIHsKKwkJCWlm
ICgoc2NvcGUtPmxvb3BiYWNrX3Njb3BlID09IDApICYmCisJCQkgICAgU0NUUF9JRk5fSVNfSUZU
X0xPT1Aoc2N0cF9pZm5wKSkgeworCQkJCS8qCisJCQkJICogU2tpcCBsb29wYmFjayBkZXZpY2Vz
IGlmIGxvb3BiYWNrX3Njb3BlCisJCQkJICogbm90IHNldAorCQkJCSAqLworCQkJCWNvbnRpbnVl
OworCQkJfQorCQkJTElTVF9GT1JFQUNIKHNjdHBfaWZhcCwgJnNjdHBfaWZucC0+aWZhbGlzdCwg
bmV4dF9pZmEpIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorI2lmZGVmIElORVQKKwkJCQlpZiAoKHNjdHBfaWZhcC0+YWRkcmVzcy5zYS5zYV9m
YW1pbHkgPT0gQUZfSU5FVCkgJiYKKwkJCQkgICAgKHByaXNvbl9jaGVja19pcDQoaW5wLT5pcF9p
bnAuaW5wLmlucF9jcmVkLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAmc2N0cF9pZmFwLT5h
ZGRyZXNzLnNpbi5zaW5fYWRkcikgIT0gMCkpIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorI2Vu
ZGlmCisjaWZkZWYgSU5FVDYKKwkJCQlpZiAoKHNjdHBfaWZhcC0+YWRkcmVzcy5zYS5zYV9mYW1p
bHkgPT0gQUZfSU5FVDYpICYmCisJCQkJICAgIChwcmlzb25fY2hlY2tfaXA2KGlucC0+aXBfaW5w
LmlucC5pbnBfY3JlZCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgJnNjdHBfaWZhcC0+YWRk
cmVzcy5zaW42LnNpbjZfYWRkcikgIT0gMCkpIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorI2Vu
ZGlmCisjZW5kaWYKKwkJCQlpZiAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2N0cF9p
ZmFwKSkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorCQkJCWlmIChzY3RwX2lmYXAtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0NPTk4pIHsK
KwkJCQkJY29udGludWU7CisJCQkJfQorI2VuZGlmCisJCQkJaWYgKHNjdHBfaXNfYWRkcmVzc19p
bl9zY29wZShzY3RwX2lmYXAsIHNjb3BlLCAxKSA9PSAwKSB7CisJCQkJCWNvbnRpbnVlOworCQkJ
CX0KKwkJCQljbnQrKzsKKwkJCQlpZiAoY250ID4gU0NUUF9BRERSRVNTX0xJTUlUKSB7CisJCQkJ
CWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChjbnQgPiBTQ1RQX0FERFJFU1NfTElNSVQpIHsK
KwkJCQlicmVhazsKKwkJCX0KKwkJfQorCXNraXBfY291bnQ6CisJCWlmIChjbnQgPiAxKSB7CisJ
CQl0b3RhbF9jb3VudCA9IDA7CisJCQlMSVNUX0ZPUkVBQ0goc2N0cF9pZm5wLCAmdnJmLT5pZm5s
aXN0LCBuZXh0X2lmbikgeworCQkJCWNudCA9IDA7CisJCQkJaWYgKChzY29wZS0+bG9vcGJhY2tf
c2NvcGUgPT0gMCkgJiYKKwkJCQkgICAgU0NUUF9JRk5fSVNfSUZUX0xPT1Aoc2N0cF9pZm5wKSkg
eworCQkJCQkvKgorCQkJCQkgKiBTa2lwIGxvb3BiYWNrIGRldmljZXMgaWYKKwkJCQkJICogbG9v
cGJhY2tfc2NvcGUgbm90IHNldAorCQkJCQkgKi8KKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJ
CUxJU1RfRk9SRUFDSChzY3RwX2lmYXAsICZzY3RwX2lmbnAtPmlmYWxpc3QsIG5leHRfaWZhKSB7
CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNp
ZmRlZiBJTkVUCisJCQkJCWlmICgoc2N0cF9pZmFwLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBB
Rl9JTkVUKSAmJgorCQkJCQkgICAgKHByaXNvbl9jaGVja19pcDQoaW5wLT5pcF9pbnAuaW5wLmlu
cF9jcmVkLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgJnNjdHBfaWZhcC0+YWRkcmVzcy5z
aW4uc2luX2FkZHIpICE9IDApKSB7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorI2VuZGlmCisj
aWZkZWYgSU5FVDYKKwkJCQkJaWYgKChzY3RwX2lmYXAtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09
IEFGX0lORVQ2KSAmJgorCQkJCQkgICAgKHByaXNvbl9jaGVja19pcDYoaW5wLT5pcF9pbnAuaW5w
LmlucF9jcmVkLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgJnNjdHBfaWZhcC0+YWRkcmVz
cy5zaW42LnNpbjZfYWRkcikgIT0gMCkpIHsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisjZW5k
aWYKKyNlbmRpZgorCQkJCQlpZiAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2N0cF9p
ZmFwKSkgeworCQkJCQkJY29udGludWU7CisJCQkJCX0KKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisJCQkJCWlmIChzY3RwX2lmYXAtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0NPTk4p
IHsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisjZW5kaWYKKwkJCQkJaWYgKHNjdHBfaXNfYWRk
cmVzc19pbl9zY29wZShzY3RwX2lmYXAsCisJCQkJCQkJCSAgICAgc2NvcGUsIDApID09IDApIHsK
KwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJCWlmICgoY2h1bmtfbGVuICE9IE5VTEwpICYm
CisJCQkJCSAgICAocGFkZGluZ19sZW4gIT0gTlVMTCkgJiYKKwkJCQkJICAgICgqcGFkZGluZ19s
ZW4gPiAwKSkgeworCQkJCQkJbWVtc2V0KG10b2QobV9hdCwgY2FkZHJfdCkgKyAqY2h1bmtfbGVu
LCAwLCAqcGFkZGluZ19sZW4pOworCQkJCQkJU0NUUF9CVUZfTEVOKG1fYXQpICs9ICpwYWRkaW5n
X2xlbjsKKwkJCQkJCSpjaHVua19sZW4gKz0gKnBhZGRpbmdfbGVuOworCQkJCQkJKnBhZGRpbmdf
bGVuID0gMDsKKwkJCQkJfQorCQkJCQltX2F0ID0gc2N0cF9hZGRfYWRkcl90b19tYnVmKG1fYXQs
IHNjdHBfaWZhcCwgY2h1bmtfbGVuKTsKKwkJCQkJaWYgKGxpbWl0X291dCkgeworCQkJCQkJY250
Kys7CisJCQkJCQl0b3RhbF9jb3VudCsrOworCQkJCQkJaWYgKGNudCA+PSAyKSB7CisJCQkJCQkJ
LyogdHdvIGZyb20gZWFjaCBhZGRyZXNzICovCisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJ
CQlpZiAodG90YWxfY291bnQgPiBTQ1RQX0FERFJFU1NfTElNSVQpIHsKKwkJCQkJCQkvKiBObyBt
b3JlIGFkZHJlc3NlcyAqLworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQor
CQkJfQorCQl9CisJfSBlbHNlIHsKKwkJc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyOworCisJCWNu
dCA9IGNudF9pbml0c190bzsKKwkJLyogRmlyc3QsIGhvdyBtYW55ID8gKi8KKwkJTElTVF9GT1JF
QUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwgc2N0cF9ueHRfYWRkcikgeworCQkJaWYg
KGxhZGRyLT5pZmEgPT0gTlVMTCkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGxhZGRy
LT5pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9CRUlOR19ERUxFVEVEKQorCQkJCS8qIEFkZHJl
c3MgYmVpbmcgZGVsZXRlZCBieSB0aGUgc3lzdGVtLCBkb250CisJCQkJICogbGlzdC4KKwkJCQkg
Ki8KKwkJCQljb250aW51ZTsKKwkJCWlmIChsYWRkci0+YWN0aW9uID09IFNDVFBfREVMX0lQX0FE
RFJFU1MpIHsKKwkJCQkvKiBBZGRyZXNzIGJlaW5nIGRlbGV0ZWQgb24gdGhpcyBlcAorCQkJCSAq
IGRvbid0IGxpc3QuCisJCQkJICovCisJCQkJY29udGludWU7CisJCQl9CisjaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorCQkJaWYgKGxhZGRyLT5pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09
IEFGX0NPTk4pIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKyNlbmRpZgorCQkJaWYgKHNjdHBfaXNf
YWRkcmVzc19pbl9zY29wZShsYWRkci0+aWZhLAorCQkJCQkJICAgICBzY29wZSwgMSkgPT0gMCkg
eworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJY250Kys7CisJCX0KKwkJLyoKKwkJICogVG8gZ2V0
IHRocm91Z2ggYSBOQVQgd2Ugb25seSBsaXN0IGFkZHJlc3NlcyBpZiB3ZSBoYXZlCisJCSAqIG1v
cmUgdGhhbiBvbmUuIFRoYXQgd2F5IGlmIHlvdSBqdXN0IGJpbmQgYSBzaW5nbGUgYWRkcmVzcwor
CQkgKiB3ZSBsZXQgdGhlIHNvdXJjZSBvZiB0aGUgaW5pdCBkaWN0YXRlIG91ciBhZGRyZXNzLgor
CQkgKi8KKwkJaWYgKGNudCA+IDEpIHsKKwkJCWNudCA9IGNudF9pbml0c190bzsKKwkJCUxJU1Rf
Rk9SRUFDSChsYWRkciwgJmlucC0+c2N0cF9hZGRyX2xpc3QsIHNjdHBfbnh0X2FkZHIpIHsKKwkJ
CQlpZiAobGFkZHItPmlmYSA9PSBOVUxMKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlp
ZiAobGFkZHItPmlmYS0+bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0JFSU5HX0RFTEVURUQpIHsKKwkJ
CQkJY29udGludWU7CisJCQkJfQorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQlpZiAo
bGFkZHItPmlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfQ09OTikgeworCQkJCQljb250
aW51ZTsKKwkJCQl9CisjZW5kaWYKKwkJCQlpZiAoc2N0cF9pc19hZGRyZXNzX2luX3Njb3BlKGxh
ZGRyLT5pZmEsCisJCQkJCQkJICAgICBzY29wZSwgMCkgPT0gMCkgeworCQkJCQljb250aW51ZTsK
KwkJCQl9CisJCQkJaWYgKChjaHVua19sZW4gIT0gTlVMTCkgJiYKKwkJCQkgICAgKHBhZGRpbmdf
bGVuICE9IE5VTEwpICYmCisJCQkJICAgICgqcGFkZGluZ19sZW4gPiAwKSkgeworCQkJCQltZW1z
ZXQobXRvZChtX2F0LCBjYWRkcl90KSArICpjaHVua19sZW4sIDAsICpwYWRkaW5nX2xlbik7CisJ
CQkJCVNDVFBfQlVGX0xFTihtX2F0KSArPSAqcGFkZGluZ19sZW47CisJCQkJCSpjaHVua19sZW4g
Kz0gKnBhZGRpbmdfbGVuOworCQkJCQkqcGFkZGluZ19sZW4gPSAwOworCQkJCX0KKwkJCQltX2F0
ID0gc2N0cF9hZGRfYWRkcl90b19tYnVmKG1fYXQsIGxhZGRyLT5pZmEsIGNodW5rX2xlbik7CisJ
CQkJY250Kys7CisJCQkJaWYgKGNudCA+PSBTQ1RQX0FERFJFU1NfTElNSVQpIHsKKwkJCQkJYnJl
YWs7CisJCQkJfQorCQkJfQorCQl9CisJfQorCVNDVFBfSVBJX0FERFJfUlVOTE9DSygpOworCXJl
dHVybiAobV9hdCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2N0cF9pZmEgKgorc2N0cF9pc19pZmFf
YWRkcl9wcmVmZXJyZWQoc3RydWN0IHNjdHBfaWZhICppZmEsCisJCQkgICB1aW50OF90IGRlc3Rf
aXNfbG9vcCwKKwkJCSAgIHVpbnQ4X3QgZGVzdF9pc19wcml2LAorCQkJICAgc2FfZmFtaWx5X3Qg
ZmFtKQoreworCXVpbnQ4X3QgZGVzdF9pc19nbG9iYWwgPSAwOworCS8qIGRlc3RfaXNfcHJpdiBp
cyB0cnVlIGlmIGRlc3RpbmF0aW9uIGlzIGEgcHJpdmF0ZSBhZGRyZXNzICovCisJLyogZGVzdF9p
c19sb29wIGlzIHRydWUgaWYgZGVzdGluYXRpb24gaXMgYSBsb29wYmFjayBhZGRyZXNzZXMgKi8K
KworCS8qKgorCSAqIEhlcmUgd2UgZGV0ZXJtaW5lIGlmIGl0cyBhIHByZWZlcnJlZCBhZGRyZXNz
LiBBIHByZWZlcnJlZCBhZGRyZXNzCisJICogbWVhbnMgaXQgaXMgdGhlIHNhbWUgc2NvcGUgb3Ig
aGlnaGVyIHNjb3BlIHRoZW4gdGhlIGRlc3RpbmF0aW9uLgorCSAqIEwgPSBsb29wYmFjaywgUCA9
IHByaXZhdGUsIEcgPSBnbG9iYWwKKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCSAqICAgIHNyYyAgICB8ICBkZXN0IHwgcmVzdWx0CisJICogIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAgICAgTCAgICAgfCAgICBMICB8
ICAgIHllcworCSAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CSAqICAgICBQICAgICB8ICAgIEwgIHwgICAgeWVzLXY0IG5vLXY2CisJICogIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogICAgIEcgICAgIHwgICAgTCAgfCAg
ICB5ZXMtdjQgbm8tdjYKKwkgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKwkgKiAgICAgTCAgICAgfCAgICBQICB8ICAgIG5vCisJICogIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogICAgIFAgICAgIHwgICAgUCAgfCAgICB5
ZXMKKwkgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAg
ICAgRyAgICAgfCAgICBQICB8ICAgIG5vCisJICogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCSAqICAgICBMICAgICB8ICAgIEcgIHwgICAgbm8KKwkgKiAgIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogICAgIFAgICAgIHwg
ICAgRyAgfCAgICBubworCSAqICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisJICogICAgIEcgICAgIHwgICAgRyAgfCAgICB5ZXMKKwkgKiAgICAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqLworCisJaWYgKGlmYS0+YWRkcmVz
cy5zYS5zYV9mYW1pbHkgIT0gZmFtKSB7CisJCS8qIGZvcmdldCBtaXMtbWF0Y2hlZCBmYW1pbHkg
Ki8KKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWYgKChkZXN0X2lzX3ByaXYgPT0gMCkgJiYgKGRl
c3RfaXNfbG9vcCA9PSAwKSkgeworCQlkZXN0X2lzX2dsb2JhbCA9IDE7CisJfQorCVNDVFBEQkco
U0NUUF9ERUJVR19PVVRQVVQyLCAiSXMgZGVzdGluYXRpb24gcHJlZmVycmVkOiIpOworCVNDVFBE
QkdfQUREUihTQ1RQX0RFQlVHX09VVFBVVDIsICZpZmEtPmFkZHJlc3Muc2EpOworCS8qIE9rIHRo
ZSBhZGRyZXNzIG1heSBiZSBvayAqLworI2lmZGVmIElORVQ2CisJaWYgKGZhbSA9PSBBRl9JTkVU
NikgeworCQkvKiBvayB0byB1c2UgZGVwcmVjYXRlZCBhZGRyZXNzZXM/IG5vIGxldHMgbm90ISAq
LworCQlpZiAoaWZhLT5sb2NhbGlmYV9mbGFncyAmIFNDVFBfQUREUl9JRkFfVU5VU0VBQkxFKSB7
CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIk5POjFcbiIpOworCQkJcmV0dXJuIChO
VUxMKTsKKwkJfQorCQlpZiAoaWZhLT5zcmNfaXNfcHJpdiAmJiAhaWZhLT5zcmNfaXNfbG9vcCkg
eworCQkJaWYgKGRlc3RfaXNfbG9vcCkgeworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQz
LCAiTk86MlxuIik7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJfQorCQlpZiAoaWZhLT5z
cmNfaXNfZ2xvYikgeworCQkJaWYgKGRlc3RfaXNfbG9vcCkgeworCQkJCVNDVFBEQkcoU0NUUF9E
RUJVR19PVVRQVVQzLCAiTk86M1xuIik7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJfQor
CX0KKyNlbmRpZgorCS8qIE5vdyB0aGF0IHdlIGtub3cgd2hhdCBpcyB3aGF0LCBpbXBsZW1lbnQg
b3IgdGFibGUKKwkgKiB0aGlzIGNvdWxkIGluIHRoZW9yeSBiZSBkb25lIHNsaWNrZXIgKGl0IHVz
ZWQgdG8gYmUpLCBidXQgdGhpcworCSAqIGlzIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgZWFzaWVyIHRv
IHZhbGlkYXRlIDotKQorCSAqLworCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAic3JjX2xv
b3A6JWQgc3JjX3ByaXY6JWQgc3JjX2dsb2I6JWRcbiIsCisJCWlmYS0+c3JjX2lzX2xvb3AsIGlm
YS0+c3JjX2lzX3ByaXYsIGlmYS0+c3JjX2lzX2dsb2IpOworCVNDVFBEQkcoU0NUUF9ERUJVR19P
VVRQVVQzLCAiZGVzdF9sb29wOiVkIGRlc3RfcHJpdjolZCBkZXN0X2dsb2I6JWRcbiIsCisJCWRl
c3RfaXNfbG9vcCwgZGVzdF9pc19wcml2LCBkZXN0X2lzX2dsb2JhbCk7CisKKwlpZiAoKGlmYS0+
c3JjX2lzX2xvb3ApICYmIChkZXN0X2lzX3ByaXYpKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19P
VVRQVVQzLCAiTk86NFxuIik7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWlmICgoaWZhLT5zcmNf
aXNfZ2xvYikgJiYgKGRlc3RfaXNfcHJpdikpIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBV
VDMsICJOTzo1XG4iKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWYgKChpZmEtPnNyY19pc19s
b29wKSAmJiAoZGVzdF9pc19nbG9iYWwpKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQz
LCAiTk86NlxuIik7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWlmICgoaWZhLT5zcmNfaXNfcHJp
dikgJiYgKGRlc3RfaXNfZ2xvYmFsKSkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywg
Ik5POjdcbiIpOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlTQ1RQREJHKFNDVFBfREVCVUdfT1VU
UFVUMywgIllFU1xuIik7CisJLyogaXRzIGEgcHJlZmVycmVkIGFkZHJlc3MgKi8KKwlyZXR1cm4g
KGlmYSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2N0cF9pZmEgKgorc2N0cF9pc19pZmFfYWRkcl9h
Y2NlcHRhYmxlKHN0cnVjdCBzY3RwX2lmYSAqaWZhLAorCQkJICAgIHVpbnQ4X3QgZGVzdF9pc19s
b29wLAorCQkJICAgIHVpbnQ4X3QgZGVzdF9pc19wcml2LAorCQkJICAgIHNhX2ZhbWlseV90IGZh
bSkKK3sKKwl1aW50OF90IGRlc3RfaXNfZ2xvYmFsID0gMDsKKworCS8qKgorCSAqIEhlcmUgd2Ug
ZGV0ZXJtaW5lIGlmIGl0cyBhIGFjY2VwdGFibGUgYWRkcmVzcy4gQSBhY2NlcHRhYmxlCisJICog
YWRkcmVzcyBtZWFucyBpdCBpcyB0aGUgc2FtZSBzY29wZSBvciBoaWdoZXIgc2NvcGUgYnV0IHdl
IGNhbgorCSAqIGFsbG93IGZvciBOQVQgd2hpY2ggbWVhbnMgaXRzIG9rIHRvIGhhdmUgYSBnbG9i
YWwgZGVzdCBhbmQgYQorCSAqIHByaXZhdGUgc3JjLgorCSAqCisJICogTCA9IGxvb3BiYWNrLCBQ
ID0gcHJpdmF0ZSwgRyA9IGdsb2JhbAorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisJICogIHNyYyAgICB8ICBkZXN0IHwgcmVzdWx0CisJICogLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAgIEwgICAgIHwgICBMICAgfCAg
ICB5ZXMKKwkgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkg
KiAgIFAgICAgIHwgICBMICAgfCAgICB5ZXMtdjQgbm8tdjYKKwkgKiAgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAgIEcgICAgIHwgICBMICAgfCAgICB5ZXMK
KwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgTCAg
ICAgfCAgIFAgICB8ICAgIG5vCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKwkgKiAgIFAgICAgIHwgICBQICAgfCAgICB5ZXMKKwkgKiAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgRyAgICAgfCAgIFAgICB8ICAgIHll
cyAtIE1heSBub3Qgd29yaworCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisJICogICBMICAgICB8ICAgRyAgIHwgICAgbm8KKwkgKiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgUCAgICAgfCAgIEcgICB8ICAgIHllcyAt
IE1heSBub3Qgd29yaworCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisJICogICBHICAgICB8ICAgRyAgIHwgICAgeWVzCisJICogLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKi8KKworCWlmIChpZmEtPmFkZHJlc3Muc2Euc2Ff
ZmFtaWx5ICE9IGZhbSkgeworCQkvKiBmb3JnZXQgbm9uIG1hdGNoaW5nIGZhbWlseSAqLworCQlT
Q1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgImlmYV9mYW06JWQgZmFtOiVkXG4iLAorCQkJaWZh
LT5hZGRyZXNzLnNhLnNhX2ZhbWlseSwgZmFtKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJLyog
T2sgdGhlIGFkZHJlc3MgbWF5IGJlIG9rICovCisJU0NUUERCR19BRERSKFNDVFBfREVCVUdfT1VU
UFVUMywgJmlmYS0+YWRkcmVzcy5zYSk7CisJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJk
c3RfaXNfbG9vcDolZCBkZXN0X2lzX3ByaXY6JWRcbiIsCisJCWRlc3RfaXNfbG9vcCwgZGVzdF9p
c19wcml2KTsKKwlpZiAoKGRlc3RfaXNfbG9vcCA9PSAwKSAmJiAoZGVzdF9pc19wcml2ID09IDAp
KSB7CisJCWRlc3RfaXNfZ2xvYmFsID0gMTsKKwl9CisjaWZkZWYgSU5FVDYKKwlpZiAoZmFtID09
IEFGX0lORVQ2KSB7CisJCS8qIG9rIHRvIHVzZSBkZXByZWNhdGVkIGFkZHJlc3Nlcz8gKi8KKwkJ
aWYgKGlmYS0+bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0FERFJfSUZBX1VOVVNFQUJMRSkgeworCQkJ
cmV0dXJuIChOVUxMKTsKKwkJfQorCQlpZiAoaWZhLT5zcmNfaXNfcHJpdikgeworCQkJLyogU3Bl
Y2lhbCBjYXNlLCBsaW5rbG9jYWwgdG8gbG9vcCAqLworCQkJaWYgKGRlc3RfaXNfbG9vcCkKKwkJ
CQlyZXR1cm4gKE5VTEwpOworCQl9CisJfQorI2VuZGlmCisJLyoKKwkgKiBOb3cgdGhhdCB3ZSBr
bm93IHdoYXQgaXMgd2hhdCwgaW1wbGVtZW50IG91ciB0YWJsZS4KKwkgKiBUaGlzIGNvdWxkIGlu
IHRoZW9yeSBiZSBkb25lIHNsaWNrZXIgKGl0IHVzZWQgdG8gYmUpLCBidXQgdGhpcworCSAqIGlz
IHN0cmFpZ2h0Zm9yd2FyZCBhbmQgZWFzaWVyIHRvIHZhbGlkYXRlIDotKQorCSAqLworCVNDVFBE
QkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiaWZhLT5zcmNfaXNfbG9vcDolZCBkZXN0X2lzX3ByaXY6
JWRcbiIsCisJCWlmYS0+c3JjX2lzX2xvb3AsCisJCWRlc3RfaXNfcHJpdik7CisJaWYgKChpZmEt
PnNyY19pc19sb29wID09IDEpICYmIChkZXN0X2lzX3ByaXYpKSB7CisJCXJldHVybiAoTlVMTCk7
CisJfQorCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiaWZhLT5zcmNfaXNfbG9vcDolZCBk
ZXN0X2lzX2dsb2I6JWRcbiIsCisJCWlmYS0+c3JjX2lzX2xvb3AsCisJCWRlc3RfaXNfZ2xvYmFs
KTsKKwlpZiAoKGlmYS0+c3JjX2lzX2xvb3AgPT0gMSkgJiYgKGRlc3RfaXNfZ2xvYmFsKSkgewor
CQlyZXR1cm4gKE5VTEwpOworCX0KKwlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgImFkZHJl
c3MgaXMgYWNjZXB0YWJsZVxuIik7CisJLyogaXRzIGFuIGFjY2VwdGFibGUgYWRkcmVzcyAqLwor
CXJldHVybiAoaWZhKTsKK30KKworaW50CitzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2lmYSAqaWZhKQoreworCXN0cnVjdCBzY3RwX2xh
ZGRyICpsYWRkcjsKKworCWlmIChzdGNiID09IE5VTEwpIHsKKwkJLyogVGhlcmUgYXJlIG5vIHJl
c3RyaWN0aW9ucywgbm8gVENCIDotKSAqLworCQlyZXR1cm4gKDApOworCX0KKwlMSVNUX0ZPUkVB
Q0gobGFkZHIsICZzdGNiLT5hc29jLnNjdHBfcmVzdHJpY3RlZF9hZGRycywgc2N0cF9ueHRfYWRk
cikgeworCQlpZiAobGFkZHItPmlmYSA9PSBOVUxMKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdf
T1VUUFVUMSwgIiVzOiBOVUxMIGlmYVxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQljb250aW51ZTsK
KwkJfQorCQlpZiAobGFkZHItPmlmYSA9PSBpZmEpIHsKKwkJCS8qIFllcyBpdCBpcyBvbiB0aGUg
bGlzdCAqLworCQkJcmV0dXJuICgxKTsKKwkJfQorCX0KKwlyZXR1cm4gKDApOworfQorCitpbnQK
K3NjdHBfaXNfYWRkcl9pbl9lcChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF9p
ZmEgKmlmYSkKK3sKKwlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7CisKKwlpZiAoaWZhID09IE5V
TEwpCisJCXJldHVybiAoMCk7CisJTElTVF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJf
bGlzdCwgc2N0cF9ueHRfYWRkcikgeworCQlpZiAobGFkZHItPmlmYSA9PSBOVUxMKSB7CisJCQlT
Q1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIiVzOiBOVUxMIGlmYVxuIiwKKwkJCQlfX2Z1bmNf
Xyk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoKGxhZGRyLT5pZmEgPT0gaWZhKSAmJiBsYWRk
ci0+YWN0aW9uID09IDApCisJCQkvKiBzYW1lIHBvaW50ZXIgKi8KKwkJCXJldHVybiAoMSk7CisJ
fQorCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2N0cF9pZmEgKgorc2N0cF9jaG9v
c2VfYm91bmRzcGVjaWZpY19pbnAoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKKwkJCSAgICAgIHNj
dHBfcm91dGVfdCAqcm8sCisJCQkgICAgICB1aW50MzJfdCB2cmZfaWQsCisJCQkgICAgICBpbnQg
bm9uX2Fzb2NfYWRkcl9vaywKKwkJCSAgICAgIHVpbnQ4X3QgZGVzdF9pc19wcml2LAorCQkJICAg
ICAgdWludDhfdCBkZXN0X2lzX2xvb3AsCisJCQkgICAgICBzYV9mYW1pbHlfdCBmYW0pCit7CisJ
c3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyLCAqc3RhcnRpbmdfcG9pbnQ7CisJdm9pZCAqaWZuOwor
CWludCByZXNldHRvdG9wID0gMDsKKwlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZuOworCXN0cnVj
dCBzY3RwX2lmYSAqc2N0cF9pZmEsICpzaWZhOworCXN0cnVjdCBzY3RwX3ZyZiAqdnJmOworCXVp
bnQzMl90IGlmbl9pbmRleDsKKworCXZyZiA9IHNjdHBfZmluZF92cmYodnJmX2lkKTsKKwlpZiAo
dnJmID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisKKwlpZm4gPSBTQ1RQX0dFVF9JRk5fVk9J
RF9GUk9NX1JPVVRFKHJvKTsKKwlpZm5faW5kZXggPSBTQ1RQX0dFVF9JRl9JTkRFWF9GUk9NX1JP
VVRFKHJvKTsKKwlzY3RwX2lmbiA9IHNjdHBfZmluZF9pZm4oaWZuLCBpZm5faW5kZXgpOworCS8q
CisJICogZmlyc3QgcXVlc3Rpb24sIGlzIHRoZSBpZm4gd2Ugd2lsbCBlbWl0IG9uIGluIG91ciBs
aXN0LCBpZiBzbywgd2UKKwkgKiB3YW50IHN1Y2ggYW4gYWRkcmVzcy4gTm90ZSB0aGF0IHdlIGZp
cnN0IGxvb2tlZCBmb3IgYQorCSAqIHByZWZlcnJlZCBhZGRyZXNzLgorCSAqLworCWlmIChzY3Rw
X2lmbikgeworCQkvKiBpcyBhIHByZWZlcnJlZCBvbmUgb24gdGhlIGludGVyZmFjZSB3ZSByb3V0
ZSBvdXQ/ICovCisJCUxJU1RfRk9SRUFDSChzY3RwX2lmYSwgJnNjdHBfaWZuLT5pZmFsaXN0LCBu
ZXh0X2lmYSkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisjaWZkZWYgSU5FVAorCQkJaWYgKChzY3RwX2lmYS0+YWRkcmVzcy5zYS5zYV9mYW1p
bHkgPT0gQUZfSU5FVCkgJiYKKwkJCSAgICAocHJpc29uX2NoZWNrX2lwNChpbnAtPmlwX2lucC5p
bnAuaW5wX2NyZWQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgJnNjdHBfaWZhLT5hZGRyZXNz
LnNpbi5zaW5fYWRkcikgIT0gMCkpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKyNlbmRpZgorI2lm
ZGVmIElORVQ2CisJCQlpZiAoKHNjdHBfaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9J
TkVUNikgJiYKKwkJCSAgICAocHJpc29uX2NoZWNrX2lwNihpbnAtPmlwX2lucC5pbnAuaW5wX2Ny
ZWQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjYuc2lu
Nl9hZGRyKSAhPSAwKSkgeworCQkJCWNvbnRpbnVlOworCQkJfQorI2VuZGlmCisjZW5kaWYKKwkJ
CWlmICgoc2N0cF9pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9BRERSX0RFRkVSX1VTRSkgJiYK
KwkJCSAgICAobm9uX2Fzb2NfYWRkcl9vayA9PSAwKSkKKwkJCQljb250aW51ZTsKKwkJCXNpZmEg
PSBzY3RwX2lzX2lmYV9hZGRyX3ByZWZlcnJlZChzY3RwX2lmYSwKKwkJCQkJCQkgIGRlc3RfaXNf
bG9vcCwKKwkJCQkJCQkgIGRlc3RfaXNfcHJpdiwgZmFtKTsKKwkJCWlmIChzaWZhID09IE5VTEwp
CisJCQkJY29udGludWU7CisJCQlpZiAoc2N0cF9pc19hZGRyX2luX2VwKGlucCwgc2lmYSkpIHsK
KwkJCQlhdG9taWNfYWRkX2ludCgmc2lmYS0+cmVmY291bnQsIDEpOworCQkJCXJldHVybiAoc2lm
YSk7CisJCQl9CisJCX0KKwl9CisJLyoKKwkgKiBvaywgbm93IHdlIG5vdyBuZWVkIHRvIGZpbmQg
b25lIG9uIHRoZSBsaXN0IG9mIHRoZSBhZGRyZXNzZXMuCisJICogV2UgY2FuJ3QgZ2V0IG9uZSBv
biB0aGUgZW1pdHRpbmcgaW50ZXJmYWNlIHNvIGxldCdzIGZpbmQgZmlyc3QKKwkgKiBhIHByZWZl
cnJlZCBvbmUuIElmIG5vdCB0aGF0IGFuIGFjY2VwdGFibGUgb25lIG90aGVyd2lzZS4uLgorCSAq
IHdlIHJldHVybiBOVUxMLgorCSAqLworCXN0YXJ0aW5nX3BvaW50ID0gaW5wLT5uZXh0X2FkZHJf
dG91c2U7Cisgb25jZV9hZ2FpbjoKKwlpZiAoaW5wLT5uZXh0X2FkZHJfdG91c2UgPT0gTlVMTCkg
eworCQlpbnAtPm5leHRfYWRkcl90b3VzZSA9IExJU1RfRklSU1QoJmlucC0+c2N0cF9hZGRyX2xp
c3QpOworCQlyZXNldHRvdG9wID0gMTsKKwl9CisJZm9yIChsYWRkciA9IGlucC0+bmV4dF9hZGRy
X3RvdXNlOyBsYWRkcjsKKwkgICAgIGxhZGRyID0gTElTVF9ORVhUKGxhZGRyLCBzY3RwX254dF9h
ZGRyKSkgeworCQlpZiAobGFkZHItPmlmYSA9PSBOVUxMKSB7CisJCQkvKiBhZGRyZXNzIGhhcyBi
ZWVuIHJlbW92ZWQgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChsYWRkci0+YWN0aW9uID09
IFNDVFBfREVMX0lQX0FERFJFU1MpIHsKKwkJCS8qIGFkZHJlc3MgaXMgYmVpbmcgZGVsZXRlZCAq
LworCQkJY29udGludWU7CisJCX0KKwkJc2lmYSA9IHNjdHBfaXNfaWZhX2FkZHJfcHJlZmVycmVk
KGxhZGRyLT5pZmEsIGRlc3RfaXNfbG9vcCwKKwkJCQkJCSAgZGVzdF9pc19wcml2LCBmYW0pOwor
CQlpZiAoc2lmYSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWF0b21pY19hZGRfaW50KCZzaWZh
LT5yZWZjb3VudCwgMSk7CisJCXJldHVybiAoc2lmYSk7CisJfQorCWlmIChyZXNldHRvdG9wID09
IDApIHsKKwkJaW5wLT5uZXh0X2FkZHJfdG91c2UgPSBOVUxMOworCQlnb3RvIG9uY2VfYWdhaW47
CisJfQorCisJaW5wLT5uZXh0X2FkZHJfdG91c2UgPSBzdGFydGluZ19wb2ludDsKKwlyZXNldHRv
dG9wID0gMDsKKyBvbmNlX2FnYWluX3RvbzoKKwlpZiAoaW5wLT5uZXh0X2FkZHJfdG91c2UgPT0g
TlVMTCkgeworCQlpbnAtPm5leHRfYWRkcl90b3VzZSA9IExJU1RfRklSU1QoJmlucC0+c2N0cF9h
ZGRyX2xpc3QpOworCQlyZXNldHRvdG9wID0gMTsKKwl9CisKKwkvKiBvaywgd2hhdCBhYm91dCBh
biBhY2NlcHRhYmxlIGFkZHJlc3MgaW4gdGhlIGlucCAqLworCWZvciAobGFkZHIgPSBpbnAtPm5l
eHRfYWRkcl90b3VzZTsgbGFkZHI7CisJICAgICBsYWRkciA9IExJU1RfTkVYVChsYWRkciwgc2N0
cF9ueHRfYWRkcikpIHsKKwkJaWYgKGxhZGRyLT5pZmEgPT0gTlVMTCkgeworCQkJLyogYWRkcmVz
cyBoYXMgYmVlbiByZW1vdmVkICovCisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobGFkZHItPmFj
dGlvbiA9PSBTQ1RQX0RFTF9JUF9BRERSRVNTKSB7CisJCQkvKiBhZGRyZXNzIGlzIGJlaW5nIGRl
bGV0ZWQgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCXNpZmEgPSBzY3RwX2lzX2lmYV9hZGRyX2Fj
Y2VwdGFibGUobGFkZHItPmlmYSwgZGVzdF9pc19sb29wLAorCQkJCQkJICAgZGVzdF9pc19wcml2
LCBmYW0pOworCQlpZiAoc2lmYSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWF0b21pY19hZGRf
aW50KCZzaWZhLT5yZWZjb3VudCwgMSk7CisJCXJldHVybiAoc2lmYSk7CisJfQorCWlmIChyZXNl
dHRvdG9wID09IDApIHsKKwkJaW5wLT5uZXh0X2FkZHJfdG91c2UgPSBOVUxMOworCQlnb3RvIG9u
Y2VfYWdhaW5fdG9vOworCX0KKworCS8qCisJICogbm8gYWRkcmVzcyBib3VuZCBjYW4gYmUgYSBz
b3VyY2UgZm9yIHRoZSBkZXN0aW5hdGlvbiB3ZSBhcmUgaW4KKwkgKiB0cm91YmxlCisJICovCisJ
cmV0dXJuIChOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCBzY3RwX2lmYSAqCitzY3RwX2Nob29z
ZV9ib3VuZHNwZWNpZmljX3N0Y2Ioc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKKwkJCSAgICAgICBz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCQkgICAgICAgc2N0cF9yb3V0ZV90ICpybywKKwkJCSAg
ICAgICB1aW50MzJfdCB2cmZfaWQsCisJCQkgICAgICAgdWludDhfdCBkZXN0X2lzX3ByaXYsCisJ
CQkgICAgICAgdWludDhfdCBkZXN0X2lzX2xvb3AsCisJCQkgICAgICAgaW50IG5vbl9hc29jX2Fk
ZHJfb2ssCisJCQkgICAgICAgc2FfZmFtaWx5X3QgZmFtKQoreworCXN0cnVjdCBzY3RwX2xhZGRy
ICpsYWRkciwgKnN0YXJ0aW5nX3BvaW50OworCXZvaWQgKmlmbjsKKwlzdHJ1Y3Qgc2N0cF9pZm4g
KnNjdHBfaWZuOworCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmEsICpzaWZhOworCXVpbnQ4X3Qg
c3RhcnRfYXRfYmVnaW5uaW5nID0gMDsKKwlzdHJ1Y3Qgc2N0cF92cmYgKnZyZjsKKwl1aW50MzJf
dCBpZm5faW5kZXg7CisKKwkvKgorCSAqIGZpcnN0IHF1ZXN0aW9uLCBpcyB0aGUgaWZuIHdlIHdp
bGwgZW1pdCBvbiBpbiBvdXIgbGlzdCwgaWYgc28sIHdlCisJICogd2FudCB0aGF0IG9uZS4KKwkg
Ki8KKwl2cmYgPSBzY3RwX2ZpbmRfdnJmKHZyZl9pZCk7CisJaWYgKHZyZiA9PSBOVUxMKQorCQly
ZXR1cm4gKE5VTEwpOworCisJaWZuID0gU0NUUF9HRVRfSUZOX1ZPSURfRlJPTV9ST1VURShybyk7
CisJaWZuX2luZGV4ID0gU0NUUF9HRVRfSUZfSU5ERVhfRlJPTV9ST1VURShybyk7CisJc2N0cF9p
Zm4gPSBzY3RwX2ZpbmRfaWZuKGlmbiwgaWZuX2luZGV4KTsKKworCS8qCisJICogZmlyc3QgcXVl
c3Rpb24sIGlzIHRoZSBpZm4gd2Ugd2lsbCBlbWl0IG9uIGluIG91ciBsaXN0PyAgSWYgc28sCisJ
ICogd2Ugd2FudCB0aGF0IG9uZS4gRmlyc3Qgd2UgbG9vayBmb3IgYSBwcmVmZXJyZWQuIFNlY29u
ZCwgd2UgZ28KKwkgKiBmb3IgYW4gYWNjZXB0YWJsZS4KKwkgKi8KKwlpZiAoc2N0cF9pZm4pIHsK
KwkJLyogZmlyc3QgdHJ5IGZvciBhIHByZWZlcnJlZCBhZGRyZXNzIG9uIHRoZSBlcCAqLworCQlM
SVNUX0ZPUkVBQ0goc2N0cF9pZmEsICZzY3RwX2lmbi0+aWZhbGlzdCwgbmV4dF9pZmEpIHsKKyNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmZGVm
IElORVQKKwkJCWlmICgoc2N0cF9pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQp
ICYmCisJCQkgICAgKHByaXNvbl9jaGVja19pcDQoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAor
CQkJICAgICAgICAgICAgICAgICAgICAgICZzY3RwX2lmYS0+YWRkcmVzcy5zaW4uc2luX2FkZHIp
ICE9IDApKSB7CisJCQkJY29udGludWU7CisJCQl9CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJ
aWYgKChzY3RwX2lmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpICYmCisJCQkg
ICAgKHByaXNvbl9jaGVja19pcDYoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAorCQkJICAgICAg
ICAgICAgICAgICAgICAgICZzY3RwX2lmYS0+YWRkcmVzcy5zaW42LnNpbjZfYWRkcikgIT0gMCkp
IHsKKwkJCQljb250aW51ZTsKKwkJCX0KKyNlbmRpZgorI2VuZGlmCisJCQlpZiAoKHNjdHBfaWZh
LT5sb2NhbGlmYV9mbGFncyAmIFNDVFBfQUREUl9ERUZFUl9VU0UpICYmIChub25fYXNvY19hZGRy
X29rID09IDApKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHNjdHBfaXNfYWRkcl9pbl9lcChpbnAs
IHNjdHBfaWZhKSkgeworCQkJCXNpZmEgPSBzY3RwX2lzX2lmYV9hZGRyX3ByZWZlcnJlZChzY3Rw
X2lmYSwgZGVzdF9pc19sb29wLCBkZXN0X2lzX3ByaXYsIGZhbSk7CisJCQkJaWYgKHNpZmEgPT0g
TlVMTCkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKCgobm9uX2Fzb2NfYWRkcl9vayA9PSAwKSAm
JgorCQkJCSAgICAgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNpZmEpKSkgfHwKKwkJ
CQkgICAgKG5vbl9hc29jX2FkZHJfb2sgJiYKKwkJCQkgICAgIChzY3RwX2lzX2FkZHJfcmVzdHJp
Y3RlZChzdGNiLCBzaWZhKSkgJiYKKwkJCQkgICAgICghc2N0cF9pc19hZGRyX3BlbmRpbmcoc3Rj
Yiwgc2lmYSkpKSkgeworCQkJCQkvKiBvbiB0aGUgbm8tbm8gbGlzdCAqLworCQkJCQljb250aW51
ZTsKKwkJCQl9CisJCQkJYXRvbWljX2FkZF9pbnQoJnNpZmEtPnJlZmNvdW50LCAxKTsKKwkJCQly
ZXR1cm4gKHNpZmEpOworCQkJfQorCQl9CisJCS8qIG5leHQgdHJ5IGZvciBhbiBhY2NlcHRhYmxl
IGFkZHJlc3Mgb24gdGhlIGVwICovCisJCUxJU1RfRk9SRUFDSChzY3RwX2lmYSwgJnNjdHBfaWZu
LT5pZmFsaXN0LCBuZXh0X2lmYSkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCisjaWZkZWYgSU5FVAorCQkJaWYgKChzY3RwX2lmYS0+YWRkcmVz
cy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgJiYKKwkJCSAgICAocHJpc29uX2NoZWNrX2lwNChp
bnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgJnNjdHBf
aWZhLT5hZGRyZXNzLnNpbi5zaW5fYWRkcikgIT0gMCkpIHsKKwkJCQljb250aW51ZTsKKwkJCX0K
KyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQlpZiAoKHNjdHBfaWZhLT5hZGRyZXNzLnNhLnNhX2Zh
bWlseSA9PSBBRl9JTkVUNikgJiYKKwkJCSAgICAocHJpc29uX2NoZWNrX2lwNihpbnAtPmlwX2lu
cC5pbnAuaW5wX2NyZWQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgJnNjdHBfaWZhLT5hZGRy
ZXNzLnNpbjYuc2luNl9hZGRyKSAhPSAwKSkgeworCQkJCWNvbnRpbnVlOworCQkJfQorI2VuZGlm
CisjZW5kaWYKKwkJCWlmICgoc2N0cF9pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9BRERSX0RF
RkVSX1VTRSkgJiYgKG5vbl9hc29jX2FkZHJfb2sgPT0gMCkpCisJCQkJY29udGludWU7CisJCQlp
ZiAoc2N0cF9pc19hZGRyX2luX2VwKGlucCwgc2N0cF9pZmEpKSB7CisJCQkJc2lmYT0gc2N0cF9p
c19pZmFfYWRkcl9hY2NlcHRhYmxlKHNjdHBfaWZhLCBkZXN0X2lzX2xvb3AsIGRlc3RfaXNfcHJp
dixmYW0pOworCQkJCWlmIChzaWZhID09IE5VTEwpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmICgo
KG5vbl9hc29jX2FkZHJfb2sgPT0gMCkgJiYKKwkJCQkgICAgIChzY3RwX2lzX2FkZHJfcmVzdHJp
Y3RlZChzdGNiLCBzaWZhKSkpIHx8CisJCQkJICAgIChub25fYXNvY19hZGRyX29rICYmCisJCQkJ
ICAgICAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2lmYSkpICYmCisJCQkJICAgICAo
IXNjdHBfaXNfYWRkcl9wZW5kaW5nKHN0Y2IsIHNpZmEpKSkpIHsKKwkJCQkJLyogb24gdGhlIG5v
LW5vIGxpc3QgKi8KKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWF0b21pY19hZGRfaW50KCZz
aWZhLT5yZWZjb3VudCwgMSk7CisJCQkJcmV0dXJuIChzaWZhKTsKKwkJCX0KKwkJfQorCX0KKwkv
KgorCSAqIGlmIHdlIGNhbid0IGZpbmQgb25lIGxpa2UgdGhhdCB0aGVuIHdlIG11c3QgbG9vayBh
dCBhbGwKKwkgKiBhZGRyZXNzZXMgYm91bmQgdG8gcGljayBvbmUgYXQgZmlyc3QgcHJlZmVyYWJs
ZSB0aGVuCisJICogc2Vjb25kbHkgYWNjZXB0YWJsZS4KKwkgKi8KKwlzdGFydGluZ19wb2ludCA9
IHN0Y2ItPmFzb2MubGFzdF91c2VkX2FkZHJlc3M7Cisgc2N0cF9mcm9tX3RoZV90b3A6CisJaWYg
KHN0Y2ItPmFzb2MubGFzdF91c2VkX2FkZHJlc3MgPT0gTlVMTCkgeworCQlzdGFydF9hdF9iZWdp
bm5pbmcgPSAxOworCQlzdGNiLT5hc29jLmxhc3RfdXNlZF9hZGRyZXNzID0gTElTVF9GSVJTVCgm
aW5wLT5zY3RwX2FkZHJfbGlzdCk7CisJfQorCS8qIHNlYXJjaCBiZWdpbm5pbmcgd2l0aCB0aGUg
bGFzdCB1c2VkIGFkZHJlc3MgKi8KKwlmb3IgKGxhZGRyID0gc3RjYi0+YXNvYy5sYXN0X3VzZWRf
YWRkcmVzczsgbGFkZHI7CisJICAgICBsYWRkciA9IExJU1RfTkVYVChsYWRkciwgc2N0cF9ueHRf
YWRkcikpIHsKKwkJaWYgKGxhZGRyLT5pZmEgPT0gTlVMTCkgeworCQkJLyogYWRkcmVzcyBoYXMg
YmVlbiByZW1vdmVkICovCisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobGFkZHItPmFjdGlvbiA9
PSBTQ1RQX0RFTF9JUF9BRERSRVNTKSB7CisJCQkvKiBhZGRyZXNzIGlzIGJlaW5nIGRlbGV0ZWQg
Ki8KKwkJCWNvbnRpbnVlOworCQl9CisJCXNpZmEgPSBzY3RwX2lzX2lmYV9hZGRyX3ByZWZlcnJl
ZChsYWRkci0+aWZhLCBkZXN0X2lzX2xvb3AsIGRlc3RfaXNfcHJpdiwgZmFtKTsKKwkJaWYgKHNp
ZmEgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQlpZiAoKChub25fYXNvY19hZGRyX29rID09IDAp
ICYmCisJCSAgICAgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNpZmEpKSkgfHwKKwkJ
ICAgIChub25fYXNvY19hZGRyX29rICYmCisJCSAgICAgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVk
KHN0Y2IsIHNpZmEpKSAmJgorCQkgICAgICghc2N0cF9pc19hZGRyX3BlbmRpbmcoc3RjYiwgc2lm
YSkpKSkgeworCQkJLyogb24gdGhlIG5vLW5vIGxpc3QgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJ
CXN0Y2ItPmFzb2MubGFzdF91c2VkX2FkZHJlc3MgPSBsYWRkcjsKKwkJYXRvbWljX2FkZF9pbnQo
JnNpZmEtPnJlZmNvdW50LCAxKTsKKwkJcmV0dXJuIChzaWZhKTsKKwl9CisJaWYgKHN0YXJ0X2F0
X2JlZ2lubmluZyA9PSAwKSB7CisJCXN0Y2ItPmFzb2MubGFzdF91c2VkX2FkZHJlc3MgPSBOVUxM
OworCQlnb3RvIHNjdHBfZnJvbV90aGVfdG9wOworCX0KKwkvKiBub3cgdHJ5IGZvciBhbnkgaGln
aGVyIHNjb3BlIHRoYW4gdGhlIGRlc3RpbmF0aW9uICovCisJc3RjYi0+YXNvYy5sYXN0X3VzZWRf
YWRkcmVzcyA9IHN0YXJ0aW5nX3BvaW50OworCXN0YXJ0X2F0X2JlZ2lubmluZyA9IDA7Cisgc2N0
cF9mcm9tX3RoZV90b3AyOgorCWlmIChzdGNiLT5hc29jLmxhc3RfdXNlZF9hZGRyZXNzID09IE5V
TEwpIHsKKwkJc3RhcnRfYXRfYmVnaW5uaW5nID0gMTsKKwkJc3RjYi0+YXNvYy5sYXN0X3VzZWRf
YWRkcmVzcyA9IExJU1RfRklSU1QoJmlucC0+c2N0cF9hZGRyX2xpc3QpOworCX0KKwkvKiBzZWFy
Y2ggYmVnaW5uaW5nIHdpdGggdGhlIGxhc3QgdXNlZCBhZGRyZXNzICovCisJZm9yIChsYWRkciA9
IHN0Y2ItPmFzb2MubGFzdF91c2VkX2FkZHJlc3M7IGxhZGRyOworCSAgICAgbGFkZHIgPSBMSVNU
X05FWFQobGFkZHIsIHNjdHBfbnh0X2FkZHIpKSB7CisJCWlmIChsYWRkci0+aWZhID09IE5VTEwp
IHsKKwkJCS8qIGFkZHJlc3MgaGFzIGJlZW4gcmVtb3ZlZCAqLworCQkJY29udGludWU7CisJCX0K
KwkJaWYgKGxhZGRyLT5hY3Rpb24gPT0gU0NUUF9ERUxfSVBfQUREUkVTUykgeworCQkJLyogYWRk
cmVzcyBpcyBiZWluZyBkZWxldGVkICovCisJCQljb250aW51ZTsKKwkJfQorCQlzaWZhID0gc2N0
cF9pc19pZmFfYWRkcl9hY2NlcHRhYmxlKGxhZGRyLT5pZmEsIGRlc3RfaXNfbG9vcCwKKwkJCQkJ
CSAgIGRlc3RfaXNfcHJpdiwgZmFtKTsKKwkJaWYgKHNpZmEgPT0gTlVMTCkKKwkJCWNvbnRpbnVl
OworCQlpZiAoKChub25fYXNvY19hZGRyX29rID09IDApICYmCisJCSAgICAgKHNjdHBfaXNfYWRk
cl9yZXN0cmljdGVkKHN0Y2IsIHNpZmEpKSkgfHwKKwkJICAgIChub25fYXNvY19hZGRyX29rICYm
CisJCSAgICAgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNpZmEpKSAmJgorCQkgICAg
ICghc2N0cF9pc19hZGRyX3BlbmRpbmcoc3RjYiwgc2lmYSkpKSkgeworCQkJLyogb24gdGhlIG5v
LW5vIGxpc3QgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCXN0Y2ItPmFzb2MubGFzdF91c2VkX2Fk
ZHJlc3MgPSBsYWRkcjsKKwkJYXRvbWljX2FkZF9pbnQoJnNpZmEtPnJlZmNvdW50LCAxKTsKKwkJ
cmV0dXJuIChzaWZhKTsKKwl9CisJaWYgKHN0YXJ0X2F0X2JlZ2lubmluZyA9PSAwKSB7CisJCXN0
Y2ItPmFzb2MubGFzdF91c2VkX2FkZHJlc3MgPSBOVUxMOworCQlnb3RvIHNjdHBfZnJvbV90aGVf
dG9wMjsKKwl9CisJcmV0dXJuIChOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCBzY3RwX2lmYSAq
CitzY3RwX3NlbGVjdF9udGhfcHJlZmVycmVkX2FkZHJfZnJvbV9pZm5fYm91bmRhbGwoc3RydWN0
IHNjdHBfaWZuICppZm4sCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wIFNDVFBf
VU5VU0VELAorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBub25fYXNvY19hZGRyX29rLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZGVzdF9pc19s
b29wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQ4X3QgZGVzdF9pc19wcml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBhZGRyX3dhbnRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzYV9mYW1pbHlfdCBmYW0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2N0cF9yb3V0ZV90ICpybykKK3sKKwlz
dHJ1Y3Qgc2N0cF9pZmEgKmlmYSwgKnNpZmE7CisJaW50IG51bV9lbGlnaWJsZV9hZGRyID0gMDsK
KyNpZmRlZiBJTkVUNgorI2lmZGVmIFNDVFBfRU1CRURERURfVjZfU0NPUEUKKwlzdHJ1Y3Qgc29j
a2FkZHJfaW42IHNpbjYsIGxzYTY7CisKKwlpZiAoZmFtID09IEFGX0lORVQ2KSB7CisJCW1lbWNw
eSgmc2luNiwgJnJvLT5yb19kc3QsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisjaWZk
ZWYgU0NUUF9LQU1FCisJCSh2b2lkKXNhNl9yZWNvdmVyc2NvcGUoJnNpbjYpOworI2Vsc2UKKwkJ
KHZvaWQpaW42X3JlY292ZXJzY29wZSgmc2luNiwgJnNpbjYuc2luNl9hZGRyLCBOVUxMKTsKKyNl
bmRpZiAgLyogU0NUUF9LQU1FICovCisJfQorI2VuZGlmICAvKiBTQ1RQX0VNQkVEREVEX1Y2X1ND
T1BFICovCisjZW5kaWYJLyogSU5FVDYgKi8KKwlMSVNUX0ZPUkVBQ0goaWZhLCAmaWZuLT5pZmFs
aXN0LCBuZXh0X2lmYSkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisjaWZkZWYgSU5FVAorCQlpZiAoKGlmYS0+YWRkcmVzcy5zYS5zYV9mYW1p
bHkgPT0gQUZfSU5FVCkgJiYKKwkJICAgIChwcmlzb25fY2hlY2tfaXA0KGlucC0+aXBfaW5wLmlu
cC5pbnBfY3JlZCwKKwkJICAgICAgICAgICAgICAgICAgICAgICZpZmEtPmFkZHJlc3Muc2luLnNp
bl9hZGRyKSAhPSAwKSkgeworCQkJY29udGludWU7CisJCX0KKyNlbmRpZgorI2lmZGVmIElORVQ2
CisJCWlmICgoaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgJiYKKwkJICAg
IChwcmlzb25fY2hlY2tfaXA2KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKKwkJICAgICAgICAg
ICAgICAgICAgICAgICZpZmEtPmFkZHJlc3Muc2luNi5zaW42X2FkZHIpICE9IDApKSB7CisJCQlj
b250aW51ZTsKKwkJfQorI2VuZGlmCisjZW5kaWYKKwkJaWYgKChpZmEtPmxvY2FsaWZhX2ZsYWdz
ICYgU0NUUF9BRERSX0RFRkVSX1VTRSkgJiYKKwkJICAgIChub25fYXNvY19hZGRyX29rID09IDAp
KQorCQkJY29udGludWU7CisJCXNpZmEgPSBzY3RwX2lzX2lmYV9hZGRyX3ByZWZlcnJlZChpZmEs
IGRlc3RfaXNfbG9vcCwKKwkJCQkJCSAgZGVzdF9pc19wcml2LCBmYW0pOworCQlpZiAoc2lmYSA9
PSBOVUxMKQorCQkJY29udGludWU7CisjaWZkZWYgSU5FVDYKKwkJaWYgKGZhbSA9PSBBRl9JTkVU
NiAmJgorCQkgICAgZGVzdF9pc19sb29wICYmCisJCSAgICBzaWZhLT5zcmNfaXNfbG9vcCAmJiBz
aWZhLT5zcmNfaXNfcHJpdikgeworCQkJLyogZG9uJ3QgYWxsb3cgZmU4MDo6MSB0byBiZSBhIHNy
YyBvbiBsb29wIDo6MSwgd2UgZG9uJ3QgbGlzdCBpdAorCQkJICogdG8gdGhlIHBlZXIgc28gd2Ug
d2lsbCBnZXQgYW4gYWJvcnQuCisJCQkgKi8KKwkJCWNvbnRpbnVlOworCQl9CisjaWZkZWYgU0NU
UF9FTUJFRERFRF9WNl9TQ09QRQorCQlpZiAoZmFtID09IEFGX0lORVQ2ICYmCisJCSAgICBJTjZf
SVNfQUREUl9MSU5LTE9DQUwoJnNpZmEtPmFkZHJlc3Muc2luNi5zaW42X2FkZHIpICYmCisJCSAg
ICBJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnNpbjYuc2luNl9hZGRyKSkgeworCQkJLyogbGluay1s
b2NhbCA8LT4gbGluay1sb2NhbCBtdXN0IGJlbG9uZyB0byB0aGUgc2FtZSBzY29wZS4gKi8KKwkJ
CW1lbWNweSgmbHNhNiwgJnNpZmEtPmFkZHJlc3Muc2luNiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbjYpKTsKKyNpZmRlZiBTQ1RQX0tBTUUKKwkJCSh2b2lkKXNhNl9yZWNvdmVyc2NvcGUoJmxz
YTYpOworI2Vsc2UKKwkJCSh2b2lkKWluNl9yZWNvdmVyc2NvcGUoJmxzYTYsICZsc2E2LnNpbjZf
YWRkciwgTlVMTCk7CisjZW5kaWYgIC8qIFNDVFBfS0FNRSAqLworCQkJaWYgKHNpbjYuc2luNl9z
Y29wZV9pZCAhPSBsc2E2LnNpbjZfc2NvcGVfaWQpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJ
fQorI2VuZGlmICAvKiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFICovCisjZW5kaWYJLyogSU5FVDYg
Ki8KKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCS8qIENoZWNrIGlmIHRoZSBJUHY2IGFkZHJlc3MgbWF0
Y2hlcyB0byBuZXh0LWhvcC4KKwkJICAgSW4gdGhlIG1vYmlsZSBjYXNlLCBvbGQgSVB2NiBhZGRy
ZXNzIG1heSBiZSBub3QgZGVsZXRlZAorCQkgICBmcm9tIHRoZSBpbnRlcmZhY2UuIFRoZW4sIHRo
ZSBpbnRlcmZhY2UgaGFzIHByZXZpb3VzIGFuZAorCQkgICBuZXcgYWRkcmVzc2VzLiAgV2Ugc2hv
dWxkIHVzZSBvbmUgY29ycmVzcG9uZGluZyB0byB0aGUKKwkJICAgbmV4dC1ob3AuICAoYnkgbWlj
Y2hpZSkKKwkJICovCisjaWZkZWYgSU5FVDYKKwkJaWYgKHN0Y2IgJiYgZmFtID09IEFGX0lORVQ2
ICYmCisJCSAgICBzY3RwX2lzX21vYmlsaXR5X2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwgU0NU
UF9NT0JJTElUWV9CQVNFKSkgeworCQkJaWYgKHNjdHBfdjZzcmNfbWF0Y2hfbmV4dGhvcCgmc2lm
YS0+YWRkcmVzcy5zaW42LCBybykKKwkJCSAgICA9PSAwKSB7CisJCQkJY29udGludWU7CisJCQl9
CisJCX0KKyNlbmRpZgorI2lmZGVmIElORVQKKwkJLyogQXZvaWQgdG9wb2xvZ2ljYWxseSBpbmNv
cnJlY3QgSVB2NCBhZGRyZXNzICovCisJCWlmIChzdGNiICYmIGZhbSA9PSBBRl9JTkVUICYmCisJ
CSAgICBzY3RwX2lzX21vYmlsaXR5X2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwgU0NUUF9NT0JJ
TElUWV9CQVNFKSkgeworCQkJaWYgKHNjdHBfdjRzcmNfbWF0Y2hfbmV4dGhvcChzaWZhLCBybykg
PT0gMCkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisjZW5kaWYKKyNlbmRpZgorCQlpZiAo
c3RjYikgeworCQkJaWYgKHNjdHBfaXNfYWRkcmVzc19pbl9zY29wZShpZmEsICZzdGNiLT5hc29j
LnNjb3BlLCAwKSA9PSAwKSB7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoKChub25fYXNv
Y19hZGRyX29rID09IDApICYmCisJCQkgICAgIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNi
LCBzaWZhKSkpIHx8CisJCQkgICAgKG5vbl9hc29jX2FkZHJfb2sgJiYKKwkJCSAgICAgKHNjdHBf
aXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNpZmEpKSAmJgorCQkJICAgICAoIXNjdHBfaXNfYWRk
cl9wZW5kaW5nKHN0Y2IsIHNpZmEpKSkpIHsKKwkJCQkvKgorCQkJCSAqIEl0IGlzIHJlc3RyaWN0
ZWQgZm9yIHNvbWUgcmVhc29uLi4KKwkJCQkgKiBwcm9iYWJseSBub3QgeWV0IGFkZGVkLgorCQkJ
CSAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCWlmIChudW1fZWxpZ2libGVfYWRkciA+
PSBhZGRyX3dhbnRlZCkgeworCQkJcmV0dXJuIChzaWZhKTsKKwkJfQorCQludW1fZWxpZ2libGVf
YWRkcisrOworCX0KKwlyZXR1cm4gKE5VTEwpOworfQorCitzdGF0aWMgaW50CitzY3RwX2NvdW50
X251bV9wcmVmZXJyZWRfYm91bmRhbGwoc3RydWN0IHNjdHBfaWZuICppZm4sCisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorI2Vsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wIFNDVFBf
VU5VU0VELAorI2VuZGlmCisJCQkJICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCQkJICBpbnQg
bm9uX2Fzb2NfYWRkcl9vaywKKwkJCQkgIHVpbnQ4X3QgZGVzdF9pc19sb29wLAorCQkJCSAgdWlu
dDhfdCBkZXN0X2lzX3ByaXYsCisJCQkJICBzYV9mYW1pbHlfdCBmYW0pCit7CisJc3RydWN0IHNj
dHBfaWZhICppZmEsICpzaWZhOworCWludCBudW1fZWxpZ2libGVfYWRkciA9IDA7CisKKwlMSVNU
X0ZPUkVBQ0goaWZhLCAmaWZuLT5pZmFsaXN0LCBuZXh0X2lmYSkgeworI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWZkZWYgSU5FVAorCQlpZiAo
KGlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgJiYKKwkJICAgIChwcmlzb25f
Y2hlY2tfaXA0KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKKwkJICAgICAgICAgICAgICAgICAg
ICAgICZpZmEtPmFkZHJlc3Muc2luLnNpbl9hZGRyKSAhPSAwKSkgeworCQkJY29udGludWU7CisJ
CX0KKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCWlmICgoaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWls
eSA9PSBBRl9JTkVUNikgJiYKKwkJICAgIChzdGNiICE9IE5VTEwpICYmCisJCSAgICAocHJpc29u
X2NoZWNrX2lwNihpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCSAgICAgICAgICAgICAgICAg
ICAgICAmaWZhLT5hZGRyZXNzLnNpbjYuc2luNl9hZGRyKSAhPSAwKSkgeworCQkJY29udGludWU7
CisJCX0KKyNlbmRpZgorI2VuZGlmCisJCWlmICgoaWZhLT5sb2NhbGlmYV9mbGFncyAmIFNDVFBf
QUREUl9ERUZFUl9VU0UpICYmCisJCSAgICAobm9uX2Fzb2NfYWRkcl9vayA9PSAwKSkgeworCQkJ
Y29udGludWU7CisJCX0KKwkJc2lmYSA9IHNjdHBfaXNfaWZhX2FkZHJfcHJlZmVycmVkKGlmYSwg
ZGVzdF9pc19sb29wLAorCQkJCQkJICBkZXN0X2lzX3ByaXYsIGZhbSk7CisJCWlmIChzaWZhID09
IE5VTEwpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChzdGNiKSB7CisJCQlpZiAoc2N0cF9p
c19hZGRyZXNzX2luX3Njb3BlKGlmYSwgJnN0Y2ItPmFzb2Muc2NvcGUsIDApID09IDApIHsKKwkJ
CQljb250aW51ZTsKKwkJCX0KKwkJCWlmICgoKG5vbl9hc29jX2FkZHJfb2sgPT0gMCkgJiYKKwkJ
CSAgICAgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNpZmEpKSkgfHwKKwkJCSAgICAo
bm9uX2Fzb2NfYWRkcl9vayAmJgorCQkJICAgICAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3Rj
Yiwgc2lmYSkpICYmCisJCQkgICAgICghc2N0cF9pc19hZGRyX3BlbmRpbmcoc3RjYiwgc2lmYSkp
KSkgeworCQkJCS8qCisJCQkJICogSXQgaXMgcmVzdHJpY3RlZCBmb3Igc29tZSByZWFzb24uLgor
CQkJCSAqIHByb2JhYmx5IG5vdCB5ZXQgYWRkZWQuCisJCQkJICovCisJCQkJY29udGludWU7CisJ
CQl9CisJCX0KKwkJbnVtX2VsaWdpYmxlX2FkZHIrKzsKKwl9CisJcmV0dXJuIChudW1fZWxpZ2li
bGVfYWRkcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2N0cF9pZmEgKgorc2N0cF9jaG9vc2VfYm91
bmRhbGwoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwKKwkJICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCisJCSAgICAg
c2N0cF9yb3V0ZV90ICpybywKKwkJICAgICB1aW50MzJfdCB2cmZfaWQsCisJCSAgICAgdWludDhf
dCBkZXN0X2lzX3ByaXYsCisJCSAgICAgdWludDhfdCBkZXN0X2lzX2xvb3AsCisJCSAgICAgaW50
IG5vbl9hc29jX2FkZHJfb2ssCisJCSAgICAgc2FfZmFtaWx5X3QgZmFtKQoreworCWludCBjdXJf
YWRkcl9udW0gPSAwLCBudW1fcHJlZmVycmVkID0gMDsKKwl2b2lkICppZm47CisJc3RydWN0IHNj
dHBfaWZuICpzY3RwX2lmbiwgKmxvb2tlZF9hdCA9IE5VTEwsICplbWl0X2lmbjsKKwlzdHJ1Y3Qg
c2N0cF9pZmEgKnNjdHBfaWZhLCAqc2lmYTsKKwl1aW50MzJfdCBpZm5faW5kZXg7CisJc3RydWN0
IHNjdHBfdnJmICp2cmY7CisjaWZkZWYgSU5FVAorCWludCByZXRyaWVkID0gMDsKKyNlbmRpZgor
CisJLyotCisJICogRm9yIGJvdW5kYWxsIHdlIGNhbiB1c2UgYW55IGFkZHJlc3MgaW4gdGhlIGFz
c29jaWF0aW9uLgorCSAqIElmIG5vbl9hc29jX2FkZHJfb2sgaXMgc2V0IHdlIGNhbiB1c2UgYW55
IGFkZHJlc3MgKGF0IGxlYXN0IGluCisJICogdGhlb3J5KS4gU28gd2UgbG9vayBmb3IgcHJlZmVy
cmVkIGFkZHJlc3NlcyBmaXJzdC4gSWYgd2UgZmluZCBvbmUsCisJICogd2UgdXNlIGl0LiBPdGhl
cndpc2Ugd2UgbmV4dCB0cnkgdG8gZ2V0IGFuIGFkZHJlc3Mgb24gdGhlCisJICogaW50ZXJmYWNl
LCB3aGljaCB3ZSBzaG91bGQgYmUgYWJsZSB0byBkbyAodW5sZXNzIG5vbl9hc29jX2FkZHJfb2sK
KwkgKiBpcyBmYWxzZSBhbmQgd2UgYXJlIHJvdXRlZCBvdXQgdGhhdCB3YXkpLiBJbiB0aGVzZSBj
YXNlcyB3aGVyZSB3ZQorCSAqIGNhbid0IHVzZSB0aGUgYWRkcmVzcyBvZiB0aGUgaW50ZXJmYWNl
IHdlIGdvIHRocm91Z2ggYWxsIHRoZQorCSAqIGlmbidzIGxvb2tpbmcgZm9yIGFuIGFkZHJlc3Mg
d2UgY2FuIHVzZSBhbmQgZmlsbCB0aGF0IGluLiBQdW50aW5nCisJICogbWVhbnMgd2Ugc2VuZCBi
YWNrIGFkZHJlc3MgMCwgd2hpY2ggd2lsbCBwcm9iYWJseSBjYXVzZSBwcm9ibGVtcworCSAqIGFj
dHVhbGx5IHNpbmNlIHRoZW4gSVAgd2lsbCBmaWxsIGluIHRoZSBhZGRyZXNzIG9mIHRoZSByb3V0
ZSBpZm4sCisJICogd2hpY2ggbWVhbnMgd2UgcHJvYmFibHkgYWxyZWFkeSByZWplY3RlZCBpdC4u
IGkuZS4gaGVyZSBjb21lcyBhbgorCSAqIGFib3J0IDotPC4KKwkgKi8KKwl2cmYgPSBzY3RwX2Zp
bmRfdnJmKHZyZl9pZCk7CisJaWYgKHZyZiA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCisJ
aWZuID0gU0NUUF9HRVRfSUZOX1ZPSURfRlJPTV9ST1VURShybyk7CisJaWZuX2luZGV4ID0gU0NU
UF9HRVRfSUZfSU5ERVhfRlJPTV9ST1VURShybyk7CisJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBV
VDIsImlmbiBmcm9tIHJvdXRlOiVwIGlmbl9pbmRleDolZFxuIiwgaWZuLCBpZm5faW5kZXgpOwor
CWVtaXRfaWZuID0gbG9va2VkX2F0ID0gc2N0cF9pZm4gPSBzY3RwX2ZpbmRfaWZuKGlmbiwgaWZu
X2luZGV4KTsKKwlpZiAoc2N0cF9pZm4gPT0gTlVMTCkgeworCQkvKiA/PyBXZSBkb24ndCBoYXZl
IHRoaXMgZ3V5ID8/ICovCisJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLCJObyBpZm4gZW1p
dCBpbnRlcmZhY2U/XG4iKTsKKwkJZ290byBib3VuZF9hbGxfcGxhbl9iOworCX0KKwlTQ1RQREJH
KFNDVFBfREVCVUdfT1VUUFVUMiwiaWZuX2luZGV4OiVkIG5hbWU6JXMgaXMgZW1pdCBpbnRlcmZh
Y2VcbiIsCisJCWlmbl9pbmRleCwgc2N0cF9pZm4tPmlmbl9uYW1lKTsKKworCWlmIChuZXQpIHsK
KwkJY3VyX2FkZHJfbnVtID0gbmV0LT5pbmR4X29mX2VsaWdpYmxlX25leHRfdG9fdXNlOworCX0K
KwludW1fcHJlZmVycmVkID0gc2N0cF9jb3VudF9udW1fcHJlZmVycmVkX2JvdW5kYWxsKHNjdHBf
aWZuLAorCQkJCQkJCSAgaW5wLCBzdGNiLAorCQkJCQkJCSAgbm9uX2Fzb2NfYWRkcl9vaywKKwkJ
CQkJCQkgIGRlc3RfaXNfbG9vcCwKKwkJCQkJCQkgIGRlc3RfaXNfcHJpdiwgZmFtKTsKKwlTQ1RQ
REJHKFNDVFBfREVCVUdfT1VUUFVUMiwgIkZvdW5kICVkIHByZWZlcnJlZCBzb3VyY2UgYWRkcmVz
c2VzIGZvciBpbnRmOiVzXG4iLAorCQludW1fcHJlZmVycmVkLCBzY3RwX2lmbi0+aWZuX25hbWUp
OworCWlmIChudW1fcHJlZmVycmVkID09IDApIHsKKwkJLyoKKwkJICogbm8gZWxpZ2libGUgYWRk
cmVzc2VzLCB3ZSBtdXN0IHVzZSBzb21lIG90aGVyIGludGVyZmFjZQorCQkgKiBhZGRyZXNzIGlm
IHdlIGNhbiBmaW5kIG9uZS4KKwkJICovCisJCWdvdG8gYm91bmRfYWxsX3BsYW5fYjsKKwl9CisJ
LyoKKwkgKiBPayB3ZSBoYXZlIG51bV9lbGlnaWJsZV9hZGRyIHNldCB3aXRoIGhvdyBtYW55IHdl
IGNhbiB1c2UsIHRoaXMKKwkgKiBtYXkgdmFyeSBmcm9tIGNhbGwgdG8gY2FsbCBkdWUgdG8gYWRk
cmVzc2VzIGJlaW5nIGRlcHJlY2F0ZWQKKwkgKiBldGMuLgorCSAqLworCWlmIChjdXJfYWRkcl9u
dW0gPj0gbnVtX3ByZWZlcnJlZCkgeworCQljdXJfYWRkcl9udW0gPSAwOworCX0KKwkvKgorCSAq
IHNlbGVjdCB0aGUgbnRoIGFkZHJlc3MgZnJvbSB0aGUgbGlzdCAod2hlcmUgY3VyX2FkZHJfbnVt
IGlzIHRoZQorCSAqIG50aCkgYW5kIDAgaXMgdGhlIGZpcnN0IG9uZSwgMSBpcyB0aGUgc2Vjb25k
IG9uZSBldGMuLi4KKwkgKi8KKwlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgImN1cl9hZGRy
X251bTolZFxuIiwgY3VyX2FkZHJfbnVtKTsKKworCXNjdHBfaWZhID0gc2N0cF9zZWxlY3RfbnRo
X3ByZWZlcnJlZF9hZGRyX2Zyb21faWZuX2JvdW5kYWxsKHNjdHBfaWZuLCBpbnAsIHN0Y2IsIG5v
bl9hc29jX2FkZHJfb2ssIGRlc3RfaXNfbG9vcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9pc19wcml2LCBj
dXJfYWRkcl9udW0sIGZhbSwgcm8pOworCisJLyogaWYgc2N0cF9pZmEgaXMgTlVMTCBzb21ldGhp
bmcgY2hhbmdlZD8/LCBmYWxsIHRvIHBsYW4gYi4gKi8KKwlpZiAoc2N0cF9pZmEpIHsKKwkJYXRv
bWljX2FkZF9pbnQoJnNjdHBfaWZhLT5yZWZjb3VudCwgMSk7CisJCWlmIChuZXQpIHsKKwkJCS8q
IHNhdmUgb2ZmIHdoZXJlIHRoZSBuZXh0IG9uZSB3ZSB3aWxsIHdhbnQgKi8KKwkJCW5ldC0+aW5k
eF9vZl9lbGlnaWJsZV9uZXh0X3RvX3VzZSA9IGN1cl9hZGRyX251bSArIDE7CisJCX0KKwkJcmV0
dXJuIChzY3RwX2lmYSk7CisJfQorCS8qCisJICogcGxhbl9iOiBMb29rIGF0IGFsbCBpbnRlcmZh
Y2VzIGFuZCBmaW5kIGEgcHJlZmVycmVkIGFkZHJlc3MuIElmCisJICogbm8gcHJlZmVycmVkIGZh
bGwgdGhyb3VnaCB0byBwbGFuX2MuCisJICovCisgYm91bmRfYWxsX3BsYW5fYjoKKwlTQ1RQREJH
KFNDVFBfREVCVUdfT1VUUFVUMiwgIlRyeWluZyBQbGFuIEJcbiIpOworCUxJU1RfRk9SRUFDSChz
Y3RwX2lmbiwgJnZyZi0+aWZubGlzdCwgbmV4dF9pZm4pIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVH
X09VVFBVVDIsICJFeGFtaW5lIGludGVyZmFjZSAlc1xuIiwKKwkJCXNjdHBfaWZuLT5pZm5fbmFt
ZSk7CisJCWlmIChkZXN0X2lzX2xvb3AgPT0gMCAmJiBTQ1RQX0lGTl9JU19JRlRfTE9PUChzY3Rw
X2lmbikpIHsKKwkJCS8qIHdyb25nIGJhc2Ugc2NvcGUgKi8KKwkJCVNDVFBEQkcoU0NUUF9ERUJV
R19PVVRQVVQyLCAic2tpcFxuIik7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoKHNjdHBfaWZu
ID09IGxvb2tlZF9hdCkgJiYgbG9va2VkX2F0KSB7CisJCQkvKiBhbHJlYWR5IGxvb2tlZCBhdCB0
aGlzIGd1eSAqLworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJhbHJlYWR5IHNlZW5c
biIpOworCQkJY29udGludWU7CisJCX0KKwkJbnVtX3ByZWZlcnJlZCA9IHNjdHBfY291bnRfbnVt
X3ByZWZlcnJlZF9ib3VuZGFsbChzY3RwX2lmbiwgaW5wLCBzdGNiLCBub25fYXNvY19hZGRyX29r
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdF9pc19sb29wLCBkZXN0X2lzX3ByaXYsIGZhbSk7CisJCVNDVFBEQkco
U0NUUF9ERUJVR19PVVRQVVQyLAorCQkJIkZvdW5kIGlmbjolcCAlZCBwcmVmZXJyZWQgc291cmNl
IGFkZHJlc3Nlc1xuIiwKKwkJCWlmbiwgbnVtX3ByZWZlcnJlZCk7CisJCWlmIChudW1fcHJlZmVy
cmVkID09IDApIHsKKwkJCS8qIE5vbmUgb24gdGhpcyBpbnRlcmZhY2UuICovCisJCQlTQ1RQREJH
KFNDVFBfREVCVUdfT1VUUFVUMiwgIk5vIHByZWZlcnJlZCAtLSBza2lwcGluZyB0byBuZXh0XG4i
KTsKKwkJCWNvbnRpbnVlOworCQl9CisJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLAorCQkJ
Im51bSBwcmVmZXJyZWQ6JWQgb24gaW50ZXJmYWNlOiVwIGN1cl9hZGRyX251bTolZFxuIiwKKwkJ
CW51bV9wcmVmZXJyZWQsICh2b2lkICopc2N0cF9pZm4sIGN1cl9hZGRyX251bSk7CisKKwkJLyoK
KwkJICogT2sgd2UgaGF2ZSBudW1fZWxpZ2libGVfYWRkciBzZXQgd2l0aCBob3cgbWFueSB3ZSBj
YW4KKwkJICogdXNlLCB0aGlzIG1heSB2YXJ5IGZyb20gY2FsbCB0byBjYWxsIGR1ZSB0byBhZGRy
ZXNzZXMKKwkJICogYmVpbmcgZGVwcmVjYXRlZCBldGMuLgorCQkgKi8KKwkJaWYgKGN1cl9hZGRy
X251bSA+PSBudW1fcHJlZmVycmVkKSB7CisJCQljdXJfYWRkcl9udW0gPSAwOworCQl9CisJCXNp
ZmEgPSBzY3RwX3NlbGVjdF9udGhfcHJlZmVycmVkX2FkZHJfZnJvbV9pZm5fYm91bmRhbGwoc2N0
cF9pZm4sIGlucCwgc3RjYiwgbm9uX2Fzb2NfYWRkcl9vaywgZGVzdF9pc19sb29wLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdF9pc19wcml2LCBjdXJfYWRkcl9udW0sIGZhbSwgcm8pOworCQlpZiAoc2lm
YSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWlmIChuZXQpIHsKKwkJCW5ldC0+aW5keF9vZl9l
bGlnaWJsZV9uZXh0X3RvX3VzZSA9IGN1cl9hZGRyX251bSArIDE7CisJCQlTQ1RQREJHKFNDVFBf
REVCVUdfT1VUUFVUMiwgIndlIHNlbGVjdGVkICVkXG4iLAorCQkJCWN1cl9hZGRyX251bSk7CisJ
CQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgIlNvdXJjZToiKTsKKwkJCVNDVFBEQkdfQURE
UihTQ1RQX0RFQlVHX09VVFBVVDIsICZzaWZhLT5hZGRyZXNzLnNhKTsKKwkJCVNDVFBEQkcoU0NU
UF9ERUJVR19PVVRQVVQyLCAiRGVzdDoiKTsKKwkJCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX09V
VFBVVDIsICZuZXQtPnJvLl9sX2FkZHIuc2EpOworCQl9CisJCWF0b21pY19hZGRfaW50KCZzaWZh
LT5yZWZjb3VudCwgMSk7CisJCXJldHVybiAoc2lmYSk7CisJfQorI2lmZGVmIElORVQKK2FnYWlu
X3dpdGhfcHJpdmF0ZV9hZGRyZXNzZXNfYWxsb3dlZDoKKyNlbmRpZgorCS8qIHBsYW5fYzogZG8g
d2UgaGF2ZSBhbiBhY2NlcHRhYmxlIGFkZHJlc3Mgb24gdGhlIGVtaXQgaW50ZXJmYWNlICovCisJ
c2lmYSA9IE5VTEw7CisJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsIlRyeWluZyBQbGFuIEM6
IGZpbmQgYWNjZXB0YWJsZSBvbiBpbnRlcmZhY2VcbiIpOworCWlmIChlbWl0X2lmbiA9PSBOVUxM
KSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLCJKdW1wIHRvIFBsYW4gRCAtIG5vIGVt
aXRfaWZuXG4iKTsKKwkJZ290byBwbGFuX2Q7CisJfQorCUxJU1RfRk9SRUFDSChzY3RwX2lmYSwg
JmVtaXRfaWZuLT5pZmFsaXN0LCBuZXh0X2lmYSkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VU
UFVUMiwgImlmYTolcFxuIiwgKHZvaWQgKilzY3RwX2lmYSk7CisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpZmRlZiBJTkVUCisJCWlmICgoc2N0
cF9pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpICYmCisJCSAgICAocHJpc29u
X2NoZWNrX2lwNChpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCSAgICAgICAgICAgICAgICAg
ICAgICAmc2N0cF9pZmEtPmFkZHJlc3Muc2luLnNpbl9hZGRyKSAhPSAwKSkgeworCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX09VVFBVVDIsIkphaWxlZFxuIik7CisJCQljb250aW51ZTsKKwkJfQorI2Vu
ZGlmCisjaWZkZWYgSU5FVDYKKwkJaWYgKChzY3RwX2lmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkg
PT0gQUZfSU5FVDYpICYmCisJCSAgICAocHJpc29uX2NoZWNrX2lwNihpbnAtPmlwX2lucC5pbnAu
aW5wX2NyZWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAmc2N0cF9pZmEtPmFkZHJlc3Muc2lu
Ni5zaW42X2FkZHIpICE9IDApKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwiSmFp
bGVkXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisjZW5kaWYKKyNlbmRpZgorCQlpZiAoKHNjdHBf
aWZhLT5sb2NhbGlmYV9mbGFncyAmIFNDVFBfQUREUl9ERUZFUl9VU0UpICYmCisJCSAgICAobm9u
X2Fzb2NfYWRkcl9vayA9PSAwKSkgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsIkRl
ZmVyXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXNpZmEgPSBzY3RwX2lzX2lmYV9hZGRyX2Fj
Y2VwdGFibGUoc2N0cF9pZmEsIGRlc3RfaXNfbG9vcCwKKwkJCQkJCSAgIGRlc3RfaXNfcHJpdiwg
ZmFtKTsKKwkJaWYgKHNpZmEgPT0gTlVMTCkgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBV
VDIsICJJRkEgbm90IGFjY2VwdGFibGVcbiIpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHN0
Y2IpIHsKKwkJCWlmIChzY3RwX2lzX2FkZHJlc3NfaW5fc2NvcGUoc2lmYSwgJnN0Y2ItPmFzb2Mu
c2NvcGUsIDApID09IDApIHsKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgIk5PVCBp
biBzY29wZVxuIik7CisJCQkJc2lmYSA9IE5VTEw7CisJCQkJY29udGludWU7CisJCQl9CisJCQlp
ZiAoKChub25fYXNvY19hZGRyX29rID09IDApICYmCisJCQkgICAgIChzY3RwX2lzX2FkZHJfcmVz
dHJpY3RlZChzdGNiLCBzaWZhKSkpIHx8CisJCQkgICAgKG5vbl9hc29jX2FkZHJfb2sgJiYKKwkJ
CSAgICAgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNpZmEpKSAmJgorCQkJICAgICAo
IXNjdHBfaXNfYWRkcl9wZW5kaW5nKHN0Y2IsIHNpZmEpKSkpIHsKKwkJCQkvKgorCQkJCSAqIEl0
IGlzIHJlc3RyaWN0ZWQgZm9yIHNvbWUKKwkJCQkgKiByZWFzb24uLiBwcm9iYWJseSBub3QgeWV0
IGFkZGVkLgorCQkJCSAqLworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLCAiSXRzIHJl
c3RyaWN0ZWRcbiIpOworCQkJCXNpZmEgPSBOVUxMOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9
CisJCWF0b21pY19hZGRfaW50KCZzaWZhLT5yZWZjb3VudCwgMSk7CisJCWdvdG8gb3V0OworCX0K
KyBwbGFuX2Q6CisJLyoKKwkgKiBwbGFuX2Q6IFdlIGFyZSBpbiB0cm91YmxlLiBObyBwcmVmZXJy
ZWQgYWRkcmVzcyBvbiB0aGUgZW1pdAorCSAqIGludGVyZmFjZS4gQW5kIG5vdCBldmVuIGEgcHJl
ZmVycmVkIGFkZHJlc3Mgb24gYWxsIGludGVyZmFjZXMuCisJICogR28gb3V0IGFuZCBzZWUgaWYg
d2UgY2FuIGZpbmQgYW4gYWNjZXB0YWJsZSBhZGRyZXNzIHNvbWV3aGVyZQorCSAqIGFtb25nc3Qg
YWxsIGludGVyZmFjZXMuCisJICovCisJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJUcnlp
bmcgUGxhbiBEIGxvb2tlZF9hdCBpcyAlcFxuIiwgKHZvaWQgKilsb29rZWRfYXQpOworCUxJU1Rf
Rk9SRUFDSChzY3RwX2lmbiwgJnZyZi0+aWZubGlzdCwgbmV4dF9pZm4pIHsKKwkJaWYgKGRlc3Rf
aXNfbG9vcCA9PSAwICYmIFNDVFBfSUZOX0lTX0lGVF9MT09QKHNjdHBfaWZuKSkgeworCQkJLyog
d3JvbmcgYmFzZSBzY29wZSAqLworCQkJY29udGludWU7CisJCX0KKwkJTElTVF9GT1JFQUNIKHNj
dHBfaWZhLCAmc2N0cF9pZm4tPmlmYWxpc3QsIG5leHRfaWZhKSB7CisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpZmRlZiBJTkVUCisJCQlpZiAo
KHNjdHBfaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSAmJgorCQkJICAgIChw
cmlzb25fY2hlY2tfaXA0KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKKwkJCSAgICAgICAgICAg
ICAgICAgICAgICAmc2N0cF9pZmEtPmFkZHJlc3Muc2luLnNpbl9hZGRyKSAhPSAwKSkgeworCQkJ
CWNvbnRpbnVlOworCQkJfQorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWlmICgoc2N0cF9pZmEt
PmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSAmJgorCQkJICAgIChwcmlzb25fY2hl
Y2tfaXA2KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKKwkJCSAgICAgICAgICAgICAgICAgICAg
ICAmc2N0cF9pZmEtPmFkZHJlc3Muc2luNi5zaW42X2FkZHIpICE9IDApKSB7CisJCQkJY29udGlu
dWU7CisJCQl9CisjZW5kaWYKKyNlbmRpZgorCQkJaWYgKChzY3RwX2lmYS0+bG9jYWxpZmFfZmxh
Z3MgJiBTQ1RQX0FERFJfREVGRVJfVVNFKSAmJgorCQkJICAgIChub25fYXNvY19hZGRyX29rID09
IDApKQorCQkJCWNvbnRpbnVlOworCQkJc2lmYSA9IHNjdHBfaXNfaWZhX2FkZHJfYWNjZXB0YWJs
ZShzY3RwX2lmYSwKKwkJCQkJCQkgICBkZXN0X2lzX2xvb3AsCisJCQkJCQkJICAgZGVzdF9pc19w
cml2LCBmYW0pOworCQkJaWYgKHNpZmEgPT0gTlVMTCkKKwkJCQljb250aW51ZTsKKwkJCWlmIChz
dGNiKSB7CisJCQkJaWYgKHNjdHBfaXNfYWRkcmVzc19pbl9zY29wZShzaWZhLCAmc3RjYi0+YXNv
Yy5zY29wZSwgMCkgPT0gMCkgeworCQkJCQlzaWZhID0gTlVMTDsKKwkJCQkJY29udGludWU7CisJ
CQkJfQorCQkJCWlmICgoKG5vbl9hc29jX2FkZHJfb2sgPT0gMCkgJiYKKwkJCQkgICAgIChzY3Rw
X2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBzaWZhKSkpIHx8CisJCQkJICAgIChub25fYXNvY19h
ZGRyX29rICYmCisJCQkJICAgICAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2lmYSkp
ICYmCisJCQkJICAgICAoIXNjdHBfaXNfYWRkcl9wZW5kaW5nKHN0Y2IsIHNpZmEpKSkpIHsKKwkJ
CQkJLyoKKwkJCQkJICogSXQgaXMgcmVzdHJpY3RlZCBmb3Igc29tZQorCQkJCQkgKiByZWFzb24u
LiBwcm9iYWJseSBub3QgeWV0IGFkZGVkLgorCQkJCQkgKi8KKwkJCQkJc2lmYSA9IE5VTEw7CisJ
CQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJCWdvdG8gb3V0OworCQl9CisJfQorI2lmZGVm
IElORVQKKwlpZiAoc3RjYikgeworCQlpZiAoKHJldHJpZWQgPT0gMCkgJiYgKHN0Y2ItPmFzb2Mu
c2NvcGUuaXB2NF9sb2NhbF9zY29wZSA9PSAwKSkgeworCQkJc3RjYi0+YXNvYy5zY29wZS5pcHY0
X2xvY2FsX3Njb3BlID0gMTsKKwkJCXJldHJpZWQgPSAxOworCQkJZ290byBhZ2Fpbl93aXRoX3By
aXZhdGVfYWRkcmVzc2VzX2FsbG93ZWQ7CisJCX0gZWxzZSBpZiAocmV0cmllZCA9PSAxKSB7CisJ
CQlzdGNiLT5hc29jLnNjb3BlLmlwdjRfbG9jYWxfc2NvcGUgPSAwOworCQl9CisJfQorI2VuZGlm
CitvdXQ6CisjaWZkZWYgSU5FVAorCWlmIChzaWZhKSB7CisJCWlmIChyZXRyaWVkID09IDEpIHsK
KwkJCUxJU1RfRk9SRUFDSChzY3RwX2lmbiwgJnZyZi0+aWZubGlzdCwgbmV4dF9pZm4pIHsKKwkJ
CQlpZiAoZGVzdF9pc19sb29wID09IDAgJiYgU0NUUF9JRk5fSVNfSUZUX0xPT1Aoc2N0cF9pZm4p
KSB7CisJCQkJCS8qIHdyb25nIGJhc2Ugc2NvcGUgKi8KKwkJCQkJY29udGludWU7CisJCQkJfQor
CQkJCUxJU1RfRk9SRUFDSChzY3RwX2lmYSwgJnNjdHBfaWZuLT5pZmFsaXN0LCBuZXh0X2lmYSkg
eworCQkJCQlzdHJ1Y3Qgc2N0cF9pZmEgKnRtcF9zaWZhOworCisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpZmRlZiBJTkVUCisJCQkJCWlmICgo
c2N0cF9pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpICYmCisJCQkJCSAgICAo
cHJpc29uX2NoZWNrX2lwNChpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCQkJCSAgICAgICAg
ICAgICAgICAgICAgICAmc2N0cF9pZmEtPmFkZHJlc3Muc2luLnNpbl9hZGRyKSAhPSAwKSkgewor
CQkJCQkJY29udGludWU7CisJCQkJCX0KKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQkJCWlmICgo
c2N0cF9pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSAmJgorCQkJCQkgICAg
KHByaXNvbl9jaGVja19pcDYoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAorCQkJCQkgICAgICAg
ICAgICAgICAgICAgICAgJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjYuc2luNl9hZGRyKSAhPSAwKSkg
eworCQkJCQkJY29udGludWU7CisJCQkJCX0KKyNlbmRpZgorI2VuZGlmCisJCQkJCWlmICgoc2N0
cF9pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9BRERSX0RFRkVSX1VTRSkgJiYKKwkJCQkJICAg
IChub25fYXNvY19hZGRyX29rID09IDApKQorCQkJCQkJY29udGludWU7CisJCQkJCXRtcF9zaWZh
ID0gc2N0cF9pc19pZmFfYWRkcl9hY2NlcHRhYmxlKHNjdHBfaWZhLAorCQkJCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2lzX2xvb3AsCisJCQkJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfaXNfcHJpdiwgZmFtKTsKKwkJCQkJ
aWYgKHRtcF9zaWZhID09IE5VTEwpIHsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJCWlm
ICh0bXBfc2lmYSA9PSBzaWZhKSB7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlpZiAo
c3RjYikgeworCQkJCQkJaWYgKHNjdHBfaXNfYWRkcmVzc19pbl9zY29wZSh0bXBfc2lmYSwKKwkJ
CQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0Y2ItPmFzb2Muc2NvcGUsIDApID09
IDApIHsKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKwkJCQkJCWlmICgoKG5vbl9hc29jX2Fk
ZHJfb2sgPT0gMCkgJiYKKwkJCQkJCSAgICAgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2Is
IHRtcF9zaWZhKSkpIHx8CisJCQkJCQkgICAgKG5vbl9hc29jX2FkZHJfb2sgJiYKKwkJCQkJCSAg
ICAgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHRtcF9zaWZhKSkgJiYKKwkJCQkJCSAg
ICAgKCFzY3RwX2lzX2FkZHJfcGVuZGluZyhzdGNiLCB0bXBfc2lmYSkpKSkgeworCQkJCQkJCS8q
CisJCQkJCQkJICogSXQgaXMgcmVzdHJpY3RlZCBmb3Igc29tZQorCQkJCQkJCSAqIHJlYXNvbi4u
IHByb2JhYmx5IG5vdCB5ZXQgYWRkZWQuCisJCQkJCQkJICovCisJCQkJCQkJY29udGludWU7CisJ
CQkJCQl9CisJCQkJCX0KKwkJCQkJaWYgKCh0bXBfc2lmYS0+YWRkcmVzcy5zaW4uc2luX2ZhbWls
eSA9PSBBRl9JTkVUKSAmJgorCQkJCQkgICAgKElONF9JU1BSSVZBVEVfQUREUkVTUygmKHRtcF9z
aWZhLT5hZGRyZXNzLnNpbi5zaW5fYWRkcikpKSkgeworCQkJCQkJc2N0cF9hZGRfbG9jYWxfYWRk
cl9yZXN0cmljdGVkKHN0Y2IsIHRtcF9zaWZhKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQor
CQlhdG9taWNfYWRkX2ludCgmc2lmYS0+cmVmY291bnQsIDEpOworCX0KKyNlbmRpZgorCXJldHVy
biAoc2lmYSk7Cit9CisKKy8qIHRjYiBtYXkgYmUgTlVMTCAqLworc3RydWN0IHNjdHBfaWZhICoK
K3NjdHBfc291cmNlX2FkZHJlc3Nfc2VsZWN0aW9uKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCisJ
CQkgICAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCQkgICAgICBzY3RwX3JvdXRlX3QgKnJv
LAorCQkJICAgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0LAorCQkJICAgICAgaW50IG5vbl9hc29j
X2FkZHJfb2ssIHVpbnQzMl90IHZyZl9pZCkKK3sKKwlzdHJ1Y3Qgc2N0cF9pZmEgKmFuc3dlcjsK
Kwl1aW50OF90IGRlc3RfaXNfcHJpdiwgZGVzdF9pc19sb29wOworCXNhX2ZhbWlseV90IGZhbTsK
KyNpZmRlZiBJTkVUCisJc3RydWN0IHNvY2thZGRyX2luICp0byA9IChzdHJ1Y3Qgc29ja2FkZHJf
aW4gKikmcm8tPnJvX2RzdDsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJc3RydWN0IHNvY2thZGRy
X2luNiAqdG82ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmcm8tPnJvX2RzdDsKKyNlbmRpZgor
CisJLyoqCisJICogUnVsZXM6CisJICogLSBGaW5kIHRoZSByb3V0ZSBpZiBuZWVkZWQsIGNhY2hl
IGlmIEkgY2FuLgorCSAqIC0gTG9vayBhdCBpbnRlcmZhY2UgYWRkcmVzcyBpbiByb3V0ZSwgSXMg
aXQgaW4gdGhlIGJvdW5kIGxpc3QuIElmIHNvIHdlCisJICogICBoYXZlIHRoZSBiZXN0IHNvdXJj
ZS4KKwkgKiAtIElmIG5vdCB3ZSBtdXN0IHJvdGF0ZSBhbW9uZ3N0IHRoZSBhZGRyZXNzZXMuCisJ
ICoKKwkgKiBDYXZldHMgYW5kIGlzc3VlcworCSAqCisJICogRG8gd2UgbmVlZCB0byBwYXkgYXR0
ZW50aW9uIHRvIHNjb3BlLiBXZSBjYW4gaGF2ZSBhIHByaXZhdGUgYWRkcmVzcworCSAqIG9yIGEg
Z2xvYmFsIGFkZHJlc3Mgd2UgYXJlIHNvdXJjaW5nIG9yIHNlbmRpbmcgdG8uIFNvIGlmIHdlIGRy
YXcKKwkgKiBpdCBvdXQKKwkgKiB6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6
enp6enp6enp6enp6enp6enp6CisJICogRm9yIFY0CisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogICAgICBzb3VyY2UgICAgICogICAgICBkZXN0ICAq
ICByZXN1bHQKKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CSAqIDxhPiAgUHJpdmF0ZSAgICAqICAgIEdsb2JhbCAgKiAgTkFUCisJICogLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiA8Yj4gIFByaXZhdGUgICAgKiAgICBQ
cml2YXRlICogIE5vIHByb2JsZW0KKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCSAqIDxjPiAgR2xvYmFsICAgICAqICAgIFByaXZhdGUgKiAgSHVoLCBIb3cg
d2lsbCB0aGlzIHdvcms/CisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKwkgKiA8ZD4gIEdsb2JhbCAgICAgKiAgICBHbG9iYWwgICogIE5vIFByb2JsZW0KKwkg
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIHp6enp6enp6
enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enoKKwkgKiBGb3Ig
VjYKKwkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAg
ICAgc291cmNlICAgICAqICAgICAgZGVzdCAgKiAgcmVzdWx0CisJICogLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiA8YT4gIExpbmtsb2NhbCAgKiAgICBHbG9i
YWwgICoKKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAq
IDxiPiAgTGlua2xvY2FsICAqIExpbmtsb2NhbCAgKiAgTm8gcHJvYmxlbQorCSAqIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogPGM+ICBHbG9iYWwgICAgICog
TGlua2xvY2FsICAqICBIdWgsIEhvdyB3aWxsIHRoaXMgd29yaz8KKwkgKiAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIDxkPiAgR2xvYmFsICAgICAqICAgIEds
b2JhbCAgKiAgTm8gUHJvYmxlbQorCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisJICogenp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6
enp6enp6enp6enp6egorCSAqCisJICogQW5kIHRoZW4gd2UgYWRkIHRvIHRoYXQgd2hhdCBoYXBw
ZW5zIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBhZGRyZXNzZXMKKwkgKiBhc3NpZ25lZCB0byBhbiBp
bnRlcmZhY2UuIFJlbWVtYmVyIHRoZSBpZmEgb24gYSBpZm4gaXMgYSBsaW5rZWQKKwkgKiBsaXN0
IG9mIGFkZHJlc3Nlcy4gU28gb25lIGludGVyZmFjZSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIElQ
CisJICogYWRkcmVzcy4gV2hhdCBoYXBwZW5zIGlmIHdlIGhhdmUgYm90aCBhIHByaXZhdGUgYW5k
IGEgZ2xvYmFsCisJICogYWRkcmVzcz8gRG8gd2UgdGhlbiB1c2UgY29udGV4dCBvZiBkZXN0aW5h
dGlvbiB0byBzb3J0IG91dCB3aGljaAorCSAqIG9uZSBpcyBiZXN0PyBBbmQgd2hhdCBhYm91dCBO
QVQncyBzZW5kaW5nIFAtPkcgbWF5IGdldCB5b3UgYSBOQVQKKwkgKiB0cmFuc2xhdGlvbiwgb3Ig
c2hvdWxkIHlvdSBzZWxlY3QgdGhlIEcgdGhhdHMgb24gdGhlIGludGVyZmFjZSBpbgorCSAqIHBy
ZWZlcmVuY2UuCisJICoKKwkgKiBEZWNpc2lvbnM6CisJICoKKwkgKiAtIGNvdW50IHRoZSBudW1i
ZXIgb2YgYWRkcmVzc2VzIG9uIHRoZSBpbnRlcmZhY2UuCisJICogLSBpZiBpdCBpcyBvbmUsIG5v
IHByb2JsZW0gZXhjZXB0IGNhc2UgPGM+LgorCSAqICAgRm9yIDxhPiB3ZSB3aWxsIGFzc3VtZSBh
IE5BVCBvdXQgdGhlcmUuCisJICogLSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSwgdGhlbiB3
ZSBuZWVkIHRvIHdvcnJ5IGFib3V0IHNjb3BlIFAKKwkgKiAgIG9yIEcuIFdlIHNob3VsZCBwcmVm
ZXIgRyAtPiBHIGFuZCBQIC0+IFAgaWYgcG9zc2libGUuCisJICogICBUaGVuIGFzIGEgc2Vjb25k
YXJ5IGZhbGwgYmFjayB0byBtaXhlZCB0eXBlcyBHLT5QIGJlaW5nIGEgbGFzdAorCSAqICAgZGl0
Y2ggb25lLgorCSAqIC0gVGhlIGFib3ZlIGFsbCB3b3JrcyBmb3IgYm91bmQgYWxsLCBidXQgYm91
bmQgc3BlY2lmaWMgd2UgbmVlZCB0bworCSAqICAgdXNlIHRoZSBzYW1lIGNvbmNlcHQgYnV0IGlu
c3RlYWQgb25seSBjb25zaWRlciB0aGUgYm91bmQKKwkgKiAgIGFkZHJlc3Nlcy4gSWYgdGhlIGJv
dW5kIHNldCBpcyBOT1QgYXNzaWduZWQgdG8gdGhlIGludGVyZmFjZSB0aGVuCisJICogICB3ZSBt
dXN0IHVzZSByb3RhdGlvbiBhbW9uZ3N0IHRoZSBib3VuZCBhZGRyZXNzZXMuLgorCSAqLworI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaWYgKHJv
LT5yb19uaCA9PSBOVUxMKSB7CisjZWxzZQorCWlmIChyby0+cm9fcnQgPT0gTlVMTCkgeworI2Vu
ZGlmCisJCS8qCisJCSAqIE5lZWQgYSByb3V0ZSB0byBjYWNoZS4KKwkJICovCisJCVNDVFBfUlRB
TExPQyhybywgdnJmX2lkLCBpbnAtPmZpYm51bSk7CisJfQorI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaWYgKHJvLT5yb19uaCA9PSBOVUxMKSB7
CisjZWxzZQorCWlmIChyby0+cm9fcnQgPT0gTlVMTCkgeworI2VuZGlmCisJCXJldHVybiAoTlVM
TCk7CisJfQorI2lmIGRlZmluZWQoX1dJTjMyKQorCS8qIE9uIFdpbmRvd3MgdGhlIHNhX2ZhbWls
eSBpcyBVX1NIT1JUIG9yIEFERFJFU1NfRkFNSUxZICovCisJZmFtID0gKHNhX2ZhbWlseV90KXJv
LT5yb19kc3Quc2FfZmFtaWx5OworI2Vsc2UKKwlmYW0gPSByby0+cm9fZHN0LnNhX2ZhbWlseTsK
KyNlbmRpZgorCWRlc3RfaXNfcHJpdiA9IGRlc3RfaXNfbG9vcCA9IDA7CisJLyogU2V0dXAgb3Vy
IHNjb3BlcyBmb3IgdGhlIGRlc3RpbmF0aW9uICovCisJc3dpdGNoIChmYW0pIHsKKyNpZmRlZiBJ
TkVUCisJY2FzZSBBRl9JTkVUOgorCQkvKiBTY29wZSBiYXNlZCBvbiBvdXRib3VuZCBhZGRyZXNz
ICovCisJCWlmIChJTjRfSVNMT09QQkFDS19BRERSRVNTKCZ0by0+c2luX2FkZHIpKSB7CisJCQlk
ZXN0X2lzX2xvb3AgPSAxOworCQkJaWYgKG5ldCAhPSBOVUxMKSB7CisJCQkJLyogbWFyayBpdCBh
cyBsb2NhbCAqLworCQkJCW5ldC0+YWRkcl9pc19sb2NhbCA9IDE7CisJCQl9CisJCX0gZWxzZSBp
ZiAoKElONF9JU1BSSVZBVEVfQUREUkVTUygmdG8tPnNpbl9hZGRyKSkpIHsKKwkJCWRlc3RfaXNf
cHJpdiA9IDE7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZf
SU5FVDY6CisJCS8qIFNjb3BlIGJhc2VkIG9uIG91dGJvdW5kIGFkZHJlc3MgKi8KKyNpZiBkZWZp
bmVkKF9XSU4zMikKKwkJaWYgKElONl9JU19BRERSX0xPT1BCQUNLKCZ0bzYtPnNpbjZfYWRkcikp
IHsKKyNlbHNlCisJCWlmIChJTjZfSVNfQUREUl9MT09QQkFDSygmdG82LT5zaW42X2FkZHIpIHx8
CisJCSAgICBTQ1RQX1JPVVRFX0lTX1JFQUxfTE9PUChybykpIHsKKyNlbmRpZgorCQkJLyoKKwkJ
CSAqIElmIHRoZSBhZGRyZXNzIGlzIGEgbG9vcGJhY2sgYWRkcmVzcywgd2hpY2gKKwkJCSAqIGNv
bnNpc3RzIG9mICI6OjEiIE9SICJmZTgwOjoxJWxvMCIsIHdlIGFyZSBsb29wYmFjaworCQkJICog
c2NvcGUuIEJ1dCB3ZSBkb24ndCB1c2UgZGVzdF9pc19wcml2IChsaW5rIGxvY2FsCisJCQkgKiBh
ZGRyZXNzZXMpLgorCQkJICovCisJCQlkZXN0X2lzX2xvb3AgPSAxOworCQkJaWYgKG5ldCAhPSBO
VUxMKSB7CisJCQkJLyogbWFyayBpdCBhcyBsb2NhbCAqLworCQkJCW5ldC0+YWRkcl9pc19sb2Nh
bCA9IDE7CisJCQl9CisJCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKCZ0bzYtPnNp
bjZfYWRkcikpIHsKKwkJCWRlc3RfaXNfcHJpdiA9IDE7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYK
Kwl9CisJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJTZWxlY3Qgc291cmNlIGFkZHIgZm9y
OiIpOworCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX09VVFBVVDIsIChzdHJ1Y3Qgc29ja2FkZHIg
Kikmcm8tPnJvX2RzdCk7CisJU0NUUF9JUElfQUREUl9STE9DSygpOworCWlmIChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgeworCQkvKgorCQkgKiBCb3VuZCBhbGwg
Y2FzZQorCQkgKi8KKwkJYW5zd2VyID0gc2N0cF9jaG9vc2VfYm91bmRhbGwoaW5wLCBzdGNiLCBu
ZXQsIHJvLCB2cmZfaWQsCisJCQkJCSAgICAgIGRlc3RfaXNfcHJpdiwgZGVzdF9pc19sb29wLAor
CQkJCQkgICAgICBub25fYXNvY19hZGRyX29rLCBmYW0pOworCQlTQ1RQX0lQSV9BRERSX1JVTkxP
Q0soKTsKKwkJcmV0dXJuIChhbnN3ZXIpOworCX0KKwkvKgorCSAqIFN1YnNldCBib3VuZCBjYXNl
CisJICovCisJaWYgKHN0Y2IpIHsKKwkJYW5zd2VyID0gc2N0cF9jaG9vc2VfYm91bmRzcGVjaWZp
Y19zdGNiKGlucCwgc3RjYiwgcm8sCisJCQkJCQkJdnJmX2lkLAlkZXN0X2lzX3ByaXYsCisJCQkJ
CQkJZGVzdF9pc19sb29wLAorCQkJCQkJCW5vbl9hc29jX2FkZHJfb2ssIGZhbSk7CisJfSBlbHNl
IHsKKwkJYW5zd2VyID0gc2N0cF9jaG9vc2VfYm91bmRzcGVjaWZpY19pbnAoaW5wLCBybywgdnJm
X2lkLAorCQkJCQkJICAgICAgIG5vbl9hc29jX2FkZHJfb2ssCisJCQkJCQkgICAgICAgZGVzdF9p
c19wcml2LAorCQkJCQkJICAgICAgIGRlc3RfaXNfbG9vcCwgZmFtKTsKKwl9CisJU0NUUF9JUElf
QUREUl9SVU5MT0NLKCk7CisJcmV0dXJuIChhbnN3ZXIpOworfQorCitzdGF0aWMgaW50CitzY3Rw
X2ZpbmRfY21zZyhpbnQgY190eXBlLCB2b2lkICpkYXRhLCBzdHJ1Y3QgbWJ1ZiAqY29udHJvbCwg
c2l6ZV90IGNwc2l6ZSkKK3sKKyNpZiBkZWZpbmVkKF9XSU4zMikKKwlXU0FDTVNHSERSIGNtaDsK
KyNlbHNlCisJc3RydWN0IGNtc2doZHIgY21oOworI2VuZGlmCisJc3RydWN0IHNjdHBfc25kaW5m
byBzbmRpbmZvOworCXN0cnVjdCBzY3RwX3ByaW5mbyBwcmluZm87CisJc3RydWN0IHNjdHBfYXV0
aGluZm8gYXV0aGluZm87CisJaW50IHRvdF9sZW4sIHJlbV9sZW4sIGNtc2dfZGF0YV9sZW4sIGNt
c2dfZGF0YV9vZmYsIG9mZjsKKwlpbnQgZm91bmQ7CisKKwkvKgorCSAqIEluZGVwZW5kZW50IG9m
IGhvdyBtYW55IG1idWZzLCBmaW5kIHRoZSBjX3R5cGUgaW5zaWRlIHRoZSBjb250cm9sCisJICog
c3RydWN0dXJlIGFuZCBjb3B5IG91dCB0aGUgZGF0YS4KKwkgKi8KKwlmb3VuZCA9IDA7CisJdG90
X2xlbiA9IFNDVFBfQlVGX0xFTihjb250cm9sKTsKKwlmb3IgKG9mZiA9IDA7IG9mZiA8IHRvdF9s
ZW47IG9mZiArPSBDTVNHX0FMSUdOKGNtaC5jbXNnX2xlbikpIHsKKwkJcmVtX2xlbiA9IHRvdF9s
ZW4gLSBvZmY7CisJCWlmIChyZW1fbGVuIDwgKGludClDTVNHX0FMSUdOKHNpemVvZihjbWgpKSkg
eworCQkJLyogVGhlcmUgaXMgbm90IGVub3VnaCByb29tIGZvciBvbmUgbW9yZS4gKi8KKwkJCXJl
dHVybiAoZm91bmQpOworCQl9CisJCW1fY29weWRhdGEoY29udHJvbCwgb2ZmLCBzaXplb2YoY21o
KSwgKGNhZGRyX3QpJmNtaCk7CisJCWlmIChjbWguY21zZ19sZW4gPCBDTVNHX0FMSUdOKHNpemVv
ZihjbWgpKSkgeworCQkJLyogV2UgZG9udCd0IGhhdmUgYSBjb21wbGV0ZSBDTVNHIGhlYWRlci4g
Ki8KKwkJCXJldHVybiAoZm91bmQpOworCQl9CisJCWlmICgoY21oLmNtc2dfbGVuID4gSU5UX01B
WCkgfHwgKChpbnQpY21oLmNtc2dfbGVuID4gcmVtX2xlbikpIHsKKwkJCS8qIFdlIGRvbid0IGhh
dmUgdGhlIGNvbXBsZXRlIENNU0cuICovCisJCQlyZXR1cm4gKGZvdW5kKTsKKwkJfQorCQljbXNn
X2RhdGFfbGVuID0gKGludCljbWguY21zZ19sZW4gLSBDTVNHX0FMSUdOKHNpemVvZihjbWgpKTsK
KwkJY21zZ19kYXRhX29mZiA9IG9mZiArIENNU0dfQUxJR04oc2l6ZW9mKGNtaCkpOworCQlpZiAo
KGNtaC5jbXNnX2xldmVsID09IElQUFJPVE9fU0NUUCkgJiYKKwkJICAgICgoY190eXBlID09IGNt
aC5jbXNnX3R5cGUpIHx8CisJCSAgICAgKChjX3R5cGUgPT0gU0NUUF9TTkRSQ1YpICYmCisJCSAg
ICAgICgoY21oLmNtc2dfdHlwZSA9PSBTQ1RQX1NORElORk8pIHx8CisJCSAgICAgICAoY21oLmNt
c2dfdHlwZSA9PSBTQ1RQX1BSSU5GTykgfHwKKwkJICAgICAgIChjbWguY21zZ190eXBlID09IFND
VFBfQVVUSElORk8pKSkpKSB7CisJCQlpZiAoY190eXBlID09IGNtaC5jbXNnX3R5cGUpIHsKKwkJ
CQlpZiAoY3BzaXplID4gSU5UX01BWCkgeworCQkJCQlyZXR1cm4gKGZvdW5kKTsKKwkJCQl9CisJ
CQkJaWYgKGNtc2dfZGF0YV9sZW4gPCAoaW50KWNwc2l6ZSkgeworCQkJCQlyZXR1cm4gKGZvdW5k
KTsKKwkJCQl9CisJCQkJLyogSXQgaXMgZXhhY3RseSB3aGF0IHdlIHdhbnQuIENvcHkgaXQgb3V0
LiAqLworCQkJCW1fY29weWRhdGEoY29udHJvbCwgY21zZ19kYXRhX29mZiwgKGludCljcHNpemUs
IChjYWRkcl90KWRhdGEpOworCQkJCXJldHVybiAoMSk7CisJCQl9IGVsc2UgeworCQkJCXN0cnVj
dCBzY3RwX3NuZHJjdmluZm8gKnNuZHJjdmluZm87CisKKwkJCQlzbmRyY3ZpbmZvID0gKHN0cnVj
dCBzY3RwX3NuZHJjdmluZm8gKilkYXRhOworCQkJCWlmIChmb3VuZCA9PSAwKSB7CisJCQkJCWlm
IChjcHNpemUgPCBzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbykpIHsKKwkJCQkJCXJldHVy
biAoZm91bmQpOworCQkJCQl9CisJCQkJCW1lbXNldChzbmRyY3ZpbmZvLCAwLCBzaXplb2Yoc3Ry
dWN0IHNjdHBfc25kcmN2aW5mbykpOworCQkJCX0KKwkJCQlzd2l0Y2ggKGNtaC5jbXNnX3R5cGUp
IHsKKwkJCQljYXNlIFNDVFBfU05ESU5GTzoKKwkJCQkJaWYgKGNtc2dfZGF0YV9sZW4gPCAoaW50
KXNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSkgeworCQkJCQkJcmV0dXJuIChmb3VuZCk7CisJ
CQkJCX0KKwkJCQkJbV9jb3B5ZGF0YShjb250cm9sLCBjbXNnX2RhdGFfb2ZmLCBzaXplb2Yoc3Ry
dWN0IHNjdHBfc25kaW5mbyksIChjYWRkcl90KSZzbmRpbmZvKTsKKwkJCQkJc25kcmN2aW5mby0+
c2luZm9fc3RyZWFtID0gc25kaW5mby5zbmRfc2lkOworCQkJCQlzbmRyY3ZpbmZvLT5zaW5mb19m
bGFncyA9IHNuZGluZm8uc25kX2ZsYWdzOworCQkJCQlzbmRyY3ZpbmZvLT5zaW5mb19wcGlkID0g
c25kaW5mby5zbmRfcHBpZDsKKwkJCQkJc25kcmN2aW5mby0+c2luZm9fY29udGV4dCA9IHNuZGlu
Zm8uc25kX2NvbnRleHQ7CisJCQkJCXNuZHJjdmluZm8tPnNpbmZvX2Fzc29jX2lkID0gc25kaW5m
by5zbmRfYXNzb2NfaWQ7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgU0NUUF9QUklORk86CisJCQkJ
CWlmIChjbXNnX2RhdGFfbGVuIDwgKGludClzaXplb2Yoc3RydWN0IHNjdHBfcHJpbmZvKSkgewor
CQkJCQkJcmV0dXJuIChmb3VuZCk7CisJCQkJCX0KKwkJCQkJbV9jb3B5ZGF0YShjb250cm9sLCBj
bXNnX2RhdGFfb2ZmLCBzaXplb2Yoc3RydWN0IHNjdHBfcHJpbmZvKSwgKGNhZGRyX3QpJnByaW5m
byk7CisJCQkJCWlmIChwcmluZm8ucHJfcG9saWN5ICE9IFNDVFBfUFJfU0NUUF9OT05FKSB7CisJ
CQkJCQlzbmRyY3ZpbmZvLT5zaW5mb190aW1ldG9saXZlID0gcHJpbmZvLnByX3ZhbHVlOworCQkJ
CQl9IGVsc2UgeworCQkJCQkJc25kcmN2aW5mby0+c2luZm9fdGltZXRvbGl2ZSA9IDA7CisJCQkJ
CX0KKwkJCQkJc25kcmN2aW5mby0+c2luZm9fZmxhZ3MgfD0gcHJpbmZvLnByX3BvbGljeTsKKwkJ
CQkJYnJlYWs7CisJCQkJY2FzZSBTQ1RQX0FVVEhJTkZPOgorCQkJCQlpZiAoY21zZ19kYXRhX2xl
biA8IChpbnQpc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhpbmZvKSkgeworCQkJCQkJcmV0dXJuIChm
b3VuZCk7CisJCQkJCX0KKwkJCQkJbV9jb3B5ZGF0YShjb250cm9sLCBjbXNnX2RhdGFfb2ZmLCBz
aXplb2Yoc3RydWN0IHNjdHBfYXV0aGluZm8pLCAoY2FkZHJfdCkmYXV0aGluZm8pOworCQkJCQlz
bmRyY3ZpbmZvLT5zaW5mb19rZXludW1iZXJfdmFsaWQgPSAxOworCQkJCQlzbmRyY3ZpbmZvLT5z
aW5mb19rZXludW1iZXIgPSBhdXRoaW5mby5hdXRoX2tleW51bWJlcjsKKwkJCQkJYnJlYWs7CisJ
CQkJZGVmYXVsdDoKKwkJCQkJcmV0dXJuIChmb3VuZCk7CisJCQkJfQorCQkJCWZvdW5kID0gMTsK
KwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gKGZvdW5kKTsKK30KKworc3RhdGljIGludAorc2N0cF9w
cm9jZXNzX2Ntc2dzX2Zvcl9pbml0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IG1idWYg
KmNvbnRyb2wsIGludCAqZXJyb3IpCit7CisjaWYgZGVmaW5lZChfV0lOMzIpCisJV1NBQ01TR0hE
UiBjbWg7CisjZWxzZQorCXN0cnVjdCBjbXNnaGRyIGNtaDsKKyNlbmRpZgorCXN0cnVjdCBzY3Rw
X2luaXRtc2cgaW5pdG1zZzsKKyNpZmRlZiBJTkVUCisJc3RydWN0IHNvY2thZGRyX2luIHNpbjsK
KyNlbmRpZgorI2lmZGVmIElORVQ2CisJc3RydWN0IHNvY2thZGRyX2luNiBzaW42OworI2VuZGlm
CisJaW50IHRvdF9sZW4sIHJlbV9sZW4sIGNtc2dfZGF0YV9sZW4sIGNtc2dfZGF0YV9vZmYsIG9m
ZjsKKworCXRvdF9sZW4gPSBTQ1RQX0JVRl9MRU4oY29udHJvbCk7CisJZm9yIChvZmYgPSAwOyBv
ZmYgPCB0b3RfbGVuOyBvZmYgKz0gQ01TR19BTElHTihjbWguY21zZ19sZW4pKSB7CisJCXJlbV9s
ZW4gPSB0b3RfbGVuIC0gb2ZmOworCQlpZiAocmVtX2xlbiA8IChpbnQpQ01TR19BTElHTihzaXpl
b2YoY21oKSkpIHsKKwkJCS8qIFRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSBmb3Igb25lIG1vcmUu
ICovCisJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQlyZXR1cm4gKDEpOworCQl9CisJCW1fY29weWRh
dGEoY29udHJvbCwgb2ZmLCBzaXplb2YoY21oKSwgKGNhZGRyX3QpJmNtaCk7CisJCWlmIChjbWgu
Y21zZ19sZW4gPCBDTVNHX0FMSUdOKHNpemVvZihjbWgpKSkgeworCQkJLyogV2UgZG9udCd0IGhh
dmUgYSBjb21wbGV0ZSBDTVNHIGhlYWRlci4gKi8KKwkJCSplcnJvciA9IEVJTlZBTDsKKwkJCXJl
dHVybiAoMSk7CisJCX0KKwkJaWYgKChjbWguY21zZ19sZW4gPiBJTlRfTUFYKSB8fCAoKGludClj
bWguY21zZ19sZW4gPiByZW1fbGVuKSkgeworCQkJLyogV2UgZG9uJ3QgaGF2ZSB0aGUgY29tcGxl
dGUgQ01TRy4gKi8KKwkJCSplcnJvciA9IEVJTlZBTDsKKwkJCXJldHVybiAoMSk7CisJCX0KKwkJ
Y21zZ19kYXRhX2xlbiA9IChpbnQpY21oLmNtc2dfbGVuIC0gQ01TR19BTElHTihzaXplb2YoY21o
KSk7CisJCWNtc2dfZGF0YV9vZmYgPSBvZmYgKyBDTVNHX0FMSUdOKHNpemVvZihjbWgpKTsKKwkJ
aWYgKGNtaC5jbXNnX2xldmVsID09IElQUFJPVE9fU0NUUCkgeworCQkJc3dpdGNoIChjbWguY21z
Z190eXBlKSB7CisJCQljYXNlIFNDVFBfSU5JVDoKKwkJCQlpZiAoY21zZ19kYXRhX2xlbiA8IChp
bnQpc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRtc2cpKSB7CisJCQkJCSplcnJvciA9IEVJTlZBTDsK
KwkJCQkJcmV0dXJuICgxKTsKKwkJCQl9CisJCQkJbV9jb3B5ZGF0YShjb250cm9sLCBjbXNnX2Rh
dGFfb2ZmLCBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdG1zZyksIChjYWRkcl90KSZpbml0bXNnKTsK
KwkJCQlpZiAoaW5pdG1zZy5zaW5pdF9tYXhfYXR0ZW1wdHMpCisJCQkJCXN0Y2ItPmFzb2MubWF4
X2luaXRfdGltZXMgPSBpbml0bXNnLnNpbml0X21heF9hdHRlbXB0czsKKwkJCQlpZiAoaW5pdG1z
Zy5zaW5pdF9udW1fb3N0cmVhbXMpCisJCQkJCXN0Y2ItPmFzb2MucHJlX29wZW5fc3RyZWFtcyA9
IGluaXRtc2cuc2luaXRfbnVtX29zdHJlYW1zOworCQkJCWlmIChpbml0bXNnLnNpbml0X21heF9p
bnN0cmVhbXMpCisJCQkJCXN0Y2ItPmFzb2MubWF4X2luYm91bmRfc3RyZWFtcyA9IGluaXRtc2cu
c2luaXRfbWF4X2luc3RyZWFtczsKKwkJCQlpZiAoaW5pdG1zZy5zaW5pdF9tYXhfaW5pdF90aW1l
bykKKwkJCQkJc3RjYi0+YXNvYy5pbml0aWFsX2luaXRfcnRvX21heCA9IGluaXRtc2cuc2luaXRf
bWF4X2luaXRfdGltZW87CisJCQkJaWYgKHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250IDwgc3RjYi0+
YXNvYy5wcmVfb3Blbl9zdHJlYW1zKSB7CisJCQkJCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnRt
cF9zdHI7CisJCQkJCXVuc2lnbmVkIGludCBpOworI2lmIGRlZmluZWQoU0NUUF9ERVRBSUxFRF9T
VFJfU1RBVFMpCisJCQkJCWludCBqOworI2VuZGlmCisKKwkJCQkJLyogRGVmYXVsdCBpcyBOT1Qg
Y29ycmVjdCAqLworCQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIk9rLCBkZWZhdWx0
OiVkIHByZV9vcGVuOiVkXG4iLAorCQkJCQkJc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQsIHN0Y2It
PmFzb2MucHJlX29wZW5fc3RyZWFtcyk7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJ
CQkJU0NUUF9NQUxMT0ModG1wX3N0ciwKKwkJCQkJICAgICAgICAgICAgc3RydWN0IHNjdHBfc3Ry
ZWFtX291dCAqLAorCQkJCQkgICAgICAgICAgICAoc3RjYi0+YXNvYy5wcmVfb3Blbl9zdHJlYW1z
ICogc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQpKSwKKwkJCQkJICAgICAgICAgICAgU0NU
UF9NX1NUUk1PKTsKKwkJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQkJaWYgKHRtcF9zdHIg
IT0gTlVMTCkgeworCQkJCQkJU0NUUF9GUkVFKHN0Y2ItPmFzb2Muc3RybW91dCwgU0NUUF9NX1NU
Uk1PKTsKKwkJCQkJCXN0Y2ItPmFzb2Muc3RybW91dCA9IHRtcF9zdHI7CisJCQkJCQlzdGNiLT5h
c29jLnN0cm1fcmVhbG91dHNpemUgPSBzdGNiLT5hc29jLnN0cmVhbW91dGNudCA9IHN0Y2ItPmFz
b2MucHJlX29wZW5fc3RyZWFtczsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXN0Y2ItPmFzb2MucHJl
X29wZW5fc3RyZWFtcyA9IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OworCQkJCQl9CisJCQkJCWZv
ciAoaSA9IDA7IGkgPCBzdGNiLT5hc29jLnN0cmVhbW91dGNudDsgaSsrKSB7CisJCQkJCQlUQUlM
UV9JTklUKCZzdGNiLT5hc29jLnN0cm1vdXRbaV0ub3V0cXVldWUpOworCQkJCQkJc3RjYi0+YXNv
Yy5zc19mdW5jdGlvbnMuc2N0cF9zc19pbml0X3N0cmVhbShzdGNiLCAmc3RjYi0+YXNvYy5zdHJt
b3V0W2ldLCBOVUxMKTsKKwkJCQkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5jaHVua3Nfb25fcXVl
dWVzID0gMDsKKyNpZiBkZWZpbmVkKFNDVFBfREVUQUlMRURfU1RSX1NUQVRTKQorCQkJCQkJZm9y
IChqID0gMDsgaiA8IFNDVFBfUFJfU0NUUF9NQVggKyAxOyBqKyspIHsKKwkJCQkJCQlzdGNiLT5h
c29jLnN0cm1vdXRbaV0uYWJhbmRvbmVkX3NlbnRbal0gPSAwOworCQkJCQkJCXN0Y2ItPmFzb2Mu
c3RybW91dFtpXS5hYmFuZG9uZWRfdW5zZW50W2pdID0gMDsKKwkJCQkJCX0KKyNlbHNlCisJCQkJ
CQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uYWJhbmRvbmVkX3NlbnRbMF0gPSAwOworCQkJCQkJc3Rj
Yi0+YXNvYy5zdHJtb3V0W2ldLmFiYW5kb25lZF91bnNlbnRbMF0gPSAwOworI2VuZGlmCisJCQkJ
CQlzdGNiLT5hc29jLnN0cm1vdXRbaV0ubmV4dF9taWRfb3JkZXJlZCA9IDA7CisJCQkJCQlzdGNi
LT5hc29jLnN0cm1vdXRbaV0ubmV4dF9taWRfdW5vcmRlcmVkID0gMDsKKwkJCQkJCXN0Y2ItPmFz
b2Muc3RybW91dFtpXS5zaWQgPSBpOworCQkJCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLmxhc3Rf
bXNnX2luY29tcGxldGUgPSAwOworCQkJCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLnN0YXRlID0g
U0NUUF9TVFJFQU1fT1BFTklORzsKKwkJCQkJfQorCQkJCX0KKwkJCQlicmVhazsKKyNpZmRlZiBJ
TkVUCisJCQljYXNlIFNDVFBfRFNUQUREUlY0OgorCQkJCWlmIChjbXNnX2RhdGFfbGVuIDwgKGlu
dClzaXplb2Yoc3RydWN0IGluX2FkZHIpKSB7CisJCQkJCSplcnJvciA9IEVJTlZBTDsKKwkJCQkJ
cmV0dXJuICgxKTsKKwkJCQl9CisJCQkJbWVtc2V0KCZzaW4sIDAsIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pKTsKKwkJCQlzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9T
SU5fTEVOCisJCQkJc2luLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNl
bmRpZgorCQkJCXNpbi5zaW5fcG9ydCA9IHN0Y2ItPnJwb3J0OworCQkJCW1fY29weWRhdGEoY29u
dHJvbCwgY21zZ19kYXRhX29mZiwgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSwgKGNhZGRyX3QpJnNp
bi5zaW5fYWRkcik7CisJCQkJaWYgKChzaW4uc2luX2FkZHIuc19hZGRyID09IElOQUREUl9BTlkp
IHx8CisJCQkJICAgIChzaW4uc2luX2FkZHIuc19hZGRyID09IElOQUREUl9CUk9BRENBU1QpIHx8
CisJCQkJICAgIElOX01VTFRJQ0FTVChudG9obChzaW4uc2luX2FkZHIuc19hZGRyKSkpIHsKKwkJ
CQkJKmVycm9yID0gRUlOVkFMOworCQkJCQlyZXR1cm4gKDEpOworCQkJCX0KKwkJCQlpZiAoc2N0
cF9hZGRfcmVtb3RlX2FkZHIoc3RjYiwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIE5VTEwsIHN0
Y2ItPmFzb2MucG9ydCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9ET05PVF9T
RVRTQ09QRSwgU0NUUF9BRERSX0lTX0NPTkZJUk1FRCkpIHsKKwkJCQkJKmVycm9yID0gRU5PQlVG
UzsKKwkJCQkJcmV0dXJuICgxKTsKKwkJCQl9CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJ
TkVUNgorCQkJY2FzZSBTQ1RQX0RTVEFERFJWNjoKKwkJCQlpZiAoY21zZ19kYXRhX2xlbiA8IChp
bnQpc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpIHsKKwkJCQkJKmVycm9yID0gRUlOVkFMOworCQkJ
CQlyZXR1cm4gKDEpOworCQkJCX0KKwkJCQltZW1zZXQoJnNpbjYsIDAsIHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW42KSk7CisJCQkJc2luNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworI2lmZGVm
IEhBVkVfU0lONl9MRU4KKwkJCQlzaW42LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbjYpOworI2VuZGlmCisJCQkJc2luNi5zaW42X3BvcnQgPSBzdGNiLT5ycG9ydDsKKwkJCQlt
X2NvcHlkYXRhKGNvbnRyb2wsIGNtc2dfZGF0YV9vZmYsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIp
LCAoY2FkZHJfdCkmc2luNi5zaW42X2FkZHIpOworCQkJCWlmIChJTjZfSVNfQUREUl9VTlNQRUNJ
RklFRCgmc2luNi5zaW42X2FkZHIpIHx8CisJCQkJICAgIElONl9JU19BRERSX01VTFRJQ0FTVCgm
c2luNi5zaW42X2FkZHIpKSB7CisJCQkJCSplcnJvciA9IEVJTlZBTDsKKwkJCQkJcmV0dXJuICgx
KTsKKwkJCQl9CisjaWZkZWYgSU5FVAorCQkJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmc2lu
Ni5zaW42X2FkZHIpKSB7CisJCQkJCWluNl9zaW42XzJfc2luKCZzaW4sICZzaW42KTsKKwkJCQkJ
aWYgKChzaW4uc2luX2FkZHIuc19hZGRyID09IElOQUREUl9BTlkpIHx8CisJCQkJCSAgICAoc2lu
LnNpbl9hZGRyLnNfYWRkciA9PSBJTkFERFJfQlJPQURDQVNUKSB8fAorCQkJCQkgICAgSU5fTVVM
VElDQVNUKG50b2hsKHNpbi5zaW5fYWRkci5zX2FkZHIpKSkgeworCQkJCQkJKmVycm9yID0gRUlO
VkFMOworCQkJCQkJcmV0dXJuICgxKTsKKwkJCQkJfQorCQkJCQlpZiAoc2N0cF9hZGRfcmVtb3Rl
X2FkZHIoc3RjYiwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIE5VTEwsIHN0Y2ItPmFzb2MucG9y
dCwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfRE9OT1RfU0VUU0NPUEUsIFND
VFBfQUREUl9JU19DT05GSVJNRUQpKSB7CisJCQkJCQkqZXJyb3IgPSBFTk9CVUZTOworCQkJCQkJ
cmV0dXJuICgxKTsKKwkJCQkJfQorCQkJCX0gZWxzZQorI2VuZGlmCisJCQkJCWlmIChzY3RwX2Fk
ZF9yZW1vdGVfYWRkcihzdGNiLCAoc3RydWN0IHNvY2thZGRyICopJnNpbjYsIE5VTEwsIHN0Y2It
PmFzb2MucG9ydCwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfRE9OT1RfU0VU
U0NPUEUsIFNDVFBfQUREUl9JU19DT05GSVJNRUQpKSB7CisJCQkJCQkqZXJyb3IgPSBFTk9CVUZT
OworCQkJCQkJcmV0dXJuICgxKTsKKwkJCQkJfQorCQkJCWJyZWFrOworI2VuZGlmCisJCQlkZWZh
dWx0OgorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXJldHVybiAoMCk7Cit9CisKKyNpZiBk
ZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCitzdGF0aWMgc3RydWN0IHNjdHBfdGNiICoK
K3NjdHBfZmluZGFzc29jaWF0aW9uX2Ntc2dzKHN0cnVjdCBzY3RwX2lucGNiICoqaW5wX3AsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBwb3J0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IG1idWYgKmNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICoqbmV0X3AsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgKmVycm9yKQoreworI2lmIGRlZmluZWQoX1dJTjMyKQorCVdTQUNNU0dIRFIgY21oOwor
I2Vsc2UKKwlzdHJ1Y3QgY21zZ2hkciBjbWg7CisjZW5kaWYKKwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2I7CisJc3RydWN0IHNvY2thZGRyICphZGRyOworI2lmZGVmIElORVQKKwlzdHJ1Y3Qgc29ja2Fk
ZHJfaW4gc2luOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNp
bjY7CisjZW5kaWYKKwlpbnQgdG90X2xlbiwgcmVtX2xlbiwgY21zZ19kYXRhX2xlbiwgY21zZ19k
YXRhX29mZiwgb2ZmOworCisJdG90X2xlbiA9IFNDVFBfQlVGX0xFTihjb250cm9sKTsKKwlmb3Ig
KG9mZiA9IDA7IG9mZiA8IHRvdF9sZW47IG9mZiArPSBDTVNHX0FMSUdOKGNtaC5jbXNnX2xlbikp
IHsKKwkJcmVtX2xlbiA9IHRvdF9sZW4gLSBvZmY7CisJCWlmIChyZW1fbGVuIDwgKGludClDTVNH
X0FMSUdOKHNpemVvZihjbWgpKSkgeworCQkJLyogVGhlcmUgaXMgbm90IGVub3VnaCByb29tIGZv
ciBvbmUgbW9yZS4gKi8KKwkJCSplcnJvciA9IEVJTlZBTDsKKwkJCXJldHVybiAoTlVMTCk7CisJ
CX0KKwkJbV9jb3B5ZGF0YShjb250cm9sLCBvZmYsIHNpemVvZihjbWgpLCAoY2FkZHJfdCkmY21o
KTsKKwkJaWYgKGNtaC5jbXNnX2xlbiA8IENNU0dfQUxJR04oc2l6ZW9mKGNtaCkpKSB7CisJCQkv
KiBXZSBkb250J3QgaGF2ZSBhIGNvbXBsZXRlIENNU0cgaGVhZGVyLiAqLworCQkJKmVycm9yID0g
RUlOVkFMOworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQlpZiAoKGNtaC5jbXNnX2xlbiA+IElO
VF9NQVgpIHx8ICgoaW50KWNtaC5jbXNnX2xlbiA+IHJlbV9sZW4pKSB7CisJCQkvKiBXZSBkb24n
dCBoYXZlIHRoZSBjb21wbGV0ZSBDTVNHLiAqLworCQkJKmVycm9yID0gRUlOVkFMOworCQkJcmV0
dXJuIChOVUxMKTsKKwkJfQorCQljbXNnX2RhdGFfbGVuID0gKGludCljbWguY21zZ19sZW4gLSBD
TVNHX0FMSUdOKHNpemVvZihjbWgpKTsKKwkJY21zZ19kYXRhX29mZiA9IG9mZiArIENNU0dfQUxJ
R04oc2l6ZW9mKGNtaCkpOworCQlpZiAoY21oLmNtc2dfbGV2ZWwgPT0gSVBQUk9UT19TQ1RQKSB7
CisJCQlzd2l0Y2ggKGNtaC5jbXNnX3R5cGUpIHsKKyNpZmRlZiBJTkVUCisJCQljYXNlIFNDVFBf
RFNUQUREUlY0OgorCQkJCWlmIChjbXNnX2RhdGFfbGVuIDwgKGludClzaXplb2Yoc3RydWN0IGlu
X2FkZHIpKSB7CisJCQkJCSplcnJvciA9IEVJTlZBTDsKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJ
CQl9CisJCQkJbWVtc2V0KCZzaW4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwkJ
CQlzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJCQkJc2lu
LnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCQkJCXNpbi5z
aW5fcG9ydCA9IHBvcnQ7CisJCQkJbV9jb3B5ZGF0YShjb250cm9sLCBjbXNnX2RhdGFfb2ZmLCBz
aXplb2Yoc3RydWN0IGluX2FkZHIpLCAoY2FkZHJfdCkmc2luLnNpbl9hZGRyKTsKKwkJCQlhZGRy
ID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW47CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJ
TkVUNgorCQkJY2FzZSBTQ1RQX0RTVEFERFJWNjoKKwkJCQlpZiAoY21zZ19kYXRhX2xlbiA8IChp
bnQpc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpIHsKKwkJCQkJKmVycm9yID0gRUlOVkFMOworCQkJ
CQlyZXR1cm4gKE5VTEwpOworCQkJCX0KKwkJCQltZW1zZXQoJnNpbjYsIDAsIHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW42KSk7CisJCQkJc2luNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworI2lm
ZGVmIEhBVkVfU0lONl9MRU4KKwkJCQlzaW42LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbjYpOworI2VuZGlmCisJCQkJc2luNi5zaW42X3BvcnQgPSBwb3J0OworCQkJCW1fY29w
eWRhdGEoY29udHJvbCwgY21zZ19kYXRhX29mZiwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkciksIChj
YWRkcl90KSZzaW42LnNpbjZfYWRkcik7CisjaWZkZWYgSU5FVAorCQkJCWlmIChJTjZfSVNfQURE
Ul9WNE1BUFBFRCgmc2luNi5zaW42X2FkZHIpKSB7CisJCQkJCWluNl9zaW42XzJfc2luKCZzaW4s
ICZzaW42KTsKKwkJCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luOworCQkJCX0gZWxz
ZQorI2VuZGlmCisJCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbjY7CisJCQkJYnJl
YWs7CisjZW5kaWYKKwkJCWRlZmF1bHQ6CisJCQkJYWRkciA9IE5VTEw7CisJCQkJYnJlYWs7CisJ
CQl9CisJCQlpZiAoYWRkcikgeworCQkJCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9h
ZGRyKGlucF9wLCBhZGRyLCBuZXRfcCwgTlVMTCwgTlVMTCk7CisJCQkJaWYgKHN0Y2IgIT0gTlVM
TCkgeworCQkJCQlyZXR1cm4gKHN0Y2IpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4g
KE5VTEwpOworfQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgbWJ1ZiAqCitzY3RwX2FkZF9jb29r
aWUoc3RydWN0IG1idWYgKmluaXQsIGludCBpbml0X29mZnNldCwKKyAgICBzdHJ1Y3QgbWJ1ZiAq
aW5pdGFjaywgaW50IGluaXRhY2tfb2Zmc2V0LCBzdHJ1Y3Qgc2N0cF9zdGF0ZV9jb29raWUgKnN0
Y19pbiwgdWludDhfdCAqKnNpZ25hdHVyZSkKK3sKKwlzdHJ1Y3QgbWJ1ZiAqY29weV9pbml0LCAq
Y29weV9pbml0YWNrLCAqbV9hdCwgKnNpZywgKm1yZXQ7CisJc3RydWN0IHNjdHBfc3RhdGVfY29v
a2llICpzdGM7CisJc3RydWN0IHNjdHBfcGFyYW1oZHIgKnBoOworCXVpbnQxNl90IGNvb2tpZV9z
ejsKKworCW1yZXQgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coKHNpemVvZihzdHJ1Y3Qgc2N0cF9z
dGF0ZV9jb29raWUpICsKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSwg
MCwKKwkJCQkgICAgIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwlpZiAobXJldCA9PSBOVUxMKSB7
CisJCXJldHVybiAoTlVMTCk7CisJfQorCWNvcHlfaW5pdCA9IFNDVFBfTV9DT1BZTShpbml0LCBp
bml0X29mZnNldCwgTV9DT1BZQUxMLCBNX05PV0FJVCk7CisJaWYgKGNvcHlfaW5pdCA9PSBOVUxM
KSB7CisJCXNjdHBfbV9mcmVlbShtcmV0KTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisjaWZkZWYg
U0NUUF9NQlVGX0xPR0dJTkcKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2
ZWwpICYgU0NUUF9NQlVGX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBfbG9nX21iYyhjb3B5X2lu
aXQsIFNDVFBfTUJVRl9JQ09QWSk7CisJfQorI2VuZGlmCisJY29weV9pbml0YWNrID0gU0NUUF9N
X0NPUFlNKGluaXRhY2ssIGluaXRhY2tfb2Zmc2V0LCBNX0NPUFlBTEwsCisJICAgIE1fTk9XQUlU
KTsKKwlpZiAoY29weV9pbml0YWNrID09IE5VTEwpIHsKKwkJc2N0cF9tX2ZyZWVtKG1yZXQpOwor
CQlzY3RwX21fZnJlZW0oY29weV9pbml0KTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisjaWZkZWYg
U0NUUF9NQlVGX0xPR0dJTkcKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2
ZWwpICYgU0NUUF9NQlVGX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBfbG9nX21iYyhjb3B5X2lu
aXRhY2ssIFNDVFBfTUJVRl9JQ09QWSk7CisJfQorI2VuZGlmCisJLyogZWFzeSBzaWRlIHdlIGp1
c3QgZHJvcCBpdCBvbiB0aGUgZW5kICovCisJcGggPSBtdG9kKG1yZXQsIHN0cnVjdCBzY3RwX3Bh
cmFtaGRyICopOworCVNDVFBfQlVGX0xFTihtcmV0KSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdGF0
ZV9jb29raWUpICsKKwkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKTsKKwlzdGMgPSAo
c3RydWN0IHNjdHBfc3RhdGVfY29va2llICopKChjYWRkcl90KXBoICsKKwkgICAgc2l6ZW9mKHN0
cnVjdCBzY3RwX3BhcmFtaGRyKSk7CisJcGgtPnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX1NUQVRF
X0NPT0tJRSk7CisJcGgtPnBhcmFtX2xlbmd0aCA9IDA7CS8qIGZpbGwgaW4gYXQgdGhlIGVuZCAq
LworCS8qIEZpbGwgaW4gdGhlIHN0YyBjb29raWUgZGF0YSAqLworCW1lbWNweShzdGMsIHN0Y19p
biwgc2l6ZW9mKHN0cnVjdCBzY3RwX3N0YXRlX2Nvb2tpZSkpOworCisJLyogdGFjayB0aGUgSU5J
VCBhbmQgdGhlbiB0aGUgSU5JVC1BQ0sgb250byB0aGUgY2hhaW4gKi8KKwljb29raWVfc3ogPSAw
OworCWZvciAobV9hdCA9IG1yZXQ7IG1fYXQ7IG1fYXQgPSBTQ1RQX0JVRl9ORVhUKG1fYXQpKSB7
CisJCWNvb2tpZV9zeiArPSBTQ1RQX0JVRl9MRU4obV9hdCk7CisJCWlmIChTQ1RQX0JVRl9ORVhU
KG1fYXQpID09IE5VTEwpIHsKKwkJCVNDVFBfQlVGX05FWFQobV9hdCkgPSBjb3B5X2luaXQ7CisJ
CQlicmVhazsKKwkJfQorCX0KKwlmb3IgKG1fYXQgPSBjb3B5X2luaXQ7IG1fYXQ7IG1fYXQgPSBT
Q1RQX0JVRl9ORVhUKG1fYXQpKSB7CisJCWNvb2tpZV9zeiArPSBTQ1RQX0JVRl9MRU4obV9hdCk7
CisJCWlmIChTQ1RQX0JVRl9ORVhUKG1fYXQpID09IE5VTEwpIHsKKwkJCVNDVFBfQlVGX05FWFQo
bV9hdCkgPSBjb3B5X2luaXRhY2s7CisJCQlicmVhazsKKwkJfQorCX0KKwlmb3IgKG1fYXQgPSBj
b3B5X2luaXRhY2s7IG1fYXQ7IG1fYXQgPSBTQ1RQX0JVRl9ORVhUKG1fYXQpKSB7CisJCWNvb2tp
ZV9zeiArPSBTQ1RQX0JVRl9MRU4obV9hdCk7CisJCWlmIChTQ1RQX0JVRl9ORVhUKG1fYXQpID09
IE5VTEwpIHsKKwkJCWJyZWFrOworCQl9CisJfQorCXNpZyA9IHNjdHBfZ2V0X21idWZfZm9yX21z
ZyhTQ1RQX1NJR05BVFVSRV9TSVpFLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJaWYgKHNp
ZyA9PSBOVUxMKSB7CisJCS8qIG5vIHNwYWNlLCBzbyBmcmVlIHRoZSBlbnRpcmUgY2hhaW4gKi8K
KwkJc2N0cF9tX2ZyZWVtKG1yZXQpOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlTQ1RQX0JVRl9O
RVhUKG1fYXQpID0gc2lnOworCVNDVFBfQlVGX0xFTihzaWcpID0gU0NUUF9TSUdOQVRVUkVfU0la
RTsKKwljb29raWVfc3ogKz0gU0NUUF9TSUdOQVRVUkVfU0laRTsKKwlwaC0+cGFyYW1fbGVuZ3Ro
ID0gaHRvbnMoY29va2llX3N6KTsKKwkqc2lnbmF0dXJlID0gKHVpbnQ4X3QgKiltdG9kKHNpZywg
Y2FkZHJfdCk7CisJbWVtc2V0KCpzaWduYXR1cmUsIDAsIFNDVFBfU0lHTkFUVVJFX1NJWkUpOwor
CXJldHVybiAobXJldCk7Cit9CisKK3N0YXRpYyB1aW50OF90CitzY3RwX2dldF9lY3Qoc3RydWN0
IHNjdHBfdGNiICpzdGNiKQoreworCWlmICgoc3RjYiAhPSBOVUxMKSAmJiAoc3RjYi0+YXNvYy5l
Y25fc3VwcG9ydGVkID09IDEpKSB7CisJCXJldHVybiAoU0NUUF9FQ1QwX0JJVCk7CisJfSBlbHNl
IHsKKwkJcmV0dXJuICgwKTsKKwl9Cit9CisKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQo
SU5FVDYpCitzdGF0aWMgdm9pZAorc2N0cF9oYW5kbGVfbm9fcm91dGUoc3RydWN0IHNjdHBfdGNi
ICpzdGNiLAorICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0LAorICAg
ICAgICAgICAgICAgICAgICAgaW50IHNvX2xvY2tlZCkKK3sKKwlTQ1RQREJHKFNDVFBfREVCVUdf
T1VUUFVUMSwgImRyb3BwZWQgcGFja2V0IC0gbm8gdmFsaWQgc291cmNlIGFkZHJcbiIpOworCisJ
aWYgKG5ldCkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIkRlc3RpbmF0aW9uIHdh
cyAiKTsKKwkJU0NUUERCR19BRERSKFNDVFBfREVCVUdfT1VUUFVUMSwgJm5ldC0+cm8uX2xfYWRk
ci5zYSk7CisJCWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfQ09ORklSTUVEKSB7CisJ
CQlpZiAoKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpICYmIHN0Y2IpIHsK
KwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIm5vIHJvdXRlIHRha2VzIGludGVyZmFj
ZSAlcCBkb3duXG4iLCAodm9pZCAqKW5ldCk7CisJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9U
SUZZX0lOVEVSRkFDRV9ET1dOLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgc3RjYiwgMCwK
KwkJCSAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopbmV0LAorCQkJICAgICAgICAgICAg
ICAgICAgICAgICAgc29fbG9ja2VkKTsKKwkJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQURE
Ul9SRUFDSEFCTEU7CisJCQkJbmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfUEY7CisJCQl9
CisJCX0KKwkJaWYgKHN0Y2IpIHsKKwkJCWlmIChuZXQgPT0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rl
c3RpbmF0aW9uKSB7CisJCQkJLyogbmVlZCBhIG5ldyBwcmltYXJ5ICovCisJCQkJc3RydWN0IHNj
dHBfbmV0cyAqYWx0OworCisJCQkJYWx0ID0gc2N0cF9maW5kX2FsdGVybmF0ZV9uZXQoc3RjYiwg
bmV0LCAwKTsKKwkJCQlpZiAoYWx0ICE9IG5ldCkgeworCQkJCQlpZiAoc3RjYi0+YXNvYy5hbHRl
cm5hdGUpIHsKKwkJCQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihzdGNiLT5hc29jLmFsdGVybmF0
ZSk7CisJCQkJCX0KKwkJCQkJc3RjYi0+YXNvYy5hbHRlcm5hdGUgPSBhbHQ7CisJCQkJCWF0b21p
Y19hZGRfaW50KCZzdGNiLT5hc29jLmFsdGVybmF0ZS0+cmVmX2NvdW50LCAxKTsKKwkJCQkJaWYg
KG5ldC0+cm8uX3NfYWRkcikgeworCQkJCQkJc2N0cF9mcmVlX2lmYShuZXQtPnJvLl9zX2FkZHIp
OworCQkJCQkJbmV0LT5yby5fc19hZGRyID0gTlVMTDsKKwkJCQkJfQorCQkJCQluZXQtPnNyY19h
ZGRyX3NlbGVjdGVkID0gMDsKKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9CisjZW5kaWYKKworc3Rh
dGljIGludAorc2N0cF9sb3dsZXZlbF9jaHVua19vdXRwdXQoc3RydWN0IHNjdHBfaW5wY2IgKmlu
cCwKKyAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCS8qIG1heSBiZSBOVUxMICovCisgICAgc3Ry
dWN0IHNjdHBfbmV0cyAqbmV0LAorICAgIHN0cnVjdCBzb2NrYWRkciAqdG8sCisgICAgc3RydWN0
IG1idWYgKm0sCisgICAgdWludDMyX3QgYXV0aF9vZmZzZXQsCisgICAgc3RydWN0IHNjdHBfYXV0
aF9jaHVuayAqYXV0aCwKKyAgICB1aW50MTZfdCBhdXRoX2tleWlkLAorICAgIGludCBub2ZyYWdt
ZW50X2ZsYWcsCisgICAgaW50IGVjbl9vaywKKyAgICBpbnQgb3V0X29mX2Fzb2Nfb2ssCisgICAg
dWludDE2X3Qgc3JjX3BvcnQsCisgICAgdWludDE2X3QgZGVzdF9wb3J0LAorICAgIHVpbnQzMl90
IHZfdGFnLAorICAgIHVpbnQxNl90IHBvcnQsCisgICAgdW5pb24gc2N0cF9zb2Nrc3RvcmUgKm92
ZXJfYWRkciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxvd2lkLAorI2VuZGlmCitp
bnQgc29fbG9ja2VkKQorLyogbm9mcmFnbWVudF9mbGFnIHRvIHRlbGwgaWYgSVBfREYgc2hvdWxk
IGJlIHNldCAoSVB2NCBvbmx5KSAqLworeworCS8qKgorCSAqIEdpdmVuIGEgbWJ1ZiBjaGFpbiAo
dmlhIFNDVFBfQlVGX05FWFQoKSkgdGhhdCBob2xkcyBhIHBhY2tldCBoZWFkZXIKKwkgKiBXSVRI
IGFuIFNDVFBIRFIgYnV0IG5vIElQIGhlYWRlciwgZW5kcG9pbnQgaW5wIGFuZCBzYSBzdHJ1Y3R1
cmU6CisJICogLSBmaWxsIGluIHRoZSBITUFDIGRpZ2VzdCBvZiBhbnkgQVVUSCBjaHVuayBpbiB0
aGUgcGFja2V0LgorCSAqIC0gY2FsY3VsYXRlIGFuZCBmaWxsIGluIHRoZSBTQ1RQIGNoZWNrc3Vt
LgorCSAqIC0gcHJlcGVuZCBhbiBJUCBhZGRyZXNzIGhlYWRlci4KKwkgKiAtIGlmIGJvdW5kYWxs
IHVzZSBJTkFERFJfQU5ZLgorCSAqIC0gaWYgYm91bmRzcGVjaWZpYyBkbyBzb3VyY2UgYWRkcmVz
cyBzZWxlY3Rpb24uCisJICogLSBzZXQgZnJhZ21lbnRhdGlvbiBvcHRpb24gZm9yIGlwVjQuCisJ
ICogLSBPbiByZXR1cm4gZnJvbSBJUCBvdXRwdXQsIGNoZWNrL2FkanVzdCBtdHUgc2l6ZSBvZiBv
dXRwdXQKKwkgKiAgIGludGVyZmFjZSBhbmQgc21hbGxlc3RfbXR1IHNpemUgYXMgd2VsbC4KKwkg
Ki8KKwkvKiBXaWxsIG5lZWQgaWZkZWZzIGFyb3VuZCB0aGlzICovCisJc3RydWN0IG1idWYgKm5l
d207CisJc3RydWN0IHNjdHBoZHIgKnNjdHBoZHI7CisJaW50IHBhY2tldF9sZW5ndGg7CisJaW50
IHJldDsKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisJdWludDMyX3QgdnJm
X2lkOworI2VuZGlmCisjaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQorCXN0cnVj
dCBtYnVmICpvX3BhazsKKwlzY3RwX3JvdXRlX3QgKnJvID0gTlVMTDsKKwlzdHJ1Y3QgdWRwaGRy
ICp1ZHAgPSBOVUxMOworI2VuZGlmCisJdWludDhfdCB0b3NfdmFsdWU7CisjaWYgZGVmaW5lZChf
X0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJc3RydWN0IHNvY2tldCAqc28g
PSBOVUxMOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKwlpZiAoc29fbG9ja2VkKSB7CisJCXNjdHBfbG9ja19hc3NlcnQoU0NUUF9J
TlBfU08oaW5wKSk7CisJCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOworCX0gZWxzZSB7CisJ
CXNjdHBfdW5sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhpbnApKTsKKwl9CisjZW5kaWYKKwlpZiAo
KG5ldCkgJiYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9PVVRfT0ZfU0NPUEUpKSB7CisJ
CVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NU
UF9PVVRQVVQsIEVGQVVMVCk7CisJCXNjdHBfbV9mcmVlbShtKTsKKwkJcmV0dXJuIChFRkFVTFQp
OworCX0KKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisJaWYgKHN0Y2IpIHsK
KwkJdnJmX2lkID0gc3RjYi0+YXNvYy52cmZfaWQ7CisJfSBlbHNlIHsKKwkJdnJmX2lkID0gaW5w
LT5kZWZfdnJmX2lkOworCX0KKyNlbmRpZgorCS8qIGZpbGwgaW4gdGhlIEhNQUMgZGlnZXN0IGZv
ciBhbnkgQVVUSCBjaHVuayBpbiB0aGUgcGFja2V0ICovCisJaWYgKChhdXRoICE9IE5VTEwpICYm
IChzdGNiICE9IE5VTEwpKSB7CisJCXNjdHBfZmlsbF9obWFjX2RpZ2VzdF9tKG0sIGF1dGhfb2Zm
c2V0LCBhdXRoLCBzdGNiLCBhdXRoX2tleWlkKTsKKwl9CisKKwlpZiAobmV0KSB7CisJCXRvc192
YWx1ZSA9IG5ldC0+ZHNjcDsKKwl9IGVsc2UgaWYgKHN0Y2IpIHsKKwkJdG9zX3ZhbHVlID0gc3Rj
Yi0+YXNvYy5kZWZhdWx0X2RzY3A7CisJfSBlbHNlIHsKKwkJdG9zX3ZhbHVlID0gaW5wLT5zY3Rw
X2VwLmRlZmF1bHRfZHNjcDsKKwl9CisKKwlzd2l0Y2ggKHRvLT5zYV9mYW1pbHkpIHsKKyNpZmRl
ZiBJTkVUCisJY2FzZSBBRl9JTkVUOgorCXsKKwkJc3RydWN0IGlwICppcCA9IE5VTEw7CisJCXNj
dHBfcm91dGVfdCBpcHJvdXRlOworCQlpbnQgbGVuOworCisJCWxlbiA9IFNDVFBfTUlOX1Y0X09W
RVJIRUFEOworCQlpZiAocG9ydCkgeworCQkJbGVuICs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsK
KwkJfQorCQluZXdtID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGxlbiwgMSwgTV9OT1dBSVQsIDEs
IE1UX0RBVEEpOworCQlpZiAobmV3bSA9PSBOVUxMKSB7CisJCQlzY3RwX21fZnJlZW0obSk7CisJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VU
UFVULCBFTk9NRU0pOworCQkJcmV0dXJuIChFTk9NRU0pOworCQl9CisJCVNDVFBfQUxJR05fVE9f
RU5EKG5ld20sIGxlbik7CisJCVNDVFBfQlVGX0xFTihuZXdtKSA9IGxlbjsKKwkJU0NUUF9CVUZf
TkVYVChuZXdtKSA9IG07CisJCW0gPSBuZXdtOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYm
ICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWlmIChuZXQgIT0gTlVMTCkgeworCQkJbS0+bV9w
a3RoZHIuZmxvd2lkID0gbmV0LT5mbG93aWQ7CisJCQlNX0hBU0hUWVBFX1NFVChtLCBuZXQtPmZs
b3d0eXBlKTsKKwkJfSBlbHNlIHsKKwkJCW0tPm1fcGt0aGRyLmZsb3dpZCA9IG1mbG93aWQ7CisJ
CQlNX0hBU0hUWVBFX1NFVChtLCBtZmxvd3R5cGUpOworIAkJfQorI2VuZGlmCisJCXBhY2tldF9s
ZW5ndGggPSBzY3RwX2NhbGN1bGF0ZV9sZW4obSk7CisJCWlwID0gbXRvZChtLCBzdHJ1Y3QgaXAg
Kik7CisJCWlwLT5pcF92ID0gSVBWRVJTSU9OOworCQlpcC0+aXBfaGwgPSAoc2l6ZW9mKHN0cnVj
dCBpcCkgPj4gMik7CisJCWlmICh0b3NfdmFsdWUgPT0gMCkgeworCQkJLyoKKwkJCSAqIFRoaXMg
bWVhbnMgZXNwZWNpYWxseSwgdGhhdCBpdCBpcyBub3Qgc2V0IGF0IHRoZQorCQkJICogU0NUUCBs
YXllci4gU28gdXNlIHRoZSB2YWx1ZSBmcm9tIHRoZSBJUCBsYXllci4KKwkJCSAqLworCQkJdG9z
X3ZhbHVlID0gaW5wLT5pcF9pbnAuaW5wLmlucF9pcF90b3M7CisJCX0KKwkJdG9zX3ZhbHVlICY9
IDB4ZmM7CisJCWlmIChlY25fb2spIHsKKwkJCXRvc192YWx1ZSB8PSBzY3RwX2dldF9lY3Qoc3Rj
Yik7CisJCX0KKwkJaWYgKChub2ZyYWdtZW50X2ZsYWcpICYmIChwb3J0ID09IDApKSB7CisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCWlwLT5p
cF9vZmYgPSBodG9ucyhJUF9ERik7CisjZWxpZiBkZWZpbmVkKFdJVEhfQ09OVkVSVF9JUF9PRkYp
IHx8IGRlZmluZWQoX19BUFBMRV9fKQorCQkJaXAtPmlwX29mZiA9IElQX0RGOworI2Vsc2UKKwkJ
CWlwLT5pcF9vZmYgPSBodG9ucyhJUF9ERik7CisjZW5kaWYKKwkJfSBlbHNlIHsKKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJaXAtPmlwX29m
ZiA9IGh0b25zKDApOworI2Vsc2UKKwkJCWlwLT5pcF9vZmYgPSAwOworI2VuZGlmCisJCX0KKyNp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWlwLT5pcF9pZCA9IGh0b25zKFNDVFBfSVBfSUQo
aW5wKSsrKTsKKyNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCS8qIEZyZWVCU0QgaGFzIGEg
ZnVuY3Rpb24gZm9yIGlwX2lkJ3MgKi8KKwkJaXBfZmlsbGlkKGlwKTsKKyNlbGlmIGRlZmluZWQo
X19BUFBMRV9fKQorI2lmIFJBTkRPTV9JUF9JRAorCQlpcC0+aXBfaWQgPSBpcF9yYW5kb21pZCgp
OworI2Vsc2UKKwkJaXAtPmlwX2lkID0gaHRvbnMoaXBfaWQrKyk7CisjZW5kaWYKKyNlbHNlCisJ
CWlwLT5pcF9pZCA9IFNDVFBfSVBfSUQoaW5wKSsrOworI2VuZGlmCisKKwkJaXAtPmlwX3R0bCA9
IGlucC0+aXBfaW5wLmlucC5pbnBfaXBfdHRsOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYm
ICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWlwLT5pcF9sZW4gPSBodG9ucyhwYWNrZXRfbGVu
Z3RoKTsKKyNlbHNlCisJCWlwLT5pcF9sZW4gPSBwYWNrZXRfbGVuZ3RoOworI2VuZGlmCisJCWlw
LT5pcF90b3MgPSB0b3NfdmFsdWU7CisJCWlmIChwb3J0KSB7CisJCQlpcC0+aXBfcCA9IElQUFJP
VE9fVURQOworCQl9IGVsc2UgeworCQkJaXAtPmlwX3AgPSBJUFBST1RPX1NDVFA7CisJCX0KKwkJ
aXAtPmlwX3N1bSA9IDA7CisJCWlmIChuZXQgPT0gTlVMTCkgeworCQkJcm8gPSAmaXByb3V0ZTsK
KwkJCW1lbXNldCgmaXByb3V0ZSwgMCwgc2l6ZW9mKGlwcm91dGUpKTsKKyNpZmRlZiBIQVZFX1NB
X0xFTgorCQkJbWVtY3B5KCZyby0+cm9fZHN0LCB0bywgdG8tPnNhX2xlbik7CisjZWxzZQorCQkJ
bWVtY3B5KCZyby0+cm9fZHN0LCB0bywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworI2Vu
ZGlmCisJCX0gZWxzZSB7CisJCQlybyA9IChzY3RwX3JvdXRlX3QgKikmbmV0LT5ybzsKKwkJfQor
CQkvKiBOb3cgdGhlIGFkZHJlc3Mgc2VsZWN0aW9uIHBhcnQgKi8KKwkJaXAtPmlwX2RzdC5zX2Fk
ZHIgPSAoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXRvKS0+c2luX2FkZHIuc19hZGRyOworCisJCS8q
IGNhbGwgdGhlIHJvdXRpbmUgdG8gc2VsZWN0IHRoZSBzcmMgYWRkcmVzcyAqLworCQlpZiAobmV0
ICYmIG91dF9vZl9hc29jX29rID09IDApIHsKKwkJCWlmIChuZXQtPnJvLl9zX2FkZHIgJiYgKG5l
dC0+cm8uX3NfYWRkci0+bG9jYWxpZmFfZmxhZ3MgJiAoU0NUUF9CRUlOR19ERUxFVEVEfFNDVFBf
QUREUl9JRkFfVU5VU0VBQkxFKSkpIHsKKwkJCQlzY3RwX2ZyZWVfaWZhKG5ldC0+cm8uX3NfYWRk
cik7CisJCQkJbmV0LT5yby5fc19hZGRyID0gTlVMTDsKKwkJCQluZXQtPnNyY19hZGRyX3NlbGVj
dGVkID0gMDsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorCQkJCVJPX05IRlJFRShybyk7CisjZWxzZQorCQkJCWlmIChyby0+cm9fcnQpIHsKKwkJ
CQkJUlRGUkVFKHJvLT5yb19ydCk7CisJCQkJCXJvLT5yb19ydCA9IE5VTEw7CisJCQkJfQorI2Vu
ZGlmCisJCQl9CisJCQlpZiAobmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9PSAwKSB7CisJCQkJLyog
Q2FjaGUgdGhlIHNvdXJjZSBhZGRyZXNzICovCisJCQkJbmV0LT5yby5fc19hZGRyID0gc2N0cF9z
b3VyY2VfYWRkcmVzc19zZWxlY3Rpb24oaW5wLHN0Y2IsCisJCQkJCQkJCQkJcm8sIG5ldCwgMCwK
KwkJCQkJCQkJCQl2cmZfaWQpOworCQkJCW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAxOworCQkJ
fQorCQkJaWYgKG5ldC0+cm8uX3NfYWRkciA9PSBOVUxMKSB7CisJCQkJLyogTm8gcm91dGUgdG8g
aG9zdCAqLworCQkJCW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAwOworCQkJCXNjdHBfaGFuZGxl
X25vX3JvdXRlKHN0Y2IsIG5ldCwgc29fbG9ja2VkKTsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
X1BLVChtLCBpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUhPU1RVTlJF
QUNIKTsKKwkJCQlzY3RwX21fZnJlZW0obSk7CisJCQkJcmV0dXJuIChFSE9TVFVOUkVBQ0gpOwor
CQkJfQorCQkJaXAtPmlwX3NyYyA9IG5ldC0+cm8uX3NfYWRkci0+YWRkcmVzcy5zaW4uc2luX2Fk
ZHI7CisJCX0gZWxzZSB7CisJCQlpZiAob3Zlcl9hZGRyID09IE5VTEwpIHsKKwkJCQlzdHJ1Y3Qg
c2N0cF9pZmEgKl9sc3JjOworCisJCQkJX2xzcmMgPSBzY3RwX3NvdXJjZV9hZGRyZXNzX3NlbGVj
dGlvbihpbnAsIHN0Y2IsIHJvLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbmV0LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
X29mX2Fzb2Nfb2ssCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
cmZfaWQpOworCQkJCWlmIChfbHNyYyA9PSBOVUxMKSB7CisJCQkJCXNjdHBfaGFuZGxlX25vX3Jv
dXRlKHN0Y2IsIG5ldCwgc29fbG9ja2VkKTsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVF9QS1Qo
bSwgaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVIT1NUVU5SRUFDSCk7
CisJCQkJCXNjdHBfbV9mcmVlbShtKTsKKwkJCQkJcmV0dXJuIChFSE9TVFVOUkVBQ0gpOworCQkJ
CX0KKwkJCQlpcC0+aXBfc3JjID0gX2xzcmMtPmFkZHJlc3Muc2luLnNpbl9hZGRyOworCQkJCXNj
dHBfZnJlZV9pZmEoX2xzcmMpOworCQkJfSBlbHNlIHsKKwkJCQlpcC0+aXBfc3JjID0gb3Zlcl9h
ZGRyLT5zaW4uc2luX2FkZHI7CisJCQkJU0NUUF9SVEFMTE9DKHJvLCB2cmZfaWQsIGlucC0+Zmli
bnVtKTsKKwkJCX0KKwkJfQorCQlpZiAocG9ydCkgeworCQkJaWYgKGh0b25zKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF91ZHBfdHVubmVsaW5nX3BvcnQpKSA9PSAwKSB7CisJCQkJc2N0cF9oYW5kbGVf
bm9fcm91dGUoc3RjYiwgbmV0LCBzb19sb2NrZWQpOworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVRf
UEtUKG0sIGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSE9TVFVOUkVB
Q0gpOworCQkJCXNjdHBfbV9mcmVlbShtKTsKKwkJCQlyZXR1cm4gKEVIT1NUVU5SRUFDSCk7CisJ
CQl9CisJCQl1ZHAgPSAoc3RydWN0IHVkcGhkciAqKSgoY2FkZHJfdClpcCArIHNpemVvZihzdHJ1
Y3QgaXApKTsKKwkJCXVkcC0+dWhfc3BvcnQgPSBodG9ucyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
dWRwX3R1bm5lbGluZ19wb3J0KSk7CisJCQl1ZHAtPnVoX2Rwb3J0ID0gcG9ydDsKKwkJCXVkcC0+
dWhfdWxlbiA9IGh0b25zKCh1aW50MTZfdCkocGFja2V0X2xlbmd0aCAtIHNpemVvZihzdHJ1Y3Qg
aXApKSk7CisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKQorCQkJaWYgKFZfdWRwX2Nrc3VtKSB7CisJCQkJdWRwLT51aF9zdW0gPSBpbl9wc2V1ZG8o
aXAtPmlwX3NyYy5zX2FkZHIsIGlwLT5pcF9kc3Quc19hZGRyLCB1ZHAtPnVoX3VsZW4gKyBodG9u
cyhJUFBST1RPX1VEUCkpOworCQkJfSBlbHNlIHsKKwkJCQl1ZHAtPnVoX3N1bSA9IDA7CisJCQl9
CisjZWxzZQorCQkJdWRwLT51aF9zdW0gPSBpbl9wc2V1ZG8oaXAtPmlwX3NyYy5zX2FkZHIsIGlw
LT5pcF9kc3Quc19hZGRyLCB1ZHAtPnVoX3VsZW4gKyBodG9ucyhJUFBST1RPX1VEUCkpOworI2Vu
ZGlmCisjZWxzZQorCQkJdWRwLT51aF9zdW0gPSAwOworI2VuZGlmCisJCQlzY3RwaGRyID0gKHN0
cnVjdCBzY3RwaGRyICopKChjYWRkcl90KXVkcCArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7CisJ
CX0gZWxzZSB7CisJCQlzY3RwaGRyID0gKHN0cnVjdCBzY3RwaGRyICopKChjYWRkcl90KWlwICsg
c2l6ZW9mKHN0cnVjdCBpcCkpOworCQl9CisKKwkJc2N0cGhkci0+c3JjX3BvcnQgPSBzcmNfcG9y
dDsKKwkJc2N0cGhkci0+ZGVzdF9wb3J0ID0gZGVzdF9wb3J0OworCQlzY3RwaGRyLT52X3RhZyA9
IHZfdGFnOworCQlzY3RwaGRyLT5jaGVja3N1bSA9IDA7CisKKwkJLyoKKwkJICogSWYgc291cmNl
IGFkZHJlc3Mgc2VsZWN0aW9uIGZhaWxzIGFuZCB3ZSBmaW5kIG5vIHJvdXRlCisJCSAqIHRoZW4g
dGhlIGlwX291dHB1dCBzaG91bGQgZmFpbCBhcyB3ZWxsIHdpdGggYQorCQkgKiBOT19ST1VURV9U
T19IT1NUIHR5cGUgZXJyb3IuIFdlIHByb2JhYmx5IHNob3VsZCBjYXRjaAorCQkgKiB0aGF0IHNv
bWV3aGVyZSBhbmQgYWJvcnQgdGhlIGFzc29jaWF0aW9uIHJpZ2h0IGF3YXkKKwkJICogKGFzc3Vt
aW5nIHRoaXMgaXMgYW4gSU5JVCBiZWluZyBzZW50KS4KKwkJICovCisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJaWYgKHJvLT5yb19uaCA9PSBO
VUxMKSB7CisjZWxzZQorCQlpZiAocm8tPnJvX3J0ID09IE5VTEwpIHsKKyNlbmRpZgorCQkJLyoK
KwkJCSAqIHNyYyBhZGRyIHNlbGVjdGlvbiBmYWlsZWQgdG8gZmluZCBhIHJvdXRlIChvcgorCQkJ
ICogdmFsaWQgc291cmNlIGFkZHIpLCBzbyB3ZSBjYW4ndCBnZXQgdGhlcmUgZnJvbQorCQkJICog
aGVyZSAoeWV0KSEKKwkJCSAqLworCQkJc2N0cF9oYW5kbGVfbm9fcm91dGUoc3RjYiwgbmV0LCBz
b19sb2NrZWQpOworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVF9QS1QobSwgaW5wLCBzdGNiLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVIT1NUVU5SRUFDSCk7CisJCQlzY3RwX21fZnJlZW0o
bSk7CisJCQlyZXR1cm4gKEVIT1NUVU5SRUFDSCk7CisJCX0KKwkJaWYgKHJvICE9ICZpcHJvdXRl
KSB7CisJCQltZW1jcHkoJmlwcm91dGUsIHJvLCBzaXplb2YoKnJvKSk7CisJCX0KKwkJU0NUUERC
RyhTQ1RQX0RFQlVHX09VVFBVVDMsICJDYWxsaW5nIGlwdjQgb3V0cHV0IHJvdXRpbmUgZnJvbSBs
b3cgbGV2ZWwgc3JjIGFkZHI6JXhcbiIsCisJCQkodWludDMyX3QpIChudG9obChpcC0+aXBfc3Jj
LnNfYWRkcikpKTsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJEZXN0aW5hdGlvbiBp
cyAleFxuIiwKKwkJCSh1aW50MzJfdCkobnRvaGwoaXAtPmlwX2RzdC5zX2FkZHIpKSk7CisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJU0NUUERC
RyhTQ1RQX0RFQlVHX09VVFBVVDMsICJSVFAgcm91dGUgaXMgJXAgdGhyb3VnaFxuIiwKKwkJCSh2
b2lkICopcm8tPnJvX25oKTsKKyNlbHNlCisJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAi
UlRQIHJvdXRlIGlzICVwIHRocm91Z2hcbiIsCisJCQkodm9pZCAqKXJvLT5yb19ydCk7CisjZW5k
aWYKKworCQlpZiAoU0NUUF9HRVRfSEVBREVSX0ZPUl9PVVRQVVQob19wYWspKSB7CisJCQkvKiBm
YWlsZWQgdG8gcHJlcGVuZCBkYXRhLCBnaXZlIHVwICovCisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
X1BLVChtLCBpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRU5PTUVNKTsK
KwkJCXNjdHBfbV9mcmVlbShtKTsKKwkJCXJldHVybiAoRU5PTUVNKTsKKwkJfQorCQlTQ1RQX0FU
VEFDSF9DSEFJTihvX3BhaywgbSwgcGFja2V0X2xlbmd0aCk7CisJCWlmIChwb3J0KSB7CisJCQlz
Y3RwaGRyLT5jaGVja3N1bSA9IHNjdHBfY2FsY3VsYXRlX2Nrc3VtKG0sIHNpemVvZihzdHJ1Y3Qg
aXApICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsKKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Nl
bmRzd2NyYyk7CisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKQorCQkJaWYgKFZfdWRwX2Nrc3VtKSB7CisJCQkJU0NUUF9FTkFCTEVfVURQX0NTVU0o
b19wYWspOworCQkJfQorI2Vsc2UKKwkJCVNDVFBfRU5BQkxFX1VEUF9DU1VNKG9fcGFrKTsKKyNl
bmRpZgorI2VuZGlmCisJCX0gZWxzZSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCW0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MgPSBDU1VNX1ND
VFA7CisJCQltLT5tX3BrdGhkci5jc3VtX2RhdGEgPSBvZmZzZXRvZihzdHJ1Y3Qgc2N0cGhkciwg
Y2hlY2tzdW0pOworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZGh3Y3JjKTsKKyNlbHNlCisJ
CQlpZiAoIShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbm9fY3N1bV9vbl9sb29wYmFjaykgJiYKKwkJ
CSAgICAgIChzdGNiKSAmJiAoc3RjYi0+YXNvYy5zY29wZS5sb29wYmFja19zY29wZSkpKSB7CisJ
CQkJc2N0cGhkci0+Y2hlY2tzdW0gPSBzY3RwX2NhbGN1bGF0ZV9ja3N1bShtLCBzaXplb2Yoc3Ry
dWN0IGlwKSk7CisJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHN3Y3JjKTsKKwkJCX0gZWxz
ZSB7CisJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZGh3Y3JjKTsKKwkJCX0KKyNlbmRpZgor
CQl9CisjaWZkZWYgU0NUUF9QQUNLRVRfTE9HR0lORworCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MQVNUX1BBQ0tFVF9UUkFDSU5HKQorCQkJc2N0cF9w
YWNrZXRfbG9nKG9fcGFrKTsKKyNlbmRpZgorCQkvKiBzZW5kIGl0IG91dC4gIHRhYmxlIGlkIGlz
IHRha2VuIGZyb20gc3RjYiAqLworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorCQlpZiAoKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9vdXRwdXRfdW5sb2Nr
ZWQpKSAmJiAoc29fbG9ja2VkKSkgeworCQkJc28gPSBTQ1RQX0lOUF9TTyhpbnApOworCQkJU0NU
UF9TT0NLRVRfVU5MT0NLKHNvLCAwKTsKKwkJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJU0NUUF9QUk9CRTUoc2VuZCwgTlVM
TCwgc3RjYiwgaXAsIHN0Y2IsIHNjdHBoZHIpOworI2VuZGlmCisJCVNDVFBfSVBfT1VUUFVUKHJl
dCwgb19wYWssIHJvLCBzdGNiLCB2cmZfaWQpOworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlpZiAoKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9vdXRw
dXRfdW5sb2NrZWQpKSAmJiAoc29fbG9ja2VkKSkgeworCQkJYXRvbWljX2FkZF9pbnQoJnN0Y2It
PmFzb2MucmVmY250LCAxKTsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCVNDVFBfU09D
S0VUX0xPQ0soc28sIDApOworCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCWF0b21pY19zdWJ0
cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJfQorI2VuZGlmCisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJaWYgKHBvcnQpIHsK
KwkJCVVEUFNUQVRfSU5DKHVkcHNfb3BhY2tldHMpOworCQl9CisjZW5kaWYKKwkJU0NUUF9TVEFU
X0lOQ1Ioc2N0cHNfc2VuZHBhY2tldHMpOworCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0
cHNfb3V0cGFja2V0cyk7CisJCWlmIChyZXQpCisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5k
ZXJyb3JzKTsKKworCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIklQIG91dHB1dCByZXR1
cm5zICVkXG4iLCByZXQpOworCQlpZiAobmV0ID09IE5VTEwpIHsKKwkJCS8qIGZyZWUgdGVtcHkg
cm91dGVzICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKKwkJCVJPX05IRlJFRShybyk7CisjZWxzZQorCQkJaWYgKHJvLT5yb19ydCkgeworCQkJ
CVJURlJFRShyby0+cm9fcnQpOworCQkJCXJvLT5yb19ydCA9IE5VTEw7CisJCQl9CisjZW5kaWYK
KwkJfSBlbHNlIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorCQkJaWYgKChyby0+cm9fbmggIT0gTlVMTCkgJiYgKG5ldC0+cm8uX3NfYWRkcikg
JiYKKyNlbHNlCisJCQlpZiAoKHJvLT5yb19ydCAhPSBOVUxMKSAmJiAobmV0LT5yby5fc19hZGRy
KSAmJgorI2VuZGlmCisJCQkgICAgKChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfTk9fUE1U
VUQpID09IDApKSB7CisJCQkJdWludDMyX3QgbXR1OworCisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQltdHUgPSBTQ1RQX0dBVEhFUl9NVFVf
RlJPTV9ST1VURShuZXQtPnJvLl9zX2FkZHIsICZuZXQtPnJvLl9sX2FkZHIuc2EsIHJvLT5yb19u
aCk7CisjZWxzZQorCQkJCW10dSA9IFNDVFBfR0FUSEVSX01UVV9GUk9NX1JPVVRFKG5ldC0+cm8u
X3NfYWRkciwgJm5ldC0+cm8uX2xfYWRkci5zYSwgcm8tPnJvX3J0KTsKKyNlbmRpZgorCQkJCWlm
IChtdHUgPiAwKSB7CisJCQkJCWlmIChuZXQtPnBvcnQpIHsKKwkJCQkJCW10dSAtPSBzaXplb2Yo
c3RydWN0IHVkcGhkcik7CisJCQkJCX0KKwkJCQkJaWYgKG10dSA8IG5ldC0+bXR1KSB7CisJCQkJ
CQlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYgKHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1ID4gbXR1KSkg
eworCQkJCQkJCXNjdHBfbXR1X3NpemVfcmVzZXQoaW5wLCAmc3RjYi0+YXNvYywgbXR1KTsKKwkJ
CQkJCX0KKwkJCQkJCW5ldC0+bXR1ID0gbXR1OworCQkJCQl9CisJCQkJfQorI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQl9IGVsc2UgaWYgKHJv
LT5yb19uaCA9PSBOVUxMKSB7CisjZWxzZQorCQkJfSBlbHNlIGlmIChyby0+cm9fcnQgPT0gTlVM
TCkgeworI2VuZGlmCisJCQkJLyogcm91dGUgd2FzIGZyZWVkICovCisJCQkJaWYgKG5ldC0+cm8u
X3NfYWRkciAmJgorCQkJCSAgICBuZXQtPnNyY19hZGRyX3NlbGVjdGVkKSB7CisJCQkJCXNjdHBf
ZnJlZV9pZmEobmV0LT5yby5fc19hZGRyKTsKKwkJCQkJbmV0LT5yby5fc19hZGRyID0gTlVMTDsK
KwkJCQl9CisJCQkJbmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDA7CisJCQl9CisJCX0KKwkJcmV0
dXJuIChyZXQpOworCX0KKyNlbmRpZgorI2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKwl7
CisJCXVpbnQzMl90IGZsb3dsYWJlbCwgZmxvd2luZm87CisJCXN0cnVjdCBpcDZfaGRyICppcDZo
OworCQlzdHJ1Y3Qgcm91dGVfaW42IGlwNnJvdXRlOworI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisJCXN0cnVjdCBpZm5ldCAqaWZwOworI2VuZGlmCisJCXN0cnVjdCBzb2NrYWRkcl9pbjYg
KnNpbjYsIHRtcCwgKmxzYTYsIGxzYTZfdG1wOworCQlpbnQgcHJldl9zY29wZSA9IDA7CisjaWZk
ZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQorCQlzdHJ1Y3Qgc29ja2FkZHJfaW42IGxzYTZfc3Rv
cmFnZTsKKwkJaW50IGVycm9yOworI2VuZGlmCisJCXVfc2hvcnQgcHJldl9wb3J0ID0gMDsKKwkJ
aW50IGxlbjsKKworCQlpZiAobmV0KSB7CisJCQlmbG93bGFiZWwgPSBuZXQtPmZsb3dsYWJlbDsK
KwkJfSBlbHNlIGlmIChzdGNiKSB7CisJCQlmbG93bGFiZWwgPSBzdGNiLT5hc29jLmRlZmF1bHRf
Zmxvd2xhYmVsOworCQl9IGVsc2UgeworCQkJZmxvd2xhYmVsID0gaW5wLT5zY3RwX2VwLmRlZmF1
bHRfZmxvd2xhYmVsOworCQl9CisJCWlmIChmbG93bGFiZWwgPT0gMCkgeworCQkJLyoKKwkJCSAq
IFRoaXMgbWVhbnMgZXNwZWNpYWxseSwgdGhhdCBpdCBpcyBub3Qgc2V0IGF0IHRoZQorCQkJICog
U0NUUCBsYXllci4gU28gdXNlIHRoZSB2YWx1ZSBmcm9tIHRoZSBJUCBsYXllci4KKwkJCSAqLwor
I2lmIGRlZmluZWQoX19BUFBMRV9fKSAgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykgJiYgKCFk
ZWZpbmVkKEFQUExFX0xFT1BBUkQpICYmICFkZWZpbmVkKEFQUExFX1NOT1dMRU9QQVJEKSAmJiAh
ZGVmaW5lZChBUFBMRV9MSU9OKSAmJiAhZGVmaW5lZChBUFBMRV9NT1VOVEFJTkxJT04pKQorCQkJ
Zmxvd2xhYmVsID0gbnRvaGwoaW5wLT5pcF9pbnAuaW5wLmlucF9mbG93KTsKKyNlbHNlCisJCQlm
bG93bGFiZWwgPSBudG9obCgoKHN0cnVjdCBpbnBjYiAqKWlucCktPmlucF9mbG93KTsKKyNlbmRp
ZgorCQl9CisJCWZsb3dsYWJlbCAmPSAweDAwMGZmZmZmOworCQlsZW4gPSBTQ1RQX01JTl9PVkVS
SEVBRDsKKwkJaWYgKHBvcnQpIHsKKwkJCWxlbiArPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7CisJ
CX0KKwkJbmV3bSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhsZW4sIDEsIE1fTk9XQUlULCAxLCBN
VF9EQVRBKTsKKwkJaWYgKG5ld20gPT0gTlVMTCkgeworCQkJc2N0cF9tX2ZyZWVtKG0pOworCQkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBV
VCwgRU5PTUVNKTsKKwkJCXJldHVybiAoRU5PTUVNKTsKKwkJfQorCQlTQ1RQX0FMSUdOX1RPX0VO
RChuZXdtLCBsZW4pOworCQlTQ1RQX0JVRl9MRU4obmV3bSkgPSBsZW47CisJCVNDVFBfQlVGX05F
WFQobmV3bSkgPSBtOworCQltID0gbmV3bTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlpZiAobmV0ICE9IE5VTEwpIHsKKwkJCW0tPm1fcGt0
aGRyLmZsb3dpZCA9IG5ldC0+Zmxvd2lkOworCQkJTV9IQVNIVFlQRV9TRVQobSwgbmV0LT5mbG93
dHlwZSk7CisJCX0gZWxzZSB7CisJCQltLT5tX3BrdGhkci5mbG93aWQgPSBtZmxvd2lkOworCQkJ
TV9IQVNIVFlQRV9TRVQobSwgbWZsb3d0eXBlKTsKKyAJCX0KKyNlbmRpZgorCQlwYWNrZXRfbGVu
Z3RoID0gc2N0cF9jYWxjdWxhdGVfbGVuKG0pOworCisJCWlwNmggPSBtdG9kKG0sIHN0cnVjdCBp
cDZfaGRyICopOworCQkvKiBwcm90ZWN0ICpzaW42IGZyb20gb3ZlcndyaXRlICovCisJCXNpbjYg
PSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXRvOworCQl0bXAgPSAqc2luNjsKKwkJc2luNiA9ICZ0
bXA7CisKKyNpZmRlZiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFCisJCS8qIEtBTUUgaGFjazogZW1i
ZWQgc2NvcGVpZCAqLworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkgfHwgZGVmaW5lZChBUFBMRV9TTk9X
TEVPUEFSRCkKKwkJaWYgKGluNl9lbWJlZHNjb3BlKCZzaW42LT5zaW42X2FkZHIsIHNpbjYsIE5V
TEwsIE5VTEwpICE9IDApCisjZWxzZQorCQlpZiAoaW42X2VtYmVkc2NvcGUoJnNpbjYtPnNpbjZf
YWRkciwgc2luNiwgTlVMTCwgTlVMTCwgTlVMTCkgIT0gMCkKKyNlbmRpZgorI2VsaWYgZGVmaW5l
ZChTQ1RQX0tBTUUpCisJCWlmIChzYTZfZW1iZWRzY29wZShzaW42LCBNT0RVTEVfR0xPQkFMKGlw
Nl91c2VfZGVmem9uZSkpICE9IDApCisjZWxzZQorCQlpZiAoaW42X2VtYmVkc2NvcGUoJnNpbjYt
PnNpbjZfYWRkciwgc2luNikgIT0gMCkKKyNlbmRpZgorCQl7CisJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUX1BLVChtLCBpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwp
OworCQkJc2N0cF9tX2ZyZWVtKG0pOworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisjZW5kaWYg
LyogU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLworCQlpZiAobmV0ID09IE5VTEwpIHsKKwkJCW1l
bXNldCgmaXA2cm91dGUsIDAsIHNpemVvZihpcDZyb3V0ZSkpOworCQkJcm8gPSAoc2N0cF9yb3V0
ZV90ICopJmlwNnJvdXRlOworI2lmZGVmIEhBVkVfU0lONl9MRU4KKwkJCW1lbWNweSgmcm8tPnJv
X2RzdCwgc2luNiwgc2luNi0+c2luNl9sZW4pOworI2Vsc2UKKwkJCW1lbWNweSgmcm8tPnJvX2Rz
dCwgc2luNiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyNlbmRpZgorCQl9IGVsc2Ug
eworCQkJcm8gPSAoc2N0cF9yb3V0ZV90ICopJm5ldC0+cm87CisJCX0KKwkJLyoKKwkJICogV2Ug
YXNzdW1lIGhlcmUgdGhhdCBpbnBfZmxvdyBpcyBpbiBob3N0IGJ5dGUgb3JkZXIgd2l0aGluCisJ
CSAqIHRoZSBUQ0IhCisJCSAqLworCQlpZiAodG9zX3ZhbHVlID09IDApIHsKKwkJCS8qCisJCQkg
KiBUaGlzIG1lYW5zIGVzcGVjaWFsbHksIHRoYXQgaXQgaXMgbm90IHNldCBhdCB0aGUKKwkJCSAq
IFNDVFAgbGF5ZXIuIFNvIHVzZSB0aGUgdmFsdWUgZnJvbSB0aGUgSVAgbGF5ZXIuCisJCQkgKi8K
KyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pICYmICgh
ZGVmaW5lZChBUFBMRV9MRU9QQVJEKSAmJiAhZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkgJiYg
IWRlZmluZWQoQVBQTEVfTElPTikgJiYgIWRlZmluZWQoQVBQTEVfTU9VTlRBSU5MSU9OKSkKKwkJ
CXRvc192YWx1ZSA9IChudG9obChpbnAtPmlwX2lucC5pbnAuaW5wX2Zsb3cpID4+IDIwKSAmIDB4
ZmY7CisjZWxzZQorCQkJdG9zX3ZhbHVlID0gKG50b2hsKCgoc3RydWN0IGlucGNiICopaW5wKS0+
aW5wX2Zsb3cpID4+IDIwKSAmIDB4ZmY7CisjZW5kaWYKKwkJfQorCQl0b3NfdmFsdWUgJj0gMHhm
YzsKKwkJaWYgKGVjbl9vaykgeworCQkJdG9zX3ZhbHVlIHw9IHNjdHBfZ2V0X2VjdChzdGNiKTsK
KwkJfQorCQlmbG93aW5mbyA9IDB4MDY7CisJCWZsb3dpbmZvIDw8PSA4OworCQlmbG93aW5mbyB8
PSB0b3NfdmFsdWU7CisJCWZsb3dpbmZvIDw8PSAyMDsKKwkJZmxvd2luZm8gfD0gZmxvd2xhYmVs
OworCQlpcDZoLT5pcDZfZmxvdyA9IGh0b25sKGZsb3dpbmZvKTsKKwkJaWYgKHBvcnQpIHsKKwkJ
CWlwNmgtPmlwNl9ueHQgPSBJUFBST1RPX1VEUDsKKwkJfSBlbHNlIHsKKwkJCWlwNmgtPmlwNl9u
eHQgPSBJUFBST1RPX1NDVFA7CisJCX0KKwkJaXA2aC0+aXA2X3BsZW4gPSBodG9ucygodWludDE2
X3QpKHBhY2tldF9sZW5ndGggLSBzaXplb2Yoc3RydWN0IGlwNl9oZHIpKSk7CisJCWlwNmgtPmlw
Nl9kc3QgPSBzaW42LT5zaW42X2FkZHI7CisKKwkJLyoKKwkJICogQWRkIFNSQyBhZGRyZXNzIHNl
bGVjdGlvbiBoZXJlOiB3ZSBjYW4gb25seSByZXVzZSB0byBhCisJCSAqIGxpbWl0ZWQgZGVncmVl
IHRoZSBrYW1lIHNyYy1hZGRyLXNlbCwgc2luY2Ugd2UgY2FuIHRyeQorCQkgKiB0aGVpciBzZWxl
Y3Rpb24gYnV0IGl0IG1heSBub3QgYmUgYm91bmQuCisJCSAqLworCQltZW1zZXQoJmxzYTZfdG1w
LCAwLCBzaXplb2YobHNhNl90bXApKTsKKwkJbHNhNl90bXAuc2luNl9mYW1pbHkgPSBBRl9JTkVU
NjsKKyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJCWxzYTZfdG1wLnNpbjZfbGVuID0gc2l6ZW9mKGxz
YTZfdG1wKTsKKyNlbmRpZgorCQlsc2E2ID0gJmxzYTZfdG1wOworCQlpZiAobmV0ICYmIG91dF9v
Zl9hc29jX29rID09IDApIHsKKwkJCWlmIChuZXQtPnJvLl9zX2FkZHIgJiYgKG5ldC0+cm8uX3Nf
YWRkci0+bG9jYWxpZmFfZmxhZ3MgJiAoU0NUUF9CRUlOR19ERUxFVEVEfFNDVFBfQUREUl9JRkFf
VU5VU0VBQkxFKSkpIHsKKwkJCQlzY3RwX2ZyZWVfaWZhKG5ldC0+cm8uX3NfYWRkcik7CisJCQkJ
bmV0LT5yby5fc19hZGRyID0gTlVMTDsKKwkJCQluZXQtPnNyY19hZGRyX3NlbGVjdGVkID0gMDsK
KyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJ
CVJPX05IRlJFRShybyk7CisjZWxzZQorCQkJCWlmIChyby0+cm9fcnQpIHsKKwkJCQkJUlRGUkVF
KHJvLT5yb19ydCk7CisJCQkJCXJvLT5yb19ydCA9IE5VTEw7CisJCQkJfQorI2VuZGlmCisJCQl9
CisJCQlpZiAobmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9PSAwKSB7CisjaWZkZWYgU0NUUF9FTUJF
RERFRF9WNl9TQ09QRQorCQkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZuZXQtPnJv
Ll9sX2FkZHI7CisJCQkJLyogS0FNRSBoYWNrOiBlbWJlZCBzY29wZWlkICovCisjaWYgZGVmaW5l
ZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYgZGVmaW5lZChBUFBM
RV9MRU9QQVJEKSB8fCBkZWZpbmVkKEFQUExFX1NOT1dMRU9QQVJEKQorCQkJCWlmIChpbjZfZW1i
ZWRzY29wZSgmc2luNi0+c2luNl9hZGRyLCBzaW42LCBOVUxMLCBOVUxMKSAhPSAwKQorI2Vsc2UK
KwkJCQlpZiAoaW42X2VtYmVkc2NvcGUoJnNpbjYtPnNpbjZfYWRkciwgc2luNiwgTlVMTCwgTlVM
TCwgTlVMTCkgIT0gMCkKKyNlbmRpZgorI2VsaWYgZGVmaW5lZChTQ1RQX0tBTUUpCisJCQkJaWYg
KHNhNl9lbWJlZHNjb3BlKHNpbjYsIE1PRFVMRV9HTE9CQUwoaXA2X3VzZV9kZWZ6b25lKSkgIT0g
MCkKKyNlbHNlCisJCQkJaWYgKGluNl9lbWJlZHNjb3BlKCZzaW42LT5zaW42X2FkZHIsIHNpbjYp
ICE9IDApCisjZW5kaWYKKwkJCQl7CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlu
cCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVJTlZBTCk7CisJCQkJCXNjdHBf
bV9mcmVlbShtKTsKKwkJCQkJcmV0dXJuIChFSU5WQUwpOworCQkJCX0KKyNlbmRpZiAvKiBTQ1RQ
X0VNQkVEREVEX1Y2X1NDT1BFICovCisJCQkJLyogQ2FjaGUgdGhlIHNvdXJjZSBhZGRyZXNzICov
CisJCQkJbmV0LT5yby5fc19hZGRyID0gc2N0cF9zb3VyY2VfYWRkcmVzc19zZWxlY3Rpb24oaW5w
LAorCQkJCQkJCQkJCXN0Y2IsCisJCQkJCQkJCQkJcm8sCisJCQkJCQkJCQkJbmV0LAorCQkJCQkJ
CQkJCTAsCisJCQkJCQkJCQkJdnJmX2lkKTsKKyNpZmRlZiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BF
CisjaWZkZWYgU0NUUF9LQU1FCisJCQkJKHZvaWQpc2E2X3JlY292ZXJzY29wZShzaW42KTsKKyNl
bHNlCisJCQkJKHZvaWQpaW42X3JlY292ZXJzY29wZShzaW42LCAmc2luNi0+c2luNl9hZGRyLCBO
VUxMKTsKKyNlbmRpZgkvKiBTQ1RQX0tBTUUgKi8KKyNlbmRpZgkvKiBTQ1RQX0VNQkVEREVEX1Y2
X1NDT1BFICovCisJCQkJbmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDE7CisJCQl9CisJCQlpZiAo
bmV0LT5yby5fc19hZGRyID09IE5VTEwpIHsKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVU
MywgIlY2Ok5vIHJvdXRlIHRvIGhvc3RcbiIpOworCQkJCW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQg
PSAwOworCQkJCXNjdHBfaGFuZGxlX25vX3JvdXRlKHN0Y2IsIG5ldCwgc29fbG9ja2VkKTsKKwkJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX09VVFBVVCwgRUhPU1RVTlJFQUNIKTsKKwkJCQlzY3RwX21fZnJlZW0obSk7CisJCQkJcmV0
dXJuIChFSE9TVFVOUkVBQ0gpOworCQkJfQorCQkJbHNhNi0+c2luNl9hZGRyID0gbmV0LT5yby5f
c19hZGRyLT5hZGRyZXNzLnNpbjYuc2luNl9hZGRyOworCQl9IGVsc2UgeworI2lmZGVmIFNDVFBf
RU1CRURERURfVjZfU0NPUEUKKwkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZyby0+
cm9fZHN0OworCQkJLyogS0FNRSBoYWNrOiBlbWJlZCBzY29wZWlkICovCisjaWYgZGVmaW5lZChf
X0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYgZGVmaW5lZChBUFBMRV9M
RU9QQVJEKSB8fCBkZWZpbmVkKEFQUExFX1NOT1dMRU9QQVJEKQorCQkJaWYgKGluNl9lbWJlZHNj
b3BlKCZzaW42LT5zaW42X2FkZHIsIHNpbjYsIE5VTEwsIE5VTEwpICE9IDApCisjZWxzZQorCQkJ
aWYgKGluNl9lbWJlZHNjb3BlKCZzaW42LT5zaW42X2FkZHIsIHNpbjYsIE5VTEwsIE5VTEwsIE5V
TEwpICE9IDApCisjZW5kaWYKKyNlbGlmIGRlZmluZWQoU0NUUF9LQU1FKQorCQkJaWYgKHNhNl9l
bWJlZHNjb3BlKHNpbjYsIE1PRFVMRV9HTE9CQUwoaXA2X3VzZV9kZWZ6b25lKSkgIT0gMCkKKyNl
bHNlCisJCQlpZiAoaW42X2VtYmVkc2NvcGUoJnNpbjYtPnNpbjZfYWRkciwgc2luNikgIT0gMCkK
KyNlbmRpZgorCQkJICB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVF9QS1QobSwgaW5wLCBzdGNi
LCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlOVkFMKTsKKwkJCQlzY3RwX21fZnJlZW0o
bSk7CisJCQkJcmV0dXJuIChFSU5WQUwpOworCQkJICB9CisjZW5kaWYgLyogU0NUUF9FTUJFRERF
RF9WNl9TQ09QRSAqLworCQkJaWYgKG92ZXJfYWRkciA9PSBOVUxMKSB7CisJCQkJc3RydWN0IHNj
dHBfaWZhICpfbHNyYzsKKworCQkJCV9sc3JjID0gc2N0cF9zb3VyY2VfYWRkcmVzc19zZWxlY3Rp
b24oaW5wLCBzdGNiLCBybywKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5ldCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dF9v
Zl9hc29jX29rLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnJm
X2lkKTsKKwkJCQlpZiAoX2xzcmMgPT0gTlVMTCkgeworCQkJCQlzY3RwX2hhbmRsZV9ub19yb3V0
ZShzdGNiLCBuZXQsIHNvX2xvY2tlZCk7CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0s
IGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSE9TVFVOUkVBQ0gpOwor
CQkJCQlzY3RwX21fZnJlZW0obSk7CisJCQkJCXJldHVybiAoRUhPU1RVTlJFQUNIKTsKKwkJCQl9
CisJCQkJbHNhNi0+c2luNl9hZGRyID0gX2xzcmMtPmFkZHJlc3Muc2luNi5zaW42X2FkZHI7CisJ
CQkJc2N0cF9mcmVlX2lmYShfbHNyYyk7CisJCQl9IGVsc2UgeworCQkJCWxzYTYtPnNpbjZfYWRk
ciA9IG92ZXJfYWRkci0+c2luNi5zaW42X2FkZHI7CisJCQkJU0NUUF9SVEFMTE9DKHJvLCB2cmZf
aWQsIGlucC0+ZmlibnVtKTsKKwkJCX0KKyNpZmRlZiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFCisj
aWZkZWYgU0NUUF9LQU1FCisJCQkodm9pZClzYTZfcmVjb3ZlcnNjb3BlKHNpbjYpOworI2Vsc2UK
KwkJCSh2b2lkKWluNl9yZWNvdmVyc2NvcGUoc2luNiwgJnNpbjYtPnNpbjZfYWRkciwgTlVMTCk7
CisjZW5kaWYJLyogU0NUUF9LQU1FICovCisjZW5kaWYJLyogU0NUUF9FTUJFRERFRF9WNl9TQ09Q
RSAqLworCQl9CisJCWxzYTYtPnNpbjZfcG9ydCA9IGlucC0+c2N0cF9scG9ydDsKKworI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWlmIChyby0+
cm9fbmggPT0gTlVMTCkgeworI2Vsc2UKKwkJaWYgKHJvLT5yb19ydCA9PSBOVUxMKSB7CisjZW5k
aWYKKwkJCS8qCisJCQkgKiBzcmMgYWRkciBzZWxlY3Rpb24gZmFpbGVkIHRvIGZpbmQgYSByb3V0
ZSAob3IKKwkJCSAqIHZhbGlkIHNvdXJjZSBhZGRyKSwgc28gd2UgY2FuJ3QgZ2V0IHRoZXJlIGZy
b20KKwkJCSAqIGhlcmUhCisJCQkgKi8KKwkJCXNjdHBfaGFuZGxlX25vX3JvdXRlKHN0Y2IsIG5l
dCwgc29fbG9ja2VkKTsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgc3RjYiwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSE9TVFVOUkVBQ0gpOworCQkJc2N0cF9tX2Zy
ZWVtKG0pOworCQkJcmV0dXJuIChFSE9TVFVOUkVBQ0gpOworCQl9CisjaWZuZGVmIFNDT1BFRFJP
VVRJTkcKKyNpZmRlZiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFCisJCS8qCisJCSAqIFhYWDogc2E2
IG1heSBub3QgaGF2ZSBhIHZhbGlkIHNpbjZfc2NvcGVfaWQgaW4gdGhlCisJCSAqIG5vbi1TQ09Q
RURST1VUSU5HIGNhc2UuCisJCSAqLworCQltZW1zZXQoJmxzYTZfc3RvcmFnZSwgMCwgc2l6ZW9m
KGxzYTZfc3RvcmFnZSkpOworCQlsc2E2X3N0b3JhZ2Uuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsK
KyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJCWxzYTZfc3RvcmFnZS5zaW42X2xlbiA9IHNpemVvZihs
c2E2X3N0b3JhZ2UpOworI2VuZGlmCisjaWZkZWYgU0NUUF9LQU1FCisJCWxzYTZfc3RvcmFnZS5z
aW42X2FkZHIgPSBsc2E2LT5zaW42X2FkZHI7CisJCWlmICgoZXJyb3IgPSBzYTZfcmVjb3ZlcnNj
b3BlKCZsc2E2X3N0b3JhZ2UpKSAhPSAwKSB7CisjZWxzZQorCQlpZiAoKGVycm9yID0gaW42X3Jl
Y292ZXJzY29wZSgmbHNhNl9zdG9yYWdlLCAmbHNhNi0+c2luNl9hZGRyLAorCQkgICAgTlVMTCkp
ICE9IDApIHsKKyNlbmRpZgkJCQkvKiBTQ1RQX0tBTUUgKi8KKwkJCVNDVFBEQkcoU0NUUF9ERUJV
R19PVVRQVVQzLCAicmVjb3ZlciBzY29wZSBmYWlscyBlcnJvciAlZFxuIiwgZXJyb3IpOworCQkJ
c2N0cF9tX2ZyZWVtKG0pOworCQkJcmV0dXJuIChlcnJvcik7CisJCX0KKwkJLyogWFhYICovCisJ
CWxzYTZfc3RvcmFnZS5zaW42X2FkZHIgPSBsc2E2LT5zaW42X2FkZHI7CisJCWxzYTZfc3RvcmFn
ZS5zaW42X3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7CisJCWxzYTYgPSAmbHNhNl9zdG9yYWdlOwor
I2VuZGlmIC8qIFNDVFBfRU1CRURERURfVjZfU0NPUEUgKi8KKyNlbmRpZiAvKiBTQ09QRURST1VU
SU5HICovCisJCWlwNmgtPmlwNl9zcmMgPSBsc2E2LT5zaW42X2FkZHI7CisKKwkJaWYgKHBvcnQp
IHsKKwkJCWlmIChodG9ucyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdWRwX3R1bm5lbGluZ19wb3J0
KSkgPT0gMCkgeworCQkJCXNjdHBfaGFuZGxlX25vX3JvdXRlKHN0Y2IsIG5ldCwgc29fbG9ja2Vk
KTsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIHN0Y2IsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX09VVFBVVCwgRUhPU1RVTlJFQUNIKTsKKwkJCQlzY3RwX21fZnJlZW0obSk7CisJ
CQkJcmV0dXJuIChFSE9TVFVOUkVBQ0gpOworCQkJfQorCQkJdWRwID0gKHN0cnVjdCB1ZHBoZHIg
KikoKGNhZGRyX3QpaXA2aCArIHNpemVvZihzdHJ1Y3QgaXA2X2hkcikpOworCQkJdWRwLT51aF9z
cG9ydCA9IGh0b25zKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF91ZHBfdHVubmVsaW5nX3BvcnQpKTsK
KwkJCXVkcC0+dWhfZHBvcnQgPSBwb3J0OworCQkJdWRwLT51aF91bGVuID0gaHRvbnMoKHVpbnQx
Nl90KShwYWNrZXRfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSkpOworCQkJdWRwLT51
aF9zdW0gPSAwOworCQkJc2N0cGhkciA9IChzdHJ1Y3Qgc2N0cGhkciAqKSgoY2FkZHJfdCl1ZHAg
KyBzaXplb2Yoc3RydWN0IHVkcGhkcikpOworCQl9IGVsc2UgeworCQkJc2N0cGhkciA9IChzdHJ1
Y3Qgc2N0cGhkciAqKSgoY2FkZHJfdClpcDZoICsgc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSk7CisJ
CX0KKworCQlzY3RwaGRyLT5zcmNfcG9ydCA9IHNyY19wb3J0OworCQlzY3RwaGRyLT5kZXN0X3Bv
cnQgPSBkZXN0X3BvcnQ7CisJCXNjdHBoZHItPnZfdGFnID0gdl90YWc7CisJCXNjdHBoZHItPmNo
ZWNrc3VtID0gMDsKKworCQkvKgorCQkgKiBXZSBzZXQgdGhlIGhvcCBsaW1pdCBub3cgc2luY2Ug
dGhlcmUgaXMgYSBnb29kIGNoYW5jZQorCQkgKiB0aGF0IG91ciBybyBwb2ludGVyIGlzIG5vdyBm
aWxsZWQKKwkJICovCisJCWlwNmgtPmlwNl9obGltID0gU0NUUF9HRVRfSExJTShpbnAsIHJvKTsK
KyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlpZnAgPSBTQ1RQX0dFVF9JRk5fVk9JRF9G
Uk9NX1JPVVRFKHJvKTsKKyNlbmRpZgorCisjaWZkZWYgU0NUUF9ERUJVRworCQkvKiBDb3B5IHRv
IGJlIHN1cmUgc29tZXRoaW5nIGJhZCBpcyBub3QgaGFwcGVuaW5nICovCisJCXNpbjYtPnNpbjZf
YWRkciA9IGlwNmgtPmlwNl9kc3Q7CisJCWxzYTYtPnNpbjZfYWRkciA9IGlwNmgtPmlwNl9zcmM7
CisjZW5kaWYKKworCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIkNhbGxpbmcgaXB2NiBv
dXRwdXQgcm91dGluZSBmcm9tIGxvdyBsZXZlbFxuIik7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19P
VVRQVVQzLCAic3JjOiAiKTsKKwkJU0NUUERCR19BRERSKFNDVFBfREVCVUdfT1VUUFVUMywgKHN0
cnVjdCBzb2NrYWRkciAqKWxzYTYpOworCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgImRz
dDogIik7CisJCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX09VVFBVVDMsIChzdHJ1Y3Qgc29ja2Fk
ZHIgKilzaW42KTsKKwkJaWYgKG5ldCkgeworCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42
ICopJm5ldC0+cm8uX2xfYWRkcjsKKwkJCS8qIHByZXNlcnZlIHRoZSBwb3J0IGFuZCBzY29wZSBm
b3IgbGluayBsb2NhbCBzZW5kICovCisJCQlwcmV2X3Njb3BlID0gc2luNi0+c2luNl9zY29wZV9p
ZDsKKwkJCXByZXZfcG9ydCA9IHNpbjYtPnNpbjZfcG9ydDsKKwkJfQorCisJCWlmIChTQ1RQX0dF
VF9IRUFERVJfRk9SX09VVFBVVChvX3BhaykpIHsKKwkJCS8qIGZhaWxlZCB0byBwcmVwZW5kIGRh
dGEsIGdpdmUgdXAgKi8KKwkJCXNjdHBfbV9mcmVlbShtKTsKKwkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT01FTSk7CisJCQly
ZXR1cm4gKEVOT01FTSk7CisJCX0KKwkJU0NUUF9BVFRBQ0hfQ0hBSU4ob19wYWssIG0sIHBhY2tl
dF9sZW5ndGgpOworCQlpZiAocG9ydCkgeworCQkJc2N0cGhkci0+Y2hlY2tzdW0gPSBzY3RwX2Nh
bGN1bGF0ZV9ja3N1bShtLCBzaXplb2Yoc3RydWN0IGlwNl9oZHIpICsgc2l6ZW9mKHN0cnVjdCB1
ZHBoZHIpKTsKKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRzd2NyYyk7CisjaWYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKyNpZiBkZWZpbmVkKF9XSU4zMikKKwkJCXVkcC0+dWhfc3VtID0g
MDsKKyNlbHNlCisJCQlpZiAoKHVkcC0+dWhfc3VtID0gaW42X2Nrc3VtKG9fcGFrLCBJUFBST1RP
X1VEUCwgc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSwgcGFja2V0X2xlbmd0aCAtIHNpemVvZihzdHJ1
Y3QgaXA2X2hkcikpKSA9PSAwKSB7CisJCQkJdWRwLT51aF9zdW0gPSAweGZmZmY7CisJCQl9Cisj
ZW5kaWYKKyNlbmRpZgorCQl9IGVsc2UgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQltLT5tX3BrdGhkci5jc3VtX2ZsYWdzID0gQ1NVTV9T
Q1RQX0lQVjY7CisJCQltLT5tX3BrdGhkci5jc3VtX2RhdGEgPSBvZmZzZXRvZihzdHJ1Y3Qgc2N0
cGhkciwgY2hlY2tzdW0pOworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZGh3Y3JjKTsKKyNl
bHNlCisJCQlpZiAoIShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbm9fY3N1bV9vbl9sb29wYmFjaykg
JiYKKwkJCSAgICAgIChzdGNiKSAmJiAoc3RjYi0+YXNvYy5zY29wZS5sb29wYmFja19zY29wZSkp
KSB7CisJCQkJc2N0cGhkci0+Y2hlY2tzdW0gPSBzY3RwX2NhbGN1bGF0ZV9ja3N1bShtLCBzaXpl
b2Yoc3RydWN0IGlwNl9oZHIpKTsKKwkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kc3djcmMp
OworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kaHdjcmMpOworCQkJ
fQorI2VuZGlmCisJCX0KKwkJLyogc2VuZCBpdCBvdXQuIHRhYmxlIGlkIGlzIHRha2VuIGZyb20g
c3RjYiAqLworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorCQlpZiAoKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9vdXRwdXRfdW5sb2NrZWQpKSAmJiAoc29f
bG9ja2VkKSkgeworCQkJc28gPSBTQ1RQX0lOUF9TTyhpbnApOworCQkJU0NUUF9TT0NLRVRfVU5M
T0NLKHNvLCAwKTsKKwkJfQorI2VuZGlmCisjaWZkZWYgU0NUUF9QQUNLRVRfTE9HR0lORworCQlp
ZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MQVNUX1BBQ0tF
VF9UUkFDSU5HKQorCQkJc2N0cF9wYWNrZXRfbG9nKG9fcGFrKTsKKyNlbmRpZgorI2lmICFkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJU0NUUF9QUk9C
RTUoc2VuZCwgTlVMTCwgc3RjYiwgaXA2aCwgc3RjYiwgc2N0cGhkcik7CisjZW5kaWYKKwkJU0NU
UF9JUDZfT1VUUFVUKHJldCwgb19wYWssIChzdHJ1Y3Qgcm91dGVfaW42ICopcm8sICZpZnAsIHN0
Y2IsIHZyZl9pZCk7CisjZWxzZQorCQlTQ1RQX0lQNl9PVVRQVVQocmV0LCBvX3BhaywgKHN0cnVj
dCByb3V0ZV9pbjYgKilybywgTlVMTCwgc3RjYiwgdnJmX2lkKTsKKyNlbmRpZgorI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlpZiAoKFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9vdXRwdXRfdW5sb2NrZWQpKSAmJiAoc29fbG9ja2VkKSkgeworCQkJYXRv
bWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCVNDVFBfVENCX1VOTE9DSyhz
dGNiKTsKKwkJCVNDVFBfU09DS0VUX0xPQ0soc28sIDApOworCQkJU0NUUF9UQ0JfTE9DSyhzdGNi
KTsKKwkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJfQor
I2VuZGlmCisJCWlmIChuZXQpIHsKKwkJCS8qIGZvciBsaW5rIGxvY2FsIHRoaXMgbXVzdCBiZSBk
b25lICovCisJCQlzaW42LT5zaW42X3Njb3BlX2lkID0gcHJldl9zY29wZTsKKwkJCXNpbjYtPnNp
bjZfcG9ydCA9IHByZXZfcG9ydDsKKwkJfQorCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywg
InJldHVybiBmcm9tIHNlbmQgaXMgJWRcbiIsIHJldCk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJaWYgKHBvcnQpIHsKKwkJCVVEUFNUQVRf
SU5DKHVkcHNfb3BhY2tldHMpOworCQl9CisjZW5kaWYKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNf
c2VuZHBhY2tldHMpOworCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfb3V0cGFja2V0
cyk7CisJCWlmIChyZXQpIHsKKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRlcnJvcnMpOwor
CQl9CisJCWlmIChuZXQgPT0gTlVMTCkgeworCQkJLyogTm93IGlmIHdlIGhhZCBhIHRlbXAgcm91
dGUgZnJlZSBpdCAqLworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisJCQlST19OSEZSRUUocm8pOworI2Vsc2UKKwkJCWlmIChyby0+cm9fcnQpIHsK
KwkJCQlSVEZSRUUocm8tPnJvX3J0KTsKKwkJCQlyby0+cm9fcnQgPSBOVUxMOworCQkJfQorI2Vu
ZGlmCisJCX0gZWxzZSB7CisJCQkvKiBQTVRVIGNoZWNrIHZlcnN1cyBzbWFsbGVzdCBhc29jIE1U
VSBnb2VzIGhlcmUgKi8KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorCQkJaWYgKHJvLT5yb19uaCA9PSBOVUxMKSB7CisjZWxzZQorCQkJaWYgKHJv
LT5yb19ydCA9PSBOVUxMKSB7CisjZW5kaWYKKwkJCQkvKiBSb3V0ZSB3YXMgZnJlZWQgKi8KKwkJ
CQlpZiAobmV0LT5yby5fc19hZGRyICYmCisJCQkJICAgIG5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQp
IHsKKwkJCQkJc2N0cF9mcmVlX2lmYShuZXQtPnJvLl9zX2FkZHIpOworCQkJCQluZXQtPnJvLl9z
X2FkZHIgPSBOVUxMOworCQkJCX0KKwkJCQluZXQtPnNyY19hZGRyX3NlbGVjdGVkID0gMDsKKwkJ
CX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CQkJaWYgKChyby0+cm9fbmggIT0gTlVMTCkgJiYgKG5ldC0+cm8uX3NfYWRkcikgJiYKKyNlbHNl
CisJCQlpZiAoKHJvLT5yb19ydCAhPSBOVUxMKSAmJiAobmV0LT5yby5fc19hZGRyKSAmJgorI2Vu
ZGlmCisJCQkgICAgKChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfTk9fUE1UVUQpID09IDAp
KSB7CisJCQkJdWludDMyX3QgbXR1OworCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQltdHUgPSBTQ1RQX0dBVEhFUl9NVFVfRlJPTV9ST1VU
RShuZXQtPnJvLl9zX2FkZHIsICZuZXQtPnJvLl9sX2FkZHIuc2EsIHJvLT5yb19uaCk7CisjZWxz
ZQorCQkJCW10dSA9IFNDVFBfR0FUSEVSX01UVV9GUk9NX1JPVVRFKG5ldC0+cm8uX3NfYWRkciwg
Jm5ldC0+cm8uX2xfYWRkci5zYSwgcm8tPnJvX3J0KTsKKyNlbmRpZgorCQkJCWlmIChtdHUgPiAw
KSB7CisJCQkJCWlmIChuZXQtPnBvcnQpIHsKKwkJCQkJCW10dSAtPSBzaXplb2Yoc3RydWN0IHVk
cGhkcik7CisJCQkJCX0KKwkJCQkJaWYgKG10dSA8IG5ldC0+bXR1KSB7CisJCQkJCQlpZiAoKHN0
Y2IgIT0gTlVMTCkgJiYgKHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1ID4gbXR1KSkgeworCQkJCQkJ
CXNjdHBfbXR1X3NpemVfcmVzZXQoaW5wLCAmc3RjYi0+YXNvYywgbXR1KTsKKwkJCQkJCX0KKwkJ
CQkJCW5ldC0+bXR1ID0gbXR1OworCQkJCQl9CisJCQkJfQorCQkJfQorI2lmICFkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisJCQllbHNlIGlmIChpZnApIHsKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyNk
ZWZpbmUgTkRfSUZJTkZPKGlmcCkJKGlmcCkKKyNkZWZpbmUgbGlua210dQkJaWZfbXR1CisjZW5k
aWYKKwkJCQlpZiAoTkRfSUZJTkZPKGlmcCktPmxpbmttdHUgJiYKKwkJCQkgICAgKHN0Y2ItPmFz
b2Muc21hbGxlc3RfbXR1ID4gTkRfSUZJTkZPKGlmcCktPmxpbmttdHUpKSB7CisJCQkJCXNjdHBf
bXR1X3NpemVfcmVzZXQoaW5wLAorCQkJCQkgICAgJnN0Y2ItPmFzb2MsCisJCQkJCSAgICBORF9J
RklORk8oaWZwKS0+bGlua210dSk7CisJCQkJfQorCQkJfQorI2VuZGlmCisJCX0KKwkJcmV0dXJu
IChyZXQpOworCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwljYXNlIEFG
X0NPTk46CisJeworCQljaGFyICpidWZmZXI7CisJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29u
bjsKKwkJaW50IGxlbjsKKworCQlzY29ubiA9IChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKXRvOwor
CQlsZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpOworCQluZXdtID0gc2N0cF9nZXRfbWJ1Zl9m
b3JfbXNnKGxlbiwgMSwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOworCQlpZiAobmV3bSA9PSBOVUxM
KSB7CisJCQlzY3RwX21fZnJlZW0obSk7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3Rj
YiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOworCQkJcmV0dXJuIChFTk9N
RU0pOworCQl9CisJCVNDVFBfQUxJR05fVE9fRU5EKG5ld20sIGxlbik7CisJCVNDVFBfQlVGX0xF
TihuZXdtKSA9IGxlbjsKKwkJU0NUUF9CVUZfTkVYVChuZXdtKSA9IG07CisJCW0gPSBuZXdtOwor
CQlwYWNrZXRfbGVuZ3RoID0gc2N0cF9jYWxjdWxhdGVfbGVuKG0pOworCQlzY3RwaGRyID0gbXRv
ZChtLCBzdHJ1Y3Qgc2N0cGhkciAqKTsKKwkJc2N0cGhkci0+c3JjX3BvcnQgPSBzcmNfcG9ydDsK
KwkJc2N0cGhkci0+ZGVzdF9wb3J0ID0gZGVzdF9wb3J0OworCQlzY3RwaGRyLT52X3RhZyA9IHZf
dGFnOworCQlzY3RwaGRyLT5jaGVja3N1bSA9IDA7CisJCWlmIChTQ1RQX0JBU0VfVkFSKGNyYzMy
Y19vZmZsb2FkZWQpID09IDApIHsKKwkJCXNjdHBoZHItPmNoZWNrc3VtID0gc2N0cF9jYWxjdWxh
dGVfY2tzdW0obSwgMCk7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kc3djcmMpOworCQl9
IGVsc2UgeworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZGh3Y3JjKTsKKwkJfQorCQlpZiAo
dG9zX3ZhbHVlID09IDApIHsKKwkJCXRvc192YWx1ZSA9IGlucC0+aXBfaW5wLmlucC5pbnBfaXBf
dG9zOworCQl9CisJCXRvc192YWx1ZSAmPSAweGZjOworCQlpZiAoZWNuX29rKSB7CisJCQl0b3Nf
dmFsdWUgfD0gc2N0cF9nZXRfZWN0KHN0Y2IpOworCQl9CisJCS8qIERvbid0IGFsbG9jL2ZyZWUg
Zm9yIGVhY2ggcGFja2V0ICovCisJCWlmICgoYnVmZmVyID0gbWFsbG9jKHBhY2tldF9sZW5ndGgp
KSAhPSBOVUxMKSB7CisJCQltX2NvcHlkYXRhKG0sIDAsIHBhY2tldF9sZW5ndGgsIGJ1ZmZlcik7
CisJCQlyZXQgPSBTQ1RQX0JBU0VfVkFSKGNvbm5fb3V0cHV0KShzY29ubi0+c2Nvbm5fYWRkciwg
YnVmZmVyLCBwYWNrZXRfbGVuZ3RoLCB0b3NfdmFsdWUsIG5vZnJhZ21lbnRfZmxhZyk7CisJCQlm
cmVlKGJ1ZmZlcik7CisJCX0gZWxzZSB7CisJCQlyZXQgPSBFTk9NRU07CisJCX0KKwkJc2N0cF9t
X2ZyZWVtKG0pOworCQlyZXR1cm4gKHJldCk7CisJfQorI2VuZGlmCisJZGVmYXVsdDoKKwkJU0NU
UERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICJVbmtub3duIHByb3RvY29sIChUU05IKSB0eXBlICVk
XG4iLAorCQkgICAgICAgICgoc3RydWN0IHNvY2thZGRyICopdG8pLT5zYV9mYW1pbHkpOworCQlz
Y3RwX21fZnJlZW0obSk7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgc3RjYiwg
bmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVGQVVMVCk7CisJCXJldHVybiAoRUZBVUxUKTsK
Kwl9Cit9CisKK3ZvaWQKK3NjdHBfc2VuZF9pbml0aWF0ZShzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5w
LCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCBzb19sb2NrZWQpCit7CisJc3RydWN0IG1idWYg
Km0sICptX2xhc3Q7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCXN0cnVjdCBzY3RwX2luaXRf
Y2h1bmsgKmluaXQ7CisJc3RydWN0IHNjdHBfc3VwcG9ydGVkX2FkZHJfcGFyYW0gKnN1cF9hZGRy
OworCXN0cnVjdCBzY3RwX2FkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdGlvbiAqYWxpOworCXN0cnVj
dCBzY3RwX3N1cHBvcnRlZF9jaHVua190eXBlc19wYXJhbSAqcHJfc3VwcG9ydGVkOworCXN0cnVj
dCBzY3RwX3BhcmFtaGRyICpwaDsKKwlpbnQgY250X2luaXRzX3RvID0gMDsKKwlpbnQgZXJyb3I7
CisJdWludDE2X3QgbnVtX2V4dCwgY2h1bmtfbGVuLCBwYWRkaW5nX2xlbiwgcGFyYW1ldGVyX2xl
bjsKKworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CWlmIChzb19sb2NrZWQpIHsKKwkJc2N0cF9sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhpbnApKTsK
Kwl9IGVsc2UgeworCQlzY3RwX3VubG9ja19hc3NlcnQoU0NUUF9JTlBfU08oaW5wKSk7CisJfQor
I2VuZGlmCisJLyogSU5JVCdzIGFsd2F5cyBnbyB0byB0aGUgcHJpbWFyeSAoYW5kIHVzdWFsbHkg
T05MWSBhZGRyZXNzKSAqLworCW5ldCA9IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbjsK
KwlpZiAobmV0ID09IE5VTEwpIHsKKwkJbmV0ID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2MubmV0
cyk7CisJCWlmIChuZXQgPT0gTlVMTCkgeworCQkJLyogVFNOSCAqLworCQkJcmV0dXJuOworCQl9
CisJCS8qIHdlIGNvbmZpcm0gYW55IGFkZHJlc3Mgd2Ugc2VuZCBhbiBJTklUIHRvICovCisJCW5l
dC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9BRERSX1VOQ09ORklSTUVEOworCQkodm9pZClzY3RwX3Nl
dF9wcmltYXJ5X2FkZHIoc3RjYiwgTlVMTCwgbmV0KTsKKwl9IGVsc2UgeworCQkvKiB3ZSBjb25m
aXJtIGFueSBhZGRyZXNzIHdlIHNlbmQgYW4gSU5JVCB0byAqLworCQluZXQtPmRlc3Rfc3RhdGUg
Jj0gflNDVFBfQUREUl9VTkNPTkZJUk1FRDsKKwl9CisJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBV
VDQsICJTZW5kaW5nIElOSVRcbiIpOworI2lmZGVmIElORVQ2CisJaWYgKG5ldC0+cm8uX2xfYWRk
ci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJLyoKKwkJICogc3BlY2lhbCBob29rLCBp
ZiB3ZSBhcmUgc2VuZGluZyB0byBsaW5rIGxvY2FsIGl0IHdpbGwgbm90CisJCSAqIHNob3cgdXAg
aW4gb3VyIHByaXZhdGUgYWRkcmVzcyBjb3VudC4KKwkJICovCisJCWlmIChJTjZfSVNfQUREUl9M
SU5LTE9DQUwoJm5ldC0+cm8uX2xfYWRkci5zaW42LnNpbjZfYWRkcikpCisJCQljbnRfaW5pdHNf
dG8gPSAxOworCX0KKyNlbmRpZgorCWlmIChTQ1RQX09TX1RJTUVSX1BFTkRJTkcoJm5ldC0+cnh0
X3RpbWVyLnRpbWVyKSkgeworCQkvKiBUaGlzIGNhc2Ugc2hvdWxkIG5vdCBoYXBwZW4gKi8KKwkJ
U0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDQsICJTZW5kaW5nIElOSVQgLSBmYWlsZWQgdGltZXI/
XG4iKTsKKwkJcmV0dXJuOworCX0KKwkvKiBzdGFydCB0aGUgSU5JVCB0aW1lciAqLworCXNjdHBf
dGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0lOSVQsIGlucCwgc3RjYiwgbmV0KTsKKworCW0g
PSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coTUNMQllURVMsIDEsIE1fTk9XQUlULCAxLCBNVF9EQVRB
KTsKKwlpZiAobSA9PSBOVUxMKSB7CisJCS8qIE5vIG1lbW9yeSwgSU5JVCB0aW1lciB3aWxsIHJl
LWF0dGVtcHQuICovCisJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQ0LCAiU2VuZGluZyBJTklU
IC0gbWJ1Zj9cbiIpOworCQlyZXR1cm47CisJfQorCWNodW5rX2xlbiA9ICh1aW50MTZfdClzaXpl
b2Yoc3RydWN0IHNjdHBfaW5pdF9jaHVuayk7CisJcGFkZGluZ19sZW4gPSAwOworCS8qIE5vdyBs
ZXRzIHB1dCB0aGUgY2h1bmsgaGVhZGVyIGluIHBsYWNlICovCisJaW5pdCA9IG10b2QobSwgc3Ry
dWN0IHNjdHBfaW5pdF9jaHVuayAqKTsKKwkvKiBub3cgdGhlIGNodW5rIGhlYWRlciAqLworCWlu
aXQtPmNoLmNodW5rX3R5cGUgPSBTQ1RQX0lOSVRJQVRJT047CisJaW5pdC0+Y2guY2h1bmtfZmxh
Z3MgPSAwOworCS8qIGZpbGwgaW4gbGF0ZXIgZnJvbSBtYnVmIHdlIGJ1aWxkICovCisJaW5pdC0+
Y2guY2h1bmtfbGVuZ3RoID0gMDsKKwkvKiBwbGFjZSBpbiBteSB0YWcgKi8KKwlpbml0LT5pbml0
LmluaXRpYXRlX3RhZyA9IGh0b25sKHN0Y2ItPmFzb2MubXlfdnRhZyk7CisJLyogc2V0IHVwIHNv
bWUgb2YgdGhlIGNyZWRpdHMuICovCisJaW5pdC0+aW5pdC5hX3J3bmQgPSBodG9ubChtYXgoaW5w
LT5zY3RwX3NvY2tldD9TQ1RQX1NCX0xJTUlUX1JDVihpbnAtPnNjdHBfc29ja2V0KTowLAorCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfTUlOSU1BTF9SV05EKSk7CisJaW5pdC0+
aW5pdC5udW1fb3V0Ym91bmRfc3RyZWFtcyA9IGh0b25zKHN0Y2ItPmFzb2MucHJlX29wZW5fc3Ry
ZWFtcyk7CisJaW5pdC0+aW5pdC5udW1faW5ib3VuZF9zdHJlYW1zID0gaHRvbnMoc3RjYi0+YXNv
Yy5tYXhfaW5ib3VuZF9zdHJlYW1zKTsKKwlpbml0LT5pbml0LmluaXRpYWxfdHNuID0gaHRvbmwo
c3RjYi0+YXNvYy5pbml0X3NlcV9udW1iZXIpOworCisJLyogQWRhcHRhdGlvbiBsYXllciBpbmRp
Y2F0aW9uIHBhcmFtZXRlciAqLworCWlmIChpbnAtPnNjdHBfZXAuYWRhcHRhdGlvbl9sYXllcl9p
bmRpY2F0b3JfcHJvdmlkZWQpIHsKKwkJcGFyYW1ldGVyX2xlbiA9ICh1aW50MTZfdClzaXplb2Yo
c3RydWN0IHNjdHBfYWRhcHRhdGlvbl9sYXllcl9pbmRpY2F0aW9uKTsKKwkJYWxpID0gKHN0cnVj
dCBzY3RwX2FkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdGlvbiAqKShtdG9kKG0sIGNhZGRyX3QpICsg
Y2h1bmtfbGVuKTsKKwkJYWxpLT5waC5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9VTFBfQURBUFRB
VElPTik7CisJCWFsaS0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMocGFyYW1ldGVyX2xlbik7CisJ
CWFsaS0+aW5kaWNhdGlvbiA9IGh0b25sKGlucC0+c2N0cF9lcC5hZGFwdGF0aW9uX2xheWVyX2lu
ZGljYXRvcik7CisJCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOworCX0KKworCS8qIEVDTiBw
YXJhbWV0ZXIgKi8KKwlpZiAoc3RjYi0+YXNvYy5lY25fc3VwcG9ydGVkID09IDEpIHsKKwkJcGFy
YW1ldGVyX2xlbiA9ICh1aW50MTZfdClzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpOworCQlw
aCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKShtdG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVu
KTsKKwkJcGgtPnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX0VDTl9DQVBBQkxFKTsKKwkJcGgtPnBh
cmFtX2xlbmd0aCA9IGh0b25zKHBhcmFtZXRlcl9sZW4pOworCQljaHVua19sZW4gKz0gcGFyYW1l
dGVyX2xlbjsKKwl9CisKKwkvKiBQUi1TQ1RQIHN1cHBvcnRlZCBwYXJhbWV0ZXIgKi8KKwlpZiAo
c3RjYi0+YXNvYy5wcnNjdHBfc3VwcG9ydGVkID09IDEpIHsKKwkJcGFyYW1ldGVyX2xlbiA9ICh1
aW50MTZfdClzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpOworCQlwaCA9IChzdHJ1Y3Qgc2N0
cF9wYXJhbWhkciAqKShtdG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVuKTsKKwkJcGgtPnBhcmFt
X3R5cGUgPSBodG9ucyhTQ1RQX1BSU0NUUF9TVVBQT1JURUQpOworCQlwaC0+cGFyYW1fbGVuZ3Ro
ID0gaHRvbnMocGFyYW1ldGVyX2xlbik7CisJCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOwor
CX0KKworCS8qIEFkZCBOQVQgZnJpZW5kbHkgcGFyYW1ldGVyLiAqLworCWlmIChTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfaW5pdHNfaW5jbHVkZV9uYXRfZnJpZW5kbHkpKSB7CisJCXBhcmFtZXRlcl9s
ZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKTsKKwkJcGggPSAoc3Ry
dWN0IHNjdHBfcGFyYW1oZHIgKikobXRvZChtLCBjYWRkcl90KSArIGNodW5rX2xlbik7CisJCXBo
LT5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9IQVNfTkFUX1NVUFBPUlQpOworCQlwaC0+cGFyYW1f
bGVuZ3RoID0gaHRvbnMocGFyYW1ldGVyX2xlbik7CisJCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJf
bGVuOworCX0KKworCS8qIEFuZCBub3cgdGVsbCB0aGUgcGVlciB3aGljaCBleHRlbnNpb25zIHdl
IHN1cHBvcnQgKi8KKwludW1fZXh0ID0gMDsKKwlwcl9zdXBwb3J0ZWQgPSAoc3RydWN0IHNjdHBf
c3VwcG9ydGVkX2NodW5rX3R5cGVzX3BhcmFtICopKG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19s
ZW4pOworCWlmIChzdGNiLT5hc29jLnByc2N0cF9zdXBwb3J0ZWQgPT0gMSkgeworCQlwcl9zdXBw
b3J0ZWQtPmNodW5rX3R5cGVzW251bV9leHQrK10gPSBTQ1RQX0ZPUldBUkRfQ1VNX1RTTjsKKwkJ
aWYgKHN0Y2ItPmFzb2MuaWRhdGFfc3VwcG9ydGVkKSB7CisJCQlwcl9zdXBwb3J0ZWQtPmNodW5r
X3R5cGVzW251bV9leHQrK10gPSBTQ1RQX0lGT1JXQVJEX0NVTV9UU047CisJCX0KKwl9CisJaWYg
KHN0Y2ItPmFzb2MuYXV0aF9zdXBwb3J0ZWQgPT0gMSkgeworCQlwcl9zdXBwb3J0ZWQtPmNodW5r
X3R5cGVzW251bV9leHQrK10gPSBTQ1RQX0FVVEhFTlRJQ0FUSU9OOworCX0KKwlpZiAoc3RjYi0+
YXNvYy5hc2NvbmZfc3VwcG9ydGVkID09IDEpIHsKKwkJcHJfc3VwcG9ydGVkLT5jaHVua190eXBl
c1tudW1fZXh0KytdID0gU0NUUF9BU0NPTkY7CisJCXByX3N1cHBvcnRlZC0+Y2h1bmtfdHlwZXNb
bnVtX2V4dCsrXSA9IFNDVFBfQVNDT05GX0FDSzsKKwl9CisJaWYgKHN0Y2ItPmFzb2MucmVjb25m
aWdfc3VwcG9ydGVkID09IDEpIHsKKwkJcHJfc3VwcG9ydGVkLT5jaHVua190eXBlc1tudW1fZXh0
KytdID0gU0NUUF9TVFJFQU1fUkVTRVQ7CisJfQorCWlmIChzdGNiLT5hc29jLmlkYXRhX3N1cHBv
cnRlZCkgeworCQlwcl9zdXBwb3J0ZWQtPmNodW5rX3R5cGVzW251bV9leHQrK10gPSBTQ1RQX0lE
QVRBOworCX0KKwlpZiAoc3RjYi0+YXNvYy5ucnNhY2tfc3VwcG9ydGVkID09IDEpIHsKKwkJcHJf
c3VwcG9ydGVkLT5jaHVua190eXBlc1tudW1fZXh0KytdID0gU0NUUF9OUl9TRUxFQ1RJVkVfQUNL
OworCX0KKwlpZiAoc3RjYi0+YXNvYy5wa3Rkcm9wX3N1cHBvcnRlZCA9PSAxKSB7CisJCXByX3N1
cHBvcnRlZC0+Y2h1bmtfdHlwZXNbbnVtX2V4dCsrXSA9IFNDVFBfUEFDS0VUX0RST1BQRUQ7CisJ
fQorCWlmIChudW1fZXh0ID4gMCkgeworCQlwYXJhbWV0ZXJfbGVuID0gKHVpbnQxNl90KXNpemVv
ZihzdHJ1Y3Qgc2N0cF9zdXBwb3J0ZWRfY2h1bmtfdHlwZXNfcGFyYW0pICsgbnVtX2V4dDsKKwkJ
cHJfc3VwcG9ydGVkLT5waC5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9TVVBQT1JURURfQ0hVTktf
RVhUKTsKKwkJcHJfc3VwcG9ydGVkLT5waC5wYXJhbV9sZW5ndGggPSBodG9ucyhwYXJhbWV0ZXJf
bGVuKTsKKwkJcGFkZGluZ19sZW4gPSBTQ1RQX1NJWkUzMihwYXJhbWV0ZXJfbGVuKSAtIHBhcmFt
ZXRlcl9sZW47CisJCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOworCX0KKwkvKiBhZGQgYXV0
aGVudGljYXRpb24gcGFyYW1ldGVycyAqLworCWlmIChzdGNiLT5hc29jLmF1dGhfc3VwcG9ydGVk
KSB7CisJCS8qIGF0dGFjaCBSQU5ET00gcGFyYW1ldGVyLCBpZiBhdmFpbGFibGUgKi8KKwkJaWYg
KHN0Y2ItPmFzb2MuYXV0aGluZm8ucmFuZG9tICE9IE5VTEwpIHsKKwkJCXN0cnVjdCBzY3RwX2F1
dGhfcmFuZG9tICpyYW5kcDsKKworCQkJaWYgKHBhZGRpbmdfbGVuID4gMCkgeworCQkJCW1lbXNl
dChtdG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVuLCAwLCBwYWRkaW5nX2xlbik7CisJCQkJY2h1
bmtfbGVuICs9IHBhZGRpbmdfbGVuOworCQkJCXBhZGRpbmdfbGVuID0gMDsKKwkJCX0KKwkJCXJh
bmRwID0gKHN0cnVjdCBzY3RwX2F1dGhfcmFuZG9tICopKG10b2QobSwgY2FkZHJfdCkgKyBjaHVu
a19sZW4pOworCQkJcGFyYW1ldGVyX2xlbiA9ICh1aW50MTZfdClzaXplb2Yoc3RydWN0IHNjdHBf
YXV0aF9yYW5kb20pICsgc3RjYi0+YXNvYy5hdXRoaW5mby5yYW5kb21fbGVuOworCQkJLyogcmFu
ZG9tIGtleSBhbHJlYWR5IGNvbnRhaW5zIHRoZSBoZWFkZXIgKi8KKwkJCW1lbWNweShyYW5kcCwg
c3RjYi0+YXNvYy5hdXRoaW5mby5yYW5kb20tPmtleSwgcGFyYW1ldGVyX2xlbik7CisJCQlwYWRk
aW5nX2xlbiA9IFNDVFBfU0laRTMyKHBhcmFtZXRlcl9sZW4pIC0gcGFyYW1ldGVyX2xlbjsKKwkJ
CWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOworCQl9CisJCS8qIGFkZCBITUFDX0FMR08gcGFy
YW1ldGVyICovCisJCWlmIChzdGNiLT5hc29jLmxvY2FsX2htYWNzICE9IE5VTEwpIHsKKwkJCXN0
cnVjdCBzY3RwX2F1dGhfaG1hY19hbGdvICpobWFjczsKKworCQkJaWYgKHBhZGRpbmdfbGVuID4g
MCkgeworCQkJCW1lbXNldChtdG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVuLCAwLCBwYWRkaW5n
X2xlbik7CisJCQkJY2h1bmtfbGVuICs9IHBhZGRpbmdfbGVuOworCQkJCXBhZGRpbmdfbGVuID0g
MDsKKwkJCX0KKwkJCWhtYWNzID0gKHN0cnVjdCBzY3RwX2F1dGhfaG1hY19hbGdvICopKG10b2Qo
bSwgY2FkZHJfdCkgKyBjaHVua19sZW4pOworCQkJcGFyYW1ldGVyX2xlbiA9ICh1aW50MTZfdCko
c2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhfaG1hY19hbGdvKSArCisJCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGNiLT5hc29jLmxvY2FsX2htYWNzLT5udW1fYWxnbyAqIHNpemVvZih1aW50
MTZfdCkpOworCQkJaG1hY3MtPnBoLnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX0hNQUNfTElTVCk7
CisJCQlobWFjcy0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMocGFyYW1ldGVyX2xlbik7CisJCQlz
Y3RwX3NlcmlhbGl6ZV9obWFjbGlzdChzdGNiLT5hc29jLmxvY2FsX2htYWNzLCAodWludDhfdCAq
KWhtYWNzLT5obWFjX2lkcyk7CisJCQlwYWRkaW5nX2xlbiA9IFNDVFBfU0laRTMyKHBhcmFtZXRl
cl9sZW4pIC0gcGFyYW1ldGVyX2xlbjsKKwkJCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOwor
CQl9CisJCS8qIGFkZCBDSFVOS1MgcGFyYW1ldGVyICovCisJCWlmIChzdGNiLT5hc29jLmxvY2Fs
X2F1dGhfY2h1bmtzICE9IE5VTEwpIHsKKwkJCXN0cnVjdCBzY3RwX2F1dGhfY2h1bmtfbGlzdCAq
Y2h1bmtzOworCisJCQlpZiAocGFkZGluZ19sZW4gPiAwKSB7CisJCQkJbWVtc2V0KG10b2QobSwg
Y2FkZHJfdCkgKyBjaHVua19sZW4sIDAsIHBhZGRpbmdfbGVuKTsKKwkJCQljaHVua19sZW4gKz0g
cGFkZGluZ19sZW47CisJCQkJcGFkZGluZ19sZW4gPSAwOworCQkJfQorCQkJY2h1bmtzID0gKHN0
cnVjdCBzY3RwX2F1dGhfY2h1bmtfbGlzdCAqKShtdG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVu
KTsKKwkJCXBhcmFtZXRlcl9sZW4gPSAodWludDE2X3QpKHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRo
X2NodW5rX2xpc3QpICsKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjdHBfYXV0aF9n
ZXRfY2hrbGlzdF9zaXplKHN0Y2ItPmFzb2MubG9jYWxfYXV0aF9jaHVua3MpKTsKKwkJCWNodW5r
cy0+cGgucGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfQ0hVTktfTElTVCk7CisJCQljaHVua3MtPnBo
LnBhcmFtX2xlbmd0aCA9IGh0b25zKHBhcmFtZXRlcl9sZW4pOworCQkJc2N0cF9zZXJpYWxpemVf
YXV0aF9jaHVua3Moc3RjYi0+YXNvYy5sb2NhbF9hdXRoX2NodW5rcywgY2h1bmtzLT5jaHVua190
eXBlcyk7CisJCQlwYWRkaW5nX2xlbiA9IFNDVFBfU0laRTMyKHBhcmFtZXRlcl9sZW4pIC0gcGFy
YW1ldGVyX2xlbjsKKwkJCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOworCQl9CisJfQorCisJ
Lyogbm93IGFueSBjb29raWUgdGltZSBleHRlbnNpb25zICovCisJaWYgKHN0Y2ItPmFzb2MuY29v
a2llX3ByZXNlcnZlX3JlcSA+IDApIHsKKwkJc3RydWN0IHNjdHBfY29va2llX3BlcnNlcnZlX3Bh
cmFtICpjb29raWVfcHJlc2VydmU7CisKKwkJaWYgKHBhZGRpbmdfbGVuID4gMCkgeworCQkJbWVt
c2V0KG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19sZW4sIDAsIHBhZGRpbmdfbGVuKTsKKwkJCWNo
dW5rX2xlbiArPSBwYWRkaW5nX2xlbjsKKwkJCXBhZGRpbmdfbGVuID0gMDsKKwkJfQorCQlwYXJh
bWV0ZXJfbGVuID0gKHVpbnQxNl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9jb29raWVfcGVyc2VydmVf
cGFyYW0pOworCQljb29raWVfcHJlc2VydmUgPSAoc3RydWN0IHNjdHBfY29va2llX3BlcnNlcnZl
X3BhcmFtICopKG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19sZW4pOworCQljb29raWVfcHJlc2Vy
dmUtPnBoLnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX0NPT0tJRV9QUkVTRVJWRSk7CisJCWNvb2tp
ZV9wcmVzZXJ2ZS0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMocGFyYW1ldGVyX2xlbik7CisJCWNv
b2tpZV9wcmVzZXJ2ZS0+dGltZSA9IGh0b25sKHN0Y2ItPmFzb2MuY29va2llX3ByZXNlcnZlX3Jl
cSk7CisJCXN0Y2ItPmFzb2MuY29va2llX3ByZXNlcnZlX3JlcSA9IDA7CisJCWNodW5rX2xlbiAr
PSBwYXJhbWV0ZXJfbGVuOworCX0KKworCWlmIChzdGNiLT5hc29jLnNjb3BlLmlwdjRfYWRkcl9s
ZWdhbCB8fCBzdGNiLT5hc29jLnNjb3BlLmlwdjZfYWRkcl9sZWdhbCkgeworCQl1aW50OF90IGk7
CisKKwkJaWYgKHBhZGRpbmdfbGVuID4gMCkgeworCQkJbWVtc2V0KG10b2QobSwgY2FkZHJfdCkg
KyBjaHVua19sZW4sIDAsIHBhZGRpbmdfbGVuKTsKKwkJCWNodW5rX2xlbiArPSBwYWRkaW5nX2xl
bjsKKwkJCXBhZGRpbmdfbGVuID0gMDsKKwkJfQorCQlwYXJhbWV0ZXJfbGVuID0gKHVpbnQxNl90
KXNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcik7CisJCWlmIChzdGNiLT5hc29jLnNjb3BlLmlw
djRfYWRkcl9sZWdhbCkgeworCQkJcGFyYW1ldGVyX2xlbiArPSAodWludDE2X3Qpc2l6ZW9mKHVp
bnQxNl90KTsKKwkJfQorCQlpZiAoc3RjYi0+YXNvYy5zY29wZS5pcHY2X2FkZHJfbGVnYWwpIHsK
KwkJCXBhcmFtZXRlcl9sZW4gKz0gKHVpbnQxNl90KXNpemVvZih1aW50MTZfdCk7CisJCX0KKwkJ
c3VwX2FkZHIgPSAoc3RydWN0IHNjdHBfc3VwcG9ydGVkX2FkZHJfcGFyYW0gKikobXRvZChtLCBj
YWRkcl90KSArIGNodW5rX2xlbik7CisJCXN1cF9hZGRyLT5waC5wYXJhbV90eXBlID0gaHRvbnMo
U0NUUF9TVVBQT1JURURfQUREUlRZUEUpOworCQlzdXBfYWRkci0+cGgucGFyYW1fbGVuZ3RoID0g
aHRvbnMocGFyYW1ldGVyX2xlbik7CisJCWkgPSAwOworCQlpZiAoc3RjYi0+YXNvYy5zY29wZS5p
cHY0X2FkZHJfbGVnYWwpIHsKKwkJCXN1cF9hZGRyLT5hZGRyX3R5cGVbaSsrXSA9IGh0b25zKFND
VFBfSVBWNF9BRERSRVNTKTsKKwkJfQorCQlpZiAoc3RjYi0+YXNvYy5zY29wZS5pcHY2X2FkZHJf
bGVnYWwpIHsKKwkJCXN1cF9hZGRyLT5hZGRyX3R5cGVbaSsrXSA9IGh0b25zKFNDVFBfSVBWNl9B
RERSRVNTKTsKKwkJfQorCQlwYWRkaW5nX2xlbiA9IDQgLSAyICogaTsKKwkJY2h1bmtfbGVuICs9
IHBhcmFtZXRlcl9sZW47CisJfQorCisJU0NUUF9CVUZfTEVOKG0pID0gY2h1bmtfbGVuOworCS8q
IG5vdyB0aGUgYWRkcmVzc2VzICovCisJLyogVG8gb3B0aW1pemUgdGhpcyB3ZSBjb3VsZCBwdXQg
dGhlIHNjb3Bpbmcgc3R1ZmYKKwkgKiBpbnRvIGEgc3RydWN0dXJlIGFuZCByZW1vdmUgdGhlIGlu
ZGl2aWR1YWwgdWludDgncyBmcm9tCisJICogdGhlIGFzc29jIHN0cnVjdHVyZS4gVGhlbiB3ZSBj
b3VsZCBqdXN0IHNpZmEgaW4gdGhlCisJICogYWRkcmVzcyB3aXRoaW4gdGhlIHN0Y2IuIEJ1dCBm
b3Igbm93IHRoaXMgaXMgYSBxdWljaworCSAqIGhhY2sgdG8gZ2V0IHRoZSBhZGRyZXNzIHN0dWZm
IHRlYXNlZCBhcGFydC4KKwkgKi8KKwltX2xhc3QgPSBzY3RwX2FkZF9hZGRyZXNzZXNfdG9faV9p
YShpbnAsIHN0Y2IsICZzdGNiLT5hc29jLnNjb3BlLAorCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG0sIGNudF9pbml0c190bywKKwkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmcGFkZGluZ19sZW4sICZjaHVua19sZW4pOworCisJaW5pdC0+Y2guY2h1bmtf
bGVuZ3RoID0gaHRvbnMoY2h1bmtfbGVuKTsKKwlpZiAocGFkZGluZ19sZW4gPiAwKSB7CisJCWlm
IChzY3RwX2FkZF9wYWRfdG9tYnVmKG1fbGFzdCwgcGFkZGluZ19sZW4pID09IE5VTEwpIHsKKwkJ
CXNjdHBfbV9mcmVlbShtKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlTQ1RQREJHKFNDVFBfREVC
VUdfT1VUUFVUNCwgIlNlbmRpbmcgSU5JVCAtIGNhbGxzIGxvd2xldmVsX291dHB1dFxuIik7CisJ
aWYgKChlcnJvciA9IHNjdHBfbG93bGV2ZWxfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgbmV0LAor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRy
ICopJm5ldC0+cm8uX2xfYWRkciwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbSwgMCwgTlVMTCwgMCwgMCwgMCwgMCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5wLT5zY3RwX2xwb3J0LCBzdGNiLT5ycG9ydCwgaHRvbmwoMCksCisJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldC0+cG9ydCwgTlVMTCwK
KyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLAorI2VuZGlmCisJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvX2xvY2tlZCkpKSB7CisJCVND
VFBEQkcoU0NUUF9ERUJVR19PVVRQVVQ0LCAiR2FrIHNlbmQgZXJyb3IgJWRcbiIsIGVycm9yKTsK
KwkJaWYgKGVycm9yID09IEVOT0JVRlMpIHsKKwkJCXN0Y2ItPmFzb2MuaWZwX2hhZF9lbm9idWYg
PSAxOworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbG93bGV2ZWxlcnIpOworCQl9CisJfSBlbHNl
IHsKKwkJc3RjYi0+YXNvYy5pZnBfaGFkX2Vub2J1ZiA9IDA7CisJfQorCVNDVFBfU1RBVF9JTkNS
X0NPVU5URVI2NChzY3Rwc19vdXRjb250cm9sY2h1bmtzKTsKKwkodm9pZClTQ1RQX0dFVFRJTUVf
VElNRVZBTCgmbmV0LT5sYXN0X3NlbnRfdGltZSk7Cit9CisKK3N0cnVjdCBtYnVmICoKK3NjdHBf
YXJldGhlcmVfdW5yZWNvZ25pemVkX3BhcmFtZXRlcnMoc3RydWN0IG1idWYgKmluX2luaXRwa3Qs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYXJhbV9vZmZzZXQs
IGludCAqYWJvcnRfcHJvY2Vzc2luZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgKm5hdF9mcmllbmRseSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50ICpjb29raWVfZm91bmQpCit7CisJLyoKKwkgKiBHaXZlbiBhIG1i
dWYgY29udGFpbmluZyBhbiBJTklUIG9yIElOSVQtQUNLIHdpdGggdGhlIHBhcmFtX29mZnNldAor
CSAqIGJlaW5nIGVxdWFsIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhcmFtcyBpLmUuIChpcGhs
ZW4gKworCSAqIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X21zZykgcGFyc2UgdGhyb3VnaCB0aGUg
cGFyYW1ldGVycyB0byB0aGUKKwkgKiBlbmQgb2YgdGhlIG1idWYgdmVyaWZ5aW5nIHRoYXQgYWxs
IHBhcmFtZXRlcnMgYXJlIGtub3duLgorCSAqCisJICogRm9yIHVua25vd24gcGFyYW1ldGVycyBi
dWlsZCBhbmQgcmV0dXJuIGEgbWJ1ZiB3aXRoCisJICogVU5SRUNPR05JWkVEX1BBUkFNRVRFUiBl
cnJvcnMuIElmIHRoZSBmbGFncyBpbmRpY2F0ZSB0byBzdG9wCisJICogcHJvY2Vzc2luZyB0aGlz
IGNodW5rIHN0b3AsIGFuZCBzZXQgKmFib3J0X3Byb2Nlc3NpbmcgdG8gMS4KKwkgKgorCSAqIEJ5
IGhhdmluZyBwYXJhbV9vZmZzZXQgYmUgcHJlLXNldCB0byB3aGVyZSBwYXJhbWV0ZXJzIGJlZ2lu
IGl0IGlzCisJICogaG9wZWQgdGhhdCB0aGlzIHJvdXRpbmUgbWF5IGJlIHJldXNlZCBpbiB0aGUg
ZnV0dXJlIGJ5IG5ldworCSAqIGZlYXR1cmVzLgorCSAqLworCXN0cnVjdCBzY3RwX3BhcmFtaGRy
ICpwaGRyLCBwYXJhbXM7CisKKwlzdHJ1Y3QgbWJ1ZiAqbWF0LCAqbV90bXAsICpvcF9lcnIsICpv
cF9lcnJfbGFzdDsKKwlpbnQgYXQsIGxpbWl0LCBwYWRfbmVlZGVkOworCXVpbnQxNl90IHB0eXBl
LCBwbGVuLCBwYWRkZWRfc2l6ZTsKKworCSphYm9ydF9wcm9jZXNzaW5nID0gMDsKKwlpZiAoY29v
a2llX2ZvdW5kICE9IE5VTEwpIHsKKwkJKmNvb2tpZV9mb3VuZCA9IDA7CisJfQorCW1hdCA9IGlu
X2luaXRwa3Q7CisJbGltaXQgPSBudG9ocyhjcC0+Y2h1bmtfbGVuZ3RoKSAtIHNpemVvZihzdHJ1
Y3Qgc2N0cF9pbml0X2NodW5rKTsKKwlhdCA9IHBhcmFtX29mZnNldDsKKwlvcF9lcnIgPSBOVUxM
OworCW9wX2Vycl9sYXN0ID0gTlVMTDsKKwlwYWRfbmVlZGVkID0gMDsKKwlTQ1RQREJHKFNDVFBf
REVCVUdfT1VUUFVUMSwgIkNoZWNrIGZvciB1bnJlY29nbml6ZWQgcGFyYW0nc1xuIik7CisJcGhk
ciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obWF0LCBhdCwgJnBhcmFtcywgc2l6ZW9mKHBhcmFtcykp
OworCXdoaWxlICgocGhkciAhPSBOVUxMKSAmJiAoKHNpemVfdClsaW1pdCA+PSBzaXplb2Yoc3Ry
dWN0IHNjdHBfcGFyYW1oZHIpKSkgeworCQlwdHlwZSA9IG50b2hzKHBoZHItPnBhcmFtX3R5cGUp
OworCQlwbGVuID0gbnRvaHMocGhkci0+cGFyYW1fbGVuZ3RoKTsKKwkJaWYgKChwbGVuID4gbGlt
aXQpIHx8IChwbGVuIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSkpIHsKKwkJCS8qIHdh
Y2tlZCBwYXJhbWV0ZXIgKi8KKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiSW52YWxp
ZCBzaXplIC0gZXJyb3IgJWRcbiIsIHBsZW4pOworCQkJZ290byBpbnZhbGlkX3NpemU7CisJCX0K
KwkJbGltaXQgLT0gU0NUUF9TSVpFMzIocGxlbik7CisJCS8qLQorCQkgKiBBbGwgcGFyYW1ldGVy
cyBmb3IgYWxsIGNodW5rcyB0aGF0IHdlIGtub3cvdW5kZXJzdGFuZCBhcmUKKwkJICogbGlzdGVk
IGhlcmUuIFdlIHByb2Nlc3MgdGhlbSBvdGhlciBwbGFjZXMgYW5kIG1ha2UKKwkJICogYXBwcm9w
cmlhdGUgc3RvcCBhY3Rpb25zIHBlciB0aGUgdXBwZXIgYml0cy4gSG93ZXZlciB0aGlzCisJCSAq
IGlzIHRoZSBnZW5lcmljIHJvdXRpbmUgcHJvY2Vzc29yJ3MgY2FuIGNhbGwgdG8gZ2V0IGJhY2sK
KwkJICogYW4gb3BlcnIuLiB0byBlaXRoZXIgaW5jb3Jwb3JhdGUgKGluaXQtYWNrKSBvciBzZW5k
LgorCQkgKi8KKwkJcGFkZGVkX3NpemUgPSBTQ1RQX1NJWkUzMihwbGVuKTsKKwkJc3dpdGNoIChw
dHlwZSkgeworCQkJLyogUGFyYW0ncyB3aXRoIHZhcmlhYmxlIHNpemUgKi8KKwkJY2FzZSBTQ1RQ
X0hFQVJUQkVBVF9JTkZPOgorCQljYXNlIFNDVFBfVU5SRUNPR19QQVJBTToKKwkJY2FzZSBTQ1RQ
X0VSUk9SX0NBVVNFX0lORDoKKwkJCS8qIG9rIHNraXAgZndkICovCisJCQlhdCArPSBwYWRkZWRf
c2l6ZTsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfU1RBVEVfQ09PS0lFOgorCQkJaWYgKGNvb2tp
ZV9mb3VuZCAhPSBOVUxMKSB7CisJCQkJKmNvb2tpZV9mb3VuZCA9IDE7CisJCQl9CisJCQlhdCAr
PSBwYWRkZWRfc2l6ZTsKKwkJCWJyZWFrOworCQkJLyogUGFyYW0ncyB3aXRoIHZhcmlhYmxlIHNp
emUgd2l0aGluIGEgcmFuZ2UgKi8KKwkJY2FzZSBTQ1RQX0NIVU5LX0xJU1Q6CisJCWNhc2UgU0NU
UF9TVVBQT1JURURfQ0hVTktfRVhUOgorCQkJaWYgKHBhZGRlZF9zaXplID4gKHNpemVvZihzdHJ1
Y3Qgc2N0cF9zdXBwb3J0ZWRfY2h1bmtfdHlwZXNfcGFyYW0pICsgKHNpemVvZih1aW50OF90KSAq
IFNDVFBfTUFYX1NVUFBPUlRFRF9FWFQpKSkgeworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQ
VVQxLCAiSW52YWxpZCBzaXplIC0gZXJyb3IgY2hrbGlzdCAlZFxuIiwgcGxlbik7CisJCQkJZ290
byBpbnZhbGlkX3NpemU7CisJCQl9CisJCQlhdCArPSBwYWRkZWRfc2l6ZTsKKwkJCWJyZWFrOwor
CQljYXNlIFNDVFBfU1VQUE9SVEVEX0FERFJUWVBFOgorCQkJaWYgKHBhZGRlZF9zaXplID4gU0NU
UF9NQVhfQUREUl9QQVJBTVNfU0laRSkgeworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQx
LCAiSW52YWxpZCBzaXplIC0gZXJyb3Igc3VwYWRkcnR5cGUgJWRcbiIsIHBsZW4pOworCQkJCWdv
dG8gaW52YWxpZF9zaXplOworCQkJfQorCQkJYXQgKz0gcGFkZGVkX3NpemU7CisJCQlicmVhazsK
KwkJY2FzZSBTQ1RQX1JBTkRPTToKKwkJCWlmIChwYWRkZWRfc2l6ZSA+IChzaXplb2Yoc3RydWN0
IHNjdHBfYXV0aF9yYW5kb20pICsgU0NUUF9SQU5ET01fTUFYX1NJWkUpKSB7CisJCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX09VVFBVVDEsICJJbnZhbGlkIHNpemUgLSBlcnJvciByYW5kb20gJWRcbiIs
IHBsZW4pOworCQkJCWdvdG8gaW52YWxpZF9zaXplOworCQkJfQorCQkJYXQgKz0gcGFkZGVkX3Np
emU7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX1NFVF9QUklNX0FERFI6CisJCWNhc2UgU0NUUF9E
RUxfSVBfQUREUkVTUzoKKwkJY2FzZSBTQ1RQX0FERF9JUF9BRERSRVNTOgorCQkJaWYgKChwYWRk
ZWRfc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2FkZHJ2NF9wYXJhbSkpICYmCisJ
CQkgICAgKHBhZGRlZF9zaXplICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkcl9wYXJh
bSkpKSB7CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICJJbnZhbGlkIHNpemUgLSBl
cnJvciBzZXRwcmltICVkXG4iLCBwbGVuKTsKKwkJCQlnb3RvIGludmFsaWRfc2l6ZTsKKwkJCX0K
KwkJCWF0ICs9IHBhZGRlZF9zaXplOworCQkJYnJlYWs7CisJCQkvKiBQYXJhbSdzIHdpdGggYSBm
aXhlZCBzaXplICovCisJCWNhc2UgU0NUUF9JUFY0X0FERFJFU1M6CisJCQlpZiAocGFkZGVkX3Np
emUgIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtKSkgeworCQkJCVNDVFBEQkco
U0NUUF9ERUJVR19PVVRQVVQxLCAiSW52YWxpZCBzaXplIC0gZXJyb3IgaXB2NCBhZGRyICVkXG4i
LCBwbGVuKTsKKwkJCQlnb3RvIGludmFsaWRfc2l6ZTsKKwkJCX0KKwkJCWF0ICs9IHBhZGRlZF9z
aXplOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9JUFY2X0FERFJFU1M6CisJCQlpZiAocGFkZGVk
X3NpemUgIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtKSkgeworCQkJCVNDVFBE
QkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiSW52YWxpZCBzaXplIC0gZXJyb3IgaXB2NiBhZGRyICVk
XG4iLCBwbGVuKTsKKwkJCQlnb3RvIGludmFsaWRfc2l6ZTsKKwkJCX0KKwkJCWF0ICs9IHBhZGRl
ZF9zaXplOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9DT09LSUVfUFJFU0VSVkU6CisJCQlpZiAo
cGFkZGVkX3NpemUgIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Nvb2tpZV9wZXJzZXJ2ZV9wYXJhbSkp
IHsKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIkludmFsaWQgc2l6ZSAtIGVycm9y
IGNvb2tpZS1wcmVzZXJ2ZSAlZFxuIiwgcGxlbik7CisJCQkJZ290byBpbnZhbGlkX3NpemU7CisJ
CQl9CisJCQlhdCArPSBwYWRkZWRfc2l6ZTsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfSEFTX05B
VF9TVVBQT1JUOgorCQkJKm5hdF9mcmllbmRseSA9IDE7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8K
KwkJY2FzZSBTQ1RQX1BSU0NUUF9TVVBQT1JURUQ6CisJCQlpZiAocGFkZGVkX3NpemUgIT0gc2l6
ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSkgeworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQ
VVQxLCAiSW52YWxpZCBzaXplIC0gZXJyb3IgcHJzY3RwL25hdCBzdXBwb3J0ICVkXG4iLCBwbGVu
KTsKKwkJCQlnb3RvIGludmFsaWRfc2l6ZTsKKwkJCX0KKwkJCWF0ICs9IHBhZGRlZF9zaXplOwor
CQkJYnJlYWs7CisJCWNhc2UgU0NUUF9FQ05fQ0FQQUJMRToKKwkJCWlmIChwYWRkZWRfc2l6ZSAh
PSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSB7CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVH
X09VVFBVVDEsICJJbnZhbGlkIHNpemUgLSBlcnJvciBlY24gJWRcbiIsIHBsZW4pOworCQkJCWdv
dG8gaW52YWxpZF9zaXplOworCQkJfQorCQkJYXQgKz0gcGFkZGVkX3NpemU7CisJCQlicmVhazsK
KwkJY2FzZSBTQ1RQX1VMUF9BREFQVEFUSU9OOgorCQkJaWYgKHBhZGRlZF9zaXplICE9IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2xheWVyX2luZGljYXRpb24pKSB7CisJCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX09VVFBVVDEsICJJbnZhbGlkIHNpemUgLSBlcnJvciBhZGFwYXRhdGlvbiAl
ZFxuIiwgcGxlbik7CisJCQkJZ290byBpbnZhbGlkX3NpemU7CisJCQl9CisJCQlhdCArPSBwYWRk
ZWRfc2l6ZTsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfU1VDQ0VTU19SRVBPUlQ6CisJCQlpZiAo
cGFkZGVkX3NpemUgIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkcikpIHsKKwkJ
CQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIkludmFsaWQgc2l6ZSAtIGVycm9yIHN1Y2Nl
c3MgJWRcbiIsIHBsZW4pOworCQkJCWdvdG8gaW52YWxpZF9zaXplOworCQkJfQorCQkJYXQgKz0g
cGFkZGVkX3NpemU7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0hPU1ROQU1FX0FERFJFU1M6CisJ
CXsKKwkJCS8qIEhvc3RuYW1lIHBhcmFtZXRlcnMgYXJlIGRlcHJlY2F0ZWQuICovCisJCQlzdHJ1
Y3Qgc2N0cF9nZW5fZXJyb3JfY2F1c2UgKmNhdXNlOworCQkJaW50IGxfbGVuOworCisJCQlTQ1RQ
REJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIkNhbid0IGhhbmRsZSBob3N0bmFtZSBhZGRyZXNzZXMu
LiBhYm9ydCBwcm9jZXNzaW5nXG4iKTsKKwkJCSphYm9ydF9wcm9jZXNzaW5nID0gMTsKKwkJCXNj
dHBfbV9mcmVlbShvcF9lcnIpOworCQkJb3BfZXJyID0gTlVMTDsKKwkJCW9wX2Vycl9sYXN0ID0g
TlVMTDsKKyNpZmRlZiBJTkVUNgorCQkJbF9sZW4gPSBTQ1RQX01JTl9PVkVSSEVBRDsKKyNlbHNl
CisJCQlsX2xlbiA9IFNDVFBfTUlOX1Y0X09WRVJIRUFEOworI2VuZGlmCisJCQlsX2xlbiArPSBz
aXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpOworCQkJbF9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBz
Y3RwX2dlbl9lcnJvcl9jYXVzZSk7CisJCQlvcF9lcnIgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2co
bF9sZW4sIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwkJCWlmIChvcF9lcnIgIT0gTlVMTCkg
eworCQkJCS8qCisJCQkJICogUHJlLXJlc2VydmUgc3BhY2UgZm9yIElQLCBTQ1RQLCBhbmQKKwkJ
CQkgKiBjaHVuayBoZWFkZXIuCisJCQkJICovCisjaWZkZWYgSU5FVDYKKwkJCQlTQ1RQX0JVRl9S
RVNWX1VGKG9wX2Vyciwgc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSk7CisjZWxzZQorCQkJCVNDVFBf
QlVGX1JFU1ZfVUYob3BfZXJyLCBzaXplb2Yoc3RydWN0IGlwKSk7CisjZW5kaWYKKwkJCQlTQ1RQ
X0JVRl9SRVNWX1VGKG9wX2Vyciwgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSk7CisJCQkJU0NUUF9C
VUZfUkVTVl9VRihvcF9lcnIsIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikpOworCQkJCVND
VFBfQlVGX0xFTihvcF9lcnIpID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2dlbl9lcnJvcl9jYXVzZSk7
CisJCQkJY2F1c2UgPSBtdG9kKG9wX2Vyciwgc3RydWN0IHNjdHBfZ2VuX2Vycm9yX2NhdXNlICop
OworCQkJCWNhdXNlLT5jb2RlID0gaHRvbnMoU0NUUF9DQVVTRV9VTlJFU09MVkFCTEVfQUREUik7
CisJCQkJY2F1c2UtPmxlbmd0aCA9IGh0b25zKCh1aW50MTZfdCkoc2l6ZW9mKHN0cnVjdCBzY3Rw
X2dlbl9lcnJvcl9jYXVzZSkgKyBwbGVuKSk7CisJCQkJU0NUUF9CVUZfTkVYVChvcF9lcnIpID0g
U0NUUF9NX0NPUFlNKG1hdCwgYXQsIHBsZW4sIE1fTk9XQUlUKTsKKwkJCQlpZiAoU0NUUF9CVUZf
TkVYVChvcF9lcnIpID09IE5VTEwpIHsKKwkJCQkJc2N0cF9tX2ZyZWVtKG9wX2Vycik7CisJCQkJ
CW9wX2VyciA9IE5VTEw7CisJCQkJCW9wX2Vycl9sYXN0ID0gTlVMTDsKKwkJCQl9CisJCQl9CisJ
CQlyZXR1cm4gKG9wX2Vycik7CisJCX0KKwkJZGVmYXVsdDoKKwkJCS8qCisJCQkgKiB3ZSBkbyBu
b3QgcmVjb2duaXplIHRoZSBwYXJhbWV0ZXIgZmlndXJlIG91dCB3aGF0CisJCQkgKiB3ZSBkby4K
KwkJCSAqLworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICJIaXQgZGVmYXVsdCBwYXJh
bSAleFxuIiwgcHR5cGUpOworCQkJaWYgKChwdHlwZSAmIDB4NDAwMCkgPT0gMHg0MDAwKSB7CisJ
CQkJLyogUmVwb3J0IGJpdCBpcyBzZXQ/PyAqLworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQ
VVQxLCAicmVwb3J0IG9wIGVyclxuIik7CisJCQkJaWYgKG9wX2VyciA9PSBOVUxMKSB7CisJCQkJ
CWludCBsX2xlbjsKKwkJCQkJLyogT2sgbmVlZCB0byB0cnkgdG8gZ2V0IGFuIG1idWYgKi8KKyNp
ZmRlZiBJTkVUNgorCQkJCQlsX2xlbiA9IFNDVFBfTUlOX09WRVJIRUFEOworI2Vsc2UKKwkJCQkJ
bF9sZW4gPSBTQ1RQX01JTl9WNF9PVkVSSEVBRDsKKyNlbmRpZgorCQkJCQlsX2xlbiArPSBzaXpl
b2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpOworCQkJCQlsX2xlbiArPSBzaXplb2Yoc3RydWN0IHNj
dHBfcGFyYW1oZHIpOworCQkJCQlvcF9lcnIgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2cobF9sZW4s
IDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwkJCQkJaWYgKG9wX2VycikgeworCQkJCQkJU0NU
UF9CVUZfTEVOKG9wX2VycikgPSAwOworI2lmZGVmIElORVQ2CisJCQkJCQlTQ1RQX0JVRl9SRVNW
X1VGKG9wX2Vyciwgc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSk7CisjZWxzZQorCQkJCQkJU0NUUF9C
VUZfUkVTVl9VRihvcF9lcnIsIHNpemVvZihzdHJ1Y3QgaXApKTsKKyNlbmRpZgorCQkJCQkJU0NU
UF9CVUZfUkVTVl9VRihvcF9lcnIsIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpOworCQkJCQkJU0NU
UF9CVUZfUkVTVl9VRihvcF9lcnIsIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikpOworCQkJ
CQkJb3BfZXJyX2xhc3QgPSBvcF9lcnI7CisJCQkJCX0KKwkJCQl9CisJCQkJaWYgKG9wX2VyciAh
PSBOVUxMKSB7CisJCQkJCS8qIElmIHdlIGhhdmUgc3BhY2UgKi8KKwkJCQkJc3RydWN0IHNjdHBf
cGFyYW1oZHIgKnBhcmFtOworCisJCQkJCWlmIChwYWRfbmVlZGVkID4gMCkgeworCQkJCQkJb3Bf
ZXJyX2xhc3QgPSBzY3RwX2FkZF9wYWRfdG9tYnVmKG9wX2Vycl9sYXN0LCBwYWRfbmVlZGVkKTsK
KwkJCQkJfQorCQkJCQlpZiAob3BfZXJyX2xhc3QgPT0gTlVMTCkgeworCQkJCQkJc2N0cF9tX2Zy
ZWVtKG9wX2Vycik7CisJCQkJCQlvcF9lcnIgPSBOVUxMOworCQkJCQkJb3BfZXJyX2xhc3QgPSBO
VUxMOworCQkJCQkJZ290byBtb3JlX3Byb2Nlc3Npbmc7CisJCQkJCX0KKwkJCQkJaWYgKE1fVFJB
SUxJTkdTUEFDRShvcF9lcnJfbGFzdCkgPCAoaW50KXNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhk
cikpIHsKKwkJCQkJCW1fdG1wID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qg
c2N0cF9wYXJhbWhkciksIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwkJCQkJCWlmIChtX3Rt
cCA9PSBOVUxMKSB7CisJCQkJCQkJc2N0cF9tX2ZyZWVtKG9wX2Vycik7CisJCQkJCQkJb3BfZXJy
ID0gTlVMTDsKKwkJCQkJCQlvcF9lcnJfbGFzdCA9IE5VTEw7CisJCQkJCQkJZ290byBtb3JlX3By
b2Nlc3Npbmc7CisJCQkJCQl9CisJCQkJCQlTQ1RQX0JVRl9MRU4obV90bXApID0gMDsKKwkJCQkJ
CVNDVFBfQlVGX05FWFQobV90bXApID0gTlVMTDsKKwkJCQkJCVNDVFBfQlVGX05FWFQob3BfZXJy
X2xhc3QpID0gbV90bXA7CisJCQkJCQlvcF9lcnJfbGFzdCA9IG1fdG1wOworCQkJCQl9CisJCQkJ
CXBhcmFtID0gKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopKG10b2Qob3BfZXJyX2xhc3QsIGNhZGRy
X3QpICsgU0NUUF9CVUZfTEVOKG9wX2Vycl9sYXN0KSk7CisJCQkJCXBhcmFtLT5wYXJhbV90eXBl
ID0gaHRvbnMoU0NUUF9VTlJFQ09HX1BBUkFNKTsKKwkJCQkJcGFyYW0tPnBhcmFtX2xlbmd0aCA9
IGh0b25zKCh1aW50MTZfdClzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpICsgcGxlbik7CisJ
CQkJCVNDVFBfQlVGX0xFTihvcF9lcnJfbGFzdCkgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFt
aGRyKTsKKwkJCQkJU0NUUF9CVUZfTkVYVChvcF9lcnJfbGFzdCkgPSBTQ1RQX01fQ09QWU0obWF0
LCBhdCwgcGxlbiwgTV9OT1dBSVQpOworCQkJCQlpZiAoU0NUUF9CVUZfTkVYVChvcF9lcnJfbGFz
dCkgPT0gTlVMTCkgeworCQkJCQkJc2N0cF9tX2ZyZWVtKG9wX2Vycik7CisJCQkJCQlvcF9lcnIg
PSBOVUxMOworCQkJCQkJb3BfZXJyX2xhc3QgPSBOVUxMOworCQkJCQkJZ290byBtb3JlX3Byb2Nl
c3Npbmc7CisJCQkJCX0gZWxzZSB7CisJCQkJCQl3aGlsZSAoU0NUUF9CVUZfTkVYVChvcF9lcnJf
bGFzdCkgIT0gTlVMTCkgeworCQkJCQkJCW9wX2Vycl9sYXN0ID0gU0NUUF9CVUZfTkVYVChvcF9l
cnJfbGFzdCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJaWYgKHBsZW4gJSA0ICE9IDApIHsKKwkJ
CQkJCXBhZF9uZWVkZWQgPSA0IC0gKHBsZW4gJSA0KTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXBh
ZF9uZWVkZWQgPSAwOworCQkJCQl9CisJCQkJfQorCQkJfQorCQltb3JlX3Byb2Nlc3Npbmc6CisJ
CQlpZiAoKHB0eXBlICYgMHg4MDAwKSA9PSAweDAwMDApIHsKKwkJCQlTQ1RQREJHKFNDVFBfREVC
VUdfT1VUUFVUMSwgInN0b3AgcHJvY1xuIik7CisJCQkJcmV0dXJuIChvcF9lcnIpOworCQkJfSBl
bHNlIHsKKwkJCQkvKiBza2lwIHRoaXMgY2h1bmsgYW5kIGNvbnRpbnVlIHByb2Nlc3NpbmcgKi8K
KwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIm1vdmUgb25cbiIpOworCQkJCWF0ICs9
IFNDVFBfU0laRTMyKHBsZW4pOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJcGhkciA9IHNjdHBf
Z2V0X25leHRfcGFyYW0obWF0LCBhdCwgJnBhcmFtcywgc2l6ZW9mKHBhcmFtcykpOworCX0KKwly
ZXR1cm4gKG9wX2Vycik7CisgaW52YWxpZF9zaXplOgorCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQ
VVQxLCAiYWJvcnQgZmxhZyBzZXRcbiIpOworCSphYm9ydF9wcm9jZXNzaW5nID0gMTsKKwlzY3Rw
X21fZnJlZW0ob3BfZXJyKTsKKwlvcF9lcnIgPSBOVUxMOworCW9wX2Vycl9sYXN0ID0gTlVMTDsK
KwlpZiAocGhkciAhPSBOVUxMKSB7CisJCXN0cnVjdCBzY3RwX3BhcmFtaGRyICpwYXJhbTsKKwkJ
aW50IGxfbGVuOworI2lmZGVmIElORVQ2CisJCWxfbGVuID0gU0NUUF9NSU5fT1ZFUkhFQUQ7Cisj
ZWxzZQorCQlsX2xlbiA9IFNDVFBfTUlOX1Y0X09WRVJIRUFEOworI2VuZGlmCisJCWxfbGVuICs9
IHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7CisJCWxfbGVuICs9ICgyICogc2l6ZW9mKHN0
cnVjdCBzY3RwX3BhcmFtaGRyKSk7CisJCW9wX2VyciA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhs
X2xlbiwgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOworCQlpZiAob3BfZXJyKSB7CisJCQlTQ1RQ
X0JVRl9MRU4ob3BfZXJyKSA9IDA7CisjaWZkZWYgSU5FVDYKKwkJCVNDVFBfQlVGX1JFU1ZfVUYo
b3BfZXJyLCBzaXplb2Yoc3RydWN0IGlwNl9oZHIpKTsKKyNlbHNlCisJCQlTQ1RQX0JVRl9SRVNW
X1VGKG9wX2Vyciwgc2l6ZW9mKHN0cnVjdCBpcCkpOworI2VuZGlmCisJCQlTQ1RQX0JVRl9SRVNW
X1VGKG9wX2Vyciwgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSk7CisJCQlTQ1RQX0JVRl9SRVNWX1VG
KG9wX2Vyciwgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSk7CisJCQlTQ1RQX0JVRl9MRU4o
b3BfZXJyKSA9IDIgKiBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpOworCQkJcGFyYW0gPSBt
dG9kKG9wX2Vyciwgc3RydWN0IHNjdHBfcGFyYW1oZHIgKik7CisJCQlwYXJhbS0+cGFyYW1fdHlw
ZSA9IGh0b25zKFNDVFBfQ0FVU0VfUFJPVE9DT0xfVklPTEFUSU9OKTsKKwkJCXBhcmFtLT5wYXJh
bV9sZW5ndGggPSBodG9ucygyICogc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSk7CisJCQlw
YXJhbSsrOworCQkJcGFyYW0tPnBhcmFtX3R5cGUgPSBodG9ucyhwdHlwZSk7CisJCQlwYXJhbS0+
cGFyYW1fbGVuZ3RoID0gaHRvbnMocGxlbik7CisJCX0KKwl9CisJcmV0dXJuIChvcF9lcnIpOwor
fQorCisvKgorICogR2l2ZW4gYSBJTklUIGNodW5rLCBsb29rIHRocm91Z2ggdGhlIHBhcmFtZXRl
cnMgdG8gdmVyaWZ5IHRoYXQgdGhlcmUKKyAqIGFyZSBubyBuZXcgYWRkcmVzc2VzLgorICogUmV0
dXJuIHRydWUsIGlmIHRoZXJlIGlzIGEgbmV3IGFkZHJlc3Mgb3IgdGhlcmUgaXMgYSBwcm9ibGVt
IHBhcnNpbmcKKyAgIHRoZSBwYXJhbWV0ZXJzLiBQcm92aWRlIGFuIG9wdGlvbmFsIGVycm9yIGNh
dXNlIHVzZWQgd2hlbiBzZW5kaW5nIGFuIEFCT1JULgorICogUmV0dXJuIGZhbHNlLCBpZiB0aGVy
ZSBhcmUgbm8gbmV3IGFkZHJlc3NlcyBhbmQgdGhlcmUgaXMgbm8gcHJvYmxlbSBpbgorICAgcGFy
YW1ldGVyIHByb2Nlc3NpbmcuCisgKi8KK3N0YXRpYyBib29sCitzY3RwX2FyZV90aGVyZV9uZXdf
YWRkcmVzc2VzKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorICAgIHN0cnVjdCBtYnVm
ICppbl9pbml0cGt0LCBpbnQgb2Zmc2V0LCBpbnQgbGltaXQsIHN0cnVjdCBzb2NrYWRkciAqc3Jj
LAorICAgIHN0cnVjdCBtYnVmICoqb3BfZXJyKQoreworCXN0cnVjdCBzb2NrYWRkciAqc2FfdG91
c2U7CisJc3RydWN0IHNvY2thZGRyICpzYTsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGhkciwg
cGFyYW1zOworCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKyNpZmRlZiBJTkVUCisJc3RydWN0IHNv
Y2thZGRyX2luIHNpbjQsICpzYTQ7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCXN0cnVjdCBzb2Nr
YWRkcl9pbjYgc2luNiwgKnNhNjsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KwlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2FjOworI2VuZGlmCisJdWludDE2X3QgcHR5cGUsIHBs
ZW47CisJYm9vbCBmbmQsIGNoZWNrX3NyYzsKKworCSpvcF9lcnIgPSBOVUxMOworI2lmZGVmIElO
RVQKKwltZW1zZXQoJnNpbjQsIDAsIHNpemVvZihzaW40KSk7CisJc2luNC5zaW5fZmFtaWx5ID0g
QUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwlzaW40LnNpbl9sZW4gPSBzaXplb2Yoc2lu
NCk7CisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJbWVtc2V0KCZzaW42LCAwLCBzaXpl
b2Yoc2luNikpOworCXNpbjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyNpZmRlZiBIQVZFX1NJ
TjZfTEVOCisJc2luNi5zaW42X2xlbiA9IHNpemVvZihzaW42KTsKKyNlbmRpZgorI2VuZGlmCisJ
LyogRmlyc3Qgd2hhdCBhYm91dCB0aGUgc3JjIGFkZHJlc3Mgb2YgdGhlIHBrdCA/ICovCisJY2hl
Y2tfc3JjID0gZmFsc2U7CisJc3dpdGNoIChzcmMtPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQK
KwljYXNlIEFGX0lORVQ6CisJCWlmIChhc29jLT5zY29wZS5pcHY0X2FkZHJfbGVnYWwpIHsKKwkJ
CWNoZWNrX3NyYyA9IHRydWU7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgor
CWNhc2UgQUZfSU5FVDY6CisJCWlmIChhc29jLT5zY29wZS5pcHY2X2FkZHJfbGVnYWwpIHsKKwkJ
CWNoZWNrX3NyYyA9IHRydWU7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisJY2FzZSBBRl9DT05OOgorCQlpZiAoYXNvYy0+c2NvcGUuY29ubl9hZGRy
X2xlZ2FsKSB7CisJCQljaGVja19zcmMgPSB0cnVlOworCQl9CisJCWJyZWFrOworI2VuZGlmCisJ
ZGVmYXVsdDoKKwkJLyogVFNOSCAqLworCQlicmVhazsKKwl9CisJaWYgKGNoZWNrX3NyYykgewor
CQlmbmQgPSBmYWxzZTsKKwkJVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25l
eHQpIHsKKwkJCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSZuZXQtPnJvLl9sX2FkZHI7CisJCQlp
ZiAoc2EtPnNhX2ZhbWlseSA9PSBzcmMtPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCQlp
ZiAoc2EtPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAq
c3JjNDsKKworCQkJCQlzYTQgPSAoc3RydWN0IHNvY2thZGRyX2luICopc2E7CisJCQkJCXNyYzQg
PSAoc3RydWN0IHNvY2thZGRyX2luICopc3JjOworCQkJCQlpZiAoc2E0LT5zaW5fYWRkci5zX2Fk
ZHIgPT0gc3JjNC0+c2luX2FkZHIuc19hZGRyKSB7CisJCQkJCQlmbmQgPSB0cnVlOworCQkJCQkJ
YnJlYWs7CisJCQkJCX0KKwkJCQl9CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJCWlmIChzYS0+
c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNyYzY7
CisKKwkJCQkJc2E2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYTsKKwkJCQkJc3JjNiA9IChz
dHJ1Y3Qgc29ja2FkZHJfaW42ICopc3JjOworCQkJCQlpZiAoU0NUUDZfQVJFX0FERFJfRVFVQUwo
c2E2LCBzcmM2KSkgeworCQkJCQkJZm5kID0gdHJ1ZTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJ
CQkJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCWlmIChzYS0+c2Ff
ZmFtaWx5ID09IEFGX0NPTk4pIHsKKwkJCQkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNyY2M7CisK
KwkJCQkJc2FjID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopc2E7CisJCQkJCXNyY2MgPSAoc3Ry
dWN0IHNvY2thZGRyX2Nvbm4gKilzcmM7CisJCQkJCWlmIChzYWMtPnNjb25uX2FkZHIgPT0gc3Jj
Yy0+c2Nvbm5fYWRkcikgeworCQkJCQkJZm5kID0gdHJ1ZTsKKwkJCQkJCWJyZWFrOworCQkJCQl9
CisJCQkJfQorI2VuZGlmCisJCQl9CisJCX0KKwkJaWYgKCFmbmQpIHsKKwkJCS8qCisJCQkgKiBJ
ZiBzZW5kaW5nIGFuIEFCT1JUIGluIGNhc2Ugb2YgYW4gYWRkaXRpb25hbCBhZGRyZXNzLAorCQkJ
ICogZG9uJ3QgdXNlIHRoZSBuZXcgYWRkcmVzcyBlcnJvciBjYXVzZS4KKwkJCSAqIFRoaXMgbG9v
a3Mgbm8gZGlmZmVyZW50IHRoYW4gaWYgbm8gbGlzdGVuZXIgd2FzCisJCQkgKiBwcmVzZW50Lgor
CQkJICovCisJCQkqb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfZGlhZ19pbmZvX2NvZGUpLCAiQWRkcmVzcyBhZGRlZCIpOworCQkJcmV0dXJuICh0cnVl
KTsKKwkJfQorCX0KKwkvKiBPayBzbyBmYXIgbGV0cyBtdW5nZSB0aHJvdWdoIHRoZSByZXN0IG9m
IHRoZSBwYWNrZXQgKi8KKwlvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfY2h1bmsp
OworCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKGluX2luaXRwa3QsIG9mZnNldCwgJnBhcmFt
cywgc2l6ZW9mKHBhcmFtcykpOworCXdoaWxlIChwaGRyKSB7CisJCXNhX3RvdXNlID0gTlVMTDsK
KwkJcHR5cGUgPSBudG9ocyhwaGRyLT5wYXJhbV90eXBlKTsKKwkJcGxlbiA9IG50b2hzKHBoZHIt
PnBhcmFtX2xlbmd0aCk7CisJCWlmIChvZmZzZXQgKyBwbGVuID4gbGltaXQpIHsKKwkJCSpvcF9l
cnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfUFJPVE9DT0xfVklPTEFUSU9OLCAi
UGFydGlhbCBwYXJhbWV0ZXIiKTsKKwkJCXJldHVybiAodHJ1ZSk7CisJCX0KKwkJaWYgKHBsZW4g
PCBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSB7CisJCQkqb3BfZXJyID0gc2N0cF9nZW5l
cmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RPQ09MX1ZJT0xBVElPTiwgIlBhcmFtZXRlciBsZW5n
dGggdG9vIHNtYWxsIik7CisJCQlyZXR1cm4gKHRydWUpOworCQl9CisJCXN3aXRjaCAocHR5cGUp
IHsKKyNpZmRlZiBJTkVUCisJCWNhc2UgU0NUUF9JUFY0X0FERFJFU1M6CisJCXsKKwkJCXN0cnVj
dCBzY3RwX2lwdjRhZGRyX3BhcmFtICpwNCwgcDRfYnVmOworCisJCQlpZiAocGxlbiAhPSBzaXpl
b2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0pKSB7CisJCQkJKm9wX2VyciA9IHNjdHBfZ2Vu
ZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9QUk9UT0NPTF9WSU9MQVRJT04sICJQYXJhbWV0ZXIgbGVu
Z3RoIGlsbGVnYWwiKTsKKwkJCQlyZXR1cm4gKHRydWUpOworCQkJfQorCQkJcGhkciA9IHNjdHBf
Z2V0X25leHRfcGFyYW0oaW5faW5pdHBrdCwgb2Zmc2V0LAorCQkJICAgIChzdHJ1Y3Qgc2N0cF9w
YXJhbWhkciAqKSZwNF9idWYsIHNpemVvZihwNF9idWYpKTsKKwkJCWlmIChwaGRyID09IE5VTEwp
IHsKKwkJCQkqb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RPQ09M
X1ZJT0xBVElPTiwgIiIpOworCQkJCXJldHVybiAodHJ1ZSk7CisJCQl9CisJCQlpZiAoYXNvYy0+
c2NvcGUuaXB2NF9hZGRyX2xlZ2FsKSB7CisJCQkJcDQgPSAoc3RydWN0IHNjdHBfaXB2NGFkZHJf
cGFyYW0gKilwaGRyOworCQkJCXNpbjQuc2luX2FkZHIuc19hZGRyID0gcDQtPmFkZHI7CisJCQkJ
c2FfdG91c2UgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbjQ7CisJCQl9CisJCQlicmVhazsKKwkJ
fQorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJY2FzZSBTQ1RQX0lQVjZfQUREUkVTUzoKKwkJewor
CQkJc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKnA2LCBwNl9idWY7CisKKwkJCWlmIChwbGVu
ICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSkpIHsKKwkJCQkqb3BfZXJyID0g
c2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RPQ09MX1ZJT0xBVElPTiwgIlBhcmFt
ZXRlciBsZW5ndGggaWxsZWdhbCIpOworCQkJCXJldHVybiAodHJ1ZSk7CisJCQl9CisJCQlwaGRy
ID0gc2N0cF9nZXRfbmV4dF9wYXJhbShpbl9pbml0cGt0LCBvZmZzZXQsCisJCQkgICAgKHN0cnVj
dCBzY3RwX3BhcmFtaGRyICopJnA2X2J1Ziwgc2l6ZW9mKHA2X2J1ZikpOworCQkJaWYgKHBoZHIg
PT0gTlVMTCkgeworCQkJCSpvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0Vf
UFJPVE9DT0xfVklPTEFUSU9OLCAiIik7CisJCQkJcmV0dXJuICh0cnVlKTsKKwkJCX0KKwkJCWlm
IChhc29jLT5zY29wZS5pcHY2X2FkZHJfbGVnYWwpIHsKKwkJCQlwNiA9IChzdHJ1Y3Qgc2N0cF9p
cHY2YWRkcl9wYXJhbSAqKXBoZHI7CisJCQkJbWVtY3B5KChjYWRkcl90KSZzaW42LnNpbjZfYWRk
ciwgcDYtPmFkZHIsCisJCQkJICAgICAgIHNpemVvZihwNi0+YWRkcikpOworCQkJCXNhX3RvdXNl
ID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW42OworCQkJfQorCQkJYnJlYWs7CisJCX0KKyNlbmRp
ZgorCQlkZWZhdWx0OgorCQkJc2FfdG91c2UgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwkJaWYg
KHNhX3RvdXNlKSB7CisJCQkvKiBvaywgc2FfdG91c2UgcG9pbnRzIHRvIG9uZSB0byBjaGVjayAq
LworCQkJZm5kID0gZmFsc2U7CisJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNj
dHBfbmV4dCkgeworCQkJCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSZuZXQtPnJvLl9sX2FkZHI7
CisJCQkJaWYgKHNhLT5zYV9mYW1pbHkgIT0gc2FfdG91c2UtPnNhX2ZhbWlseSkgeworCQkJCQlj
b250aW51ZTsKKwkJCQl9CisjaWZkZWYgSU5FVAorCQkJCWlmIChzYS0+c2FfZmFtaWx5ID09IEFG
X0lORVQpIHsKKwkJCQkJc2E0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhOworCQkJCQlpZiAo
c2E0LT5zaW5fYWRkci5zX2FkZHIgPT0KKwkJCQkJICAgIHNpbjQuc2luX2FkZHIuc19hZGRyKSB7
CisJCQkJCQlmbmQgPSB0cnVlOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisjZW5kaWYK
KyNpZmRlZiBJTkVUNgorCQkJCWlmIChzYS0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCQkJ
CXNhNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2E7CisJCQkJCWlmIChTQ1RQNl9BUkVfQURE
Ul9FUVVBTCgKKwkJCQkJICAgIHNhNiwgJnNpbjYpKSB7CisJCQkJCQlmbmQgPSB0cnVlOworCQkJ
CQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisjZW5kaWYKKwkJCX0KKwkJCWlmICghZm5kKSB7CisJ
CQkJLyoKKwkJCQkgKiBJZiBzZW5kaW5nIGFuIEFCT1JUIGluIGNhc2Ugb2YgYW4gYWRkaXRpb25h
bAorCQkJCSAqIGFkZHJlc3MsIGRvbid0IHVzZSB0aGUgbmV3IGFkZHJlc3MgZXJyb3IKKwkJCQkg
KiBjYXVzZS4KKwkJCQkgKiBUaGlzIGxvb2tzIG5vIGRpZmZlcmVudCB0aGFuIGlmIG5vIGxpc3Rl
bmVyCisJCQkJICogd2FzIHByZXNlbnQuCisJCQkJICovCisJCQkJKm9wX2VyciA9IHNjdHBfZ2Vu
ZXJhdGVfY2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwgIkFkZHJl
c3MgYWRkZWQiKTsKKwkJCQlyZXR1cm4gKHRydWUpOworCQkJfQorCQl9CisJCW9mZnNldCArPSBT
Q1RQX1NJWkUzMihwbGVuKTsKKwkJaWYgKG9mZnNldCA+PSBsaW1pdCkgeworCQkJYnJlYWs7CisJ
CX0KKwkJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0oaW5faW5pdHBrdCwgb2Zmc2V0LCAmcGFy
YW1zLCBzaXplb2YocGFyYW1zKSk7CisJfQorCXJldHVybiAoZmFsc2UpOworfQorCisvKgorICog
R2l2ZW4gYSBNQlVGIGNoYWluIHRoYXQgd2FzIHNlbnQgaW50byB1cyBjb250YWluaW5nIGFuIElO
SVQuIEJ1aWxkIGEKKyAqIElOSVQtQUNLIHdpdGggQ09PS0lFIGFuZCBzZW5kIGJhY2suIFdlIGFz
c3VtZSB0aGF0IHRoZSBpbl9pbml0cGt0IGhhcyBkb25lCisgKiBhIHB1bGx1cCB0byBpbmNsdWRl
IElQdjYvNGhlYWRlciwgU0NUUCBoZWFkZXIgYW5kIGluaXRpYWwgcGFydCBvZiBJTklUCisgKiBt
ZXNzYWdlIChpLmUuIHRoZSBzdHJ1Y3Qgc2N0cF9pbml0X21zZykuCisgKi8KK3ZvaWQKK3NjdHBf
c2VuZF9pbml0aWF0ZV9hY2soc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNi
ICpzdGNiLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpzcmNfbmV0
LCBzdHJ1Y3QgbWJ1ZiAqaW5pdF9wa3QsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBpcGhs
ZW4sIGludCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAq
c3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IHNjdHBoZHIgKnNoLCBzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICppbml0X2NoaywKKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorICAgICAgICAgICAg
ICAgICAgICAgICB1aW50OF90IG1mbG93dHlwZSwgdWludDMyX3QgbWZsb3dpZCwKKyNlbmRpZgor
ICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2cmZfaWQsIHVpbnQxNl90IHBvcnQpCit7
CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJc3RydWN0IG1idWYgKm0sICptX3Rt
cCwgKm1fbGFzdCwgKm1fY29va2llLCAqb3BfZXJyOworCXN0cnVjdCBzY3RwX2luaXRfYWNrX2No
dW5rICppbml0YWNrOworCXN0cnVjdCBzY3RwX2FkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdGlvbiAq
YWxpOworCXN0cnVjdCBzY3RwX3N1cHBvcnRlZF9jaHVua190eXBlc19wYXJhbSAqcHJfc3VwcG9y
dGVkOworCXN0cnVjdCBzY3RwX3BhcmFtaGRyICpwaDsKKwl1bmlvbiBzY3RwX3NvY2tzdG9yZSAq
b3Zlcl9hZGRyOworCXN0cnVjdCBzY3RwX3Njb3Bpbmcgc2NwOworCXN0cnVjdCB0aW1ldmFsIG5v
dzsKKyNpZmRlZiBJTkVUCisJc3RydWN0IHNvY2thZGRyX2luICpkc3Q0ID0gKHN0cnVjdCBzb2Nr
YWRkcl9pbiAqKWRzdDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNyYzQgPSAoc3RydWN0IHNvY2th
ZGRyX2luICopc3JjOworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworI2VuZGlmCisjaWZkZWYg
SU5FVDYKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpkc3Q2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYg
Kilkc3Q7CisJc3RydWN0IHNvY2thZGRyX2luNiAqc3JjNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42
ICopc3JjOworCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisjZW5kaWYKKyNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCisJc3RydWN0IHNvY2thZGRyX2Nvbm4gKmRzdGNvbm4gPSAoc3RydWN0
IHNvY2thZGRyX2Nvbm4gKilkc3Q7CisJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNyY2Nvbm4gPSAo
c3RydWN0IHNvY2thZGRyX2Nvbm4gKilzcmM7CisJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25u
OworI2VuZGlmCisJc3RydWN0IHNvY2thZGRyICp0bzsKKwlzdHJ1Y3Qgc2N0cF9zdGF0ZV9jb29r
aWUgc3RjOworCXN0cnVjdCBzY3RwX25ldHMgKm5ldCA9IE5VTEw7CisJdWludDhfdCAqc2lnbmF0
dXJlID0gTlVMTDsKKwlpbnQgY250X2luaXRzX3RvID0gMDsKKwl1aW50MTZfdCBoaXNfbGltaXQs
IGlfd2FudDsKKwlpbnQgYWJvcnRfZmxhZzsKKwlpbnQgbmF0X2ZyaWVuZGx5ID0gMDsKKwlpbnQg
ZXJyb3I7CisJc3RydWN0IHNvY2tldCAqc287CisJdWludDE2X3QgbnVtX2V4dCwgY2h1bmtfbGVu
LCBwYWRkaW5nX2xlbiwgcGFyYW1ldGVyX2xlbjsKKworCWlmIChzdGNiKSB7CisJCWFzb2MgPSAm
c3RjYi0+YXNvYzsKKwl9IGVsc2UgeworCQlhc29jID0gTlVMTDsKKwl9CisJaWYgKChhc29jICE9
IE5VTEwpICYmCisJICAgIChTQ1RQX0dFVF9TVEFURShzdGNiKSAhPSBTQ1RQX1NUQVRFX0NPT0tJ
RV9XQUlUKSkgeworCQlpZiAoc2N0cF9hcmVfdGhlcmVfbmV3X2FkZHJlc3Nlcyhhc29jLCBpbml0
X3BrdCwgb2Zmc2V0LCBvZmZzZXQgKyBudG9ocyhpbml0X2Noay0+Y2guY2h1bmtfbGVuZ3RoKSwg
c3JjLCAmb3BfZXJyKSkgeworCQkJLyoKKwkJCSAqIG5ldyBhZGRyZXNzZXMsIG91dCBvZiBoZXJl
IGluIG5vbi1jb29raWUtd2FpdCBzdGF0ZXMKKwkJCSAqLworCQkJc2N0cF9zZW5kX2Fib3J0KGlu
aXRfcGt0LCBpcGhsZW4sIHNyYywgZHN0LCBzaCwgMCwgb3BfZXJyLAorI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkgICAgICAgICAgICAgICAg
bWZsb3d0eXBlLCBtZmxvd2lkLCBpbnAtPmZpYm51bSwKKyNlbmRpZgorCQkJICAgICAgICAgICAg
ICAgIHZyZl9pZCwgcG9ydCk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKHNyY19uZXQgIT0gTlVM
TCAmJiAoc3JjX25ldC0+cG9ydCAhPSBwb3J0KSkgeworCQkJLyoKKwkJCSAqIGNoYW5nZSBvZiBy
ZW1vdGUgZW5jYXBzdWxhdGlvbiBwb3J0LCBvdXQgb2YgaGVyZSBpbgorCQkJICogbm9uLWNvb2tp
ZS13YWl0IHN0YXRlcworCQkJICoKKwkJCSAqIFNlbmQgYW4gQUJPUlQsIHdpdGhvdXQgYW4gc3Bl
Y2lmaWMgZXJyb3IgY2F1c2UuCisJCQkgKiBUaGlzIGxvb2tzIG5vIGRpZmZlcmVudCB0aGFuIGlm
IG5vIGxpc3RlbmVyCisJCQkgKiB3YXMgcHJlc2VudC4KKwkJCSAqLworCQkJb3BfZXJyID0gc2N0
cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUpLAor
CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVtb3RlIGVuY2Fwc3VsYXRpb24gcG9y
dCBjaGFuZ2VkIik7CisJCQlzY3RwX3NlbmRfYWJvcnQoaW5pdF9wa3QsIGlwaGxlbiwgc3JjLCBk
c3QsIHNoLCAwLCBvcF9lcnIsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKKwkJCSAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGlu
cC0+ZmlibnVtLAorI2VuZGlmCisJCQkgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKKwkJ
CXJldHVybjsKKwkJfQorCX0KKwlhYm9ydF9mbGFnID0gMDsKKwlvcF9lcnIgPSBzY3RwX2FyZXRo
ZXJlX3VucmVjb2duaXplZF9wYXJhbWV0ZXJzKGluaXRfcGt0LAorCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0
cF9pbml0X2NodW5rKSksCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmYWJvcnRfZmxhZywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKWluaXRfY2hrLAorCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hdF9mcmllbmRseSwgTlVM
TCk7CisJaWYgKGFib3J0X2ZsYWcpIHsKKwlkb19hX2Fib3J0OgorCQlpZiAob3BfZXJyID09IE5V
TEwpIHsKKwkJCWNoYXIgbXNnW1NDVFBfRElBR19JTkZPX0xFTl07CisKKwkJCVNDVFBfU05QUklO
VEYobXNnLCBzaXplb2YobXNnKSwgIiVzOiVkIGF0ICVzIiwgX19GSUxFX18sIF9fTElORV9fLCBf
X2Z1bmNfXyk7CisJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9kaWFnX2luZm9fY29kZSksCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1zZyk7CisJCX0KKwkJc2N0cF9zZW5kX2Fib3J0KGluaXRfcGt0LCBpcGhsZW4sIHNyYywgZHN0
LCBzaCwKKwkJCQlpbml0X2Noay0+aW5pdC5pbml0aWF0ZV90YWcsIG9wX2VyciwKKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkgICAgICAgICAg
ICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBpbnAtPmZpYm51bSwKKyNlbmRpZgorCQkgICAgICAg
ICAgICAgICAgdnJmX2lkLCBwb3J0KTsKKwkJcmV0dXJuOworCX0KKwltID0gc2N0cF9nZXRfbWJ1
Zl9mb3JfbXNnKE1DTEJZVEVTLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJaWYgKG0gPT0g
TlVMTCkgeworCQkvKiBObyBtZW1vcnksIElOSVQgdGltZXIgd2lsbCByZS1hdHRlbXB0LiAqLwor
CQlzY3RwX21fZnJlZW0ob3BfZXJyKTsKKwkJcmV0dXJuOworCX0KKwljaHVua19sZW4gPSAodWlu
dDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfYWNrX2NodW5rKTsKKwlwYWRkaW5nX2xlbiA9
IDA7CisKKwkvKgorCSAqIFdlIG1pZ2h0IG5vdCBvdmVyd3JpdGUgdGhlIGlkZW50aWZpY2F0aW9u
W10gY29tcGxldGVseSBhbmQgb24KKwkgKiBzb21lIHBsYXRmb3JtcyB0aW1lX2VudGVyZWQgd2ls
bCBjb250YWluIHNvbWUgcGFkZGluZy4KKwkgKiBUaGVyZWZvcmUgemVybyBvdXQgdGhlIGNvb2tp
ZSB0byBhdm9pZCBwdXR0aW5nCisJICogdW5pbml0aWFsaXplZCBtZW1vcnkgb24gdGhlIHdpcmUu
CisJICovCisJbWVtc2V0KCZzdGMsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdGF0ZV9jb29raWUp
KTsKKworCS8qIHRoZSB0aW1lIEkgYnVpbHQgY29va2llICovCisJKHZvaWQpU0NUUF9HRVRUSU1F
X1RJTUVWQUwoJm5vdyk7CisJc3RjLnRpbWVfZW50ZXJlZC50dl9zZWMgPSBub3cudHZfc2VjOwor
CXN0Yy50aW1lX2VudGVyZWQudHZfdXNlYyA9IG5vdy50dl91c2VjOworCisJLyogcG9wdWxhdGUg
YW55IHRpZSB0YWdzICovCisJaWYgKGFzb2MgIT0gTlVMTCkgeworCQkvKiB1bmxvY2sgYmVmb3Jl
IHRhZyBzZWxlY3Rpb25zICovCisJCXN0Yy50aWVfdGFnX215X3Z0YWcgPSBhc29jLT5teV92dGFn
X25vbmNlOworCQlzdGMudGllX3RhZ19wZWVyX3Z0YWcgPSBhc29jLT5wZWVyX3Z0YWdfbm9uY2U7
CisJCXN0Yy5jb29raWVfbGlmZSA9IGFzb2MtPmNvb2tpZV9saWZlOworCQluZXQgPSBhc29jLT5w
cmltYXJ5X2Rlc3RpbmF0aW9uOworCX0gZWxzZSB7CisJCXN0Yy50aWVfdGFnX215X3Z0YWcgPSAw
OworCQlzdGMudGllX3RhZ19wZWVyX3Z0YWcgPSAwOworCQkvKiBsaWZlIEkgd2lsbCBhd2FyZCB0
aGlzIGNvb2tpZSAqLworCQlzdGMuY29va2llX2xpZmUgPSBpbnAtPnNjdHBfZXAuZGVmX2Nvb2tp
ZV9saWZlOworCX0KKworCS8qIGNvcHkgaW4gdGhlIHBvcnRzIGZvciBsYXRlciBjaGVjayAqLwor
CXN0Yy5teXBvcnQgPSBzaC0+ZGVzdF9wb3J0OworCXN0Yy5wZWVycG9ydCA9IHNoLT5zcmNfcG9y
dDsKKworCS8qCisJICogSWYgd2Ugd2FudGVkIHRvIGhvbm9yIGNvb2tpZSBsaWZlIGV4dGVuc2lv
bnMsIHdlIHdvdWxkIGFkZCB0bworCSAqIHN0Yy5jb29raWVfbGlmZS4gRm9yIG5vdyB3ZSBzaG91
bGQgTk9UIGhvbm9yIGFueSBleHRlbnNpb24KKwkgKi8KKwlzdGMuc2l0ZV9zY29wZSA9IHN0Yy5s
b2NhbF9zY29wZSA9IHN0Yy5sb29wYmFja19zY29wZSA9IDA7CisJaWYgKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSB7CisJCXN0Yy5pcHY2X2FkZHJfbGVnYWwgPSAx
OworCQlpZiAoU0NUUF9JUFY2X1Y2T05MWShpbnApKSB7CisJCQlzdGMuaXB2NF9hZGRyX2xlZ2Fs
ID0gMDsKKwkJfSBlbHNlIHsKKwkJCXN0Yy5pcHY0X2FkZHJfbGVnYWwgPSAxOworCQl9CisjaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlzdGMuY29ubl9hZGRyX2xlZ2FsID0gMDsKKyNlbmRp
ZgorCX0gZWxzZSB7CisJCXN0Yy5pcHY2X2FkZHJfbGVnYWwgPSAwOworI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKwkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5E
X0NPTk4pIHsKKwkJCXN0Yy5jb25uX2FkZHJfbGVnYWwgPSAxOworCQkJc3RjLmlwdjRfYWRkcl9s
ZWdhbCA9IDA7CisJCX0gZWxzZSB7CisJCQlzdGMuY29ubl9hZGRyX2xlZ2FsID0gMDsKKwkJCXN0
Yy5pcHY0X2FkZHJfbGVnYWwgPSAxOworCQl9CisjZWxzZQorCQlzdGMuaXB2NF9hZGRyX2xlZ2Fs
ID0gMTsKKyNlbmRpZgorCX0KKwlzdGMuaXB2NF9zY29wZSA9IDA7CisJaWYgKG5ldCA9PSBOVUxM
KSB7CisJCXRvID0gc3JjOworCQlzd2l0Y2ggKGRzdC0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5F
VAorCQljYXNlIEFGX0lORVQ6CisJCXsKKwkJCS8qIGxvb2t1cCBhZGRyZXNzICovCisJCQlzdGMu
YWRkcmVzc1swXSA9IHNyYzQtPnNpbl9hZGRyLnNfYWRkcjsKKwkJCXN0Yy5hZGRyZXNzWzFdID0g
MDsKKwkJCXN0Yy5hZGRyZXNzWzJdID0gMDsKKwkJCXN0Yy5hZGRyZXNzWzNdID0gMDsKKwkJCXN0
Yy5hZGRyX3R5cGUgPSBTQ1RQX0lQVjRfQUREUkVTUzsKKwkJCS8qIGxvY2FsIGZyb20gYWRkcmVz
cyAqLworCQkJc3RjLmxhZGRyZXNzWzBdID0gZHN0NC0+c2luX2FkZHIuc19hZGRyOworCQkJc3Rj
LmxhZGRyZXNzWzFdID0gMDsKKwkJCXN0Yy5sYWRkcmVzc1syXSA9IDA7CisJCQlzdGMubGFkZHJl
c3NbM10gPSAwOworCQkJc3RjLmxhZGRyX3R5cGUgPSBTQ1RQX0lQVjRfQUREUkVTUzsKKwkJCS8q
IHNjb3BlX2lkIGlzIG9ubHkgZm9yIHY2ICovCisJCQlzdGMuc2NvcGVfaWQgPSAwOworCQkJaWYg
KChJTjRfSVNQUklWQVRFX0FERFJFU1MoJnNyYzQtPnNpbl9hZGRyKSkgfHwKKwkJCSAgICAoSU40
X0lTUFJJVkFURV9BRERSRVNTKCZkc3Q0LT5zaW5fYWRkcikpKXsKKwkJCQlzdGMuaXB2NF9zY29w
ZSA9IDE7CisJCQl9CisJCQkvKiBNdXN0IHVzZSB0aGUgYWRkcmVzcyBpbiB0aGlzIGNhc2UgKi8K
KwkJCWlmIChzY3RwX2lzX2FkZHJlc3Nfb25fbG9jYWxfaG9zdChzcmMsIHZyZl9pZCkpIHsKKwkJ
CQlzdGMubG9vcGJhY2tfc2NvcGUgPSAxOworCQkJCXN0Yy5pcHY0X3Njb3BlID0gMTsKKwkJCQlz
dGMuc2l0ZV9zY29wZSA9IDE7CisJCQkJc3RjLmxvY2FsX3Njb3BlID0gMDsKKwkJCX0KKwkJCWJy
ZWFrOworCQl9CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQljYXNlIEFGX0lORVQ2OgorCQl7CisJ
CQlzdGMuYWRkcl90eXBlID0gU0NUUF9JUFY2X0FERFJFU1M7CisJCQltZW1jcHkoJnN0Yy5hZGRy
ZXNzLCAmc3JjNi0+c2luNl9hZGRyLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisjaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCXN0Yy5zY29w
ZV9pZCA9IG50b2hzKGluNl9nZXRzY29wZSgmc3JjNi0+c2luNl9hZGRyKSk7CisjZWxzZQorCQkJ
c3RjLnNjb3BlX2lkID0gMDsKKyNlbmRpZgorCQkJaWYgKHNjdHBfaXNfYWRkcmVzc19vbl9sb2Nh
bF9ob3N0KHNyYywgdnJmX2lkKSkgeworCQkJCXN0Yy5sb29wYmFja19zY29wZSA9IDE7CisJCQkJ
c3RjLmxvY2FsX3Njb3BlID0gMDsKKwkJCQlzdGMuc2l0ZV9zY29wZSA9IDE7CisJCQkJc3RjLmlw
djRfc2NvcGUgPSAxOworCQkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnNyYzYt
PnNpbjZfYWRkcikgfHwKKwkJCSAgICAgICAgICAgSU42X0lTX0FERFJfTElOS0xPQ0FMKCZkc3Q2
LT5zaW42X2FkZHIpKSB7CisJCQkJLyoKKwkJCQkgKiBJZiB0aGUgbmV3IGRlc3RpbmF0aW9uIG9y
IHNvdXJjZSBpcyBhCisJCQkJICogTElOS19MT0NBTCB3ZSBtdXN0IGhhdmUgY29tbW9uIGJvdGgg
c2l0ZSBhbmQKKwkJCQkgKiBsb2NhbCBzY29wZS4gRG9uJ3Qgc2V0IGxvY2FsIHNjb3BlIHRob3Vn
aAorCQkJCSAqIHNpbmNlIHdlIG11c3QgZGVwZW5kIG9uIHRoZSBzb3VyY2UgdG8gYmUKKwkJCQkg
KiBhZGRlZCBpbXBsaWNpdGx5LiBXZSBjYW5ub3QgYXNzdXJlIGp1c3QKKwkJCQkgKiBiZWNhdXNl
IHdlIHNoYXJlIG9uZSBsaW5rIHRoYXQgYWxsIGxpbmtzIGFyZQorCQkJCSAqIGNvbW1vbi4KKwkJ
CQkgKi8KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KwkJCQkvKiBNYWMgT1MgWCBjdXJyZW50bHkgZG9lc24ndCBoYXZlIGluNl9nZXRzY29wZSgpICov
CisJCQkJc3RjLnNjb3BlX2lkID0gc3JjNi0+c2luNl9hZGRyLnM2X2FkZHIxNlsxXTsKKyNlbmRp
ZgorCQkJCXN0Yy5sb2NhbF9zY29wZSA9IDA7CisJCQkJc3RjLnNpdGVfc2NvcGUgPSAxOworCQkJ
CXN0Yy5pcHY0X3Njb3BlID0gMTsKKwkJCQkvKgorCQkJCSAqIHdlIHN0YXJ0IGNvdW50aW5nIGZv
ciB0aGUgcHJpdmF0ZSBhZGRyZXNzCisJCQkJICogc3R1ZmYgYXQgMS4gc2luY2UgdGhlIGxpbmsg
bG9jYWwgd2UKKwkJCQkgKiBzb3VyY2UgZnJvbSB3b24ndCBzaG93IHVwIGluIG91ciBzY29wZWQK
KwkJCQkgKiBjb3VudC4KKwkJCQkgKi8KKwkJCQljbnRfaW5pdHNfdG8gPSAxOworCQkJCS8qIHB1
bGwgb3V0IHRoZSBzY29wZV9pZCBmcm9tIGluY29taW5nIHBrdCAqLworCQkJfSBlbHNlIGlmIChJ
TjZfSVNfQUREUl9TSVRFTE9DQUwoJnNyYzYtPnNpbjZfYWRkcikgfHwKKwkJCSAgICAgICAgICAg
SU42X0lTX0FERFJfU0lURUxPQ0FMKCZkc3Q2LT5zaW42X2FkZHIpKSB7CisJCQkJLyoKKwkJCQkg
KiBJZiB0aGUgbmV3IGRlc3RpbmF0aW9uIG9yIHNvdXJjZSBpcworCQkJCSAqIFNJVEVfTE9DQUwg
dGhlbiB3ZSBtdXN0IGhhdmUgc2l0ZSBzY29wZSBpbgorCQkJCSAqIGNvbW1vbi4KKwkJCQkgKi8K
KwkJCQlzdGMuc2l0ZV9zY29wZSA9IDE7CisJCQl9CisJCQltZW1jcHkoJnN0Yy5sYWRkcmVzcywg
JmRzdDYtPnNpbjZfYWRkciwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworCQkJc3RjLmxhZGRy
X3R5cGUgPSBTQ1RQX0lQVjZfQUREUkVTUzsKKwkJCWJyZWFrOworCQl9CisjZW5kaWYKKyNpZiBk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWNhc2UgQUZfQ09OTjoKKwkJeworCQkJLyogbG9va3Vw
IGFkZHJlc3MgKi8KKwkJCXN0Yy5hZGRyZXNzWzBdID0gMDsKKwkJCXN0Yy5hZGRyZXNzWzFdID0g
MDsKKwkJCXN0Yy5hZGRyZXNzWzJdID0gMDsKKwkJCXN0Yy5hZGRyZXNzWzNdID0gMDsKKwkJCW1l
bWNweSgmc3RjLmFkZHJlc3MsICZzcmNjb25uLT5zY29ubl9hZGRyLCBzaXplb2Yodm9pZCAqKSk7
CisJCQlzdGMuYWRkcl90eXBlID0gU0NUUF9DT05OX0FERFJFU1M7CisJCQkvKiBsb2NhbCBmcm9t
IGFkZHJlc3MgKi8KKwkJCXN0Yy5sYWRkcmVzc1swXSA9IDA7CisJCQlzdGMubGFkZHJlc3NbMV0g
PSAwOworCQkJc3RjLmxhZGRyZXNzWzJdID0gMDsKKwkJCXN0Yy5sYWRkcmVzc1szXSA9IDA7CisJ
CQltZW1jcHkoJnN0Yy5sYWRkcmVzcywgJmRzdGNvbm4tPnNjb25uX2FkZHIsIHNpemVvZih2b2lk
ICopKTsKKwkJCXN0Yy5sYWRkcl90eXBlID0gU0NUUF9DT05OX0FERFJFU1M7CisJCQkvKiBzY29w
ZV9pZCBpcyBvbmx5IGZvciB2NiAqLworCQkJc3RjLnNjb3BlX2lkID0gMDsKKwkJCWJyZWFrOwor
CQl9CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCS8qIFRTTkggKi8KKwkJCWdvdG8gZG9fYV9hYm9y
dDsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJLyogc2V0IHRoZSBzY29wZSBwZXIgdGhl
IGV4aXN0aW5nIHRjYiAqLworCisjaWZkZWYgSU5FVDYKKwkJc3RydWN0IHNjdHBfbmV0cyAqbG5l
dDsKKyNlbmRpZgorCisJCXN0Yy5sb29wYmFja19zY29wZSA9IGFzb2MtPnNjb3BlLmxvb3BiYWNr
X3Njb3BlOworCQlzdGMuaXB2NF9zY29wZSA9IGFzb2MtPnNjb3BlLmlwdjRfbG9jYWxfc2NvcGU7
CisJCXN0Yy5zaXRlX3Njb3BlID0gYXNvYy0+c2NvcGUuc2l0ZV9zY29wZTsKKwkJc3RjLmxvY2Fs
X3Njb3BlID0gYXNvYy0+c2NvcGUubG9jYWxfc2NvcGU7CisjaWZkZWYgSU5FVDYKKwkJLyogV2h5
IGRvIHdlIG5vdCBjb25zaWRlciBJUHY0IExMIGFkZHJlc3Nlcz8gKi8KKwkJVEFJTFFfRk9SRUFD
SChsbmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0KSB7CisJCQlpZiAobG5ldC0+cm8uX2xfYWRk
ci5zaW42LnNpbjZfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCQkJaWYgKElONl9JU19BRERSX0xJ
TktMT0NBTCgmbG5ldC0+cm8uX2xfYWRkci5zaW42LnNpbjZfYWRkcikpIHsKKwkJCQkJLyoKKwkJ
CQkJICogaWYgd2UgaGF2ZSBhIExMIGFkZHJlc3MsIHN0YXJ0CisJCQkJCSAqIGNvdW50aW5nIGF0
IDEuCisJCQkJCSAqLworCQkJCQljbnRfaW5pdHNfdG8gPSAxOworCQkJCX0KKwkJCX0KKwkJfQor
I2VuZGlmCisJCS8qIHVzZSB0aGUgbmV0IHBvaW50ZXIgKi8KKwkJdG8gPSAoc3RydWN0IHNvY2th
ZGRyICopJm5ldC0+cm8uX2xfYWRkcjsKKwkJc3dpdGNoICh0by0+c2FfZmFtaWx5KSB7CisjaWZk
ZWYgSU5FVAorCQljYXNlIEFGX0lORVQ6CisJCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICop
dG87CisJCQlzdGMuYWRkcmVzc1swXSA9IHNpbi0+c2luX2FkZHIuc19hZGRyOworCQkJc3RjLmFk
ZHJlc3NbMV0gPSAwOworCQkJc3RjLmFkZHJlc3NbMl0gPSAwOworCQkJc3RjLmFkZHJlc3NbM10g
PSAwOworCQkJc3RjLmFkZHJfdHlwZSA9IFNDVFBfSVBWNF9BRERSRVNTOworCQkJaWYgKG5ldC0+
c3JjX2FkZHJfc2VsZWN0ZWQgPT0gMCkgeworCQkJCS8qCisJCQkJICogc3RyYW5nZSBjYXNlIGhl
cmUsIHRoZSBJTklUIHNob3VsZCBoYXZlCisJCQkJICogZGlkIHRoZSBzZWxlY3Rpb24uCisJCQkJ
ICovCisJCQkJbmV0LT5yby5fc19hZGRyID0gc2N0cF9zb3VyY2VfYWRkcmVzc19zZWxlY3Rpb24o
aW5wLAorCQkJCQkJCQkJCXN0Y2IsIChzY3RwX3JvdXRlX3QgKikmbmV0LT5ybywKKwkJCQkJCQkJ
CQluZXQsIDAsIHZyZl9pZCk7CisJCQkJaWYgKG5ldC0+cm8uX3NfYWRkciA9PSBOVUxMKSB7CisJ
CQkJCXNjdHBfbV9mcmVlbShvcF9lcnIpOworCQkJCQlzY3RwX21fZnJlZW0obSk7CisJCQkJCXJl
dHVybjsKKwkJCQl9CisKKwkJCQluZXQtPnNyY19hZGRyX3NlbGVjdGVkID0gMTsKKwkJCX0KKwkJ
CXN0Yy5sYWRkcmVzc1swXSA9IG5ldC0+cm8uX3NfYWRkci0+YWRkcmVzcy5zaW4uc2luX2FkZHIu
c19hZGRyOworCQkJc3RjLmxhZGRyZXNzWzFdID0gMDsKKwkJCXN0Yy5sYWRkcmVzc1syXSA9IDA7
CisJCQlzdGMubGFkZHJlc3NbM10gPSAwOworCQkJc3RjLmxhZGRyX3R5cGUgPSBTQ1RQX0lQVjRf
QUREUkVTUzsKKwkJCS8qIHNjb3BlX2lkIGlzIG9ubHkgZm9yIHY2ICovCisJCQlzdGMuc2NvcGVf
aWQgPSAwOworCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQljYXNlIEFGX0lORVQ2
OgorCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopdG87CisJCQltZW1jcHkoJnN0Yy5h
ZGRyZXNzLCAmc2luNi0+c2luNl9hZGRyLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2Fk
ZHIpKTsKKwkJCXN0Yy5hZGRyX3R5cGUgPSBTQ1RQX0lQVjZfQUREUkVTUzsKKwkJCXN0Yy5zY29w
ZV9pZCA9IHNpbjYtPnNpbjZfc2NvcGVfaWQ7CisJCQlpZiAobmV0LT5zcmNfYWRkcl9zZWxlY3Rl
ZCA9PSAwKSB7CisJCQkJLyoKKwkJCQkgKiBzdHJhbmdlIGNhc2UgaGVyZSwgdGhlIElOSVQgc2hv
dWxkIGhhdmUKKwkJCQkgKiBkb25lIHRoZSBzZWxlY3Rpb24uCisJCQkJICovCisJCQkJbmV0LT5y
by5fc19hZGRyID0gc2N0cF9zb3VyY2VfYWRkcmVzc19zZWxlY3Rpb24oaW5wLAorCQkJCQkJCQkJ
CXN0Y2IsIChzY3RwX3JvdXRlX3QgKikmbmV0LT5ybywKKwkJCQkJCQkJCQluZXQsIDAsIHZyZl9p
ZCk7CisJCQkJaWYgKG5ldC0+cm8uX3NfYWRkciA9PSBOVUxMKSB7CisJCQkJCXNjdHBfbV9mcmVl
bShvcF9lcnIpOworCQkJCQlzY3RwX21fZnJlZW0obSk7CisJCQkJCXJldHVybjsKKwkJCQl9CisK
KwkJCQluZXQtPnNyY19hZGRyX3NlbGVjdGVkID0gMTsKKwkJCX0KKwkJCW1lbWNweSgmc3RjLmxh
ZGRyZXNzLCAmbmV0LT5yby5fc19hZGRyLT5hZGRyZXNzLnNpbjYuc2luNl9hZGRyLAorCQkJICAg
ICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKwkJCXN0Yy5sYWRkcl90eXBlID0gU0NUUF9J
UFY2X0FERFJFU1M7CisJCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwkJY2FzZSBBRl9DT05OOgorCQkJc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKil0
bzsKKwkJCXN0Yy5hZGRyZXNzWzBdID0gMDsKKwkJCXN0Yy5hZGRyZXNzWzFdID0gMDsKKwkJCXN0
Yy5hZGRyZXNzWzJdID0gMDsKKwkJCXN0Yy5hZGRyZXNzWzNdID0gMDsKKwkJCW1lbWNweSgmc3Rj
LmFkZHJlc3MsICZzY29ubi0+c2Nvbm5fYWRkciwgc2l6ZW9mKHZvaWQgKikpOworCQkJc3RjLmFk
ZHJfdHlwZSA9IFNDVFBfQ09OTl9BRERSRVNTOworCQkJc3RjLmxhZGRyZXNzWzBdID0gMDsKKwkJ
CXN0Yy5sYWRkcmVzc1sxXSA9IDA7CisJCQlzdGMubGFkZHJlc3NbMl0gPSAwOworCQkJc3RjLmxh
ZGRyZXNzWzNdID0gMDsKKwkJCW1lbWNweSgmc3RjLmxhZGRyZXNzLCAmc2Nvbm4tPnNjb25uX2Fk
ZHIsIHNpemVvZih2b2lkICopKTsKKwkJCXN0Yy5sYWRkcl90eXBlID0gU0NUUF9DT05OX0FERFJF
U1M7CisJCQlzdGMuc2NvcGVfaWQgPSAwOworCQkJYnJlYWs7CisjZW5kaWYKKwkJfQorCX0KKwkv
KiBOb3cgbGV0cyBwdXQgdGhlIFNDVFAgaGVhZGVyIGluIHBsYWNlICovCisJaW5pdGFjayA9IG10
b2QobSwgc3RydWN0IHNjdHBfaW5pdF9hY2tfY2h1bmsgKik7CisJLyogU2F2ZSBpdCBvZmYgZm9y
IHF1aWNrIHJlZiAqLworCXN0Yy5wZWVyc192dGFnID0gbnRvaGwoaW5pdF9jaGstPmluaXQuaW5p
dGlhdGVfdGFnKTsKKwkvKiB3aG8gYXJlIHdlICovCisJbWVtY3B5KHN0Yy5pZGVudGlmaWNhdGlv
biwgU0NUUF9WRVJTSU9OX1NUUklORywKKwkgICAgICAgbWluKHN0cmxlbihTQ1RQX1ZFUlNJT05f
U1RSSU5HKSwgc2l6ZW9mKHN0Yy5pZGVudGlmaWNhdGlvbikpKTsKKwltZW1zZXQoc3RjLnJlc2Vy
dmVkLCAwLCBTQ1RQX1JFU0VSVkVfU1BBQ0UpOworCS8qIG5vdyB0aGUgY2h1bmsgaGVhZGVyICov
CisJaW5pdGFjay0+Y2guY2h1bmtfdHlwZSA9IFNDVFBfSU5JVElBVElPTl9BQ0s7CisJaW5pdGFj
ay0+Y2guY2h1bmtfZmxhZ3MgPSAwOworCS8qIGZpbGwgaW4gbGF0ZXIgZnJvbSBtYnVmIHdlIGJ1
aWxkICovCisJaW5pdGFjay0+Y2guY2h1bmtfbGVuZ3RoID0gMDsKKwkvKiBwbGFjZSBpbiBteSB0
YWcgKi8KKwlpZiAoKGFzb2MgIT0gTlVMTCkgJiYKKwkgICAgKChTQ1RQX0dFVF9TVEFURShzdGNi
KSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKSB8fAorCSAgICAgKFNDVFBfR0VUX1NUQVRFKHN0
Y2IpID09IFNDVFBfU1RBVEVfSU5VU0UpIHx8CisJICAgICAoU0NUUF9HRVRfU1RBVEUoc3RjYikg
PT0gU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEKSkpIHsKKwkJLyogcmUtdXNlIHRoZSB2LXRhZ3Mg
YW5kIGluaXQtc2VxIGhlcmUgKi8KKwkJaW5pdGFjay0+aW5pdC5pbml0aWF0ZV90YWcgPSBodG9u
bChhc29jLT5teV92dGFnKTsKKwkJaW5pdGFjay0+aW5pdC5pbml0aWFsX3RzbiA9IGh0b25sKGFz
b2MtPmluaXRfc2VxX251bWJlcik7CisJfSBlbHNlIHsKKwkJdWludDMyX3QgdnRhZywgaXRzbjsK
KworCQlpZiAoYXNvYykgeworCQkJYXRvbWljX2FkZF9pbnQoJmFzb2MtPnJlZmNudCwgMSk7CisJ
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCW5ld190YWc6CisJCQl2dGFnID0gc2N0cF9zZWxl
Y3RfYV90YWcoaW5wLCBpbnAtPnNjdHBfbHBvcnQsIHNoLT5zcmNfcG9ydCwgMSk7CisJCQlpZiAo
KGFzb2MtPnBlZXJfc3VwcG9ydHNfbmF0KSAgJiYgKHZ0YWcgPT0gYXNvYy0+bXlfdnRhZykpIHsK
KwkJCQkvKiBHb3QgYSBkdXBsaWNhdGUgdnRhZyBvbiBzb21lIGd1eSBiZWhpbmQgYSBuYXQKKwkJ
CQkgKiBtYWtlIHN1cmUgd2UgZG9uJ3QgdXNlIGl0LgorCQkJCSAqLworCQkJCWdvdG8gbmV3X3Rh
ZzsKKwkJCX0KKwkJCWluaXRhY2stPmluaXQuaW5pdGlhdGVfdGFnID0gaHRvbmwodnRhZyk7CisJ
CQkvKiBnZXQgYSBUU04gdG8gdXNlIHRvbyAqLworCQkJaXRzbiA9IHNjdHBfc2VsZWN0X2luaXRp
YWxfVFNOKCZpbnAtPnNjdHBfZXApOworCQkJaW5pdGFjay0+aW5pdC5pbml0aWFsX3RzbiA9IGh0
b25sKGl0c24pOworCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCWF0b21pY19hZGRfaW50KCZh
c29jLT5yZWZjbnQsIC0xKTsKKwkJfSBlbHNlIHsKKwkJCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7
CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQl2dGFnID0gc2N0cF9zZWxlY3RfYV90YWco
aW5wLCBpbnAtPnNjdHBfbHBvcnQsIHNoLT5zcmNfcG9ydCwgMSk7CisJCQlpbml0YWNrLT5pbml0
LmluaXRpYXRlX3RhZyA9IGh0b25sKHZ0YWcpOworCQkJLyogZ2V0IGEgVFNOIHRvIHVzZSB0b28g
Ki8KKwkJCWluaXRhY2stPmluaXQuaW5pdGlhbF90c24gPSBodG9ubChzY3RwX3NlbGVjdF9pbml0
aWFsX1RTTigmaW5wLT5zY3RwX2VwKSk7CisJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJU0NU
UF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJfQorCX0KKwkvKiBzYXZlIGF3YXkgbXkgdGFnIHRvICov
CisJc3RjLm15X3Z0YWcgPSBpbml0YWNrLT5pbml0LmluaXRpYXRlX3RhZzsKKworCS8qIHNldCB1
cCBzb21lIG9mIHRoZSBjcmVkaXRzLiAqLworCXNvID0gaW5wLT5zY3RwX3NvY2tldDsKKwlpZiAo
c28gPT0gTlVMTCkgeworCQkvKiBtZW1vcnkgcHJvYmxlbSAqLworCQlzY3RwX21fZnJlZW0ob3Bf
ZXJyKTsKKwkJc2N0cF9tX2ZyZWVtKG0pOworCQlyZXR1cm47CisJfSBlbHNlIHsKKwkJaW5pdGFj
ay0+aW5pdC5hX3J3bmQgPSBodG9ubChtYXgoU0NUUF9TQl9MSU1JVF9SQ1Yoc28pLCBTQ1RQX01J
TklNQUxfUldORCkpOworCX0KKwkvKiBzZXQgd2hhdCBJIHdhbnQgKi8KKwloaXNfbGltaXQgPSBu
dG9ocyhpbml0X2Noay0+aW5pdC5udW1faW5ib3VuZF9zdHJlYW1zKTsKKwkvKiBjaG9vc2Ugd2hh
dCBJIHdhbnQgKi8KKwlpZiAoYXNvYyAhPSBOVUxMKSB7CisJCWlmIChhc29jLT5zdHJlYW1vdXRj
bnQgPiBhc29jLT5wcmVfb3Blbl9zdHJlYW1zKSB7CisJCQlpX3dhbnQgPSBhc29jLT5zdHJlYW1v
dXRjbnQ7CisJCX0gZWxzZSB7CisJCQlpX3dhbnQgPSBhc29jLT5wcmVfb3Blbl9zdHJlYW1zOwor
CQl9CisJfSBlbHNlIHsKKwkJaV93YW50ID0gaW5wLT5zY3RwX2VwLnByZV9vcGVuX3N0cmVhbV9j
b3VudDsKKwl9CisJaWYgKGhpc19saW1pdCA8IGlfd2FudCkgeworCQkvKiBJIFdhbnQgbW9yZSA6
PCAqLworCQlpbml0YWNrLT5pbml0Lm51bV9vdXRib3VuZF9zdHJlYW1zID0gaW5pdF9jaGstPmlu
aXQubnVtX2luYm91bmRfc3RyZWFtczsKKwl9IGVsc2UgeworCQkvKiBJIGNhbiBoYXZlIHdoYXQg
SSB3YW50IDo+ICovCisJCWluaXRhY2stPmluaXQubnVtX291dGJvdW5kX3N0cmVhbXMgPSBodG9u
cyhpX3dhbnQpOworCX0KKwkvKiB0ZWxsIGhpbSBoaXMgbGltaXQuICovCisJaW5pdGFjay0+aW5p
dC5udW1faW5ib3VuZF9zdHJlYW1zID0KKwkJaHRvbnMoaW5wLT5zY3RwX2VwLm1heF9vcGVuX3N0
cmVhbXNfaW50b21lKTsKKworCS8qIGFkYXB0YXRpb24gbGF5ZXIgaW5kaWNhdGlvbiBwYXJhbWV0
ZXIgKi8KKwlpZiAoaW5wLT5zY3RwX2VwLmFkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdG9yX3Byb3Zp
ZGVkKSB7CisJCXBhcmFtZXRlcl9sZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2Fk
YXB0YXRpb25fbGF5ZXJfaW5kaWNhdGlvbik7CisJCWFsaSA9IChzdHJ1Y3Qgc2N0cF9hZGFwdGF0
aW9uX2xheWVyX2luZGljYXRpb24gKikobXRvZChtLCBjYWRkcl90KSArIGNodW5rX2xlbik7CisJ
CWFsaS0+cGgucGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfVUxQX0FEQVBUQVRJT04pOworCQlhbGkt
PnBoLnBhcmFtX2xlbmd0aCA9IGh0b25zKHBhcmFtZXRlcl9sZW4pOworCQlhbGktPmluZGljYXRp
b24gPSBodG9ubChpbnAtPnNjdHBfZXAuYWRhcHRhdGlvbl9sYXllcl9pbmRpY2F0b3IpOworCQlj
aHVua19sZW4gKz0gcGFyYW1ldGVyX2xlbjsKKwl9CisKKwkvKiBFQ04gcGFyYW1ldGVyICovCisJ
aWYgKCgoYXNvYyAhPSBOVUxMKSAmJiAoYXNvYy0+ZWNuX3N1cHBvcnRlZCA9PSAxKSkgfHwKKwkg
ICAgKChhc29jID09IE5VTEwpICYmIChpbnAtPmVjbl9zdXBwb3J0ZWQgPT0gMSkpKSB7CisJCXBh
cmFtZXRlcl9sZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKTsKKwkJ
cGggPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKikobXRvZChtLCBjYWRkcl90KSArIGNodW5rX2xl
bik7CisJCXBoLT5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9FQ05fQ0FQQUJMRSk7CisJCXBoLT5w
YXJhbV9sZW5ndGggPSBodG9ucyhwYXJhbWV0ZXJfbGVuKTsKKwkJY2h1bmtfbGVuICs9IHBhcmFt
ZXRlcl9sZW47CisJfQorCisJLyogUFItU0NUUCBzdXBwb3J0ZWQgcGFyYW1ldGVyICovCisJaWYg
KCgoYXNvYyAhPSBOVUxMKSAmJiAoYXNvYy0+cHJzY3RwX3N1cHBvcnRlZCA9PSAxKSkgfHwKKwkg
ICAgKChhc29jID09IE5VTEwpICYmIChpbnAtPnByc2N0cF9zdXBwb3J0ZWQgPT0gMSkpKSB7CisJ
CXBhcmFtZXRlcl9sZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKTsK
KwkJcGggPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKikobXRvZChtLCBjYWRkcl90KSArIGNodW5r
X2xlbik7CisJCXBoLT5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9QUlNDVFBfU1VQUE9SVEVEKTsK
KwkJcGgtPnBhcmFtX2xlbmd0aCA9IGh0b25zKHBhcmFtZXRlcl9sZW4pOworCQljaHVua19sZW4g
Kz0gcGFyYW1ldGVyX2xlbjsKKwl9CisKKwkvKiBBZGQgTkFUIGZyaWVuZGx5IHBhcmFtZXRlciAq
LworCWlmIChuYXRfZnJpZW5kbHkpIHsKKwkJcGFyYW1ldGVyX2xlbiA9ICh1aW50MTZfdClzaXpl
b2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpOworCQlwaCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAq
KShtdG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVuKTsKKwkJcGgtPnBhcmFtX3R5cGUgPSBodG9u
cyhTQ1RQX0hBU19OQVRfU1VQUE9SVCk7CisJCXBoLT5wYXJhbV9sZW5ndGggPSBodG9ucyhwYXJh
bWV0ZXJfbGVuKTsKKwkJY2h1bmtfbGVuICs9IHBhcmFtZXRlcl9sZW47CisJfQorCisJLyogQW5k
IG5vdyB0ZWxsIHRoZSBwZWVyIHdoaWNoIGV4dGVuc2lvbnMgd2Ugc3VwcG9ydCAqLworCW51bV9l
eHQgPSAwOworCXByX3N1cHBvcnRlZCA9IChzdHJ1Y3Qgc2N0cF9zdXBwb3J0ZWRfY2h1bmtfdHlw
ZXNfcGFyYW0gKikobXRvZChtLCBjYWRkcl90KSArIGNodW5rX2xlbik7CisJaWYgKCgoYXNvYyAh
PSBOVUxMKSAmJiAoYXNvYy0+cHJzY3RwX3N1cHBvcnRlZCA9PSAxKSkgfHwKKwkgICAgKChhc29j
ID09IE5VTEwpICYmIChpbnAtPnByc2N0cF9zdXBwb3J0ZWQgPT0gMSkpKSB7CisJCXByX3N1cHBv
cnRlZC0+Y2h1bmtfdHlwZXNbbnVtX2V4dCsrXSA9IFNDVFBfRk9SV0FSRF9DVU1fVFNOOworCQlp
ZiAoKChhc29jICE9IE5VTEwpICYmIChhc29jLT5pZGF0YV9zdXBwb3J0ZWQgPT0gMSkpIHx8CisJ
CSAgICAoKGFzb2MgPT0gTlVMTCkgJiYgKGlucC0+aWRhdGFfc3VwcG9ydGVkID09IDEpKSkgewor
CQkJcHJfc3VwcG9ydGVkLT5jaHVua190eXBlc1tudW1fZXh0KytdID0gU0NUUF9JRk9SV0FSRF9D
VU1fVFNOOworCQl9CisJfQorCWlmICgoKGFzb2MgIT0gTlVMTCkgJiYgKGFzb2MtPmF1dGhfc3Vw
cG9ydGVkID09IDEpKSB8fAorCSAgICAoKGFzb2MgPT0gTlVMTCkgJiYgKGlucC0+YXV0aF9zdXBw
b3J0ZWQgPT0gMSkpKSB7CisJCXByX3N1cHBvcnRlZC0+Y2h1bmtfdHlwZXNbbnVtX2V4dCsrXSA9
IFNDVFBfQVVUSEVOVElDQVRJT047CisJfQorCWlmICgoKGFzb2MgIT0gTlVMTCkgJiYgKGFzb2Mt
PmFzY29uZl9zdXBwb3J0ZWQgPT0gMSkpIHx8CisJICAgICgoYXNvYyA9PSBOVUxMKSAmJiAoaW5w
LT5hc2NvbmZfc3VwcG9ydGVkID09IDEpKSkgeworCQlwcl9zdXBwb3J0ZWQtPmNodW5rX3R5cGVz
W251bV9leHQrK10gPSBTQ1RQX0FTQ09ORjsKKwkJcHJfc3VwcG9ydGVkLT5jaHVua190eXBlc1tu
dW1fZXh0KytdID0gU0NUUF9BU0NPTkZfQUNLOworCX0KKwlpZiAoKChhc29jICE9IE5VTEwpICYm
IChhc29jLT5yZWNvbmZpZ19zdXBwb3J0ZWQgPT0gMSkpIHx8CisJICAgICgoYXNvYyA9PSBOVUxM
KSAmJiAoaW5wLT5yZWNvbmZpZ19zdXBwb3J0ZWQgPT0gMSkpKSB7CisJCXByX3N1cHBvcnRlZC0+
Y2h1bmtfdHlwZXNbbnVtX2V4dCsrXSA9IFNDVFBfU1RSRUFNX1JFU0VUOworCX0KKwlpZiAoKChh
c29jICE9IE5VTEwpICYmIChhc29jLT5pZGF0YV9zdXBwb3J0ZWQgPT0gMSkpIHx8CisJICAgICgo
YXNvYyA9PSBOVUxMKSAmJiAoaW5wLT5pZGF0YV9zdXBwb3J0ZWQgPT0gMSkpKSB7CisJCXByX3N1
cHBvcnRlZC0+Y2h1bmtfdHlwZXNbbnVtX2V4dCsrXSA9IFNDVFBfSURBVEE7CisJfQorCWlmICgo
KGFzb2MgIT0gTlVMTCkgJiYgKGFzb2MtPm5yc2Fja19zdXBwb3J0ZWQgPT0gMSkpIHx8CisJICAg
ICgoYXNvYyA9PSBOVUxMKSAmJiAoaW5wLT5ucnNhY2tfc3VwcG9ydGVkID09IDEpKSkgeworCQlw
cl9zdXBwb3J0ZWQtPmNodW5rX3R5cGVzW251bV9leHQrK10gPSBTQ1RQX05SX1NFTEVDVElWRV9B
Q0s7CisJfQorCWlmICgoKGFzb2MgIT0gTlVMTCkgJiYgKGFzb2MtPnBrdGRyb3Bfc3VwcG9ydGVk
ID09IDEpKSB8fAorCSAgICAoKGFzb2MgPT0gTlVMTCkgJiYgKGlucC0+cGt0ZHJvcF9zdXBwb3J0
ZWQgPT0gMSkpKSB7CisJCXByX3N1cHBvcnRlZC0+Y2h1bmtfdHlwZXNbbnVtX2V4dCsrXSA9IFND
VFBfUEFDS0VUX0RST1BQRUQ7CisJfQorCWlmIChudW1fZXh0ID4gMCkgeworCQlwYXJhbWV0ZXJf
bGVuID0gKHVpbnQxNl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zdXBwb3J0ZWRfY2h1bmtfdHlwZXNf
cGFyYW0pICsgbnVtX2V4dDsKKwkJcHJfc3VwcG9ydGVkLT5waC5wYXJhbV90eXBlID0gaHRvbnMo
U0NUUF9TVVBQT1JURURfQ0hVTktfRVhUKTsKKwkJcHJfc3VwcG9ydGVkLT5waC5wYXJhbV9sZW5n
dGggPSBodG9ucyhwYXJhbWV0ZXJfbGVuKTsKKwkJcGFkZGluZ19sZW4gPSBTQ1RQX1NJWkUzMihw
YXJhbWV0ZXJfbGVuKSAtIHBhcmFtZXRlcl9sZW47CisJCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJf
bGVuOworCX0KKworCS8qIGFkZCBhdXRoZW50aWNhdGlvbiBwYXJhbWV0ZXJzICovCisJaWYgKCgo
YXNvYyAhPSBOVUxMKSAmJiAoYXNvYy0+YXV0aF9zdXBwb3J0ZWQgPT0gMSkpIHx8CisJICAgICgo
YXNvYyA9PSBOVUxMKSAmJiAoaW5wLT5hdXRoX3N1cHBvcnRlZCA9PSAxKSkpIHsKKwkJc3RydWN0
IHNjdHBfYXV0aF9yYW5kb20gKnJhbmRwOworCQlzdHJ1Y3Qgc2N0cF9hdXRoX2htYWNfYWxnbyAq
aG1hY3M7CisJCXN0cnVjdCBzY3RwX2F1dGhfY2h1bmtfbGlzdCAqY2h1bmtzOworCisJCWlmIChw
YWRkaW5nX2xlbiA+IDApIHsKKwkJCW1lbXNldChtdG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVu
LCAwLCBwYWRkaW5nX2xlbik7CisJCQljaHVua19sZW4gKz0gcGFkZGluZ19sZW47CisJCQlwYWRk
aW5nX2xlbiA9IDA7CisJCX0KKwkJLyogZ2VuZXJhdGUgYW5kIGFkZCBSQU5ET00gcGFyYW1ldGVy
ICovCisJCXJhbmRwID0gKHN0cnVjdCBzY3RwX2F1dGhfcmFuZG9tICopKG10b2QobSwgY2FkZHJf
dCkgKyBjaHVua19sZW4pOworCQlwYXJhbWV0ZXJfbGVuID0gKHVpbnQxNl90KXNpemVvZihzdHJ1
Y3Qgc2N0cF9hdXRoX3JhbmRvbSkgKworCQkgICAgICAgICAgICAgICAgU0NUUF9BVVRIX1JBTkRP
TV9TSVpFX0RFRkFVTFQ7CisJCXJhbmRwLT5waC5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9SQU5E
T00pOworCQlyYW5kcC0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMocGFyYW1ldGVyX2xlbik7CisJ
CVNDVFBfUkVBRF9SQU5ET00ocmFuZHAtPnJhbmRvbV9kYXRhLCBTQ1RQX0FVVEhfUkFORE9NX1NJ
WkVfREVGQVVMVCk7CisJCXBhZGRpbmdfbGVuID0gU0NUUF9TSVpFMzIocGFyYW1ldGVyX2xlbikg
LSBwYXJhbWV0ZXJfbGVuOworCQljaHVua19sZW4gKz0gcGFyYW1ldGVyX2xlbjsKKworCQlpZiAo
cGFkZGluZ19sZW4gPiAwKSB7CisJCQltZW1zZXQobXRvZChtLCBjYWRkcl90KSArIGNodW5rX2xl
biwgMCwgcGFkZGluZ19sZW4pOworCQkJY2h1bmtfbGVuICs9IHBhZGRpbmdfbGVuOworCQkJcGFk
ZGluZ19sZW4gPSAwOworCQl9CisJCS8qIGFkZCBITUFDX0FMR08gcGFyYW1ldGVyICovCisJCWht
YWNzID0gKHN0cnVjdCBzY3RwX2F1dGhfaG1hY19hbGdvICopKG10b2QobSwgY2FkZHJfdCkgKyBj
aHVua19sZW4pOworCQlwYXJhbWV0ZXJfbGVuID0gKHVpbnQxNl90KXNpemVvZihzdHJ1Y3Qgc2N0
cF9hdXRoX2htYWNfYWxnbykgKworCQkgICAgICAgICAgICAgICAgc2N0cF9zZXJpYWxpemVfaG1h
Y2xpc3QoaW5wLT5zY3RwX2VwLmxvY2FsX2htYWNzLAorCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QgKilobWFjcy0+aG1hY19pZHMpOworCQlobWFjcy0+
cGgucGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfSE1BQ19MSVNUKTsKKwkJaG1hY3MtPnBoLnBhcmFt
X2xlbmd0aCA9IGh0b25zKHBhcmFtZXRlcl9sZW4pOworCQlwYWRkaW5nX2xlbiA9IFNDVFBfU0la
RTMyKHBhcmFtZXRlcl9sZW4pIC0gcGFyYW1ldGVyX2xlbjsKKwkJY2h1bmtfbGVuICs9IHBhcmFt
ZXRlcl9sZW47CisKKwkJaWYgKHBhZGRpbmdfbGVuID4gMCkgeworCQkJbWVtc2V0KG10b2QobSwg
Y2FkZHJfdCkgKyBjaHVua19sZW4sIDAsIHBhZGRpbmdfbGVuKTsKKwkJCWNodW5rX2xlbiArPSBw
YWRkaW5nX2xlbjsKKwkJCXBhZGRpbmdfbGVuID0gMDsKKwkJfQorCQkvKiBhZGQgQ0hVTktTIHBh
cmFtZXRlciAqLworCQljaHVua3MgPSAoc3RydWN0IHNjdHBfYXV0aF9jaHVua19saXN0ICopKG10
b2QobSwgY2FkZHJfdCkgKyBjaHVua19sZW4pOworCQlwYXJhbWV0ZXJfbGVuID0gKHVpbnQxNl90
KXNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rX2xpc3QpICsKKwkJICAgICAgICAgICAgICAg
IHNjdHBfc2VyaWFsaXplX2F1dGhfY2h1bmtzKGlucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5r
cywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rcy0+
Y2h1bmtfdHlwZXMpOworCQljaHVua3MtPnBoLnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX0NIVU5L
X0xJU1QpOworCQljaHVua3MtPnBoLnBhcmFtX2xlbmd0aCA9IGh0b25zKHBhcmFtZXRlcl9sZW4p
OworCQlwYWRkaW5nX2xlbiA9IFNDVFBfU0laRTMyKHBhcmFtZXRlcl9sZW4pIC0gcGFyYW1ldGVy
X2xlbjsKKwkJY2h1bmtfbGVuICs9IHBhcmFtZXRlcl9sZW47CisJfQorCVNDVFBfQlVGX0xFTiht
KSA9IGNodW5rX2xlbjsKKwltX2xhc3QgPSBtOworCS8qIG5vdyB0aGUgYWRkcmVzc2VzICovCisJ
LyogVG8gb3B0aW1pemUgdGhpcyB3ZSBjb3VsZCBwdXQgdGhlIHNjb3Bpbmcgc3R1ZmYKKwkgKiBp
bnRvIGEgc3RydWN0dXJlIGFuZCByZW1vdmUgdGhlIGluZGl2aWR1YWwgdWludDgncyBmcm9tCisJ
ICogdGhlIHN0YyBzdHJ1Y3R1cmUuIFRoZW4gd2UgY291bGQganVzdCBzaWZhIGluIHRoZQorCSAq
IGFkZHJlc3Mgd2l0aGluIHRoZSBzdGMuLiBidXQgZm9yIG5vdyB0aGlzIGlzIGEgcXVpY2sKKwkg
KiBoYWNrIHRvIGdldCB0aGUgYWRkcmVzcyBzdHVmZiB0ZWFzZWQgYXBhcnQuCisJICovCisJc2Nw
LmlwdjRfYWRkcl9sZWdhbCA9IHN0Yy5pcHY0X2FkZHJfbGVnYWw7CisJc2NwLmlwdjZfYWRkcl9s
ZWdhbCA9IHN0Yy5pcHY2X2FkZHJfbGVnYWw7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CXNjcC5jb25uX2FkZHJfbGVnYWwgPSBzdGMuY29ubl9hZGRyX2xlZ2FsOworI2VuZGlmCisJc2Nw
Lmxvb3BiYWNrX3Njb3BlID0gc3RjLmxvb3BiYWNrX3Njb3BlOworCXNjcC5pcHY0X2xvY2FsX3Nj
b3BlID0gc3RjLmlwdjRfc2NvcGU7CisJc2NwLmxvY2FsX3Njb3BlID0gc3RjLmxvY2FsX3Njb3Bl
OworCXNjcC5zaXRlX3Njb3BlID0gc3RjLnNpdGVfc2NvcGU7CisJbV9sYXN0ID0gc2N0cF9hZGRf
YWRkcmVzc2VzX3RvX2lfaWEoaW5wLCBzdGNiLCAmc2NwLCBtX2xhc3QsCisJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY250X2luaXRzX3RvLAorCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZwYWRkaW5nX2xlbiwgJmNodW5rX2xlbik7CisJLyogcGFkZGlu
Z19sZW4gY2FuIG9ubHkgYmUgcG9zaXRpdmUsIGlmIG5vIGFkZHJlc3NlcyBoYXZlIGJlZW4gYWRk
ZWQgKi8KKwlpZiAocGFkZGluZ19sZW4gPiAwKSB7CisJCW1lbXNldChtdG9kKG0sIGNhZGRyX3Qp
ICsgY2h1bmtfbGVuLCAwLCBwYWRkaW5nX2xlbik7CisJCWNodW5rX2xlbiArPSBwYWRkaW5nX2xl
bjsKKwkJU0NUUF9CVUZfTEVOKG0pICs9IHBhZGRpbmdfbGVuOworCQlwYWRkaW5nX2xlbiA9IDA7
CisJfQorCisJLyogdGFjayBvbiB0aGUgb3BlcmF0aW9uYWwgZXJyb3IgaWYgcHJlc2VudCAqLwor
CWlmIChvcF9lcnIpIHsKKwkJcGFyYW1ldGVyX2xlbiA9IDA7CisJCWZvciAobV90bXAgPSBvcF9l
cnI7IG1fdG1wICE9IE5VTEw7IG1fdG1wID0gU0NUUF9CVUZfTkVYVChtX3RtcCkpIHsKKwkJCXBh
cmFtZXRlcl9sZW4gKz0gU0NUUF9CVUZfTEVOKG1fdG1wKTsKKwkJfQorCQlwYWRkaW5nX2xlbiA9
IFNDVFBfU0laRTMyKHBhcmFtZXRlcl9sZW4pIC0gcGFyYW1ldGVyX2xlbjsKKwkJU0NUUF9CVUZf
TkVYVChtX2xhc3QpID0gb3BfZXJyOworCQl3aGlsZSAoU0NUUF9CVUZfTkVYVChtX2xhc3QpICE9
IE5VTEwpIHsKKwkJCW1fbGFzdCA9IFNDVFBfQlVGX05FWFQobV9sYXN0KTsKKwkJfQorCQljaHVu
a19sZW4gKz0gcGFyYW1ldGVyX2xlbjsKKwl9CisJaWYgKHBhZGRpbmdfbGVuID4gMCkgeworCQlt
X2xhc3QgPSBzY3RwX2FkZF9wYWRfdG9tYnVmKG1fbGFzdCwgcGFkZGluZ19sZW4pOworCQlpZiAo
bV9sYXN0ID09IE5VTEwpIHsKKwkJCS8qIEhvdXN0b24gd2UgaGF2ZSBhIHByb2JsZW0sIG5vIHNw
YWNlICovCisJCQlzY3RwX21fZnJlZW0obSk7CisJCQlyZXR1cm47CisJCX0KKwkJY2h1bmtfbGVu
ICs9IHBhZGRpbmdfbGVuOworCQlwYWRkaW5nX2xlbiA9IDA7CisJfQorCS8qIE5vdyB3ZSBtdXN0
IGJ1aWxkIGEgY29va2llICovCisJbV9jb29raWUgPSBzY3RwX2FkZF9jb29raWUoaW5pdF9wa3Qs
IG9mZnNldCwgbSwgMCwgJnN0YywgJnNpZ25hdHVyZSk7CisJaWYgKG1fY29va2llID09IE5VTEwp
IHsKKwkJLyogbWVtb3J5IHByb2JsZW0gKi8KKwkJc2N0cF9tX2ZyZWVtKG0pOworCQlyZXR1cm47
CisJfQorCS8qIE5vdyBhcHBlbmQgdGhlIGNvb2tpZSB0byB0aGUgZW5kIGFuZCB1cGRhdGUgdGhl
IHNwYWNlL3NpemUgKi8KKwlTQ1RQX0JVRl9ORVhUKG1fbGFzdCkgPSBtX2Nvb2tpZTsKKwlwYXJh
bWV0ZXJfbGVuID0gMDsKKwlmb3IgKG1fdG1wID0gbV9jb29raWU7IG1fdG1wICE9IE5VTEw7IG1f
dG1wID0gU0NUUF9CVUZfTkVYVChtX3RtcCkpIHsKKwkJcGFyYW1ldGVyX2xlbiArPSBTQ1RQX0JV
Rl9MRU4obV90bXApOworCQlpZiAoU0NUUF9CVUZfTkVYVChtX3RtcCkgPT0gTlVMTCkgeworCQkJ
bV9sYXN0ID0gbV90bXA7CisJCX0KKwl9CisJcGFkZGluZ19sZW4gPSBTQ1RQX1NJWkUzMihwYXJh
bWV0ZXJfbGVuKSAtIHBhcmFtZXRlcl9sZW47CisJY2h1bmtfbGVuICs9IHBhcmFtZXRlcl9sZW47
CisKKwkvKiBQbGFjZSBpbiB0aGUgc2l6ZSwgYnV0IHdlIGRvbid0IGluY2x1ZGUKKwkgKiB0aGUg
bGFzdCBwYWQgKGlmIGFueSkgaW4gdGhlIElOSVQtQUNLLgorCSAqLworCWluaXRhY2stPmNoLmNo
dW5rX2xlbmd0aCA9IGh0b25zKGNodW5rX2xlbik7CisKKwkvKiBUaW1lIHRvIHNpZ24gdGhlIGNv
b2tpZSwgd2UgZG9uJ3Qgc2lnbiBvdmVyIHRoZSBjb29raWUKKwkgKiBzaWduYXR1cmUgdGhvdWdo
IHRodXMgd2Ugc2V0IHRyYWlsZXIuCisJICovCisJKHZvaWQpc2N0cF9obWFjX20oU0NUUF9ITUFD
LAorCQkJICAodWludDhfdCAqKWlucC0+c2N0cF9lcC5zZWNyZXRfa2V5WyhpbnQpKGlucC0+c2N0
cF9lcC5jdXJyZW50X3NlY3JldF9udW1iZXIpXSwKKwkJCSAgU0NUUF9TRUNSRVRfU0laRSwgbV9j
b29raWUsIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkciksCisJCQkgICh1aW50OF90ICopc2ln
bmF0dXJlLCBTQ1RQX1NJR05BVFVSRV9TSVpFKTsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisJLyoKKwkgKiBEb24ndCBwdXQgQUZfQ09OTiBhZGRyZXNzZXMgb24gdGhlIHdpcmUsIGluIGNh
c2UgdGhpcyBpcyBjcml0aWNhbAorCSAqIGZvciB0aGUgYXBwbGljYXRpb24uIEhvd2V2ZXIsIHRo
ZXkgYXJlIHByb3RlY3RlZCBieSB0aGUgSE1BQyBhbmQKKwkgKiBuZWVkIHRvIGJlIHJlY29uc3Ry
dWN0ZWQgYmVmb3JlIGNoZWNraW5nIHRoZSBITUFDLgorCSAqIENsZWFyaW5nIGlzIG9ubHkgZG9u
ZSBpbiB0aGUgbWJ1ZiBjaGFpbiwgc2luY2UgdGhlIGxvY2FsIHN0YyBpcworCSAqIG5vdCB1c2Vk
IGFueW1vcmUuCisJICovCisJaWYgKHN0Yy5hZGRyX3R5cGUgPT0gU0NUUF9DT05OX0FERFJFU1Mp
IHsKKwkJY29uc3Qgdm9pZCAqcCA9IE5VTEw7CisKKwkJbV9jb3B5YmFjayhtX2Nvb2tpZSwgc2l6
ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSArIG9mZnNldG9mKHN0cnVjdCBzY3RwX3N0YXRlX2Nv
b2tpZSwgYWRkcmVzcyksCisJCSAgICAgICAgICAgKGludClzaXplb2Yodm9pZCAqKSwgKGNhZGRy
X3QpJnApOworCX0KKwlpZiAoc3RjLmxhZGRyX3R5cGUgPT0gU0NUUF9DT05OX0FERFJFU1MpIHsK
KwkJY29uc3Qgdm9pZCAqcCA9IE5VTEw7CisKKwkJbV9jb3B5YmFjayhtX2Nvb2tpZSwgc2l6ZW9m
KHN0cnVjdCBzY3RwX3BhcmFtaGRyKSArIG9mZnNldG9mKHN0cnVjdCBzY3RwX3N0YXRlX2Nvb2tp
ZSwgbGFkZHJlc3MpLAorCQkgICAgICAgICAgIChpbnQpc2l6ZW9mKHZvaWQgKiksIChjYWRkcl90
KSZwKTsKKwl9CisjZW5kaWYKKwkvKgorCSAqIFdlIHNpZmEgMCBoZXJlIHRvIE5PVCBzZXQgSVBf
REYgaWYgaXRzIElQdjQsIHdlIGlnbm9yZSB0aGUgcmV0dXJuCisJICogaGVyZSBzaW5jZSB0aGUg
dGltZXIgd2lsbCBkcml2ZSBhIHJldHJhbm1pc3Npb24uCisJICovCisJaWYgKHBhZGRpbmdfbGVu
ID4gMCkgeworCQlpZiAoc2N0cF9hZGRfcGFkX3RvbWJ1ZihtX2xhc3QsIHBhZGRpbmdfbGVuKSA9
PSBOVUxMKSB7CisJCQlzY3RwX21fZnJlZW0obSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisJaWYg
KHN0Yy5sb29wYmFja19zY29wZSkgeworCQlvdmVyX2FkZHIgPSAodW5pb24gc2N0cF9zb2Nrc3Rv
cmUgKilkc3Q7CisJfSBlbHNlIHsKKwkJb3Zlcl9hZGRyID0gTlVMTDsKKwl9CisKKwlpZiAoKGVy
cm9yID0gc2N0cF9sb3dsZXZlbF9jaHVua19vdXRwdXQoaW5wLCBOVUxMLCBOVUxMLCB0bywgbSwg
MCwgTlVMTCwgMCwgMCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCwgMCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wLT5zY3Rw
X2xwb3J0LCBzaC0+c3JjX3BvcnQsIGluaXRfY2hrLT5pbml0LmluaXRpYXRlX3RhZywKKwkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCwgb3Zlcl9hZGRyLAorI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKKyNl
bmRpZgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1NPX05P
VF9MT0NLRUQpKSkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUNCwgIkdhayBzZW5kIGVy
cm9yICVkXG4iLCBlcnJvcik7CisJCWlmIChlcnJvciA9PSBFTk9CVUZTKSB7CisJCQlpZiAoYXNv
YyAhPSBOVUxMKSB7CisJCQkJYXNvYy0+aWZwX2hhZF9lbm9idWYgPSAxOworCQkJfQorCQkJU0NU
UF9TVEFUX0lOQ1Ioc2N0cHNfbG93bGV2ZWxlcnIpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGFz
b2MgIT0gTlVMTCkgeworCQkJYXNvYy0+aWZwX2hhZF9lbm9idWYgPSAwOworCQl9CisJfQorCVND
VFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19vdXRjb250cm9sY2h1bmtzKTsKK30KKworc3Rh
dGljIHZvaWQKK3NjdHBfcHJ1bmVfcHJzY3RwKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICBz
dHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKyAgICBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZv
ICpzcmN2LAorICAgIGludCBkYXRhb3V0KQoreworCWludCBmcmVlZF9zcGMgPSAwOworCXN0cnVj
dCBzY3RwX3RtaXRfY2h1bmsgKmNoaywgKm5jaGs7CisKKwlTQ1RQX1RDQl9MT0NLX0FTU0VSVChz
dGNiKTsKKwlpZiAoKGFzb2MtPnByc2N0cF9zdXBwb3J0ZWQpICYmCisJICAgIChhc29jLT5zZW50
X3F1ZXVlX2NudF9yZW1vdmVhYmxlID4gMCkpIHsKKwkJVEFJTFFfRk9SRUFDSChjaGssICZhc29j
LT5zZW50X3F1ZXVlLCBzY3RwX25leHQpIHsKKwkJCS8qCisJCQkgKiBMb29rIGZvciBjaHVua3Mg
bWFya2VkIHdpdGggdGhlIFBSX1NDVFAgZmxhZyBBTkQKKwkJCSAqIHRoZSBidWZmZXIgc3BhY2Ug
ZmxhZy4gSWYgdGhlIG9uZSBiZWluZyBzZW50IGlzCisJCQkgKiBlcXVhbCBvciBncmVhdGVyIHBy
aW9yaXR5IHRoZW4gcHVyZ2UgdGhlIG9sZCBvbmUKKwkJCSAqIGFuZCBmcmVlIHNvbWUgc3BhY2Uu
CisJCQkgKi8KKwkJCWlmIChQUl9TQ1RQX0JVRl9FTkFCTEVEKGNoay0+ZmxhZ3MpKSB7CisJCQkJ
LyoKKwkJCQkgKiBUaGlzIG9uZSBpcyBQUi1TQ1RQIEFORCBidWZmZXIgc3BhY2UKKwkJCQkgKiBs
aW1pdGVkIHR5cGUKKwkJCQkgKi8KKwkJCQlpZiAoY2hrLT5yZWMuZGF0YS50aW1ldG9kcm9wLnR2
X3NlYyA+IChsb25nKXNyY3YtPnNpbmZvX3RpbWV0b2xpdmUpIHsKKwkJCQkJLyoKKwkJCQkJICog
TG93ZXIgbnVtYmVycyBlcXVhdGVzIHRvIGhpZ2hlcgorCQkJCQkgKiBwcmlvcml0eS4gU28gaWYg
dGhlIG9uZSB3ZSBhcmUKKwkJCQkJICogbG9va2luZyBhdCBoYXMgYSBsYXJnZXIgcHJpb3JpdHks
CisJCQkJCSAqIHdlIHdhbnQgdG8gZHJvcCB0aGUgZGF0YSBhbmQgTk9UCisJCQkJCSAqIHJldHJh
bnNtaXQgaXQuCisJCQkJCSAqLworCQkJCQlpZiAoY2hrLT5kYXRhKSB7CisJCQkJCQkvKgorCQkJ
CQkJICogV2UgcmVsZWFzZSB0aGUgYm9va19zaXplCisJCQkJCQkgKiBpZiB0aGUgbWJ1ZiBpcyBo
ZXJlCisJCQkJCQkgKi8KKwkJCQkJCWludCByZXRfc3BjOworCQkJCQkJdWludDhfdCBzZW50Owor
CisJCQkJCQlpZiAoY2hrLT5zZW50ID4gU0NUUF9EQVRBR1JBTV9VTlNFTlQpCisJCQkJCQkJc2Vu
dCA9IDE7CisJCQkJCQllbHNlCisJCQkJCQkJc2VudCA9IDA7CisJCQkJCQlyZXRfc3BjID0gc2N0
cF9yZWxlYXNlX3ByX3NjdHBfY2h1bmsoc3RjYiwgY2hrLAorCQkJCQkJICAgIHNlbnQsCisJCQkJ
CQkgICAgU0NUUF9TT19MT0NLRUQpOworCQkJCQkJZnJlZWRfc3BjICs9IHJldF9zcGM7CisJCQkJ
CQlpZiAoZnJlZWRfc3BjID49IGRhdGFvdXQpIHsKKwkJCQkJCQlyZXR1cm47CisJCQkJCQl9CisJ
CQkJCX0JLyogaWYgY2h1bmsgd2FzIHByZXNlbnQgKi8KKwkJCQl9CS8qIGlmIG9mIHN1ZmZpY2ll
bnQgcHJpb3JpdHkgKi8KKwkJCX0JLyogaWYgY2h1bmsgaGFzIGVuYWJsZWQgKi8KKwkJfQkJLyog
dGFpbHFmb3JlYWNoICovCisKKwkJVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJmFzb2MtPnNlbmRf
cXVldWUsIHNjdHBfbmV4dCwgbmNoaykgeworCQkJLyogSGVyZSB3ZSBtdXN0IG1vdmUgdG8gdGhl
IHNlbnQgcXVldWUgYW5kIG1hcmsgKi8KKwkJCWlmIChQUl9TQ1RQX0JVRl9FTkFCTEVEKGNoay0+
ZmxhZ3MpKSB7CisJCQkJaWYgKGNoay0+cmVjLmRhdGEudGltZXRvZHJvcC50dl9zZWMgPiAobG9u
ZylzcmN2LT5zaW5mb190aW1ldG9saXZlKSB7CisJCQkJCWlmIChjaGstPmRhdGEpIHsKKwkJCQkJ
CS8qCisJCQkJCQkgKiBXZSByZWxlYXNlIHRoZSBib29rX3NpemUKKwkJCQkJCSAqIGlmIHRoZSBt
YnVmIGlzIGhlcmUKKwkJCQkJCSAqLworCQkJCQkJaW50IHJldF9zcGM7CisKKwkJCQkJCXJldF9z
cGMgPSBzY3RwX3JlbGVhc2VfcHJfc2N0cF9jaHVuayhzdGNiLCBjaGssCisJCQkJCQkgICAgMCwg
U0NUUF9TT19MT0NLRUQpOworCisJCQkJCQlmcmVlZF9zcGMgKz0gcmV0X3NwYzsKKwkJCQkJCWlm
IChmcmVlZF9zcGMgPj0gZGF0YW91dCkgeworCQkJCQkJCXJldHVybjsKKwkJCQkJCX0KKwkJCQkJ
fQkvKiBlbmQgaWYgY2hrLT5kYXRhICovCisJCQkJfQkvKiBlbmQgaWYgcmlnaHQgY2xhc3MgKi8K
KwkJCX0JLyogZW5kIGlmIGNoayBwci1zY3RwICovCisJCX0JCS8qIHRhaWxxZm9yZWFjaHNhZmUg
KGNoaykgKi8KKwl9CQkJLyogaWYgZW5hYmxlZCBpbiBhc29jICovCit9CisKK2ludAorc2N0cF9n
ZXRfZnJhZ19wb2ludChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNjdHBfYXNz
b2NpYXRpb24gKmFzb2MpCit7CisJaW50IHNpeiwgb3ZoOworCisJLyoKKwkgKiBGb3IgZW5kcG9p
bnRzIHRoYXQgaGF2ZSBib3RoIHY2IGFuZCB2NCBhZGRyZXNzZXMgd2UgbXVzdCByZXNlcnZlCisJ
ICogcm9vbSBmb3IgdGhlIGlwdjYgaGVhZGVyLCBmb3IgdGhvc2UgdGhhdCBhcmUgb25seSBkZWFs
aW5nIHdpdGggVjQKKwkgKiB3ZSB1c2UgYSBsYXJnZXIgZnJhZyBwb2ludC4KKwkgKi8KKwlpZiAo
c3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSB7CisJ
CW92aCA9IFNDVFBfTUlOX09WRVJIRUFEOworCX0gZWxzZSB7CisjaWYgZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorCQlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0JPVU5EX0NPTk4pIHsKKwkJCW92aCA9IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7CisJCX0gZWxz
ZSB7CisJCQlvdmggPSBTQ1RQX01JTl9WNF9PVkVSSEVBRDsKKwkJfQorI2Vsc2UKKwkJb3ZoID0g
U0NUUF9NSU5fVjRfT1ZFUkhFQUQ7CisjZW5kaWYKKwl9CisJb3ZoICs9IFNDVFBfREFUQV9DSFVO
S19PVkVSSEVBRChzdGNiKTsKKwlpZiAoc3RjYi0+YXNvYy5zY3RwX2ZyYWdfcG9pbnQgPiBhc29j
LT5zbWFsbGVzdF9tdHUpCisJCXNpeiA9IGFzb2MtPnNtYWxsZXN0X210dSAtIG92aDsKKwllbHNl
CisJCXNpeiA9IChzdGNiLT5hc29jLnNjdHBfZnJhZ19wb2ludCAtIG92aCk7CisJLyoKKwkgKiBp
ZiAoc2l6ID4gKE1DTEJZVEVTLXNpemVvZihzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rKSkpIHsKKwkg
Ki8KKwkvKiBBIGRhdGEgY2h1bmsgTVVTVCBmaXQgaW4gYSBjbHVzdGVyICovCisJLyogc2l6ID0g
KE1DTEJZVEVTIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspKTsgKi8KKwkvKiB9ICov
CisKKwkvKiBhZGp1c3QgZm9yIGFuIEFVVEggY2h1bmsgaWYgREFUQSByZXF1aXJlcyBhdXRoICov
CisJaWYgKHNjdHBfYXV0aF9pc19yZXF1aXJlZF9jaHVuayhTQ1RQX0RBVEEsIHN0Y2ItPmFzb2Mu
cGVlcl9hdXRoX2NodW5rcykpCisJCXNpeiAtPSBzY3RwX2dldF9hdXRoX2NodW5rX2xlbihzdGNi
LT5hc29jLnBlZXJfaG1hY19pZCk7CisKKwlpZiAoc2l6ICUgNCkgeworCQkvKiBtYWtlIGl0IGFu
IGV2ZW4gd29yZCBib3VuZGFyeSBwbGVhc2UgKi8KKwkJc2l6IC09IChzaXogJSA0KTsKKwl9CisJ
cmV0dXJuIChzaXopOworfQorCitzdGF0aWMgdm9pZAorc2N0cF9zZXRfcHJzY3RwX3BvbGljeShz
dHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3ApCit7CisJLyoKKwkgKiBXZSBhc3N1
bWUgdGhhdCB0aGUgdXNlciB3YW50cyBQUl9TQ1RQX1RUTCBpZiB0aGUgdXNlcgorCSAqIHByb3Zp
ZGVzIGEgcG9zaXRpdmUgbGlmZXRpbWUgYnV0IGRvZXMgbm90IHNwZWNpZnkgYW55CisJICogUFJf
U0NUUCBwb2xpY3kuCisJICovCisJaWYgKFBSX1NDVFBfRU5BQkxFRChzcC0+c2luZm9fZmxhZ3Mp
KSB7CisJCXNwLT5hY3RfZmxhZ3MgfD0gUFJfU0NUUF9QT0xJQ1koc3AtPnNpbmZvX2ZsYWdzKTsK
Kwl9IGVsc2UgaWYgKHNwLT50aW1ldG9saXZlID4gMCkgeworCQlzcC0+c2luZm9fZmxhZ3MgfD0g
U0NUUF9QUl9TQ1RQX1RUTDsKKwkJc3AtPmFjdF9mbGFncyB8PSBQUl9TQ1RQX1BPTElDWShzcC0+
c2luZm9fZmxhZ3MpOworCX0gZWxzZSB7CisJCXJldHVybjsKKwl9CisJc3dpdGNoIChQUl9TQ1RQ
X1BPTElDWShzcC0+c2luZm9fZmxhZ3MpKSB7CisJY2FzZSBDSFVOS19GTEFHU19QUl9TQ1RQX0JV
RjoKKwkJLyoKKwkJICogVGltZSB0byBsaXZlIGlzIGEgcHJpb3JpdHkgc3RvcmVkIGluIHR2X3Nl
YyB3aGVuCisJCSAqIGRvaW5nIHRoZSBidWZmZXIgZHJvcCB0aGluZy4KKwkJICovCisJCXNwLT50
cy50dl9zZWMgPSBzcC0+dGltZXRvbGl2ZTsKKwkJc3AtPnRzLnR2X3VzZWMgPSAwOworCQlicmVh
azsKKwljYXNlIENIVU5LX0ZMQUdTX1BSX1NDVFBfVFRMOgorCXsKKwkJc3RydWN0IHRpbWV2YWwg
dHY7CisJCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZzcC0+dHMpOworCQl0di50dl9zZWMg
PSBzcC0+dGltZXRvbGl2ZSAvIDEwMDA7CisJCXR2LnR2X3VzZWMgPSAoc3AtPnRpbWV0b2xpdmUg
KiAxMDAwKSAlIDEwMDAwMDA7CisJCS8qIFRPRE8gc2N0cF9jb25zdGFudHMuaCBuZWVkcyBhbHRl
cm5hdGl2ZSB0aW1lIG1hY3JvcyB3aGVuCisJCSAqICBfS0VSTkVMIGlzIHVuZGVmaW5lZC4KKwkJ
ICovCisjaWYgIShkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9f
KSkKKwkJdGltZXJhZGQoJnNwLT50cywgJnR2LCAmc3AtPnRzKTsKKyNlbHNlCisJCXRpbWV2YWxh
ZGQoJnNwLT50cywgJnR2KTsKKyNlbmRpZgorCX0KKwkJYnJlYWs7CisJY2FzZSBDSFVOS19GTEFH
U19QUl9TQ1RQX1JUWDoKKwkJLyoKKwkJICogVGltZSB0byBsaXZlIGlzIGEgdGhlIG51bWJlciBv
ciByZXRyYW5zbWlzc2lvbnMKKwkJICogc3RvcmVkIGluIHR2X3NlYy4KKwkJICovCisJCXNwLT50
cy50dl9zZWMgPSBzcC0+dGltZXRvbGl2ZTsKKwkJc3AtPnRzLnR2X3VzZWMgPSAwOworCQlicmVh
azsKKwlkZWZhdWx0OgorCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSUkVRMSwKKwkJCSJVbmtub3du
IFBSX1NDVFAgcG9saWN5ICV1LlxuIiwKKwkJCVBSX1NDVFBfUE9MSUNZKHNwLT5zaW5mb19mbGFn
cykpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfbXNnX2FwcGVuZChzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCXN0cnVjdCBzY3RwX25ldHMgKm5ldCwKKwkJc3RydWN0IG1i
dWYgKm0sCisJCXN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKnNyY3YsIGludCBob2xkX3N0Y2JfbG9j
aykKK3sKKwlpbnQgZXJyb3IgPSAwOworCXN0cnVjdCBtYnVmICphdDsKKwlzdHJ1Y3Qgc2N0cF9z
dHJlYW1fcXVldWVfcGVuZGluZyAqc3AgPSBOVUxMOworCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQg
KnN0cm07CisKKwkvKiBHaXZlbiBhbiBtYnVmIGNoYWluLCBwdXQgaXQKKwkgKiBpbnRvIHRoZSBh
c3NvY2lhdGlvbiBzZW5kIHF1ZXVlIGFuZAorCSAqIHBsYWNlIGl0IG9uIHRoZSB3aGVlbAorCSAq
LworCWlmIChzcmN2LT5zaW5mb19zdHJlYW0gPj0gc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQpIHsK
KwkJLyogSW52YWxpZCBzdHJlYW0gbnVtYmVyICovCisJCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtU
KG0sIE5VTEwsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOworCQll
cnJvciA9IEVJTlZBTDsKKwkJZ290byBvdXRfbm93OworCX0KKwlpZiAoKHN0Y2ItPmFzb2Muc3Ry
ZWFtX2xvY2tlZCkgJiYKKwkgICAgKHN0Y2ItPmFzb2Muc3RyZWFtX2xvY2tlZF9vbiAhPSBzcmN2
LT5zaW5mb19zdHJlYW0pKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIE5VTEwsIHN0
Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOworCQllcnJvciA9IEVJTlZB
TDsKKwkJZ290byBvdXRfbm93OworCX0KKwlzdHJtID0gJnN0Y2ItPmFzb2Muc3RybW91dFtzcmN2
LT5zaW5mb19zdHJlYW1dOworCS8qIE5vdyBjYW4gd2Ugc2VuZCB0aGlzPyAqLworCWlmICgoU0NU
UF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKSB8fAorCSAgICAo
U0NUUF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkgfHwK
KwkgICAgKFNDVFBfR0VUX1NUQVRFKHN0Y2IpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlW
RUQpIHx8CisJICAgIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5E
SU5HKSkgeworCQkvKiBnb3QgZGF0YSB3aGlsZSBzaHV0dGluZyBkb3duICovCisJCVNDVFBfTFRS
QUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFQ09O
TlJFU0VUKTsKKwkJZXJyb3IgPSBFQ09OTlJFU0VUOworCQlnb3RvIG91dF9ub3c7CisJfQorCXNj
dHBfYWxsb2NfYV9zdHJtb3Eoc3RjYiwgc3ApOworCWlmIChzcCA9PSBOVUxMKSB7CisJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBF
Tk9NRU0pOworCQllcnJvciA9IEVOT01FTTsKKwkJZ290byBvdXRfbm93OworCX0KKwlzcC0+c2lu
Zm9fZmxhZ3MgPSBzcmN2LT5zaW5mb19mbGFnczsKKwlzcC0+dGltZXRvbGl2ZSA9IHNyY3YtPnNp
bmZvX3RpbWV0b2xpdmU7CisJc3AtPnBwaWQgPSBzcmN2LT5zaW5mb19wcGlkOworCXNwLT5jb250
ZXh0ID0gc3Jjdi0+c2luZm9fY29udGV4dDsKKwlzcC0+ZnNuID0gMDsKKwlpZiAoc3AtPnNpbmZv
X2ZsYWdzICYgU0NUUF9BRERSX09WRVIpIHsKKwkJc3AtPm5ldCA9IG5ldDsKKwkJYXRvbWljX2Fk
ZF9pbnQoJnNwLT5uZXQtPnJlZl9jb3VudCwgMSk7CisJfSBlbHNlIHsKKwkJc3AtPm5ldCA9IE5V
TEw7CisJfQorCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZzcC0+dHMpOworCXNwLT5zaWQg
PSBzcmN2LT5zaW5mb19zdHJlYW07CisJc3AtPm1zZ19pc19jb21wbGV0ZSA9IDE7CisJc3AtPnNl
bmRlcl9hbGxfZG9uZSA9IDE7CisJc3AtPnNvbWVfdGFrZW4gPSAwOworCXNwLT5kYXRhID0gbTsK
KwlzcC0+dGFpbF9tYnVmID0gTlVMTDsKKwlzY3RwX3NldF9wcnNjdHBfcG9saWN5KHNwKTsKKwkv
KiBXZSBjb3VsZCBpbiB0aGVvcnkgKGZvciBzZW5kYWxsKSBzaWZhIHRoZSBsZW5ndGgKKwkgKiBp
biwgYnV0IHdlIHdvdWxkIHN0aWxsIGhhdmUgdG8gaHVudCB0aHJvdWdoIHRoZQorCSAqIGNoYWlu
IHNpbmNlIHdlIG5lZWQgdG8gc2V0dXAgdGhlIHRhaWxfbWJ1ZgorCSAqLworCXNwLT5sZW5ndGgg
PSAwOworCWZvciAoYXQgPSBtOyBhdDsgYXQgPSBTQ1RQX0JVRl9ORVhUKGF0KSkgeworCQlpZiAo
U0NUUF9CVUZfTkVYVChhdCkgPT0gTlVMTCkKKwkJCXNwLT50YWlsX21idWYgPSBhdDsKKwkJc3At
Pmxlbmd0aCArPSBTQ1RQX0JVRl9MRU4oYXQpOworCX0KKwlpZiAoc3Jjdi0+c2luZm9fa2V5bnVt
YmVyX3ZhbGlkKSB7CisJCXNwLT5hdXRoX2tleWlkID0gc3Jjdi0+c2luZm9fa2V5bnVtYmVyOwor
CX0gZWxzZSB7CisJCXNwLT5hdXRoX2tleWlkID0gc3RjYi0+YXNvYy5hdXRoaW5mby5hY3RpdmVf
a2V5aWQ7CisJfQorCWlmIChzY3RwX2F1dGhfaXNfcmVxdWlyZWRfY2h1bmsoU0NUUF9EQVRBLCBz
dGNiLT5hc29jLnBlZXJfYXV0aF9jaHVua3MpKSB7CisJCXNjdHBfYXV0aF9rZXlfYWNxdWlyZShz
dGNiLCBzcC0+YXV0aF9rZXlpZCk7CisJCXNwLT5ob2xkc19rZXlfcmVmID0gMTsKKwl9CisJaWYg
KGhvbGRfc3RjYl9sb2NrID09IDApIHsKKwkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOworCX0K
KwlzY3RwX3NuZF9zYl9hbGxvYyhzdGNiLCBzcC0+bGVuZ3RoKTsKKwlhdG9taWNfYWRkX2ludCgm
c3RjYi0+YXNvYy5zdHJlYW1fcXVldWVfY250LCAxKTsKKwlUQUlMUV9JTlNFUlRfVEFJTCgmc3Ry
bS0+b3V0cXVldWUsIHNwLCBuZXh0KTsKKwlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3Nz
X2FkZF90b19zdHJlYW0oc3RjYiwgJnN0Y2ItPmFzb2MsIHN0cm0sIHNwLCAxKTsKKwltID0gTlVM
TDsKKwlpZiAoaG9sZF9zdGNiX2xvY2sgPT0gMCkgeworCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhz
dGNiKTsKKwl9CitvdXRfbm93OgorCWlmIChtKSB7CisJCXNjdHBfbV9mcmVlbShtKTsKKwl9CisJ
cmV0dXJuIChlcnJvcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWJ1ZiAqCitzY3RwX2NvcHlfbWJ1
ZmNoYWluKHN0cnVjdCBtYnVmICpjbG9uZWNoYWluLAorCQkgICAgc3RydWN0IG1idWYgKm91dGNo
YWluLAorCQkgICAgc3RydWN0IG1idWYgKiplbmRvZmNoYWluLAorCQkgICAgaW50IGNhbl90YWtl
X21idWYsCisJCSAgICBpbnQgc2l6ZW9mY3B5LAorCQkgICAgdWludDhfdCBjb3B5X2J5X3JlZikK
K3sKKwlzdHJ1Y3QgbWJ1ZiAqbTsKKwlzdHJ1Y3QgbWJ1ZiAqYXBwZW5kY2hhaW47CisJY2FkZHJf
dCBjcDsKKwlpbnQgbGVuOworCisJaWYgKGVuZG9mY2hhaW4gPT0gTlVMTCkgeworCQkvKiBlcnJv
ciAqLworCWVycm9yX291dDoKKwkJaWYgKG91dGNoYWluKQorCQkJc2N0cF9tX2ZyZWVtKG91dGNo
YWluKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWYgKGNhbl90YWtlX21idWYpIHsKKwkJYXBw
ZW5kY2hhaW4gPSBjbG9uZWNoYWluOworCX0gZWxzZSB7CisJCWlmICghY29weV9ieV9yZWYgJiYK
KwkJICAgIChzaXplb2ZjcHkgPD0gKGludCkoKCgoU0NUUF9CQVNFX1NZU0NUTChzY3RwX21idWZf
dGhyZXNob2xkX2NvdW50KSAtIDEpICogTUxFTikgKyBNSExFTikpKSkgeworCQkJLyogSXRzIG5v
dCBpbiBhIGNsdXN0ZXIgKi8KKwkJCWlmICgqZW5kb2ZjaGFpbiA9PSBOVUxMKSB7CisJCQkJLyog
bGV0cyBnZXQgYSBtYnVmIGNsdXN0ZXIgKi8KKwkJCQlpZiAob3V0Y2hhaW4gPT0gTlVMTCkgewor
CQkJCQkvKiBUaGlzIGlzIHRoZSBnZW5lcmFsIGNhc2UgKi8KKwkJCQluZXdfbWJ1ZjoKKwkJCQkJ
b3V0Y2hhaW4gPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coTUNMQllURVMsIDAsIE1fTk9XQUlULCAx
LCBNVF9IRUFERVIpOworCQkJCQlpZiAob3V0Y2hhaW4gPT0gTlVMTCkgeworCQkJCQkJZ290byBl
cnJvcl9vdXQ7CisJCQkJCX0KKwkJCQkJU0NUUF9CVUZfTEVOKG91dGNoYWluKSA9IDA7CisJCQkJ
CSplbmRvZmNoYWluID0gb3V0Y2hhaW47CisJCQkJCS8qIGdldCB0aGUgcHJlcGVuZCBzcGFjZSAq
LworCQkJCQlTQ1RQX0JVRl9SRVNWX1VGKG91dGNoYWluLCAoU0NUUF9GSVJTVF9NQlVGX1JFU1Yr
NCkpOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIFdlIHJlYWxseSBzaG91bGQgbm90IGdldCBhIE5V
TEwgaW4gZW5kb2ZjaGFpbiAqLworCQkJCQkvKiBmaW5kIGVuZCAqLworCQkJCQltID0gb3V0Y2hh
aW47CisJCQkJCXdoaWxlIChtKSB7CisJCQkJCQlpZiAoU0NUUF9CVUZfTkVYVChtKSA9PSBOVUxM
KSB7CisJCQkJCQkJKmVuZG9mY2hhaW4gPSBtOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJ
CQkJbSA9IFNDVFBfQlVGX05FWFQobSk7CisJCQkJCX0KKwkJCQkJLyogc2FuaXR5ICovCisJCQkJ
CWlmICgqZW5kb2ZjaGFpbiA9PSBOVUxMKSB7CisJCQkJCQkvKiBodWgsIFRTTkggWFhYIG1heWJl
IHdlIHNob3VsZCBwYW5pYyAqLworCQkJCQkJc2N0cF9tX2ZyZWVtKG91dGNoYWluKTsKKwkJCQkJ
CWdvdG8gbmV3X21idWY7CisJCQkJCX0KKwkJCQl9CisJCQkJLyogZ2V0IHRoZSBuZXcgZW5kIG9m
IGxlbmd0aCAqLworCQkJCWxlbiA9IChpbnQpTV9UUkFJTElOR1NQQUNFKCplbmRvZmNoYWluKTsK
KwkJCX0gZWxzZSB7CisJCQkJLyogaG93IG11Y2ggaXMgbGVmdCBhdCB0aGUgZW5kPyAqLworCQkJ
CWxlbiA9IChpbnQpTV9UUkFJTElOR1NQQUNFKCplbmRvZmNoYWluKTsKKwkJCX0KKwkJCS8qIEZp
bmQgdGhlIGVuZCBvZiB0aGUgZGF0YSwgZm9yIGFwcGVuZGluZyAqLworCQkJY3AgPSAobXRvZCgo
KmVuZG9mY2hhaW4pLCBjYWRkcl90KSArIFNDVFBfQlVGX0xFTigoKmVuZG9mY2hhaW4pKSk7CisK
KwkJCS8qIE5vdyBsZXRzIGNvcHkgaXQgb3V0ICovCisJCQlpZiAobGVuID49IHNpemVvZmNweSkg
eworCQkJCS8qIEl0IGFsbCBmaXRzLCBjb3B5IGl0IGluICovCisJCQkJbV9jb3B5ZGF0YShjbG9u
ZWNoYWluLCAwLCBzaXplb2ZjcHksIGNwKTsKKwkJCQlTQ1RQX0JVRl9MRU4oKCplbmRvZmNoYWlu
KSkgKz0gc2l6ZW9mY3B5OworCQkJfSBlbHNlIHsKKwkJCQkvKiBmaWxsIHVwIHRoZSBlbmQgb2Yg
dGhlIGNoYWluICovCisJCQkJaWYgKGxlbiA+IDApIHsKKwkJCQkJbV9jb3B5ZGF0YShjbG9uZWNo
YWluLCAwLCBsZW4sIGNwKTsKKwkJCQkJU0NUUF9CVUZfTEVOKCgqZW5kb2ZjaGFpbikpICs9IGxl
bjsKKwkJCQkJLyogbm93IHdlIG5lZWQgYW5vdGhlciBvbmUgKi8KKwkJCQkJc2l6ZW9mY3B5IC09
IGxlbjsKKwkJCQl9CisJCQkJbSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhNQ0xCWVRFUywgMCwg
TV9OT1dBSVQsIDEsIE1UX0hFQURFUik7CisJCQkJaWYgKG0gPT0gTlVMTCkgeworCQkJCQkvKiBX
ZSBmYWlsZWQgKi8KKwkJCQkJZ290byBlcnJvcl9vdXQ7CisJCQkJfQorCQkJCVNDVFBfQlVGX05F
WFQoKCplbmRvZmNoYWluKSkgPSBtOworCQkJCSplbmRvZmNoYWluID0gbTsKKwkJCQljcCA9IG10
b2QoKCplbmRvZmNoYWluKSwgY2FkZHJfdCk7CisJCQkJbV9jb3B5ZGF0YShjbG9uZWNoYWluLCBs
ZW4sIHNpemVvZmNweSwgY3ApOworCQkJCVNDVFBfQlVGX0xFTigoKmVuZG9mY2hhaW4pKSArPSBz
aXplb2ZjcHk7CisJCQl9CisJCQlyZXR1cm4gKG91dGNoYWluKTsKKwkJfSBlbHNlIHsKKwkJCS8q
IGNvcHkgdGhlIG9sZCBmYXNoaW9uIHdheSAqLworCQkJYXBwZW5kY2hhaW4gPSBTQ1RQX01fQ09Q
WU0oY2xvbmVjaGFpbiwgMCwgTV9DT1BZQUxMLCBNX05PV0FJVCk7CisjaWZkZWYgU0NUUF9NQlVG
X0xPR0dJTkcKKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBT
Q1RQX01CVUZfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQlzY3RwX2xvZ19tYmMoYXBwZW5kY2hhaW4s
IFNDVFBfTUJVRl9JQ09QWSk7CisJCQl9CisjZW5kaWYKKwkJfQorCX0KKwlpZiAoYXBwZW5kY2hh
aW4gPT0gTlVMTCkgeworCQkvKiBlcnJvciAqLworCQlpZiAob3V0Y2hhaW4pCisJCQlzY3RwX21f
ZnJlZW0ob3V0Y2hhaW4pOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlpZiAob3V0Y2hhaW4pIHsK
KwkJLyogdGFjayBvbiB0byB0aGUgZW5kICovCisJCWlmICgqZW5kb2ZjaGFpbiAhPSBOVUxMKSB7
CisJCQlTQ1RQX0JVRl9ORVhUKCgoKmVuZG9mY2hhaW4pKSkgPSBhcHBlbmRjaGFpbjsKKwkJfSBl
bHNlIHsKKwkJCW0gPSBvdXRjaGFpbjsKKwkJCXdoaWxlIChtKSB7CisJCQkJaWYgKFNDVFBfQlVG
X05FWFQobSkgPT0gTlVMTCkgeworCQkJCQlTQ1RQX0JVRl9ORVhUKG0pID0gYXBwZW5kY2hhaW47
CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQltID0gU0NUUF9CVUZfTkVYVChtKTsKKwkJCX0KKwkJ
fQorCQkvKgorCQkgKiBzYXZlIG9mZiB0aGUgZW5kIGFuZCB1cGRhdGUgdGhlIGVuZC1jaGFpbgor
CQkgKiBwb3NpdGlvbgorCQkgKi8KKwkJbSA9IGFwcGVuZGNoYWluOworCQl3aGlsZSAobSkgewor
CQkJaWYgKFNDVFBfQlVGX05FWFQobSkgPT0gTlVMTCkgeworCQkJCSplbmRvZmNoYWluID0gbTsK
KwkJCQlicmVhazsKKwkJCX0KKwkJCW0gPSBTQ1RQX0JVRl9ORVhUKG0pOworCQl9CisJCXJldHVy
biAob3V0Y2hhaW4pOworCX0gZWxzZSB7CisJCS8qIHNhdmUgb2ZmIHRoZSBlbmQgYW5kIHVwZGF0
ZSB0aGUgZW5kLWNoYWluIHBvc2l0aW9uICovCisJCW0gPSBhcHBlbmRjaGFpbjsKKwkJd2hpbGUg
KG0pIHsKKwkJCWlmIChTQ1RQX0JVRl9ORVhUKG0pID09IE5VTEwpIHsKKwkJCQkqZW5kb2ZjaGFp
biA9IG07CisJCQkJYnJlYWs7CisJCQl9CisJCQltID0gU0NUUF9CVUZfTkVYVChtKTsKKwkJfQor
CQlyZXR1cm4gKGFwcGVuZGNoYWluKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfbWVkX2No
dW5rX291dHB1dChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorCQkgICAgICBzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsCisJCSAgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCQkgICAg
ICBpbnQgKm51bV9vdXQsCisJCSAgICAgIGludCAqcmVhc29uX2NvZGUsCisJCSAgICAgIGludCBj
b250cm9sX29ubHksIGludCBmcm9tX3doZXJlLAorCQkgICAgICBzdHJ1Y3QgdGltZXZhbCAqbm93
LCBpbnQgKm5vd19maWxsZWQsIGludCBmcmFnX3BvaW50LCBpbnQgc29fbG9ja2VkKTsKKworc3Rh
dGljIHZvaWQKK3NjdHBfc2VuZGFsbF9pdGVyYXRvcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHZvaWQgKnB0ciwKKyAgICB1aW50MzJfdCB2YWwgU0NUUF9V
TlVTRUQpCit7CisJc3RydWN0IHNjdHBfY29weV9hbGwgKmNhOworCXN0cnVjdCBtYnVmICptOwor
CWludCByZXQgPSAwOworCWludCBhZGRlZF9jb250cm9sID0gMDsKKwlpbnQgdW5fc2VudCwgZG9f
Y2h1bmtfb3V0cHV0ID0gMTsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1
Y3Qgc2N0cF9uZXRzICpuZXQ7CisKKwljYSA9IChzdHJ1Y3Qgc2N0cF9jb3B5X2FsbCAqKXB0cjsK
KwlpZiAoY2EtPm0gPT0gTlVMTCkgeworCQlyZXR1cm47CisJfQorCWlmIChjYS0+aW5wICE9IGlu
cCkgeworCQkvKiBUU05IICovCisJCXJldHVybjsKKwl9CisJaWYgKGNhLT5zbmRsZW4gPiAwKSB7
CisJCW0gPSBTQ1RQX01fQ09QWU0oY2EtPm0sIDAsIE1fQ09QWUFMTCwgTV9OT1dBSVQpOworCQlp
ZiAobSA9PSBOVUxMKSB7CisJCQkvKiBjYW4ndCBjb3B5IHNvIHdlIGFyZSBkb25lICovCisJCQlj
YS0+Y250X2ZhaWxlZCsrOworCQkJcmV0dXJuOworCQl9CisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJ
TkcKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUJV
Rl9MT0dHSU5HX0VOQUJMRSkgeworCQkJc2N0cF9sb2dfbWJjKG0sIFNDVFBfTUJVRl9JQ09QWSk7
CisJCX0KKyNlbmRpZgorCX0gZWxzZSB7CisJCW0gPSBOVUxMOworCX0KKwlTQ1RQX1RDQl9MT0NL
X0FTU0VSVChzdGNiKTsKKwlpZiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsKKwkJbmV0ID0gc3Rj
Yi0+YXNvYy5hbHRlcm5hdGU7CisJfSBlbHNlIHsKKwkJbmV0ID0gc3RjYi0+YXNvYy5wcmltYXJ5
X2Rlc3RpbmF0aW9uOworCX0KKwlpZiAoY2EtPnNuZHJjdi5zaW5mb19mbGFncyAmIFNDVFBfQUJP
UlQpIHsKKwkJLyogQWJvcnQgdGhpcyBhc3NvYyB3aXRoIG0gYXMgdGhlIHVzZXIgZGVmaW5lZCBy
ZWFzb24gKi8KKwkJaWYgKG0gIT0gTlVMTCkgeworCQkJU0NUUF9CVUZfUFJFUEVORChtLCBzaXpl
b2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpLCBNX05PV0FJVCk7CisJCX0gZWxzZSB7CisJCQltID0g
c2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkciksCisJCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwkJCVND
VFBfQlVGX0xFTihtKSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcik7CisJCX0KKwkJaWYg
KG0gIT0gTlVMTCkgeworCQkJc3RydWN0IHNjdHBfcGFyYW1oZHIgKnBoOworCisJCQlwaCA9IG10
b2QobSwgc3RydWN0IHNjdHBfcGFyYW1oZHIgKik7CisJCQlwaC0+cGFyYW1fdHlwZSA9IGh0b25z
KFNDVFBfQ0FVU0VfVVNFUl9JTklUSUFURURfQUJUKTsKKwkJCXBoLT5wYXJhbV9sZW5ndGggPSBo
dG9ucygodWludDE2X3QpKHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgKyBjYS0+c25kbGVu
KSk7CisJCX0KKwkJLyogV2UgYWRkIG9uZSBoZXJlIHRvIGtlZXAgdGhlIGFzc29jIGZyb20KKwkJ
ICogZGlzLWFwcGVhcmluZyBvbiB1cy4KKwkJICovCisJCWF0b21pY19hZGRfaW50KCZzdGNiLT5h
c29jLnJlZmNudCwgMSk7CisJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oaW5wLCBzdGNiLCBt
LCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkvKiBzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uIGNh
bGxzIHNjdHBfZnJlZV9hc29jKCkKKwkJICogZnJlZSBhc3NvY2lhdGlvbiB3aWxsIE5PVCBmcmVl
IGl0IHNpbmNlIHdlCisJCSAqIGluY3JlbWVudGVkIHRoZSByZWZjbnQgLi4gd2UgZG8gdGhpcyB0
byBwcmV2ZW50CisJCSAqIGl0IGJlaW5nIGZyZWVkIGFuZCB0aGluZ3MgZ2V0dGluZyB0cmlja3kg
c2luY2UKKwkJICogd2UgY291bGQgZW5kIHVwIChmcm9tIGZyZWVfYXNvYykgY2FsbGluZyBpbnBj
Yl9mcmVlCisJCSAqIHdoaWNoIHdvdWxkIGdldCBhIHJlY3Vyc2l2ZSBsb2NrIGNhbGwgdG8gdGhl
CisJCSAqIGl0ZXJhdG9yIGxvY2suLiBCdXQgYXMgYSBjb25zZXF1ZW5jZSBvZiB0aGF0IHRoZQor
CQkgKiBzdGNiIHdpbGwgcmV0dXJuIHRvIHVzIHVuLWxvY2tlZC4uIHNpbmNlIGZyZWVfYXNvYwor
CQkgKiByZXR1cm5zIHdpdGggZWl0aGVyIG5vIFRDQiBvciB0aGUgVENCIHVubG9ja2VkLCB3ZQor
CQkgKiBtdXN0IHJlbG9jay4uIHRvIHVubG9jayBpbiB0aGUgaXRlcmF0b3IgdGltZXIgOi0wCisJ
CSAqLworCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNv
Yy5yZWZjbnQsIC0xKTsKKwkJZ290byBub19jaHVua19vdXRwdXQ7CisJfSBlbHNlIHsKKwkJaWYg
KG0pIHsKKwkJCXJldCA9IHNjdHBfbXNnX2FwcGVuZChzdGNiLCBuZXQsIG0sCisJCQkJCSAgICAg
ICZjYS0+c25kcmN2LCAxKTsKKwkJfQorCQlhc29jID0gJnN0Y2ItPmFzb2M7CisJCWlmIChjYS0+
c25kcmN2LnNpbmZvX2ZsYWdzICYgU0NUUF9FT0YpIHsKKwkJCS8qIHNodXRkb3duIHRoaXMgYXNz
b2MgKi8KKwkJCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+c2VuZF9xdWV1ZSkgJiYKKwkJCSAgICBU
QUlMUV9FTVBUWSgmYXNvYy0+c2VudF9xdWV1ZSkgJiYKKwkJCSAgICBzY3RwX2lzX3RoZXJlX3Vu
c2VudF9kYXRhKHN0Y2IsIFNDVFBfU09fTk9UX0xPQ0tFRCkgPT0gMCkgeworCQkJCWlmICgoKmFz
b2MtPnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlKShzdGNiLCBh
c29jKSkgeworCQkJCQlnb3RvIGFib3J0X2FueXdheTsKKwkJCQl9CisJCQkJLyogdGhlcmUgaXMg
bm90aGluZyBxdWV1ZWQgdG8gc2VuZCwgc28gSSdtIGRvbmUuLi4gKi8KKwkJCQlpZiAoKFNDVFBf
R0VUX1NUQVRFKHN0Y2IpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCkgJiYKKwkJCQkgICAg
KFNDVFBfR0VUX1NUQVRFKHN0Y2IpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpICYm
CisJCQkJICAgIChTQ1RQX0dFVF9TVEFURShzdGNiKSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dOX0FD
S19TRU5UKSkgeworCQkJCQkvKiBvbmx5IHNlbmQgU0hVVERPV04gdGhlIGZpcnN0IHRpbWUgdGhy
b3VnaCAqLworCQkJCQlpZiAoU0NUUF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9PUEVO
KSB7CisJCQkJCQlTQ1RQX1NUQVRfREVDUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7CisJCQkJ
CX0KKwkJCQkJU0NUUF9TRVRfU1RBVEUoc3RjYiwgU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKTsK
KwkJCQkJc2N0cF9zdG9wX3RpbWVyc19mb3Jfc2h1dGRvd24oc3RjYik7CisJCQkJCXNjdHBfc2Vu
ZF9zaHV0ZG93bihzdGNiLCBuZXQpOworCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJf
VFlQRV9TSFVURE9XTiwgc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJCQkJCQkgbmV0KTsKKwkJCQkJ
c2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05HVUFSRCwgc3RjYi0+c2N0
cF9lcCwgc3RjYiwKKwkJCQkJICAgICAgICAgICAgICAgICBOVUxMKTsKKwkJCQkJYWRkZWRfY29u
dHJvbCA9IDE7CisJCQkJCWRvX2NodW5rX291dHB1dCA9IDA7CisJCQkJfQorCQkJfSBlbHNlIHsK
KwkJCQkvKgorCQkJCSAqIHdlIHN0aWxsIGdvdCAob3IganVzdCBnb3QpIGRhdGEgdG8gc2VuZCwg
c28gc2V0CisJCQkJICogU0hVVERPV05fUEVORElORworCQkJCSAqLworCQkJCS8qCisJCQkJICog
WFhYIHNvY2tldHMgZHJhZnQgc2F5cyB0aGF0IFNDVFBfRU9GIHNob3VsZCBiZQorCQkJCSAqIHNl
bnQgd2l0aCBubyBkYXRhLiAgY3VycmVudGx5LCB3ZSB3aWxsIGFsbG93IHVzZXIKKwkJCQkgKiBk
YXRhIHRvIGJlIHNlbnQgZmlyc3QgYW5kIG1vdmUgdG8KKwkJCQkgKiBTSFVURE9XTi1QRU5ESU5H
CisJCQkJICovCisJCQkJaWYgKChTQ1RQX0dFVF9TVEFURShzdGNiKSAhPSBTQ1RQX1NUQVRFX1NI
VVRET1dOX1NFTlQpICYmCisJCQkJICAgIChTQ1RQX0dFVF9TVEFURShzdGNiKSAhPSBTQ1RQX1NU
QVRFX1NIVVRET1dOX1JFQ0VJVkVEKSAmJgorCQkJCSAgICAoU0NUUF9HRVRfU1RBVEUoc3RjYikg
IT0gU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkpIHsKKwkJCQkJaWYgKCgqYXNvYy0+c3Nf
ZnVuY3Rpb25zLnNjdHBfc3NfaXNfdXNlcl9tc2dzX2luY29tcGxldGUpKHN0Y2IsIGFzb2MpKSB7
CisJCQkJCQlTQ1RQX0FERF9TVUJTVEFURShzdGNiLCBTQ1RQX1NUQVRFX1BBUlRJQUxfTVNHX0xF
RlQpOworCQkJCQl9CisJCQkJCVNDVFBfQUREX1NVQlNUQVRFKHN0Y2IsIFNDVFBfU1RBVEVfU0hV
VERPV05fUEVORElORyk7CisJCQkJCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+c2VuZF9xdWV1ZSkg
JiYKKwkJCQkJICAgIFRBSUxRX0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSAmJgorCQkJCQkgICAg
KGFzb2MtPnN0YXRlICYgU0NUUF9TVEFURV9QQVJUSUFMX01TR19MRUZUKSkgeworCQkJCQkJc3Ry
dWN0IG1idWYgKm9wX2VycjsKKwkJCQkJCWNoYXIgbXNnW1NDVFBfRElBR19JTkZPX0xFTl07CisK
KwkJCQkJYWJvcnRfYW55d2F5OgorCQkJCQkJU0NUUF9TTlBSSU5URihtc2csIHNpemVvZihtc2cp
LAorCQkJCQkJICAgICAgICAgICAgICAiJXM6JWQgYXQgJXMiLCBfX0ZJTEVfXywgX19MSU5FX18s
IF9fZnVuY19fKTsKKwkJCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKKwkJCQkJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbXNnKTsKKwkJCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwg
MSk7CisJCQkJCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
CisJCQkJCQkJCQkgIG9wX2VyciwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCQkJCWF0b21pY19h
ZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgLTEpOworCQkJCQkJZ290byBub19jaHVua19vdXRw
dXQ7CisJCQkJCX0KKwkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERP
V05HVUFSRCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJCQkJICAgICAgICAgICAgICAgICBOVUxM
KTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJdW5fc2VudCA9ICgoc3RjYi0+YXNvYy50b3RhbF9v
dXRwdXRfcXVldWVfc2l6ZSAtIHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0KSArCisJCSAgIChzdGNi
LT5hc29jLnN0cmVhbV9xdWV1ZV9jbnQgKiBTQ1RQX0RBVEFfQ0hVTktfT1ZFUkhFQUQoc3RjYikp
KTsKKworCWlmICgoc2N0cF9pc19mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX05PREVM
QVkpKSAmJgorCSAgICAoc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQgPiAwKSAmJgorCSAgICAodW5f
c2VudCA8IChpbnQpKHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1IC0gU0NUUF9NSU5fT1ZFUkhFQUQp
KSkgeworCQlkb19jaHVua19vdXRwdXQgPSAwOworCX0KKwlpZiAoZG9fY2h1bmtfb3V0cHV0KQor
CQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fVVNSX1NFTkQs
IFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJZWxzZSBpZiAoYWRkZWRfY29udHJvbCkgeworCQlpbnQg
bnVtX291dCwgcmVhc29uLCBub3dfZmlsbGVkID0gMDsKKwkJc3RydWN0IHRpbWV2YWwgbm93Owor
CQlpbnQgZnJhZ19wb2ludDsKKworCQlmcmFnX3BvaW50ID0gc2N0cF9nZXRfZnJhZ19wb2ludChz
dGNiLCAmc3RjYi0+YXNvYyk7CisJCSh2b2lkKXNjdHBfbWVkX2NodW5rX291dHB1dChpbnAsIHN0
Y2IsICZzdGNiLT5hc29jLCAmbnVtX291dCwKKwkJCQkgICAgICAmcmVhc29uLCAxLCAxLCAmbm93
LCAmbm93X2ZpbGxlZCwgZnJhZ19wb2ludCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwl9Cisgbm9f
Y2h1bmtfb3V0cHV0OgorCWlmIChyZXQpIHsKKwkJY2EtPmNudF9mYWlsZWQrKzsKKwl9IGVsc2Ug
eworCQljYS0+Y250X3NlbnQrKzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3NlbmRhbGxf
Y29tcGxldGVzKHZvaWQgKnB0ciwgdWludDMyX3QgdmFsIFNDVFBfVU5VU0VEKQoreworCXN0cnVj
dCBzY3RwX2NvcHlfYWxsICpjYTsKKworCWNhID0gKHN0cnVjdCBzY3RwX2NvcHlfYWxsICopcHRy
OworCS8qCisJICogRG8gYSBub3RpZnkgaGVyZT8gS2FjaGVvbmcgc3VnZ2VzdHMgdGhhdCB0aGUg
bm90aWZ5IGJlIGRvbmUgYXQKKwkgKiB0aGUgc2VuZCB0aW1lLi4gc28geW91IHdvdWxkIHB1c2gg
dXAgYSBub3RpZmljYXRpb24gaWYgYW55IHNlbmQKKwkgKiBmYWlsZWQuIERvbid0IGtub3cgaWYg
dGhpcyBpcyBmZWFzaWJsZSBzaW5jZSB0aGUgb25seSBmYWlsdXJlcyB3ZQorCSAqIGhhdmUgaXMg
Im1lbW9yeSIgcmVsYXRlZCBhbmQgaWYgeW91IGNhbm5vdCBnZXQgYW4gbWJ1ZiB0byBzZW5kCisJ
ICogdGhlIGRhdGEgeW91IHN1cmVseSBjYW4ndCBnZXQgYW4gbWJ1ZiB0byBzZW5kIHVwIHRvIG5v
dGlmeSB0aGUKKwkgKiB1c2VyIHlvdSBjYW4ndCBzZW5kIHRoZSBkYXRhIDotPgorCSAqLworCisJ
Lyogbm93IGZyZWUgZXZlcnl0aGluZyAqLworCWlmIChjYS0+aW5wKSB7CisJCS8qIExldHMgY2xl
YXIgdGhlIGZsYWcgdG8gYWxsb3cgb3RoZXJzIHRvIHJ1bi4gKi8KKwkJY2EtPmlucC0+c2N0cF9m
bGFncyAmPSB+U0NUUF9QQ0JfRkxBR1NfU05EX0lURVJBVE9SX1VQOworCX0KKwlzY3RwX21fZnJl
ZW0oY2EtPm0pOworCVNDVFBfRlJFRShjYSwgU0NUUF9NX0NPUFlBTCk7Cit9CisKK3N0YXRpYyBz
dHJ1Y3QgbWJ1ZiAqCitzY3RwX2NvcHlfb3V0X2FsbChzdHJ1Y3QgdWlvICp1aW8sIHNzaXplX3Qg
bGVuKQoreworCXN0cnVjdCBtYnVmICpyZXQsICphdDsKKwlzc2l6ZV90IGxlZnQsIHdpbGxjcHks
IGNhbmNweSwgZXJyb3I7CisKKwlyZXQgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coTUNMQllURVMs
IDAsIE1fV0FJVE9LLCAxLCBNVF9EQVRBKTsKKwlpZiAocmV0ID09IE5VTEwpIHsKKwkJLyogVFNO
SCAqLworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlsZWZ0ID0gbGVuOworCVNDVFBfQlVGX0xFTihy
ZXQpID0gMDsKKwkvKiBzYXZlIHNwYWNlIGZvciB0aGUgZGF0YSBjaHVuayBoZWFkZXIgKi8KKwlj
YW5jcHkgPSAoaW50KU1fVFJBSUxJTkdTUEFDRShyZXQpOworCXdpbGxjcHkgPSBtaW4oY2FuY3B5
LCBsZWZ0KTsKKwlhdCA9IHJldDsKKwl3aGlsZSAobGVmdCA+IDApIHsKKwkJLyogQWxpZ24gZGF0
YSB0byB0aGUgZW5kICovCisJCWVycm9yID0gdWlvbW92ZShtdG9kKGF0LCBjYWRkcl90KSwgKGlu
dCl3aWxsY3B5LCB1aW8pOworCQlpZiAoZXJyb3IpIHsKKwllcnJfb3V0X25vdzoKKwkJCXNjdHBf
bV9mcmVlbShhdCk7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCVNDVFBfQlVGX0xFTihhdCkg
PSAoaW50KXdpbGxjcHk7CisJCVNDVFBfQlVGX05FWFRfUEtUKGF0KSA9IFNDVFBfQlVGX05FWFQo
YXQpID0gMDsKKwkJbGVmdCAtPSB3aWxsY3B5OworCQlpZiAobGVmdCA+IDApIHsKKwkJCVNDVFBf
QlVGX05FWFQoYXQpID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKCh1bnNpZ25lZCBpbnQpbGVmdCwg
MCwgTV9XQUlUT0ssIDEsIE1UX0RBVEEpOworCQkJaWYgKFNDVFBfQlVGX05FWFQoYXQpID09IE5V
TEwpIHsKKwkJCQlnb3RvIGVycl9vdXRfbm93OworCQkJfQorCQkJYXQgPSBTQ1RQX0JVRl9ORVhU
KGF0KTsKKwkJCVNDVFBfQlVGX0xFTihhdCkgPSAwOworCQkJY2FuY3B5ID0gKGludClNX1RSQUlM
SU5HU1BBQ0UoYXQpOworCQkJd2lsbGNweSA9IG1pbihjYW5jcHksIGxlZnQpOworCQl9CisJfQor
CXJldHVybiAocmV0KTsKK30KKworc3RhdGljIGludAorc2N0cF9zZW5kYWxsKHN0cnVjdCBzY3Rw
X2lucGNiICppbnAsIHN0cnVjdCB1aW8gKnVpbywgc3RydWN0IG1idWYgKm0sCisgICAgc3RydWN0
IHNjdHBfc25kcmN2aW5mbyAqc3JjdikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzY3RwX2NvcHlf
YWxsICpjYTsKKworCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TTkRfSVRF
UkFUT1JfVVApIHsKKwkJLyogVGhlcmUgaXMgYW5vdGhlci4gKi8KKwkJcmV0dXJuIChFQlVTWSk7
CisJfQorI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
I2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkKKwlpZiAodWlvLT51aW9fcmVzaWQgPiBTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfc2VuZGFsbF9saW1pdCkpIHsKKyNlbHNlCisJaWYgKHVpb19yZXNpZCh1
aW8pID4gU0NUUF9CQVNFX1NZU0NUTChzY3RwX3NlbmRhbGxfbGltaXQpKSB7CisjZW5kaWYKKyNl
bHNlCisJaWYgKHVpby0+dWlvX3Jlc2lkID4gKHNzaXplX3QpU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X3NlbmRhbGxfbGltaXQpKSB7CisjZW5kaWYKKwkJLyogWW91IG11c3Qgbm90IGJlIGxhcmdlciB0
aGFuIHRoZSBsaW1pdCEgKi8KKwkJcmV0dXJuIChFTVNHU0laRSk7CisJfQorCVNDVFBfTUFMTE9D
KGNhLCBzdHJ1Y3Qgc2N0cF9jb3B5X2FsbCAqLCBzaXplb2Yoc3RydWN0IHNjdHBfY29weV9hbGwp
LAorCQkgICAgU0NUUF9NX0NPUFlBTCk7CisJaWYgKGNhID09IE5VTEwpIHsKKwkJc2N0cF9tX2Zy
ZWVtKG0pOworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfT1VUUFVULCBFTk9NRU0pOworCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCW1lbXNldChj
YSwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2NvcHlfYWxsKSk7CisKKwljYS0+aW5wID0gaW5wOwor
CWlmIChzcmN2KSB7CisJCW1lbWNweSgmY2EtPnNuZHJjdiwgc3Jjdiwgc2l6ZW9mKHN0cnVjdCBz
Y3RwX25vbnBhZF9zbmRyY3ZpbmZvKSk7CisJfQorCS8qCisJICogdGFrZSBvZmYgdGhlIHNlbmRh
bGwgZmxhZywgaXQgd291bGQgYmUgYmFkIGlmIHdlIGZhaWxlZCB0byBkbworCSAqIHRoaXMgOi0w
CisJICovCisJY2EtPnNuZHJjdi5zaW5mb19mbGFncyAmPSB+U0NUUF9TRU5EQUxMOworCS8qIGdl
dCBsZW5ndGggYW5kIG1idWYgY2hhaW4gKi8KKwlpZiAodWlvKSB7CisjaWYgZGVmaW5lZChfX0FQ
UExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYgZGVmaW5lZChBUFBMRV9MRU9Q
QVJEKQorCQljYS0+c25kbGVuID0gdWlvLT51aW9fcmVzaWQ7CisjZWxzZQorCQljYS0+c25kbGVu
ID0gdWlvX3Jlc2lkKHVpbyk7CisjZW5kaWYKKyNlbHNlCisJCWNhLT5zbmRsZW4gPSB1aW8tPnVp
b19yZXNpZDsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soU0NUUF9JTlBfU08oaW5wKSwgMCk7Cisj
ZW5kaWYKKwkJY2EtPm0gPSBzY3RwX2NvcHlfb3V0X2FsbCh1aW8sIGNhLT5zbmRsZW4pOworI2lm
IGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlTQ1RQX1NP
Q0tFVF9MT0NLKFNDVFBfSU5QX1NPKGlucCksIDApOworI2VuZGlmCisJCWlmIChjYS0+bSA9PSBO
VUxMKSB7CisJCQlTQ1RQX0ZSRUUoY2EsIFNDVFBfTV9DT1BZQUwpOworCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRU5PTUVNKTsK
KwkJCXJldHVybiAoRU5PTUVNKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIEdhdGhlciB0aGUgbGVu
Z3RoIG9mIHRoZSBzZW5kICovCisJCXN0cnVjdCBtYnVmICptYXQ7CisKKwkJY2EtPnNuZGxlbiA9
IDA7CisJCWZvciAobWF0ID0gbTsgbWF0OyBtYXQgPSBTQ1RQX0JVRl9ORVhUKG1hdCkpIHsKKwkJ
CWNhLT5zbmRsZW4gKz0gU0NUUF9CVUZfTEVOKG1hdCk7CisJCX0KKwl9CisJaW5wLT5zY3RwX2Zs
YWdzIHw9IFNDVFBfUENCX0ZMQUdTX1NORF9JVEVSQVRPUl9VUDsKKwlyZXQgPSBzY3RwX2luaXRp
YXRlX2l0ZXJhdG9yKE5VTEwsIHNjdHBfc2VuZGFsbF9pdGVyYXRvciwgTlVMTCwKKwkJCQkgICAg
IFNDVFBfUENCX0FOWV9GTEFHUywgU0NUUF9QQ0JfQU5ZX0ZFQVRVUkVTLAorCQkJCSAgICAgU0NU
UF9BU09DX0FOWV9TVEFURSwKKwkJCQkgICAgICh2b2lkICopY2EsIDAsCisJCQkJICAgICBzY3Rw
X3NlbmRhbGxfY29tcGxldGVzLCBpbnAsIDEpOworCWlmIChyZXQpIHsKKwkJaW5wLT5zY3RwX2Zs
YWdzICY9IH5TQ1RQX1BDQl9GTEFHU19TTkRfSVRFUkFUT1JfVVA7CisJCVNDVFBfRlJFRShjYSwg
U0NUUF9NX0NPUFlBTCk7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFRkFVTFQpOworCQlyZXR1cm4gKEVGQVVMVCk7
CisJfQorCXJldHVybiAoMCk7Cit9CisKK3ZvaWQKK3NjdHBfdG9zc19vbGRfY29va2llcyhzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQoreworCXN0
cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywgKm5jaGs7CisKKwlUQUlMUV9GT1JFQUNIX1NBRkUo
Y2hrLCAmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBzY3RwX25leHQsIG5jaGspIHsKKwkJaWYg
KGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfQ09PS0lFX0VDSE8pIHsKKwkJCVRBSUxRX1JF
TU9WRSgmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7CisJCQlhc29j
LT5jdHJsX3F1ZXVlX2NudC0tOworCQkJaWYgKGNoay0+ZGF0YSkgeworCQkJCXNjdHBfbV9mcmVl
bShjaGstPmRhdGEpOworCQkJCWNoay0+ZGF0YSA9IE5VTEw7CisJCQl9CisJCQlzY3RwX2ZyZWVf
YV9jaHVuayhzdGNiLCBjaGssIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCX0KKwl9Cit9CisKK3Zv
aWQKK3NjdHBfdG9zc19vbGRfYXNjb25mKHN0cnVjdCBzY3RwX3RjYiAqc3RjYikKK3sKKwlzdHJ1
Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGss
ICpuY2hrOworCXN0cnVjdCBzY3RwX2FzY29uZl9jaHVuayAqYWNwOworCisJYXNvYyA9ICZzdGNi
LT5hc29jOworCVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGssICZhc29jLT5hc2NvbmZfc2VuZF9xdWV1
ZSwgc2N0cF9uZXh0LCBuY2hrKSB7CisJCS8qIGZpbmQgU0NUUF9BU0NPTkYgY2h1bmsgaW4gcXVl
dWUgKi8KKwkJaWYgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfQVNDT05GKSB7CisJCQlp
ZiAoY2hrLT5kYXRhKSB7CisJCQkJYWNwID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2Fz
Y29uZl9jaHVuayAqKTsKKwkJCQlpZiAoU0NUUF9UU05fR1QobnRvaGwoYWNwLT5zZXJpYWxfbnVt
YmVyKSwgYXNvYy0+YXNjb25mX3NlcV9vdXRfYWNrZWQpKSB7CisJCQkJCS8qIE5vdCBBY2tlZCB5
ZXQgKi8KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5h
c2NvbmZfc2VuZF9xdWV1ZSwgY2hrLCBzY3RwX25leHQpOworCQkJYXNvYy0+Y3RybF9xdWV1ZV9j
bnQtLTsKKwkJCWlmIChjaGstPmRhdGEpIHsKKwkJCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRhKTsK
KwkJCQljaGstPmRhdGEgPSBOVUxMOworCQkJfQorCQkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwg
Y2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZAorc2N0
cF9jbGVhbl91cF9kYXRhbGlzdChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNj
dHBfYXNzb2NpYXRpb24gKmFzb2MsCisgICAgc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqKmRhdGFf
bGlzdCwKKyAgICBpbnQgYnVuZGxlX2F0LAorICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sK
KwlpbnQgaTsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICp0cDE7CisKKwlmb3IgKGkgPSAwOyBp
IDwgYnVuZGxlX2F0OyBpKyspIHsKKwkJLyogb2ZmIG9mIHRoZSBzZW5kIHF1ZXVlICovCisJCVRB
SUxRX1JFTU9WRSgmYXNvYy0+c2VuZF9xdWV1ZSwgZGF0YV9saXN0W2ldLCBzY3RwX25leHQpOwor
CQlhc29jLT5zZW5kX3F1ZXVlX2NudC0tOworCQlpZiAoaSA+IDApIHsKKwkJCS8qCisJCQkgKiBB
bnkgY2h1bmsgTk9UIDAgeW91IHphcCB0aGUgdGltZSBjaHVuayAwIGdldHMKKwkJCSAqIHphcHBl
ZCBvciBzZXQgYmFzZWQgb24gaWYgYSBSVE8gbWVhc3VybWVudCBpcworCQkJICogbmVlZGVkLgor
CQkJICovCisJCQlkYXRhX2xpc3RbaV0tPmRvX3J0dCA9IDA7CisJCX0KKwkJLyogcmVjb3JkIHRp
bWUgKi8KKwkJZGF0YV9saXN0W2ldLT5zZW50X3Jjdl90aW1lID0gbmV0LT5sYXN0X3NlbnRfdGlt
ZTsKKwkJZGF0YV9saXN0W2ldLT5yZWMuZGF0YS5jd25kX2F0X3NlbmQgPSBuZXQtPmN3bmQ7CisJ
CWRhdGFfbGlzdFtpXS0+cmVjLmRhdGEuZmFzdF9yZXRyYW5fdHNuID0gZGF0YV9saXN0W2ldLT5y
ZWMuZGF0YS50c247CisJCWlmIChkYXRhX2xpc3RbaV0tPndob1RvID09IE5VTEwpIHsKKwkJCWRh
dGFfbGlzdFtpXS0+d2hvVG8gPSBuZXQ7CisJCQlhdG9taWNfYWRkX2ludCgmbmV0LT5yZWZfY291
bnQsIDEpOworCQl9CisJCS8qIG9uIHRvIHRoZSBzZW50IHF1ZXVlICovCisJCXRwMSA9IFRBSUxR
X0xBU1QoJmFzb2MtPnNlbnRfcXVldWUsIHNjdHBjaHVua19saXN0aGVhZCk7CisJCWlmICgodHAx
KSAmJiBTQ1RQX1RTTl9HVCh0cDEtPnJlYy5kYXRhLnRzbiwgZGF0YV9saXN0W2ldLT5yZWMuZGF0
YS50c24pKSB7CisJCQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICp0cHA7CisKKwkJCS8qIG5lZWQg
dG8gbW92ZSBiYWNrICovCisJCWJhY2tfdXBfbW9yZToKKwkJCXRwcCA9IFRBSUxRX1BSRVYodHAx
LCBzY3RwY2h1bmtfbGlzdGhlYWQsIHNjdHBfbmV4dCk7CisJCQlpZiAodHBwID09IE5VTEwpIHsK
KwkJCQlUQUlMUV9JTlNFUlRfQkVGT1JFKHRwMSwgZGF0YV9saXN0W2ldLCBzY3RwX25leHQpOwor
CQkJCWdvdG8gYWxsX2RvbmU7CisJCQl9CisJCQl0cDEgPSB0cHA7CisJCQlpZiAoU0NUUF9UU05f
R1QodHAxLT5yZWMuZGF0YS50c24sIGRhdGFfbGlzdFtpXS0+cmVjLmRhdGEudHNuKSkgeworCQkJ
CWdvdG8gYmFja191cF9tb3JlOworCQkJfQorCQkJVEFJTFFfSU5TRVJUX0FGVEVSKCZhc29jLT5z
ZW50X3F1ZXVlLCB0cDEsIGRhdGFfbGlzdFtpXSwgc2N0cF9uZXh0KTsKKwkJfSBlbHNlIHsKKwkJ
CVRBSUxRX0lOU0VSVF9UQUlMKCZhc29jLT5zZW50X3F1ZXVlLAorCQkJCQkgIGRhdGFfbGlzdFtp
XSwKKwkJCQkJICBzY3RwX25leHQpOworCQl9CisJYWxsX2RvbmU6CisJCS8qIFRoaXMgZG9lcyBu
b3QgbG93ZXIgdW50aWwgdGhlIGN1bS1hY2sgcGFzc2VzIGl0ICovCisJCWFzb2MtPnNlbnRfcXVl
dWVfY250Kys7CisJCWlmICgoYXNvYy0+cGVlcnNfcnduZCA8PSAwKSAmJgorCQkgICAgKGFzb2Mt
PnRvdGFsX2ZsaWdodCA9PSAwKSAmJgorCQkgICAgKGJ1bmRsZV9hdCA9PSAxKSkgeworCQkJLyog
TWFyayB0aGUgY2h1bmsgYXMgYmVpbmcgYSB3aW5kb3cgcHJvYmUgKi8KKwkJCVNDVFBfU1RBVF9J
TkNSKHNjdHBzX3dpbmRvd3Byb2JlZCk7CisJCX0KKyNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJM
RUQKKwkJc2N0cF9hdWRpdF9sb2coMHhDMiwgMyk7CisjZW5kaWYKKwkJZGF0YV9saXN0W2ldLT5z
ZW50ID0gU0NUUF9EQVRBR1JBTV9TRU5UOworCQlkYXRhX2xpc3RbaV0tPnNuZF9jb3VudCA9IDE7
CisJCWRhdGFfbGlzdFtpXS0+cmVjLmRhdGEuY2h1bmtfd2FzX3Jldm9rZWQgPSAwOworCQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GTElHSFRfTE9HR0lO
R19FTkFCTEUpIHsKKwkJCXNjdHBfbWlzY19pbnRzKFNDVFBfRkxJR0hUX0xPR19VUCwKKwkJCQkg
ICAgICAgZGF0YV9saXN0W2ldLT53aG9Uby0+ZmxpZ2h0X3NpemUsCisJCQkJICAgICAgIGRhdGFf
bGlzdFtpXS0+Ym9va19zaXplLAorCQkJCSAgICAgICAodWludDMyX3QpKHVpbnRwdHJfdClkYXRh
X2xpc3RbaV0tPndob1RvLAorCQkJCSAgICAgICBkYXRhX2xpc3RbaV0tPnJlYy5kYXRhLnRzbik7
CisJCX0KKwkJc2N0cF9mbGlnaHRfc2l6ZV9pbmNyZWFzZShkYXRhX2xpc3RbaV0pOworCQlzY3Rw
X3RvdGFsX2ZsaWdodF9pbmNyZWFzZShzdGNiLCBkYXRhX2xpc3RbaV0pOworCQlpZiAoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0dfUldORF9FTkFCTEUpIHsK
KwkJCXNjdHBfbG9nX3J3bmQoU0NUUF9ERUNSRUFTRV9QRUVSX1JXTkQsCisJCQkgICAgICBhc29j
LT5wZWVyc19yd25kLCBkYXRhX2xpc3RbaV0tPnNlbmRfc2l6ZSwgU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX3BlZXJfY2h1bmtfb2gpKTsKKwkJfQorCQlhc29jLT5wZWVyc19yd25kID0gc2N0cF9zYnNw
YWNlX3N1Yihhc29jLT5wZWVyc19yd25kLAorCQkJCQkJICAgICh1aW50MzJfdCkgKGRhdGFfbGlz
dFtpXS0+c2VuZF9zaXplICsgU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BlZXJfY2h1bmtfb2gpKSk7
CisJCWlmIChhc29jLT5wZWVyc19yd25kIDwgc3RjYi0+c2N0cF9lcC0+c2N0cF9lcC5zY3RwX3N3
c19zZW5kZXIpIHsKKwkJCS8qIFNXUyBzZW5kZXIgc2lkZSBlbmdhZ2VzICovCisJCQlhc29jLT5w
ZWVyc19yd25kID0gMDsKKwkJfQorCX0KKwlpZiAoYXNvYy0+Y2NfZnVuY3Rpb25zLnNjdHBfY3du
ZF91cGRhdGVfcGFja2V0X3RyYW5zbWl0dGVkKSB7CisJCSgqYXNvYy0+Y2NfZnVuY3Rpb25zLnNj
dHBfY3duZF91cGRhdGVfcGFja2V0X3RyYW5zbWl0dGVkKShzdGNiLCBuZXQpOworCX0KK30KKwor
c3RhdGljIHZvaWQKK3NjdHBfY2xlYW5fdXBfY3RsKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3Ry
dWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIGludCBzb19sb2NrZWQpCit7CisJc3RydWN0IHNj
dHBfdG1pdF9jaHVuayAqY2hrLCAqbmNoazsKKworCVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGssICZh
c29jLT5jb250cm9sX3NlbmRfcXVldWUsIHNjdHBfbmV4dCwgbmNoaykgeworCQlpZiAoKGNoay0+
cmVjLmNodW5rX2lkLmlkID09IFNDVFBfU0VMRUNUSVZFX0FDSykgfHwKKwkJICAgIChjaGstPnJl
Yy5jaHVua19pZC5pZCA9PSBTQ1RQX05SX1NFTEVDVElWRV9BQ0spIHx8CS8qIEVZICovCisJCSAg
ICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9IRUFSVEJFQVRfUkVRVUVTVCkgfHwKKwkJ
ICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0hFQVJUQkVBVF9BQ0spIHx8CisJCSAg
ICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9GT1JXQVJEX0NVTV9UU04pIHx8CisJCSAg
ICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9TSFVURE9XTikgfHwKKwkJICAgIChjaGst
PnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX1NIVVRET1dOX0FDSykgfHwKKwkJICAgIChjaGstPnJl
Yy5jaHVua19pZC5pZCA9PSBTQ1RQX09QRVJBVElPTl9FUlJPUikgfHwKKwkJICAgIChjaGstPnJl
Yy5jaHVua19pZC5pZCA9PSBTQ1RQX1BBQ0tFVF9EUk9QUEVEKSB8fAorCQkgICAgKGNoay0+cmVj
LmNodW5rX2lkLmlkID09IFNDVFBfQ09PS0lFX0FDSykgfHwKKwkJICAgIChjaGstPnJlYy5jaHVu
a19pZC5pZCA9PSBTQ1RQX0VDTl9DV1IpIHx8CisJCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQg
PT0gU0NUUF9BU0NPTkZfQUNLKSkgeworCQkJLyogU3RyYXkgY2h1bmtzIG11c3QgYmUgY2xlYW5l
ZCB1cCAqLworCWNsZWFuX3VwX2FueXdheToKKwkJCVRBSUxRX1JFTU9WRSgmYXNvYy0+Y29udHJv
bF9zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7CisJCQlhc29jLT5jdHJsX3F1ZXVlX2NudC0t
OworCQkJaWYgKGNoay0+ZGF0YSkgeworCQkJCXNjdHBfbV9mcmVlbShjaGstPmRhdGEpOworCQkJ
CWNoay0+ZGF0YSA9IE5VTEw7CisJCQl9CisJCQlpZiAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0g
U0NUUF9GT1JXQVJEX0NVTV9UU04pIHsKKwkJCQlhc29jLT5md2RfdHNuX2NudC0tOworCQkJfQor
CQkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBzb19sb2NrZWQpOworCQl9IGVsc2UgaWYg
KGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfU1RSRUFNX1JFU0VUKSB7CisJCQkvKiBzcGVj
aWFsIGhhbmRsaW5nLCB3ZSBtdXN0IGxvb2sgaW50byB0aGUgcGFyYW0gKi8KKwkJCWlmIChjaGsg
IT0gYXNvYy0+c3RyX3Jlc2V0KSB7CisJCQkJZ290byBjbGVhbl91cF9hbnl3YXk7CisJCQl9CisJ
CX0KKwl9Cit9CisKK3N0YXRpYyB1aW50MzJfdAorc2N0cF9jYW5fd2Vfc3BsaXRfdGhpcyhzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQzMl90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3Qgc3BhY2VfbGVmdCwgdWludDMyX3QgZnJhZ19wb2ludCwgaW50IGVlb3Jfb24p
Cit7CisJLyogTWFrZSBhIGRlY2lzaW9uIG9uIGlmIEkgc2hvdWxkIHNwbGl0IGEKKwkgKiBtc2cg
aW50byBtdWx0aXBsZSBwYXJ0cy4gVGhpcyBpcyBvbmx5IGFza2VkIG9mCisJICogaW5jb21wbGV0
ZSBtZXNzYWdlcy4KKwkgKi8KKwlpZiAoZWVvcl9vbikgeworCQkvKiBJZiB3ZSBhcmUgZG9pbmcg
RUVPUiB3ZSBuZWVkIHRvIGFsd2F5cyBzZW5kCisJCSAqIGl0IGlmIGl0cyB0aGUgZW50aXJlIHRo
aW5nLCBzaW5jZSBpdCBtaWdodAorCQkgKiBiZSBhbGwgdGhlIGd1eSBpcyBwdXR0aW5nIGluIHRo
ZSBob3BwZXIuCisJCSAqLworCQlpZiAoc3BhY2VfbGVmdCA+PSBsZW5ndGgpIHsKKwkJCS8qLQor
CQkJICogSWYgd2UgaGF2ZSBkYXRhIG91dHN0YW5kaW5nLAorCQkJICogd2UgZ2V0IGFub3RoZXIg
Y2hhbmNlIHdoZW4gdGhlIHNhY2sKKwkJCSAqIGFycml2ZXMgdG8gdHJhbnNtaXQgLSB3YWl0IGZv
ciBtb3JlIGRhdGEKKwkJCSAqLworCQkJaWYgKHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0ID09IDAp
IHsKKwkJCQkvKiBJZiBub3RoaW5nIGlzIGluIGZsaWdodCwgd2UgemVybworCQkJCSAqIHRoZSBw
YWNrZXQgY291bnRlci4KKwkJCQkgKi8KKwkJCQlyZXR1cm4gKGxlbmd0aCk7CisJCQl9CisJCQly
ZXR1cm4gKDApOworCisJCX0gZWxzZSB7CisJCQkvKiBZb3UgY2FuIGZpbGwgdGhlIHJlc3QgKi8K
KwkJCXJldHVybiAoc3BhY2VfbGVmdCk7CisJCX0KKwl9CisJLyotCisJICogRm9yIHRob3NlIHN0
cmFuZ2UgZm9sayB0aGF0IG1ha2UgdGhlIHNlbmQgYnVmZmVyCisJICogc21hbGxlciB0aGFuIG91
ciBmcmFnbWVudGF0aW9uIHBvaW50LCB3ZSBjYW4ndAorCSAqIGdldCBhIGZ1bGwgbXNnIGluIHNv
IHdlIGhhdmUgdG8gYWxsb3cgc3BsaXR0aW5nLgorCSAqLworCWlmIChTQ1RQX1NCX0xJTUlUX1NO
RChzdGNiLT5zY3RwX3NvY2tldCkgPCBmcmFnX3BvaW50KSB7CisJCXJldHVybiAobGVuZ3RoKTsK
Kwl9CisJaWYgKChsZW5ndGggPD0gc3BhY2VfbGVmdCkgfHwKKwkgICAgKChsZW5ndGggLSBzcGFj
ZV9sZWZ0KSA8IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9taW5fcmVzaWR1YWwpKSkgeworCQkvKiBT
dWItb3B0aW1pYWwgcmVzaWR1YWwgZG9uJ3Qgc3BsaXQgaW4gbm9uLWVlb3IgbW9kZS4gKi8KKwkJ
cmV0dXJuICgwKTsKKwl9CisJLyogSWYgd2UgcmVhY2ggaGVyZSBsZW5ndGggaXMgbGFyZ2VyCisJ
ICogdGhhbiB0aGUgc3BhY2VfbGVmdC4gRG8gd2Ugd2lzaCB0byBzcGxpdAorCSAqIGl0IGZvciB0
aGUgc2FrZSBvZiBwYWNrZXQgcHV0dGluZyB0b2dldGhlcj8KKwkgKi8KKwlpZiAoc3BhY2VfbGVm
dCA+PSBtaW4oU0NUUF9CQVNFX1NZU0NUTChzY3RwX21pbl9zcGxpdF9wb2ludCksIGZyYWdfcG9p
bnQpKSB7CisJCS8qIEl0cyBvayB0byBzcGxpdCBpdCAqLworCQlyZXR1cm4gKG1pbihzcGFjZV9s
ZWZ0LCBmcmFnX3BvaW50KSk7CisJfQorCS8qIE5vcGUsIGNhbid0IHNwbGl0ICovCisJcmV0dXJu
ICgwKTsKK30KKworc3RhdGljIHVpbnQzMl90CitzY3RwX21vdmVfdG9fb3V0cXVldWUoc3RydWN0
IHNjdHBfdGNiICpzdGNiLAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3N0cmVh
bV9vdXQgKnN0cnEsCisgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3BhY2VfbGVmdCwK
KyAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBmcmFnX3BvaW50LAorICAgICAgICAgICAg
ICAgICAgICAgIGludCAqZ2l2ZXVwLAorICAgICAgICAgICAgICAgICAgICAgIGludCBlZW9yX21v
ZGUsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICpiYWlsLAorICAgICAgICAgICAgICAgICAg
ICAgIGludCBzb19sb2NrZWQpCit7CisJLyogTW92ZSBmcm9tIHRoZSBzdHJlYW0gdG8gdGhlIHNl
bmRfcXVldWUga2VlcGluZyB0cmFjayBvZiB0aGUgdG90YWwgKi8KKwlzdHJ1Y3Qgc2N0cF9hc3Nv
Y2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3A7CisJ
c3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOworCXN0cnVjdCBzY3RwX2RhdGFfY2h1bmsgKmRj
aGtoPU5VTEw7CisJc3RydWN0IHNjdHBfaWRhdGFfY2h1bmsgKm5kY2hraD1OVUxMOworCXVpbnQz
Ml90IHRvX21vdmUsIGxlbmd0aDsKKwlpbnQgbGVhZGluZzsKKwl1aW50OF90IHJjdl9mbGFncyA9
IDA7CisJdWludDhfdCBzb21lX3Rha2VuOworCXVpbnQ4X3Qgc2VuZF9sb2NrX3VwID0gMDsKKwor
CVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOworCWFzb2MgPSAmc3RjYi0+YXNvYzsKK29uZV9t
b3JlX3RpbWU6CisJLypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KKwlzcCA9IFRBSUxRX0ZJUlNU
KCZzdHJxLT5vdXRxdWV1ZSk7CisJaWYgKHNwID09IE5VTEwpIHsKKwkJaWYgKHNlbmRfbG9ja191
cCA9PSAwKSB7CisJCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7CisJCQlzZW5kX2xvY2tfdXAg
PSAxOworCQl9CisJCXNwID0gVEFJTFFfRklSU1QoJnN0cnEtPm91dHF1ZXVlKTsKKwkJaWYgKHNw
KSB7CisJCQlnb3RvIG9uZV9tb3JlX3RpbWU7CisJCX0KKwkJaWYgKChzY3RwX2lzX2ZlYXR1cmVf
b24oc3RjYi0+c2N0cF9lcCwgU0NUUF9QQ0JfRkxBR1NfRVhQTElDSVRfRU9SKSA9PSAwKSAmJgor
CQkgICAgKHN0Y2ItPmFzb2MuaWRhdGFfc3VwcG9ydGVkID09IDApICYmCisJCSAgICAoc3RycS0+
bGFzdF9tc2dfaW5jb21wbGV0ZSkpIHsKKwkJCVNDVFBfUFJJTlRGKCJIdWg/IFN0cmVhbTolZCBs
bV9pbl9jPSVkIGJ1dCBxdWV1ZSBpcyBOVUxMXG4iLAorCQkJICAgICAgICAgICAgc3RycS0+c2lk
LAorCQkJICAgICAgICAgICAgc3RycS0+bGFzdF9tc2dfaW5jb21wbGV0ZSk7CisJCQlzdHJxLT5s
YXN0X21zZ19pbmNvbXBsZXRlID0gMDsKKwkJfQorCQl0b19tb3ZlID0gMDsKKwkJaWYgKHNlbmRf
bG9ja191cCkgeworCQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJCQlzZW5kX2xvY2tf
dXAgPSAwOworCQl9CisJCWdvdG8gb3V0X29mOworCX0KKwlpZiAoKHNwLT5tc2dfaXNfY29tcGxl
dGUpICYmIChzcC0+bGVuZ3RoID09IDApKSB7CisJCWlmIChzcC0+c2VuZGVyX2FsbF9kb25lKSB7
CisJCQkvKiBXZSBhcmUgZG9pbmcgZGVmZXJyZWQgY2xlYW51cC4gTGFzdAorCQkJICogdGltZSB0
aHJvdWdoIHdoZW4gd2UgdG9vayBhbGwgdGhlIGRhdGEKKwkJCSAqIHRoZSBzZW5kZXJfYWxsX2Rv
bmUgd2FzIG5vdCBzZXQuCisJCQkgKi8KKwkJCWlmICgoc3AtPnB1dF9sYXN0X291dCA9PSAwKSAm
JiAoc3AtPmRpc2NhcmRfcmVzdCA9PSAwKSkgeworCQkJCVNDVFBfUFJJTlRGKCJHYWssIHB1dCBv
dXQgZW50aXJlIG1zZyB3aXRoIE5PIGVuZCEtMVxuIik7CisJCQkJU0NUUF9QUklOVEYoInNlbmRl
cl9kb25lOiVkIGxlbjolZCBtc2dfY29tcDolZCBwdXRfbGFzdF9vdXQ6JWQgc2VuZF9sb2NrOiVk
XG4iLAorCQkJCSAgICAgICAgICAgIHNwLT5zZW5kZXJfYWxsX2RvbmUsCisJCQkJICAgICAgICAg
ICAgc3AtPmxlbmd0aCwKKwkJCQkgICAgICAgICAgICBzcC0+bXNnX2lzX2NvbXBsZXRlLAorCQkJ
CSAgICAgICAgICAgIHNwLT5wdXRfbGFzdF9vdXQsCisJCQkJICAgICAgICAgICAgc2VuZF9sb2Nr
X3VwKTsKKwkJCX0KKwkJCWlmICgoVEFJTFFfTkVYVChzcCwgbmV4dCkgPT0gTlVMTCkgJiYgKHNl
bmRfbG9ja191cCAgPT0gMCkpIHsKKwkJCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7CisJCQkJ
c2VuZF9sb2NrX3VwID0gMTsKKwkJCX0KKwkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJmFzb2MtPnN0
cmVhbV9xdWV1ZV9jbnQsIDEpOworCQkJVEFJTFFfUkVNT1ZFKCZzdHJxLT5vdXRxdWV1ZSwgc3As
IG5leHQpOworCQkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19yZW1vdmVfZnJvbV9z
dHJlYW0oc3RjYiwgYXNvYywgc3RycSwgc3AsIHNlbmRfbG9ja191cCk7CisJCQlpZiAoKHN0cnEt
PnN0YXRlID09IFNDVFBfU1RSRUFNX1JFU0VUX1BFTkRJTkcpICYmCisJCQkgICAgKHN0cnEtPmNo
dW5rc19vbl9xdWV1ZXMgPT0gMCkgJiYKKwkJCSAgICBUQUlMUV9FTVBUWSgmc3RycS0+b3V0cXVl
dWUpKSB7CisJCQkJc3RjYi0+YXNvYy50cmlnZ2VyX3Jlc2V0ID0gMTsKKwkJCX0KKwkJCWlmIChz
cC0+bmV0KSB7CisJCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHNwLT5uZXQpOworCQkJCXNwLT5u
ZXQgPSBOVUxMOworCQkJfQorCQkJaWYgKHNwLT5kYXRhKSB7CisJCQkJc2N0cF9tX2ZyZWVtKHNw
LT5kYXRhKTsKKwkJCQlzcC0+ZGF0YSA9IE5VTEw7CisJCQl9CisJCQlzY3RwX2ZyZWVfYV9zdHJt
b3Eoc3RjYiwgc3AsIHNvX2xvY2tlZCk7CisJCQkvKiB3ZSBjYW4ndCBiZSBsb2NrZWQgdG8gaXQg
Ki8KKwkJCWlmIChzZW5kX2xvY2tfdXApIHsKKwkJCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNi
KTsKKwkJCQlzZW5kX2xvY2tfdXAgPSAwOworCQkJfQorCQkJLyogYmFjayB0byBnZXQgdGhlIG5l
eHQgbXNnICovCisJCQlnb3RvIG9uZV9tb3JlX3RpbWU7CisJCX0gZWxzZSB7CisJCQkvKiBzZW5k
ZXIganVzdCBmaW5pc2hlZCB0aGlzIGJ1dAorCQkJICogc3RpbGwgaG9sZHMgYSByZWZlcmVuY2UK
KwkJCSAqLworCQkJKmdpdmV1cCA9IDE7CisJCQl0b19tb3ZlID0gMDsKKwkJCWdvdG8gb3V0X29m
OworCQl9CisJfSBlbHNlIHsKKwkJLyogaXMgdGhlcmUgc29tZSB0byBnZXQgKi8KKwkJaWYgKHNw
LT5sZW5ndGggPT0gMCkgeworCQkJLyogbm8gKi8KKwkJCSpnaXZldXAgPSAxOworCQkJdG9fbW92
ZSA9IDA7CisJCQlnb3RvIG91dF9vZjsKKwkJfSBlbHNlIGlmIChzcC0+ZGlzY2FyZF9yZXN0KSB7
CisJCQlpZiAoc2VuZF9sb2NrX3VwID09IDApIHsKKwkJCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3Rj
Yik7CisJCQkJc2VuZF9sb2NrX3VwID0gMTsKKwkJCX0KKwkJCS8qIFdoYWNrIGRvd24gdGhlIHNp
emUgKi8KKwkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1
ZXVlX3NpemUsIHNwLT5sZW5ndGgpOworCQkJaWYgKChzdGNiLT5zY3RwX3NvY2tldCAhPSBOVUxM
KSAmJgorCQkJICAgICgoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X1RDUFRZUEUpIHx8CisJCQkgICAgIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfSU5fVENQUE9PTCkpKSB7CisJCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+
c2N0cF9zb2NrZXQtPnNvX3NuZC5zYl9jYywgc3AtPmxlbmd0aCk7CisJCQl9CisJCQlpZiAoc3At
PmRhdGEpIHsKKwkJCQlzY3RwX21fZnJlZW0oc3AtPmRhdGEpOworCQkJCXNwLT5kYXRhID0gTlVM
TDsKKwkJCQlzcC0+dGFpbF9tYnVmID0gTlVMTDsKKwkJCX0KKwkJCXNwLT5sZW5ndGggPSAwOwor
CQkJc3AtPnNvbWVfdGFrZW4gPSAxOworCQkJKmdpdmV1cCA9IDE7CisJCQl0b19tb3ZlID0gMDsK
KwkJCWdvdG8gb3V0X29mOworCQl9CisJfQorCXNvbWVfdGFrZW4gPSBzcC0+c29tZV90YWtlbjsK
K3JlX2xvb2s6CisJbGVuZ3RoID0gc3AtPmxlbmd0aDsKKwlpZiAoc3AtPm1zZ19pc19jb21wbGV0
ZSkgeworCQkvKiBUaGUgbWVzc2FnZSBpcyBjb21wbGV0ZSAqLworCQl0b19tb3ZlID0gbWluKGxl
bmd0aCwgZnJhZ19wb2ludCk7CisJCWlmICh0b19tb3ZlID09IGxlbmd0aCkgeworCQkJLyogQWxs
IG9mIGl0IGZpdHMgaW4gdGhlIE1UVSAqLworCQkJaWYgKHNwLT5zb21lX3Rha2VuKSB7CisJCQkJ
cmN2X2ZsYWdzIHw9IFNDVFBfREFUQV9MQVNUX0ZSQUc7CisJCQl9IGVsc2UgeworCQkJCXJjdl9m
bGFncyB8PSBTQ1RQX0RBVEFfTk9UX0ZSQUc7CisJCQl9CisJCQlzcC0+cHV0X2xhc3Rfb3V0ID0g
MTsKKwkJCWlmIChzcC0+c2luZm9fZmxhZ3MgJiBTQ1RQX1NBQ0tfSU1NRURJQVRFTFkpIHsKKwkJ
CQlyY3ZfZmxhZ3MgfD0gU0NUUF9EQVRBX1NBQ0tfSU1NRURJQVRFTFk7CisJCQl9CisJCX0gZWxz
ZSB7CisJCQkvKiBOb3QgYWxsIG9mIGl0IGZpdHMsIHdlIGZyYWdtZW50ICovCisJCQlpZiAoc3At
PnNvbWVfdGFrZW4gPT0gMCkgeworCQkJCXJjdl9mbGFncyB8PSBTQ1RQX0RBVEFfRklSU1RfRlJB
RzsKKwkJCX0KKwkJCXNwLT5zb21lX3Rha2VuID0gMTsKKwkJfQorCX0gZWxzZSB7CisJCXRvX21v
dmUgPSBzY3RwX2Nhbl93ZV9zcGxpdF90aGlzKHN0Y2IsIGxlbmd0aCwgc3BhY2VfbGVmdCwgZnJh
Z19wb2ludCwgZWVvcl9tb2RlKTsKKwkJaWYgKHRvX21vdmUpIHsKKwkJCS8qLQorCQkJICogV2Ug
dXNlIGEgc25hcHNob3Qgb2YgbGVuZ3RoIGluIGNhc2UgaXQKKwkJCSAqIGlzIGV4cGFuZGluZyBk
dXJpbmcgdGhlIGNvbXBhcmUuCisJCQkgKi8KKwkJCXVpbnQzMl90IGxsZW47CisKKwkJCWxsZW4g
PSBsZW5ndGg7CisJCQlpZiAodG9fbW92ZSA+PSBsbGVuKSB7CisJCQkJdG9fbW92ZSA9IGxsZW47
CisJCQkJaWYgKHNlbmRfbG9ja191cCA9PSAwKSB7CisJCQkJCS8qLQorCQkJCQkgKiBXZSBhcmUg
dGFraW5nIGFsbCBvZiBhbiBpbmNvbXBsZXRlIG1zZworCQkJCQkgKiB0aHVzIHdlIG5lZWQgYSBz
ZW5kIGxvY2suCisJCQkJCSAqLworCQkJCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7CisJCQkJ
CXNlbmRfbG9ja191cCA9IDE7CisJCQkJCWlmIChzcC0+bXNnX2lzX2NvbXBsZXRlKSB7CisJCQkJ
CQkvKiB0aGUgc2VuZGVyIGZpbmlzaGVkIHRoZSBtc2cgKi8KKwkJCQkJCWdvdG8gcmVfbG9vazsK
KwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWlmIChzcC0+c29tZV90YWtlbiA9PSAwKSB7CisJCQkJ
cmN2X2ZsYWdzIHw9IFNDVFBfREFUQV9GSVJTVF9GUkFHOworCQkJCXNwLT5zb21lX3Rha2VuID0g
MTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIE5vdGhpbmcgdG8gdGFrZS4gKi8KKwkJCSpnaXZl
dXAgPSAxOworCQkJdG9fbW92ZSA9IDA7CisJCQlnb3RvIG91dF9vZjsKKwkJfQorCX0KKworCS8q
IElmIHdlIHJlYWNoIGhlcmUsIHdlIGNhbiBjb3B5IG91dCBhIGNodW5rICovCisJc2N0cF9hbGxv
Y19hX2NodW5rKHN0Y2IsIGNoayk7CisJaWYgKGNoayA9PSBOVUxMKSB7CisJCS8qIE5vIGNodW5r
IG1lbW9yeSAqLworCQkqZ2l2ZXVwID0gMTsKKwkJdG9fbW92ZSA9IDA7CisJCWdvdG8gb3V0X29m
OworCX0KKwkvKiBTZXR1cCBmb3IgdW5vcmRlcmVkIGlmIG5lZWRlZCBieSBsb29raW5nCisJICog
YXQgdGhlIHVzZXIgc2VudCBpbmZvIGZsYWdzLgorCSAqLworCWlmIChzcC0+c2luZm9fZmxhZ3Mg
JiBTQ1RQX1VOT1JERVJFRCkgeworCQlyY3ZfZmxhZ3MgfD0gU0NUUF9EQVRBX1VOT1JERVJFRDsK
Kwl9CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9lbmFibGVfc2Fja19pbW1lZGlhdGVseSkg
JiYKKwkgICAgKHNwLT5zaW5mb19mbGFncyAmIFNDVFBfRU9GKSA9PSBTQ1RQX0VPRikgeworCQly
Y3ZfZmxhZ3MgfD0gU0NUUF9EQVRBX1NBQ0tfSU1NRURJQVRFTFk7CisJfQorCS8qIGNsZWFyIG91
dCB0aGUgY2h1bmsgYmVmb3JlIHNldHRpbmcgdXAgKi8KKwltZW1zZXQoY2hrLCAwLCBzaXplb2Yo
KmNoaykpOworCWNoay0+cmVjLmRhdGEucmN2X2ZsYWdzID0gcmN2X2ZsYWdzOworCisJaWYgKHRv
X21vdmUgPj0gbGVuZ3RoKSB7CisJCS8qIHdlIHRoaW5rIHdlIGNhbiBzdGVhbCB0aGUgd2hvbGUg
dGhpbmcgKi8KKwkJaWYgKChzcC0+c2VuZGVyX2FsbF9kb25lID09IDApICYmIChzZW5kX2xvY2tf
dXAgPT0gMCkpIHsKKwkJCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKKwkJCXNlbmRfbG9ja191
cCA9IDE7CisJCX0KKwkJaWYgKHRvX21vdmUgPCBzcC0+bGVuZ3RoKSB7CisJCQkvKiBiYWlsLCBp
dCBjaGFuZ2VkICovCisJCQlnb3RvIGRvbnRfZG9faXQ7CisJCX0KKwkJY2hrLT5kYXRhID0gc3At
PmRhdGE7CisJCWNoay0+bGFzdF9tYnVmID0gc3AtPnRhaWxfbWJ1ZjsKKwkJLyogcmVnaXN0ZXIg
dGhlIHN0ZWFsaW5nICovCisJCXNwLT5kYXRhID0gc3AtPnRhaWxfbWJ1ZiA9IE5VTEw7CisJfSBl
bHNlIHsKKwkJc3RydWN0IG1idWYgKm07CisJZG9udF9kb19pdDoKKwkJY2hrLT5kYXRhID0gU0NU
UF9NX0NPUFlNKHNwLT5kYXRhLCAwLCB0b19tb3ZlLCBNX05PV0FJVCk7CisJCWNoay0+bGFzdF9t
YnVmID0gTlVMTDsKKwkJaWYgKGNoay0+ZGF0YSA9PSBOVUxMKSB7CisJCQlzcC0+c29tZV90YWtl
biA9IHNvbWVfdGFrZW47CisJCQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNiLCBjaGssIHNvX2xvY2tl
ZCk7CisJCQkqYmFpbCA9IDE7CisJCQl0b19tb3ZlID0gMDsKKwkJCWdvdG8gb3V0X29mOworCQl9
CisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9s
b2dnaW5nX2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkgeworCQkJc2N0cF9sb2df
bWJjKGNoay0+ZGF0YSwgU0NUUF9NQlVGX0lDT1BZKTsKKwkJfQorI2VuZGlmCisJCS8qIFB1bGwg
b2ZmIHRoZSBkYXRhICovCisJCW1fYWRqKHNwLT5kYXRhLCB0b19tb3ZlKTsKKwkJLyogTm93IGxl
dHMgd29yayBvdXIgd2F5IGRvd24gYW5kIGNvbXBhY3QgaXQgKi8KKwkJbSA9IHNwLT5kYXRhOwor
CQl3aGlsZSAobSAmJiAoU0NUUF9CVUZfTEVOKG0pID09IDApKSB7CisJCQlzcC0+ZGF0YSAgPSBT
Q1RQX0JVRl9ORVhUKG0pOworCQkJU0NUUF9CVUZfTkVYVChtKSA9IE5VTEw7CisJCQlpZiAoc3At
PnRhaWxfbWJ1ZiA9PSBtKSB7CisJCQkJLyotCisJCQkJICogRnJlZWluZyB0YWlsPyBUU05IIHNp
bmNlCisJCQkJICogd2Ugc3VwcG9zZWRseSB3ZXJlIHRha2luZyBsZXNzCisJCQkJICogdGhhbiB0
aGUgc3AtPmxlbmd0aC4KKwkJCQkgKi8KKyNpZmRlZiBJTlZBUklBTlRTCisJCQkJcGFuaWMoIkh1
aCwgZnJlaW5nIHRhaWw/IC0gVFNOSCIpOworI2Vsc2UKKwkJCQlTQ1RQX1BSSU5URigiSHVoLCBm
cmVlaW5nIHRhaWw/IC0gVFNOSFxuIik7CisJCQkJc3AtPnRhaWxfbWJ1ZiA9IHNwLT5kYXRhID0g
TlVMTDsKKwkJCQlzcC0+bGVuZ3RoID0gMDsKKyNlbmRpZgorCQkJfQorCQkJc2N0cF9tX2ZyZWUo
bSk7CisJCQltID0gc3AtPmRhdGE7CisJCX0KKwl9CisJaWYgKFNDVFBfQlVGX0lTX0VYVEVOREVE
KGNoay0+ZGF0YSkpIHsKKwkJY2hrLT5jb3B5X2J5X3JlZiA9IDE7CisJfSBlbHNlIHsKKwkJY2hr
LT5jb3B5X2J5X3JlZiA9IDA7CisJfQorCS8qIGdldCBsYXN0X21idWYgYW5kIGNvdW50cyBvZiBt
YiB1c2FnZQorCSAqIFRoaXMgaXMgdWdseSBidXQgaG9wZWZ1bGx5IGl0cyBvbmx5IG9uZSBtYnVm
LgorCSAqLworCWlmIChjaGstPmxhc3RfbWJ1ZiA9PSBOVUxMKSB7CisJCWNoay0+bGFzdF9tYnVm
ID0gY2hrLT5kYXRhOworCQl3aGlsZSAoU0NUUF9CVUZfTkVYVChjaGstPmxhc3RfbWJ1ZikgIT0g
TlVMTCkgeworCQkJY2hrLT5sYXN0X21idWYgPSBTQ1RQX0JVRl9ORVhUKGNoay0+bGFzdF9tYnVm
KTsKKwkJfQorCX0KKworCWlmICh0b19tb3ZlID4gbGVuZ3RoKSB7CisJCS8qLSBUaGlzIHNob3Vs
ZCBub3QgaGFwcGVuIGVpdGhlcgorCQkgKiBzaW5jZSB3ZSBhbHdheXMgbG93ZXIgdG9fbW92ZSB0
byB0aGUgc2l6ZQorCQkgKiBvZiBzcC0+bGVuZ3RoIGlmIGl0cyBsYXJnZXIuCisJCSAqLworI2lm
ZGVmIElOVkFSSUFOVFMKKwkJcGFuaWMoIkh1aCwgaG93IGNhbiB0b19tb3ZlIGJlIGxhcmdlcj8i
KTsKKyNlbHNlCisJCVNDVFBfUFJJTlRGKCJIdWgsIGhvdyBjYW4gdG9fbW92ZSBiZSBsYXJnZXI/
XG4iKTsKKwkJc3AtPmxlbmd0aCA9IDA7CisjZW5kaWYKKwl9IGVsc2UgeworCQlhdG9taWNfc3Vi
dHJhY3RfaW50KCZzcC0+bGVuZ3RoLCB0b19tb3ZlKTsKKwl9CisJbGVhZGluZyA9IFNDVFBfREFU
QV9DSFVOS19PVkVSSEVBRChzdGNiKTsKKwlpZiAoTV9MRUFESU5HU1BBQ0UoY2hrLT5kYXRhKSA8
IGxlYWRpbmcpIHsKKwkJLyogTm90IGVub3VnaCByb29tIGZvciBhIGNodW5rIGhlYWRlciwgZ2V0
IHNvbWUgKi8KKwkJc3RydWN0IG1idWYgKm07CisKKwkJbSA9IHNjdHBfZ2V0X21idWZfZm9yX21z
ZygxLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJCWlmIChtID09IE5VTEwpIHsKKwkJCS8q
CisJCQkgKiB3ZSdyZSBpbiB0cm91YmxlIGhlcmUuIF9QUkVQRU5EIGJlbG93IHdpbGwgZnJlZQor
CQkJICogYWxsIHRoZSBkYXRhIGlmIHRoZXJlIGlzIG5vIGxlYWRpbmcgc3BhY2UsIHNvIHdlCisJ
CQkgKiBtdXN0IHB1dCB0aGUgZGF0YSBiYWNrIGFuZCByZXN0b3JlLgorCQkJICovCisJCQlpZiAo
c2VuZF9sb2NrX3VwID09IDApIHsKKwkJCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7CisJCQkJ
c2VuZF9sb2NrX3VwID0gMTsKKwkJCX0KKwkJCWlmIChzcC0+ZGF0YSA9PSBOVUxMKSB7CisJCQkJ
LyogdW5zdGVhbCB0aGUgZGF0YSAqLworCQkJCXNwLT5kYXRhID0gY2hrLT5kYXRhOworCQkJCXNw
LT50YWlsX21idWYgPSBjaGstPmxhc3RfbWJ1ZjsKKwkJCX0gZWxzZSB7CisJCQkJc3RydWN0IG1i
dWYgKm1fdG1wOworCQkJCS8qIHJlYXNzZW1ibGUgdGhlIGRhdGEgKi8KKwkJCQltX3RtcCA9IHNw
LT5kYXRhOworCQkJCXNwLT5kYXRhID0gY2hrLT5kYXRhOworCQkJCVNDVFBfQlVGX05FWFQoY2hr
LT5sYXN0X21idWYpID0gbV90bXA7CisJCQl9CisJCQlzcC0+c29tZV90YWtlbiA9IHNvbWVfdGFr
ZW47CisJCQlhdG9taWNfYWRkX2ludCgmc3AtPmxlbmd0aCwgdG9fbW92ZSk7CisJCQljaGstPmRh
dGEgPSBOVUxMOworCQkJKmJhaWwgPSAxOworCQkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hr
LCBzb19sb2NrZWQpOworCQkJdG9fbW92ZSA9IDA7CisJCQlnb3RvIG91dF9vZjsKKwkJfSBlbHNl
IHsKKwkJCVNDVFBfQlVGX0xFTihtKSA9IDA7CisJCQlTQ1RQX0JVRl9ORVhUKG0pID0gY2hrLT5k
YXRhOworCQkJY2hrLT5kYXRhID0gbTsKKwkJCU1fQUxJR04oY2hrLT5kYXRhLCA0KTsKKwkJfQor
CX0KKwlTQ1RQX0JVRl9QUkVQRU5EKGNoay0+ZGF0YSwgU0NUUF9EQVRBX0NIVU5LX09WRVJIRUFE
KHN0Y2IpLCBNX05PV0FJVCk7CisJaWYgKGNoay0+ZGF0YSA9PSBOVUxMKSB7CisJCS8qIEhFTFAs
IFRTTkggc2luY2Ugd2UgYXNzdXJlZCBpdCB3b3VsZCBub3QgYWJvdmU/ICovCisjaWZkZWYgSU5W
QVJJQU5UUworCQlwYW5pYygicHJlcGVuZCBmYWlsZXMgSEVMUD8iKTsKKyNlbHNlCisJCVNDVFBf
UFJJTlRGKCJwcmVwZW5kIGZhaWxzIEhFTFA/XG4iKTsKKwkJc2N0cF9mcmVlX2FfY2h1bmsoc3Rj
YiwgY2hrLCBzb19sb2NrZWQpOworI2VuZGlmCisJCSpiYWlsID0gMTsKKwkJdG9fbW92ZSA9IDA7
CisJCWdvdG8gb3V0X29mOworCX0KKwlzY3RwX3NuZF9zYl9hbGxvYyhzdGNiLCBTQ1RQX0RBVEFf
Q0hVTktfT1ZFUkhFQUQoc3RjYikpOworCWNoay0+Ym9va19zaXplID0gY2hrLT5zZW5kX3NpemUg
PSAodWludDE2X3QpKHRvX21vdmUgKyBTQ1RQX0RBVEFfQ0hVTktfT1ZFUkhFQUQoc3RjYikpOwor
CWNoay0+Ym9va19zaXplX3NjYWxlID0gMDsKKwljaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1VO
U0VOVDsKKworCWNoay0+ZmxhZ3MgPSAwOworCWNoay0+YXNvYyA9ICZzdGNiLT5hc29jOworCWNo
ay0+cGFkX2lucGxhY2UgPSAwOworCWNoay0+bm9fZnJfYWxsb3dlZCA9IDA7CisJaWYgKHN0Y2It
PmFzb2MuaWRhdGFfc3VwcG9ydGVkID09IDApIHsKKwkJaWYgKHJjdl9mbGFncyAmIFNDVFBfREFU
QV9VTk9SREVSRUQpIHsKKwkJCS8qIEp1c3QgdXNlIDAuIFRoZSByZWNlaXZlciBpZ25vcmVzIHRo
ZSB2YWx1ZXMuICovCisJCQljaGstPnJlYy5kYXRhLm1pZCA9IDA7CisJCX0gZWxzZSB7CisJCQlj
aGstPnJlYy5kYXRhLm1pZCA9IHN0cnEtPm5leHRfbWlkX29yZGVyZWQ7CisJCQlpZiAocmN2X2Zs
YWdzICYgU0NUUF9EQVRBX0xBU1RfRlJBRykgeworCQkJCXN0cnEtPm5leHRfbWlkX29yZGVyZWQr
KzsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWlmIChyY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfVU5P
UkRFUkVEKSB7CisJCQljaGstPnJlYy5kYXRhLm1pZCA9IHN0cnEtPm5leHRfbWlkX3Vub3JkZXJl
ZDsKKwkJCWlmIChyY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfTEFTVF9GUkFHKSB7CisJCQkJc3RycS0+
bmV4dF9taWRfdW5vcmRlcmVkKys7CisJCQl9CisJCX0gZWxzZSB7CisJCQljaGstPnJlYy5kYXRh
Lm1pZCA9IHN0cnEtPm5leHRfbWlkX29yZGVyZWQ7CisJCQlpZiAocmN2X2ZsYWdzICYgU0NUUF9E
QVRBX0xBU1RfRlJBRykgeworCQkJCXN0cnEtPm5leHRfbWlkX29yZGVyZWQrKzsKKwkJCX0KKwkJ
fQorCX0KKwljaGstPnJlYy5kYXRhLnNpZCA9IHNwLT5zaWQ7CisJY2hrLT5yZWMuZGF0YS5wcGlk
ID0gc3AtPnBwaWQ7CisJY2hrLT5yZWMuZGF0YS5jb250ZXh0ID0gc3AtPmNvbnRleHQ7CisJY2hr
LT5yZWMuZGF0YS5kb2luZ19mYXN0X3JldHJhbnNtaXQgPSAwOworCisJY2hrLT5yZWMuZGF0YS50
aW1ldG9kcm9wID0gc3AtPnRzOworCWNoay0+ZmxhZ3MgPSBzcC0+YWN0X2ZsYWdzOworCisJaWYg
KHNwLT5uZXQpIHsKKwkJY2hrLT53aG9UbyA9IHNwLT5uZXQ7CisJCWF0b21pY19hZGRfaW50KCZj
aGstPndob1RvLT5yZWZfY291bnQsIDEpOworCX0gZWxzZQorCQljaGstPndob1RvID0gTlVMTDsK
KworCWlmIChzcC0+aG9sZHNfa2V5X3JlZikgeworCQljaGstPmF1dGhfa2V5aWQgPSBzcC0+YXV0
aF9rZXlpZDsKKwkJc2N0cF9hdXRoX2tleV9hY3F1aXJlKHN0Y2IsIGNoay0+YXV0aF9rZXlpZCk7
CisJCWNoay0+aG9sZHNfa2V5X3JlZiA9IDE7CisJfQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJY2hrLT5yZWMuZGF0YS50c24gPSBhdG9taWNf
ZmV0Y2hhZGRfaW50KCZhc29jLT5zZW5kaW5nX3NlcSwgMSk7CisjZWxzZQorCWNoay0+cmVjLmRh
dGEudHNuID0gYXNvYy0+c2VuZGluZ19zZXErKzsKKyNlbmRpZgorCWlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0xPR19BVF9TRU5EXzJfT1VUUSkgeworCQlz
Y3RwX21pc2NfaW50cyhTQ1RQX1NUUk1PVVRfTE9HX1NFTkQsCisJCSAgICAgICAgICAgICAgICh1
aW50MzJfdCkodWludHB0cl90KXN0Y2IsIHNwLT5sZW5ndGgsCisJCSAgICAgICAgICAgICAgICh1
aW50MzJfdCkoKGNoay0+cmVjLmRhdGEuc2lkIDw8IDE2KSB8ICgweDAwMDBmZmZmICYgY2hrLT5y
ZWMuZGF0YS5taWQpKSwKKwkJICAgICAgICAgICAgICAgY2hrLT5yZWMuZGF0YS50c24pOworCX0K
KwlpZiAoc3RjYi0+YXNvYy5pZGF0YV9zdXBwb3J0ZWQgPT0gMCkgeworCQlkY2hraCA9IG10b2Qo
Y2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rICopOworCX0gZWxzZSB7CisJCW5kY2hr
aCA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9pZGF0YV9jaHVuayAqKTsKKwl9CisJLyoK
KwkgKiBQdXQgdGhlIHJlc3Qgb2YgdGhlIHRoaW5ncyBpbiBwbGFjZSBub3cuIFNpemUgd2FzIGRv
bmUKKwkgKiBlYXJsaWVyIGluIHByZXZpb3VzIGxvb3AgcHJpb3IgdG8gcGFkZGluZy4KKwkgKi8K
KworI2lmZGVmIFNDVFBfQVNPQ0xPR19PRl9UU05TCisJU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3Rj
Yik7CisJaWYgKGFzb2MtPnRzbl9vdXRfYXQgPj0gU0NUUF9UU05fTE9HX1NJWkUpIHsKKwkJYXNv
Yy0+dHNuX291dF9hdCA9IDA7CisJCWFzb2MtPnRzbl9vdXRfd3JhcHBlZCA9IDE7CisJfQorCWFz
b2MtPm91dF90c25sb2dbYXNvYy0+dHNuX291dF9hdF0udHNuID0gY2hrLT5yZWMuZGF0YS50c247
CisJYXNvYy0+b3V0X3RzbmxvZ1thc29jLT50c25fb3V0X2F0XS5zdHJtID0gY2hrLT5yZWMuZGF0
YS5zaWQ7CisJYXNvYy0+b3V0X3RzbmxvZ1thc29jLT50c25fb3V0X2F0XS5zZXEgPSBjaGstPnJl
Yy5kYXRhLm1pZDsKKwlhc29jLT5vdXRfdHNubG9nW2Fzb2MtPnRzbl9vdXRfYXRdLnN6ID0gY2hr
LT5zZW5kX3NpemU7CisJYXNvYy0+b3V0X3RzbmxvZ1thc29jLT50c25fb3V0X2F0XS5mbGdzID0g
Y2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3M7CisJYXNvYy0+b3V0X3RzbmxvZ1thc29jLT50c25fb3V0
X2F0XS5zdGNiID0gKHZvaWQgKilzdGNiOworCWFzb2MtPm91dF90c25sb2dbYXNvYy0+dHNuX291
dF9hdF0uaW5fcG9zID0gYXNvYy0+dHNuX291dF9hdDsKKwlhc29jLT5vdXRfdHNubG9nW2Fzb2Mt
PnRzbl9vdXRfYXRdLmluX291dCA9IDI7CisJYXNvYy0+dHNuX291dF9hdCsrOworI2VuZGlmCisJ
aWYgKHN0Y2ItPmFzb2MuaWRhdGFfc3VwcG9ydGVkID09IDApIHsKKwkJZGNoa2gtPmNoLmNodW5r
X3R5cGUgPSBTQ1RQX0RBVEE7CisJCWRjaGtoLT5jaC5jaHVua19mbGFncyA9IGNoay0+cmVjLmRh
dGEucmN2X2ZsYWdzOworCQlkY2hraC0+ZHAudHNuID0gaHRvbmwoY2hrLT5yZWMuZGF0YS50c24p
OworCQlkY2hraC0+ZHAuc2lkID0gaHRvbnMoc3RycS0+c2lkKTsKKwkJZGNoa2gtPmRwLnNzbiA9
IGh0b25zKCh1aW50MTZfdCljaGstPnJlYy5kYXRhLm1pZCk7CisJCWRjaGtoLT5kcC5wcGlkID0g
Y2hrLT5yZWMuZGF0YS5wcGlkOworCQlkY2hraC0+Y2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoY2hr
LT5zZW5kX3NpemUpOworCX0gZWxzZSB7CisJCW5kY2hraC0+Y2guY2h1bmtfdHlwZSA9IFNDVFBf
SURBVEE7CisJCW5kY2hraC0+Y2guY2h1bmtfZmxhZ3MgPSBjaGstPnJlYy5kYXRhLnJjdl9mbGFn
czsKKwkJbmRjaGtoLT5kcC50c24gPSBodG9ubChjaGstPnJlYy5kYXRhLnRzbik7CisJCW5kY2hr
aC0+ZHAuc2lkID0gaHRvbnMoc3RycS0+c2lkKTsKKwkJbmRjaGtoLT5kcC5yZXNlcnZlZCA9IGh0
b25zKDApOworCQluZGNoa2gtPmRwLm1pZCA9IGh0b25sKGNoay0+cmVjLmRhdGEubWlkKTsKKwkJ
aWYgKHNwLT5mc24gPT0gMCkKKwkJCW5kY2hraC0+ZHAucHBpZF9mc24ucHBpZCA9IGNoay0+cmVj
LmRhdGEucHBpZDsKKwkJZWxzZQorCQkJbmRjaGtoLT5kcC5wcGlkX2Zzbi5mc24gPSBodG9ubChz
cC0+ZnNuKTsKKwkJc3AtPmZzbisrOworCQluZGNoa2gtPmNoLmNodW5rX2xlbmd0aCA9IGh0b25z
KGNoay0+c2VuZF9zaXplKTsKKwl9CisJLyogTm93IGFkdmFuY2UgdGhlIGNoay0+c2VuZF9zaXpl
IGJ5IHRoZSBhY3R1YWwgcGFkIG5lZWRlZC4gKi8KKwlpZiAoY2hrLT5zZW5kX3NpemUgPCBTQ1RQ
X1NJWkUzMihjaGstPmJvb2tfc2l6ZSkpIHsKKwkJLyogbmVlZCBhIHBhZCAqLworCQlzdHJ1Y3Qg
bWJ1ZiAqbG07CisJCWludCBwYWRzOworCisJCXBhZHMgPSBTQ1RQX1NJWkUzMihjaGstPmJvb2tf
c2l6ZSkgLSBjaGstPnNlbmRfc2l6ZTsKKwkJbG0gPSBzY3RwX3BhZF9sYXN0bWJ1ZihjaGstPmRh
dGEsIHBhZHMsIGNoay0+bGFzdF9tYnVmKTsKKwkJaWYgKGxtICE9IE5VTEwpIHsKKwkJCWNoay0+
bGFzdF9tYnVmID0gbG07CisJCQljaGstPnBhZF9pbnBsYWNlID0gMTsKKwkJfQorCQljaGstPnNl
bmRfc2l6ZSArPSBwYWRzOworCX0KKwlpZiAoUFJfU0NUUF9FTkFCTEVEKGNoay0+ZmxhZ3MpKSB7
CisJCWFzb2MtPnByX3NjdHBfY250Kys7CisJfQorCWlmIChzcC0+bXNnX2lzX2NvbXBsZXRlICYm
IChzcC0+bGVuZ3RoID09IDApICYmIChzcC0+c2VuZGVyX2FsbF9kb25lKSkgeworCQkvKiBBbGwg
ZG9uZSBwdWxsIGFuZCBraWxsIHRoZSBtZXNzYWdlICovCisJCWlmIChzcC0+cHV0X2xhc3Rfb3V0
ID09IDApIHsKKwkJCVNDVFBfUFJJTlRGKCJHYWssIHB1dCBvdXQgZW50aXJlIG1zZyB3aXRoIE5P
IGVuZCEtMlxuIik7CisJCQlTQ1RQX1BSSU5URigic2VuZGVyX2RvbmU6JWQgbGVuOiVkIG1zZ19j
b21wOiVkIHB1dF9sYXN0X291dDolZCBzZW5kX2xvY2s6JWRcbiIsCisJCQkgICAgICAgICAgICBz
cC0+c2VuZGVyX2FsbF9kb25lLAorCQkJICAgICAgICAgICAgc3AtPmxlbmd0aCwKKwkJCSAgICAg
ICAgICAgIHNwLT5tc2dfaXNfY29tcGxldGUsCisJCQkgICAgICAgICAgICBzcC0+cHV0X2xhc3Rf
b3V0LAorCQkJICAgICAgICAgICAgc2VuZF9sb2NrX3VwKTsKKwkJfQorCQlpZiAoKHNlbmRfbG9j
a191cCA9PSAwKSAmJiAoVEFJTFFfTkVYVChzcCwgbmV4dCkgPT0gTlVMTCkpIHsKKwkJCVNDVFBf
VENCX1NFTkRfTE9DSyhzdGNiKTsKKwkJCXNlbmRfbG9ja191cCA9IDE7CisJCX0KKwkJYXRvbWlj
X3N1YnRyYWN0X2ludCgmYXNvYy0+c3RyZWFtX3F1ZXVlX2NudCwgMSk7CisJCVRBSUxRX1JFTU9W
RSgmc3RycS0+b3V0cXVldWUsIHNwLCBuZXh0KTsKKwkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMu
c2N0cF9zc19yZW1vdmVfZnJvbV9zdHJlYW0oc3RjYiwgYXNvYywgc3RycSwgc3AsIHNlbmRfbG9j
a191cCk7CisJCWlmICgoc3RycS0+c3RhdGUgPT0gU0NUUF9TVFJFQU1fUkVTRVRfUEVORElORykg
JiYKKwkJICAgIChzdHJxLT5jaHVua3Nfb25fcXVldWVzID09IDApICYmCisJCSAgICBUQUlMUV9F
TVBUWSgmc3RycS0+b3V0cXVldWUpKSB7CisJCQlzdGNiLT5hc29jLnRyaWdnZXJfcmVzZXQgPSAx
OworCQl9CisJCWlmIChzcC0+bmV0KSB7CisJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoc3AtPm5l
dCk7CisJCQlzcC0+bmV0ID0gTlVMTDsKKwkJfQorCQlpZiAoc3AtPmRhdGEpIHsKKwkJCXNjdHBf
bV9mcmVlbShzcC0+ZGF0YSk7CisJCQlzcC0+ZGF0YSA9IE5VTEw7CisJCX0KKwkJc2N0cF9mcmVl
X2Ffc3RybW9xKHN0Y2IsIHNwLCBzb19sb2NrZWQpOworCX0KKwlhc29jLT5jaHVua3Nfb25fb3V0
X3F1ZXVlKys7CisJc3RycS0+Y2h1bmtzX29uX3F1ZXVlcysrOworCVRBSUxRX0lOU0VSVF9UQUlM
KCZhc29jLT5zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7CisJYXNvYy0+c2VuZF9xdWV1ZV9j
bnQrKzsKK291dF9vZjoKKwlpZiAoc2VuZF9sb2NrX3VwKSB7CisJCVNDVFBfVENCX1NFTkRfVU5M
T0NLKHN0Y2IpOworCX0KKwlyZXR1cm4gKHRvX21vdmUpOworfQorCitzdGF0aWMgdm9pZAorc2N0
cF9maWxsX291dHF1ZXVlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICBzdHJ1Y3Qgc2N0cF9u
ZXRzICpuZXQsIGludCBmcmFnX3BvaW50LCBpbnQgZWVvcl9tb2RlLCBpbnQgKnF1aXRfbm93LCBp
bnQgc29fbG9ja2VkKQoreworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOworCXN0cnVj
dCBzY3RwX3N0cmVhbV9vdXQgKnN0cnE7CisJdWludDMyX3Qgc3BhY2VfbGVmdCwgbW92ZWQsIHRv
dGFsX21vdmVkOworCWludCBiYWlsLCBnaXZldXA7CisKKwlTQ1RQX1RDQl9MT0NLX0FTU0VSVChz
dGNiKTsKKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJdG90YWxfbW92ZWQgPSAwOworCXN3aXRjaCAo
bmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJY2FzZSBBRl9J
TkVUOgorCQkJc3BhY2VfbGVmdCA9IG5ldC0+bXR1IC0gU0NUUF9NSU5fVjRfT1ZFUkhFQUQ7CisJ
CQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCWNhc2UgQUZfSU5FVDY6CisJCQlzcGFj
ZV9sZWZ0ID0gbmV0LT5tdHUgLSBTQ1RQX01JTl9PVkVSSEVBRDsKKwkJCWJyZWFrOworI2VuZGlm
CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQljYXNlIEFGX0NPTk46CisJCQlzcGFjZV9s
ZWZ0ID0gbmV0LT5tdHUgLSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpOworCQkJYnJlYWs7CisjZW5k
aWYKKwkJZGVmYXVsdDoKKwkJCS8qIFRTTkggKi8KKwkJCXNwYWNlX2xlZnQgPSBuZXQtPm10dTsK
KwkJCWJyZWFrOworCX0KKwkvKiBOZWVkIGFuIGFsbG93YW5jZSBmb3IgdGhlIGRhdGEgY2h1bmsg
aGVhZGVyIHRvbyAqLworCXNwYWNlX2xlZnQgLT0gU0NUUF9EQVRBX0NIVU5LX09WRVJIRUFEKHN0
Y2IpOworCisJLyogbXVzdCBtYWtlIGV2ZW4gd29yZCBib3VuZGFyeSAqLworCXNwYWNlX2xlZnQg
Jj0gMHhmZmZmZmZmYzsKKwlzdHJxID0gc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19z
ZWxlY3Rfc3RyZWFtKHN0Y2IsIG5ldCwgYXNvYyk7CisJZ2l2ZXVwID0gMDsKKwliYWlsID0gMDsK
Kwl3aGlsZSAoKHNwYWNlX2xlZnQgPiAwKSAmJiAoc3RycSAhPSBOVUxMKSkgeworCQltb3ZlZCA9
IHNjdHBfbW92ZV90b19vdXRxdWV1ZShzdGNiLCBzdHJxLCBzcGFjZV9sZWZ0LCBmcmFnX3BvaW50
LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2l2ZXVwLCBlZW9yX21vZGUsICZi
YWlsLCBzb19sb2NrZWQpOworCQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX3NjaGVk
dWxlZChzdGNiLCBuZXQsIGFzb2MsIHN0cnEsIG1vdmVkKTsKKwkJaWYgKChnaXZldXAgIT0gMCkg
fHwgKGJhaWwgIT0gMCkpIHsKKwkJCWJyZWFrOworCQl9CisJCXN0cnEgPSBzdGNiLT5hc29jLnNz
X2Z1bmN0aW9ucy5zY3RwX3NzX3NlbGVjdF9zdHJlYW0oc3RjYiwgbmV0LCBhc29jKTsKKwkJdG90
YWxfbW92ZWQgKz0gbW92ZWQ7CisJCWlmIChzcGFjZV9sZWZ0ID49IG1vdmVkKSB7CisJCQlzcGFj
ZV9sZWZ0IC09IG1vdmVkOworCQl9IGVsc2UgeworCQkJc3BhY2VfbGVmdCA9IDA7CisJCX0KKwkJ
aWYgKHNwYWNlX2xlZnQgPj0gU0NUUF9EQVRBX0NIVU5LX09WRVJIRUFEKHN0Y2IpKSB7CisJCQlz
cGFjZV9sZWZ0IC09IFNDVFBfREFUQV9DSFVOS19PVkVSSEVBRChzdGNiKTsKKwkJfSBlbHNlIHsK
KwkJCXNwYWNlX2xlZnQgPSAwOworCQl9CisJCXNwYWNlX2xlZnQgJj0gMHhmZmZmZmZmYzsKKwl9
CisJaWYgKGJhaWwgIT0gMCkKKwkJKnF1aXRfbm93ID0gMTsKKworCXN0Y2ItPmFzb2Muc3NfZnVu
Y3Rpb25zLnNjdHBfc3NfcGFja2V0X2RvbmUoc3RjYiwgbmV0LCBhc29jKTsKKworCWlmICh0b3Rh
bF9tb3ZlZCA9PSAwKSB7CisJCWlmICgoc3RjYi0+YXNvYy5zY3RwX2NtdF9vbl9vZmYgPT0gMCkg
JiYKKwkJICAgIChuZXQgPT0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uKSkgeworCQkJ
LyogcmFuIGRyeSBmb3IgcHJpbWFyeSBuZXR3b3JrIG5ldCAqLworCQkJU0NUUF9TVEFUX0lOQ1Io
c2N0cHNfcHJpbWFyeV9yYW5kcnkpOworCQl9IGVsc2UgaWYgKHN0Y2ItPmFzb2Muc2N0cF9jbXRf
b25fb2ZmID4gMCkgeworCQkJLyogcmFuIGRyeSB3aXRoIENNVCBvbiAqLworCQkJU0NUUF9TVEFU
X0lOQ1Ioc2N0cHNfY210X3JhbmRyeSk7CisJCX0KKwl9Cit9CisKK3ZvaWQKK3NjdHBfZml4X2Vj
bl9lY2hvKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQoreworCXN0cnVjdCBzY3RwX3Rt
aXRfY2h1bmsgKmNoazsKKworCVRBSUxRX0ZPUkVBQ0goY2hrLCAmYXNvYy0+Y29udHJvbF9zZW5k
X3F1ZXVlLCBzY3RwX25leHQpIHsKKwkJaWYgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBf
RUNOX0VDSE8pIHsKKwkJCWNoay0+c2VudCA9IFNDVFBfREFUQUdSQU1fVU5TRU5UOworCQl9CisJ
fQorfQorCit2b2lkCitzY3RwX21vdmVfY2h1bmtzX2Zyb21fbmV0KHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9u
ICphc29jOworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKKwlzdHJ1Y3Qgc2N0cF9zdHJl
YW1fcXVldWVfcGVuZGluZyAqc3A7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAobmV0ID09IE5V
TEwpIHsKKwkJcmV0dXJuOworCX0KKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJZm9yIChpID0gMDsg
aSA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OyBpKyspIHsKKwkJVEFJTFFfRk9SRUFDSChzcCwg
JnN0Y2ItPmFzb2Muc3RybW91dFtpXS5vdXRxdWV1ZSwgbmV4dCkgeworCQkJaWYgKHNwLT5uZXQg
PT0gbmV0KSB7CisJCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHNwLT5uZXQpOworCQkJCXNwLT5u
ZXQgPSBOVUxMOworCQkJfQorCQl9CisJfQorCVRBSUxRX0ZPUkVBQ0goY2hrLCAmYXNvYy0+c2Vu
ZF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJCWlmIChjaGstPndob1RvID09IG5ldCkgeworCQkJc2N0
cF9mcmVlX3JlbW90ZV9hZGRyKGNoay0+d2hvVG8pOworCQkJY2hrLT53aG9UbyA9IE5VTEw7CisJ
CX0KKwl9Cit9CisKK2ludAorc2N0cF9tZWRfY2h1bmtfb3V0cHV0KHN0cnVjdCBzY3RwX2lucGNi
ICppbnAsCisJCSAgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKwkJICAgICAgc3RydWN0IHNj
dHBfYXNzb2NpYXRpb24gKmFzb2MsCisJCSAgICAgIGludCAqbnVtX291dCwKKwkJICAgICAgaW50
ICpyZWFzb25fY29kZSwKKwkJICAgICAgaW50IGNvbnRyb2xfb25seSwgaW50IGZyb21fd2hlcmUs
CisJCSAgICAgIHN0cnVjdCB0aW1ldmFsICpub3csIGludCAqbm93X2ZpbGxlZCwgaW50IGZyYWdf
cG9pbnQsIGludCBzb19sb2NrZWQpCit7CisJLyoqCisJICogT2sgdGhpcyBpcyB0aGUgZ2VuZXJp
YyBjaHVuayBzZXJ2aWNlIHF1ZXVlLiB3ZSBtdXN0IGRvIHRoZQorCSAqIGZvbGxvd2luZzoKKwkg
KiAtIFNlcnZpY2UgdGhlIHN0cmVhbSBxdWV1ZSB0aGF0IGlzIG5leHQsIG1vdmluZyBhbnkKKwkg
KiAgIG1lc3NhZ2UgKG5vdGUgSSBtdXN0IGdldCBhIGNvbXBsZXRlIG1lc3NhZ2UgaS5lLiBGSVJT
VC9NSURETEUgYW5kCisJICogICBMQVNUIHRvIHRoZSBvdXQgcXVldWUgaW4gb25lIHBhc3MpIGFu
ZCBhc3NpZ25pbmcgVFNOJ3MuIFRoaXMKKwkgKiAgIG9ubHkgYXBwbHlzIHRob3VnaCBpZiB0aGUg
cGVlciBkb2VzIG5vdCBzdXBwb3J0IE5EQVRBLiBGb3IgTkRBVEEKKwkgKiAgIGNodW5rcyBpdHMg
b2sgdG8gbm90IHNlbmQgdGhlIGVudGlyZSBtZXNzYWdlIDstKQorCSAqIC0gQ2hlY2sgdG8gc2Vl
IGlmIHRoZSBjd25kL3J3bmQgYWxsb3dzIGFueSBvdXRwdXQsIGlmIHNvIHdlIGdvIGFoZWFkIGFu
ZAorCSAqICAgZm9tdWxhdGUgYW5kIHNlbmQgdGhlIGxvdyBsZXZlbCBjaHVua3MuIE1ha2luZyBz
dXJlIHRvIGNvbWJpbmUKKwkgKiAgIGFueSBjb250cm9sIGluIHRoZSBjb250cm9sIGNodW5rIHF1
ZXVlIGFsc28uCisJICovCisJc3RydWN0IHNjdHBfbmV0cyAqbmV0LCAqc3RhcnRfYXQsICpzYWNr
X2dvZXNfdG8gPSBOVUxMLCAqb2xkX3N0YXJ0X2F0ID0gTlVMTDsKKwlzdHJ1Y3QgbWJ1ZiAqb3V0
Y2hhaW4sICplbmRvdXRjaGFpbjsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssICpuY2hr
OworCisJLyogdGVtcCBhcnJheXMgZm9yIHVubGlua2luZyAqLworCXN0cnVjdCBzY3RwX3RtaXRf
Y2h1bmsgKmRhdGFfbGlzdFtTQ1RQX01BWF9EQVRBX0JVTkRMSU5HXTsKKwlpbnQgbm9fZnJhZ21l
bnRmbGcsIGVycm9yOworCXVuc2lnbmVkIGludCBtYXhfcnduZF9wZXJfZGVzdCwgbWF4X3NlbmRf
cGVyX2Rlc3Q7CisJaW50IG9uZV9jaHVuaywgaGJmbGFnLCBza2lwX2RhdGFfZm9yX3RoaXNfbmV0
OworCWludCBhc2NvbmYsIGNvb2tpZSwgbm9fb3V0X2NudDsKKwlpbnQgYnVuZGxlX2F0LCBjdGxf
Y250LCBub19kYXRhX2NodW5rcywgZWVvcl9tb2RlOworCXVuc2lnbmVkIGludCBtdHUsIHJfbXR1
LCBvbXR1LCBteF9tdHUsIHRvX291dDsKKwlpbnQgdHNuc19zZW50ID0gMDsKKwl1aW50MzJfdCBh
dXRoX29mZnNldDsKKwlzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoOworCXVpbnQxNl90IGF1
dGhfa2V5aWQ7CisJaW50IG92ZXJyaWRlX29rID0gMTsKKwlpbnQgc2tpcF9maWxsX3VwID0gMDsK
KwlpbnQgZGF0YV9hdXRoX3JlcWQgPSAwOworCS8qIEpSUyA1LzE0LzA3IC0gQWRkIGZsYWcgZm9y
IHdoZXRoZXIgYSBoZWFydGJlYXQgaXMgc2VudCB0bworCSAgIHRoZSBkZXN0aW5hdGlvbi4gKi8K
KwlpbnQgcXVpdF9ub3cgPSAwOworCisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCisJaWYgKHNvX2xvY2tlZCkgeworCQlzY3RwX2xvY2tfYXNzZXJ0KFND
VFBfSU5QX1NPKGlucCkpOworCX0gZWxzZSB7CisJCXNjdHBfdW5sb2NrX2Fzc2VydChTQ1RQX0lO
UF9TTyhpbnApKTsKKwl9CisjZW5kaWYKKwkqbnVtX291dCA9IDA7CisJKnJlYXNvbl9jb2RlID0g
MDsKKwlhdXRoX2tleWlkID0gc3RjYi0+YXNvYy5hdXRoaW5mby5hY3RpdmVfa2V5aWQ7CisJaWYg
KChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykgfHwKKwkgICAgKFND
VFBfR0VUX1NUQVRFKHN0Y2IpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpIHx8CisJ
ICAgIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19FWFBMSUNJVF9FT1Ip
KSkgeworCQllZW9yX21vZGUgPSAxOworCX0gZWxzZSB7CisJCWVlb3JfbW9kZSA9IDA7CisJfQor
CWN0bF9jbnQgPSBub19vdXRfY250ID0gYXNjb25mID0gY29va2llID0gMDsKKwkvKgorCSAqIEZp
cnN0IGxldHMgcHJpbWUgdGhlIHB1bXAuIEZvciBlYWNoIGRlc3RpbmF0aW9uLCBpZiB0aGVyZSBp
cyByb29tCisJICogaW4gdGhlIGZsaWdodCBzaXplLCBhdHRlbXB0IHRvIHB1bGwgYW4gTVRVJ3Mg
d29ydGggb3V0IG9mIHRoZQorCSAqIHN0cmVhbSBxdWV1ZXMgaW50byB0aGUgZ2VuZXJhbCBzZW5k
X3F1ZXVlCisJICovCisjaWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVECisJc2N0cF9hdWRpdF9s
b2coMHhDMiwgMik7CisjZW5kaWYKKwlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKwloYmZs
YWcgPSAwOworCWlmIChjb250cm9sX29ubHkpCisJCW5vX2RhdGFfY2h1bmtzID0gMTsKKwllbHNl
CisJCW5vX2RhdGFfY2h1bmtzID0gMDsKKworCS8qIE5vdGhpbmcgdG8gcG9zc2libGUgdG8gc2Vu
ZD8gKi8KKwlpZiAoKFRBSUxRX0VNUFRZKCZhc29jLT5jb250cm9sX3NlbmRfcXVldWUpIHx8CisJ
ICAgICAoYXNvYy0+Y3RybF9xdWV1ZV9jbnQgPT0gc3RjYi0+YXNvYy5lY25fZWNob19jbnRfb25x
KSkgJiYKKwkgICAgVEFJTFFfRU1QVFkoJmFzb2MtPmFzY29uZl9zZW5kX3F1ZXVlKSAmJgorCSAg
ICBUQUlMUV9FTVBUWSgmYXNvYy0+c2VuZF9xdWV1ZSkgJiYKKwkgICAgc2N0cF9pc190aGVyZV91
bnNlbnRfZGF0YShzdGNiLCBzb19sb2NrZWQpID09IDApIHsKKwlub3RoaW5nX3RvX3NlbmQ6CisJ
CSpyZWFzb25fY29kZSA9IDk7CisJCXJldHVybiAoMCk7CisJfQorCWlmIChhc29jLT5wZWVyc19y
d25kID09IDApIHsKKwkJLyogTm8gcm9vbSBpbiBwZWVycyByd25kICovCisJCSpyZWFzb25fY29k
ZSA9IDE7CisJCWlmIChhc29jLT50b3RhbF9mbGlnaHQgPiAwKSB7CisJCQkvKiB3ZSBhcmUgYWxs
b3dlZCBvbmUgY2h1bmsgaW4gZmxpZ2h0ICovCisJCQlub19kYXRhX2NodW5rcyA9IDE7CisJCX0K
Kwl9CisJaWYgKHN0Y2ItPmFzb2MuZWNuX2VjaG9fY250X29ucSkgeworCQkvKiBSZWNvcmQgd2hl
cmUgYSBzYWNrIGdvZXMsIGlmIGFueSAqLworCQlpZiAobm9fZGF0YV9jaHVua3MgJiYKKwkJICAg
IChhc29jLT5jdHJsX3F1ZXVlX2NudCA9PSBzdGNiLT5hc29jLmVjbl9lY2hvX2NudF9vbnEpKSB7
CisJCQkvKiBOb3RoaW5nIGJ1dCBFQ05lIHRvIHNlbmQgLSB3ZSBkb24ndCBkbyB0aGF0ICovCisJ
CQlnb3RvIG5vdGhpbmdfdG9fc2VuZDsKKwkJfQorCQlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2Mt
PmNvbnRyb2xfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJCQlpZiAoKGNoay0+cmVjLmNodW5r
X2lkLmlkID09IFNDVFBfU0VMRUNUSVZFX0FDSykgfHwKKwkJCSAgICAoY2hrLT5yZWMuY2h1bmtf
aWQuaWQgPT0gU0NUUF9OUl9TRUxFQ1RJVkVfQUNLKSkgeworCQkJCXNhY2tfZ29lc190byA9IGNo
ay0+d2hvVG87CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJbWF4X3J3bmRfcGVyX2Rlc3Qg
PSAoKGFzb2MtPnBlZXJzX3J3bmQgKyBhc29jLT50b3RhbF9mbGlnaHQpIC8gYXNvYy0+bnVtbmV0
cyk7CisJaWYgKHN0Y2ItPnNjdHBfc29ja2V0KQorCQltYXhfc2VuZF9wZXJfZGVzdCA9IFNDVFBf
U0JfTElNSVRfU05EKHN0Y2ItPnNjdHBfc29ja2V0KSAvIGFzb2MtPm51bW5ldHM7CisJZWxzZQor
CQltYXhfc2VuZF9wZXJfZGVzdCA9IDA7CisJaWYgKG5vX2RhdGFfY2h1bmtzID09IDApIHsKKwkJ
LyogSG93IG1hbnkgbm9uLWRpcmVjdGVkIGNodW5rcyBhcmUgdGhlcmU/ICovCisJCVRBSUxRX0ZP
UkVBQ0goY2hrLCAmYXNvYy0+c2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJCQlpZiAoY2hrLT53
aG9UbyA9PSBOVUxMKSB7CisJCQkJLyogV2UgYWxyZWFkeSBoYXZlIG5vbi1kaXJlY3RlZAorCQkJ
CSAqIGNodW5rcyBvbiB0aGUgcXVldWUsIG5vIG5lZWQKKwkJCQkgKiB0byBkbyBhIGZpbGwtdXAu
CisJCQkJICovCisJCQkJc2tpcF9maWxsX3VwID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQor
CX0KKwlpZiAoKG5vX2RhdGFfY2h1bmtzID09IDApICYmCisJICAgIChza2lwX2ZpbGxfdXAgPT0g
MCkgJiYKKwkgICAgKCFzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2lzX2VtcHR5KHN0
Y2IsIGFzb2MpKSkgeworCQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4
dCkgeworCQkJLyoKKwkJCSAqIFRoaXMgZm9yIGxvb3Agd2UgYXJlIGluIHRha2VzIGluCisJCQkg
KiBlYWNoIG5ldCwgaWYgaXRzJ3MgZ290IHNwYWNlIGluIGN3bmQgYW5kCisJCQkgKiBoYXMgZGF0
YSBzZW50IHRvIGl0ICh3aGVuIENNVCBpcyBvZmYpIHRoZW4gaXQKKwkJCSAqIGNhbGxzIHNjdHBf
ZmlsbF9vdXRxdWV1ZSBmb3IgdGhlIG5ldC4gVGhpcyBnZXRzCisJCQkgKiBkYXRhIG9uIHRoZSBz
ZW5kIHF1ZXVlIGZvciB0aGF0IG5ldHdvcmsuCisJCQkgKgorCQkJICogSW4gc2N0cF9maWxsX291
dHF1ZXVlIFRTTidzIGFyZSBhc3NpZ25lZCBhbmQKKwkJCSAqIGRhdGEgaXMgY29waWVkIG91dCBv
ZiB0aGUgc3RyZWFtIGJ1ZmZlcnMuIE5vdGUKKwkJCSAqIG1vc3RseSBjb3B5IGJ5IHJlZmVyZW5j
ZSAod2UgaG9wZSkuCisJCQkgKi8KKwkJCW5ldC0+d2luZG93X3Byb2JlID0gMDsKKwkJCWlmICgo
bmV0ICE9IHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSAmJgorCQkJICAgICgobmV0LT5kZXN0X3N0YXRl
ICYgU0NUUF9BRERSX1BGKSB8fAorCQkJICAgICAoIShuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FE
RFJfUkVBQ0hBQkxFKSkgfHwKKwkJCSAgICAgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9V
TkNPTkZJUk1FRCkpKSB7CisJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xl
dmVsKSAmIFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkgeworCQkJCQlzY3RwX2xvZ19jd25kKHN0
Y2IsIG5ldCwgMSwKKwkJCQkJCSAgICAgIFNDVFBfQ1dORF9MT0dfRklMTF9PVVRRX0NBTExFRCk7
CisJCQkJfQorCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKChzdGNiLT5hc29jLmNjX2Z1bmN0
aW9ucy5zY3RwX2N3bmRfbmV3X3RyYW5zbWlzc2lvbl9iZWdpbnMpICYmCisJCQkgICAgKG5ldC0+
ZmxpZ2h0X3NpemUgPT0gMCkpIHsKKwkJCQkoKnN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBf
Y3duZF9uZXdfdHJhbnNtaXNzaW9uX2JlZ2lucykoc3RjYiwgbmV0KTsKKwkJCX0KKwkJCWlmIChu
ZXQtPmZsaWdodF9zaXplID49IG5ldC0+Y3duZCkgeworCQkJCS8qIHNraXAgdGhpcyBuZXR3b3Jr
LCBubyByb29tIC0gY2FuJ3QgZmlsbCAqLworCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQkJc2N0cF9s
b2dfY3duZChzdGNiLCBuZXQsIDMsCisJCQkJCQkgICAgICBTQ1RQX0NXTkRfTE9HX0ZJTExfT1VU
UV9DQUxMRUQpOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpIHsK
KwkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgNCwgU0NUUF9DV05EX0xPR19GSUxMX09VVFFf
Q0FMTEVEKTsKKwkJCX0KKwkJCXNjdHBfZmlsbF9vdXRxdWV1ZShzdGNiLCBuZXQsIGZyYWdfcG9p
bnQsIGVlb3JfbW9kZSwgJnF1aXRfbm93LCBzb19sb2NrZWQpOworCQkJaWYgKHF1aXRfbm93KSB7
CisJCQkJLyogbWVtb3J5IGFsbG9jIGZhaWx1cmUgKi8KKwkJCQlub19kYXRhX2NodW5rcyA9IDE7
CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJLyogbm93IHNlcnZpY2UgZWFjaCBkZXN0aW5h
dGlvbiBhbmQgc2VuZCBvdXQgd2hhdCB3ZSBjYW4gZm9yIGl0ICovCisJLyogTm90aGluZyB0byBz
ZW5kPyAqLworCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlKSAmJgor
CSAgICBUQUlMUV9FTVBUWSgmYXNvYy0+YXNjb25mX3NlbmRfcXVldWUpICYmCisJICAgIFRBSUxR
X0VNUFRZKCZhc29jLT5zZW5kX3F1ZXVlKSkgeworCQkqcmVhc29uX2NvZGUgPSA4OworCQlyZXR1
cm4gKDApOworCX0KKworCWlmIChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPiAwKSB7CisJCS8qIGdl
dCB0aGUgbGFzdCBzdGFydCBwb2ludCAqLworCQlzdGFydF9hdCA9IGFzb2MtPmxhc3RfbmV0X2Nt
dF9zZW5kX3N0YXJ0ZWQ7CisJCWlmIChzdGFydF9hdCA9PSBOVUxMKSB7CisJCQkvKiBudWxsIHNv
IHRvIGJlZ2lubmluZyAqLworCQkJc3RhcnRfYXQgPSBUQUlMUV9GSVJTVCgmYXNvYy0+bmV0cyk7
CisJCX0gZWxzZSB7CisJCQlzdGFydF9hdCA9IFRBSUxRX05FWFQoYXNvYy0+bGFzdF9uZXRfY210
X3NlbmRfc3RhcnRlZCwgc2N0cF9uZXh0KTsKKwkJCWlmIChzdGFydF9hdCA9PSBOVUxMKSB7CisJ
CQkJc3RhcnRfYXQgPSBUQUlMUV9GSVJTVCgmYXNvYy0+bmV0cyk7CisJCQl9CisJCX0KKwkJYXNv
Yy0+bGFzdF9uZXRfY210X3NlbmRfc3RhcnRlZCA9IHN0YXJ0X2F0OworCX0gZWxzZSB7CisJCXN0
YXJ0X2F0ID0gVEFJTFFfRklSU1QoJmFzb2MtPm5ldHMpOworCX0KKwlUQUlMUV9GT1JFQUNIKGNo
aywgJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJCWlmIChjaGstPndo
b1RvID09IE5VTEwpIHsKKwkJCWlmIChhc29jLT5hbHRlcm5hdGUpIHsKKwkJCQljaGstPndob1Rv
ID0gYXNvYy0+YWx0ZXJuYXRlOworCQkJfSBlbHNlIHsKKwkJCQljaGstPndob1RvID0gYXNvYy0+
cHJpbWFyeV9kZXN0aW5hdGlvbjsKKwkJCX0KKwkJCWF0b21pY19hZGRfaW50KCZjaGstPndob1Rv
LT5yZWZfY291bnQsIDEpOworCQl9CisJfQorCW9sZF9zdGFydF9hdCA9IE5VTEw7CithZ2Fpbl9v
bmVfbW9yZV90aW1lOgorCWZvciAobmV0ID0gc3RhcnRfYXQ7IG5ldCAhPSBOVUxMOyBuZXQgPSBU
QUlMUV9ORVhUKG5ldCwgc2N0cF9uZXh0KSkgeworCQkvKiBob3cgbXVjaCBjYW4gd2Ugc2VuZD8g
Ki8KKwkJLyogU0NUUERCRygiRXhhbWluZSBmb3Igc2VuZGluZyBuZXQ6JXhcbiIsICh1aW50MzJf
dCluZXQpOyAqLworCQlpZiAob2xkX3N0YXJ0X2F0ICYmIChvbGRfc3RhcnRfYXQgPT0gbmV0KSkg
eworCQkJLyogdGhyb3VnaCBsaXN0IG9jbXBsZXRlbHkuICovCisJCQlicmVhazsKKwkJfQorCQl0
c25zX3NlbnQgPSAweGE7CisJCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+Y29udHJvbF9zZW5kX3F1
ZXVlKSAmJgorCQkgICAgVEFJTFFfRU1QVFkoJmFzb2MtPmFzY29uZl9zZW5kX3F1ZXVlKSAmJgor
CQkgICAgKG5ldC0+ZmxpZ2h0X3NpemUgPj0gbmV0LT5jd25kKSkgeworCQkJLyogTm90aGluZyBv
biBjb250cm9sIG9yIGFzY29uZiBhbmQgZmxpZ2h0IGlzIGZ1bGwsIHdlIGNhbiBza2lwCisJCQkg
KiBldmVuIGluIHRoZSBDTVQgY2FzZS4KKwkJCSAqLworCQkJY29udGludWU7CisJCX0KKwkJYnVu
ZGxlX2F0ID0gMDsKKwkJZW5kb3V0Y2hhaW4gPSBvdXRjaGFpbiA9IE5VTEw7CisJCWF1dGggPSBO
VUxMOworCQlhdXRoX29mZnNldCA9IDA7CisJCW5vX2ZyYWdtZW50ZmxnID0gMTsKKwkJb25lX2No
dW5rID0gMDsKKwkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkg
eworCQkJc2tpcF9kYXRhX2Zvcl90aGlzX25ldCA9IDE7CisJCX0gZWxzZSB7CisJCQlza2lwX2Rh
dGFfZm9yX3RoaXNfbmV0ID0gMDsKKwkJfQorCQlzd2l0Y2ggKCgoc3RydWN0IHNvY2thZGRyICop
Jm5ldC0+cm8uX2xfYWRkciktPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJY2FzZSBBRl9J
TkVUOgorCQkJbXR1ID0gbmV0LT5tdHUgLSBTQ1RQX01JTl9WNF9PVkVSSEVBRDsKKwkJCWJyZWFr
OworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJY2FzZSBBRl9JTkVUNjoKKwkJCW10dSA9IG5ldC0+
bXR1IC0gU0NUUF9NSU5fT1ZFUkhFQUQ7CisJCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKKwkJY2FzZSBBRl9DT05OOgorCQkJbXR1ID0gbmV0LT5tdHUgLSBzaXpl
b2Yoc3RydWN0IHNjdHBoZHIpOworCQkJYnJlYWs7CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCS8q
IFRTTkggKi8KKwkJCW10dSA9IG5ldC0+bXR1OworCQkJYnJlYWs7CisJCX0KKwkJbXhfbXR1ID0g
bXR1OworCQl0b19vdXQgPSAwOworCQlpZiAobXR1ID4gYXNvYy0+cGVlcnNfcnduZCkgeworCQkJ
aWYgKGFzb2MtPnRvdGFsX2ZsaWdodCA+IDApIHsKKwkJCQkvKiBXZSBoYXZlIGEgcGFja2V0IGlu
IGZsaWdodCBzb21ld2hlcmUgKi8KKwkJCQlyX210dSA9IGFzb2MtPnBlZXJzX3J3bmQ7CisJCQl9
IGVsc2UgeworCQkJCS8qIFdlIGFyZSBhbHdheXMgYWxsb3dlZCB0byBzZW5kIG9uZSBNVFUgb3V0
ICovCisJCQkJb25lX2NodW5rID0gMTsKKwkJCQlyX210dSA9IG10dTsKKwkJCX0KKwkJfSBlbHNl
IHsKKwkJCXJfbXR1ID0gbXR1OworCQl9CisJCWVycm9yID0gMDsKKwkJLyoqKioqKioqKioqKioq
KioqKioqKioqKi8KKwkJLyogQVNDT05GIHRyYW5zbWlzc2lvbiAqLworCQkvKioqKioqKioqKioq
KioqKioqKioqKioqLworCQkvKiBOb3cgZmlyc3QgbGV0cyBnbyB0aHJvdWdoIHRoZSBhc2NvbmYg
cXVldWUgKi8KKwkJVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJmFzb2MtPmFzY29uZl9zZW5kX3F1
ZXVlLCBzY3RwX25leHQsIG5jaGspIHsKKwkJCWlmIChjaGstPnJlYy5jaHVua19pZC5pZCAhPSBT
Q1RQX0FTQ09ORikgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGNoay0+d2hvVG8gPT0g
TlVMTCkgeworCQkJCWlmIChhc29jLT5hbHRlcm5hdGUgPT0gTlVMTCkgeworCQkJCQlpZiAoYXNv
Yy0+cHJpbWFyeV9kZXN0aW5hdGlvbiAhPSBuZXQpIHsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJ
CQkJfSBlbHNlIHsKKwkJCQkJaWYgKGFzb2MtPmFsdGVybmF0ZSAhPSBuZXQpIHsKKwkJCQkJCWJy
ZWFrOworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAoY2hrLT53aG9UbyAhPSBu
ZXQpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKGNoay0+ZGF0YSA9PSBOVUxM
KSB7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoY2hrLT5zZW50ICE9IFNDVFBfREFUQUdSQU1f
VU5TRU5UICYmCisJCQkgICAgY2hrLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7CisJ
CQkJYnJlYWs7CisJCQl9CisJCQkvKgorCQkJICogaWYgbm8gQVVUSCBpcyB5ZXQgaW5jbHVkZWQg
YW5kIHRoaXMgY2h1bmsKKwkJCSAqIHJlcXVpcmVzIGl0LCBtYWtlIHN1cmUgdG8gYWNjb3VudCBm
b3IgaXQuICBXZQorCQkJICogZG9uJ3QgYXBwbHkgdGhlIHNpemUgdW50aWwgdGhlIEFVVEggY2h1
bmsgaXMKKwkJCSAqIGFjdHVhbGx5IGFkZGVkIGJlbG93IGluIGNhc2UgdGhlcmUgaXMgbm8gcm9v
bSBmb3IKKwkJCSAqIHRoaXMgY2h1bmsuIE5PVEU6IHdlIG92ZXJsb2FkIHRoZSB1c2Ugb2YgIm9t
dHUiCisJCQkgKiBoZXJlCisJCQkgKi8KKwkJCWlmICgoYXV0aCA9PSBOVUxMKSAmJgorCQkJICAg
IHNjdHBfYXV0aF9pc19yZXF1aXJlZF9jaHVuayhjaGstPnJlYy5jaHVua19pZC5pZCwKKwkJCQkJ
CQlzdGNiLT5hc29jLnBlZXJfYXV0aF9jaHVua3MpKSB7CisJCQkJb210dSA9IHNjdHBfZ2V0X2F1
dGhfY2h1bmtfbGVuKHN0Y2ItPmFzb2MucGVlcl9obWFjX2lkKTsKKwkJCX0gZWxzZQorCQkJCW9t
dHUgPSAwOworCQkJLyogSGVyZSB3ZSBkbyBOT1QgZmFjdG9yIHRoZSByX210dSAqLworCQkJaWYg
KChjaGstPnNlbmRfc2l6ZSA8IChpbnQpKG10dSAtIG9tdHUpKSB8fAorCQkJICAgIChjaGstPmZs
YWdzICYgQ0hVTktfRkxBR1NfRlJBR01FTlRfT0spKSB7CisJCQkJLyoKKwkJCQkgKiBXZSBwcm9i
YWJseSBzaG91bGQgZ2xvbSB0aGUgbWJ1ZiBjaGFpbgorCQkJCSAqIGZyb20gdGhlIGNoay0+ZGF0
YSBmb3IgY29udHJvbCBidXQgdGhlCisJCQkJICogcHJvYmxlbSBpcyBpdCBiZWNvbWVzIHlldCBv
bmUgbW9yZSBsZXZlbAorCQkJCSAqIG9mIHRyYWNraW5nIHRvIGRvIGlmIGZvciBzb21lIHJlYXNv
bgorCQkJCSAqIG91dHB1dCBmYWlscy4gVGhlbiBJIGhhdmUgZ290IHRvCisJCQkJICogcmVjb25z
dHJ1Y3QgdGhlIG1lcmdlZCBjb250cm9sIGNoYWluLi4gZWwKKwkJCQkgKiB5dWNrby4uIGZvciBu
b3cgd2UgdGFrZSB0aGUgZWFzeSB3YXkgYW5kCisJCQkJICogZG8gdGhlIGNvcHkKKwkJCQkgKi8K
KwkJCQkvKgorCQkJCSAqIEFkZCBhbiBBVVRIIGNodW5rLCBpZiBjaHVuayByZXF1aXJlcyBpdAor
CQkJCSAqIHNhdmUgdGhlIG9mZnNldCBpbnRvIHRoZSBjaGFpbiBmb3IgQVVUSAorCQkJCSAqLwor
CQkJCWlmICgoYXV0aCA9PSBOVUxMKSAmJgorCQkJCSAgICAoc2N0cF9hdXRoX2lzX3JlcXVpcmVk
X2NodW5rKGNoay0+cmVjLmNodW5rX2lkLmlkLAorCQkJCQkJCQkgc3RjYi0+YXNvYy5wZWVyX2F1
dGhfY2h1bmtzKSkpIHsKKwkJCQkJb3V0Y2hhaW4gPSBzY3RwX2FkZF9hdXRoX2NodW5rKG91dGNo
YWluLAorCQkJCQkJCQkgICAgICAgJmVuZG91dGNoYWluLAorCQkJCQkJCQkgICAgICAgJmF1dGgs
CisJCQkJCQkJCSAgICAgICAmYXV0aF9vZmZzZXQsCisJCQkJCQkJCSAgICAgICBzdGNiLAorCQkJ
CQkJCQkgICAgICAgY2hrLT5yZWMuY2h1bmtfaWQuaWQpOworCQkJCQlTQ1RQX1NUQVRfSU5DUl9D
T1VOVEVSNjQoc2N0cHNfb3V0Y29udHJvbGNodW5rcyk7CisJCQkJfQorCQkJCW91dGNoYWluID0g
c2N0cF9jb3B5X21idWZjaGFpbihjaGstPmRhdGEsIG91dGNoYWluLCAmZW5kb3V0Y2hhaW4sCisJ
CQkJCQkJICAgICAgIChpbnQpY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0YSwKKwkJCQkJ
CQkgICAgICAgY2hrLT5zZW5kX3NpemUsIGNoay0+Y29weV9ieV9yZWYpOworCQkJCWlmIChvdXRj
aGFpbiA9PSBOVUxMKSB7CisJCQkJCSpyZWFzb25fY29kZSA9IDg7CisJCQkJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT01FTSk7
CisJCQkJCXJldHVybiAoRU5PTUVNKTsKKwkJCQl9CisJCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRF
UjY0KHNjdHBzX291dGNvbnRyb2xjaHVua3MpOworCQkJCS8qIHVwZGF0ZSBvdXIgTVRVIHNpemUg
Ki8KKwkJCQlpZiAobXR1ID4gKGNoay0+c2VuZF9zaXplICsgb210dSkpCisJCQkJCW10dSAtPSAo
Y2hrLT5zZW5kX3NpemUgKyBvbXR1KTsKKwkJCQllbHNlCisJCQkJCW10dSA9IDA7CisJCQkJdG9f
b3V0ICs9IChjaGstPnNlbmRfc2l6ZSArIG9tdHUpOworCQkJCS8qIERvIGNsZWFyIElQX0RGID8g
Ki8KKwkJCQlpZiAoY2hrLT5mbGFncyAmIENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LKSB7CisJCQkJ
CW5vX2ZyYWdtZW50ZmxnID0gMDsKKwkJCQl9CisJCQkJaWYgKGNoay0+cmVjLmNodW5rX2lkLmNh
bl90YWtlX2RhdGEpCisJCQkJCWNoay0+ZGF0YSA9IE5VTEw7CisJCQkJLyoKKwkJCQkgKiBzZXQg
aGIgZmxhZyBzaW5jZSB3ZSBjYW4KKwkJCQkgKiB1c2UgdGhlc2UgZm9yIFJUTworCQkJCSAqLwor
CQkJCWhiZmxhZyA9IDE7CisJCQkJYXNjb25mID0gMTsKKwkJCQkvKgorCQkJCSAqIHNob3VsZCBz
eXNjdGwgdGhpczogZG9uJ3QKKwkJCQkgKiBidW5kbGUgZGF0YSB3aXRoIEFTQ09ORgorCQkJCSAq
IHNpbmNlIGl0IHJlcXVpcmVzIEFVVEgKKwkJCQkgKi8KKwkJCQlub19kYXRhX2NodW5rcyA9IDE7
CisJCQkJY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9TRU5UOworCQkJCWlmIChjaGstPndob1Rv
ID09IE5VTEwpIHsKKwkJCQkJY2hrLT53aG9UbyA9IG5ldDsKKwkJCQkJYXRvbWljX2FkZF9pbnQo
Jm5ldC0+cmVmX2NvdW50LCAxKTsKKwkJCQl9CisJCQkJY2hrLT5zbmRfY291bnQrKzsKKwkJCQlp
ZiAobXR1ID09IDApIHsKKwkJCQkJLyoKKwkJCQkJICogT2sgd2UgYXJlIG91dCBvZiByb29tIGJ1
dCB3ZSBjYW4KKwkJCQkJICogb3V0cHV0IHdpdGhvdXQgZWZmZWN0aW5nIHRoZQorCQkJCQkgKiBm
bGlnaHQgc2l6ZSBzaW5jZSB0aGlzIGxpdHRsZSBndXkKKwkJCQkJICogaXMgYSBjb250cm9sIG9u
bHkgcGFja2V0LgorCQkJCQkgKi8KKwkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZ
UEVfQVNDT05GLCBpbnAsIHN0Y2IsIG5ldCk7CisJCQkJCS8qCisJCQkJCSAqIGRvIE5PVCBjbGVh
ciB0aGUgYXNjb25mCisJCQkJCSAqIGZsYWcgYXMgaXQgaXMgdXNlZCB0byBkbworCQkJCQkgKiBh
cHByb3ByaWF0ZSBzb3VyY2UgYWRkcmVzcworCQkJCQkgKiBzZWxlY3Rpb24uCisJCQkJCSAqLwor
CQkJCQlpZiAoKm5vd19maWxsZWQgPT0gMCkgeworCQkJCQkJKHZvaWQpU0NUUF9HRVRUSU1FX1RJ
TUVWQUwobm93KTsKKwkJCQkJCSpub3dfZmlsbGVkID0gMTsKKwkJCQkJfQorCQkJCQluZXQtPmxh
c3Rfc2VudF90aW1lID0gKm5vdzsKKwkJCQkJaGJmbGFnID0gMDsKKwkJCQkJaWYgKChlcnJvciA9
IHNjdHBfbG93bGV2ZWxfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgbmV0LAorCQkJCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZuZXQt
PnJvLl9sX2FkZHIsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRjaGFpbiwgYXV0aF9vZmZzZXQsIGF1dGgsCisJCQkJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGNiLT5hc29jLmF1dGhpbmZvLmFjdGl2ZV9rZXlpZCwKKwkJ
CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vX2ZyYWdtZW50Zmxn
LCAwLCBhc2NvbmYsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnAtPnNjdHBfbHBvcnQsIHN0Y2ItPnJwb3J0LAorCQkJCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaHRvbmwoc3RjYi0+YXNvYy5wZWVyX3Z0YWcpLAorCQkJCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0LT5wb3J0LCBOVUxMLAor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLAorI2VuZGlmCisJ
CQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb19sb2NrZWQpKSkg
eworCQkJCQkJLyogZXJyb3IsIHdlIGNvdWxkIG5vdCBvdXRwdXQgKi8KKwkJCQkJCVNDVFBEQkco
U0NUUF9ERUJVR19PVVRQVVQzLCAiR2FrIHNlbmQgZXJyb3IgJWRcbiIsIGVycm9yKTsKKwkJCQkJ
CWlmIChmcm9tX3doZXJlID09IDApIHsKKwkJCQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19sb3ds
ZXZlbGVycnVzcik7CisJCQkJCQl9CisJCQkJCQlpZiAoZXJyb3IgPT0gRU5PQlVGUykgeworCQkJ
CQkJCWFzb2MtPmlmcF9oYWRfZW5vYnVmID0gMTsKKwkJCQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rw
c19sb3dsZXZlbGVycik7CisJCQkJCQl9CisJCQkJCQkvKiBlcnJvciwgY291bGQgbm90IG91dHB1
dCAqLworCQkJCQkJaWYgKGVycm9yID09IEVIT1NUVU5SRUFDSCkgeworCQkJCQkJCS8qCisJCQkJ
CQkJICogRGVzdGluYXRpb24gd2VudAorCQkJCQkJCSAqIHVucmVhY2hhYmxlCisJCQkJCQkJICog
ZHVyaW5nIHRoaXMgc2VuZAorCQkJCQkJCSAqLworCQkJCQkJCXNjdHBfbW92ZV9jaHVua3NfZnJv
bV9uZXQoc3RjYiwgbmV0KTsKKwkJCQkJCX0KKwkJCQkJCSpyZWFzb25fY29kZSA9IDc7CisJCQkJ
CQlicmVhazsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWFzb2MtPmlmcF9oYWRfZW5vYnVmID0gMDsK
KwkJCQkJfQorCQkJCQkvKgorCQkJCQkgKiBpbmNyZWFzZSB0aGUgbnVtYmVyIHdlIHNlbnQsIGlm
IGEKKwkJCQkJICogY29va2llIGlzIHNlbnQgd2UgZG9uJ3QgdGVsbCB0aGVtCisJCQkJCSAqIGFu
eSB3YXMgc2VudCBvdXQuCisJCQkJCSAqLworCQkJCQlvdXRjaGFpbiA9IGVuZG91dGNoYWluID0g
TlVMTDsKKwkJCQkJYXV0aCA9IE5VTEw7CisJCQkJCWF1dGhfb2Zmc2V0ID0gMDsKKwkJCQkJaWYg
KCFub19vdXRfY250KQorCQkJCQkJKm51bV9vdXQgKz0gY3RsX2NudDsKKwkJCQkJLyogcmVjYWxj
IGEgY2xlYW4gc2xhdGUgYW5kIHNldHVwICovCisJCQkJCXN3aXRjaCAobmV0LT5yby5fbF9hZGRy
LnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCQkJCWNhc2UgQUZfSU5FVDoKKwkJCQkJ
CQltdHUgPSBuZXQtPm10dSAtIFNDVFBfTUlOX1Y0X09WRVJIRUFEOworCQkJCQkJCWJyZWFrOwor
I2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCQkJCWNhc2UgQUZfSU5FVDY6CisJCQkJCQkJbXR1ID0g
bmV0LT5tdHUgLSBTQ1RQX01JTl9PVkVSSEVBRDsKKwkJCQkJCQlicmVhazsKKyNlbmRpZgorI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQkJCWNhc2UgQUZfQ09OTjoKKwkJCQkJCQltdHUg
PSBuZXQtPm10dSAtIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7CisJCQkJCQkJYnJlYWs7CisjZW5k
aWYKKwkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJLyogVFNOSCAqLworCQkJCQkJCW10dSA9IG5ldC0+
bXR1OworCQkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCXRvX291dCA9IDA7CisJCQkJCW5vX2Zy
YWdtZW50ZmxnID0gMTsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKGVycm9yICE9IDApIHsKKwkJ
CS8qIHRyeSBuZXh0IG5ldCAqLworCQkJY29udGludWU7CisJCX0KKwkJLyoqKioqKioqKioqKioq
KioqKioqKioqKi8KKwkJLyogQ29udHJvbCB0cmFuc21pc3Npb24gKi8KKwkJLyoqKioqKioqKioq
KioqKioqKioqKioqKi8KKwkJLyogTm93IGZpcnN0IGxldHMgZ28gdGhyb3VnaCB0aGUgY29udHJv
bCBxdWV1ZSAqLworCQlUQUlMUV9GT1JFQUNIX1NBRkUoY2hrLCAmYXNvYy0+Y29udHJvbF9zZW5k
X3F1ZXVlLCBzY3RwX25leHQsIG5jaGspIHsKKwkJCWlmICgoc2Fja19nb2VzX3RvKSAmJgorCQkJ
ICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0VDTl9FQ0hPKSAmJgorCQkJICAgIChj
aGstPndob1RvICE9IHNhY2tfZ29lc190bykpIHsKKwkJCQkvKgorCQkJCSAqIGlmIHdlIGhhdmUg
YSBzYWNrIGluIHF1ZXVlLCBhbmQgd2UgYXJlIGxvb2tpbmcgYXQgYW4KKwkJCQkgKiBlY24gZWNo
byB0aGF0IGlzIE5PVCBxdWV1ZWQgdG8gd2hlcmUgdGhlIHNhY2sgaXMgZ29pbmcuLgorCQkJCSAq
LworCQkJCWlmIChjaGstPndob1RvID09IG5ldCkgeworCQkJCQkvKiBEb24ndCB0cmFuc21pdCBp
dCB0byB3aGVyZSBpdHMgZ29pbmcgKGN1cnJlbnQgbmV0KSAqLworCQkJCQljb250aW51ZTsKKwkJ
CQl9IGVsc2UgaWYgKHNhY2tfZ29lc190byA9PSBuZXQpIHsKKwkJCQkJLyogQnV0IGRvIHRyYW5z
bWl0IGl0IHRvIHRoaXMgYWRkcmVzcyAqLworCQkJCQlnb3RvIHNraXBfbmV0X2NoZWNrOworCQkJ
CX0KKwkJCX0KKwkJCWlmIChjaGstPndob1RvID09IE5VTEwpIHsKKwkJCQlpZiAoYXNvYy0+YWx0
ZXJuYXRlID09IE5VTEwpIHsKKwkJCQkJaWYgKGFzb2MtPnByaW1hcnlfZGVzdGluYXRpb24gIT0g
bmV0KSB7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWlmIChh
c29jLT5hbHRlcm5hdGUgIT0gbmV0KSB7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCX0K
KwkJCX0gZWxzZSB7CisJCQkJaWYgKGNoay0+d2hvVG8gIT0gbmV0KSB7CisJCQkJCWNvbnRpbnVl
OworCQkJCX0KKwkJCX0KKwkJc2tpcF9uZXRfY2hlY2s6CisJCQlpZiAoY2hrLT5kYXRhID09IE5V
TEwpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChjaGstPnNlbnQgIT0gU0NUUF9EQVRB
R1JBTV9VTlNFTlQpIHsKKwkJCQkvKgorCQkJCSAqIEl0IG11c3QgYmUgdW5zZW50LiBDb29raWVz
IGFuZCBBU0NPTkYncworCQkJCSAqIGhhbmcgYXJvdW5kIGJ1dCB0aGVyZSB0aW1lcnMgd2lsbCBm
b3JjZQorCQkJCSAqIHdoZW4gbWFya2VkIGZvciByZXNlbmQuCisJCQkJICovCisJCQkJY29udGlu
dWU7CisJCQl9CisJCQkvKgorCQkJICogaWYgbm8gQVVUSCBpcyB5ZXQgaW5jbHVkZWQgYW5kIHRo
aXMgY2h1bmsKKwkJCSAqIHJlcXVpcmVzIGl0LCBtYWtlIHN1cmUgdG8gYWNjb3VudCBmb3IgaXQu
ICBXZQorCQkJICogZG9uJ3QgYXBwbHkgdGhlIHNpemUgdW50aWwgdGhlIEFVVEggY2h1bmsgaXMK
KwkJCSAqIGFjdHVhbGx5IGFkZGVkIGJlbG93IGluIGNhc2UgdGhlcmUgaXMgbm8gcm9vbSBmb3IK
KwkJCSAqIHRoaXMgY2h1bmsuIE5PVEU6IHdlIG92ZXJsb2FkIHRoZSB1c2Ugb2YgIm9tdHUiCisJ
CQkgKiBoZXJlCisJCQkgKi8KKwkJCWlmICgoYXV0aCA9PSBOVUxMKSAmJgorCQkJICAgIHNjdHBf
YXV0aF9pc19yZXF1aXJlZF9jaHVuayhjaGstPnJlYy5jaHVua19pZC5pZCwKKwkJCQkJCQlzdGNi
LT5hc29jLnBlZXJfYXV0aF9jaHVua3MpKSB7CisJCQkJb210dSA9IHNjdHBfZ2V0X2F1dGhfY2h1
bmtfbGVuKHN0Y2ItPmFzb2MucGVlcl9obWFjX2lkKTsKKwkJCX0gZWxzZQorCQkJCW9tdHUgPSAw
OworCQkJLyogSGVyZSB3ZSBkbyBOT1QgZmFjdG9yIHRoZSByX210dSAqLworCQkJaWYgKChjaGst
PnNlbmRfc2l6ZSA8PSAoaW50KShtdHUgLSBvbXR1KSkgfHwKKwkJCSAgICAoY2hrLT5mbGFncyAm
IENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LKSkgeworCQkJCS8qCisJCQkJICogV2UgcHJvYmFibHkg
c2hvdWxkIGdsb20gdGhlIG1idWYgY2hhaW4KKwkJCQkgKiBmcm9tIHRoZSBjaGstPmRhdGEgZm9y
IGNvbnRyb2wgYnV0IHRoZQorCQkJCSAqIHByb2JsZW0gaXMgaXQgYmVjb21lcyB5ZXQgb25lIG1v
cmUgbGV2ZWwKKwkJCQkgKiBvZiB0cmFja2luZyB0byBkbyBpZiBmb3Igc29tZSByZWFzb24KKwkJ
CQkgKiBvdXRwdXQgZmFpbHMuIFRoZW4gSSBoYXZlIGdvdCB0bworCQkJCSAqIHJlY29uc3RydWN0
IHRoZSBtZXJnZWQgY29udHJvbCBjaGFpbi4uIGVsCisJCQkJICogeXVja28uLiBmb3Igbm93IHdl
IHRha2UgdGhlIGVhc3kgd2F5IGFuZAorCQkJCSAqIGRvIHRoZSBjb3B5CisJCQkJICovCisJCQkJ
LyoKKwkJCQkgKiBBZGQgYW4gQVVUSCBjaHVuaywgaWYgY2h1bmsgcmVxdWlyZXMgaXQKKwkJCQkg
KiBzYXZlIHRoZSBvZmZzZXQgaW50byB0aGUgY2hhaW4gZm9yIEFVVEgKKwkJCQkgKi8KKwkJCQlp
ZiAoKGF1dGggPT0gTlVMTCkgJiYKKwkJCQkgICAgKHNjdHBfYXV0aF9pc19yZXF1aXJlZF9jaHVu
ayhjaGstPnJlYy5jaHVua19pZC5pZCwKKwkJCQkJCQkJIHN0Y2ItPmFzb2MucGVlcl9hdXRoX2No
dW5rcykpKSB7CisJCQkJCW91dGNoYWluID0gc2N0cF9hZGRfYXV0aF9jaHVuayhvdXRjaGFpbiwK
KwkJCQkJCQkJICAgICAgICZlbmRvdXRjaGFpbiwKKwkJCQkJCQkJICAgICAgICZhdXRoLAorCQkJ
CQkJCQkgICAgICAgJmF1dGhfb2Zmc2V0LAorCQkJCQkJCQkgICAgICAgc3RjYiwKKwkJCQkJCQkJ
ICAgICAgIGNoay0+cmVjLmNodW5rX2lkLmlkKTsKKwkJCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRF
UjY0KHNjdHBzX291dGNvbnRyb2xjaHVua3MpOworCQkJCX0KKwkJCQlvdXRjaGFpbiA9IHNjdHBf
Y29weV9tYnVmY2hhaW4oY2hrLT5kYXRhLCBvdXRjaGFpbiwgJmVuZG91dGNoYWluLAorCQkJCQkJ
CSAgICAgICAoaW50KWNoay0+cmVjLmNodW5rX2lkLmNhbl90YWtlX2RhdGEsCisJCQkJCQkJICAg
ICAgIGNoay0+c2VuZF9zaXplLCBjaGstPmNvcHlfYnlfcmVmKTsKKwkJCQlpZiAob3V0Y2hhaW4g
PT0gTlVMTCkgeworCQkJCQkqcmVhc29uX2NvZGUgPSA4OworCQkJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOworCQkJ
CQlyZXR1cm4gKEVOT01FTSk7CisJCQkJfQorCQkJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChz
Y3Rwc19vdXRjb250cm9sY2h1bmtzKTsKKwkJCQkvKiB1cGRhdGUgb3VyIE1UVSBzaXplICovCisJ
CQkJaWYgKG10dSA+IChjaGstPnNlbmRfc2l6ZSArIG9tdHUpKQorCQkJCQltdHUgLT0gKGNoay0+
c2VuZF9zaXplICsgb210dSk7CisJCQkJZWxzZQorCQkJCQltdHUgPSAwOworCQkJCXRvX291dCAr
PSAoY2hrLT5zZW5kX3NpemUgKyBvbXR1KTsKKwkJCQkvKiBEbyBjbGVhciBJUF9ERiA/ICovCisJ
CQkJaWYgKGNoay0+ZmxhZ3MgJiBDSFVOS19GTEFHU19GUkFHTUVOVF9PSykgeworCQkJCQlub19m
cmFnbWVudGZsZyA9IDA7CisJCQkJfQorCQkJCWlmIChjaGstPnJlYy5jaHVua19pZC5jYW5fdGFr
ZV9kYXRhKQorCQkJCQljaGstPmRhdGEgPSBOVUxMOworCQkJCS8qIE1hcmsgdGhpbmdzIHRvIGJl
IHJlbW92ZWQsIGlmIG5lZWRlZCAqLworCQkJCWlmICgoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0g
U0NUUF9TRUxFQ1RJVkVfQUNLKSB8fAorCQkJCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0g
U0NUUF9OUl9TRUxFQ1RJVkVfQUNLKSB8fCAvKiBFWSAqLworCQkJCSAgICAoY2hrLT5yZWMuY2h1
bmtfaWQuaWQgPT0gU0NUUF9IRUFSVEJFQVRfUkVRVUVTVCkgfHwKKwkJCQkgICAgKGNoay0+cmVj
LmNodW5rX2lkLmlkID09IFNDVFBfSEVBUlRCRUFUX0FDSykgfHwKKwkJCQkgICAgKGNoay0+cmVj
LmNodW5rX2lkLmlkID09IFNDVFBfU0hVVERPV04pIHx8CisJCQkJICAgIChjaGstPnJlYy5jaHVu
a19pZC5pZCA9PSBTQ1RQX1NIVVRET1dOX0FDSykgfHwKKwkJCQkgICAgKGNoay0+cmVjLmNodW5r
X2lkLmlkID09IFNDVFBfT1BFUkFUSU9OX0VSUk9SKSB8fAorCQkJCSAgICAoY2hrLT5yZWMuY2h1
bmtfaWQuaWQgPT0gU0NUUF9DT09LSUVfQUNLKSB8fAorCQkJCSAgICAoY2hrLT5yZWMuY2h1bmtf
aWQuaWQgPT0gU0NUUF9FQ05fQ1dSKSB8fAorCQkJCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQg
PT0gU0NUUF9QQUNLRVRfRFJPUFBFRCkgfHwKKwkJCQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlk
ID09IFNDVFBfQVNDT05GX0FDSykpIHsKKwkJCQkJaWYgKGNoay0+cmVjLmNodW5rX2lkLmlkID09
IFNDVFBfSEVBUlRCRUFUX1JFUVVFU1QpIHsKKwkJCQkJCWhiZmxhZyA9IDE7CisJCQkJCX0KKwkJ
CQkJLyogcmVtb3ZlIHRoZXNlIGNodW5rcyBhdCB0aGUgZW5kICovCisJCQkJCWlmICgoY2hrLT5y
ZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9TRUxFQ1RJVkVfQUNLKSB8fAorCQkJCQkgICAgKGNoay0+
cmVjLmNodW5rX2lkLmlkID09IFNDVFBfTlJfU0VMRUNUSVZFX0FDSykpIHsKKwkJCQkJCS8qIHR1
cm4gb2ZmIHRoZSB0aW1lciAqLworCQkJCQkJaWYgKFNDVFBfT1NfVElNRVJfUEVORElORygmc3Rj
Yi0+YXNvYy5kYWNrX3RpbWVyLnRpbWVyKSkgeworCQkJCQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQ
X1RJTUVSX1RZUEVfUkVDViwKKwkJCQkJCQkgICAgICAgICAgICAgICAgaW5wLCBzdGNiLCBOVUxM
LAorCQkJCQkJCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9PVVRQVVQgKyBTQ1RQX0xP
Q18xKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQljdGxfY250Kys7CisJCQkJfSBlbHNlIHsKKwkJ
CQkJLyoKKwkJCQkJICogT3RoZXIgY2h1bmtzLCBzaW5jZSB0aGV5IGhhdmUKKwkJCQkJICogdGlt
ZXJzIHJ1bm5pbmcgKGkuZS4gQ09PS0lFKQorCQkJCQkgKiB3ZSBqdXN0ICJ0cnVzdCIgdGhhdCBp
dAorCQkJCQkgKiBnZXRzIHNlbnQgb3IgcmV0cmFuc21pdHRlZC4KKwkJCQkJICovCisJCQkJCWN0
bF9jbnQrKzsKKwkJCQkJaWYgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfQ09PS0lFX0VD
SE8pIHsKKwkJCQkJCWNvb2tpZSA9IDE7CisJCQkJCQlub19vdXRfY250ID0gMTsKKwkJCQkJfSBl
bHNlIGlmIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0VDTl9FQ0hPKSB7CisJCQkJCQkv
KgorCQkJCQkJICogSW5jcmVtZW50IGVjbmUgc2VuZCBjb3VudCBoZXJlCisJCQkJCQkgKiB0aGlz
IG1lYW5zIHdlIG1heSBiZSBvdmVyLXplYWxvdXMgaW4KKwkJCQkJCSAqIG91ciBjb3VudGluZyBp
ZiB0aGUgc2VuZCBmYWlscywgYnV0IGl0cworCQkJCQkJICogdGhlIGJlc3QgcGxhY2UgdG8gZG8g
aXQgKHdlIHVzZWQgdG8gZG8KKwkJCQkJCSAqIGl0IGluIHRoZSBxdWV1ZSBvZiB0aGUgY2h1bmss
IGJ1dCB0aGF0IGRpZAorCQkJCQkJICogbm90IHRlbGwgaG93IG1hbnkgdGltZXMgaXQgd2FzIHNl
bnQuCisJCQkJCQkgKi8KKwkJCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRlY25lKTsKKwkJ
CQkJfQorCQkJCQljaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1NFTlQ7CisJCQkJCWlmIChjaGst
Pndob1RvID09IE5VTEwpIHsKKwkJCQkJCWNoay0+d2hvVG8gPSBuZXQ7CisJCQkJCQlhdG9taWNf
YWRkX2ludCgmbmV0LT5yZWZfY291bnQsIDEpOworCQkJCQl9CisJCQkJCWNoay0+c25kX2NvdW50
Kys7CisJCQkJfQorCQkJCWlmIChtdHUgPT0gMCkgeworCQkJCQkvKgorCQkJCQkgKiBPayB3ZSBh
cmUgb3V0IG9mIHJvb20gYnV0IHdlIGNhbgorCQkJCQkgKiBvdXRwdXQgd2l0aG91dCBlZmZlY3Rp
bmcgdGhlCisJCQkJCSAqIGZsaWdodCBzaXplIHNpbmNlIHRoaXMgbGl0dGxlIGd1eQorCQkJCQkg
KiBpcyBhIGNvbnRyb2wgb25seSBwYWNrZXQuCisJCQkJCSAqLworCQkJCQlpZiAoYXNjb25mKSB7
CisJCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9BU0NPTkYsIGlucCwgc3Rj
YiwgbmV0KTsKKwkJCQkJCS8qCisJCQkJCQkgKiBkbyBOT1QgY2xlYXIgdGhlIGFzY29uZgorCQkJ
CQkJICogZmxhZyBhcyBpdCBpcyB1c2VkIHRvIGRvCisJCQkJCQkgKiBhcHByb3ByaWF0ZSBzb3Vy
Y2UgYWRkcmVzcworCQkJCQkJICogc2VsZWN0aW9uLgorCQkJCQkJICovCisJCQkJCX0KKwkJCQkJ
aWYgKGNvb2tpZSkgeworCQkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfQ09P
S0lFLCBpbnAsIHN0Y2IsIG5ldCk7CisJCQkJCQljb29raWUgPSAwOworCQkJCQl9CisJCQkJCS8q
IE9ubHkgSEIgb3IgQVNDT05GIGFkdmFuY2VzIHRpbWUgKi8KKwkJCQkJaWYgKGhiZmxhZykgewor
CQkJCQkJaWYgKCpub3dfZmlsbGVkID09IDApIHsKKwkJCQkJCQkodm9pZClTQ1RQX0dFVFRJTUVf
VElNRVZBTChub3cpOworCQkJCQkJCSpub3dfZmlsbGVkID0gMTsKKwkJCQkJCX0KKwkJCQkJCW5l
dC0+bGFzdF9zZW50X3RpbWUgPSAqbm93OworCQkJCQkJaGJmbGFnID0gMDsKKwkJCQkJfQorCQkJ
CQlpZiAoKGVycm9yID0gc2N0cF9sb3dsZXZlbF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBuZXQs
CisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNv
Y2thZGRyICopJm5ldC0+cm8uX2xfYWRkciwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dGNoYWluLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXV0aF9vZmZzZXQsIGF1dGgsCisJCQkJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGNiLT5hc29jLmF1dGhpbmZvLmFjdGl2ZV9rZXlpZCwK
KwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vX2ZyYWdtZW50
ZmxnLCAwLCBhc2NvbmYsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnAtPnNjdHBfbHBvcnQsIHN0Y2ItPnJwb3J0LAorCQkJCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaHRvbmwoc3RjYi0+YXNvYy5wZWVyX3Z0YWcpLAorCQkJ
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0LT5wb3J0LCBOVUxM
LAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJ
CQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLAorI2VuZGlm
CisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb19sb2NrZWQp
KSkgeworCQkJCQkJLyogZXJyb3IsIHdlIGNvdWxkIG5vdCBvdXRwdXQgKi8KKwkJCQkJCVNDVFBE
QkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiR2FrIHNlbmQgZXJyb3IgJWRcbiIsIGVycm9yKTsKKwkJ
CQkJCWlmIChmcm9tX3doZXJlID09IDApIHsKKwkJCQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19s
b3dsZXZlbGVycnVzcik7CisJCQkJCQl9CisJCQkJCQlpZiAoZXJyb3IgPT0gRU5PQlVGUykgewor
CQkJCQkJCWFzb2MtPmlmcF9oYWRfZW5vYnVmID0gMTsKKwkJCQkJCQlTQ1RQX1NUQVRfSU5DUihz
Y3Rwc19sb3dsZXZlbGVycik7CisJCQkJCQl9CisJCQkJCQlpZiAoZXJyb3IgPT0gRUhPU1RVTlJF
QUNIKSB7CisJCQkJCQkJLyoKKwkJCQkJCQkgKiBEZXN0aW5hdGlvbiB3ZW50CisJCQkJCQkJICog
dW5yZWFjaGFibGUKKwkJCQkJCQkgKiBkdXJpbmcgdGhpcyBzZW5kCisJCQkJCQkJICovCisJCQkJ
CQkJc2N0cF9tb3ZlX2NodW5rc19mcm9tX25ldChzdGNiLCBuZXQpOworCQkJCQkJfQorCQkJCQkJ
KnJlYXNvbl9jb2RlID0gNzsKKwkJCQkJCWJyZWFrOworCQkJCQl9IGVsc2UgeworCQkJCQkJYXNv
Yy0+aWZwX2hhZF9lbm9idWYgPSAwOworCQkJCQl9CisJCQkJCS8qCisJCQkJCSAqIGluY3JlYXNl
IHRoZSBudW1iZXIgd2Ugc2VudCwgaWYgYQorCQkJCQkgKiBjb29raWUgaXMgc2VudCB3ZSBkb24n
dCB0ZWxsIHRoZW0KKwkJCQkJICogYW55IHdhcyBzZW50IG91dC4KKwkJCQkJICovCisJCQkJCW91
dGNoYWluID0gZW5kb3V0Y2hhaW4gPSBOVUxMOworCQkJCQlhdXRoID0gTlVMTDsKKwkJCQkJYXV0
aF9vZmZzZXQgPSAwOworCQkJCQlpZiAoIW5vX291dF9jbnQpCisJCQkJCQkqbnVtX291dCArPSBj
dGxfY250OworCQkJCQkvKiByZWNhbGMgYSBjbGVhbiBzbGF0ZSBhbmQgc2V0dXAgKi8KKwkJCQkJ
c3dpdGNoIChuZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQkJ
CQkJY2FzZSBBRl9JTkVUOgorCQkJCQkJCW10dSA9IG5ldC0+bXR1IC0gU0NUUF9NSU5fVjRfT1ZF
UkhFQUQ7CisJCQkJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJCQkJY2FzZSBB
Rl9JTkVUNjoKKwkJCQkJCQltdHUgPSBuZXQtPm10dSAtIFNDVFBfTUlOX09WRVJIRUFEOworCQkJ
CQkJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCQkJY2Fz
ZSBBRl9DT05OOgorCQkJCQkJCW10dSA9IG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRy
KTsKKwkJCQkJCQlicmVhazsKKyNlbmRpZgorCQkJCQkJZGVmYXVsdDoKKwkJCQkJCQkvKiBUU05I
ICovCisJCQkJCQkJbXR1ID0gbmV0LT5tdHU7CisJCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJ
dG9fb3V0ID0gMDsKKwkJCQkJbm9fZnJhZ21lbnRmbGcgPSAxOworCQkJCX0KKwkJCX0KKwkJfQor
CQlpZiAoZXJyb3IgIT0gMCkgeworCQkJLyogdHJ5IG5leHQgbmV0ICovCisJCQljb250aW51ZTsK
KwkJfQorCQkvKiBKUkk6IGlmIGRlc3QgaXMgaW4gUEYgc3RhdGUsIGRvIG5vdCBzZW5kIGRhdGEg
dG8gaXQgKi8KKwkJaWYgKChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPiAwKSAmJgorCQkgICAgKG5l
dCAhPSBzdGNiLT5hc29jLmFsdGVybmF0ZSkgJiYKKwkJICAgIChuZXQtPmRlc3Rfc3RhdGUgJiBT
Q1RQX0FERFJfUEYpKSB7CisJCQlnb3RvIG5vX2RhdGFfZmlsbDsKKwkJfQorCQlpZiAobmV0LT5m
bGlnaHRfc2l6ZSA+PSBuZXQtPmN3bmQpIHsKKwkJCWdvdG8gbm9fZGF0YV9maWxsOworCQl9CisJ
CWlmICgoYXNvYy0+c2N0cF9jbXRfb25fb2ZmID4gMCkgJiYKKwkJICAgIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfYnVmZmVyX3NwbGl0dGluZykgJiBTQ1RQX1JFQ1ZfQlVGRkVSX1NQTElUVElORykg
JiYKKwkJICAgIChuZXQtPmZsaWdodF9zaXplID4gbWF4X3J3bmRfcGVyX2Rlc3QpKSB7CisJCQln
b3RvIG5vX2RhdGFfZmlsbDsKKwkJfQorCQkvKgorCQkgKiBXZSBuZWVkIGEgc3BlY2lmaWMgYWNj
b3VudGluZyBmb3IgdGhlIHVzYWdlIG9mIHRoZQorCQkgKiBzZW5kIGJ1ZmZlci4gV2UgYWxzbyBu
ZWVkIHRvIGNoZWNrIHRoZSBudW1iZXIgb2YgbWVzc2FnZXMKKwkJICogcGVyIG5ldC4gRm9yIG5v
dywgdGhpcyBpcyBiZXR0ZXIgdGhhbiBub3RoaW5nIGFuZCBpdAorCQkgKiBkaXNhYmxlZCBieSBk
ZWZhdWx0Li4uCisJCSAqLworCQlpZiAoKGFzb2MtPnNjdHBfY210X29uX29mZiA+IDApICYmCisJ
CSAgICAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2J1ZmZlcl9zcGxpdHRpbmcpICYgU0NUUF9TRU5E
X0JVRkZFUl9TUExJVFRJTkcpICYmCisJCSAgICAobWF4X3NlbmRfcGVyX2Rlc3QgPiAwKSAmJgor
CQkgICAgKG5ldC0+ZmxpZ2h0X3NpemUgPiBtYXhfc2VuZF9wZXJfZGVzdCkpIHsKKwkJCWdvdG8g
bm9fZGF0YV9maWxsOworCQl9CisJCS8qKioqKioqKioqKioqKioqKioqKiovCisJCS8qIERhdGEg
dHJhbnNtaXNzaW9uICovCisJCS8qKioqKioqKioqKioqKioqKioqKiovCisJCS8qCisJCSAqIGlm
IEFVVEggZm9yIERBVEEgaXMgcmVxdWlyZWQgYW5kIG5vIEFVVEggaGFzIGJlZW4gYWRkZWQKKwkJ
ICogeWV0LCBhY2NvdW50IGZvciB0aGlzIGluIHRoZSBtdHUgbm93Li4uIGlmIG5vIGRhdGEgY2Fu
IGJlCisJCSAqIGJ1bmRsZWQsIHRoaXMgYWRqdXN0bWVudCB3b24ndCBtYXR0ZXIgYW55d2F5cyBz
aW5jZSB0aGUKKwkJICogcGFja2V0IHdpbGwgYmUgZ29pbmcgb3V0Li4uCisJCSAqLworCQlkYXRh
X2F1dGhfcmVxZCA9IHNjdHBfYXV0aF9pc19yZXF1aXJlZF9jaHVuayhTQ1RQX0RBVEEsCisJCQkJ
CQkJICAgICBzdGNiLT5hc29jLnBlZXJfYXV0aF9jaHVua3MpOworCQlpZiAoZGF0YV9hdXRoX3Jl
cWQgJiYgKGF1dGggPT0gTlVMTCkpIHsKKwkJCW10dSAtPSBzY3RwX2dldF9hdXRoX2NodW5rX2xl
bihzdGNiLT5hc29jLnBlZXJfaG1hY19pZCk7CisJCX0KKwkJLyogbm93IGxldHMgYWRkIGFueSBk
YXRhIHdpdGhpbiB0aGUgTVRVIGNvbnN0cmFpbnRzICovCisJCXN3aXRjaCAoKChzdHJ1Y3Qgc29j
a2FkZHIgKikmbmV0LT5yby5fbF9hZGRyKS0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQlj
YXNlIEFGX0lORVQ6CisJCQlpZiAobmV0LT5tdHUgPiBTQ1RQX01JTl9WNF9PVkVSSEVBRCkKKwkJ
CQlvbXR1ID0gbmV0LT5tdHUgLSBTQ1RQX01JTl9WNF9PVkVSSEVBRDsKKwkJCWVsc2UKKwkJCQlv
bXR1ID0gMDsKKwkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJY2FzZSBBRl9JTkVU
NjoKKwkJCWlmIChuZXQtPm10dSA+IFNDVFBfTUlOX09WRVJIRUFEKQorCQkJCW9tdHUgPSBuZXQt
Pm10dSAtIFNDVFBfTUlOX09WRVJIRUFEOworCQkJZWxzZQorCQkJCW9tdHUgPSAwOworCQkJYnJl
YWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWNhc2UgQUZfQ09OTjoK
KwkJCWlmIChuZXQtPm10dSA+IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpIHsKKwkJCQlvbXR1ID0g
bmV0LT5tdHUgLSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpOworCQkJfSBlbHNlIHsKKwkJCQlvbXR1
ID0gMDsKKwkJCX0KKwkJCWJyZWFrOworI2VuZGlmCisJCWRlZmF1bHQ6CisJCQkvKiBUU05IICov
CisJCQlvbXR1ID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWlmICgoKChTQ1RQX0dFVF9TVEFURShz
dGNiKSA9PSBTQ1RQX1NUQVRFX09QRU4pIHx8CisJCSAgICAgIChTQ1RQX0dFVF9TVEFURShzdGNi
KSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSkgJiYKKwkJICAgICAoc2tpcF9kYXRh
X2Zvcl90aGlzX25ldCA9PSAwKSkgfHwKKwkJICAgIChjb29raWUpKSB7CisJCQlUQUlMUV9GT1JF
QUNIX1NBRkUoY2hrLCAmYXNvYy0+c2VuZF9xdWV1ZSwgc2N0cF9uZXh0LCBuY2hrKSB7CisJCQkJ
aWYgKG5vX2RhdGFfY2h1bmtzKSB7CisJCQkJCS8qIGxldCBvbmx5IGNvbnRyb2wgZ28gb3V0ICov
CisJCQkJCSpyZWFzb25fY29kZSA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAobmV0
LT5mbGlnaHRfc2l6ZSA+PSBuZXQtPmN3bmQpIHsKKwkJCQkJLyogc2tpcCB0aGlzIG5ldCwgbm8g
cm9vbSBmb3IgZGF0YSAqLworCQkJCQkqcmVhc29uX2NvZGUgPSAyOworCQkJCQlicmVhazsKKwkJ
CQl9CisJCQkJaWYgKChjaGstPndob1RvICE9IE5VTEwpICYmCisJCQkJICAgIChjaGstPndob1Rv
ICE9IG5ldCkpIHsKKwkJCQkJLyogRG9uJ3Qgc2VuZCB0aGUgY2h1bmsgb24gdGhpcyBuZXQgKi8K
KwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJaWYgKGFzb2MtPnNjdHBfY210X29uX29mZiA9
PSAwKSB7CisJCQkJCWlmICgoYXNvYy0+YWx0ZXJuYXRlKSAmJgorCQkJCQkgICAgKGFzb2MtPmFs
dGVybmF0ZSAhPSBuZXQpICYmCisJCQkJCSAgICAoY2hrLT53aG9UbyA9PSBOVUxMKSkgeworCQkJ
CQkJY29udGludWU7CisJCQkJCX0gZWxzZSBpZiAoKG5ldCAhPSBhc29jLT5wcmltYXJ5X2Rlc3Rp
bmF0aW9uKSAmJgorCQkJCQkJICAgKGFzb2MtPmFsdGVybmF0ZSA9PSBOVUxMKSAmJgorCQkJCQkJ
ICAgKGNoay0+d2hvVG8gPT0gTlVMTCkpIHsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJ
fQorCQkJCWlmICgoY2hrLT5zZW5kX3NpemUgPiBvbXR1KSAmJiAoKGNoay0+ZmxhZ3MgJiBDSFVO
S19GTEFHU19GUkFHTUVOVF9PSykgPT0gMCkpIHsKKwkJCQkJLyotCisJCQkJCSAqIHN0cmFuZ2Us
IHdlIGhhdmUgYSBjaHVuayB0aGF0IGlzCisJCQkJCSAqIHRvIGJpZyBmb3IgaXRzIGRlc3RpbmF0
aW9uIGFuZAorCQkJCQkgKiB5ZXQgbm8gZnJhZ21lbnQgb2sgZmxhZy4KKwkJCQkJICogU29tZXRo
aW5nIHdlbnQgd3Jvbmcgd2hlbiB0aGUKKwkJCQkJICogUE1UVSBjaGFuZ2VkLi4ud2UgZGlkIG5v
dCBtYXJrCisJCQkJCSAqIHRoaXMgY2h1bmsgZm9yIHNvbWUgcmVhc29uPz8gSQorCQkJCQkgKiB3
aWxsIGZpeCBpdCBoZXJlIGJ5IGxldHRpbmcgSVAKKwkJCQkJICogZnJhZ21lbnQgaXQgZm9yIG5v
dyBhbmQgcHJpbnRpbmcKKwkJCQkJICogYSB3YXJuaW5nLiBUaGlzIHJlYWxseSBzaG91bGQgbm90
CisJCQkJCSAqIGhhcHBlbiAuLi4KKwkJCQkJICovCisJCQkJCVNDVFBfUFJJTlRGKCJXYXJuaW5n
IGNodW5rIG9mICVkIGJ5dGVzID4gbXR1OiVkIGFuZCB5ZXQgUE1UVSBkaXNjIG1pc3NlZFxuIiwK
KwkJCQkJCSAgICBjaGstPnNlbmRfc2l6ZSwgbXR1KTsKKwkJCQkJY2hrLT5mbGFncyB8PSBDSFVO
S19GTEFHU19GUkFHTUVOVF9PSzsKKwkJCQl9CisJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9lbmFibGVfc2Fja19pbW1lZGlhdGVseSkgJiYKKwkJCQkgICAgKGFzb2MtPnN0YXRlICYgU0NU
UF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKSkgeworCQkJCQlzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5r
ICpkY2hraDsKKworCQkJCQlkY2hraCA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9kYXRh
X2NodW5rICopOworCQkJCQlkY2hraC0+Y2guY2h1bmtfZmxhZ3MgfD0gU0NUUF9EQVRBX1NBQ0tf
SU1NRURJQVRFTFk7CisJCQkJfQorCQkJCWlmICgoKGNoay0+c2VuZF9zaXplIDw9IG10dSkgJiYg
KGNoay0+c2VuZF9zaXplIDw9IHJfbXR1KSkgfHwKKwkJCQkgICAgKChjaGstPmZsYWdzICYgQ0hV
TktfRkxBR1NfRlJBR01FTlRfT0spICYmIChjaGstPnNlbmRfc2l6ZSA8PSBhc29jLT5wZWVyc19y
d25kKSkpIHsKKwkJCQkJLyogb2sgd2Ugd2lsbCBhZGQgdGhpcyBvbmUgKi8KKworCQkJCQkvKgor
CQkJCQkgKiBBZGQgYW4gQVVUSCBjaHVuaywgaWYgY2h1bmsKKwkJCQkJICogcmVxdWlyZXMgaXQs
IHNhdmUgdGhlIG9mZnNldCBpbnRvCisJCQkJCSAqIHRoZSBjaGFpbiBmb3IgQVVUSAorCQkJCQkg
Ki8KKwkJCQkJaWYgKGRhdGFfYXV0aF9yZXFkKSB7CisJCQkJCQlpZiAoYXV0aCA9PSBOVUxMKSB7
CisJCQkJCQkJb3V0Y2hhaW4gPSBzY3RwX2FkZF9hdXRoX2NodW5rKG91dGNoYWluLAorCQkJCQkJ
CQkJCSAgICAgICAmZW5kb3V0Y2hhaW4sCisJCQkJCQkJCQkJICAgICAgICZhdXRoLAorCQkJCQkJ
CQkJCSAgICAgICAmYXV0aF9vZmZzZXQsCisJCQkJCQkJCQkJICAgICAgIHN0Y2IsCisJCQkJCQkJ
CQkJICAgICAgIFNDVFBfREFUQSk7CisJCQkJCQkJYXV0aF9rZXlpZCA9IGNoay0+YXV0aF9rZXlp
ZDsKKwkJCQkJCQlvdmVycmlkZV9vayA9IDA7CisJCQkJCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRF
UjY0KHNjdHBzX291dGNvbnRyb2xjaHVua3MpOworCQkJCQkJfSBlbHNlIGlmIChvdmVycmlkZV9v
aykgeworCQkJCQkJCS8qIHVzZSB0aGlzIGRhdGEncyBrZXlpZCAqLworCQkJCQkJCWF1dGhfa2V5
aWQgPSBjaGstPmF1dGhfa2V5aWQ7CisJCQkJCQkJb3ZlcnJpZGVfb2sgPSAwOworCQkJCQkJfSBl
bHNlIGlmIChhdXRoX2tleWlkICE9IGNoay0+YXV0aF9rZXlpZCkgeworCQkJCQkJCS8qIGRpZmZl
cmVudCBrZXlpZCwgc28gZG9uZSBidW5kbGluZyAqLworCQkJCQkJCWJyZWFrOworCQkJCQkJfQor
CQkJCQl9CisJCQkJCW91dGNoYWluID0gc2N0cF9jb3B5X21idWZjaGFpbihjaGstPmRhdGEsIG91
dGNoYWluLCAmZW5kb3V0Y2hhaW4sIDAsCisJCQkJCQkJCSAgICAgICBjaGstPnNlbmRfc2l6ZSwg
Y2hrLT5jb3B5X2J5X3JlZik7CisJCQkJCWlmIChvdXRjaGFpbiA9PSBOVUxMKSB7CisJCQkJCQlT
Q1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIk5vIG1lbW9yeT9cbiIpOworCQkJCQkJaWYgKCFT
Q1RQX09TX1RJTUVSX1BFTkRJTkcoJm5ldC0+cnh0X3RpbWVyLnRpbWVyKSkgeworCQkJCQkJCXNj
dHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NFTkQsIGlucCwgc3RjYiwgbmV0KTsKKwkJ
CQkJCX0KKwkJCQkJCSpyZWFzb25fY29kZSA9IDM7CisJCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOworCQkJCQkJ
cmV0dXJuIChFTk9NRU0pOworCQkJCQl9CisJCQkJCS8qIHVwYXRlIG91ciBNVFUgc2l6ZSAqLwor
CQkJCQkvKiBEbyBjbGVhciBJUF9ERiA/ICovCisJCQkJCWlmIChjaGstPmZsYWdzICYgQ0hVTktf
RkxBR1NfRlJBR01FTlRfT0spIHsKKwkJCQkJCW5vX2ZyYWdtZW50ZmxnID0gMDsKKwkJCQkJfQor
CQkJCQkvKiB1bnNpZ25lZCBzdWJ0cmFjdGlvbiBvZiBtdHUgKi8KKwkJCQkJaWYgKG10dSA+IGNo
ay0+c2VuZF9zaXplKQorCQkJCQkJbXR1IC09IGNoay0+c2VuZF9zaXplOworCQkJCQllbHNlCisJ
CQkJCQltdHUgPSAwOworCQkJCQkvKiB1bnNpZ25lZCBzdWJ0cmFjdGlvbiBvZiByX210dSAqLwor
CQkJCQlpZiAocl9tdHUgPiBjaGstPnNlbmRfc2l6ZSkKKwkJCQkJCXJfbXR1IC09IGNoay0+c2Vu
ZF9zaXplOworCQkJCQllbHNlCisJCQkJCQlyX210dSA9IDA7CisKKwkJCQkJdG9fb3V0ICs9IGNo
ay0+c2VuZF9zaXplOworCQkJCQlpZiAoKHRvX291dCA+IG14X210dSkgJiYgbm9fZnJhZ21lbnRm
bGcpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQkJCQlwYW5pYygiRXhjZWVkaW5nIG10dSBvZiAl
ZCBvdXQgc2l6ZSBpcyAlZCIsIG14X210dSwgdG9fb3V0KTsKKyNlbHNlCisJCQkJCQlTQ1RQX1BS
SU5URigiRXhjZWVkaW5nIG10dSBvZiAlZCBvdXQgc2l6ZSBpcyAlZFxuIiwKKwkJCQkJCQkgICAg
bXhfbXR1LCB0b19vdXQpOworI2VuZGlmCisJCQkJCX0KKwkJCQkJY2hrLT53aW5kb3dfcHJvYmUg
PSAwOworCQkJCQlkYXRhX2xpc3RbYnVuZGxlX2F0KytdID0gY2hrOworCQkJCQlpZiAoYnVuZGxl
X2F0ID49IFNDVFBfTUFYX0RBVEFfQlVORExJTkcpIHsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJ
CQkJCWlmIChjaGstPnNlbnQgPT0gU0NUUF9EQVRBR1JBTV9VTlNFTlQpIHsKKwkJCQkJCWlmICgo
Y2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfVU5PUkRFUkVEKSA9PSAwKSB7CisJ
CQkJCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX291dG9yZGVyY2h1bmtzKTsKKwkJ
CQkJCX0gZWxzZSB7CisJCQkJCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX291dHVu
b3JkZXJjaHVua3MpOworCQkJCQkJfQorCQkJCQkJaWYgKCgoY2hrLT5yZWMuZGF0YS5yY3ZfZmxh
Z3MgJiBTQ1RQX0RBVEFfTEFTVF9GUkFHKSA9PSBTQ1RQX0RBVEFfTEFTVF9GUkFHKSAmJgorCQkJ
CQkJICAgICgoY2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfRklSU1RfRlJBRykg
PT0gMCkpCisJCQkJCQkJLyogQ291bnQgbnVtYmVyIG9mIHVzZXIgbXNnJ3MgdGhhdCB3ZXJlIGZy
YWdtZW50ZWQKKwkJCQkJCQkgKiB3ZSBkbyB0aGlzIGJ5IGNvdW50aW5nIHdoZW4gd2Ugc2VlIGEg
TEFTVCBmcmFnbWVudAorCQkJCQkJCSAqIG9ubHkuCisJCQkJCQkJICovCisJCQkJCQkJU0NUUF9T
VEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX2ZyYWd1c3Jtc2dzKTsKKwkJCQkJfQorCQkJCQlpZiAo
KG10dSA9PSAwKSB8fCAocl9tdHUgPT0gMCkgfHwgKG9uZV9jaHVuaykpIHsKKwkJCQkJCWlmICgo
b25lX2NodW5rKSAmJiAoc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQgPT0gMCkpIHsKKwkJCQkJCQlk
YXRhX2xpc3RbMF0tPndpbmRvd19wcm9iZSA9IDE7CisJCQkJCQkJbmV0LT53aW5kb3dfcHJvYmUg
PSAxOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQkv
KgorCQkJCQkgKiBNdXN0IGJlIHNlbnQgaW4gb3JkZXIgb2YgdGhlCisJCQkJCSAqIFRTTidzIChv
biBhIG5ldHdvcmspCisJCQkJCSAqLworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CS8qIGZvciAo
Y2h1bmsgZ2F0aGVyIGxvb3AgZm9yIHRoaXMgbmV0KSAqLworCQl9CQkvKiBpZiBhc29jLnN0YXRl
IE9QRU4gKi8KKwlub19kYXRhX2ZpbGw6CisJCS8qIElzIHRoZXJlIHNvbWV0aGluZyB0byBzZW5k
IGZvciB0aGlzIGRlc3RpbmF0aW9uPyAqLworCQlpZiAob3V0Y2hhaW4pIHsKKwkJCS8qIFdlIG1h
eSBuZWVkIHRvIHN0YXJ0IGEgY29udHJvbCB0aW1lciBvciB0d28gKi8KKwkJCWlmIChhc2NvbmYp
IHsKKwkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9BU0NPTkYsIGlucCwKKwkJ
CQkJCSBzdGNiLCBuZXQpOworCQkJCS8qCisJCQkJICogZG8gTk9UIGNsZWFyIHRoZSBhc2NvbmYg
ZmxhZyBhcyBpdCBpcyB1c2VkCisJCQkJICogdG8gZG8gYXBwcm9wcmlhdGUgc291cmNlIGFkZHJl
c3Mgc2VsZWN0aW9uLgorCQkJCSAqLworCQkJfQorCQkJaWYgKGNvb2tpZSkgeworCQkJCXNjdHBf
dGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0NPT0tJRSwgaW5wLCBzdGNiLCBuZXQpOworCQkJ
CWNvb2tpZSA9IDA7CisJCQl9CisJCQkvKiBtdXN0IHN0YXJ0IGEgc2VuZCB0aW1lciBpZiBkYXRh
IGlzIGJlaW5nIHNlbnQgKi8KKwkJCWlmIChidW5kbGVfYXQgJiYgKCFTQ1RQX09TX1RJTUVSX1BF
TkRJTkcoJm5ldC0+cnh0X3RpbWVyLnRpbWVyKSkpIHsKKwkJCQkvKgorCQkJCSAqIG5vIHRpbWVy
IHJ1bm5pbmcgb24gdGhpcyBkZXN0aW5hdGlvbgorCQkJCSAqIHJlc3RhcnQgaXQuCisJCQkJICov
CisJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0VORCwgaW5wLCBzdGNiLCBu
ZXQpOworCQkJfQorCQkJaWYgKGJ1bmRsZV9hdCB8fCBoYmZsYWcpIHsKKwkJCQkvKiBGb3IgZGF0
YS9hc2NvbmYgYW5kIGhiIHNldCB0aW1lICovCisJCQkJaWYgKCpub3dfZmlsbGVkID09IDApIHsK
KwkJCQkJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwobm93KTsKKwkJCQkJKm5vd19maWxsZWQg
PSAxOworCQkJCX0KKwkJCQluZXQtPmxhc3Rfc2VudF90aW1lID0gKm5vdzsKKwkJCX0KKwkJCS8q
IE5vdyBzZW5kIGl0LCBpZiB0aGVyZSBpcyBhbnl0aGluZyB0byBzZW5kIDo+ICovCisJCQlpZiAo
KGVycm9yID0gc2N0cF9sb3dsZXZlbF9jaHVua19vdXRwdXQoaW5wLAorCQkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0Y2IsCisJCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmV0LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbmV0LT5yby5fbF9hZGRyLAorCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGNoYWluLAorCQkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfb2Zmc2V0LAorCQkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGgsCisJCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9rZXlpZCwKKwkJCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub19mcmFnbWVudGZsZywKKwkJCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVfYXQsCisJCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNjb25mLAorCQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0cF9scG9ydCwgc3RjYi0+cnBvcnQsCisJCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRvbmwoc3RjYi0+YXNvYy5w
ZWVyX3Z0YWcpLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5l
dC0+cG9ydCwgTlVMTCwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IDAsCisjZW5kaWYKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
b19sb2NrZWQpKSkgeworCQkJCS8qIGVycm9yLCB3ZSBjb3VsZCBub3Qgb3V0cHV0ICovCisJCQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJHYWsgc2VuZCBlcnJvciAlZFxuIiwgZXJyb3Ip
OworCQkJCWlmIChmcm9tX3doZXJlID09IDApIHsKKwkJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNf
bG93bGV2ZWxlcnJ1c3IpOworCQkJCX0KKwkJCQlpZiAoZXJyb3IgPT0gRU5PQlVGUykgeworCQkJ
CQlhc29jLT5pZnBfaGFkX2Vub2J1ZiA9IDE7CisJCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX2xv
d2xldmVsZXJyKTsKKwkJCQl9CisJCQkJaWYgKGVycm9yID09IEVIT1NUVU5SRUFDSCkgeworCQkJ
CQkvKgorCQkJCQkgKiBEZXN0aW5hdGlvbiB3ZW50IHVucmVhY2hhYmxlCisJCQkJCSAqIGR1cmlu
ZyB0aGlzIHNlbmQKKwkJCQkJICovCisJCQkJCXNjdHBfbW92ZV9jaHVua3NfZnJvbV9uZXQoc3Rj
YiwgbmV0KTsKKwkJCQl9CisJCQkJKnJlYXNvbl9jb2RlID0gNjsKKwkJCQkvKi0KKwkJCQkgKiBJ
IGFkZCB0aGlzIGxpbmUgdG8gYmUgcGFyYW5vaWQuIEFzIGZhciBhcworCQkJCSAqIEkgY2FuIHRl
bGwgdGhlIGNvbnRpbnVlLCB0YWtlcyB1cyBiYWNrIHRvCisJCQkJICogdGhlIHRvcCBvZiB0aGUg
Zm9yLCBidXQganVzdCB0byBtYWtlIHN1cmUKKwkJCQkgKiBJIHdpbGwgcmVzZXQgdGhlc2UgYWdh
aW4gaGVyZS4KKwkJCQkgKi8KKwkJCQljdGxfY250ID0gMDsKKwkJCQljb250aW51ZTsgLyogVGhp
cyB0YWtlcyB1cyBiYWNrIHRvIHRoZSBmb3IoKSBmb3IgdGhlIG5ldHMuICovCisJCQl9IGVsc2Ug
eworCQkJCWFzb2MtPmlmcF9oYWRfZW5vYnVmID0gMDsKKwkJCX0KKwkJCWVuZG91dGNoYWluID0g
TlVMTDsKKwkJCWF1dGggPSBOVUxMOworCQkJYXV0aF9vZmZzZXQgPSAwOworCQkJaWYgKCFub19v
dXRfY250KSB7CisJCQkJKm51bV9vdXQgKz0gKGN0bF9jbnQgKyBidW5kbGVfYXQpOworCQkJfQor
CQkJaWYgKGJ1bmRsZV9hdCkgeworCQkJCS8qIHNldHVwIGZvciBhIFJUTyBtZWFzdXJlbWVudCAq
LworCQkJCXRzbnNfc2VudCA9IGRhdGFfbGlzdFswXS0+cmVjLmRhdGEudHNuOworCQkJCS8qIGZp
bGwgdGltZSBpZiBub3QgYWxyZWFkeSBmaWxsZWQgKi8KKwkJCQlpZiAoKm5vd19maWxsZWQgPT0g
MCkgeworCQkJCQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmYXNvYy0+dGltZV9sYXN0X3Nl
bnQpOworCQkJCQkqbm93X2ZpbGxlZCA9IDE7CisJCQkJCSpub3cgPSBhc29jLT50aW1lX2xhc3Rf
c2VudDsKKwkJCQl9IGVsc2UgeworCQkJCQlhc29jLT50aW1lX2xhc3Rfc2VudCA9ICpub3c7CisJ
CQkJfQorCQkJCWlmIChuZXQtPnJ0b19uZWVkZWQpIHsKKwkJCQkJZGF0YV9saXN0WzBdLT5kb19y
dHQgPSAxOworCQkJCQluZXQtPnJ0b19uZWVkZWQgPSAwOworCQkJCX0KKwkJCQlTQ1RQX1NUQVRf
SU5DUl9CWShzY3Rwc19zZW5kZGF0YSwgYnVuZGxlX2F0KTsKKwkJCQlzY3RwX2NsZWFuX3VwX2Rh
dGFsaXN0KHN0Y2IsIGFzb2MsIGRhdGFfbGlzdCwgYnVuZGxlX2F0LCBuZXQpOworCQkJfQorCQkJ
aWYgKG9uZV9jaHVuaykgeworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpIHsK
KwkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCB0c25zX3NlbnQsIFNDVFBfQ1dORF9MT0dfRlJP
TV9TRU5EKTsKKwkJfQorCX0KKwlpZiAob2xkX3N0YXJ0X2F0ID09IE5VTEwpIHsKKwkJb2xkX3N0
YXJ0X2F0ID0gc3RhcnRfYXQ7CisJCXN0YXJ0X2F0ID0gVEFJTFFfRklSU1QoJmFzb2MtPm5ldHMp
OworCQlpZiAob2xkX3N0YXJ0X2F0KQorCQkJZ290byBhZ2Fpbl9vbmVfbW9yZV90aW1lOworCX0K
KworCS8qCisJICogQXQgdGhlIGVuZCB0aGVyZSBzaG91bGQgYmUgbm8gTk9OIHRpbWVkIGNodW5r
cyBoYW5naW5nIG9uIHRoaXMKKwkgKiBxdWV1ZS4KKwkgKi8KKwlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNj
dHBfbG9nX2N3bmQoc3RjYiwgbmV0LCAqbnVtX291dCwgU0NUUF9DV05EX0xPR19GUk9NX1NFTkQp
OworCX0KKwlpZiAoKCpudW1fb3V0ID09IDApICYmICgqcmVhc29uX2NvZGUgPT0gMCkpIHsKKwkJ
KnJlYXNvbl9jb2RlID0gNDsKKwl9IGVsc2UgeworCQkqcmVhc29uX2NvZGUgPSA1OworCX0KKwlz
Y3RwX2NsZWFuX3VwX2N0bChzdGNiLCBhc29jLCBzb19sb2NrZWQpOworCXJldHVybiAoMCk7Cit9
CisKK3ZvaWQKK3NjdHBfcXVldWVfb3BfZXJyKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0
IG1idWYgKm9wX2VycikKK3sKKwkvKi0KKwkgKiBQcmVwZW5kIGEgT1BFUkFUSU9OQUxfRVJST1Ig
Y2h1bmsgaGVhZGVyIGFuZCBwdXQgb24gdGhlIGVuZCBvZgorCSAqIHRoZSBjb250cm9sIGNodW5r
IHF1ZXVlLgorCSAqLworCXN0cnVjdCBzY3RwX2NodW5raGRyICpoZHI7CisJc3RydWN0IHNjdHBf
dG1pdF9jaHVuayAqY2hrOworCXN0cnVjdCBtYnVmICptYXQsICpsYXN0X21idWY7CisJdWludDMy
X3QgY2h1bmtfbGVuZ3RoOworCXVpbnQxNl90IHBhZGRpbmdfbGVuZ3RoOworCisJU0NUUF9UQ0Jf
TE9DS19BU1NFUlQoc3RjYik7CisJU0NUUF9CVUZfUFJFUEVORChvcF9lcnIsIHNpemVvZihzdHJ1
Y3Qgc2N0cF9jaHVua2hkciksIE1fTk9XQUlUKTsKKwlpZiAob3BfZXJyID09IE5VTEwpIHsKKwkJ
cmV0dXJuOworCX0KKwlsYXN0X21idWYgPSBOVUxMOworCWNodW5rX2xlbmd0aCA9IDA7CisJZm9y
IChtYXQgPSBvcF9lcnI7IG1hdCAhPSBOVUxMOyBtYXQgPSBTQ1RQX0JVRl9ORVhUKG1hdCkpIHsK
KwkJY2h1bmtfbGVuZ3RoICs9IFNDVFBfQlVGX0xFTihtYXQpOworCQlpZiAoU0NUUF9CVUZfTkVY
VChtYXQpID09IE5VTEwpIHsKKwkJCWxhc3RfbWJ1ZiA9IG1hdDsKKwkJfQorCX0KKwlpZiAoY2h1
bmtfbGVuZ3RoID4gU0NUUF9NQVhfQ0hVTktfTEVOR1RIKSB7CisJCXNjdHBfbV9mcmVlbShvcF9l
cnIpOworCQlyZXR1cm47CisJfQorCXBhZGRpbmdfbGVuZ3RoID0gY2h1bmtfbGVuZ3RoICUgNDsK
KwlpZiAocGFkZGluZ19sZW5ndGggIT0gMCkgeworCQlwYWRkaW5nX2xlbmd0aCA9IDQgLSBwYWRk
aW5nX2xlbmd0aDsKKwl9CisJaWYgKHBhZGRpbmdfbGVuZ3RoICE9IDApIHsKKwkJaWYgKHNjdHBf
YWRkX3BhZF90b21idWYobGFzdF9tYnVmLCBwYWRkaW5nX2xlbmd0aCkgPT0gTlVMTCkgeworCQkJ
c2N0cF9tX2ZyZWVtKG9wX2Vycik7CisJCQlyZXR1cm47CisJCX0KKwl9CisJc2N0cF9hbGxvY19h
X2NodW5rKHN0Y2IsIGNoayk7CisJaWYgKGNoayA9PSBOVUxMKSB7CisJCS8qIG5vIG1lbW9yeSAq
LworCQlzY3RwX21fZnJlZW0ob3BfZXJyKTsKKwkJcmV0dXJuOworCX0KKwljaGstPmNvcHlfYnlf
cmVmID0gMDsKKwljaGstPnJlYy5jaHVua19pZC5pZCA9IFNDVFBfT1BFUkFUSU9OX0VSUk9SOwor
CWNoay0+cmVjLmNodW5rX2lkLmNhbl90YWtlX2RhdGEgPSAwOworCWNoay0+ZmxhZ3MgPSAwOwor
CWNoay0+c2VuZF9zaXplID0gKHVpbnQxNl90KWNodW5rX2xlbmd0aDsKKwljaGstPnNlbnQgPSBT
Q1RQX0RBVEFHUkFNX1VOU0VOVDsKKwljaGstPnNuZF9jb3VudCA9IDA7CisJY2hrLT5hc29jID0g
JnN0Y2ItPmFzb2M7CisJY2hrLT5kYXRhID0gb3BfZXJyOworCWNoay0+d2hvVG8gPSBOVUxMOwor
CWhkciA9IG10b2Qob3BfZXJyLCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKTsKKwloZHItPmNodW5r
X3R5cGUgPSBTQ1RQX09QRVJBVElPTl9FUlJPUjsKKwloZHItPmNodW5rX2ZsYWdzID0gMDsKKwlo
ZHItPmNodW5rX2xlbmd0aCA9IGh0b25zKGNoay0+c2VuZF9zaXplKTsKKwlUQUlMUV9JTlNFUlRf
VEFJTCgmY2hrLT5hc29jLT5jb250cm9sX3NlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKKwlj
aGstPmFzb2MtPmN0cmxfcXVldWVfY250Kys7Cit9CisKK2ludAorc2N0cF9zZW5kX2Nvb2tpZV9l
Y2hvKHN0cnVjdCBtYnVmICptLAorICAgIGludCBvZmZzZXQsIGludCBsaW1pdCwKKyAgICBzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworCS8qLQor
CSAqIHB1bGwgb3V0IHRoZSBjb29raWUgYW5kIHB1dCBpdCBhdCB0aGUgZnJvbnQgb2YgdGhlIGNv
bnRyb2wgY2h1bmsKKwkgKiBxdWV1ZS4KKwkgKi8KKwlpbnQgYXQ7CisJc3RydWN0IG1idWYgKmNv
b2tpZTsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwYXJhbSwgKnBoZHI7CisJc3RydWN0IHNjdHBf
Y2h1bmtoZHIgKmhkcjsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7CisJdWludDE2X3Qg
cHR5cGUsIHBsZW47CisKKwlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKwkvKiBGaXJzdCBm
aW5kIHRoZSBjb29raWUgaW4gdGhlIHBhcmFtIGFyZWEgKi8KKwljb29raWUgPSBOVUxMOworCWF0
ID0gb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfY2h1bmspOworCWZvciAoOzspIHsK
KwkJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obSwgYXQsICZwYXJhbSwgc2l6ZW9mKHBhcmFt
KSk7CisJCWlmIChwaGRyID09IE5VTEwpIHsKKwkJCXJldHVybiAoLTMpOworCQl9CisJCXB0eXBl
ID0gbnRvaHMocGhkci0+cGFyYW1fdHlwZSk7CisJCXBsZW4gPSBudG9ocyhwaGRyLT5wYXJhbV9s
ZW5ndGgpOworCQlpZiAocGxlbiA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpIHsKKwkJ
CXJldHVybiAoLTYpOworCQl9CisJCWlmIChwdHlwZSA9PSBTQ1RQX1NUQVRFX0NPT0tJRSkgewor
CQkJaW50IHBhZDsKKworCQkJLyogZm91bmQgdGhlIGNvb2tpZSAqLworCQkJaWYgKGF0ICsgcGxl
biA+IGxpbWl0KSB7CisJCQkJcmV0dXJuICgtNyk7CisJCQl9CisJCQljb29raWUgPSBTQ1RQX01f
Q09QWU0obSwgYXQsIHBsZW4sIE1fTk9XQUlUKTsKKwkJCWlmIChjb29raWUgPT0gTlVMTCkgewor
CQkJCS8qIE5vIG1lbW9yeSAqLworCQkJCXJldHVybiAoLTIpOworCQkJfQorCQkJaWYgKChwYWQg
PSAocGxlbiAlIDQpKSA+IDApIHsKKwkJCQlwYWQgPSA0IC0gcGFkOworCQkJfQorCQkJaWYgKHBh
ZCA+IDApIHsKKwkJCQlpZiAoc2N0cF9wYWRfbGFzdG1idWYoY29va2llLCBwYWQsIE5VTEwpID09
IE5VTEwpIHsKKwkJCQkJcmV0dXJuICgtOCk7CisJCQkJfQorCQkJfQorI2lmZGVmIFNDVFBfTUJV
Rl9MT0dHSU5HCisJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYg
U0NUUF9NQlVGX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJc2N0cF9sb2dfbWJjKGNvb2tpZSwgU0NU
UF9NQlVGX0lDT1BZKTsKKwkJCX0KKyNlbmRpZgorCQkJYnJlYWs7CisJCX0KKwkJYXQgKz0gU0NU
UF9TSVpFMzIocGxlbik7CisJfQorCS8qIG9rLCB3ZSBnb3QgdGhlIGNvb2tpZSBsZXRzIGNoYW5n
ZSBpdCBpbnRvIGEgY29va2llIGVjaG8gY2h1bmsgKi8KKwkvKiBmaXJzdCB0aGUgY2hhbmdlIGZy
b20gcGFyYW0gdG8gY29va2llICovCisJaGRyID0gbXRvZChjb29raWUsIHN0cnVjdCBzY3RwX2No
dW5raGRyICopOworCWhkci0+Y2h1bmtfdHlwZSA9IFNDVFBfQ09PS0lFX0VDSE87CisJaGRyLT5j
aHVua19mbGFncyA9IDA7CisJLyogZ2V0IHRoZSBjaHVuayBzdHVmZiBub3cgYW5kIHBsYWNlIGl0
IGluIHRoZSBGUk9OVCBvZiB0aGUgcXVldWUgKi8KKwlzY3RwX2FsbG9jX2FfY2h1bmsoc3RjYiwg
Y2hrKTsKKwlpZiAoY2hrID09IE5VTEwpIHsKKwkJLyogbm8gbWVtb3J5ICovCisJCXNjdHBfbV9m
cmVlbShjb29raWUpOworCQlyZXR1cm4gKC01KTsKKwl9CisJY2hrLT5jb3B5X2J5X3JlZiA9IDA7
CisJY2hrLT5yZWMuY2h1bmtfaWQuaWQgPSBTQ1RQX0NPT0tJRV9FQ0hPOworCWNoay0+cmVjLmNo
dW5rX2lkLmNhbl90YWtlX2RhdGEgPSAwOworCWNoay0+ZmxhZ3MgPSBDSFVOS19GTEFHU19GUkFH
TUVOVF9PSzsKKwljaGstPnNlbmRfc2l6ZSA9IFNDVFBfU0laRTMyKHBsZW4pOworCWNoay0+c2Vu
dCA9IFNDVFBfREFUQUdSQU1fVU5TRU5UOworCWNoay0+c25kX2NvdW50ID0gMDsKKwljaGstPmFz
b2MgPSAmc3RjYi0+YXNvYzsKKwljaGstPmRhdGEgPSBjb29raWU7CisJY2hrLT53aG9UbyA9IG5l
dDsKKwlhdG9taWNfYWRkX2ludCgmY2hrLT53aG9Uby0+cmVmX2NvdW50LCAxKTsKKwlUQUlMUV9J
TlNFUlRfSEVBRCgmY2hrLT5hc29jLT5jb250cm9sX3NlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0
KTsKKwljaGstPmFzb2MtPmN0cmxfcXVldWVfY250Kys7CisJcmV0dXJuICgwKTsKK30KKwordm9p
ZAorc2N0cF9zZW5kX2hlYXJ0YmVhdF9hY2soc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgIHN0
cnVjdCBtYnVmICptLAorICAgIGludCBvZmZzZXQsCisgICAgaW50IGNoa19sZW5ndGgsCisgICAg
c3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworCS8qCisJICogdGFrZSBhIEhCIHJlcXVlc3QgYW5k
IG1ha2UgaXQgaW50byBhIEhCIGFjayBhbmQgc2VuZCBpdC4KKwkgKi8KKwlzdHJ1Y3QgbWJ1ZiAq
b3V0Y2hhaW47CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoZHI7CisJc3RydWN0IHNjdHBfdG1p
dF9jaHVuayAqY2hrOworCisJaWYgKG5ldCA9PSBOVUxMKQorCQkvKiBtdXN0IGhhdmUgYSBuZXQg
cG9pbnRlciAqLworCQlyZXR1cm47CisKKwlvdXRjaGFpbiA9IFNDVFBfTV9DT1BZTShtLCBvZmZz
ZXQsIGNoa19sZW5ndGgsIE1fTk9XQUlUKTsKKwlpZiAob3V0Y2hhaW4gPT0gTlVMTCkgeworCQkv
KiBnYWsgb3V0IG9mIG1lbW9yeSAqLworCQlyZXR1cm47CisJfQorI2lmZGVmIFNDVFBfTUJVRl9M
T0dHSU5HCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBf
TUJVRl9MT0dHSU5HX0VOQUJMRSkgeworCQlzY3RwX2xvZ19tYmMob3V0Y2hhaW4sIFNDVFBfTUJV
Rl9JQ09QWSk7CisJfQorI2VuZGlmCisJY2hkciA9IG10b2Qob3V0Y2hhaW4sIHN0cnVjdCBzY3Rw
X2NodW5raGRyICopOworCWNoZHItPmNodW5rX3R5cGUgPSBTQ1RQX0hFQVJUQkVBVF9BQ0s7CisJ
Y2hkci0+Y2h1bmtfZmxhZ3MgPSAwOworCWlmIChjaGtfbGVuZ3RoICUgNCAhPSAwKSB7CisJCXNj
dHBfcGFkX2xhc3RtYnVmKG91dGNoYWluLCA0IC0gKGNoa19sZW5ndGggJSA0KSwgTlVMTCk7CisJ
fQorCXNjdHBfYWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOworCWlmIChjaGsgPT0gTlVMTCkgewor
CQkvKiBubyBtZW1vcnkgKi8KKwkJc2N0cF9tX2ZyZWVtKG91dGNoYWluKTsKKwkJcmV0dXJuOwor
CX0KKwljaGstPmNvcHlfYnlfcmVmID0gMDsKKwljaGstPnJlYy5jaHVua19pZC5pZCA9IFNDVFBf
SEVBUlRCRUFUX0FDSzsKKwljaGstPnJlYy5jaHVua19pZC5jYW5fdGFrZV9kYXRhID0gMTsKKwlj
aGstPmZsYWdzID0gMDsKKwljaGstPnNlbmRfc2l6ZSA9IGNoa19sZW5ndGg7CisJY2hrLT5zZW50
ID0gU0NUUF9EQVRBR1JBTV9VTlNFTlQ7CisJY2hrLT5zbmRfY291bnQgPSAwOworCWNoay0+YXNv
YyA9ICZzdGNiLT5hc29jOworCWNoay0+ZGF0YSA9IG91dGNoYWluOworCWNoay0+d2hvVG8gPSBu
ZXQ7CisJYXRvbWljX2FkZF9pbnQoJmNoay0+d2hvVG8tPnJlZl9jb3VudCwgMSk7CisJVEFJTFFf
SU5TRVJUX1RBSUwoJmNoay0+YXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4
dCk7CisJY2hrLT5hc29jLT5jdHJsX3F1ZXVlX2NudCsrOworfQorCit2b2lkCitzY3RwX3NlbmRf
Y29va2llX2FjayhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCit7CisJLyogZm9ybXVsYXRlIGFuZCBx
dWV1ZSBhIGNvb2tpZS1hY2sgYmFjayB0byBzZW5kZXIgKi8KKwlzdHJ1Y3QgbWJ1ZiAqY29va2ll
X2FjazsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqaGRyOworCXN0cnVjdCBzY3RwX3RtaXRfY2h1
bmsgKmNoazsKKworCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOworCisJY29va2llX2FjayA9
IHNjdHBfZ2V0X21idWZfZm9yX21zZyhzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpLCAwLCBN
X05PV0FJVCwgMSwgTVRfSEVBREVSKTsKKwlpZiAoY29va2llX2FjayA9PSBOVUxMKSB7CisJCS8q
IG5vIG1idWYncyAqLworCQlyZXR1cm47CisJfQorCVNDVFBfQlVGX1JFU1ZfVUYoY29va2llX2Fj
aywgU0NUUF9NSU5fT1ZFUkhFQUQpOworCXNjdHBfYWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOwor
CWlmIChjaGsgPT0gTlVMTCkgeworCQkvKiBubyBtZW1vcnkgKi8KKwkJc2N0cF9tX2ZyZWVtKGNv
b2tpZV9hY2spOworCQlyZXR1cm47CisJfQorCWNoay0+Y29weV9ieV9yZWYgPSAwOworCWNoay0+
cmVjLmNodW5rX2lkLmlkID0gU0NUUF9DT09LSUVfQUNLOworCWNoay0+cmVjLmNodW5rX2lkLmNh
bl90YWtlX2RhdGEgPSAxOworCWNoay0+ZmxhZ3MgPSAwOworCWNoay0+c2VuZF9zaXplID0gc2l6
ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKTsKKwljaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1VO
U0VOVDsKKwljaGstPnNuZF9jb3VudCA9IDA7CisJY2hrLT5hc29jID0gJnN0Y2ItPmFzb2M7CisJ
Y2hrLT5kYXRhID0gY29va2llX2FjazsKKwlpZiAoY2hrLT5hc29jLT5sYXN0X2NvbnRyb2xfY2h1
bmtfZnJvbSAhPSBOVUxMKSB7CisJCWNoay0+d2hvVG8gPSBjaGstPmFzb2MtPmxhc3RfY29udHJv
bF9jaHVua19mcm9tOworCQlhdG9taWNfYWRkX2ludCgmY2hrLT53aG9Uby0+cmVmX2NvdW50LCAx
KTsKKwl9IGVsc2UgeworCQljaGstPndob1RvID0gTlVMTDsKKwl9CisJaGRyID0gbXRvZChjb29r
aWVfYWNrLCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKTsKKwloZHItPmNodW5rX3R5cGUgPSBTQ1RQ
X0NPT0tJRV9BQ0s7CisJaGRyLT5jaHVua19mbGFncyA9IDA7CisJaGRyLT5jaHVua19sZW5ndGgg
PSBodG9ucyhjaGstPnNlbmRfc2l6ZSk7CisJU0NUUF9CVUZfTEVOKGNvb2tpZV9hY2spID0gY2hr
LT5zZW5kX3NpemU7CisJVEFJTFFfSU5TRVJUX1RBSUwoJmNoay0+YXNvYy0+Y29udHJvbF9zZW5k
X3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7CisJY2hrLT5hc29jLT5jdHJsX3F1ZXVlX2NudCsrOwor
CXJldHVybjsKK30KKwordm9pZAorc2N0cF9zZW5kX3NodXRkb3duX2FjayhzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwkvKiBmb3JtdWxhdGUgYW5kIHF1
ZXVlIGEgU0hVVERPV04tQUNLIGJhY2sgdG8gdGhlIHNlbmRlciAqLworCXN0cnVjdCBtYnVmICpt
X3NodXRkb3duX2FjazsKKwlzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9hY2tfY2h1bmsgKmFja19jcDsK
KwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7CisKKwltX3NodXRkb3duX2FjayA9IHNjdHBf
Z2V0X21idWZfZm9yX21zZyhzaXplb2Yoc3RydWN0IHNjdHBfc2h1dGRvd25fYWNrX2NodW5rKSwg
MCwgTV9OT1dBSVQsIDEsIE1UX0hFQURFUik7CisJaWYgKG1fc2h1dGRvd25fYWNrID09IE5VTEwp
IHsKKwkJLyogbm8gbWJ1ZidzICovCisJCXJldHVybjsKKwl9CisJU0NUUF9CVUZfUkVTVl9VRiht
X3NodXRkb3duX2FjaywgU0NUUF9NSU5fT1ZFUkhFQUQpOworCXNjdHBfYWxsb2NfYV9jaHVuayhz
dGNiLCBjaGspOworCWlmIChjaGsgPT0gTlVMTCkgeworCQkvKiBubyBtZW1vcnkgKi8KKwkJc2N0
cF9tX2ZyZWVtKG1fc2h1dGRvd25fYWNrKTsKKwkJcmV0dXJuOworCX0KKwljaGstPmNvcHlfYnlf
cmVmID0gMDsKKwljaGstPnJlYy5jaHVua19pZC5pZCA9IFNDVFBfU0hVVERPV05fQUNLOworCWNo
ay0+cmVjLmNodW5rX2lkLmNhbl90YWtlX2RhdGEgPSAxOworCWNoay0+ZmxhZ3MgPSAwOworCWNo
ay0+c2VuZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKTsKKwljaGstPnNlbnQg
PSBTQ1RQX0RBVEFHUkFNX1VOU0VOVDsKKwljaGstPnNuZF9jb3VudCA9IDA7CisJY2hrLT5hc29j
ID0gJnN0Y2ItPmFzb2M7CisJY2hrLT5kYXRhID0gbV9zaHV0ZG93bl9hY2s7CisJY2hrLT53aG9U
byA9IG5ldDsKKwlpZiAoY2hrLT53aG9UbykgeworCQlhdG9taWNfYWRkX2ludCgmY2hrLT53aG9U
by0+cmVmX2NvdW50LCAxKTsKKwl9CisJYWNrX2NwID0gbXRvZChtX3NodXRkb3duX2Fjaywgc3Ry
dWN0IHNjdHBfc2h1dGRvd25fYWNrX2NodW5rICopOworCWFja19jcC0+Y2guY2h1bmtfdHlwZSA9
IFNDVFBfU0hVVERPV05fQUNLOworCWFja19jcC0+Y2guY2h1bmtfZmxhZ3MgPSAwOworCWFja19j
cC0+Y2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoY2hrLT5zZW5kX3NpemUpOworCVNDVFBfQlVGX0xF
TihtX3NodXRkb3duX2FjaykgPSBjaGstPnNlbmRfc2l6ZTsKKwlUQUlMUV9JTlNFUlRfVEFJTCgm
Y2hrLT5hc29jLT5jb250cm9sX3NlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKKwljaGstPmFz
b2MtPmN0cmxfcXVldWVfY250Kys7CisJcmV0dXJuOworfQorCit2b2lkCitzY3RwX3NlbmRfc2h1
dGRvd24oc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJ
LyogZm9ybXVsYXRlIGFuZCBxdWV1ZSBhIFNIVVRET1dOIHRvIHRoZSBzZW5kZXIgKi8KKwlzdHJ1
Y3QgbWJ1ZiAqbV9zaHV0ZG93bjsKKwlzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jaHVuayAqc2h1dGRv
d25fY3A7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOworCisJVEFJTFFfRk9SRUFDSChj
aGssICZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJCWlmIChj
aGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX1NIVVRET1dOKSB7CisJCQkvKiBXZSBhbHJlYWR5
IGhhdmUgYSBTSFVURE9XTiBxdWV1ZWQuIFJldXNlIGl0LiAqLworCQkJaWYgKGNoay0+d2hvVG8p
IHsKKwkJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoY2hrLT53aG9Ubyk7CisJCQkJY2hrLT53aG9U
byA9IE5VTEw7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoY2hrID09IE5VTEwpIHsK
KwkJbV9zaHV0ZG93biA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhzaXplb2Yoc3RydWN0IHNjdHBf
c2h1dGRvd25fY2h1bmspLCAwLCBNX05PV0FJVCwgMSwgTVRfSEVBREVSKTsKKwkJaWYgKG1fc2h1
dGRvd24gPT0gTlVMTCkgeworCQkJLyogbm8gbWJ1ZidzICovCisJCQlyZXR1cm47CisJCX0KKwkJ
U0NUUF9CVUZfUkVTVl9VRihtX3NodXRkb3duLCBTQ1RQX01JTl9PVkVSSEVBRCk7CisJCXNjdHBf
YWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOworCQlpZiAoY2hrID09IE5VTEwpIHsKKwkJCS8qIG5v
IG1lbW9yeSAqLworCQkJc2N0cF9tX2ZyZWVtKG1fc2h1dGRvd24pOworCQkJcmV0dXJuOworCQl9
CisJCWNoay0+Y29weV9ieV9yZWYgPSAwOworCQljaGstPnJlYy5jaHVua19pZC5pZCA9IFNDVFBf
U0hVVERPV047CisJCWNoay0+cmVjLmNodW5rX2lkLmNhbl90YWtlX2RhdGEgPSAxOworCQljaGst
PmZsYWdzID0gMDsKKwkJY2hrLT5zZW5kX3NpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfc2h1dGRv
d25fY2h1bmspOworCQljaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1VOU0VOVDsKKwkJY2hrLT5z
bmRfY291bnQgPSAwOworCQljaGstPmFzb2MgPSAmc3RjYi0+YXNvYzsKKwkJY2hrLT5kYXRhID0g
bV9zaHV0ZG93bjsKKwkJY2hrLT53aG9UbyA9IG5ldDsKKwkJaWYgKGNoay0+d2hvVG8pIHsKKwkJ
CWF0b21pY19hZGRfaW50KCZjaGstPndob1RvLT5yZWZfY291bnQsIDEpOworCQl9CisJCXNodXRk
b3duX2NwID0gbXRvZChtX3NodXRkb3duLCBzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jaHVuayAqKTsK
KwkJc2h1dGRvd25fY3AtPmNoLmNodW5rX3R5cGUgPSBTQ1RQX1NIVVRET1dOOworCQlzaHV0ZG93
bl9jcC0+Y2guY2h1bmtfZmxhZ3MgPSAwOworCQlzaHV0ZG93bl9jcC0+Y2guY2h1bmtfbGVuZ3Ro
ID0gaHRvbnMoY2hrLT5zZW5kX3NpemUpOworCQlzaHV0ZG93bl9jcC0+Y3VtdWxhdGl2ZV90c25f
YWNrID0gaHRvbmwoc3RjYi0+YXNvYy5jdW11bGF0aXZlX3Rzbik7CisJCVNDVFBfQlVGX0xFTiht
X3NodXRkb3duKSA9IGNoay0+c2VuZF9zaXplOworCQlUQUlMUV9JTlNFUlRfVEFJTCgmY2hrLT5h
c29jLT5jb250cm9sX3NlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKKwkJY2hrLT5hc29jLT5j
dHJsX3F1ZXVlX2NudCsrOworCX0gZWxzZSB7CisJCVRBSUxRX1JFTU9WRSgmc3RjYi0+YXNvYy5j
b250cm9sX3NlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKKwkJY2hrLT53aG9UbyA9IG5ldDsK
KwkJaWYgKGNoay0+d2hvVG8pIHsKKwkJCWF0b21pY19hZGRfaW50KCZjaGstPndob1RvLT5yZWZf
Y291bnQsIDEpOworCQl9CisJCXNodXRkb3duX2NwID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBz
Y3RwX3NodXRkb3duX2NodW5rICopOworCQlzaHV0ZG93bl9jcC0+Y3VtdWxhdGl2ZV90c25fYWNr
ID0gaHRvbmwoc3RjYi0+YXNvYy5jdW11bGF0aXZlX3Rzbik7CisJCVRBSUxRX0lOU0VSVF9UQUlM
KCZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1ZSwgY2hrLCBzY3RwX25leHQpOworCX0KKwly
ZXR1cm47Cit9CisKK3ZvaWQKK3NjdHBfc2VuZF9hc2NvbmYoc3RydWN0IHNjdHBfdGNiICpzdGNi
LCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIGludCBhZGRyX2xvY2tlZCkKK3sKKwkvKgorCSAqIGZv
cm11bGF0ZSBhbmQgcXVldWUgYW4gQVNDT05GIHRvIHRoZSBwZWVyLgorCSAqIEFTQ09ORiBwYXJh
bWV0ZXJzIHNob3VsZCBiZSBxdWV1ZWQgb24gdGhlIGFzc29jIHF1ZXVlLgorCSAqLworCXN0cnVj
dCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKKwlzdHJ1Y3QgbWJ1ZiAqbV9hc2NvbmY7CisJaW50IGxl
bjsKKworCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOworCisJaWYgKCghVEFJTFFfRU1QVFko
JnN0Y2ItPmFzb2MuYXNjb25mX3NlbmRfcXVldWUpKSAmJgorCSAgICAoIXNjdHBfaXNfZmVhdHVy
ZV9vbihzdGNiLT5zY3RwX2VwLCBTQ1RQX1BDQl9GTEFHU19NVUxUSVBMRV9BU0NPTkZTKSkpIHsK
KwkJLyogY2FuJ3Qgc2VuZCBhIG5ldyBvbmUgaWYgdGhlcmUgaXMgb25lIGluIGZsaWdodCBhbHJl
YWR5ICovCisJCXJldHVybjsKKwl9CisKKwkvKiBjb21wb3NlIGFuIEFTQ09ORiBjaHVuaywgbWF4
aW11bSBsZW5ndGggaXMgUE1UVSAqLworCW1fYXNjb25mID0gc2N0cF9jb21wb3NlX2FzY29uZihz
dGNiLCAmbGVuLCBhZGRyX2xvY2tlZCk7CisJaWYgKG1fYXNjb25mID09IE5VTEwpIHsKKwkJcmV0
dXJuOworCX0KKworCXNjdHBfYWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOworCWlmIChjaGsgPT0g
TlVMTCkgeworCQkvKiBubyBtZW1vcnkgKi8KKwkJc2N0cF9tX2ZyZWVtKG1fYXNjb25mKTsKKwkJ
cmV0dXJuOworCX0KKworCWNoay0+Y29weV9ieV9yZWYgPSAwOworCWNoay0+cmVjLmNodW5rX2lk
LmlkID0gU0NUUF9BU0NPTkY7CisJY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0YSA9IDA7
CisJY2hrLT5mbGFncyA9IENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LOworCWNoay0+ZGF0YSA9IG1f
YXNjb25mOworCWNoay0+c2VuZF9zaXplID0gbGVuOworCWNoay0+c2VudCA9IFNDVFBfREFUQUdS
QU1fVU5TRU5UOworCWNoay0+c25kX2NvdW50ID0gMDsKKwljaGstPmFzb2MgPSAmc3RjYi0+YXNv
YzsKKwljaGstPndob1RvID0gbmV0OworCWlmIChjaGstPndob1RvKSB7CisJCWF0b21pY19hZGRf
aW50KCZjaGstPndob1RvLT5yZWZfY291bnQsIDEpOworCX0KKwlUQUlMUV9JTlNFUlRfVEFJTCgm
Y2hrLT5hc29jLT5hc2NvbmZfc2VuZF9xdWV1ZSwgY2hrLCBzY3RwX25leHQpOworCWNoay0+YXNv
Yy0+Y3RybF9xdWV1ZV9jbnQrKzsKKwlyZXR1cm47Cit9CisKK3ZvaWQKK3NjdHBfc2VuZF9hc2Nv
bmZfYWNrKHN0cnVjdCBzY3RwX3RjYiAqc3RjYikKK3sKKwkvKgorCSAqIGZvcm11bGF0ZSBhbmQg
cXVldWUgYSBhc2NvbmYtYWNrIGJhY2sgdG8gc2VuZGVyLgorCSAqIHRoZSBhc2NvbmYtYWNrIG11
c3QgYmUgc3RvcmVkIGluIHRoZSB0Y2IuCisJICovCisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAq
Y2hrOworCXN0cnVjdCBzY3RwX2FzY29uZl9hY2sgKmFjaywgKmxhdGVzdF9hY2s7CisJc3RydWN0
IG1idWYgKm1fYWNrOworCXN0cnVjdCBzY3RwX25ldHMgKm5ldCA9IE5VTEw7CisKKwlTQ1RQX1RD
Ql9MT0NLX0FTU0VSVChzdGNiKTsKKwkvKiBHZXQgdGhlIGxhdGVzdCBBU0NPTkYtQUNLICovCisJ
bGF0ZXN0X2FjayA9IFRBSUxRX0xBU1QoJnN0Y2ItPmFzb2MuYXNjb25mX2Fja19zZW50LCBzY3Rw
X2FzY29uZl9hY2toZWFkKTsKKwlpZiAobGF0ZXN0X2FjayA9PSBOVUxMKSB7CisJCXJldHVybjsK
Kwl9CisJaWYgKGxhdGVzdF9hY2stPmxhc3Rfc2VudF90byAhPSBOVUxMICYmCisJICAgIGxhdGVz
dF9hY2stPmxhc3Rfc2VudF90byA9PSBzdGNiLT5hc29jLmxhc3RfY29udHJvbF9jaHVua19mcm9t
KSB7CisJCS8qIHdlJ3JlIGRvaW5nIGEgcmV0cmFuc21pc3Npb24gKi8KKwkJbmV0ID0gc2N0cF9m
aW5kX2FsdGVybmF0ZV9uZXQoc3RjYiwgc3RjYi0+YXNvYy5sYXN0X2NvbnRyb2xfY2h1bmtfZnJv
bSwgMCk7CisJCWlmIChuZXQgPT0gTlVMTCkgeworCQkJLyogbm8gYWx0ZXJuYXRlICovCisJCQlp
ZiAoc3RjYi0+YXNvYy5sYXN0X2NvbnRyb2xfY2h1bmtfZnJvbSA9PSBOVUxMKSB7CisJCQkJaWYg
KHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSB7CisJCQkJCW5ldCA9IHN0Y2ItPmFzb2MuYWx0ZXJuYXRl
OworCQkJCX0gZWxzZSB7CisJCQkJCW5ldCA9IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlv
bjsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCW5ldCA9IHN0Y2ItPmFzb2MubGFzdF9jb250cm9s
X2NodW5rX2Zyb207CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQkvKiBub3JtYWwgY2FzZSAqLwor
CQlpZiAoc3RjYi0+YXNvYy5sYXN0X2NvbnRyb2xfY2h1bmtfZnJvbSA9PSBOVUxMKSB7CisJCQlp
ZiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsKKwkJCQluZXQgPSBzdGNiLT5hc29jLmFsdGVybmF0
ZTsKKwkJCX0gZWxzZSB7CisJCQkJbmV0ID0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9u
OworCQkJfQorCQl9IGVsc2UgeworCQkJbmV0ID0gc3RjYi0+YXNvYy5sYXN0X2NvbnRyb2xfY2h1
bmtfZnJvbTsKKwkJfQorCX0KKwlsYXRlc3RfYWNrLT5sYXN0X3NlbnRfdG8gPSBuZXQ7CisKKwlU
QUlMUV9GT1JFQUNIKGFjaywgJnN0Y2ItPmFzb2MuYXNjb25mX2Fja19zZW50LCBuZXh0KSB7CisJ
CWlmIChhY2stPmRhdGEgPT0gTlVMTCkgeworCQkJY29udGludWU7CisJCX0KKworCQkvKiBjb3B5
IHRoZSBhc2NvbmZfYWNrICovCisJCW1fYWNrID0gU0NUUF9NX0NPUFlNKGFjay0+ZGF0YSwgMCwg
TV9DT1BZQUxMLCBNX05PV0FJVCk7CisJCWlmIChtX2FjayA9PSBOVUxMKSB7CisJCQkvKiBjb3Vs
ZG4ndCBjb3B5IGl0ICovCisJCQlyZXR1cm47CisJCX0KKyNpZmRlZiBTQ1RQX01CVUZfTE9HR0lO
RworCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQlVG
X0xPR0dJTkdfRU5BQkxFKSB7CisJCQlzY3RwX2xvZ19tYmMobV9hY2ssIFNDVFBfTUJVRl9JQ09Q
WSk7CisJCX0KKyNlbmRpZgorCisJCXNjdHBfYWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOworCQlp
ZiAoY2hrID09IE5VTEwpIHsKKwkJCS8qIG5vIG1lbW9yeSAqLworCQkJaWYgKG1fYWNrKQorCQkJ
CXNjdHBfbV9mcmVlbShtX2Fjayk7CisJCQlyZXR1cm47CisJCX0KKwkJY2hrLT5jb3B5X2J5X3Jl
ZiA9IDA7CisJCWNoay0+cmVjLmNodW5rX2lkLmlkID0gU0NUUF9BU0NPTkZfQUNLOworCQljaGst
PnJlYy5jaHVua19pZC5jYW5fdGFrZV9kYXRhID0gMTsKKwkJY2hrLT5mbGFncyA9IENIVU5LX0ZM
QUdTX0ZSQUdNRU5UX09LOworCQljaGstPndob1RvID0gbmV0OworCQlpZiAoY2hrLT53aG9Ubykg
eworCQkJYXRvbWljX2FkZF9pbnQoJmNoay0+d2hvVG8tPnJlZl9jb3VudCwgMSk7CisJCX0KKwkJ
Y2hrLT5kYXRhID0gbV9hY2s7CisJCWNoay0+c2VuZF9zaXplID0gYWNrLT5sZW47CisJCWNoay0+
c2VudCA9IFNDVFBfREFUQUdSQU1fVU5TRU5UOworCQljaGstPnNuZF9jb3VudCA9IDA7CisJCWNo
ay0+YXNvYyA9ICZzdGNiLT5hc29jOworCisJCVRBSUxRX0lOU0VSVF9UQUlMKCZjaGstPmFzb2Mt
PmNvbnRyb2xfc2VuZF9xdWV1ZSwgY2hrLCBzY3RwX25leHQpOworCQljaGstPmFzb2MtPmN0cmxf
cXVldWVfY250Kys7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIGludAorc2N0cF9jaHVua19y
ZXRyYW5zbWlzc2lvbihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorICAgIHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwKKyAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKyAgICBpbnQgKmNu
dF9vdXQsIHN0cnVjdCB0aW1ldmFsICpub3csIGludCAqbm93X2ZpbGxlZCwgaW50ICpmcl9kb25l
LCBpbnQgc29fbG9ja2VkKQoreworCS8qLQorCSAqIHNlbmQgb3V0IG9uZSBNVFUgb2YgcmV0cmFu
c21pc3Npb24uIElmIGZhc3RfcmV0cmFuc21pdCBpcworCSAqIGhhcHBlbmluZyB3ZSBpZ25vcmUg
dGhlIGN3bmQuIE90aGVyd2lzZSB3ZSBvYmV5IHRoZSBjd25kIGFuZAorCSAqIHJ3bmQuIEZvciBh
IENvb2tpZSBvciBBc2NvbmYgaW4gdGhlIGNvbnRyb2wgY2h1bmsgcXVldWUgd2UKKwkgKiByZXRy
YW5zbWl0IHRoZW0gYnkgdGhlbXNlbHZlcy4KKwkgKgorCSAqIEZvciBkYXRhIGNodW5rcyB3ZSB3
aWxsIHBpY2sgb3V0IHRoZSBsb3dlc3QgVFNOJ3MgaW4gdGhlIHNlbnRfcXVldWUKKwkgKiBtYXJr
ZWQgZm9yIHJlc2VuZCBhbmQgYnVuZGxlIHRoZW0gYWxsIHRvZ2V0aGVyICh1cCB0byBhIE1UVSBv
ZgorCSAqIGRlc3RpbmF0aW9uKS4gVGhlIGFkZHJlc3MgdG8gc2VuZCB0byBzaG91bGQgaGF2ZSBi
ZWVuCisJICogc2VsZWN0ZWQvY2hhbmdlZCB3aGVyZSB0aGUgcmV0cmFuc21pc3Npb24gd2FzIG1h
cmtlZCAoaS5lLiBpbiBGUgorCSAqIG9yIHQzLXRpbWVvdXQgcm91dGluZXMpLgorCSAqLworCXN0
cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmRhdGFfbGlzdFtTQ1RQX01BWF9EQVRBX0JVTkRMSU5HXTsK
KwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssICpmd2Q7CisJc3RydWN0IG1idWYgKm0sICpl
bmRvZmNoYWluOworCXN0cnVjdCBzY3RwX25ldHMgKm5ldCA9IE5VTEw7CisJdWludDMyX3QgdHNu
c19zZW50ID0gMDsKKwlpbnQgbm9fZnJhZ21lbnRmbGcsIGJ1bmRsZV9hdCwgY250X3RocnU7CisJ
dW5zaWduZWQgaW50IG10dTsKKwlpbnQgZXJyb3IsIGksIG9uZV9jaHVuaywgZndkX3RzbiwgY3Rs
X2NudCwgdG1yX3N0YXJ0ZWQ7CisJc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqYXV0aCA9IE5VTEw7
CisJdWludDMyX3QgYXV0aF9vZmZzZXQgPSAwOworCXVpbnQxNl90IGF1dGhfa2V5aWQ7CisJaW50
IG92ZXJyaWRlX29rID0gMTsKKwlpbnQgZGF0YV9hdXRoX3JlcWQgPSAwOworCXVpbnQzMl90IGRt
dHUgPSAwOworCisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisJaWYgKHNvX2xvY2tlZCkgeworCQlzY3RwX2xvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKGlu
cCkpOworCX0gZWxzZSB7CisJCXNjdHBfdW5sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhpbnApKTsK
Kwl9CisjZW5kaWYKKwlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKwl0bXJfc3RhcnRlZCA9
IGN0bF9jbnQgPSAwOworCW5vX2ZyYWdtZW50ZmxnID0gMTsKKwlmd2RfdHNuID0gMDsKKwkqY250
X291dCA9IDA7CisJZndkID0gTlVMTDsKKwllbmRvZmNoYWluID0gbSA9IE5VTEw7CisJYXV0aF9r
ZXlpZCA9IHN0Y2ItPmFzb2MuYXV0aGluZm8uYWN0aXZlX2tleWlkOworI2lmZGVmIFNDVFBfQVVE
SVRJTkdfRU5BQkxFRAorCXNjdHBfYXVkaXRfbG9nKDB4QzMsIDEpOworI2VuZGlmCisJaWYgKChU
QUlMUV9FTVBUWSgmYXNvYy0+c2VudF9xdWV1ZSkpICYmCisJICAgIChUQUlMUV9FTVBUWSgmYXNv
Yy0+Y29udHJvbF9zZW5kX3F1ZXVlKSkpIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEs
IlNDVFAgaGl0cyBlbXB0eSBxdWV1ZSB3aXRoIGNudCBzZXQgdG8gJWQ/XG4iLAorCQkJYXNvYy0+
c2VudF9xdWV1ZV9yZXRyYW5fY250KTsKKwkJYXNvYy0+c2VudF9xdWV1ZV9jbnQgPSAwOworCQlh
c29jLT5zZW50X3F1ZXVlX2NudF9yZW1vdmVhYmxlID0gMDsKKwkJLyogc2VuZCBiYWNrIDAvMCBz
byB3ZSBlbnRlciBub3JtYWwgdHJhbnNtaXNzaW9uICovCisJCSpjbnRfb3V0ID0gMDsKKwkJcmV0
dXJuICgwKTsKKwl9CisJVEFJTFFfRk9SRUFDSChjaGssICZhc29jLT5jb250cm9sX3NlbmRfcXVl
dWUsIHNjdHBfbmV4dCkgeworCQlpZiAoKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfQ09P
S0lFX0VDSE8pIHx8CisJCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9TVFJFQU1f
UkVTRVQpIHx8CisJCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9GT1JXQVJEX0NV
TV9UU04pKSB7CisJCQlpZiAoY2hrLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7CisJ
CQkJY29udGludWU7CisJCQl9CisJCQlpZiAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9T
VFJFQU1fUkVTRVQpIHsKKwkJCQlpZiAoY2hrICE9IGFzb2MtPnN0cl9yZXNldCkgeworCQkJCQkv
KgorCQkJCQkgKiBub3QgZWxpZ2libGUgZm9yIHJldHJhbiBpZiBpdHMKKwkJCQkJICogbm90IG91
cnMKKwkJCQkJICovCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJCWN0bF9jbnQrKzsK
KwkJCWlmIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0ZPUldBUkRfQ1VNX1RTTikgewor
CQkJCWZ3ZF90c24gPSAxOworCQkJfQorCQkJLyoKKwkJCSAqIEFkZCBhbiBBVVRIIGNodW5rLCBp
ZiBjaHVuayByZXF1aXJlcyBpdCBzYXZlIHRoZQorCQkJICogb2Zmc2V0IGludG8gdGhlIGNoYWlu
IGZvciBBVVRICisJCQkgKi8KKwkJCWlmICgoYXV0aCA9PSBOVUxMKSAmJgorCQkJICAgIChzY3Rw
X2F1dGhfaXNfcmVxdWlyZWRfY2h1bmsoY2hrLT5yZWMuY2h1bmtfaWQuaWQsCisJCQkJCQkJIHN0
Y2ItPmFzb2MucGVlcl9hdXRoX2NodW5rcykpKSB7CisJCQkJbSA9IHNjdHBfYWRkX2F1dGhfY2h1
bmsobSwgJmVuZG9mY2hhaW4sCisJCQkJCQkJJmF1dGgsICZhdXRoX29mZnNldCwKKwkJCQkJCQlz
dGNiLAorCQkJCQkJCWNoay0+cmVjLmNodW5rX2lkLmlkKTsKKwkJCQlTQ1RQX1NUQVRfSU5DUl9D
T1VOVEVSNjQoc2N0cHNfb3V0Y29udHJvbGNodW5rcyk7CisJCQl9CisJCQltID0gc2N0cF9jb3B5
X21idWZjaGFpbihjaGstPmRhdGEsIG0sICZlbmRvZmNoYWluLCAwLCBjaGstPnNlbmRfc2l6ZSwg
Y2hrLT5jb3B5X2J5X3JlZik7CisJCQlicmVhazsKKwkJfQorCX0KKwlvbmVfY2h1bmsgPSAwOwor
CWNudF90aHJ1ID0gMDsKKwkvKiBkbyB3ZSBoYXZlIGNvbnRyb2wgY2h1bmtzIHRvIHJldHJhbnNt
aXQ/ICovCisJaWYgKG0gIT0gTlVMTCkgeworCQkvKiBTdGFydCBhIHRpbWVyIG5vIG1hdHRlciBp
ZiB3ZSBzdWNjZWVkIG9yIGZhaWwgKi8KKwkJaWYgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFND
VFBfQ09PS0lFX0VDSE8pIHsKKwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0NP
T0tJRSwgaW5wLCBzdGNiLCBjaGstPndob1RvKTsKKwkJfSBlbHNlIGlmIChjaGstPnJlYy5jaHVu
a19pZC5pZCA9PSBTQ1RQX0FTQ09ORikKKwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9U
WVBFX0FTQ09ORiwgaW5wLCBzdGNiLCBjaGstPndob1RvKTsKKwkJY2hrLT5zbmRfY291bnQrKzsJ
LyogdXBkYXRlIG91ciBjb3VudCAqLworCQlpZiAoKGVycm9yID0gc2N0cF9sb3dsZXZlbF9jaHVu
a19vdXRwdXQoaW5wLCBzdGNiLCBjaGstPndob1RvLAorCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZjaGstPndob1RvLT5yby5fbF9h
ZGRyLCBtLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9v
ZmZzZXQsIGF1dGgsIHN0Y2ItPmFzb2MuYXV0aGluZm8uYWN0aXZlX2tleWlkLAorCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9fZnJhZ21lbnRmbGcsIDAsIDAsCisJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnAtPnNjdHBfbHBvcnQs
IHN0Y2ItPnJwb3J0LCBodG9ubChzdGNiLT5hc29jLnBlZXJfdnRhZyksCisJCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGstPndob1RvLT5wb3J0LCBOVUxMLAorI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLAorI2VuZGlmCisJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb19sb2NrZWQpKSkgeworCQkJU0NU
UERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJHYWsgc2VuZCBlcnJvciAlZFxuIiwgZXJyb3IpOwor
CQkJaWYgKGVycm9yID09IEVOT0JVRlMpIHsKKwkJCQlhc29jLT5pZnBfaGFkX2Vub2J1ZiA9IDE7
CisJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbG93bGV2ZWxlcnIpOworCQkJfQorCQkJcmV0dXJu
IChlcnJvcik7CisJCX0gZWxzZSB7CisJCQlhc29jLT5pZnBfaGFkX2Vub2J1ZiA9IDA7CisJCX0K
KwkJZW5kb2ZjaGFpbiA9IE5VTEw7CisJCWF1dGggPSBOVUxMOworCQlhdXRoX29mZnNldCA9IDA7
CisJCS8qCisJCSAqIFdlIGRvbid0IHdhbnQgdG8gbWFyayB0aGUgbmV0LT5zZW50IHRpbWUgaGVy
ZSBzaW5jZSB0aGlzCisJCSAqIHdlIHVzZSB0aGlzIGZvciBIQiBhbmQgcmV0cmFucyBjYW5ub3Qg
bWVhc3VyZSBSVFQKKwkJICovCisJCS8qICh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZjaGst
Pndob1RvLT5sYXN0X3NlbnRfdGltZSk7ICovCisJCSpjbnRfb3V0ICs9IDE7CisJCWNoay0+c2Vu
dCA9IFNDVFBfREFUQUdSQU1fU0VOVDsKKwkJc2N0cF91Y291bnRfZGVjcihzdGNiLT5hc29jLnNl
bnRfcXVldWVfcmV0cmFuX2NudCk7CisJCWlmIChmd2RfdHNuID09IDApIHsKKwkJCXJldHVybiAo
MCk7CisJCX0gZWxzZSB7CisJCQkvKiBDbGVhbiB1cCB0aGUgZndkLXRzbiBsaXN0ICovCisJCQlz
Y3RwX2NsZWFuX3VwX2N0bChzdGNiLCBhc29jLCBzb19sb2NrZWQpOworCQkJcmV0dXJuICgwKTsK
KwkJfQorCX0KKwkvKgorCSAqIE9rLCBpdCBpcyBqdXN0IGRhdGEgcmV0cmFuc21pc3Npb24gd2Ug
bmVlZCB0byBkbyBvciB0aGF0IGFuZCBhCisJICogZndkLXRzbiB3aXRoIGl0IGFsbC4KKwkgKi8K
KwlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNlbnRfcXVldWUpKSB7CisJCXJldHVybiAoU0NUUF9S
RVRSQU5fRE9ORSk7CisJfQorCWlmICgoU0NUUF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFU
RV9DT09LSUVfRUNIT0VEKSB8fAorCSAgICAoU0NUUF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9T
VEFURV9DT09LSUVfV0FJVCkpIHsKKwkJLyogbm90IHlldCBvcGVuLCByZXNlbmQgdGhlIGNvb2tp
ZSBhbmQgdGhhdCBpcyBpdCAqLworCQlyZXR1cm4gKDEpOworCX0KKyNpZmRlZiBTQ1RQX0FVRElU
SU5HX0VOQUJMRUQKKwlzY3RwX2F1ZGl0aW5nKDIwLCBpbnAsIHN0Y2IsIE5VTEwpOworI2VuZGlm
CisJZGF0YV9hdXRoX3JlcWQgPSBzY3RwX2F1dGhfaXNfcmVxdWlyZWRfY2h1bmsoU0NUUF9EQVRB
LCBzdGNiLT5hc29jLnBlZXJfYXV0aF9jaHVua3MpOworCVRBSUxRX0ZPUkVBQ0goY2hrLCAmYXNv
Yy0+c2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJCWlmIChjaGstPnNlbnQgIT0gU0NUUF9EQVRB
R1JBTV9SRVNFTkQpIHsKKwkJCS8qIE5vLCBub3Qgc2VudCB0byB0aGlzIG5ldCBvciBub3QgcmVh
ZHkgZm9yIHJ0eCAqLworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGNoay0+ZGF0YSA9PSBOVUxM
KSB7CisJCQlTQ1RQX1BSSU5URigiVFNOOiV4IGNoay0+c25kX2NvdW50OiVkIGNoay0+c2VudDol
ZCBjYW4ndCByZXRyYW4gLSBubyBkYXRhXG4iLAorCQkJICAgICAgICAgICAgY2hrLT5yZWMuZGF0
YS50c24sIGNoay0+c25kX2NvdW50LCBjaGstPnNlbnQpOworCQkJY29udGludWU7CisJCX0KKwkJ
aWYgKChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWF4X3JldHJhbl9jaHVuaykpICYmCisJCSAgICAo
Y2hrLT5zbmRfY291bnQgPj0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX21heF9yZXRyYW5fY2h1bmsp
KSkgeworCQkJc3RydWN0IG1idWYgKm9wX2VycjsKKwkJCWNoYXIgbXNnW1NDVFBfRElBR19JTkZP
X0xFTl07CisKKwkJCVNDVFBfU05QUklOVEYobXNnLCBzaXplb2YobXNnKSwgIlRTTiAlOC44eCBy
ZXRyYW5zbWl0dGVkICVkIHRpbWVzLCBnaXZpbmcgdXAiLAorCQkJICAgICAgICAgICAgICBjaGst
PnJlYy5kYXRhLnRzbiwgY2hrLT5zbmRfY291bnQpOworCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0
ZV9jYXVzZShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUpLAorCQkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtc2cpOworCQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFz
b2MucmVmY250LCAxKTsKKwkJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9l
cCwgc3RjYiwgb3BfZXJyLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICBzb19sb2NrZWQp
OworCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2It
PmFzb2MucmVmY250LCAxKTsKKwkJCXJldHVybiAoU0NUUF9SRVRSQU5fRVhJVCk7CisJCX0KKwkJ
LyogcGljayB1cCB0aGUgbmV0ICovCisJCW5ldCA9IGNoay0+d2hvVG87CisJCXN3aXRjaCAobmV0
LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCWNhc2UgQUZfSU5F
VDoKKwkJCQltdHUgPSBuZXQtPm10dSAtIFNDVFBfTUlOX1Y0X09WRVJIRUFEOworCQkJCWJyZWFr
OworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6CisJCQkJbXR1ID0gbmV0
LT5tdHUgLSBTQ1RQX01JTl9PVkVSSEVBRDsKKwkJCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwkJCWNhc2UgQUZfQ09OTjoKKwkJCQltdHUgPSBuZXQtPm10dSAt
IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWRlZmF1bHQ6
CisJCQkJLyogVFNOSCAqLworCQkJCW10dSA9IG5ldC0+bXR1OworCQkJCWJyZWFrOworCQl9CisK
KwkJaWYgKChhc29jLT5wZWVyc19yd25kIDwgbXR1KSAmJiAoYXNvYy0+dG90YWxfZmxpZ2h0ID4g
MCkpIHsKKwkJCS8qIE5vIHJvb20gaW4gcGVlcnMgcnduZCAqLworCQkJdWludDMyX3QgdHNuOwor
CisJCQl0c24gPSBhc29jLT5sYXN0X2Fja2VkX3NlcSArIDE7CisJCQlpZiAodHNuID09IGNoay0+
cmVjLmRhdGEudHNuKSB7CisJCQkJLyoKKwkJCQkgKiB3ZSBtYWtlIGEgc3BlY2lhbCBleGNlcHRp
b24gZm9yIHRoaXMKKwkJCQkgKiBjYXNlLiBUaGUgcGVlciBoYXMgbm8gcnduZCBidXQgaXMgbWlz
c2luZworCQkJCSAqIHRoZSBsb3dlc3QgY2h1bmsuLiB3aGljaCBpcyBwcm9iYWJseSB3aGF0CisJ
CQkJICogaXMgaG9sZGluZyB1cCB0aGUgcnduZC4KKwkJCQkgKi8KKwkJCQlnb3RvIG9uZV9jaHVu
a19hcm91bmQ7CisJCQl9CisJCQlyZXR1cm4gKDEpOworCQl9CisJb25lX2NodW5rX2Fyb3VuZDoK
KwkJaWYgKGFzb2MtPnBlZXJzX3J3bmQgPCBtdHUpIHsKKwkJCW9uZV9jaHVuayA9IDE7CisJCQlp
ZiAoKGFzb2MtPnBlZXJzX3J3bmQgPT0gMCkgJiYKKwkJCSAgICAoYXNvYy0+dG90YWxfZmxpZ2h0
ID09IDApKSB7CisJCQkJY2hrLT53aW5kb3dfcHJvYmUgPSAxOworCQkJCWNoay0+d2hvVG8tPndp
bmRvd19wcm9iZSA9IDE7CisJCQl9CisJCX0KKyNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQK
KwkJc2N0cF9hdWRpdF9sb2coMHhDMywgMik7CisjZW5kaWYKKwkJYnVuZGxlX2F0ID0gMDsKKwkJ
bSA9IE5VTEw7CisJCW5ldC0+ZmFzdF9yZXRyYW5faXAgPSAwOworCQlpZiAoY2hrLT5yZWMuZGF0
YS5kb2luZ19mYXN0X3JldHJhbnNtaXQgPT0gMCkgeworCQkJLyoKKwkJCSAqIGlmIG5vIEZSIGlu
IHByb2dyZXNzIHNraXAgZGVzdGluYXRpb24gdGhhdCBoYXZlCisJCQkgKiBmbGlnaHRfc2l6ZSA+
IGN3bmQuCisJCQkgKi8KKwkJCWlmIChuZXQtPmZsaWdodF9zaXplID49IG5ldC0+Y3duZCkgewor
CQkJCWNvbnRpbnVlOworCQkJfQorCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIE1hcmsgdGhlIGRl
c3RpbmF0aW9uIG5ldCB0byBoYXZlIEZSIHJlY292ZXJ5CisJCQkgKiBsaW1pdHMgcHV0IG9uIGl0
LgorCQkJICovCisJCQkqZnJfZG9uZSA9IDE7CisJCQluZXQtPmZhc3RfcmV0cmFuX2lwID0gMTsK
KwkJfQorCisJCS8qCisJCSAqIGlmIG5vIEFVVEggaXMgeWV0IGluY2x1ZGVkIGFuZCB0aGlzIGNo
dW5rIHJlcXVpcmVzIGl0LAorCQkgKiBtYWtlIHN1cmUgdG8gYWNjb3VudCBmb3IgaXQuICBXZSBk
b24ndCBhcHBseSB0aGUgc2l6ZQorCQkgKiB1bnRpbCB0aGUgQVVUSCBjaHVuayBpcyBhY3R1YWxs
eSBhZGRlZCBiZWxvdyBpbiBjYXNlCisJCSAqIHRoZXJlIGlzIG5vIHJvb20gZm9yIHRoaXMgY2h1
bmsuCisJCSAqLworCQlpZiAoZGF0YV9hdXRoX3JlcWQgJiYgKGF1dGggPT0gTlVMTCkpIHsKKwkJ
CWRtdHUgPSBzY3RwX2dldF9hdXRoX2NodW5rX2xlbihzdGNiLT5hc29jLnBlZXJfaG1hY19pZCk7
CisJCX0gZWxzZQorCQkJZG10dSA9IDA7CisKKwkJaWYgKChjaGstPnNlbmRfc2l6ZSA8PSAobXR1
IC0gZG10dSkpIHx8CisJCSAgICAoY2hrLT5mbGFncyAmIENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09L
KSkgeworCQkJLyogb2sgd2Ugd2lsbCBhZGQgdGhpcyBvbmUgKi8KKwkJCWlmIChkYXRhX2F1dGhf
cmVxZCkgeworCQkJCWlmIChhdXRoID09IE5VTEwpIHsKKwkJCQkJbSA9IHNjdHBfYWRkX2F1dGhf
Y2h1bmsobSwKKwkJCQkJCQkJJmVuZG9mY2hhaW4sCisJCQkJCQkJCSZhdXRoLAorCQkJCQkJCQkm
YXV0aF9vZmZzZXQsCisJCQkJCQkJCXN0Y2IsCisJCQkJCQkJCVNDVFBfREFUQSk7CisJCQkJCWF1
dGhfa2V5aWQgPSBjaGstPmF1dGhfa2V5aWQ7CisJCQkJCW92ZXJyaWRlX29rID0gMDsKKwkJCQkJ
U0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX291dGNvbnRyb2xjaHVua3MpOworCQkJCX0g
ZWxzZSBpZiAob3ZlcnJpZGVfb2spIHsKKwkJCQkJYXV0aF9rZXlpZCA9IGNoay0+YXV0aF9rZXlp
ZDsKKwkJCQkJb3ZlcnJpZGVfb2sgPSAwOworCQkJCX0gZWxzZSBpZiAoY2hrLT5hdXRoX2tleWlk
ICE9IGF1dGhfa2V5aWQpIHsKKwkJCQkJLyogZGlmZmVyZW50IGtleWlkLCBzbyBkb25lIGJ1bmRs
aW5nICovCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCW0gPSBzY3RwX2NvcHlfbWJ1ZmNo
YWluKGNoay0+ZGF0YSwgbSwgJmVuZG9mY2hhaW4sIDAsIGNoay0+c2VuZF9zaXplLCBjaGstPmNv
cHlfYnlfcmVmKTsKKwkJCWlmIChtID09IE5VTEwpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOworCQkJCXJl
dHVybiAoRU5PTUVNKTsKKwkJCX0KKwkJCS8qIERvIGNsZWFyIElQX0RGID8gKi8KKwkJCWlmIChj
aGstPmZsYWdzICYgQ0hVTktfRkxBR1NfRlJBR01FTlRfT0spIHsKKwkJCQlub19mcmFnbWVudGZs
ZyA9IDA7CisJCQl9CisJCQkvKiB1cGF0ZSBvdXIgTVRVIHNpemUgKi8KKwkJCWlmIChtdHUgPiAo
Y2hrLT5zZW5kX3NpemUgKyBkbXR1KSkKKwkJCQltdHUgLT0gKGNoay0+c2VuZF9zaXplICsgZG10
dSk7CisJCQllbHNlCisJCQkJbXR1ID0gMDsKKwkJCWRhdGFfbGlzdFtidW5kbGVfYXQrK10gPSBj
aGs7CisJCQlpZiAob25lX2NodW5rICYmIChhc29jLT50b3RhbF9mbGlnaHQgPD0gMCkpIHsKKwkJ
CQlTQ1RQX1NUQVRfSU5DUihzY3Rwc193aW5kb3dwcm9iZWQpOworCQkJfQorCQl9CisJCWlmIChv
bmVfY2h1bmsgPT0gMCkgeworCQkJLyoKKwkJCSAqIG5vdyBhcmUgdGhlcmUgYW55bW9yZSBmb3J3
YXJkIGZyb20gY2hrIHRvIHBpY2sKKwkJCSAqIHVwPworCQkJICovCisJCQlmb3IgKGZ3ZCA9IFRB
SUxRX05FWFQoY2hrLCBzY3RwX25leHQpOyBmd2QgIT0gTlVMTDsgZndkID0gVEFJTFFfTkVYVChm
d2QsIHNjdHBfbmV4dCkpIHsKKwkJCQlpZiAoZndkLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fUkVT
RU5EKSB7CisJCQkJCS8qIE5vcGUsIG5vdCBmb3IgcmV0cmFuICovCisJCQkJCWNvbnRpbnVlOwor
CQkJCX0KKwkJCQlpZiAoZndkLT53aG9UbyAhPSBuZXQpIHsKKwkJCQkJLyogTm9wZSwgbm90IHRo
ZSBuZXQgaW4gcXVlc3Rpb24gKi8KKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWlmIChkYXRh
X2F1dGhfcmVxZCAmJiAoYXV0aCA9PSBOVUxMKSkgeworCQkJCQlkbXR1ID0gc2N0cF9nZXRfYXV0
aF9jaHVua19sZW4oc3RjYi0+YXNvYy5wZWVyX2htYWNfaWQpOworCQkJCX0gZWxzZQorCQkJCQlk
bXR1ID0gMDsKKwkJCQlpZiAoZndkLT5zZW5kX3NpemUgPD0gKG10dSAtIGRtdHUpKSB7CisJCQkJ
CWlmIChkYXRhX2F1dGhfcmVxZCkgeworCQkJCQkJaWYgKGF1dGggPT0gTlVMTCkgeworCQkJCQkJ
CW0gPSBzY3RwX2FkZF9hdXRoX2NodW5rKG0sCisJCQkJCQkJCQkJJmVuZG9mY2hhaW4sCisJCQkJ
CQkJCQkJJmF1dGgsCisJCQkJCQkJCQkJJmF1dGhfb2Zmc2V0LAorCQkJCQkJCQkJCXN0Y2IsCisJ
CQkJCQkJCQkJU0NUUF9EQVRBKTsKKwkJCQkJCQlhdXRoX2tleWlkID0gZndkLT5hdXRoX2tleWlk
OworCQkJCQkJCW92ZXJyaWRlX29rID0gMDsKKwkJCQkJCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVS
NjQoc2N0cHNfb3V0Y29udHJvbGNodW5rcyk7CisJCQkJCQl9IGVsc2UgaWYgKG92ZXJyaWRlX29r
KSB7CisJCQkJCQkJYXV0aF9rZXlpZCA9IGZ3ZC0+YXV0aF9rZXlpZDsKKwkJCQkJCQlvdmVycmlk
ZV9vayA9IDA7CisJCQkJCQl9IGVsc2UgaWYgKGZ3ZC0+YXV0aF9rZXlpZCAhPSBhdXRoX2tleWlk
KSB7CisJCQkJCQkJLyogZGlmZmVyZW50IGtleWlkLCBzbyBkb25lIGJ1bmRsaW5nICovCisJCQkJ
CQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJbSA9IHNjdHBfY29weV9tYnVmY2hhaW4o
ZndkLT5kYXRhLCBtLCAmZW5kb2ZjaGFpbiwgMCwgZndkLT5zZW5kX3NpemUsIGZ3ZC0+Y29weV9i
eV9yZWYpOworCQkJCQlpZiAobSA9PSBOVUxMKSB7CisJCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOworCQkJCQkJ
cmV0dXJuIChFTk9NRU0pOworCQkJCQl9CisJCQkJCS8qIERvIGNsZWFyIElQX0RGID8gKi8KKwkJ
CQkJaWYgKGZ3ZC0+ZmxhZ3MgJiBDSFVOS19GTEFHU19GUkFHTUVOVF9PSykgeworCQkJCQkJbm9f
ZnJhZ21lbnRmbGcgPSAwOworCQkJCQl9CisJCQkJCS8qIHVwYXRlIG91ciBNVFUgc2l6ZSAqLwor
CQkJCQlpZiAobXR1ID4gKGZ3ZC0+c2VuZF9zaXplICsgZG10dSkpCisJCQkJCQltdHUgLT0gKGZ3
ZC0+c2VuZF9zaXplICsgZG10dSk7CisJCQkJCWVsc2UKKwkJCQkJCW10dSA9IDA7CisJCQkJCWRh
dGFfbGlzdFtidW5kbGVfYXQrK10gPSBmd2Q7CisJCQkJCWlmIChidW5kbGVfYXQgPj0gU0NUUF9N
QVhfREFUQV9CVU5ETElORykgeworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9IGVsc2Ugewor
CQkJCQkvKiBjYW4ndCBmaXQgc28gd2UgYXJlIGRvbmUgKi8KKwkJCQkJYnJlYWs7CisJCQkJfQor
CQkJfQorCQl9CisJCS8qIElzIHRoZXJlIHNvbWV0aGluZyB0byBzZW5kIGZvciB0aGlzIGRlc3Rp
bmF0aW9uPyAqLworCQlpZiAobSkgeworCQkJLyoKKwkJCSAqIE5vIG1hdHRlciBpZiB3ZSBmYWls
L29yIHN1Y2NlZWQgd2Ugc2hvdWxkIHN0YXJ0IGEKKwkJCSAqIHRpbWVyLiBBIGZhaWx1cmUgaXMg
bGlrZSBhIGxvc3QgSVAgcGFja2V0IDotKQorCQkJICovCisJCQlpZiAoIVNDVFBfT1NfVElNRVJf
UEVORElORygmbmV0LT5yeHRfdGltZXIudGltZXIpKSB7CisJCQkJLyoKKwkJCQkgKiBubyB0aW1l
ciBydW5uaW5nIG9uIHRoaXMgZGVzdGluYXRpb24KKwkJCQkgKiByZXN0YXJ0IGl0LgorCQkJCSAq
LworCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NFTkQsIGlucCwgc3RjYiwg
bmV0KTsKKwkJCQl0bXJfc3RhcnRlZCA9IDE7CisJCQl9CisJCQkvKiBOb3cgbGV0cyBzZW5kIGl0
LCBpZiB0aGVyZSBpcyBhbnl0aGluZyB0byBzZW5kIDo+ICovCisJCQlpZiAoKGVycm9yID0gc2N0
cF9sb3dsZXZlbF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBuZXQsCisJCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZuZXQtPnJvLl9s
X2FkZHIsIG0sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0
aF9vZmZzZXQsIGF1dGgsIGF1dGhfa2V5aWQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9fZnJhZ21lbnRmbGcsIDAsIDAsCisJCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5wLT5zY3RwX2xwb3J0LCBzdGNiLT5ycG9ydCwgaHRv
bmwoc3RjYi0+YXNvYy5wZWVyX3Z0YWcpLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5ldC0+cG9ydCwgTlVMTCwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAm
JiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIDAsCisjZW5kaWYKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzb19sb2NrZWQpKSkgeworCQkJCS8qIGVycm9yLCB3ZSBjb3VsZCBub3Qg
b3V0cHV0ICovCisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJHYWsgc2VuZCBlcnJv
ciAlZFxuIiwgZXJyb3IpOworCQkJCWlmIChlcnJvciA9PSBFTk9CVUZTKSB7CisJCQkJCWFzb2Mt
PmlmcF9oYWRfZW5vYnVmID0gMTsKKwkJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbG93bGV2ZWxl
cnIpOworCQkJCX0KKwkJCQlyZXR1cm4gKGVycm9yKTsKKwkJCX0gZWxzZSB7CisJCQkJYXNvYy0+
aWZwX2hhZF9lbm9idWYgPSAwOworCQkJfQorCQkJZW5kb2ZjaGFpbiA9IE5VTEw7CisJCQlhdXRo
ID0gTlVMTDsKKwkJCWF1dGhfb2Zmc2V0ID0gMDsKKwkJCS8qIEZvciBIQidzICovCisJCQkvKgor
CQkJICogV2UgZG9uJ3Qgd2FudCB0byBtYXJrIHRoZSBuZXQtPnNlbnQgdGltZSBoZXJlCisJCQkg
KiBzaW5jZSB0aGlzIHdlIHVzZSB0aGlzIGZvciBIQiBhbmQgcmV0cmFucyBjYW5ub3QKKwkJCSAq
IG1lYXN1cmUgUlRUCisJCQkgKi8KKwkJCS8qICh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZu
ZXQtPmxhc3Rfc2VudF90aW1lKTsgKi8KKworCQkJLyogRm9yIGF1dG8tY2xvc2UgKi8KKwkJCWNu
dF90aHJ1Kys7CisJCQlpZiAoKm5vd19maWxsZWQgPT0gMCkgeworCQkJCSh2b2lkKVNDVFBfR0VU
VElNRV9USU1FVkFMKCZhc29jLT50aW1lX2xhc3Rfc2VudCk7CisJCQkJKm5vdyA9IGFzb2MtPnRp
bWVfbGFzdF9zZW50OworCQkJCSpub3dfZmlsbGVkID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJYXNv
Yy0+dGltZV9sYXN0X3NlbnQgPSAqbm93OworCQkJfQorCQkJKmNudF9vdXQgKz0gYnVuZGxlX2F0
OworI2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAorCQkJc2N0cF9hdWRpdF9sb2coMHhDNCwg
YnVuZGxlX2F0KTsKKyNlbmRpZgorCQkJaWYgKGJ1bmRsZV9hdCkgeworCQkJCXRzbnNfc2VudCA9
IGRhdGFfbGlzdFswXS0+cmVjLmRhdGEudHNuOworCQkJfQorCQkJZm9yIChpID0gMDsgaSA8IGJ1
bmRsZV9hdDsgaSsrKSB7CisJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHJldHJhbnNkYXRh
KTsKKwkJCQlkYXRhX2xpc3RbaV0tPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1NFTlQ7CisJCQkJLyoK
KwkJCQkgKiBXaGVuIHdlIGhhdmUgYSByZXZva2VkIGRhdGEsIGFuZCB3ZQorCQkJCSAqIHJldHJh
bnNtaXQgaXQsIHRoZW4gd2UgY2xlYXIgdGhlIHJldm9rZWQKKwkJCQkgKiBmbGFnIHNpbmNlIHRo
aXMgZmxhZyBkaWN0YXRlcyBpZiB3ZQorCQkJCSAqIHN1YnRyYWN0ZWQgZnJvbSB0aGUgZnMKKwkJ
CQkgKi8KKwkJCQlpZiAoZGF0YV9saXN0W2ldLT5yZWMuZGF0YS5jaHVua193YXNfcmV2b2tlZCkg
eworCQkJCQkvKiBEZWZsYXRlIHRoZSBjd25kICovCisJCQkJCWRhdGFfbGlzdFtpXS0+d2hvVG8t
PmN3bmQgLT0gZGF0YV9saXN0W2ldLT5ib29rX3NpemU7CisJCQkJCWRhdGFfbGlzdFtpXS0+cmVj
LmRhdGEuY2h1bmtfd2FzX3Jldm9rZWQgPSAwOworCQkJCX0KKwkJCQlkYXRhX2xpc3RbaV0tPnNu
ZF9jb3VudCsrOworCQkJCXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5f
Y250KTsKKwkJCQkvKiByZWNvcmQgdGhlIHRpbWUgKi8KKwkJCQlkYXRhX2xpc3RbaV0tPnNlbnRf
cmN2X3RpbWUgPSBhc29jLT50aW1lX2xhc3Rfc2VudDsKKwkJCQlpZiAoZGF0YV9saXN0W2ldLT5i
b29rX3NpemVfc2NhbGUpIHsKKwkJCQkJLyoKKwkJCQkJICogbmVlZCB0byBkb3VibGUgdGhlIGJv
b2sgc2l6ZSBvbgorCQkJCQkgKiB0aGlzIG9uZQorCQkJCQkgKi8KKwkJCQkJZGF0YV9saXN0W2ld
LT5ib29rX3NpemVfc2NhbGUgPSAwOworCQkJCQkvKiBTaW5jZSB3ZSBkb3VibGUgdGhlIGJvb2tz
aXplLCB3ZSBtdXN0CisJCQkJCSAqIGFsc28gZG91YmxlIHRoZSBvdXRwdXQgcXVldWUgc2l6ZSwg
c2luY2UgdGhpcworCQkJCQkgKiBnZXQgc2hydW5rIHdoZW4gd2UgZnJlZSBieSB0aGlzIGFtb3Vu
dC4KKwkJCQkJICovCisJCQkJCWF0b21pY19hZGRfaW50KCYoKGFzb2MpLT50b3RhbF9vdXRwdXRf
cXVldWVfc2l6ZSksZGF0YV9saXN0W2ldLT5ib29rX3NpemUpOworCQkJCQlkYXRhX2xpc3RbaV0t
PmJvb2tfc2l6ZSAqPSAyOworCQkJCX0gZWxzZSB7CisJCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0xPR19SV05EX0VOQUJMRSkgeworCQkJCQkJc2N0
cF9sb2dfcnduZChTQ1RQX0RFQ1JFQVNFX1BFRVJfUldORCwKKwkJCQkJCSAgICAgIGFzb2MtPnBl
ZXJzX3J3bmQsIGRhdGFfbGlzdFtpXS0+c2VuZF9zaXplLCBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
cGVlcl9jaHVua19vaCkpOworCQkJCQl9CisJCQkJCWFzb2MtPnBlZXJzX3J3bmQgPSBzY3RwX3Ni
c3BhY2Vfc3ViKGFzb2MtPnBlZXJzX3J3bmQsCisJCQkJCQkJCQkgICAgKHVpbnQzMl90KSAoZGF0
YV9saXN0W2ldLT5zZW5kX3NpemUgKworCQkJCQkJCQkJCQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
cGVlcl9jaHVua19vaCkpKTsKKwkJCQl9CisJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9s
b2dnaW5nX2xldmVsKSAmIFNDVFBfRkxJR0hUX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCXNjdHBf
bWlzY19pbnRzKFNDVFBfRkxJR0hUX0xPR19VUF9SU05ELAorCQkJCQkJICAgICAgIGRhdGFfbGlz
dFtpXS0+d2hvVG8tPmZsaWdodF9zaXplLAorCQkJCQkJICAgICAgIGRhdGFfbGlzdFtpXS0+Ym9v
a19zaXplLAorCQkJCQkJICAgICAgICh1aW50MzJfdCkodWludHB0cl90KWRhdGFfbGlzdFtpXS0+
d2hvVG8sCisJCQkJCQkgICAgICAgZGF0YV9saXN0W2ldLT5yZWMuZGF0YS50c24pOworCQkJCX0K
KwkJCQlzY3RwX2ZsaWdodF9zaXplX2luY3JlYXNlKGRhdGFfbGlzdFtpXSk7CisJCQkJc2N0cF90
b3RhbF9mbGlnaHRfaW5jcmVhc2Uoc3RjYiwgZGF0YV9saXN0W2ldKTsKKwkJCQlpZiAoYXNvYy0+
cGVlcnNfcnduZCA8IHN0Y2ItPnNjdHBfZXAtPnNjdHBfZXAuc2N0cF9zd3Nfc2VuZGVyKSB7CisJ
CQkJCS8qIFNXUyBzZW5kZXIgc2lkZSBlbmdhZ2VzICovCisJCQkJCWFzb2MtPnBlZXJzX3J3bmQg
PSAwOworCQkJCX0KKwkJCQlpZiAoKGkgPT0gMCkgJiYKKwkJCQkgICAgKGRhdGFfbGlzdFtpXS0+
cmVjLmRhdGEuZG9pbmdfZmFzdF9yZXRyYW5zbWl0KSkgeworCQkJCQlTQ1RQX1NUQVRfSU5DUihz
Y3Rwc19zZW5kZmFzdHJldHJhbnMpOworCQkJCQlpZiAoKGRhdGFfbGlzdFtpXSA9PSBUQUlMUV9G
SVJTVCgmYXNvYy0+c2VudF9xdWV1ZSkpICYmCisJCQkJCSAgICAodG1yX3N0YXJ0ZWQgPT0gMCkp
IHsKKwkJCQkJCS8qLQorCQkJCQkJICogb2sgd2UganVzdCBmYXN0LXJldHJhbnMnZAorCQkJCQkJ
ICogdGhlIGxvd2VzdCBUU04sIGkuZSB0aGUKKwkJCQkJCSAqIGZpcnN0IG9uIHRoZSBsaXN0LiBJ
bgorCQkJCQkJICogdGhpcyBjYXNlIHdlIHdhbnQgdG8gZ2l2ZQorCQkJCQkJICogc29tZSBtb3Jl
IHRpbWUgdG8gZ2V0IGEKKwkJCQkJCSAqIFNBQ0sgYmFjayB3aXRob3V0IGEKKwkJCQkJCSAqIHQz
LWV4cGlyaW5nLgorCQkJCQkJICovCisJCQkJCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9U
WVBFX1NFTkQsIGlucCwgc3RjYiwgbmV0LAorCQkJCQkJICAgICAgICAgICAgICAgIFNDVFBfRlJP
TV9TQ1RQX09VVFBVVCArIFNDVFBfTE9DXzIpOworCQkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQ
X1RJTUVSX1RZUEVfU0VORCwgaW5wLCBzdGNiLCBuZXQpOworCQkJCQl9CisJCQkJfQorCQkJfQor
CQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9M
T0dHSU5HX0VOQUJMRSkgeworCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCB0c25zX3NlbnQs
IFNDVFBfQ1dORF9MT0dfRlJPTV9SRVNFTkQpOworCQkJfQorI2lmZGVmIFNDVFBfQVVESVRJTkdf
RU5BQkxFRAorCQkJc2N0cF9hdWRpdGluZygyMSwgaW5wLCBzdGNiLCBOVUxMKTsKKyNlbmRpZgor
CQl9IGVsc2UgeworCQkJLyogTm9uZSB3aWxsIGZpdCAqLworCQkJcmV0dXJuICgxKTsKKwkJfQor
CQlpZiAoYXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5fY250IDw9IDApIHsKKwkJCS8qIGFsbCBkb25l
IHdlIGhhdmUgbm8gbW9yZSB0byByZXRyYW4gKi8KKwkJCWFzb2MtPnNlbnRfcXVldWVfcmV0cmFu
X2NudCA9IDA7CisJCQlicmVhazsKKwkJfQorCQlpZiAob25lX2NodW5rKSB7CisJCQkvKiBObyBt
b3JlIHJvb20gaW4gcnduZCAqLworCQkJcmV0dXJuICgxKTsKKwkJfQorCQkvKiBzdG9wIHRoZSBm
b3IgbG9vcCBoZXJlLiB3ZSBzZW50IG91dCBhIHBhY2tldCAqLworCQlicmVhazsKKwl9CisJcmV0
dXJuICgwKTsKK30KKworc3RhdGljIHZvaWQKK3NjdHBfdGltZXJfdmFsaWRhdGlvbihzdHJ1Y3Qg
c2N0cF9pbnBjYiAqaW5wLAorICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICBzdHJ1Y3Qg
c2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKK3sKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisKKwkv
KiBWYWxpZGF0ZSB0aGF0IGEgdGltZXIgaXMgcnVubmluZyBzb21ld2hlcmUgKi8KKwlUQUlMUV9G
T1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgeworCQlpZiAoU0NUUF9PU19USU1F
Ul9QRU5ESU5HKCZuZXQtPnJ4dF90aW1lci50aW1lcikpIHsKKwkJCS8qIEhlcmUgaXMgYSB0aW1l
ciAqLworCQkJcmV0dXJuOworCQl9CisJfQorCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOwor
CS8qIEdhaywgd2UgZGlkIG5vdCBoYXZlIGEgdGltZXIgc29tZXdoZXJlICovCisJU0NUUERCRyhT
Q1RQX0RFQlVHX09VVFBVVDMsICJEZWFkbG9jayBhdm9pZGVkIHN0YXJ0aW5nIHRpbWVyIG9uIGEg
ZGVzdCBhdCByZXRyYW5cbiIpOworCWlmIChhc29jLT5hbHRlcm5hdGUpIHsKKwkJc2N0cF90aW1l
cl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0VORCwgaW5wLCBzdGNiLCBhc29jLT5hbHRlcm5hdGUp
OworCX0gZWxzZSB7CisJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NFTkQsIGlu
cCwgc3RjYiwgYXNvYy0+cHJpbWFyeV9kZXN0aW5hdGlvbik7CisJfQorCXJldHVybjsKK30KKwor
dm9pZAorc2N0cF9jaHVua19vdXRwdXQoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKKyAgICBzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgaW50IGZyb21fd2hlcmUsCisgICAgaW50IHNvX2xvY2tl
ZCkKK3sKKwkvKi0KKwkgKiBPayB0aGlzIGlzIHRoZSBnZW5lcmljIGNodW5rIHNlcnZpY2UgcXVl
dWUuIHdlIG11c3QgZG8gdGhlCisJICogZm9sbG93aW5nOgorCSAqIC0gU2VlIGlmIHRoZXJlIGFy
ZSByZXRyYW5zbWl0cyBwZW5kaW5nLCBpZiBzbyB3ZSBtdXN0CisJICogICBkbyB0aGVzZSBmaXJz
dC4KKwkgKiAtIFNlcnZpY2UgdGhlIHN0cmVhbSBxdWV1ZSB0aGF0IGlzIG5leHQsIG1vdmluZyBh
bnkKKwkgKiAgIG1lc3NhZ2UgKG5vdGUgSSBtdXN0IGdldCBhIGNvbXBsZXRlIG1lc3NhZ2UgaS5l
LgorCSAqICAgRklSU1QvTUlERExFIGFuZCBMQVNUIHRvIHRoZSBvdXQgcXVldWUgaW4gb25lIHBh
c3MpIGFuZCBhc3NpZ25pbmcKKwkgKiAgIFRTTidzCisJICogLSBDaGVjayB0byBzZWUgaWYgdGhl
IGN3bmQvcnduZCBhbGxvd3MgYW55IG91dHB1dCwgaWYgc28gd2UKKwkgKiAgIGdvIGFoZWFkIGFu
ZCBmb211bGF0ZSBhbmQgc2VuZCB0aGUgbG93IGxldmVsIGNodW5rcy4gTWFraW5nIHN1cmUKKwkg
KiAgIHRvIGNvbWJpbmUgYW55IGNvbnRyb2wgaW4gdGhlIGNvbnRyb2wgY2h1bmsgcXVldWUgYWxz
by4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qgc2N0cF9u
ZXRzICpuZXQ7CisJaW50IGVycm9yID0gMCwgbnVtX291dCwgdG90X291dCA9IDAsIHJldCA9IDAs
IHJlYXNvbl9jb2RlOworCXVuc2lnbmVkIGludCBidXJzdF9jbnQgPSAwOworCXN0cnVjdCB0aW1l
dmFsIG5vdzsKKwlpbnQgbm93X2ZpbGxlZCA9IDA7CisJaW50IG5hZ2xlX29uOworCWludCBmcmFn
X3BvaW50ID0gc2N0cF9nZXRfZnJhZ19wb2ludChzdGNiLCAmc3RjYi0+YXNvYyk7CisJaW50IHVu
X3NlbnQgPSAwOworCWludCBmcl9kb25lOworCXVuc2lnbmVkIGludCB0b3RfZnJzID0gMDsKKwor
I2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWlmIChz
b19sb2NrZWQpIHsKKwkJc2N0cF9sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhpbnApKTsKKwl9IGVs
c2UgeworCQlzY3RwX3VubG9ja19hc3NlcnQoU0NUUF9JTlBfU08oaW5wKSk7CisJfQorI2VuZGlm
CisJYXNvYyA9ICZzdGNiLT5hc29jOworZG9faXRfYWdhaW46CisJLyogVGhlIE5hZ2xlIGFsZ29y
aXRobSBpcyBvbmx5IGFwcGxpZWQgd2hlbiBoYW5kbGluZyBhIHNlbmQgY2FsbC4gKi8KKwlpZiAo
ZnJvbV93aGVyZSA9PSBTQ1RQX09VVFBVVF9GUk9NX1VTUl9TRU5EKSB7CisJCWlmIChzY3RwX2lz
X2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19OT0RFTEFZKSkgeworCQkJbmFnbGVfb24g
PSAwOworCQl9IGVsc2UgeworCQkJbmFnbGVfb24gPSAxOworCQl9CisJfSBlbHNlIHsKKwkJbmFn
bGVfb24gPSAwOworCX0KKwlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKworCXVuX3NlbnQg
PSAoc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSAtIHN0Y2ItPmFzb2MudG90YWxf
ZmxpZ2h0KTsKKworCWlmICgodW5fc2VudCA8PSAwKSAmJgorCSAgICAoVEFJTFFfRU1QVFkoJmFz
b2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSkpICYmCisJICAgIChUQUlMUV9FTVBUWSgmYXNvYy0+YXNj
b25mX3NlbmRfcXVldWUpKSAmJgorCSAgICAoYXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5fY250ID09
IDApICYmCisJICAgIChhc29jLT50cmlnZ2VyX3Jlc2V0ID09IDApKSB7CisJCS8qIE5vdGhpbmcg
dG8gZG8gdW5sZXNzIHRoZXJlIGlzIHNvbWV0aGluZyB0byBiZSBzZW50IGxlZnQgKi8KKwkJcmV0
dXJuOworCX0KKwkvKiBEbyB3ZSBoYXZlIHNvbWV0aGluZyB0byBzZW5kLCBkYXRhIG9yIGNvbnRy
b2wgQU5ECisJICogYSBzYWNrIHRpbWVyIHJ1bm5pbmcsIGlmIHNvIHBpZ2d5LWJhY2sgdGhlIHNh
Y2suCisJICovCisJaWYgKFNDVFBfT1NfVElNRVJfUEVORElORygmc3RjYi0+YXNvYy5kYWNrX3Rp
bWVyLnRpbWVyKSkgeworCQlzY3RwX3NlbmRfc2FjayhzdGNiLCBzb19sb2NrZWQpOworCQlzY3Rw
X3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX1JFQ1YsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIE5V
TEwsCisJCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9PVVRQVVQgKyBTQ1RQX0xPQ18z
KTsKKwl9CisJd2hpbGUgKGFzb2MtPnNlbnRfcXVldWVfcmV0cmFuX2NudCkgeworCQkvKi0KKwkJ
ICogT2ssIGl0IGlzIHJldHJhbnNtaXNzaW9uIHRpbWUgb25seSwgd2Ugc2VuZCBvdXQgb25seSBP
TkUKKwkJICogcGFja2V0IHdpdGggYSBzaW5nbGUgY2FsbCBvZmYgdG8gdGhlIHJldHJhbiBjb2Rl
LgorCQkgKi8KKwkJaWYgKGZyb21fd2hlcmUgPT0gU0NUUF9PVVRQVVRfRlJPTV9DT09LSUVfQUNL
KSB7CisJCQkvKi0KKwkJCSAqIFNwZWNpYWwgaG9vayBmb3IgaGFuZGxpbmcgY29va2llc3MgZGlz
Y2FyZGVkCisJCQkgKiBieSBwZWVyIHRoYXQgY2FycmllZCBkYXRhLiBTZW5kIGNvb2tpZS1hY2sg
b25seQorCQkJICogYW5kIHRoZW4gdGhlIG5leHQgY2FsbCB3aXRoIGdldCB0aGUgcmV0cmFuJ3Mu
CisJCQkgKi8KKwkJCSh2b2lkKXNjdHBfbWVkX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIGFzb2Ms
ICZudW1fb3V0LCAmcmVhc29uX2NvZGUsIDEsCisJCQkJCQkgICAgZnJvbV93aGVyZSwKKwkJCQkJ
CSAgICAmbm93LCAmbm93X2ZpbGxlZCwgZnJhZ19wb2ludCwgc29fbG9ja2VkKTsKKwkJCXJldHVy
bjsKKwkJfSBlbHNlIGlmIChmcm9tX3doZXJlICE9IFNDVFBfT1VUUFVUX0ZST01fSEJfVE1SKSB7
CisJCQkvKiBpZiBpdHMgbm90IGZyb20gYSBIQiB0aGVuIGRvIGl0ICovCisJCQlmcl9kb25lID0g
MDsKKwkJCXJldCA9IHNjdHBfY2h1bmtfcmV0cmFuc21pc3Npb24oaW5wLCBzdGNiLCBhc29jLCAm
bnVtX291dCwgJm5vdywgJm5vd19maWxsZWQsICZmcl9kb25lLCBzb19sb2NrZWQpOworCQkJaWYg
KGZyX2RvbmUpIHsKKwkJCQl0b3RfZnJzKys7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKgorCQkJ
ICogaXRzIGZyb20gYW55IG90aGVyIHBsYWNlLCB3ZSBkb24ndCBhbGxvdyByZXRyYW4KKwkJCSAq
IG91dHB1dCAob25seSBjb250cm9sKQorCQkJICovCisJCQlyZXQgPSAxOworCQl9CisJCWlmIChy
ZXQgPiAwKSB7CisJCQkvKiBDYW4ndCBzZW5kIGFueW1vcmUgKi8KKwkJCS8qLQorCQkJICogbm93
IGxldHMgcHVzaCBvdXQgY29udHJvbCBieSBjYWxsaW5nIG1lZC1sZXZlbAorCQkJICogb3V0cHV0
IG9uY2UuIHRoaXMgYXNzdXJlcyB0aGF0IHdlIFdJTEwgc2VuZCBIQidzCisJCQkgKiBpZiBxdWV1
ZWQgdG9vLgorCQkJICovCisJCQkodm9pZClzY3RwX21lZF9jaHVua19vdXRwdXQoaW5wLCBzdGNi
LCBhc29jLCAmbnVtX291dCwgJnJlYXNvbl9jb2RlLCAxLAorCQkJCQkJICAgIGZyb21fd2hlcmUs
CisJCQkJCQkgICAgJm5vdywgJm5vd19maWxsZWQsIGZyYWdfcG9pbnQsIHNvX2xvY2tlZCk7Cisj
aWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVECisJCQlzY3RwX2F1ZGl0aW5nKDgsIGlucCwgc3Rj
YiwgTlVMTCk7CisjZW5kaWYKKwkJCXNjdHBfdGltZXJfdmFsaWRhdGlvbihpbnAsIHN0Y2IsIGFz
b2MpOworCQkJcmV0dXJuOworCQl9CisJCWlmIChyZXQgPCAwKSB7CisJCQkvKi0KKwkJCSAqIFRo
ZSBjb3VudCB3YXMgb2ZmLi4gcmV0cmFuIGlzIG5vdCBoYXBwZW5pbmcgc28gZG8KKwkJCSAqIHRo
ZSBub3JtYWwgcmV0cmFuc21pc3Npb24uCisJCQkgKi8KKyNpZmRlZiBTQ1RQX0FVRElUSU5HX0VO
QUJMRUQKKwkJCXNjdHBfYXVkaXRpbmcoOSwgaW5wLCBzdGNiLCBOVUxMKTsKKyNlbmRpZgorCQkJ
aWYgKHJldCA9PSBTQ1RQX1JFVFJBTl9FWElUKSB7CisJCQkJcmV0dXJuOworCQkJfQorCQkJYnJl
YWs7CisJCX0KKwkJaWYgKGZyb21fd2hlcmUgPT0gU0NUUF9PVVRQVVRfRlJPTV9UMykgeworCQkJ
LyogT25seSBvbmUgdHJhbnNtaXNzaW9uIGFsbG93ZWQgb3V0IG9mIGEgdGltZW91dCAqLworI2lm
ZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAorCQkJc2N0cF9hdWRpdGluZygxMCwgaW5wLCBzdGNi
LCBOVUxMKTsKKyNlbmRpZgorCQkJLyogUHVzaCBvdXQgYW55IGNvbnRyb2wgKi8KKwkJCSh2b2lk
KXNjdHBfbWVkX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIGFzb2MsICZudW1fb3V0LCAmcmVhc29u
X2NvZGUsIDEsIGZyb21fd2hlcmUsCisJCQkJCQkgICAgJm5vdywgJm5vd19maWxsZWQsIGZyYWdf
cG9pbnQsIHNvX2xvY2tlZCk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKChhc29jLT5mcl9tYXhf
YnVyc3QgPiAwKSAmJiAodG90X2ZycyA+PSBhc29jLT5mcl9tYXhfYnVyc3QpKSB7CisJCQkvKiBI
aXQgRlIgYnVyc3QgbGltaXQgKi8KKwkJCXJldHVybjsKKwkJfQorCQlpZiAoKG51bV9vdXQgPT0g
MCkgJiYgKHJldCA9PSAwKSkgeworCQkJLyogTm8gbW9yZSByZXRyYW5zIHRvIHNlbmQgKi8KKwkJ
CWJyZWFrOworCQl9CisJfQorI2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAorCXNjdHBfYXVk
aXRpbmcoMTIsIGlucCwgc3RjYiwgTlVMTCk7CisjZW5kaWYKKwkvKiBDaGVjayBmb3IgYmFkIGRl
c3RpbmF0aW9ucywgaWYgdGhleSBleGlzdCBtb3ZlIGNodW5rcyBhcm91bmQuICovCisJVEFJTFFf
Rk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKKwkJaWYgKCEobmV0LT5kZXN0
X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkpIHsKKwkJCS8qLQorCQkJICogaWYgcG9zc2li
bGUgbW92ZSB0aGluZ3Mgb2ZmIG9mIHRoaXMgYWRkcmVzcyB3ZQorCQkJICogc3RpbGwgbWF5IHNl
bmQgYmVsb3cgZHVlIHRvIHRoZSBkb3JtYW50IHN0YXRlIGJ1dAorCQkJICogd2UgdHJ5IHRvIGZp
bmQgYW4gYWx0ZXJuYXRlIGFkZHJlc3MgdG8gc2VuZCB0bworCQkJICogYW5kIGlmIHdlIGhhdmUg
b25lIHdlIG1vdmUgYWxsIHF1ZXVlZCBkYXRhIG9uIHRoZQorCQkJICogb3V0IHdoZWVsIHRvIHRo
aXMgYWx0ZXJuYXRlIGFkZHJlc3MuCisJCQkgKi8KKwkJCWlmIChuZXQtPnJlZl9jb3VudCA+IDEp
CisJCQkJc2N0cF9tb3ZlX2NodW5rc19mcm9tX25ldChzdGNiLCBuZXQpOworCQl9IGVsc2Ugewor
CQkJLyotCisJCQkgKiBpZiAoKGFzb2MtPnNhdF9uZXR3b3JrKSB8fCAobmV0LT5hZGRyX2lzX2xv
Y2FsKSkKKwkJCSAqIHsgYnVyc3RfbGltaXQgPSBhc29jLT5tYXhfYnVyc3QgKgorCQkJICogU0NU
UF9TQVRfTkVUV09SS19CVVJTVF9JTkNSOyB9CisJCQkgKi8KKwkJCWlmIChhc29jLT5tYXhfYnVy
c3QgPiAwKSB7CisJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF91c2VfY3duZF9iYXNlZF9t
YXhidXJzdCkpIHsKKwkJCQkJaWYgKChuZXQtPmZsaWdodF9zaXplICsgKGFzb2MtPm1heF9idXJz
dCAqIG5ldC0+bXR1KSkgPCBuZXQtPmN3bmQpIHsKKwkJCQkJCS8qIEpSUyAtIFVzZSB0aGUgY29u
Z2VzdGlvbiBjb250cm9sIGdpdmVuIGluIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgbW9kdWxlICov
CisJCQkJCQlhc29jLT5jY19mdW5jdGlvbnMuc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9vdXRwdXQo
c3RjYiwgbmV0LCBhc29jLT5tYXhfYnVyc3QpOworCQkJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9HX01BWEJVUlNUX0VOQUJMRSkgeworCQkJCQkJ
CXNjdHBfbG9nX21heGJ1cnN0KHN0Y2IsIG5ldCwgMCwgYXNvYy0+bWF4X2J1cnN0LCBTQ1RQX01B
WF9CVVJTVF9BUFBMSUVEKTsKKwkJCQkJCX0KKwkJCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX21h
eGJ1cnN0cXVldWVkKTsKKwkJCQkJfQorCQkJCQluZXQtPmZhc3RfcmV0cmFuX2lwID0gMDsKKwkJ
CQl9IGVsc2UgeworCQkJCQlpZiAobmV0LT5mbGlnaHRfc2l6ZSA9PSAwKSB7CisJCQkJCQkvKiBT
aG91bGQgYmUgZGVjYXlpbmcgdGhlIGN3bmQgaGVyZSAqLworCQkJCQkJOworCQkJCQl9CisJCQkJ
fQorCQkJfQorCQl9CisJfQorCWJ1cnN0X2NudCA9IDA7CisJZG8geworCQllcnJvciA9IHNjdHBf
bWVkX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIGFzb2MsICZudW1fb3V0LAorCQkJCQkgICAgICAm
cmVhc29uX2NvZGUsIDAsIGZyb21fd2hlcmUsCisJCQkJCSAgICAgICZub3csICZub3dfZmlsbGVk
LCBmcmFnX3BvaW50LCBzb19sb2NrZWQpOworCQlpZiAoZXJyb3IpIHsKKwkJCVNDVFBEQkcoU0NU
UF9ERUJVR19PVVRQVVQxLCAiRXJyb3IgJWQgd2FzIHJldHVybmVkIGZyb20gbWVkLWMtb3BcbiIs
IGVycm9yKTsKKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBT
Q1RQX0xPR19NQVhCVVJTVF9FTkFCTEUpIHsKKwkJCQlzY3RwX2xvZ19tYXhidXJzdChzdGNiLCBh
c29jLT5wcmltYXJ5X2Rlc3RpbmF0aW9uLCBlcnJvciwgYnVyc3RfY250LCBTQ1RQX01BWF9CVVJT
VF9FUlJPUl9TVE9QKTsKKwkJCX0KKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2lu
Z19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQlzY3RwX2xvZ19jd25k
KHN0Y2IsIE5VTEwsIGVycm9yLCBTQ1RQX1NFTkRfTk9XX0NPTVBMRVRFUyk7CisJCQkJc2N0cF9s
b2dfY3duZChzdGNiLCBOVUxMLCAweGRlYWRiZWVmLCBTQ1RQX1NFTkRfTk9XX0NPTVBMRVRFUyk7
CisJCQl9CisJCQlicmVhazsKKwkJfQorCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIm0t
Yy1vIHB1dCBvdXQgJWRcbiIsIG51bV9vdXQpOworCisJCXRvdF9vdXQgKz0gbnVtX291dDsKKwkJ
YnVyc3RfY250Kys7CisJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkg
JiBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpIHsKKwkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgTlVM
TCwgbnVtX291dCwgU0NUUF9TRU5EX05PV19DT01QTEVURVMpOworCQkJaWYgKG51bV9vdXQgPT0g
MCkgeworCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgTlVMTCwgcmVhc29uX2NvZGUsIFNDVFBfU0VO
RF9OT1dfQ09NUExFVEVTKTsKKwkJCX0KKwkJfQorCQlpZiAobmFnbGVfb24pIHsKKwkJCS8qCisJ
CQkgKiBXaGVuIHRoZSBOYWdsZSBhbGdvcml0aG0gaXMgdXNlZCwgbG9vayBhdCBob3cgbXVjaAor
CQkJICogaXMgdW5zZW50LCB0aGVuIGlmIGl0cyBzbWFsbGVyIHRoYW4gYW4gTVRVIGFuZCB3ZQor
CQkJICogaGF2ZSBkYXRhIGluIGZsaWdodCB3ZSBzdG9wLCBleGNlcHQgaWYgd2UgYXJlCisJCQkg
KiBoYW5kbGluZyBhIGZyYWdtZW50ZWQgdXNlciBtZXNzYWdlLgorCQkJICovCisJCQl1bl9zZW50
ID0gc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSAtIHN0Y2ItPmFzb2MudG90YWxf
ZmxpZ2h0OworCQkJaWYgKCh1bl9zZW50IDwgKGludCkoc3RjYi0+YXNvYy5zbWFsbGVzdF9tdHUg
LSBTQ1RQX01JTl9PVkVSSEVBRCkpICYmCisJCQkgICAgKHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0
ID4gMCkpIHsKKy8qCSYmCQkgICAgIHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZM
QUdTX0VYUExJQ0lUX0VPUikpKSB7Ki8KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoVEFJ
TFFfRU1QVFkoJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSkgJiYKKwkJICAgIFRBSUxRX0VNUFRZ
KCZhc29jLT5zZW5kX3F1ZXVlKSAmJgorCQkgICAgc2N0cF9pc190aGVyZV91bnNlbnRfZGF0YShz
dGNiLCBzb19sb2NrZWQpID09IDApIHsKKwkJCS8qIE5vdGhpbmcgbGVmdCB0byBzZW5kICovCisJ
CQlicmVhazsKKwkJfQorCQlpZiAoKHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUg
LSBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCkgPD0gMCkgeworCQkJLyogTm90aGluZyBsZWZ0IHRv
IHNlbmQgKi8KKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAobnVtX291dCAmJgorCSAgICAgICAg
ICgoYXNvYy0+bWF4X2J1cnN0ID09IDApIHx8CisJCSAgU0NUUF9CQVNFX1NZU0NUTChzY3RwX3Vz
ZV9jd25kX2Jhc2VkX21heGJ1cnN0KSB8fAorCQkgIChidXJzdF9jbnQgPCBhc29jLT5tYXhfYnVy
c3QpKSk7CisKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3VzZV9jd25kX2Jhc2VkX21heGJ1
cnN0KSA9PSAwKSB7CisJCWlmICgoYXNvYy0+bWF4X2J1cnN0ID4gMCkgJiYgKGJ1cnN0X2NudCA+
PSBhc29jLT5tYXhfYnVyc3QpKSB7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19tYXhidXJzdHF1
ZXVlZCk7CisJCQlhc29jLT5idXJzdF9saW1pdF9hcHBsaWVkID0gMTsKKwkJCWlmIChTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0xPR19NQVhCVVJTVF9FTkFCTEUp
IHsKKwkJCQlzY3RwX2xvZ19tYXhidXJzdChzdGNiLCBhc29jLT5wcmltYXJ5X2Rlc3RpbmF0aW9u
LCAwLCBidXJzdF9jbnQsIFNDVFBfTUFYX0JVUlNUX0FQUExJRUQpOworCQkJfQorCQl9IGVsc2Ug
eworCQkJYXNvYy0+YnVyc3RfbGltaXRfYXBwbGllZCA9IDA7CisJCX0KKwl9CisJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJM
RSkgeworCQlzY3RwX2xvZ19jd25kKHN0Y2IsIE5VTEwsIHRvdF9vdXQsIFNDVFBfU0VORF9OT1df
Q09NUExFVEVTKTsKKwl9CisJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICJPaywgd2UgaGF2
ZSBwdXQgb3V0ICVkIGNodW5rc1xuIiwKKwkJdG90X291dCk7CisKKwkvKi0KKwkgKiBOb3cgd2Ug
bmVlZCB0byBjbGVhbiB1cCB0aGUgY29udHJvbCBjaHVuayBjaGFpbiBpZiBhIEVDTkUgaXMgb24K
KwkgKiBpdC4gSXQgbXVzdCBiZSBtYXJrZWQgYXMgVU5TRU5UIGFnYWluIHNvIG5leHQgY2FsbCB3
aWxsIGNvbnRpbnVlCisJICogdG8gc2VuZCBpdCB1bnRpbCBzdWNoIHRpbWUgdGhhdCB3ZSBnZXQg
YSBDV1IsIHRvIHJlbW92ZSBpdC4KKwkgKi8KKwlpZiAoc3RjYi0+YXNvYy5lY25fZWNob19jbnRf
b25xKQorCQlzY3RwX2ZpeF9lY25fZWNobyhhc29jKTsKKworCWlmIChzdGNiLT5hc29jLnRyaWdn
ZXJfcmVzZXQpIHsKKwkJaWYgKHNjdHBfc2VuZF9zdHJlYW1fcmVzZXRfb3V0X2lmX3Bvc3NpYmxl
KHN0Y2IsIHNvX2xvY2tlZCkgPT0gMCkgIHsKKwkJCWdvdG8gZG9faXRfYWdhaW47CisJCX0KKwl9
CisJcmV0dXJuOworfQorCitpbnQKK3NjdHBfb3V0cHV0KAorCXN0cnVjdCBzY3RwX2lucGNiICpp
bnAsCisJc3RydWN0IG1idWYgKm0sCisJc3RydWN0IHNvY2thZGRyICphZGRyLAorCXN0cnVjdCBt
YnVmICpjb250cm9sLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisJc3RydWN0IHRocmVhZCAqcCwKKyNlbGlmIGRlZmluZWQoX1dJTjMyKSAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCVBLVEhSRUFEIHAsCisjZWxzZQorI2lmIGRlZmluZWQo
X19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXN0cnVjdCBwcm9jICpwIFND
VFBfVU5VU0VELAorI2Vsc2UKKwlzdHJ1Y3QgcHJvYyAqcCwKKyNlbmRpZgorI2VuZGlmCisJaW50
IGZsYWdzKQoreworCWlmIChpbnAgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BL
VChtLCBpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlOVkFMKTsKKwkJ
cmV0dXJuIChFSU5WQUwpOworCX0KKworCWlmIChpbnAtPnNjdHBfc29ja2V0ID09IE5VTEwpIHsK
KwkJU0NUUF9MVFJBQ0VfRVJSX1JFVF9QS1QobSwgaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9PVVRQVVQsIEVJTlZBTCk7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisJcmV0dXJuIChz
Y3RwX3Nvc2VuZChpbnAtPnNjdHBfc29ja2V0LAorCQkJICAgIGFkZHIsCisJCQkgICAgKHN0cnVj
dCB1aW8gKilOVUxMLAorCQkJICAgIG0sCisJCQkgICAgY29udHJvbCwKKyNpZiBkZWZpbmVkKF9f
QVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCSAgICBmbGFncworI2Vsc2UK
KwkJCSAgICBmbGFncywgcAorI2VuZGlmCisJCQkpKTsKK30KKwordm9pZAorc2VuZF9mb3J3YXJk
X3RzbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCSBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAq
YXNvYykKK3sKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssICphdCwgKnRwMSwgKmxhc3Q7
CisJc3RydWN0IHNjdHBfZm9yd2FyZF90c25fY2h1bmsgKmZ3ZHRzbjsKKwlzdHJ1Y3Qgc2N0cF9z
dHJzZXEgKnN0cnNlcTsKKwlzdHJ1Y3Qgc2N0cF9zdHJzZXFfbWlkICpzdHJzZXFfbTsKKwl1aW50
MzJfdCBhZHZhbmNlX3BlZXJfYWNrX3BvaW50OworCXVuc2lnbmVkIGludCBjbnRfb2Zfc3BhY2Us
IGksIG92aDsKKwl1bnNpZ25lZCBpbnQgc3BhY2VfbmVlZGVkOworCXVuc2lnbmVkIGludCBjbnRf
b2Zfc2tpcHBlZCA9IDA7CisKKwlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKwlUQUlMUV9G
T1JFQUNIKGNoaywgJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJCWlm
IChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0ZPUldBUkRfQ1VNX1RTTikgeworCQkJLyog
bWFyayBpdCB0byB1bnNlbnQgKi8KKwkJCWNoay0+c2VudCA9IFNDVFBfREFUQUdSQU1fVU5TRU5U
OworCQkJY2hrLT5zbmRfY291bnQgPSAwOworCQkJLyogRG8gd2UgY29ycmVjdCBpdHMgb3V0cHV0
IGxvY2F0aW9uPyAqLworCQkJaWYgKGNoay0+d2hvVG8pIHsKKwkJCQlzY3RwX2ZyZWVfcmVtb3Rl
X2FkZHIoY2hrLT53aG9Ubyk7CisJCQkJY2hrLT53aG9UbyA9IE5VTEw7CisJCQl9CisJCQlnb3Rv
IHNjdHBfZmlsbF9pbl9yZXN0OworCQl9CisJfQorCS8qIE9rIGlmIHdlIHJlYWNoIGhlcmUgd2Ug
bXVzdCBidWlsZCBvbmUgKi8KKwlzY3RwX2FsbG9jX2FfY2h1bmsoc3RjYiwgY2hrKTsKKwlpZiAo
Y2hrID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKwlhc29jLT5md2RfdHNuX2NudCsrOworCWNo
ay0+Y29weV9ieV9yZWYgPSAwOworCS8qCisJICogV2UgZG9uJ3QgZG8gdGhlIG9sZCB0aGluZyBo
ZXJlIHNpbmNlCisJICogdGhpcyBpcyB1c2VkIG5vdCBmb3Igb24td2lyZSBidXQgdG8KKwkgKiB0
ZWxsIGlmIHdlIGFyZSBzZW5kaW5nIGEgZndkLXRzbiBieQorCSAqIHRoZSBzdGFjayBkdXJpbmcg
b3V0cHV0LiBBbmQgaWYgaXRzCisJICogYSBJRk9SV0FSRCBvciBhIEZPUldBUkQgaXQgaXMgYSBm
d2QtdHNuLgorCSAqLworCWNoay0+cmVjLmNodW5rX2lkLmlkID0gU0NUUF9GT1JXQVJEX0NVTV9U
U047CisJY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0YSA9IDA7CisJY2hrLT5mbGFncyA9
IDA7CisJY2hrLT5hc29jID0gYXNvYzsKKwljaGstPndob1RvID0gTlVMTDsKKwljaGstPmRhdGEg
PSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coTUNMQllURVMsIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRB
KTsKKwlpZiAoY2hrLT5kYXRhID09IE5VTEwpIHsKKwkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwg
Y2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQlyZXR1cm47CisJfQorCVNDVFBfQlVGX1JFU1Zf
VUYoY2hrLT5kYXRhLCBTQ1RQX01JTl9PVkVSSEVBRCk7CisJY2hrLT5zZW50ID0gU0NUUF9EQVRB
R1JBTV9VTlNFTlQ7CisJY2hrLT5zbmRfY291bnQgPSAwOworCVRBSUxRX0lOU0VSVF9UQUlMKCZh
c29jLT5jb250cm9sX3NlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKKwlhc29jLT5jdHJsX3F1
ZXVlX2NudCsrOworc2N0cF9maWxsX2luX3Jlc3Q6CisJLyotCisJICogSGVyZSB3ZSBnbyB0aHJv
dWdoIGFuZCBmaWxsIG91dCB0aGUgcGFydCB0aGF0IGRlYWxzIHdpdGgKKwkgKiBzdHJlYW0vc2Vx
IG9mIHRoZSBvbmVzIHdlIHNraXAuCisJICovCisJU0NUUF9CVUZfTEVOKGNoay0+ZGF0YSkgPSAw
OworCVRBSUxRX0ZPUkVBQ0goYXQsICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQpIHsKKwkJ
aWYgKChhdC0+c2VudCAhPSBTQ1RQX0ZPUldBUkRfVFNOX1NLSVApICYmCisJCSAgICAoYXQtPnNl
bnQgIT0gU0NUUF9EQVRBR1JBTV9OUl9BQ0tFRCkpIHsKKwkJCS8qIG5vIG1vcmUgdG8gbG9vayBh
dCAqLworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFhc29jLT5pZGF0YV9zdXBwb3J0ZWQgJiYgKGF0
LT5yZWMuZGF0YS5yY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfVU5PUkRFUkVEKSkgeworCQkJLyogV2Ug
ZG9uJ3QgcmVwb3J0IHRoZXNlICovCisJCQljb250aW51ZTsKKwkJfQorCQljbnRfb2Zfc2tpcHBl
ZCsrOworCX0KKwlpZiAoYXNvYy0+aWRhdGFfc3VwcG9ydGVkKSB7CisJCXNwYWNlX25lZWRlZCA9
IChzaXplb2Yoc3RydWN0IHNjdHBfZm9yd2FyZF90c25fY2h1bmspICsKKwkJICAgICAgICAgICAg
ICAgIChjbnRfb2Zfc2tpcHBlZCAqIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJzZXFfbWlkKSkpOwor
CX0gZWxzZSB7CisJCXNwYWNlX25lZWRlZCA9IChzaXplb2Yoc3RydWN0IHNjdHBfZm9yd2FyZF90
c25fY2h1bmspICsKKwkJICAgICAgICAgICAgICAgIChjbnRfb2Zfc2tpcHBlZCAqIHNpemVvZihz
dHJ1Y3Qgc2N0cF9zdHJzZXEpKSk7CisJfQorCWNudF9vZl9zcGFjZSA9ICh1bnNpZ25lZCBpbnQp
TV9UUkFJTElOR1NQQUNFKGNoay0+ZGF0YSk7CisKKwlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSB7CisJCW92aCA9IFNDVFBfTUlOX09WRVJI
RUFEOworCX0gZWxzZSB7CisJCW92aCA9IFNDVFBfTUlOX1Y0X09WRVJIRUFEOworCX0KKwlpZiAo
Y250X29mX3NwYWNlID4gKGFzb2MtPnNtYWxsZXN0X210dSAtIG92aCkpIHsKKwkJLyogdHJpbSB0
byBhIG10dSBzaXplICovCisJCWNudF9vZl9zcGFjZSA9IGFzb2MtPnNtYWxsZXN0X210dSAtIG92
aDsKKwl9CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBf
TE9HX1RSWV9BRFZBTkNFKSB7CisJCXNjdHBfbWlzY19pbnRzKFNDVFBfRldEX1RTTl9DSEVDSywK
KwkJCSAgICAgICAweGZmLCAwLCBjbnRfb2Zfc2tpcHBlZCwKKwkJCSAgICAgICBhc29jLT5hZHZh
bmNlZF9wZWVyX2Fja19wb2ludCk7CisJfQorCWFkdmFuY2VfcGVlcl9hY2tfcG9pbnQgPSBhc29j
LT5hZHZhbmNlZF9wZWVyX2Fja19wb2ludDsKKwlpZiAoY250X29mX3NwYWNlIDwgc3BhY2VfbmVl
ZGVkKSB7CisJCS8qLQorCQkgKiBvayB3ZSBtdXN0IHRyaW0gZG93biB0aGUgY2h1bmsgYnkgbG93
ZXJpbmcgdGhlCisJCSAqIGFkdmFuY2UgcGVlciBhY2sgcG9pbnQuCisJCSAqLworCQlpZiAoU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0dfVFJZX0FEVkFOQ0Up
IHsKKwkJCXNjdHBfbWlzY19pbnRzKFNDVFBfRldEX1RTTl9DSEVDSywKKwkJCQkgICAgICAgMHhm
ZiwgMHhmZiwgY250X29mX3NwYWNlLAorCQkJCSAgICAgICBzcGFjZV9uZWVkZWQpOworCQl9CisJ
CWNudF9vZl9za2lwcGVkID0gY250X29mX3NwYWNlIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Zvcndh
cmRfdHNuX2NodW5rKTsKKwkJaWYgKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCkgeworCQkJY250X29m
X3NraXBwZWQgLz0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cnNlcV9taWQpOworCQl9IGVsc2Ugewor
CQkJY250X29mX3NraXBwZWQgLz0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cnNlcSk7CisJCX0KKwkJ
LyotCisJCSAqIEdvIHRocm91Z2ggYW5kIGZpbmQgdGhlIFRTTiB0aGF0IHdpbGwgYmUgdGhlIG9u
ZQorCQkgKiB3ZSByZXBvcnQuCisJCSAqLworCQlhdCA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zZW50
X3F1ZXVlKTsKKwkJaWYgKGF0ICE9IE5VTEwpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBjbnRfb2Zf
c2tpcHBlZDsgaSsrKSB7CisJCQkJdHAxID0gVEFJTFFfTkVYVChhdCwgc2N0cF9uZXh0KTsKKwkJ
CQlpZiAodHAxID09IE5VTEwpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWF0ID0gdHAxOwor
CQkJfQorCQl9CisJCWlmIChhdCAmJiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZl
bCkgJiBTQ1RQX0xPR19UUllfQURWQU5DRSkgeworCQkJc2N0cF9taXNjX2ludHMoU0NUUF9GV0Rf
VFNOX0NIRUNLLAorCQkJCSAgICAgICAweGZmLCBjbnRfb2Zfc2tpcHBlZCwgYXQtPnJlYy5kYXRh
LnRzbiwKKwkJCQkgICAgICAgYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQpOworCQl9CisJ
CWxhc3QgPSBhdDsKKwkJLyotCisJCSAqIGxhc3Qgbm93IHBvaW50cyB0byBsYXN0IG9uZSBJIGNh
biByZXBvcnQsIHVwZGF0ZQorCQkgKiBwZWVyIGFjayBwb2ludAorCQkgKi8KKwkJaWYgKGxhc3Qp
IHsKKwkJCWFkdmFuY2VfcGVlcl9hY2tfcG9pbnQgPSBsYXN0LT5yZWMuZGF0YS50c247CisJCX0K
KwkJaWYgKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCkgeworCQkJc3BhY2VfbmVlZGVkID0gc2l6ZW9m
KHN0cnVjdCBzY3RwX2ZvcndhcmRfdHNuX2NodW5rKSArCisJCQkgICAgICAgICAgICAgICBjbnRf
b2Zfc2tpcHBlZCAqIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJzZXFfbWlkKTsKKwkJfSBlbHNlIHsK
KwkJCXNwYWNlX25lZWRlZCA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9jaHVuaykg
KworCQkJICAgICAgICAgICAgICAgY250X29mX3NraXBwZWQgKiBzaXplb2Yoc3RydWN0IHNjdHBf
c3Ryc2VxKTsKKwkJfQorCX0KKwljaGstPnNlbmRfc2l6ZSA9IHNwYWNlX25lZWRlZDsKKwkvKiBT
ZXR1cCB0aGUgY2h1bmsgKi8KKwlmd2R0c24gPSBtdG9kKGNoay0+ZGF0YSwgc3RydWN0IHNjdHBf
Zm9yd2FyZF90c25fY2h1bmsgKik7CisJZndkdHNuLT5jaC5jaHVua19sZW5ndGggPSBodG9ucyhj
aGstPnNlbmRfc2l6ZSk7CisJZndkdHNuLT5jaC5jaHVua19mbGFncyA9IDA7CisJaWYgKGFzb2Mt
PmlkYXRhX3N1cHBvcnRlZCkgeworCQlmd2R0c24tPmNoLmNodW5rX3R5cGUgPSBTQ1RQX0lGT1JX
QVJEX0NVTV9UU047CisJfSBlbHNlIHsKKwkJZndkdHNuLT5jaC5jaHVua190eXBlID0gU0NUUF9G
T1JXQVJEX0NVTV9UU047CisJfQorCWZ3ZHRzbi0+bmV3X2N1bXVsYXRpdmVfdHNuID0gaHRvbmwo
YWR2YW5jZV9wZWVyX2Fja19wb2ludCk7CisJU0NUUF9CVUZfTEVOKGNoay0+ZGF0YSkgPSBjaGst
PnNlbmRfc2l6ZTsKKwlmd2R0c24rKzsKKwkvKi0KKwkgKiBNb3ZlIHBvaW50ZXIgdG8gYWZ0ZXIg
dGhlIGZ3ZHRzbiBhbmQgdHJhbnNmZXIgdG8gdGhlCisJICogc3Ryc2VxIHBvaW50ZXIuCisJICov
CisJaWYgKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCkgeworCQlzdHJzZXFfbSA9IChzdHJ1Y3Qgc2N0
cF9zdHJzZXFfbWlkICopZndkdHNuOworCQlzdHJzZXEgPSBOVUxMOworCX0gZWxzZSB7CisJCXN0
cnNlcSA9IChzdHJ1Y3Qgc2N0cF9zdHJzZXEgKilmd2R0c247CisJCXN0cnNlcV9tID0gTlVMTDsK
Kwl9CisJLyotCisJICogTm93IHBvcHVsYXRlIHRoZSBzdHJzZXEgbGlzdC4gVGhpcyBpcyBkb25l
IGJsaW5kbHkKKwkgKiB3aXRob3V0IHB1bGxpbmcgb3V0IGR1cGxpY2F0ZSBzdHJlYW0gaW5mby4g
VGhpcyBpcworCSAqIGluZWZmaWNlbnQgYnV0IHdvbid0IGhhcm0gdGhlIHByb2Nlc3Mgc2luY2Ug
dGhlIHBlZXIgd2lsbAorCSAqIGxvb2sgYXQgdGhlc2UgaW4gc2VxdWVuY2UgYW5kIHdpbGwgdGh1
cyByZWxlYXNlIGFueXRoaW5nLgorCSAqIEl0IGNvdWxkIG1lYW4gd2UgZXhjZWVkIHRoZSBQTVRV
IGFuZCBjaG9wIG9mZiBzb21lIHRoYXQKKwkgKiB3ZSBjb3VsZCBoYXZlIGluY2x1ZGVkLi4gYnV0
IHRoaXMgaXMgdW5saWtlbHkgKGFrYSAxNDMyLzQKKwkgKiB3b3VsZCBtZWFuIDMwMCsgc3RyZWFt
IHNlcSdzIHdvdWxkIGhhdmUgdG8gYmUgcmVwb3J0ZWQgaW4KKwkgKiBvbmUgRldELVRTTi4gV2l0
aCBhIGJpdCBvZiB3b3JrIHdlIGNhbiBsYXRlciBGSVggdGhpcyB0bworCSAqIG9wdGltaXplIGFu
ZCBwdWxsIG91dCBkdXBsaWNhdGVzLi4gYnV0IGl0IGRvZXMgYWRkIG1vcmUKKwkgKiBvdmVyaGVh
ZC4gU28gZm9yIG5vdy4uLiBub3QhCisJICovCisJaSA9IDA7CisJVEFJTFFfRk9SRUFDSChhdCwg
JmFzb2MtPnNlbnRfcXVldWUsIHNjdHBfbmV4dCkgeworCQlpZiAoaSA+PSBjbnRfb2Zfc2tpcHBl
ZCkgeworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFhc29jLT5pZGF0YV9zdXBwb3J0ZWQgJiYgKGF0
LT5yZWMuZGF0YS5yY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfVU5PUkRFUkVEKSkgeworCQkJLyogV2Ug
ZG9uJ3QgcmVwb3J0IHRoZXNlICovCisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoYXQtPnJlYy5k
YXRhLnRzbiA9PSBhZHZhbmNlX3BlZXJfYWNrX3BvaW50KSB7CisJCQlhdC0+cmVjLmRhdGEuZndk
X3Rzbl9jbnQgPSAwOworCQl9CisJCWlmIChhc29jLT5pZGF0YV9zdXBwb3J0ZWQpIHsKKwkJCXN0
cnNlcV9tLT5zaWQgPSBodG9ucyhhdC0+cmVjLmRhdGEuc2lkKTsKKwkJCWlmIChhdC0+cmVjLmRh
dGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX1VOT1JERVJFRCkgeworCQkJCXN0cnNlcV9tLT5mbGFn
cyA9IGh0b25zKFBSX1NDVFBfVU5PUkRFUkVEX0ZMQUcpOworCQkJfSBlbHNlIHsKKwkJCQlzdHJz
ZXFfbS0+ZmxhZ3MgPSAwOworCQkJfQorCQkJc3Ryc2VxX20tPm1pZCA9IGh0b25sKGF0LT5yZWMu
ZGF0YS5taWQpOworCQkJc3Ryc2VxX20rKzsKKwkJfSBlbHNlIHsKKwkJCXN0cnNlcS0+c2lkID0g
aHRvbnMoYXQtPnJlYy5kYXRhLnNpZCk7CisJCQlzdHJzZXEtPnNzbiA9IGh0b25zKCh1aW50MTZf
dClhdC0+cmVjLmRhdGEubWlkKTsKKwkJCXN0cnNlcSsrOworCQl9CisJCWkrKzsKKwl9CisJcmV0
dXJuOworfQorCit2b2lkCitzY3RwX3NlbmRfc2FjayhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGlu
dCBzb19sb2NrZWQpCit7CisJLyotCisJICogUXVldWUgdXAgYSBTQUNLIG9yIE5SLVNBQ0sgaW4g
dGhlIGNvbnRyb2wgcXVldWUuCisJICogV2UgbXVzdCBmaXJzdCBjaGVjayB0byBzZWUgaWYgYSBT
QUNLIG9yIE5SLVNBQ0sgaXMKKwkgKiBzb21laG93IG9uIHRoZSBjb250cm9sIHF1ZXVlLgorCSAq
IElmIHNvLCB3ZSB3aWxsIHRha2UgYW5kIGFuZCByZW1vdmUgdGhlIG9sZCBvbmUuCisJICovCisJ
c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAq
Y2hrLCAqYV9jaGs7CisJc3RydWN0IHNjdHBfc2Fja19jaHVuayAqc2FjazsKKwlzdHJ1Y3Qgc2N0
cF9ucl9zYWNrX2NodW5rICpucl9zYWNrOworCXN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2sgKmdh
cF9kZXNjcmlwdG9yOworCWNvbnN0IHN0cnVjdCBzYWNrX3RyYWNrICpzZWxlY3RvcjsKKwlpbnQg
bWVyZ2VhYmxlID0gMDsKKwlpbnQgb2Zmc2V0OworCWNhZGRyX3QgbGltaXQ7CisJdWludDMyX3Qg
KmR1cDsKKwlpbnQgbGltaXRfcmVhY2hlZCA9IDA7CisJdW5zaWduZWQgaW50IGksIHNpeiwgajsK
Kwl1bnNpZ25lZCBpbnQgbnVtX2dhcF9ibG9ja3MgPSAwLCBudW1fbnJfZ2FwX2Jsb2NrcyA9IDAs
IHNwYWNlOworCWludCBudW1fZHVwcyA9IDA7CisJaW50IHNwYWNlX3JlcTsKKwl1aW50MzJfdCBo
aWdoZXN0X3RzbjsKKwl1aW50OF90IGZsYWdzOworCXVpbnQ4X3QgdHlwZTsKKwl1aW50OF90IHRz
bl9tYXA7CisKKwlpZiAoc3RjYi0+YXNvYy5ucnNhY2tfc3VwcG9ydGVkID09IDEpIHsKKwkJdHlw
ZSA9IFNDVFBfTlJfU0VMRUNUSVZFX0FDSzsKKwl9IGVsc2UgeworCQl0eXBlID0gU0NUUF9TRUxF
Q1RJVkVfQUNLOworCX0KKwlhX2NoayA9IE5VTEw7CisJYXNvYyA9ICZzdGNiLT5hc29jOworCVND
VFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOworCWlmIChhc29jLT5sYXN0X2RhdGFfY2h1bmtfZnJv
bSA9PSBOVUxMKSB7CisJCS8qIEhtbSB3ZSBuZXZlciByZWNlaXZlZCBhbnl0aGluZyAqLworCQly
ZXR1cm47CisJfQorCXNjdHBfc2xpZGVfbWFwcGluZ19hcnJheXMoc3RjYik7CisJc2N0cF9zZXRf
cnduZChzdGNiLCBhc29jKTsKKwlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPmNvbnRyb2xfc2Vu
ZF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJCWlmIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSB0eXBl
KSB7CisJCQkvKiBIbW0sIGZvdW5kIGEgc2FjayBhbHJlYWR5IG9uIHF1ZXVlLCByZW1vdmUgaXQg
Ki8KKwkJCVRBSUxRX1JFTU9WRSgmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBjaGssIHNjdHBf
bmV4dCk7CisJCQlhc29jLT5jdHJsX3F1ZXVlX2NudC0tOworCQkJYV9jaGsgPSBjaGs7CisJCQlp
ZiAoYV9jaGstPmRhdGEpIHsKKwkJCQlzY3RwX21fZnJlZW0oYV9jaGstPmRhdGEpOworCQkJCWFf
Y2hrLT5kYXRhID0gTlVMTDsKKwkJCX0KKwkJCWlmIChhX2Noay0+d2hvVG8pIHsKKwkJCQlzY3Rw
X2ZyZWVfcmVtb3RlX2FkZHIoYV9jaGstPndob1RvKTsKKwkJCQlhX2Noay0+d2hvVG8gPSBOVUxM
OworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGFfY2hrID09IE5VTEwpIHsKKwkJc2N0
cF9hbGxvY19hX2NodW5rKHN0Y2IsIGFfY2hrKTsKKwkJaWYgKGFfY2hrID09IE5VTEwpIHsKKwkJ
CS8qIE5vIG1lbW9yeSBzbyB3ZSBkcm9wIHRoZSBpZGVhLCBhbmQgc2V0IGEgdGltZXIgKi8KKwkJ
CWlmIChzdGNiLT5hc29jLmRlbGF5ZWRfYWNrKSB7CisJCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBf
VElNRVJfVFlQRV9SRUNWLAorCQkJCSAgICAgICAgICAgICAgICBzdGNiLT5zY3RwX2VwLCBzdGNi
LCBOVUxMLAorCQkJCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9PVVRQVVQgKyBTQ1RQ
X0xPQ180KTsKKwkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9SRUNWLAorCQkJ
CSAgICBzdGNiLT5zY3RwX2VwLCBzdGNiLCBOVUxMKTsKKwkJCX0gZWxzZSB7CisJCQkJc3RjYi0+
YXNvYy5zZW5kX3NhY2sgPSAxOworCQkJfQorCQkJcmV0dXJuOworCQl9CisJCWFfY2hrLT5jb3B5
X2J5X3JlZiA9IDA7CisJCWFfY2hrLT5yZWMuY2h1bmtfaWQuaWQgPSB0eXBlOworCQlhX2Noay0+
cmVjLmNodW5rX2lkLmNhbl90YWtlX2RhdGEgPSAxOworCX0KKwkvKiBDbGVhciBvdXIgcGt0IGNv
dW50cyAqLworCWFzb2MtPmRhdGFfcGt0c19zZWVuID0gMDsKKworCWFfY2hrLT5mbGFncyA9IDA7
CisJYV9jaGstPmFzb2MgPSBhc29jOworCWFfY2hrLT5zbmRfY291bnQgPSAwOworCWFfY2hrLT5z
ZW5kX3NpemUgPSAwOwkvKiBmaWxsIGluIGxhdGVyICovCisJYV9jaGstPnNlbnQgPSBTQ1RQX0RB
VEFHUkFNX1VOU0VOVDsKKwlhX2Noay0+d2hvVG8gPSBOVUxMOworCisJaWYgKCEoYXNvYy0+bGFz
dF9kYXRhX2NodW5rX2Zyb20tPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUkVBQ0hBQkxFKSkgewor
CQkvKi0KKwkJICogT2ssIHRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIFNBQ0sgaXMgdW5yZWFjaGFi
bGUsIGxldHMgc2VlIGlmCisJCSAqIHdlIGNhbiBzZWxlY3QgYW4gYWx0ZXJuYXRlIHRvIGFzb2Mt
Pmxhc3RfZGF0YV9jaHVua19mcm9tCisJCSAqLworCQlhX2Noay0+d2hvVG8gPSBzY3RwX2ZpbmRf
YWx0ZXJuYXRlX25ldChzdGNiLCBhc29jLT5sYXN0X2RhdGFfY2h1bmtfZnJvbSwgMCk7CisJCWlm
IChhX2Noay0+d2hvVG8gPT0gTlVMTCkgeworCQkJLyogTm9wZSwgbm8gYWx0ZXJuYXRlICovCisJ
CQlhX2Noay0+d2hvVG8gPSBhc29jLT5sYXN0X2RhdGFfY2h1bmtfZnJvbTsKKwkJfQorCX0gZWxz
ZSB7CisJCWFfY2hrLT53aG9UbyA9IGFzb2MtPmxhc3RfZGF0YV9jaHVua19mcm9tOworCX0KKwlp
ZiAoYV9jaGstPndob1RvKSB7CisJCWF0b21pY19hZGRfaW50KCZhX2Noay0+d2hvVG8tPnJlZl9j
b3VudCwgMSk7CisJfQorCWlmIChTQ1RQX1RTTl9HVChhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVf
bWFwLCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwKSkgeworCQloaWdoZXN0X3RzbiA9
IGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXA7CisJfSBlbHNlIHsKKwkJaGlnaGVzdF90c24g
PSBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwOworCX0KKwlpZiAoaGlnaGVzdF90c24g
PT0gYXNvYy0+Y3VtdWxhdGl2ZV90c24pIHsKKwkJLyogbm8gZ2FwcyAqLworCQlpZiAodHlwZSA9
PSBTQ1RQX1NFTEVDVElWRV9BQ0spIHsKKwkJCXNwYWNlX3JlcSA9IHNpemVvZihzdHJ1Y3Qgc2N0
cF9zYWNrX2NodW5rKTsKKwkJfSBlbHNlIHsKKwkJCXNwYWNlX3JlcSA9IHNpemVvZihzdHJ1Y3Qg
c2N0cF9ucl9zYWNrX2NodW5rKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGdhcHMgZ2V0IGEgY2x1
c3RlciAqLworCQlzcGFjZV9yZXEgPSBNQ0xCWVRFUzsKKwl9CisJLyogT2sgbm93IGxldHMgZm9y
bXVsYXRlIGEgTUJVRiB3aXRoIG91ciBzYWNrICovCisJYV9jaGstPmRhdGEgPSBzY3RwX2dldF9t
YnVmX2Zvcl9tc2coc3BhY2VfcmVxLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJaWYgKChh
X2Noay0+ZGF0YSA9PSBOVUxMKSB8fAorCSAgICAoYV9jaGstPndob1RvID09IE5VTEwpKSB7CisJ
CS8qIHJhdHMsIG5vIG1idWYgbWVtb3J5ICovCisJCWlmIChhX2Noay0+ZGF0YSkgeworCQkJLyog
d2FzIGEgcHJvYmxlbSB3aXRoIHRoZSBkZXN0aW5hdGlvbiAqLworCQkJc2N0cF9tX2ZyZWVtKGFf
Y2hrLT5kYXRhKTsKKwkJCWFfY2hrLT5kYXRhID0gTlVMTDsKKwkJfQorCQlzY3RwX2ZyZWVfYV9j
aHVuayhzdGNiLCBhX2Noaywgc29fbG9ja2VkKTsKKwkJLyogc2FfaWdub3JlIE5PX05VTExfQ0hL
ICovCisJCWlmIChzdGNiLT5hc29jLmRlbGF5ZWRfYWNrKSB7CisJCQlzY3RwX3RpbWVyX3N0b3Ao
U0NUUF9USU1FUl9UWVBFX1JFQ1YsCisJCQkgICAgICAgICAgICAgICAgc3RjYi0+c2N0cF9lcCwg
c3RjYiwgTlVMTCwKKwkJCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9PVVRQVVQgKyBT
Q1RQX0xPQ181KTsKKwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1JFQ1YsCisJ
CQkgICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQlzdGNiLT5h
c29jLnNlbmRfc2FjayA9IDE7CisJCX0KKwkJcmV0dXJuOworCX0KKwkvKiBvaywgbGV0cyBnbyB0
aHJvdWdoIGFuZCBmaWxsIGl0IGluICovCisJU0NUUF9CVUZfUkVTVl9VRihhX2Noay0+ZGF0YSwg
U0NUUF9NSU5fT1ZFUkhFQUQpOworCXNwYWNlID0gKHVuc2lnbmVkIGludClNX1RSQUlMSU5HU1BB
Q0UoYV9jaGstPmRhdGEpOworCWlmIChzcGFjZSA+IChhX2Noay0+d2hvVG8tPm10dSAtIFNDVFBf
TUlOX09WRVJIRUFEKSkgeworCQlzcGFjZSA9IChhX2Noay0+d2hvVG8tPm10dSAtIFNDVFBfTUlO
X09WRVJIRUFEKTsKKwl9CisJbGltaXQgPSBtdG9kKGFfY2hrLT5kYXRhLCBjYWRkcl90KTsKKwls
aW1pdCArPSBzcGFjZTsKKworCWZsYWdzID0gMDsKKworCWlmICgoYXNvYy0+c2N0cF9jbXRfb25f
b2ZmID4gMCkgJiYKKwkgICAgU0NUUF9CQVNFX1NZU0NUTChzY3RwX2NtdF91c2VfZGFjKSkgewor
CQkvKi0KKwkJICogQ01UIERBQyBhbGdvcml0aG06IElmIDIgKGkuZS4sIDB4MTApIHBhY2tldHMg
aGF2ZSBiZWVuCisJCSAqIHJlY2VpdmVkLCB0aGVuIHNldCBoaWdoIGJpdCB0byAxLCBlbHNlIDAu
IFJlc2V0CisJCSAqIHBrdHNfcmN2ZC4KKwkJICovCisJCWZsYWdzIHw9IChhc29jLT5jbXRfZGFj
X3BrdHNfcmN2ZCA8PCA2KTsKKwkJYXNvYy0+Y210X2RhY19wa3RzX3JjdmQgPSAwOworCX0KKyNp
ZmRlZiBTQ1RQX0FTT0NMT0dfT0ZfVFNOUworCXN0Y2ItPmFzb2MuY3VtYWNrX2xvZ3NudFtzdGNi
LT5hc29jLmN1bWFja19sb2dfYXRzbnRdID0gYXNvYy0+Y3VtdWxhdGl2ZV90c247CisJc3RjYi0+
YXNvYy5jdW1hY2tfbG9nX2F0c250Kys7CisJaWYgKHN0Y2ItPmFzb2MuY3VtYWNrX2xvZ19hdHNu
dCA+PSBTQ1RQX1RTTl9MT0dfU0laRSkgeworCQlzdGNiLT5hc29jLmN1bWFja19sb2dfYXRzbnQg
PSAwOworCX0KKyNlbmRpZgorCS8qIHJlc2V0IHRoZSByZWFkZXJzIGludGVycHJldGF0aW9uICov
CisJc3RjYi0+ZnJlZWRfYnlfc29yY3Zfc2luY2VsYXN0ID0gMDsKKworCWlmICh0eXBlID09IFND
VFBfU0VMRUNUSVZFX0FDSykgeworCQlzYWNrID0gbXRvZChhX2Noay0+ZGF0YSwgc3RydWN0IHNj
dHBfc2Fja19jaHVuayAqKTsKKwkJbnJfc2FjayA9IE5VTEw7CisJCWdhcF9kZXNjcmlwdG9yID0g
KHN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2sgKikoKGNhZGRyX3Qpc2FjayArIHNpemVvZihzdHJ1
Y3Qgc2N0cF9zYWNrX2NodW5rKSk7CisJCWlmIChoaWdoZXN0X3RzbiA+IGFzb2MtPm1hcHBpbmdf
YXJyYXlfYmFzZV90c24pIHsKKwkJCXNpeiA9ICgoKGhpZ2hlc3RfdHNuIC0gYXNvYy0+bWFwcGlu
Z19hcnJheV9iYXNlX3RzbikgKyAxKSArIDcpIC8gODsKKwkJfSBlbHNlIHsKKwkJCXNpeiA9ICgo
KE1BWF9UU04gLSBhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuKSArIDEpICsgaGlnaGVzdF90
c24gKyA3KSAvIDg7CisJCX0KKwl9IGVsc2UgeworCQlzYWNrID0gTlVMTDsKKwkJbnJfc2FjayA9
IG10b2QoYV9jaGstPmRhdGEsIHN0cnVjdCBzY3RwX25yX3NhY2tfY2h1bmsgKik7CisJCWdhcF9k
ZXNjcmlwdG9yID0gKHN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2sgKikoKGNhZGRyX3QpbnJfc2Fj
ayArIHNpemVvZihzdHJ1Y3Qgc2N0cF9ucl9zYWNrX2NodW5rKSk7CisJCWlmIChhc29jLT5oaWdo
ZXN0X3Rzbl9pbnNpZGVfbWFwID4gYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbikgeworCQkJ
c2l6ID0gKCgoYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCAtIGFzb2MtPm1hcHBpbmdfYXJy
YXlfYmFzZV90c24pICsgMSkgKyA3KSAvIDg7CisJCX0gZWxzZSB7CisJCQlzaXogPSAoKChNQVhf
VFNOIC0gYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbikgKyAxKSArIGFzb2MtPmhpZ2hlc3Rf
dHNuX2luc2lkZV9tYXAgKyA3KSAvIDg7CisJCX0KKwl9CisKKwlpZiAoU0NUUF9UU05fR1QoYXNv
Yy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbiwgYXNvYy0+Y3VtdWxhdGl2ZV90c24pKSB7CisJCW9m
ZnNldCA9IDE7CisJfSBlbHNlIHsKKwkJb2Zmc2V0ID0gYXNvYy0+bWFwcGluZ19hcnJheV9iYXNl
X3RzbiAtIGFzb2MtPmN1bXVsYXRpdmVfdHNuOworCX0KKwlpZiAoKCh0eXBlID09IFNDVFBfU0VM
RUNUSVZFX0FDSykgJiYKKwkgICAgIFNDVFBfVFNOX0dUKGhpZ2hlc3RfdHNuLCBhc29jLT5jdW11
bGF0aXZlX3RzbikpIHx8CisJICAgICgodHlwZSA9PSBTQ1RQX05SX1NFTEVDVElWRV9BQ0spICYm
CisJICAgICBTQ1RQX1RTTl9HVChhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwLCBhc29jLT5j
dW11bGF0aXZlX3RzbikpKSB7CisJCS8qIHdlIGhhdmUgYSBnYXAgLi4gbWF5YmUgKi8KKwkJZm9y
IChpID0gMDsgaSA8IHNpejsgaSsrKSB7CisJCQl0c25fbWFwID0gYXNvYy0+bWFwcGluZ19hcnJh
eVtpXTsKKwkJCWlmICh0eXBlID09IFNDVFBfU0VMRUNUSVZFX0FDSykgeworCQkJCXRzbl9tYXAg
fD0gYXNvYy0+bnJfbWFwcGluZ19hcnJheVtpXTsKKwkJCX0KKwkJCWlmIChpID09IDApIHsKKwkJ
CQkvKgorCQkJCSAqIENsZWFyIGFsbCBiaXRzIGNvcnJlc3BvbmRpbmcgdG8gVFNOcworCQkJCSAq
IHNtYWxsZXIgb3IgZXF1YWwgdG8gdGhlIGN1bXVsYXRpdmUgVFNOLgorCQkJCSAqLworCQkJCXRz
bl9tYXAgJj0gKH4wVSA8PCAoMSAtIG9mZnNldCkpOworCQkJfQorCQkJc2VsZWN0b3IgPSAmc2Fj
a19hcnJheVt0c25fbWFwXTsKKwkJCWlmIChtZXJnZWFibGUgJiYgc2VsZWN0b3ItPnJpZ2h0X2Vk
Z2UpIHsKKwkJCQkvKgorCQkJCSAqIEJhY2t1cCwgbGVmdCBhbmQgcmlnaHQgZWRnZXMgd2VyZSBv
ayB0bworCQkJCSAqIG1lcmdlLgorCQkJCSAqLworCQkJCW51bV9nYXBfYmxvY2tzLS07CisJCQkJ
Z2FwX2Rlc2NyaXB0b3ItLTsKKwkJCX0KKwkJCWlmIChzZWxlY3Rvci0+bnVtX2VudHJpZXMgPT0g
MCkKKwkJCQltZXJnZWFibGUgPSAwOworCQkJZWxzZSB7CisJCQkJZm9yIChqID0gMDsgaiA8IHNl
bGVjdG9yLT5udW1fZW50cmllczsgaisrKSB7CisJCQkJCWlmIChtZXJnZWFibGUgJiYgc2VsZWN0
b3ItPnJpZ2h0X2VkZ2UpIHsKKwkJCQkJCS8qCisJCQkJCQkgKiBkbyBhIG1lcmdlIGJ5IE5PVCBz
ZXR0aW5nCisJCQkJCQkgKiB0aGUgbGVmdCBzaWRlCisJCQkJCQkgKi8KKwkJCQkJCW1lcmdlYWJs
ZSA9IDA7CisJCQkJCX0gZWxzZSB7CisJCQkJCQkvKgorCQkJCQkJICogbm8gbWVyZ2UsIHNldCB0
aGUgbGVmdAorCQkJCQkJICogc2lkZQorCQkJCQkJICovCisJCQkJCQltZXJnZWFibGUgPSAwOwor
CQkJCQkJZ2FwX2Rlc2NyaXB0b3ItPnN0YXJ0ID0gaHRvbnMoKHNlbGVjdG9yLT5nYXBzW2pdLnN0
YXJ0ICsgb2Zmc2V0KSk7CisJCQkJCX0KKwkJCQkJZ2FwX2Rlc2NyaXB0b3ItPmVuZCA9IGh0b25z
KChzZWxlY3Rvci0+Z2Fwc1tqXS5lbmQgKyBvZmZzZXQpKTsKKwkJCQkJbnVtX2dhcF9ibG9ja3Mr
KzsKKwkJCQkJZ2FwX2Rlc2NyaXB0b3IrKzsKKwkJCQkJaWYgKCgoY2FkZHJfdClnYXBfZGVzY3Jp
cHRvciArIHNpemVvZihzdHJ1Y3Qgc2N0cF9nYXBfYWNrX2Jsb2NrKSkgPiBsaW1pdCkgeworCQkJ
CQkJLyogbm8gbW9yZSByb29tICovCisJCQkJCQlsaW1pdF9yZWFjaGVkID0gMTsKKwkJCQkJCWJy
ZWFrOworCQkJCQl9CisJCQkJfQorCQkJCWlmIChzZWxlY3Rvci0+bGVmdF9lZGdlKSB7CisJCQkJ
CW1lcmdlYWJsZSA9IDE7CisJCQkJfQorCQkJfQorCQkJaWYgKGxpbWl0X3JlYWNoZWQpIHsKKwkJ
CQkvKiBSZWFjaGVkIHRoZSBsaW1pdCBzdG9wICovCisJCQkJYnJlYWs7CisJCQl9CisJCQlvZmZz
ZXQgKz0gODsKKwkJfQorCX0KKwlpZiAoKHR5cGUgPT0gU0NUUF9OUl9TRUxFQ1RJVkVfQUNLKSAm
JgorCSAgICAobGltaXRfcmVhY2hlZCA9PSAwKSkgeworCQltZXJnZWFibGUgPSAwOworCisJCWlm
IChhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwID4gYXNvYy0+bWFwcGluZ19hcnJheV9i
YXNlX3RzbikgeworCQkJc2l6ID0gKCgoYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCAt
IGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24pICsgMSkgKyA3KSAvIDg7CisJCX0gZWxzZSB7
CisJCQlzaXogPSAoKChNQVhfVFNOIC0gYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbikgKyAx
KSArIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXAgKyA3KSAvIDg7CisJCX0KKworCQlp
ZiAoU0NUUF9UU05fR1QoYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbiwgYXNvYy0+Y3VtdWxh
dGl2ZV90c24pKSB7CisJCQlvZmZzZXQgPSAxOworCQl9IGVsc2UgeworCQkJb2Zmc2V0ID0gYXNv
Yy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbiAtIGFzb2MtPmN1bXVsYXRpdmVfdHNuOworCQl9CisJ
CWlmIChTQ1RQX1RTTl9HVChhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwLCBhc29jLT5j
dW11bGF0aXZlX3RzbikpIHsKKwkJCS8qIHdlIGhhdmUgYSBnYXAgLi4gbWF5YmUgKi8KKwkJCWZv
ciAoaSA9IDA7IGkgPCBzaXo7IGkrKykgeworCQkJCXRzbl9tYXAgPSBhc29jLT5ucl9tYXBwaW5n
X2FycmF5W2ldOworCQkJCWlmIChpID09IDApIHsKKwkJCQkJLyoKKwkJCQkJICogQ2xlYXIgYWxs
IGJpdHMgY29ycmVzcG9uZGluZyB0byBUU05zCisJCQkJCSAqIHNtYWxsZXIgb3IgZXF1YWwgdG8g
dGhlIGN1bXVsYXRpdmUgVFNOLgorCQkJCQkgKi8KKwkJCQkJdHNuX21hcCAmPSAofjBVIDw8ICgx
IC0gb2Zmc2V0KSk7CisJCQkJfQorCQkJCXNlbGVjdG9yID0gJnNhY2tfYXJyYXlbdHNuX21hcF07
CisJCQkJaWYgKG1lcmdlYWJsZSAmJiBzZWxlY3Rvci0+cmlnaHRfZWRnZSkgeworCQkJCQkvKgor
CQkJCQkqIEJhY2t1cCwgbGVmdCBhbmQgcmlnaHQgZWRnZXMgd2VyZSBvayB0bworCQkJCQkqIG1l
cmdlLgorCQkJCQkqLworCQkJCQludW1fbnJfZ2FwX2Jsb2Nrcy0tOworCQkJCQlnYXBfZGVzY3Jp
cHRvci0tOworCQkJCX0KKwkJCQlpZiAoc2VsZWN0b3ItPm51bV9lbnRyaWVzID09IDApCisJCQkJ
CW1lcmdlYWJsZSA9IDA7CisJCQkJZWxzZSB7CisJCQkJCWZvciAoaiA9IDA7IGogPCBzZWxlY3Rv
ci0+bnVtX2VudHJpZXM7IGorKykgeworCQkJCQkJaWYgKG1lcmdlYWJsZSAmJiBzZWxlY3Rvci0+
cmlnaHRfZWRnZSkgeworCQkJCQkJCS8qCisJCQkJCQkJKiBkbyBhIG1lcmdlIGJ5IE5PVCBzZXR0
aW5nCisJCQkJCQkJKiB0aGUgbGVmdCBzaWRlCisJCQkJCQkJKi8KKwkJCQkJCQltZXJnZWFibGUg
PSAwOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkvKgorCQkJCQkJCSogbm8gbWVyZ2UsIHNldCB0
aGUgbGVmdAorCQkJCQkJCSogc2lkZQorCQkJCQkJCSovCisJCQkJCQkJbWVyZ2VhYmxlID0gMDsK
KwkJCQkJCQlnYXBfZGVzY3JpcHRvci0+c3RhcnQgPSBodG9ucygoc2VsZWN0b3ItPmdhcHNbal0u
c3RhcnQgKyBvZmZzZXQpKTsKKwkJCQkJCX0KKwkJCQkJCWdhcF9kZXNjcmlwdG9yLT5lbmQgPSBo
dG9ucygoc2VsZWN0b3ItPmdhcHNbal0uZW5kICsgb2Zmc2V0KSk7CisJCQkJCQludW1fbnJfZ2Fw
X2Jsb2NrcysrOworCQkJCQkJZ2FwX2Rlc2NyaXB0b3IrKzsKKwkJCQkJCWlmICgoKGNhZGRyX3Qp
Z2FwX2Rlc2NyaXB0b3IgKyBzaXplb2Yoc3RydWN0IHNjdHBfZ2FwX2Fja19ibG9jaykpID4gbGlt
aXQpIHsKKwkJCQkJCQkvKiBubyBtb3JlIHJvb20gKi8KKwkJCQkJCQlsaW1pdF9yZWFjaGVkID0g
MTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlpZiAoc2VsZWN0b3ItPmxl
ZnRfZWRnZSkgeworCQkJCQkJbWVyZ2VhYmxlID0gMTsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAo
bGltaXRfcmVhY2hlZCkgeworCQkJCQkvKiBSZWFjaGVkIHRoZSBsaW1pdCBzdG9wICovCisJCQkJ
CWJyZWFrOworCQkJCX0KKwkJCQlvZmZzZXQgKz0gODsKKwkJCX0KKwkJfQorCX0KKwkvKiBub3cg
d2UgbXVzdCBhZGQgYW55IGR1cHMgd2UgYXJlIGdvaW5nIHRvIHJlcG9ydC4gKi8KKwlpZiAoKGxp
bWl0X3JlYWNoZWQgPT0gMCkgJiYgKGFzb2MtPm51bWR1cHRzbnMpKSB7CisJCWR1cCA9ICh1aW50
MzJfdCAqKSBnYXBfZGVzY3JpcHRvcjsKKwkJZm9yIChpID0gMDsgaSA8IGFzb2MtPm51bWR1cHRz
bnM7IGkrKykgeworCQkJKmR1cCA9IGh0b25sKGFzb2MtPmR1cF90c25zW2ldKTsKKwkJCWR1cCsr
OworCQkJbnVtX2R1cHMrKzsKKwkJCWlmICgoKGNhZGRyX3QpZHVwICsgc2l6ZW9mKHVpbnQzMl90
KSkgPiBsaW1pdCkgeworCQkJCS8qIG5vIG1vcmUgcm9vbSAqLworCQkJCWJyZWFrOworCQkJfQor
CQl9CisJCWFzb2MtPm51bWR1cHRzbnMgPSAwOworCX0KKwkvKgorCSAqIG5vdyB0aGF0IHRoZSBj
aHVuayBpcyBwcmVwYXJlZCBxdWV1ZSBpdCB0byB0aGUgY29udHJvbCBjaHVuaworCSAqIHF1ZXVl
LgorCSAqLworCWlmICh0eXBlID09IFNDVFBfU0VMRUNUSVZFX0FDSykgeworCQlhX2Noay0+c2Vu
ZF9zaXplID0gKHVpbnQxNl90KShzaXplb2Yoc3RydWN0IHNjdHBfc2Fja19jaHVuaykgKworCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVtX2dhcF9ibG9ja3MgKyBudW1fbnJfZ2Fw
X2Jsb2NrcykgKiBzaXplb2Yoc3RydWN0IHNjdHBfZ2FwX2Fja19ibG9jaykgKworCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBudW1fZHVwcyAqIHNpemVvZihpbnQzMl90KSk7CisJCVND
VFBfQlVGX0xFTihhX2Noay0+ZGF0YSkgPSBhX2Noay0+c2VuZF9zaXplOworCQlzYWNrLT5zYWNr
LmN1bV90c25fYWNrID0gaHRvbmwoYXNvYy0+Y3VtdWxhdGl2ZV90c24pOworCQlzYWNrLT5zYWNr
LmFfcnduZCA9IGh0b25sKGFzb2MtPm15X3J3bmQpOworCQlzYWNrLT5zYWNrLm51bV9nYXBfYWNr
X2Jsa3MgPSBodG9ucyhudW1fZ2FwX2Jsb2Nrcyk7CisJCXNhY2stPnNhY2subnVtX2R1cF90c25z
ID0gaHRvbnMobnVtX2R1cHMpOworCQlzYWNrLT5jaC5jaHVua190eXBlID0gdHlwZTsKKwkJc2Fj
ay0+Y2guY2h1bmtfZmxhZ3MgPSBmbGFnczsKKwkJc2Fjay0+Y2guY2h1bmtfbGVuZ3RoID0gaHRv
bnMoYV9jaGstPnNlbmRfc2l6ZSk7CisJfSBlbHNlIHsKKwkJYV9jaGstPnNlbmRfc2l6ZSA9ICh1
aW50MTZfdCkoc2l6ZW9mKHN0cnVjdCBzY3RwX25yX3NhY2tfY2h1bmspICsKKwkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKG51bV9nYXBfYmxvY2tzICsgbnVtX25yX2dhcF9ibG9ja3Mp
ICogc2l6ZW9mKHN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2spICsKKwkJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnVtX2R1cHMgKiBzaXplb2YoaW50MzJfdCkpOworCQlTQ1RQX0JVRl9M
RU4oYV9jaGstPmRhdGEpID0gYV9jaGstPnNlbmRfc2l6ZTsKKwkJbnJfc2Fjay0+bnJfc2Fjay5j
dW1fdHNuX2FjayA9IGh0b25sKGFzb2MtPmN1bXVsYXRpdmVfdHNuKTsKKwkJbnJfc2Fjay0+bnJf
c2Fjay5hX3J3bmQgPSBodG9ubChhc29jLT5teV9yd25kKTsKKwkJbnJfc2Fjay0+bnJfc2Fjay5u
dW1fZ2FwX2Fja19ibGtzID0gaHRvbnMobnVtX2dhcF9ibG9ja3MpOworCQlucl9zYWNrLT5ucl9z
YWNrLm51bV9ucl9nYXBfYWNrX2Jsa3MgPSBodG9ucyhudW1fbnJfZ2FwX2Jsb2Nrcyk7CisJCW5y
X3NhY2stPm5yX3NhY2subnVtX2R1cF90c25zID0gaHRvbnMobnVtX2R1cHMpOworCQlucl9zYWNr
LT5ucl9zYWNrLnJlc2VydmVkID0gMDsKKwkJbnJfc2Fjay0+Y2guY2h1bmtfdHlwZSA9IHR5cGU7
CisJCW5yX3NhY2stPmNoLmNodW5rX2ZsYWdzID0gZmxhZ3M7CisJCW5yX3NhY2stPmNoLmNodW5r
X2xlbmd0aCA9IGh0b25zKGFfY2hrLT5zZW5kX3NpemUpOworCX0KKwlUQUlMUV9JTlNFUlRfVEFJ
TCgmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBhX2Noaywgc2N0cF9uZXh0KTsKKwlhc29jLT5t
eV9sYXN0X3JlcG9ydGVkX3J3bmQgPSBhc29jLT5teV9yd25kOworCWFzb2MtPmN0cmxfcXVldWVf
Y250Kys7CisJYXNvYy0+c2VuZF9zYWNrID0gMDsKKwlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5k
c2Fja3MpOworCXJldHVybjsKK30KKwordm9pZAorc2N0cF9zZW5kX2Fib3J0X3RjYihzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBtYnVmICpvcGVyciwgaW50IHNvX2xvY2tlZCkKK3sKKwlz
dHJ1Y3QgbWJ1ZiAqbV9hYm9ydCwgKm0sICptX2xhc3Q7CisJc3RydWN0IG1idWYgKm1fb3V0LCAq
bV9lbmQgPSBOVUxMOworCXN0cnVjdCBzY3RwX2Fib3J0X2NodW5rICphYm9ydDsKKwlzdHJ1Y3Qg
c2N0cF9hdXRoX2NodW5rICphdXRoID0gTlVMTDsKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJ
dWludDMyX3QgdnRhZzsKKwl1aW50MzJfdCBhdXRoX29mZnNldCA9IDA7CisJaW50IGVycm9yOwor
CXVpbnQxNl90IGNhdXNlX2xlbiwgY2h1bmtfbGVuLCBwYWRkaW5nX2xlbjsKKworI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWlmIChzb19sb2NrZWQp
IHsKKwkJc2N0cF9sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKSk7CisJfSBl
bHNlIHsKKwkJc2N0cF91bmxvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApKTsK
Kwl9CisjZW5kaWYKKwlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKwkvKi0KKwkgKiBBZGQg
YW4gQVVUSCBjaHVuaywgaWYgY2h1bmsgcmVxdWlyZXMgaXQgYW5kIHNhdmUgdGhlIG9mZnNldCBp
bnRvCisJICogdGhlIGNoYWluIGZvciBBVVRICisJICovCisJaWYgKHNjdHBfYXV0aF9pc19yZXF1
aXJlZF9jaHVuayhTQ1RQX0FCT1JUX0FTU09DSUFUSU9OLAorCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RjYi0+YXNvYy5wZWVyX2F1dGhfY2h1bmtzKSkgeworCQltX291dCA9IHNj
dHBfYWRkX2F1dGhfY2h1bmsoTlVMTCwgJm1fZW5kLCAmYXV0aCwgJmF1dGhfb2Zmc2V0LAorCQkJ
CQkgICAgc3RjYiwgU0NUUF9BQk9SVF9BU1NPQ0lBVElPTik7CisJCVNDVFBfU1RBVF9JTkNSX0NP
VU5URVI2NChzY3Rwc19vdXRjb250cm9sY2h1bmtzKTsKKwl9IGVsc2UgeworCQltX291dCA9IE5V
TEw7CisJfQorCW1fYWJvcnQgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc2l6ZW9mKHN0cnVjdCBz
Y3RwX2Fib3J0X2NodW5rKSwgMCwgTV9OT1dBSVQsIDEsIE1UX0hFQURFUik7CisJaWYgKG1fYWJv
cnQgPT0gTlVMTCkgeworCQlpZiAobV9vdXQpIHsKKwkJCXNjdHBfbV9mcmVlbShtX291dCk7CisJ
CX0KKwkJaWYgKG9wZXJyKSB7CisJCQlzY3RwX21fZnJlZW0ob3BlcnIpOworCQl9CisJCXJldHVy
bjsKKwl9CisJLyogbGluayBpbiBhbnkgZXJyb3IgKi8KKwlTQ1RQX0JVRl9ORVhUKG1fYWJvcnQp
ID0gb3BlcnI7CisJY2F1c2VfbGVuID0gMDsKKwltX2xhc3QgPSBOVUxMOworCWZvciAobSA9IG9w
ZXJyOyBtOyBtID0gU0NUUF9CVUZfTkVYVChtKSkgeworCQljYXVzZV9sZW4gKz0gKHVpbnQxNl90
KVNDVFBfQlVGX0xFTihtKTsKKwkJaWYgKFNDVFBfQlVGX05FWFQobSkgPT0gTlVMTCkgeworCQkJ
bV9sYXN0ID0gbTsKKwkJfQorCX0KKwlTQ1RQX0JVRl9MRU4obV9hYm9ydCkgPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfYWJvcnRfY2h1bmspOworCWNodW5rX2xlbiA9ICh1aW50MTZfdClzaXplb2Yoc3Ry
dWN0IHNjdHBfYWJvcnRfY2h1bmspICsgY2F1c2VfbGVuOworCXBhZGRpbmdfbGVuID0gU0NUUF9T
SVpFMzIoY2h1bmtfbGVuKSAtIGNodW5rX2xlbjsKKwlpZiAobV9vdXQgPT0gTlVMTCkgeworCQkv
KiBOTyBBdXRoIGNodW5rIHByZXBlbmRlZCwgc28gcmVzZXJ2ZSBzcGFjZSBpbiBmcm9udCAqLwor
CQlTQ1RQX0JVRl9SRVNWX1VGKG1fYWJvcnQsIFNDVFBfTUlOX09WRVJIRUFEKTsKKwkJbV9vdXQg
PSBtX2Fib3J0OworCX0gZWxzZSB7CisJCS8qIFB1dCBBVVRIIGNodW5rIGF0IHRoZSBmcm9udCBv
ZiB0aGUgY2hhaW4gKi8KKwkJU0NUUF9CVUZfTkVYVChtX2VuZCkgPSBtX2Fib3J0OworCX0KKwlp
ZiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsKKwkJbmV0ID0gc3RjYi0+YXNvYy5hbHRlcm5hdGU7
CisJfSBlbHNlIHsKKwkJbmV0ID0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uOworCX0K
KwkvKiBGaWxsIGluIHRoZSBBQk9SVCBjaHVuayBoZWFkZXIuICovCisJYWJvcnQgPSBtdG9kKG1f
YWJvcnQsIHN0cnVjdCBzY3RwX2Fib3J0X2NodW5rICopOworCWFib3J0LT5jaC5jaHVua190eXBl
ID0gU0NUUF9BQk9SVF9BU1NPQ0lBVElPTjsKKwlpZiAoc3RjYi0+YXNvYy5wZWVyX3Z0YWcgPT0g
MCkgeworCQkvKiBUaGlzIGhhcHBlbnMgaWZmIHRoZSBhc3NvYyBpcyBpbiBDT09LSUUtV0FJVCBz
dGF0ZS4gKi8KKwkJdnRhZyA9IHN0Y2ItPmFzb2MubXlfdnRhZzsKKwkJYWJvcnQtPmNoLmNodW5r
X2ZsYWdzID0gU0NUUF9IQURfTk9fVENCOworCX0gZWxzZSB7CisJCXZ0YWcgPSBzdGNiLT5hc29j
LnBlZXJfdnRhZzsKKwkJYWJvcnQtPmNoLmNodW5rX2ZsYWdzID0gMDsKKwl9CisJYWJvcnQtPmNo
LmNodW5rX2xlbmd0aCA9IGh0b25zKGNodW5rX2xlbik7CisJLyogQWRkIHBhZGRpbmcsIGlmIG5l
Y2Vzc2FyeS4gKi8KKwlpZiAocGFkZGluZ19sZW4gPiAwKSB7CisJCWlmICgobV9sYXN0ID09IE5V
TEwpIHx8CisJCSAgICAoc2N0cF9hZGRfcGFkX3RvbWJ1ZihtX2xhc3QsIHBhZGRpbmdfbGVuKSA9
PSBOVUxMKSkgeworCQkJc2N0cF9tX2ZyZWVtKG1fb3V0KTsKKwkJCXJldHVybjsKKwkJfQorCX0K
KwlpZiAoKGVycm9yID0gc2N0cF9sb3dsZXZlbF9jaHVua19vdXRwdXQoc3RjYi0+c2N0cF9lcCwg
c3RjYiwgbmV0LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3Ry
dWN0IHNvY2thZGRyICopJm5ldC0+cm8uX2xfYWRkciwKKwkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9vdXQsIGF1dGhfb2Zmc2V0LCBhdXRoLCBzdGNiLT5hc29jLmF1
dGhpbmZvLmFjdGl2ZV9rZXlpZCwgMSwgMCwgMCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RjYi0+c2N0cF9lcC0+c2N0cF9scG9ydCwgc3RjYi0+cnBvcnQsIGh0
b25sKHZ0YWcpLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGNi
LT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24tPnBvcnQsIE5VTEwsCisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgMCwKKyNlbmRpZgorCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzb19sb2NrZWQpKSkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdf
T1VUUFVUMywgIkdhayBzZW5kIGVycm9yICVkXG4iLCBlcnJvcik7CisJCWlmIChlcnJvciA9PSBF
Tk9CVUZTKSB7CisJCQlzdGNiLT5hc29jLmlmcF9oYWRfZW5vYnVmID0gMTsKKwkJCVNDVFBfU1RB
VF9JTkNSKHNjdHBzX2xvd2xldmVsZXJyKTsKKwkJfQorCX0gZWxzZSB7CisJCXN0Y2ItPmFzb2Mu
aWZwX2hhZF9lbm9idWYgPSAwOworCX0KKwlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNf
b3V0Y29udHJvbGNodW5rcyk7Cit9CisKK3ZvaWQKK3NjdHBfc2VuZF9zaHV0ZG93bl9jb21wbGV0
ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IHNjdHBfbmV0cyAqbmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZWZs
ZWN0X3Z0YWcpCit7CisJLyogZm9ybXVsYXRlIGFuZCBTRU5EIGEgU0hVVERPV04tQ09NUExFVEUg
Ki8KKwlzdHJ1Y3QgbWJ1ZiAqbV9zaHV0ZG93bl9jb21wOworCXN0cnVjdCBzY3RwX3NodXRkb3du
X2NvbXBsZXRlX2NodW5rICpzaHV0ZG93bl9jb21wbGV0ZTsKKwl1aW50MzJfdCB2dGFnOworCWlu
dCBlcnJvcjsKKwl1aW50OF90IGZsYWdzOworCisJbV9zaHV0ZG93bl9jb21wID0gc2N0cF9nZXRf
bWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkciksIDAsIE1fTk9XQUlULCAx
LCBNVF9IRUFERVIpOworCWlmIChtX3NodXRkb3duX2NvbXAgPT0gTlVMTCkgeworCQkvKiBubyBt
YnVmJ3MgKi8KKwkJcmV0dXJuOworCX0KKwlpZiAocmVmbGVjdF92dGFnKSB7CisJCWZsYWdzID0g
U0NUUF9IQURfTk9fVENCOworCQl2dGFnID0gc3RjYi0+YXNvYy5teV92dGFnOworCX0gZWxzZSB7
CisJCWZsYWdzID0gMDsKKwkJdnRhZyA9IHN0Y2ItPmFzb2MucGVlcl92dGFnOworCX0KKwlzaHV0
ZG93bl9jb21wbGV0ZSA9IG10b2QobV9zaHV0ZG93bl9jb21wLCBzdHJ1Y3Qgc2N0cF9zaHV0ZG93
bl9jb21wbGV0ZV9jaHVuayAqKTsKKwlzaHV0ZG93bl9jb21wbGV0ZS0+Y2guY2h1bmtfdHlwZSA9
IFNDVFBfU0hVVERPV05fQ09NUExFVEU7CisJc2h1dGRvd25fY29tcGxldGUtPmNoLmNodW5rX2Zs
YWdzID0gZmxhZ3M7CisJc2h1dGRvd25fY29tcGxldGUtPmNoLmNodW5rX2xlbmd0aCA9IGh0b25z
KHNpemVvZihzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jb21wbGV0ZV9jaHVuaykpOworCVNDVFBfQlVG
X0xFTihtX3NodXRkb3duX2NvbXApID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3NodXRkb3duX2NvbXBs
ZXRlX2NodW5rKTsKKwlpZiAoKGVycm9yID0gc2N0cF9sb3dsZXZlbF9jaHVua19vdXRwdXQoc3Rj
Yi0+c2N0cF9lcCwgc3RjYiwgbmV0LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJm5ldC0+cm8uX2xfYWRkciwKKwkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zaHV0ZG93bl9jb21wLCAwLCBOVUxMLCAw
LCAxLCAwLCAwLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGNi
LT5zY3RwX2VwLT5zY3RwX2xwb3J0LCBzdGNiLT5ycG9ydCwKKwkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaHRvbmwodnRhZyksCisJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5ldC0+cG9ydCwgTlVMTCwKKyNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLCAwLAorI2VuZGlmCisJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNDVFBfU09fTk9UX0xPQ0tFRCkpKSB7CisJCVNDVFBEQkcoU0NUUF9E
RUJVR19PVVRQVVQzLCAiR2FrIHNlbmQgZXJyb3IgJWRcbiIsIGVycm9yKTsKKwkJaWYgKGVycm9y
ID09IEVOT0JVRlMpIHsKKwkJCXN0Y2ItPmFzb2MuaWZwX2hhZF9lbm9idWYgPSAxOworCQkJU0NU
UF9TVEFUX0lOQ1Ioc2N0cHNfbG93bGV2ZWxlcnIpOworCQl9CisJfSBlbHNlIHsKKwkJc3RjYi0+
YXNvYy5pZnBfaGFkX2Vub2J1ZiA9IDA7CisJfQorCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChz
Y3Rwc19vdXRjb250cm9sY2h1bmtzKTsKKwlyZXR1cm47Cit9CisKKyNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorc3RhdGljIHZvaWQKK3NjdHBfc2Vu
ZF9yZXNwX21zZyhzdHJ1Y3Qgc29ja2FkZHIgKnNyYywgc3RydWN0IHNvY2thZGRyICpkc3QsCisg
ICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBoZHIgKnNoLCB1aW50MzJfdCB2dGFnLAorICAg
ICAgICAgICAgICAgICAgIHVpbnQ4X3QgdHlwZSwgc3RydWN0IG1idWYgKmNhdXNlLAorICAgICAg
ICAgICAgICAgICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxvd2lkLCB1aW50MTZf
dCBmaWJudW0sCisgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdnJmX2lkLCB1aW50MTZfdCBw
b3J0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCitzY3RwX3NlbmRfcmVzcF9tc2coc3RydWN0IHNvY2th
ZGRyICpzcmMsIHN0cnVjdCBzb2NrYWRkciAqZHN0LAorICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBzY3RwaGRyICpzaCwgdWludDMyX3QgdnRhZywKKyAgICAgICAgICAgICAgICAgICB1aW50OF90
IHR5cGUsIHN0cnVjdCBtYnVmICpjYXVzZSwKKyAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2
cmZfaWQgU0NUUF9VTlVTRUQsIHVpbnQxNl90IHBvcnQpCisjZW5kaWYKK3sKKwlzdHJ1Y3QgbWJ1
ZiAqb19wYWs7CisJc3RydWN0IG1idWYgKm1vdXQ7CisJc3RydWN0IHNjdHBoZHIgKnNob3V0Owor
CXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQo
SU5FVDYpCisJc3RydWN0IHVkcGhkciAqdWRwOworI2VuZGlmCisJaW50IHJldCwgbGVuLCBjYXVz
ZV9sZW4sIHBhZGRpbmdfbGVuOworI2lmZGVmIElORVQKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykg
JiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlzY3RwX3JvdXRlX3Qgcm87CisjZW5kaWYKKwlz
dHJ1Y3Qgc29ja2FkZHJfaW4gKnNyY19zaW4sICpkc3Rfc2luOworCXN0cnVjdCBpcCAqaXA7Cisj
ZW5kaWYKKyNpZmRlZiBJTkVUNgorCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNyY19zaW42LCAqZHN0
X3NpbjY7CisJc3RydWN0IGlwNl9oZHIgKmlwNjsKKyNlbmRpZgorCisJLyogQ29tcHV0ZSB0aGUg
bGVuZ3RoIG9mIHRoZSBjYXVzZSBhbmQgYWRkIGZpbmFsIHBhZGRpbmcuICovCisJY2F1c2VfbGVu
ID0gMDsKKwlpZiAoY2F1c2UgIT0gTlVMTCkgeworCQlzdHJ1Y3QgbWJ1ZiAqbV9hdCwgKm1fbGFz
dCA9IE5VTEw7CisKKwkJZm9yIChtX2F0ID0gY2F1c2U7IG1fYXQ7IG1fYXQgPSBTQ1RQX0JVRl9O
RVhUKG1fYXQpKSB7CisJCQlpZiAoU0NUUF9CVUZfTkVYVChtX2F0KSA9PSBOVUxMKQorCQkJCW1f
bGFzdCA9IG1fYXQ7CisJCQljYXVzZV9sZW4gKz0gU0NUUF9CVUZfTEVOKG1fYXQpOworCQl9CisJ
CXBhZGRpbmdfbGVuID0gY2F1c2VfbGVuICUgNDsKKwkJaWYgKHBhZGRpbmdfbGVuICE9IDApIHsK
KwkJCXBhZGRpbmdfbGVuID0gNCAtIHBhZGRpbmdfbGVuOworCQl9CisJCWlmIChwYWRkaW5nX2xl
biAhPSAwKSB7CisJCQlpZiAoc2N0cF9hZGRfcGFkX3RvbWJ1ZihtX2xhc3QsIHBhZGRpbmdfbGVu
KSA9PSBOVUxMKSB7CisJCQkJc2N0cF9tX2ZyZWVtKGNhdXNlKTsKKwkJCQlyZXR1cm47CisJCQl9
CisJCX0KKwl9IGVsc2UgeworCQlwYWRkaW5nX2xlbiA9IDA7CisJfQorCS8qIEdldCBhbiBtYnVm
IGZvciB0aGUgaGVhZGVyLiAqLworCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKyBzaXpl
b2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpOworCXN3aXRjaCAoZHN0LT5zYV9mYW1pbHkpIHsKKyNp
ZmRlZiBJTkVUCisJY2FzZSBBRl9JTkVUOgorCQlsZW4gKz0gc2l6ZW9mKHN0cnVjdCBpcCk7CisJ
CWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCQlsZW4gKz0g
c2l6ZW9mKHN0cnVjdCBpcDZfaGRyKTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQli
cmVhazsKKwl9CisjaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQorCWlmIChwb3J0
KSB7CisJCWxlbiArPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7CisJfQorI2VuZGlmCisjaWYgZGVm
aW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYgZGVmaW5lZChB
UFBMRV9MRU9QQVJEKSB8fCBkZWZpbmVkKEFQUExFX1NOT1dMRU9QQVJEKQorCW1vdXQgPSBzY3Rw
X2dldF9tYnVmX2Zvcl9tc2cobGVuICsgbWF4X2xpbmtoZHIsIDEsIE1fTk9XQUlULCAxLCBNVF9E
QVRBKTsKKyNlbHNlCisJbW91dCA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhsZW4gKyBTQ1RQX01B
WF9MSU5LSERSLCAxLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisjZW5kaWYKKyNlbHNlCisJbW91
dCA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhsZW4gKyBtYXhfbGlua2hkciwgMSwgTV9OT1dBSVQs
IDEsIE1UX0RBVEEpOworI2VuZGlmCisJaWYgKG1vdXQgPT0gTlVMTCkgeworCQlpZiAoY2F1c2Up
IHsKKwkJCXNjdHBfbV9mcmVlbShjYXVzZSk7CisJCX0KKwkJcmV0dXJuOworCX0KKyNpZiBkZWZp
bmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpZiBkZWZpbmVkKEFQ
UExFX0xFT1BBUkQpIHx8IGRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpCisJU0NUUF9CVUZfUkVT
Vl9VRihtb3V0LCBtYXhfbGlua2hkcik7CisjZWxzZQorCVNDVFBfQlVGX1JFU1ZfVUYobW91dCwg
U0NUUF9NQVhfTElOS0hEUik7CisjZW5kaWYKKyNlbHNlCisJU0NUUF9CVUZfUkVTVl9VRihtb3V0
LCBtYXhfbGlua2hkcik7CisjZW5kaWYKKwlTQ1RQX0JVRl9MRU4obW91dCkgPSBsZW47CisJU0NU
UF9CVUZfTkVYVChtb3V0KSA9IGNhdXNlOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJTV9TRVRGSUIobW91dCwgZmlibnVtKTsKKwltb3V0LT5t
X3BrdGhkci5mbG93aWQgPSBtZmxvd2lkOworCU1fSEFTSFRZUEVfU0VUKG1vdXQsIG1mbG93dHlw
ZSk7CisjZW5kaWYKKyNpZmRlZiBJTkVUCisJaXAgPSBOVUxMOworI2VuZGlmCisjaWZkZWYgSU5F
VDYKKwlpcDYgPSBOVUxMOworI2VuZGlmCisJc3dpdGNoIChkc3QtPnNhX2ZhbWlseSkgeworI2lm
ZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisJCXNyY19zaW4gPSAoc3RydWN0IHNvY2thZGRyX2lu
ICopc3JjOworCQlkc3Rfc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWRzdDsKKwkJaXAgPSBt
dG9kKG1vdXQsIHN0cnVjdCBpcCAqKTsKKwkJaXAtPmlwX3YgPSBJUFZFUlNJT047CisJCWlwLT5p
cF9obCA9IChzaXplb2Yoc3RydWN0IGlwKSA+PiAyKTsKKwkJaXAtPmlwX3RvcyA9IDA7CisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJaXAtPmlw
X29mZiA9IGh0b25zKElQX0RGKTsKKyNlbGlmIGRlZmluZWQoV0lUSF9DT05WRVJUX0lQX09GRikg
fHwgZGVmaW5lZChfX0FQUExFX18pCisJCWlwLT5pcF9vZmYgPSBJUF9ERjsKKyNlbHNlCisJCWlw
LT5pcF9vZmYgPSBodG9ucyhJUF9ERik7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisJCWlwLT5pcF9pZCA9IGh0b25zKGlwX2lkKyspOworI2VsaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykKKwkJaXBfZmlsbGlkKGlwKTsKKyNlbGlmIGRlZmluZWQoX19BUFBMRV9fKQorI2lmIFJB
TkRPTV9JUF9JRAorCQlpcC0+aXBfaWQgPSBpcF9yYW5kb21pZCgpOworI2Vsc2UKKwkJaXAtPmlw
X2lkID0gaHRvbnMoaXBfaWQrKyk7CisjZW5kaWYKKyNlbHNlCisJCWlwLT5pcF9pZCA9IGlwX2lk
Kys7CisjZW5kaWYKKwkJaXAtPmlwX3R0bCA9IE1PRFVMRV9HTE9CQUwoaXBfZGVmdHRsKTsKKwkJ
aWYgKHBvcnQpIHsKKwkJCWlwLT5pcF9wID0gSVBQUk9UT19VRFA7CisJCX0gZWxzZSB7CisJCQlp
cC0+aXBfcCA9IElQUFJPVE9fU0NUUDsKKwkJfQorCQlpcC0+aXBfc3JjLnNfYWRkciA9IGRzdF9z
aW4tPnNpbl9hZGRyLnNfYWRkcjsKKwkJaXAtPmlwX2RzdC5zX2FkZHIgPSBzcmNfc2luLT5zaW5f
YWRkci5zX2FkZHI7CisJCWlwLT5pcF9zdW0gPSAwOworCQlsZW4gPSBzaXplb2Yoc3RydWN0IGlw
KTsKKwkJc2hvdXQgPSAoc3RydWN0IHNjdHBoZHIgKikoKGNhZGRyX3QpaXAgKyBsZW4pOworCQli
cmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKwkJc3JjX3NpbjYg
PSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNyYzsKKwkJZHN0X3NpbjYgPSAoc3RydWN0IHNvY2th
ZGRyX2luNiAqKWRzdDsKKwkJaXA2ID0gbXRvZChtb3V0LCBzdHJ1Y3QgaXA2X2hkciAqKTsKKwkJ
aXA2LT5pcDZfZmxvdyA9IGh0b25sKDB4NjAwMDAwMDApOworI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWlmIChWX2lwNl9hdXRvX2Zsb3dsYWJl
bCkgeworCQkJaXA2LT5pcDZfZmxvdyB8PSAoaHRvbmwoaXA2X3JhbmRvbWZsb3dsYWJlbCgpKSAm
IElQVjZfRkxPV0xBQkVMX01BU0spOworCQl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisJCWlwNi0+aXA2X2hsaW0gPSBJUHY2X0hPUF9MSU1JVDsKKyNlbHNlCisJCWlwNi0+
aXA2X2hsaW0gPSBNT0RVTEVfR0xPQkFMKGlwNl9kZWZobGltKTsKKyNlbmRpZgorCQlpZiAocG9y
dCkgeworCQkJaXA2LT5pcDZfbnh0ID0gSVBQUk9UT19VRFA7CisJCX0gZWxzZSB7CisJCQlpcDYt
PmlwNl9ueHQgPSBJUFBST1RPX1NDVFA7CisJCX0KKwkJaXA2LT5pcDZfc3JjID0gZHN0X3NpbjYt
PnNpbjZfYWRkcjsKKwkJaXA2LT5pcDZfZHN0ID0gc3JjX3NpbjYtPnNpbjZfYWRkcjsKKwkJbGVu
ID0gc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKTsKKwkJc2hvdXQgPSAoc3RydWN0IHNjdHBoZHIgKiko
KGNhZGRyX3QpaXA2ICsgbGVuKTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlsZW4g
PSAwOworCQlzaG91dCA9IG10b2QobW91dCwgc3RydWN0IHNjdHBoZHIgKik7CisJCWJyZWFrOwor
CX0KKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisJaWYgKHBvcnQpIHsKKwkJ
aWYgKGh0b25zKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF91ZHBfdHVubmVsaW5nX3BvcnQpKSA9PSAw
KSB7CisJCQlzY3RwX21fZnJlZW0obW91dCk7CisJCQlyZXR1cm47CisJCX0KKwkJdWRwID0gKHN0
cnVjdCB1ZHBoZHIgKilzaG91dDsKKwkJdWRwLT51aF9zcG9ydCA9IGh0b25zKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF91ZHBfdHVubmVsaW5nX3BvcnQpKTsKKwkJdWRwLT51aF9kcG9ydCA9IHBvcnQ7
CisJCXVkcC0+dWhfc3VtID0gMDsKKwkJdWRwLT51aF91bGVuID0gaHRvbnMoKHVpbnQxNl90KShz
aXplb2Yoc3RydWN0IHVkcGhkcikgKworCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKworCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikgKworCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhdXNlX2xlbiArIHBhZGRpbmdfbGVuKSk7CisJCWxlbiArPSBzaXplb2Yo
c3RydWN0IHVkcGhkcik7CisJCXNob3V0ID0gKHN0cnVjdCBzY3RwaGRyICopKChjYWRkcl90KXNo
b3V0ICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsKKwl9IGVsc2UgeworCQl1ZHAgPSBOVUxMOwor
CX0KKyNlbmRpZgorCXNob3V0LT5zcmNfcG9ydCA9IHNoLT5kZXN0X3BvcnQ7CisJc2hvdXQtPmRl
c3RfcG9ydCA9IHNoLT5zcmNfcG9ydDsKKwlzaG91dC0+Y2hlY2tzdW0gPSAwOworCWlmICh2dGFn
KSB7CisJCXNob3V0LT52X3RhZyA9IGh0b25sKHZ0YWcpOworCX0gZWxzZSB7CisJCXNob3V0LT52
X3RhZyA9IHNoLT52X3RhZzsKKwl9CisJbGVuICs9IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7CisJ
Y2ggPSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKikoKGNhZGRyX3Qpc2hvdXQgKyBzaXplb2Yoc3Ry
dWN0IHNjdHBoZHIpKTsKKwljaC0+Y2h1bmtfdHlwZSA9IHR5cGU7CisJaWYgKHZ0YWcpIHsKKwkJ
Y2gtPmNodW5rX2ZsYWdzID0gMDsKKwl9IGVsc2UgeworCQljaC0+Y2h1bmtfZmxhZ3MgPSBTQ1RQ
X0hBRF9OT19UQ0I7CisJfQorCWNoLT5jaHVua19sZW5ndGggPSBodG9ucygodWludDE2X3QpKHNp
emVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikgKyBjYXVzZV9sZW4pKTsKKwlsZW4gKz0gc2l6ZW9m
KHN0cnVjdCBzY3RwX2NodW5raGRyKTsKKwlsZW4gKz0gY2F1c2VfbGVuICsgcGFkZGluZ19sZW47
CisKKwlpZiAoU0NUUF9HRVRfSEVBREVSX0ZPUl9PVVRQVVQob19wYWspKSB7CisJCXNjdHBfbV9m
cmVlbShtb3V0KTsKKwkJcmV0dXJuOworCX0KKwlTQ1RQX0FUVEFDSF9DSEFJTihvX3BhaywgbW91
dCwgbGVuKTsKKwlzd2l0Y2ggKGRzdC0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCWNhc2Ug
QUZfSU5FVDoKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwkJLyogemFwIHRoZSBzdGFjayBwb2ludGVyIHRvIHRoZSByb3V0ZSAqLworCQltZW1zZXQo
JnJvLCAwLCBzaXplb2Yoc2N0cF9yb3V0ZV90KSk7CisjZW5kaWYKKwkJaWYgKHBvcnQpIHsKKyNp
ZiAhZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykKKwkJCWlmIChWX3VkcF9ja3N1bSkgeworCQkJCXVkcC0+dWhfc3VtID0g
aW5fcHNldWRvKGlwLT5pcF9zcmMuc19hZGRyLCBpcC0+aXBfZHN0LnNfYWRkciwgdWRwLT51aF91
bGVuICsgaHRvbnMoSVBQUk9UT19VRFApKTsKKwkJCX0gZWxzZSB7CisJCQkJdWRwLT51aF9zdW0g
PSAwOworCQkJfQorI2Vsc2UKKwkJCXVkcC0+dWhfc3VtID0gaW5fcHNldWRvKGlwLT5pcF9zcmMu
c19hZGRyLCBpcC0+aXBfZHN0LnNfYWRkciwgdWRwLT51aF91bGVuICsgaHRvbnMoSVBQUk9UT19V
RFApKTsKKyNlbmRpZgorI2Vsc2UKKwkJCXVkcC0+dWhfc3VtID0gMDsKKyNlbmRpZgorCQl9Cisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJaXAt
PmlwX2xlbiA9IGh0b25zKGxlbik7CisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQorCQlpcC0+aXBfbGVuID0gbGVuOworI2Vsc2UKKwkJaXAtPmlwX2xl
biA9IGh0b25zKGxlbik7CisjZW5kaWYKKwkJaWYgKHBvcnQpIHsKKwkJCXNob3V0LT5jaGVja3N1
bSA9IHNjdHBfY2FsY3VsYXRlX2Nrc3VtKG1vdXQsIHNpemVvZihzdHJ1Y3QgaXApICsgc2l6ZW9m
KHN0cnVjdCB1ZHBoZHIpKTsKKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRzd2NyYyk7Cisj
aWYgIWRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pCisJCQlpZiAoVl91ZHBfY2tzdW0pIHsKKwkJCQlTQ1RQX0VOQUJMRV9V
RFBfQ1NVTShvX3Bhayk7CisJCQl9CisjZWxzZQorCQkJU0NUUF9FTkFCTEVfVURQX0NTVU0ob19w
YWspOworI2VuZGlmCisjZW5kaWYKKwkJfSBlbHNlIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJbW91dC0+bV9wa3RoZHIuY3N1bV9mbGFn
cyA9IENTVU1fU0NUUDsKKwkJCW1vdXQtPm1fcGt0aGRyLmNzdW1fZGF0YSA9IG9mZnNldG9mKHN0
cnVjdCBzY3RwaGRyLCBjaGVja3N1bSk7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kaHdj
cmMpOworI2Vsc2UKKwkJCXNob3V0LT5jaGVja3N1bSA9IHNjdHBfY2FsY3VsYXRlX2Nrc3VtKG1v
dXQsIHNpemVvZihzdHJ1Y3QgaXApKTsKKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRzd2Ny
Yyk7CisjZW5kaWYKKwkJfQorI2lmZGVmIFNDVFBfUEFDS0VUX0xPR0dJTkcKKwkJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTEFTVF9QQUNLRVRfVFJBQ0lO
RykgeworCQkJc2N0cF9wYWNrZXRfbG9nKG9fcGFrKTsKKwkJfQorI2VuZGlmCisjaWYgZGVmaW5l
ZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCVNDVFBfSVBfT1VUUFVU
KHJldCwgb19wYWssICZybywgTlVMTCwgdnJmX2lkKTsKKwkJLyogRnJlZSB0aGUgcm91dGUgaWYg
d2UgZ290IG9uZSBiYWNrICovCisJCWlmIChyby5yb19ydCkgeworCQkJUlRGUkVFKHJvLnJvX3J0
KTsKKwkJCXJvLnJvX3J0ID0gTlVMTDsKKwkJfQorI2Vsc2UKKyNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlTQ1RQX1BST0JFNShzZW5kLCBOVUxM
LCBOVUxMLCBpcCwgTlVMTCwgc2hvdXQpOworI2VuZGlmCisJCVNDVFBfSVBfT1VUUFVUKHJldCwg
b19wYWssIE5VTEwsIE5VTEwsIHZyZl9pZCk7CisjZW5kaWYKKwkJYnJlYWs7CisjZW5kaWYKKyNp
ZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJCWlwNi0+aXA2X3BsZW4gPSBodG9ucygodWlu
dDE2X3QpKGxlbiAtIHNpemVvZihzdHJ1Y3QgaXA2X2hkcikpKTsKKwkJaWYgKHBvcnQpIHsKKwkJ
CXNob3V0LT5jaGVja3N1bSA9IHNjdHBfY2FsY3VsYXRlX2Nrc3VtKG1vdXQsIHNpemVvZihzdHJ1
Y3QgaXA2X2hkcikgKyBzaXplb2Yoc3RydWN0IHVkcGhkcikpOworCQkJU0NUUF9TVEFUX0lOQ1Io
c2N0cHNfc2VuZHN3Y3JjKTsKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRlZmlu
ZWQoX1dJTjMyKQorCQkJdWRwLT51aF9zdW0gPSAwOworI2Vsc2UKKwkJCWlmICgodWRwLT51aF9z
dW0gPSBpbjZfY2tzdW0ob19wYWssIElQUFJPVE9fVURQLCBzaXplb2Yoc3RydWN0IGlwNl9oZHIp
LCBsZW4gLSBzaXplb2Yoc3RydWN0IGlwNl9oZHIpKSkgPT0gMCkgeworCQkJCXVkcC0+dWhfc3Vt
ID0gMHhmZmZmOworCQkJfQorI2VuZGlmCisjZW5kaWYKKwkJfSBlbHNlIHsKKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJbW91dC0+bV9wa3Ro
ZHIuY3N1bV9mbGFncyA9IENTVU1fU0NUUF9JUFY2OworCQkJbW91dC0+bV9wa3RoZHIuY3N1bV9k
YXRhID0gb2Zmc2V0b2Yoc3RydWN0IHNjdHBoZHIsIGNoZWNrc3VtKTsKKwkJCVNDVFBfU1RBVF9J
TkNSKHNjdHBzX3NlbmRod2NyYyk7CisjZWxzZQorCQkJc2hvdXQtPmNoZWNrc3VtID0gc2N0cF9j
YWxjdWxhdGVfY2tzdW0obW91dCwgc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSk7CisJCQlTQ1RQX1NU
QVRfSU5DUihzY3Rwc19zZW5kc3djcmMpOworI2VuZGlmCisJCX0KKyNpZmRlZiBTQ1RQX1BBQ0tF
VF9MT0dHSU5HCisJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBT
Q1RQX0xBU1RfUEFDS0VUX1RSQUNJTkcpIHsKKwkJCXNjdHBfcGFja2V0X2xvZyhvX3Bhayk7CisJ
CX0KKyNlbmRpZgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisJCVNDVFBfUFJPQkU1KHNlbmQsIE5VTEwsIE5VTEwsIGlwNiwgTlVMTCwgc2hvdXQp
OworI2VuZGlmCisJCVNDVFBfSVA2X09VVFBVVChyZXQsIG9fcGFrLCBOVUxMLCBOVUxMLCBOVUxM
LCB2cmZfaWQpOworCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KwljYXNlIEFGX0NPTk46CisJeworCQljaGFyICpidWZmZXI7CisJCXN0cnVjdCBzb2NrYWRkcl9j
b25uICpzY29ubjsKKworCQlzY29ubiA9IChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKXNyYzsKKwkJ
aWYgKFNDVFBfQkFTRV9WQVIoY3JjMzJjX29mZmxvYWRlZCkgPT0gMCkgeworCQkJc2hvdXQtPmNo
ZWNrc3VtID0gc2N0cF9jYWxjdWxhdGVfY2tzdW0obW91dCwgMCk7CisJCQlTQ1RQX1NUQVRfSU5D
UihzY3Rwc19zZW5kc3djcmMpOworCQl9IGVsc2UgeworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNf
c2VuZGh3Y3JjKTsKKwkJfQorI2lmZGVmIFNDVFBfUEFDS0VUX0xPR0dJTkcKKwkJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTEFTVF9QQUNLRVRfVFJBQ0lO
RykgeworCQkJc2N0cF9wYWNrZXRfbG9nKG1vdXQpOworCQl9CisjZW5kaWYKKwkJLyogRG9uJ3Qg
YWxsb2MvZnJlZSBmb3IgZWFjaCBwYWNrZXQgKi8KKwkJaWYgKChidWZmZXIgPSBtYWxsb2MobGVu
KSkgIT0gTlVMTCkgeworCQkJbV9jb3B5ZGF0YShtb3V0LCAwLCBsZW4sIGJ1ZmZlcik7CisJCQly
ZXQgPSBTQ1RQX0JBU0VfVkFSKGNvbm5fb3V0cHV0KShzY29ubi0+c2Nvbm5fYWRkciwgYnVmZmVy
LCBsZW4sIDAsIDApOworCQkJZnJlZShidWZmZXIpOworCQl9IGVsc2UgeworCQkJcmV0ID0gRU5P
TUVNOworCQl9CisJCXNjdHBfbV9mcmVlbShtb3V0KTsKKwkJYnJlYWs7CisJfQorI2VuZGlmCisJ
ZGVmYXVsdDoKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICJVbmtub3duIHByb3RvY29s
IChUU05IKSB0eXBlICVkXG4iLAorCQkgICAgICAgIGRzdC0+c2FfZmFtaWx5KTsKKwkJc2N0cF9t
X2ZyZWVtKG1vdXQpOworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtb3V0LCBOVUxMLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVGQVVMVCk7CisJCXJldHVybjsKKwl9CisJ
U0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJyZXR1cm4gZnJvbSBzZW5kIGlzICVkXG4iLCBy
ZXQpOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisJaWYgKHBvcnQpIHsKKwkJVURQU1RBVF9JTkModWRwc19vcGFja2V0cyk7CisJfQorI2VuZGlm
CisJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHBhY2tldHMpOworCVNDVFBfU1RBVF9JTkNSX0NP
VU5URVI2NChzY3Rwc19vdXRwYWNrZXRzKTsKKwlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0
cHNfb3V0Y29udHJvbGNodW5rcyk7CisJaWYgKHJldCkgeworCQlTQ1RQX1NUQVRfSU5DUihzY3Rw
c19zZW5kZXJyb3JzKTsKKwl9CisJcmV0dXJuOworfQorCit2b2lkCitzY3RwX3NlbmRfc2h1dGRv
d25fY29tcGxldGUyKHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBoZHIgKnNoLAorI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxvd2lkLCB1
aW50MTZfdCBmaWJudW0sCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu
dDMyX3QgdnJmX2lkLCB1aW50MTZfdCBwb3J0KQoreworCXNjdHBfc2VuZF9yZXNwX21zZyhzcmMs
IGRzdCwgc2gsIDAsIFNDVFBfU0hVVERPV05fQ09NUExFVEUsIE5VTEwsCisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkgICAgICAgICAgICAgICAg
ICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBmaWJudW0sCisjZW5kaWYKKwkgICAgICAgICAgICAgICAg
ICAgdnJmX2lkLCBwb3J0KTsKK30KKwordm9pZAorc2N0cF9zZW5kX2hiKHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LGludCBzb19sb2NrZWQpCit7CisJc3RydWN0
IHNjdHBfdG1pdF9jaHVuayAqY2hrOworCXN0cnVjdCBzY3RwX2hlYXJ0YmVhdF9jaHVuayAqaGI7
CisJc3RydWN0IHRpbWV2YWwgbm93OworCisJU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7CisJ
aWYgKG5ldCA9PSBOVUxMKSB7CisJCXJldHVybjsKKwl9CisJKHZvaWQpU0NUUF9HRVRUSU1FX1RJ
TUVWQUwoJm5vdyk7CisJc3dpdGNoIChuZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5KSB7Cisj
aWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVU
NgorCWNhc2UgQUZfSU5FVDY6CisJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorCWNhc2UgQUZfQ09OTjoKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQly
ZXR1cm47CisJfQorCXNjdHBfYWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOworCWlmIChjaGsgPT0g
TlVMTCkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUNCwgIkdhaywgY2FuJ3QgZ2V0IGEg
Y2h1bmsgZm9yIGhiXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWNoay0+Y29weV9ieV9yZWYgPSAw
OworCWNoay0+cmVjLmNodW5rX2lkLmlkID0gU0NUUF9IRUFSVEJFQVRfUkVRVUVTVDsKKwljaGst
PnJlYy5jaHVua19pZC5jYW5fdGFrZV9kYXRhID0gMTsKKwljaGstPmZsYWdzID0gMDsKKwljaGst
PmFzb2MgPSAmc3RjYi0+YXNvYzsKKwljaGstPnNlbmRfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0
cF9oZWFydGJlYXRfY2h1bmspOworCisJY2hrLT5kYXRhID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNn
KGNoay0+c2VuZF9zaXplLCAwLCBNX05PV0FJVCwgMSwgTVRfSEVBREVSKTsKKwlpZiAoY2hrLT5k
YXRhID09IE5VTEwpIHsKKwkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBzb19sb2NrZWQp
OworCQlyZXR1cm47CisJfQorCVNDVFBfQlVGX1JFU1ZfVUYoY2hrLT5kYXRhLCBTQ1RQX01JTl9P
VkVSSEVBRCk7CisJU0NUUF9CVUZfTEVOKGNoay0+ZGF0YSkgPSBjaGstPnNlbmRfc2l6ZTsKKwlj
aGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1VOU0VOVDsKKwljaGstPnNuZF9jb3VudCA9IDA7CisJ
Y2hrLT53aG9UbyA9IG5ldDsKKwlhdG9taWNfYWRkX2ludCgmY2hrLT53aG9Uby0+cmVmX2NvdW50
LCAxKTsKKwkvKiBOb3cgd2UgaGF2ZSBhIG1idWYgdGhhdCB3ZSBjYW4gZmlsbCBpbiB3aXRoIHRo
ZSBkZXRhaWxzICovCisJaGIgPSBtdG9kKGNoay0+ZGF0YSwgc3RydWN0IHNjdHBfaGVhcnRiZWF0
X2NodW5rICopOworCW1lbXNldChoYiwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2hlYXJ0YmVhdF9j
aHVuaykpOworCS8qIGZpbGwgb3V0IGNodW5rIGhlYWRlciAqLworCWhiLT5jaC5jaHVua190eXBl
ID0gU0NUUF9IRUFSVEJFQVRfUkVRVUVTVDsKKwloYi0+Y2guY2h1bmtfZmxhZ3MgPSAwOworCWhi
LT5jaC5jaHVua19sZW5ndGggPSBodG9ucyhjaGstPnNlbmRfc2l6ZSk7CisJLyogRmlsbCBvdXQg
aGIgcGFyYW1ldGVyICovCisJaGItPmhlYXJ0YmVhdC5oYl9pbmZvLnBoLnBhcmFtX3R5cGUgPSBo
dG9ucyhTQ1RQX0hFQVJUQkVBVF9JTkZPKTsKKwloYi0+aGVhcnRiZWF0LmhiX2luZm8ucGgucGFy
YW1fbGVuZ3RoID0gaHRvbnMoc2l6ZW9mKHN0cnVjdCBzY3RwX2hlYXJ0YmVhdF9pbmZvX3BhcmFt
KSk7CisJaGItPmhlYXJ0YmVhdC5oYl9pbmZvLnRpbWVfdmFsdWVfMSA9IG5vdy50dl9zZWM7CisJ
aGItPmhlYXJ0YmVhdC5oYl9pbmZvLnRpbWVfdmFsdWVfMiA9IG5vdy50dl91c2VjOworCS8qIERp
ZCBvdXIgdXNlciByZXF1ZXN0IHRoaXMgb25lLCBwdXQgaXQgaW4gKi8KKwloYi0+aGVhcnRiZWF0
LmhiX2luZm8uYWRkcl9mYW1pbHkgPSAodWludDhfdCluZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFt
aWx5OworI2lmZGVmIEhBVkVfU0FfTEVOCisJaGItPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJfbGVu
ID0gbmV0LT5yby5fbF9hZGRyLnNhLnNhX2xlbjsKKyNlbHNlCisJc3dpdGNoIChuZXQtPnJvLl9s
X2FkZHIuc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwkJaGIt
PmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7
CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCQloYi0+
aGVhcnRiZWF0LmhiX2luZm8uYWRkcl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7
CisJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWNhc2UgQUZf
Q09OTjoKKwkJaGItPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9jb25uKTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQloYi0+aGVhcnRi
ZWF0LmhiX2luZm8uYWRkcl9sZW4gPSAwOworCQlicmVhazsKKwl9CisjZW5kaWYKKwlpZiAobmV0
LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1VOQ09ORklSTUVEKSB7CisJCS8qCisJCSAqIHdlIG9u
bHkgdGFrZSBmcm9tIHRoZSBlbnRyb3B5IHBvb2wgaWYgdGhlIGFkZHJlc3MgaXMgbm90CisJCSAq
IGNvbmZpcm1lZC4KKwkJICovCisJCW5ldC0+aGVhcnRiZWF0X3JhbmRvbTEgPSBoYi0+aGVhcnRi
ZWF0LmhiX2luZm8ucmFuZG9tX3ZhbHVlMSA9IHNjdHBfc2VsZWN0X2luaXRpYWxfVFNOKCZzdGNi
LT5zY3RwX2VwLT5zY3RwX2VwKTsKKwkJbmV0LT5oZWFydGJlYXRfcmFuZG9tMiA9IGhiLT5oZWFy
dGJlYXQuaGJfaW5mby5yYW5kb21fdmFsdWUyID0gc2N0cF9zZWxlY3RfaW5pdGlhbF9UU04oJnN0
Y2ItPnNjdHBfZXAtPnNjdHBfZXApOworCX0gZWxzZSB7CisJCW5ldC0+aGVhcnRiZWF0X3JhbmRv
bTEgPSBoYi0+aGVhcnRiZWF0LmhiX2luZm8ucmFuZG9tX3ZhbHVlMSA9IDA7CisJCW5ldC0+aGVh
cnRiZWF0X3JhbmRvbTIgPSBoYi0+aGVhcnRiZWF0LmhiX2luZm8ucmFuZG9tX3ZhbHVlMiA9IDA7
CisJfQorCXN3aXRjaCAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElO
RVQKKwljYXNlIEFGX0lORVQ6CisJCW1lbWNweShoYi0+aGVhcnRiZWF0LmhiX2luZm8uYWRkcmVz
cywKKwkJICAgICAgICZuZXQtPnJvLl9sX2FkZHIuc2luLnNpbl9hZGRyLAorCQkgICAgICAgc2l6
ZW9mKG5ldC0+cm8uX2xfYWRkci5zaW4uc2luX2FkZHIpKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNp
ZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJCW1lbWNweShoYi0+aGVhcnRiZWF0LmhiX2lu
Zm8uYWRkcmVzcywKKwkJICAgICAgICZuZXQtPnJvLl9sX2FkZHIuc2luNi5zaW42X2FkZHIsCisJ
CSAgICAgICBzaXplb2YobmV0LT5yby5fbF9hZGRyLnNpbjYuc2luNl9hZGRyKSk7CisJCWJyZWFr
OworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWNhc2UgQUZfQ09OTjoKKwkJ
bWVtY3B5KGhiLT5oZWFydGJlYXQuaGJfaW5mby5hZGRyZXNzLAorCQkgICAgICAgJm5ldC0+cm8u
X2xfYWRkci5zY29ubi5zY29ubl9hZGRyLAorCQkgICAgICAgc2l6ZW9mKG5ldC0+cm8uX2xfYWRk
ci5zY29ubi5zY29ubl9hZGRyKSk7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJaWYg
KGNoay0+ZGF0YSkgeworCQkJc2N0cF9tX2ZyZWVtKGNoay0+ZGF0YSk7CisJCQljaGstPmRhdGEg
PSBOVUxMOworCQl9CisJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgc29fbG9ja2VkKTsK
KwkJcmV0dXJuOworCQlicmVhazsKKwl9CisJbmV0LT5oYl9yZXNwb25kZWQgPSAwOworCVRBSUxR
X0lOU0VSVF9UQUlMKCZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1ZSwgY2hrLCBzY3RwX25l
eHQpOworCXN0Y2ItPmFzb2MuY3RybF9xdWV1ZV9jbnQrKzsKKwlTQ1RQX1NUQVRfSU5DUihzY3Rw
c19zZW5kaGVhcnRiZWF0KTsKKwlyZXR1cm47Cit9CisKK3ZvaWQKK3NjdHBfc2VuZF9lY25fZWNo
byhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKKwkJICAgdWlu
dDMyX3QgaGlnaF90c24pCit7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJc3Ry
dWN0IHNjdHBfZWNuZV9jaHVuayAqZWNuZTsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7
CisKKwlpZiAobmV0ID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKwlhc29jID0gJnN0Y2ItPmFz
b2M7CisJU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7CisJVEFJTFFfRk9SRUFDSChjaGssICZh
c29jLT5jb250cm9sX3NlbmRfcXVldWUsIHNjdHBfbmV4dCkgeworCQlpZiAoKGNoay0+cmVjLmNo
dW5rX2lkLmlkID09IFNDVFBfRUNOX0VDSE8pICYmIChuZXQgPT0gY2hrLT53aG9UbykpIHsKKwkJ
CS8qIGZvdW5kIGEgcHJldmlvdXMgRUNOX0VDSE8gdXBkYXRlIGl0IGlmIG5lZWRlZCAqLworCQkJ
dWludDMyX3QgY250LCBjdHNuOworCQkJZWNuZSA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0
cF9lY25lX2NodW5rICopOworCQkJY3RzbiA9IG50b2hsKGVjbmUtPnRzbik7CisJCQlpZiAoU0NU
UF9UU05fR1QoaGlnaF90c24sIGN0c24pKSB7CisJCQkJZWNuZS0+dHNuID0gaHRvbmwoaGlnaF90
c24pOworCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3F1ZXVlX3VwZF9lY25lKTsKKwkJCX0KKwkJ
CWNudCA9IG50b2hsKGVjbmUtPm51bV9wa3RzX3NpbmNlX2N3cik7CisJCQljbnQrKzsKKwkJCWVj
bmUtPm51bV9wa3RzX3NpbmNlX2N3ciA9IGh0b25sKGNudCk7CisJCQlyZXR1cm47CisJCX0KKwl9
CisJLyogbm9wZSBjb3VsZCBub3QgZmluZCBvbmUgdG8gdXBkYXRlIHNvIHdlIG11c3QgYnVpbGQg
b25lICovCisJc2N0cF9hbGxvY19hX2NodW5rKHN0Y2IsIGNoayk7CisJaWYgKGNoayA9PSBOVUxM
KSB7CisJCXJldHVybjsKKwl9CisJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcXVldWVfdXBkX2VjbmUp
OworCWNoay0+Y29weV9ieV9yZWYgPSAwOworCWNoay0+cmVjLmNodW5rX2lkLmlkID0gU0NUUF9F
Q05fRUNITzsKKwljaGstPnJlYy5jaHVua19pZC5jYW5fdGFrZV9kYXRhID0gMDsKKwljaGstPmZs
YWdzID0gMDsKKwljaGstPmFzb2MgPSAmc3RjYi0+YXNvYzsKKwljaGstPnNlbmRfc2l6ZSA9IHNp
emVvZihzdHJ1Y3Qgc2N0cF9lY25lX2NodW5rKTsKKwljaGstPmRhdGEgPSBzY3RwX2dldF9tYnVm
X2Zvcl9tc2coY2hrLT5zZW5kX3NpemUsIDAsIE1fTk9XQUlULCAxLCBNVF9IRUFERVIpOworCWlm
IChjaGstPmRhdGEgPT0gTlVMTCkgeworCQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNiLCBjaGssIFND
VFBfU09fTk9UX0xPQ0tFRCk7CisJCXJldHVybjsKKwl9CisJU0NUUF9CVUZfUkVTVl9VRihjaGst
PmRhdGEsIFNDVFBfTUlOX09WRVJIRUFEKTsKKwlTQ1RQX0JVRl9MRU4oY2hrLT5kYXRhKSA9IGNo
ay0+c2VuZF9zaXplOworCWNoay0+c2VudCA9IFNDVFBfREFUQUdSQU1fVU5TRU5UOworCWNoay0+
c25kX2NvdW50ID0gMDsKKwljaGstPndob1RvID0gbmV0OworCWF0b21pY19hZGRfaW50KCZjaGst
Pndob1RvLT5yZWZfY291bnQsIDEpOworCisJc3RjYi0+YXNvYy5lY25fZWNob19jbnRfb25xKys7
CisJZWNuZSA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9lY25lX2NodW5rICopOworCWVj
bmUtPmNoLmNodW5rX3R5cGUgPSBTQ1RQX0VDTl9FQ0hPOworCWVjbmUtPmNoLmNodW5rX2ZsYWdz
ID0gMDsKKwllY25lLT5jaC5jaHVua19sZW5ndGggPSBodG9ucyhzaXplb2Yoc3RydWN0IHNjdHBf
ZWNuZV9jaHVuaykpOworCWVjbmUtPnRzbiA9IGh0b25sKGhpZ2hfdHNuKTsKKwllY25lLT5udW1f
cGt0c19zaW5jZV9jd3IgPSBodG9ubCgxKTsKKwlUQUlMUV9JTlNFUlRfSEVBRCgmc3RjYi0+YXNv
Yy5jb250cm9sX3NlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKKwlhc29jLT5jdHJsX3F1ZXVl
X2NudCsrOworfQorCit2b2lkCitzY3RwX3NlbmRfcGFja2V0X2Ryb3BwZWQoc3RydWN0IHNjdHBf
dGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCisgICAgc3RydWN0IG1idWYgKm0sIGlu
dCBsZW4sIGludCBpcGhsZW4sIGludCBiYWRfY3JjKQoreworCXN0cnVjdCBzY3RwX2Fzc29jaWF0
aW9uICphc29jOworCXN0cnVjdCBzY3RwX3BrdGRyb3BfY2h1bmsgKmRycDsKKwlzdHJ1Y3Qgc2N0
cF90bWl0X2NodW5rICpjaGs7CisJdWludDhfdCAqZGF0YXA7CisJaW50IHdhc190cnVuYyA9IDA7
CisJaW50IGZ1bGxzeiA9IDA7CisJbG9uZyBzcGM7CisJaW50IG9mZnNldDsKKwlzdHJ1Y3Qgc2N0
cF9jaHVua2hkciAqY2gsIGNodW5rX2J1ZjsKKwl1bnNpZ25lZCBpbnQgY2hrX2xlbmd0aDsKKwor
ICAgICAgICBpZiAoIXN0Y2IpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCWFz
b2MgPSAmc3RjYi0+YXNvYzsKKwlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKwlpZiAoYXNv
Yy0+cGt0ZHJvcF9zdXBwb3J0ZWQgPT0gMCkgeworCQkvKi0KKwkJICogcGVlciBtdXN0IGRlY2xh
cmUgc3VwcG9ydCBiZWZvcmUgSSBzZW5kIG9uZS4KKwkJICovCisJCXJldHVybjsKKwl9CisJaWYg
KHN0Y2ItPnNjdHBfc29ja2V0ID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKwlzY3RwX2FsbG9j
X2FfY2h1bmsoc3RjYiwgY2hrKTsKKwlpZiAoY2hrID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0K
KwljaGstPmNvcHlfYnlfcmVmID0gMDsKKwljaGstPnJlYy5jaHVua19pZC5pZCA9IFNDVFBfUEFD
S0VUX0RST1BQRUQ7CisJY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0YSA9IDE7CisJY2hr
LT5mbGFncyA9IDA7CisJbGVuIC09IGlwaGxlbjsKKwljaGstPnNlbmRfc2l6ZSA9IGxlbjsKKwkv
KiBWYWxpZGF0ZSB0aGF0IHdlIGRvIG5vdCBoYXZlIGFuIEFCT1JUIGluIGhlcmUuICovCisJb2Zm
c2V0ID0gaXBobGVuICsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKKwljaCA9IChzdHJ1Y3Qgc2N0
cF9jaHVua2hkciAqKXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LAorCQkJCQkJICAgc2l6ZW9mKCpj
aCksICh1aW50OF90ICopICYgY2h1bmtfYnVmKTsKKwl3aGlsZSAoY2ggIT0gTlVMTCkgeworCQlj
aGtfbGVuZ3RoID0gbnRvaHMoY2gtPmNodW5rX2xlbmd0aCk7CisJCWlmIChjaGtfbGVuZ3RoIDwg
c2l6ZW9mKCpjaCkpIHsKKwkJCS8qIGJyZWFrIHRvIGFib3J0IGxhbmQgKi8KKwkJCWJyZWFrOwor
CQl9CisJCXN3aXRjaCAoY2gtPmNodW5rX3R5cGUpIHsKKwkJY2FzZSBTQ1RQX1BBQ0tFVF9EUk9Q
UEVEOgorCQljYXNlIFNDVFBfQUJPUlRfQVNTT0NJQVRJT046CisJCWNhc2UgU0NUUF9JTklUSUFU
SU9OX0FDSzoKKwkJCS8qKgorCQkJICogV2UgZG9uJ3QgcmVzcG9uZCB3aXRoIGFuIFBLVC1EUk9Q
IHRvIGFuIEFCT1JUCisJCQkgKiBvciBQS1QtRFJPUC4gV2UgYWxzbyBkbyBub3QgcmVzcG9uZCB0
byBhbgorCQkJICogSU5JVC1BQ0ssIGJlY2F1c2Ugd2UgY2FuJ3Qga25vdyBpZiB0aGUgaW5pdGlh
dGlvbgorCQkJICogdGFnIGlzIGNvcnJlY3Qgb3Igbm90LgorCQkJICovCisJCQlzY3RwX2ZyZWVf
YV9jaHVuayhzdGNiLCBjaGssIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQlyZXR1cm47CisJCWRl
ZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlvZmZzZXQgKz0gU0NUUF9TSVpFMzIoY2hrX2xlbmd0
aCk7CisJCWNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopc2N0cF9tX2dldHB0cihtLCBvZmZz
ZXQsCisJCSAgICBzaXplb2YoKmNoKSwgKHVpbnQ4X3QgKikgJiBjaHVua19idWYpOworCX0KKwor
CWlmICgobGVuICsgU0NUUF9NQVhfT1ZFUkhFQUQgKyBzaXplb2Yoc3RydWN0IHNjdHBfcGt0ZHJv
cF9jaHVuaykpID4KKwkgICAgbWluKHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1LCBNQ0xCWVRFUykp
IHsKKwkJLyogb25seSBzZW5kIDEgbXR1IHdvcnRoLCB0cmltIG9mZiB0aGUKKwkJICogZXhjZXNz
IG9uIHRoZSBlbmQuCisJCSAqLworCQlmdWxsc3ogPSBsZW47CisJCWxlbiA9IG1pbihzdGNiLT5h
c29jLnNtYWxsZXN0X210dSwgTUNMQllURVMpIC0gU0NUUF9NQVhfT1ZFUkhFQUQ7CisJCXdhc190
cnVuYyA9IDE7CisJfQorCWNoay0+YXNvYyA9ICZzdGNiLT5hc29jOworCWNoay0+ZGF0YSA9IHNj
dHBfZ2V0X21idWZfZm9yX21zZyhNQ0xCWVRFUywgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOwor
CWlmIChjaGstPmRhdGEgPT0gTlVMTCkgeworanVtcF9vdXQ6CisJCXNjdHBfZnJlZV9hX2NodW5r
KHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJcmV0dXJuOworCX0KKwlTQ1RQX0JV
Rl9SRVNWX1VGKGNoay0+ZGF0YSwgU0NUUF9NSU5fT1ZFUkhFQUQpOworCWRycCA9IG10b2QoY2hr
LT5kYXRhLCBzdHJ1Y3Qgc2N0cF9wa3Rkcm9wX2NodW5rICopOworCWlmIChkcnAgPT0gTlVMTCkg
eworCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRhKTsKKwkJY2hrLT5kYXRhID0gTlVMTDsKKwkJZ290
byBqdW1wX291dDsKKwl9CisJY2hrLT5ib29rX3NpemUgPSBTQ1RQX1NJWkUzMigoY2hrLT5zZW5k
X3NpemUgKyBzaXplb2Yoc3RydWN0IHNjdHBfcGt0ZHJvcF9jaHVuaykgKworCSAgICBzaXplb2Yo
c3RydWN0IHNjdHBoZHIpICsgU0NUUF9NRURfT1ZFUkhFQUQpKTsKKwljaGstPmJvb2tfc2l6ZV9z
Y2FsZSA9IDA7CisJaWYgKHdhc190cnVuYykgeworCQlkcnAtPmNoLmNodW5rX2ZsYWdzID0gU0NU
UF9QQUNLRVRfVFJVTkNBVEVEOworCQlkcnAtPnRydW5jX2xlbiA9IGh0b25zKGZ1bGxzeik7CisJ
CS8qIExlbiBpcyBhbHJlYWR5IGFkanVzdGVkIHRvIHNpemUgbWludXMgb3ZlcmhlYWQgYWJvdmUK
KwkJICogdGFrZSBvdXQgdGhlIHBrdF9kcm9wIGNodW5rIGl0c2VsZiBmcm9tIGl0LgorCQkgKi8K
KwkJY2hrLT5zZW5kX3NpemUgPSAodWludDE2X3QpKGxlbiAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9w
a3Rkcm9wX2NodW5rKSk7CisJCWxlbiA9IGNoay0+c2VuZF9zaXplOworCX0gZWxzZSB7CisJCS8q
IG5vIHRydW5jYXRpb24gbmVlZGVkICovCisJCWRycC0+Y2guY2h1bmtfZmxhZ3MgPSAwOworCQlk
cnAtPnRydW5jX2xlbiA9IGh0b25zKDApOworCX0KKwlpZiAoYmFkX2NyYykgeworCQlkcnAtPmNo
LmNodW5rX2ZsYWdzIHw9IFNDVFBfQkFEQ1JDOworCX0KKwljaGstPnNlbmRfc2l6ZSArPSBzaXpl
b2Yoc3RydWN0IHNjdHBfcGt0ZHJvcF9jaHVuayk7CisJU0NUUF9CVUZfTEVOKGNoay0+ZGF0YSkg
PSBjaGstPnNlbmRfc2l6ZTsKKwljaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1VOU0VOVDsKKwlj
aGstPnNuZF9jb3VudCA9IDA7CisJaWYgKG5ldCkgeworCQkvKiB3ZSBzaG91bGQgaGl0IGhlcmUg
Ki8KKwkJY2hrLT53aG9UbyA9IG5ldDsKKwkJYXRvbWljX2FkZF9pbnQoJmNoay0+d2hvVG8tPnJl
Zl9jb3VudCwgMSk7CisJfSBlbHNlIHsKKwkJY2hrLT53aG9UbyA9IE5VTEw7CisJfQorCWRycC0+
Y2guY2h1bmtfdHlwZSA9IFNDVFBfUEFDS0VUX0RST1BQRUQ7CisJZHJwLT5jaC5jaHVua19sZW5n
dGggPSBodG9ucyhjaGstPnNlbmRfc2l6ZSk7CisJc3BjID0gU0NUUF9TQl9MSU1JVF9SQ1Yoc3Rj
Yi0+c2N0cF9zb2NrZXQpOworCWlmIChzcGMgPCAwKSB7CisJCXNwYyA9IDA7CisJfQorCWRycC0+
Ym90dGxlX2J3ID0gaHRvbmwoc3BjKTsKKwlpZiAoYXNvYy0+bXlfcnduZCkgeworCQlkcnAtPmN1
cnJlbnRfb25xID0gaHRvbmwoYXNvYy0+c2l6ZV9vbl9yZWFzbV9xdWV1ZSArCisJCSAgICBhc29j
LT5zaXplX29uX2FsbF9zdHJlYW1zICsKKwkJICAgIGFzb2MtPm15X3J3bmRfY29udHJvbF9sZW4g
KworCQkgICAgc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3Jjdi5zYl9jYyk7CisJfSBlbHNlIHsKKwkJ
LyotCisJCSAqIElmIG15IHJ3bmQgaXMgMCwgcG9zc2libHkgZnJvbSBtYnVmIGRlcGxldGlvbiBh
cyB3ZWxsIGFzCisJCSAqIHNwYWNlIHVzZWQsIHRlbGwgdGhlIHBlZXIgdGhlcmUgaXMgTk8gc3Bh
Y2UgYWthIG9ucSA9PSBidworCQkgKi8KKwkJZHJwLT5jdXJyZW50X29ucSA9IGh0b25sKHNwYyk7
CisJfQorCWRycC0+cmVzZXJ2ZWQgPSAwOworCWRhdGFwID0gZHJwLT5kYXRhOworCW1fY29weWRh
dGEobSwgaXBobGVuLCBsZW4sIChjYWRkcl90KWRhdGFwKTsKKwlUQUlMUV9JTlNFUlRfVEFJTCgm
c3RjYi0+YXNvYy5jb250cm9sX3NlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKKwlhc29jLT5j
dHJsX3F1ZXVlX2NudCsrOworfQorCit2b2lkCitzY3RwX3NlbmRfY3dyKHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LCB1aW50MzJfdCBoaWdoX3RzbiwgdWludDhf
dCBvdmVycmlkZSkKK3sKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qg
c2N0cF9jd3JfY2h1bmsgKmN3cjsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7CisKKwlT
Q1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKwlpZiAobmV0ID09IE5VTEwpIHsKKwkJcmV0dXJu
OworCX0KKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJVEFJTFFfRk9SRUFDSChjaGssICZhc29jLT5j
b250cm9sX3NlbmRfcXVldWUsIHNjdHBfbmV4dCkgeworCQlpZiAoKGNoay0+cmVjLmNodW5rX2lk
LmlkID09IFNDVFBfRUNOX0NXUikgJiYgKG5ldCA9PSBjaGstPndob1RvKSkgeworCQkJLyogZm91
bmQgYSBwcmV2aW91cyBDV1IgcXVldWVkIHRvIHNhbWUgZGVzdGluYXRpb24gdXBkYXRlIGl0IGlm
IG5lZWRlZCAqLworCQkJdWludDMyX3QgY3RzbjsKKwkJCWN3ciA9IG10b2QoY2hrLT5kYXRhLCBz
dHJ1Y3Qgc2N0cF9jd3JfY2h1bmsgKik7CisJCQljdHNuID0gbnRvaGwoY3dyLT50c24pOworCQkJ
aWYgKFNDVFBfVFNOX0dUKGhpZ2hfdHNuLCBjdHNuKSkgeworCQkJCWN3ci0+dHNuID0gaHRvbmwo
aGlnaF90c24pOworCQkJfQorCQkJaWYgKG92ZXJyaWRlICYgU0NUUF9DV1JfUkVEVUNFX09WRVJS
SURFKSB7CisJCQkJLyogTWFrZSBzdXJlIG92ZXJyaWRlIGlzIGNhcnJpZWQgKi8KKwkJCQljd3It
PmNoLmNodW5rX2ZsYWdzIHw9IFNDVFBfQ1dSX1JFRFVDRV9PVkVSUklERTsKKwkJCX0KKwkJCXJl
dHVybjsKKwkJfQorCX0KKwlzY3RwX2FsbG9jX2FfY2h1bmsoc3RjYiwgY2hrKTsKKwlpZiAoY2hr
ID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKwljaGstPmNvcHlfYnlfcmVmID0gMDsKKwljaGst
PnJlYy5jaHVua19pZC5pZCA9IFNDVFBfRUNOX0NXUjsKKwljaGstPnJlYy5jaHVua19pZC5jYW5f
dGFrZV9kYXRhID0gMTsKKwljaGstPmZsYWdzID0gMDsKKwljaGstPmFzb2MgPSAmc3RjYi0+YXNv
YzsKKwljaGstPnNlbmRfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9jd3JfY2h1bmspOworCWNo
ay0+ZGF0YSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhjaGstPnNlbmRfc2l6ZSwgMCwgTV9OT1dB
SVQsIDEsIE1UX0hFQURFUik7CisJaWYgKGNoay0+ZGF0YSA9PSBOVUxMKSB7CisJCXNjdHBfZnJl
ZV9hX2NodW5rKHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJcmV0dXJuOworCX0K
KwlTQ1RQX0JVRl9SRVNWX1VGKGNoay0+ZGF0YSwgU0NUUF9NSU5fT1ZFUkhFQUQpOworCVNDVFBf
QlVGX0xFTihjaGstPmRhdGEpID0gY2hrLT5zZW5kX3NpemU7CisJY2hrLT5zZW50ID0gU0NUUF9E
QVRBR1JBTV9VTlNFTlQ7CisJY2hrLT5zbmRfY291bnQgPSAwOworCWNoay0+d2hvVG8gPSBuZXQ7
CisJYXRvbWljX2FkZF9pbnQoJmNoay0+d2hvVG8tPnJlZl9jb3VudCwgMSk7CisJY3dyID0gbXRv
ZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2N3cl9jaHVuayAqKTsKKwljd3ItPmNoLmNodW5rX3R5
cGUgPSBTQ1RQX0VDTl9DV1I7CisJY3dyLT5jaC5jaHVua19mbGFncyA9IG92ZXJyaWRlOworCWN3
ci0+Y2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoc2l6ZW9mKHN0cnVjdCBzY3RwX2N3cl9jaHVuaykp
OworCWN3ci0+dHNuID0gaHRvbmwoaGlnaF90c24pOworCVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNi
LT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1ZSwgY2hrLCBzY3RwX25leHQpOworCWFzb2MtPmN0cmxf
cXVldWVfY250Kys7Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfYWRkX3N0cmVhbV9yZXNldF9vdXQo
c3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNlcSwgdWludDMyX3QgcmVzcF9zZXEsIHVp
bnQzMl90IGxhc3Rfc2VudCkKK3sKKwl1aW50MTZfdCBsZW4sIG9sZF9sZW4sIGk7CisJc3RydWN0
IHNjdHBfc3RyZWFtX3Jlc2V0X291dF9yZXF1ZXN0ICpyZXFfb3V0OworCXN0cnVjdCBzY3RwX2No
dW5raGRyICpjaDsKKwlpbnQgYXQ7CisJaW50IG51bWJlcl9lbnRyaWVzPTA7CisKKwljaCA9IG10
b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKTsKKwlvbGRfbGVuID0gbGVuID0g
U0NUUF9TSVpFMzIobnRvaHMoY2gtPmNodW5rX2xlbmd0aCkpOworCS8qIGdldCB0byBuZXcgb2Zm
c2V0IGZvciB0aGUgcGFyYW0uICovCisJcmVxX291dCA9IChzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVz
ZXRfb3V0X3JlcXVlc3QgKikoKGNhZGRyX3QpY2ggKyBsZW4pOworCS8qIG5vdyBob3cgbG9uZyB3
aWxsIHRoaXMgcGFyYW0gYmU/ICovCisJZm9yIChpID0gMDsgaSA8IHN0Y2ItPmFzb2Muc3RyZWFt
b3V0Y250OyBpKyspIHsKKwkJaWYgKChzdGNiLT5hc29jLnN0cm1vdXRbaV0uc3RhdGUgPT0gU0NU
UF9TVFJFQU1fUkVTRVRfUEVORElORykgJiYKKwkJICAgIChzdGNiLT5hc29jLnN0cm1vdXRbaV0u
Y2h1bmtzX29uX3F1ZXVlcyA9PSAwKSAmJgorCQkgICAgVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Mu
c3RybW91dFtpXS5vdXRxdWV1ZSkpIHsKKwkJCW51bWJlcl9lbnRyaWVzKys7CisJCX0KKwl9CisJ
aWYgKG51bWJlcl9lbnRyaWVzID09IDApIHsKKwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKG51bWJl
cl9lbnRyaWVzID09IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250KSB7CisJCW51bWJlcl9lbnRyaWVz
ID0gMDsKKwl9CisJaWYgKG51bWJlcl9lbnRyaWVzID4gU0NUUF9NQVhfU1RSRUFNU19BVF9PTkNF
X1JFU0VUKSB7CisJCW51bWJlcl9lbnRyaWVzID0gU0NUUF9NQVhfU1RSRUFNU19BVF9PTkNFX1JF
U0VUOworCX0KKwlsZW4gPSAodWludDE2X3QpKHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVz
ZXRfb3V0X3JlcXVlc3QpICsgKHNpemVvZih1aW50MTZfdCkgKiBudW1iZXJfZW50cmllcykpOwor
CXJlcV9vdXQtPnBoLnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX1NUUl9SRVNFVF9PVVRfUkVRVUVT
VCk7CisJcmVxX291dC0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMobGVuKTsKKwlyZXFfb3V0LT5y
ZXF1ZXN0X3NlcSA9IGh0b25sKHNlcSk7CisJcmVxX291dC0+cmVzcG9uc2Vfc2VxID0gaHRvbmwo
cmVzcF9zZXEpOworCXJlcV9vdXQtPnNlbmRfcmVzZXRfYXRfdHNuID0gaHRvbmwobGFzdF9zZW50
KTsKKwlhdCA9IDA7CisJaWYgKG51bWJlcl9lbnRyaWVzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBz
dGNiLT5hc29jLnN0cmVhbW91dGNudDsgaSsrKSB7CisJCQlpZiAoKHN0Y2ItPmFzb2Muc3RybW91
dFtpXS5zdGF0ZSA9PSBTQ1RQX1NUUkVBTV9SRVNFVF9QRU5ESU5HKSAmJgorCQkJICAgIChzdGNi
LT5hc29jLnN0cm1vdXRbaV0uY2h1bmtzX29uX3F1ZXVlcyA9PSAwKSAmJgorCQkJICAgIFRBSUxR
X0VNUFRZKCZzdGNiLT5hc29jLnN0cm1vdXRbaV0ub3V0cXVldWUpKSB7CisJCQkJcmVxX291dC0+
bGlzdF9vZl9zdHJlYW1zW2F0XSA9IGh0b25zKGkpOworCQkJCWF0Kys7CisJCQkJc3RjYi0+YXNv
Yy5zdHJtb3V0W2ldLnN0YXRlID0gU0NUUF9TVFJFQU1fUkVTRVRfSU5fRkxJR0hUOworCQkJCWlm
IChhdCA+PSBudW1iZXJfZW50cmllcykgeworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0K
Kwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7IGkr
KykgeworCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLnN0YXRlID0gU0NUUF9TVFJFQU1fUkVTRVRf
SU5fRkxJR0hUOworCQl9CisJfQorCWlmIChTQ1RQX1NJWkUzMihsZW4pID4gbGVuKSB7CisJCS8q
LQorCQkgKiBOZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSBwYWQgd2UgbWF5IGVuZCB1cCBhZGRpbmcg
dG8gdGhlCisJCSAqIGVuZC4gVGhpcyBpcyBlYXN5IHNpbmNlIHRoZSBzdHJ1Y3QgaXMgZWl0aGVy
IGFsaWduZWQgdG8gNAorCQkgKiBieXRlcyBvciAyIGJ5dGVzIG9mZi4KKwkJICovCisJCXJlcV9v
dXQtPmxpc3Rfb2Zfc3RyZWFtc1tudW1iZXJfZW50cmllc10gPSAwOworCX0KKwkvKiBub3cgZml4
IHRoZSBjaHVuayBsZW5ndGggKi8KKwljaC0+Y2h1bmtfbGVuZ3RoID0gaHRvbnMobGVuICsgb2xk
X2xlbik7CisJY2hrLT5ib29rX3NpemUgPSBsZW4gKyBvbGRfbGVuOworCWNoay0+Ym9va19zaXpl
X3NjYWxlID0gMDsKKwljaGstPnNlbmRfc2l6ZSA9IFNDVFBfU0laRTMyKGNoay0+Ym9va19zaXpl
KTsKKwlTQ1RQX0JVRl9MRU4oY2hrLT5kYXRhKSA9IGNoay0+c2VuZF9zaXplOworCXJldHVybiAo
MSk7Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2FkZF9zdHJlYW1fcmVzZXRfaW4oc3RydWN0IHNj
dHBfdG1pdF9jaHVuayAqY2hrLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1iZXJf
ZW50cmllcywgdWludDE2X3QgKmxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy
X3Qgc2VxKQoreworCXVpbnQxNl90IGxlbiwgb2xkX2xlbiwgaTsKKwlzdHJ1Y3Qgc2N0cF9zdHJl
YW1fcmVzZXRfaW5fcmVxdWVzdCAqcmVxX2luOworCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsK
KworCWNoID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2NodW5raGRyICopOworCW9sZF9s
ZW4gPSBsZW4gPSBTQ1RQX1NJWkUzMihudG9ocyhjaC0+Y2h1bmtfbGVuZ3RoKSk7CisKKwkvKiBn
ZXQgdG8gbmV3IG9mZnNldCBmb3IgdGhlIHBhcmFtLiAqLworCXJlcV9pbiA9IChzdHJ1Y3Qgc2N0
cF9zdHJlYW1fcmVzZXRfaW5fcmVxdWVzdCAqKSgoY2FkZHJfdCljaCArIGxlbik7CisJLyogbm93
IGhvdyBsb25nIHdpbGwgdGhpcyBwYXJhbSBiZT8gKi8KKwlsZW4gPSAodWludDE2X3QpKHNpemVv
ZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfaW5fcmVxdWVzdCkgKyAoc2l6ZW9mKHVpbnQxNl90
KSAqIG51bWJlcl9lbnRyaWVzKSk7CisJcmVxX2luLT5waC5wYXJhbV90eXBlID0gaHRvbnMoU0NU
UF9TVFJfUkVTRVRfSU5fUkVRVUVTVCk7CisJcmVxX2luLT5waC5wYXJhbV9sZW5ndGggPSBodG9u
cyhsZW4pOworCXJlcV9pbi0+cmVxdWVzdF9zZXEgPSBodG9ubChzZXEpOworCWlmIChudW1iZXJf
ZW50cmllcykgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyX2VudHJpZXM7IGkrKykgeworCQkJ
cmVxX2luLT5saXN0X29mX3N0cmVhbXNbaV0gPSBodG9ucyhsaXN0W2ldKTsKKwkJfQorCX0KKwlp
ZiAoU0NUUF9TSVpFMzIobGVuKSA+IGxlbikgeworCQkvKi0KKwkJICogTmVlZCB0byB3b3JyeSBh
Ym91dCB0aGUgcGFkIHdlIG1heSBlbmQgdXAgYWRkaW5nIHRvIHRoZQorCQkgKiBlbmQuIFRoaXMg
aXMgZWFzeSBzaW5jZSB0aGUgc3RydWN0IGlzIGVpdGhlciBhbGlnbmVkIHRvIDQKKwkJICogYnl0
ZXMgb3IgMiBieXRlcyBvZmYuCisJCSAqLworCQlyZXFfaW4tPmxpc3Rfb2Zfc3RyZWFtc1tudW1i
ZXJfZW50cmllc10gPSAwOworCX0KKwkvKiBub3cgZml4IHRoZSBjaHVuayBsZW5ndGggKi8KKwlj
aC0+Y2h1bmtfbGVuZ3RoID0gaHRvbnMobGVuICsgb2xkX2xlbik7CisJY2hrLT5ib29rX3NpemUg
PSBsZW4gKyBvbGRfbGVuOworCWNoay0+Ym9va19zaXplX3NjYWxlID0gMDsKKwljaGstPnNlbmRf
c2l6ZSA9IFNDVFBfU0laRTMyKGNoay0+Ym9va19zaXplKTsKKwlTQ1RQX0JVRl9MRU4oY2hrLT5k
YXRhKSA9IGNoay0+c2VuZF9zaXplOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK3NjdHBf
YWRkX3N0cmVhbV9yZXNldF90c24oc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzZXEpCit7CisJdWludDE2X3QgbGVuLCBvbGRf
bGVuOworCXN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF90c25fcmVxdWVzdCAqcmVxX3RzbjsKKwlz
dHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2g7CisKKwljaCA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qg
c2N0cF9jaHVua2hkciAqKTsKKwlvbGRfbGVuID0gbGVuID0gU0NUUF9TSVpFMzIobnRvaHMoY2gt
PmNodW5rX2xlbmd0aCkpOworCisJLyogZ2V0IHRvIG5ldyBvZmZzZXQgZm9yIHRoZSBwYXJhbS4g
Ki8KKwlyZXFfdHNuID0gKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF90c25fcmVxdWVzdCAqKSgo
Y2FkZHJfdCljaCArIGxlbik7CisJLyogbm93IGhvdyBsb25nIHdpbGwgdGhpcyBwYXJhbSBiZT8g
Ki8KKwlsZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Rzbl9yZXF1ZXN0KTsK
KwlyZXFfdHNuLT5waC5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9TVFJfUkVTRVRfVFNOX1JFUVVF
U1QpOworCXJlcV90c24tPnBoLnBhcmFtX2xlbmd0aCA9IGh0b25zKGxlbik7CisJcmVxX3Rzbi0+
cmVxdWVzdF9zZXEgPSBodG9ubChzZXEpOworCisJLyogbm93IGZpeCB0aGUgY2h1bmsgbGVuZ3Ro
ICovCisJY2gtPmNodW5rX2xlbmd0aCA9IGh0b25zKGxlbiArIG9sZF9sZW4pOworCWNoay0+c2Vu
ZF9zaXplID0gbGVuICsgb2xkX2xlbjsKKwljaGstPmJvb2tfc2l6ZSA9IFNDVFBfU0laRTMyKGNo
ay0+c2VuZF9zaXplKTsKKwljaGstPmJvb2tfc2l6ZV9zY2FsZSA9IDA7CisJU0NUUF9CVUZfTEVO
KGNoay0+ZGF0YSkgPSBTQ1RQX1NJWkUzMihjaGstPnNlbmRfc2l6ZSk7CisJcmV0dXJuOworfQor
Cit2b2lkCitzY3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0KHN0cnVjdCBzY3RwX3RtaXRfY2h1
bmsgKmNoaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcmVzcF9zZXEs
IHVpbnQzMl90IHJlc3VsdCkKK3sKKwl1aW50MTZfdCBsZW4sIG9sZF9sZW47CisJc3RydWN0IHNj
dHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlICpyZXNwOworCXN0cnVjdCBzY3RwX2NodW5raGRyICpj
aDsKKworCWNoID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2NodW5raGRyICopOworCW9s
ZF9sZW4gPSBsZW4gPSBTQ1RQX1NJWkUzMihudG9ocyhjaC0+Y2h1bmtfbGVuZ3RoKSk7CisKKwkv
KiBnZXQgdG8gbmV3IG9mZnNldCBmb3IgdGhlIHBhcmFtLiAqLworCXJlc3AgPSAoc3RydWN0IHNj
dHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlICopKChjYWRkcl90KWNoICsgbGVuKTsKKwkvKiBub3cg
aG93IGxvbmcgd2lsbCB0aGlzIHBhcmFtIGJlPyAqLworCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0
cF9zdHJlYW1fcmVzZXRfcmVzcG9uc2UpOworCXJlc3AtPnBoLnBhcmFtX3R5cGUgPSBodG9ucyhT
Q1RQX1NUUl9SRVNFVF9SRVNQT05TRSk7CisJcmVzcC0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMo
bGVuKTsKKwlyZXNwLT5yZXNwb25zZV9zZXEgPSBodG9ubChyZXNwX3NlcSk7CisJcmVzcC0+cmVz
dWx0ID0gbnRvaGwocmVzdWx0KTsKKworCS8qIG5vdyBmaXggdGhlIGNodW5rIGxlbmd0aCAqLwor
CWNoLT5jaHVua19sZW5ndGggPSBodG9ucyhsZW4gKyBvbGRfbGVuKTsKKwljaGstPmJvb2tfc2l6
ZSA9IGxlbiArIG9sZF9sZW47CisJY2hrLT5ib29rX3NpemVfc2NhbGUgPSAwOworCWNoay0+c2Vu
ZF9zaXplID0gU0NUUF9TSVpFMzIoY2hrLT5ib29rX3NpemUpOworCVNDVFBfQlVGX0xFTihjaGst
PmRhdGEpID0gY2hrLT5zZW5kX3NpemU7CisJcmV0dXJuOworfQorCit2b2lkCitzY3RwX3NlbmRf
ZGVmZXJyZWRfcmVzZXRfcmVzcG9uc2Uoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkJCSBzdHJ1
Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfbGlzdCAqZW50LAorCQkJCSBpbnQgcmVzcG9uc2UpCit7CisJ
c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAq
Y2hrOworCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKKworCWFzb2MgPSAmc3RjYi0+YXNvYzsK
KworCS8qCisJICogUmVzZXQgb3VyIGxhc3QgcmVzZXQgYWN0aW9uIHRvIHRoZSBuZXcgb25lIElQ
IC0+IHJlc3BvbnNlCisJICogKFBFUkZPUk1FRCBwcm9iYWJseSkuIFRoaXMgYXNzdXJlcyB0aGF0
IGlmIHdlIGZhaWwgdG8gc2VuZCwgYQorCSAqIHJldHJhbiBmcm9tIHRoZSBwZWVyIHdpbGwgZ2V0
IHRoZSBuZXcgcmVzcG9uc2UuCisJICovCisJYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0gPSBy
ZXNwb25zZTsKKwlpZiAoYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKSB7CisJCXJldHVy
bjsKKwl9CisJc2N0cF9hbGxvY19hX2NodW5rKHN0Y2IsIGNoayk7CisJaWYgKGNoayA9PSBOVUxM
KSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfT1VUUFVULCBFTk9NRU0pOworCQlyZXR1cm47CisJfQorCWNoay0+Y29weV9ieV9yZWYgPSAw
OworCWNoay0+cmVjLmNodW5rX2lkLmlkID0gU0NUUF9TVFJFQU1fUkVTRVQ7CisJY2hrLT5yZWMu
Y2h1bmtfaWQuY2FuX3Rha2VfZGF0YSA9IDA7CisJY2hrLT5mbGFncyA9IDA7CisJY2hrLT5hc29j
ID0gJnN0Y2ItPmFzb2M7CisJY2hrLT5ib29rX3NpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfY2h1
bmtoZHIpOworCWNoay0+c2VuZF9zaXplID0gU0NUUF9TSVpFMzIoY2hrLT5ib29rX3NpemUpOwor
CWNoay0+Ym9va19zaXplX3NjYWxlID0gMDsKKwljaGstPmRhdGEgPSBzY3RwX2dldF9tYnVmX2Zv
cl9tc2coTUNMQllURVMsIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwlpZiAoY2hrLT5kYXRh
ID09IE5VTEwpIHsKKwkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBTQ1RQX1NPX0xPQ0tF
RCk7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfT1VUUFVULCBFTk9NRU0pOworCQlyZXR1cm47CisJfQorCVNDVFBfQlVGX1JFU1ZfVUYoY2hr
LT5kYXRhLCBTQ1RQX01JTl9PVkVSSEVBRCk7CisJLyogc2V0dXAgY2h1bmsgcGFyYW1ldGVycyAq
LworCWNoay0+c2VudCA9IFNDVFBfREFUQUdSQU1fVU5TRU5UOworCWNoay0+c25kX2NvdW50ID0g
MDsKKwlpZiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsKKwkJY2hrLT53aG9UbyA9IHN0Y2ItPmFz
b2MuYWx0ZXJuYXRlOworCX0gZWxzZSB7CisJCWNoay0+d2hvVG8gPSBzdGNiLT5hc29jLnByaW1h
cnlfZGVzdGluYXRpb247CisJfQorCWNoID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2No
dW5raGRyICopOworCWNoLT5jaHVua190eXBlID0gU0NUUF9TVFJFQU1fUkVTRVQ7CisJY2gtPmNo
dW5rX2ZsYWdzID0gMDsKKwljaC0+Y2h1bmtfbGVuZ3RoID0gaHRvbnMoY2hrLT5ib29rX3NpemUp
OworCWF0b21pY19hZGRfaW50KCZjaGstPndob1RvLT5yZWZfY291bnQsIDEpOworCVNDVFBfQlVG
X0xFTihjaGstPmRhdGEpID0gY2hrLT5zZW5kX3NpemU7CisJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0
X3Jlc3VsdChjaGssIGVudC0+c2VxLCByZXNwb25zZSk7CisJLyogaW5zZXJ0IHRoZSBjaHVuayBm
b3Igc2VuZGluZyAqLworCVRBSUxRX0lOU0VSVF9UQUlMKCZhc29jLT5jb250cm9sX3NlbmRfcXVl
dWUsCisJCQkgIGNoaywKKwkJCSAgc2N0cF9uZXh0KTsKKwlhc29jLT5jdHJsX3F1ZXVlX2NudCsr
OworfQorCit2b2lkCitzY3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0X3RzbihzdHJ1Y3Qgc2N0
cF90bWl0X2NodW5rICpjaGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
MzJfdCByZXNwX3NlcSwgdWludDMyX3QgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3Qgc2VuZF91bmEsIHVpbnQzMl90IHJlY3ZfbmV4dCkKK3sKKwl1aW50
MTZfdCBsZW4sIG9sZF9sZW47CisJc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlX3Rz
biAqcmVzcDsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2g7CisKKwljaCA9IG10b2QoY2hrLT5k
YXRhLCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKTsKKwlvbGRfbGVuID0gbGVuID0gU0NUUF9TSVpF
MzIobnRvaHMoY2gtPmNodW5rX2xlbmd0aCkpOworCisJLyogZ2V0IHRvIG5ldyBvZmZzZXQgZm9y
IHRoZSBwYXJhbS4gKi8KKwlyZXNwID0gKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9yZXNwb25z
ZV90c24gKikoKGNhZGRyX3QpY2ggKyBsZW4pOworCS8qIG5vdyBob3cgbG9uZyB3aWxsIHRoaXMg
cGFyYW0gYmU/ICovCisJbGVuID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9yZXNw
b25zZV90c24pOworCXJlc3AtPnBoLnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX1NUUl9SRVNFVF9S
RVNQT05TRSk7CisJcmVzcC0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMobGVuKTsKKwlyZXNwLT5y
ZXNwb25zZV9zZXEgPSBodG9ubChyZXNwX3NlcSk7CisJcmVzcC0+cmVzdWx0ID0gaHRvbmwocmVz
dWx0KTsKKwlyZXNwLT5zZW5kZXJzX25leHRfdHNuID0gaHRvbmwoc2VuZF91bmEpOworCXJlc3At
PnJlY2VpdmVyc19uZXh0X3RzbiA9IGh0b25sKHJlY3ZfbmV4dCk7CisKKwkvKiBub3cgZml4IHRo
ZSBjaHVuayBsZW5ndGggKi8KKwljaC0+Y2h1bmtfbGVuZ3RoID0gaHRvbnMobGVuICsgb2xkX2xl
bik7CisJY2hrLT5ib29rX3NpemUgPSBsZW4gKyBvbGRfbGVuOworCWNoay0+c2VuZF9zaXplID0g
U0NUUF9TSVpFMzIoY2hrLT5ib29rX3NpemUpOworCWNoay0+Ym9va19zaXplX3NjYWxlID0gMDsK
KwlTQ1RQX0JVRl9MRU4oY2hrLT5kYXRhKSA9IGNoay0+c2VuZF9zaXplOworCXJldHVybjsKK30K
Kworc3RhdGljIHZvaWQKK3NjdHBfYWRkX2FuX291dF9zdHJlYW0oc3RydWN0IHNjdHBfdG1pdF9j
aHVuayAqY2hrLAorCQkgICAgICAgdWludDMyX3Qgc2VxLAorCQkgICAgICAgdWludDE2X3QgYWRk
aW5nKQoreworCXVpbnQxNl90IGxlbiwgb2xkX2xlbjsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAq
Y2g7CisJc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2FkZF9zdHJtICphZGRzdHI7CisKKwljaCA9
IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKTsKKwlvbGRfbGVuID0gbGVu
ID0gU0NUUF9TSVpFMzIobnRvaHMoY2gtPmNodW5rX2xlbmd0aCkpOworCisJLyogZ2V0IHRvIG5l
dyBvZmZzZXQgZm9yIHRoZSBwYXJhbS4gKi8KKwlhZGRzdHIgPSAoc3RydWN0IHNjdHBfc3RyZWFt
X3Jlc2V0X2FkZF9zdHJtICopKChjYWRkcl90KWNoICsgbGVuKTsKKwkvKiBub3cgaG93IGxvbmcg
d2lsbCB0aGlzIHBhcmFtIGJlPyAqLworCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1f
cmVzZXRfYWRkX3N0cm0pOworCisJLyogRmlsbCBpdCBvdXQuICovCisJYWRkc3RyLT5waC5wYXJh
bV90eXBlID0gaHRvbnMoU0NUUF9TVFJfUkVTRVRfQUREX09VVF9TVFJFQU1TKTsKKwlhZGRzdHIt
PnBoLnBhcmFtX2xlbmd0aCA9IGh0b25zKGxlbik7CisJYWRkc3RyLT5yZXF1ZXN0X3NlcSA9IGh0
b25sKHNlcSk7CisJYWRkc3RyLT5udW1iZXJfb2Zfc3RyZWFtcyA9IGh0b25zKGFkZGluZyk7CisJ
YWRkc3RyLT5yZXNlcnZlZCA9IDA7CisKKwkvKiBub3cgZml4IHRoZSBjaHVuayBsZW5ndGggKi8K
KwljaC0+Y2h1bmtfbGVuZ3RoID0gaHRvbnMobGVuICsgb2xkX2xlbik7CisJY2hrLT5zZW5kX3Np
emUgPSBsZW4gKyBvbGRfbGVuOworCWNoay0+Ym9va19zaXplID0gU0NUUF9TSVpFMzIoY2hrLT5z
ZW5kX3NpemUpOworCWNoay0+Ym9va19zaXplX3NjYWxlID0gMDsKKwlTQ1RQX0JVRl9MRU4oY2hr
LT5kYXRhKSA9IFNDVFBfU0laRTMyKGNoay0+c2VuZF9zaXplKTsKKwlyZXR1cm47Cit9CisKK3N0
YXRpYyB2b2lkCitzY3RwX2FkZF9hbl9pbl9zdHJlYW0oc3RydWN0IHNjdHBfdG1pdF9jaHVuayAq
Y2hrLAorICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNlcSwKKyAgICAgICAgICAgICAg
ICAgICAgICB1aW50MTZfdCBhZGRpbmcpCit7CisJdWludDE2X3QgbGVuLCBvbGRfbGVuOworCXN0
cnVjdCBzY3RwX2NodW5raGRyICpjaDsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfYWRkX3N0
cm0gKmFkZHN0cjsKKworCWNoID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2NodW5raGRy
ICopOworCW9sZF9sZW4gPSBsZW4gPSBTQ1RQX1NJWkUzMihudG9ocyhjaC0+Y2h1bmtfbGVuZ3Ro
KSk7CisKKwkvKiBnZXQgdG8gbmV3IG9mZnNldCBmb3IgdGhlIHBhcmFtLiAqLworCWFkZHN0ciA9
IChzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfYWRkX3N0cm0gKikoKGNhZGRyX3QpY2ggKyBsZW4p
OworCS8qIG5vdyBob3cgbG9uZyB3aWxsIHRoaXMgcGFyYW0gYmU/ICovCisJbGVuID0gc2l6ZW9m
KHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9hZGRfc3RybSk7CisJLyogRmlsbCBpdCBvdXQuICov
CisJYWRkc3RyLT5waC5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9TVFJfUkVTRVRfQUREX0lOX1NU
UkVBTVMpOworCWFkZHN0ci0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMobGVuKTsKKwlhZGRzdHIt
PnJlcXVlc3Rfc2VxID0gaHRvbmwoc2VxKTsKKwlhZGRzdHItPm51bWJlcl9vZl9zdHJlYW1zID0g
aHRvbnMoYWRkaW5nKTsKKwlhZGRzdHItPnJlc2VydmVkID0gMDsKKworCS8qIG5vdyBmaXggdGhl
IGNodW5rIGxlbmd0aCAqLworCWNoLT5jaHVua19sZW5ndGggPSBodG9ucyhsZW4gKyBvbGRfbGVu
KTsKKwljaGstPnNlbmRfc2l6ZSA9IGxlbiArIG9sZF9sZW47CisJY2hrLT5ib29rX3NpemUgPSBT
Q1RQX1NJWkUzMihjaGstPnNlbmRfc2l6ZSk7CisJY2hrLT5ib29rX3NpemVfc2NhbGUgPSAwOwor
CVNDVFBfQlVGX0xFTihjaGstPmRhdGEpID0gU0NUUF9TSVpFMzIoY2hrLT5zZW5kX3NpemUpOwor
CXJldHVybjsKK30KKworaW50CitzY3RwX3NlbmRfc3RyZWFtX3Jlc2V0X291dF9pZl9wb3NzaWJs
ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCBzb19sb2NrZWQpCit7CisJc3RydWN0IHNjdHBf
YXNzb2NpYXRpb24gKmFzb2M7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOworCXN0cnVj
dCBzY3RwX2NodW5raGRyICpjaDsKKwl1aW50MzJfdCBzZXE7CisKKwlhc29jID0gJnN0Y2ItPmFz
b2M7CisJYXNvYy0+dHJpZ2dlcl9yZXNldCA9IDA7CisJaWYgKGFzb2MtPnN0cmVhbV9yZXNldF9v
dXRzdGFuZGluZykgeworCQlyZXR1cm4gKEVBTFJFQURZKTsKKwl9CisJc2N0cF9hbGxvY19hX2No
dW5rKHN0Y2IsIGNoayk7CisJaWYgKGNoayA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOworCQly
ZXR1cm4gKEVOT01FTSk7CisJfQorCWNoay0+Y29weV9ieV9yZWYgPSAwOworCWNoay0+cmVjLmNo
dW5rX2lkLmlkID0gU0NUUF9TVFJFQU1fUkVTRVQ7CisJY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rh
a2VfZGF0YSA9IDA7CisJY2hrLT5mbGFncyA9IDA7CisJY2hrLT5hc29jID0gJnN0Y2ItPmFzb2M7
CisJY2hrLT5ib29rX3NpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpOworCWNoay0+
c2VuZF9zaXplID0gU0NUUF9TSVpFMzIoY2hrLT5ib29rX3NpemUpOworCWNoay0+Ym9va19zaXpl
X3NjYWxlID0gMDsKKwljaGstPmRhdGEgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coTUNMQllURVMs
IDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwlpZiAoY2hrLT5kYXRhID09IE5VTEwpIHsKKwkJ
c2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBzb19sb2NrZWQpOworCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRU5PTUVNKTsK
KwkJcmV0dXJuIChFTk9NRU0pOworCX0KKwlTQ1RQX0JVRl9SRVNWX1VGKGNoay0+ZGF0YSwgU0NU
UF9NSU5fT1ZFUkhFQUQpOworCisJLyogc2V0dXAgY2h1bmsgcGFyYW1ldGVycyAqLworCWNoay0+
c2VudCA9IFNDVFBfREFUQUdSQU1fVU5TRU5UOworCWNoay0+c25kX2NvdW50ID0gMDsKKwlpZiAo
c3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsKKwkJY2hrLT53aG9UbyA9IHN0Y2ItPmFzb2MuYWx0ZXJu
YXRlOworCX0gZWxzZSB7CisJCWNoay0+d2hvVG8gPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGlu
YXRpb247CisJfQorCWNoID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2NodW5raGRyICop
OworCWNoLT5jaHVua190eXBlID0gU0NUUF9TVFJFQU1fUkVTRVQ7CisJY2gtPmNodW5rX2ZsYWdz
ID0gMDsKKwljaC0+Y2h1bmtfbGVuZ3RoID0gaHRvbnMoY2hrLT5ib29rX3NpemUpOworCWF0b21p
Y19hZGRfaW50KCZjaGstPndob1RvLT5yZWZfY291bnQsIDEpOworCVNDVFBfQlVGX0xFTihjaGst
PmRhdGEpID0gY2hrLT5zZW5kX3NpemU7CisJc2VxID0gc3RjYi0+YXNvYy5zdHJfcmVzZXRfc2Vx
X291dDsKKwlpZiAoc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X291dChzdGNiLCBjaGssIHNlcSwgKHN0
Y2ItPmFzb2Muc3RyX3Jlc2V0X3NlcV9pbiAtIDEpLCAoc3RjYi0+YXNvYy5zZW5kaW5nX3NlcSAt
IDEpKSkgeworCQlzZXErKzsKKwkJYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKys7CisJ
fSBlbHNlIHsKKwkJbV9mcmVlbShjaGstPmRhdGEpOworCQljaGstPmRhdGEgPSBOVUxMOworCQlz
Y3RwX2ZyZWVfYV9jaHVuayhzdGNiLCBjaGssIHNvX2xvY2tlZCk7CisJCXJldHVybiAoRU5PRU5U
KTsKKwl9CisJYXNvYy0+c3RyX3Jlc2V0ID0gY2hrOworCS8qIGluc2VydCB0aGUgY2h1bmsgZm9y
IHNlbmRpbmcgKi8KKwlUQUlMUV9JTlNFUlRfVEFJTCgmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVl
LAorCQkJICBjaGssCisJCQkgIHNjdHBfbmV4dCk7CisJYXNvYy0+Y3RybF9xdWV1ZV9jbnQrKzsK
KworCWlmIChzdGNiLT5hc29jLnNlbmRfc2FjaykgeworCQlzY3RwX3NlbmRfc2FjayhzdGNiLCBz
b19sb2NrZWQpOworCX0KKwlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TVFJSRVNF
VCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgY2hrLT53aG9Ubyk7CisJcmV0dXJuICgwKTsKK30KKwor
aW50CitzY3RwX3NlbmRfc3RyX3Jlc2V0X3JlcShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBudW1iZXJfZW50cmllcywgdWludDE2X3QgKmxp
c3QsCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHNlbmRfaW5fcmVxLAorICAgICAg
ICAgICAgICAgICAgICAgICAgdWludDhfdCBzZW5kX3Rzbl9yZXEsCisgICAgICAgICAgICAgICAg
ICAgICAgICB1aW50OF90IGFkZF9zdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50
MTZfdCBhZGRpbmdfbywKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFkZGluZ19p
LCB1aW50OF90IHBlZXJfYXNrZWQpCit7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7
CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOworCXN0cnVjdCBzY3RwX2NodW5raGRyICpj
aDsKKwlpbnQgY2FuX3NlbmRfb3V0X3JlcT0wOworCXVpbnQzMl90IHNlcTsKKworCWFzb2MgPSAm
c3RjYi0+YXNvYzsKKwlpZiAoYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKSB7CisJCS8q
LQorCQkgKiBBbHJlYWR5IG9uZSBwZW5kaW5nLCBtdXN0IGdldCBBQ0sgYmFjayB0byBjbGVhciB0
aGUgZmxhZy4KKwkJICovCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFQlVTWSk7CisJCXJldHVybiAoRUJVU1kpOworCX0KKwlp
ZiAoKHNlbmRfaW5fcmVxID09IDApICYmIChzZW5kX3Rzbl9yZXEgPT0gMCkgJiYKKwkgICAgKGFk
ZF9zdHJlYW0gPT0gMCkpIHsKKwkJLyogbm90aGluZyB0byBkbyAqLworCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlOVkFMKTsK
KwkJcmV0dXJuIChFSU5WQUwpOworCX0KKwlpZiAoc2VuZF90c25fcmVxICYmIHNlbmRfaW5fcmVx
KSB7CisJCS8qIGVycm9yLCBjYW4ndCBkbyB0aGF0ICovCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
TlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOworCQlyZXR1
cm4gKEVJTlZBTCk7CisJfSBlbHNlIGlmIChzZW5kX2luX3JlcSkgeworCQljYW5fc2VuZF9vdXRf
cmVxID0gMTsKKwl9CisJaWYgKG51bWJlcl9lbnRyaWVzID4gKE1DTEJZVEVTIC0KKwkgICAgICAg
ICAgICAgICAgICAgICAgU0NUUF9NSU5fT1ZFUkhFQUQgLQorCSAgICAgICAgICAgICAgICAgICAg
ICBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpIC0KKwkgICAgICAgICAgICAgICAgICAgICAg
c2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9vdXRfcmVxdWVzdCkpIC8KKwkgICAgICAg
ICAgICAgICAgICAgICBzaXplb2YodWludDE2X3QpKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
TlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOworCQlyZXR1
cm4gKEVOT01FTSk7CisJfQorCXNjdHBfYWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOworCWlmIChj
aGsgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX09VVFBVVCwgRU5PTUVNKTsKKwkJcmV0dXJuIChFTk9NRU0pOworCX0KKwlj
aGstPmNvcHlfYnlfcmVmID0gMDsKKwljaGstPnJlYy5jaHVua19pZC5pZCA9IFNDVFBfU1RSRUFN
X1JFU0VUOworCWNoay0+cmVjLmNodW5rX2lkLmNhbl90YWtlX2RhdGEgPSAwOworCWNoay0+Zmxh
Z3MgPSAwOworCWNoay0+YXNvYyA9ICZzdGNiLT5hc29jOworCWNoay0+Ym9va19zaXplID0gc2l6
ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKTsKKwljaGstPnNlbmRfc2l6ZSA9IFNDVFBfU0laRTMy
KGNoay0+Ym9va19zaXplKTsKKwljaGstPmJvb2tfc2l6ZV9zY2FsZSA9IDA7CisJY2hrLT5kYXRh
ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKE1DTEJZVEVTLCAwLCBNX05PV0FJVCwgMSwgTVRfREFU
QSk7CisJaWYgKGNoay0+ZGF0YSA9PSBOVUxMKSB7CisJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2Is
IGNoaywgU0NUUF9TT19MT0NLRUQpOworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2Is
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRU5PTUVNKTsKKwkJcmV0dXJuIChFTk9NRU0p
OworCX0KKwlTQ1RQX0JVRl9SRVNWX1VGKGNoay0+ZGF0YSwgU0NUUF9NSU5fT1ZFUkhFQUQpOwor
CisJLyogc2V0dXAgY2h1bmsgcGFyYW1ldGVycyAqLworCWNoay0+c2VudCA9IFNDVFBfREFUQUdS
QU1fVU5TRU5UOworCWNoay0+c25kX2NvdW50ID0gMDsKKwlpZiAoc3RjYi0+YXNvYy5hbHRlcm5h
dGUpIHsKKwkJY2hrLT53aG9UbyA9IHN0Y2ItPmFzb2MuYWx0ZXJuYXRlOworCX0gZWxzZSB7CisJ
CWNoay0+d2hvVG8gPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb247CisJfQorCWF0b21p
Y19hZGRfaW50KCZjaGstPndob1RvLT5yZWZfY291bnQsIDEpOworCWNoID0gbXRvZChjaGstPmRh
dGEsIHN0cnVjdCBzY3RwX2NodW5raGRyICopOworCWNoLT5jaHVua190eXBlID0gU0NUUF9TVFJF
QU1fUkVTRVQ7CisJY2gtPmNodW5rX2ZsYWdzID0gMDsKKwljaC0+Y2h1bmtfbGVuZ3RoID0gaHRv
bnMoY2hrLT5ib29rX3NpemUpOworCVNDVFBfQlVGX0xFTihjaGstPmRhdGEpID0gY2hrLT5zZW5k
X3NpemU7CisKKwlzZXEgPSBzdGNiLT5hc29jLnN0cl9yZXNldF9zZXFfb3V0OworCWlmIChjYW5f
c2VuZF9vdXRfcmVxKSB7CisJCWludCByZXQ7CisJICAgICAgICByZXQgPSBzY3RwX2FkZF9zdHJl
YW1fcmVzZXRfb3V0KHN0Y2IsIGNoaywgc2VxLCAoc3RjYi0+YXNvYy5zdHJfcmVzZXRfc2VxX2lu
IC0gMSksIChzdGNiLT5hc29jLnNlbmRpbmdfc2VxIC0gMSkpOworCQlpZiAocmV0KSB7CisJCQlz
ZXErKzsKKwkJCWFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZysrOworCQl9CisJfQorCWlm
ICgoYWRkX3N0cmVhbSAmIDEpICYmCisJICAgICgoc3RjYi0+YXNvYy5zdHJtX3JlYWxvdXRzaXpl
IC0gc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQpIDwgYWRkaW5nX28pKSB7CisJCS8qIE5lZWQgdG8g
YWxsb2NhdGUgbW9yZSAqLworCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpvbGRzdHJlYW07CisJ
CXN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCwgKm5zcDsKKwkJaW50IGk7Cisj
aWYgZGVmaW5lZChTQ1RQX0RFVEFJTEVEX1NUUl9TVEFUUykKKwkJaW50IGo7CisjZW5kaWYKKwor
CQlvbGRzdHJlYW0gPSBzdGNiLT5hc29jLnN0cm1vdXQ7CisJCS8qIGdldCBzb21lIG1vcmUgKi8K
KwkJU0NUUF9NQUxMT0Moc3RjYi0+YXNvYy5zdHJtb3V0LCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0
ICosCisJCQkgICAgKHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250ICsgYWRkaW5nX28pICogc2l6ZW9m
KHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQpLAorCQkJICAgIFNDVFBfTV9TVFJNTyk7CisJCWlmIChz
dGNiLT5hc29jLnN0cm1vdXQgPT0gTlVMTCkgeworCQkJdWludDhfdCB4OworCQkJc3RjYi0+YXNv
Yy5zdHJtb3V0ID0gb2xkc3RyZWFtOworCQkJLyogVHVybiBvZmYgdGhlIGJpdCAqLworCQkJeCA9
IGFkZF9zdHJlYW0gJiAweGZlOworCQkJYWRkX3N0cmVhbSA9IHg7CisJCQlnb3RvIHNraXBfc3R1
ZmY7CisJCX0KKwkJLyogT2sgbm93IHdlIHByb2NlZWQgd2l0aCBjb3B5aW5nIHRoZSBvbGQgb3V0
IHN0dWZmIGFuZAorCQkgKiBpbml0aWFsaXppbmcgdGhlIG5ldyBzdHVmZi4KKwkJICovCisJCVND
VFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKKwkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9z
c19jbGVhcihzdGNiLCAmc3RjYi0+YXNvYywgMCwgMSk7CisJCWZvciAoaSA9IDA7IGkgPCBzdGNi
LT5hc29jLnN0cmVhbW91dGNudDsgaSsrKSB7CisJCQlUQUlMUV9JTklUKCZzdGNiLT5hc29jLnN0
cm1vdXRbaV0ub3V0cXVldWUpOworCQkJLyogRklYIE1FIEZJWCBNRSAqLworCQkJLyogVGhpcyBz
aG91bGQgYmUgYSBTU19DT1BZIG9wZXJhdGlvbiBGSVggTUUgU1RSRUFNIFNDSEVEVUxFUiBFWFBF
UlQgKi8KKwkJCXN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3NfaW5pdF9zdHJlYW0oc3Rj
YiwgJnN0Y2ItPmFzb2Muc3RybW91dFtpXSwgJm9sZHN0cmVhbVtpXSk7CisJCQlzdGNiLT5hc29j
LnN0cm1vdXRbaV0uY2h1bmtzX29uX3F1ZXVlcyA9IG9sZHN0cmVhbVtpXS5jaHVua3Nfb25fcXVl
dWVzOworI2lmIGRlZmluZWQoU0NUUF9ERVRBSUxFRF9TVFJfU1RBVFMpCisJCQlmb3IgKGogPSAw
OyBqIDwgU0NUUF9QUl9TQ1RQX01BWCArIDE7IGorKykgeworCQkJCXN0Y2ItPmFzb2Muc3RybW91
dFtpXS5hYmFuZG9uZWRfc2VudFtqXSA9IG9sZHN0cmVhbVtpXS5hYmFuZG9uZWRfc2VudFtqXTsK
KwkJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uYWJhbmRvbmVkX3Vuc2VudFtqXSA9IG9sZHN0cmVh
bVtpXS5hYmFuZG9uZWRfdW5zZW50W2pdOworCQkJfQorI2Vsc2UKKwkJCXN0Y2ItPmFzb2Muc3Ry
bW91dFtpXS5hYmFuZG9uZWRfc2VudFswXSA9IG9sZHN0cmVhbVtpXS5hYmFuZG9uZWRfc2VudFsw
XTsKKwkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5hYmFuZG9uZWRfdW5zZW50WzBdID0gb2xkc3Ry
ZWFtW2ldLmFiYW5kb25lZF91bnNlbnRbMF07CisjZW5kaWYKKwkJCXN0Y2ItPmFzb2Muc3RybW91
dFtpXS5uZXh0X21pZF9vcmRlcmVkID0gb2xkc3RyZWFtW2ldLm5leHRfbWlkX29yZGVyZWQ7CisJ
CQlzdGNiLT5hc29jLnN0cm1vdXRbaV0ubmV4dF9taWRfdW5vcmRlcmVkID0gb2xkc3RyZWFtW2ld
Lm5leHRfbWlkX3Vub3JkZXJlZDsKKwkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5sYXN0X21zZ19p
bmNvbXBsZXRlID0gb2xkc3RyZWFtW2ldLmxhc3RfbXNnX2luY29tcGxldGU7CisJCQlzdGNiLT5h
c29jLnN0cm1vdXRbaV0uc2lkID0gaTsKKwkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5zdGF0ZSA9
IG9sZHN0cmVhbVtpXS5zdGF0ZTsKKwkJCS8qIG5vdyBhbnl0aGluZyBvbiB0aG9zZSBxdWV1ZXM/
ICovCisJCQlUQUlMUV9GT1JFQUNIX1NBRkUoc3AsICZvbGRzdHJlYW1baV0ub3V0cXVldWUsIG5l
eHQsIG5zcCkgeworCQkJCVRBSUxRX1JFTU9WRSgmb2xkc3RyZWFtW2ldLm91dHF1ZXVlLCBzcCwg
bmV4dCk7CisJCQkJVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2ItPmFzb2Muc3RybW91dFtpXS5vdXRx
dWV1ZSwgc3AsIG5leHQpOworCQkJfQorCQl9CisJCS8qIG5vdyB0aGUgbmV3IHN0cmVhbXMgKi8K
KwkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19pbml0KHN0Y2IsICZzdGNiLT5hc29j
LCAxKTsKKwkJZm9yIChpID0gc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7IGkgPCAoc3RjYi0+YXNv
Yy5zdHJlYW1vdXRjbnQgKyBhZGRpbmdfbyk7IGkrKykgeworCQkJVEFJTFFfSU5JVCgmc3RjYi0+
YXNvYy5zdHJtb3V0W2ldLm91dHF1ZXVlKTsKKwkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5jaHVu
a3Nfb25fcXVldWVzID0gMDsKKyNpZiBkZWZpbmVkKFNDVFBfREVUQUlMRURfU1RSX1NUQVRTKQor
CQkJZm9yIChqID0gMDsgaiA8IFNDVFBfUFJfU0NUUF9NQVggKyAxOyBqKyspIHsKKwkJCQlzdGNi
LT5hc29jLnN0cm1vdXRbaV0uYWJhbmRvbmVkX3NlbnRbal0gPSAwOworCQkJCXN0Y2ItPmFzb2Mu
c3RybW91dFtpXS5hYmFuZG9uZWRfdW5zZW50W2pdID0gMDsKKwkJCX0KKyNlbHNlCisJCQlzdGNi
LT5hc29jLnN0cm1vdXRbaV0uYWJhbmRvbmVkX3NlbnRbMF0gPSAwOworCQkJc3RjYi0+YXNvYy5z
dHJtb3V0W2ldLmFiYW5kb25lZF91bnNlbnRbMF0gPSAwOworI2VuZGlmCisJCQlzdGNiLT5hc29j
LnN0cm1vdXRbaV0ubmV4dF9taWRfb3JkZXJlZCA9IDA7CisJCQlzdGNiLT5hc29jLnN0cm1vdXRb
aV0ubmV4dF9taWRfdW5vcmRlcmVkID0gMDsKKwkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5zaWQg
PSBpOworCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLmxhc3RfbXNnX2luY29tcGxldGUgPSAwOwor
CQkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19pbml0X3N0cmVhbShzdGNiLCAmc3Rj
Yi0+YXNvYy5zdHJtb3V0W2ldLCBOVUxMKTsKKwkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5zdGF0
ZSA9IFNDVFBfU1RSRUFNX0NMT1NFRDsKKwkJfQorCQlzdGNiLT5hc29jLnN0cm1fcmVhbG91dHNp
emUgPSBzdGNiLT5hc29jLnN0cmVhbW91dGNudCArIGFkZGluZ19vOworCQlTQ1RQX0ZSRUUob2xk
c3RyZWFtLCBTQ1RQX01fU1RSTU8pOworCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKKwl9
Citza2lwX3N0dWZmOgorCWlmICgoYWRkX3N0cmVhbSAmIDEpICYmIChhZGRpbmdfbyA+IDApKSB7
CisJCWFzb2MtPnN0cm1fcGVuZGluZ19hZGRfc2l6ZSA9IGFkZGluZ19vOworCQlhc29jLT5wZWVy
X3JlcV9vdXQgPSBwZWVyX2Fza2VkOworCQlzY3RwX2FkZF9hbl9vdXRfc3RyZWFtKGNoaywgc2Vx
LCBhZGRpbmdfbyk7CisJCXNlcSsrOworCQlhc29jLT5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcr
KzsKKwl9CisJaWYgKChhZGRfc3RyZWFtICYgMikgJiYgKGFkZGluZ19pID4gMCkpIHsKKwkJc2N0
cF9hZGRfYW5faW5fc3RyZWFtKGNoaywgc2VxLCBhZGRpbmdfaSk7CisJCXNlcSsrOworCQlhc29j
LT5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcrKzsKKwl9CisJaWYgKHNlbmRfaW5fcmVxKSB7CisJ
CXNjdHBfYWRkX3N0cmVhbV9yZXNldF9pbihjaGssIG51bWJlcl9lbnRyaWVzLCBsaXN0LCBzZXEp
OworCQlzZXErKzsKKwkJYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKys7CisJfQorCWlm
IChzZW5kX3Rzbl9yZXEpIHsKKwkJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3RzbihjaGssIHNlcSk7
CisJCWFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZysrOworCX0KKwlhc29jLT5zdHJfcmVz
ZXQgPSBjaGs7CisJLyogaW5zZXJ0IHRoZSBjaHVuayBmb3Igc2VuZGluZyAqLworCVRBSUxRX0lO
U0VSVF9UQUlMKCZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsCisJCQkgIGNoaywKKwkJCSAgc2N0
cF9uZXh0KTsKKwlhc29jLT5jdHJsX3F1ZXVlX2NudCsrOworCWlmIChzdGNiLT5hc29jLnNlbmRf
c2FjaykgeworCQlzY3RwX3NlbmRfc2FjayhzdGNiLCBTQ1RQX1NPX0xPQ0tFRCk7CisJfQorCXNj
dHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NUUlJFU0VULCBzdGNiLT5zY3RwX2VwLCBz
dGNiLCBjaGstPndob1RvKTsKKwlyZXR1cm4gKDApOworfQorCit2b2lkCitzY3RwX3NlbmRfYWJv
cnQoc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1
Y3Qgc29ja2FkZHIgKmRzdCwKKyAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cGhkciAqc2gsIHVp
bnQzMl90IHZ0YWcsIHN0cnVjdCBtYnVmICpjYXVzZSwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWZs
b3d0eXBlLCB1aW50MzJfdCBtZmxvd2lkLCB1aW50MTZfdCBmaWJudW0sCisjZW5kaWYKKyAgICAg
ICAgICAgICAgICB1aW50MzJfdCB2cmZfaWQsIHVpbnQxNl90IHBvcnQpCit7CisJLyogRG9uJ3Qg
cmVzcG9uZCB0byBhbiBBQk9SVCB3aXRoIGFuIEFCT1JULiAqLworCWlmIChzY3RwX2lzX3RoZXJl
X2FuX2Fib3J0X2hlcmUobSwgaXBobGVuLCAmdnRhZykpIHsKKwkJaWYgKGNhdXNlKQorCQkJc2N0
cF9tX2ZyZWVtKGNhdXNlKTsKKwkJcmV0dXJuOworCX0KKwlzY3RwX3NlbmRfcmVzcF9tc2coc3Jj
LCBkc3QsIHNoLCB2dGFnLCBTQ1RQX0FCT1JUX0FTU09DSUFUSU9OLCBjYXVzZSwKKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCSAgICAgICAgICAg
ICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGZpYm51bSwKKyNlbmRpZgorCSAgICAgICAgICAg
ICAgICAgICB2cmZfaWQsIHBvcnQpOworCXJldHVybjsKK30KKwordm9pZAorc2N0cF9zZW5kX29w
ZXJyX3RvKHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwKKyAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cGhkciAqc2gsIHVpbnQzMl90IHZ0YWcsIHN0cnVjdCBt
YnVmICpjYXVzZSwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBt
Zmxvd2lkLCB1aW50MTZfdCBmaWJudW0sCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICB1aW50
MzJfdCB2cmZfaWQsIHVpbnQxNl90IHBvcnQpCit7CisJc2N0cF9zZW5kX3Jlc3BfbXNnKHNyYywg
ZHN0LCBzaCwgdnRhZywgU0NUUF9PUEVSQVRJT05fRVJST1IsIGNhdXNlLAorI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJICAgICAgICAgICAgICAg
ICAgIG1mbG93dHlwZSwgbWZsb3dpZCwgZmlibnVtLAorI2VuZGlmCisJICAgICAgICAgICAgICAg
ICAgIHZyZl9pZCwgcG9ydCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgc3RydWN0IG1idWYgKgor
c2N0cF9jb3B5X3Jlc3VtZShzdHJ1Y3QgdWlvICp1aW8sCisJCSBpbnQgbWF4X3NlbmRfbGVuLAor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJIGlu
dCB1c2VyX21hcmtzX2VvciwKKyNlbmRpZgorCQkgaW50ICplcnJvciwKKwkJIHVpbnQzMl90ICpz
bmRvdXQsCisJCSBzdHJ1Y3QgbWJ1ZiAqKm5ld190YWlsKQoreworI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlzdHJ1Y3QgbWJ1ZiAqbTsKKworCW0g
PSBtX3Vpb3RvbWJ1Zih1aW8sIE1fV0FJVE9LLCBtYXhfc2VuZF9sZW4sIDAsCisJCShNX1BLVEhE
UiB8ICh1c2VyX21hcmtzX2VvciA/IE1fRU9SIDogMCkpKTsKKwlpZiAobSA9PSBOVUxMKSB7CisJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VU
UFVULCBFTk9CVUZTKTsKKwkJKmVycm9yID0gRU5PQlVGUzsKKwl9IGVsc2UgeworCQkqc25kb3V0
ID0gbV9sZW5ndGgobSwgTlVMTCk7CisJCSpuZXdfdGFpbCA9IG1fbGFzdChtKTsKKwl9CisJcmV0
dXJuIChtKTsKKyNlbHNlCisJaW50IGxlZnQsIGNhbmNweSwgd2lsbGNweTsKKwlzdHJ1Y3QgbWJ1
ZiAqbSwgKmhlYWQ7CisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKyNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpCisJbGVmdCA9IChpbnQpbWluKHVp
by0+dWlvX3Jlc2lkLCBtYXhfc2VuZF9sZW4pOworI2Vsc2UKKwlsZWZ0ID0gKGludCltaW4odWlv
X3Jlc2lkKHVpbyksIG1heF9zZW5kX2xlbik7CisjZW5kaWYKKyNlbHNlCisJbGVmdCA9IChpbnQp
bWluKHVpby0+dWlvX3Jlc2lkLCBtYXhfc2VuZF9sZW4pOworI2VuZGlmCisJLyogQWx3YXlzIGdl
dCBhIGhlYWRlciBqdXN0IGluIGNhc2UgKi8KKwloZWFkID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNn
KGxlZnQsIDAsIE1fV0FJVE9LLCAwLCBNVF9EQVRBKTsKKwlpZiAoaGVhZCA9PSBOVUxMKSB7CisJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VU
UFVULCBFTk9CVUZTKTsKKwkJKmVycm9yID0gRU5PQlVGUzsKKwkJcmV0dXJuIChOVUxMKTsKKwl9
CisJY2FuY3B5ID0gKGludClNX1RSQUlMSU5HU1BBQ0UoaGVhZCk7CisJd2lsbGNweSA9IG1pbihj
YW5jcHksIGxlZnQpOworCSplcnJvciA9IHVpb21vdmUobXRvZChoZWFkLCBjYWRkcl90KSwgd2ls
bGNweSwgdWlvKTsKKwlpZiAoKmVycm9yKSB7CisJCXNjdHBfbV9mcmVlbShoZWFkKTsKKwkJcmV0
dXJuIChOVUxMKTsKKwl9CisJKnNuZG91dCArPSB3aWxsY3B5OworCWxlZnQgLT0gd2lsbGNweTsK
KwlTQ1RQX0JVRl9MRU4oaGVhZCkgPSB3aWxsY3B5OworCW0gPSBoZWFkOworCSpuZXdfdGFpbCA9
IGhlYWQ7CisJd2hpbGUgKGxlZnQgPiAwKSB7CisJCS8qIG1vdmUgaW4gdXNlciBkYXRhICovCisJ
CVNDVFBfQlVGX05FWFQobSkgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2cobGVmdCwgMCwgTV9XQUlU
T0ssIDAsIE1UX0RBVEEpOworCQlpZiAoU0NUUF9CVUZfTkVYVChtKSA9PSBOVUxMKSB7CisJCQlz
Y3RwX21fZnJlZW0oaGVhZCk7CisJCQkqbmV3X3RhaWwgPSBOVUxMOworCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT0JVRlMp
OworCQkJKmVycm9yID0gRU5PQlVGUzsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJbSA9IFND
VFBfQlVGX05FWFQobSk7CisJCWNhbmNweSA9IChpbnQpTV9UUkFJTElOR1NQQUNFKG0pOworCQl3
aWxsY3B5ID0gbWluKGNhbmNweSwgbGVmdCk7CisJCSplcnJvciA9IHVpb21vdmUobXRvZChtLCBj
YWRkcl90KSwgd2lsbGNweSwgdWlvKTsKKwkJaWYgKCplcnJvcikgeworCQkJc2N0cF9tX2ZyZWVt
KGhlYWQpOworCQkJKm5ld190YWlsID0gTlVMTDsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVM
TCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFRkFVTFQpOworCQkJKmVycm9y
ID0gRUZBVUxUOworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQlTQ1RQX0JVRl9MRU4obSkgPSB3
aWxsY3B5OworCQlsZWZ0IC09IHdpbGxjcHk7CisJCSpzbmRvdXQgKz0gd2lsbGNweTsKKwkJKm5l
d190YWlsID0gbTsKKwkJaWYgKGxlZnQgPT0gMCkgeworCQkJU0NUUF9CVUZfTkVYVChtKSA9IE5V
TEw7CisJCX0KKwl9CisJcmV0dXJuIChoZWFkKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50Citz
Y3RwX2NvcHlfb25lKHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCwKKyAgICAg
ICAgICAgICAgc3RydWN0IHVpbyAqdWlvLAorICAgICAgICAgICAgICBpbnQgcmVzdl91cGZyb250
KQoreworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KwlzcC0+ZGF0YSA9IG1fdWlvdG9tYnVmKHVpbywgTV9XQUlUT0ssIHNwLT5sZW5ndGgsCisJICAg
ICAgICAgICAgICAgICAgICAgICByZXN2X3VwZnJvbnQsIDApOworCWlmIChzcC0+ZGF0YSA9PSBO
VUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfT1VUUFVULCBFTk9CVUZTKTsKKwkJcmV0dXJuIChFTk9CVUZTKTsKKwl9CisKKwlzcC0+
dGFpbF9tYnVmID0gbV9sYXN0KHNwLT5kYXRhKTsKKwlyZXR1cm4gKDApOworI2Vsc2UKKwlpbnQg
bGVmdDsKKwlpbnQgY2FuY3B5LCB3aWxsY3B5LCBlcnJvcjsKKwlzdHJ1Y3QgbWJ1ZiAqbSwgKmhl
YWQ7CisJaW50IGNwc3ogPSAwOworCisJLyogRmlyc3Qgb25lIGdldHMgYSBoZWFkZXIgKi8KKwls
ZWZ0ID0gc3AtPmxlbmd0aDsKKwloZWFkID0gbSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZygobGVm
dCArIHJlc3ZfdXBmcm9udCksIDAsIE1fV0FJVE9LLCAwLCBNVF9EQVRBKTsKKwlpZiAobSA9PSBO
VUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfT1VUUFVULCBFTk9CVUZTKTsKKwkJcmV0dXJuIChFTk9CVUZTKTsKKwl9CisJLyotCisJ
ICogQWRkIHRoaXMgb25lIGZvciBtIGluIG5vdywgdGhhdCB3YXkgaWYgdGhlIGFsbG9jIGZhaWxz
IHdlIHdvbid0CisJICogaGF2ZSBhIGJhZCBjbnQuCisJICovCisJU0NUUF9CVUZfUkVTVl9VRiht
LCByZXN2X3VwZnJvbnQpOworCWNhbmNweSA9IChpbnQpTV9UUkFJTElOR1NQQUNFKG0pOworCXdp
bGxjcHkgPSBtaW4oY2FuY3B5LCBsZWZ0KTsKKwl3aGlsZSAobGVmdCA+IDApIHsKKwkJLyogbW92
ZSBpbiB1c2VyIGRhdGEgKi8KKwkJZXJyb3IgPSB1aW9tb3ZlKG10b2QobSwgY2FkZHJfdCksIHdp
bGxjcHksIHVpbyk7CisJCWlmIChlcnJvcikgeworCQkJc2N0cF9tX2ZyZWVtKGhlYWQpOworCQkJ
cmV0dXJuIChlcnJvcik7CisJCX0KKwkJU0NUUF9CVUZfTEVOKG0pID0gd2lsbGNweTsKKwkJbGVm
dCAtPSB3aWxsY3B5OworCQljcHN6ICs9IHdpbGxjcHk7CisJCWlmIChsZWZ0ID4gMCkgeworCQkJ
U0NUUF9CVUZfTkVYVChtKSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhsZWZ0LCAwLCBNX1dBSVRP
SywgMCwgTVRfREFUQSk7CisJCQlpZiAoU0NUUF9CVUZfTkVYVChtKSA9PSBOVUxMKSB7CisJCQkJ
LyoKKwkJCQkgKiB0aGUgaGVhZCBnb2VzIGJhY2sgdG8gY2FsbGVyLCBoZSBjYW4gZnJlZQorCQkJ
CSAqIHRoZSByZXN0CisJCQkJICovCisJCQkJc2N0cF9tX2ZyZWVtKGhlYWQpOworCQkJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBF
Tk9CVUZTKTsKKwkJCQlyZXR1cm4gKEVOT0JVRlMpOworCQkJfQorCQkJbSA9IFNDVFBfQlVGX05F
WFQobSk7CisJCQljYW5jcHkgPSAoaW50KU1fVFJBSUxJTkdTUEFDRShtKTsKKwkJCXdpbGxjcHkg
PSBtaW4oY2FuY3B5LCBsZWZ0KTsKKwkJfSBlbHNlIHsKKwkJCXNwLT50YWlsX21idWYgPSBtOwor
CQkJU0NUUF9CVUZfTkVYVChtKSA9IE5VTEw7CisJCX0KKwl9CisJc3AtPmRhdGEgPSBoZWFkOwor
CXNwLT5sZW5ndGggPSBjcHN6OworCXJldHVybiAoMCk7CisjZW5kaWYKK30KKworc3RhdGljIHN0
cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICoKK3NjdHBfY29weV9pdF9pbihzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisgICAg
c3RydWN0IHNjdHBfc25kcmN2aW5mbyAqc3JjdiwKKyAgICBzdHJ1Y3QgdWlvICp1aW8sCisgICAg
c3RydWN0IHNjdHBfbmV0cyAqbmV0LAorICAgIHNzaXplX3QgbWF4X3NlbmRfbGVuLAorICAgIGlu
dCB1c2VyX21hcmtzX2VvciwKKyAgICBpbnQgKmVycm9yKQorCit7CisJLyotCisJICogVGhpcyBy
b3V0aW5lIG11c3QgYmUgdmVyeSBjYXJlZnVsIGluIGl0cyB3b3JrLiBQcm90b2NvbAorCSAqIHBy
b2Nlc3NpbmcgaXMgdXAgYW5kIHJ1bm5pbmcgc28gY2FyZSBtdXN0IGJlIHRha2VuIHRvIHNwbC4u
LigpCisJICogd2hlbiB5b3UgbmVlZCB0byBkbyBzb21ldGhpbmcgdGhhdCBtYXkgZWZmZWN0IHRo
ZSBzdGNiL2Fzb2MuIFRoZQorCSAqIHNiIGlzIGxvY2tlZCBob3dldmVyLiBXaGVuIGRhdGEgaXMg
Y29waWVkIHRoZSBwcm90b2NvbCBwcm9jZXNzaW5nCisJICogc2hvdWxkIGJlIGVuYWJsZWQgc2lu
Y2UgdGhpcyBpcyBhIHNsb3dlciBvcGVyYXRpb24uLi4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF9zdHJl
YW1fcXVldWVfcGVuZGluZyAqc3AgPSBOVUxMOworCWludCByZXN2X2luX2ZpcnN0OworCisJKmVy
cm9yID0gMDsKKwkvKiBOb3cgY2FuIHdlIHNlbmQgdGhpcz8gKi8KKwlpZiAoKFNDVFBfR0VUX1NU
QVRFKHN0Y2IpID09IFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCkgfHwKKwkgICAgKFNDVFBfR0VU
X1NUQVRFKHN0Y2IpID09IFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQpIHx8CisJICAgIChT
Q1RQX0dFVF9TVEFURShzdGNiKSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSB8fAor
CSAgICAoYXNvYy0+c3RhdGUgJiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcpKSB7CisJCS8q
IGdvdCBkYXRhIHdoaWxlIHNodXR0aW5nIGRvd24gKi8KKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChO
VUxMLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVDT05OUkVTRVQpOworCQkq
ZXJyb3IgPSBFQ09OTlJFU0VUOworCQlnb3RvIG91dF9ub3c7CisJfQorCXNjdHBfYWxsb2NfYV9z
dHJtb3Eoc3RjYiwgc3ApOworCWlmIChzcCA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoTlVMTCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT01FTSk7CisJCSpl
cnJvciA9IEVOT01FTTsKKwkJZ290byBvdXRfbm93OworCX0KKwlzcC0+YWN0X2ZsYWdzID0gMDsK
KwlzcC0+c2VuZGVyX2FsbF9kb25lID0gMDsKKwlzcC0+c2luZm9fZmxhZ3MgPSBzcmN2LT5zaW5m
b19mbGFnczsKKwlzcC0+dGltZXRvbGl2ZSA9IHNyY3YtPnNpbmZvX3RpbWV0b2xpdmU7CisJc3At
PnBwaWQgPSBzcmN2LT5zaW5mb19wcGlkOworCXNwLT5jb250ZXh0ID0gc3Jjdi0+c2luZm9fY29u
dGV4dDsKKwlzcC0+ZnNuID0gMDsKKwkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmc3AtPnRz
KTsKKworCXNwLT5zaWQgPSBzcmN2LT5zaW5mb19zdHJlYW07CisjaWYgZGVmaW5lZChfX0FQUExF
X18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJE
KQorCXNwLT5sZW5ndGggPSAodWludDMyX3QpbWluKHVpby0+dWlvX3Jlc2lkLCBtYXhfc2VuZF9s
ZW4pOworI2Vsc2UKKwlzcC0+bGVuZ3RoID0gKHVpbnQzMl90KW1pbih1aW9fcmVzaWQodWlvKSwg
bWF4X3NlbmRfbGVuKTsKKyNlbmRpZgorI2Vsc2UKKwlzcC0+bGVuZ3RoID0gKHVpbnQzMl90KW1p
bih1aW8tPnVpb19yZXNpZCwgbWF4X3NlbmRfbGVuKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19B
UFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRlZmluZWQoQVBQTEVfTEVP
UEFSRCkKKwlpZiAoKHNwLT5sZW5ndGggPT0gKHVpbnQzMl90KXVpby0+dWlvX3Jlc2lkKSAmJgor
I2Vsc2UKKwlpZiAoKHNwLT5sZW5ndGggPT0gKHVpbnQzMl90KXVpb19yZXNpZCh1aW8pKSAmJgor
I2VuZGlmCisjZWxzZQorCWlmICgoc3AtPmxlbmd0aCA9PSAodWludDMyX3QpdWlvLT51aW9fcmVz
aWQpICYmCisjZW5kaWYKKwkgICAgKCh1c2VyX21hcmtzX2VvciA9PSAwKSB8fAorCSAgICAgKHNy
Y3YtPnNpbmZvX2ZsYWdzICYgU0NUUF9FT0YpIHx8CisJICAgICAodXNlcl9tYXJrc19lb3IgJiYg
KHNyY3YtPnNpbmZvX2ZsYWdzICYgU0NUUF9FT1IpKSkpIHsKKwkJc3AtPm1zZ19pc19jb21wbGV0
ZSA9IDE7CisJfSBlbHNlIHsKKwkJc3AtPm1zZ19pc19jb21wbGV0ZSA9IDA7CisJfQorCXNwLT5z
ZW5kZXJfYWxsX2RvbmUgPSAwOworCXNwLT5zb21lX3Rha2VuID0gMDsKKwlzcC0+cHV0X2xhc3Rf
b3V0ID0gMDsKKwlyZXN2X2luX2ZpcnN0ID0gU0NUUF9EQVRBX0NIVU5LX09WRVJIRUFEKHN0Y2Ip
OworCXNwLT5kYXRhID0gc3AtPnRhaWxfbWJ1ZiA9IE5VTEw7CisJaWYgKHNwLT5sZW5ndGggPT0g
MCkgeworCQlnb3RvIHNraXBfY29weTsKKwl9CisJaWYgKHNyY3YtPnNpbmZvX2tleW51bWJlcl92
YWxpZCkgeworCQlzcC0+YXV0aF9rZXlpZCA9IHNyY3YtPnNpbmZvX2tleW51bWJlcjsKKwl9IGVs
c2UgeworCQlzcC0+YXV0aF9rZXlpZCA9IHN0Y2ItPmFzb2MuYXV0aGluZm8uYWN0aXZlX2tleWlk
OworCX0KKwlpZiAoc2N0cF9hdXRoX2lzX3JlcXVpcmVkX2NodW5rKFNDVFBfREFUQSwgc3RjYi0+
YXNvYy5wZWVyX2F1dGhfY2h1bmtzKSkgeworCQlzY3RwX2F1dGhfa2V5X2FjcXVpcmUoc3RjYiwg
c3AtPmF1dGhfa2V5aWQpOworCQlzcC0+aG9sZHNfa2V5X3JlZiA9IDE7CisJfQorI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCVNDVFBfU09DS0VUX1VO
TE9DSyhTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKSwgMCk7CisjZW5kaWYKKwkqZXJyb3IgPSBz
Y3RwX2NvcHlfb25lKHNwLCB1aW8sIHJlc3ZfaW5fZmlyc3QpOworI2lmIGRlZmluZWQoX19BUFBM
RV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCVNDVFBfU09DS0VUX0xPQ0soU0NUUF9J
TlBfU08oc3RjYi0+c2N0cF9lcCksIDApOworI2VuZGlmCisgc2tpcF9jb3B5OgorCWlmICgqZXJy
b3IpIHsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCVNDVFBfVENCX0xPQ0soc3RjYik7
CisjZW5kaWYKKwkJc2N0cF9mcmVlX2Ffc3RybW9xKHN0Y2IsIHNwLCBTQ1RQX1NPX0xPQ0tFRCk7
CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Cisj
ZW5kaWYKKwkJc3AgPSBOVUxMOworCX0gZWxzZSB7CisJCWlmIChzcC0+c2luZm9fZmxhZ3MgJiBT
Q1RQX0FERFJfT1ZFUikgeworCQkJc3AtPm5ldCA9IG5ldDsKKwkJCWF0b21pY19hZGRfaW50KCZz
cC0+bmV0LT5yZWZfY291bnQsIDEpOworCQl9IGVsc2UgeworCQkJc3AtPm5ldCA9IE5VTEw7CisJ
CX0KKwkJc2N0cF9zZXRfcHJzY3RwX3BvbGljeShzcCk7CisJfQorb3V0X25vdzoKKwlyZXR1cm4g
KHNwKTsKK30KKworaW50CitzY3RwX3Nvc2VuZChzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAg
ICAgIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKKyAgICAgICAgICAgIHN0cnVjdCB1aW8gKnVpbywK
KyAgICAgICAgICAgIHN0cnVjdCBtYnVmICp0b3AsCisgICAgICAgICAgICBzdHJ1Y3QgbWJ1ZiAq
Y29udHJvbCwKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKyAgICAgICAgICAgIGludCBmbGFncworI2Vsc2UKKyAgICAgICAgICAgIGludCBmbGFncywK
KyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorICAg
ICAgICAgICAgc3RydWN0IHRocmVhZCAqcAorI2VsaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCisgICAgICAgICAgICBQS1RIUkVBRCBwCisjZWxzZQorI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKKyAgICAgICAgICAgIC8qCisJICAgICAqIHByb2MgaXMgYSBk
dW1teSBpbiBfX1VzZXJzcGFjZV9fIGFuZCB3aWxsIG5vdCBiZSBwYXNzZWQKKwkgICAgICogdG8g
c2N0cF9sb3dlcl9zb3NlbmQKKwkgICAgICovCisjZW5kaWYKKyAgICAgICAgICAgIHN0cnVjdCBw
cm9jICpwCisjZW5kaWYKKyNlbmRpZgorKQoreworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXN0cnVjdCBwcm9jICpwID0gY3VycmVudF9wcm9jKCk7
CisjZW5kaWYKKwlpbnQgZXJyb3IsIHVzZV9zbmRpbmZvID0gMDsKKwlzdHJ1Y3Qgc2N0cF9zbmRy
Y3ZpbmZvIHNuZHJjdm5pbmZvOworCXN0cnVjdCBzb2NrYWRkciAqYWRkcl90b191c2U7CisjaWYg
ZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2KQorCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47
CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOworI2VuZGlmCisJaWYgKGNvbnRyb2wpIHsK
KwkJLyogcHJvY2VzcyBjbXNnIHNuZC9yY3YgaW5mbyAobWF5YmUgYSBhc3NvYy1pZCkgKi8KKwkJ
aWYgKHNjdHBfZmluZF9jbXNnKFNDVFBfU05EUkNWLCAodm9pZCAqKSZzbmRyY3ZuaW5mbywgY29u
dHJvbCwKKwkJICAgIHNpemVvZihzbmRyY3ZuaW5mbykpKSB7CisJCQkvKiBnb3Qgb25lICovCisJ
CQl1c2Vfc25kaW5mbyA9IDE7CisJCX0KKwl9CisJYWRkcl90b191c2UgPSBhZGRyOworI2lmIGRl
ZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJTkVUNikKKwlpZiAoKGFkZHIpICYmIChhZGRyLT5zYV9m
YW1pbHkgPT0gQUZfSU5FVDYpKSB7CisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisKKwkJ
c2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKKwkJaWYgKElONl9JU19BRERSX1Y0
TUFQUEVEKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQlpbjZfc2luNl8yX3Npbigmc2luLCBzaW42
KTsKKwkJCWFkZHJfdG9fdXNlID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW47CisJCX0KKwl9Cisj
ZW5kaWYKKwllcnJvciA9IHNjdHBfbG93ZXJfc29zZW5kKHNvLCBhZGRyX3RvX3VzZSwgdWlvLCB0
b3AsCisJCQkJICBjb250cm9sLAorCQkJCSAgZmxhZ3MsCisJCQkJICB1c2Vfc25kaW5mbyA/ICZz
bmRyY3ZuaW5mbzogTlVMTAorI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJICAsIHAK
KyNlbmRpZgorCQkpOworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisjZW5kaWYKKwlyZXR1cm4gKGVy
cm9yKTsKK30KKworaW50CitzY3RwX2xvd2VyX3Nvc2VuZChzdHJ1Y3Qgc29ja2V0ICpzbywKKyAg
ICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKKyAgICAgICAgICAgICAgICAg
IHN0cnVjdCB1aW8gKnVpbywKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBtYnVmICppX3BhaywK
KyAgICAgICAgICAgICAgICAgIHN0cnVjdCBtYnVmICpjb250cm9sLAorICAgICAgICAgICAgICAg
ICAgaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfc25kcmN2aW5mbyAq
c3JjdgorI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisgICAgICAgICAgICAgICAgICAsCisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aHJlYWQg
KnAKKyNlbGlmIGRlZmluZWQoX1dJTjMyKQorICAgICAgICAgICAgICAgICAgUEtUSFJFQUQgcAor
I2Vsc2UKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBwcm9jICpwCisjZW5kaWYKKyNlbmRpZgor
CSkKK3sKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorCXN0cnVjdCBlcG9jaF90cmFja2VyIGV0OworI2VuZGlmCisJc3NpemVfdCBzbmRsZW4gPSAw
LCBtYXhfbGVuLCBsb2NhbF9hZGRfbW9yZTsKKwlpbnQgZXJyb3IsIGxlbjsKKwlzdHJ1Y3QgbWJ1
ZiAqdG9wID0gTlVMTDsKKwlpbnQgcXVldWVfb25seSA9IDAsIHF1ZXVlX29ubHlfZm9yX2luaXQg
PSAwOworCWludCBmcmVlX2NudF9hcHBsaWVkID0gMDsKKwlpbnQgdW5fc2VudDsKKwlpbnQgbm93
X2ZpbGxlZCA9IDA7CisJdW5zaWduZWQgaW50IGlucXVldWVfYnl0ZXMgPSAwOworCXN0cnVjdCBz
Y3RwX2Jsb2NrX2VudHJ5IGJlOworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJc3RydWN0IHNj
dHBfdGNiICpzdGNiID0gTlVMTDsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJc3RydWN0IHNjdHBf
bmV0cyAqbmV0OworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOworCXN0cnVjdCBzY3Rw
X2lucGNiICp0X2lucDsKKwlpbnQgdXNlcl9tYXJrc19lb3I7CisJaW50IGNyZWF0ZV9sb2NrX2Fw
cGxpZWQgPSAwOworCWludCBuYWdsZV9hcHBsaWVzID0gMDsKKwlpbnQgc29tZV9vbl9jb250cm9s
ID0gMDsKKwlpbnQgZ290X2FsbF9vZl90aGVfc2VuZCA9IDA7CisJaW50IGhvbGRfdGNibG9jayA9
IDA7CisJaW50IG5vbl9ibG9ja2luZyA9IDA7CisJc3NpemVfdCBsb2NhbF9zb3Jlc3YgPSAwOwor
CXVpbnQxNl90IHBvcnQ7CisJdWludDE2X3Qgc2luZm9fZmxhZ3M7CisJc2N0cF9hc3NvY190IHNp
bmZvX2Fzc29jX2lkOworCisJZXJyb3IgPSAwOworCW5ldCA9IE5VTEw7CisJc3RjYiA9IE5VTEw7
CisJYXNvYyA9IE5VTEw7CisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKwlzY3RwX2xvY2tfYXNzZXJ0KHNvKTsKKyNlbmRpZgorCXRfaW5wID0gaW5w
ID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKKwlpZiAoaW5wID09IE5VTEwpIHsK
KwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9P
VVRQVVQsIEVJTlZBTCk7CisJCWVycm9yID0gRUlOVkFMOworCQlpZiAoaV9wYWspIHsKKwkJCVND
VFBfUkVMRUFTRV9QS1QoaV9wYWspOworCQl9CisJCXJldHVybiAoZXJyb3IpOworCX0KKwlpZiAo
KHVpbyA9PSBOVUxMKSAmJiAoaV9wYWsgPT0gTlVMTCkpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOworCQlyZXR1
cm4gKEVJTlZBTCk7CisJfQorCXVzZXJfbWFya3NfZW9yID0gc2N0cF9pc19mZWF0dXJlX29uKGlu
cCwgU0NUUF9QQ0JfRkxBR1NfRVhQTElDSVRfRU9SKTsKKwlhdG9taWNfYWRkX2ludCgmaW5wLT50
b3RhbF9zZW5kcywgMSk7CisJaWYgKHVpbykgeworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkKKwkJaWYg
KHVpby0+dWlvX3Jlc2lkIDwgMCkgeworI2Vsc2UKKwkJaWYgKHVpb19yZXNpZCh1aW8pIDwgMCkg
eworI2VuZGlmCisjZWxzZQorCQlpZiAodWlvLT51aW9fcmVzaWQgPCAwKSB7CisjZW5kaWYKKwkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBV
VCwgRUlOVkFMKTsKKwkJCXJldHVybiAoRUlOVkFMKTsKKwkJfQorI2lmIGRlZmluZWQoX19BUFBM
RV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFS
RCkKKwkJc25kbGVuID0gdWlvLT51aW9fcmVzaWQ7CisjZWxzZQorCQlzbmRsZW4gPSB1aW9fcmVz
aWQodWlvKTsKKyNlbmRpZgorI2Vsc2UKKwkJc25kbGVuID0gdWlvLT51aW9fcmVzaWQ7CisjZW5k
aWYKKwl9IGVsc2UgeworCQl0b3AgPSBTQ1RQX0hFQURFUl9UT19DSEFJTihpX3Bhayk7CisJCXNu
ZGxlbiA9IFNDVFBfSEVBREVSX0xFTihpX3Bhayk7CisJfQorCVNDVFBEQkcoU0NUUF9ERUJVR19P
VVRQVVQxLCAiU2VuZCBjYWxsZWQgYWRkcjolcCBzZW5kIGxlbmd0aCAlemRcbiIsCisJICAgICAg
ICAodm9pZCAqKWFkZHIsCisJICAgICAgICBzbmRsZW4pOworCWlmICgoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgJiYKKwkgICAgU0NUUF9JU19MSVNURU5JTkcoaW5w
KSkgeworCQkvKiBUaGUgbGlzdGVuZXIgY2FuIE5PVCBzZW5kICovCisJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9UQ09OTik7
CisJCWVycm9yID0gRU5PVENPTk47CisJCWdvdG8gb3V0X3VubG9ja2VkOworCX0KKwkvKioKKwkg
KiBQcmUtc2NyZWVuIGFkZHJlc3MsIGlmIG9uZSBpcyBnaXZlbiB0aGUgc2luLWxlbgorCSAqIG11
c3QgYmUgc2V0IGNvcnJlY3RseSEKKwkgKi8KKwlpZiAoYWRkcikgeworCQl1bmlvbiBzY3RwX3Nv
Y2tzdG9yZSAqcmFkZHIgPSAodW5pb24gc2N0cF9zb2Nrc3RvcmUgKilhZGRyOworCQlzd2l0Y2gg
KHJhZGRyLT5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCWNhc2UgQUZfSU5FVDoKKyNp
ZmRlZiBIQVZFX1NJTl9MRU4KKwkJCWlmIChyYWRkci0+c2luLnNpbl9sZW4gIT0gc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbikpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwg
bmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7
CisJCQkJZ290byBvdXRfdW5sb2NrZWQ7CisJCQl9CisjZW5kaWYKKwkJCXBvcnQgPSByYWRkci0+
c2luLnNpbl9wb3J0OworCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQljYXNlIEFG
X0lORVQ2OgorI2lmZGVmIEhBVkVfU0lONl9MRU4KKwkJCWlmIChyYWRkci0+c2luNi5zaW42X2xl
biAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVJTlZBTCk7CisJCQkJ
ZXJyb3IgPSBFSU5WQUw7CisJCQkJZ290byBvdXRfdW5sb2NrZWQ7CisJCQl9CisjZW5kaWYKKwkJ
CXBvcnQgPSByYWRkci0+c2luNi5zaW42X3BvcnQ7CisJCQlicmVhazsKKyNlbmRpZgorI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJY2FzZSBBRl9DT05OOgorI2lmZGVmIEhBVkVfU0NPTk5f
TEVOCisJCQlpZiAocmFkZHItPnNjb25uLnNjb25uX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2Nvbm4pKSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5ldCwgU0NU
UF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJCWdv
dG8gb3V0X3VubG9ja2VkOworCQkJfQorI2VuZGlmCisJCQlwb3J0ID0gcmFkZHItPnNjb25uLnNj
b25uX3BvcnQ7CisJCQlicmVhazsKKyNlbmRpZgorCQlkZWZhdWx0OgorCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFQUZOT1NVUFBP
UlQpOworCQkJZXJyb3IgPSBFQUZOT1NVUFBPUlQ7CisJCQlnb3RvIG91dF91bmxvY2tlZDsKKwkJ
fQorCX0gZWxzZQorCQlwb3J0ID0gMDsKKworCWlmIChzcmN2KSB7CisJCXNpbmZvX2ZsYWdzID0g
c3Jjdi0+c2luZm9fZmxhZ3M7CisJCXNpbmZvX2Fzc29jX2lkID0gc3Jjdi0+c2luZm9fYXNzb2Nf
aWQ7CisJCWlmIChJTlZBTElEX1NJTkZPX0ZMQUcoc2luZm9fZmxhZ3MpIHx8CisJCSAgICBQUl9T
Q1RQX0lOVkFMSURfUE9MSUNZKHNpbmZvX2ZsYWdzKSkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOworCQkJZXJy
b3IgPSBFSU5WQUw7CisJCQlnb3RvIG91dF91bmxvY2tlZDsKKwkJfQorCQlpZiAoc3Jjdi0+c2lu
Zm9fZmxhZ3MpCisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kc193aXRoX2ZsYWdzKTsKKwl9
IGVsc2UgeworCQlzaW5mb19mbGFncyA9IGlucC0+ZGVmX3NlbmQuc2luZm9fZmxhZ3M7CisJCXNp
bmZvX2Fzc29jX2lkID0gaW5wLT5kZWZfc2VuZC5zaW5mb19hc3NvY19pZDsKKwl9CisjaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlpZiAoZmxhZ3Mg
JiBNU0dfRU9SKSB7CisJCXNpbmZvX2ZsYWdzIHw9IFNDVFBfRU9SOworCX0KKwlpZiAoZmxhZ3Mg
JiBNU0dfRU9GKSB7CisJCXNpbmZvX2ZsYWdzIHw9IFNDVFBfRU9GOworCX0KKyNlbmRpZgorCWlm
IChzaW5mb19mbGFncyAmIFNDVFBfU0VOREFMTCkgeworCQkvKiBpdHMgYSBzZW5kYWxsICovCisJ
CWVycm9yID0gc2N0cF9zZW5kYWxsKGlucCwgdWlvLCB0b3AsIHNyY3YpOworCQl0b3AgPSBOVUxM
OworCQlnb3RvIG91dF91bmxvY2tlZDsKKwl9CisJaWYgKChzaW5mb19mbGFncyAmIFNDVFBfQURE
Ul9PVkVSKSAmJiAoYWRkciA9PSBOVUxMKSkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
c3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVJTlZBTCk7CisJCWVycm9yID0gRUlO
VkFMOworCQlnb3RvIG91dF91bmxvY2tlZDsKKwl9CisJLyogbm93IHdlIG11c3QgZmluZCB0aGUg
YXNzb2MgKi8KKwlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RF
RCkgfHwKKwkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wp
KSB7CisJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCXN0Y2IgPSBMSVNUX0ZJUlNUKCZpbnAtPnNj
dHBfYXNvY19saXN0KTsKKwkJaWYgKHN0Y2IpIHsKKwkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJ
CQlob2xkX3RjYmxvY2sgPSAxOworCQl9CisJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwl9IGVs
c2UgaWYgKHNpbmZvX2Fzc29jX2lkKSB7CisJCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9l
cF9hc29jaWQoaW5wLCBzaW5mb19hc3NvY19pZCwgMSk7CisJCWlmIChzdGNiICE9IE5VTEwpIHsK
KwkJCWhvbGRfdGNibG9jayA9IDE7CisJCX0KKwl9IGVsc2UgaWYgKGFkZHIpIHsKKwkJLyotCisJ
CSAqIFNpbmNlIHdlIGRpZCBub3QgdXNlIGZpbmRlcCB3ZSBtdXN0CisJCSAqIGluY3JlbWVudCBp
dCwgYW5kIGlmIHdlIGRvbid0IGZpbmQgYSB0Y2IKKwkJICogZGVjcmVtZW50IGl0LgorCQkgKi8K
KwkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKKwkJU0NU
UF9JTlBfV1VOTE9DSyhpbnApOworCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRk
cigmdF9pbnAsIGFkZHIsICZuZXQsIE5VTEwsIE5VTEwpOworCQlpZiAoc3RjYiA9PSBOVUxMKSB7
CisJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJ
CVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJfSBlbHNlIHsKKwkJCWhvbGRfdGNibG9jayA9IDE7
CisJCX0KKwl9CisJaWYgKChzdGNiID09IE5VTEwpICYmIChhZGRyKSkgeworCQkvKiBQb3NzaWJs
ZSBpbXBsaWNpdCBzZW5kPyAqLworCQlTQ1RQX0FTT0NfQ1JFQVRFX0xPQ0soaW5wKTsKKwkJY3Jl
YXRlX2xvY2tfYXBwbGllZCA9IDE7CisJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfU09DS0VUX0dPTkUpIHx8CisJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfU09DS0VUX0FMTEdPTkUpKSB7CisJCQkvKiBTaG91bGQgSSByZWFsbHkgdW5sb2NrID8g
Ki8KKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfT1VUUFVULCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlnb3RvIG91dF91bmxv
Y2tlZDsKKwkJfQorCQlpZiAoKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VO
RF9WNikgPT0gMCkgJiYKKwkJICAgIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpKSB7CisJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQ
VVQsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCWdvdG8gb3V0X3VubG9ja2VkOwor
CQl9CisJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7CisJ
CVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJLyogV2l0aCB0aGUgbG9jayBhcHBsaWVkIGxvb2sg
YWdhaW4gKi8KKwkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoJnRfaW5wLCBh
ZGRyLCAmbmV0LCBOVUxMLCBOVUxMKTsKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5F
VDYpCisJCWlmICgoc3RjYiA9PSBOVUxMKSAmJiAoY29udHJvbCAhPSBOVUxMKSAmJiAocG9ydCA+
IDApKSB7CisJCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fY21zZ3MoJnRfaW5wLCBwb3J0
LCBjb250cm9sLCAmbmV0LCAmZXJyb3IpOworCQl9CisjZW5kaWYKKwkJaWYgKHN0Y2IgPT0gTlVM
TCkgeworCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7
CisJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCX0gZWxzZSB7CisJCQlob2xkX3RjYmxvY2sg
PSAxOworCQl9CisJCWlmIChlcnJvcikgeworCQkJZ290byBvdXRfdW5sb2NrZWQ7CisJCX0KKwkJ
aWYgKHRfaW5wICE9IGlucCkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5l
dCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9UQ09OTik7CisJCQllcnJvciA9IEVOT1RDT05O
OworCQkJZ290byBvdXRfdW5sb2NrZWQ7CisJCX0KKwl9CisJaWYgKHN0Y2IgPT0gTlVMTCkgewor
CQlpZiAoYWRkciA9PSBOVUxMKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwg
bmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT0VOVCk7CisJCQllcnJvciA9IEVOT0VOVDsK
KwkJCWdvdG8gb3V0X3VubG9ja2VkOworCQl9IGVsc2UgeworCQkJLyogV2UgbXVzdCBnbyBhaGVh
ZCBhbmQgc3RhcnQgdGhlIElOSVQgcHJvY2VzcyAqLworCQkJdWludDMyX3QgdnJmX2lkOworCisJ
CQlpZiAoKHNpbmZvX2ZsYWdzICYgU0NUUF9BQk9SVCkgfHwKKwkJCSAgICAoKHNpbmZvX2ZsYWdz
ICYgU0NUUF9FT0YpICYmIChzbmRsZW4gPT0gMCkpKSB7CisJCQkJLyotCisJCQkJICogVXNlciBh
c2tzIHRvIGFib3J0IGEgbm9uLWV4aXN0YW50IGFzc29jLAorCQkJCSAqIG9yIEVPRiBhIG5vbi1l
eGlzdGFudCBhc3NvYyB3aXRoIG5vIGRhdGEKKwkJCQkgKi8KKwkJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT0VOVCk7CisJCQkJ
ZXJyb3IgPSBFTk9FTlQ7CisJCQkJZ290byBvdXRfdW5sb2NrZWQ7CisJCQl9CisJCQkvKiBnZXQg
YW4gYXNvYy9zdGNiIHN0cnVjdCAqLworCQkJdnJmX2lkID0gaW5wLT5kZWZfdnJmX2lkOworI2lm
ZGVmIElOVkFSSUFOVFMKKwkJCWlmIChjcmVhdGVfbG9ja19hcHBsaWVkID09IDApIHsKKwkJCQlw
YW5pYygiRXJyb3IsIHNob3VsZCBob2xkIGNyZWF0ZSBsb2NrIGFuZCBJIGRvbid0PyIpOworCQkJ
fQorI2VuZGlmCisJCQlzdGNiID0gc2N0cF9hbG9jX2Fzc29jKGlucCwgYWRkciwgJmVycm9yLCAw
LCB2cmZfaWQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0cF9lcC5wcmVfb3Bl
bl9zdHJlYW1fY291bnQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0cF9lcC5w
b3J0LAorI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkgICAgICAgICAgICAgICAgICAg
ICAgIHAsCisjZWxzZQorCQkJICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHByb2MgKilO
VUxMLAorI2VuZGlmCisJCQkgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfSU5JVElBTElaRV9B
VVRIX1BBUkFNUyk7CisJCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCQkJLyogRXJyb3IgaXMgc2V0
dXAgZm9yIHVzIGluIHRoZSBjYWxsICovCisJCQkJZ290byBvdXRfdW5sb2NrZWQ7CisJCQl9CisJ
CQlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUp
IHsKKwkJCQlzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdTX0NPTk5F
Q1RFRDsKKwkJCQkvKiBTZXQgdGhlIGNvbm5lY3RlZCBmbGFnIHNvIHdlIGNhbiBxdWV1ZSBkYXRh
ICovCisJCQkJc29pc2Nvbm5lY3Rpbmcoc28pOworCQkJfQorCQkJaG9sZF90Y2Jsb2NrID0gMTsK
KwkJCWlmIChjcmVhdGVfbG9ja19hcHBsaWVkKSB7CisJCQkJU0NUUF9BU09DX0NSRUFURV9VTkxP
Q0soaW5wKTsKKwkJCQljcmVhdGVfbG9ja19hcHBsaWVkID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJ
U0NUUF9QUklOVEYoIkh1aC0zPyBjcmVhdGUgbG9jayBzaG91bGQgaGF2ZSBiZWVuIG9uPz9cbiIp
OworCQkJfQorCQkJLyogVHVybiBvbiBxdWV1ZSBvbmx5IGZsYWcgdG8gcHJldmVudCBkYXRhIGZy
b20gYmVpbmcgc2VudCAqLworCQkJcXVldWVfb25seSA9IDE7CisJCQlhc29jID0gJnN0Y2ItPmFz
b2M7CisJCQlTQ1RQX1NFVF9TVEFURShzdGNiLCBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKTsKKwkJ
CSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZhc29jLT50aW1lX2VudGVyZWQpOworCisJCQlp
ZiAoY29udHJvbCkgeworCQkJCWlmIChzY3RwX3Byb2Nlc3NfY21zZ3NfZm9yX2luaXQoc3RjYiwg
Y29udHJvbCwgJmVycm9yKSkgeworCQkJCQlzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQ
X1BDQkZSRUVfRk9SQ0UsCisJCQkJCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9PVVRQ
VVQgKyBTQ1RQX0xPQ182KTsKKwkJCQkJaG9sZF90Y2Jsb2NrID0gMDsKKwkJCQkJc3RjYiA9IE5V
TEw7CisJCQkJCWdvdG8gb3V0X3VubG9ja2VkOworCQkJCX0KKwkJCX0KKwkJCS8qIG91dCB3aXRo
IHRoZSBJTklUICovCisJCQlxdWV1ZV9vbmx5X2Zvcl9pbml0ID0gMTsKKwkJCS8qLQorCQkJICog
d2UgbWF5IHdhbnQgdG8gZGlnIGluIGFmdGVyIHRoaXMgY2FsbCBhbmQgYWRqdXN0IHRoZSBNVFUK
KwkJCSAqIHZhbHVlLiBJdCBkZWZhdWx0ZWQgdG8gMTUwMCAoY29uc3RhbnQpIGJ1dCB0aGUgcm8K
KwkJCSAqIHN0cnVjdHVyZSBtYXkgbm93IGhhdmUgYW4gdXBkYXRlIGFuZCB0aHVzIHdlIG1heSBu
ZWVkIHRvCisJCQkgKiBjaGFuZ2UgaXQgQkVGT1JFIHdlIGFwcGVuZCB0aGUgbWVzc2FnZS4KKwkJ
CSAqLworCQl9CisJfSBlbHNlCisJCWFzb2MgPSAmc3RjYi0+YXNvYzsKKwlpZiAoc3JjdiA9PSBO
VUxMKSB7CisJCXNyY3YgPSAoc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqKSZhc29jLT5kZWZfc2Vu
ZDsKKwkJc2luZm9fZmxhZ3MgPSBzcmN2LT5zaW5mb19mbGFnczsKKyNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlpZiAoZmxhZ3MgJiBNU0dfRU9S
KSB7CisJCQlzaW5mb19mbGFncyB8PSBTQ1RQX0VPUjsKKwkJfQorCQlpZiAoZmxhZ3MgJiBNU0df
RU9GKSB7CisJCQlzaW5mb19mbGFncyB8PSBTQ1RQX0VPRjsKKwkJfQorI2VuZGlmCisJfQorCWlm
IChzaW5mb19mbGFncyAmIFNDVFBfQUREUl9PVkVSKSB7CisJCWlmIChhZGRyKQorCQkJbmV0ID0g
c2N0cF9maW5kbmV0KHN0Y2IsIGFkZHIpOworCQllbHNlCisJCQluZXQgPSBOVUxMOworCQlpZiAo
KG5ldCA9PSBOVUxMKSB8fAorCQkgICAgKChwb3J0ICE9IDApICYmIChwb3J0ICE9IHN0Y2ItPnJw
b3J0KSkpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBuZXQsIFNDVFBfRlJP
TV9TQ1RQX09VVFBVVCwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJZ290byBvdXRf
dW5sb2NrZWQ7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsK
KwkJCW5ldCA9IHN0Y2ItPmFzb2MuYWx0ZXJuYXRlOworCQl9IGVsc2UgeworCQkJbmV0ID0gc3Rj
Yi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uOworCQl9CisJfQorCWF0b21pY19hZGRfaW50KCZz
dGNiLT50b3RhbF9zZW5kcywgMSk7CisJLyogS2VlcCB0aGUgc3RjYiBmcm9tIGJlaW5nIGZyZWVk
IHVuZGVyIG91ciBmZWV0ICovCisJYXRvbWljX2FkZF9pbnQoJmFzb2MtPnJlZmNudCwgMSk7CisJ
ZnJlZV9jbnRfYXBwbGllZCA9IDE7CisKKwlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NU
UF9QQ0JfRkxBR1NfTk9fRlJBR01FTlQpKSB7CisJCWlmIChzbmRsZW4gPiAoc3NpemVfdClhc29j
LT5zbWFsbGVzdF9tdHUpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBuZXQs
IFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRU1TR1NJWkUpOworCQkJZXJyb3IgPSBFTVNHU0laRTsK
KwkJCWdvdG8gb3V0X3VubG9ja2VkOworCQl9CisJfQorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwlpZiAoaW5wLT5yZWN2X2NhbGxiYWNrKSB7CisJCW5vbl9ibG9ja2luZyA9IDE7CisJfQor
I2VuZGlmCisJaWYgKFNDVFBfU09fSVNfTkJJTyhzbykKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCSAgICAgfHwgKGZsYWdzICYgKE1TR19OQklP
IHwgTVNHX0RPTlRXQUlUKSkgIT0gMAorI2VuZGlmCisJICAgICkgeworCQlub25fYmxvY2tpbmcg
PSAxOworCX0KKwkvKiB3b3VsZCB3ZSBibG9jaz8gKi8KKwlpZiAobm9uX2Jsb2NraW5nKSB7CisJ
CXNzaXplX3QgYW1vdW50OworCisJCWlmIChob2xkX3RjYmxvY2sgPT0gMCkgeworCQkJU0NUUF9U
Q0JfTE9DSyhzdGNiKTsKKwkJCWhvbGRfdGNibG9jayA9IDE7CisJCX0KKwkJaW5xdWV1ZV9ieXRl
cyA9IHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgLSAoc3RjYi0+YXNvYy5jaHVu
a3Nfb25fb3V0X3F1ZXVlICogU0NUUF9EQVRBX0NIVU5LX09WRVJIRUFEKHN0Y2IpKTsKKwkJaWYg
KHVzZXJfbWFya3NfZW9yID09IDApIHsKKwkJCWFtb3VudCA9IHNuZGxlbjsKKwkJfSBlbHNlIHsK
KwkJCWFtb3VudCA9IDE7CisJCX0KKwkJaWYgKChTQ1RQX1NCX0xJTUlUX1NORChzbykgPCAgKGFt
b3VudCArIGlucXVldWVfYnl0ZXMgKyBzdGNiLT5hc29jLnNiX3NlbmRfcmVzdikpIHx8CisJCSAg
ICAoc3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlID49IFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9tYXhfY2h1bmtzX29uX3F1ZXVlKSkpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBz
dGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRVdPVUxEQkxPQ0spOworCQkJaWYgKHNu
ZGxlbiA+IChzc2l6ZV90KVNDVFBfU0JfTElNSVRfU05EKHNvKSkKKwkJCQllcnJvciA9IEVNU0dT
SVpFOworCQkJZWxzZQorCQkJCWVycm9yID0gRVdPVUxEQkxPQ0s7CisJCQlnb3RvIG91dF91bmxv
Y2tlZDsKKwkJfQorCQlzdGNiLT5hc29jLnNiX3NlbmRfcmVzdiArPSAodWludDMyX3Qpc25kbGVu
OworCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCWhvbGRfdGNibG9jayA9IDA7CisJfSBlbHNl
IHsKKwkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2Muc2Jfc2VuZF9yZXN2LCBzbmRsZW4pOwor
CX0KKwlsb2NhbF9zb3Jlc3YgPSBzbmRsZW47CisJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQ
X1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwg
c3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFQ09OTlJFU0VUKTsKKwkJZXJyb3Ig
PSBFQ09OTlJFU0VUOworCQlnb3RvIG91dF91bmxvY2tlZDsKKwl9CisJaWYgKGNyZWF0ZV9sb2Nr
X2FwcGxpZWQpIHsKKwkJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soaW5wKTsKKwkJY3JlYXRlX2xv
Y2tfYXBwbGllZCA9IDA7CisJfQorCS8qIElzIHRoZSBzdHJlYW0gbm8uIHZhbGlkPyAqLworCWlm
IChzcmN2LT5zaW5mb19zdHJlYW0gPj0gYXNvYy0+c3RyZWFtb3V0Y250KSB7CisJCS8qIEludmFs
aWQgc3RyZWFtIG51bWJlciAqLworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0
LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVJTlZBTCk7CisJCWVycm9yID0gRUlOVkFMOworCQln
b3RvIG91dF91bmxvY2tlZDsKKwl9CisJaWYgKChhc29jLT5zdHJtb3V0W3NyY3YtPnNpbmZvX3N0
cmVhbV0uc3RhdGUgIT0gU0NUUF9TVFJFQU1fT1BFTikgJiYKKwkgICAgKGFzb2MtPnN0cm1vdXRb
c3Jjdi0+c2luZm9fc3RyZWFtXS5zdGF0ZSAhPSBTQ1RQX1NUUkVBTV9PUEVOSU5HKSkgeworCQkv
KgorCQkgKiBDYW4ndCBxdWV1ZSBhbnkgZGF0YSB3aGlsZSBzdHJlYW0gcmVzZXQgaXMgdW5kZXJ3
YXkuCisJCSAqLworCQlpZiAoYXNvYy0+c3RybW91dFtzcmN2LT5zaW5mb19zdHJlYW1dLnN0YXRl
ID4gU0NUUF9TVFJFQU1fT1BFTikgeworCQkJZXJyb3IgPSBFQUdBSU47CisJCX0gZWxzZSB7CisJ
CQllcnJvciA9IEVJTlZBTDsKKwkJfQorCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwg
bmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIGVycm9yKTsKKwkJZ290byBvdXRfdW5sb2NrZWQ7
CisJfQorCWlmICgoU0NUUF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9DT09LSUVfV0FJ
VCkgfHwKKwkgICAgKFNDVFBfR0VUX1NUQVRFKHN0Y2IpID09IFNDVFBfU1RBVEVfQ09PS0lFX0VD
SE9FRCkpIHsKKwkJcXVldWVfb25seSA9IDE7CisJfQorCS8qIHdlIGFyZSBub3cgZG9uZSB3aXRo
IGFsbCBjb250cm9sICovCisJaWYgKGNvbnRyb2wpIHsKKwkJc2N0cF9tX2ZyZWVtKGNvbnRyb2wp
OworCQljb250cm9sID0gTlVMTDsKKwl9CisJaWYgKChTQ1RQX0dFVF9TVEFURShzdGNiKSA9PSBT
Q1RQX1NUQVRFX1NIVVRET1dOX1NFTlQpIHx8CisJICAgIChTQ1RQX0dFVF9TVEFURShzdGNiKSA9
PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSB8fAorCSAgICAoU0NUUF9HRVRfU1RBVEUo
c3RjYikgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkgfHwKKwkgICAgKGFzb2MtPnN0
YXRlICYgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKSkgeworCQlpZiAoc2luZm9fZmxhZ3Mg
JiBTQ1RQX0FCT1JUKSB7CisJCQk7CisJCX0gZWxzZSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUNPTk5SRVNFVCk7CisJ
CQllcnJvciA9IEVDT05OUkVTRVQ7CisJCQlnb3RvIG91dF91bmxvY2tlZDsKKwkJfQorCX0KKwkv
KiBPaywgd2Ugd2lsbCBhdHRlbXB0IGEgbXNnc25kIDo+ICovCisjaWYgIShkZWZpbmVkKF9XSU4z
MikgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkKKwlpZiAocCkgeworI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pCisJCXAtPnRkX3J1LnJ1X21zZ3NuZCsrOworI2Vsc2UKKwkJcC0+cF9zdGF0cy0+
cF9ydS5ydV9tc2dzbmQrKzsKKyNlbmRpZgorCX0KKyNlbmRpZgorCS8qIEFyZSB3ZSBhYm9ydGlu
Zz8gKi8KKwlpZiAoc2luZm9fZmxhZ3MgJiBTQ1RQX0FCT1JUKSB7CisJCXN0cnVjdCBtYnVmICpt
bTsKKwkJc3NpemVfdCB0b3RfZGVtYW5kLCB0b3Rfb3V0ID0gMCwgbWF4X291dDsKKworCQlTQ1RQ
X1NUQVRfSU5DUihzY3Rwc19zZW5kc193aXRoX2Fib3J0KTsKKwkJaWYgKChTQ1RQX0dFVF9TVEFU
RShzdGNiKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKSB8fAorCQkgICAgKFNDVFBfR0VUX1NU
QVRFKHN0Y2IpID09IFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCkpIHsKKwkJCS8qIEl0IGhhcyB0
byBiZSB1cCBiZWZvcmUgd2UgYWJvcnQgKi8KKwkJCS8qIGhvdyBiaWcgaXMgdGhlIHVzZXIgaW5p
dGlhdGVkIGFib3J0PyAqLworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5ldCwg
U0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQln
b3RvIG91dDsKKwkJfQorCQlpZiAoaG9sZF90Y2Jsb2NrKSB7CisJCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7CisJCQlob2xkX3RjYmxvY2sgPSAwOworCQl9CisJCWlmICh0b3ApIHsKKwkJCXN0cnVj
dCBtYnVmICpjbnRtID0gTlVMTDsKKworCQkJbW0gPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc2l6
ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSwgMCwgTV9XQUlUT0ssIDEsIE1UX0RBVEEpOworCQkJ
aWYgKHNuZGxlbiAhPSAwKSB7CisJCQkJZm9yIChjbnRtID0gdG9wOyBjbnRtOyBjbnRtID0gU0NU
UF9CVUZfTkVYVChjbnRtKSkgeworCQkJCQl0b3Rfb3V0ICs9IFNDVFBfQlVGX0xFTihjbnRtKTsK
KwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBNdXN0IGZpdCBpbiBhIE1UVSAqLworCQkJ
dG90X291dCA9IHNuZGxlbjsKKwkJCXRvdF9kZW1hbmQgPSAodG90X291dCArIHNpemVvZihzdHJ1
Y3Qgc2N0cF9wYXJhbWhkcikpOworCQkJaWYgKHRvdF9kZW1hbmQgPiBTQ1RQX0RFRkFVTFRfQURE
X01PUkUpIHsKKwkJCQkvKiBUbyBiaWcgKi8KKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEws
IHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTVNHU0laRSk7CisJCQkJZXJyb3Ig
PSBFTVNHU0laRTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCW1tID0gc2N0cF9nZXRfbWJ1Zl9m
b3JfbXNnKCh1bnNpZ25lZCBpbnQpdG90X2RlbWFuZCwgMCwgTV9XQUlUT0ssIDEsIE1UX0RBVEEp
OworCQl9CisJCWlmIChtbSA9PSBOVUxMKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEws
IHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOworCQkJZXJyb3IgPSBF
Tk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCQltYXhfb3V0ID0gYXNvYy0+c21hbGxlc3RfbXR1
IC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKTsKKwkJbWF4X291dCAtPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfYWJvcnRfbXNnKTsKKwkJaWYgKHRvdF9vdXQgPiBtYXhfb3V0KSB7CisJCQl0b3Rf
b3V0ID0gbWF4X291dDsKKwkJfQorCQlpZiAobW0pIHsKKwkJCXN0cnVjdCBzY3RwX3BhcmFtaGRy
ICpwaDsKKworCQkJLyogbm93IG1vdmUgZm9yd2FyZCB0aGUgZGF0YSBwb2ludGVyICovCisJCQlw
aCA9IG10b2QobW0sIHN0cnVjdCBzY3RwX3BhcmFtaGRyICopOworCQkJcGgtPnBhcmFtX3R5cGUg
PSBodG9ucyhTQ1RQX0NBVVNFX1VTRVJfSU5JVElBVEVEX0FCVCk7CisJCQlwaC0+cGFyYW1fbGVu
Z3RoID0gaHRvbnMoKHVpbnQxNl90KShzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpICsgdG90
X291dCkpOworCQkJcGgrKzsKKwkJCVNDVFBfQlVGX0xFTihtbSkgPSAoaW50KSh0b3Rfb3V0ICsg
c2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSk7CisJCQlpZiAodG9wID09IE5VTEwpIHsKKyNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQlTQ1RQ
X1NPQ0tFVF9VTkxPQ0soc28sIDApOworI2VuZGlmCisJCQkJZXJyb3IgPSB1aW9tb3ZlKChjYWRk
cl90KXBoLCAoaW50KXRvdF9vdXQsIHVpbyk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMCk7CisjZW5k
aWYKKwkJCQlpZiAoZXJyb3IpIHsKKwkJCQkJLyotCisJCQkJCSAqIEhlcmUgaWYgd2UgY2FuJ3Qg
Z2V0IGhpcyBkYXRhIHdlCisJCQkJCSAqIHN0aWxsIGFib3J0IHdlIGp1c3QgZG9uJ3QgZ2V0IHRv
CisJCQkJCSAqIHNlbmQgdGhlIHVzZXJzIG5vdGUgOi0wCisJCQkJCSAqLworCQkJCQlzY3RwX21f
ZnJlZW0obW0pOworCQkJCQltbSA9IE5VTEw7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAo
c25kbGVuICE9IDApIHsKKwkJCQkJU0NUUF9CVUZfTkVYVChtbSkgPSB0b3A7CisJCQkJfQorCQkJ
fQorCQl9CisJCWlmIChob2xkX3RjYmxvY2sgPT0gMCkgeworCQkJU0NUUF9UQ0JfTE9DSyhzdGNi
KTsKKwkJfQorCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsKKwkJZnJl
ZV9jbnRfYXBwbGllZCA9IDA7CisJCS8qIHJlbGVhc2UgdGhpcyBsb2NrLCBvdGhlcndpc2Ugd2Ug
aGFuZyBvbiBvdXJzZWx2ZXMgKi8KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQorCQlORVRfRVBPQ0hfRU5URVIoZXQpOworI2VuZGlmCisJCXNjdHBf
YWJvcnRfYW5fYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgbW0sIFNDVFBfU09fTE9D
S0VEKTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorCQlORVRfRVBPQ0hfRVhJVChldCk7CisjZW5kaWYKKwkJLyogbm93IHJlbG9jayB0aGUgc3Rj
YiBzbyBldmVyeXRoaW5nIGlzIHNhbmUgKi8KKwkJaG9sZF90Y2Jsb2NrID0gMDsKKwkJc3RjYiA9
IE5VTEw7CisJCS8qIEluIHRoaXMgY2FzZSB0b3AgaXMgYWxyZWFkeSBjaGFpbmVkIHRvIG1tCisJ
CSAqIGF2b2lkIGRvdWJsZSBmcmVlLCBzaW5jZSB3ZSBmcmVlIGl0IGJlbG93IGlmCisJCSAqIHRv
cCAhPSBOVUxMIGFuZCBkcml2ZXIgd291bGQgZnJlZSBpdCBhZnRlciBzZW5kaW5nCisJCSAqIHRo
ZSBwYWNrZXQgb3V0CisJCSAqLworCQlpZiAoc25kbGVuICE9IDApIHsKKwkJCXRvcCA9IE5VTEw7
CisJCX0KKwkJZ290byBvdXRfdW5sb2NrZWQ7CisJfQorCS8qIENhbGN1bGF0ZSB0aGUgbWF4aW11
bSB3ZSBjYW4gc2VuZCAqLworCWlucXVldWVfYnl0ZXMgPSBzdGNiLT5hc29jLnRvdGFsX291dHB1
dF9xdWV1ZV9zaXplIC0gKHN0Y2ItPmFzb2MuY2h1bmtzX29uX291dF9xdWV1ZSAqIFNDVFBfREFU
QV9DSFVOS19PVkVSSEVBRChzdGNiKSk7CisJaWYgKFNDVFBfU0JfTElNSVRfU05EKHNvKSA+IGlu
cXVldWVfYnl0ZXMpIHsKKwkJbWF4X2xlbiA9IFNDVFBfU0JfTElNSVRfU05EKHNvKSAtIGlucXVl
dWVfYnl0ZXM7CisJfSBlbHNlIHsKKwkJbWF4X2xlbiA9IDA7CisJfQorCWlmIChob2xkX3RjYmxv
Y2spIHsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlob2xkX3RjYmxvY2sgPSAwOworCX0K
KwlpZiAoYXNvYy0+c3RybW91dCA9PSBOVUxMKSB7CisJCS8qIGh1aD8gc29mdHdhcmUgZXJyb3Ig
Ki8KKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBf
T1VUUFVULCBFRkFVTFQpOworCQllcnJvciA9IEVGQVVMVDsKKwkJZ290byBvdXRfdW5sb2NrZWQ7
CisJfQorCisJLyogVW5sZXNzIEVfRU9SIG1vZGUgaXMgb24sIHdlIG11c3QgbWFrZSBhIHNlbmQg
RklUIGluIG9uZSBjYWxsLiAqLworCWlmICgodXNlcl9tYXJrc19lb3IgPT0gMCkgJiYKKwkgICAg
KHNuZGxlbiA+IChzc2l6ZV90KVNDVFBfU0JfTElNSVRfU05EKHN0Y2ItPnNjdHBfc29ja2V0KSkp
IHsKKwkJLyogSXQgd2lsbCBORVZFUiBmaXQgKi8KKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxM
LCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRU1TR1NJWkUpOworCQllcnJvciA9
IEVNU0dTSVpFOworCQlnb3RvIG91dF91bmxvY2tlZDsKKwl9CisJaWYgKCh1aW8gPT0gTlVMTCkg
JiYgdXNlcl9tYXJrc19lb3IpIHsKKwkJLyotCisJCSAqIFdlIGRvIG5vdCBzdXBwb3J0IGVlb3Ig
bW9kZSBmb3IKKwkJICogc2VuZGluZyB3aXRoIG1idWYgY2hhaW5zIChsaWtlIHNlbmRmaWxlKS4K
KwkJICovCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01f
U0NUUF9PVVRQVVQsIEVJTlZBTCk7CisJCWVycm9yID0gRUlOVkFMOworCQlnb3RvIG91dF91bmxv
Y2tlZDsKKwl9CisKKwlpZiAodXNlcl9tYXJrc19lb3IpIHsKKwkJbG9jYWxfYWRkX21vcmUgPSAo
c3NpemVfdCltaW4oU0NUUF9TQl9MSU1JVF9TTkQoc28pLCBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
YWRkX21vcmVfdGhyZXNob2xkKSk7CisJfSBlbHNlIHsKKwkJLyotCisJCSAqIEZvciBub24tZWVv
ciB0aGUgd2hvbGUgbWVzc2FnZSBtdXN0IGZpdCBpbgorCQkgKiB0aGUgc29ja2V0IHNlbmQgYnVm
ZmVyLgorCQkgKi8KKwkJbG9jYWxfYWRkX21vcmUgPSBzbmRsZW47CisJfQorCWxlbiA9IDA7CisJ
aWYgKG5vbl9ibG9ja2luZykgeworCQlnb3RvIHNraXBfcHJlYmxvY2s7CisJfQorCWlmICgoKG1h
eF9sZW4gPD0gbG9jYWxfYWRkX21vcmUpICYmCisJICAgICAoKHNzaXplX3QpU0NUUF9TQl9MSU1J
VF9TTkQoc28pID49IGxvY2FsX2FkZF9tb3JlKSkgfHwKKwkgICAgKG1heF9sZW4gPT0gMCkgfHwK
KwkgICAgKChzdGNiLT5hc29jLmNodW5rc19vbl9vdXRfcXVldWUrc3RjYi0+YXNvYy5zdHJlYW1f
cXVldWVfY250KSA+PSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWF4X2NodW5rc19vbl9xdWV1ZSkp
KSB7CisJCS8qIE5vIHJvb20gcmlnaHQgbm93ICEgKi8KKwkJU09DS0JVRl9MT0NLKCZzby0+c29f
c25kKTsKKwkJaW5xdWV1ZV9ieXRlcyA9IHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3Np
emUgLSAoc3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlICogU0NUUF9EQVRBX0NIVU5LX09W
RVJIRUFEKHN0Y2IpKTsKKwkJd2hpbGUgKChTQ1RQX1NCX0xJTUlUX1NORChzbykgPCAoaW5xdWV1
ZV9ieXRlcyArIGxvY2FsX2FkZF9tb3JlKSkgfHwKKwkJICAgICAgICgoc3RjYi0+YXNvYy5zdHJl
YW1fcXVldWVfY250ICsgc3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlKSA+PSBTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbWF4X2NodW5rc19vbl9xdWV1ZSkpKSB7CisJCQlTQ1RQREJHKFNDVFBf
REVCVUdfT1VUUFVUMSwicHJlX2Jsb2NrIGxpbWl0OiV1IDwoaW5xOiVkICsgJXpkKSB8fCAoJWQr
JWQgPiAlZClcbiIsCisJCQkgICAgICAgICh1bnNpZ25lZCBpbnQpU0NUUF9TQl9MSU1JVF9TTkQo
c28pLAorCQkJICAgICAgICBpbnF1ZXVlX2J5dGVzLAorCQkJICAgICAgICBsb2NhbF9hZGRfbW9y
ZSwKKwkJCSAgICAgICAgc3RjYi0+YXNvYy5zdHJlYW1fcXVldWVfY250LAorCQkJICAgICAgICBz
dGNiLT5hc29jLmNodW5rc19vbl9vdXRfcXVldWUsCisJCQkgICAgICAgIFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9tYXhfY2h1bmtzX29uX3F1ZXVlKSk7CisJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9CTEtfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQlzY3Rw
X2xvZ19ibG9jayhTQ1RQX0JMT0NLX0xPR19JTlRPX0JMS0EsIGFzb2MsIHNuZGxlbik7CisJCQl9
CisJCQliZS5lcnJvciA9IDA7CisjaWYgIShkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19V
c2Vyc3BhY2VfXykpCisJCQlzdGNiLT5ibG9ja19lbnRyeSA9ICZiZTsKKyNlbmRpZgorCQkJZXJy
b3IgPSBzYndhaXQoJnNvLT5zb19zbmQpOworCQkJc3RjYi0+YmxvY2tfZW50cnkgPSBOVUxMOwor
CQkJaWYgKGVycm9yIHx8IHNvLT5zb19lcnJvciB8fCBiZS5lcnJvcikgeworCQkJCWlmIChlcnJv
ciA9PSAwKSB7CisJCQkJCWlmIChzby0+c29fZXJyb3IpCisJCQkJCQllcnJvciA9IHNvLT5zb19l
cnJvcjsKKwkJCQkJaWYgKGJlLmVycm9yKSB7CisJCQkJCQllcnJvciA9IGJlLmVycm9yOworCQkJ
CQl9CisJCQkJfQorCQkJCVNPQ0tCVUZfVU5MT0NLKCZzby0+c29fc25kKTsKKwkJCQlnb3RvIG91
dF91bmxvY2tlZDsKKwkJCX0KKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19s
ZXZlbCkgJiBTQ1RQX0JMS19MT0dHSU5HX0VOQUJMRSkgeworCQkJCXNjdHBfbG9nX2Jsb2NrKFND
VFBfQkxPQ0tfTE9HX09VVE9GX0JMSywKKwkJCQkgICAgICAgICAgICAgICBhc29jLCBzdGNiLT5h
c29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplKTsKKwkJCX0KKwkJCWlmIChzdGNiLT5hc29jLnN0
YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCkgeworCQkJCVNPQ0tCVUZfVU5MT0NL
KCZzby0+c29fc25kKTsKKwkJCQlnb3RvIG91dF91bmxvY2tlZDsKKwkJCX0KKwkJCWlucXVldWVf
Ynl0ZXMgPSBzdGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplIC0gKHN0Y2ItPmFzb2Mu
Y2h1bmtzX29uX291dF9xdWV1ZSAqIFNDVFBfREFUQV9DSFVOS19PVkVSSEVBRChzdGNiKSk7CisJ
CX0KKwkJaWYgKFNDVFBfU0JfTElNSVRfU05EKHNvKSA+IGlucXVldWVfYnl0ZXMpIHsKKwkJCW1h
eF9sZW4gPSBTQ1RQX1NCX0xJTUlUX1NORChzbykgLSAgaW5xdWV1ZV9ieXRlczsKKwkJfSBlbHNl
IHsKKwkJCW1heF9sZW4gPSAwOworCQl9CisJCVNPQ0tCVUZfVU5MT0NLKCZzby0+c29fc25kKTsK
Kwl9CisKK3NraXBfcHJlYmxvY2s6CisJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRF
X0FCT1VUX1RPX0JFX0ZSRUVEKSB7CisJCWdvdG8gb3V0X3VubG9ja2VkOworCX0KKyNpZiBkZWZp
bmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwllcnJvciA9IHNibG9j
aygmc28tPnNvX3NuZCwgU0JMT0NLV0FJVChmbGFncykpOworI2VuZGlmCisJLyogc25kbGVuIGNv
dmVycyBmb3IgbWJ1ZiBjYXNlCisJICogdWlvX3Jlc2lkIGNvdmVycyBmb3IgdGhlIG5vbi1tYnVm
IGNhc2UKKwkgKiBOT1RFOiB1aW8gd2lsbCBiZSBudWxsIHdoZW4gdG9wL21idWYgaXMgcGFzc2Vk
CisJICovCisJaWYgKHNuZGxlbiA9PSAwKSB7CisJCWlmIChzaW5mb19mbGFncyAmIFNDVFBfRU9G
KSB7CisJCQlnb3RfYWxsX29mX3RoZV9zZW5kID0gMTsKKwkJCWdvdG8gZGF0YWxlc3NfZW9mOwor
CQl9IGVsc2UgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5ldCwgU0NUUF9G
Uk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlnb3RvIG91
dDsKKwkJfQorCX0KKwlpZiAodG9wID09IE5VTEwpIHsKKwkJc3RydWN0IHNjdHBfc3RyZWFtX3F1
ZXVlX3BlbmRpbmcgKnNwOworCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJtOworCQl1aW50
MzJfdCBzbmRvdXQ7CisKKwkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOworCQlpZiAoKGFzb2Mt
PnN0cmVhbV9sb2NrZWQpICYmCisJCSAgICAoYXNvYy0+c3RyZWFtX2xvY2tlZF9vbiAgIT0gc3Jj
di0+c2luZm9fc3RyZWFtKSkgeworCQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQs
IEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCXN0cm0g
PSAmc3RjYi0+YXNvYy5zdHJtb3V0W3NyY3YtPnNpbmZvX3N0cmVhbV07CisJCWlmIChzdHJtLT5s
YXN0X21zZ19pbmNvbXBsZXRlID09IDApIHsKKwkJZG9fYV9jb3B5X2luOgorCQkJU0NUUF9UQ0Jf
U0VORF9VTkxPQ0soc3RjYik7CisJCQlzcCA9IHNjdHBfY29weV9pdF9pbihzdGNiLCBhc29jLCBz
cmN2LCB1aW8sIG5ldCwgbWF4X2xlbiwgdXNlcl9tYXJrc19lb3IsICZlcnJvcik7CisJCQlpZiAo
ZXJyb3IpIHsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNi
KTsKKwkJCWlmIChzcC0+bXNnX2lzX2NvbXBsZXRlKSB7CisJCQkJc3RybS0+bGFzdF9tc2dfaW5j
b21wbGV0ZSA9IDA7CisJCQkJYXNvYy0+c3RyZWFtX2xvY2tlZCA9IDA7CisJCQl9IGVsc2Ugewor
CQkJCS8qIEp1c3QgZ290IGxvY2tlZCB0byB0aGlzIGd1eSBpbgorCQkJCSAqIGNhc2Ugb2YgYW4g
aW50ZXJydXB0LgorCQkJCSAqLworCQkJCXN0cm0tPmxhc3RfbXNnX2luY29tcGxldGUgPSAxOwor
CQkJCWlmIChzdGNiLT5hc29jLmlkYXRhX3N1cHBvcnRlZCA9PSAwKSB7CisJCQkJCWFzb2MtPnN0
cmVhbV9sb2NrZWQgPSAxOworCQkJCQlhc29jLT5zdHJlYW1fbG9ja2VkX29uICA9IHNyY3YtPnNp
bmZvX3N0cmVhbTsKKwkJCQl9CisJCQkJc3AtPnNlbmRlcl9hbGxfZG9uZSA9IDA7CisJCQl9CisJ
CQlzY3RwX3NuZF9zYl9hbGxvYyhzdGNiLCBzcC0+bGVuZ3RoKTsKKwkJCWF0b21pY19hZGRfaW50
KCZhc29jLT5zdHJlYW1fcXVldWVfY250LCAxKTsKKwkJCWlmIChzaW5mb19mbGFncyAmIFNDVFBf
VU5PUkRFUkVEKSB7CisJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHNfd2l0aF91bm9yZCk7
CisJCQl9CisJCQlzcC0+cHJvY2Vzc2luZyA9IDE7CisJCQlUQUlMUV9JTlNFUlRfVEFJTCgmc3Ry
bS0+b3V0cXVldWUsIHNwLCBuZXh0KTsKKwkJCXN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBf
c3NfYWRkX3RvX3N0cmVhbShzdGNiLCBhc29jLCBzdHJtLCBzcCwgMSk7CisJCX0gZWxzZSB7CisJ
CQlzcCA9IFRBSUxRX0xBU1QoJnN0cm0tPm91dHF1ZXVlLCBzY3RwX3N0cmVhbWhlYWQpOworCQkJ
aWYgKHNwID09IE5VTEwpIHsKKwkJCQkvKiA/Pz8/IEh1aCA/Pz8gbGFzdCBtc2cgaXMgZ29uZSAq
LworI2lmZGVmIElOVkFSSUFOVFMKKwkJCQlwYW5pYygiV2FybmluZzogTGFzdCBtc2cgbWFya2Vk
IGluY29tcGxldGUsIHlldCBub3RoaW5nIGxlZnQ/Iik7CisjZWxzZQorCQkJCVNDVFBfUFJJTlRG
KCJXYXJuaW5nOiBMYXN0IG1zZyBtYXJrZWQgaW5jb21wbGV0ZSwgeWV0IG5vdGhpbmcgbGVmdD9c
biIpOworCQkJCXN0cm0tPmxhc3RfbXNnX2luY29tcGxldGUgPSAwOworI2VuZGlmCisJCQkJZ290
byBkb19hX2NvcHlfaW47CisJCQl9CisJCQlpZiAoc3AtPnByb2Nlc3NpbmcpIHsKKwkJCQlTQ1RQ
X1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3Rj
YiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5W
QUw7CisJCQkJZ290byBvdXQ7CisJCQl9IGVsc2UgeworCQkJCXNwLT5wcm9jZXNzaW5nID0gMTsK
KwkJCX0KKwkJfQorCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKKyNpZiBkZWZpbmVkKF9f
QVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpZiBkZWZpbmVkKEFQUExFX0xF
T1BBUkQpCisJCXdoaWxlICh1aW8tPnVpb19yZXNpZCA+IDApIHsKKyNlbHNlCisJCXdoaWxlICh1
aW9fcmVzaWQodWlvKSA+IDApIHsKKyNlbmRpZgorI2Vsc2UKKwkJd2hpbGUgKHVpby0+dWlvX3Jl
c2lkID4gMCkgeworI2VuZGlmCisJCQkvKiBIb3cgbXVjaCByb29tIGRvIHdlIGhhdmU/ICovCisJ
CQlzdHJ1Y3QgbWJ1ZiAqbmV3X3RhaWwsICptbTsKKworCQkJaW5xdWV1ZV9ieXRlcyA9IHN0Y2It
PmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgLSAoc3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0
X3F1ZXVlICogU0NUUF9EQVRBX0NIVU5LX09WRVJIRUFEKHN0Y2IpKTsKKwkJCWlmIChTQ1RQX1NC
X0xJTUlUX1NORChzbykgPiBpbnF1ZXVlX2J5dGVzKQorCQkJCW1heF9sZW4gPSBTQ1RQX1NCX0xJ
TUlUX1NORChzbykgLSBpbnF1ZXVlX2J5dGVzOworCQkJZWxzZQorCQkJCW1heF9sZW4gPSAwOwor
CisJCQlpZiAoKG1heF9sZW4gPiAoc3NpemVfdClTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYWRkX21v
cmVfdGhyZXNob2xkKSkgfHwKKwkJCSAgICAobWF4X2xlbiAmJiAoU0NUUF9TQl9MSU1JVF9TTkQo
c28pIDwgU0NUUF9CQVNFX1NZU0NUTChzY3RwX2FkZF9tb3JlX3RocmVzaG9sZCkpKSB8fAorI2lm
IGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRlZmlu
ZWQoQVBQTEVfTEVPUEFSRCkKKwkJCSAgICAodWlvLT51aW9fcmVzaWQgJiYgKHVpby0+dWlvX3Jl
c2lkIDw9IG1heF9sZW4pKSkgeworI2Vsc2UKKwkJCSAgICAodWlvX3Jlc2lkKHVpbykgJiYgKHVp
b19yZXNpZCh1aW8pIDw9IG1heF9sZW4pKSkgeworI2VuZGlmCisjZWxzZQorCQkJICAgICh1aW8t
PnVpb19yZXNpZCAmJiAodWlvLT51aW9fcmVzaWQgPD0gbWF4X2xlbikpKSB7CisjZW5kaWYKKwkJ
CQlzbmRvdXQgPSAwOworCQkJCW5ld190YWlsID0gTlVMTDsKKwkJCQlpZiAoaG9sZF90Y2Jsb2Nr
KSB7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQkJaG9sZF90Y2Jsb2NrID0gMDsK
KwkJCQl9CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisJCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAwKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQltbSA9IHNjdHBfY29weV9y
ZXN1bWUodWlvLCAoaW50KW1heF9sZW4sIHVzZXJfbWFya3NfZW9yLCAmZXJyb3IsICZzbmRvdXQs
ICZuZXdfdGFpbCk7CisjZWxzZQorCQkJCW1tID0gc2N0cF9jb3B5X3Jlc3VtZSh1aW8sIChpbnQp
bWF4X2xlbiwgJmVycm9yLCAmc25kb3V0LCAmbmV3X3RhaWwpOworI2VuZGlmCisjaWYgZGVmaW5l
ZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJU0NUUF9TT0NLRVRf
TE9DSyhzbywgMCk7CisjZW5kaWYKKwkJCQlpZiAoKG1tID09IE5VTEwpIHx8IGVycm9yKSB7CisJ
CQkJCWlmIChtbSkgeworCQkJCQkJc2N0cF9tX2ZyZWVtKG1tKTsKKwkJCQkJfQorCQkJCQlTQ1RQ
X1RDQl9TRU5EX0xPQ0soc3RjYik7CisJCQkJCWlmICgoKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQ
X1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEKSA9PSAwKSAmJgorCQkJCQkgICAgKChzdGNiLT5hc29j
LnN0YXRlICYgU0NUUF9TVEFURV9XQVNfQUJPUlRFRCkgPT0gMCkgJiYKKwkJCQkJICAgIChzcCAh
PSBOVUxMKSkgeworCQkJCQkJc3AtPnByb2Nlc3NpbmcgPSAwOworCQkJCQl9CisJCQkJCVNDVFBf
VENCX1NFTkRfVU5MT0NLKHN0Y2IpOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQkJLyogVXBk
YXRlIHRoZSBtYnVmIGFuZCBjb3VudCAqLworCQkJCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsK
KwkJCQlpZiAoKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVE
KSB8fAorCQkJCSAgICAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfV0FTX0FCT1JURUQp
KSB7CisJCQkJCS8qIHdlIG5lZWQgdG8gZ2V0IG91dC4KKwkJCQkJICogUGVlciBwcm9iYWJseSBh
Ym9ydGVkLgorCQkJCQkgKi8KKwkJCQkJc2N0cF9tX2ZyZWVtKG1tKTsKKwkJCQkJaWYgKHN0Y2It
PmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX1dBU19BQk9SVEVEKSB7CisJCQkJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUNPTk5S
RVNFVCk7CisJCQkJCQllcnJvciA9IEVDT05OUkVTRVQ7CisJCQkJCX0KKwkJCQkJU0NUUF9UQ0Jf
U0VORF9VTkxPQ0soc3RjYik7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCQlpZiAoc3AtPnRh
aWxfbWJ1ZikgeworCQkJCQkvKiB0YWNrIGl0IHRvIHRoZSBlbmQgKi8KKwkJCQkJU0NUUF9CVUZf
TkVYVChzcC0+dGFpbF9tYnVmKSA9IG1tOworCQkJCQlzcC0+dGFpbF9tYnVmID0gbmV3X3RhaWw7
CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogQSBzdG9sZW4gbWJ1ZiAqLworCQkJCQlzcC0+ZGF0YSA9
IG1tOworCQkJCQlzcC0+dGFpbF9tYnVmID0gbmV3X3RhaWw7CisJCQkJfQorCQkJCXNjdHBfc25k
X3NiX2FsbG9jKHN0Y2IsIHNuZG91dCk7CisJCQkJYXRvbWljX2FkZF9pbnQoJnNwLT5sZW5ndGgs
IHNuZG91dCk7CisJCQkJbGVuICs9IHNuZG91dDsKKwkJCQlpZiAoc2luZm9fZmxhZ3MgJiBTQ1RQ
X1NBQ0tfSU1NRURJQVRFTFkpIHsKKwkJCQkJc3AtPnNpbmZvX2ZsYWdzIHw9IFNDVFBfU0FDS19J
TU1FRElBVEVMWTsKKwkJCQl9CisKKwkJCQkvKiBEaWQgd2UgcmVhY2ggRU9SPyAqLworI2lmIGRl
ZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRlZmluZWQo
QVBQTEVfTEVPUEFSRCkKKwkJCQlpZiAoKHVpby0+dWlvX3Jlc2lkID09IDApICYmCisjZWxzZQor
CQkJCWlmICgodWlvX3Jlc2lkKHVpbykgPT0gMCkgJiYKKyNlbmRpZgorI2Vsc2UKKwkJCQlpZiAo
KHVpby0+dWlvX3Jlc2lkID09IDApICYmCisjZW5kaWYKKwkJCQkgICAgKCh1c2VyX21hcmtzX2Vv
ciA9PSAwKSB8fAorCQkJCSAgICAgKHNpbmZvX2ZsYWdzICYgU0NUUF9FT0YpIHx8CisJCQkJICAg
ICAodXNlcl9tYXJrc19lb3IgJiYgKHNpbmZvX2ZsYWdzICYgU0NUUF9FT1IpKSkpIHsKKwkJCQkJ
c3AtPm1zZ19pc19jb21wbGV0ZSA9IDE7CisJCQkJfSBlbHNlIHsKKwkJCQkJc3AtPm1zZ19pc19j
b21wbGV0ZSA9IDA7CisJCQkJfQorCQkJCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOworCQkJ
fQorI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lm
IGRlZmluZWQoQVBQTEVfTEVPUEFSRCkKKwkJCWlmICh1aW8tPnVpb19yZXNpZCA9PSAwKSB7Cisj
ZWxzZQorCQkJaWYgKHVpb19yZXNpZCh1aW8pID09IDApIHsKKyNlbmRpZgorI2Vsc2UKKwkJCWlm
ICh1aW8tPnVpb19yZXNpZCA9PSAwKSB7CisjZW5kaWYKKwkJCQkvKiBnb3QgaXQgYWxsPyAqLwor
CQkJCWNvbnRpbnVlOworCQkJfQorCQkJLyogUFItU0NUUD8gKi8KKwkJCWlmICgoYXNvYy0+cHJz
Y3RwX3N1cHBvcnRlZCkgJiYgKGFzb2MtPnNlbnRfcXVldWVfY250X3JlbW92ZWFibGUgPiAwKSkg
eworCQkJCS8qIFRoaXMgaXMgdWdseSBidXQgd2UgbXVzdCBhc3N1cmUgbG9ja2luZyBvcmRlciAq
LworCQkJCWlmIChob2xkX3RjYmxvY2sgPT0gMCkgeworCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2Ip
OworCQkJCQlob2xkX3RjYmxvY2sgPSAxOworCQkJCX0KKwkJCQlzY3RwX3BydW5lX3Byc2N0cChz
dGNiLCBhc29jLCBzcmN2LCAoaW50KXNuZGxlbik7CisJCQkJaW5xdWV1ZV9ieXRlcyA9IHN0Y2It
PmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgLSAoc3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0
X3F1ZXVlICogU0NUUF9EQVRBX0NIVU5LX09WRVJIRUFEKHN0Y2IpKTsKKwkJCQlpZiAoU0NUUF9T
Ql9MSU1JVF9TTkQoc28pID4gaW5xdWV1ZV9ieXRlcykKKwkJCQkJbWF4X2xlbiA9IFNDVFBfU0Jf
TElNSVRfU05EKHNvKSAtIGlucXVldWVfYnl0ZXM7CisJCQkJZWxzZQorCQkJCQltYXhfbGVuID0g
MDsKKwkJCQlpZiAobWF4X2xlbiA+IDApIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCVND
VFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQlob2xkX3RjYmxvY2sgPSAwOworCQkJfQorCQkJLyog
d2FpdCBmb3Igc3BhY2Ugbm93ICovCisJCQlpZiAobm9uX2Jsb2NraW5nKSB7CisJCQkJLyogTm9u
LWJsb2NraW5nIGlvIGluIHBsYWNlIG91dCAqLworCQkJCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNi
KTsKKwkJCQlpZiAoc3AgIT0gTlVMTCkgeworCQkJCQlzcC0+cHJvY2Vzc2luZyA9IDA7CisJCQkJ
fQorCQkJCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOworCQkJCWdvdG8gc2tpcF9vdXRfZW9m
OworCQkJfQorCQkJLyogV2hhdCBhYm91dCB0aGUgSU5JVCwgc2VuZCBpdCBtYXliZSAqLworCQkJ
aWYgKHF1ZXVlX29ubHlfZm9yX2luaXQpIHsKKwkJCQlpZiAoaG9sZF90Y2Jsb2NrID09IDApIHsK
KwkJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQkJaG9sZF90Y2Jsb2NrID0gMTsKKwkJCQl9
CisJCQkJaWYgKFNDVFBfR0VUX1NUQVRFKHN0Y2IpID09IFNDVFBfU1RBVEVfT1BFTikgeworCQkJ
CQkvKiBhIGNvbGxpc2lvbiB0b29rIHVzIGZvcndhcmQ/ICovCisJCQkJCXF1ZXVlX29ubHkgPSAw
OworCQkJCX0gZWxzZSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKwkJCQkJTkVUX0VQT0NIX0VOVEVSKGV0KTsKKyNlbmRpZgorCQkJCQlzY3Rw
X3NlbmRfaW5pdGlhdGUoaW5wLCBzdGNiLCBTQ1RQX1NPX0xPQ0tFRCk7CisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQkJTkVUX0VQT0NIX0VY
SVQoZXQpOworI2VuZGlmCisJCQkJCVNDVFBfU0VUX1NUQVRFKHN0Y2IsIFNDVFBfU1RBVEVfQ09P
S0lFX1dBSVQpOworCQkJCQlxdWV1ZV9vbmx5ID0gMTsKKwkJCQl9CisJCQl9CisJCQlpZiAoKG5l
dC0+ZmxpZ2h0X3NpemUgPiBuZXQtPmN3bmQpICYmCisJCQkgICAgKGFzb2MtPnNjdHBfY210X29u
X29mZiA9PSAwKSkgeworCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRfY3duZF9hdm9pZCk7
CisJCQkJcXVldWVfb25seSA9IDE7CisJCQl9IGVsc2UgaWYgKGFzb2MtPmlmcF9oYWRfZW5vYnVm
KSB7CisJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfaWZub21lbXF1ZXVlZCk7CisJCQkJaWYgKG5l
dC0+ZmxpZ2h0X3NpemUgPiAoMiAqIG5ldC0+bXR1KSkgeworCQkJCQlxdWV1ZV9vbmx5ID0gMTsK
KwkJCQl9CisJCQkJYXNvYy0+aWZwX2hhZF9lbm9idWYgPSAwOworCQkJfQorCQkJdW5fc2VudCA9
IHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgLSBzdGNiLT5hc29jLnRvdGFsX2Zs
aWdodDsKKwkJCWlmICgoc2N0cF9pc19mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX05P
REVMQVkpKSAmJgorCQkJICAgIChzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCA+IDApICYmCisJCQkg
ICAgKHN0Y2ItPmFzb2Muc3RyZWFtX3F1ZXVlX2NudCA8IFNDVFBfTUFYX0RBVEFfQlVORExJTkcp
ICYmCisJCQkgICAgKHVuX3NlbnQgPCAoaW50KShzdGNiLT5hc29jLnNtYWxsZXN0X210dSAtIFND
VFBfTUlOX09WRVJIRUFEKSkpIHsKKwkJCQkvKi0KKwkJCQkgKiBPaywgTmFnbGUgaXMgc2V0IG9u
IGFuZCB3ZSBoYXZlIGRhdGEgb3V0c3RhbmRpbmcuCisJCQkJICogRG9uJ3Qgc2VuZCBhbnl0aGlu
ZyBhbmQgbGV0IFNBQ0tzIGRyaXZlIG91dCB0aGUKKwkJCQkgKiBkYXRhIHVubGVzcyB3ZSBoYXZl
IGEgImZ1bGwiIHNlZ21lbnQgdG8gc2VuZC4KKwkJCQkgKi8KKwkJCQlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9OQUdMRV9MT0dHSU5HX0VOQUJMRSkgewor
CQkJCQlzY3RwX2xvZ19uYWdsZV9ldmVudChzdGNiLCBTQ1RQX05BR0xFX0FQUExJRUQpOworCQkJ
CX0KKwkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19uYWdsZXF1ZXVlZCk7CisJCQkJbmFnbGVfYXBw
bGllcyA9IDE7CisJCQl9IGVsc2UgeworCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9n
Z2luZ19sZXZlbCkgJiBTQ1RQX05BR0xFX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCWlmIChzY3Rw
X2lzX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfTk9ERUxBWSkpCisJCQkJCQlzY3Rw
X2xvZ19uYWdsZV9ldmVudChzdGNiLCBTQ1RQX05BR0xFX1NLSVBQRUQpOworCQkJCX0KKwkJCQlT
Q1RQX1NUQVRfSU5DUihzY3Rwc19uYWdsZXNlbnQpOworCQkJCW5hZ2xlX2FwcGxpZXMgPSAwOwor
CQkJfQorCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBf
QkxLX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJc2N0cF9taXNjX2ludHMoU0NUUF9DV05ETE9HX1BS
RVNFTkQsIHF1ZXVlX29ubHlfZm9yX2luaXQsIHF1ZXVlX29ubHksCisJCQkJCSAgICAgICBuYWds
ZV9hcHBsaWVzLCB1bl9zZW50KTsKKwkJCQlzY3RwX21pc2NfaW50cyhTQ1RQX0NXTkRMT0dfUFJF
U0VORCwgc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSwKKwkJCQkJICAgICAgIHN0
Y2ItPmFzb2MudG90YWxfZmxpZ2h0LAorCQkJCQkgICAgICAgc3RjYi0+YXNvYy5jaHVua3Nfb25f
b3V0X3F1ZXVlLCBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodF9jb3VudCk7CisJCQl9CisJCQlpZiAo
cXVldWVfb25seV9mb3JfaW5pdCkKKwkJCQlxdWV1ZV9vbmx5X2Zvcl9pbml0ID0gMDsKKwkJCWlm
ICgocXVldWVfb25seSA9PSAwKSAmJiAobmFnbGVfYXBwbGllcyA9PSAwKSkgeworCQkJCS8qLQor
CQkJCSAqIG5lZWQgdG8gc3RhcnQgY2h1bmsgb3V0cHV0CisJCQkJICogYmVmb3JlIGJsb2NraW5n
Li4gbm90ZSB0aGF0IGlmCisJCQkJICogYSBsb2NrIGlzIGFscmVhZHkgYXBwbGllZCwgdGhlbgor
CQkJCSAqIHRoZSBpbnB1dCB2aWEgdGhlIG5ldCBpcyBoYXBwZW5pbmcKKwkJCQkgKiBhbmQgSSBk
b24ndCBuZWVkIHRvIHN0YXJ0IG91dHB1dCA6LUQKKwkJCQkgKi8KKyNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCU5FVF9FUE9DSF9FTlRFUihl
dCk7CisjZW5kaWYKKwkJCQlpZiAoaG9sZF90Y2Jsb2NrID09IDApIHsKKwkJCQkJaWYgKFNDVFBf
VENCX1RSWUxPQ0soc3RjYikpIHsKKwkJCQkJCWhvbGRfdGNibG9jayA9IDE7CisJCQkJCQlzY3Rw
X2NodW5rX291dHB1dChpbnAsCisJCQkJCQkJCSAgc3RjYiwKKwkJCQkJCQkJICBTQ1RQX09VVFBV
VF9GUk9NX1VTUl9TRU5ELCBTQ1RQX1NPX0xPQ0tFRCk7CisJCQkJCX0KKwkJCQl9IGVsc2Ugewor
CQkJCQlzY3RwX2NodW5rX291dHB1dChpbnAsCisJCQkJCQkJICBzdGNiLAorCQkJCQkJCSAgU0NU
UF9PVVRQVVRfRlJPTV9VU1JfU0VORCwgU0NUUF9TT19MT0NLRUQpOworCQkJCX0KKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCU5FVF9FUE9D
SF9FWElUKGV0KTsKKyNlbmRpZgorCQkJfQorCQkJaWYgKGhvbGRfdGNibG9jayA9PSAxKSB7CisJ
CQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCWhvbGRfdGNibG9jayA9IDA7CisJCQl9CisJ
CQlTT0NLQlVGX0xPQ0soJnNvLT5zb19zbmQpOworCQkJLyotCisJCQkgKiBUaGlzIGlzIGEgYml0
IHN0cmFuZ2UsIGJ1dCBJIHRoaW5rIGl0IHdpbGwKKwkJCSAqIHdvcmsuIFRoZSB0b3RhbF9vdXRw
dXRfcXVldWVfc2l6ZSBpcyBsb2NrZWQgYW5kCisJCQkgKiBwcm90ZWN0ZWQgYnkgdGhlIFRDQl9M
T0NLLCB3aGljaCB3ZSBqdXN0IHJlbGVhc2VkLgorCQkJICogVGhlcmUgaXMgYSByYWNlIHRoYXQg
Y2FuIG9jY3VyIGJldHdlZW4gcmVsZWFzaW5nIGl0CisJCQkgKiBhYm92ZSwgYW5kIG1lIGdldHRp
bmcgdGhlIHNvY2tldCBsb2NrLCB3aGVyZSBzYWNrcworCQkJICogY29tZSBpbiBidXQgd2UgaGF2
ZSBub3QgcHV0IHRoZSBTQl9XQUlUIG9uIHRoZQorCQkJICogc29fc25kIGJ1ZmZlciB0byBnZXQg
dGhlIHdha2V1cC4gQWZ0ZXIgdGhlIExPQ0sKKwkJCSAqIGlzIGFwcGxpZWQgdGhlIHNhY2tfcHJv
Y2Vzc2luZyB3aWxsIGFsc28gbmVlZCB0bworCQkJICogTE9DSyB0aGUgc28tPnNvX3NuZCB0byBk
byB0aGUgYWN0dWFsIHNvd3dha2V1cCgpLiBTbworCQkJICogb25jZSB3ZSBoYXZlIHRoZSBzb2Nr
ZXQgYnVmZmVyIGxvY2sgaWYgd2UgcmVjaGVjayB0aGUKKwkJCSAqIHNpemUgd2UgS05PVyB3ZSB3
aWxsIGdldCB0byBzbGVlcCBzYWZlbHkgd2l0aCB0aGUKKwkJCSAqIHdha2V1cCBmbGFnIGluIHBs
YWNlLgorCQkJICovCisJCQlpbnF1ZXVlX2J5dGVzID0gc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRf
cXVldWVfc2l6ZSAtIChzdGNiLT5hc29jLmNodW5rc19vbl9vdXRfcXVldWUgKiBTQ1RQX0RBVEFf
Q0hVTktfT1ZFUkhFQUQoc3RjYikpOworCQkJaWYgKFNDVFBfU0JfTElNSVRfU05EKHNvKSA8PSAo
aW5xdWV1ZV9ieXRlcyArCisJCQkJCQkgICAgICBtaW4oU0NUUF9CQVNFX1NZU0NUTChzY3RwX2Fk
ZF9tb3JlX3RocmVzaG9sZCksIFNDVFBfU0JfTElNSVRfU05EKHNvKSkpKSB7CisJCQkJaWYgKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQkxLX0xPR0dJTkdfRU5B
QkxFKSB7CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisjaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKQorCQkJCQlzY3RwX2xvZ19ibG9jayhTQ1RQX0JM
T0NLX0xPR19JTlRPX0JMSywKKwkJCQkJCSAgICAgICBhc29jLCB1aW8tPnVpb19yZXNpZCk7Cisj
ZWxzZQorCQkJCQlzY3RwX2xvZ19ibG9jayhTQ1RQX0JMT0NLX0xPR19JTlRPX0JMSywKKwkJCQkJ
CSAgICAgICBhc29jLCB1aW9fcmVzaWQodWlvKSk7CisjZW5kaWYKKyNlbHNlCisJCQkJCXNjdHBf
bG9nX2Jsb2NrKFNDVFBfQkxPQ0tfTE9HX0lOVE9fQkxLLAorCQkJCQkJICAgICAgIGFzb2MsIHVp
by0+dWlvX3Jlc2lkKTsKKyNlbmRpZgorCQkJCX0KKwkJCQliZS5lcnJvciA9IDA7CisjaWYgIShk
ZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykpCisJCQkJc3RjYi0+Ymxv
Y2tfZW50cnkgPSAmYmU7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQlzYnVubG9jaygmc28tPnNvX3NuZCwgMSk7CisjZW5kaWYK
KwkJCQllcnJvciA9IHNid2FpdCgmc28tPnNvX3NuZCk7CisJCQkJc3RjYi0+YmxvY2tfZW50cnkg
PSBOVUxMOworCisJCQkJaWYgKGVycm9yIHx8IHNvLT5zb19lcnJvciB8fCBiZS5lcnJvcikgewor
CQkJCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJCQkJaWYgKHNvLT5zb19lcnJvcikKKwkJCQkJCQll
cnJvciA9IHNvLT5zb19lcnJvcjsKKwkJCQkJCWlmIChiZS5lcnJvcikgeworCQkJCQkJCWVycm9y
ID0gYmUuZXJyb3I7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJU09DS0JVRl9VTkxPQ0soJnNvLT5z
b19zbmQpOworCQkJCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7CisJCQkJCWlmICgoKHN0Y2It
PmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEKSA9PSAwKSAmJgorCQkJ
CQkgICAgKChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9XQVNfQUJPUlRFRCkgPT0gMCkg
JiYKKwkJCQkJICAgIChzcCAhPSBOVUxMKSkgeworCQkJCQkJc3AtPnByb2Nlc3NpbmcgPSAwOwor
CQkJCQl9CisJCQkJCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOworCQkJCQlnb3RvIG91dF91
bmxvY2tlZDsKKwkJCQl9CisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKwkJCQllcnJvciA9IHNibG9jaygmc28tPnNvX3NuZCwgU0JMT0NLV0FJVChm
bGFncykpOworI2VuZGlmCisJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xl
dmVsKSAmIFNDVFBfQkxLX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCXNjdHBfbG9nX2Jsb2NrKFND
VFBfQkxPQ0tfTE9HX09VVE9GX0JMSywKKwkJCQkJCSAgICAgICBhc29jLCBzdGNiLT5hc29jLnRv
dGFsX291dHB1dF9xdWV1ZV9zaXplKTsKKwkJCQl9CisJCQl9CisJCQlTT0NLQlVGX1VOTE9DSygm
c28tPnNvX3NuZCk7CisJCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7CisJCQlpZiAoKHN0Y2It
PmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEKSB8fAorCQkJICAgIChz
dGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9XQVNfQUJPUlRFRCkpIHsKKwkJCQlTQ1RQX1RD
Ql9TRU5EX1VOTE9DSyhzdGNiKTsKKwkJCQlnb3RvIG91dF91bmxvY2tlZDsKKwkJCX0KKwkJCVND
VFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOworCQl9CisJCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNi
KTsKKwkJaWYgKChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVF
RCkgfHwKKwkJICAgIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9XQVNfQUJPUlRFRCkp
IHsKKwkJCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOworCQkJZ290byBvdXRfdW5sb2NrZWQ7
CisJCX0KKwkJaWYgKHNwKSB7CisJCQlpZiAoc3AtPm1zZ19pc19jb21wbGV0ZSA9PSAwKSB7CisJ
CQkJc3RybS0+bGFzdF9tc2dfaW5jb21wbGV0ZSA9IDE7CisJCQkJaWYgKHN0Y2ItPmFzb2MuaWRh
dGFfc3VwcG9ydGVkID09IDApIHsKKwkJCQkJYXNvYy0+c3RyZWFtX2xvY2tlZCA9IDE7CisJCQkJ
CWFzb2MtPnN0cmVhbV9sb2NrZWRfb24gID0gc3Jjdi0+c2luZm9fc3RyZWFtOworCQkJCX0KKwkJ
CX0gZWxzZSB7CisJCQkJc3AtPnNlbmRlcl9hbGxfZG9uZSA9IDE7CisJCQkJc3RybS0+bGFzdF9t
c2dfaW5jb21wbGV0ZSA9IDA7CisJCQkJYXNvYy0+c3RyZWFtX2xvY2tlZCA9IDA7CisJCQl9CisJ
CQlzcC0+cHJvY2Vzc2luZyA9IDA7CisJCX0gZWxzZSB7CisJCQlTQ1RQX1BSSU5URigiSHVoIG5v
IHNwIFRTTkg/XG4iKTsKKwkJCXN0cm0tPmxhc3RfbXNnX2luY29tcGxldGUgPSAwOworCQkJYXNv
Yy0+c3RyZWFtX2xvY2tlZCA9IDA7CisJCX0KKwkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7
CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYg
ZGVmaW5lZChBUFBMRV9MRU9QQVJEKQorCQlpZiAodWlvLT51aW9fcmVzaWQgPT0gMCkgeworI2Vs
c2UKKwkJaWYgKHVpb19yZXNpZCh1aW8pID09IDApIHsKKyNlbmRpZgorI2Vsc2UKKwkJaWYgKHVp
by0+dWlvX3Jlc2lkID09IDApIHsKKyNlbmRpZgorCQkJZ290X2FsbF9vZl90aGVfc2VuZCA9IDE7
CisJCX0KKwl9IGVsc2UgeworCQkvKiBXZSBzZW5kIGluIGEgMCwgc2luY2Ugd2UgZG8gTk9UIGhh
dmUgYW55IGxvY2tzICovCisJCWVycm9yID0gc2N0cF9tc2dfYXBwZW5kKHN0Y2IsIG5ldCwgdG9w
LCBzcmN2LCAwKTsKKwkJdG9wID0gTlVMTDsKKwkJaWYgKHNpbmZvX2ZsYWdzICYgU0NUUF9FT0Yp
IHsKKwkJCWdvdF9hbGxfb2ZfdGhlX3NlbmQgPSAxOworCQl9CisJfQorCWlmIChlcnJvcikgewor
CQlnb3RvIG91dDsKKwl9CitkYXRhbGVzc19lb2Y6CisJLyogRU9GIHRoaW5nID8gKi8KKwlpZiAo
KHNpbmZvX2ZsYWdzICYgU0NUUF9FT0YpICYmCisJICAgIChnb3RfYWxsX29mX3RoZV9zZW5kID09
IDEpKSB7CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRzX3dpdGhfZW9mKTsKKwkJZXJyb3Ig
PSAwOworCQlpZiAoaG9sZF90Y2Jsb2NrID09IDApIHsKKwkJCVNDVFBfVENCX0xPQ0soc3RjYik7
CisJCQlob2xkX3RjYmxvY2sgPSAxOworCQl9CisJCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+c2Vu
ZF9xdWV1ZSkgJiYKKwkJICAgIFRBSUxRX0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSAmJgorCQkg
ICAgc2N0cF9pc190aGVyZV91bnNlbnRfZGF0YShzdGNiLCBTQ1RQX1NPX0xPQ0tFRCkgPT0gMCkg
eworCQkJaWYgKCgqYXNvYy0+c3NfZnVuY3Rpb25zLnNjdHBfc3NfaXNfdXNlcl9tc2dzX2luY29t
cGxldGUpKHN0Y2IsIGFzb2MpKSB7CisJCQkJZ290byBhYm9ydF9hbnl3YXk7CisJCQl9CisJCQkv
KiB0aGVyZSBpcyBub3RoaW5nIHF1ZXVlZCB0byBzZW5kLCBzbyBJJ20gZG9uZS4uLiAqLworCQkJ
aWYgKChTQ1RQX0dFVF9TVEFURShzdGNiKSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQpICYm
CisJCQkgICAgKFNDVFBfR0VUX1NUQVRFKHN0Y2IpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fUkVD
RUlWRUQpICYmCisJCQkgICAgKFNDVFBfR0VUX1NUQVRFKHN0Y2IpICE9IFNDVFBfU1RBVEVfU0hV
VERPV05fQUNLX1NFTlQpKSB7CisJCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0cDsKKworCQkJCS8q
IG9ubHkgc2VuZCBTSFVURE9XTiB0aGUgZmlyc3QgdGltZSB0aHJvdWdoICovCisJCQkJaWYgKFND
VFBfR0VUX1NUQVRFKHN0Y2IpID09IFNDVFBfU1RBVEVfT1BFTikgeworCQkJCQlTQ1RQX1NUQVRf
REVDUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7CisJCQkJfQorCQkJCVNDVFBfU0VUX1NUQVRF
KHN0Y2IsIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCk7CisJCQkJc2N0cF9zdG9wX3RpbWVyc19m
b3Jfc2h1dGRvd24oc3RjYik7CisJCQkJaWYgKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSB7CisJCQkJ
CW5ldHAgPSBzdGNiLT5hc29jLmFsdGVybmF0ZTsKKwkJCQl9IGVsc2UgeworCQkJCQluZXRwID0g
c3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uOworCQkJCX0KKwkJCQlzY3RwX3NlbmRfc2h1
dGRvd24oc3RjYiwgbmV0cCk7CisJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVf
U0hVVERPV04sIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCisJCQkJICAgICAgICAgICAgICAgICBuZXRw
KTsKKwkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdVQVJELCBz
dGNiLT5zY3RwX2VwLCBzdGNiLAorCQkJCSAgICAgICAgICAgICAgICAgTlVMTCk7CisJCQl9CisJ
CX0gZWxzZSB7CisJCQkvKi0KKwkJCSAqIHdlIHN0aWxsIGdvdCAob3IganVzdCBnb3QpIGRhdGEg
dG8gc2VuZCwgc28gc2V0CisJCQkgKiBTSFVURE9XTl9QRU5ESU5HCisJCQkgKi8KKwkJCS8qLQor
CQkJICogWFhYIHNvY2tldHMgZHJhZnQgc2F5cyB0aGF0IFNDVFBfRU9GIHNob3VsZCBiZQorCQkJ
ICogc2VudCB3aXRoIG5vIGRhdGEuICBjdXJyZW50bHksIHdlIHdpbGwgYWxsb3cgdXNlcgorCQkJ
ICogZGF0YSB0byBiZSBzZW50IGZpcnN0IGFuZCBtb3ZlIHRvCisJCQkgKiBTSFVURE9XTi1QRU5E
SU5HCisJCQkgKi8KKwkJCWlmICgoU0NUUF9HRVRfU1RBVEUoc3RjYikgIT0gU0NUUF9TVEFURV9T
SFVURE9XTl9TRU5UKSAmJgorCQkJICAgIChTQ1RQX0dFVF9TVEFURShzdGNiKSAhPSBTQ1RQX1NU
QVRFX1NIVVRET1dOX1JFQ0VJVkVEKSAmJgorCQkJICAgIChTQ1RQX0dFVF9TVEFURShzdGNiKSAh
PSBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UKSkgeworCQkJCWlmIChob2xkX3RjYmxvY2sg
PT0gMCkgeworCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJCQlob2xkX3RjYmxvY2sgPSAx
OworCQkJCX0KKwkJCQlpZiAoKCphc29jLT5zc19mdW5jdGlvbnMuc2N0cF9zc19pc191c2VyX21z
Z3NfaW5jb21wbGV0ZSkoc3RjYiwgYXNvYykpIHsKKwkJCQkJU0NUUF9BRERfU1VCU1RBVEUoc3Rj
YiwgU0NUUF9TVEFURV9QQVJUSUFMX01TR19MRUZUKTsKKwkJCQl9CisJCQkJU0NUUF9BRERfU1VC
U1RBVEUoc3RjYiwgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKTsKKwkJCQlpZiAoVEFJTFFf
RU1QVFkoJmFzb2MtPnNlbmRfcXVldWUpICYmCisJCQkJICAgIFRBSUxRX0VNUFRZKCZhc29jLT5z
ZW50X3F1ZXVlKSAmJgorCQkJCSAgICAoYXNvYy0+c3RhdGUgJiBTQ1RQX1NUQVRFX1BBUlRJQUxf
TVNHX0xFRlQpKSB7CisJCQkJCXN0cnVjdCBtYnVmICpvcF9lcnI7CisJCQkJCWNoYXIgbXNnW1ND
VFBfRElBR19JTkZPX0xFTl07CisKKwkJCQlhYm9ydF9hbnl3YXk6CisJCQkJCWlmIChmcmVlX2Nu
dF9hcHBsaWVkKSB7CisJCQkJCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIC0x
KTsKKwkJCQkJCWZyZWVfY250X2FwcGxpZWQgPSAwOworCQkJCQl9CisJCQkJCVNDVFBfU05QUklO
VEYobXNnLCBzaXplb2YobXNnKSwKKwkJCQkJICAgICAgICAgICAgICAiJXM6JWQgYXQgJXMiLCBf
X0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0
ZV9jYXVzZShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUpLAorCQkJCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQkJTkVUX0VQT0NIX0VOVEVSKGV0KTsKKyNl
bmRpZgorCQkJCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
CisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgb3BfZXJyLCBTQ1RQX1NPX0xPQ0tFRCk7
CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJ
CQkJTkVUX0VQT0NIX0VYSVQoZXQpOworI2VuZGlmCisJCQkJCS8qIG5vdyByZWxvY2sgdGhlIHN0
Y2Igc28gZXZlcnl0aGluZyBpcyBzYW5lICovCisJCQkJCWhvbGRfdGNibG9jayA9IDA7CisJCQkJ
CXN0Y2IgPSBOVUxMOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQkJc2N0cF90aW1lcl9zdGFy
dChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05HVUFSRCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJ
CQkgICAgICAgICAgICAgICAgIE5VTEwpOworCQkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQ
X1BDQl9GTEFHU19OT0RFTEFZKTsKKwkJCX0KKwkJfQorCX0KK3NraXBfb3V0X2VvZjoKKwlpZiAo
IVRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1ZSkpIHsKKwkJc29tZV9v
bl9jb250cm9sID0gMTsKKwl9CisJaWYgKHF1ZXVlX29ubHlfZm9yX2luaXQpIHsKKwkJaWYgKGhv
bGRfdGNibG9jayA9PSAwKSB7CisJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJaG9sZF90Y2Js
b2NrID0gMTsKKwkJfQorCQlpZiAoU0NUUF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9P
UEVOKSB7CisJCQkvKiBhIGNvbGxpc2lvbiB0b29rIHVzIGZvcndhcmQ/ICovCisJCQlxdWV1ZV9v
bmx5ID0gMDsKKwkJfSBlbHNlIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQorCQkJTkVUX0VQT0NIX0VOVEVSKGV0KTsKKyNlbmRpZgorCQkJc2N0
cF9zZW5kX2luaXRpYXRlKGlucCwgc3RjYiwgU0NUUF9TT19MT0NLRUQpOworI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQlORVRfRVBPQ0hfRVhJ
VChldCk7CisjZW5kaWYKKwkJCVNDVFBfU0VUX1NUQVRFKHN0Y2IsIFNDVFBfU1RBVEVfQ09PS0lF
X1dBSVQpOworCQkJcXVldWVfb25seSA9IDE7CisJCX0KKwl9CisJaWYgKChuZXQtPmZsaWdodF9z
aXplID4gbmV0LT5jd25kKSAmJgorCSAgICAoc3RjYi0+YXNvYy5zY3RwX2NtdF9vbl9vZmYgPT0g
MCkpIHsKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZF9jd25kX2F2b2lkKTsKKwkJcXVldWVf
b25seSA9IDE7CisJfSBlbHNlIGlmIChhc29jLT5pZnBfaGFkX2Vub2J1ZikgeworCQlTQ1RQX1NU
QVRfSU5DUihzY3Rwc19pZm5vbWVtcXVldWVkKTsKKwkJaWYgKG5ldC0+ZmxpZ2h0X3NpemUgPiAo
MiAqIG5ldC0+bXR1KSkgeworCQkJcXVldWVfb25seSA9IDE7CisJCX0KKwkJYXNvYy0+aWZwX2hh
ZF9lbm9idWYgPSAwOworCX0KKwl1bl9zZW50ID0gc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVl
dWVfc2l6ZSAtIHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0OworCWlmICgoc2N0cF9pc19mZWF0dXJl
X29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX05PREVMQVkpKSAmJgorCSAgICAoc3RjYi0+YXNvYy50
b3RhbF9mbGlnaHQgPiAwKSAmJgorCSAgICAoc3RjYi0+YXNvYy5zdHJlYW1fcXVldWVfY250IDwg
U0NUUF9NQVhfREFUQV9CVU5ETElORykgJiYKKwkgICAgKHVuX3NlbnQgPCAoaW50KShzdGNiLT5h
c29jLnNtYWxsZXN0X210dSAtIFNDVFBfTUlOX09WRVJIRUFEKSkpIHsKKwkJLyotCisJCSAqIE9r
LCBOYWdsZSBpcyBzZXQgb24gYW5kIHdlIGhhdmUgZGF0YSBvdXRzdGFuZGluZy4KKwkJICogRG9u
J3Qgc2VuZCBhbnl0aGluZyBhbmQgbGV0IFNBQ0tzIGRyaXZlIG91dCB0aGUKKwkJICogZGF0YSB1
bmxlc3Mgd2VuIGhhdmUgYSAiZnVsbCIgc2VnbWVudCB0byBzZW5kLgorCQkgKi8KKwkJaWYgKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTkFHTEVfTE9HR0lOR19F
TkFCTEUpIHsKKwkJCXNjdHBfbG9nX25hZ2xlX2V2ZW50KHN0Y2IsIFNDVFBfTkFHTEVfQVBQTElF
RCk7CisJCX0KKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbmFnbGVxdWV1ZWQpOworCQluYWdsZV9h
cHBsaWVzID0gMTsKKwl9IGVsc2UgeworCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9OQUdMRV9MT0dHSU5HX0VOQUJMRSkgeworCQkJaWYgKHNjdHBfaXNf
ZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19OT0RFTEFZKSkKKwkJCQlzY3RwX2xvZ19u
YWdsZV9ldmVudChzdGNiLCBTQ1RQX05BR0xFX1NLSVBQRUQpOworCQl9CisJCVNDVFBfU1RBVF9J
TkNSKHNjdHBzX25hZ2xlc2VudCk7CisJCW5hZ2xlX2FwcGxpZXMgPSAwOworCX0KKwlpZiAoU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9CTEtfTE9HR0lOR19FTkFC
TEUpIHsKKwkJc2N0cF9taXNjX2ludHMoU0NUUF9DV05ETE9HX1BSRVNFTkQsIHF1ZXVlX29ubHlf
Zm9yX2luaXQsIHF1ZXVlX29ubHksCisJCSAgICAgICAgICAgICAgIG5hZ2xlX2FwcGxpZXMsIHVu
X3NlbnQpOworCQlzY3RwX21pc2NfaW50cyhTQ1RQX0NXTkRMT0dfUFJFU0VORCwgc3RjYi0+YXNv
Yy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSwKKwkJICAgICAgICAgICAgICAgc3RjYi0+YXNvYy50
b3RhbF9mbGlnaHQsCisJCSAgICAgICAgICAgICAgIHN0Y2ItPmFzb2MuY2h1bmtzX29uX291dF9x
dWV1ZSwgc3RjYi0+YXNvYy50b3RhbF9mbGlnaHRfY291bnQpOworCX0KKyNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCU5FVF9FUE9DSF9FTlRFUihl
dCk7CisjZW5kaWYKKwlpZiAoKHF1ZXVlX29ubHkgPT0gMCkgJiYgKG5hZ2xlX2FwcGxpZXMgPT0g
MCkgJiYgKHN0Y2ItPmFzb2MucGVlcnNfcnduZCAmJiB1bl9zZW50KSkgeworCQkvKiB3ZSBjYW4g
YXR0ZW1wdCB0byBzZW5kIHRvby4gKi8KKwkJaWYgKGhvbGRfdGNibG9jayA9PSAwKSB7CisJCQkv
KiBJZiB0aGVyZSBpcyBhY3Rpdml0eSByZWN2J2luZyBzYWNrcyBubyBuZWVkIHRvIHNlbmQgKi8K
KwkJCWlmIChTQ1RQX1RDQl9UUllMT0NLKHN0Y2IpKSB7CisJCQkJc2N0cF9jaHVua19vdXRwdXQo
aW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX1VTUl9TRU5ELCBTQ1RQX1NPX0xPQ0tFRCk7CisJ
CQkJaG9sZF90Y2Jsb2NrID0gMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXNjdHBfY2h1bmtfb3V0
cHV0KGlucCwgc3RjYiwgU0NUUF9PVVRQVVRfRlJPTV9VU1JfU0VORCwgU0NUUF9TT19MT0NLRUQp
OworCQl9CisJfSBlbHNlIGlmICgocXVldWVfb25seSA9PSAwKSAmJgorCSAgICAgICAgICAgKHN0
Y2ItPmFzb2MucGVlcnNfcnduZCA9PSAwKSAmJgorCSAgICAgICAgICAgKHN0Y2ItPmFzb2MudG90
YWxfZmxpZ2h0ID09IDApKSB7CisJCS8qIFdlIGdldCB0byBoYXZlIGEgcHJvYmUgb3V0c3RhbmRp
bmcgKi8KKwkJaWYgKGhvbGRfdGNibG9jayA9PSAwKSB7CisJCQlob2xkX3RjYmxvY2sgPSAxOwor
CQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJfQorCQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0
Y2IsIFNDVFBfT1VUUFVUX0ZST01fVVNSX1NFTkQsIFNDVFBfU09fTE9DS0VEKTsKKwl9IGVsc2Ug
aWYgKHNvbWVfb25fY29udHJvbCkgeworCQlpbnQgbnVtX291dCwgcmVhc29uLCBmcmFnX3BvaW50
OworCisJCS8qIEhlcmUgd2UgZG8gY29udHJvbCBvbmx5ICovCisJCWlmIChob2xkX3RjYmxvY2sg
PT0gMCkgeworCQkJaG9sZF90Y2Jsb2NrID0gMTsKKwkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJ
CX0KKwkJZnJhZ19wb2ludCA9IHNjdHBfZ2V0X2ZyYWdfcG9pbnQoc3RjYiwgJnN0Y2ItPmFzb2Mp
OworCQkodm9pZClzY3RwX21lZF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCAmc3RjYi0+YXNvYywg
Jm51bV9vdXQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVhc29uLCAxLCAxLCAm
bm93LCAmbm93X2ZpbGxlZCwgZnJhZ19wb2ludCwgU0NUUF9TT19MT0NLRUQpOworCX0KKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCU5FVF9FUE9D
SF9FWElUKGV0KTsKKyNlbmRpZgorCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiVVNSIFNl
bmQgY29tcGxldGUgcW86JWQgcHJ3OiVkIHVuc2VudDolZCB0ZjolZCBjb29xOiVkIHRvcXM6JWQg
ZXJyOiVkXG4iLAorCSAgICAgICAgcXVldWVfb25seSwgc3RjYi0+YXNvYy5wZWVyc19yd25kLCB1
bl9zZW50LAorCQlzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCwgc3RjYi0+YXNvYy5jaHVua3Nfb25f
b3V0X3F1ZXVlLAorCSAgICAgICAgc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSwg
ZXJyb3IpOworCitvdXQ6CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisJc2J1bmxvY2soJnNvLT5zb19zbmQsIDEpOworI2VuZGlmCitvdXRfdW5sb2Nr
ZWQ6CisKKwlpZiAobG9jYWxfc29yZXN2ICYmIHN0Y2IpIHsKKwkJYXRvbWljX3N1YnRyYWN0X2lu
dCgmc3RjYi0+YXNvYy5zYl9zZW5kX3Jlc3YsIHNuZGxlbik7CisJfQorCWlmIChjcmVhdGVfbG9j
a19hcHBsaWVkKSB7CisJCVNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKGlucCk7CisJfQorCWlmICgo
c3RjYikgJiYgaG9sZF90Y2Jsb2NrKSB7CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwl9CisJ
aWYgKHN0Y2IgJiYgZnJlZV9jbnRfYXBwbGllZCkgeworCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+
YXNvYy5yZWZjbnQsIC0xKTsKKwl9CisjaWZkZWYgSU5WQVJJQU5UUworI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaWYgKHN0Y2IpIHsKKwkJaWYg
KG10eF9vd25lZCgmc3RjYi0+dGNiX210eCkpIHsKKwkJCXBhbmljKCJMZWF2aW5nIHdpdGggdGNi
IG10eCBvd25lZD8iKTsKKwkJfQorCQlpZiAobXR4X293bmVkKCZzdGNiLT50Y2Jfc2VuZF9tdHgp
KSB7CisJCQlwYW5pYygiTGVhdmluZyB3aXRoIHRjYiBzZW5kIG10eCBvd25lZD8iKTsKKwkJfQor
CX0KKyNlbmRpZgorI2VuZGlmCisJaWYgKHRvcCkgeworCQlzY3RwX21fZnJlZW0odG9wKTsKKwl9
CisJaWYgKGNvbnRyb2wpIHsKKwkJc2N0cF9tX2ZyZWVtKGNvbnRyb2wpOworCX0KKwlyZXR1cm4g
KGVycm9yKTsKK30KKworLyoKKyAqIGdlbmVyYXRlIGFuIEFVVEhlbnRpY2F0aW9uIGNodW5rLCBp
ZiByZXF1aXJlZAorICovCitzdHJ1Y3QgbWJ1ZiAqCitzY3RwX2FkZF9hdXRoX2NodW5rKHN0cnVj
dCBtYnVmICptLCBzdHJ1Y3QgbWJ1ZiAqKm1fZW5kLAorICAgIHN0cnVjdCBzY3RwX2F1dGhfY2h1
bmsgKiphdXRoX3JldCwgdWludDMyX3QgKiBvZmZzZXQsCisgICAgc3RydWN0IHNjdHBfdGNiICpz
dGNiLCB1aW50OF90IGNodW5rKQoreworCXN0cnVjdCBtYnVmICptX2F1dGg7CisJc3RydWN0IHNj
dHBfYXV0aF9jaHVuayAqYXV0aDsKKwlpbnQgY2h1bmtfbGVuOworCXN0cnVjdCBtYnVmICpjbjsK
KworCWlmICgobV9lbmQgPT0gTlVMTCkgfHwgKGF1dGhfcmV0ID09IE5VTEwpIHx8IChvZmZzZXQg
PT0gTlVMTCkgfHwKKwkgICAgKHN0Y2IgPT0gTlVMTCkpCisJCXJldHVybiAobSk7CisKKwlpZiAo
c3RjYi0+YXNvYy5hdXRoX3N1cHBvcnRlZCA9PSAwKSB7CisJCXJldHVybiAobSk7CisJfQorCS8q
IGRvZXMgdGhlIHJlcXVlc3RlZCBjaHVuayByZXF1aXJlIGF1dGg/ICovCisJaWYgKCFzY3RwX2F1
dGhfaXNfcmVxdWlyZWRfY2h1bmsoY2h1bmssIHN0Y2ItPmFzb2MucGVlcl9hdXRoX2NodW5rcykp
IHsKKwkJcmV0dXJuIChtKTsKKwl9CisJbV9hdXRoID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNp
emVvZigqYXV0aCksIDAsIE1fTk9XQUlULCAxLCBNVF9IRUFERVIpOworCWlmIChtX2F1dGggPT0g
TlVMTCkgeworCQkvKiBubyBtYnVmJ3MgKi8KKwkJcmV0dXJuIChtKTsKKwl9CisJLyogcmVzZXJ2
ZSBzb21lIHNwYWNlIGlmIHRoaXMgd2lsbCBiZSB0aGUgZmlyc3QgbWJ1ZiAqLworCWlmIChtID09
IE5VTEwpCisJCVNDVFBfQlVGX1JFU1ZfVUYobV9hdXRoLCBTQ1RQX01JTl9PVkVSSEVBRCk7CisJ
LyogZmlsbCBpbiB0aGUgQVVUSCBjaHVuayBkZXRhaWxzICovCisJYXV0aCA9IG10b2QobV9hdXRo
LCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICopOworCW1lbXNldChhdXRoLCAwLCBzaXplb2YoKmF1
dGgpKTsKKwlhdXRoLT5jaC5jaHVua190eXBlID0gU0NUUF9BVVRIRU5USUNBVElPTjsKKwlhdXRo
LT5jaC5jaHVua19mbGFncyA9IDA7CisJY2h1bmtfbGVuID0gc2l6ZW9mKCphdXRoKSArCisJICAg
IHNjdHBfZ2V0X2htYWNfZGlnZXN0X2xlbihzdGNiLT5hc29jLnBlZXJfaG1hY19pZCk7CisJYXV0
aC0+Y2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoY2h1bmtfbGVuKTsKKwlhdXRoLT5obWFjX2lkID0g
aHRvbnMoc3RjYi0+YXNvYy5wZWVyX2htYWNfaWQpOworCS8qIGtleSBpZCBhbmQgaG1hYyBkaWdl
c3Qgd2lsbCBiZSBjb21wdXRlZCBhbmQgZmlsbGVkIGluIHVwb24gc2VuZCAqLworCisJLyogc2F2
ZSB0aGUgb2Zmc2V0IHdoZXJlIHRoZSBhdXRoIHdhcyBpbnNlcnRlZCBpbnRvIHRoZSBjaGFpbiAq
LworCSpvZmZzZXQgPSAwOworCWZvciAoY24gPSBtOyBjbjsgY24gPSBTQ1RQX0JVRl9ORVhUKGNu
KSkgeworCQkqb2Zmc2V0ICs9IFNDVFBfQlVGX0xFTihjbik7CisJfQorCisJLyogdXBkYXRlIGxl
bmd0aCBhbmQgcmV0dXJuIHBvaW50ZXIgdG8gdGhlIGF1dGggY2h1bmsgKi8KKwlTQ1RQX0JVRl9M
RU4obV9hdXRoKSA9IGNodW5rX2xlbjsKKwltID0gc2N0cF9jb3B5X21idWZjaGFpbihtX2F1dGgs
IG0sIG1fZW5kLCAxLCBjaHVua19sZW4sIDApOworCWlmIChhdXRoX3JldCAhPSBOVUxMKQorCQkq
YXV0aF9yZXQgPSBhdXRoOworCisJcmV0dXJuIChtKTsKK30KKworI2lmIChkZWZpbmVkKF9fRnJl
ZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisjaWZkZWYgSU5FVDYKK2ludAorc2N0cF92NnNyY19tYXRjaF9uZXh0aG9wKHN0cnVjdCBzb2Nr
YWRkcl9pbjYgKnNyYzYsIHNjdHBfcm91dGVfdCAqcm8pCit7CisJc3RydWN0IG5kX3ByZWZpeCAq
cGZ4ID0gTlVMTDsKKwlzdHJ1Y3QgbmRfcGZ4cm91dGVyICpwZnhydHIgPSBOVUxMOworCXN0cnVj
dCBzb2NrYWRkcl9pbjYgZ3c2OworCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwlpZiAocm8g
PT0gTlVMTCB8fCByby0+cm9fbmggPT0gTlVMTCB8fCBzcmM2LT5zaW42X2ZhbWlseSAhPSBBRl9J
TkVUNikKKyNlbHNlCisJaWYgKHJvID09IE5VTEwgfHwgcm8tPnJvX3J0ID09IE5VTEwgfHwgc3Jj
Ni0+c2luNl9mYW1pbHkgIT0gQUZfSU5FVDYpCisjZW5kaWYKKwkJcmV0dXJuICgwKTsKKworCS8q
IGdldCBwcmVmaXggZW50cnkgb2YgYWRkcmVzcyAqLworI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
CisJTkQ2X1JMT0NLKCk7CisjZW5kaWYKKwlMSVNUX0ZPUkVBQ0gocGZ4LCAmTU9EVUxFX0dMT0JB
TChuZF9wcmVmaXgpLCBuZHByX2VudHJ5KSB7CisJCWlmIChwZngtPm5kcHJfc3RhdGVmbGFncyAm
IE5EUFJGX0RFVEFDSEVEKQorCQkJY29udGludWU7CisJCWlmIChJTjZfQVJFX01BU0tFRF9BRERS
X0VRVUFMKCZwZngtPm5kcHJfcHJlZml4LnNpbjZfYWRkciwKKwkJICAgICZzcmM2LT5zaW42X2Fk
ZHIsICZwZngtPm5kcHJfbWFzaykpCisJCQlicmVhazsKKwl9CisJLyogbm8gcHJlZml4IGVudHJ5
IGluIHRoZSBwcmVmaXggbGlzdCAqLworCWlmIChwZnggPT0gTlVMTCkgeworI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pCisJCU5ENl9SVU5MT0NLKCk7CisjZW5kaWYKKwkJU0NUUERCRyhTQ1RQX0RF
QlVHX09VVFBVVDIsICJObyBwcmVmaXggZW50cnkgZm9yICIpOworCQlTQ1RQREJHX0FERFIoU0NU
UF9ERUJVR19PVVRQVVQyLCAoc3RydWN0IHNvY2thZGRyICopc3JjNik7CisJCXJldHVybiAoMCk7
CisJfQorCisJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJ2NnNyY19tYXRjaF9uZXh0aG9w
KCksIFByZWZpeCBlbnRyeSBpcyAiKTsKKwlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19PVVRQVVQy
LCAoc3RydWN0IHNvY2thZGRyICopc3JjNik7CisKKwkvKiBzZWFyY2ggaW5zdGFsbGVkIGdhdGV3
YXkgZnJvbSBwcmVmaXggZW50cnkgKi8KKwlMSVNUX0ZPUkVBQ0gocGZ4cnRyLCAmcGZ4LT5uZHBy
X2FkdnJ0cnMsIHBmcl9lbnRyeSkgeworCQltZW1zZXQoJmd3NiwgMCwgc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbjYpKTsKKwkJZ3c2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisjaWZkZWYgSEFW
RV9TSU42X0xFTgorCQlndzYuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7
CisjZW5kaWYKKwkJbWVtY3B5KCZndzYuc2luNl9hZGRyLCAmcGZ4cnRyLT5yb3V0ZXItPnJ0YWRk
ciwKKwkJICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKwkJU0NUUERCRyhTQ1RQX0RFQlVH
X09VVFBVVDIsICJwcmVmaXggcm91dGVyIGlzICIpOworCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJV
R19PVVRQVVQyLCAoc3RydWN0IHNvY2thZGRyICopJmd3Nik7CisJCVNDVFBEQkcoU0NUUF9ERUJV
R19PVVRQVVQyLCAiaW5zdGFsbGVkIHJvdXRlciBpcyAiKTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKQorCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19PVVRQVVQyLCAmcm8tPnJvX25oLT5nd19z
YSk7CisjZWxzZQorCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19PVVRQVVQyLCByby0+cm9fcnQt
PnJ0X2dhdGV3YXkpOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJaWYgKHNj
dHBfY21wYWRkcigoc3RydWN0IHNvY2thZGRyICopJmd3NiwgJnJvLT5yb19uaC0+Z3dfc2EpKSB7
CisJCQlORDZfUlVOTE9DSygpOworI2Vsc2UKKwkJaWYgKHNjdHBfY21wYWRkcigoc3RydWN0IHNv
Y2thZGRyICopJmd3Niwgcm8tPnJvX3J0LT5ydF9nYXRld2F5KSkgeworI2VuZGlmCisJCQlTQ1RQ
REJHKFNDVFBfREVCVUdfT1VUUFVUMiwgInBmeHJvdXRlciBpcyBpbnN0YWxsZWRcbiIpOworCQkJ
cmV0dXJuICgxKTsKKwkJfQorCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCU5ENl9SVU5M
T0NLKCk7CisjZW5kaWYKKwlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgInBmeHJvdXRlciBp
cyBub3QgaW5zdGFsbGVkXG4iKTsKKwlyZXR1cm4gKDApOworfQorI2VuZGlmCisKK2ludAorc2N0
cF92NHNyY19tYXRjaF9uZXh0aG9wKHN0cnVjdCBzY3RwX2lmYSAqc2lmYSwgc2N0cF9yb3V0ZV90
ICpybykKK3sKKyNpZmRlZiBJTkVUCisJc3RydWN0IHNvY2thZGRyX2luICpzaW4sICptYXNrOwor
CXN0cnVjdCBpZmFkZHIgKmlmYTsKKwlzdHJ1Y3QgaW5fYWRkciBzcmNuZXRhZGRyLCBnd25ldGFk
ZHI7CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCWlmIChybyA9PSBOVUxMIHx8IHJvLT5y
b19uaCA9PSBOVUxMIHx8CisjZWxzZQorCWlmIChybyA9PSBOVUxMIHx8IHJvLT5yb19ydCA9PSBO
VUxMIHx8CisjZW5kaWYKKwkgICAgc2lmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgIT0gQUZfSU5F
VCkgeworCQlyZXR1cm4gKDApOworCX0KKwlpZmEgPSAoc3RydWN0IGlmYWRkciAqKXNpZmEtPmlm
YTsKKwltYXNrID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKShpZmEtPmlmYV9uZXRtYXNrKTsKKwlz
aW4gPSAmc2lmYS0+YWRkcmVzcy5zaW47CisJc3JjbmV0YWRkci5zX2FkZHIgPSAoc2luLT5zaW5f
YWRkci5zX2FkZHIgJiBtYXNrLT5zaW5fYWRkci5zX2FkZHIpOworCVNDVFBEQkcoU0NUUF9ERUJV
R19PVVRQVVQxLCAibWF0Y2hfbmV4dGhvcDQ6IHNyYyBhZGRyZXNzIGlzICIpOworCVNDVFBEQkdf
QUREUihTQ1RQX0RFQlVHX09VVFBVVDIsICZzaWZhLT5hZGRyZXNzLnNhKTsKKwlTQ1RQREJHKFND
VFBfREVCVUdfT1VUUFVUMSwgIm5ldHdvcmsgYWRkcmVzcyBpcyAleFxuIiwgc3JjbmV0YWRkci5z
X2FkZHIpOworCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwlzaW4gPSAmcm8tPnJvX25oLT5n
dzRfc2E7CisjZWxzZQorCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilyby0+cm9fcnQtPnJ0
X2dhdGV3YXk7CisjZW5kaWYKKwlnd25ldGFkZHIuc19hZGRyID0gKHNpbi0+c2luX2FkZHIuc19h
ZGRyICYgbWFzay0+c2luX2FkZHIuc19hZGRyKTsKKwlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVU
MSwgIm1hdGNoX25leHRob3A0OiBuZXh0aG9wIGlzICIpOworI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pCisJU0NUUERCR19BRERSKFNDVFBfREVCVUdfT1VUUFVUMiwgJnJvLT5yb19uaC0+Z3dfc2Ep
OworI2Vsc2UKKwlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19PVVRQVVQyLCByby0+cm9fcnQtPnJ0
X2dhdGV3YXkpOworI2VuZGlmCisJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICJuZXR3b3Jr
IGFkZHJlc3MgaXMgJXhcbiIsIGd3bmV0YWRkci5zX2FkZHIpOworCWlmIChzcmNuZXRhZGRyLnNf
YWRkciA9PSBnd25ldGFkZHIuc19hZGRyKSB7CisJCXJldHVybiAoMSk7CisJfQorI2VuZGlmCisJ
cmV0dXJuICgwKTsKK30KKyNlbGlmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKy8qIFRPRE8gX19V
c2Vyc3BhY2VfXyB2ZXJzaW9ucyBvZiBzY3RwX3ZYc3JjX21hdGNoX25leHRob3AoKS4gKi8KK2lu
dAorc2N0cF92NnNyY19tYXRjaF9uZXh0aG9wKHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNyYzYsIHNj
dHBfcm91dGVfdCAqcm8pCit7CisgICAgcmV0dXJuICgwKTsKK30KK2ludAorc2N0cF92NHNyY19t
YXRjaF9uZXh0aG9wKHN0cnVjdCBzY3RwX2lmYSAqc2lmYSwgc2N0cF9yb3V0ZV90ICpybykKK3sK
KyAgICByZXR1cm4gKDApOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNj
dHBsaWIvbmV0aW5ldC9zY3RwX291dHB1dC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfb3V0cHV0LmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwLi5k
YWQxMGUwMGE3N2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGlu
ZXQvc2N0cF9vdXRwdXQuaApAQCAtMCwwICsxLDI0MCBAQAorLyotCisgKiBTUERYLUxpY2Vuc2Ut
SWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcs
IGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAq
CisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2Yg
Q2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJl
ZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX291dHB1dC5oIDM2NjExNCAyMDIwLTA5LTI0IDEy
OjI2OjA2WiB0dWV4ZW4gJCIpOworI2VuZGlmCisKKyNpZm5kZWYgX05FVElORVRfU0NUUF9PVVRQ
VVRfSF8KKyNkZWZpbmUgX05FVElORVRfU0NUUF9PVVRQVVRfSF8KKworI2luY2x1ZGUgPG5ldGlu
ZXQvc2N0cF9oZWFkZXIuaD4KKworI2lmIGRlZmluZWQoX0tFUk5FTCkgfHwgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorCitzdHJ1Y3QgbWJ1ZiAqCitzY3RwX2FkZF9hZGRyZXNzZXNfdG9faV9pYShz
dHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IHNjdHBfdGNiICpzdGNiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBf
c2NvcGluZyAqc2NvcGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWJ1ZiAq
bV9hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbnRfaW5pdHNfdG8sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqcGFkZGluZ19sZW4sIHVpbnQxNl90ICpj
aHVua19sZW4pOworCitpbnQgc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RydWN0IHNjdHBfdGNi
ICosIHN0cnVjdCBzY3RwX2lmYSAqKTsKKworaW50CitzY3RwX2lzX2FkZHJlc3NfaW5fc2NvcGUo
c3RydWN0IHNjdHBfaWZhICppZmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNj
dHBfc2NvcGluZyAqc2NvcGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRvX3VwZGF0
ZSk7CisKK2ludAorc2N0cF9pc19hZGRyX2luX2VwKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0
cnVjdCBzY3RwX2lmYSAqaWZhKTsKKworc3RydWN0IHNjdHBfaWZhICoKK3NjdHBfc291cmNlX2Fk
ZHJlc3Nfc2VsZWN0aW9uKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzY3RwX3JvdXRlX3QgKnJvLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbm9uX2Fzb2NfYWRkcl9vaywgdWludDMyX3Qg
dnJmX2lkKTsKKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9f
KSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitpbnQgc2N0cF92NnNyY19tYXRjaF9uZXh0aG9w
KHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNyYzYsIHNjdHBfcm91dGVfdCAqcm8pOworCitpbnQgc2N0
cF92NHNyY19tYXRjaF9uZXh0aG9wKHN0cnVjdCBzY3RwX2lmYSAqc2lmYSwgc2N0cF9yb3V0ZV90
ICpybyk7CisjZW5kaWYKKwordm9pZCBzY3RwX3NlbmRfaW5pdGlhdGUoc3RydWN0IHNjdHBfaW5w
Y2IgKiwgc3RydWN0IHNjdHBfdGNiICosIGludCk7CisKK3ZvaWQKK3NjdHBfc2VuZF9pbml0aWF0
ZV9hY2soc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfdGNiICosCisgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBzY3RwX25ldHMgKiwgc3RydWN0IG1idWYgKiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgaW50LCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBz
b2NrYWRkciAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IHNjdHBoZHIgKiwgc3RydWN0IHNjdHBfaW5pdF9jaHVuayAqLAorI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisgICAgICAgICAgICAgICAgICAg
ICAgIHVpbnQ4X3QsIHVpbnQzMl90LAorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90LCB1aW50MTZfdCk7CisKK3N0cnVjdCBtYnVmICoKK3NjdHBfYXJldGhlcmVfdW5yZWNv
Z25pemVkX3BhcmFtZXRlcnMoc3RydWN0IG1idWYgKiwgaW50LCBpbnQgKiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfY2h1bmtoZHIgKiwgaW50ICos
IGludCAqKTsKK3ZvaWQgc2N0cF9xdWV1ZV9vcF9lcnIoc3RydWN0IHNjdHBfdGNiICosIHN0cnVj
dCBtYnVmICopOworCitpbnQKK3NjdHBfc2VuZF9jb29raWVfZWNobyhzdHJ1Y3QgbWJ1ZiAqLCBp
bnQsIGludCwgc3RydWN0IHNjdHBfdGNiICosCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IHNjdHBfbmV0cyAqKTsKKwordm9pZCBzY3RwX3NlbmRfY29va2llX2FjayhzdHJ1Y3Qgc2N0cF90
Y2IgKik7CisKK3ZvaWQKK3NjdHBfc2VuZF9oZWFydGJlYXRfYWNrKHN0cnVjdCBzY3RwX3RjYiAq
LCBzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBzY3RwX25ldHMgKik7CisKK3ZvaWQKK3NjdHBfcmVtb3ZlX2Zyb21fd2hlZWwoc3RydWN0IHNj
dHBfdGNiICpzdGNiLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lh
dGlvbiAqYXNvYywKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfc3RyZWFtX291
dCAqc3RycSwgaW50IGhvbGRzX2xvY2spOworCit2b2lkIHNjdHBfc2VuZF9zaHV0ZG93bihzdHJ1
Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfbmV0cyAqKTsKKwordm9pZCBzY3RwX3NlbmRfc2h1
dGRvd25fYWNrKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9uZXRzICopOworCit2b2lk
IHNjdHBfc2VuZF9zaHV0ZG93bl9jb21wbGV0ZShzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNj
dHBfbmV0cyAqLCBpbnQpOworCit2b2lkIHNjdHBfc2VuZF9zaHV0ZG93bl9jb21wbGV0ZTIoc3Ry
dWN0IHNvY2thZGRyICosIHN0cnVjdCBzb2NrYWRkciAqLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBzY3RwaGRyICosCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50OF90LCB1aW50MzJfdCwgdWludDE2X3QsCisjZW5kaWYKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCwgdWludDE2X3QpOworCit2b2lkIHNjdHBfc2Vu
ZF9hc2NvbmYoc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX25ldHMgKiwgaW50IGFkZHJf
bG9ja2VkKTsKKwordm9pZCBzY3RwX3NlbmRfYXNjb25mX2FjayhzdHJ1Y3Qgc2N0cF90Y2IgKik7
CisKK2ludCBzY3RwX2dldF9mcmFnX3BvaW50KHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0
cF9hc3NvY2lhdGlvbiAqKTsKKwordm9pZCBzY3RwX3Rvc3Nfb2xkX2Nvb2tpZXMoc3RydWN0IHNj
dHBfdGNiICosIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICopOworCit2b2lkIHNjdHBfdG9zc19v
bGRfYXNjb25mKHN0cnVjdCBzY3RwX3RjYiAqKTsKKwordm9pZCBzY3RwX2ZpeF9lY25fZWNobyhz
dHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKTsKKwordm9pZCBzY3RwX21vdmVfY2h1bmtzX2Zyb21f
bmV0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KTsKKworI2Rl
ZmluZSBTQ1RQX0RBVEFfQ0hVTktfT1ZFUkhFQUQoc3RjYikgKChzdGNiKS0+YXNvYy5pZGF0YV9z
dXBwb3J0ZWQgPyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZW9mKHN0cnVjdCBzY3RwX2lkYXRhX2NodW5rKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuaykpCisKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQoraW50CitzY3Rw
X291dHB1dChzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3QgbWJ1ZiAqLCBzdHJ1Y3Qgc29ja2Fk
ZHIgKiwKKyAgICBzdHJ1Y3QgbWJ1ZiAqLCBzdHJ1Y3QgdGhyZWFkICosIGludCk7CisjZWxpZiBk
ZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK3NjdHBfb3V0cHV0KHN0
cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBtYnVmICosIHN0cnVjdCBzb2NrYWRkciAqLAorICAg
IHN0cnVjdCBtYnVmICosIFBLVEhSRUFELCBpbnQpOworI2Vsc2UKKyNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisvKiBzY3RwX291dHB1dCBpcyBjYWxsZWQgYnUgc2N0cF9zZW5kbS4gTm90IHVz
aW5nIHNjdHBfc2VuZG0gZm9yIF9fVXNlcnNwYWNlX18gKi8KKyNlbmRpZgoraW50CitzY3RwX291
dHB1dChzdHJ1Y3Qgc2N0cF9pbnBjYiAqLAorICAgIHN0cnVjdCBtYnVmICosCisgICAgc3RydWN0
IHNvY2thZGRyICosCisgICAgc3RydWN0IG1idWYgKiwKKyAgICBzdHJ1Y3QgcHJvYyAqLCBpbnQp
OworI2VuZGlmCisKK3ZvaWQgc2N0cF9jaHVua19vdXRwdXQoc3RydWN0IHNjdHBfaW5wY2IgKiwg
c3RydWN0IHNjdHBfdGNiICosIGludCwgaW50KTsKKwordm9pZCBzY3RwX3NlbmRfYWJvcnRfdGNi
KHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOworCit2b2lkIHNlbmRfZm9y
d2FyZF90c24oc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICopOwor
Cit2b2lkIHNjdHBfc2VuZF9zYWNrKHN0cnVjdCBzY3RwX3RjYiAqLCBpbnQpOworCit2b2lkIHNj
dHBfc2VuZF9oYihzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfbmV0cyAqLCBpbnQpOwor
Cit2b2lkIHNjdHBfc2VuZF9lY25fZWNobyhzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBf
bmV0cyAqLCB1aW50MzJfdCk7CisKK3ZvaWQKK3NjdHBfc2VuZF9wYWNrZXRfZHJvcHBlZChzdHJ1
Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfbmV0cyAqLCBzdHJ1Y3QgbWJ1ZiAqLAorICAgIGlu
dCwgaW50LCBpbnQpOworCit2b2lkIHNjdHBfc2VuZF9jd3Ioc3RydWN0IHNjdHBfdGNiICosIHN0
cnVjdCBzY3RwX25ldHMgKiwgdWludDMyX3QsIHVpbnQ4X3QpOworCit2b2lkCitzY3RwX2FkZF9z
dHJlYW1fcmVzZXRfcmVzdWx0KHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKiwgdWludDMyX3QsIHVp
bnQzMl90KTsKKwordm9pZAorc2N0cF9zZW5kX2RlZmVycmVkX3Jlc2V0X3Jlc3BvbnNlKHN0cnVj
dCBzY3RwX3RjYiAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBz
Y3RwX3N0cmVhbV9yZXNldF9saXN0ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50KTsKKwordm9pZAorc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jlc3VsdF90c24oc3RydWN0
IHNjdHBfdG1pdF9jaHVuayAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu
dDMyX3QsIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDMyX3QpOworaW50CitzY3RwX3NlbmRfc3Ry
ZWFtX3Jlc2V0X291dF9pZl9wb3NzaWJsZShzdHJ1Y3Qgc2N0cF90Y2IgKiwgaW50KTsKKworaW50
CitzY3RwX3NlbmRfc3RyX3Jlc2V0X3JlcShzdHJ1Y3Qgc2N0cF90Y2IgKiwgdWludDE2X3QgLCB1
aW50MTZfdCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCwgdWludDhfdCwgdWlu
dDhfdCwgdWludDE2X3QsIHVpbnQxNl90LCB1aW50OF90KTsKKwordm9pZAorc2N0cF9zZW5kX2Fi
b3J0KHN0cnVjdCBtYnVmICosIGludCwgc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCBzb2NrYWRk
ciAqLAorICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwaGRyICosIHVpbnQzMl90LCBzdHJ1Y3Qg
bWJ1ZiAqLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisgICAgICAgICAgICAgICAgdWludDhfdCwgdWludDMyX3QsIHVpbnQxNl90LAorI2VuZGlm
CisgICAgICAgICAgICAgICAgdWludDMyX3QsIHVpbnQxNl90KTsKKwordm9pZAorc2N0cF9zZW5k
X29wZXJyX3RvKHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKyAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3Qgc2N0cGhkciAqLCB1aW50MzJfdCwgc3RydWN0IG1idWYgKiwKKyNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorICAgICAg
ICAgICAgICAgICAgIHVpbnQ4X3QsIHVpbnQzMl90LCB1aW50MTZfdCwKKyNlbmRpZgorICAgICAg
ICAgICAgICAgICAgIHVpbnQzMl90LCB1aW50MTZfdCk7CisKKyNlbmRpZiAvKiBfS0VSTkVMIHx8
IF9fVXNlcnNwYWNlX18gKi8KKworI2lmIGRlZmluZWQoX0tFUk5FTCkgfHwgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQoraW50CitzY3RwX3Nvc2VuZChzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICBzdHJ1
Y3Qgc29ja2FkZHIgKmFkZHIsCisgICAgc3RydWN0IHVpbyAqdWlvLAorICAgIHN0cnVjdCBtYnVm
ICp0b3AsCisgICAgc3RydWN0IG1idWYgKmNvbnRyb2wsCisjaWYgZGVmaW5lZChfX0FQUExFX18p
ICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisgICAgaW50IGZsYWdzCisjZWxzZQorICAgIGlu
dCBmbGFncywKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorICAgIHN0cnVjdCB0aHJlYWQgKnAKKyNlbGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorICAgIFBLVEhSRUFEIHAKKyNlbHNlCisjaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorICAgIC8qIHByb2MgaXMgYSBkdW1teSBpbiBfX1VzZXJzcGFjZV9fIGFu
ZCB3aWxsIG5vdCBiZSBwYXNzZWQgdG8gc2N0cF9sb3dlcl9zb3NlbmQgKi8KKyNlbmRpZgorICAg
IHN0cnVjdCBwcm9jICpwCisjZW5kaWYKKyNlbmRpZgorKTsKKworI2VuZGlmCisjZW5kaWYKKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcGNiLmMgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wY2IuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQpp
bmRleCAwMDAwMDAwMDAwMDAuLjYwZjUyY2E1YjJkYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3BjYi5jCkBAIC0wLDAgKzEsODA5NiBAQAorLyot
CisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJp
Z2h0IChjKSAyMDAxLTIwMDgsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFl
bCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpbmNsdWRlIDxzeXMvY2RlZnMu
aD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0aW5ldC9z
Y3RwX29zLmg+CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKKyNpbmNsdWRlIDxzeXMvcHJvYy5oPgorI2VuZGlmCisjaW5jbHVkZSA8bmV0aW5ldC9z
Y3RwX3Zhci5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9zeXNjdGwuaD4KKyNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfcGNiLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgorI2luY2x1
ZGUgPG5ldGluZXQvc2N0cC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9oZWFkZXIuaD4KKyNp
bmNsdWRlIDxuZXRpbmV0L3NjdHBfYXNjb25mLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX291
dHB1dC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF90aW1lci5oPgorI2luY2x1ZGUgPG5ldGlu
ZXQvc2N0cF9ic2RfYWRkci5oPgorI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikK
KyNpZiAhZGVmaW5lZChfV0lOMzIpCisjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KKyNlbmRpZgor
I2VuZGlmCisjaWZkZWYgSU5FVDYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaW5jbHVk
ZSAidXNlcl9pcDZfdmFyLmgiCisjZWxzZQorI2luY2x1ZGUgPG5ldGluZXQ2L2lwNl92YXIuaD4K
KyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKyNpbmNsdWRlIDxzeXMvc2NoZWQuaD4KKyNpbmNsdWRlIDxzeXMvc21wLmg+
CisjaW5jbHVkZSA8c3lzL3VuaXN0ZC5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorI2luY2x1ZGUgPHVzZXJfc29ja2V0dmFyLmg+CisjaW5jbHVkZSA8dXNlcl9hdG9taWMu
aD4KKyNpZiAhZGVmaW5lZChfV0lOMzIpCisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2Vu
ZGlmCisKKyNpZiAhZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorc3RydWN0IHNjdHBfYmFzZV9pbmZvIHN5c3RlbV9iYXNlX2luZm87CisKKyNlbmRpZgorLyog
RklYOiB3ZSBkb24ndCBoYW5kbGUgbXVsdGlwbGUgbGluayBsb2NhbCBzY29wZXMgKi8KKy8qICJz
Y29wZWxlc3MiIHJlcGxhY2VtZW50IElONl9BUkVfQUREUl9FUVVBTCAqLworI2lmZGVmIElORVQ2
CitpbnQKK1NDVFA2X0FSRV9BRERSX0VRVUFMKHN0cnVjdCBzb2NrYWRkcl9pbjYgKmEsIHN0cnVj
dCBzb2NrYWRkcl9pbjYgKmIpCit7CisjaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQorI2lm
IGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXN0cnVjdCBp
bjZfYWRkciB0bXBfYSwgdG1wX2I7CisKKwl0bXBfYSA9IGEtPnNpbjZfYWRkcjsKKyNpZiBkZWZp
bmVkKEFQUExFX0xFT1BBUkQpIHx8IGRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpCisJaWYgKGlu
Nl9lbWJlZHNjb3BlKCZ0bXBfYSwgYSwgTlVMTCwgTlVMTCkgIT0gMCkgeworI2Vsc2UKKwlpZiAo
aW42X2VtYmVkc2NvcGUoJnRtcF9hLCBhLCBOVUxMLCBOVUxMLCBOVUxMKSAhPSAwKSB7CisjZW5k
aWYKKwkJcmV0dXJuICgwKTsKKwl9CisJdG1wX2IgPSBiLT5zaW42X2FkZHI7CisjaWYgZGVmaW5l
ZChBUFBMRV9MRU9QQVJEKSB8fCBkZWZpbmVkKEFQUExFX1NOT1dMRU9QQVJEKQorCWlmIChpbjZf
ZW1iZWRzY29wZSgmdG1wX2IsIGIsIE5VTEwsIE5VTEwpICE9IDApIHsKKyNlbHNlCisJaWYgKGlu
Nl9lbWJlZHNjb3BlKCZ0bXBfYiwgYiwgTlVMTCwgTlVMTCwgTlVMTCkgIT0gMCkgeworI2VuZGlm
CisJCXJldHVybiAoMCk7CisJfQorCXJldHVybiAoSU42X0FSRV9BRERSX0VRVUFMKCZ0bXBfYSwg
JnRtcF9iKSk7CisjZWxpZiBkZWZpbmVkKFNDVFBfS0FNRSkKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42
IHRtcF9hLCB0bXBfYjsKKworCW1lbWNweSgmdG1wX2EsIGEsIHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW42KSk7CisJaWYgKHNhNl9lbWJlZHNjb3BlKCZ0bXBfYSwgTU9EVUxFX0dMT0JBTChpcDZf
dXNlX2RlZnpvbmUpKSAhPSAwKSB7CisJCXJldHVybiAoMCk7CisJfQorCW1lbWNweSgmdG1wX2Is
IGIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJaWYgKHNhNl9lbWJlZHNjb3BlKCZ0
bXBfYiwgTU9EVUxFX0dMT0JBTChpcDZfdXNlX2RlZnpvbmUpKSAhPSAwKSB7CisJCXJldHVybiAo
MCk7CisJfQorCXJldHVybiAoSU42X0FSRV9BRERSX0VRVUFMKCZ0bXBfYS5zaW42X2FkZHIsICZ0
bXBfYi5zaW42X2FkZHIpKTsKKyNlbHNlCisJc3RydWN0IGluNl9hZGRyIHRtcF9hLCB0bXBfYjsK
KworCXRtcF9hID0gYS0+c2luNl9hZGRyOworCWlmIChpbjZfZW1iZWRzY29wZSgmdG1wX2EsIGEp
ICE9IDApIHsKKwkJcmV0dXJuICgwKTsKKwl9CisJdG1wX2IgPSBiLT5zaW42X2FkZHI7CisJaWYg
KGluNl9lbWJlZHNjb3BlKCZ0bXBfYiwgYikgIT0gMCkgeworCQlyZXR1cm4gKDApOworCX0KKwly
ZXR1cm4gKElONl9BUkVfQUREUl9FUVVBTCgmdG1wX2EsICZ0bXBfYikpOworI2VuZGlmCisjZWxz
ZQorCXJldHVybiAoSU42X0FSRV9BRERSX0VRVUFMKCYoYS0+c2luNl9hZGRyKSwgJihiLT5zaW42
X2FkZHIpKSk7CisjZW5kaWYgLyogU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLworfQorI2VuZGlm
CisKK3ZvaWQKK3NjdHBfZmlsbF9wY2JpbmZvKHN0cnVjdCBzY3RwX3BjYmluZm8gKnNwY2IpCit7
CisJLyoKKwkgKiBXZSByZWFsbHkgZG9uJ3QgbmVlZCB0byBsb2NrIHRoaXMsIGJ1dCBJIHdpbGwg
anVzdCBiZWNhdXNlIGl0CisJICogZG9lcyBub3QgaHVydC4KKwkgKi8KKwlTQ1RQX0lOUF9JTkZP
X1JMT0NLKCk7CisJc3BjYi0+ZXBfY291bnQgPSBTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfZXAp
OworCXNwY2ItPmFzb2NfY291bnQgPSBTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfYXNvYyk7CisJ
c3BjYi0+bGFkZHJfY291bnQgPSBTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfbGFkZHIpOworCXNw
Y2ItPnJhZGRyX2NvdW50ID0gU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X3JhZGRyKTsKKwlzcGNi
LT5jaGtfY291bnQgPSBTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfY2h1bmspOworCXNwY2ItPnJl
YWRxX2NvdW50ID0gU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X3JlYWRxKTsKKwlzcGNiLT5zdHJl
YW1fb3F1ZSA9IFNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9zdHJtb3EpOworCXNwY2ItPmZyZWVf
Y2h1bmtzID0gU0NUUF9CQVNFX0lORk8oaXBpX2ZyZWVfY2h1bmtzKTsKKwlTQ1RQX0lOUF9JTkZP
X1JVTkxPQ0soKTsKK30KKworLyotCisgKiBBZGRyZXNzZXMgYXJlIGFkZGVkIHRvIFZSRidzIChW
aXJ0dWFsIFJvdXRlcidzKS4gRm9yIEJTRCB3ZQorICogaGF2ZSBvbmx5IHRoZSBkZWZhdWx0IFZS
RiAwLiBXZSBtYWludGFpbiBhIGhhc2ggbGlzdCBvZgorICogVlJGJ3MuIEVhY2ggVlJGIGhhcyBp
dHMgb3duIGxpc3Qgb2Ygc2N0cF9pZm4ncy4gRWFjaCBvZgorICogdGhlc2UgaGFzIGEgbGlzdCBv
ZiBhZGRyZXNzZXMuIFdoZW4gd2UgYWRkIGEgbmV3IGFkZHJlc3MKKyAqIHRvIGEgVlJGIHdlIGxv
b2t1cCB0aGUgaWZuL2lmbl9pbmRleCwgaWYgdGhlIGlmbiBkb2VzCisgKiBub3QgZXhpc3Qgd2Ug
Y3JlYXRlIGl0IGFuZCBhZGQgaXQgdG8gdGhlIGxpc3Qgb2YgSUZOJ3MKKyAqIHdpdGhpbiB0aGUg
VlJGLiBPbmNlIHdlIGhhdmUgdGhlIHNjdHBfaWZuLCB3ZSBhZGQgdGhlCisgKiBhZGRyZXNzIHRv
IHRoZSBsaXN0LiBTbyB3ZSBsb29rIHNvbWV0aGluZyBsaWtlOgorICoKKyAqIGhhc2gtdnJmLXRh
YmxlCisgKiAgIHZyZi0+IGlmbi0+IGlmbiAtPiBpZm4KKyAqICAgdnJmICAgIHwKKyAqICAgIC4u
LiAgICstLWlmYS0+IGlmYSAtPiBpZmEKKyAqICAgdnJmCisgKgorICogV2Uga2VlcCB0aGVzZSBz
ZXBhcmF0ZSBsaXN0cyBzaW5jZSB0aGUgU0NUUCBzdWJzeXN0ZW0gd2lsbAorICogcG9pbnQgdG8g
dGhlc2UgZnJvbSBpdHMgc291cmNlIGFkZHJlc3Mgc2VsZWN0aW9uIG5ldHMgc3RydWN0dXJlLgor
ICogV2hlbiBhbiBhZGRyZXNzIGlzIGRlbGV0ZWQgaXQgZG9lcyBub3QgaGFwcGVuIHJpZ2h0IGF3
YXkgb24KKyAqIHRoZSBTQ1RQIHNpZGUsIGl0IGdldHMgc2NoZWR1bGVkLiBXaGF0IHdlIGRvIHdo
ZW4gYQorICogZGVsZXRlIGhhcHBlbnMgaXMgaW1tZWRpYXRlbHkgcmVtb3ZlIHRoZSBhZGRyZXNz
IGZyb20KKyAqIHRoZSBtYXN0ZXIgbGlzdCBhbmQgZGVjcmVtZW50IHRoZSByZWZjb3VudC4gQXMg
b3VyCisgKiBhZGRpcCBpdGVyYXRvciB3b3JrcyB0aHJvdWdoIGFuZCBmcmVlcyB0aGUgc3JjIGFk
ZHJlc3MKKyAqIHNlbGVjdGlvbiBwb2ludGluZyB0byB0aGUgc2N0cF9pZmEsIGV2ZW50dWFsbHkg
dGhlIHJlZmNvdW50CisgKiB3aWxsIHJlYWNoIDAgYW5kIHdlIHdpbGwgZGVsZXRlIGl0LiBOb3Rl
IHRoYXQgaXQgaXMgYXNzdW1lZAorICogdGhhdCBhbnkgbG9ja2luZyBvbiBzeXN0ZW0gbGV2ZWwg
aWZuL2lmYSBpcyBkb25lIGF0IHRoZQorICogY2FsbGVyIG9mIHRoZXNlIGZ1bmN0aW9ucyBhbmQg
dGhlc2Ugcm91dGluZXMgd2lsbCBvbmx5CisgKiBsb2NrIHRoZSBTQ1RQIHN0cnVjdHVyZXMgYXMg
dGhleSBhZGQgb3IgZGVsZXRlIHRoaW5ncy4KKyAqCisgKiBPdGhlciBub3RlcyBvbiBWUkYgY29u
Y2VwdHMuCisgKiAgLSBBbiBlbmRwb2ludCBjYW4gYmUgaW4gbXVsdGlwbGUgVlJGJ3MKKyAqICAt
IEFuIGFzc29jaWF0aW9uIGxpdmVzIHdpdGhpbiBhIFZSRiBhbmQgb25seSBvbmUgVlJGLgorICog
IC0gQW55IGluY29taW5nIHBhY2tldCB3ZSBjYW4gZGVkdWNlIHRoZSBWUkYgZm9yIGJ5CisgKiAg
ICBsb29raW5nIGF0IHRoZSBtYnVmL3BhayBpbmJvdW5kIChmb3IgQlNEIGl0cyBWUkY9MCA6RCkK
KyAqICAtIEFueSBkb3dud2FyZCBzZW5kIGNhbGwgb3IgY29ubmVjdCBjYWxsIG11c3Qgc3VwcGx5
IHRoZQorICogICAgVlJGIHZpYSBhbmNpbGxhcnkgZGF0YSBvciB2aWEgc29tZSBzb3J0IG9mIHNl
dCBkZWZhdWx0CisgKiAgICBWUkYgc29ja2V0IG9wdGlvbiBjYWxsIChhZ2FpbiBmb3IgQlNEIG5v
IGJyYWluZXIgc2luY2UKKyAqICAgIHRoZSBWUkYgaXMgYWx3YXlzIDApLgorICogIC0gQW4gZW5k
cG9pbnQgbWF5IGFkZCBtdWx0aXBsZSBWUkYncyB0byBpdC4KKyAqICAtIExpc3RlbmluZyBzb2Nr
ZXRzIGNhbiBhY2NlcHQgYXNzb2NpYXRpb25zIGluIGFueQorICogICAgb2YgdGhlIFZSRidzIHRo
ZXkgYXJlIGluIGJ1dCB0aGUgYXNzb2Mgd2lsbCBlbmQgdXAKKyAqICAgIGluIG9ubHkgb25lIFZS
RiAoZ290dGVuIGZyb20gdGhlIHBhY2tldCBvciBjb25uZWN0L3NlbmQpLgorICoKKyAqLworCitz
dHJ1Y3Qgc2N0cF92cmYgKgorc2N0cF9hbGxvY2F0ZV92cmYoaW50IHZyZl9pZCkKK3sKKwlzdHJ1
Y3Qgc2N0cF92cmYgKnZyZiA9IE5VTEw7CisJc3RydWN0IHNjdHBfdnJmbGlzdCAqYnVja2V0Owor
CisJLyogRmlyc3QgYWxsb2NhdGUgdGhlIFZSRiBzdHJ1Y3R1cmUgKi8KKwl2cmYgPSBzY3RwX2Zp
bmRfdnJmKHZyZl9pZCk7CisJaWYgKHZyZikgeworCQkvKiBBbHJlYWR5IGFsbG9jYXRlZCAqLwor
CQlyZXR1cm4gKHZyZik7CisJfQorCVNDVFBfTUFMTE9DKHZyZiwgc3RydWN0IHNjdHBfdnJmICos
IHNpemVvZihzdHJ1Y3Qgc2N0cF92cmYpLAorCQkgICAgU0NUUF9NX1ZSRik7CisJaWYgKHZyZiA9
PSBOVUxMKSB7CisJCS8qIE5vIG1lbW9yeSAqLworI2lmZGVmIElOVkFSSUFOVFMKKwkJcGFuaWMo
Ik5vIG1lbW9yeSBmb3IgVlJGOiVkIiwgdnJmX2lkKTsKKyNlbmRpZgorCQlyZXR1cm4gKE5VTEwp
OworCX0KKwkvKiBzZXR1cCB0aGUgVlJGICovCisJbWVtc2V0KHZyZiwgMCwgc2l6ZW9mKHN0cnVj
dCBzY3RwX3ZyZikpOworCXZyZi0+dnJmX2lkID0gdnJmX2lkOworCUxJU1RfSU5JVCgmdnJmLT5p
Zm5saXN0KTsKKwl2cmYtPnRvdGFsX2lmYV9jb3VudCA9IDA7CisJdnJmLT5yZWZjb3VudCA9IDA7
CisJLyogbm93IGFsc28gc2V0dXAgdGFibGUgaWRzICovCisJU0NUUF9JTklUX1ZSRl9UQUJMRUlE
KHZyZik7CisJLyogSW5pdCB0aGUgSEFTSCBvZiBhZGRyZXNzZXMgKi8KKwl2cmYtPnZyZl9hZGRy
X2hhc2ggPSBTQ1RQX0hBU0hfSU5JVChTQ1RQX1ZSRl9BRERSX0hBU0hfU0laRSwKKwkJCQkJICAg
ICZ2cmYtPnZyZl9hZGRyX2hhc2htYXJrKTsKKwlpZiAodnJmLT52cmZfYWRkcl9oYXNoID09IE5V
TEwpIHsKKwkJLyogTm8gbWVtb3J5ICovCisjaWZkZWYgSU5WQVJJQU5UUworCQlwYW5pYygiTm8g
bWVtb3J5IGZvciBWUkY6JWQiLCB2cmZfaWQpOworI2VuZGlmCisJCVNDVFBfRlJFRSh2cmYsIFND
VFBfTV9WUkYpOworCQlyZXR1cm4gKE5VTEwpOworCX0KKworCS8qIEFkZCBpdCB0byB0aGUgaGFz
aCB0YWJsZSAqLworCWJ1Y2tldCA9ICZTQ1RQX0JBU0VfSU5GTyhzY3RwX3ZyZmhhc2gpWyh2cmZf
aWQgJiBTQ1RQX0JBU0VfSU5GTyhoYXNodnJmbWFyaykpXTsKKwlMSVNUX0lOU0VSVF9IRUFEKGJ1
Y2tldCwgdnJmLCBuZXh0X3ZyZik7CisJYXRvbWljX2FkZF9pbnQoJlNDVFBfQkFTRV9JTkZPKGlw
aV9jb3VudF92cmZzKSwgMSk7CisJcmV0dXJuICh2cmYpOworfQorCitzdHJ1Y3Qgc2N0cF9pZm4g
Kgorc2N0cF9maW5kX2lmbih2b2lkICppZm4sIHVpbnQzMl90IGlmbl9pbmRleCkKK3sKKwlzdHJ1
Y3Qgc2N0cF9pZm4gKnNjdHBfaWZucDsKKwlzdHJ1Y3Qgc2N0cF9pZm5saXN0ICpoYXNoX2lmbl9o
ZWFkOworCisJLyogV2UgYXNzdW1lIHRoZSBsb2NrIGlzIGhlbGQgZm9yIHRoZSBhZGRyZXNzZXMK
KwkgKiBpZiB0aGF0J3Mgd3JvbmcgcHJvYmxlbXMgY291bGQgb2NjdXIgOi0pCisJICovCisJU0NU
UF9JUElfQUREUl9MT0NLX0FTU0VSVCgpOworCWhhc2hfaWZuX2hlYWQgPSAmU0NUUF9CQVNFX0lO
Rk8odnJmX2lmbl9oYXNoKVsoaWZuX2luZGV4ICYgU0NUUF9CQVNFX0lORk8odnJmX2lmbl9oYXNo
bWFyaykpXTsKKwlMSVNUX0ZPUkVBQ0goc2N0cF9pZm5wLCBoYXNoX2lmbl9oZWFkLCBuZXh0X2J1
Y2tldCkgeworCQlpZiAoc2N0cF9pZm5wLT5pZm5faW5kZXggPT0gaWZuX2luZGV4KSB7CisJCQly
ZXR1cm4gKHNjdHBfaWZucCk7CisJCX0KKwkJaWYgKHNjdHBfaWZucC0+aWZuX3AgJiYgaWZuICYm
IChzY3RwX2lmbnAtPmlmbl9wID09IGlmbikpIHsKKwkJCXJldHVybiAoc2N0cF9pZm5wKTsKKwkJ
fQorCX0KKwlyZXR1cm4gKE5VTEwpOworfQorCitzdHJ1Y3Qgc2N0cF92cmYgKgorc2N0cF9maW5k
X3ZyZih1aW50MzJfdCB2cmZfaWQpCit7CisJc3RydWN0IHNjdHBfdnJmbGlzdCAqYnVja2V0Owor
CXN0cnVjdCBzY3RwX3ZyZiAqbGlzdGU7CisKKwlidWNrZXQgPSAmU0NUUF9CQVNFX0lORk8oc2N0
cF92cmZoYXNoKVsodnJmX2lkICYgU0NUUF9CQVNFX0lORk8oaGFzaHZyZm1hcmspKV07CisJTElT
VF9GT1JFQUNIKGxpc3RlLCBidWNrZXQsIG5leHRfdnJmKSB7CisJCWlmICh2cmZfaWQgPT0gbGlz
dGUtPnZyZl9pZCkgeworCQkJcmV0dXJuIChsaXN0ZSk7CisJCX0KKwl9CisJcmV0dXJuIChOVUxM
KTsKK30KKwordm9pZAorc2N0cF9mcmVlX3ZyZihzdHJ1Y3Qgc2N0cF92cmYgKnZyZikKK3sKKwlp
ZiAoU0NUUF9ERUNSRU1FTlRfQU5EX0NIRUNLX1JFRkNPVU5UKCZ2cmYtPnJlZmNvdW50KSkgewor
ICAgICAgICAgICAgICAgIGlmICh2cmYtPnZyZl9hZGRyX2hhc2gpIHsKKyAgICAgICAgICAgICAg
ICAgICAgU0NUUF9IQVNIX0ZSRUUodnJmLT52cmZfYWRkcl9oYXNoLCB2cmYtPnZyZl9hZGRyX2hh
c2htYXJrKTsKKyAgICAgICAgICAgICAgICAgICAgdnJmLT52cmZfYWRkcl9oYXNoID0gTlVMTDsK
KyAgICAgICAgICAgICAgICB9CisJCS8qIFdlIHplcm8nZCB0aGUgY291bnQgKi8KKwkJTElTVF9S
RU1PVkUodnJmLCBuZXh0X3ZyZik7CisJCVNDVFBfRlJFRSh2cmYsIFNDVFBfTV9WUkYpOworCQlh
dG9taWNfc3VidHJhY3RfaW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfdnJmcyksIDEpOwor
CX0KK30KKwordm9pZAorc2N0cF9mcmVlX2lmbihzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZucCkK
K3sKKwlpZiAoU0NUUF9ERUNSRU1FTlRfQU5EX0NIRUNLX1JFRkNPVU5UKCZzY3RwX2lmbnAtPnJl
ZmNvdW50KSkgeworCQkvKiBXZSB6ZXJvJ2QgdGhlIGNvdW50ICovCisJCWlmIChzY3RwX2lmbnAt
PnZyZikgeworCQkJc2N0cF9mcmVlX3ZyZihzY3RwX2lmbnAtPnZyZik7CisJCX0KKwkJU0NUUF9G
UkVFKHNjdHBfaWZucCwgU0NUUF9NX0lGTik7CisJCWF0b21pY19zdWJ0cmFjdF9pbnQoJlNDVFBf
QkFTRV9JTkZPKGlwaV9jb3VudF9pZm5zKSwgMSk7CisJfQorfQorCit2b2lkCitzY3RwX3VwZGF0
ZV9pZm5fbXR1KHVpbnQzMl90IGlmbl9pbmRleCwgdWludDMyX3QgbXR1KQoreworCXN0cnVjdCBz
Y3RwX2lmbiAqc2N0cF9pZm5wOworCisJc2N0cF9pZm5wID0gc2N0cF9maW5kX2lmbigodm9pZCAq
KU5VTEwsIGlmbl9pbmRleCk7CisJaWYgKHNjdHBfaWZucCAhPSBOVUxMKSB7CisJCXNjdHBfaWZu
cC0+aWZuX210dSA9IG10dTsKKwl9Cit9CisKK3ZvaWQKK3NjdHBfZnJlZV9pZmEoc3RydWN0IHNj
dHBfaWZhICpzY3RwX2lmYXApCit7CisJaWYgKFNDVFBfREVDUkVNRU5UX0FORF9DSEVDS19SRUZD
T1VOVCgmc2N0cF9pZmFwLT5yZWZjb3VudCkpIHsKKwkJLyogV2UgemVybydkIHRoZSBjb3VudCAq
LworCQlpZiAoc2N0cF9pZmFwLT5pZm5fcCkgeworCQkJc2N0cF9mcmVlX2lmbihzY3RwX2lmYXAt
Pmlmbl9wKTsKKwkJfQorCQlTQ1RQX0ZSRUUoc2N0cF9pZmFwLCBTQ1RQX01fSUZBKTsKKwkJYXRv
bWljX3N1YnRyYWN0X2ludCgmU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X2lmYXMpLCAxKTsKKwl9
Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2RlbGV0ZV9pZm4oc3RydWN0IHNjdHBfaWZuICpzY3Rw
X2lmbnAsIGludCBob2xkX2FkZHJfbG9jaykKK3sKKwlzdHJ1Y3Qgc2N0cF9pZm4gKmZvdW5kOwor
CisJZm91bmQgPSBzY3RwX2ZpbmRfaWZuKHNjdHBfaWZucC0+aWZuX3AsIHNjdHBfaWZucC0+aWZu
X2luZGV4KTsKKwlpZiAoZm91bmQgPT0gTlVMTCkgeworCQkvKiBOb3QgaW4gdGhlIGxpc3QuLiBz
b3JyeSAqLworCQlyZXR1cm47CisJfQorCWlmIChob2xkX2FkZHJfbG9jayA9PSAwKSB7CisJCVND
VFBfSVBJX0FERFJfV0xPQ0soKTsKKwl9IGVsc2UgeworCQlTQ1RQX0lQSV9BRERSX1dMT0NLX0FT
U0VSVCgpOworCX0KKwlMSVNUX1JFTU9WRShzY3RwX2lmbnAsIG5leHRfYnVja2V0KTsKKwlMSVNU
X1JFTU9WRShzY3RwX2lmbnAsIG5leHRfaWZuKTsKKwlpZiAoaG9sZF9hZGRyX2xvY2sgPT0gMCkg
eworCQlTQ1RQX0lQSV9BRERSX1dVTkxPQ0soKTsKKwl9CisJLyogVGFrZSBhd2F5IHRoZSByZWZl
cmVuY2UsIGFuZCBwb3NzaWJseSBmcmVlIGl0ICovCisJc2N0cF9mcmVlX2lmbihzY3RwX2lmbnAp
OworfQorCit2b2lkCitzY3RwX21hcmtfaWZhX2FkZHJfZG93bih1aW50MzJfdCB2cmZfaWQsIHN0
cnVjdCBzb2NrYWRkciAqYWRkciwKKwkJCWNvbnN0IGNoYXIgKmlmX25hbWUsIHVpbnQzMl90IGlm
bl9pbmRleCkKK3sKKwlzdHJ1Y3Qgc2N0cF92cmYgKnZyZjsKKwlzdHJ1Y3Qgc2N0cF9pZmEgKnNj
dHBfaWZhcDsKKworCVNDVFBfSVBJX0FERFJfUkxPQ0soKTsKKwl2cmYgPSBzY3RwX2ZpbmRfdnJm
KHZyZl9pZCk7CisJaWYgKHZyZiA9PSBOVUxMKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0I0
LCAiQ2FuJ3QgZmluZCB2cmZfaWQgMHgleFxuIiwgdnJmX2lkKTsKKwkJZ290byBvdXQ7CisJfQor
CXNjdHBfaWZhcCA9IHNjdHBfZmluZF9pZmFfYnlfYWRkcihhZGRyLCB2cmYtPnZyZl9pZCwgU0NU
UF9BRERSX0xPQ0tFRCk7CisJaWYgKHNjdHBfaWZhcCA9PSBOVUxMKSB7CisJCVNDVFBEQkcoU0NU
UF9ERUJVR19QQ0I0LCAiQ2FuJ3QgZmluZCBzY3RwX2lmYXAgZm9yIGFkZHJlc3NcbiIpOworCQln
b3RvIG91dDsKKwl9CisJaWYgKHNjdHBfaWZhcC0+aWZuX3AgPT0gTlVMTCkgeworCQlTQ1RQREJH
KFNDVFBfREVCVUdfUENCNCwgIklGQSBoYXMgbm8gSUZOIC0gY2FuJ3QgbWFyayB1bnVzYWJsZVxu
Iik7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoaWZfbmFtZSkgeworCQlpZiAoc3RybmNtcChpZl9u
YW1lLCBzY3RwX2lmYXAtPmlmbl9wLT5pZm5fbmFtZSwgU0NUUF9JRk5BTVNJWikgIT0gMCkgewor
CQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjQsICJJRk4gJXMgb2YgSUZBIG5vdCB0aGUgc2FtZSBh
cyAlc1xuIiwKKwkJCQlzY3RwX2lmYXAtPmlmbl9wLT5pZm5fbmFtZSwgaWZfbmFtZSk7CisJCQln
b3RvIG91dDsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChzY3RwX2lmYXAtPmlmbl9wLT5pZm5faW5k
ZXggIT0gaWZuX2luZGV4KSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCNCwgIklGQSBvd25l
ZCBieSBpZm5faW5kZXg6JWQgZG93biBjb21tYW5kIGZvciBpZm5faW5kZXg6JWQgLSBpZ25vcmVk
XG4iLAorCQkJCXNjdHBfaWZhcC0+aWZuX3AtPmlmbl9pbmRleCwgaWZuX2luZGV4KTsKKwkJCWdv
dG8gb3V0OworCQl9CisJfQorCisJc2N0cF9pZmFwLT5sb2NhbGlmYV9mbGFncyAmPSAoflNDVFBf
QUREUl9WQUxJRCk7CisJc2N0cF9pZmFwLT5sb2NhbGlmYV9mbGFncyB8PSBTQ1RQX0FERFJfSUZB
X1VOVVNFQUJMRTsKKyBvdXQ6CisJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7Cit9CisKK3ZvaWQK
K3NjdHBfbWFya19pZmFfYWRkcl91cCh1aW50MzJfdCB2cmZfaWQsIHN0cnVjdCBzb2NrYWRkciAq
YWRkciwKKwkJICAgICAgY29uc3QgY2hhciAqaWZfbmFtZSwgdWludDMyX3QgaWZuX2luZGV4KQor
eworCXN0cnVjdCBzY3RwX3ZyZiAqdnJmOworCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmFwOwor
CisJU0NUUF9JUElfQUREUl9STE9DSygpOworCXZyZiA9IHNjdHBfZmluZF92cmYodnJmX2lkKTsK
KwlpZiAodnJmID09IE5VTEwpIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjQsICJDYW4ndCBm
aW5kIHZyZl9pZCAweCV4XG4iLCB2cmZfaWQpOworCQlnb3RvIG91dDsKKwl9CisJc2N0cF9pZmFw
ID0gc2N0cF9maW5kX2lmYV9ieV9hZGRyKGFkZHIsIHZyZi0+dnJmX2lkLCBTQ1RQX0FERFJfTE9D
S0VEKTsKKwlpZiAoc2N0cF9pZmFwID09IE5VTEwpIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1BD
QjQsICJDYW4ndCBmaW5kIHNjdHBfaWZhcCBmb3IgYWRkcmVzc1xuIik7CisJCWdvdG8gb3V0Owor
CX0KKwlpZiAoc2N0cF9pZmFwLT5pZm5fcCA9PSBOVUxMKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJV
R19QQ0I0LCAiSUZBIGhhcyBubyBJRk4gLSBjYW4ndCBtYXJrIHVudXNhYmxlXG4iKTsKKwkJZ290
byBvdXQ7CisJfQorCWlmIChpZl9uYW1lKSB7CisJCWlmIChzdHJuY21wKGlmX25hbWUsIHNjdHBf
aWZhcC0+aWZuX3AtPmlmbl9uYW1lLCBTQ1RQX0lGTkFNU0laKSAhPSAwKSB7CisJCQlTQ1RQREJH
KFNDVFBfREVCVUdfUENCNCwgIklGTiAlcyBvZiBJRkEgbm90IHRoZSBzYW1lIGFzICVzXG4iLAor
CQkJCXNjdHBfaWZhcC0+aWZuX3AtPmlmbl9uYW1lLCBpZl9uYW1lKTsKKwkJCWdvdG8gb3V0Owor
CQl9CisJfSBlbHNlIHsKKwkJaWYgKHNjdHBfaWZhcC0+aWZuX3AtPmlmbl9pbmRleCAhPSBpZm5f
aW5kZXgpIHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0I0LCAiSUZBIG93bmVkIGJ5IGlmbl9p
bmRleDolZCBkb3duIGNvbW1hbmQgZm9yIGlmbl9pbmRleDolZCAtIGlnbm9yZWRcbiIsCisJCQkJ
c2N0cF9pZmFwLT5pZm5fcC0+aWZuX2luZGV4LCBpZm5faW5kZXgpOworCQkJZ290byBvdXQ7CisJ
CX0KKwl9CisKKwlzY3RwX2lmYXAtPmxvY2FsaWZhX2ZsYWdzICY9ICh+U0NUUF9BRERSX0lGQV9V
TlVTRUFCTEUpOworCXNjdHBfaWZhcC0+bG9jYWxpZmFfZmxhZ3MgfD0gU0NUUF9BRERSX1ZBTElE
OworIG91dDoKKwlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKK30KKworLyotCisgKiBBZGQgYW4g
aWZhIHRvIGFuIGlmbi4KKyAqIFJlZ2lzdGVyIHRoZSBpbnRlcmZhY2UgYXMgbmVjZXNzYXJ5Lgor
ICogTk9URTogQUREUiB3cml0ZSBsb2NrIE1VU1QgYmUgaGVsZC4KKyAqLworc3RhdGljIHZvaWQK
K3NjdHBfYWRkX2lmYV90b19pZm4oc3RydWN0IHNjdHBfaWZuICpzY3RwX2lmbnAsIHN0cnVjdCBz
Y3RwX2lmYSAqc2N0cF9pZmFwKQoreworCWludCBpZmFfYWY7CisKKwlMSVNUX0lOU0VSVF9IRUFE
KCZzY3RwX2lmbnAtPmlmYWxpc3QsIHNjdHBfaWZhcCwgbmV4dF9pZmEpOworCXNjdHBfaWZhcC0+
aWZuX3AgPSBzY3RwX2lmbnA7CisJYXRvbWljX2FkZF9pbnQoJnNjdHBfaWZhcC0+aWZuX3AtPnJl
ZmNvdW50LCAxKTsKKwkvKiB1cGRhdGUgYWRkcmVzcyBjb3VudHMgKi8KKwlzY3RwX2lmbnAtPmlm
YV9jb3VudCsrOworCWlmYV9hZiA9IHNjdHBfaWZhcC0+YWRkcmVzcy5zYS5zYV9mYW1pbHk7CisJ
c3dpdGNoIChpZmFfYWYpIHsKKyNpZmRlZiBJTkVUCisJY2FzZSBBRl9JTkVUOgorCQlzY3RwX2lm
bnAtPm51bV92NCsrOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJY2FzZSBBRl9J
TkVUNjoKKwkJc2N0cF9pZm5wLT5udW1fdjYrKzsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0
OgorCQlicmVhazsKKwl9CisJaWYgKHNjdHBfaWZucC0+aWZhX2NvdW50ID09IDEpIHsKKwkJLyog
cmVnaXN0ZXIgdGhlIG5ldyBpbnRlcmZhY2UgKi8KKwkJc2N0cF9pZm5wLT5yZWdpc3RlcmVkX2Fm
ID0gaWZhX2FmOworCX0KK30KKworLyotCisgKiBSZW1vdmUgYW4gaWZhIGZyb20gaXRzIGlmbi4K
KyAqIElmIG5vIG1vcmUgYWRkcmVzc2VzIGV4aXN0LCByZW1vdmUgdGhlIGlmbiB0b28uIE90aGVy
d2lzZSwgcmUtcmVnaXN0ZXIKKyAqIHRoZSBpbnRlcmZhY2UgYmFzZWQgb24gdGhlIHJlbWFpbmlu
ZyBhZGRyZXNzIGZhbWlsaWVzIGxlZnQuCisgKiBOT1RFOiBBRERSIHdyaXRlIGxvY2sgTVVTVCBi
ZSBoZWxkLgorICovCitzdGF0aWMgdm9pZAorc2N0cF9yZW1vdmVfaWZhX2Zyb21faWZuKHN0cnVj
dCBzY3RwX2lmYSAqc2N0cF9pZmFwKQoreworCUxJU1RfUkVNT1ZFKHNjdHBfaWZhcCwgbmV4dF9p
ZmEpOworCWlmIChzY3RwX2lmYXAtPmlmbl9wKSB7CisJCS8qIHVwZGF0ZSBhZGRyZXNzIGNvdW50
cyAqLworCQlzY3RwX2lmYXAtPmlmbl9wLT5pZmFfY291bnQtLTsKKwkJc3dpdGNoIChzY3RwX2lm
YXAtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQljYXNlIEFGX0lORVQ6
CisJCQlzY3RwX2lmYXAtPmlmbl9wLT5udW1fdjQtLTsKKwkJCWJyZWFrOworI2VuZGlmCisjaWZk
ZWYgSU5FVDYKKwkJY2FzZSBBRl9JTkVUNjoKKwkJCXNjdHBfaWZhcC0+aWZuX3AtPm51bV92Ni0t
OworCQkJYnJlYWs7CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJaWYg
KExJU1RfRU1QVFkoJnNjdHBfaWZhcC0+aWZuX3AtPmlmYWxpc3QpKSB7CisJCQkvKiByZW1vdmUg
dGhlIGlmbiwgcG9zc2libHkgZnJlZWluZyBpdCAqLworCQkJc2N0cF9kZWxldGVfaWZuKHNjdHBf
aWZhcC0+aWZuX3AsIFNDVFBfQUREUl9MT0NLRUQpOworCQl9IGVsc2UgeworCQkJLyogcmUtcmVn
aXN0ZXIgYWRkcmVzcyBmYW1pbHkgdHlwZSwgaWYgbmVlZGVkICovCisJCQlpZiAoKHNjdHBfaWZh
cC0+aWZuX3AtPm51bV92NiA9PSAwKSAmJgorCQkJICAgIChzY3RwX2lmYXAtPmlmbl9wLT5yZWdp
c3RlcmVkX2FmID09IEFGX0lORVQ2KSkgeworCQkJCXNjdHBfaWZhcC0+aWZuX3AtPnJlZ2lzdGVy
ZWRfYWYgPSBBRl9JTkVUOworCQkJfSBlbHNlIGlmICgoc2N0cF9pZmFwLT5pZm5fcC0+bnVtX3Y0
ID09IDApICYmCisJCQkJICAgKHNjdHBfaWZhcC0+aWZuX3AtPnJlZ2lzdGVyZWRfYWYgPT0gQUZf
SU5FVCkpIHsKKwkJCQlzY3RwX2lmYXAtPmlmbl9wLT5yZWdpc3RlcmVkX2FmID0gQUZfSU5FVDY7
CisJCQl9CisJCQkvKiBmcmVlIHRoZSBpZm4gcmVmY291bnQgKi8KKwkJCXNjdHBfZnJlZV9pZm4o
c2N0cF9pZmFwLT5pZm5fcCk7CisJCX0KKwkJc2N0cF9pZmFwLT5pZm5fcCA9IE5VTEw7CisJfQor
fQorCitzdHJ1Y3Qgc2N0cF9pZmEgKgorc2N0cF9hZGRfYWRkcl90b192cmYodWludDMyX3QgdnJm
X2lkLCB2b2lkICppZm4sIHVpbnQzMl90IGlmbl9pbmRleCwKKwkJICAgICB1aW50MzJfdCBpZm5f
dHlwZSwgY29uc3QgY2hhciAqaWZfbmFtZSwgdm9pZCAqaWZhLAorCQkgICAgIHN0cnVjdCBzb2Nr
YWRkciAqYWRkciwgdWludDMyX3QgaWZhX2ZsYWdzLAorCQkgICAgIGludCBkeW5hbWljX2FkZCkK
K3sKKwlzdHJ1Y3Qgc2N0cF92cmYgKnZyZjsKKwlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZucCwg
Km5ld19zY3RwX2lmbnA7CisJc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYXAsICpuZXdfc2N0cF9p
ZmFwOworCXN0cnVjdCBzY3RwX2lmYWxpc3QgKmhhc2hfYWRkcl9oZWFkOworCXN0cnVjdCBzY3Rw
X2lmbmxpc3QgKmhhc2hfaWZuX2hlYWQ7CisJdWludDMyX3QgaGFzaF9vZl9hZGRyOworCWludCBu
ZXdfaWZuX2FmID0gMDsKKworI2lmZGVmIFNDVFBfREVCVUcKKwlTQ1RQREJHKFNDVFBfREVCVUdf
UENCNCwgInZyZl9pZCAweCV4OiBhZGRpbmcgYWRkcmVzczogIiwgdnJmX2lkKTsKKwlTQ1RQREJH
X0FERFIoU0NUUF9ERUJVR19QQ0I0LCBhZGRyKTsKKyNlbmRpZgorCVNDVFBfTUFMTE9DKG5ld19z
Y3RwX2lmbnAsIHN0cnVjdCBzY3RwX2lmbiAqLAorCSAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qg
c2N0cF9pZm4pLCBTQ1RQX01fSUZOKTsKKwlpZiAobmV3X3NjdHBfaWZucCA9PSBOVUxMKSB7Cisj
aWZkZWYgSU5WQVJJQU5UUworCQlwYW5pYygiTm8gbWVtb3J5IGZvciBJRk4iKTsKKyNlbmRpZgor
CQlyZXR1cm4gKE5VTEwpOworCX0KKwlTQ1RQX01BTExPQyhuZXdfc2N0cF9pZmFwLCBzdHJ1Y3Qg
c2N0cF9pZmEgKiwgc2l6ZW9mKHN0cnVjdCBzY3RwX2lmYSksIFNDVFBfTV9JRkEpOworCWlmIChu
ZXdfc2N0cF9pZmFwID09IE5VTEwpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCXBhbmljKCJObyBt
ZW1vcnkgZm9yIElGQSIpOworI2VuZGlmCisJCVNDVFBfRlJFRShuZXdfc2N0cF9pZm5wLCBTQ1RQ
X01fSUZOKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwlTQ1RQX0lQSV9BRERSX1dMT0NLKCk7
CisJc2N0cF9pZm5wID0gc2N0cF9maW5kX2lmbihpZm4sIGlmbl9pbmRleCk7CisJaWYgKHNjdHBf
aWZucCkgeworCQl2cmYgPSBzY3RwX2lmbnAtPnZyZjsKKwl9IGVsc2UgeworCQl2cmYgPSBzY3Rw
X2ZpbmRfdnJmKHZyZl9pZCk7CisJCWlmICh2cmYgPT0gTlVMTCkgeworCQkJdnJmID0gc2N0cF9h
bGxvY2F0ZV92cmYodnJmX2lkKTsKKwkJCWlmICh2cmYgPT0gTlVMTCkgeworCQkJCVNDVFBfSVBJ
X0FERFJfV1VOTE9DSygpOworCQkJCVNDVFBfRlJFRShuZXdfc2N0cF9pZm5wLCBTQ1RQX01fSUZO
KTsKKwkJCQlTQ1RQX0ZSRUUobmV3X3NjdHBfaWZhcCwgU0NUUF9NX0lGQSk7CisJCQkJcmV0dXJu
IChOVUxMKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoc2N0cF9pZm5wID09IE5VTEwpIHsKKwkJLyog
YnVpbGQgb25lIGFuZCBhZGQgaXQsIGNhbid0IGhvbGQgbG9jaworCQkgKiB1bnRpbCBhZnRlciBt
YWxsb2MgZG9uZSB0aG91Z2guCisJCSAqLworCQlzY3RwX2lmbnAgPSBuZXdfc2N0cF9pZm5wOwor
CQluZXdfc2N0cF9pZm5wID0gTlVMTDsKKwkJbWVtc2V0KHNjdHBfaWZucCwgMCwgc2l6ZW9mKHN0
cnVjdCBzY3RwX2lmbikpOworCQlzY3RwX2lmbnAtPmlmbl9pbmRleCA9IGlmbl9pbmRleDsKKwkJ
c2N0cF9pZm5wLT5pZm5fcCA9IGlmbjsKKwkJc2N0cF9pZm5wLT5pZm5fdHlwZSA9IGlmbl90eXBl
OworCQlzY3RwX2lmbnAtPnJlZmNvdW50ID0gMDsKKwkJc2N0cF9pZm5wLT52cmYgPSB2cmY7CisJ
CWF0b21pY19hZGRfaW50KCZ2cmYtPnJlZmNvdW50LCAxKTsKKwkJc2N0cF9pZm5wLT5pZm5fbXR1
ID0gU0NUUF9HQVRIRVJfTVRVX0ZST01fSUZOX0lORk8oaWZuLCBpZm5faW5kZXgsIGFkZHItPnNh
X2ZhbWlseSk7CisJCWlmIChpZl9uYW1lICE9IE5VTEwpIHsKKwkJCVNDVFBfU05QUklOVEYoc2N0
cF9pZm5wLT5pZm5fbmFtZSwgU0NUUF9JRk5BTVNJWiwgIiVzIiwgaWZfbmFtZSk7CisJCX0gZWxz
ZSB7CisJCQlTQ1RQX1NOUFJJTlRGKHNjdHBfaWZucC0+aWZuX25hbWUsIFNDVFBfSUZOQU1TSVos
ICIlcyIsICJ1bmtub3duIik7CisJCX0KKwkJaGFzaF9pZm5faGVhZCA9ICZTQ1RQX0JBU0VfSU5G
Tyh2cmZfaWZuX2hhc2gpWyhpZm5faW5kZXggJiBTQ1RQX0JBU0VfSU5GTyh2cmZfaWZuX2hhc2ht
YXJrKSldOworCQlMSVNUX0lOSVQoJnNjdHBfaWZucC0+aWZhbGlzdCk7CisJCUxJU1RfSU5TRVJU
X0hFQUQoaGFzaF9pZm5faGVhZCwgc2N0cF9pZm5wLCBuZXh0X2J1Y2tldCk7CisJCUxJU1RfSU5T
RVJUX0hFQUQoJnZyZi0+aWZubGlzdCwgc2N0cF9pZm5wLCBuZXh0X2lmbik7CisJCWF0b21pY19h
ZGRfaW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfaWZucyksIDEpOworCQluZXdfaWZuX2Fm
ID0gMTsKKwl9CisJc2N0cF9pZmFwID0gc2N0cF9maW5kX2lmYV9ieV9hZGRyKGFkZHIsIHZyZi0+
dnJmX2lkLCBTQ1RQX0FERFJfTE9DS0VEKTsKKwlpZiAoc2N0cF9pZmFwKSB7CisJCS8qIEhtbSwg
aXQgYWxyZWFkeSBleGlzdHM/ICovCisJCWlmICgoc2N0cF9pZmFwLT5pZm5fcCkgJiYKKwkJICAg
IChzY3RwX2lmYXAtPmlmbl9wLT5pZm5faW5kZXggPT0gaWZuX2luZGV4KSkgeworCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX1BDQjQsICJVc2luZyBleGlzdGluZyBpZm4gJXMgKDB4JXgpIGZvciBpZmEg
JXBcbiIsCisJCQkJc2N0cF9pZmFwLT5pZm5fcC0+aWZuX25hbWUsIGlmbl9pbmRleCwKKwkJCQko
dm9pZCAqKXNjdHBfaWZhcCk7CisJCQlpZiAobmV3X2lmbl9hZikgeworCQkJCS8qIFJlbW92ZSB0
aGUgY3JlYXRlZCBvbmUgdGhhdCB3ZSBkb24ndCB3YW50ICovCisJCQkJc2N0cF9kZWxldGVfaWZu
KHNjdHBfaWZucCwgU0NUUF9BRERSX0xPQ0tFRCk7CisJCQl9CisJCQlpZiAoc2N0cF9pZmFwLT5s
b2NhbGlmYV9mbGFncyAmIFNDVFBfQkVJTkdfREVMRVRFRCkgeworCQkJCS8qIGVhc3kgdG8gc29s
dmUsIGp1c3Qgc3dpdGNoIGJhY2sgdG8gYWN0aXZlICovCisJCQkJU0NUUERCRyhTQ1RQX0RFQlVH
X1BDQjQsICJDbGVhcmluZyBkZWxldGVkIGlmYSBmbGFnXG4iKTsKKwkJCQlzY3RwX2lmYXAtPmxv
Y2FsaWZhX2ZsYWdzID0gU0NUUF9BRERSX1ZBTElEOworCQkJCXNjdHBfaWZhcC0+aWZuX3AgPSBz
Y3RwX2lmbnA7CisJCQkJYXRvbWljX2FkZF9pbnQoJnNjdHBfaWZhcC0+aWZuX3AtPnJlZmNvdW50
LCAxKTsKKwkJCX0KKwkJZXhpdF9zdGFnZV9sZWZ0OgorCQkJU0NUUF9JUElfQUREUl9XVU5MT0NL
KCk7CisJCQlpZiAobmV3X3NjdHBfaWZucCAhPSBOVUxMKSB7CisJCQkJU0NUUF9GUkVFKG5ld19z
Y3RwX2lmbnAsIFNDVFBfTV9JRk4pOworCQkJfQorCQkJU0NUUF9GUkVFKG5ld19zY3RwX2lmYXAs
IFNDVFBfTV9JRkEpOworCQkJcmV0dXJuIChzY3RwX2lmYXApOworCQl9IGVsc2UgeworCQkJaWYg
KHNjdHBfaWZhcC0+aWZuX3ApIHsKKwkJCQkvKgorCQkJCSAqIFRoZSBsYXN0IElGTiBnZXRzIHRo
ZSBhZGRyZXNzLCByZW1vdmUgdGhlCisJCQkJICogb2xkIG9uZQorCQkJCSAqLworCQkJCVNDVFBE
QkcoU0NUUF9ERUJVR19QQ0I0LCAiTW92aW5nIGlmYSAlcCBmcm9tICVzICgweCV4KSB0byAlcyAo
MHgleClcbiIsCisJCQkJCSh2b2lkICopc2N0cF9pZmFwLCBzY3RwX2lmYXAtPmlmbl9wLT5pZm5f
bmFtZSwKKwkJCQkJc2N0cF9pZmFwLT5pZm5fcC0+aWZuX2luZGV4LCBpZl9uYW1lLAorCQkJCQlp
Zm5faW5kZXgpOworCQkJCS8qIHJlbW92ZSB0aGUgYWRkcmVzcyBmcm9tIHRoZSBvbGQgaWZuICov
CisJCQkJc2N0cF9yZW1vdmVfaWZhX2Zyb21faWZuKHNjdHBfaWZhcCk7CisJCQkJLyogbW92ZSB0
aGUgYWRkcmVzcyBvdmVyIHRvIHRoZSBuZXcgaWZuICovCisJCQkJc2N0cF9hZGRfaWZhX3RvX2lm
bihzY3RwX2lmbnAsIHNjdHBfaWZhcCk7CisJCQkJZ290byBleGl0X3N0YWdlX2xlZnQ7CisJCQl9
IGVsc2UgeworCQkJCS8qIHJlcGFpciBpZm5wIHdoaWNoIHdhcyBOVUxMID8gKi8KKwkJCQlzY3Rw
X2lmYXAtPmxvY2FsaWZhX2ZsYWdzID0gU0NUUF9BRERSX1ZBTElEOworCQkJCVNDVFBEQkcoU0NU
UF9ERUJVR19QQ0I0LCAiUmVwYWlyaW5nIGlmbiAlcCBmb3IgaWZhICVwXG4iLAorCQkJCQkodm9p
ZCAqKXNjdHBfaWZucCwgKHZvaWQgKilzY3RwX2lmYXApOworCQkJCXNjdHBfYWRkX2lmYV90b19p
Zm4oc2N0cF9pZm5wLCBzY3RwX2lmYXApOworCQkJfQorCQkJZ290byBleGl0X3N0YWdlX2xlZnQ7
CisJCX0KKwl9CisJc2N0cF9pZmFwID0gbmV3X3NjdHBfaWZhcDsKKwltZW1zZXQoc2N0cF9pZmFw
LCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfaWZhKSk7CisJc2N0cF9pZmFwLT5pZm5fcCA9IHNjdHBf
aWZucDsKKwlhdG9taWNfYWRkX2ludCgmc2N0cF9pZm5wLT5yZWZjb3VudCwgMSk7CisJc2N0cF9p
ZmFwLT52cmZfaWQgPSB2cmZfaWQ7CisJc2N0cF9pZmFwLT5pZmEgPSBpZmE7CisjaWZkZWYgSEFW
RV9TQV9MRU4KKwltZW1jcHkoJnNjdHBfaWZhcC0+YWRkcmVzcywgYWRkciwgYWRkci0+c2FfbGVu
KTsKKyNlbHNlCisJc3dpdGNoIChhZGRyLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJY2Fz
ZSBBRl9JTkVUOgorCQltZW1jcHkoJnNjdHBfaWZhcC0+YWRkcmVzcywgYWRkciwgc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbikpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJY2Fz
ZSBBRl9JTkVUNjoKKwkJbWVtY3B5KCZzY3RwX2lmYXAtPmFkZHJlc3MsIGFkZHIsIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorCWNhc2UgQUZfQ09OTjoKKwkJbWVtY3B5KCZzY3RwX2lmYXAtPmFkZHJlc3Ms
IGFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCQlicmVhazsKKyNlbmRpZgor
CWRlZmF1bHQ6CisJCS8qIFRTTkggKi8KKwkJYnJlYWs7CisJfQorI2VuZGlmCisJc2N0cF9pZmFw
LT5sb2NhbGlmYV9mbGFncyA9IFNDVFBfQUREUl9WQUxJRCB8IFNDVFBfQUREUl9ERUZFUl9VU0U7
CisJc2N0cF9pZmFwLT5mbGFncyA9IGlmYV9mbGFnczsKKwkvKiBTZXQgc2NvcGUgKi8KKwlzd2l0
Y2ggKHNjdHBfaWZhcC0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJY2Fz
ZSBBRl9JTkVUOgorCXsKKwkJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisKKwkJc2luID0gJnNj
dHBfaWZhcC0+YWRkcmVzcy5zaW47CisJCWlmIChTQ1RQX0lGTl9JU19JRlRfTE9PUChzY3RwX2lm
YXAtPmlmbl9wKSB8fAorCQkgICAgKElONF9JU0xPT1BCQUNLX0FERFJFU1MoJnNpbi0+c2luX2Fk
ZHIpKSkgeworCQkJc2N0cF9pZmFwLT5zcmNfaXNfbG9vcCA9IDE7CisJCX0KKwkJaWYgKChJTjRf
SVNQUklWQVRFX0FERFJFU1MoJnNpbi0+c2luX2FkZHIpKSkgeworCQkJc2N0cF9pZmFwLT5zcmNf
aXNfcHJpdiA9IDE7CisJCX0KKwkJc2N0cF9pZm5wLT5udW1fdjQrKzsKKwkJaWYgKG5ld19pZm5f
YWYpCisJCSAgICBuZXdfaWZuX2FmID0gQUZfSU5FVDsKKwkJYnJlYWs7CisJfQorI2VuZGlmCisj
aWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCXsKKwkJLyogb2sgdG8gdXNlIGRlcHJlY2F0
ZWQgYWRkcmVzc2VzPyAqLworCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCisJCXNpbjYg
PSAmc2N0cF9pZmFwLT5hZGRyZXNzLnNpbjY7CisJCWlmIChTQ1RQX0lGTl9JU19JRlRfTE9PUChz
Y3RwX2lmYXAtPmlmbl9wKSB8fAorCQkgICAgKElONl9JU19BRERSX0xPT1BCQUNLKCZzaW42LT5z
aW42X2FkZHIpKSkgeworCQkJc2N0cF9pZmFwLT5zcmNfaXNfbG9vcCA9IDE7CisJCX0KKwkJaWYg
KElONl9JU19BRERSX0xJTktMT0NBTCgmc2luNi0+c2luNl9hZGRyKSkgeworCQkJc2N0cF9pZmFw
LT5zcmNfaXNfcHJpdiA9IDE7CisJCX0KKwkJc2N0cF9pZm5wLT5udW1fdjYrKzsKKwkJaWYgKG5l
d19pZm5fYWYpCisJCQluZXdfaWZuX2FmID0gQUZfSU5FVDY7CisJCWJyZWFrOworCX0KKyNlbmRp
ZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwljYXNlIEFGX0NPTk46CisJCWlmIChuZXdf
aWZuX2FmKQorCQkJbmV3X2lmbl9hZiA9IEFGX0NPTk47CisJCWJyZWFrOworI2VuZGlmCisJZGVm
YXVsdDoKKwkJbmV3X2lmbl9hZiA9IDA7CisJCWJyZWFrOworCX0KKwloYXNoX29mX2FkZHIgPSBz
Y3RwX2dldF9pZmFfaGFzaF92YWwoJnNjdHBfaWZhcC0+YWRkcmVzcy5zYSk7CisKKwlpZiAoKHNj
dHBfaWZhcC0+c3JjX2lzX3ByaXYgPT0gMCkgJiYKKwkgICAgKHNjdHBfaWZhcC0+c3JjX2lzX2xv
b3AgPT0gMCkpIHsKKwkJc2N0cF9pZmFwLT5zcmNfaXNfZ2xvYiA9IDE7CisJfQorCWhhc2hfYWRk
cl9oZWFkID0gJnZyZi0+dnJmX2FkZHJfaGFzaFsoaGFzaF9vZl9hZGRyICYgdnJmLT52cmZfYWRk
cl9oYXNobWFyayldOworCUxJU1RfSU5TRVJUX0hFQUQoaGFzaF9hZGRyX2hlYWQsIHNjdHBfaWZh
cCwgbmV4dF9idWNrZXQpOworCXNjdHBfaWZhcC0+cmVmY291bnQgPSAxOworCUxJU1RfSU5TRVJU
X0hFQUQoJnNjdHBfaWZucC0+aWZhbGlzdCwgc2N0cF9pZmFwLCBuZXh0X2lmYSk7CisJc2N0cF9p
Zm5wLT5pZmFfY291bnQrKzsKKwl2cmYtPnRvdGFsX2lmYV9jb3VudCsrOworCWF0b21pY19hZGRf
aW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfaWZhcyksIDEpOworCWlmIChuZXdfaWZuX2Fm
KSB7CisJCXNjdHBfaWZucC0+cmVnaXN0ZXJlZF9hZiA9IG5ld19pZm5fYWY7CisJfQorCVNDVFBf
SVBJX0FERFJfV1VOTE9DSygpOworCWlmIChuZXdfc2N0cF9pZm5wICE9IE5VTEwpIHsKKwkJU0NU
UF9GUkVFKG5ld19zY3RwX2lmbnAsIFNDVFBfTV9JRk4pOworCX0KKworCWlmIChkeW5hbWljX2Fk
ZCkgeworCQkvKiBCdW1wIHVwIHRoZSByZWZjb3VudCBzbyB0aGF0IHdoZW4gdGhlIHRpbWVyCisJ
CSAqIGNvbXBsZXRlcyBpdCB3aWxsIGRyb3AgYmFjayBkb3duLgorCQkgKi8KKwkJc3RydWN0IHNj
dHBfbGFkZHIgKndpOworCisJCWF0b21pY19hZGRfaW50KCZzY3RwX2lmYXAtPnJlZmNvdW50LCAx
KTsKKwkJd2kgPSBTQ1RQX1pPTkVfR0VUKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2xhZGRyKSwg
c3RydWN0IHNjdHBfbGFkZHIpOworCQlpZiAod2kgPT0gTlVMTCkgeworCQkJLyoKKwkJCSAqIEdh
aywgd2hhdCBjYW4gd2UgZG8/IFdlIGhhdmUgbG9zdCBhbiBhZGRyZXNzCisJCQkgKiBjaGFuZ2Ug
Y2FuIHlvdSBzYXkgSE9TRUQ/CisJCQkgKi8KKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0I0LCAi
TG9zdCBhbiBhZGRyZXNzIGNoYW5nZT9cbiIpOworCQkJLyogT3BwcywgbXVzdCBkZWNyZW1lbnQg
dGhlIGNvdW50ICovCisJCQlzY3RwX2RlbF9hZGRyX2Zyb21fdnJmKHZyZl9pZCwgYWRkciwgaWZu
X2luZGV4LAorCQkJCQkgICAgICAgaWZfbmFtZSk7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJ
CVNDVFBfSU5DUl9MQUREUl9DT1VOVCgpOworCQltZW1zZXQod2ksIDAsIHNpemVvZigqd2kpKTsK
KwkJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJndpLT5zdGFydF90aW1lKTsKKwkJd2ktPmlm
YSA9IHNjdHBfaWZhcDsKKwkJd2ktPmFjdGlvbiA9IFNDVFBfQUREX0lQX0FERFJFU1M7CisKKwkJ
U0NUUF9XUV9BRERSX0xPQ0soKTsKKwkJTElTVF9JTlNFUlRfSEVBRCgmU0NUUF9CQVNFX0lORk8o
YWRkcl93cSksIHdpLCBzY3RwX254dF9hZGRyKTsKKwkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJ
TUVSX1RZUEVfQUREUl9XUSwKKwkJCQkgKHN0cnVjdCBzY3RwX2lucGNiICopTlVMTCwKKwkJCQkg
KHN0cnVjdCBzY3RwX3RjYiAqKU5VTEwsCisJCQkJIChzdHJ1Y3Qgc2N0cF9uZXRzICopTlVMTCk7
CisJCVNDVFBfV1FfQUREUl9VTkxPQ0soKTsKKwl9IGVsc2UgeworCQkvKiBpdCdzIHJlYWR5IGZv
ciB1c2UgKi8KKwkJc2N0cF9pZmFwLT5sb2NhbGlmYV9mbGFncyAmPSB+U0NUUF9BRERSX0RFRkVS
X1VTRTsKKwl9CisJcmV0dXJuIChzY3RwX2lmYXApOworfQorCit2b2lkCitzY3RwX2RlbF9hZGRy
X2Zyb21fdnJmKHVpbnQzMl90IHZyZl9pZCwgc3RydWN0IHNvY2thZGRyICphZGRyLAorCQkgICAg
ICAgdWludDMyX3QgaWZuX2luZGV4LCBjb25zdCBjaGFyICppZl9uYW1lKQoreworCXN0cnVjdCBz
Y3RwX3ZyZiAqdnJmOworCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmFwID0gTlVMTDsKKworCVND
VFBfSVBJX0FERFJfV0xPQ0soKTsKKwl2cmYgPSBzY3RwX2ZpbmRfdnJmKHZyZl9pZCk7CisJaWYg
KHZyZiA9PSBOVUxMKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0I0LCAiQ2FuJ3QgZmluZCB2
cmZfaWQgMHgleFxuIiwgdnJmX2lkKTsKKwkJZ290byBvdXRfbm93OworCX0KKworI2lmZGVmIFND
VFBfREVCVUcKKwlTQ1RQREJHKFNDVFBfREVCVUdfUENCNCwgInZyZl9pZCAweCV4OiBkZWxldGlu
ZyBhZGRyZXNzOiIsIHZyZl9pZCk7CisJU0NUUERCR19BRERSKFNDVFBfREVCVUdfUENCNCwgYWRk
cik7CisjZW5kaWYKKwlzY3RwX2lmYXAgPSBzY3RwX2ZpbmRfaWZhX2J5X2FkZHIoYWRkciwgdnJm
LT52cmZfaWQsIFNDVFBfQUREUl9MT0NLRUQpOworCWlmIChzY3RwX2lmYXApIHsKKwkJLyogVmFs
aWRhdGUgdGhlIGRlbGV0ZSAqLworCQlpZiAoc2N0cF9pZmFwLT5pZm5fcCkgeworCQkJaW50IHZh
bGlkID0gMDsKKwkJCS8qLQorCQkJICogVGhlIG5hbWUgaGFzIHByaW9yaXR5IG92ZXIgdGhlIGlm
bl9pbmRleAorCQkJICogaWYgaXRzIGdpdmVuLgorCQkJICovCisJCQlpZiAoaWZfbmFtZSkgewor
CQkJCWlmIChzdHJuY21wKGlmX25hbWUsIHNjdHBfaWZhcC0+aWZuX3AtPmlmbl9uYW1lLCBTQ1RQ
X0lGTkFNU0laKSA9PSAwKSB7CisJCQkJCS8qIFRoZXkgbWF0Y2ggaXRzIGEgY29ycmVjdCBkZWxl
dGUgKi8KKwkJCQkJdmFsaWQgPSAxOworCQkJCX0KKwkJCX0KKwkJCWlmICghdmFsaWQpIHsKKwkJ
CQkvKiBsYXN0IGRpdGNoIGNoZWNrIGlmbl9pbmRleCAqLworCQkJCWlmIChpZm5faW5kZXggPT0g
c2N0cF9pZmFwLT5pZm5fcC0+aWZuX2luZGV4KSB7CisJCQkJCXZhbGlkID0gMTsKKwkJCQl9CisJ
CQl9CisJCQlpZiAoIXZhbGlkKSB7CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjQsICJpZm46
JWQgaWZuYW1lOiVzIGRvZXMgbm90IG1hdGNoIGFkZHJlc3Nlc1xuIiwKKwkJCQkJaWZuX2luZGV4
LCAoKGlmX25hbWUgPT0gTlVMTCkgPyAiTlVMTCIgOiBpZl9uYW1lKSk7CisJCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX1BDQjQsICJpZm46JWQgaWZuYW1lOiVzIC0gaWdub3JpbmcgZGVsZXRlXG4iLAor
CQkJCQlzY3RwX2lmYXAtPmlmbl9wLT5pZm5faW5kZXgsIHNjdHBfaWZhcC0+aWZuX3AtPmlmbl9u
YW1lKTsKKwkJCQlTQ1RQX0lQSV9BRERSX1dVTkxPQ0soKTsKKwkJCQlyZXR1cm47CisJCQl9CisJ
CX0KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjQsICJEZWxldGluZyBpZmEgJXBcbiIsICh2b2lk
ICopc2N0cF9pZmFwKTsKKwkJc2N0cF9pZmFwLT5sb2NhbGlmYV9mbGFncyAmPSBTQ1RQX0FERFJf
VkFMSUQ7CisJCS8qCisJCSAqIFdlIGRvbid0IHNldCB0aGUgZmxhZy4gVGhpcyBtZWFucyB0aGF0
IHRoZSBzdHJ1Y3R1cmUgd2lsbAorCQkgKiBoYW5nIGFyb3VuZCBpbiBFUCdzIHRoYXQgaGF2ZSBi
b3VuZCBzcGVjaWZpYyB0byBpdCB1bnRpbAorCQkgKiB0aGV5IGNsb3NlLiBUaGlzIGdpdmVzIHVz
IFRDUCBsaWtlIGJlaGF2aW9yIGlmIHNvbWVvbmUKKwkJICogcmVtb3ZlcyBhbiBhZGRyZXNzIChv
ciBmb3IgdGhhdCBtYXR0ZXIgYWRkcyBpdCByaWdodCBiYWNrKS4KKwkJICovCisJCS8qIHNjdHBf
aWZhcC0+bG9jYWxpZmFfZmxhZ3MgfD0gU0NUUF9CRUlOR19ERUxFVEVEOyAqLworCQl2cmYtPnRv
dGFsX2lmYV9jb3VudC0tOworCQlMSVNUX1JFTU9WRShzY3RwX2lmYXAsIG5leHRfYnVja2V0KTsK
KwkJc2N0cF9yZW1vdmVfaWZhX2Zyb21faWZuKHNjdHBfaWZhcCk7CisJfQorI2lmZGVmIFNDVFBf
REVCVUcKKwllbHNlIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjQsICJEZWwgQWRkci1pZm46
JWQgQ291bGQgbm90IGZpbmQgYWRkcmVzczoiLAorCQkJaWZuX2luZGV4KTsKKwkJU0NUUERCR19B
RERSKFNDVFBfREVCVUdfUENCMSwgYWRkcik7CisJfQorI2VuZGlmCisKKyBvdXRfbm93OgorCVND
VFBfSVBJX0FERFJfV1VOTE9DSygpOworCWlmIChzY3RwX2lmYXApIHsKKwkJc3RydWN0IHNjdHBf
bGFkZHIgKndpOworCisJCXdpID0gU0NUUF9aT05FX0dFVChTQ1RQX0JBU0VfSU5GTyhpcGlfem9u
ZV9sYWRkciksIHN0cnVjdCBzY3RwX2xhZGRyKTsKKwkJaWYgKHdpID09IE5VTEwpIHsKKwkJCS8q
CisJCQkgKiBHYWssIHdoYXQgY2FuIHdlIGRvPyBXZSBoYXZlIGxvc3QgYW4gYWRkcmVzcworCQkJ
ICogY2hhbmdlIGNhbiB5b3Ugc2F5IEhPU0VEPworCQkJICovCisJCQlTQ1RQREJHKFNDVFBfREVC
VUdfUENCNCwgIkxvc3QgYW4gYWRkcmVzcyBjaGFuZ2U/XG4iKTsKKworCQkJLyogT29wcywgbXVz
dCBkZWNyZW1lbnQgdGhlIGNvdW50ICovCisJCQlzY3RwX2ZyZWVfaWZhKHNjdHBfaWZhcCk7CisJ
CQlyZXR1cm47CisJCX0KKwkJU0NUUF9JTkNSX0xBRERSX0NPVU5UKCk7CisJCW1lbXNldCh3aSwg
MCwgc2l6ZW9mKCp3aSkpOworCQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmd2ktPnN0YXJ0
X3RpbWUpOworCQl3aS0+aWZhID0gc2N0cF9pZmFwOworCQl3aS0+YWN0aW9uID0gU0NUUF9ERUxf
SVBfQUREUkVTUzsKKwkJU0NUUF9XUV9BRERSX0xPQ0soKTsKKwkJLyoKKwkJICogU2hvdWxkIHRo
aXMgcmVhbGx5IGJlIGEgdGFpbHE/IEFzIGl0IGlzIHdlIHdpbGwgcHJvY2VzcyB0aGUKKwkJICog
bmV3ZXN0IGZpcnN0IDotMAorCQkgKi8KKwkJTElTVF9JTlNFUlRfSEVBRCgmU0NUUF9CQVNFX0lO
Rk8oYWRkcl93cSksIHdpLCBzY3RwX254dF9hZGRyKTsKKwkJc2N0cF90aW1lcl9zdGFydChTQ1RQ
X1RJTUVSX1RZUEVfQUREUl9XUSwKKwkJCQkgKHN0cnVjdCBzY3RwX2lucGNiICopTlVMTCwKKwkJ
CQkgKHN0cnVjdCBzY3RwX3RjYiAqKU5VTEwsCisJCQkJIChzdHJ1Y3Qgc2N0cF9uZXRzICopTlVM
TCk7CisJCVNDVFBfV1FfQUREUl9VTkxPQ0soKTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMg
aW50CitzY3RwX2RvZXNfc3RjYl9vd25fdGhpc19hZGRyKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwg
c3RydWN0IHNvY2thZGRyICp0bykKK3sKKwlpbnQgbG9vcGJhY2tfc2NvcGU7CisjaWYgZGVmaW5l
ZChJTkVUKQorCWludCBpcHY0X2xvY2FsX3Njb3BlLCBpcHY0X2FkZHJfbGVnYWw7CisjZW5kaWYK
KyNpZiBkZWZpbmVkKElORVQ2KQorCWludCBsb2NhbF9zY29wZSwgc2l0ZV9zY29wZSwgaXB2Nl9h
ZGRyX2xlZ2FsOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWludCBjb25u
X2FkZHJfbGVnYWw7CisjZW5kaWYKKwlzdHJ1Y3Qgc2N0cF92cmYgKnZyZjsKKwlzdHJ1Y3Qgc2N0
cF9pZm4gKnNjdHBfaWZuOworCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmE7CisKKwlsb29wYmFj
a19zY29wZSA9IHN0Y2ItPmFzb2Muc2NvcGUubG9vcGJhY2tfc2NvcGU7CisjaWYgZGVmaW5lZChJ
TkVUKQorCWlwdjRfbG9jYWxfc2NvcGUgPSBzdGNiLT5hc29jLnNjb3BlLmlwdjRfbG9jYWxfc2Nv
cGU7CisJaXB2NF9hZGRyX2xlZ2FsID0gc3RjYi0+YXNvYy5zY29wZS5pcHY0X2FkZHJfbGVnYWw7
CisjZW5kaWYKKyNpZiBkZWZpbmVkKElORVQ2KQorCWxvY2FsX3Njb3BlID0gc3RjYi0+YXNvYy5z
Y29wZS5sb2NhbF9zY29wZTsKKwlzaXRlX3Njb3BlID0gc3RjYi0+YXNvYy5zY29wZS5zaXRlX3Nj
b3BlOworCWlwdjZfYWRkcl9sZWdhbCA9IHN0Y2ItPmFzb2Muc2NvcGUuaXB2Nl9hZGRyX2xlZ2Fs
OworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWNvbm5fYWRkcl9sZWdhbCA9
IHN0Y2ItPmFzb2Muc2NvcGUuY29ubl9hZGRyX2xlZ2FsOworI2VuZGlmCisKKwlTQ1RQX0lQSV9B
RERSX1JMT0NLKCk7CisJdnJmID0gc2N0cF9maW5kX3ZyZihzdGNiLT5hc29jLnZyZl9pZCk7CisJ
aWYgKHZyZiA9PSBOVUxMKSB7CisJCS8qIG5vIHZyZiwgbm8gYWRkcmVzc2VzICovCisJCVNDVFBf
SVBJX0FERFJfUlVOTE9DSygpOworCQlyZXR1cm4gKDApOworCX0KKworCWlmIChzdGNiLT5zY3Rw
X2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpIHsKKwkJTElTVF9GT1JF
QUNIKHNjdHBfaWZuLCAmdnJmLT5pZm5saXN0LCBuZXh0X2lmbikgeworCQkJaWYgKChsb29wYmFj
a19zY29wZSA9PSAwKSAmJgorCQkJICAgIFNDVFBfSUZOX0lTX0lGVF9MT09QKHNjdHBfaWZuKSkg
eworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJTElTVF9GT1JFQUNIKHNjdHBfaWZhLCAmc2N0cF9p
Zm4tPmlmYWxpc3QsIG5leHRfaWZhKSB7CisJCQkJaWYgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVk
KHN0Y2IsIHNjdHBfaWZhKSAmJgorCQkJCSAgICAoIXNjdHBfaXNfYWRkcl9wZW5kaW5nKHN0Y2Is
IHNjdHBfaWZhKSkpIHsKKwkJCQkJLyogV2UgYWxsb3cgcGVuZGluZyBhZGRyZXNzZXMsIHdoZXJl
IHdlCisJCQkJCSAqIGhhdmUgc2VudCBhbiBhc2NvbmYtYWRkIHRvIGJlIGNvbnNpZGVyZWQKKwkJ
CQkJICogdmFsaWQuCisJCQkJCSAqLworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJaWYgKHNj
dHBfaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSAhPSB0by0+c2FfZmFtaWx5KSB7CisJCQkJCWNv
bnRpbnVlOworCQkJCX0KKwkJCQlzd2l0Y2ggKHNjdHBfaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWls
eSkgeworI2lmZGVmIElORVQKKwkJCQljYXNlIEFGX0lORVQ6CisJCQkJCWlmIChpcHY0X2FkZHJf
bGVnYWwpIHsKKwkJCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luLCAqcnNpbjsKKworCQkJCQkJ
c2luID0gJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjsKKwkJCQkJCXJzaW4gPSAoc3RydWN0IHNvY2th
ZGRyX2luICopdG87CisJCQkJCQlpZiAoKGlwdjRfbG9jYWxfc2NvcGUgPT0gMCkgJiYKKwkJCQkJ
CSAgICBJTjRfSVNQUklWQVRFX0FERFJFU1MoJnNpbi0+c2luX2FkZHIpKSB7CisJCQkJCQkJY29u
dGludWU7CisJCQkJCQl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKwkJCQkJCWlmIChwcmlzb25fY2hlY2tfaXA0KHN0Y2ItPnNjdHBfZXAtPmlw
X2lucC5pbnAuaW5wX2NyZWQsCisJCQkJCQkgICAgICAgICAgICAgICAgICAgICAmc2luLT5zaW5f
YWRkcikgIT0gMCkgeworCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorI2VuZGlmCisJCQkJCQlp
ZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gcnNpbi0+c2luX2FkZHIuc19hZGRyKSB7CisJCQkJ
CQkJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7CisJCQkJCQkJcmV0dXJuICgxKTsKKwkJCQkJCX0K
KwkJCQkJfQorCQkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQkJY2FzZSBBRl9J
TkVUNjoKKwkJCQkJaWYgKGlwdjZfYWRkcl9sZWdhbCkgeworCQkJCQkJc3RydWN0IHNvY2thZGRy
X2luNiAqc2luNiwgKnJzaW42OworI2lmIGRlZmluZWQoU0NUUF9FTUJFRERFRF9WNl9TQ09QRSkg
JiYgIWRlZmluZWQoU0NUUF9LQU1FKQorCQkJCQkJc3RydWN0IHNvY2thZGRyX2luNiBsc2E2Owor
I2VuZGlmCisJCQkJCQlzaW42ID0gJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjY7CisJCQkJCQlyc2lu
NiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopdG87CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQkJCWlmIChwcmlzb25fY2hlY2tfaXA2KHN0
Y2ItPnNjdHBfZXAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCQkJCQkgICAgICAgICAgICAgICAg
ICAgICAmc2luNi0+c2luNl9hZGRyKSAhPSAwKSB7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9
CisjZW5kaWYKKwkJCQkJCWlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRk
cikpIHsKKwkJCQkJCQlpZiAobG9jYWxfc2NvcGUgPT0gMCkKKwkJCQkJCQkJY29udGludWU7Cisj
aWYgZGVmaW5lZChTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFKQorCQkJCQkJCWlmIChzaW42LT5zaW42
X3Njb3BlX2lkID09IDApIHsKKyNpZmRlZiBTQ1RQX0tBTUUKKwkJCQkJCQkJaWYgKHNhNl9yZWNv
dmVyc2NvcGUoc2luNikgIT0gMCkKKwkJCQkJCQkJCWNvbnRpbnVlOworI2Vsc2UKKwkJCQkJCQkJ
bHNhNiA9ICpzaW42OworCQkJCQkJCQlpZiAoaW42X3JlY292ZXJzY29wZSgmbHNhNiwKKwkJCQkJ
CQkJICAgICAgICAgICAgICAgICAgICAgJmxzYTYuc2luNl9hZGRyLAorCQkJCQkJCQkgICAgICAg
ICAgICAgICAgICAgICBOVUxMKSkKKwkJCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJCQlzaW42ID0g
JmxzYTY7CisjZW5kaWYgLyogU0NUUF9LQU1FICovCisJCQkJCQkJfQorI2VuZGlmIC8qIFNDVFBf
RU1CRURERURfVjZfU0NPUEUgKi8KKwkJCQkJCX0KKwkJCQkJCWlmICgoc2l0ZV9zY29wZSA9PSAw
KSAmJgorCQkJCQkJICAgIChJTjZfSVNfQUREUl9TSVRFTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikp
KSB7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisJCQkJCQlpZiAoU0NUUDZfQVJFX0FERFJf
RVFVQUwoc2luNiwgcnNpbjYpKSB7CisJCQkJCQkJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7CisJ
CQkJCQkJcmV0dXJuICgxKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlicmVhazsKKyNlbmRpZgor
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQljYXNlIEFGX0NPTk46CisJCQkJCWlmIChj
b25uX2FkZHJfbGVnYWwpIHsKKwkJCQkJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubiwgKnJz
Y29ubjsKKworCQkJCQkJc2Nvbm4gPSAmc2N0cF9pZmEtPmFkZHJlc3Muc2Nvbm47CisJCQkJCQly
c2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKil0bzsKKwkJCQkJCWlmIChzY29ubi0+c2Nv
bm5fYWRkciA9PSByc2Nvbm4tPnNjb25uX2FkZHIpIHsKKwkJCQkJCQlTQ1RQX0lQSV9BRERSX1JV
TkxPQ0soKTsKKwkJCQkJCQlyZXR1cm4gKDEpOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWJyZWFr
OworI2VuZGlmCisJCQkJZGVmYXVsdDoKKwkJCQkJLyogVFNOSCAqLworCQkJCQlicmVhazsKKwkJ
CQl9CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7CisK
KwkJTElTVF9GT1JFQUNIKGxhZGRyLCAmc3RjYi0+c2N0cF9lcC0+c2N0cF9hZGRyX2xpc3QsIHNj
dHBfbnh0X2FkZHIpIHsKKwkJCWlmIChsYWRkci0+aWZhLT5sb2NhbGlmYV9mbGFncyAmIFNDVFBf
QkVJTkdfREVMRVRFRCkgeworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAiaWZhIGJlaW5n
IGRlbGV0ZWRcbiIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHNjdHBfaXNfYWRkcl9y
ZXN0cmljdGVkKHN0Y2IsIGxhZGRyLT5pZmEpICYmCisJCQkgICAgKCFzY3RwX2lzX2FkZHJfcGVu
ZGluZyhzdGNiLCBsYWRkci0+aWZhKSkpIHsKKwkJCQkvKiBXZSBhbGxvdyBwZW5kaW5nIGFkZHJl
c3Nlcywgd2hlcmUgd2UKKwkJCQkgKiBoYXZlIHNlbnQgYW4gYXNjb25mLWFkZCB0byBiZSBjb25z
aWRlcmVkCisJCQkJICogdmFsaWQuCisJCQkJICovCisJCQkJY29udGludWU7CisJCQl9CisJCQlp
ZiAobGFkZHItPmlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgIT0gdG8tPnNhX2ZhbWlseSkgewor
CQkJCWNvbnRpbnVlOworCQkJfQorCQkJc3dpdGNoICh0by0+c2FfZmFtaWx5KSB7CisjaWZkZWYg
SU5FVAorCQkJY2FzZSBBRl9JTkVUOgorCQkJeworCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2lu
LCAqcnNpbjsKKworCQkJCXNpbiA9ICZsYWRkci0+aWZhLT5hZGRyZXNzLnNpbjsKKwkJCQlyc2lu
ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXRvOworCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRk
ciA9PSByc2luLT5zaW5fYWRkci5zX2FkZHIpIHsKKwkJCQkJU0NUUF9JUElfQUREUl9SVU5MT0NL
KCk7CisJCQkJCXJldHVybiAoMSk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorI2VuZGlmCisj
aWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6CisJCQl7CisJCQkJc3RydWN0IHNvY2thZGRy
X2luNiAqc2luNiwgKnJzaW42OworCisJCQkJc2luNiA9ICZsYWRkci0+aWZhLT5hZGRyZXNzLnNp
bjY7CisJCQkJcnNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXRvOworCQkJCWlmIChTQ1RQ
Nl9BUkVfQUREUl9FUVVBTChzaW42LCByc2luNikpIHsKKwkJCQkJU0NUUF9JUElfQUREUl9SVU5M
T0NLKCk7CisJCQkJCXJldHVybiAoMSk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCisjZW5k
aWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQljYXNlIEFGX0NPTk46CisJCQl7CisJ
CQkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uLCAqcnNjb25uOworCisJCQkJc2Nvbm4gPSAm
bGFkZHItPmlmYS0+YWRkcmVzcy5zY29ubjsKKwkJCQlyc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRy
X2Nvbm4gKil0bzsKKwkJCQlpZiAoc2Nvbm4tPnNjb25uX2FkZHIgPT0gcnNjb25uLT5zY29ubl9h
ZGRyKSB7CisJCQkJCVNDVFBfSVBJX0FERFJfUlVOTE9DSygpOworCQkJCQlyZXR1cm4gKDEpOwor
CQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQkvKiBUU05I
ICovCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7
CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHN0cnVjdCBzY3RwX3RjYiAqCitzY3RwX3RjYl9z
cGVjaWFsX2xvY2F0ZShzdHJ1Y3Qgc2N0cF9pbnBjYiAqKmlucF9wLCBzdHJ1Y3Qgc29ja2FkZHIg
KmZyb20sCisgICAgc3RydWN0IHNvY2thZGRyICp0bywgc3RydWN0IHNjdHBfbmV0cyAqKm5ldHAs
IHVpbnQzMl90IHZyZl9pZCkKK3sKKwkvKioqKiBBU1NVTUVTIFRIRSBDQUxMRVIgaG9sZHMgdGhl
IElOUF9JTkZPX1JMT0NLICovCisJLyoKKwkgKiBJZiB3ZSBzdXBwb3J0IHRoZSBUQ1AgbW9kZWws
IHRoZW4gd2UgbXVzdCBub3cgZGlnIHRocm91Z2ggdG8gc2VlCisJICogaWYgd2UgY2FuIGZpbmQg
b3VyIGVuZHBvaW50IGluIHRoZSBsaXN0IG9mIHRjcCBlcCdzLgorCSAqLworCXVpbnQxNl90IGxw
b3J0LCBycG9ydDsKKwlzdHJ1Y3Qgc2N0cHBjYmhlYWQgKmVwaGVhZDsKKwlzdHJ1Y3Qgc2N0cF9p
bnBjYiAqaW5wOworCXN0cnVjdCBzY3RwX2xhZGRyICpsYWRkcjsKKwlzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2I7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworI2lmZGVmIFNDVFBfTVZSRgorCWludCBm
bmQsIGk7CisjZW5kaWYKKworCWlmICgodG8gPT0gTlVMTCkgfHwgKGZyb20gPT0gTlVMTCkpIHsK
KwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwlzd2l0Y2ggKHRvLT5zYV9mYW1pbHkpIHsKKyNpZmRl
ZiBJTkVUCisJY2FzZSBBRl9JTkVUOgorCQlpZiAoZnJvbS0+c2FfZmFtaWx5ID09IEFGX0lORVQp
IHsKKwkJCWxwb3J0ID0gKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKil0byktPnNpbl9wb3J0OworCQkJ
cnBvcnQgPSAoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWZyb20pLT5zaW5fcG9ydDsKKwkJfSBlbHNl
IHsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVU
NgorCWNhc2UgQUZfSU5FVDY6CisJCWlmIChmcm9tLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsK
KwkJCWxwb3J0ID0gKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopdG8pLT5zaW42X3BvcnQ7CisJCQly
cG9ydCA9ICgoc3RydWN0IHNvY2thZGRyX2luNiAqKWZyb20pLT5zaW42X3BvcnQ7CisJCX0gZWxz
ZSB7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQorCWNhc2UgQUZfQ09OTjoKKwkJaWYgKGZyb20tPnNhX2ZhbWlseSA9
PSBBRl9DT05OKSB7CisJCQlscG9ydCA9ICgoc3RydWN0IHNvY2thZGRyX2Nvbm4gKil0byktPnNj
b25uX3BvcnQ7CisJCQlycG9ydCA9ICgoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilmcm9tKS0+c2Nv
bm5fcG9ydDsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJYnJlYWs7Cisj
ZW5kaWYKKwlkZWZhdWx0OgorCQlyZXR1cm4gKE5VTEwpOworCX0KKwllcGhlYWQgPSAmU0NUUF9C
QVNFX0lORk8oc2N0cF90Y3BlcGhhc2gpW1NDVFBfUENCSEFTSF9BTExBRERSKChscG9ydCB8IHJw
b3J0KSwgU0NUUF9CQVNFX0lORk8oaGFzaHRjcG1hcmspKV07CisJLyoKKwkgKiBPayBub3cgZm9y
IGVhY2ggb2YgdGhlIGd1eXMgaW4gdGhpcyBidWNrZXQgd2UgbXVzdCBsb29rIGFuZCBzZWU6CisJ
ICogLSBEb2VzIHRoZSByZW1vdGUgcG9ydCBtYXRjaC4gLSBEb2VzIHRoZXJlIHNpbmdsZSBhc3Nv
Y2lhdGlvbidzCisJICogYWRkcmVzc2VzIG1hdGNoIHRoaXMgYWRkcmVzcyAodG8pLiBJZiBzbyB3
ZSB1cGRhdGUgcF9lcCB0byBwb2ludAorCSAqIHRvIHRoaXMgZXAgYW5kIHJldHVybiB0aGUgdGNi
IGZyb20gaXQuCisJICovCisJTElTVF9GT1JFQUNIKGlucCwgZXBoZWFkLCBzY3RwX2hhc2gpIHsK
KwkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX1NPQ0tFVF9BTExHT05FKSB7CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQlj
b250aW51ZTsKKwkJfQorCQlpZiAobHBvcnQgIT0gaW5wLT5zY3RwX2xwb3J0KSB7CisJCQlTQ1RQ
X0lOUF9SVU5MT0NLKGlucCk7CisJCQljb250aW51ZTsKKwkJfQorI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCXN3aXRjaCAodG8tPnNhX2ZhbWls
eSkgeworI2lmZGVmIElORVQKKwkJY2FzZSBBRl9JTkVUOgorCQl7CisJCQlzdHJ1Y3Qgc29ja2Fk
ZHJfaW4gKnNpbjsKKworCQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXRvOworCQkJaWYg
KHByaXNvbl9jaGVja19pcDQoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAorCQkJICAgICAgICAg
ICAgICAgICAgICAgJnNpbi0+c2luX2FkZHIpICE9IDApIHsKKwkJCQlTQ1RQX0lOUF9SVU5MT0NL
KGlucCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlicmVhazsKKwkJfQorI2VuZGlmCisjaWZk
ZWYgSU5FVDYKKwkJY2FzZSBBRl9JTkVUNjoKKwkJeworCQkJc3RydWN0IHNvY2thZGRyX2luNiAq
c2luNjsKKworCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopdG87CisJCQlpZiAocHJp
c29uX2NoZWNrX2lwNihpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCQkgICAgICAgICAgICAg
ICAgICAgICAmc2luNi0+c2luNl9hZGRyKSAhPSAwKSB7CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhp
bnApOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCQlkZWZh
dWx0OgorCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJY29udGludWU7CisJCX0KKyNlbmRp
ZgorI2lmZGVmIFNDVFBfTVZSRgorCQlmbmQgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgaW5wLT5u
dW1fdnJmczsgaSsrKSB7CisJCQlpZiAoaW5wLT5tX3ZyZl9pZHNbaV0gPT0gdnJmX2lkKSB7CisJ
CQkJZm5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoZm5kID09IDApIHsKKwkJ
CVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCWNvbnRpbnVlOworCQl9CisjZWxzZQorCQlpZiAo
aW5wLT5kZWZfdnJmX2lkICE9IHZyZl9pZCkgeworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwor
CQkJY29udGludWU7CisJCX0KKyNlbmRpZgorCQkvKiBjaGVjayB0byBzZWUgaWYgdGhlIGVwIGhh
cyBvbmUgb2YgdGhlIGFkZHJlc3NlcyAqLworCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX0JPVU5EQUxMKSA9PSAwKSB7CisJCQkvKiBXZSBhcmUgTk9UIGJvdW5kIGFsbCwg
c28gbG9vayBmdXJ0aGVyICovCisJCQlpbnQgbWF0Y2ggPSAwOworCisJCQlMSVNUX0ZPUkVBQ0go
bGFkZHIsICZpbnAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7CisJCQkJaWYgKGxh
ZGRyLT5pZmEgPT0gTlVMTCkgeworCQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCMSwgIiVzOiBO
VUxMIGlmYVxuIiwgX19mdW5jX18pOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJaWYgKGxh
ZGRyLT5pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9CRUlOR19ERUxFVEVEKSB7CisJCQkJCVND
VFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAiaWZhIGJlaW5nIGRlbGV0ZWRcbiIpOworCQkJCQljb250
aW51ZTsKKwkJCQl9CisJCQkJaWYgKGxhZGRyLT5pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09
CisJCQkJICAgIHRvLT5zYV9mYW1pbHkpIHsKKwkJCQkJLyogc2VlIGlmIGl0IG1hdGNoZXMgKi8K
KyNpZmRlZiBJTkVUCisJCQkJCWlmIChmcm9tLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgeworCQkJ
CQkJc3RydWN0IHNvY2thZGRyX2luICppbnRmX2FkZHIsICpzaW47CisKKwkJCQkJCWludGZfYWRk
ciA9ICZsYWRkci0+aWZhLT5hZGRyZXNzLnNpbjsKKwkJCQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2Fk
ZHJfaW4gKil0bzsKKwkJCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PQorCQkJCQkJICAg
IGludGZfYWRkci0+c2luX2FkZHIuc19hZGRyKSB7CisJCQkJCQkJbWF0Y2ggPSAxOworCQkJCQkJ
CWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJCQlpZiAo
ZnJvbS0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42
ICppbnRmX2FkZHI2OworCQkJCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKworCQkJCQkJ
c2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopCisJCQkJCQkgICAgdG87CisJCQkJCQlpbnRm
X2FkZHI2ID0gJmxhZGRyLT5pZmEtPmFkZHJlc3Muc2luNjsKKworCQkJCQkJaWYgKFNDVFA2X0FS
RV9BRERSX0VRVUFMKHNpbjYsCisJCQkJCQkgICAgaW50Zl9hZGRyNikpIHsKKwkJCQkJCQltYXRj
aCA9IDE7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKyNlbmRpZgorI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQkJaWYgKGZyb20tPnNhX2ZhbWlseSA9PSBBRl9DT05OKSB7
CisJCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqaW50Zl9hZGRyLCAqc2Nvbm47CisKKwkJCQkJ
CWludGZfYWRkciA9ICZsYWRkci0+aWZhLT5hZGRyZXNzLnNjb25uOworCQkJCQkJc2Nvbm4gPSAo
c3RydWN0IHNvY2thZGRyX2Nvbm4gKil0bzsKKwkJCQkJCWlmIChzY29ubi0+c2Nvbm5fYWRkciA9
PQorCQkJCQkJICAgIGludGZfYWRkci0+c2Nvbm5fYWRkcikgeworCQkJCQkJCW1hdGNoID0gMTsK
KwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorI2VuZGlmCisJCQkJfQorCQkJfQorCQkJ
aWYgKG1hdGNoID09IDApIHsKKwkJCQkvKiBUaGlzIGVuZHBvaW50IGRvZXMgbm90IGhhdmUgdGhp
cyBhZGRyZXNzICovCisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJCWNvbnRpbnVlOwor
CQkJfQorCQl9CisJCS8qCisJCSAqIE9rIGlmIHdlIGhpdCBoZXJlIHRoZSBlcCBoYXMgdGhlIGFk
ZHJlc3MsIGRvZXMgaXQgaG9sZAorCQkgKiB0aGUgdGNiPworCQkgKi8KKwkJLyogWFhYOiBXaHkg
ZG9uJ3Qgd2UgVEFJTFFfRk9SRUFDSCB0aHJvdWdoIHNjdHBfYXNvY19saXN0PyAqLworCQlzdGNi
ID0gTElTVF9GSVJTVCgmaW5wLT5zY3RwX2Fzb2NfbGlzdCk7CisJCWlmIChzdGNiID09IE5VTEwp
IHsKKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCVNDVFBf
VENCX0xPQ0soc3RjYik7CisJCWlmICghc2N0cF9kb2VzX3N0Y2Jfb3duX3RoaXNfYWRkcihzdGNi
LCB0bykpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCVNDVFBfSU5QX1JVTkxPQ0so
aW5wKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChzdGNiLT5ycG9ydCAhPSBycG9ydCkgewor
CQkJLyogcmVtb3RlIHBvcnQgZG9lcyBub3QgbWF0Y2guICovCisJCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQljb250aW51ZTsKKwkJfQorCQlp
ZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKKwkJ
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCWNv
bnRpbnVlOworCQl9CisJCWlmICghc2N0cF9kb2VzX3N0Y2Jfb3duX3RoaXNfYWRkcihzdGNiLCB0
bykpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5w
KTsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIERvZXMgdGhpcyBUQ0IgaGF2ZSBhIG1hdGNoaW5n
IGFkZHJlc3M/ICovCisJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3Rw
X25leHQpIHsKKwkJCWlmIChuZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5ICE9IGZyb20tPnNh
X2ZhbWlseSkgeworCQkJCS8qIG5vdCB0aGUgc2FtZSBmYW1pbHksIGNhbid0IGJlIGEgbWF0Y2gg
Ki8KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXN3aXRjaCAoZnJvbS0+c2FfZmFtaWx5KSB7Cisj
aWZkZWYgSU5FVAorCQkJY2FzZSBBRl9JTkVUOgorCQkJeworCQkJCXN0cnVjdCBzb2NrYWRkcl9p
biAqc2luLCAqcnNpbjsKKworCQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmbmV0LT5y
by5fbF9hZGRyOworCQkJCXJzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopZnJvbTsKKwkJCQlp
ZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0KKwkJCQkgICAgcnNpbi0+c2luX2FkZHIuc19hZGRy
KSB7CisJCQkJCS8qIGZvdW5kIGl0ICovCisJCQkJCWlmIChuZXRwICE9IE5VTEwpIHsKKwkJCQkJ
CSpuZXRwID0gbmV0OworCQkJCQl9CisJCQkJCS8qIFVwZGF0ZSB0aGUgZW5kcG9pbnQgcG9pbnRl
ciAqLworCQkJCQkqaW5wX3AgPSBpbnA7CisJCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJ
CQkJcmV0dXJuIChzdGNiKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisjZW5kaWYKKyNpZmRl
ZiBJTkVUNgorCQkJY2FzZSBBRl9JTkVUNjoKKwkJCXsKKwkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42
ICpzaW42LCAqcnNpbjY7CisKKwkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmbmV0
LT5yby5fbF9hZGRyOworCQkJCXJzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilmcm9tOwor
CQkJCWlmIChTQ1RQNl9BUkVfQUREUl9FUVVBTChzaW42LAorCQkJCSAgICByc2luNikpIHsKKwkJ
CQkJLyogZm91bmQgaXQgKi8KKwkJCQkJaWYgKG5ldHAgIT0gTlVMTCkgeworCQkJCQkJKm5ldHAg
PSBuZXQ7CisJCQkJCX0KKwkJCQkJLyogVXBkYXRlIHRoZSBlbmRwb2ludCBwb2ludGVyICovCisJ
CQkJCSppbnBfcCA9IGlucDsKKwkJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJCQlyZXR1
cm4gKHN0Y2IpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKyNlbmRpZgorI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKKwkJCWNhc2UgQUZfQ09OTjoKKwkJCXsKKwkJCQlzdHJ1Y3Qgc29ja2Fk
ZHJfY29ubiAqc2Nvbm4sICpyc2Nvbm47CisKKwkJCQlzY29ubiA9IChzdHJ1Y3Qgc29ja2FkZHJf
Y29ubiAqKSZuZXQtPnJvLl9sX2FkZHI7CisJCQkJcnNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9j
b25uICopZnJvbTsKKwkJCQlpZiAoc2Nvbm4tPnNjb25uX2FkZHIgPT0gcnNjb25uLT5zY29ubl9h
ZGRyKSB7CisJCQkJCS8qIGZvdW5kIGl0ICovCisJCQkJCWlmIChuZXRwICE9IE5VTEwpIHsKKwkJ
CQkJCSpuZXRwID0gbmV0OworCQkJCQl9CisJCQkJCS8qIFVwZGF0ZSB0aGUgZW5kcG9pbnQgcG9p
bnRlciAqLworCQkJCQkqaW5wX3AgPSBpbnA7CisJCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsK
KwkJCQkJcmV0dXJuIChzdGNiKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisjZW5kaWYKKwkJ
CWRlZmF1bHQ6CisJCQkJLyogVFNOSCAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKKwkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCX0KKwlyZXR1cm4g
KE5VTEwpOworfQorCisvKgorICogcnVsZXMgZm9yIHVzZQorICoKKyAqIDEpIElmIEkgcmV0dXJu
IGEgTlVMTCB5b3UgbXVzdCBkZWNyZW1lbnQgYW55IElOUCByZWYgY250LiAyKSBJZiBJIGZpbmQg
YW4KKyAqIHN0Y2IsIGJvdGggd2lsbCBiZSBsb2NrZWQgKGxvY2tlZF90Y2IgYW5kIHN0Y2IpIGJ1
dCBkZWNyZW1lbnQgd2lsbCBiZSBkb25lCisgKiAoaWYgbG9ja2VkID09IE5VTEwpLiAzKSBEZWNy
ZW1lbnQgaGFwcGVucyBvbiByZXR1cm4gT05MWSBpZiBsb2NrZWQgPT0KKyAqIE5VTEwuCisgKi8K
Kworc3RydWN0IHNjdHBfdGNiICoKK3NjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoc3RydWN0
IHNjdHBfaW5wY2IgKippbnBfcCwgc3RydWN0IHNvY2thZGRyICpyZW1vdGUsCisgICAgc3RydWN0
IHNjdHBfbmV0cyAqKm5ldHAsIHN0cnVjdCBzb2NrYWRkciAqbG9jYWwsIHN0cnVjdCBzY3RwX3Rj
YiAqbG9ja2VkX3RjYikKK3sKKwlzdHJ1Y3Qgc2N0cGFzb2NoZWFkICpoZWFkOworCXN0cnVjdCBz
Y3RwX2lucGNiICppbnA7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiID0gTlVMTDsKKwlzdHJ1Y3Qg
c2N0cF9uZXRzICpuZXQ7CisJdWludDE2X3QgcnBvcnQ7CisKKwlpbnAgPSAqaW5wX3A7CisJc3dp
dGNoIChyZW1vdGUtPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisJ
CXJwb3J0ID0gKCgoc3RydWN0IHNvY2thZGRyX2luICopcmVtb3RlKS0+c2luX3BvcnQpOworCQli
cmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKwkJcnBvcnQgPSAo
KChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopcmVtb3RlKS0+c2luNl9wb3J0KTsKKwkJYnJlYWs7Cisj
ZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJY2FzZSBBRl9DT05OOgorCQlycG9y
dCA9ICgoKHN0cnVjdCBzb2NrYWRkcl9jb25uICopcmVtb3RlKS0+c2Nvbm5fcG9ydCk7CisJCWJy
ZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWYgKGxvY2tl
ZF90Y2IpIHsKKwkJLyoKKwkJICogVU4tbG9jayBzbyB3ZSBjYW4gZG8gcHJvcGVyIGxvY2tpbmcg
aGVyZSB0aGlzIG9jY3VycyB3aGVuCisJCSAqIGNhbGxlZCBmcm9tIGxvYWRfYWRkcmVzc2VzX2Zy
b21faW5pdC4KKwkJICovCisJCWF0b21pY19hZGRfaW50KCZsb2NrZWRfdGNiLT5hc29jLnJlZmNu
dCwgMSk7CisJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfdGNiKTsKKwl9CisJU0NUUF9JTlBfSU5G
T19STE9DSygpOworCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQ
RSkgfHwKKwkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wp
KSB7CisJCS8qLQorCQkgKiBOb3cgZWl0aGVyIHRoaXMgZ3V5IGlzIG91ciBsaXN0ZW5lciBvciBp
dCdzIHRoZQorCQkgKiBjb25uZWN0b3IuIElmIGl0IGlzIHRoZSBvbmUgdGhhdCBpc3N1ZWQgdGhl
IGNvbm5lY3QsIHRoZW4KKwkJICogaXQncyBvbmx5IGNoYW5jZSBpcyB0byBiZSB0aGUgZmlyc3Qg
VENCIGluIHRoZSBsaXN0LiBJZgorCQkgKiBpdCBpcyB0aGUgYWNjZXB0b3IsIHRoZW4gZG8gdGhl
IHNwZWNpYWxfbG9va3VwIHRvIGhhc2gKKwkJICogYW5kIGZpbmQgdGhlIHJlYWwgaW5wLgorCQkg
Ki8KKwkJaWYgKChpbnAtPnNjdHBfc29ja2V0KSAmJiBTQ1RQX0lTX0xJU1RFTklORyhpbnApKSB7
CisJCQkvKiB0byBpcyBwZWVyIGFkZHIsIGZyb20gaXMgbXkgYWRkciAqLworI2lmbmRlZiBTQ1RQ
X01WUkYKKwkJCXN0Y2IgPSBzY3RwX3RjYl9zcGVjaWFsX2xvY2F0ZShpbnBfcCwgcmVtb3RlLCBs
b2NhbCwKKwkJCSAgICBuZXRwLCBpbnAtPmRlZl92cmZfaWQpOworCQkJaWYgKChzdGNiICE9IE5V
TEwpICYmIChsb2NrZWRfdGNiID09IE5VTEwpKSB7CisJCQkJLyogd2UgaGF2ZSBhIGxvY2tlZCB0
Y2IsIGxvd2VyIHJlZmNvdW50ICovCisJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJCX0K
KwkJCWlmICgobG9ja2VkX3RjYiAhPSBOVUxMKSAmJiAobG9ja2VkX3RjYiAhPSBzdGNiKSkgewor
CQkJCVNDVFBfSU5QX1JMT0NLKGxvY2tlZF90Y2ItPnNjdHBfZXApOworCQkJCVNDVFBfVENCX0xP
Q0sobG9ja2VkX3RjYik7CisJCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmbG9ja2VkX3RjYi0+YXNv
Yy5yZWZjbnQsIDEpOworCQkJCVNDVFBfSU5QX1JVTkxPQ0sobG9ja2VkX3RjYi0+c2N0cF9lcCk7
CisJCQl9CisjZWxzZQorCQkJLyotCisJCQkgKiBNVlJGIGlzIHRyaWNreSwgd2UgbXVzdCBsb29r
IGluIGV2ZXJ5IFZSRgorCQkJICogdGhlIGVuZHBvaW50IGhhcy4KKwkJCSAqLworCQkJaW50IGk7
CisKKwkJCWZvciAoaSA9IDA7IGkgPCBpbnAtPm51bV92cmZzOyBpKyspIHsKKwkJCQlzdGNiID0g
c2N0cF90Y2Jfc3BlY2lhbF9sb2NhdGUoaW5wX3AsIHJlbW90ZSwgbG9jYWwsCisJCQkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHAsIGlucC0+bV92cmZfaWRzW2ldKTsKKwkJCQlp
ZiAoKHN0Y2IgIT0gTlVMTCkgJiYgKGxvY2tlZF90Y2IgPT0gTlVMTCkpIHsKKwkJCQkJLyogd2Ug
aGF2ZSBhIGxvY2tlZCB0Y2IsIGxvd2VyIHJlZmNvdW50ICovCisJCQkJCVNDVFBfSU5QX0RFQ1Jf
UkVGKGlucCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAoKGxvY2tlZF90Y2IgIT0gTlVM
TCkgJiYgKGxvY2tlZF90Y2IgIT0gc3RjYikpIHsKKwkJCQkJU0NUUF9JTlBfUkxPQ0sobG9ja2Vk
X3RjYi0+c2N0cF9lcCk7CisJCQkJCVNDVFBfVENCX0xPQ0sobG9ja2VkX3RjYik7CisJCQkJCWF0
b21pY19zdWJ0cmFjdF9pbnQoJmxvY2tlZF90Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCQkJU0NU
UF9JTlBfUlVOTE9DSyhsb2NrZWRfdGNiLT5zY3RwX2VwKTsKKwkJCQkJYnJlYWs7CisJCQkJfQor
CQkJfQorI2VuZGlmCisJCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKwkJCXJldHVybiAoc3Rj
Yik7CisJCX0gZWxzZSB7CisJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQkJaWYgKGlucC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSB7CisJCQkJZ290byBudWxs
X3JldHVybjsKKwkJCX0KKwkJCXN0Y2IgPSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNvY19saXN0
KTsKKwkJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCQlnb3RvIG51bGxfcmV0dXJuOworCQkJfQor
CQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKworCQkJaWYgKHN0Y2ItPnJwb3J0ICE9IHJwb3J0KSB7
CisJCQkJLyogcmVtb3RlIHBvcnQgZG9lcyBub3QgbWF0Y2guICovCisJCQkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOworCQkJCWdvdG8gbnVsbF9yZXR1cm47CisJCQl9CisJCQlpZiAoc3RjYi0+YXNv
Yy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKKwkJCQlTQ1RQX1RDQl9V
TkxPQ0soc3RjYik7CisJCQkJZ290byBudWxsX3JldHVybjsKKwkJCX0KKwkJCWlmIChsb2NhbCAm
JiAhc2N0cF9kb2VzX3N0Y2Jfb3duX3RoaXNfYWRkcihzdGNiLCBsb2NhbCkpIHsKKwkJCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7CisJCQkJZ290byBudWxsX3JldHVybjsKKwkJCX0KKwkJCS8qIG5v
dyBsb29rIGF0IHRoZSBsaXN0IG9mIHJlbW90ZSBhZGRyZXNzZXMgKi8KKwkJCVRBSUxRX0ZPUkVB
Q0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKyNpZmRlZiBJTlZBUklBTlRT
CisJCQkJaWYgKG5ldCA9PSAoVEFJTFFfTkVYVChuZXQsIHNjdHBfbmV4dCkpKSB7CisJCQkJCXBh
bmljKCJDb3JydXB0IG5ldCBsaXN0Iik7CisJCQkJfQorI2VuZGlmCisJCQkJaWYgKG5ldC0+cm8u
X2xfYWRkci5zYS5zYV9mYW1pbHkgIT0KKwkJCQkgICAgcmVtb3RlLT5zYV9mYW1pbHkpIHsKKwkJ
CQkJLyogbm90IHRoZSBzYW1lIGZhbWlseSAqLworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJ
c3dpdGNoIChyZW1vdGUtPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCQljYXNlIEFGX0lO
RVQ6CisJCQkJeworCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiwgKnJzaW47CisKKwkJCQkJ
c2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKQorCQkJCQkgICAgJm5ldC0+cm8uX2xfYWRkcjsK
KwkJCQkJcnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilyZW1vdGU7CisJCQkJCWlmIChzaW4t
PnNpbl9hZGRyLnNfYWRkciA9PQorCQkJCQkgICAgcnNpbi0+c2luX2FkZHIuc19hZGRyKSB7CisJ
CQkJCQkvKiBmb3VuZCBpdCAqLworCQkJCQkJaWYgKG5ldHAgIT0gTlVMTCkgeworCQkJCQkJCSpu
ZXRwID0gbmV0OworCQkJCQkJfQorCQkJCQkJaWYgKGxvY2tlZF90Y2IgPT0gTlVMTCkgeworCQkJ
CQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQkJCQl9IGVsc2UgaWYgKGxvY2tlZF90Y2Ig
IT0gc3RjYikgeworCQkJCQkJCVNDVFBfVENCX0xPQ0sobG9ja2VkX3RjYik7CisJCQkJCQl9CisJ
CQkJCQlpZiAobG9ja2VkX3RjYikgeworCQkJCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJmxvY2tl
ZF90Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCQkJCX0KKworCQkJCQkJU0NUUF9JTlBfV1VOTE9D
SyhpbnApOworCQkJCQkJU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7CisJCQkJCQlyZXR1cm4gKHN0
Y2IpOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKyNlbmRpZgorI2lmZGVmIElORVQ2CisJ
CQkJY2FzZSBBRl9JTkVUNjoKKwkJCQl7CisJCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYs
ICpyc2luNjsKKworCQkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmbmV0LT5yby5f
bF9hZGRyOworCQkJCQlyc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopcmVtb3RlOworCQkJ
CQlpZiAoU0NUUDZfQVJFX0FERFJfRVFVQUwoc2luNiwKKwkJCQkJICAgIHJzaW42KSkgeworCQkJ
CQkJLyogZm91bmQgaXQgKi8KKwkJCQkJCWlmIChuZXRwICE9IE5VTEwpIHsKKwkJCQkJCQkqbmV0
cCA9IG5ldDsKKwkJCQkJCX0KKwkJCQkJCWlmIChsb2NrZWRfdGNiID09IE5VTEwpIHsKKwkJCQkJ
CQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCQkJCQkJfSBlbHNlIGlmIChsb2NrZWRfdGNiICE9
IHN0Y2IpIHsKKwkJCQkJCQlTQ1RQX1RDQl9MT0NLKGxvY2tlZF90Y2IpOworCQkJCQkJfQorCQkJ
CQkJaWYgKGxvY2tlZF90Y2IpIHsKKwkJCQkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZsb2NrZWRf
dGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJCQl9CisJCQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlu
cCk7CisJCQkJCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKwkJCQkJCXJldHVybiAoc3RjYik7
CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorCQkJCWNhc2UgQUZfQ09OTjoKKwkJCQl7CisJCQkJCXN0cnVjdCBzb2NrYWRkcl9j
b25uICpzY29ubiwgKnJzY29ubjsKKworCQkJCQlzY29ubiA9IChzdHJ1Y3Qgc29ja2FkZHJfY29u
biAqKSZuZXQtPnJvLl9sX2FkZHI7CisJCQkJCXJzY29ubiA9IChzdHJ1Y3Qgc29ja2FkZHJfY29u
biAqKXJlbW90ZTsKKwkJCQkJaWYgKHNjb25uLT5zY29ubl9hZGRyID09IHJzY29ubi0+c2Nvbm5f
YWRkcikgeworCQkJCQkJLyogZm91bmQgaXQgKi8KKwkJCQkJCWlmIChuZXRwICE9IE5VTEwpIHsK
KwkJCQkJCQkqbmV0cCA9IG5ldDsKKwkJCQkJCX0KKwkJCQkJCWlmIChsb2NrZWRfdGNiID09IE5V
TEwpIHsKKwkJCQkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCQkJCQkJfSBlbHNlIGlmIChs
b2NrZWRfdGNiICE9IHN0Y2IpIHsKKwkJCQkJCQlTQ1RQX1RDQl9MT0NLKGxvY2tlZF90Y2IpOwor
CQkJCQkJfQorCQkJCQkJaWYgKGxvY2tlZF90Y2IpIHsKKwkJCQkJCQlhdG9taWNfc3VidHJhY3Rf
aW50KCZsb2NrZWRfdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJCQl9CisJCQkJCQlTQ1RQX0lO
UF9XVU5MT0NLKGlucCk7CisJCQkJCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKwkJCQkJCXJl
dHVybiAoc3RjYik7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorI2VuZGlmCisJCQkJZGVm
YXVsdDoKKwkJCQkJLyogVFNOSCAqLworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7CisJCX0KKwl9IGVsc2UgeworCQlTQ1RQX0lOUF9XTE9DSyhpbnAp
OworCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkUp
IHsKKwkJCWdvdG8gbnVsbF9yZXR1cm47CisJCX0KKwkJaGVhZCA9ICZpbnAtPnNjdHBfdGNiaGFz
aFtTQ1RQX1BDQkhBU0hfQUxMQUREUihycG9ydCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnAtPnNjdHBfaGFzaG1hcmspXTsKKwkJTElTVF9GT1JF
QUNIKHN0Y2IsIGhlYWQsIHNjdHBfdGNiaGFzaCkgeworCQkJaWYgKHN0Y2ItPnJwb3J0ICE9IHJw
b3J0KSB7CisJCQkJLyogcmVtb3RlIHBvcnQgZG9lcyBub3QgbWF0Y2ggKi8KKwkJCQljb250aW51
ZTsKKwkJCX0KKwkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQlpZiAoc3RjYi0+YXNvYy5zdGF0
ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKKwkJCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAobG9jYWwgJiYgIXNjdHBfZG9lc19z
dGNiX293bl90aGlzX2FkZHIoc3RjYiwgbG9jYWwpKSB7CisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0
Y2IpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJLyogbm93IGxvb2sgYXQgdGhlIGxpc3Qgb2Yg
cmVtb3RlIGFkZHJlc3NlcyAqLworCQkJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5l
dHMsIHNjdHBfbmV4dCkgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJCQlpZiAobmV0ID09IChUQUlM
UV9ORVhUKG5ldCwgc2N0cF9uZXh0KSkpIHsKKwkJCQkJcGFuaWMoIkNvcnJ1cHQgbmV0IGxpc3Qi
KTsKKwkJCQl9CisjZW5kaWYKKwkJCQlpZiAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSAh
PQorCQkJCSAgICByZW1vdGUtPnNhX2ZhbWlseSkgeworCQkJCQkvKiBub3QgdGhlIHNhbWUgZmFt
aWx5ICovCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlzd2l0Y2ggKHJlbW90ZS0+c2FfZmFt
aWx5KSB7CisjaWZkZWYgSU5FVAorCQkJCWNhc2UgQUZfSU5FVDoKKwkJCQl7CisJCQkJCXN0cnVj
dCBzb2NrYWRkcl9pbiAqc2luLCAqcnNpbjsKKworCQkJCQlzaW4gPSAoc3RydWN0IHNvY2thZGRy
X2luICopCisJCQkJCSAgICAmbmV0LT5yby5fbF9hZGRyOworCQkJCQlyc2luID0gKHN0cnVjdCBz
b2NrYWRkcl9pbiAqKXJlbW90ZTsKKwkJCQkJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRyID09CisJ
CQkJCSAgICByc2luLT5zaW5fYWRkci5zX2FkZHIpIHsKKwkJCQkJCS8qIGZvdW5kIGl0ICovCisJ
CQkJCQlpZiAobmV0cCAhPSBOVUxMKSB7CisJCQkJCQkJKm5ldHAgPSBuZXQ7CisJCQkJCQl9CisJ
CQkJCQlpZiAobG9ja2VkX3RjYiA9PSBOVUxMKSB7CisJCQkJCQkJU0NUUF9JTlBfREVDUl9SRUYo
aW5wKTsKKwkJCQkJCX0gZWxzZSBpZiAobG9ja2VkX3RjYiAhPSBzdGNiKSB7CisJCQkJCQkJU0NU
UF9UQ0JfTE9DSyhsb2NrZWRfdGNiKTsKKwkJCQkJCX0KKwkJCQkJCWlmIChsb2NrZWRfdGNiKSB7
CisJCQkJCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmbG9ja2VkX3RjYi0+YXNvYy5yZWZjbnQsIDEp
OworCQkJCQkJfQorCQkJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQkJCQkJU0NUUF9JTlBf
SU5GT19SVU5MT0NLKCk7CisJCQkJCQlyZXR1cm4gKHN0Y2IpOworCQkJCQl9CisJCQkJCWJyZWFr
OworCQkJCX0KKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQl7
CisJCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYsICpyc2luNjsKKworCQkJCQlzaW42ID0g
KHN0cnVjdCBzb2NrYWRkcl9pbjYgKikKKwkJCQkJICAgICZuZXQtPnJvLl9sX2FkZHI7CisJCQkJ
CXJzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilyZW1vdGU7CisJCQkJCWlmIChTQ1RQNl9B
UkVfQUREUl9FUVVBTChzaW42LAorCQkJCQkgICAgcnNpbjYpKSB7CisJCQkJCQkvKiBmb3VuZCBp
dCAqLworCQkJCQkJaWYgKG5ldHAgIT0gTlVMTCkgeworCQkJCQkJCSpuZXRwID0gbmV0OworCQkJ
CQkJfQorCQkJCQkJaWYgKGxvY2tlZF90Y2IgPT0gTlVMTCkgeworCQkJCQkJCVNDVFBfSU5QX0RF
Q1JfUkVGKGlucCk7CisJCQkJCQl9IGVsc2UgaWYgKGxvY2tlZF90Y2IgIT0gc3RjYikgeworCQkJ
CQkJCVNDVFBfVENCX0xPQ0sobG9ja2VkX3RjYik7CisJCQkJCQl9CisJCQkJCQlpZiAobG9ja2Vk
X3RjYikgeworCQkJCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJmxvY2tlZF90Y2ItPmFzb2MucmVm
Y250LCAxKTsKKwkJCQkJCX0KKwkJCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCQkJCVND
VFBfSU5QX0lORk9fUlVOTE9DSygpOworCQkJCQkJcmV0dXJuIChzdGNiKTsKKwkJCQkJfQorCQkJ
CQlicmVhazsKKwkJCQl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJ
Y2FzZSBBRl9DT05OOgorCQkJCXsKKwkJCQkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uLCAq
cnNjb25uOworCisJCQkJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopJm5ldC0+cm8u
X2xfYWRkcjsKKwkJCQkJcnNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopcmVtb3RlOwor
CQkJCQlpZiAoc2Nvbm4tPnNjb25uX2FkZHIgPT0gcnNjb25uLT5zY29ubl9hZGRyKSB7CisJCQkJ
CQkvKiBmb3VuZCBpdCAqLworCQkJCQkJaWYgKG5ldHAgIT0gTlVMTCkgeworCQkJCQkJCSpuZXRw
ID0gbmV0OworCQkJCQkJfQorCQkJCQkJaWYgKGxvY2tlZF90Y2IgPT0gTlVMTCkgeworCQkJCQkJ
CVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQkJCQl9IGVsc2UgaWYgKGxvY2tlZF90Y2IgIT0g
c3RjYikgeworCQkJCQkJCVNDVFBfVENCX0xPQ0sobG9ja2VkX3RjYik7CisJCQkJCQl9CisJCQkJ
CQlpZiAobG9ja2VkX3RjYikgeworCQkJCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJmxvY2tlZF90
Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCQkJCX0KKwkJCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5w
KTsKKwkJCQkJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOworCQkJCQkJcmV0dXJuIChzdGNiKTsK
KwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisjZW5kaWYKKwkJCQlkZWZhdWx0OgorCQkJCQkv
KiBUU05IICovCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCVNDVFBfVENCX1VOTE9DSyhz
dGNiKTsKKwkJfQorCX0KK251bGxfcmV0dXJuOgorCS8qIGNsZWFuIHVwIGZvciByZXR1cm5pbmcg
bnVsbCAqLworCWlmIChsb2NrZWRfdGNiKSB7CisJCVNDVFBfVENCX0xPQ0sobG9ja2VkX3RjYik7
CisJCWF0b21pY19zdWJ0cmFjdF9pbnQoJmxvY2tlZF90Y2ItPmFzb2MucmVmY250LCAxKTsKKwl9
CisJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOworCS8q
IG5vdCBmb3VuZCAqLworCXJldHVybiAoTlVMTCk7Cit9CisKKy8qCisgKiBGaW5kIGFuIGFzc29j
aWF0aW9uIGZvciBhIHNwZWNpZmljIGVuZHBvaW50IHVzaW5nIHRoZSBhc3NvY2lhdGlvbiBpZCBn
aXZlbgorICogb3V0IGluIHRoZSBDT01NX1VQIG5vdGlmaWNhdGlvbgorICovCitzdHJ1Y3Qgc2N0
cF90Y2IgKgorc2N0cF9maW5kYXNvY19lcF9hc29jaWRfbG9ja2VkKHN0cnVjdCBzY3RwX2lucGNi
ICppbnAsIHNjdHBfYXNzb2NfdCBhc29jX2lkLCBpbnQgd2FudF9sb2NrKQoreworCS8qCisJICog
VXNlIG15IHRoZSBhc3NvY19pZCB0byBmaW5kIGEgZW5kcG9pbnQKKwkgKi8KKwlzdHJ1Y3Qgc2N0
cGFzb2NoZWFkICpoZWFkOworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKKwl1aW50MzJfdCBpZDsK
KworCWlmIChpbnAgPT0gTlVMTCkgeworCQlTQ1RQX1BSSU5URigiVFNOSCBlcF9hc3NvY2lkXG4i
KTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX1NPQ0tFVF9BTExHT05FKSB7CisJCVNDVFBfUFJJTlRGKCJUU05IIGVwX2Fzc29jaWQw
XG4iKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWQgPSAodWludDMyX3QpYXNvY19pZDsKKwlo
ZWFkID0gJmlucC0+c2N0cF9hc29jaWRoYXNoW1NDVFBfUENCSEFTSF9BU09DKGlkLCBpbnAtPmhh
c2hhc29jaWRtYXJrKV07CisJaWYgKGhlYWQgPT0gTlVMTCkgeworCQkvKiBpbnZhbGlkIGlkIFRT
TkggKi8KKwkJU0NUUF9QUklOVEYoIlRTTkggZXBfYXNzb2NpZDFcbiIpOworCQlyZXR1cm4gKE5V
TEwpOworCX0KKwlMSVNUX0ZPUkVBQ0goc3RjYiwgaGVhZCwgc2N0cF90Y2Jhc29jaWRoYXNoKSB7
CisJCWlmIChzdGNiLT5hc29jLmFzc29jX2lkID09IGlkKSB7CisJCQlpZiAoaW5wICE9IHN0Y2It
PnNjdHBfZXApIHsKKwkJCQkvKgorCQkJCSAqIHNvbWUgb3RoZXIgZ3V5IGhhcyB0aGUgc2FtZSBp
ZCBhY3RpdmUgKGlkCisJCQkJICogY29sbGlzaW9uID8/KS4KKwkJCQkgKi8KKwkJCQlTQ1RQX1BS
SU5URigiVFNOSCBlcF9hc3NvY2lkMlxuIik7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAo
c3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKKwkJCQlj
b250aW51ZTsKKwkJCX0KKwkJCWlmICh3YW50X2xvY2spIHsKKwkJCQlTQ1RQX1RDQl9MT0NLKHN0
Y2IpOworCQkJfQorCQkJcmV0dXJuIChzdGNiKTsKKwkJfQorCX0KKwlyZXR1cm4gKE5VTEwpOwor
fQorCitzdHJ1Y3Qgc2N0cF90Y2IgKgorc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYXNvY2lkKHN0
cnVjdCBzY3RwX2lucGNiICppbnAsIHNjdHBfYXNzb2NfdCBhc29jX2lkLCBpbnQgd2FudF9sb2Nr
KQoreworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKKworCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJ
c3RjYiA9IHNjdHBfZmluZGFzb2NfZXBfYXNvY2lkX2xvY2tlZChpbnAsIGFzb2NfaWQsIHdhbnRf
bG9jayk7CisJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCXJldHVybiAoc3RjYik7Cit9CisKKy8q
CisgKiBFbmRwb2ludCBwcm9iZSBleHBlY3RzIHRoYXQgdGhlIElOUF9JTkZPIGlzIGxvY2tlZC4K
KyAqLworc3RhdGljIHN0cnVjdCBzY3RwX2lucGNiICoKK3NjdHBfZW5kcG9pbnRfcHJvYmUoc3Ry
dWN0IHNvY2thZGRyICpuYW0sIHN0cnVjdCBzY3RwcGNiaGVhZCAqaGVhZCwKKwkJICAgIHVpbnQx
Nl90IGxwb3J0LCB1aW50MzJfdCB2cmZfaWQpCit7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsK
KwlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7CisjaWZkZWYgSU5FVAorCXN0cnVjdCBzb2NrYWRk
cl9pbiAqc2luOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpz
aW42OworCXN0cnVjdCBzb2NrYWRkcl9pbjYgKmludGZfYWRkcjY7CisjZW5kaWYKKyNpZiBkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCisJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uOworI2VuZGlm
CisjaWZkZWYgU0NUUF9NVlJGCisJaW50IGk7CisjZW5kaWYKKwlpbnQgIGZuZDsKKworI2lmZGVm
IElORVQKKwlzaW4gPSBOVUxMOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwlzaW42ID0gTlVMTDsK
KyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlzY29ubiA9IE5VTEw7CisjZW5k
aWYKKwlzd2l0Y2ggKG5hbS0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5F
VDoKKwkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKW5hbTsKKwkJYnJlYWs7CisjZW5kaWYK
KyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRy
X2luNiAqKW5hbTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisJY2FzZSBBRl9DT05OOgorCQlzY29ubiA9IChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKW5hbTsK
KwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQkvKiB1bnN1cHBvcnRlZCBmYW1pbHkgKi8K
KwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwlpZiAoaGVhZCA9PSBOVUxMKQorCQlyZXR1cm4gKE5V
TEwpOworCisJTElTVF9GT1JFQUNIKGlucCwgaGVhZCwgc2N0cF9oYXNoKSB7CisJCVNDVFBfSU5Q
X1JMT0NLKGlucCk7CisJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NL
RVRfQUxMR09ORSkgeworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJY29udGludWU7CisJ
CX0KKwkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgJiYK
KwkJICAgIChpbnAtPnNjdHBfbHBvcnQgPT0gbHBvcnQpKSB7CisJCQkvKiBnb3QgaXQgKi8KKwkJ
CXN3aXRjaCAobmFtLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQljYXNlIEFGX0lORVQ6
CisJCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgJiYK
KwkJCQkgICAgU0NUUF9JUFY2X1Y2T05MWShpbnApKSB7CisJCQkJCS8qIElQdjQgb24gYSBJUHY2
IHNvY2tldCB3aXRoIE9OTFkgSVB2NiBzZXQgKi8KKwkJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnAp
OworCQkJCQljb250aW51ZTsKKwkJCQl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQlpZiAocHJpc29uX2NoZWNrX2lwNChpbnAtPmlwX2lu
cC5pbnAuaW5wX2NyZWQsCisJCQkJICAgICAgICAgICAgICAgICAgICAgJnNpbi0+c2luX2FkZHIp
ICE9IDApIHsKKwkJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJCQljb250aW51ZTsKKwkJ
CQl9CisjZW5kaWYKKwkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQljYXNlIEFG
X0lORVQ2OgorCQkJCS8qIEEgVjYgYWRkcmVzcyBhbmQgdGhlIGVuZHBvaW50IGlzIE5PVCBib3Vu
ZCBWNiAqLworCQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRf
VjYpID09IDApIHsKKwkJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJCQljb250aW51ZTsK
KwkJCQl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwkJCQlpZiAocHJpc29uX2NoZWNrX2lwNihpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJ
CQkJICAgICAgICAgICAgICAgICAgICAgJnNpbjYtPnNpbjZfYWRkcikgIT0gMCkgeworCQkJCQlT
Q1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKyNlbmRpZgorCQkJ
CWJyZWFrOworI2VuZGlmCisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQkJLyogZG9l
cyBhIFZSRiBpZCBtYXRjaD8gKi8KKwkJCWZuZCA9IDA7CisjaWZkZWYgU0NUUF9NVlJGCisJCQlm
b3IgKGkgPSAwOyBpIDwgaW5wLT5udW1fdnJmczsgaSsrKSB7CisJCQkJaWYgKGlucC0+bV92cmZf
aWRzW2ldID09IHZyZl9pZCkgeworCQkJCQlmbmQgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJ
CQl9CisjZWxzZQorCQkJaWYgKGlucC0+ZGVmX3ZyZl9pZCA9PSB2cmZfaWQpCisJCQkJZm5kID0g
MTsKKyNlbmRpZgorCisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQlpZiAoIWZuZCkKKwkJ
CQljb250aW51ZTsKKwkJCXJldHVybiAoaW5wKTsKKwkJfQorCQlTQ1RQX0lOUF9SVU5MT0NLKGlu
cCk7CisJfQorCXN3aXRjaCAobmFtLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJY2FzZSBB
Rl9JTkVUOgorCQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSkgeworCQkJ
LyogQ2FuJ3QgaHVudCBmb3Igb25lIHRoYXQgaGFzIG5vIGFkZHJlc3Mgc3BlY2lmaWVkICovCisJ
CQlyZXR1cm4gKE5VTEwpOworCQl9CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwlj
YXNlIEFGX0lORVQ2OgorCQlpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZf
YWRkcikpIHsKKwkJCS8qIENhbid0IGh1bnQgZm9yIG9uZSB0aGF0IGhhcyBubyBhZGRyZXNzIHNw
ZWNpZmllZCAqLworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQlicmVhazsKKyNlbmRpZgorI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwljYXNlIEFGX0NPTk46CisJCWlmIChzY29ubi0+c2Nv
bm5fYWRkciA9PSBOVUxMKSB7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCWJyZWFrOworI2Vu
ZGlmCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCS8qCisJICogb2ssIG5vdCBib3VuZCB0byBh
bGwgc28gc2VlIGlmIHdlIGNhbiBmaW5kIGEgRVAgYm91bmQgdG8gdGhpcworCSAqIGFkZHJlc3Mu
CisJICovCisJTElTVF9GT1JFQUNIKGlucCwgaGVhZCwgc2N0cF9oYXNoKSB7CisJCVNDVFBfSU5Q
X1JMT0NLKGlucCk7CisJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NL
RVRfQUxMR09ORSkgeworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJY29udGludWU7CisJ
CX0KKwkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkpIHsK
KwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qCisJCSAq
IE9rIHRoaXMgY291bGQgYmUgYSBsaWtlbHkgY2FuZGlkYXRlLCBsb29rIGF0IGFsbCBvZiBpdHMK
KwkJICogYWRkcmVzc2VzCisJCSAqLworCQlpZiAoaW5wLT5zY3RwX2xwb3J0ICE9IGxwb3J0KSB7
CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQljb250aW51ZTsKKwkJfQorCQkvKiBkb2Vz
IGEgVlJGIGlkIG1hdGNoPyAqLworCQlmbmQgPSAwOworI2lmZGVmIFNDVFBfTVZSRgorCQlmb3Ig
KGkgPSAwOyBpIDwgaW5wLT5udW1fdnJmczsgaSsrKSB7CisJCQlpZiAoaW5wLT5tX3ZyZl9pZHNb
aV0gPT0gdnJmX2lkKSB7CisJCQkJZm5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorI2Vs
c2UKKwkJaWYgKGlucC0+ZGVmX3ZyZl9pZCA9PSB2cmZfaWQpCisJCQlmbmQgPSAxOworCisjZW5k
aWYKKwkJaWYgKCFmbmQpIHsKKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCWNvbnRpbnVl
OworCQl9CisJCUxJU1RfRk9SRUFDSChsYWRkciwgJmlucC0+c2N0cF9hZGRyX2xpc3QsIHNjdHBf
bnh0X2FkZHIpIHsKKwkJCWlmIChsYWRkci0+aWZhID09IE5VTEwpIHsKKwkJCQlTQ1RQREJHKFND
VFBfREVCVUdfUENCMSwgIiVzOiBOVUxMIGlmYVxuIiwKKwkJCQkJX19mdW5jX18pOworCQkJCWNv
bnRpbnVlOworCQkJfQorCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjEsICJPayBsYWRkci0+aWZh
OiVwIGlzIHBvc3NpYmxlLCAiLAorCQkJCSh2b2lkICopbGFkZHItPmlmYSk7CisJCQlpZiAobGFk
ZHItPmlmYS0+bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0JFSU5HX0RFTEVURUQpIHsKKwkJCQlTQ1RQ
REJHKFNDVFBfREVCVUdfUENCMSwgIkh1aCBJRkEgYmVpbmcgZGVsZXRlZFxuIik7CisJCQkJY29u
dGludWU7CisJCQl9CisJCQlpZiAobGFkZHItPmlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0g
bmFtLT5zYV9mYW1pbHkpIHsKKwkJCQkvKiBwb3NzaWJsZSwgc2VlIGlmIGl0IG1hdGNoZXMgKi8K
KwkJCQlzd2l0Y2ggKG5hbS0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQkJCWNhc2UgQUZf
SU5FVDoKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KwkJCQkJaWYgKHNpbiA9PSBOVUxMKSB7CisJCQkJCQkvKiBUU05IICovCisJCQkJCQlicmVhazsK
KwkJCQkJfQorI2VuZGlmCisJCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PQorCQkJCQkg
ICAgbGFkZHItPmlmYS0+YWRkcmVzcy5zaW4uc2luX2FkZHIuc19hZGRyKSB7CisJCQkJCQlTQ1RQ
X0lOUF9SVU5MT0NLKGlucCk7CisJCQkJCQlyZXR1cm4gKGlucCk7CisJCQkJCX0KKwkJCQkJYnJl
YWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJCWNhc2UgQUZfSU5FVDY6CisJCQkJCWludGZf
YWRkcjYgPSAmbGFkZHItPmlmYS0+YWRkcmVzcy5zaW42OworCQkJCQlpZiAoU0NUUDZfQVJFX0FE
RFJfRVFVQUwoc2luNiwKKwkJCQkJICAgIGludGZfYWRkcjYpKSB7CisJCQkJCQlTQ1RQX0lOUF9S
VU5MT0NLKGlucCk7CisJCQkJCQlyZXR1cm4gKGlucCk7CisJCQkJCX0KKwkJCQkJYnJlYWs7Cisj
ZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJY2FzZSBBRl9DT05OOgorCQkJ
CQlpZiAoc2Nvbm4tPnNjb25uX2FkZHIgPT0gbGFkZHItPmlmYS0+YWRkcmVzcy5zY29ubi5zY29u
bl9hZGRyKSB7CisJCQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQkJCQlyZXR1cm4gKGlu
cCk7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisjZW5kaWYKKwkJCQl9CisJCQl9CisJCX0KKwkJU0NU
UF9JTlBfUlVOTE9DSyhpbnApOworCX0KKwlyZXR1cm4gKE5VTEwpOworfQorCitzdGF0aWMgc3Ry
dWN0IHNjdHBfaW5wY2IgKgorc2N0cF9pc3BvcnRfaW51c2Uoc3RydWN0IHNjdHBfaW5wY2IgKmlu
cCwgdWludDE2X3QgbHBvcnQsIHVpbnQzMl90IHZyZl9pZCkKK3sKKwlzdHJ1Y3Qgc2N0cHBjYmhl
YWQgKmhlYWQ7CisJc3RydWN0IHNjdHBfaW5wY2IgKnRfaW5wOworI2lmZGVmIFNDVFBfTVZSRgor
CWludCBpOworI2VuZGlmCisJaW50IGZuZDsKKworCWhlYWQgPSAmU0NUUF9CQVNFX0lORk8oc2N0
cF9lcGhhc2gpW1NDVFBfUENCSEFTSF9BTExBRERSKGxwb3J0LAorCSAgICBTQ1RQX0JBU0VfSU5G
TyhoYXNobWFyaykpXTsKKwlMSVNUX0ZPUkVBQ0godF9pbnAsIGhlYWQsIHNjdHBfaGFzaCkgewor
CQlpZiAodF9pbnAtPnNjdHBfbHBvcnQgIT0gbHBvcnQpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJ
CS8qIGlzIGl0IGluIHRoZSBWUkYgaW4gcXVlc3Rpb24gKi8KKwkJZm5kID0gMDsKKyNpZmRlZiBT
Q1RQX01WUkYKKwkJZm9yIChpID0gMDsgaSA8IGlucC0+bnVtX3ZyZnM7IGkrKykgeworCQkJaWYg
KHRfaW5wLT5tX3ZyZl9pZHNbaV0gPT0gdnJmX2lkKSB7CisJCQkJZm5kID0gMTsKKwkJCQlicmVh
azsKKwkJCX0KKwkJfQorI2Vsc2UKKwkJaWYgKHRfaW5wLT5kZWZfdnJmX2lkID09IHZyZl9pZCkK
KwkJCWZuZCA9IDE7CisjZW5kaWYKKwkJaWYgKCFmbmQpCisJCQljb250aW51ZTsKKworCQkvKiBU
aGlzIG9uZSBpcyBpbiB1c2UuICovCisJCS8qIGNoZWNrIHRoZSB2Ni92NCBiaW5kaW5nIGlzc3Vl
ICovCisJCWlmICgodF9pbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikg
JiYKKwkJICAgIFNDVFBfSVBWNl9WNk9OTFkodF9pbnApKSB7CisJCQlpZiAoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpIHsKKwkJCQkvKiBjb2xsaXNpb24gaW4gVjYg
c3BhY2UgKi8KKwkJCQlyZXR1cm4gKHRfaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogaW5wIGlz
IEJPVU5EX1Y0IG5vIGNvbmZsaWN0ICovCisJCQkJY29udGludWU7CisJCQl9CisJCX0gZWxzZSBp
ZiAodF9pbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgeworCQkJLyog
dF9pbnAgaXMgYm91bmQgdjQgYW5kIHY2LCBjb25mbGljdCBhbHdheXMgKi8KKwkJCXJldHVybiAo
dF9pbnApOworCQl9IGVsc2UgeworCQkJLyogdF9pbnAgaXMgYm91bmQgb25seSBWNCAqLworCQkJ
aWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgJiYKKwkJCSAg
ICBTQ1RQX0lQVjZfVjZPTkxZKGlucCkpIHsKKwkJCQkvKiBubyBjb25mbGljdCAqLworCQkJCWNv
bnRpbnVlOworCQkJfQorCQkJLyogZWxzZSBmYWxsIHRocm91Z2ggdG8gY29uZmxpY3QgKi8KKwkJ
fQorCQlyZXR1cm4gKHRfaW5wKTsKKwl9CisJcmV0dXJuIChOVUxMKTsKK30KKworaW50CitzY3Rw
X3N3YXBfaW5wY2JfZm9yX2xpc3RlbihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wKQoreworCS8qIEZv
ciAxLTItMSB3aXRoIHBvcnQgcmV1c2UgKi8KKwlzdHJ1Y3Qgc2N0cHBjYmhlYWQgKmhlYWQ7CisJ
c3RydWN0IHNjdHBfaW5wY2IgKnRpbnAsICpuaW5wOworCisJaWYgKHNjdHBfaXNfZmVhdHVyZV9v
ZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19QT1JUUkVVU0UpKSB7CisJCS8qIG9ubHkgd29ya3Mgd2l0
aCBwb3J0IHJldXNlIG9uICovCisJCXJldHVybiAoLTEpOworCX0KKwlpZiAoKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpID09IDApIHsKKwkJcmV0dXJuICgwKTsK
Kwl9CisJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCVNDVFBfSU5QX0lORk9fV0xPQ0soKTsKKwlo
ZWFkID0gJlNDVFBfQkFTRV9JTkZPKHNjdHBfZXBoYXNoKVtTQ1RQX1BDQkhBU0hfQUxMQUREUihp
bnAtPnNjdHBfbHBvcnQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NU
UF9CQVNFX0lORk8oaGFzaG1hcmspKV07CisJLyogS2ljayBvdXQgYWxsIG5vbi1saXN0ZW5lcnMg
dG8gdGhlIFRDUCBoYXNoICovCisJTElTVF9GT1JFQUNIX1NBRkUodGlucCwgaGVhZCwgc2N0cF9o
YXNoLCBuaW5wKSB7CisJCWlmICh0aW5wLT5zY3RwX2xwb3J0ICE9IGlucC0+c2N0cF9scG9ydCkg
eworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHRpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19TT0NLRVRfQUxMR09ORSkgeworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHRpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgeworCQkJY29udGludWU7CisJ
CX0KKwkJaWYgKFNDVFBfSVNfTElTVEVOSU5HKHRpbnApKSB7CisJCQljb250aW51ZTsKKwkJfQor
CQlTQ1RQX0lOUF9XTE9DSyh0aW5wKTsKKwkJTElTVF9SRU1PVkUodGlucCwgc2N0cF9oYXNoKTsK
KwkJaGVhZCA9ICZTQ1RQX0JBU0VfSU5GTyhzY3RwX3RjcGVwaGFzaClbU0NUUF9QQ0JIQVNIX0FM
TEFERFIodGlucC0+c2N0cF9scG9ydCwgU0NUUF9CQVNFX0lORk8oaGFzaHRjcG1hcmspKV07CisJ
CXRpbnAtPnNjdHBfZmxhZ3MgfD0gU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTDsKKwkJTElTVF9J
TlNFUlRfSEVBRChoZWFkLCB0aW5wLCBzY3RwX2hhc2gpOworCQlTQ1RQX0lOUF9XVU5MT0NLKHRp
bnApOworCX0KKwlTQ1RQX0lOUF9XTE9DSyhpbnApOworCS8qIFB1bGwgZnJvbSB3aGVyZSBoZSB3
YXMgKi8KKwlMSVNUX1JFTU9WRShpbnAsIHNjdHBfaGFzaCk7CisJaW5wLT5zY3RwX2ZsYWdzICY9
IH5TQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MOworCWhlYWQgPSAmU0NUUF9CQVNFX0lORk8oc2N0
cF9lcGhhc2gpW1NDVFBfUENCSEFTSF9BTExBRERSKGlucC0+c2N0cF9scG9ydCwgU0NUUF9CQVNF
X0lORk8oaGFzaG1hcmspKV07CisJTElTVF9JTlNFUlRfSEVBRChoZWFkLCBpbnAsIHNjdHBfaGFz
aCk7CisJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJU0NU
UF9JTlBfSU5GT19XVU5MT0NLKCk7CisJcmV0dXJuICgwKTsKK30KKworc3RydWN0IHNjdHBfaW5w
Y2IgKgorc2N0cF9wY2JfZmluZGVwKHN0cnVjdCBzb2NrYWRkciAqbmFtLCBpbnQgZmluZF90Y3Bf
cG9vbCwgaW50IGhhdmVfbG9jaywKKwkJdWludDMyX3QgdnJmX2lkKQoreworCS8qCisJICogRmly
c3Qgd2UgY2hlY2sgdGhlIGhhc2ggdGFibGUgdG8gc2VlIGlmIHNvbWVvbmUgaGFzIHRoaXMgcG9y
dAorCSAqIGJvdW5kIHdpdGgganVzdCB0aGUgcG9ydC4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF9pbnBj
YiAqaW5wOworCXN0cnVjdCBzY3RwcGNiaGVhZCAqaGVhZDsKKwlpbnQgbHBvcnQ7CisJdW5zaWdu
ZWQgaW50IGk7CisjaWZkZWYgSU5FVAorCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworI2VuZGlm
CisjaWZkZWYgSU5FVDYKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworI2VuZGlmCisjaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsKKyNl
bmRpZgorCisJc3dpdGNoIChuYW0tPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwljYXNlIEFG
X0lORVQ6CisJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKiluYW07CisJCWxwb3J0ID0gc2lu
LT5zaW5fcG9ydDsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5F
VDY6CisJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKW5hbTsKKwkJbHBvcnQgPSBzaW42
LT5zaW42X3BvcnQ7CisJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorCWNhc2UgQUZfQ09OTjoKKwkJc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKiluYW07
CisJCWxwb3J0ID0gc2Nvbm4tPnNjb25uX3BvcnQ7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVs
dDoKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJLyoKKwkgKiBJIGNvdWxkIGNoZWF0IGhlcmUgYW5k
IGp1c3QgY2FzdCB0byBvbmUgb2YgdGhlIHR5cGVzIGJ1dCB3ZSB3aWxsCisJICogZG8gaXQgcmln
aHQuIEl0IGFsc28gcHJvdmlkZXMgdGhlIGNoZWNrIGFnYWluc3QgYW4gVW5zdXBwb3J0ZWQKKwkg
KiB0eXBlIHRvby4KKwkgKi8KKwkvKiBGaW5kIHRoZSBoZWFkIG9mIHRoZSBBTExBRERSIGNoYWlu
ICovCisJaWYgKGhhdmVfbG9jayA9PSAwKSB7CisJCVNDVFBfSU5QX0lORk9fUkxPQ0soKTsKKwl9
CisJaGVhZCA9ICZTQ1RQX0JBU0VfSU5GTyhzY3RwX2VwaGFzaClbU0NUUF9QQ0JIQVNIX0FMTEFE
RFIobHBvcnQsCisJICAgIFNDVFBfQkFTRV9JTkZPKGhhc2htYXJrKSldOworCWlucCA9IHNjdHBf
ZW5kcG9pbnRfcHJvYmUobmFtLCBoZWFkLCBscG9ydCwgdnJmX2lkKTsKKworCS8qCisJICogSWYg
dGhlIFRDUCBtb2RlbCBleGlzdHMgaXQgY291bGQgYmUgdGhhdCB0aGUgbWFpbiBsaXN0ZW5pbmcK
KwkgKiBlbmRwb2ludCBpcyBnb25lIGJ1dCB0aGVyZSBzdGlsbCBleGlzdHMgYSBjb25uZWN0ZWQg
c29ja2V0IGZvciB0aGlzCisJICogZ3V5LiBJZiBzbyB3ZSBjYW4gcmV0dXJuIHRoZSBmaXJzdCBv
bmUgdGhhdCB3ZSBmaW5kLiBUaGlzIG1heSBOT1QKKwkgKiBiZSB0aGUgY29ycmVjdCBvbmUgc28g
dGhlIGNhbGxlciBzaG91bGQgYmUgd2FyeSBvbiB0aGUgcmV0dXJuZWQgSU5QLgorCSAqIEN1cnJl
bnRseSB0aGUgb25seSBjYWxsZXIgdGhhdCBzZXRzIGZpbmRfdGNwX3Bvb2wgaXMgaW4gYmluZHgg
d2hlcmUKKwkgKiB3ZSBhcmUgdmVyaWZ5aW5nIHRoYXQgYSB1c2VyIENBTiBiaW5kIHRoZSBhZGRy
ZXNzLiBIZSBlaXRoZXIKKwkgKiBoYXMgYm91bmQgaXQgYWxyZWFkeSwgb3Igc29tZW9uZSBlbHNl
IGhhcywgb3IgaXRzIG9wZW4gdG8gYmluZCwKKwkgKiBzbyB0aGlzIGlzIGdvb2QgZW5vdWdoLgor
CSAqLworCWlmIChpbnAgPT0gTlVMTCAmJiBmaW5kX3RjcF9wb29sKSB7CisJCWZvciAoaSA9IDA7
IGkgPCBTQ1RQX0JBU0VfSU5GTyhoYXNodGNwbWFyaykgKyAxOyBpKyspIHsKKwkJCWhlYWQgPSAm
U0NUUF9CQVNFX0lORk8oc2N0cF90Y3BlcGhhc2gpW2ldOworCQkJaW5wID0gc2N0cF9lbmRwb2lu
dF9wcm9iZShuYW0sIGhlYWQsIGxwb3J0LCB2cmZfaWQpOworCQkJaWYgKGlucCkgeworCQkJCWJy
ZWFrOworCQkJfQorCQl9CisJfQorCWlmIChpbnApIHsKKwkJU0NUUF9JTlBfSU5DUl9SRUYoaW5w
KTsKKwl9CisJaWYgKGhhdmVfbG9jayA9PSAwKSB7CisJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygp
OworCX0KKwlyZXR1cm4gKGlucCk7Cit9CisKKy8qCisgKiBGaW5kIGFuIGFzc29jaWF0aW9uIGZv
ciBhbiBlbmRwb2ludCB3aXRoIHRoZSBwb2ludGVyIHRvIHdob20geW91IHdhbnQgdG8KKyAqIHNl
bmQgdG8gYW5kIHRoZSBlbmRwb2ludCBwb2ludGVyLiBUaGUgYWRkcmVzcyBjYW4gYmUgSVB2NCBv
ciBJUHY2LiBXZSBtYXkKKyAqIG5lZWQgdG8gY2hhbmdlIHRoZSAqdG8gdG8gc29tZSBvdGhlciBz
dHJ1Y3QgbGlrZSBhIG1idWYuLi4KKyAqLworc3RydWN0IHNjdHBfdGNiICoKK3NjdHBfZmluZGFz
c29jaWF0aW9uX2FkZHJfc2Eoc3RydWN0IHNvY2thZGRyICpmcm9tLCBzdHJ1Y3Qgc29ja2FkZHIg
KnRvLAorICAgIHN0cnVjdCBzY3RwX2lucGNiICoqaW5wX3AsIHN0cnVjdCBzY3RwX25ldHMgKipu
ZXRwLCBpbnQgZmluZF90Y3BfcG9vbCwKKyAgICB1aW50MzJfdCB2cmZfaWQpCit7CisJc3RydWN0
IHNjdHBfaW5wY2IgKmlucCA9IE5VTEw7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCisJU0NU
UF9JTlBfSU5GT19STE9DSygpOworCWlmIChmaW5kX3RjcF9wb29sKSB7CisJCWlmIChpbnBfcCAh
PSBOVUxMKSB7CisJCQlzdGNiID0gc2N0cF90Y2Jfc3BlY2lhbF9sb2NhdGUoaW5wX3AsIGZyb20s
IHRvLCBuZXRwLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCk7CisJ
CX0gZWxzZSB7CisJCQlzdGNiID0gc2N0cF90Y2Jfc3BlY2lhbF9sb2NhdGUoJmlucCwgZnJvbSwg
dG8sIG5ldHAsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lkKTsKKwkJ
fQorCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKwkJ
CXJldHVybiAoc3RjYik7CisJCX0KKwl9CisJaW5wID0gc2N0cF9wY2JfZmluZGVwKHRvLCAwLCAx
LCB2cmZfaWQpOworCWlmIChpbnBfcCAhPSBOVUxMKSB7CisJCSppbnBfcCA9IGlucDsKKwl9CisJ
U0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7CisJaWYgKGlucCA9PSBOVUxMKSB7CisJCXJldHVybiAo
TlVMTCk7CisJfQorCS8qCisJICogb2ssIHdlIGhhdmUgYW4gZW5kcG9pbnQsIG5vdyBsZXRzIGZp
bmQgdGhlIGFzc29jIGZvciBpdCAoaWYgYW55KQorCSAqIHdlIG5vdyBwbGFjZSB0aGUgc291cmNl
IGFkZHJlc3Mgb3IgZnJvbSBpbiB0aGUgdG8gb2YgdGhlIGZpbmQKKwkgKiBlbmRwb2ludCBjYWxs
LiBTaW5jZSBpbiByZWFsaXR5IHRoaXMgY2hhaW4gaXMgdXNlZCBmcm9tIHRoZQorCSAqIGluYm91
bmQgcGFja2V0IHNpZGUuCisJICovCisJaWYgKGlucF9wICE9IE5VTEwpIHsKKwkJc3RjYiA9IHNj
dHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoaW5wX3AsIGZyb20sIG5ldHAsIHRvLAorCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKwl9IGVsc2UgeworCQlzdGNi
ID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigmaW5wLCBmcm9tLCBuZXRwLCB0bywKKwkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisJfQorCXJldHVybiAo
c3RjYik7Cit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgd2lsbCBncnViIHRocm91Z2ggdGhlIG1i
dWYgdGhhdCBpcyBhIElOSVQgb3IgSU5JVC1BQ0sgYW5kCisgKiBmaW5kIGFsbCBhZGRyZXNzZXMg
dGhhdCB0aGUgc2VuZGVyIGhhcyBzcGVjaWZpZWQgaW4gYW55IGFkZHJlc3MgbGlzdC4gRWFjaAor
ICogYWRkcmVzcyB3aWxsIGJlIHVzZWQgdG8gbG9va3VwIHRoZSBUQ0IgYW5kIHNlZSBpZiBvbmUg
ZXhpdHMuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2N0cF90Y2IgKgorc2N0cF9maW5kYXNzb2NpYXRp
b25fc3BlY2lhbF9hZGRyKHN0cnVjdCBtYnVmICptLCBpbnQgb2Zmc2V0LAorICAgIHN0cnVjdCBz
Y3RwaGRyICpzaCwgc3RydWN0IHNjdHBfaW5wY2IgKippbnBfcCwgc3RydWN0IHNjdHBfbmV0cyAq
Km5ldHAsCisgICAgc3RydWN0IHNvY2thZGRyICpkc3QpCit7CisJc3RydWN0IHNjdHBfcGFyYW1o
ZHIgKnBoZHIsIHBhcmFtX2J1ZjsKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYp
CisJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCXVpbnQxNl90IHB0eXBlOworI2VuZGlmCisJdWlu
dDE2X3QgcGxlbjsKKyNpZmRlZiBJTkVUCisJc3RydWN0IHNvY2thZGRyX2luIHNpbjQ7CisjZW5k
aWYKKyNpZmRlZiBJTkVUNgorCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNjsKKyNlbmRpZgorCisj
aWZkZWYgSU5FVAorCW1lbXNldCgmc2luNCwgMCwgc2l6ZW9mKHNpbjQpKTsKKyNpZmRlZiBIQVZF
X1NJTl9MRU4KKwlzaW40LnNpbl9sZW4gPSBzaXplb2Yoc2luNCk7CisjZW5kaWYKKwlzaW40LnNp
bl9mYW1pbHkgPSBBRl9JTkVUOworCXNpbjQuc2luX3BvcnQgPSBzaC0+c3JjX3BvcnQ7CisjZW5k
aWYKKyNpZmRlZiBJTkVUNgorCW1lbXNldCgmc2luNiwgMCwgc2l6ZW9mKHNpbjYpKTsKKyNpZmRl
ZiBIQVZFX1NJTjZfTEVOCisJc2luNi5zaW42X2xlbiA9IHNpemVvZihzaW42KTsKKyNlbmRpZgor
CXNpbjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKwlzaW42LnNpbjZfcG9ydCA9IHNoLT5zcmNf
cG9ydDsKKyNlbmRpZgorCisJb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X2NodW5r
KTsKKworCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwgJnBhcmFtX2J1Ziwg
c2l6ZW9mKHBhcmFtX2J1ZikpOworCXdoaWxlIChwaGRyICE9IE5VTEwpIHsKKwkJLyogbm93IHdl
IG11c3Qgc2VlIGlmIHdlIHdhbnQgdGhlIHBhcmFtZXRlciAqLworI2lmIGRlZmluZWQoSU5FVCkg
fHwgZGVmaW5lZChJTkVUNikKKwkJcHR5cGUgPSBudG9ocyhwaGRyLT5wYXJhbV90eXBlKTsKKyNl
bmRpZgorCQlwbGVuID0gbnRvaHMocGhkci0+cGFyYW1fbGVuZ3RoKTsKKwkJaWYgKHBsZW4gPT0g
MCkgeworCQkJYnJlYWs7CisJCX0KKyNpZmRlZiBJTkVUCisJCWlmIChwdHlwZSA9PSBTQ1RQX0lQ
VjRfQUREUkVTUyAmJgorCQkgICAgcGxlbiA9PSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJf
cGFyYW0pKSB7CisJCQkvKiBHZXQgdGhlIHJlc3Qgb2YgdGhlIGFkZHJlc3MgKi8KKwkJCXN0cnVj
dCBzY3RwX2lwdjRhZGRyX3BhcmFtIGlwNF9wYXJhbSwgKnA0OworCisJCQlwaGRyID0gc2N0cF9n
ZXRfbmV4dF9wYXJhbShtLCBvZmZzZXQsCisJCQkgICAgKHN0cnVjdCBzY3RwX3BhcmFtaGRyICop
JmlwNF9wYXJhbSwgc2l6ZW9mKGlwNF9wYXJhbSkpOworCQkJaWYgKHBoZHIgPT0gTlVMTCkgewor
CQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisJCQlwNCA9IChzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9w
YXJhbSAqKXBoZHI7CisJCQltZW1jcHkoJnNpbjQuc2luX2FkZHIsICZwNC0+YWRkciwgc2l6ZW9m
KHA0LT5hZGRyKSk7CisJCQkvKiBsb29rIGl0IHVwICovCisJCQlzdGNiID0gc2N0cF9maW5kYXNz
b2NpYXRpb25fZXBfYWRkcihpbnBfcCwKKwkJCSAgICAoc3RydWN0IHNvY2thZGRyICopJnNpbjQs
IG5ldHAsIGRzdCwgTlVMTCk7CisJCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCQkJcmV0dXJuIChz
dGNiKTsKKwkJCX0KKwkJfQorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJaWYgKHB0eXBlID09IFND
VFBfSVBWNl9BRERSRVNTICYmCisJCSAgICBwbGVuID09IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY2
YWRkcl9wYXJhbSkpIHsKKwkJCS8qIEdldCB0aGUgcmVzdCBvZiB0aGUgYWRkcmVzcyAqLworCQkJ
c3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gaXA2X3BhcmFtLCAqcDY7CisKKwkJCXBoZHIgPSBz
Y3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwKKwkJCSAgICAoc3RydWN0IHNjdHBfcGFyYW1o
ZHIgKikmaXA2X3BhcmFtLCBzaXplb2YoaXA2X3BhcmFtKSk7CisJCQlpZiAocGhkciA9PSBOVUxM
KSB7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJCXA2ID0gKHN0cnVjdCBzY3RwX2lwdjZh
ZGRyX3BhcmFtICopcGhkcjsKKwkJCW1lbWNweSgmc2luNi5zaW42X2FkZHIsICZwNi0+YWRkciwg
c2l6ZW9mKHA2LT5hZGRyKSk7CisJCQkvKiBsb29rIGl0IHVwICovCisJCQlzdGNiID0gc2N0cF9m
aW5kYXNzb2NpYXRpb25fZXBfYWRkcihpbnBfcCwKKwkJCSAgICAoc3RydWN0IHNvY2thZGRyICop
JnNpbjYsIG5ldHAsIGRzdCwgTlVMTCk7CisJCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCQkJcmV0
dXJuIChzdGNiKTsKKwkJCX0KKwkJfQorI2VuZGlmCisJCW9mZnNldCArPSBTQ1RQX1NJWkUzMihw
bGVuKTsKKwkJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obSwgb2Zmc2V0LCAmcGFyYW1fYnVm
LAorCQkJCQkgICBzaXplb2YocGFyYW1fYnVmKSk7CisJfQorCXJldHVybiAoTlVMTCk7Cit9CisK
K3N0YXRpYyBzdHJ1Y3Qgc2N0cF90Y2IgKgorc2N0cF9maW5kYXNzb2NfYnlfdnRhZyhzdHJ1Y3Qg
c29ja2FkZHIgKmZyb20sIHN0cnVjdCBzb2NrYWRkciAqdG8sIHVpbnQzMl90IHZ0YWcsCisJCSAg
ICAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqKmlucF9wLCBzdHJ1Y3Qgc2N0cF9uZXRzICoqbmV0cCwg
dWludDE2X3QgcnBvcnQsCisJCSAgICAgICB1aW50MTZfdCBscG9ydCwgaW50IHNraXBfc3JjX2No
ZWNrLCB1aW50MzJfdCB2cmZfaWQsIHVpbnQzMl90IHJlbW90ZV90YWcpCit7CisJLyoKKwkgKiBV
c2UgbXkgdnRhZyB0byBoYXNoLiBJZiB3ZSBmaW5kIGl0IHdlIHRoZW4gdmVyaWZ5IHRoZSBzb3Vy
Y2UgYWRkcgorCSAqIGlzIGluIHRoZSBhc3NvYy4gSWYgYWxsIGdvZXMgd2VsbCB3ZSBzYXZlIGEg
Yml0IG9uIHJlYyBvZiBhCisJICogcGFja2V0LgorCSAqLworCXN0cnVjdCBzY3RwYXNvY2hlYWQg
KmhlYWQ7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsK
KyNpZmRlZiBTQ1RQX01WUkYKKwl1bnNpZ25lZCBpbnQgaTsKKyNlbmRpZgorCisJU0NUUF9JTlBf
SU5GT19STE9DSygpOworCWhlYWQgPSAmU0NUUF9CQVNFX0lORk8oc2N0cF9hc29jaGFzaClbU0NU
UF9QQ0JIQVNIX0FTT0ModnRhZywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNDVFBfQkFTRV9JTkZPKGhhc2hhc29jbWFyaykpXTsKKwlM
SVNUX0ZPUkVBQ0goc3RjYiwgaGVhZCwgc2N0cF9hc29jcykgeworCQlTQ1RQX0lOUF9STE9DSyhz
dGNiLT5zY3RwX2VwKTsKKwkJaWYgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19TT0NLRVRfQUxMR09ORSkgeworCQkJU0NUUF9JTlBfUlVOTE9DSyhzdGNiLT5zY3Rw
X2VwKTsKKwkJCWNvbnRpbnVlOworCQl9CisjaWZkZWYgU0NUUF9NVlJGCisJCWZvciAoaSA9IDA7
IGkgPCBzdGNiLT5zY3RwX2VwLT5udW1fdnJmczsgaSsrKSB7CisJCQlpZiAoc3RjYi0+c2N0cF9l
cC0+bV92cmZfaWRzW2ldID09IHZyZl9pZCkgeworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlm
IChpID09IHN0Y2ItPnNjdHBfZXAtPm51bV92cmZzKSB7CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlu
cCk7CisJCQljb250aW51ZTsKKwkJfQorI2Vsc2UKKwkJaWYgKHN0Y2ItPnNjdHBfZXAtPmRlZl92
cmZfaWQgIT0gdnJmX2lkKSB7CisJCQlTQ1RQX0lOUF9SVU5MT0NLKHN0Y2ItPnNjdHBfZXApOwor
CQkJY29udGludWU7CisJCX0KKyNlbmRpZgorCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQlTQ1RQ
X0lOUF9SVU5MT0NLKHN0Y2ItPnNjdHBfZXApOworCQlpZiAoc3RjYi0+YXNvYy5teV92dGFnID09
IHZ0YWcpIHsKKwkJCS8qIGNhbmRpZGF0ZSAqLworCQkJaWYgKHN0Y2ItPnJwb3J0ICE9IHJwb3J0
KSB7CisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJ
aWYgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfbHBvcnQgIT0gbHBvcnQpIHsKKwkJCQlTQ1RQX1RDQl9V
TkxPQ0soc3RjYik7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoc3RjYi0+YXNvYy5zdGF0
ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKKwkJCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7CisJCQkJY29udGludWU7CisJCQl9CisJCQkvKiBSUlM6TmVlZCB0b2FkZHIgY2hlY2sg
aGVyZSAqLworCQkJaWYgKHNjdHBfZG9lc19zdGNiX293bl90aGlzX2FkZHIoc3RjYiwgdG8pID09
IDApIHsKKwkJCSAgICAgICAgLyogRW5kcG9pbnQgZG9lcyBub3Qgb3duIHRoaXMgYWRkcmVzcyAq
LworCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlm
IChyZW1vdGVfdGFnKSB7CisJCQkJLyogSWYgd2UgaGF2ZSBib3RoIHZ0YWdzIHRoYXQncyBhbGwg
d2UgbWF0Y2ggb24gKi8KKwkJCQlpZiAoc3RjYi0+YXNvYy5wZWVyX3Z0YWcgPT0gcmVtb3RlX3Rh
ZykgeworCQkJCQkvKiBJZiBib3RoIHRhZ3MgbWF0Y2ggd2UgY29uc2lkZXIgaXQgY29uY2x1c2l2
ZQorCQkJCQkgKiBhbmQgY2hlY2sgTk8gc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3NlcworCQkJ
CQkgKi8KKwkJCQkJZ290byBjb25jbHVzaXZlOworCQkJCX0KKwkJCX0KKwkJCWlmIChza2lwX3Ny
Y19jaGVjaykgeworCQkJY29uY2x1c2l2ZToKKwkJCSAgICAgICAgaWYgKGZyb20pIHsKKwkJCQkJ
Km5ldHAgPSBzY3RwX2ZpbmRuZXQoc3RjYiwgZnJvbSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJKm5l
dHAgPSBOVUxMOwkvKiB1bmtub3duICovCisJCQkJfQorCQkJCWlmIChpbnBfcCkKKwkJCQkJKmlu
cF9wID0gc3RjYi0+c2N0cF9lcDsKKwkJCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKwkJCQly
ZXR1cm4gKHN0Y2IpOworCQkJfQorCQkJbmV0ID0gc2N0cF9maW5kbmV0KHN0Y2IsIGZyb20pOwor
CQkJaWYgKG5ldCkgeworCQkJCS8qIHllcCBpdHMgaGltLiAqLworCQkJCSpuZXRwID0gbmV0Owor
CQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Z0YWdleHByZXNzKTsKKwkJCQkqaW5wX3AgPSBzdGNi
LT5zY3RwX2VwOworCQkJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOworCQkJCXJldHVybiAoc3Rj
Yik7CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogbm90IGhpbSwgdGhpcyBzaG91bGQgb25s
eSBoYXBwZW4gaW4gcmFyZQorCQkJCSAqIGNhc2VzIHNvIEkgcGVnIGl0LgorCQkJCSAqLworCQkJ
CVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Z0YWdib2d1cyk7CisJCQl9CisJCX0KKwkJU0NUUF9UQ0Jf
VU5MT0NLKHN0Y2IpOworCX0KKwlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKwlyZXR1cm4gKE5V
TEwpOworfQorCisvKgorICogRmluZCBhbiBhc3NvY2lhdGlvbiB3aXRoIHRoZSBwb2ludGVyIHRv
IHRoZSBpbmJvdW5kIElQIHBhY2tldC4gVGhpcyBjYW4gYmUKKyAqIGEgSVB2NCBvciBJUHY2IHBh
Y2tldC4KKyAqLworc3RydWN0IHNjdHBfdGNiICoKK3NjdHBfZmluZGFzc29jaWF0aW9uX2FkZHIo
c3RydWN0IG1idWYgKm0sIGludCBvZmZzZXQsCisgICAgc3RydWN0IHNvY2thZGRyICpzcmMsIHN0
cnVjdCBzb2NrYWRkciAqZHN0LAorICAgIHN0cnVjdCBzY3RwaGRyICpzaCwgc3RydWN0IHNjdHBf
Y2h1bmtoZHIgKmNoLAorICAgIHN0cnVjdCBzY3RwX2lucGNiICoqaW5wX3AsIHN0cnVjdCBzY3Rw
X25ldHMgKipuZXRwLCB1aW50MzJfdCB2cmZfaWQpCit7CisJc3RydWN0IHNjdHBfdGNiICpzdGNi
OworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisKKwlpZiAoc2gtPnZfdGFnKSB7CisJCS8qIHdl
IG9ubHkgZ28gZG93biB0aGlzIHBhdGggaWYgdnRhZyBpcyBub24temVybyAqLworCQlzdGNiID0g
c2N0cF9maW5kYXNzb2NfYnlfdnRhZyhzcmMsIGRzdCwgbnRvaGwoc2gtPnZfdGFnKSwKKwkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wX3AsIG5ldHAsIHNoLT5zcmNfcG9ydCwgc2gt
PmRlc3RfcG9ydCwgMCwgdnJmX2lkLCAwKTsKKwkJaWYgKHN0Y2IpIHsKKwkJCXJldHVybiAoc3Rj
Yik7CisJCX0KKwl9CisKKwlpZiAoaW5wX3ApIHsKKwkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0
aW9uX2FkZHJfc2Eoc3JjLCBkc3QsIGlucF9wLCBuZXRwLAorCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAxLCB2cmZfaWQpOworCQlpbnAgPSAqaW5wX3A7CisJfSBlbHNlIHsK
KwkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2FkZHJfc2Eoc3JjLCBkc3QsICZpbnAsIG5l
dHAsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIHZyZl9pZCk7CisJ
fQorCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAic3RjYjolcCBpbnA6JXBcbiIsICh2b2lkICop
c3RjYiwgKHZvaWQgKilpbnApOworCWlmIChzdGNiID09IE5VTEwgJiYgaW5wKSB7CisJCS8qIEZv
dW5kIGEgRVAgYnV0IG5vdCB0aGlzIGFkZHJlc3MgKi8KKwkJaWYgKChjaC0+Y2h1bmtfdHlwZSA9
PSBTQ1RQX0lOSVRJQVRJT04pIHx8CisJCSAgICAoY2gtPmNodW5rX3R5cGUgPT0gU0NUUF9JTklU
SUFUSU9OX0FDSykpIHsKKwkJCS8qLQorCQkJICogc3BlY2lhbCBob29rLCB3ZSBkbyBOT1QgcmV0
dXJuIGxpbnAgb3IgYW4KKwkJCSAqIGFzc29jaWF0aW9uIHRoYXQgaXMgbGlua2VkIHRvIGFuIGV4
aXN0aW5nCisJCQkgKiBhc3NvY2lhdGlvbiB0aGF0IGlzIHVuZGVyIHRoZSBUQ1AgcG9vbCAoaS5l
LiBubworCQkJICogbGlzdGVuZXIgZXhpc3RzKS4gVGhlIGVuZHBvaW50IGZpbmRpbmcgcm91dGlu
ZQorCQkJICogd2lsbCBhbHdheXMgZmluZCBhIGxpc3RlbmVyIGJlZm9yZSBleGFtaW5pbmcgdGhl
CisJCQkgKiBUQ1AgcG9vbC4KKwkJCSAqLworCQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX0lOX1RDUFBPT0wpIHsKKwkJCQlpZiAoaW5wX3ApIHsKKwkJCQkJKmlucF9wID0g
TlVMTDsKKwkJCQl9CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJCXN0Y2IgPSBzY3RwX2Zp
bmRhc3NvY2lhdGlvbl9zcGVjaWFsX2FkZHIobSwKKwkJCSAgICBvZmZzZXQsIHNoLCAmaW5wLCBu
ZXRwLCBkc3QpOworCQkJaWYgKGlucF9wICE9IE5VTEwpIHsKKwkJCQkqaW5wX3AgPSBpbnA7CisJ
CQl9CisJCX0KKwl9CisJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjEsICJzdGNiIGlzICVwXG4iLCAo
dm9pZCAqKXN0Y2IpOworCXJldHVybiAoc3RjYik7Cit9CisKKy8qCisgKiBsb29rdXAgYW4gYXNz
b2NpYXRpb24gYnkgYW4gQVNDT05GIGxvb2t1cCBhZGRyZXNzLgorICogaWYgdGhlIGxvb2t1cCBh
ZGRyZXNzIGlzIDAuMC4wLjAgb3IgOjowLCB1c2UgdGhlIHZ0YWcgdG8gZG8gdGhlIGxvb2t1cAor
ICovCitzdHJ1Y3Qgc2N0cF90Y2IgKgorc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYXNjb25mKHN0
cnVjdCBtYnVmICptLCBpbnQgb2Zmc2V0LAorCQkJICAgICAgIHN0cnVjdCBzb2NrYWRkciAqZHN0
LCBzdHJ1Y3Qgc2N0cGhkciAqc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IHNjdHBfaW5wY2IgKippbnBfcCwgc3RydWN0IHNjdHBfbmV0cyAqKm5ldHAsIHVpbnQzMl90
IHZyZl9pZCkKK3sKKwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7CisJdW5pb24gc2N0cF9zb2Nrc3Rv
cmUgcmVtb3RlX3N0b3JlOworCXN0cnVjdCBzY3RwX3BhcmFtaGRyIHBhcmFtX2J1ZiwgKnBoZHI7
CisJaW50IHB0eXBlOworCWludCB6ZXJvX2FkZHJlc3MgPSAwOworI2lmZGVmIElORVQKKwlzdHJ1
Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJc3RydWN0IHNvY2th
ZGRyX2luNiAqc2luNjsKKyNlbmRpZgorCisJbWVtc2V0KCZyZW1vdGVfc3RvcmUsIDAsIHNpemVv
ZihyZW1vdGVfc3RvcmUpKTsKKwlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShtLCBvZmZzZXQg
KyBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2NodW5rKSwKKwkJCQkgICAmcGFyYW1fYnVmLCBz
aXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKTsKKwlpZiAocGhkciA9PSBOVUxMKSB7CisJCVND
VFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICIlczogZmFpbGVkIHRvIGdldCBhc2NvbmYgbG9va3Vw
IGFkZHJcbiIsCisJCQlfX2Z1bmNfXyk7CisJCXJldHVybiBOVUxMOworCX0KKwlwdHlwZSA9IChp
bnQpKCh1aW50MzJfdCkgbnRvaHMocGhkci0+cGFyYW1fdHlwZSkpOworCS8qIGdldCB0aGUgY29y
cmVsYXRpb24gYWRkcmVzcyAqLworCXN3aXRjaCAocHR5cGUpIHsKKyNpZmRlZiBJTkVUNgorCWNh
c2UgU0NUUF9JUFY2X0FERFJFU1M6CisJeworCQkvKiBpcHY2IGFkZHJlc3MgcGFyYW0gKi8KKwkJ
c3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKnA2LCBwNl9idWY7CisKKwkJaWYgKG50b2hzKHBo
ZHItPnBhcmFtX2xlbmd0aCkgIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtKSkg
eworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJcDYgPSAoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFy
YW0gKilzY3RwX2dldF9uZXh0X3BhcmFtKG0sCisJCQkJCQkJCSAgICAgICBvZmZzZXQgKyBzaXpl
b2Yoc3RydWN0IHNjdHBfYXNjb25mX2NodW5rKSwKKwkJCQkJCQkJICAgICAgICZwNl9idWYucGgs
IHNpemVvZihwNl9idWYpKTsKKwkJaWYgKHA2ID09IE5VTEwpIHsKKwkJCVNDVFBEQkcoU0NUUF9E
RUJVR19JTlBVVDMsICIlczogZmFpbGVkIHRvIGdldCBhc2NvbmYgdjYgbG9va3VwIGFkZHJcbiIs
CisJCQkJX19mdW5jX18pOworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQlzaW42ID0gJnJlbW90
ZV9zdG9yZS5zaW42OworCQlzaW42LT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworI2lmZGVmIEhB
VkVfU0lONl9MRU4KKwkJc2luNi0+c2luNl9sZW4gPSBzaXplb2YoKnNpbjYpOworI2VuZGlmCisJ
CXNpbjYtPnNpbjZfcG9ydCA9IHNoLT5zcmNfcG9ydDsKKwkJbWVtY3B5KCZzaW42LT5zaW42X2Fk
ZHIsICZwNi0+YWRkciwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworCQlpZiAoSU42X0lTX0FE
RFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRkcikpCisJCQl6ZXJvX2FkZHJlc3MgPSAxOwor
CQlicmVhazsKKwl9CisjZW5kaWYKKyNpZmRlZiBJTkVUCisJY2FzZSBTQ1RQX0lQVjRfQUREUkVT
UzoKKwl7CisJCS8qIGlwdjQgYWRkcmVzcyBwYXJhbSAqLworCQlzdHJ1Y3Qgc2N0cF9pcHY0YWRk
cl9wYXJhbSAqcDQsIHA0X2J1ZjsKKworCQlpZiAobnRvaHMocGhkci0+cGFyYW1fbGVuZ3RoKSAh
PSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0pKSB7CisJCQlyZXR1cm4gTlVMTDsK
KwkJfQorCQlwNCA9IChzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAqKXNjdHBfZ2V0X25leHRf
cGFyYW0obSwKKwkJCQkJCQkJICAgICAgIG9mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2Nv
bmZfY2h1bmspLAorCQkJCQkJCQkgICAgICAgJnA0X2J1Zi5waCwgc2l6ZW9mKHA0X2J1ZikpOwor
CQlpZiAocDQgPT0gTlVMTCkgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIiVzOiBm
YWlsZWQgdG8gZ2V0IGFzY29uZiB2NCBsb29rdXAgYWRkclxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJ
CQlyZXR1cm4gKE5VTEwpOworCQl9CisJCXNpbiA9ICZyZW1vdGVfc3RvcmUuc2luOworCQlzaW4t
PnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCQlzaW4tPnNpbl9s
ZW4gPSBzaXplb2YoKnNpbik7CisjZW5kaWYKKwkJc2luLT5zaW5fcG9ydCA9IHNoLT5zcmNfcG9y
dDsKKwkJbWVtY3B5KCZzaW4tPnNpbl9hZGRyLCAmcDQtPmFkZHIsIHNpemVvZihzdHJ1Y3QgaW5f
YWRkcikpOworCQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSkKKwkJCXpl
cm9fYWRkcmVzcyA9IDE7CisJCWJyZWFrOworCX0KKyNlbmRpZgorCWRlZmF1bHQ6CisJCS8qIGlu
dmFsaWQgYWRkcmVzcyBwYXJhbSB0eXBlICovCisJCXJldHVybiBOVUxMOworCX0KKworCWlmICh6
ZXJvX2FkZHJlc3MpIHsKKwkgICAgICAgIHN0Y2IgPSBzY3RwX2ZpbmRhc3NvY19ieV92dGFnKE5V
TEwsIGRzdCwgbnRvaGwoc2gtPnZfdGFnKSwgaW5wX3AsCisJCQkJCSAgICAgIG5ldHAsIHNoLT5z
cmNfcG9ydCwgc2gtPmRlc3RfcG9ydCwgMSwgdnJmX2lkLCAwKTsKKwkJaWYgKHN0Y2IgIT0gTlVM
TCkgeworCQkJU0NUUF9JTlBfREVDUl9SRUYoKmlucF9wKTsKKwkJfQorCX0gZWxzZSB7CisJCXN0
Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKGlucF9wLAorCQkgICAgJnJlbW90ZV9z
dG9yZS5zYSwgbmV0cCwKKwkJICAgIGRzdCwgTlVMTCk7CisJfQorCXJldHVybiAoc3RjYik7Cit9
CisKKy8qCisgKiBhbGxvY2F0ZSBhIHNjdHBfaW5wY2IgYW5kIHNldHVwIGEgdGVtcG9yYXJ5IGJp
bmRpbmcgdG8gYSBwb3J0L2FsbAorICogYWRkcmVzc2VzLiBUaGlzIHdheSBpZiB3ZSBkb24ndCBn
ZXQgYSBiaW5kIHdlIGJ5IGRlZmF1bHQgcGljayBhIGVwaGVtZXJhbAorICogcG9ydCB3aXRoIGFs
bCBhZGRyZXNzZXMgYm91bmQuCisgKi8KK2ludAorc2N0cF9pbnBjYl9hbGxvYyhzdHJ1Y3Qgc29j
a2V0ICpzbywgdWludDMyX3QgdnJmX2lkKQoreworCS8qCisJICogd2UgZ2V0IGNhbGxlZCB3aGVu
IGEgbmV3IGVuZHBvaW50IHN0YXJ0cyB1cC4gV2UgbmVlZCB0byBhbGxvY2F0ZQorCSAqIHRoZSBz
Y3RwX2lucGNiIHN0cnVjdHVyZSBmcm9tIHRoZSB6b25lIGFuZCBpbml0IGl0LiBNYXJrIGl0IGFz
CisJICogdW5ib3VuZCBhbmQgZmluZCBhIHBvcnQgdGhhdCB3ZSBjYW4gdXNlIGFzIGFuIGVwaGVt
ZXJhbCB3aXRoCisJICogSU5BRERSX0FOWS4gSWYgdGhlIHVzZXIgYmluZHMgbGF0ZXIgbm8gcHJv
YmxlbSB3ZSBjYW4gdGhlbiBhZGQgaW4KKwkgKiB0aGUgc3BlY2lmaWMgYWRkcmVzc2VzLiBBbmQg
c2V0dXAgdGhlIGRlZmF1bHQgcGFyYW1ldGVycyBmb3IgdGhlCisJICogRVAuCisJICovCisJaW50
IGksIGVycm9yOworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJc3RydWN0IHNjdHBfcGNiICpt
OworCXN0cnVjdCB0aW1ldmFsIHRpbWU7CisJc2N0cF9zaGFyZWRrZXlfdCAqbnVsbF9rZXk7CisK
KwllcnJvciA9IDA7CisKKwlTQ1RQX0lOUF9JTkZPX1dMT0NLKCk7CisJaW5wID0gU0NUUF9aT05F
X0dFVChTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9lcCksIHN0cnVjdCBzY3RwX2lucGNiKTsKKwlp
ZiAoaW5wID09IE5VTEwpIHsKKwkJU0NUUF9QUklOVEYoIk91dCBvZiBTQ1RQLUlOUENCIHN0cnVj
dHVyZXMgLSBubyByZXNvdXJjZXNcbiIpOworCQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKKwkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwg
RU5PQlVGUyk7CisJCXJldHVybiAoRU5PQlVGUyk7CisJfQorCS8qIHphcCBpdCAqLworCW1lbXNl
dChpbnAsIDAsIHNpemVvZigqaW5wKSk7CisKKwkvKiBidW1wIGdlbmVyYXRpb25zICovCisjaWYg
ZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaW5wLT5pcF9p
bnAuaW5wLmlucF9zdGF0ZSA9IElOUENCX1NUQVRFX0lOVVNFOworI2VuZGlmCisJLyogc2V0dXAg
c29ja2V0IHBvaW50ZXJzICovCisJaW5wLT5zY3RwX3NvY2tldCA9IHNvOworCWlucC0+aXBfaW5w
LmlucC5pbnBfc29ja2V0ID0gc287CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwlpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQgPSBjcmhvbGQoc28t
PnNvX2NyZWQpOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKSAmJiAhZGVmaW5lZChfV0lOMzIpCisJaWYgKElOUF9TT0NLQUYoc28pID09IEFGX0lORVQ2
KSB7CisJCWlmIChNT0RVTEVfR0xPQkFMKGlwNl9hdXRvX2Zsb3dsYWJlbCkpIHsKKwkJCWlucC0+
aXBfaW5wLmlucC5pbnBfZmxhZ3MgfD0gSU42UF9BVVRPRkxPV0xBQkVMOworCQl9CisJCWlmIChN
T0RVTEVfR0xPQkFMKGlwNl92Nm9ubHkpKSB7CisJCQlpbnAtPmlwX2lucC5pbnAuaW5wX2ZsYWdz
IHw9IElONlBfSVBWNl9WNk9OTFk7CisJCX0KKwl9CisjZW5kaWYKKyNlbmRpZgorCWlucC0+c2N0
cF9hc3NvY2lkX2NvdW50ZXIgPSAxOworCWlucC0+cGFydGlhbF9kZWxpdmVyeV9wb2ludCA9IFND
VFBfU0JfTElNSVRfUkNWKHNvKSA+PiBTQ1RQX1BBUlRJQUxfREVMSVZFUllfU0hJRlQ7CisJaW5w
LT5zY3RwX2ZyYWdfcG9pbnQgPSBTQ1RQX0RFRkFVTFRfTUFYU0VHTUVOVDsKKwlpbnAtPm1heF9j
d25kID0gMDsKKwlpbnAtPnNjdHBfY210X29uX29mZiA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9j
bXRfb25fb2ZmKTsKKwlpbnAtPmVjbl9zdXBwb3J0ZWQgPSAodWludDhfdClTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfZWNuX2VuYWJsZSk7CisJaW5wLT5wcnNjdHBfc3VwcG9ydGVkID0gKHVpbnQ4X3Qp
U0NUUF9CQVNFX1NZU0NUTChzY3RwX3ByX2VuYWJsZSk7CisJaW5wLT5hdXRoX3N1cHBvcnRlZCA9
ICh1aW50OF90KVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hdXRoX2VuYWJsZSk7CisJaW5wLT5hc2Nv
bmZfc3VwcG9ydGVkID0gKHVpbnQ4X3QpU0NUUF9CQVNFX1NZU0NUTChzY3RwX2FzY29uZl9lbmFi
bGUpOworCWlucC0+cmVjb25maWdfc3VwcG9ydGVkID0gKHVpbnQ4X3QpU0NUUF9CQVNFX1NZU0NU
TChzY3RwX3JlY29uZmlnX2VuYWJsZSk7CisJaW5wLT5ucnNhY2tfc3VwcG9ydGVkID0gKHVpbnQ4
X3QpU0NUUF9CQVNFX1NZU0NUTChzY3RwX25yc2Fja19lbmFibGUpOworCWlucC0+cGt0ZHJvcF9z
dXBwb3J0ZWQgPSAodWludDhfdClTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcGt0ZHJvcF9lbmFibGUp
OworCWlucC0+aWRhdGFfc3VwcG9ydGVkID0gMDsKKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaW5wLT5maWJudW0gPSBzby0+c29fZmlibnVt
OworI2Vsc2UKKwlpbnAtPmZpYm51bSA9IDA7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisJaW5wLT51bHBfaW5mbyA9IE5VTEw7CisJaW5wLT5yZWN2X2NhbGxiYWNrID0gTlVM
TDsKKwlpbnAtPnNlbmRfY2FsbGJhY2sgPSBOVUxMOworCWlucC0+c2VuZF9zYl90aHJlc2hvbGQg
PSAwOworI2VuZGlmCisJLyogaW5pdCB0aGUgc21hbGwgaGFzaCB0YWJsZSB3ZSB1c2UgdG8gdHJh
Y2sgYXNvY2lkIDwtPiB0Y2IgKi8KKwlpbnAtPnNjdHBfYXNvY2lkaGFzaCA9IFNDVFBfSEFTSF9J
TklUKFNDVFBfU1RBQ0tfVlRBR19IQVNIX1NJWkUsICZpbnAtPmhhc2hhc29jaWRtYXJrKTsKKwlp
ZiAoaW5wLT5zY3RwX2Fzb2NpZGhhc2ggPT0gTlVMTCkgeworI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWNyZnJlZShpbnAtPmlwX2lucC5pbnAu
aW5wX2NyZWQpOworI2VuZGlmCisJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96
b25lX2VwKSwgaW5wKTsKKwkJU0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7CisJCXJldHVybiAoRU5P
QlVGUyk7CisJfQorCVNDVFBfSU5DUl9FUF9DT1VOVCgpOworCWlucC0+aXBfaW5wLmlucC5pbnBf
aXBfdHRsID0gTU9EVUxFX0dMT0JBTChpcF9kZWZ0dGwpOworCVNDVFBfSU5QX0lORk9fV1VOTE9D
SygpOworCisJc28tPnNvX3BjYiA9IChjYWRkcl90KWlucDsKKworCWlmIChTQ1RQX1NPX1RZUEUo
c28pID09IFNPQ0tfU0VRUEFDS0VUKSB7CisJCS8qIFVEUCBzdHlsZSBzb2NrZXQgKi8KKwkJaW5w
LT5zY3RwX2ZsYWdzID0gKFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUgfAorCQkgICAgU0NUUF9QQ0Jf
RkxBR1NfVU5CT1VORCk7CisJCS8qIEJlIHN1cmUgaXQgaXMgTk9OLUJMT0NLSU5HIElPIGZvciBV
RFAgKi8KKwkJLyogU0NUUF9TRVRfU09fTkJJTyhzbyk7ICovCisJfSBlbHNlIGlmIChTQ1RQX1NP
X1RZUEUoc28pID09IFNPQ0tfU1RSRUFNKSB7CisJCS8qIFRDUCBzdHlsZSBzb2NrZXQgKi8KKwkJ
aW5wLT5zY3RwX2ZsYWdzID0gKFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUgfAorCQkgICAgU0NUUF9Q
Q0JfRkxBR1NfVU5CT1VORCk7CisJCS8qIEJlIHN1cmUgd2UgaGF2ZSBibG9ja2luZyBJTyBieSBk
ZWZhdWx0ICovCisJCVNPQ0tfTE9DSyhzbyk7CisJCVNDVFBfQ0xFQVJfU09fTkJJTyhzbyk7CisJ
CVNPQ0tfVU5MT0NLKHNvKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiB1bnN1cHBvcnRlZCBzb2Nr
ZXQgdHlwZSAoUkFXLCBldGMpLSBpbiBjYXNlIHdlIG1pc3NlZCBpdAorCQkgKiBpbiBwcm90b3N3
CisJCSAqLworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfUENCLCBFT1BOT1RTVVBQKTsKKwkJc28tPnNvX3BjYiA9IE5VTEw7CisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJY3JmcmVlKGlucC0+
aXBfaW5wLmlucC5pbnBfY3JlZCk7CisjZW5kaWYKKwkJU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNF
X0lORk8oaXBpX3pvbmVfZXApLCBpbnApOworCQlyZXR1cm4gKEVPUE5PVFNVUFApOworCX0KKwlp
ZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RlZmF1bHRfZnJhZ19pbnRlcmxlYXZlKSA9PSBTQ1RQ
X0ZSQUdfTEVWRUxfMSkgeworCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19G
UkFHX0lOVEVSTEVBVkUpOworCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1Nf
SU5URVJMRUFWRV9TVFJNUyk7CisJfSBlbHNlIGlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVm
YXVsdF9mcmFnX2ludGVybGVhdmUpID09IFNDVFBfRlJBR19MRVZFTF8yKSB7CisJCXNjdHBfZmVh
dHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0ZSQUdfSU5URVJMRUFWRSk7CisJCXNjdHBfZmVh
dHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0lOVEVSTEVBVkVfU1RSTVMpOworCX0gZWxzZSBp
ZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RlZmF1bHRfZnJhZ19pbnRlcmxlYXZlKSA9PSBTQ1RQ
X0ZSQUdfTEVWRUxfMCkgeworCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1Nf
RlJBR19JTlRFUkxFQVZFKTsKKwkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdT
X0lOVEVSTEVBVkVfU1RSTVMpOworCX0KKwlpbnAtPnNjdHBfdGNiaGFzaCA9IFNDVFBfSEFTSF9J
TklUKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wY2J0YmxzaXplKSwKKwkJCQkJICAgJmlucC0+c2N0
cF9oYXNobWFyayk7CisJaWYgKGlucC0+c2N0cF90Y2JoYXNoID09IE5VTEwpIHsKKwkJU0NUUF9Q
UklOVEYoIk91dCBvZiBTQ1RQLUlOUENCLT5oYXNoaW5pdCAtIG5vIHJlc291cmNlc1xuIik7CisJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0Is
IEVOT0JVRlMpOworCQlzby0+c29fcGNiID0gTlVMTDsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQljcmZyZWUoaW5wLT5pcF9pbnAuaW5wLmlu
cF9jcmVkKTsKKyNlbmRpZgorCQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9u
ZV9lcCksIGlucCk7CisJCXJldHVybiAoRU5PQlVGUyk7CisJfQorI2lmZGVmIFNDVFBfTVZSRgor
CWlucC0+dnJmX3NpemUgPSBTQ1RQX0RFRkFVTFRfVlJGX1NJWkU7CisJU0NUUF9NQUxMT0MoaW5w
LT5tX3ZyZl9pZHMsIHVpbnQzMl90ICosCisJCSAgICAoc2l6ZW9mKHVpbnQzMl90KSAqIGlucC0+
dnJmX3NpemUpLCBTQ1RQX01fTVZSRik7CisJaWYgKGlucC0+bV92cmZfaWRzID09IE5VTEwpIHsK
KwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BD
QiwgRU5PQlVGUyk7CisJCXNvLT5zb19wY2IgPSBOVUxMOworCQlTQ1RQX0hBU0hfRlJFRShpbnAt
PnNjdHBfdGNiaGFzaCwgaW5wLT5zY3RwX2hhc2htYXJrKTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQljcmZyZWUoaW5wLT5pcF9pbnAuaW5w
LmlucF9jcmVkKTsKKyNlbmRpZgorCQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlf
em9uZV9lcCksIGlucCk7CisJCXJldHVybiAoRU5PQlVGUyk7CisJfQorCWlucC0+bV92cmZfaWRz
WzBdID0gdnJmX2lkOworCWlucC0+bnVtX3ZyZnMgPSAxOworI2VuZGlmCisJaW5wLT5kZWZfdnJm
X2lkID0gdnJmX2lkOworCisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisjaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKSB8fCBkZWZpbmVkKEFQUExFX1NO
T1dMRU9QQVJEKQorCWlucC0+aXBfaW5wLmlucC5pbnBjYl9tdHggPSBsY2tfbXR4X2FsbG9jX2lu
aXQoU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLm10eF9ncnAsIFNDVFBfQkFTRV9JTkZPKHNjdGJp
bmZvKS5tdHhfYXR0cik7CisJaWYgKGlucC0+aXBfaW5wLmlucC5pbnBjYl9tdHggPT0gTlVMTCkg
eworCQlTQ1RQX1BSSU5URigiaW5fcGNiYWxsb2M6IGNhbid0IGFsbG9jIG11dGV4ISBzbz0lcFxu
IiwgKHZvaWQgKilzbyk7CisjaWZkZWYgU0NUUF9NVlJGCisJCVNDVFBfRlJFRShpbnAtPm1fdnJm
X2lkcywgU0NUUF9NX01WUkYpOworI2VuZGlmCisJCVNDVFBfSEFTSF9GUkVFKGlucC0+c2N0cF90
Y2JoYXNoLCBpbnAtPnNjdHBfaGFzaG1hcmspOworCQlzby0+c29fcGNiID0gTlVMTDsKKwkJU0NU
UF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfZXApLCBpbnApOworCQlTQ1RQX1VO
TE9DS19FWEMoU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLmlwaV9sb2NrKTsKKwkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRU5PTUVNKTsK
KwkJcmV0dXJuIChFTk9NRU0pOworCX0KKyNlbGlmIGRlZmluZWQoQVBQTEVfTElPTikgfHwgZGVm
aW5lZChBUFBMRV9NT1VOVEFJTkxJT04pCisJbGNrX210eF9pbml0KCZpbnAtPmlwX2lucC5pbnAu
aW5wY2JfbXR4LCBTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykubXR4X2dycCwgU0NUUF9CQVNFX0lO
Rk8oc2N0YmluZm8pLm10eF9hdHRyKTsKKyNlbHNlCisJbGNrX210eF9pbml0KCZpbnAtPmlwX2lu
cC5pbnAuaW5wY2JfbXR4LCBTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykuaXBpX2xvY2tfZ3JwLCBT
Q1RQX0JBU0VfSU5GTyhzY3RiaW5mbykuaXBpX2xvY2tfYXR0cik7CisjZW5kaWYKKyNlbmRpZgor
CVNDVFBfSU5QX0lORk9fV0xPQ0soKTsKKwlTQ1RQX0lOUF9MT0NLX0lOSVQoaW5wKTsKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCUlOUF9MT0NL
X0lOSVQoJmlucC0+aXBfaW5wLmlucCwgImlucCIsICJzY3RwaW5wIik7CisjZW5kaWYKKwlTQ1RQ
X0lOUF9SRUFEX0lOSVQoaW5wKTsKKwlTQ1RQX0FTT0NfQ1JFQVRFX0xPQ0tfSU5JVChpbnApOwor
CS8qIGxvY2sgdGhlIG5ldyBlcCAqLworCVNDVFBfSU5QX1dMT0NLKGlucCk7CisKKwkvKiBhZGQg
aXQgdG8gdGhlIGluZm8gYXJlYSAqLworCUxJU1RfSU5TRVJUX0hFQUQoJlNDVFBfQkFTRV9JTkZP
KGxpc3RoZWFkKSwgaW5wLCBzY3RwX2xpc3QpOworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWlucC0+aXBfaW5wLmlucC5pbnBfcGNiaW5mbyA9ICZT
Q1RQX0JBU0VfSU5GTyhzY3RiaW5mbyk7CisjaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKSB8fCBk
ZWZpbmVkKEFQUExFX1NOT1dMRU9QQVJEKSB8fCBkZWZpbmVkKEFQUExFX0xJT04pIHx8IGRlZmlu
ZWQoQVBQTEVfTU9VTlRBSU5MSU9OKQorCUxJU1RfSU5TRVJUX0hFQUQoU0NUUF9CQVNFX0lORk8o
c2N0YmluZm8pLmxpc3RoZWFkLCAmaW5wLT5pcF9pbnAuaW5wLCBpbnBfbGlzdCk7CisjZWxzZQor
CUxJU1RfSU5TRVJUX0hFQUQoU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLmlwaV9saXN0aGVhZCwg
JmlucC0+aXBfaW5wLmlucCwgaW5wX2xpc3QpOworI2VuZGlmCisjZW5kaWYKKwlTQ1RQX0lOUF9J
TkZPX1dVTkxPQ0soKTsKKworCVRBSUxRX0lOSVQoJmlucC0+cmVhZF9xdWV1ZSk7CisJTElTVF9J
TklUKCZpbnAtPnNjdHBfYWRkcl9saXN0KTsKKworCUxJU1RfSU5JVCgmaW5wLT5zY3RwX2Fzb2Nf
bGlzdCk7CisKKyNpZmRlZiBTQ1RQX1RSQUNLX0ZSRUVEX0FTT0NTCisJLyogVEVNUCBDT0RFICov
CisJTElTVF9JTklUKCZpbnAtPnNjdHBfYXNvY19mcmVlX2xpc3QpOworI2VuZGlmCisJLyogSW5p
dCB0aGUgdGltZXIgc3RydWN0dXJlIGZvciBzaWduYXR1cmUgY2hhbmdlICovCisJU0NUUF9PU19U
SU1FUl9JTklUKCZpbnAtPnNjdHBfZXAuc2lnbmF0dXJlX2NoYW5nZS50aW1lcik7CisJaW5wLT5z
Y3RwX2VwLnNpZ25hdHVyZV9jaGFuZ2UudHlwZSA9IFNDVFBfVElNRVJfVFlQRV9ORVdDT09LSUU7
CisKKwkvKiBub3cgaW5pdCB0aGUgYWN0dWFsIGVuZHBvaW50IGRlZmF1bHQgZGF0YSAqLworCW0g
PSAmaW5wLT5zY3RwX2VwOworCisJLyogc2V0dXAgdGhlIGJhc2UgdGltZW91dCBpbmZvcm1hdGlv
biAqLworCW0tPnNjdHBfdGltZW91dHRpY2tzW1NDVFBfVElNRVJfU0VORF0gPSBzY3RwX3NlY3Nf
dG9fdGlja3MoU0NUUF9TRU5EX1NFQyk7CS8qIG5lZWRlZCA/ICovCisJbS0+c2N0cF90aW1lb3V0
dGlja3NbU0NUUF9USU1FUl9JTklUXSA9IHNjdHBfc2Vjc190b190aWNrcyhTQ1RQX0lOSVRfU0VD
KTsJLyogbmVlZGVkID8gKi8KKwltLT5zY3RwX3RpbWVvdXR0aWNrc1tTQ1RQX1RJTUVSX1JFQ1Zd
ID0gc2N0cF9tc2Vjc190b190aWNrcyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVsYXllZF9zYWNr
X3RpbWVfZGVmYXVsdCkpOworCW0tPnNjdHBfdGltZW91dHRpY2tzW1NDVFBfVElNRVJfSEVBUlRC
RUFUXSA9IHNjdHBfbXNlY3NfdG9fdGlja3MoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2hlYXJ0YmVh
dF9pbnRlcnZhbF9kZWZhdWx0KSk7CisJbS0+c2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9Q
TVRVXSA9IHNjdHBfc2Vjc190b190aWNrcyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcG10dV9yYWlz
ZV90aW1lX2RlZmF1bHQpKTsKKwltLT5zY3RwX3RpbWVvdXR0aWNrc1tTQ1RQX1RJTUVSX01BWFNI
VVRET1dOXSA9IHNjdHBfc2Vjc190b190aWNrcyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfc2h1dGRv
d25fZ3VhcmRfdGltZV9kZWZhdWx0KSk7CisJbS0+c2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1F
Ul9TSUdOQVRVUkVdID0gc2N0cF9zZWNzX3RvX3RpY2tzKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9z
ZWNyZXRfbGlmZXRpbWVfZGVmYXVsdCkpOworCS8qIGFsbCBtYXgvbWluIG1heCBhcmUgaW4gbXMg
Ki8KKwltLT5zY3RwX21heHJ0byA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydG9fbWF4X2RlZmF1
bHQpOworCW0tPnNjdHBfbWlucnRvID0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX3J0b19taW5fZGVm
YXVsdCk7CisJbS0+aW5pdGlhbF9ydG8gPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcnRvX2luaXRp
YWxfZGVmYXVsdCk7CisJbS0+aW5pdGlhbF9pbml0X3J0b19tYXggPSBTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfaW5pdF9ydG9fbWF4X2RlZmF1bHQpOworCW0tPnNjdHBfc2Fja19mcmVxID0gU0NUUF9C
QVNFX1NZU0NUTChzY3RwX3NhY2tfZnJlcV9kZWZhdWx0KTsKKwltLT5tYXhfaW5pdF90aW1lcyA9
IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pbml0X3J0eF9tYXhfZGVmYXVsdCk7CisJbS0+bWF4X3Nl
bmRfdGltZXMgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNzb2NfcnR4X21heF9kZWZhdWx0KTsK
KwltLT5kZWZfbmV0X2ZhaWx1cmUgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcGF0aF9ydHhfbWF4
X2RlZmF1bHQpOworCW0tPmRlZl9uZXRfcGZfdGhyZXNob2xkID0gU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX3BhdGhfcGZfdGhyZXNob2xkKTsKKwltLT5zY3RwX3N3c19zZW5kZXIgPSBTQ1RQX1NXU19T
RU5ERVJfREVGOworCW0tPnNjdHBfc3dzX3JlY2VpdmVyID0gU0NUUF9TV1NfUkVDRUlWRVJfREVG
OworCW0tPm1heF9idXJzdCA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYXhfYnVyc3RfZGVmYXVs
dCk7CisJbS0+ZnJfbWF4X2J1cnN0ID0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX2ZyX21heF9idXJz
dF9kZWZhdWx0KTsKKworCW0tPnNjdHBfZGVmYXVsdF9jY19tb2R1bGUgPSBTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfZGVmYXVsdF9jY19tb2R1bGUpOworCW0tPnNjdHBfZGVmYXVsdF9zc19tb2R1bGUg
PSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9zc19tb2R1bGUpOworCW0tPm1heF9vcGVu
X3N0cmVhbXNfaW50b21lID0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX25yX2luY29taW5nX3N0cmVh
bXNfZGVmYXVsdCk7CisJLyogbnVtYmVyIG9mIHN0cmVhbXMgdG8gcHJlLW9wZW4gb24gYSBhc3Nv
Y2lhdGlvbiAqLworCW0tPnByZV9vcGVuX3N0cmVhbV9jb3VudCA9IFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9ucl9vdXRnb2luZ19zdHJlYW1zX2RlZmF1bHQpOworCisJbS0+ZGVmYXVsdF9tdHUgPSAw
OworCS8qIEFkZCBhZGFwdGF0aW9uIGNvb2tpZSAqLworCW0tPmFkYXB0YXRpb25fbGF5ZXJfaW5k
aWNhdG9yID0gMDsKKwltLT5hZGFwdGF0aW9uX2xheWVyX2luZGljYXRvcl9wcm92aWRlZCA9IDA7
CisKKwkvKiBzZWVkIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICovCisJbS0+cmFuZG9tX2NvdW50
ZXIgPSAxOworCW0tPnN0b3JlX2F0ID0gU0NUUF9TSUdOQVRVUkVfU0laRTsKKwlTQ1RQX1JFQURf
UkFORE9NKG0tPnJhbmRvbV9udW1iZXJzLCBzaXplb2YobS0+cmFuZG9tX251bWJlcnMpKTsKKwlz
Y3RwX2ZpbGxfcmFuZG9tX3N0b3JlKG0pOworCisJLyogTWluaW11bSBjb29raWUgc2l6ZSAqLwor
CW0tPnNpemVfb2ZfYV9jb29raWUgPSAoc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfbXNnKSAqIDIp
ICsKKwkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3N0YXRlX2Nvb2tpZSk7CisJbS0+c2l6ZV9vZl9h
X2Nvb2tpZSArPSBTQ1RQX1NJR05BVFVSRV9TSVpFOworCisJLyogU2V0dXAgdGhlIGluaXRpYWwg
c2VjcmV0ICovCisJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJnRpbWUpOworCW0tPnRpbWVf
b2Zfc2VjcmV0X2NoYW5nZSA9IHRpbWUudHZfc2VjOworCisJZm9yIChpID0gMDsgaSA8IFNDVFBf
TlVNQkVSX09GX1NFQ1JFVFM7IGkrKykgeworCQltLT5zZWNyZXRfa2V5WzBdW2ldID0gc2N0cF9z
ZWxlY3RfaW5pdGlhbF9UU04obSk7CisJfQorCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9U
WVBFX05FV0NPT0tJRSwgaW5wLCBOVUxMLCBOVUxMKTsKKworCS8qIEhvdyBsb25nIGlzIGEgY29v
a2llIGdvb2QgZm9yID8gKi8KKwltLT5kZWZfY29va2llX2xpZmUgPSBzY3RwX21zZWNzX3RvX3Rp
Y2tzKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF92YWxpZF9jb29raWVfbGlmZV9kZWZhdWx0KSk7CisJ
LyoKKwkgKiBJbml0aWFsaXplIGF1dGhlbnRpY2F0aW9uIHBhcmFtZXRlcnMKKwkgKi8KKwltLT5s
b2NhbF9obWFjcyA9IHNjdHBfZGVmYXVsdF9zdXBwb3J0ZWRfaG1hY2xpc3QoKTsKKwltLT5sb2Nh
bF9hdXRoX2NodW5rcyA9IHNjdHBfYWxsb2NfY2h1bmtsaXN0KCk7CisJaWYgKGlucC0+YXNjb25m
X3N1cHBvcnRlZCkgeworCQlzY3RwX2F1dGhfYWRkX2NodW5rKFNDVFBfQVNDT05GLCBtLT5sb2Nh
bF9hdXRoX2NodW5rcyk7CisJCXNjdHBfYXV0aF9hZGRfY2h1bmsoU0NUUF9BU0NPTkZfQUNLLCBt
LT5sb2NhbF9hdXRoX2NodW5rcyk7CisJfQorCW0tPmRlZmF1bHRfZHNjcCA9IDA7CisjaWZkZWYg
SU5FVDYKKwltLT5kZWZhdWx0X2Zsb3dsYWJlbCA9IDA7CisjZW5kaWYKKwltLT5wb3J0ID0gMDsg
LyogZW5jYXBzdWxhdGlvbiBkaXNhYmxlZCBieSBkZWZhdWx0ICovCisJTElTVF9JTklUKCZtLT5z
aGFyZWRfa2V5cyk7CisJLyogYWRkIGRlZmF1bHQgTlVMTCBrZXkgYXMga2V5IGlkIDAgKi8KKwlu
dWxsX2tleSA9IHNjdHBfYWxsb2Nfc2hhcmVka2V5KCk7CisJc2N0cF9pbnNlcnRfc2hhcmVka2V5
KCZtLT5zaGFyZWRfa2V5cywgbnVsbF9rZXkpOworCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKyNp
ZmRlZiBTQ1RQX0xPR19DTE9TSU5HCisJc2N0cF9sb2dfY2xvc2luZyhpbnAsIE5VTEwsIDEyKTsK
KyNlbmRpZgorCXJldHVybiAoZXJyb3IpOworfQorCit2b2lkCitzY3RwX21vdmVfcGNiX2FuZF9h
c3NvYyhzdHJ1Y3Qgc2N0cF9pbnBjYiAqb2xkX2lucCwgc3RydWN0IHNjdHBfaW5wY2IgKm5ld19p
bnAsCisgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiKQoreworCXN0cnVjdCBzY3RwX25ldHMgKm5l
dDsKKwl1aW50MTZfdCBscG9ydCwgcnBvcnQ7CisJc3RydWN0IHNjdHBwY2JoZWFkICpoZWFkOwor
CXN0cnVjdCBzY3RwX2xhZGRyICpsYWRkciwgKm9sYWRkcjsKKworCWF0b21pY19hZGRfaW50KCZz
dGNiLT5hc29jLnJlZmNudCwgMSk7CisJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCVNDVFBfSU5Q
X0lORk9fV0xPQ0soKTsKKwlTQ1RQX0lOUF9XTE9DSyhvbGRfaW5wKTsKKwlTQ1RQX0lOUF9XTE9D
SyhuZXdfaW5wKTsKKwlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCWF0b21pY19zdWJ0cmFjdF9pbnQo
JnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKworCW5ld19pbnAtPnNjdHBfZXAudGltZV9vZl9zZWNy
ZXRfY2hhbmdlID0KKwkgICAgb2xkX2lucC0+c2N0cF9lcC50aW1lX29mX3NlY3JldF9jaGFuZ2U7
CisJbWVtY3B5KG5ld19pbnAtPnNjdHBfZXAuc2VjcmV0X2tleSwgb2xkX2lucC0+c2N0cF9lcC5z
ZWNyZXRfa2V5LAorCSAgICBzaXplb2Yob2xkX2lucC0+c2N0cF9lcC5zZWNyZXRfa2V5KSk7CisJ
bmV3X2lucC0+c2N0cF9lcC5jdXJyZW50X3NlY3JldF9udW1iZXIgPQorCSAgICBvbGRfaW5wLT5z
Y3RwX2VwLmN1cnJlbnRfc2VjcmV0X251bWJlcjsKKwluZXdfaW5wLT5zY3RwX2VwLmxhc3Rfc2Vj
cmV0X251bWJlciA9CisJICAgIG9sZF9pbnAtPnNjdHBfZXAubGFzdF9zZWNyZXRfbnVtYmVyOwor
CW5ld19pbnAtPnNjdHBfZXAuc2l6ZV9vZl9hX2Nvb2tpZSA9IG9sZF9pbnAtPnNjdHBfZXAuc2l6
ZV9vZl9hX2Nvb2tpZTsKKworCS8qIG1ha2UgaXQgc28gbmV3IGRhdGEgcG91cnMgaW50byB0aGUg
bmV3IHNvY2tldCAqLworCXN0Y2ItPnNjdHBfc29ja2V0ID0gbmV3X2lucC0+c2N0cF9zb2NrZXQ7
CisJc3RjYi0+c2N0cF9lcCA9IG5ld19pbnA7CisKKwkvKiBDb3B5IHRoZSBwb3J0IGFjcm9zcyAq
LworCWxwb3J0ID0gbmV3X2lucC0+c2N0cF9scG9ydCA9IG9sZF9pbnAtPnNjdHBfbHBvcnQ7CisJ
cnBvcnQgPSBzdGNiLT5ycG9ydDsKKwkvKiBQdWxsIHRoZSB0Y2IgZnJvbSB0aGUgb2xkIGFzc29j
aWF0aW9uICovCisJTElTVF9SRU1PVkUoc3RjYiwgc2N0cF90Y2JoYXNoKTsKKwlMSVNUX1JFTU9W
RShzdGNiLCBzY3RwX3RjYmxpc3QpOworCWlmIChzdGNiLT5hc29jLmluX2Fzb2NpZF9oYXNoKSB7
CisJCUxJU1RfUkVNT1ZFKHN0Y2IsIHNjdHBfdGNiYXNvY2lkaGFzaCk7CisJfQorCS8qIE5vdyBp
bnNlcnQgdGhlIG5ld19pbnAgaW50byB0aGUgVENQIGNvbm5lY3RlZCBoYXNoICovCisJaGVhZCA9
ICZTQ1RQX0JBU0VfSU5GTyhzY3RwX3RjcGVwaGFzaClbU0NUUF9QQ0JIQVNIX0FMTEFERFIoKGxw
b3J0IHwgcnBvcnQpLCBTQ1RQX0JBU0VfSU5GTyhoYXNodGNwbWFyaykpXTsKKworCUxJU1RfSU5T
RVJUX0hFQUQoaGVhZCwgbmV3X2lucCwgc2N0cF9oYXNoKTsKKwkvKiBJdHMgc2FmZSB0byBhY2Nl
c3MgKi8KKwluZXdfaW5wLT5zY3RwX2ZsYWdzICY9IH5TQ1RQX1BDQl9GTEFHU19VTkJPVU5EOwor
CisJLyogTm93IG1vdmUgdGhlIHRjYiBpbnRvIHRoZSBlbmRwb2ludCBsaXN0ICovCisJTElTVF9J
TlNFUlRfSEVBRCgmbmV3X2lucC0+c2N0cF9hc29jX2xpc3QsIHN0Y2IsIHNjdHBfdGNibGlzdCk7
CisJLyoKKwkgKiBRdWVzdGlvbiwgZG8gd2UgZXZlbiBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSBl
cC1oYXNoIHNpbmNlIHdlCisJICogb25seSBoYXZlIG9uZSBjb25uZWN0aW9uPyBQcm9iYWJseSBu
b3QgOj4gc28gbGV0cyBnZXQgcmlkIG9mIGl0CisJICogYW5kIG5vdCBzdWNrIHVwIGFueSBrZXJu
ZWwgbWVtb3J5IGluIHRoYXQuCisJICovCisJaWYgKHN0Y2ItPmFzb2MuaW5fYXNvY2lkX2hhc2gp
IHsKKwkJc3RydWN0IHNjdHBhc29jaGVhZCAqbGhkOworCQlsaGQgPSAmbmV3X2lucC0+c2N0cF9h
c29jaWRoYXNoW1NDVFBfUENCSEFTSF9BU09DKHN0Y2ItPmFzb2MuYXNzb2NfaWQsCisJCQluZXdf
aW5wLT5oYXNoYXNvY2lkbWFyayldOworCQlMSVNUX0lOU0VSVF9IRUFEKGxoZCwgc3RjYiwgc2N0
cF90Y2Jhc29jaWRoYXNoKTsKKwl9CisJLyogT2suIExldCdzIHJlc3RhcnQgdGltZXIuICovCisJ
VEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQlzY3Rw
X3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9QQVRITVRVUkFJU0UsIG5ld19pbnAsCisJCSAg
ICBzdGNiLCBuZXQpOworCX0KKworCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOworCWlmIChuZXdf
aW5wLT5zY3RwX3RjYmhhc2ggIT0gTlVMTCkgeworCQlTQ1RQX0hBU0hfRlJFRShuZXdfaW5wLT5z
Y3RwX3RjYmhhc2gsIG5ld19pbnAtPnNjdHBfaGFzaG1hcmspOworCQluZXdfaW5wLT5zY3RwX3Rj
Ymhhc2ggPSBOVUxMOworCX0KKwlpZiAoKG5ld19pbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19CT1VOREFMTCkgPT0gMCkgeworCQkvKiBTdWJzZXQgYm91bmQsIHNvIGNvcHkgaW4gdGhl
IGxhZGRyIGxpc3QgZnJvbSB0aGUgb2xkX2lucCAqLworCQlMSVNUX0ZPUkVBQ0gob2xhZGRyLCAm
b2xkX2lucC0+c2N0cF9hZGRyX2xpc3QsIHNjdHBfbnh0X2FkZHIpIHsKKwkJCWxhZGRyID0gU0NU
UF9aT05FX0dFVChTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9sYWRkciksIHN0cnVjdCBzY3RwX2xh
ZGRyKTsKKwkJCWlmIChsYWRkciA9PSBOVUxMKSB7CisJCQkJLyoKKwkJCQkgKiBHYWssIHdoYXQg
Y2FuIHdlIGRvPyBUaGlzIGFzc29jIGlzIHJlYWxseQorCQkJCSAqIEhPU0VELiBXZSBwcm9iYWJs
eSBzaG91bGQgc2VuZCBhbiBhYm9ydAorCQkJCSAqIGhlcmUuCisJCQkJICovCisJCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX1BDQjEsICJBc3NvY2lhdGlvbiBob3NlZCBpbiBUQ1AgbW9kZWwsIG91dCBv
ZiBsYWRkciBtZW1vcnlcbiIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJU0NUUF9JTkNSX0xB
RERSX0NPVU5UKCk7CisJCQltZW1zZXQobGFkZHIsIDAsIHNpemVvZigqbGFkZHIpKTsKKwkJCSh2
b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZsYWRkci0+c3RhcnRfdGltZSk7CisJCQlsYWRkci0+
aWZhID0gb2xhZGRyLT5pZmE7CisJCQlhdG9taWNfYWRkX2ludCgmbGFkZHItPmlmYS0+cmVmY291
bnQsIDEpOworCQkJTElTVF9JTlNFUlRfSEVBRCgmbmV3X2lucC0+c2N0cF9hZGRyX2xpc3QsIGxh
ZGRyLAorCQkJICAgIHNjdHBfbnh0X2FkZHIpOworCQkJbmV3X2lucC0+bGFkZHJfY291bnQrKzsK
KwkJCWlmIChvbGFkZHIgPT0gc3RjYi0+YXNvYy5sYXN0X3VzZWRfYWRkcmVzcykgeworCQkJCXN0
Y2ItPmFzb2MubGFzdF91c2VkX2FkZHJlc3MgPSBsYWRkcjsKKwkJCX0KKwkJfQorCX0KKwkvKiBO
b3cgYW55IHJ1bm5pbmcgdGltZXJzIG5lZWQgdG8gYmUgYWRqdXN0ZWQuICovCisJaWYgKHN0Y2It
PmFzb2MuZGFja190aW1lci5lcCA9PSBvbGRfaW5wKSB7CisJCVNDVFBfSU5QX0RFQ1JfUkVGKG9s
ZF9pbnApOworCQlzdGNiLT5hc29jLmRhY2tfdGltZXIuZXAgPSBuZXdfaW5wOworCQlTQ1RQX0lO
UF9JTkNSX1JFRihuZXdfaW5wKTsKKwl9CisJaWYgKHN0Y2ItPmFzb2MuYXNjb25mX3RpbWVyLmVw
ID09IG9sZF9pbnApIHsKKwkJU0NUUF9JTlBfREVDUl9SRUYob2xkX2lucCk7CisJCXN0Y2ItPmFz
b2MuYXNjb25mX3RpbWVyLmVwID0gbmV3X2lucDsKKwkJU0NUUF9JTlBfSU5DUl9SRUYobmV3X2lu
cCk7CisJfQorCWlmIChzdGNiLT5hc29jLnN0cnJlc2V0X3RpbWVyLmVwID09IG9sZF9pbnApIHsK
KwkJU0NUUF9JTlBfREVDUl9SRUYob2xkX2lucCk7CisJCXN0Y2ItPmFzb2Muc3RycmVzZXRfdGlt
ZXIuZXAgPSBuZXdfaW5wOworCQlTQ1RQX0lOUF9JTkNSX1JFRihuZXdfaW5wKTsKKwl9CisJaWYg
KHN0Y2ItPmFzb2Muc2h1dF9ndWFyZF90aW1lci5lcCA9PSBvbGRfaW5wKSB7CisJCVNDVFBfSU5Q
X0RFQ1JfUkVGKG9sZF9pbnApOworCQlzdGNiLT5hc29jLnNodXRfZ3VhcmRfdGltZXIuZXAgPSBu
ZXdfaW5wOworCQlTQ1RQX0lOUF9JTkNSX1JFRihuZXdfaW5wKTsKKwl9CisJaWYgKHN0Y2ItPmFz
b2MuYXV0b2Nsb3NlX3RpbWVyLmVwID09IG9sZF9pbnApIHsKKwkJU0NUUF9JTlBfREVDUl9SRUYo
b2xkX2lucCk7CisJCXN0Y2ItPmFzb2MuYXV0b2Nsb3NlX3RpbWVyLmVwID0gbmV3X2lucDsKKwkJ
U0NUUF9JTlBfSU5DUl9SRUYobmV3X2lucCk7CisJfQorCWlmIChzdGNiLT5hc29jLmRlbGV0ZV9w
cmltX3RpbWVyLmVwID09IG9sZF9pbnApIHsKKwkJU0NUUF9JTlBfREVDUl9SRUYob2xkX2lucCk7
CisJCXN0Y2ItPmFzb2MuZGVsZXRlX3ByaW1fdGltZXIuZXAgPSBuZXdfaW5wOworCQlTQ1RQX0lO
UF9JTkNSX1JFRihuZXdfaW5wKTsKKwl9CisJLyogbm93IHdoYXQgYWJvdXQgdGhlIG5ldHM/ICov
CisJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQlp
ZiAobmV0LT5wbXR1X3RpbWVyLmVwID09IG9sZF9pbnApIHsKKwkJCVNDVFBfSU5QX0RFQ1JfUkVG
KG9sZF9pbnApOworCQkJbmV0LT5wbXR1X3RpbWVyLmVwID0gbmV3X2lucDsKKwkJCVNDVFBfSU5Q
X0lOQ1JfUkVGKG5ld19pbnApOworCQl9CisJCWlmIChuZXQtPmhiX3RpbWVyLmVwID09IG9sZF9p
bnApIHsKKwkJCVNDVFBfSU5QX0RFQ1JfUkVGKG9sZF9pbnApOworCQkJbmV0LT5oYl90aW1lci5l
cCA9IG5ld19pbnA7CisJCQlTQ1RQX0lOUF9JTkNSX1JFRihuZXdfaW5wKTsKKwkJfQorCQlpZiAo
bmV0LT5yeHRfdGltZXIuZXAgPT0gb2xkX2lucCkgeworCQkJU0NUUF9JTlBfREVDUl9SRUYob2xk
X2lucCk7CisJCQluZXQtPnJ4dF90aW1lci5lcCA9IG5ld19pbnA7CisJCQlTQ1RQX0lOUF9JTkNS
X1JFRihuZXdfaW5wKTsKKwkJfQorCX0KKwlTQ1RQX0lOUF9XVU5MT0NLKG5ld19pbnApOworCVND
VFBfSU5QX1dVTkxPQ0sob2xkX2lucCk7Cit9CisKKy8qCisgKiBpbnNlcnQgYW4gbGFkZHIgZW50
cnkgd2l0aCB0aGUgZ2l2ZW4gaWZhIGZvciB0aGUgZGVzaXJlZCBsaXN0CisgKi8KK3N0YXRpYyBp
bnQKK3NjdHBfaW5zZXJ0X2xhZGRyKHN0cnVjdCBzY3RwbGFkZHIgKmxpc3QsIHN0cnVjdCBzY3Rw
X2lmYSAqaWZhLCB1aW50MzJfdCBhY3QpCit7CisJc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyOwor
CisJbGFkZHIgPSBTQ1RQX1pPTkVfR0VUKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2xhZGRyKSwg
c3RydWN0IHNjdHBfbGFkZHIpOworCWlmIChsYWRkciA9PSBOVUxMKSB7CisJCS8qIG91dCBvZiBt
ZW1vcnk/ICovCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfUENCLCBFSU5WQUwpOworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQorCVNDVFBfSU5D
Ul9MQUREUl9DT1VOVCgpOworCW1lbXNldChsYWRkciwgMCwgc2l6ZW9mKCpsYWRkcikpOworCSh2
b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZsYWRkci0+c3RhcnRfdGltZSk7CisJbGFkZHItPmlm
YSA9IGlmYTsKKwlsYWRkci0+YWN0aW9uID0gYWN0OworCWF0b21pY19hZGRfaW50KCZpZmEtPnJl
ZmNvdW50LCAxKTsKKwkvKiBpbnNlcnQgaXQgKi8KKwlMSVNUX0lOU0VSVF9IRUFEKGxpc3QsIGxh
ZGRyLCBzY3RwX254dF9hZGRyKTsKKworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBSZW1vdmUg
YW4gbGFkZHIgZW50cnkgZnJvbSB0aGUgbG9jYWwgYWRkcmVzcyBsaXN0IChvbiBhbiBhc3NvYykK
KyAqLworc3RhdGljIHZvaWQKK3NjdHBfcmVtb3ZlX2xhZGRyKHN0cnVjdCBzY3RwX2xhZGRyICps
YWRkcikKK3sKKworCS8qIHJlbW92ZSBmcm9tIHRoZSBsaXN0ICovCisJTElTVF9SRU1PVkUobGFk
ZHIsIHNjdHBfbnh0X2FkZHIpOworCXNjdHBfZnJlZV9pZmEobGFkZHItPmlmYSk7CisJU0NUUF9a
T05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfbGFkZHIpLCBsYWRkcik7CisJU0NUUF9E
RUNSX0xBRERSX0NPVU5UKCk7Cit9CisjaWYgIShkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZp
bmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkKKworLyoKKyAqIERvbid0
IGtub3cgd2h5LCBidXQgd2l0aG91dCB0aGlzIHRoZXJlIGlzIGFuIHVua25vd24gcmVmZXJlbmNl
IHdoZW4KKyAqIGNvbXBpbGluZyBOZXRCU0QuLi4gaG1tCisgKi8KK2V4dGVybiB2b2lkIGluNl9z
aW42XzJfc2luKHN0cnVjdCBzb2NrYWRkcl9pbiAqLCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42
KTsKKyNlbmRpZgorCisvKiBzY3RwX2lmYXAgaXMgdXNlZCB0byBieXBhc3Mgbm9ybWFsIGxvY2Fs
IGFkZHJlc3MgdmFsaWRhdGlvbiBjaGVja3MgKi8KK2ludAorI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitzY3RwX2lucGNiX2JpbmQoc3RydWN0IHNv
Y2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKKyAgICAgICAgICAgICAgICBzdHJ1Y3Qg
c2N0cF9pZmEgKnNjdHBfaWZhcCwgc3RydWN0IHRocmVhZCAqcCkKKyNlbGlmIGRlZmluZWQoX1dJ
TjMyKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorc2N0cF9pbnBjYl9iaW5kKHN0cnVjdCBz
b2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCisgICAgICAgICAgICAgICAgc3RydWN0
IHNjdHBfaWZhICpzY3RwX2lmYXAsIFBLVEhSRUFEIHApCisjZWxzZQorc2N0cF9pbnBjYl9iaW5k
KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCisgICAgICAgICAgICAg
ICAgc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYXAsIHN0cnVjdCBwcm9jICpwKQorI2VuZGlmCit7
CisJLyogYmluZCBhIGVwIHRvIGEgc29ja2V0IGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc2N0cHBjYmhl
YWQgKmhlYWQ7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgKmlucF90bXA7CisjaWYgKGRlZmlu
ZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSkgJiYgIWRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKwlzdHJ1Y3QgaW5wY2IgKmlwX2lucDsKKyNlbmRpZgorCWludCBwb3J0X3JldXNl
X2FjdGl2ZSA9IDA7CisJaW50IGJpbmRhbGw7CisjaWZkZWYgU0NUUF9NVlJGCisJaW50IGk7Cisj
ZW5kaWYKKwl1aW50MTZfdCBscG9ydDsKKwlpbnQgZXJyb3I7CisJdWludDMyX3QgdnJmX2lkOwor
CisJbHBvcnQgPSAwOworCWJpbmRhbGwgPSAxOworCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAq
KXNvLT5zb19wY2I7CisjaWYgKGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBM
RV9fKSkgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlpcF9pbnAgPSAoc3RydWN0IGlucGNi
ICopc28tPnNvX3BjYjsKKyNlbmRpZgorI2lmZGVmIFNDVFBfREVCVUcKKwlpZiAoYWRkcikgewor
CQlTQ1RQREJHKFNDVFBfREVCVUdfUENCMSwgIkJpbmQgY2FsbGVkIHBvcnQ6ICVkXG4iLAorCQkJ
bnRvaHMoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyKS0+c2luX3BvcnQpKTsKKwkJU0NUUERC
RyhTQ1RQX0RFQlVHX1BDQjEsICJBZGRyOiAiKTsKKwkJU0NUUERCR19BRERSKFNDVFBfREVCVUdf
UENCMSwgYWRkcik7CisJfQorI2VuZGlmCisJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19VTkJPVU5EKSA9PSAwKSB7CisJCS8qIGFscmVhZHkgZGlkIGEgYmluZCwgc3Vic2Vx
dWVudCBiaW5kcyBOT1QgYWxsb3dlZCAhICovCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVJTlZBTCk7CisJCXJldHVybiAoRUlOVkFM
KTsKKwl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKyNpZmRlZiBJTlZBUklBTlRTCisJaWYgKHAgPT0gTlVMTCkKKwkJcGFuaWMoIm51bGwgcHJv
Yy90aHJlYWQiKTsKKyNlbmRpZgorI2VuZGlmCisJaWYgKGFkZHIgIT0gTlVMTCkgeworCQlzd2l0
Y2ggKGFkZHItPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJY2FzZSBBRl9JTkVUOgorCQl7
CisJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKworCQkJLyogSVBWNl9WNk9OTFkgc29ja2V0
PyAqLworCQkJaWYgKFNDVFBfSVBWNl9WNk9OTFkoaW5wKSkgeworCQkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVJTlZBTCk7CisJCQkJ
cmV0dXJuIChFSU5WQUwpOworCQkJfQorI2lmZGVmIEhBVkVfU0FfTEVOCisJCQlpZiAoYWRkci0+
c2FfbGVuICE9IHNpemVvZigqc2luKSkgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVJTlZBTCk7CisJCQkJcmV0dXJuIChFSU5W
QUwpOworCQkJfQorI2VuZGlmCisKKwkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRy
OworCQkJbHBvcnQgPSBzaW4tPnNpbl9wb3J0OworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYm
ICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkvKgorCQkJICogRm9yIExPT1BCQUNLIHRoZSBw
cmlzb25fbG9jYWxfaXA0KCkgY2FsbCB3aWxsIHRyYW5zbXV0ZSB0aGUgaXAgYWRkcmVzcworCQkJ
ICogdG8gdGhlIHByb3BlciB2YWx1ZS4KKwkJCSAqLworCQkJaWYgKHAgJiYgKGVycm9yID0gcHJp
c29uX2xvY2FsX2lwNChwLT50ZF91Y3JlZCwgJnNpbi0+c2luX2FkZHIpKSAhPSAwKSB7CisJCQkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwg
ZXJyb3IpOworCQkJCXJldHVybiAoZXJyb3IpOworCQkJfQorI2VuZGlmCisJCQlpZiAoc2luLT5z
aW5fYWRkci5zX2FkZHIgIT0gSU5BRERSX0FOWSkgeworCQkJCWJpbmRhbGwgPSAwOworCQkJfQor
CQkJYnJlYWs7CisJCX0KKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCWNhc2UgQUZfSU5FVDY6CisJ
CXsKKwkJCS8qIE9ubHkgZm9yIHB1cmUgSVB2NiBBZGRyZXNzLiAoTm8gSVB2NCBNYXBwZWQhKSAq
LworCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKworCQkJc2luNiA9IChzdHJ1Y3Qgc29j
a2FkZHJfaW42ICopYWRkcjsKKworI2lmZGVmIEhBVkVfU0FfTEVOCisJCQlpZiAoYWRkci0+c2Ff
bGVuICE9IHNpemVvZigqc2luNikpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFSU5WQUwpOworCQkJCXJldHVybiAoRUlOVkFM
KTsKKwkJCX0KKyNlbmRpZgorCQkJbHBvcnQgPSBzaW42LT5zaW42X3BvcnQ7CisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCS8qCisJCQkgKiBG
b3IgTE9PUEJBQ0sgdGhlIHByaXNvbl9sb2NhbF9pcDYoKSBjYWxsIHdpbGwgdHJhbnNtdXRlIHRo
ZSBpcHY2IGFkZHJlc3MKKwkJCSAqIHRvIHRoZSBwcm9wZXIgdmFsdWUuCisJCQkgKi8KKwkJCWlm
IChwICYmIChlcnJvciA9IHByaXNvbl9sb2NhbF9pcDYocC0+dGRfdWNyZWQsICZzaW42LT5zaW42
X2FkZHIsCisJCQkgICAgKFNDVFBfSVBWNl9WNk9OTFkoaW5wKSAhPSAwKSkpICE9IDApIHsKKwkJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENC
LCBlcnJvcik7CisJCQkJcmV0dXJuIChlcnJvcik7CisJCQl9CisjZW5kaWYKKwkJCWlmICghSU42
X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCQliaW5kYWxsID0g
MDsKKyNpZmRlZiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFCisJCQkJLyogS0FNRSBoYWNrOiBlbWJl
ZCBzY29wZWlkICovCisjaWYgZGVmaW5lZChTQ1RQX0tBTUUpCisJCQkJaWYgKHNhNl9lbWJlZHNj
b3BlKHNpbjYsIE1PRFVMRV9HTE9CQUwoaXA2X3VzZV9kZWZ6b25lKSkgIT0gMCkgeworCQkJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBF
SU5WQUwpOworCQkJCQlyZXR1cm4gKEVJTlZBTCk7CisJCQkJfQorI2VsaWYgZGVmaW5lZChfX0FQ
UExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYgZGVmaW5lZChBUFBMRV9MRU9Q
QVJEKSB8fCBkZWZpbmVkKEFQUExFX1NOT1dMRU9QQVJEKQorCQkJCWlmIChpbjZfZW1iZWRzY29w
ZSgmc2luNi0+c2luNl9hZGRyLCBzaW42LCBpcF9pbnAsIE5VTEwpICE9IDApIHsKKyNlbHNlCisJ
CQkJaWYgKGluNl9lbWJlZHNjb3BlKCZzaW42LT5zaW42X2FkZHIsIHNpbjYsIGlwX2lucCwgTlVM
TCwgTlVMTCkgIT0gMCkgeworI2VuZGlmCisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVJTlZBTCk7CisJCQkJCXJldHVybiAoRUlO
VkFMKTsKKwkJCQl9CisjZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorCQkJCWVycm9yID0gc2NvcGU2X2NoZWNrX2lkKHNpbjYsIE1PRFVMRV9HTE9C
QUwoaXA2X3VzZV9kZWZ6b25lKSk7CisJCQkJaWYgKGVycm9yICE9IDApIHsKKwkJCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgZXJyb3Ip
OworCQkJCQlyZXR1cm4gKGVycm9yKTsKKwkJCQl9CisjZWxzZQorCQkJCWlmIChpbjZfZW1iZWRz
Y29wZSgmc2luNi0+c2luNl9hZGRyLCBzaW42KSAhPSAwKSB7CisJCQkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVJTlZBTCk7CisJCQkJ
CXJldHVybiAoRUlOVkFMKTsKKwkJCQl9CisjZW5kaWYKKyNlbmRpZiAvKiBTQ1RQX0VNQkVEREVE
X1Y2X1NDT1BFICovCisJCQl9CisjaWZuZGVmIFNDT1BFRFJPVVRJTkcKKwkJCS8qIHRoaXMgbXVz
dCBiZSBjbGVhcmVkIGZvciBpZmFfaWZ3aXRoYWRkcigpICovCisJCQlzaW42LT5zaW42X3Njb3Bl
X2lkID0gMDsKKyNlbmRpZiAvKiBTQ09QRURST1VUSU5HICovCisJCQlicmVhazsKKwkJfQorI2Vu
ZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQljYXNlIEFGX0NPTk46CisJCXsKKwkJ
CXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsKKworI2lmZGVmIEhBVkVfU0FfTEVOCisJCQlp
ZiAoYWRkci0+c2FfbGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpIHsKKwkJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBF
SU5WQUwpOworCQkJCXJldHVybiAoRUlOVkFMKTsKKwkJCX0KKyNlbmRpZgorCQkJc2Nvbm4gPSAo
c3RydWN0IHNvY2thZGRyX2Nvbm4gKilhZGRyOworCQkJbHBvcnQgPSBzY29ubi0+c2Nvbm5fcG9y
dDsKKwkJCWlmIChzY29ubi0+c2Nvbm5fYWRkciAhPSBOVUxMKSB7CisJCQkJYmluZGFsbCA9IDA7
CisJCQl9CisJCQlicmVhazsKKwkJfQorI2VuZGlmCisJCWRlZmF1bHQ6CisJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFQUZOT1NVUFBP
UlQpOworCQkJcmV0dXJuIChFQUZOT1NVUFBPUlQpOworCQl9CisJfQorCVNDVFBfSU5QX0lORk9f
V0xPQ0soKTsKKwlTQ1RQX0lOUF9XTE9DSyhpbnApOworCS8qIFNldHVwIGEgdnJmX2lkIHRvIGJl
IHRoZSBkZWZhdWx0IGZvciB0aGUgbm9uLWJpbmQtYWxsIGNhc2UuICovCisJdnJmX2lkID0gaW5w
LT5kZWZfdnJmX2lkOworCisJLyogaW5jcmVhc2Ugb3VyIGNvdW50IGR1ZSB0byB0aGUgdW5sb2Nr
IHdlIGRvICovCisJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKKwlpZiAobHBvcnQpIHsKKwkJLyoK
KwkJICogRGlkIHRoZSBjYWxsZXIgc3BlY2lmeSBhIHBvcnQ/IGlmIHNvIHdlIG11c3Qgc2VlIGlm
IGFuIGVwCisJCSAqIGFscmVhZHkgaGFzIHRoaXMgb25lIGJvdW5kLgorCQkgKi8KKwkJLyogZ290
IHRvIGJlIHJvb3QgdG8gZ2V0IGF0IGxvdyBwb3J0cyAqLworI2lmICEoZGVmaW5lZChfV0lOMzIp
ICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQorCQlpZiAobnRvaHMobHBvcnQpIDwgSVBQT1JU
X1JFU0VSVkVEKSB7CisJCQlpZiAoKHAgIT0gTlVMTCkgJiYgKChlcnJvciA9CisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQkgIHByaXZfY2hl
Y2socCwgUFJJVl9ORVRJTkVUX1JFU0VSVkVEUE9SVCkKKyNlbGlmIGRlZmluZWQoX19BUFBMRV9f
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCSAgc3VzZXIocC0+cF91Y3JlZCwgJnAt
PnBfYWNmbGFnKQorI2VsaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKSAvKiBtdXN0IGJlIHRydWUg
dG8gdXNlIHJhdyBzb2NrZXQgKi8KKwkJCQkgIDEKKyNlbHNlCisJCQkJICBzdXNlcihwLCAwKQor
I2VuZGlmCisJCQkJICAgICkgIT0gMCkpIHsKKwkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOwor
CQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsK
KwkJCQlyZXR1cm4gKGVycm9yKTsKKwkJCX0KKwkJfQorI2VuZGlmCisJCVNDVFBfSU5QX1dVTkxP
Q0soaW5wKTsKKwkJaWYgKGJpbmRhbGwpIHsKKyNpZmRlZiBTQ1RQX01WUkYKKwkJCWZvciAoaSA9
IDA7IGkgPCBpbnAtPm51bV92cmZzOyBpKyspIHsKKwkJCQl2cmZfaWQgPSBpbnAtPm1fdnJmX2lk
c1tpXTsKKyNlbHNlCisJCQkJdnJmX2lkID0gaW5wLT5kZWZfdnJmX2lkOworI2VuZGlmCisJCQkJ
aW5wX3RtcCA9IHNjdHBfcGNiX2ZpbmRlcChhZGRyLCAwLCAxLCB2cmZfaWQpOworCQkJCWlmIChp
bnBfdG1wICE9IE5VTEwpIHsKKwkJCQkJLyoKKwkJCQkJICogbG9jayBndXkgcmV0dXJuZWQgYW5k
IGxvd2VyIGNvdW50CisJCQkJCSAqIG5vdGUgdGhhdCB3ZSBhcmUgbm90IGJvdW5kIHNvCisJCQkJ
CSAqIGlucF90bXAgc2hvdWxkIE5FVkVSIGJlIGlucC4gQW5kCisJCQkJCSAqIGl0IGlzIHRoaXMg
aW5wIChpbnBfdG1wKSB0aGF0IGdldHMKKwkJCQkJICogdGhlIHJlZmVyZW5jZSBidW1wLCBzbyB3
ZSBtdXN0CisJCQkJCSAqIGxvd2VyIGl0LgorCQkJCQkgKi8KKwkJCQkJU0NUUF9JTlBfREVDUl9S
RUYoaW5wX3RtcCk7CisJCQkJCS8qIHVubG9jayBpbmZvICovCisJCQkJCWlmICgoc2N0cF9pc19m
ZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUE9SVFJFVVNFKSkgJiYKKwkJCQkJICAgIChz
Y3RwX2lzX2ZlYXR1cmVfb24oaW5wX3RtcCwgU0NUUF9QQ0JfRkxBR1NfUE9SVFJFVVNFKSkpIHsK
KwkJCQkJCS8qIE9rLCBtdXN0IGJlIG9uZS0yLW9uZSBhbmQgYWxsb3dpbmcgcG9ydCByZS11c2Ug
Ki8KKwkJCQkJCXBvcnRfcmV1c2VfYWN0aXZlID0gMTsKKwkJCQkJCWdvdG8gY29udGludWVfYW55
d2F5OworCQkJCQl9CisJCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQkJCVNDVFBfSU5Q
X0lORk9fV1VOTE9DSygpOworCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFQUREUklOVVNFKTsKKwkJCQkJcmV0dXJuIChFQUREUklO
VVNFKTsKKwkJCQl9CisjaWZkZWYgU0NUUF9NVlJGCisJCQl9CisjZW5kaWYKKwkJfSBlbHNlIHsK
KwkJCWlucF90bXAgPSBzY3RwX3BjYl9maW5kZXAoYWRkciwgMCwgMSwgdnJmX2lkKTsKKwkJCWlm
IChpbnBfdG1wICE9IE5VTEwpIHsKKwkJCQkvKgorCQkJCSAqIGxvY2sgZ3V5IHJldHVybmVkIGFu
ZCBsb3dlciBjb3VudCBub3RlCisJCQkJICogdGhhdCB3ZSBhcmUgbm90IGJvdW5kIHNvIGlucF90
bXAgc2hvdWxkCisJCQkJICogTkVWRVIgYmUgaW5wLiBBbmQgaXQgaXMgdGhpcyBpbnAgKGlucF90
bXApCisJCQkJICogdGhhdCBnZXRzIHRoZSByZWZlcmVuY2UgYnVtcCwgc28gd2UgbXVzdAorCQkJ
CSAqIGxvd2VyIGl0LgorCQkJCSAqLworCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucF90bXApOwor
CQkJCS8qIHVubG9jayBpbmZvICovCisJCQkJaWYgKChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBT
Q1RQX1BDQl9GTEFHU19QT1JUUkVVU0UpKSAmJgorCQkJCSAgICAoc2N0cF9pc19mZWF0dXJlX29u
KGlucF90bXAsIFNDVFBfUENCX0ZMQUdTX1BPUlRSRVVTRSkpKSB7CisJCQkJCS8qIE9rLCBtdXN0
IGJlIG9uZS0yLW9uZSBhbmQgYWxsb3dpbmcgcG9ydCByZS11c2UgKi8KKwkJCQkJcG9ydF9yZXVz
ZV9hY3RpdmUgPSAxOworCQkJCQlnb3RvIGNvbnRpbnVlX2FueXdheTsKKwkJCQl9CisJCQkJU0NU
UF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJCQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKKwkJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBF
QUREUklOVVNFKTsKKwkJCQlyZXR1cm4gKEVBRERSSU5VU0UpOworCQkJfQorCQl9CisJY29udGlu
dWVfYW55d2F5OgorCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQlpZiAoYmluZGFsbCkgeworCQkJ
LyogdmVyaWZ5IHRoYXQgbm8gbHBvcnQgaXMgbm90IHVzZWQgYnkgYSBzaW5nbGV0b24gKi8KKwkJ
CWlmICgocG9ydF9yZXVzZV9hY3RpdmUgPT0gMCkgJiYKKwkJCSAgICAoaW5wX3RtcCA9IHNjdHBf
aXNwb3J0X2ludXNlKGlucCwgbHBvcnQsIHZyZl9pZCkpKSB7CisJCQkJLyogU29ycnkgc29tZW9u
ZSBhbHJlYWR5IGhhcyB0aGlzIG9uZSBib3VuZCAqLworCQkJCWlmICgoc2N0cF9pc19mZWF0dXJl
X29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUE9SVFJFVVNFKSkgJiYKKwkJCQkgICAgKHNjdHBfaXNf
ZmVhdHVyZV9vbihpbnBfdG1wLCBTQ1RQX1BDQl9GTEFHU19QT1JUUkVVU0UpKSkgeworCQkJCQlw
b3J0X3JldXNlX2FjdGl2ZSA9IDE7CisJCQkJfSBlbHNlIHsKKwkJCQkJU0NUUF9JTlBfREVDUl9S
RUYoaW5wKTsKKwkJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQkJCQlTQ1RQX0lOUF9JTkZP
X1dVTkxPQ0soKTsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1BDQiwgRUFERFJJTlVTRSk7CisJCQkJCXJldHVybiAoRUFERFJJTlVTRSk7
CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJdWludDE2X3QgZmlyc3QsIGxhc3QsIGNh
bmRpZGF0ZTsKKwkJdWludDE2X3QgY291bnQ7CisJCWludCBkb25lOworCisjaWYgZGVmaW5lZChf
V0lOMzIpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWZpcnN0ID0gMTsKKwkJbGFzdCA9
IDB4ZmZmZjsKKyNlbHNlCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkvKiBUT0RPIGVu
c3VyZSB1aWQgaXMgMCwgZXRjLi4uICovCisjZWxpZiAoZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwg
ZGVmaW5lZChfX0FQUExFX18pKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlpZiAoaXBf
aW5wLT5pbnBfZmxhZ3MgJiBJTlBfSElHSFBPUlQpIHsKKwkJCWZpcnN0ID0gTU9EVUxFX0dMT0JB
TChpcHBvcnRfaGlmaXJzdGF1dG8pOworCQkJbGFzdCA9IE1PRFVMRV9HTE9CQUwoaXBwb3J0X2hp
bGFzdGF1dG8pOworCQl9IGVsc2UgaWYgKGlwX2lucC0+aW5wX2ZsYWdzICYgSU5QX0xPV1BPUlQp
IHsKKwkJCWlmIChwICYmIChlcnJvciA9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJCQkg
IHByaXZfY2hlY2socCwgUFJJVl9ORVRJTkVUX1JFU0VSVkVEUE9SVCkKKyNlbGlmIGRlZmluZWQo
X19BUFBMRV9fKQorCQkJCSAgc3VzZXIocC0+cF91Y3JlZCwgJnAtPnBfYWNmbGFnKQorI2Vsc2UK
KwkJCQkgIHN1c2VyKHAsIDApCisjZW5kaWYKKwkJCQkgICAgKSkgeworCQkJCVNDVFBfSU5QX0RF
Q1JfUkVGKGlucCk7CisJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQkJCVNDVFBfSU5QX0lO
Rk9fV1VOTE9DSygpOworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9QQ0IsIGVycm9yKTsKKwkJCQlyZXR1cm4gKGVycm9yKTsKKwkJCX0KKwkJ
CWZpcnN0ID0gTU9EVUxFX0dMT0JBTChpcHBvcnRfbG93Zmlyc3RhdXRvKTsKKwkJCWxhc3QgPSBN
T0RVTEVfR0xPQkFMKGlwcG9ydF9sb3dsYXN0YXV0byk7CisJCX0gZWxzZSB7CisjZW5kaWYKKwkJ
CWZpcnN0ID0gTU9EVUxFX0dMT0JBTChpcHBvcnRfZmlyc3RhdXRvKTsKKwkJCWxhc3QgPSBNT0RV
TEVfR0xPQkFMKGlwcG9ydF9sYXN0YXV0byk7CisjaWYgKGRlZmluZWQoX19GcmVlQlNEX18pIHx8
IGRlZmluZWQoX19BUFBMRV9fKSkgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJfQorI2Vu
ZGlmCisjZW5kaWYKKwkJaWYgKGZpcnN0ID4gbGFzdCkgeworCQkJdWludDE2X3QgdGVtcDsKKwor
CQkJdGVtcCA9IGZpcnN0OworCQkJZmlyc3QgPSBsYXN0OworCQkJbGFzdCA9IHRlbXA7CisJCX0K
KwkJY291bnQgPSBsYXN0IC0gZmlyc3QgKyAxOyAvKiBudW1iZXIgb2YgY2FuZGlkYXRlcyAqLwor
CQljYW5kaWRhdGUgPSBmaXJzdCArIHNjdHBfc2VsZWN0X2luaXRpYWxfVFNOKCZpbnAtPnNjdHBf
ZXApICUgKGNvdW50KTsKKworCQlkb25lID0gMDsKKwkJd2hpbGUgKCFkb25lKSB7CisjaWZkZWYg
U0NUUF9NVlJGCisJCQlmb3IgKGkgPSAwOyBpIDwgaW5wLT5udW1fdnJmczsgaSsrKSB7CisJCQkJ
aWYgKHNjdHBfaXNwb3J0X2ludXNlKGlucCwgaHRvbnMoY2FuZGlkYXRlKSwgaW5wLT5tX3ZyZl9p
ZHNbaV0pICE9IE5VTEwpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKGkgPT0g
aW5wLT5udW1fdnJmcykgeworCQkJCWRvbmUgPSAxOworCQkJfQorI2Vsc2UKKwkJCWlmIChzY3Rw
X2lzcG9ydF9pbnVzZShpbnAsIGh0b25zKGNhbmRpZGF0ZSksIGlucC0+ZGVmX3ZyZl9pZCkgPT0g
TlVMTCkgeworCQkJCWRvbmUgPSAxOworCQkJfQorI2VuZGlmCisJCQlpZiAoIWRvbmUpIHsKKwkJ
CQlpZiAoLS1jb3VudCA9PSAwKSB7CisJCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQkJ
CVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCQkJU0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7CisJ
CQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9Q
Q0IsIEVBRERSSU5VU0UpOworCQkJCQlyZXR1cm4gKEVBRERSSU5VU0UpOworCQkJCX0KKwkJCQlp
ZiAoY2FuZGlkYXRlID09IGxhc3QpCisJCQkJCWNhbmRpZGF0ZSA9IGZpcnN0OworCQkJCWVsc2UK
KwkJCQkJY2FuZGlkYXRlID0gY2FuZGlkYXRlICsgMTsKKwkJCX0KKwkJfQorCQlscG9ydCA9IGh0
b25zKGNhbmRpZGF0ZSk7CisJfQorCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJaWYgKGlucC0+
c2N0cF9mbGFncyAmIChTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSB8CisJCQkgICAgICAgU0NU
UF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpKSB7CisJCS8qCisJCSAqIHRoaXMgcmVhbGx5IHNo
b3VsZCBub3QgaGFwcGVuLiBUaGUgZ3V5IGRpZCBhIG5vbi1ibG9ja2luZworCQkgKiBiaW5kIGFu
ZCB0aGVuIGRpZCBhIGNsb3NlIGF0IHRoZSBzYW1lIHRpbWUuCisJCSAqLworCQlTQ1RQX0lOUF9X
VU5MT0NLKGlucCk7CisJCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOworCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFSU5WQUwpOworCQly
ZXR1cm4gKEVJTlZBTCk7CisJfQorCS8qIG9rIHdlIGxvb2sgY2xlYXIgdG8gZ2l2ZSBvdXQgdGhp
cyBwb3J0LCBzbyBsZXRzIHNldHVwIHRoZSBiaW5kaW5nICovCisJaWYgKGJpbmRhbGwpIHsKKwkJ
LyogYmluZGluZyB0byBhbGwgYWRkcmVzc2VzLCBzbyBqdXN0IHNldCBpbiB0aGUgcHJvcGVyIGZs
YWdzICovCisJCWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTDsKKwkJ
Lyogc2V0IHRoZSBhdXRvbWF0aWMgYWRkciBjaGFuZ2VzIGZyb20ga2VybmVsIGZsYWcgKi8KKwkJ
aWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hdXRvX2FzY29uZikgPT0gMCkgeworCQkJc2N0cF9m
ZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX0RPX0FTQ09ORik7CisJCQlzY3RwX2ZlYXR1
cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfQVVUT19BU0NPTkYpOworCQl9IGVsc2UgeworCQkJ
c2N0cF9mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfRE9fQVNDT05GKTsKKwkJCXNjdHBf
ZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0FVVE9fQVNDT05GKTsKKwkJfQorCQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX211bHRpcGxlX2FzY29uZnMpID09IDApIHsKKwkJCXNjdHBf
ZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19NVUxUSVBMRV9BU0NPTkZTKTsKKwkJfSBl
bHNlIHsKKwkJCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX01VTFRJUExFX0FT
Q09ORlMpOworCQl9CisJCS8qIHNldCB0aGUgYXV0b21hdGljIG1vYmlsaXR5X2Jhc2UgZnJvbSBr
ZXJuZWwKKwkJICAgZmxhZyAoYnkgbWljY2hpZSkKKwkJKi8KKwkJaWYgKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9tb2JpbGl0eV9iYXNlKSA9PSAwKSB7CisJCQlzY3RwX21vYmlsaXR5X2ZlYXR1cmVf
b2ZmKGlucCwgU0NUUF9NT0JJTElUWV9CQVNFKTsKKwkJCXNjdHBfbW9iaWxpdHlfZmVhdHVyZV9v
ZmYoaW5wLCBTQ1RQX01PQklMSVRZX1BSSU1fREVMRVRFRCk7CisJCX0gZWxzZSB7CisJCQlzY3Rw
X21vYmlsaXR5X2ZlYXR1cmVfb24oaW5wLCBTQ1RQX01PQklMSVRZX0JBU0UpOworCQkJc2N0cF9t
b2JpbGl0eV9mZWF0dXJlX29mZihpbnAsIFNDVFBfTU9CSUxJVFlfUFJJTV9ERUxFVEVEKTsKKwkJ
fQorCQkvKiBzZXQgdGhlIGF1dG9tYXRpYyBtb2JpbGl0eV9mYXN0aGFuZG9mZiBmcm9tIGtlcm5l
bAorCQkgICBmbGFnIChieSBtaWNjaGllKQorCQkqLworCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX21vYmlsaXR5X2Zhc3RoYW5kb2ZmKSA9PSAwKSB7CisJCQlzY3RwX21vYmlsaXR5X2ZlYXR1
cmVfb2ZmKGlucCwgU0NUUF9NT0JJTElUWV9GQVNUSEFORE9GRik7CisJCQlzY3RwX21vYmlsaXR5
X2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9NT0JJTElUWV9QUklNX0RFTEVURUQpOworCQl9IGVsc2Ug
eworCQkJc2N0cF9tb2JpbGl0eV9mZWF0dXJlX29uKGlucCwgU0NUUF9NT0JJTElUWV9GQVNUSEFO
RE9GRik7CisJCQlzY3RwX21vYmlsaXR5X2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9NT0JJTElUWV9Q
UklNX0RFTEVURUQpOworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogYmluZCBzcGVjaWZpYywg
bWFrZSBzdXJlIGZsYWdzIGlzIG9mZiBhbmQgYWRkIGEgbmV3CisJCSAqIGFkZHJlc3Mgc3RydWN0
dXJlIHRvIHRoZSBzY3RwX2FkZHJfbGlzdCBpbnNpZGUgdGhlIGVwCisJCSAqIHN0cnVjdHVyZS4K
KwkJICoKKwkJICogV2Ugd2lsbCBuZWVkIHRvIGFsbG9jYXRlIG9uZSBhbmQgaW5zZXJ0IGl0IGF0
IHRoZSBoZWFkLiBUaGUKKwkJICogc29ja2V0b3B0IGNhbGwgY2FuIGp1c3QgaW5zZXJ0IG5ldyBh
ZGRyZXNzZXMgaW4gdGhlcmUgYXMKKwkJICogd2VsbC4gSXQgd2lsbCBhbHNvIGhhdmUgdG8gZG8g
dGhlIGVtYmVkIHNjb3BlIGthbWUgaGFjaworCQkgKiB0b28gKGJlZm9yZSBhZGRpbmcpLgorCQkg
Ki8KKwkJc3RydWN0IHNjdHBfaWZhICppZmE7CisJCXVuaW9uIHNjdHBfc29ja3N0b3JlIHN0b3Jl
OworCisJCW1lbXNldCgmc3RvcmUsIDAsIHNpemVvZihzdG9yZSkpOworCQlzd2l0Y2ggKGFkZHIt
PnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJY2FzZSBBRl9JTkVUOgorCQkJbWVtY3B5KCZz
dG9yZS5zaW4sIGFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwkJCXN0b3JlLnNp
bi5zaW5fcG9ydCA9IDA7CisJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCWNhc2Ug
QUZfSU5FVDY6CisJCQltZW1jcHkoJnN0b3JlLnNpbjYsIGFkZHIsIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW42KSk7CisJCQlzdG9yZS5zaW42LnNpbjZfcG9ydCA9IDA7CisJCQlicmVhazsKKyNl
bmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJY2FzZSBBRl9DT05OOgorCQkJbWVt
Y3B5KCZzdG9yZS5zY29ubiwgYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7CisJ
CQlzdG9yZS5zY29ubi5zY29ubl9wb3J0ID0gMDsKKwkJCWJyZWFrOworI2VuZGlmCisJCWRlZmF1
bHQ6CisJCQlicmVhazsKKwkJfQorCQkvKgorCQkgKiBmaXJzdCBmaW5kIHRoZSBpbnRlcmZhY2Ug
d2l0aCB0aGUgYm91bmQgYWRkcmVzcyBuZWVkIHRvCisJCSAqIHplcm8gb3V0IHRoZSBwb3J0IHRv
IGZpbmQgdGhlIGFkZHJlc3MhIHl1Y2shIGNhbid0IGRvCisJCSAqIHRoaXMgZWFybGllciBzaW5j
ZSBuZWVkIHBvcnQgZm9yIHNjdHBfcGNiX2ZpbmRlcCgpCisJCSAqLworCQlpZiAoc2N0cF9pZmFw
ICE9IE5VTEwpIHsKKwkJCWlmYSA9IHNjdHBfaWZhcDsKKwkJfSBlbHNlIHsKKwkJCS8qIE5vdGUg
Zm9yIEJTRCB3ZSBoaXQgaGVyZSBhbHdheXMgb3RoZXIKKwkJCSAqIE8vUydzIHdpbGwgcGFzcyB0
aGluZ3MgaW4gdmlhIHRoZQorCQkJICogc2N0cF9pZmFwIGFyZ3VtZW50LgorCQkJICovCisJCQlp
ZmEgPSBzY3RwX2ZpbmRfaWZhX2J5X2FkZHIoJnN0b3JlLnNhLAorCQkJCQkJICAgIHZyZl9pZCwg
U0NUUF9BRERSX05PVF9MT0NLRUQpOworCQl9CisJCWlmIChpZmEgPT0gTlVMTCkgeworCQkJLyog
Q2FuJ3QgZmluZCBhbiBpbnRlcmZhY2Ugd2l0aCB0aGF0IGFkZHJlc3MgKi8KKwkJCVNDVFBfSU5Q
X1dVTkxPQ0soaW5wKTsKKwkJCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOworCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUFERFJOT1RB
VkFJTCk7CisJCQlyZXR1cm4gKEVBRERSTk9UQVZBSUwpOworCQl9CisjaWZkZWYgSU5FVDYKKwkJ
aWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJLyogR0FLLCBtb3JlIEZJWE1F
IElGQSBsb2NrPyAqLworCQkJaWYgKGlmYS0+bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0FERFJfSUZB
X1VOVVNFQUJMRSkgeworCQkJCS8qIENhbid0IGJpbmQgYSBub24tZXhpc3RlbnQgYWRkci4gKi8K
KwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQkJU0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7
CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1BDQiwgRUlOVkFMKTsKKwkJCQlyZXR1cm4gKEVJTlZBTCk7CisJCQl9CisJCX0KKyNlbmRpZgor
CQkvKiB3ZSdyZSBub3QgYm91bmQgYWxsICovCisJCWlucC0+c2N0cF9mbGFncyAmPSB+U0NUUF9Q
Q0JfRkxBR1NfQk9VTkRBTEw7CisJCS8qIGFsbG93IGJpbmR4KCkgdG8gc2VuZCBBU0NPTkYncyBm
b3IgYmluZGluZyBjaGFuZ2VzICovCisJCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZM
QUdTX0RPX0FTQ09ORik7CisJCS8qIGNsZWFyIGF1dG9tYXRpYyBhZGRyIGNoYW5nZXMgZnJvbSBr
ZXJuZWwgZmxhZyAqLworCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfQVVU
T19BU0NPTkYpOworCisJCS8qIGFkZCB0aGlzIGFkZHJlc3MgdG8gdGhlIGVuZHBvaW50IGxpc3Qg
Ki8KKwkJZXJyb3IgPSBzY3RwX2luc2VydF9sYWRkcigmaW5wLT5zY3RwX2FkZHJfbGlzdCwgaWZh
LCAwKTsKKwkJaWYgKGVycm9yICE9IDApIHsKKwkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJ
CVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOworCQkJcmV0dXJuIChlcnJvcik7CisJCX0KKwkJaW5w
LT5sYWRkcl9jb3VudCsrOworCX0KKwkvKiBmaW5kIHRoZSBidWNrZXQgKi8KKwlpZiAocG9ydF9y
ZXVzZV9hY3RpdmUpIHsKKwkJLyogUHV0IGl0IGludG8gdGNwIDEtMi0xIGhhc2ggKi8KKwkJaGVh
ZCA9ICZTQ1RQX0JBU0VfSU5GTyhzY3RwX3RjcGVwaGFzaClbU0NUUF9QQ0JIQVNIX0FMTEFERFIo
bHBvcnQsIFNDVFBfQkFTRV9JTkZPKGhhc2h0Y3BtYXJrKSldOworCQlpbnAtPnNjdHBfZmxhZ3Mg
fD0gU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTDsKKwl9IGVsc2UgeworCQloZWFkID0gJlNDVFBf
QkFTRV9JTkZPKHNjdHBfZXBoYXNoKVtTQ1RQX1BDQkhBU0hfQUxMQUREUihscG9ydCwgU0NUUF9C
QVNFX0lORk8oaGFzaG1hcmspKV07CisJfQorCS8qIHB1dCBpdCBpbiB0aGUgYnVja2V0ICovCisJ
TElTVF9JTlNFUlRfSEVBRChoZWFkLCBpbnAsIHNjdHBfaGFzaCk7CisJU0NUUERCRyhTQ1RQX0RF
QlVHX1BDQjEsICJNYWluIGhhc2ggdG8gYmluZCBhdCBoZWFkOiVwLCBib3VuZCBwb3J0OiVkIC0g
aW4gdGNwX3Bvb2w9JWRcbiIsCisJCSh2b2lkICopaGVhZCwgbnRvaHMobHBvcnQpLCBwb3J0X3Jl
dXNlX2FjdGl2ZSk7CisJLyogc2V0IGluIHRoZSBwb3J0ICovCisJaW5wLT5zY3RwX2xwb3J0ID0g
bHBvcnQ7CisKKwkvKiB0dXJuIG9mZiBqdXN0IHRoZSB1bmJvdW5kIGZsYWcgKi8KKwlpbnAtPnNj
dHBfZmxhZ3MgJj0gflNDVFBfUENCX0ZMQUdTX1VOQk9VTkQ7CisJU0NUUF9JTlBfV1VOTE9DSyhp
bnApOworCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRp
YyB2b2lkCitzY3RwX2l0ZXJhdG9yX2lucF9iZWluZ19mcmVlZChzdHJ1Y3Qgc2N0cF9pbnBjYiAq
aW5wKQoreworCXN0cnVjdCBzY3RwX2l0ZXJhdG9yICppdCwgKm5pdDsKKworCS8qCisJICogV2Ug
ZW50ZXIgd2l0aCB0aGUgb25seSB0aGUgSVRFUkFUT1JfTE9DSyBpbiBwbGFjZSBhbmQgYSB3cml0
ZQorCSAqIGxvY2sgb24gdGhlIGlucF9pbmZvIHN0dWZmLgorCSAqLworCWl0ID0gc2N0cF9pdF9j
dGwuY3VyX2l0OworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisJaWYgKGl0ICYmIChpdC0+dm4gIT0gY3Vydm5ldCkpIHsKKwkJLyogSXRzIG5vdCBs
b29raW5nIGF0IG91ciBWTkVUICovCisJCXJldHVybjsKKwl9CisjZW5kaWYKKwlpZiAoaXQgJiYg
KGl0LT5pbnAgPT0gaW5wKSkgeworCQkvKgorCQkgKiBUaGlzIGlzIHRyaWNreSBhbmQgd2UgaG9s
ZCB0aGUgaXRlcmF0b3IgbG9jaywKKwkJICogYnV0IHdoZW4gaXQgcmV0dXJucyBhbmQgZ2V0cyB0
aGUgbG9jayAod2hlbiB3ZQorCQkgKiByZWxlYXNlIGl0KSB0aGUgaXRlcmF0b3Igd2lsbCB0cnkg
dG8gb3BlcmF0ZSBvbgorCQkgKiBpbnAuIFdlIG5lZWQgdG8gc3RvcCB0aGF0IGZyb20gaGFwcGVu
aW5nLiBCdXQKKwkJICogb2YgY291cnNlIHRoZSBpdGVyYXRvciBoYXMgYSByZWZlcmVuY2Ugb24g
dGhlCisJCSAqIHN0Y2IgYW5kIGlucC4gV2UgY2FuIG1hcmsgaXQgYW5kIGl0IHdpbGwgc3RvcC4K
KwkJICoKKwkJICogSWYgaXRzIGEgc2luZ2xlIGl0ZXJhdG9yIHNpdHVhdGlvbiwgd2UKKwkJICog
c2V0IHRoZSBlbmQgaXRlcmF0b3IgZmxhZy4gT3RoZXJ3aXNlCisJCSAqIHdlIHNldCB0aGUgaXRl
cmF0b3IgdG8gZ28gdG8gdGhlIG5leHQgaW5wLgorCQkgKgorCQkgKi8KKwkJaWYgKGl0LT5pdGVy
YXRvcl9mbGFncyAmIFNDVFBfSVRFUkFUT1JfRE9fU0lOR0xFX0lOUCkgeworCQkJc2N0cF9pdF9j
dGwuaXRlcmF0b3JfZmxhZ3MgfD0gU0NUUF9JVEVSQVRPUl9TVE9QX0NVUl9JVDsKKwkJfSBlbHNl
IHsKKwkJCXNjdHBfaXRfY3RsLml0ZXJhdG9yX2ZsYWdzIHw9IFNDVFBfSVRFUkFUT1JfU1RPUF9D
VVJfSU5QOworCQl9CisJfQorCS8qIE5vdyBnbyB0aHJvdWdoIGFuZCByZW1vdmUgYW55IHNpbmds
ZSByZWZlcmVuY2UgdG8KKwkgKiBvdXIgaW5wIHRoYXQgbWF5IGJlIHN0aWxsIHBlbmRpbmcgb24g
dGhlIGxpc3QKKwkgKi8KKwlTQ1RQX0lQSV9JVEVSQVRPUl9XUV9MT0NLKCk7CisJVEFJTFFfRk9S
RUFDSF9TQUZFKGl0LCAmc2N0cF9pdF9jdGwuaXRlcmF0b3JoZWFkLCBzY3RwX254dF9pdHIsIG5p
dCkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisJCWlmIChpdC0+dm4gIT0gY3Vydm5ldCkgeworCQkJY29udGludWU7CisJCX0KKyNlbmRpZgor
CQlpZiAoaXQtPmlucCA9PSBpbnApIHsKKwkJCS8qIFRoaXMgb25lIHBvaW50cyB0byBtZSBpcyBp
dCBpbnAgc3BlY2lmaWM/ICovCisJCQlpZiAoaXQtPml0ZXJhdG9yX2ZsYWdzICYgU0NUUF9JVEVS
QVRPUl9ET19TSU5HTEVfSU5QKSB7CisJCQkJLyogUmVtb3ZlIGFuZCBmcmVlIHRoaXMgb25lICov
CisJCQkJVEFJTFFfUkVNT1ZFKCZzY3RwX2l0X2N0bC5pdGVyYXRvcmhlYWQsCisJCQkJICAgIGl0
LCBzY3RwX254dF9pdHIpOworCQkJCWlmIChpdC0+ZnVuY3Rpb25fYXRlbmQgIT0gTlVMTCkgewor
CQkJCQkoKml0LT5mdW5jdGlvbl9hdGVuZCkgKGl0LT5wb2ludGVyLCBpdC0+dmFsKTsKKwkJCQl9
CisJCQkJU0NUUF9GUkVFKGl0LCBTQ1RQX01fSVRFUik7CisJCQl9IGVsc2UgeworCQkJCWl0LT5p
bnAgPSBMSVNUX05FWFQoaXQtPmlucCwgc2N0cF9saXN0KTsKKwkJCQlpZiAoaXQtPmlucCkgewor
CQkJCQlTQ1RQX0lOUF9JTkNSX1JFRihpdC0+aW5wKTsKKwkJCQl9CisJCQl9CisJCQkvKiBXaGVu
IGl0cyBwdXQgaW4gdGhlIHJlZmNudCBpcyBpbmNyZW1lbnRlZCBzbyBkZWNyIGl0ICovCisJCQlT
Q1RQX0lOUF9ERUNSX1JFRihpbnApOworCQl9CisJfQorCVNDVFBfSVBJX0lURVJBVE9SX1dRX1VO
TE9DSygpOworfQorCisvKiByZWxlYXNlIHNjdHBfaW5wY2IgdW5iaW5kIHRoZSBwb3J0ICovCit2
b2lkCitzY3RwX2lucGNiX2ZyZWUoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgaW50IGltbWVkaWF0
ZSwgaW50IGZyb20pCit7CisJLyoKKwkgKiBIZXJlIHdlIGZyZWUgYSBlbmRwb2ludC4gV2UgbXVz
dCBmaW5kIGl0IChpZiBpdCBpcyBpbiB0aGUgSGFzaAorCSAqIHRhYmxlKSBhbmQgcmVtb3ZlIGl0
IGZyb20gdGhlcmUuIFRoZW4gd2UgbXVzdCBhbHNvIGZpbmQgaXQgaW4gdGhlCisJICogb3ZlcmFs
bCBsaXN0IGFuZCByZW1vdmUgaXQgZnJvbSB0aGVyZS4gQWZ0ZXIgYWxsIHJlbW92YWxzIGFyZQor
CSAqIGNvbXBsZXRlIHRoZW4gYW55IHRpbWVyIGhhcyB0byBiZSBzdG9wcGVkLiBUaGVuIHN0YXJ0
IHRoZSBhY3R1YWwKKwkgKiBmcmVlaW5nLiBhKSBBbnkgbG9jYWwgbGlzdHMuIGIpIEFueSBhc3Nv
Y2lhdGlvbnMuIGMpIFRoZSBoYXNoIG9mCisJICogYWxsIGFzc29jaWF0aW9ucy4gZCkgZmluYWxs
eSB0aGUgZXAgaXRzZWxmLgorCSAqLworCXN0cnVjdCBzY3RwX3RjYiAqYXNvYywgKm5hc29jOwor
CXN0cnVjdCBzY3RwX2xhZGRyICpsYWRkciwgKm5sYWRkcjsKKwlzdHJ1Y3QgaW5wY2IgKmlwX3Bj
YjsKKwlzdHJ1Y3Qgc29ja2V0ICpzbzsKKwlpbnQgYmVpbmdfcmVmZWQgPSAwOworCXN0cnVjdCBz
Y3RwX3F1ZXVlZF90b19yZWFkICpzcSwgKm5zcTsKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKQorCXNjdHBfcnRlbnRyeV90ICpydDsKKyNlbmRp
ZgorI2VuZGlmCisJaW50IGNudDsKKwlzY3RwX3NoYXJlZGtleV90ICpzaGFyZWRfa2V5LCAqbnNo
YXJlZF9rZXk7CisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKKwlzY3RwX2xvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKGlucCkpOworI2VuZGlmCisjaWZk
ZWYgU0NUUF9MT0dfQ0xPU0lORworCXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBOVUxMLCAwKTsKKyNl
bmRpZgorCVNDVFBfSVRFUkFUT1JfTE9DSygpOworCS8qIG1hcmsgYW55IGl0ZXJhdG9ycyBvbiB0
aGUgbGlzdCBvciBiZWluZyBwcm9jZXNzZWQgKi8KKwlzY3RwX2l0ZXJhdG9yX2lucF9iZWluZ19m
cmVlZChpbnApOworCVNDVFBfSVRFUkFUT1JfVU5MT0NLKCk7CisJc28gPSBpbnAtPnNjdHBfc29j
a2V0OworCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09O
RSkgeworCQkvKiBiZWVuIGhlcmUgYmVmb3JlLi4gZWVrcy4uIGdldCBvdXQgb2YgaGVyZSAqLwor
CQlTQ1RQX1BSSU5URigiVGhpcyBjb25mbGljdCBpbiBmcmVlIFNIT1VMRCBub3QgYmUgaGFwcGVu
aW5nISBmcm9tICVkLCBpbW0gJWRcbiIsIGZyb20sIGltbWVkaWF0ZSk7CisjaWZkZWYgU0NUUF9M
T0dfQ0xPU0lORworCQlzY3RwX2xvZ19jbG9zaW5nKGlucCwgTlVMTCwgMSk7CisjZW5kaWYKKwkJ
cmV0dXJuOworCX0KKwlTQ1RQX0FTT0NfQ1JFQVRFX0xPQ0soaW5wKTsKKwlTQ1RQX0lOUF9JTkZP
X1dMT0NLKCk7CisKKwlTQ1RQX0lOUF9XTE9DSyhpbnApOworCWlmIChmcm9tID09IFNDVFBfQ0FM
TEVEX0FGVEVSX0NNUFNFVF9PRkNMT1NFKSB7CisJCWlucC0+c2N0cF9mbGFncyAmPSB+U0NUUF9Q
Q0JfRkxBR1NfQ0xPU0VfSVA7CisJCS8qIHNvY2tldCBpcyBnb25lLCBzbyBubyBtb3JlIHdha2V1
cHMgYWxsb3dlZCAqLworCQlpbnAtPnNjdHBfZmxhZ3MgfD0gU0NUUF9QQ0JfRkxBR1NfRE9OVF9X
QUtFOworCQlpbnAtPnNjdHBfZmxhZ3MgJj0gflNDVFBfUENCX0ZMQUdTX1dBS0VJTlBVVDsKKwkJ
aW5wLT5zY3RwX2ZsYWdzICY9IH5TQ1RQX1BDQl9GTEFHU19XQUtFT1VUUFVUOworCX0KKwkvKiBG
aXJzdCB0aW1lIHRocm91Z2ggd2UgaGF2ZSB0aGUgc29ja2V0IGxvY2ssIGFmdGVyIHRoYXQgbm8g
bW9yZS4gKi8KKwlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX05FV0NPT0tJRSwgaW5w
LCBOVUxMLCBOVUxMLAorCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9QQ0IgKyBTQ1RQ
X0xPQ18xKTsKKworCWlmIChpbnAtPmNvbnRyb2wpIHsKKwkJc2N0cF9tX2ZyZWVtKGlucC0+Y29u
dHJvbCk7CisJCWlucC0+Y29udHJvbCA9IE5VTEw7CisJfQorCWlmIChpbnAtPnBrdCkgeworCQlz
Y3RwX21fZnJlZW0oaW5wLT5wa3QpOworCQlpbnAtPnBrdCA9IE5VTEw7CisJfQorCWlwX3BjYiA9
ICZpbnAtPmlwX2lucC5pbnA7CS8qIHdlIGNvdWxkIGp1c3QgY2FzdCB0aGUgbWFpbiBwb2ludGVy
CisJCQkJCSAqIGhlcmUgYnV0IEkgd2lsbCBiZSBuaWNlIDo+IChpLmUuCisJCQkJCSAqIGlwX3Bj
YiA9IGVwOykgKi8KKwlpZiAoaW1tZWRpYXRlID09IFNDVFBfRlJFRV9TSE9VTERfVVNFX0dSQUNF
RlVMX0NMT1NFKSB7CisJCWludCBjbnRfaW5fc2Q7CisKKwkJY250X2luX3NkID0gMDsKKwkJTElT
VF9GT1JFQUNIX1NBRkUoYXNvYywgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlzdCwg
bmFzb2MpIHsKKwkJCVNDVFBfVENCX0xPQ0soYXNvYyk7CisJCQlpZiAoYXNvYy0+YXNvYy5zdGF0
ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKKwkJCQkvKiBTa2lwIGd1eXMgYmVp
bmcgZnJlZWQgKi8KKwkJCQljbnRfaW5fc2QrKzsKKwkJCQlpZiAoYXNvYy0+YXNvYy5zdGF0ZSAm
IFNDVFBfU1RBVEVfSU5fQUNDRVBUX1FVRVVFKSB7CisJCQkJCS8qCisJCQkJCSAqIFNwZWNpYWwg
Y2FzZSAtIHdlIGRpZCBub3Qgc3RhcnQgYSBraWxsCisJCQkJCSAqIHRpbWVyIG9uIHRoZSBhc29j
IGR1ZSB0byBpdCB3YXMgbm90CisJCQkJCSAqIGNsb3NlZC4gU28gZ28gYWhlYWQgYW5kIHN0YXJ0
IGl0IG5vdy4KKwkJCQkJICovCisJCQkJCVNDVFBfQ0xFQVJfU1VCU1RBVEUoYXNvYywgU0NUUF9T
VEFURV9JTl9BQ0NFUFRfUVVFVUUpOworCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJf
VFlQRV9BU09DS0lMTCwgaW5wLCBhc29jLCBOVUxMKTsKKwkJCQl9CisJCQkJU0NUUF9UQ0JfVU5M
T0NLKGFzb2MpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCgoU0NUUF9HRVRfU1RBVEUo
YXNvYykgPT0gU0NUUF9TVEFURV9DT09LSUVfV0FJVCkgfHwKKwkJCSAgICAgKFNDVFBfR0VUX1NU
QVRFKGFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCkpICYmCisJCQkgICAgKGFzb2Mt
PmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgPT0gMCkpIHsKKwkJCQkvKiBJZiB3ZSBoYXZl
IGRhdGEgaW4gcXVldWUsIHdlIGRvbid0IHdhbnQgdG8ganVzdAorCQkJCSAqIGZyZWUgc2luY2Ug
dGhlIGFwcCBtYXkgaGF2ZSBkb25lLCBzZW5kKCkvY2xvc2UKKwkJCQkgKiBvciBjb25uZWN0L3Nl
bmQvY2xvc2UuIEFuZCBpdCB3YW50cyB0aGUgZGF0YQorCQkJCSAqIHRvIGdldCBhY3Jvc3MgZmly
c3QuCisJCQkJICovCisJCQkJLyogSnVzdCBhYmFuZG9uIHRoaW5ncyBpbiB0aGUgZnJvbnQgc3Rh
dGVzICovCisJCQkJaWYgKHNjdHBfZnJlZV9hc3NvYyhpbnAsIGFzb2MsIFNDVFBfUENCRlJFRV9O
T0ZPUkNFLAorCQkJCQkJICAgU0NUUF9GUk9NX1NDVFBfUENCICsgU0NUUF9MT0NfMikgPT0gMCkg
eworCQkJCQljbnRfaW5fc2QrKzsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9CisJCQkvKiBE
aXNjb25uZWN0IHRoZSBzb2NrZXQgcGxlYXNlICovCisJCQlhc29jLT5zY3RwX3NvY2tldCA9IE5V
TEw7CisJCQlTQ1RQX0FERF9TVUJTVEFURShhc29jLCBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQp
OworCQkJaWYgKChhc29jLT5hc29jLnNpemVfb25fcmVhc21fcXVldWUgPiAwKSB8fAorCQkJICAg
IChhc29jLT5hc29jLmNvbnRyb2xfcGRhcGkpIHx8CisJCQkgICAgKGFzb2MtPmFzb2Muc2l6ZV9v
bl9hbGxfc3RyZWFtcyA+IDApIHx8CisJCQkgICAgKHNvICYmIChzby0+c29fcmN2LnNiX2NjID4g
MCkpKSB7CisJCQkJLyogTGVmdCB3aXRoIERhdGEgdW5yZWFkICovCisJCQkJc3RydWN0IG1idWYg
Km9wX2VycjsKKworCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9V
U0VSX0lOSVRJQVRFRF9BQlQsICIiKTsKKwkJCQlhc29jLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2Nv
ZGUgPSBTQ1RQX0ZST01fU0NUUF9QQ0IgKyBTQ1RQX0xPQ18zOworCQkJCXNjdHBfc2VuZF9hYm9y
dF90Y2IoYXNvYywgb3BfZXJyLCBTQ1RQX1NPX0xPQ0tFRCk7CisJCQkJU0NUUF9TVEFUX0lOQ1Jf
Q09VTlRFUjMyKHNjdHBzX2Fib3J0ZWQpOworCQkJCWlmICgoU0NUUF9HRVRfU1RBVEUoYXNvYykg
PT0gU0NUUF9TVEFURV9PUEVOKSB8fAorCQkJCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0g
U0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkpIHsKKwkJCQkJU0NUUF9TVEFUX0RFQ1JfR0FV
R0UzMihzY3Rwc19jdXJyZXN0YWIpOworCQkJCX0KKwkJCQlpZiAoc2N0cF9mcmVlX2Fzc29jKGlu
cCwgYXNvYywKKwkJCQkJCSAgICBTQ1RQX1BDQkZSRUVfTk9GT1JDRSwgU0NUUF9GUk9NX1NDVFBf
UENCICsgU0NUUF9MT0NfNCkgPT0gMCkgeworCQkJCQljbnRfaW5fc2QrKzsKKwkJCQl9CisJCQkJ
Y29udGludWU7CisJCQl9IGVsc2UgaWYgKFRBSUxRX0VNUFRZKCZhc29jLT5hc29jLnNlbmRfcXVl
dWUpICYmCisJCQkgICAgICAgICAgIFRBSUxRX0VNUFRZKCZhc29jLT5hc29jLnNlbnRfcXVldWUp
ICYmCisJCQkgICAgICAgICAgIChhc29jLT5hc29jLnN0cmVhbV9xdWV1ZV9jbnQgPT0gMCkpIHsK
KwkJCQlpZiAoKCphc29jLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2lzX3VzZXJfbXNnc19p
bmNvbXBsZXRlKShhc29jLCAmYXNvYy0+YXNvYykpIHsKKwkJCQkJZ290byBhYm9ydF9hbnl3YXk7
CisJCQkJfQorCQkJCWlmICgoU0NUUF9HRVRfU1RBVEUoYXNvYykgIT0gU0NUUF9TVEFURV9TSFVU
RE9XTl9TRU5UKSAmJgorCQkJCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykgIT0gU0NUUF9TVEFU
RV9TSFVURE9XTl9BQ0tfU0VOVCkpIHsKKwkJCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0cDsKKwor
CQkJCQkvKgorCQkJCQkgKiB0aGVyZSBpcyBub3RoaW5nIHF1ZXVlZCB0byBzZW5kLAorCQkJCQkg
KiBzbyBJIHNlbmQgc2h1dGRvd24KKwkJCQkJICovCisJCQkJCWlmICgoU0NUUF9HRVRfU1RBVEUo
YXNvYykgPT0gU0NUUF9TVEFURV9PUEVOKSB8fAorCQkJCQkgICAgKFNDVFBfR0VUX1NUQVRFKGFz
b2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpKSB7CisJCQkJCQlTQ1RQX1NUQVRf
REVDUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7CisJCQkJCX0KKwkJCQkJU0NUUF9TRVRfU1RB
VEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKTsKKwkJCQkJc2N0cF9zdG9wX3RpbWVy
c19mb3Jfc2h1dGRvd24oYXNvYyk7CisJCQkJCWlmIChhc29jLT5hc29jLmFsdGVybmF0ZSkgewor
CQkJCQkJbmV0cCA9IGFzb2MtPmFzb2MuYWx0ZXJuYXRlOworCQkJCQl9IGVsc2UgeworCQkJCQkJ
bmV0cCA9IGFzb2MtPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbjsKKwkJCQkJfQorCQkJCQlzY3Rw
X3NlbmRfc2h1dGRvd24oYXNvYywgbmV0cCk7CisJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9U
SU1FUl9UWVBFX1NIVVRET1dOLCBhc29jLT5zY3RwX2VwLCBhc29jLAorCQkJCQkgICAgbmV0cCk7
CisJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkQsIGFz
b2MtPnNjdHBfZXAsIGFzb2MsIE5VTEwpOworCQkJCQlzY3RwX2NodW5rX291dHB1dChpbnAsIGFz
b2MsIFNDVFBfT1VUUFVUX0ZST01fU0hVVF9UTVIsIFNDVFBfU09fTE9DS0VEKTsKKwkJCQl9CisJ
CQl9IGVsc2UgeworCQkJCS8qIG1hcmsgaW50byBzaHV0ZG93biBwZW5kaW5nICovCisJCQkJU0NU
UF9BRERfU1VCU1RBVEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKTsKKwkJCQlz
Y3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdVQVJELCBhc29jLT5zY3Rw
X2VwLCBhc29jLCBOVUxMKTsKKwkJCQlpZiAoKCphc29jLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3Rw
X3NzX2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlKShhc29jLCAmYXNvYy0+YXNvYykpIHsKKwkJCQkJ
U0NUUF9BRERfU1VCU1RBVEUoYXNvYywgU0NUUF9TVEFURV9QQVJUSUFMX01TR19MRUZUKTsKKwkJ
CQl9CisJCQkJaWYgKFRBSUxRX0VNUFRZKCZhc29jLT5hc29jLnNlbmRfcXVldWUpICYmCisJCQkJ
ICAgIFRBSUxRX0VNUFRZKCZhc29jLT5hc29jLnNlbnRfcXVldWUpICYmCisJCQkJICAgIChhc29j
LT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9QQVJUSUFMX01TR19MRUZUKSkgeworCQkJCQlzdHJ1
Y3QgbWJ1ZiAqb3BfZXJyOworCQkJCWFib3J0X2FueXdheToKKwkJCQkJb3BfZXJyID0gc2N0cF9n
ZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1VTRVJfSU5JVElBVEVEX0FCVCwgIiIpOworCQkJCQlh
c29jLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2NvZGUgPSBTQ1RQX0ZST01fU0NUUF9QQ0IgKyBTQ1RQ
X0xPQ181OworCQkJCQlzY3RwX3NlbmRfYWJvcnRfdGNiKGFzb2MsIG9wX2VyciwgU0NUUF9TT19M
T0NLRUQpOworCQkJCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfYWJvcnRlZCk7CisJ
CQkJCWlmICgoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9PUEVOKSB8fAorCQkJ
CQkgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlW
RUQpKSB7CisJCQkJCQlTQ1RQX1NUQVRfREVDUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7CisJ
CQkJCX0KKwkJCQkJaWYgKHNjdHBfZnJlZV9hc3NvYyhpbnAsIGFzb2MsCisJCQkJCQkJICAgIFND
VFBfUENCRlJFRV9OT0ZPUkNFLAorCQkJCQkJCSAgICBTQ1RQX0ZST01fU0NUUF9QQ0IgKyBTQ1RQ
X0xPQ182KSA9PSAwKSB7CisJCQkJCQljbnRfaW5fc2QrKzsKKwkJCQkJfQorCQkJCQljb250aW51
ZTsKKwkJCQl9IGVsc2UgeworCQkJCQlzY3RwX2NodW5rX291dHB1dChpbnAsIGFzb2MsIFNDVFBf
T1VUUFVUX0ZST01fQ0xPU0lORywgU0NUUF9TT19MT0NLRUQpOworCQkJCX0KKwkJCX0KKwkJCWNu
dF9pbl9zZCsrOworCQkJU0NUUF9UQ0JfVU5MT0NLKGFzb2MpOworCQl9CisJCS8qIG5vdyBpcyB0
aGVyZSBzb21lIGxlZnQgaW4gb3VyIFNIVVRET1dOIHN0YXRlPyAqLworCQlpZiAoY250X2luX3Nk
KSB7CisjaWZkZWYgU0NUUF9MT0dfQ0xPU0lORworCQkJc2N0cF9sb2dfY2xvc2luZyhpbnAsIE5V
TEwsIDIpOworI2VuZGlmCisJCQlpbnAtPnNjdHBfc29ja2V0ID0gTlVMTDsKKwkJCVNDVFBfSU5Q
X1dVTkxPQ0soaW5wKTsKKwkJCVNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKGlucCk7CisJCQlTQ1RQ
X0lOUF9JTkZPX1dVTkxPQ0soKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlpbnAtPnNjdHBfc29j
a2V0ID0gTlVMTDsKKwlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1VOQk9V
TkQpICE9CisJICAgIFNDVFBfUENCX0ZMQUdTX1VOQk9VTkQpIHsKKwkJLyoKKwkJICogb2ssIHRo
aXMgZ3V5IGhhcyBiZWVuIGJvdW5kLiBJdCdzIHBvcnQgaXMKKwkJICogc29tZXdoZXJlIGluIHRo
ZSBTQ1RQX0JBU0VfSU5GTyhoYXNoIHRhYmxlKS4gUmVtb3ZlCisJCSAqIGl0IQorCQkgKi8KKwkJ
TElTVF9SRU1PVkUoaW5wLCBzY3RwX2hhc2gpOworCQlpbnAtPnNjdHBfZmxhZ3MgfD0gU0NUUF9Q
Q0JfRkxBR1NfVU5CT1VORDsKKwl9CisKKwkvKiBJZiB0aGVyZSBpcyBhIHRpbWVyIHJ1bm5pbmcg
dG8ga2lsbCB1cywKKwkgKiBmb3JnZXQgaXQsIHNpbmNlIGl0IG1heSBoYXZlIGEgY29udGVzdAor
CSAqIG9uIHRoZSBJTlAgbG9jay4uIHdoaWNoIHdvdWxkIGNhdXNlIHVzCisJICogdG8gZGllIC4u
LgorCSAqLworCWNudCA9IDA7CisJTElTVF9GT1JFQUNIX1NBRkUoYXNvYywgJmlucC0+c2N0cF9h
c29jX2xpc3QsIHNjdHBfdGNibGlzdCwgbmFzb2MpIHsKKwkJU0NUUF9UQ0JfTE9DSyhhc29jKTsK
KwkJaWYgKGltbWVkaWF0ZSAhPSBTQ1RQX0ZSRUVfU0hPVUxEX1VTRV9HUkFDRUZVTF9DTE9TRSkg
eworCQkJLyogRGlzY29ubmVjdCB0aGUgc29ja2V0IHBsZWFzZSAqLworCQkJYXNvYy0+c2N0cF9z
b2NrZXQgPSBOVUxMOworCQkJU0NUUF9BRERfU1VCU1RBVEUoYXNvYywgU0NUUF9TVEFURV9DTE9T
RURfU09DS0VUKTsKKwkJfQorCQlpZiAoYXNvYy0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJP
VVRfVE9fQkVfRlJFRUQpIHsKKwkJCWlmIChhc29jLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9J
Tl9BQ0NFUFRfUVVFVUUpIHsKKwkJCQlTQ1RQX0NMRUFSX1NVQlNUQVRFKGFzb2MsIFNDVFBfU1RB
VEVfSU5fQUNDRVBUX1FVRVVFKTsKKwkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQ
RV9BU09DS0lMTCwgaW5wLCBhc29jLCBOVUxMKTsKKwkJCX0KKwkJCWNudCsrOworCQkJU0NUUF9U
Q0JfVU5MT0NLKGFzb2MpOworCQkJY29udGludWU7CisJCX0KKwkJLyogRnJlZSBhc3NvY2lhdGlv
bnMgdGhhdCBhcmUgTk9UIGtpbGxpbmcgdXMgKi8KKwkJaWYgKChTQ1RQX0dFVF9TVEFURShhc29j
KSAhPSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKSAmJgorCQkgICAgKChhc29jLT5hc29jLnN0YXRl
ICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCkgPT0gMCkpIHsKKwkJCXN0cnVjdCBtYnVm
ICpvcF9lcnI7CisKKwkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9V
U0VSX0lOSVRJQVRFRF9BQlQsICIiKTsKKwkJCWFzb2MtPnNjdHBfZXAtPmxhc3RfYWJvcnRfY29k
ZSA9IFNDVFBfRlJPTV9TQ1RQX1BDQiArIFNDVFBfTE9DXzc7CisJCQlzY3RwX3NlbmRfYWJvcnRf
dGNiKGFzb2MsIG9wX2VyciwgU0NUUF9TT19MT0NLRUQpOworCQkJU0NUUF9TVEFUX0lOQ1JfQ09V
TlRFUjMyKHNjdHBzX2Fib3J0ZWQpOworCQl9IGVsc2UgaWYgKGFzb2MtPmFzb2Muc3RhdGUgJiBT
Q1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEKSB7CisJCQljbnQrKzsKKwkJCVNDVFBfVENCX1VO
TE9DSyhhc29jKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgoU0NUUF9HRVRfU1RBVEUoYXNv
YykgPT0gU0NUUF9TVEFURV9PUEVOKSB8fAorCQkgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09
IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpKSB7CisJCQlTQ1RQX1NUQVRfREVDUl9HQVVH
RTMyKHNjdHBzX2N1cnJlc3RhYik7CisJCX0KKwkJaWYgKHNjdHBfZnJlZV9hc3NvYyhpbnAsIGFz
b2MsIFNDVFBfUENCRlJFRV9GT1JDRSwKKwkJICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01f
U0NUUF9QQ0IgKyBTQ1RQX0xPQ184KSA9PSAwKSB7CisJCQljbnQrKzsKKwkJfQorCX0KKwlpZiAo
Y250KSB7CisJCS8qIE9rIHdlIGhhdmUgc29tZW9uZSBvdXQgdGhlcmUgdGhhdCB3aWxsIGtpbGwg
dXMgKi8KKyNpZmRlZiBTQ1RQX0xPR19DTE9TSU5HCisJCXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBO
VUxMLCAzKTsKKyNlbmRpZgorCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCVNDVFBfQVNPQ19D
UkVBVEVfVU5MT0NLKGlucCk7CisJCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOworCQlyZXR1cm47
CisJfQorCWlmIChTQ1RQX0lOUF9MT0NLX0NPTlRFTkRFRChpbnApKQorCQliZWluZ19yZWZlZCsr
OworCWlmIChTQ1RQX0lOUF9SRUFEX0NPTlRFTkRFRChpbnApKQorCQliZWluZ19yZWZlZCsrOwor
CWlmIChTQ1RQX0FTT0NfQ1JFQVRFX0xPQ0tfQ09OVEVOREVEKGlucCkpCisJCWJlaW5nX3JlZmVk
Kys7CisJLyogTk9URTogMCByZWZjb3VudCBhbHNvIG1lYW5zIG5vIHRpbWVycyBhcmUgcmVmZXJl
bmNpbmcgdXMuICovCisJaWYgKChpbnAtPnJlZmNvdW50KSB8fAorCSAgICAoYmVpbmdfcmVmZWQp
IHx8CisJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DTE9TRV9JUCkpIHsK
KyNpZmRlZiBTQ1RQX0xPR19DTE9TSU5HCisJCXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBOVUxMLCA0
KTsKKyNlbmRpZgorCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9JTlBLSUxMLCBp
bnAsIE5VTEwsIE5VTEwpOworCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCVNDVFBfQVNPQ19D
UkVBVEVfVU5MT0NLKGlucCk7CisJCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOworCQlyZXR1cm47
CisJfQorCWlucC0+c2N0cF9lcC5zaWduYXR1cmVfY2hhbmdlLnR5cGUgPSAwOworCWlucC0+c2N0
cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORTsKKwkvKiBSZW1vdmUgaXQg
ZnJvbSB0aGUgbGlzdCAuLiBsYXN0IHRoaW5nIHdlIG5lZWQgYQorCSAqIGxvY2sgZm9yLgorCSAq
LworCUxJU1RfUkVNT1ZFKGlucCwgc2N0cF9saXN0KTsKKwlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7
CisJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soaW5wKTsKKwlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0so
KTsKKworI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKKwlzY3RwX2xvZ19jbG9zaW5nKGlucCwgTlVM
TCwgNSk7CisjZW5kaWYKKyNpZiAhKGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pKQorI2lmICEoZGVmaW5lZChfX0ZyZWVCU0RfXykgICYmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX18pKQorCXJ0ID0gaXBfcGNiLT5pbnBfcm91dGUucm9fcnQ7CisjZW5kaWYKKyNlbmRpZgor
CWlmICgoaW5wLT5zY3RwX2Fzb2NpZGhhc2gpICE9IE5VTEwpIHsKKwkJU0NUUF9IQVNIX0ZSRUUo
aW5wLT5zY3RwX2Fzb2NpZGhhc2gsIGlucC0+aGFzaGFzb2NpZG1hcmspOworCQlpbnAtPnNjdHBf
YXNvY2lkaGFzaCA9IE5VTEw7CisJfQorCS8qc2FfaWdub3JlIEZSRUVEX01FTU9SWSovCisJVEFJ
TFFfRk9SRUFDSF9TQUZFKHNxLCAmaW5wLT5yZWFkX3F1ZXVlLCBuZXh0LCBuc3EpIHsKKwkJLyog
SXRzIG9ubHkgYWJhbmRvbmVkIGlmIGl0IGhhZCBkYXRhIGxlZnQgKi8KKwkJaWYgKHNxLT5sZW5n
dGgpCisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19sZWZ0X2FiYW5kb24pOworCisJCVRBSUxRX1JF
TU9WRSgmaW5wLT5yZWFkX3F1ZXVlLCBzcSwgbmV4dCk7CisJCXNjdHBfZnJlZV9yZW1vdGVfYWRk
cihzcS0+d2hvRnJvbSk7CisJCWlmIChzbykKKwkJCXNvLT5zb19yY3Yuc2JfY2MgLT0gc3EtPmxl
bmd0aDsKKwkJaWYgKHNxLT5kYXRhKSB7CisJCQlzY3RwX21fZnJlZW0oc3EtPmRhdGEpOworCQkJ
c3EtPmRhdGEgPSBOVUxMOworCQl9CisJCS8qCisJCSAqIG5vIG5lZWQgdG8gZnJlZSB0aGUgbmV0
IGNvdW50LCBzaW5jZSBhdCB0aGlzIHBvaW50IGFsbAorCQkgKiBhc3NvYydzIGFyZSBnb25lLgor
CQkgKi8KKwkJc2N0cF9mcmVlX2FfcmVhZHEoTlVMTCwgc3EpOworCX0KKwkvKiBOb3cgdGhlIHNj
dHBfcGNiIHRoaW5ncyAqLworCS8qCisJICogZnJlZSBlYWNoIGFzb2MgaWYgaXQgaXMgbm90IGFs
cmVhZHkgY2xvc2VkL2ZyZWUuIHdlIGNhbid0IHVzZSB0aGUKKwkgKiBtYWNybyBoZXJlIHNpbmNl
IGxlX25leHQgd2lsbCBnZXQgZnJlZWQgYXMgcGFydCBvZiB0aGUKKwkgKiBzY3RwX2ZyZWVfYXNz
b2MoKSBjYWxsLgorCSAqLworCWlmIChpcF9wY2ItPmlucF9vcHRpb25zKSB7CisJCSh2b2lkKXNj
dHBfbV9mcmVlKGlwX3BjYi0+aW5wX29wdGlvbnMpOworCQlpcF9wY2ItPmlucF9vcHRpb25zID0g
MDsKKwl9CisjaWYgIShkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkK
KyNpZiAhZGVmaW5lZChfX0ZyZWVCU0RfXykKKwlpZiAocnQpIHsKKwkJUlRGUkVFKHJ0KTsKKwkJ
aXBfcGNiLT5pbnBfcm91dGUucm9fcnQgPSAwOworCX0KKyNlbmRpZgorI2VuZGlmCisjaWZkZWYg
SU5FVDYKKyNpZiAhKGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQor
I2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykpCisJaWYgKGlwX3BjYi0+aW5wX3ZmbGFnICYgSU5QX0lQVjYpIHsK
KyNlbHNlCisJaWYgKGlucC0+aW5wX3ZmbGFnICYgSU5QX0lQVjYpIHsKKyNlbmRpZgorCQlpcDZf
ZnJlZXBjYm9wdHMoaXBfcGNiLT5pbjZwX291dHB1dG9wdHMpOworCX0KKyNlbmRpZgorI2VuZGlm
CQkJCS8qIElORVQ2ICovCisJaXBfcGNiLT5pbnBfdmZsYWcgPSAwOworCS8qIGZyZWUgdXAgYXV0
aGVudGljYXRpb24gZmllbGRzICovCisJaWYgKGlucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5r
cyAhPSBOVUxMKQorCQlzY3RwX2ZyZWVfY2h1bmtsaXN0KGlucC0+c2N0cF9lcC5sb2NhbF9hdXRo
X2NodW5rcyk7CisJaWYgKGlucC0+c2N0cF9lcC5sb2NhbF9obWFjcyAhPSBOVUxMKQorCQlzY3Rw
X2ZyZWVfaG1hY2xpc3QoaW5wLT5zY3RwX2VwLmxvY2FsX2htYWNzKTsKKworCUxJU1RfRk9SRUFD
SF9TQUZFKHNoYXJlZF9rZXksICZpbnAtPnNjdHBfZXAuc2hhcmVkX2tleXMsIG5leHQsIG5zaGFy
ZWRfa2V5KSB7CisJCUxJU1RfUkVNT1ZFKHNoYXJlZF9rZXksIG5leHQpOworCQlzY3RwX2ZyZWVf
c2hhcmVka2V5KHNoYXJlZF9rZXkpOworCQkvKnNhX2lnbm9yZSBGUkVFRF9NRU1PUlkqLworCX0K
KworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWlu
cC0+aXBfaW5wLmlucC5pbnBfc3RhdGUgPSBJTlBDQl9TVEFURV9ERUFEOworCWlmIChpbl9wY2Jf
Y2hlY2tzdGF0ZSgmaW5wLT5pcF9pbnAuaW5wLCBXTlRfU1RPUFVTSU5HLCAxKSAhPSBXTlRfU1RP
UFVTSU5HKSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQlwYW5pYygic2N0cF9pbnBjYl9mcmVlIGlu
cCA9ICVwIGNvdWxkbid0IHNldCB0byBTVE9QVVNJTkdcbiIsICh2b2lkICopaW5wKTsKKyNlbHNl
CisJCVNDVFBfUFJJTlRGKCJzY3RwX2lucGNiX2ZyZWUgaW5wID0gJXAgY291bGRuJ3Qgc2V0IHRv
IFNUT1BVU0lOR1xuIiwgKHZvaWQgKilpbnApOworI2VuZGlmCisJfQorCWlucC0+aXBfaW5wLmlu
cC5pbnBfc29ja2V0LT5zb19mbGFncyB8PSBTT0ZfUENCQ0xFQVJJTkc7CisjZW5kaWYKKwkvKgor
CSAqIGlmIHdlIGhhdmUgYW4gYWRkcmVzcyBsaXN0IHRoZSBmb2xsb3dpbmcgd2lsbCBmcmVlIHRo
ZSBsaXN0IG9mCisJICogaWZhZGRyJ3MgdGhhdCBhcmUgc2V0IGludG8gdGhpcyBlcC4gQWdhaW4g
bWFjcm8gbGltaXRhdGlvbnMgaGVyZSwKKwkgKiBzaW5jZSB0aGUgTElTVF9GT1JFQUNIIGNvdWxk
IGJlIGEgYmFkIGlkZWEuCisJICovCisJTElTVF9GT1JFQUNIX1NBRkUobGFkZHIsICZpbnAtPnNj
dHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyLCBubGFkZHIpIHsKKwkJc2N0cF9yZW1vdmVfbGFk
ZHIobGFkZHIpOworCX0KKworI2lmZGVmIFNDVFBfVFJBQ0tfRlJFRURfQVNPQ1MKKwkvKiBURU1Q
IENPREUgKi8KKwlMSVNUX0ZPUkVBQ0hfU0FGRShhc29jLCAmaW5wLT5zY3RwX2Fzb2NfZnJlZV9s
aXN0LCBzY3RwX3RjYmxpc3QsIG5hc29jKSB7CisJCUxJU1RfUkVNT1ZFKGFzb2MsIHNjdHBfdGNi
bGlzdCk7CisJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2Fzb2MpLCBh
c29jKTsKKwkJU0NUUF9ERUNSX0FTT0NfQ09VTlQoKTsKKwl9CisJLyogKioqIEVORCBURU1QIENP
REUgKioqKi8KKyNlbmRpZgorI2lmZGVmIFNDVFBfTVZSRgorCVNDVFBfRlJFRShpbnAtPm1fdnJm
X2lkcywgU0NUUF9NX01WUkYpOworI2VuZGlmCisJLyogTm93IGxldHMgc2VlIGFib3V0IGZyZWVp
bmcgdGhlIEVQIGhhc2ggdGFibGUuICovCisJaWYgKGlucC0+c2N0cF90Y2JoYXNoICE9IE5VTEwp
IHsKKwkJU0NUUF9IQVNIX0ZSRUUoaW5wLT5zY3RwX3RjYmhhc2gsIGlucC0+c2N0cF9oYXNobWFy
ayk7CisJCWlucC0+c2N0cF90Y2JoYXNoID0gTlVMTDsKKwl9CisJLyogTm93IHdlIG11c3QgcHV0
IHRoZSBlcCBtZW1vcnkgYmFjayBpbnRvIHRoZSB6b25lIHBvb2wgKi8KKyNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWNyZnJlZShpbnAtPmlwX2lu
cC5pbnAuaW5wX2NyZWQpOworCUlOUF9MT0NLX0RFU1RST1koJmlucC0+aXBfaW5wLmlucCk7Cisj
ZW5kaWYKKwlTQ1RQX0lOUF9MT0NLX0RFU1RST1koaW5wKTsKKwlTQ1RQX0lOUF9SRUFEX0RFU1RS
T1koaW5wKTsKKwlTQ1RQX0FTT0NfQ1JFQVRFX0xPQ0tfREVTVFJPWShpbnApOworI2lmICEoZGVm
aW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQorCVNDVFBfWk9ORV9G
UkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2VwKSwgaW5wKTsKKwlTQ1RQX0RFQ1JfRVBfQ09V
TlQoKTsKKyNlbHNlCisJLyogRm9yIFRpZ2VyLCB3ZSB3aWxsIGRvIHRoaXMgbGF0ZXIuLi4gKi8K
KyNlbmRpZgorfQorCitzdHJ1Y3Qgc2N0cF9uZXRzICoKK3NjdHBfZmluZG5ldChzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IsIHN0cnVjdCBzb2NrYWRkciAqYWRkcikKK3sKKwlzdHJ1Y3Qgc2N0cF9uZXRz
ICpuZXQ7CisJLyogbG9jYXRlIHRoZSBhZGRyZXNzICovCisJVEFJTFFfRk9SRUFDSChuZXQsICZz
dGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQlpZiAoc2N0cF9jbXBhZGRyKGFkZHIsIChz
dHJ1Y3Qgc29ja2FkZHIgKikmbmV0LT5yby5fbF9hZGRyKSkKKwkJCXJldHVybiAobmV0KTsKKwl9
CisJcmV0dXJuIChOVUxMKTsKK30KKworaW50CitzY3RwX2lzX2FkZHJlc3Nfb25fbG9jYWxfaG9z
dChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHVpbnQzMl90IHZyZl9pZCkKK3sKKwlzdHJ1Y3Qgc2N0
cF9pZmEgKnNjdHBfaWZhOworCXNjdHBfaWZhID0gc2N0cF9maW5kX2lmYV9ieV9hZGRyKGFkZHIs
IHZyZl9pZCwgU0NUUF9BRERSX05PVF9MT0NLRUQpOworCWlmIChzY3RwX2lmYSkgeworCQlyZXR1
cm4gKDEpOworCX0gZWxzZSB7CisJCXJldHVybiAoMCk7CisJfQorfQorCisvKgorICogYWRkJ3Mg
YSByZW1vdGUgZW5kcG9pbnQgYWRkcmVzcywgZG9uZSB3aXRoIHRoZSBJTklUL0lOSVQtQUNLIGFz
IHdlbGwgYXMKKyAqIHdoZW4gYSBBU0NPTkYgYXJyaXZlcyB0aGF0IGFkZHMgaXQuIEl0IHdpbGwg
YWxzbyBpbml0aWFsaXplIGFsbCB0aGUgY3duZAorICogc3RhdHMgb2Ygc3R1ZmYuCisgKi8KK2lu
dAorc2N0cF9hZGRfcmVtb3RlX2FkZHIoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc29j
a2FkZHIgKm5ld2FkZHIsCisgICAgc3RydWN0IHNjdHBfbmV0cyAqKm5ldHAsIHVpbnQxNl90IHBv
cnQsIGludCBzZXRfc2NvcGUsIGludCBmcm9tKQoreworCS8qCisJICogVGhlIGZvbGxvd2luZyBp
cyByZWR1bmRhbnQgdG8gdGhlIHNhbWUgbGluZXMgaW4gdGhlCisJICogc2N0cF9hbG9jX2Fzc29j
KCkgYnV0IGlzIG5lZWRlZCBzaW5jZSBvdGhlcnMgY2FsbCB0aGUgYWRkCisJICogYWRkcmVzcyBm
dW5jdGlvbgorCSAqLworCXN0cnVjdCBzY3RwX25ldHMgKm5ldCwgKm5ldGZpcnN0OworCWludCBh
ZGRyX2luc2NvcGU7CisKKwlTQ1RQREJHKFNDVFBfREVCVUdfUENCMSwgIkFkZGluZyBhbiBhZGRy
ZXNzIChmcm9tOiVkKSB0byB0aGUgcGVlcjogIiwKKwkJZnJvbSk7CisJU0NUUERCR19BRERSKFND
VFBfREVCVUdfUENCMSwgbmV3YWRkcik7CisKKwluZXRmaXJzdCA9IHNjdHBfZmluZG5ldChzdGNi
LCBuZXdhZGRyKTsKKwlpZiAobmV0Zmlyc3QpIHsKKwkJLyoKKwkJICogTGllIGFuZCByZXR1cm4g
b2ssIHdlIGRvbid0IHdhbnQgdG8gbWFrZSB0aGUgYXNzb2NpYXRpb24KKwkJICogZ28gYXdheSBm
b3IgdGhpcyBiZWhhdmlvci4gSXQgd2lsbCBoYXBwZW4gaW4gdGhlIFRDUAorCQkgKiBtb2RlbCBp
biBhIGNvbm5lY3RlZCBzb2NrZXQuIEl0IGRvZXMgbm90IHJlYWNoIHRoZSBoYXNoCisJCSAqIHRh
YmxlIHVudGlsIGFmdGVyIHRoZSBhc3NvY2lhdGlvbiBpcyBidWlsdCBzbyBpdCBjYW4ndCBiZQor
CQkgKiBmb3VuZC4gTWFyayBhcyByZWFjaGFibGUsIHNpbmNlIHRoZSBpbml0aWFsIGNyZWF0aW9u
IHdpbGwKKwkJICogaGF2ZSBiZWVuIGNsZWFyZWQgYW5kIHRoZSBOT1RfSU5fQVNTT0MgZmxhZyB3
aWxsIGhhdmUKKwkJICogYmVlbiBhZGRlZC4uLiBhbmQgd2UgZG9uJ3Qgd2FudCB0byBlbmQgdXAg
cmVtb3ZpbmcgaXQKKwkJICogYmFjayBvdXQuCisJCSAqLworCQlpZiAobmV0Zmlyc3QtPmRlc3Rf
c3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQpIHsKKwkJCW5ldGZpcnN0LT5kZXN0X3N0YXRl
ID0gKFNDVFBfQUREUl9SRUFDSEFCTEUgfAorCQkJICAgIFNDVFBfQUREUl9VTkNPTkZJUk1FRCk7
CisJCX0gZWxzZSB7CisJCQluZXRmaXJzdC0+ZGVzdF9zdGF0ZSA9IFNDVFBfQUREUl9SRUFDSEFC
TEU7CisJCX0KKworCQlyZXR1cm4gKDApOworCX0KKwlhZGRyX2luc2NvcGUgPSAxOworCXN3aXRj
aCAobmV3YWRkci0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwl7
CisJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCisJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJf
aW4gKiluZXdhZGRyOworCQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gMCkgeworCQkJLyog
SW52YWxpZCBhZGRyZXNzICovCisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQkvKiB6ZXJvIG91dCB0
aGUgemVybyBhcmVhICovCisJCW1lbXNldCgmc2luLT5zaW5femVybywgMCwgc2l6ZW9mKHNpbi0+
c2luX3plcm8pKTsKKworCQkvKiBhc3N1cmUgbGVuIGlzIHNldCAqLworI2lmZGVmIEhBVkVfU0lO
X0xFTgorCQlzaW4tPnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRp
ZgorCQlpZiAoc2V0X3Njb3BlKSB7CisJCQlpZiAoSU40X0lTUFJJVkFURV9BRERSRVNTKCZzaW4t
PnNpbl9hZGRyKSkgeworCQkJCXN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9sb2NhbF9zY29wZSA9IDE7
CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBWYWxpZGF0ZSB0aGUgYWRkcmVzcyBpcyBpbiBzY29w
ZSAqLworCQkJaWYgKChJTjRfSVNQUklWQVRFX0FERFJFU1MoJnNpbi0+c2luX2FkZHIpKSAmJgor
CQkJICAgIChzdGNiLT5hc29jLnNjb3BlLmlwdjRfbG9jYWxfc2NvcGUgPT0gMCkpIHsKKwkJCQlh
ZGRyX2luc2NvcGUgPSAwOworCQkJfQorCQl9CisJCWJyZWFrOworCX0KKyNlbmRpZgorI2lmZGVm
IElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKwl7CisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7
CisKKwkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopbmV3YWRkcjsKKwkJaWYgKElONl9J
U19BRERSX1VOU1BFQ0lGSUVEKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQkvKiBJbnZhbGlkIGFk
ZHJlc3MgKi8KKwkJCXJldHVybiAoLTEpOworCQl9CisJCS8qIGFzc3VyZSBsZW4gaXMgc2V0ICov
CisjaWZkZWYgSEFWRV9TSU42X0xFTgorCQlzaW42LT5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW42KTsKKyNlbmRpZgorCQlpZiAoc2V0X3Njb3BlKSB7CisJCQlpZiAoc2N0cF9p
c19hZGRyZXNzX29uX2xvY2FsX2hvc3QobmV3YWRkciwgc3RjYi0+YXNvYy52cmZfaWQpKSB7CisJ
CQkJc3RjYi0+YXNvYy5zY29wZS5sb29wYmFja19zY29wZSA9IDE7CisJCQkJc3RjYi0+YXNvYy5z
Y29wZS5sb2NhbF9zY29wZSA9IDA7CisJCQkJc3RjYi0+YXNvYy5zY29wZS5pcHY0X2xvY2FsX3Nj
b3BlID0gMTsKKwkJCQlzdGNiLT5hc29jLnNjb3BlLnNpdGVfc2NvcGUgPSAxOworCQkJfSBlbHNl
IGlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCQkvKgor
CQkJCSAqIElmIHRoZSBuZXcgZGVzdGluYXRpb24gaXMgYSBMSU5LX0xPQ0FMIHdlCisJCQkJICog
bXVzdCBoYXZlIGNvbW1vbiBzaXRlIHNjb3BlLiBEb24ndCBzZXQKKwkJCQkgKiB0aGUgbG9jYWwg
c2NvcGUgc2luY2Ugd2UgbWF5IG5vdCBzaGFyZQorCQkJCSAqIGFsbCBsaW5rcywgb25seSBsb29w
YmFjayBjYW4gZG8gdGhpcy4KKwkJCQkgKiBMaW5rcyBvbiB0aGUgbG9jYWwgbmV0d29yayB3b3Vs
ZCBhbHNvIGJlCisJCQkJICogb24gb3VyIHByaXZhdGUgbmV0d29yayBmb3IgdjQgdG9vLgorCQkJ
CSAqLworCQkJCXN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9sb2NhbF9zY29wZSA9IDE7CisJCQkJc3Rj
Yi0+YXNvYy5zY29wZS5zaXRlX3Njb3BlID0gMTsKKwkJCX0gZWxzZSBpZiAoSU42X0lTX0FERFJf
U0lURUxPQ0FMKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQkJLyoKKwkJCQkgKiBJZiB0aGUgbmV3
IGRlc3RpbmF0aW9uIGlzIFNJVEVfTE9DQUwgdGhlbgorCQkJCSAqIHdlIG11c3QgaGF2ZSBzaXRl
IHNjb3BlIGluIGNvbW1vbi4KKwkJCQkgKi8KKwkJCQlzdGNiLT5hc29jLnNjb3BlLnNpdGVfc2Nv
cGUgPSAxOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogVmFsaWRhdGUgdGhlIGFkZHJlc3MgaXMg
aW4gc2NvcGUgKi8KKwkJCWlmIChJTjZfSVNfQUREUl9MT09QQkFDSygmc2luNi0+c2luNl9hZGRy
KSAmJgorCQkJICAgIChzdGNiLT5hc29jLnNjb3BlLmxvb3BiYWNrX3Njb3BlID09IDApKSB7CisJ
CQkJYWRkcl9pbnNjb3BlID0gMDsKKwkJCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FM
KCZzaW42LT5zaW42X2FkZHIpICYmCisJCQkgICAgKHN0Y2ItPmFzb2Muc2NvcGUubG9jYWxfc2Nv
cGUgPT0gMCkpIHsKKwkJCQlhZGRyX2luc2NvcGUgPSAwOworCQkJfSBlbHNlIGlmIChJTjZfSVNf
QUREUl9TSVRFTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikgJiYKKwkJCSAgICAoc3RjYi0+YXNvYy5z
Y29wZS5zaXRlX3Njb3BlID09IDApKSB7CisJCQkJYWRkcl9pbnNjb3BlID0gMDsKKwkJCX0KKwkJ
fQorCQlicmVhazsKKwl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJY2Fz
ZSBBRl9DT05OOgorCXsKKwkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uOworCisJCXNjb25u
ID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopbmV3YWRkcjsKKwkJaWYgKHNjb25uLT5zY29ubl9h
ZGRyID09IE5VTEwpIHsKKwkJCS8qIEludmFsaWQgYWRkcmVzcyAqLworCQkJcmV0dXJuICgtMSk7
CisJCX0KKyNpZmRlZiBIQVZFX1NDT05OX0xFTgorCQlzY29ubi0+c2Nvbm5fbGVuID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKyNlbmRpZgorCQlicmVhazsKKwl9CisjZW5kaWYKKwlk
ZWZhdWx0OgorCQkvKiBub3Qgc3VwcG9ydGVkIGZhbWlseSB0eXBlICovCisJCXJldHVybiAoLTEp
OworCX0KKwluZXQgPSBTQ1RQX1pPTkVfR0VUKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX25ldCks
IHN0cnVjdCBzY3RwX25ldHMpOworCWlmIChuZXQgPT0gTlVMTCkgeworCQlyZXR1cm4gKC0xKTsK
Kwl9CisJU0NUUF9JTkNSX1JBRERSX0NPVU5UKCk7CisJbWVtc2V0KG5ldCwgMCwgc2l6ZW9mKHN0
cnVjdCBzY3RwX25ldHMpKTsKKwkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmbmV0LT5zdGFy
dF90aW1lKTsKKyNpZmRlZiBIQVZFX1NBX0xFTgorCW1lbWNweSgmbmV0LT5yby5fbF9hZGRyLCBu
ZXdhZGRyLCBuZXdhZGRyLT5zYV9sZW4pOworI2VuZGlmCisJc3dpdGNoIChuZXdhZGRyLT5zYV9m
YW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJY2FzZSBBRl9JTkVUOgorI2lmbmRlZiBIQVZFX1NBX0xF
TgorCQltZW1jcHkoJm5ldC0+cm8uX2xfYWRkciwgbmV3YWRkciwgc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbikpOworI2VuZGlmCisJCSgoc3RydWN0IHNvY2thZGRyX2luICopJm5ldC0+cm8uX2xf
YWRkciktPnNpbl9wb3J0ID0gc3RjYi0+cnBvcnQ7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYg
SU5FVDYKKwljYXNlIEFGX0lORVQ2OgorI2lmbmRlZiBIQVZFX1NBX0xFTgorCQltZW1jcHkoJm5l
dC0+cm8uX2xfYWRkciwgbmV3YWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyNl
bmRpZgorCQkoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmbmV0LT5yby5fbF9hZGRyKS0+c2luNl9w
b3J0ID0gc3RjYi0+cnBvcnQ7CisJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorCWNhc2UgQUZfQ09OTjoKKyNpZm5kZWYgSEFWRV9TQV9MRU4KKwkJbWVtY3B5KCZu
ZXQtPnJvLl9sX2FkZHIsIG5ld2FkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOwor
I2VuZGlmCisJCSgoc3RydWN0IHNvY2thZGRyX2Nvbm4gKikmbmV0LT5yby5fbF9hZGRyKS0+c2Nv
bm5fcG9ydCA9IHN0Y2ItPnJwb3J0OworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCWJy
ZWFrOworCX0KKwluZXQtPmFkZHJfaXNfbG9jYWwgPSBzY3RwX2lzX2FkZHJlc3Nfb25fbG9jYWxf
aG9zdChuZXdhZGRyLCBzdGNiLT5hc29jLnZyZl9pZCk7CisJaWYgKG5ldC0+YWRkcl9pc19sb2Nh
bCAmJiAoKHNldF9zY29wZSB8fCAoZnJvbSA9PSBTQ1RQX0FERFJfSVNfQ09ORklSTUVEKSkpKSB7
CisJCXN0Y2ItPmFzb2Muc2NvcGUubG9vcGJhY2tfc2NvcGUgPSAxOworCQlzdGNiLT5hc29jLnNj
b3BlLmlwdjRfbG9jYWxfc2NvcGUgPSAxOworCQlzdGNiLT5hc29jLnNjb3BlLmxvY2FsX3Njb3Bl
ID0gMDsKKwkJc3RjYi0+YXNvYy5zY29wZS5zaXRlX3Njb3BlID0gMTsKKwkJYWRkcl9pbnNjb3Bl
ID0gMTsKKwl9CisJbmV0LT5mYWlsdXJlX3RocmVzaG9sZCA9IHN0Y2ItPmFzb2MuZGVmX25ldF9m
YWlsdXJlOworCW5ldC0+cGZfdGhyZXNob2xkID0gc3RjYi0+YXNvYy5kZWZfbmV0X3BmX3RocmVz
aG9sZDsKKwlpZiAoYWRkcl9pbnNjb3BlID09IDApIHsKKwkJbmV0LT5kZXN0X3N0YXRlID0gKFND
VFBfQUREUl9SRUFDSEFCTEUgfAorCQkgICAgU0NUUF9BRERSX09VVF9PRl9TQ09QRSk7CisJfSBl
bHNlIHsKKwkJaWYgKGZyb20gPT0gU0NUUF9BRERSX0lTX0NPTkZJUk1FRCkKKwkJCS8qIFNDVFBf
QUREUl9JU19DT05GSVJNRUQgaXMgcGFzc2VkIGJ5IGNvbm5lY3RfeCAqLworCQkJbmV0LT5kZXN0
X3N0YXRlID0gU0NUUF9BRERSX1JFQUNIQUJMRTsKKwkJZWxzZQorCQkJbmV0LT5kZXN0X3N0YXRl
ID0gU0NUUF9BRERSX1JFQUNIQUJMRSB8CisJCQkgICAgU0NUUF9BRERSX1VOQ09ORklSTUVEOwor
CX0KKwkvKiBXZSBzZXQgdGhpcyB0byAwLCB0aGUgdGltZXIgY29kZSBrbm93cyB0aGF0CisJICog
dGhpcyBtZWFucyBpdHMgYW4gaW5pdGlhbCB2YWx1ZQorCSAqLworCW5ldC0+cnRvX25lZWRlZCA9
IDE7CisJbmV0LT5SVE8gPSAwOworCW5ldC0+UlRPX21lYXN1cmVkID0gMDsKKwlzdGNiLT5hc29j
Lm51bW5ldHMrKzsKKwluZXQtPnJlZl9jb3VudCA9IDE7CisJbmV0LT5jd3Jfd2luZG93X3RzbiA9
IG5ldC0+bGFzdF9jd3JfdHNuID0gc3RjYi0+YXNvYy5zZW5kaW5nX3NlcSAtIDE7CisJbmV0LT5w
b3J0ID0gcG9ydDsKKwluZXQtPmRzY3AgPSBzdGNiLT5hc29jLmRlZmF1bHRfZHNjcDsKKyNpZmRl
ZiBJTkVUNgorCW5ldC0+Zmxvd2xhYmVsID0gc3RjYi0+YXNvYy5kZWZhdWx0X2Zsb3dsYWJlbDsK
KyNlbmRpZgorCWlmIChzY3RwX3N0Y2JfaXNfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLCBzdGNi
LCBTQ1RQX1BDQl9GTEFHU19ET05PVF9IRUFSVEJFQVQpKSB7CisJCW5ldC0+ZGVzdF9zdGF0ZSB8
PSBTQ1RQX0FERFJfTk9IQjsKKwl9IGVsc2UgeworCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBf
QUREUl9OT0hCOworCX0KKwlpZiAoc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9l
cCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfRE9fTk9UX1BNVFVEKSkgeworCQluZXQtPmRlc3Rfc3Rh
dGUgfD0gU0NUUF9BRERSX05PX1BNVFVEOworCX0gZWxzZSB7CisJCW5ldC0+ZGVzdF9zdGF0ZSAm
PSB+U0NUUF9BRERSX05PX1BNVFVEOworCX0KKwluZXQtPmhlYXJ0X2JlYXRfZGVsYXkgPSBzdGNi
LT5hc29jLmhlYXJ0X2JlYXRfZGVsYXk7CisJLyogSW5pdCB0aGUgdGltZXIgc3RydWN0dXJlICov
CisJU0NUUF9PU19USU1FUl9JTklUKCZuZXQtPnJ4dF90aW1lci50aW1lcik7CisJU0NUUF9PU19U
SU1FUl9JTklUKCZuZXQtPnBtdHVfdGltZXIudGltZXIpOworCVNDVFBfT1NfVElNRVJfSU5JVCgm
bmV0LT5oYl90aW1lci50aW1lcik7CisKKwkvKiBOb3cgZ2VuZXJhdGUgYSByb3V0ZSBmb3IgdGhp
cyBndXkgKi8KKyNpZmRlZiBJTkVUNgorI2lmZGVmIFNDVFBfRU1CRURERURfVjZfU0NPUEUKKwkv
KiBLQU1FIGhhY2s6IGVtYmVkIHNjb3BlaWQgKi8KKwlpZiAobmV3YWRkci0+c2FfZmFtaWx5ID09
IEFGX0lORVQ2KSB7CisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisKKwkJc2luNiA9IChz
dHJ1Y3Qgc29ja2FkZHJfaW42ICopJm5ldC0+cm8uX2xfYWRkcjsKKyNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpZiBkZWZpbmVkKEFQUExFX0xFT1BB
UkQpIHx8IGRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpCisJCSh2b2lkKWluNl9lbWJlZHNjb3Bl
KCZzaW42LT5zaW42X2FkZHIsIHNpbjYsICZzdGNiLT5zY3RwX2VwLT5pcF9pbnAuaW5wLCBOVUxM
KTsKKyNlbHNlCisJCSh2b2lkKWluNl9lbWJlZHNjb3BlKCZzaW42LT5zaW42X2FkZHIsIHNpbjYs
ICZzdGNiLT5zY3RwX2VwLT5pcF9pbnAuaW5wLCBOVUxMLCBOVUxMKTsKKyNlbmRpZgorI2VsaWYg
ZGVmaW5lZChTQ1RQX0tBTUUpCisJCSh2b2lkKXNhNl9lbWJlZHNjb3BlKHNpbjYsIE1PRFVMRV9H
TE9CQUwoaXA2X3VzZV9kZWZ6b25lKSk7CisjZWxzZQorCQkodm9pZClpbjZfZW1iZWRzY29wZSgm
c2luNi0+c2luNl9hZGRyLCBzaW42KTsKKyNlbmRpZgorI2lmbmRlZiBTQ09QRURST1VUSU5HCisJ
CXNpbjYtPnNpbjZfc2NvcGVfaWQgPSAwOworI2VuZGlmCisJfQorI2VuZGlmIC8qIFNDVFBfRU1C
RURERURfVjZfU0NPUEUgKi8KKyNlbmRpZgorCVNDVFBfUlRBTExPQygoc2N0cF9yb3V0ZV90ICop
Jm5ldC0+cm8sCisJICAgICAgICAgICAgIHN0Y2ItPmFzb2MudnJmX2lkLAorCSAgICAgICAgICAg
ICBzdGNiLT5zY3RwX2VwLT5maWJudW0pOworCisJbmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDA7
CisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlpZiAoU0NUUF9ST1VURV9IQVNfVkFMSURf
SUZOKCZuZXQtPnJvKSkgeworCQkvKiBHZXQgc291cmNlIGFkZHJlc3MgKi8KKwkJbmV0LT5yby5f
c19hZGRyID0gc2N0cF9zb3VyY2VfYWRkcmVzc19zZWxlY3Rpb24oc3RjYi0+c2N0cF9lcCwKKwkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RjYiwKKwkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNjdHBfcm91
dGVfdCAqKSZuZXQtPnJvLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0Y2ItPmFzb2MudnJmX2lkKTsKKwkJaWYgKHN0Y2ItPmFzb2MuZGVmYXVsdF9tdHUg
PiAwKSB7CisJCQluZXQtPm10dSA9IHN0Y2ItPmFzb2MuZGVmYXVsdF9tdHU7CisJCQlzd2l0Y2gg
KG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQljYXNlIEFG
X0lORVQ6CisJCQkJbmV0LT5tdHUgKz0gU0NUUF9NSU5fVjRfT1ZFUkhFQUQ7CisJCQkJYnJlYWs7
CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQluZXQtPm10dSAr
PSBTQ1RQX01JTl9PVkVSSEVBRDsKKwkJCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKwkJCWNhc2UgQUZfQ09OTjoKKwkJCQluZXQtPm10dSArPSBzaXplb2Yoc3Ry
dWN0IHNjdHBoZHIpOworCQkJCWJyZWFrOworI2VuZGlmCisJCQlkZWZhdWx0OgorCQkJCWJyZWFr
OworCQkJfQorI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKwkJCWlmIChuZXQt
PnBvcnQpIHsKKwkJCQluZXQtPm10dSArPSAodWludDMyX3Qpc2l6ZW9mKHN0cnVjdCB1ZHBoZHIp
OworCQkJfQorI2VuZGlmCisJCX0gZWxzZSBpZiAobmV0LT5yby5fc19hZGRyICE9IE5VTEwpIHsK
KwkJCXVpbnQzMl90IGltdHUsIHJtdHUsIGhjbXR1OworCisJCQluZXQtPnNyY19hZGRyX3NlbGVj
dGVkID0gMTsKKwkJCS8qIE5vdyBnZXQgdGhlIGludGVyZmFjZSBNVFUgKi8KKwkJCWlmIChuZXQt
PnJvLl9zX2FkZHItPmlmbl9wICE9IE5VTEwpIHsKKwkJCQlpbXR1ID0gU0NUUF9HQVRIRVJfTVRV
X0ZST01fSU5URkMobmV0LT5yby5fc19hZGRyLT5pZm5fcCk7CisJCQl9IGVsc2UgeworCQkJCWlt
dHUgPSAwOworCQkJfQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisJCQlybXR1ID0gU0NUUF9HQVRIRVJfTVRVX0ZST01fUk9VVEUobmV0LT5yby5f
c19hZGRyLCAmbmV0LT5yby5fbF9hZGRyLnNhLCBuZXQtPnJvLnJvX25oKTsKKwkJCWhjbXR1ID0g
c2N0cF9oY19nZXRfbXR1KCZuZXQtPnJvLl9sX2FkZHIsIHN0Y2ItPnNjdHBfZXAtPmZpYm51bSk7
CisjZWxzZQorCQkJcm10dSA9IFNDVFBfR0FUSEVSX01UVV9GUk9NX1JPVVRFKG5ldC0+cm8uX3Nf
YWRkciwgJm5ldC0+cm8uX2xfYWRkci5zYSwgbmV0LT5yby5yb19ydCk7CisJCQloY210dSA9IDA7
CisjZW5kaWYKKwkJCW5ldC0+bXR1ID0gc2N0cF9taW5fbXR1KGhjbXR1LCBybXR1LCBpbXR1KTsK
KyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2Vs
c2UKKwkJCWlmIChybXR1ID09IDApIHsKKwkJCQkvKiBTdGFydCB0aGluZ3Mgb2ZmIHRvIG1hdGNo
IG10dSBvZiBpbnRlcmZhY2UgcGxlYXNlLiAqLworCQkJCVNDVFBfU0VUX01UVV9PRl9ST1VURSgm
bmV0LT5yby5fbF9hZGRyLnNhLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICBuZXQtPnJvLnJv
X3J0LCBuZXQtPm10dSk7CisJCQl9CisjZW5kaWYKKwkJfQorCX0KKyNlbmRpZgorCWlmIChuZXQt
Pm10dSA9PSAwKSB7CisJCWlmIChzdGNiLT5hc29jLmRlZmF1bHRfbXR1ID4gMCkgeworCQkJbmV0
LT5tdHUgPSBzdGNiLT5hc29jLmRlZmF1bHRfbXR1OworCQkJc3dpdGNoIChuZXQtPnJvLl9sX2Fk
ZHIuc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQkJY2FzZSBBRl9JTkVUOgorCQkJCW5l
dC0+bXR1ICs9IFNDVFBfTUlOX1Y0X09WRVJIRUFEOworCQkJCWJyZWFrOworI2VuZGlmCisjaWZk
ZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6CisJCQkJbmV0LT5tdHUgKz0gU0NUUF9NSU5fT1ZF
UkhFQUQ7CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJ
CQljYXNlIEFGX0NPTk46CisJCQkJbmV0LT5tdHUgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsK
KwkJCQlicmVhazsKKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKyNpZiBk
ZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisJCQlpZiAobmV0LT5wb3J0KSB7CisJCQkJ
bmV0LT5tdHUgKz0gKHVpbnQzMl90KXNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKKwkJCX0KKyNlbmRp
ZgorCQl9IGVsc2UgeworCQkJc3dpdGNoIChuZXdhZGRyLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJ
TkVUCisJCQljYXNlIEFGX0lORVQ6CisJCQkJbmV0LT5tdHUgPSBTQ1RQX0RFRkFVTFRfTVRVOwor
CQkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6CisJCQkJ
bmV0LT5tdHUgPSAxMjgwOworCQkJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorCQkJY2FzZSBBRl9DT05OOgorCQkJCW5ldC0+bXR1ID0gMTI4MDsKKwkJCQlicmVh
azsKKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKyNpZiBk
ZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisJaWYgKG5ldC0+cG9ydCkgeworCQluZXQt
Pm10dSAtPSAodWludDMyX3Qpc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCX0KKyNlbmRpZgorCWlm
IChmcm9tID09IFNDVFBfQUxMT0NfQVNPQykgeworCQlzdGNiLT5hc29jLnNtYWxsZXN0X210dSA9
IG5ldC0+bXR1OworCX0KKwlpZiAoc3RjYi0+YXNvYy5zbWFsbGVzdF9tdHUgPiBuZXQtPm10dSkg
eworCQlzY3RwX3BhdGhtdHVfYWRqdXN0bWVudChzdGNiLCBuZXQtPm10dSk7CisJfQorI2lmZGVm
IElORVQ2CisjaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQorCWlmIChuZXdhZGRyLT5zYV9m
YW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKworCQlz
aW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmbmV0LT5yby5fbF9hZGRyOworI2lmZGVmIFND
VFBfS0FNRQorCQkodm9pZClzYTZfcmVjb3ZlcnNjb3BlKHNpbjYpOworI2Vsc2UKKwkJKHZvaWQp
aW42X3JlY292ZXJzY29wZShzaW42LCAmc2luNi0+c2luNl9hZGRyLCBOVUxMKTsKKyNlbmRpZiAv
KiBTQ1RQX0tBTUUgKi8KKwl9CisjZW5kaWYgLyogU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLwor
I2VuZGlmCisKKwkvKiBKUlMgLSBVc2UgdGhlIGNvbmdlc3Rpb24gY29udHJvbCBnaXZlbiBpbiB0
aGUgQ0MgbW9kdWxlICovCisJaWYgKHN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfc2V0X2lu
aXRpYWxfY2NfcGFyYW0gIT0gTlVMTCkKKwkJKCpzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3Rw
X3NldF9pbml0aWFsX2NjX3BhcmFtKShzdGNiLCBuZXQpOworCisJLyoKKwkgKiBDTVQ6IENVQyBh
bGdvIC0gc2V0IGZpbmRfcHNldWRvX2N1bWFjayB0byBUUlVFICgxKSBhdCBiZWdpbm5pbmcKKwkg
KiBvZiBhc3NvYyAoMjAwNS8wNi8yNywgaXllbmdhckBjaXMudWRlbC5lZHUpCisJICovCisJbmV0
LT5maW5kX3BzZXVkb19jdW1hY2sgPSAxOworCW5ldC0+ZmluZF9ydHhfcHNldWRvX2N1bWFjayA9
IDE7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KwkvKiBDaG9vc2UgYW4gaW5pdGlhbCBmbG93aWQuICovCisJbmV0LT5mbG93aWQgPSBzdGNiLT5h
c29jLm15X3Z0YWcgXgorCSAgICAgICAgICAgICAgbnRvaHMoc3RjYi0+cnBvcnQpIF4KKwkgICAg
ICAgICAgICAgIG50b2hzKHN0Y2ItPnNjdHBfZXAtPnNjdHBfbHBvcnQpOworCW5ldC0+Zmxvd3R5
cGUgPSBNX0hBU0hUWVBFX09QQVFVRV9IQVNIOworI2VuZGlmCisJaWYgKG5ldHApIHsKKwkJKm5l
dHAgPSBuZXQ7CisJfQorCW5ldGZpcnN0ID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2MubmV0cyk7
CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlp
ZiAobmV0LT5yby5yb19uaCA9PSBOVUxMKSB7CisjZWxzZQorCWlmIChuZXQtPnJvLnJvX3J0ID09
IE5VTEwpIHsKKyNlbmRpZgorCQkvKiBTaW5jZSB3ZSBoYXZlIG5vIHJvdXRlIHB1dCBpdCBhdCB0
aGUgYmFjayAqLworCQlUQUlMUV9JTlNFUlRfVEFJTCgmc3RjYi0+YXNvYy5uZXRzLCBuZXQsIHNj
dHBfbmV4dCk7CisJfSBlbHNlIGlmIChuZXRmaXJzdCA9PSBOVUxMKSB7CisJCS8qIFdlIGFyZSB0
aGUgZmlyc3Qgb25lIGluIHRoZSBwb29sLiAqLworCQlUQUlMUV9JTlNFUlRfSEVBRCgmc3RjYi0+
YXNvYy5uZXRzLCBuZXQsIHNjdHBfbmV4dCk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
IWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwl9IGVsc2UgaWYgKG5ldGZpcnN0LT5yby5yb19uaCA9
PSBOVUxMKSB7CisjZWxzZQorCX0gZWxzZSBpZiAobmV0Zmlyc3QtPnJvLnJvX3J0ID09IE5VTEwp
IHsKKyNlbmRpZgorCQkvKgorCQkgKiBGaXJzdCBvbmUgaGFzIE5PIHJvdXRlLiBQbGFjZSB0aGlz
IG9uZSBhaGVhZCBvZiB0aGUgZmlyc3QKKwkJICogb25lLgorCQkgKi8KKwkJVEFJTFFfSU5TRVJU
X0hFQUQoJnN0Y2ItPmFzb2MubmV0cywgbmV0LCBzY3RwX25leHQpOworI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJfSBlbHNlIGlmIChuZXQtPnJv
LnJvX25oLT5uaF9pZnAgIT0gbmV0Zmlyc3QtPnJvLnJvX25oLT5uaF9pZnApIHsKKyNlbHNlCisJ
fSBlbHNlIGlmIChuZXQtPnJvLnJvX3J0LT5ydF9pZnAgIT0gbmV0Zmlyc3QtPnJvLnJvX3J0LT5y
dF9pZnApIHsKKyNlbmRpZgorCQkvKgorCQkgKiBUaGlzIG9uZSBoYXMgYSBkaWZmZXJlbnQgaW50
ZXJmYWNlIHRoYW4gdGhlIG9uZSBhdCB0aGUKKwkJICogdG9wIG9mIHRoZSBsaXN0LiBQbGFjZSBp
dCBhaGVhZC4KKwkJICovCisJCVRBSUxRX0lOU0VSVF9IRUFEKCZzdGNiLT5hc29jLm5ldHMsIG5l
dCwgc2N0cF9uZXh0KTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBPayB3ZSBoYXZlIHRoZSBzYW1l
IGludGVyZmFjZSBhcyB0aGUgZmlyc3Qgb25lLiBNb3ZlCisJCSAqIGZvcndhcmQgdW50aWwgd2Ug
ZmluZCBlaXRoZXIgYSkgb25lIHdpdGggYSBOVUxMIHJvdXRlLi4uCisJCSAqIGluc2VydCBhaGVh
ZCBvZiB0aGF0IGIpIG9uZSB3aXRoIGEgZGlmZmVyZW50IGlmcC4uIGluc2VydAorCQkgKiBhZnRl
ciB0aGF0LiBjKSBlbmQgb2YgdGhlIGxpc3QuLiBpbnNlcnQgYXQgdGhlIHRhaWwuCisJCSAqLwor
CQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXRsb29rOworCisJCWRvIHsKKwkJCW5ldGxvb2sgPSBUQUlM
UV9ORVhUKG5ldGZpcnN0LCBzY3RwX25leHQpOworCQkJaWYgKG5ldGxvb2sgPT0gTlVMTCkgewor
CQkJCS8qIEVuZCBvZiB0aGUgbGlzdCAqLworCQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5h
c29jLm5ldHMsIG5ldCwgc2N0cF9uZXh0KTsKKwkJCQlicmVhazsKKyNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJfSBlbHNlIGlmIChuZXRsb29r
LT5yby5yb19uaCA9PSBOVUxMKSB7CisjZWxzZQorCQkJfSBlbHNlIGlmIChuZXRsb29rLT5yby5y
b19ydCA9PSBOVUxMKSB7CisjZW5kaWYKKwkJCQkvKiBuZXh0IG9uZSBoYXMgTk8gcm91dGUgKi8K
KwkJCQlUQUlMUV9JTlNFUlRfQkVGT1JFKG5ldGZpcnN0LCBuZXQsIHNjdHBfbmV4dCk7CisJCQkJ
YnJlYWs7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwkJCX0gZWxzZSBpZiAobmV0bG9vay0+cm8ucm9fbmgtPm5oX2lmcCAhPSBuZXQtPnJvLnJv
X25oLT5uaF9pZnApIHsKKyNlbHNlCisJCQl9IGVsc2UgaWYgKG5ldGxvb2stPnJvLnJvX3J0LT5y
dF9pZnAgIT0gbmV0LT5yby5yb19ydC0+cnRfaWZwKSB7CisjZW5kaWYKKwkJCQlUQUlMUV9JTlNF
UlRfQUZURVIoJnN0Y2ItPmFzb2MubmV0cywgbmV0bG9vaywKKwkJCQkgICAgICAgICAgICAgICAg
ICAgbmV0LCBzY3RwX25leHQpOworCQkJCWJyZWFrOworCQkJfQorCQkJLyogU2hpZnQgZm9yd2Fy
ZCAqLworCQkJbmV0Zmlyc3QgPSBuZXRsb29rOworCQl9IHdoaWxlIChuZXRsb29rICE9IE5VTEwp
OworCX0KKworCS8qIGdvdCB0byBoYXZlIGEgcHJpbWFyeSBzZXQgKi8KKwlpZiAoc3RjYi0+YXNv
Yy5wcmltYXJ5X2Rlc3RpbmF0aW9uID09IDApIHsKKwkJc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3Rp
bmF0aW9uID0gbmV0OworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisJfSBlbHNlIGlmICgoc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLT5y
by5yb19uaCA9PSBOVUxMKSAmJgorCSAgICAgICAgICAgKG5ldC0+cm8ucm9fbmgpICYmCisjZWxz
ZQorCX0gZWxzZSBpZiAoKHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbi0+cm8ucm9fcnQg
PT0gTlVMTCkgJiYKKwkgICAgICAgICAgIChuZXQtPnJvLnJvX3J0KSAmJgorI2VuZGlmCisJICAg
ICAgICAgICAoKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkgPT0gMCkp
IHsKKwkJLyogTm8gcm91dGUgdG8gY3VycmVudCBwcmltYXJ5IGFkb3B0IG5ldyBwcmltYXJ5ICov
CisJCXN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiA9IG5ldDsKKwl9CisJLyogVmFsaWRh
dGUgcHJpbWFyeSBpcyBmaXJzdCAqLworCW5ldCA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5l
dHMpOworCWlmICgobmV0ICE9IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbikgJiYKKwkg
ICAgKHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbikpIHsKKwkJLyogZmlyc3Qgb25lIG9u
IHRoZSBsaXN0IGlzIE5PVCB0aGUgcHJpbWFyeQorCQkgKiBzY3RwX2NtcGFkZHIoKSBpcyBtdWNo
IG1vcmUgZWZmaWNpZW50IGlmCisJCSAqIHRoZSBwcmltYXJ5IGlzIHRoZSBmaXJzdCBvbiB0aGUg
bGlzdCwgbWFrZSBpdAorCQkgKiBzby4KKwkJICovCisJCVRBSUxRX1JFTU9WRSgmc3RjYi0+YXNv
Yy5uZXRzLAorCQkJICAgICBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24sIHNjdHBfbmV4
dCk7CisJCVRBSUxRX0lOU0VSVF9IRUFEKCZzdGNiLT5hc29jLm5ldHMsCisJCQkJICBzdGNiLT5h
c29jLnByaW1hcnlfZGVzdGluYXRpb24sIHNjdHBfbmV4dCk7CisJfQorCXJldHVybiAoMCk7Cit9
CisKK3N0YXRpYyB1aW50MzJfdAorc2N0cF9hbG9jX2FfYXNzb2NfaWQoc3RydWN0IHNjdHBfaW5w
Y2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiKQoreworCXVpbnQzMl90IGlkOworCXN0cnVj
dCBzY3RwYXNvY2hlYWQgKmhlYWQ7CisJc3RydWN0IHNjdHBfdGNiICpsc3RjYjsKKworIHRyeV9h
Z2FpbjoKKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdP
TkUpIHsKKwkJLyogVFNOSCAqLworCQlyZXR1cm4gKDApOworCX0KKwkvKgorCSAqIFdlIGRvbid0
IGFsbG93IGFzc29jIGlkIHRvIGJlIG9uZSBvZiBTQ1RQX0ZVVFVSRV9BU1NPQywKKwkgKiBTQ1RQ
X0NVUlJFTlRfQVNTT0MgYW5kIFNDVFBfQUxMX0FTU09DLgorCSAqLworCWlmIChpbnAtPnNjdHBf
YXNzb2NpZF9jb3VudGVyIDw9IFNDVFBfQUxMX0FTU09DKSB7CisJCWlucC0+c2N0cF9hc3NvY2lk
X2NvdW50ZXIgPSBTQ1RQX0FMTF9BU1NPQyArIDE7CisJfQorCWlkID0gaW5wLT5zY3RwX2Fzc29j
aWRfY291bnRlcjsKKwlpbnAtPnNjdHBfYXNzb2NpZF9jb3VudGVyKys7CisJbHN0Y2IgPSBzY3Rw
X2ZpbmRhc29jX2VwX2Fzb2NpZF9sb2NrZWQoaW5wLCAoc2N0cF9hc3NvY190KWlkLCAwKTsKKwlp
ZiAobHN0Y2IpIHsKKwkJZ290byB0cnlfYWdhaW47CisJfQorCWhlYWQgPSAmaW5wLT5zY3RwX2Fz
b2NpZGhhc2hbU0NUUF9QQ0JIQVNIX0FTT0MoaWQsIGlucC0+aGFzaGFzb2NpZG1hcmspXTsKKwlM
SVNUX0lOU0VSVF9IRUFEKGhlYWQsIHN0Y2IsIHNjdHBfdGNiYXNvY2lkaGFzaCk7CisJc3RjYi0+
YXNvYy5pbl9hc29jaWRfaGFzaCA9IDE7CisJcmV0dXJuIChpZCk7Cit9CisKKy8qCisgKiBhbGxv
Y2F0ZSBhbiBhc3NvY2lhdGlvbiBhbmQgYWRkIGl0IHRvIHRoZSBlbmRwb2ludC4gVGhlIGNhbGxl
ciBtdXN0IGJlCisgKiBjYXJlZnVsIHRvIGFkZCBhbGwgYWRkaXRpb25hbCBhZGRyZXNzZXMgb25j
ZSB0aGV5IGFyZSBrbm93IHJpZ2h0IGF3YXkgb3IKKyAqIGVsc2UgdGhlIGFzc29jIHdpbGwgYmUg
bWF5IGV4cGVyaWVuY2UgYSBibGFja291dCBzY2VuYXJpby4KKyAqLworc3RydWN0IHNjdHBfdGNi
ICoKK3NjdHBfYWxvY19hc3NvYyhzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc29ja2Fk
ZHIgKmZpcnN0YWRkciwKKyAgICAgICAgICAgICAgICBpbnQgKmVycm9yLCB1aW50MzJfdCBvdmVy
cmlkZV90YWcsIHVpbnQzMl90IHZyZl9pZCwKKyAgICAgICAgICAgICAgICB1aW50MTZfdCBvX3N0
cmVhbXMsIHVpbnQxNl90IHBvcnQsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgdGhyZWFkICpwLAorI2Vs
aWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisgICAgICAgICAg
ICAgICAgUEtUSFJFQUQgcCwKKyNlbHNlCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorICAg
ICAgICAgICAgICAgIC8qICBfX1VzZXJzcGFjZV9fIE5VTEwgcHJvYyBpcyBnb2luZyB0byBiZSBw
YXNzZWQgaGVyZS4gU2VlIHNjdHBfbG93ZXJfc29zZW5kICovCisjZW5kaWYKKyAgICAgICAgICAg
ICAgICBzdHJ1Y3QgcHJvYyAqcCwKKyNlbmRpZgorICAgICAgICAgICAgICAgIGludCBpbml0aWFs
aXplX2F1dGhfcGFyYW1zKQoreworCS8qIG5vdGUgdGhlIHAgYXJndW1lbnQgaXMgb25seSB2YWxp
ZCBpbiB1bmJvdW5kIHNvY2tldHMgKi8KKworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKKwlzdHJ1
Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qgc2N0cGFzb2NoZWFkICpoZWFkOwor
CXVpbnQxNl90IHJwb3J0OworCWludCBlcnI7CisKKwkvKgorCSAqIEFzc3VtcHRpb24gbWFkZSBo
ZXJlOiBDYWxsZXIgaGFzIGRvbmUgYQorCSAqIHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIo
ZXAsIGFkZHIncyk7IHRvIG1ha2Ugc3VyZSB0aGUKKwkgKiBhZGRyZXNzIGRvZXMgbm90IGV4aXN0
IGFscmVhZHkuCisJICovCisJaWYgKFNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9hc29jKSA+PSBT
Q1RQX01BWF9OVU1fT0ZfQVNPQykgeworCQkvKiBIaXQgbWF4IGFzc29jLCBzb3JyeSBubyBtb3Jl
ICovCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9QQ0IsIEVOT0JVRlMpOworCQkqZXJyb3IgPSBFTk9CVUZTOworCQlyZXR1cm4gKE5VTEwpOwor
CX0KKwlpZiAoZmlyc3RhZGRyID09IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUlOVkFMKTsKKwkJKmVycm9yID0gRUlO
VkFMOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlTQ1RQX0lOUF9STE9DSyhpbnApOworCWlmICgo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgJiYKKwkgICAgKChz
Y3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfUE9SVFJFVVNFKSkgfHwKKwkg
ICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpKSkgeworCQkv
KgorCQkgKiBJZiBpdHMgaW4gdGhlIFRDUCBwb29sLCBpdHMgTk9UIGFsbG93ZWQgdG8gY3JlYXRl
IGFuCisJCSAqIGFzc29jaWF0aW9uLiBUaGUgcGFyZW50IGxpc3RlbmVyIG5lZWRzIHRvIGNhbGwK
KwkJICogc2N0cF9hbG9jX2Fzc29jLi4gb3IgdGhlIG9uZS0yLW1hbnkgc29ja2V0LiBJZiBhIHBl
ZWxlZAorCQkgKiBvZmYsIG9yIGNvbm5lY3RlZCBvbmUgZG9lcyB0aGlzLi4gaXRzIGFuIGVycm9y
LgorCQkgKi8KKwkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFSU5WQUwpOworCQkqZXJyb3Ig
PSBFSU5WQUw7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkgICAgKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX1RDUFRZUEUpKSB7CisJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfV0FTX0NPTk5FQ1RFRCkgfHwKKwkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19XQVNfQUJPUlRFRCkpIHsKKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0Is
IEVJTlZBTCk7CisJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJ
fQorCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IzLCAiQWxsb2NhdGUgYW4gYXNzb2NpYXRpb24gZm9y
IHBlZXI6Iik7CisjaWZkZWYgU0NUUF9ERUJVRworCWlmIChmaXJzdGFkZHIpIHsKKwkJU0NUUERC
R19BRERSKFNDVFBfREVCVUdfUENCMywgZmlyc3RhZGRyKTsKKwkJc3dpdGNoIChmaXJzdGFkZHIt
PnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJY2FzZSBBRl9JTkVUOgorCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX1BDQjMsICJQb3J0OiVkXG4iLAorCQkJICAgICAgICBudG9ocygoKHN0cnVjdCBz
b2NrYWRkcl9pbiAqKWZpcnN0YWRkciktPnNpbl9wb3J0KSk7CisJCQlicmVhazsKKyNlbmRpZgor
I2lmZGVmIElORVQ2CisJCWNhc2UgQUZfSU5FVDY6CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfUENC
MywgIlBvcnQ6JWRcbiIsCisJCQkgICAgICAgIG50b2hzKCgoc3RydWN0IHNvY2thZGRyX2luNiAq
KWZpcnN0YWRkciktPnNpbjZfcG9ydCkpOworCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCisJCWNhc2UgQUZfQ09OTjoKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19Q
Q0IzLCAiUG9ydDolZFxuIiwKKwkJCSAgICAgICAgbnRvaHMoKChzdHJ1Y3Qgc29ja2FkZHJfY29u
biAqKWZpcnN0YWRkciktPnNjb25uX3BvcnQpKTsKKwkJCWJyZWFrOworI2VuZGlmCisJCWRlZmF1
bHQ6CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0Iz
LCJOb25lXG4iKTsKKwl9CisjZW5kaWYJCQkJLyogU0NUUF9ERUJVRyAqLworCXN3aXRjaCAoZmly
c3RhZGRyLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJY2FzZSBBRl9JTkVUOgorCXsKKwkJ
c3RydWN0IHNvY2thZGRyX2luICpzaW47CisKKwkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAq
KWZpcnN0YWRkcjsKKwkJaWYgKChudG9ocyhzaW4tPnNpbl9wb3J0KSA9PSAwKSB8fAorCQkgICAg
KHNpbi0+c2luX2FkZHIuc19hZGRyID09IElOQUREUl9BTlkpIHx8CisJCSAgICAoc2luLT5zaW5f
YWRkci5zX2FkZHIgPT0gSU5BRERSX0JST0FEQ0FTVCkgfHwKKwkJICAgIElOX01VTFRJQ0FTVChu
dG9obChzaW4tPnNpbl9hZGRyLnNfYWRkcikpIHx8CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorCQkgICAgKCgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfQ09OTikg
IT0gMCkgfHwKKwkJICAgICAoKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VO
RF9WNikgIT0gMCkgJiYKKwkJICAgICAgKFNDVFBfSVBWNl9WNk9OTFkoaW5wKSAhPSAwKSkpKSB7
CisjZWxzZQorCQkgICAgKCgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRf
VjYpICE9IDApICYmCisJCSAgICAgKFNDVFBfSVBWNl9WNk9OTFkoaW5wKSAhPSAwKSkpIHsKKyNl
bmRpZgorCQkJLyogSW52YWxpZCBhZGRyZXNzICovCisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7
CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
UENCLCBFSU5WQUwpOworCQkJKmVycm9yID0gRUlOVkFMOworCQkJcmV0dXJuIChOVUxMKTsKKwkJ
fQorCQlycG9ydCA9IHNpbi0+c2luX3BvcnQ7CisJCWJyZWFrOworCX0KKyNlbmRpZgorI2lmZGVm
IElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKwl7CisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7
CisKKwkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopZmlyc3RhZGRyOworCQlpZiAoKG50
b2hzKHNpbjYtPnNpbjZfcG9ydCkgPT0gMCkgfHwKKwkJICAgIElONl9JU19BRERSX1VOU1BFQ0lG
SUVEKCZzaW42LT5zaW42X2FkZHIpIHx8CisJCSAgICBJTjZfSVNfQUREUl9NVUxUSUNBU1QoJnNp
bjYtPnNpbjZfYWRkcikgfHwKKwkJICAgICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfQk9VTkRfVjYpID09IDApKSB7CisJCQkvKiBJbnZhbGlkIGFkZHJlc3MgKi8KKwkJCVNDVFBf
SU5QX1JVTkxPQ0soaW5wKTsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVJTlZBTCk7CisJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQly
ZXR1cm4gKE5VTEwpOworCQl9CisJCXJwb3J0ID0gc2luNi0+c2luNl9wb3J0OworCQlicmVhazsK
Kwl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJY2FzZSBBRl9DT05OOgor
CXsKKwkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uOworCisJCXNjb25uID0gKHN0cnVjdCBz
b2NrYWRkcl9jb25uICopZmlyc3RhZGRyOworCQlpZiAoKG50b2hzKHNjb25uLT5zY29ubl9wb3J0
KSA9PSAwKSB8fAorCQkgICAgKHNjb25uLT5zY29ubl9hZGRyID09IE5VTEwpIHx8CisJCSAgICAo
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX0NPTk4pID09IDApKSB7CisJ
CQkvKiBJbnZhbGlkIGFkZHJlc3MgKi8KKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVJ
TlZBTCk7CisJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCXJw
b3J0ID0gc2Nvbm4tPnNjb25uX3BvcnQ7CisJCWJyZWFrOworCX0KKyNlbmRpZgorCWRlZmF1bHQ6
CisJCS8qIG5vdCBzdXBwb3J0ZWQgZmFtaWx5IHR5cGUgKi8KKwkJU0NUUF9JTlBfUlVOTE9DSyhp
bnApOworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfUENCLCBFSU5WQUwpOworCQkqZXJyb3IgPSBFSU5WQUw7CisJCXJldHVybiAoTlVMTCk7CisJ
fQorCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfVU5CT1VORCkgeworCQkvKgorCQkgKiBJZiB5b3UgaGF2ZSBub3QgcGVyZm9ybWVk
IGEgYmluZCwgdGhlbiB3ZSBuZWVkIHRvIGRvIHRoZQorCQkgKiBlcGhlbWVyYWwgYmluZCBmb3Ig
eW91LgorCQkgKi8KKwkJaWYgKChlcnIgPSBzY3RwX2lucGNiX2JpbmQoaW5wLT5zY3RwX3NvY2tl
dCwgTlVMTCwgTlVMTCwgcCkpKSB7CisJCQkvKiBiaW5kIGVycm9yLCBwcm9iYWJseSBwZXJtICov
CisJCQkqZXJyb3IgPSBlcnI7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJfQorCXN0Y2IgPSBT
Q1RQX1pPTkVfR0VUKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2Fzb2MpLCBzdHJ1Y3Qgc2N0cF90
Y2IpOworCWlmIChzdGNiID09IE5VTEwpIHsKKwkJLyogb3V0IG9mIG1lbW9yeT8gKi8KKwkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRU5P
TUVNKTsKKwkJKmVycm9yID0gRU5PTUVNOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlTQ1RQX0lO
Q1JfQVNPQ19DT1VOVCgpOworCisJbWVtc2V0KHN0Y2IsIDAsIHNpemVvZigqc3RjYikpOworCWFz
b2MgPSAmc3RjYi0+YXNvYzsKKworCVNDVFBfVENCX0xPQ0tfSU5JVChzdGNiKTsKKwlTQ1RQX1RD
Ql9TRU5EX0xPQ0tfSU5JVChzdGNiKTsKKwlzdGNiLT5ycG9ydCA9IHJwb3J0OworCS8qIHNldHVw
IGJhY2sgcG9pbnRlcidzICovCisJc3RjYi0+c2N0cF9lcCA9IGlucDsKKwlzdGNiLT5zY3RwX3Nv
Y2tldCA9IGlucC0+c2N0cF9zb2NrZXQ7CisJaWYgKChlcnIgPSBzY3RwX2luaXRfYXNvYyhpbnAs
IHN0Y2IsIG92ZXJyaWRlX3RhZywgdnJmX2lkLCBvX3N0cmVhbXMpKSkgeworCQkvKiBmYWlsZWQg
Ki8KKwkJU0NUUF9UQ0JfTE9DS19ERVNUUk9ZKHN0Y2IpOworCQlTQ1RQX1RDQl9TRU5EX0xPQ0tf
REVTVFJPWShzdGNiKTsKKwkJU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVf
YXNvYyksIHN0Y2IpOworCQlTQ1RQX0RFQ1JfQVNPQ19DT1VOVCgpOworCQkqZXJyb3IgPSBlcnI7
CisJCXJldHVybiAoTlVMTCk7CisJfQorCS8qIGFuZCB0aGUgcG9ydCAqLworCVNDVFBfSU5QX0lO
Rk9fV0xPQ0soKTsKKwlTQ1RQX0lOUF9XTE9DSyhpbnApOworCWlmIChpbnAtPnNjdHBfZmxhZ3Mg
JiAoU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUgfCBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxM
R09ORSkpIHsKKwkJLyogaW5wY2IgZnJlZWQgd2hpbGUgYWxsb2MgZ29pbmcgb24gKi8KKwkJU0NU
UF9UQ0JfTE9DS19ERVNUUk9ZKHN0Y2IpOworCQlTQ1RQX1RDQl9TRU5EX0xPQ0tfREVTVFJPWShz
dGNiKTsKKwkJU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfYXNvYyksIHN0
Y2IpOworCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCVNDVFBfSU5QX0lORk9fV1VOTE9DSygp
OworCQlTQ1RQX0RFQ1JfQVNPQ19DT1VOVCgpOworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFSU5WQUwpOworCQkqZXJyb3IgPSBFSU5W
QUw7CisJCXJldHVybiAoTlVMTCk7CisJfQorCVNDVFBfVENCX0xPQ0soc3RjYik7CisKKwlhc29j
LT5hc3NvY19pZCA9IHNjdHBfYWxvY19hX2Fzc29jX2lkKGlucCwgc3RjYik7CisJLyogbm93IHRo
YXQgbXlfdnRhZyBpcyBzZXQsIGFkZCBpdCB0byB0aGUgaGFzaCAqLworCWhlYWQgPSAmU0NUUF9C
QVNFX0lORk8oc2N0cF9hc29jaGFzaClbU0NUUF9QQ0JIQVNIX0FTT0Moc3RjYi0+YXNvYy5teV92
dGFnLCBTQ1RQX0JBU0VfSU5GTyhoYXNoYXNvY21hcmspKV07CisJLyogcHV0IGl0IGluIHRoZSBi
dWNrZXQgaW4gdGhlIHZ0YWcgaGFzaCBvZiBhc3NvYydzIGZvciB0aGUgc3lzdGVtICovCisJTElT
VF9JTlNFUlRfSEVBRChoZWFkLCBzdGNiLCBzY3RwX2Fzb2NzKTsKKwlTQ1RQX0lOUF9JTkZPX1dV
TkxPQ0soKTsKKworCWlmIChzY3RwX2FkZF9yZW1vdGVfYWRkcihzdGNiLCBmaXJzdGFkZHIsIE5V
TEwsIHBvcnQsIFNDVFBfRE9fU0VUU0NPUEUsIFNDVFBfQUxMT0NfQVNPQykpIHsKKwkJLyogZmFp
bHVyZS4uIG1lbW9yeSBlcnJvcj8gKi8KKwkJaWYgKGFzb2MtPnN0cm1vdXQpIHsKKwkJCVNDVFBf
RlJFRShhc29jLT5zdHJtb3V0LCBTQ1RQX01fU1RSTU8pOworCQkJYXNvYy0+c3RybW91dCA9IE5V
TEw7CisJCX0KKwkJaWYgKGFzb2MtPm1hcHBpbmdfYXJyYXkpIHsKKwkJCVNDVFBfRlJFRShhc29j
LT5tYXBwaW5nX2FycmF5LCBTQ1RQX01fTUFQKTsKKwkJCWFzb2MtPm1hcHBpbmdfYXJyYXkgPSBO
VUxMOworCQl9CisJCWlmIChhc29jLT5ucl9tYXBwaW5nX2FycmF5KSB7CisJCQlTQ1RQX0ZSRUUo
YXNvYy0+bnJfbWFwcGluZ19hcnJheSwgU0NUUF9NX01BUCk7CisJCQlhc29jLT5ucl9tYXBwaW5n
X2FycmF5ID0gTlVMTDsKKwkJfQorCQlTQ1RQX0RFQ1JfQVNPQ19DT1VOVCgpOworCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7CisJCVNDVFBfVENCX0xPQ0tfREVTVFJPWShzdGNiKTsKKwkJU0NUUF9U
Q0JfU0VORF9MT0NLX0RFU1RST1koc3RjYik7CisJCUxJU1RfUkVNT1ZFKHN0Y2IsIHNjdHBfdGNi
YXNvY2lkaGFzaCk7CisJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2Fz
b2MpLCBzdGNiKTsKKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFTk9CVUZTKTsKKwkJKmVy
cm9yID0gRU5PQlVGUzsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJLyogSW5pdCBhbGwgdGhlIHRp
bWVycyAqLworCVNDVFBfT1NfVElNRVJfSU5JVCgmYXNvYy0+ZGFja190aW1lci50aW1lcik7CisJ
U0NUUF9PU19USU1FUl9JTklUKCZhc29jLT5zdHJyZXNldF90aW1lci50aW1lcik7CisJU0NUUF9P
U19USU1FUl9JTklUKCZhc29jLT5hc2NvbmZfdGltZXIudGltZXIpOworCVNDVFBfT1NfVElNRVJf
SU5JVCgmYXNvYy0+c2h1dF9ndWFyZF90aW1lci50aW1lcik7CisJU0NUUF9PU19USU1FUl9JTklU
KCZhc29jLT5hdXRvY2xvc2VfdGltZXIudGltZXIpOworCVNDVFBfT1NfVElNRVJfSU5JVCgmYXNv
Yy0+ZGVsZXRlX3ByaW1fdGltZXIudGltZXIpOworCisJTElTVF9JTlNFUlRfSEVBRCgmaW5wLT5z
Y3RwX2Fzb2NfbGlzdCwgc3RjYiwgc2N0cF90Y2JsaXN0KTsKKwkvKiBub3cgZmlsZSB0aGUgcG9y
dCB1bmRlciB0aGUgaGFzaCBhcyB3ZWxsICovCisJaWYgKGlucC0+c2N0cF90Y2JoYXNoICE9IE5V
TEwpIHsKKwkJaGVhZCA9ICZpbnAtPnNjdHBfdGNiaGFzaFtTQ1RQX1BDQkhBU0hfQUxMQUREUihz
dGNiLT5ycG9ydCwKKwkJICAgIGlucC0+c2N0cF9oYXNobWFyayldOworCQlMSVNUX0lOU0VSVF9I
RUFEKGhlYWQsIHN0Y2IsIHNjdHBfdGNiaGFzaCk7CisJfQorCWlmIChpbml0aWFsaXplX2F1dGhf
cGFyYW1zID09IFNDVFBfSU5JVElBTElaRV9BVVRIX1BBUkFNUykgeworCQlzY3RwX2luaXRpYWxp
emVfYXV0aF9wYXJhbXMoaW5wLCBzdGNiKTsKKwl9CisJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwor
CVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAiQXNzb2NpYXRpb24gJXAgbm93IGFsbG9jYXRlZFxu
IiwgKHZvaWQgKilzdGNiKTsKKwlyZXR1cm4gKHN0Y2IpOworfQorCit2b2lkCitzY3RwX3JlbW92
ZV9uZXQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJ
c3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsK
KworCWlucCA9IHN0Y2ItPnNjdHBfZXA7CisJYXNvYyA9ICZzdGNiLT5hc29jOworCWFzb2MtPm51
bW5ldHMtLTsKKwlUQUlMUV9SRU1PVkUoJmFzb2MtPm5ldHMsIG5ldCwgc2N0cF9uZXh0KTsKKwlp
ZiAobmV0ID09IGFzb2MtPnByaW1hcnlfZGVzdGluYXRpb24pIHsKKwkJLyogUmVzZXQgcHJpbWFy
eSAqLworCQlzdHJ1Y3Qgc2N0cF9uZXRzICpsbmV0OworCisJCWxuZXQgPSBUQUlMUV9GSVJTVCgm
YXNvYy0+bmV0cyk7CisJCS8qIE1vYmlsaXR5IGFkYXB0YXRpb24KKwkJICAgSWRlYWxseSwgaWYg
ZGVsZXRlZCBkZXN0aW5hdGlvbiBpcyB0aGUgcHJpbWFyeSwgaXQgYmVjb21lcworCQkgICBhIGZh
c3QgcmV0cmFuc21pc3Npb24gdHJpZ2dlciBieSB0aGUgc3Vic2VxdWVudCBTRVQgUFJJTUFSWS4K
KwkJICAgKGJ5IG1pY2NoaWUpCisJCSAqLworCQlpZiAoc2N0cF9pc19tb2JpbGl0eV9mZWF0dXJl
X29uKHN0Y2ItPnNjdHBfZXAsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NU
UF9NT0JJTElUWV9CQVNFKSB8fAorCQkgICAgc2N0cF9pc19tb2JpbGl0eV9mZWF0dXJlX29uKHN0
Y2ItPnNjdHBfZXAsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9NT0JJ
TElUWV9GQVNUSEFORE9GRikpIHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAicmVt
b3ZlX25ldDogcHJpbWFyeSBkc3QgaXMgZGVsZXRpbmdcbiIpOworCQkJaWYgKGFzb2MtPmRlbGV0
ZWRfcHJpbWFyeSAhPSBOVUxMKSB7CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJy
ZW1vdmVfbmV0OiBkZWxldGVkIHByaW1hcnkgbWF5IGJlIGFscmVhZHkgc3RvcmVkXG4iKTsKKwkJ
CQlnb3RvIG91dDsKKwkJCX0KKwkJCWFzb2MtPmRlbGV0ZWRfcHJpbWFyeSA9IG5ldDsKKwkJCWF0
b21pY19hZGRfaW50KCZuZXQtPnJlZl9jb3VudCwgMSk7CisJCQltZW1zZXQoJm5ldC0+bGFzdHNh
LCAwLCBzaXplb2YobmV0LT5sYXN0c2EpKTsKKwkJCW1lbXNldCgmbmV0LT5sYXN0c3YsIDAsIHNp
emVvZihuZXQtPmxhc3RzdikpOworCQkJc2N0cF9tb2JpbGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNj
dHBfZXAsCisJCQkJCQkgU0NUUF9NT0JJTElUWV9QUklNX0RFTEVURUQpOworCQkJc2N0cF90aW1l
cl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfUFJJTV9ERUxFVEVELAorCQkJCQkgc3RjYi0+c2N0cF9l
cCwgc3RjYiwgTlVMTCk7CisJCX0KK291dDoKKwkJLyogVHJ5IHRvIGZpbmQgYSBjb25maXJtZWQg
cHJpbWFyeSAqLworCQlhc29jLT5wcmltYXJ5X2Rlc3RpbmF0aW9uID0gc2N0cF9maW5kX2FsdGVy
bmF0ZV9uZXQoc3RjYiwgbG5ldCwgMCk7CisJfQorCWlmIChuZXQgPT0gYXNvYy0+bGFzdF9kYXRh
X2NodW5rX2Zyb20pIHsKKwkJLyogUmVzZXQgcHJpbWFyeSAqLworCQlhc29jLT5sYXN0X2RhdGFf
Y2h1bmtfZnJvbSA9IFRBSUxRX0ZJUlNUKCZhc29jLT5uZXRzKTsKKwl9CisJaWYgKG5ldCA9PSBh
c29jLT5sYXN0X2NvbnRyb2xfY2h1bmtfZnJvbSkgeworCQkvKiBDbGVhciBuZXQgKi8KKwkJYXNv
Yy0+bGFzdF9jb250cm9sX2NodW5rX2Zyb20gPSBOVUxMOworCX0KKwlpZiAobmV0ID09IGFzb2Mt
Pmxhc3RfbmV0X2NtdF9zZW5kX3N0YXJ0ZWQpIHsKKwkJLyogQ2xlYXIgbmV0ICovCisJCWFzb2Mt
Pmxhc3RfbmV0X2NtdF9zZW5kX3N0YXJ0ZWQgPSBOVUxMOworCX0KKwlpZiAobmV0ID09IHN0Y2It
PmFzb2MuYWx0ZXJuYXRlKSB7CisJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihzdGNiLT5hc29jLmFs
dGVybmF0ZSk7CisJCXN0Y2ItPmFzb2MuYWx0ZXJuYXRlID0gTlVMTDsKKwl9CisJc2N0cF90aW1l
cl9zdG9wKFNDVFBfVElNRVJfVFlQRV9QQVRITVRVUkFJU0UsIGlucCwgc3RjYiwgbmV0LAorCSAg
ICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9QQ0IgKyBTQ1RQX0xPQ185KTsKKwlzY3RwX3Rp
bWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgaW5wLCBzdGNiLCBuZXQsCisJICAg
ICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX1BDQiArIFNDVFBfTE9DXzEwKTsKKwluZXQtPmRl
c3Rfc3RhdGUgfD0gU0NUUF9BRERSX0JFSU5HX0RFTEVURUQ7CisJc2N0cF9mcmVlX3JlbW90ZV9h
ZGRyKG5ldCk7Cit9CisKKy8qCisgKiByZW1vdmUgYSByZW1vdGUgZW5kcG9pbnQgYWRkcmVzcyBm
cm9tIGFuIGFzc29jaWF0aW9uLCBpdCB3aWxsIGZhaWwgaWYgdGhlCisgKiBhZGRyZXNzIGRvZXMg
bm90IGV4aXN0LgorICovCitpbnQKK3NjdHBfZGVsX3JlbW90ZV9hZGRyKHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwgc3RydWN0IHNvY2thZGRyICpyZW1hZGRyKQoreworCS8qCisJICogSGVyZSB3ZSBu
ZWVkIHRvIHJlbW92ZSBhIHJlbW90ZSBhZGRyZXNzLiBUaGlzIGlzIHF1aXRlIHNpbXBsZSwgd2UK
KwkgKiBmaXJzdCBmaW5kIGl0IGluIHRoZSBsaXN0IG9mIGFkZHJlc3MgZm9yIHRoZSBhc3NvY2lh
dGlvbgorCSAqICh0YXNvYy0+YXNvYy5uZXRzKSBhbmQgdGhlbiBpZiBpdCBpcyB0aGVyZSwgd2Ug
ZG8gYSBMSVNUX1JFTU9WRQorCSAqIG9uIHRoYXQgaXRlbS4gTm90ZSB3ZSBkbyBub3QgYWxsb3cg
aXQgdG8gYmUgcmVtb3ZlZCBpZiB0aGVyZSBhcmUKKwkgKiBubyBvdGhlciBhZGRyZXNzZXMuCisJ
ICovCisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJc3RydWN0IHNjdHBfbmV0cyAq
bmV0LCAqbm5ldDsKKworCWFzb2MgPSAmc3RjYi0+YXNvYzsKKworCS8qIGxvY2F0ZSB0aGUgYWRk
cmVzcyAqLworCVRBSUxRX0ZPUkVBQ0hfU0FGRShuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQs
IG5uZXQpIHsKKwkJaWYgKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkgIT0gcmVtYWRkci0+
c2FfZmFtaWx5KSB7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2N0cF9jbXBhZGRyKChzdHJ1
Y3Qgc29ja2FkZHIgKikmbmV0LT5yby5fbF9hZGRyLAorCQkgICAgcmVtYWRkcikpIHsKKwkJCS8q
IHdlIGZvdW5kIHRoZSBndXkgKi8KKwkJCWlmIChhc29jLT5udW1uZXRzIDwgMikgeworCQkJCS8q
IE11c3QgaGF2ZSBhdCBMRUFTVCB0d28gcmVtb3RlIGFkZHJlc3NlcyAqLworCQkJCXJldHVybiAo
LTEpOworCQkJfSBlbHNlIHsKKwkJCQlzY3RwX3JlbW92ZV9uZXQoc3RjYiwgbmV0KTsKKwkJCQly
ZXR1cm4gKDApOworCQkJfQorCQl9CisJfQorCS8qIG5vdCBmb3VuZC4gKi8KKwlyZXR1cm4gKC0y
KTsKK30KKwordm9pZAorc2N0cF9kZWxldGVfZnJvbV90aW1ld2FpdCh1aW50MzJfdCB0YWcsIHVp
bnQxNl90IGxwb3J0LCB1aW50MTZfdCBycG9ydCkKK3sKKwlzdHJ1Y3Qgc2N0cHZ0YWdoZWFkICpj
aGFpbjsKKwlzdHJ1Y3Qgc2N0cF90YWdibG9jayAqdHdhaXRfYmxvY2s7CisJaW50IGZvdW5kID0g
MDsKKwlpbnQgaTsKKworCWNoYWluID0gJlNDVFBfQkFTRV9JTkZPKHZ0YWdfdGltZXdhaXQpWyh0
YWcgJSBTQ1RQX1NUQUNLX1ZUQUdfSEFTSF9TSVpFKV07CisJTElTVF9GT1JFQUNIKHR3YWl0X2Js
b2NrLCBjaGFpbiwgc2N0cF9ueHRfdGFnYmxvY2spIHsKKwkJZm9yIChpID0gMDsgaSA8IFNDVFBf
TlVNQkVSX0lOX1ZUQUdfQkxPQ0s7IGkrKykgeworCQkgIGlmICgodHdhaXRfYmxvY2stPnZ0YWdf
YmxvY2tbaV0udl90YWcgPT0gdGFnKSAmJgorCQkgICAgICAodHdhaXRfYmxvY2stPnZ0YWdfYmxv
Y2tbaV0ubHBvcnQgPT0gbHBvcnQpICYmCisJCSAgICAgICh0d2FpdF9ibG9jay0+dnRhZ19ibG9j
a1tpXS5ycG9ydCA9PSBycG9ydCkpIHsKKwkJCQl0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tpXS50
dl9zZWNfYXRfZXhwaXJlID0gMDsKKwkJCQl0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tpXS52X3Rh
ZyA9IDA7CisJCQkJdHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0ubHBvcnQgPSAwOworCQkJCXR3
YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLnJwb3J0ID0gMDsKKwkJCQlmb3VuZCA9IDE7CisJCQkJ
YnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGZvdW5kKQorCQkJYnJlYWs7CisJfQorfQorCitpbnQK
K3NjdHBfaXNfaW5fdGltZXdhaXQodWludDMyX3QgdGFnLCB1aW50MTZfdCBscG9ydCwgdWludDE2
X3QgcnBvcnQpCit7CisJc3RydWN0IHNjdHB2dGFnaGVhZCAqY2hhaW47CisJc3RydWN0IHNjdHBf
dGFnYmxvY2sgKnR3YWl0X2Jsb2NrOworCWludCBmb3VuZCA9IDA7CisJaW50IGk7CisKKwlTQ1RQ
X0lOUF9JTkZPX1dMT0NLKCk7CisJY2hhaW4gPSAmU0NUUF9CQVNFX0lORk8odnRhZ190aW1ld2Fp
dClbKHRhZyAlIFNDVFBfU1RBQ0tfVlRBR19IQVNIX1NJWkUpXTsKKwlMSVNUX0ZPUkVBQ0godHdh
aXRfYmxvY2ssIGNoYWluLCBzY3RwX254dF90YWdibG9jaykgeworCQlmb3IgKGkgPSAwOyBpIDwg
U0NUUF9OVU1CRVJfSU5fVlRBR19CTE9DSzsgaSsrKSB7CisJCQlpZiAoKHR3YWl0X2Jsb2NrLT52
dGFnX2Jsb2NrW2ldLnZfdGFnID09IHRhZykgICYmCisJCQkgICAgKHR3YWl0X2Jsb2NrLT52dGFn
X2Jsb2NrW2ldLmxwb3J0ID09IGxwb3J0KSAgJiYKKwkJCSAgICAodHdhaXRfYmxvY2stPnZ0YWdf
YmxvY2tbaV0ucnBvcnQgPT0gcnBvcnQpKSB7CisJCQkJZm91bmQgPSAxOworCQkJCWJyZWFrOwor
CQkJfQorCQl9CisJCWlmIChmb3VuZCkKKwkJCWJyZWFrOworCX0KKwlTQ1RQX0lOUF9JTkZPX1dV
TkxPQ0soKTsKKwlyZXR1cm4gKGZvdW5kKTsKK30KKwordm9pZAorc2N0cF9hZGRfdnRhZ190b190
aW1ld2FpdCh1aW50MzJfdCB0YWcsIHVpbnQzMl90IHRpbWUsIHVpbnQxNl90IGxwb3J0LCB1aW50
MTZfdCBycG9ydCkKK3sKKwlzdHJ1Y3Qgc2N0cHZ0YWdoZWFkICpjaGFpbjsKKwlzdHJ1Y3Qgc2N0
cF90YWdibG9jayAqdHdhaXRfYmxvY2s7CisJc3RydWN0IHRpbWV2YWwgbm93OworCWludCBzZXQs
IGk7CisKKwlpZiAodGltZSA9PSAwKSB7CisJCS8qIEl0cyBkaXNhYmxlZCAqLworCQlyZXR1cm47
CisJfQorCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZub3cpOworCWNoYWluID0gJlNDVFBf
QkFTRV9JTkZPKHZ0YWdfdGltZXdhaXQpWyh0YWcgJSBTQ1RQX1NUQUNLX1ZUQUdfSEFTSF9TSVpF
KV07CisJc2V0ID0gMDsKKwlMSVNUX0ZPUkVBQ0godHdhaXRfYmxvY2ssIGNoYWluLCBzY3RwX254
dF90YWdibG9jaykgeworCQkvKiBCbG9jayhzKSBwcmVzZW50LCBsZXRzIGZpbmQgc3BhY2UsIGFu
ZCBleHBpcmUgb24gdGhlIGZseSAqLworCQlmb3IgKGkgPSAwOyBpIDwgU0NUUF9OVU1CRVJfSU5f
VlRBR19CTE9DSzsgaSsrKSB7CisJCQlpZiAoKHR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLnZf
dGFnID09IDApICYmCisJCQkgICAgIXNldCkgeworCQkJCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2Nr
W2ldLnR2X3NlY19hdF9leHBpcmUgPQorCQkJCQlub3cudHZfc2VjICsgdGltZTsKKwkJCQl0d2Fp
dF9ibG9jay0+dnRhZ19ibG9ja1tpXS52X3RhZyA9IHRhZzsKKwkJCQl0d2FpdF9ibG9jay0+dnRh
Z19ibG9ja1tpXS5scG9ydCA9IGxwb3J0OworCQkJCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ld
LnJwb3J0ID0gcnBvcnQ7CisJCQkJc2V0ID0gMTsKKwkJCX0gZWxzZSBpZiAoKHR3YWl0X2Jsb2Nr
LT52dGFnX2Jsb2NrW2ldLnZfdGFnKSAmJgorCQkJCSAgICAoKGxvbmcpdHdhaXRfYmxvY2stPnZ0
YWdfYmxvY2tbaV0udHZfc2VjX2F0X2V4cGlyZSA8IG5vdy50dl9zZWMpKSB7CisJCQkJLyogQXVk
aXQgZXhwaXJlcyB0aGlzIGd1eSAqLworCQkJCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLnR2
X3NlY19hdF9leHBpcmUgPSAwOworCQkJCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLnZfdGFn
ID0gMDsKKwkJCQl0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tpXS5scG9ydCA9IDA7CisJCQkJdHdh
aXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0ucnBvcnQgPSAwOworCQkJCWlmIChzZXQgPT0gMCkgewor
CQkJCQkvKiBSZXVzZSBpdCBmb3IgbXkgbmV3IHRhZyAqLworCQkJCQl0d2FpdF9ibG9jay0+dnRh
Z19ibG9ja1tpXS50dl9zZWNfYXRfZXhwaXJlID0gbm93LnR2X3NlYyArIHRpbWU7CisJCQkJCXR3
YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLnZfdGFnID0gdGFnOworCQkJCQl0d2FpdF9ibG9jay0+
dnRhZ19ibG9ja1tpXS5scG9ydCA9IGxwb3J0OworCQkJCQl0d2FpdF9ibG9jay0+dnRhZ19ibG9j
a1tpXS5ycG9ydCA9IHJwb3J0OworCQkJCQlzZXQgPSAxOworCQkJCX0KKwkJCX0KKwkJfQorCQlp
ZiAoc2V0KSB7CisJCQkvKgorCQkJICogV2Ugb25seSBkbyB1cCB0byB0aGUgYmxvY2sgd2hlcmUg
d2UgY2FuCisJCQkgKiBwbGFjZSBvdXIgdGFnIGZvciBhdWRpdHMKKwkJCSAqLworCQkJYnJlYWs7
CisJCX0KKwl9CisJLyogTmVlZCB0byBhZGQgYSBuZXcgYmxvY2sgdG8gY2hhaW4gKi8KKwlpZiAo
IXNldCkgeworCQlTQ1RQX01BTExPQyh0d2FpdF9ibG9jaywgc3RydWN0IHNjdHBfdGFnYmxvY2sg
KiwKKwkJICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF90YWdibG9jayksIFNDVFBfTV9USU1XKTsKKwkJ
aWYgKHR3YWl0X2Jsb2NrID09IE5VTEwpIHsKKwkJCXJldHVybjsKKwkJfQorCQltZW1zZXQodHdh
aXRfYmxvY2ssIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF90YWdibG9jaykpOworCQlMSVNUX0lOU0VS
VF9IRUFEKGNoYWluLCB0d2FpdF9ibG9jaywgc2N0cF9ueHRfdGFnYmxvY2spOworCQl0d2FpdF9i
bG9jay0+dnRhZ19ibG9ja1swXS50dl9zZWNfYXRfZXhwaXJlID0gbm93LnR2X3NlYyArIHRpbWU7
CisJCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrWzBdLnZfdGFnID0gdGFnOworCQl0d2FpdF9ibG9j
ay0+dnRhZ19ibG9ja1swXS5scG9ydCA9IGxwb3J0OworCQl0d2FpdF9ibG9jay0+dnRhZ19ibG9j
a1swXS5ycG9ydCA9IHJwb3J0OworCX0KK30KKwordm9pZAorc2N0cF9jbGVhbl91cF9zdHJlYW0o
c3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9yZWFkaGVhZCAqcmgpCit7CisJc3Ry
dWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAqbmNoazsKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9f
cmVhZCAqY29udHJvbCwgKm5jb250cm9sOworCisJVEFJTFFfRk9SRUFDSF9TQUZFKGNvbnRyb2ws
IHJoLCBuZXh0X2luc3RybSwgbmNvbnRyb2wpIHsKKwkJVEFJTFFfUkVNT1ZFKHJoLCBjb250cm9s
LCBuZXh0X2luc3RybSk7CisJCWNvbnRyb2wtPm9uX3N0cm1fcSA9IDA7CisJCWlmIChjb250cm9s
LT5vbl9yZWFkX3EgPT0gMCkgeworCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNvbnRyb2wtPndo
b0Zyb20pOworCQkJaWYgKGNvbnRyb2wtPmRhdGEpIHsKKwkJCQlzY3RwX21fZnJlZW0oY29udHJv
bC0+ZGF0YSk7CisJCQkJY29udHJvbC0+ZGF0YSA9IE5VTEw7CisJCQl9CisJCX0KKwkJLyogUmVh
c3NlbWJseSBmcmVlPyAqLworCQlUQUlMUV9GT1JFQUNIX1NBRkUoY2hrLCAmY29udHJvbC0+cmVh
c20sIHNjdHBfbmV4dCwgbmNoaykgeworCQkJVEFJTFFfUkVNT1ZFKCZjb250cm9sLT5yZWFzbSwg
Y2hrLCBzY3RwX25leHQpOworCQkJaWYgKGNoay0+ZGF0YSkgeworCQkJCXNjdHBfbV9mcmVlbShj
aGstPmRhdGEpOworCQkJCWNoay0+ZGF0YSA9IE5VTEw7CisJCQl9CisJCQlpZiAoY2hrLT5ob2xk
c19rZXlfcmVmKQorCQkJCXNjdHBfYXV0aF9rZXlfcmVsZWFzZShzdGNiLCBjaGstPmF1dGhfa2V5
aWQsIFNDVFBfU09fTE9DS0VEKTsKKwkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjaGstPndob1Rv
KTsKKwkJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2NodW5rKSwgY2hr
KTsKKwkJCVNDVFBfREVDUl9DSEtfQ09VTlQoKTsKKwkJCS8qc2FfaWdub3JlIEZSRUVEX01FTU9S
WSovCisJCX0KKwkJLyoKKwkJICogV2UgZG9uJ3QgZnJlZSB0aGUgYWRkcmVzcyBoZXJlCisJCSAq
IHNpbmNlIGFsbCB0aGUgbmV0J3Mgd2VyZSBmcmVlZAorCQkgKiBhYm92ZS4KKwkJICovCisJCWlm
IChjb250cm9sLT5vbl9yZWFkX3EgPT0gMCkgeworCQkJc2N0cF9mcmVlX2FfcmVhZHEoc3RjYiwg
Y29udHJvbCk7CisJCX0KKwl9Cit9CisKKy8qLQorICogRnJlZSB0aGUgYXNzb2NpYXRpb24gYWZ0
ZXIgdW4taGFzaGluZyB0aGUgcmVtb3RlIHBvcnQuIFRoaXMKKyAqIGZ1bmN0aW9uIEFMV0FZUyBy
ZXR1cm5zIGhvbGRpbmcgTk8gTE9DSyBvbiB0aGUgc3RjYi4gSXQgRE9FUworICogZXhwZWN0IHRo
YXQgdGhlIGlucHV0IHRvIHRoaXMgZnVuY3Rpb24gSVMgYSBsb2NrZWQgVENCLgorICogSXQgd2ls
bCByZXR1cm4gMCwgaWYgaXQgZGlkIE5PVCBkZXN0cm95IHRoZSBhc3NvY2lhdGlvbiAoaW5zdGVh
ZAorICogaXQgdW5sb2NrcyBpdC4gSXQgd2lsbCByZXR1cm4gTk9OLXplcm8gaWYgaXQgZWl0aGVy
IGRlc3Ryb3llZCB0aGUKKyAqIGFzc29jaWF0aW9uIE9SIHRoZSBhc3NvY2lhdGlvbiBpcyBhbHJl
YWR5IGRlc3Ryb3llZC4KKyAqLworaW50CitzY3RwX2ZyZWVfYXNzb2Moc3RydWN0IHNjdHBfaW5w
Y2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLCBpbnQgZnJvbV9pbnBjYmZyZWUsIGludCBm
cm9tX2xvY2F0aW9uKQoreworCWludCBpOworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29j
OworCXN0cnVjdCBzY3RwX25ldHMgKm5ldCwgKm5uZXQ7CisJc3RydWN0IHNjdHBfbGFkZHIgKmxh
ZGRyLCAqbmFkZHI7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAqbmNoazsKKwlzdHJ1
Y3Qgc2N0cF9hc2NvbmZfYWRkciAqYXBhcmFtLCAqbmFwYXJhbTsKKwlzdHJ1Y3Qgc2N0cF9hc2Nv
bmZfYWNrICphYWNrLCAqbmFhY2s7CisJc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2xpc3QgKnN0
cnJzdCwgKm5zdHJyc3Q7CisJc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKnNxLCAqbnNxOwor
CXN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCwgKm5zcDsKKwlzY3RwX3NoYXJl
ZGtleV90ICpzaGFyZWRfa2V5LCAqbnNoYXJlZF9rZXk7CisJc3RydWN0IHNvY2tldCAqc287CisK
KwkvKiBmaXJzdCwgbGV0cyBwdXJnZSB0aGUgZW50cnkgZnJvbSB0aGUgaGFzaCB0YWJsZS4gKi8K
KyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlzY3Rw
X2xvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKGlucCkpOworI2VuZGlmCisKKyNpZmRlZiBTQ1RQX0xP
R19DTE9TSU5HCisJc2N0cF9sb2dfY2xvc2luZyhpbnAsIHN0Y2IsIDYpOworI2VuZGlmCisJaWYg
KHN0Y2ItPmFzb2Muc3RhdGUgPT0gMCkgeworI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKKwkJc2N0
cF9sb2dfY2xvc2luZyhpbnAsIE5VTEwsIDcpOworI2VuZGlmCisJCS8qIHRoZXJlIGlzIG5vIGFz
b2MsIHJlYWxseSBUU05IIDotMCAqLworCQlyZXR1cm4gKDEpOworCX0KKwlTQ1RQX1RDQl9TRU5E
X0xPQ0soc3RjYik7CisJaWYgKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSB7CisJCXNjdHBfZnJlZV9y
ZW1vdGVfYWRkcihzdGNiLT5hc29jLmFsdGVybmF0ZSk7CisJCXN0Y2ItPmFzb2MuYWx0ZXJuYXRl
ID0gTlVMTDsKKwl9CisjaWYgIShkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vy
c3BhY2VfXykpCisJLyogVEVNUCBDT0RFICovCisJaWYgKHN0Y2ItPmZyZWVkX2Zyb21fd2hlcmUg
PT0gMCkgeworCQkvKiBPbmx5IHJlY29yZCB0aGUgZmlyc3QgcGxhY2UgZnJlZSBoYXBwZW5lZCBm
cm9tICovCisJCXN0Y2ItPmZyZWVkX2Zyb21fd2hlcmUgPSBmcm9tX2xvY2F0aW9uOworCX0KKwkv
KiBURU1QIENPREUgKi8KKyNlbmRpZgorCisJYXNvYyA9ICZzdGNiLT5hc29jOworCWlmICgoaW5w
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpIHx8CisJICAgIChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkpCisJCS8qIG5vdGhp
bmcgYXJvdW5kICovCisJCXNvID0gTlVMTDsKKwllbHNlCisJCXNvID0gaW5wLT5zY3RwX3NvY2tl
dDsKKworCS8qCisJICogV2UgdXNlZCB0aW1lciBiYXNlZCBmcmVlaW5nIGlmIGEgcmVhZGVyIG9y
IHdyaXRlciBpcyBpbiB0aGUgd2F5LgorCSAqIFNvIHdlIGZpcnN0IGNoZWNrIGlmIHdlIGFyZSBh
Y3R1YWxseSBiZWluZyBjYWxsZWQgZnJvbSBhIHRpbWVyLAorCSAqIGlmIHNvIHdlIGFib3J0IGVh
cmx5IGlmIGEgcmVhZGVyIG9yIHdyaXRlciBpcyBzdGlsbCBpbiB0aGUgd2F5LgorCSAqLworCWlm
ICgoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpICYmCisJ
ICAgIChmcm9tX2lucGNiZnJlZSA9PSBTQ1RQX05PUk1BTF9QUk9DKSkgeworCQkvKgorCQkgKiBp
cyBpdCB0aGUgdGltZXIgZHJpdmluZyB1cz8gaWYgc28gYXJlIHRoZSByZWFkZXIvd3JpdGVycwor
CQkgKiBnb25lPworCQkgKi8KKwkJaWYgKHN0Y2ItPmFzb2MucmVmY250KSB7CisJCQkvKiBub3Bl
LCByZWFkZXIgb3Igd3JpdGVyIGluIHRoZSB3YXkgKi8KKwkJCXNjdHBfdGltZXJfc3RhcnQoU0NU
UF9USU1FUl9UWVBFX0FTT0NLSUxMLCBpbnAsIHN0Y2IsIE5VTEwpOworCQkJLyogbm8gYXNvYyBk
ZXN0cm95ZWQgKi8KKwkJCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOworCQkJU0NUUF9UQ0Jf
VU5MT0NLKHN0Y2IpOworI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKKwkJCXNjdHBfbG9nX2Nsb3Np
bmcoaW5wLCBzdGNiLCA4KTsKKyNlbmRpZgorCQkJcmV0dXJuICgwKTsKKwkJfQorCX0KKwkvKiBO
b3cgY2xlYW4gdXAgYW55IG90aGVyIHRpbWVycyAqLworCXNjdHBfc3RvcF9hc3NvY2lhdGlvbl90
aW1lcnMoc3RjYiwgZmFsc2UpOworCS8qIE5vdyB0aGUgcmVhZCBxdWV1ZSBuZWVkcyB0byBiZSBj
bGVhbmVkIHVwIChvbmx5IG9uY2UpICovCisJaWYgKChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9T
VEFURV9BQk9VVF9UT19CRV9GUkVFRCkgPT0gMCkgeworCQlTQ1RQX0FERF9TVUJTVEFURShzdGNi
LCBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEKTsKKwkJU0NUUF9JTlBfUkVBRF9MT0NLKGlu
cCk7CisJCVRBSUxRX0ZPUkVBQ0goc3EsICZpbnAtPnJlYWRfcXVldWUsIG5leHQpIHsKKwkJCWlm
IChzcS0+c3RjYiA9PSBzdGNiKSB7CisJCQkJc3EtPmRvX25vdF9yZWZfc3RjYiA9IDE7CisJCQkJ
c3EtPnNpbmZvX2N1bXRzbiA9IHN0Y2ItPmFzb2MuY3VtdWxhdGl2ZV90c247CisJCQkJLyogSWYg
dGhlcmUgaXMgbm8gZW5kLCB0aGVyZSBuZXZlcgorCQkJCSAqIHdpbGwgYmUgbm93LgorCQkJCSAq
LworCQkJCWlmIChzcS0+ZW5kX2FkZGVkID09IDApIHsKKwkJCQkJLyogSGVsZCBmb3IgUEQtQVBJ
IGNsZWFyIHRoYXQuICovCisJCQkJCXNxLT5wZGFwaV9hYm9ydGVkID0gMTsKKwkJCQkJc3EtPmhl
bGRfbGVuZ3RoID0gMDsKKwkJCQkJaWYgKHNjdHBfc3RjYl9pc19mZWF0dXJlX29uKGlucCwgc3Rj
YiwgU0NUUF9QQ0JfRkxBR1NfUERBUElFVk5UKSAmJiAoc28gIT0gTlVMTCkpIHsKKwkJCQkJCS8q
CisJCQkJCQkgKiBOZWVkIHRvIGFkZCBhIFBELUFQSSBhYm9ydGVkIGluZGljYXRpb24uCisJCQkJ
CQkgKiBTZXR0aW5nIHRoZSBjb250cm9sX3BkYXBpIGFzc3VyZXMgdGhhdCBpdCB3aWxsCisJCQkJ
CQkgKiBiZSBhZGRlZCByaWdodCBhZnRlciB0aGlzIG1zZy4KKwkJCQkJCSAqLworCQkJCQkJdWlu
dDMyX3Qgc3Ryc2VxOworCQkJCQkJc3RjYi0+YXNvYy5jb250cm9sX3BkYXBpID0gc3E7CisJCQkJ
CQlzdHJzZXEgPSAoc3EtPnNpbmZvX3N0cmVhbSA8PCAxNikgfCAoc3EtPm1pZCAmIDB4MDAwMGZm
ZmYpOworCQkJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1BBUlRJQUxfREVMVklFUllf
SU5ESUNBVElPTiwKKwkJCQkJCSAgICAgICAgICAgICAgICBzdGNiLAorCQkJCQkJICAgICAgICAg
ICAgICAgIFNDVFBfUEFSVElBTF9ERUxJVkVSWV9BQk9SVEVELAorCQkJCQkJICAgICAgICAgICAg
ICAgICh2b2lkICopJnN0cnNlcSwKKwkJCQkJCSAgICAgICAgICAgICAgICBTQ1RQX1NPX0xPQ0tF
RCk7CisJCQkJCQlzdGNiLT5hc29jLmNvbnRyb2xfcGRhcGkgPSBOVUxMOworCQkJCQl9CisJCQkJ
fQorCQkJCS8qIEFkZCBhbiBlbmQgdG8gd2FrZSB0aGVtICovCisJCQkJc3EtPmVuZF9hZGRlZCA9
IDE7CisJCQl9CisJCX0KKwkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soaW5wKTsKKwkJaWYgKHN0Y2It
PmJsb2NrX2VudHJ5KSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfUENCLCBFQ09OTlJFU0VUKTsKKwkJCXN0Y2ItPmJsb2NrX2VudHJ5LT5l
cnJvciA9IEVDT05OUkVTRVQ7CisJCQlzdGNiLT5ibG9ja19lbnRyeSA9IE5VTEw7CisJCX0KKwl9
CisJaWYgKChzdGNiLT5hc29jLnJlZmNudCkgfHwgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NU
QVRFX0lOX0FDQ0VQVF9RVUVVRSkpIHsKKwkJLyogU29tZW9uZSBob2xkcyBhIHJlZmVyZW5jZSBP
UiB0aGUgc29ja2V0IGlzIHVuYWNjZXB0ZWQgeWV0LgorCQkqLworCQlpZiAoKHN0Y2ItPmFzb2Mu
cmVmY250KSAgfHwKKwkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NL
RVRfQUxMR09ORSkgfHwKKwkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19T
T0NLRVRfR09ORSkpIHsKKwkJCVNDVFBfQ0xFQVJfU1VCU1RBVEUoc3RjYiwgU0NUUF9TVEFURV9J
Tl9BQ0NFUFRfUVVFVUUpOworCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfQVNP
Q0tJTEwsIGlucCwgc3RjYiwgTlVMTCk7CisJCX0KKwkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3Rj
Yik7CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkgfHwKKwkJICAgIChpbnAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkpCisJCQkvKiBub3RoaW5nIGFyb3VuZCAqLwor
CQkJc28gPSBOVUxMOworCQlpZiAoc28pIHsKKwkJCS8qIFdha2UgYW55IHJlYWRlci93cml0ZXJz
ICovCisJCQlzY3RwX3Nvcndha2V1cChpbnAsIHNvKTsKKwkJCXNjdHBfc293d2FrZXVwKGlucCwg
c28pOworCQl9CisKKyNpZmRlZiBTQ1RQX0xPR19DTE9TSU5HCisJCXNjdHBfbG9nX2Nsb3Npbmco
aW5wLCBzdGNiLCA5KTsKKyNlbmRpZgorCQkvKiBubyBhc29jIGRlc3Ryb3llZCAqLworCQlyZXR1
cm4gKDApOworCX0KKyNpZmRlZiBTQ1RQX0xPR19DTE9TSU5HCisJc2N0cF9sb2dfY2xvc2luZyhp
bnAsIHN0Y2IsIDEwKTsKKyNlbmRpZgorCS8qIFdoZW4gSSByZWFjaCBoZXJlLCBubyBvdGhlcnMg
d2FudAorCSAqIHRvIGtpbGwgdGhlIGFzc29jIHlldC4uIGFuZCBJIG93bgorCSAqIHRoZSBsb2Nr
LiBOb3cgaXRzIHBvc3NpYmxlIGFuIGFib3J0CisJICogY29tZXMgaW4gd2hlbiBJIGRvIHRoZSBs
b2NrIGV4Y2hhbmdlCisJICogYmVsb3cgdG8gZ3JhYiBhbGwgdGhlIGxvY2tzIHRvIGRvCisJICog
dGhlIGZpbmFsIHRha2Ugb3V0LiB0byBwcmV2ZW50IHRoaXMKKwkgKiB3ZSBpbmNyZW1lbnQgdGhl
IGNvdW50LCB3aGljaCB3aWxsCisJICogc3RhcnQgYSB0aW1lciBhbmQgYmxvdyBvdXQgYWJvdmUg
dGh1cworCSAqIGFzc3VyaW5nIHVzIHRoYXQgd2UgaG9sZCBleGNsdXNpdmUKKwkgKiBraWxsaW5n
IG9mIHRoZSBhc29jLiBOb3RlIHRoYXQKKwkgKiBhZnRlciBnZXR0aW5nIGJhY2sgdGhlIFRDQiBs
b2NrCisJICogd2Ugd2lsbCBnbyBhaGVhZCBhbmQgaW5jcmVtZW50IHRoZQorCSAqIGNvdW50ZXIg
YmFjayB1cCBhbmQgc3RvcCBhbnkgdGltZXIKKwkgKiBhIHBhc3Npbmcgc3RyYW5nZXIgbWF5IGhh
dmUgc3RhcnRlZCA6LVMKKwkgKi8KKwlpZiAoZnJvbV9pbnBjYmZyZWUgPT0gU0NUUF9OT1JNQUxf
UFJPQykgeworCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCisJCVND
VFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOworCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCVND
VFBfSU5QX0lORk9fV0xPQ0soKTsKKwkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJU0NUUF9UQ0Jf
TE9DSyhzdGNiKTsKKwkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOworCX0KKwkvKiBEb3VibGUg
Y2hlY2sgdGhlIEdPTkUgZmxhZyAqLworCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfU09DS0VUX0FMTEdPTkUpIHx8CisJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19TT0NLRVRfR09ORSkpCisJCS8qIG5vdGhpbmcgYXJvdW5kICovCisJCXNvID0gTlVM
TDsKKworCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwK
KwkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpKSB7CisJ
CS8qCisJCSAqIEZvciBUQ1AgdHlwZSB3ZSBuZWVkIHNwZWNpYWwgaGFuZGxpbmcgd2hlbiB3ZSBh
cmUKKwkJICogY29ubmVjdGVkLiBXZSBhbHNvIGluY2x1ZGUgdGhlIHBlZWwnZWQgb2ZmIG9uZXMg
dG8uCisJCSAqLworCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQ09OTkVD
VEVEKSB7CisJCQlpbnAtPnNjdHBfZmxhZ3MgJj0gflNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRDsK
KwkJCWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19XQVNfQ09OTkVDVEVEOworCQkJ
aWYgKHNvKSB7CisJCQkJU09DS0JVRl9MT0NLKCZzby0+c29fcmN2KTsKKwkJCQlzby0+c29fc3Rh
dGUgJj0gfihTU19JU0NPTk5FQ1RJTkcgfAorCQkJCSAgICBTU19JU0RJU0NPTk5FQ1RJTkcgfAor
CQkJCSAgICBTU19JU0NPTkZJUk1JTkcgfAorCQkJCSAgICBTU19JU0NPTk5FQ1RFRCk7CisJCQkJ
c28tPnNvX3N0YXRlIHw9IFNTX0lTRElTQ09OTkVDVEVEOworI2lmIGRlZmluZWQoX19BUFBMRV9f
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCXNvY2FudHJjdm1vcmUoc28pOworI2Vs
c2UKKwkJCQlzb2NhbnRyY3Ztb3JlX2xvY2tlZChzbyk7CisjZW5kaWYKKwkJCQlzb2NhbnRzZW5k
bW9yZShzbyk7CisJCQkJc2N0cF9zb3d3YWtldXAoaW5wLCBzbyk7CisJCQkJc2N0cF9zb3J3YWtl
dXAoaW5wLCBzbyk7CisJCQkJU0NUUF9TT1dBS0VVUChzbyk7CisJCQl9CisJCX0KKwl9CisKKwkv
KiBNYWtlIGl0IGludmFsaWQgdG9vLCB0aGF0IHdheSBpZiBpdHMKKwkgKiBhYm91dCB0byBydW4g
aXQgd2lsbCBhYm9ydCBhbmQgcmV0dXJuLgorCSAqLworCS8qIHJlLWluY3JlbWVudCB0aGUgbG9j
ayAqLworCWlmIChmcm9tX2lucGNiZnJlZSA9PSBTQ1RQX05PUk1BTF9QUk9DKSB7CisJCWF0b21p
Y19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgLTEpOworCX0KKwlpZiAoc3RjYi0+YXNvYy5y
ZWZjbnQpIHsKKwkJU0NUUF9DTEVBUl9TVUJTVEFURShzdGNiLCBTQ1RQX1NUQVRFX0lOX0FDQ0VQ
VF9RVUVVRSk7CisJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0FTT0NLSUxMLCBp
bnAsIHN0Y2IsIE5VTEwpOworCQlpZiAoZnJvbV9pbnBjYmZyZWUgPT0gU0NUUF9OT1JNQUxfUFJP
QykgeworCQkJU0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7CisJCQlTQ1RQX0lOUF9XVU5MT0NLKGlu
cCk7CisJCX0KKwkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKKwkJcmV0dXJuICgwKTsKKwl9CisJYXNvYy0+c3RhdGUgPSAwOworCWlmIChpbnAt
PnNjdHBfdGNiaGFzaCkgeworCQlMSVNUX1JFTU9WRShzdGNiLCBzY3RwX3RjYmhhc2gpOworCX0K
KwlpZiAoc3RjYi0+YXNvYy5pbl9hc29jaWRfaGFzaCkgeworCQlMSVNUX1JFTU9WRShzdGNiLCBz
Y3RwX3RjYmFzb2NpZGhhc2gpOworCX0KKwkvKiBOb3cgbGV0cyByZW1vdmUgaXQgZnJvbSB0aGUg
bGlzdCBvZiBBTEwgYXNzb2NpYXRpb25zIGluIHRoZSBFUCAqLworCUxJU1RfUkVNT1ZFKHN0Y2Is
IHNjdHBfdGNibGlzdCk7CisJaWYgKGZyb21faW5wY2JmcmVlID09IFNDVFBfTk9STUFMX1BST0Mp
IHsKKwkJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwor
CX0KKwkvKiBwdWxsIGZyb20gdnRhZyBoYXNoICovCisJTElTVF9SRU1PVkUoc3RjYiwgc2N0cF9h
c29jcyk7CisJc2N0cF9hZGRfdnRhZ190b190aW1ld2FpdChhc29jLT5teV92dGFnLCBTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfdnRhZ190aW1lX3dhaXQpLAorCQkJCSAgaW5wLT5zY3RwX2xwb3J0LCBz
dGNiLT5ycG9ydCk7CisKKwkvKiBOb3cgcmVzdG9wIHRoZSB0aW1lcnMgdG8gYmUgc3VyZQorCSAq
IHRoaXMgaXMgcGFyYW5vaWEgYXQgaXMgZmluZXN0IQorCSAqLworCXNjdHBfc3RvcF9hc3NvY2lh
dGlvbl90aW1lcnMoc3RjYiwgdHJ1ZSk7CisKKwkvKgorCSAqIFRoZSBjaHVuayBsaXN0cyBhbmQg
c3VjaCBTSE9VTEQgYmUgZW1wdHkgYnV0IHdlIGNoZWNrIHRoZW0ganVzdAorCSAqIGluIGNhc2Uu
CisJICovCisJLyogYW55dGhpbmcgb24gdGhlIHdoZWVsIG5lZWRzIHRvIGJlIHJlbW92ZWQgKi8K
Kwlmb3IgKGkgPSAwOyBpIDwgYXNvYy0+c3RyZWFtb3V0Y250OyBpKyspIHsKKwkJc3RydWN0IHNj
dHBfc3RyZWFtX291dCAqb3V0czsKKworCQlvdXRzID0gJmFzb2MtPnN0cm1vdXRbaV07CisJCS8q
IG5vdyBjbGVhbiB1cCBhbnkgY2h1bmtzIGhlcmUgKi8KKwkJVEFJTFFfRk9SRUFDSF9TQUZFKHNw
LCAmb3V0cy0+b3V0cXVldWUsIG5leHQsIG5zcCkgeworCQkJYXRvbWljX3N1YnRyYWN0X2ludCgm
YXNvYy0+c3RyZWFtX3F1ZXVlX2NudCwgMSk7CisJCQlUQUlMUV9SRU1PVkUoJm91dHMtPm91dHF1
ZXVlLCBzcCwgbmV4dCk7CisJCQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX3JlbW92
ZV9mcm9tX3N0cmVhbShzdGNiLCBhc29jLCBvdXRzLCBzcCwgMSk7CisJCQlzY3RwX2ZyZWVfc3Bi
dWZzcGFjZShzdGNiLCBhc29jLCBzcCk7CisJCQlpZiAoc3AtPmRhdGEpIHsKKwkJCQlpZiAoc28p
IHsKKwkJCQkJLyogU3RpbGwgYW4gb3BlbiBzb2NrZXQgLSByZXBvcnQgKi8KKwkJCQkJc2N0cF91
bHBfbm90aWZ5KFNDVFBfTk9USUZZX1NQRUNJQUxfU1BfRkFJTCwgc3RjYiwKKwkJCQkJICAgICAg
ICAgICAgICAgIDAsICh2b2lkICopc3AsIFNDVFBfU09fTE9DS0VEKTsKKwkJCQl9CisJCQkJaWYg
KHNwLT5kYXRhKSB7CisJCQkJCXNjdHBfbV9mcmVlbShzcC0+ZGF0YSk7CisJCQkJCXNwLT5kYXRh
ID0gTlVMTDsKKwkJCQkJc3AtPnRhaWxfbWJ1ZiA9IE5VTEw7CisJCQkJCXNwLT5sZW5ndGggPSAw
OworCQkJCX0KKwkJCX0KKwkJCWlmIChzcC0+bmV0KSB7CisJCQkJc2N0cF9mcmVlX3JlbW90ZV9h
ZGRyKHNwLT5uZXQpOworCQkJCXNwLT5uZXQgPSBOVUxMOworCQkJfQorCQkJc2N0cF9mcmVlX2Ff
c3RybW9xKHN0Y2IsIHNwLCBTQ1RQX1NPX0xPQ0tFRCk7CisJCX0KKwl9CisJLypzYV9pZ25vcmUg
RlJFRURfTUVNT1JZKi8KKwlUQUlMUV9GT1JFQUNIX1NBRkUoc3RycnN0LCAmYXNvYy0+cmVzZXRI
ZWFkLCBuZXh0X3Jlc3AsIG5zdHJyc3QpIHsKKwkJVEFJTFFfUkVNT1ZFKCZhc29jLT5yZXNldEhl
YWQsIHN0cnJzdCwgbmV4dF9yZXNwKTsKKwkJU0NUUF9GUkVFKHN0cnJzdCwgU0NUUF9NX1NUUkVT
RVQpOworCX0KKwlUQUlMUV9GT1JFQUNIX1NBRkUoc3EsICZhc29jLT5wZW5kaW5nX3JlcGx5X3F1
ZXVlLCBuZXh0LCBuc3EpIHsKKwkJVEFJTFFfUkVNT1ZFKCZhc29jLT5wZW5kaW5nX3JlcGx5X3F1
ZXVlLCBzcSwgbmV4dCk7CisJCWlmIChzcS0+ZGF0YSkgeworCQkJc2N0cF9tX2ZyZWVtKHNxLT5k
YXRhKTsKKwkJCXNxLT5kYXRhID0gTlVMTDsKKwkJfQorCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIo
c3EtPndob0Zyb20pOworCQlzcS0+d2hvRnJvbSA9IE5VTEw7CisJCXNxLT5zdGNiID0gTlVMTDsK
KwkJLyogRnJlZSB0aGUgY3RsIGVudHJ5ICovCisJCXNjdHBfZnJlZV9hX3JlYWRxKHN0Y2IsIHNx
KTsKKwkJLypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KKwl9CisJVEFJTFFfRk9SRUFDSF9TQUZF
KGNoaywgJmFzb2MtPmZyZWVfY2h1bmtzLCBzY3RwX25leHQsIG5jaGspIHsKKwkJVEFJTFFfUkVN
T1ZFKCZhc29jLT5mcmVlX2NodW5rcywgY2hrLCBzY3RwX25leHQpOworCQlpZiAoY2hrLT5kYXRh
KSB7CisJCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRhKTsKKwkJCWNoay0+ZGF0YSA9IE5VTEw7CisJ
CX0KKwkJaWYgKGNoay0+aG9sZHNfa2V5X3JlZikKKwkJCXNjdHBfYXV0aF9rZXlfcmVsZWFzZShz
dGNiLCBjaGstPmF1dGhfa2V5aWQsIFNDVFBfU09fTE9DS0VEKTsKKwkJU0NUUF9aT05FX0ZSRUUo
U0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfY2h1bmspLCBjaGspOworCQlTQ1RQX0RFQ1JfQ0hLX0NP
VU5UKCk7CisJCWF0b21pY19zdWJ0cmFjdF9pbnQoJlNDVFBfQkFTRV9JTkZPKGlwaV9mcmVlX2No
dW5rcyksIDEpOworCQlhc29jLT5mcmVlX2NodW5rX2NudC0tOworCQkvKnNhX2lnbm9yZSBGUkVF
RF9NRU1PUlkqLworCX0KKwkvKiBwZW5kaW5nIHNlbmQgcXVldWUgU0hPVUxEIGJlIGVtcHR5ICov
CisJVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJmFzb2MtPnNlbmRfcXVldWUsIHNjdHBfbmV4dCwg
bmNoaykgeworCQlpZiAoYXNvYy0+c3RybW91dFtjaGstPnJlYy5kYXRhLnNpZF0uY2h1bmtzX29u
X3F1ZXVlcyA+IDApIHsKKwkJCWFzb2MtPnN0cm1vdXRbY2hrLT5yZWMuZGF0YS5zaWRdLmNodW5r
c19vbl9xdWV1ZXMtLTsKKyNpZmRlZiBJTlZBUklBTlRTCisJCX0gZWxzZSB7CisJCQlwYW5pYygi
Tm8gY2h1bmtzIG9uIHRoZSBxdWV1ZXMgZm9yIHNpZCAldS4iLCBjaGstPnJlYy5kYXRhLnNpZCk7
CisjZW5kaWYKKwkJfQorCQlUQUlMUV9SRU1PVkUoJmFzb2MtPnNlbmRfcXVldWUsIGNoaywgc2N0
cF9uZXh0KTsKKwkJaWYgKGNoay0+ZGF0YSkgeworCQkJaWYgKHNvKSB7CisJCQkJLyogU3RpbGwg
YSBzb2NrZXQ/ICovCisJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1VOU0VOVF9ER19G
QUlMLCBzdGNiLAorCQkJCSAgICAgICAgICAgICAgICAwLCBjaGssIFNDVFBfU09fTE9DS0VEKTsK
KwkJCX0KKwkJCWlmIChjaGstPmRhdGEpIHsKKwkJCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRhKTsK
KwkJCQljaGstPmRhdGEgPSBOVUxMOworCQkJfQorCQl9CisJCWlmIChjaGstPmhvbGRzX2tleV9y
ZWYpCisJCQlzY3RwX2F1dGhfa2V5X3JlbGVhc2Uoc3RjYiwgY2hrLT5hdXRoX2tleWlkLCBTQ1RQ
X1NPX0xPQ0tFRCk7CisJCWlmIChjaGstPndob1RvKSB7CisJCQlzY3RwX2ZyZWVfcmVtb3RlX2Fk
ZHIoY2hrLT53aG9Ubyk7CisJCQljaGstPndob1RvID0gTlVMTDsKKwkJfQorCQlTQ1RQX1pPTkVf
RlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9jaHVuayksIGNoayk7CisJCVNDVFBfREVDUl9D
SEtfQ09VTlQoKTsKKwkJLypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KKwl9CisJLyogc2VudCBx
dWV1ZSBTSE9VTEQgYmUgZW1wdHkgKi8KKwlUQUlMUV9GT1JFQUNIX1NBRkUoY2hrLCAmYXNvYy0+
c2VudF9xdWV1ZSwgc2N0cF9uZXh0LCBuY2hrKSB7CisJCWlmIChjaGstPnNlbnQgIT0gU0NUUF9E
QVRBR1JBTV9OUl9BQ0tFRCkgeworCQkJaWYgKGFzb2MtPnN0cm1vdXRbY2hrLT5yZWMuZGF0YS5z
aWRdLmNodW5rc19vbl9xdWV1ZXMgPiAwKSB7CisJCQkJYXNvYy0+c3RybW91dFtjaGstPnJlYy5k
YXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcy0tOworI2lmZGVmIElOVkFSSUFOVFMKKwkJCX0gZWxz
ZSB7CisJCQkJcGFuaWMoIk5vIGNodW5rcyBvbiB0aGUgcXVldWVzIGZvciBzaWQgJXUuIiwgY2hr
LT5yZWMuZGF0YS5zaWQpOworI2VuZGlmCisJCQl9CisJCX0KKwkJVEFJTFFfUkVNT1ZFKCZhc29j
LT5zZW50X3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7CisJCWlmIChjaGstPmRhdGEpIHsKKwkJCWlm
IChzbykgeworCQkJCS8qIFN0aWxsIGEgc29ja2V0PyAqLworCQkJCXNjdHBfdWxwX25vdGlmeShT
Q1RQX05PVElGWV9TRU5UX0RHX0ZBSUwsIHN0Y2IsCisJCQkJICAgICAgICAgICAgICAgIDAsIGNo
aywgU0NUUF9TT19MT0NLRUQpOworCQkJfQorCQkJaWYgKGNoay0+ZGF0YSkgeworCQkJCXNjdHBf
bV9mcmVlbShjaGstPmRhdGEpOworCQkJCWNoay0+ZGF0YSA9IE5VTEw7CisJCQl9CisJCX0KKwkJ
aWYgKGNoay0+aG9sZHNfa2V5X3JlZikKKwkJCXNjdHBfYXV0aF9rZXlfcmVsZWFzZShzdGNiLCBj
aGstPmF1dGhfa2V5aWQsIFNDVFBfU09fTE9DS0VEKTsKKwkJc2N0cF9mcmVlX3JlbW90ZV9hZGRy
KGNoay0+d2hvVG8pOworCQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9j
aHVuayksIGNoayk7CisJCVNDVFBfREVDUl9DSEtfQ09VTlQoKTsKKwkJLypzYV9pZ25vcmUgRlJF
RURfTUVNT1JZKi8KKwl9CisjaWZkZWYgSU5WQVJJQU5UUworCWZvciAoaSA9IDA7IGkgPCBzdGNi
LT5hc29jLnN0cmVhbW91dGNudDsgaSsrKSB7CisJCWlmIChzdGNiLT5hc29jLnN0cm1vdXRbaV0u
Y2h1bmtzX29uX3F1ZXVlcyA+IDApIHsKKwkJCXBhbmljKCIldSBjaHVua3MgbGVmdCBmb3Igc3Ry
ZWFtICV1LiIsIHN0Y2ItPmFzb2Muc3RybW91dFtpXS5jaHVua3Nfb25fcXVldWVzLCBpKTsKKwkJ
fQorCX0KKyNlbmRpZgorCS8qIGNvbnRyb2wgcXVldWUgTUFZIG5vdCBiZSBlbXB0eSAqLworCVRB
SUxRX0ZPUkVBQ0hfU0FGRShjaGssICZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsIHNjdHBfbmV4
dCwgbmNoaykgeworCQlUQUlMUV9SRU1PVkUoJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwgY2hr
LCBzY3RwX25leHQpOworCQlpZiAoY2hrLT5kYXRhKSB7CisJCQlzY3RwX21fZnJlZW0oY2hrLT5k
YXRhKTsKKwkJCWNoay0+ZGF0YSA9IE5VTEw7CisJCX0KKwkJaWYgKGNoay0+aG9sZHNfa2V5X3Jl
ZikKKwkJCXNjdHBfYXV0aF9rZXlfcmVsZWFzZShzdGNiLCBjaGstPmF1dGhfa2V5aWQsIFNDVFBf
U09fTE9DS0VEKTsKKwkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNoay0+d2hvVG8pOworCQlTQ1RQ
X1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9jaHVuayksIGNoayk7CisJCVNDVFBf
REVDUl9DSEtfQ09VTlQoKTsKKwkJLypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KKwl9CisJLyog
QVNDT05GIHF1ZXVlIE1BWSBub3QgYmUgZW1wdHkgKi8KKwlUQUlMUV9GT1JFQUNIX1NBRkUoY2hr
LCAmYXNvYy0+YXNjb25mX3NlbmRfcXVldWUsIHNjdHBfbmV4dCwgbmNoaykgeworCQlUQUlMUV9S
RU1PVkUoJmFzb2MtPmFzY29uZl9zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7CisJCWlmIChj
aGstPmRhdGEpIHsKKwkJCXNjdHBfbV9mcmVlbShjaGstPmRhdGEpOworCQkJY2hrLT5kYXRhID0g
TlVMTDsKKwkJfQorCQlpZiAoY2hrLT5ob2xkc19rZXlfcmVmKQorCQkJc2N0cF9hdXRoX2tleV9y
ZWxlYXNlKHN0Y2IsIGNoay0+YXV0aF9rZXlpZCwgU0NUUF9TT19MT0NLRUQpOworCQlzY3RwX2Zy
ZWVfcmVtb3RlX2FkZHIoY2hrLT53aG9Ubyk7CisJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9J
TkZPKGlwaV96b25lX2NodW5rKSwgY2hrKTsKKwkJU0NUUF9ERUNSX0NIS19DT1VOVCgpOworCQkv
KnNhX2lnbm9yZSBGUkVFRF9NRU1PUlkqLworCX0KKwlpZiAoYXNvYy0+bWFwcGluZ19hcnJheSkg
eworCQlTQ1RQX0ZSRUUoYXNvYy0+bWFwcGluZ19hcnJheSwgU0NUUF9NX01BUCk7CisJCWFzb2Mt
Pm1hcHBpbmdfYXJyYXkgPSBOVUxMOworCX0KKwlpZiAoYXNvYy0+bnJfbWFwcGluZ19hcnJheSkg
eworCQlTQ1RQX0ZSRUUoYXNvYy0+bnJfbWFwcGluZ19hcnJheSwgU0NUUF9NX01BUCk7CisJCWFz
b2MtPm5yX21hcHBpbmdfYXJyYXkgPSBOVUxMOworCX0KKwkvKiB0aGUgc3RyZWFtIG91dHMgKi8K
KwlpZiAoYXNvYy0+c3RybW91dCkgeworCQlTQ1RQX0ZSRUUoYXNvYy0+c3RybW91dCwgU0NUUF9N
X1NUUk1PKTsKKwkJYXNvYy0+c3RybW91dCA9IE5VTEw7CisJfQorCWFzb2MtPnN0cm1fcmVhbG91
dHNpemUgPSBhc29jLT5zdHJlYW1vdXRjbnQgPSAwOworCWlmIChhc29jLT5zdHJtaW4pIHsKKwkJ
Zm9yIChpID0gMDsgaSA8IGFzb2MtPnN0cmVhbWluY250OyBpKyspIHsKKwkJCXNjdHBfY2xlYW5f
dXBfc3RyZWFtKHN0Y2IsICZhc29jLT5zdHJtaW5baV0uaW5xdWV1ZSk7CisJCQlzY3RwX2NsZWFu
X3VwX3N0cmVhbShzdGNiLCAmYXNvYy0+c3RybWluW2ldLnVub19pbnF1ZXVlKTsKKwkJfQorCQlT
Q1RQX0ZSRUUoYXNvYy0+c3RybWluLCBTQ1RQX01fU1RSTUkpOworCQlhc29jLT5zdHJtaW4gPSBO
VUxMOworCX0KKwlhc29jLT5zdHJlYW1pbmNudCA9IDA7CisJVEFJTFFfRk9SRUFDSF9TQUZFKG5l
dCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCwgbm5ldCkgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJ
aWYgKFNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9yYWRkcikgPT0gMCkgeworCQkJcGFuaWMoIm5v
IG5ldCdzIGxlZnQgYWxsb2MnZWQsIG9yIGxpc3QgcG9pbnRzIHRvIGl0c2VsZiIpOworCQl9Cisj
ZW5kaWYKKwkJVEFJTFFfUkVNT1ZFKCZhc29jLT5uZXRzLCBuZXQsIHNjdHBfbmV4dCk7CisJCXNj
dHBfZnJlZV9yZW1vdGVfYWRkcihuZXQpOworCX0KKwlMSVNUX0ZPUkVBQ0hfU0FGRShsYWRkciwg
JmFzb2MtPnNjdHBfcmVzdHJpY3RlZF9hZGRycywgc2N0cF9ueHRfYWRkciwgbmFkZHIpIHsKKwkJ
LypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KKwkJc2N0cF9yZW1vdmVfbGFkZHIobGFkZHIpOwor
CX0KKworCS8qIHBlbmRpbmcgYXNjb25mIChhZGRyZXNzKSBwYXJhbWV0ZXJzICovCisJVEFJTFFf
Rk9SRUFDSF9TQUZFKGFwYXJhbSwgJmFzb2MtPmFzY29uZl9xdWV1ZSwgbmV4dCwgbmFwYXJhbSkg
eworCQkvKnNhX2lnbm9yZSBGUkVFRF9NRU1PUlkqLworCQlUQUlMUV9SRU1PVkUoJmFzb2MtPmFz
Y29uZl9xdWV1ZSwgYXBhcmFtLCBuZXh0KTsKKwkJU0NUUF9GUkVFKGFwYXJhbSxTQ1RQX01fQVND
X0FERFIpOworCX0KKwlUQUlMUV9GT1JFQUNIX1NBRkUoYWFjaywgJmFzb2MtPmFzY29uZl9hY2tf
c2VudCwgbmV4dCwgbmFhY2spIHsKKwkJLypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KKwkJVEFJ
TFFfUkVNT1ZFKCZhc29jLT5hc2NvbmZfYWNrX3NlbnQsIGFhY2ssIG5leHQpOworCQlpZiAoYWFj
ay0+ZGF0YSAhPSBOVUxMKSB7CisJCQlzY3RwX21fZnJlZW0oYWFjay0+ZGF0YSk7CisJCX0KKwkJ
U0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfYXNjb25mX2FjayksIGFhY2sp
OworCX0KKwkvKiBjbGVhbiB1cCBhdXRoIHN0dWZmICovCisJaWYgKGFzb2MtPmxvY2FsX2htYWNz
KQorCQlzY3RwX2ZyZWVfaG1hY2xpc3QoYXNvYy0+bG9jYWxfaG1hY3MpOworCWlmIChhc29jLT5w
ZWVyX2htYWNzKQorCQlzY3RwX2ZyZWVfaG1hY2xpc3QoYXNvYy0+cGVlcl9obWFjcyk7CisKKwlp
ZiAoYXNvYy0+bG9jYWxfYXV0aF9jaHVua3MpCisJCXNjdHBfZnJlZV9jaHVua2xpc3QoYXNvYy0+
bG9jYWxfYXV0aF9jaHVua3MpOworCWlmIChhc29jLT5wZWVyX2F1dGhfY2h1bmtzKQorCQlzY3Rw
X2ZyZWVfY2h1bmtsaXN0KGFzb2MtPnBlZXJfYXV0aF9jaHVua3MpOworCisJc2N0cF9mcmVlX2F1
dGhpbmZvKCZhc29jLT5hdXRoaW5mbyk7CisKKwlMSVNUX0ZPUkVBQ0hfU0FGRShzaGFyZWRfa2V5
LCAmYXNvYy0+c2hhcmVkX2tleXMsIG5leHQsIG5zaGFyZWRfa2V5KSB7CisJCUxJU1RfUkVNT1ZF
KHNoYXJlZF9rZXksIG5leHQpOworCQlzY3RwX2ZyZWVfc2hhcmVka2V5KHNoYXJlZF9rZXkpOwor
CQkvKnNhX2lnbm9yZSBGUkVFRF9NRU1PUlkqLworCX0KKworCS8qIEluc2VydCBuZXcgaXRlbXMg
aGVyZSA6PiAqLworCisJLyogR2V0IHJpZCBvZiBMT0NLICovCisJU0NUUF9UQ0JfU0VORF9VTkxP
Q0soc3RjYik7CisJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCVNDVFBfVENCX0xPQ0tfREVTVFJP
WShzdGNiKTsKKwlTQ1RQX1RDQl9TRU5EX0xPQ0tfREVTVFJPWShzdGNiKTsKKwlpZiAoZnJvbV9p
bnBjYmZyZWUgPT0gU0NUUF9OT1JNQUxfUFJPQykgeworCQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0so
KTsKKwkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwl9CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYm
ICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJLyogVEVNUCBDT0RFICovCisJc3RjYi0+ZnJlZWRf
ZnJvbV93aGVyZSA9IGZyb21fbG9jYXRpb247CisjZW5kaWYKKyNpZmRlZiBTQ1RQX1RSQUNLX0ZS
RUVEX0FTT0NTCisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9H
T05FKSB7CisJCS8qIG5vdyBjbGVhbiB1cCB0aGUgdGFzb2MgaXRzZWxmICovCisJCVNDVFBfWk9O
RV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2Fzb2MpLCBzdGNiKTsKKwkJU0NUUF9ERUNS
X0FTT0NfQ09VTlQoKTsKKwl9IGVsc2UgeworCQlMSVNUX0lOU0VSVF9IRUFEKCZpbnAtPnNjdHBf
YXNvY19mcmVlX2xpc3QsIHN0Y2IsIHNjdHBfdGNibGlzdCk7CisJfQorI2Vsc2UKKwlTQ1RQX1pP
TkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9hc29jKSwgc3RjYik7CisJU0NUUF9ERUNS
X0FTT0NfQ09VTlQoKTsKKyNlbmRpZgorCWlmIChmcm9tX2lucGNiZnJlZSA9PSBTQ1RQX05PUk1B
TF9QUk9DKSB7CisJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRf
R09ORSkgeworCQkJLyogSWYgaXRzIE5PVCB0aGUgaW5wX2ZyZWUgY2FsbGluZyB1cyBBTkQKKwkJ
CSAqIHNjdHBfY2xvc2UgYXMgYmVlbiBjYWxsZWQsIHdlCisJCQkgKiBjYWxsIGJhY2suLi4KKwkJ
CSAqLworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJLyogVGhpcyB3aWxsIHN0YXJ0IHRo
ZSBraWxsIHRpbWVyIChpZiB3ZSBhcmUKKwkJCSAqIHRoZSBsYXN0IG9uZSkgc2luY2Ugd2UgaG9s
ZCBhbiBpbmNyZW1lbnQgeWV0LiBCdXQKKwkJCSAqIHRoaXMgaXMgdGhlIG9ubHkgc2FmZSB3YXkg
dG8gZG8gdGhpcworCQkJICogc2luY2Ugb3RoZXJ3aXNlIGlmIHRoZSBzb2NrZXQgY2xvc2VzCisJ
CQkgKiBhdCB0aGUgc2FtZSB0aW1lIHdlIGFyZSBoZXJlIHdlIG1pZ2h0CisJCQkgKiBjb2xsaWRl
IGluIHRoZSBjbGVhbnVwLgorCQkJICovCisJCQlzY3RwX2lucGNiX2ZyZWUoaW5wLAorCQkJCQlT
Q1RQX0ZSRUVfU0hPVUxEX1VTRV9HUkFDRUZVTF9DTE9TRSwKKwkJCQkJU0NUUF9DQUxMRURfRElS
RUNUTFlfTk9DTVBTRVQpOworCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJfSBlbHNlIHsK
KwkJCS8qIFRoZSBzb2NrZXQgaXMgc3RpbGwgb3Blbi4gKi8KKwkJCVNDVFBfSU5QX0RFQ1JfUkVG
KGlucCk7CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCX0KKwl9CisJLyogZGVzdHJveWVk
IHRoZSBhc29jICovCisjaWZkZWYgU0NUUF9MT0dfQ0xPU0lORworCXNjdHBfbG9nX2Nsb3Npbmco
aW5wLCBOVUxMLCAxMSk7CisjZW5kaWYKKwlyZXR1cm4gKDEpOworfQorCisvKgorICogZGV0ZXJt
aW5lIGlmIGEgZGVzdGluYXRpb24gaXMgInJlYWNoYWJsZSIgYmFzZWQgdXBvbiB0aGUgYWRkcmVz
c2VzIGJvdW5kCisgKiB0byB0aGUgY3VycmVudCBlbmRwb2ludCAoZS5nLiBvbmx5IHY0IG9yIHY2
IGN1cnJlbnRseSBib3VuZCkKKyAqLworLyoKKyAqIEZJWDogaWYgd2UgYWxsb3cgYXNzb2MtbGV2
ZWwgYmluZHgoKSwgdGhlbiB0aGlzIG5lZWRzIHRvIGJlIGZpeGVkIHRvIHVzZQorICogYXNzb2Mg
bGV2ZWwgdjQvdjYgZmxhZ3MsIGFzIHRoZSBhc3NvYyAqbWF5KiBub3QgaGF2ZSB0aGUgc2FtZSBh
ZGRyZXNzCisgKiB0eXBlcyBib3VuZCBhcyBpdHMgZW5kcG9pbnQKKyAqLworaW50CitzY3RwX2Rl
c3RpbmF0aW9uX2lzX3JlYWNoYWJsZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzb2Nr
YWRkciAqZGVzdGFkZHIpCit7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKwlpbnQgYW5zd2Vy
OworCisJLyoKKwkgKiBObyBsb2NrcyBoZXJlLCB0aGUgVENCLCBpbiBhbGwgY2FzZXMgaXMgYWxy
ZWFkeSBsb2NrZWQgYW5kIGFuCisJICogYXNzb2MgaXMgdXAuIFRoZXJlIGlzIGVpdGhlciBhIElO
UCBsb2NrIGJ5IHRoZSBjYWxsZXIgYXBwbGllZCAoaW4KKwkgKiBhc2NvbmYgY2FzZSB3aGVuIGRl
bGV0aW5nIGFuIGFkZHJlc3MpIG9yIE5PVCBpbiB0aGUgSEIgY2FzZSwKKwkgKiBob3dldmVyIGlm
IEhCIHRoZW4gdGhlIElOUCBpbmNyZW1lbnQgaXMgdXAgYW5kIHRoZSBJTlAgd2lsbCBub3QKKwkg
KiBiZSByZW1vdmVkIChvbiB0b3Agb2YgdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIGEgVENCIGxvY2sp
LiBTbyB3ZQorCSAqIG9ubHkgd2FudCB0byByZWFkIHRoZSBzY3RwX2ZsYWdzLCB3aGljaCBpcyBl
aXRoZXIgYm91bmQtYWxsIG9yCisJICogbm90Li4gbm8gcHJvdGVjdGlvbiBuZWVkZWQgc2luY2Ug
b25jZSBhbiBhc3NvYyBpcyB1cCB5b3UgY2FuJ3QgYmUKKwkgKiBjaGFuZ2luZyB5b3VyIGJpbmRp
bmcuCisJICovCisJaW5wID0gc3RjYi0+c2N0cF9lcDsKKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpIHsKKwkJLyogaWYgYm91bmQgYWxsLCBkZXN0aW5hdGlv
biBpcyBub3QgcmVzdHJpY3RlZCAqLworCQkvKgorCQkgKiBSUlM6IFF1ZXN0aW9uIGR1cmluZyBs
b2NrIHdvcms6IElzIHRoaXMgY29ycmVjdD8gSWYgeW91CisJCSAqIGFyZSBib3VuZC1hbGwgeW91
IHN0aWxsIG1pZ2h0IG5lZWQgdG8gb2JleSB0aGUgVjQtLVY2CisJCSAqIGZsYWdzPz8/IElNTyB0
aGlzIGJvdW5kLWFsbCBzdHVmZiBuZWVkcyB0byBiZSByZW1vdmVkIQorCQkgKi8KKwkJcmV0dXJu
ICgxKTsKKwl9CisJLyogTk9URTogYWxsICJzY29wZSIgY2hlY2tzIGFyZSBkb25lIHdoZW4gbG9j
YWwgYWRkcmVzc2VzIGFyZSBhZGRlZCAqLworCXN3aXRjaCAoZGVzdGFkZHItPnNhX2ZhbWlseSkg
eworI2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKwkJYW5zd2VyID0gaW5wLT5pcF9pbnAu
aW5wLmlucF92ZmxhZyAmIElOUF9JUFY2OworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQK
KwljYXNlIEFGX0lORVQ6CisJCWFuc3dlciA9IGlucC0+aXBfaW5wLmlucC5pbnBfdmZsYWcgJiBJ
TlBfSVBWNDsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJ
Y2FzZSBBRl9DT05OOgorCQlhbnN3ZXIgPSBpbnAtPmlwX2lucC5pbnAuaW5wX3ZmbGFnICYgSU5Q
X0NPTk47CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJLyogaW52YWxpZCBmYW1pbHks
IHNvIGl0J3MgdW5yZWFjaGFibGUgKi8KKwkJYW5zd2VyID0gMDsKKwkJYnJlYWs7CisJfQorCXJl
dHVybiAoYW5zd2VyKTsKK30KKworLyoKKyAqIHVwZGF0ZSB0aGUgaW5wX3ZmbGFncyBvbiBhbiBl
bmRwb2ludAorICovCitzdGF0aWMgdm9pZAorc2N0cF91cGRhdGVfZXBfdmZsYWcoc3RydWN0IHNj
dHBfaW5wY2IgKmlucCkKK3sKKwlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7CisKKwkvKiBmaXJz
dCBjbGVhciB0aGUgZmxhZyAqLworCWlucC0+aXBfaW5wLmlucC5pbnBfdmZsYWcgPSAwOworCS8q
IHNldCB0aGUgZmxhZyBiYXNlZCBvbiBhZGRyZXNzZXMgb24gdGhlIGVwIGxpc3QgKi8KKwlMSVNU
X0ZPUkVBQ0gobGFkZHIsICZpbnAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7CisJ
CWlmIChsYWRkci0+aWZhID09IE5VTEwpIHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAi
JXM6IE5VTEwgaWZhXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJ
aWYgKGxhZGRyLT5pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9CRUlOR19ERUxFVEVEKSB7CisJ
CQljb250aW51ZTsKKwkJfQorCQlzd2l0Y2ggKGxhZGRyLT5pZmEtPmFkZHJlc3Muc2Euc2FfZmFt
aWx5KSB7CisjaWZkZWYgSU5FVDYKKwkJY2FzZSBBRl9JTkVUNjoKKwkJCWlucC0+aXBfaW5wLmlu
cC5pbnBfdmZsYWcgfD0gSU5QX0lQVjY7CisJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQK
KwkJY2FzZSBBRl9JTkVUOgorCQkJaW5wLT5pcF9pbnAuaW5wLmlucF92ZmxhZyB8PSBJTlBfSVBW
NDsKKwkJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQljYXNl
IEFGX0NPTk46CisJCQlpbnAtPmlwX2lucC5pbnAuaW5wX3ZmbGFnIHw9IElOUF9DT05OOworCQkJ
YnJlYWs7CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorfQorCisvKgor
ICogQWRkIHRoZSBhZGRyZXNzIHRvIHRoZSBlbmRwb2ludCBsb2NhbCBhZGRyZXNzIGxpc3QgVGhl
cmUgaXMgbm90aGluZyB0byBiZQorICogZG9uZSBpZiB3ZSBhcmUgYm91bmQgdG8gYWxsIGFkZHJl
c3NlcworICovCit2b2lkCitzY3RwX2FkZF9sb2NhbF9hZGRyX2VwKHN0cnVjdCBzY3RwX2lucGNi
ICppbnAsIHN0cnVjdCBzY3RwX2lmYSAqaWZhLCB1aW50MzJfdCBhY3Rpb24pCit7CisJc3RydWN0
IHNjdHBfbGFkZHIgKmxhZGRyOworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKKwlpbnQgZm5kLCBl
cnJvciA9IDA7CisKKwlmbmQgPSAwOworCisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX0JPVU5EQUxMKSB7CisJCS8qIFlvdSBhcmUgYWxyZWFkeSBib3VuZCB0byBhbGwuIFlv
dSBoYXZlIGl0IGFscmVhZHkgKi8KKwkJcmV0dXJuOworCX0KKyNpZmRlZiBJTkVUNgorCWlmIChp
ZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCWlmIChpZmEtPmxvY2Fs
aWZhX2ZsYWdzICYgU0NUUF9BRERSX0lGQV9VTlVTRUFCTEUpIHsKKwkJCS8qIENhbid0IGJpbmQg
YSBub24tdXNlYWJsZSBhZGRyLiAqLworCQkJcmV0dXJuOworCQl9CisJfQorI2VuZGlmCisJLyog
Zmlyc3QsIGlzIGl0IGFscmVhZHkgcHJlc2VudD8gKi8KKwlMSVNUX0ZPUkVBQ0gobGFkZHIsICZp
bnAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7CisJCWlmIChsYWRkci0+aWZhID09
IGlmYSkgeworCQkJZm5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGZuZCA9PSAw
KSB7CisJCS8qIE5vdCBpbiB0aGUgZXAgbGlzdCAqLworCQllcnJvciA9IHNjdHBfaW5zZXJ0X2xh
ZGRyKCZpbnAtPnNjdHBfYWRkcl9saXN0LCBpZmEsIGFjdGlvbik7CisJCWlmIChlcnJvciAhPSAw
KQorCQkJcmV0dXJuOworCQlpbnAtPmxhZGRyX2NvdW50Kys7CisJCS8qIHVwZGF0ZSBpbnBfdmZs
YWcgZmxhZ3MgKi8KKwkJc3dpdGNoIChpZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7CisjaWZk
ZWYgSU5FVDYKKwkJY2FzZSBBRl9JTkVUNjoKKwkJCWlucC0+aXBfaW5wLmlucC5pbnBfdmZsYWcg
fD0gSU5QX0lQVjY7CisJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQKKwkJY2FzZSBBRl9J
TkVUOgorCQkJaW5wLT5pcF9pbnAuaW5wLmlucF92ZmxhZyB8PSBJTlBfSVBWNDsKKwkJCWJyZWFr
OworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQljYXNlIEFGX0NPTk46CisJ
CQlpbnAtPmlwX2lucC5pbnAuaW5wX3ZmbGFnIHw9IElOUF9DT05OOworCQkJYnJlYWs7CisjZW5k
aWYKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCUxJU1RfRk9SRUFDSChzdGNiLCAmaW5w
LT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7CisJCQlzY3RwX2FkZF9sb2NhbF9hZGRy
X3Jlc3RyaWN0ZWQoc3RjYiwgaWZhKTsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKKy8qCisgKiBz
ZWxlY3QgYSBuZXcgKGhvcGVmdWxseSByZWFjaGFibGUpIGRlc3RpbmF0aW9uIG5ldCAoc2hvdWxk
IG9ubHkgYmUgdXNlZAorICogd2hlbiB3ZSBkZWxldGVkIGFuIGVwIGFkZHIgdGhhdCBpcyB0aGUg
b25seSB1c2FibGUgc291cmNlIGFkZHJlc3MgdG8gcmVhY2gKKyAqIHRoZSBkZXN0aW5hdGlvbiBu
ZXQpCisgKi8KK3N0YXRpYyB2b2lkCitzY3RwX3NlbGVjdF9wcmltYXJ5X2Rlc3RpbmF0aW9uKHN0
cnVjdCBzY3RwX3RjYiAqc3RjYikKK3sKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisKKwlUQUlM
UV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCS8qIGZvciBu
b3csIHdlJ2xsIGp1c3QgcGljayB0aGUgZmlyc3QgcmVhY2hhYmxlIG9uZSB3ZSBmaW5kICovCisJ
CWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQpCisJCQljb250aW51
ZTsKKwkJaWYgKHNjdHBfZGVzdGluYXRpb25faXNfcmVhY2hhYmxlKHN0Y2IsCisJCSAgICAoc3Ry
dWN0IHNvY2thZGRyICopJm5ldC0+cm8uX2xfYWRkcikpIHsKKwkJCS8qIGZvdW5kIGEgcmVhY2hh
YmxlIGRlc3RpbmF0aW9uICovCisJCQlzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24gPSBu
ZXQ7CisJCX0KKwl9CisJLyogSSBjYW4ndCB0aGVyZSBmcm9tIGhlcmUhIC4uLndlJ3JlIGdvbm5h
IGRpZSBzaG9ydGx5Li4uICovCit9CisKKy8qCisgKiBEZWxldGUgdGhlIGFkZHJlc3MgZnJvbSB0
aGUgZW5kcG9pbnQgbG9jYWwgYWRkcmVzcyBsaXN0LiBUaGVyZSBpcyBub3RoaW5nCisgKiB0byBi
ZSBkb25lIGlmIHdlIGFyZSBib3VuZCB0byBhbGwgYWRkcmVzc2VzCisgKi8KK3ZvaWQKK3NjdHBf
ZGVsX2xvY2FsX2FkZHJfZXAoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfaWZh
ICppZmEpCit7CisJc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyOworCWludCBmbmQ7CisKKwlmbmQg
PSAwOworCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgewor
CQkvKiBZb3UgYXJlIGFscmVhZHkgYm91bmQgdG8gYWxsLiBZb3UgaGF2ZSBpdCBhbHJlYWR5ICov
CisJCXJldHVybjsKKwl9CisJTElTVF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlz
dCwgc2N0cF9ueHRfYWRkcikgeworCQlpZiAobGFkZHItPmlmYSA9PSBpZmEpIHsKKwkJCWZuZCA9
IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoZm5kICYmIChpbnAtPmxhZGRyX2NvdW50IDwg
MikpIHsKKwkJLyogY2FuJ3QgZGVsZXRlIHVubGVzcyB0aGVyZSBhcmUgYXQgTEVBU1QgMiBhZGRy
ZXNzZXMgKi8KKwkJcmV0dXJuOworCX0KKwlpZiAoZm5kKSB7CisJCS8qCisJCSAqIGNsZWFuIHVw
IGFueSB1c2Ugb2YgdGhpcyBhZGRyZXNzIGdvIHRocm91Z2ggb3VyCisJCSAqIGFzc29jaWF0aW9u
cyBhbmQgY2xlYXIgYW55IGxhc3RfdXNlZF9hZGRyZXNzIHRoYXQgbWF0Y2gKKwkJICogdGhpcyBv
bmUgZm9yIGVhY2ggYXNzb2MsIHNlZSBpZiBhIG5ldyBwcmltYXJ5X2Rlc3RpbmF0aW9uCisJCSAq
IGlzIG5lZWRlZAorCQkgKi8KKwkJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCisJCS8qIGNsZWFu
IHVwICJuZXh0X2FkZHJfdG91c2UiICovCisJCWlmIChpbnAtPm5leHRfYWRkcl90b3VzZSA9PSBs
YWRkcikKKwkJCS8qIGRlbGV0ZSB0aGlzIGFkZHJlc3MgKi8KKwkJCWlucC0+bmV4dF9hZGRyX3Rv
dXNlID0gTlVMTDsKKworCQkvKiBjbGVhbiB1cCAibGFzdF91c2VkX2FkZHJlc3MiICovCisJCUxJ
U1RfRk9SRUFDSChzdGNiLCAmaW5wLT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7CisJ
CQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisKKwkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQlp
ZiAoc3RjYi0+YXNvYy5sYXN0X3VzZWRfYWRkcmVzcyA9PSBsYWRkcikKKwkJCQkvKiBkZWxldGUg
dGhpcyBhZGRyZXNzICovCisJCQkJc3RjYi0+YXNvYy5sYXN0X3VzZWRfYWRkcmVzcyA9IE5VTEw7
CisJCQkvKiBOb3cgc3BpbiB0aHJvdWdoIGFsbCB0aGUgbmV0cyBhbmQgcHVyZ2UgYW55IHJlZiB0
byBsYWRkciAqLworCQkJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBf
bmV4dCkgeworCQkJCWlmIChuZXQtPnJvLl9zX2FkZHIgPT0gbGFkZHItPmlmYSkgeworCQkJCQkv
KiBZZXAsIHB1cmdlIHNyYyBhZGRyZXNzIHNlbGVjdGVkICovCisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQkJUk9fTkhGUkVFKCZuZXQtPnJv
KTsKKyNlbHNlCisJCQkJCXNjdHBfcnRlbnRyeV90ICpydDsKKworCQkJCQkvKiBkZWxldGUgdGhp
cyBhZGRyZXNzIGlmIGNhY2hlZCAqLworCQkJCQlydCA9IG5ldC0+cm8ucm9fcnQ7CisJCQkJCWlm
IChydCAhPSBOVUxMKSB7CisJCQkJCQlSVEZSRUUocnQpOworCQkJCQkJbmV0LT5yby5yb19ydCA9
IE5VTEw7CisJCQkJCX0KKyNlbmRpZgorCQkJCQlzY3RwX2ZyZWVfaWZhKG5ldC0+cm8uX3NfYWRk
cik7CisJCQkJCW5ldC0+cm8uX3NfYWRkciA9IE5VTEw7CisJCQkJCW5ldC0+c3JjX2FkZHJfc2Vs
ZWN0ZWQgPSAwOworCQkJCX0KKwkJCX0KKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfQkJ
LyogZm9yIGVhY2ggdGNiICovCisJCS8qIHJlbW92ZSBpdCBmcm9tIHRoZSBlcCBsaXN0ICovCisJ
CXNjdHBfcmVtb3ZlX2xhZGRyKGxhZGRyKTsKKwkJaW5wLT5sYWRkcl9jb3VudC0tOworCQkvKiB1
cGRhdGUgaW5wX3ZmbGFnIGZsYWdzICovCisJCXNjdHBfdXBkYXRlX2VwX3ZmbGFnKGlucCk7CisJ
fQorCXJldHVybjsKK30KKworLyoKKyAqIEFkZCB0aGUgYWRkcmVzcyB0byB0aGUgVENCIGxvY2Fs
IGFkZHJlc3MgcmVzdHJpY3RlZCBsaXN0LgorICogVGhpcyBpcyBhICJwZW5kaW5nIiBhZGRyZXNz
IGxpc3QgKGVnLiBhZGRyZXNzZXMgd2FpdGluZyBmb3IgYW4KKyAqIEFTQ09ORi1BQ0sgcmVzcG9u
c2UpIGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBhIHZhbGlkIHNvdXJjZSBhZGRyZXNzLgorICovCit2
b2lkCitzY3RwX2FkZF9sb2NhbF9hZGRyX3Jlc3RyaWN0ZWQoc3RydWN0IHNjdHBfdGNiICpzdGNi
LCBzdHJ1Y3Qgc2N0cF9pZmEgKmlmYSkKK3sKKwlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7CisJ
c3RydWN0IHNjdHBsYWRkciAqbGlzdDsKKworCS8qCisJICogQXNzdW1lcyBUQ0IgaXMgbG9ja2Vk
Li4gYW5kIHBvc3NpYmx5IHRoZSBJTlAuIE1heSBuZWVkIHRvCisJICogY29uZmlybS9maXggdGhh
dCBpZiB3ZSBuZWVkIGl0IGFuZCBpcyBub3QgdGhlIGNhc2UuCisJICovCisJbGlzdCA9ICZzdGNi
LT5hc29jLnNjdHBfcmVzdHJpY3RlZF9hZGRyczsKKworI2lmZGVmIElORVQ2CisJaWYgKGlmYS0+
YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJaWYgKGlmYS0+bG9jYWxpZmFf
ZmxhZ3MgJiBTQ1RQX0FERFJfSUZBX1VOVVNFQUJMRSkgeworCQkJLyogQ2FuJ3QgYmluZCBhIG5v
bi1leGlzdGVudCBhZGRyLiAqLworCQkJcmV0dXJuOworCQl9CisJfQorI2VuZGlmCisJLyogZG9l
cyB0aGUgYWRkcmVzcyBhbHJlYWR5IGV4aXN0PyAqLworCUxJU1RfRk9SRUFDSChsYWRkciwgbGlz
dCwgc2N0cF9ueHRfYWRkcikgeworCQlpZiAobGFkZHItPmlmYSA9PSBpZmEpIHsKKwkJCXJldHVy
bjsKKwkJfQorCX0KKworCS8qIGFkZCB0byB0aGUgbGlzdCAqLworCSh2b2lkKXNjdHBfaW5zZXJ0
X2xhZGRyKGxpc3QsIGlmYSwgMCk7CisJcmV0dXJuOworfQorCisvKgorICogUmVtb3ZlIGEgbG9j
YWwgYWRkcmVzcyBmcm9tIHRoZSBUQ0IgbG9jYWwgYWRkcmVzcyByZXN0cmljdGVkIGxpc3QKKyAq
Lwordm9pZAorc2N0cF9kZWxfbG9jYWxfYWRkcl9yZXN0cmljdGVkKHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwgc3RydWN0IHNjdHBfaWZhICppZmEpCit7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsK
KwlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7CisKKwkvKgorCSAqIFRoaXMgaXMgY2FsbGVkIGJ5
IGFzY29uZiB3b3JrLiBJdCBpcyBhc3N1bWVkIHRoYXQgYSkgVGhlIFRDQiBpcworCSAqIGxvY2tl
ZCBhbmQgYikgVGhlIElOUCBpcyBsb2NrZWQuIFRoaXMgaXMgdHJ1ZSBpbiBhcyBtdWNoIGFzIEkg
Y2FuCisJICogdHJhY2UgdGhyb3VnaCB0aGUgZW50cnkgYXNjb25mIGNvZGUgd2hlcmUgSSBkaWQg
dGhlc2UgbG9ja3MuCisJICogQWdhaW4sIHRoZSBBU0NPTkYgY29kZSBpcyBhIGJpdCBkaWZmZXJl
bnQgaW4gdGhhdCBpdCBkb2VzIGxvY2sKKwkgKiB0aGUgSU5QIGR1cmluZyBpdHMgd29yayBvZnRl
biB0aW1lcy4gVGhpcyBtdXN0IGJlIHNpbmNlIHdlIGRvbid0CisJICogd2FudCBvdGhlciBwcm9j
J3MgbG9va2luZyB1cCB0aGluZ3Mgd2hpbGUgd2hhdCB0aGV5IGFyZSBsb29raW5nCisJICogdXAg
aXMgY2hhbmdpbmcgOi1ECisJICovCisKKwlpbnAgPSBzdGNiLT5zY3RwX2VwOworCS8qIGlmIHN1
YnNldCBib3VuZCBhbmQgZG9uJ3QgYWxsb3cgQVNDT05GJ3MsIGNhbid0IGRlbGV0ZSBsYXN0ICov
CisJaWYgKCgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpID09IDAp
ICYmCisJICAgIHNjdHBfaXNfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19ET19BU0NP
TkYpKSB7CisJCWlmIChzdGNiLT5zY3RwX2VwLT5sYWRkcl9jb3VudCA8IDIpIHsKKwkJCS8qIGNh
bid0IGRlbGV0ZSBsYXN0IGFkZHJlc3MgKi8KKwkJCXJldHVybjsKKwkJfQorCX0KKwlMSVNUX0ZP
UkVBQ0gobGFkZHIsICZzdGNiLT5hc29jLnNjdHBfcmVzdHJpY3RlZF9hZGRycywgc2N0cF9ueHRf
YWRkcikgeworCQkvKiByZW1vdmUgdGhlIGFkZHJlc3MgaWYgaXQgZXhpc3RzICovCisJCWlmIChs
YWRkci0+aWZhID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJaWYgKGxhZGRyLT5pZmEgPT0gaWZh
KSB7CisJCQlzY3RwX3JlbW92ZV9sYWRkcihsYWRkcik7CisJCQlyZXR1cm47CisJCX0KKwl9CisK
KwkvKiBhZGRyZXNzIG5vdCBmb3VuZCEgKi8KKwlyZXR1cm47Cit9CisKKyNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorLyogc3lzY3RsICovCitzdGF0
aWMgaW50IHNjdHBfbWF4X251bWJlcl9vZl9hc3NvYyA9IFNDVFBfTUFYX05VTV9PRl9BU09DOwor
c3RhdGljIGludCBzY3RwX3NjYWxlX3VwX2Zvcl9hZGRyZXNzID0gU0NUUF9TQ0FMRV9GT1JfQURE
UjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKyNpZiBkZWZpbmVkKFNDVFBfTUNPUkVfSU5QVVQpICYmIGRlZmluZWQoU01QKQor
c3RydWN0IHNjdHBfbWNvcmVfY3RybCAqc2N0cF9tY29yZV93b3JrZXJzID0gTlVMTDsKK2ludCAq
c2N0cF9jcHVhcnJ5ID0gTlVMTDsKKwordm9pZAorc2N0cF9xdWV1ZV90b19tY29yZShzdHJ1Y3Qg
bWJ1ZiAqbSwgaW50IG9mZiwgaW50IGNwdV90b191c2UpCit7CisJLyogUXVldWUgYSBwYWNrZXQg
dG8gYSBwcm9jZXNzb3IgZm9yIHRoZSBzcGVjaWZpZWQgY29yZSAqLworCXN0cnVjdCBzY3RwX21j
b3JlX3F1ZXVlICpxZW50OworCXN0cnVjdCBzY3RwX21jb3JlX2N0cmwgKndrcTsKKwlpbnQgbmVl
ZF93YWtlID0gMDsKKworCWlmIChzY3RwX21jb3JlX3dvcmtlcnMgPT0gTlVMTCkgeworCQkvKiBT
b21ldGhpbmcgd2VudCB3YXkgYmFkIGR1cmluZyBzZXR1cCAqLworCQlzY3RwX2lucHV0X3dpdGhf
cG9ydChtLCBvZmYsIDApOworCQlyZXR1cm47CisJfQorCVNDVFBfTUFMTE9DKHFlbnQsIHN0cnVj
dCBzY3RwX21jb3JlX3F1ZXVlICosCisJCSAgICAoc2l6ZW9mKHN0cnVjdCBzY3RwX21jb3JlX3F1
ZXVlKSksCisJCSAgICBTQ1RQX01fTUNPUkUpOworCWlmIChxZW50ID09IE5VTEwpIHsKKwkJLyog
VGhpcyBpcyB0cm91YmxlICAqLworCQlzY3RwX2lucHV0X3dpdGhfcG9ydChtLCBvZmYsIDApOwor
CQlyZXR1cm47CisJfQorCXFlbnQtPnZuID0gY3Vydm5ldDsKKwlxZW50LT5tID0gbTsKKwlxZW50
LT5vZmYgPSBvZmY7CisJcWVudC0+djYgPSAwOworCXdrcSA9ICZzY3RwX21jb3JlX3dvcmtlcnNb
Y3B1X3RvX3VzZV07CisJU0NUUF9NQ09SRV9RTE9DSyh3a3EpOworCisJVEFJTFFfSU5TRVJUX1RB
SUwoJndrcS0+cXVlLCBxZW50LCBuZXh0KTsKKwlpZiAod2txLT5ydW5uaW5nID09IDApIHsKKwkJ
bmVlZF93YWtlID0gMTsKKwl9CisJU0NUUF9NQ09SRV9RVU5MT0NLKHdrcSk7CisJaWYgKG5lZWRf
d2FrZSkgeworCQl3YWtldXAoJndrcS0+cnVubmluZyk7CisJfQorfQorCitzdGF0aWMgdm9pZAor
c2N0cF9tY29yZV90aHJlYWQodm9pZCAqYXJnKQoreworCisJc3RydWN0IHNjdHBfbWNvcmVfY3Ry
bCAqd2txOworCXN0cnVjdCBzY3RwX21jb3JlX3F1ZXVlICpxZW50OworCisJd2txID0gKHN0cnVj
dCBzY3RwX21jb3JlX2N0cmwgKilhcmc7CisJc3RydWN0IG1idWYgKm07CisJaW50IG9mZiwgdjY7
CisKKwkvKiBXYWl0IGZvciBmaXJzdCB0aWNrbGUgKi8KKwlTQ1RQX01DT1JFX0xPQ0sod2txKTsK
Kwl3a3EtPnJ1bm5pbmcgPSAwOworCW1zbGVlcCgmd2txLT5ydW5uaW5nLAorCSAgICAgICAmd2tx
LT5jb3JlX210eCwKKwkgICAgICAgMCwgIndhaXQgZm9yIHBrdCIsIDApOworCVNDVFBfTUNPUkVf
VU5MT0NLKHdrcSk7CisKKwkvKiBCaW5kIHRvIG91ciBjcHUgKi8KKwl0aHJlYWRfbG9jayhjdXJ0
aHJlYWQpOworCXNjaGVkX2JpbmQoY3VydGhyZWFkLCB3a3EtPmNwdWlkKTsKKwl0aHJlYWRfdW5s
b2NrKGN1cnRocmVhZCk7CisKKwkvKiBOb3cgbGV0cyBzdGFydCB3b3JraW5nICovCisJU0NUUF9N
Q09SRV9MT0NLKHdrcSk7CisJLyogTm93IGdyYWIgbG9jayBhbmQgZ28gKi8KKwlmb3IgKDs7KSB7
CisJCVNDVFBfTUNPUkVfUUxPQ0sod2txKTsKKwlza2lwX3NsZWVwOgorCQl3a3EtPnJ1bm5pbmcg
PSAxOworCQlxZW50ID0gVEFJTFFfRklSU1QoJndrcS0+cXVlKTsKKwkJaWYgKHFlbnQpIHsKKwkJ
CVRBSUxRX1JFTU9WRSgmd2txLT5xdWUsIHFlbnQsIG5leHQpOworCQkJU0NUUF9NQ09SRV9RVU5M
T0NLKHdrcSk7CisJCQlDVVJWTkVUX1NFVChxZW50LT52bik7CisJCQltID0gcWVudC0+bTsKKwkJ
CW9mZiA9IHFlbnQtPm9mZjsKKwkJCXY2ID0gcWVudC0+djY7CisJCQlTQ1RQX0ZSRUUocWVudCwg
U0NUUF9NX01DT1JFKTsKKwkJCWlmICh2NiA9PSAwKSB7CisJCQkJc2N0cF9pbnB1dF93aXRoX3Bv
cnQobSwgb2ZmLCAwKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9QUklOVEYoIlY2IG5vdCB5ZXQg
c3VwcG9ydGVkXG4iKTsKKwkJCQlzY3RwX21fZnJlZW0obSk7CisJCQl9CisJCQlDVVJWTkVUX1JF
U1RPUkUoKTsKKwkJCVNDVFBfTUNPUkVfUUxPQ0sod2txKTsKKwkJfQorCQl3a3EtPnJ1bm5pbmcg
PSAwOworCQlpZiAoIVRBSUxRX0VNUFRZKCZ3a3EtPnF1ZSkpIHsKKwkJCWdvdG8gc2tpcF9zbGVl
cDsKKwkJfQorCQlTQ1RQX01DT1JFX1FVTkxPQ0sod2txKTsKKwkJbXNsZWVwKCZ3a3EtPnJ1bm5p
bmcsCisJCSAgICAgICAmd2txLT5jb3JlX210eCwKKwkJICAgICAgIDAsICJ3YWl0IGZvciBwa3Qi
LCAwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3N0YXJ0dXBfbWNvcmVfdGhyZWFkcyh2
b2lkKQoreworCWludCBpLCBjcHU7CisKKwlpZiAobXBfbmNwdXMgPT0gMSkKKwkJcmV0dXJuOwor
CisJaWYgKHNjdHBfbWNvcmVfd29ya2VycyAhPSBOVUxMKSB7CisJCS8qIEFscmVhZHkgYmVlbiBo
ZXJlIGluIHNvbWUgcHJldmlvdXMKKwkJICogdm5ldD8KKwkJICovCisJCXJldHVybjsKKwl9CisJ
U0NUUF9NQUxMT0Moc2N0cF9tY29yZV93b3JrZXJzLCBzdHJ1Y3Qgc2N0cF9tY29yZV9jdHJsICos
CisJCSAgICAoKG1wX21heGlkKzEpICogc2l6ZW9mKHN0cnVjdCBzY3RwX21jb3JlX2N0cmwpKSwK
KwkJICAgIFNDVFBfTV9NQ09SRSk7CisJaWYgKHNjdHBfbWNvcmVfd29ya2VycyA9PSBOVUxMKSB7
CisJCS8qIFRTTkggSSBob3BlICovCisJCXJldHVybjsKKwl9CisJbWVtc2V0KHNjdHBfbWNvcmVf
d29ya2VycywgMCAsICgobXBfbWF4aWQrMSkgKgorCQkJCQlzaXplb2Yoc3RydWN0IHNjdHBfbWNv
cmVfY3RybCkpKTsKKwkvKiBJbml0IHRoZSBzdHJ1Y3R1cmVzICovCisJZm9yIChpID0gMDsgaTw9
bXBfbWF4aWQ7IGkrKykgeworCQlUQUlMUV9JTklUKCZzY3RwX21jb3JlX3dvcmtlcnNbaV0ucXVl
KTsKKwkJU0NUUF9NQ09SRV9MT0NLX0lOSVQoJnNjdHBfbWNvcmVfd29ya2Vyc1tpXSk7CisJCVND
VFBfTUNPUkVfUUxPQ0tfSU5JVCgmc2N0cF9tY29yZV93b3JrZXJzW2ldKTsKKwkJc2N0cF9tY29y
ZV93b3JrZXJzW2ldLmNwdWlkID0gaTsKKwl9CisJaWYgKHNjdHBfY3B1YXJyeSA9PSBOVUxMKSB7
CisJCVNDVFBfTUFMTE9DKHNjdHBfY3B1YXJyeSwgaW50ICosCisJCQkgICAgKG1wX25jcHVzICog
c2l6ZW9mKGludCkpLAorCQkJICAgIFNDVFBfTV9NQ09SRSk7CisJCWkgPSAwOworCQlDUFVfRk9S
RUFDSChjcHUpIHsKKwkJCXNjdHBfY3B1YXJyeVtpXSA9IGNwdTsKKwkJCWkrKzsKKwkJfQorCX0K
KwkvKiBOb3cgc3RhcnQgdGhlbSBhbGwgKi8KKwlDUFVfRk9SRUFDSChjcHUpIHsKKwkJKHZvaWQp
a3Byb2NfY3JlYXRlKHNjdHBfbWNvcmVfdGhyZWFkLAorCQkJCSAgICh2b2lkICopJnNjdHBfbWNv
cmVfd29ya2Vyc1tjcHVdLAorCQkJCSAgICZzY3RwX21jb3JlX3dvcmtlcnNbY3B1XS50aHJlYWRf
cHJvYywKKwkJCQkgICAwLAorCQkJCSAgIFNDVFBfS1RIUkVBRF9QQUdFUywKKwkJCQkgICBTQ1RQ
X01DT1JFX05BTUUpOworCX0KK30KKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRlZmluZWQoU0NUUF9OT1Rf
WUVUKQorc3RhdGljIHN0cnVjdCBtYnVmICoKK3NjdHBfbmV0aXNyX2hkbHIoc3RydWN0IG1idWYg
Km0sIHVpbnRwdHJfdCBzb3VyY2UpCit7CisJc3RydWN0IGlwICppcDsKKwlzdHJ1Y3Qgc2N0cGhk
ciAqc2g7CisJaW50IG9mZnNldDsKKwl1aW50MzJfdCBmbG93aWQsIHRhZzsKKworCS8qCisJICog
Tm8gZmxvdyBpZCBidWlsdCBieSBsb3dlciBsYXllcnMgZml4IGl0IHNvIHdlCisJICogY3JlYXRl
IG9uZS4KKwkgKi8KKwlpcCA9IG10b2QobSwgc3RydWN0IGlwICopOworCW9mZnNldCA9IChpcC0+
aXBfaGwgPDwgMikgKyBzaXplb2Yoc3RydWN0IHNjdHBoZHIpOworCWlmIChTQ1RQX0JVRl9MRU4o
bSkgPCBvZmZzZXQpIHsKKwkJaWYgKChtID0gbV9wdWxsdXAobSwgb2Zmc2V0KSkgPT0gTlVMTCkg
eworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfaGRyb3BzKTsKKwkJCXJldHVybiAoTlVMTCk7CisJ
CX0KKwkJaXAgPSBtdG9kKG0sIHN0cnVjdCBpcCAqKTsKKwl9CisJc2ggPSAoc3RydWN0IHNjdHBo
ZHIgKikoKGNhZGRyX3QpaXAgKyAoaXAtPmlwX2hsIDw8IDIpKTsKKwl0YWcgPSBodG9ubChzaC0+
dl90YWcpOworCWZsb3dpZCA9IHRhZyBeIG50b2hzKHNoLT5kZXN0X3BvcnQpIF4gbnRvaHMoc2gt
PnNyY19wb3J0KTsKKwltLT5tX3BrdGhkci5mbG93aWQgPSBmbG93aWQ7CisJLyogRklYIE1FICov
CisJbS0+bV9mbGFncyB8PSBNX0ZMT1dJRDsKKwlyZXR1cm4gKG0pOworfQorCisjZW5kaWYKKyNl
bmRpZgordm9pZAorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK3NjdHBfcGNiX2luaXQoaW50
IHN0YXJ0X3RocmVhZHMpCisjZWxzZQorc2N0cF9wY2JfaW5pdCh2b2lkKQorI2VuZGlmCit7CisJ
LyoKKwkgKiBTQ1RQIGluaXRpYWxpemF0aW9uIGZvciB0aGUgUENCIHN0cnVjdHVyZXMgc2hvdWxk
IGJlIGNhbGxlZCBieQorCSAqIHRoZSBzY3RwX2luaXQoKSBmdW5jdGlvbi4KKwkgKi8KKwlpbnQg
aTsKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKworCWlmIChTQ1RQX0JBU0VfVkFSKHNjdHBfcGNiX2lu
aXRpYWxpemVkKSAhPSAwKSB7CisJCS8qIGVycm9yIEkgd2FzIGNhbGxlZCB0d2ljZSAqLworCQly
ZXR1cm47CisJfQorCVNDVFBfQkFTRV9WQVIoc2N0cF9wY2JfaW5pdGlhbGl6ZWQpID0gMTsKKwor
I2lmIGRlZmluZWQoU0NUUF9QUk9DRVNTX0xFVkVMX0xPQ0tTKQorI2lmICFkZWZpbmVkKF9XSU4z
MikKKwlwdGhyZWFkX211dGV4YXR0cl9pbml0KCZTQ1RQX0JBU0VfVkFSKG10eF9hdHRyKSk7Cisj
aWZkZWYgSU5WQVJJQU5UUworCXB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJlNDVFBfQkFTRV9W
QVIobXR4X2F0dHIpLCBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0spOworI2VuZGlmCisjZW5kaWYK
KyNlbmRpZgorI2lmIGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCisjaWYgZGVmaW5lZChf
V0lOMzIpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2cpICE9IE5VTEwpIHsKKwkJbWVtc2V0KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cp
LCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfbG9nKSk7CisJfQorI2Vsc2UKKwltZW1zZXQoJlNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2cpLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfbG9nKSk7CisjZW5k
aWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisjaWYgZGVmaW5lZChTTVApICYmIGRlZmluZWQoU0NUUF9VU0VfUEVSQ1BVX1NUQVQp
CisJU0NUUF9NQUxMT0MoU0NUUF9CQVNFX1NUQVRTLCBzdHJ1Y3Qgc2N0cHN0YXQgKiwKKwkJICAg
ICgobXBfbWF4aWQrMSkgKiBzaXplb2Yoc3RydWN0IHNjdHBzdGF0KSksCisJCSAgICBTQ1RQX01f
TUNPUkUpOworI2VuZGlmCisjZW5kaWYKKwkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmdHYp
OworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisj
aWYgZGVmaW5lZChTTVApICYmIGRlZmluZWQoU0NUUF9VU0VfUEVSQ1BVX1NUQVQpCisJbWVtc2V0
KFNDVFBfQkFTRV9TVEFUUywgMCwgc2l6ZW9mKHN0cnVjdCBzY3Rwc3RhdCkgKiAobXBfbWF4aWQr
MSkpOworCVNDVFBfQkFTRV9TVEFUU1tQQ1BVX0dFVChjcHVpZCldLnNjdHBzX2Rpc2NvbnRpbnVp
dHl0aW1lLnR2X3NlYyA9ICh1aW50MzJfdCl0di50dl9zZWM7CisJU0NUUF9CQVNFX1NUQVRTW1BD
UFVfR0VUKGNwdWlkKV0uc2N0cHNfZGlzY29udGludWl0eXRpbWUudHZfdXNlYyA9ICh1aW50MzJf
dCl0di50dl91c2VjOworI2Vsc2UKKwltZW1zZXQoJlNDVFBfQkFTRV9TVEFUUywgMCwgc2l6ZW9m
KHN0cnVjdCBzY3Rwc3RhdCkpOworCVNDVFBfQkFTRV9TVEFUKHNjdHBzX2Rpc2NvbnRpbnVpdHl0
aW1lKS50dl9zZWMgPSAodWludDMyX3QpdHYudHZfc2VjOworCVNDVFBfQkFTRV9TVEFUKHNjdHBz
X2Rpc2NvbnRpbnVpdHl0aW1lKS50dl91c2VjID0gKHVpbnQzMl90KXR2LnR2X3VzZWM7CisjZW5k
aWYKKyNlbHNlCisJbWVtc2V0KCZTQ1RQX0JBU0VfU1RBVFMsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0
cHN0YXQpKTsKKwlTQ1RQX0JBU0VfU1RBVChzY3Rwc19kaXNjb250aW51aXR5dGltZSkudHZfc2Vj
ID0gKHVpbnQzMl90KXR2LnR2X3NlYzsKKwlTQ1RQX0JBU0VfU1RBVChzY3Rwc19kaXNjb250aW51
aXR5dGltZSkudHZfdXNlYyA9ICh1aW50MzJfdCl0di50dl91c2VjOworI2VuZGlmCisJLyogaW5p
dCB0aGUgZW1wdHkgbGlzdCBvZiAoQWxsKSBFbmRwb2ludHMgKi8KKwlMSVNUX0lOSVQoJlNDVFBf
QkFTRV9JTkZPKGxpc3RoZWFkKSk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCisJTElTVF9JTklUKCZTQ1RQX0JBU0VfSU5GTyhpbnBsaXN0aGVhZCkp
OworI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkgfHwgZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFS
RCkgfHwgZGVmaW5lZChBUFBMRV9MSU9OKSB8fCBkZWZpbmVkKEFQUExFX01PVU5UQUlOTElPTikK
KwlTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykubGlzdGhlYWQgPSAmU0NUUF9CQVNFX0lORk8oaW5w
bGlzdGhlYWQpOworCVNDVFBfQkFTRV9JTkZPKHNjdGJpbmZvKS5tdHhfZ3JwX2F0dHIgPSBsY2tf
Z3JwX2F0dHJfYWxsb2NfaW5pdCgpOworCWxja19ncnBfYXR0cl9zZXRkZWZhdWx0KFNDVFBfQkFT
RV9JTkZPKHNjdGJpbmZvKS5tdHhfZ3JwX2F0dHIpOworCVNDVFBfQkFTRV9JTkZPKHNjdGJpbmZv
KS5tdHhfZ3JwID0gbGNrX2dycF9hbGxvY19pbml0KCJzY3RwcGNiIiwgU0NUUF9CQVNFX0lORk8o
c2N0YmluZm8pLm10eF9ncnBfYXR0cik7CisJU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLm10eF9h
dHRyID0gbGNrX2F0dHJfYWxsb2NfaW5pdCgpOworCWxja19hdHRyX3NldGRlZmF1bHQoU0NUUF9C
QVNFX0lORk8oc2N0YmluZm8pLm10eF9hdHRyKTsKKyNlbHNlCisJU0NUUF9CQVNFX0lORk8oc2N0
YmluZm8pLmlwaV9saXN0aGVhZCA9ICZTQ1RQX0JBU0VfSU5GTyhpbnBsaXN0aGVhZCk7CisJU0NU
UF9CQVNFX0lORk8oc2N0YmluZm8pLmlwaV9sb2NrX2dycF9hdHRyID0gbGNrX2dycF9hdHRyX2Fs
bG9jX2luaXQoKTsKKwlsY2tfZ3JwX2F0dHJfc2V0ZGVmYXVsdChTQ1RQX0JBU0VfSU5GTyhzY3Ri
aW5mbykuaXBpX2xvY2tfZ3JwX2F0dHIpOworCVNDVFBfQkFTRV9JTkZPKHNjdGJpbmZvKS5pcGlf
bG9ja19ncnAgPSBsY2tfZ3JwX2FsbG9jX2luaXQoInNjdHBwY2IiLCBTQ1RQX0JBU0VfSU5GTyhz
Y3RiaW5mbykuaXBpX2xvY2tfZ3JwX2F0dHIpOworCVNDVFBfQkFTRV9JTkZPKHNjdGJpbmZvKS5p
cGlfbG9ja19hdHRyID0gbGNrX2F0dHJfYWxsb2NfaW5pdCgpOworCWxja19hdHRyX3NldGRlZmF1
bHQoU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLmlwaV9sb2NrX2F0dHIpOworI2VuZGlmCisjaWYg
IWRlZmluZWQoQVBQTEVfTEVPUEFSRCkgJiYgIWRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpICYm
ICFkZWZpbmVkKEFQUExFX0xJT04pICYmICFkZWZpbmVkKEFQUExFX01PVU5UQUlOTElPTikKKwlT
Q1RQX0JBU0VfSU5GTyhzY3RiaW5mbykuaXBpX2djID0gc2N0cF9nYzsKKwlpbl9wY2JpbmZvX2F0
dGFjaCgmU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pKTsKKyNlbmRpZgorI2VuZGlmCisKKwkvKiBp
bml0IHRoZSBoYXNoIHRhYmxlIG9mIGVuZHBvaW50cyAqLworI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJVFVOQUJMRV9JTlRfRkVUQ0goIm5ldC5p
bmV0LnNjdHAudGNiaGFzaHNpemUiLCAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2hhc2h0YmxzaXpl
KSk7CisJVFVOQUJMRV9JTlRfRkVUQ0goIm5ldC5pbmV0LnNjdHAucGNiaGFzaHNpemUiLCAmU0NU
UF9CQVNFX1NZU0NUTChzY3RwX3BjYnRibHNpemUpKTsKKwlUVU5BQkxFX0lOVF9GRVRDSCgibmV0
LmluZXQuc2N0cC5jaHVua3NjYWxlIiwgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jaHVua3NjYWxl
KSk7CisjZW5kaWYKKwlTQ1RQX0JBU0VfSU5GTyhzY3RwX2Fzb2NoYXNoKSA9IFNDVFBfSEFTSF9J
TklUKChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaGFzaHRibHNpemUpICogMzEpLAorCQkJCQkJICAg
ICAgICZTQ1RQX0JBU0VfSU5GTyhoYXNoYXNvY21hcmspKTsKKwlTQ1RQX0JBU0VfSU5GTyhzY3Rw
X2VwaGFzaCkgPSBTQ1RQX0hBU0hfSU5JVChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaGFzaHRibHNp
emUpLAorCQkJCQkJICAgICAmU0NUUF9CQVNFX0lORk8oaGFzaG1hcmspKTsKKwlTQ1RQX0JBU0Vf
SU5GTyhzY3RwX3RjcGVwaGFzaCkgPSBTQ1RQX0hBU0hfSU5JVChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfaGFzaHRibHNpemUpLAorCQkJCQkJCSZTQ1RQX0JBU0VfSU5GTyhoYXNodGNwbWFyaykpOwor
CVNDVFBfQkFTRV9JTkZPKGhhc2h0YmxzaXplKSA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9oYXNo
dGJsc2l6ZSk7CisJU0NUUF9CQVNFX0lORk8oc2N0cF92cmZoYXNoKSA9IFNDVFBfSEFTSF9JTklU
KFNDVFBfU0laRV9PRl9WUkZfSEFTSCwKKwkJCQkJCSAgICAgICZTQ1RQX0JBU0VfSU5GTyhoYXNo
dnJmbWFyaykpOworCisJU0NUUF9CQVNFX0lORk8odnJmX2lmbl9oYXNoKSA9IFNDVFBfSEFTSF9J
TklUKFNDVFBfVlJGX0lGTl9IQVNIX1NJWkUsCisJCQkJCQkgICAgICAmU0NUUF9CQVNFX0lORk8o
dnJmX2lmbl9oYXNobWFyaykpOworCS8qIGluaXQgdGhlIHpvbmVzICovCisJLyoKKwkgKiBGSVgg
TUU6IFNob3VsZCBjaGVjayBmb3IgTlVMTCByZXR1cm5zLCBidXQgaWYgaXQgZG9lcyBmYWlsIHdl
IGFyZQorCSAqIGRvb21lZCB0byBwYW5pYyBhbnl3YXlzLi4uIGFkZCBsYXRlciBtYXliZS4KKwkg
Ki8KKwlTQ1RQX1pPTkVfSU5JVChTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9lcCksICJzY3RwX2Vw
IiwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbnBjYiksIG1heHNvY2tldHMpOworCisJ
U0NUUF9aT05FX0lOSVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfYXNvYyksICJzY3RwX2Fzb2Mi
LAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3RjYiksIHNjdHBfbWF4X251bWJlcl9vZl9h
c3NvYyk7CisKKwlTQ1RQX1pPTkVfSU5JVChTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9sYWRkciks
ICJzY3RwX2xhZGRyIiwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9sYWRkciksCisJCSAg
ICAgICAoc2N0cF9tYXhfbnVtYmVyX29mX2Fzc29jICogc2N0cF9zY2FsZV91cF9mb3JfYWRkcmVz
cykpOworCisJU0NUUF9aT05FX0lOSVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfbmV0KSwgInNj
dHBfcmFkZHIiLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX25ldHMpLAorCQkgICAgICAg
KHNjdHBfbWF4X251bWJlcl9vZl9hc3NvYyAqIHNjdHBfc2NhbGVfdXBfZm9yX2FkZHJlc3MpKTsK
KworCVNDVFBfWk9ORV9JTklUKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2NodW5rKSwgInNjdHBf
Y2h1bmsiLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3RtaXRfY2h1bmspLAorCQkgICAg
ICAgKHNjdHBfbWF4X251bWJlcl9vZl9hc3NvYyAqIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jaHVu
a3NjYWxlKSkpOworCisJU0NUUF9aT05FX0lOSVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfcmVh
ZHEpLCAic2N0cF9yZWFkcSIsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfcXVldWVkX3Rv
X3JlYWQpLAorCQkgICAgICAgKHNjdHBfbWF4X251bWJlcl9vZl9hc3NvYyAqIFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9jaHVua3NjYWxlKSkpOworCisJU0NUUF9aT05FX0lOSVQoU0NUUF9CQVNFX0lO
Rk8oaXBpX3pvbmVfc3RybW9xKSwgInNjdHBfc3RyZWFtX21zZ19vdXQiLAorCQkgICAgICAgc2l6
ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nKSwKKwkJICAgICAgIChzY3RwX21h
eF9udW1iZXJfb2ZfYXNzb2MgKiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY2h1bmtzY2FsZSkpKTsK
KworCVNDVFBfWk9ORV9JTklUKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2FzY29uZiksICJzY3Rw
X2FzY29uZiIsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mKSwKKwkJICAgICAg
IChzY3RwX21heF9udW1iZXJfb2ZfYXNzb2MgKiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY2h1bmtz
Y2FsZSkpKTsKKworCVNDVFBfWk9ORV9JTklUKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2FzY29u
Zl9hY2spLCAic2N0cF9hc2NvbmZfYWNrIiwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9h
c2NvbmZfYWNrKSwKKwkJICAgICAgIChzY3RwX21heF9udW1iZXJfb2ZfYXNzb2MgKiBTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfY2h1bmtzY2FsZSkpKTsKKworCS8qIE1hc3RlciBMb2NrIElOSVQgZm9y
IGluZm8gc3RydWN0dXJlICovCisJU0NUUF9JTlBfSU5GT19MT0NLX0lOSVQoKTsKKwlTQ1RQX1NU
QVRMT0dfSU5JVF9MT0NLKCk7CisKKwlTQ1RQX0lQSV9DT1VOVF9JTklUKCk7CisJU0NUUF9JUElf
QUREUl9JTklUKCk7CisjaWZkZWYgU0NUUF9QQUNLRVRfTE9HR0lORworCVNDVFBfSVBfUEtUTE9H
X0lOSVQoKTsKKyNlbmRpZgorCUxJU1RfSU5JVCgmU0NUUF9CQVNFX0lORk8oYWRkcl93cSkpOwor
CisJU0NUUF9XUV9BRERSX0lOSVQoKTsKKwkvKiBub3Qgc3VyZSBpZiB3ZSBuZWVkIGFsbCB0aGUg
Y291bnRzICovCisJU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X2VwKSA9IDA7CisJLyogYXNzb2Mv
dGNiIHpvbmUgaW5mbyAqLworCVNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9hc29jKSA9IDA7CisJ
LyogbG9jYWwgYWRkcmxpc3Qgem9uZSBpbmZvICovCisJU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50
X2xhZGRyKSA9IDA7CisJLyogcmVtb3RlIGFkZHJsaXN0IHpvbmUgaW5mbyAqLworCVNDVFBfQkFT
RV9JTkZPKGlwaV9jb3VudF9yYWRkcikgPSAwOworCS8qIGNodW5rIGluZm8gKi8KKwlTQ1RQX0JB
U0VfSU5GTyhpcGlfY291bnRfY2h1bmspID0gMDsKKworCS8qIHNvY2tldCBxdWV1ZSB6b25lIGlu
Zm8gKi8KKwlTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfcmVhZHEpID0gMDsKKworCS8qIHN0cmVh
bSBvdXQgcXVldWUgY29udCAqLworCVNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9zdHJtb3EpID0g
MDsKKworCVNDVFBfQkFTRV9JTkZPKGlwaV9mcmVlX3N0cm1vcSkgPSAwOworCVNDVFBfQkFTRV9J
TkZPKGlwaV9mcmVlX2NodW5rcykgPSAwOworCisJU0NUUF9PU19USU1FUl9JTklUKCZTQ1RQX0JB
U0VfSU5GTyhhZGRyX3dxX3RpbWVyLnRpbWVyKSk7CisKKwkvKiBJbml0IHRoZSBUSU1FV0FJVCBs
aXN0ICovCisJZm9yIChpID0gMDsgaSA8IFNDVFBfU1RBQ0tfVlRBR19IQVNIX1NJWkU7IGkrKykg
eworCQlMSVNUX0lOSVQoJlNDVFBfQkFTRV9JTkZPKHZ0YWdfdGltZXdhaXQpW2ldKTsKKwl9Cisj
aWYgZGVmaW5lZChTQ1RQX1BST0NFU1NfTEVWRUxfTE9DS1MpCisjaWYgZGVmaW5lZChfV0lOMzIp
CisJSW5pdGlhbGl6ZUNvbmRpdGlvblZhcmlhYmxlKCZzY3RwX2l0X2N0bC5pdGVyYXRvcl93YWtl
dXApOworI2Vsc2UKKwkodm9pZClwdGhyZWFkX2NvbmRfaW5pdCgmc2N0cF9pdF9jdGwuaXRlcmF0
b3Jfd2FrZXVwLCBOVUxMKTsKKyNlbmRpZgorI2VuZGlmCisJc2N0cF9zdGFydHVwX2l0ZXJhdG9y
KCk7CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorI2lmIGRlZmluZWQoU0NUUF9NQ09SRV9JTlBVVCkgJiYgZGVmaW5lZChTTVApCisJc2N0cF9z
dGFydHVwX21jb3JlX3RocmVhZHMoKTsKKyNlbmRpZgorI2VuZGlmCisKKwkvKgorCSAqIElOSVQg
dGhlIGRlZmF1bHQgVlJGIHdoaWNoIGZvciBCU0QgaXMgdGhlIG9ubHkgb25lLCBvdGhlciBPL1Mn
cworCSAqIG1heSBoYXZlIG1vcmUuIEJ1dCBpbml0aWFsbHkgdGhleSBtdXN0IHN0YXJ0IHdpdGgg
b25lIGFuZCB0aGVuCisJICogYWRkIHRoZSBWUkYncyBhcyBhZGRyZXNzZXMgYXJlIGFkZGVkLgor
CSAqLworCXNjdHBfaW5pdF92cmZfbGlzdChTQ1RQX0RFRkFVTFRfVlJGKTsKKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKSAmJiBkZWZpbmVkKFNDVFBf
Tk9UX1lFVCkKKwlpZiAoaXBfcmVnaXN0ZXJfZmxvd19oYW5kbGVyKHNjdHBfbmV0aXNyX2hkbHIs
IElQUFJPVE9fU0NUUCkpIHsKKwkJU0NUUF9QUklOVEYoIioqKlNDVFAtIEVycm9yIGNhbid0IHJl
Z2lzdGVyIG5ldGlzciBoYW5kbGVyKioqXG4iKTsKKwl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9T
Q1RQX05FRURTX0NBTExPVVRfKSB8fCBkZWZpbmVkKF9VU0VSX1NDVFBfTkVFRFNfQ0FMTE9VVF8p
CisJLyogYWxsb2NhdGUgdGhlIGxvY2sgZm9yIHRoZSBjYWxsb3V0L3RpbWVyIHF1ZXVlICovCisJ
U0NUUF9USU1FUlFfTE9DS19JTklUKCk7CisJVEFJTFFfSU5JVCgmU0NUUF9CQVNFX0lORk8oY2Fs
bHF1ZXVlKSk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJbWJ1Zl9pbml0
aWFsaXplKE5VTEwpOworICAgIC8vIFdlYktpdCBjaGFuZ2UsIHRoaXMgY29uZmxpY3RzIHdpdGgg
YXRvbWljX2luaXQKKwkvLyBhdG9taWNfaW5pdCgpOworI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVm
aW5lZChJTkVUNikKKwlpZiAoc3RhcnRfdGhyZWFkcykKKwkJcmVjdl90aHJlYWRfaW5pdCgpOwor
I2VuZGlmCisjZW5kaWYKK30KKworLyoKKyAqIEFzc3VtZXMgdGhhdCB0aGUgU0NUUF9CQVNFX0lO
Rk8oKSBsb2NrIGlzIE5PVCBoZWxkLgorICovCit2b2lkCitzY3RwX3BjYl9maW5pc2godm9pZCkK
K3sKKwlzdHJ1Y3Qgc2N0cF92cmZsaXN0ICp2cmZfYnVja2V0OworCXN0cnVjdCBzY3RwX3ZyZiAq
dnJmLCAqbnZyZjsKKwlzdHJ1Y3Qgc2N0cF9pZm4gKmlmbiwgKm5pZm47CisJc3RydWN0IHNjdHBf
aWZhICppZmEsICpuaWZhOworCXN0cnVjdCBzY3RwdnRhZ2hlYWQgKmNoYWluOworCXN0cnVjdCBz
Y3RwX3RhZ2Jsb2NrICp0d2FpdF9ibG9jaywgKnByZXZfdHdhaXRfYmxvY2s7CisJc3RydWN0IHNj
dHBfbGFkZHIgKndpLCAqbndpOworCWludCBpOworCXN0cnVjdCBzY3RwX2l0ZXJhdG9yICppdCwg
Km5pdDsKKworCWlmIChTQ1RQX0JBU0VfVkFSKHNjdHBfcGNiX2luaXRpYWxpemVkKSA9PSAwKSB7
CisJCVNDVFBfUFJJTlRGKCIlczogcmFjZSBjb25kaXRpb24gb24gdGVhcmRvd24uXG4iLCBfX2Z1
bmNfXyk7CisJCXJldHVybjsKKwl9CisJU0NUUF9CQVNFX1ZBUihzY3RwX3BjYl9pbml0aWFsaXpl
ZCkgPSAwOworI2lmICEoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykpCisJLyogTm90aWZ5IHRoZSBpdGVyYXRvciB0byBleGl0LiAqLworCVNDVFBfSVBJX0lU
RVJBVE9SX1dRX0xPQ0soKTsKKwlzY3RwX2l0X2N0bC5pdGVyYXRvcl9mbGFncyB8PSBTQ1RQX0lU
RVJBVE9SX01VU1RfRVhJVDsKKwlzY3RwX3dha2V1cF9pdGVyYXRvcigpOworCVNDVFBfSVBJX0lU
RVJBVE9SX1dRX1VOTE9DSygpOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYgIWRlZmluZWQoQVBQTEVfTEVPUEFSRCkgJiYgIWRl
ZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpICYmICFkZWZpbmVkKEFQUExFX0xJT04pICYmICFkZWZp
bmVkKEFQUExFX01PVU5UQUlOTElPTikKKwlpbl9wY2JpbmZvX2RldGFjaCgmU0NUUF9CQVNFX0lO
Rk8oc2N0YmluZm8pKTsKKyNlbmRpZgorCVNDVFBfSVBJX0lURVJBVE9SX1dRX0xPQ0soKTsKKwlk
byB7CisJCW1zbGVlcCgmc2N0cF9pdF9jdGwuaXRlcmF0b3JfZmxhZ3MsCisJCSAgICAgICBzY3Rw
X2l0X2N0bC5pcGlfaXRlcmF0b3Jfd3FfbXR4LAorCQkgICAgICAgMCwgIndhaXRpbmdfZm9yX3dv
cmsiLCAwKTsKKwl9IHdoaWxlICgoc2N0cF9pdF9jdGwuaXRlcmF0b3JfZmxhZ3MgJiBTQ1RQX0lU
RVJBVE9SX0VYSVRFRCkgPT0gMCk7CisJdGhyZWFkX2RlYWxsb2NhdGUoc2N0cF9pdF9jdGwudGhy
ZWFkX3Byb2MpOworCVNDVFBfSVBJX0lURVJBVE9SX1dRX1VOTE9DSygpOworI2VuZGlmCisjaWYg
ZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaWYgKHNjdHBfaXRf
Y3RsLml0ZXJhdG9yX3RocmVhZF9vYmogIT0gTlVMTCkgeworCQlOVFNUQVRVUyBzdGF0dXMgPSBT
VEFUVVNfU1VDQ0VTUzsKKworCQlLZVNldEV2ZW50KCZzY3RwX2l0X2N0bC5pdGVyYXRvcl93YWtl
dXBbMV0sIElPX05PX0lOQ1JFTUVOVCwgRkFMU0UpOworCQlzdGF0dXMgPSBLZVdhaXRGb3JTaW5n
bGVPYmplY3Qoc2N0cF9pdF9jdGwuaXRlcmF0b3JfdGhyZWFkX29iaiwKKwkJCQkJICAgICAgIEV4
ZWN1dGl2ZSwKKwkJCQkJICAgICAgIEtlcm5lbE1vZGUsCisJCQkJCSAgICAgICBGQUxTRSwKKwkJ
CQkJICAgICAgIE5VTEwpOworCQlPYkRlcmVmZXJlbmNlT2JqZWN0KHNjdHBfaXRfY3RsLml0ZXJh
dG9yX3RocmVhZF9vYmopOworCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KwlpZiAoU0NUUF9CQVNFX1ZBUihpdGVyYXRvcl90aHJlYWRfc3RhcnRlZCkpIHsKKyNpZiBkZWZp
bmVkKF9XSU4zMikKKwkJV2FpdEZvclNpbmdsZU9iamVjdChzY3RwX2l0X2N0bC50aHJlYWRfcHJv
YywgSU5GSU5JVEUpOworCQlDbG9zZUhhbmRsZShzY3RwX2l0X2N0bC50aHJlYWRfcHJvYyk7CisJ
CXNjdHBfaXRfY3RsLnRocmVhZF9wcm9jID0gTlVMTDsKKyNlbHNlCisJCXB0aHJlYWRfam9pbihz
Y3RwX2l0X2N0bC50aHJlYWRfcHJvYywgTlVMTCk7CisJCXNjdHBfaXRfY3RsLnRocmVhZF9wcm9j
ID0gMDsKKyNlbmRpZgorCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoU0NUUF9QUk9DRVNTX0xFVkVM
X0xPQ0tTKQorI2lmIGRlZmluZWQoX1dJTjMyKQorCURlbGV0ZUNvbmRpdGlvblZhcmlhYmxlKCZz
Y3RwX2l0X2N0bC5pdGVyYXRvcl93YWtldXApOworI2Vsc2UKKwlwdGhyZWFkX2NvbmRfZGVzdHJv
eSgmc2N0cF9pdF9jdGwuaXRlcmF0b3Jfd2FrZXVwKTsKKwlwdGhyZWFkX211dGV4YXR0cl9kZXN0
cm95KCZTQ1RQX0JBU0VfVkFSKG10eF9hdHRyKSk7CisjZW5kaWYKKyNlbmRpZgorCS8qIEluIEZy
ZWVCU0QgdGhlIGl0ZXJhdG9yIHRocmVhZCBuZXZlciBleGl0cworCSAqIGJ1dCB3ZSBkbyBjbGVh
biB1cC4KKwkgKiBUaGUgb25seSB3YXkgRnJlZUJTRCByZWFjaGVzIGhlcmUgaXMgaWYgd2UgaGF2
ZSBWUkYncworCSAqIGJ1dCB3ZSBzdGlsbCBhZGQgdGhlIGlmZGVmIHRvIG1ha2UgaXQgY29tcGls
ZSBvbiBvbGQgdmVyc2lvbnMuCisJICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKK3JldHJ5OgorI2VuZGlmCisJU0NUUF9JUElfSVRFUkFUT1Jf
V1FfTE9DSygpOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisJLyoKKwkgKiBzY3RwX2l0ZXJhdG9yX3dvcmtlcigpIG1pZ2h0IGJlIHdvcmtpbmcg
b24gYW4gaXQgZW50cnkgd2l0aG91dAorCSAqIGhvbGRpbmcgdGhlIGxvY2suICBXZSB3b24ndCBm
aW5kIGl0IG9uIHRoZSBsaXN0IGVpdGhlciBhbmQKKwkgKiBjb250aW51ZSBhbmQgZnJlZS9kZXN0
cm95IGl0LiAgV2hpbGUgaG9sZGluZyB0aGUgbG9jaywgc3BpbiwgdG8KKwkgKiBhdm9pZCB0aGUg
cmFjZSBjb25kaXRpb24gYXMgc2N0cF9pdGVyYXRvcl93b3JrZXIoKSB3aWxsIGhhdmUgdG8KKwkg
KiB3YWl0IHRvIHJlLWFjcXVpcmUgdGhlIGxvY2suCisJICovCisJaWYgKHNjdHBfaXRfY3RsLml0
ZXJhdG9yX3J1bm5pbmcgIT0gMCB8fCBzY3RwX2l0X2N0bC5jdXJfaXQgIT0gTlVMTCkgeworCQlT
Q1RQX0lQSV9JVEVSQVRPUl9XUV9VTkxPQ0soKTsKKwkJU0NUUF9QUklOVEYoIiVzOiBJdGVyYXRv
ciBydW5uaW5nIHdoaWxlIHdlIGhlbGQgdGhlIGxvY2suIFJldHJ5LiAiCisJCSAgICAgICAgICAg
ICJjdXJfaXQ9JXBcbiIsIF9fZnVuY19fLCBzY3RwX2l0X2N0bC5jdXJfaXQpOworCQlERUxBWSgx
MCk7CisJCWdvdG8gcmV0cnk7CisJfQorI2VuZGlmCisJVEFJTFFfRk9SRUFDSF9TQUZFKGl0LCAm
c2N0cF9pdF9jdGwuaXRlcmF0b3JoZWFkLCBzY3RwX254dF9pdHIsIG5pdCkgeworI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWlmIChpdC0+dm4g
IT0gY3Vydm5ldCkgeworCQkJY29udGludWU7CisJCX0KKyNlbmRpZgorCQlUQUlMUV9SRU1PVkUo
JnNjdHBfaXRfY3RsLml0ZXJhdG9yaGVhZCwgaXQsIHNjdHBfbnh0X2l0cik7CisJCWlmIChpdC0+
ZnVuY3Rpb25fYXRlbmQgIT0gTlVMTCkgeworCQkJKCppdC0+ZnVuY3Rpb25fYXRlbmQpIChpdC0+
cG9pbnRlciwgaXQtPnZhbCk7CisJCX0KKwkJU0NUUF9GUkVFKGl0LFNDVFBfTV9JVEVSKTsKKwl9
CisJU0NUUF9JUElfSVRFUkFUT1JfV1FfVU5MT0NLKCk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlTQ1RQX0lURVJBVE9SX0xPQ0soKTsKKwlp
ZiAoKHNjdHBfaXRfY3RsLmN1cl9pdCkgJiYKKwkgICAgKHNjdHBfaXRfY3RsLmN1cl9pdC0+dm4g
PT0gY3Vydm5ldCkpIHsKKwkJc2N0cF9pdF9jdGwuaXRlcmF0b3JfZmxhZ3MgfD0gU0NUUF9JVEVS
QVRPUl9TVE9QX0NVUl9JVDsKKwl9CisJU0NUUF9JVEVSQVRPUl9VTkxPQ0soKTsKKyNlbmRpZgor
I2lmICEoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykpCisJ
U0NUUF9JUElfSVRFUkFUT1JfV1FfREVTVFJPWSgpOworCVNDVFBfSVRFUkFUT1JfTE9DS19ERVNU
Uk9ZKCk7CisjZW5kaWYKKwlTQ1RQX09TX1RJTUVSX1NUT1BfRFJBSU4oJlNDVFBfQkFTRV9JTkZP
KGFkZHJfd3FfdGltZXIudGltZXIpKTsKKwlTQ1RQX1dRX0FERFJfTE9DSygpOworCUxJU1RfRk9S
RUFDSF9TQUZFKHdpLCAmU0NUUF9CQVNFX0lORk8oYWRkcl93cSksIHNjdHBfbnh0X2FkZHIsIG53
aSkgeworCQlMSVNUX1JFTU9WRSh3aSwgc2N0cF9ueHRfYWRkcik7CisJCVNDVFBfREVDUl9MQURE
Ul9DT1VOVCgpOworCQlpZiAod2ktPmFjdGlvbiA9PSBTQ1RQX0RFTF9JUF9BRERSRVNTKSB7CisJ
CQlTQ1RQX0ZSRUUod2ktPmlmYSwgU0NUUF9NX0lGQSk7CisJCX0KKwkJU0NUUF9aT05FX0ZSRUUo
U0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfbGFkZHIpLCB3aSk7CisJfQorCVNDVFBfV1FfQUREUl9V
TkxPQ0soKTsKKworCS8qCisJICogZnJlZSB0aGUgdnJmL2lmbi9pZmEgbGlzdHMgYW5kIGhhc2hl
cyAoYmUgc3VyZSBhZGRyZXNzIG1vbml0b3IKKwkgKiBpcyBkZXN0cm95ZWQgZmlyc3QpLgorCSAq
LworCVNDVFBfSVBJX0FERFJfV0xPQ0soKTsKKwl2cmZfYnVja2V0ID0gJlNDVFBfQkFTRV9JTkZP
KHNjdHBfdnJmaGFzaClbKFNDVFBfREVGQVVMVF9WUkZJRCAmIFNDVFBfQkFTRV9JTkZPKGhhc2h2
cmZtYXJrKSldOworCUxJU1RfRk9SRUFDSF9TQUZFKHZyZiwgdnJmX2J1Y2tldCwgbmV4dF92cmYs
IG52cmYpIHsKKwkJTElTVF9GT1JFQUNIX1NBRkUoaWZuLCAmdnJmLT5pZm5saXN0LCBuZXh0X2lm
biwgbmlmbikgeworCQkJTElTVF9GT1JFQUNIX1NBRkUoaWZhLCAmaWZuLT5pZmFsaXN0LCBuZXh0
X2lmYSwgbmlmYSkgeworCQkJCS8qIGZyZWUgdGhlIGlmYSAqLworCQkJCUxJU1RfUkVNT1ZFKGlm
YSwgbmV4dF9idWNrZXQpOworCQkJCUxJU1RfUkVNT1ZFKGlmYSwgbmV4dF9pZmEpOworCQkJCVND
VFBfRlJFRShpZmEsIFNDVFBfTV9JRkEpOworCQkJfQorCQkJLyogZnJlZSB0aGUgaWZuICovCisJ
CQlMSVNUX1JFTU9WRShpZm4sIG5leHRfYnVja2V0KTsKKwkJCUxJU1RfUkVNT1ZFKGlmbiwgbmV4
dF9pZm4pOworCQkJU0NUUF9GUkVFKGlmbiwgU0NUUF9NX0lGTik7CisJCX0KKwkJU0NUUF9IQVNI
X0ZSRUUodnJmLT52cmZfYWRkcl9oYXNoLCB2cmYtPnZyZl9hZGRyX2hhc2htYXJrKTsKKwkJLyog
ZnJlZSB0aGUgdnJmICovCisJCUxJU1RfUkVNT1ZFKHZyZiwgbmV4dF92cmYpOworCQlTQ1RQX0ZS
RUUodnJmLCBTQ1RQX01fVlJGKTsKKwl9CisJU0NUUF9JUElfQUREUl9XVU5MT0NLKCk7CisJLyog
ZnJlZSB0aGUgdnJmIGhhc2hlcyAqLworCVNDVFBfSEFTSF9GUkVFKFNDVFBfQkFTRV9JTkZPKHNj
dHBfdnJmaGFzaCksIFNDVFBfQkFTRV9JTkZPKGhhc2h2cmZtYXJrKSk7CisJU0NUUF9IQVNIX0ZS
RUUoU0NUUF9CQVNFX0lORk8odnJmX2lmbl9oYXNoKSwgU0NUUF9CQVNFX0lORk8odnJmX2lmbl9o
YXNobWFyaykpOworCisJLyogZnJlZSB0aGUgVElNRVdBSVQgbGlzdCBlbGVtZW50cyBtYWxsb2Mn
ZCBpbiB0aGUgZnVuY3Rpb24KKwkgKiBzY3RwX2FkZF92dGFnX3RvX3RpbWV3YWl0KCkuLi4KKwkg
Ki8KKwlmb3IgKGkgPSAwOyBpIDwgU0NUUF9TVEFDS19WVEFHX0hBU0hfU0laRTsgaSsrKSB7CisJ
CWNoYWluID0gJlNDVFBfQkFTRV9JTkZPKHZ0YWdfdGltZXdhaXQpW2ldOworCQlpZiAoIUxJU1Rf
RU1QVFkoY2hhaW4pKSB7CisJCQlwcmV2X3R3YWl0X2Jsb2NrID0gTlVMTDsKKwkJCUxJU1RfRk9S
RUFDSCh0d2FpdF9ibG9jaywgY2hhaW4sIHNjdHBfbnh0X3RhZ2Jsb2NrKSB7CisJCQkJaWYgKHBy
ZXZfdHdhaXRfYmxvY2spIHsKKwkJCQkJU0NUUF9GUkVFKHByZXZfdHdhaXRfYmxvY2ssIFNDVFBf
TV9USU1XKTsKKwkJCQl9CisJCQkJcHJldl90d2FpdF9ibG9jayA9IHR3YWl0X2Jsb2NrOworCQkJ
fQorCQkJU0NUUF9GUkVFKHByZXZfdHdhaXRfYmxvY2ssIFNDVFBfTV9USU1XKTsKKwkJfQorCX0K
KworCS8qIGZyZWUgdGhlIGxvY2tzIGFuZCBtdXRleGVzICovCisjaWYgZGVmaW5lZChfX0FQUExF
X18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJU0NUUF9USU1FUlFfTE9DS19ERVNUUk9Z
KCk7CisjZW5kaWYKKyNpZmRlZiBTQ1RQX1BBQ0tFVF9MT0dHSU5HCisJU0NUUF9JUF9QS1RMT0df
REVTVFJPWSgpOworI2VuZGlmCisJU0NUUF9JUElfQUREUl9ERVNUUk9ZKCk7CisjaWYgZGVmaW5l
ZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJU0NUUF9JUElfQ09VTlRf
REVTVFJPWSgpOworI2VuZGlmCisJU0NUUF9TVEFUTE9HX0RFU1RST1koKTsKKwlTQ1RQX0lOUF9J
TkZPX0xPQ0tfREVTVFJPWSgpOworCisJU0NUUF9XUV9BRERSX0RFU1RST1koKTsKKworI2lmIGRl
ZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRlZmluZWQo
QVBQTEVfTEVPUEFSRCkgfHwgZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkgfHwgZGVmaW5lZChB
UFBMRV9MSU9OKSB8fCBkZWZpbmVkKEFQUExFX01PVU5UQUlOTElPTikKKwlsY2tfZ3JwX2F0dHJf
ZnJlZShTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykubXR4X2dycF9hdHRyKTsKKwlsY2tfZ3JwX2Zy
ZWUoU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLm10eF9ncnApOworCWxja19hdHRyX2ZyZWUoU0NU
UF9CQVNFX0lORk8oc2N0YmluZm8pLm10eF9hdHRyKTsKKyNlbHNlCisJbGNrX2dycF9hdHRyX2Zy
ZWUoU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLmlwaV9sb2NrX2dycF9hdHRyKTsKKwlsY2tfZ3Jw
X2ZyZWUoU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLmlwaV9sb2NrX2dycCk7CisJbGNrX2F0dHJf
ZnJlZShTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykuaXBpX2xvY2tfYXR0cik7CisjZW5kaWYKKyNl
bmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlTQ1RQX1RJTUVSUV9MT0NLX0RFU1RS
T1koKTsKKwlTQ1RQX1pPTkVfREVTVFJPWSh6b25lX21idWYpOworCVNDVFBfWk9ORV9ERVNUUk9Z
KHpvbmVfY2x1c3QpOworCVNDVFBfWk9ORV9ERVNUUk9ZKHpvbmVfZXh0X3JlZmNudCk7CisjZW5k
aWYKKwkvKiBHZXQgcmlkIG9mIG90aGVyIHN0dWZmIHRvby4gKi8KKwlpZiAoU0NUUF9CQVNFX0lO
Rk8oc2N0cF9hc29jaGFzaCkgIT0gTlVMTCkKKwkJU0NUUF9IQVNIX0ZSRUUoU0NUUF9CQVNFX0lO
Rk8oc2N0cF9hc29jaGFzaCksIFNDVFBfQkFTRV9JTkZPKGhhc2hhc29jbWFyaykpOworCWlmIChT
Q1RQX0JBU0VfSU5GTyhzY3RwX2VwaGFzaCkgIT0gTlVMTCkKKwkJU0NUUF9IQVNIX0ZSRUUoU0NU
UF9CQVNFX0lORk8oc2N0cF9lcGhhc2gpLCBTQ1RQX0JBU0VfSU5GTyhoYXNobWFyaykpOworCWlm
IChTQ1RQX0JBU0VfSU5GTyhzY3RwX3RjcGVwaGFzaCkgIT0gTlVMTCkKKwkJU0NUUF9IQVNIX0ZS
RUUoU0NUUF9CQVNFX0lORk8oc2N0cF90Y3BlcGhhc2gpLCBTQ1RQX0JBU0VfSU5GTyhoYXNodGNw
bWFyaykpOworCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19GcmVlQlNEX18pIHx8
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlTQ1RQX1pPTkVfREVTVFJPWShTQ1RQX0JBU0VfSU5G
TyhpcGlfem9uZV9lcCkpOworCVNDVFBfWk9ORV9ERVNUUk9ZKFNDVFBfQkFTRV9JTkZPKGlwaV96
b25lX2Fzb2MpKTsKKwlTQ1RQX1pPTkVfREVTVFJPWShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9s
YWRkcikpOworCVNDVFBfWk9ORV9ERVNUUk9ZKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX25ldCkp
OworCVNDVFBfWk9ORV9ERVNUUk9ZKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2NodW5rKSk7CisJ
U0NUUF9aT05FX0RFU1RST1koU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfcmVhZHEpKTsKKwlTQ1RQ
X1pPTkVfREVTVFJPWShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9zdHJtb3EpKTsKKwlTQ1RQX1pP
TkVfREVTVFJPWShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9hc2NvbmYpKTsKKwlTQ1RQX1pPTkVf
REVTVFJPWShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9hc2NvbmZfYWNrKSk7CisjZW5kaWYKKyNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRl
ZmluZWQoU01QKSAmJiBkZWZpbmVkKFNDVFBfVVNFX1BFUkNQVV9TVEFUKQorCVNDVFBfRlJFRShT
Q1RQX0JBU0VfU1RBVFMsIFNDVFBfTV9NQ09SRSk7CisjZW5kaWYKKyNlbmRpZgorfQorCitpbnQK
K3NjdHBfbG9hZF9hZGRyZXNzZXNfZnJvbV9pbml0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3Ry
dWN0IG1idWYgKm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0LCBp
bnQgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIg
KnNyYywgc3RydWN0IHNvY2thZGRyICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3Qgc29ja2FkZHIgKmFsdHNhLCB1aW50MTZfdCBwb3J0KQoreworCS8qCisJICogZ3J1
YiB0aHJvdWdoIHRoZSBJTklUIHB1bGxpbmcgYWRkcmVzc2VzIGFuZCBsb2FkaW5nIHRoZW0gdG8g
dGhlCisJICogbmV0cyBzdHJ1Y3R1cmUgaW4gdGhlIGFzb2MuIFRoZSBmcm9tIGFkZHJlc3MgaW4g
dGhlIG1idWYgc2hvdWxkCisJICogYWxzbyBiZSBsb2FkZWQgKGlmIGl0IGlzIG5vdCBhbHJlYWR5
KS4gVGhpcyByb3V0aW5lIGNhbiBiZSBjYWxsZWQKKwkgKiB3aXRoIGVpdGhlciBJTklUIG9yIElO
SVQtQUNLJ3MgYXMgbG9uZyBhcyB0aGUgbSBwb2ludHMgdG8gdGhlIElQCisJICogcGFja2V0IGFu
ZCB0aGUgb2Zmc2V0IHBvaW50cyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXJhbWV0ZXJzLgor
CSAqLworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0LCAq
bm5ldCwgKm5ldF90bXA7CisJc3RydWN0IHNjdHBfcGFyYW1oZHIgKnBoZHIsIHBhcmFtX2J1ZjsK
KwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2JfdG1wOworCXVpbnQxNl90IHB0eXBlLCBwbGVuOworCXN0
cnVjdCBzb2NrYWRkciAqc2E7CisJdWludDhfdCByYW5kb21fc3RvcmVbU0NUUF9QQVJBTV9CVUZG
RVJfU0laRV07CisJc3RydWN0IHNjdHBfYXV0aF9yYW5kb20gKnBfcmFuZG9tID0gTlVMTDsKKwl1
aW50MTZfdCByYW5kb21fbGVuID0gMDsKKwl1aW50OF90IGhtYWNzX3N0b3JlW1NDVFBfUEFSQU1f
QlVGRkVSX1NJWkVdOworCXN0cnVjdCBzY3RwX2F1dGhfaG1hY19hbGdvICpobWFjcyA9IE5VTEw7
CisJdWludDE2X3QgaG1hY3NfbGVuID0gMDsKKwl1aW50OF90IHNhd19hc2NvbmYgPSAwOworCXVp
bnQ4X3Qgc2F3X2FzY29uZl9hY2sgPSAwOworCXVpbnQ4X3QgY2h1bmtzX3N0b3JlW1NDVFBfUEFS
QU1fQlVGRkVSX1NJWkVdOworCXN0cnVjdCBzY3RwX2F1dGhfY2h1bmtfbGlzdCAqY2h1bmtzID0g
TlVMTDsKKwl1aW50MTZfdCBudW1fY2h1bmtzID0gMDsKKwlzY3RwX2tleV90ICpuZXdfa2V5Owor
CXVpbnQzMl90IGtleWxlbjsKKwlpbnQgZ290X3JhbmRvbSA9IDAsIGdvdF9obWFjcyA9IDAsIGdv
dF9jaGtsaXN0ID0gMDsKKwl1aW50OF90IHBlZXJfc3VwcG9ydHNfZWNuOworCXVpbnQ4X3QgcGVl
cl9zdXBwb3J0c19wcnNjdHA7CisJdWludDhfdCBwZWVyX3N1cHBvcnRzX2F1dGg7CisJdWludDhf
dCBwZWVyX3N1cHBvcnRzX2FzY29uZjsKKwl1aW50OF90IHBlZXJfc3VwcG9ydHNfYXNjb25mX2Fj
azsKKwl1aW50OF90IHBlZXJfc3VwcG9ydHNfcmVjb25maWc7CisJdWludDhfdCBwZWVyX3N1cHBv
cnRzX25yc2FjazsKKwl1aW50OF90IHBlZXJfc3VwcG9ydHNfcGt0ZHJvcDsKKwl1aW50OF90IHBl
ZXJfc3VwcG9ydHNfaWRhdGE7CisjaWZkZWYgSU5FVAorCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47
CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNjsKKyNlbmRp
ZgorCisJLyogRmlyc3QgZ2V0IHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIHNldHVwIHRvby4gKi8K
KyNpZmRlZiBJTkVUCisJbWVtc2V0KCZzaW4sIDAsIHNpemVvZihzaW4pKTsKKwlzaW4uc2luX2Zh
bWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJc2luLnNpbl9sZW4gPSBzaXpl
b2Yoc2luKTsKKyNlbmRpZgorCXNpbi5zaW5fcG9ydCA9IHN0Y2ItPnJwb3J0OworI2VuZGlmCisj
aWZkZWYgSU5FVDYKKwltZW1zZXQoJnNpbjYsIDAsIHNpemVvZihzaW42KSk7CisJc2luNi5zaW42
X2ZhbWlseSA9IEFGX0lORVQ2OworI2lmZGVmIEhBVkVfU0lONl9MRU4KKwlzaW42LnNpbjZfbGVu
ID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisJc2luNi5zaW42X3BvcnQg
PSBzdGNiLT5ycG9ydDsKKyNlbmRpZgorCWlmIChhbHRzYSkgeworCQlzYSA9IGFsdHNhOworCX0g
ZWxzZSB7CisJCXNhID0gc3JjOworCX0KKwlwZWVyX3N1cHBvcnRzX2lkYXRhID0gMDsKKwlwZWVy
X3N1cHBvcnRzX2VjbiA9IDA7CisJcGVlcl9zdXBwb3J0c19wcnNjdHAgPSAwOworCXBlZXJfc3Vw
cG9ydHNfYXV0aCA9IDA7CisJcGVlcl9zdXBwb3J0c19hc2NvbmYgPSAwOworCXBlZXJfc3VwcG9y
dHNfYXNjb25mX2FjayA9IDA7CisJcGVlcl9zdXBwb3J0c19yZWNvbmZpZyA9IDA7CisJcGVlcl9z
dXBwb3J0c19ucnNhY2sgPSAwOworCXBlZXJfc3VwcG9ydHNfcGt0ZHJvcCA9IDA7CisJVEFJTFFf
Rk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQkvKiBtYXJrIGFs
bCBhZGRyZXNzZXMgdGhhdCB3ZSBoYXZlIGN1cnJlbnRseSBvbiB0aGUgbGlzdCAqLworCQluZXQt
PmRlc3Rfc3RhdGUgfD0gU0NUUF9BRERSX05PVF9JTl9BU1NPQzsKKwl9CisJLyogZG9lcyB0aGUg
c291cmNlIGFkZHJlc3MgYWxyZWFkeSBleGlzdD8gaWYgc28gc2tpcCBpdCAqLworCWlucCA9IHN0
Y2ItPnNjdHBfZXA7CisJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwlz
dGNiX3RtcCA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoJmlucCwgc2EsICZuZXRfdG1w
LCBkc3QsIHN0Y2IpOworCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgLTEpOwor
CisJaWYgKChzdGNiX3RtcCA9PSBOVUxMICYmIGlucCA9PSBzdGNiLT5zY3RwX2VwKSB8fCBpbnAg
PT0gTlVMTCkgeworCQkvKiB3ZSBtdXN0IGFkZCB0aGUgc291cmNlIGFkZHJlc3MgKi8KKwkJLyog
bm8gc2NvcGUgc2V0IGhlcmUgc2luY2Ugd2UgaGF2ZSBhIHRjYiBhbHJlYWR5LiAqLworCQlzd2l0
Y2ggKHNhLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCWNhc2UgQUZfSU5FVDoKKwkJCWlm
IChzdGNiLT5hc29jLnNjb3BlLmlwdjRfYWRkcl9sZWdhbCkgeworCQkJCWlmIChzY3RwX2FkZF9y
ZW1vdGVfYWRkcihzdGNiLCBzYSwgTlVMTCwgcG9ydCwgU0NUUF9ET05PVF9TRVRTQ09QRSwgU0NU
UF9MT0FEX0FERFJfMikpIHsKKwkJCQkJcmV0dXJuICgtMSk7CisJCQkJfQorCQkJfQorCQkJYnJl
YWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQljYXNlIEFGX0lORVQ2OgorCQkJaWYgKHN0Y2It
PmFzb2Muc2NvcGUuaXB2Nl9hZGRyX2xlZ2FsKSB7CisJCQkJaWYgKHNjdHBfYWRkX3JlbW90ZV9h
ZGRyKHN0Y2IsIHNhLCBOVUxMLCBwb3J0LCBTQ1RQX0RPTk9UX1NFVFNDT1BFLCBTQ1RQX0xPQURf
QUREUl8zKSkgeworCQkJCQlyZXR1cm4gKC0yKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKyNl
bmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJY2FzZSBBRl9DT05OOgorCQkJaWYg
KHN0Y2ItPmFzb2Muc2NvcGUuY29ubl9hZGRyX2xlZ2FsKSB7CisJCQkJaWYgKHNjdHBfYWRkX3Jl
bW90ZV9hZGRyKHN0Y2IsIHNhLCBOVUxMLCBwb3J0LCBTQ1RQX0RPTk9UX1NFVFNDT1BFLCBTQ1RQ
X0xPQURfQUREUl8zKSkgeworCQkJCQlyZXR1cm4gKC0yKTsKKwkJCQl9CisJCQl9CisJCQlicmVh
azsKKyNlbmRpZgorCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlpZiAo
bmV0X3RtcCAhPSBOVUxMICYmIHN0Y2JfdG1wID09IHN0Y2IpIHsKKwkJCW5ldF90bXAtPmRlc3Rf
c3RhdGUgJj0gflNDVFBfQUREUl9OT1RfSU5fQVNTT0M7CisJCX0gZWxzZSBpZiAoc3RjYl90bXAg
IT0gc3RjYikgeworCQkJLyogSXQgYmVsb25ncyB0byBhbm90aGVyIGFzc29jaWF0aW9uPyAqLwor
CQkJaWYgKHN0Y2JfdG1wKQorCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiX3RtcCk7CisJCQlyZXR1
cm4gKC0zKTsKKwkJfQorCX0KKwlpZiAoc3RjYi0+YXNvYy5zdGF0ZSA9PSAwKSB7CisJCS8qIHRo
ZSBhc3NvYyB3YXMgZnJlZWQ/ICovCisJCXJldHVybiAoLTQpOworCX0KKwkvKiBub3cgd2UgbXVz
dCBnbyB0aHJvdWdoIGVhY2ggb2YgdGhlIHBhcmFtcy4gKi8KKwlwaGRyID0gc2N0cF9nZXRfbmV4
dF9wYXJhbShtLCBvZmZzZXQsICZwYXJhbV9idWYsIHNpemVvZihwYXJhbV9idWYpKTsKKwl3aGls
ZSAocGhkcikgeworCQlwdHlwZSA9IG50b2hzKHBoZHItPnBhcmFtX3R5cGUpOworCQlwbGVuID0g
bnRvaHMocGhkci0+cGFyYW1fbGVuZ3RoKTsKKwkJLyoKKwkJICogU0NUUF9QUklOVEYoInB0eXBl
ID0+ICUweCwgcGxlbiA9PiAlZFxuIiwgKHVpbnQzMl90KXB0eXBlLAorCQkgKiAoaW50KXBsZW4p
OworCQkgKi8KKwkJaWYgKG9mZnNldCArIHBsZW4gPiBsaW1pdCkgeworCQkJYnJlYWs7CisJCX0K
KwkJaWYgKHBsZW4gPCBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSB7CisJCQlicmVhazsK
KwkJfQorI2lmZGVmIElORVQKKwkJaWYgKHB0eXBlID09IFNDVFBfSVBWNF9BRERSRVNTKSB7CisJ
CQlpZiAoc3RjYi0+YXNvYy5zY29wZS5pcHY0X2FkZHJfbGVnYWwpIHsKKwkJCQlzdHJ1Y3Qgc2N0
cF9pcHY0YWRkcl9wYXJhbSAqcDQsIHA0X2J1ZjsKKworCQkJCS8qIG9rIGdldCB0aGUgdjQgYWRk
cmVzcyBhbmQgY2hlY2svYWRkICovCisJCQkJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obSwg
b2Zmc2V0LAorCQkJCQkJCSAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKSZwNF9idWYsCisJCQkJ
CQkJICAgc2l6ZW9mKHA0X2J1ZikpOworCQkJCWlmIChwbGVuICE9IHNpemVvZihzdHJ1Y3Qgc2N0
cF9pcHY0YWRkcl9wYXJhbSkgfHwKKwkJCQkgICAgcGhkciA9PSBOVUxMKSB7CisJCQkJCXJldHVy
biAoLTUpOworCQkJCX0KKwkJCQlwNCA9IChzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAqKXBo
ZHI7CisJCQkJc2luLnNpbl9hZGRyLnNfYWRkciA9IHA0LT5hZGRyOworCQkJCWlmIChJTl9NVUxU
SUNBU1QobnRvaGwoc2luLnNpbl9hZGRyLnNfYWRkcikpKSB7CisJCQkJCS8qIFNraXAgbXVsdGkt
Y2FzdCBhZGRyZXNzZXMgKi8KKwkJCQkJZ290byBuZXh0X3BhcmFtOworCQkJCX0KKwkJCQlpZiAo
KHNpbi5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0JST0FEQ0FTVCkgfHwKKwkJCQkgICAgKHNp
bi5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSkpIHsKKwkJCQkJZ290byBuZXh0X3BhcmFt
OworCQkJCX0KKwkJCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luOworCQkJCWlucCA9IHN0
Y2ItPnNjdHBfZXA7CisJCQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsK
KwkJCQlzdGNiX3RtcCA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoJmlucCwgc2EsICZu
ZXQsCisJCQkJCQkJCQlkc3QsIHN0Y2IpOworCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29j
LnJlZmNudCwgLTEpOworCisJCQkJaWYgKChzdGNiX3RtcCA9PSBOVUxMICYmIGlucCA9PSBzdGNi
LT5zY3RwX2VwKSB8fAorCQkJCSAgICBpbnAgPT0gTlVMTCkgeworCQkJCQkvKiB3ZSBtdXN0IGFk
ZCB0aGUgc291cmNlIGFkZHJlc3MgKi8KKwkJCQkJLyoKKwkJCQkJICogbm8gc2NvcGUgc2V0IHNp
bmNlIHdlIGhhdmUgYSB0Y2IKKwkJCQkJICogYWxyZWFkeQorCQkJCQkgKi8KKworCQkJCQkvKgor
CQkJCQkgKiB3ZSBtdXN0IHZhbGlkYXRlIHRoZSBzdGF0ZSBhZ2FpbgorCQkJCQkgKiBoZXJlCisJ
CQkJCSAqLworCQkJCWFkZF9pdF9ub3c6CisJCQkJCWlmIChzdGNiLT5hc29jLnN0YXRlID09IDAp
IHsKKwkJCQkJCS8qIHRoZSBhc3NvYyB3YXMgZnJlZWQ/ICovCisJCQkJCQlyZXR1cm4gKC03KTsK
KwkJCQkJfQorCQkJCQlpZiAoc2N0cF9hZGRfcmVtb3RlX2FkZHIoc3RjYiwgc2EsIE5VTEwsIHBv
cnQsIFNDVFBfRE9OT1RfU0VUU0NPUEUsIFNDVFBfTE9BRF9BRERSXzQpKSB7CisJCQkJCQlyZXR1
cm4gKC04KTsKKwkJCQkJfQorCQkJCX0gZWxzZSBpZiAoc3RjYl90bXAgPT0gc3RjYikgeworCQkJ
CQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSA9PSAwKSB7CisJCQkJCQkvKiB0aGUgYXNzb2Mgd2FzIGZy
ZWVkPyAqLworCQkJCQkJcmV0dXJuICgtMTApOworCQkJCQl9CisJCQkJCWlmIChuZXQgIT0gTlVM
TCkgeworCQkJCQkJLyogY2xlYXIgZmxhZyAqLworCQkJCQkJbmV0LT5kZXN0X3N0YXRlICY9CisJ
CQkJCQkJflNDVFBfQUREUl9OT1RfSU5fQVNTT0M7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJ
CQkvKgorCQkJCQkgKiBzdHJhbmdlLCBhZGRyZXNzIGlzIGluIGFub3RoZXIKKwkJCQkJICogYXNz
b2M/IHN0cmFpZ2h0ZW4gb3V0IGxvY2tzLgorCQkJCQkgKi8KKwkJCQkJaWYgKHN0Y2JfdG1wKSB7
CisJCQkJCQlpZiAoU0NUUF9HRVRfU1RBVEUoc3RjYl90bXApID09IFNDVFBfU1RBVEVfQ09PS0lF
X1dBSVQpIHsKKwkJCQkJCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOworCQkJCQkJCWNoYXIgbXNnW1ND
VFBfRElBR19JTkZPX0xFTl07CisKKwkJCQkJCQkvKiBpbiBzZXR1cCBzdGF0ZSB3ZSBhYm9ydCB0
aGlzIGd1eSAqLworCQkJCQkJCVNDVFBfU05QUklOVEYobXNnLCBzaXplb2YobXNnKSwKKwkJCQkJ
CQkgICAgICAgICAgICAgICIlczolZCBhdCAlcyIsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5j
X18pOworCQkJCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2RpYWdfaW5mb19jb2RlKSwKKwkJCQkJCQkgICAgICAgICBtc2cpOworCQkJCQkJCXNj
dHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oc3RjYl90bXAtPnNjdHBfZXAsCisJCQkJCQkJCQkJICBz
dGNiX3RtcCwgb3BfZXJyLAorCQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9T
T19OT1RfTE9DS0VEKTsKKwkJCQkJCQlnb3RvIGFkZF9pdF9ub3c7CisJCQkJCQl9CisJCQkJCQlT
Q1RQX1RDQl9VTkxPQ0soc3RjYl90bXApOworCQkJCQl9CisKKwkJCQkJaWYgKHN0Y2ItPmFzb2Mu
c3RhdGUgPT0gMCkgeworCQkJCQkJLyogdGhlIGFzc29jIHdhcyBmcmVlZD8gKi8KKwkJCQkJCXJl
dHVybiAoLTEyKTsKKwkJCQkJfQorCQkJCQlyZXR1cm4gKC0xMyk7CisJCQkJfQorCQkJfQorCQl9
IGVsc2UKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCWlmIChwdHlwZSA9PSBTQ1RQX0lQVjZfQURE
UkVTUykgeworCQkJaWYgKHN0Y2ItPmFzb2Muc2NvcGUuaXB2Nl9hZGRyX2xlZ2FsKSB7CisJCQkJ
Lyogb2sgZ2V0IHRoZSB2NiBhZGRyZXNzIGFuZCBjaGVjay9hZGQgKi8KKwkJCQlzdHJ1Y3Qgc2N0
cF9pcHY2YWRkcl9wYXJhbSAqcDYsIHA2X2J1ZjsKKworCQkJCXBoZHIgPSBzY3RwX2dldF9uZXh0
X3BhcmFtKG0sIG9mZnNldCwKKwkJCQkJCQkgICAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKikmcDZf
YnVmLAorCQkJCQkJCSAgIHNpemVvZihwNl9idWYpKTsKKwkJCQlpZiAocGxlbiAhPSBzaXplb2Yo
c3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pIHx8CisJCQkJICAgIHBoZHIgPT0gTlVMTCkgewor
CQkJCQlyZXR1cm4gKC0xNCk7CisJCQkJfQorCQkJCXA2ID0gKHN0cnVjdCBzY3RwX2lwdjZhZGRy
X3BhcmFtICopcGhkcjsKKwkJCQltZW1jcHkoKGNhZGRyX3QpJnNpbjYuc2luNl9hZGRyLCBwNi0+
YWRkciwKKwkJCQkgICAgICAgc2l6ZW9mKHA2LT5hZGRyKSk7CisJCQkJaWYgKElONl9JU19BRERS
X01VTFRJQ0FTVCgmc2luNi5zaW42X2FkZHIpKSB7CisJCQkJCS8qIFNraXAgbXVsdGktY2FzdCBh
ZGRyZXNzZXMgKi8KKwkJCQkJZ290byBuZXh0X3BhcmFtOworCQkJCX0KKwkJCQlpZiAoSU42X0lT
X0FERFJfTElOS0xPQ0FMKCZzaW42LnNpbjZfYWRkcikpIHsKKwkJCQkJLyogTGluayBsb2NhbCBt
YWtlIG5vIHNlbnNlIHdpdGhvdXQgc2NvcGUgKi8KKwkJCQkJZ290byBuZXh0X3BhcmFtOworCQkJ
CX0KKwkJCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luNjsKKwkJCQlpbnAgPSBzdGNiLT5z
Y3RwX2VwOworCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJ
c3RjYl90bXAgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKCZpbnAsIHNhLCAmbmV0LAor
CQkJCQkJCQkJZHN0LCBzdGNiKTsKKwkJCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZj
bnQsIC0xKTsKKwkJCQlpZiAoc3RjYl90bXAgPT0gTlVMTCAmJgorCQkJCSAgICAoaW5wID09IHN0
Y2ItPnNjdHBfZXAgfHwgaW5wID09IE5VTEwpKSB7CisJCQkJCS8qCisJCQkJCSAqIHdlIG11c3Qg
dmFsaWRhdGUgdGhlIHN0YXRlIGFnYWluCisJCQkJCSAqIGhlcmUKKwkJCQkJICovCisJCQkJYWRk
X2l0X25vdzY6CisJCQkJCWlmIChzdGNiLT5hc29jLnN0YXRlID09IDApIHsKKwkJCQkJCS8qIHRo
ZSBhc3NvYyB3YXMgZnJlZWQ/ICovCisJCQkJCQlyZXR1cm4gKC0xNik7CisJCQkJCX0KKwkJCQkJ
LyoKKwkJCQkJICogd2UgbXVzdCBhZGQgdGhlIGFkZHJlc3MsIG5vIHNjb3BlCisJCQkJCSAqIHNl
dAorCQkJCQkgKi8KKwkJCQkJaWYgKHNjdHBfYWRkX3JlbW90ZV9hZGRyKHN0Y2IsIHNhLCBOVUxM
LCBwb3J0LCBTQ1RQX0RPTk9UX1NFVFNDT1BFLCBTQ1RQX0xPQURfQUREUl81KSkgeworCQkJCQkJ
cmV0dXJuICgtMTcpOworCQkJCQl9CisJCQkJfSBlbHNlIGlmIChzdGNiX3RtcCA9PSBzdGNiKSB7
CisJCQkJCS8qCisJCQkJCSAqIHdlIG11c3QgdmFsaWRhdGUgdGhlIHN0YXRlIGFnYWluCisJCQkJ
CSAqIGhlcmUKKwkJCQkJICovCisJCQkJCWlmIChzdGNiLT5hc29jLnN0YXRlID09IDApIHsKKwkJ
CQkJCS8qIHRoZSBhc3NvYyB3YXMgZnJlZWQ/ICovCisJCQkJCQlyZXR1cm4gKC0xOSk7CisJCQkJ
CX0KKwkJCQkJaWYgKG5ldCAhPSBOVUxMKSB7CisJCQkJCQkvKiBjbGVhciBmbGFnICovCisJCQkJ
CQluZXQtPmRlc3Rfc3RhdGUgJj0KKwkJCQkJCQl+U0NUUF9BRERSX05PVF9JTl9BU1NPQzsKKwkJ
CQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCS8qCisJCQkJCSAqIHN0cmFuZ2UsIGFkZHJlc3MgaXMg
aW4gYW5vdGhlcgorCQkJCQkgKiBhc3NvYz8gc3RyYWlnaHRlbiBvdXQgbG9ja3MuCisJCQkJCSAq
LworCQkJCQlpZiAoc3RjYl90bXApIHsKKwkJCQkJCWlmIChTQ1RQX0dFVF9TVEFURShzdGNiX3Rt
cCkgPT0gU0NUUF9TVEFURV9DT09LSUVfV0FJVCkgeworCQkJCQkJCXN0cnVjdCBtYnVmICpvcF9l
cnI7CisJCQkJCQkJY2hhciBtc2dbU0NUUF9ESUFHX0lORk9fTEVOXTsKKworCQkJCQkJCS8qIGlu
IHNldHVwIHN0YXRlIHdlIGFib3J0IHRoaXMgZ3V5ICovCisJCQkJCQkJU0NUUF9TTlBSSU5URiht
c2csIHNpemVvZihtc2cpLAorCQkJCQkJCSAgICAgICAgICAgICAgIiVzOiVkIGF0ICVzIiwgX19G
SUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCQkJCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0
ZV9jYXVzZShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUpLAorCQkJCQkJCSAg
ICAgICAgIG1zZyk7CisJCQkJCQkJc2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihzdGNiX3RtcC0+
c2N0cF9lcCwKKwkJCQkJCQkJCQkgIHN0Y2JfdG1wLCBvcF9lcnIsCisJCQkJCQkJICAgICAgICAg
ICAgICAgICAgICAgICAgICBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJCQkJCWdvdG8gYWRkX2l0
X25vdzY7CisJCQkJCQl9CisJCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYl90bXApOworCQkJCQl9
CisJCQkJCWlmIChzdGNiLT5hc29jLnN0YXRlID09IDApIHsKKwkJCQkJCS8qIHRoZSBhc3NvYyB3
YXMgZnJlZWQ/ICovCisJCQkJCQlyZXR1cm4gKC0yMSk7CisJCQkJCX0KKwkJCQkJcmV0dXJuICgt
MjIpOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlCisjZW5kaWYKKwkJaWYgKHB0eXBlID09IFNDVFBf
RUNOX0NBUEFCTEUpIHsKKwkJCXBlZXJfc3VwcG9ydHNfZWNuID0gMTsKKwkJfSBlbHNlIGlmIChw
dHlwZSA9PSBTQ1RQX1VMUF9BREFQVEFUSU9OKSB7CisJCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAh
PSBTQ1RQX1NUQVRFX09QRU4pIHsKKwkJCQlzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2xheWVyX2lu
ZGljYXRpb24gYWksICphaXA7CisKKwkJCQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShtLCBv
ZmZzZXQsCisJCQkJCQkJICAgKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopJmFpLCBzaXplb2YoYWkp
KTsKKwkJCQlhaXAgPSAoc3RydWN0IHNjdHBfYWRhcHRhdGlvbl9sYXllcl9pbmRpY2F0aW9uICop
cGhkcjsKKwkJCQlpZiAoYWlwKSB7CisJCQkJCXN0Y2ItPmFzb2MucGVlcnNfYWRhcHRhdGlvbiA9
IG50b2hsKGFpcC0+aW5kaWNhdGlvbik7CisJCQkJCXN0Y2ItPmFzb2MuYWRhcHRhdGlvbl9uZWVk
ZWQgPSAxOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmIChwdHlwZSA9PSBTQ1RQX1NFVF9QUklN
X0FERFIpIHsKKwkJCXN0cnVjdCBzY3RwX2FzY29uZl9hZGRyX3BhcmFtIGxzdG9yZSwgKmZlZTsK
KwkJCWludCBscHR5cGU7CisJCQlzdHJ1Y3Qgc29ja2FkZHIgKmxzYSA9IE5VTEw7CisjaWZkZWYg
SU5FVAorCQkJc3RydWN0IHNjdHBfYXNjb25mX2FkZHJ2NF9wYXJhbSAqZmlpOworI2VuZGlmCisK
KwkJCWlmIChzdGNiLT5hc29jLmFzY29uZl9zdXBwb3J0ZWQgPT0gMCkgeworCQkJCXJldHVybiAo
LTEwMCk7CisJCQl9CisJCQlpZiAocGxlbiA+IHNpemVvZihsc3RvcmUpKSB7CisJCQkJcmV0dXJu
ICgtMjMpOworCQkJfQorCQkJaWYgKHBsZW4gPCBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2Fk
ZHJ2NF9wYXJhbSkpIHsKKwkJCQlyZXR1cm4gKC0xMDEpOworCQkJfQorCQkJcGhkciA9IHNjdHBf
Z2V0X25leHRfcGFyYW0obSwgb2Zmc2V0LAorCQkJCQkJICAgKHN0cnVjdCBzY3RwX3BhcmFtaGRy
ICopJmxzdG9yZSwKKwkJCQkJCSAgIHBsZW4pOworCQkJaWYgKHBoZHIgPT0gTlVMTCkgeworCQkJ
CXJldHVybiAoLTI0KTsKKwkJCX0KKwkJCWZlZSA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkcl9w
YXJhbSAqKXBoZHI7CisJCQlscHR5cGUgPSBudG9ocyhmZWUtPmFkZHJwLnBoLnBhcmFtX3R5cGUp
OworCQkJc3dpdGNoIChscHR5cGUpIHsKKyNpZmRlZiBJTkVUCisJCQljYXNlIFNDVFBfSVBWNF9B
RERSRVNTOgorCQkJCWlmIChwbGVuICE9CisJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2Nv
bmZfYWRkcnY0X3BhcmFtKSkgeworCQkJCQlTQ1RQX1BSSU5URigiU2l6ZW9mIHNldHByaW0gaW4g
aW5pdC9pbml0IGFjayBub3QgJWQgYnV0ICVkIC0gaWdub3JlZFxuIiwKKwkJCQkJCSAgICAoaW50
KXNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkcnY0X3BhcmFtKSwKKwkJCQkJCSAgICBwbGVu
KTsKKwkJCQl9IGVsc2UgeworCQkJCQlmaWkgPSAoc3RydWN0IHNjdHBfYXNjb25mX2FkZHJ2NF9w
YXJhbSAqKWZlZTsKKwkJCQkJc2luLnNpbl9hZGRyLnNfYWRkciA9IGZpaS0+YWRkcnAuYWRkcjsK
KwkJCQkJbHNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW47CisJCQkJfQorCQkJCWJyZWFrOwor
I2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWNhc2UgU0NUUF9JUFY2X0FERFJFU1M6CisJCQkJaWYg
KHBsZW4gIT0KKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9hZGRyX3BhcmFtKSkg
eworCQkJCQlTQ1RQX1BSSU5URigiU2l6ZW9mIHNldHByaW0gKHY2KSBpbiBpbml0L2luaXQgYWNr
IG5vdCAlZCBidXQgJWQgLSBpZ25vcmVkXG4iLAorCQkJCQkJICAgIChpbnQpc2l6ZW9mKHN0cnVj
dCBzY3RwX2FzY29uZl9hZGRyX3BhcmFtKSwKKwkJCQkJCSAgICBwbGVuKTsKKwkJCQl9IGVsc2Ug
eworCQkJCQltZW1jcHkoc2luNi5zaW42X2FkZHIuczZfYWRkciwKKwkJCQkJICAgICAgIGZlZS0+
YWRkcnAuYWRkciwKKwkJCQkJICAgICAgIHNpemVvZihmZWUtPmFkZHJwLmFkZHIpKTsKKwkJCQkJ
bHNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW42OworCQkJCX0KKwkJCQlicmVhazsKKyNlbmRp
ZgorCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChsc2EpIHsKKwkJCQkodm9p
ZClzY3RwX3NldF9wcmltYXJ5X2FkZHIoc3RjYiwgc2EsIE5VTEwpOworCQkJfQorCQl9IGVsc2Ug
aWYgKHB0eXBlID09IFNDVFBfSEFTX05BVF9TVVBQT1JUKSB7CisJCQlzdGNiLT5hc29jLnBlZXJf
c3VwcG9ydHNfbmF0ID0gMTsKKwkJfSBlbHNlIGlmIChwdHlwZSA9PSBTQ1RQX1BSU0NUUF9TVVBQ
T1JURUQpIHsKKwkJCS8qIFBlZXIgc3VwcG9ydHMgcHItc2N0cCAqLworCQkJcGVlcl9zdXBwb3J0
c19wcnNjdHAgPSAxOworCQl9IGVsc2UgaWYgKHB0eXBlID09IFNDVFBfU1VQUE9SVEVEX0NIVU5L
X0VYVCkgeworCQkJLyogQSBzdXBwb3J0ZWQgZXh0ZW5zaW9uIGNodW5rICovCisJCQlzdHJ1Y3Qg
c2N0cF9zdXBwb3J0ZWRfY2h1bmtfdHlwZXNfcGFyYW0gKnByX3N1cHBvcnRlZDsKKwkJCXVpbnQ4
X3QgbG9jYWxfc3RvcmVbU0NUUF9QQVJBTV9CVUZGRVJfU0laRV07CisJCQlpbnQgbnVtX2VudCwg
aTsKKworCQkJaWYgKHBsZW4gPiBzaXplb2YobG9jYWxfc3RvcmUpKSB7CisJCQkJcmV0dXJuICgt
MzUpOworCQkJfQorCQkJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obSwgb2Zmc2V0LAorCQkJ
CQkJICAgKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopJmxvY2FsX3N0b3JlLCBwbGVuKTsKKwkJCWlm
IChwaGRyID09IE5VTEwpIHsKKwkJCQlyZXR1cm4gKC0yNSk7CisJCQl9CisJCQlwcl9zdXBwb3J0
ZWQgPSAoc3RydWN0IHNjdHBfc3VwcG9ydGVkX2NodW5rX3R5cGVzX3BhcmFtICopcGhkcjsKKwkJ
CW51bV9lbnQgPSBwbGVuIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKTsKKwkJCWZvciAo
aSA9IDA7IGkgPCBudW1fZW50OyBpKyspIHsKKwkJCQlzd2l0Y2ggKHByX3N1cHBvcnRlZC0+Y2h1
bmtfdHlwZXNbaV0pIHsKKwkJCQljYXNlIFNDVFBfQVNDT05GOgorCQkJCQlwZWVyX3N1cHBvcnRz
X2FzY29uZiA9IDE7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgU0NUUF9BU0NPTkZfQUNLOgorCQkJ
CQlwZWVyX3N1cHBvcnRzX2FzY29uZl9hY2sgPSAxOworCQkJCQlicmVhazsKKwkJCQljYXNlIFND
VFBfRk9SV0FSRF9DVU1fVFNOOgorCQkJCQlwZWVyX3N1cHBvcnRzX3Byc2N0cCA9IDE7CisJCQkJ
CWJyZWFrOworCQkJCWNhc2UgU0NUUF9QQUNLRVRfRFJPUFBFRDoKKwkJCQkJcGVlcl9zdXBwb3J0
c19wa3Rkcm9wID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBTQ1RQX05SX1NFTEVDVElWRV9B
Q0s6CisJCQkJCXBlZXJfc3VwcG9ydHNfbnJzYWNrID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJY2Fz
ZSBTQ1RQX1NUUkVBTV9SRVNFVDoKKwkJCQkJcGVlcl9zdXBwb3J0c19yZWNvbmZpZyA9IDE7CisJ
CQkJCWJyZWFrOworCQkJCWNhc2UgU0NUUF9BVVRIRU5USUNBVElPTjoKKwkJCQkJcGVlcl9zdXBw
b3J0c19hdXRoID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBTQ1RQX0lEQVRBOgorCQkJCQlw
ZWVyX3N1cHBvcnRzX2lkYXRhID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJ
Lyogb25lIEkgaGF2ZSBub3QgbGVhcm5lZCB5ZXQgKi8KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJ
fQorCQl9IGVsc2UgaWYgKHB0eXBlID09IFNDVFBfUkFORE9NKSB7CisJCQlpZiAocGxlbiA+IHNp
emVvZihyYW5kb21fc3RvcmUpKQorCQkJCWJyZWFrOworCQkJaWYgKGdvdF9yYW5kb20pIHsKKwkJ
CQkvKiBhbHJlYWR5IHByb2Nlc3NlZCBhIFJBTkRPTSAqLworCQkJCWdvdG8gbmV4dF9wYXJhbTsK
KwkJCX0KKwkJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwKKwkJCQkJCSAg
IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKXJhbmRvbV9zdG9yZSwKKwkJCQkJCSAgIHBsZW4pOwor
CQkJaWYgKHBoZHIgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKC0yNik7CisJCQlwX3JhbmRvbSA9IChz
dHJ1Y3Qgc2N0cF9hdXRoX3JhbmRvbSAqKXBoZHI7CisJCQlyYW5kb21fbGVuID0gcGxlbiAtIHNp
emVvZigqcF9yYW5kb20pOworCQkJLyogZW5mb3JjZSB0aGUgcmFuZG9tIGxlbmd0aCAqLworCQkJ
aWYgKHJhbmRvbV9sZW4gIT0gU0NUUF9BVVRIX1JBTkRPTV9TSVpFX1JFUVVJUkVEKSB7CisJCQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgxLCAiU0NUUDogaW52YWxpZCBSQU5ET00gbGVuXG4iKTsK
KwkJCQlyZXR1cm4gKC0yNyk7CisJCQl9CisJCQlnb3RfcmFuZG9tID0gMTsKKwkJfSBlbHNlIGlm
IChwdHlwZSA9PSBTQ1RQX0hNQUNfTElTVCkgeworCQkJdWludDE2X3QgbnVtX2htYWNzOworCQkJ
dWludDE2X3QgaTsKKworCQkJaWYgKHBsZW4gPiBzaXplb2YoaG1hY3Nfc3RvcmUpKQorCQkJCWJy
ZWFrOworCQkJaWYgKGdvdF9obWFjcykgeworCQkJCS8qIGFscmVhZHkgcHJvY2Vzc2VkIGEgSE1B
QyBsaXN0ICovCisJCQkJZ290byBuZXh0X3BhcmFtOworCQkJfQorCQkJcGhkciA9IHNjdHBfZ2V0
X25leHRfcGFyYW0obSwgb2Zmc2V0LAorCQkJCQkJICAgKHN0cnVjdCBzY3RwX3BhcmFtaGRyICop
aG1hY3Nfc3RvcmUsCisJCQkJCQkgICBwbGVuKTsKKwkJCWlmIChwaGRyID09IE5VTEwpCisJCQkJ
cmV0dXJuICgtMjgpOworCQkJaG1hY3MgPSAoc3RydWN0IHNjdHBfYXV0aF9obWFjX2FsZ28gKilw
aGRyOworCQkJaG1hY3NfbGVuID0gcGxlbiAtIHNpemVvZigqaG1hY3MpOworCQkJbnVtX2htYWNz
ID0gaG1hY3NfbGVuIC8gc2l6ZW9mKGhtYWNzLT5obWFjX2lkc1swXSk7CisJCQkvKiB2YWxpZGF0
ZSB0aGUgaG1hYyBsaXN0ICovCisJCQlpZiAoc2N0cF92ZXJpZnlfaG1hY19wYXJhbShobWFjcywg
bnVtX2htYWNzKSkgeworCQkJCXJldHVybiAoLTI5KTsKKwkJCX0KKwkJCWlmIChzdGNiLT5hc29j
LnBlZXJfaG1hY3MgIT0gTlVMTCkKKwkJCQlzY3RwX2ZyZWVfaG1hY2xpc3Qoc3RjYi0+YXNvYy5w
ZWVyX2htYWNzKTsKKwkJCXN0Y2ItPmFzb2MucGVlcl9obWFjcyA9IHNjdHBfYWxsb2NfaG1hY2xp
c3QobnVtX2htYWNzKTsKKwkJCWlmIChzdGNiLT5hc29jLnBlZXJfaG1hY3MgIT0gTlVMTCkgewor
CQkJCWZvciAoaSA9IDA7IGkgPCBudW1faG1hY3M7IGkrKykgeworCQkJCQkodm9pZClzY3RwX2F1
dGhfYWRkX2htYWNpZChzdGNiLT5hc29jLnBlZXJfaG1hY3MsCisJCQkJCQkJCSAgIG50b2hzKGht
YWNzLT5obWFjX2lkc1tpXSkpOworCQkJCX0KKwkJCX0KKwkJCWdvdF9obWFjcyA9IDE7CisJCX0g
ZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9DSFVOS19MSVNUKSB7CisJCQlpbnQgaTsKKworCQkJaWYg
KHBsZW4gPiBzaXplb2YoY2h1bmtzX3N0b3JlKSkKKwkJCQlicmVhazsKKwkJCWlmIChnb3RfY2hr
bGlzdCkgeworCQkJCS8qIGFscmVhZHkgcHJvY2Vzc2VkIGEgQ2h1bmtzIGxpc3QgKi8KKwkJCQln
b3RvIG5leHRfcGFyYW07CisJCQl9CisJCQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShtLCBv
ZmZzZXQsCisJCQkJCQkgICAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKiljaHVua3Nfc3RvcmUsCisJ
CQkJCQkgICBwbGVuKTsKKwkJCWlmIChwaGRyID09IE5VTEwpCisJCQkJcmV0dXJuICgtMzApOwor
CQkJY2h1bmtzID0gKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmtfbGlzdCAqKXBoZHI7CisJCQludW1f
Y2h1bmtzID0gcGxlbiAtIHNpemVvZigqY2h1bmtzKTsKKwkJCWlmIChzdGNiLT5hc29jLnBlZXJf
YXV0aF9jaHVua3MgIT0gTlVMTCkKKwkJCQlzY3RwX2NsZWFyX2NodW5rbGlzdChzdGNiLT5hc29j
LnBlZXJfYXV0aF9jaHVua3MpOworCQkJZWxzZQorCQkJCXN0Y2ItPmFzb2MucGVlcl9hdXRoX2No
dW5rcyA9IHNjdHBfYWxsb2NfY2h1bmtsaXN0KCk7CisJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2No
dW5rczsgaSsrKSB7CisJCQkJKHZvaWQpc2N0cF9hdXRoX2FkZF9jaHVuayhjaHVua3MtPmNodW5r
X3R5cGVzW2ldLAorCQkJCQkJCSAgc3RjYi0+YXNvYy5wZWVyX2F1dGhfY2h1bmtzKTsKKwkJCQkv
KiByZWNvcmQgYXNjb25mL2FzY29uZi1hY2sgaWYgbGlzdGVkICovCisJCQkJaWYgKGNodW5rcy0+
Y2h1bmtfdHlwZXNbaV0gPT0gU0NUUF9BU0NPTkYpCisJCQkJCXNhd19hc2NvbmYgPSAxOworCQkJ
CWlmIChjaHVua3MtPmNodW5rX3R5cGVzW2ldID09IFNDVFBfQVNDT05GX0FDSykKKwkJCQkJc2F3
X2FzY29uZl9hY2sgPSAxOworCQkJfQorCQkJZ290X2Noa2xpc3QgPSAxOworCQl9IGVsc2UgaWYg
KChwdHlwZSA9PSBTQ1RQX0hFQVJUQkVBVF9JTkZPKSB8fAorCQkJICAgKHB0eXBlID09IFNDVFBf
U1RBVEVfQ09PS0lFKSB8fAorCQkJICAgKHB0eXBlID09IFNDVFBfVU5SRUNPR19QQVJBTSkgfHwK
KwkJCSAgIChwdHlwZSA9PSBTQ1RQX0NPT0tJRV9QUkVTRVJWRSkgfHwKKwkJCSAgIChwdHlwZSA9
PSBTQ1RQX1NVUFBPUlRFRF9BRERSVFlQRSkgfHwKKwkJCSAgIChwdHlwZSA9PSBTQ1RQX0FERF9J
UF9BRERSRVNTKSB8fAorCQkJICAgKHB0eXBlID09IFNDVFBfREVMX0lQX0FERFJFU1MpIHx8CisJ
CQkgICAocHR5cGUgPT0gU0NUUF9FUlJPUl9DQVVTRV9JTkQpIHx8CisJCQkgICAocHR5cGUgPT0g
U0NUUF9TVUNDRVNTX1JFUE9SVCkpIHsKKwkJCS8qIGRvbid0IGNhcmUgKi8KKwkJfSBlbHNlIHsK
KwkJCWlmICgocHR5cGUgJiAweDgwMDApID09IDB4MDAwMCkgeworCQkJCS8qCisJCQkJICogbXVz
dCBzdG9wIHByb2Nlc3NpbmcgdGhlIHJlc3Qgb2YgdGhlCisJCQkJICogcGFyYW0ncy4gQW55IHJl
cG9ydCBiaXRzIHdlcmUgaGFuZGxlZAorCQkJCSAqIHdpdGggdGhlIGNhbGwgdG8KKwkJCQkgKiBz
Y3RwX2FyZXRoZXJlX3VucmVjb2duaXplZF9wYXJhbWV0ZXJzKCkKKwkJCQkgKiB3aGVuIHRoZSBJ
TklUIG9yIElOSVQtQUNLIHdhcyBmaXJzdCBzZWVuLgorCQkJCSAqLworCQkJCWJyZWFrOworCQkJ
fQorCQl9CisKKwluZXh0X3BhcmFtOgorCQlvZmZzZXQgKz0gU0NUUF9TSVpFMzIocGxlbik7CisJ
CWlmIChvZmZzZXQgPj0gbGltaXQpIHsKKwkJCWJyZWFrOworCQl9CisJCXBoZHIgPSBzY3RwX2dl
dF9uZXh0X3BhcmFtKG0sIG9mZnNldCwgJnBhcmFtX2J1ZiwKKwkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZW9mKHBhcmFtX2J1ZikpOworCX0KKwkvKiBOb3cgY2hlY2sgdG8gc2VlIGlm
IHdlIG5lZWQgdG8gcHVyZ2UgYW55IGFkZHJlc3NlcyAqLworCVRBSUxRX0ZPUkVBQ0hfU0FGRShu
ZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCwgbm5ldCkgeworCQlpZiAoKG5ldC0+ZGVz
dF9zdGF0ZSAmIFNDVFBfQUREUl9OT1RfSU5fQVNTT0MpID09CisJCSAgICBTQ1RQX0FERFJfTk9U
X0lOX0FTU09DKSB7CisJCQkvKiBUaGlzIGFkZHJlc3MgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRo
ZSBhc29jICovCisJCQkvKiByZW1vdmUgYW5kIGZyZWUgaXQgKi8KKwkJCXN0Y2ItPmFzb2MubnVt
bmV0cy0tOworCQkJVEFJTFFfUkVNT1ZFKCZzdGNiLT5hc29jLm5ldHMsIG5ldCwgc2N0cF9uZXh0
KTsKKwkJCWlmIChuZXQgPT0gc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsKKwkJCQlzY3RwX2ZyZWVf
cmVtb3RlX2FkZHIoc3RjYi0+YXNvYy5hbHRlcm5hdGUpOworCQkJCXN0Y2ItPmFzb2MuYWx0ZXJu
YXRlID0gTlVMTDsKKwkJCX0KKwkJCWlmIChuZXQgPT0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3Rp
bmF0aW9uKSB7CisJCQkJc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uID0gTlVMTDsKKwkJ
CQlzY3RwX3NlbGVjdF9wcmltYXJ5X2Rlc3RpbmF0aW9uKHN0Y2IpOworCQkJfQorCQkJc2N0cF9m
cmVlX3JlbW90ZV9hZGRyKG5ldCk7CisJCX0KKwl9CisJaWYgKChzdGNiLT5hc29jLmVjbl9zdXBw
b3J0ZWQgPT0gMSkgJiYKKwkgICAgKHBlZXJfc3VwcG9ydHNfZWNuID09IDApKSB7CisJCXN0Y2It
PmFzb2MuZWNuX3N1cHBvcnRlZCA9IDA7CisJfQorCWlmICgoc3RjYi0+YXNvYy5wcnNjdHBfc3Vw
cG9ydGVkID09IDEpICYmCisJICAgIChwZWVyX3N1cHBvcnRzX3Byc2N0cCA9PSAwKSkgeworCQlz
dGNiLT5hc29jLnByc2N0cF9zdXBwb3J0ZWQgPSAwOworCX0KKwlpZiAoKHN0Y2ItPmFzb2MuYXV0
aF9zdXBwb3J0ZWQgPT0gMSkgJiYKKwkgICAgKChwZWVyX3N1cHBvcnRzX2F1dGggPT0gMCkgfHwK
KwkgICAgIChnb3RfcmFuZG9tID09IDApIHx8IChnb3RfaG1hY3MgPT0gMCkpKSB7CisJCXN0Y2It
PmFzb2MuYXV0aF9zdXBwb3J0ZWQgPSAwOworCX0KKwlpZiAoKHN0Y2ItPmFzb2MuYXNjb25mX3N1
cHBvcnRlZCA9PSAxKSAmJgorCSAgICAoKHBlZXJfc3VwcG9ydHNfYXNjb25mID09IDApIHx8IChw
ZWVyX3N1cHBvcnRzX2FzY29uZl9hY2sgPT0gMCkgfHwKKwkgICAgIChzdGNiLT5hc29jLmF1dGhf
c3VwcG9ydGVkID09IDApIHx8CisJICAgICAoc2F3X2FzY29uZiA9PSAwKSB8fCAoc2F3X2FzY29u
Zl9hY2sgPT0gMCkpKSB7CisJCXN0Y2ItPmFzb2MuYXNjb25mX3N1cHBvcnRlZCA9IDA7CisJfQor
CWlmICgoc3RjYi0+YXNvYy5yZWNvbmZpZ19zdXBwb3J0ZWQgPT0gMSkgJiYKKwkgICAgKHBlZXJf
c3VwcG9ydHNfcmVjb25maWcgPT0gMCkpIHsKKwkJc3RjYi0+YXNvYy5yZWNvbmZpZ19zdXBwb3J0
ZWQgPSAwOworCX0KKwlpZiAoKHN0Y2ItPmFzb2MuaWRhdGFfc3VwcG9ydGVkID09IDEpICYmCisJ
ICAgIChwZWVyX3N1cHBvcnRzX2lkYXRhID09IDApKSB7CisJCXN0Y2ItPmFzb2MuaWRhdGFfc3Vw
cG9ydGVkID0gMDsKKwl9CisJaWYgKChzdGNiLT5hc29jLm5yc2Fja19zdXBwb3J0ZWQgPT0gMSkg
JiYKKwkgICAgKHBlZXJfc3VwcG9ydHNfbnJzYWNrID09IDApKSB7CisJCXN0Y2ItPmFzb2MubnJz
YWNrX3N1cHBvcnRlZCA9IDA7CisJfQorCWlmICgoc3RjYi0+YXNvYy5wa3Rkcm9wX3N1cHBvcnRl
ZCA9PSAxKSAmJgorCSAgICAocGVlcl9zdXBwb3J0c19wa3Rkcm9wID09IDApKXsKKwkJc3RjYi0+
YXNvYy5wa3Rkcm9wX3N1cHBvcnRlZCA9IDA7CisJfQorCS8qIHZhbGlkYXRlIGF1dGhlbnRpY2F0
aW9uIHJlcXVpcmVkIHBhcmFtZXRlcnMgKi8KKwlpZiAoKHBlZXJfc3VwcG9ydHNfYXV0aCA9PSAw
KSAmJiAoZ290X2Noa2xpc3QgPT0gMSkpIHsKKwkJLyogcGVlciBkb2VzIG5vdCBzdXBwb3J0IGF1
dGggYnV0IHNlbnQgYSBjaHVua3MgbGlzdD8gKi8KKwkJcmV0dXJuICgtMzEpOworCX0KKwlpZiAo
KHBlZXJfc3VwcG9ydHNfYXNjb25mID09IDEpICYmIChwZWVyX3N1cHBvcnRzX2F1dGggPT0gMCkp
IHsKKwkJLyogcGVlciBzdXBwb3J0cyBhc2NvbmYgYnV0IG5vdCBhdXRoPyAqLworCQlyZXR1cm4g
KC0zMik7CisJfSBlbHNlIGlmICgocGVlcl9zdXBwb3J0c19hc2NvbmYgPT0gMSkgJiYKKwkgICAg
ICAgICAgIChwZWVyX3N1cHBvcnRzX2F1dGggPT0gMSkgJiYKKwkJICAgKChzYXdfYXNjb25mID09
IDApIHx8IChzYXdfYXNjb25mX2FjayA9PSAwKSkpIHsKKwkJcmV0dXJuICgtMzMpOworCX0KKwkv
KiBjb25jYXRlbmF0ZSB0aGUgZnVsbCByYW5kb20ga2V5ICovCisJa2V5bGVuID0gc2l6ZW9mKCpw
X3JhbmRvbSkgKyByYW5kb21fbGVuICsgc2l6ZW9mKCpobWFjcykgKyBobWFjc19sZW47CisJaWYg
KGNodW5rcyAhPSBOVUxMKSB7CisJCWtleWxlbiArPSBzaXplb2YoKmNodW5rcykgKyBudW1fY2h1
bmtzOworCX0KKwluZXdfa2V5ID0gc2N0cF9hbGxvY19rZXkoa2V5bGVuKTsKKwlpZiAobmV3X2tl
eSAhPSBOVUxMKSB7CisJCS8qIGNvcHkgaW4gdGhlIFJBTkRPTSAqLworCQlpZiAocF9yYW5kb20g
IT0gTlVMTCkgeworCQkJa2V5bGVuID0gc2l6ZW9mKCpwX3JhbmRvbSkgKyByYW5kb21fbGVuOwor
CQkJbWVtY3B5KG5ld19rZXktPmtleSwgcF9yYW5kb20sIGtleWxlbik7CisJCX0gZWxzZSB7CisJ
CQlrZXlsZW4gPSAwOworCQl9CisJCS8qIGFwcGVuZCBpbiB0aGUgQVVUSCBjaHVua3MgKi8KKwkJ
aWYgKGNodW5rcyAhPSBOVUxMKSB7CisJCQltZW1jcHkobmV3X2tleS0+a2V5ICsga2V5bGVuLCBj
aHVua3MsCisJCQkgICAgICAgc2l6ZW9mKCpjaHVua3MpICsgbnVtX2NodW5rcyk7CisJCQlrZXls
ZW4gKz0gc2l6ZW9mKCpjaHVua3MpICsgbnVtX2NodW5rczsKKwkJfQorCQkvKiBhcHBlbmQgaW4g
dGhlIEhNQUNzICovCisJCWlmIChobWFjcyAhPSBOVUxMKSB7CisJCQltZW1jcHkobmV3X2tleS0+
a2V5ICsga2V5bGVuLCBobWFjcywKKwkJCSAgICAgICBzaXplb2YoKmhtYWNzKSArIGhtYWNzX2xl
bik7CisJCX0KKwl9IGVsc2UgeworCQkvKiBmYWlsZWQgdG8gZ2V0IG1lbW9yeSBmb3IgdGhlIGtl
eSAqLworCQlyZXR1cm4gKC0zNCk7CisJfQorCWlmIChzdGNiLT5hc29jLmF1dGhpbmZvLnBlZXJf
cmFuZG9tICE9IE5VTEwpCisJCXNjdHBfZnJlZV9rZXkoc3RjYi0+YXNvYy5hdXRoaW5mby5wZWVy
X3JhbmRvbSk7CisJc3RjYi0+YXNvYy5hdXRoaW5mby5wZWVyX3JhbmRvbSA9IG5ld19rZXk7CisJ
c2N0cF9jbGVhcl9jYWNoZWRrZXlzKHN0Y2IsIHN0Y2ItPmFzb2MuYXV0aGluZm8uYXNzb2Nfa2V5
aWQpOworCXNjdHBfY2xlYXJfY2FjaGVka2V5cyhzdGNiLCBzdGNiLT5hc29jLmF1dGhpbmZvLnJl
Y3Zfa2V5aWQpOworCisJcmV0dXJuICgwKTsKK30KKworaW50CitzY3RwX3NldF9wcmltYXJ5X2Fk
ZHIoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLAorCQkgICAgICBz
dHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJLyogbWFrZSBzdXJlIHRoZSByZXF1ZXN0ZWQgcHJp
bWFyeSBhZGRyZXNzIGV4aXN0cyBpbiB0aGUgYXNzb2MgKi8KKwlpZiAobmV0ID09IE5VTEwgJiYg
c2EpCisJCW5ldCA9IHNjdHBfZmluZG5ldChzdGNiLCBzYSk7CisKKwlpZiAobmV0ID09IE5VTEwp
IHsKKwkJLyogZGlkbid0IGZpbmQgdGhlIHJlcXVlc3RlZCBwcmltYXJ5IGFkZHJlc3MhICovCisJ
CXJldHVybiAoLTEpOworCX0gZWxzZSB7CisJCS8qIHNldCB0aGUgcHJpbWFyeSBhZGRyZXNzICov
CisJCWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQpIHsKKwkJCS8q
IE11c3QgYmUgY29uZmlybWVkLCBzbyBxdWV1ZSB0byBzZXQgKi8KKwkJCW5ldC0+ZGVzdF9zdGF0
ZSB8PSBTQ1RQX0FERFJfUkVRX1BSSU1BUlk7CisJCQlyZXR1cm4gKDApOworCQl9CisJCXN0Y2It
PmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiA9IG5ldDsKKwkJaWYgKCEobmV0LT5kZXN0X3N0YXRl
ICYgU0NUUF9BRERSX1BGKSAmJiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpKSB7CisJCQlzY3RwX2Zy
ZWVfcmVtb3RlX2FkZHIoc3RjYi0+YXNvYy5hbHRlcm5hdGUpOworCQkJc3RjYi0+YXNvYy5hbHRl
cm5hdGUgPSBOVUxMOworCQl9CisJCW5ldCA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMp
OworCQlpZiAobmV0ICE9IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbikgeworCQkJLyog
Zmlyc3Qgb25lIG9uIHRoZSBsaXN0IGlzIE5PVCB0aGUgcHJpbWFyeQorCQkJICogc2N0cF9jbXBh
ZGRyKCkgaXMgbXVjaCBtb3JlIGVmZmljaWVudCBpZgorCQkJICogdGhlIHByaW1hcnkgaXMgdGhl
IGZpcnN0IG9uIHRoZSBsaXN0LCBtYWtlIGl0CisJCQkgKiBzby4KKwkJCSAqLworCQkJVEFJTFFf
UkVNT1ZFKCZzdGNiLT5hc29jLm5ldHMsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwg
c2N0cF9uZXh0KTsKKwkJCVRBSUxRX0lOU0VSVF9IRUFEKCZzdGNiLT5hc29jLm5ldHMsIHN0Y2It
PmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwgc2N0cF9uZXh0KTsKKwkJfQorCQlyZXR1cm4gKDAp
OworCX0KK30KKworaW50CitzY3RwX2lzX3Z0YWdfZ29vZCh1aW50MzJfdCB0YWcsIHVpbnQxNl90
IGxwb3J0LCB1aW50MTZfdCBycG9ydCwgc3RydWN0IHRpbWV2YWwgKm5vdykKK3sKKwkvKgorCSAq
IFRoaXMgZnVuY3Rpb24gc2VydmVzIHR3byBwdXJwb3Nlcy4gSXQgd2lsbCBzZWUgaWYgYSBUQUcg
Y2FuIGJlCisJICogcmUtdXNlZCBhbmQgcmV0dXJuIDEgZm9yIHllcyBpdCBpcyBvayBhbmQgMCBm
b3IgZG9uJ3QgdXNlIHRoYXQKKwkgKiB0YWcuIEEgc2Vjb25kYXJ5IGZ1bmN0aW9uIGl0IHdpbGwg
ZG8gaXMgcHVyZ2Ugb3V0IG9sZCB0YWdzIHRoYXQKKwkgKiBjYW4gYmUgcmVtb3ZlZC4KKwkgKi8K
KwlzdHJ1Y3Qgc2N0cHZ0YWdoZWFkICpjaGFpbjsKKwlzdHJ1Y3Qgc2N0cF90YWdibG9jayAqdHdh
aXRfYmxvY2s7CisJc3RydWN0IHNjdHBhc29jaGVhZCAqaGVhZDsKKwlzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2I7CisJaW50IGk7CisKKwlTQ1RQX0lOUF9JTkZPX1JMT0NLKCk7CisJaGVhZCA9ICZTQ1RQ
X0JBU0VfSU5GTyhzY3RwX2Fzb2NoYXNoKVtTQ1RQX1BDQkhBU0hfQVNPQyh0YWcsCisJCQkJCQkJ
CVNDVFBfQkFTRV9JTkZPKGhhc2hhc29jbWFyaykpXTsKKwlMSVNUX0ZPUkVBQ0goc3RjYiwgaGVh
ZCwgc2N0cF9hc29jcykgeworCQkvKiBXZSBjaG9vc2Ugbm90IHRvIGxvY2sgYW55dGhpbmcgaGVy
ZS4gVENCJ3MgY2FuJ3QgYmUKKwkJICogcmVtb3ZlZCBzaW5jZSB3ZSBoYXZlIHRoZSByZWFkIGxv
Y2ssIHNvIHRoZXkgY2FuJ3QKKwkJICogYmUgZnJlZWQgb24gdXMsIHNhbWUgdGhpbmcgZm9yIHRo
ZSBJTlAuIEkgbWF5CisJCSAqIGJlIHdyb25nIHdpdGggdGhpcyBhc3N1bXB0aW9uLCBidXQgd2Ug
d2lsbCBnbworCQkgKiB3aXRoIGl0IGZvciBub3cgOi0pCisJCSAqLworCQlpZiAoc3RjYi0+c2N0
cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSB7CisJCQlj
b250aW51ZTsKKwkJfQorCQlpZiAoc3RjYi0+YXNvYy5teV92dGFnID09IHRhZykgeworCQkJLyog
Y2FuZGlkYXRlICovCisJCQlpZiAoc3RjYi0+cnBvcnQgIT0gcnBvcnQpIHsKKwkJCQljb250aW51
ZTsKKwkJCX0KKwkJCWlmIChzdGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0ICE9IGxwb3J0KSB7CisJ
CQkJY29udGludWU7CisJCQl9CisJCQkvKiBJdHMgYSB1c2VkIHRhZyBzZXQgKi8KKwkJCVNDVFBf
SU5QX0lORk9fUlVOTE9DSygpOworCQkJcmV0dXJuICgwKTsKKwkJfQorCX0KKwljaGFpbiA9ICZT
Q1RQX0JBU0VfSU5GTyh2dGFnX3RpbWV3YWl0KVsodGFnICUgU0NUUF9TVEFDS19WVEFHX0hBU0hf
U0laRSldOworCS8qIE5vdyB3aGF0IGFib3V0IHRpbWVkIHdhaXQgPyAqLworCUxJU1RfRk9SRUFD
SCh0d2FpdF9ibG9jaywgY2hhaW4sIHNjdHBfbnh0X3RhZ2Jsb2NrKSB7CisJCS8qCisJCSAqIEJs
b2NrKHMpIGFyZSBwcmVzZW50LCBsZXRzIHNlZSBpZiB3ZSBoYXZlIHRoaXMgdGFnIGluIHRoZQor
CQkgKiBsaXN0CisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgU0NUUF9OVU1CRVJfSU5fVlRBR19C
TE9DSzsgaSsrKSB7CisJCQlpZiAodHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0udl90YWcgPT0g
MCkgeworCQkJCS8qIG5vdCB1c2VkICovCisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKChs
b25nKXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLnR2X3NlY19hdF9leHBpcmUgIDwKKwkJCQkg
ICBub3ctPnR2X3NlYykgeworCQkJCS8qIEF1ZGl0IGV4cGlyZXMgdGhpcyBndXkgKi8KKwkJCQl0
d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tpXS50dl9zZWNfYXRfZXhwaXJlID0gMDsKKwkJCQl0d2Fp
dF9ibG9jay0+dnRhZ19ibG9ja1tpXS52X3RhZyA9IDA7CisJCQkJdHdhaXRfYmxvY2stPnZ0YWdf
YmxvY2tbaV0ubHBvcnQgPSAwOworCQkJCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLnJwb3J0
ID0gMDsKKwkJCX0gZWxzZSBpZiAoKHR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLnZfdGFnID09
IHRhZykgJiYKKwkJCQkgICAodHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0ubHBvcnQgPT0gbHBv
cnQpICYmCisJCQkJICAgKHR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLnJwb3J0ID09IHJwb3J0
KSkgeworCQkJCS8qIEJhZCB0YWcsIHNvcnJ5IDo8ICovCisJCQkJU0NUUF9JTlBfSU5GT19SVU5M
T0NLKCk7CisJCQkJcmV0dXJuICgwKTsKKwkJCX0KKwkJfQorCX0KKwlTQ1RQX0lOUF9JTkZPX1JV
TkxPQ0soKTsKKwlyZXR1cm4gKDEpOworfQorCitzdGF0aWMgdm9pZAorc2N0cF9kcmFpbl9tYnVm
cyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCit7CisJLyoKKwkgKiBXZSBtdXN0IGh1bnQgdGhpcyBh
c3NvY2lhdGlvbiBmb3IgTUJVRidzIHBhc3QgdGhlIGN1bWFjayAoaS5lLgorCSAqIG91dCBvZiBv
cmRlciBkYXRhIHRoYXQgd2UgY2FuIHJlbmVnZSBvbikuCisJICovCisJc3RydWN0IHNjdHBfYXNz
b2NpYXRpb24gKmFzb2M7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAqbmNoazsKKwl1
aW50MzJfdCBjdW11bGF0aXZlX3Rzbl9wMTsKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAq
Y29udHJvbCwgKm5jb250cm9sOworCWludCBjbnQsIHN0cm1hdDsKKwl1aW50MzJfdCBnYXAsIGk7
CisJaW50IGZuZCA9IDA7CisKKwkvKiBXZSBsb29rIGZvciBhbnl0aGluZyBsYXJnZXIgdGhhbiB0
aGUgY3VtLWFjayArIDEgKi8KKworCWFzb2MgPSAmc3RjYi0+YXNvYzsKKwlpZiAoYXNvYy0+Y3Vt
dWxhdGl2ZV90c24gPT0gYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCkgeworCQkvKiBub25l
IHdlIGNhbiByZW5lZyBvbi4gKi8KKwkJcmV0dXJuOworCX0KKwlTQ1RQX1NUQVRfSU5DUihzY3Rw
c19wcm90b2NvbF9kcmFpbnNfZG9uZSk7CisJY3VtdWxhdGl2ZV90c25fcDEgPSBhc29jLT5jdW11
bGF0aXZlX3RzbiArIDE7CisJY250ID0gMDsKKwkvKiBPayB0aGF0IHdhcyBmdW4sIG5vdyB3ZSB3
aWxsIGRyYWluIGFsbCB0aGUgaW5ib3VuZCBzdHJlYW1zPyAqLworCWZvciAoc3RybWF0ID0gMDsg
c3RybWF0IDwgYXNvYy0+c3RyZWFtaW5jbnQ7IHN0cm1hdCsrKSB7CisJCVRBSUxRX0ZPUkVBQ0hf
U0FGRShjb250cm9sLCAmYXNvYy0+c3RybWluW3N0cm1hdF0uaW5xdWV1ZSwgbmV4dF9pbnN0cm0s
IG5jb250cm9sKSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQkJaWYgKGNvbnRyb2wtPm9uX3N0cm1f
cSAhPSBTQ1RQX09OX09SREVSRUQpIHsKKwkJCQlwYW5pYygiSHVoIGNvbnRyb2w6ICVwIG9uX3E6
ICVkIC0tIG5vdCBvcmRlcmVkPyIsCisJCQkJICAgICAgY29udHJvbCwgY29udHJvbC0+b25fc3Ry
bV9xKTsKKwkJCX0KKyNlbmRpZgorCQkJaWYgKFNDVFBfVFNOX0dUKGNvbnRyb2wtPnNpbmZvX3Rz
biwgY3VtdWxhdGl2ZV90c25fcDEpKSB7CisJCQkJLyogWWVwIGl0IGlzIGFib3ZlIGN1bS1hY2sg
Ki8KKwkJCQljbnQrKzsKKwkJCQlTQ1RQX0NBTENfVFNOX1RPX0dBUChnYXAsIGNvbnRyb2wtPnNp
bmZvX3RzbiwgYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3Rzbik7CisJCQkJS0FTU0VSVChjb250
cm9sLT5sZW5ndGggPiAwLCAoImNvbnRyb2wgaGFzIHplcm8gbGVuZ3RoIikpOworCQkJCWlmIChh
c29jLT5zaXplX29uX2FsbF9zdHJlYW1zID49IGNvbnRyb2wtPmxlbmd0aCkgeworCQkJCQlhc29j
LT5zaXplX29uX2FsbF9zdHJlYW1zIC09IGNvbnRyb2wtPmxlbmd0aDsKKwkJCQl9IGVsc2Ugewor
I2lmZGVmIElOVkFSSUFOVFMKKwkJCQkJcGFuaWMoInNpemVfb25fYWxsX3N0cmVhbXMgPSAldSBz
bWFsbGVyIHRoYW4gY29udHJvbCBsZW5ndGggJXUiLCBhc29jLT5zaXplX29uX2FsbF9zdHJlYW1z
LCBjb250cm9sLT5sZW5ndGgpOworI2Vsc2UKKwkJCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFt
cyA9IDA7CisjZW5kaWYKKwkJCQl9CisJCQkJc2N0cF91Y291bnRfZGVjcihhc29jLT5jbnRfb25f
YWxsX3N0cmVhbXMpOworCQkJCVNDVFBfVU5TRVRfVFNOX1BSRVNFTlQoYXNvYy0+bWFwcGluZ19h
cnJheSwgZ2FwKTsKKwkJCQlpZiAoY29udHJvbC0+b25fcmVhZF9xKSB7CisJCQkJCVRBSUxRX1JF
TU9WRSgmc3RjYi0+c2N0cF9lcC0+cmVhZF9xdWV1ZSwgY29udHJvbCwgbmV4dCk7CisJCQkJCWNv
bnRyb2wtPm9uX3JlYWRfcSA9IDA7CisJCQkJfQorCQkJCVRBSUxRX1JFTU9WRSgmYXNvYy0+c3Ry
bWluW3N0cm1hdF0uaW5xdWV1ZSwgY29udHJvbCwgbmV4dF9pbnN0cm0pOworCQkJCWNvbnRyb2wt
Pm9uX3N0cm1fcSA9IDA7CisJCQkJaWYgKGNvbnRyb2wtPmRhdGEpIHsKKwkJCQkJc2N0cF9tX2Zy
ZWVtKGNvbnRyb2wtPmRhdGEpOworCQkJCQljb250cm9sLT5kYXRhID0gTlVMTDsKKwkJCQl9CisJ
CQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNvbnRyb2wtPndob0Zyb20pOworCQkJCS8qIE5vdyBp
dHMgcmVhc20/ICovCisJCQkJVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJmNvbnRyb2wtPnJlYXNt
LCBzY3RwX25leHQsIG5jaGspIHsKKwkJCQkJY250Kys7CisJCQkJCVNDVFBfQ0FMQ19UU05fVE9f
R0FQKGdhcCwgY2hrLT5yZWMuZGF0YS50c24sIGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24p
OworCQkJCQlLQVNTRVJUKGNoay0+c2VuZF9zaXplID4gMCwgKCJjaHVuayBoYXMgemVybyBsZW5n
dGgiKSk7CisJCQkJCWlmIChhc29jLT5zaXplX29uX3JlYXNtX3F1ZXVlID49IGNoay0+c2VuZF9z
aXplKSB7CisJCQkJCQlhc29jLT5zaXplX29uX3JlYXNtX3F1ZXVlIC09IGNoay0+c2VuZF9zaXpl
OworCQkJCQl9IGVsc2UgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJCQkJCXBhbmljKCJzaXplX29u
X3JlYXNtX3F1ZXVlID0gJXUgc21hbGxlciB0aGFuIGNodW5rIGxlbmd0aCAldSIsIGFzb2MtPnNp
emVfb25fcmVhc21fcXVldWUsIGNoay0+c2VuZF9zaXplKTsKKyNlbHNlCisJCQkJCQlhc29jLT5z
aXplX29uX3JlYXNtX3F1ZXVlID0gMDsKKyNlbmRpZgorCQkJCQl9CisJCQkJCXNjdHBfdWNvdW50
X2RlY3IoYXNvYy0+Y250X29uX3JlYXNtX3F1ZXVlKTsKKwkJCQkJU0NUUF9VTlNFVF9UU05fUFJF
U0VOVChhc29jLT5tYXBwaW5nX2FycmF5LCBnYXApOworCQkJCQlUQUlMUV9SRU1PVkUoJmNvbnRy
b2wtPnJlYXNtLCBjaGssIHNjdHBfbmV4dCk7CisJCQkJCWlmIChjaGstPmRhdGEpIHsKKwkJCQkJ
CXNjdHBfbV9mcmVlbShjaGstPmRhdGEpOworCQkJCQkJY2hrLT5kYXRhID0gTlVMTDsKKwkJCQkJ
fQorCQkJCQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNiLCBjaGssIFNDVFBfU09fTk9UX0xPQ0tFRCk7
CisJCQkJfQorCQkJCXNjdHBfZnJlZV9hX3JlYWRxKHN0Y2IsIGNvbnRyb2wpOworCQkJfQorCQl9
CisJCVRBSUxRX0ZPUkVBQ0hfU0FGRShjb250cm9sLCAmYXNvYy0+c3RybWluW3N0cm1hdF0udW5v
X2lucXVldWUsIG5leHRfaW5zdHJtLCBuY29udHJvbCkgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJ
CWlmIChjb250cm9sLT5vbl9zdHJtX3EgIT0gU0NUUF9PTl9VTk9SREVSRUQpIHsKKwkJCQlwYW5p
YygiSHVoIGNvbnRyb2w6ICVwIG9uX3E6ICVkIC0tIG5vdCB1bm9yZGVyZWQ/IiwKKwkJCQkgICAg
ICBjb250cm9sLCBjb250cm9sLT5vbl9zdHJtX3EpOworCQkJfQorI2VuZGlmCisJCQlpZiAoU0NU
UF9UU05fR1QoY29udHJvbC0+c2luZm9fdHNuLCBjdW11bGF0aXZlX3Rzbl9wMSkpIHsKKwkJCQkv
KiBZZXAgaXQgaXMgYWJvdmUgY3VtLWFjayAqLworCQkJCWNudCsrOworCQkJCVNDVFBfQ0FMQ19U
U05fVE9fR0FQKGdhcCwgY29udHJvbC0+c2luZm9fdHNuLCBhc29jLT5tYXBwaW5nX2FycmF5X2Jh
c2VfdHNuKTsKKwkJCQlLQVNTRVJUKGNvbnRyb2wtPmxlbmd0aCA+IDAsICgiY29udHJvbCBoYXMg
emVybyBsZW5ndGgiKSk7CisJCQkJaWYgKGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPj0gY29u
dHJvbC0+bGVuZ3RoKSB7CisJCQkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgLT0gY29udHJv
bC0+bGVuZ3RoOworCQkJCX0gZWxzZSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQkJCQlwYW5pYygi
c2l6ZV9vbl9hbGxfc3RyZWFtcyA9ICV1IHNtYWxsZXIgdGhhbiBjb250cm9sIGxlbmd0aCAldSIs
IGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMsIGNvbnRyb2wtPmxlbmd0aCk7CisjZWxzZQorCQkJ
CQlhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zID0gMDsKKyNlbmRpZgorCQkJCX0KKwkJCQlzY3Rw
X3Vjb3VudF9kZWNyKGFzb2MtPmNudF9vbl9hbGxfc3RyZWFtcyk7CisJCQkJU0NUUF9VTlNFVF9U
U05fUFJFU0VOVChhc29jLT5tYXBwaW5nX2FycmF5LCBnYXApOworCQkJCWlmIChjb250cm9sLT5v
bl9yZWFkX3EpIHsKKwkJCQkJVEFJTFFfUkVNT1ZFKCZzdGNiLT5zY3RwX2VwLT5yZWFkX3F1ZXVl
LCBjb250cm9sLCBuZXh0KTsKKwkJCQkJY29udHJvbC0+b25fcmVhZF9xID0gMDsKKwkJCQl9CisJ
CQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5zdHJtaW5bc3RybWF0XS51bm9faW5xdWV1ZSwgY29udHJv
bCwgbmV4dF9pbnN0cm0pOworCQkJCWNvbnRyb2wtPm9uX3N0cm1fcSA9IDA7CisJCQkJaWYgKGNv
bnRyb2wtPmRhdGEpIHsKKwkJCQkJc2N0cF9tX2ZyZWVtKGNvbnRyb2wtPmRhdGEpOworCQkJCQlj
b250cm9sLT5kYXRhID0gTlVMTDsKKwkJCQl9CisJCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNv
bnRyb2wtPndob0Zyb20pOworCQkJCS8qIE5vdyBpdHMgcmVhc20/ICovCisJCQkJVEFJTFFfRk9S
RUFDSF9TQUZFKGNoaywgJmNvbnRyb2wtPnJlYXNtLCBzY3RwX25leHQsIG5jaGspIHsKKwkJCQkJ
Y250Kys7CisJCQkJCVNDVFBfQ0FMQ19UU05fVE9fR0FQKGdhcCwgY2hrLT5yZWMuZGF0YS50c24s
IGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24pOworCQkJCQlLQVNTRVJUKGNoay0+c2VuZF9z
aXplID4gMCwgKCJjaHVuayBoYXMgemVybyBsZW5ndGgiKSk7CisJCQkJCWlmIChhc29jLT5zaXpl
X29uX3JlYXNtX3F1ZXVlID49IGNoay0+c2VuZF9zaXplKSB7CisJCQkJCQlhc29jLT5zaXplX29u
X3JlYXNtX3F1ZXVlIC09IGNoay0+c2VuZF9zaXplOworCQkJCQl9IGVsc2UgeworI2lmZGVmIElO
VkFSSUFOVFMKKwkJCQkJCXBhbmljKCJzaXplX29uX3JlYXNtX3F1ZXVlID0gJXUgc21hbGxlciB0
aGFuIGNodW5rIGxlbmd0aCAldSIsIGFzb2MtPnNpemVfb25fcmVhc21fcXVldWUsIGNoay0+c2Vu
ZF9zaXplKTsKKyNlbHNlCisJCQkJCQlhc29jLT5zaXplX29uX3JlYXNtX3F1ZXVlID0gMDsKKyNl
bmRpZgorCQkJCQl9CisJCQkJCXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+Y250X29uX3JlYXNtX3F1
ZXVlKTsKKwkJCQkJU0NUUF9VTlNFVF9UU05fUFJFU0VOVChhc29jLT5tYXBwaW5nX2FycmF5LCBn
YXApOworCQkJCQlUQUlMUV9SRU1PVkUoJmNvbnRyb2wtPnJlYXNtLCBjaGssIHNjdHBfbmV4dCk7
CisJCQkJCWlmIChjaGstPmRhdGEpIHsKKwkJCQkJCXNjdHBfbV9mcmVlbShjaGstPmRhdGEpOwor
CQkJCQkJY2hrLT5kYXRhID0gTlVMTDsKKwkJCQkJfQorCQkJCQlzY3RwX2ZyZWVfYV9jaHVuayhz
dGNiLCBjaGssIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQkJfQorCQkJCXNjdHBfZnJlZV9hX3Jl
YWRxKHN0Y2IsIGNvbnRyb2wpOworCQkJfQorCQl9CisJfQorCWlmIChjbnQpIHsKKwkJLyogV2Ug
bXVzdCBiYWNrIGRvd24gdG8gc2VlIHdoYXQgdGhlIG5ldyBoaWdoZXN0IGlzICovCisJCWZvciAo
aSA9IGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXA7IFNDVFBfVFNOX0dFKGksIGFzb2MtPm1h
cHBpbmdfYXJyYXlfYmFzZV90c24pOyBpLS0pIHsKKwkJCVNDVFBfQ0FMQ19UU05fVE9fR0FQKGdh
cCwgaSwgYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3Rzbik7CisJCQlpZiAoU0NUUF9JU19UU05f
UFJFU0VOVChhc29jLT5tYXBwaW5nX2FycmF5LCBnYXApKSB7CisJCQkJYXNvYy0+aGlnaGVzdF90
c25faW5zaWRlX21hcCA9IGk7CisJCQkJZm5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQor
CQlpZiAoIWZuZCkgeworCQkJYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCA9IGFzb2MtPm1h
cHBpbmdfYXJyYXlfYmFzZV90c24gLSAxOworCQl9CisKKwkJLyoKKwkJICogUXVlc3Rpb24sIHNo
b3VsZCB3ZSBnbyB0aHJvdWdoIHRoZSBkZWxpdmVyeSBxdWV1ZT8gVGhlIG9ubHkKKwkJICogcmVh
c29uIHRoaW5ncyBhcmUgb24gaGVyZSBpcyB0aGUgYXBwIG5vdCByZWFkaW5nIE9SIGEgcC1kLWFw
aSB1cC4KKwkJICogQW4gYXR0YWNrZXIgQ09VTEQgc2VuZCBlbm91Z2ggaW4gdG8gaW5pdGlhdGUg
dGhlIFBELUFQSSBhbmQgdGhlbgorCQkgKiBzZW5kIGEgYnVuY2ggb2Ygc3R1ZmYgdG8gb3RoZXIg
c3RyZWFtcy4uLiB0aGVzZSB3b3VsZCB3aW5kIHVwIG9uCisJCSAqIHRoZSBkZWxpdmVyeSBxdWV1
ZS4uIGFuZCB0aGVuIHdlIHdvdWxkIG5vdCBnZXQgdG8gdGhlbS4gQnV0IGluCisJCSAqIG9yZGVy
IHRvIGRvIHRoaXMgSSB0aGVuIGhhdmUgdG8gYmFjay10cmFjayBhbmQgdW4tZGVsaXZlcgorCQkg
KiBzZXF1ZW5jZSBudW1iZXJzIGluIHN0cmVhbXMuLiBlbC15dWNrby4gSSB0aGluayBmb3Igbm93
IHdlIHdpbGwKKwkJICogTk9UIGxvb2sgYXQgdGhlIGRlbGl2ZXJ5IHF1ZXVlIGFuZCBsZWF2ZSBp
dCB0byBiZSBzb21ldGhpbmcgdG8KKwkJICogY29uc2lkZXIgbGF0ZXIuIEFuIGFsdGVybmF0aXZl
IHdvdWxkIGJlIHRvIGFib3J0IHRoZSBQLUQtQVBJIHdpdGgKKwkJICogYSBub3RpZmljYXRpb24g
YW5kIHRoZW4gZGVsaXZlciB0aGUgZGF0YS4uLi4gT3IgYW5vdGhlciBtZXRob2QKKwkJICogbWln
aHQgYmUgdG8ga2VlcCB0cmFjayBvZiBob3cgbWFueSB0aW1lcyB0aGUgc2l0dWF0aW9uIG9jY3Vy
cyBhbmQKKwkJICogaWYgd2Ugc2VlIGEgcG9zc2libGUgYXR0YWNrIHVuZGVyd2F5IGp1c3QgYWJv
cnQgdGhlIGFzc29jaWF0aW9uLgorCQkgKi8KKyNpZmRlZiBTQ1RQX0RFQlVHCisJCVNDVFBEQkco
U0NUUF9ERUJVR19QQ0IxLCAiRnJlZWQgJWQgY2h1bmtzIGZyb20gcmVuZWcgaGFydmVzdFxuIiwg
Y250KTsKKyNlbmRpZgorCQkvKgorCQkgKiBOb3cgZG8gd2UgbmVlZCB0byBmaW5kIGEgbmV3CisJ
CSAqIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXA/CisJCSAqLworCQlhc29jLT5sYXN0X3Jl
dm9rZV9jb3VudCA9IGNudDsKKwkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9SRUNW
LCBzdGNiLT5zY3RwX2VwLCBzdGNiLCBOVUxMLAorCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9N
X1NDVFBfUENCICsgU0NUUF9MT0NfMTEpOworCQkvKnNhX2lnbm9yZSBOT19OVUxMX0NISyovCisJ
CXNjdHBfc2VuZF9zYWNrKHN0Y2IsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCXNjdHBfY2h1bmtf
b3V0cHV0KHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fRFJBSU4sIFNDVFBf
U09fTk9UX0xPQ0tFRCk7CisJfQorCS8qCisJICogQW5vdGhlciBpc3N1ZSwgaW4gdW4tc2V0dGlu
ZyB0aGUgVFNOJ3MgaW4gdGhlIG1hcHBpbmcgYXJyYXkgd2UKKwkgKiBESUQgTk9UIGFkanVzdCB0
aGUgaGlnaGVzdF90c24gbWFya2VyLiAgVGhpcyB3aWxsIGNhdXNlIG9uZSBvZiB0d28KKwkgKiB0
aGluZ3MgdG8gb2NjdXIuIEl0IG1heSBjYXVzZSB1cyB0byBkbyBleHRyYSB3b3JrIGluIGNoZWNr
aW5nIGZvcgorCSAqIG91ciBtYXBwaW5nIGFycmF5IG1vdmVtZW50LiBNb3JlIGltcG9ydGFudGx5
IGl0IG1heSBjYXVzZSB1cyB0bworCSAqIFNBQ0sgZXZlcnkgZGF0YWdyYW0uIFRoaXMgbWF5IG5v
dCBiZSBhIGJhZCB0aGluZyB0aG91Z2ggc2luY2Ugd2UKKwkgKiB3aWxsIHJlY292ZXIgb25jZSB3
ZSBnZXQgb3VyIGN1bS1hY2sgYWJvdmUgYW5kIGFsbCB0aGlzIHN0dWZmIHdlCisJICogZHVtcGVk
IHJlY292ZXJlZC4KKwkgKi8KK30KKwordm9pZAorc2N0cF9kcmFpbih2b2lkKQoreworCS8qCisJ
ICogV2UgbXVzdCB3YWxrIHRoZSBQQ0IgbGlzdHMgZm9yIEFMTCBhc3NvY2lhdGlvbnMgaGVyZS4g
VGhlIHN5c3RlbQorCSAqIGlzIExPVyBvbiBNQlVGJ3MgYW5kIG5lZWRzIGhlbHAuIFRoaXMgaXMg
d2hlcmUgcmVuZWdpbmcgd2lsbAorCSAqIG9jY3VyLiBXZSByZWFsbHkgaG9wZSB0aGlzIGRvZXMg
Tk9UIGhhcHBlbiEKKwkgKi8KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorCVZORVRfSVRFUkFUT1JfREVDTCh2bmV0X2l0ZXIpOworI2Vsc2UKKwlz
dHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKKworCVNDVFBf
U1RBVF9JTkNSKHNjdHBzX3Byb3RvY29sX2RyYWluX2NhbGxzKTsKKwlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2RvX2RyYWluKSA9PSAwKSB7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCVZORVRfTElT
VF9STE9DS19OT1NMRUVQKCk7CisJVk5FVF9GT1JFQUNIKHZuZXRfaXRlcikgeworCQlDVVJWTkVU
X1NFVCh2bmV0X2l0ZXIpOworCQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCQlzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2I7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Byb3RvY29sX2RyYWlu
X2NhbGxzKTsKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kb19kcmFpbikgPT0gMCkgewor
I2lmZGVmIFZJTUFHRQorCQkJY29udGludWU7CisjZWxzZQorCQkJcmV0dXJuOworI2VuZGlmCisJ
CX0KKyNlbmRpZgorCQlTQ1RQX0lOUF9JTkZPX1JMT0NLKCk7CisJCUxJU1RfRk9SRUFDSChpbnAs
ICZTQ1RQX0JBU0VfSU5GTyhsaXN0aGVhZCksIHNjdHBfbGlzdCkgeworCQkJLyogRm9yIGVhY2gg
ZW5kcG9pbnQgKi8KKwkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQlMSVNUX0ZPUkVBQ0goc3Rj
YiwgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlzdCkgeworCQkJCS8qIEZvciBlYWNo
IGFzc29jaWF0aW9uICovCisJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQlzY3RwX2RyYWlu
X21idWZzKHN0Y2IpOworCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCX0KKwkJCVNDVFBf
SU5QX1JVTkxPQ0soaW5wKTsKKwkJfQorCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlDVVJWTkVU
X1JFU1RPUkUoKTsKKwl9CisJVk5FVF9MSVNUX1JVTkxPQ0tfTk9TTEVFUCgpOworI2VuZGlmCit9
CisKKy8qCisgKiBzdGFydCBhIG5ldyBpdGVyYXRvcgorICogaXRlcmF0ZXMgdGhyb3VnaCBhbGwg
ZW5kcG9pbnRzIGFuZCBhc3NvY2lhdGlvbnMgYmFzZWQgb24gdGhlIHBjYl9zdGF0ZQorICogZmxh
Z3MgYW5kIGFzb2Nfc3RhdGUuICAiYWYiIChtYW5kYXRvcnkpIGlzIGV4ZWN1dGVkIGZvciBhbGwg
bWF0Y2hpbmcKKyAqIGFzc29jcyBhbmQgImVmIiAob3B0aW9uYWwpIGlzIGV4ZWN1dGVkIHdoZW4g
dGhlIGl0ZXJhdG9yIGNvbXBsZXRlcy4KKyAqICJpbnBmIiAob3B0aW9uYWwpIGlzIGV4ZWN1dGVk
IGZvciBlYWNoIG5ldyBlbmRwb2ludCBhcyBpdCBpcyBiZWluZworICogaXRlcmF0ZWQgdGhyb3Vn
aC4gaW5wZSAob3B0aW9uYWwpIGlzIGNhbGxlZCB3aGVuIHRoZSBpbnAgY29tcGxldGVzCisgKiBp
dHMgd2F5IHRocm91Z2ggYWxsIHRoZSBzdGNicy4KKyAqLworaW50CitzY3RwX2luaXRpYXRlX2l0
ZXJhdG9yKGlucF9mdW5jIGlucGYsCisJCSAgICAgICBhc29jX2Z1bmMgYWYsCisJCSAgICAgICBp
bnBfZnVuYyBpbnBlLAorCQkgICAgICAgdWludDMyX3QgcGNiX3N0YXRlLAorCQkgICAgICAgdWlu
dDMyX3QgcGNiX2ZlYXR1cmVzLAorCQkgICAgICAgdWludDMyX3QgYXNvY19zdGF0ZSwKKwkJICAg
ICAgIHZvaWQgKmFyZ3AsCisJCSAgICAgICB1aW50MzJfdCBhcmdpLAorCQkgICAgICAgZW5kX2Z1
bmMgZWYsCisJCSAgICAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqc19pbnAsCisJCSAgICAgICB1aW50
OF90IGNodW5rX291dHB1dF9vZmYpCit7CisJc3RydWN0IHNjdHBfaXRlcmF0b3IgKml0ID0gTlVM
TDsKKworCWlmIChhZiA9PSBOVUxMKSB7CisJCXJldHVybiAoLTEpOworCX0KKwlpZiAoU0NUUF9C
QVNFX1ZBUihzY3RwX3BjYl9pbml0aWFsaXplZCkgPT0gMCkgeworCQlTQ1RQX1BSSU5URigiJXM6
IGFib3J0IG9uIGluaXRpYWxpemUgYmVpbmcgJWRcbiIsIF9fZnVuY19fLAorCQkgICAgICAgICAg
ICBTQ1RQX0JBU0VfVkFSKHNjdHBfcGNiX2luaXRpYWxpemVkKSk7CisJCXJldHVybiAoLTEpOwor
CX0KKwlTQ1RQX01BTExPQyhpdCwgc3RydWN0IHNjdHBfaXRlcmF0b3IgKiwgc2l6ZW9mKHN0cnVj
dCBzY3RwX2l0ZXJhdG9yKSwKKwkJICAgIFNDVFBfTV9JVEVSKTsKKwlpZiAoaXQgPT0gTlVMTCkg
eworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1BDQiwgRU5PTUVNKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCW1lbXNldChpdCwgMCwgc2l6ZW9m
KCppdCkpOworCWl0LT5mdW5jdGlvbl9hc3NvYyA9IGFmOworCWl0LT5mdW5jdGlvbl9pbnAgPSBp
bnBmOworCWlmIChpbnBmKQorCQlpdC0+ZG9uZV9jdXJyZW50X2VwID0gMDsKKwllbHNlCisJCWl0
LT5kb25lX2N1cnJlbnRfZXAgPSAxOworCWl0LT5mdW5jdGlvbl9hdGVuZCA9IGVmOworCWl0LT5w
b2ludGVyID0gYXJncDsKKwlpdC0+dmFsID0gYXJnaTsKKwlpdC0+cGNiX2ZsYWdzID0gcGNiX3N0
YXRlOworCWl0LT5wY2JfZmVhdHVyZXMgPSBwY2JfZmVhdHVyZXM7CisJaXQtPmFzb2Nfc3RhdGUg
PSBhc29jX3N0YXRlOworCWl0LT5mdW5jdGlvbl9pbnBfZW5kID0gaW5wZTsKKwlpdC0+bm9fY2h1
bmtfb3V0cHV0ID0gY2h1bmtfb3V0cHV0X29mZjsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAm
JiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWl0LT52biA9IGN1cnZuZXQ7CisjZW5kaWYKKwlp
ZiAoc19pbnApIHsKKwkJLyogQXNzdW1lIGxvY2sgaXMgaGVsZCBoZXJlICovCisJCWl0LT5pbnAg
PSBzX2lucDsKKwkJU0NUUF9JTlBfSU5DUl9SRUYoaXQtPmlucCk7CisJCWl0LT5pdGVyYXRvcl9m
bGFncyA9IFNDVFBfSVRFUkFUT1JfRE9fU0lOR0xFX0lOUDsKKwl9IGVsc2UgeworCQlTQ1RQX0lO
UF9JTkZPX1JMT0NLKCk7CisJCWl0LT5pbnAgPSBMSVNUX0ZJUlNUKCZTQ1RQX0JBU0VfSU5GTyhs
aXN0aGVhZCkpOworCQlpZiAoaXQtPmlucCkgeworCQkJU0NUUF9JTlBfSU5DUl9SRUYoaXQtPmlu
cCk7CisJCX0KKwkJU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7CisJCWl0LT5pdGVyYXRvcl9mbGFn
cyA9IFNDVFBfSVRFUkFUT1JfRE9fQUxMX0lOUDsKKwl9CisJU0NUUF9JUElfSVRFUkFUT1JfV1Ff
TE9DSygpOworCWlmIChTQ1RQX0JBU0VfVkFSKHNjdHBfcGNiX2luaXRpYWxpemVkKSA9PSAwKSB7
CisJCVNDVFBfSVBJX0lURVJBVE9SX1dRX1VOTE9DSygpOworCQlTQ1RQX1BSSU5URigiJXM6IHJv
bGxiYWNrIG9uIGluaXRpYWxpemUgYmVpbmcgJWQgaXQ9JXBcbiIsIF9fZnVuY19fLAorCQkgICAg
ICAgICAgICBTQ1RQX0JBU0VfVkFSKHNjdHBfcGNiX2luaXRpYWxpemVkKSwgaXQpOworCQlTQ1RQ
X0ZSRUUoaXQsIFNDVFBfTV9JVEVSKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCVRBSUxRX0lOU0VS
VF9UQUlMKCZzY3RwX2l0X2N0bC5pdGVyYXRvcmhlYWQsIGl0LCBzY3RwX254dF9pdHIpOworCWlm
IChzY3RwX2l0X2N0bC5pdGVyYXRvcl9ydW5uaW5nID09IDApIHsKKwkJc2N0cF93YWtldXBfaXRl
cmF0b3IoKTsKKwl9CisJU0NUUF9JUElfSVRFUkFUT1JfV1FfVU5MT0NLKCk7CisJLyogc2FfaWdu
b3JlIE1FTUxFQUsge21lbW9yeSBpcyBwdXQgb24gdGhlIHRhaWxxIGZvciB0aGUgaXRlcmF0b3J9
ICovCisJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX3BjYi5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcGNiLmgK
bmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwLi4wMzgyNDMwZDIyZGEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wY2IuaApA
QCAtMCwwICsxLDg2OCBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMt
Q2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBi
eSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMp
IDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp
Y2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0
aW5ldC9zY3RwX3BjYi5oIDM2NTA3MSAyMDIwLTA5LTAxIDIxOjE5OjE0WiBtamcgJCIpOworI2Vu
ZGlmCisKKyNpZm5kZWYgX05FVElORVRfU0NUUF9QQ0JfSF8KKyNkZWZpbmUgX05FVElORVRfU0NU
UF9QQ0JfSF8KKworI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vcy5oPgorI2luY2x1ZGUgPG5ldGlu
ZXQvc2N0cC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9jb25zdGFudHMuaD4KKyNpbmNsdWRl
IDxuZXRpbmV0L3NjdHBfc3lzY3RsLmg+CisKK0xJU1RfSEVBRChzY3RwcGNiaGVhZCwgc2N0cF9p
bnBjYik7CitMSVNUX0hFQUQoc2N0cGFzb2NoZWFkLCBzY3RwX3RjYik7CitMSVNUX0hFQUQoc2N0
cGxhZGRyLCBzY3RwX2xhZGRyKTsKK0xJU1RfSEVBRChzY3RwdnRhZ2hlYWQsIHNjdHBfdGFnYmxv
Y2spOworTElTVF9IRUFEKHNjdHBfdnJmbGlzdCwgc2N0cF92cmYpOworTElTVF9IRUFEKHNjdHBf
aWZubGlzdCwgc2N0cF9pZm4pOworTElTVF9IRUFEKHNjdHBfaWZhbGlzdCwgc2N0cF9pZmEpOwor
VEFJTFFfSEVBRChzY3RwX3JlYWRoZWFkLCBzY3RwX3F1ZXVlZF90b19yZWFkKTsKK1RBSUxRX0hF
QUQoc2N0cF9zdHJlYW1oZWFkLCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nKTsKKworI2luY2x1
ZGUgPG5ldGluZXQvc2N0cF9zdHJ1Y3RzLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2F1dGgu
aD4KKworI2RlZmluZSBTQ1RQX1BDQkhBU0hfQUxMQUREUihwb3J0LCBtYXNrKSAocG9ydCAmIG1h
c2spCisjZGVmaW5lIFNDVFBfUENCSEFTSF9BU09DKHRhZywgbWFzaykgKHRhZyAmIG1hc2spCisK
K3N0cnVjdCBzY3RwX3ZyZiB7CisJTElTVF9FTlRSWSAoc2N0cF92cmYpIG5leHRfdnJmOworCXN0
cnVjdCBzY3RwX2lmYWxpc3QgKnZyZl9hZGRyX2hhc2g7CisJc3RydWN0IHNjdHBfaWZubGlzdCBp
Zm5saXN0OworCXVpbnQzMl90IHZyZl9pZDsKKwl1aW50MzJfdCB0YmxfaWRfdjQ7CQkvKiBkZWZh
dWx0IHY0IHRhYmxlIGlkICovCisJdWludDMyX3QgdGJsX2lkX3Y2OwkJLyogZGVmYXVsdCB2NiB0
YWJsZSBpZCAqLworCXVpbnQzMl90IHRvdGFsX2lmYV9jb3VudDsKKwl1X2xvbmcgICB2cmZfYWRk
cl9oYXNobWFyazsKKwl1aW50MzJfdCByZWZjb3VudDsKK307CisKK3N0cnVjdCBzY3RwX2lmbiB7
CisJc3RydWN0IHNjdHBfaWZhbGlzdCBpZmFsaXN0OworCXN0cnVjdCBzY3RwX3ZyZiAqdnJmOwor
CUxJU1RfRU5UUlkoc2N0cF9pZm4pIG5leHRfaWZuOworCUxJU1RfRU5UUlkoc2N0cF9pZm4pIG5l
eHRfYnVja2V0OworCXZvaWQgICAgICppZm5fcDsJLyogbmV2ZXIgYWNjZXNzIHdpdGhvdXQgYXBw
cm9wcmlhdGUgbG9jayAqLworCXVpbnQzMl90IGlmbl9tdHU7CisJdWludDMyX3QgaWZuX3R5cGU7
CisJdWludDMyX3QgaWZuX2luZGV4OwkvKiBzaG9ydGhhbmQgd2F5IHRvIGxvb2sgYXQgaWZuIGZv
ciByZWZlcmVuY2UgKi8KKwl1aW50MzJfdCByZWZjb3VudDsJLyogbnVtYmVyIG9mIHJlZmVyZW5j
ZSBoZWxkIHNob3VsZCBiZSA+PSBpZmFfY291bnQgKi8KKwl1aW50MzJfdCBpZmFfY291bnQ7CS8q
IElGQSdzIHdlIGhvbGQgKGluIG91ciBsaXN0IC0gaWZhbGlzdCkqLworCXVpbnQzMl90IG51bV92
NjsJLyogbnVtYmVyIG9mIHY2IGFkZHJlc3NlcyAqLworCXVpbnQzMl90IG51bV92NDsJLyogbnVt
YmVyIG9mIHY0IGFkZHJlc3NlcyAqLworCXVpbnQzMl90IHJlZ2lzdGVyZWRfYWY7CS8qIHJlZ2lz
dGVyZWQgYWRkcmVzcyBmYW1pbHkgZm9yIGkvZiBldmVudHMgKi8KKwljaGFyICAgICBpZm5fbmFt
ZVtTQ1RQX0lGTkFNU0laXTsKK307CisKKy8qIFNDVFAgbG9jYWwgSUZBIGZsYWdzICovCisjZGVm
aW5lIFNDVFBfQUREUl9WQUxJRCAgICAgICAgIDB4MDAwMDAwMDEJLyogaXRzIHVwIGFuZCBhY3Rp
dmUgKi8KKyNkZWZpbmUgU0NUUF9CRUlOR19ERUxFVEVEICAgICAgMHgwMDAwMDAwMgkvKiBiZWlu
ZyBkZWxldGVkLAorCQkJCQkJICogd2hlbiByZWZjb3VudCA9IDAuIE5vdGUKKwkJCQkJCSAqIHRo
YXQgaXQgaXMgcHVsbGVkIGZyb20gdGhlIGlmbiBsaXN0CisJCQkJCQkgKiBhbmQgaWZhX3AgaXMg
bnVsbGVkIHJpZ2h0IGF3YXkgYnV0CisJCQkJCQkgKiBpdCBjYW5ub3QgYmUgZnJlZWQgdW50aWwg
dGhlIGxhc3QgKm5ldAorCQkJCQkJICogcG9pbnRpbmcgdG8gaXQgaXMgZGVsZXRlZC4KKwkJCQkJ
CSAqLworI2RlZmluZSBTQ1RQX0FERFJfREVGRVJfVVNFICAgICAweDAwMDAwMDA0CS8qIEhvbGQg
b2ZmIHVzaW5nIHRoaXMgb25lICovCisjZGVmaW5lIFNDVFBfQUREUl9JRkFfVU5VU0VBQkxFIDB4
MDAwMDAwMDgKKworc3RydWN0IHNjdHBfaWZhIHsKKwlMSVNUX0VOVFJZKHNjdHBfaWZhKSBuZXh0
X2lmYTsKKwlMSVNUX0VOVFJZKHNjdHBfaWZhKSBuZXh0X2J1Y2tldDsKKwlzdHJ1Y3Qgc2N0cF9p
Zm4gKmlmbl9wOwkvKiBiYWNrIHBvaW50ZXIgdG8gcGFyZW50IGlmbiAqLworCXZvaWQgICAgKmlm
YTsJCS8qIHBvaW50ZXIgdG8gaWZhLCBuZWVkZWQgZm9yIGZsYWcKKwkJCQkgKiB1cGRhdGUgZm9y
IHRoYXQgd2UgTVVTVCBsb2NrCisJCQkJICogYXBwcm9wcmlhdGUgbG9ja3MuIFRoaXMgaXMgZm9y
IFY2LgorCQkJCSAqLworCXVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHJlc3M7CisJdWludDMyX3Qg
cmVmY291bnQ7CS8qIG51bWJlciBvZiBmb2xrcyByZWZlcnJpbmcgdG8gdGhpcyAqLworCXVpbnQz
Ml90IGZsYWdzOworCXVpbnQzMl90IGxvY2FsaWZhX2ZsYWdzOworCXVpbnQzMl90IHZyZl9pZDsJ
LyogdnJmX2lkIG9mIHRoaXMgYWRkciAoZm9yIGRlbGV0aW5nKSAqLworCXVpbnQ4X3Qgc3JjX2lz
X2xvb3A7CisJdWludDhfdCBzcmNfaXNfcHJpdjsKKwl1aW50OF90IHNyY19pc19nbG9iOworCXVp
bnQ4X3QgcmVzdjsKK307CisKK3N0cnVjdCBzY3RwX2xhZGRyIHsKKwlMSVNUX0VOVFJZKHNjdHBf
bGFkZHIpIHNjdHBfbnh0X2FkZHI7CS8qIG5leHQgaW4gbGlzdCAqLworCXN0cnVjdCBzY3RwX2lm
YSAqaWZhOworCXVpbnQzMl90IGFjdGlvbjsJCS8qIFVzZWQgZHVyaW5nIGFzY29uZiBhbmQgYWRk
aW5nCisJCQkJCSAqIGlmIG5vLXplcm8gc3JjLWFkZHIgc2VsZWN0aW9uIHdpbGwKKwkJCQkJICog
bm90IGNvbnNpZGVyIHRoaXMgYWRkcmVzcy4KKwkJCQkJICovCisJc3RydWN0IHRpbWV2YWwgc3Rh
cnRfdGltZTsgICAgICAvKiB0aW1lIHdoZW4gdGhpcyBhZGRyZXNzIHdhcyBjcmVhdGVkICovCit9
OworCitzdHJ1Y3Qgc2N0cF9ibG9ja19lbnRyeSB7CisJaW50IGVycm9yOworfTsKKworc3RydWN0
IHNjdHBfdGltZXdhaXQgeworCXVpbnQzMl90IHR2X3NlY19hdF9leHBpcmU7CS8qIHRoZSBzZWNv
bmRzIGZyb20gYm9vdCB0byBleHBpcmUgKi8KKyAgICAgICAgdWludDMyX3Qgdl90YWc7CQkgICAg
ICAgIC8qIHRoZSB2dGFnIHRoYXQgY2FuIG5vdCBiZSByZXVzZWQgKi8KKyAgICAgICAgdWludDE2
X3QgbHBvcnQ7ICAgICAgICAgICAgICAgICAvKiB0aGUgbG9jYWwgcG9ydCB1c2VkIGluIHZ0YWcg
Ki8KKyAgICAgICAgdWludDE2X3QgcnBvcnQ7ICAgICAgICAgICAgICAgICAvKiB0aGUgcmVtb3Rl
IHBvcnQgdXNlZCBpbiB2dGFnICovCit9OworCitzdHJ1Y3Qgc2N0cF90YWdibG9jayB7CisJTElT
VF9FTlRSWShzY3RwX3RhZ2Jsb2NrKSBzY3RwX254dF90YWdibG9jazsKKwlzdHJ1Y3Qgc2N0cF90
aW1ld2FpdCB2dGFnX2Jsb2NrW1NDVFBfTlVNQkVSX0lOX1ZUQUdfQkxPQ0tdOworfTsKKworc3Ry
dWN0IHNjdHBfZXBpbmZvIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorI2lmZGVmIElORVQKKwlzdHJ1Y3Qgc29ja2V0ICp1ZHA0X3R1bl9zb2Nr
ZXQ7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCXN0cnVjdCBzb2NrZXQgKnVkcDZfdHVuX3NvY2tl
dDsKKyNlbmRpZgorI2VuZGlmCisJc3RydWN0IHNjdHBhc29jaGVhZCAqc2N0cF9hc29jaGFzaDsK
Kwl1X2xvbmcgaGFzaGFzb2NtYXJrOworCisJc3RydWN0IHNjdHBwY2JoZWFkICpzY3RwX2VwaGFz
aDsKKwl1X2xvbmcgaGFzaG1hcms7CisKKwkvKi0KKwkgKiBUaGUgVENQIG1vZGVsIHJlcHJlc2Vu
dHMgYSBzdWJzdGFudGlhbCBvdmVyaGVhZCBpbiB0aGF0IHdlIGdldCBhbgorCSAqIGFkZGl0aW9u
YWwgaGFzaCB0YWJsZSB0byBrZWVwIGV4cGxpY2l0IGNvbm5lY3Rpb25zIGluLiBUaGUKKwkgKiBs
aXN0ZW5pbmcgVENQIGVuZHBvaW50IHdpbGwgZXhpc3QgaW4gdGhlIHVzdWFsIGVwaGFzaCBhYm92
ZSBhbmQKKwkgKiBhY2NlcHQgb25seSBJTklUJ3MuIEl0IHdpbGwgYmUgaW5jYXBhYmxlIG9mIHNl
bmRpbmcgb2ZmIGFuIElOSVQuCisJICogV2hlbiBhIGRnIGFycml2ZXMgd2UgbXVzdCBsb29rIGlu
IHRoZSBub3JtYWwgZXBoYXNoLiBJZiB3ZSBmaW5kIGEKKwkgKiBUQ1AgZW5kcG9pbnQgdGhhdCB3
aWxsIHRlbGwgdXMgdG8gZ28gdG8gdGhlIHNwZWNpZmljIGVuZHBvaW50CisJICogaGFzaCBhbmQg
cmUtaGFzaCB0byBmaW5kIHRoZSByaWdodCBhc3NvYy9zb2NrZXQuIElmIHdlIGZpbmQgYSBVRFAK
KwkgKiBtb2RlbCBzb2NrZXQgd2UgdGhlbiBtdXN0IGNvbXBsZXRlIHRoZSBsb29rdXAuIElmIHRo
aXMgZmFpbHMsCisJICogaS5lLiBubyBhc3NvY2lhdGlvbiBjYW4gYmUgZm91bmQgdGhlbiB3ZSBt
dXN0IGNvbnRpbnVlIHRvIHNlZSBpZgorCSAqIGEgc2N0cF9wZWVsb2ZmKCknZCBzb2NrZXQgaXMg
aW4gdGhlIHRjcGVwaGFzaCAoYSBzcHVuIG9mZiBzb2NrZXQKKwkgKiBhY3RzIGxpa2UgYSBUQ1Ag
bW9kZWwgY29ubmVjdGVkIHNvY2tldCkuCisJICovCisJc3RydWN0IHNjdHBwY2JoZWFkICpzY3Rw
X3RjcGVwaGFzaDsKKwl1X2xvbmcgaGFzaHRjcG1hcms7CisJdWludDMyX3QgaGFzaHRibHNpemU7
CisKKwlzdHJ1Y3Qgc2N0cF92cmZsaXN0ICpzY3RwX3ZyZmhhc2g7CisJdV9sb25nIGhhc2h2cmZt
YXJrOworCisJc3RydWN0IHNjdHBfaWZubGlzdCAqdnJmX2lmbl9oYXNoOworCXVfbG9uZyAgIHZy
Zl9pZm5faGFzaG1hcms7CisKKwlzdHJ1Y3Qgc2N0cHBjYmhlYWQgbGlzdGhlYWQ7CisJc3RydWN0
IHNjdHBsYWRkciBhZGRyX3dxOworCisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCisJc3RydWN0IGlucGNiaGVhZCBpbnBsaXN0aGVhZDsKKwlzdHJ1Y3Qg
aW5wY2JpbmZvIHNjdGJpbmZvOworI2VuZGlmCisJLyogZXAgem9uZSBpbmZvICovCisJc2N0cF96
b25lX3QgaXBpX3pvbmVfZXA7CisJc2N0cF96b25lX3QgaXBpX3pvbmVfYXNvYzsKKwlzY3RwX3pv
bmVfdCBpcGlfem9uZV9sYWRkcjsKKwlzY3RwX3pvbmVfdCBpcGlfem9uZV9uZXQ7CisJc2N0cF96
b25lX3QgaXBpX3pvbmVfY2h1bms7CisJc2N0cF96b25lX3QgaXBpX3pvbmVfcmVhZHE7CisJc2N0
cF96b25lX3QgaXBpX3pvbmVfc3RybW9xOworCXNjdHBfem9uZV90IGlwaV96b25lX2FzY29uZjsK
KwlzY3RwX3pvbmVfdCBpcGlfem9uZV9hc2NvbmZfYWNrOworCisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlzdHJ1Y3Qgcndsb2NrIGlwaV9lcF9t
dHg7CisJc3RydWN0IG10eCBpcGlfaXRlcmF0b3Jfd3FfbXR4OworCXN0cnVjdCByd2xvY2sgaXBp
X2FkZHJfbXR4OworCXN0cnVjdCBtdHggaXBpX3BrdGxvZ19tdHg7CisJc3RydWN0IG10eCB3cV9h
ZGRyX210eDsKKyNlbGlmIGRlZmluZWQoU0NUUF9QUk9DRVNTX0xFVkVMX0xPQ0tTKQorCXVzZXJs
YW5kX211dGV4X3QgaXBpX2VwX210eDsKKwl1c2VybGFuZF9tdXRleF90IGlwaV9hZGRyX210eDsK
Kwl1c2VybGFuZF9tdXRleF90IGlwaV9jb3VudF9tdHg7CisJdXNlcmxhbmRfbXV0ZXhfdCBpcGlf
cGt0bG9nX210eDsKKwl1c2VybGFuZF9tdXRleF90IHdxX2FkZHJfbXR4OworI2VsaWYgZGVmaW5l
ZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWZkZWYgX0tFUk5fTE9D
S1NfSF8KKwlsY2tfbXR4X3QgKmlwaV9hZGRyX210eDsKKwlsY2tfbXR4X3QgKmlwaV9jb3VudF9t
dHg7CisJbGNrX210eF90ICppcGlfcGt0bG9nX210eDsKKwlsY2tfbXR4X3QgKmxvZ2dpbmdfbXR4
OworCWxja19tdHhfdCAqd3FfYWRkcl9tdHg7CisjZWxzZQorCXZvaWQgKmlwaV9jb3VudF9tdHg7
CisJdm9pZCAqbG9nZ2luZ19tdHg7CisjZW5kaWYgLyogX0tFUk5fTE9DS1NfSF8gKi8KKyNlbGlm
IGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXN0cnVjdCByd2xv
Y2sgaXBpX2VwX2xvY2s7CisJc3RydWN0IHJ3bG9jayBpcGlfYWRkcl9sb2NrOworCXN0cnVjdCBz
cGlubG9jayBpcGlfcGt0bG9nX210eDsKKwlzdHJ1Y3Qgcndsb2NrIHdxX2FkZHJfbXR4OworI2Vs
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2VuZGlmCisJdWludDMyX3QgaXBpX2NvdW50X2Vw
OworCisJLyogYXNzb2MvdGNiIHpvbmUgaW5mbyAqLworCXVpbnQzMl90IGlwaV9jb3VudF9hc29j
OworCisJLyogbG9jYWwgYWRkcmxpc3Qgem9uZSBpbmZvICovCisJdWludDMyX3QgaXBpX2NvdW50
X2xhZGRyOworCisJLyogcmVtb3RlIGFkZHJsaXN0IHpvbmUgaW5mbyAqLworCXVpbnQzMl90IGlw
aV9jb3VudF9yYWRkcjsKKworCS8qIGNodW5rIHN0cnVjdHVyZSBsaXN0IGZvciBvdXRwdXQgKi8K
Kwl1aW50MzJfdCBpcGlfY291bnRfY2h1bms7CisKKwkvKiBzb2NrZXQgcXVldWUgem9uZSBpbmZv
ICovCisJdWludDMyX3QgaXBpX2NvdW50X3JlYWRxOworCisJLyogc29ja2V0IHF1ZXVlIHpvbmUg
aW5mbyAqLworCXVpbnQzMl90IGlwaV9jb3VudF9zdHJtb3E7CisKKwkvKiBOdW1iZXIgb2YgdnJm
cyAqLworCXVpbnQzMl90IGlwaV9jb3VudF92cmZzOworCisgICAgICAgIC8qIE51bWJlciBvZiBp
Zm5zICovCisJdWludDMyX3QgaXBpX2NvdW50X2lmbnM7CisKKyAgICAgICAgLyogTnVtYmVyIG9m
IGlmYXMgKi8KKwl1aW50MzJfdCBpcGlfY291bnRfaWZhczsKKworCS8qIHN5c3RlbSB3aWRlIG51
bWJlciBvZiBmcmVlIGNodW5rcyBoYW5naW5nIGFyb3VuZCAqLworCXVpbnQzMl90IGlwaV9mcmVl
X2NodW5rczsKKwl1aW50MzJfdCBpcGlfZnJlZV9zdHJtb3E7CisKKwlzdHJ1Y3Qgc2N0cHZ0YWdo
ZWFkIHZ0YWdfdGltZXdhaXRbU0NUUF9TVEFDS19WVEFHX0hBU0hfU0laRV07CisKKwkvKiBhZGRy
ZXNzIHdvcmsgcXVldWUgaGFuZGxpbmcgKi8KKwlzdHJ1Y3Qgc2N0cF90aW1lciBhZGRyX3dxX3Rp
bWVyOworCisjaWYgZGVmaW5lZChfU0NUUF9ORUVEU19DQUxMT1VUXykgfHwgZGVmaW5lZChfVVNF
Ul9TQ1RQX05FRURTX0NBTExPVVRfKQorCXN0cnVjdCBjYWxsb3V0bGlzdCBjYWxscXVldWU7Cisj
ZW5kaWYKK307CisKK3N0cnVjdCBzY3RwX2Jhc2VfaW5mbyB7CisJLyogQWxsIHN0YXRpYyBzdHJ1
Y3R1cmVzIHRoYXQKKwkgKiBhbmNob3IgdGhlIHN5c3RlbSBtdXN0IGJlIGhlcmUuCisJICovCisJ
c3RydWN0IHNjdHBfZXBpbmZvIHNjdHBwY2JpbmZvOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYgZGVmaW5lZChTTVApICYmIGRlZmluZWQo
U0NUUF9VU0VfUEVSQ1BVX1NUQVQpCisJc3RydWN0IHNjdHBzdGF0ICAgICpzY3Rwc3RhdDsKKyNl
bHNlCisJc3RydWN0IHNjdHBzdGF0ICAgIHNjdHBzdGF0OworI2VuZGlmCisjZWxzZQorCXN0cnVj
dCBzY3Rwc3RhdCAgICBzY3Rwc3RhdDsKKyNlbmRpZgorCXN0cnVjdCBzY3RwX3N5c2N0bCBzY3Rw
c3lzY3RsOworCXVpbnQ4X3QgZmlyc3RfdGltZTsKKwljaGFyIHNjdHBfcGNiX2luaXRpYWxpemVk
OworI2lmIGRlZmluZWQoU0NUUF9QQUNLRVRfTE9HR0lORykKKwlpbnQgcGFja2V0X2xvZ193cml0
ZXJzOworCWludCBwYWNrZXRfbG9nX2VuZDsKKwl1aW50OF90IHBhY2tldF9sb2dfYnVmZmVyW1ND
VFBfUEFDS0VUX0xPR19TSVpFXTsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYm
ICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJZXZlbnRoYW5kbGVyX3RhZyBlaF90YWc7CisjZW5k
aWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlp
bnQgc2N0cF9tYWluX3RpbWVyX3RpY2tzOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorCXVzZXJsYW5kX211dGV4X3QgdGltZXJfbXR4OworCXVzZXJsYW5kX3RocmVhZF90IHRp
bWVyX3RocmVhZDsKKwlpbnQgdGltZXJfdGhyZWFkX3Nob3VsZF9leGl0OworCWludCBpdGVyYXRv
cl90aHJlYWRfc3RhcnRlZDsKKwlpbnQgdGltZXJfdGhyZWFkX3N0YXJ0ZWQ7CisjaWYgIWRlZmlu
ZWQoX1dJTjMyKQorCXB0aHJlYWRfbXV0ZXhhdHRyX3QgbXR4X2F0dHI7CisjaWYgZGVmaW5lZChJ
TkVUKSB8fCBkZWZpbmVkKElORVQ2KQorCWludCB1c2Vyc3BhY2Vfcm91dGU7CisJdXNlcmxhbmRf
dGhyZWFkX3QgcmVjdnRocmVhZHJvdXRlOworI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBJTkVUCisj
aWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fTUlOR1czMl9fKQorCVNPQ0tFVCB1c2Vy
c3BhY2VfcmF3c2N0cDsKKwlTT0NLRVQgdXNlcnNwYWNlX3VkcHNjdHA7CisjZWxzZQorCWludCB1
c2Vyc3BhY2VfcmF3c2N0cDsKKwlpbnQgdXNlcnNwYWNlX3VkcHNjdHA7CisjZW5kaWYKKwl1c2Vy
bGFuZF90aHJlYWRfdCByZWN2dGhyZWFkcmF3OworCXVzZXJsYW5kX3RocmVhZF90IHJlY3Z0aHJl
YWR1ZHA7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVm
aW5lZChfX01JTkdXMzJfXykKKwlTT0NLRVQgdXNlcnNwYWNlX3Jhd3NjdHA2OworCVNPQ0tFVCB1
c2Vyc3BhY2VfdWRwc2N0cDY7CisjZWxzZQorCWludCB1c2Vyc3BhY2VfcmF3c2N0cDY7CisJaW50
IHVzZXJzcGFjZV91ZHBzY3RwNjsKKyNlbmRpZgorCXVzZXJsYW5kX3RocmVhZF90IHJlY3Z0aHJl
YWRyYXc2OworCXVzZXJsYW5kX3RocmVhZF90IHJlY3Z0aHJlYWR1ZHA2OworI2VuZGlmCisJaW50
ICgqY29ubl9vdXRwdXQpKHZvaWQgKmFkZHIsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwg
dWludDhfdCB0b3MsIHVpbnQ4X3Qgc2V0X2RmKTsKKwl2b2lkICgqZGVidWdfcHJpbnRmKShjb25z
dCBjaGFyICpmb3JtYXQsIC4uLik7CisJaW50IGNyYzMyY19vZmZsb2FkZWQ7CisjZW5kaWYKK307
CisKKy8qLQorICogSGVyZSB3ZSBoYXZlIGFsbCB0aGUgcmVsZXZhbnQgaW5mb3JtYXRpb24gZm9y
IGVhY2ggU0NUUCBlbnRpdHkgY3JlYXRlZC4gV2UKKyAqIHdpbGwgbmVlZCB0byBtb2RpZnkgdGhp
cyBhcyBhcHByb3ByYXRlLiBXZSBhbHNvIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8KKyAqIGFj
Y2VzcyAvZGV2L3JhbmRvbS4KKyAqLworc3RydWN0IHNjdHBfcGNiIHsKKwl1bnNpZ25lZCBpbnQg
dGltZV9vZl9zZWNyZXRfY2hhbmdlOwkvKiBudW1iZXIgb2Ygc2Vjb25kcyBmcm9tCisJCQkJCQkg
KiB0aW1ldmFsLnR2X3NlYyAqLworCXVpbnQzMl90IHNlY3JldF9rZXlbU0NUUF9IT1dfTUFOWV9T
RUNSRVRTXVtTQ1RQX05VTUJFUl9PRl9TRUNSRVRTXTsKKwl1bnNpZ25lZCBpbnQgc2l6ZV9vZl9h
X2Nvb2tpZTsKKworCXVpbnQzMl90IHNjdHBfdGltZW91dHRpY2tzW1NDVFBfTlVNX1RNUlNdOwor
CXVpbnQzMl90IHNjdHBfbWlucnRvOworCXVpbnQzMl90IHNjdHBfbWF4cnRvOworCXVpbnQzMl90
IGluaXRpYWxfcnRvOworCXVpbnQzMl90IGluaXRpYWxfaW5pdF9ydG9fbWF4OworCisJdW5zaWdu
ZWQgaW50IHNjdHBfc2Fja19mcmVxOworCXVpbnQzMl90IHNjdHBfc3dzX3NlbmRlcjsKKwl1aW50
MzJfdCBzY3RwX3N3c19yZWNlaXZlcjsKKworCXVpbnQzMl90IHNjdHBfZGVmYXVsdF9jY19tb2R1
bGU7CisJdWludDMyX3Qgc2N0cF9kZWZhdWx0X3NzX21vZHVsZTsKKwkvKiBhdXRoZW50aWNhdGlv
biByZWxhdGVkIGZpZWxkcyAqLworCXN0cnVjdCBzY3RwX2tleWhlYWQgc2hhcmVkX2tleXM7CisJ
c2N0cF9hdXRoX2Noa2xpc3RfdCAqbG9jYWxfYXV0aF9jaHVua3M7CisJc2N0cF9obWFjbGlzdF90
ICpsb2NhbF9obWFjczsKKwl1aW50MTZfdCBkZWZhdWx0X2tleWlkOworCXVpbnQzMl90IGRlZmF1
bHRfbXR1OworCisJLyogdmFyaW91cyB0aHJlc2hvbGRzICovCisJLyogTWF4IHRpbWVzIEkgd2ls
bCBpbml0IGF0IGEgZ3V5ICovCisJdWludDE2X3QgbWF4X2luaXRfdGltZXM7CisKKwkvKiBNYXgg
dGltZXMgSSB3aWxsIHNlbmQgYmVmb3JlIHdlIGNvbnNpZGVyIHNvbWVvbmUgZGVhZCAqLworCXVp
bnQxNl90IG1heF9zZW5kX3RpbWVzOworCisJdWludDE2X3QgZGVmX25ldF9mYWlsdXJlOworCisJ
dWludDE2X3QgZGVmX25ldF9wZl90aHJlc2hvbGQ7CisKKwkvKiBudW1iZXIgb2Ygc3RyZWFtcyB0
byBwcmUtb3BlbiBvbiBhIGFzc29jaWF0aW9uICovCisJdWludDE2X3QgcHJlX29wZW5fc3RyZWFt
X2NvdW50OworCXVpbnQxNl90IG1heF9vcGVuX3N0cmVhbXNfaW50b21lOworCisJLyogcmFuZG9t
IG51bWJlciBnZW5lcmF0b3IgKi8KKwl1aW50MzJfdCByYW5kb21fY291bnRlcjsKKwl1aW50OF90
IHJhbmRvbV9udW1iZXJzW1NDVFBfU0lHTkFUVVJFX0FMT0NfU0laRV07CisJdWludDhfdCByYW5k
b21fc3RvcmVbU0NUUF9TSUdOQVRVUkVfQUxPQ19TSVpFXTsKKworCS8qCisJICogVGhpcyB0aW1l
ciBpcyBrZXB0IHJ1bm5pbmcgcGVyIGVuZHBvaW50LiAgV2hlbiBpdCBmaXJlcyBpdCB3aWxsCisJ
ICogY2hhbmdlIHRoZSBzZWNyZXQga2V5LiAgVGhlIGRlZmF1bHQgaXMgb25jZSBhIGhvdXIKKwkg
Ki8KKwlzdHJ1Y3Qgc2N0cF90aW1lciBzaWduYXR1cmVfY2hhbmdlOworCisJdWludDMyX3QgZGVm
X2Nvb2tpZV9saWZlOworCS8qIGRlZmF1bHRzIHRvIDAgKi8KKwl1aW50MzJfdCBhdXRvX2Nsb3Nl
X3RpbWU7CisJdWludDMyX3QgaW5pdGlhbF9zZXF1ZW5jZV9kZWJ1ZzsKKwl1aW50MzJfdCBhZGFw
dGF0aW9uX2xheWVyX2luZGljYXRvcjsKKwl1aW50OF90IGFkYXB0YXRpb25fbGF5ZXJfaW5kaWNh
dG9yX3Byb3ZpZGVkOworCXVpbnQzMl90IHN0b3JlX2F0OworCXVpbnQzMl90IG1heF9idXJzdDsK
Kwl1aW50MzJfdCBmcl9tYXhfYnVyc3Q7CisjaWZkZWYgSU5FVDYKKwl1aW50MzJfdCBkZWZhdWx0
X2Zsb3dsYWJlbDsKKyNlbmRpZgorCXVpbnQ4X3QgZGVmYXVsdF9kc2NwOworCWNoYXIgY3VycmVu
dF9zZWNyZXRfbnVtYmVyOworCWNoYXIgbGFzdF9zZWNyZXRfbnVtYmVyOworCXVpbnQxNl90IHBv
cnQ7IC8qIHJlbW90ZSBVRFAgZW5jYXBzdWxhdGlvbiBwb3J0ICovCit9OworCisjaWZuZGVmIFND
VFBfQUxJR05NRU5UCisjZGVmaW5lIFNDVFBfQUxJR05NRU5UIDMyCisjZW5kaWYKKworI2lmbmRl
ZiBTQ1RQX0FMSUdOTTEKKyNkZWZpbmUgU0NUUF9BTElHTk0xIChTQ1RQX0FMSUdOTUVOVC0xKQor
I2VuZGlmCisKKyNkZWZpbmUgc2N0cF9scG9ydCBpcF9pbnAuaW5wLmlucF9scG9ydAorCitzdHJ1
Y3Qgc2N0cF9wY2J0c25fcmxvZyB7CisJdWludDMyX3QgdnRhZzsKKwl1aW50MTZfdCBzdHJtOwor
CXVpbnQxNl90IHNlcTsKKwl1aW50MTZfdCBzejsKKwl1aW50MTZfdCBmbGdzOworfTsKKyNkZWZp
bmUgU0NUUF9SRUFEX0xPR19TSVpFIDEzNQkvKiB3ZSBjaG9vc2UgdGhlIG51bWJlciB0byBtYWtl
IGEgcGNiIGEgcGFnZSAqLworCitzdHJ1Y3Qgc2N0cF9pbnBjYiB7CisJLyotCisJICogcHV0IGFu
IGlucGNiIGluIGZyb250IG9mIGl0IGFsbCwga2luZCBvZiBhIHdhc3RlIGJ1dCB3ZSBuZWVkIHRv
CisJICogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBhbGwgdGhlIG90aGVyIHN0dWZmLgorCSAqLwor
CXVuaW9uIHsKKwkJc3RydWN0IGlucGNiIGlucDsKKwkJY2hhciBhbGlnblsoc2l6ZW9mKHN0cnVj
dCBpbnBjYikgKyBTQ1RQX0FMSUdOTTEpICYKKwkJICAgICAgICB+U0NUUF9BTElHTk0xXTsKKwl9
ICAgICBpcF9pbnA7CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisJLyogbGVhdmUgc29tZSBzcGFjZSBpbiBjYXNlIGkzODYgaW5wY2IgaXMgYmlnZ2Vy
IHRoYW4gcHBjICovCisJdWludDhfdAkJcGFkZGluZ1sxMjhdOworI2VuZGlmCisKKwkvKiBTb2Nr
ZXQgYnVmZmVyIGxvY2sgcHJvdGVjdHMgcmVhZF9xdWV1ZSBhbmQgb2YgY291cnNlIHNiX2NjICov
CisJc3RydWN0IHNjdHBfcmVhZGhlYWQgcmVhZF9xdWV1ZTsKKworCUxJU1RfRU5UUlkoc2N0cF9p
bnBjYikgc2N0cF9saXN0OwkvKiBsaXN0cyBhbGwgZW5kcG9pbnRzICovCisJLyogaGFzaCBvZiBh
bGwgZW5kcG9pbnRzIGZvciBtb2RlbCAqLworCUxJU1RfRU5UUlkoc2N0cF9pbnBjYikgc2N0cF9o
YXNoOworCS8qIGNvdW50IG9mIGxvY2FsIGFkZHJlc3NlcyBib3VuZCwgMCBpZiBib3VuZCBhbGwg
Ki8KKwlpbnQgbGFkZHJfY291bnQ7CisKKwkvKiBsaXN0IG9mIGFkZHJzIGluIHVzZSBieSB0aGUg
RVAsIE5VTEwgaWYgYm91bmQtYWxsICovCisJc3RydWN0IHNjdHBsYWRkciBzY3RwX2FkZHJfbGlz
dDsKKwkvKiB1c2VkIGZvciBzb3VyY2UgYWRkcmVzcyBzZWxlY3Rpb24gcm90YXRpb24gd2hlbiB3
ZSBhcmUgc3Vic2V0IGJvdW5kICovCisJc3RydWN0IHNjdHBfbGFkZHIgKm5leHRfYWRkcl90b3Vz
ZTsKKworCS8qIGJhY2sgcG9pbnRlciB0byBvdXIgc29ja2V0ICovCisJc3RydWN0IHNvY2tldCAq
c2N0cF9zb2NrZXQ7CisJdWludDY0X3Qgc2N0cF9mZWF0dXJlczsJLyogRmVhdHVyZSBmbGFncyAq
LworCXVpbnQzMl90IHNjdHBfZmxhZ3M7CS8qIElOUCBzdGF0ZSBmbGFnIHNldCAqLworCXVpbnQz
Ml90IHNjdHBfbW9iaWxpdHlfZmVhdHVyZXM7IC8qIE1vYmlsaXR5ICBGZWF0dXJlIGZsYWdzICov
CisJc3RydWN0IHNjdHBfcGNiIHNjdHBfZXA7LyogU0NUUCBlcCBkYXRhICovCisJLyogaGVhZCBv
ZiB0aGUgaGFzaCBvZiBhbGwgYXNzb2NpYXRpb25zICovCisJc3RydWN0IHNjdHBhc29jaGVhZCAq
c2N0cF90Y2JoYXNoOworCXVfbG9uZyBzY3RwX2hhc2htYXJrOworCS8qIGhlYWQgb2YgdGhlIGxp
c3Qgb2YgYWxsIGFzc29jaWF0aW9ucyAqLworCXN0cnVjdCBzY3RwYXNvY2hlYWQgc2N0cF9hc29j
X2xpc3Q7CisjaWZkZWYgU0NUUF9UUkFDS19GUkVFRF9BU09DUworCXN0cnVjdCBzY3RwYXNvY2hl
YWQgc2N0cF9hc29jX2ZyZWVfbGlzdDsKKyNlbmRpZgorCXN0cnVjdCBzY3RwX2l0ZXJhdG9yICpp
bnBfc3RhcnRpbmdfcG9pbnRfZm9yX2l0ZXJhdG9yOworCXVpbnQzMl90IHNjdHBfZnJhZ19wb2lu
dDsKKwl1aW50MzJfdCBwYXJ0aWFsX2RlbGl2ZXJ5X3BvaW50OworCXVpbnQzMl90IHNjdHBfY29u
dGV4dDsKKwl1aW50MzJfdCBtYXhfY3duZDsKKwl1aW50OF90IGxvY2FsX3N0cnJlc2V0X3N1cHBv
cnQ7CisJdWludDMyX3Qgc2N0cF9jbXRfb25fb2ZmOworCXVpbnQ4X3QgZWNuX3N1cHBvcnRlZDsK
Kwl1aW50OF90IHByc2N0cF9zdXBwb3J0ZWQ7CisJdWludDhfdCBhdXRoX3N1cHBvcnRlZDsKKwl1
aW50OF90IGlkYXRhX3N1cHBvcnRlZDsKKwl1aW50OF90IGFzY29uZl9zdXBwb3J0ZWQ7CisJdWlu
dDhfdCByZWNvbmZpZ19zdXBwb3J0ZWQ7CisJdWludDhfdCBucnNhY2tfc3VwcG9ydGVkOworCXVp
bnQ4X3QgcGt0ZHJvcF9zdXBwb3J0ZWQ7CisJc3RydWN0IHNjdHBfbm9ucGFkX3NuZHJjdmluZm8g
ZGVmX3NlbmQ7CisJLyotCisJICogVGhlc2UgdGhyZWUgYXJlIGhlcmUgZm9yIHRoZSBzb3NlbmRf
ZGdyYW0KKwkgKiAocGt0LCBwa3RfbGFzdCBhbmQgY29udHJvbCkuCisJICogcm91dGluZS4gSG93
ZXZlciwgSSBkb24ndCB0aGluayBhbnlvbmUgaW4KKwkgKiB0aGUgY3VycmVudCBGcmVlQlNEIGtl
cm5lbCBjYWxscyB0aGlzLiBTbworCSAqIHRoZXkgYXJlIGNhbmRpZGF0ZXMgd2l0aCBzY3RwX3Nl
bmRtIGZvcgorCSAqIGRlLXN1cHBvcnRpbmcuCisJICovCisJc3RydWN0IG1idWYgKnBrdCwgKnBr
dF9sYXN0OworCXN0cnVjdCBtYnVmICpjb250cm9sOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJc3RydWN0IG10eCBpbnBfbXR4OworCXN0cnVj
dCBtdHggaW5wX2NyZWF0ZV9tdHg7CisJc3RydWN0IG10eCBpbnBfcmRhdGFfbXR4OworCWludDMy
X3QgcmVmY291bnQ7CisjZWxpZiBkZWZpbmVkKFNDVFBfUFJPQ0VTU19MRVZFTF9MT0NLUykKKwl1
c2VybGFuZF9tdXRleF90IGlucF9tdHg7CisJdXNlcmxhbmRfbXV0ZXhfdCBpbnBfY3JlYXRlX210
eDsKKwl1c2VybGFuZF9tdXRleF90IGlucF9yZGF0YV9tdHg7CisJaW50MzJfdCByZWZjb3VudDsK
KyNlbGlmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lm
IGRlZmluZWQoU0NUUF9BUFBMRV9SV0xPQ0spCisJbGNrX3J3X3QgKmlucF9tdHg7CisjZWxzZQor
CWxja19tdHhfdCAqaW5wX210eDsKKyNlbmRpZgorCWxja19tdHhfdCAqaW5wX2NyZWF0ZV9tdHg7
CisJbGNrX210eF90ICppbnBfcmRhdGFfbXR4OworI2VsaWYgZGVmaW5lZChfV0lOMzIpICYmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJc3RydWN0IHJ3bG9jayBpbnBfbG9jazsKKwlzdHJ1Y3Qg
c3BpbmxvY2sgaW5wX2NyZWF0ZV9sb2NrOworCXN0cnVjdCBzcGlubG9jayBpbnBfcmRhdGFfbG9j
azsKKwlpbnQzMl90IHJlZmNvdW50OworI2VsaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWlu
dDMyX3QgcmVmY291bnQ7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwlpbnQzMl90IHJlZmNvdW50OworCisJdWludDMyX3QgbG9ja19j
YWxsZXIxOworCXVpbnQzMl90IGxvY2tfY2FsbGVyMjsKKwl1aW50MzJfdCBsb2NrX2NhbGxlcjM7
CisJdWludDMyX3QgdW5sb2NrX2NhbGxlcjE7CisJdWludDMyX3QgdW5sb2NrX2NhbGxlcjI7CisJ
dWludDMyX3QgdW5sb2NrX2NhbGxlcjM7CisJdWludDMyX3QgZ2V0bG9ja19jYWxsZXIxOworCXVp
bnQzMl90IGdldGxvY2tfY2FsbGVyMjsKKwl1aW50MzJfdCBnZXRsb2NrX2NhbGxlcjM7CisJdWlu
dDMyX3QgZ2VuX2NvdW50OworCXVpbnQzMl90IGxvY2tfZ2VuX2NvdW50OworCXVpbnQzMl90IHVu
bG9ja19nZW5fY291bnQ7CisJdWludDMyX3QgZ2V0bG9ja19nZW5fY291bnQ7CisKKwl1aW50MzJf
dCBpX2FtX2hlcmVfZmlsZTsKKwl1aW50MzJfdCBpX2FtX2hlcmVfbGluZTsKKyNlbmRpZgorCXVp
bnQzMl90IGRlZl92cmZfaWQ7CisJdWludDE2X3QgZmlibnVtOworI2lmZGVmIFNDVFBfTVZSRgor
CXVpbnQzMl90ICptX3ZyZl9pZHM7CisJdWludDMyX3QgbnVtX3ZyZnM7CisJdWludDMyX3QgdnJm
X3NpemU7CisjZW5kaWYKKwl1aW50MzJfdCB0b3RhbF9zZW5kczsKKwl1aW50MzJfdCB0b3RhbF9y
ZWN2czsKKwl1aW50MzJfdCBsYXN0X2Fib3J0X2NvZGU7CisJdWludDMyX3QgdG90YWxfbm9zcGFj
ZXM7CisJc3RydWN0IHNjdHBhc29jaGVhZCAqc2N0cF9hc29jaWRoYXNoOworCXVfbG9uZyBoYXNo
YXNvY2lkbWFyazsKKyAgICAgICAgdWludDMyX3Qgc2N0cF9hc3NvY2lkX2NvdW50ZXI7CisKKyNp
ZmRlZiBTQ1RQX0FTT0NMT0dfT0ZfVFNOUworCXN0cnVjdCBzY3RwX3BjYnRzbl9ybG9nIHJlYWRs
b2dbU0NUUF9SRUFEX0xPR19TSVpFXTsKKwl1aW50MzJfdCByZWFkbG9nX2luZGV4OworI2VuZGlm
CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXZvaWQgKnVscF9pbmZvOworCWludCAoKnJl
Y3ZfY2FsbGJhY2spKHN0cnVjdCBzb2NrZXQgKiwgdW5pb24gc2N0cF9zb2Nrc3RvcmUsIHZvaWQg
Kiwgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9yY3Zp
bmZvLCBpbnQsIHZvaWQgKik7CisJdWludDMyX3Qgc2VuZF9zYl90aHJlc2hvbGQ7CisJaW50ICgq
c2VuZF9jYWxsYmFjaykoc3RydWN0IHNvY2tldCAqLCB1aW50MzJfdCwgdm9pZCAqKTsKKyNlbmRp
ZgorfTsKKworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK2ludCByZWdpc3Rlcl9yZWN2X2Ni
IChzdHJ1Y3Qgc29ja2V0ICosCisgICAgICAgICAgICAgICAgICAgICAgaW50ICgqKShzdHJ1Y3Qg
c29ja2V0ICosIHVuaW9uIHNjdHBfc29ja3N0b3JlLCB2b2lkICosIHNpemVfdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3JjdmluZm8sIGludCwgdm9pZCAqKSk7
CitpbnQgcmVnaXN0ZXJfc2VuZF9jYiAoc3RydWN0IHNvY2tldCAqLCB1aW50MzJfdCwgaW50ICgq
KShzdHJ1Y3Qgc29ja2V0ICosIHVpbnQzMl90LCB2b2lkICopKTsKK2ludCByZWdpc3Rlcl91bHBf
aW5mbyAoc3RydWN0IHNvY2tldCAqLCB2b2lkICopOworaW50IHJldHJpZXZlX3VscF9pbmZvIChz
dHJ1Y3Qgc29ja2V0ICosIHZvaWQgKiopOworCisjZW5kaWYKK3N0cnVjdCBzY3RwX3RjYiB7CisJ
c3RydWN0IHNvY2tldCAqc2N0cF9zb2NrZXQ7CS8qIGJhY2sgcG9pbnRlciB0byBzb2NrZXQgKi8K
KwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqc2N0cF9lcDsJLyogYmFjayBwb2ludGVyIHRvIGVwICovCisJ
TElTVF9FTlRSWShzY3RwX3RjYikgc2N0cF90Y2JoYXNoOwkvKiBuZXh0IGxpbmsgaW4gaGFzaAor
CQkJCQkJICogdGFibGUgKi8KKyAgICAgICAgTElTVF9FTlRSWShzY3RwX3RjYikgc2N0cF90Y2Js
aXN0OwkvKiBsaXN0IG9mIGFsbCBvZiB0aGUKKwkJCQkJCSAqIFRDQidzICovCisgICAgICAgIExJ
U1RfRU5UUlkoc2N0cF90Y2IpIHNjdHBfdGNiYXNvY2lkaGFzaDsJLyogbmV4dCBsaW5rIGluIGFz
b2NpZAorCQkJCQkJCSAqIGhhc2ggdGFibGUKKwkJCQkJCQkgKi8KKyAgICAgICAgTElTVF9FTlRS
WShzY3RwX3RjYikgc2N0cF9hc29jczsJLyogdnRhZyBoYXNoIGxpc3QgKi8KKwlzdHJ1Y3Qgc2N0
cF9ibG9ja19lbnRyeSAqYmxvY2tfZW50cnk7CS8qIHBvaW50ZXIgbG9ja2VkIGJ5ICBzb2NrZXQK
KwkJCQkJCSAqIHNlbmQgYnVmZmVyICovCisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gYXNvYzsK
KwkvKi0KKwkgKiBmcmVlZF9ieV9zb3Jjdl9zaW5jZWxhc3QgaXMgcHJvdGVjdGVkIGJ5IHRoZSBz
b2NrYnVmX2xvY2sgTk9UIHRoZQorCSAqIHRjYl9sb2NrLiBJdHMgc3BlY2lhbCBpbiB0aGlzIHdh
eSB0byBoZWxwIGF2b2lkIGV4dHJhIG11dGV4IGNhbGxzCisJICogaW4gdGhlIHJlYWRpbmcgb2Yg
ZGF0YS4KKwkgKi8KKwl1aW50MzJfdCBmcmVlZF9ieV9zb3Jjdl9zaW5jZWxhc3Q7CisJdWludDMy
X3QgdG90YWxfc2VuZHM7CisJdWludDMyX3QgdG90YWxfcmVjdnM7CisJaW50IGZyZWVkX2Zyb21f
d2hlcmU7CisJdWludDE2X3QgcnBvcnQ7CQkvKiByZW1vdGUgcG9ydCBpbiBuZXR3b3JrIGZvcm1h
dCAqLworCXVpbnQxNl90IHJlc3Y7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwlzdHJ1Y3QgbXR4IHRjYl9tdHg7CisJc3RydWN0IG10eCB0Y2Jf
c2VuZF9tdHg7CisjZWxpZiBkZWZpbmVkKFNDVFBfUFJPQ0VTU19MRVZFTF9MT0NLUykKKwl1c2Vy
bGFuZF9tdXRleF90IHRjYl9tdHg7CisJdXNlcmxhbmRfbXV0ZXhfdCB0Y2Jfc2VuZF9tdHg7Cisj
ZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlsY2tf
bXR4X3QqIHRjYl9tdHg7CisJbGNrX210eF90KiB0Y2Jfc2VuZF9tdHg7CisjZWxpZiBkZWZpbmVk
KF9XSU4zMikgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlzdHJ1Y3Qgc3BpbmxvY2sgdGNi
X2xvY2s7CisJc3RydWN0IHNwaW5sb2NrIHRjYl9zZW5kX2xvY2s7CisjZWxpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKKwl1aW50MzJfdCBjYWxsZXIxOworCXVpbnQzMl90IGNhbGxlcjI7CisJ
dWludDMyX3QgY2FsbGVyMzsKKyNlbmRpZgorfTsKKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2xvY2tf
YnNkLmg+CisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKy8qCisgKiBBcHBsZSBNYWNPUyBYIDEwLjQgIlRpZ2VyIgorICovCisKKyNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfbG9ja19hcHBsZV9mZy5oPgorCisjZWxpZiBkZWZpbmVkKFNDVFBfUFJPQ0VT
U19MRVZFTF9MT0NLUykKKworI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9wcm9jZXNzX2xvY2suaD4K
KworI2VsaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisKKyNp
bmNsdWRlIDxuZXRpbmV0L3NjdHBfbG9ja193aW5kb3dzLmg+CisKKyNlbGlmIGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKworI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9sb2NrX3VzZXJzcGFjZS5oPgor
CisjZWxzZQorLyoKKyAqIFByZS01LnggRnJlZUJTRCwgYW5kIG90aGVycy4KKyAqLworI2luY2x1
ZGUgPG5ldGluZXQvc2N0cF9sb2NrX2VtcHR5Lmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoX0tF
Uk5FTCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCisvKiBBdHRlbnRpb24gSnVsaWFuLCB0
aGlzIGlzIHRoZSBleHRlcm4gdGhhdAorICogZ29lcyB3aXRoIHRoZSBiYXNlIGluZm8uIHNjdHBf
cGNiLmMgaGFzCisgKiB0aGUgcmVhbCBkZWZpbml0aW9uLgorICovCisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK1ZORVRfREVDTEFSRShzdHJ1Y3Qg
c2N0cF9iYXNlX2luZm8sIHN5c3RlbV9iYXNlX2luZm8pOworI2Vsc2UKK2V4dGVybiBzdHJ1Y3Qg
c2N0cF9iYXNlX2luZm8gc3lzdGVtX2Jhc2VfaW5mbzsKKyNlbmRpZgorCisjaWZkZWYgSU5FVDYK
K2ludCBTQ1RQNl9BUkVfQUREUl9FUVVBTChzdHJ1Y3Qgc29ja2FkZHJfaW42ICphLCBzdHJ1Y3Qg
c29ja2FkZHJfaW42ICpiKTsKKyNlbmRpZgorCit2b2lkIHNjdHBfZmlsbF9wY2JpbmZvKHN0cnVj
dCBzY3RwX3BjYmluZm8gKik7CisKK3N0cnVjdCBzY3RwX2lmbiAqCitzY3RwX2ZpbmRfaWZuKHZv
aWQgKmlmbiwgdWludDMyX3QgaWZuX2luZGV4KTsKKworc3RydWN0IHNjdHBfdnJmICpzY3RwX2Fs
bG9jYXRlX3ZyZihpbnQgdnJmaWQpOworc3RydWN0IHNjdHBfdnJmICpzY3RwX2ZpbmRfdnJmKHVp
bnQzMl90IHZyZmlkKTsKK3ZvaWQgc2N0cF9mcmVlX3ZyZihzdHJ1Y3Qgc2N0cF92cmYgKnZyZik7
CisKKy8qLQorICogQ2hhbmdlIGFkZHJlc3Mgc3RhdGUsIGNhbiBiZSB1c2VkIGlmCisgKiBPL1Mg
c3VwcG9ydHMgdGVsbGluZyB0cmFuc3BvcnRzIGFib3V0CisgKiBjaGFuZ2VzIHRvIElGQS9JRk4n
cyAobGluayBsYXllciB0cmlnZ2VycykuCisgKiBJZiBhIGlmbiBnb2VzIGRvd24sIHdlIHdpbGwg
ZG8gc3JjLWFkZHItc2VsZWN0aW9uCisgKiBhbmQgTk9UIHVzZSB0aGF0LCBhcyBhIHNvdXJjZSBh
ZGRyZXNzLiBUaGlzIGRvZXMKKyAqIG5vdCBzdG9wIHRoZSByb3V0aW5nIHN5c3RlbSBmcm9tIHJv
dXRpbmcgb3V0CisgKiB0aGF0IGludGVyZmFjZSwgYnV0IHdlIHdvbid0IHB1dCBpdCBhcyBhIHNv
dXJjZS4KKyAqLwordm9pZCBzY3RwX21hcmtfaWZhX2FkZHJfZG93bih1aW50MzJfdCB2cmZfaWQs
IHN0cnVjdCBzb2NrYWRkciAqYWRkciwgY29uc3QgY2hhciAqaWZfbmFtZSwgdWludDMyX3QgaWZu
X2luZGV4KTsKK3ZvaWQgc2N0cF9tYXJrX2lmYV9hZGRyX3VwKHVpbnQzMl90IHZyZl9pZCwgc3Ry
dWN0IHNvY2thZGRyICphZGRyLCBjb25zdCBjaGFyICppZl9uYW1lLCB1aW50MzJfdCBpZm5faW5k
ZXgpOworCitzdHJ1Y3Qgc2N0cF9pZmEgKgorc2N0cF9hZGRfYWRkcl90b192cmYodWludDMyX3Qg
dnJmaWQsCisJCSAgICAgdm9pZCAqaWZuLCB1aW50MzJfdCBpZm5faW5kZXgsIHVpbnQzMl90IGlm
bl90eXBlLAorCQkgICAgIGNvbnN0IGNoYXIgKmlmX25hbWUsCisJCSAgICAgdm9pZCAqaWZhLCBz
dHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHVpbnQzMl90IGlmYV9mbGFncywKKwkJICAgICBpbnQgZHlu
YW1pY19hZGQpOworCit2b2lkIHNjdHBfdXBkYXRlX2lmbl9tdHUodWludDMyX3QgaWZuX2luZGV4
LCB1aW50MzJfdCBtdHUpOworCit2b2lkIHNjdHBfZnJlZV9pZm4oc3RydWN0IHNjdHBfaWZuICpz
Y3RwX2lmbnApOwordm9pZCBzY3RwX2ZyZWVfaWZhKHN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmFw
KTsKKwordm9pZCBzY3RwX2RlbF9hZGRyX2Zyb21fdnJmKHVpbnQzMl90IHZyZmlkLCBzdHJ1Y3Qg
c29ja2FkZHIgKmFkZHIsCisJCQkgICAgdWludDMyX3QgaWZuX2luZGV4LCBjb25zdCBjaGFyICpp
Zl9uYW1lKTsKKworc3RydWN0IHNjdHBfbmV0cyAqc2N0cF9maW5kbmV0KHN0cnVjdCBzY3RwX3Rj
YiAqLCBzdHJ1Y3Qgc29ja2FkZHIgKik7CisKK3N0cnVjdCBzY3RwX2lucGNiICpzY3RwX3BjYl9m
aW5kZXAoc3RydWN0IHNvY2thZGRyICosIGludCwgaW50LCB1aW50MzJfdCk7CisKKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQoraW50IHNjdHBfaW5w
Y2JfYmluZChzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBzb2NrYWRkciAqLAorCQkgICAgc3RydWN0
IHNjdHBfaWZhICosc3RydWN0IHRocmVhZCAqKTsKKyNlbGlmIGRlZmluZWQoX1dJTjMyKSAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQoraW50IHNjdHBfaW5wY2JfYmluZChzdHJ1Y3Qgc29ja2V0
ICosIHN0cnVjdCBzb2NrYWRkciAqLAorCQkgICAgc3RydWN0IHNjdHBfaWZhICosUEtUSFJFQUQp
OworI2Vsc2UKKy8qIHN0cnVjdCBwcm9jIGlzIGEgZHVtbXkgZm9yIF9fVXNlcnNwYWNlX18gKi8K
K2ludCBzY3RwX2lucGNiX2JpbmQoc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwK
KwkJICAgIHN0cnVjdCBzY3RwX2lmYSAqLCBzdHJ1Y3QgcHJvYyAqKTsKKyNlbmRpZgorCitzdHJ1
Y3Qgc2N0cF90Y2IgKgorc2N0cF9maW5kYXNzb2NpYXRpb25fYWRkcihzdHJ1Y3QgbWJ1ZiAqLCBp
bnQsCisgICAgc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCBzb2NrYWRkciAqLAorICAgIHN0cnVj
dCBzY3RwaGRyICosIHN0cnVjdCBzY3RwX2NodW5raGRyICosIHN0cnVjdCBzY3RwX2lucGNiICoq
LAorICAgIHN0cnVjdCBzY3RwX25ldHMgKiosIHVpbnQzMl90IHZyZl9pZCk7CisKK3N0cnVjdCBz
Y3RwX3RjYiAqCitzY3RwX2ZpbmRhc3NvY2lhdGlvbl9hZGRyX3NhKHN0cnVjdCBzb2NrYWRkciAq
LAorICAgIHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3Qgc2N0cF9pbnBjYiAqKiwgc3RydWN0IHNj
dHBfbmV0cyAqKiwgaW50LCB1aW50MzJfdCk7CisKK3ZvaWQKK3NjdHBfbW92ZV9wY2JfYW5kX2Fz
c29jKHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX2lucGNiICosCisgICAgc3RydWN0
IHNjdHBfdGNiICopOworCisvKi0KKyAqIEZvciB0aGlzIGNhbGwgZXBfYWRkciwgdGhlIHRvIGlz
IHRoZSBkZXN0aW5hdGlvbiBlbmRwb2ludCBhZGRyZXNzIG9mIHRoZQorICogcGVlciAocmVsYXRp
dmUgdG8gb3V0Ym91bmQpLiBUaGUgZnJvbSBmaWVsZCBpcyBvbmx5IHVzZWQgaWYgdGhlIFRDUCBt
b2RlbAorICogaXMgZW5hYmxlZCBhbmQgaGVscHMgZGlzdGluZ3VzaCBhbW9uZ3N0IHRoZSBzdWJz
ZXQgYm91bmQgKG5vbi1ib3VuZGFsbCkuCisgKiBUaGUgVENQIG1vZGVsIE1BWSBjaGFuZ2UgdGhl
IGFjdHVhbCBlcCBmaWVsZCwgdGhpcyBpcyB3aHkgaXQgaXMgcGFzc2VkLgorICovCitzdHJ1Y3Qg
c2N0cF90Y2IgKgorc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcihzdHJ1Y3Qgc2N0cF9pbnBj
YiAqKiwKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHNjdHBfbmV0cyAqKiwgc3RydWN0
IHNvY2thZGRyICosCisgICAgc3RydWN0IHNjdHBfdGNiICopOworCitzdHJ1Y3Qgc2N0cF90Y2Ig
Kgorc2N0cF9maW5kYXNvY19lcF9hc29jaWRfbG9ja2VkKHN0cnVjdCBzY3RwX2lucGNiICppbnAs
IHNjdHBfYXNzb2NfdCBhc29jX2lkLCBpbnQgd2FudF9sb2NrKTsKKworc3RydWN0IHNjdHBfdGNi
ICoKK3NjdHBfZmluZGFzc29jaWF0aW9uX2VwX2Fzb2NpZChzdHJ1Y3Qgc2N0cF9pbnBjYiAqLAor
ICAgIHNjdHBfYXNzb2NfdCwgaW50KTsKKworc3RydWN0IHNjdHBfdGNiICoKK3NjdHBfZmluZGFz
c29jaWF0aW9uX2VwX2FzY29uZihzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIHN0cnVjdCBzb2NrYWRkciAq
LAorCQkJICAgICAgIHN0cnVjdCBzY3RwaGRyICosIHN0cnVjdCBzY3RwX2lucGNiICoqLCBzdHJ1
Y3Qgc2N0cF9uZXRzICoqLCB1aW50MzJfdCB2cmZfaWQpOworCitpbnQgc2N0cF9pbnBjYl9hbGxv
YyhzdHJ1Y3Qgc29ja2V0ICpzbywgdWludDMyX3QgdnJmX2lkKTsKKworaW50IHNjdHBfaXNfYWRk
cmVzc19vbl9sb2NhbF9ob3N0KHN0cnVjdCBzb2NrYWRkciAqYWRkciwgdWludDMyX3QgdnJmX2lk
KTsKKwordm9pZCBzY3RwX2lucGNiX2ZyZWUoc3RydWN0IHNjdHBfaW5wY2IgKiwgaW50LCBpbnQp
OworCisjZGVmaW5lIFNDVFBfRE9OVF9JTklUSUFMSVpFX0FVVEhfUEFSQU1TCTAKKyNkZWZpbmUg
U0NUUF9JTklUSUFMSVpFX0FVVEhfUEFSQU1TCQkxCisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorc3RydWN0IHNjdHBfdGNiICoKK3NjdHBfYWxv
Y19hc3NvYyhzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKyAgICAgICAg
ICAgICAgICBpbnQgKiwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MTZfdCwgdWludDE2X3QsIHN0
cnVjdCB0aHJlYWQgKiwKKyAgICAgICAgICAgICAgICBpbnQpOworI2VsaWYgZGVmaW5lZChfV0lO
MzIpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitzdHJ1Y3Qgc2N0cF90Y2IgKgorc2N0cF9h
bG9jX2Fzc29jKHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzb2NrYWRkciAqLAorICAgICAg
ICAgICAgICAgIGludCAqLCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQxNl90LCB1aW50MTZfdCwg
UEtUSFJFQUQsIGludCk7CisjZWxzZQorLyogcHJvYyB3aWxsIGJlIE5VTEwgZm9yIF9fVXNlcnNw
YWNlX18gKi8KK3N0cnVjdCBzY3RwX3RjYiAqCitzY3RwX2Fsb2NfYXNzb2Moc3RydWN0IHNjdHBf
aW5wY2IgKiwgc3RydWN0IHNvY2thZGRyICosCisgICAgICAgICAgICAgICAgaW50ICosIHVpbnQz
Ml90LCB1aW50MzJfdCwgdWludDE2X3QsIHVpbnQxNl90LCBzdHJ1Y3QgcHJvYyAqLAorICAgICAg
ICAgICAgICAgIGludCk7CisjZW5kaWYKKworaW50IHNjdHBfZnJlZV9hc3NvYyhzdHJ1Y3Qgc2N0
cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwgaW50LCBpbnQpOworCit2b2lkIHNjdHBfZGVs
ZXRlX2Zyb21fdGltZXdhaXQodWludDMyX3QsIHVpbnQxNl90LCB1aW50MTZfdCk7CisKK2ludCBz
Y3RwX2lzX2luX3RpbWV3YWl0KHVpbnQzMl90IHRhZywgdWludDE2X3QgbHBvcnQsIHVpbnQxNl90
IHJwb3J0KTsKKwordm9pZAorc2N0cF9hZGRfdnRhZ190b190aW1ld2FpdCh1aW50MzJfdCB0YWcs
IHVpbnQzMl90IHRpbWUsIHVpbnQxNl90IGxwb3J0LCB1aW50MTZfdCBycG9ydCk7CisKK3ZvaWQg
c2N0cF9hZGRfbG9jYWxfYWRkcl9lcChzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF9p
ZmEgKiwgdWludDMyX3QpOworCit2b2lkIHNjdHBfZGVsX2xvY2FsX2FkZHJfZXAoc3RydWN0IHNj
dHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfaWZhICopOworCitpbnQgc2N0cF9hZGRfcmVtb3RlX2Fk
ZHIoc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3Qgc2N0cF9uZXRz
ICoqLCB1aW50MTZfdCwgaW50LCBpbnQpOworCit2b2lkIHNjdHBfcmVtb3ZlX25ldChzdHJ1Y3Qg
c2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfbmV0cyAqKTsKKworaW50IHNjdHBfZGVsX3JlbW90ZV9h
ZGRyKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc29ja2FkZHIgKik7CisKKyNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCit2b2lkIHNjdHBfcGNiX2luaXQoaW50KTsKKyNlbHNlCit2b2lkIHNj
dHBfcGNiX2luaXQodm9pZCk7CisjZW5kaWYKKwordm9pZCBzY3RwX3BjYl9maW5pc2godm9pZCk7
CisKK3ZvaWQgc2N0cF9hZGRfbG9jYWxfYWRkcl9yZXN0cmljdGVkKHN0cnVjdCBzY3RwX3RjYiAq
LCBzdHJ1Y3Qgc2N0cF9pZmEgKik7Cit2b2lkIHNjdHBfZGVsX2xvY2FsX2FkZHJfcmVzdHJpY3Rl
ZChzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfaWZhICopOworCitpbnQKK3NjdHBfbG9h
ZF9hZGRyZXNzZXNfZnJvbV9pbml0KHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3QgbWJ1ZiAqLCBp
bnQsIGludCwKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHNvY2thZGRyICosIHN0cnVj
dCBzb2NrYWRkciAqLCB1aW50MTZfdCk7CisKK2ludAorc2N0cF9zZXRfcHJpbWFyeV9hZGRyKHN0
cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKyAgICBzdHJ1Y3Qgc2N0cF9uZXRz
ICopOworCitpbnQgc2N0cF9pc192dGFnX2dvb2QodWludDMyX3QsIHVpbnQxNl90IGxwb3J0LCB1
aW50MTZfdCBycG9ydCwgc3RydWN0IHRpbWV2YWwgKik7CisKKy8qIHZvaWQgc2N0cF9kcmFpbih2
b2lkKTsgKi8KKworaW50IHNjdHBfZGVzdGluYXRpb25faXNfcmVhY2hhYmxlKHN0cnVjdCBzY3Rw
X3RjYiAqLCBzdHJ1Y3Qgc29ja2FkZHIgKik7CisKK2ludCBzY3RwX3N3YXBfaW5wY2JfZm9yX2xp
c3RlbihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wKTsKKwordm9pZCBzY3RwX2NsZWFuX3VwX3N0cmVh
bShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX3JlYWRoZWFkICpyaCk7CisKKy8q
LQorICogTnVsbCBpbiBsYXN0IGFyZyBpbnBjYiBpbmRpY2F0ZSBydW4gb24gQUxMIGVwJ3MuIFNw
ZWNpZmljIGlucCBpbiBsYXN0IGFyZworICogaW5kaWNhdGVzIHJ1biBvbiBPTkxZIGFzc29jJ3Mg
b2YgdGhlIHNwZWNpZmllZCBlbmRwb2ludC4KKyAqLworaW50CitzY3RwX2luaXRpYXRlX2l0ZXJh
dG9yKGlucF9mdW5jIGlucGYsCisJCSAgICAgICBhc29jX2Z1bmMgYWYsCisJCSAgICAgICBpbnBf
ZnVuYyBpbnBlLAorCQkgICAgICAgdWludDMyX3QsIHVpbnQzMl90LAorCQkgICAgICAgdWludDMy
X3QsIHZvaWQgKiwKKwkJICAgICAgIHVpbnQzMl90LAorCQkgICAgICAgZW5kX2Z1bmMgZWYsCisJ
CSAgICAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqLAorCQkgICAgICAgdWludDhfdCBjb19vZmYpOwor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYg
ZGVmaW5lZChTQ1RQX01DT1JFX0lOUFVUKSAmJiBkZWZpbmVkKFNNUCkKK3ZvaWQKK3NjdHBfcXVl
dWVfdG9fbWNvcmUoc3RydWN0IG1idWYgKm0sIGludCBvZmYsIGludCBjcHVfdG9fdXNlKTsKKwor
I2VuZGlmCisjZW5kaWYKKworI2VuZGlmCQkJCS8qIF9LRVJORUwgKi8KKyNlbmRpZgkJCQkvKiAh
X19zY3RwX3BjYl9oX18gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5l
dC9zY3RwX3BlZWxvZmYuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3BlZWxv
ZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAuLjg1ODFmNTE1ZjQx
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3Bl
ZWxvZmYuYwpAQCAtMCwwICsxLDMwMyBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll
cjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2Nv
IFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAw
OC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAg
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lz
dGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDogaGVh
ZC9zeXMvbmV0aW5ldC9zY3RwX3BlZWxvZmYuYyAzNjIwNTQgMjAyMC0wNi0xMSAxMzozNDowOVog
dHVleGVuICQiKTsKKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+CisjaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cHV0aWwuaD4K
KyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Zh
ci5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9zeXNjdGwuaD4KKyNpbmNsdWRlIDxuZXRpbmV0
L3NjdHAuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdWlvLmg+CisjaW5jbHVkZSA8bmV0aW5l
dC9zY3RwX3BlZWxvZmYuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHB1dGlsLmg+CisjaW5jbHVk
ZSA8bmV0aW5ldC9zY3RwX2F1dGguaD4KKworaW50CitzY3RwX2Nhbl9wZWVsX29mZihzdHJ1Y3Qg
c29ja2V0ICpoZWFkLCBzY3RwX2Fzc29jX3QgYXNzb2NfaWQpCit7CisJc3RydWN0IHNjdHBfaW5w
Y2IgKmlucDsKKwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7CisJdWludDMyX3Qgc3RhdGU7CisKKwlp
ZiAoaGVhZCA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfUEVFTE9GRiwgRUJBREYpOworCQlyZXR1cm4gKEVCQURGKTsKKwl9
CisJaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopaGVhZC0+c29fcGNiOworCWlmIChpbnAgPT0g
TlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1BFRUxPRkYsIEVGQVVMVCk7CisJCXJldHVybiAoRUZBVUxUKTsKKwl9CisJaWYgKChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCSAgICAoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkpIHsKKwkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BFRUxPRkYsIEVPUE5PVFNV
UFApOworCQlyZXR1cm4gKEVPUE5PVFNVUFApOworCX0KKwlzdGNiID0gc2N0cF9maW5kYXNzb2Np
YXRpb25fZXBfYXNvY2lkKGlucCwgYXNzb2NfaWQsIDEpOworCWlmIChzdGNiID09IE5VTEwpIHsK
KwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BF
RUxPRkYsIEVOT0VOVCk7CisJCXJldHVybiAoRU5PRU5UKTsKKwl9CisJc3RhdGUgPSBTQ1RQX0dF
VF9TVEFURShzdGNiKTsKKwlpZiAoKHN0YXRlID09IFNDVFBfU1RBVEVfRU1QVFkpIHx8CisJICAg
IChzdGF0ZSA9PSBTQ1RQX1NUQVRFX0lOVVNFKSkgeworCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9Q
RUVMT0ZGLCBFTk9UQ09OTik7CisJCXJldHVybiAoRU5PVENPTk4pOworCX0KKwlTQ1RQX1RDQl9V
TkxPQ0soc3RjYik7CisJLyogV2UgYXJlIGNsZWFyIHRvIHBlZWwgdGhpcyBvbmUgb2ZmICovCisJ
cmV0dXJuICgwKTsKK30KKworaW50CitzY3RwX2RvX3BlZWxvZmYoc3RydWN0IHNvY2tldCAqaGVh
ZCwgc3RydWN0IHNvY2tldCAqc28sIHNjdHBfYXNzb2NfdCBhc3NvY19pZCkKK3sKKwlzdHJ1Y3Qg
c2N0cF9pbnBjYiAqaW5wLCAqbl9pbnA7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCXVpbnQz
Ml90IHN0YXRlOworCisJaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopaGVhZC0+c29fcGNiOwor
CWlmIChpbnAgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfUEVFTE9GRiwgRUZBVUxUKTsKKwkJcmV0dXJuIChFRkFVTFQpOwor
CX0KKwlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYXNvY2lkKGlucCwgYXNzb2NfaWQs
IDEpOworCWlmIChzdGNiID09IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BFRUxPRkYsIEVOT1RDT05OKTsKKwkJcmV0dXJuIChF
Tk9UQ09OTik7CisJfQorCisJc3RhdGUgPSBTQ1RQX0dFVF9TVEFURShzdGNiKTsKKwlpZiAoKHN0
YXRlID09IFNDVFBfU1RBVEVfRU1QVFkpIHx8CisJICAgIChzdGF0ZSA9PSBTQ1RQX1NUQVRFX0lO
VVNFKSkgeworCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QRUVMT0ZGLCBFTk9UQ09OTik7CisJCXJl
dHVybiAoRU5PVENPTk4pOworCX0KKworCW5faW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28t
PnNvX3BjYjsKKwluX2lucC0+c2N0cF9mbGFncyA9IChTQ1RQX1BDQl9GTEFHU19VRFBUWVBFIHwK
KwkgICAgU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEIHwKKwkgICAgU0NUUF9QQ0JfRkxBR1NfSU5f
VENQUE9PTCB8CS8qIFR1cm4gb24gQmxvY2tpbmcgSU8gKi8KKwkgICAgKFNDVFBfUENCX0NPUFlf
RkxBR1MgJiBpbnAtPnNjdHBfZmxhZ3MpKTsKKwluX2lucC0+c2N0cF9zb2NrZXQgPSBzbzsKKwlu
X2lucC0+c2N0cF9mZWF0dXJlcyA9IGlucC0+c2N0cF9mZWF0dXJlczsKKwluX2lucC0+c2N0cF9t
b2JpbGl0eV9mZWF0dXJlcyA9IGlucC0+c2N0cF9tb2JpbGl0eV9mZWF0dXJlczsKKwluX2lucC0+
c2N0cF9mcmFnX3BvaW50ID0gaW5wLT5zY3RwX2ZyYWdfcG9pbnQ7CisJbl9pbnAtPnNjdHBfY210
X29uX29mZiA9IGlucC0+c2N0cF9jbXRfb25fb2ZmOworCW5faW5wLT5lY25fc3VwcG9ydGVkID0g
aW5wLT5lY25fc3VwcG9ydGVkOworCW5faW5wLT5wcnNjdHBfc3VwcG9ydGVkID0gaW5wLT5wcnNj
dHBfc3VwcG9ydGVkOworCW5faW5wLT5hdXRoX3N1cHBvcnRlZCA9IGlucC0+YXV0aF9zdXBwb3J0
ZWQ7CisJbl9pbnAtPmFzY29uZl9zdXBwb3J0ZWQgPSBpbnAtPmFzY29uZl9zdXBwb3J0ZWQ7CisJ
bl9pbnAtPnJlY29uZmlnX3N1cHBvcnRlZCA9IGlucC0+cmVjb25maWdfc3VwcG9ydGVkOworCW5f
aW5wLT5ucnNhY2tfc3VwcG9ydGVkID0gaW5wLT5ucnNhY2tfc3VwcG9ydGVkOworCW5faW5wLT5w
a3Rkcm9wX3N1cHBvcnRlZCA9IGlucC0+cGt0ZHJvcF9zdXBwb3J0ZWQ7CisJbl9pbnAtPnBhcnRp
YWxfZGVsaXZlcnlfcG9pbnQgPSBpbnAtPnBhcnRpYWxfZGVsaXZlcnlfcG9pbnQ7CisJbl9pbnAt
PnNjdHBfY29udGV4dCA9IGlucC0+c2N0cF9jb250ZXh0OworCW5faW5wLT5tYXhfY3duZCA9IGlu
cC0+bWF4X2N3bmQ7CisJbl9pbnAtPmxvY2FsX3N0cnJlc2V0X3N1cHBvcnQgPSBpbnAtPmxvY2Fs
X3N0cnJlc2V0X3N1cHBvcnQ7CisJbl9pbnAtPmlucF9zdGFydGluZ19wb2ludF9mb3JfaXRlcmF0
b3IgPSBOVUxMOworCS8qIGNvcHkgaW4gdGhlIGF1dGhlbnRpY2F0aW9uIHBhcmFtZXRlcnMgZnJv
bSB0aGUgb3JpZ2luYWwgZW5kcG9pbnQgKi8KKwlpZiAobl9pbnAtPnNjdHBfZXAubG9jYWxfaG1h
Y3MpCisJCXNjdHBfZnJlZV9obWFjbGlzdChuX2lucC0+c2N0cF9lcC5sb2NhbF9obWFjcyk7CisJ
bl9pbnAtPnNjdHBfZXAubG9jYWxfaG1hY3MgPQorCSAgICBzY3RwX2NvcHlfaG1hY2xpc3QoaW5w
LT5zY3RwX2VwLmxvY2FsX2htYWNzKTsKKwlpZiAobl9pbnAtPnNjdHBfZXAubG9jYWxfYXV0aF9j
aHVua3MpCisJCXNjdHBfZnJlZV9jaHVua2xpc3Qobl9pbnAtPnNjdHBfZXAubG9jYWxfYXV0aF9j
aHVua3MpOworCW5faW5wLT5zY3RwX2VwLmxvY2FsX2F1dGhfY2h1bmtzID0KKwkgICAgc2N0cF9j
b3B5X2NodW5rbGlzdChpbnAtPnNjdHBfZXAubG9jYWxfYXV0aF9jaHVua3MpOworCSh2b2lkKXNj
dHBfY29weV9za2V5bGlzdCgmaW5wLT5zY3RwX2VwLnNoYXJlZF9rZXlzLAorCSAgICAmbl9pbnAt
PnNjdHBfZXAuc2hhcmVkX2tleXMpOworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwluX2lu
cC0+dWxwX2luZm8gPSBpbnAtPnVscF9pbmZvOworCW5faW5wLT5yZWN2X2NhbGxiYWNrID0gaW5w
LT5yZWN2X2NhbGxiYWNrOworCW5faW5wLT5zZW5kX2NhbGxiYWNrID0gaW5wLT5zZW5kX2NhbGxi
YWNrOworCW5faW5wLT5zZW5kX3NiX3RocmVzaG9sZCA9IGlucC0+c2VuZF9zYl90aHJlc2hvbGQ7
CisjZW5kaWYKKwkvKgorCSAqIE5vdyB3ZSBtdXN0IG1vdmUgaXQgZnJvbSBvbmUgaGFzaCB0YWJs
ZSB0byBhbm90aGVyIGFuZCBnZXQgdGhlCisJICogc3RjYiBpbiB0aGUgcmlnaHQgcGxhY2UuCisJ
ICovCisJc2N0cF9tb3ZlX3BjYl9hbmRfYXNzb2MoaW5wLCBuX2lucCwgc3RjYik7CisJYXRvbWlj
X2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CXNjdHBfcHVsbF9vZmZfY29udHJvbF90b19uZXdfaW5wKGlucCwgbl9pbnAsIHN0Y2IsIFNCTF9X
QUlUKTsKKyNlbHNlCisJc2N0cF9wdWxsX29mZl9jb250cm9sX3RvX25ld19pbnAoaW5wLCBuX2lu
cCwgc3RjYiwgTV9XQUlUT0spOworI2VuZGlmCisJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+
YXNvYy5yZWZjbnQsIDEpOworCisJcmV0dXJuICgwKTsKK30KKworI2lmIGRlZmluZWQoSEFWRV9T
Q1RQX1BFRUxPRkZfU09DS09QVCkKK3N0cnVjdCBzb2NrZXQgKgorc2N0cF9nZXRfcGVlbG9mZihz
dHJ1Y3Qgc29ja2V0ICpoZWFkLCBzY3RwX2Fzc29jX3QgYXNzb2NfaWQsIGludCAqZXJyb3IpCit7
CisJc3RydWN0IHNvY2tldCAqbmV3c287CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgKm5faW5w
OworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKKworCVNDVFBEQkcoU0NUUF9ERUJVR19QRUVMMSwg
IlNDVFAgcGVlbC1vZmYgY2FsbGVkXG4iKTsKKwlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilo
ZWFkLT5zb19wY2I7CisJaWYgKGlucCA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QRUVMT0ZGLCBFRkFVTFQpOworCQkqZXJy
b3IgPSBFRkFVTFQ7CisJCXJldHVybiAoTlVMTCk7CisJfQorCXN0Y2IgPSBzY3RwX2ZpbmRhc3Nv
Y2lhdGlvbl9lcF9hc29jaWQoaW5wLCBhc3NvY19pZCwgMSk7CisJaWYgKHN0Y2IgPT0gTlVMTCkg
eworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
UEVFTE9GRiwgRU5PVENPTk4pOworCQkqZXJyb3IgPSBFTk9UQ09OTjsKKwkJcmV0dXJuIChOVUxM
KTsKKwl9CisJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKwlDVVJWTkVUX1NFVChoZWFkLT5zb192bmV0KTsKKyNlbmRpZgorCW5ld3Nv
ID0gc29uZXdjb25uKGhlYWQsIFNTX0lTQ09OTkVDVEVECisjaWYgZGVmaW5lZChfX0FQUExFX18p
ICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJICAgICwgTlVMTAorI2VuZGlmCisJCSk7Cisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlDVVJW
TkVUX1JFU1RPUkUoKTsKKyNlbmRpZgorCWlmIChuZXdzbyA9PSBOVUxMKSB7CisJCVNDVFBEQkco
U0NUUF9ERUJVR19QRUVMMSwgInNjdHBfcGVlbG9mZjpzb25ld2Nvbm4gZmFpbGVkXG4iKTsKKwkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QRUVM
T0ZGLCBFTk9NRU0pOworCQkqZXJyb3IgPSBFTk9NRU07CisJCWF0b21pY19zdWJ0cmFjdF9pbnQo
JnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJcmV0dXJuIChOVUxMKTsKKworCX0KKyNpZiBkZWZp
bmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkgIGVsc2UgeworCQlT
Q1RQX1NPQ0tFVF9MT0NLKG5ld3NvLCAxKTsKKwl9CisjZW5kaWYKKwlTQ1RQX1RDQl9MT0NLKHN0
Y2IpOworCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwluX2lu
cCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKW5ld3NvLT5zb19wY2I7CisJU09DS19MT0NLKGhlYWQp
OworCW5faW5wLT5zY3RwX2ZsYWdzID0gKFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUgfAorCSAgICBT
Q1RQX1BDQl9GTEFHU19DT05ORUNURUQgfAorCSAgICBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09M
IHwJLyogVHVybiBvbiBCbG9ja2luZyBJTyAqLworCSAgICAoU0NUUF9QQ0JfQ09QWV9GTEFHUyAm
IGlucC0+c2N0cF9mbGFncykpOworCW5faW5wLT5zY3RwX2ZlYXR1cmVzID0gaW5wLT5zY3RwX2Zl
YXR1cmVzOworCW5faW5wLT5zY3RwX2ZyYWdfcG9pbnQgPSBpbnAtPnNjdHBfZnJhZ19wb2ludDsK
KwluX2lucC0+c2N0cF9jbXRfb25fb2ZmID0gaW5wLT5zY3RwX2NtdF9vbl9vZmY7CisJbl9pbnAt
PmVjbl9zdXBwb3J0ZWQgPSBpbnAtPmVjbl9zdXBwb3J0ZWQ7CisJbl9pbnAtPnByc2N0cF9zdXBw
b3J0ZWQgPSBpbnAtPnByc2N0cF9zdXBwb3J0ZWQ7CisJbl9pbnAtPmF1dGhfc3VwcG9ydGVkID0g
aW5wLT5hdXRoX3N1cHBvcnRlZDsKKwluX2lucC0+YXNjb25mX3N1cHBvcnRlZCA9IGlucC0+YXNj
b25mX3N1cHBvcnRlZDsKKwluX2lucC0+cmVjb25maWdfc3VwcG9ydGVkID0gaW5wLT5yZWNvbmZp
Z19zdXBwb3J0ZWQ7CisJbl9pbnAtPm5yc2Fja19zdXBwb3J0ZWQgPSBpbnAtPm5yc2Fja19zdXBw
b3J0ZWQ7CisJbl9pbnAtPnBrdGRyb3Bfc3VwcG9ydGVkID0gaW5wLT5wa3Rkcm9wX3N1cHBvcnRl
ZDsKKwluX2lucC0+cGFydGlhbF9kZWxpdmVyeV9wb2ludCA9IGlucC0+cGFydGlhbF9kZWxpdmVy
eV9wb2ludDsKKwluX2lucC0+c2N0cF9jb250ZXh0ID0gaW5wLT5zY3RwX2NvbnRleHQ7CisJbl9p
bnAtPm1heF9jd25kID0gaW5wLT5tYXhfY3duZDsKKwluX2lucC0+bG9jYWxfc3RycmVzZXRfc3Vw
cG9ydCA9IGlucC0+bG9jYWxfc3RycmVzZXRfc3VwcG9ydDsKKwluX2lucC0+aW5wX3N0YXJ0aW5n
X3BvaW50X2Zvcl9pdGVyYXRvciA9IE5VTEw7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CW5faW5wLT51bHBfaW5mbyA9IGlucC0+dWxwX2luZm87CisJbl9pbnAtPnJlY3ZfY2FsbGJhY2sg
PSBpbnAtPnJlY3ZfY2FsbGJhY2s7CisJbl9pbnAtPnNlbmRfY2FsbGJhY2sgPSBpbnAtPnNlbmRf
Y2FsbGJhY2s7CisJbl9pbnAtPnNlbmRfc2JfdGhyZXNob2xkID0gaW5wLT5zZW5kX3NiX3RocmVz
aG9sZDsKKyNlbmRpZgorCisJLyogY29weSBpbiB0aGUgYXV0aGVudGljYXRpb24gcGFyYW1ldGVy
cyBmcm9tIHRoZSBvcmlnaW5hbCBlbmRwb2ludCAqLworCWlmIChuX2lucC0+c2N0cF9lcC5sb2Nh
bF9obWFjcykKKwkJc2N0cF9mcmVlX2htYWNsaXN0KG5faW5wLT5zY3RwX2VwLmxvY2FsX2htYWNz
KTsKKwluX2lucC0+c2N0cF9lcC5sb2NhbF9obWFjcyA9CisJICAgIHNjdHBfY29weV9obWFjbGlz
dChpbnAtPnNjdHBfZXAubG9jYWxfaG1hY3MpOworCWlmIChuX2lucC0+c2N0cF9lcC5sb2NhbF9h
dXRoX2NodW5rcykKKwkJc2N0cF9mcmVlX2NodW5rbGlzdChuX2lucC0+c2N0cF9lcC5sb2NhbF9h
dXRoX2NodW5rcyk7CisJbl9pbnAtPnNjdHBfZXAubG9jYWxfYXV0aF9jaHVua3MgPQorCSAgICBz
Y3RwX2NvcHlfY2h1bmtsaXN0KGlucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5rcyk7CisJKHZv
aWQpc2N0cF9jb3B5X3NrZXlsaXN0KCZpbnAtPnNjdHBfZXAuc2hhcmVkX2tleXMsCisJICAgICZu
X2lucC0+c2N0cF9lcC5zaGFyZWRfa2V5cyk7CisKKwluX2lucC0+c2N0cF9zb2NrZXQgPSBuZXdz
bzsKKwlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfQVVUT0NMT1NF
KSkgeworCQlzY3RwX2ZlYXR1cmVfb2ZmKG5faW5wLCBTQ1RQX1BDQl9GTEFHU19BVVRPQ0xPU0Up
OworCQluX2lucC0+c2N0cF9lcC5hdXRvX2Nsb3NlX3RpbWUgPSAwOworCQlzY3RwX3RpbWVyX3N0
b3AoU0NUUF9USU1FUl9UWVBFX0FVVE9DTE9TRSwgbl9pbnAsIHN0Y2IsIE5VTEwsCisJCQkJU0NU
UF9GUk9NX1NDVFBfUEVFTE9GRiArIFNDVFBfTE9DXzEpOworCX0KKwkvKiBUdXJuIG9mZiBhbnkg
bm9uLWJsb2NraW5nIHNlbWFudGljLiAqLworCVNPQ0tfTE9DSyhuZXdzbyk7CisJU0NUUF9DTEVB
Ul9TT19OQklPKG5ld3NvKTsKKwluZXdzby0+c29fc3RhdGUgfD0gU1NfSVNDT05ORUNURUQ7CisJ
U09DS19VTkxPQ0sobmV3c28pOworCS8qIFdlIHJlbW92ZSBpdCByaWdodCBhd2F5ICovCisKKyNp
ZmRlZiBTQ1RQX0xPQ0tfTE9HR0lORworCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2lu
Z19sZXZlbCkgJiBTQ1RQX0xPQ0tfTE9HR0lOR19FTkFCTEUpIHsKKwkJc2N0cF9sb2dfbG9jayhp
bnAsIChzdHJ1Y3Qgc2N0cF90Y2IgKilOVUxMLCBTQ1RQX0xPR19MT0NLX1NPQ0spOworCX0KKyNl
bmRpZgorCVRBSUxRX1JFTU9WRSgmaGVhZC0+c29fY29tcCwgbmV3c28sIHNvX2xpc3QpOworCWhl
YWQtPnNvX3FsZW4tLTsKKwlTT0NLX1VOTE9DSyhoZWFkKTsKKwkvKgorCSAqIE5vdyB3ZSBtdXN0
IG1vdmUgaXQgZnJvbSBvbmUgaGFzaCB0YWJsZSB0byBhbm90aGVyIGFuZCBnZXQgdGhlCisJICog
c3RjYiBpbiB0aGUgcmlnaHQgcGxhY2UuCisJICovCisJc2N0cF9tb3ZlX3BjYl9hbmRfYXNzb2Mo
aW5wLCBuX2lucCwgc3RjYik7CisJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAx
KTsKKwlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJLyoKKwkgKiBBbmQgbm93IHRoZSBmaW5hbCBo
YWNrLiBXZSBtb3ZlIGRhdGEgaW4gdGhlIHBlbmRpbmcgc2lkZSBpLmUuCisJICogaGVhZCB0byB0
aGUgbmV3IHNvY2tldCBidWZmZXIuIExldCB0aGUgR1JVQkJJTkcgYmVnaW4gOi0wCisJICovCisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlzY3Rw
X3B1bGxfb2ZmX2NvbnRyb2xfdG9fbmV3X2lucChpbnAsIG5faW5wLCBzdGNiLCBTQkxfV0FJVCk7
CisjZWxzZQorCXNjdHBfcHVsbF9vZmZfY29udHJvbF90b19uZXdfaW5wKGlucCwgbl9pbnAsIHN0
Y2IsIE1fV0FJVE9LKTsKKyNlbmRpZgorCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2Mu
cmVmY250LCAxKTsKKwlyZXR1cm4gKG5ld3NvKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcGVlbG9mZi5oIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0
cGxpYi9uZXRpbmV0L3NjdHBfcGVlbG9mZi5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAw
MDAwMDAwMDAwMC4uN2UxYzVlY2VlYjhlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNy
c2N0cGxpYi9uZXRpbmV0L3NjdHBfcGVlbG9mZi5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qLQorICog
U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICoKKyAqIENvcHlyaWdodCAo
YykgMjAwMS0yMDA3LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVl
eGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZSBtZXQ6CisgKgorICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBiKSBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBjKSBOZWl0aGVy
IHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
ICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQor
ICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+Citf
X0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0cF9wZWVsb2ZmLmggMzA5NjA3
IDIwMTYtMTItMDYgMTA6MjE6MjVaIHR1ZXhlbiAkIik7CisjZW5kaWYKKworI2lmbmRlZiBfTkVU
SU5FVF9TQ1RQX1BFRUxPRkZfSF8KKyNkZWZpbmUgX05FVElORVRfU0NUUF9QRUVMT0ZGX0hfCisj
aWYgZGVmaW5lZChIQVZFX1NDVFBfUEVFTE9GRl9TT0NLT1BUKQorLyogc29ja2V0IG9wdGlvbiBw
ZWVsb2ZmICovCitzdHJ1Y3Qgc2N0cF9wZWVsb2ZmX29wdCB7CisjaWYgIShkZWZpbmVkKF9XSU4z
MikgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykpCisJaW50IHM7CisjZWxzZQorCUhBTkRMRSBz
OworI2VuZGlmCisJc2N0cF9hc3NvY190IGFzc29jX2lkOworI2lmICEoZGVmaW5lZChfV0lOMzIp
ICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQorCWludCBuZXdfc2Q7CisjZWxzZQorCUhBTkRM
RSBuZXdfc2Q7CisjZW5kaWYKK307CisjZW5kaWYgLyogSEFWRV9TQ1RQX1BFRUxPRkZfU09DS09Q
VCAqLworI2lmIGRlZmluZWQoX0tFUk5FTCkKK2ludCBzY3RwX2Nhbl9wZWVsX29mZihzdHJ1Y3Qg
c29ja2V0ICosIHNjdHBfYXNzb2NfdCk7CitpbnQgc2N0cF9kb19wZWVsb2ZmKHN0cnVjdCBzb2Nr
ZXQgKiwgc3RydWN0IHNvY2tldCAqLCBzY3RwX2Fzc29jX3QpOworI2lmIGRlZmluZWQoSEFWRV9T
Q1RQX1BFRUxPRkZfU09DS09QVCkKK3N0cnVjdCBzb2NrZXQgKnNjdHBfZ2V0X3BlZWxvZmYoc3Ry
dWN0IHNvY2tldCAqLCBzY3RwX2Fzc29jX3QsIGludCAqKTsKK2ludCBzY3RwX3BlZWxvZmZfb3B0
aW9uKHN0cnVjdCBwcm9jICpwLCBzdHJ1Y3Qgc2N0cF9wZWVsb2ZmX29wdCAqcGVlbG9mZik7Cisj
ZW5kaWYgLyogSEFWRV9TQ1RQX1BFRUxPRkZfU09DS09QVCAqLworI2VuZGlmIC8qIF9LRVJORUwg
Ki8KKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitpbnQgc2N0cF9jYW5fcGVlbF9vZmYoc3Ry
dWN0IHNvY2tldCAqLCBzY3RwX2Fzc29jX3QpOworaW50IHNjdHBfZG9fcGVlbG9mZihzdHJ1Y3Qg
c29ja2V0ICosIHN0cnVjdCBzb2NrZXQgKiwgc2N0cF9hc3NvY190KTsKKyNlbmRpZiAvKiBfX1Vz
ZXJzcGFjZV9fICovCisjZW5kaWYgLyogX05FVElORVRfU0NUUF9QRUVMT0ZGX0hfICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wcm9jZXNzX2xvY2suaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3Byb2Nlc3NfbG9jay5oCm5ldyBmaWxl
IG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMC4uZmYwZTA1MDQ4ZTYzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcHJvY2Vzc19sb2NrLmgK
QEAgLTAsMCArMSw2NzcgQEAKKy8qLQorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0z
LUNsYXVzZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA3LCBieSBDaXNjbyBTeXN0ZW1z
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMSwg
YnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChj
KSAyMDA4LTIwMTEsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogYSkgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90
aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisjaWZuZGVmIF9fc2N0cF9wcm9jZXNzX2xvY2tfaF9fCisjZGVmaW5lIF9fc2N0cF9wcm9jZXNz
X2xvY2tfaF9fCisKKy8qCisgKiBOZWVkIHRvIHlldCBkZWZpbmUgZml2ZSBhdG9taWMgZnVjdGlv
bnMgb3IKKyAqIHRoZWlyIGVxdWl2YWxhbnQuCisgKiAtIGF0b21pY19hZGRfaW50KCZmb28sIHZh
bCkgLSBhZGQgYXRvbWljYWxseSB0aGUgdmFsdWUKKyAqIC0gYXRvbWljX2ZldGNoYWRkX2ludCgm
Zm9vLCB2YWwpIC0gZG9lcyBzYW1lIGFzIGF0b21pY19hZGRfaW50CisgKgkJCQkgICAgICBidXQg
dmFsdWUgaXQgd2FzIGlzIHJldHVybmVkLgorICogLSBhdG9taWNfc3VidHJhY3RfaW50KCZmb28s
IHZhbCkgLSBjYW4gYmUgbWFkZSBmcm9tIGF0b21pY19hZGRfaW50KCkKKyAqCisgKiAtIGF0b21p
Y19jbXBzZXRfaW50KCZmb28sIHZhbHVlLCBuZXd2YWx1ZSkgLSBEb2VzIGEgc2V0IG9mIG5ld3Zh
bHVlCisgKgkJCQkJICAgICAgICBpbiBmb28gaWYgYW5kIG9ubHkgaWYKKyAqCQkJCQkgICAgICAg
IGZvbyBpcyB2YWx1ZS4gUmV0dXJucyAwCisgKgkJCQkJICAgICAgICBvbiBzdWNjZXNzLgorICov
CisKKyNpZmRlZiBTQ1RQX1BFUl9TT0NLRVRfTE9DS0lORworLyoKKyAqIHBlciBzb2NrZXQgbGV2
ZWwgbG9ja2luZworICovCisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKy8qIExvY2sgZm9yIElORk8g
c3R1ZmYgKi8KKyNkZWZpbmUgU0NUUF9JTlBfSU5GT19MT0NLX0lOSVQoKQorI2RlZmluZSBTQ1RQ
X0lOUF9JTkZPX1JMT0NLKCkKKyNkZWZpbmUgU0NUUF9JTlBfSU5GT19SVU5MT0NLKCkKKyNkZWZp
bmUgU0NUUF9JTlBfSU5GT19XTE9DSygpCisjZGVmaW5lIFNDVFBfSU5QX0lORk9fV1VOTE9DSygp
CisjZGVmaW5lIFNDVFBfSU5QX0lORk9fTE9DS19ERVNUUk9ZKCkKKyNkZWZpbmUgU0NUUF9JUElf
Q09VTlRfSU5JVCgpCisjZGVmaW5lIFNDVFBfSVBJX0NPVU5UX0RFU1RST1koKQorI2Vsc2UKKyNk
ZWZpbmUgU0NUUF9JTlBfSU5GT19MT0NLX0lOSVQoKQorI2RlZmluZSBTQ1RQX0lOUF9JTkZPX1JM
T0NLKCkKKyNkZWZpbmUgU0NUUF9JTlBfSU5GT19SVU5MT0NLKCkKKyNkZWZpbmUgU0NUUF9JTlBf
SU5GT19XTE9DSygpCisjZGVmaW5lIFNDVFBfSU5QX0lORk9fV1VOTE9DSygpCisjZGVmaW5lIFND
VFBfSU5QX0lORk9fTE9DS19ERVNUUk9ZKCkKKyNkZWZpbmUgU0NUUF9JUElfQ09VTlRfSU5JVCgp
CisjZGVmaW5lIFNDVFBfSVBJX0NPVU5UX0RFU1RST1koKQorI2VuZGlmCisKKyNkZWZpbmUgU0NU
UF9UQ0JfU0VORF9MT0NLX0lOSVQoX3RjYikKKyNkZWZpbmUgU0NUUF9UQ0JfU0VORF9MT0NLX0RF
U1RST1koX3RjYikKKyNkZWZpbmUgU0NUUF9UQ0JfU0VORF9MT0NLKF90Y2IpCisjZGVmaW5lIFND
VFBfVENCX1NFTkRfVU5MT0NLKF90Y2IpCisKKy8qIExvY2sgZm9yIElOUCAqLworI2RlZmluZSBT
Q1RQX0lOUF9MT0NLX0lOSVQoX2lucCkKKyNkZWZpbmUgU0NUUF9JTlBfTE9DS19ERVNUUk9ZKF9p
bnApCisKKyNkZWZpbmUgU0NUUF9JTlBfUkxPQ0soX2lucCkKKyNkZWZpbmUgU0NUUF9JTlBfUlVO
TE9DSyhfaW5wKQorI2RlZmluZSBTQ1RQX0lOUF9XTE9DSyhfaW5wKQorI2RlZmluZSBTQ1RQX0lO
UF9XVU5MT0NLKF9pbnApCisjZGVmaW5lIFNDVFBfSU5QX1JMT0NLX0FTU0VSVChfaW5wKQorI2Rl
ZmluZSBTQ1RQX0lOUF9XTE9DS19BU1NFUlQoX2lucCkKKyNkZWZpbmUgU0NUUF9JTlBfSU5DUl9S
RUYoX2lucCkKKyNkZWZpbmUgU0NUUF9JTlBfREVDUl9SRUYoX2lucCkKKworI2RlZmluZSBTQ1RQ
X0FTT0NfQ1JFQVRFX0xPQ0tfSU5JVChfaW5wKQorI2RlZmluZSBTQ1RQX0FTT0NfQ1JFQVRFX0xP
Q0tfREVTVFJPWShfaW5wKQorI2RlZmluZSBTQ1RQX0FTT0NfQ1JFQVRFX0xPQ0soX2lucCkKKyNk
ZWZpbmUgU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soX2lucCkKKworI2RlZmluZSBTQ1RQX0lOUF9S
RUFEX0lOSVQoX2lucCkKKyNkZWZpbmUgU0NUUF9JTlBfUkVBRF9ERVNUUk9ZKF9pbnApCisjZGVm
aW5lIFNDVFBfSU5QX1JFQURfTE9DSyhfaW5wKQorI2RlZmluZSBTQ1RQX0lOUF9SRUFEX1VOTE9D
SyhfaW5wKQorCisvKiBMb2NrIGZvciBUQ0IgKi8KKyNkZWZpbmUgU0NUUF9UQ0JfTE9DS19JTklU
KF90Y2IpCisjZGVmaW5lIFNDVFBfVENCX0xPQ0tfREVTVFJPWShfdGNiKQorI2RlZmluZSBTQ1RQ
X1RDQl9MT0NLKF90Y2IpCisjZGVmaW5lIFNDVFBfVENCX1RSWUxPQ0soX3RjYikgMQorI2RlZmlu
ZSBTQ1RQX1RDQl9VTkxPQ0soX3RjYikKKyNkZWZpbmUgU0NUUF9UQ0JfVU5MT0NLX0lGT1dORUQo
X3RjYikKKyNkZWZpbmUgU0NUUF9UQ0JfTE9DS19BU1NFUlQoX3RjYikKKworI2Vsc2UKKy8qCisg
KiBwZXIgdGNiIGxldmVsIGxvY2tpbmcKKyAqLworI2RlZmluZSBTQ1RQX0lQSV9DT1VOVF9JTklU
KCkKKworI2lmIGRlZmluZWQoX1dJTjMyKQorI2RlZmluZSBTQ1RQX1dRX0FERFJfSU5JVCgpIFwK
KwlJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyh3cV9hZGRyX210eCkp
CisjZGVmaW5lIFNDVFBfV1FfQUREUl9ERVNUUk9ZKCkgXAorCURlbGV0ZUNyaXRpY2FsU2VjdGlv
bigmU0NUUF9CQVNFX0lORk8od3FfYWRkcl9tdHgpKQorI2RlZmluZSBTQ1RQX1dRX0FERFJfTE9D
SygpIFwKKwlFbnRlckNyaXRpY2FsU2VjdGlvbigmU0NUUF9CQVNFX0lORk8od3FfYWRkcl9tdHgp
KQorI2RlZmluZSBTQ1RQX1dRX0FERFJfVU5MT0NLKCkgXAorCUxlYXZlQ3JpdGljYWxTZWN0aW9u
KCZTQ1RQX0JBU0VfSU5GTyh3cV9hZGRyX210eCkpCisjZGVmaW5lIFNDVFBfV1FfQUREUl9MT0NL
X0FTU0VSVCgpCisKKyNkZWZpbmUgU0NUUF9JTlBfSU5GT19MT0NLX0lOSVQoKSBcCisJSW5pdGlh
bGl6ZUNyaXRpY2FsU2VjdGlvbigmU0NUUF9CQVNFX0lORk8oaXBpX2VwX210eCkpCisjZGVmaW5l
IFNDVFBfSU5QX0lORk9fTE9DS19ERVNUUk9ZKCkgXAorCURlbGV0ZUNyaXRpY2FsU2VjdGlvbigm
U0NUUF9CQVNFX0lORk8oaXBpX2VwX210eCkpCisjZGVmaW5lIFNDVFBfSU5QX0lORk9fUkxPQ0so
KSBcCisJRW50ZXJDcml0aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9JTkZPKGlwaV9lcF9tdHgpKQor
I2RlZmluZSBTQ1RQX0lOUF9JTkZPX1RSWUxPQ0soKQlcCisJVHJ5RW50ZXJDcml0aWNhbFNlY3Rp
b24oJlNDVFBfQkFTRV9JTkZPKGlwaV9lcF9tdHgpKQorI2RlZmluZSBTQ1RQX0lOUF9JTkZPX1dM
T0NLKCkgXAorCUVudGVyQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBfbXR4
KSkKKyNkZWZpbmUgU0NUUF9JTlBfSU5GT19SVU5MT0NLKCkgXAorCUxlYXZlQ3JpdGljYWxTZWN0
aW9uKCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBfbXR4KSkKKyNkZWZpbmUgU0NUUF9JTlBfSU5GT19X
VU5MT0NLKCkJXAorCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBf
bXR4KSkKKworI2RlZmluZSBTQ1RQX0lQX1BLVExPR19JTklUKCkgXAorCUluaXRpYWxpemVDcml0
aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9JTkZPKGlwaV9wa3Rsb2dfbXR4KSkKKyNkZWZpbmUgU0NU
UF9JUF9QS1RMT0dfREVTVFJPWSAoKSBcCisJRGVsZXRlQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JB
U0VfSU5GTyhpcGlfcGt0bG9nX210eCkpCisjZGVmaW5lIFNDVFBfSVBfUEtUTE9HX0xPQ0soKSBc
CisJRW50ZXJDcml0aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9JTkZPKGlwaV9wa3Rsb2dfbXR4KSkK
KyNkZWZpbmUgU0NUUF9JUF9QS1RMT0dfVU5MT0NLKCkgXAorCUxlYXZlQ3JpdGljYWxTZWN0aW9u
KCZTQ1RQX0JBU0VfSU5GTyhpcGlfcGt0bG9nX210eCkpCisKKy8qCisgKiBUaGUgSU5QIGxvY2tz
IHdlIHdpbGwgdXNlIGZvciBsb2NraW5nIGFuIFNDVFAgZW5kcG9pbnQsIHNvIGZvciBleGFtcGxl
IGlmCisgKiB3ZSB3YW50IHRvIGNoYW5nZSBzb21ldGhpbmcgYXQgdGhlIGVuZHBvaW50IGxldmVs
IGZvciBleGFtcGxlIHJhbmRvbV9zdG9yZQorICogb3IgY29va2llIHNlY3JldHMgd2UgbG9jayB0
aGUgSU5QIGxldmVsLgorICovCisjZGVmaW5lIFNDVFBfSU5QX1JFQURfSU5JVChfaW5wKSBcCisJ
SW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmKF9pbnApLT5pbnBfcmRhdGFfbXR4KQorI2RlZmlu
ZSBTQ1RQX0lOUF9SRUFEX0RFU1RST1koX2lucCkgXAorCURlbGV0ZUNyaXRpY2FsU2VjdGlvbigm
KF9pbnApLT5pbnBfcmRhdGFfbXR4KQorI2RlZmluZSBTQ1RQX0lOUF9SRUFEX0xPQ0soX2lucCkg
XAorCUVudGVyQ3JpdGljYWxTZWN0aW9uKCYoX2lucCktPmlucF9yZGF0YV9tdHgpCisjZGVmaW5l
IFNDVFBfSU5QX1JFQURfVU5MT0NLKF9pbnApIFwKKwlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmKF9p
bnApLT5pbnBfcmRhdGFfbXR4KQorCisjZGVmaW5lIFNDVFBfSU5QX0xPQ0tfSU5JVChfaW5wKSBc
CisJSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmKF9pbnApLT5pbnBfbXR4KQorI2RlZmluZSBT
Q1RQX0lOUF9MT0NLX0RFU1RST1koX2lucCkgXAorCURlbGV0ZUNyaXRpY2FsU2VjdGlvbigmKF9p
bnApLT5pbnBfbXR4KQorI2lmZGVmIFNDVFBfTE9DS19MT0dHSU5HCisjZGVmaW5lIFNDVFBfSU5Q
X1JMT0NLKF9pbnApIGRvIHsgCQkJCQkJXAorCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9n
Z2luZ19sZXZlbCkgJiBTQ1RQX0xPQ0tfTE9HR0lOR19FTkFCTEUpCVwKKwkJc2N0cF9sb2dfbG9j
ayhfaW5wLCBOVUxMLCBTQ1RQX0xPR19MT0NLX0lOUCk7CQkJXAorCQlFbnRlckNyaXRpY2FsU2Vj
dGlvbigmKF9pbnApLT5pbnBfbXR4KTsJCQkJXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgU0NUUF9J
TlBfV0xPQ0soX2lucCkgZG8geyAJCQkJCQlcCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9s
b2dnaW5nX2xldmVsKSAmIFNDVFBfTE9DS19MT0dHSU5HX0VOQUJMRSkJXAorCQlzY3RwX2xvZ19s
b2NrKF9pbnAsIE5VTEwsIFNDVFBfTE9HX0xPQ0tfSU5QKTsJCQlcCisJRW50ZXJDcml0aWNhbFNl
Y3Rpb24oJihfaW5wKS0+aW5wX210eCk7CQkJCQlcCit9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZp
bmUgU0NUUF9JTlBfUkxPQ0soX2lucCkgXAorCUVudGVyQ3JpdGljYWxTZWN0aW9uKCYoX2lucCkt
PmlucF9tdHgpCisjZGVmaW5lIFNDVFBfSU5QX1dMT0NLKF9pbnApIFwKKwlFbnRlckNyaXRpY2Fs
U2VjdGlvbigmKF9pbnApLT5pbnBfbXR4KQorI2VuZGlmCisjZGVmaW5lIFNDVFBfSU5QX1JMT0NL
X0FTU0VSVChfdGNiKQorI2RlZmluZSBTQ1RQX0lOUF9XTE9DS19BU1NFUlQoX3RjYikKKworI2Rl
ZmluZSBTQ1RQX1RDQl9TRU5EX0xPQ0tfSU5JVChfdGNiKSBcCisJSW5pdGlhbGl6ZUNyaXRpY2Fs
U2VjdGlvbigmKF90Y2IpLT50Y2Jfc2VuZF9tdHgpCisjZGVmaW5lIFNDVFBfVENCX1NFTkRfTE9D
S19ERVNUUk9ZKF90Y2IpIFwKKwlEZWxldGVDcml0aWNhbFNlY3Rpb24oJihfdGNiKS0+dGNiX3Nl
bmRfbXR4KQorI2RlZmluZSBTQ1RQX1RDQl9TRU5EX0xPQ0soX3RjYikgXAorCUVudGVyQ3JpdGlj
YWxTZWN0aW9uKCYoX3RjYiktPnRjYl9zZW5kX210eCkKKyNkZWZpbmUgU0NUUF9UQ0JfU0VORF9V
TkxPQ0soX3RjYikgXAorCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCYoX3RjYiktPnRjYl9zZW5kX210
eCkKKworI2RlZmluZSBTQ1RQX0lOUF9JTkNSX1JFRihfaW5wKSBhdG9taWNfYWRkX2ludCgmKChf
aW5wKS0+cmVmY291bnQpLCAxKQorI2RlZmluZSBTQ1RQX0lOUF9ERUNSX1JFRihfaW5wKSBhdG9t
aWNfYWRkX2ludCgmKChfaW5wKS0+cmVmY291bnQpLCAtMSkKKworI2RlZmluZSBTQ1RQX0FTT0Nf
Q1JFQVRFX0xPQ0tfSU5JVChfaW5wKSBcCisJSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmKF9p
bnApLT5pbnBfY3JlYXRlX210eCkKKyNkZWZpbmUgU0NUUF9BU09DX0NSRUFURV9MT0NLX0RFU1RS
T1koX2lucCkgXAorCURlbGV0ZUNyaXRpY2FsU2VjdGlvbigmKF9pbnApLT5pbnBfY3JlYXRlX210
eCkKKyNpZmRlZiBTQ1RQX0xPQ0tfTE9HR0lORworI2RlZmluZSBTQ1RQX0FTT0NfQ1JFQVRFX0xP
Q0soX2lucCkgZG8gewkJCQkJXAorCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19s
ZXZlbCkgJiBTQ1RQX0xPQ0tfTE9HR0lOR19FTkFCTEUpCVwKKwkJc2N0cF9sb2dfbG9jayhfaW5w
LCBOVUxMLCBTQ1RQX0xPR19MT0NLX0NSRUFURSk7CQlcCisJRW50ZXJDcml0aWNhbFNlY3Rpb24o
JihfaW5wKS0+aW5wX2NyZWF0ZV9tdHgpOwkJCQlcCit9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZp
bmUgU0NUUF9BU09DX0NSRUFURV9MT0NLKF9pbnApIFwKKwlFbnRlckNyaXRpY2FsU2VjdGlvbigm
KF9pbnApLT5pbnBfY3JlYXRlX210eCkKKyNlbmRpZgorCisjZGVmaW5lIFNDVFBfSU5QX1JVTkxP
Q0soX2lucCkgXAorCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCYoX2lucCktPmlucF9tdHgpCisjZGVm
aW5lIFNDVFBfSU5QX1dVTkxPQ0soX2lucCkgXAorCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCYoX2lu
cCktPmlucF9tdHgpCisjZGVmaW5lIFNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKF9pbnApIFwKKwlM
ZWF2ZUNyaXRpY2FsU2VjdGlvbigmKF9pbnApLT5pbnBfY3JlYXRlX210eCkKKworLyoKKyAqIEZv
ciB0aGUgbWFqb3JpdHkgb2YgdGhpbmdzIChvbmNlIHdlIGhhdmUgZm91bmQgdGhlIGFzc29jaWF0
aW9uKSB3ZSB3aWxsCisgKiBsb2NrIHRoZSBhY3R1YWwgYXNzb2NpYXRpb24gbXV0ZXguIFRoaXMg
d2lsbCBwcm90ZWN0IGFsbCB0aGUgYXNzb2ljaWF0aW9uCisgKiBsZXZlbCBxdWV1ZXMgYW5kIHN0
cmVhbXMgYW5kIHN1Y2guIFdlIHdpbGwgbmVlZCB0byBsb2NrIHRoZSBzb2NrZXQgbGF5ZXIKKyAq
IHdoZW4gd2Ugc3R1ZmYgZGF0YSB1cCBpbnRvIHRoZSByZWNlaXZpbmcgc2JfbWIuIEkuZS4gd2Ug
d2lsbCBuZWVkIHRvIGRvIGFuCisgKiBleHRyYSBTT0NLQlVGX0xPQ0soJnNvLT5zb19yY3YpIGV2
ZW4gdGhvdWdoIHRoZSBhc3NvY2lhdGlvbiBpcyBsb2NrZWQuCisgKi8KKworI2RlZmluZSBTQ1RQ
X1RDQl9MT0NLX0lOSVQoX3RjYikgXAorCUluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oJihfdGNi
KS0+dGNiX210eCkKKyNkZWZpbmUgU0NUUF9UQ0JfTE9DS19ERVNUUk9ZKF90Y2IpIFwKKwlEZWxl
dGVDcml0aWNhbFNlY3Rpb24oJihfdGNiKS0+dGNiX210eCkKKyNpZmRlZiBTQ1RQX0xPQ0tfTE9H
R0lORworI2RlZmluZSBTQ1RQX1RDQl9MT0NLKF90Y2IpIGRvIHsJCQkJCQlcCisJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9DS19MT0dHSU5HX0VOQUJM
RSkJXAorCQlzY3RwX2xvZ19sb2NrKF90Y2ItPnNjdHBfZXAsIF90Y2IsIFNDVFBfTE9HX0xPQ0tf
VENCKTsJCVwKKwlFbnRlckNyaXRpY2FsU2VjdGlvbigmKF90Y2IpLT50Y2JfbXR4KTsJCQkJCVwK
K30gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBTQ1RQX1RDQl9MT0NLKF90Y2IpIFwKKwlFbnRl
ckNyaXRpY2FsU2VjdGlvbigmKF90Y2IpLT50Y2JfbXR4KQorI2VuZGlmCisjZGVmaW5lIFNDVFBf
VENCX1RSWUxPQ0soX3RjYikgCSgoVHJ5RW50ZXJDcml0aWNhbFNlY3Rpb24oJihfdGNiKS0+dGNi
X210eCkpKQorI2RlZmluZSBTQ1RQX1RDQl9VTkxPQ0soX3RjYikgXAorCUxlYXZlQ3JpdGljYWxT
ZWN0aW9uKCYoX3RjYiktPnRjYl9tdHgpCisjZGVmaW5lIFNDVFBfVENCX0xPQ0tfQVNTRVJUKF90
Y2IpCisKKyNlbHNlIC8qIGFsbCBVc2Vyc3BhY2VzIGV4Y2VwdCBXaW5kb3dzICovCisjZGVmaW5l
IFNDVFBfV1FfQUREUl9JTklUKCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfaW5pdCgmU0NUUF9C
QVNFX0lORk8od3FfYWRkcl9tdHgpLCAmU0NUUF9CQVNFX1ZBUihtdHhfYXR0cikpCisjZGVmaW5l
IFNDVFBfV1FfQUREUl9ERVNUUk9ZKCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgm
U0NUUF9CQVNFX0lORk8od3FfYWRkcl9tdHgpKQorI2lmZGVmIElOVkFSSUFOVFMKKyNkZWZpbmUg
U0NUUF9XUV9BRERSX0xPQ0soKSBcCisJS0FTU0VSVChwdGhyZWFkX211dGV4X2xvY2soJlNDVFBf
QkFTRV9JTkZPKHdxX2FkZHJfbXR4KSkgPT0gMCwgKCIlczogd3FfYWRkcl9tdHggYWxyZWFkeSBs
b2NrZWQiLCBfX2Z1bmNfXykpCisjZGVmaW5lIFNDVFBfV1FfQUREUl9VTkxPQ0soKSBcCisJS0FT
U0VSVChwdGhyZWFkX211dGV4X3VubG9jaygmU0NUUF9CQVNFX0lORk8od3FfYWRkcl9tdHgpKSA9
PSAwLCAoIiVzOiB3cV9hZGRyX210eCBub3QgbG9ja2VkIiwgX19mdW5jX18pKQorI2Vsc2UKKyNk
ZWZpbmUgU0NUUF9XUV9BRERSX0xPQ0soKSBcCisJKHZvaWQpcHRocmVhZF9tdXRleF9sb2NrKCZT
Q1RQX0JBU0VfSU5GTyh3cV9hZGRyX210eCkpCisjZGVmaW5lIFNDVFBfV1FfQUREUl9VTkxPQ0so
KSBcCisJKHZvaWQpcHRocmVhZF9tdXRleF91bmxvY2soJlNDVFBfQkFTRV9JTkZPKHdxX2FkZHJf
bXR4KSkKKyNlbmRpZgorI2RlZmluZSBTQ1RQX1dRX0FERFJfTE9DS19BU1NFUlQoKSBcCisJS0FT
U0VSVChwdGhyZWFkX211dGV4X3RyeWxvY2soJlNDVFBfQkFTRV9JTkZPKHdxX2FkZHJfbXR4KSkg
PT0gRUJVU1ksICgiJXM6IHdxX2FkZHJfbXR4IG5vdCBsb2NrZWQiLCBfX2Z1bmNfXykpCisKKyNk
ZWZpbmUgU0NUUF9JTlBfSU5GT19MT0NLX0lOSVQoKSBcCisJKHZvaWQpcHRocmVhZF9tdXRleF9p
bml0KCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBfbXR4KSwgJlNDVFBfQkFTRV9WQVIobXR4X2F0dHIp
KQorI2RlZmluZSBTQ1RQX0lOUF9JTkZPX0xPQ0tfREVTVFJPWSgpIFwKKwkodm9pZClwdGhyZWFk
X211dGV4X2Rlc3Ryb3koJlNDVFBfQkFTRV9JTkZPKGlwaV9lcF9tdHgpKQorI2lmZGVmIElOVkFS
SUFOVFMKKyNkZWZpbmUgU0NUUF9JTlBfSU5GT19STE9DSygpIFwKKwlLQVNTRVJUKHB0aHJlYWRf
bXV0ZXhfbG9jaygmU0NUUF9CQVNFX0lORk8oaXBpX2VwX210eCkpID09IDAsICgiJXM6IGlwaV9l
cF9tdHggYWxyZWFkeSBsb2NrZWQiLCBfX2Z1bmNfXykpCisjZGVmaW5lIFNDVFBfSU5QX0lORk9f
V0xPQ0soKSBcCisJS0FTU0VSVChwdGhyZWFkX211dGV4X2xvY2soJlNDVFBfQkFTRV9JTkZPKGlw
aV9lcF9tdHgpKSA9PSAwLCAoIiVzOiBpcGlfZXBfbXR4IGFscmVhZHkgbG9ja2VkIiwgX19mdW5j
X18pKQorI2RlZmluZSBTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKSBcCisJS0FTU0VSVChwdGhyZWFk
X211dGV4X3VubG9jaygmU0NUUF9CQVNFX0lORk8oaXBpX2VwX210eCkpID09IDAsICgiJXM6IGlw
aV9lcF9tdHggbm90IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNkZWZpbmUgU0NUUF9JTlBfSU5GT19X
VU5MT0NLKCkgXAorCUtBU1NFUlQocHRocmVhZF9tdXRleF91bmxvY2soJlNDVFBfQkFTRV9JTkZP
KGlwaV9lcF9tdHgpKSA9PSAwLCAoIiVzOiBpcGlfZXBfbXR4IG5vdCBsb2NrZWQiLCBfX2Z1bmNf
XykpCisjZWxzZQorI2RlZmluZSBTQ1RQX0lOUF9JTkZPX1JMT0NLKCkgXAorCSh2b2lkKXB0aHJl
YWRfbXV0ZXhfbG9jaygmU0NUUF9CQVNFX0lORk8oaXBpX2VwX210eCkpCisjZGVmaW5lIFNDVFBf
SU5QX0lORk9fV0xPQ0soKSBcCisJKHZvaWQpcHRocmVhZF9tdXRleF9sb2NrKCZTQ1RQX0JBU0Vf
SU5GTyhpcGlfZXBfbXR4KSkKKyNkZWZpbmUgU0NUUF9JTlBfSU5GT19SVU5MT0NLKCkgXAorCSh2
b2lkKXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBfbXR4KSkKKyNk
ZWZpbmUgU0NUUF9JTlBfSU5GT19XVU5MT0NLKCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5s
b2NrKCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBfbXR4KSkKKyNlbmRpZgorI2RlZmluZSBTQ1RQX0lO
UF9JTkZPX1RSWUxPQ0soKSBcCisJKCEocHRocmVhZF9tdXRleF90cnlsb2NrKCZTQ1RQX0JBU0Vf
SU5GTyhpcGlfZXBfbXR4KSkpKQorCisjZGVmaW5lIFNDVFBfSVBfUEtUTE9HX0lOSVQoKSBcCisJ
KHZvaWQpcHRocmVhZF9tdXRleF9pbml0KCZTQ1RQX0JBU0VfSU5GTyhpcGlfcGt0bG9nX210eCks
ICZTQ1RQX0JBU0VfVkFSKG10eF9hdHRyKSkKKyNkZWZpbmUgU0NUUF9JUF9QS1RMT0dfREVTVFJP
WSgpIFwKKwkodm9pZClwdGhyZWFkX211dGV4X2Rlc3Ryb3koJlNDVFBfQkFTRV9JTkZPKGlwaV9w
a3Rsb2dfbXR4KSkKKyNpZmRlZiBJTlZBUklBTlRTCisjZGVmaW5lIFNDVFBfSVBfUEtUTE9HX0xP
Q0soKSBcCisJS0FTU0VSVChwdGhyZWFkX211dGV4X2xvY2soJlNDVFBfQkFTRV9JTkZPKGlwaV9w
a3Rsb2dfbXR4KSkgPT0gMCwgKCIlczogaXBpX3BrdGxvZ19tdHggYWxyZWFkeSBsb2NrZWQiLCBf
X2Z1bmNfXykpCisjZGVmaW5lIFNDVFBfSVBfUEtUTE9HX1VOTE9DSygpIFwKKwlLQVNTRVJUKHB0
aHJlYWRfbXV0ZXhfdW5sb2NrKCZTQ1RQX0JBU0VfSU5GTyhpcGlfcGt0bG9nX210eCkpID09IDAs
ICgiJXM6IGlwaV9wa3Rsb2dfbXR4IG5vdCBsb2NrZWQiLCBfX2Z1bmNfXykpCisjZWxzZQorI2Rl
ZmluZSBTQ1RQX0lQX1BLVExPR19MT0NLKCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfbG9jaygm
U0NUUF9CQVNFX0lORk8oaXBpX3BrdGxvZ19tdHgpKQorI2RlZmluZSBTQ1RQX0lQX1BLVExPR19V
TkxPQ0soKSBcCisJKHZvaWQpcHRocmVhZF9tdXRleF91bmxvY2soJlNDVFBfQkFTRV9JTkZPKGlw
aV9wa3Rsb2dfbXR4KSkKKyNlbmRpZgorCisKKy8qCisgKiBUaGUgSU5QIGxvY2tzIHdlIHdpbGwg
dXNlIGZvciBsb2NraW5nIGFuIFNDVFAgZW5kcG9pbnQsIHNvIGZvciBleGFtcGxlIGlmCisgKiB3
ZSB3YW50IHRvIGNoYW5nZSBzb21ldGhpbmcgYXQgdGhlIGVuZHBvaW50IGxldmVsIGZvciBleGFt
cGxlIHJhbmRvbV9zdG9yZQorICogb3IgY29va2llIHNlY3JldHMgd2UgbG9jayB0aGUgSU5QIGxl
dmVsLgorICovCisjZGVmaW5lIFNDVFBfSU5QX1JFQURfSU5JVChfaW5wKSBcCisJKHZvaWQpcHRo
cmVhZF9tdXRleF9pbml0KCYoX2lucCktPmlucF9yZGF0YV9tdHgsICZTQ1RQX0JBU0VfVkFSKG10
eF9hdHRyKSkKKyNkZWZpbmUgU0NUUF9JTlBfUkVBRF9ERVNUUk9ZKF9pbnApIFwKKwkodm9pZClw
dGhyZWFkX211dGV4X2Rlc3Ryb3koJihfaW5wKS0+aW5wX3JkYXRhX210eCkKKyNpZmRlZiBJTlZB
UklBTlRTCisjZGVmaW5lIFNDVFBfSU5QX1JFQURfTE9DSyhfaW5wKSBcCisJS0FTU0VSVChwdGhy
ZWFkX211dGV4X2xvY2soJihfaW5wKS0+aW5wX3JkYXRhX210eCkgPT0gMCwgKCIlczogaW5wX3Jk
YXRhX210eCBhbHJlYWR5IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNkZWZpbmUgU0NUUF9JTlBfUkVB
RF9VTkxPQ0soX2lucCkgXAorCUtBU1NFUlQocHRocmVhZF9tdXRleF91bmxvY2soJihfaW5wKS0+
aW5wX3JkYXRhX210eCkgPT0gMCwgKCIlczogaW5wX3JkYXRhX210eCBub3QgbG9ja2VkIiwgX19m
dW5jX18pKQorI2Vsc2UKKyNkZWZpbmUgU0NUUF9JTlBfUkVBRF9MT0NLKF9pbnApIFwKKwkodm9p
ZClwdGhyZWFkX211dGV4X2xvY2soJihfaW5wKS0+aW5wX3JkYXRhX210eCkKKyNkZWZpbmUgU0NU
UF9JTlBfUkVBRF9VTkxPQ0soX2lucCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCYo
X2lucCktPmlucF9yZGF0YV9tdHgpCisjZW5kaWYKKworI2RlZmluZSBTQ1RQX0lOUF9MT0NLX0lO
SVQoX2lucCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfaW5pdCgmKF9pbnApLT5pbnBfbXR4LCAm
U0NUUF9CQVNFX1ZBUihtdHhfYXR0cikpCisjZGVmaW5lIFNDVFBfSU5QX0xPQ0tfREVTVFJPWShf
aW5wKSBcCisJKHZvaWQpcHRocmVhZF9tdXRleF9kZXN0cm95KCYoX2lucCktPmlucF9tdHgpCisj
aWZkZWYgSU5WQVJJQU5UUworI2lmZGVmIFNDVFBfTE9DS19MT0dHSU5HCisjZGVmaW5lIFNDVFBf
SU5QX1JMT0NLKF9pbnApIGRvIHsJCQkJCQkJCQlcCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9DS19MT0dHSU5HX0VOQUJMRSkJCQkJXAorCQlzY3Rw
X2xvZ19sb2NrKF9pbnAsIE5VTEwsIFNDVFBfTE9HX0xPQ0tfSU5QKTsJCQkJCQlcCisJS0FTU0VS
VChwdGhyZWFkX211dGV4X2xvY2soJihfaW5wKS0+aW5wX210eCkgPT0gMCwgKCIlczogaW5wX210
eCBhbHJlYWR5IGxvY2tlZCIsIF9fZnVuY19fKSkJXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgU0NU
UF9JTlBfV0xPQ0soX2lucCkgZG8gewkJCQkJCQkJCVwKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0NLX0xPR0dJTkdfRU5BQkxFKQkJCQlcCisJCXNj
dHBfbG9nX2xvY2soX2lucCwgTlVMTCwgU0NUUF9MT0dfTE9DS19JTlApOwkJCQkJCVwKKwlLQVNT
RVJUKHB0aHJlYWRfbXV0ZXhfbG9jaygmKF9pbnApLT5pbnBfbXR4KSA9PSAwLCAoIiVzOiBpbnBf
bXR4IGFscmVhZHkgbG9ja2VkIiwgX19mdW5jX18pKQorfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVm
aW5lIFNDVFBfSU5QX1JMT0NLKF9pbnApIFwKKwlLQVNTRVJUKHB0aHJlYWRfbXV0ZXhfbG9jaygm
KF9pbnApLT5pbnBfbXR4KSA9PSAwLCAoIiVzOiBpbnBfbXR4IGFscmVhZHkgbG9ja2VkIiwgX19m
dW5jX18pKQorI2RlZmluZSBTQ1RQX0lOUF9XTE9DSyhfaW5wKSBcCisJS0FTU0VSVChwdGhyZWFk
X211dGV4X2xvY2soJihfaW5wKS0+aW5wX210eCkgPT0gMCwgKCIlczogaW5wX210eCBhbHJlYWR5
IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNlbmRpZgorI2RlZmluZSBTQ1RQX0lOUF9SVU5MT0NLKF9p
bnApIFwKKwlLQVNTRVJUKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCYoX2lucCktPmlucF9tdHgpID09
IDAsICgiJXM6IGlucF9tdHggbm90IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNkZWZpbmUgU0NUUF9J
TlBfV1VOTE9DSyhfaW5wKSBcCisJS0FTU0VSVChwdGhyZWFkX211dGV4X3VubG9jaygmKF9pbnAp
LT5pbnBfbXR4KSA9PSAwLCAoIiVzOiBpbnBfbXR4IG5vdCBsb2NrZWQiLCBfX2Z1bmNfXykpCisj
ZWxzZQorI2lmZGVmIFNDVFBfTE9DS19MT0dHSU5HCisjZGVmaW5lIFNDVFBfSU5QX1JMT0NLKF9p
bnApIGRvIHsJCQkJCQlcCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVs
KSAmIFNDVFBfTE9DS19MT0dHSU5HX0VOQUJMRSkJXAorCQlzY3RwX2xvZ19sb2NrKF9pbnAsIE5V
TEwsIFNDVFBfTE9HX0xPQ0tfSU5QKTsJCQlcCisJKHZvaWQpcHRocmVhZF9tdXRleF9sb2NrKCYo
X2lucCktPmlucF9tdHgpOwkJCQlcCit9IHdoaWxlICgwKQorI2RlZmluZSBTQ1RQX0lOUF9XTE9D
SyhfaW5wKSBkbyB7CQkJCQkJXAorCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19s
ZXZlbCkgJiBTQ1RQX0xPQ0tfTE9HR0lOR19FTkFCTEUpCVwKKwkJc2N0cF9sb2dfbG9jayhfaW5w
LCBOVUxMLCBTQ1RQX0xPR19MT0NLX0lOUCk7CQkJXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfbG9j
aygmKF9pbnApLT5pbnBfbXR4KTsJCQkJXAorfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIFND
VFBfSU5QX1JMT0NLKF9pbnApIFwKKwkodm9pZClwdGhyZWFkX211dGV4X2xvY2soJihfaW5wKS0+
aW5wX210eCkKKyNkZWZpbmUgU0NUUF9JTlBfV0xPQ0soX2lucCkgXAorCSh2b2lkKXB0aHJlYWRf
bXV0ZXhfbG9jaygmKF9pbnApLT5pbnBfbXR4KQorI2VuZGlmCisjZGVmaW5lIFNDVFBfSU5QX1JV
TkxPQ0soX2lucCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCYoX2lucCktPmlucF9t
dHgpCisjZGVmaW5lIFNDVFBfSU5QX1dVTkxPQ0soX2lucCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0
ZXhfdW5sb2NrKCYoX2lucCktPmlucF9tdHgpCisjZW5kaWYKKyNkZWZpbmUgU0NUUF9JTlBfUkxP
Q0tfQVNTRVJUKF9pbnApIFwKKwlLQVNTRVJUKHB0aHJlYWRfbXV0ZXhfdHJ5bG9jaygmKF9pbnAp
LT5pbnBfbXR4KSA9PSBFQlVTWSwgKCIlczogaW5wX210eCBub3QgbG9ja2VkIiwgX19mdW5jX18p
KQorI2RlZmluZSBTQ1RQX0lOUF9XTE9DS19BU1NFUlQoX2lucCkgXAorCUtBU1NFUlQocHRocmVh
ZF9tdXRleF90cnlsb2NrKCYoX2lucCktPmlucF9tdHgpID09IEVCVVNZLCAoIiVzOiBpbnBfbXR4
IG5vdCBsb2NrZWQiLCBfX2Z1bmNfXykpCisjZGVmaW5lIFNDVFBfSU5QX0lOQ1JfUkVGKF9pbnAp
IGF0b21pY19hZGRfaW50KCYoKF9pbnApLT5yZWZjb3VudCksIDEpCisjZGVmaW5lIFNDVFBfSU5Q
X0RFQ1JfUkVGKF9pbnApIGF0b21pY19hZGRfaW50KCYoKF9pbnApLT5yZWZjb3VudCksIC0xKQor
CisjZGVmaW5lIFNDVFBfVENCX1NFTkRfTE9DS19JTklUKF90Y2IpIFwKKwkodm9pZClwdGhyZWFk
X211dGV4X2luaXQoJihfdGNiKS0+dGNiX3NlbmRfbXR4LCAmU0NUUF9CQVNFX1ZBUihtdHhfYXR0
cikpCisjZGVmaW5lIFNDVFBfVENCX1NFTkRfTE9DS19ERVNUUk9ZKF90Y2IpIFwKKwkodm9pZClw
dGhyZWFkX211dGV4X2Rlc3Ryb3koJihfdGNiKS0+dGNiX3NlbmRfbXR4KQorI2lmZGVmIElOVkFS
SUFOVFMKKyNkZWZpbmUgU0NUUF9UQ0JfU0VORF9MT0NLKF90Y2IpIFwKKwlLQVNTRVJUKHB0aHJl
YWRfbXV0ZXhfbG9jaygmKF90Y2IpLT50Y2Jfc2VuZF9tdHgpID09IDAsICgiJXM6IHRjYl9zZW5k
X210eCBhbHJlYWR5IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNkZWZpbmUgU0NUUF9UQ0JfU0VORF9V
TkxPQ0soX3RjYikgXAorCUtBU1NFUlQocHRocmVhZF9tdXRleF91bmxvY2soJihfdGNiKS0+dGNi
X3NlbmRfbXR4KSA9PSAwLCAoIiVzOiB0Y2Jfc2VuZF9tdHggbm90IGxvY2tlZCIsIF9fZnVuY19f
KSkKKyNlbHNlCisjZGVmaW5lIFNDVFBfVENCX1NFTkRfTE9DSyhfdGNiKSBcCisJKHZvaWQpcHRo
cmVhZF9tdXRleF9sb2NrKCYoX3RjYiktPnRjYl9zZW5kX210eCkKKyNkZWZpbmUgU0NUUF9UQ0Jf
U0VORF9VTkxPQ0soX3RjYikgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCYoX3RjYikt
PnRjYl9zZW5kX210eCkKKyNlbmRpZgorCisjZGVmaW5lIFNDVFBfQVNPQ19DUkVBVEVfTE9DS19J
TklUKF9pbnApIFwKKwkodm9pZClwdGhyZWFkX211dGV4X2luaXQoJihfaW5wKS0+aW5wX2NyZWF0
ZV9tdHgsICZTQ1RQX0JBU0VfVkFSKG10eF9hdHRyKSkKKyNkZWZpbmUgU0NUUF9BU09DX0NSRUFU
RV9MT0NLX0RFU1RST1koX2lucCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmKF9p
bnApLT5pbnBfY3JlYXRlX210eCkKKyNpZmRlZiBJTlZBUklBTlRTCisjaWZkZWYgU0NUUF9MT0NL
X0xPR0dJTkcKKyNkZWZpbmUgU0NUUF9BU09DX0NSRUFURV9MT0NLKF9pbnApIGRvIHsJCQkJCQkJ
CQkJXAorCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0xP
Q0tfTE9HR0lOR19FTkFCTEUpCQkJCQkJXAorCQlzY3RwX2xvZ19sb2NrKF9pbnAsIE5VTEwsIFND
VFBfTE9HX0xPQ0tfQ1JFQVRFKTsJCQkJCQkJXAorCUtBU1NFUlQocHRocmVhZF9tdXRleF9sb2Nr
KCYoX2lucCktPmlucF9jcmVhdGVfbXR4KSA9PSAwLCAoIiVzOiBpbnBfY3JlYXRlX210eCBhbHJl
YWR5IGxvY2tlZCIsIF9fZnVuY19fKSkJXAorfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIFND
VFBfQVNPQ19DUkVBVEVfTE9DSyhfaW5wKSBcCisJS0FTU0VSVChwdGhyZWFkX211dGV4X2xvY2so
JihfaW5wKS0+aW5wX2NyZWF0ZV9tdHgpID09IDAsICgiJXM6IGlucF9jcmVhdGVfbXR4IGFscmVh
ZHkgbG9ja2VkIiwgX19mdW5jX18pKQorI2VuZGlmCisjZGVmaW5lIFNDVFBfQVNPQ19DUkVBVEVf
VU5MT0NLKF9pbnApIFwKKwlLQVNTRVJUKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCYoX2lucCktPmlu
cF9jcmVhdGVfbXR4KSA9PSAwLCAoIiVzOiBpbnBfY3JlYXRlX210eCBub3QgbG9ja2VkIiwgX19m
dW5jX18pKQorI2Vsc2UKKyNpZmRlZiBTQ1RQX0xPQ0tfTE9HR0lORworI2RlZmluZSBTQ1RQX0FT
T0NfQ1JFQVRFX0xPQ0soX2lucCkgZG8gewkJCQkJXAorCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0xPQ0tfTE9HR0lOR19FTkFCTEUpCVwKKwkJc2N0cF9s
b2dfbG9jayhfaW5wLCBOVUxMLCBTQ1RQX0xPR19MT0NLX0NSRUFURSk7CQlcCisJKHZvaWQpcHRo
cmVhZF9tdXRleF9sb2NrKCYoX2lucCktPmlucF9jcmVhdGVfbXR4KTsJCQlcCit9IHdoaWxlICgw
KQorI2Vsc2UKKyNkZWZpbmUgU0NUUF9BU09DX0NSRUFURV9MT0NLKF9pbnApIFwKKwkodm9pZClw
dGhyZWFkX211dGV4X2xvY2soJihfaW5wKS0+aW5wX2NyZWF0ZV9tdHgpCisjZW5kaWYKKyNkZWZp
bmUgU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soX2lucCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhf
dW5sb2NrKCYoX2lucCktPmlucF9jcmVhdGVfbXR4KQorI2VuZGlmCisvKgorICogRm9yIHRoZSBt
YWpvcml0eSBvZiB0aGluZ3MgKG9uY2Ugd2UgaGF2ZSBmb3VuZCB0aGUgYXNzb2NpYXRpb24pIHdl
IHdpbGwKKyAqIGxvY2sgdGhlIGFjdHVhbCBhc3NvY2lhdGlvbiBtdXRleC4gVGhpcyB3aWxsIHBy
b3RlY3QgYWxsIHRoZSBhc3NvaWNpYXRpb24KKyAqIGxldmVsIHF1ZXVlcyBhbmQgc3RyZWFtcyBh
bmQgc3VjaC4gV2Ugd2lsbCBuZWVkIHRvIGxvY2sgdGhlIHNvY2tldCBsYXllcgorICogd2hlbiB3
ZSBzdHVmZiBkYXRhIHVwIGludG8gdGhlIHJlY2VpdmluZyBzYl9tYi4gSS5lLiB3ZSB3aWxsIG5l
ZWQgdG8gZG8gYW4KKyAqIGV4dHJhIFNPQ0tCVUZfTE9DSygmc28tPnNvX3JjdikgZXZlbiB0aG91
Z2ggdGhlIGFzc29jaWF0aW9uIGlzIGxvY2tlZC4KKyAqLworCisjZGVmaW5lIFNDVFBfVENCX0xP
Q0tfSU5JVChfdGNiKSBcCisJKHZvaWQpcHRocmVhZF9tdXRleF9pbml0KCYoX3RjYiktPnRjYl9t
dHgsICZTQ1RQX0JBU0VfVkFSKG10eF9hdHRyKSkKKyNkZWZpbmUgU0NUUF9UQ0JfTE9DS19ERVNU
Uk9ZKF90Y2IpIFwKKwkodm9pZClwdGhyZWFkX211dGV4X2Rlc3Ryb3koJihfdGNiKS0+dGNiX210
eCkKKyNpZmRlZiBJTlZBUklBTlRTCisjaWZkZWYgU0NUUF9MT0NLX0xPR0dJTkcKKyNkZWZpbmUg
U0NUUF9UQ0JfTE9DSyhfdGNiKSBkbyB7CQkJCQkJCQkJXAorCWlmIChTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0xPQ0tfTE9HR0lOR19FTkFCTEUpIAkJCQlcCisJ
CXNjdHBfbG9nX2xvY2soX3RjYi0+c2N0cF9lcCwgX3RjYiwgU0NUUF9MT0dfTE9DS19UQ0IpOwkJ
CQkJXAorCUtBU1NFUlQocHRocmVhZF9tdXRleF9sb2NrKCYoX3RjYiktPnRjYl9tdHgpID09IDAs
ICgiJXM6IHRjYl9tdHggYWxyZWFkeSBsb2NrZWQiLCBfX2Z1bmNfXykpCVwKK30gd2hpbGUgKDAp
CisjZWxzZQorI2RlZmluZSBTQ1RQX1RDQl9MT0NLKF90Y2IpIFwKKwlLQVNTRVJUKHB0aHJlYWRf
bXV0ZXhfbG9jaygmKF90Y2IpLT50Y2JfbXR4KSA9PSAwLCAoIiVzOiB0Y2JfbXR4IGFscmVhZHkg
bG9ja2VkIiwgX19mdW5jX18pKQorI2VuZGlmCisjZGVmaW5lIFNDVFBfVENCX1VOTE9DSyhfdGNi
KSBcCisJS0FTU0VSVChwdGhyZWFkX211dGV4X3VubG9jaygmKF90Y2IpLT50Y2JfbXR4KSA9PSAw
LCAoIiVzOiB0Y2JfbXR4IG5vdCBsb2NrZWQiLCBfX2Z1bmNfXykpCisjZWxzZQorI2lmZGVmIFND
VFBfTE9DS19MT0dHSU5HCisjZGVmaW5lIFNDVFBfVENCX0xPQ0soX3RjYikgZG8gewkJCQkJCVwK
KwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0NLX0xP
R0dJTkdfRU5BQkxFKSAJXAorCQlzY3RwX2xvZ19sb2NrKF90Y2ItPnNjdHBfZXAsIF90Y2IsIFND
VFBfTE9HX0xPQ0tfVENCKTsJCVwKKwkodm9pZClwdGhyZWFkX211dGV4X2xvY2soJihfdGNiKS0+
dGNiX210eCk7CQkJCVwKK30gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBTQ1RQX1RDQl9MT0NL
KF90Y2IpIFwKKwkodm9pZClwdGhyZWFkX211dGV4X2xvY2soJihfdGNiKS0+dGNiX210eCkKKyNl
bmRpZgorI2RlZmluZSBTQ1RQX1RDQl9VTkxPQ0soX3RjYikgKHZvaWQpcHRocmVhZF9tdXRleF91
bmxvY2soJihfdGNiKS0+dGNiX210eCkKKyNlbmRpZgorI2RlZmluZSBTQ1RQX1RDQl9MT0NLX0FT
U0VSVChfdGNiKSBcCisJS0FTU0VSVChwdGhyZWFkX211dGV4X3RyeWxvY2soJihfdGNiKS0+dGNi
X210eCkgPT0gRUJVU1ksICgiJXM6IHRjYl9tdHggbm90IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNk
ZWZpbmUgU0NUUF9UQ0JfVFJZTE9DSyhfdGNiKSAoIShwdGhyZWFkX211dGV4X3RyeWxvY2soJihf
dGNiKS0+dGNiX210eCkpKQorI2VuZGlmCisKKyNlbmRpZiAvKiBTQ1RQX1BFUl9TT0NLRVRfTE9D
S0lORyAqLworCisKKy8qCisgKiBjb21tb24gbG9ja3MKKyAqLworCisvKiBjb3BpZWQgb3ZlciB0
byBjb21waWxlICovCisjZGVmaW5lIFNDVFBfSU5QX0xPQ0tfQ09OVEVOREVEKF9pbnApICgwKSAv
KiBEb24ndCBrbm93IGlmIHRoaXMgaXMgcG9zc2libGUgKi8KKyNkZWZpbmUgU0NUUF9JTlBfUkVB
RF9DT05URU5ERUQoX2lucCkgKDApIC8qIERvbid0IGtub3cgaWYgdGhpcyBpcyBwb3NzaWJsZSAq
LworI2RlZmluZSBTQ1RQX0FTT0NfQ1JFQVRFX0xPQ0tfQ09OVEVOREVEKF9pbnApICgwKSAvKiBE
b24ndCBrbm93IGlmIHRoaXMgaXMgcG9zc2libGUgKi8KKworLyogc29ja2V0IGxvY2tzICovCisK
KyNpZiBkZWZpbmVkKF9XSU4zMikKKyNkZWZpbmUgU09DS0JVRl9MT0NLX0FTU0VSVChfc29fYnVm
KQorI2RlZmluZSBTT0NLQlVGX0xPQ0soX3NvX2J1ZikgXAorCUVudGVyQ3JpdGljYWxTZWN0aW9u
KCYoX3NvX2J1ZiktPnNiX210eCkKKyNkZWZpbmUgU09DS0JVRl9VTkxPQ0soX3NvX2J1ZikgXAor
CUxlYXZlQ3JpdGljYWxTZWN0aW9uKCYoX3NvX2J1ZiktPnNiX210eCkKKyNkZWZpbmUgU09DS19M
T0NLKF9zbykgXAorCVNPQ0tCVUZfTE9DSygmKF9zbyktPnNvX3JjdikKKyNkZWZpbmUgU09DS19V
TkxPQ0soX3NvKSBcCisJU09DS0JVRl9VTkxPQ0soJihfc28pLT5zb19yY3YpCisjZWxzZQorI2Rl
ZmluZSBTT0NLQlVGX0xPQ0tfQVNTRVJUKF9zb19idWYpIFwKKwlLQVNTRVJUKHB0aHJlYWRfbXV0
ZXhfdHJ5bG9jayhTT0NLQlVGX01UWChfc29fYnVmKSkgPT0gRUJVU1ksICgiJXM6IHNvY2tldCBi
dWZmZXIgbm90IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNpZmRlZiBJTlZBUklBTlRTCisjZGVmaW5l
IFNPQ0tCVUZfTE9DSyhfc29fYnVmKSBcCisJS0FTU0VSVChwdGhyZWFkX211dGV4X2xvY2soU09D
S0JVRl9NVFgoX3NvX2J1ZikpID09IDAsICgiJXM6IHNvY2tidWZfbXR4IGFscmVhZHkgbG9ja2Vk
IiwgX19mdW5jX18pKQorI2RlZmluZSBTT0NLQlVGX1VOTE9DSyhfc29fYnVmKSBcCisJS0FTU0VS
VChwdGhyZWFkX211dGV4X3VubG9jayhTT0NLQlVGX01UWChfc29fYnVmKSkgPT0gMCwgKCIlczog
c29ja2J1Zl9tdHggbm90IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNlbHNlCisjZGVmaW5lIFNPQ0tC
VUZfTE9DSyhfc29fYnVmKSBcCisJcHRocmVhZF9tdXRleF9sb2NrKFNPQ0tCVUZfTVRYKF9zb19i
dWYpKQorI2RlZmluZSBTT0NLQlVGX1VOTE9DSyhfc29fYnVmKSBcCisJcHRocmVhZF9tdXRleF91
bmxvY2soU09DS0JVRl9NVFgoX3NvX2J1ZikpCisjZW5kaWYKKyNkZWZpbmUgU09DS19MT0NLKF9z
bykgXAorCVNPQ0tCVUZfTE9DSygmKF9zbyktPnNvX3JjdikKKyNkZWZpbmUgU09DS19VTkxPQ0so
X3NvKSBcCisJU09DS0JVRl9VTkxPQ0soJihfc28pLT5zb19yY3YpCisjZW5kaWYKKworI2RlZmlu
ZSBTQ1RQX1NUQVRMT0dfSU5JVF9MT0NLKCkKKyNkZWZpbmUgU0NUUF9TVEFUTE9HX0xPQ0soKQor
I2RlZmluZSBTQ1RQX1NUQVRMT0dfVU5MT0NLKCkKKyNkZWZpbmUgU0NUUF9TVEFUTE9HX0RFU1RS
T1koKQorCisjaWYgZGVmaW5lZChfV0lOMzIpCisvKiBhZGRyZXNzIGxpc3QgbG9ja3MgKi8KKyNk
ZWZpbmUgU0NUUF9JUElfQUREUl9JTklUKCkgXAorCUluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24o
JlNDVFBfQkFTRV9JTkZPKGlwaV9hZGRyX210eCkpCisjZGVmaW5lIFNDVFBfSVBJX0FERFJfREVT
VFJPWSgpIFwKKwlEZWxldGVDcml0aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9JTkZPKGlwaV9hZGRy
X210eCkpCisjZGVmaW5lIFNDVFBfSVBJX0FERFJfUkxPQ0soKSBcCisJRW50ZXJDcml0aWNhbFNl
Y3Rpb24oJlNDVFBfQkFTRV9JTkZPKGlwaV9hZGRyX210eCkpCisjZGVmaW5lIFNDVFBfSVBJX0FE
RFJfUlVOTE9DSygpIFwKKwlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmU0NUUF9CQVNFX0lORk8oaXBp
X2FkZHJfbXR4KSkKKyNkZWZpbmUgU0NUUF9JUElfQUREUl9XTE9DSygpIFwKKwlFbnRlckNyaXRp
Y2FsU2VjdGlvbigmU0NUUF9CQVNFX0lORk8oaXBpX2FkZHJfbXR4KSkKKyNkZWZpbmUgU0NUUF9J
UElfQUREUl9XVU5MT0NLKCkgXAorCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfSU5G
TyhpcGlfYWRkcl9tdHgpKQorI2RlZmluZSBTQ1RQX0lQSV9BRERSX0xPQ0tfQVNTRVJUKCkKKyNk
ZWZpbmUgU0NUUF9JUElfQUREUl9XTE9DS19BU1NFUlQoKQorCisKKy8qIGl0ZXJhdG9yIGxvY2tz
ICovCisjZGVmaW5lIFNDVFBfSVRFUkFUT1JfTE9DS19JTklUKCkgXAorCUluaXRpYWxpemVDcml0
aWNhbFNlY3Rpb24oJnNjdHBfaXRfY3RsLml0X210eCkKKyNkZWZpbmUgU0NUUF9JVEVSQVRPUl9M
T0NLX0RFU1RST1koKSBcCisJRGVsZXRlQ3JpdGljYWxTZWN0aW9uKCZzY3RwX2l0X2N0bC5pdF9t
dHgpCisjZGVmaW5lIFNDVFBfSVRFUkFUT1JfTE9DSygpIFwKKwkJRW50ZXJDcml0aWNhbFNlY3Rp
b24oJnNjdHBfaXRfY3RsLml0X210eCkKKyNkZWZpbmUgU0NUUF9JVEVSQVRPUl9VTkxPQ0soKSBc
CisJTGVhdmVDcml0aWNhbFNlY3Rpb24oJnNjdHBfaXRfY3RsLml0X210eCkKKworI2RlZmluZSBT
Q1RQX0lQSV9JVEVSQVRPUl9XUV9JTklUKCkgXAorCUluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24o
JnNjdHBfaXRfY3RsLmlwaV9pdGVyYXRvcl93cV9tdHgpCisjZGVmaW5lIFNDVFBfSVBJX0lURVJB
VE9SX1dRX0RFU1RST1koKSBcCisJRGVsZXRlQ3JpdGljYWxTZWN0aW9uKCZzY3RwX2l0X2N0bC5p
cGlfaXRlcmF0b3Jfd3FfbXR4KQorI2RlZmluZSBTQ1RQX0lQSV9JVEVSQVRPUl9XUV9MT0NLKCkg
XAorCUVudGVyQ3JpdGljYWxTZWN0aW9uKCZzY3RwX2l0X2N0bC5pcGlfaXRlcmF0b3Jfd3FfbXR4
KQorI2RlZmluZSBTQ1RQX0lQSV9JVEVSQVRPUl9XUV9VTkxPQ0soKSBcCisJTGVhdmVDcml0aWNh
bFNlY3Rpb24oJnNjdHBfaXRfY3RsLmlwaV9pdGVyYXRvcl93cV9tdHgpCisKKyNlbHNlCisvKiBh
ZGRyZXNzIGxpc3QgbG9ja3MgKi8KKyNkZWZpbmUgU0NUUF9JUElfQUREUl9JTklUKCkgXAorCSh2
b2lkKXB0aHJlYWRfbXV0ZXhfaW5pdCgmU0NUUF9CQVNFX0lORk8oaXBpX2FkZHJfbXR4KSwgJlND
VFBfQkFTRV9WQVIobXR4X2F0dHIpKQorI2RlZmluZSBTQ1RQX0lQSV9BRERSX0RFU1RST1koKSBc
CisJKHZvaWQpcHRocmVhZF9tdXRleF9kZXN0cm95KCZTQ1RQX0JBU0VfSU5GTyhpcGlfYWRkcl9t
dHgpKQorI2lmZGVmIElOVkFSSUFOVFMKKyNkZWZpbmUgU0NUUF9JUElfQUREUl9STE9DSygpIFwK
KwlLQVNTRVJUKHB0aHJlYWRfbXV0ZXhfbG9jaygmU0NUUF9CQVNFX0lORk8oaXBpX2FkZHJfbXR4
KSkgPT0gMCwgKCIlczogaXBpX2FkZHJfbXR4IGFscmVhZHkgbG9ja2VkIiwgX19mdW5jX18pKQor
I2RlZmluZSBTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKSBcCisJS0FTU0VSVChwdGhyZWFkX211dGV4
X3VubG9jaygmU0NUUF9CQVNFX0lORk8oaXBpX2FkZHJfbXR4KSkgPT0gMCwgKCIlczogaXBpX2Fk
ZHJfbXR4IG5vdCBsb2NrZWQiLCBfX2Z1bmNfXykpCisjZGVmaW5lIFNDVFBfSVBJX0FERFJfV0xP
Q0soKSBcCisJS0FTU0VSVChwdGhyZWFkX211dGV4X2xvY2soJlNDVFBfQkFTRV9JTkZPKGlwaV9h
ZGRyX210eCkpID09IDAsICgiJXM6IGlwaV9hZGRyX210eCBhbHJlYWR5IGxvY2tlZCIsIF9fZnVu
Y19fKSkKKyNkZWZpbmUgU0NUUF9JUElfQUREUl9XVU5MT0NLKCkgXAorCUtBU1NFUlQocHRocmVh
ZF9tdXRleF91bmxvY2soJlNDVFBfQkFTRV9JTkZPKGlwaV9hZGRyX210eCkpID09IDAsICgiJXM6
IGlwaV9hZGRyX210eCBub3QgbG9ja2VkIiwgX19mdW5jX18pKQorI2RlZmluZSBTQ1RQX0lQSV9B
RERSX0xPQ0tfQVNTRVJUKCkgXAorCUtBU1NFUlQocHRocmVhZF9tdXRleF90cnlsb2NrKCZTQ1RQ
X0JBU0VfSU5GTyhpcGlfYWRkcl9tdHgpKSA9PSBFQlVTWSwgKCIlczogaXBpX2FkZHJfbXR4IG5v
dCBsb2NrZWQiLCBfX2Z1bmNfXykpCisjZGVmaW5lIFNDVFBfSVBJX0FERFJfV0xPQ0tfQVNTRVJU
KCkgXAorCUtBU1NFUlQocHRocmVhZF9tdXRleF90cnlsb2NrKCZTQ1RQX0JBU0VfSU5GTyhpcGlf
YWRkcl9tdHgpKSA9PSBFQlVTWSwgKCIlczogaXBpX2FkZHJfbXR4IG5vdCBsb2NrZWQiLCBfX2Z1
bmNfXykpCisjZWxzZQorI2RlZmluZSBTQ1RQX0lQSV9BRERSX1JMT0NLKCkgXAorCSh2b2lkKXB0
aHJlYWRfbXV0ZXhfbG9jaygmU0NUUF9CQVNFX0lORk8oaXBpX2FkZHJfbXR4KSkKKyNkZWZpbmUg
U0NUUF9JUElfQUREUl9SVU5MT0NLKCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZT
Q1RQX0JBU0VfSU5GTyhpcGlfYWRkcl9tdHgpKQorI2RlZmluZSBTQ1RQX0lQSV9BRERSX1dMT0NL
KCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfbG9jaygmU0NUUF9CQVNFX0lORk8oaXBpX2FkZHJf
bXR4KSkKKyNkZWZpbmUgU0NUUF9JUElfQUREUl9XVU5MT0NLKCkgXAorCSh2b2lkKXB0aHJlYWRf
bXV0ZXhfdW5sb2NrKCZTQ1RQX0JBU0VfSU5GTyhpcGlfYWRkcl9tdHgpKQorI2RlZmluZSBTQ1RQ
X0lQSV9BRERSX0xPQ0tfQVNTRVJUKCkKKyNkZWZpbmUgU0NUUF9JUElfQUREUl9XTE9DS19BU1NF
UlQoKQorI2VuZGlmCisKKy8qIGl0ZXJhdG9yIGxvY2tzICovCisjZGVmaW5lIFNDVFBfSVRFUkFU
T1JfTE9DS19JTklUKCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfaW5pdCgmc2N0cF9pdF9jdGwu
aXRfbXR4LCAmU0NUUF9CQVNFX1ZBUihtdHhfYXR0cikpCisjZGVmaW5lIFNDVFBfSVRFUkFUT1Jf
TE9DS19ERVNUUk9ZKCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmc2N0cF9pdF9j
dGwuaXRfbXR4KQorI2lmZGVmIElOVkFSSUFOVFMKKyNkZWZpbmUgU0NUUF9JVEVSQVRPUl9MT0NL
KCkgXAorCUtBU1NFUlQocHRocmVhZF9tdXRleF9sb2NrKCZzY3RwX2l0X2N0bC5pdF9tdHgpID09
IDAsICgiJXM6IGl0X210eCBhbHJlYWR5IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNkZWZpbmUgU0NU
UF9JVEVSQVRPUl9VTkxPQ0soKSBcCisJS0FTU0VSVChwdGhyZWFkX211dGV4X3VubG9jaygmc2N0
cF9pdF9jdGwuaXRfbXR4KSA9PSAwLCAoIiVzOiBpdF9tdHggbm90IGxvY2tlZCIsIF9fZnVuY19f
KSkKKyNlbHNlCisjZGVmaW5lIFNDVFBfSVRFUkFUT1JfTE9DSygpIFwKKwkodm9pZClwdGhyZWFk
X211dGV4X2xvY2soJnNjdHBfaXRfY3RsLml0X210eCkKKyNkZWZpbmUgU0NUUF9JVEVSQVRPUl9V
TkxPQ0soKSBcCisJKHZvaWQpcHRocmVhZF9tdXRleF91bmxvY2soJnNjdHBfaXRfY3RsLml0X210
eCkKKyNlbmRpZgorCisjZGVmaW5lIFNDVFBfSVBJX0lURVJBVE9SX1dRX0lOSVQoKSBcCisJKHZv
aWQpcHRocmVhZF9tdXRleF9pbml0KCZzY3RwX2l0X2N0bC5pcGlfaXRlcmF0b3Jfd3FfbXR4LCAm
U0NUUF9CQVNFX1ZBUihtdHhfYXR0cikpCisjZGVmaW5lIFNDVFBfSVBJX0lURVJBVE9SX1dRX0RF
U1RST1koKSBcCisJKHZvaWQpcHRocmVhZF9tdXRleF9kZXN0cm95KCZzY3RwX2l0X2N0bC5pcGlf
aXRlcmF0b3Jfd3FfbXR4KQorI2lmZGVmIElOVkFSSUFOVFMKKyNkZWZpbmUgU0NUUF9JUElfSVRF
UkFUT1JfV1FfTE9DSygpIFwKKwlLQVNTRVJUKHB0aHJlYWRfbXV0ZXhfbG9jaygmc2N0cF9pdF9j
dGwuaXBpX2l0ZXJhdG9yX3dxX210eCkgPT0gMCwgKCIlczogaXBpX2l0ZXJhdG9yX3dxX210eCBh
bHJlYWR5IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNkZWZpbmUgU0NUUF9JUElfSVRFUkFUT1JfV1Ff
VU5MT0NLKCkgXAorCUtBU1NFUlQocHRocmVhZF9tdXRleF91bmxvY2soJnNjdHBfaXRfY3RsLmlw
aV9pdGVyYXRvcl93cV9tdHgpID09IDAsICgiJXM6IGlwaV9pdGVyYXRvcl93cV9tdHggbm90IGxv
Y2tlZCIsIF9fZnVuY19fKSkKKyNlbHNlCisjZGVmaW5lIFNDVFBfSVBJX0lURVJBVE9SX1dRX0xP
Q0soKSBcCisJKHZvaWQpcHRocmVhZF9tdXRleF9sb2NrKCZzY3RwX2l0X2N0bC5pcGlfaXRlcmF0
b3Jfd3FfbXR4KQorI2RlZmluZSBTQ1RQX0lQSV9JVEVSQVRPUl9XUV9VTkxPQ0soKSBcCisJKHZv
aWQpcHRocmVhZF9tdXRleF91bmxvY2soJnNjdHBfaXRfY3RsLmlwaV9pdGVyYXRvcl93cV9tdHgp
CisjZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIFNDVFBfSU5DUl9FUF9DT1VOVCgpIFwKKwlhdG9t
aWNfYWRkX2ludCgmU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X2VwKSwgMSkKKworI2RlZmluZSBT
Q1RQX0RFQ1JfRVBfQ09VTlQoKSBcCisJYXRvbWljX3N1YnRyYWN0X2ludCgmU0NUUF9CQVNFX0lO
Rk8oaXBpX2NvdW50X2VwKSwgMSkKKworI2RlZmluZSBTQ1RQX0lOQ1JfQVNPQ19DT1VOVCgpIFwK
KwlhdG9taWNfYWRkX2ludCgmU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X2Fzb2MpLCAxKQorCisj
ZGVmaW5lIFNDVFBfREVDUl9BU09DX0NPVU5UKCkgXAorCWF0b21pY19zdWJ0cmFjdF9pbnQoJlND
VFBfQkFTRV9JTkZPKGlwaV9jb3VudF9hc29jKSwgMSkKKworI2RlZmluZSBTQ1RQX0lOQ1JfTEFE
RFJfQ09VTlQoKSBcCisJYXRvbWljX2FkZF9pbnQoJlNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9s
YWRkciksIDEpCisKKyNkZWZpbmUgU0NUUF9ERUNSX0xBRERSX0NPVU5UKCkgXAorCWF0b21pY19z
dWJ0cmFjdF9pbnQoJlNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9sYWRkciksIDEpCisKKyNkZWZp
bmUgU0NUUF9JTkNSX1JBRERSX0NPVU5UKCkgXAorCWF0b21pY19hZGRfaW50KCZTQ1RQX0JBU0Vf
SU5GTyhpcGlfY291bnRfcmFkZHIpLCAxKQorCisjZGVmaW5lIFNDVFBfREVDUl9SQUREUl9DT1VO
VCgpIFwKKwlhdG9taWNfc3VidHJhY3RfaW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfcmFk
ZHIpLCAxKQorCisjZGVmaW5lIFNDVFBfSU5DUl9DSEtfQ09VTlQoKSBcCisJYXRvbWljX2FkZF9p
bnQoJlNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9jaHVuayksIDEpCisKKyNkZWZpbmUgU0NUUF9E
RUNSX0NIS19DT1VOVCgpIFwKKwlhdG9taWNfc3VidHJhY3RfaW50KCZTQ1RQX0JBU0VfSU5GTyhp
cGlfY291bnRfY2h1bmspLCAxKQorCisjZGVmaW5lIFNDVFBfSU5DUl9SRUFEUV9DT1VOVCgpIFwK
KwlhdG9taWNfYWRkX2ludCgmU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X3JlYWRxKSwgMSkKKwor
I2RlZmluZSBTQ1RQX0RFQ1JfUkVBRFFfQ09VTlQoKSBcCisJYXRvbWljX3N1YnRyYWN0X2ludCgm
U0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X3JlYWRxKSwgMSkKKworI2RlZmluZSBTQ1RQX0lOQ1Jf
U1RSTU9RX0NPVU5UKCkgXAorCWF0b21pY19hZGRfaW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlfY291
bnRfc3RybW9xKSwgMSkKKworI2RlZmluZSBTQ1RQX0RFQ1JfU1RSTU9RX0NPVU5UKCkgXAorCWF0
b21pY19zdWJ0cmFjdF9pbnQoJlNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9zdHJtb3EpLCAxKQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3No
YTEuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NoYTEuYwpuZXcgZmlsZSBt
b2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAuLjg0NzJjM2ExYzBiZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NoYTEuYwpAQCAtMCwwICsx
LDM0NyBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisg
KgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxs
IFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAx
MywgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTMsICAgICAgYnkgTGFsbHkgU2luZ2guIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp
Y2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKgorICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9zaGExLmg+CisKKyNpZiBkZWZpbmVkKFNDVFBfVVNF
X05TU19TSEExKQorLyogQSBTSEEtMSBEaWdlc3QgaXMgMTYwIGJpdHMsIG9yIDIwIGJ5dGVzICov
CisjZGVmaW5lIFNIQV9ESUdFU1RfTEVOR1RIICgyMCkKKwordm9pZAorc2N0cF9zaGExX2luaXQo
c3RydWN0IHNjdHBfc2hhMV9jb250ZXh0ICpjdHgpCit7CisJY3R4LT5wazExX2N0eCA9IFBLMTFf
Q3JlYXRlRGlnZXN0Q29udGV4dChTRUNfT0lEX1NIQTEpOworCVBLMTFfRGlnZXN0QmVnaW4oY3R4
LT5wazExX2N0eCk7Cit9CisKK3ZvaWQKK3NjdHBfc2hhMV91cGRhdGUoc3RydWN0IHNjdHBfc2hh
MV9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0ciwgdW5zaWduZWQgaW50IHNp
eikKK3sKKwlQSzExX0RpZ2VzdE9wKGN0eC0+cGsxMV9jdHgsIHB0ciwgc2l6KTsKK30KKwordm9p
ZAorc2N0cF9zaGExX2ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCwgc3RydWN0IHNjdHBfc2hh
MV9jb250ZXh0ICpjdHgpCit7CisJdW5zaWduZWQgaW50IG91dHB1dF9sZW4gPSAwOworCisJUEsx
MV9EaWdlc3RGaW5hbChjdHgtPnBrMTFfY3R4LCBkaWdlc3QsICZvdXRwdXRfbGVuLCBTSEFfRElH
RVNUX0xFTkdUSCk7CisJUEsxMV9EZXN0cm95Q29udGV4dChjdHgtPnBrMTFfY3R4LCBQUl9UUlVF
KTsKK30KKworI2VsaWYgZGVmaW5lZChTQ1RQX1VTRV9PUEVOU1NMX1NIQTEpCisKK3ZvaWQKK3Nj
dHBfc2hhMV9pbml0KHN0cnVjdCBzY3RwX3NoYTFfY29udGV4dCAqY3R4KQoreworCVNIQTFfSW5p
dCgmY3R4LT5zaGFfY3R4KTsKK30KKwordm9pZAorc2N0cF9zaGExX3VwZGF0ZShzdHJ1Y3Qgc2N0
cF9zaGExX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqcHRyLCB1bnNpZ25lZCBp
bnQgc2l6KQoreworCVNIQTFfVXBkYXRlKCZjdHgtPnNoYV9jdHgsIHB0ciwgKHVuc2lnbmVkIGxv
bmcpc2l6KTsKK30KKwordm9pZAorc2N0cF9zaGExX2ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRpZ2Vz
dCwgc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0ICpjdHgpCit7CisJU0hBMV9GaW5hbChkaWdlc3Qs
ICZjdHgtPnNoYV9jdHgpOworfQorI2VsaWYgZGVmaW5lZChTQ1RQX1VTRV9NQkVEVExTX1NIQTEp
Cit2b2lkCitzY3RwX3NoYTFfaW5pdChzdHJ1Y3Qgc2N0cF9zaGExX2NvbnRleHQgKmN0eCkKK3sK
KwltYmVkdGxzX3NoYTFfaW5pdCgmY3R4LT5zaGExX2N0eCk7CisJbWJlZHRsc19zaGExX3N0YXJ0
c19yZXQoJmN0eC0+c2hhMV9jdHgpOworfQorCit2b2lkCitzY3RwX3NoYTFfdXBkYXRlKHN0cnVj
dCBzY3RwX3NoYTFfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpwdHIsIHVuc2ln
bmVkIGludCBzaXopCit7CisJbWJlZHRsc19zaGExX3VwZGF0ZV9yZXQoJmN0eC0+c2hhMV9jdHgs
IHB0ciwgc2l6KTsKK30KKwordm9pZAorc2N0cF9zaGExX2ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRp
Z2VzdCwgc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0ICpjdHgpCit7CisJbWJlZHRsc19zaGExX2Zp
bmlzaF9yZXQoJmN0eC0+c2hhMV9jdHgsIGRpZ2VzdCk7Cit9CisjZWxzZQorCisjaW5jbHVkZSA8
c3RyaW5nLmg+CisjaWYgZGVmaW5lZChfV0lOMzIpICYmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2VsaWYgIShkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykpCisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKworI2Rl
ZmluZSBGMShCLEMsRCkgKCgoQiAmIEMpIHwgKCh+QikgJiBEKSkpCS8qIDAgIDw9IHQgPD0gMTkg
Ki8KKyNkZWZpbmUgRjIoQixDLEQpIChCIF4gQyBeIEQpCS8qIDIwIDw9IHQgPD0gMzkgKi8KKyNk
ZWZpbmUgRjMoQixDLEQpICgoQiAmIEMpIHwgKEIgJiBEKSB8IChDICYgRCkpCS8qIDQwIDw9IHQg
PD0gNTkgKi8KKyNkZWZpbmUgRjQoQixDLEQpIChCIF4gQyBeIEQpCS8qIDYwMCA8PSB0IDw9IDc5
ICovCisKKy8qIGNpcmN1bGFyIHNoaWZ0ICovCisjZGVmaW5lIENTSElGVChBLEIpICgoQiA8PCBB
KSB8IChCID4+ICgzMi1BKSkpCisKKyNkZWZpbmUgSzEgMHg1YTgyNzk5OQkJLyogMCAgPD0gdCA8
PSAxOSAqLworI2RlZmluZSBLMiAweDZlZDllYmExCQkvKiAyMCA8PSB0IDw9IDM5ICovCisjZGVm
aW5lIEszIDB4OGYxYmJjZGMJCS8qIDQwIDw9IHQgPD0gNTkgKi8KKyNkZWZpbmUgSzQgMHhjYTYy
YzFkNgkJLyogNjAgPD0gdCA8PSA3OSAqLworCisjZGVmaW5lIEgwSU5JVCAweDY3NDUyMzAxCisj
ZGVmaW5lIEgxSU5JVCAweGVmY2RhYjg5CisjZGVmaW5lIEgySU5JVCAweDk4YmFkY2ZlCisjZGVm
aW5lIEgzSU5JVCAweDEwMzI1NDc2CisjZGVmaW5lIEg0SU5JVCAweGMzZDJlMWYwCisKK3ZvaWQK
K3NjdHBfc2hhMV9pbml0KHN0cnVjdCBzY3RwX3NoYTFfY29udGV4dCAqY3R4KQoreworCS8qIElu
aXQgdGhlIFNIQS0xIGNvbnRleHQgc3RydWN0dXJlICovCisJY3R4LT5BID0gMDsKKwljdHgtPkIg
PSAwOworCWN0eC0+QyA9IDA7CisJY3R4LT5EID0gMDsKKwljdHgtPkUgPSAwOworCWN0eC0+SDAg
PSBIMElOSVQ7CisJY3R4LT5IMSA9IEgxSU5JVDsKKwljdHgtPkgyID0gSDJJTklUOworCWN0eC0+
SDMgPSBIM0lOSVQ7CisJY3R4LT5INCA9IEg0SU5JVDsKKwljdHgtPlRFTVAgPSAwOworCW1lbXNl
dChjdHgtPndvcmRzLCAwLCBzaXplb2YoY3R4LT53b3JkcykpOworCWN0eC0+aG93X21hbnlfaW5f
YmxvY2sgPSAwOworCWN0eC0+cnVubmluZ190b3RhbCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCitz
Y3RwX3NoYTFfcHJvY2Vzc19hX2Jsb2NrKHN0cnVjdCBzY3RwX3NoYTFfY29udGV4dCAqY3R4LCB1
bnNpZ25lZCBpbnQgKmJsb2NrKQoreworCWludCBpOworCisJLyogaW5pdCB0aGUgVzAtVzE1IHRv
IHRoZSBibG9jayBvZiB3b3JkcyBiZWluZyBoYXNoZWQuICovCisJLyogc3RlcCBhKSAqLworCWZv
ciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCWN0eC0+d29yZHNbaV0gPSBudG9obChibG9ja1tp
XSk7CisJfQorCS8qIG5vdyBpbml0IHRoZSByZXN0IGJhc2VkIG9uIHRoZSBTSEEtMSBmb3JtdWxh
LCBzdGVwIGIpICovCisJZm9yIChpID0gMTY7IGkgPCA4MDsgaSsrKSB7CisJCWN0eC0+d29yZHNb
aV0gPSBDU0hJRlQoMSwgKChjdHgtPndvcmRzWyhpIC0gMyldKSBeCisJCSAgICAoY3R4LT53b3Jk
c1soaSAtIDgpXSkgXgorCQkgICAgKGN0eC0+d29yZHNbKGkgLSAxNCldKSBeCisJCSAgICAoY3R4
LT53b3Jkc1soaSAtIDE2KV0pKSk7CisJfQorCS8qIHN0ZXAgYykgKi8KKwljdHgtPkEgPSBjdHgt
PkgwOworCWN0eC0+QiA9IGN0eC0+SDE7CisJY3R4LT5DID0gY3R4LT5IMjsKKwljdHgtPkQgPSBj
dHgtPkgzOworCWN0eC0+RSA9IGN0eC0+SDQ7CisKKwkvKiBzdGVwIGQpICovCisJZm9yIChpID0g
MDsgaSA8IDgwOyBpKyspIHsKKwkJaWYgKGkgPCAyMCkgeworCQkJY3R4LT5URU1QID0gKChDU0hJ
RlQoNSwgY3R4LT5BKSkgKworCQkJICAgIChGMShjdHgtPkIsIGN0eC0+QywgY3R4LT5EKSkgKwor
CQkJICAgIChjdHgtPkUpICsKKwkJCSAgICBjdHgtPndvcmRzW2ldICsKKwkJCSAgICBLMSk7CisJ
CX0gZWxzZSBpZiAoaSA8IDQwKSB7CisJCQljdHgtPlRFTVAgPSAoKENTSElGVCg1LCBjdHgtPkEp
KSArCisJCQkgICAgKEYyKGN0eC0+QiwgY3R4LT5DLCBjdHgtPkQpKSArCisJCQkgICAgKGN0eC0+
RSkgKworCQkJICAgIChjdHgtPndvcmRzW2ldKSArCisJCQkgICAgSzIpOworCQl9IGVsc2UgaWYg
KGkgPCA2MCkgeworCQkJY3R4LT5URU1QID0gKChDU0hJRlQoNSwgY3R4LT5BKSkgKworCQkJICAg
IChGMyhjdHgtPkIsIGN0eC0+QywgY3R4LT5EKSkgKworCQkJICAgIChjdHgtPkUpICsKKwkJCSAg
ICAoY3R4LT53b3Jkc1tpXSkgKworCQkJICAgIEszKTsKKwkJfSBlbHNlIHsKKwkJCWN0eC0+VEVN
UCA9ICgoQ1NISUZUKDUsIGN0eC0+QSkpICsKKwkJCSAgICAoRjQoY3R4LT5CLCBjdHgtPkMsIGN0
eC0+RCkpICsKKwkJCSAgICAoY3R4LT5FKSArCisJCQkgICAgKGN0eC0+d29yZHNbaV0pICsKKwkJ
CSAgICBLNCk7CisJCX0KKwkJY3R4LT5FID0gY3R4LT5EOworCQljdHgtPkQgPSBjdHgtPkM7CisJ
CWN0eC0+QyA9IENTSElGVCgzMCwgY3R4LT5CKTsKKwkJY3R4LT5CID0gY3R4LT5BOworCQljdHgt
PkEgPSBjdHgtPlRFTVA7CisJfQorCS8qIHN0ZXAgZSkgKi8KKwljdHgtPkgwID0gKGN0eC0+SDAp
ICsgKGN0eC0+QSk7CisJY3R4LT5IMSA9IChjdHgtPkgxKSArIChjdHgtPkIpOworCWN0eC0+SDIg
PSAoY3R4LT5IMikgKyAoY3R4LT5DKTsKKwljdHgtPkgzID0gKGN0eC0+SDMpICsgKGN0eC0+RCk7
CisJY3R4LT5INCA9IChjdHgtPkg0KSArIChjdHgtPkUpOworfQorCit2b2lkCitzY3RwX3NoYTFf
dXBkYXRlKHN0cnVjdCBzY3RwX3NoYTFfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFy
ICpwdHIsIHVuc2lnbmVkIGludCBzaXopCit7CisJdW5zaWduZWQgaW50IG51bWJlcl9sZWZ0LCBs
ZWZ0X3RvX2ZpbGw7CisKKwludW1iZXJfbGVmdCA9IHNpejsKKwl3aGlsZSAobnVtYmVyX2xlZnQg
PiAwKSB7CisJCWxlZnRfdG9fZmlsbCA9IHNpemVvZihjdHgtPnNoYV9ibG9jaykgLSBjdHgtPmhv
d19tYW55X2luX2Jsb2NrOworCQlpZiAobGVmdF90b19maWxsID4gbnVtYmVyX2xlZnQpIHsKKwkJ
CS8qIGNhbiBvbmx5IHBhcnRpYWxseSBmaWxsIHVwIHRoaXMgb25lICovCisJCQltZW1jcHkoJmN0
eC0+c2hhX2Jsb2NrW2N0eC0+aG93X21hbnlfaW5fYmxvY2tdLAorCQkJICAgIHB0ciwgbnVtYmVy
X2xlZnQpOworCQkJY3R4LT5ob3dfbWFueV9pbl9ibG9jayArPSBudW1iZXJfbGVmdDsKKwkJCWN0
eC0+cnVubmluZ190b3RhbCArPSBudW1iZXJfbGVmdDsKKwkJCWJyZWFrOworCQl9IGVsc2Ugewor
CQkJLyogYmxvY2sgaXMgbm93IGZ1bGwsIHByb2Nlc3MgaXQgKi8KKwkJCW1lbWNweSgmY3R4LT5z
aGFfYmxvY2tbY3R4LT5ob3dfbWFueV9pbl9ibG9ja10sCisJCQkgICAgcHRyLCBsZWZ0X3RvX2Zp
bGwpOworCQkJc2N0cF9zaGExX3Byb2Nlc3NfYV9ibG9jayhjdHgsCisJCQkgICAgKHVuc2lnbmVk
IGludCAqKWN0eC0+c2hhX2Jsb2NrKTsKKwkJCW51bWJlcl9sZWZ0IC09IGxlZnRfdG9fZmlsbDsK
KwkJCWN0eC0+cnVubmluZ190b3RhbCArPSBsZWZ0X3RvX2ZpbGw7CisJCQljdHgtPmhvd19tYW55
X2luX2Jsb2NrID0gMDsKKwkJCXB0ciA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopKHB0ciArIGxl
ZnRfdG9fZmlsbCk7CisJCX0KKwl9Cit9CisKK3ZvaWQKK3NjdHBfc2hhMV9maW5hbCh1bnNpZ25l
ZCBjaGFyICpkaWdlc3QsIHN0cnVjdCBzY3RwX3NoYTFfY29udGV4dCAqY3R4KQoreworCS8qCisJ
ICogaWYgYW55IGxlZnQgaW4gYmxvY2sgZmlsbCB3aXRoIHBhZGRpbmcgYW5kIHByb2Nlc3MuIFRo
ZW4gdHJhbnNmZXIKKwkgKiB0aGUgZGlnZXN0IHRvIHRoZSBwb2ludGVyLiBBdCB0aGUgbGFzdCBi
bG9jayBzb21lIHNwZWNpYWwgcnVsZXMKKwkgKiBuZWVkIHRvIGFwcGx5LiBXZSBtdXN0IGFkZCBh
IDEgYml0IGZvbGxvd2luZyB0aGUgbWVzc2FnZSwgdGhlbiB3ZQorCSAqIHBhZCB3aXRoIDAncy4g
VGhlIHRvdGFsIHNpemUgaXMgZW5jb2RlZCBhcyBhIDY0IGJpdCBudW1iZXIgYXQgdGhlCisJICog
ZW5kLiBOb3cgaWYgdGhlIGxhc3QgYnVmZmVyIGhhcyBtb3JlIHRoYW4gNTUgb2N0ZXRzIGluIGl0
IHdlCisJICogY2Fubm90IGZpdCB0aGUgNjQgYml0IG51bWJlciArIDEwMDAwMDAwIHBhZCBvbiB0
aGUgZW5kIGFuZCBtdXN0CisJICogYWRkIHRoZSAxMDAwMDAwMCBwYWQsIHBhZCB0aGUgcmVzdCBv
ZiB0aGUgbWVzc2FnZSB3aXRoIDAncyBhbmQKKwkgKiB0aGVuIGNyZWF0ZSBhbiBhbGwgMCBtZXNz
YWdlIHdpdGgganVzdCB0aGUgNjQgYml0IHNpemUgYXQgdGhlIGVuZAorCSAqIGFuZCBydW4gdGhp
cyBibG9jayB0aHJvdWdoIGJ5IGl0c2VsZi4gIEFsc28gdGhlIDY0IGJpdCBpbnQgbXVzdAorCSAq
IGJlIGluIG5ldHdvcmsgYnl0ZSBvcmRlci4KKwkgKi8KKwlpbnQgbGVmdF90b19maWxsOworCXVu
c2lnbmVkIGludCBpLCAqcHRyOworCisJaWYgKGN0eC0+aG93X21hbnlfaW5fYmxvY2sgPiA1NSkg
eworCQkvKgorCQkgKiBzcGVjaWFsIGNhc2UsIHdlIG5lZWQgdG8gcHJvY2VzcyB0d28gYmxvY2tz
IGhlcmUuIE9uZSBmb3IKKwkJICogdGhlIGN1cnJlbnQgc3R1ZmYgcGx1cyBwb3NzaWJseSB0aGUg
cGFkLiBUaGUgb3RoZXIgZm9yCisJCSAqIHRoZSBzaXplLgorCQkgKi8KKwkJbGVmdF90b19maWxs
ID0gc2l6ZW9mKGN0eC0+c2hhX2Jsb2NrKSAtIGN0eC0+aG93X21hbnlfaW5fYmxvY2s7CisJCWlm
IChsZWZ0X3RvX2ZpbGwgPT0gMCkgeworCQkJLyogU2hvdWxkIG5vdCByZWFsbHkgaGFwcGVuIGJ1
dCBJIGFtIHBhcmFub2lkICovCisJCQlzY3RwX3NoYTFfcHJvY2Vzc19hX2Jsb2NrKGN0eCwKKwkJ
CSAgICAodW5zaWduZWQgaW50ICopY3R4LT5zaGFfYmxvY2spOworCQkJLyogaW5pdCBsYXN0IGJs
b2NrLCBhIGJpdCBkaWZmZXJlbnQgdGhhbiB0aGUgcmVzdCAqLworCQkJY3R4LT5zaGFfYmxvY2tb
MF0gPSAnXHg4MCc7CisJCQlmb3IgKGkgPSAxOyBpIDwgc2l6ZW9mKGN0eC0+c2hhX2Jsb2NrKTsg
aSsrKSB7CisJCQkJY3R4LT5zaGFfYmxvY2tbaV0gPSAweDA7CisJCQl9CisJCX0gZWxzZSBpZiAo
bGVmdF90b19maWxsID09IDEpIHsKKwkJCWN0eC0+c2hhX2Jsb2NrW2N0eC0+aG93X21hbnlfaW5f
YmxvY2tdID0gJ1x4ODAnOworCQkJc2N0cF9zaGExX3Byb2Nlc3NfYV9ibG9jayhjdHgsCisJCQkg
ICAgKHVuc2lnbmVkIGludCAqKWN0eC0+c2hhX2Jsb2NrKTsKKwkJCS8qIGluaXQgbGFzdCBibG9j
ayAqLworCQkJbWVtc2V0KGN0eC0+c2hhX2Jsb2NrLCAwLCBzaXplb2YoY3R4LT5zaGFfYmxvY2sp
KTsKKwkJfSBlbHNlIHsKKwkJCWN0eC0+c2hhX2Jsb2NrW2N0eC0+aG93X21hbnlfaW5fYmxvY2td
ID0gJ1x4ODAnOworCQkJZm9yIChpID0gKGN0eC0+aG93X21hbnlfaW5fYmxvY2sgKyAxKTsKKwkJ
CSAgICBpIDwgc2l6ZW9mKGN0eC0+c2hhX2Jsb2NrKTsKKwkJCSAgICBpKyspIHsKKwkJCQljdHgt
PnNoYV9ibG9ja1tpXSA9IDB4MDsKKwkJCX0KKwkJCXNjdHBfc2hhMV9wcm9jZXNzX2FfYmxvY2so
Y3R4LAorCQkJICAgICh1bnNpZ25lZCBpbnQgKiljdHgtPnNoYV9ibG9jayk7CisJCQkvKiBpbml0
IGxhc3QgYmxvY2sgKi8KKwkJCW1lbXNldChjdHgtPnNoYV9ibG9jaywgMCwgc2l6ZW9mKGN0eC0+
c2hhX2Jsb2NrKSk7CisJCX0KKwkJLyogVGhpcyBpcyBpbiBiaXRzIHNvIG11bHRpcGx5IGJ5IDgg
Ki8KKwkJY3R4LT5ydW5uaW5nX3RvdGFsICo9IDg7CisJCXB0ciA9ICh1bnNpZ25lZCBpbnQgKikm
Y3R4LT5zaGFfYmxvY2tbNjBdOworCQkqcHRyID0gaHRvbmwoY3R4LT5ydW5uaW5nX3RvdGFsKTsK
KwkJc2N0cF9zaGExX3Byb2Nlc3NfYV9ibG9jayhjdHgsICh1bnNpZ25lZCBpbnQgKiljdHgtPnNo
YV9ibG9jayk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogZWFzeSBjYXNlLCB3ZSBqdXN0IHBhZCB0
aGlzIG1lc3NhZ2UgdG8gc2l6ZSAtIGVuZCB3aXRoIDAKKwkJICogYWRkIHRoZSBtYWdpYyAweDgw
IHRvIHRoZSBuZXh0IHdvcmQgYW5kIHRoZW4gcHV0IHRoZQorCQkgKiBuZXR3b3JrIGJ5dGUgb3Jk
ZXIgc2l6ZSBpbiB0aGUgbGFzdCBzcG90IGFuZCBwcm9jZXNzIHRoZQorCQkgKiBibG9jay4KKwkJ
ICovCisJCWN0eC0+c2hhX2Jsb2NrW2N0eC0+aG93X21hbnlfaW5fYmxvY2tdID0gJ1x4ODAnOwor
CQlmb3IgKGkgPSAoY3R4LT5ob3dfbWFueV9pbl9ibG9jayArIDEpOworCQkgICAgaSA8IHNpemVv
ZihjdHgtPnNoYV9ibG9jayk7CisJCSAgICBpKyspIHsKKwkJCWN0eC0+c2hhX2Jsb2NrW2ldID0g
MHgwOworCQl9CisJCS8qIGdldCBsYXN0IGludCBzcG90ICovCisJCWN0eC0+cnVubmluZ190b3Rh
bCAqPSA4OworCQlwdHIgPSAodW5zaWduZWQgaW50ICopJmN0eC0+c2hhX2Jsb2NrWzYwXTsKKwkJ
KnB0ciA9IGh0b25sKGN0eC0+cnVubmluZ190b3RhbCk7CisJCXNjdHBfc2hhMV9wcm9jZXNzX2Ff
YmxvY2soY3R4LCAodW5zaWduZWQgaW50ICopY3R4LT5zaGFfYmxvY2spOworCX0KKwkvKiB0cmFu
c2ZlciB0aGUgZGlnZXN0IGJhY2sgdG8gdGhlIHVzZXIgKi8KKwlkaWdlc3RbM10gPSAoY3R4LT5I
MCAmIDB4ZmYpOworCWRpZ2VzdFsyXSA9ICgoY3R4LT5IMCA+PiA4KSAmIDB4ZmYpOworCWRpZ2Vz
dFsxXSA9ICgoY3R4LT5IMCA+PiAxNikgJiAweGZmKTsKKwlkaWdlc3RbMF0gPSAoKGN0eC0+SDAg
Pj4gMjQpICYgMHhmZik7CisKKwlkaWdlc3RbN10gPSAoY3R4LT5IMSAmIDB4ZmYpOworCWRpZ2Vz
dFs2XSA9ICgoY3R4LT5IMSA+PiA4KSAmIDB4ZmYpOworCWRpZ2VzdFs1XSA9ICgoY3R4LT5IMSA+
PiAxNikgJiAweGZmKTsKKwlkaWdlc3RbNF0gPSAoKGN0eC0+SDEgPj4gMjQpICYgMHhmZik7CisK
KwlkaWdlc3RbMTFdID0gKGN0eC0+SDIgJiAweGZmKTsKKwlkaWdlc3RbMTBdID0gKChjdHgtPkgy
ID4+IDgpICYgMHhmZik7CisJZGlnZXN0WzldID0gKChjdHgtPkgyID4+IDE2KSAmIDB4ZmYpOwor
CWRpZ2VzdFs4XSA9ICgoY3R4LT5IMiA+PiAyNCkgJiAweGZmKTsKKworCWRpZ2VzdFsxNV0gPSAo
Y3R4LT5IMyAmIDB4ZmYpOworCWRpZ2VzdFsxNF0gPSAoKGN0eC0+SDMgPj4gOCkgJiAweGZmKTsK
KwlkaWdlc3RbMTNdID0gKChjdHgtPkgzID4+IDE2KSAmIDB4ZmYpOworCWRpZ2VzdFsxMl0gPSAo
KGN0eC0+SDMgPj4gMjQpICYgMHhmZik7CisKKwlkaWdlc3RbMTldID0gKGN0eC0+SDQgJiAweGZm
KTsKKwlkaWdlc3RbMThdID0gKChjdHgtPkg0ID4+IDgpICYgMHhmZik7CisJZGlnZXN0WzE3XSA9
ICgoY3R4LT5INCA+PiAxNikgJiAweGZmKTsKKwlkaWdlc3RbMTZdID0gKChjdHgtPkg0ID4+IDI0
KSAmIDB4ZmYpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIv
bmV0aW5ldC9zY3RwX3NoYTEuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3No
YTEuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAuLjlmZjRmZjdiZGMy
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3No
YTEuaApAQCAtMCwwICsxLDk0IEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBC
U0QtMy1DbGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lz
dGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIw
MTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIGEpIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqCisgKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKyNlbmRp
ZgorCisKKyNpZm5kZWYgX19ORVRJTkVUX1NDVFBfU0hBMV9IX18KKyNkZWZpbmUgX19ORVRJTkVU
X1NDVFBfU0hBMV9IX18KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIGRlZmluZWQoU0NU
UF9VU0VfTlNTX1NIQTEpCisjaW5jbHVkZSA8cGsxMXB1Yi5oPgorI2VsaWYgZGVmaW5lZChTQ1RQ
X1VTRV9PUEVOU1NMX1NIQTEpCisjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KKyNlbGlmIGRlZmlu
ZWQoU0NUUF9VU0VfTUJFRFRMU19TSEExKQorI2luY2x1ZGUgPG1iZWR0bHMvc2hhMS5oPgorI2Vu
ZGlmCisKK3N0cnVjdCBzY3RwX3NoYTFfY29udGV4dCB7CisjaWYgZGVmaW5lZChTQ1RQX1VTRV9O
U1NfU0hBMSkKKwlzdHJ1Y3QgUEsxMUNvbnRleHQgKnBrMTFfY3R4OworI2VsaWYgZGVmaW5lZChT
Q1RQX1VTRV9PUEVOU1NMX1NIQTEpCisJU0hBX0NUWCBzaGFfY3R4OworI2VsaWYgZGVmaW5lZChT
Q1RQX1VTRV9NQkVEVExTX1NIQTEpCisJbWJlZHRsc19zaGExX2NvbnRleHQgc2hhMV9jdHg7Cisj
ZWxzZQorCXVuc2lnbmVkIGludCBBOworCXVuc2lnbmVkIGludCBCOworCXVuc2lnbmVkIGludCBD
OworCXVuc2lnbmVkIGludCBEOworCXVuc2lnbmVkIGludCBFOworCXVuc2lnbmVkIGludCBIMDsK
Kwl1bnNpZ25lZCBpbnQgSDE7CisJdW5zaWduZWQgaW50IEgyOworCXVuc2lnbmVkIGludCBIMzsK
Kwl1bnNpZ25lZCBpbnQgSDQ7CisJdW5zaWduZWQgaW50IHdvcmRzWzgwXTsKKwl1bnNpZ25lZCBp
bnQgVEVNUDsKKwkvKiBibG9jayBJIGFtIGNvbGxlY3RpbmcgdG8gcHJvY2VzcyAqLworCWNoYXIg
c2hhX2Jsb2NrWzY0XTsKKwkvKiBjb2xsZWN0ZWQgc28gZmFyICovCisJaW50IGhvd19tYW55X2lu
X2Jsb2NrOworCXVuc2lnbmVkIGludCBydW5uaW5nX3RvdGFsOworI2VuZGlmCit9OworCisjaWYg
KGRlZmluZWQoX19BUFBMRV9fKSAgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykgJiYgZGVmaW5l
ZChLRVJORUwpKQorI2lmbmRlZiBfS0VSTkVMCisjZGVmaW5lIF9LRVJORUwKKyNlbmRpZgorI2Vu
ZGlmCisKKyNpZiBkZWZpbmVkKF9LRVJORUwpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwor
dm9pZCBzY3RwX3NoYTFfaW5pdChzdHJ1Y3Qgc2N0cF9zaGExX2NvbnRleHQgKik7Cit2b2lkIHNj
dHBfc2hhMV91cGRhdGUoc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0ICosIGNvbnN0IHVuc2lnbmVk
IGNoYXIgKiwgdW5zaWduZWQgaW50KTsKK3ZvaWQgc2N0cF9zaGExX2ZpbmFsKHVuc2lnbmVkIGNo
YXIgKiwgc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0ICopOworCisjZW5kaWYKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc3NfZnVuY3Rpb25zLmMg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9zc19mdW5jdGlvbnMuYwpuZXcgZmls
ZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAuLmMyM2UxNDJlYTQ0YgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NzX2Z1bmN0aW9ucy5j
CkBAIC0wLDAgKzEsMTEyNiBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE
LTItQ2xhdXNlLUZyZWVCU0QKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMiwgYnkgTWlj
aGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAt
MjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChjKSAyMDEwLTIwMTIsIGJ5IFJvYmluIFNlZ2dlbG1hbm4uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAg
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYm
ICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJ
RCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0cF9zc19mdW5jdGlvbnMuYyAzNjUwNzEg
MjAyMC0wOS0wMSAyMToxOToxNFogbWpnICQiKTsKKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0aW5l
dC9zY3RwX3BjYi5oPgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpbmNsdWRlIDxuZXRp
bmV0L3NjdHBfb3NfdXNlcnNwYWNlLmg+CisjZW5kaWYKKworLyoKKyAqIERlZmF1bHQgc2ltcGxl
IHJvdW5kLXJvYmluIGFsZ29yaXRobS4KKyAqIEp1c3QgaW50ZXJhdGVzIHRoZSBzdHJlYW1zIGlu
IHRoZSBvcmRlciB0aGV5IGFwcGVhci4KKyAqLworCitzdGF0aWMgdm9pZAorc2N0cF9zc19kZWZh
dWx0X2FkZChzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwKKyAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqLAorICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqLCBpbnQpOworCitzdGF0
aWMgdm9pZAorc2N0cF9zc19kZWZhdWx0X3JlbW92ZShzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0
IHNjdHBfYXNzb2NpYXRpb24gKiwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBf
c3RyZWFtX291dCAqLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1f
cXVldWVfcGVuZGluZyAqLCBpbnQpOworCitzdGF0aWMgdm9pZAorc2N0cF9zc19kZWZhdWx0X2lu
aXQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywK
KyAgICAgICAgICAgICAgICAgICAgIGludCBob2xkc19sb2NrKQoreworCXVpbnQxNl90IGk7CisK
KwlpZiAoaG9sZHNfbG9jayA9PSAwKSB7CisJCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKKwl9
CisJYXNvYy0+c3NfZGF0YS5sb2NrZWRfb25fc2VuZGluZyA9IE5VTEw7CisJYXNvYy0+c3NfZGF0
YS5sYXN0X291dF9zdHJlYW0gPSBOVUxMOworCVRBSUxRX0lOSVQoJmFzb2MtPnNzX2RhdGEub3V0
LndoZWVsKTsKKwkvKgorCSAqIElmIHRoZXJlIGlzIGRhdGEgaW4gdGhlIHN0cmVhbSBxdWV1ZXMg
YWxyZWFkeSwKKwkgKiB0aGUgc2NoZWR1bGVyIG9mIGFuIGV4aXN0aW5nIGFzc29jaWF0aW9uIGhh
cworCSAqIGJlZW4gY2hhbmdlZC4gV2UgbmVlZCB0byBhZGQgYWxsIHN0cmVhbSBxdWV1ZXMKKwkg
KiB0byB0aGUgd2hlZWwuCisJICovCisJZm9yIChpID0gMDsgaSA8IHN0Y2ItPmFzb2Muc3RyZWFt
b3V0Y250OyBpKyspIHsKKwkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19hZGRfdG9f
c3RyZWFtKHN0Y2IsICZzdGNiLT5hc29jLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJnN0Y2ItPmFzb2Muc3RybW91dFtpXSwKKwkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDEpOworCX0KKwlpZiAoaG9s
ZHNfbG9jayA9PSAwKSB7CisJCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOworCX0KKwlyZXR1
cm47Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3NzX2RlZmF1bHRfY2xlYXIoc3RydWN0IHNjdHBf
dGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKyAgICAgICAgICAgICAg
ICAgICAgICBpbnQgY2xlYXJfdmFsdWVzIFNDVFBfVU5VU0VELCBpbnQgaG9sZHNfbG9jaykKK3sK
KwlpZiAoaG9sZHNfbG9jayA9PSAwKSB7CisJCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKKwl9
CisJd2hpbGUgKCFUQUlMUV9FTVBUWSgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwpKSB7CisJCXN0
cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnE7CisKKwkJc3RycSA9IFRBSUxRX0ZJUlNUKCZhc29j
LT5zc19kYXRhLm91dC53aGVlbCk7CisJCVRBSUxRX1JFTU9WRSgmYXNvYy0+c3NfZGF0YS5vdXQu
d2hlZWwsIHN0cnEsIHNzX3BhcmFtcy5yci5uZXh0X3Nwb2tlKTsKKwkJc3RycS0+c3NfcGFyYW1z
LnJyLm5leHRfc3Bva2UudHFlX25leHQgPSBOVUxMOworCQlzdHJxLT5zc19wYXJhbXMucnIubmV4
dF9zcG9rZS50cWVfcHJldiA9IE5VTEw7CisJfQorCWFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3Ry
ZWFtID0gTlVMTDsKKwlpZiAoaG9sZHNfbG9jayA9PSAwKSB7CisJCVNDVFBfVENCX1NFTkRfVU5M
T0NLKHN0Y2IpOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3NzX2RlZmF1
bHRfaW5pdF9zdHJlYW0oc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1f
b3V0ICpzdHJxLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICp3aXRoX3N0cnEpCit7CisJaWYgKHdp
dGhfc3RycSAhPSBOVUxMKSB7CisJCWlmIChzdGNiLT5hc29jLnNzX2RhdGEubG9ja2VkX29uX3Nl
bmRpbmcgPT0gd2l0aF9zdHJxKSB7CisJCQlzdGNiLT5hc29jLnNzX2RhdGEubG9ja2VkX29uX3Nl
bmRpbmcgPSBzdHJxOworCQl9CisJCWlmIChzdGNiLT5hc29jLnNzX2RhdGEubGFzdF9vdXRfc3Ry
ZWFtID09IHdpdGhfc3RycSkgeworCQkJc3RjYi0+YXNvYy5zc19kYXRhLmxhc3Rfb3V0X3N0cmVh
bSA9IHN0cnE7CisJCX0KKwl9CisJc3RycS0+c3NfcGFyYW1zLnJyLm5leHRfc3Bva2UudHFlX25l
eHQgPSBOVUxMOworCXN0cnEtPnNzX3BhcmFtcy5yci5uZXh0X3Nwb2tlLnRxZV9wcmV2ID0gTlVM
TDsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3NzX2RlZmF1bHRfYWRkKHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsCisgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCBTQ1RQX1VOVVNFRCwg
aW50IGhvbGRzX2xvY2spCit7CisJaWYgKGhvbGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQX1RDQl9T
RU5EX0xPQ0soc3RjYik7CisJfQorCS8qIEFkZCB0byB3aGVlbCBpZiBub3QgYWxyZWFkeSBvbiBp
dCBhbmQgc3RyZWFtIHF1ZXVlIG5vdCBlbXB0eSAqLworCWlmICghVEFJTFFfRU1QVFkoJnN0cnEt
Pm91dHF1ZXVlKSAmJgorCSAgICAoc3RycS0+c3NfcGFyYW1zLnJyLm5leHRfc3Bva2UudHFlX25l
eHQgPT0gTlVMTCkgJiYKKwkgICAgKHN0cnEtPnNzX3BhcmFtcy5yci5uZXh0X3Nwb2tlLnRxZV9w
cmV2ID09IE5VTEwpKSB7CisJCVRBSUxRX0lOU0VSVF9UQUlMKCZhc29jLT5zc19kYXRhLm91dC53
aGVlbCwKKwkJICAgICAgICAgICAgICAgICAgc3RycSwgc3NfcGFyYW1zLnJyLm5leHRfc3Bva2Up
OworCX0KKwlpZiAoaG9sZHNfbG9jayA9PSAwKSB7CisJCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0
Y2IpOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfc3NfZGVmYXVsdF9pc19l
bXB0eShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX2Fzc29j
aWF0aW9uICphc29jKQoreworCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+c3NfZGF0YS5vdXQud2hl
ZWwpKSB7CisJCXJldHVybiAoMSk7CisJfSBlbHNlIHsKKwkJcmV0dXJuICgwKTsKKwl9Cit9CisK
K3N0YXRpYyB2b2lkCitzY3RwX3NzX2RlZmF1bHRfcmVtb3ZlKHN0cnVjdCBzY3RwX3RjYiAqc3Rj
Yiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisgICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsCisgICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCBTQ1RQX1VOVVNFRCwgaW50IGhvbGRz
X2xvY2spCit7CisJaWYgKGhvbGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQX1RDQl9TRU5EX0xPQ0so
c3RjYik7CisJfQorCS8qIFJlbW92ZSBmcm9tIHdoZWVsIGlmIHN0cmVhbSBxdWV1ZSBpcyBlbXB0
eSBhbmQgYWN0dWFsbHkgaXMgb24gdGhlIHdoZWVsICovCisJaWYgKFRBSUxRX0VNUFRZKCZzdHJx
LT5vdXRxdWV1ZSkgJiYKKwkgICAgKHN0cnEtPnNzX3BhcmFtcy5yci5uZXh0X3Nwb2tlLnRxZV9u
ZXh0ICE9IE5VTEwgfHwKKwkgICAgc3RycS0+c3NfcGFyYW1zLnJyLm5leHRfc3Bva2UudHFlX3By
ZXYgIT0gTlVMTCkpIHsKKwkJaWYgKGFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID09IHN0
cnEpIHsKKwkJCWFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gVEFJTFFfUFJFVihhc29j
LT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2N0cHdoZWVsX2xpc3RoZWFkLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzc19wYXJhbXMucnIubmV4dF9zcG9rZSk7CisJCQlpZiAoYXNvYy0+c3NfZGF0
YS5sYXN0X291dF9zdHJlYW0gPT0gTlVMTCkgeworCQkJCWFzb2MtPnNzX2RhdGEubGFzdF9vdXRf
c3RyZWFtID0gVEFJTFFfTEFTVCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwsCisJCQkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3Rwd2hlZWxfbGlzdGhlYWQpOworCQkJfQor
CQkJaWYgKGFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID09IHN0cnEpIHsKKwkJCQlhc29j
LT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9IE5VTEw7CisJCQl9CisJCX0KKwkJVEFJTFFfUkVN
T1ZFKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCwgc3RycSwgc3NfcGFyYW1zLnJyLm5leHRfc3Bv
a2UpOworCQlzdHJxLT5zc19wYXJhbXMucnIubmV4dF9zcG9rZS50cWVfbmV4dCA9IE5VTEw7CisJ
CXN0cnEtPnNzX3BhcmFtcy5yci5uZXh0X3Nwb2tlLnRxZV9wcmV2ID0gTlVMTDsKKwl9CisJaWYg
KGhvbGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKKwl9CisJ
cmV0dXJuOworfQorCitzdGF0aWMgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqCitzY3RwX3NzX2Rl
ZmF1bHRfc2VsZWN0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiBTQ1RQX1VOVVNFRCwgc3RydWN0IHNj
dHBfbmV0cyAqbmV0LAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lh
dGlvbiAqYXNvYykKK3sKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxLCAqc3RycXQ7CisK
KwlpZiAoYXNvYy0+c3NfZGF0YS5sb2NrZWRfb25fc2VuZGluZykgeworCQlyZXR1cm4gKGFzb2Mt
PnNzX2RhdGEubG9ja2VkX29uX3NlbmRpbmcpOworCX0KKwlzdHJxdCA9IGFzb2MtPnNzX2RhdGEu
bGFzdF9vdXRfc3RyZWFtOworZGVmYXVsdF9hZ2FpbjoKKwkvKiBGaW5kIHRoZSBuZXh0IHN0cmVh
bSB0byB1c2UgKi8KKwlpZiAoc3RycXQgPT0gTlVMTCkgeworCQlzdHJxID0gVEFJTFFfRklSU1Qo
JmFzb2MtPnNzX2RhdGEub3V0LndoZWVsKTsKKwl9IGVsc2UgeworCQlzdHJxID0gVEFJTFFfTkVY
VChzdHJxdCwgc3NfcGFyYW1zLnJyLm5leHRfc3Bva2UpOworCQlpZiAoc3RycSA9PSBOVUxMKSB7
CisJCQlzdHJxID0gVEFJTFFfRklSU1QoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsKTsKKwkJfQor
CX0KKworCS8qIElmIENNVCBpcyBvZmYsIHdlIG11c3QgdmFsaWRhdGUgdGhhdAorCSAqIHRoZSBz
dHJlYW0gaW4gcXVlc3Rpb24gaGFzIHRoZSBmaXJzdAorCSAqIGl0ZW0gcG9pbnRlZCB0b3dhcmRz
IGFyZSBuZXR3b3JrIGRlc3RpbmF0aW9uCisJICogcmVxdWVzdGVkIGJ5IHRoZSBjYWxsZXIuIE5v
dGUgdGhhdCBpZiB3ZQorCSAqIHR1cm4gb3V0IHRvIGJlIGxvY2tlZCB0byBhIHN0cmVhbSAoYXNz
aWduaW5nCisJICogVFNOJ3MgdGhlbiB3ZSBtdXN0IHN0b3AsIHNpbmNlIHdlIGNhbm5vdAorCSAq
IGxvb2sgZm9yIGFub3RoZXIgc3RyZWFtIHdpdGggZGF0YSB0byBzZW5kCisJICogdG8gdGhhdCBk
ZXN0aW5hdGlvbikuIEluIENNVCdzIGNhc2UsIGJ5CisJICogc2tpcHBpbmcgdGhpcyBjaGVjaywg
d2Ugd2lsbCBzZW5kIG9uZQorCSAqIGRhdGEgcGFja2V0IHRvd2FyZHMgdGhlIHJlcXVlc3RlZCBu
ZXQuCisJICovCisJaWYgKG5ldCAhPSBOVUxMICYmIHN0cnEgIT0gTlVMTCAmJgorCSAgICBTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfY210X29uX29mZikgPT0gMCkgeworCQlpZiAoVEFJTFFfRklSU1Qo
JnN0cnEtPm91dHF1ZXVlKSAmJgorCQkgICAgVEFJTFFfRklSU1QoJnN0cnEtPm91dHF1ZXVlKS0+
bmV0ICE9IE5VTEwgJiYKKwkJICAgIFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSktPm5ldCAh
PSBuZXQpIHsKKwkJCWlmIChzdHJxID09IGFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtKSB7
CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0gZWxzZSB7CisJCQkJc3RycXQgPSBzdHJxOworCQkJ
CWdvdG8gZGVmYXVsdF9hZ2FpbjsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gKHN0cnEpOworfQor
CitzdGF0aWMgdm9pZAorc2N0cF9zc19kZWZhdWx0X3NjaGVkdWxlZChzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCBT
Q1RQX1VOVVNFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfYXNzb2Np
YXRpb24gKmFzb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3N0cmVh
bV9vdXQgKnN0cnEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb3ZlZF9ob3dfbXVj
aCBTQ1RQX1VOVVNFRCkKK3sKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3A7
CisKKwlhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9IHN0cnE7CisJaWYgKHN0Y2ItPmFz
b2MuaWRhdGFfc3VwcG9ydGVkID09IDApIHsKKwkJc3AgPSBUQUlMUV9GSVJTVCgmc3RycS0+b3V0
cXVldWUpOworCQlpZiAoKHNwICE9IE5VTEwpICYmIChzcC0+c29tZV90YWtlbiA9PSAxKSkgewor
CQkJc3RjYi0+YXNvYy5zc19kYXRhLmxvY2tlZF9vbl9zZW5kaW5nID0gc3RycTsKKwkJfSBlbHNl
IHsKKwkJCXN0Y2ItPmFzb2Muc3NfZGF0YS5sb2NrZWRfb25fc2VuZGluZyA9IE5VTEw7CisJCX0K
Kwl9IGVsc2UgeworCQlzdGNiLT5hc29jLnNzX2RhdGEubG9ja2VkX29uX3NlbmRpbmcgPSBOVUxM
OworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3NzX2RlZmF1bHRfcGFja2V0
X2RvbmUoc3RydWN0IHNjdHBfdGNiICpzdGNiIFNDVFBfVU5VU0VELCBzdHJ1Y3Qgc2N0cF9uZXRz
ICpuZXQgU0NUUF9VTlVTRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNj
dHBfYXNzb2NpYXRpb24gKmFzb2MgU0NUUF9VTlVTRUQpCit7CisJLyogTm90aGluZyB0byBiZSBk
b25lIGhlcmUgKi8KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfc3NfZGVmYXVsdF9n
ZXRfdmFsdWUoc3RydWN0IHNjdHBfdGNiICpzdGNiIFNDVFBfVU5VU0VELCBzdHJ1Y3Qgc2N0cF9h
c3NvY2lhdGlvbiAqYXNvYyBTQ1RQX1VOVVNFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSBTQ1RQX1VOVVNFRCwgdWludDE2X3QgKnZhbHVl
IFNDVFBfVU5VU0VEKQoreworCS8qIE5vdGhpbmcgdG8gYmUgZG9uZSBoZXJlICovCisJcmV0dXJu
ICgtMSk7Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfc3NfZGVmYXVsdF9zZXRfdmFsdWUoc3RydWN0
IHNjdHBfdGNiICpzdGNiIFNDVFBfVU5VU0VELCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNv
YyBTQ1RQX1VOVVNFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfc3Ry
ZWFtX291dCAqc3RycSBTQ1RQX1VOVVNFRCwgdWludDE2X3QgdmFsdWUgU0NUUF9VTlVTRUQpCit7
CisJLyogTm90aGluZyB0byBiZSBkb25lIGhlcmUgKi8KKwlyZXR1cm4gKC0xKTsKK30KKworc3Rh
dGljIGludAorc2N0cF9zc19kZWZhdWx0X2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlKHN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiBTQ1RQX1VOVVNFRCwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2Mp
Cit7CisJc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycTsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1f
cXVldWVfcGVuZGluZyAqc3A7CisKKwlpZiAoYXNvYy0+c3RyZWFtX3F1ZXVlX2NudCAhPSAxKSB7
CisJCXJldHVybiAoMCk7CisJfQorCXN0cnEgPSBhc29jLT5zc19kYXRhLmxvY2tlZF9vbl9zZW5k
aW5nOworCWlmIChzdHJxID09IE5VTEwpIHsKKwkJcmV0dXJuICgwKTsKKwl9CisJc3AgPSBUQUlM
UV9GSVJTVCgmc3RycS0+b3V0cXVldWUpOworCWlmIChzcCA9PSBOVUxMKSB7CisJCXJldHVybiAo
MCk7CisJfQorCXJldHVybiAoIXNwLT5tc2dfaXNfY29tcGxldGUpOworfQorCisvKgorICogUmVh
bCByb3VuZC1yb2JpbiBhbGdvcml0aG0uCisgKiBBbHdheXMgaW50ZXJhdGVzIHRoZSBzdHJlYW1z
IGluIGFzY2VuZGluZyBvcmRlci4KKyAqLworc3RhdGljIHZvaWQKK3NjdHBfc3NfcnJfYWRkKHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisgICAg
ICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxLAorICAgICAgICAgICAgICAg
c3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwIFNDVFBfVU5VU0VELCBpbnQgaG9s
ZHNfbG9jaykKK3sKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxdDsKKworCWlmIChob2xk
c19sb2NrID09IDApIHsKKwkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOworCX0KKwlpZiAoIVRB
SUxRX0VNUFRZKCZzdHJxLT5vdXRxdWV1ZSkgJiYKKwkgICAgKHN0cnEtPnNzX3BhcmFtcy5yci5u
ZXh0X3Nwb2tlLnRxZV9uZXh0ID09IE5VTEwpICYmCisJICAgIChzdHJxLT5zc19wYXJhbXMucnIu
bmV4dF9zcG9rZS50cWVfcHJldiA9PSBOVUxMKSkgeworCQlpZiAoVEFJTFFfRU1QVFkoJmFzb2Mt
PnNzX2RhdGEub3V0LndoZWVsKSkgeworCQkJVEFJTFFfSU5TRVJUX0hFQUQoJmFzb2MtPnNzX2Rh
dGEub3V0LndoZWVsLCBzdHJxLCBzc19wYXJhbXMucnIubmV4dF9zcG9rZSk7CisJCX0gZWxzZSB7
CisJCQlzdHJxdCA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCk7CisJCQl3
aGlsZSAoc3RycXQgIT0gTlVMTCAmJiAoc3RycXQtPnNpZCA8IHN0cnEtPnNpZCkpIHsKKwkJCQlz
dHJxdCA9IFRBSUxRX05FWFQoc3RycXQsIHNzX3BhcmFtcy5yci5uZXh0X3Nwb2tlKTsKKwkJCX0K
KwkJCWlmIChzdHJxdCAhPSBOVUxMKSB7CisJCQkJVEFJTFFfSU5TRVJUX0JFRk9SRShzdHJxdCwg
c3RycSwgc3NfcGFyYW1zLnJyLm5leHRfc3Bva2UpOworCQkJfSBlbHNlIHsKKwkJCQlUQUlMUV9J
TlNFUlRfVEFJTCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwsIHN0cnEsIHNzX3BhcmFtcy5yci5u
ZXh0X3Nwb2tlKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoaG9sZHNfbG9jayA9PSAwKSB7CisJCVND
VFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOworCX0KKwlyZXR1cm47Cit9CisKKy8qCisgKiBSZWFs
IHJvdW5kLXJvYmluIHBlciBwYWNrZXQgYWxnb3JpdGhtLgorICogQWx3YXlzIGludGVyYXRlcyB0
aGUgc3RyZWFtcyBpbiBhc2NlbmRpbmcgb3JkZXIgYW5kCisgKiBvbmx5IGZpbGxzIG1lc3NhZ2Vz
IG9mIHRoZSBzYW1lIHN0cmVhbSBpbiBhIHBhY2tldC4KKyAqLworc3RhdGljIHN0cnVjdCBzY3Rw
X3N0cmVhbV9vdXQgKgorc2N0cF9zc19ycnBfc2VsZWN0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiBT
Q1RQX1VOVVNFRCwgc3RydWN0IHNjdHBfbmV0cyAqbmV0IFNDVFBfVU5VU0VELAorICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQoreworCXJldHVybiAoYXNv
Yy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW0pOworfQorCitzdGF0aWMgdm9pZAorc2N0cF9zc19y
cnBfcGFja2V0X2RvbmUoc3RydWN0IHNjdHBfdGNiICpzdGNiIFNDVFBfVU5VU0VELCBzdHJ1Y3Qg
c2N0cF9uZXRzICpuZXQsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3Nv
Y2lhdGlvbiAqYXNvYykKK3sKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxLCAqc3RycXQ7
CisKKwlzdHJxdCA9IGFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtOworcnJwX2FnYWluOgor
CS8qIEZpbmQgdGhlIG5leHQgc3RyZWFtIHRvIHVzZSAqLworCWlmIChzdHJxdCA9PSBOVUxMKSB7
CisJCXN0cnEgPSBUQUlMUV9GSVJTVCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwpOworCX0gZWxz
ZSB7CisJCXN0cnEgPSBUQUlMUV9ORVhUKHN0cnF0LCBzc19wYXJhbXMucnIubmV4dF9zcG9rZSk7
CisJCWlmIChzdHJxID09IE5VTEwpIHsKKwkJCXN0cnEgPSBUQUlMUV9GSVJTVCgmYXNvYy0+c3Nf
ZGF0YS5vdXQud2hlZWwpOworCQl9CisJfQorCisJLyogSWYgQ01UIGlzIG9mZiwgd2UgbXVzdCB2
YWxpZGF0ZSB0aGF0CisJICogdGhlIHN0cmVhbSBpbiBxdWVzdGlvbiBoYXMgdGhlIGZpcnN0CisJ
ICogaXRlbSBwb2ludGVkIHRvd2FyZHMgYXJlIG5ldHdvcmsgZGVzdGluYXRpb24KKwkgKiByZXF1
ZXN0ZWQgYnkgdGhlIGNhbGxlci4gTm90ZSB0aGF0IGlmIHdlCisJICogdHVybiBvdXQgdG8gYmUg
bG9ja2VkIHRvIGEgc3RyZWFtIChhc3NpZ25pbmcKKwkgKiBUU04ncyB0aGVuIHdlIG11c3Qgc3Rv
cCwgc2luY2Ugd2UgY2Fubm90CisJICogbG9vayBmb3IgYW5vdGhlciBzdHJlYW0gd2l0aCBkYXRh
IHRvIHNlbmQKKwkgKiB0byB0aGF0IGRlc3RpbmF0aW9uKS4gSW4gQ01UJ3MgY2FzZSwgYnkKKwkg
KiBza2lwcGluZyB0aGlzIGNoZWNrLCB3ZSB3aWxsIHNlbmQgb25lCisJICogZGF0YSBwYWNrZXQg
dG93YXJkcyB0aGUgcmVxdWVzdGVkIG5ldC4KKwkgKi8KKwlpZiAobmV0ICE9IE5VTEwgJiYgc3Ry
cSAhPSBOVUxMICYmCisJICAgIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfb25fb2ZmKSA9PSAw
KSB7CisJCWlmIChUQUlMUV9GSVJTVCgmc3RycS0+b3V0cXVldWUpICYmCisJCSAgICBUQUlMUV9G
SVJTVCgmc3RycS0+b3V0cXVldWUpLT5uZXQgIT0gTlVMTCAmJgorCQkgICAgVEFJTFFfRklSU1Qo
JnN0cnEtPm91dHF1ZXVlKS0+bmV0ICE9IG5ldCkgeworCQkJaWYgKHN0cnEgPT0gYXNvYy0+c3Nf
ZGF0YS5sYXN0X291dF9zdHJlYW0pIHsKKwkJCQlzdHJxID0gTlVMTDsKKwkJCX0gZWxzZSB7CisJ
CQkJc3RycXQgPSBzdHJxOworCQkJCWdvdG8gcnJwX2FnYWluOworCQkJfQorCQl9CisJfQorCWFz
b2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gc3RycTsKKwlyZXR1cm47Cit9CisKKy8qCisg
KiBQcmlvcml0eSBhbGdvcml0aG0uCisgKiBBbHdheXMgcHJlZmVycyBzdHJlYW1zIGJhc2VkIG9u
IHRoZWlyIHByaW9yaXR5IGlkLgorICovCitzdGF0aWMgdm9pZAorc2N0cF9zc19wcmlvX2NsZWFy
KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisg
ICAgICAgICAgICAgICAgICAgaW50IGNsZWFyX3ZhbHVlcywgaW50IGhvbGRzX2xvY2spCit7CisJ
aWYgKGhvbGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7CisJfQor
CXdoaWxlICghVEFJTFFfRU1QVFkoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsKSkgeworCQlzdHJ1
Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxOworCisJCXN0cnEgPSBUQUlMUV9GSVJTVCgmYXNvYy0+
c3NfZGF0YS5vdXQud2hlZWwpOworCQlpZiAoY2xlYXJfdmFsdWVzKSB7CisJCQlzdHJxLT5zc19w
YXJhbXMucHJpby5wcmlvcml0eSA9IDA7CisJCX0KKwkJVEFJTFFfUkVNT1ZFKCZhc29jLT5zc19k
YXRhLm91dC53aGVlbCwgc3RycSwgc3NfcGFyYW1zLnByaW8ubmV4dF9zcG9rZSk7CisJCXN0cnEt
PnNzX3BhcmFtcy5wcmlvLm5leHRfc3Bva2UudHFlX25leHQgPSBOVUxMOworCQlzdHJxLT5zc19w
YXJhbXMucHJpby5uZXh0X3Nwb2tlLnRxZV9wcmV2ID0gTlVMTDsKKwl9CisJYXNvYy0+c3NfZGF0
YS5sYXN0X291dF9zdHJlYW0gPSBOVUxMOworCWlmIChob2xkc19sb2NrID09IDApIHsKKwkJU0NU
UF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQK
K3NjdHBfc3NfcHJpb19pbml0X3N0cmVhbShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBz
Y3RwX3N0cmVhbV9vdXQgKnN0cnEsIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKndpdGhfc3RycSkK
K3sKKwlpZiAod2l0aF9zdHJxICE9IE5VTEwpIHsKKwkJaWYgKHN0Y2ItPmFzb2Muc3NfZGF0YS5s
b2NrZWRfb25fc2VuZGluZyA9PSB3aXRoX3N0cnEpIHsKKwkJCXN0Y2ItPmFzb2Muc3NfZGF0YS5s
b2NrZWRfb25fc2VuZGluZyA9IHN0cnE7CisJCX0KKwkJaWYgKHN0Y2ItPmFzb2Muc3NfZGF0YS5s
YXN0X291dF9zdHJlYW0gPT0gd2l0aF9zdHJxKSB7CisJCQlzdGNiLT5hc29jLnNzX2RhdGEubGFz
dF9vdXRfc3RyZWFtID0gc3RycTsKKwkJfQorCX0KKwlzdHJxLT5zc19wYXJhbXMucHJpby5uZXh0
X3Nwb2tlLnRxZV9uZXh0ID0gTlVMTDsKKwlzdHJxLT5zc19wYXJhbXMucHJpby5uZXh0X3Nwb2tl
LnRxZV9wcmV2ID0gTlVMTDsKKwlpZiAod2l0aF9zdHJxICE9IE5VTEwpIHsKKwkJc3RycS0+c3Nf
cGFyYW1zLnByaW8ucHJpb3JpdHkgPSB3aXRoX3N0cnEtPnNzX3BhcmFtcy5wcmlvLnByaW9yaXR5
OworCX0gZWxzZSB7CisJCXN0cnEtPnNzX3BhcmFtcy5wcmlvLnByaW9yaXR5ID0gMDsKKwl9CisJ
cmV0dXJuOworfQorCitzdGF0aWMgdm9pZAorc2N0cF9zc19wcmlvX2FkZChzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorICAgICAgICAgICAgICAg
ICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVf
cGVuZGluZyAqc3AgU0NUUF9VTlVTRUQsCisgICAgICAgICAgICAgICAgIGludCBob2xkc19sb2Nr
KQoreworCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnF0OworCisJaWYgKGhvbGRzX2xvY2sg
PT0gMCkgeworCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7CisJfQorCS8qIEFkZCB0byB3aGVl
bCBpZiBub3QgYWxyZWFkeSBvbiBpdCBhbmQgc3RyZWFtIHF1ZXVlIG5vdCBlbXB0eSAqLworCWlm
ICghVEFJTFFfRU1QVFkoJnN0cnEtPm91dHF1ZXVlKSAmJgorCSAgICAoc3RycS0+c3NfcGFyYW1z
LnByaW8ubmV4dF9zcG9rZS50cWVfbmV4dCA9PSBOVUxMKSAmJgorCSAgICAoc3RycS0+c3NfcGFy
YW1zLnByaW8ubmV4dF9zcG9rZS50cWVfcHJldiA9PSBOVUxMKSkgeworCQlpZiAoVEFJTFFfRU1Q
VFkoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsKSkgeworCQkJVEFJTFFfSU5TRVJUX0hFQUQoJmFz
b2MtPnNzX2RhdGEub3V0LndoZWVsLCBzdHJxLCBzc19wYXJhbXMucHJpby5uZXh0X3Nwb2tlKTsK
KwkJfSBlbHNlIHsKKwkJCXN0cnF0ID0gVEFJTFFfRklSU1QoJmFzb2MtPnNzX2RhdGEub3V0Lndo
ZWVsKTsKKwkJCXdoaWxlIChzdHJxdCAhPSBOVUxMICYmIHN0cnF0LT5zc19wYXJhbXMucHJpby5w
cmlvcml0eSA8IHN0cnEtPnNzX3BhcmFtcy5wcmlvLnByaW9yaXR5KSB7CisJCQkJc3RycXQgPSBU
QUlMUV9ORVhUKHN0cnF0LCBzc19wYXJhbXMucHJpby5uZXh0X3Nwb2tlKTsKKwkJCX0KKwkJCWlm
IChzdHJxdCAhPSBOVUxMKSB7CisJCQkJVEFJTFFfSU5TRVJUX0JFRk9SRShzdHJxdCwgc3RycSwg
c3NfcGFyYW1zLnByaW8ubmV4dF9zcG9rZSk7CisJCQl9IGVsc2UgeworCQkJCVRBSUxRX0lOU0VS
VF9UQUlMKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCwgc3RycSwgc3NfcGFyYW1zLnByaW8ubmV4
dF9zcG9rZSk7CisJCQl9CisJCX0KKwl9CisJaWYgKGhvbGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQ
X1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAor
c2N0cF9zc19wcmlvX3JlbW92ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fz
c29jaWF0aW9uICphc29jLAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1f
b3V0ICpzdHJxLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3AgU0NUUF9VTlVT
RUQsCisgICAgICAgICAgICAgICAgICAgIGludCBob2xkc19sb2NrKQoreworCWlmIChob2xkc19s
b2NrID09IDApIHsKKwkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOworCX0KKwkvKiBSZW1vdmUg
ZnJvbSB3aGVlbCBpZiBzdHJlYW0gcXVldWUgaXMgZW1wdHkgYW5kIGFjdHVhbGx5IGlzIG9uIHRo
ZSB3aGVlbCAqLworCWlmIChUQUlMUV9FTVBUWSgmc3RycS0+b3V0cXVldWUpICYmCisJICAgIChz
dHJxLT5zc19wYXJhbXMucHJpby5uZXh0X3Nwb2tlLnRxZV9uZXh0ICE9IE5VTEwgfHwKKwkgICAg
c3RycS0+c3NfcGFyYW1zLnByaW8ubmV4dF9zcG9rZS50cWVfcHJldiAhPSBOVUxMKSkgeworCQlp
ZiAoYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW0gPT0gc3RycSkgeworCQkJYXNvYy0+c3Nf
ZGF0YS5sYXN0X291dF9zdHJlYW0gPSBUQUlMUV9QUkVWKGFzb2MtPnNzX2RhdGEubGFzdF9vdXRf
c3RyZWFtLCBzY3Rwd2hlZWxfbGlzdGhlYWQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNzX3BhcmFtcy5wcmlvLm5leHRfc3Bva2UpOworCQkJaWYgKGFzb2MtPnNzX2Rh
dGEubGFzdF9vdXRfc3RyZWFtID09IE5VTEwpIHsKKwkJCQlhc29jLT5zc19kYXRhLmxhc3Rfb3V0
X3N0cmVhbSA9IFRBSUxRX0xBU1QoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsLAorCQkJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2N0cHdoZWVsX2xpc3RoZWFkKTsKKwkJCX0K
KwkJCWlmIChhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9PSBzdHJxKSB7CisJCQkJYXNv
Yy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW0gPSBOVUxMOworCQkJfQorCQl9CisJCVRBSUxRX1JF
TU9WRSgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwsIHN0cnEsIHNzX3BhcmFtcy5wcmlvLm5leHRf
c3Bva2UpOworCQlzdHJxLT5zc19wYXJhbXMucHJpby5uZXh0X3Nwb2tlLnRxZV9uZXh0ID0gTlVM
TDsKKwkJc3RycS0+c3NfcGFyYW1zLnByaW8ubmV4dF9zcG9rZS50cWVfcHJldiA9IE5VTEw7CisJ
fQorCWlmIChob2xkc19sb2NrID09IDApIHsKKwkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7
CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQqCitzY3Rw
X3NzX3ByaW9fc2VsZWN0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiBTQ1RQX1VOVVNFRCwgc3RydWN0
IHNjdHBfbmV0cyAqbmV0LAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lh
dGlvbiAqYXNvYykKK3sKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxLCAqc3RycXQsICpz
dHJxbjsKKworCWlmIChhc29jLT5zc19kYXRhLmxvY2tlZF9vbl9zZW5kaW5nKSB7CisJCXJldHVy
biAoYXNvYy0+c3NfZGF0YS5sb2NrZWRfb25fc2VuZGluZyk7CisJfQorCXN0cnF0ID0gYXNvYy0+
c3NfZGF0YS5sYXN0X291dF9zdHJlYW07CitwcmlvX2FnYWluOgorCS8qIEZpbmQgdGhlIG5leHQg
c3RyZWFtIHRvIHVzZSAqLworCWlmIChzdHJxdCA9PSBOVUxMKSB7CisJCXN0cnEgPSBUQUlMUV9G
SVJTVCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwpOworCX0gZWxzZSB7CisJCXN0cnFuID0gVEFJ
TFFfTkVYVChzdHJxdCwgc3NfcGFyYW1zLnByaW8ubmV4dF9zcG9rZSk7CisJCWlmIChzdHJxbiAh
PSBOVUxMICYmCisJCSAgICBzdHJxbi0+c3NfcGFyYW1zLnByaW8ucHJpb3JpdHkgPT0gc3RycXQt
PnNzX3BhcmFtcy5wcmlvLnByaW9yaXR5KSB7CisJCQlzdHJxID0gc3RycW47CisJCX0gZWxzZSB7
CisJCQlzdHJxID0gVEFJTFFfRklSU1QoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsKTsKKwkJfQor
CX0KKworCS8qIElmIENNVCBpcyBvZmYsIHdlIG11c3QgdmFsaWRhdGUgdGhhdAorCSAqIHRoZSBz
dHJlYW0gaW4gcXVlc3Rpb24gaGFzIHRoZSBmaXJzdAorCSAqIGl0ZW0gcG9pbnRlZCB0b3dhcmRz
IGFyZSBuZXR3b3JrIGRlc3RpbmF0aW9uCisJICogcmVxdWVzdGVkIGJ5IHRoZSBjYWxsZXIuIE5v
dGUgdGhhdCBpZiB3ZQorCSAqIHR1cm4gb3V0IHRvIGJlIGxvY2tlZCB0byBhIHN0cmVhbSAoYXNz
aWduaW5nCisJICogVFNOJ3MgdGhlbiB3ZSBtdXN0IHN0b3AsIHNpbmNlIHdlIGNhbm5vdAorCSAq
IGxvb2sgZm9yIGFub3RoZXIgc3RyZWFtIHdpdGggZGF0YSB0byBzZW5kCisJICogdG8gdGhhdCBk
ZXN0aW5hdGlvbikuIEluIENNVCdzIGNhc2UsIGJ5CisJICogc2tpcHBpbmcgdGhpcyBjaGVjaywg
d2Ugd2lsbCBzZW5kIG9uZQorCSAqIGRhdGEgcGFja2V0IHRvd2FyZHMgdGhlIHJlcXVlc3RlZCBu
ZXQuCisJICovCisJaWYgKG5ldCAhPSBOVUxMICYmIHN0cnEgIT0gTlVMTCAmJgorCSAgICBTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfY210X29uX29mZikgPT0gMCkgeworCQlpZiAoVEFJTFFfRklSU1Qo
JnN0cnEtPm91dHF1ZXVlKSAmJgorCQkgICAgVEFJTFFfRklSU1QoJnN0cnEtPm91dHF1ZXVlKS0+
bmV0ICE9IE5VTEwgJiYKKwkJICAgIFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSktPm5ldCAh
PSBuZXQpIHsKKwkJCWlmIChzdHJxID09IGFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtKSB7
CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0gZWxzZSB7CisJCQkJc3RycXQgPSBzdHJxOworCQkJ
CWdvdG8gcHJpb19hZ2FpbjsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gKHN0cnEpOworfQorCitz
dGF0aWMgaW50CitzY3RwX3NzX3ByaW9fZ2V0X3ZhbHVlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiBT
Q1RQX1VOVVNFRCwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MgU0NUUF9VTlVTRUQsCisg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsIHVpbnQx
Nl90ICp2YWx1ZSkKK3sKKwlpZiAoc3RycSA9PSBOVUxMKSB7CisJCXJldHVybiAoLTEpOworCX0K
KwkqdmFsdWUgPSBzdHJxLT5zc19wYXJhbXMucHJpby5wcmlvcml0eTsKKwlyZXR1cm4gKDEpOwor
fQorCitzdGF0aWMgaW50CitzY3RwX3NzX3ByaW9fc2V0X3ZhbHVlKHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisgICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsIHVpbnQxNl90IHZhbHVlKQoreworCWlm
IChzdHJxID09IE5VTEwpIHsKKwkJcmV0dXJuICgtMSk7CisJfQorCXN0cnEtPnNzX3BhcmFtcy5w
cmlvLnByaW9yaXR5ID0gdmFsdWU7CisJc2N0cF9zc19wcmlvX3JlbW92ZShzdGNiLCBhc29jLCBz
dHJxLCBOVUxMLCAxKTsKKwlzY3RwX3NzX3ByaW9fYWRkKHN0Y2IsIGFzb2MsIHN0cnEsIE5VTEws
IDEpOworCXJldHVybiAoMSk7Cit9CisKKy8qCisgKiBGYWlyIGJhbmR3aWR0aCBhbGdvcml0aG0u
CisgKiBNYWludGFpbnMgYW4gZXF1YWwgdGhyb3VnaHB1dCBwZXIgc3RyZWFtLgorICovCitzdGF0
aWMgdm9pZAorc2N0cF9zc19mYl9jbGVhcihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBz
Y3RwX2Fzc29jaWF0aW9uICphc29jLAorICAgICAgICAgICAgICAgICAgIGludCBjbGVhcl92YWx1
ZXMsIGludCBob2xkc19sb2NrKQoreworCWlmIChob2xkc19sb2NrID09IDApIHsKKwkJU0NUUF9U
Q0JfU0VORF9MT0NLKHN0Y2IpOworCX0KKwl3aGlsZSAoIVRBSUxRX0VNUFRZKCZhc29jLT5zc19k
YXRhLm91dC53aGVlbCkpIHsKKwkJc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycTsKKworCQlz
dHJxID0gVEFJTFFfRklSU1QoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsKTsKKwkJaWYgKGNsZWFy
X3ZhbHVlcykgeworCQkJc3RycS0+c3NfcGFyYW1zLmZiLnJvdW5kcyA9IC0xOworCQl9CisJCVRB
SUxRX1JFTU9WRSgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwsIHN0cnEsIHNzX3BhcmFtcy5mYi5u
ZXh0X3Nwb2tlKTsKKwkJc3RycS0+c3NfcGFyYW1zLmZiLm5leHRfc3Bva2UudHFlX25leHQgPSBO
VUxMOworCQlzdHJxLT5zc19wYXJhbXMuZmIubmV4dF9zcG9rZS50cWVfcHJldiA9IE5VTEw7CisJ
fQorCWFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gTlVMTDsKKwlpZiAoaG9sZHNfbG9j
ayA9PSAwKSB7CisJCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOworCX0KKwlyZXR1cm47Cit9
CisKK3N0YXRpYyB2b2lkCitzY3RwX3NzX2ZiX2luaXRfc3RyZWFtKHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSwgc3RydWN0IHNjdHBfc3RyZWFtX291
dCAqd2l0aF9zdHJxKQoreworCWlmICh3aXRoX3N0cnEgIT0gTlVMTCkgeworCQlpZiAoc3RjYi0+
YXNvYy5zc19kYXRhLmxvY2tlZF9vbl9zZW5kaW5nID09IHdpdGhfc3RycSkgeworCQkJc3RjYi0+
YXNvYy5zc19kYXRhLmxvY2tlZF9vbl9zZW5kaW5nID0gc3RycTsKKwkJfQorCQlpZiAoc3RjYi0+
YXNvYy5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9PSB3aXRoX3N0cnEpIHsKKwkJCXN0Y2ItPmFz
b2Muc3NfZGF0YS5sYXN0X291dF9zdHJlYW0gPSBzdHJxOworCQl9CisJfQorCXN0cnEtPnNzX3Bh
cmFtcy5mYi5uZXh0X3Nwb2tlLnRxZV9uZXh0ID0gTlVMTDsKKwlzdHJxLT5zc19wYXJhbXMuZmIu
bmV4dF9zcG9rZS50cWVfcHJldiA9IE5VTEw7CisJaWYgKHdpdGhfc3RycSAhPSBOVUxMKSB7CisJ
CXN0cnEtPnNzX3BhcmFtcy5mYi5yb3VuZHMgPSB3aXRoX3N0cnEtPnNzX3BhcmFtcy5mYi5yb3Vu
ZHM7CisJfSBlbHNlIHsKKwkJc3RycS0+c3NfcGFyYW1zLmZiLnJvdW5kcyA9IC0xOworCX0KKwly
ZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3NzX2ZiX2FkZChzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorICAgICAgICAgICAgICAgc3Ry
dWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSwgc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRp
bmcgKnNwIFNDVFBfVU5VU0VELAorICAgICAgICAgICAgICAgaW50IGhvbGRzX2xvY2spCit7CisJ
aWYgKGhvbGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7CisJfQor
CWlmICghVEFJTFFfRU1QVFkoJnN0cnEtPm91dHF1ZXVlKSAmJgorCSAgICAoc3RycS0+c3NfcGFy
YW1zLmZiLm5leHRfc3Bva2UudHFlX25leHQgPT0gTlVMTCkgJiYKKwkgICAgKHN0cnEtPnNzX3Bh
cmFtcy5mYi5uZXh0X3Nwb2tlLnRxZV9wcmV2ID09IE5VTEwpKSB7CisJCWlmIChzdHJxLT5zc19w
YXJhbXMuZmIucm91bmRzIDwgMCkKKwkJCXN0cnEtPnNzX3BhcmFtcy5mYi5yb3VuZHMgPSBUQUlM
UV9GSVJTVCgmc3RycS0+b3V0cXVldWUpLT5sZW5ndGg7CisJCVRBSUxRX0lOU0VSVF9UQUlMKCZh
c29jLT5zc19kYXRhLm91dC53aGVlbCwgc3RycSwgc3NfcGFyYW1zLmZiLm5leHRfc3Bva2UpOwor
CX0KKwlpZiAoaG9sZHNfbG9jayA9PSAwKSB7CisJCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2Ip
OworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3NzX2ZiX3JlbW92ZShzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorICAgICAg
ICAgICAgICAgICAgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSwgc3RydWN0IHNjdHBfc3Ry
ZWFtX3F1ZXVlX3BlbmRpbmcgKnNwIFNDVFBfVU5VU0VELAorICAgICAgICAgICAgICAgICAgaW50
IGhvbGRzX2xvY2spCit7CisJaWYgKGhvbGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQX1RDQl9TRU5E
X0xPQ0soc3RjYik7CisJfQorCS8qIFJlbW92ZSBmcm9tIHdoZWVsIGlmIHN0cmVhbSBxdWV1ZSBp
cyBlbXB0eSBhbmQgYWN0dWFsbHkgaXMgb24gdGhlIHdoZWVsICovCisJaWYgKFRBSUxRX0VNUFRZ
KCZzdHJxLT5vdXRxdWV1ZSkgJiYKKwkgICAgKHN0cnEtPnNzX3BhcmFtcy5mYi5uZXh0X3Nwb2tl
LnRxZV9uZXh0ICE9IE5VTEwgfHwKKwkgICAgc3RycS0+c3NfcGFyYW1zLmZiLm5leHRfc3Bva2Uu
dHFlX3ByZXYgIT0gTlVMTCkpIHsKKwkJaWYgKGFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFt
ID09IHN0cnEpIHsKKwkJCWFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gVEFJTFFfUFJF
Vihhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSwgc2N0cHdoZWVsX2xpc3RoZWFkLAorCQkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc19wYXJhbXMuZmIubmV4dF9zcG9r
ZSk7CisJCQlpZiAoYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW0gPT0gTlVMTCkgeworCQkJ
CWFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gVEFJTFFfTEFTVCgmYXNvYy0+c3NfZGF0
YS5vdXQud2hlZWwsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3Rw
d2hlZWxfbGlzdGhlYWQpOworCQkJfQorCQkJaWYgKGFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3Ry
ZWFtID09IHN0cnEpIHsKKwkJCQlhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9IE5VTEw7
CisJCQl9CisJCX0KKwkJVEFJTFFfUkVNT1ZFKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCwgc3Ry
cSwgc3NfcGFyYW1zLmZiLm5leHRfc3Bva2UpOworCQlzdHJxLT5zc19wYXJhbXMuZmIubmV4dF9z
cG9rZS50cWVfbmV4dCA9IE5VTEw7CisJCXN0cnEtPnNzX3BhcmFtcy5mYi5uZXh0X3Nwb2tlLnRx
ZV9wcmV2ID0gTlVMTDsKKwl9CisJaWYgKGhvbGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQX1RDQl9T
RU5EX1VOTE9DSyhzdGNiKTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgc3RydWN0IHNjdHBf
c3RyZWFtX291dCoKK3NjdHBfc3NfZmJfc2VsZWN0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiBTQ1RQ
X1VOVVNFRCwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LAorICAgICAgICAgICAgICAgICAgc3RydWN0
IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCit7CisJc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3Ry
cSA9IE5VTEwsICpzdHJxdDsKKworCWlmIChhc29jLT5zc19kYXRhLmxvY2tlZF9vbl9zZW5kaW5n
KSB7CisJCXJldHVybiAoYXNvYy0+c3NfZGF0YS5sb2NrZWRfb25fc2VuZGluZyk7CisJfQorCWlm
IChhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9PSBOVUxMIHx8CisJICAgIFRBSUxRX0ZJ
UlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCkgPT0gVEFJTFFfTEFTVCgmYXNvYy0+c3NfZGF0
YS5vdXQud2hlZWwsIHNjdHB3aGVlbF9saXN0aGVhZCkpIHsKKwkJc3RycXQgPSBUQUlMUV9GSVJT
VCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwpOworCX0gZWxzZSB7CisJCXN0cnF0ID0gVEFJTFFf
TkVYVChhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSwgc3NfcGFyYW1zLmZiLm5leHRfc3Bv
a2UpOworCX0KKwlkbyB7CisJCWlmICgoc3RycXQgIT0gTlVMTCkgJiYKKwkJICAgICgoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2NtdF9vbl9vZmYpID4gMCkgfHwKKwkJICAgICAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2NtdF9vbl9vZmYpID09IDAgJiYKKwkJICAgICAgKG5ldCA9PSBOVUxMIHx8IChU
QUlMUV9GSVJTVCgmc3RycXQtPm91dHF1ZXVlKSAmJiBUQUlMUV9GSVJTVCgmc3RycXQtPm91dHF1
ZXVlKS0+bmV0ID09IE5VTEwpIHx8CisJCSAgICAgICAobmV0ICE9IE5VTEwgJiYgVEFJTFFfRklS
U1QoJnN0cnF0LT5vdXRxdWV1ZSkgJiYgVEFJTFFfRklSU1QoJnN0cnF0LT5vdXRxdWV1ZSktPm5l
dCAhPSBOVUxMICYmCisJCSAgICAgICAgVEFJTFFfRklSU1QoJnN0cnF0LT5vdXRxdWV1ZSktPm5l
dCA9PSBuZXQpKSkpKSB7CisJCQlpZiAoKHN0cnF0LT5zc19wYXJhbXMuZmIucm91bmRzID49IDAp
ICYmIChzdHJxID09IE5VTEwgfHwKKwkJCQlzdHJxdC0+c3NfcGFyYW1zLmZiLnJvdW5kcyA8IHN0
cnEtPnNzX3BhcmFtcy5mYi5yb3VuZHMpKSB7CisJCQkJc3RycSA9IHN0cnF0OworCQkJfQorCQl9
CisJCWlmIChzdHJxdCAhPSBOVUxMKSB7CisJCQlzdHJxdCA9IFRBSUxRX05FWFQoc3RycXQsIHNz
X3BhcmFtcy5mYi5uZXh0X3Nwb2tlKTsKKwkJfSBlbHNlIHsKKwkJCXN0cnF0ID0gVEFJTFFfRklS
U1QoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsKTsKKwkJfQorCX0gd2hpbGUgKHN0cnF0ICE9IHN0
cnEpOworCXJldHVybiAoc3RycSk7Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3NzX2ZiX3NjaGVk
dWxlZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCBTQ1RQX1VO
VVNFRCwKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29j
LCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxLAorICAgICAgICAgICAgICAgICAgICAgaW50
IG1vdmVkX2hvd19tdWNoIFNDVFBfVU5VU0VEKQoreworCXN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1
ZV9wZW5kaW5nICpzcDsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxdDsKKwlpbnQgc3Vi
dHJhY3Q7CisKKwlpZiAoc3RjYi0+YXNvYy5pZGF0YV9zdXBwb3J0ZWQgPT0gMCkgeworCQlzcCA9
IFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSk7CisJCWlmICgoc3AgIT0gTlVMTCkgJiYgKHNw
LT5zb21lX3Rha2VuID09IDEpKSB7CisJCQlzdGNiLT5hc29jLnNzX2RhdGEubG9ja2VkX29uX3Nl
bmRpbmcgPSBzdHJxOworCQl9IGVsc2UgeworCQkJc3RjYi0+YXNvYy5zc19kYXRhLmxvY2tlZF9v
bl9zZW5kaW5nID0gTlVMTDsKKwkJfQorCX0gZWxzZSB7CisJCXN0Y2ItPmFzb2Muc3NfZGF0YS5s
b2NrZWRfb25fc2VuZGluZyA9IE5VTEw7CisJfQorCXN1YnRyYWN0ID0gc3RycS0+c3NfcGFyYW1z
LmZiLnJvdW5kczsKKwlUQUlMUV9GT1JFQUNIKHN0cnF0LCAmYXNvYy0+c3NfZGF0YS5vdXQud2hl
ZWwsIHNzX3BhcmFtcy5mYi5uZXh0X3Nwb2tlKSB7CisJCXN0cnF0LT5zc19wYXJhbXMuZmIucm91
bmRzIC09IHN1YnRyYWN0OworCQlpZiAoc3RycXQtPnNzX3BhcmFtcy5mYi5yb3VuZHMgPCAwKQor
CQkJc3RycXQtPnNzX3BhcmFtcy5mYi5yb3VuZHMgPSAwOworCX0KKwlpZiAoVEFJTFFfRklSU1Qo
JnN0cnEtPm91dHF1ZXVlKSkgeworCQlzdHJxLT5zc19wYXJhbXMuZmIucm91bmRzID0gVEFJTFFf
RklSU1QoJnN0cnEtPm91dHF1ZXVlKS0+bGVuZ3RoOworCX0gZWxzZSB7CisJCXN0cnEtPnNzX3Bh
cmFtcy5mYi5yb3VuZHMgPSAtMTsKKwl9CisJYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW0g
PSBzdHJxOworCXJldHVybjsKK30KKworLyoKKyAqIEZpcnN0LWNvbWUsIGZpcnN0LXNlcnZlIGFs
Z29yaXRobS4KKyAqIE1haW50YWlucyB0aGUgb3JkZXIgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0
aW9uLgorICovCitzdGF0aWMgdm9pZAorc2N0cF9zc19mY2ZzX2FkZChzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorICAgICAgICAgICAgICAgICBz
dHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxIFNDVFBfVU5VU0VELAorICAgICAgICAgICAgICAg
ICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3AsIGludCBob2xkc19sb2NrKTsK
Kworc3RhdGljIHZvaWQKK3NjdHBfc3NfZmNmc19pbml0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwg
c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisgICAgICAgICAgICAgICAgICBpbnQgaG9s
ZHNfbG9jaykKK3sKKwl1aW50MzJfdCB4LCBuID0gMCwgYWRkX21vcmUgPSAxOworCXN0cnVjdCBz
Y3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcDsKKwl1aW50MTZfdCBpOworCisJaWYgKGhvbGRz
X2xvY2sgPT0gMCkgeworCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7CisJfQorCVRBSUxRX0lO
SVQoJmFzb2MtPnNzX2RhdGEub3V0Lmxpc3QpOworCS8qCisJICogSWYgdGhlcmUgaXMgZGF0YSBp
biB0aGUgc3RyZWFtIHF1ZXVlcyBhbHJlYWR5LAorCSAqIHRoZSBzY2hlZHVsZXIgb2YgYW4gZXhp
c3RpbmcgYXNzb2NpYXRpb24gaGFzCisJICogYmVlbiBjaGFuZ2VkLiBXZSBjYW4gb25seSBjeWNs
ZSB0aHJvdWdoIHRoZQorCSAqIHN0cmVhbSBxdWV1ZXMgYW5kIGFkZCBldmVyeXRoaW5nIHRvIHRo
ZSBGQ0ZTCisJICogcXVldWUuCisJICovCisJd2hpbGUgKGFkZF9tb3JlKSB7CisJCWFkZF9tb3Jl
ID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OyBpKyspIHsK
KwkJCXNwID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2Muc3RybW91dFtpXS5vdXRxdWV1ZSk7CisJ
CQl4ID0gMDsKKwkJCS8qIEZpbmQgbi4gbWVzc2FnZSBpbiBjdXJyZW50IHN0cmVhbSBxdWV1ZSAq
LworCQkJd2hpbGUgKHNwICE9IE5VTEwgJiYgeCA8IG4pIHsKKwkJCQlzcCA9IFRBSUxRX05FWFQo
c3AsIG5leHQpOworCQkJCXgrKzsKKwkJCX0KKwkJCWlmIChzcCAhPSBOVUxMKSB7CisJCQkJc2N0
cF9zc19mY2ZzX2FkZChzdGNiLCAmc3RjYi0+YXNvYywgJnN0Y2ItPmFzb2Muc3RybW91dFtpXSwg
c3AsIDEpOworCQkJCWFkZF9tb3JlID0gMTsKKwkJCX0KKwkJfQorCQluKys7CisJfQorCWlmICho
b2xkc19sb2NrID09IDApIHsKKwkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJfQorCXJl
dHVybjsKK30KKworc3RhdGljIHZvaWQKK3NjdHBfc3NfZmNmc19jbGVhcihzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorICAgICAgICAgICAgICAg
ICAgIGludCBjbGVhcl92YWx1ZXMsIGludCBob2xkc19sb2NrKQoreworCXN0cnVjdCBzY3RwX3N0
cmVhbV9xdWV1ZV9wZW5kaW5nICpzcDsKKworCWlmIChjbGVhcl92YWx1ZXMpIHsKKwkJaWYgKGhv
bGRzX2xvY2sgPT0gMCkgeworCQkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOworCQl9CisJCXdo
aWxlICghVEFJTFFfRU1QVFkoJmFzb2MtPnNzX2RhdGEub3V0Lmxpc3QpKSB7CisJCQlzcCA9IFRB
SUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC5saXN0KTsKKwkJCVRBSUxRX1JFTU9WRSgmYXNv
Yy0+c3NfZGF0YS5vdXQubGlzdCwgc3AsIHNzX25leHQpOworCQkJc3AtPnNzX25leHQudHFlX25l
eHQgPSBOVUxMOworCQkJc3AtPnNzX25leHQudHFlX3ByZXYgPSBOVUxMOworCQl9CisJCWlmICho
b2xkc19sb2NrID09IDApIHsKKwkJCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOworCQl9CisJ
fQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK3NjdHBfc3NfZmNmc19pbml0X3N0cmVhbShz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsIHN0cnVj
dCBzY3RwX3N0cmVhbV9vdXQgKndpdGhfc3RycSkKK3sKKwlpZiAod2l0aF9zdHJxICE9IE5VTEwp
IHsKKwkJaWYgKHN0Y2ItPmFzb2Muc3NfZGF0YS5sb2NrZWRfb25fc2VuZGluZyA9PSB3aXRoX3N0
cnEpIHsKKwkJCXN0Y2ItPmFzb2Muc3NfZGF0YS5sb2NrZWRfb25fc2VuZGluZyA9IHN0cnE7CisJ
CX0KKwkJaWYgKHN0Y2ItPmFzb2Muc3NfZGF0YS5sYXN0X291dF9zdHJlYW0gPT0gd2l0aF9zdHJx
KSB7CisJCQlzdGNiLT5hc29jLnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gc3RycTsKKwkJfQor
CX0KKwlzdHJxLT5zc19wYXJhbXMuZmIubmV4dF9zcG9rZS50cWVfbmV4dCA9IE5VTEw7CisJc3Ry
cS0+c3NfcGFyYW1zLmZiLm5leHRfc3Bva2UudHFlX3ByZXYgPSBOVUxMOworCXJldHVybjsKK30K
Kworc3RhdGljIHZvaWQKK3NjdHBfc3NfZmNmc19hZGQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBz
dHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKyAgICAgICAgICAgICAgICAgc3RydWN0IHNj
dHBfc3RyZWFtX291dCAqc3RycSBTQ1RQX1VOVVNFRCwgc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVl
X3BlbmRpbmcgKnNwLAorICAgICAgICAgICAgICAgICBpbnQgaG9sZHNfbG9jaykKK3sKKwlpZiAo
aG9sZHNfbG9jayA9PSAwKSB7CisJCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKKwl9CisJaWYg
KHNwICYmIChzcC0+c3NfbmV4dC50cWVfbmV4dCA9PSBOVUxMKSAmJgorCSAgICAoc3AtPnNzX25l
eHQudHFlX3ByZXYgPT0gTlVMTCkpIHsKKwkJVEFJTFFfSU5TRVJUX1RBSUwoJmFzb2MtPnNzX2Rh
dGEub3V0Lmxpc3QsIHNwLCBzc19uZXh0KTsKKwl9CisJaWYgKGhvbGRzX2xvY2sgPT0gMCkgewor
CQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMg
aW50CitzY3RwX3NzX2ZjZnNfaXNfZW1wdHkoc3RydWN0IHNjdHBfdGNiICpzdGNiIFNDVFBfVU5V
U0VELCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKK3sKKwlpZiAoVEFJTFFfRU1QVFko
JmFzb2MtPnNzX2RhdGEub3V0Lmxpc3QpKSB7CisJCXJldHVybiAoMSk7CisJfSBlbHNlIHsKKwkJ
cmV0dXJuICgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3NzX2ZjZnNfcmVtb3ZlKHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEgU0NUUF9VTlVTRUQs
IHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCwKKyAgICAgICAgICAgICAgICAg
ICAgaW50IGhvbGRzX2xvY2spCit7CisJaWYgKGhvbGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQX1RD
Ql9TRU5EX0xPQ0soc3RjYik7CisJfQorCWlmIChzcCAmJgorCSAgICAoKHNwLT5zc19uZXh0LnRx
ZV9uZXh0ICE9IE5VTEwpIHx8CisJICAgICAoc3AtPnNzX25leHQudHFlX3ByZXYgIT0gTlVMTCkp
KSB7CisJCVRBSUxRX1JFTU9WRSgmYXNvYy0+c3NfZGF0YS5vdXQubGlzdCwgc3AsIHNzX25leHQp
OworCQlzcC0+c3NfbmV4dC50cWVfbmV4dCA9IE5VTEw7CisJCXNwLT5zc19uZXh0LnRxZV9wcmV2
ID0gTlVMTDsKKwl9CisJaWYgKGhvbGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQX1RDQl9TRU5EX1VO
TE9DSyhzdGNiKTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgc3RydWN0IHNjdHBfc3RyZWFt
X291dCAqCitzY3RwX3NzX2ZjZnNfc2VsZWN0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiBTQ1RQX1VO
VVNFRCwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
c2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKK3sKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJx
OworCXN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcDsKKworCWlmIChhc29jLT5z
c19kYXRhLmxvY2tlZF9vbl9zZW5kaW5nKSB7CisJCXJldHVybiAoYXNvYy0+c3NfZGF0YS5sb2Nr
ZWRfb25fc2VuZGluZyk7CisJfQorCXNwID0gVEFJTFFfRklSU1QoJmFzb2MtPnNzX2RhdGEub3V0
Lmxpc3QpOworZGVmYXVsdF9hZ2FpbjoKKwlpZiAoc3AgIT0gTlVMTCkgeworCQlzdHJxID0gJmFz
b2MtPnN0cm1vdXRbc3AtPnNpZF07CisJfSBlbHNlIHsKKwkJc3RycSA9IE5VTEw7CisJfQorCisJ
LyoKKwkgKiBJZiBDTVQgaXMgb2ZmLCB3ZSBtdXN0IHZhbGlkYXRlIHRoYXQKKwkgKiB0aGUgc3Ry
ZWFtIGluIHF1ZXN0aW9uIGhhcyB0aGUgZmlyc3QKKwkgKiBpdGVtIHBvaW50ZWQgdG93YXJkcyBh
cmUgbmV0d29yayBkZXN0aW5hdGlvbgorCSAqIHJlcXVlc3RlZCBieSB0aGUgY2FsbGVyLiBOb3Rl
IHRoYXQgaWYgd2UKKwkgKiB0dXJuIG91dCB0byBiZSBsb2NrZWQgdG8gYSBzdHJlYW0gKGFzc2ln
bmluZworCSAqIFRTTidzIHRoZW4gd2UgbXVzdCBzdG9wLCBzaW5jZSB3ZSBjYW5ub3QKKwkgKiBs
b29rIGZvciBhbm90aGVyIHN0cmVhbSB3aXRoIGRhdGEgdG8gc2VuZAorCSAqIHRvIHRoYXQgZGVz
dGluYXRpb24pLiBJbiBDTVQncyBjYXNlLCBieQorCSAqIHNraXBwaW5nIHRoaXMgY2hlY2ssIHdl
IHdpbGwgc2VuZCBvbmUKKwkgKiBkYXRhIHBhY2tldCB0b3dhcmRzIHRoZSByZXF1ZXN0ZWQgbmV0
LgorCSAqLworCWlmIChuZXQgIT0gTlVMTCAmJiBzdHJxICE9IE5VTEwgJiYKKwkgICAgU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2NtdF9vbl9vZmYpID09IDApIHsKKwkJaWYgKFRBSUxRX0ZJUlNUKCZz
dHJxLT5vdXRxdWV1ZSkgJiYKKwkJICAgIFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSktPm5l
dCAhPSBOVUxMICYmCisJCSAgICBUQUlMUV9GSVJTVCgmc3RycS0+b3V0cXVldWUpLT5uZXQgIT0g
bmV0KSB7CisJCQlzcCA9IFRBSUxRX05FWFQoc3AsIHNzX25leHQpOworCQkJZ290byBkZWZhdWx0
X2FnYWluOworCQl9CisJfQorCXJldHVybiAoc3RycSk7Cit9CisKK2NvbnN0IHN0cnVjdCBzY3Rw
X3NzX2Z1bmN0aW9ucyBzY3RwX3NzX2Z1bmN0aW9uc1tdID0geworLyogU0NUUF9TU19ERUZBVUxU
ICovCit7CisjaWYgZGVmaW5lZChfV0lOMzIpCisJc2N0cF9zc19kZWZhdWx0X2luaXQsCisJc2N0
cF9zc19kZWZhdWx0X2NsZWFyLAorCXNjdHBfc3NfZGVmYXVsdF9pbml0X3N0cmVhbSwKKwlzY3Rw
X3NzX2RlZmF1bHRfYWRkLAorCXNjdHBfc3NfZGVmYXVsdF9pc19lbXB0eSwKKwlzY3RwX3NzX2Rl
ZmF1bHRfcmVtb3ZlLAorCXNjdHBfc3NfZGVmYXVsdF9zZWxlY3QsCisJc2N0cF9zc19kZWZhdWx0
X3NjaGVkdWxlZCwKKwlzY3RwX3NzX2RlZmF1bHRfcGFja2V0X2RvbmUsCisJc2N0cF9zc19kZWZh
dWx0X2dldF92YWx1ZSwKKwlzY3RwX3NzX2RlZmF1bHRfc2V0X3ZhbHVlLAorCXNjdHBfc3NfZGVm
YXVsdF9pc191c2VyX21zZ3NfaW5jb21wbGV0ZQorI2Vsc2UKKwkuc2N0cF9zc19pbml0ID0gc2N0
cF9zc19kZWZhdWx0X2luaXQsCisJLnNjdHBfc3NfY2xlYXIgPSBzY3RwX3NzX2RlZmF1bHRfY2xl
YXIsCisJLnNjdHBfc3NfaW5pdF9zdHJlYW0gPSBzY3RwX3NzX2RlZmF1bHRfaW5pdF9zdHJlYW0s
CisJLnNjdHBfc3NfYWRkX3RvX3N0cmVhbSA9IHNjdHBfc3NfZGVmYXVsdF9hZGQsCisJLnNjdHBf
c3NfaXNfZW1wdHkgPSBzY3RwX3NzX2RlZmF1bHRfaXNfZW1wdHksCisJLnNjdHBfc3NfcmVtb3Zl
X2Zyb21fc3RyZWFtID0gc2N0cF9zc19kZWZhdWx0X3JlbW92ZSwKKwkuc2N0cF9zc19zZWxlY3Rf
c3RyZWFtID0gc2N0cF9zc19kZWZhdWx0X3NlbGVjdCwKKwkuc2N0cF9zc19zY2hlZHVsZWQgPSBz
Y3RwX3NzX2RlZmF1bHRfc2NoZWR1bGVkLAorCS5zY3RwX3NzX3BhY2tldF9kb25lID0gc2N0cF9z
c19kZWZhdWx0X3BhY2tldF9kb25lLAorCS5zY3RwX3NzX2dldF92YWx1ZSA9IHNjdHBfc3NfZGVm
YXVsdF9nZXRfdmFsdWUsCisJLnNjdHBfc3Nfc2V0X3ZhbHVlID0gc2N0cF9zc19kZWZhdWx0X3Nl
dF92YWx1ZSwKKwkuc2N0cF9zc19pc191c2VyX21zZ3NfaW5jb21wbGV0ZSA9IHNjdHBfc3NfZGVm
YXVsdF9pc191c2VyX21zZ3NfaW5jb21wbGV0ZQorI2VuZGlmCit9LAorLyogU0NUUF9TU19ST1VO
RF9ST0JJTiAqLworeworI2lmIGRlZmluZWQoX1dJTjMyKQorCXNjdHBfc3NfZGVmYXVsdF9pbml0
LAorCXNjdHBfc3NfZGVmYXVsdF9jbGVhciwKKwlzY3RwX3NzX2RlZmF1bHRfaW5pdF9zdHJlYW0s
CisJc2N0cF9zc19ycl9hZGQsCisJc2N0cF9zc19kZWZhdWx0X2lzX2VtcHR5LAorCXNjdHBfc3Nf
ZGVmYXVsdF9yZW1vdmUsCisJc2N0cF9zc19kZWZhdWx0X3NlbGVjdCwKKwlzY3RwX3NzX2RlZmF1
bHRfc2NoZWR1bGVkLAorCXNjdHBfc3NfZGVmYXVsdF9wYWNrZXRfZG9uZSwKKwlzY3RwX3NzX2Rl
ZmF1bHRfZ2V0X3ZhbHVlLAorCXNjdHBfc3NfZGVmYXVsdF9zZXRfdmFsdWUsCisJc2N0cF9zc19k
ZWZhdWx0X2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlCisjZWxzZQorCS5zY3RwX3NzX2luaXQgPSBz
Y3RwX3NzX2RlZmF1bHRfaW5pdCwKKwkuc2N0cF9zc19jbGVhciA9IHNjdHBfc3NfZGVmYXVsdF9j
bGVhciwKKwkuc2N0cF9zc19pbml0X3N0cmVhbSA9IHNjdHBfc3NfZGVmYXVsdF9pbml0X3N0cmVh
bSwKKwkuc2N0cF9zc19hZGRfdG9fc3RyZWFtID0gc2N0cF9zc19ycl9hZGQsCisJLnNjdHBfc3Nf
aXNfZW1wdHkgPSBzY3RwX3NzX2RlZmF1bHRfaXNfZW1wdHksCisJLnNjdHBfc3NfcmVtb3ZlX2Zy
b21fc3RyZWFtID0gc2N0cF9zc19kZWZhdWx0X3JlbW92ZSwKKwkuc2N0cF9zc19zZWxlY3Rfc3Ry
ZWFtID0gc2N0cF9zc19kZWZhdWx0X3NlbGVjdCwKKwkuc2N0cF9zc19zY2hlZHVsZWQgPSBzY3Rw
X3NzX2RlZmF1bHRfc2NoZWR1bGVkLAorCS5zY3RwX3NzX3BhY2tldF9kb25lID0gc2N0cF9zc19k
ZWZhdWx0X3BhY2tldF9kb25lLAorCS5zY3RwX3NzX2dldF92YWx1ZSA9IHNjdHBfc3NfZGVmYXVs
dF9nZXRfdmFsdWUsCisJLnNjdHBfc3Nfc2V0X3ZhbHVlID0gc2N0cF9zc19kZWZhdWx0X3NldF92
YWx1ZSwKKwkuc2N0cF9zc19pc191c2VyX21zZ3NfaW5jb21wbGV0ZSA9IHNjdHBfc3NfZGVmYXVs
dF9pc191c2VyX21zZ3NfaW5jb21wbGV0ZQorI2VuZGlmCit9LAorLyogU0NUUF9TU19ST1VORF9S
T0JJTl9QQUNLRVQgKi8KK3sKKyNpZiBkZWZpbmVkKF9XSU4zMikKKwlzY3RwX3NzX2RlZmF1bHRf
aW5pdCwKKwlzY3RwX3NzX2RlZmF1bHRfY2xlYXIsCisJc2N0cF9zc19kZWZhdWx0X2luaXRfc3Ry
ZWFtLAorCXNjdHBfc3NfcnJfYWRkLAorCXNjdHBfc3NfZGVmYXVsdF9pc19lbXB0eSwKKwlzY3Rw
X3NzX2RlZmF1bHRfcmVtb3ZlLAorCXNjdHBfc3NfcnJwX3NlbGVjdCwKKwlzY3RwX3NzX2RlZmF1
bHRfc2NoZWR1bGVkLAorCXNjdHBfc3NfcnJwX3BhY2tldF9kb25lLAorCXNjdHBfc3NfZGVmYXVs
dF9nZXRfdmFsdWUsCisJc2N0cF9zc19kZWZhdWx0X3NldF92YWx1ZSwKKwlzY3RwX3NzX2RlZmF1
bHRfaXNfdXNlcl9tc2dzX2luY29tcGxldGUKKyNlbHNlCisJLnNjdHBfc3NfaW5pdCA9IHNjdHBf
c3NfZGVmYXVsdF9pbml0LAorCS5zY3RwX3NzX2NsZWFyID0gc2N0cF9zc19kZWZhdWx0X2NsZWFy
LAorCS5zY3RwX3NzX2luaXRfc3RyZWFtID0gc2N0cF9zc19kZWZhdWx0X2luaXRfc3RyZWFtLAor
CS5zY3RwX3NzX2FkZF90b19zdHJlYW0gPSBzY3RwX3NzX3JyX2FkZCwKKwkuc2N0cF9zc19pc19l
bXB0eSA9IHNjdHBfc3NfZGVmYXVsdF9pc19lbXB0eSwKKwkuc2N0cF9zc19yZW1vdmVfZnJvbV9z
dHJlYW0gPSBzY3RwX3NzX2RlZmF1bHRfcmVtb3ZlLAorCS5zY3RwX3NzX3NlbGVjdF9zdHJlYW0g
PSBzY3RwX3NzX3JycF9zZWxlY3QsCisJLnNjdHBfc3Nfc2NoZWR1bGVkID0gc2N0cF9zc19kZWZh
dWx0X3NjaGVkdWxlZCwKKwkuc2N0cF9zc19wYWNrZXRfZG9uZSA9IHNjdHBfc3NfcnJwX3BhY2tl
dF9kb25lLAorCS5zY3RwX3NzX2dldF92YWx1ZSA9IHNjdHBfc3NfZGVmYXVsdF9nZXRfdmFsdWUs
CisJLnNjdHBfc3Nfc2V0X3ZhbHVlID0gc2N0cF9zc19kZWZhdWx0X3NldF92YWx1ZSwKKwkuc2N0
cF9zc19pc191c2VyX21zZ3NfaW5jb21wbGV0ZSA9IHNjdHBfc3NfZGVmYXVsdF9pc191c2VyX21z
Z3NfaW5jb21wbGV0ZQorI2VuZGlmCit9LAorLyogU0NUUF9TU19QUklPUklUWSAqLworeworI2lm
IGRlZmluZWQoX1dJTjMyKQorCXNjdHBfc3NfZGVmYXVsdF9pbml0LAorCXNjdHBfc3NfcHJpb19j
bGVhciwKKwlzY3RwX3NzX3ByaW9faW5pdF9zdHJlYW0sCisJc2N0cF9zc19wcmlvX2FkZCwKKwlz
Y3RwX3NzX2RlZmF1bHRfaXNfZW1wdHksCisJc2N0cF9zc19wcmlvX3JlbW92ZSwKKwlzY3RwX3Nz
X3ByaW9fc2VsZWN0LAorCXNjdHBfc3NfZGVmYXVsdF9zY2hlZHVsZWQsCisJc2N0cF9zc19kZWZh
dWx0X3BhY2tldF9kb25lLAorCXNjdHBfc3NfcHJpb19nZXRfdmFsdWUsCisJc2N0cF9zc19wcmlv
X3NldF92YWx1ZSwKKwlzY3RwX3NzX2RlZmF1bHRfaXNfdXNlcl9tc2dzX2luY29tcGxldGUKKyNl
bHNlCisJLnNjdHBfc3NfaW5pdCA9IHNjdHBfc3NfZGVmYXVsdF9pbml0LAorCS5zY3RwX3NzX2Ns
ZWFyID0gc2N0cF9zc19wcmlvX2NsZWFyLAorCS5zY3RwX3NzX2luaXRfc3RyZWFtID0gc2N0cF9z
c19wcmlvX2luaXRfc3RyZWFtLAorCS5zY3RwX3NzX2FkZF90b19zdHJlYW0gPSBzY3RwX3NzX3By
aW9fYWRkLAorCS5zY3RwX3NzX2lzX2VtcHR5ID0gc2N0cF9zc19kZWZhdWx0X2lzX2VtcHR5LAor
CS5zY3RwX3NzX3JlbW92ZV9mcm9tX3N0cmVhbSA9IHNjdHBfc3NfcHJpb19yZW1vdmUsCisJLnNj
dHBfc3Nfc2VsZWN0X3N0cmVhbSA9IHNjdHBfc3NfcHJpb19zZWxlY3QsCisJLnNjdHBfc3Nfc2No
ZWR1bGVkID0gc2N0cF9zc19kZWZhdWx0X3NjaGVkdWxlZCwKKwkuc2N0cF9zc19wYWNrZXRfZG9u
ZSA9IHNjdHBfc3NfZGVmYXVsdF9wYWNrZXRfZG9uZSwKKwkuc2N0cF9zc19nZXRfdmFsdWUgPSBz
Y3RwX3NzX3ByaW9fZ2V0X3ZhbHVlLAorCS5zY3RwX3NzX3NldF92YWx1ZSA9IHNjdHBfc3NfcHJp
b19zZXRfdmFsdWUsCisJLnNjdHBfc3NfaXNfdXNlcl9tc2dzX2luY29tcGxldGUgPSBzY3RwX3Nz
X2RlZmF1bHRfaXNfdXNlcl9tc2dzX2luY29tcGxldGUKKyNlbmRpZgorfSwKKy8qIFNDVFBfU1Nf
RkFJUl9CQU5EV0lUSCAqLworeworI2lmIGRlZmluZWQoX1dJTjMyKQorCXNjdHBfc3NfZGVmYXVs
dF9pbml0LAorCXNjdHBfc3NfZmJfY2xlYXIsCisJc2N0cF9zc19mYl9pbml0X3N0cmVhbSwKKwlz
Y3RwX3NzX2ZiX2FkZCwKKwlzY3RwX3NzX2RlZmF1bHRfaXNfZW1wdHksCisJc2N0cF9zc19mYl9y
ZW1vdmUsCisJc2N0cF9zc19mYl9zZWxlY3QsCisJc2N0cF9zc19mYl9zY2hlZHVsZWQsCisJc2N0
cF9zc19kZWZhdWx0X3BhY2tldF9kb25lLAorCXNjdHBfc3NfZGVmYXVsdF9nZXRfdmFsdWUsCisJ
c2N0cF9zc19kZWZhdWx0X3NldF92YWx1ZSwKKwlzY3RwX3NzX2RlZmF1bHRfaXNfdXNlcl9tc2dz
X2luY29tcGxldGUKKyNlbHNlCisJLnNjdHBfc3NfaW5pdCA9IHNjdHBfc3NfZGVmYXVsdF9pbml0
LAorCS5zY3RwX3NzX2NsZWFyID0gc2N0cF9zc19mYl9jbGVhciwKKwkuc2N0cF9zc19pbml0X3N0
cmVhbSA9IHNjdHBfc3NfZmJfaW5pdF9zdHJlYW0sCisJLnNjdHBfc3NfYWRkX3RvX3N0cmVhbSA9
IHNjdHBfc3NfZmJfYWRkLAorCS5zY3RwX3NzX2lzX2VtcHR5ID0gc2N0cF9zc19kZWZhdWx0X2lz
X2VtcHR5LAorCS5zY3RwX3NzX3JlbW92ZV9mcm9tX3N0cmVhbSA9IHNjdHBfc3NfZmJfcmVtb3Zl
LAorCS5zY3RwX3NzX3NlbGVjdF9zdHJlYW0gPSBzY3RwX3NzX2ZiX3NlbGVjdCwKKwkuc2N0cF9z
c19zY2hlZHVsZWQgPSBzY3RwX3NzX2ZiX3NjaGVkdWxlZCwKKwkuc2N0cF9zc19wYWNrZXRfZG9u
ZSA9IHNjdHBfc3NfZGVmYXVsdF9wYWNrZXRfZG9uZSwKKwkuc2N0cF9zc19nZXRfdmFsdWUgPSBz
Y3RwX3NzX2RlZmF1bHRfZ2V0X3ZhbHVlLAorCS5zY3RwX3NzX3NldF92YWx1ZSA9IHNjdHBfc3Nf
ZGVmYXVsdF9zZXRfdmFsdWUsCisJLnNjdHBfc3NfaXNfdXNlcl9tc2dzX2luY29tcGxldGUgPSBz
Y3RwX3NzX2RlZmF1bHRfaXNfdXNlcl9tc2dzX2luY29tcGxldGUKKyNlbmRpZgorfSwKKy8qIFND
VFBfU1NfRklSU1RfQ09NRSAqLworeworI2lmIGRlZmluZWQoX1dJTjMyKQorCXNjdHBfc3NfZmNm
c19pbml0LAorCXNjdHBfc3NfZmNmc19jbGVhciwKKwlzY3RwX3NzX2ZjZnNfaW5pdF9zdHJlYW0s
CisJc2N0cF9zc19mY2ZzX2FkZCwKKwlzY3RwX3NzX2ZjZnNfaXNfZW1wdHksCisJc2N0cF9zc19m
Y2ZzX3JlbW92ZSwKKwlzY3RwX3NzX2ZjZnNfc2VsZWN0LAorCXNjdHBfc3NfZGVmYXVsdF9zY2hl
ZHVsZWQsCisJc2N0cF9zc19kZWZhdWx0X3BhY2tldF9kb25lLAorCXNjdHBfc3NfZGVmYXVsdF9n
ZXRfdmFsdWUsCisJc2N0cF9zc19kZWZhdWx0X3NldF92YWx1ZSwKKwlzY3RwX3NzX2RlZmF1bHRf
aXNfdXNlcl9tc2dzX2luY29tcGxldGUKKyNlbHNlCisJLnNjdHBfc3NfaW5pdCA9IHNjdHBfc3Nf
ZmNmc19pbml0LAorCS5zY3RwX3NzX2NsZWFyID0gc2N0cF9zc19mY2ZzX2NsZWFyLAorCS5zY3Rw
X3NzX2luaXRfc3RyZWFtID0gc2N0cF9zc19mY2ZzX2luaXRfc3RyZWFtLAorCS5zY3RwX3NzX2Fk
ZF90b19zdHJlYW0gPSBzY3RwX3NzX2ZjZnNfYWRkLAorCS5zY3RwX3NzX2lzX2VtcHR5ID0gc2N0
cF9zc19mY2ZzX2lzX2VtcHR5LAorCS5zY3RwX3NzX3JlbW92ZV9mcm9tX3N0cmVhbSA9IHNjdHBf
c3NfZmNmc19yZW1vdmUsCisJLnNjdHBfc3Nfc2VsZWN0X3N0cmVhbSA9IHNjdHBfc3NfZmNmc19z
ZWxlY3QsCisJLnNjdHBfc3Nfc2NoZWR1bGVkID0gc2N0cF9zc19kZWZhdWx0X3NjaGVkdWxlZCwK
Kwkuc2N0cF9zc19wYWNrZXRfZG9uZSA9IHNjdHBfc3NfZGVmYXVsdF9wYWNrZXRfZG9uZSwKKwku
c2N0cF9zc19nZXRfdmFsdWUgPSBzY3RwX3NzX2RlZmF1bHRfZ2V0X3ZhbHVlLAorCS5zY3RwX3Nz
X3NldF92YWx1ZSA9IHNjdHBfc3NfZGVmYXVsdF9zZXRfdmFsdWUsCisJLnNjdHBfc3NfaXNfdXNl
cl9tc2dzX2luY29tcGxldGUgPSBzY3RwX3NzX2RlZmF1bHRfaXNfdXNlcl9tc2dzX2luY29tcGxl
dGUKKyNlbmRpZgorfQorfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5l
dC9zY3RwX3N0cnVjdHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3N0cnVj
dHMuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAuLmMzY2U3NDk5MjJl
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3N0
cnVjdHMuaApAQCAtMCwwICsxLDEyODggQEAKKy8qLQorICogU1BEWC1MaWNlbnNlLUlkZW50aWZp
ZXI6IEJTRC0zLUNsYXVzZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA4LCBieSBDaXNj
byBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIw
MDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogYSkg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAg
ICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5
c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7
CisjZW5kaWYKKworI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX1NUUlVDVFNfSF8KKyNkZWZpbmUgX05F
VElORVRfU0NUUF9TVFJVQ1RTX0hfCisKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4KKyNp
bmNsdWRlIDxuZXRpbmV0L3NjdHBfaGVhZGVyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2F1
dGguaD4KKworc3RydWN0IHNjdHBfdGltZXIgeworCXNjdHBfb3NfdGltZXJfdCB0aW1lcjsKKwor
CWludCB0eXBlOworCS8qCisJICogRGVwZW5kaW5nIG9uIHRoZSB0aW1lciB0eXBlIHRoZXNlIHdp
bGwgYmUgc2V0dXAgYW5kIGNhc3Qgd2l0aCB0aGUKKwkgKiBhcHByb3ByaWF0ZSBlbnRpdHkuCisJ
ICovCisJdm9pZCAqZXA7CisJdm9pZCAqdGNiOworCXZvaWQgKm5ldDsKKyNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXZvaWQgKnZuZXQ7CisjZW5k
aWYKKworCS8qIGZvciBzYW5pdHkgY2hlY2tpbmcgKi8KKwl2b2lkICpzZWxmOworCXVpbnQzMl90
IHRpY2tzOworCXVpbnQzMl90IHN0b3BwZWRfZnJvbTsKK307CisKK3N0cnVjdCBzY3RwX2Zvb19z
dHVmZiB7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKwl1aW50MzJfdCAgICAgICAgbGluZW5v
OworCXVpbnQzMl90ICAgICAgICB0aWNrczsKKwlpbnQgICAgICAgICAgICAgdXBkb3duOworfTsK
KworLyoKKyAqIFRoaXMgaXMgdGhlIGluZm9ybWF0aW9uIHdlIHRyYWNrIG9uIGVhY2ggaW50ZXJm
YWNlIHRoYXQgd2Uga25vdyBhYm91dCBmcm9tCisgKiB0aGUgZGlzdGFudCBlbmQuCisgKi8KK1RB
SUxRX0hFQUQoc2N0cG5ldGxpc3RoZWFkLCBzY3RwX25ldHMpOworCitzdHJ1Y3Qgc2N0cF9zdHJl
YW1fcmVzZXRfbGlzdCB7CisJVEFJTFFfRU5UUlkoc2N0cF9zdHJlYW1fcmVzZXRfbGlzdCkgbmV4
dF9yZXNwOworCXVpbnQzMl90IHNlcTsKKwl1aW50MzJfdCB0c247CisJdWludDMyX3QgbnVtYmVy
X2VudHJpZXM7CisJdWludDE2X3QgbGlzdF9vZl9zdHJlYW1zW107Cit9OworCitUQUlMUV9IRUFE
KHNjdHBfcmVzZXRoZWFkLCBzY3RwX3N0cmVhbV9yZXNldF9saXN0KTsKKworLyoKKyAqIFVzZXJz
IG9mIHRoZSBpdGVyYXRvciBuZWVkIHRvIG1hbGxvYyBhIGl0ZXJhdG9yIHdpdGggYSBjYWxsIHRv
CisgKiBzY3RwX2luaXRpYXRlX2l0ZXJhdG9yKGlucF9mdW5jLCBhc3NvY19mdW5jLCBpbnBfZnVu
YywgIHBjYl9mbGFncywgcGNiX2ZlYXR1cmVzLAorICogICAgIGFzb2Nfc3RhdGUsIHZvaWQtcHRy
LWFyZywgdWludDMyLWFyZywgZW5kX2Z1bmMsIGlucCk7CisgKgorICogVXNlIHRoZSBmb2xsb3dp
bmcgdHdvIGRlZmluZXMgaWYgeW91IGRvbid0IGNhcmUgd2hhdCBwY2IgZmxhZ3MgYXJlIG9uIHRo
ZSBFUAorICogYW5kL29yIHlvdSBkb24ndCBjYXJlIHdoYXQgc3RhdGUgdGhlIGFzc29jaWF0aW9u
IGlzIGluLgorICoKKyAqIE5vdGUgdGhhdCBpZiB5b3Ugc3BlY2lmeSBhbiBJTlAgYXMgdGhlIGxh
c3QgYXJndW1lbnQgdGhlbiBPTkxZIGVhY2gKKyAqIGFzc29jaWF0aW9uIG9mIHRoYXQgc2luZ2xl
IElOUCB3aWxsIGJlIGV4ZWN1dGVkIHVwb24uIE5vdGUgdGhhdCB0aGUgcGNiCisgKiBmbGFncyBT
VElMTCBhcHBseSBzbyBpZiB0aGUgaW5wIHlvdSBzcGVjaWZ5IGhhcyBkaWZmZXJlbnQgcGNiX2Zs
YWdzIHRoZW4KKyAqIHdoYXQgeW91IHB1dCBpbiBwY2JfZmxhZ3Mgbm90aGluZyB3aWxsIGhhcHBl
bi4gdXNlIFNDVFBfUENCX0FOWV9GTEFHUyB0bworICogYXNzdXJlIHRoZSBpbnAgeW91IHNwZWNp
ZnkgZ2V0cyB0cmVhdGVkLgorICovCisjZGVmaW5lIFNDVFBfUENCX0FOWV9GTEFHUwkweDAwMDAw
MDAwCisjZGVmaW5lIFNDVFBfUENCX0FOWV9GRUFUVVJFUwkweDAwMDAwMDAwCisjZGVmaW5lIFND
VFBfQVNPQ19BTllfU1RBVEUJMHgwMDAwMDAwMAorCit0eXBlZGVmIHZvaWQgKCphc29jX2Z1bmMp
IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwgdm9pZCAqcHRyLAorICAg
ICAgICAgdWludDMyX3QgdmFsKTsKK3R5cGVkZWYgaW50ICgqaW5wX2Z1bmMpIChzdHJ1Y3Qgc2N0
cF9pbnBjYiAqLCB2b2lkICpwdHIsIHVpbnQzMl90IHZhbCk7Cit0eXBlZGVmIHZvaWQgKCplbmRf
ZnVuYykgKHZvaWQgKnB0ciwgdWludDMyX3QgdmFsKTsKKworI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYgZGVmaW5lZChTQ1RQX01DT1JFX0lO
UFVUKSAmJiBkZWZpbmVkKFNNUCkKKy8qIHdoYXRzIG9uIHRoZSBtY29yZSBjb250cm9sIHN0cnVj
dCAqLworc3RydWN0IHNjdHBfbWNvcmVfcXVldWUgeworCVRBSUxRX0VOVFJZKHNjdHBfbWNvcmVf
cXVldWUpIG5leHQ7CisJc3RydWN0IHZuZXQgKnZuOworCXN0cnVjdCBtYnVmICptOworCWludCBv
ZmY7CisJaW50IHY2OworfTsKKworVEFJTFFfSEVBRChzY3RwX21jb3JlX3FoZWFkLCBzY3RwX21j
b3JlX3F1ZXVlKTsKKworc3RydWN0IHNjdHBfbWNvcmVfY3RybCB7CisJU0NUUF9QUk9DRVNTX1NU
UlVDVCB0aHJlYWRfcHJvYzsKKwlzdHJ1Y3Qgc2N0cF9tY29yZV9xaGVhZCBxdWU7CisJc3RydWN0
IG10eCBjb3JlX210eDsKKwlzdHJ1Y3QgbXR4IHF1ZV9tdHg7CisJaW50IHJ1bm5pbmc7CisJaW50
IGNwdWlkOworfTsKKyNlbmRpZgorI2VuZGlmCisKK3N0cnVjdCBzY3RwX2l0ZXJhdG9yIHsKKwlU
QUlMUV9FTlRSWShzY3RwX2l0ZXJhdG9yKSBzY3RwX254dF9pdHI7CisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlzdHJ1Y3Qgdm5ldCAqdm47Cisj
ZW5kaWYKKwlzdHJ1Y3Qgc2N0cF90aW1lciB0bXI7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsJ
CS8qIGN1cnJlbnQgZW5kcG9pbnQgKi8KKwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7CQkvKiBjdXJy
ZW50KiBhc3NvYyAqLworCXN0cnVjdCBzY3RwX2lucGNiICpuZXh0X2lucDsgICAgLyogc3BlY2lh
bCBob29rIHRvIHNraXAgdG8gKi8KKwlhc29jX2Z1bmMgZnVuY3Rpb25fYXNzb2M7CS8qIHBlciBh
c3NvYyBmdW5jdGlvbiAqLworCWlucF9mdW5jIGZ1bmN0aW9uX2lucDsJCS8qIHBlciBlbmRwb2lu
dCBmdW5jdGlvbiAqLworCWlucF9mdW5jIGZ1bmN0aW9uX2lucF9lbmQ7CS8qIGVuZCBJTlAgZnVu
Y3Rpb24gKi8KKwllbmRfZnVuYyBmdW5jdGlvbl9hdGVuZDsJLyogaXRlcmF0b3IgY29tcGxldGlv
biBmdW5jdGlvbiAqLworCXZvaWQgKnBvaW50ZXI7CQkJLyogcG9pbnRlciBmb3IgYXBwbHkgZnVu
YyB0byB1c2UgKi8KKwl1aW50MzJfdCB2YWw7CQkJLyogdmFsdWUgZm9yIGFwcGx5IGZ1bmMgdG8g
dXNlICovCisJdWludDMyX3QgcGNiX2ZsYWdzOwkJLyogZW5kcG9pbnQgZmxhZ3MgYmVpbmcgY2hl
Y2tlZCAqLworCXVpbnQzMl90IHBjYl9mZWF0dXJlczsJCS8qIGVuZHBvaW50IGZlYXR1cmVzIGJl
aW5nIGNoZWNrZWQgKi8KKwl1aW50MzJfdCBhc29jX3N0YXRlOwkJLyogYXNzb2Mgc3RhdGUgYmVp
bmcgY2hlY2tlZCAqLworCXVpbnQzMl90IGl0ZXJhdG9yX2ZsYWdzOworCXVpbnQ4X3QgIG5vX2No
dW5rX291dHB1dDsKKwl1aW50OF90ICBkb25lX2N1cnJlbnRfZXA7Cit9OworLyogaXRlcmF0b3Jf
ZmxhZ3MgdmFsdWVzICovCisjZGVmaW5lIFNDVFBfSVRFUkFUT1JfRE9fQUxMX0lOUAkweDAwMDAw
MDAxCisjZGVmaW5lIFNDVFBfSVRFUkFUT1JfRE9fU0lOR0xFX0lOUAkweDAwMDAwMDAyCisKK1RB
SUxRX0hFQUQoc2N0cGl0ZXJhdG9ycywgc2N0cF9pdGVyYXRvcik7CisKK3N0cnVjdCBzY3RwX2Nv
cHlfYWxsIHsKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwkvKiBlcCAqLworCXN0cnVjdCBtYnVm
ICptOworCXN0cnVjdCBzY3RwX3NuZHJjdmluZm8gc25kcmN2OworCXNzaXplX3Qgc25kbGVuOwor
CWludCBjbnRfc2VudDsKKwlpbnQgY250X2ZhaWxlZDsKK307CisKK3N0cnVjdCBzY3RwX2FzY29u
Zl9pdGVyYXRvciB7CisJc3RydWN0IHNjdHBsYWRkciBsaXN0X29mX3dvcms7CisJaW50IGNudDsK
K307CisKK3N0cnVjdCBpdGVyYXRvcl9jb250cm9sIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXN0cnVjdCBtdHggaXBpX2l0ZXJhdG9yX3dx
X210eDsKKwlzdHJ1Y3QgbXR4IGl0X210eDsKKyNlbGlmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWxja19tdHhfdCAqaXBpX2l0ZXJhdG9yX3dxX210eDsK
KwlsY2tfbXR4X3QgKml0X210eDsKKyNlbGlmIGRlZmluZWQoU0NUUF9QUk9DRVNTX0xFVkVMX0xP
Q0tTKQorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwl1c2VybGFuZF9tdXRleF90IGlwaV9p
dGVyYXRvcl93cV9tdHg7CisJdXNlcmxhbmRfbXV0ZXhfdCBpdF9tdHg7CisJdXNlcmxhbmRfY29u
ZF90IGl0ZXJhdG9yX3dha2V1cDsKKyNlbHNlCisJcHRocmVhZF9tdXRleF90IGlwaV9pdGVyYXRv
cl93cV9tdHg7CisJcHRocmVhZF9tdXRleF90IGl0X210eDsKKwlwdGhyZWFkX2NvbmRfdCBpdGVy
YXRvcl93YWtldXA7CisjZW5kaWYKKyNlbGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorCXN0cnVjdCBzcGlubG9jayBpdF9sb2NrOworCXN0cnVjdCBzcGlubG9j
ayBpcGlfaXRlcmF0b3Jfd3FfbG9jazsKKwlLRVZFTlQgaXRlcmF0b3Jfd2FrZXVwWzJdOworCVBG
SUxFX09CSkVDVCBpdGVyYXRvcl90aHJlYWRfb2JqOworI2Vsc2UKKwl2b2lkICppdF9tdHg7Cisj
ZW5kaWYKKyNpZiAhKGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkK
KyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCVNDVFBfUFJPQ0VTU19TVFJVQ1QgdGhyZWFk
X3Byb2M7CisjZWxzZQorCXVzZXJsYW5kX3RocmVhZF90IHRocmVhZF9wcm9jOworI2VuZGlmCisj
ZW5kaWYKKwlzdHJ1Y3Qgc2N0cGl0ZXJhdG9ycyBpdGVyYXRvcmhlYWQ7CisJc3RydWN0IHNjdHBf
aXRlcmF0b3IgKmN1cl9pdDsKKwl1aW50MzJfdCBpdGVyYXRvcl9ydW5uaW5nOworCXVpbnQzMl90
IGl0ZXJhdG9yX2ZsYWdzOworfTsKKyNpZiAhKGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZp
bmVkKF9fVXNlcnNwYWNlX18pKQorI2RlZmluZSBTQ1RQX0lURVJBVE9SX01VU1RfRVhJVAkJMHgw
MDAwMDAwMQorI2RlZmluZSBTQ1RQX0lURVJBVE9SX0VYSVRFRAkJMHgwMDAwMDAwMgorI2VuZGlm
CisjZGVmaW5lIFNDVFBfSVRFUkFUT1JfU1RPUF9DVVJfSVQJMHgwMDAwMDAwNAorI2RlZmluZSBT
Q1RQX0lURVJBVE9SX1NUT1BfQ1VSX0lOUAkweDAwMDAwMDA4CisKK3N0cnVjdCBzY3RwX25ldF9y
b3V0ZSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwlzdHJ1Y3QgbmhvcF9vYmplY3QgKnJvX25oOworCXN0cnVjdCBsbGVudHJ5ICpyb19sbGU7
CisJY2hhcgkJKnJvX3ByZXBlbmQ7CisJdWludDE2X3QJcm9fcGxlbjsKKwl1aW50MTZfdAlyb19m
bGFnczsKKwl1aW50MTZfdAlyb19tdHU7CisJdWludDE2X3QJc3BhcmU7CisjZWxzZQorCXNjdHBf
cnRlbnRyeV90ICpyb19ydDsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorI2lmICFkZWZpbmVkKEFQUExFX0xFT1BBUkQpICYmICFkZWZp
bmVkKEFQUExFX1NOT1dMRU9QQVJEKSAmJiAhZGVmaW5lZChBUFBMRV9MSU9OKSAmJiAhZGVmaW5l
ZChBUFBMRV9NT1VOVEFJTkxJT04pICYmICFkZWZpbmVkKEFQUExFX0VMQ0FQSVRBTikKKwlzdHJ1
Y3QgbGxlbnRyeQkqcm9fbGxlOworI2VuZGlmCisjaWYgIWRlZmluZWQoQVBQTEVfTEVPUEFSRCkg
JiYgIWRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpICYmICFkZWZpbmVkKEFQUExFX0xJT04pICYm
ICFkZWZpbmVkKEFQUExFX01PVU5UQUlOTElPTikKKwlzdHJ1Y3QgaWZhZGRyICpyb19zcmNpYTsK
KyNlbmRpZgorI2lmICFkZWZpbmVkKEFQUExFX0xFT1BBUkQpCisJdWludDMyX3Qgcm9fZmxhZ3M7
CisjZW5kaWYKKyNlbmRpZgorCXVuaW9uIHNjdHBfc29ja3N0b3JlIF9sX2FkZHI7CS8qIHJlbW90
ZSBwZWVyIGFkZHIgKi8KKwlzdHJ1Y3Qgc2N0cF9pZmEgKl9zX2FkZHI7CS8qIG91ciBzZWxlY3Rl
ZCBzcmMgYWRkciAqLworfTsKKworc3RydWN0IGh0Y3AgeworCXVpbnQxNl90CWFscGhhOwkJLyog
Rml4ZWQgcG9pbnQgYXJpdGgsIDw8IDcgKi8KKwl1aW50OF90CQliZXRhOyAgICAgICAgICAgLyog
Rml4ZWQgcG9pbnQgYXJpdGgsIDw8IDcgKi8KKwl1aW50OF90CQltb2Rlc3dpdGNoOyAgICAgLyog
RGVsYXkgbW9kZXN3aXRjaCB1bnRpbCB3ZSBoYWQgYXQgbGVhc3Qgb25lIGNvbmdlc3Rpb24gZXZl
bnQgKi8KKwl1aW50MzJfdAlsYXN0X2Nvbmc7CS8qIFRpbWUgc2luY2UgbGFzdCBjb25nZXN0aW9u
IGV2ZW50IGVuZCAqLworCXVpbnQzMl90CXVuZG9fbGFzdF9jb25nOworCXVpbnQxNl90CWJ5dGVz
X2Fja2VkOworCXVpbnQzMl90CWJ5dGVjb3VudDsKKwl1aW50MzJfdAltaW5SVFQ7CisJdWludDMy
X3QJbWF4UlRUOworCisJdWludDMyX3QJdW5kb19tYXhSVFQ7CisJdWludDMyX3QJdW5kb19vbGRf
bWF4QjsKKworCS8qIEJhbmR3aWR0aCBlc3RpbWF0aW9uICovCisJdWludDMyX3QJbWluQjsKKwl1
aW50MzJfdAltYXhCOworCXVpbnQzMl90CW9sZF9tYXhCOworCXVpbnQzMl90CUJpOworCXVpbnQz
Ml90CWxhc3R0aW1lOworfTsKKworc3RydWN0IHJ0Y2NfY2MgeworCXN0cnVjdCB0aW1ldmFsIHRs
czsgICAvKiBUaGUgdGltZSB3ZSBzdGFydGVkIHRoZSBzZW5kaW5nICAqLworCXVpbnQ2NF90IGxi
dzsgICAgICAgICAvKiBPdXIgbGFzdCBlc3RpbWF0ZWQgYncgKi8KKwl1aW50NjRfdCBsYndfcnR0
OyAgICAgLyogUlRUIGF0IGJ3IGVzdGltYXRlICovCisJdWludDY0X3QgYndfYnl0ZXM7ICAgIC8q
IFRoZSB0b3RhbCBieXRlcyBzaW5jZSB0aGlzIHNlbmRpbmcgYmVnYW4gKi8KKwl1aW50NjRfdCBi
d190b3RfdGltZTsgLyogVGhlIHRvdGFsIHRpbWUgc2luY2Ugc2VuZGluZyBiZWdhbiAqLworCXVp
bnQ2NF90IG5ld190b3RfdGltZTsgIC8qIHRlbXAgaG9sZGluZyB0aGUgbmV3IHZhbHVlICovCisJ
dWludDY0X3QgYndfYnl0ZXNfYXRfbGFzdF9ydHRjOyAvKiBXaGF0IGJ3X2J5dGVzIHdhcyBhdCBs
YXN0IHJ0dCBjYWxjICovCisJdWludDMyX3QgY3duZF9hdF9id19zZXQ7IC8qIEN3bmQgYXQgbGFz
dCBidyBzYXZlZCAtIGxidyAqLworCXVpbnQzMl90IHZvbF9yZWR1Y2U7ICAvKiBjbnQgb2Ygdm9s
dW50YXJ5IHJlZHVjdGlvbnMgKi8KKwl1aW50MTZfdCBzdGVhZHlfc3RlcDsgLyogVGhlIG51bWJl
ciByZXF1aXJlZCB0byBiZSBpbiBzdGVhZHkgc3RhdGUqLworCXVpbnQxNl90IHN0ZXBfY250OyAg
ICAvKiBUaGUgY3VycmVudCBudW1iZXIgKi8KKwl1aW50OF90ICByZXRfZnJvbV9lcTsgIC8qIFdo
ZW4gYWxsIHRoaW5ncyBhcmUgZXF1YWwgd2hhdCBkbyBJIHJldHVybiAwLzEgLSAxIG5vIGNjIGFk
dmFuY2UgKi8KKwl1aW50OF90ICB1c2VfZGNjY19lY247ICAvKiBGbGFnIHRvIGVuYWJsZSBEQ0ND
IEVDTiAqLworCXVpbnQ4X3QgIHRsc19uZWVkc19zZXQ7IC8qIEZsYWcgdG8gaW5kaWNhdGUgd2Ug
bmVlZCB0byBzZXQgdGxzIDAgb3IgMSBtZWFucyBzZXQgYXQgc2VuZCAyIG5vdCAqLworCXVpbnQ4
X3QgIGxhc3Rfc3RlcF9zdGF0ZTsgLyogTGFzdCBzdGF0ZSBpZiBzdGVhZHkgc3RhdGUgc3RlcGRv
d24gaXMgb24gKi8KKwl1aW50OF90ICBydHRfc2V0X3RoaXNfc2FjazsgLyogRmxhZyBzYXlpbmcg
dGhpcyBzYWNrIGhhZCBSVFQgY2FsYyBvbiBpdCAqLworCXVpbnQ4X3QgIGxhc3RfaW5zdF9pbmQ7
IC8qIExhc3Qgc2F2ZWQgaW5zdCBpbmRpY2F0aW9uICovCit9OworCitzdHJ1Y3Qgc2N0cF9uZXRz
IHsKKwlUQUlMUV9FTlRSWShzY3RwX25ldHMpIHNjdHBfbmV4dDsJLyogbmV4dCBsaW5rICovCisK
KwkvKgorCSAqIFRoaW5ncyBvbiB0aGUgdG9wIGhhbGYgbWF5IGJlIGFibGUgdG8gYmUgc3BsaXQg
aW50byBhIGNvbW1vbgorCSAqIHN0cnVjdHVyZSBzaGFyZWQgYnkgYWxsLgorCSAqLworCXN0cnVj
dCBzY3RwX3RpbWVyIHBtdHVfdGltZXI7CisJc3RydWN0IHNjdHBfdGltZXIgaGJfdGltZXI7CisK
KwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgdHdvIGluIGNvbWJpbmF0aW9uIGVxdWF0ZSB0byBhIHJv
dXRlIGVudHJ5IGZvciB2NgorCSAqIG9yIHY0LgorCSAqLworCXN0cnVjdCBzY3RwX25ldF9yb3V0
ZSBybzsKKworCS8qIG10dSBkaXNjb3ZlcmVkIHNvIGZhciAqLworCXVpbnQzMl90IG10dTsKKwl1
aW50MzJfdCBzc3RocmVzaDsJLyogbm90IHN1cmUgYWJvdXQgdGhpcyBvbmUgZm9yIHNwbGl0ICov
CisJdWludDMyX3QgbGFzdF9jd3JfdHNuOworCXVpbnQzMl90IGN3cl93aW5kb3dfdHNuOworCXVp
bnQzMl90IGVjbl9jZV9wa3RfY250OworCXVpbnQzMl90IGxvc3RfY250OworCS8qIHNtb290aGVk
IGF2ZXJhZ2UgdGhpbmdzIGZvciBSVFQgYW5kIFJUTyBpdHNlbGYgKi8KKwlpbnQgbGFzdHNhOwor
CWludCBsYXN0c3Y7CisJdWludDY0X3QgcnR0OyAvKiBsYXN0IG1lYXN1cmVkIHJ0dCB2YWx1ZSBp
biB1cyAqLworCXVpbnQzMl90IFJUTzsKKworCS8qIFRoaXMgaXMgdXNlZCBmb3IgU0hVVERPV04v
U0hVVERPV04tQUNLL1NFTkQgb3IgSU5JVCB0aW1lcnMgKi8KKwlzdHJ1Y3Qgc2N0cF90aW1lciBy
eHRfdGltZXI7CisKKwkvKiBsYXN0IHRpbWUgaW4gc2Vjb25kcyBJIHNlbnQgdG8gaXQgKi8KKwlz
dHJ1Y3QgdGltZXZhbCBsYXN0X3NlbnRfdGltZTsKKwl1bmlvbiBjY19jb250cm9sX2RhdGEgewor
CQlzdHJ1Y3QgaHRjcCBodGNwX2NhOyAJLyogSlJTIC0gc3RydWN0IHVzZWQgaW4gSFRDUCBhbGdv
cml0aG0gKi8KKwkJc3RydWN0IHJ0Y2NfY2MgcnRjYzsgICAgLyogcnRjYyBtb2R1bGUgY2Mgc3R1
ZmYgICovCisJfSBjY19tb2Q7CisJaW50IHJlZl9jb3VudDsKKworCS8qIENvbmdlc3Rpb24gc3Rh
dHMgcGVyIGRlc3RpbmF0aW9uICovCisJLyoKKwkgKiBmbGlnaHQgc2l6ZSB2YXJpYWJsZXMgYW5k
IHN1Y2gsIHNvcnJ5IFZlcm4sIEkgY291bGQgbm90IGF2b2lkCisJICogdGhpcyBpZiBJIHdhbnRl
ZCBwZXJmb3JtYW5jZSA6PgorCSAqLworCXVpbnQzMl90IGZsaWdodF9zaXplOworCXVpbnQzMl90
IGN3bmQ7CQkvKiBhY3R1YWwgY3duZCAqLworCXVpbnQzMl90IHByZXZfY3duZDsJLyogY3duZCBi
ZWZvcmUgYW55IHByb2Nlc3NpbmcgKi8KKwl1aW50MzJfdCBlY25fcHJldl9jd25kOwkvKiBFQ04g
cHJldiBjd25kIGF0IGZpcnN0IGVjbl9lY2hvIHNlZW4gaW4gbmV3IHdpbmRvdyAqLworCXVpbnQz
Ml90IHBhcnRpYWxfYnl0ZXNfYWNrZWQ7CS8qIGluIENBIHRyYWNrcyB3aGVuIHRvIGluY3IgYSBN
VFUgKi8KKwkvKiB0cmFja2luZyB2YXJpYWJsZXMgdG8gYXZvaWQgdGhlIGFsb2MvZnJlZSBpbiBz
YWNrIHByb2Nlc3NpbmcgKi8KKwl1bnNpZ25lZCBpbnQgbmV0X2FjazsKKwl1bnNpZ25lZCBpbnQg
bmV0X2FjazI7CisKKwkvKgorCSAqIEpSUyAtIDUvOC8wNyAtIFZhcmlhYmxlIHRvIHRyYWNrIGxh
c3QgdGltZQorCSAqICBhIGRlc3RpbmF0aW9uIHdhcyBhY3RpdmUgZm9yIENNVCBQRgorCSAqLwor
CXVpbnQzMl90IGxhc3RfYWN0aXZlOworCisJLyoKKwkgKiBDTVQgdmFyaWFibGVzIChpeWVuZ2Fy
QGNpcy51ZGVsLmVkdSkKKwkgKi8KKwl1aW50MzJfdCB0aGlzX3NhY2tfaGlnaGVzdF9uZXdhY2s7
CS8qIHRyYWNrcyBoaWdoZXN0IFRTTiBuZXdseQorCQkJCQkJICogYWNrZWQgZm9yIGEgZ2l2ZW4g
ZGVzdCBpbgorCQkJCQkJICogdGhlIGN1cnJlbnQgU0FDSy4gVXNlZCBpbgorCQkJCQkJICogU0ZS
IGFuZCBIVE5BIGFsZ29zICovCisJdWludDMyX3QgcHNldWRvX2N1bWFjazsJLyogQ01UIENVQyBh
bGdvcml0aG0uIE1haW50YWlucyBuZXh0IGV4cGVjdGVkCisJCQkJICogcHNldWRvLWN1bWFjayBm
b3IgdGhpcyBkZXN0aW5hdGlvbiAqLworCXVpbnQzMl90IHJ0eF9wc2V1ZG9fY3VtYWNrOwkvKiBD
TVQgQ1VDIGFsZ29yaXRobS4gTWFpbnRhaW5zIG5leHQKKwkJCQkJICogZXhwZWN0ZWQgcHNldWRv
LWN1bWFjayBmb3IgdGhpcworCQkJCQkgKiBkZXN0aW5hdGlvbiAqLworCisJLyogQ01UIGZhc3Qg
cmVjb3ZlcnkgdmFyaWFibGVzICovCisJdWludDMyX3QgZmFzdF9yZWNvdmVyeV90c247CisJdWlu
dDMyX3QgaGVhcnRiZWF0X3JhbmRvbTE7CisJdWludDMyX3QgaGVhcnRiZWF0X3JhbmRvbTI7Cisj
aWZkZWYgSU5FVDYKKwl1aW50MzJfdCBmbG93bGFiZWw7CisjZW5kaWYKKwl1aW50OF90IGRzY3A7
CisKKwlzdHJ1Y3QgdGltZXZhbCBzdGFydF90aW1lOyAgICAgIC8qIHRpbWUgd2hlbiB0aGlzIG5l
dCB3YXMgY3JlYXRlZCAqLworCXVpbnQzMl90IG1hcmtlZF9yZXRyYW5zOyAgICAgICAgLyogbnVt
YmVyIG9yIERBVEEgY2h1bmtzIG1hcmtlZCBmb3IKKwkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRpbWVyIGJhc2VkIHJldHJhbnNtaXNzaW9ucyAqLworCXVpbnQzMl90IG1hcmtl
ZF9mYXN0cmV0cmFuczsKKwl1aW50MzJfdCBoZWFydF9iZWF0X2RlbGF5OyAgICAgIC8qIEhlYXJ0
IEJlYXQgZGVsYXkgaW4gbXMgKi8KKworCS8qIGlmIHRoaXMgZ3V5IGlzIG9rIG9yIG5vdCAuLi4g
c3RhdHVzICovCisJdWludDE2X3QgZGVzdF9zdGF0ZTsKKwkvKiBudW1iZXIgb2YgdGltZW91dHMg
dG8gY29uc2lkZXIgdGhlIGRlc3RpbmF0aW9uIHVucmVhY2hhYmxlICovCisJdWludDE2X3QgZmFp
bHVyZV90aHJlc2hvbGQ7CisJLyogbnVtYmVyIG9mIHRpbWVvdXRzIHRvIGNvbnNpZGVyIHRoZSBk
ZXN0aW5hdGlvbiBwb3RlbnRpYWxseSBmYWlsZWQgKi8KKwl1aW50MTZfdCBwZl90aHJlc2hvbGQ7
CisJLyogZXJyb3Igc3RhdHMgb24gdGhlIGRlc3RpbmF0aW9uICovCisJdWludDE2X3QgZXJyb3Jf
Y291bnQ7CisJLyogVURQIHBvcnQgbnVtYmVyIGluIGNhc2Ugb2YgVURQIHR1bm5lbGluZyAqLwor
CXVpbnQxNl90IHBvcnQ7CisKKwl1aW50OF90IGZhc3RfcmV0cmFuX2xvc3NfcmVjb3Zlcnk7CisJ
dWludDhfdCB3aWxsX2V4aXRfZmFzdF9yZWNvdmVyeTsKKwkvKiBGbGFncyB0aGF0IHByb2JhYmx5
IGNhbiBiZSBjb21iaW5lZCBpbnRvIGRlc3Rfc3RhdGUgKi8KKwl1aW50OF90IGZhc3RfcmV0cmFu
X2lwOwkvKiBmYXN0IHJldHJhbnNtaXQgaW4gcHJvZ3Jlc3MgKi8KKwl1aW50OF90IGhiX3Jlc3Bv
bmRlZDsKKwl1aW50OF90IHNhd19uZXdhY2s7CS8qIENNVCdzIFNGUiBhbGdvcml0aG0gZmxhZyAq
LworCXVpbnQ4X3Qgc3JjX2FkZHJfc2VsZWN0ZWQ7CS8qIGlmIHdlIHNwbGl0IHdlIG1vdmUgKi8K
Kwl1aW50OF90IGluZHhfb2ZfZWxpZ2libGVfbmV4dF90b191c2U7CisJdWludDhfdCBhZGRyX2lz
X2xvY2FsOwkvKiBpdHMgYSBsb2NhbCBhZGRyZXNzIChpZiBrbm93bikgY291bGQgbW92ZQorCQkJ
CSAqIGluIHNwbGl0ICovCisKKwkvKgorCSAqIENNVCB2YXJpYWJsZXMgKGl5ZW5nYXJAY2lzLnVk
ZWwuZWR1KQorCSAqLworCXVpbnQ4X3QgZmluZF9wc2V1ZG9fY3VtYWNrOwkvKiBDTVQgQ1VDIGFs
Z29yaXRobS4gRmxhZyB1c2VkIHRvCisJCQkJCSAqIGZpbmQgYSBuZXcgcHNldWRvY3VtYWNrLiBU
aGlzIGZsYWcKKwkJCQkJICogaXMgc2V0IGFmdGVyIGEgbmV3IHBzZXVkby1jdW1hY2sKKwkJCQkJ
ICogaGFzIGJlZW4gcmVjZWl2ZWQgYW5kIGluZGljYXRlcworCQkJCQkgKiB0aGF0IHRoZSBzZW5k
ZXIgc2hvdWxkIGZpbmQgdGhlCisJCQkJCSAqIG5leHQgcHNldWRvLWN1bWFjayBleHBlY3RlZCBm
b3IKKwkJCQkJICogdGhpcyBkZXN0aW5hdGlvbiAqLworCXVpbnQ4X3QgZmluZF9ydHhfcHNldWRv
X2N1bWFjazsJLyogQ01UIENVQ3YyIGFsZ29yaXRobS4gRmxhZyB1c2VkIHRvCisJCQkJCSAqIGZp
bmQgYSBuZXcgcnR4LXBzZXVkb2N1bWFjay4gVGhpcworCQkJCQkgKiBmbGFnIGlzIHNldCBhZnRl
ciBhIG5ldworCQkJCQkgKiBydHgtcHNldWRvLWN1bWFjayBoYXMgYmVlbiByZWNlaXZlZAorCQkJ
CQkgKiBhbmQgaW5kaWNhdGVzIHRoYXQgdGhlIHNlbmRlcgorCQkJCQkgKiBzaG91bGQgZmluZCB0
aGUgbmV4dAorCQkJCQkgKiBydHgtcHNldWRvLWN1bWFjayBleHBlY3RlZCBmb3IgdGhpcworCQkJ
CQkgKiBkZXN0aW5hdGlvbiAqLworCXVpbnQ4X3QgbmV3X3BzZXVkb19jdW1hY2s7CS8qIENNVCBD
VUMgYWxnb3JpdGhtLiBGbGFnIHVzZWQgdG8KKwkJCQkJICogaW5kaWNhdGUgaWYgYSBuZXcgcHNl
dWRvLWN1bWFjayBvcgorCQkJCQkgKiBydHgtcHNldWRvLWN1bWFjayBoYXMgYmVlbiByZWNlaXZl
ZCAqLworCXVpbnQ4X3Qgd2luZG93X3Byb2JlOwkJLyogRG9pbmcgYSB3aW5kb3cgcHJvYmU/ICov
CisJdWludDhfdCBSVE9fbWVhc3VyZWQ7CQkvKiBIYXZlIHdlIGRvbmUgdGhlIGZpcnN0IG1lYXN1
cmUgKi8KKwl1aW50OF90IGxhc3RfaHNfdXNlZDsJLyogaW5kZXggaW50byB0aGUgbGFzdCBIUyB0
YWJsZSBlbnRyeSB3ZSB1c2VkICovCisJdWludDhfdCBsYW5fdHlwZTsKKwl1aW50OF90IHJ0b19u
ZWVkZWQ7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwl1aW50MzJfdCBmbG93aWQ7CisJdWludDhfdCBmbG93dHlwZTsKKyNlbmRpZgorfTsKKwor
c3RydWN0IHNjdHBfZGF0YV9jaHVua3JlYyB7CisJdWludDMyX3QgdHNuOwkJLyogdGhlIFRTTiBv
ZiB0aGlzIHRyYW5zbWl0ICovCisJdWludDMyX3QgbWlkOwkJLyogdGhlIG1lc3NhZ2UgaWRlbnRp
ZmllciBvZiB0aGlzIHRyYW5zbWl0ICovCisJdWludDE2X3Qgc2lkOwkJLyogdGhlIHN0cmVhbSBu
dW1iZXIgb2YgdGhpcyBndXkgKi8KKwl1aW50MzJfdCBwcGlkOworCXVpbnQzMl90IGNvbnRleHQ7
CS8qIGZyb20gc2VuZCAqLworCXVpbnQzMl90IGN3bmRfYXRfc2VuZDsKKwkvKgorCSAqIHBhcnQg
b2YgdGhlIEhpZ2hlc3Qgc2Fja2VkIGFsZ29yaXRobSB0byBiZSBhYmxlIHRvIHN0cm9rZSBjb3Vu
dHMKKwkgKiBvbiBvbmVzIHRoYXQgYXJlIEZSJ2QuCisJICovCisJdWludDMyX3QgZmFzdF9yZXRy
YW5fdHNuOwkvKiBzZW5kaW5nX3NlcSBhdCB0aGUgdGltZSBvZiBGUiAqLworCXN0cnVjdCB0aW1l
dmFsIHRpbWV0b2Ryb3A7CS8qIHRpbWUgd2UgZHJvcCBpdCBmcm9tIHF1ZXVlICovCisJdWludDMy
X3QgZnNuOwkJCS8qIEZyYWdtZW50IFNlcXVlbmNlIE51bWJlciAqLworCXVpbnQ4X3QgZG9pbmdf
ZmFzdF9yZXRyYW5zbWl0OworCXVpbnQ4X3QgcmN2X2ZsYWdzOwkvKiBmbGFncyBwdWxsZWQgZnJv
bSBkYXRhIGNodW5rIG9uIGluYm91bmQgZm9yCisJCQkJICogb3V0Ym91bmQgaG9sZHMgc2VuZGlu
ZyBmbGFncyBmb3IgUFItU0NUUC4KKwkJCQkgKi8KKwl1aW50OF90IHN0YXRlX2ZsYWdzOworCXVp
bnQ4X3QgY2h1bmtfd2FzX3Jldm9rZWQ7CisJdWludDhfdCBmd2RfdHNuX2NudDsKK307CisKK1RB
SUxRX0hFQUQoc2N0cGNodW5rX2xpc3RoZWFkLCBzY3RwX3RtaXRfY2h1bmspOworCisvKiBUaGUg
bG93ZXIgYnl0ZSBpcyB1c2VkIHRvIGVudW1lcmF0ZSBQUl9TQ1RQIHBvbGljaWVzICovCisjZGVm
aW5lIENIVU5LX0ZMQUdTX1BSX1NDVFBfVFRMCSAgICAgICAgU0NUUF9QUl9TQ1RQX1RUTAorI2Rl
ZmluZSBDSFVOS19GTEFHU19QUl9TQ1RQX0JVRgkgICAgICAgIFNDVFBfUFJfU0NUUF9CVUYKKyNk
ZWZpbmUgQ0hVTktfRkxBR1NfUFJfU0NUUF9SVFggICAgICAgICBTQ1RQX1BSX1NDVFBfUlRYCisK
Ky8qIFRoZSB1cHBlciBieXRlIGlzIHVzZWQgYXMgYSBiaXQgbWFzayAqLworI2RlZmluZSBDSFVO
S19GTEFHU19GUkFHTUVOVF9PSwkgICAgICAgIDB4MDEwMAorCitzdHJ1Y3QgY2hrX2lkIHsKKwl1
aW50OF90IGlkOworCXVpbnQ4X3QgY2FuX3Rha2VfZGF0YTsKK307CisKK3N0cnVjdCBzY3RwX3Rt
aXRfY2h1bmsgeworCXVuaW9uIHsKKwkJc3RydWN0IHNjdHBfZGF0YV9jaHVua3JlYyBkYXRhOwor
CQlzdHJ1Y3QgY2hrX2lkIGNodW5rX2lkOworCX0gICAgIHJlYzsKKwlzdHJ1Y3Qgc2N0cF9hc3Nv
Y2lhdGlvbiAqYXNvYzsJLyogYnAgdG8gYXNvYyB0aGlzIGJlbG9uZ3MgdG8gKi8KKwlzdHJ1Y3Qg
dGltZXZhbCBzZW50X3Jjdl90aW1lOwkvKiBmaWxsZWQgaW4gaWYgUlRUIGJlaW5nIGNhbGN1bGF0
ZWQgKi8KKwlzdHJ1Y3QgbWJ1ZiAqZGF0YTsJLyogcG9pbnRlciB0byBtYnVmIGNoYWluIG9mIGRh
dGEgKi8KKwlzdHJ1Y3QgbWJ1ZiAqbGFzdF9tYnVmOwkvKiBwb2ludGVyIHRvIGxhc3QgbWJ1ZiBp
biBjaGFpbiAqLworCXN0cnVjdCBzY3RwX25ldHMgKndob1RvOworCVRBSUxRX0VOVFJZKHNjdHBf
dG1pdF9jaHVuaykgc2N0cF9uZXh0OwkvKiBuZXh0IGxpbmsgKi8KKwlpbnQzMl90IHNlbnQ7CQkv
KiB0aGUgc2VuZCBzdGF0dXMgKi8KKwl1aW50MTZfdCBzbmRfY291bnQ7CS8qIG51bWJlciBvZiB0
aW1lcyBJIHNlbnQgKi8KKwl1aW50MTZfdCBmbGFnczsJCS8qIGZsYWdzLCBzdWNoIGFzIEZSQUdN
RU5UX09LICovCisJdWludDE2X3Qgc2VuZF9zaXplOworCXVpbnQxNl90IGJvb2tfc2l6ZTsKKwl1
aW50MTZfdCBtYmNudDsKKwl1aW50MTZfdCBhdXRoX2tleWlkOworCXVpbnQ4X3QgaG9sZHNfa2V5
X3JlZjsJLyogZmxhZyBpZiBhdXRoIGtleWlkIHJlZmNvdW50IGlzIGhlbGQgKi8KKwl1aW50OF90
IHBhZF9pbnBsYWNlOworCXVpbnQ4X3QgZG9fcnR0OworCXVpbnQ4X3QgYm9va19zaXplX3NjYWxl
OworCXVpbnQ4X3Qgbm9fZnJfYWxsb3dlZDsKKwl1aW50OF90IGNvcHlfYnlfcmVmOworCXVpbnQ4
X3Qgd2luZG93X3Byb2JlOworfTsKKworc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgewkvKiBz
aW5mbyBzdHJ1Y3R1cmUgUGx1c2UgbW9yZSAqLworCXVpbnQxNl90IHNpbmZvX3N0cmVhbTsJLyog
b2ZmIHRoZSB3aXJlICovCisJdWludDE2X3Qgc2luZm9fZmxhZ3M7CS8qIFNDVFBfVU5PUkRFUkVE
IGZyb20gd2lyZSB1c2UgU0NUUF9FT0YgZm9yCisJCQkJICogRU9SICovCisJdWludDMyX3Qgc2lu
Zm9fcHBpZDsJLyogb2ZmIHRoZSB3aXJlICovCisJdWludDMyX3Qgc2luZm9fY29udGV4dDsJLyog
cGljayB0aGlzIHVwIGZyb20gYXNzb2MgZGVmIGNvbnRleHQ/ICovCisJdWludDMyX3Qgc2luZm9f
dGltZXRvbGl2ZTsJLyogbm90IHVzZWQgYnkga2VybmVsICovCisJdWludDMyX3Qgc2luZm9fdHNu
OwkvKiBVc2UgdGhpcyBpbiByZWFzc2VtYmx5IGFzIGZpcnN0IFRTTiAqLworCXVpbnQzMl90IHNp
bmZvX2N1bXRzbjsJLyogVXNlIHRoaXMgaW4gcmVhc3NlbWJseSBhcyBsYXN0IFRTTiAqLworCXNj
dHBfYXNzb2NfdCBzaW5mb19hc3NvY19pZDsJLyogb3VyIGFzc29jIGlkICovCisJLyogTm9uIHNp
bmZvIHN0dWZmICovCisJdWludDMyX3QgbWlkOwkJLyogRnJhZ21lbnQgSW5kZXggKi8KKwl1aW50
MzJfdCBsZW5ndGg7CS8qIGxlbmd0aCBvZiBkYXRhICovCisJdWludDMyX3QgaGVsZF9sZW5ndGg7
CS8qIGxlbmd0aCBoZWxkIGluIHNiICovCisJdWludDMyX3QgdG9wX2ZzbjsJLyogSGlnaGVzdCBG
U04gaW4gcXVldWUgKi8KKwl1aW50MzJfdCBmc25faW5jbHVkZWQ7ICAvKiBIaWdoZXN0IEZTTiBp
biAqZGF0YSBwb3J0aW9uICovCisJc3RydWN0IHNjdHBfbmV0cyAqd2hvRnJvbTsJLyogd2hlcmUg
aXQgY2FtZSBmcm9tICovCisJc3RydWN0IG1idWYgKmRhdGE7CS8qIGZyb250IG9mIHRoZSBtYnVm
IGNoYWluIG9mIGRhdGEgd2l0aAorCQkJCSAqIFBLVF9IRFIgKi8KKwlzdHJ1Y3QgbWJ1ZiAqdGFp
bF9tYnVmOwkvKiB1c2VkIGZvciBtdWx0aS1wYXJ0IGRhdGEgKi8KKwlzdHJ1Y3QgbWJ1ZiAqYXV4
X2RhdGE7ICAvKiB1c2VkIHRvIGhvbGQvY2FjaGUgIGNvbnRyb2wgaWYgby9zIGRvZXMgbm90IHRh
a2UgaXQgZnJvbSB1cyAqLworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsJLyogYXNzb2MsIHVzZWQg
Zm9yIHdpbmRvdyB1cGRhdGUgKi8KKwlUQUlMUV9FTlRSWShzY3RwX3F1ZXVlZF90b19yZWFkKSBu
ZXh0OworCVRBSUxRX0VOVFJZKHNjdHBfcXVldWVkX3RvX3JlYWQpIG5leHRfaW5zdHJtOworCXN0
cnVjdCBzY3RwY2h1bmtfbGlzdGhlYWQgcmVhc207CisJdWludDE2X3QgcG9ydF9mcm9tOworCXVp
bnQxNl90IHNwZWNfZmxhZ3M7CS8qIEZsYWdzIHRvIGhvbGQgdGhlIG5vdGlmaWNhdGlvbiBmaWVs
ZCAqLworCXVpbnQ4X3QgIGRvX25vdF9yZWZfc3RjYjsKKwl1aW50OF90ICBlbmRfYWRkZWQ7CisJ
dWludDhfdCAgcGRhcGlfYWJvcnRlZDsKKwl1aW50OF90ICBwZGFwaV9zdGFydGVkOworCXVpbnQ4
X3QgIHNvbWVfdGFrZW47CisJdWludDhfdCAgbGFzdF9mcmFnX3NlZW47CisJdWludDhfdCAgZmly
c3RfZnJhZ19zZWVuOworCXVpbnQ4X3QgIG9uX3JlYWRfcTsKKwl1aW50OF90ICBvbl9zdHJtX3E7
Cit9OworCisjZGVmaW5lIFNDVFBfT05fT1JERVJFRCAxCisjZGVmaW5lIFNDVFBfT05fVU5PUkRF
UkVEIDIKKworLyogVGhpcyBkYXRhIHN0cnVjdHVyZSB3aWxsIGJlIG9uIHRoZSBvdXRib3VuZAor
ICogc3RyZWFtIHF1ZXVlcy4gRGF0YSB3aWxsIGJlIHB1bGxlZCBvZmYgZnJvbQorICogdGhlIGZy
b250IG9mIHRoZSBtYnVmIGRhdGEgYW5kIGNodW5rLWlmaWVkCisgKiBieSB0aGUgb3V0cHV0IHJv
dXRpbmVzLiBXZSB3aWxsIGN1c3RvbQorICogZml0IGV2ZXJ5IGNodW5rIHdlIHB1bGwgdG8gdGhl
IHNlbmQvc2VudAorICogcXVldWUgdG8gbWFrZSB1cCB0aGUgbmV4dCBmdWxsIHBhY2tldAorICog
aWYgd2UgY2FuLiBBbiBlbnRyeSBjYW5ub3QgYmUgcmVtb3ZlZAorICogZnJvbSB0aGUgc3RyZWFt
X291dCBxdWV1ZSB1bnRpbAorICogdGhlIG1zZ19pc19jb21wbGV0ZSBmbGFnIGlzIHNldC4gVGhp
cworICogbWVhbnMgYXQgdGltZXMgZGF0YS90YWlsX21idWYgTUlHSFQKKyAqIGJlIE5VTEwuLiBJ
ZiB0aGF0IG9jY3VycyBpdCBoYXBwZW5zCisgKiBmb3Igb25lIG9mIHR3byByZWFzb25zLiBFaXRo
ZXIgdGhlIHVzZXIKKyAqIGlzIGJsb2NrZWQgb24gYSBzZW5kKCkgY2FsbCBhbmQgaGFzIG5vdAor
ICogYXdva2VuIHRvIGNvcHkgbW9yZSBkYXRhIGRvd24uLi4gT1IKKyAqIHRoZSB1c2VyIGlzIGlu
IHRoZSBleHBsaWN0IE1TR19FT1IgbW9kZQorICogYW5kIHdyb3RlIHNvbWUgZGF0YSwgYnV0IGhh
cyBub3QgY29tcGxldGVkCisgKiBzZW5kaW5nLgorICovCitzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVl
dWVfcGVuZGluZyB7CisJc3RydWN0IG1idWYgKmRhdGE7CisJc3RydWN0IG1idWYgKnRhaWxfbWJ1
ZjsKKwlzdHJ1Y3QgdGltZXZhbCB0czsKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJVEFJTFFf
RU5UUlkgKHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcpIG5leHQ7CisJVEFJTFFfRU5UUlkgKHNj
dHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcpIHNzX25leHQ7CisJdWludDMyX3QgZnNuOworCXVpbnQz
Ml90IGxlbmd0aDsKKwl1aW50MzJfdCB0aW1ldG9saXZlOworCXVpbnQzMl90IHBwaWQ7CisJdWlu
dDMyX3QgY29udGV4dDsKKwl1aW50MTZfdCBzaW5mb19mbGFnczsKKwl1aW50MTZfdCBzaWQ7CisJ
dWludDE2X3QgYWN0X2ZsYWdzOworCXVpbnQxNl90IGF1dGhfa2V5aWQ7CisJdWludDhfdCAgaG9s
ZHNfa2V5X3JlZjsKKwl1aW50OF90ICBtc2dfaXNfY29tcGxldGU7CisJdWludDhfdCAgc29tZV90
YWtlbjsKKwl1aW50OF90ICBzZW5kZXJfYWxsX2RvbmU7CisJdWludDhfdCAgcHV0X2xhc3Rfb3V0
OworCXVpbnQ4X3QgIGRpc2NhcmRfcmVzdDsKKwl1aW50OF90ICBwcm9jZXNzaW5nOworfTsKKwor
LyoKKyAqIHRoaXMgc3RydWN0IGNvbnRhaW5zIGluZm8gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGlu
Ym91bmQgc3RyZWFtIGRhdGEgYW5kCisgKiBoZWxwIHdpdGggb3JkZXJpbmcuCisgKi8KK1RBSUxR
X0hFQUQoc2N0cHdoZWVsdW5yZWxfbGlzdGhlYWQsIHNjdHBfc3RyZWFtX2luKTsKK3N0cnVjdCBz
Y3RwX3N0cmVhbV9pbiB7CisJc3RydWN0IHNjdHBfcmVhZGhlYWQgaW5xdWV1ZTsKKwlzdHJ1Y3Qg
c2N0cF9yZWFkaGVhZCB1bm9faW5xdWV1ZTsKKwl1aW50MzJfdCBsYXN0X21pZF9kZWxpdmVyZWQ7
CS8qIHVzZWQgZm9yIHJlLW9yZGVyICovCisJdWludDE2X3Qgc2lkOworCXVpbnQ4X3QgIGRlbGl2
ZXJ5X3N0YXJ0ZWQ7CisJdWludDhfdCAgcGRfYXBpX3N0YXJ0ZWQ7Cit9OworCitUQUlMUV9IRUFE
KHNjdHB3aGVlbF9saXN0aGVhZCwgc2N0cF9zdHJlYW1fb3V0KTsKK1RBSUxRX0hFQUQoc2N0cGxp
c3RfbGlzdGhlYWQsIHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcpOworCisvKgorICogVGhpcyB1
bmlvbiBob2xkcyBhbGwgZGF0YSBuZWNlc3NhcnkgZm9yCisgKiBkaWZmZXJlbnQgc3RyZWFtIHNj
aGVkdWxlcnMuCisgKi8KK3N0cnVjdCBzY2hlZHVsaW5nX2RhdGEgeworCXN0cnVjdCBzY3RwX3N0
cmVhbV9vdXQgKmxvY2tlZF9vbl9zZW5kaW5nOworCS8qIGNpcmN1bGFyIGxvb2tpbmcgZm9yIG91
dHB1dCBzZWxlY3Rpb24gKi8KKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpsYXN0X291dF9zdHJl
YW07CisJdW5pb24geworCQlzdHJ1Y3Qgc2N0cHdoZWVsX2xpc3RoZWFkIHdoZWVsOworCQlzdHJ1
Y3Qgc2N0cGxpc3RfbGlzdGhlYWQgbGlzdDsKKwl9IG91dDsKK307CisKKy8qIFJvdW5kLXJvYmlu
IHNjaGVkdWxlcnMgKi8KK3N0cnVjdCBzc19yciB7CisJLyogbmV4dCBsaW5rIGluIHdoZWVsICov
CisJVEFJTFFfRU5UUlkoc2N0cF9zdHJlYW1fb3V0KSBuZXh0X3Nwb2tlOworfTsKKworLyogUHJp
b3JpdHkgc2NoZWR1bGVyICovCitzdHJ1Y3Qgc3NfcHJpbyB7CisJLyogbmV4dCBsaW5rIGluIHdo
ZWVsICovCisJVEFJTFFfRU5UUlkoc2N0cF9zdHJlYW1fb3V0KSBuZXh0X3Nwb2tlOworCS8qIHBy
aW9yaXR5IGlkICovCisJdWludDE2X3QgcHJpb3JpdHk7Cit9OworCisvKiBGYWlyIEJhbmR3aWR0
aCBzY2hlZHVsZXIgKi8KK3N0cnVjdCBzc19mYiB7CisJLyogbmV4dCBsaW5rIGluIHdoZWVsICov
CisJVEFJTFFfRU5UUlkoc2N0cF9zdHJlYW1fb3V0KSBuZXh0X3Nwb2tlOworCS8qIHN0b3JlcyBt
ZXNzYWdlIHNpemUgKi8KKwlpbnQzMl90IHJvdW5kczsKK307CisKKy8qCisgKiBUaGlzIHVuaW9u
IGhvbGRzIGFsbCBwYXJhbWV0ZXJzIHBlciBzdHJlYW0KKyAqIG5lY2Vzc2FyeSBmb3IgZGlmZmVy
ZW50IHN0cmVhbSBzY2hlZHVsZXJzLgorICovCit1bmlvbiBzY2hlZHVsaW5nX3BhcmFtZXRlcnMg
eworCXN0cnVjdCBzc19yciBycjsKKwlzdHJ1Y3Qgc3NfcHJpbyBwcmlvOworCXN0cnVjdCBzc19m
YiBmYjsKK307CisKKy8qIFN0YXRlcyBmb3Igb3V0Z29pbmcgc3RyZWFtcyAqLworI2RlZmluZSBT
Q1RQX1NUUkVBTV9DTE9TRUQgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgU0NUUF9TVFJFQU1fT1BF
TklORyAgICAgICAgICAweDAxCisjZGVmaW5lIFNDVFBfU1RSRUFNX09QRU4gICAgICAgICAgICAg
MHgwMgorI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9QRU5ESU5HICAgIDB4MDMKKyNkZWZpbmUg
U0NUUF9TVFJFQU1fUkVTRVRfSU5fRkxJR0hUICAweDA0CisKKy8qIFRoaXMgc3RydWN0IGlzIHVz
ZWQgdG8gdHJhY2sgdGhlIHRyYWZmaWMgb24gb3V0Ym91bmQgc3RyZWFtcyAqLworc3RydWN0IHNj
dHBfc3RyZWFtX291dCB7CisJc3RydWN0IHNjdHBfc3RyZWFtaGVhZCBvdXRxdWV1ZTsKKwl1bmlv
biBzY2hlZHVsaW5nX3BhcmFtZXRlcnMgc3NfcGFyYW1zOworCXVpbnQzMl90IGNodW5rc19vbl9x
dWV1ZXM7ICAgICAgLyogc2VuZCBxdWV1ZSBhbmQgc2VudCBxdWV1ZSAqLworI2lmIGRlZmluZWQo
U0NUUF9ERVRBSUxFRF9TVFJfU1RBVFMpCisJdWludDMyX3QgYWJhbmRvbmVkX3Vuc2VudFtTQ1RQ
X1BSX1NDVFBfTUFYICsgMV07CisJdWludDMyX3QgYWJhbmRvbmVkX3NlbnRbU0NUUF9QUl9TQ1RQ
X01BWCArIDFdOworI2Vsc2UKKwkvKiBPbmx5IHRoZSBhZ2dyZWdhdGlvbiAqLworCXVpbnQzMl90
IGFiYW5kb25lZF91bnNlbnRbMV07CisJdWludDMyX3QgYWJhbmRvbmVkX3NlbnRbMV07CisjZW5k
aWYKKwkvKiBGb3IgYXNzb2NpYXRpb25zIHVzaW5nIERBVEEgY2h1bmtzLCB0aGUgbG93ZXIgMTYt
Yml0IG9mCisJICogbmV4dF9taWRfb3JkZXJlZCBhcmUgdXNlZCBhcyB0aGUgbmV4dCBTU04uCisJ
ICovCisJdWludDMyX3QgbmV4dF9taWRfb3JkZXJlZDsKKwl1aW50MzJfdCBuZXh0X21pZF91bm9y
ZGVyZWQ7CisJdWludDE2X3Qgc2lkOworCXVpbnQ4X3QgbGFzdF9tc2dfaW5jb21wbGV0ZTsKKwl1
aW50OF90IHN0YXRlOworfTsKKworI2RlZmluZSBTQ1RQX01BWF9TVFJFQU1TX0FUX09OQ0VfUkVT
RVQgMjAwCisKKy8qIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgYWRkcmVzc2VzIHlldCB0byB0
cnkgdG8gYWRkL2RlbGV0ZSAqLworVEFJTFFfSEVBRChzY3RwX2FzY29uZl9hZGRyaGVhZCwgc2N0
cF9hc2NvbmZfYWRkcik7CitzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkciB7CisJVEFJTFFfRU5UUlko
c2N0cF9hc2NvbmZfYWRkcikgbmV4dDsKKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkcl9wYXJhbSBh
cDsKKwlzdHJ1Y3Qgc2N0cF9pZmEgKmlmYTsJLyogc2F2ZSB0aGUgaWZhIGZvciBhZGQvZGVsIGlw
ICovCisJdWludDhfdCBzZW50OwkJLyogaGFzIHRoaXMgYmVlbiBzZW50IHlldD8gKi8KKwl1aW50
OF90IHNwZWNpYWxfZGVsOwkvKiBub3QgdG8gYmUgdXNlZCBpbiBsb29rdXAgKi8KK307CisKK3N0
cnVjdCBzY3RwX3Njb3BpbmcgeworCXVpbnQ4X3QgaXB2NF9hZGRyX2xlZ2FsOworCXVpbnQ4X3Qg
aXB2Nl9hZGRyX2xlZ2FsOworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwl1aW50OF90IGNv
bm5fYWRkcl9sZWdhbDsKKyNlbmRpZgorCXVpbnQ4X3QgbG9vcGJhY2tfc2NvcGU7CisJdWludDhf
dCBpcHY0X2xvY2FsX3Njb3BlOworCXVpbnQ4X3QgbG9jYWxfc2NvcGU7CisJdWludDhfdCBzaXRl
X3Njb3BlOworfTsKKworI2RlZmluZSBTQ1RQX1RTTl9MT0dfU0laRSA0MAorCitzdHJ1Y3Qgc2N0
cF90c25fbG9nIHsKKwl2b2lkICAgICAqc3RjYjsKKwl1aW50MzJfdCB0c247CisJdWludDMyX3Qg
c2VxOworCXVpbnQxNl90IHN0cm07CisJdWludDE2X3Qgc3o7CisJdWludDE2X3QgZmxnczsKKwl1
aW50MTZfdCBpbl9wb3M7CisJdWludDE2X3QgaW5fb3V0OworCXVpbnQxNl90IHJlc3Y7Cit9Owor
CisjZGVmaW5lIFNDVFBfRlNfU1BFQ19MT0dfU0laRSAyMDAKK3N0cnVjdCBzY3RwX2ZzX3NwZWNf
bG9nIHsKKwl1aW50MzJfdCBzZW50OworCXVpbnQzMl90IHRvdGFsX2ZsaWdodDsKKwl1aW50MzJf
dCB0c247CisJdWludDE2X3QgYm9vazsKKwl1aW50OF90IGluY3I7CisJdWludDhfdCBkZWNyOwor
fTsKKworLyogVGhpcyBzdHJ1Y3QgaXMgaGVyZSB0byBjdXQgb3V0IHRoZSBjb21wYXRpYWJpbHR5
CisgKiBwYWQgdGhhdCBidWxrcyB1cCBib3RoIHRoZSBpbnAgYW5kIHN0Y2IuIFRoZSBub24KKyAq
IHBhZCBwb3J0aW9uIE1VU1Qgc3RheSBpbiBjb21wbGV0ZSBzeW5jIHdpdGgKKyAqIHNjdHBfc25k
cmN2aW5mby4uLiBpLmUuIGlmIHNpbmZvX3h4eHggaXMgYWRkZWQKKyAqIHRoaXMgbXVzdCBiZSBk
b25lIGhlcmUgdG9vLgorICovCitzdHJ1Y3Qgc2N0cF9ub25wYWRfc25kcmN2aW5mbyB7CisJdWlu
dDE2X3Qgc2luZm9fc3RyZWFtOworCXVpbnQxNl90IHNpbmZvX3NzbjsKKwl1aW50MTZfdCBzaW5m
b19mbGFnczsKKwl1aW50MzJfdCBzaW5mb19wcGlkOworCXVpbnQzMl90IHNpbmZvX2NvbnRleHQ7
CisJdWludDMyX3Qgc2luZm9fdGltZXRvbGl2ZTsKKwl1aW50MzJfdCBzaW5mb190c247CisJdWlu
dDMyX3Qgc2luZm9fY3VtdHNuOworCXNjdHBfYXNzb2NfdCBzaW5mb19hc3NvY19pZDsKKwl1aW50
MTZfdCBzaW5mb19rZXludW1iZXI7CisJdWludDE2X3Qgc2luZm9fa2V5bnVtYmVyX3ZhbGlkOwor
fTsKKworLyoKKyAqIEpSUyAtIFN0cnVjdHVyZSB0byBob2xkIGZ1bmN0aW9uIHBvaW50ZXJzIHRv
IHRoZSBmdW5jdGlvbnMgcmVzcG9uc2libGUKKyAqIGZvciBjb25nZXN0aW9uIGNvbnRyb2wuCisg
Ki8KKworc3RydWN0IHNjdHBfY2NfZnVuY3Rpb25zIHsKKwl2b2lkICgqc2N0cF9zZXRfaW5pdGlh
bF9jY19wYXJhbSkoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQp
OworCXZvaWQgKCpzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3NhY2spKHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9h
c3NvY2lhdGlvbiAqYXNvYywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgYWNjdW1fbW92ZWQgLGludCByZW5lZ2VkX2FsbCwgaW50IHdpbGxfZXhpdCk7CisJdm9pZCAo
KnNjdHBfY3duZF91cGRhdGVfZXhpdF9wZikoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qg
c2N0cF9uZXRzICpuZXQpOworCXZvaWQgKCpzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX2ZyKShzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyk7CisJ
dm9pZCAoKnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfdGltZW91dCkoc3RydWN0IHNjdHBfdGNiICpz
dGNiLAorCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0KTsKKwl2b2lkICgqc2N0cF9jd25kX3VwZGF0
ZV9hZnRlcl9lY25fZWNobykoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkJc3RydWN0IHNjdHBf
bmV0cyAqbmV0LCBpbnQgaW5fd2luZG93LCBpbnQgbnVtX3BrdF9sb3N0KTsKKwl2b2lkICgqc2N0
cF9jd25kX3VwZGF0ZV9hZnRlcl9wYWNrZXRfZHJvcHBlZCkoc3RydWN0IHNjdHBfdGNiICpzdGNi
LAorCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0LCBzdHJ1Y3Qgc2N0cF9wa3Rkcm9wX2NodW5rICpj
cCwKKwkJCXVpbnQzMl90ICpib3R0bGVfYncsIHVpbnQzMl90ICpvbl9xdWV1ZSk7CisJdm9pZCAo
KnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfb3V0cHV0KShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJ
CQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIGludCBidXJzdF9saW1pdCk7CisJdm9pZCAoKnNjdHBf
Y3duZF91cGRhdGVfcGFja2V0X3RyYW5zbWl0dGVkKShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJ
CQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpOworCXZvaWQgKCpzY3RwX2N3bmRfdXBkYXRlX3Rzbl9h
Y2tub3dsZWRnZWQpKHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKKwkJCXN0cnVjdCBzY3RwX3RtaXRf
Y2h1bmsgKik7CisJdm9pZCAoKnNjdHBfY3duZF9uZXdfdHJhbnNtaXNzaW9uX2JlZ2lucykoc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLAorCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0KTsKKwl2b2lkICgq
c2N0cF9jd25kX3ByZXBhcmVfbmV0X2Zvcl9zYWNrKShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJ
CQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpOworCWludCAoKnNjdHBfY3duZF9zb2NrZXRfb3B0aW9u
KShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCBzZXQsIHN0cnVjdCBzY3RwX2NjX29wdGlvbiAq
KTsKKwl2b2lkICgqc2N0cF9ydHRfY2FsY3VsYXRlZCkoc3RydWN0IHNjdHBfdGNiICosIHN0cnVj
dCBzY3RwX25ldHMgKiwgc3RydWN0IHRpbWV2YWwgKik7Cit9OworCisvKgorICogUlMgLSBTdHJ1
Y3R1cmUgdG8gaG9sZCBmdW5jdGlvbiBwb2ludGVycyB0byB0aGUgZnVuY3Rpb25zIHJlc3BvbnNp
YmxlCisgKiBmb3Igc3RyZWFtIHNjaGVkdWxpbmcuCisgKi8KK3N0cnVjdCBzY3RwX3NzX2Z1bmN0
aW9ucyB7CisJdm9pZCAoKnNjdHBfc3NfaW5pdCkoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1
Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKwkJaW50IGhvbGRzX2xvY2spOworCXZvaWQgKCpz
Y3RwX3NzX2NsZWFyKShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0
aW9uICphc29jLAorCQlpbnQgY2xlYXJfdmFsdWVzLCBpbnQgaG9sZHNfbG9jayk7CisJdm9pZCAo
KnNjdHBfc3NfaW5pdF9zdHJlYW0pKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBf
c3RyZWFtX291dCAqc3RycSwgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqd2l0aF9zdHJxKTsKKwl2
b2lkICgqc2N0cF9zc19hZGRfdG9fc3RyZWFtKShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVj
dCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJx
LCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3AsIGludCBob2xkc19sb2NrKTsK
KwlpbnQgKCpzY3RwX3NzX2lzX2VtcHR5KShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBz
Y3RwX2Fzc29jaWF0aW9uICphc29jKTsKKwl2b2lkICgqc2N0cF9zc19yZW1vdmVfZnJvbV9zdHJl
YW0pKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2Ms
CisJCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsIHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1
ZV9wZW5kaW5nICpzcCwgaW50IGhvbGRzX2xvY2spOworCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQq
ICgqc2N0cF9zc19zZWxlY3Rfc3RyZWFtKShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCXN0cnVj
dCBzY3RwX25ldHMgKm5ldCwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpOworCXZvaWQg
KCpzY3RwX3NzX3NjaGVkdWxlZCkoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9u
ZXRzICpuZXQsCisJCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCBzdHJ1Y3Qgc2N0cF9z
dHJlYW1fb3V0ICpzdHJxLCBpbnQgbW92ZWRfaG93X211Y2gpOworCXZvaWQgKCpzY3RwX3NzX3Bh
Y2tldF9kb25lKShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwK
KwkJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpOworCWludCAoKnNjdHBfc3NfZ2V0X3Zh
bHVlKShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29j
LAorCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxLCB1aW50MTZfdCAqdmFsdWUpOworCWlu
dCAoKnNjdHBfc3Nfc2V0X3ZhbHVlKShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3Rw
X2Fzc29jaWF0aW9uICphc29jLAorCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxLCB1aW50
MTZfdCB2YWx1ZSk7CisJaW50ICgqc2N0cF9zc19pc191c2VyX21zZ3NfaW5jb21wbGV0ZSkoc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyk7Cit9Owor
CisvKiB1c2VkIHRvIHNhdmUgQVNDT05GIGNodW5rcyBmb3IgcmV0cmFuc21pc3Npb24gKi8KK1RB
SUxRX0hFQUQoc2N0cF9hc2NvbmZfaGVhZCwgc2N0cF9hc2NvbmYpOworc3RydWN0IHNjdHBfYXNj
b25mIHsKKwlUQUlMUV9FTlRSWShzY3RwX2FzY29uZikgbmV4dDsKKwl1aW50MzJfdCBzZXJpYWxf
bnVtYmVyOworCXVpbnQxNl90IHNuZF9jb3VudDsKKwlzdHJ1Y3QgbWJ1ZiAqZGF0YTsKKwl1aW50
MTZfdCBsZW47Cit9OworCisvKiB1c2VkIHRvIHNhdmUgQVNDT05GLUFDSyBjaHVua3MgZm9yIHJl
dHJhbnNtaXNzaW9uICovCitUQUlMUV9IRUFEKHNjdHBfYXNjb25mX2Fja2hlYWQsIHNjdHBfYXNj
b25mX2Fjayk7CitzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWNrIHsKKwlUQUlMUV9FTlRSWShzY3RwX2Fz
Y29uZl9hY2spIG5leHQ7CisJdWludDMyX3Qgc2VyaWFsX251bWJlcjsKKwlzdHJ1Y3Qgc2N0cF9u
ZXRzICpsYXN0X3NlbnRfdG87CisJc3RydWN0IG1idWYgKmRhdGE7CisJdWludDE2X3QgbGVuOwor
fTsKKworLyoKKyAqIEhlcmUgd2UgaGF2ZSBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIGluZGl2aWR1
YWwgYXNzb2NpYXRpb24gdGhhdCB3ZSB0cmFjay4KKyAqIFdlIHByb2JhYmx5IGluIHByb2R1Y3Rp
b24gd291bGQgYmUgbW9yZSBkeW5hbWljLiBCdXQgZm9yIGVhc2Ugb2YKKyAqIGltcGxlbWVudGF0
aW9uIHdlIHdpbGwgaGF2ZSBhIGZpeGVkIGFycmF5IHRoYXQgd2UgaHVudCBmb3IgaW4gYSBsaW5l
YXIKKyAqIGZhc2hpb24uCisgKi8KK3N0cnVjdCBzY3RwX2Fzc29jaWF0aW9uIHsKKwkvKiBhc3Nv
Y2lhdGlvbiBzdGF0ZSAqLworCWludCBzdGF0ZTsKKworCS8qIHF1ZXVlIG9mIHBlbmRpbmcgYWRk
cnMgdG8gYWRkL2RlbGV0ZSAqLworCXN0cnVjdCBzY3RwX2FzY29uZl9hZGRyaGVhZCBhc2NvbmZf
cXVldWU7CisKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lX2VudGVyZWQ7CS8qIHRpbWUgd2UgZW50ZXJl
ZCBzdGF0ZSAqLworCXN0cnVjdCB0aW1ldmFsIHRpbWVfbGFzdF9yY3ZkOworCXN0cnVjdCB0aW1l
dmFsIHRpbWVfbGFzdF9zZW50OworCXN0cnVjdCB0aW1ldmFsIHRpbWVfbGFzdF9zYXRfYWR2YW5j
ZTsKKwlzdHJ1Y3Qgc2N0cF9ub25wYWRfc25kcmN2aW5mbyBkZWZfc2VuZDsKKworCS8qIHRpbWVy
cyBhbmQgc3VjaCAqLworCXN0cnVjdCBzY3RwX3RpbWVyIGRhY2tfdGltZXI7CQkvKiBEZWxheWVk
IGFjayB0aW1lciAqLworCXN0cnVjdCBzY3RwX3RpbWVyIGFzY29uZl90aW1lcjsJCS8qIGFzY29u
ZiAqLworCXN0cnVjdCBzY3RwX3RpbWVyIHN0cnJlc2V0X3RpbWVyOwkvKiBzdHJlYW0gcmVzZXQg
Ki8KKwlzdHJ1Y3Qgc2N0cF90aW1lciBzaHV0X2d1YXJkX3RpbWVyOwkvKiBzaHV0ZG93biBndWFy
ZCAqLworCXN0cnVjdCBzY3RwX3RpbWVyIGF1dG9jbG9zZV90aW1lcjsJLyogYXV0b21hdGljIGNs
b3NlIHRpbWVyICovCisJc3RydWN0IHNjdHBfdGltZXIgZGVsZXRlX3ByaW1fdGltZXI7CS8qIGRl
bGV0aW5nIHByaW1hcnkgZHN0ICovCisKKwkvKiBsaXN0IG9mIHJlc3RyaWN0ZWQgbG9jYWwgYWRk
cmVzc2VzICovCisJc3RydWN0IHNjdHBsYWRkciBzY3RwX3Jlc3RyaWN0ZWRfYWRkcnM7CisKKwkv
KiBsYXN0IGxvY2FsIGFkZHJlc3MgcGVuZGluZyBkZWxldGlvbiAod2FpdGluZyBmb3IgYW4gYWRk
cmVzcyBhZGQpICovCisJc3RydWN0IHNjdHBfaWZhICphc2NvbmZfYWRkcl9kZWxfcGVuZGluZzsK
KwkvKiBEZWxldGVkIHByaW1hcnkgZGVzdGluYXRpb24gKHVzZWQgdG8gc3RvcCB0aW1lcikgKi8K
KwlzdHJ1Y3Qgc2N0cF9uZXRzICpkZWxldGVkX3ByaW1hcnk7CisKKwlzdHJ1Y3Qgc2N0cG5ldGxp
c3RoZWFkIG5ldHM7CQkvKiByZW1vdGUgYWRkcmVzcyBsaXN0ICovCisKKwkvKiBGcmVlIGNodW5r
IGxpc3QgKi8KKwlzdHJ1Y3Qgc2N0cGNodW5rX2xpc3RoZWFkIGZyZWVfY2h1bmtzOworCisJLyog
Q29udHJvbCBjaHVuayBxdWV1ZSAqLworCXN0cnVjdCBzY3RwY2h1bmtfbGlzdGhlYWQgY29udHJv
bF9zZW5kX3F1ZXVlOworCisJLyogQVNDT05GIGNodW5rIHF1ZXVlICovCisJc3RydWN0IHNjdHBj
aHVua19saXN0aGVhZCBhc2NvbmZfc2VuZF9xdWV1ZTsKKworCS8qCisJICogT25jZSBhIFRTTiBo
aXRzIHRoZSB3aXJlIGl0IGlzIG1vdmVkIHRvIHRoZSBzZW50X3F1ZXVlLiBXZQorCSAqIG1haW50
YWluIHR3byBjb3VudHMgaGVyZSAoZG9uJ3Qga25vdyBpZiBhbnkgYnV0IHJldHJhbl9jbnQgaXMK
KwkgKiBuZWVkZWQpLiBUaGUgaWRlYSBpcyB0aGF0IHRoZSBzZW50X3F1ZXVlX3JldHJhbl9jbnQg
cmVmbGVjdHMgaG93CisJICogbWFueSBjaHVua3MgaGF2ZSBiZWVuIG1hcmtlZCBmb3IgcmV0cmFu
bWlzc2lvbiBieSBlaXRoZXIgVDMtcnh0CisJICogb3IgRlIuCisJICovCisJc3RydWN0IHNjdHBj
aHVua19saXN0aGVhZCBzZW50X3F1ZXVlOworCXN0cnVjdCBzY3RwY2h1bmtfbGlzdGhlYWQgc2Vu
ZF9xdWV1ZTsKKworCS8qIFNjaGVkdWxpbmcgcXVldWVzICovCisJc3RydWN0IHNjaGVkdWxpbmdf
ZGF0YSBzc19kYXRhOworCisJLyogSWYgYW4gaXRlcmF0b3IgaXMgbG9va2luZyBhdCBtZSwgdGhp
cyBpcyBpdCAqLworCXN0cnVjdCBzY3RwX2l0ZXJhdG9yICpzdGNiX3N0YXJ0aW5nX3BvaW50X2Zv
cl9pdGVyYXRvcjsKKworCS8qIEFTQ09ORiBzYXZlIHRoZSBsYXN0IEFTQ09ORi1BQ0sgc28gd2Ug
Y2FuIHJlc2VuZCBpdCBpZiBuZWNlc3NhcnkgKi8KKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWNraGVh
ZCBhc2NvbmZfYWNrX3NlbnQ7CisKKwkvKgorCSAqIHBvaW50ZXIgdG8gbGFzdCBzdHJlYW0gcmVz
ZXQgcXVldWVkIHRvIGNvbnRyb2wgcXVldWUgYnkgdXMgd2l0aAorCSAqIHJlcXVlc3RzLgorCSAq
LworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKnN0cl9yZXNldDsKKwkvKgorCSAqIGlmIFNvdXJj
ZSBBZGRyZXNzIFNlbGVjdGlvbiBoYXBwZW5pbmcsIHRoaXMgd2lsbCByb3RhdGUgdGhyb3VnaAor
CSAqIHRoZSBsaW5rIGxpc3QuCisJICovCisJc3RydWN0IHNjdHBfbGFkZHIgKmxhc3RfdXNlZF9h
ZGRyZXNzOworCisJLyogc3RyZWFtIGFycmF5cyAqLworCXN0cnVjdCBzY3RwX3N0cmVhbV9pbiAq
c3RybWluOworCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cm1vdXQ7CisJdWludDhfdCAqbWFw
cGluZ19hcnJheTsKKwkvKiBwcmltYXJ5IGRlc3RpbmF0aW9uIHRvIHVzZSAqLworCXN0cnVjdCBz
Y3RwX25ldHMgKnByaW1hcnlfZGVzdGluYXRpb247CisJc3RydWN0IHNjdHBfbmV0cyAqYWx0ZXJu
YXRlOyAvKiBJZiBwcmltYXJ5IGlzIGRvd24gb3IgUEYgKi8KKwkvKiBGb3IgQ01UICovCisJc3Ry
dWN0IHNjdHBfbmV0cyAqbGFzdF9uZXRfY210X3NlbmRfc3RhcnRlZDsKKwkvKiBsYXN0IHBsYWNl
IEkgZ290IGEgZGF0YSBjaHVuayBmcm9tICovCisJc3RydWN0IHNjdHBfbmV0cyAqbGFzdF9kYXRh
X2NodW5rX2Zyb207CisJLyogbGFzdCBwbGFjZSBJIGdvdCBhIGNvbnRyb2wgZnJvbSAqLworCXN0
cnVjdCBzY3RwX25ldHMgKmxhc3RfY29udHJvbF9jaHVua19mcm9tOworCisJLyoKKwkgKiB3YWl0
IHRvIHRoZSBwb2ludCB0aGUgY3VtLWFjayBwYXNzZXMgcmVxLT5zZW5kX3Jlc2V0X2F0X3RzbiBm
b3IKKwkgKiBhbnkgcmVxIG9uIHRoZSBsaXN0LgorCSAqLworCXN0cnVjdCBzY3RwX3Jlc2V0aGVh
ZCByZXNldEhlYWQ7CisKKwkvKiBxdWV1ZSBvZiBjaHVua3Mgd2FpdGluZyB0byBiZSBzZW50IGlu
dG8gdGhlIGxvY2FsIHN0YWNrICovCisJc3RydWN0IHNjdHBfcmVhZGhlYWQgcGVuZGluZ19yZXBs
eV9xdWV1ZTsKKworCS8qIEpSUyAtIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgZnVuY3Rpb25zIGFy
ZSBpbiB0aGlzIHN0cnVjdCAqLworCXN0cnVjdCBzY3RwX2NjX2Z1bmN0aW9ucyBjY19mdW5jdGlv
bnM7CisJLyogSlJTIC0gdmFsdWUgdG8gc3RvcmUgdGhlIGN1cnJlbnRseSBsb2FkZWQgY29uZ2Vz
dGlvbiBjb250cm9sIG1vZHVsZSAqLworCXVpbnQzMl90IGNvbmdlc3Rpb25fY29udHJvbF9tb2R1
bGU7CisJLyogUlMgLSB0aGUgc3RyZWFtIHNjaGVkdWxpbmcgZnVuY3Rpb25zIGFyZSBpbiB0aGlz
IHN0cnVjdCAqLworCXN0cnVjdCBzY3RwX3NzX2Z1bmN0aW9ucyBzc19mdW5jdGlvbnM7CisJLyog
UlMgLSB2YWx1ZSB0byBzdG9yZSB0aGUgY3VycmVudGx5IGxvYWRlZCBzdHJlYW0gc2NoZWR1bGlu
ZyBtb2R1bGUgKi8KKwl1aW50MzJfdCBzdHJlYW1fc2NoZWR1bGluZ19tb2R1bGU7CisKKwl1aW50
MzJfdCB2cmZfaWQ7CisJdWludDMyX3QgY29va2llX3ByZXNlcnZlX3JlcTsKKwkvKiBBU0NPTkYg
bmV4dCBzZXEgSSBhbSBzZW5kaW5nIG91dCwgaW5pdHMgYXQgaW5pdC10c24gKi8KKwl1aW50MzJf
dCBhc2NvbmZfc2VxX291dDsKKwl1aW50MzJfdCBhc2NvbmZfc2VxX291dF9hY2tlZDsKKwkvKiBB
U0NPTkYgbGFzdCByZWNlaXZlZCBBU0NPTkYgZnJvbSBwZWVyLCBzdGFydHMgYXQgcGVlcidzIFRT
Ti0xICovCisJdWludDMyX3QgYXNjb25mX3NlcV9pbjsKKworCS8qIG5leHQgc2VxIEkgYW0gc2Vu
ZGluZyBpbiBzdHIgcmVzZXQgbWVzc2FnZXMgKi8KKwl1aW50MzJfdCBzdHJfcmVzZXRfc2VxX291
dDsKKwkvKiBuZXh0IHNlcSBJIGFtIGV4cGVjdGluZyBpbiBzdHIgcmVzZXQgbWVzc2FnZXMgKi8K
Kwl1aW50MzJfdCBzdHJfcmVzZXRfc2VxX2luOworCisJLyogdmFyaW91cyB2ZXJpZmljYXRpb24g
dGFnIGluZm9ybWF0aW9uICovCisJdWludDMyX3QgbXlfdnRhZzsJLyogVGhlIHRhZyB0byBiZSB1
c2VkLiBpZiBhc3NvYyBpcyByZS1pbml0aXRlZAorCQkJCSAqIGJ5IHJlbW90ZSBlbmQsIGFuZCBJ
IGhhdmUgdW5sb2NrZWQgdGhpcworCQkJCSAqIHdpbGwgYmUgcmVnZW5lcmF0ZWQgdG8gYSBuZXcg
cmFuZG9tIHZhbHVlLiAqLworCXVpbnQzMl90IHBlZXJfdnRhZzsJLyogVGhlIHBlZXJzIGxhc3Qg
dGFnICovCisKKwl1aW50MzJfdCBteV92dGFnX25vbmNlOworCXVpbnQzMl90IHBlZXJfdnRhZ19u
b25jZTsKKworCXVpbnQzMl90IGFzc29jX2lkOworCisJLyogVGhpcyBpcyB0aGUgU0NUUCBmcmFn
bWVudGF0aW9uIHRocmVzaG9sZCAqLworCXVpbnQzMl90IHNtYWxsZXN0X210dTsKKworCS8qCisJ
ICogU3BlY2lhbCBob29rIGZvciBGYXN0IHJldHJhbnNtaXQsIGFsbG93cyB1cyB0byB0cmFjayB0
aGUgaGlnaGVzdAorCSAqIFRTTiB0aGF0IGlzIE5FVyBpbiB0aGlzIFNBQ0sgaWYgZ2FwIGFjayBi
bG9ja3MgYXJlIHByZXNlbnQuCisJICovCisJdWludDMyX3QgdGhpc19zYWNrX2hpZ2hlc3RfZ2Fw
OworCisJLyoKKwkgKiBUaGUgaGlnaGVzdCBjb25zZWN1dGl2ZSBUU04gdGhhdCBoYXMgYmVlbiBh
Y2tlZCBieSBwZWVyIG9uIG15CisJICogc2VuZHMKKwkgKi8KKwl1aW50MzJfdCBsYXN0X2Fja2Vk
X3NlcTsKKworCS8qIFRoZSBuZXh0IFRTTiB0aGF0IEkgd2lsbCB1c2UgaW4gc2VuZGluZy4gKi8K
Kwl1aW50MzJfdCBzZW5kaW5nX3NlcTsKKworCS8qIE9yaWdpbmFsIHNlcSBudW1iZXIgSSB1c2Vk
ID8/cXVlc3Rpb25hYmxlIHRvIGtlZXA/PyAqLworCXVpbnQzMl90IGluaXRfc2VxX251bWJlcjsK
KworCS8qIFRoZSBBZHZhbmNlZCBQZWVyIEFjayBQb2ludCwgYXMgcmVxdWlyZWQgYnkgdGhlIFBS
LVNDVFAgKi8KKwkvKiAoQTEgaW4gU2VjdGlvbiA0LjIpICovCisJdWludDMyX3QgYWR2YW5jZWRf
cGVlcl9hY2tfcG9pbnQ7CisKKwkvKgorCSAqIFRoZSBoaWdoZXN0IGNvbnNlcXVldGl2ZSBUU04g
YXQgdGhlIGJvdHRvbSBvZiB0aGUgbWFwcGluZyBhcnJheQorCSAqIChmb3IgaGlzIHNlbmRzKS4K
KwkgKi8KKwl1aW50MzJfdCBjdW11bGF0aXZlX3RzbjsKKwkvKgorCSAqIFVzZWQgdG8gdHJhY2sg
dGhlIG1hcHBpbmcgYXJyYXkgYW5kIGl0cyBvZmZzZXQgYml0cy4gVGhpcyBNQVkgYmUKKwkgKiBs
b3dlciB0aGVuIGN1bXVsYXRpdmVfdHNuLgorCSAqLworCXVpbnQzMl90IG1hcHBpbmdfYXJyYXlf
YmFzZV90c247CisJLyoKKwkgKiB1c2VkIHRvIHRyYWNrIGhpZ2hlc3QgVFNOIHdlIGhhdmUgcmVj
ZWl2ZWQgYW5kIGlzIGxpc3RlZCBpbiB0aGUKKwkgKiBtYXBwaW5nIGFycmF5LgorCSAqLworCXVp
bnQzMl90IGhpZ2hlc3RfdHNuX2luc2lkZV9tYXA7CisKKwkvKiBFWSAtIG5ldyBOUiB2YXJpYWJs
ZXMgdXNlZCBmb3IgbnJfc2FjayBiYXNlZCBvbiBtYXBwaW5nX2FycmF5Ki8KKwl1aW50OF90ICpu
cl9tYXBwaW5nX2FycmF5OworCXVpbnQzMl90IGhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXA7CisK
Kwl1aW50MzJfdCBmYXN0X3JlY292ZXJ5X3RzbjsKKwl1aW50MzJfdCBzYXRfdDNfcmVjb3Zlcnlf
dHNuOworCXVpbnQzMl90IHRzbl9sYXN0X2RlbGl2ZXJlZDsKKwkvKgorCSAqIEZvciB0aGUgcGQt
YXBpIHdlIHNob3VsZCByZS13cml0ZSB0aGlzIGEgYml0IG1vcmUgZWZmaWNpZW50LiBXZQorCSAq
IGNvdWxkIGhhdmUgbXVsdGlwbGUgc2N0cF9xdWV1ZWRfdG9fcmVhZCdzIHRoYXQgd2UgYXJlIGJ1
aWxkaW5nIGF0CisJICogb25jZS4gTm93IHdlIG9ubHkgZG8gdGhpcyB3aGVuIHdlIGdldCByZWFk
eSB0byBkZWxpdmVyIHRvIHRoZQorCSAqIHNvY2tldCBidWZmZXIuIE5vdGUgdGhhdCB3ZSBkZXBl
bmQgb24gdGhlIGZhY3QgdGhhdCB0aGUgc3RydWN0IGlzCisJICogInN0dWNrIiBvbiB0aGUgcmVh
ZCBxdWV1ZSB1bnRpbCB3ZSBmaW5pc2ggYWxsIHRoZSBwZC1hcGkuCisJICovCisJc3RydWN0IHNj
dHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2xfcGRhcGk7CisKKwl1aW50MzJfdCB0c25fb2ZfcGRh
cGlfbGFzdF9kZWxpdmVyZWQ7CisJdWludDMyX3QgcGRhcGlfcHBpZDsKKwl1aW50MzJfdCBjb250
ZXh0OworCXVpbnQzMl90IGxhc3RfcmVzZXRfYWN0aW9uW1NDVFBfTUFYX1JFU0VUX1BBUkFNU107
CisJdWludDMyX3QgbGFzdF9zZW5kaW5nX3NlcVtTQ1RQX01BWF9SRVNFVF9QQVJBTVNdOworCXVp
bnQzMl90IGxhc3RfYmFzZV90c25zZW50W1NDVFBfTUFYX1JFU0VUX1BBUkFNU107CisjaWZkZWYg
U0NUUF9BU09DTE9HX09GX1RTTlMKKwkvKgorCSAqIHNwZWNpYWwgbG9nICAtIFRoaXMgYWRkcyBj
b25zaWRlcmFibGUgc2l6ZQorCSAqIHRvIHRoZSBhc29jLCBidXQgcHJvdmlkZXMgYSBsb2cgdGhh
dCB5b3UKKwkgKiBjYW4gdXNlIHRvIGRldGVjdCBwcm9ibGVtcyB2aWEga2dkYi4KKwkgKi8KKwlz
dHJ1Y3Qgc2N0cF90c25fbG9nICBpbl90c25sb2dbU0NUUF9UU05fTE9HX1NJWkVdOworCXN0cnVj
dCBzY3RwX3Rzbl9sb2cgIG91dF90c25sb2dbU0NUUF9UU05fTE9HX1NJWkVdOworCXVpbnQzMl90
IGN1bWFja19sb2dbU0NUUF9UU05fTE9HX1NJWkVdOworCXVpbnQzMl90IGN1bWFja19sb2dzbnRb
U0NUUF9UU05fTE9HX1NJWkVdOworCXVpbnQxNl90IHRzbl9pbl9hdDsKKwl1aW50MTZfdCB0c25f
b3V0X2F0OworCXVpbnQxNl90IHRzbl9pbl93cmFwcGVkOworCXVpbnQxNl90IHRzbl9vdXRfd3Jh
cHBlZDsKKwl1aW50MTZfdCBjdW1hY2tfbG9nX2F0OworCXVpbnQxNl90IGN1bWFja19sb2dfYXRz
bnQ7CisjZW5kaWYgLyogU0NUUF9BU09DTE9HX09GX1RTTlMgKi8KKyNpZmRlZiBTQ1RQX0ZTX1NQ
RUNfTE9HCisJc3RydWN0IHNjdHBfZnNfc3BlY19sb2cgZnNsb2dbU0NUUF9GU19TUEVDX0xPR19T
SVpFXTsKKwl1aW50MTZfdCBmc19pbmRleDsKKyNlbmRpZgorCisJLyoKKwkgKiB3aW5kb3cgc3Rh
dGUgaW5mb3JtYXRpb24gYW5kIHNtYWxsZXN0IE1UVSB0aGF0IEkgdXNlIHRvIGJvdW5kCisJICog
c2VnbWVudGF0aW9uCisJICovCisJdWludDMyX3QgcGVlcnNfcnduZDsKKwl1aW50MzJfdCBteV9y
d25kOworCXVpbnQzMl90IG15X2xhc3RfcmVwb3J0ZWRfcnduZDsKKwl1aW50MzJfdCBzY3RwX2Zy
YWdfcG9pbnQ7CisKKwl1aW50MzJfdCB0b3RhbF9vdXRwdXRfcXVldWVfc2l6ZTsKKworCXVpbnQz
Ml90IHNiX2NjOwkJICAgICAgIC8qIHNoYWRvdyBvZiBzYl9jYyAqLworCXVpbnQzMl90IHNiX3Nl
bmRfcmVzdjsgICAgIC8qIGFtb3VudCByZXNlcnZlZCBvbiBhIHNlbmQgKi8KKwl1aW50MzJfdCBt
eV9yd25kX2NvbnRyb2xfbGVuOyAvKiBzaGFkb3cgb2Ygc2JfbWJjbnQgdXNlZCBmb3IgcnduZCBj
b250cm9sICovCisjaWZkZWYgSU5FVDYKKwl1aW50MzJfdCBkZWZhdWx0X2Zsb3dsYWJlbDsKKyNl
bmRpZgorCXVpbnQzMl90IHByX3NjdHBfY250OworCWludCBjdHJsX3F1ZXVlX2NudDsJLyogY291
bGQgYmUgcmVtb3ZlZCAgUkVNIC0gTk8gSVQgQ0FOJ1QhISBSUlMgKi8KKwkvKgorCSAqIEFsbCBv
dXRib3VuZCBkYXRhZ3JhbXMgcXVldWUgaW50byB0aGlzIGxpc3QgZnJvbSB0aGUgaW5kaXZpZHVh
bAorCSAqIHN0cmVhbSBxdWV1ZS4gSGVyZSB0aGV5IGdldCBhc3NpZ25lZCBhIFRTTiBhbmQgdGhl
biBhd2FpdAorCSAqIHNlbmRpbmcuIFRoZSBzdHJlYW0gc2VxIGNvbWVzIHdoZW4gaXQgaXMgZmly
c3QgcHV0IGluIHRoZQorCSAqIGluZGl2aWR1YWwgc3RyIHF1ZXVlCisJICovCisJdW5zaWduZWQg
aW50IHN0cmVhbV9xdWV1ZV9jbnQ7CisJdW5zaWduZWQgaW50IHNlbmRfcXVldWVfY250OworCXVu
c2lnbmVkIGludCBzZW50X3F1ZXVlX2NudDsKKwl1bnNpZ25lZCBpbnQgc2VudF9xdWV1ZV9jbnRf
cmVtb3ZlYWJsZTsKKwkvKgorCSAqIE51bWJlciBvbiBzZW50IHF1ZXVlIHRoYXQgYXJlIG1hcmtl
ZCBmb3IgcmV0cmFuIHVudGlsIHRoaXMgdmFsdWUKKwkgKiBpcyAwIHdlIG9ubHkgc2VuZCBvbmUg
cGFja2V0IG9mIHJldHJhbidlZCBkYXRhLgorCSAqLworCXVuc2lnbmVkIGludCBzZW50X3F1ZXVl
X3JldHJhbl9jbnQ7CisKKwl1bnNpZ25lZCBpbnQgc2l6ZV9vbl9yZWFzbV9xdWV1ZTsKKwl1bnNp
Z25lZCBpbnQgY250X29uX3JlYXNtX3F1ZXVlOworCXVuc2lnbmVkIGludCBmd2RfdHNuX2NudDsK
KwkvKiBhbW91bnQgb2YgZGF0YSAoYnl0ZXMpIGN1cnJlbnRseSBpbiBmbGlnaHQgKG9uIGFsbCBk
ZXN0aW5hdGlvbnMpICovCisJdW5zaWduZWQgaW50IHRvdGFsX2ZsaWdodDsKKwkvKiBUb3RhbCBi
b29rIHNpemUgaW4gZmxpZ2h0ICovCisJdW5zaWduZWQgaW50IHRvdGFsX2ZsaWdodF9jb3VudDsJ
LyogY291bnQgb2YgY2h1bmtzIHVzZWQgd2l0aAorCQkJCQkJICogYm9vayB0b3RhbCAqLworCS8q
IGNvdW50IG9mIGRlc3RpbmF0b24gbmV0cyBhbmQgbGlzdCBvZiBkZXN0aW5hdGlvbiBuZXRzICov
CisJdW5zaWduZWQgaW50IG51bW5ldHM7CisKKwkvKiBUb3RhbCBlcnJvciBjb3VudCBvbiB0aGlz
IGFzc29jaWF0aW9uICovCisJdW5zaWduZWQgaW50IG92ZXJhbGxfZXJyb3JfY291bnQ7CisKKwl1
bnNpZ25lZCBpbnQgY250X21zZ19vbl9zYjsKKworCS8qIEFsbCBzdHJlYW0gY291bnQgb2YgY2h1
bmtzIGZvciBkZWxpdmVyeSAqLworCXVuc2lnbmVkIGludCBzaXplX29uX2FsbF9zdHJlYW1zOwor
CXVuc2lnbmVkIGludCBjbnRfb25fYWxsX3N0cmVhbXM7CisKKwkvKiBIZWFydCBCZWF0IGRlbGF5
IGluIG1zICovCisJdWludDMyX3QgaGVhcnRfYmVhdF9kZWxheTsKKworCS8qIGF1dG9jbG9zZSAq
LworCXVpbnQzMl90IHNjdHBfYXV0b2Nsb3NlX3RpY2tzOworCisJLyogaG93IG1hbnkgcHJlb3Bl
biBzdHJlYW1zIHdlIGhhdmUgKi8KKwl1bnNpZ25lZCBpbnQgcHJlX29wZW5fc3RyZWFtczsKKwor
CS8qIEhvdyBtYW55IHN0cmVhbXMgSSBzdXBwb3J0IGNvbWluZyBpbnRvIG1lICovCisJdW5zaWdu
ZWQgaW50IG1heF9pbmJvdW5kX3N0cmVhbXM7CisKKwkvKiB0aGUgY29va2llIGxpZmUgSSBhd2Fy
ZCBmb3IgYW55IGNvb2tpZSwgaW4gc2Vjb25kcyAqLworCXVpbnQzMl90IGNvb2tpZV9saWZlOwor
CS8qIHRpbWUgdG8gZGVsYXkgYWNrcyBmb3IgKi8KKwl1bnNpZ25lZCBpbnQgZGVsYXllZF9hY2s7
CisJdW5zaWduZWQgaW50IG9sZF9kZWxheWVkX2FjazsKKwl1bnNpZ25lZCBpbnQgc2Fja19mcmVx
OworCXVuc2lnbmVkIGludCBkYXRhX3BrdHNfc2VlbjsKKworCXVuc2lnbmVkIGludCBudW1kdXB0
c25zOworCWludCBkdXBfdHNuc1tTQ1RQX01BWF9EVVBfVFNOU107CisJdWludDMyX3QgaW5pdGlh
bF9pbml0X3J0b19tYXg7CS8qIGluaXRpYWwgUlRPIGZvciBJTklUJ3MgKi8KKwl1aW50MzJfdCBp
bml0aWFsX3J0bzsJLyogaW5pdGlhbCBzZW5kIFJUTyAqLworCXVpbnQzMl90IG1pbnJ0bzsJLyog
cGVyIGFzc29jIFJUTy1NSU4gKi8KKwl1aW50MzJfdCBtYXhydG87CS8qIHBlciBhc3NvYyBSVE8t
TUFYICovCisKKwkvKiBhdXRoZW50aWNhdGlvbiBmaWVsZHMgKi8KKwlzY3RwX2F1dGhfY2hrbGlz
dF90ICpsb2NhbF9hdXRoX2NodW5rczsKKwlzY3RwX2F1dGhfY2hrbGlzdF90ICpwZWVyX2F1dGhf
Y2h1bmtzOworCXNjdHBfaG1hY2xpc3RfdCAqbG9jYWxfaG1hY3M7CS8qIGxvY2FsIEhNQUNzIHN1
cHBvcnRlZCAqLworCXNjdHBfaG1hY2xpc3RfdCAqcGVlcl9obWFjczsJLyogcGVlciBITUFDcyBz
dXBwb3J0ZWQgKi8KKwlzdHJ1Y3Qgc2N0cF9rZXloZWFkIHNoYXJlZF9rZXlzOwkvKiBhc3NvYydz
IHNoYXJlZCBrZXlzICovCisJc2N0cF9hdXRoaW5mb190IGF1dGhpbmZvOwkvKiByYW5kb21zLCBj
YWNoZWQga2V5cyAqLworCS8qCisJICogcmVmY250IHRvIGJsb2NrIGZyZWVpbmcgd2hlbiBhIHNl
bmRlciBvciByZWNlaXZlciBpcyBvZmYgY29waW5nCisJICogdXNlciBkYXRhIGluLgorCSAqLwor
CXVpbnQzMl90IHJlZmNudDsKKwl1aW50MzJfdCBjaHVua3Nfb25fb3V0X3F1ZXVlOwkvKiB0b3Rh
bCBjaHVua3MgZmxvYXRpbmcgYXJvdW5kLAorCQkJCQkgKiBsb2NrZWQgYnkgc2VuZCBzb2NrZXQg
YnVmZmVyICovCisJdWludDMyX3QgcGVlcnNfYWRhcHRhdGlvbjsKKwl1aW50MzJfdCBkZWZhdWx0
X210dTsKKwl1aW50MTZfdCBwZWVyX2htYWNfaWQ7CS8qIHBlZXIgSE1BQyBpZCB0byBzZW5kICov
CisKKwkvKgorCSAqIEJlaW5nIHRoYXQgd2UgaGF2ZSBubyBiYWcgdG8gY29sbGVjdCBzdGFsZSBj
b29raWVzLCBhbmQgdGhhdCB3ZQorCSAqIHJlYWxseSB3b3VsZCBub3Qgd2FudCB0byBhbnl3YXku
LiB3ZSB3aWxsIGNvdW50IHRoZW0gaW4gdGhpcworCSAqIGNvdW50ZXIuIFdlIG9mIGNvdXJzZSBm
ZWVkIHRoZW0gdG8gdGhlIHBpZ2VvbnMgcmlnaHQgYXdheSAoSSBoYXZlCisJICogYWx3YXlzIHRo
b3VnaHQgb2YgcGlnZW9ucyBhcyBmbHlpbmcgcmF0cykuCisJICovCisJdWludDE2X3Qgc3RhbGVf
Y29va2llX2NvdW50OworCisJLyoKKwkgKiBGb3IgdGhlIHBhcnRpYWwgZGVsaXZlcnkgQVBJLCBp
ZiB1cCwgaW52b2tlZCB0aGlzIGlzIHdoYXQgbGFzdAorCSAqIFRTTiBJIGRlbGl2ZXJlZAorCSAq
LworCXVpbnQxNl90IHN0cl9vZl9wZGFwaTsKKwl1aW50MTZfdCBzc25fb2ZfcGRhcGk7CisKKwkv
KiBjb3VudHMgb2YgYWN0dWFsIGJ1aWx0IHN0cmVhbXMuIEFsbG9jYXRpb24gbWF5IGJlIG1vcmUg
aG93ZXZlciAqLworCS8qIGNvdWxkIHJlLWFycmFuZ2UgdG8gb3B0aW1pemUgc3BhY2UgaGVyZS4g
Ki8KKwl1aW50MTZfdCBzdHJlYW1pbmNudDsKKwl1aW50MTZfdCBzdHJlYW1vdXRjbnQ7CisJdWlu
dDE2X3Qgc3RybV9yZWFsb3V0c2l6ZTsKKwl1aW50MTZfdCBzdHJtX3BlbmRpbmdfYWRkX3NpemU7
CisJLyogbXkgbWF4aW11bSBudW1iZXIgb2YgcmV0cmFucyBvZiBJTklUIGFuZCBTRU5EICovCisJ
LyogY29waWVkIGZyb20gU0NUUCBidXQgc2hvdWxkIGJlIGluZGl2aWR1YWxseSBzZXRhYmxlICov
CisJdWludDE2X3QgbWF4X2luaXRfdGltZXM7CisJdWludDE2X3QgbWF4X3NlbmRfdGltZXM7CisK
Kwl1aW50MTZfdCBkZWZfbmV0X2ZhaWx1cmU7CisKKwl1aW50MTZfdCBkZWZfbmV0X3BmX3RocmVz
aG9sZDsKKworCS8qCisJICogbG9jayBmbGFnOiAwIGlzIG9rIHRvIHNlbmQsIDErIChkdWFscyBh
cyBhIHJldHJhbiBjb3VudCkgaXMKKwkgKiBhd2FpdGluZyBBQ0sKKwkgKi8KKwl1aW50MTZfdCBt
YXBwaW5nX2FycmF5X3NpemU7CisKKwl1aW50MTZfdCBsYXN0X3N0cm1fc2VxX2RlbGl2ZXJlZDsK
Kwl1aW50MTZfdCBsYXN0X3N0cm1fbm9fZGVsaXZlcmVkOworCisJdWludDE2X3QgbGFzdF9yZXZv
a2VfY291bnQ7CisJaW50MTZfdCBudW1fc2VuZF90aW1lcnNfdXA7CisKKwl1aW50MTZfdCBzdHJl
YW1fbG9ja2VkX29uOworCXVpbnQxNl90IGVjbl9lY2hvX2NudF9vbnE7CisKKwl1aW50MTZfdCBm
cmVlX2NodW5rX2NudDsKKwl1aW50OF90IHN0cmVhbV9sb2NrZWQ7CisJdWludDhfdCBhdXRoZW50
aWNhdGVkOwkvKiBwYWNrZXQgYXV0aGVudGljYXRlZCBvayAqLworCS8qCisJICogVGhpcyBmbGFn
IGluZGljYXRlcyB0aGF0IGEgU0FDSyBuZWVkIHRvIGJlIHNlbnQuCisJICogSW5pdGlhbGx5IHRo
aXMgaXMgMSB0byBzZW5kIHRoZSBmaXJzdCBzQUNLIGltbWVkaWF0ZWx5LgorCSAqLworCXVpbnQ4
X3Qgc2VuZF9zYWNrOworCisJLyogbWF4IGJ1cnN0IG9mIG5ldyBwYWNrZXRzIGludG8gdGhlIG5l
dHdvcmsgKi8KKwl1aW50MzJfdCBtYXhfYnVyc3Q7CisJLyogbWF4IGJ1cnN0IG9mIGZhc3QgcmV0
cmFuc21pdCBwYWNrZXRzICovCisJdWludDMyX3QgZnJfbWF4X2J1cnN0OworCisJdWludDhfdCBz
YXRfbmV0d29yazsJLyogUlRUIGlzIGluIHJhbmdlIG9mIHNhdCBuZXQgb3IgZ3JlYXRlciAqLwor
CXVpbnQ4X3Qgc2F0X25ldHdvcmtfbG9ja291dDsJLyogbG9ja291dCBjb2RlICovCisJdWludDhf
dCBidXJzdF9saW1pdF9hcHBsaWVkOwkvKiBCdXJzdCBsaW1pdCBpbiBlZmZlY3QgYXQgbGFzdCBz
ZW5kPyAqLworCS8qIGZsYWcgZ29lcyBvbiB3aGVuIHdlIGFyZSBkb2luZyBhIHBhcnRpYWwgZGVs
aXZlcnkgYXBpICovCisJdWludDhfdCBoYl9yYW5kb21fdmFsdWVzWzRdOworCXVpbnQ4X3QgZnJh
Z21lbnRlZF9kZWxpdmVyeV9pbnByb2dyZXNzOworCXVpbnQ4X3QgZnJhZ21lbnRfZmxhZ3M7CisJ
dWludDhfdCBsYXN0X2ZsYWdzX2RlbGl2ZXJlZDsKKwl1aW50OF90IGhiX2VjdF9yYW5kb21iaXQ7
CisJdWludDhfdCBoYl9yYW5kb21faWR4OworCXVpbnQ4X3QgZGVmYXVsdF9kc2NwOworCXVpbnQ4
X3QgYXNjb25mX2RlbF9wZW5kaW5nOwkvKiBhc2NvbmYgZGVsZXRlIGxhc3QgYWRkciBwZW5kaW5n
ICovCisJdWludDhfdCB0cmlnZ2VyX3Jlc2V0OworCS8qCisJICogVGhpcyB2YWx1ZSwgcGx1cyBh
bGwgb3RoZXIgYWNrJ2QgYnV0IGFib3ZlIGN1bS1hY2sgaXMgYWRkZWQKKwkgKiB0b2dldGhlciB0
byBjcm9zcyBjaGVjayBhZ2FpbnN0IHRoZSBiaXQgdGhhdCB3ZSBoYXZlIHlldCB0bworCSAqIGRl
ZmluZSAocHJvYmFibHkgaW4gdGhlIFNBQ0spLiBXaGVuIHRoZSBjdW0tYWNrIGlzIHVwZGF0ZWQs
IHRoaXMKKwkgKiBzdW0gaXMgdXBkYXRlZCBhcyB3ZWxsLgorCSAqLworCisJLyogRmxhZ3Mgd2hl
dGhlciBhbiBleHRlbnNpb24gaXMgc3VwcG9ydGVkIG9yIG5vdCAqLworCXVpbnQ4X3QgZWNuX3N1
cHBvcnRlZDsKKwl1aW50OF90IHByc2N0cF9zdXBwb3J0ZWQ7CisJdWludDhfdCBhdXRoX3N1cHBv
cnRlZDsKKwl1aW50OF90IGFzY29uZl9zdXBwb3J0ZWQ7CisJdWludDhfdCByZWNvbmZpZ19zdXBw
b3J0ZWQ7CisJdWludDhfdCBucnNhY2tfc3VwcG9ydGVkOworCXVpbnQ4X3QgcGt0ZHJvcF9zdXBw
b3J0ZWQ7CisJdWludDhfdCBpZGF0YV9zdXBwb3J0ZWQ7CisKKwkvKiBEaWQgdGhlIHBlZXIgbWFr
ZSB0aGUgc3RyZWFtIGNvbmZpZyAoYWRkIG91dCkgcmVxdWVzdCAqLworCXVpbnQ4X3QgcGVlcl9y
ZXFfb3V0OworCisJdWludDhfdCBsb2NhbF9zdHJyZXNldF9zdXBwb3J0OworCXVpbnQ4X3QgcGVl
cl9zdXBwb3J0c19uYXQ7CisKKwlzdHJ1Y3Qgc2N0cF9zY29waW5nIHNjb3BlOworCS8qIGZsYWdz
IHRvIGhhbmRsZSBzZW5kIGFsdGVybmF0ZSBuZXQgdHJhY2tpbmcgKi8KKwl1aW50OF90IHVzZWRf
YWx0X2FzY29uZmFjazsKKwl1aW50OF90IGZhc3RfcmV0cmFuX2xvc3NfcmVjb3Zlcnk7CisJdWlu
dDhfdCBzYXRfdDNfbG9zc19yZWNvdmVyeTsKKwl1aW50OF90IGRyb3BwZWRfc3BlY2lhbF9jbnQ7
CisJdWludDhfdCBzZWVuX2Ffc2Fja190aGlzX3BrdDsKKwl1aW50OF90IHN0cmVhbV9yZXNldF9v
dXRzdGFuZGluZzsKKwl1aW50OF90IHN0cmVhbV9yZXNldF9vdXRfaXNfb3V0c3RhbmRpbmc7CisJ
dWludDhfdCBkZWxheWVkX2Nvbm5lY3Rpb247CisJdWludDhfdCBpZnBfaGFkX2Vub2J1ZjsKKwl1
aW50OF90IHNhd19zYWNrX3dpdGhfZnJhZ3M7CisJdWludDhfdCBzYXdfc2Fja193aXRoX25yX2Zy
YWdzOworCXVpbnQ4X3QgaW5fYXNvY2lkX2hhc2g7CisJdWludDhfdCBhc3NvY191cF9zZW50Owor
CXVpbnQ4X3QgYWRhcHRhdGlvbl9uZWVkZWQ7CisJdWludDhfdCBhZGFwdGF0aW9uX3NlbnQ7CisJ
LyogQ01UIHZhcmlhYmxlcyAqLworCXVpbnQ4X3QgY210X2RhY19wa3RzX3JjdmQ7CisJdWludDhf
dCBzY3RwX2NtdF9vbl9vZmY7CisJdWludDhfdCBpYW1fYmxvY2tpbmc7CisJdWludDhfdCBjb29r
aWVfaG93WzhdOworCS8qIEpSUyA1LzIxLzA3IC0gQ01UIFBGIHZhcmlhYmxlICovCisJdWludDhf
dCBzY3RwX2NtdF9wZjsKKwl1aW50OF90IHVzZV9wcmVjaXNlX3RpbWU7CisJdWludDY0X3Qgc2N0
cF9mZWF0dXJlczsKKwl1aW50MzJfdCBtYXhfY3duZDsKKwl1aW50MTZfdCBwb3J0OyAvKiByZW1v
dGUgVURQIGVuY2Fwc3VsYXRpb24gcG9ydCAqLworCS8qCisJICogVGhlIG1hcHBpbmcgYXJyYXkg
aXMgdXNlZCB0byB0cmFjayBvdXQgb2Ygb3JkZXIgc2VxdWVuY2VzIGFib3ZlCisJICogbGFzdF9h
Y2tlZF9zZXEuIDAgaW5kaWNhdGVzIHBhY2tldCBtaXNzaW5nIDEgaW5kaWNhdGVzIHBhY2tldAor
CSAqIHJlYydkLiBXZSBzbGlkZSBpdCB1cCBldmVyeSB0aW1lIHdlIHJhaXNlIGxhc3RfYWNrZWRf
c2VxIGFuZCAwCisJICogdHJhaWxpbmcgbG9jYWN0aW9ucyBvdXQuICBJZiBJIGdldCBhIFRTTiBh
Ym92ZSB0aGUgYXJyYXkKKwkgKiBtYXBwaW5nQXJyYXlTeiwgSSBkaXNjYXJkIHRoZSBkYXRhZ3Jh
bSBhbmQgbGV0IHJldHJhbnNtaXQgaGFwcGVuLgorCSAqLworCXVpbnQzMl90IG1hcmtlZF9yZXRy
YW5zOworCXVpbnQzMl90IHRpbW9pbml0OworCXVpbnQzMl90IHRpbW9kYXRhOworCXVpbnQzMl90
IHRpbW9zYWNrOworCXVpbnQzMl90IHRpbW9zaHV0ZG93bjsKKwl1aW50MzJfdCB0aW1vaGVhcnRi
ZWF0OworCXVpbnQzMl90IHRpbW9jb29raWU7CisJdWludDMyX3QgdGltb3NodXRkb3duYWNrOwor
CXN0cnVjdCB0aW1ldmFsIHN0YXJ0X3RpbWU7CisJc3RydWN0IHRpbWV2YWwgZGlzY29udGludWl0
eV90aW1lOworCXVpbnQ2NF90IGFiYW5kb25lZF91bnNlbnRbU0NUUF9QUl9TQ1RQX01BWCArIDFd
OworCXVpbnQ2NF90IGFiYW5kb25lZF9zZW50W1NDVFBfUFJfU0NUUF9NQVggKyAxXTsKK307CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc3lz
Y3RsLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9zeXNjdGwuYwpuZXcgZmls
ZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAuLjhiNzdmN2ViMGRiNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3N5c2N0bC5jCkBAIC0w
LDAgKzEsMTYyNSBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xh
dXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFs
bCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIw
MTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogYSkgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICog
ICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqCisgKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAq
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaW5jbHVk
ZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0
cF9zeXNjdGwuYyAzNjUwNzEgMjAyMC0wOS0wMSAyMToxOToxNFogbWpnICQiKTsKKyNlbmRpZgor
CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwLmg+
CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2NvbnN0YW50cy5oPgorI2luY2x1ZGUgPG5ldGluZXQv
c2N0cF9zeXNjdGwuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfcGNiLmg+CisjaW5jbHVkZSA8
bmV0aW5ldC9zY3RwdXRpbC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vdXRwdXQuaD4KKyNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2luY2x1
ZGUgPHN5cy9zbXAuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjZW5kaWYKKyNpZiBkZWZp
bmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpbmNsdWRlIDxuZXRp
bmV0L3NjdHBfYnNkX2FkZHIuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK0ZFQVRVUkUoc2N0cCwgIlN0cmVhbSBDb250cm9s
IFRyYW5zbWlzc2lvbiBQcm90b2NvbCIpOworI2VuZGlmCisKKy8qCisgKiBzeXNjdGwgdHVuYWJs
ZSB2YXJpYWJsZXMKKyAqLworCit2b2lkCitzY3RwX2luaXRfc3lzY3Rscyh2b2lkKQoreworCVND
VFBfQkFTRV9TWVNDVEwoc2N0cF9zZW5kc3BhY2UpID0gU0NUUENUTF9NQVhER1JBTV9ERUZBVUxU
OworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9yZWN2c3BhY2UpID0gU0NUUENUTF9SRUNWU1BBQ0Vf
REVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXV0b19hc2NvbmYpID0gU0NUUENUTF9B
VVRPQVNDT05GX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX211bHRpcGxlX2FzY29u
ZnMpID0gU0NUUENUTF9NVUxUSVBMRUFTQ09ORlNfREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfZWNuX2VuYWJsZSkgPSBTQ1RQQ1RMX0VDTl9FTkFCTEVfREVGQVVMVDsKKwlTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfcHJfZW5hYmxlKSA9IFNDVFBDVExfUFJfRU5BQkxFX0RFRkFVTFQ7CisJ
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2F1dGhfZW5hYmxlKSA9IFNDVFBDVExfQVVUSF9FTkFCTEVf
REVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNjb25mX2VuYWJsZSkgPSBTQ1RQQ1RM
X0FTQ09ORl9FTkFCTEVfREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcmVjb25maWdf
ZW5hYmxlKSA9IFNDVFBDVExfUkVDT05GSUdfRU5BQkxFX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX25yc2Fja19lbmFibGUpID0gU0NUUENUTF9OUlNBQ0tfRU5BQkxFX0RFRkFVTFQ7
CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BrdGRyb3BfZW5hYmxlKSA9IFNDVFBDVExfUEtURFJP
UF9FTkFCTEVfREVGQVVMVDsKKyNpZiAhKGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVk
KF9fVXNlcnNwYWNlX18pKQorCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ub19jc3VtX29uX2xvb3Bi
YWNrKSA9IFNDVFBDVExfTE9PUEJBQ0tfTk9DU1VNX0RFRkFVTFQ7CisjZW5kaWYKKwlTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfcGVlcl9jaHVua19vaCkgPSBTQ1RQQ1RMX1BFRVJfQ0hLT0hfREVGQVVM
VDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWF4X2J1cnN0X2RlZmF1bHQpID0gU0NUUENUTF9N
QVhCVVJTVF9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9mcl9tYXhfYnVyc3RfZGVm
YXVsdCkgPSBTQ1RQQ1RMX0ZSTUFYQlVSU1RfREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbWF4X2NodW5rc19vbl9xdWV1ZSkgPSBTQ1RQQ1RMX01BWENIVU5LU19ERUZBVUxUOworI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2hhc2h0
YmxzaXplKSA9PSAwKSB7CisJCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9oYXNodGJsc2l6ZSkgPSBT
Q1RQQ1RMX1RDQkhBU0hTSVpFX0RFRkFVTFQ7CisJfQorI2Vsc2UKKwlTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfaGFzaHRibHNpemUpID0gU0NUUENUTF9UQ0JIQVNIU0laRV9ERUZBVUxUOworI2VuZGlm
CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
cGNidGJsc2l6ZSkgPT0gMCkgeworCQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcGNidGJsc2l6ZSkg
PSBTQ1RQQ1RMX1BDQkhBU0hTSVpFX0RFRkFVTFQ7CisJfQorI2Vsc2UKKwlTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfcGNidGJsc2l6ZSkgPSBTQ1RQQ1RMX1BDQkhBU0hTSVpFX0RFRkFVTFQ7CisjZW5k
aWYKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWluX3NwbGl0X3BvaW50KSA9IFNDVFBDVExfTUlO
X1NQTElUX1BPSU5UX0RFRkFVTFQ7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWlmIChT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfY2h1bmtzY2FsZSkgPT0gMCkgeworCQlTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfY2h1bmtzY2FsZSkgPSBTQ1RQQ1RMX0NIVU5LU0NBTEVfREVGQVVMVDsKKwl9Cisj
ZWxzZQorCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jaHVua3NjYWxlKSA9IFNDVFBDVExfQ0hVTktT
Q0FMRV9ERUZBVUxUOworI2VuZGlmCisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RlbGF5ZWRfc2Fj
a190aW1lX2RlZmF1bHQpID0gU0NUUENUTF9ERUxBWUVEX1NBQ0tfVElNRV9ERUZBVUxUOworCVND
VFBfQkFTRV9TWVNDVEwoc2N0cF9zYWNrX2ZyZXFfZGVmYXVsdCkgPSBTQ1RQQ1RMX1NBQ0tfRlJF
UV9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zeXN0ZW1fZnJlZV9yZXNjX2xpbWl0
KSA9IFNDVFBDVExfU1lTX1JFU09VUkNFX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2Fzb2NfZnJlZV9yZXNjX2xpbWl0KSA9IFNDVFBDVExfQVNPQ19SRVNPVVJDRV9ERUZBVUxUOwor
CVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9oZWFydGJlYXRfaW50ZXJ2YWxfZGVmYXVsdCkgPSBTQ1RQ
Q1RMX0hFQVJUQkVBVF9JTlRFUlZBTF9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9w
bXR1X3JhaXNlX3RpbWVfZGVmYXVsdCkgPSBTQ1RQQ1RMX1BNVFVfUkFJU0VfVElNRV9ERUZBVUxU
OworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zaHV0ZG93bl9ndWFyZF90aW1lX2RlZmF1bHQpID0g
U0NUUENUTF9TSFVURE9XTl9HVUFSRF9USU1FX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX3NlY3JldF9saWZldGltZV9kZWZhdWx0KSA9IFNDVFBDVExfU0VDUkVUX0xJRkVUSU1FX0RF
RkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX3J0b19tYXhfZGVmYXVsdCkgPSBTQ1RQQ1RM
X1JUT19NQVhfREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcnRvX21pbl9kZWZhdWx0
KSA9IFNDVFBDVExfUlRPX01JTl9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydG9f
aW5pdGlhbF9kZWZhdWx0KSA9IFNDVFBDVExfUlRPX0lOSVRJQUxfREVGQVVMVDsKKwlTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfaW5pdF9ydG9fbWF4X2RlZmF1bHQpID0gU0NUUENUTF9JTklUX1JUT19N
QVhfREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdmFsaWRfY29va2llX2xpZmVfZGVm
YXVsdCkgPSBTQ1RQQ1RMX1ZBTElEX0NPT0tJRV9MSUZFX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2luaXRfcnR4X21heF9kZWZhdWx0KSA9IFNDVFBDVExfSU5JVF9SVFhfTUFYX0RF
RkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2Fzc29jX3J0eF9tYXhfZGVmYXVsdCkgPSBT
Q1RQQ1RMX0FTU09DX1JUWF9NQVhfREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcGF0
aF9ydHhfbWF4X2RlZmF1bHQpID0gU0NUUENUTF9QQVRIX1JUWF9NQVhfREVGQVVMVDsKKwlTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfcGF0aF9wZl90aHJlc2hvbGQpID0gU0NUUENUTF9QQVRIX1BGX1RI
UkVTSE9MRF9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hZGRfbW9yZV90aHJlc2hv
bGQpID0gU0NUUENUTF9BRERfTU9SRV9PTl9PVVRQVVRfREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbnJfaW5jb21pbmdfc3RyZWFtc19kZWZhdWx0KSA9IFNDVFBDVExfSU5DT01JTkdf
U1RSRUFNU19ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ucl9vdXRnb2luZ19zdHJl
YW1zX2RlZmF1bHQpID0gU0NUUENUTF9PVVRHT0lOR19TVFJFQU1TX0RFRkFVTFQ7CisJU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2NtdF9vbl9vZmYpID0gU0NUUENUTF9DTVRfT05fT0ZGX0RFRkFVTFQ7
CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2NtdF91c2VfZGFjKSA9IFNDVFBDVExfQ01UX1VTRV9E
QUNfREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdXNlX2N3bmRfYmFzZWRfbWF4YnVy
c3QpID0gU0NUUENUTF9DV05EX01BWEJVUlNUX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX25hdF9mcmllbmRseSkgPSBTQ1RQQ1RMX05BVF9GUklFTkRMWV9ERUZBVUxUOworCVNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9MMl9hYmNfdmFyaWFibGUpID0gU0NUUENUTF9BQkNfTF9WQVJfREVG
QVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWJ1Zl90aHJlc2hvbGRfY291bnQpID0gU0NU
UENUTF9NQVhfQ0hBSU5FRF9NQlVGU19ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9k
b19kcmFpbikgPSBTQ1RQQ1RMX0RPX1NDVFBfRFJBSU5fREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfaGJfbWF4YnVyc3QpID0gU0NUUENUTF9IQl9NQVhfQlVSU1RfREVGQVVMVDsKKwlT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfYWJvcnRfaWZfb25lXzJfb25lX2hpdHNfbGltaXQpID0gU0NU
UENUTF9BQk9SVF9BVF9MSU1JVF9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9taW5f
cmVzaWR1YWwpID0gU0NUUENUTF9NSU5fUkVTSURVQUxfREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbWF4X3JldHJhbl9jaHVuaykgPSBTQ1RQQ1RMX01BWF9SRVRSQU5fQ0hVTktfREVG
QVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgPSBTQ1RQQ1RMX0xP
R0dJTkdfTEVWRUxfREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9jY19t
b2R1bGUpID0gU0NUUENUTF9ERUZBVUxUX0NDX01PRFVMRV9ERUZBVUxUOworCVNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9kZWZhdWx0X3NzX21vZHVsZSkgPSBTQ1RQQ1RMX0RFRkFVTFRfU1NfTU9EVUxF
X0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RlZmF1bHRfZnJhZ19pbnRlcmxlYXZl
KSA9IFNDVFBDVExfREVGQVVMVF9GUkFHX0lOVEVSTEVBVkVfREVGQVVMVDsKKwlTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfbW9iaWxpdHlfYmFzZSkgPSBTQ1RQQ1RMX01PQklMSVRZX0JBU0VfREVGQVVM
VDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbW9iaWxpdHlfZmFzdGhhbmRvZmYpID0gU0NUUENU
TF9NT0JJTElUWV9GQVNUSEFORE9GRl9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF92
dGFnX3RpbWVfd2FpdCkgPSBTQ1RQQ1RMX1RJTUVfV0FJVF9ERUZBVUxUOworCVNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9idWZmZXJfc3BsaXR0aW5nKSA9IFNDVFBDVExfQlVGRkVSX1NQTElUVElOR19E
RUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pbml0aWFsX2N3bmQpID0gU0NUUENUTF9J
TklUSUFMX0NXTkRfREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcnR0dmFyX2J3KSA9
IFNDVFBDVExfUlRUVkFSX0JXX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX3J0dHZh
cl9ydHQpID0gU0NUUENUTF9SVFRWQVJfUlRUX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX3J0dHZhcl9lcXJldCkgPSBTQ1RQQ1RMX1JUVFZBUl9FUVJFVF9ERUZBVUxUOworCVNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9zdGVhZHlfc3RlcCkgPSBTQ1RQQ1RMX1JUVFZBUl9TVEVBRFlTX0RF
RkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX3VzZV9kY2NjX2VjbikgPSBTQ1RQQ1RMX1JU
VFZBUl9EQ0NDRUNOX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2JsYWNraG9sZSkg
PSBTQ1RQQ1RMX0JMQUNLSE9MRV9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zZW5k
YWxsX2xpbWl0KSA9IFNDVFBDVExfU0VOREFMTF9MSU1JVF9ERUZBVUxUOworCVNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9kaWFnX2luZm9fY29kZSkgPSBTQ1RQQ1RMX0RJQUdfSU5GT19DT0RFX0RFRkFV
TFQ7CisjaWYgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKKyNpZiBkZWZpbmVkKF9XSU4z
MikgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkvKiBPbiBXaW5kb3dzLCB0aGUgcmVzb3Vy
Y2UgZm9yIGdsb2JhbCB2YXJpYWJsZXMgaXMgbGltaXRlZC4gKi8KKwlNQUxMT0MoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2xvZyksIHN0cnVjdCBzY3RwX2xvZyAqLCBzaXplb2Yoc3RydWN0IHNjdHBf
bG9nKSwgTV9TWVNDVEwsIE1fWkVSTyk7CisjZWxzZQorCW1lbXNldCgmU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZyksIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9sb2cpKTsKKyNlbmRpZgorI2VuZGlm
CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX3VkcF90dW5uZWxpbmdfcG9ydCkgPSBTQ1RQQ1RMX1VE
UF9UVU5ORUxJTkdfUE9SVF9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9lbmFibGVf
c2Fja19pbW1lZGlhdGVseSkgPSBTQ1RQQ1RMX1NBQ0tfSU1NRURJQVRFTFlfRU5BQkxFX0RFRkFV
TFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2luaXRzX2luY2x1ZGVfbmF0X2ZyaWVuZGx5KSA9
IFNDVFBDVExfTkFUX0ZSSUVORExZX0lOSVRTX0RFRkFVTFQ7CisjaWYgZGVmaW5lZChTQ1RQX0RF
QlVHKQorCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kZWJ1Z19vbikgPSBTQ1RQQ1RMX0RFQlVHX0RF
RkFVTFQ7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaWdub3JlX3Ztd2FyZV9pbnRlcmZhY2Vz
KSA9IFNDVFBDVExfSUdOT1JFX1ZNV0FSRV9JTlRFUkZBQ0VTX0RFRkFVTFQ7CisJU0NUUF9CQVNF
X1NZU0NUTChzY3RwX21haW5fdGltZXIpID0gU0NUUENUTF9NQUlOX1RJTUVSX0RFRkFVTFQ7CisJ
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2FkZHJfd2F0Y2hkb2dfbGltaXQpID0gU0NUUENUTF9BRERS
X1dBVENIRE9HX0xJTUlUX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX3Z0YWdfd2F0
Y2hkb2dfbGltaXQpID0gU0NUUENUTF9WVEFHX1dBVENIRE9HX0xJTUlUX0RFRkFVTFQ7CisjZW5k
aWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfb3V0cHV0X3VubG9ja2VkKSA9IFNDVFBDVExfT1VUUFVUX1VO
TE9DS0VEX0RFRkFVTFQ7CisjZW5kaWYKK30KKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwordm9pZAorc2N0cF9maW5pc2hfc3lzY3RscygpCit7CisjaWYg
ZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2xvZykgIT0gTlVMTCkgeworCQlGUkVFKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLCBNX1NZ
U0NUTCk7CisJCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpID0gTlVMTDsKKwl9CisjZW5kaWYK
K30KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKy8qIEl0IHJldHVybnMg
YW4gdXBwZXIgbGltaXQuIE5vIGZpbHRlcmluZyBpcyBkb25lIGhlcmUgKi8KK3N0YXRpYyB1bnNp
Z25lZCBpbnQKK3NjdHBfc3lzY3RsX251bWJlcl9vZl9hZGRyZXNzZXMoc3RydWN0IHNjdHBfaW5w
Y2IgKmlucCkKK3sKKwl1bnNpZ25lZCBpbnQgY250OworCXN0cnVjdCBzY3RwX3ZyZiAqdnJmOwor
CXN0cnVjdCBzY3RwX2lmbiAqc2N0cF9pZm47CisJc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYTsK
KwlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7CisKKwljbnQgPSAwOworCS8qIG5laXRoZXIgTWFj
IE9TIFggbm9yIEZyZWVCU0Qgc3VwcG9ydCBtdWxpdHBsZSByb3V0aW5nIGZ1bmN0aW9ucyAqLwor
CWlmICgodnJmID0gc2N0cF9maW5kX3ZyZihpbnAtPmRlZl92cmZfaWQpKSA9PSBOVUxMKSB7CisJ
CXJldHVybiAoMCk7CisJfQorCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19C
T1VOREFMTCkgeworCQlMSVNUX0ZPUkVBQ0goc2N0cF9pZm4sICZ2cmYtPmlmbmxpc3QsIG5leHRf
aWZuKSB7CisJCQlMSVNUX0ZPUkVBQ0goc2N0cF9pZmEsICZzY3RwX2lmbi0+aWZhbGlzdCwgbmV4
dF9pZmEpIHsKKwkJCQlzd2l0Y2ggKHNjdHBfaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkgewor
I2lmZGVmIElORVQKKwkJCQljYXNlIEFGX0lORVQ6CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJ
CWNhc2UgQUZfSU5FVDY6CisjZW5kaWYKKwkJCQkJY250Kys7CisJCQkJCWJyZWFrOworCQkJCWRl
ZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCUxJU1Rf
Rk9SRUFDSChsYWRkciwgJmlucC0+c2N0cF9hZGRyX2xpc3QsIHNjdHBfbnh0X2FkZHIpIHsKKwkJ
CXN3aXRjaCAobGFkZHItPmlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVU
CisJCQljYXNlIEFGX0lORVQ6CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJY2FzZSBBRl9JTkVU
NjoKKyNlbmRpZgorCQkJCWNudCsrOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVh
azsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gKGNudCk7Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBf
c3lzY3RsX2NvcHlfb3V0X2xvY2FsX2FkZHJlc3NlcyhzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzeXNjdGxfcmVxICpyZXEpCit7CisJc3RydWN0
IHNjdHBfaWZuICpzY3RwX2lmbjsKKwlzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhOworCWludCBs
b29wYmFja19zY29wZSwgaXB2NF9sb2NhbF9zY29wZSwgbG9jYWxfc2NvcGUsIHNpdGVfc2NvcGU7
CisJaW50IGlwdjRfYWRkcl9sZWdhbCwgaXB2Nl9hZGRyX2xlZ2FsOworI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKwlpbnQgY29ubl9hZGRyX2xlZ2FsOworI2VuZGlmCisJc3RydWN0IHNjdHBf
dnJmICp2cmY7CisJc3RydWN0IHhzY3RwX2xhZGRyIHhsYWRkcjsKKwlzdHJ1Y3Qgc2N0cF9sYWRk
ciAqbGFkZHI7CisJaW50IGVycm9yOworCisJLyogVHVybiBvbiBhbGwgdGhlIGFwcHJvcHJpYXRl
IHNjb3BlICovCisJaWYgKHN0Y2IpIHsKKwkJLyogdXNlIGFzc29jaWF0aW9uIHNwZWNpZmljIHZh
bHVlcyAqLworCQlsb29wYmFja19zY29wZSA9IHN0Y2ItPmFzb2Muc2NvcGUubG9vcGJhY2tfc2Nv
cGU7CisJCWlwdjRfbG9jYWxfc2NvcGUgPSBzdGNiLT5hc29jLnNjb3BlLmlwdjRfbG9jYWxfc2Nv
cGU7CisJCWxvY2FsX3Njb3BlID0gc3RjYi0+YXNvYy5zY29wZS5sb2NhbF9zY29wZTsKKwkJc2l0
ZV9zY29wZSA9IHN0Y2ItPmFzb2Muc2NvcGUuc2l0ZV9zY29wZTsKKwkJaXB2NF9hZGRyX2xlZ2Fs
ID0gc3RjYi0+YXNvYy5zY29wZS5pcHY0X2FkZHJfbGVnYWw7CisJCWlwdjZfYWRkcl9sZWdhbCA9
IHN0Y2ItPmFzb2Muc2NvcGUuaXB2Nl9hZGRyX2xlZ2FsOworI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKKwkJY29ubl9hZGRyX2xlZ2FsID0gc3RjYi0+YXNvYy5zY29wZS5jb25uX2FkZHJfbGVn
YWw7CisjZW5kaWYKKwl9IGVsc2UgeworCQkvKiBVc2UgZ2VuZXJpYyB2YWx1ZXMgZm9yIGVuZHBv
aW50cy4gKi8KKwkJbG9vcGJhY2tfc2NvcGUgPSAxOworCQlpcHY0X2xvY2FsX3Njb3BlID0gMTsK
KwkJbG9jYWxfc2NvcGUgPSAxOworCQlzaXRlX3Njb3BlID0gMTsKKwkJaWYgKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSB7CisJCQlpcHY2X2FkZHJfbGVnYWwgPSAx
OworCQkJaWYgKFNDVFBfSVBWNl9WNk9OTFkoaW5wKSkgeworCQkJCWlwdjRfYWRkcl9sZWdhbCA9
IDA7CisJCQl9IGVsc2UgeworCQkJCWlwdjRfYWRkcl9sZWdhbCA9IDE7CisJCQl9CisjaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorCQkJY29ubl9hZGRyX2xlZ2FsID0gMDsKKyNlbmRpZgorCQl9
IGVsc2UgeworCQkJaXB2Nl9hZGRyX2xlZ2FsID0gMDsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisJCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfQ09OTikg
eworCQkJCWNvbm5fYWRkcl9sZWdhbCA9IDE7CisJCQkJaXB2NF9hZGRyX2xlZ2FsID0gMDsKKwkJ
CX0gZWxzZSB7CisJCQkJY29ubl9hZGRyX2xlZ2FsID0gMDsKKwkJCQlpcHY0X2FkZHJfbGVnYWwg
PSAxOworCQkJfQorI2Vsc2UKKwkJCWlwdjRfYWRkcl9sZWdhbCA9IDE7CisjZW5kaWYKKwkJfQor
CX0KKworCS8qIG5laXRoZXIgTWFjIE9TIFggbm9yIEZyZWVCU0Qgc3VwcG9ydCBtdWxpdHBsZSBy
b3V0aW5nIGZ1bmN0aW9ucyAqLworCWlmICgodnJmID0gc2N0cF9maW5kX3ZyZihpbnAtPmRlZl92
cmZfaWQpKSA9PSBOVUxMKSB7CisJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJU0NUUF9JTlBf
SU5GT19SVU5MT0NLKCk7CisJCXJldHVybiAoLTEpOworCX0KKwlpZiAoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpIHsKKwkJTElTVF9GT1JFQUNIKHNjdHBfaWZuLCAm
dnJmLT5pZm5saXN0LCBuZXh0X2lmbikgeworCQkJaWYgKChsb29wYmFja19zY29wZSA9PSAwKSAm
JiBTQ1RQX0lGTl9JU19JRlRfTE9PUChzY3RwX2lmbikpCisJCQkJLyogU2tpcCBsb29wYmFjayBp
ZiBsb29wYmFja19zY29wZSBub3Qgc2V0ICovCisJCQkJY29udGludWU7CisJCQlMSVNUX0ZPUkVB
Q0goc2N0cF9pZmEsICZzY3RwX2lmbi0+aWZhbGlzdCwgbmV4dF9pZmEpIHsKKwkJCQlpZiAoc3Rj
YikgeworCQkJCQkvKgorCQkJCQkgKiBpZ25vcmUgaWYgYmxhY2tsaXN0ZWQgYXQKKwkJCQkJICog
YXNzb2NpYXRpb24gbGV2ZWwKKwkJCQkJICovCisJCQkJCWlmIChzY3RwX2lzX2FkZHJfcmVzdHJp
Y3RlZChzdGNiLCBzY3RwX2lmYSkpCisJCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJc3dpdGNo
IChzY3RwX2lmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQkJY2Fz
ZSBBRl9JTkVUOgorCQkJCQlpZiAoaXB2NF9hZGRyX2xlZ2FsKSB7CisJCQkJCQlzdHJ1Y3Qgc29j
a2FkZHJfaW4gKnNpbjsKKworCQkJCQkJc2luID0gJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjsKKwkJ
CQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSAwKQorCQkJCQkJCWNvbnRpbnVlOworI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJCQlp
ZiAocHJpc29uX2NoZWNrX2lwNChpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCQkJCQkgICAg
ICAgICAgICAgICAgICAgICAmc2luLT5zaW5fYWRkcikgIT0gMCkgeworCQkJCQkJCWNvbnRpbnVl
OworCQkJCQkJfQorI2VuZGlmCisJCQkJCQlpZiAoKGlwdjRfbG9jYWxfc2NvcGUgPT0gMCkgJiYg
KElONF9JU1BSSVZBVEVfQUREUkVTUygmc2luLT5zaW5fYWRkcikpKQorCQkJCQkJCWNvbnRpbnVl
OworCQkJCQl9IGVsc2UgeworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQkJYnJlYWs7Cisj
ZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJCWNhc2UgQUZfSU5FVDY6CisJCQkJCWlmIChpcHY2X2Fk
ZHJfbGVnYWwpIHsKKwkJCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisKKwkJCQkJCXNp
bjYgPSAmc2N0cF9pZmEtPmFkZHJlc3Muc2luNjsKKwkJCQkJCWlmIChJTjZfSVNfQUREUl9VTlNQ
RUNJRklFRCgmc2luNi0+c2luNl9hZGRyKSkKKwkJCQkJCQljb250aW51ZTsKKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCQkJaWYgKHByaXNv
bl9jaGVja19pcDYoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAorCQkJCQkJICAgICAgICAgICAg
ICAgICAgICAgJnNpbjYtPnNpbjZfYWRkcikgIT0gMCkgeworCQkJCQkJCWNvbnRpbnVlOworCQkJ
CQkJfQorI2VuZGlmCisJCQkJCQlpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKCZzaW42LT5zaW42
X2FkZHIpKSB7CisJCQkJCQkJaWYgKGxvY2FsX3Njb3BlID09IDApCisJCQkJCQkJCWNvbnRpbnVl
OworCQkJCQkJfQorCQkJCQkJaWYgKChzaXRlX3Njb3BlID09IDApICYmIChJTjZfSVNfQUREUl9T
SVRFTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpKQorCQkJCQkJCWNvbnRpbnVlOworCQkJCQl9IGVs
c2UgeworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJY2FzZSBBRl9DT05OOgorCQkJCQlpZiAoIWNvbm5f
YWRkcl9sZWdhbCkgeworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisjZW5k
aWYKKwkJCQlkZWZhdWx0OgorCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJbWVtc2V0KCh2b2lk
ICopJnhsYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCB4c2N0cF9sYWRkcikpOworCQkJCW1lbWNweSgo
dm9pZCAqKSZ4bGFkZHIuYWRkcmVzcywgKGNvbnN0IHZvaWQgKikmc2N0cF9pZmEtPmFkZHJlc3Ms
IHNpemVvZih1bmlvbiBzY3RwX3NvY2tzdG9yZSkpOworCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5w
KTsKKwkJCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKwkJCQllcnJvciA9IFNZU0NUTF9PVVQo
cmVxLCAmeGxhZGRyLCBzaXplb2Yoc3RydWN0IHhzY3RwX2xhZGRyKSk7CisJCQkJaWYgKGVycm9y
KSB7CisJCQkJCXJldHVybiAoZXJyb3IpOworCQkJCX0gZWxzZSB7CisJCQkJCVNDVFBfSU5QX0lO
Rk9fUkxPQ0soKTsKKwkJCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQl9CisJCQl9CisJCX0K
Kwl9IGVsc2UgeworCQlMSVNUX0ZPUkVBQ0gobGFkZHIsICZpbnAtPnNjdHBfYWRkcl9saXN0LCBz
Y3RwX254dF9hZGRyKSB7CisJCQkvKiBpZ25vcmUgaWYgYmxhY2tsaXN0ZWQgYXQgYXNzb2NpYXRp
b24gbGV2ZWwgKi8KKwkJCWlmIChzdGNiICYmIHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2Is
IGxhZGRyLT5pZmEpKQorCQkJCWNvbnRpbnVlOworCQkJbWVtc2V0KCh2b2lkICopJnhsYWRkciwg
MCwgc2l6ZW9mKHN0cnVjdCB4c2N0cF9sYWRkcikpOworCQkJbWVtY3B5KCh2b2lkICopJnhsYWRk
ci5hZGRyZXNzLCAoY29uc3Qgdm9pZCAqKSZsYWRkci0+aWZhLT5hZGRyZXNzLCBzaXplb2YodW5p
b24gc2N0cF9zb2Nrc3RvcmUpKTsKKwkJCXhsYWRkci5zdGFydF90aW1lLnR2X3NlYyA9ICh1aW50
MzJfdClsYWRkci0+c3RhcnRfdGltZS50dl9zZWM7CisJCQl4bGFkZHIuc3RhcnRfdGltZS50dl91
c2VjID0gKHVpbnQzMl90KWxhZGRyLT5zdGFydF90aW1lLnR2X3VzZWM7CisJCQlTQ1RQX0lOUF9S
VU5MT0NLKGlucCk7CisJCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKwkJCWVycm9yID0gU1lT
Q1RMX09VVChyZXEsICZ4bGFkZHIsIHNpemVvZihzdHJ1Y3QgeHNjdHBfbGFkZHIpKTsKKwkJCWlm
IChlcnJvcikgeworCQkJCXJldHVybiAoZXJyb3IpOworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0lO
UF9JTkZPX1JMT0NLKCk7CisJCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCX0KKwkJfQorCX0K
KwltZW1zZXQoKHZvaWQgKikmeGxhZGRyLCAwLCBzaXplb2Yoc3RydWN0IHhzY3RwX2xhZGRyKSk7
CisJeGxhZGRyLmxhc3QgPSAxOworCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwlTQ1RQX0lOUF9J
TkZPX1JVTkxPQ0soKTsKKwllcnJvciA9IFNZU0NUTF9PVVQocmVxLCAmeGxhZGRyLCBzaXplb2Yo
c3RydWN0IHhzY3RwX2xhZGRyKSk7CisKKwlpZiAoZXJyb3IpIHsKKwkJcmV0dXJuIChlcnJvcik7
CisJfSBlbHNlIHsKKwkJU0NUUF9JTlBfSU5GT19STE9DSygpOworCQlTQ1RQX0lOUF9STE9DSyhp
bnApOworCQlyZXR1cm4gKDApOworCX0KK30KKworLyoKKyAqIHN5c2N0bCBmdW5jdGlvbnMKKyAq
LworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorc3Rh
dGljIGludAorc2N0cF9zeXNjdGxfaGFuZGxlX2Fzc29jbGlzdCBTWVNDVExfSEFORExFUl9BUkdT
Cit7CisjcHJhZ21hIHVudXNlZChvaWRwLCBhcmcxLCBhcmcyKQorI2Vsc2UKK3N0YXRpYyBpbnQK
K3NjdHBfc3lzY3RsX2hhbmRsZV9hc3NvY2xpc3QoU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sKKyNl
bmRpZgorCXVuc2lnbmVkIGludCBudW1iZXJfb2ZfZW5kcG9pbnRzOworCXVuc2lnbmVkIGludCBu
dW1iZXJfb2ZfbG9jYWxfYWRkcmVzc2VzOworCXVuc2lnbmVkIGludCBudW1iZXJfb2ZfYXNzb2Np
YXRpb25zOworCXVuc2lnbmVkIGludCBudW1iZXJfb2ZfcmVtb3RlX2FkZHJlc3NlczsKKwl1bnNp
Z25lZCBpbnQgbjsKKwlpbnQgZXJyb3I7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKwlzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2I7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCXN0cnVjdCB4c2N0
cF9pbnBjYiB4aW5wY2I7CisJc3RydWN0IHhzY3RwX3RjYiB4c3RjYjsKKwlzdHJ1Y3QgeHNjdHBf
cmFkZHIgeHJhZGRyOworCXN0cnVjdCBzb2NrZXQgKnNvOworCisJbnVtYmVyX29mX2VuZHBvaW50
cyA9IDA7CisJbnVtYmVyX29mX2xvY2FsX2FkZHJlc3NlcyA9IDA7CisJbnVtYmVyX29mX2Fzc29j
aWF0aW9ucyA9IDA7CisJbnVtYmVyX29mX3JlbW90ZV9hZGRyZXNzZXMgPSAwOworCisJU0NUUF9J
TlBfSU5GT19STE9DSygpOworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorCWlmIChyZXEtPm9sZHB0ciA9PSBVU0VSX0FERFJfTlVMTCkgeworI2Vsc2UK
KwlpZiAocmVxLT5vbGRwdHIgPT0gTlVMTCkgeworI2VuZGlmCisJCUxJU1RfRk9SRUFDSChpbnAs
ICZTQ1RQX0JBU0VfSU5GTyhsaXN0aGVhZCksIHNjdHBfbGlzdCkgeworCQkJU0NUUF9JTlBfUkxP
Q0soaW5wKTsKKwkJCW51bWJlcl9vZl9lbmRwb2ludHMrKzsKKwkJCW51bWJlcl9vZl9sb2NhbF9h
ZGRyZXNzZXMgKz0gc2N0cF9zeXNjdGxfbnVtYmVyX29mX2FkZHJlc3NlcyhpbnApOworCQkJTElT
VF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKKwkJ
CQludW1iZXJfb2ZfYXNzb2NpYXRpb25zKys7CisJCQkJbnVtYmVyX29mX2xvY2FsX2FkZHJlc3Nl
cyArPSBzY3RwX3N5c2N0bF9udW1iZXJfb2ZfYWRkcmVzc2VzKGlucCk7CisJCQkJVEFJTFFfRk9S
RUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQkJCQludW1iZXJfb2Zf
cmVtb3RlX2FkZHJlc3NlcysrOworCQkJCX0KKwkJCX0KKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5w
KTsKKwkJfQorCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKwkJbiA9IChudW1iZXJfb2ZfZW5k
cG9pbnRzICsgMSkgKiBzaXplb2Yoc3RydWN0IHhzY3RwX2lucGNiKSArCisJCSAgICAobnVtYmVy
X29mX2xvY2FsX2FkZHJlc3NlcyArIG51bWJlcl9vZl9lbmRwb2ludHMgKyBudW1iZXJfb2ZfYXNz
b2NpYXRpb25zKSAqIHNpemVvZihzdHJ1Y3QgeHNjdHBfbGFkZHIpICsKKwkJICAgIChudW1iZXJf
b2ZfYXNzb2NpYXRpb25zICsgbnVtYmVyX29mX2VuZHBvaW50cykgKiBzaXplb2Yoc3RydWN0IHhz
Y3RwX3RjYikgKworCQkgICAgKG51bWJlcl9vZl9yZW1vdGVfYWRkcmVzc2VzICsgbnVtYmVyX29m
X2Fzc29jaWF0aW9ucykgKiBzaXplb2Yoc3RydWN0IHhzY3RwX3JhZGRyKTsKKworCQkvKiByZXF1
ZXN0IHNvbWUgbW9yZSBtZW1vcnkgdGhhbiBuZWVkZWQgKi8KKyNpZiAhKGRlZmluZWQoX1dJTjMy
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkKKwkJcmVxLT5vbGRpZHggPSAobiArIG4gLyA4
KTsKKyNlbHNlCisJCXJlcS0+ZGF0YWlkeCA9IChuICsgbiAvIDgpOworI2VuZGlmCisJCXJldHVy
biAoMCk7CisJfQorI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorCWlmIChyZXEtPm5ld3B0ciAhPSBVU0VSX0FERFJfTlVMTCkgeworI2Vsc2UKKwlpZiAo
cmVxLT5uZXdwdHIgIT0gTlVMTCkgeworI2VuZGlmCisJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygp
OworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1NZU0NUTCwgRVBFUk0pOworCQlyZXR1cm4gKEVQRVJNKTsKKwl9CisJbWVtc2V0KCZ4aW5wY2Is
IDAsIHNpemVvZih4aW5wY2IpKTsKKwltZW1zZXQoJnhzdGNiLCAwLCBzaXplb2YoeHN0Y2IpKTsK
KwltZW1zZXQoJnhyYWRkciwgMCwgc2l6ZW9mKHhyYWRkcikpOworCUxJU1RfRk9SRUFDSChpbnAs
ICZTQ1RQX0JBU0VfSU5GTyhsaXN0aGVhZCksIHNjdHBfbGlzdCkgeworCQlTQ1RQX0lOUF9STE9D
SyhpbnApOworCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FM
TEdPTkUpIHsKKwkJCS8qIGlmIGl0cyBhbGxnb25lIGl0IGlzIGJlaW5nIGZyZWVkIC0gc2tpcCBp
dCAgKi8KKwkJCWdvdG8gc2tpcDsKKwkJfQorCQl4aW5wY2IubGFzdCA9IDA7CisJCXhpbnBjYi5s
b2NhbF9wb3J0ID0gbnRvaHMoaW5wLT5zY3RwX2xwb3J0KTsKKwkJeGlucGNiLmZsYWdzID0gaW5w
LT5zY3RwX2ZsYWdzOworCQl4aW5wY2IuZmVhdHVyZXMgPSBpbnAtPnNjdHBfZmVhdHVyZXM7CisJ
CXhpbnBjYi50b3RhbF9zZW5kcyA9IGlucC0+dG90YWxfc2VuZHM7CisJCXhpbnBjYi50b3RhbF9y
ZWN2cyA9IGlucC0+dG90YWxfcmVjdnM7CisJCXhpbnBjYi50b3RhbF9ub3NwYWNlcyA9IGlucC0+
dG90YWxfbm9zcGFjZXM7CisJCXhpbnBjYi5mcmFnbWVudGF0aW9uX3BvaW50ID0gaW5wLT5zY3Rw
X2ZyYWdfcG9pbnQ7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKwkJeGlucGNiLnNvY2tldCA9ICh1aW50cHRyX3QpaW5wLT5zY3RwX3NvY2tldDsK
KyNlbHNlCisJCXhpbnBjYi5zb2NrZXQgPSBpbnAtPnNjdHBfc29ja2V0OworI2VuZGlmCisJCXNv
ID0gaW5wLT5zY3RwX3NvY2tldDsKKwkJaWYgKChzbyA9PSBOVUxMKSB8fAorCQkgICAgKCFTQ1RQ
X0lTX0xJU1RFTklORyhpbnApKSB8fAorCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX1NPQ0tFVF9HT05FKSkgeworCQkJeGlucGNiLnFsZW4gPSAwOworCQkJeGlucGNiLm1h
eHFsZW4gPSAwOworCQl9IGVsc2UgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCisJCQl4aW5wY2IucWxlbiA9IHNvLT5zb2xfcWxlbjsKKwkJCXhp
bnBjYi5xbGVuX29sZCA9IHNvLT5zb2xfcWxlbiA+IFVTSFJUX01BWCA/CisJCQkgICAgVVNIUlRf
TUFYIDogKHVpbnQxNl90KSBzby0+c29sX3FsZW47CisJCQl4aW5wY2IubWF4cWxlbiA9IHNvLT5z
b2xfcWxpbWl0OworCQkJeGlucGNiLm1heHFsZW5fb2xkID0gc28tPnNvbF9xbGltaXQgPiBVU0hS
VF9NQVggPworCQkJICAgIFVTSFJUX01BWCA6ICh1aW50MTZfdCkgc28tPnNvbF9xbGltaXQ7Cisj
ZWxzZQorCQkJeGlucGNiLnFsZW4gPSBzby0+c29fcWxlbjsKKwkJCXhpbnBjYi5tYXhxbGVuID0g
c28tPnNvX3FsaW1pdDsKKyNlbmRpZgorCQl9CisJCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7CisJ
CVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7CisJCWVy
cm9yID0gU1lTQ1RMX09VVChyZXEsICZ4aW5wY2IsIHNpemVvZihzdHJ1Y3QgeHNjdHBfaW5wY2Ip
KTsKKwkJaWYgKGVycm9yKSB7CisJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCQkJcmV0dXJu
IChlcnJvcik7CisJCX0KKwkJU0NUUF9JTlBfSU5GT19STE9DSygpOworCQlTQ1RQX0lOUF9STE9D
SyhpbnApOworCQllcnJvciA9IHNjdHBfc3lzY3RsX2NvcHlfb3V0X2xvY2FsX2FkZHJlc3Nlcyhp
bnAsIE5VTEwsIHJlcSk7CisJCWlmIChlcnJvcikgeworCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5w
KTsKKwkJCXJldHVybiAoZXJyb3IpOworCQl9CisJCUxJU1RfRk9SRUFDSChzdGNiLCAmaW5wLT5z
Y3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7CisJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwor
CQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCVNDVFBfVENCX1VO
TE9DSyhzdGNiKTsKKwkJCXhzdGNiLmxhc3QgPSAwOworCQkJeHN0Y2IubG9jYWxfcG9ydCA9IG50
b2hzKGlucC0+c2N0cF9scG9ydCk7CisJCQl4c3RjYi5yZW1vdGVfcG9ydCA9IG50b2hzKHN0Y2It
PnJwb3J0KTsKKwkJCWlmIChzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24gIT0gTlVMTCkK
KwkJCQl4c3RjYi5wcmltYXJ5X2FkZHIgPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24t
PnJvLl9sX2FkZHI7CisJCQl4c3RjYi5oZWFydGJlYXRfaW50ZXJ2YWwgPSBzdGNiLT5hc29jLmhl
YXJ0X2JlYXRfZGVsYXk7CisJCQl4c3RjYi5zdGF0ZSA9ICh1aW50MzJfdClzY3RwX21hcF9hc3Nv
Y19zdGF0ZShzdGNiLT5hc29jLnN0YXRlKTsKKwkJCXhzdGNiLmFzc29jX2lkID0gc2N0cF9nZXRf
YXNzb2NpZChzdGNiKTsKKwkJCXhzdGNiLnBlZXJzX3J3bmQgPSBzdGNiLT5hc29jLnBlZXJzX3J3
bmQ7CisJCQl4c3RjYi5pbl9zdHJlYW1zID0gc3RjYi0+YXNvYy5zdHJlYW1pbmNudDsKKwkJCXhz
dGNiLm91dF9zdHJlYW1zID0gc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7CisJCQl4c3RjYi5tYXhf
bnJfcmV0cmFucyA9IHN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudDsKKwkJCXhzdGNiLnBy
aW1hcnlfcHJvY2VzcyA9IDA7IC8qIG5vdCByZWFsbHkgc3VwcG9ydGVkIHlldCAqLworCQkJeHN0
Y2IuVDFfZXhwaXJlcmllcyA9IHN0Y2ItPmFzb2MudGltb2luaXQgKyBzdGNiLT5hc29jLnRpbW9j
b29raWU7CisJCQl4c3RjYi5UMl9leHBpcmVyaWVzID0gc3RjYi0+YXNvYy50aW1vc2h1dGRvd24g
KyBzdGNiLT5hc29jLnRpbW9zaHV0ZG93bmFjazsKKwkJCXhzdGNiLnJldHJhbnNtaXR0ZWRfdHNu
cyA9IHN0Y2ItPmFzb2MubWFya2VkX3JldHJhbnM7CisJCQl4c3RjYi5zdGFydF90aW1lLnR2X3Nl
YyA9ICh1aW50MzJfdClzdGNiLT5hc29jLnN0YXJ0X3RpbWUudHZfc2VjOworCQkJeHN0Y2Iuc3Rh
cnRfdGltZS50dl91c2VjID0gKHVpbnQzMl90KXN0Y2ItPmFzb2Muc3RhcnRfdGltZS50dl91c2Vj
OworCQkJeHN0Y2IuZGlzY29udGludWl0eV90aW1lLnR2X3NlYyA9ICh1aW50MzJfdClzdGNiLT5h
c29jLmRpc2NvbnRpbnVpdHlfdGltZS50dl9zZWM7CisJCQl4c3RjYi5kaXNjb250aW51aXR5X3Rp
bWUudHZfdXNlYyA9ICh1aW50MzJfdClzdGNiLT5hc29jLmRpc2NvbnRpbnVpdHlfdGltZS50dl91
c2VjOworCQkJeHN0Y2IudG90YWxfc2VuZHMgPSBzdGNiLT50b3RhbF9zZW5kczsKKwkJCXhzdGNi
LnRvdGFsX3JlY3ZzID0gc3RjYi0+dG90YWxfcmVjdnM7CisJCQl4c3RjYi5sb2NhbF90YWcgPSBz
dGNiLT5hc29jLm15X3Z0YWc7CisJCQl4c3RjYi5yZW1vdGVfdGFnID0gc3RjYi0+YXNvYy5wZWVy
X3Z0YWc7CisJCQl4c3RjYi5pbml0aWFsX3RzbiA9IHN0Y2ItPmFzb2MuaW5pdF9zZXFfbnVtYmVy
OworCQkJeHN0Y2IuaGlnaGVzdF90c24gPSBzdGNiLT5hc29jLnNlbmRpbmdfc2VxIC0gMTsKKwkJ
CXhzdGNiLmN1bXVsYXRpdmVfdHNuID0gc3RjYi0+YXNvYy5sYXN0X2Fja2VkX3NlcTsKKwkJCXhz
dGNiLmN1bXVsYXRpdmVfdHNuX2FjayA9IHN0Y2ItPmFzb2MuY3VtdWxhdGl2ZV90c247CisJCQl4
c3RjYi5tdHUgPSBzdGNiLT5hc29jLnNtYWxsZXN0X210dTsKKwkJCXhzdGNiLnJlZmNudCA9IHN0
Y2ItPmFzb2MucmVmY250OworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJU0NUUF9JTlBf
SU5GT19SVU5MT0NLKCk7CisJCQllcnJvciA9IFNZU0NUTF9PVVQocmVxLCAmeHN0Y2IsIHNpemVv
ZihzdHJ1Y3QgeHNjdHBfdGNiKSk7CisJCQlpZiAoZXJyb3IpIHsKKwkJCQlTQ1RQX0lOUF9ERUNS
X1JFRihpbnApOworCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAx
KTsKKwkJCQlyZXR1cm4gKGVycm9yKTsKKwkJCX0KKwkJCVNDVFBfSU5QX0lORk9fUkxPQ0soKTsK
KwkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQllcnJvciA9IHNjdHBfc3lzY3RsX2NvcHlfb3V0
X2xvY2FsX2FkZHJlc3NlcyhpbnAsIHN0Y2IsIHJlcSk7CisJCQlpZiAoZXJyb3IpIHsKKwkJCQlT
Q1RQX0lOUF9ERUNSX1JFRihpbnApOworCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFz
b2MucmVmY250LCAxKTsKKwkJCQlyZXR1cm4gKGVycm9yKTsKKwkJCX0KKwkJCVRBSUxRX0ZPUkVB
Q0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKwkJCQl4cmFkZHIubGFzdCA9
IDA7CisJCQkJeHJhZGRyLmFkZHJlc3MgPSBuZXQtPnJvLl9sX2FkZHI7CisJCQkJeHJhZGRyLmFj
dGl2ZSA9ICgobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkgPT0gU0NUUF9B
RERSX1JFQUNIQUJMRSk7CisJCQkJeHJhZGRyLmNvbmZpcm1lZCA9ICgobmV0LT5kZXN0X3N0YXRl
ICYgU0NUUF9BRERSX1VOQ09ORklSTUVEKSA9PSAwKTsKKwkJCQl4cmFkZHIuaGVhcnRiZWF0X2Vu
YWJsZWQgPSAoKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9OT0hCKSA9PSAwKTsKKwkJCQl4
cmFkZHIucG90ZW50aWFsbHlfZmFpbGVkID0gKChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJf
UEYpID09IFNDVFBfQUREUl9QRik7CisJCQkJeHJhZGRyLnJ0byA9IG5ldC0+UlRPOworCQkJCXhy
YWRkci5tYXhfcGF0aF9ydHggPSBuZXQtPmZhaWx1cmVfdGhyZXNob2xkOworCQkJCXhyYWRkci5y
dHggPSBuZXQtPm1hcmtlZF9yZXRyYW5zOworCQkJCXhyYWRkci5lcnJvcl9jb3VudGVyID0gbmV0
LT5lcnJvcl9jb3VudDsKKwkJCQl4cmFkZHIuY3duZCA9IG5ldC0+Y3duZDsKKwkJCQl4cmFkZHIu
ZmxpZ2h0X3NpemUgPSBuZXQtPmZsaWdodF9zaXplOworCQkJCXhyYWRkci5tdHUgPSBuZXQtPm10
dTsKKwkJCQl4cmFkZHIucnR0ID0gbmV0LT5ydHQgLyAxMDAwOworCQkJCXhyYWRkci5oZWFydGJl
YXRfaW50ZXJ2YWwgPSBuZXQtPmhlYXJ0X2JlYXRfZGVsYXk7CisJCQkJeHJhZGRyLnNzdGhyZXNo
ID0gbmV0LT5zc3RocmVzaDsKKwkJCQl4cmFkZHIuZW5jYXBzX3BvcnQgPSBuZXQtPnBvcnQ7CisJ
CQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkgeworCQkJCQl4
cmFkZHIuc3RhdGUgPSBTQ1RQX1VOQ09ORklSTUVEOworCQkJCX0gZWxzZSBpZiAobmV0LT5kZXN0
X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkgeworCQkJCQl4cmFkZHIuc3RhdGUgPSBTQ1RQ
X0FDVElWRTsKKwkJCQl9IGVsc2UgeworCQkJCQl4cmFkZHIuc3RhdGUgPSBTQ1RQX0lOQUNUSVZF
OworCQkJCX0KKwkJCQl4cmFkZHIuc3RhcnRfdGltZS50dl9zZWMgPSAodWludDMyX3QpbmV0LT5z
dGFydF90aW1lLnR2X3NlYzsKKwkJCQl4cmFkZHIuc3RhcnRfdGltZS50dl91c2VjID0gKHVpbnQz
Ml90KW5ldC0+c3RhcnRfdGltZS50dl91c2VjOworCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsK
KwkJCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKwkJCQllcnJvciA9IFNZU0NUTF9PVVQocmVx
LCAmeHJhZGRyLCBzaXplb2Yoc3RydWN0IHhzY3RwX3JhZGRyKSk7CisJCQkJaWYgKGVycm9yKSB7
CisJCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQo
JnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCQkJcmV0dXJuIChlcnJvcik7CisJCQkJfQorCQkJ
CVNDVFBfSU5QX0lORk9fUkxPQ0soKTsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJfQor
CQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJbWVtc2V0
KCh2b2lkICopJnhyYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCB4c2N0cF9yYWRkcikpOworCQkJeHJh
ZGRyLmxhc3QgPSAxOworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJU0NUUF9JTlBfSU5G
T19SVU5MT0NLKCk7CisJCQllcnJvciA9IFNZU0NUTF9PVVQocmVxLCAmeHJhZGRyLCBzaXplb2Yo
c3RydWN0IHhzY3RwX3JhZGRyKSk7CisJCQlpZiAoZXJyb3IpIHsKKwkJCQlTQ1RQX0lOUF9ERUNS
X1JFRihpbnApOworCQkJCXJldHVybiAoZXJyb3IpOworCQkJfQorCQkJU0NUUF9JTlBfSU5GT19S
TE9DSygpOworCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJfQorCQlTQ1RQX0lOUF9ERUNSX1JF
RihpbnApOworCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCVNDVFBfSU5QX0lORk9fUlVOTE9D
SygpOworCQltZW1zZXQoKHZvaWQgKikmeHN0Y2IsIDAsIHNpemVvZihzdHJ1Y3QgeHNjdHBfdGNi
KSk7CisJCXhzdGNiLmxhc3QgPSAxOworCQllcnJvciA9IFNZU0NUTF9PVVQocmVxLCAmeHN0Y2Is
IHNpemVvZihzdHJ1Y3QgeHNjdHBfdGNiKSk7CisJCWlmIChlcnJvcikgeworCQkJcmV0dXJuIChl
cnJvcik7CisJCX0KK3NraXA6CisJCVNDVFBfSU5QX0lORk9fUkxPQ0soKTsKKwl9CisJU0NUUF9J
TlBfSU5GT19SVU5MT0NLKCk7CisKKwltZW1zZXQoKHZvaWQgKikmeGlucGNiLCAwLCBzaXplb2Yo
c3RydWN0IHhzY3RwX2lucGNiKSk7CisJeGlucGNiLmxhc3QgPSAxOworCWVycm9yID0gU1lTQ1RM
X09VVChyZXEsICZ4aW5wY2IsIHNpemVvZihzdHJ1Y3QgeHNjdHBfaW5wY2IpKTsKKwlyZXR1cm4g
KGVycm9yKTsKK30KKworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorc3RhdGljIGludAorc2N0cF9zeXNjdGxfaGFuZGxlX3VkcF90dW5uZWxpbmcgU1lT
Q1RMX0hBTkRMRVJfQVJHUworeworI3ByYWdtYSB1bnVzZWQoYXJnMSwgYXJnMikKKyNlbHNlCitz
dGF0aWMgaW50CitzY3RwX3N5c2N0bF9oYW5kbGVfdWRwX3R1bm5lbGluZyhTWVNDVExfSEFORExF
Ul9BUkdTKQoreworI2VuZGlmCisJaW50IGVycm9yOworCXVpbnQzMl90IG9sZCwgbmV3OworCisJ
U0NUUF9JTlBfSU5GT19STE9DSygpOworCW9sZCA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF91ZHBf
dHVubmVsaW5nX3BvcnQpOworCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOworCW5ldyA9IG9sZDsK
KwllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZuZXcsIDAsIHJlcSk7CisJaWYgKChl
cnJvciA9PSAwKSAmJgorI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorCSAgICAocmVxLT5uZXdwdHIgIT0gVVNFUl9BRERSX05VTEwpKSB7CisjZWxzZQor
CSAgICAocmVxLT5uZXdwdHIgIT0gTlVMTCkpIHsKKyNlbmRpZgorI2lmIGRlZmluZWQoX1dJTjMy
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlTQ1RQX0lOUF9JTkZPX1dMT0NLKCk7CisJ
CXNjdHBfb3Zlcl91ZHBfcmVzdGFydCgpOworCQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKKyNl
bHNlCisjaWYgKFNDVFBDVExfVURQX1RVTk5FTElOR19QT1JUX01JTiA9PSAwKQorCQlpZiAobmV3
ID4gU0NUUENUTF9VRFBfVFVOTkVMSU5HX1BPUlRfTUFYKSB7CisjZWxzZQorCQlpZiAoKG5ldyA8
IFNDVFBDVExfVURQX1RVTk5FTElOR19QT1JUX01JTikgfHwKKwkJICAgIChuZXcgPiBTQ1RQQ1RM
X1VEUF9UVU5ORUxJTkdfUE9SVF9NQVgpKSB7CisjZW5kaWYKKwkJCWVycm9yID0gRUlOVkFMOwor
CQl9IGVsc2UgeworCQkJU0NUUF9JTlBfSU5GT19XTE9DSygpOworCQkJU0NUUF9CQVNFX1NZU0NU
TChzY3RwX3VkcF90dW5uZWxpbmdfcG9ydCkgPSBuZXc7CisJCQlpZiAob2xkICE9IDApIHsKKwkJ
CQlzY3RwX292ZXJfdWRwX3N0b3AoKTsKKwkJCX0KKwkJCWlmIChuZXcgIT0gMCkgeworCQkJCWVy
cm9yID0gc2N0cF9vdmVyX3VkcF9zdGFydCgpOworCQkJfQorCQkJU0NUUF9JTlBfSU5GT19XVU5M
T0NLKCk7CisJCX0KKyNlbmRpZgorCX0KKwlyZXR1cm4gKGVycm9yKTsKK30KKyNpZiBkZWZpbmVk
KF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKworaW50IHNjdHBfaXNfdm13
YXJlX2ludGVyZmFjZShzdHJ1Y3QgaWZuZXQgKik7CisKK3N0YXRpYyBpbnQKK3NjdHBfc3lzY3Rs
X2hhbmRsZV92bXdhcmVfaW50ZXJmYWNlcyBTWVNDVExfSEFORExFUl9BUkdTCit7CisjcHJhZ21h
IHVudXNlZChhcmcxLCBhcmcyKQorCWludCBlcnJvcjsKKwl1aW50MzJfdCBvbGQsIG5ldzsKKwor
CW9sZCA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pZ25vcmVfdm13YXJlX2ludGVyZmFjZXMpOwor
CW5ldyA9IG9sZDsKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZuZXcsIDAsIHJl
cSk7CisJaWYgKChlcnJvciA9PSAwKSAmJiAocmVxLT5uZXdwdHIgIT0gVVNFUl9BRERSX05VTEwp
KSB7CisJCWlmICgobmV3IDwgU0NUUENUTF9JR05PUkVfVk1XQVJFX0lOVEVSRkFDRVNfTUlOKSB8
fAorCQkgICAgKG5ldyA+IFNDVFBDVExfSUdOT1JFX1ZNV0FSRV9JTlRFUkZBQ0VTX01BWCkpIHsK
KwkJCWVycm9yID0gRUlOVkFMOworCQl9IGVsc2UgeworCQkJaWYgKChvbGQgPT0gMSkgJiYgKG5l
dyA9PSAwKSkgeworCQkJCXNjdHBfYWRkX29yX2RlbF9pbnRlcmZhY2VzKHNjdHBfaXNfdm13YXJl
X2ludGVyZmFjZSwgMSk7CisJCQl9CisJCQlpZiAoKG9sZCA9PSAwKSAmJiAobmV3ID09IDEpKSB7
CisJCQkJc2N0cF9hZGRfb3JfZGVsX2ludGVyZmFjZXMoc2N0cF9pc192bXdhcmVfaW50ZXJmYWNl
LCAwKTsKKwkJCX0KKwkJCWlmIChvbGQgIT0gbmV3KSB7CisJCQkJU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX2lnbm9yZV92bXdhcmVfaW50ZXJmYWNlcykgPSBuZXc7CisJCQl9CisJCX0KKwl9CisJcmV0
dXJuIChlcnJvcik7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorc3RhdGljIGludAorc2N0cF9zeXNjdGxfaGFuZGxlX2F1dGgg
U1lTQ1RMX0hBTkRMRVJfQVJHUworeworI3ByYWdtYSB1bnVzZWQoYXJnMSwgYXJnMikKKyNlbHNl
CitzdGF0aWMgaW50CitzY3RwX3N5c2N0bF9oYW5kbGVfYXV0aChTWVNDVExfSEFORExFUl9BUkdT
KQoreworI2VuZGlmCisJaW50IGVycm9yOworCXVpbnQzMl90IG5ldzsKKworCW5ldyA9IFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9hdXRoX2VuYWJsZSk7CisJZXJyb3IgPSBzeXNjdGxfaGFuZGxlX2lu
dChvaWRwLCAmbmV3LCAwLCByZXEpOworCWlmICgoZXJyb3IgPT0gMCkgJiYKKyNpZiBkZWZpbmVk
KF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkgICAgKHJlcS0+bmV3cHRy
ICE9IFVTRVJfQUREUl9OVUxMKSkgeworI2Vsc2UKKwkgICAgKHJlcS0+bmV3cHRyICE9IE5VTEwp
KSB7CisjZW5kaWYKKyNpZiAoU0NUUENUTF9BVVRIX0VOQUJMRV9NSU4gPT0gMCkKKwkJaWYgKChu
ZXcgPiBTQ1RQQ1RMX0FVVEhfRU5BQkxFX01BWCkgfHwKKwkJICAgICgobmV3ID09IDApICYmIChT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNjb25mX2VuYWJsZSkgPT0gMSkpKSB7CisjZWxzZQorCQlp
ZiAoKG5ldyA8IFNDVFBDVExfQVVUSF9FTkFCTEVfTUlOKSB8fAorCQkgICAgKG5ldyA+IFNDVFBD
VExfQVVUSF9FTkFCTEVfTUFYKSB8fAorCQkgICAgKChuZXcgPT0gMCkgJiYgKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9hc2NvbmZfZW5hYmxlKSA9PSAxKSkpIHsKKyNlbmRpZgorCQkJZXJyb3IgPSBF
SU5WQUw7CisJCX0gZWxzZSB7CisJCQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXV0aF9lbmFibGUp
ID0gbmV3OworCQl9CisJfQorCXJldHVybiAoZXJyb3IpOworfQorCisjaWYgZGVmaW5lZChfX0FQ
UExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitzdGF0aWMgaW50CitzY3RwX3N5c2N0
bF9oYW5kbGVfYXNjb25mIFNZU0NUTF9IQU5ETEVSX0FSR1MKK3sKKyNwcmFnbWEgdW51c2VkKGFy
ZzEsIGFyZzIpCisjZWxzZQorc3RhdGljIGludAorc2N0cF9zeXNjdGxfaGFuZGxlX2FzY29uZihT
WVNDVExfSEFORExFUl9BUkdTKQoreworI2VuZGlmCisJaW50IGVycm9yOworCXVpbnQzMl90IG5l
dzsKKworCW5ldyA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hc2NvbmZfZW5hYmxlKTsKKwllcnJv
ciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZuZXcsIDAsIHJlcSk7CisJaWYgKChlcnJvciA9
PSAwKSAmJgorI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorCSAgICAocmVxLT5uZXdwdHIgIT0gVVNFUl9BRERSX05VTEwpKSB7CisjZWxzZQorCSAgICAo
cmVxLT5uZXdwdHIgIT0gTlVMTCkpIHsKKyNlbmRpZgorI2lmIChTQ1RQQ1RMX0FTQ09ORl9FTkFC
TEVfTUlOID09IDApCisJCWlmICgobmV3ID4gU0NUUENUTF9BU0NPTkZfRU5BQkxFX01BWCkgfHwK
KwkJICAgICgobmV3ID09IDEpICYmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXV0aF9lbmFibGUp
ID09IDApKSkgeworI2Vsc2UKKwkJaWYgKChuZXcgPCBTQ1RQQ1RMX0FTQ09ORl9FTkFCTEVfTUlO
KSB8fAorCQkgICAgKG5ldyA+IFNDVFBDVExfQVNDT05GX0VOQUJMRV9NQVgpIHx8CisJCSAgICAo
KG5ldyA9PSAxKSAmJiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2F1dGhfZW5hYmxlKSA9PSAwKSkp
IHsKKyNlbmRpZgorCQkJZXJyb3IgPSBFSU5WQUw7CisJCX0gZWxzZSB7CisJCQlTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfYXNjb25mX2VuYWJsZSkgPSBuZXc7CisJCX0KKwl9CisJcmV0dXJuIChlcnJv
cik7Cit9CisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKK3N0YXRpYyBpbnQKK3NjdHBfc3lzY3RsX2hhbmRsZV9zdGF0cyBTWVNDVExfSEFORExFUl9B
UkdTCit7CisjcHJhZ21hIHVudXNlZChvaWRwLCBhcmcxLCBhcmcyKQorI2Vsc2UKK3N0YXRpYyBp
bnQKK3NjdHBfc3lzY3RsX2hhbmRsZV9zdGF0cyhTWVNDVExfSEFORExFUl9BUkdTKQoreworI2Vu
ZGlmCisJaW50IGVycm9yOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisjaWYgZGVmaW5lZChTTVApICYmIGRlZmluZWQoU0NUUF9VU0VfUEVSQ1BV
X1NUQVQpCisJc3RydWN0IHNjdHBzdGF0ICpzYXJyeTsKKwlzdHJ1Y3Qgc2N0cHN0YXQgc2I7CisJ
aW50IGNwdTsKKyNlbmRpZgorCXN0cnVjdCBzY3Rwc3RhdCBzYl90ZW1wOworI2VuZGlmCisKKyNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlpZiAoKHJl
cS0+bmV3cHRyICE9IFVTRVJfQUREUl9OVUxMKSAmJgorI2Vsc2UKKwlpZiAoKHJlcS0+bmV3cHRy
ICE9IE5VTEwpICYmCisjZW5kaWYKKwkgICAgKHJlcS0+bmV3bGVuICE9IHNpemVvZihzdHJ1Y3Qg
c2N0cHN0YXQpKSkgeworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQorI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJbWVtc2V0KCZzYl90ZW1wLCAwLCBz
aXplb2Yoc3RydWN0IHNjdHBzdGF0KSk7CisKKwlpZiAocmVxLT5uZXdwdHIgIT0gTlVMTCkgewor
CQllcnJvciA9IFNZU0NUTF9JTihyZXEsICZzYl90ZW1wLCBzaXplb2Yoc3RydWN0IHNjdHBzdGF0
KSk7CisJCWlmIChlcnJvciAhPSAwKSB7CisJCQlyZXR1cm4gKGVycm9yKTsKKwkJfQorCX0KKyNp
ZiBkZWZpbmVkKFNNUCkgJiYgZGVmaW5lZChTQ1RQX1VTRV9QRVJDUFVfU1RBVCkKKwltZW1zZXQo
JnNiLCAwLCBzaXplb2Yoc2IpKTsKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IG1wX21heGlkOyBjcHUr
KykgeworCQlzYXJyeSA9ICZTQ1RQX0JBU0VfU1RBVFNbY3B1XTsKKwkJaWYgKHNhcnJ5LT5zY3Rw
c19kaXNjb250aW51aXR5dGltZS50dl9zZWMgPiBzYi5zY3Rwc19kaXNjb250aW51aXR5dGltZS50
dl9zZWMpIHsKKwkJCXNiLnNjdHBzX2Rpc2NvbnRpbnVpdHl0aW1lLnR2X3NlYyA9IHNhcnJ5LT5z
Y3Rwc19kaXNjb250aW51aXR5dGltZS50dl9zZWM7CisJCQlzYi5zY3Rwc19kaXNjb250aW51aXR5
dGltZS50dl91c2VjID0gc2FycnktPnNjdHBzX2Rpc2NvbnRpbnVpdHl0aW1lLnR2X3VzZWM7CisJ
CX0KKwkJc2Iuc2N0cHNfY3VycmVzdGFiICs9IHNhcnJ5LT5zY3Rwc19jdXJyZXN0YWI7CisJCXNi
LnNjdHBzX2FjdGl2ZWVzdGFiICs9IHNhcnJ5LT5zY3Rwc19hY3RpdmVlc3RhYjsKKwkJc2Iuc2N0
cHNfcmVzdGFydGVzdGFiICs9IHNhcnJ5LT5zY3Rwc19yZXN0YXJ0ZXN0YWI7CisJCXNiLnNjdHBz
X2NvbGxpc2lvbmVzdGFiICs9IHNhcnJ5LT5zY3Rwc19jb2xsaXNpb25lc3RhYjsKKwkJc2Iuc2N0
cHNfcGFzc2l2ZWVzdGFiICs9IHNhcnJ5LT5zY3Rwc19wYXNzaXZlZXN0YWI7CisJCXNiLnNjdHBz
X2Fib3J0ZWQgKz0gc2FycnktPnNjdHBzX2Fib3J0ZWQ7CisJCXNiLnNjdHBzX3NodXRkb3duICs9
IHNhcnJ5LT5zY3Rwc19zaHV0ZG93bjsKKwkJc2Iuc2N0cHNfb3V0b2Z0aGVibHVlICs9IHNhcnJ5
LT5zY3Rwc19vdXRvZnRoZWJsdWU7CisJCXNiLnNjdHBzX2NoZWNrc3VtZXJyb3JzICs9IHNhcnJ5
LT5zY3Rwc19jaGVja3N1bWVycm9yczsKKwkJc2Iuc2N0cHNfb3V0Y29udHJvbGNodW5rcyArPSBz
YXJyeS0+c2N0cHNfb3V0Y29udHJvbGNodW5rczsKKwkJc2Iuc2N0cHNfb3V0b3JkZXJjaHVua3Mg
Kz0gc2FycnktPnNjdHBzX291dG9yZGVyY2h1bmtzOworCQlzYi5zY3Rwc19vdXR1bm9yZGVyY2h1
bmtzICs9IHNhcnJ5LT5zY3Rwc19vdXR1bm9yZGVyY2h1bmtzOworCQlzYi5zY3Rwc19pbmNvbnRy
b2xjaHVua3MgKz0gc2FycnktPnNjdHBzX2luY29udHJvbGNodW5rczsKKwkJc2Iuc2N0cHNfaW5v
cmRlcmNodW5rcyArPSBzYXJyeS0+c2N0cHNfaW5vcmRlcmNodW5rczsKKwkJc2Iuc2N0cHNfaW51
bm9yZGVyY2h1bmtzICs9IHNhcnJ5LT5zY3Rwc19pbnVub3JkZXJjaHVua3M7CisJCXNiLnNjdHBz
X2ZyYWd1c3Jtc2dzICs9IHNhcnJ5LT5zY3Rwc19mcmFndXNybXNnczsKKwkJc2Iuc2N0cHNfcmVh
c211c3Jtc2dzICs9IHNhcnJ5LT5zY3Rwc19yZWFzbXVzcm1zZ3M7CisJCXNiLnNjdHBzX291dHBh
Y2tldHMgKz0gc2FycnktPnNjdHBzX291dHBhY2tldHM7CisJCXNiLnNjdHBzX2lucGFja2V0cyAr
PSBzYXJyeS0+c2N0cHNfaW5wYWNrZXRzOworCQlzYi5zY3Rwc19yZWN2cGFja2V0cyArPSBzYXJy
eS0+c2N0cHNfcmVjdnBhY2tldHM7CisJCXNiLnNjdHBzX3JlY3ZkYXRhZ3JhbXMgKz0gc2Fycnkt
PnNjdHBzX3JlY3ZkYXRhZ3JhbXM7CisJCXNiLnNjdHBzX3JlY3Zwa3R3aXRoZGF0YSArPSBzYXJy
eS0+c2N0cHNfcmVjdnBrdHdpdGhkYXRhOworCQlzYi5zY3Rwc19yZWN2c2Fja3MgKz0gc2Fycnkt
PnNjdHBzX3JlY3ZzYWNrczsKKwkJc2Iuc2N0cHNfcmVjdmRhdGEgKz0gc2FycnktPnNjdHBzX3Jl
Y3ZkYXRhOworCQlzYi5zY3Rwc19yZWN2ZHVwZGF0YSArPSBzYXJyeS0+c2N0cHNfcmVjdmR1cGRh
dGE7CisJCXNiLnNjdHBzX3JlY3ZoZWFydGJlYXQgKz0gc2FycnktPnNjdHBzX3JlY3ZoZWFydGJl
YXQ7CisJCXNiLnNjdHBzX3JlY3ZoZWFydGJlYXRhY2sgKz0gc2FycnktPnNjdHBzX3JlY3ZoZWFy
dGJlYXRhY2s7CisJCXNiLnNjdHBzX3JlY3ZlY25lICs9IHNhcnJ5LT5zY3Rwc19yZWN2ZWNuZTsK
KwkJc2Iuc2N0cHNfcmVjdmF1dGggKz0gc2FycnktPnNjdHBzX3JlY3ZhdXRoOworCQlzYi5zY3Rw
c19yZWN2YXV0aG1pc3NpbmcgKz0gc2FycnktPnNjdHBzX3JlY3ZhdXRobWlzc2luZzsKKwkJc2Iu
c2N0cHNfcmVjdml2YWxobWFjaWQgKz0gc2FycnktPnNjdHBzX3JlY3ZpdmFsaG1hY2lkOworCQlz
Yi5zY3Rwc19yZWN2aXZhbGtleWlkICs9IHNhcnJ5LT5zY3Rwc19yZWN2aXZhbGtleWlkOworCQlz
Yi5zY3Rwc19yZWN2YXV0aGZhaWxlZCArPSBzYXJyeS0+c2N0cHNfcmVjdmF1dGhmYWlsZWQ7CisJ
CXNiLnNjdHBzX3JlY3ZleHByZXNzICs9IHNhcnJ5LT5zY3Rwc19yZWN2ZXhwcmVzczsKKwkJc2Iu
c2N0cHNfcmVjdmV4cHJlc3NtICs9IHNhcnJ5LT5zY3Rwc19yZWN2ZXhwcmVzc207CisJCXNiLnNj
dHBzX3JlY3Zzd2NyYyArPSBzYXJyeS0+c2N0cHNfcmVjdnN3Y3JjOworCQlzYi5zY3Rwc19yZWN2
aHdjcmMgKz0gc2FycnktPnNjdHBzX3JlY3Zod2NyYzsKKwkJc2Iuc2N0cHNfc2VuZHBhY2tldHMg
Kz0gc2FycnktPnNjdHBzX3NlbmRwYWNrZXRzOworCQlzYi5zY3Rwc19zZW5kc2Fja3MgKz0gc2Fy
cnktPnNjdHBzX3NlbmRzYWNrczsKKwkJc2Iuc2N0cHNfc2VuZGRhdGEgKz0gc2FycnktPnNjdHBz
X3NlbmRkYXRhOworCQlzYi5zY3Rwc19zZW5kcmV0cmFuc2RhdGEgKz0gc2FycnktPnNjdHBzX3Nl
bmRyZXRyYW5zZGF0YTsKKwkJc2Iuc2N0cHNfc2VuZGZhc3RyZXRyYW5zICs9IHNhcnJ5LT5zY3Rw
c19zZW5kZmFzdHJldHJhbnM7CisJCXNiLnNjdHBzX3NlbmRtdWx0ZmFzdHJldHJhbnMgKz0gc2Fy
cnktPnNjdHBzX3NlbmRtdWx0ZmFzdHJldHJhbnM7CisJCXNiLnNjdHBzX3NlbmRoZWFydGJlYXQg
Kz0gc2FycnktPnNjdHBzX3NlbmRoZWFydGJlYXQ7CisJCXNiLnNjdHBzX3NlbmRlY25lICs9IHNh
cnJ5LT5zY3Rwc19zZW5kZWNuZTsKKwkJc2Iuc2N0cHNfc2VuZGF1dGggKz0gc2FycnktPnNjdHBz
X3NlbmRhdXRoOworCQlzYi5zY3Rwc19zZW5kZXJyb3JzICs9IHNhcnJ5LT5zY3Rwc19zZW5kZXJy
b3JzOworCQlzYi5zY3Rwc19zZW5kc3djcmMgKz0gc2FycnktPnNjdHBzX3NlbmRzd2NyYzsKKwkJ
c2Iuc2N0cHNfc2VuZGh3Y3JjICs9IHNhcnJ5LT5zY3Rwc19zZW5kaHdjcmM7CisJCXNiLnNjdHBz
X3BkcnBmbWJveCArPSBzYXJyeS0+c2N0cHNfcGRycGZtYm94OworCQlzYi5zY3Rwc19wZHJwZmVo
b3MgKz0gc2FycnktPnNjdHBzX3BkcnBmZWhvczsKKwkJc2Iuc2N0cHNfcGRycG1iZGEgKz0gc2Fy
cnktPnNjdHBzX3BkcnBtYmRhOworCQlzYi5zY3Rwc19wZHJwbWJjdCArPSBzYXJyeS0+c2N0cHNf
cGRycG1iY3Q7CisJCXNiLnNjdHBzX3BkcnBid3JwdCArPSBzYXJyeS0+c2N0cHNfcGRycGJ3cnB0
OworCQlzYi5zY3Rwc19wZHJwY3J1cHQgKz0gc2FycnktPnNjdHBzX3BkcnBjcnVwdDsKKwkJc2Iu
c2N0cHNfcGRycG5lZGF0ICs9IHNhcnJ5LT5zY3Rwc19wZHJwbmVkYXQ7CisJCXNiLnNjdHBzX3Bk
cnBwZGJyayArPSBzYXJyeS0+c2N0cHNfcGRycHBkYnJrOworCQlzYi5zY3Rwc19wZHJwdHNubmYg
Kz0gc2FycnktPnNjdHBzX3BkcnB0c25uZjsKKwkJc2Iuc2N0cHNfcGRycGRuZm5kICs9IHNhcnJ5
LT5zY3Rwc19wZHJwZG5mbmQ7CisJCXNiLnNjdHBzX3BkcnBkaXducCArPSBzYXJyeS0+c2N0cHNf
cGRycGRpd25wOworCQlzYi5zY3Rwc19wZHJwZGl6cncgKz0gc2FycnktPnNjdHBzX3BkcnBkaXpy
dzsKKwkJc2Iuc2N0cHNfcGRycGJhZGQgKz0gc2FycnktPnNjdHBzX3BkcnBiYWRkOworCQlzYi5z
Y3Rwc19wZHJwbWFyayArPSBzYXJyeS0+c2N0cHNfcGRycG1hcms7CisJCXNiLnNjdHBzX3RpbW9p
dGVyYXRvciArPSBzYXJyeS0+c2N0cHNfdGltb2l0ZXJhdG9yOworCQlzYi5zY3Rwc190aW1vZGF0
YSArPSBzYXJyeS0+c2N0cHNfdGltb2RhdGE7CisJCXNiLnNjdHBzX3RpbW93aW5kb3dwcm9iZSAr
PSBzYXJyeS0+c2N0cHNfdGltb3dpbmRvd3Byb2JlOworCQlzYi5zY3Rwc190aW1vaW5pdCArPSBz
YXJyeS0+c2N0cHNfdGltb2luaXQ7CisJCXNiLnNjdHBzX3RpbW9zYWNrICs9IHNhcnJ5LT5zY3Rw
c190aW1vc2FjazsKKwkJc2Iuc2N0cHNfdGltb3NodXRkb3duICs9IHNhcnJ5LT5zY3Rwc190aW1v
c2h1dGRvd247CisJCXNiLnNjdHBzX3RpbW9oZWFydGJlYXQgKz0gc2FycnktPnNjdHBzX3RpbW9o
ZWFydGJlYXQ7CisJCXNiLnNjdHBzX3RpbW9jb29raWUgKz0gc2FycnktPnNjdHBzX3RpbW9jb29r
aWU7CisJCXNiLnNjdHBzX3RpbW9zZWNyZXQgKz0gc2FycnktPnNjdHBzX3RpbW9zZWNyZXQ7CisJ
CXNiLnNjdHBzX3RpbW9wYXRobXR1ICs9IHNhcnJ5LT5zY3Rwc190aW1vcGF0aG10dTsKKwkJc2Iu
c2N0cHNfdGltb3NodXRkb3duYWNrICs9IHNhcnJ5LT5zY3Rwc190aW1vc2h1dGRvd25hY2s7CisJ
CXNiLnNjdHBzX3RpbW9zaHV0ZG93bmd1YXJkICs9IHNhcnJ5LT5zY3Rwc190aW1vc2h1dGRvd25n
dWFyZDsKKwkJc2Iuc2N0cHNfdGltb3N0cm1yc3QgKz0gc2FycnktPnNjdHBzX3RpbW9zdHJtcnN0
OworCQlzYi5zY3Rwc190aW1vZWFybHlmciArPSBzYXJyeS0+c2N0cHNfdGltb2Vhcmx5ZnI7CisJ
CXNiLnNjdHBzX3RpbW9hc2NvbmYgKz0gc2FycnktPnNjdHBzX3RpbW9hc2NvbmY7CisJCXNiLnNj
dHBzX3RpbW9kZWxwcmltICs9IHNhcnJ5LT5zY3Rwc190aW1vZGVscHJpbTsKKwkJc2Iuc2N0cHNf
dGltb2F1dG9jbG9zZSArPSBzYXJyeS0+c2N0cHNfdGltb2F1dG9jbG9zZTsKKwkJc2Iuc2N0cHNf
dGltb2Fzc29ja2lsbCArPSBzYXJyeS0+c2N0cHNfdGltb2Fzc29ja2lsbDsKKwkJc2Iuc2N0cHNf
dGltb2lucGtpbGwgKz0gc2FycnktPnNjdHBzX3RpbW9pbnBraWxsOworCQlzYi5zY3Rwc19oZHJv
cHMgKz0gc2FycnktPnNjdHBzX2hkcm9wczsKKwkJc2Iuc2N0cHNfYmFkc3VtICs9IHNhcnJ5LT5z
Y3Rwc19iYWRzdW07CisJCXNiLnNjdHBzX25vcG9ydCArPSBzYXJyeS0+c2N0cHNfbm9wb3J0Owor
CQlzYi5zY3Rwc19iYWR2dGFnICs9IHNhcnJ5LT5zY3Rwc19iYWR2dGFnOworCQlzYi5zY3Rwc19i
YWRzaWQgKz0gc2FycnktPnNjdHBzX2JhZHNpZDsKKwkJc2Iuc2N0cHNfbm9tZW0gKz0gc2Fycnkt
PnNjdHBzX25vbWVtOworCQlzYi5zY3Rwc19mYXN0cmV0cmFuc2lucnR0ICs9IHNhcnJ5LT5zY3Rw
c19mYXN0cmV0cmFuc2lucnR0OworCQlzYi5zY3Rwc19tYXJrZWRyZXRyYW5zICs9IHNhcnJ5LT5z
Y3Rwc19tYXJrZWRyZXRyYW5zOworCQlzYi5zY3Rwc19uYWdsZXNlbnQgKz0gc2FycnktPnNjdHBz
X25hZ2xlc2VudDsKKwkJc2Iuc2N0cHNfbmFnbGVxdWV1ZWQgKz0gc2FycnktPnNjdHBzX25hZ2xl
cXVldWVkOworCQlzYi5zY3Rwc19tYXhidXJzdHF1ZXVlZCArPSBzYXJyeS0+c2N0cHNfbWF4YnVy
c3RxdWV1ZWQ7CisJCXNiLnNjdHBzX2lmbm9tZW1xdWV1ZWQgKz0gc2FycnktPnNjdHBzX2lmbm9t
ZW1xdWV1ZWQ7CisJCXNiLnNjdHBzX3dpbmRvd3Byb2JlZCArPSBzYXJyeS0+c2N0cHNfd2luZG93
cHJvYmVkOworCQlzYi5zY3Rwc19sb3dsZXZlbGVyciArPSBzYXJyeS0+c2N0cHNfbG93bGV2ZWxl
cnI7CisJCXNiLnNjdHBzX2xvd2xldmVsZXJydXNyICs9IHNhcnJ5LT5zY3Rwc19sb3dsZXZlbGVy
cnVzcjsKKwkJc2Iuc2N0cHNfZGF0YWRyb3BjaGtsbXQgKz0gc2FycnktPnNjdHBzX2RhdGFkcm9w
Y2hrbG10OworCQlzYi5zY3Rwc19kYXRhZHJvcHJ3bmQgKz0gc2FycnktPnNjdHBzX2RhdGFkcm9w
cnduZDsKKwkJc2Iuc2N0cHNfZWNuZXJlZHVjZWRjd25kICs9IHNhcnJ5LT5zY3Rwc19lY25lcmVk
dWNlZGN3bmQ7CisJCXNiLnNjdHBzX3Z0YWdleHByZXNzICs9IHNhcnJ5LT5zY3Rwc192dGFnZXhw
cmVzczsKKwkJc2Iuc2N0cHNfdnRhZ2JvZ3VzICs9IHNhcnJ5LT5zY3Rwc192dGFnYm9ndXM7CisJ
CXNiLnNjdHBzX3ByaW1hcnlfcmFuZHJ5ICs9IHNhcnJ5LT5zY3Rwc19wcmltYXJ5X3JhbmRyeTsK
KwkJc2Iuc2N0cHNfY210X3JhbmRyeSArPSBzYXJyeS0+c2N0cHNfY210X3JhbmRyeTsKKwkJc2Iu
c2N0cHNfc2xvd3BhdGhfc2FjayArPSBzYXJyeS0+c2N0cHNfc2xvd3BhdGhfc2FjazsKKwkJc2Iu
c2N0cHNfd3Vfc2Fja3Nfc2VudCArPSBzYXJyeS0+c2N0cHNfd3Vfc2Fja3Nfc2VudDsKKwkJc2Iu
c2N0cHNfc2VuZHNfd2l0aF9mbGFncyArPSBzYXJyeS0+c2N0cHNfc2VuZHNfd2l0aF9mbGFnczsK
KwkJc2Iuc2N0cHNfc2VuZHNfd2l0aF91bm9yZCArPSBzYXJyeS0+c2N0cHNfc2VuZHNfd2l0aF91
bm9yZDsKKwkJc2Iuc2N0cHNfc2VuZHNfd2l0aF9lb2YgKz0gc2FycnktPnNjdHBzX3NlbmRzX3dp
dGhfZW9mOworCQlzYi5zY3Rwc19zZW5kc193aXRoX2Fib3J0ICs9IHNhcnJ5LT5zY3Rwc19zZW5k
c193aXRoX2Fib3J0OworCQlzYi5zY3Rwc19wcm90b2NvbF9kcmFpbl9jYWxscyArPSBzYXJyeS0+
c2N0cHNfcHJvdG9jb2xfZHJhaW5fY2FsbHM7CisJCXNiLnNjdHBzX3Byb3RvY29sX2RyYWluc19k
b25lICs9IHNhcnJ5LT5zY3Rwc19wcm90b2NvbF9kcmFpbnNfZG9uZTsKKwkJc2Iuc2N0cHNfcmVh
ZF9wZWVrcyArPSBzYXJyeS0+c2N0cHNfcmVhZF9wZWVrczsKKwkJc2Iuc2N0cHNfY2FjaGVkX2No
ayArPSBzYXJyeS0+c2N0cHNfY2FjaGVkX2NoazsKKwkJc2Iuc2N0cHNfY2FjaGVkX3N0cm1vcSAr
PSBzYXJyeS0+c2N0cHNfY2FjaGVkX3N0cm1vcTsKKwkJc2Iuc2N0cHNfbGVmdF9hYmFuZG9uICs9
IHNhcnJ5LT5zY3Rwc19sZWZ0X2FiYW5kb247CisJCXNiLnNjdHBzX3NlbmRfYnVyc3RfYXZvaWQg
Kz0gc2FycnktPnNjdHBzX3NlbmRfYnVyc3RfYXZvaWQ7CisJCXNiLnNjdHBzX3NlbmRfY3duZF9h
dm9pZCArPSBzYXJyeS0+c2N0cHNfc2VuZF9jd25kX2F2b2lkOworCQlzYi5zY3Rwc19md2R0c25f
bWFwX292ZXIgKz0gc2FycnktPnNjdHBzX2Z3ZHRzbl9tYXBfb3ZlcjsKKwkJaWYgKHJlcS0+bmV3
cHRyICE9IE5VTEwpIHsKKwkJCW1lbWNweShzYXJyeSwgJnNiX3RlbXAsIHNpemVvZihzdHJ1Y3Qg
c2N0cHN0YXQpKTsKKwkJfQorCX0KKwllcnJvciA9IFNZU0NUTF9PVVQocmVxLCAmc2IsIHNpemVv
ZihzdHJ1Y3Qgc2N0cHN0YXQpKTsKKyNlbHNlCisJZXJyb3IgPSBTWVNDVExfT1VUKHJlcSwgJlND
VFBfQkFTRV9TVEFUUywgc2l6ZW9mKHN0cnVjdCBzY3Rwc3RhdCkpOworCWlmIChlcnJvciAhPSAw
KSB7CisJCXJldHVybiAoZXJyb3IpOworCX0KKwlpZiAocmVxLT5uZXdwdHIgIT0gTlVMTCkgewor
CQltZW1jcHkoJlNDVFBfQkFTRV9TVEFUUywgJnNiX3RlbXAsIHNpemVvZihzdHJ1Y3Qgc2N0cHN0
YXQpKTsKKwl9CisjZW5kaWYKKyNlbHNlCisJZXJyb3IgPSBTWVNDVExfT1VUKHJlcSwgJlNDVFBf
QkFTRV9TVEFUUywgc2l6ZW9mKHN0cnVjdCBzY3Rwc3RhdCkpOworI2VuZGlmCisJcmV0dXJuIChl
cnJvcik7Cit9CisKKyNpZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQorI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorc3RhdGljIGludAorc2N0
cF9zeXNjdGxfaGFuZGxlX3RyYWNlX2xvZyBTWVNDVExfSEFORExFUl9BUkdTCit7CisjcHJhZ21h
IHVudXNlZChhcmcxLCBhcmcyLCBvaWRwKQorI2Vsc2UKK3N0YXRpYyBpbnQKK3NjdHBfc3lzY3Rs
X2hhbmRsZV90cmFjZV9sb2coU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sKKyNlbmRpZgorCWludCBl
cnJvcjsKKworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CWVycm9yID0gU1lTQ1RMX09VVChyZXEsIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLCBzaXpl
b2Yoc3RydWN0IHNjdHBfbG9nKSk7CisjZWxzZQorCWVycm9yID0gU1lTQ1RMX09VVChyZXEsICZT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKSwgc2l6ZW9mKHN0cnVjdCBzY3RwX2xvZykpOworI2Vu
ZGlmCisJcmV0dXJuIChlcnJvcik7Cit9CisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKK3N0YXRpYyBpbnQKK3NjdHBfc3lzY3RsX2hhbmRsZV90cmFj
ZV9sb2dfY2xlYXIgU1lTQ1RMX0hBTkRMRVJfQVJHUworeworI3ByYWdtYSB1bnVzZWQoYXJnMSwg
YXJnMiwgcmVxLCBvaWRwKQorI2Vsc2UKK3N0YXRpYyBpbnQKK3NjdHBfc3lzY3RsX2hhbmRsZV90
cmFjZV9sb2dfY2xlYXIoU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sKKyNlbmRpZgorCWludCBlcnJv
ciA9IDA7CisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJ
aW50IHZhbHVlID0gMDsKKworCWlmIChyZXEtPm5ld19kYXRhID09IE5VTEwpIHsKKwkJcmV0dXJu
IChlcnJvcik7CisJfQorCWVycm9yID0gU1lTQ1RMX0lOKHJlcSwgJnZhbHVlLCBzaXplb2YoaW50
KSk7CisJaWYgKGVycm9yID09IDAgJiYgdmFsdWUgIT0gMCAmJiBTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbG9nKSAhPSBOVUxMKSB7CisJCW1lbXNldChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKSwg
MCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2xvZykpOworCX0KKyNlbHNlCisKKwltZW1zZXQoJlNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2cpLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfbG9nKSk7CisjZW5k
aWYKKwlyZXR1cm4gKGVycm9yKTsKK30KKyNlbmRpZgorCisjaWYgKGRlZmluZWQoX19BUFBMRV9f
KSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSkgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorI2RlZmluZSBTQ1RQX1VJTlRfU1lTQ1RMKG1pYl9uYW1l
LCB2YXJfbmFtZSwgcHJlZml4KQkJCVwKKwlzdGF0aWMgaW50CQkJCQkJCVwKKwlzY3RwX3N5c2N0
bF9oYW5kbGVfIyNtaWJfbmFtZShTWVNDVExfSEFORExFUl9BUkdTKQkJXAorCXsJCQkJCQkJCVwK
KwkJaW50IGVycm9yOwkJCQkJCVwKKwkJdWludDMyX3QgbmV3OwkJCQkJCVwKKwkJCQkJCQkJCVwK
KwkJbmV3ID0gU0NUUF9CQVNFX1NZU0NUTCh2YXJfbmFtZSk7CQkJXAorCQllcnJvciA9IHN5c2N0
bF9oYW5kbGVfaW50KG9pZHAsICZuZXcsIDAsIHJlcSk7CQlcCisJCWlmICgoZXJyb3IgPT0gMCkg
JiYgKHJlcS0+bmV3cHRyICE9IE5VTEwpKSB7CQlcCisJCQlpZiAoKG5ldyA8IHByZWZpeCMjX01J
TikgfHwJCQlcCisJCQkgICAgKG5ldyA+IHByZWZpeCMjX01BWCkpIHsJCQlcCisJCQkJZXJyb3Ig
PSBFSU5WQUw7CQkJCVwKKwkJCX0gZWxzZSB7CQkJCQlcCisJCQkJU0NUUF9CQVNFX1NZU0NUTCh2
YXJfbmFtZSkgPSBuZXc7CVwKKwkJCX0JCQkJCQlcCisJCX0JCQkJCQkJXAorCQlyZXR1cm4gKGVy
cm9yKTsJCQkJCQlcCisJfQkJCQkJCQkJXAorCVNZU0NUTF9QUk9DKF9uZXRfaW5ldF9zY3RwLCBP
SURfQVVUTywgbWliX25hbWUsCQkJXAorCSAgICAgICAgICAgICAgICAgQ1RMRkxBR19WTkVUfENU
TFRZUEVfVUlOVHxDVExGTEFHX1JXLCBOVUxMLCAwLAlcCisJICAgICAgICAgICAgICAgICBzY3Rw
X3N5c2N0bF9oYW5kbGVfIyNtaWJfbmFtZSwgIlVJIiwgcHJlZml4IyNfREVTQyk7CisjZWxzZQor
I2RlZmluZSBTQ1RQX1VJTlRfU1lTQ1RMKG1pYl9uYW1lLCB2YXJfbmFtZSwgcHJlZml4KQkJCVwK
KwlzdGF0aWMgaW50CQkJCQkJCVwKKwlzY3RwX3N5c2N0bF9oYW5kbGVfIyNtaWJfbmFtZShzdHJ1
Y3Qgc3lzY3RsX29pZCAqb2lkcCwJCVwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQg
KmFyZzEgX19hdHRyaWJ1dGVfXygodW51c2VkKSksCVwKKwkgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBhcmcyIF9fYXR0cmlidXRlX18oKHVudXNlZCkpLAlcCisJICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3Qgc3lzY3RsX3JlcSAqcmVxKQkJXAorCXsJCQkJCQkJCVwKKwkJaW50
IGVycm9yOwkJCQkJCVwKKwkJdWludDMyX3QgbmV3OwkJCQkJCVwKKwkJCQkJCQkJCVwKKwkJbmV3
ID0gU0NUUF9CQVNFX1NZU0NUTCh2YXJfbmFtZSk7CQkJXAorCQllcnJvciA9IHN5c2N0bF9oYW5k
bGVfaW50KG9pZHAsICZuZXcsIDAsIHJlcSk7CQlcCisJCWlmICgoZXJyb3IgPT0gMCkgJiYgKHJl
cS0+bmV3cHRyICE9IFVTRVJfQUREUl9OVUxMKSkgewlcCisJCQlpZiAoKG5ldyA8IHByZWZpeCMj
X01JTikgfHwJCQlcCisJCQkgICAgKG5ldyA+IHByZWZpeCMjX01BWCkpIHsJCQlcCisJCQkJZXJy
b3IgPSBFSU5WQUw7CQkJCVwKKwkJCX0gZWxzZSB7CQkJCQlcCisJCQkJU0NUUF9CQVNFX1NZU0NU
TCh2YXJfbmFtZSkgPSBuZXc7CVwKKwkJCX0JCQkJCQlcCisJCX0JCQkJCQkJXAorCQlyZXR1cm4g
KGVycm9yKTsJCQkJCQlcCisJfQkJCQkJCQkJXAorCVNZU0NUTF9QUk9DKF9uZXRfaW5ldF9zY3Rw
LCBPSURfQVVUTywgbWliX25hbWUsCQkJXAorCSAgICAgICAgICAgIENUTFRZUEVfSU5UIHwgQ1RM
RkxBR19SVywgTlVMTCwgMCwJCQlcCisJICAgICAgICAgICAgc2N0cF9zeXNjdGxfaGFuZGxlXyMj
bWliX25hbWUsICJJIiwgcHJlZml4IyNfREVTQyk7CisjZGVmaW5lIENUTFRZUEVfVUlOVCBDVExU
WVBFX0lOVAorI2RlZmluZSBDVExGTEFHX1ZORVQgMAorI2VuZGlmCisKKy8qCisgKiBzeXNjdGwg
ZGVmaW5pdGlvbnMKKyAqLworCitTQ1RQX1VJTlRfU1lTQ1RMKHNlbmRzcGFjZSwgc2N0cF9zZW5k
c3BhY2UsIFNDVFBDVExfTUFYREdSQU0pCitTQ1RQX1VJTlRfU1lTQ1RMKHJlY3ZzcGFjZSwgc2N0
cF9yZWN2c3BhY2UsIFNDVFBDVExfUkVDVlNQQUNFKQorU0NUUF9VSU5UX1NZU0NUTChhdXRvX2Fz
Y29uZiwgc2N0cF9hdXRvX2FzY29uZiwgU0NUUENUTF9BVVRPQVNDT05GKQorU0NUUF9VSU5UX1NZ
U0NUTChlY25fZW5hYmxlLCBzY3RwX2Vjbl9lbmFibGUsIFNDVFBDVExfRUNOX0VOQUJMRSkKK1ND
VFBfVUlOVF9TWVNDVEwocHJfZW5hYmxlLCBzY3RwX3ByX2VuYWJsZSwgU0NUUENUTF9QUl9FTkFC
TEUpCitTWVNDVExfUFJPQyhfbmV0X2luZXRfc2N0cCwgT0lEX0FVVE8sIGF1dGhfZW5hYmxlLCBD
VExGTEFHX1ZORVR8Q1RMVFlQRV9VSU5UfENUTEZMQUdfUlcsCisgICAgICAgICAgICBOVUxMLCAw
LCBzY3RwX3N5c2N0bF9oYW5kbGVfYXV0aCwgIklVIiwgU0NUUENUTF9BVVRIX0VOQUJMRV9ERVND
KTsKK1NZU0NUTF9QUk9DKF9uZXRfaW5ldF9zY3RwLCBPSURfQVVUTywgYXNjb25mX2VuYWJsZSwg
Q1RMRkxBR19WTkVUfENUTFRZUEVfVUlOVHxDVExGTEFHX1JXLAorICAgICAgICAgICAgTlVMTCwg
MCwgc2N0cF9zeXNjdGxfaGFuZGxlX2FzY29uZiwgIklVIiwgU0NUUENUTF9BU0NPTkZfRU5BQkxF
X0RFU0MpOworU0NUUF9VSU5UX1NZU0NUTChyZWNvbmZpZ19lbmFibGUsIHNjdHBfcmVjb25maWdf
ZW5hYmxlLCBTQ1RQQ1RMX1JFQ09ORklHX0VOQUJMRSkKK1NDVFBfVUlOVF9TWVNDVEwobnJzYWNr
X2VuYWJsZSwgc2N0cF9ucnNhY2tfZW5hYmxlLCBTQ1RQQ1RMX05SU0FDS19FTkFCTEUpCitTQ1RQ
X1VJTlRfU1lTQ1RMKHBrdGRyb3BfZW5hYmxlLCBzY3RwX3BrdGRyb3BfZW5hYmxlLCBTQ1RQQ1RM
X1BLVERST1BfRU5BQkxFKQorI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorU0NUUF9VSU5UX1NZU0NUTChsb29wYmFja19ub2NzdW0sIHNjdHBfbm9fY3N1
bV9vbl9sb29wYmFjaywgU0NUUENUTF9MT09QQkFDS19OT0NTVU0pCisjZW5kaWYKK1NDVFBfVUlO
VF9TWVNDVEwocGVlcl9jaGtvaCwgc2N0cF9wZWVyX2NodW5rX29oLCBTQ1RQQ1RMX1BFRVJfQ0hL
T0gpCitTQ1RQX1VJTlRfU1lTQ1RMKG1heGJ1cnN0LCBzY3RwX21heF9idXJzdF9kZWZhdWx0LCBT
Q1RQQ1RMX01BWEJVUlNUKQorU0NUUF9VSU5UX1NZU0NUTChmcl9tYXhidXJzdCwgc2N0cF9mcl9t
YXhfYnVyc3RfZGVmYXVsdCwgU0NUUENUTF9GUk1BWEJVUlNUKQorU0NUUF9VSU5UX1NZU0NUTCht
YXhjaHVua3MsIHNjdHBfbWF4X2NodW5rc19vbl9xdWV1ZSwgU0NUUENUTF9NQVhDSFVOS1MpCitT
Q1RQX1VJTlRfU1lTQ1RMKHRjYmhhc2hzaXplLCBzY3RwX2hhc2h0YmxzaXplLCBTQ1RQQ1RMX1RD
QkhBU0hTSVpFKQorU0NUUF9VSU5UX1NZU0NUTChwY2JoYXNoc2l6ZSwgc2N0cF9wY2J0YmxzaXpl
LCBTQ1RQQ1RMX1BDQkhBU0hTSVpFKQorU0NUUF9VSU5UX1NZU0NUTChtaW5fc3BsaXRfcG9pbnQs
IHNjdHBfbWluX3NwbGl0X3BvaW50LCBTQ1RQQ1RMX01JTl9TUExJVF9QT0lOVCkKK1NDVFBfVUlO
VF9TWVNDVEwoY2h1bmtzY2FsZSwgc2N0cF9jaHVua3NjYWxlLCBTQ1RQQ1RMX0NIVU5LU0NBTEUp
CitTQ1RQX1VJTlRfU1lTQ1RMKGRlbGF5ZWRfc2Fja190aW1lLCBzY3RwX2RlbGF5ZWRfc2Fja190
aW1lX2RlZmF1bHQsIFNDVFBDVExfREVMQVlFRF9TQUNLX1RJTUUpCitTQ1RQX1VJTlRfU1lTQ1RM
KHNhY2tfZnJlcSwgc2N0cF9zYWNrX2ZyZXFfZGVmYXVsdCwgU0NUUENUTF9TQUNLX0ZSRVEpCitT
Q1RQX1VJTlRfU1lTQ1RMKHN5c19yZXNvdXJjZSwgc2N0cF9zeXN0ZW1fZnJlZV9yZXNjX2xpbWl0
LCBTQ1RQQ1RMX1NZU19SRVNPVVJDRSkKK1NDVFBfVUlOVF9TWVNDVEwoYXNvY19yZXNvdXJjZSwg
c2N0cF9hc29jX2ZyZWVfcmVzY19saW1pdCwgU0NUUENUTF9BU09DX1JFU09VUkNFKQorU0NUUF9V
SU5UX1NZU0NUTChoZWFydGJlYXRfaW50ZXJ2YWwsIHNjdHBfaGVhcnRiZWF0X2ludGVydmFsX2Rl
ZmF1bHQsIFNDVFBDVExfSEVBUlRCRUFUX0lOVEVSVkFMKQorU0NUUF9VSU5UX1NZU0NUTChwbXR1
X3JhaXNlX3RpbWUsIHNjdHBfcG10dV9yYWlzZV90aW1lX2RlZmF1bHQsIFNDVFBDVExfUE1UVV9S
QUlTRV9USU1FKQorU0NUUF9VSU5UX1NZU0NUTChzaHV0ZG93bl9ndWFyZF90aW1lLCBzY3RwX3No
dXRkb3duX2d1YXJkX3RpbWVfZGVmYXVsdCwgU0NUUENUTF9TSFVURE9XTl9HVUFSRF9USU1FKQor
U0NUUF9VSU5UX1NZU0NUTChzZWNyZXRfbGlmZXRpbWUsIHNjdHBfc2VjcmV0X2xpZmV0aW1lX2Rl
ZmF1bHQsIFNDVFBDVExfU0VDUkVUX0xJRkVUSU1FKQorU0NUUF9VSU5UX1NZU0NUTChydG9fbWF4
LCBzY3RwX3J0b19tYXhfZGVmYXVsdCwgU0NUUENUTF9SVE9fTUFYKQorU0NUUF9VSU5UX1NZU0NU
TChydG9fbWluLCBzY3RwX3J0b19taW5fZGVmYXVsdCwgU0NUUENUTF9SVE9fTUlOKQorU0NUUF9V
SU5UX1NZU0NUTChydG9faW5pdGlhbCwgc2N0cF9ydG9faW5pdGlhbF9kZWZhdWx0LCBTQ1RQQ1RM
X1JUT19JTklUSUFMKQorU0NUUF9VSU5UX1NZU0NUTChpbml0X3J0b19tYXgsIHNjdHBfaW5pdF9y
dG9fbWF4X2RlZmF1bHQsIFNDVFBDVExfSU5JVF9SVE9fTUFYKQorU0NUUF9VSU5UX1NZU0NUTCh2
YWxpZF9jb29raWVfbGlmZSwgc2N0cF92YWxpZF9jb29raWVfbGlmZV9kZWZhdWx0LCBTQ1RQQ1RM
X1ZBTElEX0NPT0tJRV9MSUZFKQorU0NUUF9VSU5UX1NZU0NUTChpbml0X3J0eF9tYXgsIHNjdHBf
aW5pdF9ydHhfbWF4X2RlZmF1bHQsIFNDVFBDVExfSU5JVF9SVFhfTUFYKQorU0NUUF9VSU5UX1NZ
U0NUTChhc3NvY19ydHhfbWF4LCBzY3RwX2Fzc29jX3J0eF9tYXhfZGVmYXVsdCwgU0NUUENUTF9B
U1NPQ19SVFhfTUFYKQorU0NUUF9VSU5UX1NZU0NUTChwYXRoX3J0eF9tYXgsIHNjdHBfcGF0aF9y
dHhfbWF4X2RlZmF1bHQsIFNDVFBDVExfUEFUSF9SVFhfTUFYKQorU0NUUF9VSU5UX1NZU0NUTChw
YXRoX3BmX3RocmVzaG9sZCwgc2N0cF9wYXRoX3BmX3RocmVzaG9sZCwgU0NUUENUTF9QQVRIX1BG
X1RIUkVTSE9MRCkKK1NDVFBfVUlOVF9TWVNDVEwoYWRkX21vcmVfb25fb3V0cHV0LCBzY3RwX2Fk
ZF9tb3JlX3RocmVzaG9sZCwgU0NUUENUTF9BRERfTU9SRV9PTl9PVVRQVVQpCitTQ1RQX1VJTlRf
U1lTQ1RMKGluY29taW5nX3N0cmVhbXMsIHNjdHBfbnJfaW5jb21pbmdfc3RyZWFtc19kZWZhdWx0
LCBTQ1RQQ1RMX0lOQ09NSU5HX1NUUkVBTVMpCitTQ1RQX1VJTlRfU1lTQ1RMKG91dGdvaW5nX3N0
cmVhbXMsIHNjdHBfbnJfb3V0Z29pbmdfc3RyZWFtc19kZWZhdWx0LCBTQ1RQQ1RMX09VVEdPSU5H
X1NUUkVBTVMpCitTQ1RQX1VJTlRfU1lTQ1RMKGNtdF9vbl9vZmYsIHNjdHBfY210X29uX29mZiwg
U0NUUENUTF9DTVRfT05fT0ZGKQorU0NUUF9VSU5UX1NZU0NUTChjbXRfdXNlX2RhYywgc2N0cF9j
bXRfdXNlX2RhYywgU0NUUENUTF9DTVRfVVNFX0RBQykKK1NDVFBfVUlOVF9TWVNDVEwoY3duZF9t
YXhidXJzdCwgc2N0cF91c2VfY3duZF9iYXNlZF9tYXhidXJzdCwgU0NUUENUTF9DV05EX01BWEJV
UlNUKQorU0NUUF9VSU5UX1NZU0NUTChuYXRfZnJpZW5kbHksIHNjdHBfbmF0X2ZyaWVuZGx5LCBT
Q1RQQ1RMX05BVF9GUklFTkRMWSkKK1NDVFBfVUlOVF9TWVNDVEwoYWJjX2xfdmFyLCBzY3RwX0wy
X2FiY192YXJpYWJsZSwgU0NUUENUTF9BQkNfTF9WQVIpCitTQ1RQX1VJTlRfU1lTQ1RMKG1heF9j
aGFpbmVkX21idWZzLCBzY3RwX21idWZfdGhyZXNob2xkX2NvdW50LCBTQ1RQQ1RMX01BWF9DSEFJ
TkVEX01CVUZTKQorU0NUUF9VSU5UX1NZU0NUTChkb19zY3RwX2RyYWluLCBzY3RwX2RvX2RyYWlu
LCBTQ1RQQ1RMX0RPX1NDVFBfRFJBSU4pCitTQ1RQX1VJTlRfU1lTQ1RMKGhiX21heF9idXJzdCwg
c2N0cF9oYl9tYXhidXJzdCwgU0NUUENUTF9IQl9NQVhfQlVSU1QpCitTQ1RQX1VJTlRfU1lTQ1RM
KGFib3J0X2F0X2xpbWl0LCBzY3RwX2Fib3J0X2lmX29uZV8yX29uZV9oaXRzX2xpbWl0LCBTQ1RQ
Q1RMX0FCT1JUX0FUX0xJTUlUKQorU0NUUF9VSU5UX1NZU0NUTChtaW5fcmVzaWR1YWwsIHNjdHBf
bWluX3Jlc2lkdWFsLCBTQ1RQQ1RMX01JTl9SRVNJRFVBTCkKK1NDVFBfVUlOVF9TWVNDVEwobWF4
X3JldHJhbl9jaHVuaywgc2N0cF9tYXhfcmV0cmFuX2NodW5rLCBTQ1RQQ1RMX01BWF9SRVRSQU5f
Q0hVTkspCitTQ1RQX1VJTlRfU1lTQ1RMKGxvZ19sZXZlbCwgc2N0cF9sb2dnaW5nX2xldmVsLCBT
Q1RQQ1RMX0xPR0dJTkdfTEVWRUwpCitTQ1RQX1VJTlRfU1lTQ1RMKGRlZmF1bHRfY2NfbW9kdWxl
LCBzY3RwX2RlZmF1bHRfY2NfbW9kdWxlLCBTQ1RQQ1RMX0RFRkFVTFRfQ0NfTU9EVUxFKQorU0NU
UF9VSU5UX1NZU0NUTChkZWZhdWx0X3NzX21vZHVsZSwgc2N0cF9kZWZhdWx0X3NzX21vZHVsZSwg
U0NUUENUTF9ERUZBVUxUX1NTX01PRFVMRSkKK1NDVFBfVUlOVF9TWVNDVEwoZGVmYXVsdF9mcmFn
X2ludGVybGVhdmUsIHNjdHBfZGVmYXVsdF9mcmFnX2ludGVybGVhdmUsIFNDVFBDVExfREVGQVVM
VF9GUkFHX0lOVEVSTEVBVkUpCitTQ1RQX1VJTlRfU1lTQ1RMKG1vYmlsaXR5X2Jhc2UsIHNjdHBf
bW9iaWxpdHlfYmFzZSwgU0NUUENUTF9NT0JJTElUWV9CQVNFKQorU0NUUF9VSU5UX1NZU0NUTCht
b2JpbGl0eV9mYXN0aGFuZG9mZiwgc2N0cF9tb2JpbGl0eV9mYXN0aGFuZG9mZiwgU0NUUENUTF9N
T0JJTElUWV9GQVNUSEFORE9GRikKKyNpZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQor
U1lTQ1RMX1BST0MoX25ldF9pbmV0X3NjdHAsIE9JRF9BVVRPLCBsb2csIENUTEZMQUdfVk5FVHxD
VExUWVBFX1NUUlVDVHxDVExGTEFHX1JELAorICAgICAgICAgICAgTlVMTCwgMCwgc2N0cF9zeXNj
dGxfaGFuZGxlX3RyYWNlX2xvZywgIlMsc2N0cGxvZyIsICJTQ1RQIGxvZ2dpbmcgKHN0cnVjdCBz
Y3RwX2xvZykiKTsKK1NZU0NUTF9QUk9DKF9uZXRfaW5ldF9zY3RwLCBPSURfQVVUTywgY2xlYXJf
dHJhY2UsIENUTEZMQUdfVk5FVHxDVExUWVBFX1VJTlQgfCBDVExGTEFHX1JXLAorICAgICAgICAg
ICAgTlVMTCwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX3RyYWNlX2xvZ19jbGVhciwgIklVIiwgIkNs
ZWFyIFNDVFAgTG9nZ2luZyBidWZmZXIiKTsKKyNlbmRpZgorU1lTQ1RMX1BST0MoX25ldF9pbmV0
X3NjdHAsIE9JRF9BVVRPLCB1ZHBfdHVubmVsaW5nX3BvcnQsIENUTEZMQUdfVk5FVHxDVExUWVBF
X1VJTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgIE5VTEwsIDAsIHNjdHBfc3lzY3RsX2hhbmRs
ZV91ZHBfdHVubmVsaW5nLCAiSVUiLCBTQ1RQQ1RMX1VEUF9UVU5ORUxJTkdfUE9SVF9ERVNDKTsK
K1NDVFBfVUlOVF9TWVNDVEwoZW5hYmxlX3NhY2tfaW1tZWRpYXRlbHksIHNjdHBfZW5hYmxlX3Nh
Y2tfaW1tZWRpYXRlbHksIFNDVFBDVExfU0FDS19JTU1FRElBVEVMWV9FTkFCTEUpCitTQ1RQX1VJ
TlRfU1lTQ1RMKG5hdF9mcmllbmRseV9pbml0LCBzY3RwX2luaXRzX2luY2x1ZGVfbmF0X2ZyaWVu
ZGx5LCBTQ1RQQ1RMX05BVF9GUklFTkRMWV9JTklUUykKK1NDVFBfVUlOVF9TWVNDVEwodnRhZ190
aW1lX3dhaXQsIHNjdHBfdnRhZ190aW1lX3dhaXQsIFNDVFBDVExfVElNRV9XQUlUKQorU0NUUF9V
SU5UX1NZU0NUTChidWZmZXJfc3BsaXR0aW5nLCBzY3RwX2J1ZmZlcl9zcGxpdHRpbmcsIFNDVFBD
VExfQlVGRkVSX1NQTElUVElORykKK1NDVFBfVUlOVF9TWVNDVEwoaW5pdGlhbF9jd25kLCBzY3Rw
X2luaXRpYWxfY3duZCwgU0NUUENUTF9JTklUSUFMX0NXTkQpCitTQ1RQX1VJTlRfU1lTQ1RMKHJ0
dHZhcl9idywgc2N0cF9ydHR2YXJfYncsIFNDVFBDVExfUlRUVkFSX0JXKQorU0NUUF9VSU5UX1NZ
U0NUTChydHR2YXJfcnR0LCBzY3RwX3J0dHZhcl9ydHQsIFNDVFBDVExfUlRUVkFSX1JUVCkKK1ND
VFBfVUlOVF9TWVNDVEwocnR0dmFyX2VxcmV0LCBzY3RwX3J0dHZhcl9lcXJldCwgU0NUUENUTF9S
VFRWQVJfRVFSRVQpCitTQ1RQX1VJTlRfU1lTQ1RMKHJ0dHZhcl9zdGVhZHlfc3RlcCwgc2N0cF9z
dGVhZHlfc3RlcCwgU0NUUENUTF9SVFRWQVJfU1RFQURZUykKK1NDVFBfVUlOVF9TWVNDVEwodXNl
X2RjY2NlY24sIHNjdHBfdXNlX2RjY2NfZWNuLCBTQ1RQQ1RMX1JUVFZBUl9EQ0NDRUNOKQorU0NU
UF9VSU5UX1NZU0NUTChibGFja2hvbGUsIHNjdHBfYmxhY2tob2xlLCBTQ1RQQ1RMX0JMQUNLSE9M
RSkKK1NDVFBfVUlOVF9TWVNDVEwoc2VuZGFsbF9saW1pdCwgc2N0cF9zZW5kYWxsX2xpbWl0LCBT
Q1RQQ1RMX1NFTkRBTExfTElNSVQpCitTQ1RQX1VJTlRfU1lTQ1RMKGRpYWdfaW5mb19jb2RlLCBz
Y3RwX2RpYWdfaW5mb19jb2RlLCBTQ1RQQ1RMX0RJQUdfSU5GT19DT0RFKQorI2lmZGVmIFNDVFBf
REVCVUcKK1NDVFBfVUlOVF9TWVNDVEwoZGVidWcsIHNjdHBfZGVidWdfb24sIFNDVFBDVExfREVC
VUcpCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKK1NDVFBfVUlOVF9TWVNDVEwobWFpbl90aW1lciwgc2N0cF9tYWluX3RpbWVyLCBTQ1RQ
Q1RMX01BSU5fVElNRVIpCitTWVNDVExfUFJPQyhfbmV0X2luZXRfc2N0cCwgT0lEX0FVVE8sIGln
bm9yZV92bXdhcmVfaW50ZXJmYWNlcywgQ1RMVFlQRV9VSU5UfENUTEZMQUdfUlcsCisgICAgICAg
ICAgICBOVUxMLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfdm13YXJlX2ludGVyZmFjZXMsICJJVSIs
IFNDVFBDVExfSUdOT1JFX1ZNV0FSRV9JTlRFUkZBQ0VTX0RFU0MpOworU0NUUF9VSU5UX1NZU0NU
TChhZGRyX3dhdGNoZG9nX2xpbWl0LCBzY3RwX2FkZHJfd2F0Y2hkb2dfbGltaXQsIFNDVFBDVExf
QUREUl9XQVRDSERPR19MSU1JVCkKK1NDVFBfVUlOVF9TWVNDVEwodnRhZ193YXRjaGRvZ19saW1p
dCwgc2N0cF92dGFnX3dhdGNoZG9nX2xpbWl0LCBTQ1RQQ1RMX1ZUQUdfV0FUQ0hET0dfTElNSVQp
CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKK1NDVFBfVUlOVF9TWVNDVEwob3V0cHV0X3VubG9ja2VkLCBzY3RwX291dHB1dF91bmxvY2tl
ZCwgU0NUUENUTF9PVVRQVVRfVU5MT0NLRUQpCisjZW5kaWYKK1NZU0NUTF9QUk9DKF9uZXRfaW5l
dF9zY3RwLCBPSURfQVVUTywgc3RhdHMsIENUTEZMQUdfVk5FVHxDVExUWVBFX1NUUlVDVHxDVExG
TEFHX1JXLAorICAgICAgICAgICAgTlVMTCwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX3N0YXRzLCAi
UyxzY3Rwc3RhdCIsICJTQ1RQIHN0YXRpc3RpY3MgKHN0cnVjdCBzY3RwX3N0YXQpIik7CitTWVND
VExfUFJPQyhfbmV0X2luZXRfc2N0cCwgT0lEX0FVVE8sIGFzc29jbGlzdCwgQ1RMRkxBR19WTkVU
fENUTFRZUEVfT1BBUVVFfENUTEZMQUdfUkQsCisgICAgICAgICAgICBOVUxMLCAwLCBzY3RwX3N5
c2N0bF9oYW5kbGVfYXNzb2NsaXN0LCAiUyx4YXNzb2MiLCAiTGlzdCBvZiBhY3RpdmUgU0NUUCBh
c3NvY2lhdGlvbnMiKTsKKworI2VsaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisKKyNkZWZpbmUgUkFOR0VDSEsodmFyLCBtaW4sIG1heCkgXAorCWlmICgodmFy
KSA8IChtaW4pKSB7ICh2YXIpID0gKG1pbik7IH0gXAorCWVsc2UgaWYgKCh2YXIpID4gKG1heCkp
IHsgKHZhcikgPSAobWF4KTsgfQorCitzdGF0aWMgaW50CitzY3RwX3N5c2N0bF9oYW5kbGVfaW50
KFNZU0NUTF9IQU5ETEVSX0FSR1MpCit7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBzeXNjdGxf
aGFuZGxlX2ludChvaWRwLCBvaWRwLT5vaWRfYXJnMSwgb2lkcC0+b2lkX2FyZzIsIHJlcSk7CisJ
aWYgKGVycm9yID09IDApIHsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3NlbmRz
cGFjZSksIFNDVFBDVExfTUFYREdSQU1fTUlOLCBTQ1RQQ1RMX01BWERHUkFNX01BWCk7CisJCVJB
TkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9yZWN2c3BhY2UpLCBTQ1RQQ1RMX1JFQ1ZTUEFD
RV9NSU4sIFNDVFBDVExfUkVDVlNQQUNFX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9hdXRvX2FzY29uZiksIFNDVFBDVExfQVVUT0FTQ09ORl9NSU4sIFNDVFBDVExfQVVU
T0FTQ09ORl9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXV0b19hc2Nv
bmYpLCBTQ1RQQ1RMX0FVVE9BU0NPTkZfTUlOLCBTQ1RQQ1RMX0FVVE9BU0NPTkZfTUFYKTsKKwkJ
UkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2Vjbl9lbmFibGUpLCBTQ1RQQ1RMX0VDTl9F
TkFCTEVfTUlOLCBTQ1RQQ1RMX0VDTl9FTkFCTEVfTUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX3ByX2VuYWJsZSksIFNDVFBDVExfUFJfRU5BQkxFX01JTiwgU0NUUENUTF9Q
Ul9FTkFCTEVfTUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3JlY29uZmln
X2VuYWJsZSksIFNDVFBDVExfUkVDT05GSUdfRU5BQkxFX01JTiwgU0NUUENUTF9SRUNPTkZJR19F
TkFCTEVfTUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX25yc2Fja19lbmFi
bGUpLCBTQ1RQQ1RMX05SU0FDS19FTkFCTEVfTUlOLCBTQ1RQQ1RMX05SU0FDS19FTkFCTEVfTUFY
KTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BrdGRyb3BfZW5hYmxlKSwgU0NU
UENUTF9QS1REUk9QX0VOQUJMRV9NSU4sIFNDVFBDVExfUEtURFJPUF9FTkFCTEVfTUFYKTsKKwkJ
UkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX25vX2NzdW1fb25fbG9vcGJhY2spLCBTQ1RQ
Q1RMX0xPT1BCQUNLX05PQ1NVTV9NSU4sIFNDVFBDVExfTE9PUEJBQ0tfTk9DU1VNX01BWCk7CisJ
CVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wZWVyX2NodW5rX29oKSwgU0NUUENUTF9Q
RUVSX0NIS09IX01JTiwgU0NUUENUTF9QRUVSX0NIS09IX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9tYXhfYnVyc3RfZGVmYXVsdCksIFNDVFBDVExfTUFYQlVSU1RfTUlO
LCBTQ1RQQ1RMX01BWEJVUlNUX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9mcl9tYXhfYnVyc3RfZGVmYXVsdCksIFNDVFBDVExfRlJNQVhCVVJTVF9NSU4sIFNDVFBDVExf
RlJNQVhCVVJTVF9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWF4X2No
dW5rc19vbl9xdWV1ZSksIFNDVFBDVExfTUFYQ0hVTktTX01JTiwgU0NUUENUTF9NQVhDSFVOS1Nf
TUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2hhc2h0YmxzaXplKSwgU0NU
UENUTF9UQ0JIQVNIU0laRV9NSU4sIFNDVFBDVExfVENCSEFTSFNJWkVfTUFYKTsKKwkJUkFOR0VD
SEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BjYnRibHNpemUpLCBTQ1RQQ1RMX1BDQkhBU0hTSVpF
X01JTiwgU0NUUENUTF9QQ0JIQVNIU0laRV9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbWluX3NwbGl0X3BvaW50KSwgU0NUUENUTF9NSU5fU1BMSVRfUE9JTlRfTUlOLCBT
Q1RQQ1RMX01JTl9TUExJVF9QT0lOVF9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfY2h1bmtzY2FsZSksIFNDVFBDVExfQ0hVTktTQ0FMRV9NSU4sIFNDVFBDVExfQ0hVTktT
Q0FMRV9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVsYXllZF9zYWNr
X3RpbWVfZGVmYXVsdCksIFNDVFBDVExfREVMQVlFRF9TQUNLX1RJTUVfTUlOLCBTQ1RQQ1RMX0RF
TEFZRURfU0FDS19USU1FX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9z
YWNrX2ZyZXFfZGVmYXVsdCksIFNDVFBDVExfU0FDS19GUkVRX01JTiwgU0NUUENUTF9TQUNLX0ZS
RVFfTUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3N5c3RlbV9mcmVlX3Jl
c2NfbGltaXQpLCBTQ1RQQ1RMX1NZU19SRVNPVVJDRV9NSU4sIFNDVFBDVExfU1lTX1JFU09VUkNF
X01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hc29jX2ZyZWVfcmVzY19s
aW1pdCksIFNDVFBDVExfQVNPQ19SRVNPVVJDRV9NSU4sIFNDVFBDVExfQVNPQ19SRVNPVVJDRV9N
QVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaGVhcnRiZWF0X2ludGVydmFs
X2RlZmF1bHQpLCBTQ1RQQ1RMX0hFQVJUQkVBVF9JTlRFUlZBTF9NSU4sIFNDVFBDVExfSEVBUlRC
RUFUX0lOVEVSVkFMX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wbXR1
X3JhaXNlX3RpbWVfZGVmYXVsdCksIFNDVFBDVExfUE1UVV9SQUlTRV9USU1FX01JTiwgU0NUUENU
TF9QTVRVX1JBSVNFX1RJTUVfTUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X3NodXRkb3duX2d1YXJkX3RpbWVfZGVmYXVsdCksIFNDVFBDVExfU0hVVERPV05fR1VBUkRfVElN
RV9NSU4sIFNDVFBDVExfU0hVVERPV05fR1VBUkRfVElNRV9NQVgpOworCQlSQU5HRUNISyhTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfc2VjcmV0X2xpZmV0aW1lX2RlZmF1bHQpLCBTQ1RQQ1RMX1NFQ1JF
VF9MSUZFVElNRV9NSU4sIFNDVFBDVExfU0VDUkVUX0xJRkVUSU1FX01BWCk7CisJCVJBTkdFQ0hL
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydG9fbWF4X2RlZmF1bHQpLCBTQ1RQQ1RMX1JUT19NQVhf
TUlOLCBTQ1RQQ1RMX1JUT19NQVhfTUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX3J0b19taW5fZGVmYXVsdCksIFNDVFBDVExfUlRPX01JTl9NSU4sIFNDVFBDVExfUlRPX01J
Tl9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcnRvX2luaXRpYWxfZGVm
YXVsdCksIFNDVFBDVExfUlRPX0lOSVRJQUxfTUlOLCBTQ1RQQ1RMX1JUT19JTklUSUFMX01BWCk7
CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pbml0X3J0b19tYXhfZGVmYXVsdCks
IFNDVFBDVExfSU5JVF9SVE9fTUFYX01JTiwgU0NUUENUTF9JTklUX1JUT19NQVhfTUFYKTsKKwkJ
UkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3ZhbGlkX2Nvb2tpZV9saWZlX2RlZmF1bHQp
LCBTQ1RQQ1RMX1ZBTElEX0NPT0tJRV9MSUZFX01JTiwgU0NUUENUTF9WQUxJRF9DT09LSUVfTElG
RV9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaW5pdF9ydHhfbWF4X2Rl
ZmF1bHQpLCBTQ1RQQ1RMX0lOSVRfUlRYX01BWF9NSU4sIFNDVFBDVExfSU5JVF9SVFhfTUFYX01B
WCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hc3NvY19ydHhfbWF4X2RlZmF1
bHQpLCBTQ1RQQ1RMX0FTU09DX1JUWF9NQVhfTUlOLCBTQ1RQQ1RMX0FTU09DX1JUWF9NQVhfTUFY
KTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BhdGhfcnR4X21heF9kZWZhdWx0
KSwgU0NUUENUTF9QQVRIX1JUWF9NQVhfTUlOLCBTQ1RQQ1RMX1BBVEhfUlRYX01BWF9NQVgpOwor
CQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcGF0aF9wZl90aHJlc2hvbGQpLCBTQ1RQ
Q1RMX1BBVEhfUEZfVEhSRVNIT0xEX01JTiwgU0NUUENUTF9QQVRIX1BGX1RIUkVTSE9MRF9NQVgp
OworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYWRkX21vcmVfdGhyZXNob2xkKSwg
U0NUUENUTF9BRERfTU9SRV9PTl9PVVRQVVRfTUlOLCBTQ1RQQ1RMX0FERF9NT1JFX09OX09VVFBV
VF9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbnJfaW5jb21pbmdfc3Ry
ZWFtc19kZWZhdWx0KSwgU0NUUENUTF9JTkNPTUlOR19TVFJFQU1TX01JTiwgU0NUUENUTF9JTkNP
TUlOR19TVFJFQU1TX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ucl9v
dXRnb2luZ19zdHJlYW1zX2RlZmF1bHQpLCBTQ1RQQ1RMX09VVEdPSU5HX1NUUkVBTVNfTUlOLCBT
Q1RQQ1RMX09VVEdPSU5HX1NUUkVBTVNfTUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2NtdF9vbl9vZmYpLCBTQ1RQQ1RMX0NNVF9PTl9PRkZfTUlOLCBTQ1RQQ1RMX0NNVF9P
Tl9PRkZfTUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2NtdF91c2VfZGFj
KSwgU0NUUENUTF9DTVRfVVNFX0RBQ19NSU4sIFNDVFBDVExfQ01UX1VTRV9EQUNfTUFYKTsKKwkJ
UkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3VzZV9jd25kX2Jhc2VkX21heGJ1cnN0KSwg
U0NUUENUTF9DV05EX01BWEJVUlNUX01JTiwgU0NUUENUTF9DV05EX01BWEJVUlNUX01BWCk7CisJ
CVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9uYXRfZnJpZW5kbHkpLCBTQ1RQQ1RMX05B
VF9GUklFTkRMWV9NSU4sIFNDVFBDVExfTkFUX0ZSSUVORExZX01BWCk7CisJCVJBTkdFQ0hLKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9MMl9hYmNfdmFyaWFibGUpLCBTQ1RQQ1RMX0FCQ19MX1ZBUl9N
SU4sIFNDVFBDVExfQUJDX0xfVkFSX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9tYnVmX3RocmVzaG9sZF9jb3VudCksIFNDVFBDVExfTUFYX0NIQUlORURfTUJVRlNfTUlO
LCBTQ1RQQ1RMX01BWF9DSEFJTkVEX01CVUZTX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9kb19kcmFpbiksIFNDVFBDVExfRE9fU0NUUF9EUkFJTl9NSU4sIFNDVFBDVExf
RE9fU0NUUF9EUkFJTl9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaGJf
bWF4YnVyc3QpLCBTQ1RQQ1RMX0hCX01BWF9CVVJTVF9NSU4sIFNDVFBDVExfSEJfTUFYX0JVUlNU
X01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hYm9ydF9pZl9vbmVfMl9v
bmVfaGl0c19saW1pdCksIFNDVFBDVExfQUJPUlRfQVRfTElNSVRfTUlOLCBTQ1RQQ1RMX0FCT1JU
X0FUX0xJTUlUX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9taW5fcmVz
aWR1YWwpLCBTQ1RQQ1RMX01JTl9SRVNJRFVBTF9NSU4sIFNDVFBDVExfTUlOX1JFU0lEVUFMX01B
WCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYXhfcmV0cmFuX2NodW5rKSwg
U0NUUENUTF9NQVhfUkVUUkFOX0NIVU5LX01JTiwgU0NUUENUTF9NQVhfUkVUUkFOX0NIVU5LX01B
WCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSwgU0NU
UENUTF9MT0dHSU5HX0xFVkVMX01JTiwgU0NUUENUTF9MT0dHSU5HX0xFVkVMX01BWCk7CisJCVJB
TkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kZWZhdWx0X2NjX21vZHVsZSksIFNDVFBDVExf
REVGQVVMVF9DQ19NT0RVTEVfTUlOLCBTQ1RQQ1RMX0RFRkFVTFRfQ0NfTU9EVUxFX01BWCk7CisJ
CVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kZWZhdWx0X3NzX21vZHVsZSksIFNDVFBD
VExfREVGQVVMVF9TU19NT0RVTEVfTUlOLCBTQ1RQQ1RMX0RFRkFVTFRfU1NfTU9EVUxFX01BWCk7
CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kZWZhdWx0X2ZyYWdfaW50ZXJsZWF2
ZSksIFNDVFBDVExfREVGQVVMVF9GUkFHX0lOVEVSTEVBVkVfTUlOLCBTQ1RQQ1RMX0RFRkFVTFRf
RlJBR19JTlRFUkxFQVZFX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF92
dGFnX3RpbWVfd2FpdCksIFNDVFBDVExfVElNRV9XQUlUX01JTiwgU0NUUENUTF9USU1FX1dBSVRf
TUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2J1ZmZlcl9zcGxpdHRpbmcp
LCBTQ1RQQ1RMX0JVRkZFUl9TUExJVFRJTkdfTUlOLCBTQ1RQQ1RMX0JVRkZFUl9TUExJVFRJTkdf
TUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2luaXRpYWxfY3duZCksIFND
VFBDVExfSU5JVElBTF9DV05EX01JTiwgU0NUUENUTF9JTklUSUFMX0NXTkRfTUFYKTsKKwkJUkFO
R0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3J0dHZhcl9idyksIFNDVFBDVExfUlRUVkFSX0JX
X01JTiwgU0NUUENUTF9SVFRWQVJfQldfTUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX3J0dHZhcl9ydHQpLCBTQ1RQQ1RMX1JUVFZBUl9SVFRfTUlOLCBTQ1RQQ1RMX1JUVFZB
Ul9SVFRfTUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3J0dHZhcl9lcXJl
dCksIFNDVFBDVExfUlRUVkFSX0VRUkVUX01JTiwgU0NUUENUTF9SVFRWQVJfRVFSRVRfTUFYKTsK
KwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3N0ZWFkeV9zdGVwKSwgU0NUUENUTF9S
VFRWQVJfU1RFQURZU19NSU4sIFNDVFBDVExfUlRUVkFSX1NURUFEWVNfTUFYKTsKKwkJUkFOR0VD
SEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3VzZV9kY2NjX2VjbiksIFNDVFBDVExfUlRUVkFSX0RD
Q0NFQ05fTUlOLCBTQ1RQQ1RMX1JUVFZBUl9EQ0NDRUNOX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9tb2JpbGl0eV9iYXNlKSwgU0NUUENUTF9NT0JJTElUWV9CQVNFX01J
TiwgU0NUUENUTF9NT0JJTElUWV9CQVNFX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9tb2JpbGl0eV9mYXN0aGFuZG9mZiksIFNDVFBDVExfTU9CSUxJVFlfRkFTVEhBTkRP
RkZfTUlOLCBTQ1RQQ1RMX01PQklMSVRZX0ZBU1RIQU5ET0ZGX01BWCk7CisJCVJBTkdFQ0hLKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9lbmFibGVfc2Fja19pbW1lZGlhdGVseSksIFNDVFBDVExfU0FD
S19JTU1FRElBVEVMWV9FTkFCTEVfTUlOLCBTQ1RQQ1RMX1NBQ0tfSU1NRURJQVRFTFlfRU5BQkxF
X01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pbml0c19pbmNsdWRlX25h
dF9mcmllbmRseSksIFNDVFBDVExfTkFUX0ZSSUVORExZX0lOSVRTX01JTiwgU0NUUENUTF9OQVRf
RlJJRU5ETFlfSU5JVFNfTUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2Js
YWNraG9sZSksIFNDVFBDVExfQkxBQ0tIT0xFX01JTiwgU0NUUENUTF9CTEFDS0hPTEVfTUFYKTsK
KwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3NlbmRhbGxfbGltaXQpLCBTQ1RQQ1RM
X1NFTkRBTExfTElNSVRfTUlOLCBTQ1RQQ1RMX1NFTkRBTExfTElNSVRfTUFYKTsKKwkJUkFOR0VD
SEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwgU0NUUENUTF9ESUFHX0lO
Rk9fQ09ERV9NSU4sIFNDVFBDVExfRElBR19JTkZPX0NPREVfTUFYKTsKKyNpZmRlZiBTQ1RQX0RF
QlVHCisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kZWJ1Z19vbiksIFNDVFBDVExf
REVCVUdfTUlOLCBTQ1RQQ1RMX0RFQlVHX01BWCk7CisjZW5kaWYKKwl9CisJcmV0dXJuIChlcnJv
cik7Cit9CisKK3ZvaWQKK3N5c2N0bF9zZXR1cF9zY3RwKHZvaWQpCit7CisJc3lzY3RsX2FkZF9v
aWQoJnN5c2N0bF9vaWRfdG9wLCAic2VuZHNwYWNlIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywK
KwkgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zZW5kc3BhY2UpLCAwLCBzY3RwX3N5c2N0bF9o
YW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX01BWERHUkFNX0RFU0MpOworCisJc3lzY3RsX2FkZF9v
aWQoJnN5c2N0bF9vaWRfdG9wLCAicmVjdnNwYWNlIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywK
KwkgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9yZWN2c3BhY2UpLCAwLCBzY3RwX3N5c2N0bF9o
YW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX1JFQ1ZTUEFDRV9ERVNDKTsKKworCXN5c2N0bF9hZGRf
b2lkKCZzeXNjdGxfb2lkX3RvcCwgImF1dG9fYXNjb25mIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19S
VywKKwkgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hdXRvX2FzY29uZiksIDAsIHNjdHBfc3lz
Y3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfQVVUT0FTQ09ORl9ERVNDKTsKKworCXN5c2N0
bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImVjbl9lbmFibGUiLCBDVExUWVBFX0lOVHxDVExG
TEFHX1JXLAorCSAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2Vjbl9lbmFibGUpLCAwLCBzY3Rw
X3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX0VDTl9FTkFCTEVfREVTQyk7CisKKwlz
eXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJwcl9lbmFibGUiLCBDVExUWVBFX0lOVHxD
VExGTEFHX1JXLAorCSAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3ByX2VuYWJsZSksIDAsIHNj
dHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfUFJfRU5BQkxFX0RFU0MpOworCisJ
c3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiYXV0aF9lbmFibGUiLCBDVExUWVBFX0lO
VHxDVExGTEFHX1JXLAorCSAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2F1dGhfZW5hYmxlKSwg
MCwgc2N0cF9zeXNjdGxfaGFuZGxlX2F1dGgsCisJICAgIFNDVFBDVExfQVVUSF9FTkFCTEVfREVT
Qyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJhc2NvbmZfZW5hYmxlIiwg
Q1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKwkgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hc2Nv
bmZfZW5hYmxlKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2FzY29uZiwKKwkgICAgU0NUUENUTF9B
U0NPTkZfRU5BQkxFX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAi
cmVjb25maWdfZW5hYmxlIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKwkgICAgJlNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9yZWNvbmZpZ19lbmFibGUpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50
LAorCSAgICBTQ1RQQ1RMX1JFQ09ORklHX0VOQUJMRV9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lk
KCZzeXNjdGxfb2lkX3RvcCwgIm5yc2Fja19lbmFibGUiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JX
LAorCSAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX25yc2Fja19lbmFibGUpLCAwLCBzY3RwX3N5
c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX05SU0FDS19FTkFCTEVfREVTQyk7CisKKwlz
eXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJwa3Rkcm9wX2VuYWJsZSIsIENUTFRZUEVf
SU5UfENUTEZMQUdfUlcsCisJICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcGt0ZHJvcF9lbmFi
bGUpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX1BLVERST1BfRU5B
QkxFX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAibG9vcGJhY2tf
bm9jc3VtIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKwkgICAgJlNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9ub19jc3VtX29uX2xvb3BiYWNrKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkg
ICAgU0NUUENUTF9MT09QQkFDS19OT0NTVU1fREVTQyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lz
Y3RsX29pZF90b3AsICJwZWVyX2Noa29oIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKwkgICAg
JlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wZWVyX2NodW5rX29oKSwgMCwgc2N0cF9zeXNjdGxfaGFu
ZGxlX2ludCwKKwkgICAgU0NUUENUTF9QRUVSX0NIS09IX0RFU0MpOworCisJc3lzY3RsX2FkZF9v
aWQoJnN5c2N0bF9vaWRfdG9wLCAibWF4YnVyc3QiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAor
CSAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX21heF9idXJzdF9kZWZhdWx0KSwgMCwgc2N0cF9z
eXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9NQVhCVVJTVF9ERVNDKTsKKworCXN5c2N0
bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImZyX21heGJ1cnN0IiwgQ1RMVFlQRV9JTlR8Q1RM
RkxBR19SVywKKwkgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9mcl9tYXhfYnVyc3RfZGVmYXVs
dCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfRlJNQVhCVVJTVF9E
RVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgIm1heGNodW5rcyIsIENU
TFRZUEVfSU5UfENUTEZMQUdfUlcsCisJICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWF4X2No
dW5rc19vbl9xdWV1ZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExf
TUFYQ0hVTktTX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAidGNi
aGFzaHNpemUiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorCSAgICAmU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2hhc2h0YmxzaXplKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NU
UENUTF9UQ0JIQVNIU0laRV9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3Rv
cCwgInBjYmhhc2hzaXplIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKwkgICAgJlNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9wY2J0YmxzaXplKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkg
ICAgU0NUUENUTF9QQ0JIQVNIU0laRV9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxf
b2lkX3RvcCwgIm1pbl9zcGxpdF9wb2ludCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisJICAg
ICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWluX3NwbGl0X3BvaW50KSwgMCwgc2N0cF9zeXNjdGxf
aGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9NSU5fU1BMSVRfUE9JTlRfREVTQyk7CisKKwlzeXNj
dGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJjaHVua3NjYWxlIiwgQ1RMVFlQRV9JTlR8Q1RM
RkxBR19SVywKKwkgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jaHVua3NjYWxlKSwgMCwgc2N0
cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9DSFVOS1NDQUxFX0RFU0MpOworCisJ
c3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiZGVsYXllZF9zYWNrX3RpbWUiLCBDVExU
WVBFX0lOVHxDVExGTEFHX1JXLAorCSAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RlbGF5ZWRf
c2Fja190aW1lX2RlZmF1bHQpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQ
Q1RMX0RFTEFZRURfU0FDS19USU1FX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9v
aWRfdG9wLCAic2Fja19mcmVxIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKwkgICAgJlNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9zYWNrX2ZyZXFfZGVmYXVsdCksIDAsIHNjdHBfc3lzY3RsX2hhbmRs
ZV9pbnQsCisJICAgIFNDVFBDVExfU0FDS19GUkVRX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQo
JnN5c2N0bF9vaWRfdG9wLCAic3lzX3Jlc291cmNlIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywK
KwkgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zeXN0ZW1fZnJlZV9yZXNjX2xpbWl0KSwgMCwg
c2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9TWVNfUkVTT1VSQ0VfREVTQyk7
CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJhc29jX3Jlc291cmNlIiwgQ1RM
VFlQRV9JTlR8Q1RMRkxBR19SVywKKwkgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hc29jX2Zy
ZWVfcmVzY19saW1pdCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExf
QVNPQ19SRVNPVVJDRV9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwg
ImhlYXJ0YmVhdF9pbnRlcnZhbCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisJICAgICZTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfaGVhcnRiZWF0X2ludGVydmFsX2RlZmF1bHQpLCAwLCBzY3RwX3N5
c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX0hFQVJUQkVBVF9JTlRFUlZBTF9ERVNDKTsK
KworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInBtdHVfcmFpc2VfdGltZSIsIENU
TFRZUEVfSU5UfENUTEZMQUdfUlcsCisJICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcG10dV9y
YWlzZV90aW1lX2RlZmF1bHQpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQ
Q1RMX1BNVFVfUkFJU0VfVElNRV9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lk
X3RvcCwgInNodXRkb3duX2d1YXJkX3RpbWUiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorCSAg
ICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3NodXRkb3duX2d1YXJkX3RpbWVfZGVmYXVsdCksIDAs
IHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfU0hVVERPV05fR1VBUkRfVElN
RV9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInNlY3JldF9saWZl
dGltZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisJICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfc2VjcmV0X2xpZmV0aW1lX2RlZmF1bHQpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAor
CSAgICBTQ1RQQ1RMX1NFQ1JFVF9MSUZFVElNRV9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZz
eXNjdGxfb2lkX3RvcCwgInJ0b19tYXgiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorCSAgICAm
U0NUUF9CQVNFX1NZU0NUTChzY3RwX3J0b19tYXhfZGVmYXVsdCksIDAsIHNjdHBfc3lzY3RsX2hh
bmRsZV9pbnQsCisJICAgIFNDVFBDVExfUlRPX01BWF9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lk
KCZzeXNjdGxfb2lkX3RvcCwgInJ0b19taW4iLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorCSAg
ICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3J0b19taW5fZGVmYXVsdCksIDAsIHNjdHBfc3lzY3Rs
X2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfUlRPX01JTl9ERVNDKTsKKworCXN5c2N0bF9hZGRf
b2lkKCZzeXNjdGxfb2lkX3RvcCwgInJ0b19pbml0aWFsIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19S
VywKKwkgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydG9faW5pdGlhbF9kZWZhdWx0KSwgMCwg
c2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9SVE9fSU5JVElBTF9ERVNDKTsK
KworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImluaXRfcnRvX21heCIsIENUTFRZ
UEVfSU5UfENUTEZMQUdfUlcsCisJICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaW5pdF9ydG9f
bWF4X2RlZmF1bHQpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX0lO
SVRfUlRPX01BWF9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInZh
bGlkX2Nvb2tpZV9saWZlIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKwkgICAgJlNDVFBfQkFT
RV9TWVNDVEwoc2N0cF92YWxpZF9jb29raWVfbGlmZV9kZWZhdWx0KSwgMCwgc2N0cF9zeXNjdGxf
aGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9WQUxJRF9DT09LSUVfTElGRV9ERVNDKTsKKworCXN5
c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImluaXRfcnR4X21heCIsIENUTFRZUEVfSU5U
fENUTEZMQUdfUlcsCisJICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaW5pdF9ydHhfbWF4X2Rl
ZmF1bHQpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX0lOSVRfUlRY
X01BWF9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImFzc29jX3J0
eF9tYXgiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorCSAgICAmU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX2Fzc29jX3J0eF9tYXhfZGVmYXVsdCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJ
ICAgIFNDVFBDVExfQVNTT0NfUlRYX01BWF9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNj
dGxfb2lkX3RvcCwgInBhdGhfcnR4X21heCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisJICAg
ICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcGF0aF9ydHhfbWF4X2RlZmF1bHQpLCAwLCBzY3RwX3N5
c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX1BBVEhfUlRYX01BWF9ERVNDKTsKKworCXN5
c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInBhdGhfcGZfdGhyZXNob2xkIiwgQ1RMVFlQ
RV9JTlR8Q1RMRkxBR19SVywKKwkgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wYXRoX3BmX3Ro
cmVzaG9sZCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfUEFUSF9Q
Rl9USFJFU0hPTERfREVTQyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJh
ZGRfbW9yZV9vbl9vdXRwdXQiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorCSAgICAmU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2FkZF9tb3JlX3RocmVzaG9sZCksIDAsIHNjdHBfc3lzY3RsX2hhbmRs
ZV9pbnQsCisJICAgIFNDVFBDVExfQUREX01PUkVfT05fT1VUUFVUX0RFU0MpOworCisJc3lzY3Rs
X2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiaW5jb21pbmdfc3RyZWFtcyIsIENUTFRZUEVfSU5U
fENUTEZMQUdfUlcsCisJICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbnJfaW5jb21pbmdfc3Ry
ZWFtc19kZWZhdWx0KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9J
TkNPTUlOR19TVFJFQU1TX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9w
LCAib3V0Z29pbmdfc3RyZWFtcyIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisJICAgICZTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbnJfb3V0Z29pbmdfc3RyZWFtc19kZWZhdWx0KSwgMCwgc2N0cF9z
eXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9PVVRHT0lOR19TVFJFQU1TX0RFU0MpOwor
CisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiY210X29uX29mZiIsIENUTFRZUEVf
SU5UfENUTEZMQUdfUlcsCisJICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY210X29uX29mZiks
IDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfQ01UX09OX09GRl9ERVND
KTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImNtdF91c2VfZGFjIiwgQ1RM
VFlQRV9JTlR8Q1RMRkxBR19SVywKKwkgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfdXNl
X2RhYyksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfQ01UX1VTRV9E
QUNfREVTQyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJjd25kX21heGJ1
cnN0IiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKwkgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0
cF91c2VfY3duZF9iYXNlZF9tYXhidXJzdCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJ
ICAgIFNDVFBDVExfQ1dORF9NQVhCVVJTVF9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNj
dGxfb2lkX3RvcCwgIm5hdF9mcmllbmRseSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisJICAg
ICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbmF0X2ZyaWVuZGx5KSwgMCwgc2N0cF9zeXNjdGxfaGFu
ZGxlX2ludCwKKwkgICAgU0NUUENUTF9OQVRfRlJJRU5ETFlfREVTQyk7CisKKwlzeXNjdGxfYWRk
X29pZCgmc3lzY3RsX29pZF90b3AsICJhYmNfbF92YXIiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JX
LAorCSAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX0wyX2FiY192YXJpYWJsZSksIDAsIHNjdHBf
c3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfQUJDX0xfVkFSX0RFU0MpOworCisJc3lz
Y3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAibWF4X2NoYWluZWRfbWJ1ZnMiLCBDVExUWVBF
X0lOVHxDVExGTEFHX1JXLAorCSAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX21idWZfdGhyZXNo
b2xkX2NvdW50KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9NQVhf
Q0hBSU5FRF9NQlVGU19ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwg
ImRvX3NjdHBfZHJhaW4iLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorCSAgICAmU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2RvX2RyYWluKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAg
U0NUUENUTF9ET19TQ1RQX0RSQUlOX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9v
aWRfdG9wLCAiaGJfbWF4X2J1cnN0IiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKwkgICAgJlND
VFBfQkFTRV9TWVNDVEwoc2N0cF9oYl9tYXhidXJzdCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9p
bnQsCisJICAgIFNDVFBDVExfSEJfTUFYX0JVUlNUX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQo
JnN5c2N0bF9vaWRfdG9wLCAiYWJvcnRfYXRfbGltaXQiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JX
LAorCSAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2Fib3J0X2lmX29uZV8yX29uZV9oaXRzX2xp
bWl0KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9BQk9SVF9BVF9M
SU1JVF9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgIm1pbl9yZXNp
ZHVhbCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisJICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbWluX3Jlc2lkdWFsKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENU
TF9NSU5fUkVTSURVQUxfREVTQyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3As
ICJtYXhfcmV0cmFuX2NodW5rIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKwkgICAgJlNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9tYXhfcmV0cmFuX2NodW5rKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxl
X2ludCwKKwkgICAgU0NUUENUTF9NQVhfUkVUUkFOX0NIVU5LX0RFU0MpOworCisJc3lzY3RsX2Fk
ZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAibG9nX2xldmVsIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19S
VywKKwkgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSwgMCwgc2N0cF9z
eXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9MT0dHSU5HX0xFVkVMX0RFU0MpOworCisJ
c3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiZGVmYXVsdF9jY19tb2R1bGUiLCBDVExU
WVBFX0lOVHxDVExGTEFHX1JXLAorCSAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RlZmF1bHRf
Y2NfbW9kdWxlKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9ERUZB
VUxUX0NDX01PRFVMRV9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwg
ImRlZmF1bHRfc3NfbW9kdWxlIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKwkgICAgJlNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9kZWZhdWx0X3NzX21vZHVsZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRs
ZV9pbnQsCisJICAgIFNDVFBDVExfREVGQVVMVF9TU19NT0RVTEVfREVTQyk7CisKKwlzeXNjdGxf
YWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJkZWZhdWx0X2ZyYWdfaW50ZXJsZWF2ZSIsIENUTFRZ
UEVfSU5UfENUTEZMQUdfUlcsCisJICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9m
cmFnX2ludGVybGVhdmUpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RM
X0RFRkFVTFRfRlJBR19JTlRFUkxFQVZFX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0
bF9vaWRfdG9wLCAibW9iaWxpdHlfYmFzZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisJICAg
ICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbW9iaWxpdHlfYmFzZSksIDAsIHNjdHBfc3lzY3RsX2hh
bmRsZV9pbnQsCisJICAgIFNDVFBDVExfTU9CSUxJVFlfQkFTRV9ERVNDKTsKKworCXN5c2N0bF9h
ZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgIm1vYmlsaXR5X2Zhc3RoYW5kb2ZmIiwgQ1RMVFlQRV9J
TlR8Q1RMRkxBR19SVywKKwkgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tb2JpbGl0eV9mYXN0
aGFuZG9mZiksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfTU9CSUxJ
VFlfRkFTVEhBTkRPRkZfREVTQyk7CisKKyNpZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVG
KQorCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInNjdHBfbG9nIiwgQ1RMVFlQRV9T
VFJVQ1R8Q1RMRkxBR19SRCwKKwkgICAgU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZyksIHNpemVv
ZihzdHJ1Y3Qgc2N0cF9sb2cpLCBOVUxMLAorCSAgICAiU0NUUCBsb2dnaW5nIChzdHJ1Y3Qgc2N0
cF9sb2cpIik7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJjbGVhcl90cmFj
ZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfV1IsCisJICAgIE5VTEwsIDAsIHNjdHBfc3lzY3RsX2hh
bmRsZV90cmFjZV9sb2dfY2xlYXIsCisJICAgICJDbGVhciBTQ1RQIExvZ2dpbmcgYnVmZmVyIik7
CisjZW5kaWYKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInVkcF90dW5uZWxp
bmdfcG9ydCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisJICAgICZTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfdWRwX3R1bm5lbGluZ19wb3J0KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX3VkcF90dW5u
ZWxpbmcsCisJICAgIFNDVFBDVExfVURQX1RVTk5FTElOR19QT1JUX0RFU0MpOworCisJc3lzY3Rs
X2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiZW5hYmxlX3NhY2tfaW1tZWRpYXRlbHkiLCBDVExU
WVBFX0lOVHxDVExGTEFHX1JXLAorCSAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2VuYWJsZV9z
YWNrX2ltbWVkaWF0ZWx5KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENU
TF9TQUNLX0lNTUVESUFURUxZX0VOQUJMRV9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNj
dGxfb2lkX3RvcCwgIm5hdF9mcmllbmRseV9pbml0IiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywK
KwkgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pbml0c19pbmNsdWRlX25hdF9mcmllbmRseSks
IDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfTkFUX0ZSSUVORExZX0RF
U0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAidnRhZ190aW1lX3dhaXQi
LCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorCSAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3Z0
YWdfdGltZV93YWl0KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9U
SU1FX1dBSVRfREVTQyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJidWZm
ZXJfc3BsaXR0aW5nIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKwkgICAgJlNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9idWZmZXJfc3BsaXR0aW5nKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwK
KwkgICAgU0NUUENUTF9CVUZGRVJfU1BMSVRUSU5HX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQo
JnN5c2N0bF9vaWRfdG9wLCAiaW5pdGlhbF9jd25kIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywK
KwkgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pbml0aWFsX2N3bmQpLCAwLCBzY3RwX3N5c2N0
bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX0lOSVRJQUxfQ1dORF9ERVNDKTsKKworCXN5c2N0
bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInJ0dHZhcl9idyIsIENUTFRZUEVfSU5UfENUTEZM
QUdfUlcsCisJICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcnR0dmFyX2J3KSwgMCwgc2N0cF9z
eXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9SVFRWQVJfQldfREVTQyk7CisKKwlzeXNj
dGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJydHR2YXJfcnR0IiwgQ1RMVFlQRV9JTlR8Q1RM
RkxBR19SVywKKwkgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydHR2YXJfcnR0KSwgMCwgc2N0
cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9SVFRWQVJfUlRUX0RFU0MpOworCisJ
c3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAicnR0dmFyX2VxcmV0IiwgQ1RMVFlQRV9J
TlR8Q1RMRkxBR19SVywKKwkgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydHR2YXJfZXFyZXQp
LCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX1JUVFZBUl9FUVJFVF9E
RVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInJ0dHZhcl9zdGVhZHlf
c3RlcCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisJICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfc3RlYWR5X3N0ZXApLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RM
X1JUVFZBUl9TVEVBRFlTX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9w
LCAidXNlX2RjY2NlY24iLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorCSAgICAmU0NUUF9CQVNF
X1NZU0NUTChzY3RwX3VzZV9kY2NjX2VjbiksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJ
ICAgIFNDVFBDVExfUlRUVkFSX0RDQ0NFQ05fREVTQyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lz
Y3RsX29pZF90b3AsICJibGFja2hvbGUiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorCSAgICAm
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2JsYWNraG9sZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9p
bnQsCisJICAgIFNDVFBDVExfQkxBQ0tIT0xFX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5
c2N0bF9vaWRfdG9wLCAic2VuZGFsbF9saW1pdCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisJ
ICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfc2VuZGFsbF9saW1pdCksIDAsIHNjdHBfc3lzY3Rs
X2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfU0VOREFMTF9MSU1JVF9ERVNDKTsKKworCXN5c2N0
bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImRpYWdfaW5mb19jb2RlIiwgQ1RMVFlQRV9JTlR8
Q1RMRkxBR19SVywKKwkgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9fY29kZSks
IDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfRElBR19JTkZPX0NPREVf
REVTQyk7CisKKyNpZmRlZiBTQ1RQX0RFQlVHCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRf
dG9wLCAiZGVidWciLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorCSAgICAmU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2RlYnVnX29uKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NU
UENUTF9ERUJVR19ERVNDKTsKKyNlbmRpZgorCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRf
dG9wLCAic3RhdHMiLCBDVExUWVBFX1NUUlVDVHxDVExGTEFHX1JXLAorCSAgICAmU0NUUF9CQVNF
X1NUQVRTLCBzaXplb2YoU0NUUF9CQVNFX1NUQVRTKSwgTlVMTCwKKwkgICAgIlNDVFAgc3RhdGlz
dGljcyAoc3RydWN0IHNjdHBfc3RhdCkiKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lk
X3RvcCwgImFzc29jbGlzdCIsIENUTFRZUEVfU1RSVUNUfENUTEZMQUdfUkQsCisJICAgIE5VTEws
IDAsIHNjdHBfYXNzb2NsaXN0LAorCSAgICAiTGlzdCBvZiBhY3RpdmUgU0NUUCBhc3NvY2lhdGlv
bnMiKTsKK30KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGli
L25ldGluZXQvc2N0cF9zeXNjdGwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3Rw
X3N5c2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMC4uMDA2YTEx
ZjMxZDY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfc3lzY3RsLmgKQEAgLTAsMCArMSw2MjcgQEAKKy8qLQorICogU1BEWC1MaWNlbnNlLUlkZW50
aWZpZXI6IEJTRC0zLUNsYXVzZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNywgYnkgQ2lzY28g
U3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4
LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIGEpIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKgorICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAg
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0
ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEOiBoZWFk
L3N5cy9uZXRpbmV0L3NjdHBfc3lzY3RsLmggMzY2NzUwIDIwMjAtMTAtMTYgMTA6NDQ6NDhaIHR1
ZXhlbiAkIik7CisjZW5kaWYKKworI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX1NZU0NUTF9IXworI2Rl
ZmluZSBfTkVUSU5FVF9TQ1RQX1NZU0NUTF9IXworCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29z
Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2NvbnN0YW50cy5oPgorCitzdHJ1Y3Qgc2N0cF9z
eXNjdGwgeworCXVpbnQzMl90IHNjdHBfc2VuZHNwYWNlOworCXVpbnQzMl90IHNjdHBfcmVjdnNw
YWNlOworCXVpbnQzMl90IHNjdHBfYXV0b19hc2NvbmY7CisJdWludDMyX3Qgc2N0cF9tdWx0aXBs
ZV9hc2NvbmZzOworCXVpbnQzMl90IHNjdHBfZWNuX2VuYWJsZTsKKwl1aW50MzJfdCBzY3RwX3By
X2VuYWJsZTsKKwl1aW50MzJfdCBzY3RwX2F1dGhfZW5hYmxlOworCXVpbnQzMl90IHNjdHBfYXNj
b25mX2VuYWJsZTsKKwl1aW50MzJfdCBzY3RwX3JlY29uZmlnX2VuYWJsZTsKKwl1aW50MzJfdCBz
Y3RwX25yc2Fja19lbmFibGU7CisJdWludDMyX3Qgc2N0cF9wa3Rkcm9wX2VuYWJsZTsKKwl1aW50
MzJfdCBzY3RwX2ZyX21heF9idXJzdF9kZWZhdWx0OworI2lmICEoZGVmaW5lZChfX0ZyZWVCU0Rf
XykgICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQorCXVpbnQzMl90IHNjdHBfbm9fY3N1bV9v
bl9sb29wYmFjazsKKyNlbmRpZgorCXVpbnQzMl90IHNjdHBfcGVlcl9jaHVua19vaDsKKwl1aW50
MzJfdCBzY3RwX21heF9idXJzdF9kZWZhdWx0OworCXVpbnQzMl90IHNjdHBfbWF4X2NodW5rc19v
bl9xdWV1ZTsKKwl1aW50MzJfdCBzY3RwX2hhc2h0YmxzaXplOworCXVpbnQzMl90IHNjdHBfcGNi
dGJsc2l6ZTsKKwl1aW50MzJfdCBzY3RwX21pbl9zcGxpdF9wb2ludDsKKwl1aW50MzJfdCBzY3Rw
X2NodW5rc2NhbGU7CisJdWludDMyX3Qgc2N0cF9kZWxheWVkX3NhY2tfdGltZV9kZWZhdWx0Owor
CXVpbnQzMl90IHNjdHBfc2Fja19mcmVxX2RlZmF1bHQ7CisJdWludDMyX3Qgc2N0cF9zeXN0ZW1f
ZnJlZV9yZXNjX2xpbWl0OworCXVpbnQzMl90IHNjdHBfYXNvY19mcmVlX3Jlc2NfbGltaXQ7CisJ
dWludDMyX3Qgc2N0cF9oZWFydGJlYXRfaW50ZXJ2YWxfZGVmYXVsdDsKKwl1aW50MzJfdCBzY3Rw
X3BtdHVfcmFpc2VfdGltZV9kZWZhdWx0OworCXVpbnQzMl90IHNjdHBfc2h1dGRvd25fZ3VhcmRf
dGltZV9kZWZhdWx0OworCXVpbnQzMl90IHNjdHBfc2VjcmV0X2xpZmV0aW1lX2RlZmF1bHQ7CisJ
dWludDMyX3Qgc2N0cF9ydG9fbWF4X2RlZmF1bHQ7CisJdWludDMyX3Qgc2N0cF9ydG9fbWluX2Rl
ZmF1bHQ7CisJdWludDMyX3Qgc2N0cF9ydG9faW5pdGlhbF9kZWZhdWx0OworCXVpbnQzMl90IHNj
dHBfaW5pdF9ydG9fbWF4X2RlZmF1bHQ7CisJdWludDMyX3Qgc2N0cF92YWxpZF9jb29raWVfbGlm
ZV9kZWZhdWx0OworCXVpbnQzMl90IHNjdHBfaW5pdF9ydHhfbWF4X2RlZmF1bHQ7CisJdWludDMy
X3Qgc2N0cF9hc3NvY19ydHhfbWF4X2RlZmF1bHQ7CisJdWludDMyX3Qgc2N0cF9wYXRoX3J0eF9t
YXhfZGVmYXVsdDsKKwl1aW50MzJfdCBzY3RwX3BhdGhfcGZfdGhyZXNob2xkOworCXVpbnQzMl90
IHNjdHBfYWRkX21vcmVfdGhyZXNob2xkOworCXVpbnQzMl90IHNjdHBfbnJfaW5jb21pbmdfc3Ry
ZWFtc19kZWZhdWx0OworCXVpbnQzMl90IHNjdHBfbnJfb3V0Z29pbmdfc3RyZWFtc19kZWZhdWx0
OworCXVpbnQzMl90IHNjdHBfY210X29uX29mZjsKKwl1aW50MzJfdCBzY3RwX2NtdF91c2VfZGFj
OworCXVpbnQzMl90IHNjdHBfdXNlX2N3bmRfYmFzZWRfbWF4YnVyc3Q7CisJdWludDMyX3Qgc2N0
cF9uYXRfZnJpZW5kbHk7CisJdWludDMyX3Qgc2N0cF9MMl9hYmNfdmFyaWFibGU7CisJdWludDMy
X3Qgc2N0cF9tYnVmX3RocmVzaG9sZF9jb3VudDsKKwl1aW50MzJfdCBzY3RwX2RvX2RyYWluOwor
CXVpbnQzMl90IHNjdHBfaGJfbWF4YnVyc3Q7CisJdWludDMyX3Qgc2N0cF9hYm9ydF9pZl9vbmVf
Ml9vbmVfaGl0c19saW1pdDsKKwl1aW50MzJfdCBzY3RwX21pbl9yZXNpZHVhbDsKKwl1aW50MzJf
dCBzY3RwX21heF9yZXRyYW5fY2h1bms7CisJdWludDMyX3Qgc2N0cF9sb2dnaW5nX2xldmVsOwor
CS8qIEpSUyAtIFZhcmlhYmxlIGZvciBkZWZhdWx0IGNvbmdlc3Rpb24gY29udHJvbCBtb2R1bGUg
Ki8KKwl1aW50MzJfdCBzY3RwX2RlZmF1bHRfY2NfbW9kdWxlOworCS8qIFJTIC0gVmFyaWFibGUg
Zm9yIGRlZmF1bHQgc3RyZWFtIHNjaGVkdWxpbmcgbW9kdWxlICovCisJdWludDMyX3Qgc2N0cF9k
ZWZhdWx0X3NzX21vZHVsZTsKKwl1aW50MzJfdCBzY3RwX2RlZmF1bHRfZnJhZ19pbnRlcmxlYXZl
OworCXVpbnQzMl90IHNjdHBfbW9iaWxpdHlfYmFzZTsKKwl1aW50MzJfdCBzY3RwX21vYmlsaXR5
X2Zhc3RoYW5kb2ZmOworCXVpbnQzMl90IHNjdHBfaW5pdHNfaW5jbHVkZV9uYXRfZnJpZW5kbHk7
CisJdWludDMyX3Qgc2N0cF9ydHR2YXJfYnc7CisJdWludDMyX3Qgc2N0cF9ydHR2YXJfcnR0Owor
CXVpbnQzMl90IHNjdHBfcnR0dmFyX2VxcmV0OworCXVpbnQzMl90IHNjdHBfc3RlYWR5X3N0ZXA7
CisJdWludDMyX3Qgc2N0cF91c2VfZGNjY19lY247CisJdWludDMyX3Qgc2N0cF9kaWFnX2luZm9f
Y29kZTsKKyNpZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQorI2lmIGRlZmluZWQoX1dJ
TjMyKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXN0cnVjdCBzY3RwX2xvZyAqc2N0cF9s
b2c7CisjZWxzZQorCXN0cnVjdCBzY3RwX2xvZyBzY3RwX2xvZzsKKyNlbmRpZgorI2VuZGlmCisJ
dWludDMyX3Qgc2N0cF91ZHBfdHVubmVsaW5nX3BvcnQ7CisJdWludDMyX3Qgc2N0cF9lbmFibGVf
c2Fja19pbW1lZGlhdGVseTsKKwl1aW50MzJfdCBzY3RwX3Z0YWdfdGltZV93YWl0OworCXVpbnQz
Ml90IHNjdHBfYnVmZmVyX3NwbGl0dGluZzsKKwl1aW50MzJfdCBzY3RwX2luaXRpYWxfY3duZDsK
Kwl1aW50MzJfdCBzY3RwX2JsYWNraG9sZTsKKwl1aW50MzJfdCBzY3RwX3NlbmRhbGxfbGltaXQ7
CisjaWYgZGVmaW5lZChTQ1RQX0RFQlVHKQorCXVpbnQzMl90IHNjdHBfZGVidWdfb247CisjZW5k
aWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwl1
aW50MzJfdCBzY3RwX2lnbm9yZV92bXdhcmVfaW50ZXJmYWNlczsKKwl1aW50MzJfdCBzY3RwX21h
aW5fdGltZXI7CisJdWludDMyX3Qgc2N0cF9hZGRyX3dhdGNoZG9nX2xpbWl0OworCXVpbnQzMl90
IHNjdHBfdnRhZ193YXRjaGRvZ19saW1pdDsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19BUFBMRV9f
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXVpbnQzMl90IHNjdHBfb3V0cHV0X3VubG9j
a2VkOworI2VuZGlmCit9OworCisvKgorICogbGltaXRzIGZvciB0aGUgc3lzY3RsIHZhcmlhYmxl
cworICovCisvKiBtYXhkZ3JhbTogTWF4aW11bSBvdXRnb2luZyBTQ1RQIGJ1ZmZlciBzaXplICov
CisjZGVmaW5lIFNDVFBDVExfTUFYREdSQU1fREVTQwkJIk1heGltdW0gb3V0Z29pbmcgU0NUUCBi
dWZmZXIgc2l6ZSIKKyNkZWZpbmUgU0NUUENUTF9NQVhER1JBTV9NSU4JCTAKKyNkZWZpbmUgU0NU
UENUTF9NQVhER1JBTV9NQVgJCTB4RkZGRkZGRkYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisjZGVmaW5lIFNDVFBDVExfTUFYREdSQU1fREVGQVVMVAlTQl9NQVgKKyNlbHNlCisjZGVmaW5l
IFNDVFBDVExfTUFYREdSQU1fREVGQVVMVAkyNjIxNDQJLyogMjU2ayAqLworI2VuZGlmCisKKy8q
IHJlY3ZzcGFjZTogTWF4aW11bSBpbmNvbWluZyBTQ1RQIGJ1ZmZlciBzaXplICovCisjZGVmaW5l
IFNDVFBDVExfUkVDVlNQQUNFX0RFU0MJCSJNYXhpbXVtIGluY29taW5nIFNDVFAgYnVmZmVyIHNp
emUiCisjZGVmaW5lIFNDVFBDVExfUkVDVlNQQUNFX01JTgkJMAorI2RlZmluZSBTQ1RQQ1RMX1JF
Q1ZTUEFDRV9NQVgJCTB4RkZGRkZGRkYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjZGVm
aW5lIFNDVFBDVExfUkVDVlNQQUNFX0RFRkFVTFQJU0JfUkFXCisjZWxzZQorI2RlZmluZSBTQ1RQ
Q1RMX1JFQ1ZTUEFDRV9ERUZBVUxUCTI2MjE0NAkvKiAyNTZrICovCisjZW5kaWYKKworLyogYXV0
b2FzY29uZjogRW5hYmxlIFNDVFAgQXV0by1BU0NPTkYgKi8KKyNkZWZpbmUgU0NUUENUTF9BVVRP
QVNDT05GX0RFU0MJCSJFbmFibGUgU0NUUCBBdXRvLUFTQ09ORiIKKyNkZWZpbmUgU0NUUENUTF9B
VVRPQVNDT05GX01JTgkJMAorI2RlZmluZSBTQ1RQQ1RMX0FVVE9BU0NPTkZfTUFYCQkxCisjZGVm
aW5lIFNDVFBDVExfQVVUT0FTQ09ORl9ERUZBVUxUCTEKKworLyogYXV0b2FzY29uZjogRW5hYmxl
IFNDVFAgQXV0by1BU0NPTkYgKi8KKyNkZWZpbmUgU0NUUENUTF9NVUxUSVBMRUFTQ09ORlNfREVT
QwkiRW5hYmxlIFNDVFAgTXVsaXBsZS1BU0NPTkZzIgorI2RlZmluZSBTQ1RQQ1RMX01VTFRJUExF
QVNDT05GU19NSU4JMAorI2RlZmluZSBTQ1RQQ1RMX01VTFRJUExFQVNDT05GU19NQVgJMQorI2Rl
ZmluZSBTQ1RQQ1RMX01VTFRJUExFQVNDT05GU19ERUZBVUxUCVNDVFBfREVGQVVMVF9NVUxUSVBM
RV9BU0NPTkZTCisKKy8qIGVjbl9lbmFibGU6IEVuYWJsZSBTQ1RQIEVDTiAqLworI2RlZmluZSBT
Q1RQQ1RMX0VDTl9FTkFCTEVfREVTQwkJIkVuYWJsZSBTQ1RQIEVDTiIKKyNkZWZpbmUgU0NUUENU
TF9FQ05fRU5BQkxFX01JTgkJMAorI2RlZmluZSBTQ1RQQ1RMX0VDTl9FTkFCTEVfTUFYCQkxCisj
ZGVmaW5lIFNDVFBDVExfRUNOX0VOQUJMRV9ERUZBVUxUCTEKKworLyogcHJfZW5hYmxlOiBFbmFi
bGUgUFItU0NUUCAqLworI2RlZmluZSBTQ1RQQ1RMX1BSX0VOQUJMRV9ERVNDCQkiRW5hYmxlIFBS
LVNDVFAiCisjZGVmaW5lIFNDVFBDVExfUFJfRU5BQkxFX01JTgkJMAorI2RlZmluZSBTQ1RQQ1RM
X1BSX0VOQUJMRV9NQVgJCTEKKyNkZWZpbmUgU0NUUENUTF9QUl9FTkFCTEVfREVGQVVMVAkxCisK
Ky8qIGF1dGhfZW5hYmxlOiBFbmFibGUgU0NUUCBBVVRIIGZ1bmN0aW9uICovCisjZGVmaW5lIFND
VFBDVExfQVVUSF9FTkFCTEVfREVTQwkiRW5hYmxlIFNDVFAgQVVUSCBmdW5jdGlvbiIKKyNkZWZp
bmUgU0NUUENUTF9BVVRIX0VOQUJMRV9NSU4JCTAKKyNkZWZpbmUgU0NUUENUTF9BVVRIX0VOQUJM
RV9NQVgJCTEKKyNkZWZpbmUgU0NUUENUTF9BVVRIX0VOQUJMRV9ERUZBVUxUCTEKKworLyogYXNj
b25mX2VuYWJsZTogRW5hYmxlIFNDVFAgQVNDT05GICovCisjZGVmaW5lIFNDVFBDVExfQVNDT05G
X0VOQUJMRV9ERVNDCSJFbmFibGUgU0NUUCBBU0NPTkYiCisjZGVmaW5lIFNDVFBDVExfQVNDT05G
X0VOQUJMRV9NSU4JMAorI2RlZmluZSBTQ1RQQ1RMX0FTQ09ORl9FTkFCTEVfTUFYCTEKKyNkZWZp
bmUgU0NUUENUTF9BU0NPTkZfRU5BQkxFX0RFRkFVTFQJMQorCisvKiByZWNvbmZpZ19lbmFibGU6
IEVuYWJsZSBTQ1RQIFJFLUNPTkZJRyAqLworI2RlZmluZSBTQ1RQQ1RMX1JFQ09ORklHX0VOQUJM
RV9ERVNDCSJFbmFibGUgU0NUUCBSRS1DT05GSUciCisjZGVmaW5lIFNDVFBDVExfUkVDT05GSUdf
RU5BQkxFX01JTgkwCisjZGVmaW5lIFNDVFBDVExfUkVDT05GSUdfRU5BQkxFX01BWAkxCisjZGVm
aW5lIFNDVFBDVExfUkVDT05GSUdfRU5BQkxFX0RFRkFVTFQJMQorCisvKiBucnNhY2tfZW5hYmxl
OiBFbmFibGUgTlJfU0FDSyAqLworI2RlZmluZSBTQ1RQQ1RMX05SU0FDS19FTkFCTEVfREVTQwki
RW5hYmxlIFNDVFAgTlItU0FDSyIKKyNkZWZpbmUgU0NUUENUTF9OUlNBQ0tfRU5BQkxFX01JTgkw
CisjZGVmaW5lIFNDVFBDVExfTlJTQUNLX0VOQUJMRV9NQVgJMQorI2RlZmluZSBTQ1RQQ1RMX05S
U0FDS19FTkFCTEVfREVGQVVMVAkwCisKKy8qIHBrdGRyb3BfZW5hYmxlOiBFbmFibGUgU0NUUCBQ
YWNrZXQgRHJvcCBSZXBvcnRzICovCisjZGVmaW5lIFNDVFBDVExfUEtURFJPUF9FTkFCTEVfREVT
QwkiRW5hYmxlIFNDVFAgUEtURFJPUCIKKyNkZWZpbmUgU0NUUENUTF9QS1REUk9QX0VOQUJMRV9N
SU4JMAorI2RlZmluZSBTQ1RQQ1RMX1BLVERST1BfRU5BQkxFX01BWAkxCisjZGVmaW5lIFNDVFBD
VExfUEtURFJPUF9FTkFCTEVfREVGQVVMVAkwCisKKy8qIGxvb3BiYWNrX25vY3N1bTogRW5hYmxl
IE5PIENzdW0gb24gcGFja2V0cyBzZW50IG9uIGxvb3BiYWNrICovCisjZGVmaW5lIFNDVFBDVExf
TE9PUEJBQ0tfTk9DU1VNX0RFU0MJIkVuYWJsZSBOTyBDc3VtIG9uIHBhY2tldHMgc2VudCBvbiBs
b29wYmFjayIKKyNkZWZpbmUgU0NUUENUTF9MT09QQkFDS19OT0NTVU1fTUlOCTAKKyNkZWZpbmUg
U0NUUENUTF9MT09QQkFDS19OT0NTVU1fTUFYCTEKKyNkZWZpbmUgU0NUUENUTF9MT09QQkFDS19O
T0NTVU1fREVGQVVMVAkxCisKKy8qIHBlZXJfY2hrb2g6IEFtb3VudCB0byBkZWJpdCBwZWVycyBy
d25kIHBlciBjaHVuayBzZW50ICovCisjZGVmaW5lIFNDVFBDVExfUEVFUl9DSEtPSF9ERVNDCQki
QW1vdW50IHRvIGRlYml0IHBlZXJzIHJ3bmQgcGVyIGNodW5rIHNlbnQiCisjZGVmaW5lIFNDVFBD
VExfUEVFUl9DSEtPSF9NSU4JCTAKKyNkZWZpbmUgU0NUUENUTF9QRUVSX0NIS09IX01BWAkJMHhG
RkZGRkZGRgorI2RlZmluZSBTQ1RQQ1RMX1BFRVJfQ0hLT0hfREVGQVVMVAkyNTYKKworLyogbWF4
YnVyc3Q6IERlZmF1bHQgbWF4IGJ1cnN0IGZvciBzY3RwIGVuZHBvaW50cyAqLworI2RlZmluZSBT
Q1RQQ1RMX01BWEJVUlNUX0RFU0MJCSJEZWZhdWx0IG1heCBidXJzdCBmb3Igc2N0cCBlbmRwb2lu
dHMiCisjZGVmaW5lIFNDVFBDVExfTUFYQlVSU1RfTUlOCQkwCisjZGVmaW5lIFNDVFBDVExfTUFY
QlVSU1RfTUFYCQkweEZGRkZGRkZGCisjZGVmaW5lIFNDVFBDVExfTUFYQlVSU1RfREVGQVVMVAlT
Q1RQX0RFRl9NQVhfQlVSU1QKKworLyogZnJfbWF4YnVyc3Q6IERlZmF1bHQgbWF4IGJ1cnN0IGZv
ciBzY3RwIGVuZHBvaW50cyB3aGVuIGZhc3QgcmV0cmFuc21pdHRpbmcgKi8KKyNkZWZpbmUgU0NU
UENUTF9GUk1BWEJVUlNUX0RFU0MJCSJEZWZhdWx0IG1heCBidXJzdCBmb3IgU0NUUCBlbmRwb2lu
dHMgd2hlbiBmYXN0IHJldHJhbnNtaXR0aW5nIgorI2RlZmluZSBTQ1RQQ1RMX0ZSTUFYQlVSU1Rf
TUlOCQkwCisjZGVmaW5lIFNDVFBDVExfRlJNQVhCVVJTVF9NQVgJCTB4RkZGRkZGRkYKKyNkZWZp
bmUgU0NUUENUTF9GUk1BWEJVUlNUX0RFRkFVTFQJU0NUUF9ERUZfRlJNQVhfQlVSU1QKKworLyog
bWF4Y2h1bmtzOiBEZWZhdWx0IG1heCBjaHVua3Mgb24gcXVldWUgcGVyIGFzb2MgKi8KKyNkZWZp
bmUgU0NUUENUTF9NQVhDSFVOS1NfREVTQwkJIkRlZmF1bHQgbWF4IGNodW5rcyBvbiBxdWV1ZSBw
ZXIgYXNvYyIKKyNkZWZpbmUgU0NUUENUTF9NQVhDSFVOS1NfTUlOCQkwCisjZGVmaW5lIFNDVFBD
VExfTUFYQ0hVTktTX01BWAkJMHhGRkZGRkZGRgorI2RlZmluZSBTQ1RQQ1RMX01BWENIVU5LU19E
RUZBVUxUCVNDVFBfQVNPQ19NQVhfQ0hVTktTX09OX1FVRVVFCisKKy8qIHRjYmhhc2hzaXplOiBU
dW5hYmxlIGZvciBIYXNoIHRhYmxlIHNpemVzICovCisjZGVmaW5lIFNDVFBDVExfVENCSEFTSFNJ
WkVfREVTQwkiVHVuYWJsZSBmb3IgVENCIGhhc2ggdGFibGUgc2l6ZXMiCisjZGVmaW5lIFNDVFBD
VExfVENCSEFTSFNJWkVfTUlOCQkxCisjZGVmaW5lIFNDVFBDVExfVENCSEFTSFNJWkVfTUFYCQkw
eEZGRkZGRkZGCisjZGVmaW5lIFNDVFBDVExfVENCSEFTSFNJWkVfREVGQVVMVAlTQ1RQX1RDQkhB
U0hTSVpFCisKKy8qIHBjYmhhc2hzaXplOiBUdW5hYmxlIGZvciBQQ0IgSGFzaCB0YWJsZSBzaXpl
cyAqLworI2RlZmluZSBTQ1RQQ1RMX1BDQkhBU0hTSVpFX0RFU0MJIlR1bmFibGUgZm9yIFBDQiBo
YXNoIHRhYmxlIHNpemVzIgorI2RlZmluZSBTQ1RQQ1RMX1BDQkhBU0hTSVpFX01JTgkJMQorI2Rl
ZmluZSBTQ1RQQ1RMX1BDQkhBU0hTSVpFX01BWAkJMHhGRkZGRkZGRgorI2RlZmluZSBTQ1RQQ1RM
X1BDQkhBU0hTSVpFX0RFRkFVTFQJU0NUUF9QQ0JIQVNIU0laRQorCisvKiBtaW5fc3BsaXRfcG9p
bnQ6IE1pbmltdW0gc2l6ZSB3aGVuIHNwbGl0dGluZyBhIGNodW5rICovCisjZGVmaW5lIFNDVFBD
VExfTUlOX1NQTElUX1BPSU5UX0RFU0MJIk1pbmltdW0gc2l6ZSB3aGVuIHNwbGl0dGluZyBhIGNo
dW5rIgorI2RlZmluZSBTQ1RQQ1RMX01JTl9TUExJVF9QT0lOVF9NSU4JMAorI2RlZmluZSBTQ1RQ
Q1RMX01JTl9TUExJVF9QT0lOVF9NQVgJMHhGRkZGRkZGRgorI2RlZmluZSBTQ1RQQ1RMX01JTl9T
UExJVF9QT0lOVF9ERUZBVUxUCVNDVFBfREVGQVVMVF9TUExJVF9QT0lOVF9NSU4KKworLyogY2h1
bmtzY2FsZTogVHVuYWJsZSBmb3IgU2NhbGluZyBvZiBudW1iZXIgb2YgY2h1bmtzIGFuZCBtZXNz
YWdlcyAqLworI2RlZmluZSBTQ1RQQ1RMX0NIVU5LU0NBTEVfREVTQwkJIlR1bmFibGUgZm9yIHNj
YWxpbmcgb2YgbnVtYmVyIG9mIGNodW5rcyBhbmQgbWVzc2FnZXMiCisjZGVmaW5lIFNDVFBDVExf
Q0hVTktTQ0FMRV9NSU4JCTEKKyNkZWZpbmUgU0NUUENUTF9DSFVOS1NDQUxFX01BWAkJMHhGRkZG
RkZGRgorI2RlZmluZSBTQ1RQQ1RMX0NIVU5LU0NBTEVfREVGQVVMVAlTQ1RQX0NIVU5LUVVFVUVf
U0NBTEUKKworLyogZGVsYXllZF9zYWNrX3RpbWU6IERlZmF1bHQgZGVsYXllZCBTQUNLIHRpbWVy
IGluIG1zICovCisjZGVmaW5lIFNDVFBDVExfREVMQVlFRF9TQUNLX1RJTUVfREVTQwkiRGVmYXVs
dCBkZWxheWVkIFNBQ0sgdGltZXIgaW4gbXMiCisjZGVmaW5lIFNDVFBDVExfREVMQVlFRF9TQUNL
X1RJTUVfTUlOCTAKKyNkZWZpbmUgU0NUUENUTF9ERUxBWUVEX1NBQ0tfVElNRV9NQVgJMHhGRkZG
RkZGRgorI2RlZmluZSBTQ1RQQ1RMX0RFTEFZRURfU0FDS19USU1FX0RFRkFVTFQJU0NUUF9SRUNW
X01TRUMKKworLyogc2Fja19mcmVxOiBEZWZhdWx0IFNBQ0sgZnJlcXVlbmN5ICovCisjZGVmaW5l
IFNDVFBDVExfU0FDS19GUkVRX0RFU0MJCSJEZWZhdWx0IFNBQ0sgZnJlcXVlbmN5IgorI2RlZmlu
ZSBTQ1RQQ1RMX1NBQ0tfRlJFUV9NSU4JCTAKKyNkZWZpbmUgU0NUUENUTF9TQUNLX0ZSRVFfTUFY
CQkweEZGRkZGRkZGCisjZGVmaW5lIFNDVFBDVExfU0FDS19GUkVRX0RFRkFVTFQJU0NUUF9ERUZB
VUxUX1NBQ0tfRlJFUQorCisvKiBzeXNfcmVzb3VyY2U6IE1heCBudW1iZXIgb2YgY2FjaGVkIHJl
c291cmNlcyBpbiB0aGUgc3lzdGVtICovCisjZGVmaW5lIFNDVFBDVExfU1lTX1JFU09VUkNFX0RF
U0MJIk1heCBudW1iZXIgb2YgY2FjaGVkIHJlc291cmNlcyBpbiB0aGUgc3lzdGVtIgorI2RlZmlu
ZSBTQ1RQQ1RMX1NZU19SRVNPVVJDRV9NSU4JMAorI2RlZmluZSBTQ1RQQ1RMX1NZU19SRVNPVVJD
RV9NQVgJMHhGRkZGRkZGRgorI2RlZmluZSBTQ1RQQ1RMX1NZU19SRVNPVVJDRV9ERUZBVUxUCVND
VFBfREVGX1NZU1RFTV9SRVNDX0xJTUlUCisKKy8qIGFzb2NfcmVzb3VyY2U6IE1heCBudW1iZXIg
b2YgY2FjaGVkIHJlc291cmNlcyBpbiBhbiBhc29jICovCisjZGVmaW5lIFNDVFBDVExfQVNPQ19S
RVNPVVJDRV9ERVNDCSJNYXggbnVtYmVyIG9mIGNhY2hlZCByZXNvdXJjZXMgaW4gYW4gYXNvYyIK
KyNkZWZpbmUgU0NUUENUTF9BU09DX1JFU09VUkNFX01JTgkwCisjZGVmaW5lIFNDVFBDVExfQVNP
Q19SRVNPVVJDRV9NQVgJMHhGRkZGRkZGRgorI2RlZmluZSBTQ1RQQ1RMX0FTT0NfUkVTT1VSQ0Vf
REVGQVVMVAlTQ1RQX0RFRl9BU09DX1JFU0NfTElNSVQKKworLyogaGVhcnRiZWF0X2ludGVydmFs
OiBEZWZhdWx0IGhlYXJ0YmVhdCBpbnRlcnZhbCBpbiBtcyAqLworI2RlZmluZSBTQ1RQQ1RMX0hF
QVJUQkVBVF9JTlRFUlZBTF9ERVNDCSJEZWZhdWx0IGhlYXJ0YmVhdCBpbnRlcnZhbCBpbiBtcyIK
KyNkZWZpbmUgU0NUUENUTF9IRUFSVEJFQVRfSU5URVJWQUxfTUlOCTAKKyNkZWZpbmUgU0NUUENU
TF9IRUFSVEJFQVRfSU5URVJWQUxfTUFYCTB4RkZGRkZGRkYKKyNkZWZpbmUgU0NUUENUTF9IRUFS
VEJFQVRfSU5URVJWQUxfREVGQVVMVAlTQ1RQX0hCX0RFRkFVTFRfTVNFQworCisvKiBwbXR1X3Jh
aXNlX3RpbWU6IERlZmF1bHQgUE1UVSByYWlzZSB0aW1lciBpbiBzZWNvbmRzICovCisjZGVmaW5l
IFNDVFBDVExfUE1UVV9SQUlTRV9USU1FX0RFU0MJIkRlZmF1bHQgUE1UVSByYWlzZSB0aW1lciBp
biBzZWNvbmRzIgorI2RlZmluZSBTQ1RQQ1RMX1BNVFVfUkFJU0VfVElNRV9NSU4JMAorI2RlZmlu
ZSBTQ1RQQ1RMX1BNVFVfUkFJU0VfVElNRV9NQVgJMHhGRkZGRkZGRgorI2RlZmluZSBTQ1RQQ1RM
X1BNVFVfUkFJU0VfVElNRV9ERUZBVUxUCVNDVFBfREVGX1BNVFVfUkFJU0VfU0VDCisKKy8qIHNo
dXRkb3duX2d1YXJkX3RpbWU6IERlZmF1bHQgc2h1dGRvd24gZ3VhcmQgdGltZXIgaW4gc2Vjb25k
cyAqLworI2RlZmluZSBTQ1RQQ1RMX1NIVVRET1dOX0dVQVJEX1RJTUVfREVTQwkiU2h1dGRvd24g
Z3VhcmQgdGltZXIgaW4gc2Vjb25kcyAoMCBtZWFucyA1IHRpbWVzIFJUTy5NYXgpIgorI2RlZmlu
ZSBTQ1RQQ1RMX1NIVVRET1dOX0dVQVJEX1RJTUVfTUlOCQkwCisjZGVmaW5lIFNDVFBDVExfU0hV
VERPV05fR1VBUkRfVElNRV9NQVgJCTB4RkZGRkZGRkYKKyNkZWZpbmUgU0NUUENUTF9TSFVURE9X
Tl9HVUFSRF9USU1FX0RFRkFVTFQJMAorCisvKiBzZWNyZXRfbGlmZXRpbWU6IERlZmF1bHQgc2Vj
cmV0IGxpZmV0aW1lIGluIHNlY29uZHMgKi8KKyNkZWZpbmUgU0NUUENUTF9TRUNSRVRfTElGRVRJ
TUVfREVTQwkiRGVmYXVsdCBzZWNyZXQgbGlmZXRpbWUgaW4gc2Vjb25kcyIKKyNkZWZpbmUgU0NU
UENUTF9TRUNSRVRfTElGRVRJTUVfTUlOCTAKKyNkZWZpbmUgU0NUUENUTF9TRUNSRVRfTElGRVRJ
TUVfTUFYCTB4RkZGRkZGRkYKKyNkZWZpbmUgU0NUUENUTF9TRUNSRVRfTElGRVRJTUVfREVGQVVM
VAlTQ1RQX0RFRkFVTFRfU0VDUkVUX0xJRkVfU0VDCisKKy8qIHJ0b19tYXg6IERlZmF1bHQgbWF4
aW11bSByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGluIG1zICovCisjZGVmaW5lIFNDVFBDVExfUlRP
X01BWF9ERVNDCQkiRGVmYXVsdCBtYXhpbXVtIHJldHJhbnNtaXNzaW9uIHRpbWVvdXQgaW4gbXMi
CisjZGVmaW5lIFNDVFBDVExfUlRPX01BWF9NSU4JCTAKKyNkZWZpbmUgU0NUUENUTF9SVE9fTUFY
X01BWAkJMHhGRkZGRkZGRgorI2RlZmluZSBTQ1RQQ1RMX1JUT19NQVhfREVGQVVMVAkJU0NUUF9S
VE9fVVBQRVJfQk9VTkQKKworLyogcnRvX21pbjogRGVmYXVsdCBtaW5pbXVtIHJldHJhbnNtaXNz
aW9uIHRpbWVvdXQgaW4gbXMgKi8KKyNkZWZpbmUgU0NUUENUTF9SVE9fTUlOX0RFU0MJCSJEZWZh
dWx0IG1pbmltdW0gcmV0cmFuc21pc3Npb24gdGltZW91dCBpbiBtcyIKKyNkZWZpbmUgU0NUUENU
TF9SVE9fTUlOX01JTgkJMAorI2RlZmluZSBTQ1RQQ1RMX1JUT19NSU5fTUFYCQkweEZGRkZGRkZG
CisjZGVmaW5lIFNDVFBDVExfUlRPX01JTl9ERUZBVUxUCQlTQ1RQX1JUT19MT1dFUl9CT1VORAor
CisvKiBydG9faW5pdGlhbDogRGVmYXVsdCBpbml0aWFsIHJldHJhbnNtaXNzaW9uIHRpbWVvdXQg
aW4gbXMgKi8KKyNkZWZpbmUgU0NUUENUTF9SVE9fSU5JVElBTF9ERVNDCSJEZWZhdWx0IGluaXRp
YWwgcmV0cmFuc21pc3Npb24gdGltZW91dCBpbiBtcyIKKyNkZWZpbmUgU0NUUENUTF9SVE9fSU5J
VElBTF9NSU4JCTAKKyNkZWZpbmUgU0NUUENUTF9SVE9fSU5JVElBTF9NQVgJCTB4RkZGRkZGRkYK
KyNkZWZpbmUgU0NUUENUTF9SVE9fSU5JVElBTF9ERUZBVUxUCVNDVFBfUlRPX0lOSVRJQUwKKwor
LyogaW5pdF9ydG9fbWF4OiBEZWZhdWx0IG1heGltdW0gcmV0cmFuc21pc3Npb24gdGltZW91dCBk
dXJpbmcgYXNzb2NpYXRpb24gc2V0dXAgaW4gbXMgKi8KKyNkZWZpbmUgU0NUUENUTF9JTklUX1JU
T19NQVhfREVTQwkiRGVmYXVsdCBtYXhpbXVtIHJldHJhbnNtaXNzaW9uIHRpbWVvdXQgZHVyaW5n
IGFzc29jaWF0aW9uIHNldHVwIGluIG1zIgorI2RlZmluZSBTQ1RQQ1RMX0lOSVRfUlRPX01BWF9N
SU4JMAorI2RlZmluZSBTQ1RQQ1RMX0lOSVRfUlRPX01BWF9NQVgJMHhGRkZGRkZGRgorI2RlZmlu
ZSBTQ1RQQ1RMX0lOSVRfUlRPX01BWF9ERUZBVUxUCVNDVFBfUlRPX1VQUEVSX0JPVU5ECisKKy8q
IHZhbGlkX2Nvb2tpZV9saWZlOiBEZWZhdWx0IGNvb2tpZSBsaWZldGltZSBpbiBtcyAqLworI2Rl
ZmluZSBTQ1RQQ1RMX1ZBTElEX0NPT0tJRV9MSUZFX0RFU0MJCSJEZWZhdWx0IGNvb2tpZSBsaWZl
dGltZSBpbiBtcyIKKyNkZWZpbmUgU0NUUENUTF9WQUxJRF9DT09LSUVfTElGRV9NSU4JCVNDVFBf
TUlOX0NPT0tJRV9MSUZFCisjZGVmaW5lIFNDVFBDVExfVkFMSURfQ09PS0lFX0xJRkVfTUFYCQlT
Q1RQX01BWF9DT09LSUVfTElGRQorI2RlZmluZSBTQ1RQQ1RMX1ZBTElEX0NPT0tJRV9MSUZFX0RF
RkFVTFQJU0NUUF9ERUZBVUxUX0NPT0tJRV9MSUZFCisKKy8qIGluaXRfcnR4X21heDogRGVmYXVs
dCBtYXhpbXVtIG51bWJlciBvZiByZXRyYW5zbWlzc2lvbiBmb3IgSU5JVCBjaHVua3MgKi8KKyNk
ZWZpbmUgU0NUUENUTF9JTklUX1JUWF9NQVhfREVTQwkiRGVmYXVsdCBtYXhpbXVtIG51bWJlciBv
ZiByZXRyYW5zbWlzc2lvbnMgZm9yIElOSVQgY2h1bmtzIgorI2RlZmluZSBTQ1RQQ1RMX0lOSVRf
UlRYX01BWF9NSU4JMAorI2RlZmluZSBTQ1RQQ1RMX0lOSVRfUlRYX01BWF9NQVgJMHhGRkZGRkZG
RgorI2RlZmluZSBTQ1RQQ1RMX0lOSVRfUlRYX01BWF9ERUZBVUxUCVNDVFBfREVGX01BWF9JTklU
CisKKy8qIGFzc29jX3J0eF9tYXg6IERlZmF1bHQgbWF4aW11bSBudW1iZXIgb2YgcmV0cmFuc21p
c3Npb25zIHBlciBhc3NvY2lhdGlvbiAqLworI2RlZmluZSBTQ1RQQ1RMX0FTU09DX1JUWF9NQVhf
REVTQwkiRGVmYXVsdCBtYXhpbXVtIG51bWJlciBvZiByZXRyYW5zbWlzc2lvbnMgcGVyIGFzc29j
aWF0aW9uIgorI2RlZmluZSBTQ1RQQ1RMX0FTU09DX1JUWF9NQVhfTUlOCTAKKyNkZWZpbmUgU0NU
UENUTF9BU1NPQ19SVFhfTUFYX01BWAkweEZGRkZGRkZGCisjZGVmaW5lIFNDVFBDVExfQVNTT0Nf
UlRYX01BWF9ERUZBVUxUCVNDVFBfREVGX01BWF9TRU5ECisKKy8qIHBhdGhfcnR4X21heDogRGVm
YXVsdCBtYXhpbXVtIG9mIHJldHJhbnNtaXNzaW9ucyBwZXIgcGF0aCAqLworI2RlZmluZSBTQ1RQ
Q1RMX1BBVEhfUlRYX01BWF9ERVNDCSJEZWZhdWx0IG1heGltdW0gb2YgcmV0cmFuc21pc3Npb25z
IHBlciBwYXRoIgorI2RlZmluZSBTQ1RQQ1RMX1BBVEhfUlRYX01BWF9NSU4JMAorI2RlZmluZSBT
Q1RQQ1RMX1BBVEhfUlRYX01BWF9NQVgJMHhGRkZGRkZGRgorI2RlZmluZSBTQ1RQQ1RMX1BBVEhf
UlRYX01BWF9ERUZBVUxUCVNDVFBfREVGX01BWF9QQVRIX1JUWAorCisvKiBwYXRoX3BmX3RocmVz
aG9sZDogdGhyZXNob2xkIGZvciBjb25zaWRlcmluZyB0aGUgcGF0aCBwb3RlbnRpYWxseSBmYWls
ZWQgKi8KKyNkZWZpbmUgU0NUUENUTF9QQVRIX1BGX1RIUkVTSE9MRF9ERVNDCQkiRGVmYXVsdCBw
b3RlbnRpYWxseSBmYWlsZWQgdGhyZXNob2xkIgorI2RlZmluZSBTQ1RQQ1RMX1BBVEhfUEZfVEhS
RVNIT0xEX01JTgkJMAorI2RlZmluZSBTQ1RQQ1RMX1BBVEhfUEZfVEhSRVNIT0xEX01BWAkJMHhG
RkZGCisjZGVmaW5lIFNDVFBDVExfUEFUSF9QRl9USFJFU0hPTERfREVGQVVMVAlTQ1RQQ1RMX1BB
VEhfUEZfVEhSRVNIT0xEX01BWAorCisvKiBhZGRfbW9yZV9vbl9vdXRwdXQ6IFdoZW4gc3BhY2Ut
d2lzZSBpcyBpdCB3b3J0aHdoaWxlIHRvIHRyeSB0byBhZGQgbW9yZSB0byBhIHNvY2tldCBzZW5k
IGJ1ZmZlciAqLworI2RlZmluZSBTQ1RQQ1RMX0FERF9NT1JFX09OX09VVFBVVF9ERVNDCSJXaGVu
IHNwYWNlLXdpc2UgaXMgaXQgd29ydGh3aGlsZSB0byB0cnkgdG8gYWRkIG1vcmUgdG8gYSBzb2Nr
ZXQgc2VuZCBidWZmZXIiCisjZGVmaW5lIFNDVFBDVExfQUREX01PUkVfT05fT1VUUFVUX01JTgkw
CisjZGVmaW5lIFNDVFBDVExfQUREX01PUkVfT05fT1VUUFVUX01BWAkweEZGRkZGRkZGCisjZGVm
aW5lIFNDVFBDVExfQUREX01PUkVfT05fT1VUUFVUX0RFRkFVTFQgU0NUUF9ERUZBVUxUX0FERF9N
T1JFCisKKy8qIGluY29taW5nX3N0cmVhbXM6IERlZmF1bHQgbnVtYmVyIG9mIGluY29taW5nIHN0
cmVhbXMgKi8KKyNkZWZpbmUgU0NUUENUTF9JTkNPTUlOR19TVFJFQU1TX0RFU0MJIkRlZmF1bHQg
bnVtYmVyIG9mIGluY29taW5nIHN0cmVhbXMiCisjZGVmaW5lIFNDVFBDVExfSU5DT01JTkdfU1RS
RUFNU19NSU4JMQorI2RlZmluZSBTQ1RQQ1RMX0lOQ09NSU5HX1NUUkVBTVNfTUFYCTY1NTM1Cisj
ZGVmaW5lIFNDVFBDVExfSU5DT01JTkdfU1RSRUFNU19ERUZBVUxUIFNDVFBfSVNUUkVBTV9JTklU
SUFMCisKKy8qIG91dGdvaW5nX3N0cmVhbXM6IERlZmF1bHQgbnVtYmVyIG9mIG91dGdvaW5nIHN0
cmVhbXMgKi8KKyNkZWZpbmUgU0NUUENUTF9PVVRHT0lOR19TVFJFQU1TX0RFU0MJIkRlZmF1bHQg
bnVtYmVyIG9mIG91dGdvaW5nIHN0cmVhbXMiCisjZGVmaW5lIFNDVFBDVExfT1VUR09JTkdfU1RS
RUFNU19NSU4JMQorI2RlZmluZSBTQ1RQQ1RMX09VVEdPSU5HX1NUUkVBTVNfTUFYCTY1NTM1Cisj
ZGVmaW5lIFNDVFBDVExfT1VUR09JTkdfU1RSRUFNU19ERUZBVUxUIFNDVFBfT1NUUkVBTV9JTklU
SUFMCisKKy8qIGNtdF9vbl9vZmY6IENNVCBvbi9vZmYgZmxhZyAqLworI2RlZmluZSBTQ1RQQ1RM
X0NNVF9PTl9PRkZfREVTQwkJIkNNVCBzZXR0aW5ncyIKKyNkZWZpbmUgU0NUUENUTF9DTVRfT05f
T0ZGX01JTgkJU0NUUF9DTVRfT0ZGCisjZGVmaW5lIFNDVFBDVExfQ01UX09OX09GRl9NQVgJCVND
VFBfQ01UX01BWAorI2RlZmluZSBTQ1RQQ1RMX0NNVF9PTl9PRkZfREVGQVVMVAlTQ1RQX0NNVF9P
RkYKKworLyogY210X3VzZV9kYWM6IENNVCBEQUMgb24vb2ZmIGZsYWcgKi8KKyNkZWZpbmUgU0NU
UENUTF9DTVRfVVNFX0RBQ19ERVNDCSJDTVQgREFDIG9uL29mZiBmbGFnIgorI2RlZmluZSBTQ1RQ
Q1RMX0NNVF9VU0VfREFDX01JTgkJMAorI2RlZmluZSBTQ1RQQ1RMX0NNVF9VU0VfREFDX01BWAkJ
MQorI2RlZmluZSBTQ1RQQ1RMX0NNVF9VU0VfREFDX0RFRkFVTFQgICAgCTAKKworLyogY3duZF9t
YXhidXJzdDogVXNlIGEgQ1dORCBhZGp1c3RpbmcgdG8gaW1wbGVtZW50IG1heGJ1cnN0ICovCisj
ZGVmaW5lIFNDVFBDVExfQ1dORF9NQVhCVVJTVF9ERVNDCSJBZGp1c3QgY29uZ2VzdGlvbiBjb250
cm9sIHdpbmRvdyB0byBsaW1pdCBtYXhpbXVtIGJ1cnN0IHdoZW4gc2VuZGluZyIKKyNkZWZpbmUg
U0NUUENUTF9DV05EX01BWEJVUlNUX01JTgkwCisjZGVmaW5lIFNDVFBDVExfQ1dORF9NQVhCVVJT
VF9NQVgJMQorI2RlZmluZSBTQ1RQQ1RMX0NXTkRfTUFYQlVSU1RfREVGQVVMVAkxCisKKy8qIG5h
dF9mcmllbmRseTogU0NUUCBOQVQgZnJpZW5kbHkgb3BlcmF0aW9uICovCisjZGVmaW5lIFNDVFBD
VExfTkFUX0ZSSUVORExZX0RFU0MJIlNDVFAgTkFUIGZyaWVuZGx5IG9wZXJhdGlvbiIKKyNkZWZp
bmUgU0NUUENUTF9OQVRfRlJJRU5ETFlfTUlOCTAKKyNkZWZpbmUgU0NUUENUTF9OQVRfRlJJRU5E
TFlfTUFYCTEKKyNkZWZpbmUgU0NUUENUTF9OQVRfRlJJRU5ETFlfREVGQVVMVAkxCisKKy8qIGFi
Y19sX3ZhcjogU0NUUCBBQkMgbWF4IGluY3JlYXNlIHBlciBTQUNLIChMKSAqLworI2RlZmluZSBT
Q1RQQ1RMX0FCQ19MX1ZBUl9ERVNDCQkiU0NUUCBBQkMgbWF4IGluY3JlYXNlIHBlciBTQUNLIChM
KSIKKyNkZWZpbmUgU0NUUENUTF9BQkNfTF9WQVJfTUlOCQkwCisjZGVmaW5lIFNDVFBDVExfQUJD
X0xfVkFSX01BWAkJMHhGRkZGRkZGRgorI2RlZmluZSBTQ1RQQ1RMX0FCQ19MX1ZBUl9ERUZBVUxU
CTIKKworLyogbWF4X2NoYWluZWRfbWJ1ZnM6IERlZmF1bHQgbWF4IG51bWJlciBvZiBzbWFsbCBt
YnVmcyBvbiBhIGNoYWluICovCisjZGVmaW5lIFNDVFBDVExfTUFYX0NIQUlORURfTUJVRlNfREVT
QwkiRGVmYXVsdCBtYXggbnVtYmVyIG9mIHNtYWxsIG1idWZzIG9uIGEgY2hhaW4iCisjZGVmaW5l
IFNDVFBDVExfTUFYX0NIQUlORURfTUJVRlNfTUlOCTAKKyNkZWZpbmUgU0NUUENUTF9NQVhfQ0hB
SU5FRF9NQlVGU19NQVgJMHhGRkZGRkZGRgorI2RlZmluZSBTQ1RQQ1RMX01BWF9DSEFJTkVEX01C
VUZTX0RFRkFVTFQJU0NUUF9ERUZBVUxUX01CVUZTX0lOX0NIQUlOCisKKy8qIGRvX3NjdHBfZHJh
aW46IFNob3VsZCBTQ1RQIHJlc3BvbmQgdG8gdGhlIGRyYWluIGNhbGxzICovCisjZGVmaW5lIFND
VFBDVExfRE9fU0NUUF9EUkFJTl9ERVNDCSJTaG91bGQgU0NUUCByZXNwb25kIHRvIHRoZSBkcmFp
biBjYWxscyIKKyNkZWZpbmUgU0NUUENUTF9ET19TQ1RQX0RSQUlOX01JTgkwCisjZGVmaW5lIFND
VFBDVExfRE9fU0NUUF9EUkFJTl9NQVgJMQorI2RlZmluZSBTQ1RQQ1RMX0RPX1NDVFBfRFJBSU5f
REVGQVVMVAkxCisKKy8qIGhiX21heF9idXJzdDogQ29uZmlybWF0aW9uIEhlYXJ0YmVhdCBtYXgg
YnVyc3Q/ICovCisjZGVmaW5lIFNDVFBDVExfSEJfTUFYX0JVUlNUX0RFU0MJIkNvbmZpcm1hdGlv
biBIZWFydGJlYXQgbWF4IGJ1cnN0IgorI2RlZmluZSBTQ1RQQ1RMX0hCX01BWF9CVVJTVF9NSU4J
MQorI2RlZmluZSBTQ1RQQ1RMX0hCX01BWF9CVVJTVF9NQVgJMHhGRkZGRkZGRgorI2RlZmluZSBT
Q1RQQ1RMX0hCX01BWF9CVVJTVF9ERUZBVUxUCVNDVFBfREVGX0hCTUFYX0JVUlNUCisKKy8qIGFi
b3J0X2F0X2xpbWl0OiBXaGVuIG9uZS0yLW9uZSBoaXRzIHFsaW1pdCBhYm9ydCAqLworI2RlZmlu
ZSBTQ1RQQ1RMX0FCT1JUX0FUX0xJTUlUX0RFU0MJIkFib3J0IHdoZW4gb25lLXRvLW9uZSBoaXRz
IHFsaW1pdCIKKyNkZWZpbmUgU0NUUENUTF9BQk9SVF9BVF9MSU1JVF9NSU4JMAorI2RlZmluZSBT
Q1RQQ1RMX0FCT1JUX0FUX0xJTUlUX01BWAkxCisjZGVmaW5lIFNDVFBDVExfQUJPUlRfQVRfTElN
SVRfREVGQVVMVAkwCisKKy8qIG1pbl9yZXNpZHVhbDogbWluIHJlc2lkdWFsIGluIGEgZGF0YSBm
cmFnbWVudCBsZWZ0b3ZlciAqLworI2RlZmluZSBTQ1RQQ1RMX01JTl9SRVNJRFVBTF9ERVNDCSJN
aW5pbXVtIHJlc2lkdWFsIGRhdGEgY2h1bmsgaW4gc2Vjb25kIHBhcnQgb2Ygc3BsaXQiCisjZGVm
aW5lIFNDVFBDVExfTUlOX1JFU0lEVUFMX01JTgkyMAorI2RlZmluZSBTQ1RQQ1RMX01JTl9SRVNJ
RFVBTF9NQVgJNjU1MzUKKyNkZWZpbmUgU0NUUENUTF9NSU5fUkVTSURVQUxfREVGQVVMVAkxNDUy
CisKKy8qIG1heF9yZXRyYW5fY2h1bms6IG1heCBjaHVuayByZXRyYW5zbWlzc2lvbnMgKi8KKyNk
ZWZpbmUgU0NUUENUTF9NQVhfUkVUUkFOX0NIVU5LX0RFU0MJIk1heGltdW0gdGltZXMgYW4gdW5s
dWNreSBjaHVuayBjYW4gYmUgcmV0cmFuc21pdHRlZCBiZWZvcmUgYXNzb2MgYWJvcnQiCisjZGVm
aW5lIFNDVFBDVExfTUFYX1JFVFJBTl9DSFVOS19NSU4JMAorI2RlZmluZSBTQ1RQQ1RMX01BWF9S
RVRSQU5fQ0hVTktfTUFYCTY1NTM1CisjZGVmaW5lIFNDVFBDVExfTUFYX1JFVFJBTl9DSFVOS19E
RUZBVUxUCTMwCisKKy8qIHNjdHBfbG9nZ2luZzogVGhpcyBnaXZlcyB1cyBsb2dnaW5nIHdoZW4g
dGhlIG9wdGlvbnMgYXJlIGVuYWJsZWQgKi8KKyNkZWZpbmUgU0NUUENUTF9MT0dHSU5HX0xFVkVM
X0RFU0MJIkx0cmFjZS9LVFIgdHJhY2UgbG9nZ2luZyBsZXZlbCIKKyNkZWZpbmUgU0NUUENUTF9M
T0dHSU5HX0xFVkVMX01JTgkwCisjZGVmaW5lIFNDVFBDVExfTE9HR0lOR19MRVZFTF9NQVgJMHhm
ZmZmZmZmZgorI2RlZmluZSBTQ1RQQ1RMX0xPR0dJTkdfTEVWRUxfREVGQVVMVAkwCisKKy8qIEpS
UyAtIGRlZmF1bHQgY29uZ2VzdGlvbiBjb250cm9sIG1vZHVsZSBzeXNjdGwgKi8KKyNkZWZpbmUg
U0NUUENUTF9ERUZBVUxUX0NDX01PRFVMRV9ERVNDCQkiRGVmYXVsdCBjb25nZXN0aW9uIGNvbnRy
b2wgbW9kdWxlIgorI2RlZmluZSBTQ1RQQ1RMX0RFRkFVTFRfQ0NfTU9EVUxFX01JTgkJMAorI2Rl
ZmluZSBTQ1RQQ1RMX0RFRkFVTFRfQ0NfTU9EVUxFX01BWAkJMgorI2RlZmluZSBTQ1RQQ1RMX0RF
RkFVTFRfQ0NfTU9EVUxFX0RFRkFVTFQJMAorCisvKiBSUyAtIGRlZmF1bHQgc3RyZWFtIHNjaGVk
dWxpbmcgbW9kdWxlIHN5c2N0bCAqLworI2RlZmluZSBTQ1RQQ1RMX0RFRkFVTFRfU1NfTU9EVUxF
X0RFU0MJCSJEZWZhdWx0IHN0cmVhbSBzY2hlZHVsaW5nIG1vZHVsZSIKKyNkZWZpbmUgU0NUUENU
TF9ERUZBVUxUX1NTX01PRFVMRV9NSU4JCTAKKyNkZWZpbmUgU0NUUENUTF9ERUZBVUxUX1NTX01P
RFVMRV9NQVgJCTUKKyNkZWZpbmUgU0NUUENUTF9ERUZBVUxUX1NTX01PRFVMRV9ERUZBVUxUCTAK
KworLyogUlJTIC0gZGVmYXVsdCBmcmFnbWVudCBpbnRlcmxlYXZlICovCisjZGVmaW5lIFNDVFBD
VExfREVGQVVMVF9GUkFHX0lOVEVSTEVBVkVfREVTQwkiRGVmYXVsdCBmcmFnbWVudCBpbnRlcmxl
YXZlIGxldmVsIgorI2RlZmluZSBTQ1RQQ1RMX0RFRkFVTFRfRlJBR19JTlRFUkxFQVZFX01JTgkw
CisjZGVmaW5lIFNDVFBDVExfREVGQVVMVF9GUkFHX0lOVEVSTEVBVkVfTUFYCTIKKyNkZWZpbmUg
U0NUUENUTF9ERUZBVUxUX0ZSQUdfSU5URVJMRUFWRV9ERUZBVUxUCTEKKworLyogbW9iaWxpdHlf
YmFzZTogRW5hYmxlIFNDVFAgbW9iaWxpdHkgc3VwcG9ydCAqLworI2RlZmluZSBTQ1RQQ1RMX01P
QklMSVRZX0JBU0VfREVTQwkiRW5hYmxlIFNDVFAgYmFzZSBtb2JpbGl0eSIKKyNkZWZpbmUgU0NU
UENUTF9NT0JJTElUWV9CQVNFX01JTgkwCisjZGVmaW5lIFNDVFBDVExfTU9CSUxJVFlfQkFTRV9N
QVgJMQorI2RlZmluZSBTQ1RQQ1RMX01PQklMSVRZX0JBU0VfREVGQVVMVAkwCisKKy8qIG1vYmls
aXR5X2Zhc3RoYW5kb2ZmOiBFbmFibGUgU0NUUCBmYXN0IGhhbmRvZmYgc3VwcG9ydCAqLworI2Rl
ZmluZSBTQ1RQQ1RMX01PQklMSVRZX0ZBU1RIQU5ET0ZGX0RFU0MJIkVuYWJsZSBTQ1RQIGZhc3Qg
aGFuZG9mZiIKKyNkZWZpbmUgU0NUUENUTF9NT0JJTElUWV9GQVNUSEFORE9GRl9NSU4JMAorI2Rl
ZmluZSBTQ1RQQ1RMX01PQklMSVRZX0ZBU1RIQU5ET0ZGX01BWAkxCisjZGVmaW5lIFNDVFBDVExf
TU9CSUxJVFlfRkFTVEhBTkRPRkZfREVGQVVMVAkwCisKKy8qIEVuYWJsZSBTQ1RQL1VEUCB0dW5u
ZWxpbmcgcG9ydCAqLworI2RlZmluZSBTQ1RQQ1RMX1VEUF9UVU5ORUxJTkdfUE9SVF9ERVNDCQki
U2V0IHRoZSBTQ1RQL1VEUCB0dW5uZWxpbmcgcG9ydCIKKyNkZWZpbmUgU0NUUENUTF9VRFBfVFVO
TkVMSU5HX1BPUlRfTUlOCQkwCisjZGVmaW5lIFNDVFBDVExfVURQX1RVTk5FTElOR19QT1JUX01B
WAkJNjU1MzUKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorI2RlZmluZSBTQ1RQQ1RMX1VEUF9UVU5ORUxJTkdfUE9SVF9ERUZBVUxUCTAKKyNlbHNl
CisjZGVmaW5lIFNDVFBDVExfVURQX1RVTk5FTElOR19QT1JUX0RFRkFVTFQJU0NUUF9PVkVSX1VE
UF9UVU5ORUxJTkdfUE9SVAorI2VuZGlmCisKKy8qIEVuYWJsZSBzZW5kaW5nIG9mIHRoZSBTQUNL
LUlNTUVESUFURUxZIGJpdCAqLworI2RlZmluZSBTQ1RQQ1RMX1NBQ0tfSU1NRURJQVRFTFlfRU5B
QkxFX0RFU0MJIkVuYWJsZSBzZW5kaW5nIG9mIHRoZSBTQUNLLUlNTUVESUFURUxZLWJpdCIKKyNk
ZWZpbmUgU0NUUENUTF9TQUNLX0lNTUVESUFURUxZX0VOQUJMRV9NSU4JMAorI2RlZmluZSBTQ1RQ
Q1RMX1NBQ0tfSU1NRURJQVRFTFlfRU5BQkxFX01BWAkxCisjZGVmaW5lIFNDVFBDVExfU0FDS19J
TU1FRElBVEVMWV9FTkFCTEVfREVGQVVMVAlTQ1RQQ1RMX1NBQ0tfSU1NRURJQVRFTFlfRU5BQkxF
X01BWAorCisvKiBFbmFibGUgc2VuZGluZyBvZiB0aGUgTkFULUZSSUVORExZIG1lc3NhZ2UgKi8K
KyNkZWZpbmUgU0NUUENUTF9OQVRfRlJJRU5ETFlfSU5JVFNfREVTQwkiRW5hYmxlIHNlbmRpbmcg
b2YgdGhlIG5hdC1mcmllbmRseSBTQ1RQIG9wdGlvbiBvbiBJTklUcyIKKyNkZWZpbmUgU0NUUENU
TF9OQVRfRlJJRU5ETFlfSU5JVFNfTUlOCTAKKyNkZWZpbmUgU0NUUENUTF9OQVRfRlJJRU5ETFlf
SU5JVFNfTUFYCTEKKyNkZWZpbmUgU0NUUENUTF9OQVRfRlJJRU5ETFlfSU5JVFNfREVGQVVMVAlT
Q1RQQ1RMX05BVF9GUklFTkRMWV9JTklUU19NSU4KKworLyogVnRhZyB0aW1lIHdhaXQgaW4gc2Vj
b25kcyAqLworI2RlZmluZSBTQ1RQQ1RMX1RJTUVfV0FJVF9ERVNDCSJWdGFnIHRpbWUgd2FpdCB0
aW1lIGluIHNlY29uZHMsIDAgZGlzYWJsZXMgaXQiCisjZGVmaW5lIFNDVFBDVExfVElNRV9XQUlU
X01JTgkwCisjZGVmaW5lIFNDVFBDVExfVElNRV9XQUlUX01BWAkweGZmZmZmZmZmCisjZGVmaW5l
IFNDVFBDVExfVElNRV9XQUlUX0RFRkFVTFQJU0NUUF9USU1FX1dBSVQKKworLyogRW5hYmxlIFNl
bmQvUmVjZWl2ZSBidWZmZXIgc3BsaXR0aW5nICovCisjZGVmaW5lIFNDVFBDVExfQlVGRkVSX1NQ
TElUVElOR19ERVNDCQkiRW5hYmxlIHNlbmQvcmVjZWl2ZSBidWZmZXIgc3BsaXR0aW5nIgorI2Rl
ZmluZSBTQ1RQQ1RMX0JVRkZFUl9TUExJVFRJTkdfTUlOCQkwCisjZGVmaW5lIFNDVFBDVExfQlVG
RkVSX1NQTElUVElOR19NQVgJCTB4MworI2RlZmluZSBTQ1RQQ1RMX0JVRkZFUl9TUExJVFRJTkdf
REVGQVVMVAlTQ1RQQ1RMX0JVRkZFUl9TUExJVFRJTkdfTUlOCisKKy8qIEluaXRpYWwgY29uZ2Vz
dGlvbiB3aW5kb3cgaW4gTVRVcyAqLworI2RlZmluZSBTQ1RQQ1RMX0lOSVRJQUxfQ1dORF9ERVND
CSJEZWZpbmVzIHRoZSBpbml0aWFsIGNvbmdlc3Rpb24gd2luZG93IHNpemUgaW4gTVRVcyIKKyNk
ZWZpbmUgU0NUUENUTF9JTklUSUFMX0NXTkRfTUlOCTAKKyNkZWZpbmUgU0NUUENUTF9JTklUSUFM
X0NXTkRfTUFYCTB4ZmZmZmZmZmYKKyNkZWZpbmUgU0NUUENUTF9JTklUSUFMX0NXTkRfREVGQVVM
VAkzCisKKy8qIHJ0dHZhciBzbW9vdGggYXZnIGZvciBidyBjYWxjICAqLworI2RlZmluZSBTQ1RQ
Q1RMX1JUVFZBUl9CV19ERVNDCSJTaGlmdCBhbW91bnQgRENDQyB1c2VzIGZvciBidyBzbW9vdGhp
bmcgb24gcnR0IGNhbGMiCisjZGVmaW5lIFNDVFBDVExfUlRUVkFSX0JXX01JTgkwCisjZGVmaW5l
IFNDVFBDVExfUlRUVkFSX0JXX01BWAkzMgorI2RlZmluZSBTQ1RQQ1RMX1JUVFZBUl9CV19ERUZB
VUxUCTQKKworLyogcnR0dmFyIHNtb290aCBhdmcgZm9yIGJ3IGNhbGMgICovCisjZGVmaW5lIFND
VFBDVExfUlRUVkFSX1JUVF9ERVNDCSJTaGlmdCBhbW91bnQgRENDQyB1c2VzIGZvciBydHQgc21v
b3RoaW5nIG9uIHJ0dCBjYWxjIgorI2RlZmluZSBTQ1RQQ1RMX1JUVFZBUl9SVFRfTUlOCTAKKyNk
ZWZpbmUgU0NUUENUTF9SVFRWQVJfUlRUX01BWAkzMgorI2RlZmluZSBTQ1RQQ1RMX1JUVFZBUl9S
VFRfREVGQVVMVAk1CisKKyNkZWZpbmUgU0NUUENUTF9SVFRWQVJfRVFSRVRfREVTQwkiV2hldGhl
ciBEQ0NDIGluY3JlYXNlcyBjd25kIHdoZW4gdGhlIHJ0dCBhbmQgYncgYXJlIHVuY2hhbmdlZCIK
KyNkZWZpbmUgU0NUUENUTF9SVFRWQVJfRVFSRVRfTUlOCTAKKyNkZWZpbmUgU0NUUENUTF9SVFRW
QVJfRVFSRVRfTUFYCTEKKyNkZWZpbmUgU0NUUENUTF9SVFRWQVJfRVFSRVRfREVGQVVMVAkwCisK
KyNkZWZpbmUgU0NUUENUTF9SVFRWQVJfU1RFQURZU19ERVNDCSJOdW1iZXIgb2YgaWRlbnRpY2Fs
IGJ3IG1lYXN1cmVtZW50cyBEQ0NDIHRha2VzIHRvIHRyeSBzdGVwIGRvd24gb2YgY3duZCIKKyNk
ZWZpbmUgU0NUUENUTF9SVFRWQVJfU1RFQURZU19NSU4JMAorI2RlZmluZSBTQ1RQQ1RMX1JUVFZB
Ul9TVEVBRFlTX01BWAkweEZGRkYKKyNkZWZpbmUgU0NUUENUTF9SVFRWQVJfU1RFQURZU19ERUZB
VUxUCTIwIC8qIDAgbWVhbnMgZGlzYWJsZSBmZWF0dXJlICovCisKKyNkZWZpbmUgU0NUUENUTF9S
VFRWQVJfRENDQ0VDTl9ERVNDCSJFbmFibGUgRUNOIGZvciBEQ0NDLiIKKyNkZWZpbmUgU0NUUENU
TF9SVFRWQVJfRENDQ0VDTl9NSU4JMAorI2RlZmluZSBTQ1RQQ1RMX1JUVFZBUl9EQ0NDRUNOX01B
WAkxCisjZGVmaW5lIFNDVFBDVExfUlRUVkFSX0RDQ0NFQ05fREVGQVVMVAkxIC8qIDAgbWVhbnMg
ZGlzYWJsZSBmZWF0dXJlICovCisKKyNkZWZpbmUgU0NUUENUTF9CTEFDS0hPTEVfREVTQwkJIkVu
YWJsZSBTQ1RQIGJsYWNraG9saW5nLCBzZWUgYmxhY2tob2xlKDQpIGZvciBtb3JlIGRldGFpbHMi
CisjZGVmaW5lIFNDVFBDVExfQkxBQ0tIT0xFX01JTgkJMAorI2RlZmluZSBTQ1RQQ1RMX0JMQUNL
SE9MRV9NQVgJCTIKKyNkZWZpbmUgU0NUUENUTF9CTEFDS0hPTEVfREVGQVVMVAlTQ1RQQ1RMX0JM
QUNLSE9MRV9NSU4KKworLyogc2VuZGFsbF9saW1pdDogTWF4aW11bSBtZXNzYWdlIHdpdGggU0NU
UF9TRU5EQUxMICovCisjZGVmaW5lIFNDVFBDVExfU0VOREFMTF9MSU1JVF9ERVNDCSJNYXhpbXVt
IHNpemUgb2YgYSBtZXNzYWdlIHNlbmQgd2l0aCBTQ1RQX1NFTkRBTEwiCisjZGVmaW5lIFNDVFBD
VExfU0VOREFMTF9MSU1JVF9NSU4JMAorI2RlZmluZSBTQ1RQQ1RMX1NFTkRBTExfTElNSVRfTUFY
CTB4RkZGRkZGRkYKKyNkZWZpbmUgU0NUUENUTF9TRU5EQUxMX0xJTUlUX0RFRkFVTFQJMTQzMgor
CisjZGVmaW5lIFNDVFBDVExfRElBR19JTkZPX0NPREVfREVTQwkiRGlhZ25vc3RpYyBpbmZvcm1h
dGlvbiBlcnJvciBjYXVzZSBjb2RlIgorI2RlZmluZSBTQ1RQQ1RMX0RJQUdfSU5GT19DT0RFX01J
TgkwCisjZGVmaW5lIFNDVFBDVExfRElBR19JTkZPX0NPREVfTUFYCTY1NTM1CisjZGVmaW5lIFND
VFBDVExfRElBR19JTkZPX0NPREVfREVGQVVMVAkwCisKKyNpZiBkZWZpbmVkKFNDVFBfREVCVUcp
CisvKiBkZWJ1ZzogQ29uZmlndXJlIGRlYnVnIG91dHB1dCAqLworI2RlZmluZSBTQ1RQQ1RMX0RF
QlVHX0RFU0MJIkNvbmZpZ3VyZSBkZWJ1ZyBvdXRwdXQiCisjZGVmaW5lIFNDVFBDVExfREVCVUdf
TUlOCTAKKyNkZWZpbmUgU0NUUENUTF9ERUJVR19NQVgJMHhGRkZGRkZGRgorI2RlZmluZSBTQ1RQ
Q1RMX0RFQlVHX0RFRkFVTFQJMAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYg
IWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNkZWZpbmUgU0NUUENUTF9NQUlOX1RJTUVSX0RFU0MJ
CSJNYWluIHRpbWVyIGludGVydmFsIGluIG1zIgorI2RlZmluZSBTQ1RQQ1RMX01BSU5fVElNRVJf
TUlOCQkxCisjZGVmaW5lIFNDVFBDVExfTUFJTl9USU1FUl9NQVgJCTB4RkZGRkZGRkYKKyNkZWZp
bmUgU0NUUENUTF9NQUlOX1RJTUVSX0RFRkFVTFQJMTAKKworI2RlZmluZSBTQ1RQQ1RMX0lHTk9S
RV9WTVdBUkVfSU5URVJGQUNFU19ERVNDCQkiSWdub3JlIFZNd2FyZSBJbnRlcmZhY2VzIgorI2Rl
ZmluZSBTQ1RQQ1RMX0lHTk9SRV9WTVdBUkVfSU5URVJGQUNFU19NSU4JCTAKKyNkZWZpbmUgU0NU
UENUTF9JR05PUkVfVk1XQVJFX0lOVEVSRkFDRVNfTUFYCQkxCisjZGVmaW5lIFNDVFBDVExfSUdO
T1JFX1ZNV0FSRV9JTlRFUkZBQ0VTX0RFRkFVTFQJU0NUUENUTF9JR05PUkVfVk1XQVJFX0lOVEVS
RkFDRVNfTUFYCisKKyNkZWZpbmUgU0NUUENUTF9PVVRQVVRfVU5MT0NLRURfREVTQwkiVW5sb2Nr
IHNvY2tldCB3aGVuIHNlbmRpbmcgcGFja2V0cyBkb3duIHRvIElQIgorI2RlZmluZSBTQ1RQQ1RM
X09VVFBVVF9VTkxPQ0tFRF9NSU4JMAorI2RlZmluZSBTQ1RQQ1RMX09VVFBVVF9VTkxPQ0tFRF9N
QVgJMQorI2RlZmluZSBTQ1RQQ1RMX09VVFBVVF9VTkxPQ0tFRF9ERUZBVUxUCVNDVFBDVExfT1VU
UFVUX1VOTE9DS0VEX01JTgorCisjZGVmaW5lCVNDVFBDVExfQUREUl9XQVRDSERPR19MSU1JVF9E
RVNDCSJBZGRyZXNzIHdhdGNoZG9nIGxpbWl0IgorI2RlZmluZQlTQ1RQQ1RMX0FERFJfV0FUQ0hE
T0dfTElNSVRfTUlOCQkwCisjZGVmaW5lCVNDVFBDVExfQUREUl9XQVRDSERPR19MSU1JVF9NQVgJ
CTB4RkZGRkZGRkYKKyNkZWZpbmUJU0NUUENUTF9BRERSX1dBVENIRE9HX0xJTUlUX0RFRkFVTFQJ
U0NUUENUTF9BRERSX1dBVENIRE9HX0xJTUlUX01JTgorCisjZGVmaW5lCVNDVFBDVExfVlRBR19X
QVRDSERPR19MSU1JVF9ERVNDCSJWVGFnIHdhdGNoZG9nIGxpbWl0IgorI2RlZmluZQlTQ1RQQ1RM
X1ZUQUdfV0FUQ0hET0dfTElNSVRfTUlOCQkwCisjZGVmaW5lCVNDVFBDVExfVlRBR19XQVRDSERP
R19MSU1JVF9NQVgJCTB4RkZGRkZGRkYKKyNkZWZpbmUJU0NUUENUTF9WVEFHX1dBVENIRE9HX0xJ
TUlUX0RFRkFVTFQJU0NUUENUTF9WVEFHX1dBVENIRE9HX0xJTUlUX01JTgorCisjZW5kaWYKKyNp
ZiBkZWZpbmVkKF9LRVJORUwpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorI2lmIGRlZmluZWQoU1lTQ1RMX0RFQ0wpCitTWVNDVExfREVDTChfbmV0X2luZXRfc2N0
cCk7CisjZW5kaWYKKyNlbmRpZgorCit2b2lkIHNjdHBfaW5pdF9zeXNjdGxzKHZvaWQpOworI2lm
IGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQordm9pZCBzY3RwX2Zp
bmlzaF9zeXNjdGxzKHZvaWQpOworI2VuZGlmCisKKyNlbmRpZiAvKiBfS0VSTkVMICovCisjZW5k
aWYgLyogX19zY3RwX3N5c2N0bF9oX18gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBs
aWIvbmV0aW5ldC9zY3RwX3RpbWVyLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0
cF90aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMC4uZjI0ODMw
NWUyN2M0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfdGltZXIuYwpAQCAtMCwwICsxLDE2NDEgQEAKKy8qLQorICogU1BEWC1MaWNlbnNlLUlkZW50
aWZpZXI6IEJTRC0zLUNsYXVzZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA3LCBieSBD
aXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMp
IDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICog
YSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisg
KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2Nv
IFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0Qk
Iik7CisjZW5kaWYKKworI2RlZmluZSBfSVBfVkhMCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29z
Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgorI2lmZGVmIElORVQ2CisjaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2luY2x1ZGUgPG5l
dGluZXQ2L3NjdHA2X3Zhci5oPgorI2VuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxuZXRpbmV0L3Nj
dHBfdmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5oPgorI2luY2x1ZGUgPG5l
dGluZXQvc2N0cF90aW1lci5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cHV0aWwuaD4KKyNpbmNs
dWRlIDxuZXRpbmV0L3NjdHBfb3V0cHV0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2hlYWRl
ci5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9pbmRhdGEuaD4KKyNpbmNsdWRlIDxuZXRpbmV0
L3NjdHBfYXNjb25mLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2lucHV0Lmg+CisjaW5jbHVk
ZSA8bmV0aW5ldC9zY3RwLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Vpby5oPgorI2lmIGRl
ZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKyNpZiAhKGRlZmluZWQoX1dJTjMyKSAmJiBk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pKQorI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+CisjZW5kaWYK
KyNlbmRpZgorCit2b2lkCitzY3RwX2F1ZGl0X3JldHJhbm1pc3Npb25fcXVldWUoc3RydWN0IHNj
dHBfYXNzb2NpYXRpb24gKmFzb2MpCit7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOwor
CisJU0NUUERCRyhTQ1RQX0RFQlVHX1RJTUVSNCwgIkF1ZGl0IGludm9rZWQgb24gc2VuZCBxdWV1
ZSBjbnQ6JWQgb25xdWV1ZTolZFxuIiwKKwkJCWFzb2MtPnNlbnRfcXVldWVfcmV0cmFuX2NudCwK
KwkJCWFzb2MtPnNlbnRfcXVldWVfY250KTsKKwlhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9jbnQg
PSAwOworCWFzb2MtPnNlbnRfcXVldWVfY250ID0gMDsKKwlUQUlMUV9GT1JFQUNIKGNoaywgJmFz
b2MtPnNlbnRfcXVldWUsIHNjdHBfbmV4dCkgeworCQlpZiAoY2hrLT5zZW50ID09IFNDVFBfREFU
QUdSQU1fUkVTRU5EKSB7CisJCQlzY3RwX3Vjb3VudF9pbmNyKGFzb2MtPnNlbnRfcXVldWVfcmV0
cmFuX2NudCk7CisJCX0KKwkJYXNvYy0+c2VudF9xdWV1ZV9jbnQrKzsKKwl9CisJVEFJTFFfRk9S
RUFDSChjaGssICZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsIHNjdHBfbmV4dCkgeworCQlpZiAo
Y2hrLT5zZW50ID09IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7CisJCQlzY3RwX3Vjb3VudF9pbmNy
KGFzb2MtPnNlbnRfcXVldWVfcmV0cmFuX2NudCk7CisJCX0KKwl9CisJVEFJTFFfRk9SRUFDSChj
aGssICZhc29jLT5hc2NvbmZfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJCWlmIChjaGstPnNl
bnQgPT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKKwkJCXNjdHBfdWNvdW50X2luY3IoYXNvYy0+
c2VudF9xdWV1ZV9yZXRyYW5fY250KTsKKwkJfQorCX0KKwlTQ1RQREJHKFNDVFBfREVCVUdfVElN
RVI0LCAiQXVkaXQgY29tcGxldGVzIHJldHJhbjolZCBvbnF1ZXVlOiVkXG4iLAorCQlhc29jLT5z
ZW50X3F1ZXVlX3JldHJhbl9jbnQsCisJCWFzb2MtPnNlbnRfcXVldWVfY250KTsKK30KKworc3Rh
dGljIGludAorc2N0cF90aHJlc2hvbGRfbWFuYWdlbWVudChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5w
LCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0LCB1aW50
MTZfdCB0aHJlc2hvbGQpCit7CisJaWYgKG5ldCkgeworCQluZXQtPmVycm9yX2NvdW50Kys7CisJ
CVNDVFBEQkcoU0NUUF9ERUJVR19USU1FUjQsICJFcnJvciBjb3VudCBmb3IgJXAgbm93ICVkIHRo
cmVzaDolZFxuIiwKKwkJCSh2b2lkICopbmV0LCBuZXQtPmVycm9yX2NvdW50LAorCQkJbmV0LT5m
YWlsdXJlX3RocmVzaG9sZCk7CisJCWlmIChuZXQtPmVycm9yX2NvdW50ID4gbmV0LT5mYWlsdXJl
X3RocmVzaG9sZCkgeworCQkJLyogV2UgaGFkIGEgdGhyZXNob2xkIGZhaWx1cmUgKi8KKwkJCWlm
IChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUkVBQ0hBQkxFKSB7CisJCQkJbmV0LT5kZXN0
X3N0YXRlICY9IH5TQ1RQX0FERFJfUkVBQ0hBQkxFOworCQkJCW5ldC0+ZGVzdF9zdGF0ZSAmPSB+
U0NUUF9BRERSX1JFUV9QUklNQVJZOworCQkJCW5ldC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9BRERS
X1BGOworCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9JTlRFUkZBQ0VfRE9XTiwKKwkJ
CQkgICAgc3RjYiwgMCwKKwkJCQkgICAgKHZvaWQgKiluZXQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7
CisJCQl9CisJCX0gZWxzZSBpZiAoKG5ldC0+cGZfdGhyZXNob2xkIDwgbmV0LT5mYWlsdXJlX3Ro
cmVzaG9sZCkgJiYKKwkJICAgICAgICAgICAobmV0LT5lcnJvcl9jb3VudCA+IG5ldC0+cGZfdGhy
ZXNob2xkKSkgeworCQkJaWYgKCEobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1BGKSkgewor
CQkJCW5ldC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQX0FERFJfUEY7CisJCQkJbmV0LT5sYXN0X2FjdGl2
ZSA9IHNjdHBfZ2V0X3RpY2tfY291bnQoKTsKKwkJCQlzY3RwX3NlbmRfaGIoc3RjYiwgbmV0LCBT
Q1RQX1NPX05PVF9MT0NLRUQpOworCQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVf
SEVBUlRCRUFULAorCQkJCSAgICAgICAgICAgICAgICBpbnAsIHN0Y2IsIG5ldCwKKwkJCQkgICAg
ICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfVElNRVIgKyBTQ1RQX0xPQ18xKTsKKwkJCQlzY3Rw
X3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIGlucCwgc3RjYiwgbmV0KTsK
KwkJCX0KKwkJfQorCX0KKwlpZiAoc3RjYiA9PSBOVUxMKQorCQlyZXR1cm4gKDApOworCisJaWYg
KG5ldCkgeworCQlpZiAoKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkg
PT0gMCkgeworCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFND
VFBfVEhSRVNIT0xEX0xPR0dJTkcpIHsKKwkJCQlzY3RwX21pc2NfaW50cyhTQ1RQX1RIUkVTSE9M
RF9JTkNSLAorCQkJCQkgICAgICAgc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50LAorCQkJ
CQkgICAgICAgKHN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCsxKSwKKwkJCQkJICAgICAg
IFNDVFBfRlJPTV9TQ1RQX1RJTUVSLAorCQkJCQkgICAgICAgX19MSU5FX18pOworCQkJfQorCQkJ
c3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50Kys7CisJCX0KKwl9IGVsc2UgeworCQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9USFJFU0hPTERfTE9H
R0lORykgeworCQkJc2N0cF9taXNjX2ludHMoU0NUUF9USFJFU0hPTERfSU5DUiwKKwkJCQkgICAg
ICAgc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50LAorCQkJCSAgICAgICAoc3RjYi0+YXNv
Yy5vdmVyYWxsX2Vycm9yX2NvdW50KzEpLAorCQkJCSAgICAgICBTQ1RQX0ZST01fU0NUUF9USU1F
UiwKKwkJCQkgICAgICAgX19MSU5FX18pOworCQl9CisJCXN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJv
cl9jb3VudCsrOworCX0KKwlTQ1RQREJHKFNDVFBfREVCVUdfVElNRVI0LCAiT3ZlcmFsbCBlcnJv
ciBjb3VudCBmb3IgJXAgbm93ICVkIHRocmVzaDoldSBzdGF0ZToleFxuIiwKKwkJKHZvaWQgKikm
c3RjYi0+YXNvYywgc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50LAorCQkodWludDMyX3Qp
dGhyZXNob2xkLAorCQkoKG5ldCA9PSBOVUxMKSA/ICh1aW50MzJfdCkgMCA6ICh1aW50MzJfdCkg
bmV0LT5kZXN0X3N0YXRlKSk7CisJLyoKKwkgKiBXZSBzcGVjaWZpY2FsbHkgZG8gbm90IGRvID49
IHRvIGdpdmUgdGhlIGFzc29jIG9uZSBtb3JlIGNoYW5nZQorCSAqIGJlZm9yZSB3ZSBmYWlsIGl0
LgorCSAqLworCWlmIChzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQgPiB0aHJlc2hvbGQp
IHsKKwkJLyogQWJvcnQgbm90aWZpY2F0aW9uIHNlbmRzIGEgVUxQIG5vdGlmeSAqLworCQlzdHJ1
Y3QgbWJ1ZiAqb3BfZXJyOworCisJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKKwkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiQXNzb2NpYXRpb24gZXJyb3IgY291bnRlciBleGNlZWRlZCIpOworCQlpbnAtPmxh
c3RfYWJvcnRfY29kZSA9IFNDVFBfRlJPTV9TQ1RQX1RJTUVSICsgU0NUUF9MT0NfMjsKKwkJc2N0
cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihpbnAsIHN0Y2IsIG9wX2VyciwgU0NUUF9TT19OT1RfTE9D
S0VEKTsKKwkJcmV0dXJuICgxKTsKKwl9CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIHNjdHBf
ZmluZF9hbHRlcm5hdGVfbmV0KCkgcmV0dXJucyBhIG5vbi1OVUxMIHBvaW50ZXIgYXMgbG9uZyBh
cyB0aGVyZQorICogZXhpc3RzIG5ldHMsIHdoaWNoIGFyZSBub3QgYmVpbmcgZGVsZXRlZC4KKyAq
Lworc3RydWN0IHNjdHBfbmV0cyAqCitzY3RwX2ZpbmRfYWx0ZXJuYXRlX25ldChzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0LAorICAgIGludCBtb2RlKQor
eworCS8qIEZpbmQgYW5kIHJldHVybiBhbiBhbHRlcm5hdGUgbmV0d29yayBpZiBwb3NzaWJsZSAq
LworCXN0cnVjdCBzY3RwX25ldHMgKmFsdCwgKm1uZXQsICptaW5fZXJyb3JzX25ldCA9IE5VTEwg
LCAqbWF4X2N3bmRfbmV0ID0gTlVMTDsKKwlib29sIGxvb3BlZDsKKwkvKiBKUlMgNS8xNC8wNyAt
IEluaXRpYWxpemUgbWluX2Vycm9ycyB0byBhbiBpbXBvc3NpYmxlIHZhbHVlLiAqLworCWludCBt
aW5fZXJyb3JzID0gLTE7CisJdWludDMyX3QgbWF4X2N3bmQgPSAwOworCisJaWYgKHN0Y2ItPmFz
b2MubnVtbmV0cyA9PSAxKSB7CisJCS8qIE5vIHNlbGVjdGlvbiBjYW4gYmUgbWFkZS4gKi8KKwkJ
cmV0dXJuIChUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5uZXRzKSk7CisJfQorCS8qCisJICogSlJT
IDUvMTQvMDcgLSBJZiBtb2RlIGlzIHNldCB0byAyLCB1c2UgdGhlIENNVCBQRiBmaW5kIGFsdGVy
bmF0ZSBuZXQgYWxnb3JpdGhtLgorCSAqIFRoaXMgYWxnb3JpdGhtIGNob29zZXMgdGhlIGFjdGl2
ZSBkZXN0aW5hdGlvbiAobm90IGluIFBGIHN0YXRlKSB3aXRoIHRoZSBsYXJnZXN0CisJICogY3du
ZCB2YWx1ZS4gSWYgYWxsIGRlc3RpbmF0aW9ucyBhcmUgaW4gUEYgc3RhdGUsIHVucmVhY2hhYmxl
LCBvciB1bmNvbmZpcm1lZCwgY2hvb3NlCisJICogdGhlIGRlc2luYXRpb24gdGhhdCBpcyBpbiBQ
RiBzdGF0ZSB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQuIEluIGNhc2Ugb2YgYSB0aWUsCisJ
ICogY2hvb3NlIHRoZSBkZXN0aW5hdGlvbiB0aGF0IHdhcyBtb3N0IHJlY2VudGx5IGFjdGl2ZS4K
KwkgKi8KKwlpZiAobW9kZSA9PSAyKSB7CisJCVRBSUxRX0ZPUkVBQ0gobW5ldCwgJnN0Y2ItPmFz
b2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQkvKiBKUlMgNS8xNC8wNyAtIElmIHRoZSBkZXN0aW5h
dGlvbiBpcyB1bnJlYWNoYWJsZSBvciB1bmNvbmZpcm1lZCwgc2tpcCBpdC4gKi8KKwkJCWlmICgo
KG1uZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUkVBQ0hBQkxFKSAhPSBTQ1RQX0FERFJfUkVB
Q0hBQkxFKSB8fAorCQkJICAgIChtbmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1VOQ09ORklS
TUVEKSkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJLyoKKwkJCSAqIEpSUyA1LzE0LzA3IC0g
IElmIHRoZSBkZXN0aW5hdGlvbiBpcyByZWFjaGFibGUgYnV0IGluIFBGIHN0YXRlLCBjb21wYXJl
CisJCQkgKiAgdGhlIGVycm9yIGNvdW50IG9mIHRoZSBkZXN0aW5hdGlvbiB0byB0aGUgbWluaW11
bSBlcnJvciBjb3VudCBzZWVuIHRodXMgZmFyLgorCQkJICogIFN0b3JlIHRoZSBkZXN0aW5hdGlv
biB3aXRoIHRoZSBsb3dlciBlcnJvciBjb3VudC4gIElmIHRoZSBlcnJvciBjb3VudHMgYXJlCisJ
CQkgKiAgZXF1YWwsIHN0b3JlIHRoZSBkZXN0aW5hdGlvbiB0aGF0IHdhcyBtb3N0IHJlY2VudGx5
IGFjdGl2ZS4KKwkJCSAqLworCQkJaWYgKG1uZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYp
IHsKKwkJCQkvKgorCQkJCSAqIEpSUyA1LzE0LzA3IC0gSWYgdGhlIGRlc3RpbmF0aW9uIHVuZGVy
IGNvbnNpZGVyYXRpb24gaXMgdGhlIGN1cnJlbnQKKwkJCQkgKiAgZGVzdGluYXRpb24sIHdvcmsg
YXMgaWYgdGhlIGVycm9yIGNvdW50IGlzIG9uZSBoaWdoZXIuICBUaGUKKwkJCQkgKiAgYWN0dWFs
IGVycm9yIGNvdW50IHdpbGwgbm90IGJlIGluY3JlbWVudGVkIHVudGlsIGxhdGVyIGluIHRoZQor
CQkJCSAqICB0MyBoYW5kbGVyLgorCQkJCSAqLworCQkJCWlmIChtbmV0ID09IG5ldCkgeworCQkJ
CQlpZiAobWluX2Vycm9ycyA9PSAtMSkgeworCQkJCQkJbWluX2Vycm9ycyA9IG1uZXQtPmVycm9y
X2NvdW50ICsgMTsKKwkJCQkJCW1pbl9lcnJvcnNfbmV0ID0gbW5ldDsKKwkJCQkJfSBlbHNlIGlm
IChtbmV0LT5lcnJvcl9jb3VudCArIDEgPCBtaW5fZXJyb3JzKSB7CisJCQkJCQltaW5fZXJyb3Jz
ID0gbW5ldC0+ZXJyb3JfY291bnQgKyAxOworCQkJCQkJbWluX2Vycm9yc19uZXQgPSBtbmV0Owor
CQkJCQl9IGVsc2UgaWYgKG1uZXQtPmVycm9yX2NvdW50ICsgMSA9PSBtaW5fZXJyb3JzCisJCQkJ
CQkJCSYmIG1uZXQtPmxhc3RfYWN0aXZlID4gbWluX2Vycm9yc19uZXQtPmxhc3RfYWN0aXZlKSB7
CisJCQkJCQltaW5fZXJyb3JzX25ldCA9IG1uZXQ7CisJCQkJCQltaW5fZXJyb3JzID0gbW5ldC0+
ZXJyb3JfY291bnQgKyAxOworCQkJCQl9CisJCQkJCWNvbnRpbnVlOworCQkJCX0gZWxzZSB7CisJ
CQkJCWlmIChtaW5fZXJyb3JzID09IC0xKSB7CisJCQkJCQltaW5fZXJyb3JzID0gbW5ldC0+ZXJy
b3JfY291bnQ7CisJCQkJCQltaW5fZXJyb3JzX25ldCA9IG1uZXQ7CisJCQkJCX0gZWxzZSBpZiAo
bW5ldC0+ZXJyb3JfY291bnQgPCBtaW5fZXJyb3JzKSB7CisJCQkJCQltaW5fZXJyb3JzID0gbW5l
dC0+ZXJyb3JfY291bnQ7CisJCQkJCQltaW5fZXJyb3JzX25ldCA9IG1uZXQ7CisJCQkJCX0gZWxz
ZSBpZiAobW5ldC0+ZXJyb3JfY291bnQgPT0gbWluX2Vycm9ycworCQkJCQkJCQkmJiBtbmV0LT5s
YXN0X2FjdGl2ZSA+IG1pbl9lcnJvcnNfbmV0LT5sYXN0X2FjdGl2ZSkgeworCQkJCQkJbWluX2Vy
cm9yc19uZXQgPSBtbmV0OworCQkJCQkJbWluX2Vycm9ycyA9IG1uZXQtPmVycm9yX2NvdW50Owor
CQkJCQl9CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJCS8qCisJCQkgKiBKUlMgNS8x
NC8wNyAtIElmIHRoZSBkZXN0aW5hdGlvbiBpcyByZWFjaGFibGUgYW5kIG5vdCBpbiBQRiBzdGF0
ZSwgY29tcGFyZSB0aGUKKwkJCSAqICBjd25kIG9mIHRoZSBkZXN0aW5hdGlvbiB0byB0aGUgaGln
aGVzdCBjd25kIHNlZW4gdGh1cyBmYXIuICBTdG9yZSB0aGUKKwkJCSAqICBkZXN0aW5hdGlvbiB3
aXRoIHRoZSBoaWdoZXIgY3duZCB2YWx1ZS4gIElmIHRoZSBjd25kIHZhbHVlcyBhcmUgZXF1YWws
CisJCQkgKiAgcmFuZG9tbHkgY2hvb3NlIG9uZSBvZiB0aGUgdHdvIGRlc3RpbmF0aW9ucy4KKwkJ
CSAqLworCQkJaWYgKG1heF9jd25kIDwgbW5ldC0+Y3duZCkgeworCQkJCW1heF9jd25kX25ldCA9
IG1uZXQ7CisJCQkJbWF4X2N3bmQgPSBtbmV0LT5jd25kOworCQkJfSBlbHNlIGlmIChtYXhfY3du
ZCA9PSBtbmV0LT5jd25kKSB7CisJCQkJdWludDMyX3Qgcm5kdmFsOworCQkJCXVpbnQ4X3QgdGhp
c19yYW5kb207CisKKwkJCQlpZiAoc3RjYi0+YXNvYy5oYl9yYW5kb21faWR4ID4gMykgeworCQkJ
CQlybmR2YWwgPSBzY3RwX3NlbGVjdF9pbml0aWFsX1RTTigmc3RjYi0+c2N0cF9lcC0+c2N0cF9l
cCk7CisJCQkJCW1lbWNweShzdGNiLT5hc29jLmhiX3JhbmRvbV92YWx1ZXMsICZybmR2YWwsIHNp
emVvZihzdGNiLT5hc29jLmhiX3JhbmRvbV92YWx1ZXMpKTsKKwkJCQkJdGhpc19yYW5kb20gPSBz
dGNiLT5hc29jLmhiX3JhbmRvbV92YWx1ZXNbMF07CisJCQkJCXN0Y2ItPmFzb2MuaGJfcmFuZG9t
X2lkeCsrOworCQkJCQlzdGNiLT5hc29jLmhiX2VjdF9yYW5kb21iaXQgPSAwOworCQkJCX0gZWxz
ZSB7CisJCQkJCXRoaXNfcmFuZG9tID0gc3RjYi0+YXNvYy5oYl9yYW5kb21fdmFsdWVzW3N0Y2It
PmFzb2MuaGJfcmFuZG9tX2lkeF07CisJCQkJCXN0Y2ItPmFzb2MuaGJfcmFuZG9tX2lkeCsrOwor
CQkJCQlzdGNiLT5hc29jLmhiX2VjdF9yYW5kb21iaXQgPSAwOworCQkJCX0KKwkJCQlpZiAodGhp
c19yYW5kb20gJSAyID09IDEpIHsKKwkJCQkJbWF4X2N3bmRfbmV0ID0gbW5ldDsKKwkJCQkJbWF4
X2N3bmQgPSBtbmV0LT5jd25kOyAvKiBVc2VsZXNzPyAqLworCQkJCX0KKwkJCX0KKwkJfQorCQlp
ZiAobWF4X2N3bmRfbmV0ID09IE5VTEwpIHsKKwkJCWlmIChtaW5fZXJyb3JzX25ldCA9PSBOVUxM
KSB7CisJCQkJcmV0dXJuIChuZXQpOworCQkJfQorCQkJcmV0dXJuIChtaW5fZXJyb3JzX25ldCk7
CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gKG1heF9jd25kX25ldCk7CisJCX0KKwl9IC8qIEpSUyA1
LzE0LzA3IC0gSWYgbW9kZSBpcyBzZXQgdG8gMSwgdXNlIHRoZSBDTVQgcG9saWN5IGZvciBjaG9v
c2luZyBhbiBhbHRlcm5hdGUgbmV0LiAqLworCWVsc2UgaWYgKG1vZGUgPT0gMSkgeworCQlUQUlM
UV9GT1JFQUNIKG1uZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQkJaWYgKCgo
bW5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpICE9IFNDVFBfQUREUl9SRUFD
SEFCTEUpIHx8CisJCQkgICAgKG1uZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJN
RUQpKSB7CisJCQkJLyoKKwkJCQkgKiB3aWxsIHNraXAgb25lcyB0aGF0IGFyZSBub3QtcmVhY2hh
YmxlIG9yCisJCQkJICogdW5jb25maXJtZWQKKwkJCQkgKi8KKwkJCQljb250aW51ZTsKKwkJCX0K
KwkJCWlmIChtYXhfY3duZCA8IG1uZXQtPmN3bmQpIHsKKwkJCQltYXhfY3duZF9uZXQgPSBtbmV0
OworCQkJCW1heF9jd25kID0gbW5ldC0+Y3duZDsKKwkJCX0gZWxzZSBpZiAobWF4X2N3bmQgPT0g
bW5ldC0+Y3duZCkgeworCQkJCXVpbnQzMl90IHJuZHZhbDsKKwkJCQl1aW50OF90IHRoaXNfcmFu
ZG9tOworCisJCQkJaWYgKHN0Y2ItPmFzb2MuaGJfcmFuZG9tX2lkeCA+IDMpIHsKKwkJCQkJcm5k
dmFsID0gc2N0cF9zZWxlY3RfaW5pdGlhbF9UU04oJnN0Y2ItPnNjdHBfZXAtPnNjdHBfZXApOwor
CQkJCQltZW1jcHkoc3RjYi0+YXNvYy5oYl9yYW5kb21fdmFsdWVzLCAmcm5kdmFsLAorCQkJCQkg
ICAgc2l6ZW9mKHN0Y2ItPmFzb2MuaGJfcmFuZG9tX3ZhbHVlcykpOworCQkJCQl0aGlzX3JhbmRv
bSA9IHN0Y2ItPmFzb2MuaGJfcmFuZG9tX3ZhbHVlc1swXTsKKwkJCQkJc3RjYi0+YXNvYy5oYl9y
YW5kb21faWR4ID0gMDsKKwkJCQkJc3RjYi0+YXNvYy5oYl9lY3RfcmFuZG9tYml0ID0gMDsKKwkJ
CQl9IGVsc2UgeworCQkJCQl0aGlzX3JhbmRvbSA9IHN0Y2ItPmFzb2MuaGJfcmFuZG9tX3ZhbHVl
c1tzdGNiLT5hc29jLmhiX3JhbmRvbV9pZHhdOworCQkJCQlzdGNiLT5hc29jLmhiX3JhbmRvbV9p
ZHgrKzsKKwkJCQkJc3RjYi0+YXNvYy5oYl9lY3RfcmFuZG9tYml0ID0gMDsKKwkJCQl9CisJCQkJ
aWYgKHRoaXNfcmFuZG9tICUgMikgeworCQkJCQltYXhfY3duZF9uZXQgPSBtbmV0OworCQkJCQlt
YXhfY3duZCA9IG1uZXQtPmN3bmQ7CisJCQkJfQorCQkJfQorCQl9CisJCWlmIChtYXhfY3duZF9u
ZXQpIHsKKwkJCXJldHVybiAobWF4X2N3bmRfbmV0KTsKKwkJfQorCX0KKwkvKiBMb29rIGZvciBh
biBhbHRlcm5hdGUgbmV0LCB3aGljaCBpcyBhY3RpdmUuICovCisJaWYgKChuZXQgIT0gTlVMTCkg
JiYgKChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfQkVJTkdfREVMRVRFRCkgPT0gMCkpIHsK
KwkJYWx0ID0gVEFJTFFfTkVYVChuZXQsIHNjdHBfbmV4dCk7OworCX0gZWxzZSB7CisJCWFsdCA9
IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMpOworCX0KKwlsb29wZWQgPSBmYWxzZTsKKwlm
b3IgKDs7KSB7CisJCWlmIChhbHQgPT0gTlVMTCkgeworCQkJaWYgKCFsb29wZWQpIHsKKwkJCQlh
bHQgPSBUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5uZXRzKTsKKwkJCQlsb29wZWQgPSB0cnVlOwor
CQkJfQorCQkJLyogRGVmaW5pdGVseSBvdXQgb2YgY2FuZGlkYXRlcy4gKi8KKwkJCWlmIChhbHQg
PT0gTlVMTCkgeworCQkJCWJyZWFrOworCQkJfQorCQl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJaWYgKGFsdC0+cm8ucm9fbmggPT0gTlVM
TCkgeworI2Vsc2UKKwkJaWYgKGFsdC0+cm8ucm9fcnQgPT0gTlVMTCkgeworI2VuZGlmCisJCQlp
ZiAoYWx0LT5yby5fc19hZGRyKSB7CisJCQkJc2N0cF9mcmVlX2lmYShhbHQtPnJvLl9zX2FkZHIp
OworCQkJCWFsdC0+cm8uX3NfYWRkciA9IE5VTEw7CisJCQl9CisJCQlhbHQtPnNyY19hZGRyX3Nl
bGVjdGVkID0gMDsKKwkJfQorCQlpZiAoKChhbHQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUkVB
Q0hBQkxFKSA9PSBTQ1RQX0FERFJfUkVBQ0hBQkxFKSAmJgorI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCSAgICAoYWx0LT5yby5yb19uaCAhPSBO
VUxMKSAmJgorI2Vsc2UKKwkJICAgIChhbHQtPnJvLnJvX3J0ICE9IE5VTEwpICYmCisjZW5kaWYK
KwkJICAgICghKGFsdC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkpICYmCisJ
CSAgICAoYWx0ICE9IG5ldCkpIHsKKwkJCS8qIEZvdW5kIGFuIGFsdGVybmF0ZSBuZXQsIHdoaWNo
IGlzIHJlYWNoYWJsZS4gKi8KKwkJCWJyZWFrOworCQl9CisJCWFsdCA9IFRBSUxRX05FWFQoYWx0
LCBzY3RwX25leHQpOworCX0KKworCWlmIChhbHQgPT0gTlVMTCkgeworCQkvKgorCQkgKiBJbiBj
YXNlIG5vIGFjdGl2ZSBhbHRlcm5hdGUgbmV0IGhhcyBiZWVuIGZvdW5kLCBsb29rIGZvcgorCQkg
KiBhbiBhbHRlcm5hdGUgbmV0LCB3aGljaCBpcyBjb25maXJtZWQuCisJCSAqLworCQlpZiAoKG5l
dCAhPSBOVUxMKSAmJiAoKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9CRUlOR19ERUxFVEVE
KSA9PSAwKSkgeworCQkJYWx0ID0gVEFJTFFfTkVYVChuZXQsIHNjdHBfbmV4dCk7OworCQl9IGVs
c2UgeworCQkJYWx0ID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2MubmV0cyk7CisJCX0KKwkJbG9v
cGVkID0gZmFsc2U7CisJCWZvciAoOzspIHsKKwkJCWlmIChhbHQgPT0gTlVMTCkgeworCQkJCWlm
ICghbG9vcGVkKSB7CisJCQkJCWFsdCA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMpOwor
CQkJCQlsb29wZWQgPSB0cnVlOworCQkJCX0KKwkJCQkvKiBEZWZpbml0ZWx5IG91dCBvZiBjYW5k
aWRhdGVzLiAqLworCQkJCWlmIChhbHQgPT0gTlVMTCkgeworCQkJCQlicmVhazsKKwkJCQl9CisJ
CQl9CisJCQlpZiAoKCEoYWx0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1VOQ09ORklSTUVEKSkg
JiYKKwkJCSAgICAoYWx0ICE9IG5ldCkpIHsKKwkJCQkvKiBGb3VuZCBhbiBhbHRlcm5hdGUgbmV0
LCB3aGljaCBpcyBjb25maXJtZWQuICovCisJCQkJYnJlYWs7CisJCQl9CisJCQlhbHQgPSBUQUlM
UV9ORVhUKGFsdCwgc2N0cF9uZXh0KTsKKwkJfQorCX0KKwlpZiAoYWx0ID09IE5VTEwpIHsKKwkJ
LyoKKwkJICogSW4gY2FzZSBubyBjb25maXJtZWQgYWx0ZXJuYXRlIG5ldCBoYXMgYmVlbiBmb3Vu
ZCwganVzdAorCQkgKiByZXR1cm4gbmV0LCBpZiBpdCBpcyBub3QgYmVpbmcgZGVsZXRlZC4gSW4g
dGhlIG90aGVyIGNhc2UKKwkJICoganVzdCByZXR1cm4gdGhlIGZpcnN0IG5ldC4KKwkJICovCisJ
CWlmICgobmV0ICE9IE5VTEwpICYmICgobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX0JFSU5H
X0RFTEVURUQpID09IDApKSB7CisJCQlhbHQgPSBuZXQ7CisJCX0KKwkJaWYgKGFsdCA9PSBOVUxM
KSB7CisJCQlhbHQgPSBUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5uZXRzKTsKKwkJfQorCX0KKwly
ZXR1cm4gKGFsdCk7Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2JhY2tvZmZfb25fdGltZW91dChz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0LAorICAgIGlu
dCB3aW5fcHJvYmUsCisgICAgaW50IG51bV9tYXJrZWQsIGludCBudW1fYWJhbmRvbmVkKQorewor
CWlmIChuZXQtPlJUTyA9PSAwKSB7CisJCWlmIChuZXQtPlJUT19tZWFzdXJlZCkgeworCQkJbmV0
LT5SVE8gPSBzdGNiLT5hc29jLm1pbnJ0bzsKKwkJfSBlbHNlIHsKKwkJCW5ldC0+UlRPID0gc3Rj
Yi0+YXNvYy5pbml0aWFsX3J0bzsKKwkJfQorCX0KKwluZXQtPlJUTyA8PD0gMTsKKwlpZiAobmV0
LT5SVE8gPiBzdGNiLT5hc29jLm1heHJ0bykgeworCQluZXQtPlJUTyA9IHN0Y2ItPmFzb2MubWF4
cnRvOworCX0KKwlpZiAoKHdpbl9wcm9iZSA9PSAwKSAmJiAobnVtX21hcmtlZCB8fCBudW1fYWJh
bmRvbmVkKSkgeworCQkvKiBXZSBkb24ndCBhcHBseSBwZW5hbHR5IHRvIHdpbmRvdyBwcm9iZSBz
Y2VuYXJpb3MgKi8KKwkJLyogSlJTIC0gVXNlIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgZ2l2ZW4g
aW4gdGhlIENDIG1vZHVsZSAqLworCQlzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRf
dXBkYXRlX2FmdGVyX3RpbWVvdXQoc3RjYiwgbmV0KTsKKwl9Cit9CisKKyNpZm5kZWYgSU5WQVJJ
QU5UUworc3RhdGljIHZvaWQKK3NjdHBfcmVjb3Zlcl9zZW50X2xpc3Qoc3RydWN0IHNjdHBfdGNi
ICpzdGNiKQoreworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywgKm5jaGs7CisJc3RydWN0
IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisKKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJVEFJTFFf
Rk9SRUFDSF9TQUZFKGNoaywgJmFzb2MtPnNlbnRfcXVldWUsIHNjdHBfbmV4dCwgbmNoaykgewor
CQlpZiAoU0NUUF9UU05fR0UoYXNvYy0+bGFzdF9hY2tlZF9zZXEsIGNoay0+cmVjLmRhdGEudHNu
KSkgeworCQkJU0NUUF9QUklOVEYoIkZvdW5kIGNoazolcCB0c246JXggPD0gbGFzdF9hY2tlZF9z
ZXE6JXhcbiIsCisJCQkgICAgICAgICAgICAodm9pZCAqKWNoaywgY2hrLT5yZWMuZGF0YS50c24s
IGFzb2MtPmxhc3RfYWNrZWRfc2VxKTsKKwkJCWlmIChjaGstPnNlbnQgIT0gU0NUUF9EQVRBR1JB
TV9OUl9BQ0tFRCkgeworCQkJCWlmIChhc29jLT5zdHJtb3V0W2Noay0+cmVjLmRhdGEuc2lkXS5j
aHVua3Nfb25fcXVldWVzID4gMCkgeworCQkJCQlhc29jLT5zdHJtb3V0W2Noay0+cmVjLmRhdGEu
c2lkXS5jaHVua3Nfb25fcXVldWVzLS07CisJCQkJfQorCQkJfQorCQkJaWYgKChhc29jLT5zdHJt
b3V0W2Noay0+cmVjLmRhdGEuc2lkXS5jaHVua3Nfb25fcXVldWVzID09IDApICYmCisJCQkgICAg
KGFzb2MtPnN0cm1vdXRbY2hrLT5yZWMuZGF0YS5zaWRdLnN0YXRlID09IFNDVFBfU1RSRUFNX1JF
U0VUX1BFTkRJTkcpICYmCisJCQkgICAgVEFJTFFfRU1QVFkoJmFzb2MtPnN0cm1vdXRbY2hrLT5y
ZWMuZGF0YS5zaWRdLm91dHF1ZXVlKSkgeworCQkJCWFzb2MtPnRyaWdnZXJfcmVzZXQgPSAxOwor
CQkJfQorCQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5zZW50X3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7
CisJCQlpZiAoUFJfU0NUUF9FTkFCTEVEKGNoay0+ZmxhZ3MpKSB7CisJCQkJaWYgKGFzb2MtPnBy
X3NjdHBfY250ICE9IDApCisJCQkJCWFzb2MtPnByX3NjdHBfY250LS07CisJCQl9CisJCQlpZiAo
Y2hrLT5kYXRhKSB7CisJCQkJLypzYV9pZ25vcmUgTk9fTlVMTF9DSEsqLworCQkJCXNjdHBfZnJl
ZV9idWZzcGFjZShzdGNiLCBhc29jLCBjaGssIDEpOworCQkJCXNjdHBfbV9mcmVlbShjaGstPmRh
dGEpOworCQkJCWNoay0+ZGF0YSA9IE5VTEw7CisJCQkJaWYgKGFzb2MtPnByc2N0cF9zdXBwb3J0
ZWQgJiYgUFJfU0NUUF9CVUZfRU5BQkxFRChjaGstPmZsYWdzKSkgeworCQkJCQlhc29jLT5zZW50
X3F1ZXVlX2NudF9yZW1vdmVhYmxlLS07CisJCQkJfQorCQkJfQorCQkJYXNvYy0+c2VudF9xdWV1
ZV9jbnQtLTsKKwkJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9D
S0VEKTsKKwkJfQorCX0KKwlTQ1RQX1BSSU5URigiYWZ0ZXIgcmVjb3ZlciBvcmRlciBpcyBhcyBm
b2xsb3dzXG4iKTsKKwlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPnNlbnRfcXVldWUsIHNjdHBf
bmV4dCkgeworCQlTQ1RQX1BSSU5URigiY2hrOiVwIFRTTjoleFxuIiwgKHZvaWQgKiljaGssIGNo
ay0+cmVjLmRhdGEudHNuKTsKKwl9Cit9CisjZW5kaWYKKworc3RhdGljIGludAorc2N0cF9tYXJr
X2FsbF9mb3JfcmVzZW5kKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICBzdHJ1Y3Qgc2N0cF9u
ZXRzICpuZXQsCisgICAgc3RydWN0IHNjdHBfbmV0cyAqYWx0LAorICAgIGludCB3aW5kb3dfcHJv
YmUsCisgICAgaW50ICpudW1fbWFya2VkLAorICAgIGludCAqbnVtX2FiYW5kb25lZCkKK3sKKwor
CS8qCisJICogTWFyayBhbGwgY2h1bmtzICh3ZWxsIG5vdCBhbGwpIHRoYXQgd2VyZSBzZW50IHRv
ICpuZXQgZm9yCisJICogcmV0cmFuc21pc3Npb24uIE1vdmUgdGhlbSB0byBhbHQgZm9yIHRoZXJl
IGRlc3RpbmF0aW9uIGFzIHdlbGwuLi4KKwkgKiBXZSBvbmx5IG1hcmsgY2h1bmtzIHRoYXQgaGF2
ZSBiZWVuIG91dHN0YW5kaW5nIGxvbmcgZW5vdWdoIHRvCisJICogaGF2ZSByZWNlaXZlZCBmZWVk
LWJhY2suCisJICovCisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAqbmNoazsKKwlzdHJ1
Y3Qgc2N0cF9uZXRzICpsbmV0czsKKwlzdHJ1Y3QgdGltZXZhbCBub3csIG1pbl93YWl0LCB0djsK
KwlpbnQgY3VyX3J0bzsKKwlpbnQgY250X2FiYW5kb25lZDsKKwlpbnQgYXVkaXRfdGYsIG51bV9t
aywgZmlyOworCXVuc2lnbmVkIGludCBjbnRfbWs7CisJdWludDMyX3Qgb3JpZ19mbGlnaHQsIG9y
aWdfdGY7CisJdWludDMyX3QgdHNubGFzdCwgdHNuZmlyc3Q7CisJaW50IHJlY292ZXJ5X2NudCA9
IDA7CisKKwkvKiBub25lIGluIGZsaWdodCBub3cgKi8KKwlhdWRpdF90ZiA9IDA7CisJZmlyID0g
MDsKKwkvKgorCSAqIGZpZ3VyZSBvdXQgaG93IGxvbmcgYSBkYXRhIGNodW5rIG11c3QgYmUgcGVu
ZGluZyBiZWZvcmUgd2UgY2FuCisJICogbWFyayBpdCAuLgorCSAqLworCSh2b2lkKVNDVFBfR0VU
VElNRV9USU1FVkFMKCZub3cpOworCS8qIGdldCBjdXIgcnRvIGluIG1pY3JvLXNlY29uZHMgKi8K
KwljdXJfcnRvID0gKG5ldC0+bGFzdHNhID4+IFNDVFBfUlRUX1NISUZUKSArIG5ldC0+bGFzdHN2
OworCWN1cl9ydG8gKj0gMTAwMDsKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdf
bGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5HX0VOQUJMRSkgeworCQlzY3RwX2xvZ19mcihjdXJfcnRv
LAorCQkJICAgIHN0Y2ItPmFzb2MucGVlcnNfcnduZCwKKwkJCSAgICB3aW5kb3dfcHJvYmUsCisJ
CQkgICAgU0NUUF9GUl9UM19NQVJLX1RJTUUpOworCQlzY3RwX2xvZ19mcihuZXQtPmZsaWdodF9z
aXplLCAwLCAwLCBTQ1RQX0ZSX0NXTkRfUkVQT1JUKTsKKwkJc2N0cF9sb2dfZnIobmV0LT5mbGln
aHRfc2l6ZSwgbmV0LT5jd25kLCBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCwgU0NUUF9GUl9DV05E
X1JFUE9SVCk7CisJfQorCXR2LnR2X3NlYyA9IGN1cl9ydG8gLyAxMDAwMDAwOworCXR2LnR2X3Vz
ZWMgPSBjdXJfcnRvICUgMTAwMDAwMDsKKyNpZiAhKGRlZmluZWQoX19GcmVlQlNEX18pICYmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pKQorCXRpbWVyc3ViKCZub3csICZ0diwgJm1pbl93YWl0KTsK
KyNlbHNlCisJbWluX3dhaXQgPSBub3c7CisJdGltZXZhbHN1YigmbWluX3dhaXQsICZ0dik7Cisj
ZW5kaWYKKwlpZiAobWluX3dhaXQudHZfc2VjIDwgMCB8fCBtaW5fd2FpdC50dl91c2VjIDwgMCkg
eworCQkvKgorCQkgKiBpZiB3ZSBoaXQgaGVyZSwgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggc2Vjb25k
cyBvbiB0aGUgY2xvY2sKKwkJICogdG8gYWNjb3VudCBmb3IgdGhlIFJUTy4gV2UganVzdCBsZXQg
dGhlIGxvd2VyIHNlY29uZHMgYmUKKwkJICogdGhlIGJvdW5kcyBhbmQgZG9uJ3Qgd29ycnkgYWJv
dXQgaXQuIFRoaXMgbWF5IG1lYW4gd2UKKwkJICogd2lsbCBtYXJrIGEgbG90IG1vcmUgdGhhbiB3
ZSBzaG91bGQuCisJCSAqLworCQltaW5fd2FpdC50dl9zZWMgPSBtaW5fd2FpdC50dl91c2VjID0g
MDsKKwl9CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBf
RlJfTE9HR0lOR19FTkFCTEUpIHsKKwkJc2N0cF9sb2dfZnIoY3VyX3J0bywgbm93LnR2X3NlYywg
bm93LnR2X3VzZWMsIFNDVFBfRlJfVDNfTUFSS19USU1FKTsKKwkJc2N0cF9sb2dfZnIoMCwgbWlu
X3dhaXQudHZfc2VjLCBtaW5fd2FpdC50dl91c2VjLCBTQ1RQX0ZSX1QzX01BUktfVElNRSk7CisJ
fQorCS8qCisJICogT3VyIHJ3bmQgd2lsbCBiZSBpbmNvcnJlY3QgaGVyZSBzaW5jZSB3ZSBhcmUg
bm90IGFkZGluZyBiYWNrIHRoZQorCSAqIGNudCAqIG1idWYgYnV0IHdlIHdpbGwgZml4IHRoYXQg
ZG93biBiZWxvdy4KKwkgKi8KKwlvcmlnX2ZsaWdodCA9IG5ldC0+ZmxpZ2h0X3NpemU7CisJb3Jp
Z190ZiA9IHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0OworCisJbmV0LT5mYXN0X3JldHJhbl9pcCA9
IDA7CisJLyogTm93IG9uIHRvIGVhY2ggY2h1bmsgKi8KKwljbnRfYWJhbmRvbmVkID0gMDsKKwlu
dW1fbWsgPSBjbnRfbWsgPSAwOworCXRzbmZpcnN0ID0gdHNubGFzdCA9IDA7CisjaWZuZGVmIElO
VkFSSUFOVFMKKyBzdGFydF9hZ2FpbjoKKyNlbmRpZgorCVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGss
ICZzdGNiLT5hc29jLnNlbnRfcXVldWUsIHNjdHBfbmV4dCwgbmNoaykgeworCQlpZiAoU0NUUF9U
U05fR0Uoc3RjYi0+YXNvYy5sYXN0X2Fja2VkX3NlcSwgY2hrLT5yZWMuZGF0YS50c24pKSB7CisJ
CQkvKiBTdHJhbmdlIGNhc2Ugb3VyIGxpc3QgZ290IG91dCBvZiBvcmRlcj8gKi8KKwkJCVNDVFBf
UFJJTlRGKCJPdXIgbGlzdCBpcyBvdXQgb2Ygb3JkZXI/IGxhc3RfYWNrZWQ6JXggY2hrOiV4XG4i
LAorCQkJICAgICAgICAgICAgKHVuc2lnbmVkIGludClzdGNiLT5hc29jLmxhc3RfYWNrZWRfc2Vx
LCAodW5zaWduZWQgaW50KWNoay0+cmVjLmRhdGEudHNuKTsKKwkJCXJlY292ZXJ5X2NudCsrOwor
I2lmZGVmIElOVkFSSUFOVFMKKwkJCXBhbmljKCJsYXN0IGFja2VkID49IGNoayBvbiBzZW50LVEi
KTsKKyNlbHNlCisJCQlTQ1RQX1BSSU5URigiUmVjb3ZlciBhdHRlbXB0cyBhIHJlc3RhcnQgY250
OiVkXG4iLCByZWNvdmVyeV9jbnQpOworCQkJc2N0cF9yZWNvdmVyX3NlbnRfbGlzdChzdGNiKTsK
KwkJCWlmIChyZWNvdmVyeV9jbnQgPCAxMCkgeworCQkJCWdvdG8gc3RhcnRfYWdhaW47CisJCQl9
IGVsc2UgeworCQkJCVNDVFBfUFJJTlRGKCJSZWNvdmVyeSBmYWlscyAlZCB0aW1lcz8/XG4iLCBy
ZWNvdmVyeV9jbnQpOworCQkJfQorI2VuZGlmCisJCX0KKwkJaWYgKChjaGstPndob1RvID09IG5l
dCkgJiYgKGNoay0+c2VudCA8IFNDVFBfREFUQUdSQU1fQUNLRUQpKSB7CisJCQkvKgorCQkJICog
Zm91bmQgb25lIHRvIG1hcms6IElmIGl0IGlzIGxlc3MgdGhhbgorCQkJICogREFUQUdSQU1fQUNL
RUQgaXQgTVVTVCBub3QgYmUgYSBza2lwcGVkIG9yIG1hcmtlZAorCQkJICogVFNOIGJ1dCBpbnN0
ZWFkIG9uZSB0aGF0IGlzIGVpdGhlciBhbHJlYWR5IHNldAorCQkJICogZm9yIHJldHJhbnNtaXNz
aW9uIE9SIG9uZSB0aGF0IG5lZWRzCisJCQkgKiByZXRyYW5zbWlzc2lvbi4KKwkJCSAqLworCisJ
CQkvKiB2YWxpZGF0ZSBpdHMgYmVlbiBvdXRzdGFuZGluZyBsb25nIGVub3VnaCAqLworCQkJaWYg
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRlJfTE9HR0lOR19F
TkFCTEUpIHsKKwkJCQlzY3RwX2xvZ19mcihjaGstPnJlYy5kYXRhLnRzbiwKKwkJCQkJICAgIGNo
ay0+c2VudF9yY3ZfdGltZS50dl9zZWMsCisJCQkJCSAgICBjaGstPnNlbnRfcmN2X3RpbWUudHZf
dXNlYywKKwkJCQkJICAgIFNDVFBfRlJfVDNfTUFSS19USU1FKTsKKwkJCX0KKwkJCWlmICgoY2hr
LT5zZW50X3Jjdl90aW1lLnR2X3NlYyA+IG1pbl93YWl0LnR2X3NlYykgJiYgKHdpbmRvd19wcm9i
ZSA9PSAwKSkgeworCQkJCS8qCisJCQkJICogd2UgaGF2ZSByZWFjaGVkIGEgY2h1bmsgdGhhdCB3
YXMgc2VudAorCQkJCSAqIHNvbWUgc2Vjb25kcyBwYXN0IG91ciBtaW4uLiBmb3JnZXQgaXQgd2UK
KwkJCQkgKiB3aWxsIGZpbmQgbm8gbW9yZSB0byBzZW5kLgorCQkJCSAqLworCQkJCWlmIChTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0ZSX0xPR0dJTkdfRU5BQkxF
KSB7CisJCQkJCXNjdHBfbG9nX2ZyKDAsCisJCQkJCQkgICAgY2hrLT5zZW50X3Jjdl90aW1lLnR2
X3NlYywKKwkJCQkJCSAgICBjaGstPnNlbnRfcmN2X3RpbWUudHZfdXNlYywKKwkJCQkJCSAgICBT
Q1RQX0ZSX1QzX1NUT1BQRUQpOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSBpZiAo
KGNoay0+c2VudF9yY3ZfdGltZS50dl9zZWMgPT0gbWluX3dhaXQudHZfc2VjKSAmJgorCQkJCSAg
ICh3aW5kb3dfcHJvYmUgPT0gMCkpIHsKKwkJCQkvKgorCQkJCSAqIHdlIG11c3QgbG9vayBhdCB0
aGUgbWljcm8gc2Vjb25kcyB0bworCQkJCSAqIGtub3cuCisJCQkJICovCisJCQkJaWYgKGNoay0+
c2VudF9yY3ZfdGltZS50dl91c2VjID49IG1pbl93YWl0LnR2X3VzZWMpIHsKKwkJCQkJLyoKKwkJ
CQkJICogb2sgaXQgd2FzIHNlbnQgYWZ0ZXIgb3VyIGJvdW5kYXJ5CisJCQkJCSAqIHRpbWUuCisJ
CQkJCSAqLworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQlpZiAoc3RjYi0+YXNvYy5w
cnNjdHBfc3VwcG9ydGVkICYmIFBSX1NDVFBfVFRMX0VOQUJMRUQoY2hrLT5mbGFncykpIHsKKwkJ
CQkvKiBJcyBpdCBleHBpcmVkPyAqLworI2lmICEoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykpCisJCQkJaWYgKHRpbWVyY21wKCZub3csICZjaGstPnJlYy5k
YXRhLnRpbWV0b2Ryb3AsID4pKSB7CisjZWxzZQorCQkJCWlmICh0aW1ldmFsY21wKCZub3csICZj
aGstPnJlYy5kYXRhLnRpbWV0b2Ryb3AsID4pKSB7CisjZW5kaWYKKwkJCQkJLyogWWVzIHNvIGRy
b3AgaXQgKi8KKwkJCQkJaWYgKGNoay0+ZGF0YSkgeworCQkJCQkJKHZvaWQpc2N0cF9yZWxlYXNl
X3ByX3NjdHBfY2h1bmsoc3RjYiwKKwkJCQkJCQkJCQkgY2hrLAorCQkJCQkJCQkJCSAxLAorCQkJ
CQkJCQkJCSBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJCQkJY250X2FiYW5kb25lZCsrOworCQkJ
CQl9CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJCWlmIChzdGNiLT5hc29jLnByc2N0
cF9zdXBwb3J0ZWQgJiYgUFJfU0NUUF9SVFhfRU5BQkxFRChjaGstPmZsYWdzKSkgeworCQkJCS8q
IEhhcyBpdCBiZWVuIHJldHJhbnNtaXR0ZWQgdHZfc2VjIHRpbWVzPyAqLworCQkJCWlmIChjaGst
PnNuZF9jb3VudCA+IGNoay0+cmVjLmRhdGEudGltZXRvZHJvcC50dl9zZWMpIHsKKwkJCQkJaWYg
KGNoay0+ZGF0YSkgeworCQkJCQkJKHZvaWQpc2N0cF9yZWxlYXNlX3ByX3NjdHBfY2h1bmsoc3Rj
YiwKKwkJCQkJCQkJCQkgY2hrLAorCQkJCQkJCQkJCSAxLAorCQkJCQkJCQkJCSBTQ1RQX1NPX05P
VF9MT0NLRUQpOworCQkJCQkJY250X2FiYW5kb25lZCsrOworCQkJCQl9CisJCQkJCWNvbnRpbnVl
OworCQkJCX0KKwkJCX0KKwkJCWlmIChjaGstPnNlbnQgPCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkg
eworCQkJCXNjdHBfdWNvdW50X2luY3Ioc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQp
OworCQkJCW51bV9taysrOworCQkJCWlmIChmaXIgPT0gMCkgeworCQkJCQlmaXIgPSAxOworCQkJ
CQl0c25maXJzdCA9IGNoay0+cmVjLmRhdGEudHNuOworCQkJCX0KKwkJCQl0c25sYXN0ID0gY2hr
LT5yZWMuZGF0YS50c247CisJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xl
dmVsKSAmIFNDVFBfRlJfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQkJc2N0cF9sb2dfZnIoY2hrLT5y
ZWMuZGF0YS50c24sIGNoay0+c25kX2NvdW50LAorCQkJCQkJICAgIDAsIFNDVFBfRlJfVDNfTUFS
S0VEKTsKKwkJCQl9CisKKwkJCQlpZiAoY2hrLT5yZWMuZGF0YS5jaHVua193YXNfcmV2b2tlZCkg
eworCQkJCQkvKiBkZWZsYXRlIHRoZSBjd25kICovCisJCQkJCWNoay0+d2hvVG8tPmN3bmQgLT0g
Y2hrLT5ib29rX3NpemU7CisJCQkJCWNoay0+cmVjLmRhdGEuY2h1bmtfd2FzX3Jldm9rZWQgPSAw
OworCQkJCX0KKwkJCQluZXQtPm1hcmtlZF9yZXRyYW5zKys7CisJCQkJc3RjYi0+YXNvYy5tYXJr
ZWRfcmV0cmFucysrOworCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZl
bCkgJiBTQ1RQX0ZMSUdIVF9MT0dHSU5HX0VOQUJMRSkgeworCQkJCQlzY3RwX21pc2NfaW50cyhT
Q1RQX0ZMSUdIVF9MT0dfRE9XTl9SU05EX1RPLAorCQkJCQkJICAgICAgIGNoay0+d2hvVG8tPmZs
aWdodF9zaXplLAorCQkJCQkJICAgICAgIGNoay0+Ym9va19zaXplLAorCQkJCQkJICAgICAgICh1
aW50MzJfdCkodWludHB0cl90KWNoay0+d2hvVG8sCisJCQkJCQkgICAgICAgY2hrLT5yZWMuZGF0
YS50c24pOworCQkJCX0KKwkJCQlzY3RwX2ZsaWdodF9zaXplX2RlY3JlYXNlKGNoayk7CisJCQkJ
c2N0cF90b3RhbF9mbGlnaHRfZGVjcmVhc2Uoc3RjYiwgY2hrKTsKKwkJCQlzdGNiLT5hc29jLnBl
ZXJzX3J3bmQgKz0gY2hrLT5zZW5kX3NpemU7CisJCQkJc3RjYi0+YXNvYy5wZWVyc19yd25kICs9
IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wZWVyX2NodW5rX29oKTsKKwkJCX0KKwkJCWNoay0+c2Vu
dCA9IFNDVFBfREFUQUdSQU1fUkVTRU5EOworCQkJY2hrLT5mbGFncyB8PSBDSFVOS19GTEFHU19G
UkFHTUVOVF9PSzsKKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX21hcmtlZHJldHJhbnMpOworCisJ
CQkvKiByZXNldCB0aGUgVFNOIGZvciBzdHJpa2luZyBhbmQgb3RoZXIgRlIgc3R1ZmYgKi8KKwkJ
CWNoay0+cmVjLmRhdGEuZG9pbmdfZmFzdF9yZXRyYW5zbWl0ID0gMDsKKwkJCS8qIENsZWFyIGFu
eSB0aW1lIHNvIE5PIFJUVCBpcyBiZWluZyBkb25lICovCisKKwkJCWlmIChjaGstPmRvX3J0dCkg
eworCQkJCWlmIChjaGstPndob1RvLT5ydG9fbmVlZGVkID09IDApIHsKKwkJCQkJY2hrLT53aG9U
by0+cnRvX25lZWRlZCA9IDE7CisJCQkJfQorCQkJfQorCQkJY2hrLT5kb19ydHQgPSAwOworCQkJ
aWYgKGFsdCAhPSBuZXQpIHsKKwkJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoY2hrLT53aG9Ubyk7
CisJCQkJY2hrLT5ub19mcl9hbGxvd2VkID0gMTsKKwkJCQljaGstPndob1RvID0gYWx0OworCQkJ
CWF0b21pY19hZGRfaW50KCZhbHQtPnJlZl9jb3VudCwgMSk7CisJCQl9IGVsc2UgeworCQkJCWNo
ay0+bm9fZnJfYWxsb3dlZCA9IDA7CisJCQkJaWYgKFRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLnNl
bmRfcXVldWUpKSB7CisJCQkJCWNoay0+cmVjLmRhdGEuZmFzdF9yZXRyYW5fdHNuID0gc3RjYi0+
YXNvYy5zZW5kaW5nX3NlcTsKKwkJCQl9IGVsc2UgeworCQkJCQljaGstPnJlYy5kYXRhLmZhc3Rf
cmV0cmFuX3RzbiA9IChUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5zZW5kX3F1ZXVlKSktPnJlYy5k
YXRhLnRzbjsKKwkJCQl9CisJCQl9CisJCQkvKiBDTVQ6IERvIG5vdCBhbGxvdyBGUnMgb24gcmV0
cmFuc21pdHRlZCBUU05zLgorCQkJICovCisJCQlpZiAoc3RjYi0+YXNvYy5zY3RwX2NtdF9vbl9v
ZmYgPiAwKSB7CisJCQkJY2hrLT5ub19mcl9hbGxvd2VkID0gMTsKKwkJCX0KKyNpZmRlZiBUSElT
X1NIT1VMRF9OT1RfQkVfRE9ORQorCQl9IGVsc2UgaWYgKGNoay0+c2VudCA9PSBTQ1RQX0RBVEFH
UkFNX0FDS0VEKSB7CisJCQkvKiByZW1lbWJlciBoaWdoZXN0IGFja2VkIG9uZSAqLworCQkJY291
bGRfYmVfc2VudCA9IGNoazsKKyNlbmRpZgorCQl9CisJCWlmIChjaGstPnNlbnQgPT0gU0NUUF9E
QVRBR1JBTV9SRVNFTkQpIHsKKwkJCWNudF9taysrOworCQl9CisJfQorCWlmICgob3JpZ19mbGln
aHQgLSBuZXQtPmZsaWdodF9zaXplKSAhPSAob3JpZ190ZiAtIHN0Y2ItPmFzb2MudG90YWxfZmxp
Z2h0KSkgeworCQkvKiB3ZSBkaWQgbm90IHN1YnRyYWN0IHRoZSBzYW1lIHRoaW5ncz8gKi8KKwkJ
YXVkaXRfdGYgPSAxOworCX0KKworCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19s
ZXZlbCkgJiBTQ1RQX0ZSX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBfbG9nX2ZyKHRzbmZpcnN0
LCB0c25sYXN0LCBudW1fbWssIFNDVFBfRlJfVDNfVElNRU9VVCk7CisJfQorI2lmZGVmIFNDVFBf
REVCVUcKKwlpZiAobnVtX21rKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19USU1FUjEsICJMQVNU
IFRTTiBtYXJrZWQgd2FzICV4XG4iLAorCQkJdHNubGFzdCk7CisJCVNDVFBEQkcoU0NUUF9ERUJV
R19USU1FUjEsICJOdW0gbWFya2VkIGZvciByZXRyYW5zbWlzc2lvbiB3YXMgJWQgcGVlci1yd2Q6
JXVcbiIsCisJCQludW1fbWssCisJCQlzdGNiLT5hc29jLnBlZXJzX3J3bmQpOworCX0KKyNlbmRp
ZgorCSpudW1fbWFya2VkID0gbnVtX21rOworCSpudW1fYWJhbmRvbmVkID0gY250X2FiYW5kb25l
ZDsKKwkvKiBOb3cgY2hlY2sgZm9yIGEgRUNOIEVjaG8gdGhhdCBtYXkgYmUgc3RyYW5kZWQgQW5k
CisJICogaW5jbHVkZSB0aGUgY250X21rJ2QgdG8gaGF2ZSBhbGwgcmVzZW5kcyBpbiB0aGUKKwkg
KiBjb250cm9sIHF1ZXVlLgorCSAqLworCVRBSUxRX0ZPUkVBQ0goY2hrLCAmc3RjYi0+YXNvYy5j
b250cm9sX3NlbmRfcXVldWUsIHNjdHBfbmV4dCkgeworCQlpZiAoY2hrLT5zZW50ID09IFNDVFBf
REFUQUdSQU1fUkVTRU5EKSB7CisJCQljbnRfbWsrKzsKKwkJfQorCQlpZiAoKGNoay0+d2hvVG8g
PT0gbmV0KSAmJgorCQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfRUNOX0VDSE8p
KSB7CisJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoY2hrLT53aG9Ubyk7CisJCQljaGstPndob1Rv
ID0gYWx0OworCQkJaWYgKGNoay0+c2VudCAhPSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgeworCQkJ
CWNoay0+c2VudCA9IFNDVFBfREFUQUdSQU1fUkVTRU5EOworCQkJCWNoay0+ZmxhZ3MgfD0gQ0hV
TktfRkxBR1NfRlJBR01FTlRfT0s7CisJCQkJc2N0cF91Y291bnRfaW5jcihzdGNiLT5hc29jLnNl
bnRfcXVldWVfcmV0cmFuX2NudCk7CisJCQkJY250X21rKys7CisJCQl9CisJCQlhdG9taWNfYWRk
X2ludCgmYWx0LT5yZWZfY291bnQsIDEpOworCQl9CisJfQorI2lmZGVmIFRISVNfU0hPVUxEX05P
VF9CRV9ET05FCisJaWYgKChzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCA9PSAwKSAm
JiAoY291bGRfYmVfc2VudCkpIHsKKwkJLyogZml4IGl0IHNvIHdlIHJldHJhbnNtaXQgdGhlIGhp
Z2hlc3QgYWNrZWQgYW55d2F5ICovCisJCXNjdHBfdWNvdW50X2luY3Ioc3RjYi0+YXNvYy5zZW50
X3F1ZXVlX3JldHJhbl9jbnQpOworCQljbnRfbWsrKzsKKwkJY291bGRfYmVfc2VudC0+c2VudCA9
IFNDVFBfREFUQUdSQU1fUkVTRU5EOworCX0KKyNlbmRpZgorCWlmIChzdGNiLT5hc29jLnNlbnRf
cXVldWVfcmV0cmFuX2NudCAhPSBjbnRfbWspIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCVNDVFBf
UFJJTlRGKCJMb2NhbCBBdWRpdCBzYXlzIHRoZXJlIGFyZSAlZCBmb3IgcmV0cmFuIGFzb2MgY250
OiVkIHdlIG1hcmtlZDolZCB0aGlzIHRpbWVcbiIsCisJCQkgICAgY250X21rLCBzdGNiLT5hc29j
LnNlbnRfcXVldWVfcmV0cmFuX2NudCwgbnVtX21rKTsKKyNlbmRpZgorI2lmbmRlZiBTQ1RQX0FV
RElUSU5HX0VOQUJMRUQKKwkJc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQgPSBjbnRf
bWs7CisjZW5kaWYKKwl9CisJaWYgKGF1ZGl0X3RmKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19U
SU1FUjQsCisJCQkiQXVkaXQgdG90YWwgZmxpZ2h0IGR1ZSB0byBuZWdhdGl2ZSB2YWx1ZSBuZXQ6
JXBcbiIsCisJCQkodm9pZCAqKW5ldCk7CisJCXN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0ID0gMDsK
KwkJc3RjYi0+YXNvYy50b3RhbF9mbGlnaHRfY291bnQgPSAwOworCQkvKiBDbGVhciBhbGwgbmV0
d29ya3MgZmxpZ2h0IHNpemUgKi8KKwkJVEFJTFFfRk9SRUFDSChsbmV0cywgJnN0Y2ItPmFzb2Mu
bmV0cywgc2N0cF9uZXh0KSB7CisJCQlsbmV0cy0+ZmxpZ2h0X3NpemUgPSAwOworCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX1RJTUVSNCwKKwkJCQkiTmV0OiVwIGMtZiBjd25kOiVkIHNzdGhyZXNoOiVk
XG4iLAorCQkJCSh2b2lkICopbG5ldHMsIGxuZXRzLT5jd25kLCBsbmV0cy0+c3N0aHJlc2gpOwor
CQl9CisJCVRBSUxRX0ZPUkVBQ0goY2hrLCAmc3RjYi0+YXNvYy5zZW50X3F1ZXVlLCBzY3RwX25l
eHQpIHsKKwkJCWlmIChjaGstPnNlbnQgPCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgeworCQkJCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0ZMSUdIVF9MT0dH
SU5HX0VOQUJMRSkgeworCQkJCQlzY3RwX21pc2NfaW50cyhTQ1RQX0ZMSUdIVF9MT0dfVVAsCisJ
CQkJCQkgICAgICAgY2hrLT53aG9Uby0+ZmxpZ2h0X3NpemUsCisJCQkJCQkgICAgICAgY2hrLT5i
b29rX3NpemUsCisJCQkJCQkgICAgICAgKHVpbnQzMl90KSh1aW50cHRyX3QpY2hrLT53aG9UbywK
KwkJCQkJCSAgICAgICBjaGstPnJlYy5kYXRhLnRzbik7CisJCQkJfQorCisJCQkJc2N0cF9mbGln
aHRfc2l6ZV9pbmNyZWFzZShjaGspOworCQkJCXNjdHBfdG90YWxfZmxpZ2h0X2luY3JlYXNlKHN0
Y2IsIGNoayk7CisJCQl9CisJCX0KKwl9CisJLyogV2UgcmV0dXJuIDEgaWYgd2Ugb25seSBoYXZl
IGEgd2luZG93IHByb2JlIG91dHN0YW5kaW5nICovCisJcmV0dXJuICgwKTsKK30KKworaW50Citz
Y3RwX3Qzcnh0X3RpbWVyKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCisgICAgc3RydWN0IHNjdHBf
dGNiICpzdGNiLAorICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwlzdHJ1Y3Qgc2N0cF9u
ZXRzICphbHQ7CisJaW50IHdpbl9wcm9iZSwgbnVtX21rLCBudW1fYWJhbmRvbmVkOworCisJaWYg
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRlJfTE9HR0lOR19F
TkFCTEUpIHsKKwkJc2N0cF9sb2dfZnIoMCwgMCwgMCwgU0NUUF9GUl9UM19USU1FT1VUKTsKKwl9
CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9M
T0dHSU5HX0VOQUJMRSkgeworCQlzdHJ1Y3Qgc2N0cF9uZXRzICpsbmV0OworCisJCVRBSUxRX0ZP
UkVBQ0gobG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQlpZiAobmV0ID09
IGxuZXQpIHsKKwkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIGxuZXQsIDEsIFNDVFBfQ1dORF9MT0df
RlJPTV9UMyk7CisJCQl9IGVsc2UgeworCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbG5ldCwgMCwg
U0NUUF9DV05EX0xPR19GUk9NX1QzKTsKKwkJCX0KKwkJfQorCX0KKwkvKiBGaW5kIGFuIGFsdGVy
bmF0ZSBhbmQgbWFyayB0aG9zZSBmb3IgcmV0cmFuc21pc3Npb24gKi8KKwlpZiAoKHN0Y2ItPmFz
b2MucGVlcnNfcnduZCA9PSAwKSAmJgorCSAgICAoc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQgPCBu
ZXQtPm10dSkpIHsKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfdGltb3dpbmRvd3Byb2JlKTsKKwkJ
d2luX3Byb2JlID0gMTsKKwl9IGVsc2UgeworCQl3aW5fcHJvYmUgPSAwOworCX0KKworCWlmICh3
aW5fcHJvYmUgPT0gMCkgeworCQkvKiBXZSBkb24ndCBkbyBub3JtYWwgdGhyZXNob2xkIG1hbmFn
ZW1lbnQgb24gd2luZG93IHByb2JlcyAqLworCQlpZiAoc2N0cF90aHJlc2hvbGRfbWFuYWdlbWVu
dChpbnAsIHN0Y2IsIG5ldCwKKwkJICAgIHN0Y2ItPmFzb2MubWF4X3NlbmRfdGltZXMpKSB7CisJ
CQkvKiBBc3NvY2lhdGlvbiB3YXMgZGVzdHJveWVkICovCisJCQlyZXR1cm4gKDEpOworCQl9IGVs
c2UgeworCQkJaWYgKG5ldCAhPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24pIHsKKwkJ
CQkvKiBzZW5kIGEgaW1tZWRpYXRlIEhCIGlmIG91ciBSVE8gaXMgc3RhbGUgKi8KKwkJCQlzdHJ1
Y3QgdGltZXZhbCBub3c7CisJCQkJdW5zaWduZWQgaW50IG1zX2dvbmVieTsKKworCQkJCSh2b2lk
KVNDVFBfR0VUVElNRV9USU1FVkFMKCZub3cpOworCQkJCWlmIChuZXQtPmxhc3Rfc2VudF90aW1l
LnR2X3NlYykgeworCQkJCQltc19nb25lYnkgPSAobm93LnR2X3NlYyAtIG5ldC0+bGFzdF9zZW50
X3RpbWUudHZfc2VjKSAqIDEwMDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJbXNfZ29uZWJ5ID0gMDsK
KwkJCQl9CisJCQkJaWYgKChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYpID09IDApIHsK
KwkJCQkJaWYgKChtc19nb25lYnkgPiBuZXQtPlJUTykgfHwgKG5ldC0+UlRPID09IDApKSB7CisJ
CQkJCQkvKgorCQkJCQkJICogbm8gcmVjZW50IGZlZWQgYmFjayBpbiBhbiBSVE8gb3IKKwkJCQkJ
CSAqIG1vcmUsIHJlcXVlc3QgYSBSVFQgdXBkYXRlCisJCQkJCQkgKi8KKwkJCQkJCXNjdHBfc2Vu
ZF9oYihzdGNiLCBuZXQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQkJCX0KKwkJCQl9CisJCQl9
CisJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiBGb3IgYSB3aW5kb3cgcHJvYmUgd2UgZG9uJ3Qg
cGVuYWxpemUgdGhlIG5ldCdzIGJ1dCBvbmx5CisJCSAqIHRoZSBhc3NvY2lhdGlvbi4gVGhpcyBt
YXkgZmFpbCBpdCBpZiBTQUNLcyBhcmUgbm90IGNvbWluZworCQkgKiBiYWNrLiBJZiBzYWNrJ3Mg
YXJlIGNvbWluZyB3aXRoIHJ3bmQgbG9ja2VkIGF0IDAsIHdlIHdpbGwKKwkJICogY29udGludWUg
dG8gaG9sZCB0aGluZ3Mgd2FpdGluZyBmb3IgcnduZCB0byByYWlzZQorCQkgKi8KKwkJaWYgKHNj
dHBfdGhyZXNob2xkX21hbmFnZW1lbnQoaW5wLCBzdGNiLCBOVUxMLAorCQkgICAgc3RjYi0+YXNv
Yy5tYXhfc2VuZF90aW1lcykpIHsKKwkJCS8qIEFzc29jaWF0aW9uIHdhcyBkZXN0cm95ZWQgKi8K
KwkJCXJldHVybiAoMSk7CisJCX0KKwl9CisJaWYgKHN0Y2ItPmFzb2Muc2N0cF9jbXRfb25fb2Zm
ID4gMCkgeworCQlpZiAobmV0LT5wZl90aHJlc2hvbGQgPCBuZXQtPmZhaWx1cmVfdGhyZXNob2xk
KSB7CisJCQlhbHQgPSBzY3RwX2ZpbmRfYWx0ZXJuYXRlX25ldChzdGNiLCBuZXQsIDIpOworCQl9
IGVsc2UgeworCQkgICAgICAgIC8qCisJCQkgKiBDTVQ6IFVzaW5nIFJUWF9TU1RIUkVTSCBwb2xp
Y3kgZm9yIENNVC4KKwkJCSAqIElmIENNVCBpcyBiZWluZyB1c2VkLCB0aGVuIHBpY2sgZGVzdCB3
aXRoCisJCQkgKiBsYXJnZXN0IHNzdGhyZXNoIGZvciBhbnkgcmV0cmFuc21pc3Npb24uCisJCQkg
Ki8KKwkJCWFsdCA9IHNjdHBfZmluZF9hbHRlcm5hdGVfbmV0KHN0Y2IsIG5ldCwgMSk7CisJCQkv
KgorCQkJICogQ1VDdjI6IElmIGEgZGlmZmVyZW50IGRlc3QgaXMgcGlja2VkIGZvcgorCQkJICog
dGhlIHJldHJhbnNtaXNzaW9uLCB0aGVuIG5ldworCQkJICogKHJ0eC0pcHNldWRvX2N1bWFjayBu
ZWVkcyB0byBiZSB0cmFja2VkCisJCQkgKiBmb3Igb3JpZyBkZXN0LiBMZXQgQ1VDdjIgdHJhY2sg
bmV3IChydHgtKQorCQkJICogcHNldWRvLWN1bWFjayBhbHdheXMuCisJCQkgKi8KKwkJCW5ldC0+
ZmluZF9wc2V1ZG9fY3VtYWNrID0gMTsKKwkJCW5ldC0+ZmluZF9ydHhfcHNldWRvX2N1bWFjayA9
IDE7CisJCX0KKwl9IGVsc2UgeworCQlhbHQgPSBzY3RwX2ZpbmRfYWx0ZXJuYXRlX25ldChzdGNi
LCBuZXQsIDApOworCX0KKworCW51bV9tayA9IDA7CisJbnVtX2FiYW5kb25lZCA9IDA7CisJKHZv
aWQpc2N0cF9tYXJrX2FsbF9mb3JfcmVzZW5kKHN0Y2IsIG5ldCwgYWx0LCB3aW5fcHJvYmUsCisJ
CQkJICAgICAgJm51bV9taywgJm51bV9hYmFuZG9uZWQpOworCS8qIEZSIExvc3MgcmVjb3Zlcnkg
anVzdCBlbmRlZCB3aXRoIHRoZSBUMy4gKi8KKwlzdGNiLT5hc29jLmZhc3RfcmV0cmFuX2xvc3Nf
cmVjb3ZlcnkgPSAwOworCisJLyogQ01UIEZSIGxvc3MgcmVjb3ZlcnkgZW5kZWQgd2l0aCB0aGUg
VDMgKi8KKwluZXQtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgPSAwOworCWlmICgoc3RjYi0+
YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9jd25kX25ld190cmFuc21pc3Npb25fYmVnaW5zKSAmJgor
CSAgICAobmV0LT5mbGlnaHRfc2l6ZSA9PSAwKSkgeworCQkoKnN0Y2ItPmFzb2MuY2NfZnVuY3Rp
b25zLnNjdHBfY3duZF9uZXdfdHJhbnNtaXNzaW9uX2JlZ2lucykoc3RjYiwgbmV0KTsKKwl9CisK
KwkvKgorCSAqIHNldHVwIHRoZSBzYXQgbG9zcyByZWNvdmVyeSB0aGF0IHByZXZlbnRzIHNhdGVs
bGl0ZSBjd25kIGFkdmFuY2UuCisJICovCisJc3RjYi0+YXNvYy5zYXRfdDNfbG9zc19yZWNvdmVy
eSA9IDE7CisJc3RjYi0+YXNvYy5zYXRfdDNfcmVjb3ZlcnlfdHNuID0gc3RjYi0+YXNvYy5zZW5k
aW5nX3NlcTsKKworCS8qIEJhY2tvZmYgdGhlIHRpbWVyIGFuZCBjd25kICovCisJc2N0cF9iYWNr
b2ZmX29uX3RpbWVvdXQoc3RjYiwgbmV0LCB3aW5fcHJvYmUsIG51bV9taywgbnVtX2FiYW5kb25l
ZCk7CisJaWYgKCghKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpKSB8fAor
CSAgICAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1BGKSkgeworCQkvKiBNb3ZlIGFsbCBw
ZW5kaW5nIG92ZXIgdG9vICovCisJCXNjdHBfbW92ZV9jaHVua3NfZnJvbV9uZXQoc3RjYiwgbmV0
KTsKKworCQkvKiBHZXQgdGhlIGFkZHJlc3MgdGhhdCBmYWlsZWQsIHRvCisJCSAqIGZvcmNlIGEg
bmV3IHNyYyBhZGRyZXNzIHNlbGVjdG9uIGFuZAorCQkgKiBhIHJvdXRlIGFsbG9jYXRpb24uCisJ
CSAqLworCQlpZiAobmV0LT5yby5fc19hZGRyKSB7CisJCQlzY3RwX2ZyZWVfaWZhKG5ldC0+cm8u
X3NfYWRkcik7CisJCQluZXQtPnJvLl9zX2FkZHIgPSBOVUxMOworCQl9CisJCW5ldC0+c3JjX2Fk
ZHJfc2VsZWN0ZWQgPSAwOworCisJCS8qIEZvcmNlIGEgcm91dGUgYWxsb2NhdGlvbiB0b28gKi8K
KyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlS
T19OSEZSRUUoJm5ldC0+cm8pOworI2Vsc2UKKwkJaWYgKG5ldC0+cm8ucm9fcnQpIHsKKwkJCVJU
RlJFRShuZXQtPnJvLnJvX3J0KTsKKwkJCW5ldC0+cm8ucm9fcnQgPSBOVUxMOworCQl9CisjZW5k
aWYKKworCQkvKiBXYXMgaXQgb3VyIHByaW1hcnk/ICovCisJCWlmICgoc3RjYi0+YXNvYy5wcmlt
YXJ5X2Rlc3RpbmF0aW9uID09IG5ldCkgJiYgKGFsdCAhPSBuZXQpKSB7CisJCQkvKgorCQkJICog
WWVzLCBub3RlIGl0IGFzIHN1Y2ggYW5kIGZpbmQgYW4gYWx0ZXJuYXRlIG5vdGU6CisJCQkgKiB0
aGlzIG1lYW5zIEhCIGNvZGUgbXVzdCB1c2UgdGhpcyB0byByZXNlbnQgdGhlCisJCQkgKiBwcmlt
YXJ5IGlmIGl0IGdvZXMgYWN0aXZlIEFORCBpZiBzb21lb25lIGRvZXMgYQorCQkJICogY2hhbmdl
LXByaW1hcnkgdGhlbiB0aGlzIGZsYWcgbXVzdCBiZSBjbGVhcmVkCisJCQkgKiBmcm9tIGFueSBu
ZXQgc3RydWN0dXJlcy4KKwkJCSAqLworCQkJaWYgKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSB7CisJ
CQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKTsKKwkJCX0KKwkJ
CXN0Y2ItPmFzb2MuYWx0ZXJuYXRlID0gYWx0OworCQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFz
b2MuYWx0ZXJuYXRlLT5yZWZfY291bnQsIDEpOworCQl9CisJfQorCS8qCisJICogU3BlY2lhbCBj
YXNlIGZvciBjb29raWUtZWNobydlZCBjYXNlLCB3ZSBkb24ndCBkbyBvdXRwdXQgYnV0IG11c3QK
KwkgKiBhd2FpdCB0aGUgQ09PS0lFLUFDSyBiZWZvcmUgcmV0cmFuc21pc3Npb24KKwkgKi8KKwlp
ZiAoU0NUUF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEKSB7CisJ
CS8qCisJCSAqIEhlcmUgd2UganVzdCByZXNldCB0aGUgdGltZXIgYW5kIHN0YXJ0IGFnYWluIHNp
bmNlIHdlCisJCSAqIGhhdmUgbm90IGVzdGFibGlzaGVkIHRoZSBhc29jCisJCSAqLworCQlzY3Rw
X3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5ELCBpbnAsIHN0Y2IsIG5ldCk7CisJCXJl
dHVybiAoMCk7CisJfQorCWlmIChzdGNiLT5hc29jLnByc2N0cF9zdXBwb3J0ZWQpIHsKKwkJc3Ry
dWN0IHNjdHBfdG1pdF9jaHVuayAqbGNoazsKKworCQlsY2hrID0gc2N0cF90cnlfYWR2YW5jZV9w
ZWVyX2Fja19wb2ludChzdGNiLCAmc3RjYi0+YXNvYyk7CisJCS8qIEMzLiBTZWUgaWYgd2UgbmVl
ZCB0byBzZW5kIGEgRndkLVRTTiAqLworCQlpZiAoU0NUUF9UU05fR1Qoc3RjYi0+YXNvYy5hZHZh
bmNlZF9wZWVyX2Fja19wb2ludCwgc3RjYi0+YXNvYy5sYXN0X2Fja2VkX3NlcSkpIHsKKwkJCXNl
bmRfZm9yd2FyZF90c24oc3RjYiwgJnN0Y2ItPmFzb2MpOworCQkJZm9yICg7IGxjaGsgIT0gTlVM
TDsgbGNoayA9IFRBSUxRX05FWFQobGNoaywgc2N0cF9uZXh0KSkgeworCQkJCWlmIChsY2hrLT53
aG9UbyAhPSBOVUxMKSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChsY2hrICE9
IE5VTEwpIHsKKwkJCQkvKiBBc3N1cmUgYSB0aW1lciBpcyB1cCAqLworCQkJCXNjdHBfdGltZXJf
c3RhcnQoU0NUUF9USU1FUl9UWVBFX1NFTkQsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIGxjaGstPndo
b1RvKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdf
bGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7CisJCXNjdHBfbG9nX2N3bmQoc3Rj
YiwgbmV0LCBuZXQtPmN3bmQsIFNDVFBfQ1dORF9MT0dfRlJPTV9SVFgpOworCX0KKwlyZXR1cm4g
KDApOworfQorCitpbnQKK3NjdHBfdDFpbml0X3RpbWVyKHN0cnVjdCBzY3RwX2lucGNiICppbnAs
CisgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkK
K3sKKwkvKiBidW1wIHRoZSB0aHJlc2hvbGRzICovCisJaWYgKHN0Y2ItPmFzb2MuZGVsYXllZF9j
b25uZWN0aW9uKSB7CisJCS8qCisJCSAqIHNwZWNpYWwgaG9vayBmb3IgZGVsYXllZCBjb25uZWN0
aW9uLiBUaGUgbGlicmFyeSBkaWQgTk9UCisJCSAqIGNvbXBsZXRlIHRoZSByZXN0IG9mIGl0cyBz
ZW5kcy4KKwkJICovCisJCXN0Y2ItPmFzb2MuZGVsYXllZF9jb25uZWN0aW9uID0gMDsKKwkJc2N0
cF9zZW5kX2luaXRpYXRlKGlucCwgc3RjYiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJcmV0dXJu
ICgwKTsKKwl9CisJaWYgKFNDVFBfR0VUX1NUQVRFKHN0Y2IpICE9IFNDVFBfU1RBVEVfQ09PS0lF
X1dBSVQpIHsKKwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKHNjdHBfdGhyZXNob2xkX21hbmFnZW1l
bnQoaW5wLCBzdGNiLCBuZXQsCisJICAgIHN0Y2ItPmFzb2MubWF4X2luaXRfdGltZXMpKSB7CisJ
CS8qIEFzc29jaWF0aW9uIHdhcyBkZXN0cm95ZWQgKi8KKwkJcmV0dXJuICgxKTsKKwl9CisJc3Rj
Yi0+YXNvYy5kcm9wcGVkX3NwZWNpYWxfY250ID0gMDsKKwlzY3RwX2JhY2tvZmZfb25fdGltZW91
dChzdGNiLCBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24sIDEsIDAsIDApOworCWlmIChz
dGNiLT5hc29jLmluaXRpYWxfaW5pdF9ydG9fbWF4IDwgbmV0LT5SVE8pIHsKKwkJbmV0LT5SVE8g
PSBzdGNiLT5hc29jLmluaXRpYWxfaW5pdF9ydG9fbWF4OworCX0KKwlpZiAoc3RjYi0+YXNvYy5u
dW1uZXRzID4gMSkgeworCQkvKiBJZiB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgYWRkciB1c2UgaXQg
Ki8KKwkJc3RydWN0IHNjdHBfbmV0cyAqYWx0OworCisJCWFsdCA9IHNjdHBfZmluZF9hbHRlcm5h
dGVfbmV0KHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwgMCk7CisJCWlmIChh
bHQgIT0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uKSB7CisJCQlzY3RwX21vdmVfY2h1
bmtzX2Zyb21fbmV0KHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbik7CisJCQlz
dGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24gPSBhbHQ7CisJCX0KKwl9CisJLyogU2VuZCBv
dXQgYSBuZXcgaW5pdCAqLworCXNjdHBfc2VuZF9pbml0aWF0ZShpbnAsIHN0Y2IsIFNDVFBfU09f
Tk9UX0xPQ0tFRCk7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIEZvciBjb29raWUgYW5kIGFz
Y29uZiB3ZSBhY3R1YWxseSBuZWVkIHRvIGZpbmQgYW5kIG1hcmsgZm9yIHJlc2VuZCwgdGhlbgor
ICogaW5jcmVtZW50IHRoZSByZXNlbmQgY291bnRlciAoYWZ0ZXIgYWxsIHRoZSB0aHJlc2hvbGQg
bWFuYWdlbWVudCBzdHVmZiBvZgorICogY291cnNlKS4KKyAqLworaW50CitzY3RwX2Nvb2tpZV90
aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwK
KyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQgU0NUUF9VTlVTRUQpCit7CisJc3RydWN0IHNjdHBf
bmV0cyAqYWx0OworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNvb2tpZTsKKworCS8qIGZpcnN0
IGJlZm9yZSBhbGwgZWxzZSB3ZSBtdXN0IGZpbmQgdGhlIGNvb2tpZSAqLworCVRBSUxRX0ZPUkVB
Q0goY29va2llLCAmc3RjYi0+YXNvYy5jb250cm9sX3NlbmRfcXVldWUsIHNjdHBfbmV4dCkgewor
CQlpZiAoY29va2llLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9DT09LSUVfRUNITykgeworCQkJ
YnJlYWs7CisJCX0KKwl9CisJaWYgKGNvb2tpZSA9PSBOVUxMKSB7CisJCWlmIChTQ1RQX0dFVF9T
VEFURShzdGNiKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQpIHsKKwkJCS8qIEZPT0JBUiEg
Ki8KKwkJCXN0cnVjdCBtYnVmICpvcF9lcnI7CisKKwkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVf
Y2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKKwkJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIkNvb2tpZSB0aW1lciBleHBpcmVkLCBidXQgbm8gY29va2ll
Iik7CisJCQlpbnAtPmxhc3RfYWJvcnRfY29kZSA9IFNDVFBfRlJPTV9TQ1RQX1RJTUVSICsgU0NU
UF9MT0NfMzsKKwkJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oaW5wLCBzdGNiLCBvcF9lcnIs
IFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCX0gZWxzZSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQkJ
cGFuaWMoIkNvb2tpZSB0aW1lciBleHBpcmVzIGluIHdyb25nIHN0YXRlPyIpOworI2Vsc2UKKwkJ
CVNDVFBfUFJJTlRGKCJTdHJhbmdlIGluIHN0YXRlICVkIG5vdCBjb29raWUtZWNob2VkIHlldCBj
LWUgdGltZXIgZXhwaXJlcz9cbiIsIFNDVFBfR0VUX1NUQVRFKHN0Y2IpKTsKKwkJCXJldHVybiAo
MCk7CisjZW5kaWYKKwkJfQorCQlyZXR1cm4gKDApOworCX0KKwkvKiBPayB3ZSBmb3VuZCB0aGUg
Y29va2llLCB0aHJlc2hvbGQgbWFuYWdlbWVudCBuZXh0ICovCisJaWYgKHNjdHBfdGhyZXNob2xk
X21hbmFnZW1lbnQoaW5wLCBzdGNiLCBjb29raWUtPndob1RvLAorCSAgICBzdGNiLT5hc29jLm1h
eF9pbml0X3RpbWVzKSkgeworCQkvKiBBc3NvYyBpcyBvdmVyICovCisJCXJldHVybiAoMSk7CisJ
fQorCS8qCisJICogQ2xlYXJlZCB0aHJlc2hvbGQgbWFuYWdlbWVudCwgbm93IGxldHMgYmFja29m
ZiB0aGUgYWRkcmVzcworCSAqIGFuZCBzZWxlY3QgYW4gYWx0ZXJuYXRlCisJICovCisJc3RjYi0+
YXNvYy5kcm9wcGVkX3NwZWNpYWxfY250ID0gMDsKKwlzY3RwX2JhY2tvZmZfb25fdGltZW91dChz
dGNiLCBjb29raWUtPndob1RvLCAxLCAwLCAwKTsKKwlhbHQgPSBzY3RwX2ZpbmRfYWx0ZXJuYXRl
X25ldChzdGNiLCBjb29raWUtPndob1RvLCAwKTsKKwlpZiAoYWx0ICE9IGNvb2tpZS0+d2hvVG8p
IHsKKwkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNvb2tpZS0+d2hvVG8pOworCQljb29raWUtPndo
b1RvID0gYWx0OworCQlhdG9taWNfYWRkX2ludCgmYWx0LT5yZWZfY291bnQsIDEpOworCX0KKwkv
KiBOb3cgbWFyayB0aGUgcmV0cmFuIGluZm8gKi8KKwlpZiAoY29va2llLT5zZW50ICE9IFNDVFBf
REFUQUdSQU1fUkVTRU5EKSB7CisJCXNjdHBfdWNvdW50X2luY3Ioc3RjYi0+YXNvYy5zZW50X3F1
ZXVlX3JldHJhbl9jbnQpOworCX0KKwljb29raWUtPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1JFU0VO
RDsKKwljb29raWUtPmZsYWdzIHw9IENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LOworCS8qCisJICog
Tm93IGNhbGwgdGhlIG91dHB1dCByb3V0aW5lIHRvIGtpY2sgb3V0IHRoZSBjb29raWUgYWdhaW4s
IE5vdGUgd2UKKwkgKiBkb24ndCBtYXJrIGFueSBjaHVua3MgZm9yIHJldHJhbiBzbyB0aGF0IEZS
IHdpbGwgbmVlZCB0byBraWNrIGluCisJICogdG8gbW92ZSB0aGVzZSAob3IgYSBzZW5kIHRpbWVy
KS4KKwkgKi8KKwlyZXR1cm4gKDApOworfQorCitpbnQKK3NjdHBfc3RycmVzZXRfdGltZXIoc3Ry
dWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiKQoreworCXN0cnVjdCBz
Y3RwX25ldHMgKmFsdCwgKm5ldDsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpzdHJyc3QgPSBO
VUxMLCAqY2hrID0gTlVMTDsKKworCWlmIChzdGNiLT5hc29jLnN0cmVhbV9yZXNldF9vdXRzdGFu
ZGluZyA9PSAwKSB7CisJCXJldHVybiAoMCk7CisJfQorCS8qIGZpbmQgdGhlIGV4aXN0aW5nIFNU
UlJFU0VULCB3ZSB1c2UgdGhlIHNlcSBudW1iZXIgd2Ugc2VudCBvdXQgb24gKi8KKwkodm9pZClz
Y3RwX2ZpbmRfc3RyZWFtX3Jlc2V0KHN0Y2IsIHN0Y2ItPmFzb2Muc3RyX3Jlc2V0X3NlcV9vdXQs
ICZzdHJyc3QpOworCWlmIChzdHJyc3QgPT0gTlVMTCkgeworCQlyZXR1cm4gKDApOworCX0KKwlu
ZXQgPSBzdHJyc3QtPndob1RvOworCS8qIGRvIHRocmVzaG9sZCBtYW5hZ2VtZW50ICovCisJaWYg
KHNjdHBfdGhyZXNob2xkX21hbmFnZW1lbnQoaW5wLCBzdGNiLCBuZXQsIHN0Y2ItPmFzb2MubWF4
X3NlbmRfdGltZXMpKSB7CisJCS8qIEFzc29jIGlzIG92ZXIgKi8KKwkJcmV0dXJuICgxKTsKKwl9
CisJLyoKKwkgKiBDbGVhcmVkIHRocmVzaG9sZCBtYW5hZ2VtZW50LCBub3cgbGV0cyBiYWNrb2Zm
IHRoZSBhZGRyZXNzCisJICogYW5kIHNlbGVjdCBhbiBhbHRlcm5hdGUKKwkgKi8KKwlzY3RwX2Jh
Y2tvZmZfb25fdGltZW91dChzdGNiLCBuZXQsIDEsIDAsIDApOworCWFsdCA9IHNjdHBfZmluZF9h
bHRlcm5hdGVfbmV0KHN0Y2IsIG5ldCwgMCk7CisJc3RycnN0LT53aG9UbyA9IGFsdDsKKwlhdG9t
aWNfYWRkX2ludCgmYWx0LT5yZWZfY291bnQsIDEpOworCisJLyogU2VlIGlmIGEgRUNOIEVjaG8g
aXMgYWxzbyBzdHJhbmRlZCAqLworCVRBSUxRX0ZPUkVBQ0goY2hrLCAmc3RjYi0+YXNvYy5jb250
cm9sX3NlbmRfcXVldWUsIHNjdHBfbmV4dCkgeworCQlpZiAoKGNoay0+d2hvVG8gPT0gbmV0KSAm
JgorCQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfRUNOX0VDSE8pKSB7CisJCQlz
Y3RwX2ZyZWVfcmVtb3RlX2FkZHIoY2hrLT53aG9Ubyk7CisJCQlpZiAoY2hrLT5zZW50ICE9IFND
VFBfREFUQUdSQU1fUkVTRU5EKSB7CisJCQkJY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9SRVNF
TkQ7CisJCQkJY2hrLT5mbGFncyB8PSBDSFVOS19GTEFHU19GUkFHTUVOVF9PSzsKKwkJCQlzY3Rw
X3Vjb3VudF9pbmNyKHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250KTsKKwkJCX0KKwkJ
CWNoay0+d2hvVG8gPSBhbHQ7CisJCQlhdG9taWNfYWRkX2ludCgmYWx0LT5yZWZfY291bnQsIDEp
OworCQl9CisJfQorCWlmICghKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUp
KSB7CisJCS8qCisJCSAqIElmIHRoZSBhZGRyZXNzIHdlbnQgdW4tcmVhY2hhYmxlLCB3ZSBuZWVk
IHRvIG1vdmUgdG8KKwkJICogYWx0ZXJuYXRlcyBmb3IgQUxMIGNoaydzIGluIHF1ZXVlCisJCSAq
LworCQlzY3RwX21vdmVfY2h1bmtzX2Zyb21fbmV0KHN0Y2IsIG5ldCk7CisJfQorCXNjdHBfZnJl
ZV9yZW1vdGVfYWRkcihuZXQpOworCisJLyogbWFyayB0aGUgcmV0cmFuIGluZm8gKi8KKwlpZiAo
c3RycnN0LT5zZW50ICE9IFNDVFBfREFUQUdSQU1fUkVTRU5EKQorCQlzY3RwX3Vjb3VudF9pbmNy
KHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250KTsKKwlzdHJyc3QtPnNlbnQgPSBTQ1RQ
X0RBVEFHUkFNX1JFU0VORDsKKwlzdHJyc3QtPmZsYWdzIHw9IENIVU5LX0ZMQUdTX0ZSQUdNRU5U
X09LOworCisJLyogcmVzdGFydCB0aGUgdGltZXIgKi8KKwlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBf
VElNRVJfVFlQRV9TVFJSRVNFVCwgaW5wLCBzdGNiLCBhbHQpOworCXJldHVybiAoMCk7Cit9CisK
K2ludAorc2N0cF9hc2NvbmZfdGltZXIoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNj
dHBfdGNiICpzdGNiLAorCQkgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwlzdHJ1Y3Qgc2N0
cF9uZXRzICphbHQ7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqYXNjb25mLCAqY2hrOworCisJ
LyogaXMgdGhpcyBhIGZpcnN0IHNlbmQsIG9yIGEgcmV0cmFuc21pc3Npb24/ICovCisJaWYgKFRB
SUxRX0VNUFRZKCZzdGNiLT5hc29jLmFzY29uZl9zZW5kX3F1ZXVlKSkgeworCQkvKiBjb21wb3Nl
IGEgbmV3IEFTQ09ORiBjaHVuayBhbmQgc2VuZCBpdCAqLworCQlzY3RwX3NlbmRfYXNjb25mKHN0
Y2IsIG5ldCwgU0NUUF9BRERSX05PVF9MT0NLRUQpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFJl
dHJhbnNtaXNzaW9uIG9mIHRoZSBleGlzdGluZyBBU0NPTkYgaXMgbmVlZGVkCisJCSAqLworCisJ
CS8qIGZpbmQgdGhlIGV4aXN0aW5nIEFTQ09ORiAqLworCQlhc2NvbmYgPSBUQUlMUV9GSVJTVCgm
c3RjYi0+YXNvYy5hc2NvbmZfc2VuZF9xdWV1ZSk7CisJCWlmIChhc2NvbmYgPT0gTlVMTCkgewor
CQkJcmV0dXJuICgwKTsKKwkJfQorCQluZXQgPSBhc2NvbmYtPndob1RvOworCQkvKiBkbyB0aHJl
c2hvbGQgbWFuYWdlbWVudCAqLworCQlpZiAoc2N0cF90aHJlc2hvbGRfbWFuYWdlbWVudChpbnAs
IHN0Y2IsIG5ldCwKKwkJICAgIHN0Y2ItPmFzb2MubWF4X3NlbmRfdGltZXMpKSB7CisJCQkvKiBB
c3NvYyBpcyBvdmVyICovCisJCQlyZXR1cm4gKDEpOworCQl9CisJCWlmIChhc2NvbmYtPnNuZF9j
b3VudCA+IHN0Y2ItPmFzb2MubWF4X3NlbmRfdGltZXMpIHsKKwkJCS8qCisJCQkgKiBTb21ldGhp
bmcgaXMgcm90dGVuOiBvdXIgcGVlciBpcyBub3QgcmVzcG9uZGluZyB0bworCQkJICogQVNDT05G
cyBidXQgYXBwYXJlbnRseSBpcyB0byBvdGhlciBjaHVua3MuICBpLmUuIGl0CisJCQkgKiBpcyBu
b3QgcHJvcGVybHkgaGFuZGxpbmcgdGhlIGNodW5rIHR5cGUgdXBwZXIgYml0cy4KKwkJCSAqIE1h
cmsgdGhpcyBwZWVyIGFzIEFTQ09ORiBpbmNhcGFibGUgYW5kIGNsZWFudXAuCisJCQkgKi8KKwkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19USU1FUjEsICJhc2NvbmZfdGltZXI6IFBlZXIgaGFzIG5vdCBy
ZXNwb25kZWQgdG8gb3VyIHJlcGVhdGVkIEFTQ09ORnNcbiIpOworCQkJc2N0cF9hc2NvbmZfY2xl
YW51cChzdGNiKTsKKwkJCXJldHVybiAoMCk7CisJCX0KKwkJLyoKKwkJICogY2xlYXJlZCB0aHJl
c2hvbGQgbWFuYWdlbWVudCwgc28gbm93IGJhY2tvZmYgdGhlIG5ldCBhbmQKKwkJICogc2VsZWN0
IGFuIGFsdGVybmF0ZQorCQkgKi8KKwkJc2N0cF9iYWNrb2ZmX29uX3RpbWVvdXQoc3RjYiwgbmV0
LCAxLCAwLCAwKTsKKwkJYWx0ID0gc2N0cF9maW5kX2FsdGVybmF0ZV9uZXQoc3RjYiwgbmV0LCAw
KTsKKwkJaWYgKGFzY29uZi0+d2hvVG8gIT0gYWx0KSB7CisJCQlhc2NvbmYtPndob1RvID0gYWx0
OworCQkJYXRvbWljX2FkZF9pbnQoJmFsdC0+cmVmX2NvdW50LCAxKTsKKwkJfQorCisJCS8qIFNl
ZSBpZiBhbiBFQ04gRWNobyBpcyBhbHNvIHN0cmFuZGVkICovCisJCVRBSUxRX0ZPUkVBQ0goY2hr
LCAmc3RjYi0+YXNvYy5jb250cm9sX3NlbmRfcXVldWUsIHNjdHBfbmV4dCkgeworCQkJaWYgKChj
aGstPndob1RvID09IG5ldCkgJiYKKwkJCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NU
UF9FQ05fRUNITykpIHsKKwkJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoY2hrLT53aG9Ubyk7CisJ
CQkJY2hrLT53aG9UbyA9IGFsdDsKKwkJCQlpZiAoY2hrLT5zZW50ICE9IFNDVFBfREFUQUdSQU1f
UkVTRU5EKSB7CisJCQkJCWNoay0+c2VudCA9IFNDVFBfREFUQUdSQU1fUkVTRU5EOworCQkJCQlj
aGstPmZsYWdzIHw9IENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LOworCQkJCQlzY3RwX3Vjb3VudF9p
bmNyKHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250KTsKKwkJCQl9CisJCQkJYXRvbWlj
X2FkZF9pbnQoJmFsdC0+cmVmX2NvdW50LCAxKTsKKwkJCX0KKwkJfQorCQlUQUlMUV9GT1JFQUNI
KGNoaywgJnN0Y2ItPmFzb2MuYXNjb25mX3NlbmRfcXVldWUsIHNjdHBfbmV4dCkgeworCQkJaWYg
KGNoay0+d2hvVG8gIT0gYWx0KSB7CisJCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNoay0+d2hv
VG8pOworCQkJCWNoay0+d2hvVG8gPSBhbHQ7CisJCQkJYXRvbWljX2FkZF9pbnQoJmFsdC0+cmVm
X2NvdW50LCAxKTsKKwkJCX0KKwkJCWlmIChhc2NvbmYtPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9S
RVNFTkQgJiYgY2hrLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fVU5TRU5UKQorCQkJCXNjdHBfdWNv
dW50X2luY3Ioc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOworCQkJY2hrLT5zZW50
ID0gU0NUUF9EQVRBR1JBTV9SRVNFTkQ7CisJCQljaGstPmZsYWdzIHw9IENIVU5LX0ZMQUdTX0ZS
QUdNRU5UX09LOworCQl9CisJCWlmICghKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFD
SEFCTEUpKSB7CisJCQkvKgorCQkJICogSWYgdGhlIGFkZHJlc3Mgd2VudCB1bi1yZWFjaGFibGUs
IHdlIG5lZWQgdG8gbW92ZQorCQkJICogdG8gdGhlIGFsdGVybmF0ZSBmb3IgQUxMIGNodW5rcyBp
biBxdWV1ZQorCQkJICovCisJCQlzY3RwX21vdmVfY2h1bmtzX2Zyb21fbmV0KHN0Y2IsIG5ldCk7
CisJCX0KKwkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKG5ldCk7CisKKwkJLyogbWFyayB0aGUgcmV0
cmFuIGluZm8gKi8KKwkJaWYgKGFzY29uZi0+c2VudCAhPSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkK
KwkJCXNjdHBfdWNvdW50X2luY3Ioc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOwor
CQlhc2NvbmYtPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1JFU0VORDsKKwkJYXNjb25mLT5mbGFncyB8
PSBDSFVOS19GTEFHU19GUkFHTUVOVF9PSzsKKworCQkvKiBzZW5kIGFub3RoZXIgQVNDT05GIGlm
IGFueSBhbmQgd2UgY2FuIGRvICovCisJCXNjdHBfc2VuZF9hc2NvbmYoc3RjYiwgYWx0LCBTQ1RQ
X0FERFJfTk9UX0xPQ0tFRCk7CisJfQorCXJldHVybiAoMCk7Cit9CisKKy8qIE1vYmlsaXR5IGFk
YXB0YXRpb24gKi8KK3ZvaWQKK3NjdHBfZGVsZXRlX3ByaW1fdGltZXIoc3RydWN0IHNjdHBfaW5w
Y2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiKQoreworCWlmIChzdGNiLT5hc29jLmRlbGV0
ZWRfcHJpbWFyeSA9PSBOVUxMKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAiZGVs
ZXRlX3ByaW1fdGltZXI6IGRlbGV0ZWRfcHJpbWFyeSBpcyBub3Qgc3RvcmVkLi4uXG4iKTsKKwkJ
c2N0cF9tb2JpbGl0eV9mZWF0dXJlX29mZihpbnAsIFNDVFBfTU9CSUxJVFlfUFJJTV9ERUxFVEVE
KTsKKwkJcmV0dXJuOworCX0KKwlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgImRlbGV0ZV9w
cmltX3RpbWVyOiBmaW5pc2hlZCB0byBrZWVwIGRlbGV0ZWQgcHJpbWFyeSAiKTsKKwlTQ1RQREJH
X0FERFIoU0NUUF9ERUJVR19BU0NPTkYxLCAmc3RjYi0+YXNvYy5kZWxldGVkX3ByaW1hcnktPnJv
Ll9sX2FkZHIuc2EpOworCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihzdGNiLT5hc29jLmRlbGV0ZWRf
cHJpbWFyeSk7CisJc3RjYi0+YXNvYy5kZWxldGVkX3ByaW1hcnkgPSBOVUxMOworCXNjdHBfbW9i
aWxpdHlfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX01PQklMSVRZX1BSSU1fREVMRVRFRCk7CisJcmV0
dXJuOworfQorCisvKgorICogRm9yIHRoZSBzaHV0ZG93biBhbmQgc2h1dGRvd24tYWNrLCB3ZSBk
byBub3Qga2VlcCBvbmUgYXJvdW5kIG9uIHRoZQorICogY29udHJvbCBxdWV1ZS4gVGhpcyBtZWFu
cyB3ZSBtdXN0IGdlbmVyYXRlIGEgbmV3IG9uZSBhbmQgY2FsbCB0aGUgZ2VuZXJhbAorICogY2h1
bmsgb3V0cHV0IHJvdXRpbmUsIEFGVEVSIGhhdmluZyBkb25lIHRocmVzaG9sZCBtYW5hZ2VtZW50
LgorICogSXQgaXMgYXNzdW1lZCB0aGF0IG5ldCBpcyBub24tTlVMTC4KKyAqLworaW50CitzY3Rw
X3NodXRkb3duX3RpbWVyKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwKKyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJc3RydWN0IHNjdHBfbmV0cyAq
YWx0OworCisJLyogZmlyc3QgdGhyZXNob2xkIG1hbmFnZW1lbnQgKi8KKwlpZiAoc2N0cF90aHJl
c2hvbGRfbWFuYWdlbWVudChpbnAsIHN0Y2IsIG5ldCwgc3RjYi0+YXNvYy5tYXhfc2VuZF90aW1l
cykpIHsKKwkJLyogQXNzb2MgaXMgb3ZlciAqLworCQlyZXR1cm4gKDEpOworCX0KKwlzY3RwX2Jh
Y2tvZmZfb25fdGltZW91dChzdGNiLCBuZXQsIDEsIDAsIDApOworCS8qIHNlY29uZCBzZWxlY3Qg
YW4gYWx0ZXJuYXRpdmUgKi8KKwlhbHQgPSBzY3RwX2ZpbmRfYWx0ZXJuYXRlX25ldChzdGNiLCBu
ZXQsIDApOworCisJLyogdGhpcmQgZ2VuZXJhdGUgYSBzaHV0ZG93biBpbnRvIHRoZSBxdWV1ZSBm
b3Igb3V0IG5ldCAqLworCXNjdHBfc2VuZF9zaHV0ZG93bihzdGNiLCBhbHQpOworCisJLyogZm91
cnRoIHJlc3RhcnQgdGltZXIgKi8KKwlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9T
SFVURE9XTiwgaW5wLCBzdGNiLCBhbHQpOworCXJldHVybiAoMCk7Cit9CisKK2ludAorc2N0cF9z
aHV0ZG93bmFja190aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsCisgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworCXN0cnVjdCBzY3RwX25ldHMg
KmFsdDsKKworCS8qIGZpcnN0IHRocmVzaG9sZCBtYW5hZ2VtZW50ICovCisJaWYgKHNjdHBfdGhy
ZXNob2xkX21hbmFnZW1lbnQoaW5wLCBzdGNiLCBuZXQsIHN0Y2ItPmFzb2MubWF4X3NlbmRfdGlt
ZXMpKSB7CisJCS8qIEFzc29jIGlzIG92ZXIgKi8KKwkJcmV0dXJuICgxKTsKKwl9CisJc2N0cF9i
YWNrb2ZmX29uX3RpbWVvdXQoc3RjYiwgbmV0LCAxLCAwLCAwKTsKKwkvKiBzZWNvbmQgc2VsZWN0
IGFuIGFsdGVybmF0aXZlICovCisJYWx0ID0gc2N0cF9maW5kX2FsdGVybmF0ZV9uZXQoc3RjYiwg
bmV0LCAwKTsKKworCS8qIHRoaXJkIGdlbmVyYXRlIGEgc2h1dGRvd24gaW50byB0aGUgcXVldWUg
Zm9yIG91dCBuZXQgKi8KKwlzY3RwX3NlbmRfc2h1dGRvd25fYWNrKHN0Y2IsIGFsdCk7CisKKwkv
KiBmb3VydGggcmVzdGFydCB0aW1lciAqLworCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9U
WVBFX1NIVVRET1dOQUNLLCBpbnAsIHN0Y2IsIGFsdCk7CisJcmV0dXJuICgwKTsKK30KKworc3Rh
dGljIHZvaWQKK3NjdHBfYXVkaXRfc3RyZWFtX3F1ZXVlc19mb3Jfc2l6ZShzdHJ1Y3Qgc2N0cF9p
bnBjYiAqaW5wLAorICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYikKK3sKKwlzdHJ1Y3Qgc2N0cF9z
dHJlYW1fcXVldWVfcGVuZGluZyAqc3A7CisJdW5zaWduZWQgaW50IGksIGNoa3NfaW5fcXVldWUg
PSAwOworCWludCBiZWluZ19maWxsZWQgPSAwOworCS8qCisJICogVGhpcyBmdW5jdGlvbiBpcyBP
TkxZIGNhbGxlZCB3aGVuIHRoZSBzZW5kL3NlbnQgcXVldWVzIGFyZSBlbXB0eS4KKwkgKi8KKwlp
ZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKGlucCA9PSBOVUxMKSkKKwkJcmV0dXJuOworCisJaWYgKHN0
Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250KSB7CisJCVNDVFBfUFJJTlRGKCJIbW0sIHNl
bnRfcXVldWVfcmV0cmFuX2NudCBpcyBub24temVybyAlZFxuIiwKKwkJCSAgICBzdGNiLT5hc29j
LnNlbnRfcXVldWVfcmV0cmFuX2NudCk7CisJCXN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5f
Y250ID0gMDsKKwl9CisJaWYgKHN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3NfaXNfZW1w
dHkoc3RjYiwgJnN0Y2ItPmFzb2MpKSB7CisJCS8qIE5vIHN0cmVhbSBzY2hlZHVsZXIgaW5mb3Jt
YXRpb24sIGluaXRpYWxpemUgc2NoZWR1bGVyICovCisJCXN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25z
LnNjdHBfc3NfaW5pdChzdGNiLCAmc3RjYi0+YXNvYywgMCk7CisJCWlmICghc3RjYi0+YXNvYy5z
c19mdW5jdGlvbnMuc2N0cF9zc19pc19lbXB0eShzdGNiLCAmc3RjYi0+YXNvYykpIHsKKwkJCS8q
IHllcCwgd2UgbG9zdCBhIHN0cmVhbSBvciB0d28gKi8KKwkJCVNDVFBfUFJJTlRGKCJGb3VuZCBh
ZGRpdGlvbmFsIHN0cmVhbXMgTk9UIG1hbmFnZWQgYnkgc2NoZWR1bGVyLCBjb3JyZWN0ZWRcbiIp
OworCQl9IGVsc2UgeworCQkJLyogbm8gc3RyZWFtcyBsb3N0ICovCisJCQlzdGNiLT5hc29jLnRv
dGFsX291dHB1dF9xdWV1ZV9zaXplID0gMDsKKwkJfQorCX0KKwkvKiBDaGVjayB0byBzZWUgaWYg
c29tZSBkYXRhIHF1ZXVlZCwgaWYgc28gcmVwb3J0IGl0ICovCisJZm9yIChpID0gMDsgaSA8IHN0
Y2ItPmFzb2Muc3RyZWFtb3V0Y250OyBpKyspIHsKKwkJaWYgKCFUQUlMUV9FTVBUWSgmc3RjYi0+
YXNvYy5zdHJtb3V0W2ldLm91dHF1ZXVlKSkgeworCQkJVEFJTFFfRk9SRUFDSChzcCwgJnN0Y2It
PmFzb2Muc3RybW91dFtpXS5vdXRxdWV1ZSwgbmV4dCkgeworCQkJCWlmIChzcC0+bXNnX2lzX2Nv
bXBsZXRlKQorCQkJCQliZWluZ19maWxsZWQrKzsKKwkJCQljaGtzX2luX3F1ZXVlKys7CisJCQl9
CisJCX0KKwl9CisJaWYgKGNoa3NfaW5fcXVldWUgIT0gc3RjYi0+YXNvYy5zdHJlYW1fcXVldWVf
Y250KSB7CisJCVNDVFBfUFJJTlRGKCJIbW0sIHN0cmVhbSBxdWV1ZSBjbnQgYXQgJWQgSSBjb3Vu
dGVkICVkIGluIHN0cmVhbSBvdXQgd2hlZWxcbiIsCisJCQkgICAgc3RjYi0+YXNvYy5zdHJlYW1f
cXVldWVfY250LCBjaGtzX2luX3F1ZXVlKTsKKwl9CisJaWYgKGNoa3NfaW5fcXVldWUpIHsKKwkJ
LyogY2FsbCB0aGUgb3V0cHV0IHF1ZXVlIGZ1bmN0aW9uICovCisJCXNjdHBfY2h1bmtfb3V0cHV0
KGlucCwgc3RjYiwgU0NUUF9PVVRQVVRfRlJPTV9UMywgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJ
aWYgKChUQUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5zZW5kX3F1ZXVlKSkgJiYKKwkJICAgIChUQUlM
UV9FTVBUWSgmc3RjYi0+YXNvYy5zZW50X3F1ZXVlKSkpIHsKKwkJCS8qCisJCQkgKiBQcm9iYWJs
eSBzaG91bGQgZ28gaW4gYW5kIG1ha2UgaXQgZ28gYmFjayB0aHJvdWdoCisJCQkgKiBhbmQgYWRk
IGZyYWdtZW50cyBhbGxvd2VkCisJCQkgKi8KKwkJCWlmIChiZWluZ19maWxsZWQgPT0gMCkgewor
CQkJCVNDVFBfUFJJTlRGKCJTdGlsbCBub3RoaW5nIG1vdmVkICVkIGNodW5rcyBhcmUgc3R1Y2tc
biIsCisJCQkJCSAgICBjaGtzX2luX3F1ZXVlKTsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCVND
VFBfUFJJTlRGKCJGb3VuZCBubyBjaHVua3Mgb24gYW55IHF1ZXVlIHRvdDolbHVcbiIsCisJCQkg
ICAgKHVfbG9uZylzdGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplKTsKKwkJc3RjYi0+
YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSA9IDA7CisJfQorfQorCitpbnQKK3NjdHBfaGVh
cnRiZWF0X3RpbWVyKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAqc3Rj
YiwKKyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJdWludDhfdCBuZXRfd2FzX3BmOwor
CisJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9QRikgeworCQluZXRfd2FzX3BmID0g
MTsKKwl9IGVsc2UgeworCQluZXRfd2FzX3BmID0gMDsKKwl9CisJaWYgKG5ldC0+aGJfcmVzcG9u
ZGVkID09IDApIHsKKwkJaWYgKG5ldC0+cm8uX3NfYWRkcikgeworCQkJLyogSW52YWxpZGF0ZSB0
aGUgc3JjIGFkZHJlc3MgaWYgd2UgZGlkIG5vdCBnZXQKKwkJCSAqIGEgcmVzcG9uc2UgbGFzdCB0
aW1lLgorCQkJICovCisJCQlzY3RwX2ZyZWVfaWZhKG5ldC0+cm8uX3NfYWRkcik7CisJCQluZXQt
PnJvLl9zX2FkZHIgPSBOVUxMOworCQkJbmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDA7CisJCX0K
KwkJc2N0cF9iYWNrb2ZmX29uX3RpbWVvdXQoc3RjYiwgbmV0LCAxLCAwLCAwKTsKKwkJaWYgKHNj
dHBfdGhyZXNob2xkX21hbmFnZW1lbnQoaW5wLCBzdGNiLCBuZXQsIHN0Y2ItPmFzb2MubWF4X3Nl
bmRfdGltZXMpKSB7CisJCQkvKiBBc3NvYyBpcyBvdmVyICovCisJCQlyZXR1cm4gKDEpOworCQl9
CisJfQorCS8qIFplcm8gUEJBLCBpZiBpdCBuZWVkcyBpdCAqLworCWlmIChuZXQtPnBhcnRpYWxf
Ynl0ZXNfYWNrZWQpIHsKKwkJbmV0LT5wYXJ0aWFsX2J5dGVzX2Fja2VkID0gMDsKKwl9CisJaWYg
KChzdGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplID4gMCkgJiYKKwkgICAgKFRBSUxR
X0VNUFRZKCZzdGNiLT5hc29jLnNlbmRfcXVldWUpKSAmJgorCSAgICAoVEFJTFFfRU1QVFkoJnN0
Y2ItPmFzb2Muc2VudF9xdWV1ZSkpKSB7CisJCXNjdHBfYXVkaXRfc3RyZWFtX3F1ZXVlc19mb3Jf
c2l6ZShpbnAsIHN0Y2IpOworCX0KKwlpZiAoIShuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJf
Tk9IQikgJiYKKwkgICAgISgobmV0X3dhc19wZiA9PSAwKSAmJiAobmV0LT5kZXN0X3N0YXRlICYg
U0NUUF9BRERSX1BGKSkpIHsKKwkJLyogd2hlbiBtb3ZlIHRvIFBGIGR1cmluZyB0aHJlc2hvbGQg
bWFuZ2VtZW50LCBhIEhCIGhhcyBiZWVuCisJCSAgIHF1ZXVlZCBpbiB0aGF0IHJvdXRpbmUgKi8K
KwkJdWludDMyX3QgbXNfZ29uZV9ieTsKKworCQlpZiAoKG5ldC0+bGFzdF9zZW50X3RpbWUudHZf
c2VjID4gMCkgfHwKKwkJICAgIChuZXQtPmxhc3Rfc2VudF90aW1lLnR2X3VzZWMgPiAwKSkgewor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQlz
dHJ1Y3QgdGltZXZhbCBkaWZmOworCisJCQlTQ1RQX0dFVFRJTUVfVElNRVZBTCgmZGlmZik7CisJ
CQl0aW1ldmFsc3ViKCZkaWZmLCAmbmV0LT5sYXN0X3NlbnRfdGltZSk7CisjZWxzZQorCQkJc3Ry
dWN0IHRpbWV2YWwgZGlmZiwgbm93OworCisJCQlTQ1RQX0dFVFRJTUVfVElNRVZBTCgmbm93KTsK
KwkJCXRpbWVyc3ViKCZub3csICZuZXQtPmxhc3Rfc2VudF90aW1lLCAmZGlmZik7CisjZW5kaWYK
KwkJCW1zX2dvbmVfYnkgPSAodWludDMyX3QpKGRpZmYudHZfc2VjICogMTAwMCkgKworCQkJICAg
ICAgICAgICAgICh1aW50MzJfdCkoZGlmZi50dl91c2VjIC8gMTAwMCk7CisJCX0gZWxzZSB7CisJ
CQltc19nb25lX2J5ID0gMHhmZmZmZmZmZjsKKwkJfQorCQlpZiAoKG1zX2dvbmVfYnkgPj0gbmV0
LT5oZWFydF9iZWF0X2RlbGF5KSB8fAorCQkgICAgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQURE
Ul9QRikpIHsKKwkJCXNjdHBfc2VuZF9oYihzdGNiLCBuZXQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7
CisJCX0KKwl9CisJcmV0dXJuICgwKTsKK30KKwordm9pZAorc2N0cF9wYXRobXR1X3RpbWVyKHN0
cnVjdCBzY3RwX2lucGNiICppbnAsCisgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgIHN0
cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwl1aW50MzJfdCBuZXh0X210dSwgbXR1OworCisJbmV4
dF9tdHUgPSBzY3RwX2dldF9uZXh0X210dShuZXQtPm10dSk7CisKKwlpZiAoKG5leHRfbXR1ID4g
bmV0LT5tdHUpICYmIChuZXQtPnBvcnQgPT0gMCkpIHsKKwkJaWYgKChuZXQtPnNyY19hZGRyX3Nl
bGVjdGVkID09IDApIHx8CisJCSAgICAobmV0LT5yby5fc19hZGRyID09IE5VTEwpIHx8CisJCSAg
ICAobmV0LT5yby5fc19hZGRyLT5sb2NhbGlmYV9mbGFncyAmIFNDVFBfQkVJTkdfREVMRVRFRCkp
IHsKKwkJCWlmICgobmV0LT5yby5fc19hZGRyICE9IE5VTEwpICYmIChuZXQtPnJvLl9zX2FkZHIt
PmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9CRUlOR19ERUxFVEVEKSkgeworCQkJCXNjdHBfZnJlZV9p
ZmEobmV0LT5yby5fc19hZGRyKTsKKwkJCQluZXQtPnJvLl9zX2FkZHIgPSBOVUxMOworCQkJCW5l
dC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAwOworCQkJfSBlbHNlICBpZiAobmV0LT5yby5fc19hZGRy
ID09IE5VTEwpIHsKKyNpZiBkZWZpbmVkKElORVQ2KSAmJiBkZWZpbmVkKFNDVFBfRU1CRURERURf
VjZfU0NPUEUpCisJCQkJaWYgKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5F
VDYpIHsKKwkJCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJf
aW42ICopJm5ldC0+cm8uX2xfYWRkcjsKKwkJCQkJLyogS0FNRSBoYWNrOiBlbWJlZCBzY29wZWlk
ICovCisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisj
aWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKSB8fCBkZWZpbmVkKEFQUExFX1NOT1dMRU9QQVJEKQor
CQkJCQkodm9pZClpbjZfZW1iZWRzY29wZSgmc2luNi0+c2luNl9hZGRyLCBzaW42LCBOVUxMLCBO
VUxMKTsKKyNlbHNlCisJCQkJCSh2b2lkKWluNl9lbWJlZHNjb3BlKCZzaW42LT5zaW42X2FkZHIs
IHNpbjYsIE5VTEwsIE5VTEwsIE5VTEwpOworI2VuZGlmCisjZWxpZiBkZWZpbmVkKFNDVFBfS0FN
RSkKKwkJCQkJKHZvaWQpc2E2X2VtYmVkc2NvcGUoc2luNiwgTU9EVUxFX0dMT0JBTChpcDZfdXNl
X2RlZnpvbmUpKTsKKyNlbHNlCisJCQkJCSh2b2lkKWluNl9lbWJlZHNjb3BlKCZzaW42LT5zaW42
X2FkZHIsIHNpbjYpOworI2VuZGlmCisJCQkJfQorI2VuZGlmCisKKwkJCQluZXQtPnJvLl9zX2Fk
ZHIgPSBzY3RwX3NvdXJjZV9hZGRyZXNzX3NlbGVjdGlvbihpbnAsCisJCQkJCQkJCQkJc3RjYiwK
KwkJCQkJCQkJCQkoc2N0cF9yb3V0ZV90ICopJm5ldC0+cm8sCisJCQkJCQkJCQkJbmV0LCAwLCBz
dGNiLT5hc29jLnZyZl9pZCk7CisjaWYgZGVmaW5lZChJTkVUNikgJiYgZGVmaW5lZChTQ1RQX0VN
QkVEREVEX1Y2X1NDT1BFKQorCQkJCWlmIChuZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5ID09
IEFGX0lORVQ2KSB7CisJCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYgPSAoc3RydWN0IHNv
Y2thZGRyX2luNiAqKSZuZXQtPnJvLl9sX2FkZHI7CisjaWZkZWYgU0NUUF9LQU1FCisJCQkJCSh2
b2lkKXNhNl9yZWNvdmVyc2NvcGUoc2luNik7CisjZWxzZQorCQkJCQkodm9pZClpbjZfcmVjb3Zl
cnNjb3BlKHNpbjYsICZzaW42LT5zaW42X2FkZHIsIE5VTEwpOworI2VuZGlmCS8qIFNDVFBfS0FN
RSAqLworCQkJCX0KKyNlbmRpZgkvKiBJTkVUNiAqLworCQkJfQorCQkJaWYgKG5ldC0+cm8uX3Nf
YWRkcikKKwkJCQluZXQtPnNyY19hZGRyX3NlbGVjdGVkID0gMTsKKwkJfQorCQlpZiAobmV0LT5y
by5fc19hZGRyKSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKwkJCW10dSA9IFNDVFBfR0FUSEVSX01UVV9GUk9NX1JPVVRFKG5ldC0+cm8uX3Nf
YWRkciwgJm5ldC0+cm8uX3NfYWRkci5zYSwgbmV0LT5yby5yb19uaCk7CisjZWxzZQorCQkJbXR1
ID0gU0NUUF9HQVRIRVJfTVRVX0ZST01fUk9VVEUobmV0LT5yby5fc19hZGRyLCAmbmV0LT5yby5f
c19hZGRyLnNhLCBuZXQtPnJvLnJvX3J0KTsKKyNlbmRpZgorI2lmIGRlZmluZWQoSU5FVCkgfHwg
ZGVmaW5lZChJTkVUNikKKwkJCWlmIChuZXQtPnBvcnQpIHsKKwkJCQltdHUgLT0gc2l6ZW9mKHN0
cnVjdCB1ZHBoZHIpOworCQkJfQorI2VuZGlmCisJCQlpZiAobXR1ID4gbmV4dF9tdHUpIHsKKwkJ
CQluZXQtPm10dSA9IG5leHRfbXR1OworCQkJfSBlbHNlIHsKKwkJCQluZXQtPm10dSA9IG10dTsK
KwkJCX0KKwkJfQorCX0KKwkvKiByZXN0YXJ0IHRoZSB0aW1lciAqLworCXNjdHBfdGltZXJfc3Rh
cnQoU0NUUF9USU1FUl9UWVBFX1BBVEhNVFVSQUlTRSwgaW5wLCBzdGNiLCBuZXQpOworfQorCit2
b2lkCitzY3RwX2F1dG9jbG9zZV90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IpCit7CisJc3RydWN0IHRpbWV2YWwgdG4sICp0aW1fdG91c2U7CisJc3Ry
dWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJdWludDMyX3QgdGlja3NfZ29uZV9ieTsKKwor
CSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZ0bik7CisJaWYgKHN0Y2ItPmFzb2Muc2N0cF9h
dXRvY2xvc2VfdGlja3MgPiAwICYmCisJICAgIHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBf
UENCX0ZMQUdTX0FVVE9DTE9TRSkpIHsKKwkJLyogQXV0byBjbG9zZSBpcyBvbiAqLworCQlhc29j
ID0gJnN0Y2ItPmFzb2M7CisJCS8qIHBpY2sgdGhlIHRpbWUgdG8gdXNlICovCisJCWlmIChhc29j
LT50aW1lX2xhc3RfcmN2ZC50dl9zZWMgPgorCQkgICAgYXNvYy0+dGltZV9sYXN0X3NlbnQudHZf
c2VjKSB7CisJCQl0aW1fdG91c2UgPSAmYXNvYy0+dGltZV9sYXN0X3JjdmQ7CisJCX0gZWxzZSB7
CisJCQl0aW1fdG91c2UgPSAmYXNvYy0+dGltZV9sYXN0X3NlbnQ7CisJCX0KKwkJLyogTm93IGhh
cyBsb25nIGVub3VnaCB0cmFuc3BpcmVkIHRvIGF1dG9jbG9zZT8gKi8KKwkJdGlja3NfZ29uZV9i
eSA9IHNjdHBfc2Vjc190b190aWNrcygodWludDMyX3QpKHRuLnR2X3NlYyAtIHRpbV90b3VzZS0+
dHZfc2VjKSk7CisJCWlmICh0aWNrc19nb25lX2J5ID49IGFzb2MtPnNjdHBfYXV0b2Nsb3NlX3Rp
Y2tzKSB7CisJCQkvKgorCQkJICogYXV0b2Nsb3NlIHRpbWUgaGFzIGhpdCwgY2FsbCB0aGUgb3V0
cHV0IHJvdXRpbmUsCisJCQkgKiB3aGljaCBzaG91bGQgZG8gbm90aGluZyBqdXN0IHRvIGJlIFNV
UkUgd2UgZG9uJ3QKKwkJCSAqIGhhdmUgaGFuZ2luZyBkYXRhLiBXZSBjYW4gdGhlbiBzYWZlbHkg
Y2hlY2sgdGhlCisJCQkgKiBxdWV1ZXMgYW5kIGtub3cgdGhhdCB3ZSBhcmUgY2xlYXIgdG8gc2Vu
ZAorCQkJICogc2h1dGRvd24KKwkJCSAqLworCQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNi
LCBTQ1RQX09VVFBVVF9GUk9NX0FVVE9DTE9TRV9UTVIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJ
CQkvKiBBcmUgd2UgY2xlYW4/ICovCisJCQlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRfcXVl
dWUpICYmCisJCQkgICAgVEFJTFFfRU1QVFkoJmFzb2MtPnNlbnRfcXVldWUpKSB7CisJCQkJLyoK
KwkJCQkgKiB0aGVyZSBpcyBub3RoaW5nIHF1ZXVlZCB0byBzZW5kLCBzbyBJJ20KKwkJCQkgKiBk
b25lLi4uCisJCQkJICovCisJCQkJaWYgKFNDVFBfR0VUX1NUQVRFKHN0Y2IpICE9IFNDVFBfU1RB
VEVfU0hVVERPV05fU0VOVCkgeworCQkJCQkvKiBvbmx5IHNlbmQgU0hVVERPV04gMXN0IHRpbWUg
dGhydSAqLworCQkJCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisKKwkJCQkJaWYgKChTQ1RQX0dF
VF9TVEFURShzdGNiKSA9PSBTQ1RQX1NUQVRFX09QRU4pIHx8CisJCQkJCSAgICAoU0NUUF9HRVRf
U1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkpIHsKKwkJCQkJCVND
VFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKKwkJCQkJfQorCQkJCQlTQ1RQ
X1NFVF9TVEFURShzdGNiLCBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQpOworCQkJCQlzY3RwX3N0
b3BfdGltZXJzX2Zvcl9zaHV0ZG93bihzdGNiKTsKKwkJCQkJaWYgKHN0Y2ItPmFzb2MuYWx0ZXJu
YXRlKSB7CisJCQkJCQluZXQgPSBzdGNiLT5hc29jLmFsdGVybmF0ZTsKKwkJCQkJfSBlbHNlIHsK
KwkJCQkJCW5ldCA9IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbjsKKwkJCQkJfQorCQkJ
CQlzY3RwX3NlbmRfc2h1dGRvd24oc3RjYiwgbmV0KTsKKwkJCQkJc2N0cF90aW1lcl9zdGFydChT
Q1RQX1RJTUVSX1RZUEVfU0hVVERPV04sCisJCQkJCQkJIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5l
dCk7CisJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkQs
CisJCQkJCQkJIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIE5VTEwpOworCQkJCX0KKwkJCX0KKwkJfSBl
bHNlIHsKKwkJCS8qCisJCQkgKiBObyBhdXRvIGNsb3NlIGF0IHRoaXMgdGltZSwgcmVzZXQgdC1v
IHRvIGNoZWNrCisJCQkgKiBsYXRlcgorCQkJICovCisJCQl1aW50MzJfdCB0bXA7CisKKwkJCS8q
IGZvb2wgdGhlIHRpbWVyIHN0YXJ0dXAgdG8gdXNlIHRoZSB0aW1lIGxlZnQgKi8KKwkJCXRtcCA9
IGFzb2MtPnNjdHBfYXV0b2Nsb3NlX3RpY2tzOworCQkJYXNvYy0+c2N0cF9hdXRvY2xvc2VfdGlj
a3MgLT0gdGlja3NfZ29uZV9ieTsKKwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBF
X0FVVE9DTE9TRSwgaW5wLCBzdGNiLCBOVUxMKTsKKwkJCS8qIHJlc3RvcmUgdGhlIHJlYWwgdGlj
ayB2YWx1ZSAqLworCQkJYXNvYy0+c2N0cF9hdXRvY2xvc2VfdGlja3MgPSB0bXA7CisJCX0KKwl9
Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3RpbWVy
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF90aW1lci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMC4uOGNmYmJjYTVkYTFjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdGltZXIuaApAQCAtMCwwICsx
LDEwMyBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisg
KgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxs
IFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAx
MiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAg
ICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICog
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpbmNsdWRl
IDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3Rw
X3RpbWVyLmggMzY1MDcxIDIwMjAtMDktMDEgMjE6MTk6MTRaIG1qZyAkIik7CisjZW5kaWYKKwor
I2lmbmRlZiBfTkVUSU5FVF9TQ1RQX1RJTUVSX0hfCisjZGVmaW5lIF9ORVRJTkVUX1NDVFBfVElN
RVJfSF8KKworI2lmIGRlZmluZWQoX0tFUk5FTCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CisjZGVmaW5lIFNDVFBfUlRUX1NISUZUIDMKKyNkZWZpbmUgU0NUUF9SVFRfVkFSX1NISUZUIDIK
Kworc3RydWN0IHNjdHBfbmV0cyAqCitzY3RwX2ZpbmRfYWx0ZXJuYXRlX25ldChzdHJ1Y3Qgc2N0
cF90Y2IgKiwgc3RydWN0IHNjdHBfbmV0cyAqLCBpbnQpOworCitpbnQKK3NjdHBfdDNyeHRfdGlt
ZXIoc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfdGNiICosCisgICAgc3RydWN0IHNj
dHBfbmV0cyAqKTsKKworaW50CitzY3RwX3QxaW5pdF90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAq
LCBzdHJ1Y3Qgc2N0cF90Y2IgKiwKKyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICopOworCitpbnQKK3Nj
dHBfc2h1dGRvd25fdGltZXIoc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfdGNiICos
CisgICAgc3RydWN0IHNjdHBfbmV0cyAqKTsKKworaW50CitzY3RwX2hlYXJ0YmVhdF90aW1lcihz
dHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwKKyAgICBzdHJ1Y3Qgc2N0cF9u
ZXRzICopOworCitpbnQKK3NjdHBfY29va2llX3RpbWVyKHN0cnVjdCBzY3RwX2lucGNiICosIHN0
cnVjdCBzY3RwX3RjYiAqLAorICAgIHN0cnVjdCBzY3RwX25ldHMgKik7CisKK3ZvaWQKK3NjdHBf
cGF0aG10dV90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwKKyAg
ICBzdHJ1Y3Qgc2N0cF9uZXRzICopOworCitpbnQKK3NjdHBfc2h1dGRvd25hY2tfdGltZXIoc3Ry
dWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfdGNiICosCisgICAgc3RydWN0IHNjdHBfbmV0
cyAqKTsKK2ludAorc2N0cF9zdHJyZXNldF90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1
Y3Qgc2N0cF90Y2IgKik7CisKK2ludAorc2N0cF9hc2NvbmZfdGltZXIoc3RydWN0IHNjdHBfaW5w
Y2IgKiwgc3RydWN0IHNjdHBfdGNiICosCisgICAgc3RydWN0IHNjdHBfbmV0cyAqKTsKKwordm9p
ZAorc2N0cF9kZWxldGVfcHJpbV90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0
cF90Y2IgKik7CisKK3ZvaWQKK3NjdHBfYXV0b2Nsb3NlX3RpbWVyKHN0cnVjdCBzY3RwX2lucGNi
ICosIHN0cnVjdCBzY3RwX3RjYiAqKTsKKwordm9pZCBzY3RwX2F1ZGl0X3JldHJhbm1pc3Npb25f
cXVldWUoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKik7CisKK3ZvaWQgc2N0cF9pdGVyYXRvcl90
aW1lcihzdHJ1Y3Qgc2N0cF9pdGVyYXRvciAqaXQpOworCisjaWYgZGVmaW5lZChfX0FQUExFX18p
ICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKSB8
fCBkZWZpbmVkKEFQUExFX1NOT1dMRU9QQVJEKSB8fCBkZWZpbmVkKEFQUExFX0xJT04pIHx8IGRl
ZmluZWQoQVBQTEVfTU9VTlRBSU5MSU9OKQordm9pZCBzY3RwX3Nsb3d0aW1vKHZvaWQpOworI2Vs
c2UKK3ZvaWQgc2N0cF9nYyhzdHJ1Y3QgaW5wY2JpbmZvICopOworI2VuZGlmCisjZW5kaWYKKyNl
bmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0
cF91aW8uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3Vpby5oCm5ldyBmaWxl
IG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMC4uMTg5NTZmMWExNDNmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdWlvLmgKQEAgLTAsMCAr
MSwxMzUyIEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UK
KyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRh
bGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0y
MDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIGEpIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAq
ICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKgorICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisg
KiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2luY2x1
ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3Nj
dHBfdWlvLmggMzY1MDcxIDIwMjAtMDktMDEgMjE6MTk6MTRaIG1qZyAkIik7CisjZW5kaWYKKwor
I2lmbmRlZiBfTkVUSU5FVF9TQ1RQX1VJT19IXworI2RlZmluZSBfTkVUSU5FVF9TQ1RQX1VJT19I
XworCisjaWYgKGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKSAm
JiBkZWZpbmVkKEtFUk5FTCkpCisjaWZuZGVmIF9LRVJORUwKKyNkZWZpbmUgX0tFUk5FTAorI2Vu
ZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfV0lOMzIpCisjaWYgIWRlZmluZWQoX0tFUk5FTCkK
KyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lu
Y2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNp
ZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNwcmFnbWEgd2Fy
bmluZyhwdXNoKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQyMDApCisjaWYgZGVmaW5lZChf
S0VSTkVMKQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4K
KyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNlbmRpZgorCit0eXBlZGVmIHVpbnQz
Ml90IHNjdHBfYXNzb2NfdDsKKworI2RlZmluZSBTQ1RQX0ZVVFVSRV9BU1NPQyAgMAorI2RlZmlu
ZSBTQ1RQX0NVUlJFTlRfQVNTT0MgMQorI2RlZmluZSBTQ1RQX0FMTF9BU1NPQyAgICAgMgorCitz
dHJ1Y3Qgc2N0cF9ldmVudCB7CisJc2N0cF9hc3NvY190IHNlX2Fzc29jX2lkOworCXVpbnQxNl90
ICAgICBzZV90eXBlOworCXVpbnQ4X3QgICAgICBzZV9vbjsKK307CisKKy8qIENvbXBhdGliaWxp
dHkgdG8gcHJldmlvdXMgZGVmaW5lJ3MgKi8KKyNkZWZpbmUgc2N0cF9zdHJlYW1fcmVzZXRfZXZl
bnRzIHNjdHBfc3RyZWFtX3Jlc2V0X2V2ZW50CisKKy8qIE9uL09mZiBzZXR1cCBmb3Igc3Vic2Ny
aXB0aW9uIHRvIGV2ZW50cyAqLworc3RydWN0IHNjdHBfZXZlbnRfc3Vic2NyaWJlIHsKKwl1aW50
OF90IHNjdHBfZGF0YV9pb19ldmVudDsKKwl1aW50OF90IHNjdHBfYXNzb2NpYXRpb25fZXZlbnQ7
CisJdWludDhfdCBzY3RwX2FkZHJlc3NfZXZlbnQ7CisJdWludDhfdCBzY3RwX3NlbmRfZmFpbHVy
ZV9ldmVudDsKKwl1aW50OF90IHNjdHBfcGVlcl9lcnJvcl9ldmVudDsKKwl1aW50OF90IHNjdHBf
c2h1dGRvd25fZXZlbnQ7CisJdWludDhfdCBzY3RwX3BhcnRpYWxfZGVsaXZlcnlfZXZlbnQ7CisJ
dWludDhfdCBzY3RwX2FkYXB0YXRpb25fbGF5ZXJfZXZlbnQ7CisJdWludDhfdCBzY3RwX2F1dGhl
bnRpY2F0aW9uX2V2ZW50OworCXVpbnQ4X3Qgc2N0cF9zZW5kZXJfZHJ5X2V2ZW50OworCXVpbnQ4
X3Qgc2N0cF9zdHJlYW1fcmVzZXRfZXZlbnQ7Cit9OworCisvKiBhbmNpbGxhcnkgZGF0YSB0eXBl
cyAqLworI2RlZmluZSBTQ1RQX0lOSVQJMHgwMDAxCisjZGVmaW5lIFNDVFBfU05EUkNWCTB4MDAw
MgorI2RlZmluZSBTQ1RQX0VYVFJDVgkweDAwMDMKKyNkZWZpbmUgU0NUUF9TTkRJTkZPICAgIDB4
MDAwNAorI2RlZmluZSBTQ1RQX1JDVklORk8gICAgMHgwMDA1CisjZGVmaW5lIFNDVFBfTlhUSU5G
TyAgICAweDAwMDYKKyNkZWZpbmUgU0NUUF9QUklORk8gICAgIDB4MDAwNworI2RlZmluZSBTQ1RQ
X0FVVEhJTkZPICAgMHgwMDA4CisjZGVmaW5lIFNDVFBfRFNUQUREUlY0ICAweDAwMDkKKyNkZWZp
bmUgU0NUUF9EU1RBRERSVjYgIDB4MDAwYQorCisvKgorICogYW5jaWxsYXJ5IGRhdGEgc3RydWN0
dXJlcworICovCitzdHJ1Y3Qgc2N0cF9pbml0bXNnIHsKKwl1aW50MTZfdCBzaW5pdF9udW1fb3N0
cmVhbXM7CisJdWludDE2X3Qgc2luaXRfbWF4X2luc3RyZWFtczsKKwl1aW50MTZfdCBzaW5pdF9t
YXhfYXR0ZW1wdHM7CisJdWludDE2X3Qgc2luaXRfbWF4X2luaXRfdGltZW87Cit9OworCisvKiBX
ZSBhZGQgOTYgYnl0ZXMgdG8gdGhlIHNpemUgb2Ygc2N0cF9zbmRyY3ZpbmZvLgorICogVGhpcyBt
YWtlcyB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgMTI4IGJ5dGVzIGxvbmcKKyAqIHdoaWNoIGlzIG5p
Y2VseSA2NCBiaXQgYWxpZ25lZCBidXQgYWxzbyBoYXMgcm9vbQorICogZm9yIHVzIHRvIGFkZCBt
b3JlIGFuZCBrZWVwIEFCSSBjb21wYXRpYmlsaXR5LgorICogRm9yIGV4YW1wbGUsIGFscmVhZHkg
d2UgaGF2ZSB0aGUgc2N0cF9leHRyY3ZpbmZvCisgKiB3aGVuIGVuYWJsZWQgd2hpY2ggaXMgNDgg
Ynl0ZXMuCisgKi8KKworLyoKKyAqIFRoZSBhc3NvYyB1cCBuZWVkcyBhIHZlcmZpZAorICogYWxs
IHNlbmRyY3ZpbmZvJ3MgbmVlZCBhIHZlcmZpZCBmb3IgU0VORElORyBvbmx5LgorICovCisKKyNk
ZWZpbmUgU0NUUF9BTElHTl9SRVNWX1BBRCA5MgorI2RlZmluZSBTQ1RQX0FMSUdOX1JFU1ZfUEFE
X1NIT1JUIDc2CisKK3N0cnVjdCBzY3RwX3NuZHJjdmluZm8geworCXVpbnQxNl90IHNpbmZvX3N0
cmVhbTsKKwl1aW50MTZfdCBzaW5mb19zc247CisJdWludDE2X3Qgc2luZm9fZmxhZ3M7CisJdWlu
dDMyX3Qgc2luZm9fcHBpZDsKKwl1aW50MzJfdCBzaW5mb19jb250ZXh0OworCXVpbnQzMl90IHNp
bmZvX3RpbWV0b2xpdmU7CisJdWludDMyX3Qgc2luZm9fdHNuOworCXVpbnQzMl90IHNpbmZvX2N1
bXRzbjsKKwlzY3RwX2Fzc29jX3Qgc2luZm9fYXNzb2NfaWQ7CisJdWludDE2X3Qgc2luZm9fa2V5
bnVtYmVyOworCXVpbnQxNl90IHNpbmZvX2tleW51bWJlcl92YWxpZDsKKwl1aW50OF90ICBfX3Jl
c2VydmVfcGFkW1NDVFBfQUxJR05fUkVTVl9QQURdOworfTsKKworc3RydWN0IHNjdHBfZXh0cmN2
aW5mbyB7CisJdWludDE2X3Qgc2luZm9fc3RyZWFtOworCXVpbnQxNl90IHNpbmZvX3NzbjsKKwl1
aW50MTZfdCBzaW5mb19mbGFnczsKKwl1aW50MzJfdCBzaW5mb19wcGlkOworCXVpbnQzMl90IHNp
bmZvX2NvbnRleHQ7CisJdWludDMyX3Qgc2luZm9fdGltZXRvbGl2ZTsgLyogc2hvdWxkIGhhdmUg
YmVlbiBzaW5mb19wcl92YWx1ZSAqLworCXVpbnQzMl90IHNpbmZvX3RzbjsKKwl1aW50MzJfdCBz
aW5mb19jdW10c247CisJc2N0cF9hc3NvY190IHNpbmZvX2Fzc29jX2lkOworCXVpbnQxNl90IHNl
cmluZm9fbmV4dF9mbGFnczsKKwl1aW50MTZfdCBzZXJpbmZvX25leHRfc3RyZWFtOworCXVpbnQz
Ml90IHNlcmluZm9fbmV4dF9haWQ7CisJdWludDMyX3Qgc2VyaW5mb19uZXh0X2xlbmd0aDsKKwl1
aW50MzJfdCBzZXJpbmZvX25leHRfcHBpZDsKKwl1aW50MTZfdCBzaW5mb19rZXludW1iZXI7CisJ
dWludDE2X3Qgc2luZm9fa2V5bnVtYmVyX3ZhbGlkOworCXVpbnQ4X3QgIF9fcmVzZXJ2ZV9wYWRb
U0NUUF9BTElHTl9SRVNWX1BBRF9TSE9SVF07Cit9OworI2RlZmluZSBzaW5mb19wcl92YWx1ZSBz
aW5mb190aW1ldG9saXZlCisjZGVmaW5lIHNyZWluZm9fbmV4dF9mbGFncyBzZXJpbmZvX25leHRf
ZmxhZ3MKKyNkZWZpbmUgc3JlaW5mb19uZXh0X3N0cmVhbSBzZXJpbmZvX25leHRfc3RyZWFtCisj
ZGVmaW5lIHNyZWluZm9fbmV4dF9haWQgc2VyaW5mb19uZXh0X2FpZAorI2RlZmluZSBzcmVpbmZv
X25leHRfbGVuZ3RoIHNlcmluZm9fbmV4dF9sZW5ndGgKKyNkZWZpbmUgc3JlaW5mb19uZXh0X3Bw
aWQgc2VyaW5mb19uZXh0X3BwaWQKKworc3RydWN0IHNjdHBfc25kaW5mbyB7CisJdWludDE2X3Qg
c25kX3NpZDsKKwl1aW50MTZfdCBzbmRfZmxhZ3M7CisJdWludDMyX3Qgc25kX3BwaWQ7CisJdWlu
dDMyX3Qgc25kX2NvbnRleHQ7CisJc2N0cF9hc3NvY190IHNuZF9hc3NvY19pZDsKK307CisKK3N0
cnVjdCBzY3RwX3ByaW5mbyB7CisJdWludDE2X3QgcHJfcG9saWN5OworCXVpbnQzMl90IHByX3Zh
bHVlOworfTsKKworc3RydWN0IHNjdHBfZGVmYXVsdF9wcmluZm8geworCXVpbnQxNl90IHByX3Bv
bGljeTsKKwl1aW50MzJfdCBwcl92YWx1ZTsKKwlzY3RwX2Fzc29jX3QgcHJfYXNzb2NfaWQ7Cit9
OworCitzdHJ1Y3Qgc2N0cF9hdXRoaW5mbyB7CisJdWludDE2X3QgYXV0aF9rZXludW1iZXI7Cit9
OworCitzdHJ1Y3Qgc2N0cF9yY3ZpbmZvIHsKKwl1aW50MTZfdCByY3Zfc2lkOworCXVpbnQxNl90
IHJjdl9zc247CisJdWludDE2X3QgcmN2X2ZsYWdzOworCXVpbnQzMl90IHJjdl9wcGlkOworCXVp
bnQzMl90IHJjdl90c247CisJdWludDMyX3QgcmN2X2N1bXRzbjsKKwl1aW50MzJfdCByY3ZfY29u
dGV4dDsKKwlzY3RwX2Fzc29jX3QgcmN2X2Fzc29jX2lkOworfTsKKworc3RydWN0IHNjdHBfbnh0
aW5mbyB7CisJdWludDE2X3Qgbnh0X3NpZDsKKwl1aW50MTZfdCBueHRfZmxhZ3M7CisJdWludDMy
X3Qgbnh0X3BwaWQ7CisJdWludDMyX3Qgbnh0X2xlbmd0aDsKKwlzY3RwX2Fzc29jX3Qgbnh0X2Fz
c29jX2lkOworfTsKKworI2RlZmluZSBTQ1RQX05PX05FWFRfTVNHICAgICAgICAgICAweDAwMDAK
KyNkZWZpbmUgU0NUUF9ORVhUX01TR19BVkFJTCAgICAgICAgMHgwMDAxCisjZGVmaW5lIFNDVFBf
TkVYVF9NU0dfSVNDT01QTEVURSAgIDB4MDAwMgorI2RlZmluZSBTQ1RQX05FWFRfTVNHX0lTX1VO
T1JERVJFRCAweDAwMDQKKyNkZWZpbmUgU0NUUF9ORVhUX01TR19JU19OT1RJRklDQVRJT04gMHgw
MDA4CisKK3N0cnVjdCBzY3RwX3JlY3Z2X3JuIHsKKwlzdHJ1Y3Qgc2N0cF9yY3ZpbmZvIHJlY3Z2
X3JjdmluZm87CisJc3RydWN0IHNjdHBfbnh0aW5mbyByZWN2dl9ueHRpbmZvOworfTsKKworI2Rl
ZmluZSBTQ1RQX1JFQ1ZWX05PSU5GTyAgMAorI2RlZmluZSBTQ1RQX1JFQ1ZWX1JDVklORk8gMQor
I2RlZmluZSBTQ1RQX1JFQ1ZWX05YVElORk8gMgorI2RlZmluZSBTQ1RQX1JFQ1ZWX1JOICAgICAg
MworCisjZGVmaW5lIFNDVFBfU0VORFZfTk9JTkZPICAgMAorI2RlZmluZSBTQ1RQX1NFTkRWX1NO
RElORk8gIDEKKyNkZWZpbmUgU0NUUF9TRU5EVl9QUklORk8gICAyCisjZGVmaW5lIFNDVFBfU0VO
RFZfQVVUSElORk8gMworI2RlZmluZSBTQ1RQX1NFTkRWX1NQQSAgICAgIDQKKworc3RydWN0IHNj
dHBfc2VuZHZfc3BhIHsKKwl1aW50MzJfdCBzZW5kdl9mbGFnczsKKwlzdHJ1Y3Qgc2N0cF9zbmRp
bmZvIHNlbmR2X3NuZGluZm87CisJc3RydWN0IHNjdHBfcHJpbmZvIHNlbmR2X3ByaW5mbzsKKwlz
dHJ1Y3Qgc2N0cF9hdXRoaW5mbyBzZW5kdl9hdXRoaW5mbzsKK307CisKKyNkZWZpbmUgU0NUUF9T
RU5EX1NORElORk9fVkFMSUQgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU0NUUF9TRU5EX1BSSU5GT19W
QUxJRCAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU0NUUF9TRU5EX0FVVEhJTkZPX1ZBTElEIDB4MDAw
MDAwMDQKKworc3RydWN0IHNjdHBfc25kX2FsbF9jb21wbGV0ZXMgeworCXVpbnQxNl90IHNhbGxf
c3RyZWFtOworCXVpbnQxNl90IHNhbGxfZmxhZ3M7CisJdWludDMyX3Qgc2FsbF9wcGlkOworCXVp
bnQzMl90IHNhbGxfY29udGV4dDsKKwl1aW50MzJfdCBzYWxsX251bV9zZW50OworCXVpbnQzMl90
IHNhbGxfbnVtX2ZhaWxlZDsKK307CisKKy8qIEZsYWdzIHRoYXQgZ28gaW50byB0aGUgc2luZm8t
PnNpbmZvX2ZsYWdzIGZpZWxkICovCisjZGVmaW5lIFNDVFBfTk9USUZJQ0FUSU9OICAgICAweDAw
MTAgLyogbmV4dCBtZXNzYWdlIGlzIGEgbm90aWZpY2F0aW9uICovCisjZGVmaW5lIFNDVFBfQ09N
UExFVEUgICAgICAgICAweDAwMjAgLyogbmV4dCBtZXNzYWdlIGlzIGNvbXBsZXRlICovCisjZGVm
aW5lIFNDVFBfRU9GICAgICAgICAgICAgICAweDAxMDAgLyogU3RhcnQgc2h1dGRvd24gcHJvY2Vk
dXJlcyAqLworI2RlZmluZSBTQ1RQX0FCT1JUICAgICAgICAgICAgMHgwMjAwIC8qIFNlbmQgYW4g
QUJPUlQgdG8gcGVlciAqLworI2RlZmluZSBTQ1RQX1VOT1JERVJFRCAgICAgICAgMHgwNDAwIC8q
IE1lc3NhZ2UgaXMgdW4tb3JkZXJlZCAqLworI2RlZmluZSBTQ1RQX0FERFJfT1ZFUiAgICAgICAg
MHgwODAwIC8qIE92ZXJyaWRlIHRoZSBwcmltYXJ5LWFkZHJlc3MgKi8KKyNkZWZpbmUgU0NUUF9T
RU5EQUxMICAgICAgICAgIDB4MTAwMCAvKiBTZW5kIHRoaXMgb24gYWxsIGFzc29jaWF0aW9ucyAq
LworI2RlZmluZSBTQ1RQX0VPUiAgICAgICAgICAgICAgMHgyMDAwIC8qIGVuZCBvZiBtZXNzYWdl
IHNpZ25hbCAqLworI2RlZmluZSBTQ1RQX1NBQ0tfSU1NRURJQVRFTFkgMHg0MDAwIC8qIFNldCBJ
LUJpdCAqLworCisjZGVmaW5lIElOVkFMSURfU0lORk9fRkxBRyh4KSAoKCh4KSAmIDB4ZmZmZmZm
ZjAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiB+KFNDVFBfRU9GIHwg
U0NUUF9BQk9SVCB8IFNDVFBfVU5PUkRFUkVEIHxcCisJCQkJICAgICAgICBTQ1RQX0FERFJfT1ZF
UiB8IFNDVFBfU0VOREFMTCB8IFNDVFBfRU9SIHxcCisJCQkJCVNDVFBfU0FDS19JTU1FRElBVEVM
WSkpICE9IDApCisvKiBmb3IgdGhlIGVuZHBvaW50ICovCisKKy8qIFRoZSBsb3dlciBmb3VyIGJp
dHMgaXMgYW4gZW51bWVyYXRpb24gb2YgUFItU0NUUCBwb2xpY2llcyAqLworI2RlZmluZSBTQ1RQ
X1BSX1NDVFBfTk9ORSAweDAwMDAgLyogUmVsaWFibGUgdHJhbnNmZXIgKi8KKyNkZWZpbmUgU0NU
UF9QUl9TQ1RQX1RUTCAgMHgwMDAxIC8qIFRpbWUgYmFzZWQgUFItU0NUUCAqLworI2RlZmluZSBT
Q1RQX1BSX1NDVFBfUFJJTyAweDAwMDIgLyogQnVmZmVyIGJhc2VkIFBSLVNDVFAgKi8KKyNkZWZp
bmUgU0NUUF9QUl9TQ1RQX0JVRiAgU0NUUF9QUl9TQ1RQX1BSSU8gLyogRm9yIGJhY2t3YXJkcyBj
b21wYXRpYmlsaXR5ICovCisjZGVmaW5lIFNDVFBfUFJfU0NUUF9SVFggIDB4MDAwMyAvKiBOdW1i
ZXIgb2YgcmV0cmFuc21pc3Npb25zIGJhc2VkIFBSLVNDVFAgKi8KKyNkZWZpbmUgU0NUUF9QUl9T
Q1RQX01BWCAgU0NUUF9QUl9TQ1RQX1JUWAorI2RlZmluZSBTQ1RQX1BSX1NDVFBfQUxMICAweDAw
MGYgLyogVXNlZCBmb3IgYWdncmVnYXRlZCBzdGF0cyAqLworCisjZGVmaW5lIFBSX1NDVFBfUE9M
SUNZKHgpICAgICAgICAgKCh4KSAmIDB4MGYpCisjZGVmaW5lIFBSX1NDVFBfRU5BQkxFRCh4KSAg
ICAgICAgKChQUl9TQ1RQX1BPTElDWSh4KSAhPSBTQ1RQX1BSX1NDVFBfTk9ORSkgJiYgXAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUFJfU0NUUF9QT0xJQ1koeCkgIT0gU0NU
UF9QUl9TQ1RQX0FMTCkpCisjZGVmaW5lIFBSX1NDVFBfVFRMX0VOQUJMRUQoeCkgICAgKFBSX1ND
VFBfUE9MSUNZKHgpID09IFNDVFBfUFJfU0NUUF9UVEwpCisjZGVmaW5lIFBSX1NDVFBfQlVGX0VO
QUJMRUQoeCkgICAgKFBSX1NDVFBfUE9MSUNZKHgpID09IFNDVFBfUFJfU0NUUF9CVUYpCisjZGVm
aW5lIFBSX1NDVFBfUlRYX0VOQUJMRUQoeCkgICAgKFBSX1NDVFBfUE9MSUNZKHgpID09IFNDVFBf
UFJfU0NUUF9SVFgpCisjZGVmaW5lIFBSX1NDVFBfSU5WQUxJRF9QT0xJQ1koeCkgKFBSX1NDVFBf
UE9MSUNZKHgpID4gU0NUUF9QUl9TQ1RQX01BWCkKKyNkZWZpbmUgUFJfU0NUUF9WQUxJRF9QT0xJ
Q1koeCkgICAoUFJfU0NUUF9QT0xJQ1koeCkgPD0gU0NUUF9QUl9TQ1RQX01BWCkKKworLyogU3Rh
dCdzICovCitzdHJ1Y3Qgc2N0cF9wY2JpbmZvIHsKKwl1aW50MzJfdCBlcF9jb3VudDsKKwl1aW50
MzJfdCBhc29jX2NvdW50OworCXVpbnQzMl90IGxhZGRyX2NvdW50OworCXVpbnQzMl90IHJhZGRy
X2NvdW50OworCXVpbnQzMl90IGNoa19jb3VudDsKKwl1aW50MzJfdCByZWFkcV9jb3VudDsKKwl1
aW50MzJfdCBmcmVlX2NodW5rczsKKwl1aW50MzJfdCBzdHJlYW1fb3F1ZTsKK307CisKK3N0cnVj
dCBzY3RwX3NvY2tzdGF0IHsKKwlzY3RwX2Fzc29jX3Qgc3NfYXNzb2NfaWQ7CisJdWludDMyX3Qg
c3NfdG90YWxfc25kYnVmOworCXVpbnQzMl90IHNzX3RvdGFsX3JlY3ZfYnVmOworfTsKKworLyoK
KyAqIG5vdGlmaWNhdGlvbiBldmVudCBzdHJ1Y3R1cmVzCisgKi8KKworLyoKKyAqIGFzc29jaWF0
aW9uIGNoYW5nZSBldmVudAorICovCitzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UgeworCXVpbnQx
Nl90IHNhY190eXBlOworCXVpbnQxNl90IHNhY19mbGFnczsKKwl1aW50MzJfdCBzYWNfbGVuZ3Ro
OworCXVpbnQxNl90IHNhY19zdGF0ZTsKKwl1aW50MTZfdCBzYWNfZXJyb3I7CisJdWludDE2X3Qg
c2FjX291dGJvdW5kX3N0cmVhbXM7CisJdWludDE2X3Qgc2FjX2luYm91bmRfc3RyZWFtczsKKwlz
Y3RwX2Fzc29jX3Qgc2FjX2Fzc29jX2lkOworCXVpbnQ4X3Qgc2FjX2luZm9bXTsKK307CisKKy8q
IHNhY19zdGF0ZSB2YWx1ZXMgKi8KKyNkZWZpbmUgU0NUUF9DT01NX1VQICAgICAgICAgICAgMHgw
MDAxCisjZGVmaW5lIFNDVFBfQ09NTV9MT1NUICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBTQ1RQ
X1JFU1RBUlQgICAgICAgICAgICAweDAwMDMKKyNkZWZpbmUgU0NUUF9TSFVURE9XTl9DT01QICAg
ICAgMHgwMDA0CisjZGVmaW5lIFNDVFBfQ0FOVF9TVFJfQVNTT0MgICAgIDB4MDAwNQorCisvKiBz
YWNfaW5mbyB2YWx1ZXMgKi8KKyNkZWZpbmUgU0NUUF9BU1NPQ19TVVBQT1JUU19QUgkJCTB4MDEK
KyNkZWZpbmUgU0NUUF9BU1NPQ19TVVBQT1JUU19BVVRICQkweDAyCisjZGVmaW5lIFNDVFBfQVNT
T0NfU1VQUE9SVFNfQVNDT05GCQkweDAzCisjZGVmaW5lIFNDVFBfQVNTT0NfU1VQUE9SVFNfTVVM
VElCVUYJCTB4MDQKKyNkZWZpbmUgU0NUUF9BU1NPQ19TVVBQT1JUU19SRV9DT05GSUcJCTB4MDUK
KyNkZWZpbmUgU0NUUF9BU1NPQ19TVVBQT1JUU19JTlRFUkxFQVZJTkcJMHgwNgorI2RlZmluZSBT
Q1RQX0FTU09DX1NVUFBPUlRTX01BWAkJCTB4MDYKKy8qCisgKiBBZGRyZXNzIGV2ZW50CisgKi8K
K3N0cnVjdCBzY3RwX3BhZGRyX2NoYW5nZSB7CisJdWludDE2X3Qgc3BjX3R5cGU7CisJdWludDE2
X3Qgc3BjX2ZsYWdzOworCXVpbnQzMl90IHNwY19sZW5ndGg7CisJc3RydWN0IHNvY2thZGRyX3N0
b3JhZ2Ugc3BjX2FhZGRyOworCXVpbnQzMl90IHNwY19zdGF0ZTsKKwl1aW50MzJfdCBzcGNfZXJy
b3I7CisJc2N0cF9hc3NvY190IHNwY19hc3NvY19pZDsKK307CisKKy8qIHBhZGRyIHN0YXRlIHZh
bHVlcyAqLworI2RlZmluZSBTQ1RQX0FERFJfQVZBSUxBQkxFCTB4MDAwMQorI2RlZmluZSBTQ1RQ
X0FERFJfVU5SRUFDSEFCTEUJMHgwMDAyCisjZGVmaW5lIFNDVFBfQUREUl9SRU1PVkVECTB4MDAw
MworI2RlZmluZSBTQ1RQX0FERFJfQURERUQJCTB4MDAwNAorI2RlZmluZSBTQ1RQX0FERFJfTUFE
RV9QUklNCTB4MDAwNQorI2RlZmluZSBTQ1RQX0FERFJfQ09ORklSTUVECTB4MDAwNgorCisjZGVm
aW5lIFNDVFBfQUNUSVZFCQkweDAwMDEJLyogU0NUUF9BRERSX1JFQUNIQUJMRSAqLworI2RlZmlu
ZSBTQ1RQX0lOQUNUSVZFCQkweDAwMDIJLyogbmVpdGhlciBTQ1RQX0FERFJfUkVBQ0hBQkxFCisJ
CQkJCSAgIG5vciBTQ1RQX0FERFJfVU5DT05GSVJNRUQgKi8KKyNkZWZpbmUgU0NUUF9VTkNPTkZJ
Uk1FRAkweDAyMDAJLyogU0NUUF9BRERSX1VOQ09ORklSTUVEICovCisKKy8qIHJlbW90ZSBlcnJv
ciBldmVudHMgKi8KK3N0cnVjdCBzY3RwX3JlbW90ZV9lcnJvciB7CisJdWludDE2X3Qgc3JlX3R5
cGU7CisJdWludDE2X3Qgc3JlX2ZsYWdzOworCXVpbnQzMl90IHNyZV9sZW5ndGg7CisJdWludDE2
X3Qgc3JlX2Vycm9yOworCXNjdHBfYXNzb2NfdCBzcmVfYXNzb2NfaWQ7CisJdWludDhfdCBzcmVf
ZGF0YVtdOworfTsKKworLyogZGF0YSBzZW5kIGZhaWx1cmUgZXZlbnQgKGRlcHJlY2F0ZWQpICov
CitzdHJ1Y3Qgc2N0cF9zZW5kX2ZhaWxlZCB7CisJdWludDE2X3Qgc3NmX3R5cGU7CisJdWludDE2
X3Qgc3NmX2ZsYWdzOworCXVpbnQzMl90IHNzZl9sZW5ndGg7CisJdWludDMyX3Qgc3NmX2Vycm9y
OworCXN0cnVjdCBzY3RwX3NuZHJjdmluZm8gc3NmX2luZm87CisJc2N0cF9hc3NvY190IHNzZl9h
c3NvY19pZDsKKwl1aW50OF90IHNzZl9kYXRhW107Cit9OworCisvKiBkYXRhIHNlbmQgZmFpbHVy
ZSBldmVudCAobm90IGRlcHJlY2F0ZWQpICovCitzdHJ1Y3Qgc2N0cF9zZW5kX2ZhaWxlZF9ldmVu
dCB7CisJdWludDE2X3Qgc3NmZV90eXBlOworCXVpbnQxNl90IHNzZmVfZmxhZ3M7CisJdWludDMy
X3Qgc3NmZV9sZW5ndGg7CisJdWludDMyX3Qgc3NmZV9lcnJvcjsKKwlzdHJ1Y3Qgc2N0cF9zbmRp
bmZvIHNzZmVfaW5mbzsKKwlzY3RwX2Fzc29jX3Qgc3NmZV9hc3NvY19pZDsKKwl1aW50OF90ICBz
c2ZlX2RhdGFbXTsKK307CisKKy8qIGZsYWcgdGhhdCBpbmRpY2F0ZXMgc3RhdGUgb2YgZGF0YSAq
LworI2RlZmluZSBTQ1RQX0RBVEFfVU5TRU5UCTB4MDAwMQkvKiBpbnF1ZXVlIG5ldmVyIG9uIHdp
cmUgKi8KKyNkZWZpbmUgU0NUUF9EQVRBX1NFTlQJCTB4MDAwMgkvKiBvbiB3aXJlIGF0IGZhaWx1
cmUgKi8KKworLyogc2h1dGRvd24gZXZlbnQgKi8KK3N0cnVjdCBzY3RwX3NodXRkb3duX2V2ZW50
IHsKKwl1aW50MTZfdCBzc2VfdHlwZTsKKwl1aW50MTZfdCBzc2VfZmxhZ3M7CisJdWludDMyX3Qg
c3NlX2xlbmd0aDsKKwlzY3RwX2Fzc29jX3Qgc3NlX2Fzc29jX2lkOworfTsKKworLyogQWRhcHRh
dGlvbiBsYXllciBpbmRpY2F0aW9uIHN0dWZmICovCitzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2V2
ZW50IHsKKwl1aW50MTZfdCBzYWlfdHlwZTsKKwl1aW50MTZfdCBzYWlfZmxhZ3M7CisJdWludDMy
X3Qgc2FpX2xlbmd0aDsKKwl1aW50MzJfdCBzYWlfYWRhcHRhdGlvbl9pbmQ7CisJc2N0cF9hc3Nv
Y190IHNhaV9hc3NvY19pZDsKK307CisKK3N0cnVjdCBzY3RwX3NldGFkYXB0YXRpb24geworCXVp
bnQzMl90IHNzYl9hZGFwdGF0aW9uX2luZDsKK307CisKKy8qIGNvbXBhdGlibGUgb2xkIHNwZWxs
aW5nICovCitzdHJ1Y3Qgc2N0cF9hZGFwdGlvbl9ldmVudCB7CisJdWludDE2X3Qgc2FpX3R5cGU7
CisJdWludDE2X3Qgc2FpX2ZsYWdzOworCXVpbnQzMl90IHNhaV9sZW5ndGg7CisJdWludDMyX3Qg
c2FpX2FkYXB0aW9uX2luZDsKKwlzY3RwX2Fzc29jX3Qgc2FpX2Fzc29jX2lkOworfTsKKworc3Ry
dWN0IHNjdHBfc2V0YWRhcHRpb24geworCXVpbnQzMl90IHNzYl9hZGFwdGlvbl9pbmQ7Cit9Owor
CisvKgorICogUGFydGlhbCBEZWxpdmVyeSBBUEkgZXZlbnQKKyAqLworc3RydWN0IHNjdHBfcGRh
cGlfZXZlbnQgeworCXVpbnQxNl90IHBkYXBpX3R5cGU7CisJdWludDE2X3QgcGRhcGlfZmxhZ3M7
CisJdWludDMyX3QgcGRhcGlfbGVuZ3RoOworCXVpbnQzMl90IHBkYXBpX2luZGljYXRpb247CisJ
dWludDE2X3QgcGRhcGlfc3RyZWFtOworCXVpbnQxNl90IHBkYXBpX3NlcTsKKwlzY3RwX2Fzc29j
X3QgcGRhcGlfYXNzb2NfaWQ7Cit9OworCisvKiBpbmRpY2F0aW9uIHZhbHVlcyAqLworI2RlZmlu
ZSBTQ1RQX1BBUlRJQUxfREVMSVZFUllfQUJPUlRFRAkweDAwMDEKKworLyoKKyAqIGF1dGhlbnRp
Y2F0aW9uIGtleSBldmVudAorICovCitzdHJ1Y3Qgc2N0cF9hdXRoa2V5X2V2ZW50IHsKKwl1aW50
MTZfdCBhdXRoX3R5cGU7CisJdWludDE2X3QgYXV0aF9mbGFnczsKKwl1aW50MzJfdCBhdXRoX2xl
bmd0aDsKKwl1aW50MTZfdCBhdXRoX2tleW51bWJlcjsKKwl1aW50MTZfdCBhdXRoX2FsdGtleW51
bWJlcjsKKwl1aW50MzJfdCBhdXRoX2luZGljYXRpb247CisJc2N0cF9hc3NvY190IGF1dGhfYXNz
b2NfaWQ7Cit9OworCisvKiBpbmRpY2F0aW9uIHZhbHVlcyAqLworI2RlZmluZSBTQ1RQX0FVVEhf
TkVXX0tFWQkweDAwMDEKKyNkZWZpbmUgU0NUUF9BVVRIX05FV0tFWQlTQ1RQX0FVVEhfTkVXX0tF
WQorI2RlZmluZSBTQ1RQX0FVVEhfTk9fQVVUSAkweDAwMDIKKyNkZWZpbmUgU0NUUF9BVVRIX0ZS
RUVfS0VZCTB4MDAwMworCitzdHJ1Y3Qgc2N0cF9zZW5kZXJfZHJ5X2V2ZW50IHsKKwl1aW50MTZf
dCBzZW5kZXJfZHJ5X3R5cGU7CisJdWludDE2X3Qgc2VuZGVyX2RyeV9mbGFnczsKKwl1aW50MzJf
dCBzZW5kZXJfZHJ5X2xlbmd0aDsKKwlzY3RwX2Fzc29jX3Qgc2VuZGVyX2RyeV9hc3NvY19pZDsK
K307CisKKy8qCisgKiBTdHJlYW0gcmVzZXQgZXZlbnQgLSBzdWJzY3JpYmUgdG8gU0NUUF9TVFJF
QU1fUkVTRVRfRVZFTlQKKyAqLworc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2V2ZW50IHsKKwl1
aW50MTZfdCBzdHJyZXNldF90eXBlOworCXVpbnQxNl90IHN0cnJlc2V0X2ZsYWdzOworCXVpbnQz
Ml90IHN0cnJlc2V0X2xlbmd0aDsKKwlzY3RwX2Fzc29jX3Qgc3RycmVzZXRfYXNzb2NfaWQ7CisJ
dWludDE2X3Qgc3RycmVzZXRfc3RyZWFtX2xpc3RbXTsKK307CisKKy8qIGZsYWdzIGluIHN0cmVh
bV9yZXNldF9ldmVudCAoc3RycmVzZXRfZmxhZ3MpICovCisjZGVmaW5lIFNDVFBfU1RSRUFNX1JF
U0VUX0lOQ09NSU5HX1NTTiAgMHgwMDAxCisjZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUX09VVEdP
SU5HX1NTTiAgMHgwMDAyCisjZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUX0RFTklFRCAgICAgICAg
MHgwMDA0CisjZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUX0ZBSUxFRCAgICAgICAgMHgwMDA4CisK
Ky8qCisgKiBBc3NvYyByZXNldCBldmVudCAtIHN1YnNjcmliZSB0byBTQ1RQX0FTU09DX1JFU0VU
X0VWRU5UCisgKi8KK3N0cnVjdCBzY3RwX2Fzc29jX3Jlc2V0X2V2ZW50IHsKKwl1aW50MTZfdCAJ
YXNzb2NyZXNldF90eXBlOworCXVpbnQxNl90CWFzc29jcmVzZXRfZmxhZ3M7CisJdWludDMyX3QJ
YXNzb2NyZXNldF9sZW5ndGg7CisJc2N0cF9hc3NvY190CWFzc29jcmVzZXRfYXNzb2NfaWQ7CisJ
dWludDMyX3QJYXNzb2NyZXNldF9sb2NhbF90c247CisJdWludDMyX3QJYXNzb2NyZXNldF9yZW1v
dGVfdHNuOworfTsKKworI2RlZmluZSBTQ1RQX0FTU09DX1JFU0VUX0RFTklFRAkJMHgwMDA0Cisj
ZGVmaW5lIFNDVFBfQVNTT0NfUkVTRVRfRkFJTEVECQkweDAwMDgKKworLyoKKyAqIFN0cmVhbSBj
aGFuZ2UgZXZlbnQgLSBzdWJzY3JpYmUgdG8gU0NUUF9TVFJFQU1fQ0hBTkdFX0VWRU5UCisgKi8K
K3N0cnVjdCBzY3RwX3N0cmVhbV9jaGFuZ2VfZXZlbnQgeworCXVpbnQxNl90CXN0cmNoYW5nZV90
eXBlOworCXVpbnQxNl90CXN0cmNoYW5nZV9mbGFnczsKKwl1aW50MzJfdAlzdHJjaGFuZ2VfbGVu
Z3RoOworCXNjdHBfYXNzb2NfdAlzdHJjaGFuZ2VfYXNzb2NfaWQ7CisJdWludDE2X3QJc3RyY2hh
bmdlX2luc3RybXM7CisJdWludDE2X3QJc3RyY2hhbmdlX291dHN0cm1zOworfTsKKworI2RlZmlu
ZSBTQ1RQX1NUUkVBTV9DSEFOR0VfREVOSUVECTB4MDAwNAorI2RlZmluZSBTQ1RQX1NUUkVBTV9D
SEFOR0VfRkFJTEVECTB4MDAwOAorCisvKiBTQ1RQIG5vdGlmaWNhdGlvbiBldmVudCAqLworc3Ry
dWN0IHNjdHBfdGx2IHsKKwl1aW50MTZfdCBzbl90eXBlOworCXVpbnQxNl90IHNuX2ZsYWdzOwor
CXVpbnQzMl90IHNuX2xlbmd0aDsKK307CisKK3VuaW9uIHNjdHBfbm90aWZpY2F0aW9uIHsKKwlz
dHJ1Y3Qgc2N0cF90bHYgc25faGVhZGVyOworCXN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSBzbl9h
c3NvY19jaGFuZ2U7CisJc3RydWN0IHNjdHBfcGFkZHJfY2hhbmdlIHNuX3BhZGRyX2NoYW5nZTsK
KwlzdHJ1Y3Qgc2N0cF9yZW1vdGVfZXJyb3Igc25fcmVtb3RlX2Vycm9yOworCXN0cnVjdCBzY3Rw
X3NlbmRfZmFpbGVkIHNuX3NlbmRfZmFpbGVkOworCXN0cnVjdCBzY3RwX3NodXRkb3duX2V2ZW50
IHNuX3NodXRkb3duX2V2ZW50OworCXN0cnVjdCBzY3RwX2FkYXB0YXRpb25fZXZlbnQgc25fYWRh
cHRhdGlvbl9ldmVudDsKKwkvKiBjb21wYXRpYmlsaXR5IHNhbWUgYXMgYWJvdmUgKi8KKwlzdHJ1
Y3Qgc2N0cF9hZGFwdGlvbl9ldmVudCBzbl9hZGFwdGlvbl9ldmVudDsKKwlzdHJ1Y3Qgc2N0cF9w
ZGFwaV9ldmVudCBzbl9wZGFwaV9ldmVudDsKKwlzdHJ1Y3Qgc2N0cF9hdXRoa2V5X2V2ZW50IHNu
X2F1dGhfZXZlbnQ7CisJc3RydWN0IHNjdHBfc2VuZGVyX2RyeV9ldmVudCBzbl9zZW5kZXJfZHJ5
X2V2ZW50OworCXN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkX2V2ZW50IHNuX3NlbmRfZmFpbGVkX2V2
ZW50OworCXN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9ldmVudCBzbl9zdHJyZXNldF9ldmVudDsK
KwlzdHJ1Y3Qgc2N0cF9hc3NvY19yZXNldF9ldmVudCAgc25fYXNzb2NyZXNldF9ldmVudDsKKwlz
dHJ1Y3Qgc2N0cF9zdHJlYW1fY2hhbmdlX2V2ZW50IHNuX3N0cmNoYW5nZV9ldmVudDsKK307CisK
Ky8qIG5vdGlmaWNhdGlvbiB0eXBlcyAqLworI2RlZmluZSBTQ1RQX0FTU09DX0NIQU5HRSAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIFNDVFBfUEVFUl9BRERSX0NIQU5HRSAg
ICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgU0NUUF9SRU1PVEVfRVJST1IgICAgICAg
ICAgICAgICAgICAgICAgIDB4MDAwMworI2RlZmluZSBTQ1RQX1NFTkRfRkFJTEVEICAgICAgICAg
ICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFNDVFBfU0hVVERPV05fRVZFTlQgICAgICAg
ICAgICAgICAgICAgICAweDAwMDUKKyNkZWZpbmUgU0NUUF9BREFQVEFUSU9OX0lORElDQVRJT04g
ICAgICAgICAgICAgIDB4MDAwNgorLyogc2FtZSBhcyBhYm92ZSAqLworI2RlZmluZSBTQ1RQX0FE
QVBUSU9OX0lORElDQVRJT04gICAgICAgICAgICAgICAgMHgwMDA2CisjZGVmaW5lIFNDVFBfUEFS
VElBTF9ERUxJVkVSWV9FVkVOVCAgICAgICAgICAgICAweDAwMDcKKyNkZWZpbmUgU0NUUF9BVVRI
RU5USUNBVElPTl9FVkVOVCAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBTQ1RQX1NUUkVB
TV9SRVNFVF9FVkVOVCAgICAgICAgICAgICAgICAgMHgwMDA5CisjZGVmaW5lIFNDVFBfU0VOREVS
X0RSWV9FVkVOVCAgICAgICAgICAgICAgICAgICAweDAwMGEKKyNkZWZpbmUgU0NUUF9OT1RJRklD
QVRJT05TX1NUT1BQRURfRVZFTlQgICAgICAgIDB4MDAwYiAvKiB3ZSBkb24ndCBzZW5kIHRoaXMq
LworI2RlZmluZSBTQ1RQX0FTU09DX1JFU0VUX0VWRU5UICAgICAgICAgICAgICAgICAgMHgwMDBj
CisjZGVmaW5lIFNDVFBfU1RSRUFNX0NIQU5HRV9FVkVOVCAgICAgICAgICAgICAgICAweDAwMGQK
KyNkZWZpbmUgU0NUUF9TRU5EX0ZBSUxFRF9FVkVOVCAgICAgICAgICAgICAgICAgIDB4MDAwZQor
LyoKKyAqIHNvY2tldCBvcHRpb24gc3RydWN0cworICovCisKK3N0cnVjdCBzY3RwX3BhZGRycGFy
YW1zIHsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcHBfYWRkcmVzczsKKwlzY3RwX2Fzc29j
X3Qgc3BwX2Fzc29jX2lkOworCXVpbnQzMl90IHNwcF9oYmludGVydmFsOworCXVpbnQzMl90IHNw
cF9wYXRobXR1OworCXVpbnQzMl90IHNwcF9mbGFnczsKKwl1aW50MzJfdCBzcHBfaXB2Nl9mbG93
bGFiZWw7CisJdWludDE2X3Qgc3BwX3BhdGhtYXhyeHQ7CisJdWludDhfdCBzcHBfZHNjcDsKK307
CisjZGVmaW5lIHNwcF9pcHY0X3RvcyBzcHBfZHNjcAorCisjZGVmaW5lIFNQUF9IQl9FTkFCTEUJ
CTB4MDAwMDAwMDEKKyNkZWZpbmUgU1BQX0hCX0RJU0FCTEUJCTB4MDAwMDAwMDIKKyNkZWZpbmUg
U1BQX0hCX0RFTUFORAkJMHgwMDAwMDAwNAorI2RlZmluZSBTUFBfUE1UVURfRU5BQkxFCTB4MDAw
MDAwMDgKKyNkZWZpbmUgU1BQX1BNVFVEX0RJU0FCTEUJMHgwMDAwMDAxMAorI2RlZmluZSBTUFBf
SEJfVElNRV9JU19aRVJPICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFNQUF9JUFY2X0ZMT1dMQUJF
TCAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgU1BQX0RTQ1AgICAgICAgICAgICAgICAgMHgwMDAw
MDIwMAorI2RlZmluZSBTUFBfSVBWNF9UT1MgICAgICAgICAgICBTUFBfRFNDUAorCitzdHJ1Y3Qg
c2N0cF9wYWRkcnRobGRzIHsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcHRfYWRkcmVzczsK
KwlzY3RwX2Fzc29jX3Qgc3B0X2Fzc29jX2lkOworCXVpbnQxNl90IHNwdF9wYXRobWF4cnh0Owor
CXVpbnQxNl90IHNwdF9wYXRocGZ0aGxkOworCXVpbnQxNl90IHNwdF9wYXRoY3B0aGxkOworfTsK
Kworc3RydWN0IHNjdHBfcGFkZHJpbmZvIHsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcGlu
Zm9fYWRkcmVzczsKKwlzY3RwX2Fzc29jX3Qgc3BpbmZvX2Fzc29jX2lkOworCWludDMyX3Qgc3Bp
bmZvX3N0YXRlOworCXVpbnQzMl90IHNwaW5mb19jd25kOworCXVpbnQzMl90IHNwaW5mb19zcnR0
OworCXVpbnQzMl90IHNwaW5mb19ydG87CisJdWludDMyX3Qgc3BpbmZvX210dTsKK307CisKK3N0
cnVjdCBzY3RwX3J0b2luZm8geworCXNjdHBfYXNzb2NfdCBzcnRvX2Fzc29jX2lkOworCXVpbnQz
Ml90IHNydG9faW5pdGlhbDsKKwl1aW50MzJfdCBzcnRvX21heDsKKwl1aW50MzJfdCBzcnRvX21p
bjsKK307CisKK3N0cnVjdCBzY3RwX2Fzc29jcGFyYW1zIHsKKwlzY3RwX2Fzc29jX3Qgc2Fzb2Nf
YXNzb2NfaWQ7CisJdWludDMyX3Qgc2Fzb2NfcGVlcl9yd25kOworCXVpbnQzMl90IHNhc29jX2xv
Y2FsX3J3bmQ7CisJdWludDMyX3Qgc2Fzb2NfY29va2llX2xpZmU7CisJdWludDE2X3Qgc2Fzb2Nf
YXNvY21heHJ4dDsKKwl1aW50MTZfdCBzYXNvY19udW1iZXJfcGVlcl9kZXN0aW5hdGlvbnM7Cit9
OworCitzdHJ1Y3Qgc2N0cF9zZXRwcmltIHsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzc3Bf
YWRkcjsKKwlzY3RwX2Fzc29jX3Qgc3NwX2Fzc29jX2lkOworCXVpbnQ4X3Qgc3NwX3BhZGRpbmdb
NF07Cit9OworCitzdHJ1Y3Qgc2N0cF9zZXRwZWVycHJpbSB7CisJc3RydWN0IHNvY2thZGRyX3N0
b3JhZ2Ugc3NwcF9hZGRyOworCXNjdHBfYXNzb2NfdCBzc3BwX2Fzc29jX2lkOworCXVpbnQ4X3Qg
c3NwcF9wYWRkaW5nWzRdOworfTsKKwordW5pb24gc2N0cF9zb2Nrc3RvcmUgeworCXN0cnVjdCBz
b2NrYWRkcl9pbiBzaW47CisJc3RydWN0IHNvY2thZGRyX2luNiBzaW42OworI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKKwlzdHJ1Y3Qgc29ja2FkZHJfY29ubiBzY29ubjsKKyNlbmRpZgorCXN0
cnVjdCBzb2NrYWRkciBzYTsKK307CisKK3N0cnVjdCBzY3RwX2dldGFkZHJlc3NlcyB7CisJc2N0
cF9hc3NvY190IHNnZXRfYXNzb2NfaWQ7CisJdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkcltdOwor
fTsKKworc3RydWN0IHNjdHBfc3RhdHVzIHsKKwlzY3RwX2Fzc29jX3Qgc3N0YXRfYXNzb2NfaWQ7
CisJaW50MzJfdCBzc3RhdF9zdGF0ZTsKKwl1aW50MzJfdCBzc3RhdF9yd25kOworCXVpbnQxNl90
IHNzdGF0X3VuYWNrZGF0YTsKKwl1aW50MTZfdCBzc3RhdF9wZW5kZGF0YTsKKwl1aW50MTZfdCBz
c3RhdF9pbnN0cm1zOworCXVpbnQxNl90IHNzdGF0X291dHN0cm1zOworCXVpbnQzMl90IHNzdGF0
X2ZyYWdtZW50YXRpb25fcG9pbnQ7CisJc3RydWN0IHNjdHBfcGFkZHJpbmZvIHNzdGF0X3ByaW1h
cnk7Cit9OworCisvKgorICogQVVUSEVOVElDQVRJT04gc3VwcG9ydAorICovCisvKiBTQ1RQX0FV
VEhfQ0hVTksgKi8KK3N0cnVjdCBzY3RwX2F1dGhjaHVuayB7CisJdWludDhfdCBzYXV0aF9jaHVu
azsKK307CisKKy8qIFNDVFBfQVVUSF9LRVkgKi8KK3N0cnVjdCBzY3RwX2F1dGhrZXkgeworCXNj
dHBfYXNzb2NfdCBzY2FfYXNzb2NfaWQ7CisJdWludDE2X3Qgc2NhX2tleW51bWJlcjsKKwl1aW50
MTZfdCBzY2Ffa2V5bGVuZ3RoOworCXVpbnQ4X3Qgc2NhX2tleVtdOworfTsKKworLyogU0NUUF9I
TUFDX0lERU5UICovCitzdHJ1Y3Qgc2N0cF9obWFjYWxnbyB7CisJdWludDMyX3Qgc2htYWNfbnVt
YmVyX29mX2lkZW50czsKKwl1aW50MTZfdCBzaG1hY19pZGVudHNbXTsKK307CisKKy8qIEFVVEgg
aG1hY19pZCAqLworI2RlZmluZSBTQ1RQX0FVVEhfSE1BQ19JRF9SU1ZECQkweDAwMDAKKyNkZWZp
bmUgU0NUUF9BVVRIX0hNQUNfSURfU0hBMQkJMHgwMDAxCS8qIGRlZmF1bHQsIG1hbmRhdG9yeSAq
LworI2RlZmluZSBTQ1RQX0FVVEhfSE1BQ19JRF9TSEEyNTYJMHgwMDAzCisKKy8qIFNDVFBfQVVU
SF9BQ1RJVkVfS0VZIC8gU0NUUF9BVVRIX0RFTEVURV9LRVkgKi8KK3N0cnVjdCBzY3RwX2F1dGhr
ZXlpZCB7CisJc2N0cF9hc3NvY190IHNjYWN0X2Fzc29jX2lkOworCXVpbnQxNl90IHNjYWN0X2tl
eW51bWJlcjsKK307CisKKy8qIFNDVFBfUEVFUl9BVVRIX0NIVU5LUyAvIFNDVFBfTE9DQUxfQVVU
SF9DSFVOS1MgKi8KK3N0cnVjdCBzY3RwX2F1dGhjaHVua3MgeworCXNjdHBfYXNzb2NfdCBnYXV0
aF9hc3NvY19pZDsKKwl1aW50MzJfdCBnYXV0aF9udW1iZXJfb2ZfY2h1bmtzOworCXVpbnQ4X3Qg
Z2F1dGhfY2h1bmtzW107Cit9OworCitzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSB7CisJc2N0cF9h
c3NvY190IGFzc29jX2lkOworCXVpbnQzMl90IGFzc29jX3ZhbHVlOworfTsKKworc3RydWN0IHNj
dHBfY2Nfb3B0aW9uIHsKKwlpbnQgb3B0aW9uOworCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIGFp
ZF92YWx1ZTsKK307CisKK3N0cnVjdCBzY3RwX3N0cmVhbV92YWx1ZSB7CisJc2N0cF9hc3NvY190
IGFzc29jX2lkOworCXVpbnQxNl90IHN0cmVhbV9pZDsKKwl1aW50MTZfdCBzdHJlYW1fdmFsdWU7
Cit9OworCitzdHJ1Y3Qgc2N0cF9hc3NvY19pZHMgeworCXVpbnQzMl90IGdhaWRzX251bWJlcl9v
Zl9pZHM7CisJc2N0cF9hc3NvY190IGdhaWRzX2Fzc29jX2lkW107Cit9OworCitzdHJ1Y3Qgc2N0
cF9zYWNrX2luZm8geworCXNjdHBfYXNzb2NfdCBzYWNrX2Fzc29jX2lkOworCXVpbnQzMl90IHNh
Y2tfZGVsYXk7CisJdWludDMyX3Qgc2Fja19mcmVxOworfTsKKworc3RydWN0IHNjdHBfdGltZW91
dHMgeworCXNjdHBfYXNzb2NfdCBzdGltb19hc3NvY19pZDsKKwl1aW50MzJfdCBzdGltb19pbml0
OworCXVpbnQzMl90IHN0aW1vX2RhdGE7CisJdWludDMyX3Qgc3RpbW9fc2FjazsKKwl1aW50MzJf
dCBzdGltb19zaHV0ZG93bjsKKwl1aW50MzJfdCBzdGltb19oZWFydGJlYXQ7CisJdWludDMyX3Qg
c3RpbW9fY29va2llOworCXVpbnQzMl90IHN0aW1vX3NodXRkb3duYWNrOworfTsKKworc3RydWN0
IHNjdHBfdWRwZW5jYXBzIHsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzdWVfYWRkcmVzczsK
KwlzY3RwX2Fzc29jX3Qgc3VlX2Fzc29jX2lkOworCXVpbnQxNl90IHN1ZV9wb3J0OworfTsKKwor
c3RydWN0IHNjdHBfcHJzdGF0dXMgeworCXNjdHBfYXNzb2NfdCBzcHJzdGF0X2Fzc29jX2lkOwor
CXVpbnQxNl90IHNwcnN0YXRfc2lkOworCXVpbnQxNl90IHNwcnN0YXRfcG9saWN5OworCXVpbnQ2
NF90IHNwcnN0YXRfYWJhbmRvbmVkX3Vuc2VudDsKKwl1aW50NjRfdCBzcHJzdGF0X2FiYW5kb25l
ZF9zZW50OworfTsKKworc3RydWN0IHNjdHBfY3duZF9hcmdzIHsKKwlzdHJ1Y3Qgc2N0cF9uZXRz
ICpuZXQ7CS8qIG5ldHdvcmsgdG8gKi8gLyogRklYTUU6IExQNjQgaXNzdWUgKi8KKwl1aW50MzJf
dCBjd25kX25ld192YWx1ZTsvKiBjd25kIGluIGsgKi8KKwl1aW50MzJfdCBwc2V1ZG9fY3VtYWNr
OworCXVpbnQxNl90IGluZmxpZ2h0OwkvKiBmbGlnaHRzaXplIGluIGsgKi8KKwl1aW50MTZfdCBj
d25kX2F1Z21lbnQ7CS8qIGluY3JlbWVudCB0byBpdCAqLworCXVpbnQ4X3QgbWVldHNfcHNldWRv
X2N1bWFjazsKKwl1aW50OF90IG5lZWRfbmV3X3BzZXVkb19jdW1hY2s7CisJdWludDhfdCBjbnRf
aW5fc2VuZDsKKwl1aW50OF90IGNudF9pbl9zdHI7Cit9OworCitzdHJ1Y3Qgc2N0cF9ibGtfYXJn
cyB7CisJdWludDMyX3Qgb25zYjsJCS8qIGluIDFrIGJ5dGVzICovCisJdWludDMyX3Qgc25kbGVu
OwkvKiBsZW4gb2Ygc2VuZCBiZWluZyBhdHRlbXB0ZWQgKi8KKwl1aW50MzJfdCBwZWVyX3J3bmQ7
CS8qIHJ3bmQgb2YgcGVlciAqLworCXVpbnQxNl90IHNlbmRfc2VudF9xY250Oy8qIGNobmsgY250
ICovCisJdWludDE2X3Qgc3RyZWFtX3FjbnQ7CS8qIGNobmsgY250ICovCisJdWludDE2X3QgY2h1
bmtzX29uX29xdWU7LyogY2h1bmtzIG91dCAqLworCXVpbnQxNl90IGZsaWdodF9zaXplOyAgIC8q
IGZsaWdodCBzaXplIGluIGsgKi8KK307CisKKy8qCisgKiBNYXggd2UgY2FuIHJlc2V0IGluIG9u
ZSBzZXR0aW5nLCBub3RlIHRoaXMgaXMgZGljdGF0ZWQgbm90IGJ5IHRoZSBkZWZpbmUKKyAqIGJ1
dCB0aGUgc2l6ZSBvZiBhIG1idWYgY2x1c3RlciBzbyBkb24ndCBjaGFuZ2UgdGhpcyBkZWZpbmUg
YW5kIHRoaW5rIHlvdQorICogY2FuIHNwZWNpZnkgbW9yZS4gWW91IG11c3QgZG8gbXVsdGlwbGUg
cmVzZXRzIGlmIHlvdSB3YW50IHRvIHJlc2V0IG1vcmUKKyAqIHRoYW4gU0NUUF9NQVhfRVhQTElD
SVRfU1RSX1JFU0VULgorICovCisjZGVmaW5lIFNDVFBfTUFYX0VYUExJQ1RfU1RSX1JFU0VUICAg
MTAwMAorCitzdHJ1Y3Qgc2N0cF9yZXNldF9zdHJlYW1zIHsKKwlzY3RwX2Fzc29jX3Qgc3JzX2Fz
c29jX2lkOworCXVpbnQxNl90IHNyc19mbGFnczsKKwl1aW50MTZfdCBzcnNfbnVtYmVyX3N0cmVh
bXM7CS8qIDAgPT0gQUxMICovCisJdWludDE2X3Qgc3JzX3N0cmVhbV9saXN0W107LyogbGlzdCBp
ZiBzdHJyc3RfbnVtX3N0cmVhbXMgaXMgbm90IDAgKi8KK307CisKK3N0cnVjdCBzY3RwX2FkZF9z
dHJlYW1zIHsKKwlzY3RwX2Fzc29jX3QJc2FzX2Fzc29jX2lkOworCXVpbnQxNl90CXNhc19pbnN0
cm1zOworCXVpbnQxNl90CXNhc19vdXRzdHJtczsKK307CisKK3N0cnVjdCBzY3RwX2dldF9ub25j
ZV92YWx1ZXMgeworCXNjdHBfYXNzb2NfdCBnbl9hc3NvY19pZDsKKwl1aW50MzJfdCBnbl9wZWVy
c190YWc7CisJdWludDMyX3QgZ25fbG9jYWxfdGFnOworfTsKKworLyogRGVidWdnaW5nIGxvZ3Mg
Ki8KK3N0cnVjdCBzY3RwX3N0cl9sb2cgeworCXZvaWQgKnN0Y2I7IC8qIEZJWE1FOiBMUDY0IGlz
c3VlICovCisJdWludDMyX3Qgbl90c247CisJdWludDMyX3QgZV90c247CisJdWludDE2X3Qgbl9z
c2VxOworCXVpbnQxNl90IGVfc3NlcTsKKwl1aW50MTZfdCBzdHJtOworfTsKKworc3RydWN0IHNj
dHBfc2JfbG9nIHsKKwl2b2lkICAqc3RjYjsgLyogRklYTUU6IExQNjQgaXNzdWUgKi8KKwl1aW50
MzJfdCBzb19zYmNjOworCXVpbnQzMl90IHN0Y2Jfc2JjYzsKKwl1aW50MzJfdCBpbmNyOworfTsK
Kworc3RydWN0IHNjdHBfZnJfbG9nIHsKKwl1aW50MzJfdCBsYXJnZXN0X3RzbjsKKwl1aW50MzJf
dCBsYXJnZXN0X25ld190c247CisJdWludDMyX3QgdHNuOworfTsKKworc3RydWN0IHNjdHBfZnJf
bWFwIHsKKwl1aW50MzJfdCBiYXNlOworCXVpbnQzMl90IGN1bTsKKwl1aW50MzJfdCBoaWdoOwor
fTsKKworc3RydWN0IHNjdHBfcnduZF9sb2cgeworCXVpbnQzMl90IHJ3bmQ7CisJdWludDMyX3Qg
c2VuZF9zaXplOworCXVpbnQzMl90IG92ZXJoZWFkOworCXVpbnQzMl90IG5ld19yd25kOworfTsK
Kworc3RydWN0IHNjdHBfbWJjbnRfbG9nIHsKKwl1aW50MzJfdCB0b3RhbF9xdWV1ZV9zaXplOwor
CXVpbnQzMl90IHNpemVfY2hhbmdlOworCXVpbnQzMl90IHRvdGFsX3F1ZXVlX21iX3NpemU7CisJ
dWludDMyX3QgbWJjbnRfY2hhbmdlOworfTsKKworc3RydWN0IHNjdHBfc2Fja19sb2cgeworCXVp
bnQzMl90IGN1bWFjazsKKwl1aW50MzJfdCBvbGRjdW1hY2s7CisJdWludDMyX3QgdHNuOworCXVp
bnQxNl90IG51bUdhcHM7CisJdWludDE2X3QgbnVtRHVwczsKK307CisKK3N0cnVjdCBzY3RwX2xv
Y2tfbG9nIHsKKwl2b2lkICpzb2NrOyAgLyogRklYTUU6IExQNjQgaXNzdWUgKi8KKwl2b2lkICpp
bnA7IC8qIEZJWE1FOiBMUDY0IGlzc3VlICovCisJdWludDhfdCB0Y2JfbG9jazsKKwl1aW50OF90
IGlucF9sb2NrOworCXVpbnQ4X3QgaW5mb19sb2NrOworCXVpbnQ4X3Qgc29ja19sb2NrOworCXVp
bnQ4X3Qgc29ja3JjdmJ1Zl9sb2NrOworCXVpbnQ4X3Qgc29ja3NuZGJ1Zl9sb2NrOworCXVpbnQ4
X3QgY3JlYXRlX2xvY2s7CisJdWludDhfdCByZXN2OworfTsKKworc3RydWN0IHNjdHBfcnRvX2xv
ZyB7CisJdm9pZCAqIG5ldDsgLyogRklYTUU6IExQNjQgaXNzdWUgKi8KKwl1aW50MzJfdCBydHQ7
Cit9OworCitzdHJ1Y3Qgc2N0cF9uYWdsZV9sb2cgeworCXZvaWQgICpzdGNiOyAvKiBGSVhNRTog
TFA2NCBpc3N1ZSAqLworCXVpbnQzMl90IHRvdGFsX2ZsaWdodDsKKwl1aW50MzJfdCB0b3RhbF9p
bl9xdWV1ZTsKKwl1aW50MTZfdCBjb3VudF9pbl9xdWV1ZTsKKwl1aW50MTZfdCBjb3VudF9pbl9m
bGlnaHQ7Cit9OworCitzdHJ1Y3Qgc2N0cF9zYndha2VfbG9nIHsKKwl2b2lkICpzdGNiOyAvKiBG
SVhNRTogTFA2NCBpc3N1ZSAqLworCXVpbnQxNl90IHNlbmRfcTsKKwl1aW50MTZfdCBzZW50X3E7
CisJdWludDE2X3QgZmxpZ2h0OworCXVpbnQxNl90IHdha2VfY250OworCXVpbnQ4X3Qgc3RyZWFt
X3FjbnQ7CS8qIGNobmsgY250ICovCisJdWludDhfdCBjaHVua3Nfb25fb3F1ZTsvKiBjaHVua3Mg
b3V0ICovCisJdWludDhfdCBzYmZsYWdzOworCXVpbnQ4X3Qgc2N0cGZsYWdzOworfTsKKworc3Ry
dWN0IHNjdHBfbWlzY19pbmZvIHsKKwl1aW50MzJfdCBsb2cxOworCXVpbnQzMl90IGxvZzI7CisJ
dWludDMyX3QgbG9nMzsKKwl1aW50MzJfdCBsb2c0OworfTsKKworc3RydWN0IHNjdHBfbG9nX2Ns
b3NpbmcgeworCXZvaWQgKmlucDsgLyogRklYTUU6IExQNjQgaXNzdWUgKi8KKwl2b2lkICpzdGNi
OyAgLyogRklYTUU6IExQNjQgaXNzdWUgKi8KKwl1aW50MzJfdCBzY3RwX2ZsYWdzOworCXVpbnQx
Nl90ICBzdGF0ZTsKKwlpbnQxNl90ICBsb2M7Cit9OworCitzdHJ1Y3Qgc2N0cF9tYnVmX2xvZyB7
CisJc3RydWN0IG1idWYgKm1wOyAvKiBGSVhNRTogTFA2NCBpc3N1ZSAqLworCWNhZGRyX3QgIGV4
dDsKKwljYWRkcl90ICBkYXRhOworCXVpbnQxNl90IHNpemU7CisJdWludDhfdCAgcmVmY250Owor
CXVpbnQ4X3QgIG1idWZfZmxhZ3M7Cit9OworCitzdHJ1Y3Qgc2N0cF9jd25kX2xvZyB7CisJdWlu
dDY0X3QgdGltZV9ldmVudDsKKwl1aW50OF90ICBmcm9tOworCXVpbnQ4X3QgIGV2ZW50X3R5cGU7
CisJdWludDhfdCAgcmVzdlsyXTsKKwl1bmlvbiB7CisJCXN0cnVjdCBzY3RwX2xvZ19jbG9zaW5n
IGNsb3NlOworCQlzdHJ1Y3Qgc2N0cF9ibGtfYXJncyBibGs7CisJCXN0cnVjdCBzY3RwX2N3bmRf
YXJncyBjd25kOworCQlzdHJ1Y3Qgc2N0cF9zdHJfbG9nIHN0cmxvZzsKKwkJc3RydWN0IHNjdHBf
ZnJfbG9nIGZyOworCQlzdHJ1Y3Qgc2N0cF9mcl9tYXAgbWFwOworCQlzdHJ1Y3Qgc2N0cF9yd25k
X2xvZyByd25kOworCQlzdHJ1Y3Qgc2N0cF9tYmNudF9sb2cgbWJjbnQ7CisJCXN0cnVjdCBzY3Rw
X3NhY2tfbG9nIHNhY2s7CisJCXN0cnVjdCBzY3RwX2xvY2tfbG9nIGxvY2s7CisJCXN0cnVjdCBz
Y3RwX3J0b19sb2cgcnRvOworCQlzdHJ1Y3Qgc2N0cF9zYl9sb2cgc2I7CisJCXN0cnVjdCBzY3Rw
X25hZ2xlX2xvZyBuYWdsZTsKKwkJc3RydWN0IHNjdHBfc2J3YWtlX2xvZyB3YWtlOworCQlzdHJ1
Y3Qgc2N0cF9tYnVmX2xvZyBtYjsKKwkJc3RydWN0IHNjdHBfbWlzY19pbmZvIG1pc2M7CisJfSAg
ICAgeDsKK307CisKK3N0cnVjdCBzY3RwX2N3bmRfbG9nX3JlcSB7CisJaW50MzJfdCBudW1faW5f
bG9nOwkJLyogTnVtYmVyIGluIGxvZyAqLworCWludDMyX3QgbnVtX3JldDsJCS8qIE51bWJlciBy
ZXR1cm5lZCAqLworCWludDMyX3Qgc3RhcnRfYXQ7CQkvKiBzdGFydCBhdCB0aGlzIG9uZSAqLwor
CWludDMyX3QgZW5kX2F0OwkJICAgICAgICAvKiBlbmQgYXQgdGhpcyBvbmUgKi8KKwlzdHJ1Y3Qg
c2N0cF9jd25kX2xvZyBsb2dbXTsKK307CisKK3N0cnVjdCBzY3RwX3RpbWV2YWwgeworCXVpbnQz
Ml90IHR2X3NlYzsKKwl1aW50MzJfdCB0dl91c2VjOworfTsKKworc3RydWN0IHNjdHBzdGF0IHsK
KwlzdHJ1Y3Qgc2N0cF90aW1ldmFsIHNjdHBzX2Rpc2NvbnRpbnVpdHl0aW1lOyAvKiBzY3RwU3Rh
dHMgMTggKFRpbWVTdGFtcCkgKi8KKwkvKiBNSUIgYWNjb3JkaW5nIHRvIFJGQyAzODczICovCisJ
dWludDMyX3QgIHNjdHBzX2N1cnJlc3RhYjsgICAgICAgICAgIC8qIHNjdHBTdGF0cyAgMSAgIChH
YXVnZTMyKSAqLworCXVpbnQzMl90ICBzY3Rwc19hY3RpdmVlc3RhYjsgICAgICAgICAvKiBzY3Rw
U3RhdHMgIDIgKENvdW50ZXIzMikgKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVzdGFydGVzdGFiOwor
CXVpbnQzMl90ICBzY3Rwc19jb2xsaXNpb25lc3RhYjsKKwl1aW50MzJfdCAgc2N0cHNfcGFzc2l2
ZWVzdGFiOyAgICAgICAgLyogc2N0cFN0YXRzICAzIChDb3VudGVyMzIpICovCisJdWludDMyX3Qg
IHNjdHBzX2Fib3J0ZWQ7ICAgICAgICAgICAgIC8qIHNjdHBTdGF0cyAgNCAoQ291bnRlcjMyKSAq
LworCXVpbnQzMl90ICBzY3Rwc19zaHV0ZG93bjsgICAgICAgICAgICAvKiBzY3RwU3RhdHMgIDUg
KENvdW50ZXIzMikgKi8KKwl1aW50MzJfdCAgc2N0cHNfb3V0b2Z0aGVibHVlOyAgICAgICAgLyog
c2N0cFN0YXRzICA2IChDb3VudGVyMzIpICovCisJdWludDMyX3QgIHNjdHBzX2NoZWNrc3VtZXJy
b3JzOyAgICAgIC8qIHNjdHBTdGF0cyAgNyAoQ291bnRlcjMyKSAqLworCXVpbnQzMl90ICBzY3Rw
c19vdXRjb250cm9sY2h1bmtzOyAgICAvKiBzY3RwU3RhdHMgIDggKENvdW50ZXI2NCkgKi8KKwl1
aW50MzJfdCAgc2N0cHNfb3V0b3JkZXJjaHVua3M7ICAgICAgLyogc2N0cFN0YXRzICA5IChDb3Vu
dGVyNjQpICovCisJdWludDMyX3QgIHNjdHBzX291dHVub3JkZXJjaHVua3M7ICAgIC8qIHNjdHBT
dGF0cyAxMCAoQ291bnRlcjY0KSAqLworCXVpbnQzMl90ICBzY3Rwc19pbmNvbnRyb2xjaHVua3M7
ICAgICAvKiBzY3RwU3RhdHMgMTEgKENvdW50ZXI2NCkgKi8KKwl1aW50MzJfdCAgc2N0cHNfaW5v
cmRlcmNodW5rczsgICAgICAgLyogc2N0cFN0YXRzIDEyIChDb3VudGVyNjQpICovCisJdWludDMy
X3QgIHNjdHBzX2ludW5vcmRlcmNodW5rczsgICAgIC8qIHNjdHBTdGF0cyAxMyAoQ291bnRlcjY0
KSAqLworCXVpbnQzMl90ICBzY3Rwc19mcmFndXNybXNnczsgICAgICAgICAvKiBzY3RwU3RhdHMg
MTQgKENvdW50ZXI2NCkgKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVhc211c3Jtc2dzOyAgICAgICAg
Lyogc2N0cFN0YXRzIDE1IChDb3VudGVyNjQpICovCisJdWludDMyX3QgIHNjdHBzX291dHBhY2tl
dHM7ICAgICAgICAgIC8qIHNjdHBTdGF0cyAxNiAoQ291bnRlcjY0KSAqLworCXVpbnQzMl90ICBz
Y3Rwc19pbnBhY2tldHM7ICAgICAgICAgICAvKiBzY3RwU3RhdHMgMTcgKENvdW50ZXI2NCkgKi8K
KworCS8qIGlucHV0IHN0YXRpc3RpY3M6ICovCisJdWludDMyX3QgIHNjdHBzX3JlY3ZwYWNrZXRz
OyAgICAgICAgIC8qIHRvdGFsIGlucHV0IHBhY2tldHMgICAgICAgICovCisJdWludDMyX3QgIHNj
dHBzX3JlY3ZkYXRhZ3JhbXM7ICAgICAgIC8qIHRvdGFsIGlucHV0IGRhdGFncmFtcyAgICAgICov
CisJdWludDMyX3QgIHNjdHBzX3JlY3Zwa3R3aXRoZGF0YTsgICAgIC8qIHRvdGFsIHBhY2tldHMg
dGhhdCBoYWQgZGF0YSAqLworCXVpbnQzMl90ICBzY3Rwc19yZWN2c2Fja3M7ICAgICAgICAgICAv
KiB0b3RhbCBpbnB1dCBTQUNLIGNodW5rcyAgICAqLworCXVpbnQzMl90ICBzY3Rwc19yZWN2ZGF0
YTsgICAgICAgICAgICAvKiB0b3RhbCBpbnB1dCBEQVRBIGNodW5rcyAgICAqLworCXVpbnQzMl90
ICBzY3Rwc19yZWN2ZHVwZGF0YTsgICAgICAgICAvKiB0b3RhbCBpbnB1dCBkdXBsaWNhdGUgREFU
QSBjaHVua3MgKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVjdmhlYXJ0YmVhdDsgICAgICAgLyogdG90
YWwgaW5wdXQgSEIgY2h1bmtzICAgICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVjdmhlYXJ0YmVh
dGFjazsgICAgLyogdG90YWwgaW5wdXQgSEItQUNLIGNodW5rcyAgKi8KKwl1aW50MzJfdCAgc2N0
cHNfcmVjdmVjbmU7ICAgICAgICAgICAgLyogdG90YWwgaW5wdXQgRUNORSBjaHVua3MgICAgKi8K
Kwl1aW50MzJfdCAgc2N0cHNfcmVjdmF1dGg7ICAgICAgICAgICAgLyogdG90YWwgaW5wdXQgQVVU
SCBjaHVua3MgICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVjdmF1dGhtaXNzaW5nOyAgICAgLyog
dG90YWwgaW5wdXQgY2h1bmtzIG1pc3NpbmcgQVVUSCAqLworCXVpbnQzMl90ICBzY3Rwc19yZWN2
aXZhbGhtYWNpZDsgICAgICAvKiB0b3RhbCBudW1iZXIgb2YgaW52YWxpZCBITUFDIGlkcyByZWNl
aXZlZCAqLworCXVpbnQzMl90ICBzY3Rwc19yZWN2aXZhbGtleWlkOyAgICAgICAvKiB0b3RhbCBu
dW1iZXIgb2YgaW52YWxpZCBzZWNyZXQgaWRzIHJlY2VpdmVkICovCisJdWludDMyX3QgIHNjdHBz
X3JlY3ZhdXRoZmFpbGVkOyAgICAgIC8qIHRvdGFsIG51bWJlciBvZiBhdXRoIGZhaWxlZCAqLwor
CXVpbnQzMl90ICBzY3Rwc19yZWN2ZXhwcmVzczsgICAgICAgICAvKiB0b3RhbCBmYXN0IHBhdGgg
cmVjZWl2ZXMgYWxsIG9uZSBjaHVuayAqLworCXVpbnQzMl90ICBzY3Rwc19yZWN2ZXhwcmVzc207
ICAgICAgICAvKiB0b3RhbCBmYXN0IHBhdGggbXVsdGktcGFydCBkYXRhICovCisJdWludDMyX3Qg
IHNjdHBzX3JlY3Zfc3BhcmU7ICAgICAgICAgIC8qIGZvcm1lcmx5IHNjdHBzX3JlY3Zub2NyYyAq
LworCXVpbnQzMl90ICBzY3Rwc19yZWN2c3djcmM7CisJdWludDMyX3QgIHNjdHBzX3JlY3Zod2Ny
YzsKKworCS8qIG91dHB1dCBzdGF0aXN0aWNzOiAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kcGFj
a2V0czsgICAgICAgICAvKiB0b3RhbCBvdXRwdXQgcGFja2V0cyAgICAgICAqLworCXVpbnQzMl90
ICBzY3Rwc19zZW5kc2Fja3M7ICAgICAgICAgICAvKiB0b3RhbCBvdXRwdXQgU0FDS3MgICAgICAg
ICAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kZGF0YTsgICAgICAgICAgICAvKiB0b3RhbCBvdXRw
dXQgREFUQSBjaHVua3MgICAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kcmV0cmFuc2RhdGE7ICAg
ICAvKiB0b3RhbCBvdXRwdXQgcmV0cmFuc21pdHRlZCBEQVRBIGNodW5rcyAqLworCXVpbnQzMl90
ICBzY3Rwc19zZW5kZmFzdHJldHJhbnM7ICAgICAvKiB0b3RhbCBvdXRwdXQgZmFzdCByZXRyYW5z
bWl0dGVkIERBVEEgY2h1bmtzICovCisJdWludDMyX3QgIHNjdHBzX3NlbmRtdWx0ZmFzdHJldHJh
bnM7IC8qIHRvdGFsIEZSJ3MgdGhhdCBoYXBwZW5lZCBtb3JlIHRoYW4gb25jZQorCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0byBzYW1lIGNodW5rICh1LWRlbCBtdWx0
aS1mciBhbGdvKS4KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJ
dWludDMyX3QgIHNjdHBzX3NlbmRoZWFydGJlYXQ7ICAgICAgIC8qIHRvdGFsIG91dHB1dCBIQiBj
aHVua3MgICAgICovCisJdWludDMyX3QgIHNjdHBzX3NlbmRlY25lOyAgICAgICAgICAgIC8qIHRv
dGFsIG91dHB1dCBFQ05FIGNodW5rcyAgICAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kYXV0aDsg
ICAgICAgICAgICAvKiB0b3RhbCBvdXRwdXQgQVVUSCBjaHVua3MgRklYTUUgICAqLworCXVpbnQz
Ml90ICBzY3Rwc19zZW5kZXJyb3JzOyAgICAgICAgICAvKiBpcF9vdXRwdXQgZXJyb3IgY291bnRl
ciAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kX3NwYXJlOyAgICAgICAgICAvKiBmb3JtZXJseSBz
Y3Rwc19zZW5kbm9jcmMgKi8KKwl1aW50MzJfdCAgc2N0cHNfc2VuZHN3Y3JjOworCXVpbnQzMl90
ICBzY3Rwc19zZW5kaHdjcmM7CisJLyogUENLRFJPUFJFUCBzdGF0aXN0aWNzOiAqLworCXVpbnQz
Ml90ICBzY3Rwc19wZHJwZm1ib3g7ICAgICAgICAgICAvKiBQYWNrZXQgZHJvcCBmcm9tIG1pZGRs
ZSBib3ggKi8KKwl1aW50MzJfdCAgc2N0cHNfcGRycGZlaG9zOyAgICAgICAgICAgLyogUC1kcm9w
IGZyb20gZW5kIGhvc3QgKi8KKwl1aW50MzJfdCAgc2N0cHNfcGRycG1iZGE7ICAgICAgICAgICAg
LyogUC1kcm9wcyB3aXRoIGRhdGEgKi8KKwl1aW50MzJfdCAgc2N0cHNfcGRycG1iY3Q7ICAgICAg
ICAgICAgLyogUC1kcm9wcywgbm9uLWRhdGEsIG5vbi1lbmRob3N0ICovCisJdWludDMyX3QgIHNj
dHBzX3BkcnBid3JwdDsgICAgICAgICAgIC8qIFAtZHJvcCwgbm9uLWVuZGhvc3QsIGJhbmR3aWR0
aCByZXAgb25seSAqLworCXVpbnQzMl90ICBzY3Rwc19wZHJwY3J1cHQ7ICAgICAgICAgICAvKiBQ
LWRyb3AsIG5vdCBlbm91Z2ggZm9yIGNodW5rIGhlYWRlciAqLworCXVpbnQzMl90ICBzY3Rwc19w
ZHJwbmVkYXQ7ICAgICAgICAgICAvKiBQLWRyb3AsIG5vdCBlbm91Z2ggZGF0YSB0byBjb25maXJt
ICovCisJdWludDMyX3QgIHNjdHBzX3BkcnBwZGJyazsgICAgICAgICAgIC8qIFAtZHJvcCwgd2hl
cmUgcHJvY2Vzc19jaHVua19kcm9wIHNhaWQgYnJlYWsgKi8KKwl1aW50MzJfdCAgc2N0cHNfcGRy
cHRzbm5mOyAgICAgICAgICAgLyogUC1kcm9wLCBjb3VsZCBub3QgZmluZCBUU04gKi8KKwl1aW50
MzJfdCAgc2N0cHNfcGRycGRuZm5kOyAgICAgICAgICAgLyogUC1kcm9wLCBhdHRlbXB0IHJldmVy
c2UgVFNOIGxvb2t1cCAqLworCXVpbnQzMl90ICBzY3Rwc19wZHJwZGl3bnA7ICAgICAgICAgICAv
KiBQLWRyb3AsIGUtaG9zdCBjb25maXJtcyB6ZXJvLXJ3bmQgKi8KKwl1aW50MzJfdCAgc2N0cHNf
cGRycGRpenJ3OyAgICAgICAgICAgLyogUC1kcm9wLCBtaWRib3ggY29uZmlybXMgbm8gc3BhY2Ug
Ki8KKwl1aW50MzJfdCAgc2N0cHNfcGRycGJhZGQ7ICAgICAgICAgICAgLyogUC1kcm9wLCBkYXRh
IGRpZCBub3QgbWF0Y2ggVFNOICovCisJdWludDMyX3QgIHNjdHBzX3BkcnBtYXJrOyAgICAgICAg
ICAgIC8qIFAtZHJvcCwgVFNOJ3MgbWFya2VkIGZvciBGYXN0IFJldHJhbiAqLworCS8qIHRpbWVv
dXRzICovCisJdWludDMyX3QgIHNjdHBzX3RpbW9pdGVyYXRvcjsgICAgICAgIC8qIE51bWJlciBv
ZiBpdGVyYXRvciB0aW1lcnMgdGhhdCBmaXJlZCAqLworCXVpbnQzMl90ICBzY3Rwc190aW1vZGF0
YTsgICAgICAgICAgICAvKiBOdW1iZXIgb2YgVDMgZGF0YSB0aW1lIG91dHMgKi8KKwl1aW50MzJf
dCAgc2N0cHNfdGltb3dpbmRvd3Byb2JlOyAgICAgLyogTnVtYmVyIG9mIHdpbmRvdyBwcm9iZSAo
VDMpIHRpbWVycyB0aGF0IGZpcmVkICovCisJdWludDMyX3QgIHNjdHBzX3RpbW9pbml0OyAgICAg
ICAgICAgIC8qIE51bWJlciBvZiBJTklUIHRpbWVycyB0aGF0IGZpcmVkICovCisJdWludDMyX3Qg
IHNjdHBzX3RpbW9zYWNrOyAgICAgICAgICAgIC8qIE51bWJlciBvZiBzYWNrIHRpbWVycyB0aGF0
IGZpcmVkICovCisJdWludDMyX3QgIHNjdHBzX3RpbW9zaHV0ZG93bjsgICAgICAgIC8qIE51bWJl
ciBvZiBzaHV0ZG93biB0aW1lcnMgdGhhdCBmaXJlZCAqLworCXVpbnQzMl90ICBzY3Rwc190aW1v
aGVhcnRiZWF0OyAgICAgICAvKiBOdW1iZXIgb2YgaGVhcnRiZWF0IHRpbWVycyB0aGF0IGZpcmVk
ICovCisJdWludDMyX3QgIHNjdHBzX3RpbW9jb29raWU7ICAgICAgICAgIC8qIE51bWJlciBvZiB0
aW1lcyBhIGNvb2tpZSB0aW1lb3V0IGZpcmVkICovCisJdWludDMyX3QgIHNjdHBzX3RpbW9zZWNy
ZXQ7ICAgICAgICAgIC8qIE51bWJlciBvZiB0aW1lcyBhbiBlbmRwb2ludCBjaGFuZ2VkIGl0cyBj
b29raWUgc2VjcmV0Ki8KKwl1aW50MzJfdCAgc2N0cHNfdGltb3BhdGhtdHU7ICAgICAgICAgLyog
TnVtYmVyIG9mIFBNVFUgdGltZXJzIHRoYXQgZmlyZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfdGlt
b3NodXRkb3duYWNrOyAgICAgLyogTnVtYmVyIG9mIHNodXRkb3duIGFjayB0aW1lcnMgdGhhdCBm
aXJlZCAqLworCXVpbnQzMl90ICBzY3Rwc190aW1vc2h1dGRvd25ndWFyZDsgICAvKiBOdW1iZXIg
b2Ygc2h1dGRvd24gZ3VhcmQgdGltZXJzIHRoYXQgZmlyZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNf
dGltb3N0cm1yc3Q7ICAgICAgICAgLyogTnVtYmVyIG9mIHN0cmVhbSByZXNldCB0aW1lcnMgdGhh
dCBmaXJlZCAqLworCXVpbnQzMl90ICBzY3Rwc190aW1vZWFybHlmcjsgICAgICAgICAvKiBOdW1i
ZXIgb2YgZWFybHkgRlIgdGltZXJzIHRoYXQgZmlyZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfdGlt
b2FzY29uZjsgICAgICAgICAgLyogTnVtYmVyIG9mIHRpbWVzIGFuIGFzY29uZiB0aW1lciBmaXJl
ZCAqLworCXVpbnQzMl90ICBzY3Rwc190aW1vZGVscHJpbTsJICAgICAvKiBOdW1iZXIgb2YgdGlt
ZXMgYSBwcmltX2RlbGV0ZWQgdGltZXIgZmlyZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfdGltb2F1
dG9jbG9zZTsgICAgICAgLyogTnVtYmVyIG9mIHRpbWVzIGF1dG8gY2xvc2UgdGltZXIgZmlyZWQg
Ki8KKwl1aW50MzJfdCAgc2N0cHNfdGltb2Fzc29ja2lsbDsgICAgICAgLyogTnVtYmVyIG9mIGFz
b2MgZnJlZSB0aW1lcnMgZXhwaXJlZCAqLworCXVpbnQzMl90ICBzY3Rwc190aW1vaW5wa2lsbDsg
ICAgICAgICAvKiBOdW1iZXIgb2YgaW5wIGZyZWUgdGltZXJzIGV4cGlyZWQgKi8KKwkvKiBmb3Jt
ZXIgZWFybHkgRlIgY291bnRlcnMgKi8KKwl1aW50MzJfdCAgc2N0cHNfc3BhcmVbMTFdOworCS8q
IG90aGVycyAqLworCXVpbnQzMl90ICBzY3Rwc19oZHJvcHM7CSAgICAgICAgICAvKiBwYWNrZXQg
c2hvcnRlciB0aGFuIGhlYWRlciAqLworCXVpbnQzMl90ICBzY3Rwc19iYWRzdW07CSAgICAgICAg
ICAvKiBjaGVja3N1bSBlcnJvciAgICAgICAgICAgICAqLworCXVpbnQzMl90ICBzY3Rwc19ub3Bv
cnQ7ICAgICAgICAgICAvKiBubyBlbmRwb2ludCBmb3IgcG9ydCAgICAgICAqLworCXVpbnQzMl90
ICBzY3Rwc19iYWR2dGFnOyAgICAgICAgICAvKiBiYWQgdi10YWcgICAgICAgICAgICAgICAgICAq
LworCXVpbnQzMl90ICBzY3Rwc19iYWRzaWQ7ICAgICAgICAgICAvKiBiYWQgU0lEICAgICAgICAg
ICAgICAgICAgICAqLworCXVpbnQzMl90ICBzY3Rwc19ub21lbTsgICAgICAgICAgICAvKiBubyBt
ZW1vcnkgICAgICAgICAgICAgICAgICAqLworCXVpbnQzMl90ICBzY3Rwc19mYXN0cmV0cmFuc2lu
cnR0OyAvKiBudW1iZXIgb2YgbXVsdGlwbGUgRlIgaW4gYSBSVFQgd2luZG93ICovCisJdWludDMy
X3QgIHNjdHBzX21hcmtlZHJldHJhbnM7CisJdWludDMyX3QgIHNjdHBzX25hZ2xlc2VudDsgICAg
ICAgIC8qIG5hZ2xlIGFsbG93ZWQgc2VuZGluZyAgICAgICovCisJdWludDMyX3QgIHNjdHBzX25h
Z2xlcXVldWVkOyAgICAgIC8qIG5hZ2xlIGRvZXNuJ3QgYWxsb3cgc2VuZGluZyAqLworCXVpbnQz
Ml90ICBzY3Rwc19tYXhidXJzdHF1ZXVlZDsgICAvKiBtYXggYnVyc3QgZG9lc24ndCBhbGxvdyBz
ZW5kaW5nICovCisJdWludDMyX3QgIHNjdHBzX2lmbm9tZW1xdWV1ZWQ7ICAgIC8qIGxvb2sgYWhl
YWQgdGVsbHMgdXMgbm8gbWVtb3J5IGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICogaW50ZXJmYWNlIHJpbmcgYnVmZmVyIE9SIHdlIGhhZCBhCisJCQkJCSAqIHNl
bmQgZXJyb3IgYW5kIGFyZSBxdWV1aW5nIG9uZSBzZW5kLgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqLworCXVpbnQzMl90ICBzY3Rwc193aW5kb3dwcm9iZWQ7ICAg
ICAvKiB0b3RhbCBudW1iZXIgb2Ygd2luZG93IHByb2JlcyBzZW50ICovCisJdWludDMyX3QgIHNj
dHBzX2xvd2xldmVsZXJyOwkvKiB0b3RhbCB0aW1lcyBhbiBvdXRwdXQgZXJyb3IgY2F1c2VzIHVz
CisJCQkJCSAqIHRvIGNsYW1wIGRvd24gb24gbmV4dCB1c2VyIHNlbmQuCisJCQkJCSAqLworCXVp
bnQzMl90ICBzY3Rwc19sb3dsZXZlbGVycnVzcjsJLyogdG90YWwgdGltZXMgc2N0cF9zZW5kZXJy
b3JzIHdlcmUgY2F1c2VkIGZyb20KKwkJCQkJICogYSB1c2VyIHNlbmQgZnJvbSBhIHVzZXIgaW52
b2tlZCBzZW5kIG5vdAorCQkJCQkgKiBhIHNhY2sgcmVzcG9uc2UKKwkJCQkJICovCisJdWludDMy
X3QgIHNjdHBzX2RhdGFkcm9wY2hrbG10OwkvKiBOdW1iZXIgb2YgaW4gZGF0YSBkcm9wcyBkdWUg
dG8gY2h1bmsgbGltaXQgcmVhY2hlZCAqLworCXVpbnQzMl90ICBzY3Rwc19kYXRhZHJvcHJ3bmQ7
CS8qIE51bWJlciBvZiBpbiBkYXRhIGRyb3BzIGR1ZSB0byByd25kIGxpbWl0IHJlYWNoZWQgKi8K
Kwl1aW50MzJfdCAgc2N0cHNfZWNuZXJlZHVjZWRjd25kOyAgLyogTnVtYmVyIG9mIHRpbWVzIGEg
RUNOIHJlZHVjZWQgdGhlIGN3bmQgKi8KKwl1aW50MzJfdCAgc2N0cHNfdnRhZ2V4cHJlc3M7CS8q
IFVzZWQgZXhwcmVzcyBsb29rdXAgdmlhIHZ0YWcgKi8KKwl1aW50MzJfdCAgc2N0cHNfdnRhZ2Jv
Z3VzOwkvKiBDb2xsaXNpb24gaW4gZXhwcmVzcyBsb29rdXAuICovCisJdWludDMyX3QgIHNjdHBz
X3ByaW1hcnlfcmFuZHJ5OwkvKiBOdW1iZXIgb2YgdGltZXMgdGhlIHNlbmRlciByYW4gZHJ5IG9m
IHVzZXIgZGF0YSBvbiBwcmltYXJ5ICovCisJdWludDMyX3QgIHNjdHBzX2NtdF9yYW5kcnk7ICAg
ICAgIC8qIFNhbWUgZm9yIGFib3ZlICovCisJdWludDMyX3QgIHNjdHBzX3Nsb3dwYXRoX3NhY2s7
ICAgIC8qIFNhY2tzIHRoZSBzbG93IHdheSAqLworCXVpbnQzMl90ICBzY3Rwc193dV9zYWNrc19z
ZW50OwkvKiBXaW5kb3cgVXBkYXRlIG9ubHkgc2Fja3Mgc2VudCAqLworCXVpbnQzMl90ICBzY3Rw
c19zZW5kc193aXRoX2ZsYWdzOyAvKiBudW1iZXIgb2Ygc2VuZHMgd2l0aCBzaW5mb19mbGFncyAh
PTAgKi8KKwl1aW50MzJfdCAgc2N0cHNfc2VuZHNfd2l0aF91bm9yZDsgLyogbnVtYmVyIG9mIHVu
b3JkZXJlZCBzZW5kcyAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kc193aXRoX2VvZjsgCS8qIG51
bWJlciBvZiBzZW5kcyB3aXRoIEVPRiBmbGFnIHNldCAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5k
c193aXRoX2Fib3J0OyAvKiBudW1iZXIgb2Ygc2VuZHMgd2l0aCBBQk9SVCBmbGFnIHNldCAqLwor
CXVpbnQzMl90ICBzY3Rwc19wcm90b2NvbF9kcmFpbl9jYWxsczsJLyogbnVtYmVyIG9mIHRpbWVz
IHByb3RvY29sIGRyYWluIGNhbGxlZCAqLworCXVpbnQzMl90ICBzY3Rwc19wcm90b2NvbF9kcmFp
bnNfZG9uZTsgCS8qIG51bWJlciBvZiB0aW1lcyB3ZSBkaWQgYSBwcm90b2NvbCBkcmFpbiAqLwor
CXVpbnQzMl90ICBzY3Rwc19yZWFkX3BlZWtzOwkvKiBOdW1iZXIgb2YgdGltZXMgcmVjdiB3YXMg
Y2FsbGVkIHdpdGggcGVlayAqLworCXVpbnQzMl90ICBzY3Rwc19jYWNoZWRfY2hrOyAgICAgICAv
KiBOdW1iZXIgb2YgY2FjaGVkIGNodW5rcyB1c2VkICovCisJdWludDMyX3QgIHNjdHBzX2NhY2hl
ZF9zdHJtb3E7ICAgIC8qIE51bWJlciBvZiBjYWNoZWQgc3RyZWFtIG9xJ3MgdXNlZCAqLworCXVp
bnQzMl90ICBzY3Rwc19sZWZ0X2FiYW5kb247ICAgICAvKiBOdW1iZXIgb2YgdW5yZWFkIG1lc3Nh
Z2VzIGFiYW5kb25lZCBieSBjbG9zZSAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kX2J1cnN0X2F2
b2lkOyAvKiBVbnVzZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfc2VuZF9jd25kX2F2b2lkOyAgLyog
U2VuZCBjd25kIGZ1bGwgIGF2b2lkYW5jZSwgYWxyZWFkeSBtYXggYnVyc3QgaW5mbGlnaHQgdG8g
bmV0ICovCisJdWludDMyX3QgIHNjdHBzX2Z3ZHRzbl9tYXBfb3ZlcjsgIC8qIG51bWJlciBvZiBt
YXAgYXJyYXkgb3Zlci1ydW5zIHZpYSBmd2QtdHNuJ3MgKi8KKwl1aW50MzJfdCAgc2N0cHNfcXVl
dWVfdXBkX2VjbmU7ICAvKiBOdW1iZXIgb2YgdGltZXMgd2UgcXVldWVkIG9yIHVwZGF0ZWQgYW4g
RUNOIGNodW5rIG9uIHNlbmQgcXVldWUgKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVzZXJ2ZWRbMzFd
OyAgICAgLyogRnV0dXJlIEFCSSBjb21wYXQgLSByZW1vdmUgaW50J3MgZnJvbSBoZXJlIHdoZW4g
YWRkaW5nIG5ldyAqLworfTsKKworI2RlZmluZSBTQ1RQX1NUQVRfSU5DUihfeCkgU0NUUF9TVEFU
X0lOQ1JfQlkoX3gsMSkKKyNkZWZpbmUgU0NUUF9TVEFUX0RFQ1IoX3gpIFNDVFBfU1RBVF9ERUNS
X0JZKF94LDEpCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKKyNpZiBkZWZpbmVkKFNNUCkgJiYgZGVmaW5lZChTQ1RQX1VTRV9QRVJDUFVfU1RBVCkK
KyNkZWZpbmUgU0NUUF9TVEFUX0lOQ1JfQlkoX3gsX2QpIChTQ1RQX0JBU0VfU1RBVFNbUENQVV9H
RVQoY3B1aWQpXS5feCArPSBfZCkKKyNkZWZpbmUgU0NUUF9TVEFUX0RFQ1JfQlkoX3gsX2QpIChT
Q1RQX0JBU0VfU1RBVFNbUENQVV9HRVQoY3B1aWQpXS5feCAtPSBfZCkKKyNlbHNlCisjZGVmaW5l
IFNDVFBfU1RBVF9JTkNSX0JZKF94LF9kKSBhdG9taWNfYWRkX2ludCgmU0NUUF9CQVNFX1NUQVQo
X3gpLCBfZCkKKyNkZWZpbmUgU0NUUF9TVEFUX0RFQ1JfQlkoX3gsX2QpIGF0b21pY19zdWJ0cmFj
dF9pbnQoJlNDVFBfQkFTRV9TVEFUKF94KSwgX2QpCisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIFND
VFBfU1RBVF9JTkNSX0JZKF94LF9kKSBhdG9taWNfYWRkX2ludCgmU0NUUF9CQVNFX1NUQVQoX3gp
LCBfZCkKKyNkZWZpbmUgU0NUUF9TVEFUX0RFQ1JfQlkoX3gsX2QpIGF0b21pY19zdWJ0cmFjdF9p
bnQoJlNDVFBfQkFTRV9TVEFUKF94KSwgX2QpCisjZW5kaWYKKy8qIFRoZSBmb2xsb3dpbmcgbWFj
cm9zIGFyZSBmb3IgaGFuZGxpbmcgTUlCIHZhbHVlcywgKi8KKyNkZWZpbmUgU0NUUF9TVEFUX0lO
Q1JfQ09VTlRFUjMyKF94KSBTQ1RQX1NUQVRfSU5DUihfeCkKKyNkZWZpbmUgU0NUUF9TVEFUX0lO
Q1JfQ09VTlRFUjY0KF94KSBTQ1RQX1NUQVRfSU5DUihfeCkKKyNkZWZpbmUgU0NUUF9TVEFUX0lO
Q1JfR0FVR0UzMihfeCkgU0NUUF9TVEFUX0lOQ1IoX3gpCisjZGVmaW5lIFNDVFBfU1RBVF9ERUNS
X0NPVU5URVIzMihfeCkgU0NUUF9TVEFUX0RFQ1IoX3gpCisjZGVmaW5lIFNDVFBfU1RBVF9ERUNS
X0NPVU5URVI2NChfeCkgU0NUUF9TVEFUX0RFQ1IoX3gpCisjZGVmaW5lIFNDVFBfU1RBVF9ERUNS
X0dBVUdFMzIoX3gpIFNDVFBfU1RBVF9ERUNSKF94KQorCisvKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCisvKiBBbmQgc29tZXRoaW5nIGZvciB1cyBvbGQgdGltZXJzICovCisv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiAhKGRlZmluZWQoX19B
UFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkKKyNpZiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorI2lmbmRlZiBudG9obGwKKyNpZiBkZWZpbmVkKF9fbGludXhfXykKKyNpZm5kZWYg
X0JTRF9TT1VSQ0UKKyNkZWZpbmUgX0JTRF9TT1VSQ0UKKyNlbmRpZgorI2luY2x1ZGUgPGVuZGlh
bi5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CisjZW5kaWYKKyNkZWZpbmUgbnRv
aGxsKHgpIGJlNjR0b2goeCkKKyNlbmRpZgorCisjaWZuZGVmIGh0b25sbAorI2lmIGRlZmluZWQo
X19saW51eF9fKQorI2lmbmRlZiBfQlNEX1NPVVJDRQorI2RlZmluZSBfQlNEX1NPVVJDRQorI2Vu
ZGlmCisjaW5jbHVkZSA8ZW5kaWFuLmg+CisjZWxzZQorI2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4K
KyNlbmRpZgorI2RlZmluZSBodG9ubGwoeCkgaHRvYmU2NCh4KQorI2VuZGlmCisjZW5kaWYKKyNl
bmRpZgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgeHNj
dHBfaW5wY2IgeworCXVpbnQzMl90IGxhc3Q7CisJdWludDMyX3QgZmxhZ3M7CisJdWludDY0X3Qg
ZmVhdHVyZXM7CisJdWludDMyX3QgdG90YWxfc2VuZHM7CisJdWludDMyX3QgdG90YWxfcmVjdnM7
CisJdWludDMyX3QgdG90YWxfbm9zcGFjZXM7CisJdWludDMyX3QgZnJhZ21lbnRhdGlvbl9wb2lu
dDsKKwl1aW50MTZfdCBsb2NhbF9wb3J0OworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJdWludDE2X3QgcWxlbl9vbGQ7CisJdWludDE2X3QgbWF4
cWxlbl9vbGQ7CisjZWxzZQorCXVpbnQxNl90IHFsZW47CisJdWludDE2X3QgbWF4cWxlbjsKKyNl
bmRpZgorCXVpbnQxNl90IF9fc3BhcmUxNjsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWt2YWRkcl90IHNvY2tldDsKKyNlbHNlCisJdm9pZCAq
c29ja2V0OworI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKwl1aW50MzJfdCBxbGVuOworCXVpbnQzMl90IG1heHFsZW47CisjZW5kaWYK
Kwl1aW50MzJfdCBleHRyYV9wYWRkaW5nWzI2XTsgLyogZnV0dXJlICovCit9OworCitzdHJ1Y3Qg
eHNjdHBfdGNiIHsKKwl1bmlvbiBzY3RwX3NvY2tzdG9yZSBwcmltYXJ5X2FkZHI7ICAgICAgLyog
c2N0cEFzc29jRW50cnkgNS82ICovCisJdWludDMyX3QgbGFzdDsKKwl1aW50MzJfdCBoZWFydGJl
YXRfaW50ZXJ2YWw7ICAgICAgICAgICAgLyogc2N0cEFzc29jRW50cnkgNyAgICovCisJdWludDMy
X3Qgc3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjdHBBc3NvY0VudHJ5IDggICAq
LworCXVpbnQzMl90IGluX3N0cmVhbXM7ICAgICAgICAgICAgICAgICAgICAvKiBzY3RwQXNzb2NF
bnRyeSA5ICAgKi8KKwl1aW50MzJfdCBvdXRfc3RyZWFtczsgICAgICAgICAgICAgICAgICAgLyog
c2N0cEFzc29jRW50cnkgMTAgICovCisJdWludDMyX3QgbWF4X25yX3JldHJhbnM7ICAgICAgICAg
ICAgICAgIC8qIHNjdHBBc3NvY0VudHJ5IDExICAqLworCXVpbnQzMl90IHByaW1hcnlfcHJvY2Vz
czsgICAgICAgICAgICAgICAvKiBzY3RwQXNzb2NFbnRyeSAxMiAgKi8KKwl1aW50MzJfdCBUMV9l
eHBpcmVyaWVzOyAgICAgICAgICAgICAgICAgLyogc2N0cEFzc29jRW50cnkgMTMgICovCisJdWlu
dDMyX3QgVDJfZXhwaXJlcmllczsgICAgICAgICAgICAgICAgIC8qIHNjdHBBc3NvY0VudHJ5IDE0
ICAqLworCXVpbnQzMl90IHJldHJhbnNtaXR0ZWRfdHNuczsgICAgICAgICAgICAvKiBzY3RwQXNz
b2NFbnRyeSAxNSAgKi8KKwl1aW50MzJfdCB0b3RhbF9zZW5kczsKKwl1aW50MzJfdCB0b3RhbF9y
ZWN2czsKKwl1aW50MzJfdCBsb2NhbF90YWc7CisJdWludDMyX3QgcmVtb3RlX3RhZzsKKwl1aW50
MzJfdCBpbml0aWFsX3RzbjsKKwl1aW50MzJfdCBoaWdoZXN0X3RzbjsKKwl1aW50MzJfdCBjdW11
bGF0aXZlX3RzbjsKKwl1aW50MzJfdCBjdW11bGF0aXZlX3Rzbl9hY2s7CisJdWludDMyX3QgbXR1
OworCXVpbnQzMl90IHJlZmNudDsKKwl1aW50MTZfdCBsb2NhbF9wb3J0OyAgICAgICAgICAgICAg
ICAgICAgLyogc2N0cEFzc29jRW50cnkgMyAgICovCisJdWludDE2X3QgcmVtb3RlX3BvcnQ7ICAg
ICAgICAgICAgICAgICAgIC8qIHNjdHBBc3NvY0VudHJ5IDQgICAqLworCXN0cnVjdCBzY3RwX3Rp
bWV2YWwgc3RhcnRfdGltZTsgICAgICAgICAvKiBzY3RwQXNzb2NFbnRyeSAxNiAgKi8KKwlzdHJ1
Y3Qgc2N0cF90aW1ldmFsIGRpc2NvbnRpbnVpdHlfdGltZTsgLyogc2N0cEFzc29jRW50cnkgMTcg
ICovCisJdWludDMyX3QgcGVlcnNfcnduZDsKKwlzY3RwX2Fzc29jX3QgYXNzb2NfaWQ7ICAgICAg
ICAgICAgICAgICAgLyogc2N0cEFzc29jRW50cnkgMSAgICovCisJdWludDMyX3QgZXh0cmFfcGFk
ZGluZ1szMl07ICAgICAgICAgICAgICAvKiBmdXR1cmUgKi8KK307CisKK3N0cnVjdCB4c2N0cF9s
YWRkciB7CisJdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkcmVzczsgICAgLyogc2N0cEFzc29jTG9j
YWxBZGRyRW50cnkgMS8yICovCisJdWludDMyX3QgbGFzdDsKKwlzdHJ1Y3Qgc2N0cF90aW1ldmFs
IHN0YXJ0X3RpbWU7ICAvKiBzY3RwQXNzb2NMb2NhbEFkZHJFbnRyeSAzICAgKi8KKwl1aW50MzJf
dCBleHRyYV9wYWRkaW5nWzMyXTsgICAgICAgLyogZnV0dXJlICovCit9OworCitzdHJ1Y3QgeHNj
dHBfcmFkZHIgeworCXVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHJlc3M7ICAgICAgLyogc2N0cEFz
c29jTG9jYWxSZW1FbnRyeSAxLzIgKi8KKwl1aW50MzJfdCBsYXN0OworCXVpbnQzMl90IHJ0bzsg
ICAgICAgICAgICAgICAgICAgICAgLyogc2N0cEFzc29jTG9jYWxSZW1FbnRyeSA1ICAgKi8KKwl1
aW50MzJfdCBtYXhfcGF0aF9ydHg7ICAgICAgICAgICAgIC8qIHNjdHBBc3NvY0xvY2FsUmVtRW50
cnkgNiAgICovCisJdWludDMyX3QgcnR4OyAgICAgICAgICAgICAgICAgICAgICAvKiBzY3RwQXNz
b2NMb2NhbFJlbUVudHJ5IDcgICAqLworCXVpbnQzMl90IGVycm9yX2NvdW50ZXI7ICAgICAgICAg
ICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1aW50MzJfdCBjd25kOyAgICAg
ICAgICAgICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdWludDMy
X3QgZmxpZ2h0X3NpemU7ICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqLworCXVpbnQzMl90IG10dTsgICAgICAgICAgICAgICAgICAgICAgLyogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKi8KKwl1aW50OF90IGFjdGl2ZTsgICAgICAgICAgICAgICAgICAgIC8q
IHNjdHBBc3NvY0xvY2FsUmVtRW50cnkgMyAgICovCisJdWludDhfdCBjb25maXJtZWQ7ICAgICAg
ICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVpbnQ4X3QgaGVh
cnRiZWF0X2VuYWJsZWQ7ICAgICAgICAgLyogc2N0cEFzc29jTG9jYWxSZW1FbnRyeSA0ICAgKi8K
Kwl1aW50OF90IHBvdGVudGlhbGx5X2ZhaWxlZDsKKwlzdHJ1Y3Qgc2N0cF90aW1ldmFsIHN0YXJ0
X3RpbWU7ICAgIC8qIHNjdHBBc3NvY0xvY2FsUmVtRW50cnkgOCAgICovCisJdWludDMyX3QgcnR0
OworCXVpbnQzMl90IGhlYXJ0YmVhdF9pbnRlcnZhbDsKKwl1aW50MzJfdCBzc3RocmVzaDsKKwl1
aW50MTZfdCBlbmNhcHNfcG9ydDsKKwl1aW50MTZfdCBzdGF0ZTsKKwl1aW50MzJfdCBleHRyYV9w
YWRkaW5nWzI5XTsgICAgICAgICAgICAgIC8qIGZ1dHVyZSAqLworfTsKKworI2RlZmluZSBTQ1RQ
X01BWF9MT0dHSU5HX1NJWkUgMzAwMDAKKyNkZWZpbmUgU0NUUF9UUkFDRV9QQVJBTVMgNiAgICAg
ICAgICAgICAgICAvKiBUaGlzIG51bWJlciBNVVNUIGJlIGV2ZW4gICAqLworCitzdHJ1Y3Qgc2N0
cF9sb2dfZW50cnkgeworCXVpbnQ2NF90IHRpbWVzdGFtcDsKKwl1aW50MzJfdCBzdWJzeXM7CisJ
dWludDMyX3QgcGFkZGluZzsKKwl1aW50MzJfdCBwYXJhbXNbU0NUUF9UUkFDRV9QQVJBTVNdOwor
fTsKKworc3RydWN0IHNjdHBfbG9nIHsKKwlzdHJ1Y3Qgc2N0cF9sb2dfZW50cnkgZW50cnlbU0NU
UF9NQVhfTE9HR0lOR19TSVpFXTsKKwl1aW50MzJfdCBpbmRleDsKKwl1aW50MzJfdCBwYWRkaW5n
OworfTsKKworLyoKKyAqIEtlcm5lbCBkZWZpbmVkIGZvciBzY3RwX3NlbmQKKyAqLworI2lmIGRl
ZmluZWQoX0tFUk5FTCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQoraW50CitzY3RwX2xvd2Vy
X3Nvc2VuZChzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCisg
ICAgc3RydWN0IHVpbyAqdWlvLAorICAgIHN0cnVjdCBtYnVmICppX3BhaywKKyAgICBzdHJ1Y3Qg
bWJ1ZiAqY29udHJvbCwKKyAgICBpbnQgZmxhZ3MsCisgICAgc3RydWN0IHNjdHBfc25kcmN2aW5m
byAqc3JjdgorI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykKKyAgICAsc3RydWN0IHRocmVhZCAqcAorI2VsaWYgZGVmaW5lZChfV0lOMzIpCisgICAg
LCBQS1RIUkVBRCBwCisjZWxzZQorICAgICxzdHJ1Y3QgcHJvYyAqcAorI2VuZGlmCisjZW5kaWYK
Kyk7CisKK2ludAorc2N0cF9zb3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc28sCisgICAgc3RydWN0
IHVpbyAqdWlvLAorICAgIHN0cnVjdCBtYnVmICoqbXAsCisgICAgc3RydWN0IHNvY2thZGRyICpm
cm9tLAorICAgIGludCBmcm9tbGVuLAorICAgIGludCAqbXNnX2ZsYWdzLAorICAgIHN0cnVjdCBz
Y3RwX3NuZHJjdmluZm8gKnNpbmZvLAorICAgIGludCBmaWxsaW5nX3NpbmZvKTsKKyNlbmRpZgor
CisvKgorICogQVBJIHN5c3RlbSBjYWxscworICovCisjaWYgIShkZWZpbmVkKF9LRVJORUwpKSAm
JiAhKGRlZmluZWQoX19Vc2Vyc3BhY2VfXykpCisKK19fQkVHSU5fREVDTFMKK2ludAlzY3RwX3Bl
ZWxvZmYoaW50LCBzY3RwX2Fzc29jX3QpOworaW50CXNjdHBfYmluZHgoaW50LCBzdHJ1Y3Qgc29j
a2FkZHIgKiwgaW50LCBpbnQpOworaW50CXNjdHBfY29ubmVjdHgoaW50LCBjb25zdCBzdHJ1Y3Qg
c29ja2FkZHIgKiwgaW50LCBzY3RwX2Fzc29jX3QgKik7CitpbnQJc2N0cF9nZXRhZGRybGVuKHNh
X2ZhbWlseV90KTsKK2ludAlzY3RwX2dldHBhZGRycyhpbnQsIHNjdHBfYXNzb2NfdCwgc3RydWN0
IHNvY2thZGRyICoqKTsKK3ZvaWQJc2N0cF9mcmVlcGFkZHJzKHN0cnVjdCBzb2NrYWRkciAqKTsK
K2ludAlzY3RwX2dldGxhZGRycyhpbnQsIHNjdHBfYXNzb2NfdCwgc3RydWN0IHNvY2thZGRyICoq
KTsKK3ZvaWQJc2N0cF9mcmVlbGFkZHJzKHN0cnVjdCBzb2NrYWRkciAqKTsKK2ludAlzY3RwX29w
dF9pbmZvKGludCwgc2N0cF9hc3NvY190LCBpbnQsIHZvaWQgKiwgc29ja2xlbl90ICopOworCisv
KiBkZXByZWNhdGVkICovCitzc2l6ZV90CXNjdHBfc2VuZG1zZyhpbnQsIGNvbnN0IHZvaWQgKiwg
c2l6ZV90LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKwkgICAgc29ja2xlbl90LCB1aW50MzJf
dCwgdWludDMyX3QsIHVpbnQxNl90LCB1aW50MzJfdCwgdWludDMyX3QpOworCisvKiBkZXByZWNh
dGVkICovCitzc2l6ZV90CXNjdHBfc2VuZChpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90LAorCSAg
ICBjb25zdCBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICosIGludCk7CisKKy8qIGRlcHJlY2F0ZWQg
Ki8KK3NzaXplX3QJc2N0cF9zZW5keChpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzdHJ1Y3Qg
c29ja2FkZHIgKiwKKwkgICAgaW50LCBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICosIGludCk7CisK
Ky8qIGRlcHJlY2F0ZWQgKi8KK3NzaXplX3QJc2N0cF9zZW5kbXNneChpbnQgc2QsIGNvbnN0IHZv
aWQgKiwgc2l6ZV90LCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKwkgICAgaW50LCB1aW50MzJfdCwgdWlu
dDMyX3QsIHVpbnQxNl90LCB1aW50MzJfdCwgdWludDMyX3QpOworCitzY3RwX2Fzc29jX3QJc2N0
cF9nZXRhc3NvY2lkKGludCwgc3RydWN0IHNvY2thZGRyICopOworCisvKiBkZXByZWNhdGVkICov
Citzc2l6ZV90CXNjdHBfcmVjdm1zZyhpbnQsIHZvaWQgKiwgc2l6ZV90LCBzdHJ1Y3Qgc29ja2Fk
ZHIgKiwgc29ja2xlbl90ICosCisJICAgIHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKiwgaW50ICop
OworCitzc2l6ZV90CXNjdHBfc2VuZHYoaW50LCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgaW50LCBz
dHJ1Y3Qgc29ja2FkZHIgKiwKKwkgICAgaW50LCB2b2lkICosIHNvY2tsZW5fdCwgdW5zaWduZWQg
aW50LCBpbnQpOworCitzc2l6ZV90CXNjdHBfcmVjdnYoaW50LCBjb25zdCBzdHJ1Y3QgaW92ZWMg
KiwgaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKwkgICAgc29ja2xlbl90ICosIHZvaWQgKiwgc29j
a2xlbl90ICosIHVuc2lnbmVkIGludCAqLCBpbnQgKik7CitfX0VORF9ERUNMUworCisjZW5kaWYJ
CQkJLyogIV9LRVJORUwgKi8KKyNlbmRpZgkJCQkvKiAhX19zY3RwX3Vpb19oX18gKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3VzZXJzcGFjZS5jIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdXNlcnNwYWNlLmMKbmV3IGZpbGUgbW9kZSAx
MDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwLi40MWFmZjE5ZTA4ODcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF91c2Vyc3BhY2UuYwpAQCAtMCwwICsx
LDQ0NCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMiBJcmVuZSBSdWVuZ2VsZXIK
KyAqIENvcHlyaWdodCAoYykgMjAxMS0yMDEyIE1pY2hhZWwgVHVleGVuCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0gg
REFNQUdFLgorICoKKyAqLworCisKKyNpZmRlZiBfV0lOMzIKKyNpbmNsdWRlIDxuZXRpbmV0L3Nj
dHBfcGNiLmg+CisjaW5jbHVkZSA8c3lzL3RpbWViLmg+CisjaW5jbHVkZSA8aXBobHBhcGkuaD4K
KyNpZiAhZGVmaW5lZChfX01JTkdXMzJfXykKKyNwcmFnbWEgY29tbWVudChsaWIsICJpcGhscGFw
aS5saWIiKQorI2VuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3NfdXNlcnNw
YWNlLmg+CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpbmNsdWRlIDxwdGhyZWFkX25wLmg+
CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19saW51eF9fKQorI2luY2x1ZGUgPHN5cy9wcmN0bC5o
PgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKy8qIEFkYXB0ZXIgdG8gdHJhbnNsYXRl
IFVuaXggdGhyZWFkIHN0YXJ0IHJvdXRpbmVzIHRvIFdpbmRvd3MgdGhyZWFkIHN0YXJ0CisgKiBy
b3V0aW5lcy4KKyAqLworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pCisjcHJhZ21hIEdDQyBkaWFn
bm9zdGljIHB1c2gKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdwZWRhbnRpYyIK
KyNlbmRpZgorc3RhdGljIERXT1JEIFdJTkFQSQorc2N0cF9jcmVhdGVfdGhyZWFkX2FkYXB0ZXIo
dm9pZCAqYXJnKSB7CisJc3RhcnRfcm91dGluZV90IHN0YXJ0X3JvdXRpbmUgPSAoc3RhcnRfcm91
dGluZV90KWFyZzsKKwlyZXR1cm4gc3RhcnRfcm91dGluZShOVUxMKSA9PSBOVUxMOworfQorCitp
bnQKK3NjdHBfdXNlcnNwYWNlX3RocmVhZF9jcmVhdGUodXNlcmxhbmRfdGhyZWFkX3QgKnRocmVh
ZCwgc3RhcnRfcm91dGluZV90IHN0YXJ0X3JvdXRpbmUpCit7CisJKnRocmVhZCA9IENyZWF0ZVRo
cmVhZChOVUxMLCAwLCBzY3RwX2NyZWF0ZV90aHJlYWRfYWRhcHRlciwKKwkJCSAgICAgICAodm9p
ZCAqKXN0YXJ0X3JvdXRpbmUsIDAsIE5VTEwpOworCWlmICgqdGhyZWFkID09IE5VTEwpCisJCXJl
dHVybiBHZXRMYXN0RXJyb3IoKTsKKwlyZXR1cm4gMDsKK30KKworI2lmIGRlZmluZWQoX19NSU5H
VzMyX18pCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisKKyNlbHNlCitpbnQK
K3NjdHBfdXNlcnNwYWNlX3RocmVhZF9jcmVhdGUodXNlcmxhbmRfdGhyZWFkX3QgKnRocmVhZCwg
c3RhcnRfcm91dGluZV90IHN0YXJ0X3JvdXRpbmUpCit7CisJcmV0dXJuIHB0aHJlYWRfY3JlYXRl
KHRocmVhZCwgTlVMTCwgc3RhcnRfcm91dGluZSwgTlVMTCk7Cit9CisjZW5kaWYKKwordm9pZAor
c2N0cF91c2Vyc3BhY2Vfc2V0X3RocmVhZG5hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKyNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykKKwlwdGhyZWFkX3NldG5hbWVfbnAobmFtZSk7CisjZW5kaWYKKyNp
ZiBkZWZpbmVkKF9fbGludXhfXykKKwlwcmN0bChQUl9TRVRfTkFNRSwgbmFtZSk7CisjZW5kaWYK
KyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCXB0aHJlYWRfc2V0X25hbWVfbnAocHRocmVhZF9z
ZWxmKCksIG5hbWUpOworI2VuZGlmCit9CisKKyNpZiAhZGVmaW5lZChfV0lOMzIpICYmICFkZWZp
bmVkKF9fbmF0aXZlX2NsaWVudF9fKQoraW50CitzY3RwX3VzZXJzcGFjZV9nZXRfbXR1X2Zyb21f
aWZuKHVpbnQzMl90IGlmX2luZGV4LCBpbnQgYWYpCit7CisjaWYgZGVmaW5lZChJTkVUKSB8fCBk
ZWZpbmVkKElORVQ2KQorCXN0cnVjdCBpZnJlcSBpZnI7CisJaW50IGZkOworI2VuZGlmCisJaW50
IG10dTsKKworCXN3aXRjaCAoYWYpIHsKKyNpZiBkZWZpbmVkKElORVQpCisJY2FzZSBBRl9JTkVU
OgorI2VuZGlmCisjaWYgZGVmaW5lZChJTkVUNikKKwljYXNlIEFGX0lORVQ2OgorI2VuZGlmCisj
aWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQorCQltZW1zZXQoJmlmciwgMCwgc2l6
ZW9mKHN0cnVjdCBpZnJlcSkpOworCQltdHUgPSAwOworCQlpZiAoaWZfaW5kZXh0b25hbWUoaWZf
aW5kZXgsIGlmci5pZnJfbmFtZSkgIT0gTlVMTCkgeworCQkJLyogVE9ETyBjYW4gSSB1c2UgdGhl
IHJhdyBzb2NrZXQgaGVyZSBhbmQgbm90IGhhdmUgdG8gb3BlbiBhIG5ldyBvbmUgd2l0aCBlYWNo
IHF1ZXJ5PyAqLworCQkJaWYgKChmZCA9IHNvY2tldChhZiwgU09DS19ER1JBTSwgMCkpIDwgMCkg
eworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGlvY3RsKGZkLCBTSU9DR0lGTVRVLCAmaWZyKSA+
PSAwKSB7CisJCQkJbXR1ID0gaWZyLmlmcl9tdHU7CisJCQl9CisJCQljbG9zZShmZCk7CisJCX0K
KwkJYnJlYWs7CisjZW5kaWYKKwljYXNlIEFGX0NPTk46CisJCW10dSA9IDEyODA7CisJCWJyZWFr
OworCWRlZmF1bHQ6CisJCW10dSA9IDA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gKG10dSk7Cit9
CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19uYXRpdmVfY2xpZW50X18pCitpbnQKK3NjdHBfdXNl
cnNwYWNlX2dldF9tdHVfZnJvbV9pZm4odWludDMyX3QgaWZfaW5kZXgsIGludCBhZikKK3sKKwly
ZXR1cm4gMTI4MDsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmlu
ZWQoX19EcmFnb25GbHlfXykgfHwgZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoX19uYXRp
dmVfY2xpZW50X18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykgfHwgZGVmaW5lZChfV0lOMzIpIHx8
IGRlZmluZWQoX19GdWNoc2lhX18pIHx8IGRlZmluZWQoX19FTVNDUklQVEVOX18pCitpbnQKK3Rp
bWluZ3NhZmVfYmNtcChjb25zdCB2b2lkICpiMSwgY29uc3Qgdm9pZCAqYjIsIHNpemVfdCBuKQor
eworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAxID0gYjEsICpwMiA9IGIyOworCWludCByZXQgPSAw
OworCisJZm9yICg7IG4gPiAwOyBuLS0pCisJCXJldCB8PSAqcDErKyBeICpwMisrOworCXJldHVy
biAocmV0ICE9IDApOworfQorI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKK2ludAorc2N0cF91c2Vy
c3BhY2VfZ2V0X210dV9mcm9tX2lmbih1aW50MzJfdCBpZl9pbmRleCwgaW50IGFmKQoreworI2lm
IGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKwlQSVBfQURBUFRFUl9BRERSRVNTRVMg
cEFkYXB0ZXJBZGRycywgcEFkYXB0OworCURXT1JEIEFkYXB0ZXJBZGRyc1NpemUsIEVycjsKKyNl
bmRpZgorCWludCBtdHU7CisKKwlzd2l0Y2ggKGFmKSB7CisjaWYgZGVmaW5lZChJTkVUKQorCWNh
c2UgQUZfSU5FVDoKKyNlbmRpZgorI2lmIGRlZmluZWQoSU5FVDYpCisJY2FzZSBBRl9JTkVUNjoK
KyNlbmRpZgorI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKwkJbXR1ID0gMDsK
KwkJQWRhcHRlckFkZHJzU2l6ZSA9IDA7CisJCXBBZGFwdGVyQWRkcnMgPSBOVUxMOworCQlpZiAo
KEVyciA9IEdldEFkYXB0ZXJzQWRkcmVzc2VzKEFGX1VOU1BFQywgMCwgTlVMTCwgTlVMTCwgJkFk
YXB0ZXJBZGRyc1NpemUpKSAhPSAwKSB7CisJCQlpZiAoKEVyciAhPSBFUlJPUl9CVUZGRVJfT1ZF
UkZMT1cpICYmIChFcnIgIT0gRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUikpIHsKKwkJCQlTQ1RQ
REJHKFNDVFBfREVCVUdfVVNSLCAiR2V0QWRhcHRlcnNBZGRyZXNzZXMoKSBzaXppbmcgZmFpbGVk
IHdpdGggZXJyb3IgY29kZSAlZCwgQWRhcHRlckFkZHJzU2l6ZSA9ICVkXG4iLCBFcnIsIEFkYXB0
ZXJBZGRyc1NpemUpOworCQkJCW10dSA9IC0xOworCQkJCWdvdG8gY2xlYW51cDsKKwkJCX0KKwkJ
fQorCQlpZiAoKHBBZGFwdGVyQWRkcnMgPSAoUElQX0FEQVBURVJfQUREUkVTU0VTKSBHbG9iYWxB
bGxvYyhHUFRSLCBBZGFwdGVyQWRkcnNTaXplKSkgPT0gTlVMTCkgeworCQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX1VTUiwgIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yIVxuIik7CisJCQltdHUgPSAtMTsK
KwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCQlpZiAoKEVyciA9IEdldEFkYXB0ZXJzQWRkcmVzc2Vz
KEFGX1VOU1BFQywgMCwgTlVMTCwgcEFkYXB0ZXJBZGRycywgJkFkYXB0ZXJBZGRyc1NpemUpKSAh
PSBFUlJPUl9TVUNDRVNTKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiR2V0QWRhcHRl
cnNBZGRyZXNzZXMoKSBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCBFcnIpOworCQkJbXR1
ID0gLTE7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJZm9yIChwQWRhcHQgPSBwQWRhcHRlckFk
ZHJzOyBwQWRhcHQ7IHBBZGFwdCA9IHBBZGFwdC0+TmV4dCkgeworCQkJaWYgKHBBZGFwdC0+SWZJ
bmRleCA9PSBpZl9pbmRleCkgeworCQkJCW10dSA9IHBBZGFwdC0+TXR1OworCQkJCWJyZWFrOwor
CQkJfQorCQl9CisJY2xlYW51cDoKKwkJaWYgKHBBZGFwdGVyQWRkcnMgIT0gTlVMTCkgeworCQkJ
R2xvYmFsRnJlZShwQWRhcHRlckFkZHJzKTsKKwkJfQorCQlicmVhazsKKyNlbmRpZgorCWNhc2Ug
QUZfQ09OTjoKKwkJbXR1ID0gMTI4MDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbXR1ID0gMDsK
KwkJYnJlYWs7CisJfQorCXJldHVybiAobXR1KTsKK30KKwordm9pZAorZ2V0d2ludGltZW9mZGF5
KHN0cnVjdCB0aW1ldmFsICp0dikKK3sKKwlGSUxFVElNRSBmaWxldGltZTsKKwlVTEFSR0VfSU5U
RUdFUiB1bGFyZ2U7CisKKwlHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSgmZmlsZXRpbWUpOworCXVs
YXJnZS5Mb3dQYXJ0ID0gZmlsZXRpbWUuZHdMb3dEYXRlVGltZTsKKwl1bGFyZ2UuSGlnaFBhcnQg
PSBmaWxldGltZS5kd0hpZ2hEYXRlVGltZTsKKwkvKiBDaGFuZ2UgYmFzZSBmcm9tIEphbiAxIDE2
MDEgMDA6MDA6MDAgdG8gSmFuIDEgMTk3MCAwMDowMDowMCAqLworI2lmIGRlZmluZWQoX19NSU5H
VzMyX18pCisJdWxhcmdlLlF1YWRQYXJ0IC09IDExNjQ0NDczNjAwMDAwMDAwMFVMTDsKKyNlbHNl
CisJdWxhcmdlLlF1YWRQYXJ0IC09IDExNjQ0NDczNjAwMDAwMDAwMFVJNjQ7CisjZW5kaWYKKwkv
KgorCSAqIHVsYXJnZS5RdWFkUGFydCBpcyBub3cgdGhlIG51bWJlciBvZiAxMDAtbmFub3NlY29u
ZCBpbnRlcnZhbHMKKwkgKiBzaW5jZSBKYW4gMSAxOTcwIDAwOjAwOjAwLgorCSAqLworI2lmIGRl
ZmluZWQoX19NSU5HVzMyX18pCisJdHYtPnR2X3NlYyA9IChsb25nKSh1bGFyZ2UuUXVhZFBhcnQg
LyAxMDAwMDAwMFVMTCk7CisJdHYtPnR2X3VzZWMgPSAobG9uZykoKHVsYXJnZS5RdWFkUGFydCAl
IDEwMDAwMDAwVUxMKSAvIDEwVUxMKTsKKyNlbHNlCisJdHYtPnR2X3NlYyA9IChsb25nKSh1bGFy
Z2UuUXVhZFBhcnQgLyAxMDAwMDAwMFVJNjQpOworCXR2LT50dl91c2VjID0gKGxvbmcpKCh1bGFy
Z2UuUXVhZFBhcnQgJSAxMDAwMDAwMFVJNjQpIC8gMTBVSTY0KTsKKyNlbmRpZgorfQorCitpbnQK
K3dpbl9pZl9uYW1ldG9pbmRleChjb25zdCBjaGFyICppZm5hbWUpCit7CisJSVBfQURBUFRFUl9B
RERSRVNTRVMgKmFkZHJlc3NlcywgKmFkZHI7CisJVUxPTkcgc3RhdHVzLCBzaXplOworCWludCBp
bmRleCA9IDA7CisKKwlpZiAoIWlmbmFtZSkgeworCQlyZXR1cm4gMDsKKwl9CisKKwlzaXplID0g
MDsKKwlzdGF0dXMgPSBHZXRBZGFwdGVyc0FkZHJlc3NlcyhBRl9VTlNQRUMsIDAsIE5VTEwsIE5V
TEwsICZzaXplKTsKKwlpZiAoc3RhdHVzICE9IEVSUk9SX0JVRkZFUl9PVkVSRkxPVykgeworCQly
ZXR1cm4gMDsKKwl9CisJYWRkcmVzc2VzID0gbWFsbG9jKHNpemUpOworCXN0YXR1cyA9IEdldEFk
YXB0ZXJzQWRkcmVzc2VzKEFGX1VOU1BFQywgMCwgTlVMTCwgYWRkcmVzc2VzLCAmc2l6ZSk7CisJ
aWYgKHN0YXR1cyA9PSBFUlJPUl9TVUNDRVNTKSB7CisJCWZvciAoYWRkciA9IGFkZHJlc3Nlczsg
YWRkcjsgYWRkciA9IGFkZHItPk5leHQpIHsKKwkJCWlmIChhZGRyLT5BZGFwdGVyTmFtZSAmJiAh
c3RyY21wKGlmbmFtZSwgYWRkci0+QWRhcHRlck5hbWUpKSB7CisJCQkJaW5kZXggPSBhZGRyLT5J
ZkluZGV4OworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJZnJlZShhZGRyZXNzZXMpOwor
CXJldHVybiBpbmRleDsKK30KKworI2lmIFdJTlZFUiA8IDB4MDYwMAorLyogVGhlc2UgZnVuY3Rp
b25zIGFyZSB3cml0dGVuIGJhc2VkIG9uIHRoZSBjb2RlIGF0CisgKiBodHRwOi8vd3d3LmNzLnd1
c3RsLmVkdS9+c2NobWlkdC93aW4zMi1jdi0xLmh0bWwKKyAqIFRoZXJlZm9yZSwgZm9yIHRoZSBy
ZXN0IG9mIHRoZSBmaWxlIHRoZSBmb2xsb3dpbmcgYXBwbGllczoKKyAqCisgKgorICogQ29weXJp
Z2h0IGFuZCBMaWNlbnNpbmcgSW5mb3JtYXRpb24gZm9yIEFDRShUTSksIFRBTyhUTSksIENJQU8o
VE0pLAorICogREFuQ0UoVE0pLCBhbmQgQ29TTUlDKFRNKQorICoKKyAqIFsxXUFDRShUTSksIFsy
XVRBTyhUTSksIFszXUNJQU8oVE0pLCBEQW5DRShUTSksIGFuZCBbNF1Db1NNSUMoVE0pCisgKiAo
aGVuY2Vmb3J0aCByZWZlcnJlZCB0byBhcyAiRE9DIHNvZnR3YXJlIikgYXJlIGNvcHlyaWdodGVk
IGJ5CisgKiBbNV1Eb3VnbGFzIEMuIFNjaG1pZHQgYW5kIGhpcyBbNl1yZXNlYXJjaCBncm91cCBh
dCBbN11XYXNoaW5ndG9uCisgKiBVbml2ZXJzaXR5LCBbOF1Vbml2ZXJzaXR5IG9mIENhbGlmb3Ju
aWEsIElydmluZSwgYW5kIFs5XVZhbmRlcmJpbHQKKyAqIFVuaXZlcnNpdHksIENvcHlyaWdodCAo
YykgMTk5My0yMDEyLCBhbGwgcmlnaHRzIHJlc2VydmVkLiBTaW5jZSBET0MKKyAqIHNvZnR3YXJl
IGlzIG9wZW4tc291cmNlLCBmcmVlbHkgYXZhaWxhYmxlIHNvZnR3YXJlLCB5b3UgYXJlIGZyZWUg
dG8KKyAqIHVzZSwgbW9kaWZ5LCBjb3B5LCBhbmQgZGlzdHJpYnV0ZS0tcGVycGV0dWFsbHkgYW5k
IGlycmV2b2NhYmx5LS10aGUKKyAqIERPQyBzb2Z0d2FyZSBzb3VyY2UgY29kZSBhbmQgb2JqZWN0
IGNvZGUgcHJvZHVjZWQgZnJvbSB0aGUgc291cmNlLCBhcworICogd2VsbCBhcyBjb3B5IGFuZCBk
aXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc29mdHdhcmUuIFlvdQorICogbXVz
dCwgaG93ZXZlciwgaW5jbHVkZSB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgYWxvbmcgd2l0aCBh
bnkgY29kZQorICogYnVpbHQgdXNpbmcgRE9DIHNvZnR3YXJlIHRoYXQgeW91IHJlbGVhc2UuIE5v
IGNvcHlyaWdodCBzdGF0ZW1lbnQKKyAqIG5lZWRzIHRvIGJlIHByb3ZpZGVkIGlmIHlvdSBqdXN0
IHNoaXAgYmluYXJ5IGV4ZWN1dGFibGVzIG9mIHlvdXIKKyAqIHNvZnR3YXJlIHByb2R1Y3RzLgor
ICoKKyAqIFlvdSBjYW4gdXNlIERPQyBzb2Z0d2FyZSBpbiBjb21tZXJjaWFsIGFuZC9vciBiaW5h
cnkgc29mdHdhcmUgcmVsZWFzZXMKKyAqIGFuZCBhcmUgdW5kZXIgbm8gb2JsaWdhdGlvbiB0byBy
ZWRpc3RyaWJ1dGUgYW55IG9mIHlvdXIgc291cmNlIGNvZGUKKyAqIHRoYXQgaXMgYnVpbHQgdXNp
bmcgRE9DIHNvZnR3YXJlLiBOb3RlLCBob3dldmVyLCB0aGF0IHlvdSBtYXkgbm90CisgKiBtaXNh
cHByb3ByaWF0ZSB0aGUgRE9DIHNvZnR3YXJlIGNvZGUsIHN1Y2ggYXMgY29weXJpZ2h0aW5nIGl0
IHlvdXJzZWxmCisgKiBvciBjbGFpbWluZyBhdXRob3JzaGlwIG9mIHRoZSBET0Mgc29mdHdhcmUg
Y29kZSwgaW4gYSB3YXkgdGhhdCB3aWxsCisgKiBwcmV2ZW50IERPQyBzb2Z0d2FyZSBmcm9tIGJl
aW5nIGRpc3RyaWJ1dGVkIGZyZWVseSB1c2luZyBhbgorICogb3Blbi1zb3VyY2UgZGV2ZWxvcG1l
bnQgbW9kZWwuIFlvdSBuZWVkbid0IGluZm9ybSBhbnlvbmUgdGhhdCB5b3UncmUKKyAqIHVzaW5n
IERPQyBzb2Z0d2FyZSBpbiB5b3VyIHNvZnR3YXJlLCB0aG91Z2ggd2UgZW5jb3VyYWdlIHlvdSB0
byBsZXQKKyAqIFsxMF11cyBrbm93IHNvIHdlIGNhbiBwcm9tb3RlIHlvdXIgcHJvamVjdCBpbiB0
aGUgWzExXURPQyBzb2Z0d2FyZQorICogc3VjY2VzcyBzdG9yaWVzLgorICoKKyAqIFRoZSBbMTJd
QUNFLCBbMTNdVEFPLCBbMTRdQ0lBTywgWzE1XURBbkNFLCBhbmQgWzE2XUNvU01JQyB3ZWIgc2l0
ZXMKKyAqIGFyZSBtYWludGFpbmVkIGJ5IHRoZSBbMTddRE9DIEdyb3VwIGF0IHRoZSBbMThdSW5z
dGl0dXRlIGZvciBTb2Z0d2FyZQorICogSW50ZWdyYXRlZCBTeXN0ZW1zIChJU0lTKSBhbmQgdGhl
IFsxOV1DZW50ZXIgZm9yIERpc3RyaWJ1dGVkIE9iamVjdAorICogQ29tcHV0aW5nIG9mIFdhc2hp
bmd0b24gVW5pdmVyc2l0eSwgU3QuIExvdWlzIGZvciB0aGUgZGV2ZWxvcG1lbnQgb2YKKyAqIG9w
ZW4tc291cmNlIHNvZnR3YXJlIGFzIHBhcnQgb2YgdGhlIG9wZW4tc291cmNlIHNvZnR3YXJlIGNv
bW11bml0eS4KKyAqIFN1Ym1pc3Npb25zIGFyZSBwcm92aWRlZCBieSB0aGUgc3VibWl0dGVyIGBg
YXMgaXMnJyB3aXRoIG5vIHdhcnJhbnRpZXMKKyAqIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyBhbnkg
d2FycmFudHkgb2YgbWVyY2hhbnRhYmlsaXR5LCBub25pbmZyaW5nZW1lbnQKKyAqIG9mIHRoaXJk
IHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSwgb3IgZml0bmVzcyBmb3IgYW55IHBhcnRpY3Vs
YXIKKyAqIHB1cnBvc2UuIEluIG5vIGV2ZW50IHNoYWxsIHRoZSBzdWJtaXR0ZXIgYmUgbGlhYmxl
IGZvciBhbnkgZGlyZWN0LAorICogaW5kaXJlY3QsIHNwZWNpYWwsIGV4ZW1wbGFyeSwgcHVuaXRp
dmUsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywKKyAqIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0
YXRpb24sIGxvc3QgcHJvZml0cywgZXZlbiBpZiBhZHZpc2VkIG9mIHRoZQorICogcG9zc2liaWxp
dHkgb2Ygc3VjaCBkYW1hZ2VzLiBMaWtld2lzZSwgRE9DIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFz
IGlzCisgKiB3aXRoIG5vIHdhcnJhbnRpZXMgb2YgYW55IGtpbmQsIGluY2x1ZGluZyB0aGUgd2Fy
cmFudGllcyBvZiBkZXNpZ24sCisgKiBtZXJjaGFudGFiaWxpdHksIGFuZCBmaXRuZXNzIGZvciBh
IHBhcnRpY3VsYXIgcHVycG9zZSwKKyAqIG5vbmluZnJpbmdlbWVudCwgb3IgYXJpc2luZyBmcm9t
IGEgY291cnNlIG9mIGRlYWxpbmcsIHVzYWdlIG9yIHRyYWRlCisgKiBwcmFjdGljZS4gV2FzaGlu
Z3RvbiBVbml2ZXJzaXR5LCBVQyBJcnZpbmUsIFZhbmRlcmJpbHQgVW5pdmVyc2l0eSwKKyAqIHRo
ZWlyIGVtcGxveWVlcywgYW5kIHN0dWRlbnRzIHNoYWxsIGhhdmUgbm8gbGlhYmlsaXR5IHdpdGgg
cmVzcGVjdCB0bworICogdGhlIGluZnJpbmdlbWVudCBvZiBjb3B5cmlnaHRzLCB0cmFkZSBzZWNy
ZXRzIG9yIGFueSBwYXRlbnRzIGJ5IERPQworICogc29mdHdhcmUgb3IgYW55IHBhcnQgdGhlcmVv
Zi4gTW9yZW92ZXIsIGluIG5vIGV2ZW50IHdpbGwgV2FzaGluZ3RvbgorICogVW5pdmVyc2l0eSwg
VUMgSXJ2aW5lLCBvciBWYW5kZXJiaWx0IFVuaXZlcnNpdHksIHRoZWlyIGVtcGxveWVlcywgb3IK
KyAqIHN0dWRlbnRzIGJlIGxpYWJsZSBmb3IgYW55IGxvc3QgcmV2ZW51ZSBvciBwcm9maXRzIG9y
IG90aGVyIHNwZWNpYWwsCisgKiBpbmRpcmVjdCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLgor
ICoKKyAqIERPQyBzb2Z0d2FyZSBpcyBwcm92aWRlZCB3aXRoIG5vIHN1cHBvcnQgYW5kIHdpdGhv
dXQgYW55IG9ibGlnYXRpb24gb24KKyAqIHRoZSBwYXJ0IG9mIFdhc2hpbmd0b24gVW5pdmVyc2l0
eSwgVUMgSXJ2aW5lLCBWYW5kZXJiaWx0IFVuaXZlcnNpdHksCisgKiB0aGVpciBlbXBsb3llZXMs
IG9yIHN0dWRlbnRzIHRvIGFzc2lzdCBpbiBpdHMgdXNlLCBjb3JyZWN0aW9uLAorICogbW9kaWZp
Y2F0aW9uLCBvciBlbmhhbmNlbWVudC4gQSBbMjBdbnVtYmVyIG9mIGNvbXBhbmllcyBhcm91bmQg
dGhlCisgKiB3b3JsZCBwcm92aWRlIGNvbW1lcmNpYWwgc3VwcG9ydCBmb3IgRE9DIHNvZnR3YXJl
LCBob3dldmVyLiBET0MKKyAqIHNvZnR3YXJlIGlzIFkySy1jb21wbGlhbnQsIGFzIGxvbmcgYXMg
dGhlIHVuZGVybHlpbmcgT1MgcGxhdGZvcm0gaXMKKyAqIFkySy1jb21wbGlhbnQuIExpa2V3aXNl
LCBET0Mgc29mdHdhcmUgaXMgY29tcGxpYW50IHdpdGggdGhlIG5ldyBVUworICogZGF5bGlnaHQg
c2F2aW5ncyBydWxlIHBhc3NlZCBieSBDb25ncmVzcyBhcyAiVGhlIEVuZXJneSBQb2xpY3kgQWN0
IG9mCisgKiAyMDA1LCIgd2hpY2ggZXN0YWJsaXNoZWQgbmV3IGRheWxpZ2h0IHNhdmluZ3MgdGlt
ZXMgKERTVCkgcnVsZXMgZm9yCisgKiB0aGUgVW5pdGVkIFN0YXRlcyB0aGF0IGV4cGFuZCBEU1Qg
YXMgb2YgTWFyY2ggMjAwNy4gU2luY2UgRE9DIHNvZnR3YXJlCisgKiBvYnRhaW5zIHRpbWUvZGF0
ZSBhbmQgY2FsZW5kYXJpbmcgaW5mb3JtYXRpb24gZnJvbSBvcGVyYXRpbmcgc3lzdGVtcworICog
dXNlcnMgd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnkgdGhlIG5ldyBEU1QgcnVsZXMgYXMgbG9uZyBh
cyB0aGV5CisgKiB1cGdyYWRlIHRoZWlyIG9wZXJhdGluZyBzeXN0ZW1zIGFjY29yZGluZ2x5Lgor
ICoKKyAqIFRoZSBuYW1lcyBBQ0UoVE0pLCBUQU8oVE0pLCBDSUFPKFRNKSwgREFuQ0UoVE0pLCBD
b1NNSUMoVE0pLAorICogV2FzaGluZ3RvbiBVbml2ZXJzaXR5LCBVQyBJcnZpbmUsIGFuZCBWYW5k
ZXJiaWx0IFVuaXZlcnNpdHksIG1heSBub3QKKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIG9yIHNlcnZpY2VzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiBzb3VyY2Ugd2l0
aG91dCBleHByZXNzIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIFdhc2hpbmd0b24gVW5pdmVyc2l0
eSwKKyAqIFVDIElydmluZSwgb3IgVmFuZGVyYmlsdCBVbml2ZXJzaXR5LiBUaGlzIGxpY2Vuc2Ug
Z3JhbnRzIG5vIHBlcm1pc3Npb24KKyAqIHRvIGNhbGwgcHJvZHVjdHMgb3Igc2VydmljZXMgZGVy
aXZlZCBmcm9tIHRoaXMgc291cmNlIEFDRShUTSksCisgKiBUQU8oVE0pLCBDSUFPKFRNKSwgREFu
Q0UoVE0pLCBvciBDb1NNSUMoVE0pLCBub3IgZG9lcyBpdCBncmFudAorICogcGVybWlzc2lvbiBm
b3IgdGhlIG5hbWUgV2FzaGluZ3RvbiBVbml2ZXJzaXR5LCBVQyBJcnZpbmUsIG9yCisgKiBWYW5k
ZXJiaWx0IFVuaXZlcnNpdHkgdG8gYXBwZWFyIGluIHRoZWlyIG5hbWVzLgorICoKKyAqIElmIHlv
dSBoYXZlIGFueSBzdWdnZXN0aW9ucywgYWRkaXRpb25zLCBjb21tZW50cywgb3IgcXVlc3Rpb25z
LCBwbGVhc2UKKyAqIGxldCBbMjFdbWUga25vdy4KKyAqCisgKiBbMjJdRG91Z2xhcyBDLiBTY2ht
aWR0CisgKgorICogUmVmZXJlbmNlcworICoKKyAqICAxLiBodHRwOi8vd3d3LmNzLnd1c3RsLmVk
dS9+c2NobWlkdC9BQ0UuaHRtbAorICogIDIuIGh0dHA6Ly93d3cuY3Mud3VzdGwuZWR1L35zY2ht
aWR0L1RBTy5odG1sCisgKiAgMy4gaHR0cDovL3d3dy5kcmUudmFuZGVyYmlsdC5lZHUvQ0lBTy8K
KyAqICA0LiBodHRwOi8vd3d3LmRyZS52YW5kZXJiaWx0LmVkdS9jb3NtaWMvCisgKiAgNS4gaHR0
cDovL3d3dy5kcmUudmFuZGVyYmlsdC5lZHUvfnNjaG1pZHQvCisgKiAgNi4gaHR0cDovL3d3dy5j
cy53dXN0bC5lZHUvfnNjaG1pZHQvQUNFLW1lbWJlcnMuaHRtbAorICogIDcuIGh0dHA6Ly93d3cu
d3VzdGwuZWR1LworICogIDguIGh0dHA6Ly93d3cudWNpLmVkdS8KKyAqICA5LiBodHRwOi8vd3d3
LnZhbmRlcmJpbHQuZWR1LworICogMTAuIG1haWx0bzpkb2NfZ3JvdXBAY3Mud3VzdGwuZWR1Cisg
KiAxMS4gaHR0cDovL3d3dy5jcy53dXN0bC5lZHUvfnNjaG1pZHQvQUNFLXVzZXJzLmh0bWwKKyAq
IDEyLiBodHRwOi8vd3d3LmNzLnd1c3RsLmVkdS9+c2NobWlkdC9BQ0UuaHRtbAorICogMTMuIGh0
dHA6Ly93d3cuY3Mud3VzdGwuZWR1L35zY2htaWR0L1RBTy5odG1sCisgKiAxNC4gaHR0cDovL3d3
dy5kcmUudmFuZGVyYmlsdC5lZHUvQ0lBTy8KKyAqIDE1LiBodHRwOi8vd3d3LmRyZS52YW5kZXJi
aWx0LmVkdS9+c2NobWlkdC9ET0NfUk9PVC9EQW5DRS8KKyAqIDE2LiBodHRwOi8vd3d3LmRyZS52
YW5kZXJiaWx0LmVkdS9jb3NtaWMvCisgKiAxNy4gaHR0cDovL3d3dy5kcmUudmFuZGVyYmlsdC5l
ZHUvCisgKiAxOC4gaHR0cDovL3d3dy5pc2lzLnZhbmRlcmJpbHQuZWR1LworICogMTkuIGh0dHA6
Ly93d3cuY3Mud3VzdGwuZWR1L35zY2htaWR0L2RvYy1jZW50ZXIuaHRtbAorICogMjAuIGh0dHA6
Ly93d3cuY3Mud3VzdGwuZWR1L35zY2htaWR0L2NvbW1lcmNpYWwtc3VwcG9ydC5odG1sCisgKiAy
MS4gbWFpbHRvOmQuc2NobWlkdEB2YW5kZXJiaWx0LmVkdQorICogMjIuIGh0dHA6Ly93d3cuZHJl
LnZhbmRlcmJpbHQuZWR1L35zY2htaWR0LworICogMjMuIGh0dHA6Ly93d3cuY3Mud3VzdGwuZWR1
L0FDRS5odG1sCisgKi8KKwordm9pZAorSW5pdGlhbGl6ZVhQQ29uZGl0aW9uVmFyaWFibGUodXNl
cmxhbmRfY29uZF90ICpjdikKK3sKKwljdi0+d2FpdGVyc19jb3VudCA9IDA7CisJSW5pdGlhbGl6
ZUNyaXRpY2FsU2VjdGlvbigmKGN2LT53YWl0ZXJzX2NvdW50X2xvY2spKTsKKwljdi0+ZXZlbnRz
X1tDX1NJR05BTF0gPSBDcmVhdGVFdmVudCAoTlVMTCwgRkFMU0UsIEZBTFNFLCBOVUxMKTsKKwlj
di0+ZXZlbnRzX1tDX0JST0FEQ0FTVF0gPSBDcmVhdGVFdmVudCAoTlVMTCwgVFJVRSwgRkFMU0Us
IE5VTEwpOworfQorCit2b2lkCitEZWxldGVYUENvbmRpdGlvblZhcmlhYmxlKHVzZXJsYW5kX2Nv
bmRfdCAqY3YpCit7CisJQ2xvc2VIYW5kbGUoY3YtPmV2ZW50c19bQ19CUk9BRENBU1RdKTsKKwlD
bG9zZUhhbmRsZShjdi0+ZXZlbnRzX1tDX1NJR05BTF0pOworCURlbGV0ZUNyaXRpY2FsU2VjdGlv
bigmKGN2LT53YWl0ZXJzX2NvdW50X2xvY2spKTsKK30KKworaW50CitTbGVlcFhQQ29uZGl0aW9u
VmFyaWFibGUodXNlcmxhbmRfY29uZF90ICpjdiwgdXNlcmxhbmRfbXV0ZXhfdCAqbXR4KQorewor
CWludCByZXN1bHQsIGxhc3Rfd2FpdGVyOworCisJRW50ZXJDcml0aWNhbFNlY3Rpb24oJmN2LT53
YWl0ZXJzX2NvdW50X2xvY2spOworCWN2LT53YWl0ZXJzX2NvdW50Kys7CisJTGVhdmVDcml0aWNh
bFNlY3Rpb24oJmN2LT53YWl0ZXJzX2NvdW50X2xvY2spOworCUxlYXZlQ3JpdGljYWxTZWN0aW9u
IChtdHgpOworCXJlc3VsdCA9IFdhaXRGb3JNdWx0aXBsZU9iamVjdHMoMiwgY3YtPmV2ZW50c18s
IEZBTFNFLCBJTkZJTklURSk7CisJaWYgKHJlc3VsdD09LTEpIHsKKwkJcmVzdWx0ID0gR2V0TGFz
dEVycm9yKCk7CisJfQorCUVudGVyQ3JpdGljYWxTZWN0aW9uKCZjdi0+d2FpdGVyc19jb3VudF9s
b2NrKTsKKwljdi0+d2FpdGVyc19jb3VudC0tOworCWxhc3Rfd2FpdGVyID0gcmVzdWx0ID09IChD
X1NJR05BTCArIENfQlJPQURDQVNUICYmIChjdi0+d2FpdGVyc19jb3VudCA9PSAwKSk7CisJTGVh
dmVDcml0aWNhbFNlY3Rpb24oJmN2LT53YWl0ZXJzX2NvdW50X2xvY2spOworCWlmIChsYXN0X3dh
aXRlcikKKwkJUmVzZXRFdmVudChjdi0+ZXZlbnRzX1tDX0JST0FEQ0FTVF0pOworCUVudGVyQ3Jp
dGljYWxTZWN0aW9uIChtdHgpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQKK1dha2VBbGxY
UENvbmRpdGlvblZhcmlhYmxlKHVzZXJsYW5kX2NvbmRfdCAqY3YpCit7CisJaW50IGhhdmVfd2Fp
dGVyczsKKwlFbnRlckNyaXRpY2FsU2VjdGlvbigmY3YtPndhaXRlcnNfY291bnRfbG9jayk7CisJ
aGF2ZV93YWl0ZXJzID0gY3YtPndhaXRlcnNfY291bnQgPiAwOworCUxlYXZlQ3JpdGljYWxTZWN0
aW9uKCZjdi0+d2FpdGVyc19jb3VudF9sb2NrKTsKKwlpZiAoaGF2ZV93YWl0ZXJzKQorCQlTZXRF
dmVudCAoY3YtPmV2ZW50c19bQ19CUk9BRENBU1RdKTsKK30KKyNlbmRpZgorI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF91c3JyZXEuYyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3VzcnJlcS5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1
CmluZGV4IDAwMDAwMDAwMDAwMC4uZThjZjc4MDE3YTA1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdXNycmVxLmMKQEAgLTAsMCArMSw5MDU1IEBA
CisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKiBD
b3B5cmlnaHQgKGMpIDIwMDEtMjAwOCwgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2Fy
dC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBN
aWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICog
YikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
YykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2luY2x1ZGUgPHN5cy9j
ZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworI2VuZGlmCisKKyNpbmNsdWRlIDxuZXRp
bmV0L3NjdHBfb3MuaD4KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxuZXRp
bmV0L3NjdHBfcGNiLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2hlYWRlci5oPgorI2luY2x1
ZGUgPG5ldGluZXQvc2N0cF92YXIuaD4KKyNpZmRlZiBJTkVUNgorI2luY2x1ZGUgPG5ldGluZXQ2
L3NjdHA2X3Zhci5oPgorI2VuZGlmCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5oPgor
I2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vdXRwdXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBf
dWlvLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2FzY29uZi5oPgorI2luY2x1ZGUgPG5ldGlu
ZXQvc2N0cHV0aWwuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaW5kYXRhLmg+CisjaW5jbHVk
ZSA8bmV0aW5ldC9zY3RwX3RpbWVyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2F1dGguaD4K
KyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYnNkX2FkZHIuaD4KKyNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2NhbGxvdXQuaD4KKyNlbHNlCisjaW5jbHVk
ZSA8bmV0aW5ldC91ZHAuaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaW5jbHVkZSA8c3lzL2V2ZW50aGFuZGxlci5oPgorI2Vu
ZGlmCisjaWYgZGVmaW5lZChIQVZFX1NDVFBfUEVFTE9GRl9TT0NLT1BUKQorI2luY2x1ZGUgPG5l
dGluZXQvc2N0cF9wZWVsb2ZmLmg+CisjZW5kaWYJCQkJLyogSEFWRV9TQ1RQX1BFRUxPRkZfU09D
S09QVCAqLworCitleHRlcm4gY29uc3Qgc3RydWN0IHNjdHBfY2NfZnVuY3Rpb25zIHNjdHBfY2Nf
ZnVuY3Rpb25zW107CitleHRlcm4gY29uc3Qgc3RydWN0IHNjdHBfc3NfZnVuY3Rpb25zIHNjdHBf
c3NfZnVuY3Rpb25zW107CisKK3ZvaWQKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitzY3Rw
X2luaXQodWludDE2X3QgcG9ydCwKKyAgICAgICAgICBpbnQgKCpjb25uX291dHB1dCkodm9pZCAq
YWRkciwgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCB1aW50OF90IHRvcywgdWludDhfdCBz
ZXRfZGYpLAorICAgICAgICAgIHZvaWQgKCpkZWJ1Z19wcmludGYpKGNvbnN0IGNoYXIgKmZvcm1h
dCwgLi4uKSwgaW50IHN0YXJ0X3RocmVhZHMpCisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYg
KCFkZWZpbmVkKEFQUExFX0xFT1BBUkQpICYmICFkZWZpbmVkKEFQUExFX1NOT1dMRU9QQVJEKSAm
JiFkZWZpbmVkKEFQUExFX0xJT04pICYmICFkZWZpbmVkKEFQUExFX01PVU5UQUlOTElPTikpCitz
Y3RwX2luaXQoc3RydWN0IHByb3Rvc3cgKnBwIFNDVFBfVU5VU0VELCBzdHJ1Y3QgZG9tYWluICpk
cCBTQ1RQX1VOVVNFRCkKKyNlbHNlCitzY3RwX2luaXQodm9pZCkKKyNlbmRpZgoreworI2lmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJdV9sb25nIHNiX21heF9hZGo7CisKKyNlbHNlCisJaW5p
dF9yYW5kb20oKTsKKyNlbmRpZgorCS8qIEluaXRpYWxpemUgYW5kIG1vZGlmeSB0aGUgc3lzY3Rs
ZWQgdmFyaWFibGVzICovCisJc2N0cF9pbml0X3N5c2N0bHMoKTsKKyNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX3VkcF90dW5uZWxpbmdfcG9ydCkgPSBw
b3J0OworI2Vsc2UKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKKwlzYl9tYXhfYWRqID0gKHVfbG9uZykoKHVfcXVhZF90KSAoc2JfbWF4KSAqIE1DTEJZ
VEVTIC8gKE1TSVpFICsgTUNMQllURVMpKTsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfc2VuZHNw
YWNlKSA9IHNiX21heF9hZGo7CisjZWxzZQorCWlmICgobm1iY2x1c3RlcnMgLyA4KSA+IFNDVFBf
QVNPQ19NQVhfQ0hVTktTX09OX1FVRVVFKQorCQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWF4X2No
dW5rc19vbl9xdWV1ZSkgPSAobm1iY2x1c3RlcnMgLyA4KTsKKwkvKgorCSAqIEFsbG93IGEgdXNl
ciB0byB0YWtlIG5vIG1vcmUgdGhhbiAxLzIgdGhlIG51bWJlciBvZiBjbHVzdGVycyBvcgorCSAq
IHRoZSBTQl9NQVgsIHdoaWNoZXZlciBpcyBzbWFsbGVyLCBmb3IgdGhlIHNlbmQgd2luZG93Lgor
CSAqLworCXNiX21heF9hZGogPSAodV9sb25nKSgodV9xdWFkX3QpIChTQl9NQVgpICogTUNMQllU
RVMgLyAoTVNJWkUgKyBNQ0xCWVRFUykpOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zZW5kc3Bh
Y2UpID0gbWluKHNiX21heF9hZGosCisJICAgICgoKHVpbnQzMl90KW5tYmNsdXN0ZXJzIC8gMikg
KiBTQ1RQX0RFRkFVTFRfTUFYU0VHTUVOVCkpOworI2VuZGlmCisJLyoKKwkgKiBOb3cgZm9yIHRo
ZSByZWN2IHdpbmRvdywgc2hvdWxkIHdlIHRha2UgdGhlIHNhbWUgYW1vdW50PyBvcgorCSAqIHNo
b3VsZCBJIGRvIDEvMiB0aGUgU0JfTUFYIGluc3RlYWQgaW4gdGhlIFNCX01BWCBtaW4gYWJvdmUu
IEZvcgorCSAqIG5vdyBJIHdpbGwganVzdCBjb3B5LgorCSAqLworCVNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9yZWN2c3BhY2UpID0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX3NlbmRzcGFjZSk7CisjZW5k
aWYKKwlTQ1RQX0JBU0VfVkFSKGZpcnN0X3RpbWUpID0gMDsKKwlTQ1RQX0JBU0VfVkFSKHNjdHBf
cGNiX2luaXRpYWxpemVkKSA9IDA7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmICFk
ZWZpbmVkKF9XSU4zMikKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisJU0NU
UF9CQVNFX1ZBUih1c2Vyc3BhY2Vfcm91dGUpID0gLTE7CisjZW5kaWYKKyNlbmRpZgorI2lmZGVm
IElORVQKKwlTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSA9IC0xOworCVNDVFBfQkFT
RV9WQVIodXNlcnNwYWNlX3VkcHNjdHApID0gLTE7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCVND
VFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSA9IC0xOworCVNDVFBfQkFTRV9WQVIodXNl
cnNwYWNlX3VkcHNjdHA2KSA9IC0xOworI2VuZGlmCisJU0NUUF9CQVNFX1ZBUih0aW1lcl90aHJl
YWRfc2hvdWxkX2V4aXQpID0gMDsKKwlTQ1RQX0JBU0VfVkFSKGNvbm5fb3V0cHV0KSA9IGNvbm5f
b3V0cHV0OworCVNDVFBfQkFTRV9WQVIoZGVidWdfcHJpbnRmKSA9IGRlYnVnX3ByaW50ZjsKKwlT
Q1RQX0JBU0VfVkFSKGNyYzMyY19vZmZsb2FkZWQpID0gMDsKKwlTQ1RQX0JBU0VfVkFSKGl0ZXJh
dG9yX3RocmVhZF9zdGFydGVkKSA9IDA7CisJU0NUUF9CQVNFX1ZBUih0aW1lcl90aHJlYWRfc3Rh
cnRlZCkgPSAwOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXNjdHBfcGNi
X2luaXQoc3RhcnRfdGhyZWFkcyk7CisJaWYgKHN0YXJ0X3RocmVhZHMpIHsKKwkJc2N0cF9zdGFy
dF90aW1lcl90aHJlYWQoKTsKKwl9CisjZWxzZQorCXNjdHBfcGNiX2luaXQoKTsKKyNlbmRpZgor
I2lmIGRlZmluZWQoU0NUUF9QQUNLRVRfTE9HR0lORykKKwlTQ1RQX0JBU0VfVkFSKHBhY2tldF9s
b2dfd3JpdGVycykgPSAwOworCVNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ19lbmQpID0gMDsKKwlt
ZW1zZXQoJlNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ19idWZmZXIpLCAwLCBTQ1RQX1BBQ0tFVF9M
T0dfU0laRSk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKwlTQ1RQX0JBU0VfVkFSKHNjdHBfbWFpbl90aW1lcl90aWNrcykgPSAwOwor
CXNjdHBfc3RhcnRfbWFpbl90aW1lcigpOworCXRpbWVvdXQoc2N0cF9kZWxheWVkX3N0YXJ0dXAs
IE5VTEwsIDEpOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKKwlTQ1RQX0JBU0VfVkFSKGVoX3RhZykgPSBFVkVOVEhBTkRMRVJfUkVH
SVNURVIocnRfYWRkcm1zZywKKwkgICAgc2N0cF9hZGRyX2NoYW5nZV9ldmVudF9oYW5kbGVyLCBO
VUxMLCBFVkVOVEhBTkRMRVJfUFJJX0ZJUlNUKTsKKyNlbmRpZgorfQorCisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpZmRlZiBWSU1BR0UKK3N0
YXRpYyB2b2lkCitzY3RwX2ZpbmlzaCh2b2lkICp1bnVzZWQgX191bnVzZWQpCit7CisJRVZFTlRI
QU5ETEVSX0RFUkVHSVNURVIocnRfYWRkcm1zZywgU0NUUF9CQVNFX1ZBUihlaF90YWcpKTsKKwlz
Y3RwX3BjYl9maW5pc2goKTsKK30KK1ZORVRfU1lTVU5JTklUKHNjdHAsIFNJX1NVQl9QUk9UT19E
T01BSU4sIFNJX09SREVSX0ZPVVJUSCwgc2N0cF9maW5pc2gsIE5VTEwpOworI2VuZGlmCisjZWxz
ZQordm9pZAorc2N0cF9maW5pc2godm9pZCkKK3sKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYg
IWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwl1bnRpbWVvdXQoc2N0cF9kZWxheWVkX3N0YXJ0dXAs
IE5VTEwpOworCXNjdHBfb3Zlcl91ZHBfc3RvcCgpOworCXNjdHBfYWRkcmVzc19tb25pdG9yX3N0
b3AoKTsKKwlzY3RwX3N0b3BfbWFpbl90aW1lcigpOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKwlyZWN2X3Ro
cmVhZF9kZXN0cm95KCk7CisjZW5kaWYKKwlzY3RwX3N0b3BfdGltZXJfdGhyZWFkKCk7CisjZW5k
aWYKKwlzY3RwX3BjYl9maW5pc2goKTsKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKKwlzY3RwX2ZpbmlzaF9zeXNjdGxzKCk7CisjZW5kaWYKKyNpZiBkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCisJZmluaXNoX3JhbmRvbSgpOworI2VuZGlmCit9CisjZW5kaWYK
Kwordm9pZAorc2N0cF9wYXRobXR1X2FkanVzdG1lbnQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1
aW50MTZfdCBueHRzeikKK3sKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7CisJdWludDE2
X3Qgb3ZlcmhlYWQ7CisKKwkvKiBBZGp1c3QgdGhhdCB0b28gKi8KKwlzdGNiLT5hc29jLnNtYWxs
ZXN0X210dSA9IG54dHN6OworCS8qIG5vdyBvZmYgdG8gc3VidHJhY3QgSVBfREYgZmxhZyBpZiBu
ZWVkZWQgKi8KKwlvdmVyaGVhZCA9IElQX0hEUl9TSVpFICsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRy
KTsKKwlpZiAoc2N0cF9hdXRoX2lzX3JlcXVpcmVkX2NodW5rKFNDVFBfREFUQSwgc3RjYi0+YXNv
Yy5wZWVyX2F1dGhfY2h1bmtzKSkgeworCQlvdmVyaGVhZCArPSBzY3RwX2dldF9hdXRoX2NodW5r
X2xlbihzdGNiLT5hc29jLnBlZXJfaG1hY19pZCk7CisJfQorCVRBSUxRX0ZPUkVBQ0goY2hrLCAm
c3RjYi0+YXNvYy5zZW5kX3F1ZXVlLCBzY3RwX25leHQpIHsKKwkJaWYgKChjaGstPnNlbmRfc2l6
ZSArIG92ZXJoZWFkKSA+IG54dHN6KSB7CisJCQljaGstPmZsYWdzIHw9IENIVU5LX0ZMQUdTX0ZS
QUdNRU5UX09LOworCQl9CisJfQorCVRBSUxRX0ZPUkVBQ0goY2hrLCAmc3RjYi0+YXNvYy5zZW50
X3F1ZXVlLCBzY3RwX25leHQpIHsKKwkJaWYgKChjaGstPnNlbmRfc2l6ZSArIG92ZXJoZWFkKSA+
IG54dHN6KSB7CisJCQkvKgorCQkJICogRm9yIHRoaXMgZ3V5IHdlIGFsc28gbWFyayBmb3IgaW1t
ZWRpYXRlIHJlc2VuZAorCQkJICogc2luY2Ugd2Ugc2VudCB0byBiaWcgb2YgY2h1bmsKKwkJCSAq
LworCQkJY2hrLT5mbGFncyB8PSBDSFVOS19GTEFHU19GUkFHTUVOVF9PSzsKKwkJCWlmIChjaGst
PnNlbnQgPCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgeworCQkJCXNjdHBfZmxpZ2h0X3NpemVfZGVj
cmVhc2UoY2hrKTsKKwkJCQlzY3RwX3RvdGFsX2ZsaWdodF9kZWNyZWFzZShzdGNiLCBjaGspOwor
CQkJCWNoay0+c2VudCA9IFNDVFBfREFUQUdSQU1fUkVTRU5EOworCQkJCXNjdHBfdWNvdW50X2lu
Y3Ioc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOworCQkJCWNoay0+cmVjLmRhdGEu
ZG9pbmdfZmFzdF9yZXRyYW5zbWl0ID0gMDsKKwkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GTElHSFRfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQkJc2N0
cF9taXNjX2ludHMoU0NUUF9GTElHSFRfTE9HX0RPV05fUE1UVSwKKwkJCQkJCSAgICAgICBjaGst
Pndob1RvLT5mbGlnaHRfc2l6ZSwKKwkJCQkJCSAgICAgICBjaGstPmJvb2tfc2l6ZSwKKwkJCQkJ
CSAgICAgICAodWludDMyX3QpKHVpbnRwdHJfdCljaGstPndob1RvLAorCQkJCQkJICAgICAgIGNo
ay0+cmVjLmRhdGEudHNuKTsKKwkJCQl9CisJCQkJLyogQ2xlYXIgYW55IHRpbWUgc28gTk8gUlRU
IGlzIGJlaW5nIGRvbmUgKi8KKwkJCQlpZiAoY2hrLT5kb19ydHQgPT0gMSkgeworCQkJCQljaGst
PmRvX3J0dCA9IDA7CisJCQkJCWNoay0+d2hvVG8tPnJ0b19uZWVkZWQgPSAxOworCQkJCX0KKwkJ
CX0KKwkJfQorCX0KK30KKworI2lmZGVmIElORVQKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQordm9pZAorc2N0cF9ub3RpZnkoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKKyAgICAgICAgICAg
IHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICAgICAgICAgIHN0cnVjdCBzY3RwX25ldHMgKm5l
dCwKKyAgICAgICAgICAgIHVpbnQ4X3QgaWNtcF90eXBlLAorICAgICAgICAgICAgdWludDhfdCBp
Y21wX2NvZGUsCisgICAgICAgICAgICB1aW50MTZfdCBpcF9sZW4sCisgICAgICAgICAgICB1aW50
MzJfdCBuZXh0X210dSkKK3sKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKwlzdHJ1Y3Qgc29ja2V0ICpzbzsKKyNlbmRpZgorCWludCB0aW1lcl9zdG9w
cGVkOworCisJaWYgKGljbXBfdHlwZSAhPSBJQ01QX1VOUkVBQ0gpIHsKKwkJLyogV2Ugb25seSBj
YXJlIGFib3V0IHVucmVhY2hhYmxlICovCisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJcmV0
dXJuOworCX0KKwlpZiAoKGljbXBfY29kZSA9PSBJQ01QX1VOUkVBQ0hfTkVUKSB8fAorCSAgICAo
aWNtcF9jb2RlID09IElDTVBfVU5SRUFDSF9IT1NUKSB8fAorCSAgICAoaWNtcF9jb2RlID09IElD
TVBfVU5SRUFDSF9ORVRfVU5LTk9XTikgfHwKKwkgICAgKGljbXBfY29kZSA9PSBJQ01QX1VOUkVB
Q0hfSE9TVF9VTktOT1dOKSB8fAorCSAgICAoaWNtcF9jb2RlID09IElDTVBfVU5SRUFDSF9JU09M
QVRFRCkgfHwKKwkgICAgKGljbXBfY29kZSA9PSBJQ01QX1VOUkVBQ0hfTkVUX1BST0hJQikgfHwK
KwkgICAgKGljbXBfY29kZSA9PSBJQ01QX1VOUkVBQ0hfSE9TVF9QUk9ISUIpIHx8CisjaWYgZGVm
aW5lZChfX05ldEJTRF9fKQorCSAgICAoaWNtcF9jb2RlID09IElDTVBfVU5SRUFDSF9BRE1JTl9Q
Uk9ISUJJVCkpIHsKKyNlbHNlCisJICAgIChpY21wX2NvZGUgPT0gSUNNUF9VTlJFQUNIX0ZJTFRF
Ul9QUk9ISUIpKSB7CisjZW5kaWYKKwkJLyogTWFyayB0aGUgbmV0IHVucmVhY2hhYmxlLiAqLwor
CQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkgeworCQkJLyogT0ss
IHRoYXQgZGVzdGluYXRpb24gaXMgTk9UIHJlYWNoYWJsZS4gKi8KKwkJCW5ldC0+ZGVzdF9zdGF0
ZSAmPSB+U0NUUF9BRERSX1JFQUNIQUJMRTsKKwkJCW5ldC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9B
RERSX1BGOworCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0lOVEVSRkFDRV9ET1dOLAor
CQkJICAgICAgICAgICAgICAgIHN0Y2IsIDAsCisJCQkgICAgICAgICAgICAgICAgKHZvaWQgKilu
ZXQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCX0KKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwor
CX0gZWxzZSAgaWYgKChpY21wX2NvZGUgPT0gSUNNUF9VTlJFQUNIX1BST1RPQ09MKSB8fAorCQkg
ICAgKGljbXBfY29kZSA9PSBJQ01QX1VOUkVBQ0hfUE9SVCkpIHsKKwkJLyogVHJlYXQgaXQgbGlr
ZSBhbiBBQk9SVC4gKi8KKwkJc2N0cF9hYm9ydF9ub3RpZmljYXRpb24oc3RjYiwgMSwgMCwgTlVM
TCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwkJc28gPSBTQ1RQX0lOUF9TTyhpbnApOworCQlhdG9taWNfYWRk
X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJ
CVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOworCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQlhdG9t
aWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisjZW5kaWYKKwkJKHZvaWQp
c2N0cF9mcmVlX2Fzc29jKGlucCwgc3RjYiwgU0NUUF9OT1JNQUxfUFJPQywKKwkJICAgICAgICAg
ICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9DXzIpOworI2lmIGRl
ZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlTQ1RQX1NPQ0tF
VF9VTkxPQ0soc28sIDEpOworCQkvKiBTQ1RQX1RDQl9VTkxPQ0soc3RjYik7IE1UOiBJIHRoaW5r
IHRoaXMgaXMgbm90IG5lZWRlZC4qLworI2VuZGlmCisJCS8qIG5vIG5lZWQgdG8gdW5sb2NrIGhl
cmUsIHNpbmNlIHRoZSBUQ0IgaXMgZ29uZSAqLworCX0gZWxzZSBpZiAoaWNtcF9jb2RlID09IElD
TVBfVU5SRUFDSF9ORUVERlJBRykgeworCQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERS
X05PX1BNVFVEKSB7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQlyZXR1cm47CisJCX0K
KwkJLyogRmluZCB0aGUgbmV4dCAoc21hbGxlcikgTVRVICovCisJCWlmIChuZXh0X210dSA9PSAw
KSB7CisJCQkvKgorCQkJICogT2xkIHR5cGUgcm91dGVyIHRoYXQgZG9lcyBub3QgdGVsbCB1cyB3
aGF0IHRoZSBuZXh0CisJCQkgKiBNVFUgaXMuCisJCQkgKiBSYXRzIHdlIHdpbGwgaGF2ZSB0byBn
dWVzcyAoaW4gYSBlZHVjYXRlZCBmYXNoaW9uCisJCQkgKiBvZiBjb3Vyc2UpLgorCQkJICovCisJ
CQluZXh0X210dSA9IHNjdHBfZ2V0X3ByZXZfbXR1KGlwX2xlbik7CisJCX0KKwkJLyogU3RvcCB0
aGUgUE1UVSB0aW1lci4gKi8KKwkJaWYgKFNDVFBfT1NfVElNRVJfUEVORElORygmbmV0LT5wbXR1
X3RpbWVyLnRpbWVyKSkgeworCQkJdGltZXJfc3RvcHBlZCA9IDE7CisJCQlzY3RwX3RpbWVyX3N0
b3AoU0NUUF9USU1FUl9UWVBFX1BBVEhNVFVSQUlTRSwgaW5wLCBzdGNiLCBuZXQsCisJCQkgICAg
ICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfVVNSUkVRICsgU0NUUF9MT0NfMSk7CisJCX0gZWxz
ZSB7CisJCQl0aW1lcl9zdG9wcGVkID0gMDsKKwkJfQorCQkvKiBVcGRhdGUgdGhlIHBhdGggTVRV
LiAqLworCQlpZiAobmV0LT5wb3J0KSB7CisJCQluZXh0X210dSAtPSBzaXplb2Yoc3RydWN0IHVk
cGhkcik7CisJCX0KKwkJaWYgKG5ldC0+bXR1ID4gbmV4dF9tdHUpIHsKKwkJCW5ldC0+bXR1ID0g
bmV4dF9tdHU7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKKwkJCWlmIChuZXQtPnBvcnQpIHsKKwkJCQlzY3RwX2hjX3NldF9tdHUoJm5ldC0+cm8u
X2xfYWRkciwgaW5wLT5maWJudW0sIG5leHRfbXR1ICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsK
KwkJCX0gZWxzZSB7CisJCQkJc2N0cF9oY19zZXRfbXR1KCZuZXQtPnJvLl9sX2FkZHIsIGlucC0+
ZmlibnVtLCBuZXh0X210dSk7CisJCQl9CisjZW5kaWYKKwkJfQorCQkvKiBVcGRhdGUgdGhlIGFz
c29jaWF0aW9uIE1UVSAqLworCQlpZiAoc3RjYi0+YXNvYy5zbWFsbGVzdF9tdHUgPiBuZXh0X210
dSkgeworCQkJc2N0cF9wYXRobXR1X2FkanVzdG1lbnQoc3RjYiwgbmV4dF9tdHUpOworCQl9CisJ
CS8qIEZpbmFsbHksIHN0YXJ0IHRoZSBQTVRVIHRpbWVyIGlmIGl0IHdhcyBydW5uaW5nIGJlZm9y
ZS4gKi8KKwkJaWYgKHRpbWVyX3N0b3BwZWQpIHsKKwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9U
SU1FUl9UWVBFX1BBVEhNVFVSQUlTRSwgaW5wLCBzdGNiLCBuZXQpOworCQl9CisJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKKwl9IGVsc2UgeworCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJfQor
fQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQordm9pZAorI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChBUFBMRV9MRU9QQVJEKSAmJiAhZGVmaW5lZChBUFBM
RV9TTk9XTEVPUEFSRCkgJiYgIWRlZmluZWQoQVBQTEVfTElPTikgJiYgIWRlZmluZWQoQVBQTEVf
TU9VTlRBSU5MSU9OKSAmJiAhZGVmaW5lZChBUFBMRV9FTENBUElUQU4pCitzY3RwX2N0bGlucHV0
KGludCBjbWQsIHN0cnVjdCBzb2NrYWRkciAqc2EsIHZvaWQgKnZpcCwgc3RydWN0IGlmbmV0ICpp
ZnAgU0NUUF9VTlVTRUQpCisjZWxzZQorc2N0cF9jdGxpbnB1dChpbnQgY21kLCBzdHJ1Y3Qgc29j
a2FkZHIgKnNhLCB2b2lkICp2aXApCisjZW5kaWYKK3sKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXN0cnVjdCBpcCAqb3V0ZXJfaXA7CisjZW5k
aWYKKwlzdHJ1Y3QgaXAgKmlubmVyX2lwOworCXN0cnVjdCBzY3RwaGRyICpzaDsKKwlzdHJ1Y3Qg
aWNtcCAqaWNtcDsKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCXN0cnVjdCBzY3RwX3RjYiAq
c3RjYjsKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICpjaDsK
KyNlbmRpZgorCXN0cnVjdCBzb2NrYWRkcl9pbiBzcmMsIGRzdDsKKworCWlmIChzYS0+c2FfZmFt
aWx5ICE9IEFGX0lORVQgfHwKKwkgICAgKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYSktPnNpbl9h
ZGRyLnNfYWRkciA9PSBJTkFERFJfQU5ZKSB7CisJCXJldHVybjsKKwl9CisJaWYgKFBSQ19JU19S
RURJUkVDVChjbWQpKSB7CisJCXZpcCA9IE5VTEw7CisJfSBlbHNlIGlmICgodW5zaWduZWQpY21k
ID49IFBSQ19OQ01EUyB8fCBpbmV0Y3RsZXJybWFwW2NtZF0gPT0gMCkgeworCQlyZXR1cm47CisJ
fQorCWlmICh2aXAgIT0gTlVMTCkgeworCQlpbm5lcl9pcCA9IChzdHJ1Y3QgaXAgKil2aXA7CisJ
CWljbXAgPSAoc3RydWN0IGljbXAgKikoKGNhZGRyX3QpaW5uZXJfaXAgLQorCQkgICAgKHNpemVv
ZihzdHJ1Y3QgaWNtcCkgLSBzaXplb2Yoc3RydWN0IGlwKSkpOworI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCW91dGVyX2lwID0gKHN0cnVjdCBp
cCAqKSgoY2FkZHJfdClpY21wIC0gc2l6ZW9mKHN0cnVjdCBpcCkpOworI2VuZGlmCisJCXNoID0g
KHN0cnVjdCBzY3RwaGRyICopKChjYWRkcl90KWlubmVyX2lwICsgKGlubmVyX2lwLT5pcF9obCA8
PCAyKSk7CisJCW1lbXNldCgmc3JjLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJ
CXNyYy5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwkJc3JjLnNp
bl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCQlzcmMuc2luX3Bv
cnQgPSBzaC0+c3JjX3BvcnQ7CisJCXNyYy5zaW5fYWRkciA9IGlubmVyX2lwLT5pcF9zcmM7CisJ
CW1lbXNldCgmZHN0LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJCWRzdC5zaW5f
ZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwkJZHN0LnNpbl9sZW4gPSBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCQlkc3Quc2luX3BvcnQgPSBzaC0+
ZGVzdF9wb3J0OworCQlkc3Quc2luX2FkZHIgPSBpbm5lcl9pcC0+aXBfZHN0OworCQkvKgorCQkg
KiAnZHN0JyBob2xkcyB0aGUgZGVzdCBvZiB0aGUgcGFja2V0IHRoYXQgZmFpbGVkIHRvIGJlIHNl
bnQuCisJCSAqICdzcmMnIGhvbGRzIG91ciBsb2NhbCBlbmRwb2ludCBhZGRyZXNzLiBUaHVzIHdl
IHJldmVyc2UKKwkJICogdGhlIGRzdCBhbmQgdGhlIHNyYyBpbiB0aGUgbG9va3VwLgorCQkgKi8K
KwkJaW5wID0gTlVMTDsKKwkJbmV0ID0gTlVMTDsKKwkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0
aW9uX2FkZHJfc2EoKHN0cnVjdCBzb2NrYWRkciAqKSZkc3QsCisJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3JjLAorCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5wLCAmbmV0LCAxLAorCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0RFRkFVTFRfVlJGSUQpOworCQlpZiAoKHN0Y2Ig
IT0gTlVMTCkgJiYKKwkJICAgIChuZXQgIT0gTlVMTCkgJiYKKwkJICAgIChpbnAgIT0gTlVMTCkp
IHsKKwkJCS8qIENoZWNrIHRoZSB2ZXJpZmljYXRpb24gdGFnICovCisJCQlpZiAobnRvaGwoc2gt
PnZfdGFnKSAhPSAwKSB7CisJCQkJLyoKKwkJCQkgKiBUaGlzIG11c3QgYmUgdGhlIHZlcmlmaWNh
dGlvbiB0YWcgdXNlZCBmb3IKKwkJCQkgKiBzZW5kaW5nIG91dCBwYWNrZXRzLiBXZSBkb24ndCBj
b25zaWRlcgorCQkJCSAqIHBhY2tldHMgcmVmbGVjdGluZyB0aGUgdmVyaWZpY2F0aW9uIHRhZy4K
KwkJCQkgKi8KKwkJCQlpZiAobnRvaGwoc2gtPnZfdGFnKSAhPSBzdGNiLT5hc29jLnBlZXJfdnRh
ZykgeworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCXJldHVybjsKKwkJCQl9CisJ
CQl9IGVsc2UgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisJCQkJaWYgKG50b2hzKG91dGVyX2lwLT5pcF9sZW4pID49CisJCQkJICAgIHNpemVv
ZihzdHJ1Y3QgaXApICsKKwkJCQkgICAgOCArIChpbm5lcl9pcC0+aXBfaGwgPDwgMikgKyAyMCkg
eworCQkJCQkvKgorCQkJCQkgKiBJbiB0aGlzIGNhc2Ugd2UgY2FuIGNoZWNrIGlmIHdlCisJCQkJ
CSAqIGdvdCBhbiBJTklUIGNodW5rIGFuZCBpZiB0aGUKKwkJCQkJICogaW5pdGlhdGUgdGFnIG1h
dGNoZXMuCisJCQkJCSAqLworCQkJCQljaCA9IChzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICopKHNo
ICsgMSk7CisJCQkJCWlmICgoY2gtPmNoLmNodW5rX3R5cGUgIT0gU0NUUF9JTklUSUFUSU9OKSB8
fAorCQkJCQkgICAgKG50b2hsKGNoLT5pbml0LmluaXRpYXRlX3RhZykgIT0gc3RjYi0+YXNvYy5t
eV92dGFnKSkgeworCQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQkJcmV0dXJuOwor
CQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQly
ZXR1cm47CisJCQkJfQorI2Vsc2UKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJcmV0
dXJuOworI2VuZGlmCisJCQl9CisJCQlzY3RwX25vdGlmeShpbnAsIHN0Y2IsIG5ldCwKKwkJCSAg
ICAgICAgICAgIGljbXAtPmljbXBfdHlwZSwKKwkJCSAgICAgICAgICAgIGljbXAtPmljbXBfY29k
ZSwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CQkJICAgICAgICAgICAgbnRvaHMoaW5uZXJfaXAtPmlwX2xlbiksCisjZWxzZQorCQkJICAgICAg
ICAgICAgaW5uZXJfaXAtPmlwX2xlbiwKKyNlbmRpZgorCQkJICAgICAgICAgICAgKHVpbnQzMl90
KW50b2hzKGljbXAtPmljbXBfbmV4dG10dSkpOworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KwkJCWlmICghKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NL
RVRfR09ORSkgJiYKKwkJCSAgICAoc3RjYi0+c2N0cF9zb2NrZXQgIT0gTlVMTCkpIHsKKwkJCQlz
dHJ1Y3Qgc29ja2V0ICp1cGNhbGxfc29ja2V0OworCisJCQkJdXBjYWxsX3NvY2tldCA9IHN0Y2It
PnNjdHBfc29ja2V0OworCQkJCVNPQ0tfTE9DSyh1cGNhbGxfc29ja2V0KTsKKwkJCQlzb3JlZih1
cGNhbGxfc29ja2V0KTsKKwkJCQlTT0NLX1VOTE9DSyh1cGNhbGxfc29ja2V0KTsKKwkJCQlpZiAo
KHVwY2FsbF9zb2NrZXQtPnNvX3VwY2FsbCAhPSBOVUxMKSAmJgorCQkJCSAgICAodXBjYWxsX3Nv
Y2tldC0+c29fZXJyb3IgIT0gMCkpIHsKKwkJCQkJKCp1cGNhbGxfc29ja2V0LT5zb191cGNhbGwp
KHVwY2FsbF9zb2NrZXQsIHVwY2FsbF9zb2NrZXQtPnNvX3VwY2FsbGFyZywgTV9OT1dBSVQpOwor
CQkJCX0KKwkJCQlBQ0NFUFRfTE9DSygpOworCQkJCVNPQ0tfTE9DSyh1cGNhbGxfc29ja2V0KTsK
KwkJCQlzb3JlbGUodXBjYWxsX3NvY2tldCk7CisJCQl9CisjZW5kaWYKKwkJfSBlbHNlIHsKKwkJ
CWlmICgoc3RjYiA9PSBOVUxMKSAmJiAoaW5wICE9IE5VTEwpKSB7CisJCQkJLyogcmVkdWNlIHJl
Zi1jb3VudCAqLworCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJU0NUUF9JTlBfREVDUl9S
RUYoaW5wKTsKKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQl9CisJCQlpZiAoc3RjYikg
eworCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm47Cit9
CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKK3N0YXRpYyBpbnQKK3NjdHBfZ2V0Y3JlZChTWVNDVExfSEFORExFUl9B
UkdTKQoreworCXN0cnVjdCB4dWNyZWQgeHVjOworCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyc1sy
XTsKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKwlz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7CisJaW50IGVycm9yOworCXVpbnQzMl90IHZyZl9pZDsKKwor
CS8qIEZJWCwgZm9yIG5vbi1ic2QgaXMgdGhpcyByaWdodD8gKi8KKwl2cmZfaWQgPSBTQ1RQX0RF
RkFVTFRfVlJGSUQ7CisKKwllcnJvciA9IHByaXZfY2hlY2socmVxLT50ZCwgUFJJVl9ORVRJTkVU
X0dFVENSRUQpOworCisJaWYgKGVycm9yKQorCQlyZXR1cm4gKGVycm9yKTsKKworCWVycm9yID0g
U1lTQ1RMX0lOKHJlcSwgYWRkcnMsIHNpemVvZihhZGRycykpOworCWlmIChlcnJvcikKKwkJcmV0
dXJuIChlcnJvcik7CisKKwlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fYWRkcl9zYShzaW50
b3NhKCZhZGRyc1sxXSksCisJICAgIHNpbnRvc2EoJmFkZHJzWzBdKSwKKwkgICAgJmlucCwgJm5l
dCwgMSwgdnJmX2lkKTsKKwlpZiAoc3RjYiA9PSBOVUxMIHx8IGlucCA9PSBOVUxMIHx8IGlucC0+
c2N0cF9zb2NrZXQgPT0gTlVMTCkgeworCQlpZiAoKGlucCAhPSBOVUxMKSAmJiAoc3RjYiA9PSBO
VUxMKSkgeworCQkJLyogcmVkdWNlIHJlZi1jb3VudCAqLworCQkJU0NUUF9JTlBfV0xPQ0soaW5w
KTsKKwkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQlnb3RvIGNyZWRfY2FuX2NvbnQ7CisJ
CX0KKworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfVVNSUkVRLCBFTk9FTlQpOworCQllcnJvciA9IEVOT0VOVDsKKwkJZ290byBvdXQ7CisJfQor
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkvKiBXZSB1c2UgdGhlIHdyaXRlIGxvY2sgaGVyZSwg
b25seQorCSAqIHNpbmNlIGluIHRoZSBlcnJvciBsZWcgd2UgbmVlZCBpdC4KKwkgKiBJZiB3ZSB1
c2VkIFJMT0NLLCB0aGVuIHdlIHdvdWxkIGhhdmUKKwkgKiB0byB3bG9jay9kZWNyL3VubG9jay9y
bG9jay4gV2hpY2gKKwkgKiBpbiB0aGVvcnkgY291bGQgY3JlYXRlIGEgaG9sZS4gQmV0dGVyCisJ
ICogdG8gdXNlIGhpZ2hlciB3bG9jay4KKwkgKi8KKwlTQ1RQX0lOUF9XTE9DSyhpbnApOworIGNy
ZWRfY2FuX2NvbnQ6CisJZXJyb3IgPSBjcl9jYW5zZWVzb2NrZXQocmVxLT50ZC0+dGRfdWNyZWQs
IGlucC0+c2N0cF9zb2NrZXQpOworCWlmIChlcnJvcikgeworCQlTQ1RQX0lOUF9XVU5MT0NLKGlu
cCk7CisJCWdvdG8gb3V0OworCX0KKwljcnUyeChpbnAtPnNjdHBfc29ja2V0LT5zb19jcmVkLCAm
eHVjKTsKKwlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJZXJyb3IgPSBTWVNDVExfT1VUKHJlcSwg
Jnh1Yywgc2l6ZW9mKHN0cnVjdCB4dWNyZWQpKTsKK291dDoKKwlyZXR1cm4gKGVycm9yKTsKK30K
KworU1lTQ1RMX1BST0MoX25ldF9pbmV0X3NjdHAsIE9JRF9BVVRPLCBnZXRjcmVkLAorICAgIENU
TFRZUEVfT1BBUVVFIHwgQ1RMRkxBR19SVyB8IENUTEZMQUdfTkVFREdJQU5ULAorICAgIDAsIDAs
IHNjdHBfZ2V0Y3JlZCwgIlMsdWNyZWQiLAorICAgICJHZXQgdGhlIHVjcmVkIG9mIGEgU0NUUCBj
b25uZWN0aW9uIik7CisjZW5kaWYKKworI2lmZGVmIElORVQKKyNpZiBkZWZpbmVkKF9XSU4zMikg
fHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQoraW50CisjZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KQorc3RhdGljIHZvaWQKKyNlbHNlCitzdGF0aWMgaW50CisjZW5kaWYKK3NjdHBfYWJvcnQoc3Ry
dWN0IHNvY2tldCAqc28pCit7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKKwlzdHJ1Y3QgZXBvY2hfdHJhY2tlciBldDsKKyNlbmRpZgorCXN0cnVj
dCBzY3RwX2lucGNiICppbnA7CisJdWludDMyX3QgZmxhZ3M7CisKKwlpbnAgPSAoc3RydWN0IHNj
dHBfaW5wY2IgKilzby0+c29fcGNiOworCWlmIChpbnAgPT0gTlVMTCkgeworI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCXJldHVybjsKKyNlbHNl
CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFSU5WQUwpOworCQlyZXR1cm4gKEVJTlZBTCk7CisjZW5kaWYKKwl9CisKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCU5FVF9FUE9D
SF9FTlRFUihldCk7CisjZW5kaWYKKyBzY3RwX211c3RfdHJ5X2FnYWluOgorCWZsYWdzID0gaW5w
LT5zY3RwX2ZsYWdzOworI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKKwlzY3RwX2xvZ19jbG9zaW5n
KGlucCwgTlVMTCwgMTcpOworI2VuZGlmCisJaWYgKCgoZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19T
T0NLRVRfR09ORSkgPT0gMCkgJiYKKwkgICAgKGF0b21pY19jbXBzZXRfaW50KCZpbnAtPnNjdHBf
ZmxhZ3MsIGZsYWdzLCAoZmxhZ3MgfCBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSB8IFNDVFBf
UENCX0ZMQUdTX0NMT1NFX0lQKSkpKSB7CisjaWZkZWYgU0NUUF9MT0dfQ0xPU0lORworCQlzY3Rw
X2xvZ19jbG9zaW5nKGlucCwgTlVMTCwgMTYpOworI2VuZGlmCisJCXNjdHBfaW5wY2JfZnJlZShp
bnAsIFNDVFBfRlJFRV9TSE9VTERfVVNFX0FCT1JULAorCQkJCVNDVFBfQ0FMTEVEX0FGVEVSX0NN
UFNFVF9PRkNMT1NFKTsKKwkJU09DS19MT0NLKHNvKTsKKwkJU0NUUF9TQl9DTEVBUihzby0+c29f
c25kKTsKKwkJLyogc2FtZSBmb3IgdGhlIHJjdiBvbmVzLCB0aGV5IGFyZSBvbmx5CisJCSAqIGhl
cmUgZm9yIHRoZSBhY2NvdW50aW5nL3NlbGVjdC4KKwkJICovCisJCVNDVFBfU0JfQ0xFQVIoc28t
PnNvX3Jjdik7CisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKKwkJc28tPnNvX3VzZWNvdW50LS07CisjZWxzZQorCQkvKiBOb3cgbnVsbCBvdXQgdGhl
IHJlZmVyZW5jZSwgd2UgYXJlIGNvbXBsZXRlbHkgZGV0YWNoZWQuICovCisJCXNvLT5zb19wY2Ig
PSBOVUxMOworI2VuZGlmCisJCVNPQ0tfVU5MT0NLKHNvKTsKKwl9IGVsc2UgeworCQlmbGFncyA9
IGlucC0+c2N0cF9mbGFnczsKKwkJaWYgKChmbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9H
T05FKSA9PSAwKSB7CisJCQlnb3RvIHNjdHBfbXVzdF90cnlfYWdhaW47CisJCX0KKwl9CisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlORVRfRVBP
Q0hfRVhJVChldCk7CisJcmV0dXJuOworI2Vsc2UKKwlyZXR1cm4gKDApOworI2VuZGlmCit9CisK
KyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitpbnQKKyNlbHNlCitzdGF0aWMgaW50CisjZW5k
aWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitzY3RwX2F0dGFjaChzdHJ1Y3Qgc29ja2V0
ICpzbywgaW50IHByb3RvIFNDVFBfVU5VU0VELCB1aW50MzJfdCB2cmZfaWQpCisjZWxpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKQorc2N0cF9hdHRhY2goc3RydWN0IHNvY2tldCAqc28sIGludCBwcm90
byBTQ1RQX1VOVVNFRCwgc3RydWN0IHRocmVhZCAqcCBTQ1RQX1VOVVNFRCkKKyNlbGlmIGRlZmlu
ZWQoX1dJTjMyKQorc2N0cF9hdHRhY2goc3RydWN0IHNvY2tldCAqc28sIGludCBwcm90byBTQ1RQ
X1VOVVNFRCwgUEtUSFJFQUQgcCBTQ1RQX1VOVVNFRCkKKyNlbHNlCitzY3RwX2F0dGFjaChzdHJ1
Y3Qgc29ja2V0ICpzbywgaW50IHByb3RvIFNDVFBfVU5VU0VELCBzdHJ1Y3QgcHJvYyAqcCBTQ1RQ
X1VOVVNFRCkKKyNlbmRpZgoreworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJc3RydWN0IGlu
cGNiICppcF9pbnA7CisJaW50IGVycm9yOworI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJ
dWludDMyX3QgdnJmX2lkID0gU0NUUF9ERUZBVUxUX1ZSRklEOworI2VuZGlmCisKKwlpbnAgPSAo
c3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOworCWlmIChpbnAgIT0gTlVMTCkgeworCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFSU5WQUwpOworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQorCWlmIChzby0+c29fc25kLnNiX2hp
d2F0ID09IDAgfHwgc28tPnNvX3Jjdi5zYl9oaXdhdCA9PSAwKSB7CisJCWVycm9yID0gU0NUUF9T
T1JFU0VSVkUoc28sIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zZW5kc3BhY2UpLCBTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfcmVjdnNwYWNlKSk7CisJCWlmIChlcnJvcikgeworCQkJcmV0dXJuIChlcnJv
cik7CisJCX0KKwl9CisJZXJyb3IgPSBzY3RwX2lucGNiX2FsbG9jKHNvLCB2cmZfaWQpOworCWlm
IChlcnJvcikgeworCQlyZXR1cm4gKGVycm9yKTsKKwl9CisJaW5wID0gKHN0cnVjdCBzY3RwX2lu
cGNiICopc28tPnNvX3BjYjsKKwlTQ1RQX0lOUF9XTE9DSyhpbnApOworCWlucC0+c2N0cF9mbGFn
cyAmPSB+U0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjY7CS8qIEknbSBub3QgdjYhICovCisJaXBfaW5w
ID0gJmlucC0+aXBfaW5wLmlucDsKKwlpcF9pbnAtPmlucF92ZmxhZyB8PSBJTlBfSVBWNDsKKwlp
cF9pbnAtPmlucF9pcF90dGwgPSBNT0RVTEVfR0xPQkFMKGlwX2RlZnR0bCk7CisJU0NUUF9JTlBf
V1VOTE9DSyhpbnApOworCXJldHVybiAoMCk7Cit9CisKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCitpbnQKK3NjdHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICph
ZGRyKSB7CisJdm9pZCAqcCA9IE5VTEw7CisjZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorc3Rh
dGljIGludAorc2N0cF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFk
ZHIsIHN0cnVjdCB0aHJlYWQgKnApCit7CisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKK3N0YXRp
YyBpbnQKK3NjdHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRy
LCBzdHJ1Y3QgcHJvYyAqcCkgeworI2VsaWYgZGVmaW5lZChfV0lOMzIpCitzdGF0aWMgaW50Citz
Y3RwX2JpbmQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgUEtUSFJF
QUQgcCkgeworI2Vsc2UKK3N0YXRpYyBpbnQKK3NjdHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywg
c3RydWN0IG1idWYgKm5hbSwgc3RydWN0IHByb2MgKnApCit7CisJc3RydWN0IHNvY2thZGRyICph
ZGRyID0gbmFtID8gbXRvZChuYW0sIHN0cnVjdCBzb2NrYWRkciAqKTogTlVMTDsKKworI2VuZGlm
CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKworCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAq
KXNvLT5zb19wY2I7CisJaWYgKGlucCA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCXJldHVy
biAoRUlOVkFMKTsKKwl9CisJaWYgKGFkZHIgIT0gTlVMTCkgeworI2lmZGVmIEhBVkVfU0FfTEVO
CisJCWlmICgoYWRkci0+c2FfZmFtaWx5ICE9IEFGX0lORVQpIHx8CisJCSAgICAoYWRkci0+c2Ff
bGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSkgeworI2Vsc2UKKwkJaWYgKGFkZHIt
PnNhX2ZhbWlseSAhPSBBRl9JTkVUKSB7CisjZW5kaWYKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQlyZXR1
cm4gKEVJTlZBTCk7CisJCX0KKwl9CisJcmV0dXJuIChzY3RwX2lucGNiX2JpbmQoc28sIGFkZHIs
IE5VTEwsIHApKTsKK30KKworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCitp
bnQKK3NjdHBjb25uX2F0dGFjaChzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IHByb3RvIFNDVFBfVU5V
U0VELCB1aW50MzJfdCB2cmZfaWQpCit7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKwlzdHJ1
Y3QgaW5wY2IgKmlwX2lucDsKKwlpbnQgZXJyb3I7CisKKwlpbnAgPSAoc3RydWN0IHNjdHBfaW5w
Y2IgKilzby0+c29fcGNiOworCWlmIChpbnAgIT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQly
ZXR1cm4gKEVJTlZBTCk7CisJfQorCWlmIChzby0+c29fc25kLnNiX2hpd2F0ID09IDAgfHwgc28t
PnNvX3Jjdi5zYl9oaXdhdCA9PSAwKSB7CisJCWVycm9yID0gU0NUUF9TT1JFU0VSVkUoc28sIFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9zZW5kc3BhY2UpLCBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcmVj
dnNwYWNlKSk7CisJCWlmIChlcnJvcikgeworCQkJcmV0dXJuIChlcnJvcik7CisJCX0KKwl9CisJ
ZXJyb3IgPSBzY3RwX2lucGNiX2FsbG9jKHNvLCB2cmZfaWQpOworCWlmIChlcnJvcikgeworCQly
ZXR1cm4gKGVycm9yKTsKKwl9CisJaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3Bj
YjsKKwlTQ1RQX0lOUF9XTE9DSyhpbnApOworCWlucC0+c2N0cF9mbGFncyAmPSB+U0NUUF9QQ0Jf
RkxBR1NfQk9VTkRfVjY7CisJaW5wLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdTX0JPVU5E
X0NPTk47CisJaXBfaW5wID0gJmlucC0+aXBfaW5wLmlucDsKKwlpcF9pbnAtPmlucF92ZmxhZyB8
PSBJTlBfQ09OTjsKKwlpcF9pbnAtPmlucF9pcF90dGwgPSBNT0RVTEVfR0xPQkFMKGlwX2RlZnR0
bCk7CisJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCXJldHVybiAoMCk7Cit9CisKK2ludAorc2N0
cGNvbm5fYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyKQorewor
CXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisKKwlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilz
by0+c29fcGNiOworCWlmIChpbnAgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQlyZXR1cm4g
KEVJTlZBTCk7CisJfQorCWlmIChhZGRyICE9IE5VTEwpIHsKKyNpZmRlZiBIQVZFX1NBX0xFTgor
CQlpZiAoKGFkZHItPnNhX2ZhbWlseSAhPSBBRl9DT05OKSB8fAorCQkgICAgKGFkZHItPnNhX2xl
biAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKSkgeworI2Vsc2UKKwkJaWYgKGFkZHIt
PnNhX2ZhbWlseSAhPSBBRl9DT05OKSB7CisjZW5kaWYKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQlyZXR1
cm4gKEVJTlZBTCk7CisJCX0KKwl9CisJcmV0dXJuIChzY3RwX2lucGNiX2JpbmQoc28sIGFkZHIs
IE5VTEwsIE5VTEwpKTsKK30KKworI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwg
ZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK3ZvaWQKK3NjdHBfY2xv
c2Uoc3RydWN0IHNvY2tldCAqc28pCit7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlzdHJ1Y3QgZXBvY2hfdHJhY2tlciBldDsKKyNlbmRpZgor
CXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJdWludDMyX3QgZmxhZ3M7CisKKwlpbnAgPSAoc3Ry
dWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOworCWlmIChpbnAgPT0gTlVMTCkKKwkJcmV0dXJu
OworCisJLyogSW5mb3JtIGFsbCB0aGUgbG93ZXIgbGF5ZXIgYXNzb2MgdGhhdCB3ZQorCSAqIGFy
ZSBkb25lLgorCSAqLworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisJTkVUX0VQT0NIX0VOVEVSKGV0KTsKKyNlbmRpZgorIHNjdHBfbXVzdF90cnlf
YWdhaW46CisJZmxhZ3MgPSBpbnAtPnNjdHBfZmxhZ3M7CisjaWZkZWYgU0NUUF9MT0dfQ0xPU0lO
RworCXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBOVUxMLCAxNyk7CisjZW5kaWYKKwlpZiAoKChmbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSA9PSAwKSAmJgorCSAgICAoYXRvbWljX2Nt
cHNldF9pbnQoJmlucC0+c2N0cF9mbGFncywgZmxhZ3MsIChmbGFncyB8IFNDVFBfUENCX0ZMQUdT
X1NPQ0tFVF9HT05FIHwgU0NUUF9QQ0JfRkxBR1NfQ0xPU0VfSVApKSkpIHsKKyNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCisJCWlmICgoKHNvLT5zb19vcHRpb25zICYgU0NUUF9TT19MSU5HRVIp
ICYmIChzby0+c29fbGluZ2VyID09IDApKSB8fAorCQkgICAgKHNvLT5zb19yY3Yuc2JfY2MgPiAw
KSkgeworI2Vsc2UKKwkJaWYgKCgoc28tPnNvX29wdGlvbnMgJiBTT19MSU5HRVIpICYmIChzby0+
c29fbGluZ2VyID09IDApKSB8fAorCQkgICAgKHNvLT5zb19yY3Yuc2JfY2MgPiAwKSkgeworI2Vu
ZGlmCisjaWZkZWYgU0NUUF9MT0dfQ0xPU0lORworCQkJc2N0cF9sb2dfY2xvc2luZyhpbnAsIE5V
TEwsIDEzKTsKKyNlbmRpZgorCQkJc2N0cF9pbnBjYl9mcmVlKGlucCwgU0NUUF9GUkVFX1NIT1VM
RF9VU0VfQUJPUlQsCisJCQkJCVNDVFBfQ0FMTEVEX0FGVEVSX0NNUFNFVF9PRkNMT1NFKTsKKwkJ
fSBlbHNlIHsKKyNpZmRlZiBTQ1RQX0xPR19DTE9TSU5HCisJCQlzY3RwX2xvZ19jbG9zaW5nKGlu
cCwgTlVMTCwgMTQpOworI2VuZGlmCisJCQlzY3RwX2lucGNiX2ZyZWUoaW5wLCBTQ1RQX0ZSRUVf
U0hPVUxEX1VTRV9HUkFDRUZVTF9DTE9TRSwKKwkJCQkJU0NUUF9DQUxMRURfQUZURVJfQ01QU0VU
X09GQ0xPU0UpOworCQl9CisJCS8qIFRoZSBzb2NrZXQgaXMgbm93IGRldGFjaGVkLCBubyBtYXR0
ZXIgd2hhdAorCQkgKiB0aGUgc3RhdGUgb2YgdGhlIFNDVFAgYXNzb2NpYXRpb24uCisJCSAqLwor
CQlTT0NLX0xPQ0soc28pOworCQlTQ1RQX1NCX0NMRUFSKHNvLT5zb19zbmQpOworCQkvKiBzYW1l
IGZvciB0aGUgcmN2IG9uZXMsIHRoZXkgYXJlIG9ubHkKKwkJICogaGVyZSBmb3IgdGhlIGFjY291
bnRpbmcvc2VsZWN0LgorCQkgKi8KKwkJU0NUUF9TQl9DTEVBUihzby0+c29fcmN2KTsKKworI2lm
ICEoZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQorCQkvKiBO
b3cgbnVsbCBvdXQgdGhlIHJlZmVyZW5jZSwgd2UgYXJlIGNvbXBsZXRlbHkgZGV0YWNoZWQuICov
CisJCXNvLT5zb19wY2IgPSBOVUxMOworI2VuZGlmCisJCVNPQ0tfVU5MT0NLKHNvKTsKKwl9IGVs
c2UgeworCQlmbGFncyA9IGlucC0+c2N0cF9mbGFnczsKKwkJaWYgKChmbGFncyAmIFNDVFBfUENC
X0ZMQUdTX1NPQ0tFVF9HT05FKSA9PSAwKSB7CisJCQlnb3RvIHNjdHBfbXVzdF90cnlfYWdhaW47
CisJCX0KKwl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKKwlORVRfRVBPQ0hfRVhJVChldCk7CisjZW5kaWYKKwlyZXR1cm47Cit9CisjZWxzZQor
aW50CitzY3RwX2RldGFjaChzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlzdHJ1Y3Qgc2N0cF9pbnBj
YiAqaW5wOworCXVpbnQzMl90IGZsYWdzOworCisJaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICop
c28tPnNvX3BjYjsKKwlpZiAoaW5wID09IE5VTEwpIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlyZXR1cm47CisjZWxzZQorCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5W
QUwpOworCQlyZXR1cm4gKEVJTlZBTCk7CisjZW5kaWYKKwl9Cisgc2N0cF9tdXN0X3RyeV9hZ2Fp
bjoKKwlmbGFncyA9IGlucC0+c2N0cF9mbGFnczsKKyNpZmRlZiBTQ1RQX0xPR19DTE9TSU5HCisJ
c2N0cF9sb2dfY2xvc2luZyhpbnAsIE5VTEwsIDE3KTsKKyNlbmRpZgorCWlmICgoKGZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpID09IDApICYmCisJICAgIChhdG9taWNfY21wc2V0
X2ludCgmaW5wLT5zY3RwX2ZsYWdzLCBmbGFncywgKGZsYWdzIHwgU0NUUF9QQ0JfRkxBR1NfU09D
S0VUX0dPTkUgfCBTQ1RQX1BDQl9GTEFHU19DTE9TRV9JUCkpKSkgeworI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKwkJaWYgKCgoc28tPnNvX29wdGlvbnMgJiBTQ1RQX1NPX0xJTkdFUikgJiYg
KHNvLT5zb19saW5nZXIgPT0gMCkpIHx8CisJCSAgICAoc28tPnNvX3Jjdi5zYl9jYyA+IDApKSB7
CisjZWxzZQorCQlpZiAoKChzby0+c29fb3B0aW9ucyAmIFNPX0xJTkdFUikgJiYgKHNvLT5zb19s
aW5nZXIgPT0gMCkpIHx8CisJCSAgICAoc28tPnNvX3Jjdi5zYl9jYyA+IDApKSB7CisjZW5kaWYK
KyNpZmRlZiBTQ1RQX0xPR19DTE9TSU5HCisJCQlzY3RwX2xvZ19jbG9zaW5nKGlucCwgTlVMTCwg
MTMpOworI2VuZGlmCisJCQlzY3RwX2lucGNiX2ZyZWUoaW5wLCBTQ1RQX0ZSRUVfU0hPVUxEX1VT
RV9BQk9SVCwKKwkJCQkJU0NUUF9DQUxMRURfQUZURVJfQ01QU0VUX09GQ0xPU0UpOworCQl9IGVs
c2UgeworI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKKwkJCXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBO
VUxMLCAxMyk7CisjZW5kaWYKKwkJCXNjdHBfaW5wY2JfZnJlZShpbnAsIFNDVFBfRlJFRV9TSE9V
TERfVVNFX0dSQUNFRlVMX0NMT1NFLAorCQkJCQlTQ1RQX0NBTExFRF9BRlRFUl9DTVBTRVRfT0ZD
TE9TRSk7CisJCX0KKwkJLyogVGhlIHNvY2tldCBpcyBub3cgZGV0YWNoZWQsIG5vIG1hdHRlciB3
aGF0CisJCSAqIHRoZSBzdGF0ZSBvZiB0aGUgU0NUUCBhc3NvY2lhdGlvbi4KKwkJICovCisJCVND
VFBfU0JfQ0xFQVIoc28tPnNvX3NuZCk7CisJCS8qIHNhbWUgZm9yIHRoZSByY3Ygb25lcywgdGhl
eSBhcmUgb25seQorCQkgKiBoZXJlIGZvciB0aGUgYWNjb3VudGluZy9zZWxlY3QuCisJCSAqLwor
CQlTQ1RQX1NCX0NMRUFSKHNvLT5zb19yY3YpOworI2lmICEoZGVmaW5lZChfX0FQUExFX18pICYm
ICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQorCQkvKiBOb3cgZGlzY29ubmVjdCAqLworCQlzby0+
c29fcGNiID0gTlVMTDsKKyNlbmRpZgorCX0gZWxzZSB7CisJCWZsYWdzID0gaW5wLT5zY3RwX2Zs
YWdzOworCQlpZiAoKGZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpID09IDApIHsK
KwkJCWdvdG8gc2N0cF9tdXN0X3RyeV9hZ2FpbjsKKwkJfQorCX0KKyNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXJldHVybjsKKyNlbHNlCisJcmV0
dXJuICgwKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisvKiBfX1VzZXJzcGFjZV9fIGlzIG5vdCBjYWxsaW5nIHNjdHBfc2VuZG0gKi8KKyNlbmRpZgor
I2lmICEoZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQoraW50Cisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK3NjdHBf
c2VuZG0oc3RydWN0IHNvY2tldCAqc28sIGludCBmbGFncywgc3RydWN0IG1idWYgKm0sIHN0cnVj
dCBzb2NrYWRkciAqYWRkciwKKyAgICBzdHJ1Y3QgbWJ1ZiAqY29udHJvbCwgc3RydWN0IHRocmVh
ZCAqcCk7CisKKyNlbHNlCitzY3RwX3NlbmRtKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgZmxhZ3Ms
IHN0cnVjdCBtYnVmICptLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCisgICAgc3RydWN0IG1idWYg
KmNvbnRyb2wsIHN0cnVjdCBwcm9jICpwKTsKKworI2VuZGlmCitpbnQKKyNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorc2N0cF9zZW5kbShzdHJ1Y3Qg
c29ja2V0ICpzbywgaW50IGZsYWdzLCBzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IHNvY2thZGRyICph
ZGRyLAorICAgIHN0cnVjdCBtYnVmICpjb250cm9sLCBzdHJ1Y3QgdGhyZWFkICpwKQoreworI2Vs
c2UKK3NjdHBfc2VuZG0oc3RydWN0IHNvY2tldCAqc28sIGludCBmbGFncywgc3RydWN0IG1idWYg
Km0sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKKyAgICBzdHJ1Y3QgbWJ1ZiAqY29udHJvbCwgc3Ry
dWN0IHByb2MgKnApCit7CisjZW5kaWYKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCWludCBl
cnJvcjsKKworCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7CisJaWYgKGlu
cCA9PSBOVUxMKSB7CisJCWlmIChjb250cm9sKSB7CisJCQlzY3RwX21fZnJlZW0oY29udHJvbCk7
CisJCQljb250cm9sID0gTlVMTDsKKwkJfQorCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJc2N0cF9t
X2ZyZWVtKG0pOworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQorCS8qIEdvdCB0byBoYXZlIGFuIHRv
IGFkZHJlc3MgaWYgd2UgYXJlIE5PVCBhIGNvbm5lY3RlZCBzb2NrZXQgKi8KKwlpZiAoKGFkZHIg
PT0gTlVMTCkgJiYKKwkgICAgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DT05O
RUNURUQpIHx8CisJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBF
KSkpIHsKKwkJZ290byBjb25uZWN0ZWRfdHlwZTsKKwl9CisKKwllcnJvciA9IDA7CisJaWYgKGFk
ZHIgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRURFU1RBRERSUkVRKTsKKwkJZXJyb3IgPSBFREVT
VEFERFJSRVE7CisJfSBlbHNlIGlmIChhZGRyLT5zYV9mYW1pbHkgIT0gQUZfSU5FVCkgeworCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSwgRUFGTk9TVVBQT1JUKTsKKwkJZXJyb3IgPSBFQUZOT1NVUFBPUlQ7CisjaWYgZGVm
aW5lZChIQVZFX1NBX0xFTikKKwl9IGVsc2UgaWYgKGFkZHItPnNhX2xlbiAhPSBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2luKSkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJZXJyb3IgPSBFSU5W
QUw7CisjZW5kaWYKKwl9CisJaWYgKGVycm9yICE9IDApIHsKKwkJc2N0cF9tX2ZyZWVtKG0pOwor
CQlpZiAoY29udHJvbCkgeworCQkJc2N0cF9tX2ZyZWVtKGNvbnRyb2wpOworCQkJY29udHJvbCA9
IE5VTEw7CisJCX0KKwkJcmV0dXJuIChlcnJvcik7CisJfQorY29ubmVjdGVkX3R5cGU6CisJLyog
bm93IHdoYXQgYWJvdXQgY29udHJvbCAqLworCWlmIChjb250cm9sKSB7CisJCWlmIChpbnAtPmNv
bnRyb2wpIHsKKwkJCXNjdHBfbV9mcmVlbShpbnAtPmNvbnRyb2wpOworCQkJaW5wLT5jb250cm9s
ID0gTlVMTDsKKwkJfQorCQlpbnAtPmNvbnRyb2wgPSBjb250cm9sOworCX0KKwkvKiBQbGFjZSB0
aGUgZGF0YSAqLworCWlmIChpbnAtPnBrdCkgeworCQlTQ1RQX0JVRl9ORVhUKGlucC0+cGt0X2xh
c3QpID0gbTsKKwkJaW5wLT5wa3RfbGFzdCA9IG07CisJfSBlbHNlIHsKKwkJaW5wLT5wa3RfbGFz
dCA9IGlucC0+cGt0ID0gbTsKKwl9CisJaWYgKAorI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSB8
fCBkZWZpbmVkKF9fQVBQTEVfXykpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJLyogRnJl
ZUJTRCB1c2VzIGEgZmxhZyBwYXNzZWQgKi8KKwkgICAgKChmbGFncyAmIFBSVVNfTU9SRVRPQ09N
RSkgPT0gMCkKKyNlbHNlCisJICAgIDEJCQkvKiBPcGVuIEJTRCBkb2VzIG5vdCBoYXZlIGFueSAi
bW9yZSB0byBjb21lIgorCQkJCSAqIGluZGljYXRpb24gKi8KKyNlbmRpZgorCSAgICApIHsKKwkJ
LyoKKwkJICogbm90ZSB3aXRoIHRoZSBjdXJyZW50IHZlcnNpb24gdGhpcyBjb2RlIHdpbGwgb25s
eSBiZSB1c2VkCisJCSAqIGJ5IE9wZW5CU0QtLSBOZXRCU0QsIEZyZWVCU0QsIGFuZCBNYWNPUyBo
YXZlIG1ldGhvZHMgZm9yCisJCSAqIHJlLWRlZmluaW5nIHNvc2VuZCB0byB1c2UgdGhlIHNjdHBf
c29zZW5kLiBPbmUgY2FuCisJCSAqIG9wdGlvbmFsbHkgc3dpdGNoIGJhY2sgdG8gdGhpcyBjb2Rl
IChieSBjaGFuZ2luZyBiYWNrIHRoZQorCQkgKiBkZWZpbml0aW9ucykgYnV0IHRoaXMgaXMgbm90
IGFkdmlzYWJsZS4gVGhpcyBjb2RlIGlzIHVzZWQKKwkJICogYnkgRnJlZUJTRCB3aGVuIHNlbmRp
bmcgYSBmaWxlIHdpdGggc2VuZGZpbGUoKSB0aG91Z2guCisJCSAqLworI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCXN0cnVjdCBlcG9jaF90cmFj
a2VyIGV0OworI2VuZGlmCisJCWludCByZXQ7CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAm
JiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCU5FVF9FUE9DSF9FTlRFUihldCk7CisjZW5kaWYK
KwkJcmV0ID0gc2N0cF9vdXRwdXQoaW5wLCBpbnAtPnBrdCwgYWRkciwgaW5wLT5jb250cm9sLCBw
LCBmbGFncyk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKKwlORVRfRVBPQ0hfRVhJVChldCk7CisjZW5kaWYKKwkJaW5wLT5wa3QgPSBOVUxMOwor
CQlpbnAtPmNvbnRyb2wgPSBOVUxMOworCQlyZXR1cm4gKHJldCk7CisJfSBlbHNlIHsKKwkJcmV0
dXJuICgwKTsKKwl9Cit9CisjZW5kaWYKKworaW50CitzY3RwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNv
Y2tldCAqc28pCit7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKworCWlucCA9IChzdHJ1Y3Qg
c2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7CisJaWYgKGlucCA9PSBOVUxMKSB7CisJCVNDVFBfTFRS
QUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT1RD
T05OKTsKKwkJcmV0dXJuIChFTk9UQ09OTik7CisJfQorCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJ
aWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCSAgICAo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkpIHsKKwkJaWYgKExJ
U1RfRU1QVFkoJmlucC0+c2N0cF9hc29jX2xpc3QpKSB7CisJCQkvKiBObyBjb25uZWN0aW9uICov
CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQlyZXR1cm4gKDApOworCQl9IGVsc2Ugewor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQlz
dHJ1Y3QgZXBvY2hfdHJhY2tlciBldDsKKyNlbmRpZgorCQkJc3RydWN0IHNjdHBfYXNzb2NpYXRp
b24gKmFzb2M7CisJCQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7CisKKwkJCXN0Y2IgPSBMSVNUX0ZJ
UlNUKCZpbnAtPnNjdHBfYXNvY19saXN0KTsKKwkJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCQlT
Q1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQlyZXR1cm4gKEVJTlZB
TCk7CisJCQl9CisJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJYXNvYyA9ICZzdGNiLT5hc29j
OworCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVE
KSB7CisJCQkJLyogV2UgYXJlIGFib3V0IHRvIGJlIGZyZWVkLCBvdXQgb2YgaGVyZSAqLworCQkJ
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQkJ
cmV0dXJuICgwKTsKKwkJCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorCQkJTkVUX0VQT0NIX0VOVEVSKGV0KTsKKyNlbmRpZgorI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwkJCWlmICgoKHNvLT5zb19vcHRpb25zICYgU0NUUF9TT19MSU5H
RVIpICYmCisJCQkgICAgIChzby0+c29fbGluZ2VyID09IDApKSB8fAorCQkJICAgIChzby0+c29f
cmN2LnNiX2NjID4gMCkpIHsKKyNlbHNlCisJCQlpZiAoKChzby0+c29fb3B0aW9ucyAmIFNPX0xJ
TkdFUikgJiYKKwkJCSAgICAgKHNvLT5zb19saW5nZXIgPT0gMCkpIHx8CisJCQkgICAgKHNvLT5z
b19yY3Yuc2JfY2MgPiAwKSkgeworI2VuZGlmCisJCQkJaWYgKFNDVFBfR0VUX1NUQVRFKHN0Y2Ip
ICE9IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpIHsKKwkJCQkJLyogTGVmdCB3aXRoIERhdGEgdW5y
ZWFkICovCisJCQkJCXN0cnVjdCBtYnVmICpvcF9lcnI7CisKKwkJCQkJb3BfZXJyID0gc2N0cF9n
ZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1VTRVJfSU5JVElBVEVEX0FCVCwgIiIpOworCQkJCQlz
Y3RwX3NlbmRfYWJvcnRfdGNiKHN0Y2IsIG9wX2VyciwgU0NUUF9TT19MT0NLRUQpOworCQkJCQlT
Q1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfYWJvcnRlZCk7CisJCQkJfQorCQkJCVNDVFBf
SU5QX1JVTkxPQ0soaW5wKTsKKwkJCQlpZiAoKFNDVFBfR0VUX1NUQVRFKHN0Y2IpID09IFNDVFBf
U1RBVEVfT1BFTikgfHwKKwkJCQkgICAgKFNDVFBfR0VUX1NUQVRFKHN0Y2IpID09IFNDVFBfU1RB
VEVfU0hVVERPV05fUkVDRUlWRUQpKSB7CisJCQkJCVNDVFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0
cHNfY3VycmVzdGFiKTsKKwkJCQl9CisJCQkJKHZvaWQpc2N0cF9mcmVlX2Fzc29jKGlucCwgc3Rj
YiwgU0NUUF9OT1JNQUxfUFJPQywKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRICsgU0NUUF9MT0NfMyk7CisJCQkJLyogTm8gdW5sb2NrIHRjYiBhc3NvYyBp
cyBnb25lICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKKwkJCQlORVRfRVBPQ0hfRVhJVChldCk7CisjZW5kaWYKKwkJCQlyZXR1cm4gKDApOwor
CQkJfQorCQkJaWYgKFRBSUxRX0VNUFRZKCZhc29jLT5zZW5kX3F1ZXVlKSAmJgorCQkJICAgIFRB
SUxRX0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSAmJgorCQkJICAgIChhc29jLT5zdHJlYW1fcXVl
dWVfY250ID09IDApKSB7CisJCQkJLyogdGhlcmUgaXMgbm90aGluZyBxdWV1ZWQgdG8gc2VuZCwg
c28gZG9uZSAqLworCQkJCWlmICgoKmFzb2MtPnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2lzX3VzZXJf
bXNnc19pbmNvbXBsZXRlKShzdGNiLCBhc29jKSkgeworCQkJCQlnb3RvIGFib3J0X2FueXdheTsK
KwkJCQl9CisJCQkJaWYgKChTQ1RQX0dFVF9TVEFURShzdGNiKSAhPSBTQ1RQX1NUQVRFX1NIVVRE
T1dOX1NFTlQpICYmCisJCQkJICAgIChTQ1RQX0dFVF9TVEFURShzdGNiKSAhPSBTQ1RQX1NUQVRF
X1NIVVRET1dOX0FDS19TRU5UKSkgeworCQkJCQkvKiBvbmx5IHNlbmQgU0hVVERPV04gMXN0IHRp
bWUgdGhydSAqLworCQkJCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXRwOworCisJCQkJCWlmICgoU0NU
UF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9PUEVOKSB8fAorCQkJCQkgICAgKFNDVFBf
R0VUX1NUQVRFKHN0Y2IpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpKSB7CisJCQkJ
CQlTQ1RQX1NUQVRfREVDUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7CisJCQkJCX0KKwkJCQkJ
U0NUUF9TRVRfU1RBVEUoc3RjYiwgU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKTsKKwkJCQkJc2N0
cF9zdG9wX3RpbWVyc19mb3Jfc2h1dGRvd24oc3RjYik7CisJCQkJCWlmIChzdGNiLT5hc29jLmFs
dGVybmF0ZSkgeworCQkJCQkJbmV0cCA9IHN0Y2ItPmFzb2MuYWx0ZXJuYXRlOworCQkJCQl9IGVs
c2UgeworCQkJCQkJbmV0cCA9IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbjsKKwkJCQkJ
fQorCQkJCQlzY3RwX3NlbmRfc2h1dGRvd24oc3RjYixuZXRwKTsKKwkJCQkJc2N0cF90aW1lcl9z
dGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV04sCisJCQkJCSAgICAgICAgICAgICAgICAgc3Rj
Yi0+c2N0cF9lcCwgc3RjYiwgbmV0cCk7CisJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1F
Ul9UWVBFX1NIVVRET1dOR1VBUkQsCisJCQkJCSAgICAgICAgICAgICAgICAgc3RjYi0+c2N0cF9l
cCwgc3RjYiwgTlVMTCk7CisJCQkJCXNjdHBfY2h1bmtfb3V0cHV0KHN0Y2ItPnNjdHBfZXAsIHN0
Y2IsIFNDVFBfT1VUUFVUX0ZST01fVDMsIFNDVFBfU09fTE9DS0VEKTsKKwkJCQl9CisJCQl9IGVs
c2UgeworCQkJCS8qCisJCQkJICogd2Ugc3RpbGwgZ290IChvciBqdXN0IGdvdCkgZGF0YSB0byBz
ZW5kLAorCQkJCSAqIHNvIHNldCBTSFVURE9XTl9QRU5ESU5HCisJCQkJICovCisJCQkJLyoKKwkJ
CQkgKiBYWFggc29ja2V0cyBkcmFmdCBzYXlzIHRoYXQgU0NUUF9FT0YKKwkJCQkgKiBzaG91bGQg
YmUgc2VudCB3aXRoIG5vIGRhdGEuIGN1cnJlbnRseSwKKwkJCQkgKiB3ZSB3aWxsIGFsbG93IHVz
ZXIgZGF0YSB0byBiZSBzZW50IGZpcnN0CisJCQkJICogYW5kIG1vdmUgdG8gU0hVVERPV04tUEVO
RElORworCQkJCSAqLworCQkJCVNDVFBfQUREX1NVQlNUQVRFKHN0Y2IsIFNDVFBfU1RBVEVfU0hV
VERPV05fUEVORElORyk7CisJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hV
VERPV05HVUFSRCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgTlVMTCk7CisJCQkJaWYgKCgqYXNvYy0+
c3NfZnVuY3Rpb25zLnNjdHBfc3NfaXNfdXNlcl9tc2dzX2luY29tcGxldGUpKHN0Y2IsIGFzb2Mp
KSB7CisJCQkJCVNDVFBfQUREX1NVQlNUQVRFKHN0Y2IsIFNDVFBfU1RBVEVfUEFSVElBTF9NU0df
TEVGVCk7CisJCQkJfQorCQkJCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+c2VuZF9xdWV1ZSkgJiYK
KwkJCQkgICAgVEFJTFFfRU1QVFkoJmFzb2MtPnNlbnRfcXVldWUpICYmCisJCQkJICAgIChhc29j
LT5zdGF0ZSAmIFNDVFBfU1RBVEVfUEFSVElBTF9NU0dfTEVGVCkpIHsKKwkJCQkJc3RydWN0IG1i
dWYgKm9wX2VycjsKKwkJCQlhYm9ydF9hbnl3YXk6CisJCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJh
dGVfY2F1c2UoU0NUUF9DQVVTRV9VU0VSX0lOSVRJQVRFRF9BQlQsICIiKTsKKwkJCQkJc3RjYi0+
c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfVVNSUkVRICsgU0NUUF9M
T0NfNDsKKwkJCQkJc2N0cF9zZW5kX2Fib3J0X3RjYihzdGNiLCBvcF9lcnIsIFNDVFBfU09fTE9D
S0VEKTsKKwkJCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjMyKHNjdHBzX2Fib3J0ZWQpOworCQkJ
CQlpZiAoKFNDVFBfR0VUX1NUQVRFKHN0Y2IpID09IFNDVFBfU1RBVEVfT1BFTikgfHwKKwkJCQkJ
ICAgIChTQ1RQX0dFVF9TVEFURShzdGNiKSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVE
KSkgeworCQkJCQkJU0NUUF9TVEFUX0RFQ1JfR0FVR0UzMihzY3Rwc19jdXJyZXN0YWIpOworCQkJ
CQl9CisJCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCQkJKHZvaWQpc2N0cF9mcmVlX2Fz
c29jKGlucCwgc3RjYiwgU0NUUF9OT1JNQUxfUFJPQywKKwkJCQkJICAgICAgICAgICAgICAgICAg
ICAgIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9DXzUpOworI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJCU5FVF9FUE9DSF9FWElU
KGV0KTsKKyNlbmRpZgorCQkJCQlyZXR1cm4gKDApOworCQkJCX0gZWxzZSB7CisJCQkJCXNjdHBf
Y2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgU0NUUF9PVVRQVVRfRlJPTV9DTE9TSU5HLCBTQ1RQX1NP
X0xPQ0tFRCk7CisJCQkJfQorCQkJfQorCQkJc29pc2Rpc2Nvbm5lY3Rpbmcoc28pOworI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQlORVRfRVBP
Q0hfRVhJVChldCk7CisjZW5kaWYKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCVNDVFBf
SU5QX1JVTkxPQ0soaW5wKTsKKwkJCXJldHVybiAoMCk7CisJCX0KKwkJLyogbm90IHJlYWNoZWQg
Ki8KKwl9IGVsc2UgeworCQkvKiBVRFAgbW9kZWwgZG9lcyBub3Qgc3VwcG9ydCB0aGlzICovCisJ
CVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU9QTk9UU1VQUCk7CisJCXJldHVybiAoRU9Q
Tk9UU1VQUCk7CisJfQorfQorCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChf
V0lOMzIpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK2ludAorc2N0cF9mbHVzaChzdHJ1Y3Qg
c29ja2V0ICpzbywgaW50IGhvdykKK3sKKwkvKgorCSAqIFdlIHdpbGwganVzdCBjbGVhciBvdXQg
dGhlIHZhbHVlcyBhbmQgbGV0CisJICogc3Vic2VxdWVudCBjbG9zZSBjbGVhciBvdXQgdGhlIGRh
dGEsIGlmIGFueS4KKwkgKiBOb3RlIGlmIHRoZSB1c2VyIGRpZCBhIHNodXRkb3duKFNIVVRfUkQp
IHRoZXkKKwkgKiB3aWxsIG5vdCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGEsIHRoZSBzb2NrZXQK
KwkgKiB3aWxsIGJsb2NrIHRoYXQgZnJvbSBoYXBwZW5pbmcuCisJICovCisJc3RydWN0IHNjdHBf
aW5wY2IgKmlucDsKKworCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7CisJ
aWYgKGlucCA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9
CisJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkvKiBGb3IgdGhlIDEgdG8gbWFueSBtb2RlbCB0aGlz
IGRvZXMgbm90aGluZyAqLworCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19V
RFBUWVBFKSB7CisJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJcmV0dXJuICgwKTsKKwl9CisJ
U0NUUF9JTlBfUlVOTE9DSyhpbnApOworCWlmICgoaG93ID09IFBSVV9GTFVTSF9SRCkgfHwgKGhv
dyA9PSBQUlVfRkxVU0hfUkRXUikpIHsKKwkJLyogRmlyc3QgbWFrZSBzdXJlIHRoZSBzYiB3aWxs
IGJlIGhhcHB5LCB3ZSBkb24ndAorCQkgKiB1c2UgdGhlc2UgZXhjZXB0IG1heWJlIHRoZSBjb3Vu
dAorCQkgKi8KKwkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJU0NUUF9JTlBfUkVBRF9MT0NLKGlu
cCk7CisJCWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQ0FOVF9SRUFE
OworCQlTQ1RQX0lOUF9SRUFEX1VOTE9DSyhpbnApOworCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7
CisJCXNvLT5zb19yY3Yuc2JfY2MgPSAwOworCQlzby0+c29fcmN2LnNiX21iY250ID0gMDsKKwkJ
c28tPnNvX3Jjdi5zYl9tYiA9IE5VTEw7CisJfQorCWlmICgoaG93ID09IFBSVV9GTFVTSF9XUikg
fHwgKGhvdyA9PSBQUlVfRkxVU0hfUkRXUikpIHsKKwkJLyogRmlyc3QgbWFrZSBzdXJlIHRoZSBz
YiB3aWxsIGJlIGhhcHB5LCB3ZSBkb24ndAorCQkgKiB1c2UgdGhlc2UgZXhjZXB0IG1heWJlIHRo
ZSBjb3VudAorCQkgKi8KKwkJc28tPnNvX3NuZC5zYl9jYyA9IDA7CisJCXNvLT5zb19zbmQuc2Jf
bWJjbnQgPSAwOworCQlzby0+c29fc25kLnNiX21iID0gTlVMTDsKKwl9CisJcmV0dXJuICgwKTsK
K30KKyNlbmRpZgorCitpbnQKK3NjdHBfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc28pCit7CisJ
c3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKworCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNv
LT5zb19wY2I7CisJaWYgKGlucCA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCXJldHVybiAo
RUlOVkFMKTsKKwl9CisJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkvKiBGb3IgVURQIG1vZGVsIHRo
aXMgaXMgYSBpbnZhbGlkIGNhbGwgKi8KKwlpZiAoISgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfVENQVFlQRSkgfHwKKwkgICAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfSU5fVENQUE9PTCkpKSB7CisJCS8qIFJlc3RvcmUgdGhlIGZsYWdzIHRoYXQgdGhlIHNv
c2h1dGRvd24gdG9vayBhd2F5LiAqLworI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZp
bmVkKF9XSU4zMikpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCVNPQ0tCVUZfTE9DSygm
c28tPnNvX3Jjdik7CisJCXNvLT5zb19yY3Yuc2Jfc3RhdGUgJj0gflNCU19DQU5UUkNWTU9SRTsK
KwkJU09DS0JVRl9VTkxPQ0soJnNvLT5zb19yY3YpOworI2Vsc2UKKwkJU09DS19MT0NLKHNvKTsK
KwkJc28tPnNvX3N0YXRlICY9IH5TU19DQU5UUkNWTU9SRTsKKwkJU09DS19VTkxPQ0soc28pOwor
I2VuZGlmCisJCS8qIFRoaXMgcHJvYyB3aWxsIHdha2V1cCBmb3IgcmVhZCBhbmQgZG8gbm90aGlu
ZyAoSSBob3BlKSAqLworCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVPUE5PVFNVUFAp
OworCQlyZXR1cm4gKEVPUE5PVFNVUFApOworCX0gZWxzZSB7CisJCS8qCisJCSAqIE9rLCBpZiB3
ZSByZWFjaCBoZXJlIGl0cyB0aGUgVENQIG1vZGVsIGFuZCBpdCBpcyBlaXRoZXIKKwkJICogYSBT
SFVUX1dSIG9yIFNIVVRfUkRXUi4KKwkJICogVGhpcyBtZWFucyB3ZSBwdXQgdGhlIHNodXRkb3du
IGZsYWcgYWdhaW5zdCBpdC4KKwkJICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJc3RydWN0IGVwb2NoX3RyYWNrZXIgZXQ7CisjZW5kaWYK
KwkJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNv
YzsKKwkJc3RydWN0IHNjdHBfbmV0cyAqbmV0cDsKKworCQlpZiAoKHNvLT5zb19zdGF0ZSAmCisJ
CSAgICAgKFNTX0lTQ09OTkVDVEVEfFNTX0lTQ09OTkVDVElOR3xTU19JU0RJU0NPTk5FQ1RJTkcp
KSA9PSAwKSB7CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQlyZXR1cm4gKEVOT1RDT05O
KTsKKwkJfQorCQlzb2NhbnRzZW5kbW9yZShzbyk7CisKKwkJc3RjYiA9IExJU1RfRklSU1QoJmlu
cC0+c2N0cF9hc29jX2xpc3QpOworCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCQkvKgorCQkJICog
T2ssIHdlIGhpdCB0aGUgY2FzZSB0aGF0IHRoZSBzaHV0ZG93biBjYWxsIHdhcworCQkJICogbWFk
ZSBhZnRlciBhbiBhYm9ydCBvciBzb21ldGhpbmcuIE5vdGhpbmcgdG8gZG8KKwkJCSAqIG5vdy4K
KwkJCSAqLworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJcmV0dXJuICgwKTsKKwkJfQor
CQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQlhc29jID0gJnN0Y2ItPmFzb2M7CisJCWlmIChhc29j
LT5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKKwkJCVNDVFBfVENCX1VO
TE9DSyhzdGNiKTsKKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCXJldHVybiAoMCk7CisJ
CX0KKwkJaWYgKChTQ1RQX0dFVF9TVEFURShzdGNiKSAhPSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlU
KSAmJgorCQkgICAgKFNDVFBfR0VUX1NUQVRFKHN0Y2IpICE9IFNDVFBfU1RBVEVfQ09PS0lFX0VD
SE9FRCkgJiYKKwkJICAgIChTQ1RQX0dFVF9TVEFURShzdGNiKSAhPSBTQ1RQX1NUQVRFX09QRU4p
KSB7CisJCQkvKiBJZiB3ZSBhcmUgbm90IGluIG9yIGJlZm9yZSBFU1RBQkxJU0hFRCwgdGhlcmUg
aXMKKwkJCSAqIG5vIHByb3RvY29sIGFjdGlvbiByZXF1aXJlZC4KKwkJCSAqLworCQkJU0NUUF9U
Q0JfVU5MT0NLKHN0Y2IpOworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJcmV0dXJuICgw
KTsKKwkJfQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisJCU5FVF9FUE9DSF9FTlRFUihldCk7CisjZW5kaWYKKwkJaWYgKHN0Y2ItPmFzb2MuYWx0
ZXJuYXRlKSB7CisJCQluZXRwID0gc3RjYi0+YXNvYy5hbHRlcm5hdGU7CisJCX0gZWxzZSB7CisJ
CQluZXRwID0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uOworCQl9CisJCWlmICgoU0NU
UF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9PUEVOKSAmJgorCQkgICAgVEFJTFFfRU1Q
VFkoJmFzb2MtPnNlbmRfcXVldWUpICYmCisJCSAgICBUQUlMUV9FTVBUWSgmYXNvYy0+c2VudF9x
dWV1ZSkgJiYKKwkJICAgIChhc29jLT5zdHJlYW1fcXVldWVfY250ID09IDApKSB7CisJCQlpZiAo
KCphc29jLT5zc19mdW5jdGlvbnMuc2N0cF9zc19pc191c2VyX21zZ3NfaW5jb21wbGV0ZSkoc3Rj
YiwgYXNvYykpIHsKKwkJCQlnb3RvIGFib3J0X2FueXdheTsKKwkJCX0KKwkJCS8qIHRoZXJlIGlz
IG5vdGhpbmcgcXVldWVkIHRvIHNlbmQsIHNvIEknbSBkb25lLi4uICovCisJCQlTQ1RQX1NUQVRf
REVDUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7CisJCQlTQ1RQX1NFVF9TVEFURShzdGNiLCBT
Q1RQX1NUQVRFX1NIVVRET1dOX1NFTlQpOworCQkJc2N0cF9zdG9wX3RpbWVyc19mb3Jfc2h1dGRv
d24oc3RjYik7CisJCQlzY3RwX3NlbmRfc2h1dGRvd24oc3RjYiwgbmV0cCk7CisJCQlzY3RwX3Rp
bWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTiwKKwkJCSAgICAgICAgICAgICAgICAg
c3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0cCk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogV2Ug
c3RpbGwgZ290IChvciBqdXN0IGdvdCkgZGF0YSB0byBzZW5kLCBzbyBzZXQKKwkJCSAqIFNIVVRE
T1dOX1BFTkRJTkcuCisJCQkgKi8KKwkJCVNDVFBfQUREX1NVQlNUQVRFKHN0Y2IsIFNDVFBfU1RB
VEVfU0hVVERPV05fUEVORElORyk7CisJCQlpZiAoKCphc29jLT5zc19mdW5jdGlvbnMuc2N0cF9z
c19pc191c2VyX21zZ3NfaW5jb21wbGV0ZSkoc3RjYiwgYXNvYykpIHsKKwkJCQlTQ1RQX0FERF9T
VUJTVEFURShzdGNiLCBTQ1RQX1NUQVRFX1BBUlRJQUxfTVNHX0xFRlQpOworCQkJfQorCQkJaWYg
KFRBSUxRX0VNUFRZKCZhc29jLT5zZW5kX3F1ZXVlKSAmJgorCQkJICAgIFRBSUxRX0VNUFRZKCZh
c29jLT5zZW50X3F1ZXVlKSAmJgorCQkJICAgIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfUEFS
VElBTF9NU0dfTEVGVCkpIHsKKwkJCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOworCQkJYWJvcnRfYW55
d2F5OgorCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9VU0VSX0lO
SVRJQVRFRF9BQlQsICIiKTsKKwkJCQlzdGNiLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2NvZGUgPSBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ182OworCQkJCVNDVFBfSU5QX1JVTkxPQ0so
aW5wKTsKKwkJCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
CisJCQkJCQkJICBvcF9lcnIsIFNDVFBfU09fTE9DS0VEKTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCU5FVF9FUE9DSF9FWElUKGV0KTsK
KyNlbmRpZgorCQkJCXJldHVybiAoMCk7CisJCQl9CisJCX0KKwkJc2N0cF90aW1lcl9zdGFydChT
Q1RQX1RJTUVSX1RZUEVfU0hVVERPV05HVUFSRCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgTlVMTCk7
CisJCS8qIFhYWDogV2h5IGRvIHRoaXMgaW4gdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSBzdGlsbCBk
YXRhIHF1ZXVlZD8gKi8KKwkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBV
VF9GUk9NX0NMT1NJTkcsIFNDVFBfU09fTE9DS0VEKTsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OworCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
IWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJTkVUX0VQT0NIX0VYSVQoZXQpOworI2VuZGlmCisJ
CXJldHVybiAoMCk7CisJfQorfQorCisvKgorICogY29waWVzIGEgInVzZXIiIHByZXNlbnRhYmxl
IGFkZHJlc3MgYW5kIHJlbW92ZXMgZW1iZWRkZWQgc2NvcGUsIGV0Yy4KKyAqIHJldHVybnMgMCBv
biBzdWNjZXNzLCAxIG9uIGVycm9yCisgKi8KK3N0YXRpYyB1aW50MzJfdAorc2N0cF9maWxsX3Vz
ZXJfYWRkcmVzcyhzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwgc3RydWN0IHNvY2thZGRyICpzcmMpCit7
CisjaWZkZWYgSU5FVDYKKyNpZiBkZWZpbmVkKFNDVFBfRU1CRURERURfVjZfU0NPUEUpCisJc3Ry
dWN0IHNvY2thZGRyX2luNiBsc2E2OworCisJc3JjID0gKHN0cnVjdCBzb2NrYWRkciAqKXNjdHBf
cmVjb3Zlcl9zY29wZSgoc3RydWN0IHNvY2thZGRyX2luNiAqKXNyYywKKwkgICAgJmxzYTYpOwor
I2VuZGlmCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NBX0xFTgorCW1lbWNweShkc3QsIHNyYywgc3Jj
LT5zYV9sZW4pOworI2Vsc2UKKwlzd2l0Y2ggKHNyYy0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5F
VAorCWNhc2UgQUZfSU5FVDoKKwkJbWVtY3B5KGRzdCwgc3JjLCBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luKSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2
OgorCQltZW1jcHkoZHN0LCBzcmMsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJCWJy
ZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWNhc2UgQUZfQ09OTjoK
KwkJbWVtY3B5KGRzdCwgc3JjLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKKwkJYnJl
YWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQkvKiBUU05IICovCisJCWJyZWFrOworCX0KKyNlbmRp
ZgorCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBzaXplX3QKK3NjdHBfZmlsbF91cF9hZGRyZXNz
ZXNfdnJmKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFk
ZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2cmZfaWQpCit7CisJc3Ry
dWN0IHNjdHBfaWZuICpzY3RwX2lmbjsKKwlzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhOworCXNp
emVfdCBhY3R1YWw7CisJaW50IGxvb3BiYWNrX3Njb3BlOworI2lmIGRlZmluZWQoSU5FVCkKKwlp
bnQgaXB2NF9sb2NhbF9zY29wZSwgaXB2NF9hZGRyX2xlZ2FsOworI2VuZGlmCisjaWYgZGVmaW5l
ZChJTkVUNikKKwlpbnQgbG9jYWxfc2NvcGUsIHNpdGVfc2NvcGUsIGlwdjZfYWRkcl9sZWdhbDsK
KyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlpbnQgY29ubl9hZGRyX2xlZ2Fs
OworI2VuZGlmCisJc3RydWN0IHNjdHBfdnJmICp2cmY7CisKKwlTQ1RQX0lQSV9BRERSX0xPQ0tf
QVNTRVJUKCk7CisJYWN0dWFsID0gMDsKKwlpZiAobGltaXQgPT0gMCkKKwkJcmV0dXJuIChhY3R1
YWwpOworCisJaWYgKHN0Y2IpIHsKKwkJLyogVHVybiBvbiBhbGwgdGhlIGFwcHJvcHJpYXRlIHNj
b3BlICovCisJCWxvb3BiYWNrX3Njb3BlID0gc3RjYi0+YXNvYy5zY29wZS5sb29wYmFja19zY29w
ZTsKKyNpZiBkZWZpbmVkKElORVQpCisJCWlwdjRfbG9jYWxfc2NvcGUgPSBzdGNiLT5hc29jLnNj
b3BlLmlwdjRfbG9jYWxfc2NvcGU7CisJCWlwdjRfYWRkcl9sZWdhbCA9IHN0Y2ItPmFzb2Muc2Nv
cGUuaXB2NF9hZGRyX2xlZ2FsOworI2VuZGlmCisjaWYgZGVmaW5lZChJTkVUNikKKwkJbG9jYWxf
c2NvcGUgPSBzdGNiLT5hc29jLnNjb3BlLmxvY2FsX3Njb3BlOworCQlzaXRlX3Njb3BlID0gc3Rj
Yi0+YXNvYy5zY29wZS5zaXRlX3Njb3BlOworCQlpcHY2X2FkZHJfbGVnYWwgPSBzdGNiLT5hc29j
LnNjb3BlLmlwdjZfYWRkcl9sZWdhbDsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwkJY29ubl9hZGRyX2xlZ2FsID0gc3RjYi0+YXNvYy5zY29wZS5jb25uX2FkZHJfbGVnYWw7
CisjZW5kaWYKKwl9IGVsc2UgeworCQkvKiBVc2UgZ2VuZXJpYyB2YWx1ZXMgZm9yIGVuZHBvaW50
cy4gKi8KKwkJbG9vcGJhY2tfc2NvcGUgPSAxOworI2lmIGRlZmluZWQoSU5FVCkKKwkJaXB2NF9s
b2NhbF9zY29wZSA9IDE7CisjZW5kaWYKKyNpZiBkZWZpbmVkKElORVQ2KQorCQlsb2NhbF9zY29w
ZSA9IDE7CisJCXNpdGVfc2NvcGUgPSAxOworI2VuZGlmCisJCWlmIChpbnAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgeworI2lmIGRlZmluZWQoSU5FVDYpCisJCQlpcHY2
X2FkZHJfbGVnYWwgPSAxOworI2VuZGlmCisjaWYgZGVmaW5lZChJTkVUKQorCQkJaWYgKFNDVFBf
SVBWNl9WNk9OTFkoaW5wKSkgeworCQkJCWlwdjRfYWRkcl9sZWdhbCA9IDA7CisJCQl9IGVsc2Ug
eworCQkJCWlwdjRfYWRkcl9sZWdhbCA9IDE7CisJCQl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisJCQljb25uX2FkZHJfbGVnYWwgPSAwOworI2VuZGlmCisJCX0gZWxzZSB7
CisjaWYgZGVmaW5lZChJTkVUNikKKwkJCWlwdjZfYWRkcl9sZWdhbCA9IDA7CisjZW5kaWYKKyNp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfQk9VTkRfQ09OTikgeworCQkJCWNvbm5fYWRkcl9sZWdhbCA9IDE7CisjaWYgZGVm
aW5lZChJTkVUKQorCQkJCWlwdjRfYWRkcl9sZWdhbCA9IDA7CisjZW5kaWYKKwkJCX0gZWxzZSB7
CisJCQkJY29ubl9hZGRyX2xlZ2FsID0gMDsKKyNpZiBkZWZpbmVkKElORVQpCisJCQkJaXB2NF9h
ZGRyX2xlZ2FsID0gMTsKKyNlbmRpZgorCQkJfQorI2Vsc2UKKyNpZiBkZWZpbmVkKElORVQpCisJ
CQlpcHY0X2FkZHJfbGVnYWwgPSAxOworI2VuZGlmCisjZW5kaWYKKwkJfQorCX0KKwl2cmYgPSBz
Y3RwX2ZpbmRfdnJmKHZyZl9pZCk7CisJaWYgKHZyZiA9PSBOVUxMKSB7CisJCXJldHVybiAoMCk7
CisJfQorCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgewor
CQlMSVNUX0ZPUkVBQ0goc2N0cF9pZm4sICZ2cmYtPmlmbmxpc3QsIG5leHRfaWZuKSB7CisJCQlp
ZiAoKGxvb3BiYWNrX3Njb3BlID09IDApICYmCisJCQkgICAgU0NUUF9JRk5fSVNfSUZUX0xPT1Ao
c2N0cF9pZm4pKSB7CisJCQkJLyogU2tpcCBsb29wYmFjayBpZiBsb29wYmFja19zY29wZSBub3Qg
c2V0ICovCisJCQkJY29udGludWU7CisJCQl9CisJCQlMSVNUX0ZPUkVBQ0goc2N0cF9pZmEsICZz
Y3RwX2lmbi0+aWZhbGlzdCwgbmV4dF9pZmEpIHsKKwkJCQlpZiAoc3RjYikgeworCQkJCQkvKgor
CQkJCQkgKiBGb3IgdGhlIEJPVU5ELUFMTCBjYXNlLCB0aGUgbGlzdAorCQkJCQkgKiBhc3NvY2lh
dGVkIHdpdGggYSBUQ0IgaXMgQWx3YXlzCisJCQkJCSAqIGNvbnNpZGVyZWQgYSByZXZlcnNlIGxp
c3QuLiBpLmUuCisJCQkJCSAqIGl0IGxpc3RzIGFkZHJlc3NlcyB0aGF0IGFyZSBOT1QKKwkJCQkJ
ICogcGFydCBvZiB0aGUgYXNzb2NpYXRpb24uIElmIHRoaXMKKwkJCQkJICogaXMgb25lIG9mIHRo
b3NlIHdlIG11c3Qgc2tpcCBpdC4KKwkJCQkJICovCisJCQkJCWlmIChzY3RwX2lzX2FkZHJfcmVz
dHJpY3RlZChzdGNiLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2N0cF9pZmEp
KSB7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCX0KKwkJCQlzd2l0Y2ggKHNjdHBfaWZh
LT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCQljYXNlIEFGX0lORVQ6
CisJCQkJCWlmIChpcHY0X2FkZHJfbGVnYWwpIHsKKwkJCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAq
c2luOworCisJCQkJCQlzaW4gPSAmc2N0cF9pZmEtPmFkZHJlc3Muc2luOworCQkJCQkJaWYgKHNp
bi0+c2luX2FkZHIuc19hZGRyID09IDApIHsKKwkJCQkJCQkvKgorCQkJCQkJCSAqIHdlIHNraXAg
dW5zcGVjaWZlZAorCQkJCQkJCSAqIGFkZHJlc3NlcworCQkJCQkJCSAqLworCQkJCQkJCWNvbnRp
bnVlOworCQkJCQkJfQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisJCQkJCQlpZiAocHJpc29uX2NoZWNrX2lwNChpbnAtPmlwX2lucC5pbnAuaW5w
X2NyZWQsCisJCQkJCQkgICAgICAgICAgICAgICAgICAgICAmc2luLT5zaW5fYWRkcikgIT0gMCkg
eworCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorI2VuZGlmCisJCQkJCQlpZiAoKGlwdjRfbG9j
YWxfc2NvcGUgPT0gMCkgJiYKKwkJCQkJCSAgICAoSU40X0lTUFJJVkFURV9BRERSRVNTKCZzaW4t
PnNpbl9hZGRyKSkpIHsKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKyNpZmRlZiBJTkVUNgor
CQkJCQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX05FRURTX01B
UFBFRF9WNCkpIHsKKwkJCQkJCQlpZiAoYWN0dWFsICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bjYpID4gbGltaXQpIHsKKwkJCQkJCQkJcmV0dXJuIChhY3R1YWwpOworCQkJCQkJCX0KKwkJCQkJ
CQlpbjZfc2luXzJfdjRtYXBzaW42KHNpbiwgKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyKTsK
KwkJCQkJCQkoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyKS0+c2luNl9wb3J0ID0gaW5wLT5z
Y3RwX2xwb3J0OworCQkJCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KWFk
ZHIgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworCQkJCQkJCWFjdHVhbCArPSBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJCQkJCQl9IGVsc2UgeworI2VuZGlmCisJCQkJCQkJ
aWYgKGFjdHVhbCArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pID4gbGltaXQpIHsKKwkJCQkJ
CQkJcmV0dXJuIChhY3R1YWwpOworCQkJCQkJCX0KKwkJCQkJCQltZW1jcHkoYWRkciwgc2luLCBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJCQkJCQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4g
KilhZGRyKS0+c2luX3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7CisJCQkJCQkJYWRkciA9IChzdHJ1
Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3QpYWRkciArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4p
KTsKKwkJCQkJCQlhY3R1YWwgKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjaWZkZWYg
SU5FVDYKKwkJCQkJCX0KKyNlbmRpZgorCQkJCQl9IGVsc2UgeworCQkJCQkJY29udGludWU7CisJ
CQkJCX0KKwkJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJCWNhc2UgQUZfSU5F
VDY6CisJCQkJCWlmIChpcHY2X2FkZHJfbGVnYWwpIHsKKwkJCQkJCXN0cnVjdCBzb2NrYWRkcl9p
bjYgKnNpbjY7CisKKyNpZiBkZWZpbmVkKFNDVFBfRU1CRURERURfVjZfU0NPUEUpICYmICFkZWZp
bmVkKFNDVFBfS0FNRSkKKwkJCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgbHNhNjsKKyNlbmRpZgor
CQkJCQkJc2luNiA9ICZzY3RwX2lmYS0+YWRkcmVzcy5zaW42OworCQkJCQkJaWYgKElONl9JU19B
RERSX1VOU1BFQ0lGSUVEKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQkJCQkJLyoKKwkJCQkJCQkg
KiB3ZSBza2lwIHVuc3BlY2lmZWQKKwkJCQkJCQkgKiBhZGRyZXNzZXMKKwkJCQkJCQkgKi8KKwkJ
CQkJCQljb250aW51ZTsKKwkJCQkJCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCQkJaWYgKHByaXNvbl9jaGVja19pcDYoaW5wLT5pcF9p
bnAuaW5wLmlucF9jcmVkLAorCQkJCQkJICAgICAgICAgICAgICAgICAgICAgJnNpbjYtPnNpbjZf
YWRkcikgIT0gMCkgeworCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorI2VuZGlmCisJCQkJCQlp
ZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQkJCQkJaWYg
KGxvY2FsX3Njb3BlID09IDApCisJCQkJCQkJCWNvbnRpbnVlOworI2lmIGRlZmluZWQoU0NUUF9F
TUJFRERFRF9WNl9TQ09QRSkKKwkJCQkJCQlpZiAoc2luNi0+c2luNl9zY29wZV9pZCA9PSAwKSB7
CisjaWZkZWYgU0NUUF9LQU1FCisJCQkJCQkJCWlmIChzYTZfcmVjb3ZlcnNjb3BlKHNpbjYpICE9
IDApCisJCQkJCQkJCQkvKgorCQkJCQkJCQkJICogYmFkIGxpbmsKKwkJCQkJCQkJCSAqIGxvY2Fs
CisJCQkJCQkJCQkgKiBhZGRyZXNzCisJCQkJCQkJCQkgKi8KKwkJCQkJCQkJCWNvbnRpbnVlOwor
I2Vsc2UKKwkJCQkJCQkJbHNhNiA9ICpzaW42OworCQkJCQkJCQlpZiAoaW42X3JlY292ZXJzY29w
ZSgmbHNhNiwKKwkJCQkJCQkJCQkgICAgICZsc2E2LnNpbjZfYWRkciwKKwkJCQkJCQkJCQkgICAg
IE5VTEwpKQorCQkJCQkJCQkJLyoKKwkJCQkJCQkJCSAqIGJhZCBsaW5rCisJCQkJCQkJCQkgKiBs
b2NhbAorCQkJCQkJCQkJICogYWRkcmVzcworCQkJCQkJCQkJICovCisJCQkJCQkJCWNvbnRpbnVl
OworCQkJCQkJCQlzaW42ID0gJmxzYTY7CisjZW5kaWYJCQkJLyogU0NUUF9LQU1FICovCisJCQkJ
CQkJfQorI2VuZGlmIC8qIFNDVFBfRU1CRURERURfVjZfU0NPUEUgKi8KKwkJCQkJCX0KKwkJCQkJ
CWlmICgoc2l0ZV9zY29wZSA9PSAwKSAmJgorCQkJCQkJICAgIChJTjZfSVNfQUREUl9TSVRFTE9D
QUwoJnNpbjYtPnNpbjZfYWRkcikpKSB7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisJCQkJ
CQlpZiAoYWN0dWFsICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpID4gbGltaXQpIHsKKwkJ
CQkJCQlyZXR1cm4gKGFjdHVhbCk7CisJCQkJCQl9CisJCQkJCQltZW1jcHkoYWRkciwgc2luNiwg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwkJCQkJCSgoc3RydWN0IHNvY2thZGRyX2lu
NiAqKWFkZHIpLT5zaW42X3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7CisJCQkJCQlhZGRyID0gKHN0
cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClhZGRyICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bjYpKTsKKwkJCQkJCWFjdHVhbCArPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJCQkJ
CX0gZWxzZSB7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlicmVhazsKKyNlbmRpZgor
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQljYXNlIEFGX0NPTk46CisJCQkJCWlmIChj
b25uX2FkZHJfbGVnYWwpIHsKKwkJCQkJCWlmIChhY3R1YWwgKyBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2Nvbm4pID4gbGltaXQpIHsKKwkJCQkJCQlyZXR1cm4gKGFjdHVhbCk7CisJCQkJCQl9CisJ
CQkJCQltZW1jcHkoYWRkciwgJnNjdHBfaWZhLT5hZGRyZXNzLnNjb25uLCBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2Nvbm4pKTsKKwkJCQkJCSgoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilhZGRyKS0+
c2Nvbm5fcG9ydCA9IGlucC0+c2N0cF9scG9ydDsKKwkJCQkJCWFkZHIgPSAoc3RydWN0IHNvY2th
ZGRyICopKChjYWRkcl90KWFkZHIgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKKwkJ
CQkJCWFjdHVhbCArPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOworCQkJCQl9IGVsc2Ug
eworCQkJCQkJY29udGludWU7CisJCQkJCX0KKyNlbmRpZgorCQkJCWRlZmF1bHQ6CisJCQkJCS8q
IFRTTkggKi8KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJc3Ry
dWN0IHNjdHBfbGFkZHIgKmxhZGRyOworCQlzaXplX3Qgc2FfbGVuOworCisJCUxJU1RfRk9SRUFD
SChsYWRkciwgJmlucC0+c2N0cF9hZGRyX2xpc3QsIHNjdHBfbnh0X2FkZHIpIHsKKwkJCWlmIChz
dGNiKSB7CisJCQkJaWYgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIGxhZGRyLT5pZmEp
KSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKyNpZmRlZiBIQVZFX1NBX0xFTgorCQkJ
c2FfbGVuID0gbGFkZHItPmlmYS0+YWRkcmVzcy5zYS5zYV9sZW47CisjZWxzZQorCQkJc3dpdGNo
IChsYWRkci0+aWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCWNh
c2UgQUZfSU5FVDoKKwkJCQlzYV9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKwkJ
CQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQljYXNlIEFGX0lORVQ2OgorCQkJCXNh
X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKwkJCQlicmVhazsKKyNlbmRpZgor
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCWNhc2UgQUZfQ09OTjoKKwkJCQlzYV9sZW4g
PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOworCQkJCWJyZWFrOworI2VuZGlmCisJCQlk
ZWZhdWx0OgorCQkJCS8qIFRTTkggKi8KKwkJCQlzYV9sZW4gPSAwOworCQkJCWJyZWFrOworCQkJ
fQorI2VuZGlmCisJCQlpZiAoYWN0dWFsICsgc2FfbGVuID4gbGltaXQpIHsKKwkJCQlyZXR1cm4g
KGFjdHVhbCk7CisJCQl9CisJCQlpZiAoc2N0cF9maWxsX3VzZXJfYWRkcmVzcyhhZGRyLCAmbGFk
ZHItPmlmYS0+YWRkcmVzcy5zYSkpCisJCQkJY29udGludWU7CisJCQlzd2l0Y2ggKGxhZGRyLT5p
ZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQkJY2FzZSBBRl9JTkVU
OgorCQkJCSgoc3RydWN0IHNvY2thZGRyX2luICopYWRkciktPnNpbl9wb3J0ID0gaW5wLT5zY3Rw
X2xwb3J0OworCQkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5F
VDY6CisJCQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkciktPnNpbjZfcG9ydCA9IGlucC0+
c2N0cF9scG9ydDsKKwkJCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwkJCWNhc2UgQUZfQ09OTjoKKwkJCQkoKHN0cnVjdCBzb2NrYWRkcl9jb25uICopYWRkcikt
PnNjb25uX3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWRl
ZmF1bHQ6CisJCQkJLyogVFNOSCAqLworCQkJCWJyZWFrOworCQkJfQorCQkJYWRkciA9IChzdHJ1
Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3QpYWRkciArIHNhX2xlbik7CisJCQlhY3R1YWwgKz0gc2Ff
bGVuOworCQl9CisJfQorCXJldHVybiAoYWN0dWFsKTsKK30KKworc3RhdGljIHNpemVfdAorc2N0
cF9maWxsX3VwX2FkZHJlc3NlcyhzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICph
ZGRyKQoreworCXNpemVfdCBzaXplID0gMDsKKyNpZmRlZiBTQ1RQX01WUkYKKwl1aW50MzJfdCBp
ZDsKKyNlbmRpZgorCisJU0NUUF9JUElfQUREUl9STE9DSygpOworI2lmZGVmIFNDVFBfTVZSRgor
LyoKKyAqIEZJWCBNRTogPz8gdGhpcyBXSUxMIHJlcG9ydCBkdXBsaWNhdGUgYWRkcmVzc2VzIGlm
IHRoZXkgYXBwZWFyCisgKiBpbiBtb3JlIHRoYW4gb25lIFZSRi4KKyAqLworCS8qIGZpbGwgdXAg
YWRkcmVzc2VzIGZvciBhbGwgVlJGcyBvbiB0aGUgZW5kcG9pbnQgKi8KKwlmb3IgKGlkID0gMDsg
KGlkIDwgaW5wLT5udW1fdnJmcykgJiYgKHNpemUgPCBsaW1pdCk7IGlkKyspIHsKKwkJc2l6ZSAr
PSBzY3RwX2ZpbGxfdXBfYWRkcmVzc2VzX3ZyZihpbnAsIHN0Y2IsIGxpbWl0LCBhZGRyLAorCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucC0+bV92cmZfaWRzW2lkXSk7CisJ
CWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KWFkZHIgKyBzaXplKTsKKwl9Cisj
ZWxzZQorCS8qIGZpbGwgdXAgYWRkcmVzc2VzIGZvciB0aGUgZW5kcG9pbnQncyBkZWZhdWx0IHZy
ZiAqLworCXNpemUgPSBzY3RwX2ZpbGxfdXBfYWRkcmVzc2VzX3ZyZihpbnAsIHN0Y2IsIGxpbWl0
LCBhZGRyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnAtPmRlZl92cmZf
aWQpOworI2VuZGlmCisJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7CisJcmV0dXJuIChzaXplKTsK
K30KKworc3RhdGljIGludAorc2N0cF9jb3VudF9tYXhfYWRkcmVzc2VzX3ZyZihzdHJ1Y3Qgc2N0
cF9pbnBjYiAqaW5wLCB1aW50MzJfdCB2cmZfaWQpCit7CisJaW50IGNudCA9IDA7CisJc3RydWN0
IHNjdHBfdnJmICp2cmYgPSBOVUxMOworCisJLyoKKwkgKiBJbiBib3RoIHN1Yi1zZXQgYm91bmQg
YW4gYm91bmRfYWxsIGNhc2VzIHdlIHJldHVybiB0aGUgTUFYSU1VTQorCSAqIG51bWJlciBvZiBh
ZGRyZXNzZXMgdGhhdCB5b3UgQ09VTEQgZ2V0LiBJbiByZWFsaXR5IHRoZSBzdWItc2V0CisJICog
Ym91bmQgbWF5IGhhdmUgYW4gZXhjbHVzaW9uIGxpc3QgZm9yIGEgZ2l2ZW4gVENCIE9SIGluIHRo
ZQorCSAqIGJvdW5kLWFsbCBjYXNlIGEgVENCIG1heSBOT1QgaW5jbHVkZSB0aGUgbG9vcGJhY2sg
b3Igb3RoZXIKKwkgKiBhZGRyZXNzZXMgYXMgd2VsbC4KKwkgKi8KKwlTQ1RQX0lQSV9BRERSX0xP
Q0tfQVNTRVJUKCk7CisJdnJmID0gc2N0cF9maW5kX3ZyZih2cmZfaWQpOworCWlmICh2cmYgPT0g
TlVMTCkgeworCQlyZXR1cm4gKDApOworCX0KKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfQk9VTkRBTEwpIHsKKwkJc3RydWN0IHNjdHBfaWZuICpzY3RwX2lmbjsKKwkJc3Ry
dWN0IHNjdHBfaWZhICpzY3RwX2lmYTsKKworCQlMSVNUX0ZPUkVBQ0goc2N0cF9pZm4sICZ2cmYt
Pmlmbmxpc3QsIG5leHRfaWZuKSB7CisJCQlMSVNUX0ZPUkVBQ0goc2N0cF9pZmEsICZzY3RwX2lm
bi0+aWZhbGlzdCwgbmV4dF9pZmEpIHsKKwkJCQkvKiBDb3VudCB0aGVtIGlmIHRoZXkgYXJlIHRo
ZSByaWdodCB0eXBlICovCisJCQkJc3dpdGNoIChzY3RwX2lmYS0+YWRkcmVzcy5zYS5zYV9mYW1p
bHkpIHsKKyNpZmRlZiBJTkVUCisJCQkJY2FzZSBBRl9JTkVUOgorI2lmZGVmIElORVQ2CisJCQkJ
CWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19ORUVEU19NQVBQRURf
VjQpKQorCQkJCQkJY250ICs9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKwkJCQkJZWxz
ZQorCQkJCQkJY250ICs9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2Vsc2UKKwkJCQkJ
Y250ICs9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJCQkJCWJyZWFrOwor
I2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCQljYXNlIEFGX0lORVQ2OgorCQkJCQljbnQgKz0gc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQkJCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQljYXNlIEFGX0NPTk46CisJCQkJCWNudCArPSBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2Nvbm4pOworCQkJCQlicmVhazsKKyNlbmRpZgorCQkJCWRlZmF1bHQ6
CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCBzY3Rw
X2xhZGRyICpsYWRkcjsKKworCQlMSVNUX0ZPUkVBQ0gobGFkZHIsICZpbnAtPnNjdHBfYWRkcl9s
aXN0LCBzY3RwX254dF9hZGRyKSB7CisJCQlzd2l0Y2ggKGxhZGRyLT5pZmEtPmFkZHJlc3Muc2Eu
c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQkJY2FzZSBBRl9JTkVUOgorI2lmZGVmIElORVQ2
CisJCQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX05FRURTX01B
UFBFRF9WNCkpCisJCQkJCWNudCArPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJCQkJ
ZWxzZQorCQkJCQljbnQgKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZWxzZQorCQkJ
CWNudCArPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCQkJCWJyZWFrOwor
I2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6CisJCQkJY250ICs9IHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKwkJCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKKwkJCWNhc2UgQUZfQ09OTjoKKwkJCQljbnQgKz0gc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9jb25uKTsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQli
cmVhazsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gKGNudCk7Cit9CisKK3N0YXRpYyBpbnQKK3Nj
dHBfY291bnRfbWF4X2FkZHJlc3NlcyhzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wKQoreworCWludCBj
bnQgPSAwOworI2lmZGVmIFNDVFBfTVZSRgorCWludCBpZDsKKyNlbmRpZgorCisJU0NUUF9JUElf
QUREUl9STE9DSygpOworI2lmZGVmIFNDVFBfTVZSRgorLyoKKyAqIEZJWCBNRTogPz8gdGhpcyBX
SUxMIGNvdW50IGR1cGxpY2F0ZSBhZGRyZXNzZXMgaWYgdGhleSBhcHBlYXIKKyAqIGluIG1vcmUg
dGhhbiBvbmUgVlJGLgorICovCisJLyogY291bnQgYWRkcmVzc2VzIGZvciBhbGwgVlJGcyBvbiB0
aGUgZW5kcG9pbnQgKi8KKwlmb3IgKGlkID0gMDsgaWQgPCBpbnAtPm51bV92cmZzOyBpZCsrKSB7
CisJCWNudCArPSBzY3RwX2NvdW50X21heF9hZGRyZXNzZXNfdnJmKGlucCwgaW5wLT5tX3ZyZl9p
ZHNbaWRdKTsKKwl9CisjZWxzZQorCS8qIGNvdW50IGFkZHJlc3NlcyBmb3IgdGhlIGVuZHBvaW50
J3MgZGVmYXVsdCBWUkYgKi8KKwljbnQgPSBzY3RwX2NvdW50X21heF9hZGRyZXNzZXNfdnJmKGlu
cCwgaW5wLT5kZWZfdnJmX2lkKTsKKyNlbmRpZgorCVNDVFBfSVBJX0FERFJfUlVOTE9DSygpOwor
CXJldHVybiAoY250KTsKK30KKworc3RhdGljIGludAorc2N0cF9kb19jb25uZWN0X3goc3RydWN0
IHNvY2tldCAqc28sIHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHZvaWQgKm9wdHZhbCwKKwkJICBz
aXplX3Qgb3B0c2l6ZSwgdm9pZCAqcCwgaW50IGRlbGF5KQoreworCWludCBlcnJvcjsKKwlpbnQg
Y3JlYXRfbG9ja19vbiA9IDA7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiID0gTlVMTDsKKwlzdHJ1
Y3Qgc29ja2FkZHIgKnNhOworCXVuc2lnbmVkIGludCBudW1fdjYgPSAwLCBudW1fdjQgPSAwLCAq
dG90YWRkcnAsIHRvdGFkZHI7CisJdWludDMyX3QgdnJmX2lkOworCXNjdHBfYXNzb2NfdCAqYV9p
ZDsKKworCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAiQ29ubmVjdHggY2FsbGVkXG4iKTsKKwor
CWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgJiYKKwkgICAg
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCkpIHsKKwkJLyogV2Ug
YXJlIGFscmVhZHkgY29ubmVjdGVkIEFORCB0aGUgVENQIG1vZGVsICovCisJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVBRERSSU5V
U0UpOworCQlyZXR1cm4gKEVBRERSSU5VU0UpOworCX0KKworCWlmICgoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgJiYKKwkgICAgKHNjdHBfaXNfZmVhdHVyZV9v
ZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19QT1JUUkVVU0UpKSkgeworCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQly
ZXR1cm4gKEVJTlZBTCk7CisJfQorCisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX0NPTk5FQ1RFRCkgeworCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQlzdGNiID0gTElTVF9G
SVJTVCgmaW5wLT5zY3RwX2Fzb2NfbGlzdCk7CisJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwl9
CisJaWYgKHN0Y2IpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUFMUkVBRFkpOworCQlyZXR1cm4gKEVBTFJFQURZKTsKKwl9
CisJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKKwlTQ1RQX0FTT0NfQ1JFQVRFX0xPQ0soaW5wKTsK
KwljcmVhdF9sb2NrX29uID0gMTsKKwlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX1NPQ0tFVF9BTExHT05FKSB8fAorCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfU09DS0VUX0dPTkUpKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVGQVVMVCk7CisJCWVycm9yID0gRUZBVUxUOwor
CQlnb3RvIG91dF9ub3c7CisJfQorCXRvdGFkZHJwID0gKHVuc2lnbmVkIGludCAqKW9wdHZhbDsK
Kwl0b3RhZGRyID0gKnRvdGFkZHJwOworCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSh0b3RhZGRy
cCArIDEpOworCWVycm9yID0gc2N0cF9jb25uZWN0eF9oZWxwZXJfZmluZChpbnAsIHNhLCB0b3Rh
ZGRyLCAmbnVtX3Y0LCAmbnVtX3Y2LCAodW5zaWduZWQgaW50KShvcHRzaXplIC0gc2l6ZW9mKGlu
dCkpKTsKKwlpZiAoZXJyb3IgIT0gMCkgeworCQkvKiBBbHJlYWR5IGhhdmUgb3IgYW0gYnJpbmcg
dXAgYW4gYXNzb2NpYXRpb24gKi8KKwkJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soaW5wKTsKKwkJ
Y3JlYXRfbG9ja19vbiA9IDA7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJZ290byBvdXRfbm93OworCX0KKyNp
ZmRlZiBJTkVUNgorCWlmICgoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5E
X1Y2KSA9PSAwKSAmJgorCSAgICAobnVtX3Y2ID4gMCkpIHsKKwkJZXJyb3IgPSBFSU5WQUw7CisJ
CWdvdG8gb3V0X25vdzsKKwl9CisJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFH
U19CT1VORF9WNikgJiYKKwkgICAgKG51bV92NCA+IDApKSB7CisJCWlmIChTQ1RQX0lQVjZfVjZP
TkxZKGlucCkpIHsKKwkJCS8qCisJCQkgKiBpZiBJUFY2X1Y2T05MWSBmbGFnLCBpZ25vcmUgY29u
bmVjdGlvbnMgZGVzdGluZWQKKwkJCSAqIHRvIGEgdjQgYWRkciBvciB2NC1tYXBwZWQgYWRkcgor
CQkJICovCisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlnb3RvIG91dF9u
b3c7CisJCX0KKwl9CisjZW5kaWYJCQkJLyogSU5FVDYgKi8KKwlpZiAoKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX1VOQk9VTkQpID09CisJICAgIFNDVFBfUENCX0ZMQUdTX1VOQk9V
TkQpIHsKKwkJLyogQmluZCBhIGVwaGVtZXJhbCBwb3J0ICovCisJCWVycm9yID0gc2N0cF9pbnBj
Yl9iaW5kKHNvLCBOVUxMLCBOVUxMLCBwKTsKKwkJaWYgKGVycm9yKSB7CisJCQlnb3RvIG91dF9u
b3c7CisJCX0KKwl9CisKKwkvKiBGSVggTUU6IGRvIHdlIHdhbnQgdG8gcGFzcyBpbiBhIHZyZiBv
biB0aGUgY29ubmVjdCBjYWxsPyAqLworCXZyZl9pZCA9IGlucC0+ZGVmX3ZyZl9pZDsKKworCS8q
IFdlIGFyZSBHT09EIHRvIGdvICovCisJc3RjYiA9IHNjdHBfYWxvY19hc3NvYyhpbnAsIHNhLCAm
ZXJyb3IsIDAsIHZyZl9pZCwKKwkgICAgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0cF9lcC5w
cmVfb3Blbl9zdHJlYW1fY291bnQsCisJICAgICAgICAgICAgICAgICAgICAgICBpbnAtPnNjdHBf
ZXAucG9ydCwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorCSAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aHJlYWQgKilwLAorI2VsaWYg
ZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJICAgICAgICAgICAg
ICAgICAgICAgICAoUEtUSFJFQUQpcCwKKyNlbHNlCisJICAgICAgICAgICAgICAgICAgICAgICAo
c3RydWN0IHByb2MgKilwLAorI2VuZGlmCisJICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0lO
SVRJQUxJWkVfQVVUSF9QQVJBTVMpOworCWlmIChzdGNiID09IE5VTEwpIHsKKwkJLyogR2FrISBu
byBtZW1vcnkgKi8KKwkJZ290byBvdXRfbm93OworCX0KKwlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHsKKwkJc3RjYi0+c2N0cF9lcC0+c2N0
cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQ7CisJCS8qIFNldCB0aGUgY29ubmVj
dGVkIGZsYWcgc28gd2UgY2FuIHF1ZXVlIGRhdGEgKi8KKwkJc29pc2Nvbm5lY3Rpbmcoc28pOwor
CX0KKwlTQ1RQX1NFVF9TVEFURShzdGNiLCBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKTsKKwkvKiBt
b3ZlIHRvIHNlY29uZCBhZGRyZXNzICovCisJc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7CisjaWZk
ZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwkJc2EgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRk
cl90KXNhICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCQlicmVhazsKKyNlbmRpZgor
I2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKwkJc2EgPSAoc3RydWN0IHNvY2thZGRyICop
KChjYWRkcl90KXNhICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwkJYnJlYWs7Cisj
ZW5kaWYKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwllcnJvciA9IDA7CisJc2N0cF9jb25u
ZWN0eF9oZWxwZXJfYWRkKHN0Y2IsIHNhLCAodG90YWRkci0xKSwgJmVycm9yKTsKKwkvKiBGaWxs
IGluIHRoZSByZXR1cm4gaWQgKi8KKwlpZiAoZXJyb3IpIHsKKwkJZ290byBvdXRfbm93OworCX0K
KwlhX2lkID0gKHNjdHBfYXNzb2NfdCAqKW9wdHZhbDsKKwkqYV9pZCA9IHNjdHBfZ2V0X2Fzc29j
aWQoc3RjYik7CisKKwlpZiAoZGVsYXkpIHsKKwkJLyogZG9pbmcgZGVsYXllZCBjb25uZWN0aW9u
ICovCisJCXN0Y2ItPmFzb2MuZGVsYXllZF9jb25uZWN0aW9uID0gMTsKKwkJc2N0cF90aW1lcl9z
dGFydChTQ1RQX1RJTUVSX1RZUEVfSU5JVCwgaW5wLCBzdGNiLCBzdGNiLT5hc29jLnByaW1hcnlf
ZGVzdGluYXRpb24pOworCX0gZWxzZSB7CisJCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZz
dGNiLT5hc29jLnRpbWVfZW50ZXJlZCk7CisJCXNjdHBfc2VuZF9pbml0aWF0ZShpbnAsIHN0Y2Is
IFNDVFBfU09fTE9DS0VEKTsKKwl9CisJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworIG91dF9ub3c6
CisJaWYgKGNyZWF0X2xvY2tfb24pIHsKKwkJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soaW5wKTsK
Kwl9CisJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworI2Rl
ZmluZSBTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGFzc29jX2lkKSB7IFwKKwlpZiAoKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8XAorCSAgICAoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkpIHsgXAorCQlTQ1RQX0lOUF9STE9D
SyhpbnApOyBcCisJCXN0Y2IgPSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNvY19saXN0KTsgXAor
CQlpZiAoc3RjYikgeyBcCisJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOyBcCisJCX0gXAorCQlTQ1RQ
X0lOUF9SVU5MT0NLKGlucCk7IFwKKwl9IGVsc2UgaWYgKGFzc29jX2lkID4gU0NUUF9BTExfQVNT
T0MpIHsgXAorCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYXNvY2lkKGlucCwgYXNz
b2NfaWQsIDEpOyBcCisJCWlmIChzdGNiID09IE5VTEwpIHsgXAorCQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PRU5UKTsgXAor
CQkJZXJyb3IgPSBFTk9FTlQ7IFwKKwkJCWJyZWFrOyBcCisJCX0gXAorCX0gZWxzZSB7IFwKKwkJ
c3RjYiA9IE5VTEw7IFwKKwl9IFwKK30KKworI2RlZmluZSBTQ1RQX0NIRUNLX0FORF9DQVNUKGRl
c3RwLCBzcmNwLCB0eXBlLCBzaXplKSB7XAorCWlmIChzaXplIDwgc2l6ZW9mKHR5cGUpKSB7IFwK
KwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VT
UlJFUSwgRUlOVkFMKTsgXAorCQllcnJvciA9IEVJTlZBTDsgXAorCQlicmVhazsgXAorCX0gZWxz
ZSB7IFwKKwkJZGVzdHAgPSAodHlwZSAqKXNyY3A7IFwKKwl9IFwKK30KKworI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKK2ludAorI2Vsc2UKK3N0YXRpYyBpbnQKKyNlbmRpZgorc2N0cF9nZXRv
cHQoc3RydWN0IHNvY2tldCAqc28sIGludCBvcHRuYW1lLCB2b2lkICpvcHR2YWwsIHNpemVfdCAq
b3B0c2l6ZSwKKwkgICAgdm9pZCAqcCkgeworCXN0cnVjdCBzY3RwX2lucGNiICppbnAgPSBOVUxM
OworCWludCBlcnJvciwgdmFsID0gMDsKKwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgPSBOVUxMOwor
CisJaWYgKG9wdHZhbCA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCXJldHVybiAoRUlOVkFM
KTsKKwl9CisKKwlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOworCWlmIChp
bnAgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQlyZXR1cm4gRUlOVkFMOworCX0KKwllcnJv
ciA9IDA7CisKKwlzd2l0Y2ggKG9wdG5hbWUpIHsKKwljYXNlIFNDVFBfTk9ERUxBWToKKwljYXNl
IFNDVFBfQVVUT0NMT1NFOgorCWNhc2UgU0NUUF9FWFBMSUNJVF9FT1I6CisJY2FzZSBTQ1RQX0FV
VE9fQVNDT05GOgorCWNhc2UgU0NUUF9ESVNBQkxFX0ZSQUdNRU5UUzoKKwljYXNlIFNDVFBfSV9X
QU5UX01BUFBFRF9WNF9BRERSOgorCWNhc2UgU0NUUF9VU0VfRVhUX1JDVklORk86CisJCVNDVFBf
SU5QX1JMT0NLKGlucCk7CisJCXN3aXRjaCAob3B0bmFtZSkgeworCQljYXNlIFNDVFBfRElTQUJM
RV9GUkFHTUVOVFM6CisJCQl2YWwgPSBzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9G
TEFHU19OT19GUkFHTUVOVCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0lfV0FOVF9NQVBQRURf
VjRfQUREUjoKKwkJCXZhbCA9IHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdT
X05FRURTX01BUFBFRF9WNCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0FVVE9fQVNDT05GOgor
CQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSB7CisJCQkJ
Lyogb25seSB2YWxpZCBmb3IgYm91bmQgYWxsIHNvY2tldHMgKi8KKwkJCQl2YWwgPSBzY3RwX2lz
X2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19BVVRPX0FTQ09ORik7CisJCQl9IGVsc2Ug
eworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJZ290byBmbGFnc19v
dXQ7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0VYUExJQ0lUX0VPUjoKKwkJCXZhbCA9
IHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0VYUExJQ0lUX0VPUik7CisJ
CQlicmVhazsKKwkJY2FzZSBTQ1RQX05PREVMQVk6CisJCQl2YWwgPSBzY3RwX2lzX2ZlYXR1cmVf
b24oaW5wLCBTQ1RQX1BDQl9GTEFHU19OT0RFTEFZKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBf
VVNFX0VYVF9SQ1ZJTkZPOgorCQkJdmFsID0gc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9Q
Q0JfRkxBR1NfRVhUX1JDVklORk8pOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9BVVRPQ0xPU0U6
CisJCQlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfQVVUT0NMT1NF
KSkKKwkJCQl2YWwgPSBzY3RwX3RpY2tzX3RvX3NlY3MoaW5wLT5zY3RwX2VwLmF1dG9fY2xvc2Vf
dGltZSk7CisJCQllbHNlCisJCQkJdmFsID0gMDsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRLCBFTk9QUk9UT09QVCk7CisJCQllcnJvciA9IEVOT1BST1RPT1BUOworCQl9IC8qIGVuZCBz
d2l0Y2ggKHNvcHQtPnNvcHRfbmFtZSkgKi8KKwkJaWYgKCpvcHRzaXplIDwgc2l6ZW9mKHZhbCkp
IHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJfQorCWZsYWdzX291dDoK
KwkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJLyogcmV0
dXJuIHRoZSBvcHRpb24gdmFsdWUgKi8KKwkJCSooaW50ICopb3B0dmFsID0gdmFsOworCQkJKm9w
dHNpemUgPSBzaXplb2YodmFsKTsKKwkJfQorCQlicmVhazsKKyAgICAgICAgY2FzZSBTQ1RQX0dF
VF9QQUNLRVRfTE9HOgorCXsKKyNpZmRlZiAgU0NUUF9QQUNLRVRfTE9HR0lORworCQl1aW50OF90
ICp0YXJnZXQ7CisJCWludCByZXQ7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVCh0YXJnZXQsIG9w
dHZhbCwgdWludDhfdCwgKm9wdHNpemUpOworCQlyZXQgPSBzY3RwX2NvcHlfb3V0X3BhY2tldF9s
b2codGFyZ2V0ICwgKGludCkqb3B0c2l6ZSk7CisJCSpvcHRzaXplID0gcmV0OworI2Vsc2UKKwkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJF
USwgRU9QTk9UU1VQUCk7CisJCWVycm9yID0gRU9QTk9UU1VQUDsKKyNlbmRpZgorCQlicmVhazsK
Kwl9CisJY2FzZSBTQ1RQX1JFVVNFX1BPUlQ6CisJeworCQl1aW50MzJfdCAqdmFsdWU7CisKKwkJ
aWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VRFBUWVBFKSkgeworCQkJLyog
Q2FuJ3QgZG8gdGhpcyBmb3IgYSAxLW0gc29ja2V0ICovCisJCQllcnJvciA9IEVJTlZBTDsKKwkJ
CWJyZWFrOworCQl9CisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QodmFsdWUsIG9wdHZhbCwgdWludDMy
X3QsICpvcHRzaXplKTsKKwkJKnZhbHVlID0gc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9Q
Q0JfRkxBR1NfUE9SVFJFVVNFKTsKKwkJKm9wdHNpemUgPSBzaXplb2YodWludDMyX3QpOworCQli
cmVhazsKKwl9CisJY2FzZSBTQ1RQX1BBUlRJQUxfREVMSVZFUllfUE9JTlQ6CisJeworCQl1aW50
MzJfdCAqdmFsdWU7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVCh2YWx1ZSwgb3B0dmFsLCB1aW50
MzJfdCwgKm9wdHNpemUpOworCQkqdmFsdWUgPSBpbnAtPnBhcnRpYWxfZGVsaXZlcnlfcG9pbnQ7
CisJCSpvcHRzaXplID0gc2l6ZW9mKHVpbnQzMl90KTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU0NU
UF9GUkFHTUVOVF9JTlRFUkxFQVZFOgorCXsKKwkJdWludDMyX3QgKnZhbHVlOworCisJCVNDVFBf
Q0hFQ0tfQU5EX0NBU1QodmFsdWUsIG9wdHZhbCwgdWludDMyX3QsICpvcHRzaXplKTsKKwkJaWYg
KHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0ZSQUdfSU5URVJMRUFWRSkp
IHsKKwkJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19JTlRFUkxF
QVZFX1NUUk1TKSkgeworCQkJCSp2YWx1ZSA9IFNDVFBfRlJBR19MRVZFTF8yOworCQkJfSBlbHNl
IHsKKwkJCQkqdmFsdWUgPSBTQ1RQX0ZSQUdfTEVWRUxfMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJ
CSp2YWx1ZSA9IFNDVFBfRlJBR19MRVZFTF8wOworCQl9CisJCSpvcHRzaXplID0gc2l6ZW9mKHVp
bnQzMl90KTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9JTlRFUkxFQVZJTkdfU1VQUE9SVEVE
OgorCXsKKwkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OworCisJCVNDVFBfQ0hFQ0tfQU5E
X0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsICpvcHRzaXplKTsKKwkJ
U0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOworCisJCWlmIChzdGNiKSB7
CisJCQlhdi0+YXNzb2NfdmFsdWUgPSBzdGNiLT5hc29jLmlkYXRhX3N1cHBvcnRlZDsKKwkJCVND
VFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUpICYmCisJCQkgICAgIChhdi0+YXNzb2NfaWQgPT0gU0NU
UF9GVVRVUkVfQVNTT0MpKSkgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJaWYgKGlu
cC0+aWRhdGFfc3VwcG9ydGVkKSB7CisJCQkJCWF2LT5hc3NvY192YWx1ZSA9IDE7CisJCQkJfSBl
bHNlIHsKKwkJCQkJYXYtPmFzc29jX3ZhbHVlID0gMDsKKwkJCQl9CisJCQkJU0NUUF9JTlBfUlVO
TE9DSyhpbnApOworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlO
VkFMOworCQkJfQorCQl9CisJCWlmIChlcnJvciA9PSAwKSB7CisJCQkqb3B0c2l6ZSA9IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NU
UF9DTVRfT05fT0ZGOgorCXsKKwkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OworCisJCVND
VFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsICpv
cHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOworCQlp
ZiAoc3RjYikgeworCQkJYXYtPmFzc29jX3ZhbHVlID0gc3RjYi0+YXNvYy5zY3RwX2NtdF9vbl9v
ZmY7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VRFBUWVBFKSAmJgorCQkJICAgICAoYXYtPmFzc29j
X2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkpIHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOwor
CQkJCWF2LT5hc3NvY192YWx1ZSA9IGlucC0+c2N0cF9jbXRfb25fb2ZmOworCQkJCVNDVFBfSU5Q
X1JVTkxPQ0soaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9
IEVJTlZBTDsKKwkJCX0KKwkJfQorCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJKm9wdHNpemUgPSBz
aXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNl
IFNDVFBfUExVR0dBQkxFX0NDOgorCXsKKwkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2Owor
CisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFs
dWUsICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQp
OworCQlpZiAoc3RjYikgeworCQkJYXYtPmFzc29jX3ZhbHVlID0gc3RjYi0+YXNvYy5jb25nZXN0
aW9uX2NvbnRyb2xfbW9kdWxlOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2Ug
eworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAor
CQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAor
CQkJICAgICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkgJiYKKwkJ
CSAgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpKSB7CisJCQkJU0NUUF9J
TlBfUkxPQ0soaW5wKTsKKwkJCQlhdi0+YXNzb2NfdmFsdWUgPSBpbnAtPnNjdHBfZXAuc2N0cF9k
ZWZhdWx0X2NjX21vZHVsZTsKKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQl9IGVsc2Ug
eworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJaWYg
KGVycm9yID09IDApIHsKKwkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3Zh
bHVlKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0NDX09QVElPTjoKKwl7CisJCXN0
cnVjdCBzY3RwX2NjX29wdGlvbiAqY2Nfb3B0OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoY2Nf
b3B0LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2NjX29wdGlvbiwgKm9wdHNpemUpOworCQlTQ1RQX0ZJ
TkRfU1RDQihpbnAsIHN0Y2IsIGNjX29wdC0+YWlkX3ZhbHVlLmFzc29jX2lkKTsKKwkJaWYgKHN0
Y2IgPT0gTlVMTCkgeworCQkJZXJyb3IgPSBFSU5WQUw7CisJCX0gZWxzZSB7CisJCQlpZiAoc3Rj
Yi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9jd25kX3NvY2tldF9vcHRpb24gPT0gTlVMTCkgewor
CQkJCWVycm9yID0gRU5PVFNVUDsKKwkJCX0gZWxzZSB7CisJCQkJZXJyb3IgPSAoKnN0Y2ItPmFz
b2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF9zb2NrZXRfb3B0aW9uKShzdGNiLCAwLCBjY19vcHQp
OworCQkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NjX29wdGlvbik7CisJCQl9CisJ
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9Q
TFVHR0FCTEVfU1M6CisJeworCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7CisKKwkJU0NU
UF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgKm9w
dHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7CisJCWlm
IChzdGNiKSB7CisJCQlhdi0+YXNzb2NfdmFsdWUgPSBzdGNiLT5hc29jLnN0cmVhbV9zY2hlZHVs
aW5nX21vZHVsZTsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlm
ICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAo
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUpICYmCisJCQkgICAgIChh
di0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSkgeworCQkJCVNDVFBfSU5QX1JMT0NL
KGlucCk7CisJCQkJYXYtPmFzc29jX3ZhbHVlID0gaW5wLT5zY3RwX2VwLnNjdHBfZGVmYXVsdF9z
c19tb2R1bGU7CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfSBlbHNlIHsKKwkJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQl9CisJCWlmIChlcnJvciA9
PSAwKSB7CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7CisJ
CX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9TU19WQUxVRToKKwl7CisJCXN0cnVjdCBzY3Rw
X3N0cmVhbV92YWx1ZSAqYXY7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBz
dHJ1Y3Qgc2N0cF9zdHJlYW1fdmFsdWUsICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5w
LCBzdGNiLCBhdi0+YXNzb2NfaWQpOworCQlpZiAoc3RjYikgeworCQkJaWYgKChhdi0+c3RyZWFt
X2lkID49IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250KSB8fAorCQkJICAgIChzdGNiLT5hc29jLnNz
X2Z1bmN0aW9ucy5zY3RwX3NzX2dldF92YWx1ZShzdGNiLCAmc3RjYi0+YXNvYywgJnN0Y2ItPmFz
b2Muc3RybW91dFthdi0+c3RyZWFtX2lkXSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJmF2LT5zdHJlYW1fdmFsdWUpIDwgMCkpIHsKKwkJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
SU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJfSBlbHNlIHsKKwkJCQkqb3B0c2l6ZSA9
IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fdmFsdWUpOworCQkJfQorCQkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJLyogQ2FuJ3QgZ2V0IHN0cmVhbSB2YWx1ZSB3aXRo
b3V0IGFzc29jaWF0aW9uICovCisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJ
CX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9HRVRfQUREUl9MRU46CisJeworCQlzdHJ1Y3Qg
c2N0cF9hc3NvY192YWx1ZSAqYXY7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFs
LCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgKm9wdHNpemUpOworCQllcnJvciA9IEVJTlZBTDsK
KyNpZmRlZiBJTkVUCisJCWlmIChhdi0+YXNzb2NfdmFsdWUgPT0gQUZfSU5FVCkgeworCQkJYXYt
PmFzc29jX3ZhbHVlID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisJCQllcnJvciA9IDA7
CisJCX0KKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCWlmIChhdi0+YXNzb2NfdmFsdWUgPT0gQUZf
SU5FVDYpIHsKKwkJCWF2LT5hc3NvY192YWx1ZSA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42
KTsKKwkJCWVycm9yID0gMDsKKwkJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorCQlpZiAoYXYtPmFzc29jX3ZhbHVlID09IEFGX0NPTk4pIHsKKwkJCWF2LT5hc3NvY192YWx1
ZSA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7CisJCQllcnJvciA9IDA7CisJCX0KKyNl
bmRpZgorCQlpZiAoZXJyb3IpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJfSBlbHNlIHsKKwkJCSpvcHRz
aXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKTsKKwkJfQorCQlicmVhazsKKwl9
CisJY2FzZSBTQ1RQX0dFVF9BU1NPQ19OVU1CRVI6CisJeworCQl1aW50MzJfdCAqdmFsdWUsIGNu
dDsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHZhbHVlLCBvcHR2YWwsIHVpbnQzMl90LCAqb3B0
c2l6ZSk7CisJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19JTl9UQ1BQT09MKSkgeworCQkJLyogQ2FuJ3QgZG8gdGhpcyBmb3IgYSAxLTEg
c29ja2V0ICovCisJCQllcnJvciA9IEVJTlZBTDsKKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsK
KwkJCWJyZWFrOworCQl9CisJCWNudCA9IDA7CisJCUxJU1RfRk9SRUFDSChzdGNiLCAmaW5wLT5z
Y3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7CisJCQljbnQrKzsKKwkJfQorCQlTQ1RQX0lO
UF9SVU5MT0NLKGlucCk7CisJCSp2YWx1ZSA9IGNudDsKKwkJKm9wdHNpemUgPSBzaXplb2YodWlu
dDMyX3QpOworCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0dFVF9BU1NPQ19JRF9MSVNUOgorCXsK
KwkJc3RydWN0IHNjdHBfYXNzb2NfaWRzICppZHM7CisJCXVpbnQzMl90IGF0OworCQlzaXplX3Qg
bGltaXQ7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChpZHMsIG9wdHZhbCwgc3RydWN0IHNjdHBf
YXNzb2NfaWRzLCAqb3B0c2l6ZSk7CisJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCWlmICgoaW5w
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJICAgIChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSkgeworCQkJLyogQ2FuJ3QgZG8g
dGhpcyBmb3IgYSAxLTEgc29ja2V0ICovCisJCQllcnJvciA9IEVJTlZBTDsKKwkJCVNDVFBfSU5Q
X1JVTkxPQ0soaW5wKTsKKwkJCWJyZWFrOworCQl9CisJCWF0ID0gMDsKKwkJbGltaXQgPSAoKm9w
dHNpemUgLSBzaXplb2YodWludDMyX3QpKSAvIHNpemVvZihzY3RwX2Fzc29jX3QpOworCQlMSVNU
X0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlzdCkgeworCQkJ
aWYgKGF0IDwgbGltaXQpIHsKKwkJCQlpZHMtPmdhaWRzX2Fzc29jX2lkW2F0KytdID0gc2N0cF9n
ZXRfYXNzb2NpZChzdGNiKTsKKwkJCQlpZiAoYXQgPT0gMCkgeworCQkJCQllcnJvciA9IEVJTlZB
TDsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgZXJyb3IpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJ
CWVycm9yID0gRUlOVkFMOworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQor
CQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCWlmIChlcnJvciA9PSAwKSB7CisJCQlpZHMtPmdh
aWRzX251bWJlcl9vZl9pZHMgPSBhdDsKKwkJCSpvcHRzaXplID0gKChhdCAqIHNpemVvZihzY3Rw
X2Fzc29jX3QpKSArIHNpemVvZih1aW50MzJfdCkpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNl
IFNDVFBfQ09OVEVYVDoKKwl7CisJCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKKworCQlT
Q1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCAq
b3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKKwor
CQlpZiAoc3RjYikgeworCQkJYXYtPmFzc29jX3ZhbHVlID0gc3RjYi0+YXNvYy5jb250ZXh0Owor
CQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJICAgICgoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkgJiYKKwkJCSAgICAgKGF2LT5hc3NvY19pZCA9
PSBTQ1RQX0ZVVFVSRV9BU1NPQykpKSB7CisJCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQlh
di0+YXNzb2NfdmFsdWUgPSBpbnAtPnNjdHBfY29udGV4dDsKKwkJCQlTQ1RQX0lOUF9SVU5MT0NL
KGlucCk7CisJCQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7
CisJCQl9CisJCX0KKwkJaWYgKGVycm9yID09IDApIHsKKwkJCSpvcHRzaXplID0gc2l6ZW9mKHN0
cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX1ZS
Rl9JRDoKKwl7CisJCXVpbnQzMl90ICpkZWZhdWx0X3ZyZmlkOworCisJCVNDVFBfQ0hFQ0tfQU5E
X0NBU1QoZGVmYXVsdF92cmZpZCwgb3B0dmFsLCB1aW50MzJfdCwgKm9wdHNpemUpOworCQkqZGVm
YXVsdF92cmZpZCA9IGlucC0+ZGVmX3ZyZl9pZDsKKwkJKm9wdHNpemUgPSBzaXplb2YodWludDMy
X3QpOworCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0dFVF9BU09DX1ZSRjoKKwl7CisJCXN0cnVj
dCBzY3RwX2Fzc29jX3ZhbHVlICppZDsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGlkLCBvcHR2
YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCAqb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENC
KGlucCwgc3RjYiwgaWQtPmFzc29jX2lkKTsKKwkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJZXJy
b3IgPSBFSU5WQUw7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7CisJCX0gZWxzZSB7CisJCQlpZC0+YXNzb2NfdmFs
dWUgPSBzdGNiLT5hc29jLnZyZl9pZDsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCSpv
cHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKTsKKwkJfQorCQlicmVhazsK
Kwl9CisJY2FzZSBTQ1RQX0dFVF9WUkZfSURTOgorCXsKKyNpZmRlZiBTQ1RQX01WUkYKKwkJaW50
IHNpel9uZWVkZWQ7CisJCXVpbnQzMl90ICp2cmZfaWRzOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NB
U1QodnJmX2lkcywgb3B0dmFsLCB1aW50MzJfdCwgKm9wdHNpemUpOworCQlzaXpfbmVlZGVkID0g
aW5wLT5udW1fdnJmcyAqIHNpemVvZih1aW50MzJfdCk7CisJCWlmICgqb3B0c2l6ZSA8IHNpel9u
ZWVkZWQpIHsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOworCQl9IGVsc2Ugewor
CQkJbWVtY3B5KHZyZl9pZHMsIGlucC0+bV92cmZfaWRzLCBzaXpfbmVlZGVkKTsKKwkJCSpvcHRz
aXplID0gc2l6X25lZWRlZDsKKwkJfQorI2Vsc2UKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU9QTk9UU1VQUCk7CisJCWVycm9y
ID0gRU9QTk9UU1VQUDsKKyNlbmRpZgorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0dFVF9OT05D
RV9WQUxVRVM6CisJeworCQlzdHJ1Y3Qgc2N0cF9nZXRfbm9uY2VfdmFsdWVzICpnbnY7CisKKwkJ
U0NUUF9DSEVDS19BTkRfQ0FTVChnbnYsIG9wdHZhbCwgc3RydWN0IHNjdHBfZ2V0X25vbmNlX3Zh
bHVlcywgKm9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGdudi0+Z25fYXNz
b2NfaWQpOworCisJCWlmIChzdGNiKSB7CisJCQlnbnYtPmduX3BlZXJzX3RhZyA9IHN0Y2ItPmFz
b2MucGVlcl92dGFnOworCQkJZ252LT5nbl9sb2NhbF90YWcgPSBzdGNiLT5hc29jLm15X3Z0YWc7
CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qg
c2N0cF9nZXRfbm9uY2VfdmFsdWVzKTsKKwkJfSBlbHNlIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT1RDT05OKTsKKwkJ
CWVycm9yID0gRU5PVENPTk47CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9ERUxBWUVE
X1NBQ0s6CisJeworCQlzdHJ1Y3Qgc2N0cF9zYWNrX2luZm8gKnNhY2s7CisKKwkJU0NUUF9DSEVD
S19BTkRfQ0FTVChzYWNrLCBvcHR2YWwsIHN0cnVjdCBzY3RwX3NhY2tfaW5mbywgKm9wdHNpemUp
OworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHNhY2stPnNhY2tfYXNzb2NfaWQpOworCQlp
ZiAoc3RjYikgeworCQkJc2Fjay0+c2Fja19kZWxheSA9IHN0Y2ItPmFzb2MuZGVsYXllZF9hY2s7
CisJCQlzYWNrLT5zYWNrX2ZyZXEgPSBzdGNiLT5hc29jLnNhY2tfZnJlcTsKKwkJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX1VEUFRZUEUpICYmCisJCQkgICAgIChzYWNrLT5zYWNrX2Fzc29jX2lkID09IFND
VFBfRlVUVVJFX0FTU09DKSkpIHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJCXNhY2st
PnNhY2tfZGVsYXkgPSBzY3RwX3RpY2tzX3RvX21zZWNzKGlucC0+c2N0cF9lcC5zY3RwX3RpbWVv
dXR0aWNrc1tTQ1RQX1RJTUVSX1JFQ1ZdKTsKKwkJCQlzYWNrLT5zYWNrX2ZyZXEgPSBpbnAtPnNj
dHBfZXAuc2N0cF9zYWNrX2ZyZXE7CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfSBl
bHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQl9CisJ
CWlmIChlcnJvciA9PSAwKSB7CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zYWNr
X2luZm8pOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfR0VUX1NOREJVRl9VU0U6CisJ
eworCQlzdHJ1Y3Qgc2N0cF9zb2Nrc3RhdCAqc3M7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChz
cywgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9zb2Nrc3RhdCwgKm9wdHNpemUpOworCQlTQ1RQX0ZJTkRf
U1RDQihpbnAsIHN0Y2IsIHNzLT5zc19hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCXNz
LT5zc190b3RhbF9zbmRidWYgPSBzdGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplOwor
CQkJc3MtPnNzX3RvdGFsX3JlY3ZfYnVmID0gKHN0Y2ItPmFzb2Muc2l6ZV9vbl9yZWFzbV9xdWV1
ZSArCisJCQkJCQkgc3RjYi0+YXNvYy5zaXplX29uX2FsbF9zdHJlYW1zKTsKKwkJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKKwkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3NvY2tzdGF0
KTsKKwkJfSBlbHNlIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT1RDT05OKTsKKwkJCWVycm9yID0gRU5PVENPTk47CisJ
CX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9NQVhfQlVSU1Q6CisJeworCQlzdHJ1Y3Qgc2N0
cF9hc3NvY192YWx1ZSAqYXY7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBz
dHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgKm9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAs
IHN0Y2IsIGF2LT5hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCWF2LT5hc3NvY192YWx1
ZSA9IHN0Y2ItPmFzb2MubWF4X2J1cnN0OworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9
IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBF
KSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09M
KSB8fAorCQkJICAgICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkg
JiYKKwkJCSAgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpKSB7CisJCQkJ
U0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQlhdi0+YXNzb2NfdmFsdWUgPSBpbnAtPnNjdHBfZXAu
bWF4X2J1cnN0OworCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJF
USwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJfQorCQlpZiAoZXJyb3Ig
PT0gMCkgeworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpOwor
CQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfTUFYU0VHOgorCXsKKwkJc3RydWN0IHNjdHBf
YXNzb2NfdmFsdWUgKmF2OworCQlpbnQgb3ZoOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYs
IG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsICpvcHRzaXplKTsKKwkJU0NUUF9GSU5E
X1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOworCisJCWlmIChzdGNiKSB7CisJCQlhdi0+
YXNzb2NfdmFsdWUgPSBzY3RwX2dldF9mcmFnX3BvaW50KHN0Y2IsICZzdGNiLT5hc29jKTsKKwkJ
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUpICYmCisJCQkgICAgIChhdi0+YXNzb2NfaWQgPT0g
U0NUUF9GVVRVUkVfQVNTT0MpKSkgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJaWYg
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSB7CisJCQkJCW92aCA9
IFNDVFBfTUVEX09WRVJIRUFEOworCQkJCX0gZWxzZSB7CisJCQkJCW92aCA9IFNDVFBfTUVEX1Y0
X09WRVJIRUFEOworCQkJCX0KKwkJCQlpZiAoaW5wLT5zY3RwX2ZyYWdfcG9pbnQgPj0gU0NUUF9E
RUZBVUxUX01BWFNFR01FTlQpCisJCQkJCWF2LT5hc3NvY192YWx1ZSA9IDA7CisJCQkJZWxzZQor
CQkJCQlhdi0+YXNzb2NfdmFsdWUgPSBpbnAtPnNjdHBfZnJhZ19wb2ludCAtIG92aDsKKwkJCQlT
Q1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJ
ZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJaWYgKGVycm9yID09IDApIHsKKwkJCSpvcHRz
aXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKTsKKwkJfQorCQlicmVhazsKKwl9
CisJY2FzZSBTQ1RQX0dFVF9TVEFUX0xPRzoKKwkJZXJyb3IgPSBzY3RwX2ZpbGxfc3RhdF9sb2co
b3B0dmFsLCBvcHRzaXplKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0VWRU5UUzoKKwl7CisJCXN0
cnVjdCBzY3RwX2V2ZW50X3N1YnNjcmliZSAqZXZlbnRzOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NB
U1QoZXZlbnRzLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2V2ZW50X3N1YnNjcmliZSwgKm9wdHNpemUp
OworCQltZW1zZXQoZXZlbnRzLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfZXZlbnRfc3Vic2NyaWJl
KSk7CisJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5w
LCBTQ1RQX1BDQl9GTEFHU19SRUNWREFUQUlPRVZOVCkpCisJCQlldmVudHMtPnNjdHBfZGF0YV9p
b19ldmVudCA9IDE7CisKKwkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZM
QUdTX1JFQ1ZBU1NPQ0VWTlQpKQorCQkJZXZlbnRzLT5zY3RwX2Fzc29jaWF0aW9uX2V2ZW50ID0g
MTsKKworCQlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVlBB
RERSRVZOVCkpCisJCQlldmVudHMtPnNjdHBfYWRkcmVzc19ldmVudCA9IDE7CisKKwkJaWYgKHNj
dHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZTRU5ERkFJTEVWTlQpKQor
CQkJZXZlbnRzLT5zY3RwX3NlbmRfZmFpbHVyZV9ldmVudCA9IDE7CisKKwkJaWYgKHNjdHBfaXNf
ZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZQRUVSRVJSKSkKKwkJCWV2ZW50cy0+
c2N0cF9wZWVyX2Vycm9yX2V2ZW50ID0gMTsKKworCQlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlu
cCwgU0NUUF9QQ0JfRkxBR1NfUkVDVlNIVVRET1dORVZOVCkpCisJCQlldmVudHMtPnNjdHBfc2h1
dGRvd25fZXZlbnQgPSAxOworCisJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BD
Ql9GTEFHU19QREFQSUVWTlQpKQorCQkJZXZlbnRzLT5zY3RwX3BhcnRpYWxfZGVsaXZlcnlfZXZl
bnQgPSAxOworCisJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19B
REFQVEFUSU9ORVZOVCkpCisJCQlldmVudHMtPnNjdHBfYWRhcHRhdGlvbl9sYXllcl9ldmVudCA9
IDE7CisKKwkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0FVVEhF
Vk5UKSkKKwkJCWV2ZW50cy0+c2N0cF9hdXRoZW50aWNhdGlvbl9ldmVudCA9IDE7CisKKwkJaWYg
KHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0RSWUVWTlQpKQorCQkJZXZl
bnRzLT5zY3RwX3NlbmRlcl9kcnlfZXZlbnQgPSAxOworCisJCWlmIChzY3RwX2lzX2ZlYXR1cmVf
b24oaW5wLCBTQ1RQX1BDQl9GTEFHU19TVFJFQU1fUkVTRVRFVk5UKSkKKwkJCWV2ZW50cy0+c2N0
cF9zdHJlYW1fcmVzZXRfZXZlbnQgPSAxOworCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCSpv
cHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2V2ZW50X3N1YnNjcmliZSk7CisJCWJyZWFrOwor
CX0KKwljYXNlIFNDVFBfQURBUFRBVElPTl9MQVlFUjoKKwl7CisJCXVpbnQzMl90ICp2YWx1ZTsK
KworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHZhbHVlLCBvcHR2YWwsIHVpbnQzMl90LCAqb3B0c2l6
ZSk7CisKKwkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJKnZhbHVlID0gaW5wLT5zY3RwX2VwLmFk
YXB0YXRpb25fbGF5ZXJfaW5kaWNhdG9yOworCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCSpv
cHRzaXplID0gc2l6ZW9mKHVpbnQzMl90KTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9TRVRf
SU5JVElBTF9EQkdfU0VROgorCXsKKwkJdWludDMyX3QgKnZhbHVlOworCisJCVNDVFBfQ0hFQ0tf
QU5EX0NBU1QodmFsdWUsIG9wdHZhbCwgdWludDMyX3QsICpvcHRzaXplKTsKKwkJU0NUUF9JTlBf
UkxPQ0soaW5wKTsKKwkJKnZhbHVlID0gaW5wLT5zY3RwX2VwLmluaXRpYWxfc2VxdWVuY2VfZGVi
dWc7CisJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJKm9wdHNpemUgPSBzaXplb2YodWludDMy
X3QpOworCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0dFVF9MT0NBTF9BRERSX1NJWkU6CisJewor
CQl1aW50MzJfdCAqdmFsdWU7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVCh2YWx1ZSwgb3B0dmFs
LCB1aW50MzJfdCwgKm9wdHNpemUpOworCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkqdmFsdWUg
PSBzY3RwX2NvdW50X21heF9hZGRyZXNzZXMoaW5wKTsKKwkJU0NUUF9JTlBfUlVOTE9DSyhpbnAp
OworCQkqb3B0c2l6ZSA9IHNpemVvZih1aW50MzJfdCk7CisJCWJyZWFrOworCX0KKwljYXNlIFND
VFBfR0VUX1JFTU9URV9BRERSX1NJWkU6CisJeworCQl1aW50MzJfdCAqdmFsdWU7CisJCXNpemVf
dCBzaXplOworCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FT
VCh2YWx1ZSwgb3B0dmFsLCB1aW50MzJfdCwgKm9wdHNpemUpOworCQkvKiBGSVhNRSBNVDogY2hh
bmdlIHRvIHNjdHBfYXNzb2NfdmFsdWU/ICovCisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwg
KHNjdHBfYXNzb2NfdCkgKnZhbHVlKTsKKworCQlpZiAoc3RjYikgeworCQkJc2l6ZSA9IDA7CisJ
CQkvKiBDb3VudCB0aGUgc2l6ZXMgKi8KKwkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNv
Yy5uZXRzLCBzY3RwX25leHQpIHsKKwkJCQlzd2l0Y2ggKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9m
YW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQkJY2FzZSBBRl9JTkVUOgorI2lmZGVmIElORVQ2CisJ
CQkJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19ORUVEU19NQVBQ
RURfVjQpKSB7CisJCQkJCQlzaXplICs9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKwkJ
CQkJfSBlbHNlIHsKKwkJCQkJCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisJ
CQkJCX0KKyNlbHNlCisJCQkJCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Cisj
ZW5kaWYKKwkJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJCWNhc2UgQUZfSU5F
VDY6CisJCQkJCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQkJCQlicmVh
azsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQljYXNlIEFGX0NPTk46
CisJCQkJCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKwkJCQkJYnJlYWs7
CisjZW5kaWYKKwkJCQlkZWZhdWx0OgorCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7CisJCQkqdmFsdWUgPSAodWludDMyX3QpIHNpemU7CisJCQkqb3B0
c2l6ZSA9IHNpemVvZih1aW50MzJfdCk7CisJCX0gZWxzZSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9UQ09OTik7CisJ
CQllcnJvciA9IEVOT1RDT05OOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfR0VUX1BF
RVJfQUREUkVTU0VTOgorCQkvKgorCQkgKiBHZXQgdGhlIGFkZHJlc3MgaW5mb3JtYXRpb24sIGFu
IGFycmF5IGlzIHBhc3NlZCBpbiB0bworCQkgKiBmaWxsIHVwIHdlIHBhY2sgaXQuCisJCSAqLwor
CXsKKwkJc2l6ZV90IGNwc3osIGxlZnQ7CisJCXN0cnVjdCBzb2NrYWRkciAqYWRkcjsKKwkJc3Ry
dWN0IHNjdHBfbmV0cyAqbmV0OworCQlzdHJ1Y3Qgc2N0cF9nZXRhZGRyZXNzZXMgKnNhZGRyOwor
CisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc2FkZHIsIG9wdHZhbCwgc3RydWN0IHNjdHBfZ2V0YWRk
cmVzc2VzLCAqb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgc2FkZHItPnNn
ZXRfYXNzb2NfaWQpOworCisJCWlmIChzdGNiKSB7CisJCQlsZWZ0ID0gKm9wdHNpemUgLSBvZmZz
ZXRvZihzdHJ1Y3Qgc2N0cF9nZXRhZGRyZXNzZXMsIGFkZHIpOworCQkJKm9wdHNpemUgPSBvZmZz
ZXRvZihzdHJ1Y3Qgc2N0cF9nZXRhZGRyZXNzZXMsIGFkZHIpOworCQkJYWRkciA9ICZzYWRkci0+
YWRkclswXS5zYTsKKworCQkJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNj
dHBfbmV4dCkgeworCQkJCXN3aXRjaCAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSkgewor
I2lmZGVmIElORVQKKwkJCQljYXNlIEFGX0lORVQ6CisjaWZkZWYgSU5FVDYKKwkJCQkJaWYgKHNj
dHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX05FRURTX01BUFBFRF9WNCkpIHsK
KwkJCQkJCWNwc3ogPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJCQkJCX0gZWxzZSB7
CisJCQkJCQljcHN6ID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisJCQkJCX0KKyNlbHNl
CisJCQkJCWNwc3ogPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCQkJCQli
cmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQkJY3Bz
eiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKwkJCQkJYnJlYWs7CisjZW5kaWYKKyNp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJY2FzZSBBRl9DT05OOgorCQkJCQljcHN6ID0g
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKwkJCQkJYnJlYWs7CisjZW5kaWYKKwkJCQlk
ZWZhdWx0OgorCQkJCQljcHN6ID0gMDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChjcHN6
ID09IDApIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChsZWZ0IDwgY3BzeikgeworCQkJ
CQkvKiBub3QgZW5vdWdoIHJvb20uICovCisJCQkJCWJyZWFrOworCQkJCX0KKyNpZiBkZWZpbmVk
KElORVQpICYmIGRlZmluZWQoSU5FVDYpCisJCQkJaWYgKChzY3RwX2lzX2ZlYXR1cmVfb24oaW5w
LCBTQ1RQX1BDQl9GTEFHU19ORUVEU19NQVBQRURfVjQpKSAmJgorCQkJCSAgICAobmV0LT5yby5f
bF9hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSkgeworCQkJCQkvKiBNdXN0IG1hcCB0aGUg
YWRkcmVzcyAqLworCQkJCQlpbjZfc2luXzJfdjRtYXBzaW42KCZuZXQtPnJvLl9sX2FkZHIuc2lu
LAorCQkJCQkgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcik7
CisJCQkJfSBlbHNlIHsKKwkJCQkJbWVtY3B5KGFkZHIsICZuZXQtPnJvLl9sX2FkZHIsIGNwc3op
OworCQkJCX0KKyNlbHNlCisJCQkJbWVtY3B5KGFkZHIsICZuZXQtPnJvLl9sX2FkZHIsIGNwc3op
OworI2VuZGlmCisJCQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyKS0+c2luX3BvcnQgPSBz
dGNiLT5ycG9ydDsKKworCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KWFk
ZHIgKyBjcHN6KTsKKwkJCQlsZWZ0IC09IGNwc3o7CisJCQkJKm9wdHNpemUgKz0gY3BzejsKKwkJ
CX0KKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT0VOVCk7
CisJCQllcnJvciA9IEVOT0VOVDsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0dFVF9M
T0NBTF9BRERSRVNTRVM6CisJeworCQlzaXplX3QgbGltaXQsIGFjdHVhbDsKKwkJc3RydWN0IHNj
dHBfZ2V0YWRkcmVzc2VzICpzYWRkcjsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNhZGRyLCBv
cHR2YWwsIHN0cnVjdCBzY3RwX2dldGFkZHJlc3NlcywgKm9wdHNpemUpOworCQlTQ1RQX0ZJTkRf
U1RDQihpbnAsIHN0Y2IsIHNhZGRyLT5zZ2V0X2Fzc29jX2lkKTsKKworCQlsaW1pdCA9ICpvcHRz
aXplIC0gb2Zmc2V0b2Yoc3RydWN0IHNjdHBfZ2V0YWRkcmVzc2VzLCBhZGRyKTsKKwkJYWN0dWFs
ID0gc2N0cF9maWxsX3VwX2FkZHJlc3NlcyhpbnAsIHN0Y2IsIGxpbWl0LCAmc2FkZHItPmFkZHJb
MF0uc2EpOworCQlpZiAoc3RjYikgeworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9CisJ
CSpvcHRzaXplID0gb2Zmc2V0b2Yoc3RydWN0IHNjdHBfZ2V0YWRkcmVzc2VzLCBhZGRyKSArIGFj
dHVhbDsKKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9QRUVSX0FERFJfUEFSQU1TOgorCXsKKwkJ
c3RydWN0IHNjdHBfcGFkZHJwYXJhbXMgKnBhZGRycDsKKwkJc3RydWN0IHNjdHBfbmV0cyAqbmV0
OworCQlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHI7CisjaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVk
KElORVQ2KQorCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luX3N0b3JlOworI2VuZGlmCisKKwkJU0NU
UF9DSEVDS19BTkRfQ0FTVChwYWRkcnAsIG9wdHZhbCwgc3RydWN0IHNjdHBfcGFkZHJwYXJhbXMs
ICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBwYWRkcnAtPnNwcF9hc3Nv
Y19pZCk7CisKKyNpZiBkZWZpbmVkKElORVQpICYmIGRlZmluZWQoSU5FVDYpCisJCWlmIChwYWRk
cnAtPnNwcF9hZGRyZXNzLnNzX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJc3RydWN0IHNvY2th
ZGRyX2luNiAqc2luNjsKKworCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJnBhZGRy
cC0+c3BwX2FkZHJlc3M7CisJCQlpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJnNpbjYtPnNpbjZf
YWRkcikpIHsKKwkJCQlpbjZfc2luNl8yX3Npbigmc2luX3N0b3JlLCBzaW42KTsKKwkJCQlhZGRy
ID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fc3RvcmU7CisJCQl9IGVsc2UgeworCQkJCWFkZHIg
PSAoc3RydWN0IHNvY2thZGRyICopJnBhZGRycC0+c3BwX2FkZHJlc3M7CisJCQl9CisJCX0gZWxz
ZSB7CisJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZwYWRkcnAtPnNwcF9hZGRyZXNzOwor
CQl9CisjZWxzZQorCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZwYWRkcnAtPnNwcF9hZGRy
ZXNzOworI2VuZGlmCisJCWlmIChzdGNiICE9IE5VTEwpIHsKKwkJCW5ldCA9IHNjdHBfZmluZG5l
dChzdGNiLCBhZGRyKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFdlIGluY3JlbWVudCBoZXJlIHNpbmNl
IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoKSB3aWwKKwkJCSAqIGRvIGEgZGVjcmVtZW50
IGlmIGl0IGZpbmRzIHRoZSBzdGNiIGFzIGxvbmcgYXMgdGhlIGxvY2tlZAorCQkJICogdGNiIChs
YXN0IGFyZ3VtZW50KSBpcyBOT1QgYSBUQ0IuLiBha2EgTlVMTC4KKwkJCSAqLworCQkJbmV0ID0g
TlVMTDsKKwkJCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7CisJCQlzdGNiID0gc2N0cF9maW5kYXNz
b2NpYXRpb25fZXBfYWRkcigmaW5wLCBhZGRyLCAmbmV0LCBOVUxMLCBOVUxMKTsKKwkJCWlmIChz
dGNiID09IE5VTEwpIHsKKwkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCQkJfQorCQl9CisJ
CWlmICgoc3RjYiAhPSBOVUxMKSAmJiAobmV0ID09IE5VTEwpKSB7CisjaWZkZWYgSU5FVAorCQkJ
aWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCQkJc3RydWN0IHNvY2thZGRyX2lu
ICpzaW47CisKKwkJCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcjsKKwkJCQlpZiAo
c2luLT5zaW5fYWRkci5zX2FkZHIgIT0gSU5BRERSX0FOWSkgeworCQkJCQllcnJvciA9IEVJTlZB
TDsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7CisJCQkJCWJy
ZWFrOworCQkJCX0KKwkJCX0gZWxzZQorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWlmIChhZGRy
LT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42
OworCisJCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKKwkJCQlpZiAoIUlO
Nl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQkJCWVycm9yID0g
RUlOVkFMOworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJ
CQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisJCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0NPTk4pIHsKKwkJCQlzdHJ1Y3Qg
c29ja2FkZHJfY29ubiAqc2Nvbm47CisKKwkJCQlzY29ubiA9IChzdHJ1Y3Qgc29ja2FkZHJfY29u
biAqKWFkZHI7CisJCQkJaWYgKHNjb25uLT5zY29ubl9hZGRyICE9IE5VTEwpIHsKKwkJCQkJZXJy
b3IgPSBFSU5WQUw7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3Ip
OworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UKKyNlbmRpZgorCQkJeworCQkJCWVycm9y
ID0gRUFGTk9TVVBQT1JUOworCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJv
cik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCQkv
KiBBcHBsaWVzIHRvIHRoZSBzcGVjaWZpYyBhc3NvY2lhdGlvbiAqLworCQkJcGFkZHJwLT5zcHBf
ZmxhZ3MgPSAwOworCQkJaWYgKG5ldCAhPSBOVUxMKSB7CisJCQkJcGFkZHJwLT5zcHBfaGJpbnRl
cnZhbCA9IG5ldC0+aGVhcnRfYmVhdF9kZWxheTsKKwkJCQlwYWRkcnAtPnNwcF9wYXRobWF4cnh0
ID0gbmV0LT5mYWlsdXJlX3RocmVzaG9sZDsKKwkJCQlwYWRkcnAtPnNwcF9wYXRobXR1ID0gbmV0
LT5tdHU7CisJCQkJc3dpdGNoIChuZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5KSB7CisjaWZk
ZWYgSU5FVAorCQkJCWNhc2UgQUZfSU5FVDoKKwkJCQkJcGFkZHJwLT5zcHBfcGF0aG10dSAtPSBT
Q1RQX01JTl9WNF9PVkVSSEVBRDsKKwkJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgor
CQkJCWNhc2UgQUZfSU5FVDY6CisJCQkJCXBhZGRycC0+c3BwX3BhdGhtdHUgLT0gU0NUUF9NSU5f
T1ZFUkhFQUQ7CisJCQkJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorCQkJCWNhc2UgQUZfQ09OTjoKKwkJCQkJcGFkZHJwLT5zcHBfcGF0aG10dSAtPSBzaXplb2Yo
c3RydWN0IHNjdHBoZHIpOworCQkJCQlicmVhazsKKyNlbmRpZgorCQkJCWRlZmF1bHQ6CisJCQkJ
CWJyZWFrOworCQkJCX0KKwkJCQkvKiBnZXQgZmxhZ3MgZm9yIEhCICovCisJCQkJaWYgKG5ldC0+
ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9OT0hCKSB7CisJCQkJCXBhZGRycC0+c3BwX2ZsYWdzIHw9
IFNQUF9IQl9ESVNBQkxFOworCQkJCX0gZWxzZSB7CisJCQkJCXBhZGRycC0+c3BwX2ZsYWdzIHw9
IFNQUF9IQl9FTkFCTEU7CisJCQkJfQorCQkJCS8qIGdldCBmbGFncyBmb3IgUE1UVSAqLworCQkJ
CWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfTk9fUE1UVUQpIHsKKwkJCQkJcGFkZHJw
LT5zcHBfZmxhZ3MgfD0gU1BQX1BNVFVEX0RJU0FCTEU7CisJCQkJfSBlbHNlIHsKKwkJCQkJcGFk
ZHJwLT5zcHBfZmxhZ3MgfD0gU1BQX1BNVFVEX0VOQUJMRTsKKwkJCQl9CisJCQkJaWYgKG5ldC0+
ZHNjcCAmIDB4MDEpIHsKKwkJCQkJcGFkZHJwLT5zcHBfZHNjcCA9IG5ldC0+ZHNjcCAmIDB4ZmM7
CisJCQkJCXBhZGRycC0+c3BwX2ZsYWdzIHw9IFNQUF9EU0NQOworCQkJCX0KKyNpZmRlZiBJTkVU
NgorCQkJCWlmICgobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgJiYK
KwkJCQkgICAgKG5ldC0+Zmxvd2xhYmVsICYgMHg4MDAwMDAwMCkpIHsKKwkJCQkJcGFkZHJwLT5z
cHBfaXB2Nl9mbG93bGFiZWwgPSBuZXQtPmZsb3dsYWJlbCAmIDB4MDAwZmZmZmY7CisJCQkJCXBh
ZGRycC0+c3BwX2ZsYWdzIHw9IFNQUF9JUFY2X0ZMT1dMQUJFTDsKKwkJCQl9CisjZW5kaWYKKwkJ
CX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBObyBkZXN0aW5hdGlvbiBzbyByZXR1cm4gZGVmYXVs
dAorCQkJCSAqIHZhbHVlCisJCQkJICovCisJCQkJcGFkZHJwLT5zcHBfcGF0aG1heHJ4dCA9IHN0
Y2ItPmFzb2MuZGVmX25ldF9mYWlsdXJlOworCQkJCXBhZGRycC0+c3BwX3BhdGhtdHUgPSBzdGNi
LT5hc29jLmRlZmF1bHRfbXR1OworCQkJCWlmIChzdGNiLT5hc29jLmRlZmF1bHRfZHNjcCAmIDB4
MDEpIHsKKwkJCQkJcGFkZHJwLT5zcHBfZHNjcCA9IHN0Y2ItPmFzb2MuZGVmYXVsdF9kc2NwICYg
MHhmYzsKKwkJCQkJcGFkZHJwLT5zcHBfZmxhZ3MgfD0gU1BQX0RTQ1A7CisJCQkJfQorI2lmZGVm
IElORVQ2CisJCQkJaWYgKHN0Y2ItPmFzb2MuZGVmYXVsdF9mbG93bGFiZWwgJiAweDgwMDAwMDAw
KSB7CisJCQkJCXBhZGRycC0+c3BwX2lwdjZfZmxvd2xhYmVsID0gc3RjYi0+YXNvYy5kZWZhdWx0
X2Zsb3dsYWJlbCAmIDB4MDAwZmZmZmY7CisJCQkJCXBhZGRycC0+c3BwX2ZsYWdzIHw9IFNQUF9J
UFY2X0ZMT1dMQUJFTDsKKwkJCQl9CisjZW5kaWYKKwkJCQkvKiBkZWZhdWx0IHNldHRpbmdzIHNo
b3VsZCBiZSB0aGVzZSAqLworCQkJCWlmIChzY3RwX3N0Y2JfaXNfZmVhdHVyZV9vbihpbnAsIHN0
Y2IsIFNDVFBfUENCX0ZMQUdTX0RPTk9UX0hFQVJUQkVBVCkpIHsKKwkJCQkJcGFkZHJwLT5zcHBf
ZmxhZ3MgfD0gU1BQX0hCX0RJU0FCTEU7CisJCQkJfSBlbHNlIHsKKwkJCQkJcGFkZHJwLT5zcHBf
ZmxhZ3MgfD0gU1BQX0hCX0VOQUJMRTsKKwkJCQl9CisJCQkJaWYgKHNjdHBfc3RjYl9pc19mZWF0
dXJlX29uKGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfRE9fTk9UX1BNVFVEKSkgeworCQkJCQlw
YWRkcnAtPnNwcF9mbGFncyB8PSBTUFBfUE1UVURfRElTQUJMRTsKKwkJCQl9IGVsc2UgeworCQkJ
CQlwYWRkcnAtPnNwcF9mbGFncyB8PSBTUFBfUE1UVURfRU5BQkxFOworCQkJCX0KKwkJCQlwYWRk
cnAtPnNwcF9oYmludGVydmFsID0gc3RjYi0+YXNvYy5oZWFydF9iZWF0X2RlbGF5OworCQkJfQor
CQkJcGFkZHJwLT5zcHBfYXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOworCQkJU0NU
UF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJICAgICgoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkgJiYKKwkJCSAgICAgKHBhZGRycC0+c3BwX2Fzc29jX2lk
ID09IFNDVFBfRlVUVVJFX0FTU09DKSkpIHsKKwkJCQkvKiBVc2UgZW5kcG9pbnQgZGVmYXVsdHMg
Ki8KKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJCXBhZGRycC0+c3BwX3BhdGhtYXhyeHQg
PSBpbnAtPnNjdHBfZXAuZGVmX25ldF9mYWlsdXJlOworCQkJCXBhZGRycC0+c3BwX2hiaW50ZXJ2
YWwgPSBzY3RwX3RpY2tzX3RvX21zZWNzKGlucC0+c2N0cF9lcC5zY3RwX3RpbWVvdXR0aWNrc1tT
Q1RQX1RJTUVSX0hFQVJUQkVBVF0pOworCQkJCXBhZGRycC0+c3BwX2Fzc29jX2lkID0gU0NUUF9G
VVRVUkVfQVNTT0M7CisJCQkJLyogZ2V0IGlucCdzIGRlZmF1bHQgKi8KKwkJCQlpZiAoaW5wLT5z
Y3RwX2VwLmRlZmF1bHRfZHNjcCAmIDB4MDEpIHsKKwkJCQkJcGFkZHJwLT5zcHBfZHNjcCA9IGlu
cC0+c2N0cF9lcC5kZWZhdWx0X2RzY3AgJiAweGZjOworCQkJCQlwYWRkcnAtPnNwcF9mbGFncyB8
PSBTUFBfRFNDUDsKKwkJCQl9CisjaWZkZWYgSU5FVDYKKwkJCQlpZiAoKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSAmJgorCQkJCSAgICAoaW5wLT5zY3RwX2VwLmRl
ZmF1bHRfZmxvd2xhYmVsICYgMHg4MDAwMDAwMCkpIHsKKwkJCQkJcGFkZHJwLT5zcHBfaXB2Nl9m
bG93bGFiZWwgPSBpbnAtPnNjdHBfZXAuZGVmYXVsdF9mbG93bGFiZWwgJiAweDAwMGZmZmZmOwor
CQkJCQlwYWRkcnAtPnNwcF9mbGFncyB8PSBTUFBfSVBWNl9GTE9XTEFCRUw7CisJCQkJfQorI2Vu
ZGlmCisJCQkJcGFkZHJwLT5zcHBfcGF0aG10dSA9IGlucC0+c2N0cF9lcC5kZWZhdWx0X210dTsK
KworCQkJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfRE9OT1Rf
SEVBUlRCRUFUKSkgeworCQkJCQlwYWRkcnAtPnNwcF9mbGFncyB8PSBTUFBfSEJfRU5BQkxFOwor
CQkJCX0gZWxzZSB7CisJCQkJCXBhZGRycC0+c3BwX2ZsYWdzIHw9IFNQUF9IQl9ESVNBQkxFOwor
CQkJCX0KKwkJCQlpZiAoc2N0cF9pc19mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX0RP
X05PVF9QTVRVRCkpIHsKKwkJCQkJcGFkZHJwLT5zcHBfZmxhZ3MgfD0gU1BQX1BNVFVEX0VOQUJM
RTsKKwkJCQl9IGVsc2UgeworCQkJCQlwYWRkcnAtPnNwcF9mbGFncyB8PSBTUFBfUE1UVURfRElT
QUJMRTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfSBlbHNlIHsKKwkJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQl9CisJCWlmIChlcnJv
ciA9PSAwKSB7CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcyk7
CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9HRVRfUEVFUl9BRERSX0lORk86CisJewor
CQlzdHJ1Y3Qgc2N0cF9wYWRkcmluZm8gKnBhZGRyaTsKKwkJc3RydWN0IHNjdHBfbmV0cyAqbmV0
OworCQlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHI7CisjaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVk
KElORVQ2KQorCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luX3N0b3JlOworI2VuZGlmCisKKwkJU0NU
UF9DSEVDS19BTkRfQ0FTVChwYWRkcmksIG9wdHZhbCwgc3RydWN0IHNjdHBfcGFkZHJpbmZvLCAq
b3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgcGFkZHJpLT5zcGluZm9fYXNz
b2NfaWQpOworCisjaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2KQorCQlpZiAocGFk
ZHJpLT5zcGluZm9fYWRkcmVzcy5zc19mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCXN0cnVjdCBz
b2NrYWRkcl9pbjYgKnNpbjY7CisKKwkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZw
YWRkcmktPnNwaW5mb19hZGRyZXNzOworCQkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42
LT5zaW42X2FkZHIpKSB7CisJCQkJaW42X3NpbjZfMl9zaW4oJnNpbl9zdG9yZSwgc2luNik7CisJ
CQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luX3N0b3JlOworCQkJfSBlbHNlIHsKKwkJ
CQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZwYWRkcmktPnNwaW5mb19hZGRyZXNzOworCQkJ
fQorCQl9IGVsc2UgeworCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmcGFkZHJpLT5zcGlu
Zm9fYWRkcmVzczsKKwkJfQorI2Vsc2UKKwkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmcGFk
ZHJpLT5zcGluZm9fYWRkcmVzczsKKyNlbmRpZgorCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCQlu
ZXQgPSBzY3RwX2ZpbmRuZXQoc3RjYiwgYWRkcik7CisJCX0gZWxzZSB7CisJCQkvKiBXZSBpbmNy
ZW1lbnQgaGVyZSBzaW5jZSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKCkgd2lsCisJCQkg
KiBkbyBhIGRlY3JlbWVudCBpZiBpdCBmaW5kcyB0aGUgc3RjYiBhcyBsb25nIGFzIHRoZSBsb2Nr
ZWQKKwkJCSAqIHRjYiAobGFzdCBhcmd1bWVudCkgaXMgTk9UIGEgVENCLi4gYWthIE5VTEwuCisJ
CQkgKi8KKwkJCW5ldCA9IE5VTEw7CisJCQlTQ1RQX0lOUF9JTkNSX1JFRihpbnApOworCQkJc3Rj
YiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoJmlucCwgYWRkciwgJm5ldCwgTlVMTCwg
TlVMTCk7CisJCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5w
KTsKKwkJCX0KKwkJfQorCisJCWlmICgoc3RjYiAhPSBOVUxMKSAmJiAobmV0ICE9IE5VTEwpKSB7
CisJCQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1VOQ09ORklSTUVEKSB7CisJCQkJ
LyogSXQncyB1bmNvbmZpcm1lZCAqLworCQkJCXBhZGRyaS0+c3BpbmZvX3N0YXRlID0gU0NUUF9V
TkNPTkZJUk1FRDsKKwkJCX0gZWxzZSBpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JF
QUNIQUJMRSkgeworCQkJCS8qIEl0J3MgYWN0aXZlICovCisJCQkJcGFkZHJpLT5zcGluZm9fc3Rh
dGUgPSBTQ1RQX0FDVElWRTsKKwkJCX0gZWxzZSB7CisJCQkJLyogSXQncyBpbmFjdGl2ZSAqLwor
CQkJCXBhZGRyaS0+c3BpbmZvX3N0YXRlID0gU0NUUF9JTkFDVElWRTsKKwkJCX0KKwkJCXBhZGRy
aS0+c3BpbmZvX2N3bmQgPSBuZXQtPmN3bmQ7CisJCQlwYWRkcmktPnNwaW5mb19zcnR0ID0gbmV0
LT5sYXN0c2EgPj4gU0NUUF9SVFRfU0hJRlQ7CisJCQlwYWRkcmktPnNwaW5mb19ydG8gPSBuZXQt
PlJUTzsKKwkJCXBhZGRyaS0+c3BpbmZvX2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNi
KTsKKwkJCXBhZGRyaS0+c3BpbmZvX210dSA9IG5ldC0+bXR1OworCQkJc3dpdGNoIChhZGRyLT5z
YV9mYW1pbHkpIHsKKyNpZiBkZWZpbmVkKElORVQpCisJCQljYXNlIEFGX0lORVQ6CisJCQkJcGFk
ZHJpLT5zcGluZm9fbXR1IC09IFNDVFBfTUlOX1Y0X09WRVJIRUFEOworCQkJCWJyZWFrOworI2Vu
ZGlmCisjaWYgZGVmaW5lZChJTkVUNikKKwkJCWNhc2UgQUZfSU5FVDY6CisJCQkJcGFkZHJpLT5z
cGluZm9fbXR1IC09IFNDVFBfTUlOX09WRVJIRUFEOworCQkJCWJyZWFrOworI2VuZGlmCisjaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJY2FzZSBBRl9DT05OOgorCQkJCXBhZGRyaS0+c3Bp
bmZvX210dSAtPSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpOworCQkJCWJyZWFrOworI2VuZGlmCisJ
CQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwor
CQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfcGFkZHJpbmZvKTsKKwkJfSBlbHNlIHsK
KwkJCWlmIChzdGNiICE9IE5VTEwpIHsKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQl9
CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFTk9FTlQpOworCQkJZXJyb3IgPSBFTk9FTlQ7CisJCX0KKwkJYnJlYWs7CisJfQor
CWNhc2UgU0NUUF9QQ0JfU1RBVFVTOgorCXsKKwkJc3RydWN0IHNjdHBfcGNiaW5mbyAqc3BjYjsK
KworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNwY2IsIG9wdHZhbCwgc3RydWN0IHNjdHBfcGNiaW5m
bywgKm9wdHNpemUpOworCQlzY3RwX2ZpbGxfcGNiaW5mbyhzcGNiKTsKKwkJKm9wdHNpemUgPSBz
aXplb2Yoc3RydWN0IHNjdHBfcGNiaW5mbyk7CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfU1RB
VFVTOgorCXsKKwkJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCQlzdHJ1Y3Qgc2N0cF9zdGF0dXMg
KnNzdGF0OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc3N0YXQsIG9wdHZhbCwgc3RydWN0IHNj
dHBfc3RhdHVzLCAqb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgc3N0YXQt
PnNzdGF0X2Fzc29jX2lkKTsKKworCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwp
OworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlzc3RhdC0+c3N0YXRfc3Rh
dGUgPSBzY3RwX21hcF9hc3NvY19zdGF0ZShzdGNiLT5hc29jLnN0YXRlKTsKKwkJc3N0YXQtPnNz
dGF0X2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsKKwkJc3N0YXQtPnNzdGF0X3J3
bmQgPSBzdGNiLT5hc29jLnBlZXJzX3J3bmQ7CisJCXNzdGF0LT5zc3RhdF91bmFja2RhdGEgPSBz
dGNiLT5hc29jLnNlbnRfcXVldWVfY250OworCQkvKgorCQkgKiBXZSBjYW4ndCBpbmNsdWRlIGNo
dW5rcyB0aGF0IGhhdmUgYmVlbiBwYXNzZWQgdG8KKwkJICogdGhlIHNvY2tldCBsYXllci4gT25s
eSB0aGluZ3MgaW4gcXVldWUuCisJCSAqLworCQlzc3RhdC0+c3N0YXRfcGVuZGRhdGEgPSAoc3Rj
Yi0+YXNvYy5jbnRfb25fcmVhc21fcXVldWUgKworCQkJCQkgc3RjYi0+YXNvYy5jbnRfb25fYWxs
X3N0cmVhbXMpOworCQlzc3RhdC0+c3N0YXRfaW5zdHJtcyA9IHN0Y2ItPmFzb2Muc3RyZWFtaW5j
bnQ7CisJCXNzdGF0LT5zc3RhdF9vdXRzdHJtcyA9IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250Owor
CQlzc3RhdC0+c3N0YXRfZnJhZ21lbnRhdGlvbl9wb2ludCA9IHNjdHBfZ2V0X2ZyYWdfcG9pbnQo
c3RjYiwgJnN0Y2ItPmFzb2MpOworCQluZXQgPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRp
b247CisJCWlmIChuZXQgIT0gTlVMTCkgeworI2lmZGVmIEhBVkVfU0FfTEVOCisJCQltZW1jcHko
JnNzdGF0LT5zc3RhdF9wcmltYXJ5LnNwaW5mb19hZGRyZXNzLAorCQkJICAgICAgICZuZXQtPnJv
Ll9sX2FkZHIsCisJCQkgICAgICAgKChzdHJ1Y3Qgc29ja2FkZHIgKikoJm5ldC0+cm8uX2xfYWRk
cikpLT5zYV9sZW4pOworI2Vsc2UKKwkJCXN3aXRjaCAoc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3Rp
bmF0aW9uLT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSkgeworI2lmIGRlZmluZWQoSU5FVCkKKwkJ
CWNhc2UgQUZfSU5FVDoKKwkJCQltZW1jcHkoJnNzdGF0LT5zc3RhdF9wcmltYXJ5LnNwaW5mb19h
ZGRyZXNzLAorCQkJCSAgICAgICAmbmV0LT5yby5fbF9hZGRyLAorCQkJCSAgICAgICBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luKSk7CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKElO
RVQ2KQorCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQltZW1jcHkoJnNzdGF0LT5zc3RhdF9wcmltYXJ5
LnNwaW5mb19hZGRyZXNzLAorCQkJCSAgICAgICAmbmV0LT5yby5fbF9hZGRyLAorCQkJCSAgICAg
ICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworCQkJCWJyZWFrOworI2VuZGlmCisjaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJY2FzZSBBRl9DT05OOgorCQkJCW1lbWNweSgmc3N0
YXQtPnNzdGF0X3ByaW1hcnkuc3BpbmZvX2FkZHJlc3MsCisJCQkJICAgICAgICZuZXQtPnJvLl9s
X2FkZHIsCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCQkJCWJy
ZWFrOworI2VuZGlmCisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorI2VuZGlmCisJCQko
KHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZzc3RhdC0+c3N0YXRfcHJpbWFyeS5zcGluZm9fYWRkcmVz
cyktPnNpbl9wb3J0ID0gc3RjYi0+cnBvcnQ7CisJCQkvKgorCQkJICogQWdhaW4gdGhlIHVzZXIg
Y2FuIGdldCBpbmZvIGZyb20gc2N0cF9jb25zdGFudHMuaAorCQkJICogZm9yIHdoYXQgdGhlIHN0
YXRlIG9mIHRoZSBuZXR3b3JrIGlzLgorCQkJICovCisJCQlpZiAobmV0LT5kZXN0X3N0YXRlICYg
U0NUUF9BRERSX1VOQ09ORklSTUVEKSB7CisJCQkJLyogSXQncyB1bmNvbmZpcm1lZCAqLworCQkJ
CXNzdGF0LT5zc3RhdF9wcmltYXJ5LnNwaW5mb19zdGF0ZSA9IFNDVFBfVU5DT05GSVJNRUQ7CisJ
CQl9IGVsc2UgaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpIHsKKwkJ
CQkvKiBJdCdzIGFjdGl2ZSAqLworCQkJCXNzdGF0LT5zc3RhdF9wcmltYXJ5LnNwaW5mb19zdGF0
ZSA9IFNDVFBfQUNUSVZFOworCQkJfSBlbHNlIHsKKwkJCQkvKiBJdCdzIGluYWN0aXZlICovCisJ
CQkJc3N0YXQtPnNzdGF0X3ByaW1hcnkuc3BpbmZvX3N0YXRlID0gU0NUUF9JTkFDVElWRTsKKwkJ
CX0KKwkJCXNzdGF0LT5zc3RhdF9wcmltYXJ5LnNwaW5mb19jd25kID0gbmV0LT5jd25kOworCQkJ
c3N0YXQtPnNzdGF0X3ByaW1hcnkuc3BpbmZvX3NydHQgPSBuZXQtPmxhc3RzYSA+PiBTQ1RQX1JU
VF9TSElGVDsKKwkJCXNzdGF0LT5zc3RhdF9wcmltYXJ5LnNwaW5mb19ydG8gPSBuZXQtPlJUTzsK
KwkJCXNzdGF0LT5zc3RhdF9wcmltYXJ5LnNwaW5mb19tdHUgPSBuZXQtPm10dTsKKwkJCXN3aXRj
aCAoc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLT5yby5fbF9hZGRyLnNhLnNhX2ZhbWls
eSkgeworI2lmIGRlZmluZWQoSU5FVCkKKwkJCWNhc2UgQUZfSU5FVDoKKwkJCQlzc3RhdC0+c3N0
YXRfcHJpbWFyeS5zcGluZm9fbXR1IC09IFNDVFBfTUlOX1Y0X09WRVJIRUFEOworCQkJCWJyZWFr
OworI2VuZGlmCisjaWYgZGVmaW5lZChJTkVUNikKKwkJCWNhc2UgQUZfSU5FVDY6CisJCQkJc3N0
YXQtPnNzdGF0X3ByaW1hcnkuc3BpbmZvX210dSAtPSBTQ1RQX01JTl9PVkVSSEVBRDsKKwkJCQli
cmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCWNhc2UgQUZfQ09O
TjoKKwkJCQlzc3RhdC0+c3N0YXRfcHJpbWFyeS5zcGluZm9fbXR1IC09IHNpemVvZihzdHJ1Y3Qg
c2N0cGhkcik7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJ
CQl9CisJCX0gZWxzZSB7CisJCQltZW1zZXQoJnNzdGF0LT5zc3RhdF9wcmltYXJ5LCAwLCBzaXpl
b2Yoc3RydWN0IHNjdHBfcGFkZHJpbmZvKSk7CisJCX0KKwkJc3N0YXQtPnNzdGF0X3ByaW1hcnku
c3BpbmZvX2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsKKwkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOworCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdGF0dXMpOworCQli
cmVhazsKKwl9CisJY2FzZSBTQ1RQX1JUT0lORk86CisJeworCQlzdHJ1Y3Qgc2N0cF9ydG9pbmZv
ICpzcnRvOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc3J0bywgb3B0dmFsLCBzdHJ1Y3Qgc2N0
cF9ydG9pbmZvLCAqb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgc3J0by0+
c3J0b19hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCXNydG8tPnNydG9faW5pdGlhbCA9
IHN0Y2ItPmFzb2MuaW5pdGlhbF9ydG87CisJCQlzcnRvLT5zcnRvX21heCA9IHN0Y2ItPmFzb2Mu
bWF4cnRvOworCQkJc3J0by0+c3J0b19taW4gPSBzdGNiLT5hc29jLm1pbnJ0bzsKKwkJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX1VEUFRZUEUpICYmCisJCQkgICAgIChzcnRvLT5zcnRvX2Fzc29jX2lkID09
IFNDVFBfRlVUVVJFX0FTU09DKSkpIHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJCXNy
dG8tPnNydG9faW5pdGlhbCA9IGlucC0+c2N0cF9lcC5pbml0aWFsX3J0bzsKKwkJCQlzcnRvLT5z
cnRvX21heCA9IGlucC0+c2N0cF9lcC5zY3RwX21heHJ0bzsKKwkJCQlzcnRvLT5zcnRvX21pbiA9
IGlucC0+c2N0cF9lcC5zY3RwX21pbnJ0bzsKKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJ
CQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJ
CX0KKwkJaWYgKGVycm9yID09IDApIHsKKwkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3Rw
X3J0b2luZm8pOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfVElNRU9VVFM6CisJewor
CQlzdHJ1Y3Qgc2N0cF90aW1lb3V0cyAqc3RpbW87CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChz
dGltbywgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF90aW1lb3V0cywgKm9wdHNpemUpOworCQlTQ1RQX0ZJ
TkRfU1RDQihpbnAsIHN0Y2IsIHN0aW1vLT5zdGltb19hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2Ip
IHsKKwkJCXN0aW1vLT5zdGltb19pbml0PSBzdGNiLT5hc29jLnRpbW9pbml0OworCQkJc3RpbW8t
PnN0aW1vX2RhdGE9IHN0Y2ItPmFzb2MudGltb2RhdGE7CisJCQlzdGltby0+c3RpbW9fc2Fjaz0g
c3RjYi0+YXNvYy50aW1vc2FjazsKKwkJCXN0aW1vLT5zdGltb19zaHV0ZG93bj0gc3RjYi0+YXNv
Yy50aW1vc2h1dGRvd247CisJCQlzdGltby0+c3RpbW9faGVhcnRiZWF0PSBzdGNiLT5hc29jLnRp
bW9oZWFydGJlYXQ7CisJCQlzdGltby0+c3RpbW9fY29va2llPSBzdGNiLT5hc29jLnRpbW9jb29r
aWU7CisJCQlzdGltby0+c3RpbW9fc2h1dGRvd25hY2s9IHN0Y2ItPmFzb2MudGltb3NodXRkb3du
YWNrOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfdGltZW91dHMpOworCQl9IGVsc2UgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9y
ID0gRUlOVkFMOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfQVNTT0NJTkZPOgorCXsK
KwkJc3RydWN0IHNjdHBfYXNzb2NwYXJhbXMgKnNhc29jOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NB
U1Qoc2Fzb2MsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NwYXJhbXMsICpvcHRzaXplKTsKKwkJ
U0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBzYXNvYy0+c2Fzb2NfYXNzb2NfaWQpOworCisJCWlm
IChzdGNiKSB7CisJCQlzYXNvYy0+c2Fzb2NfY29va2llX2xpZmUgPSBzY3RwX3RpY2tzX3RvX21z
ZWNzKHN0Y2ItPmFzb2MuY29va2llX2xpZmUpOworCQkJc2Fzb2MtPnNhc29jX2Fzb2NtYXhyeHQg
PSBzdGNiLT5hc29jLm1heF9zZW5kX3RpbWVzOworCQkJc2Fzb2MtPnNhc29jX251bWJlcl9wZWVy
X2Rlc3RpbmF0aW9ucyA9IHN0Y2ItPmFzb2MubnVtbmV0czsKKwkJCXNhc29jLT5zYXNvY19wZWVy
X3J3bmQgPSBzdGNiLT5hc29jLnBlZXJzX3J3bmQ7CisJCQlzYXNvYy0+c2Fzb2NfbG9jYWxfcndu
ZCA9IHN0Y2ItPmFzb2MubXlfcnduZDsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBl
bHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkg
fHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkg
fHwKKwkJCSAgICAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUpICYm
CisJCQkgICAgIChzYXNvYy0+c2Fzb2NfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSkg
eworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJc2Fzb2MtPnNhc29jX2Nvb2tpZV9saWZl
ID0gc2N0cF90aWNrc190b19tc2VjcyhpbnAtPnNjdHBfZXAuZGVmX2Nvb2tpZV9saWZlKTsKKwkJ
CQlzYXNvYy0+c2Fzb2NfYXNvY21heHJ4dCA9IGlucC0+c2N0cF9lcC5tYXhfc2VuZF90aW1lczsK
KwkJCQlzYXNvYy0+c2Fzb2NfbnVtYmVyX3BlZXJfZGVzdGluYXRpb25zID0gMDsKKwkJCQlzYXNv
Yy0+c2Fzb2NfcGVlcl9yd25kID0gMDsKKwkJCQlzYXNvYy0+c2Fzb2NfbG9jYWxfcnduZCA9IHNi
c3BhY2UoJmlucC0+c2N0cF9zb2NrZXQtPnNvX3Jjdik7CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhp
bnApOworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOwor
CQkJfQorCQl9CisJCWlmIChlcnJvciA9PSAwKSB7CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1
Y3Qgc2N0cF9hc3NvY3BhcmFtcyk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9ERUZB
VUxUX1NFTkRfUEFSQU06CisJeworCQlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzX2luZm87CisK
KwkJU0NUUF9DSEVDS19BTkRfQ0FTVChzX2luZm8sIG9wdHZhbCwgc3RydWN0IHNjdHBfc25kcmN2
aW5mbywgKm9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHNfaW5mby0+c2lu
Zm9fYXNzb2NfaWQpOworCisJCWlmIChzdGNiKSB7CisJCQltZW1jcHkoc19pbmZvLCAmc3RjYi0+
YXNvYy5kZWZfc2VuZCwgc2l6ZW9mKHN0Y2ItPmFzb2MuZGVmX3NlbmQpKTsKKwkJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX1VEUFRZUEUpICYmCisJCQkgICAgIChzX2luZm8tPnNpbmZvX2Fzc29jX2lkID09
IFNDVFBfRlVUVVJFX0FTU09DKSkpIHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJCW1l
bWNweShzX2luZm8sICZpbnAtPmRlZl9zZW5kLCBzaXplb2YoaW5wLT5kZWZfc2VuZCkpOworCQkJ
CVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJ
CQllcnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJfQorCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJKm9w
dHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbyk7CisJCX0KKwkJYnJlYWs7CisJ
fQorCWNhc2UgU0NUUF9JTklUTVNHOgorCXsKKwkJc3RydWN0IHNjdHBfaW5pdG1zZyAqc2luaXQ7
CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChzaW5pdCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9pbml0
bXNnLCAqb3B0c2l6ZSk7CisJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCXNpbml0LT5zaW5pdF9u
dW1fb3N0cmVhbXMgPSBpbnAtPnNjdHBfZXAucHJlX29wZW5fc3RyZWFtX2NvdW50OworCQlzaW5p
dC0+c2luaXRfbWF4X2luc3RyZWFtcyA9IGlucC0+c2N0cF9lcC5tYXhfb3Blbl9zdHJlYW1zX2lu
dG9tZTsKKwkJc2luaXQtPnNpbml0X21heF9hdHRlbXB0cyA9IGlucC0+c2N0cF9lcC5tYXhfaW5p
dF90aW1lczsKKwkJc2luaXQtPnNpbml0X21heF9pbml0X3RpbWVvID0gaW5wLT5zY3RwX2VwLmlu
aXRpYWxfaW5pdF9ydG9fbWF4OworCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCSpvcHRzaXpl
ID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRtc2cpOworCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQ
X1BSSU1BUllfQUREUjoKKwkJLyogd2UgYWxsb3cgYSAiZ2V0IiBvcGVyYXRpb24gb24gdGhpcyAq
LworCXsKKwkJc3RydWN0IHNjdHBfc2V0cHJpbSAqc3NwOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NB
U1Qoc3NwLCBvcHR2YWwsIHN0cnVjdCBzY3RwX3NldHByaW0sICpvcHRzaXplKTsKKwkJU0NUUF9G
SU5EX1NUQ0IoaW5wLCBzdGNiLCBzc3AtPnNzcF9hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2IpIHsK
KwkJCXVuaW9uIHNjdHBfc29ja3N0b3JlICphZGRyOworCisJCQlhZGRyID0gJnN0Y2ItPmFzb2Mu
cHJpbWFyeV9kZXN0aW5hdGlvbi0+cm8uX2xfYWRkcjsKKwkJCXN3aXRjaCAoYWRkci0+c2Euc2Ff
ZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQkJY2FzZSBBRl9JTkVUOgorI2lmZGVmIElORVQ2CisJ
CQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX05FRURTX01BUFBF
RF9WNCkpIHsKKwkJCQkJaW42X3Npbl8yX3Y0bWFwc2luNigmYWRkci0+c2luLAorCQkJCQkgICAg
ICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJnNzcC0+c3NwX2FkZHIpOwor
CQkJCX0gZWxzZSB7CisJCQkJCW1lbWNweSgmc3NwLT5zc3BfYWRkciwgJmFkZHItPnNpbiwgc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCQkJCX0KKyNlbHNlCisJCQkJbWVtY3B5KCZzc3At
PnNzcF9hZGRyLCAmYWRkci0+c2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisjZW5k
aWYKKwkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQljYXNlIEFGX0lORVQ2Ogor
CQkJCW1lbWNweSgmc3NwLT5zc3BfYWRkciwgJmFkZHItPnNpbjYsIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW42KSk7CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisJCQljYXNlIEFGX0NPTk46CisJCQkJbWVtY3B5KCZzc3AtPnNzcF9hZGRyLCAmYWRkci0+
c2Nvbm4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCQkJCWJyZWFrOworI2VuZGlm
CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfc2V0cHJpbSk7CisJCX0gZWxzZSB7
CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJfQor
CWNhc2UgU0NUUF9ITUFDX0lERU5UOgorCXsKKwkJc3RydWN0IHNjdHBfaG1hY2FsZ28gKnNobWFj
OworCQlzY3RwX2htYWNsaXN0X3QgKmhtYWNsaXN0OworCQl1aW50MzJfdCBzaXplOworCQlpbnQg
aTsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNobWFjLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2ht
YWNhbGdvLCAqb3B0c2l6ZSk7CisKKwkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJaG1hY2xpc3Qg
PSBpbnAtPnNjdHBfZXAubG9jYWxfaG1hY3M7CisJCWlmIChobWFjbGlzdCA9PSBOVUxMKSB7CisJ
CQkvKiBubyBITUFDcyB0byByZXR1cm4gKi8KKwkJCSpvcHRzaXplID0gc2l6ZW9mKCpzaG1hYyk7
CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQlicmVhazsKKwkJfQorCQkvKiBpcyB0aGVy
ZSByb29tIGZvciBhbGwgb2YgdGhlIGhtYWMgaWRzPyAqLworCQlzaXplID0gc2l6ZW9mKCpzaG1h
YykgKyAoaG1hY2xpc3QtPm51bV9hbGdvICoKKwkJCQkJIHNpemVvZihzaG1hYy0+c2htYWNfaWRl
bnRzWzBdKSk7CisJCWlmICgoc2l6ZV90KSgqb3B0c2l6ZSkgPCBzaXplKSB7CisJCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5W
QUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQli
cmVhazsKKwkJfQorCQkvKiBjb3B5IGluIHRoZSBsaXN0ICovCisJCXNobWFjLT5zaG1hY19udW1i
ZXJfb2ZfaWRlbnRzID0gaG1hY2xpc3QtPm51bV9hbGdvOworCQlmb3IgKGkgPSAwOyBpIDwgaG1h
Y2xpc3QtPm51bV9hbGdvOyBpKyspIHsKKwkJCXNobWFjLT5zaG1hY19pZGVudHNbaV0gPSBobWFj
bGlzdC0+aG1hY1tpXTsKKwkJfQorCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCSpvcHRzaXpl
ID0gc2l6ZTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9BVVRIX0FDVElWRV9LRVk6CisJewor
CQlzdHJ1Y3Qgc2N0cF9hdXRoa2V5aWQgKnNjYWN0OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qo
c2NhY3QsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXV0aGtleWlkLCAqb3B0c2l6ZSk7CisJCVNDVFBf
RklORF9TVENCKGlucCwgc3RjYiwgc2NhY3QtPnNjYWN0X2Fzc29jX2lkKTsKKworCQlpZiAoc3Rj
YikgeworCQkJLyogZ2V0IHRoZSBhY3RpdmUga2V5IG9uIHRoZSBhc3NvYyAqLworCQkJc2NhY3Qt
PnNjYWN0X2tleW51bWJlciA9IHN0Y2ItPmFzb2MuYXV0aGluZm8uYWN0aXZlX2tleWlkOworCQkJ
U0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJICAgICgoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkgJiYKKwkJCSAgICAgKHNjYWN0LT5zY2FjdF9hc3Nv
Y19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpKSB7CisJCQkJLyogZ2V0IHRoZSBlbmRwb2ludCBh
Y3RpdmUga2V5ICovCisJCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQlzY2FjdC0+c2NhY3Rf
a2V5bnVtYmVyID0gaW5wLT5zY3RwX2VwLmRlZmF1bHRfa2V5aWQ7CisJCQkJU0NUUF9JTlBfUlVO
TE9DSyhpbnApOworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlO
VkFMOworCQkJfQorCQl9CisJCWlmIChlcnJvciA9PSAwKSB7CisJCQkqb3B0c2l6ZSA9IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9hdXRoa2V5aWQpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBf
TE9DQUxfQVVUSF9DSFVOS1M6CisJeworCQlzdHJ1Y3Qgc2N0cF9hdXRoY2h1bmtzICpzYWM7CisJ
CXNjdHBfYXV0aF9jaGtsaXN0X3QgKmNoa2xpc3QgPSBOVUxMOworCQlzaXplX3Qgc2l6ZSA9IDA7
CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChzYWMsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXV0aGNo
dW5rcywgKm9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHNhYy0+Z2F1dGhf
YXNzb2NfaWQpOworCisJCWlmIChzdGNiKSB7CisJCQkvKiBnZXQgb2ZmIHRoZSBhc3NvYyAqLwor
CQkJY2hrbGlzdCA9IHN0Y2ItPmFzb2MubG9jYWxfYXV0aF9jaHVua3M7CisJCQkvKiBpcyB0aGVy
ZSBlbm91Z2ggc3BhY2U/ICovCisJCQlzaXplID0gc2N0cF9hdXRoX2dldF9jaGtsaXN0X3NpemUo
Y2hrbGlzdCk7CisJCQlpZiAoKm9wdHNpemUgPCAoc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhjaHVu
a3MpICsgc2l6ZSkpIHsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7CisJCQl9
IGVsc2UgeworCQkJCS8qIGNvcHkgaW4gdGhlIGNodW5rcyAqLworCQkJCSh2b2lkKXNjdHBfc2Vy
aWFsaXplX2F1dGhfY2h1bmtzKGNoa2xpc3QsIHNhYy0+Z2F1dGhfY2h1bmtzKTsKKwkJCQlzYWMt
PmdhdXRoX251bWJlcl9vZl9jaHVua3MgPSAodWludDMyX3Qpc2l6ZTsKKwkJCQkqb3B0c2l6ZSA9
IHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoY2h1bmtzKSArIHNpemU7CisJCQl9CisJCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19VRFBUWVBFKSAmJgorCQkJICAgICAoc2FjLT5nYXV0aF9hc3NvY19pZCA9PSBT
Q1RQX0ZVVFVSRV9BU1NPQykpKSB7CisJCQkJLyogZ2V0IG9mZiB0aGUgZW5kcG9pbnQgKi8KKwkJ
CQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJCWNoa2xpc3QgPSBpbnAtPnNjdHBfZXAubG9jYWxf
YXV0aF9jaHVua3M7CisJCQkJLyogaXMgdGhlcmUgZW5vdWdoIHNwYWNlPyAqLworCQkJCXNpemUg
PSBzY3RwX2F1dGhfZ2V0X2Noa2xpc3Rfc2l6ZShjaGtsaXN0KTsKKwkJCQlpZiAoKm9wdHNpemUg
PCAoc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhjaHVua3MpICsgc2l6ZSkpIHsKKwkJCQkJZXJyb3Ig
PSBFSU5WQUw7CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBjb3B5IGlu
IHRoZSBjaHVua3MgKi8KKwkJCQkJKHZvaWQpc2N0cF9zZXJpYWxpemVfYXV0aF9jaHVua3MoY2hr
bGlzdCwgc2FjLT5nYXV0aF9jaHVua3MpOworCQkJCQlzYWMtPmdhdXRoX251bWJlcl9vZl9jaHVu
a3MgPSAodWludDMyX3Qpc2l6ZTsKKwkJCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBf
YXV0aGNodW5rcykgKyBzaXplOworCQkJCX0KKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJ
CQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJ
CX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9QRUVSX0FVVEhfQ0hVTktTOgorCXsKKwkJc3Ry
dWN0IHNjdHBfYXV0aGNodW5rcyAqc2FjOworCQlzY3RwX2F1dGhfY2hrbGlzdF90ICpjaGtsaXN0
ID0gTlVMTDsKKwkJc2l6ZV90IHNpemUgPSAwOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc2Fj
LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2F1dGhjaHVua3MsICpvcHRzaXplKTsKKwkJU0NUUF9GSU5E
X1NUQ0IoaW5wLCBzdGNiLCBzYWMtPmdhdXRoX2Fzc29jX2lkKTsKKworCQlpZiAoc3RjYikgewor
CQkJLyogZ2V0IG9mZiB0aGUgYXNzb2MgKi8KKwkJCWNoa2xpc3QgPSBzdGNiLT5hc29jLnBlZXJf
YXV0aF9jaHVua3M7CisJCQkvKiBpcyB0aGVyZSBlbm91Z2ggc3BhY2U/ICovCisJCQlzaXplID0g
c2N0cF9hdXRoX2dldF9jaGtsaXN0X3NpemUoY2hrbGlzdCk7CisJCQlpZiAoKm9wdHNpemUgPCAo
c2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhjaHVua3MpICsgc2l6ZSkpIHsKKwkJCQllcnJvciA9IEVJ
TlZBTDsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBlcnJvcik7CisJCQl9IGVsc2UgeworCQkJCS8qIGNvcHkgaW4gdGhlIGNo
dW5rcyAqLworCQkJCSh2b2lkKXNjdHBfc2VyaWFsaXplX2F1dGhfY2h1bmtzKGNoa2xpc3QsIHNh
Yy0+Z2F1dGhfY2h1bmtzKTsKKwkJCQlzYWMtPmdhdXRoX251bWJlcl9vZl9jaHVua3MgPSAodWlu
dDMyX3Qpc2l6ZTsKKwkJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoY2h1bmtz
KSArIHNpemU7CisJCQl9CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJ
CSAgICAgICAgU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgRU5PRU5UKTsKKwkJCWVycm9yID0gRU5PRU5UOworCQl9CisJCWJyZWFrOwor
CX0KKyNpZiBkZWZpbmVkKEhBVkVfU0NUUF9QRUVMT0ZGX1NPQ0tPUFQpCisJY2FzZSBTQ1RQX1BF
RUxPRkY6CisJeworCQlzdHJ1Y3Qgc2N0cF9wZWVsb2ZmX29wdCAqcGVlbG9mZjsKKworCQlTQ1RQ
X0NIRUNLX0FORF9DQVNUKHBlZWxvZmYsIG9wdHZhbCwgc3RydWN0IHNjdHBfcGVlbG9mZl9vcHQs
ICpvcHRzaXplKTsKKwkJLyogZG8gdGhlIHBlZWxvZmYgKi8KKwkJZXJyb3IgPSBzY3RwX3BlZWxv
ZmZfb3B0aW9uKHAsIHBlZWxvZmYpOworCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJKm9wdHNpemUg
PSBzaXplb2Yoc3RydWN0IHNjdHBfcGVlbG9mZl9vcHQpOworCQl9CisJfQorCWJyZWFrOworI2Vu
ZGlmIC8qIEhBVkVfU0NUUF9QRUVMT0ZGX1NPQ0tPUFQgKi8KKwljYXNlIFNDVFBfRVZFTlQ6CisJ
eworCQlzdHJ1Y3Qgc2N0cF9ldmVudCAqZXZlbnQ7CisJCXVpbnQzMl90IGV2ZW50X3R5cGU7CisK
KwkJU0NUUF9DSEVDS19BTkRfQ0FTVChldmVudCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9ldmVudCwg
Km9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGV2ZW50LT5zZV9hc3NvY19p
ZCk7CisKKwkJc3dpdGNoIChldmVudC0+c2VfdHlwZSkgeworCQljYXNlIFNDVFBfQVNTT0NfQ0hB
TkdFOgorCQkJZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX1JFQ1ZBU1NPQ0VWTlQ7CisJCQli
cmVhazsKKwkJY2FzZSBTQ1RQX1BFRVJfQUREUl9DSEFOR0U6CisJCQlldmVudF90eXBlID0gU0NU
UF9QQ0JfRkxBR1NfUkVDVlBBRERSRVZOVDsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfUkVNT1RF
X0VSUk9SOgorCQkJZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX1JFQ1ZQRUVSRVJSOworCQkJ
YnJlYWs7CisJCWNhc2UgU0NUUF9TRU5EX0ZBSUxFRDoKKwkJCWV2ZW50X3R5cGUgPSBTQ1RQX1BD
Ql9GTEFHU19SRUNWU0VOREZBSUxFVk5UOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9TSFVURE9X
Tl9FVkVOVDoKKwkJCWV2ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19SRUNWU0hVVERPV05FVk5U
OworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9BREFQVEFUSU9OX0lORElDQVRJT046CisJCQlldmVu
dF90eXBlID0gU0NUUF9QQ0JfRkxBR1NfQURBUFRBVElPTkVWTlQ7CisJCQlicmVhazsKKwkJY2Fz
ZSBTQ1RQX1BBUlRJQUxfREVMSVZFUllfRVZFTlQ6CisJCQlldmVudF90eXBlID0gU0NUUF9QQ0Jf
RkxBR1NfUERBUElFVk5UOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9BVVRIRU5USUNBVElPTl9F
VkVOVDoKKwkJCWV2ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19BVVRIRVZOVDsKKwkJCWJyZWFr
OworCQljYXNlIFNDVFBfU1RSRUFNX1JFU0VUX0VWRU5UOgorCQkJZXZlbnRfdHlwZSA9IFNDVFBf
UENCX0ZMQUdTX1NUUkVBTV9SRVNFVEVWTlQ7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX1NFTkRF
Ul9EUllfRVZFTlQ6CisJCQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxBR1NfRFJZRVZOVDsKKwkJ
CWJyZWFrOworCQljYXNlIFNDVFBfTk9USUZJQ0FUSU9OU19TVE9QUEVEX0VWRU5UOgorCQkJZXZl
bnRfdHlwZSA9IDA7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9UU1VQKTsKKwkJCWVycm9yID0gRU5PVFNVUDsKKwkJCWJy
ZWFrOworCQljYXNlIFNDVFBfQVNTT0NfUkVTRVRfRVZFTlQ6CisJCQlldmVudF90eXBlID0gU0NU
UF9QQ0JfRkxBR1NfQVNTT0NfUkVTRVRFVk5UOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9TVFJF
QU1fQ0hBTkdFX0VWRU5UOgorCQkJZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX1NUUkVBTV9D
SEFOR0VFVk5UOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9TRU5EX0ZBSUxFRF9FVkVOVDoKKwkJ
CWV2ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19SRUNWTlNFTkRGQUlMRVZOVDsKKwkJCWJyZWFr
OworCQlkZWZhdWx0OgorCQkJZXZlbnRfdHlwZSA9IDA7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJy
b3IgPSBFSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZXZlbnRfdHlwZSA+IDApIHsKKwkJ
CWlmIChzdGNiKSB7CisJCQkJZXZlbnQtPnNlX29uID0gc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb24o
aW5wLCBzdGNiLCBldmVudF90eXBlKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJCSAgICAoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCQkgICAgKChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VRFBUWVBFKSAmJgorCQkJCSAgICAgKGV2ZW50LT5zZV9h
c3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpKSB7CisJCQkJCVNDVFBfSU5QX1JMT0NLKGlu
cCk7CisJCQkJCWV2ZW50LT5zZV9vbiA9IHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIGV2ZW50X3R5
cGUpOworCQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RUlOVkFMKTsKKwkJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJfQorCQkJfQorCQl9CisJCWlmIChz
dGNiICE9IE5VTEwpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfQorCQlpZiAoZXJy
b3IgPT0gMCkgeworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfZXZlbnQpOworCQl9
CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfUkVDVlJDVklORk86CisJCWlmICgqb3B0c2l6ZSA8
IHNpemVvZihpbnQpKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCX0g
ZWxzZSB7CisJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJKihpbnQgKilvcHR2YWwgPSBzY3Rw
X2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWUkNWSU5GTyk7CisJCQlTQ1RQ
X0lOUF9SVU5MT0NLKGlucCk7CisJCQkqb3B0c2l6ZSA9IHNpemVvZihpbnQpOworCQl9CisJCWJy
ZWFrOworCWNhc2UgU0NUUF9SRUNWTlhUSU5GTzoKKwkJaWYgKCpvcHRzaXplIDwgc2l6ZW9mKGlu
dCkpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJfSBlbHNlIHsKKwkJ
CVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkqKGludCAqKW9wdHZhbCA9IHNjdHBfaXNfZmVhdHVy
ZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZOWFRJTkZPKTsKKwkJCVNDVFBfSU5QX1JVTkxP
Q0soaW5wKTsKKwkJCSpvcHRzaXplID0gc2l6ZW9mKGludCk7CisJCX0KKwkJYnJlYWs7CisJY2Fz
ZSBTQ1RQX0RFRkFVTFRfU05ESU5GTzoKKwl7CisJCXN0cnVjdCBzY3RwX3NuZGluZm8gKmluZm87
CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChpbmZvLCBvcHR2YWwsIHN0cnVjdCBzY3RwX3NuZGlu
Zm8sICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBpbmZvLT5zbmRfYXNz
b2NfaWQpOworCisJCWlmIChzdGNiKSB7CisJCQlpbmZvLT5zbmRfc2lkID0gc3RjYi0+YXNvYy5k
ZWZfc2VuZC5zaW5mb19zdHJlYW07CisJCQlpbmZvLT5zbmRfZmxhZ3MgPSBzdGNiLT5hc29jLmRl
Zl9zZW5kLnNpbmZvX2ZsYWdzOworCQkJaW5mby0+c25kX2ZsYWdzICY9IDB4ZmZmMDsKKwkJCWlu
Zm8tPnNuZF9wcGlkID0gc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19wcGlkOworCQkJaW5mby0+
c25kX2NvbnRleHQgPSBzdGNiLT5hc29jLmRlZl9zZW5kLnNpbmZvX2NvbnRleHQ7CisJCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKChpbnAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19VRFBUWVBFKSAmJgorCQkJICAgICAoaW5mby0+c25kX2Fzc29jX2lkID09
IFNDVFBfRlVUVVJFX0FTU09DKSkpIHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJCWlu
Zm8tPnNuZF9zaWQgPSBpbnAtPmRlZl9zZW5kLnNpbmZvX3N0cmVhbTsKKwkJCQlpbmZvLT5zbmRf
ZmxhZ3MgPSBpbnAtPmRlZl9zZW5kLnNpbmZvX2ZsYWdzOworCQkJCWluZm8tPnNuZF9mbGFncyAm
PSAweGZmZjA7CisJCQkJaW5mby0+c25kX3BwaWQgPSBpbnAtPmRlZl9zZW5kLnNpbmZvX3BwaWQ7
CisJCQkJaW5mby0+c25kX2NvbnRleHQgPSBpbnAtPmRlZl9zZW5kLnNpbmZvX2NvbnRleHQ7CisJ
CQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwor
CQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQl9CisJCWlmIChlcnJvciA9PSAwKSB7CisJCQkq
b3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKTsKKwkJfQorCQlicmVhazsKKwl9
CisJY2FzZSBTQ1RQX0RFRkFVTFRfUFJJTkZPOgorCXsKKwkJc3RydWN0IHNjdHBfZGVmYXVsdF9w
cmluZm8gKmluZm87CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChpbmZvLCBvcHR2YWwsIHN0cnVj
dCBzY3RwX2RlZmF1bHRfcHJpbmZvLCAqb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwg
c3RjYiwgaW5mby0+cHJfYXNzb2NfaWQpOworCisJCWlmIChzdGNiKSB7CisJCQlpbmZvLT5wcl9w
b2xpY3kgPSBQUl9TQ1RQX1BPTElDWShzdGNiLT5hc29jLmRlZl9zZW5kLnNpbmZvX2ZsYWdzKTsK
KwkJCWluZm8tPnByX3ZhbHVlID0gc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb190aW1ldG9saXZl
OworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJaWYgKChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAgIChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJICAgICgoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkgJiYKKwkJCSAgICAgKGluZm8tPnByX2Fz
c29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkpIHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnAp
OworCQkJCWluZm8tPnByX3BvbGljeSA9IFBSX1NDVFBfUE9MSUNZKGlucC0+ZGVmX3NlbmQuc2lu
Zm9fZmxhZ3MpOworCQkJCWluZm8tPnByX3ZhbHVlID0gaW5wLT5kZWZfc2VuZC5zaW5mb190aW1l
dG9saXZlOworCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJfQorCQlpZiAoZXJyb3IgPT0g
MCkgeworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfZGVmYXVsdF9wcmluZm8pOwor
CQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfUEVFUl9BRERSX1RITERTOgorCXsKKwkJc3Ry
dWN0IHNjdHBfcGFkZHJ0aGxkcyAqdGhsZHM7CisJCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKwkJ
c3RydWN0IHNvY2thZGRyICphZGRyOworI2lmIGRlZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJTkVU
NikKKwkJc3RydWN0IHNvY2thZGRyX2luIHNpbl9zdG9yZTsKKyNlbmRpZgorCisJCVNDVFBfQ0hF
Q0tfQU5EX0NBU1QodGhsZHMsIG9wdHZhbCwgc3RydWN0IHNjdHBfcGFkZHJ0aGxkcywgKm9wdHNp
emUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHRobGRzLT5zcHRfYXNzb2NfaWQpOwor
CisjaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2KQorCQlpZiAodGhsZHMtPnNwdF9h
ZGRyZXNzLnNzX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJc3RydWN0IHNvY2thZGRyX2luNiAq
c2luNjsKKworCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJnRobGRzLT5zcHRfYWRk
cmVzczsKKwkJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmc2luNi0+c2luNl9hZGRyKSkgewor
CQkJCWluNl9zaW42XzJfc2luKCZzaW5fc3RvcmUsIHNpbjYpOworCQkJCWFkZHIgPSAoc3RydWN0
IHNvY2thZGRyICopJnNpbl9zdG9yZTsKKwkJCX0gZWxzZSB7CisJCQkJYWRkciA9IChzdHJ1Y3Qg
c29ja2FkZHIgKikmdGhsZHMtPnNwdF9hZGRyZXNzOworCQkJfQorCQl9IGVsc2UgeworCQkJYWRk
ciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmdGhsZHMtPnNwdF9hZGRyZXNzOworCQl9CisjZWxzZQor
CQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZ0aGxkcy0+c3B0X2FkZHJlc3M7CisjZW5kaWYK
KwkJaWYgKHN0Y2IgIT0gTlVMTCkgeworCQkJbmV0ID0gc2N0cF9maW5kbmV0KHN0Y2IsIGFkZHIp
OworCQl9IGVsc2UgeworCQkJLyogV2UgaW5jcmVtZW50IGhlcmUgc2luY2Ugc2N0cF9maW5kYXNz
b2NpYXRpb25fZXBfYWRkcigpIHdpbAorCQkJICogZG8gYSBkZWNyZW1lbnQgaWYgaXQgZmluZHMg
dGhlIHN0Y2IgYXMgbG9uZyBhcyB0aGUgbG9ja2VkCisJCQkgKiB0Y2IgKGxhc3QgYXJndW1lbnQp
IGlzIE5PVCBhIFRDQi4uIGFrYSBOVUxMLgorCQkJICovCisJCQluZXQgPSBOVUxMOworCQkJU0NU
UF9JTlBfSU5DUl9SRUYoaW5wKTsKKwkJCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9h
ZGRyKCZpbnAsIGFkZHIsICZuZXQsIE5VTEwsIE5VTEwpOworCQkJaWYgKHN0Y2IgPT0gTlVMTCkg
eworCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQl9CisJCX0KKwkJaWYgKChzdGNiICE9
IE5VTEwpICYmIChuZXQgPT0gTlVMTCkpIHsKKyNpZmRlZiBJTkVUCisJCQlpZiAoYWRkci0+c2Ff
ZmFtaWx5ID09IEFGX0lORVQpIHsKKwkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKworCQkJ
CXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyOworCQkJCWlmIChzaW4tPnNpbl9hZGRy
LnNfYWRkciAhPSBJTkFERFJfQU5ZKSB7CisJCQkJCWVycm9yID0gRUlOVkFMOworCQkJCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJCQkJYnJlYWs7CisJCQkJfQor
CQkJfSBlbHNlCisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJaWYgKGFkZHItPnNhX2ZhbWlseSA9
PSBBRl9JTkVUNikgeworCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisKKwkJCQlzaW42
ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyOworCQkJCWlmICghSU42X0lTX0FERFJfVU5T
UEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJ
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOworCQkJCQlicmVhazsKKwkJ
CQl9CisJCQl9IGVsc2UKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCWlm
IChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfQ09OTikgeworCQkJCXN0cnVjdCBzb2NrYWRkcl9jb25u
ICpzY29ubjsKKworCQkJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopYWRkcjsKKwkJ
CQlpZiAoc2Nvbm4tPnNjb25uX2FkZHIgIT0gTlVMTCkgeworCQkJCQllcnJvciA9IEVJTlZBTDsK
KwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7CisJCQkJCWJyZWFr
OworCQkJCX0KKwkJCX0gZWxzZQorI2VuZGlmCisJCQl7CisJCQkJZXJyb3IgPSBFQUZOT1NVUFBP
UlQ7CisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJCQlicmVh
azsKKwkJCX0KKwkJfQorCisJCWlmIChzdGNiICE9IE5VTEwpIHsKKwkJCWlmIChuZXQgIT0gTlVM
TCkgeworCQkJCXRobGRzLT5zcHRfcGF0aG1heHJ4dCA9IG5ldC0+ZmFpbHVyZV90aHJlc2hvbGQ7
CisJCQkJdGhsZHMtPnNwdF9wYXRocGZ0aGxkID0gbmV0LT5wZl90aHJlc2hvbGQ7CisJCQkJdGhs
ZHMtPnNwdF9wYXRoY3B0aGxkID0gMHhmZmZmOworCQkJfSBlbHNlIHsKKwkJCQl0aGxkcy0+c3B0
X3BhdGhtYXhyeHQgPSBzdGNiLT5hc29jLmRlZl9uZXRfZmFpbHVyZTsKKwkJCQl0aGxkcy0+c3B0
X3BhdGhwZnRobGQgPSBzdGNiLT5hc29jLmRlZl9uZXRfcGZfdGhyZXNob2xkOworCQkJCXRobGRz
LT5zcHRfcGF0aGNwdGhsZCA9IDB4ZmZmZjsKKwkJCX0KKwkJCXRobGRzLT5zcHRfYXNzb2NfaWQg
PSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9
IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBF
KSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09M
KSB8fAorCQkJICAgICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkg
JiYKKwkJCSAgICAgKHRobGRzLT5zcHRfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSkg
eworCQkJCS8qIFVzZSBlbmRwb2ludCBkZWZhdWx0cyAqLworCQkJCVNDVFBfSU5QX1JMT0NLKGlu
cCk7CisJCQkJdGhsZHMtPnNwdF9wYXRobWF4cnh0ID0gaW5wLT5zY3RwX2VwLmRlZl9uZXRfZmFp
bHVyZTsKKwkJCQl0aGxkcy0+c3B0X3BhdGhwZnRobGQgPSBpbnAtPnNjdHBfZXAuZGVmX25ldF9w
Zl90aHJlc2hvbGQ7CisJCQkJdGhsZHMtPnNwdF9wYXRoY3B0aGxkID0gMHhmZmZmOworCQkJCVND
VFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQll
cnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJfQorCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJKm9wdHNp
emUgPSBzaXplb2Yoc3RydWN0IHNjdHBfcGFkZHJ0aGxkcyk7CisJCX0KKwkJYnJlYWs7CisJfQor
CWNhc2UgU0NUUF9SRU1PVEVfVURQX0VOQ0FQU19QT1JUOgorCXsKKwkJc3RydWN0IHNjdHBfdWRw
ZW5jYXBzICplbmNhcHM7CisJCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKwkJc3RydWN0IHNvY2th
ZGRyICphZGRyOworI2lmIGRlZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJTkVUNikKKwkJc3RydWN0
IHNvY2thZGRyX2luIHNpbl9zdG9yZTsKKyNlbmRpZgorCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qo
ZW5jYXBzLCBvcHR2YWwsIHN0cnVjdCBzY3RwX3VkcGVuY2FwcywgKm9wdHNpemUpOworCQlTQ1RQ
X0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGVuY2Fwcy0+c3VlX2Fzc29jX2lkKTsKKworI2lmIGRlZmlu
ZWQoSU5FVCkgJiYgZGVmaW5lZChJTkVUNikKKwkJaWYgKGVuY2Fwcy0+c3VlX2FkZHJlc3Muc3Nf
ZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCisJ
CQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmZW5jYXBzLT5zdWVfYWRkcmVzczsKKwkJ
CWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmc2luNi0+c2luNl9hZGRyKSkgeworCQkJCWluNl9z
aW42XzJfc2luKCZzaW5fc3RvcmUsIHNpbjYpOworCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRy
ICopJnNpbl9zdG9yZTsKKwkJCX0gZWxzZSB7CisJCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIg
KikmZW5jYXBzLT5zdWVfYWRkcmVzczsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWFkZHIgPSAoc3Ry
dWN0IHNvY2thZGRyICopJmVuY2Fwcy0+c3VlX2FkZHJlc3M7CisJCX0KKyNlbHNlCisJCWFkZHIg
PSAoc3RydWN0IHNvY2thZGRyICopJmVuY2Fwcy0+c3VlX2FkZHJlc3M7CisjZW5kaWYKKwkJaWYg
KHN0Y2IpIHsKKwkJCW5ldCA9IHNjdHBfZmluZG5ldChzdGNiLCBhZGRyKTsKKwkJfSBlbHNlIHsK
KwkJCS8qIFdlIGluY3JlbWVudCBoZXJlIHNpbmNlIHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2Fk
ZHIoKSB3aWwKKwkJCSAqIGRvIGEgZGVjcmVtZW50IGlmIGl0IGZpbmRzIHRoZSBzdGNiIGFzIGxv
bmcgYXMgdGhlIGxvY2tlZAorCQkJICogdGNiIChsYXN0IGFyZ3VtZW50KSBpcyBOT1QgYSBUQ0Iu
LiBha2EgTlVMTC4KKwkJCSAqLworCQkJbmV0ID0gTlVMTDsKKwkJCVNDVFBfSU5QX0lOQ1JfUkVG
KGlucCk7CisJCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigmaW5wLCBhZGRy
LCAmbmV0LCBOVUxMLCBOVUxMKTsKKwkJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCQlTQ1RQX0lO
UF9ERUNSX1JFRihpbnApOworCQkJfQorCQl9CisJCWlmICgoc3RjYiAhPSBOVUxMKSAmJiAobmV0
ID09IE5VTEwpKSB7CisjaWZkZWYgSU5FVAorCQkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9J
TkVUKSB7CisJCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisKKwkJCQlzaW4gPSAoc3RydWN0
IHNvY2thZGRyX2luICopYWRkcjsKKwkJCQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgIT0gSU5B
RERSX0FOWSkgeworCQkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0
Y2IpOworCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBlcnJvcik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZQorI2Vu
ZGlmCisjaWZkZWYgSU5FVDYKKwkJCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsK
KwkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCisJCQkJc2luNiA9IChzdHJ1Y3Qgc29j
a2FkZHJfaW42ICopYWRkcjsKKwkJCQlpZiAoIUlONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzaW42
LT5zaW42X2FkZHIpKSB7CisJCQkJCWVycm9yID0gRUlOVkFMOworCQkJCQlTQ1RQX1RDQl9VTkxP
Q0soc3RjYik7CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNl
CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQlpZiAoYWRkci0+c2FfZmFt
aWx5ID09IEFGX0NPTk4pIHsKKwkJCQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2Nvbm47CisKKwkJ
CQlzY29ubiA9IChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKWFkZHI7CisJCQkJaWYgKHNjb25uLT5z
Y29ubl9hZGRyICE9IE5VTEwpIHsKKwkJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9
IGVsc2UKKyNlbmRpZgorCQkJeworCQkJCWVycm9yID0gRUFGTk9TVVBQT1JUOworCQkJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0K
KworCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCQlpZiAobmV0KSB7CisJCQkJZW5jYXBzLT5zdWVf
cG9ydCA9IG5ldC0+cG9ydDsKKwkJCX0gZWxzZSB7CisJCQkJZW5jYXBzLT5zdWVfcG9ydCA9IHN0
Y2ItPmFzb2MucG9ydDsKKwkJCX0KKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNl
IHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwK
KwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwK
KwkJCSAgICAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUpICYmCisJ
CQkgICAgIChlbmNhcHMtPnN1ZV9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpKSB7CisJ
CQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQllbmNhcHMtPnN1ZV9wb3J0ID0gaW5wLT5zY3Rw
X2VwLnBvcnQ7CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfSBlbHNlIHsKKwkJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQl9CisJCWlmIChlcnJvciA9
PSAwKSB7CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpOworCQl9
CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfRUNOX1NVUFBPUlRFRDoKKwl7CisJCXN0cnVjdCBz
Y3RwX2Fzc29jX3ZhbHVlICphdjsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWws
IHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCAqb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlu
cCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJYXYtPmFzc29jX3Zh
bHVlID0gc3RjYi0+YXNvYy5lY25fc3VwcG9ydGVkOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OworCQl9IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19U
Q1BUWVBFKSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9U
Q1BQT09MKSB8fAorCQkJICAgICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQ
VFlQRSkgJiYKKwkJCSAgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpKSB7
CisJCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQlhdi0+YXNzb2NfdmFsdWUgPSBpbnAtPmVj
bl9zdXBwb3J0ZWQ7CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfSBlbHNlIHsKKwkJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQl9CisJCWlmIChlcnJv
ciA9PSAwKSB7CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7
CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9QUl9TVVBQT1JURUQ6CisJeworCQlzdHJ1
Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0
dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgKm9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RD
QihpbnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCWF2LT5hc3Nv
Y192YWx1ZSA9IHN0Y2ItPmFzb2MucHJzY3RwX3N1cHBvcnRlZDsKKwkJCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX1VEUFRZUEUpICYmCisJCQkgICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNT
T0MpKSkgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJYXYtPmFzc29jX3ZhbHVlID0g
aW5wLT5wcnNjdHBfc3VwcG9ydGVkOworCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0g
ZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJfQor
CQlpZiAoZXJyb3IgPT0gMCkgeworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNz
b2NfdmFsdWUpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfQVVUSF9TVVBQT1JURUQ6
CisJeworCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7CisKKwkJU0NUUF9DSEVDS19BTkRf
Q0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgKm9wdHNpemUpOworCQlT
Q1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2IpIHsK
KwkJCWF2LT5hc3NvY192YWx1ZSA9IHN0Y2ItPmFzb2MuYXV0aF9zdXBwb3J0ZWQ7CisJCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKChpbnAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19VRFBUWVBFKSAmJgorCQkJICAgICAoYXYtPmFzc29jX2lkID09IFNDVFBf
RlVUVVJFX0FTU09DKSkpIHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJCWF2LT5hc3Nv
Y192YWx1ZSA9IGlucC0+YXV0aF9zdXBwb3J0ZWQ7CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnAp
OworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJ
fQorCQl9CisJCWlmIChlcnJvciA9PSAwKSB7CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qg
c2N0cF9hc3NvY192YWx1ZSk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9BU0NPTkZf
U1VQUE9SVEVEOgorCXsKKwkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OworCisJCVNDVFBf
Q0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsICpvcHRz
aXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOworCisJCWlm
IChzdGNiKSB7CisJCQlhdi0+YXNzb2NfdmFsdWUgPSBzdGNiLT5hc29jLmFzY29uZl9zdXBwb3J0
ZWQ7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VRFBUWVBFKSAmJgorCQkJICAgICAoYXYtPmFzc29j
X2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkpIHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOwor
CQkJCWF2LT5hc3NvY192YWx1ZSA9IGlucC0+YXNjb25mX3N1cHBvcnRlZDsKKwkJCQlTQ1RQX0lO
UF9SVU5MT0NLKGlucCk7CisJCQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3Ig
PSBFSU5WQUw7CisJCQl9CisJCX0KKwkJaWYgKGVycm9yID09IDApIHsKKwkJCSpvcHRzaXplID0g
c2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2Fz
ZSBTQ1RQX1JFQ09ORklHX1NVUFBPUlRFRDoKKwl7CisJCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVl
ICphdjsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fz
c29jX3ZhbHVlLCAqb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFz
c29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJYXYtPmFzc29jX3ZhbHVlID0gc3RjYi0+YXNv
Yy5yZWNvbmZpZ19zdXBwb3J0ZWQ7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxz
ZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8
CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8
CisJCQkgICAgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VRFBUWVBFKSAmJgor
CQkJICAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkpIHsKKwkJCQlTQ1RQ
X0lOUF9STE9DSyhpbnApOworCQkJCWF2LT5hc3NvY192YWx1ZSA9IGlucC0+cmVjb25maWdfc3Vw
cG9ydGVkOworCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJfQorCQlpZiAoZXJyb3IgPT0g
MCkgeworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpOworCQl9
CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfTlJTQUNLX1NVUFBPUlRFRDoKKwl7CisJCXN0cnVj
dCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2
YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCAqb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENC
KGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJYXYtPmFzc29j
X3ZhbHVlID0gc3RjYi0+YXNvYy5ucnNhY2tfc3VwcG9ydGVkOworCQkJU0NUUF9UQ0JfVU5MT0NL
KHN0Y2IpOworCQl9IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19UQ1BUWVBFKSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFH
U19JTl9UQ1BQT09MKSB8fAorCQkJICAgICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfVURQVFlQRSkgJiYKKwkJCSAgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NP
QykpKSB7CisJCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQlhdi0+YXNzb2NfdmFsdWUgPSBp
bnAtPm5yc2Fja19zdXBwb3J0ZWQ7CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfSBl
bHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQl9CisJ
CWlmIChlcnJvciA9PSAwKSB7CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3Nv
Y192YWx1ZSk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9QS1REUk9QX1NVUFBPUlRF
RDoKKwl7CisJCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKKworCQlTQ1RQX0NIRUNLX0FO
RF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCAqb3B0c2l6ZSk7CisJ
CVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKKworCQlpZiAoc3RjYikg
eworCQkJYXYtPmFzc29jX3ZhbHVlID0gc3RjYi0+YXNvYy5wa3Rkcm9wX3N1cHBvcnRlZDsKKwkJ
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUpICYmCisJCQkgICAgIChhdi0+YXNzb2NfaWQgPT0g
U0NUUF9GVVRVUkVfQVNTT0MpKSkgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJYXYt
PmFzc29jX3ZhbHVlID0gaW5wLT5wa3Rkcm9wX3N1cHBvcnRlZDsKKwkJCQlTQ1RQX0lOUF9SVU5M
T0NLKGlucCk7CisJCQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5W
QUw7CisJCQl9CisJCX0KKwkJaWYgKGVycm9yID09IDApIHsKKwkJCSpvcHRzaXplID0gc2l6ZW9m
KHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQ
X0VOQUJMRV9TVFJFQU1fUkVTRVQ6CisJeworCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7
CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192
YWx1ZSwgKm9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19p
ZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCWF2LT5hc3NvY192YWx1ZSA9ICh1aW50MzJfdClzdGNi
LT5hc29jLmxvY2FsX3N0cnJlc2V0X3N1cHBvcnQ7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RD
UFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RD
UFBPT0wpIHx8CisJCQkgICAgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VRFBU
WVBFKSAmJgorCQkJICAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkpIHsK
KwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJCWF2LT5hc3NvY192YWx1ZSA9ICh1aW50MzJf
dClpbnAtPmxvY2FsX3N0cnJlc2V0X3N1cHBvcnQ7CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnAp
OworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJ
fQorCQl9CisJCWlmIChlcnJvciA9PSAwKSB7CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qg
c2N0cF9hc3NvY192YWx1ZSk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9QUl9TVFJF
QU1fU1RBVFVTOgorCXsKKwkJc3RydWN0IHNjdHBfcHJzdGF0dXMgKnNwcnN0YXQ7CisJCXVpbnQx
Nl90IHNpZDsKKwkJdWludDE2X3QgcG9saWN5OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc3By
c3RhdCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9wcnN0YXR1cywgKm9wdHNpemUpOworCQlTQ1RQX0ZJ
TkRfU1RDQihpbnAsIHN0Y2IsIHNwcnN0YXQtPnNwcnN0YXRfYXNzb2NfaWQpOworCisJCXNpZCA9
IHNwcnN0YXQtPnNwcnN0YXRfc2lkOworCQlwb2xpY3kgPSBzcHJzdGF0LT5zcHJzdGF0X3BvbGlj
eTsKKyNpZiBkZWZpbmVkKFNDVFBfREVUQUlMRURfU1RSX1NUQVRTKQorCQlpZiAoKHN0Y2IgIT0g
TlVMTCkgJiYKKwkJICAgIChzaWQgPCBzdGNiLT5hc29jLnN0cmVhbW91dGNudCkgJiYKKwkJICAg
IChwb2xpY3kgIT0gU0NUUF9QUl9TQ1RQX05PTkUpICYmCisJCSAgICAoKHBvbGljeSA8PSBTQ1RQ
X1BSX1NDVFBfTUFYKSB8fAorCQkgICAgIChwb2xpY3kgPT0gU0NUUF9QUl9TQ1RQX0FMTCkpKSB7
CisJCQlpZiAocG9saWN5ID09IFNDVFBfUFJfU0NUUF9BTEwpIHsKKwkJCQlzcHJzdGF0LT5zcHJz
dGF0X2FiYW5kb25lZF91bnNlbnQgPSBzdGNiLT5hc29jLnN0cm1vdXRbc2lkXS5hYmFuZG9uZWRf
dW5zZW50WzBdOworCQkJCXNwcnN0YXQtPnNwcnN0YXRfYWJhbmRvbmVkX3NlbnQgPSBzdGNiLT5h
c29jLnN0cm1vdXRbc2lkXS5hYmFuZG9uZWRfc2VudFswXTsKKwkJCX0gZWxzZSB7CisJCQkJc3By
c3RhdC0+c3Byc3RhdF9hYmFuZG9uZWRfdW5zZW50ID0gc3RjYi0+YXNvYy5zdHJtb3V0W3NpZF0u
YWJhbmRvbmVkX3Vuc2VudFtwb2xpY3ldOworCQkJCXNwcnN0YXQtPnNwcnN0YXRfYWJhbmRvbmVk
X3NlbnQgPSBzdGNiLT5hc29jLnN0cm1vdXRbc2lkXS5hYmFuZG9uZWRfc2VudFtwb2xpY3ldOwor
CQkJfQorI2Vsc2UKKwkJaWYgKChzdGNiICE9IE5VTEwpICYmCisJCSAgICAoc2lkIDwgc3RjYi0+
YXNvYy5zdHJlYW1vdXRjbnQpICYmCisJCSAgICAocG9saWN5ID09IFNDVFBfUFJfU0NUUF9BTEwp
KSB7CisJCQlzcHJzdGF0LT5zcHJzdGF0X2FiYW5kb25lZF91bnNlbnQgPSBzdGNiLT5hc29jLnN0
cm1vdXRbc2lkXS5hYmFuZG9uZWRfdW5zZW50WzBdOworCQkJc3Byc3RhdC0+c3Byc3RhdF9hYmFu
ZG9uZWRfc2VudCA9IHN0Y2ItPmFzb2Muc3RybW91dFtzaWRdLmFiYW5kb25lZF9zZW50WzBdOwor
I2VuZGlmCisJCX0gZWxzZSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJ
CX0KKwkJaWYgKHN0Y2IgIT0gTlVMTCkgeworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9
CisJCWlmIChlcnJvciA9PSAwKSB7CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9w
cnN0YXR1cyk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9QUl9BU1NPQ19TVEFUVVM6
CisJeworCQlzdHJ1Y3Qgc2N0cF9wcnN0YXR1cyAqc3Byc3RhdDsKKwkJdWludDE2X3QgcG9saWN5
OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc3Byc3RhdCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9w
cnN0YXR1cywgKm9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHNwcnN0YXQt
PnNwcnN0YXRfYXNzb2NfaWQpOworCisJCXBvbGljeSA9IHNwcnN0YXQtPnNwcnN0YXRfcG9saWN5
OworCQlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYKKwkJICAgIChwb2xpY3kgIT0gU0NUUF9QUl9TQ1RQ
X05PTkUpICYmCisJCSAgICAoKHBvbGljeSA8PSBTQ1RQX1BSX1NDVFBfTUFYKSB8fAorCQkgICAg
IChwb2xpY3kgPT0gU0NUUF9QUl9TQ1RQX0FMTCkpKSB7CisJCQlpZiAocG9saWN5ID09IFNDVFBf
UFJfU0NUUF9BTEwpIHsKKwkJCQlzcHJzdGF0LT5zcHJzdGF0X2FiYW5kb25lZF91bnNlbnQgPSBz
dGNiLT5hc29jLmFiYW5kb25lZF91bnNlbnRbMF07CisJCQkJc3Byc3RhdC0+c3Byc3RhdF9hYmFu
ZG9uZWRfc2VudCA9IHN0Y2ItPmFzb2MuYWJhbmRvbmVkX3NlbnRbMF07CisJCQl9IGVsc2Ugewor
CQkJCXNwcnN0YXQtPnNwcnN0YXRfYWJhbmRvbmVkX3Vuc2VudCA9IHN0Y2ItPmFzb2MuYWJhbmRv
bmVkX3Vuc2VudFtwb2xpY3ldOworCQkJCXNwcnN0YXQtPnNwcnN0YXRfYWJhbmRvbmVkX3NlbnQg
PSBzdGNiLT5hc29jLmFiYW5kb25lZF9zZW50W3BvbGljeV07CisJCQl9CisJCX0gZWxzZSB7CisJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCX0KKwkJaWYgKHN0Y2IgIT0gTlVM
TCkgeworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9CisJCWlmIChlcnJvciA9PSAwKSB7
CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wcnN0YXR1cyk7CisJCX0KKwkJYnJl
YWs7CisJfQorCWNhc2UgU0NUUF9NQVhfQ1dORDoKKwl7CisJCXN0cnVjdCBzY3RwX2Fzc29jX3Zh
bHVlICphdjsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3Rw
X2Fzc29jX3ZhbHVlLCAqb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYt
PmFzc29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJYXYtPmFzc29jX3ZhbHVlID0gc3RjYi0+
YXNvYy5tYXhfY3duZDsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJ
CWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAg
ICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAg
ICAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUpICYmCisJCQkgICAg
IChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSkgeworCQkJCVNDVFBfSU5QX1JM
T0NLKGlucCk7CisJCQkJYXYtPmFzc29jX3ZhbHVlID0gaW5wLT5tYXhfY3duZDsKKwkJCQlTQ1RQ
X0lOUF9SVU5MT0NLKGlucCk7CisJCQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJy
b3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJaWYgKGVycm9yID09IDApIHsKKwkJCSpvcHRzaXpl
ID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKTsKKwkJfQorCQlicmVhazsKKwl9CisJ
ZGVmYXVsdDoKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1VTUlJFUSwgRU5PUFJPVE9PUFQpOworCQllcnJvciA9IEVOT1BST1RPT1BUOworCQli
cmVhazsKKwl9IC8qIGVuZCBzd2l0Y2ggKHNvcHQtPnNvcHRfbmFtZSkgKi8KKwlpZiAoZXJyb3Ip
IHsKKwkJKm9wdHNpemUgPSAwOworCX0KKwlyZXR1cm4gKGVycm9yKTsKK30KKworI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKK2ludAorI2Vsc2UKK3N0YXRpYyBpbnQKKyNlbmRpZgorc2N0cF9z
ZXRvcHQoc3RydWN0IHNvY2tldCAqc28sIGludCBvcHRuYW1lLCB2b2lkICpvcHR2YWwsIHNpemVf
dCBvcHRzaXplLAorCSAgICB2b2lkICpwKQoreworCWludCBlcnJvciwgc2V0X29wdDsKKwl1aW50
MzJfdCAqbW9wdDsKKwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgPSBOVUxMOworCXN0cnVjdCBzY3Rw
X2lucGNiICppbnAgPSBOVUxMOworCXVpbnQzMl90IHZyZl9pZDsKKworCWlmIChvcHR2YWwgPT0g
TlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQorCWlucCA9IChz
dHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7CisJaWYgKGlucCA9PSBOVUxMKSB7CisJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVJTlZBTCk7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisJdnJmX2lkID0gaW5wLT5kZWZfdnJm
X2lkOworCisJZXJyb3IgPSAwOworCXN3aXRjaCAob3B0bmFtZSkgeworCWNhc2UgU0NUUF9OT0RF
TEFZOgorCWNhc2UgU0NUUF9BVVRPQ0xPU0U6CisJY2FzZSBTQ1RQX0FVVE9fQVNDT05GOgorCWNh
c2UgU0NUUF9FWFBMSUNJVF9FT1I6CisJY2FzZSBTQ1RQX0RJU0FCTEVfRlJBR01FTlRTOgorCWNh
c2UgU0NUUF9VU0VfRVhUX1JDVklORk86CisJY2FzZSBTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQURE
UjoKKwkJLyogY29weSBpbiB0aGUgb3B0aW9uIHZhbHVlICovCisJCVNDVFBfQ0hFQ0tfQU5EX0NB
U1QobW9wdCwgb3B0dmFsLCB1aW50MzJfdCwgb3B0c2l6ZSk7CisJCXNldF9vcHQgPSAwOworCQlp
ZiAoZXJyb3IpCisJCQlicmVhazsKKwkJc3dpdGNoIChvcHRuYW1lKSB7CisJCWNhc2UgU0NUUF9E
SVNBQkxFX0ZSQUdNRU5UUzoKKwkJCXNldF9vcHQgPSBTQ1RQX1BDQl9GTEFHU19OT19GUkFHTUVO
VDsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfQVVUT19BU0NPTkY6CisJCQkvKgorCQkJICogTk9U
RTogd2UgZG9uJ3QgcmVhbGx5IHN1cHBvcnQgdGhpcyBmbGFnCisJCQkgKi8KKwkJCWlmIChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgeworCQkJCS8qIG9ubHkgdmFs
aWQgZm9yIGJvdW5kIGFsbCBzb2NrZXRzICovCisJCQkJaWYgKChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfYXV0b19hc2NvbmYpID09IDApICYmCisJCQkJICAgICgqbW9wdCAhPSAwKSkgeworCQkJCQkv
KiBmb3JiaWRkZW4gYnkgYWRtaW4gKi8KKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRVBFUk0pOworCQkJCQlyZXR1cm4gKEVQ
RVJNKTsKKwkJCQl9CisJCQkJc2V0X29wdCA9IFNDVFBfUENCX0ZMQUdTX0FVVE9fQVNDT05GOwor
CQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCXJldHVybiAoRUlOVkFMKTsKKwkJCX0K
KwkJCWJyZWFrOworCQljYXNlIFNDVFBfRVhQTElDSVRfRU9SOgorCQkJc2V0X29wdCA9IFNDVFBf
UENCX0ZMQUdTX0VYUExJQ0lUX0VPUjsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfVVNFX0VYVF9S
Q1ZJTkZPOgorCQkJc2V0X29wdCA9IFNDVFBfUENCX0ZMQUdTX0VYVF9SQ1ZJTkZPOworCQkJYnJl
YWs7CisJCWNhc2UgU0NUUF9JX1dBTlRfTUFQUEVEX1Y0X0FERFI6CisJCQlpZiAoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpIHsKKwkJCQlzZXRfb3B0ID0gU0NUUF9Q
Q0JfRkxBR1NfTkVFRFNfTUFQUEVEX1Y0OworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwor
CQkJCXJldHVybiAoRUlOVkFMKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNDVFBfTk9ERUxB
WToKKwkJCXNldF9vcHQgPSBTQ1RQX1BDQl9GTEFHU19OT0RFTEFZOworCQkJYnJlYWs7CisJCWNh
c2UgU0NUUF9BVVRPQ0xPU0U6CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0lOX1RDUFBPT0wpKSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQlyZXR1cm4gKEVJTlZBTCk7CisJ
CQl9CisJCQlzZXRfb3B0ID0gU0NUUF9QQ0JfRkxBR1NfQVVUT0NMT1NFOworCQkJLyoKKwkJCSAq
IFRoZSB2YWx1ZSBpcyBpbiB0aWNrcy4gTm90ZSB0aGlzIGRvZXMgbm90IGVmZmVjdAorCQkJICog
b2xkIGFzc29jaWF0aW9ucywgb25seSBuZXcgb25lcy4KKwkJCSAqLworCQkJaW5wLT5zY3RwX2Vw
LmF1dG9fY2xvc2VfdGltZSA9IHNjdHBfc2Vjc190b190aWNrcygqbW9wdCk7CisJCQlicmVhazsK
KwkJfQorCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQlpZiAoKm1vcHQgIT0gMCkgeworCQkJc2N0
cF9mZWF0dXJlX29uKGlucCwgc2V0X29wdCk7CisJCX0gZWxzZSB7CisJCQlzY3RwX2ZlYXR1cmVf
b2ZmKGlucCwgc2V0X29wdCk7CisJCX0KKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQlicmVh
azsKKwljYXNlIFNDVFBfUkVVU0VfUE9SVDoKKwl7CisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QobW9w
dCwgb3B0dmFsLCB1aW50MzJfdCwgb3B0c2l6ZSk7CisJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfVU5CT1VORCkgID09IDApIHsKKwkJCS8qIENhbid0IHNldCBpdCBhZnRl
ciB3ZSBhcmUgYm91bmQgKi8KKwkJCWVycm9yID0gRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJ
aWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VRFBUWVBFKSkgeworCQkJLyog
Q2FuJ3QgZG8gdGhpcyBmb3IgYSAxLW0gc29ja2V0ICovCisJCQllcnJvciA9IEVJTlZBTDsKKwkJ
CWJyZWFrOworCQl9CisJCWlmIChvcHR2YWwpCisJCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQ
X1BDQl9GTEFHU19QT1JUUkVVU0UpOworCQllbHNlCisJCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwg
U0NUUF9QQ0JfRkxBR1NfUE9SVFJFVVNFKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9QQVJU
SUFMX0RFTElWRVJZX1BPSU5UOgorCXsKKwkJdWludDMyX3QgKnZhbHVlOworCisJCVNDVFBfQ0hF
Q0tfQU5EX0NBU1QodmFsdWUsIG9wdHZhbCwgdWludDMyX3QsIG9wdHNpemUpOworCQlpZiAoKnZh
bHVlID4gU0NUUF9TQl9MSU1JVF9SQ1Yoc28pKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3Ig
PSBFSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlpbnAtPnBhcnRpYWxfZGVsaXZlcnlfcG9pbnQg
PSAqdmFsdWU7CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfRlJBR01FTlRfSU5URVJMRUFWRToK
KwkJLyogbm90IHlldCB1bnRpbCB3ZSByZS13cml0ZSBzY3RwX3JlY3Ztc2coKSAqLworCXsKKwkJ
dWludDMyX3QgKmxldmVsOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QobGV2ZWwsIG9wdHZhbCwg
dWludDMyX3QsIG9wdHNpemUpOworCQlpZiAoKmxldmVsID09IFNDVFBfRlJBR19MRVZFTF8yKSB7
CisJCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19GUkFHX0lOVEVSTEVBVkUp
OworCQkJc2N0cF9mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfSU5URVJMRUFWRV9TVFJN
Uyk7CisJCX0gZWxzZSBpZiAoKmxldmVsID09IFNDVFBfRlJBR19MRVZFTF8xKSB7CisJCQlzY3Rw
X2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19GUkFHX0lOVEVSTEVBVkUpOworCQkJc2N0
cF9mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX0lOVEVSTEVBVkVfU1RSTVMpOworCQl9
IGVsc2UgaWYgKCpsZXZlbCA9PSBTQ1RQX0ZSQUdfTEVWRUxfMCkgeworCQkJc2N0cF9mZWF0dXJl
X29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX0ZSQUdfSU5URVJMRUFWRSk7CisJCQlzY3RwX2ZlYXR1
cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfSU5URVJMRUFWRV9TVFJNUyk7CisKKwkJfSBlbHNl
IHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJfQorCQlicmVhazsKKwl9
CisJY2FzZSBTQ1RQX0lOVEVSTEVBVklOR19TVVBQT1JURUQ6CisJeworCQlzdHJ1Y3Qgc2N0cF9h
c3NvY192YWx1ZSAqYXY7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1
Y3Qgc2N0cF9hc3NvY192YWx1ZSwgb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3Rj
YiwgYXYtPmFzc29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVy
cm9yID0gRUlOVkFMOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJ
aWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAg
IChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJICAg
ICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkgJiYKKwkJCSAgICAg
KGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpKSB7CisJCQkJU0NUUF9JTlBfV0xP
Q0soaW5wKTsKKwkJCQlpZiAoYXYtPmFzc29jX3ZhbHVlID09IDApIHsKKwkJCQkJaW5wLT5pZGF0
YV9zdXBwb3J0ZWQgPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCWlmICgoc2N0cF9pc19mZWF0dXJl
X29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfRlJBR19JTlRFUkxFQVZFKSkgICYmCisJCQkJCSAgICAo
c2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfSU5URVJMRUFWRV9TVFJNUykp
KSB7CisJCQkJCQlpbnAtPmlkYXRhX3N1cHBvcnRlZCA9IDE7CisJCQkJCX0gZWxzZSB7CisJCQkJ
CQkvKiBNdXN0IGhhdmUgRnJhZyBpbnRlcmxlYXZlIGFuZCBzdHJlYW0gaW50ZXJsZWF2ZSBvbiAq
LworCQkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQkJCWVycm9yID0gRUlOVkFMOworCQkJCQl9CisJCQkJ
fQorCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFM
KTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBT
Q1RQX0NNVF9PTl9PRkY6CisJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY210X29uX29mZikp
IHsKKwkJCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKKworCQkJU0NUUF9DSEVDS19BTkRf
Q0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgb3B0c2l6ZSk7CisJCQlp
ZiAoYXYtPmFzc29jX3ZhbHVlID4gU0NUUF9DTVRfTUFYKSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJ
CQllcnJvciA9IEVJTlZBTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCVNDVFBfRklORF9TVENCKGlu
cCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKKwkJCWlmIChzdGNiKSB7CisJCQkJc3RjYi0+YXNvYy5z
Y3RwX2NtdF9vbl9vZmYgPSBhdi0+YXNzb2NfdmFsdWU7CisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0
Y2IpOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX1RDUFRZUEUpIHx8CisJCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFH
U19JTl9UQ1BQT09MKSB8fAorCQkJCSAgICAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX1VEUFRZUEUpICYmCisJCQkJICAgICAoKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9B
U1NPQykgfHwKKwkJCQkgICAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkpKSB7
CisJCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJCWlucC0+c2N0cF9jbXRfb25fb2ZmID0g
YXYtPmFzc29jX3ZhbHVlOworCQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQkJfQorCQkJ
CWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkgJiYKKwkJCQkg
ICAgKChhdi0+YXNzb2NfaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09DKSB8fAorCQkJCSAgICAgKGF2
LT5hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykpKSB7CisJCQkJCVNDVFBfSU5QX1JMT0NLKGlu
cCk7CisJCQkJCUxJU1RfRk9SRUFDSChzdGNiLCAmaW5wLT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90
Y2JsaXN0KSB7CisJCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJCQkJc3RjYi0+YXNvYy5z
Y3RwX2NtdF9vbl9vZmYgPSBhdi0+YXNzb2NfdmFsdWU7CisJCQkJCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7CisJCQkJCX0KKwkJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJCX0KKwkJCX0K
KwkJfSBlbHNlIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEsIEVOT1BST1RPT1BUKTsKKwkJCWVycm9yID0gRU5PUFJPVE9PUFQ7
CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1BMVUdHQUJMRV9DQzoKKwl7CisJCXN0cnVjdCBz
Y3RwX2Fzc29jX3ZhbHVlICphdjsKKwkJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCisJCVNDVFBf
Q0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsIG9wdHNp
emUpOworCQlpZiAoKGF2LT5hc3NvY192YWx1ZSAhPSBTQ1RQX0NDX1JGQzI1ODEpICYmCisJCSAg
ICAoYXYtPmFzc29jX3ZhbHVlICE9IFNDVFBfQ0NfSFNUQ1ApICYmCisJCSAgICAoYXYtPmFzc29j
X3ZhbHVlICE9IFNDVFBfQ0NfSFRDUCkgJiYKKwkJICAgIChhdi0+YXNzb2NfdmFsdWUgIT0gU0NU
UF9DQ19SVENDKSkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJYnJl
YWs7CisJCX0KKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOworCQlp
ZiAoc3RjYikgeworCQkJc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMgPSBzY3RwX2NjX2Z1bmN0aW9u
c1thdi0+YXNzb2NfdmFsdWVdOworCQkJc3RjYi0+YXNvYy5jb25nZXN0aW9uX2NvbnRyb2xfbW9k
dWxlID0gYXYtPmFzc29jX3ZhbHVlOworCQkJaWYgKHN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNj
dHBfc2V0X2luaXRpYWxfY2NfcGFyYW0gIT0gTlVMTCkgeworCQkJCVRBSUxRX0ZPUkVBQ0gobmV0
LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKwkJCQkJc3RjYi0+YXNvYy5jY19mdW5j
dGlvbnMuc2N0cF9zZXRfaW5pdGlhbF9jY19wYXJhbShzdGNiLCBuZXQpOworCQkJCX0KKwkJCX0K
KwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUpICYmCisJCQkgICAgICgoYXYtPmFzc29jX2lk
ID09IFNDVFBfRlVUVVJFX0FTU09DKSB8fAorCQkJICAgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQ
X0FMTF9BU1NPQykpKSkgeworCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJaW5wLT5zY3Rw
X2VwLnNjdHBfZGVmYXVsdF9jY19tb2R1bGUgPSBhdi0+YXNzb2NfdmFsdWU7CisJCQkJU0NUUF9J
TlBfV1VOTE9DSyhpbnApOworCQkJfQorCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19VRFBUWVBFKSAmJgorCQkJICAgICgoYXYtPmFzc29jX2lkID09IFNDVFBfQ1VSUkVO
VF9BU1NPQykgfHwKKwkJCSAgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykpKSB7
CisJCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+
c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlzdCkgeworCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2Ip
OworCQkJCQlzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucyA9IHNjdHBfY2NfZnVuY3Rpb25zW2F2LT5h
c3NvY192YWx1ZV07CisJCQkJCXN0Y2ItPmFzb2MuY29uZ2VzdGlvbl9jb250cm9sX21vZHVsZSA9
IGF2LT5hc3NvY192YWx1ZTsKKwkJCQkJaWYgKHN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBf
c2V0X2luaXRpYWxfY2NfcGFyYW0gIT0gTlVMTCkgeworCQkJCQkJVEFJTFFfRk9SRUFDSChuZXQs
ICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQkJCQkJCXN0Y2ItPmFzb2MuY2NfZnVu
Y3Rpb25zLnNjdHBfc2V0X2luaXRpYWxfY2NfcGFyYW0oc3RjYiwgbmV0KTsKKwkJCQkJCX0KKwkJ
CQkJfQorCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJfQorCQkJCVNDVFBfSU5QX1JV
TkxPQ0soaW5wKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0NDX09QVElP
TjoKKwl7CisJCXN0cnVjdCBzY3RwX2NjX29wdGlvbiAqY2Nfb3B0OworCisJCVNDVFBfQ0hFQ0tf
QU5EX0NBU1QoY2Nfb3B0LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2NjX29wdGlvbiwgb3B0c2l6ZSk7
CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgY2Nfb3B0LT5haWRfdmFsdWUuYXNzb2NfaWQp
OworCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX1VEUFRZUEUpICYmCisJCQkgICAgKGNjX29wdC0+YWlkX3ZhbHVlLmFzc29jX2lk
ID09IFNDVFBfQ1VSUkVOVF9BU1NPQykpIHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJ
CUxJU1RfRk9SRUFDSChzdGNiLCAmaW5wLT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7
CisJCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQkJCWlmIChzdGNiLT5hc29jLmNjX2Z1bmN0
aW9ucy5zY3RwX2N3bmRfc29ja2V0X29wdGlvbikgeworCQkJCQkJKCpzdGNiLT5hc29jLmNjX2Z1
bmN0aW9ucy5zY3RwX2N3bmRfc29ja2V0X29wdGlvbikoc3RjYiwgMSwgY2Nfb3B0KTsKKwkJCQkJ
fQorCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJfQorCQkJCVNDVFBfSU5QX1JVTkxP
Q0soaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0gZWxz
ZSB7CisJCQlpZiAoc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9jd25kX3NvY2tldF9vcHRp
b24gPT0gTlVMTCkgeworCQkJCWVycm9yID0gRU5PVFNVUDsKKwkJCX0gZWxzZSB7CisJCQkJZXJy
b3IgPSAoKnN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF9zb2NrZXRfb3B0aW9uKShz
dGNiLCAxLAorCQkJCQkJCQkJCQkgICBjY19vcHQpOworCQkJfQorCQkJU0NUUF9UQ0JfVU5MT0NL
KHN0Y2IpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfUExVR0dBQkxFX1NTOgorCXsK
KwkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qo
YXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsIG9wdHNpemUpOworCQlpZiAoKGF2
LT5hc3NvY192YWx1ZSAhPSBTQ1RQX1NTX0RFRkFVTFQpICYmCisJCSAgICAoYXYtPmFzc29jX3Zh
bHVlICE9IFNDVFBfU1NfUk9VTkRfUk9CSU4pICYmCisJCSAgICAoYXYtPmFzc29jX3ZhbHVlICE9
IFNDVFBfU1NfUk9VTkRfUk9CSU5fUEFDS0VUKSAmJgorCQkgICAgKGF2LT5hc3NvY192YWx1ZSAh
PSBTQ1RQX1NTX1BSSU9SSVRZKSAmJgorCQkgICAgKGF2LT5hc3NvY192YWx1ZSAhPSBTQ1RQX1NT
X0ZBSVJfQkFORFdJVEgpICYmCisJCSAgICAoYXYtPmFzc29jX3ZhbHVlICE9IFNDVFBfU1NfRklS
U1RfQ09NRSkpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCWJyZWFr
OworCQl9CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKKwkJaWYg
KHN0Y2IpIHsKKwkJCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKKwkJCXN0Y2ItPmFzb2Muc3Nf
ZnVuY3Rpb25zLnNjdHBfc3NfY2xlYXIoc3RjYiwgJnN0Y2ItPmFzb2MsIDEsIDEpOworCQkJc3Rj
Yi0+YXNvYy5zc19mdW5jdGlvbnMgPSBzY3RwX3NzX2Z1bmN0aW9uc1thdi0+YXNzb2NfdmFsdWVd
OworCQkJc3RjYi0+YXNvYy5zdHJlYW1fc2NoZWR1bGluZ19tb2R1bGUgPSBhdi0+YXNzb2NfdmFs
dWU7CisJCQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2luaXQoc3RjYiwgJnN0Y2It
PmFzb2MsIDEpOworCQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJCQlTQ1RQX1RDQl9V
TkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19VRFBUWVBFKSAmJgorCQkJICAgICAoKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVS
RV9BU1NPQykgfHwKKwkJCSAgICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSkp
IHsKKwkJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQkJCWlucC0+c2N0cF9lcC5zY3RwX2RlZmF1
bHRfc3NfbW9kdWxlID0gYXYtPmFzc29jX3ZhbHVlOworCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5w
KTsKKwkJCX0KKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQ
RSkgJiYKKwkJCSAgICAoKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MpIHx8CisJ
CQkgICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSkgeworCQkJCVNDVFBfSU5Q
X1JMT0NLKGlucCk7CisJCQkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0
LCBzY3RwX3RjYmxpc3QpIHsKKwkJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQkJU0NUUF9U
Q0JfU0VORF9MT0NLKHN0Y2IpOworCQkJCQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3Nz
X2NsZWFyKHN0Y2IsICZzdGNiLT5hc29jLCAxLCAxKTsKKwkJCQkJc3RjYi0+YXNvYy5zc19mdW5j
dGlvbnMgPSBzY3RwX3NzX2Z1bmN0aW9uc1thdi0+YXNzb2NfdmFsdWVdOworCQkJCQlzdGNiLT5h
c29jLnN0cmVhbV9zY2hlZHVsaW5nX21vZHVsZSA9IGF2LT5hc3NvY192YWx1ZTsKKwkJCQkJc3Rj
Yi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19pbml0KHN0Y2IsICZzdGNiLT5hc29jLCAxKTsK
KwkJCQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhz
dGNiKTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfQorCQl9CisJCWJy
ZWFrOworCX0KKwljYXNlIFNDVFBfU1NfVkFMVUU6CisJeworCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1f
dmFsdWUgKmF2OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNj
dHBfc3RyZWFtX3ZhbHVlLCBvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBh
di0+YXNzb2NfaWQpOworCQlpZiAoc3RjYikgeworCQkJaWYgKChhdi0+c3RyZWFtX2lkID49IHN0
Y2ItPmFzb2Muc3RyZWFtb3V0Y250KSB8fAorCQkJICAgIChzdGNiLT5hc29jLnNzX2Z1bmN0aW9u
cy5zY3RwX3NzX3NldF92YWx1ZShzdGNiLCAmc3RjYi0+YXNvYywgJnN0Y2ItPmFzb2Muc3RybW91
dFthdi0+c3RyZWFtX2lkXSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXYtPnN0cmVhbV92YWx1ZSkgPCAwKSkgeworCQkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJ
CQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0g
ZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUp
ICYmCisJCQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MpKSB7CisJCQkJ
U0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9h
c29jX2xpc3QsIHNjdHBfdGNibGlzdCkgeworCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJ
CQlpZiAoYXYtPnN0cmVhbV9pZCA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250KSB7CisJCQkJCQlz
dGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX3NldF92YWx1ZShzdGNiLAorCQkJCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0Y2ItPmFzb2MsCisJCQkJ
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RjYi0+YXNvYy5z
dHJtb3V0W2F2LT5zdHJlYW1faWRdLAorCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXYtPnN0cmVhbV92YWx1ZSk7CisJCQkJCX0KKwkJCQkJU0NUUF9UQ0Jf
VU5MT0NLKHN0Y2IpOworCQkJCX0KKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQl9IGVs
c2UgeworCQkJCS8qIENhbid0IHNldCBzdHJlYW0gdmFsdWUgd2l0aG91dCBhc3NvY2lhdGlvbiAq
LworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJYnJl
YWs7CisJfQorCWNhc2UgU0NUUF9DTFJfU1RBVF9MT0c6CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVPUE5PVFNVUFApOworCQll
cnJvciA9IEVPUE5PVFNVUFA7CisJCWJyZWFrOworCWNhc2UgU0NUUF9DT05URVhUOgorCXsKKwkJ
c3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYs
IG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsIG9wdHNpemUpOworCQlTQ1RQX0ZJTkRf
U1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCXN0Y2It
PmFzb2MuY29udGV4dCA9IGF2LT5hc3NvY192YWx1ZTsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
VENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5f
VENQUE9PTCkgfHwKKwkJCSAgICAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1VE
UFRZUEUpICYmCisJCQkgICAgICgoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSB8
fAorCQkJICAgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykpKSkgeworCQkJCVND
VFBfSU5QX1dMT0NLKGlucCk7CisJCQkJaW5wLT5zY3RwX2NvbnRleHQgPSBhdi0+YXNzb2NfdmFs
dWU7CisJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQkJfQorCQkJaWYgKChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VRFBUWVBFKSAmJgorCQkJICAgICgoYXYtPmFzc29jX2lk
ID09IFNDVFBfQ1VSUkVOVF9BU1NPQykgfHwKKwkJCSAgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQ
X0FMTF9BU1NPQykpKSB7CisJCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQlMSVNUX0ZPUkVB
Q0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlzdCkgeworCQkJCQlTQ1RQ
X1RDQl9MT0NLKHN0Y2IpOworCQkJCQlzdGNiLT5hc29jLmNvbnRleHQgPSBhdi0+YXNzb2NfdmFs
dWU7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfUlVO
TE9DSyhpbnApOworCQkJfQorCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfVlJGX0lEOgor
CXsKKwkJdWludDMyX3QgKmRlZmF1bHRfdnJmaWQ7CisjaWZkZWYgU0NUUF9NVlJGCisJCWludCBp
OworI2VuZGlmCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoZGVmYXVsdF92cmZpZCwgb3B0dmFsLCB1
aW50MzJfdCwgb3B0c2l6ZSk7CisJCWlmICgqZGVmYXVsdF92cmZpZCA+IFNDVFBfTUFYX1ZSRl9J
RCkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJYnJlYWs7CisJCX0K
KyNpZmRlZiBTQ1RQX01WUkYKKwkJZm9yIChpID0gMDsgaSA8IGlucC0+bnVtX3ZyZnM7IGkrKykg
eworCQkJLyogVGhlIFZSRiBtdXN0IGJlIGluIHRoZSBWUkYgbGlzdCAqLworCQkJaWYgKCpkZWZh
dWx0X3ZyZmlkID09IGlucC0+bV92cmZfaWRzW2ldKSB7CisJCQkJU0NUUF9JTlBfV0xPQ0soaW5w
KTsKKwkJCQlpbnAtPmRlZl92cmZfaWQgPSAqZGVmYXVsdF92cmZpZDsKKwkJCQlTQ1RQX0lOUF9X
VU5MT0NLKGlucCk7CisJCQkJZ290byBzY3RwX2RvbmU7CisJCQl9CisJCX0KKwkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFM
KTsKKwkJZXJyb3IgPSBFSU5WQUw7CisjZWxzZQorCQlpbnAtPmRlZl92cmZfaWQgPSAqZGVmYXVs
dF92cmZpZDsKKyNlbmRpZgorI2lmZGVmIFNDVFBfTVZSRgorCXNjdHBfZG9uZToKKyNlbmRpZgor
CQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0RFTF9WUkZfSUQ6CisJeworI2lmZGVmIFNDVFBfTVZS
RgorCQl1aW50MzJfdCAqZGVsX3ZyZmlkOworCQlpbnQgaSwgZm5kID0gMDsKKworCQlTQ1RQX0NI
RUNLX0FORF9DQVNUKGRlbF92cmZpZCwgb3B0dmFsLCB1aW50MzJfdCwgb3B0c2l6ZSk7CisJCWlm
ICgqZGVsX3ZyZmlkID4gU0NUUF9NQVhfVlJGX0lEKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJy
b3IgPSBFSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlpZiAoaW5wLT5udW1fdnJmcyA9PSAxKSB7
CisJCQkvKiBDYW4ndCBkZWxldGUgbGFzdCBvbmUgKi8KKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQllcnJv
ciA9IEVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfVU5CT1VORCkgPT0gMCkgeworCQkJLyogQ2FuJ3QgYWRkIG1vcmUgb25jZSB5
b3UgYXJlIGJvdW5kICovCisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQli
cmVhazsKKwkJfQorCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQlmb3IgKGkgPSAwOyBpIDwgaW5w
LT5udW1fdnJmczsgaSsrKSB7CisJCQlpZiAoKmRlbF92cmZpZCA9PSBpbnAtPm1fdnJmX2lkc1tp
XSkgeworCQkJCWZuZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKCFmbmQpIHsK
KwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9V
U1JSRVEsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWlm
IChpICE9IChpbnAtPm51bV92cmZzIC0gMSkpIHsKKwkJCS8qIFRha2UgYm90dG9tIG9uZSBhbmQg
bW92ZSB0byB0aGlzIHNsb3QgKi8KKwkJCWlucC0+bV92cmZfaWRzW2ldID0gaW5wLT5tX3ZyZl9p
ZHNbKGlucC0+bnVtX3ZyZnMtMSldOworCQl9CisJCWlmICgqZGVsX3ZyZmlkID09IGlucC0+ZGVm
X3ZyZl9pZCkgeworCQkJLyogVGFrZSB0aGUgZmlyc3Qgb25lIGFzIHRoZSBuZXcgZGVmYXVsdCAq
LworCQkJaW5wLT5kZWZfdnJmX2lkID0gaW5wLT5tX3ZyZl9pZHNbMF07CisJCX0KKwkJLyogRHJv
cCB0aGUgbnVtYmVyIGJ5IG9uZSBraWxsaW5nIGxhc3Qgb25lICovCisJCWlucC0+bnVtX3ZyZnMt
LTsKKyNlbHNlCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVPUE5PVFNVUFApOworCQllcnJvciA9IEVPUE5PVFNVUFA7CisjZW5k
aWYKKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9BRERfVlJGX0lEOgorCXsKKyNpZmRlZiBTQ1RQ
X01WUkYKKwkJdWludDMyX3QgKmFkZF92cmZpZDsKKwkJaW50IGk7CisKKwkJU0NUUF9DSEVDS19B
TkRfQ0FTVChhZGRfdnJmaWQsIG9wdHZhbCwgdWludDMyX3QsIG9wdHNpemUpOworCQlpZiAoKmFk
ZF92cmZpZCA+IFNDVFBfTUFYX1ZSRl9JRCkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0g
RUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19VTkJPVU5EKSA9PSAwKSB7CisJCQkvKiBDYW4ndCBhZGQgbW9yZSBvbmNlIHlvdSBh
cmUgYm91bmQgKi8KKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCWJyZWFr
OworCQl9CisJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCS8qIFZlcmlmeSBpdHMgbm90IGFscmVh
ZHkgaGVyZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgaW5wLT5udW1fdnJmczsgaSsrKSB7CisJCQlp
ZiAoKmFkZF92cmZpZCA9PSBpbnAtPm1fdnJmX2lkc1tpXSkgeworCQkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVBTFJFQURZKTsK
KwkJCQllcnJvciA9IEVBTFJFQURZOworCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCQli
cmVhazsKKwkJCX0KKwkJfQorCQlpZiAoKGlucC0+bnVtX3ZyZnMgKyAxKSA+IGlucC0+dnJmX3Np
emUpIHsKKwkJCS8qIG5lZWQgdG8gZ3JvdyBhcnJheSAqLworCQkJdWludDMyX3QgKnRhcnJheTsK
KwkJCVNDVFBfTUFMTE9DKHRhcnJheSwgdWludDMyX3QgKiwKKwkJCQkgICAgKHNpemVvZih1aW50
MzJfdCkgKiAoaW5wLT52cmZfc2l6ZSArIFNDVFBfREVGQVVMVF9WUkZfU0laRSkpLAorCQkJCSAg
ICBTQ1RQX01fTVZSRik7CisJCQlpZiAodGFycmF5ID09IE5VTEwpIHsKKwkJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9NRU0p
OworCQkJCWVycm9yID0gRU5PTUVNOworCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCQli
cmVhazsKKwkJCX0KKwkJCW1lbWNweSh0YXJyYXksIGlucC0+bV92cmZfaWRzLCAoc2l6ZW9mKHVp
bnQzMl90KSAqIGlucC0+dnJmX3NpemUpKTsKKwkJCVNDVFBfRlJFRShpbnAtPm1fdnJmX2lkcywg
U0NUUF9NX01WUkYpOworCQkJaW5wLT5tX3ZyZl9pZHMgPSB0YXJyYXk7CisJCQlpbnAtPnZyZl9z
aXplICs9IFNDVFBfREVGQVVMVF9WUkZfU0laRTsKKwkJfQorCQlpbnAtPm1fdnJmX2lkc1tpbnAt
Pm51bV92cmZzXSA9ICphZGRfdnJmaWQ7CisJCWlucC0+bnVtX3ZyZnMrKzsKKwkJU0NUUF9JTlBf
V1VOTE9DSyhpbnApOworI2Vsc2UKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU9QTk9UU1VQUCk7CisJCWVycm9yID0gRU9QTk9U
U1VQUDsKKyNlbmRpZgorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0RFTEFZRURfU0FDSzoKKwl7
CisJCXN0cnVjdCBzY3RwX3NhY2tfaW5mbyAqc2FjazsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNU
KHNhY2ssIG9wdHZhbCwgc3RydWN0IHNjdHBfc2Fja19pbmZvLCBvcHRzaXplKTsKKwkJU0NUUF9G
SU5EX1NUQ0IoaW5wLCBzdGNiLCBzYWNrLT5zYWNrX2Fzc29jX2lkKTsKKwkJaWYgKHNhY2stPnNh
Y2tfZGVsYXkpIHsKKwkJCWlmIChzYWNrLT5zYWNrX2RlbGF5ID4gU0NUUF9NQVhfU0FDS19ERUxB
WSkgeworCQkJCWVycm9yID0gRUlOVkFMOworCQkJCWlmIChzdGNiICE9IE5VTEwpIHsKKwkJCQkJ
U0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlp
ZiAoc3RjYikgeworCQkJaWYgKHNhY2stPnNhY2tfZGVsYXkpIHsKKwkJCQlzdGNiLT5hc29jLmRl
bGF5ZWRfYWNrID0gc2Fjay0+c2Fja19kZWxheTsKKwkJCX0KKwkJCWlmIChzYWNrLT5zYWNrX2Zy
ZXEpIHsKKwkJCQlzdGNiLT5hc29jLnNhY2tfZnJlcSA9IHNhY2stPnNhY2tfZnJlcTsKKwkJCX0K
KwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUpICYmCisJCQkgICAgICgoc2Fjay0+c2Fja19h
c3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykgfHwKKwkJCSAgICAgIChzYWNrLT5zYWNrX2Fz
c29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkpKSB7CisJCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsK
KwkJCQlpZiAoc2Fjay0+c2Fja19kZWxheSkgeworCQkJCQlpbnAtPnNjdHBfZXAuc2N0cF90aW1l
b3V0dGlja3NbU0NUUF9USU1FUl9SRUNWXSA9IHNjdHBfbXNlY3NfdG9fdGlja3Moc2Fjay0+c2Fj
a19kZWxheSk7CisJCQkJfQorCQkJCWlmIChzYWNrLT5zYWNrX2ZyZXEpIHsKKwkJCQkJaW5wLT5z
Y3RwX2VwLnNjdHBfc2Fja19mcmVxID0gc2Fjay0+c2Fja19mcmVxOworCQkJCX0KKwkJCQlTQ1RQ
X0lOUF9XVU5MT0NLKGlucCk7CisJCQl9CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX1VEUFRZUEUpICYmCisJCQkgICAgKChzYWNrLT5zYWNrX2Fzc29jX2lkID09IFND
VFBfQ1VSUkVOVF9BU1NPQykgfHwKKwkJCSAgICAgKHNhY2stPnNhY2tfYXNzb2NfaWQgPT0gU0NU
UF9BTExfQVNTT0MpKSkgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJTElTVF9GT1JF
QUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKKwkJCQkJU0NU
UF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQkJaWYgKHNhY2stPnNhY2tfZGVsYXkpIHsKKwkJCQkJCXN0
Y2ItPmFzb2MuZGVsYXllZF9hY2sgPSBzYWNrLT5zYWNrX2RlbGF5OworCQkJCQl9CisJCQkJCWlm
IChzYWNrLT5zYWNrX2ZyZXEpIHsKKwkJCQkJCXN0Y2ItPmFzb2Muc2Fja19mcmVxID0gc2Fjay0+
c2Fja19mcmVxOworCQkJCQl9CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQl9CisJ
CQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfQorCQl9CisJCWJyZWFrOworCX0KKwljYXNl
IFNDVFBfQVVUSF9DSFVOSzoKKwl7CisJCXN0cnVjdCBzY3RwX2F1dGhjaHVuayAqc2F1dGg7CisK
KwkJU0NUUF9DSEVDS19BTkRfQ0FTVChzYXV0aCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hdXRoY2h1
bmssIG9wdHNpemUpOworCisJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCWlmIChzY3RwX2F1dGhf
YWRkX2NodW5rKHNhdXRoLT5zYXV0aF9jaHVuaywgaW5wLT5zY3RwX2VwLmxvY2FsX2F1dGhfY2h1
bmtzKSkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOworCQl9IGVsc2Ugewor
CQkJaW5wLT5hdXRoX3N1cHBvcnRlZCA9IDE7CisJCX0KKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnAp
OworCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0FVVEhfS0VZOgorCXsKKwkJc3RydWN0IHNjdHBf
YXV0aGtleSAqc2NhOworCQlzdHJ1Y3Qgc2N0cF9rZXloZWFkICpzaGFyZWRfa2V5czsKKwkJc2N0
cF9zaGFyZWRrZXlfdCAqc2hhcmVkX2tleTsKKwkJc2N0cF9rZXlfdCAqa2V5ID0gTlVMTDsKKwkJ
c2l6ZV90IHNpemU7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChzY2EsIG9wdHZhbCwgc3RydWN0
IHNjdHBfYXV0aGtleSwgb3B0c2l6ZSk7CisJCWlmIChzY2EtPnNjYV9rZXlsZW5ndGggPT0gMCkg
eworCQkJc2l6ZSA9IG9wdHNpemUgLSBzaXplb2Yoc3RydWN0IHNjdHBfYXV0aGtleSk7CisJCX0g
ZWxzZSB7CisJCQlpZiAoc2NhLT5zY2Ffa2V5bGVuZ3RoICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2F1
dGhrZXkpIDw9IG9wdHNpemUpIHsKKwkJCQlzaXplID0gc2NhLT5zY2Ffa2V5bGVuZ3RoOworCQkJ
fSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJCWJyZWFr
OworCQkJfQorCQl9CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgc2NhLT5zY2FfYXNzb2Nf
aWQpOworCisJCWlmIChzdGNiKSB7CisJCQlzaGFyZWRfa2V5cyA9ICZzdGNiLT5hc29jLnNoYXJl
ZF9rZXlzOworCQkJLyogY2xlYXIgdGhlIGNhY2hlZCBrZXlzIGZvciB0aGlzIGtleSBpZCAqLwor
CQkJc2N0cF9jbGVhcl9jYWNoZWRrZXlzKHN0Y2IsIHNjYS0+c2NhX2tleW51bWJlcik7CisJCQkv
KgorCQkJICogY3JlYXRlIHRoZSBuZXcgc2hhcmVkIGtleSBhbmQKKwkJCSAqIGluc2VydC9yZXBs
YWNlIGl0CisJCQkgKi8KKwkJCWlmIChzaXplID4gMCkgeworCQkJCWtleSA9IHNjdHBfc2V0X2tl
eShzY2EtPnNjYV9rZXksICh1aW50MzJfdCkgc2l6ZSk7CisJCQkJaWYgKGtleSA9PSBOVUxMKSB7
CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIEVOT01FTSk7CisJCQkJCWVycm9yID0gRU5PTUVNOworCQkJCQlTQ1RQX1RDQl9V
TkxPQ0soc3RjYik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCXNoYXJlZF9rZXkgPSBz
Y3RwX2FsbG9jX3NoYXJlZGtleSgpOworCQkJaWYgKHNoYXJlZF9rZXkgPT0gTlVMTCkgeworCQkJ
CXNjdHBfZnJlZV9rZXkoa2V5KTsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9NRU0pOworCQkJCWVycm9yID0gRU5PTUVN
OworCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXNoYXJl
ZF9rZXktPmtleSA9IGtleTsKKwkJCXNoYXJlZF9rZXktPmtleWlkID0gc2NhLT5zY2Ffa2V5bnVt
YmVyOworCQkJZXJyb3IgPSBzY3RwX2luc2VydF9zaGFyZWRrZXkoc2hhcmVkX2tleXMsIHNoYXJl
ZF9rZXkpOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJaWYgKChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAgIChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJICAgICgoaW5w
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkgJiYKKwkJCSAgICAgKChzY2Et
PnNjYV9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykgfHwKKwkJCSAgICAgIChzY2EtPnNj
YV9hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykpKSkgeworCQkJCVNDVFBfSU5QX1dMT0NLKGlu
cCk7CisJCQkJc2hhcmVkX2tleXMgPSAmaW5wLT5zY3RwX2VwLnNoYXJlZF9rZXlzOworCQkJCS8q
CisJCQkJICogY2xlYXIgdGhlIGNhY2hlZCBrZXlzIG9uIGFsbCBhc3NvY3MgZm9yCisJCQkJICog
dGhpcyBrZXkgaWQKKwkJCQkgKi8KKwkJCQlzY3RwX2NsZWFyX2NhY2hlZGtleXNfZXAoaW5wLCBz
Y2EtPnNjYV9rZXludW1iZXIpOworCQkJCS8qCisJCQkJICogY3JlYXRlIHRoZSBuZXcgc2hhcmVk
IGtleSBhbmQKKwkJCQkgKiBpbnNlcnQvcmVwbGFjZSBpdAorCQkJCSAqLworCQkJCWlmIChzaXpl
ID4gMCkgeworCQkJCQlrZXkgPSBzY3RwX3NldF9rZXkoc2NhLT5zY2Ffa2V5LCAodWludDMyX3Qp
IHNpemUpOworCQkJCQlpZiAoa2V5ID09IE5VTEwpIHsKKwkJCQkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT01FTSk7CisJCQkJ
CQllcnJvciA9IEVOT01FTTsKKwkJCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCQkJCWJy
ZWFrOworCQkJCQl9CisJCQkJfQorCQkJCXNoYXJlZF9rZXkgPSBzY3RwX2FsbG9jX3NoYXJlZGtl
eSgpOworCQkJCWlmIChzaGFyZWRfa2V5ID09IE5VTEwpIHsKKwkJCQkJc2N0cF9mcmVlX2tleShr
ZXkpOworCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFTk9NRU0pOworCQkJCQllcnJvciA9IEVOT01FTTsKKwkJCQkJU0NUUF9J
TlBfV1VOTE9DSyhpbnApOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJc2hhcmVkX2tleS0+a2V5
ID0ga2V5OworCQkJCXNoYXJlZF9rZXktPmtleWlkID0gc2NhLT5zY2Ffa2V5bnVtYmVyOworCQkJ
CWVycm9yID0gc2N0cF9pbnNlcnRfc2hhcmVka2V5KHNoYXJlZF9rZXlzLCBzaGFyZWRfa2V5KTsK
KwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQl9CisJCQlpZiAoKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUpICYmCisJCQkgICAgKChzY2EtPnNjYV9hc3NvY19p
ZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MpIHx8CisJCQkgICAgIChzY2EtPnNjYV9hc3NvY19pZCA9
PSBTQ1RQX0FMTF9BU1NPQykpKSB7CisJCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQlMSVNU
X0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlzdCkgeworCQkJ
CQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJCQlzaGFyZWRfa2V5cyA9ICZzdGNiLT5hc29jLnNo
YXJlZF9rZXlzOworCQkJCQkvKiBjbGVhciB0aGUgY2FjaGVkIGtleXMgZm9yIHRoaXMga2V5IGlk
ICovCisJCQkJCXNjdHBfY2xlYXJfY2FjaGVka2V5cyhzdGNiLCBzY2EtPnNjYV9rZXludW1iZXIp
OworCQkJCQkvKgorCQkJCQkgKiBjcmVhdGUgdGhlIG5ldyBzaGFyZWQga2V5IGFuZAorCQkJCQkg
KiBpbnNlcnQvcmVwbGFjZSBpdAorCQkJCQkgKi8KKwkJCQkJaWYgKHNpemUgPiAwKSB7CisJCQkJ
CQlrZXkgPSBzY3RwX3NldF9rZXkoc2NhLT5zY2Ffa2V5LCAodWludDMyX3QpIHNpemUpOworCQkJ
CQkJaWYgKGtleSA9PSBOVUxMKSB7CisJCQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJ
CQkJCWNvbnRpbnVlOworCQkJCQkJfQorCQkJCQl9CisJCQkJCXNoYXJlZF9rZXkgPSBzY3RwX2Fs
bG9jX3NoYXJlZGtleSgpOworCQkJCQlpZiAoc2hhcmVkX2tleSA9PSBOVUxMKSB7CisJCQkJCQlz
Y3RwX2ZyZWVfa2V5KGtleSk7CisJCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCQlj
b250aW51ZTsKKwkJCQkJfQorCQkJCQlzaGFyZWRfa2V5LT5rZXkgPSBrZXk7CisJCQkJCXNoYXJl
ZF9rZXktPmtleWlkID0gc2NhLT5zY2Ffa2V5bnVtYmVyOworCQkJCQllcnJvciA9IHNjdHBfaW5z
ZXJ0X3NoYXJlZGtleShzaGFyZWRfa2V5cywgc2hhcmVkX2tleSk7CisJCQkJCVNDVFBfVENCX1VO
TE9DSyhzdGNiKTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfQorCQl9
CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfSE1BQ19JREVOVDoKKwl7CisJCXN0cnVjdCBzY3Rw
X2htYWNhbGdvICpzaG1hYzsKKwkJc2N0cF9obWFjbGlzdF90ICpobWFjbGlzdDsKKwkJdWludDE2
X3QgaG1hY2lkOworCQl1aW50MzJfdCBpOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc2htYWMs
IG9wdHZhbCwgc3RydWN0IHNjdHBfaG1hY2FsZ28sIG9wdHNpemUpOworCQlpZiAoKG9wdHNpemUg
PCBzaXplb2Yoc3RydWN0IHNjdHBfaG1hY2FsZ28pICsgc2htYWMtPnNobWFjX251bWJlcl9vZl9p
ZGVudHMgKiBzaXplb2YodWludDE2X3QpKSB8fAorCQkgICAgKHNobWFjLT5zaG1hY19udW1iZXJf
b2ZfaWRlbnRzID4gMHhmZmZmKSkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFM
OworCQkJYnJlYWs7CisJCX0KKworCQlobWFjbGlzdCA9IHNjdHBfYWxsb2NfaG1hY2xpc3QoKHVp
bnQxNl90KXNobWFjLT5zaG1hY19udW1iZXJfb2ZfaWRlbnRzKTsKKwkJaWYgKGhtYWNsaXN0ID09
IE5VTEwpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVOT01FTSk7CisJCQllcnJvciA9IEVOT01FTTsKKwkJCWJyZWFrOwor
CQl9CisJCWZvciAoaSA9IDA7IGkgPCBzaG1hYy0+c2htYWNfbnVtYmVyX29mX2lkZW50czsgaSsr
KSB7CisJCQlobWFjaWQgPSBzaG1hYy0+c2htYWNfaWRlbnRzW2ldOworCQkJaWYgKHNjdHBfYXV0
aF9hZGRfaG1hY2lkKGhtYWNsaXN0LCBobWFjaWQpKSB7CisJCQkJLyogaW52YWxpZCBITUFDcyB3
ZXJlIGZvdW5kICovOworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJ
c2N0cF9mcmVlX2htYWNsaXN0KGhtYWNsaXN0KTsKKwkJCQlnb3RvIHNjdHBfc2V0X2htYWNfZG9u
ZTsKKwkJCX0KKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgaG1hY2xpc3QtPm51bV9hbGdvOyBpKysp
IHsKKwkJCWlmIChobWFjbGlzdC0+aG1hY1tpXSA9PSBTQ1RQX0FVVEhfSE1BQ19JRF9TSEExKSB7
CisJCQkJLyogYWxyZWFkeSBpbiBsaXN0ICovCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYg
KGkgPT0gaG1hY2xpc3QtPm51bV9hbGdvKSB7CisJCQkvKiBub3QgZm91bmQgaW4gbGlzdCAqLwor
CQkJc2N0cF9mcmVlX2htYWNsaXN0KGhtYWNsaXN0KTsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQllcnJv
ciA9IEVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCS8qIHNldCBpdCBvbiB0aGUgZW5kcG9pbnQg
Ki8KKwkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJaWYgKGlucC0+c2N0cF9lcC5sb2NhbF9obWFj
cykKKwkJCXNjdHBfZnJlZV9obWFjbGlzdChpbnAtPnNjdHBfZXAubG9jYWxfaG1hY3MpOworCQlp
bnAtPnNjdHBfZXAubG9jYWxfaG1hY3MgPSBobWFjbGlzdDsKKwkJU0NUUF9JTlBfV1VOTE9DSyhp
bnApOworCXNjdHBfc2V0X2htYWNfZG9uZToKKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9BVVRI
X0FDVElWRV9LRVk6CisJeworCQlzdHJ1Y3Qgc2N0cF9hdXRoa2V5aWQgKnNjYWN0OworCisJCVND
VFBfQ0hFQ0tfQU5EX0NBU1Qoc2NhY3QsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXV0aGtleWlkLCBv
cHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBzY2FjdC0+c2NhY3RfYXNzb2Nf
aWQpOworCisJCS8qIHNldCB0aGUgYWN0aXZlIGtleSBvbiB0aGUgcmlnaHQgcGxhY2UgKi8KKwkJ
aWYgKHN0Y2IpIHsKKwkJCS8qIHNldCB0aGUgYWN0aXZlIGtleSBvbiB0aGUgYXNzb2MgKi8KKwkJ
CWlmIChzY3RwX2F1dGhfc2V0YWN0aXZla2V5KHN0Y2IsCisJCQkJCQkgICBzY2FjdC0+c2NhY3Rf
a2V5bnVtYmVyKSkgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLAor
CQkJCQkJICAgIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwKKwkJCQkJCSAgICBFSU5WQUwpOworCQkJ
CWVycm9yID0gRUlOVkFMOworCQkJfQorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVs
c2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8
fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8
fAorCQkJICAgICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkgJiYK
KwkJCSAgICAgKChzY2FjdC0+c2NhY3RfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpIHx8
CisJCQkgICAgICAoc2NhY3QtPnNjYWN0X2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkpKSB7
CisJCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJCQlpZiAoc2N0cF9hdXRoX3NldGFjdGl2ZWtl
eV9lcChpbnAsIHNjYWN0LT5zY2FjdF9rZXludW1iZXIpKSB7CisJCQkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJ
CQkJCWVycm9yID0gRUlOVkFMOworCQkJCX0KKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJ
CQl9CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUpICYm
CisJCQkgICAgKChzY2FjdC0+c2NhY3RfYXNzb2NfaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09DKSB8
fAorCQkJICAgICAoc2NhY3QtPnNjYWN0X2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkpIHsK
KwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJCUxJU1RfRk9SRUFDSChzdGNiLCAmaW5wLT5z
Y3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7CisJCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7
CisJCQkJCXNjdHBfYXV0aF9zZXRhY3RpdmVrZXkoc3RjYiwgc2NhY3QtPnNjYWN0X2tleW51bWJl
cik7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfUlVO
TE9DSyhpbnApOworCQkJfQorCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfQVVUSF9ERUxF
VEVfS0VZOgorCXsKKwkJc3RydWN0IHNjdHBfYXV0aGtleWlkICpzY2RlbDsKKworCQlTQ1RQX0NI
RUNLX0FORF9DQVNUKHNjZGVsLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2F1dGhrZXlpZCwgb3B0c2l6
ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgc2NkZWwtPnNjYWN0X2Fzc29jX2lkKTsK
KworCQkvKiBkZWxldGUgdGhlIGtleSBmcm9tIHRoZSByaWdodCBwbGFjZSAqLworCQlpZiAoc3Rj
YikgeworCQkJaWYgKHNjdHBfZGVsZXRlX3NoYXJlZGtleShzdGNiLCBzY2RlbC0+c2NhY3Rfa2V5
bnVtYmVyKSkgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJ
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKChpbnAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19VRFBUWVBFKSAmJgorCQkJICAgICAoKHNjZGVsLT5zY2FjdF9h
c3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykgfHwKKwkJCSAgICAgIChzY2RlbC0+c2NhY3Rf
YXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSkpIHsKKwkJCQlTQ1RQX0lOUF9XTE9DSyhpbnAp
OworCQkJCWlmIChzY3RwX2RlbGV0ZV9zaGFyZWRrZXlfZXAoaW5wLCBzY2RlbC0+c2NhY3Rfa2V5
bnVtYmVyKSkgeworCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQl9
CisJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQkJfQorCQkJaWYgKChpbnAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19VRFBUWVBFKSAmJgorCQkJICAgICgoc2NkZWwtPnNjYWN0X2Fz
c29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQykgfHwKKwkJCSAgICAgKHNjZGVsLT5zY2FjdF9h
c3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykpKSB7CisJCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsK
KwkJCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlz
dCkgeworCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJCQlzY3RwX2RlbGV0ZV9zaGFyZWRr
ZXkoc3RjYiwgc2NkZWwtPnNjYWN0X2tleW51bWJlcik7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhz
dGNiKTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfQorCQl9CisJCWJy
ZWFrOworCX0KKwljYXNlIFNDVFBfQVVUSF9ERUFDVElWQVRFX0tFWToKKwl7CisJCXN0cnVjdCBz
Y3RwX2F1dGhrZXlpZCAqa2V5aWQ7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChrZXlpZCwgb3B0
dmFsLCBzdHJ1Y3Qgc2N0cF9hdXRoa2V5aWQsIG9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihp
bnAsIHN0Y2IsIGtleWlkLT5zY2FjdF9hc3NvY19pZCk7CisKKwkJLyogZGVhY3RpdmF0ZSB0aGUg
a2V5IGZyb20gdGhlIHJpZ2h0IHBsYWNlICovCisJCWlmIChzdGNiKSB7CisJCQlpZiAoc2N0cF9k
ZWFjdF9zaGFyZWRrZXkoc3RjYiwga2V5aWQtPnNjYWN0X2tleW51bWJlcikpIHsKKwkJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
SU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0
Y2IpOworCQl9IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFH
U19UQ1BUWVBFKSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19J
Tl9UQ1BQT09MKSB8fAorCQkJICAgICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
VURQVFlQRSkgJiYKKwkJCSAgICAgKChrZXlpZC0+c2NhY3RfYXNzb2NfaWQgPT0gU0NUUF9GVVRV
UkVfQVNTT0MpIHx8CisJCQkgICAgICAoa2V5aWQtPnNjYWN0X2Fzc29jX2lkID09IFNDVFBfQUxM
X0FTU09DKSkpKSB7CisJCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJCQlpZiAoc2N0cF9kZWFj
dF9zaGFyZWRrZXlfZXAoaW5wLCBrZXlpZC0+c2NhY3Rfa2V5bnVtYmVyKSkgeworCQkJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
SU5WQUwpOworCQkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQl9CisJCQkJU0NUUF9JTlBfV1VOTE9D
SyhpbnApOworCQkJfQorCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19V
RFBUWVBFKSAmJgorCQkJICAgICgoa2V5aWQtPnNjYWN0X2Fzc29jX2lkID09IFNDVFBfQ1VSUkVO
VF9BU1NPQykgfHwKKwkJCSAgICAgKGtleWlkLT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0FMTF9B
U1NPQykpKSB7CisJCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQlMSVNUX0ZPUkVBQ0goc3Rj
YiwgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlzdCkgeworCQkJCQlTQ1RQX1RDQl9M
T0NLKHN0Y2IpOworCQkJCQlzY3RwX2RlYWN0X3NoYXJlZGtleShzdGNiLCBrZXlpZC0+c2NhY3Rf
a2V5bnVtYmVyKTsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCX0KKwkJCQlTQ1RQ
X0lOUF9SVU5MT0NLKGlucCk7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9F
TkFCTEVfU1RSRUFNX1JFU0VUOgorCXsKKwkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2Owor
CisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFs
dWUsIG9wdHNpemUpOworCQlpZiAoYXYtPmFzc29jX3ZhbHVlICYgKH5TQ1RQX0VOQUJMRV9WQUxV
RV9NQVNLKSkgeworCQkgICAgICAgIFNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJ
CWJyZWFrOworCQl9CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsK
KwkJaWYgKHN0Y2IpIHsKKwkJCXN0Y2ItPmFzb2MubG9jYWxfc3RycmVzZXRfc3VwcG9ydCA9ICh1
aW50OF90KWF2LT5hc3NvY192YWx1ZTsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBl
bHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkg
fHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkg
fHwKKwkJCSAgICAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUpICYm
CisJCQkgICAgICgoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSB8fAorCQkJICAg
ICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykpKSkgeworCQkJCVNDVFBfSU5QX1dM
T0NLKGlucCk7CisJCQkJaW5wLT5sb2NhbF9zdHJyZXNldF9zdXBwb3J0ID0gKHVpbnQ4X3QpYXYt
PmFzc29jX3ZhbHVlOworCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCX0KKwkJCWlmICgo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkgJiYKKwkJCSAgICAoKGF2
LT5hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MpIHx8CisJCQkgICAgIChhdi0+YXNzb2Nf
aWQgPT0gU0NUUF9BTExfQVNTT0MpKSkgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJ
TElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsK
KwkJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQkJc3RjYi0+YXNvYy5sb2NhbF9zdHJyZXNl
dF9zdXBwb3J0ID0gKHVpbnQ4X3QpYXYtPmFzc29jX3ZhbHVlOworCQkJCQlTQ1RQX1RDQl9VTkxP
Q0soc3RjYik7CisJCQkJfQorCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0KKwkJfQor
CQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX1JFU0VUX1NUUkVBTVM6CisJeworCQlzdHJ1Y3Qgc2N0
cF9yZXNldF9zdHJlYW1zICpzdHJyc3Q7CisJCWludCBpLCBzZW5kX291dCA9IDA7CisJCWludCBz
ZW5kX2luID0gMDsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHN0cnJzdCwgb3B0dmFsLCBzdHJ1
Y3Qgc2N0cF9yZXNldF9zdHJlYW1zLCBvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBz
dGNiLCBzdHJyc3QtPnNyc19hc3NvY19pZCk7CisJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVOT0VOVCk7CisJCQllcnJvciA9IEVOT0VOVDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChzdGNi
LT5hc29jLnJlY29uZmlnX3N1cHBvcnRlZCA9PSAwKSB7CisJCQkvKgorCQkJICogUGVlciBkb2Vz
IG5vdCBzdXBwb3J0IHRoZSBjaHVuayB0eXBlLgorCQkJICovCisJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFT1BOT1RTVVBQKTsK
KwkJCWVycm9yID0gRU9QTk9UU1VQUDsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCWJy
ZWFrOworCQl9CisJCWlmIChTQ1RQX0dFVF9TVEFURShzdGNiKSAhPSBTQ1RQX1NUQVRFX09QRU4p
IHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChzaXplb2Yoc3RydWN0IHNjdHBfcmVzZXRf
c3RyZWFtcykgKworCQkgICAgc3RycnN0LT5zcnNfbnVtYmVyX3N0cmVhbXMgKiBzaXplb2YodWlu
dDE2X3QpID4gb3B0c2l6ZSkgeworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlTQ1RQX1RDQl9VTkxP
Q0soc3RjYik7CisJCQlicmVhazsKKwkJfQorCQlpZiAoc3RycnN0LT5zcnNfZmxhZ3MgJiBTQ1RQ
X1NUUkVBTV9SRVNFVF9JTkNPTUlORykgeworCQkJc2VuZF9pbiA9IDE7CisJCQlpZiAoc3RjYi0+
YXNvYy5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQUxSRUFEWSk7CisJCQkJ
ZXJyb3IgPSBFQUxSRUFEWTsKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJYnJlYWs7
CisJCQl9CisJCX0KKwkJaWYgKHN0cnJzdC0+c3JzX2ZsYWdzICYgU0NUUF9TVFJFQU1fUkVTRVRf
T1VUR09JTkcpIHsKKwkJCXNlbmRfb3V0ID0gMTsKKwkJfQorCQlpZiAoKHN0cnJzdC0+c3JzX251
bWJlcl9zdHJlYW1zID4gU0NUUF9NQVhfU1RSRUFNU19BVF9PTkNFX1JFU0VUKSAmJiBzZW5kX2lu
KSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfVVNSUkVRLCBFTk9NRU0pOworCQkJZXJyb3IgPSBFTk9NRU07CisJCQlTQ1RQX1RDQl9VTkxP
Q0soc3RjYik7CisJCQlicmVhazsKKwkJfQorCQlpZiAoKHNlbmRfaW4gPT0gMCkgJiYgKHNlbmRf
b3V0ID09IDApKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7CisJCQlicmVhazsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgc3Ry
cnN0LT5zcnNfbnVtYmVyX3N0cmVhbXM7IGkrKykgeworCQkJaWYgKChzZW5kX2luKSAmJgorCQkJ
ICAgIChzdHJyc3QtPnNyc19zdHJlYW1fbGlzdFtpXSA+PSBzdGNiLT5hc29jLnN0cmVhbWluY250
KSkgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJYnJlYWs7CisJ
CQl9CisJCQlpZiAoKHNlbmRfb3V0KSAmJgorCQkJICAgIChzdHJyc3QtPnNyc19zdHJlYW1fbGlz
dFtpXSA+PSBzdGNiLT5hc29jLnN0cmVhbW91dGNudCkpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJ
CWVycm9yID0gRUlOVkFMOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChlcnJvcikgewor
CQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHNlbmRfb3V0
KSB7CisJCQlpbnQgY250OworCQkJdWludDE2X3Qgc3RybTsKKwkJCWlmIChzdHJyc3QtPnNyc19u
dW1iZXJfc3RyZWFtcykgeworCQkJCWZvciAoaSA9IDAsIGNudCA9IDA7IGkgPCBzdHJyc3QtPnNy
c19udW1iZXJfc3RyZWFtczsgaSsrKSB7CisJCQkJCXN0cm0gPSBzdHJyc3QtPnNyc19zdHJlYW1f
bGlzdFtpXTsKKwkJCQkJaWYgKHN0Y2ItPmFzb2Muc3RybW91dFtzdHJtXS5zdGF0ZSA9PSBTQ1RQ
X1NUUkVBTV9PUEVOKSB7CisJCQkJCQlzdGNiLT5hc29jLnN0cm1vdXRbc3RybV0uc3RhdGUgPSBT
Q1RQX1NUUkVBTV9SRVNFVF9QRU5ESU5HOworCQkJCQkJY250Kys7CisJCQkJCX0KKwkJCQl9CisJ
CQl9IGVsc2UgeworCQkJCS8qIEl0cyBhbGwgKi8KKwkJCQlmb3IgKGkgPSAwLCBjbnQgPSAwOyBp
IDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7IGkrKykgeworCQkJCQlpZiAoc3RjYi0+YXNvYy5z
dHJtb3V0W2ldLnN0YXRlID09IFNDVFBfU1RSRUFNX09QRU4pIHsKKwkJCQkJCXN0Y2ItPmFzb2Mu
c3RybW91dFtpXS5zdGF0ZSA9IFNDVFBfU1RSRUFNX1JFU0VUX1BFTkRJTkc7CisJCQkJCQljbnQr
KzsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAoc2VuZF9pbikgeworCQkJZXJyb3Ig
PSBzY3RwX3NlbmRfc3RyX3Jlc2V0X3JlcShzdGNiLCBzdHJyc3QtPnNyc19udW1iZXJfc3RyZWFt
cywKKwkJCQkJCQlzdHJyc3QtPnNyc19zdHJlYW1fbGlzdCwKKwkJCQkJCQlzZW5kX2luLCAwLCAw
LCAwLCAwLCAwKTsKKwkJfSBlbHNlIHsKKwkJCWVycm9yID0gc2N0cF9zZW5kX3N0cmVhbV9yZXNl
dF9vdXRfaWZfcG9zc2libGUoc3RjYiwgU0NUUF9TT19MT0NLRUQpOworCQl9CisJCWlmIChlcnJv
ciA9PSAwKSB7CisJCQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZS
T01fU1RSUlNUX1JFUSwgU0NUUF9TT19MT0NLRUQpOworCQl9IGVsc2UgeworCQkJIC8qCisJCQkg
ICogRm9yIG91dGdvaW5nIHN0cmVhbXMgZG9uJ3QgcmVwb3J0IGFueSBwcm9ibGVtcyBpbgorCQkJ
ICAqIHNlbmRpbmcgdGhlIHJlcXVlc3QgdG8gdGhlIGFwcGxpY2F0aW9uLgorCQkJICAqIFhYWDog
RG91YmxlIGNoZWNrIHJlc2V0dGluZyBpbmNvbWluZyBzdHJlYW1zLgorCQkJICAqLworCQkJZXJy
b3IgPSAwOworCQl9CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJYnJlYWs7CisJfQorCWNh
c2UgU0NUUF9BRERfU1RSRUFNUzoKKwl7CisJCXN0cnVjdCBzY3RwX2FkZF9zdHJlYW1zICpzdHJh
ZGQ7CisJCXVpbnQ4X3QgYWRkc3RyZWFtID0gMDsKKwkJdWludDE2X3QgYWRkX29fc3RybWNudCA9
IDA7CisJCXVpbnQxNl90IGFkZF9pX3N0cm1jbnQgPSAwOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NB
U1Qoc3RyYWRkLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2FkZF9zdHJlYW1zLCBvcHRzaXplKTsKKwkJ
U0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBzdHJhZGQtPnNhc19hc3NvY19pZCk7CisJCWlmIChz
dGNiID09IE5VTEwpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT0VOVCk7CisJCQllcnJvciA9IEVOT0VOVDsKKwkJCWJy
ZWFrOworCQl9CisJCWlmIChzdGNiLT5hc29jLnJlY29uZmlnX3N1cHBvcnRlZCA9PSAwKSB7CisJ
CQkvKgorCQkJICogUGVlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjaHVuayB0eXBlLgorCQkJICov
CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFT1BOT1RTVVBQKTsKKwkJCWVycm9yID0gRU9QTk9UU1VQUDsKKwkJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChTQ1RQX0dFVF9TVEFURShzdGNi
KSAhPSBTQ1RQX1NUQVRFX09QRU4pIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZB
TDsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChzdGNi
LT5hc29jLnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZykgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUFMUkVBRFkpOworCQkJ
ZXJyb3IgPSBFQUxSRUFEWTsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCWJyZWFrOwor
CQl9CisJCWlmICgoc3RyYWRkLT5zYXNfb3V0c3RybXMgPT0gMCkgJiYKKwkJICAgIChzdHJhZGQt
PnNhc19pbnN0cm1zID09IDApKSB7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCWdvdG8gc2tpcF9z
dHVmZjsKKwkJfQorCQlpZiAoc3RyYWRkLT5zYXNfb3V0c3RybXMpIHsKKwkJCWFkZHN0cmVhbSA9
IDE7CisJCQkvKiBXZSBhbGxvY2F0ZSBoZXJlICovCisJCQlhZGRfb19zdHJtY250ID0gc3RyYWRk
LT5zYXNfb3V0c3RybXM7CisJCQlpZiAoKCgoaW50KWFkZF9vX3N0cm1jbnQpICsgKChpbnQpc3Rj
Yi0+YXNvYy5zdHJlYW1vdXRjbnQpKSA+IDB4MDAwMGZmZmYpIHsKKwkJCQkvKiBZb3UgY2FuJ3Qg
aGF2ZSBtb3JlIHRoYW4gNjRrICovCisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJZ290byBza2lw
X3N0dWZmOworCQkJfQorCQl9CisJCWlmIChzdHJhZGQtPnNhc19pbnN0cm1zKSB7CisJCQlpbnQg
Y250OworCisJCQlhZGRzdHJlYW0gfD0gMjsKKwkJCS8qIFdlIGFsbG9jYXRlIGluc2lkZSBzY3Rw
X3NlbmRfc3RyX3Jlc2V0X3JlcSgpICovCisJCQlhZGRfaV9zdHJtY250ID0gc3RyYWRkLT5zYXNf
aW5zdHJtczsKKwkJCWNudCA9IGFkZF9pX3N0cm1jbnQ7CisJCQljbnQgKz0gc3RjYi0+YXNvYy5z
dHJlYW1pbmNudDsKKwkJCWlmIChjbnQgPiAweDAwMDBmZmZmKSB7CisJCQkJLyogWW91IGNhbid0
IGhhdmUgbW9yZSB0aGFuIDY0ayAqLworCQkJCWVycm9yID0gRUlOVkFMOworCQkJCWdvdG8gc2tp
cF9zdHVmZjsKKwkJCX0KKwkJCWlmIChjbnQgPiAoaW50KXN0Y2ItPmFzb2MubWF4X2luYm91bmRf
c3RyZWFtcykgeworCQkJCS8qIE1vcmUgdGhhbiB5b3UgYXJlIGFsbG93ZWQgKi8KKwkJCQllcnJv
ciA9IEVJTlZBTDsKKwkJCQlnb3RvIHNraXBfc3R1ZmY7CisJCQl9CisJCX0KKwkJZXJyb3IgPSBz
Y3RwX3NlbmRfc3RyX3Jlc2V0X3JlcShzdGNiLCAwLCBOVUxMLCAwLCAwLCBhZGRzdHJlYW0sIGFk
ZF9vX3N0cm1jbnQsIGFkZF9pX3N0cm1jbnQsIDApOworCQlzY3RwX2NodW5rX291dHB1dChpbnAs
IHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fU1RSUlNUX1JFUSwgU0NUUF9TT19MT0NLRUQpOworCXNr
aXBfc3R1ZmY6CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJYnJlYWs7CisJfQorCWNhc2Ug
U0NUUF9SRVNFVF9BU1NPQzoKKwl7CisJCWludCBpOworCQl1aW50MzJfdCAqdmFsdWU7CisKKwkJ
U0NUUF9DSEVDS19BTkRfQ0FTVCh2YWx1ZSwgb3B0dmFsLCB1aW50MzJfdCwgb3B0c2l6ZSk7CisJ
CVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgKHNjdHBfYXNzb2NfdCkgKnZhbHVlKTsKKwkJaWYg
KHN0Y2IgPT0gTlVMTCkgeworCQkgICAgICAgIFNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT0VOVCk7CisJCQllcnJvciA9IEVOT0VO
VDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChzdGNiLT5hc29jLnJlY29uZmlnX3N1cHBvcnRlZCA9
PSAwKSB7CisJCQkvKgorCQkJICogUGVlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjaHVuayB0eXBl
LgorCQkJICovCisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBFT1BOT1RTVVBQKTsKKwkJCWVycm9yID0gRU9QTk9UU1VQUDsKKwkJ
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChTQ1RQX0dFVF9T
VEFURShzdGNiKSAhPSBTQ1RQX1NUQVRFX09QRU4pIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQllcnJv
ciA9IEVJTlZBTDsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCWJyZWFrOworCQl9CisJ
CWlmIChzdGNiLT5hc29jLnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZykgeworCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUFMUkVB
RFkpOworCQkJZXJyb3IgPSBFQUxSRUFEWTsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJ
CWJyZWFrOworCQl9CisJCS8qIElzIHRoZXJlIGFueSBkYXRhIHBlbmRpbmcgaW4gdGhlIHNlbmQg
b3Igc2VudCBxdWV1ZXM/ICovCisJCWlmICghVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc2VuZF9x
dWV1ZSkgfHwKKwkJICAgICFUQUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5zZW50X3F1ZXVlKSkgewor
CQlidXN5X291dDoKKwkJCWVycm9yID0gRUJVU1k7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7CisJCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7CisJCQlicmVhazsKKwkJfQorCQkvKiBEbyBhbnkgc3RyZWFtcyBoYXZl
IGRhdGEgcXVldWVkPyAqLworCQlmb3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRj
bnQ7IGkrKykgeworCQkJaWYgKCFUQUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm91
dHF1ZXVlKSkgeworCQkJCWdvdG8gYnVzeV9vdXQ7CisJCQl9CisJCX0KKwkJZXJyb3IgPSBzY3Rw
X3NlbmRfc3RyX3Jlc2V0X3JlcShzdGNiLCAwLCBOVUxMLCAwLCAxLCAwLCAwLCAwLCAwKTsKKwkJ
c2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX1NUUlJTVF9SRVEs
IFNDVFBfU09fTE9DS0VEKTsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlicmVhazsKKwl9
CisJY2FzZSBTQ1RQX0NPTk5FQ1RfWDoKKwkJaWYgKG9wdHNpemUgPCAoc2l6ZW9mKGludCkgKyBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQllcnJvciA9
IEVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWVycm9yID0gc2N0cF9kb19jb25uZWN0X3goc28s
IGlucCwgb3B0dmFsLCBvcHRzaXplLCBwLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0NPTk5F
Q1RfWF9ERUxBWUVEOgorCQlpZiAob3B0c2l6ZSA8IChzaXplb2YoaW50KSArIHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW4pKSkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOwor
CQkJYnJlYWs7CisJCX0KKwkJZXJyb3IgPSBzY3RwX2RvX2Nvbm5lY3RfeChzbywgaW5wLCBvcHR2
YWwsIG9wdHNpemUsIHAsIDEpOworCQlicmVhazsKKwljYXNlIFNDVFBfQ09OTkVDVF9YX0NPTVBM
RVRFOgorCXsKKwkJc3RydWN0IHNvY2thZGRyICpzYTsKKworCQkvKiBGSVhNRSBNVDogY2hlY2sg
Y29ycmVjdD8gKi8KKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChzYSwgb3B0dmFsLCBzdHJ1Y3Qgc29j
a2FkZHIsIG9wdHNpemUpOworCisJCS8qIGZpbmQgdGNiICovCisJCWlmIChpbnAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpIHsKKwkJCVNDVFBfSU5QX1JMT0NLKGlucCk7
CisJCQlzdGNiID0gTElTVF9GSVJTVCgmaW5wLT5zY3RwX2Fzb2NfbGlzdCk7CisJCQlpZiAoc3Rj
YikgeworCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQl9CisJCQlTQ1RQX0lOUF9SVU5MT0NL
KGlucCk7CisJCX0gZWxzZSB7CisJCQkvKiBXZSBpbmNyZW1lbnQgaGVyZSBzaW5jZSBzY3RwX2Zp
bmRhc3NvY2lhdGlvbl9lcF9hZGRyKCkgd2lsCisJCQkgKiBkbyBhIGRlY3JlbWVudCBpZiBpdCBm
aW5kcyB0aGUgc3RjYiBhcyBsb25nIGFzIHRoZSBsb2NrZWQKKwkJCSAqIHRjYiAobGFzdCBhcmd1
bWVudCkgaXMgTk9UIGEgVENCLi4gYWthIE5VTEwuCisJCQkgKi8KKwkJCVNDVFBfSU5QX0lOQ1Jf
UkVGKGlucCk7CisJCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigmaW5wLCBz
YSwgTlVMTCwgTlVMTCwgTlVMTCk7CisJCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCQkJU0NUUF9J
TlBfREVDUl9SRUYoaW5wKTsKKwkJCX0KKwkJfQorCisJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIEVOT0VOVCk7CisJCQllcnJvciA9IEVOT0VOVDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChz
dGNiLT5hc29jLmRlbGF5ZWRfY29ubmVjdGlvbiA9PSAxKSB7CisJCQlzdGNiLT5hc29jLmRlbGF5
ZWRfY29ubmVjdGlvbiA9IDA7CisJCQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmc3RjYi0+
YXNvYy50aW1lX2VudGVyZWQpOworCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9J
TklULCBpbnAsIHN0Y2IsCisJCQkJCXN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwKKwkJ
CQkJU0NUUF9GUk9NX1NDVFBfVVNSUkVRICsgU0NUUF9MT0NfOCk7CisJCQlzY3RwX3NlbmRfaW5p
dGlhdGUoaW5wLCBzdGNiLCBTQ1RQX1NPX0xPQ0tFRCk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJ
ICogYWxyZWFkeSBleHBpcmVkIG9yIGRpZCBub3QgdXNlIGRlbGF5ZWQKKwkJCSAqIGNvbm5lY3R4
CisJCQkgKi8KKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVBTFJFQURZKTsKKwkJCWVycm9yID0gRUFMUkVBRFk7CisJCX0KKwkJ
U0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX01BWF9CVVJT
VDoKKwl7CisJCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKKworCQlTQ1RQX0NIRUNLX0FO
RF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCBvcHRzaXplKTsKKwkJ
U0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOworCisJCWlmIChzdGNiKSB7
CisJCQlzdGNiLT5hc29jLm1heF9idXJzdCA9IGF2LT5hc3NvY192YWx1ZTsKKwkJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX1VEUFRZUEUpICYmCisJCQkgICAgICgoYXYtPmFzc29jX2lkID09IFNDVFBfRlVU
VVJFX0FTU09DKSB8fAorCQkJICAgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykp
KSkgeworCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJaW5wLT5zY3RwX2VwLm1heF9idXJz
dCA9IGF2LT5hc3NvY192YWx1ZTsKKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQl9CisJ
CQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUpICYmCisJCQkg
ICAgKChhdi0+YXNzb2NfaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09DKSB8fAorCQkJICAgICAoYXYt
PmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkpIHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnAp
OworCQkJCUxJU1RfRk9SRUFDSChzdGNiLCAmaW5wLT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2Js
aXN0KSB7CisJCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQkJCXN0Y2ItPmFzb2MubWF4X2J1
cnN0ID0gYXYtPmFzc29jX3ZhbHVlOworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJ
fQorCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwl9CisJ
Y2FzZSBTQ1RQX01BWFNFRzoKKwl7CisJCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKKwkJ
aW50IG92aDsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3Rw
X2Fzc29jX3ZhbHVlLCBvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+
YXNzb2NfaWQpOworCisJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VO
RF9WNikgeworCQkJb3ZoID0gU0NUUF9NRURfT1ZFUkhFQUQ7CisJCX0gZWxzZSB7CisJCQlvdmgg
PSBTQ1RQX01FRF9WNF9PVkVSSEVBRDsKKwkJfQorCQlpZiAoc3RjYikgeworCQkJaWYgKGF2LT5h
c3NvY192YWx1ZSkgeworCQkJCXN0Y2ItPmFzb2Muc2N0cF9mcmFnX3BvaW50ID0gKGF2LT5hc3Nv
Y192YWx1ZSArIG92aCk7CisJCQl9IGVsc2UgeworCQkJCXN0Y2ItPmFzb2Muc2N0cF9mcmFnX3Bv
aW50ID0gU0NUUF9ERUZBVUxUX01BWFNFR01FTlQ7CisJCQl9CisJCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFH
U19VRFBUWVBFKSAmJgorCQkJICAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09D
KSkpIHsKKwkJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQkJCS8qIEZJWE1FIE1UOiBJIHRoaW5r
IHRoaXMgaXMgbm90IGluIHR1bmUgd2l0aCB0aGUgQVBJIElEICovCisJCQkJaWYgKGF2LT5hc3Nv
Y192YWx1ZSkgeworCQkJCQlpbnAtPnNjdHBfZnJhZ19wb2ludCA9IChhdi0+YXNzb2NfdmFsdWUg
KyBvdmgpOworCQkJCX0gZWxzZSB7CisJCQkJCWlucC0+c2N0cF9mcmFnX3BvaW50ID0gU0NUUF9E
RUZBVUxUX01BWFNFR01FTlQ7CisJCQkJfQorCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJ
CX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJ
fQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0VWRU5UUzoKKwl7CisJCXN0cnVjdCBzY3RwX2V2
ZW50X3N1YnNjcmliZSAqZXZlbnRzOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoZXZlbnRzLCBv
cHR2YWwsIHN0cnVjdCBzY3RwX2V2ZW50X3N1YnNjcmliZSwgb3B0c2l6ZSk7CisKKwkJU0NUUF9J
TlBfV0xPQ0soaW5wKTsKKwkJaWYgKGV2ZW50cy0+c2N0cF9kYXRhX2lvX2V2ZW50KSB7CisJCQlz
Y3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWREFUQUlPRVZOVCk7CisJCX0g
ZWxzZSB7CisJCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVkRBVEFJ
T0VWTlQpOworCQl9CisKKwkJaWYgKGV2ZW50cy0+c2N0cF9hc3NvY2lhdGlvbl9ldmVudCkgewor
CQkJc2N0cF9mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVkFTU09DRVZOVCk7CisJ
CX0gZWxzZSB7CisJCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVkFT
U09DRVZOVCk7CisJCX0KKworCQlpZiAoZXZlbnRzLT5zY3RwX2FkZHJlc3NfZXZlbnQpIHsKKwkJ
CXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZQQUREUkVWTlQpOworCQl9
IGVsc2UgeworCQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZQQURE
UkVWTlQpOworCQl9CisKKwkJaWYgKGV2ZW50cy0+c2N0cF9zZW5kX2ZhaWx1cmVfZXZlbnQpIHsK
KwkJCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZTRU5ERkFJTEVWTlQp
OworCQl9IGVsc2UgeworCQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX1JF
Q1ZTRU5ERkFJTEVWTlQpOworCQl9CisKKwkJaWYgKGV2ZW50cy0+c2N0cF9wZWVyX2Vycm9yX2V2
ZW50KSB7CisJCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWUEVFUkVS
Uik7CisJCX0gZWxzZSB7CisJCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1Nf
UkVDVlBFRVJFUlIpOworCQl9CisKKwkJaWYgKGV2ZW50cy0+c2N0cF9zaHV0ZG93bl9ldmVudCkg
eworCQkJc2N0cF9mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVlNIVVRET1dORVZO
VCk7CisJCX0gZWxzZSB7CisJCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1Nf
UkVDVlNIVVRET1dORVZOVCk7CisJCX0KKworCQlpZiAoZXZlbnRzLT5zY3RwX3BhcnRpYWxfZGVs
aXZlcnlfZXZlbnQpIHsKKwkJCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1BE
QVBJRVZOVCk7CisJCX0gZWxzZSB7CisJCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0Jf
RkxBR1NfUERBUElFVk5UKTsKKwkJfQorCisJCWlmIChldmVudHMtPnNjdHBfYWRhcHRhdGlvbl9s
YXllcl9ldmVudCkgeworCQkJc2N0cF9mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfQURB
UFRBVElPTkVWTlQpOworCQl9IGVsc2UgeworCQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBf
UENCX0ZMQUdTX0FEQVBUQVRJT05FVk5UKTsKKwkJfQorCisJCWlmIChldmVudHMtPnNjdHBfYXV0
aGVudGljYXRpb25fZXZlbnQpIHsKKwkJCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZM
QUdTX0FVVEhFVk5UKTsKKwkJfSBlbHNlIHsKKwkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQ
X1BDQl9GTEFHU19BVVRIRVZOVCk7CisJCX0KKworCQlpZiAoZXZlbnRzLT5zY3RwX3NlbmRlcl9k
cnlfZXZlbnQpIHsKKwkJCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0RSWUVW
TlQpOworCQl9IGVsc2UgeworCQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdT
X0RSWUVWTlQpOworCQl9CisKKwkJaWYgKGV2ZW50cy0+c2N0cF9zdHJlYW1fcmVzZXRfZXZlbnQp
IHsKKwkJCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1NUUkVBTV9SRVNFVEVW
TlQpOworCQl9IGVsc2UgeworCQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdT
X1NUUkVBTV9SRVNFVEVWTlQpOworCQl9CisJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKworCQlT
Q1RQX0lOUF9STE9DSyhpbnApOworCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29j
X2xpc3QsIHNjdHBfdGNibGlzdCkgeworCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCWlmIChl
dmVudHMtPnNjdHBfYXNzb2NpYXRpb25fZXZlbnQpIHsKKwkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9v
bihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZBU1NPQ0VWTlQpOworCQkJfSBlbHNlIHsK
KwkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vZmYoaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19SRUNW
QVNTT0NFVk5UKTsKKwkJCX0KKwkJCWlmIChldmVudHMtPnNjdHBfYWRkcmVzc19ldmVudCkgewor
CQkJCXNjdHBfc3RjYl9mZWF0dXJlX29uKGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfUkVDVlBB
RERSRVZOVCk7CisJCQl9IGVsc2UgeworCQkJCXNjdHBfc3RjYl9mZWF0dXJlX29mZihpbnAsIHN0
Y2IsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZQQUREUkVWTlQpOworCQkJfQorCQkJaWYgKGV2ZW50cy0+
c2N0cF9zZW5kX2ZhaWx1cmVfZXZlbnQpIHsKKwkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vbihpbnAs
IHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZTRU5ERkFJTEVWTlQpOworCQkJfSBlbHNlIHsKKwkJ
CQlzY3RwX3N0Y2JfZmVhdHVyZV9vZmYoaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19SRUNWU0VO
REZBSUxFVk5UKTsKKwkJCX0KKwkJCWlmIChldmVudHMtPnNjdHBfcGVlcl9lcnJvcl9ldmVudCkg
eworCQkJCXNjdHBfc3RjYl9mZWF0dXJlX29uKGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfUkVD
VlBFRVJFUlIpOworCQkJfSBlbHNlIHsKKwkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vZmYoaW5wLCBz
dGNiLCBTQ1RQX1BDQl9GTEFHU19SRUNWUEVFUkVSUik7CisJCQl9CisJCQlpZiAoZXZlbnRzLT5z
Y3RwX3NodXRkb3duX2V2ZW50KSB7CisJCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb24oaW5wLCBzdGNi
LCBTQ1RQX1BDQl9GTEFHU19SRUNWU0hVVERPV05FVk5UKTsKKwkJCX0gZWxzZSB7CisJCQkJc2N0
cF9zdGNiX2ZlYXR1cmVfb2ZmKGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfUkVDVlNIVVRET1dO
RVZOVCk7CisJCQl9CisJCQlpZiAoZXZlbnRzLT5zY3RwX3BhcnRpYWxfZGVsaXZlcnlfZXZlbnQp
IHsKKwkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vbihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1BE
QVBJRVZOVCk7CisJCQl9IGVsc2UgeworCQkJCXNjdHBfc3RjYl9mZWF0dXJlX29mZihpbnAsIHN0
Y2IsIFNDVFBfUENCX0ZMQUdTX1BEQVBJRVZOVCk7CisJCQl9CisJCQlpZiAoZXZlbnRzLT5zY3Rw
X2FkYXB0YXRpb25fbGF5ZXJfZXZlbnQpIHsKKwkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vbihpbnAs
IHN0Y2IsIFNDVFBfUENCX0ZMQUdTX0FEQVBUQVRJT05FVk5UKTsKKwkJCX0gZWxzZSB7CisJCQkJ
c2N0cF9zdGNiX2ZlYXR1cmVfb2ZmKGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfQURBUFRBVElP
TkVWTlQpOworCQkJfQorCQkJaWYgKGV2ZW50cy0+c2N0cF9hdXRoZW50aWNhdGlvbl9ldmVudCkg
eworCQkJCXNjdHBfc3RjYl9mZWF0dXJlX29uKGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfQVVU
SEVWTlQpOworCQkJfSBlbHNlIHsKKwkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vZmYoaW5wLCBzdGNi
LCBTQ1RQX1BDQl9GTEFHU19BVVRIRVZOVCk7CisJCQl9CisJCQlpZiAoZXZlbnRzLT5zY3RwX3Nl
bmRlcl9kcnlfZXZlbnQpIHsKKwkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vbihpbnAsIHN0Y2IsIFND
VFBfUENCX0ZMQUdTX0RSWUVWTlQpOworCQkJfSBlbHNlIHsKKwkJCQlzY3RwX3N0Y2JfZmVhdHVy
ZV9vZmYoaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19EUllFVk5UKTsKKwkJCX0KKwkJCWlmIChl
dmVudHMtPnNjdHBfc3RyZWFtX3Jlc2V0X2V2ZW50KSB7CisJCQkJc2N0cF9zdGNiX2ZlYXR1cmVf
b24oaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19TVFJFQU1fUkVTRVRFVk5UKTsKKwkJCX0gZWxz
ZSB7CisJCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb2ZmKGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1Nf
U1RSRUFNX1JFU0VURVZOVCk7CisJCQl9CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0K
KwkJLyogU2VuZCB1cCB0aGUgc2VuZGVyIGRyeSBldmVudCBvbmx5IGZvciAxLXRvLTEgc3R5bGUg
c29ja2V0cy4gKi8KKwkJaWYgKGV2ZW50cy0+c2N0cF9zZW5kZXJfZHJ5X2V2ZW50KSB7CisJCQlp
ZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAg
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpKSB7CisJCQkJc3Rj
YiA9IExJU1RfRklSU1QoJmlucC0+c2N0cF9hc29jX2xpc3QpOworCQkJCWlmIChzdGNiKSB7CisJ
CQkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQkJCWlmIChUQUlMUV9FTVBUWSgmc3RjYi0+YXNv
Yy5zZW5kX3F1ZXVlKSAmJgorCQkJCQkgICAgVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc2VudF9x
dWV1ZSkgJiYKKwkJCQkJICAgIChzdGNiLT5hc29jLnN0cmVhbV9xdWV1ZV9jbnQgPT0gMCkpIHsK
KwkJCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9TRU5ERVJfRFJZLCBzdGNiLCAgMCwg
TlVMTCwgU0NUUF9TT19MT0NLRUQpOworCQkJCQl9CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKKwkJCQl9CisJCQl9CisJCX0KKwkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQlicmVhazsK
Kwl9CisJY2FzZSBTQ1RQX0FEQVBUQVRJT05fTEFZRVI6CisJeworCQlzdHJ1Y3Qgc2N0cF9zZXRh
ZGFwdGF0aW9uICphZGFwX2JpdHM7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChhZGFwX2JpdHMs
IG9wdHZhbCwgc3RydWN0IHNjdHBfc2V0YWRhcHRhdGlvbiwgb3B0c2l6ZSk7CisJCVNDVFBfSU5Q
X1dMT0NLKGlucCk7CisJCWlucC0+c2N0cF9lcC5hZGFwdGF0aW9uX2xheWVyX2luZGljYXRvciA9
IGFkYXBfYml0cy0+c3NiX2FkYXB0YXRpb25faW5kOworCQlpbnAtPnNjdHBfZXAuYWRhcHRhdGlv
bl9sYXllcl9pbmRpY2F0b3JfcHJvdmlkZWQgPSAxOworCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7
CisJCWJyZWFrOworCX0KKyNpZmRlZiBTQ1RQX0RFQlVHCisJY2FzZSBTQ1RQX1NFVF9JTklUSUFM
X0RCR19TRVE6CisJeworCQl1aW50MzJfdCAqdnZ2OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qo
dnZ2LCBvcHR2YWwsIHVpbnQzMl90LCBvcHRzaXplKTsKKwkJU0NUUF9JTlBfV0xPQ0soaW5wKTsK
KwkJaW5wLT5zY3RwX2VwLmluaXRpYWxfc2VxdWVuY2VfZGVidWcgPSAqdnZ2OworCQlTQ1RQX0lO
UF9XVU5MT0NLKGlucCk7CisJCWJyZWFrOworCX0KKyNlbmRpZgorCWNhc2UgU0NUUF9ERUZBVUxU
X1NFTkRfUEFSQU06CisJeworCQlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzX2luZm87CisKKwkJ
U0NUUF9DSEVDS19BTkRfQ0FTVChzX2luZm8sIG9wdHZhbCwgc3RydWN0IHNjdHBfc25kcmN2aW5m
bywgb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgc19pbmZvLT5zaW5mb19h
c3NvY19pZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCWlmIChzX2luZm8tPnNpbmZvX3N0cmVhbSA8
IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250KSB7CisJCQkJbWVtY3B5KCZzdGNiLT5hc29jLmRlZl9z
ZW5kLCBzX2luZm8sIG1pbihvcHRzaXplLCBzaXplb2Yoc3RjYi0+YXNvYy5kZWZfc2VuZCkpKTsK
KwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCX0K
KwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUpICYmCisJCQkgICAgICgoc19pbmZvLT5zaW5m
b19hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykgfHwKKwkJCSAgICAgIChzX2luZm8tPnNp
bmZvX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkpKSB7CisJCQkJU0NUUF9JTlBfV0xPQ0so
aW5wKTsKKwkJCQltZW1jcHkoJmlucC0+ZGVmX3NlbmQsIHNfaW5mbywgbWluKG9wdHNpemUsIHNp
emVvZihpbnAtPmRlZl9zZW5kKSkpOworCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCX0K
KwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkgJiYKKwkJ
CSAgICAoKHNfaW5mby0+c2luZm9fYXNzb2NfaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09DKSB8fAor
CQkJICAgICAoc19pbmZvLT5zaW5mb19hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykpKSB7CisJ
CQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0
cF9hc29jX2xpc3QsIHNjdHBfdGNibGlzdCkgeworCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwor
CQkJCQlpZiAoc19pbmZvLT5zaW5mb19zdHJlYW0gPCBzdGNiLT5hc29jLnN0cmVhbW91dGNudCkg
eworCQkJCQkJbWVtY3B5KCZzdGNiLT5hc29jLmRlZl9zZW5kLCBzX2luZm8sIG1pbihvcHRzaXpl
LCBzaXplb2Yoc3RjYi0+YXNvYy5kZWZfc2VuZCkpKTsKKwkJCQkJfQorCQkJCQlTQ1RQX1RDQl9V
TkxPQ0soc3RjYik7CisJCQkJfQorCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0KKwkJ
fQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX1BFRVJfQUREUl9QQVJBTVM6CisJeworCQlzdHJ1
Y3Qgc2N0cF9wYWRkcnBhcmFtcyAqcGFkZHJwOworCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJ
CXN0cnVjdCBzb2NrYWRkciAqYWRkcjsKKyNpZiBkZWZpbmVkKElORVQpICYmIGRlZmluZWQoSU5F
VDYpCisJCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW5fc3RvcmU7CisjZW5kaWYKKworCQlTQ1RQX0NI
RUNLX0FORF9DQVNUKHBhZGRycCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcywgb3B0
c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgcGFkZHJwLT5zcHBfYXNzb2NfaWQp
OworCisjaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2KQorCQlpZiAocGFkZHJwLT5z
cHBfYWRkcmVzcy5zc19mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCXN0cnVjdCBzb2NrYWRkcl9p
bjYgKnNpbjY7CisKKwkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZwYWRkcnAtPnNw
cF9hZGRyZXNzOworCQkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42LT5zaW42X2FkZHIp
KSB7CisJCQkJaW42X3NpbjZfMl9zaW4oJnNpbl9zdG9yZSwgc2luNik7CisJCQkJYWRkciA9IChz
dHJ1Y3Qgc29ja2FkZHIgKikmc2luX3N0b3JlOworCQkJfSBlbHNlIHsKKwkJCQlhZGRyID0gKHN0
cnVjdCBzb2NrYWRkciAqKSZwYWRkcnAtPnNwcF9hZGRyZXNzOworCQkJfQorCQl9IGVsc2Ugewor
CQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmcGFkZHJwLT5zcHBfYWRkcmVzczsKKwkJfQor
I2Vsc2UKKwkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmcGFkZHJwLT5zcHBfYWRkcmVzczsK
KyNlbmRpZgorCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCQluZXQgPSBzY3RwX2ZpbmRuZXQoc3Rj
YiwgYWRkcik7CisJCX0gZWxzZSB7CisJCQkvKiBXZSBpbmNyZW1lbnQgaGVyZSBzaW5jZSBzY3Rw
X2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKCkgd2lsCisJCQkgKiBkbyBhIGRlY3JlbWVudCBpZiBp
dCBmaW5kcyB0aGUgc3RjYiBhcyBsb25nIGFzIHRoZSBsb2NrZWQKKwkJCSAqIHRjYiAobGFzdCBh
cmd1bWVudCkgaXMgTk9UIGEgVENCLi4gYWthIE5VTEwuCisJCQkgKi8KKwkJCW5ldCA9IE5VTEw7
CisJCQlTQ1RQX0lOUF9JTkNSX1JFRihpbnApOworCQkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0
aW9uX2VwX2FkZHIoJmlucCwgYWRkciwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZuZXQsIE5VTEwsIE5VTEwpOworCQkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJCVND
VFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQl9CisJCX0KKwkJaWYgKChzdGNiICE9IE5VTEwpICYm
IChuZXQgPT0gTlVMTCkpIHsKKyNpZmRlZiBJTkVUCisJCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09
IEFGX0lORVQpIHsKKwkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKworCQkJCXNpbiA9IChz
dHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyOworCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciAh
PSBJTkFERFJfQU5ZKSB7CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhz
dGNiKTsKKwkJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxz
ZQorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5F
VDYpIHsKKwkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCisJCQkJc2luNiA9IChzdHJ1
Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKKwkJCQlpZiAoIUlONl9JU19BRERSX1VOU1BFQ0lGSUVE
KCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJCVNDVFBfVENCX1VO
TE9DSyhzdGNiKTsKKwkJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJ
CX0gZWxzZQorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJaWYgKGFkZHIt
PnNhX2ZhbWlseSA9PSBBRl9DT05OKSB7CisJCQkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25u
OworCisJCQkJc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilhZGRyOworCQkJCWlmIChz
Y29ubi0+c2Nvbm5fYWRkciAhPSBOVUxMKSB7CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKKwkJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJCWJyZWFrOworCQkJ
CX0KKwkJCX0gZWxzZQorI2VuZGlmCisJCQl7CisJCQkJZXJyb3IgPSBFQUZOT1NVUFBPUlQ7CisJ
CQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJCQlicmVhazsKKwkJ
CX0KKwkJfQorCQkvKiBzYW5pdHkgY2hlY2tzICovCisJCWlmICgocGFkZHJwLT5zcHBfZmxhZ3Mg
JiBTUFBfSEJfRU5BQkxFKSAmJiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfSEJfRElTQUJMRSkp
IHsKKwkJCWlmIChzdGNiKQorCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCVNDVFBfTFRS
QUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZB
TCk7CisJCQlyZXR1cm4gKEVJTlZBTCk7CisJCX0KKworCQlpZiAoKHBhZGRycC0+c3BwX2ZsYWdz
ICYgU1BQX1BNVFVEX0VOQUJMRSkgJiYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX1BNVFVEX0RJ
U0FCTEUpKSB7CisJCQlpZiAoc3RjYikKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFSU5WQUwpOworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisJCWlmICgocGFkZHJwLT5zcHBf
ZmxhZ3MgJiBTUFBfUE1UVURfRElTQUJMRSkgJiYKKwkJICAgIChwYWRkcnAtPnNwcF9wYXRobXR1
ID4gMCkgJiYKKwkJICAgICgocGFkZHJwLT5zcHBfcGF0aG10dSA8IFNDVFBfU01BTExFU1RfUE1U
VSkgfHwKKwkJICAgICAocGFkZHJwLT5zcHBfcGF0aG10dSA+IFNDVFBfTEFSR0VTVF9QTVRVKSkp
IHsKKwkJCWlmIChzdGNiKQorCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCVNDVFBfTFRS
QUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZB
TCk7CisJCQlyZXR1cm4gKEVJTlZBTCk7CisJCX0KKworCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJ
CQkvKioqKioqKioqKioqKioqKioqKioqKioqVENCIFNQRUNJRklDIFNFVCAqKioqKioqKioqKioq
KioqKiovCisJCQlpZiAobmV0ICE9IE5VTEwpIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioq
KioqTkVUIFNQRUNJRklDIFNFVCAqKioqKioqKioqKioqKioqKiovCisJCQkJaWYgKHBhZGRycC0+
c3BwX2ZsYWdzICYgU1BQX0hCX0RJU0FCTEUpIHsKKwkJCQkJaWYgKCEobmV0LT5kZXN0X3N0YXRl
ICYgU0NUUF9BRERSX1VOQ09ORklSTUVEKSAmJgorCQkJCQkgICAgIShuZXQtPmRlc3Rfc3RhdGUg
JiBTQ1RQX0FERFJfTk9IQikpIHsKKwkJCQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZ
UEVfSEVBUlRCRUFULCBpbnAsIHN0Y2IsIG5ldCwKKwkJCQkJCQkJU0NUUF9GUk9NX1NDVFBfVVNS
UkVRICsgU0NUUF9MT0NfOSk7CisJCQkJCX0KKwkJCQkJbmV0LT5kZXN0X3N0YXRlIHw9IFNDVFBf
QUREUl9OT0hCOworCQkJCX0KKwkJCQlpZiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfSEJfRU5B
QkxFKSB7CisJCQkJCWlmIChwYWRkcnAtPnNwcF9oYmludGVydmFsKSB7CisJCQkJCQluZXQtPmhl
YXJ0X2JlYXRfZGVsYXkgPSBwYWRkcnAtPnNwcF9oYmludGVydmFsOworCQkJCQl9IGVsc2UgaWYg
KHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX0hCX1RJTUVfSVNfWkVSTykgeworCQkJCQkJbmV0LT5o
ZWFydF9iZWF0X2RlbGF5ID0gMDsKKwkJCQkJfQorCQkJCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9U
SU1FUl9UWVBFX0hFQVJUQkVBVCwgaW5wLCBzdGNiLCBuZXQsCisJCQkJCSAgICAgICAgICAgICAg
ICBTQ1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ18xMCk7CisJCQkJCXNjdHBfdGltZXJf
c3RhcnQoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgaW5wLCBzdGNiLCBuZXQpOworCQkJCQlu
ZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9OT0hCOworCQkJCX0KKwkJCQlpZiAocGFkZHJw
LT5zcHBfZmxhZ3MgJiBTUFBfSEJfREVNQU5EKSB7CisJCQkJCWlmIChTQ1RQX0dFVF9TVEFURShz
dGNiKSA9PSBTQ1RQX1NUQVRFX09QRU4pIHsKKwkJCQkJCXNjdHBfc2VuZF9oYihzdGNiLCBuZXQs
IFNDVFBfU09fTE9DS0VEKTsKKwkJCQkJCXNjdHBfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgIFND
VFBfT1VUUFVUX0ZST01fU09DS09QVCwgU0NUUF9TT19MT0NLRUQpOworCQkJCQkJc2N0cF90aW1l
cl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULCBpbnAsIHN0Y2IsIG5ldCk7CisJCQkJ
CX0KKwkJCQl9CisJCQkJaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX1BNVFVEX0RJU0FCTEUp
IHsKKwkJCQkJaWYgKFNDVFBfT1NfVElNRVJfUEVORElORygmbmV0LT5wbXR1X3RpbWVyLnRpbWVy
KSkgeworCQkJCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9QQVRITVRVUkFJU0Us
IGlucCwgc3RjYiwgbmV0LAorCQkJCQkJCQlTQ1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xP
Q18xMSk7CisJCQkJCX0KKwkJCQkJbmV0LT5kZXN0X3N0YXRlIHw9IFNDVFBfQUREUl9OT19QTVRV
RDsKKwkJCQkJaWYgKHBhZGRycC0+c3BwX3BhdGhtdHUgPiAwKSB7CisJCQkJCQluZXQtPm10dSA9
IHBhZGRycC0+c3BwX3BhdGhtdHU7CisJCQkJCQlzd2l0Y2ggKG5ldC0+cm8uX2xfYWRkci5zYS5z
YV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQkJCQljYXNlIEFGX0lORVQ6CisJCQkJCQkJbmV0
LT5tdHUgKz0gU0NUUF9NSU5fVjRfT1ZFUkhFQUQ7CisJCQkJCQkJYnJlYWs7CisjZW5kaWYKKyNp
ZmRlZiBJTkVUNgorCQkJCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQkJCQluZXQtPm10dSArPSBTQ1RQ
X01JTl9PVkVSSEVBRDsKKwkJCQkJCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKwkJCQkJCWNhc2UgQUZfQ09OTjoKKwkJCQkJCQluZXQtPm10dSArPSBzaXplb2Yo
c3RydWN0IHNjdHBoZHIpOworCQkJCQkJCWJyZWFrOworI2VuZGlmCisJCQkJCQlkZWZhdWx0Ogor
CQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJaWYgKG5ldC0+bXR1IDwgc3RjYi0+YXNvYy5z
bWFsbGVzdF9tdHUpIHsKKwkJCQkJCQlzY3RwX3BhdGhtdHVfYWRqdXN0bWVudChzdGNiLCBuZXQt
Pm10dSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJaWYgKHBhZGRycC0+c3BwX2ZsYWdz
ICYgU1BQX1BNVFVEX0VOQUJMRSkgeworCQkJCQlpZiAoIVNDVFBfT1NfVElNRVJfUEVORElORygm
bmV0LT5wbXR1X3RpbWVyLnRpbWVyKSkgeworCQkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJ
TUVSX1RZUEVfUEFUSE1UVVJBSVNFLCBpbnAsIHN0Y2IsIG5ldCk7CisJCQkJCX0KKwkJCQkJbmV0
LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfTk9fUE1UVUQ7CisJCQkJfQorCQkJCWlmIChwYWRk
cnAtPnNwcF9wYXRobWF4cnh0ID4gMCkgeworCQkJCQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NU
UF9BRERSX1BGKSB7CisJCQkJCQlpZiAobmV0LT5lcnJvcl9jb3VudCA+IHBhZGRycC0+c3BwX3Bh
dGhtYXhyeHQpIHsKKwkJCQkJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9QRjsKKwkJ
CQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWlmICgobmV0LT5lcnJvcl9jb3VudCA8PSBwYWRk
cnAtPnNwcF9wYXRobWF4cnh0KSAmJgorCQkJCQkJICAgIChuZXQtPmVycm9yX2NvdW50ID4gbmV0
LT5wZl90aHJlc2hvbGQpKSB7CisJCQkJCQkJbmV0LT5kZXN0X3N0YXRlIHw9IFNDVFBfQUREUl9Q
RjsKKwkJCQkJCQlzY3RwX3NlbmRfaGIoc3RjYiwgbmV0LCBTQ1RQX1NPX0xPQ0tFRCk7CisJCQkJ
CQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsCisJCQkJCQkJICAg
ICAgICAgICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCwKKwkJCQkJCQkgICAgICAgICAg
ICAgICAgU0NUUF9GUk9NX1NDVFBfVVNSUkVRICsgU0NUUF9MT0NfMTIpOworCQkJCQkJCXNjdHBf
dGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgc3RjYi0+c2N0cF9lcCwgc3Rj
YiwgbmV0KTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NU
UF9BRERSX1JFQUNIQUJMRSkgeworCQkJCQkJaWYgKG5ldC0+ZXJyb3JfY291bnQgPiBwYWRkcnAt
PnNwcF9wYXRobWF4cnh0KSB7CisJCQkJCQkJbmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJf
UkVBQ0hBQkxFOworCQkJCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9JTlRFUkZBQ0Vf
RE9XTiwgc3RjYiwgMCwgbmV0LCBTQ1RQX1NPX0xPQ0tFRCk7CisJCQkJCQl9CisJCQkJCX0gZWxz
ZSB7CisJCQkJCQlpZiAobmV0LT5lcnJvcl9jb3VudCA8PSBwYWRkcnAtPnNwcF9wYXRobWF4cnh0
KSB7CisJCQkJCQkJbmV0LT5kZXN0X3N0YXRlIHw9IFNDVFBfQUREUl9SRUFDSEFCTEU7CisJCQkJ
CQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0lOVEVSRkFDRV9VUCwgc3RjYiwgMCwgbmV0
LCBTQ1RQX1NPX0xPQ0tFRCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJbmV0LT5mYWlsdXJlX3Ro
cmVzaG9sZCA9IHBhZGRycC0+c3BwX3BhdGhtYXhyeHQ7CisJCQkJfQorCQkJCWlmIChwYWRkcnAt
PnNwcF9mbGFncyAmIFNQUF9EU0NQKSB7CisJCQkJCW5ldC0+ZHNjcCA9IHBhZGRycC0+c3BwX2Rz
Y3AgJiAweGZjOworCQkJCQluZXQtPmRzY3AgfD0gMHgwMTsKKwkJCQl9CisjaWZkZWYgSU5FVDYK
KwkJCQlpZiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfSVBWNl9GTE9XTEFCRUwpIHsKKwkJCQkJ
aWYgKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCQkJCW5l
dC0+Zmxvd2xhYmVsID0gcGFkZHJwLT5zcHBfaXB2Nl9mbG93bGFiZWwgJiAweDAwMGZmZmZmOwor
CQkJCQkJbmV0LT5mbG93bGFiZWwgfD0gMHg4MDAwMDAwMDsKKwkJCQkJfQorCQkJCX0KKyNlbmRp
ZgorCQkJfSBlbHNlIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqQVNTT0MgT05MWSAt
LSBOTyBORVQgU1BFQ0lGSUMgU0VUICoqKioqKioqKioqKioqKioqKi8KKwkJCQlpZiAocGFkZHJw
LT5zcHBfcGF0aG1heHJ4dCA+IDApIHsKKwkJCQkJc3RjYi0+YXNvYy5kZWZfbmV0X2ZhaWx1cmUg
PSBwYWRkcnAtPnNwcF9wYXRobWF4cnh0OworCQkJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2It
PmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQkJCQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NU
UF9BRERSX1BGKSB7CisJCQkJCQkJaWYgKG5ldC0+ZXJyb3JfY291bnQgPiBwYWRkcnAtPnNwcF9w
YXRobWF4cnh0KSB7CisJCQkJCQkJCW5ldC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9BRERSX1BGOwor
CQkJCQkJCX0KKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJaWYgKChuZXQtPmVycm9yX2NvdW50IDw9
IHBhZGRycC0+c3BwX3BhdGhtYXhyeHQpICYmCisJCQkJCQkJICAgIChuZXQtPmVycm9yX2NvdW50
ID4gbmV0LT5wZl90aHJlc2hvbGQpKSB7CisJCQkJCQkJCW5ldC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQ
X0FERFJfUEY7CisJCQkJCQkJCXNjdHBfc2VuZF9oYihzdGNiLCBuZXQsIFNDVFBfU09fTE9DS0VE
KTsKKwkJCQkJCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsCisJ
CQkJCQkJCSAgICAgICAgICAgICAgICBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXQsCisJCQkJCQkJ
CSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ18xMyk7CisJ
CQkJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgc3RjYi0+
c2N0cF9lcCwgc3RjYiwgbmV0KTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQlpZiAobmV0LT5k
ZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkgeworCQkJCQkJCWlmIChuZXQtPmVycm9y
X2NvdW50ID4gcGFkZHJwLT5zcHBfcGF0aG1heHJ4dCkgeworCQkJCQkJCQluZXQtPmRlc3Rfc3Rh
dGUgJj0gflNDVFBfQUREUl9SRUFDSEFCTEU7CisJCQkJCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQ
X05PVElGWV9JTlRFUkZBQ0VfRE9XTiwgc3RjYiwgMCwgbmV0LCBTQ1RQX1NPX0xPQ0tFRCk7CisJ
CQkJCQkJfQorCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlpZiAobmV0LT5lcnJvcl9jb3VudCA8PSBw
YWRkcnAtPnNwcF9wYXRobWF4cnh0KSB7CisJCQkJCQkJCW5ldC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQ
X0FERFJfUkVBQ0hBQkxFOworCQkJCQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfSU5U
RVJGQUNFX1VQLCBzdGNiLCAwLCBuZXQsIFNDVFBfU09fTE9DS0VEKTsKKwkJCQkJCQl9CisJCQkJ
CQl9CisJCQkJCQluZXQtPmZhaWx1cmVfdGhyZXNob2xkID0gcGFkZHJwLT5zcHBfcGF0aG1heHJ4
dDsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfSEJfRU5B
QkxFKSB7CisJCQkJCWlmIChwYWRkcnAtPnNwcF9oYmludGVydmFsICE9IDApIHsKKwkJCQkJCXN0
Y2ItPmFzb2MuaGVhcnRfYmVhdF9kZWxheSA9IHBhZGRycC0+c3BwX2hiaW50ZXJ2YWw7CisJCQkJ
CX0gZWxzZSBpZiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfSEJfVElNRV9JU19aRVJPKSB7CisJ
CQkJCQlzdGNiLT5hc29jLmhlYXJ0X2JlYXRfZGVsYXkgPSAwOworCQkJCQl9CisJCQkJCS8qIFR1
cm4gYmFjayBvbiB0aGUgdGltZXIgKi8KKwkJCQkJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5h
c29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQkJCQkJaWYgKHBhZGRycC0+c3BwX2hiaW50ZXJ2YWwg
IT0gMCkgeworCQkJCQkJCW5ldC0+aGVhcnRfYmVhdF9kZWxheSA9IHBhZGRycC0+c3BwX2hiaW50
ZXJ2YWw7CisJCQkJCQl9IGVsc2UgaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX0hCX1RJTUVf
SVNfWkVSTykgeworCQkJCQkJCW5ldC0+aGVhcnRfYmVhdF9kZWxheSA9IDA7CisJCQkJCQl9CisJ
CQkJCQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX05PSEIpIHsKKwkJCQkJCQluZXQt
PmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9OT0hCOworCQkJCQkJfQorCQkJCQkJc2N0cF90aW1l
cl9zdG9wKFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIGlucCwgc3RjYiwgbmV0LAorCQkJCQkJ
CQlTQ1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ18xNCk7CisJCQkJCQlzY3RwX3RpbWVy
X3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIGlucCwgc3RjYiwgbmV0KTsKKwkJCQkJ
fQorCQkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vZmYoaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19E
T05PVF9IRUFSVEJFQVQpOworCQkJCX0KKwkJCQlpZiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBf
SEJfRElTQUJMRSkgeworCQkJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywg
c2N0cF9uZXh0KSB7CisJCQkJCQlpZiAoIShuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfTk9I
QikpIHsKKwkJCQkJCQluZXQtPmRlc3Rfc3RhdGUgfD0gU0NUUF9BRERSX05PSEI7CisJCQkJCQkJ
aWYgKCEobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1VOQ09ORklSTUVEKSkgeworCQkJCQkJ
CQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwKKwkJCQkJCQkJICAg
ICAgICAgICAgICAgIGlucCwgc3RjYiwgbmV0LAorCQkJCQkJCQkgICAgICAgICAgICAgICAgU0NU
UF9GUk9NX1NDVFBfVVNSUkVRICsgU0NUUF9MT0NfMTUpOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJ
CQkJfQorCQkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vbihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdT
X0RPTk9UX0hFQVJUQkVBVCk7CisJCQkJfQorCQkJCWlmIChwYWRkcnAtPnNwcF9mbGFncyAmIFNQ
UF9QTVRVRF9ESVNBQkxFKSB7CisJCQkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5u
ZXRzLCBzY3RwX25leHQpIHsKKwkJCQkJCWlmIChTQ1RQX09TX1RJTUVSX1BFTkRJTkcoJm5ldC0+
cG10dV90aW1lci50aW1lcikpIHsKKwkJCQkJCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9U
WVBFX1BBVEhNVFVSQUlTRSwgaW5wLCBzdGNiLCBuZXQsCisJCQkJCQkJCQlTQ1RQX0ZST01fU0NU
UF9VU1JSRVEgKyBTQ1RQX0xPQ18xNik7CisJCQkJCQl9CisJCQkJCQluZXQtPmRlc3Rfc3RhdGUg
fD0gU0NUUF9BRERSX05PX1BNVFVEOworCQkJCQkJaWYgKHBhZGRycC0+c3BwX3BhdGhtdHUgPiAw
KSB7CisJCQkJCQkJbmV0LT5tdHUgPSBwYWRkcnAtPnNwcF9wYXRobXR1OworCQkJCQkJCXN3aXRj
aCAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCQkJCQlj
YXNlIEFGX0lORVQ6CisJCQkJCQkJCW5ldC0+bXR1ICs9IFNDVFBfTUlOX1Y0X09WRVJIRUFEOwor
CQkJCQkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQkJCQkJY2FzZSBBRl9JTkVU
NjoKKwkJCQkJCQkJbmV0LT5tdHUgKz0gU0NUUF9NSU5fT1ZFUkhFQUQ7CisJCQkJCQkJCWJyZWFr
OworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCQkJCWNhc2UgQUZfQ09O
TjoKKwkJCQkJCQkJbmV0LT5tdHUgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKKwkJCQkJCQkJ
YnJlYWs7CisjZW5kaWYKKwkJCQkJCQlkZWZhdWx0OgorCQkJCQkJCQlicmVhazsKKwkJCQkJCQl9
CisJCQkJCQkJaWYgKG5ldC0+bXR1IDwgc3RjYi0+YXNvYy5zbWFsbGVzdF9tdHUpIHsKKwkJCQkJ
CQkJc2N0cF9wYXRobXR1X2FkanVzdG1lbnQoc3RjYiwgbmV0LT5tdHUpOworCQkJCQkJCX0KKwkJ
CQkJCX0KKwkJCQkJfQorCQkJCQlpZiAocGFkZHJwLT5zcHBfcGF0aG10dSA+IDApIHsKKwkJCQkJ
CXN0Y2ItPmFzb2MuZGVmYXVsdF9tdHUgPSBwYWRkcnAtPnNwcF9wYXRobXR1OworCQkJCQl9CisJ
CQkJCXNjdHBfc3RjYl9mZWF0dXJlX29uKGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfRE9fTk9U
X1BNVFVEKTsKKwkJCQl9CisJCQkJaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX1BNVFVEX0VO
QUJMRSkgeworCQkJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9u
ZXh0KSB7CisJCQkJCQlpZiAoIVNDVFBfT1NfVElNRVJfUEVORElORygmbmV0LT5wbXR1X3RpbWVy
LnRpbWVyKSkgeworCQkJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1BBVEhN
VFVSQUlTRSwgaW5wLCBzdGNiLCBuZXQpOworCQkJCQkJfQorCQkJCQkJbmV0LT5kZXN0X3N0YXRl
ICY9IH5TQ1RQX0FERFJfTk9fUE1UVUQ7CisJCQkJCX0KKwkJCQkJc3RjYi0+YXNvYy5kZWZhdWx0
X210dSA9IDA7CisJCQkJCXNjdHBfc3RjYl9mZWF0dXJlX29mZihpbnAsIHN0Y2IsIFNDVFBfUENC
X0ZMQUdTX0RPX05PVF9QTVRVRCk7CisJCQkJfQorCQkJCWlmIChwYWRkcnAtPnNwcF9mbGFncyAm
IFNQUF9EU0NQKSB7CisJCQkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBz
Y3RwX25leHQpIHsKKwkJCQkJCW5ldC0+ZHNjcCA9IHBhZGRycC0+c3BwX2RzY3AgJiAweGZjOwor
CQkJCQkJbmV0LT5kc2NwIHw9IDB4MDE7CisJCQkJCX0KKwkJCQkJc3RjYi0+YXNvYy5kZWZhdWx0
X2RzY3AgPSBwYWRkcnAtPnNwcF9kc2NwICYgMHhmYzsKKwkJCQkJc3RjYi0+YXNvYy5kZWZhdWx0
X2RzY3AgfD0gMHgwMTsKKwkJCQl9CisjaWZkZWYgSU5FVDYKKwkJCQlpZiAocGFkZHJwLT5zcHBf
ZmxhZ3MgJiBTUFBfSVBWNl9GTE9XTEFCRUwpIHsKKwkJCQkJVEFJTFFfRk9SRUFDSChuZXQsICZz
dGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQkJCQkJaWYgKG5ldC0+cm8uX2xfYWRkci5z
YS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCQkJCQluZXQtPmZsb3dsYWJlbCA9IHBhZGRy
cC0+c3BwX2lwdjZfZmxvd2xhYmVsICYgMHgwMDBmZmZmZjsKKwkJCQkJCQluZXQtPmZsb3dsYWJl
bCB8PSAweDgwMDAwMDAwOworCQkJCQkJfQorCQkJCQl9CisJCQkJCXN0Y2ItPmFzb2MuZGVmYXVs
dF9mbG93bGFiZWwgPSBwYWRkcnAtPnNwcF9pcHY2X2Zsb3dsYWJlbCAmIDB4MDAwZmZmZmY7CisJ
CQkJCXN0Y2ItPmFzb2MuZGVmYXVsdF9mbG93bGFiZWwgfD0gMHg4MDAwMDAwMDsKKwkJCQl9Cisj
ZW5kaWYKKwkJCX0KKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCS8q
KioqKioqKioqKioqKioqKioqKioqKipOTyBUQ0IsIFNFVCBUTyBkZWZhdWx0IHN0dWZmICoqKioq
KioqKioqKioqKioqKi8KKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
VENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5f
VENQUE9PTCkgfHwKKwkJCSAgICAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1VE
UFRZUEUpICYmCisJCQkgICAgIChwYWRkcnAtPnNwcF9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9B
U1NPQykpKSB7CisJCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJCQkvKgorCQkJCSAqIEZvciB0
aGUgVE9TL0ZMT1dMQUJFTCBzdHVmZiB5b3Ugc2V0IGl0CisJCQkJICogd2l0aCB0aGUgb3B0aW9u
cyBvbiB0aGUgc29ja2V0CisJCQkJICovCisJCQkJaWYgKHBhZGRycC0+c3BwX3BhdGhtYXhyeHQg
PiAwKSB7CisJCQkJCWlucC0+c2N0cF9lcC5kZWZfbmV0X2ZhaWx1cmUgPSBwYWRkcnAtPnNwcF9w
YXRobWF4cnh0OworCQkJCX0KKworCQkJCWlmIChwYWRkcnAtPnNwcF9mbGFncyAmIFNQUF9IQl9U
SU1FX0lTX1pFUk8pCisJCQkJCWlucC0+c2N0cF9lcC5zY3RwX3RpbWVvdXR0aWNrc1tTQ1RQX1RJ
TUVSX0hFQVJUQkVBVF0gPSAwOworCQkJCWVsc2UgaWYgKHBhZGRycC0+c3BwX2hiaW50ZXJ2YWwg
IT0gMCkgeworCQkJCQlpZiAocGFkZHJwLT5zcHBfaGJpbnRlcnZhbCA+IFNDVFBfTUFYX0hCX0lO
VEVSVkFMKQorCQkJCQkJcGFkZHJwLT5zcHBfaGJpbnRlcnZhbD0gU0NUUF9NQVhfSEJfSU5URVJW
QUw7CisJCQkJCWlucC0+c2N0cF9lcC5zY3RwX3RpbWVvdXR0aWNrc1tTQ1RQX1RJTUVSX0hFQVJU
QkVBVF0gPSBzY3RwX21zZWNzX3RvX3RpY2tzKHBhZGRycC0+c3BwX2hiaW50ZXJ2YWwpOworCQkJ
CX0KKworCQkJCWlmIChwYWRkcnAtPnNwcF9mbGFncyAmIFNQUF9IQl9FTkFCTEUpIHsKKwkJCQkJ
aWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX0hCX1RJTUVfSVNfWkVSTykgeworCQkJCQkJaW5w
LT5zY3RwX2VwLnNjdHBfdGltZW91dHRpY2tzW1NDVFBfVElNRVJfSEVBUlRCRUFUXSA9IDA7CisJ
CQkJCX0gZWxzZSBpZiAocGFkZHJwLT5zcHBfaGJpbnRlcnZhbCkgeworCQkJCQkJaW5wLT5zY3Rw
X2VwLnNjdHBfdGltZW91dHRpY2tzW1NDVFBfVElNRVJfSEVBUlRCRUFUXSA9IHNjdHBfbXNlY3Nf
dG9fdGlja3MocGFkZHJwLT5zcHBfaGJpbnRlcnZhbCk7CisJCQkJCX0KKwkJCQkJc2N0cF9mZWF0
dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX0RPTk9UX0hFQVJUQkVBVCk7CisJCQkJfSBlbHNl
IGlmIChwYWRkcnAtPnNwcF9mbGFncyAmIFNQUF9IQl9ESVNBQkxFKSB7CisJCQkJCXNjdHBfZmVh
dHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0RPTk9UX0hFQVJUQkVBVCk7CisJCQkJfQorCQkJ
CWlmIChwYWRkcnAtPnNwcF9mbGFncyAmIFNQUF9QTVRVRF9FTkFCTEUpIHsKKwkJCQkJaW5wLT5z
Y3RwX2VwLmRlZmF1bHRfbXR1ID0gMDsKKwkJCQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBf
UENCX0ZMQUdTX0RPX05PVF9QTVRVRCk7CisJCQkJfSBlbHNlIGlmIChwYWRkcnAtPnNwcF9mbGFn
cyAmIFNQUF9QTVRVRF9ESVNBQkxFKSB7CisJCQkJCWlmIChwYWRkcnAtPnNwcF9wYXRobXR1ID4g
MCkgeworCQkJCQkJaW5wLT5zY3RwX2VwLmRlZmF1bHRfbXR1ID0gcGFkZHJwLT5zcHBfcGF0aG10
dTsKKwkJCQkJfQorCQkJCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19ET19O
T1RfUE1UVUQpOworCQkJCX0KKwkJCQlpZiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfRFNDUCkg
eworCQkJCQlpbnAtPnNjdHBfZXAuZGVmYXVsdF9kc2NwID0gcGFkZHJwLT5zcHBfZHNjcCAmIDB4
ZmM7CisJCQkJCWlucC0+c2N0cF9lcC5kZWZhdWx0X2RzY3AgfD0gMHgwMTsKKwkJCQl9CisjaWZk
ZWYgSU5FVDYKKwkJCQlpZiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfSVBWNl9GTE9XTEFCRUwp
IHsKKwkJCQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSB7
CisJCQkJCQlpbnAtPnNjdHBfZXAuZGVmYXVsdF9mbG93bGFiZWwgPSBwYWRkcnAtPnNwcF9pcHY2
X2Zsb3dsYWJlbCAmIDB4MDAwZmZmZmY7CisJCQkJCQlpbnAtPnNjdHBfZXAuZGVmYXVsdF9mbG93
bGFiZWwgfD0gMHg4MDAwMDAwMDsKKwkJCQkJfQorCQkJCX0KKyNlbmRpZgorCQkJCVNDVFBfSU5Q
X1dVTkxPQ0soaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9
IEVJTlZBTDsKKwkJCX0KKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX1JUT0lORk86CisJ
eworCQlzdHJ1Y3Qgc2N0cF9ydG9pbmZvICpzcnRvOworCQl1aW50MzJfdCBuZXdfaW5pdCwgbmV3
X21pbiwgbmV3X21heDsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNydG8sIG9wdHZhbCwgc3Ry
dWN0IHNjdHBfcnRvaW5mbywgb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwg
c3J0by0+c3J0b19hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCWlmIChzcnRvLT5zcnRv
X2luaXRpYWwpCisJCQkJbmV3X2luaXQgPSBzcnRvLT5zcnRvX2luaXRpYWw7CisJCQllbHNlCisJ
CQkJbmV3X2luaXQgPSBzdGNiLT5hc29jLmluaXRpYWxfcnRvOworCQkJaWYgKHNydG8tPnNydG9f
bWF4KQorCQkJCW5ld19tYXggPSBzcnRvLT5zcnRvX21heDsKKwkJCWVsc2UKKwkJCQluZXdfbWF4
ID0gc3RjYi0+YXNvYy5tYXhydG87CisJCQlpZiAoc3J0by0+c3J0b19taW4pCisJCQkJbmV3X21p
biA9IHNydG8tPnNydG9fbWluOworCQkJZWxzZQorCQkJCW5ld19taW4gPSBzdGNiLT5hc29jLm1p
bnJ0bzsKKwkJCWlmICgobmV3X21pbiA8PSBuZXdfaW5pdCkgJiYgKG5ld19pbml0IDw9IG5ld19t
YXgpKSB7CisJCQkJc3RjYi0+YXNvYy5pbml0aWFsX3J0byA9IG5ld19pbml0OworCQkJCXN0Y2It
PmFzb2MubWF4cnRvID0gbmV3X21heDsKKwkJCQlzdGNiLT5hc29jLm1pbnJ0byA9IG5ld19taW47
CisJCQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9
CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VRFBUWVBFKSAmJgorCQkJICAgICAoc3J0by0+c3J0b19h
c3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpKSB7CisJCQkJU0NUUF9JTlBfV0xPQ0soaW5w
KTsKKwkJCQlpZiAoc3J0by0+c3J0b19pbml0aWFsKQorCQkJCQluZXdfaW5pdCA9IHNydG8tPnNy
dG9faW5pdGlhbDsKKwkJCQllbHNlCisJCQkJCW5ld19pbml0ID0gaW5wLT5zY3RwX2VwLmluaXRp
YWxfcnRvOworCQkJCWlmIChzcnRvLT5zcnRvX21heCkKKwkJCQkJbmV3X21heCA9IHNydG8tPnNy
dG9fbWF4OworCQkJCWVsc2UKKwkJCQkJbmV3X21heCA9IGlucC0+c2N0cF9lcC5zY3RwX21heHJ0
bzsKKwkJCQlpZiAoc3J0by0+c3J0b19taW4pCisJCQkJCW5ld19taW4gPSBzcnRvLT5zcnRvX21p
bjsKKwkJCQllbHNlCisJCQkJCW5ld19taW4gPSBpbnAtPnNjdHBfZXAuc2N0cF9taW5ydG87CisJ
CQkJaWYgKChuZXdfbWluIDw9IG5ld19pbml0KSAmJiAobmV3X2luaXQgPD0gbmV3X21heCkpIHsK
KwkJCQkJaW5wLT5zY3RwX2VwLmluaXRpYWxfcnRvID0gbmV3X2luaXQ7CisJCQkJCWlucC0+c2N0
cF9lcC5zY3RwX21heHJ0byA9IG5ld19tYXg7CisJCQkJCWlucC0+c2N0cF9lcC5zY3RwX21pbnJ0
byA9IG5ld19taW47CisJCQkJfSBlbHNlIHsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQkJZXJyb3Ig
PSBFSU5WQUw7CisJCQkJfQorCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCX0gZWxzZSB7
CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJfQorCQlicmVh
azsKKwl9CisJY2FzZSBTQ1RQX0FTU09DSU5GTzoKKwl7CisJCXN0cnVjdCBzY3RwX2Fzc29jcGFy
YW1zICpzYXNvYzsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNhc29jLCBvcHR2YWwsIHN0cnVj
dCBzY3RwX2Fzc29jcGFyYW1zLCBvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNi
LCBzYXNvYy0+c2Fzb2NfYXNzb2NfaWQpOworCQlpZiAoc2Fzb2MtPnNhc29jX2Nvb2tpZV9saWZl
ID4gMCkgeworCQkJLyogYm91bmRhcnkgY2hlY2sgdGhlIGNvb2tpZSBsaWZlICovCisJCQlpZiAo
c2Fzb2MtPnNhc29jX2Nvb2tpZV9saWZlIDwgU0NUUF9NSU5fQ09PS0lFX0xJRkUpIHsKKwkJCQlz
YXNvYy0+c2Fzb2NfY29va2llX2xpZmUgPSBTQ1RQX01JTl9DT09LSUVfTElGRTsKKwkJCX0KKwkJ
CWlmIChzYXNvYy0+c2Fzb2NfY29va2llX2xpZmUgPiBTQ1RQX01BWF9DT09LSUVfTElGRSkgewor
CQkJCXNhc29jLT5zYXNvY19jb29raWVfbGlmZSA9IFNDVFBfTUFYX0NPT0tJRV9MSUZFOworCQkJ
fQorCQl9CisJCWlmIChzdGNiKSB7CisJCQlpZiAoc2Fzb2MtPnNhc29jX2Fzb2NtYXhyeHQgPiAw
KSB7CisJCQkJc3RjYi0+YXNvYy5tYXhfc2VuZF90aW1lcyA9IHNhc29jLT5zYXNvY19hc29jbWF4
cnh0OworCQkJfQorCQkJaWYgKHNhc29jLT5zYXNvY19jb29raWVfbGlmZSA+IDApIHsKKwkJCQlz
dGNiLT5hc29jLmNvb2tpZV9saWZlID0gc2N0cF9tc2Vjc190b190aWNrcyhzYXNvYy0+c2Fzb2Nf
Y29va2llX2xpZmUpOworCQkJfQorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2Ug
eworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAor
CQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAor
CQkJICAgICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkgJiYKKwkJ
CSAgICAgKHNhc29jLT5zYXNvY19hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpKSB7CisJ
CQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJCQlpZiAoc2Fzb2MtPnNhc29jX2Fzb2NtYXhyeHQg
PiAwKSB7CisJCQkJCWlucC0+c2N0cF9lcC5tYXhfc2VuZF90aW1lcyA9IHNhc29jLT5zYXNvY19h
c29jbWF4cnh0OworCQkJCX0KKwkJCQlpZiAoc2Fzb2MtPnNhc29jX2Nvb2tpZV9saWZlID4gMCkg
eworCQkJCQlpbnAtPnNjdHBfZXAuZGVmX2Nvb2tpZV9saWZlID0gc2N0cF9tc2Vjc190b190aWNr
cyhzYXNvYy0+c2Fzb2NfY29va2llX2xpZmUpOworCQkJCX0KKwkJCQlTQ1RQX0lOUF9XVU5MT0NL
KGlucCk7CisJCQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7
CisJCQl9CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9JTklUTVNHOgorCXsKKwkJc3Ry
dWN0IHNjdHBfaW5pdG1zZyAqc2luaXQ7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChzaW5pdCwg
b3B0dmFsLCBzdHJ1Y3Qgc2N0cF9pbml0bXNnLCBvcHRzaXplKTsKKwkJU0NUUF9JTlBfV0xPQ0so
aW5wKTsKKwkJaWYgKHNpbml0LT5zaW5pdF9udW1fb3N0cmVhbXMpCisJCQlpbnAtPnNjdHBfZXAu
cHJlX29wZW5fc3RyZWFtX2NvdW50ID0gc2luaXQtPnNpbml0X251bV9vc3RyZWFtczsKKworCQlp
ZiAoc2luaXQtPnNpbml0X21heF9pbnN0cmVhbXMpCisJCQlpbnAtPnNjdHBfZXAubWF4X29wZW5f
c3RyZWFtc19pbnRvbWUgPSBzaW5pdC0+c2luaXRfbWF4X2luc3RyZWFtczsKKworCQlpZiAoc2lu
aXQtPnNpbml0X21heF9hdHRlbXB0cykKKwkJCWlucC0+c2N0cF9lcC5tYXhfaW5pdF90aW1lcyA9
IHNpbml0LT5zaW5pdF9tYXhfYXR0ZW1wdHM7CisKKwkJaWYgKHNpbml0LT5zaW5pdF9tYXhfaW5p
dF90aW1lbykKKwkJCWlucC0+c2N0cF9lcC5pbml0aWFsX2luaXRfcnRvX21heCA9IHNpbml0LT5z
aW5pdF9tYXhfaW5pdF90aW1lbzsKKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQlicmVhazsK
Kwl9CisJY2FzZSBTQ1RQX1BSSU1BUllfQUREUjoKKwl7CisJCXN0cnVjdCBzY3RwX3NldHByaW0g
KnNwYTsKKwkJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCQlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHI7
CisjaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2KQorCQlzdHJ1Y3Qgc29ja2FkZHJf
aW4gc2luX3N0b3JlOworI2VuZGlmCisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChzcGEsIG9wdHZh
bCwgc3RydWN0IHNjdHBfc2V0cHJpbSwgb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwg
c3RjYiwgc3BhLT5zc3BfYXNzb2NfaWQpOworCisjaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVk
KElORVQ2KQorCQlpZiAoc3BhLT5zc3BfYWRkci5zc19mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJ
CXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisKKwkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRy
X2luNiAqKSZzcGEtPnNzcF9hZGRyOworCQkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42
LT5zaW42X2FkZHIpKSB7CisJCQkJaW42X3NpbjZfMl9zaW4oJnNpbl9zdG9yZSwgc2luNik7CisJ
CQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luX3N0b3JlOworCQkJfSBlbHNlIHsKKwkJ
CQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzcGEtPnNzcF9hZGRyOworCQkJfQorCQl9IGVs
c2UgeworCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc3BhLT5zc3BfYWRkcjsKKwkJfQor
I2Vsc2UKKwkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc3BhLT5zc3BfYWRkcjsKKyNlbmRp
ZgorCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCQluZXQgPSBzY3RwX2ZpbmRuZXQoc3RjYiwgYWRk
cik7CisJCX0gZWxzZSB7CisJCQkvKiBXZSBpbmNyZW1lbnQgaGVyZSBzaW5jZSBzY3RwX2ZpbmRh
c3NvY2lhdGlvbl9lcF9hZGRyKCkgd2lsCisJCQkgKiBkbyBhIGRlY3JlbWVudCBpZiBpdCBmaW5k
cyB0aGUgc3RjYiBhcyBsb25nIGFzIHRoZSBsb2NrZWQKKwkJCSAqIHRjYiAobGFzdCBhcmd1bWVu
dCkgaXMgTk9UIGEgVENCLi4gYWthIE5VTEwuCisJCQkgKi8KKwkJCW5ldCA9IE5VTEw7CisJCQlT
Q1RQX0lOUF9JTkNSX1JFRihpbnApOworCQkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2Vw
X2FkZHIoJmlucCwgYWRkciwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZuZXQsIE5VTEwsIE5VTEwpOworCQkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJCVNDVFBfSU5Q
X0RFQ1JfUkVGKGlucCk7CisJCQl9CisJCX0KKworCQlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYgKG5l
dCAhPSBOVUxMKSkgeworCQkJaWYgKG5ldCAhPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRp
b24pIHsKKwkJCQlpZiAoIShuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQp
KSB7CisJCQkJCS8qIE9rIHdlIG5lZWQgdG8gc2V0IGl0ICovCisJCQkJCWlmIChzY3RwX3NldF9w
cmltYXJ5X2FkZHIoc3RjYiwgKHN0cnVjdCBzb2NrYWRkciAqKU5VTEwsIG5ldCkgPT0gMCkgewor
CQkJCQkJaWYgKChzdGNiLT5hc29jLmFsdGVybmF0ZSkgJiYKKwkJCQkJCSAgICAoIShuZXQtPmRl
c3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYpKSAmJgorCQkJCQkJICAgIChuZXQtPmRlc3Rfc3RhdGUg
JiBTQ1RQX0FERFJfUkVBQ0hBQkxFKSkgeworCQkJCQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihz
dGNiLT5hc29jLmFsdGVybmF0ZSk7CisJCQkJCQkJc3RjYi0+YXNvYy5hbHRlcm5hdGUgPSBOVUxM
OworCQkJCQkJfQorCQkJCQl9IGVsc2UgeworCQkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQkJCWVycm9y
ID0gRUlOVkFMOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQkJ
ZXJyb3IgPSBFSU5WQUw7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsK
KwkJCWVycm9yID0gRUlOVkFMOworCQl9CisJCWlmIChzdGNiICE9IE5VTEwpIHsKKwkJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX1NFVF9EWU5B
TUlDX1BSSU1BUlk6CisJeworCQl1bmlvbiBzY3RwX3NvY2tzdG9yZSAqc3M7CisjaWZkZWYgU0NU
UF9NVlJGCisJCWludCBpLCBmbmQgPSAwOworI2VuZGlmCisjaWYgIWRlZmluZWQoX1dJTjMyKSAm
JiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCQlzdHJ1
Y3QgcHJvYyAqcHJvYzsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCWVycm9y
ID0gcHJpdl9jaGVjayhjdXJ0aHJlYWQsCisJCQkJICAgUFJJVl9ORVRJTkVUX1JFU0VSVkVEUE9S
VCk7CisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwkJcHJvYyA9IChzdHJ1Y3QgcHJvYyAqKXA7
CisJCWlmIChwKSB7CisJCQllcnJvciA9IHN1c2VyKHByb2MtPnBfdWNyZWQsICZwcm9jLT5wX2Fj
ZmxhZyk7CisJCX0gZWxzZSB7CisJCQlicmVhazsKKwkJfQorI2Vsc2UKKwkJZXJyb3IgPSBzdXNl
cihwLCAwKTsKKyNlbmRpZgorCQlpZiAoZXJyb3IpCisJCQlicmVhazsKKyNlbmRpZgorCisJCVND
VFBfQ0hFQ0tfQU5EX0NBU1Qoc3MsIG9wdHZhbCwgdW5pb24gc2N0cF9zb2Nrc3RvcmUsIG9wdHNp
emUpOworCQkvKiBTVVBFUiBVU0VSIENIRUNLPyAqLworI2lmZGVmIFNDVFBfTVZSRgorCQlmb3Ig
KGkgPSAwOyBpIDwgaW5wLT5udW1fdnJmczsgaSsrKSB7CisJCQlpZiAodnJmX2lkID09IGlucC0+
bV92cmZfaWRzW2ldKSB7CisJCQkJZm5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlp
ZiAoIWZuZCkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJYnJlYWs7
CisJCX0KKyNlbmRpZgorCQllcnJvciA9IHNjdHBfZHluYW1pY19zZXRfcHJpbWFyeSgmc3MtPnNh
LCB2cmZfaWQpOworCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX1NFVF9QRUVSX1BSSU1BUllfQURE
UjoKKwl7CisJCXN0cnVjdCBzY3RwX3NldHBlZXJwcmltICpzc3BwOworCQlzdHJ1Y3Qgc29ja2Fk
ZHIgKmFkZHI7CisjaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2KQorCQlzdHJ1Y3Qg
c29ja2FkZHJfaW4gc2luX3N0b3JlOworI2VuZGlmCisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChz
c3BwLCBvcHR2YWwsIHN0cnVjdCBzY3RwX3NldHBlZXJwcmltLCBvcHRzaXplKTsKKwkJU0NUUF9G
SU5EX1NUQ0IoaW5wLCBzdGNiLCBzc3BwLT5zc3BwX2Fzc29jX2lkKTsKKwkJaWYgKHN0Y2IgIT0g
TlVMTCkgeworCQkJc3RydWN0IHNjdHBfaWZhICppZmE7CisKKyNpZiBkZWZpbmVkKElORVQpICYm
IGRlZmluZWQoSU5FVDYpCisJCQlpZiAoc3NwcC0+c3NwcF9hZGRyLnNzX2ZhbWlseSA9PSBBRl9J
TkVUNikgeworCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisKKwkJCQlzaW42ID0gKHN0
cnVjdCBzb2NrYWRkcl9pbjYgKikmc3NwcC0+c3NwcF9hZGRyOworCQkJCWlmIChJTjZfSVNfQURE
Ul9WNE1BUFBFRCgmc2luNi0+c2luNl9hZGRyKSkgeworCQkJCQlpbjZfc2luNl8yX3Npbigmc2lu
X3N0b3JlLCBzaW42KTsKKwkJCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luX3N0b3Jl
OworCQkJCX0gZWxzZSB7CisJCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnNzcHAtPnNz
cHBfYWRkcjsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRy
ICopJnNzcHAtPnNzcHBfYWRkcjsKKwkJCX0KKyNlbHNlCisJCQlhZGRyID0gKHN0cnVjdCBzb2Nr
YWRkciAqKSZzc3BwLT5zc3BwX2FkZHI7CisjZW5kaWYKKwkJCWlmYSA9IHNjdHBfZmluZF9pZmFf
YnlfYWRkcihhZGRyLCBzdGNiLT5hc29jLnZyZl9pZCwgU0NUUF9BRERSX05PVF9MT0NLRUQpOwor
CQkJaWYgKGlmYSA9PSBOVUxMKSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZB
TDsKKwkJCQlnb3RvIG91dF9vZl9pdDsKKwkJCX0KKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpID09IDApIHsKKwkJCQkvKiBNdXN0IHZhbGlkYXRlIHRo
ZSBpZmEgZm91bmQgaXMgaW4gb3VyIGVwICovCisJCQkJc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRy
OworCQkJCWludCBmb3VuZCA9IDA7CisKKwkJCQlMSVNUX0ZPUkVBQ0gobGFkZHIsICZpbnAtPnNj
dHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7CisJCQkJCWlmIChsYWRkci0+aWZhID09IE5V
TEwpIHsKKwkJCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiJXM6IE5VTEwgaWZhXG4i
LAorCQkJCQkJCV9fZnVuY19fKTsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJCWlmICgo
c2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgbGFkZHItPmlmYSkpICYmCisJCQkJCSAgICAo
IXNjdHBfaXNfYWRkcl9wZW5kaW5nKHN0Y2IsIGxhZGRyLT5pZmEpKSkgeworCQkJCQkJY29udGlu
dWU7CisJCQkJCX0KKwkJCQkJaWYgKGxhZGRyLT5pZmEgPT0gaWZhKSB7CisJCQkJCQlmb3VuZCA9
IDE7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoIWZvdW5kKSB7CisJCQkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIEVJTlZBTCk7CisJCQkJCWVycm9yID0gRUlOVkFMOworCQkJCQlnb3RvIG91dF9vZl9pdDsK
KwkJCQl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwkJCX0gZWxzZSB7CisJCQkJc3dpdGNoIChhZGRyLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJ
TkVUCisJCQkJY2FzZSBBRl9JTkVUOgorCQkJCXsKKwkJCQkJc3RydWN0IHNvY2thZGRyX2luICpz
aW47CisKKwkJCQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7CisJCQkJCWlmIChw
cmlzb25fY2hlY2tfaXA0KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKKwkJCQkJICAgICAgICAg
ICAgICAgICAgICAgJnNpbi0+c2luX2FkZHIpICE9IDApIHsKKwkJCQkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJ
CQkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQkJCWdvdG8gb3V0X29mX2l0OworCQkJCQl9CisJCQkJ
CWJyZWFrOworCQkJCX0KKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQkJY2FzZSBBRl9JTkVUNjoK
KwkJCQl7CisJCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisKKwkJCQkJc2luNiA9IChz
dHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKKwkJCQkJaWYgKHByaXNvbl9jaGVja19pcDYoaW5w
LT5pcF9pbnAuaW5wLmlucF9jcmVkLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAmc2luNi0+
c2luNl9hZGRyKSAhPSAwKSB7CisJCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCQkJZXJyb3IgPSBFSU5W
QUw7CisJCQkJCQlnb3RvIG91dF9vZl9pdDsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9Cisj
ZW5kaWYKKwkJCQlkZWZhdWx0OgorCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCQllcnJvciA9IEVJTlZB
TDsKKwkJCQkJZ290byBvdXRfb2ZfaXQ7CisJCQkJfQorI2VuZGlmCisJCQl9CisJCQlpZiAoc2N0
cF9zZXRfcHJpbWFyeV9pcF9hZGRyZXNzX3NhKHN0Y2IsIGFkZHIpICE9IDApIHsKKwkJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
SU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQkJc2N0cF9jaHVua19vdXRwdXQo
aW5wLCBzdGNiLCAgU0NUUF9PVVRQVVRfRlJPTV9TT0NLT1BULCBTQ1RQX1NPX0xPQ0tFRCk7CisJ
CW91dF9vZl9pdDoKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBT
Q1RQX0JJTkRYX0FERF9BRERSOgorCXsKKwkJc3RydWN0IHNvY2thZGRyICpzYTsKKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlzdHJ1Y3QgdGhy
ZWFkICp0ZDsKKworCQl0ZCA9IChzdHJ1Y3QgdGhyZWFkICopcDsKKyNlbmRpZgorCQlTQ1RQX0NI
RUNLX0FORF9DQVNUKHNhLCBvcHR2YWwsIHN0cnVjdCBzb2NrYWRkciwgb3B0c2l6ZSk7CisjaWZk
ZWYgSU5FVAorCQlpZiAoc2EtPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCQlpZiAob3B0c2l6
ZSA8IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQll
cnJvciA9IEVJTlZBTDsKKwkJCQlicmVhazsKKwkJCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJaWYgKHRkICE9IE5VTEwgJiYKKwkJCSAg
ICAoZXJyb3IgPSBwcmlzb25fbG9jYWxfaXA0KHRkLT50ZF91Y3JlZCwgJigoKHN0cnVjdCBzb2Nr
YWRkcl9pbiAqKXNhKS0+c2luX2FkZHIpKSkpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7CisJCQkJYnJlYWs7
CisJCQl9CisjZW5kaWYKKwkJfSBlbHNlCisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQlpZiAoc2Et
PnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJaWYgKG9wdHNpemUgPCBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luNikpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOwor
CQkJCWJyZWFrOworCQkJfQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisJCQlpZiAodGQgIT0gTlVMTCAmJgorCQkJICAgIChlcnJvciA9IHByaXNv
bl9sb2NhbF9pcDYodGQtPnRkX3VjcmVkLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJigoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYSktPnNpbjZfYWRkciksCisJCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoU0NUUF9JUFY2X1Y2T05MWShpbnApICE9IDApKSkgIT0g
MCkgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJCQlicmVhazsKKwkJCX0KKyNlbmRpZgorCQl9IGVsc2UK
KyNlbmRpZgorCQl7CisJCQllcnJvciA9IEVBRk5PU1VQUE9SVDsKKwkJCWJyZWFrOworCQl9CisJ
CXNjdHBfYmluZHhfYWRkX2FkZHJlc3Moc28sIGlucCwgc2EsIHZyZl9pZCwgJmVycm9yLCBwKTsK
KwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9CSU5EWF9SRU1fQUREUjoKKwl7CisJCXN0cnVjdCBz
b2NrYWRkciAqc2E7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKwkJc3RydWN0IHRocmVhZCAqdGQ7CisJCXRkID0gKHN0cnVjdCB0aHJlYWQgKilw
OworCisjZW5kaWYKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChzYSwgb3B0dmFsLCBzdHJ1Y3Qgc29j
a2FkZHIsIG9wdHNpemUpOworI2lmZGVmIElORVQKKwkJaWYgKHNhLT5zYV9mYW1pbHkgPT0gQUZf
SU5FVCkgeworCQkJaWYgKG9wdHNpemUgPCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgewor
CQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9V
U1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJYnJlYWs7CisJCQl9Cisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCWlm
ICh0ZCAhPSBOVUxMICYmCisJCQkgICAgKGVycm9yID0gcHJpc29uX2xvY2FsX2lwNCh0ZC0+dGRf
dWNyZWQsICYoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYSktPnNpbl9hZGRyKSkpKSB7CisJCQkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJF
USwgZXJyb3IpOworCQkJCWJyZWFrOworCQkJfQorI2VuZGlmCisJCX0gZWxzZQorI2VuZGlmCisj
aWZkZWYgSU5FVDYKKwkJaWYgKHNhLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCWlmIChv
cHRzaXplIDwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7CisJCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsK
KwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQlicmVhazsKKwkJCX0KKyNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJaWYgKHRkICE9IE5VTEwgJiYK
KwkJCSAgICAoZXJyb3IgPSBwcmlzb25fbG9jYWxfaXA2KHRkLT50ZF91Y3JlZCwKKwkJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICYoKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2EpLT5z
aW42X2FkZHIpLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNDVFBfSVBWNl9W
Nk9OTFkoaW5wKSAhPSAwKSkpICE9IDApIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
c3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7CisJCQkJYnJlYWs7CisJ
CQl9CisjZW5kaWYKKwkJfSBlbHNlCisjZW5kaWYKKwkJeworCQkJZXJyb3IgPSBFQUZOT1NVUFBP
UlQ7CisJCQlicmVhazsKKwkJfQorCQlzY3RwX2JpbmR4X2RlbGV0ZV9hZGRyZXNzKGlucCwgc2Es
IHZyZl9pZCwgJmVycm9yKTsKKwkJYnJlYWs7CisJfQorI2lmIGRlZmluZWQoX19BUFBMRV9fKSAm
JiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWNhc2UgU0NUUF9MSVNURU5fRklYOgorCQkvKiBv
bmx5IGFwcGxpZXMgdG8gb25lLXRvLW1hbnkgc29ja2V0cyAqLworCQlpZiAoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkgeworCQkJLyogbWFrZSBzdXJlIHRoZSBBQ0NF
UFRDT05OIGZsYWcgaXMgT0ZGICovCisJCQlzby0+c29fb3B0aW9ucyAmPSB+U09fQUNDRVBUQ09O
TjsKKwkJfSBlbHNlIHsKKwkJCS8qIG90aGVyd2lzZSwgbm90IGFsbG93ZWQgKi8KKwkJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJ
TlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJfQorCQlicmVhazsKKyNlbmRpZgorCWNhc2Ug
U0NUUF9FVkVOVDoKKwl7CisJCXN0cnVjdCBzY3RwX2V2ZW50ICpldmVudDsKKwkJdWludDMyX3Qg
ZXZlbnRfdHlwZTsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGV2ZW50LCBvcHR2YWwsIHN0cnVj
dCBzY3RwX2V2ZW50LCBvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBldmVu
dC0+c2VfYXNzb2NfaWQpOworCQlzd2l0Y2ggKGV2ZW50LT5zZV90eXBlKSB7CisJCWNhc2UgU0NU
UF9BU1NPQ19DSEFOR0U6CisJCQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxBR1NfUkVDVkFTU09D
RVZOVDsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfUEVFUl9BRERSX0NIQU5HRToKKwkJCWV2ZW50
X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19SRUNWUEFERFJFVk5UOworCQkJYnJlYWs7CisJCWNhc2Ug
U0NUUF9SRU1PVEVfRVJST1I6CisJCQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxBR1NfUkVDVlBF
RVJFUlI7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX1NFTkRfRkFJTEVEOgorCQkJZXZlbnRfdHlw
ZSA9IFNDVFBfUENCX0ZMQUdTX1JFQ1ZTRU5ERkFJTEVWTlQ7CisJCQlicmVhazsKKwkJY2FzZSBT
Q1RQX1NIVVRET1dOX0VWRU5UOgorCQkJZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX1JFQ1ZT
SFVURE9XTkVWTlQ7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0FEQVBUQVRJT05fSU5ESUNBVElP
TjoKKwkJCWV2ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19BREFQVEFUSU9ORVZOVDsKKwkJCWJy
ZWFrOworCQljYXNlIFNDVFBfUEFSVElBTF9ERUxJVkVSWV9FVkVOVDoKKwkJCWV2ZW50X3R5cGUg
PSBTQ1RQX1BDQl9GTEFHU19QREFQSUVWTlQ7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0FVVEhF
TlRJQ0FUSU9OX0VWRU5UOgorCQkJZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX0FVVEhFVk5U
OworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9TVFJFQU1fUkVTRVRfRVZFTlQ6CisJCQlldmVudF90
eXBlID0gU0NUUF9QQ0JfRkxBR1NfU1RSRUFNX1JFU0VURVZOVDsKKwkJCWJyZWFrOworCQljYXNl
IFNDVFBfU0VOREVSX0RSWV9FVkVOVDoKKwkJCWV2ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19E
UllFVk5UOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9OT1RJRklDQVRJT05TX1NUT1BQRURfRVZF
TlQ6CisJCQlldmVudF90eXBlID0gMDsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT1RTVVApOworCQkJZXJyb3IgPSBFTk9U
U1VQOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9BU1NPQ19SRVNFVF9FVkVOVDoKKwkJCWV2ZW50
X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19BU1NPQ19SRVNFVEVWTlQ7CisJCQlicmVhazsKKwkJY2Fz
ZSBTQ1RQX1NUUkVBTV9DSEFOR0VfRVZFTlQ6CisJCQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxB
R1NfU1RSRUFNX0NIQU5HRUVWTlQ7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX1NFTkRfRkFJTEVE
X0VWRU5UOgorCQkJZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX1JFQ1ZOU0VOREZBSUxFVk5U
OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlldmVudF90eXBlID0gMDsKKwkJCVNDVFBfTFRS
QUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZB
TCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChldmVudF90eXBl
ID4gMCkgeworCQkJaWYgKHN0Y2IpIHsKKwkJCQlpZiAoZXZlbnQtPnNlX29uKSB7CisJCQkJCXNj
dHBfc3RjYl9mZWF0dXJlX29uKGlucCwgc3RjYiwgZXZlbnRfdHlwZSk7CisJCQkJCWlmIChldmVu
dF90eXBlID09IFNDVFBfUENCX0ZMQUdTX0RSWUVWTlQpIHsKKwkJCQkJCWlmIChUQUlMUV9FTVBU
WSgmc3RjYi0+YXNvYy5zZW5kX3F1ZXVlKSAmJgorCQkJCQkJICAgIFRBSUxRX0VNUFRZKCZzdGNi
LT5hc29jLnNlbnRfcXVldWUpICYmCisJCQkJCQkgICAgKHN0Y2ItPmFzb2Muc3RyZWFtX3F1ZXVl
X2NudCA9PSAwKSkgeworCQkJCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9TRU5ERVJf
RFJZLCBzdGNiLCAgMCwgTlVMTCwgU0NUUF9TT19MT0NLRUQpOworCQkJCQkJfQorCQkJCQl9CisJ
CQkJfSBlbHNlIHsKKwkJCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb2ZmKGlucCwgc3RjYiwgZXZlbnRf
dHlwZSk7CisJCQkJfQorCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCX0gZWxzZSB7CisJ
CQkJLyoKKwkJCQkgKiBXZSBkb24ndCB3YW50IHRvIHNlbmQgdXAgYSBzdG9ybSBvZiBldmVudHMs
CisJCQkJICogc28gcmV0dXJuIGFuIGVycm9yIGZvciBzZW5kZXIgZHJ5IGV2ZW50cworCQkJCSAq
LworCQkJCWlmICgoZXZlbnRfdHlwZSA9PSBTQ1RQX1BDQl9GTEFHU19EUllFVk5UKSAmJgorCQkJ
CSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkgJiYKKwkJCQkg
ICAgKChldmVudC0+c2VfYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpIHx8CisJCQkJICAgICAo
ZXZlbnQtPnNlX2Fzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQykpKSB7CisJCQkJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVO
T1RTVVApOworCQkJCQllcnJvciA9IEVOT1RTVVA7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlp
ZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkJICAg
IChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJCSAg
ICAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUpICYmCisJCQkJICAg
ICAoKGV2ZW50LT5zZV9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykgfHwKKwkJCQkgICAg
ICAoZXZlbnQtPnNlX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkpKSB7CisJCQkJCVNDVFBf
SU5QX1dMT0NLKGlucCk7CisJCQkJCWlmIChldmVudC0+c2Vfb24pIHsKKwkJCQkJCXNjdHBfZmVh
dHVyZV9vbihpbnAsIGV2ZW50X3R5cGUpOworCQkJCQl9IGVsc2UgeworCQkJCQkJc2N0cF9mZWF0
dXJlX29mZihpbnAsIGV2ZW50X3R5cGUpOworCQkJCQl9CisJCQkJCVNDVFBfSU5QX1dVTkxPQ0so
aW5wKTsKKwkJCQl9CisJCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19V
RFBUWVBFKSAmJgorCQkJCSAgICAoKGV2ZW50LT5zZV9hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRf
QVNTT0MpIHx8CisJCQkJICAgICAoZXZlbnQtPnNlX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09D
KSkpIHsKKwkJCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQkJTElTVF9GT1JFQUNIKHN0Y2Is
ICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKKwkJCQkJCVNDVFBfVENCX0xP
Q0soc3RjYik7CisJCQkJCQlpZiAoZXZlbnQtPnNlX29uKSB7CisJCQkJCQkJc2N0cF9zdGNiX2Zl
YXR1cmVfb24oaW5wLCBzdGNiLCBldmVudF90eXBlKTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJ
c2N0cF9zdGNiX2ZlYXR1cmVfb2ZmKGlucCwgc3RjYiwgZXZlbnRfdHlwZSk7CisJCQkJCQl9CisJ
CQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCX0KKwkJCQkJU0NUUF9JTlBfUlVOTE9D
SyhpbnApOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChzdGNiKSB7CisJCQkJU0NU
UF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJfQorCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBf
UkVDVlJDVklORk86CisJeworCQlpbnQgKm9ub2ZmOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qo
b25vZmYsIG9wdHZhbCwgaW50LCBvcHRzaXplKTsKKwkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJ
aWYgKCpvbm9mZiAhPSAwKSB7CisJCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFH
U19SRUNWUkNWSU5GTyk7CisJCX0gZWxzZSB7CisJCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NU
UF9QQ0JfRkxBR1NfUkVDVlJDVklORk8pOworCQl9CisJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsK
KwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9SRUNWTlhUSU5GTzoKKwl7CisJCWludCAqb25vZmY7
CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChvbm9mZiwgb3B0dmFsLCBpbnQsIG9wdHNpemUpOwor
CQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQlpZiAoKm9ub2ZmICE9IDApIHsKKwkJCXNjdHBfZmVh
dHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZOWFRJTkZPKTsKKwkJfSBlbHNlIHsKKwkJ
CXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWTlhUSU5GTyk7CisJCX0K
KwkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0RFRkFV
TFRfU05ESU5GTzoKKwl7CisJCXN0cnVjdCBzY3RwX3NuZGluZm8gKmluZm87CisJCXVpbnQxNl90
IHBvbGljeTsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGluZm8sIG9wdHZhbCwgc3RydWN0IHNj
dHBfc25kaW5mbywgb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgaW5mby0+
c25kX2Fzc29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJaWYgKGluZm8tPnNuZF9zaWQgPCBz
dGNiLT5hc29jLnN0cmVhbW91dGNudCkgeworCQkJCXN0Y2ItPmFzb2MuZGVmX3NlbmQuc2luZm9f
c3RyZWFtID0gaW5mby0+c25kX3NpZDsKKwkJCQlwb2xpY3kgPSBQUl9TQ1RQX1BPTElDWShzdGNi
LT5hc29jLmRlZl9zZW5kLnNpbmZvX2ZsYWdzKTsKKwkJCQlzdGNiLT5hc29jLmRlZl9zZW5kLnNp
bmZvX2ZsYWdzID0gaW5mby0+c25kX2ZsYWdzOworCQkJCXN0Y2ItPmFzb2MuZGVmX3NlbmQuc2lu
Zm9fZmxhZ3MgfD0gcG9saWN5OworCQkJCXN0Y2ItPmFzb2MuZGVmX3NlbmQuc2luZm9fcHBpZCA9
IGluZm8tPnNuZF9wcGlkOworCQkJCXN0Y2ItPmFzb2MuZGVmX3NlbmQuc2luZm9fY29udGV4dCA9
IGluZm8tPnNuZF9jb250ZXh0OworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVy
cm9yID0gRUlOVkFMOworCQkJfQorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2Ug
eworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAor
CQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAor
CQkJICAgICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkgJiYKKwkJ
CSAgICAgKChpbmZvLT5zbmRfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpIHx8CisJCQkg
ICAgICAoaW5mby0+c25kX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkpKSB7CisJCQkJU0NU
UF9JTlBfV0xPQ0soaW5wKTsKKwkJCQlpbnAtPmRlZl9zZW5kLnNpbmZvX3N0cmVhbSA9IGluZm8t
PnNuZF9zaWQ7CisJCQkJcG9saWN5ID0gUFJfU0NUUF9QT0xJQ1koaW5wLT5kZWZfc2VuZC5zaW5m
b19mbGFncyk7CisJCQkJaW5wLT5kZWZfc2VuZC5zaW5mb19mbGFncyA9IGluZm8tPnNuZF9mbGFn
czsKKwkJCQlpbnAtPmRlZl9zZW5kLnNpbmZvX2ZsYWdzIHw9IHBvbGljeTsKKwkJCQlpbnAtPmRl
Zl9zZW5kLnNpbmZvX3BwaWQgPSBpbmZvLT5zbmRfcHBpZDsKKwkJCQlpbnAtPmRlZl9zZW5kLnNp
bmZvX2NvbnRleHQgPSBpbmZvLT5zbmRfY29udGV4dDsKKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlu
cCk7CisJCQl9CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1VEUFRZ
UEUpICYmCisJCQkgICAgKChpbmZvLT5zbmRfYXNzb2NfaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09D
KSB8fAorCQkJICAgICAoaW5mby0+c25kX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkpIHsK
KwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJCUxJU1RfRk9SRUFDSChzdGNiLCAmaW5wLT5z
Y3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7CisJCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7
CisJCQkJCWlmIChpbmZvLT5zbmRfc2lkIDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQpIHsKKwkJ
CQkJCXN0Y2ItPmFzb2MuZGVmX3NlbmQuc2luZm9fc3RyZWFtID0gaW5mby0+c25kX3NpZDsKKwkJ
CQkJCXBvbGljeSA9IFBSX1NDVFBfUE9MSUNZKHN0Y2ItPmFzb2MuZGVmX3NlbmQuc2luZm9fZmxh
Z3MpOworCQkJCQkJc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19mbGFncyA9IGluZm8tPnNuZF9m
bGFnczsKKwkJCQkJCXN0Y2ItPmFzb2MuZGVmX3NlbmQuc2luZm9fZmxhZ3MgfD0gcG9saWN5Owor
CQkJCQkJc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19wcGlkID0gaW5mby0+c25kX3BwaWQ7CisJ
CQkJCQlzdGNiLT5hc29jLmRlZl9zZW5kLnNpbmZvX2NvbnRleHQgPSBpbmZvLT5zbmRfY29udGV4
dDsKKwkJCQkJfQorCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJfQorCQkJCVNDVFBf
SU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0RF
RkFVTFRfUFJJTkZPOgorCXsKKwkJc3RydWN0IHNjdHBfZGVmYXVsdF9wcmluZm8gKmluZm87CisK
KwkJU0NUUF9DSEVDS19BTkRfQ0FTVChpbmZvLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2RlZmF1bHRf
cHJpbmZvLCBvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBpbmZvLT5wcl9h
c3NvY19pZCk7CisKKwkJaWYgKGluZm8tPnByX3BvbGljeSA+IFNDVFBfUFJfU0NUUF9NQVgpIHsK
KwkJCWlmIChzdGNiKSB7CisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJfQorCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHN0Y2Ip
IHsKKwkJCXN0Y2ItPmFzb2MuZGVmX3NlbmQuc2luZm9fZmxhZ3MgJj0gMHhmZmYwOworCQkJc3Rj
Yi0+YXNvYy5kZWZfc2VuZC5zaW5mb19mbGFncyB8PSBpbmZvLT5wcl9wb2xpY3k7CisJCQlzdGNi
LT5hc29jLmRlZl9zZW5kLnNpbmZvX3RpbWV0b2xpdmUgPSBpbmZvLT5wcl92YWx1ZTsKKwkJCVND
VFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUpICYmCisJCQkgICAgICgoaW5mby0+cHJfYXNzb2NfaWQg
PT0gU0NUUF9GVVRVUkVfQVNTT0MpIHx8CisJCQkgICAgICAoaW5mby0+cHJfYXNzb2NfaWQgPT0g
U0NUUF9BTExfQVNTT0MpKSkpIHsKKwkJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQkJCWlucC0+
ZGVmX3NlbmQuc2luZm9fZmxhZ3MgJj0gMHhmZmYwOworCQkJCWlucC0+ZGVmX3NlbmQuc2luZm9f
ZmxhZ3MgfD0gaW5mby0+cHJfcG9saWN5OworCQkJCWlucC0+ZGVmX3NlbmQuc2luZm9fdGltZXRv
bGl2ZSA9IGluZm8tPnByX3ZhbHVlOworCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCX0K
KwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkgJiYKKwkJ
CSAgICAoKGluZm8tPnByX2Fzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQykgfHwKKwkJCSAg
ICAgKGluZm8tPnByX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkpIHsKKwkJCQlTQ1RQX0lO
UF9STE9DSyhpbnApOworCQkJCUxJU1RfRk9SRUFDSChzdGNiLCAmaW5wLT5zY3RwX2Fzb2NfbGlz
dCwgc2N0cF90Y2JsaXN0KSB7CisJCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQkJCXN0Y2It
PmFzb2MuZGVmX3NlbmQuc2luZm9fZmxhZ3MgJj0gMHhmZmYwOworCQkJCQlzdGNiLT5hc29jLmRl
Zl9zZW5kLnNpbmZvX2ZsYWdzIHw9IGluZm8tPnByX3BvbGljeTsKKwkJCQkJc3RjYi0+YXNvYy5k
ZWZfc2VuZC5zaW5mb190aW1ldG9saXZlID0gaW5mby0+cHJfdmFsdWU7CisJCQkJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfQor
CQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfUEVFUl9BRERSX1RITERTOgorCQkvKiBBcHBs
aWVzIHRvIHRoZSBzcGVjaWZpYyBhc3NvY2lhdGlvbiAqLworCXsKKwkJc3RydWN0IHNjdHBfcGFk
ZHJ0aGxkcyAqdGhsZHM7CisJCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKwkJc3RydWN0IHNvY2th
ZGRyICphZGRyOworI2lmIGRlZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJTkVUNikKKwkJc3RydWN0
IHNvY2thZGRyX2luIHNpbl9zdG9yZTsKKyNlbmRpZgorCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qo
dGhsZHMsIG9wdHZhbCwgc3RydWN0IHNjdHBfcGFkZHJ0aGxkcywgb3B0c2l6ZSk7CisJCVNDVFBf
RklORF9TVENCKGlucCwgc3RjYiwgdGhsZHMtPnNwdF9hc3NvY19pZCk7CisKKyNpZiBkZWZpbmVk
KElORVQpICYmIGRlZmluZWQoSU5FVDYpCisJCWlmICh0aGxkcy0+c3B0X2FkZHJlc3Muc3NfZmFt
aWx5ID09IEFGX0lORVQ2KSB7CisJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCisJCQlz
aW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmdGhsZHMtPnNwdF9hZGRyZXNzOworCQkJaWYg
KElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQkJaW42X3NpbjZf
Ml9zaW4oJnNpbl9zdG9yZSwgc2luNik7CisJCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikm
c2luX3N0b3JlOworCQkJfSBlbHNlIHsKKwkJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZ0
aGxkcy0+c3B0X2FkZHJlc3M7CisJCQl9CisJCX0gZWxzZSB7CisJCQlhZGRyID0gKHN0cnVjdCBz
b2NrYWRkciAqKSZ0aGxkcy0+c3B0X2FkZHJlc3M7CisJCX0KKyNlbHNlCisJCWFkZHIgPSAoc3Ry
dWN0IHNvY2thZGRyICopJnRobGRzLT5zcHRfYWRkcmVzczsKKyNlbmRpZgorCQlpZiAoc3RjYiAh
PSBOVUxMKSB7CisJCQluZXQgPSBzY3RwX2ZpbmRuZXQoc3RjYiwgYWRkcik7CisJCX0gZWxzZSB7
CisJCQkvKiBXZSBpbmNyZW1lbnQgaGVyZSBzaW5jZSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9h
ZGRyKCkgd2lsCisJCQkgKiBkbyBhIGRlY3JlbWVudCBpZiBpdCBmaW5kcyB0aGUgc3RjYiBhcyBs
b25nIGFzIHRoZSBsb2NrZWQKKwkJCSAqIHRjYiAobGFzdCBhcmd1bWVudCkgaXMgTk9UIGEgVENC
Li4gYWthIE5VTEwuCisJCQkgKi8KKwkJCW5ldCA9IE5VTEw7CisJCQlTQ1RQX0lOUF9JTkNSX1JF
RihpbnApOworCQkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoJmlucCwgYWRk
ciwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXQsIE5VTEwsIE5V
TEwpOworCQkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7
CisJCQl9CisJCX0KKwkJaWYgKChzdGNiICE9IE5VTEwpICYmIChuZXQgPT0gTlVMTCkpIHsKKyNp
ZmRlZiBJTkVUCisJCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQpIHsKKwkJCQlzdHJ1
Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKworCQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilh
ZGRyOworCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciAhPSBJTkFERFJfQU5ZKSB7CisJCQkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIEVJTlZBTCk7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQkJZXJyb3IgPSBF
SU5WQUw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZQorI2VuZGlmCisjaWZkZWYgSU5F
VDYKKwkJCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCQlzdHJ1Y3Qgc29j
a2FkZHJfaW42ICpzaW42OworCisJCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRk
cjsKKwkJCQlpZiAoIUlONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzaW42LT5zaW42X2FkZHIpKSB7
CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQkJZXJy
b3IgPSBFSU5WQUw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZQorI2VuZGlmCisjaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9DT05O
KSB7CisJCQkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uOworCisJCQkJc2Nvbm4gPSAoc3Ry
dWN0IHNvY2thZGRyX2Nvbm4gKilhZGRyOworCQkJCWlmIChzY29ubi0+c2Nvbm5fYWRkciAhPSBO
VUxMKSB7CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJ
CQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZQorI2VuZGlm
CisJCQl7CisJCQkJZXJyb3IgPSBFQUZOT1NVUFBPUlQ7CisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0
Y2IpOworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAodGhsZHMt
PnNwdF9wYXRoY3B0aGxkICE9IDB4ZmZmZikgeworCQkJaWYgKHN0Y2IgIT0gTlVMTCkgeworCQkJ
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCX0KKwkJCWVycm9yID0gRUlOVkFMOworCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
ZXJyb3IpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHN0Y2IgIT0gTlVMTCkgeworCQkJaWYgKG5l
dCAhPSBOVUxMKSB7CisJCQkJbmV0LT5mYWlsdXJlX3RocmVzaG9sZCA9IHRobGRzLT5zcHRfcGF0
aG1heHJ4dDsKKwkJCQluZXQtPnBmX3RocmVzaG9sZCA9IHRobGRzLT5zcHRfcGF0aHBmdGhsZDsK
KwkJCQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1BGKSB7CisJCQkJCWlmICgobmV0
LT5lcnJvcl9jb3VudCA+IG5ldC0+ZmFpbHVyZV90aHJlc2hvbGQpIHx8CisJCQkJCSAgICAobmV0
LT5lcnJvcl9jb3VudCA8PSBuZXQtPnBmX3RocmVzaG9sZCkpIHsKKwkJCQkJCW5ldC0+ZGVzdF9z
dGF0ZSAmPSB+U0NUUF9BRERSX1BGOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKChu
ZXQtPmVycm9yX2NvdW50ID4gbmV0LT5wZl90aHJlc2hvbGQpICYmCisJCQkJCSAgICAobmV0LT5l
cnJvcl9jb3VudCA8PSBuZXQtPmZhaWx1cmVfdGhyZXNob2xkKSkgeworCQkJCQkJbmV0LT5kZXN0
X3N0YXRlIHw9IFNDVFBfQUREUl9QRjsKKwkJCQkJCXNjdHBfc2VuZF9oYihzdGNiLCBuZXQsIFND
VFBfU09fTE9DS0VEKTsKKwkJCQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfSEVB
UlRCRUFULAorCQkJCQkJICAgICAgICAgICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCwK
KwkJCQkJCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ18x
Nyk7CisJCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIHN0
Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCk7CisJCQkJCX0KKwkJCQl9CisJCQkJaWYgKG5ldC0+ZGVz
dF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpIHsKKwkJCQkJaWYgKG5ldC0+ZXJyb3JfY291
bnQgPiBuZXQtPmZhaWx1cmVfdGhyZXNob2xkKSB7CisJCQkJCQluZXQtPmRlc3Rfc3RhdGUgJj0g
flNDVFBfQUREUl9SRUFDSEFCTEU7CisJCQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllf
SU5URVJGQUNFX0RPV04sIHN0Y2IsIDAsIG5ldCwgU0NUUF9TT19MT0NLRUQpOworCQkJCQl9CisJ
CQkJfSBlbHNlIHsKKwkJCQkJaWYgKG5ldC0+ZXJyb3JfY291bnQgPD0gbmV0LT5mYWlsdXJlX3Ro
cmVzaG9sZCkgeworCQkJCQkJbmV0LT5kZXN0X3N0YXRlIHw9IFNDVFBfQUREUl9SRUFDSEFCTEU7
CisJCQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfSU5URVJGQUNFX1VQLCBzdGNiLCAw
LCBuZXQsIFNDVFBfU09fTE9DS0VEKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJ
VEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQkJCQlu
ZXQtPmZhaWx1cmVfdGhyZXNob2xkID0gdGhsZHMtPnNwdF9wYXRobWF4cnh0OworCQkJCQluZXQt
PnBmX3RocmVzaG9sZCA9IHRobGRzLT5zcHRfcGF0aHBmdGhsZDsKKwkJCQkJaWYgKG5ldC0+ZGVz
dF9zdGF0ZSAmIFNDVFBfQUREUl9QRikgeworCQkJCQkJaWYgKChuZXQtPmVycm9yX2NvdW50ID4g
bmV0LT5mYWlsdXJlX3RocmVzaG9sZCkgfHwKKwkJCQkJCSAgICAobmV0LT5lcnJvcl9jb3VudCA8
PSBuZXQtPnBmX3RocmVzaG9sZCkpIHsKKwkJCQkJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBf
QUREUl9QRjsKKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWlmICgobmV0LT5lcnJvcl9j
b3VudCA+IG5ldC0+cGZfdGhyZXNob2xkKSAmJgorCQkJCQkJICAgIChuZXQtPmVycm9yX2NvdW50
IDw9IG5ldC0+ZmFpbHVyZV90aHJlc2hvbGQpKSB7CisJCQkJCQkJbmV0LT5kZXN0X3N0YXRlIHw9
IFNDVFBfQUREUl9QRjsKKwkJCQkJCQlzY3RwX3NlbmRfaGIoc3RjYiwgbmV0LCBTQ1RQX1NPX0xP
Q0tFRCk7CisJCQkJCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQs
CisJCQkJCQkJICAgICAgICAgICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCwKKwkJCQkJ
CQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfVVNSUkVRICsgU0NUUF9MT0NfMTgpOwor
CQkJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgc3RjYi0+
c2N0cF9lcCwgc3RjYiwgbmV0KTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlpZiAobmV0LT5kZXN0
X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkgeworCQkJCQkJaWYgKG5ldC0+ZXJyb3JfY291
bnQgPiBuZXQtPmZhaWx1cmVfdGhyZXNob2xkKSB7CisJCQkJCQkJbmV0LT5kZXN0X3N0YXRlICY9
IH5TQ1RQX0FERFJfUkVBQ0hBQkxFOworCQkJCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElG
WV9JTlRFUkZBQ0VfRE9XTiwgc3RjYiwgMCwgbmV0LCBTQ1RQX1NPX0xPQ0tFRCk7CisJCQkJCQl9
CisJCQkJCX0gZWxzZSB7CisJCQkJCQlpZiAobmV0LT5lcnJvcl9jb3VudCA8PSBuZXQtPmZhaWx1
cmVfdGhyZXNob2xkKSB7CisJCQkJCQkJbmV0LT5kZXN0X3N0YXRlIHw9IFNDVFBfQUREUl9SRUFD
SEFCTEU7CisJCQkJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0lOVEVSRkFDRV9VUCwg
c3RjYiwgMCwgbmV0LCBTQ1RQX1NPX0xPQ0tFRCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJ
CQkJc3RjYi0+YXNvYy5kZWZfbmV0X2ZhaWx1cmUgPSB0aGxkcy0+c3B0X3BhdGhtYXhyeHQ7CisJ
CQkJc3RjYi0+YXNvYy5kZWZfbmV0X3BmX3RocmVzaG9sZCA9IHRobGRzLT5zcHRfcGF0aHBmdGhs
ZDsKKwkJCX0KKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5w
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUpICYmCisJCQkgICAgICh0aGxk
cy0+c3B0X2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkpIHsKKwkJCQlTQ1RQX0lOUF9X
TE9DSyhpbnApOworCQkJCWlucC0+c2N0cF9lcC5kZWZfbmV0X2ZhaWx1cmUgPSB0aGxkcy0+c3B0
X3BhdGhtYXhyeHQ7CisJCQkJaW5wLT5zY3RwX2VwLmRlZl9uZXRfcGZfdGhyZXNob2xkID0gdGhs
ZHMtPnNwdF9wYXRocGZ0aGxkOworCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCX0gZWxz
ZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJfQorCQli
cmVhazsKKwl9CisJY2FzZSBTQ1RQX1JFTU9URV9VRFBfRU5DQVBTX1BPUlQ6CisJeworCQlzdHJ1
Y3Qgc2N0cF91ZHBlbmNhcHMgKmVuY2FwczsKKwkJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCQlz
dHJ1Y3Qgc29ja2FkZHIgKmFkZHI7CisjaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2
KQorCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luX3N0b3JlOworI2VuZGlmCisKKwkJU0NUUF9DSEVD
S19BTkRfQ0FTVChlbmNhcHMsIG9wdHZhbCwgc3RydWN0IHNjdHBfdWRwZW5jYXBzLCBvcHRzaXpl
KTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBlbmNhcHMtPnN1ZV9hc3NvY19pZCk7CisK
KyNpZiBkZWZpbmVkKElORVQpICYmIGRlZmluZWQoSU5FVDYpCisJCWlmIChlbmNhcHMtPnN1ZV9h
ZGRyZXNzLnNzX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJc3RydWN0IHNvY2thZGRyX2luNiAq
c2luNjsKKworCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJmVuY2Fwcy0+c3VlX2Fk
ZHJlc3M7CisJCQlpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsK
KwkJCQlpbjZfc2luNl8yX3Npbigmc2luX3N0b3JlLCBzaW42KTsKKwkJCQlhZGRyID0gKHN0cnVj
dCBzb2NrYWRkciAqKSZzaW5fc3RvcmU7CisJCQl9IGVsc2UgeworCQkJCWFkZHIgPSAoc3RydWN0
IHNvY2thZGRyICopJmVuY2Fwcy0+c3VlX2FkZHJlc3M7CisJCQl9CisJCX0gZWxzZSB7CisJCQlh
ZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZlbmNhcHMtPnN1ZV9hZGRyZXNzOworCQl9CisjZWxz
ZQorCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZlbmNhcHMtPnN1ZV9hZGRyZXNzOworI2Vu
ZGlmCisJCWlmIChzdGNiICE9IE5VTEwpIHsKKwkJCW5ldCA9IHNjdHBfZmluZG5ldChzdGNiLCBh
ZGRyKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFdlIGluY3JlbWVudCBoZXJlIHNpbmNlIHNjdHBfZmlu
ZGFzc29jaWF0aW9uX2VwX2FkZHIoKSB3aWwKKwkJCSAqIGRvIGEgZGVjcmVtZW50IGlmIGl0IGZp
bmRzIHRoZSBzdGNiIGFzIGxvbmcgYXMgdGhlIGxvY2tlZAorCQkJICogdGNiIChsYXN0IGFyZ3Vt
ZW50KSBpcyBOT1QgYSBUQ0IuLiBha2EgTlVMTC4KKwkJCSAqLworCQkJbmV0ID0gTlVMTDsKKwkJ
CVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7CisJCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25f
ZXBfYWRkcigmaW5wLCBhZGRyLCAmbmV0LCBOVUxMLCBOVUxMKTsKKwkJCWlmIChzdGNiID09IE5V
TEwpIHsKKwkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCQkJfQorCQl9CisJCWlmICgoc3Rj
YiAhPSBOVUxMKSAmJiAobmV0ID09IE5VTEwpKSB7CisjaWZkZWYgSU5FVAorCQkJaWYgKGFkZHIt
PnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisK
KwkJCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcjsKKwkJCQlpZiAoc2luLT5zaW5f
YWRkci5zX2FkZHIgIT0gSU5BRERSX0FOWSkgeworCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCWVycm9yID0gRUlOVkFMOworCQkJCQlicmVhazsKKwkJ
CQl9CisJCQl9IGVsc2UKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQlpZiAoYWRkci0+c2FfZmFt
aWx5ID09IEFGX0lORVQ2KSB7CisJCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKworCQkJ
CXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7CisJCQkJaWYgKCFJTjZfSVNfQURE
Ul9VTlNQRUNJRklFRCgmc2luNi0+c2luNl9hZGRyKSkgeworCQkJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJ
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCWVycm9yID0gRUlOVkFMOworCQkJCQlicmVh
azsKKwkJCQl9CisJCQl9IGVsc2UKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KwkJCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfQ09OTikgeworCQkJCXN0cnVjdCBzb2NrYWRk
cl9jb25uICpzY29ubjsKKworCQkJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopYWRk
cjsKKwkJCQlpZiAoc2Nvbm4tPnNjb25uX2FkZHIgIT0gTlVMTCkgeworCQkJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwp
OworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCWVycm9yID0gRUlOVkFMOworCQkJ
CQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UKKyNlbmRpZgorCQkJeworCQkJCQllcnJvciA9IEVB
Rk5PU1VQUE9SVDsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7
CisJCQkJCWJyZWFrOworCQkJCX0KKwkJfQorCisJCWlmIChzdGNiICE9IE5VTEwpIHsKKwkJCWlm
IChuZXQgIT0gTlVMTCkgeworCQkJCW5ldC0+cG9ydCA9IGVuY2Fwcy0+c3VlX3BvcnQ7CisJCQl9
IGVsc2UgeworCQkJCXN0Y2ItPmFzb2MucG9ydCA9IGVuY2Fwcy0+c3VlX3BvcnQ7CisJCQl9CisJ
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKChpbnAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19VRFBUWVBFKSAmJgorCQkJICAgICAoZW5jYXBzLT5zdWVfYXNz
b2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSkgeworCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7
CisJCQkJaW5wLT5zY3RwX2VwLnBvcnQgPSBlbmNhcHMtPnN1ZV9wb3J0OworCQkJCVNDVFBfSU5Q
X1dVTkxPQ0soaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9
IEVJTlZBTDsKKwkJCX0KKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0VDTl9TVVBQT1JU
RUQ6CisJeworCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7CisKKwkJU0NUUF9DSEVDS19B
TkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgb3B0c2l6ZSk7CisJ
CVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKKworCQlpZiAoc3RjYikg
eworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJU0NUUF9UQ0JfVU5MT0NL
KHN0Y2IpOworCQl9IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19UQ1BUWVBFKSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFH
U19JTl9UQ1BQT09MKSB8fAorCQkJICAgICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfVURQVFlQRSkgJiYKKwkJCSAgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NP
QykpKSB7CisJCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJCQlpZiAoYXYtPmFzc29jX3ZhbHVl
ID09IDApIHsKKwkJCQkJaW5wLT5lY25fc3VwcG9ydGVkID0gMDsKKwkJCQl9IGVsc2UgeworCQkJ
CQlpbnAtPmVjbl9zdXBwb3J0ZWQgPSAxOworCQkJCX0KKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlu
cCk7CisJCQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJ
CQl9CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9QUl9TVVBQT1JURUQ6CisJeworCQlz
dHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwg
b3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgb3B0c2l6ZSk7CisJCVNDVFBfRklORF9T
VENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlO
VkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9
IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBF
KSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09M
KSB8fAorCQkJICAgICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkg
JiYKKwkJCSAgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpKSB7CisJCQkJ
U0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJCQlpZiAoYXYtPmFzc29jX3ZhbHVlID09IDApIHsKKwkJ
CQkJaW5wLT5wcnNjdHBfc3VwcG9ydGVkID0gMDsKKwkJCQl9IGVsc2UgeworCQkJCQlpbnAtPnBy
c2N0cF9zdXBwb3J0ZWQgPSAxOworCQkJCX0KKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJ
CQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJ
CX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9BVVRIX1NVUFBPUlRFRDoKKwl7CisJCXN0cnVj
dCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2
YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCBvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0Io
aW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOworCisJCWlmIChzdGNiKSB7CisJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwp
OworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxz
ZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8
CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8
CisJCQkgICAgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VRFBUWVBFKSAmJgor
CQkJICAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkpIHsKKwkJCQlpZiAo
KGF2LT5hc3NvY192YWx1ZSA9PSAwKSAmJgorCQkJCSAgICAoaW5wLT5hc2NvbmZfc3VwcG9ydGVk
ID09IDEpKSB7CisJCQkJICAgIAkvKiBBVVRIIGlzIHJlcXVpcmVkIGZvciBBU0NPTkYgKi8KKwkJ
CQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VT
UlJFUSwgRUlOVkFMKTsKKwkJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJfSBlbHNlIHsKKwkJCQkJ
U0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJCQkJaWYgKGF2LT5hc3NvY192YWx1ZSA9PSAwKSB7CisJ
CQkJCQlpbnAtPmF1dGhfc3VwcG9ydGVkID0gMDsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWlucC0+
YXV0aF9zdXBwb3J0ZWQgPSAxOworCQkJCQl9CisJCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsK
KwkJCQl9CisJCQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7
CisJCQl9CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9BU0NPTkZfU1VQUE9SVEVEOgor
CXsKKwkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NB
U1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsIG9wdHNpemUpOworCQlTQ1RQ
X0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
VENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5f
VENQUE9PTCkgfHwKKwkJCSAgICAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1VE
UFRZUEUpICYmCisJCQkgICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSkg
eworCQkJCWlmICgoYXYtPmFzc29jX3ZhbHVlICE9IDApICYmCisJCQkJICAgIChpbnAtPmF1dGhf
c3VwcG9ydGVkID09IDApKSB7CisJCQkJICAgIAkvKiBBVVRIIGlzIHJlcXVpcmVkIGZvciBBU0NP
TkYgKi8KKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJfSBlbHNl
IHsKKwkJCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJCQkJaWYgKGF2LT5hc3NvY192YWx1ZSA9
PSAwKSB7CisJCQkJCQlpbnAtPmFzY29uZl9zdXBwb3J0ZWQgPSAwOworCQkJCQkJc2N0cF9hdXRo
X2RlbGV0ZV9jaHVuayhTQ1RQX0FTQ09ORiwKKwkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAg
aW5wLT5zY3RwX2VwLmxvY2FsX2F1dGhfY2h1bmtzKTsKKwkJCQkJCXNjdHBfYXV0aF9kZWxldGVf
Y2h1bmsoU0NUUF9BU0NPTkZfQUNLLAorCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICBpbnAt
PnNjdHBfZXAubG9jYWxfYXV0aF9jaHVua3MpOworCQkJCQl9IGVsc2UgeworCQkJCQkJaW5wLT5h
c2NvbmZfc3VwcG9ydGVkID0gMTsKKwkJCQkJCXNjdHBfYXV0aF9hZGRfY2h1bmsoU0NUUF9BU0NP
TkYsCisJCQkJCQkgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2No
dW5rcyk7CisJCQkJCQlzY3RwX2F1dGhfYWRkX2NodW5rKFNDVFBfQVNDT05GX0FDSywKKwkJCQkJ
CSAgICAgICAgICAgICAgICAgICAgaW5wLT5zY3RwX2VwLmxvY2FsX2F1dGhfY2h1bmtzKTsKKwkJ
CQkJfQorCQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQl9CisJCWJyZWFrOwor
CX0KKwljYXNlIFNDVFBfUkVDT05GSUdfU1VQUE9SVEVEOgorCXsKKwkJc3RydWN0IHNjdHBfYXNz
b2NfdmFsdWUgKmF2OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0
IHNjdHBfYXNzb2NfdmFsdWUsIG9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2Is
IGF2LT5hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQllcnJv
ciA9IEVJTlZBTDsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlm
ICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAo
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUpICYmCisJCQkgICAgIChh
di0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSkgeworCQkJCVNDVFBfSU5QX1dMT0NL
KGlucCk7CisJCQkJaWYgKGF2LT5hc3NvY192YWx1ZSA9PSAwKSB7CisJCQkJCWlucC0+cmVjb25m
aWdfc3VwcG9ydGVkID0gMDsKKwkJCQl9IGVsc2UgeworCQkJCQlpbnAtPnJlY29uZmlnX3N1cHBv
cnRlZCA9IDE7CisJCQkJfQorCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCX0gZWxzZSB7
CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJfQorCQlicmVh
azsKKwl9CisJY2FzZSBTQ1RQX05SU0FDS19TVVBQT1JURUQ6CisJeworCQlzdHJ1Y3Qgc2N0cF9h
c3NvY192YWx1ZSAqYXY7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1
Y3Qgc2N0cF9hc3NvY192YWx1ZSwgb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3Rj
YiwgYXYtPmFzc29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVy
cm9yID0gRUlOVkFMOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJ
aWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAg
IChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJICAg
ICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkgJiYKKwkJCSAgICAg
KGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpKSB7CisJCQkJU0NUUF9JTlBfV0xP
Q0soaW5wKTsKKwkJCQlpZiAoYXYtPmFzc29jX3ZhbHVlID09IDApIHsKKwkJCQkJaW5wLT5ucnNh
Y2tfc3VwcG9ydGVkID0gMDsKKwkJCQl9IGVsc2UgeworCQkJCQlpbnAtPm5yc2Fja19zdXBwb3J0
ZWQgPSAxOworCQkJCX0KKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQl9IGVsc2Ugewor
CQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9V
U1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJYnJlYWs7
CisJfQorCWNhc2UgU0NUUF9QS1REUk9QX1NVUFBPUlRFRDoKKwl7CisJCXN0cnVjdCBzY3RwX2Fz
c29jX3ZhbHVlICphdjsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVj
dCBzY3RwX2Fzc29jX3ZhbHVlLCBvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNi
LCBhdi0+YXNzb2NfaWQpOworCisJCWlmIChzdGNiKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJy
b3IgPSBFSU5WQUw7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlp
ZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAg
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAg
KChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VRFBUWVBFKSAmJgorCQkJICAgICAo
YXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkpIHsKKwkJCQlTQ1RQX0lOUF9XTE9D
SyhpbnApOworCQkJCWlmIChhdi0+YXNzb2NfdmFsdWUgPT0gMCkgeworCQkJCQlpbnAtPnBrdGRy
b3Bfc3VwcG9ydGVkID0gMDsKKwkJCQl9IGVsc2UgeworCQkJCQlpbnAtPnBrdGRyb3Bfc3VwcG9y
dGVkID0gMTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQkJfSBlbHNlIHsK
KwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQl9CisJCWJyZWFr
OworCX0KKwljYXNlIFNDVFBfTUFYX0NXTkQ6CisJeworCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1
ZSAqYXY7CisJCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNU
KGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCBvcHRzaXplKTsKKwkJU0NUUF9G
SU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOworCisJCWlmIChzdGNiKSB7CisJCQlz
dGNiLT5hc29jLm1heF9jd25kID0gYXYtPmFzc29jX3ZhbHVlOworCQkJaWYgKHN0Y2ItPmFzb2Mu
bWF4X2N3bmQgPiAwKSB7CisJCQkJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMs
IHNjdHBfbmV4dCkgeworCQkJCQlpZiAoKG5ldC0+Y3duZCA+IHN0Y2ItPmFzb2MubWF4X2N3bmQp
ICYmCisJCQkJCSAgICAobmV0LT5jd25kID4gKG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVjdCBzY3Rw
aGRyKSkpKSB7CisJCQkJCQluZXQtPmN3bmQgPSBzdGNiLT5hc29jLm1heF9jd25kOworCQkJCQkJ
aWYgKG5ldC0+Y3duZCA8IChuZXQtPm10dSAtIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpKSB7CisJ
CQkJCQkJbmV0LT5jd25kID0gbmV0LT5tdHUgLSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpOworCQkJ
CQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9
IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBF
KSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09M
KSB8fAorCQkJICAgICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkg
JiYKKwkJCSAgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpKSB7CisJCQkJ
U0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJCQlpbnAtPm1heF9jd25kID0gYXYtPmFzc29jX3ZhbHVl
OworCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFM
KTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJfQorCQlicmVhazsKKwl9CisJZGVmYXVs
dDoKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSwgRU5PUFJPVE9PUFQpOworCQllcnJvciA9IEVOT1BST1RPT1BUOworCQlicmVhazsK
Kwl9IC8qIGVuZCBzd2l0Y2ggKG9wdCkgKi8KKwlyZXR1cm4gKGVycm9yKTsKK30KKworI2lmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCitpbnQKK3NjdHBfY3Rsb3V0cHV0KHN0cnVjdCBzb2NrZXQg
KnNvLCBzdHJ1Y3Qgc29ja29wdCAqc29wdCkKK3sKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQor
CXN0cnVjdCBlcG9jaF90cmFja2VyIGV0OworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisjZW5k
aWYKKwl2b2lkICpvcHR2YWwgPSBOVUxMOworCXZvaWQgKnA7CisJc2l6ZV90IG9wdHNpemUgPSAw
OworCWludCBlcnJvciA9IDA7CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCWlmICgoc29w
dC0+c29wdF9sZXZlbCA9PSBTT0xfU09DS0VUKSAmJgorCSAgICAoc29wdC0+c29wdF9uYW1lID09
IFNPX1NFVEZJQikpIHsKKwkJaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsK
KwkJaWYgKGlucCA9PSBOVUxMKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKHNvLT5zb19wY2Is
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PQlVGUyk7CisJCQlyZXR1cm4g
KEVJTlZBTCk7CisJCX0KKwkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJaW5wLT5maWJudW0gPSBz
by0+c29fZmlibnVtOworCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCXJldHVybiAoMCk7CisJ
fQorI2VuZGlmCisJaWYgKHNvcHQtPnNvcHRfbGV2ZWwgIT0gSVBQUk9UT19TQ1RQKSB7CisJCS8q
IHdyb25nIHByb3RvIGxldmVsLi4uIHNlbmQgYmFjayB1cCB0byBJUCAqLworI2lmZGVmIElORVQ2
CisJCWlmIChJTlBfQ0hFQ0tfU09DS0FGKHNvLCBBRl9JTkVUNikpCisJCQllcnJvciA9IGlwNl9j
dGxvdXRwdXQoc28sIHNvcHQpOworI2VuZGlmCQkJCS8qIElORVQ2ICovCisjaWYgZGVmaW5lZChJ
TkVUKSAmJiBkZWZpbmVkKElORVQ2KQorCQllbHNlCisjZW5kaWYKKyNpZmRlZiBJTkVUCisJCQll
cnJvciA9IGlwX2N0bG91dHB1dChzbywgc29wdCk7CisjZW5kaWYKKwkJcmV0dXJuIChlcnJvcik7
CisJfQorCW9wdHNpemUgPSBzb3B0LT5zb3B0X3ZhbHNpemU7CisJaWYgKG9wdHNpemUgPiBTQ1RQ
X1NPQ0tFVF9PUFRJT05fTElNSVQpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChzby0+c29fcGNi
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT0JVRlMpOworCQlyZXR1cm4g
KEVOT0JVRlMpOworCX0KKwlpZiAob3B0c2l6ZSkgeworCQlTQ1RQX01BTExPQyhvcHR2YWwsIHZv
aWQgKiwgb3B0c2l6ZSwgU0NUUF9NX1NPQ0tPUFQpOworCQlpZiAob3B0dmFsID09IE5VTEwpIHsK
KwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoc28tPnNvX3BjYiwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFTk9CVUZTKTsKKwkJCXJldHVybiAoRU5PQlVGUyk7CisJCX0KKwkJZXJy
b3IgPSBzb29wdGNvcHlpbihzb3B0LCBvcHR2YWwsIG9wdHNpemUsIG9wdHNpemUpOworCQlpZiAo
ZXJyb3IpIHsKKwkJCVNDVFBfRlJFRShvcHR2YWwsIFNDVFBfTV9TT0NLT1BUKTsKKwkJCWdvdG8g
b3V0OworCQl9CisJfQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX1dJTjMy
KQorCXAgPSAodm9pZCAqKXNvcHQtPnNvcHRfdGQ7CisjZWxzZQorCXAgPSAodm9pZCAqKXNvcHQt
PnNvcHRfcDsKKyNlbmRpZgorCWlmIChzb3B0LT5zb3B0X2RpciA9PSBTT1BUX1NFVCkgeworI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pCisJCU5FVF9FUE9DSF9FTlRFUihldCk7CisjZW5kaWYKKwkJ
ZXJyb3IgPSBzY3RwX3NldG9wdChzbywgc29wdC0+c29wdF9uYW1lLCBvcHR2YWwsIG9wdHNpemUs
IHApOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCU5FVF9FUE9DSF9FWElUKGV0KTsKKyNl
bmRpZgorCX0gZWxzZSBpZiAoc29wdC0+c29wdF9kaXIgPT0gU09QVF9HRVQpIHsKKwkJZXJyb3Ig
PSBzY3RwX2dldG9wdChzbywgc29wdC0+c29wdF9uYW1lLCBvcHR2YWwsICZvcHRzaXplLCBwKTsK
Kwl9IGVsc2UgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKHNvLT5zb19wY2IsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJZXJyb3IgPSBFSU5WQUw7CisJfQor
CWlmICgoZXJyb3IgPT0gMCkgJiYgKG9wdHZhbCAhPSBOVUxMKSkgeworCQllcnJvciA9IHNvb3B0
Y29weW91dChzb3B0LCBvcHR2YWwsIG9wdHNpemUpOworCQlTQ1RQX0ZSRUUob3B0dmFsLCBTQ1RQ
X01fU09DS09QVCk7CisJfSBlbHNlIGlmIChvcHR2YWwgIT0gTlVMTCkgeworCQlTQ1RQX0ZSRUUo
b3B0dmFsLCBTQ1RQX01fU09DS09QVCk7CisJfQorb3V0OgorCXJldHVybiAoZXJyb3IpOworfQor
I2VuZGlmCisKKyNpZmRlZiBJTkVUCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQoraW50Citz
Y3RwX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkcikKK3sK
Kwl2b2lkICpwID0gTlVMTDsKKyNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18pCitzdGF0aWMgaW50
CitzY3RwX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwg
c3RydWN0IHRocmVhZCAqcCkKK3sKKyNlbGlmIGRlZmluZWQoX19BUFBMRV9fKQorc3RhdGljIGlu
dAorc2N0cF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIs
IHN0cnVjdCBwcm9jICpwKQoreworI2VsaWYgZGVmaW5lZChfV0lOMzIpCitzdGF0aWMgaW50Citz
Y3RwX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgUEtU
SFJFQUQgcCkKK3sKKyNlbHNlCitzdGF0aWMgaW50CitzY3RwX2Nvbm5lY3Qoc3RydWN0IHNvY2tl
dCAqc28sIHN0cnVjdCBtYnVmICpuYW0sIHN0cnVjdCBwcm9jICpwKQoreworCXN0cnVjdCBzb2Nr
YWRkciAqYWRkciA9IG10b2QobmFtLCBzdHJ1Y3Qgc29ja2FkZHIgKik7CisKKyNlbmRpZgorI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJc3RydWN0
IGVwb2NoX3RyYWNrZXIgZXQ7CisjZW5kaWYKKyNpZmRlZiBTQ1RQX01WUkYKKwlpbnQgaSwgZm5k
ID0gMDsKKyNlbmRpZgorCWludCBlcnJvciA9IDA7CisJaW50IGNyZWF0ZV9sb2NrX29uID0gMDsK
Kwl1aW50MzJfdCB2cmZfaWQ7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKwlzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IgPSBOVUxMOworCisJaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNv
X3BjYjsKKwlpZiAoaW5wID09IE5VTEwpIHsKKwkJLyogSSBtYWRlIHRoZSBzYW1lIGFzIFRDUCBz
aW5jZSB3ZSBhcmUgbm90IHNldHVwPyAqLworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQlyZXR1cm4gKEVDT05O
UkVTRVQpOworCX0KKwlpZiAoYWRkciA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCXJldHVy
biBFSU5WQUw7CisJfQorCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCS8qIFRPRE8gX19V
c2Vyc3BhY2VfXyBmYWxscyBpbnRvIHRoaXMgY29kZSBmb3IgSVB2NiBzdHVmZiBhdCB0aGUgbW9t
ZW50Li4uICovCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fbGlu
dXhfXykgJiYgIWRlZmluZWQoX19FTVNDUklQVEVOX18pCisJc3dpdGNoIChhZGRyLT5zYV9mYW1p
bHkpIHsKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJeworI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCXN0cnVjdCBzb2NrYWRkcl9p
bjYgKnNpbjY7CisKKyNlbmRpZgorCQlpZiAoYWRkci0+c2FfbGVuICE9IHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW42KSkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCXJldHVybiAoRUlOVkFMKTsKKwkJ
fQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJ
CXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7CisJCWlmIChwICE9IE5VTEwgJiYg
KGVycm9yID0gcHJpc29uX3JlbW90ZV9pcDYocC0+dGRfdWNyZWQsICZzaW42LT5zaW42X2FkZHIp
KSAhPSAwKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7CisJCQlyZXR1cm4gKGVycm9yKTsKKwkJfQorI2VuZGlm
CisJCWJyZWFrOworCX0KKyNlbmRpZgorI2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisJewor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCXN0
cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfV0lOMzIpCisJ
CWlmIChhZGRyLT5zYV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIHsKKwkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVJTlZBTCk7CisJCQlyZXR1cm4gKEVJTlZBTCk7CisJCX0KKyNlbmRpZgorI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCXNpbiA9IChzdHJ1Y3Qg
c29ja2FkZHJfaW4gKilhZGRyOworCQlpZiAocCAhPSBOVUxMICYmIChlcnJvciA9IHByaXNvbl9y
ZW1vdGVfaXA0KHAtPnRkX3VjcmVkLCAmc2luLT5zaW5fYWRkcikpICE9IDApIHsKKwkJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVy
cm9yKTsKKwkJCXJldHVybiAoZXJyb3IpOworCQl9CisjZW5kaWYKKwkJYnJlYWs7CisJfQorI2Vu
ZGlmCisJZGVmYXVsdDoKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUFGTk9TVVBQT1JUKTsKKwkJcmV0dXJuIChFQUZOT1NVUFBP
UlQpOworCX0KKyNlbmRpZgorCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7CisJU0NUUF9BU09DX0NS
RUFURV9MT0NLKGlucCk7CisJY3JlYXRlX2xvY2tfb24gPSAxOworI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJTkVUX0VQT0NIX0VOVEVSKGV0KTsK
KyNlbmRpZgorCisJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRf
QUxMR09ORSkgfHwKKwkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tF
VF9HT05FKSkgeworCQkvKiBTaG91bGQgSSByZWFsbHkgdW5sb2NrID8gKi8KKwkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUZBVUxU
KTsKKwkJZXJyb3IgPSBFRkFVTFQ7CisJCWdvdG8gb3V0X25vdzsKKwl9CisjaWZkZWYgSU5FVDYK
KwlpZiAoKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgPT0gMCkg
JiYKKwkgICAgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikpIHsKKwkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsK
KwkJZXJyb3IgPSBFSU5WQUw7CisJCWdvdG8gb3V0X25vdzsKKwl9CisjZW5kaWYKKyNpZiBkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCisJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFH
U19CT1VORF9DT05OKSAmJgorCSAgICAoYWRkci0+c2FfZmFtaWx5ICE9IEFGX0NPTk4pKSB7CisJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIEVJTlZBTCk7CisJCWVycm9yID0gRUlOVkFMOworCQlnb3RvIG91dF9ub3c7CisJfQorI2Vu
ZGlmCisJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VTkJPVU5EKSA9PQor
CSAgICBTQ1RQX1BDQl9GTEFHU19VTkJPVU5EKSB7CisJCS8qIEJpbmQgYSBlcGhlbWVyYWwgcG9y
dCAqLworCQllcnJvciA9IHNjdHBfaW5wY2JfYmluZChzbywgTlVMTCwgTlVMTCwgcCk7CisJCWlm
IChlcnJvcikgeworCQkJZ290byBvdXRfbm93OworCQl9CisJfQorCS8qIE5vdyBkbyB3ZSBjb25u
ZWN0PyAqLworCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9P
TCkgJiYKKwkgICAgKHNjdHBfaXNfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19QT1JU
UkVVU0UpKSkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQllcnJvciA9IEVJTlZBTDsKKwkJZ290byBvdXRf
bm93OworCX0KKwlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUp
ICYmCisJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpKSB7
CisJCS8qIFdlIGFyZSBhbHJlYWR5IGNvbm5lY3RlZCBBTkQgdGhlIFRDUCBtb2RlbCAqLworCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFQUREUklOVVNFKTsKKwkJZXJyb3IgPSBFQUREUklOVVNFOworCQlnb3RvIG91dF9ub3c7CisJ
fQorCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpIHsKKwkJ
U0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJc3RjYiA9IExJU1RfRklSU1QoJmlucC0+c2N0cF9hc29j
X2xpc3QpOworCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJfSBlbHNlIHsKKwkJLyogV2UgaW5j
cmVtZW50IGhlcmUgc2luY2Ugc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigpIHdpbGwKKwkJ
ICogZG8gYSBkZWNyZW1lbnQgaWYgaXQgZmluZHMgdGhlIHN0Y2IgYXMgbG9uZyBhcyB0aGUgbG9j
a2VkCisJCSAqIHRjYiAobGFzdCBhcmd1bWVudCkgaXMgTk9UIGEgVENCLi4gYWthIE5VTEwuCisJ
CSAqLworCQlTQ1RQX0lOUF9JTkNSX1JFRihpbnApOworCQlzdGNiID0gc2N0cF9maW5kYXNzb2Np
YXRpb25fZXBfYWRkcigmaW5wLCBhZGRyLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJaWYgKHN0Y2Ig
PT0gTlVMTCkgeworCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJfSBlbHNlIHsKKwkJCVND
VFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfQorCX0KKwlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCS8q
IEFscmVhZHkgaGF2ZSBvciBhbSBicmluZyB1cCBhbiBhc3NvY2lhdGlvbiAqLworCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQUxS
RUFEWSk7CisJCWVycm9yID0gRUFMUkVBRFk7CisJCWdvdG8gb3V0X25vdzsKKwl9CisKKwl2cmZf
aWQgPSBpbnAtPmRlZl92cmZfaWQ7CisjaWZkZWYgU0NUUF9NVlJGCisJZm9yIChpID0gMDsgaSA8
IGlucC0+bnVtX3ZyZnM7IGkrKykgeworCQlpZiAodnJmX2lkID09IGlucC0+bV92cmZfaWRzW2ld
KSB7CisJCQlmbmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKCFmbmQpIHsKKwkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RUlOVkFMKTsKKwkJZXJyb3IgPSBFSU5WQUw7CisJCWdvdG8gb3V0X25vdzsKKwl9CisjZW5kaWYK
KwkvKiBXZSBhcmUgR09PRCB0byBnbyAqLworCXN0Y2IgPSBzY3RwX2Fsb2NfYXNzb2MoaW5wLCBh
ZGRyLCAmZXJyb3IsIDAsIHZyZl9pZCwKKwkgICAgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0
cF9lcC5wcmVfb3Blbl9zdHJlYW1fY291bnQsCisJICAgICAgICAgICAgICAgICAgICAgICBpbnAt
PnNjdHBfZXAucG9ydCwgcCwKKwkgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfSU5JVElBTEla
RV9BVVRIX1BBUkFNUyk7CisJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkvKiBHYWshIG5vIG1lbW9y
eSAqLworCQlnb3RvIG91dF9ub3c7CisJfQorCWlmIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgeworCQlzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdz
IHw9IFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRDsKKwkJLyogU2V0IHRoZSBjb25uZWN0ZWQgZmxh
ZyBzbyB3ZSBjYW4gcXVldWUgZGF0YSAqLworCQlzb2lzY29ubmVjdGluZyhzbyk7CisJfQorCVND
VFBfU0VUX1NUQVRFKHN0Y2IsIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpOworCSh2b2lkKVNDVFBf
R0VUVElNRV9USU1FVkFMKCZzdGNiLT5hc29jLnRpbWVfZW50ZXJlZCk7CisKKwlzY3RwX3NlbmRf
aW5pdGlhdGUoaW5wLCBzdGNiLCBTQ1RQX1NPX0xPQ0tFRCk7CisJU0NUUF9UQ0JfVU5MT0NLKHN0
Y2IpOworIG91dF9ub3c6CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKwlORVRfRVBPQ0hfRVhJVChldCk7CisjZW5kaWYKKwlpZiAoY3JlYXRlX2xv
Y2tfb24pIHsKKwkJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soaW5wKTsKKwl9CisJU0NUUF9JTlBf
REVDUl9SRUYoaW5wKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQoraW50CitzY3RwY29ubl9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNv
LCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCit7CisjaWZkZWYgU0NUUF9NVlJGCisJaW50IGksIGZu
ZCA9IDA7CisjZW5kaWYKKwl2b2lkICpwID0gTlVMTDsKKwlpbnQgZXJyb3IgPSAwOworCWludCBj
cmVhdGVfbG9ja19vbiA9IDA7CisJdWludDMyX3QgdnJmX2lkOworCXN0cnVjdCBzY3RwX2lucGNi
ICppbnA7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiID0gTlVMTDsKKworCWlucCA9IChzdHJ1Y3Qg
c2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7CisJaWYgKGlucCA9PSBOVUxMKSB7CisJCS8qIEkgbWFk
ZSB0aGUgc2FtZSBhcyBUQ1Agc2luY2Ugd2UgYXJlIG5vdCBzZXR1cD8gKi8KKwkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFM
KTsKKwkJcmV0dXJuIChFQ09OTlJFU0VUKTsKKwl9CisJaWYgKGFkZHIgPT0gTlVMTCkgeworCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFSU5WQUwpOworCQlyZXR1cm4gRUlOVkFMOworCX0KKwlzd2l0Y2ggKGFkZHItPnNhX2ZhbWls
eSkgeworI2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJ
aWYgKGFkZHItPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgeworCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RUlOVkFMKTsKKwkJCXJldHVybiAoRUlOVkFMKTsKKwkJfQorI2VuZGlmCisJCWJyZWFrOworI2Vu
ZGlmCisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorI2lmZGVmIEhBVkVfU0FfTEVOCisJ
CWlmIChhZGRyLT5zYV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7CisJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFSU5WQUwpOworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisjZW5kaWYKKwkJYnJlYWs7Cisj
ZW5kaWYKKwljYXNlIEFGX0NPTk46CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJaWYgKGFkZHItPnNh
X2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKSB7CisJCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwor
CQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisjZW5kaWYKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJF
USwgRUFGTk9TVVBQT1JUKTsKKwkJcmV0dXJuIChFQUZOT1NVUFBPUlQpOworCX0KKwlTQ1RQX0lO
UF9JTkNSX1JFRihpbnApOworCVNDVFBfQVNPQ19DUkVBVEVfTE9DSyhpbnApOworCWNyZWF0ZV9s
b2NrX29uID0gMTsKKworCisJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19T
T0NLRVRfQUxMR09ORSkgfHwKKwkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X1NPQ0tFVF9HT05FKSkgeworCQkvKiBTaG91bGQgSSByZWFsbHkgdW5sb2NrID8gKi8KKwkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RUZBVUxUKTsKKwkgICAgICAgIGVycm9yID0gRUZBVUxUOworCQlnb3RvIG91dF9ub3c7CisJfQor
I2lmZGVmIElORVQ2CisJaWYgKCgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9V
TkRfVjYpID09IDApICYmCisJICAgIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpKSB7CisJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIEVJTlZBTCk7CisJCWVycm9yID0gRUlOVkFMOworCQlnb3RvIG91dF9ub3c7CisJfQorI2Vu
ZGlmCisJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VTkJPVU5EKSA9PSBT
Q1RQX1BDQl9GTEFHU19VTkJPVU5EKSB7CisJCS8qIEJpbmQgYSBlcGhlbWVyYWwgcG9ydCAqLwor
CQllcnJvciA9IHNjdHBfaW5wY2JfYmluZChzbywgTlVMTCwgTlVMTCwgcCk7CisJCWlmIChlcnJv
cikgeworCQkJZ290byBvdXRfbm93OworCQl9CisJfQorCS8qIE5vdyBkbyB3ZSBjb25uZWN0PyAq
LworCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgJiYK
KwkgICAgKHNjdHBfaXNfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19QT1JUUkVVU0Up
KSkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfVVNSUkVRLCBFSU5WQUwpOworCQllcnJvciA9IEVJTlZBTDsKKwkJZ290byBvdXRfbm93Owor
CX0KKwlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpICYmCisJ
ICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpKSB7CisJCS8q
IFdlIGFyZSBhbHJlYWR5IGNvbm5lY3RlZCBBTkQgdGhlIFRDUCBtb2RlbCAqLworCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQURE
UklOVVNFKTsKKwkJZXJyb3IgPSBFQUREUklOVVNFOworCQlnb3RvIG91dF9ub3c7CisJfQorCWlm
IChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpIHsKKwkJU0NUUF9J
TlBfUkxPQ0soaW5wKTsKKwkJc3RjYiA9IExJU1RfRklSU1QoJmlucC0+c2N0cF9hc29jX2xpc3Qp
OworCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJfSBlbHNlIHsKKwkJLyogV2UgaW5jcmVtZW50
IGhlcmUgc2luY2Ugc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigpIHdpbGwKKwkJICogZG8g
YSBkZWNyZW1lbnQgaWYgaXQgZmluZHMgdGhlIHN0Y2IgYXMgbG9uZyBhcyB0aGUgbG9ja2VkCisJ
CSAqIHRjYiAobGFzdCBhcmd1bWVudCkgaXMgTk9UIGEgVENCLi4gYWthIE5VTEwuCisJCSAqLwor
CQlTQ1RQX0lOUF9JTkNSX1JFRihpbnApOworCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25f
ZXBfYWRkcigmaW5wLCBhZGRyLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJaWYgKHN0Y2IgPT0gTlVM
TCkgeworCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJfSBlbHNlIHsKKwkJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKKwkJfQorCX0KKwlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCS8qIEFscmVh
ZHkgaGF2ZSBvciBhbSBicmluZyB1cCBhbiBhc3NvY2lhdGlvbiAqLworCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQUxSRUFEWSk7
CisJCWVycm9yID0gRUFMUkVBRFk7CisJCWdvdG8gb3V0X25vdzsKKwl9CisKKwl2cmZfaWQgPSBp
bnAtPmRlZl92cmZfaWQ7CisjaWZkZWYgU0NUUF9NVlJGCisJZm9yIChpID0gMDsgaSA8IGlucC0+
bnVtX3ZyZnM7IGkrKykgeworCQlpZiAodnJmX2lkID09IGlucC0+bV92cmZfaWRzW2ldKSB7CisJ
CQlmbmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKCFmbmQpIHsKKwkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFM
KTsKKwkJZXJyb3IgPSBFSU5WQUw7CisJCWdvdG8gb3V0X25vdzsKKwl9CisjZW5kaWYKKwkvKiBX
ZSBhcmUgR09PRCB0byBnbyAqLworCXN0Y2IgPSBzY3RwX2Fsb2NfYXNzb2MoaW5wLCBhZGRyLCAm
ZXJyb3IsIDAsIHZyZl9pZCwKKwkgICAgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0cF9lcC5w
cmVfb3Blbl9zdHJlYW1fY291bnQsCisJICAgICAgICAgICAgICAgICAgICAgICBpbnAtPnNjdHBf
ZXAucG9ydCwgcCwKKwkgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfSU5JVElBTElaRV9BVVRI
X1BBUkFNUyk7CisJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkvKiBHYWshIG5vIG1lbW9yeSAqLwor
CQlnb3RvIG91dF9ub3c7CisJfQorCWlmIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfVENQVFlQRSkgeworCQlzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzIHw9IFND
VFBfUENCX0ZMQUdTX0NPTk5FQ1RFRDsKKwkJLyogU2V0IHRoZSBjb25uZWN0ZWQgZmxhZyBzbyB3
ZSBjYW4gcXVldWUgZGF0YSAqLworCQlzb2lzY29ubmVjdGluZyhzbyk7CisJfQorCVNDVFBfU0VU
X1NUQVRFKHN0Y2IsIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpOworCSh2b2lkKVNDVFBfR0VUVElN
RV9USU1FVkFMKCZzdGNiLT5hc29jLnRpbWVfZW50ZXJlZCk7CisKKwlzY3RwX3NlbmRfaW5pdGlh
dGUoaW5wLCBzdGNiLCBTQ1RQX1NPX0xPQ0tFRCk7CisJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwor
IG91dF9ub3c6CisJaWYgKGNyZWF0ZV9sb2NrX29uKSB7CisJCVNDVFBfQVNPQ19DUkVBVEVfVU5M
T0NLKGlucCk7CisJfQorCisJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwlyZXR1cm4gKGVycm9y
KTsKK30KKyNlbmRpZgoraW50CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorc2N0cF9saXN0
ZW4oc3RydWN0IHNvY2tldCAqc28sIGludCBiYWNrbG9nLCBzdHJ1Y3QgcHJvYyAqcCkKKyNlbGlm
IGRlZmluZWQoX19GcmVlQlNEX18pCitzY3RwX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzbywgaW50
IGJhY2tsb2csIHN0cnVjdCB0aHJlYWQgKnApCisjZWxpZiBkZWZpbmVkKF9XSU4zMikKK3NjdHBf
bGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgYmFja2xvZywgUEtUSFJFQUQgcCkKKyNlbHNl
CitzY3RwX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHByb2MgKnApCisjZW5kaWYK
K3sKKwkvKgorCSAqIE5vdGUgdGhpcyBtb2R1bGUgZGVwZW5kcyBvbiB0aGUgcHJvdG9jb2wgcHJv
Y2Vzc2luZyBiZWluZyBjYWxsZWQKKwkgKiBBRlRFUiBhbnkgc29ja2V0IGxldmVsIGZsYWdzIGFu
ZCBiYWNrbG9nIGFyZSBhcHBsaWVkIHRvIHRoZQorCSAqIHNvY2tldC4gVGhlIHRyYWRpdGlvbmFs
IHdheSB0aGF0IHRoZSBzb2NrZXQgZmxhZ3MgYXJlIGFwcGxpZWQgaXMKKwkgKiBBRlRFUiBwcm90
b2NvbCBwcm9jZXNzaW5nLiBXZSBoYXZlIG1hZGUgYSBjaGFuZ2UgdG8gdGhlCisJICogc3lzL2tl
cm4vdWlwY19zb2NrZXQuYyBtb2R1bGUgdG8gcmV2ZXJzZSB0aGlzIGJ1dCB0aGlzIE1VU1QgYmUg
aW4KKwkgKiBwbGFjZSBpZiB0aGUgc29ja2V0IEFQSSBmb3IgU0NUUCBpcyB0byB3b3JrIHByb3Bl
cmx5LgorCSAqLworCisJaW50IGVycm9yID0gMDsKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwor
CisJaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKKwlpZiAoaW5wID09IE5V
TEwpIHsKKwkJLyogSSBtYWRlIHRoZSBzYW1lIGFzIFRDUCBzaW5jZSB3ZSBhcmUgbm90IHNldHVw
PyAqLworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfVVNSUkVRLCBFSU5WQUwpOworCQlyZXR1cm4gKEVDT05OUkVTRVQpOworCX0KKwlpZiAoc2N0
cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUE9SVFJFVVNFKSkgeworCQkvKiBT
ZWUgaWYgd2UgaGF2ZSBhIGxpc3RlbmVyICovCisJCXN0cnVjdCBzY3RwX2lucGNiICp0aW5wOwor
CQl1bmlvbiBzY3RwX3NvY2tzdG9yZSBzdG9yZTsKKworCQlpZiAoKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSA9PSAwKSB7CisJCQkvKiBub3QgYm91bmQgYWxsICov
CisJCQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7CisKKwkJCUxJU1RfRk9SRUFDSChsYWRkciwg
JmlucC0+c2N0cF9hZGRyX2xpc3QsIHNjdHBfbnh0X2FkZHIpIHsKKwkJCQltZW1jcHkoJnN0b3Jl
LCAmbGFkZHItPmlmYS0+YWRkcmVzcywgc2l6ZW9mKHN0b3JlKSk7CisJCQkJc3dpdGNoIChzdG9y
ZS5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQkJY2FzZSBBRl9JTkVUOgorCQkJCQlz
dG9yZS5zaW4uc2luX3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7CisJCQkJCWJyZWFrOworI2VuZGlm
CisjaWZkZWYgSU5FVDYKKwkJCQljYXNlIEFGX0lORVQ2OgorCQkJCQlzdG9yZS5zaW42LnNpbjZf
cG9ydCA9IGlucC0+c2N0cF9scG9ydDsKKwkJCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCisJCQkJY2FzZSBBRl9DT05OOgorCQkJCQlzdG9yZS5zY29ubi5zY29u
bl9wb3J0ID0gaW5wLT5zY3RwX2xwb3J0OworCQkJCQlicmVhazsKKyNlbmRpZgorCQkJCWRlZmF1
bHQ6CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQl0aW5wID0gc2N0cF9wY2JfZmluZGVwKCZzdG9y
ZS5zYSwgMCwgMCwgaW5wLT5kZWZfdnJmX2lkKTsKKwkJCQlpZiAodGlucCAmJiAodGlucCAhPSBp
bnApICYmCisJCQkJICAgICgodGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tF
VF9BTExHT05FKSA9PSAwKSAmJgorCQkJCSAgICAoKHRpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19TT0NLRVRfR09ORSkgPT0gMCkgJiYKKwkJCQkgICAgKFNDVFBfSVNfTElTVEVOSU5H
KHRpbnApKSkgeworCQkJCQkvKiB3ZSBoYXZlIGEgbGlzdGVuZXIgYWxyZWFkeSBhbmQgaXRzIG5v
dCB0aGlzIGlucC4gKi8KKwkJCQkJU0NUUF9JTlBfREVDUl9SRUYodGlucCk7CisJCQkJCXJldHVy
biAoRUFERFJJTlVTRSk7CisJCQkJfSBlbHNlIGlmICh0aW5wKSB7CisJCQkJCVNDVFBfSU5QX0RF
Q1JfUkVGKHRpbnApOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIFNldHVwIGEgbG9j
YWwgYWRkciBib3VuZCBhbGwgKi8KKwkJCW1lbXNldCgmc3RvcmUsIDAsIHNpemVvZihzdG9yZSkp
OworI2lmZGVmIElORVQ2CisJCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
Qk9VTkRfVjYpIHsKKwkJCQlzdG9yZS5zYS5zYV9mYW1pbHkgPSBBRl9JTkVUNjsKKyNpZmRlZiBI
QVZFX1NBX0xFTgorCQkJCXN0b3JlLnNhLnNhX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW42KTsKKyNlbmRpZgorCQkJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX0NPTk4pIHsKKwkJ
CQlzdG9yZS5zYS5zYV9mYW1pbHkgPSBBRl9DT05OOworI2lmZGVmIEhBVkVfU0FfTEVOCisJCQkJ
c3RvcmUuc2Euc2FfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKyNlbmRpZgor
CQkJfQorI2VuZGlmCisjaWZkZWYgSU5FVAorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJ
CWlmICgoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSA9PSAwKSAm
JgorCQkJICAgICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfQ09OTikg
PT0gMCkpIHsKKyNlbHNlCisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0JPVU5EX1Y2KSA9PSAwKSB7CisjZW5kaWYKKwkJCQlzdG9yZS5zYS5zYV9mYW1pbHkgPSBBRl9J
TkVUOworI2lmZGVmIEhBVkVfU0FfTEVOCisJCQkJc3RvcmUuc2Euc2FfbGVuID0gc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwkJCX0KKyNlbmRpZgorCQkJc3dpdGNoIChzdG9y
ZS5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQljYXNlIEFGX0lORVQ6CisJCQkJc3Rv
cmUuc2luLnNpbl9wb3J0ID0gaW5wLT5zY3RwX2xwb3J0OworCQkJCWJyZWFrOworI2VuZGlmCisj
aWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6CisJCQkJc3RvcmUuc2luNi5zaW42X3BvcnQg
PSBpbnAtPnNjdHBfbHBvcnQ7CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisJCQljYXNlIEFGX0NPTk46CisJCQkJc3RvcmUuc2Nvbm4uc2Nvbm5fcG9ydCA9
IGlucC0+c2N0cF9scG9ydDsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQli
cmVhazsKKwkJCX0KKwkJCXRpbnAgPSBzY3RwX3BjYl9maW5kZXAoJnN0b3JlLnNhLCAwLCAwLCBp
bnAtPmRlZl92cmZfaWQpOworCQkJaWYgKHRpbnAgJiYgKHRpbnAgIT0gaW5wKSAmJgorCQkJICAg
ICgodGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSA9PSAw
KSAmJgorCQkJICAgICgodGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9H
T05FKSA9PSAwKSAmJgorCQkJICAgIChTQ1RQX0lTX0xJU1RFTklORyh0aW5wKSkpIHsKKwkJCQkv
KiB3ZSBoYXZlIGEgbGlzdGVuZXIgYWxyZWFkeSBhbmQgaXRzIG5vdCB0aGlzIGlucC4gKi8KKwkJ
CQlTQ1RQX0lOUF9ERUNSX1JFRih0aW5wKTsKKwkJCQlyZXR1cm4gKEVBRERSSU5VU0UpOworCQkJ
fSBlbHNlIGlmICh0aW5wKSB7CisJCQkJU0NUUF9JTlBfREVDUl9SRUYodGlucCk7CisJCQl9CisJ
CX0KKwl9CisJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKyNpZmRlZiBTQ1RQX0xPQ0tfTE9HR0lORwor
CWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0xPQ0tfTE9H
R0lOR19FTkFCTEUpIHsKKwkJc2N0cF9sb2dfbG9jayhpbnAsIChzdHJ1Y3Qgc2N0cF90Y2IgKilO
VUxMLCBTQ1RQX0xPR19MT0NLX1NPQ0spOworCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlTT0NLX0xPQ0soc28pOworCWVycm9y
ID0gc29saXN0ZW5fcHJvdG9fY2hlY2soc28pOworCVNPQ0tfVU5MT0NLKHNvKTsKKwlpZiAoZXJy
b3IpIHsKKwkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQlyZXR1cm4gKGVycm9yKTsKKwl9Cisj
ZW5kaWYKKwlpZiAoKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1BPUlRS
RVVTRSkpICYmCisJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQ
T09MKSkgeworCQkvKiBUaGUgdW5sdWNreSBjYXNlCisJCSAqIC0gV2UgYXJlIGluIHRoZSB0Y3Ag
cG9vbCB3aXRoIHRoaXMgZ3V5LgorCQkgKiAtIFNvbWVvbmUgZWxzZSBpcyBpbiB0aGUgbWFpbiBp
bnAgc2xvdC4KKwkJICogLSBXZSBtdXN0IG1vdmUgdGhpcyBndXkgKHRoZSBsaXN0ZW5lcikgdG8g
dGhlIG1haW4gc2xvdAorCQkgKiAtIFdlIG11c3QgdGhlbiBtb3ZlIHRoZSBndXkgdGhhdCB3YXMg
bGlzdGVuZXIgdG8gdGhlIFRDUCBQb29sLgorCQkgKi8KKwkJaWYgKHNjdHBfc3dhcF9pbnBjYl9m
b3JfbGlzdGVuKGlucCkpIHsKKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCVNDVFBfTFRS
QUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVBRERS
SU5VU0UpOworCQkJcmV0dXJuIChFQUREUklOVVNFKTsKKwkJfQorCX0KKworCWlmICgoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgJiYKKwkgICAgKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCkpIHsKKwkJLyogV2UgYXJlIGFscmVhZHkg
Y29ubmVjdGVkIEFORCB0aGUgVENQIG1vZGVsICovCisJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsK
KwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VT
UlJFUSwgRUFERFJJTlVTRSk7CisJCXJldHVybiAoRUFERFJJTlVTRSk7CisJfQorCVNDVFBfSU5Q
X1JVTkxPQ0soaW5wKTsKKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVU5C
T1VORCkgeworCQkvKiBXZSBtdXN0IGRvIGEgYmluZC4gKi8KKwkJaWYgKChlcnJvciA9IHNjdHBf
aW5wY2JfYmluZChzbywgTlVMTCwgTlVMTCwgcCkpKSB7CisJCQkvKiBiaW5kIGVycm9yLCBwcm9i
YWJseSBwZXJtICovCisJCQlyZXR1cm4gKGVycm9yKTsKKwkJfQorCX0KKwlTQ1RQX0lOUF9XTE9D
SyhpbnApOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VRFBUWVBFKSA9PSAw
KSB7CisJCVNPQ0tfTE9DSyhzbyk7CisJCXNvbGlzdGVuX3Byb3RvKHNvLCBiYWNrbG9nKTsKKwkJ
U09DS19VTkxPQ0soc28pOworCX0KKyNlbGlmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisJU09DS19MT0NLKHNvKTsKKwlzb2xpc3Rlbl9wcm90byhzbywgYmFja2xv
Zyk7CisjZW5kaWYKKyNpZiAhKGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNl
cnNwYWNlX18pKQorCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VRFBUWVBF
KSB7CisJCS8qIHJlbW92ZSB0aGUgQUNDRVBUQ09OTiBmbGFnIGZvciBvbmUtdG8tbWFueSBzb2Nr
ZXRzICovCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlzby0+c29fb3B0aW9ucyAmPSB+
U0NUUF9TT19BQ0NFUFRDT05OOworI2Vsc2UKKwkJc28tPnNvX29wdGlvbnMgJj0gflNPX0FDQ0VQ
VENPTk47CisjZW5kaWYKKwl9CisJU09DS19VTkxPQ0soc28pOworI2VuZGlmCisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwlpZiAoYmFja2xvZyA+IDApIHsKKwkJaW5wLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZM
QUdTX0FDQ0VQVElORzsKKwl9IGVsc2UgeworCQlpbnAtPnNjdHBfZmxhZ3MgJj0gflNDVFBfUENC
X0ZMQUdTX0FDQ0VQVElORzsKKwl9CisjZWxzZQorCWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BD
Ql9GTEFHU19BQ0NFUFRJTkc7CisjZW5kaWYKKwlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJcmV0
dXJuIChlcnJvcik7Cit9CisKK3N0YXRpYyBpbnQgc2N0cF9kZWZlcmVkX3dha2V1cF9jbnQgPSAw
OworCitpbnQKK3NjdHBfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIg
KiphZGRyKQoreworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAq
aW5wOworCXVuaW9uIHNjdHBfc29ja3N0b3JlIHN0b3JlOworI2lmZGVmIElORVQ2CisjaWYgZGVm
aW5lZChTQ1RQX0tBTUUpICYmIGRlZmluZWQoU0NUUF9FTUJFRERFRF9WNl9TQ09QRSkKKwlpbnQg
ZXJyb3I7CisjZW5kaWYKKyNlbmRpZgorCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5z
b19wY2I7CisKKwlpZiAoaW5wID09IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJcmV0dXJuIChF
Q09OTlJFU0VUKTsKKwl9CisJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwlpZiAoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkgeworCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7
CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9V
U1JSRVEsIEVPUE5PVFNVUFApOworCQlyZXR1cm4gKEVPUE5PVFNVUFApOworCX0KKwlpZiAoc28t
PnNvX3N0YXRlICYgU1NfSVNESVNDT05ORUNURUQpIHsKKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnAp
OworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFQ09OTkFCT1JURUQpOworCQlyZXR1cm4gKEVDT05OQUJPUlRFRCk7CisJfQorCXN0
Y2IgPSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNvY19saXN0KTsKKwlpZiAoc3RjYiA9PSBOVUxM
KSB7CisJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJcmV0dXJuIChF
Q09OTlJFU0VUKTsKKwl9CisJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwlzdG9yZSA9IHN0Y2ItPmFz
b2MucHJpbWFyeV9kZXN0aW5hdGlvbi0+cm8uX2xfYWRkcjsKKwlTQ1RQX0NMRUFSX1NVQlNUQVRF
KHN0Y2IsIFNDVFBfU1RBVEVfSU5fQUNDRVBUX1FVRVVFKTsKKwkvKiBXYWtlIGFueSBkZWxheWVk
IHNsZWVwIGFjdGlvbiAqLworCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19E
T05UX1dBS0UpIHsKKwkJaW5wLT5zY3RwX2ZsYWdzICY9IH5TQ1RQX1BDQl9GTEFHU19ET05UX1dB
S0U7CisJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19XQUtFT1VUUFVUKSB7
CisJCQlpbnAtPnNjdHBfZmxhZ3MgJj0gflNDVFBfUENCX0ZMQUdTX1dBS0VPVVRQVVQ7CisJCQlT
T0NLQlVGX0xPQ0soJmlucC0+c2N0cF9zb2NrZXQtPnNvX3NuZCk7CisJCQlpZiAoc293cml0ZWFi
bGUoaW5wLT5zY3RwX3NvY2tldCkpIHsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJ
LypfX1VzZXJzcGFjZV9fIGNhbGxpbmcgc293d2FrdXBfbG9ja2VkIGJlY2F1c2Ugb2YgU09DS0JV
Rl9MT0NLIGFib3ZlLiAqLworI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVm
aW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQlzb3d3YWtldXBfbG9j
a2VkKGlucC0+c2N0cF9zb2NrZXQpOworI2Vsc2UKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwkJ
CQkvKiBzb2NrZXQgaXMgbG9ja2VkICovCisjZW5kaWYKKwkJCQlzb3d3YWtldXAoaW5wLT5zY3Rw
X3NvY2tldCk7CisjZW5kaWYKKwkJCX0gZWxzZSB7CisJCQkJU09DS0JVRl9VTkxPQ0soJmlucC0+
c2N0cF9zb2NrZXQtPnNvX3NuZCk7CisJCQl9CisJCX0KKwkJaWYgKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1dBS0VJTlBVVCkgeworCQkJaW5wLT5zY3RwX2ZsYWdzICY9IH5TQ1RQ
X1BDQl9GTEFHU19XQUtFSU5QVVQ7CisJCQlTT0NLQlVGX0xPQ0soJmlucC0+c2N0cF9zb2NrZXQt
PnNvX3Jjdik7CisJCQlpZiAoc29yZWFkYWJsZShpbnAtPnNjdHBfc29ja2V0KSkgeworCQkJCXNj
dHBfZGVmZXJlZF93YWtldXBfY250Kys7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJ
CS8qX19Vc2Vyc3BhY2VfXyBjYWxsaW5nIHNvcndha3VwX2xvY2tlZCBiZWNhdXNlIG9mIFNPQ0tC
VUZfTE9DSyBhYm92ZSAqLworI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVm
aW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQlzb3J3YWtldXBfbG9j
a2VkKGlucC0+c2N0cF9zb2NrZXQpOworI2Vsc2UKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwkJ
CQkvKiBzb2NrZXQgaXMgbG9ja2VkICovCisjZW5kaWYKKwkJCQlzb3J3YWtldXAoaW5wLT5zY3Rw
X3NvY2tldCk7CisjZW5kaWYKKwkJCX0gZWxzZSB7CisJCQkJU09DS0JVRl9VTkxPQ0soJmlucC0+
c2N0cF9zb2NrZXQtPnNvX3Jjdik7CisJCQl9CisJCX0KKwl9CisJU0NUUF9JTlBfV1VOTE9DSyhp
bnApOworCWlmIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVF
RCkgeworCQlzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAorCQkg
ICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfVVNSUkVRICsgU0NUUF9MT0NfMTkpOworCX0g
ZWxzZSB7CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwl9CisJc3dpdGNoIChzdG9yZS5zYS5z
YV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJY2FzZSBBRl9JTkVUOgorCXsKKwkJc3RydWN0IHNv
Y2thZGRyX2luICpzaW47CisKKwkJU0NUUF9NQUxMT0NfU09OQU1FKHNpbiwgc3RydWN0IHNvY2th
ZGRyX2luICosIHNpemVvZiAqc2luKTsKKwkJaWYgKHNpbiA9PSBOVUxMKQorCQkJcmV0dXJuIChF
Tk9NRU0pOworCQlzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xF
TgorCQlzaW4tPnNpbl9sZW4gPSBzaXplb2YoKnNpbik7CisjZW5kaWYKKwkJc2luLT5zaW5fcG9y
dCA9IHN0b3JlLnNpbi5zaW5fcG9ydDsKKwkJc2luLT5zaW5fYWRkciA9IHN0b3JlLnNpbi5zaW5f
YWRkcjsKKwkJKmFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopc2luOworCQlicmVhazsKKwl9Cisj
ZW5kaWYKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJeworCQlzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICpzaW42OworCisJCVNDVFBfTUFMTE9DX1NPTkFNRShzaW42LCBzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICosIHNpemVvZiAqc2luNik7CisJCWlmIChzaW42ID09IE5VTEwpCisJCQlyZXR1cm4g
KEVOT01FTSk7CisJCXNpbjYtPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisjaWZkZWYgSEFWRV9T
SU42X0xFTgorCQlzaW42LT5zaW42X2xlbiA9IHNpemVvZigqc2luNik7CisjZW5kaWYKKwkJc2lu
Ni0+c2luNl9wb3J0ID0gc3RvcmUuc2luNi5zaW42X3BvcnQ7CisJCXNpbjYtPnNpbjZfYWRkciA9
IHN0b3JlLnNpbjYuc2luNl9hZGRyOworI2lmIGRlZmluZWQoU0NUUF9FTUJFRERFRF9WNl9TQ09Q
RSkKKyNpZmRlZiBTQ1RQX0tBTUUKKwkJaWYgKChlcnJvciA9IHNhNl9yZWNvdmVyc2NvcGUoc2lu
NikpICE9IDApIHsKKwkJCVNDVFBfRlJFRV9TT05BTUUoc2luNik7CisJCQlyZXR1cm4gKGVycm9y
KTsKKwkJfQorI2Vsc2UKKwkJaWYgKElONl9JU19TQ09QRV9MSU5LTE9DQUwoJnNpbjYtPnNpbjZf
YWRkcikpCisJCQkvKgorCQkJICogc2luNi0+c2luNl9zY29wZV9pZCA9CisJCQkgKiBudG9ocyhz
aW42LT5zaW42X2FkZHIuczZfYWRkcjE2WzFdKTsKKwkJCSAqLworCQkJaW42X3JlY292ZXJzY29w
ZShzaW42LCAmc2luNi0+c2luNl9hZGRyLCBOVUxMKTsJLyogc2tpcCBpZnAgY2hlY2sgKi8KKwkJ
ZWxzZQorCQkJc2luNi0+c2luNl9zY29wZV9pZCA9IDA7CS8qIFhYWCAqLworI2VuZGlmIC8qIFND
VFBfS0FNRSAqLworI2VuZGlmIC8qIFNDVFBfRU1CRURERURfVjZfU0NPUEUgKi8KKwkJKmFkZHIg
PSAoc3RydWN0IHNvY2thZGRyICopc2luNjsKKwkJYnJlYWs7CisJfQorI2VuZGlmCisjaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorCWNhc2UgQUZfQ09OTjoKKwl7CisJCXN0cnVjdCBzb2NrYWRk
cl9jb25uICpzY29ubjsKKworCQlTQ1RQX01BTExPQ19TT05BTUUoc2Nvbm4sIHN0cnVjdCBzb2Nr
YWRkcl9jb25uICosIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCQlpZiAoc2Nvbm4g
PT0gTlVMTCkgeworCQkJcmV0dXJuIChFTk9NRU0pOworCQl9CisJCXNjb25uLT5zY29ubl9mYW1p
bHkgPSBBRl9DT05OOworI2lmZGVmIEhBVkVfU0NPTk5fTEVOCisJCXNjb25uLT5zY29ubl9sZW4g
PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOworI2VuZGlmCisJCXNjb25uLT5zY29ubl9w
b3J0ID0gc3RvcmUuc2Nvbm4uc2Nvbm5fcG9ydDsKKwkJc2Nvbm4tPnNjb25uX2FkZHIgPSBzdG9y
ZS5zY29ubi5zY29ubl9hZGRyOworCQkqYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKilzY29ubjsK
KwkJYnJlYWs7CisJfQorI2VuZGlmCisJZGVmYXVsdDoKKwkJLyogVFNOSCAqLworCQlicmVhazsK
Kwl9CisJcmV0dXJuICgwKTsKK30KKworI2lmZGVmIElORVQKK2ludAorI2lmICFkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCitzY3RwX2luZ2V0YWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNv
Y2thZGRyICoqYWRkcikKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKyNlbHNlCitzY3Rw
X2luZ2V0YWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm5hbSkKK3sKKwlzdHJ1
Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IG10b2QobmFtLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKik7Cisj
ZW5kaWYKKwl1aW50MzJfdCB2cmZfaWQ7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKwlzdHJ1
Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhOworCisJLyoKKwkgKiBEbyB0aGUgbWFsbG9jIGZpcnN0IGlu
IGNhc2UgaXQgYmxvY2tzLgorCSAqLworI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJU0NU
UF9NQUxMT0NfU09OQU1FKHNpbiwgc3RydWN0IHNvY2thZGRyX2luICosIHNpemVvZiAqc2luKTsK
KwlpZiAoc2luID09IE5VTEwpCisJCXJldHVybiAoRU5PTUVNKTsKKyNlbHNlCisJU0NUUF9CVUZf
TEVOKG5hbSkgPSBzaXplb2YoKnNpbik7CisJbWVtc2V0KHNpbiwgMCwgc2l6ZW9mKCpzaW4pKTsK
KyNlbmRpZgorCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVO
CisJc2luLT5zaW5fbGVuID0gc2l6ZW9mKCpzaW4pOworI2VuZGlmCisJaW5wID0gKHN0cnVjdCBz
Y3RwX2lucGNiICopc28tPnNvX3BjYjsKKwlpZiAoIWlucCkgeworI2lmICFkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisJCVNDVFBfRlJFRV9TT05BTUUoc2luKTsKKyNlbmRpZgorCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwp
OworCQlyZXR1cm4gKEVDT05OUkVTRVQpOworCX0KKwlTQ1RQX0lOUF9STE9DSyhpbnApOworCXNp
bi0+c2luX3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7CisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX0JPVU5EQUxMKSB7CisJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19DT05ORUNURUQpIHsKKwkJCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKKwkJCXN0cnVj
dCBzb2NrYWRkcl9pbiAqc2luX2E7CisJCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJCQlpbnQg
Zm5kOworCisJCQlzdGNiID0gTElTVF9GSVJTVCgmaW5wLT5zY3RwX2Fzb2NfbGlzdCk7CisJCQlp
ZiAoc3RjYiA9PSBOVUxMKSB7CisJCQkJZ290byBub3RDb25uOworCQkJfQorCQkJZm5kID0gMDsK
KwkJCXNpbl9hID0gTlVMTDsKKwkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQlUQUlMUV9GT1JF
QUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQkJc2luX2EgPSAoc3Ry
dWN0IHNvY2thZGRyX2luICopJm5ldC0+cm8uX2xfYWRkcjsKKwkJCQlpZiAoc2luX2EgPT0gTlVM
TCkKKwkJCQkJLyogdGhpcyB3aWxsIG1ha2UgY292ZXJpdHkgaGFwcHkgKi8KKwkJCQkJY29udGlu
dWU7CisKKwkJCQlpZiAoc2luX2EtPnNpbl9mYW1pbHkgPT0gQUZfSU5FVCkgeworCQkJCQlmbmQg
PSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoKCFmbmQpIHx8IChzaW5fYSA9
PSBOVUxMKSkgeworCQkJCS8qIHB1bnQgKi8KKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJ
CQkJZ290byBub3RDb25uOworCQkJfQorCisJCQl2cmZfaWQgPSBpbnAtPmRlZl92cmZfaWQ7CisJ
CQlzY3RwX2lmYSA9IHNjdHBfc291cmNlX2FkZHJlc3Nfc2VsZWN0aW9uKGlucCwKKwkJCQkJCQkJ
IHN0Y2IsCisJCQkJCQkJCSAoc2N0cF9yb3V0ZV90ICopJm5ldC0+cm8sCisJCQkJCQkJCSBuZXQs
IDAsIHZyZl9pZCk7CisJCQlpZiAoc2N0cF9pZmEpIHsKKwkJCQlzaW4tPnNpbl9hZGRyID0gc2N0
cF9pZmEtPmFkZHJlc3Muc2luLnNpbl9hZGRyOworCQkJCXNjdHBfZnJlZV9pZmEoc2N0cF9pZmEp
OworCQkJfQorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJLyogRm9y
IHRoZSBib3VuZCBhbGwgY2FzZSB5b3UgZ2V0IGJhY2sgMCAqLworCW5vdENvbm46CisJCQlzaW4t
PnNpbl9hZGRyLnNfYWRkciA9IDA7CisJCX0KKworCX0gZWxzZSB7CisJCS8qIFRha2UgdGhlIGZp
cnN0IElQdjQgYWRkcmVzcyBpbiB0aGUgbGlzdCAqLworCQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFk
ZHI7CisJCWludCBmbmQgPSAwOworCisJCUxJU1RfRk9SRUFDSChsYWRkciwgJmlucC0+c2N0cF9h
ZGRyX2xpc3QsIHNjdHBfbnh0X2FkZHIpIHsKKwkJCWlmIChsYWRkci0+aWZhLT5hZGRyZXNzLnNh
LnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW5fYTsK
KworCQkJCXNpbl9hID0gJmxhZGRyLT5pZmEtPmFkZHJlc3Muc2luOworCQkJCXNpbi0+c2luX2Fk
ZHIgPSBzaW5fYS0+c2luX2FkZHI7CisJCQkJZm5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJ
fQorCQlpZiAoIWZuZCkgeworI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQlTQ1RQX0ZS
RUVfU09OQU1FKHNpbik7CisjZW5kaWYKKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVOT0VOVCk7CisJCQlyZXR1cm4gKEVOT0VOVCk7CisJCX0KKwl9CisJU0NUUF9JTlBfUlVOTE9D
SyhpbnApOworI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJKCphZGRyKSA9IChzdHJ1Y3Qg
c29ja2FkZHIgKilzaW47CisjZW5kaWYKKwlyZXR1cm4gKDApOworfQorCitpbnQKKyNpZiAhZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorc2N0cF9wZWVyYWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3Ry
dWN0IHNvY2thZGRyICoqYWRkcikKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKyNlbHNl
CitzY3RwX3BlZXJhZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3QgbWJ1ZiAqbmFtKQorewor
CXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gbXRvZChuYW0sIHN0cnVjdCBzb2NrYWRkcl9pbiAq
KTsKKworI2VuZGlmCisJaW50IGZuZDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbl9hOworCXN0
cnVjdCBzY3RwX2lucGNiICppbnA7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCXN0cnVjdCBz
Y3RwX25ldHMgKm5ldDsKKworCS8qIERvIHRoZSBtYWxsb2MgZmlyc3QgaW4gY2FzZSBpdCBibG9j
a3MuICovCisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlTQ1RQX01BTExPQ19TT05BTUUo
c2luLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKiwgc2l6ZW9mICpzaW4pOworCWlmIChzaW4gPT0gTlVM
TCkKKwkJcmV0dXJuIChFTk9NRU0pOworI2Vsc2UKKwlTQ1RQX0JVRl9MRU4obmFtKSA9IHNpemVv
Zigqc2luKTsKKwltZW1zZXQoc2luLCAwLCBzaXplb2YoKnNpbikpOworI2VuZGlmCisJc2luLT5z
aW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwlzaW4tPnNpbl9sZW4g
PSBzaXplb2YoKnNpbik7CisjZW5kaWYKKworCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNv
LT5zb19wY2I7CisJaWYgKChpbnAgPT0gTlVMTCkgfHwKKwkgICAgKChpbnAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpID09IDApKSB7CisJCS8qIFVEUCB0eXBlIGFuZCBs
aXN0ZW5lcnMgd2lsbCBkcm9wIG91dCBoZXJlICovCisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwkJU0NUUF9GUkVFX1NPTkFNRShzaW4pOworI2VuZGlmCisJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT1RDT05OKTsKKwkJ
cmV0dXJuIChFTk9UQ09OTik7CisJfQorCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJc3RjYiA9IExJ
U1RfRklSU1QoJmlucC0+c2N0cF9hc29jX2xpc3QpOworCWlmIChzdGNiKSB7CisJCVNDVFBfVENC
X0xPQ0soc3RjYik7CisJfQorCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwlpZiAoc3RjYiA9PSBO
VUxMKSB7CisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJU0NUUF9GUkVFX1NPTkFNRShz
aW4pOworI2VuZGlmCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCXJldHVybiAoRUNPTk5SRVNFVCk7CisJfQor
CWZuZCA9IDA7CisJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4
dCkgeworCQlzaW5fYSA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmbmV0LT5yby5fbF9hZGRyOwor
CQlpZiAoc2luX2EtPnNpbl9mYW1pbHkgPT0gQUZfSU5FVCkgeworCQkJZm5kID0gMTsKKwkJCXNp
bi0+c2luX3BvcnQgPSBzdGNiLT5ycG9ydDsKKwkJCXNpbi0+c2luX2FkZHIgPSBzaW5fYS0+c2lu
X2FkZHI7CisJCQlicmVhazsKKwkJfQorCX0KKwlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJaWYg
KCFmbmQpIHsKKwkJLyogTm8gSVB2NCBhZGRyZXNzICovCisjaWYgIWRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKKwkJU0NUUF9GUkVFX1NPTkFNRShzaW4pOworI2VuZGlmCisJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT0VOVCk7CisJ
CXJldHVybiAoRU5PRU5UKTsKKwl9CisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkoKmFk
ZHIpID0gKHN0cnVjdCBzb2NrYWRkciAqKXNpbjsKKyNlbmRpZgorCXJldHVybiAoMCk7Cit9CisK
KyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorc3RydWN0IHByX3VzcnJlcXMgc2N0cF91c3Jy
ZXFzID0geworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJLnBydV9hYm9ydCA9IHNjdHBfYWJv
cnQsCisJLnBydV9hY2NlcHQgPSBzY3RwX2FjY2VwdCwKKwkucHJ1X2F0dGFjaCA9IHNjdHBfYXR0
YWNoLAorCS5wcnVfYmluZCA9IHNjdHBfYmluZCwKKwkucHJ1X2Nvbm5lY3QgPSBzY3RwX2Nvbm5l
Y3QsCisJLnBydV9jb250cm9sID0gaW5fY29udHJvbCwKKwkucHJ1X2Nsb3NlID0gc2N0cF9jbG9z
ZSwKKwkucHJ1X2RldGFjaCA9IHNjdHBfY2xvc2UsCisJLnBydV9zb3BvbGwgPSBzb3BvbGxfZ2Vu
ZXJpYywKKwkucHJ1X2ZsdXNoID0gc2N0cF9mbHVzaCwKKwkucHJ1X2Rpc2Nvbm5lY3QgPSBzY3Rw
X2Rpc2Nvbm5lY3QsCisJLnBydV9saXN0ZW4gPSBzY3RwX2xpc3RlbiwKKwkucHJ1X3BlZXJhZGRy
ID0gc2N0cF9wZWVyYWRkciwKKwkucHJ1X3NlbmQgPSBzY3RwX3NlbmRtLAorCS5wcnVfc2h1dGRv
d24gPSBzY3RwX3NodXRkb3duLAorCS5wcnVfc29ja2FkZHIgPSBzY3RwX2luZ2V0YWRkciwKKwku
cHJ1X3Nvc2VuZCA9IHNjdHBfc29zZW5kLAorCS5wcnVfc29yZWNlaXZlID0gc2N0cF9zb3JlY2Vp
dmUKKyNlbGlmIGRlZmluZWQoX19BUFBMRV9fKQorCS5wcnVfYWJvcnQgPSBzY3RwX2Fib3J0LAor
CS5wcnVfYWNjZXB0ID0gc2N0cF9hY2NlcHQsCisJLnBydV9hdHRhY2ggPSBzY3RwX2F0dGFjaCwK
KwkucHJ1X2JpbmQgPSBzY3RwX2JpbmQsCisJLnBydV9jb25uZWN0ID0gc2N0cF9jb25uZWN0LAor
CS5wcnVfY29ubmVjdDIgPSBwcnVfY29ubmVjdDJfbm90c3VwcCwKKwkucHJ1X2NvbnRyb2wgPSBp
bl9jb250cm9sLAorCS5wcnVfZGV0YWNoID0gc2N0cF9kZXRhY2gsCisJLnBydV9kaXNjb25uZWN0
ID0gc2N0cF9kaXNjb25uZWN0LAorCS5wcnVfbGlzdGVuID0gc2N0cF9saXN0ZW4sCisJLnBydV9w
ZWVyYWRkciA9IHNjdHBfcGVlcmFkZHIsCisJLnBydV9yY3ZkID0gTlVMTCwKKwkucHJ1X3Jjdm9v
YiA9IHBydV9yY3Zvb2Jfbm90c3VwcCwKKwkucHJ1X3NlbmQgPSBzY3RwX3NlbmRtLAorCS5wcnVf
c2Vuc2UgPSBwcnVfc2Vuc2VfbnVsbCwKKwkucHJ1X3NodXRkb3duID0gc2N0cF9zaHV0ZG93biwK
KwkucHJ1X3NvY2thZGRyID0gc2N0cF9pbmdldGFkZHIsCisJLnBydV9zb3NlbmQgPSBzY3RwX3Nv
c2VuZCwKKwkucHJ1X3NvcmVjZWl2ZSA9IHNjdHBfc29yZWNlaXZlLAorCS5wcnVfc29wb2xsID0g
c29wb2xsCisjZWxpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KwlzY3RwX2Fib3J0LAorCXNjdHBfYWNjZXB0LAorCXNjdHBfYXR0YWNoLAorCXNjdHBfYmluZCwK
KwlzY3RwX2Nvbm5lY3QsCisJcHJ1X2Nvbm5lY3QyX25vdHN1cHAsCisJTlVMTCwKKwlOVUxMLAor
CXNjdHBfZGlzY29ubmVjdCwKKwlzY3RwX2xpc3RlbiwKKwlzY3RwX3BlZXJhZGRyLAorCU5VTEws
CisJcHJ1X3Jjdm9vYl9ub3RzdXBwLAorCU5VTEwsCisJcHJ1X3NlbnNlX251bGwsCisJc2N0cF9z
aHV0ZG93biwKKwlzY3RwX2ZsdXNoLAorCXNjdHBfaW5nZXRhZGRyLAorCXNjdHBfc29zZW5kLAor
CXNjdHBfc29yZWNlaXZlLAorCXNvcG9sbF9nZW5lcmljLAorCU5VTEwsCisJc2N0cF9jbG9zZQor
I2VuZGlmCit9OworI2VsaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK2ludAorc2N0cF91c3Jy
ZXEoc28sIHJlcSwgbSwgbmFtLCBjb250cm9sKQorCXN0cnVjdCBzb2NrZXQgKnNvOworCWludCBy
ZXE7CisJc3RydWN0IG1idWYgKm0sICpuYW0sICpjb250cm9sOworeworCXN0cnVjdCBwcm9jICpw
ID0gY3VycHJvYzsKKwlpbnQgZXJyb3I7CisJaW50IGZhbWlseTsKKwlzdHJ1Y3Qgc2N0cF9pbnBj
YiAqaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKKworCWVycm9yID0gMDsK
KwlmYW1pbHkgPSBzby0+c29fcHJvdG8tPnByX2RvbWFpbi0+ZG9tX2ZhbWlseTsKKwlpZiAocmVx
ID09IFBSVV9DT05UUk9MKSB7CisJCXN3aXRjaCAoZmFtaWx5KSB7CisJCWNhc2UgUEZfSU5FVDoK
KwkJCWVycm9yID0gaW5fY29udHJvbChzbywgKGxvbmcpbSwgKGNhZGRyX3QpbmFtLAorCQkJICAg
IChzdHJ1Y3QgaWZuZXQgKiljb250cm9sKTsKKwkJCWJyZWFrOworI2lmZGVmIElORVQ2CisJCWNh
c2UgUEZfSU5FVDY6CisJCQllcnJvciA9IGluNl9jb250cm9sKHNvLCAobG9uZyltLCAoY2FkZHJf
dCluYW0sCisJCQkgICAgKHN0cnVjdCBpZm5ldCAqKWNvbnRyb2wsIHApOworCQkJYnJlYWs7Cisj
ZW5kaWYKKwkJZGVmYXVsdDoKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVBRk5PU1VQUE9SVCk7CisJCQllcnJvciA9IEVBRk5P
U1VQUE9SVDsKKwkJfQorCQlyZXR1cm4gKGVycm9yKTsKKwl9CisJc3dpdGNoIChyZXEpIHsKKwlj
YXNlIFBSVV9BVFRBQ0g6CisJCWVycm9yID0gc2N0cF9hdHRhY2goc28sIGZhbWlseSwgcCk7CisJ
CWJyZWFrOworCWNhc2UgUFJVX0RFVEFDSDoKKwkJZXJyb3IgPSBzY3RwX2RldGFjaChzbyk7CisJ
CWJyZWFrOworCWNhc2UgUFJVX0JJTkQ6CisJCWlmIChuYW0gPT0gTlVMTCkgeworCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlO
VkFMKTsKKwkJCXJldHVybiAoRUlOVkFMKTsKKwkJfQorCQllcnJvciA9IHNjdHBfYmluZChzbywg
bmFtLCBwKTsKKwkJYnJlYWs7CisJY2FzZSBQUlVfTElTVEVOOgorCQllcnJvciA9IHNjdHBfbGlz
dGVuKHNvLCBwKTsKKwkJYnJlYWs7CisJY2FzZSBQUlVfQ09OTkVDVDoKKwkJaWYgKG5hbSA9PSBO
VUxMKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisJCWVycm9y
ID0gc2N0cF9jb25uZWN0KHNvLCBuYW0sIHApOworCQlicmVhazsKKwljYXNlIFBSVV9ESVNDT05O
RUNUOgorCQllcnJvciA9IHNjdHBfZGlzY29ubmVjdChzbyk7CisJCWJyZWFrOworCWNhc2UgUFJV
X0FDQ0VQVDoKKwkJaWYgKG5hbSA9PSBOVUxMKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJcmV0dXJu
IChFSU5WQUwpOworCQl9CisJCWVycm9yID0gc2N0cF9hY2NlcHQoc28sIG5hbSk7CisJCWJyZWFr
OworCWNhc2UgUFJVX1NIVVRET1dOOgorCQllcnJvciA9IHNjdHBfc2h1dGRvd24oc28pOworCQli
cmVhazsKKworCWNhc2UgUFJVX1JDVkQ6CisJCS8qCisJCSAqIEZvciBPcGVuIGFuZCBOZXQgQlNE
LCB0aGlzIGlzIHJlYWwgdWdseS4gVGhlIG1idWYgKm5hbQorCQkgKiB0aGF0IGlzIHBhc3NlZCAo
Ynkgc29yZWNlaXZlKCkpIGlzIHRoZSBpbnQgZmxhZ3MgYyBhc3QgYXMKKwkJICogYSAobWJ1ZiAq
KSB5dWNrIQorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIFBSVV9TRU5EOgorCQkvKiBGbGFncyBh
cmUgaWdub3JlZCAqLworCQl7CisJCQlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHI7CisKKwkJCWlmIChu
YW0gPT0gTlVMTCkKKwkJCQlhZGRyID0gTlVMTDsKKwkJCWVsc2UKKwkJCQlhZGRyID0gbXRvZChu
YW0sIHN0cnVjdCBzb2NrYWRkciAqKTsKKworCQkJZXJyb3IgPSBzY3RwX3NlbmRtKHNvLCAwLCBt
LCBhZGRyLCBjb250cm9sLCBwKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFBSVV9BQk9SVDoKKwkJ
ZXJyb3IgPSBzY3RwX2Fib3J0KHNvKTsKKwkJYnJlYWs7CisKKwljYXNlIFBSVV9TRU5TRToKKwkJ
ZXJyb3IgPSAwOworCQlicmVhazsKKwljYXNlIFBSVV9SQ1ZPT0I6CisJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVBRk5PU1VQUE9S
VCk7CisJCWVycm9yID0gRUFGTk9TVVBQT1JUOworCQlicmVhazsKKwljYXNlIFBSVV9TRU5ET09C
OgorCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFQUZOT1NVUFBPUlQpOworCQllcnJvciA9IEVBRk5PU1VQUE9SVDsKKwkJYnJlYWs7
CisJY2FzZSBQUlVfUEVFUkFERFI6CisJCWVycm9yID0gc2N0cF9wZWVyYWRkcihzbywgbmFtKTsK
KwkJYnJlYWs7CisJY2FzZSBQUlVfU09DS0FERFI6CisJCWVycm9yID0gc2N0cF9pbmdldGFkZHIo
c28sIG5hbSk7CisJCWJyZWFrOworCWNhc2UgUFJVX1NMT1dUSU1POgorCQllcnJvciA9IDA7CisJ
CWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gKGVycm9yKTsKK30KKwor
I2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK2ludAorcmVnaXN0
ZXJfcmVjdl9jYihzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICAgICAgaW50ICgqcmVj
ZWl2ZV9jYikoc3RydWN0IHNvY2tldCAqc29jaywgdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkciwg
dm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFsZW4sIHN0cnVjdCBzY3Rw
X3JjdmluZm8sIGludCBmbGFncywgdm9pZCAqdWxwX2luZm8pKQoreworCXN0cnVjdCBzY3RwX2lu
cGNiICppbnA7CisKKwlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKikgc28tPnNvX3BjYjsKKwlp
ZiAoaW5wID09IE5VTEwpIHsKKwkJcmV0dXJuICgwKTsKKwl9CisJU0NUUF9JTlBfV0xPQ0soaW5w
KTsKKwlpbnAtPnJlY3ZfY2FsbGJhY2sgPSByZWNlaXZlX2NiOworCVNDVFBfSU5QX1dVTkxPQ0so
aW5wKTsKKwlyZXR1cm4gKDEpOworfQorCitpbnQKK3JlZ2lzdGVyX3NlbmRfY2Ioc3RydWN0IHNv
Y2tldCAqc28sIHVpbnQzMl90IHNiX3RocmVzaG9sZCwgaW50ICgqc2VuZF9jYikoc3RydWN0IHNv
Y2tldCAqc29jaywgdWludDMyX3Qgc2JfZnJlZSwgdm9pZCAqdWxwX2luZm8pKQoreworCXN0cnVj
dCBzY3RwX2lucGNiICppbnA7CisKKwlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKikgc28tPnNv
X3BjYjsKKwlpZiAoaW5wID09IE5VTEwpIHsKKwkJcmV0dXJuICgwKTsKKwl9CisJU0NUUF9JTlBf
V0xPQ0soaW5wKTsKKwlpbnAtPnNlbmRfY2FsbGJhY2sgPSBzZW5kX2NiOworCWlucC0+c2VuZF9z
Yl90aHJlc2hvbGQgPSBzYl90aHJlc2hvbGQ7CisJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCS8q
IEZJWE1FIGNoYW5nZSB0byBjdXJyZW50IGFtb3VudCBmcmVlLiBUaGlzIHdpbGwgYmUgdGhlIGZ1
bGwgYnVmZmVyCisJICogdGhlIGZpcnN0IHRpbWUgdGhpcyBpcyByZWdpc3RlcmVkIGJ1dCBpdCBj
b3VsZCBiZSBvbmx5IGEgcG9ydGlvbgorCSAqIG9mIHRoZSBzZW5kIGJ1ZmZlciBpZiB0aGlzIGlz
IGNhbGxlZCBhIHNlY29uZCB0aW1lIGUuZy4gaWYgdGhlCisJICogdGhyZXNob2xkIGNoYW5nZXMu
CisJICovCisJcmV0dXJuICgxKTsKK30KKworaW50CityZWdpc3Rlcl91bHBfaW5mbyAoc3RydWN0
IHNvY2tldCAqc28sIHZvaWQgKnVscF9pbmZvKQoreworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7
CisKKwlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKikgc28tPnNvX3BjYjsKKwlpZiAoaW5wID09
IE5VTEwpIHsKKwkJcmV0dXJuICgwKTsKKwl9CisJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwlpbnAt
PnVscF9pbmZvID0gdWxwX2luZm87CisJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCXJldHVybiAo
MSk7Cit9CisKK2ludAorcmV0cmlldmVfdWxwX2luZm8gKHN0cnVjdCBzb2NrZXQgKnNvLCB2b2lk
ICoqcHVscF9pbmZvKQoreworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisKKwlpZiAocHVscF9p
bmZvID09IE5VTEwpIHsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwlpbnAgPSAoc3RydWN0IHNjdHBf
aW5wY2IgKikgc28tPnNvX3BjYjsKKwlpZiAoaW5wID09IE5VTEwpIHsKKwkJcmV0dXJuICgwKTsK
Kwl9CisJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkqcHVscF9pbmZvID0gaW5wLT51bHBfaW5mbzsK
KwlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJcmV0dXJuICgxKTsKK30KKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdmFyLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91
c3JzY3RwbGliL25ldGluZXQvc2N0cF92YXIuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAw
MDAwMDAwMDAwMDAuLjNjZGZkZmU3NmI5YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Vz
cnNjdHBsaWIvbmV0aW5ldC9zY3RwX3Zhci5oCkBAIC0wLDAgKzEsNDQzIEBACisvKi0KKyAqIFNQ
RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMp
IDIwMDEtMjAwOCwgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhl
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUgbWV0OgorICoKKyAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogYikgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogYykgTmVpdGhlciB0
aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAg
ICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAq
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19G
QlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfdmFyLmggMzY1MDcxIDIwMjAt
MDktMDEgMjE6MTk6MTRaIG1qZyAkIik7CisjZW5kaWYKKworI2lmbmRlZiBfTkVUSU5FVF9TQ1RQ
X1ZBUl9IXworI2RlZmluZSBfTkVUSU5FVF9TQ1RQX1ZBUl9IXworCisjaW5jbHVkZSA8bmV0aW5l
dC9zY3RwX3Vpby5oPgorCisjaWYgZGVmaW5lZChfS0VSTkVMKSB8fCBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorZXh0ZXJuIHN0cnVjdCBwcl91
c3JyZXFzIHNjdHBfdXNycmVxczsKKyNlbmRpZgorCisjZGVmaW5lIHNjdHBfZmVhdHVyZV9vbihp
bnAsIGZlYXR1cmUpICAoaW5wLT5zY3RwX2ZlYXR1cmVzIHw9IGZlYXR1cmUpCisjZGVmaW5lIHNj
dHBfZmVhdHVyZV9vZmYoaW5wLCBmZWF0dXJlKSAoaW5wLT5zY3RwX2ZlYXR1cmVzICY9IH5mZWF0
dXJlKQorI2RlZmluZSBzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBmZWF0dXJlKSAoKGlucC0+c2N0
cF9mZWF0dXJlcyAmIGZlYXR1cmUpID09IGZlYXR1cmUpCisjZGVmaW5lIHNjdHBfaXNfZmVhdHVy
ZV9vZmYoaW5wLCBmZWF0dXJlKSAoKGlucC0+c2N0cF9mZWF0dXJlcyAmIGZlYXR1cmUpID09IDAp
CisKKyNkZWZpbmUgc2N0cF9zdGNiX2ZlYXR1cmVfb24oaW5wLCBzdGNiLCBmZWF0dXJlKSB7XAor
CWlmIChzdGNiKSB7IFwKKwkJc3RjYi0+YXNvYy5zY3RwX2ZlYXR1cmVzIHw9IGZlYXR1cmU7IFwK
Kwl9IGVsc2UgaWYgKGlucCkgeyBcCisJCWlucC0+c2N0cF9mZWF0dXJlcyB8PSBmZWF0dXJlOyBc
CisJfSBcCit9CisjZGVmaW5lIHNjdHBfc3RjYl9mZWF0dXJlX29mZihpbnAsIHN0Y2IsIGZlYXR1
cmUpIHtcCisJaWYgKHN0Y2IpIHsgXAorCQlzdGNiLT5hc29jLnNjdHBfZmVhdHVyZXMgJj0gfmZl
YXR1cmU7IFwKKwl9IGVsc2UgaWYgKGlucCkgeyBcCisJCWlucC0+c2N0cF9mZWF0dXJlcyAmPSB+
ZmVhdHVyZTsgXAorCX0gXAorfQorI2RlZmluZSBzY3RwX3N0Y2JfaXNfZmVhdHVyZV9vbihpbnAs
IHN0Y2IsIGZlYXR1cmUpIFwKKwkoKChzdGNiICE9IE5VTEwpICYmIFwKKwkgICgoc3RjYi0+YXNv
Yy5zY3RwX2ZlYXR1cmVzICYgZmVhdHVyZSkgPT0gZmVhdHVyZSkpIHx8IFwKKwkgKChzdGNiID09
IE5VTEwpICYmIChpbnAgIT0gTlVMTCkgJiYgXAorCSAgKChpbnAtPnNjdHBfZmVhdHVyZXMgJiBm
ZWF0dXJlKSA9PSBmZWF0dXJlKSkpCisjZGVmaW5lIHNjdHBfc3RjYl9pc19mZWF0dXJlX29mZihp
bnAsIHN0Y2IsIGZlYXR1cmUpIFwKKwkoKChzdGNiICE9IE5VTEwpICYmIFwKKwkgICgoc3RjYi0+
YXNvYy5zY3RwX2ZlYXR1cmVzICYgZmVhdHVyZSkgPT0gMCkpIHx8IFwKKwkgKChzdGNiID09IE5V
TEwpICYmIChpbnAgIT0gTlVMTCkgJiYgXAorCSAgKChpbnAtPnNjdHBfZmVhdHVyZXMgJiBmZWF0
dXJlKSA9PSAwKSkgfHwgXAorCSAoKHN0Y2IgPT0gTlVMTCkgJiYgKGlucCA9PSBOVUxMKSkpCisK
Ky8qIG1hbmFnaW5nIG1vYmlsaXR5X2ZlYXR1cmUgaW4gaW5wY2IgKGJ5IG1pY2NoaWUpICovCisj
ZGVmaW5lIHNjdHBfbW9iaWxpdHlfZmVhdHVyZV9vbihpbnAsIGZlYXR1cmUpICAoaW5wLT5zY3Rw
X21vYmlsaXR5X2ZlYXR1cmVzIHw9IGZlYXR1cmUpCisjZGVmaW5lIHNjdHBfbW9iaWxpdHlfZmVh
dHVyZV9vZmYoaW5wLCBmZWF0dXJlKSAoaW5wLT5zY3RwX21vYmlsaXR5X2ZlYXR1cmVzICY9IH5m
ZWF0dXJlKQorI2RlZmluZSBzY3RwX2lzX21vYmlsaXR5X2ZlYXR1cmVfb24oaW5wLCBmZWF0dXJl
KSAoaW5wLT5zY3RwX21vYmlsaXR5X2ZlYXR1cmVzICYgZmVhdHVyZSkKKyNkZWZpbmUgc2N0cF9p
c19tb2JpbGl0eV9mZWF0dXJlX29mZihpbnAsIGZlYXR1cmUpICgoaW5wLT5zY3RwX21vYmlsaXR5
X2ZlYXR1cmVzICYgZmVhdHVyZSkgPT0gMCkKKworI2RlZmluZSBzY3RwX21heHNwYWNlKHNiKSAo
bWF4KChzYiktPnNiX2hpd2F0LFNDVFBfTUlOSU1BTF9SV05EKSkKKworI2RlZmluZQlzY3RwX3Ni
c3BhY2UoYXNvYywgc2IpICgobG9uZykgKChzY3RwX21heHNwYWNlKHNiKSA+IChhc29jKS0+c2Jf
Y2MpID8gKHNjdHBfbWF4c3BhY2Uoc2IpIC0gKGFzb2MpLT5zYl9jYykgOiAwKSkKKworI2RlZmlu
ZQlzY3RwX3Nic3BhY2VfZmFpbGVkbXNncyhzYikgKChsb25nKSAoKHNjdHBfbWF4c3BhY2Uoc2Ip
ID4gKHNiKS0+c2JfY2MpID8gKHNjdHBfbWF4c3BhY2Uoc2IpIC0gKHNiKS0+c2JfY2MpIDogMCkp
CisKKyNkZWZpbmUgc2N0cF9zYnNwYWNlX3N1YihhLGIpICgoKGEpID4gKGIpKSA/ICgoYSkgLSAo
YikpIDogMCkKKworLyoKKyAqIEkgdHJpZWQgdG8gY2FjaGUgdGhlIHJlYWRxIGVudHJpZXMgYXQg
b25lIHBvaW50LiBCdXQgdGhlIHJlYWxpdHkKKyAqIGlzIHRoYXQgaXQgZGlkIG5vdCBhZGQgYW55
IHBlcmZvcm1hbmNlIHNpbmNlIHRoaXMgbWVhbnQgd2UgaGFkIHRvCisgKiBsb2NrIHRoZSBTVENC
IG9uIHJlYWQuIEFuZCBhdCB0aGF0IHBvaW50IG9uY2UgeW91IGhhdmUgdG8gZG8gYW4KKyAqIGV4
dHJhIGxvY2ssIGl0IHJlYWxseSBkb2VzIG5vdCBtYXR0ZXIgaWYgdGhlIGxvY2sgaXMgaW4gdGhl
IFpPTkUKKyAqIHN0dWZmIG9yIGluIG91ciBjb2RlLiBOb3RlIHRoYXQgdGhpcyBzYW1lIHByb2Js
ZW0gd291bGQgb2NjdXIgd2l0aAorICogYW4gbWJ1ZiBjYWNoZSBhcyB3ZWxsIHNvIGl0IGlzIG5v
dCByZWFsbHkgd29ydGggZG9pbmcsIGF0IGxlYXN0CisgKiByaWdodCBub3cgOi1ECisgKi8KKyNp
ZmRlZiBJTlZBUklBTlRTCisjZGVmaW5lIHNjdHBfZnJlZV9hX3JlYWRxKF9zdGNiLCBfcmVhZHEp
IHsgXAorCWlmICgoX3JlYWRxKS0+b25fc3RybV9xKSBcCisJCXBhbmljKCJPbiBzdHJtIHEgc3Rj
YjolcCByZWFkcTolcCIsIChfc3RjYiksIChfcmVhZHEpKTsgXAorCVNDVFBfWk9ORV9GUkVFKFND
VFBfQkFTRV9JTkZPKGlwaV96b25lX3JlYWRxKSwgKF9yZWFkcSkpOyBcCisJU0NUUF9ERUNSX1JF
QURRX0NPVU5UKCk7IFwKK30KKyNlbHNlCisjZGVmaW5lIHNjdHBfZnJlZV9hX3JlYWRxKF9zdGNi
LCBfcmVhZHEpIHsgXAorCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX3Jl
YWRxKSwgKF9yZWFkcSkpOyBcCisJU0NUUF9ERUNSX1JFQURRX0NPVU5UKCk7IFwKK30KKyNlbmRp
ZgorCisjZGVmaW5lIHNjdHBfYWxsb2NfYV9yZWFkcShfc3RjYiwgX3JlYWRxKSB7IFwKKwkoX3Jl
YWRxKSA9IFNDVFBfWk9ORV9HRVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfcmVhZHEpLCBzdHJ1
Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCk7IFwKKwlpZiAoKF9yZWFkcSkpIHsgXAorCSAgICAgU0NU
UF9JTkNSX1JFQURRX0NPVU5UKCk7IFwKKwl9IFwKK30KKworI2RlZmluZSBzY3RwX2ZyZWVfYV9z
dHJtb3EoX3N0Y2IsIF9zdHJtb3EsIF9zb19sb2NrZWQpIHsgXAorCWlmICgoX3N0cm1vcSktPmhv
bGRzX2tleV9yZWYpIHsgXAorCQlzY3RwX2F1dGhfa2V5X3JlbGVhc2Uoc3RjYiwgc3AtPmF1dGhf
a2V5aWQsIF9zb19sb2NrZWQpOyBcCisJCShfc3RybW9xKS0+aG9sZHNfa2V5X3JlZiA9IDA7IFwK
Kwl9IFwKKwlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9zdHJtb3EpLCAo
X3N0cm1vcSkpOyBcCisJU0NUUF9ERUNSX1NUUk1PUV9DT1VOVCgpOyBcCit9CisKKyNkZWZpbmUg
c2N0cF9hbGxvY19hX3N0cm1vcShfc3RjYiwgX3N0cm1vcSkgeyBcCisJKF9zdHJtb3EpID0gU0NU
UF9aT05FX0dFVChTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9zdHJtb3EpLCBzdHJ1Y3Qgc2N0cF9z
dHJlYW1fcXVldWVfcGVuZGluZyk7IFwKKwlpZiAoKF9zdHJtb3EpKSB7IFwKKwkJbWVtc2V0KF9z
dHJtb3EsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZykpOyBcCisJ
CVNDVFBfSU5DUl9TVFJNT1FfQ09VTlQoKTsgXAorCQkoX3N0cm1vcSktPmhvbGRzX2tleV9yZWYg
PSAwOyBcCisJfSBcCit9CisKKyNkZWZpbmUgc2N0cF9mcmVlX2FfY2h1bmsoX3N0Y2IsIF9jaGss
IF9zb19sb2NrZWQpIHsgXAorCWlmICgoX2NoayktPmhvbGRzX2tleV9yZWYpIHtcCisJCXNjdHBf
YXV0aF9rZXlfcmVsZWFzZSgoX3N0Y2IpLCAoX2NoayktPmF1dGhfa2V5aWQsIF9zb19sb2NrZWQp
OyBcCisJCShfY2hrKS0+aG9sZHNfa2V5X3JlZiA9IDA7IFwKKwl9IFwKKwlpZiAoX3N0Y2IpIHsg
XAorCQlTQ1RQX1RDQl9MT0NLX0FTU0VSVCgoX3N0Y2IpKTsgXAorCQlpZiAoKF9jaGspLT53aG9U
bykgeyBcCisJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoKF9jaGspLT53aG9Ubyk7IFwKKwkJCShf
Y2hrKS0+d2hvVG8gPSBOVUxMOyBcCisJCX0gXAorCQlpZiAoKChfc3RjYiktPmFzb2MuZnJlZV9j
aHVua19jbnQgPiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNvY19mcmVlX3Jlc2NfbGltaXQpKSB8
fCBcCisJCSAgICAoU0NUUF9CQVNFX0lORk8oaXBpX2ZyZWVfY2h1bmtzKSA+IFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9zeXN0ZW1fZnJlZV9yZXNjX2xpbWl0KSkpIHsgXAorCQkJU0NUUF9aT05FX0ZS
RUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfY2h1bmspLCAoX2NoaykpOyBcCisJCQlTQ1RQX0RF
Q1JfQ0hLX0NPVU5UKCk7IFwKKwkJfSBlbHNlIHsgXAorCQkJVEFJTFFfSU5TRVJUX1RBSUwoJihf
c3RjYiktPmFzb2MuZnJlZV9jaHVua3MsIChfY2hrKSwgc2N0cF9uZXh0KTsgXAorCQkJKF9zdGNi
KS0+YXNvYy5mcmVlX2NodW5rX2NudCsrOyBcCisJCQlhdG9taWNfYWRkX2ludCgmU0NUUF9CQVNF
X0lORk8oaXBpX2ZyZWVfY2h1bmtzKSwgMSk7IFwKKwkJfSBcCisJfSBlbHNlIHsgXAorCQlTQ1RQ
X1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9jaHVuayksIChfY2hrKSk7IFwKKwkJ
U0NUUF9ERUNSX0NIS19DT1VOVCgpOyBcCisJfSBcCit9CisKKyNkZWZpbmUgc2N0cF9hbGxvY19h
X2NodW5rKF9zdGNiLCBfY2hrKSB7IFwKKwlpZiAoVEFJTFFfRU1QVFkoJihfc3RjYiktPmFzb2Mu
ZnJlZV9jaHVua3MpKSB7IFwKKwkJKF9jaGspID0gU0NUUF9aT05FX0dFVChTQ1RQX0JBU0VfSU5G
TyhpcGlfem9uZV9jaHVuayksIHN0cnVjdCBzY3RwX3RtaXRfY2h1bmspOyBcCisJCWlmICgoX2No
aykpIHsgXAorCQkJU0NUUF9JTkNSX0NIS19DT1VOVCgpOyBcCisJCQkoX2NoayktPndob1RvID0g
TlVMTDsgXAorCQkJKF9jaGspLT5ob2xkc19rZXlfcmVmID0gMDsgXAorCQl9IFwKKwl9IGVsc2Ug
eyBcCisJCShfY2hrKSA9IFRBSUxRX0ZJUlNUKCYoX3N0Y2IpLT5hc29jLmZyZWVfY2h1bmtzKTsg
XAorCQlUQUlMUV9SRU1PVkUoJihfc3RjYiktPmFzb2MuZnJlZV9jaHVua3MsIChfY2hrKSwgc2N0
cF9uZXh0KTsgXAorCQlhdG9taWNfc3VidHJhY3RfaW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlfZnJl
ZV9jaHVua3MpLCAxKTsgXAorCQkoX2NoayktPmhvbGRzX2tleV9yZWYgPSAwOyBcCisJCVNDVFBf
U1RBVF9JTkNSKHNjdHBzX2NhY2hlZF9jaGspOyBcCisJCShfc3RjYiktPmFzb2MuZnJlZV9jaHVu
a19jbnQtLTsgXAorCX0gXAorfQorCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKyNkZWZpbmUgc2N0cF9mcmVlX3JlbW90ZV9hZGRyKF9fbmV0KSB7
IFwKKwlpZiAoKF9fbmV0KSkgeyAgXAorCQlpZiAoU0NUUF9ERUNSRU1FTlRfQU5EX0NIRUNLX1JF
RkNPVU5UKCYoX19uZXQpLT5yZWZfY291bnQpKSB7IFwKKwkJCVJPX05IRlJFRSgmKF9fbmV0KS0+
cm8pOyBcCisJCQlpZiAoKF9fbmV0KS0+c3JjX2FkZHJfc2VsZWN0ZWQpIHsgXAorCQkJCXNjdHBf
ZnJlZV9pZmEoKF9fbmV0KS0+cm8uX3NfYWRkcik7IFwKKwkJCQkoX19uZXQpLT5yby5fc19hZGRy
ID0gTlVMTDsgXAorCQkJfSBcCisJCQkoX19uZXQpLT5zcmNfYWRkcl9zZWxlY3RlZCA9IDA7IFwK
KwkJCShfX25ldCktPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9SRUFDSEFCTEU7IFwKKwkJCVND
VFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX25ldCksIChfX25ldCkpOyBcCisJ
CQlTQ1RQX0RFQ1JfUkFERFJfQ09VTlQoKTsgXAorCQl9IFwKKwl9IFwKK30KKworI2RlZmluZSBz
Y3RwX3NiZnJlZShjdGwsIHN0Y2IsIHNiLCBtKSB7IFwKKwlTQ1RQX1NBVkVfQVRPTUlDX0RFQ1JF
TUVOVCgmKHNiKS0+c2JfY2MsIFNDVFBfQlVGX0xFTigobSkpKTsgXAorCVNDVFBfU0FWRV9BVE9N
SUNfREVDUkVNRU5UKCYoc2IpLT5zYl9tYmNudCwgTVNJWkUpOyBcCisJaWYgKCgoY3RsKS0+ZG9f
bm90X3JlZl9zdGNiID09IDApICYmIHN0Y2IpIHtcCisJCVNDVFBfU0FWRV9BVE9NSUNfREVDUkVN
RU5UKCYoc3RjYiktPmFzb2Muc2JfY2MsIFNDVFBfQlVGX0xFTigobSkpKTsgXAorCQlTQ1RQX1NB
VkVfQVRPTUlDX0RFQ1JFTUVOVCgmKHN0Y2IpLT5hc29jLm15X3J3bmRfY29udHJvbF9sZW4sIE1T
SVpFKTsgXAorCX0gXAorCWlmIChTQ1RQX0JVRl9UWVBFKG0pICE9IE1UX0RBVEEgJiYgU0NUUF9C
VUZfVFlQRShtKSAhPSBNVF9IRUFERVIgJiYgXAorCSAgICBTQ1RQX0JVRl9UWVBFKG0pICE9IE1U
X09PQkRBVEEpIFwKKwkJYXRvbWljX3N1YnRyYWN0X2ludCgmKHNiKS0+c2JfY3RsLFNDVFBfQlVG
X0xFTigobSkpKTsgXAorfQorCisjZGVmaW5lIHNjdHBfc2JhbGxvYyhzdGNiLCBzYiwgbSkgeyBc
CisJYXRvbWljX2FkZF9pbnQoJihzYiktPnNiX2NjLFNDVFBfQlVGX0xFTigobSkpKTsgXAorCWF0
b21pY19hZGRfaW50KCYoc2IpLT5zYl9tYmNudCwgTVNJWkUpOyBcCisJaWYgKHN0Y2IpIHsgXAor
CQlhdG9taWNfYWRkX2ludCgmKHN0Y2IpLT5hc29jLnNiX2NjLCBTQ1RQX0JVRl9MRU4oKG0pKSk7
IFwKKwkJYXRvbWljX2FkZF9pbnQoJihzdGNiKS0+YXNvYy5teV9yd25kX2NvbnRyb2xfbGVuLCBN
U0laRSk7IFwKKwl9IFwKKwlpZiAoU0NUUF9CVUZfVFlQRShtKSAhPSBNVF9EQVRBICYmIFNDVFBf
QlVGX1RZUEUobSkgIT0gTVRfSEVBREVSICYmIFwKKwkgICAgU0NUUF9CVUZfVFlQRShtKSAhPSBN
VF9PT0JEQVRBKSBcCisJCWF0b21pY19hZGRfaW50KCYoc2IpLT5zYl9jdGwsU0NUUF9CVUZfTEVO
KChtKSkpOyBcCit9CisjZWxzZQkJCQkvKiBGcmVlQlNEIFZlcnNpb24gPD0gNTAwMDAwIG9yIG5v
bi1GcmVlQlNEICovCisjZGVmaW5lIHNjdHBfZnJlZV9yZW1vdGVfYWRkcihfX25ldCkgeyBcCisJ
aWYgKChfX25ldCkpIHsgXAorCQlpZiAoU0NUUF9ERUNSRU1FTlRfQU5EX0NIRUNLX1JFRkNPVU5U
KCYoX19uZXQpLT5yZWZfY291bnQpKSB7IFwKKwkJCWlmICgoX19uZXQpLT5yby5yb19ydCkgeyBc
CisJCQkJUlRGUkVFKChfX25ldCktPnJvLnJvX3J0KTsgXAorCQkJCShfX25ldCktPnJvLnJvX3J0
ID0gTlVMTDsgXAorCQkJfSBcCisJCQlpZiAoKF9fbmV0KS0+c3JjX2FkZHJfc2VsZWN0ZWQpIHsg
XAorCQkJCXNjdHBfZnJlZV9pZmEoKF9fbmV0KS0+cm8uX3NfYWRkcik7IFwKKwkJCQkoX19uZXQp
LT5yby5fc19hZGRyID0gTlVMTDsgXAorCQkJfSBcCisJCQkoX19uZXQpLT5zcmNfYWRkcl9zZWxl
Y3RlZCA9IDA7IFwKKwkJCShfX25ldCktPmRlc3Rfc3RhdGUgJj1+U0NUUF9BRERSX1JFQUNIQUJM
RTsgXAorCQkJU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfbmV0KSwgKF9f
bmV0KSk7IFwKKwkJCVNDVFBfREVDUl9SQUREUl9DT1VOVCgpOyBcCisJCX0gXAorCX0gXAorfQor
CisjZGVmaW5lIHNjdHBfc2JmcmVlKGN0bCwgc3RjYiwgc2IsIG0pIHsgXAorCVNDVFBfU0FWRV9B
VE9NSUNfREVDUkVNRU5UKCYoc2IpLT5zYl9jYywgU0NUUF9CVUZfTEVOKChtKSkpOyBcCisJU0NU
UF9TQVZFX0FUT01JQ19ERUNSRU1FTlQoJihzYiktPnNiX21iY250LCBNU0laRSk7IFwKKwlpZiAo
KChjdGwpLT5kb19ub3RfcmVmX3N0Y2IgPT0gMCkgJiYgc3RjYikgeyBcCisJCVNDVFBfU0FWRV9B
VE9NSUNfREVDUkVNRU5UKCYoc3RjYiktPmFzb2Muc2JfY2MsIFNDVFBfQlVGX0xFTigobSkpKTsg
XAorCQlTQ1RQX1NBVkVfQVRPTUlDX0RFQ1JFTUVOVCgmKHN0Y2IpLT5hc29jLm15X3J3bmRfY29u
dHJvbF9sZW4sIE1TSVpFKTsgXAorCX0gXAorfQorCisjZGVmaW5lIHNjdHBfc2JhbGxvYyhzdGNi
LCBzYiwgbSkgeyBcCisJYXRvbWljX2FkZF9pbnQoJihzYiktPnNiX2NjLCBTQ1RQX0JVRl9MRU4o
KG0pKSk7IFwKKwlhdG9taWNfYWRkX2ludCgmKHNiKS0+c2JfbWJjbnQsIE1TSVpFKTsgXAorCWlm
IChzdGNiKSB7IFwKKwkJYXRvbWljX2FkZF9pbnQoJihzdGNiKS0+YXNvYy5zYl9jYywgU0NUUF9C
VUZfTEVOKChtKSkpOyBcCisJCWF0b21pY19hZGRfaW50KCYoc3RjYiktPmFzb2MubXlfcnduZF9j
b250cm9sX2xlbiwgTVNJWkUpOyBcCisJfSBcCit9CisjZW5kaWYKKworI2RlZmluZSBzY3RwX3Vj
b3VudF9pbmNyKHZhbCkgeyBcCisJdmFsKys7IFwKK30KKworI2RlZmluZSBzY3RwX3Vjb3VudF9k
ZWNyKHZhbCkgeyBcCisJaWYgKHZhbCA+IDApIHsgXAorCQl2YWwtLTsgXAorCX0gZWxzZSB7IFwK
KwkJdmFsID0gMDsgXAorCX0gXAorfQorCisjZGVmaW5lIHNjdHBfbWJ1Zl9jcnVzaChkYXRhKSBk
byB7IFwKKwlzdHJ1Y3QgbWJ1ZiAqX207IFwKKwlfbSA9IChkYXRhKTsgXAorCXdoaWxlIChfbSAm
JiAoU0NUUF9CVUZfTEVOKF9tKSA9PSAwKSkgeyBcCisJCShkYXRhKSAgPSBTQ1RQX0JVRl9ORVhU
KF9tKTsgXAorCQlTQ1RQX0JVRl9ORVhUKF9tKSA9IE5VTEw7IFwKKwkJc2N0cF9tX2ZyZWUoX20p
OyBcCisJCV9tID0gKGRhdGEpOyBcCisJfSBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIHNjdHBf
ZmxpZ2h0X3NpemVfZGVjcmVhc2UodHAxKSBkbyB7IFwKKwlpZiAodHAxLT53aG9Uby0+ZmxpZ2h0
X3NpemUgPj0gdHAxLT5ib29rX3NpemUpIFwKKwkJdHAxLT53aG9Uby0+ZmxpZ2h0X3NpemUgLT0g
dHAxLT5ib29rX3NpemU7IFwKKwllbHNlIFwKKwkJdHAxLT53aG9Uby0+ZmxpZ2h0X3NpemUgPSAw
OyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIHNjdHBfZmxpZ2h0X3NpemVfaW5jcmVhc2UodHAx
KSBkbyB7IFwKKwkodHAxKS0+d2hvVG8tPmZsaWdodF9zaXplICs9ICh0cDEpLT5ib29rX3NpemU7
IFwKK30gd2hpbGUgKDApCisKKyNpZmRlZiBTQ1RQX0ZTX1NQRUNfTE9HCisjZGVmaW5lIHNjdHBf
dG90YWxfZmxpZ2h0X2RlY3JlYXNlKHN0Y2IsIHRwMSkgZG8geyBcCisJaWYgKHN0Y2ItPmFzb2Mu
ZnNfaW5kZXggPiBTQ1RQX0ZTX1NQRUNfTE9HX1NJWkUpIFwKKwkJc3RjYi0+YXNvYy5mc19pbmRl
eCA9IDA7XAorCXN0Y2ItPmFzb2MuZnNsb2dbc3RjYi0+YXNvYy5mc19pbmRleF0udG90YWxfZmxp
Z2h0ID0gc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQ7IFwKKwlzdGNiLT5hc29jLmZzbG9nW3N0Y2It
PmFzb2MuZnNfaW5kZXhdLnRzbiA9IHRwMS0+cmVjLmRhdGEudHNuOyBcCisJc3RjYi0+YXNvYy5m
c2xvZ1tzdGNiLT5hc29jLmZzX2luZGV4XS5ib29rID0gdHAxLT5ib29rX3NpemU7IFwKKwlzdGNi
LT5hc29jLmZzbG9nW3N0Y2ItPmFzb2MuZnNfaW5kZXhdLnNlbnQgPSB0cDEtPnNlbnQ7IFwKKwlz
dGNiLT5hc29jLmZzbG9nW3N0Y2ItPmFzb2MuZnNfaW5kZXhdLmluY3IgPSAwOyBcCisJc3RjYi0+
YXNvYy5mc2xvZ1tzdGNiLT5hc29jLmZzX2luZGV4XS5kZWNyID0gMTsgXAorCXN0Y2ItPmFzb2Mu
ZnNfaW5kZXgrKzsgXAorCXRwMS0+d2luZG93X3Byb2JlID0gMDsgXAorCWlmIChzdGNiLT5hc29j
LnRvdGFsX2ZsaWdodCA+PSB0cDEtPmJvb2tfc2l6ZSkgeyBcCisJCXN0Y2ItPmFzb2MudG90YWxf
ZmxpZ2h0IC09IHRwMS0+Ym9va19zaXplOyBcCisJCWlmIChzdGNiLT5hc29jLnRvdGFsX2ZsaWdo
dF9jb3VudCA+IDApIFwKKwkJCXN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0X2NvdW50LS07IFwKKwl9
IGVsc2UgeyBcCisJCXN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0ID0gMDsgXAorCQlzdGNiLT5hc29j
LnRvdGFsX2ZsaWdodF9jb3VudCA9IDA7IFwKKwl9IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUg
c2N0cF90b3RhbF9mbGlnaHRfaW5jcmVhc2Uoc3RjYiwgdHAxKSBkbyB7IFwKKwlpZiAoc3RjYi0+
YXNvYy5mc19pbmRleCA+IFNDVFBfRlNfU1BFQ19MT0dfU0laRSkgXAorCQlzdGNiLT5hc29jLmZz
X2luZGV4ID0gMDtcCisJc3RjYi0+YXNvYy5mc2xvZ1tzdGNiLT5hc29jLmZzX2luZGV4XS50b3Rh
bF9mbGlnaHQgPSBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodDsgXAorCXN0Y2ItPmFzb2MuZnNsb2db
c3RjYi0+YXNvYy5mc19pbmRleF0udHNuID0gdHAxLT5yZWMuZGF0YS50c247IFwKKwlzdGNiLT5h
c29jLmZzbG9nW3N0Y2ItPmFzb2MuZnNfaW5kZXhdLmJvb2sgPSB0cDEtPmJvb2tfc2l6ZTsgXAor
CXN0Y2ItPmFzb2MuZnNsb2dbc3RjYi0+YXNvYy5mc19pbmRleF0uc2VudCA9IHRwMS0+c2VudDsg
XAorCXN0Y2ItPmFzb2MuZnNsb2dbc3RjYi0+YXNvYy5mc19pbmRleF0uaW5jciA9IDE7IFwKKwlz
dGNiLT5hc29jLmZzbG9nW3N0Y2ItPmFzb2MuZnNfaW5kZXhdLmRlY3IgPSAwOyBcCisJc3RjYi0+
YXNvYy5mc19pbmRleCsrOyBcCisJKHN0Y2IpLT5hc29jLnRvdGFsX2ZsaWdodF9jb3VudCsrOyBc
CisJKHN0Y2IpLT5hc29jLnRvdGFsX2ZsaWdodCArPSAodHAxKS0+Ym9va19zaXplOyBcCit9IHdo
aWxlICgwKQorCisjZWxzZQorCisjZGVmaW5lIHNjdHBfdG90YWxfZmxpZ2h0X2RlY3JlYXNlKHN0
Y2IsIHRwMSkgZG8geyBcCisJdHAxLT53aW5kb3dfcHJvYmUgPSAwOyBcCisJaWYgKHN0Y2ItPmFz
b2MudG90YWxfZmxpZ2h0ID49IHRwMS0+Ym9va19zaXplKSB7IFwKKwkJc3RjYi0+YXNvYy50b3Rh
bF9mbGlnaHQgLT0gdHAxLT5ib29rX3NpemU7IFwKKwkJaWYgKHN0Y2ItPmFzb2MudG90YWxfZmxp
Z2h0X2NvdW50ID4gMCkgXAorCQkJc3RjYi0+YXNvYy50b3RhbF9mbGlnaHRfY291bnQtLTsgXAor
CX0gZWxzZSB7IFwKKwkJc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQgPSAwOyBcCisJCXN0Y2ItPmFz
b2MudG90YWxfZmxpZ2h0X2NvdW50ID0gMDsgXAorCX0gXAorfSB3aGlsZSAoMCkKKworI2RlZmlu
ZSBzY3RwX3RvdGFsX2ZsaWdodF9pbmNyZWFzZShzdGNiLCB0cDEpIGRvIHsgXAorCShzdGNiKS0+
YXNvYy50b3RhbF9mbGlnaHRfY291bnQrKzsgXAorCShzdGNiKS0+YXNvYy50b3RhbF9mbGlnaHQg
Kz0gKHRwMSktPmJvb2tfc2l6ZTsgXAorfSB3aGlsZSAoMCkKKworI2VuZGlmCisKKyNkZWZpbmUg
U0NUUF9QRl9FTkFCTEVEKF9uZXQpIChfbmV0LT5wZl90aHJlc2hvbGQgPCBfbmV0LT5mYWlsdXJl
X3RocmVzaG9sZCkKKyNkZWZpbmUgU0NUUF9ORVRfSVNfUEYoX25ldCkgKF9uZXQtPnBmX3RocmVz
aG9sZCA8IF9uZXQtPmVycm9yX2NvdW50KQorCitzdHJ1Y3Qgc2N0cF9uZXRzOworc3RydWN0IHNj
dHBfaW5wY2I7CitzdHJ1Y3Qgc2N0cF90Y2I7CitzdHJ1Y3Qgc2N0cGhkcjsKKworI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCit2b2lkIHNjdHBfY2xvc2Uoc3RydWN0IHNvY2tldCAqc28pOworI2Vsc2UKK2ludCBzY3Rw
X2RldGFjaChzdHJ1Y3Qgc29ja2V0ICpzbyk7CisjZW5kaWYKK2ludCBzY3RwX2Rpc2Nvbm5lY3Qo
c3RydWN0IHNvY2tldCAqc28pOworI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYgZGVm
aW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKEFQUExFX0xFT1BBUkQpICYmICFkZWZpbmVkKEFQ
UExFX1NOT1dMRU9QQVJEKSAmJiAhZGVmaW5lZChBUFBMRV9MSU9OKSAmJiAhZGVmaW5lZChBUFBM
RV9NT1VOVEFJTkxJT04pICYmICFkZWZpbmVkKEFQUExFX0VMQ0FQSVRBTikKK3ZvaWQgc2N0cF9j
dGxpbnB1dChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCB2b2lkICosIHN0cnVjdCBpZm5ldCAqIFND
VFBfVU5VU0VEKTsKKyNlbHNlCit2b2lkIHNjdHBfY3RsaW5wdXQoaW50LCBzdHJ1Y3Qgc29ja2Fk
ZHIgKiwgdm9pZCAqKTsKKyNlbmRpZgoraW50IHNjdHBfY3Rsb3V0cHV0KHN0cnVjdCBzb2NrZXQg
Kiwgc3RydWN0IHNvY2tvcHQgKik7CisjaWZkZWYgSU5FVAordm9pZCBzY3RwX2lucHV0X3dpdGhf
cG9ydChzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIHVpbnQxNl90KTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQoraW50IHNjdHBfaW5wdXQoc3RydWN0IG1i
dWYgKiosIGludCAqLCBpbnQpOworI2Vsc2UKK3ZvaWQgc2N0cF9pbnB1dChzdHJ1Y3QgbWJ1ZiAq
LCBpbnQpOworI2VuZGlmCisjZW5kaWYKK3ZvaWQgc2N0cF9wYXRobXR1X2FkanVzdG1lbnQoc3Ry
dWN0IHNjdHBfdGNiICosIHVpbnQxNl90KTsKKyNlbHNlCisjaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQordm9pZCBzY3RwX3BhdGhtdHVfYWRqdXN0bWVudChzdHJ1Y3Qgc2N0cF90Y2IgKiwgdWlu
dDE2X3QpOworI2Vsc2UKK3ZvaWQgc2N0cF9pbnB1dChzdHJ1Y3QgbWJ1ZiAqLC4uLik7CisjZW5k
aWYKK3ZvaWQgKnNjdHBfY3RsaW5wdXQoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgdm9pZCAqKTsK
K2ludCBzY3RwX2N0bG91dHB1dChpbnQsIHN0cnVjdCBzb2NrZXQgKiwgaW50LCBpbnQsIHN0cnVj
dCBtYnVmICoqKTsKKyNlbmRpZgordm9pZCBzY3RwX2RyYWluKHZvaWQpOworI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKK3ZvaWQgc2N0cF9pbml0KHVpbnQxNl90LAorICAgICAgICAgICAgICAg
aW50ICgqKSh2b2lkICphZGRyLCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgsIHVpbnQ4X3Qg
dG9zLCB1aW50OF90IHNldF9kZiksCisgICAgICAgICAgICAgICB2b2lkICgqKShjb25zdCBjaGFy
ICosIC4uLiksIGludCBzdGFydF90aHJlYWRzKTsKKyNlbGlmIGRlZmluZWQoX19BUFBMRV9fKSAm
JiAoIWRlZmluZWQoQVBQTEVfTEVPUEFSRCkgJiYgIWRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQp
ICYmIWRlZmluZWQoQVBQTEVfTElPTikgJiYgIWRlZmluZWQoQVBQTEVfTU9VTlRBSU5MSU9OKSkK
K3ZvaWQgc2N0cF9pbml0KHN0cnVjdCBwcm90b3N3ICpwcCwgc3RydWN0IGRvbWFpbiAqZHApOwor
I2Vsc2UKK3ZvaWQgc2N0cF9pbml0KHZvaWQpOwordm9pZCBzY3RwX25vdGlmeShzdHJ1Y3Qgc2N0
cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfbmV0cyAqLAorICAgIHVp
bnQ4X3QsIHVpbnQ4X3QsIHVpbnQxNl90LCB1aW50MzJfdCk7CisjZW5kaWYKKyNpZiAhZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK3ZvaWQgc2N0cF9maW5p
c2godm9pZCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9X
SU4zMikgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQoraW50IHNjdHBfZmx1c2goc3RydWN0IHNv
Y2tldCAqLCBpbnQpOworI2VuZGlmCitpbnQgc2N0cF9zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICop
OworaW50IHNjdHBfYmluZHgoc3RydWN0IHNvY2tldCAqLCBpbnQsIHN0cnVjdCBzb2NrYWRkcl9z
dG9yYWdlICosCisJaW50LCBpbnQsIHN0cnVjdCBwcm9jICopOworLyogY2FuJ3QgdXNlIHNjdHBf
YXNzb2NfdCBoZXJlICovCitpbnQgc2N0cF9wZWVsb2ZmKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0
IHNvY2tldCAqLCBpbnQsIGNhZGRyX3QsIGludCAqKTsKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQoraW50IHNjdHBfaW5nZXRhZGRyKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2thZGRy
ICoqKTsKKyNlbHNlCitpbnQgc2N0cF9pbmdldGFkZHIoc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3Qg
bWJ1ZiAqKTsKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitpbnQgc2N0cF9w
ZWVyYWRkcihzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBzb2NrYWRkciAqKik7CisjZWxzZQoraW50
IHNjdHBfcGVlcmFkZHIoc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3QgbWJ1ZiAqKTsKKyNlbmRpZgor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitpbnQg
c2N0cF9saXN0ZW4oc3RydWN0IHNvY2tldCAqLCBpbnQsIHN0cnVjdCB0aHJlYWQgKik7CisjZWxp
ZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK2ludCBzY3RwX2xp
c3RlbihzdHJ1Y3Qgc29ja2V0ICosIGludCwgUEtUSFJFQUQpOworI2VsaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQoraW50IHNjdHBfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKiwgaW50LCBzdHJ1Y3Qg
cHJvYyAqKTsKKyNlbHNlCitpbnQgc2N0cF9saXN0ZW4oc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3Qg
cHJvYyAqKTsKKyNlbmRpZgoraW50IHNjdHBfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0
IHNvY2thZGRyICoqKTsKKworI2VuZGlmIC8qIF9LRVJORUwgKi8KKworI2VuZGlmIC8qICFfTkVU
SU5FVF9TQ1RQX1ZBUl9IXyAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRp
bmV0L3NjdHB1dGlsLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cHV0aWwuYwpu
ZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAuLjYzOWIzNmYzMDc5NQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwdXRpbC5jCkBA
IC0wLDAgKzEsODY2MSBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMt
Q2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDgsIGJ5IENpc2NvIFN5c3RlbXMs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBi
eSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMp
IDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp
Y2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKyNlbmRpZgor
CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Bj
Yi5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cHV0aWwuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3Nj
dHBfdmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5oPgorI2lmZGVmIElORVQ2
CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKQorI2lu
Y2x1ZGUgPG5ldGluZXQ2L3NjdHA2X3Zhci5oPgorI2VuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfaGVhZGVyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX291dHB1dC5oPgor
I2luY2x1ZGUgPG5ldGluZXQvc2N0cF91aW8uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdGlt
ZXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaW5kYXRhLmg+CisjaW5jbHVkZSA8bmV0aW5l
dC9zY3RwX2F1dGguaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYXNjb25mLmg+CisjaW5jbHVk
ZSA8bmV0aW5ldC9zY3RwX2JzZF9hZGRyLmg+CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
I2luY2x1ZGUgPG5ldGluZXQvc2N0cF9jb25zdGFudHMuaD4KKyNlbmRpZgorI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaW5jbHVkZSA8bmV0aW5l
dC9zY3RwX2tkdHJhY2UuaD4KKyNpZiBkZWZpbmVkKElORVQ2KSB8fCBkZWZpbmVkKElORVQpCisj
aW5jbHVkZSA8bmV0aW5ldC90Y3BfdmFyLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxuZXRpbmV0L3Vk
cC5oPgorI2luY2x1ZGUgPG5ldGluZXQvdWRwX3Zhci5oPgorI2luY2x1ZGUgPHN5cy9wcm9jLmg+
CisjaWZkZWYgSU5FVDYKKyNpbmNsdWRlIDxuZXRpbmV0L2ljbXA2Lmg+CisjZW5kaWYKKyNlbmRp
ZgorCisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYg
IWRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCisjaW5jbHVkZSAiZXZlbnRyYWNlX25ldGlu
ZXQuaCIKKyNpbmNsdWRlICJzY3RwdXRpbC50bWgiIC8qIHRoaXMgaXMgdGhlIGZpbGUgdGhhdCB3
aWxsIGJlIGF1dG8gZ2VuZXJhdGVkICovCisjZW5kaWYKKyNlbHNlCisjaWZuZGVmIEtUUl9TQ1RQ
CisjZGVmaW5lIEtUUl9TQ1RQIEtUUl9TVUJTWVMKKyNlbmRpZgorI2VuZGlmCisKK2V4dGVybiBj
b25zdCBzdHJ1Y3Qgc2N0cF9jY19mdW5jdGlvbnMgc2N0cF9jY19mdW5jdGlvbnNbXTsKK2V4dGVy
biBjb25zdCBzdHJ1Y3Qgc2N0cF9zc19mdW5jdGlvbnMgc2N0cF9zc19mdW5jdGlvbnNbXTsKKwor
dm9pZAorc2N0cF9zYmxvZyhzdHJ1Y3Qgc29ja2J1ZiAqc2IsIHN0cnVjdCBzY3RwX3RjYiAqc3Rj
YiwgaW50IGZyb20sIGludCBpbmNyKQoreworI2lmIGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9C
VUYpCisJc3RydWN0IHNjdHBfY3duZF9sb2cgc2N0cF9jbG9nOworCisJc2N0cF9jbG9nLnguc2Iu
c3RjYiA9IHN0Y2I7CisJc2N0cF9jbG9nLnguc2Iuc29fc2JjYyA9IHNiLT5zYl9jYzsKKwlpZiAo
c3RjYikKKwkJc2N0cF9jbG9nLnguc2Iuc3RjYl9zYmNjID0gc3RjYi0+YXNvYy5zYl9jYzsKKwll
bHNlCisJCXNjdHBfY2xvZy54LnNiLnN0Y2Jfc2JjYyA9IDA7CisJc2N0cF9jbG9nLnguc2IuaW5j
ciA9IGluY3I7CisJU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgi
LAorCSAgICAgU0NUUF9MT0dfRVZFTlRfU0IsCisJICAgICBmcm9tLAorCSAgICAgc2N0cF9jbG9n
LngubWlzYy5sb2cxLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cyLAorCSAgICAgc2N0cF9j
bG9nLngubWlzYy5sb2czLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2c0KTsKKyNlbmRpZgor
fQorCit2b2lkCitzY3RwX2xvZ19jbG9zaW5nKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwgaW50MTZfdCBsb2MpCit7CisjaWYgZGVmaW5lZChTQ1RQX0xPQ0FM
X1RSQUNFX0JVRikKKwlzdHJ1Y3Qgc2N0cF9jd25kX2xvZyBzY3RwX2Nsb2c7CisKKwlzY3RwX2Ns
b2cueC5jbG9zZS5pbnAgPSAodm9pZCAqKWlucDsKKwlzY3RwX2Nsb2cueC5jbG9zZS5zY3RwX2Zs
YWdzID0gaW5wLT5zY3RwX2ZsYWdzOworCWlmIChzdGNiKSB7CisJCXNjdHBfY2xvZy54LmNsb3Nl
LnN0Y2IgPSAodm9pZCAqKXN0Y2I7CisJCXNjdHBfY2xvZy54LmNsb3NlLnN0YXRlID0gKHVpbnQx
Nl90KXN0Y2ItPmFzb2Muc3RhdGU7CisJfSBlbHNlIHsKKwkJc2N0cF9jbG9nLnguY2xvc2Uuc3Rj
YiA9IDA7CisJCXNjdHBfY2xvZy54LmNsb3NlLnN0YXRlID0gMDsKKwl9CisJc2N0cF9jbG9nLngu
Y2xvc2UubG9jID0gbG9jOworCVNDVFBfQ1RSNihLVFJfU0NUUCwgIlNDVFA6JWRbJWRdOiV4LSV4
LSV4LSV4IiwKKwkgICAgIFNDVFBfTE9HX0VWRU5UX0NMT1NFLAorCSAgICAgMCwKKwkgICAgIHNj
dHBfY2xvZy54Lm1pc2MubG9nMSwKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMiwKKwkgICAg
IHNjdHBfY2xvZy54Lm1pc2MubG9nMywKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nNCk7Cisj
ZW5kaWYKK30KKwordm9pZAorcnRvX2xvZ2dpbmcoc3RydWN0IHNjdHBfbmV0cyAqbmV0LCBpbnQg
ZnJvbSkKK3sKKyNpZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQorCXN0cnVjdCBzY3Rw
X2N3bmRfbG9nIHNjdHBfY2xvZzsKKworCW1lbXNldCgmc2N0cF9jbG9nLCAwLCBzaXplb2Yoc2N0
cF9jbG9nKSk7CisJc2N0cF9jbG9nLngucnRvLm5ldCA9ICh2b2lkICopIG5ldDsKKwlzY3RwX2Ns
b2cueC5ydG8ucnR0ID0gbmV0LT5ydHQgLyAxMDAwOworCVNDVFBfQ1RSNihLVFJfU0NUUCwgIlND
VFA6JWRbJWRdOiV4LSV4LSV4LSV4IiwKKwkgICAgIFNDVFBfTE9HX0VWRU5UX1JUVCwKKwkgICAg
IGZyb20sCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzEsCisJICAgICBzY3RwX2Nsb2cueC5t
aXNjLmxvZzIsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzMsCisJICAgICBzY3RwX2Nsb2cu
eC5taXNjLmxvZzQpOworI2VuZGlmCit9CisKK3ZvaWQKK3NjdHBfbG9nX3N0cm1fZGVsX2FsdChz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQzMl90IHRzbiwgdWludDE2X3Qgc3NlcSwgdWludDE2
X3Qgc3RyZWFtLCBpbnQgZnJvbSkKK3sKKyNpZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVG
KQorCXN0cnVjdCBzY3RwX2N3bmRfbG9nIHNjdHBfY2xvZzsKKworCXNjdHBfY2xvZy54LnN0cmxv
Zy5zdGNiID0gc3RjYjsKKwlzY3RwX2Nsb2cueC5zdHJsb2cubl90c24gPSB0c247CisJc2N0cF9j
bG9nLnguc3RybG9nLm5fc3NlcSA9IHNzZXE7CisJc2N0cF9jbG9nLnguc3RybG9nLmVfdHNuID0g
MDsKKwlzY3RwX2Nsb2cueC5zdHJsb2cuZV9zc2VxID0gMDsKKwlzY3RwX2Nsb2cueC5zdHJsb2cu
c3RybSA9IHN0cmVhbTsKKwlTQ1RQX0NUUjYoS1RSX1NDVFAsICJTQ1RQOiVkWyVkXToleC0leC0l
eC0leCIsCisJICAgICBTQ1RQX0xPR19FVkVOVF9TVFJNLAorCSAgICAgZnJvbSwKKwkgICAgIHNj
dHBfY2xvZy54Lm1pc2MubG9nMSwKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMiwKKwkgICAg
IHNjdHBfY2xvZy54Lm1pc2MubG9nMywKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nNCk7Cisj
ZW5kaWYKK30KKwordm9pZAorc2N0cF9sb2dfbmFnbGVfZXZlbnQoc3RydWN0IHNjdHBfdGNiICpz
dGNiLCBpbnQgYWN0aW9uKQoreworI2lmIGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCisJ
c3RydWN0IHNjdHBfY3duZF9sb2cgc2N0cF9jbG9nOworCisJc2N0cF9jbG9nLngubmFnbGUuc3Rj
YiA9ICh2b2lkICopc3RjYjsKKwlzY3RwX2Nsb2cueC5uYWdsZS50b3RhbF9mbGlnaHQgPSBzdGNi
LT5hc29jLnRvdGFsX2ZsaWdodDsKKwlzY3RwX2Nsb2cueC5uYWdsZS50b3RhbF9pbl9xdWV1ZSA9
IHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemU7CisJc2N0cF9jbG9nLngubmFnbGUu
Y291bnRfaW5fcXVldWUgPSBzdGNiLT5hc29jLmNodW5rc19vbl9vdXRfcXVldWU7CisJc2N0cF9j
bG9nLngubmFnbGUuY291bnRfaW5fZmxpZ2h0ID0gc3RjYi0+YXNvYy50b3RhbF9mbGlnaHRfY291
bnQ7CisJU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLAorCSAg
ICAgU0NUUF9MT0dfRVZFTlRfTkFHTEUsCisJICAgICBhY3Rpb24sCisJICAgICBzY3RwX2Nsb2cu
eC5taXNjLmxvZzEsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIsCisJICAgICBzY3RwX2Ns
b2cueC5taXNjLmxvZzMsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzQpOworI2VuZGlmCit9
CisKK3ZvaWQKK3NjdHBfbG9nX3NhY2sodWludDMyX3Qgb2xkX2N1bWFjaywgdWludDMyX3QgY3Vt
YWNrLCB1aW50MzJfdCB0c24sIHVpbnQxNl90IGdhcHMsIHVpbnQxNl90IGR1cHMsIGludCBmcm9t
KQoreworI2lmIGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCisJc3RydWN0IHNjdHBfY3du
ZF9sb2cgc2N0cF9jbG9nOworCisJc2N0cF9jbG9nLnguc2Fjay5jdW1hY2sgPSBjdW1hY2s7CisJ
c2N0cF9jbG9nLnguc2Fjay5vbGRjdW1hY2sgPSBvbGRfY3VtYWNrOworCXNjdHBfY2xvZy54LnNh
Y2sudHNuID0gdHNuOworCXNjdHBfY2xvZy54LnNhY2subnVtR2FwcyA9IGdhcHM7CisJc2N0cF9j
bG9nLnguc2Fjay5udW1EdXBzID0gZHVwczsKKwlTQ1RQX0NUUjYoS1RSX1NDVFAsICJTQ1RQOiVk
WyVkXToleC0leC0leC0leCIsCisJICAgICBTQ1RQX0xPR19FVkVOVF9TQUNLLAorCSAgICAgZnJv
bSwKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMSwKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2Mu
bG9nMiwKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMywKKwkgICAgIHNjdHBfY2xvZy54Lm1p
c2MubG9nNCk7CisjZW5kaWYKK30KKwordm9pZAorc2N0cF9sb2dfbWFwKHVpbnQzMl90IG1hcCwg
dWludDMyX3QgY3VtLCB1aW50MzJfdCBoaWdoLCBpbnQgZnJvbSkKK3sKKyNpZiBkZWZpbmVkKFND
VFBfTE9DQUxfVFJBQ0VfQlVGKQorCXN0cnVjdCBzY3RwX2N3bmRfbG9nIHNjdHBfY2xvZzsKKwor
CW1lbXNldCgmc2N0cF9jbG9nLCAwLCBzaXplb2Yoc2N0cF9jbG9nKSk7CisJc2N0cF9jbG9nLngu
bWFwLmJhc2UgPSBtYXA7CisJc2N0cF9jbG9nLngubWFwLmN1bSA9IGN1bTsKKwlzY3RwX2Nsb2cu
eC5tYXAuaGlnaCA9IGhpZ2g7CisJU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgt
JXgtJXgtJXgiLAorCSAgICAgU0NUUF9MT0dfRVZFTlRfTUFQLAorCSAgICAgZnJvbSwKKwkgICAg
IHNjdHBfY2xvZy54Lm1pc2MubG9nMSwKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMiwKKwkg
ICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMywKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nNCk7
CisjZW5kaWYKK30KKwordm9pZAorc2N0cF9sb2dfZnIodWludDMyX3QgYmlnZ2VzdF90c24sIHVp
bnQzMl90IGJpZ2dlc3RfbmV3X3RzbiwgdWludDMyX3QgdHNuLCBpbnQgZnJvbSkKK3sKKyNpZiBk
ZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQorCXN0cnVjdCBzY3RwX2N3bmRfbG9nIHNjdHBf
Y2xvZzsKKworCW1lbXNldCgmc2N0cF9jbG9nLCAwLCBzaXplb2Yoc2N0cF9jbG9nKSk7CisJc2N0
cF9jbG9nLnguZnIubGFyZ2VzdF90c24gPSBiaWdnZXN0X3RzbjsKKwlzY3RwX2Nsb2cueC5mci5s
YXJnZXN0X25ld190c24gPSBiaWdnZXN0X25ld190c247CisJc2N0cF9jbG9nLnguZnIudHNuID0g
dHNuOworCVNDVFBfQ1RSNihLVFJfU0NUUCwgIlNDVFA6JWRbJWRdOiV4LSV4LSV4LSV4IiwKKwkg
ICAgIFNDVFBfTE9HX0VWRU5UX0ZSLAorCSAgICAgZnJvbSwKKwkgICAgIHNjdHBfY2xvZy54Lm1p
c2MubG9nMSwKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMiwKKwkgICAgIHNjdHBfY2xvZy54
Lm1pc2MubG9nMywKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nNCk7CisjZW5kaWYKK30KKwor
I2lmZGVmIFNDVFBfTUJVRl9MT0dHSU5HCit2b2lkCitzY3RwX2xvZ19tYihzdHJ1Y3QgbWJ1ZiAq
bSwgaW50IGZyb20pCit7CisjaWYgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKKwlzdHJ1
Y3Qgc2N0cF9jd25kX2xvZyBzY3RwX2Nsb2c7CisKKwlzY3RwX2Nsb2cueC5tYi5tcCA9IG07CisJ
c2N0cF9jbG9nLngubWIubWJ1Zl9mbGFncyA9ICh1aW50OF90KShTQ1RQX0JVRl9HRVRfRkxBR1Mo
bSkpOworCXNjdHBfY2xvZy54Lm1iLnNpemUgPSAodWludDE2X3QpKFNDVFBfQlVGX0xFTihtKSk7
CisJc2N0cF9jbG9nLngubWIuZGF0YSA9IFNDVFBfQlVGX0FUKG0sIDApOworCWlmIChTQ1RQX0JV
Rl9JU19FWFRFTkRFRChtKSkgeworCQlzY3RwX2Nsb2cueC5tYi5leHQgPSBTQ1RQX0JVRl9FWFRF
TkRfQkFTRShtKTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKKwkJLyogQVBQTEUgZG9lcyBub3QgdXNlIGEgcmVmX2NudCwgYnV0IGEgZm9yd2FyZC9i
YWNrd2FyZCByZWYgcXVldWUgKi8KKyNlbHNlCisJCXNjdHBfY2xvZy54Lm1iLnJlZmNudCA9ICh1
aW50OF90KShTQ1RQX0JVRl9FWFRFTkRfUkVGQ05UKG0pKTsKKyNlbmRpZgorCX0gZWxzZSB7CisJ
CXNjdHBfY2xvZy54Lm1iLmV4dCA9IDA7CisJCXNjdHBfY2xvZy54Lm1iLnJlZmNudCA9IDA7CisJ
fQorCVNDVFBfQ1RSNihLVFJfU0NUUCwgIlNDVFA6JWRbJWRdOiV4LSV4LSV4LSV4IiwKKwkgICAg
IFNDVFBfTE9HX0VWRU5UX01CVUYsCisJICAgICBmcm9tLAorCSAgICAgc2N0cF9jbG9nLngubWlz
Yy5sb2cxLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cyLAorCSAgICAgc2N0cF9jbG9nLngu
bWlzYy5sb2czLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2c0KTsKKyNlbmRpZgorfQorCit2
b2lkCitzY3RwX2xvZ19tYmMoc3RydWN0IG1idWYgKm0sIGludCBmcm9tKQoreworCXN0cnVjdCBt
YnVmICptYXQ7CisKKwlmb3IgKG1hdCA9IG07IG1hdDsgbWF0ID0gU0NUUF9CVUZfTkVYVChtYXQp
KSB7CisJCXNjdHBfbG9nX21iKG1hdCwgZnJvbSk7CisJfQorfQorI2VuZGlmCisKK3ZvaWQKK3Nj
dHBfbG9nX3N0cm1fZGVsKHN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sLCBzdHJ1
Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqcG9zY2hrLCBpbnQgZnJvbSkKK3sKKyNpZiBkZWZpbmVk
KFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQorCXN0cnVjdCBzY3RwX2N3bmRfbG9nIHNjdHBfY2xvZzsK
KworCWlmIChjb250cm9sID09IE5VTEwpIHsKKwkJU0NUUF9QUklOVEYoIkdhayBsb2cgb2YgTlVM
TD9cbiIpOworCQlyZXR1cm47CisJfQorCXNjdHBfY2xvZy54LnN0cmxvZy5zdGNiID0gY29udHJv
bC0+c3RjYjsKKwlzY3RwX2Nsb2cueC5zdHJsb2cubl90c24gPSBjb250cm9sLT5zaW5mb190c247
CisJc2N0cF9jbG9nLnguc3RybG9nLm5fc3NlcSA9ICh1aW50MTZfdCljb250cm9sLT5taWQ7CisJ
c2N0cF9jbG9nLnguc3RybG9nLnN0cm0gPSBjb250cm9sLT5zaW5mb19zdHJlYW07CisJaWYgKHBv
c2NoayAhPSBOVUxMKSB7CisJCXNjdHBfY2xvZy54LnN0cmxvZy5lX3RzbiA9IHBvc2Noay0+c2lu
Zm9fdHNuOworCQlzY3RwX2Nsb2cueC5zdHJsb2cuZV9zc2VxID0gKHVpbnQxNl90KXBvc2Noay0+
bWlkOworCX0gZWxzZSB7CisJCXNjdHBfY2xvZy54LnN0cmxvZy5lX3RzbiA9IDA7CisJCXNjdHBf
Y2xvZy54LnN0cmxvZy5lX3NzZXEgPSAwOworCX0KKwlTQ1RQX0NUUjYoS1RSX1NDVFAsICJTQ1RQ
OiVkWyVkXToleC0leC0leC0leCIsCisJICAgICBTQ1RQX0xPR19FVkVOVF9TVFJNLAorCSAgICAg
ZnJvbSwKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMSwKKwkgICAgIHNjdHBfY2xvZy54Lm1p
c2MubG9nMiwKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMywKKwkgICAgIHNjdHBfY2xvZy54
Lm1pc2MubG9nNCk7CisjZW5kaWYKK30KKwordm9pZAorc2N0cF9sb2dfY3duZChzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgaW50IGF1Z21lbnQsIHVpbnQ4X3Qg
ZnJvbSkKK3sKKyNpZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQorCXN0cnVjdCBzY3Rw
X2N3bmRfbG9nIHNjdHBfY2xvZzsKKworCXNjdHBfY2xvZy54LmN3bmQubmV0ID0gbmV0OworCWlm
IChzdGNiLT5hc29jLnNlbmRfcXVldWVfY250ID4gMjU1KQorCQlzY3RwX2Nsb2cueC5jd25kLmNu
dF9pbl9zZW5kID0gMjU1OworCWVsc2UKKwkJc2N0cF9jbG9nLnguY3duZC5jbnRfaW5fc2VuZCA9
IHN0Y2ItPmFzb2Muc2VuZF9xdWV1ZV9jbnQ7CisJaWYgKHN0Y2ItPmFzb2Muc3RyZWFtX3F1ZXVl
X2NudCA+IDI1NSkKKwkJc2N0cF9jbG9nLnguY3duZC5jbnRfaW5fc3RyID0gMjU1OworCWVsc2UK
KwkJc2N0cF9jbG9nLnguY3duZC5jbnRfaW5fc3RyID0gc3RjYi0+YXNvYy5zdHJlYW1fcXVldWVf
Y250OworCisJaWYgKG5ldCkgeworCQlzY3RwX2Nsb2cueC5jd25kLmN3bmRfbmV3X3ZhbHVlID0g
bmV0LT5jd25kOworCQlzY3RwX2Nsb2cueC5jd25kLmluZmxpZ2h0ID0gbmV0LT5mbGlnaHRfc2l6
ZTsKKwkJc2N0cF9jbG9nLnguY3duZC5wc2V1ZG9fY3VtYWNrID0gbmV0LT5wc2V1ZG9fY3VtYWNr
OworCQlzY3RwX2Nsb2cueC5jd25kLm1lZXRzX3BzZXVkb19jdW1hY2sgPSBuZXQtPm5ld19wc2V1
ZG9fY3VtYWNrOworCQlzY3RwX2Nsb2cueC5jd25kLm5lZWRfbmV3X3BzZXVkb19jdW1hY2sgPSBu
ZXQtPmZpbmRfcHNldWRvX2N1bWFjazsKKwl9CisJaWYgKFNDVFBfQ1dORExPR19QUkVTRU5EID09
IGZyb20pIHsKKwkJc2N0cF9jbG9nLnguY3duZC5tZWV0c19wc2V1ZG9fY3VtYWNrID0gc3RjYi0+
YXNvYy5wZWVyc19yd25kOworCX0KKwlzY3RwX2Nsb2cueC5jd25kLmN3bmRfYXVnbWVudCA9IGF1
Z21lbnQ7CisJU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLAor
CSAgICAgU0NUUF9MT0dfRVZFTlRfQ1dORCwKKwkgICAgIGZyb20sCisJICAgICBzY3RwX2Nsb2cu
eC5taXNjLmxvZzEsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIsCisJICAgICBzY3RwX2Ns
b2cueC5taXNjLmxvZzMsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzQpOworI2VuZGlmCit9
CisKKyNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCit2
b2lkCitzY3RwX2xvZ19sb2NrKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwgdWludDhfdCBmcm9tKQoreworI2lmIGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9C
VUYpCisJc3RydWN0IHNjdHBfY3duZF9sb2cgc2N0cF9jbG9nOworCisJbWVtc2V0KCZzY3RwX2Ns
b2csIDAsIHNpemVvZihzY3RwX2Nsb2cpKTsKKwlpZiAoaW5wKSB7CisJCXNjdHBfY2xvZy54Lmxv
Y2suc29jayA9ICh2b2lkICopIGlucC0+c2N0cF9zb2NrZXQ7CisKKwl9IGVsc2UgeworCQlzY3Rw
X2Nsb2cueC5sb2NrLnNvY2sgPSAodm9pZCAqKSBOVUxMOworCX0KKwlzY3RwX2Nsb2cueC5sb2Nr
LmlucCA9ICh2b2lkICopIGlucDsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCWlmIChzdGNi
KSB7CisJCXNjdHBfY2xvZy54LmxvY2sudGNiX2xvY2sgPSBtdHhfb3duZWQoJnN0Y2ItPnRjYl9t
dHgpOworCX0gZWxzZSB7CisJCXNjdHBfY2xvZy54LmxvY2sudGNiX2xvY2sgPSBTQ1RQX0xPQ0tf
VU5LTk9XTjsKKwl9CisJaWYgKGlucCkgeworCQlzY3RwX2Nsb2cueC5sb2NrLmlucF9sb2NrID0g
bXR4X293bmVkKCZpbnAtPmlucF9tdHgpOworCQlzY3RwX2Nsb2cueC5sb2NrLmNyZWF0ZV9sb2Nr
ID0gbXR4X293bmVkKCZpbnAtPmlucF9jcmVhdGVfbXR4KTsKKwl9IGVsc2UgeworCQlzY3RwX2Ns
b2cueC5sb2NrLmlucF9sb2NrID0gU0NUUF9MT0NLX1VOS05PV047CisJCXNjdHBfY2xvZy54Lmxv
Y2suY3JlYXRlX2xvY2sgPSBTQ1RQX0xPQ0tfVU5LTk9XTjsKKwl9CisJc2N0cF9jbG9nLngubG9j
ay5pbmZvX2xvY2sgPSByd193b3duZWQoJlNDVFBfQkFTRV9JTkZPKGlwaV9lcF9tdHgpKTsKKwlp
ZiAoaW5wICYmIChpbnAtPnNjdHBfc29ja2V0KSkgeworCQlzY3RwX2Nsb2cueC5sb2NrLnNvY2tf
bG9jayA9IG10eF9vd25lZCgmKGlucC0+c2N0cF9zb2NrZXQtPnNvX3Jjdi5zYl9tdHgpKTsKKwkJ
c2N0cF9jbG9nLngubG9jay5zb2NrcmN2YnVmX2xvY2sgPSBtdHhfb3duZWQoJihpbnAtPnNjdHBf
c29ja2V0LT5zb19yY3Yuc2JfbXR4KSk7CisJCXNjdHBfY2xvZy54LmxvY2suc29ja3NuZGJ1Zl9s
b2NrID0gbXR4X293bmVkKCYoaW5wLT5zY3RwX3NvY2tldC0+c29fc25kLnNiX210eCkpOworCX0g
ZWxzZSB7CisJCXNjdHBfY2xvZy54LmxvY2suc29ja19sb2NrID0gU0NUUF9MT0NLX1VOS05PV047
CisJCXNjdHBfY2xvZy54LmxvY2suc29ja3JjdmJ1Zl9sb2NrID0gU0NUUF9MT0NLX1VOS05PV047
CisJCXNjdHBfY2xvZy54LmxvY2suc29ja3NuZGJ1Zl9sb2NrID0gU0NUUF9MT0NLX1VOS05PV047
CisJfQorI2VuZGlmCisJU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgt
JXgiLAorCSAgICAgU0NUUF9MT0dfTE9DS19FVkVOVCwKKwkgICAgIGZyb20sCisJICAgICBzY3Rw
X2Nsb2cueC5taXNjLmxvZzEsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIsCisJICAgICBz
Y3RwX2Nsb2cueC5taXNjLmxvZzMsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzQpOworI2Vu
ZGlmCit9CisjZW5kaWYKKwordm9pZAorc2N0cF9sb2dfbWF4YnVyc3Qoc3RydWN0IHNjdHBfdGNi
ICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIGludCBlcnJvciwgaW50IGJ1cnN0LCB1aW50
OF90IGZyb20pCit7CisjaWYgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKKwlzdHJ1Y3Qg
c2N0cF9jd25kX2xvZyBzY3RwX2Nsb2c7CisKKwltZW1zZXQoJnNjdHBfY2xvZywgMCwgc2l6ZW9m
KHNjdHBfY2xvZykpOworCXNjdHBfY2xvZy54LmN3bmQubmV0ID0gbmV0OworCXNjdHBfY2xvZy54
LmN3bmQuY3duZF9uZXdfdmFsdWUgPSBlcnJvcjsKKwlzY3RwX2Nsb2cueC5jd25kLmluZmxpZ2h0
ID0gbmV0LT5mbGlnaHRfc2l6ZTsKKwlzY3RwX2Nsb2cueC5jd25kLmN3bmRfYXVnbWVudCA9IGJ1
cnN0OworCWlmIChzdGNiLT5hc29jLnNlbmRfcXVldWVfY250ID4gMjU1KQorCQlzY3RwX2Nsb2cu
eC5jd25kLmNudF9pbl9zZW5kID0gMjU1OworCWVsc2UKKwkJc2N0cF9jbG9nLnguY3duZC5jbnRf
aW5fc2VuZCA9IHN0Y2ItPmFzb2Muc2VuZF9xdWV1ZV9jbnQ7CisJaWYgKHN0Y2ItPmFzb2Muc3Ry
ZWFtX3F1ZXVlX2NudCA+IDI1NSkKKwkJc2N0cF9jbG9nLnguY3duZC5jbnRfaW5fc3RyID0gMjU1
OworCWVsc2UKKwkJc2N0cF9jbG9nLnguY3duZC5jbnRfaW5fc3RyID0gc3RjYi0+YXNvYy5zdHJl
YW1fcXVldWVfY250OworCVNDVFBfQ1RSNihLVFJfU0NUUCwgIlNDVFA6JWRbJWRdOiV4LSV4LSV4
LSV4IiwKKwkgICAgIFNDVFBfTE9HX0VWRU5UX01BWEJVUlNULAorCSAgICAgZnJvbSwKKwkgICAg
IHNjdHBfY2xvZy54Lm1pc2MubG9nMSwKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMiwKKwkg
ICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMywKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nNCk7
CisjZW5kaWYKK30KKwordm9pZAorc2N0cF9sb2dfcnduZCh1aW50OF90IGZyb20sIHVpbnQzMl90
IHBlZXJzX3J3bmQsIHVpbnQzMl90IHNuZF9zaXplLCB1aW50MzJfdCBvdmVyaGVhZCkKK3sKKyNp
ZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQorCXN0cnVjdCBzY3RwX2N3bmRfbG9nIHNj
dHBfY2xvZzsKKworCXNjdHBfY2xvZy54LnJ3bmQucnduZCA9IHBlZXJzX3J3bmQ7CisJc2N0cF9j
bG9nLngucnduZC5zZW5kX3NpemUgPSBzbmRfc2l6ZTsKKwlzY3RwX2Nsb2cueC5yd25kLm92ZXJo
ZWFkID0gb3ZlcmhlYWQ7CisJc2N0cF9jbG9nLngucnduZC5uZXdfcnduZCA9IDA7CisJU0NUUF9D
VFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLAorCSAgICAgU0NUUF9MT0df
RVZFTlRfUldORCwKKwkgICAgIGZyb20sCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzEsCisJ
ICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzMs
CisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzQpOworI2VuZGlmCit9CisKK3ZvaWQKK3NjdHBf
bG9nX3J3bmRfc2V0KHVpbnQ4X3QgZnJvbSwgdWludDMyX3QgcGVlcnNfcnduZCwgdWludDMyX3Qg
ZmxpZ2h0X3NpemUsIHVpbnQzMl90IG92ZXJoZWFkLCB1aW50MzJfdCBhX3J3bmR2YWwpCit7Cisj
aWYgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKKwlzdHJ1Y3Qgc2N0cF9jd25kX2xvZyBz
Y3RwX2Nsb2c7CisKKwlzY3RwX2Nsb2cueC5yd25kLnJ3bmQgPSBwZWVyc19yd25kOworCXNjdHBf
Y2xvZy54LnJ3bmQuc2VuZF9zaXplID0gZmxpZ2h0X3NpemU7CisJc2N0cF9jbG9nLngucnduZC5v
dmVyaGVhZCA9IG92ZXJoZWFkOworCXNjdHBfY2xvZy54LnJ3bmQubmV3X3J3bmQgPSBhX3J3bmR2
YWw7CisJU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLAorCSAg
ICAgU0NUUF9MT0dfRVZFTlRfUldORCwKKwkgICAgIGZyb20sCisJICAgICBzY3RwX2Nsb2cueC5t
aXNjLmxvZzEsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIsCisJICAgICBzY3RwX2Nsb2cu
eC5taXNjLmxvZzMsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzQpOworI2VuZGlmCit9CisK
KyNpZmRlZiBTQ1RQX01CQ05UX0xPR0dJTkcKK3N0YXRpYyB2b2lkCitzY3RwX2xvZ19tYmNudCh1
aW50OF90IGZyb20sIHVpbnQzMl90IHRvdGFsX29xLCB1aW50MzJfdCBib29rLCB1aW50MzJfdCB0
b3RhbF9tYmNudF9xLCB1aW50MzJfdCBtYmNudCkKK3sKKyNpZiBkZWZpbmVkKFNDVFBfTE9DQUxf
VFJBQ0VfQlVGKQorCXN0cnVjdCBzY3RwX2N3bmRfbG9nIHNjdHBfY2xvZzsKKworCXNjdHBfY2xv
Zy54Lm1iY250LnRvdGFsX3F1ZXVlX3NpemUgPSB0b3RhbF9vcTsKKwlzY3RwX2Nsb2cueC5tYmNu
dC5zaXplX2NoYW5nZSA9IGJvb2s7CisJc2N0cF9jbG9nLngubWJjbnQudG90YWxfcXVldWVfbWJf
c2l6ZSA9IHRvdGFsX21iY250X3E7CisJc2N0cF9jbG9nLngubWJjbnQubWJjbnRfY2hhbmdlID0g
bWJjbnQ7CisJU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLAor
CSAgICAgU0NUUF9MT0dfRVZFTlRfTUJDTlQsCisJICAgICBmcm9tLAorCSAgICAgc2N0cF9jbG9n
LngubWlzYy5sb2cxLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cyLAorCSAgICAgc2N0cF9j
bG9nLngubWlzYy5sb2czLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2c0KTsKKyNlbmRpZgor
fQorI2VuZGlmCisKK3ZvaWQKK3NjdHBfbWlzY19pbnRzKHVpbnQ4X3QgZnJvbSwgdWludDMyX3Qg
YSwgdWludDMyX3QgYiwgdWludDMyX3QgYywgdWludDMyX3QgZCkKK3sKKyNpZiBkZWZpbmVkKFND
VFBfTE9DQUxfVFJBQ0VfQlVGKQorCVNDVFBfQ1RSNihLVFJfU0NUUCwgIlNDVFA6JWRbJWRdOiV4
LSV4LSV4LSV4IiwKKwkgICAgIFNDVFBfTE9HX01JU0NfRVZFTlQsCisJICAgICBmcm9tLAorCSAg
ICAgYSwgYiwgYywgZCk7CisjZW5kaWYKK30KKwordm9pZAorc2N0cF93YWtldXBfbG9nKHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwgdWludDMyX3Qgd2FrZV9jbnQsIGludCBmcm9tKQoreworI2lmIGRl
ZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCisJc3RydWN0IHNjdHBfY3duZF9sb2cgc2N0cF9j
bG9nOworCisJc2N0cF9jbG9nLngud2FrZS5zdGNiID0gKHZvaWQgKilzdGNiOworCXNjdHBfY2xv
Zy54Lndha2Uud2FrZV9jbnQgPSB3YWtlX2NudDsKKwlzY3RwX2Nsb2cueC53YWtlLmZsaWdodCA9
IHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0X2NvdW50OworCXNjdHBfY2xvZy54Lndha2Uuc2VuZF9x
ID0gc3RjYi0+YXNvYy5zZW5kX3F1ZXVlX2NudDsKKwlzY3RwX2Nsb2cueC53YWtlLnNlbnRfcSA9
IHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9jbnQ7CisKKwlpZiAoc3RjYi0+YXNvYy5zdHJlYW1fcXVl
dWVfY250IDwgMHhmZikKKwkJc2N0cF9jbG9nLngud2FrZS5zdHJlYW1fcWNudCA9ICh1aW50OF90
KSBzdGNiLT5hc29jLnN0cmVhbV9xdWV1ZV9jbnQ7CisJZWxzZQorCQlzY3RwX2Nsb2cueC53YWtl
LnN0cmVhbV9xY250ID0gMHhmZjsKKworCWlmIChzdGNiLT5hc29jLmNodW5rc19vbl9vdXRfcXVl
dWUgPCAweGZmKQorCQlzY3RwX2Nsb2cueC53YWtlLmNodW5rc19vbl9vcXVlID0gKHVpbnQ4X3Qp
IHN0Y2ItPmFzb2MuY2h1bmtzX29uX291dF9xdWV1ZTsKKwllbHNlCisJCXNjdHBfY2xvZy54Lndh
a2UuY2h1bmtzX29uX29xdWUgPSAweGZmOworCisJc2N0cF9jbG9nLngud2FrZS5zY3RwZmxhZ3Mg
PSAwOworCS8qIHNldCBpbiB0aGUgZGVmZXJlZCBtb2RlIHN0dWZmICovCisJaWYgKHN0Y2ItPnNj
dHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19ET05UX1dBS0UpCisJCXNjdHBfY2xv
Zy54Lndha2Uuc2N0cGZsYWdzIHw9IDE7CisJaWYgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19XQUtFT1VUUFVUKQorCQlzY3RwX2Nsb2cueC53YWtlLnNjdHBmbGFn
cyB8PSAyOworCWlmIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
V0FLRUlOUFVUKQorCQlzY3RwX2Nsb2cueC53YWtlLnNjdHBmbGFncyB8PSA0OworCS8qIHdoYXQg
YWJvdXQgdGhlIHNiICovCisJaWYgKHN0Y2ItPnNjdHBfc29ja2V0KSB7CisJCXN0cnVjdCBzb2Nr
ZXQgKnNvID0gc3RjYi0+c2N0cF9zb2NrZXQ7CisKKwkJc2N0cF9jbG9nLngud2FrZS5zYmZsYWdz
ID0gKHVpbnQ4X3QpKChzby0+c29fc25kLnNiX2ZsYWdzICYgMHgwMGZmKSk7CisJfSBlbHNlIHsK
KwkJc2N0cF9jbG9nLngud2FrZS5zYmZsYWdzID0gMHhmZjsKKwl9CisJU0NUUF9DVFI2KEtUUl9T
Q1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLAorCSAgICAgU0NUUF9MT0dfRVZFTlRfV0FL
RSwKKwkgICAgIGZyb20sCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzEsCisJICAgICBzY3Rw
X2Nsb2cueC5taXNjLmxvZzIsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzMsCisJICAgICBz
Y3RwX2Nsb2cueC5taXNjLmxvZzQpOworI2VuZGlmCit9CisKK3ZvaWQKK3NjdHBfbG9nX2Jsb2Nr
KHVpbnQ4X3QgZnJvbSwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIHNzaXplX3Qgc2Vu
ZGxlbikKK3sKKyNpZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQorCXN0cnVjdCBzY3Rw
X2N3bmRfbG9nIHNjdHBfY2xvZzsKKworCXNjdHBfY2xvZy54LmJsay5vbnNiID0gYXNvYy0+dG90
YWxfb3V0cHV0X3F1ZXVlX3NpemU7CisJc2N0cF9jbG9nLnguYmxrLnNlbmRfc2VudF9xY250ID0g
KHVpbnQxNl90KSAoYXNvYy0+c2VuZF9xdWV1ZV9jbnQgKyBhc29jLT5zZW50X3F1ZXVlX2NudCk7
CisJc2N0cF9jbG9nLnguYmxrLnBlZXJfcnduZCA9IGFzb2MtPnBlZXJzX3J3bmQ7CisJc2N0cF9j
bG9nLnguYmxrLnN0cmVhbV9xY250ID0gKHVpbnQxNl90KSBhc29jLT5zdHJlYW1fcXVldWVfY250
OworCXNjdHBfY2xvZy54LmJsay5jaHVua3Nfb25fb3F1ZSA9ICh1aW50MTZfdCkgYXNvYy0+Y2h1
bmtzX29uX291dF9xdWV1ZTsKKwlzY3RwX2Nsb2cueC5ibGsuZmxpZ2h0X3NpemUgPSAodWludDE2
X3QpIChhc29jLT50b3RhbF9mbGlnaHQvMTAyNCk7CisJc2N0cF9jbG9nLnguYmxrLnNuZGxlbiA9
ICh1aW50MzJfdClzZW5kbGVuOworCVNDVFBfQ1RSNihLVFJfU0NUUCwgIlNDVFA6JWRbJWRdOiV4
LSV4LSV4LSV4IiwKKwkgICAgIFNDVFBfTE9HX0VWRU5UX0JMT0NLLAorCSAgICAgZnJvbSwKKwkg
ICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMSwKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMiwK
KwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMywKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9n
NCk7CisjZW5kaWYKK30KKworaW50CitzY3RwX2ZpbGxfc3RhdF9sb2codm9pZCAqb3B0dmFsIFND
VFBfVU5VU0VELCBzaXplX3QgKm9wdHNpemUgU0NUUF9VTlVTRUQpCit7CisJLyogTWF5IG5lZWQg
dG8gZml4IHRoaXMgaWYga3RyZHVtcCBkb2VzIG5vdCB3b3JrICovCisJcmV0dXJuICgwKTsKK30K
KworI2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAordWludDhfdCBzY3RwX2F1ZGl0X2RhdGFb
U0NUUF9BVURJVF9TSVpFXVsyXTsKK3N0YXRpYyBpbnQgc2N0cF9hdWRpdF9pbmR4ID0gMDsKKwor
c3RhdGljCit2b2lkCitzY3RwX3ByaW50X2F1ZGl0X3JlcG9ydCh2b2lkKQoreworCWludCBpOwor
CWludCBjbnQ7CisKKwljbnQgPSAwOworCWZvciAoaSA9IHNjdHBfYXVkaXRfaW5keDsgaSA8IFND
VFBfQVVESVRfU0laRTsgaSsrKSB7CisJCWlmICgoc2N0cF9hdWRpdF9kYXRhW2ldWzBdID09IDB4
ZTApICYmCisJCSAgICAoc2N0cF9hdWRpdF9kYXRhW2ldWzFdID09IDB4MDEpKSB7CisJCQljbnQg
PSAwOworCQkJU0NUUF9QUklOVEYoIlxuIik7CisJCX0gZWxzZSBpZiAoc2N0cF9hdWRpdF9kYXRh
W2ldWzBdID09IDB4ZjApIHsKKwkJCWNudCA9IDA7CisJCQlTQ1RQX1BSSU5URigiXG4iKTsKKwkJ
fSBlbHNlIGlmICgoc2N0cF9hdWRpdF9kYXRhW2ldWzBdID09IDB4YzApICYmCisJCSAgICAoc2N0
cF9hdWRpdF9kYXRhW2ldWzFdID09IDB4MDEpKSB7CisJCQlTQ1RQX1BSSU5URigiXG4iKTsKKwkJ
CWNudCA9IDA7CisJCX0KKwkJU0NUUF9QUklOVEYoIiUyLjJ4JTIuMnggIiwgKHVpbnQzMl90KSBz
Y3RwX2F1ZGl0X2RhdGFbaV1bMF0sCisJCQkgICAgKHVpbnQzMl90KSBzY3RwX2F1ZGl0X2RhdGFb
aV1bMV0pOworCQljbnQrKzsKKwkJaWYgKChjbnQgJSAxNCkgPT0gMCkKKwkJCVNDVFBfUFJJTlRG
KCJcbiIpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgc2N0cF9hdWRpdF9pbmR4OyBpKyspIHsKKwkJ
aWYgKChzY3RwX2F1ZGl0X2RhdGFbaV1bMF0gPT0gMHhlMCkgJiYKKwkJICAgIChzY3RwX2F1ZGl0
X2RhdGFbaV1bMV0gPT0gMHgwMSkpIHsKKwkJCWNudCA9IDA7CisJCQlTQ1RQX1BSSU5URigiXG4i
KTsKKwkJfSBlbHNlIGlmIChzY3RwX2F1ZGl0X2RhdGFbaV1bMF0gPT0gMHhmMCkgeworCQkJY250
ID0gMDsKKwkJCVNDVFBfUFJJTlRGKCJcbiIpOworCQl9IGVsc2UgaWYgKChzY3RwX2F1ZGl0X2Rh
dGFbaV1bMF0gPT0gMHhjMCkgJiYKKwkJICAgIChzY3RwX2F1ZGl0X2RhdGFbaV1bMV0gPT0gMHgw
MSkpIHsKKwkJCVNDVFBfUFJJTlRGKCJcbiIpOworCQkJY250ID0gMDsKKwkJfQorCQlTQ1RQX1BS
SU5URigiJTIuMnglMi4yeCAiLCAodWludDMyX3QpIHNjdHBfYXVkaXRfZGF0YVtpXVswXSwKKwkJ
CSAgICAodWludDMyX3QpIHNjdHBfYXVkaXRfZGF0YVtpXVsxXSk7CisJCWNudCsrOworCQlpZiAo
KGNudCAlIDE0KSA9PSAwKQorCQkJU0NUUF9QUklOVEYoIlxuIik7CisJfQorCVNDVFBfUFJJTlRG
KCJcbiIpOworfQorCit2b2lkCitzY3RwX2F1ZGl0aW5nKGludCBmcm9tLCBzdHJ1Y3Qgc2N0cF9p
bnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNjdHBfbmV0cyAq
bmV0KQoreworCWludCByZXNlbmRfY250LCB0b3Rfb3V0LCByZXAsIHRvdF9ib29rX2NudDsKKwlz
dHJ1Y3Qgc2N0cF9uZXRzICpsbmV0OworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKKwor
CXNjdHBfYXVkaXRfZGF0YVtzY3RwX2F1ZGl0X2luZHhdWzBdID0gMHhBQTsKKwlzY3RwX2F1ZGl0
X2RhdGFbc2N0cF9hdWRpdF9pbmR4XVsxXSA9IDB4MDAwMDAwZmYgJiBmcm9tOworCXNjdHBfYXVk
aXRfaW5keCsrOworCWlmIChzY3RwX2F1ZGl0X2luZHggPj0gU0NUUF9BVURJVF9TSVpFKSB7CisJ
CXNjdHBfYXVkaXRfaW5keCA9IDA7CisJfQorCWlmIChpbnAgPT0gTlVMTCkgeworCQlzY3RwX2F1
ZGl0X2RhdGFbc2N0cF9hdWRpdF9pbmR4XVswXSA9IDB4QUY7CisJCXNjdHBfYXVkaXRfZGF0YVtz
Y3RwX2F1ZGl0X2luZHhdWzFdID0gMHgwMTsKKwkJc2N0cF9hdWRpdF9pbmR4Kys7CisJCWlmIChz
Y3RwX2F1ZGl0X2luZHggPj0gU0NUUF9BVURJVF9TSVpFKSB7CisJCQlzY3RwX2F1ZGl0X2luZHgg
PSAwOworCQl9CisJCXJldHVybjsKKwl9CisJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQlzY3RwX2F1
ZGl0X2RhdGFbc2N0cF9hdWRpdF9pbmR4XVswXSA9IDB4QUY7CisJCXNjdHBfYXVkaXRfZGF0YVtz
Y3RwX2F1ZGl0X2luZHhdWzFdID0gMHgwMjsKKwkJc2N0cF9hdWRpdF9pbmR4Kys7CisJCWlmIChz
Y3RwX2F1ZGl0X2luZHggPj0gU0NUUF9BVURJVF9TSVpFKSB7CisJCQlzY3RwX2F1ZGl0X2luZHgg
PSAwOworCQl9CisJCXJldHVybjsKKwl9CisJc2N0cF9hdWRpdF9kYXRhW3NjdHBfYXVkaXRfaW5k
eF1bMF0gPSAweEExOworCXNjdHBfYXVkaXRfZGF0YVtzY3RwX2F1ZGl0X2luZHhdWzFdID0KKwkg
ICAgKDB4MDAwMDAwZmYgJiBzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCk7CisJc2N0
cF9hdWRpdF9pbmR4Kys7CisJaWYgKHNjdHBfYXVkaXRfaW5keCA+PSBTQ1RQX0FVRElUX1NJWkUp
IHsKKwkJc2N0cF9hdWRpdF9pbmR4ID0gMDsKKwl9CisJcmVwID0gMDsKKwl0b3RfYm9va19jbnQg
PSAwOworCXJlc2VuZF9jbnQgPSB0b3Rfb3V0ID0gMDsKKwlUQUlMUV9GT1JFQUNIKGNoaywgJnN0
Y2ItPmFzb2Muc2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJCWlmIChjaGstPnNlbnQgPT0gU0NU
UF9EQVRBR1JBTV9SRVNFTkQpIHsKKwkJCXJlc2VuZF9jbnQrKzsKKwkJfSBlbHNlIGlmIChjaGst
PnNlbnQgPCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgeworCQkJdG90X291dCArPSBjaGstPmJvb2tf
c2l6ZTsKKwkJCXRvdF9ib29rX2NudCsrOworCQl9CisJfQorCWlmIChyZXNlbmRfY250ICE9IHN0
Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250KSB7CisJCXNjdHBfYXVkaXRfZGF0YVtzY3Rw
X2F1ZGl0X2luZHhdWzBdID0gMHhBRjsKKwkJc2N0cF9hdWRpdF9kYXRhW3NjdHBfYXVkaXRfaW5k
eF1bMV0gPSAweEExOworCQlzY3RwX2F1ZGl0X2luZHgrKzsKKwkJaWYgKHNjdHBfYXVkaXRfaW5k
eCA+PSBTQ1RQX0FVRElUX1NJWkUpIHsKKwkJCXNjdHBfYXVkaXRfaW5keCA9IDA7CisJCX0KKwkJ
U0NUUF9QUklOVEYoInJlc2VuZF9jbnQ6JWQgYXNvYy10b3Q6JWRcbiIsCisJCQkgICAgcmVzZW5k
X2NudCwgc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOworCQlyZXAgPSAxOworCQlz
dGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCA9IHJlc2VuZF9jbnQ7CisJCXNjdHBfYXVk
aXRfZGF0YVtzY3RwX2F1ZGl0X2luZHhdWzBdID0gMHhBMjsKKwkJc2N0cF9hdWRpdF9kYXRhW3Nj
dHBfYXVkaXRfaW5keF1bMV0gPQorCQkgICAgKDB4MDAwMDAwZmYgJiBzdGNiLT5hc29jLnNlbnRf
cXVldWVfcmV0cmFuX2NudCk7CisJCXNjdHBfYXVkaXRfaW5keCsrOworCQlpZiAoc2N0cF9hdWRp
dF9pbmR4ID49IFNDVFBfQVVESVRfU0laRSkgeworCQkJc2N0cF9hdWRpdF9pbmR4ID0gMDsKKwkJ
fQorCX0KKwlpZiAodG90X291dCAhPSBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCkgeworCQlzY3Rw
X2F1ZGl0X2RhdGFbc2N0cF9hdWRpdF9pbmR4XVswXSA9IDB4QUY7CisJCXNjdHBfYXVkaXRfZGF0
YVtzY3RwX2F1ZGl0X2luZHhdWzFdID0gMHhBMjsKKwkJc2N0cF9hdWRpdF9pbmR4Kys7CisJCWlm
IChzY3RwX2F1ZGl0X2luZHggPj0gU0NUUF9BVURJVF9TSVpFKSB7CisJCQlzY3RwX2F1ZGl0X2lu
ZHggPSAwOworCQl9CisJCXJlcCA9IDE7CisJCVNDVFBfUFJJTlRGKCJ0b3RfZmx0OiVkIGFzb2Nf
dG90OiVkXG4iLCB0b3Rfb3V0LAorCQkJICAgIChpbnQpc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQp
OworCQlzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCA9IHRvdF9vdXQ7CisJfQorCWlmICh0b3RfYm9v
a19jbnQgIT0gc3RjYi0+YXNvYy50b3RhbF9mbGlnaHRfY291bnQpIHsKKwkJc2N0cF9hdWRpdF9k
YXRhW3NjdHBfYXVkaXRfaW5keF1bMF0gPSAweEFGOworCQlzY3RwX2F1ZGl0X2RhdGFbc2N0cF9h
dWRpdF9pbmR4XVsxXSA9IDB4QTU7CisJCXNjdHBfYXVkaXRfaW5keCsrOworCQlpZiAoc2N0cF9h
dWRpdF9pbmR4ID49IFNDVFBfQVVESVRfU0laRSkgeworCQkJc2N0cF9hdWRpdF9pbmR4ID0gMDsK
KwkJfQorCQlyZXAgPSAxOworCQlTQ1RQX1BSSU5URigidG90X2ZsdF9ib29rOiVkXG4iLCB0b3Rf
Ym9va19jbnQpOworCisJCXN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0X2NvdW50ID0gdG90X2Jvb2tf
Y250OworCX0KKwl0b3Rfb3V0ID0gMDsKKwlUQUlMUV9GT1JFQUNIKGxuZXQsICZzdGNiLT5hc29j
Lm5ldHMsIHNjdHBfbmV4dCkgeworCQl0b3Rfb3V0ICs9IGxuZXQtPmZsaWdodF9zaXplOworCX0K
KwlpZiAodG90X291dCAhPSBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCkgeworCQlzY3RwX2F1ZGl0
X2RhdGFbc2N0cF9hdWRpdF9pbmR4XVswXSA9IDB4QUY7CisJCXNjdHBfYXVkaXRfZGF0YVtzY3Rw
X2F1ZGl0X2luZHhdWzFdID0gMHhBMzsKKwkJc2N0cF9hdWRpdF9pbmR4Kys7CisJCWlmIChzY3Rw
X2F1ZGl0X2luZHggPj0gU0NUUF9BVURJVF9TSVpFKSB7CisJCQlzY3RwX2F1ZGl0X2luZHggPSAw
OworCQl9CisJCXJlcCA9IDE7CisJCVNDVFBfUFJJTlRGKCJyZWFsIGZsaWdodDolZCBuZXQgdG90
YWwgd2FzICVkXG4iLAorCQkJICAgIHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0LCB0b3Rfb3V0KTsK
KwkJLyogbm93IGNvcnJlY3RpdmUgYWN0aW9uICovCisJCVRBSUxRX0ZPUkVBQ0gobG5ldCwgJnN0
Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQl0b3Rfb3V0ID0gMDsKKwkJCVRBSUxRX0ZP
UkVBQ0goY2hrLCAmc3RjYi0+YXNvYy5zZW50X3F1ZXVlLCBzY3RwX25leHQpIHsKKwkJCQlpZiAo
KGNoay0+d2hvVG8gPT0gbG5ldCkgJiYKKwkJCQkgICAgKGNoay0+c2VudCA8IFNDVFBfREFUQUdS
QU1fUkVTRU5EKSkgeworCQkJCQl0b3Rfb3V0ICs9IGNoay0+Ym9va19zaXplOworCQkJCX0KKwkJ
CX0KKwkJCWlmIChsbmV0LT5mbGlnaHRfc2l6ZSAhPSB0b3Rfb3V0KSB7CisJCQkJU0NUUF9QUklO
VEYoIm5ldDolcCBmbGlnaHQgd2FzICVkIGNvcnJlY3RlZCB0byAlZFxuIiwKKwkJCQkJICAgICh2
b2lkICopbG5ldCwgbG5ldC0+ZmxpZ2h0X3NpemUsCisJCQkJCSAgICB0b3Rfb3V0KTsKKwkJCQls
bmV0LT5mbGlnaHRfc2l6ZSA9IHRvdF9vdXQ7CisJCQl9CisJCX0KKwl9CisJaWYgKHJlcCkgewor
CQlzY3RwX3ByaW50X2F1ZGl0X3JlcG9ydCgpOworCX0KK30KKwordm9pZAorc2N0cF9hdWRpdF9s
b2codWludDhfdCBldiwgdWludDhfdCBmZCkKK3sKKworCXNjdHBfYXVkaXRfZGF0YVtzY3RwX2F1
ZGl0X2luZHhdWzBdID0gZXY7CisJc2N0cF9hdWRpdF9kYXRhW3NjdHBfYXVkaXRfaW5keF1bMV0g
PSBmZDsKKwlzY3RwX2F1ZGl0X2luZHgrKzsKKwlpZiAoc2N0cF9hdWRpdF9pbmR4ID49IFNDVFBf
QVVESVRfU0laRSkgeworCQlzY3RwX2F1ZGl0X2luZHggPSAwOworCX0KK30KKworI2VuZGlmCisK
Ky8qCisgKiBUaGUgY29udmVyc2lvbiBmcm9tIHRpbWUgdG8gdGlja3MgYW5kIHZpY2UgdmVyc2Eg
aXMgZG9uZSBieSByb3VuZGluZworICogdXB3YXJkcy4gVGhpcyB3YXkgd2UgY2FuIHRlc3QgaW4g
dGhlIGNvZGUgdGhlIHRpbWUgdG8gYmUgcG9zaXRpdmUgYW5kCisgKiBrbm93IHRoYXQgdGhpcyBj
b3JyZXNwb25kcyB0byBhIHBvc2l0aXZlIG51bWJlciBvZiB0aWNrcy4KKyAqLworCit1aW50MzJf
dAorc2N0cF9tc2Vjc190b190aWNrcyh1aW50MzJfdCBtc2VjcykKK3sKKwl1aW50NjRfdCB0ZW1w
OworCXVpbnQzMl90IHRpY2tzOworCisJaWYgKGh6ID09IDEwMDApIHsKKwkJdGlja3MgPSBtc2Vj
czsKKwl9IGVsc2UgeworCQl0ZW1wID0gKCgodWludDY0X3QpbXNlY3MgKiBoeikgKyA5OTkpIC8g
MTAwMDsKKwkJaWYgKHRlbXAgPiBVSU5UMzJfTUFYKSB7CisJCQl0aWNrcyA9IFVJTlQzMl9NQVg7
CisJCX0gZWxzZSB7CisJCQl0aWNrcyA9ICh1aW50MzJfdCl0ZW1wOworCQl9CisJfQorCXJldHVy
biAodGlja3MpOworfQorCit1aW50MzJfdAorc2N0cF90aWNrc190b19tc2Vjcyh1aW50MzJfdCB0
aWNrcykKK3sKKwl1aW50NjRfdCB0ZW1wOworCXVpbnQzMl90IG1zZWNzOworCisJaWYgKGh6ID09
IDEwMDApIHsKKwkJbXNlY3MgPSB0aWNrczsKKwl9IGVsc2UgeworCQl0ZW1wID0gKCgodWludDY0
X3QpdGlja3MgKiAxMDAwKSArIChoeiAtIDEpKSAvIGh6OworCQlpZiAodGVtcCA+IFVJTlQzMl9N
QVgpIHsKKwkJCW1zZWNzID0gVUlOVDMyX01BWDsKKwkJfSBlbHNlIHsKKwkJCW1zZWNzID0gKHVp
bnQzMl90KXRlbXA7CisJCX0KKwl9CisJcmV0dXJuIChtc2Vjcyk7Cit9CisKK3VpbnQzMl90Citz
Y3RwX3NlY3NfdG9fdGlja3ModWludDMyX3Qgc2VjcykKK3sKKwl1aW50NjRfdCB0ZW1wOworCXVp
bnQzMl90IHRpY2tzOworCisJdGVtcCA9ICh1aW50NjRfdClzZWNzICogaHo7CisJaWYgKHRlbXAg
PiBVSU5UMzJfTUFYKSB7CisJCXRpY2tzID0gVUlOVDMyX01BWDsKKwl9IGVsc2UgeworCQl0aWNr
cyA9ICh1aW50MzJfdCl0ZW1wOworCX0KKwlyZXR1cm4gKHRpY2tzKTsKK30KKwordWludDMyX3QK
K3NjdHBfdGlja3NfdG9fc2Vjcyh1aW50MzJfdCB0aWNrcykKK3sKKwl1aW50NjRfdCB0ZW1wOwor
CXVpbnQzMl90IHNlY3M7CisKKwl0ZW1wID0gKCh1aW50NjRfdCl0aWNrcyArIChoeiAtIDEpKSAv
IGh6OworCWlmICh0ZW1wID4gVUlOVDMyX01BWCkgeworCQlzZWNzID0gVUlOVDMyX01BWDsKKwl9
IGVsc2UgeworCQlzZWNzID0gKHVpbnQzMl90KXRlbXA7CisJfQorCXJldHVybiAoc2Vjcyk7Cit9
CisKKy8qCisgKiBzY3RwX3N0b3BfdGltZXJzX2Zvcl9zaHV0ZG93bigpIHNob3VsZCBiZSBjYWxs
ZWQKKyAqIHdoZW4gZW50ZXJpbmcgdGhlIFNIVVRET1dOX1NFTlQgb3IgU0hVVERPV05fQUNLX1NF
TlQKKyAqIHN0YXRlIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbCB0aW1lcnMgYXJlIHN0b3BwZWQuCisg
Ki8KK3ZvaWQKK3NjdHBfc3RvcF90aW1lcnNfZm9yX3NodXRkb3duKHN0cnVjdCBzY3RwX3RjYiAq
c3RjYikKK3sKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCXN0cnVjdCBzY3RwX25ldHMgKm5l
dDsKKworCWlucCA9IHN0Y2ItPnNjdHBfZXA7CisKKwlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1F
Ul9UWVBFX1JFQ1YsIGlucCwgc3RjYiwgTlVMTCwKKwkgICAgICAgICAgICAgICAgU0NUUF9GUk9N
X1NDVFBVVElMICsgU0NUUF9MT0NfMTIpOworCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZ
UEVfU1RSUkVTRVQsIGlucCwgc3RjYiwgTlVMTCwKKwkgICAgICAgICAgICAgICAgU0NUUF9GUk9N
X1NDVFBVVElMICsgU0NUUF9MT0NfMTMpOworCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZ
UEVfQVNDT05GLCBpbnAsIHN0Y2IsIE5VTEwsCisJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9T
Q1RQVVRJTCArIFNDVFBfTE9DXzE0KTsKKwlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBF
X0FVVE9DTE9TRSwgaW5wLCBzdGNiLCBOVUxMLAorCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01f
U0NUUFVUSUwgKyBTQ1RQX0xPQ18xNSk7CisJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29j
Lm5ldHMsIHNjdHBfbmV4dCkgeworCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX1BB
VEhNVFVSQUlTRSwgaW5wLCBzdGNiLCBuZXQsCisJCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01f
U0NUUFVUSUwgKyBTQ1RQX0xPQ18xNik7CisJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZ
UEVfSEVBUlRCRUFULCBpbnAsIHN0Y2IsIG5ldCwKKwkJICAgICAgICAgICAgICAgIFNDVFBfRlJP
TV9TQ1RQVVRJTCArIFNDVFBfTE9DXzE3KTsKKwl9Cit9CisKK3ZvaWQKK3NjdHBfc3RvcF9hc3Nv
Y2lhdGlvbl90aW1lcnMoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBib29sIHN0b3BfYXNzb2Nfa2ls
bF90aW1lcikKK3sKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCXN0cnVjdCBzY3RwX25ldHMg
Km5ldDsKKworCWlucCA9IHN0Y2ItPnNjdHBfZXA7CisJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElN
RVJfVFlQRV9SRUNWLCBpbnAsIHN0Y2IsIE5VTEwsCisJICAgICAgICAgICAgICAgIFNDVFBfRlJP
TV9TQ1RQVVRJTCArIFNDVFBfTE9DXzE4KTsKKwlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9U
WVBFX1NUUlJFU0VULCBpbnAsIHN0Y2IsIE5VTEwsCisJICAgICAgICAgICAgICAgIFNDVFBfRlJP
TV9TQ1RQVVRJTCArIFNDVFBfTE9DXzE5KTsKKwlpZiAoc3RvcF9hc3NvY19raWxsX3RpbWVyKSB7
CisJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfQVNPQ0tJTEwsIGlucCwgc3RjYiwg
TlVMTCwKKwkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQVVRJTCArIFNDVFBfTE9DXzIw
KTsKKwl9CisJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9BU0NPTkYsIGlucCwgc3Rj
YiwgTlVMTCwKKwkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBVVElMICsgU0NUUF9MT0Nf
MjEpOworCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfQVVUT0NMT1NFLCBpbnAsIHN0
Y2IsIE5VTEwsCisJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQVVRJTCArIFNDVFBfTE9D
XzIyKTsKKwlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkQsIGlu
cCwgc3RjYiwgTlVMTCwKKwkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBVVElMICsgU0NU
UF9MT0NfMjMpOworCS8qIE1vYmlsaXR5IGFkYXB0YXRpb24gKi8KKwlzY3RwX3RpbWVyX3N0b3Ao
U0NUUF9USU1FUl9UWVBFX1BSSU1fREVMRVRFRCwgaW5wLCBzdGNiLCBOVUxMLAorCSAgICAgICAg
ICAgICAgICBTQ1RQX0ZST01fU0NUUFVUSUwgKyBTQ1RQX0xPQ18yNCk7CisJVEFJTFFfRk9SRUFD
SChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQlzY3RwX3RpbWVyX3N0b3Ao
U0NUUF9USU1FUl9UWVBFX1NFTkQsIGlucCwgc3RjYiwgbmV0LAorCQkgICAgICAgICAgICAgICAg
U0NUUF9GUk9NX1NDVFBVVElMICsgU0NUUF9MT0NfMjUpOworCQlzY3RwX3RpbWVyX3N0b3AoU0NU
UF9USU1FUl9UWVBFX0lOSVQsIGlucCwgc3RjYiwgbmV0LAorCQkgICAgICAgICAgICAgICAgU0NU
UF9GUk9NX1NDVFBVVElMICsgU0NUUF9MT0NfMjYpOworCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9U
SU1FUl9UWVBFX1NIVVRET1dOLCBpbnAsIHN0Y2IsIG5ldCwKKwkJICAgICAgICAgICAgICAgIFND
VFBfRlJPTV9TQ1RQVVRJTCArIFNDVFBfTE9DXzI3KTsKKwkJc2N0cF90aW1lcl9zdG9wKFNDVFBf
VElNRVJfVFlQRV9DT09LSUUsIGlucCwgc3RjYiwgbmV0LAorCQkgICAgICAgICAgICAgICAgU0NU
UF9GUk9NX1NDVFBVVElMICsgU0NUUF9MT0NfMjgpOworCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9U
SU1FUl9UWVBFX1NIVVRET1dOQUNLLCBpbnAsIHN0Y2IsIG5ldCwKKwkJICAgICAgICAgICAgICAg
IFNDVFBfRlJPTV9TQ1RQVVRJTCArIFNDVFBfTE9DXzI5KTsKKwkJc2N0cF90aW1lcl9zdG9wKFND
VFBfVElNRVJfVFlQRV9QQVRITVRVUkFJU0UsIGlucCwgc3RjYiwgbmV0LAorCQkgICAgICAgICAg
ICAgICAgU0NUUF9GUk9NX1NDVFBVVElMICsgU0NUUF9MT0NfMzApOworCQlzY3RwX3RpbWVyX3N0
b3AoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgaW5wLCBzdGNiLCBuZXQsCisJCSAgICAgICAg
ICAgICAgICBTQ1RQX0ZST01fU0NUUFVUSUwgKyBTQ1RQX0xPQ18zMSk7CisJfQorfQorCisvKgor
ICogQSBsaXN0IG9mIHNpemVzIGJhc2VkIG9uIHR5cGljYWwgbXR1J3MsIHVzZWQgb25seSBpZiBu
ZXh0IGhvcCBzaXplIG5vdAorICogcmV0dXJuZWQuIFRoZXNlIHZhbHVlcyBNVVNUIGJlIG11bHRp
cGxlcyBvZiA0IGFuZCBNVVNUIGJlIG9yZGVyZWQuCisgKi8KK3N0YXRpYyB1aW50MzJfdCBzY3Rw
X210dV9zaXplc1tdID0geworCTY4LAorCTI5NiwKKwk1MDgsCisJNTEyLAorCTU0NCwKKwk1NzYs
CisJMTAwNCwKKwkxNDkyLAorCTE1MDAsCisJMTUzNiwKKwkyMDAwLAorCTIwNDgsCisJNDM1MiwK
Kwk0NDY0LAorCTgxNjgsCisJMTc5MTIsCisJMzIwMDAsCisJNjU1MzIKK307CisKKy8qCisgKiBS
ZXR1cm4gdGhlIGxhcmdlc3QgTVRVIGluIHNjdHBfbXR1X3NpemVzIHNtYWxsZXIgdGhhbiB2YWwu
CisgKiBJZiB2YWwgaXMgc21hbGxlciB0aGFuIHRoZSBtaW5pbXVtLCBqdXN0IHJldHVybiB0aGUg
bGFyZ2VzdAorICogbXVsdGlwbGUgb2YgNCBzbWFsbGVyIG9yIGVxdWFsIHRvIHZhbC4KKyAqIEVu
c3VyZSB0aGF0IHRoZSByZXN1bHQgaXMgYSBtdWx0aXBsZSBvZiA0LgorICovCit1aW50MzJfdAor
c2N0cF9nZXRfcHJldl9tdHUodWludDMyX3QgdmFsKQoreworCXVpbnQzMl90IGk7CisKKwl2YWwg
Jj0gMHhmZmZmZmZmYzsKKwlpZiAodmFsIDw9IHNjdHBfbXR1X3NpemVzWzBdKSB7CisJCXJldHVy
biAodmFsKTsKKwl9CisJZm9yIChpID0gMTsgaSA8IChzaXplb2Yoc2N0cF9tdHVfc2l6ZXMpIC8g
c2l6ZW9mKHVpbnQzMl90KSk7IGkrKykgeworCQlpZiAodmFsIDw9IHNjdHBfbXR1X3NpemVzW2ld
KSB7CisJCQlicmVhazsKKwkJfQorCX0KKwlLQVNTRVJUKChzY3RwX210dV9zaXplc1tpIC0gMV0g
JiAweDAwMDAwMDAzKSA9PSAwLAorCSAgICAgICAgKCJzY3RwX210dV9zaXplc1sldV0gbm90IGEg
bXVsdGlwbGUgb2YgNCIsIGkgLSAxKSk7CisJcmV0dXJuIChzY3RwX210dV9zaXplc1tpIC0gMV0p
OworfQorCisvKgorICogUmV0dXJuIHRoZSBzbWFsbGVzdCBNVFUgaW4gc2N0cF9tdHVfc2l6ZXMg
bGFyZ2VyIHRoYW4gdmFsLgorICogSWYgdmFsIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtLCBq
dXN0IHJldHVybiB0aGUgbGFyZ2VzdCBtdWx0aXBsZSBvZiA0IHNtYWxsZXIKKyAqIG9yIGVxdWFs
IHRvIHZhbC4KKyAqIEVuc3VyZSB0aGF0IHRoZSByZXN1bHQgaXMgYSBtdWx0aXBsZSBvZiA0Lgor
ICovCit1aW50MzJfdAorc2N0cF9nZXRfbmV4dF9tdHUodWludDMyX3QgdmFsKQoreworCS8qIHNl
bGVjdCBhbm90aGVyIE1UVSB0aGF0IGlzIGp1c3QgYmlnZ2VyIHRoYW4gdGhpcyBvbmUgKi8KKwl1
aW50MzJfdCBpOworCisJdmFsICY9IDB4ZmZmZmZmZmM7CisJZm9yIChpID0gMDsgaSA8IChzaXpl
b2Yoc2N0cF9tdHVfc2l6ZXMpIC8gc2l6ZW9mKHVpbnQzMl90KSk7IGkrKykgeworCQlpZiAodmFs
IDwgc2N0cF9tdHVfc2l6ZXNbaV0pIHsKKwkJCUtBU1NFUlQoKHNjdHBfbXR1X3NpemVzW2ldICYg
MHgwMDAwMDAwMykgPT0gMCwKKwkJCQkoInNjdHBfbXR1X3NpemVzWyV1XSBub3QgYSBtdWx0aXBs
ZSBvZiA0IiwgaSkpOworCQkJcmV0dXJuIChzY3RwX210dV9zaXplc1tpXSk7CisJCX0KKwl9CisJ
cmV0dXJuICh2YWwpOworfQorCit2b2lkCitzY3RwX2ZpbGxfcmFuZG9tX3N0b3JlKHN0cnVjdCBz
Y3RwX3BjYiAqbSkKK3sKKwkvKgorCSAqIEhlcmUgd2UgdXNlIHRoZSBNRDUvU0hBLTEgdG8gaGFz
aCB3aXRoIG91ciBnb29kIHJhbmRvbU51bWJlcnMgYW5kCisJICogb3VyIGNvdW50ZXIuIFRoZSBy
ZXN1bHQgYmVjb21lcyBvdXIgZ29vZCByYW5kb20gbnVtYmVycyBhbmQgd2UKKwkgKiB0aGVuIHNl
dHVwIHRvIGdpdmUgdGhlc2Ugb3V0LiBOb3RlIHRoYXQgd2UgZG8gbm8gbG9ja2luZyB0bworCSAq
IHByb3RlY3QgdGhpcy4gVGhpcyBpcyBvaywgc2luY2UgaWYgY29tcGV0aW5nIGZvbGtzIGNhbGwg
dGhpcyB3ZQorCSAqIHdpbGwgZ2V0IG1vcmUgZ29iYmxlZCBnb29rIGluIHRoZSByYW5kb20gc3Rv
cmUgd2hpY2ggaXMgd2hhdCB3ZQorCSAqIHdhbnQuIFRoZXJlIGlzIGEgZGFuZ2VyIHRoYXQgdHdv
IGd1eXMgd2lsbCB1c2UgdGhlIHNhbWUgcmFuZG9tCisJICogbnVtYmVycywgYnV0IHRoYXRzIG9r
IHRvbyBzaW5jZSB0aGF0IGlzIHJhbmRvbSBhcyB3ZWxsIDotPgorCSAqLworCW0tPnN0b3JlX2F0
ID0gMDsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pICYmIGRlZmluZWQoRlVaWklOR19CVUlM
RF9NT0RFX1VOU0FGRV9GT1JfUFJPRFVDVElPTikKKwlmb3IgKGludCBpID0gMDsgaSA8IChpbnQp
IChzaXplb2YobS0+cmFuZG9tX3N0b3JlKSAvIHNpemVvZihtLT5yYW5kb21fc3RvcmVbMF0pKTsg
aSsrKSB7CisJCW0tPnJhbmRvbV9zdG9yZVtpXSA9ICh1aW50OF90KSByYW5kKCk7CisJfQorI2Vs
c2UKKwkodm9pZClzY3RwX2htYWMoU0NUUF9ITUFDLCAodWludDhfdCAqKW0tPnJhbmRvbV9udW1i
ZXJzLAorCSAgICBzaXplb2YobS0+cmFuZG9tX251bWJlcnMpLCAodWludDhfdCAqKSZtLT5yYW5k
b21fY291bnRlciwKKwkgICAgc2l6ZW9mKG0tPnJhbmRvbV9jb3VudGVyKSwgKHVpbnQ4X3QgKilt
LT5yYW5kb21fc3RvcmUpOworI2VuZGlmCisJbS0+cmFuZG9tX2NvdW50ZXIrKzsKK30KKwordWlu
dDMyX3QKK3NjdHBfc2VsZWN0X2luaXRpYWxfVFNOKHN0cnVjdCBzY3RwX3BjYiAqaW5wKQorewor
CS8qCisJICogQSB0cnVlIGltcGxlbWVudGF0aW9uIHNob3VsZCB1c2UgcmFuZG9tIHNlbGVjdGlv
biBwcm9jZXNzIHRvIGdldAorCSAqIHRoZSBpbml0aWFsIHN0cmVhbSBzZXF1ZW5jZSBudW1iZXIs
IHVzaW5nIFJGQzE3NTAgYXMgYSBnb29kCisJICogZ3VpZGVsaW5lCisJICovCisJdWludDMyX3Qg
eCwgKnhwOworCXVpbnQ4X3QgKnA7CisJaW50IHN0b3JlX2F0LCBuZXdfc3RvcmU7CisKKwlpZiAo
aW5wLT5pbml0aWFsX3NlcXVlbmNlX2RlYnVnICE9IDApIHsKKwkJdWludDMyX3QgcmV0OworCisJ
CXJldCA9IGlucC0+aW5pdGlhbF9zZXF1ZW5jZV9kZWJ1ZzsKKwkJaW5wLT5pbml0aWFsX3NlcXVl
bmNlX2RlYnVnKys7CisJCXJldHVybiAocmV0KTsKKwl9CisgcmV0cnk6CisJc3RvcmVfYXQgPSBp
bnAtPnN0b3JlX2F0OworCW5ld19zdG9yZSA9IHN0b3JlX2F0ICsgc2l6ZW9mKHVpbnQzMl90KTsK
KwlpZiAobmV3X3N0b3JlID49IChTQ1RQX1NJR05BVFVSRV9TSVpFLTMpKSB7CisJCW5ld19zdG9y
ZSA9IDA7CisJfQorCWlmICghYXRvbWljX2NtcHNldF9pbnQoJmlucC0+c3RvcmVfYXQsIHN0b3Jl
X2F0LCBuZXdfc3RvcmUpKSB7CisJCWdvdG8gcmV0cnk7CisJfQorCWlmIChuZXdfc3RvcmUgPT0g
MCkgeworCQkvKiBSZWZpbGwgdGhlIHJhbmRvbSBzdG9yZSAqLworCQlzY3RwX2ZpbGxfcmFuZG9t
X3N0b3JlKGlucCk7CisJfQorCXAgPSAmaW5wLT5yYW5kb21fc3RvcmVbc3RvcmVfYXRdOworCXhw
ID0gKHVpbnQzMl90ICopcDsKKwl4ID0gKnhwOworCXJldHVybiAoeCk7Cit9CisKK3VpbnQzMl90
CitzY3RwX3NlbGVjdF9hX3RhZyhzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCB1aW50MTZfdCBscG9y
dCwgdWludDE2X3QgcnBvcnQsIGludCBjaGVjaykKK3sKKwl1aW50MzJfdCB4OworCXN0cnVjdCB0
aW1ldmFsIG5vdzsKKworCWlmIChjaGVjaykgeworCQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZB
TCgmbm93KTsKKwl9CisJZm9yICg7OykgeworCQl4ID0gc2N0cF9zZWxlY3RfaW5pdGlhbF9UU04o
JmlucC0+c2N0cF9lcCk7CisJCWlmICh4ID09IDApIHsKKwkJCS8qIHdlIG5ldmVyIHVzZSAwICov
CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIWNoZWNrIHx8IHNjdHBfaXNfdnRhZ19nb29kKHgs
IGxwb3J0LCBycG9ydCwgJm5vdykpIHsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiAoeCk7
Cit9CisKK2ludDMyX3QKK3NjdHBfbWFwX2Fzc29jX3N0YXRlKGludCBrZXJuZWxfc3RhdGUpCit7
CisJaW50MzJfdCB1c2VyX3N0YXRlOworCisJaWYgKGtlcm5lbF9zdGF0ZSAmIFNDVFBfU1RBVEVf
V0FTX0FCT1JURUQpIHsKKwkJdXNlcl9zdGF0ZSA9IFNDVFBfQ0xPU0VEOworCX0gZWxzZSBpZiAo
a2VybmVsX3N0YXRlICYgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKSB7CisJCXVzZXJfc3Rh
dGUgPSBTQ1RQX1NIVVRET1dOX1BFTkRJTkc7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChrZXJuZWxf
c3RhdGUgJiBTQ1RQX1NUQVRFX01BU0spIHsKKwkJY2FzZSBTQ1RQX1NUQVRFX0VNUFRZOgorCQkJ
dXNlcl9zdGF0ZSA9IFNDVFBfQ0xPU0VEOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9TVEFURV9J
TlVTRToKKwkJCXVzZXJfc3RhdGUgPSBTQ1RQX0NMT1NFRDsKKwkJCWJyZWFrOworCQljYXNlIFND
VFBfU1RBVEVfQ09PS0lFX1dBSVQ6CisJCQl1c2VyX3N0YXRlID0gU0NUUF9DT09LSUVfV0FJVDsK
KwkJCWJyZWFrOworCQljYXNlIFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRDoKKwkJCXVzZXJfc3Rh
dGUgPSBTQ1RQX0NPT0tJRV9FQ0hPRUQ7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX1NUQVRFX09Q
RU46CisJCQl1c2VyX3N0YXRlID0gU0NUUF9FU1RBQkxJU0hFRDsKKwkJCWJyZWFrOworCQljYXNl
IFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVDoKKwkJCXVzZXJfc3RhdGUgPSBTQ1RQX1NIVVRET1dO
X1NFTlQ7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEOgor
CQkJdXNlcl9zdGF0ZSA9IFNDVFBfU0hVVERPV05fUkVDRUlWRUQ7CisJCQlicmVhazsKKwkJY2Fz
ZSBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UOgorCQkJdXNlcl9zdGF0ZSA9IFNDVFBfU0hV
VERPV05fQUNLX1NFTlQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzZXJfc3RhdGUgPSBT
Q1RQX0NMT1NFRDsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiAodXNlcl9zdGF0ZSk7Cit9
CisKK2ludAorc2N0cF9pbml0X2Fzb2Moc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNj
dHBfdGNiICpzdGNiLAorICAgICAgICAgICAgICAgdWludDMyX3Qgb3ZlcnJpZGVfdGFnLCB1aW50
MzJfdCB2cmZfaWQsIHVpbnQxNl90IG9fc3RybXMpCit7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRp
b24gKmFzb2M7CisJLyoKKwkgKiBBbnl0aGluZyBzZXQgdG8gemVybyBpcyB0YWtlbiBjYXJlIG9m
IGJ5IHRoZSBhbGxvY2F0aW9uIHJvdXRpbmUncworCSAqIGJ6ZXJvCisJICovCisKKwkvKgorCSAq
IFVwIGZyb250IHNlbGVjdCB3aGF0IHNjb3BpbmcgdG8gYXBwbHkgb24gYWRkcmVzc2VzIEkgdGVs
bCBteSBwZWVyCisJICogTm90IHN1cmUgd2hhdCB0byBkbyB3aXRoIHRoZXNlIHJpZ2h0IG5vdywg
d2Ugd2lsbCBuZWVkIHRvIGNvbWUgdXAKKwkgKiB3aXRoIGEgd2F5IHRvIHNldCB0aGVtLiBXZSBt
YXkgbmVlZCB0byBwYXNzIHRoZW0gdGhyb3VnaCBmcm9tIHRoZQorCSAqIGNhbGxlciBpbiB0aGUg
c2N0cF9hbG9jX2Fzc29jKCkgZnVuY3Rpb24uCisJICovCisJaW50IGk7CisjaWYgZGVmaW5lZChT
Q1RQX0RFVEFJTEVEX1NUUl9TVEFUUykKKwlpbnQgajsKKyNlbmRpZgorCisJYXNvYyA9ICZzdGNi
LT5hc29jOworCS8qIGluaXQgYWxsIHZhcmlhYmxlcyB0byBhIGtub3duIHZhbHVlLiAqLworCVND
VFBfU0VUX1NUQVRFKHN0Y2IsIFNDVFBfU1RBVEVfSU5VU0UpOworCWFzb2MtPm1heF9idXJzdCA9
IGlucC0+c2N0cF9lcC5tYXhfYnVyc3Q7CisJYXNvYy0+ZnJfbWF4X2J1cnN0ID0gaW5wLT5zY3Rw
X2VwLmZyX21heF9idXJzdDsKKwlhc29jLT5oZWFydF9iZWF0X2RlbGF5ID0gc2N0cF90aWNrc190
b19tc2VjcyhpbnAtPnNjdHBfZXAuc2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9IRUFSVEJF
QVRdKTsKKwlhc29jLT5jb29raWVfbGlmZSA9IGlucC0+c2N0cF9lcC5kZWZfY29va2llX2xpZmU7
CisJYXNvYy0+c2N0cF9jbXRfb25fb2ZmID0gaW5wLT5zY3RwX2NtdF9vbl9vZmY7CisJYXNvYy0+
ZWNuX3N1cHBvcnRlZCA9IGlucC0+ZWNuX3N1cHBvcnRlZDsKKwlhc29jLT5wcnNjdHBfc3VwcG9y
dGVkID0gaW5wLT5wcnNjdHBfc3VwcG9ydGVkOworCWFzb2MtPmF1dGhfc3VwcG9ydGVkID0gaW5w
LT5hdXRoX3N1cHBvcnRlZDsKKwlhc29jLT5hc2NvbmZfc3VwcG9ydGVkID0gaW5wLT5hc2NvbmZf
c3VwcG9ydGVkOworCWFzb2MtPnJlY29uZmlnX3N1cHBvcnRlZCA9IGlucC0+cmVjb25maWdfc3Vw
cG9ydGVkOworCWFzb2MtPm5yc2Fja19zdXBwb3J0ZWQgPSBpbnAtPm5yc2Fja19zdXBwb3J0ZWQ7
CisJYXNvYy0+cGt0ZHJvcF9zdXBwb3J0ZWQgPSBpbnAtPnBrdGRyb3Bfc3VwcG9ydGVkOworCWFz
b2MtPmlkYXRhX3N1cHBvcnRlZCA9IGlucC0+aWRhdGFfc3VwcG9ydGVkOworCWFzb2MtPnNjdHBf
Y210X3BmID0gKHVpbnQ4X3QpMDsKKwlhc29jLT5zY3RwX2ZyYWdfcG9pbnQgPSBpbnAtPnNjdHBf
ZnJhZ19wb2ludDsKKwlhc29jLT5zY3RwX2ZlYXR1cmVzID0gaW5wLT5zY3RwX2ZlYXR1cmVzOwor
CWFzb2MtPmRlZmF1bHRfZHNjcCA9IGlucC0+c2N0cF9lcC5kZWZhdWx0X2RzY3A7CisJYXNvYy0+
bWF4X2N3bmQgPSBpbnAtPm1heF9jd25kOworI2lmZGVmIElORVQ2CisJaWYgKGlucC0+c2N0cF9l
cC5kZWZhdWx0X2Zsb3dsYWJlbCkgeworCQlhc29jLT5kZWZhdWx0X2Zsb3dsYWJlbCA9IGlucC0+
c2N0cF9lcC5kZWZhdWx0X2Zsb3dsYWJlbDsKKwl9IGVsc2UgeworCQlpZiAoaW5wLT5pcF9pbnAu
aW5wLmlucF9mbGFncyAmIElONlBfQVVUT0ZMT1dMQUJFTCkgeworCQkJYXNvYy0+ZGVmYXVsdF9m
bG93bGFiZWwgPSBzY3RwX3NlbGVjdF9pbml0aWFsX1RTTigmaW5wLT5zY3RwX2VwKTsKKwkJCWFz
b2MtPmRlZmF1bHRfZmxvd2xhYmVsICY9IDB4MDAwZmZmZmY7CisJCQlhc29jLT5kZWZhdWx0X2Zs
b3dsYWJlbCB8PSAweDgwMDAwMDAwOworCQl9IGVsc2UgeworCQkJYXNvYy0+ZGVmYXVsdF9mbG93
bGFiZWwgPSAwOworCQl9CisJfQorI2VuZGlmCisJYXNvYy0+c2Jfc2VuZF9yZXN2ID0gMDsKKwlp
ZiAob3ZlcnJpZGVfdGFnKSB7CisJCWFzb2MtPm15X3Z0YWcgPSBvdmVycmlkZV90YWc7CisJfSBl
bHNlIHsKKwkJYXNvYy0+bXlfdnRhZyA9IHNjdHBfc2VsZWN0X2FfdGFnKGlucCwgc3RjYi0+c2N0
cF9lcC0+c2N0cF9scG9ydCwgc3RjYi0+cnBvcnQsICAxKTsKKwl9CisJLyogR2V0IHRoZSBub25j
ZSB0YWdzICovCisJYXNvYy0+bXlfdnRhZ19ub25jZSA9IHNjdHBfc2VsZWN0X2FfdGFnKGlucCwg
c3RjYi0+c2N0cF9lcC0+c2N0cF9scG9ydCwgc3RjYi0+cnBvcnQsIDApOworCWFzb2MtPnBlZXJf
dnRhZ19ub25jZSA9IHNjdHBfc2VsZWN0X2FfdGFnKGlucCwgc3RjYi0+c2N0cF9lcC0+c2N0cF9s
cG9ydCwgc3RjYi0+cnBvcnQsIDApOworCWFzb2MtPnZyZl9pZCA9IHZyZl9pZDsKKworI2lmZGVm
IFNDVFBfQVNPQ0xPR19PRl9UU05TCisJYXNvYy0+dHNuX2luX2F0ID0gMDsKKwlhc29jLT50c25f
b3V0X2F0ID0gMDsKKwlhc29jLT50c25faW5fd3JhcHBlZCA9IDA7CisJYXNvYy0+dHNuX291dF93
cmFwcGVkID0gMDsKKwlhc29jLT5jdW1hY2tfbG9nX2F0ID0gMDsKKwlhc29jLT5jdW1hY2tfbG9n
X2F0c250ID0gMDsKKyNlbmRpZgorI2lmZGVmIFNDVFBfRlNfU1BFQ19MT0cKKwlhc29jLT5mc19p
bmRleCA9IDA7CisjZW5kaWYKKwlhc29jLT5yZWZjbnQgPSAwOworCWFzb2MtPmFzc29jX3VwX3Nl
bnQgPSAwOworCWFzb2MtPmFzY29uZl9zZXFfb3V0ID0gYXNvYy0+c3RyX3Jlc2V0X3NlcV9vdXQg
PSBhc29jLT5pbml0X3NlcV9udW1iZXIgPSBhc29jLT5zZW5kaW5nX3NlcSA9CisJICAgIHNjdHBf
c2VsZWN0X2luaXRpYWxfVFNOKCZpbnAtPnNjdHBfZXApOworCWFzb2MtPmFzY29uZl9zZXFfb3V0
X2Fja2VkID0gYXNvYy0+YXNjb25mX3NlcV9vdXQgLSAxOworCS8qIHdlIGFyZSBvcHRpbWlzaXRp
YyBoZXJlICovCisJYXNvYy0+cGVlcl9zdXBwb3J0c19uYXQgPSAwOworCWFzb2MtPnNlbnRfcXVl
dWVfcmV0cmFuX2NudCA9IDA7CisKKwkvKiBmb3IgQ01UICovCisgICAgICAgIGFzb2MtPmxhc3Rf
bmV0X2NtdF9zZW5kX3N0YXJ0ZWQgPSBOVUxMOworCisJLyogVGhpcyB3aWxsIG5lZWQgdG8gYmUg
YWRqdXN0ZWQgKi8KKwlhc29jLT5sYXN0X2Fja2VkX3NlcSA9IGFzb2MtPmluaXRfc2VxX251bWJl
ciAtIDE7CisJYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQgPSBhc29jLT5sYXN0X2Fja2Vk
X3NlcTsKKwlhc29jLT5hc2NvbmZfc2VxX2luID0gYXNvYy0+bGFzdF9hY2tlZF9zZXE7CisKKwkv
KiBoZXJlIHdlIGFyZSBkaWZmZXJlbnQsIHdlIGhvbGQgdGhlIG5leHQgb25lIHdlIGV4cGVjdCAq
LworCWFzb2MtPnN0cl9yZXNldF9zZXFfaW4gPSBhc29jLT5sYXN0X2Fja2VkX3NlcSArIDE7CisK
Kwlhc29jLT5pbml0aWFsX2luaXRfcnRvX21heCA9IGlucC0+c2N0cF9lcC5pbml0aWFsX2luaXRf
cnRvX21heDsKKwlhc29jLT5pbml0aWFsX3J0byA9IGlucC0+c2N0cF9lcC5pbml0aWFsX3J0bzsK
KworCWFzb2MtPmRlZmF1bHRfbXR1ID0gaW5wLT5zY3RwX2VwLmRlZmF1bHRfbXR1OworCWFzb2Mt
Pm1heF9pbml0X3RpbWVzID0gaW5wLT5zY3RwX2VwLm1heF9pbml0X3RpbWVzOworCWFzb2MtPm1h
eF9zZW5kX3RpbWVzID0gaW5wLT5zY3RwX2VwLm1heF9zZW5kX3RpbWVzOworCWFzb2MtPmRlZl9u
ZXRfZmFpbHVyZSA9IGlucC0+c2N0cF9lcC5kZWZfbmV0X2ZhaWx1cmU7CisJYXNvYy0+ZGVmX25l
dF9wZl90aHJlc2hvbGQgPSBpbnAtPnNjdHBfZXAuZGVmX25ldF9wZl90aHJlc2hvbGQ7CisJYXNv
Yy0+ZnJlZV9jaHVua19jbnQgPSAwOworCisJYXNvYy0+aWFtX2Jsb2NraW5nID0gMDsKKwlhc29j
LT5jb250ZXh0ID0gaW5wLT5zY3RwX2NvbnRleHQ7CisJYXNvYy0+bG9jYWxfc3RycmVzZXRfc3Vw
cG9ydCA9IGlucC0+bG9jYWxfc3RycmVzZXRfc3VwcG9ydDsKKwlhc29jLT5kZWZfc2VuZCA9IGlu
cC0+ZGVmX3NlbmQ7CisJYXNvYy0+ZGVsYXllZF9hY2sgPSBzY3RwX3RpY2tzX3RvX21zZWNzKGlu
cC0+c2N0cF9lcC5zY3RwX3RpbWVvdXR0aWNrc1tTQ1RQX1RJTUVSX1JFQ1ZdKTsKKwlhc29jLT5z
YWNrX2ZyZXEgPSBpbnAtPnNjdHBfZXAuc2N0cF9zYWNrX2ZyZXE7CisJYXNvYy0+cHJfc2N0cF9j
bnQgPSAwOworCWFzb2MtPnRvdGFsX291dHB1dF9xdWV1ZV9zaXplID0gMDsKKworCWlmIChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgeworCQlhc29jLT5zY29wZS5p
cHY2X2FkZHJfbGVnYWwgPSAxOworCQlpZiAoU0NUUF9JUFY2X1Y2T05MWShpbnApID09IDApIHsK
KwkJCWFzb2MtPnNjb3BlLmlwdjRfYWRkcl9sZWdhbCA9IDE7CisJCX0gZWxzZSB7CisJCQlhc29j
LT5zY29wZS5pcHY0X2FkZHJfbGVnYWwgPSAwOworCQl9CisjaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorCQkJYXNvYy0+c2NvcGUuY29ubl9hZGRyX2xlZ2FsID0gMDsKKyNlbmRpZgorCX0gZWxz
ZSB7CisJCWFzb2MtPnNjb3BlLmlwdjZfYWRkcl9sZWdhbCA9IDA7CisjaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRf
Q09OTikgeworCQkJYXNvYy0+c2NvcGUuY29ubl9hZGRyX2xlZ2FsID0gMTsKKwkJCWFzb2MtPnNj
b3BlLmlwdjRfYWRkcl9sZWdhbCA9IDA7CisJCX0gZWxzZSB7CisJCQlhc29jLT5zY29wZS5jb25u
X2FkZHJfbGVnYWwgPSAwOworCQkJYXNvYy0+c2NvcGUuaXB2NF9hZGRyX2xlZ2FsID0gMTsKKwkJ
fQorI2Vsc2UKKwkJYXNvYy0+c2NvcGUuaXB2NF9hZGRyX2xlZ2FsID0gMTsKKyNlbmRpZgorCX0K
KworCWFzb2MtPm15X3J3bmQgPSBtYXgoU0NUUF9TQl9MSU1JVF9SQ1YoaW5wLT5zY3RwX3NvY2tl
dCksIFNDVFBfTUlOSU1BTF9SV05EKTsKKwlhc29jLT5wZWVyc19yd25kID0gU0NUUF9TQl9MSU1J
VF9SQ1YoaW5wLT5zY3RwX3NvY2tldCk7CisKKwlhc29jLT5zbWFsbGVzdF9tdHUgPSBpbnAtPnNj
dHBfZnJhZ19wb2ludDsKKwlhc29jLT5taW5ydG8gPSBpbnAtPnNjdHBfZXAuc2N0cF9taW5ydG87
CisJYXNvYy0+bWF4cnRvID0gaW5wLT5zY3RwX2VwLnNjdHBfbWF4cnRvOworCisJYXNvYy0+c3Ry
ZWFtX2xvY2tlZF9vbiA9IDA7CisJYXNvYy0+ZWNuX2VjaG9fY250X29ucSA9IDA7CisJYXNvYy0+
c3RyZWFtX2xvY2tlZCA9IDA7CisKKwlhc29jLT5zZW5kX3NhY2sgPSAxOworCisJTElTVF9JTklU
KCZhc29jLT5zY3RwX3Jlc3RyaWN0ZWRfYWRkcnMpOworCisJVEFJTFFfSU5JVCgmYXNvYy0+bmV0
cyk7CisJVEFJTFFfSU5JVCgmYXNvYy0+cGVuZGluZ19yZXBseV9xdWV1ZSk7CisJVEFJTFFfSU5J
VCgmYXNvYy0+YXNjb25mX2Fja19zZW50KTsKKwkvKiBTZXR1cCB0byBmaWxsIHRoZSBoYiByYW5k
b20gY2FjaGUgYXQgZmlyc3QgSEIgKi8KKwlhc29jLT5oYl9yYW5kb21faWR4ID0gNDsKKworCWFz
b2MtPnNjdHBfYXV0b2Nsb3NlX3RpY2tzID0gaW5wLT5zY3RwX2VwLmF1dG9fY2xvc2VfdGltZTsK
KworCXN0Y2ItPmFzb2MuY29uZ2VzdGlvbl9jb250cm9sX21vZHVsZSA9IGlucC0+c2N0cF9lcC5z
Y3RwX2RlZmF1bHRfY2NfbW9kdWxlOworCXN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zID0gc2N0cF9j
Y19mdW5jdGlvbnNbaW5wLT5zY3RwX2VwLnNjdHBfZGVmYXVsdF9jY19tb2R1bGVdOworCisJc3Rj
Yi0+YXNvYy5zdHJlYW1fc2NoZWR1bGluZ19tb2R1bGUgPSBpbnAtPnNjdHBfZXAuc2N0cF9kZWZh
dWx0X3NzX21vZHVsZTsKKwlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucyA9IHNjdHBfc3NfZnVuY3Rp
b25zW2lucC0+c2N0cF9lcC5zY3RwX2RlZmF1bHRfc3NfbW9kdWxlXTsKKworCS8qCisJICogTm93
IHRoZSBzdHJlYW0gcGFyYW1ldGVycywgaGVyZSB3ZSBhbGxvY2F0ZSBzcGFjZSBmb3IgYWxsIHN0
cmVhbXMKKwkgKiB0aGF0IHdlIHJlcXVlc3QgYnkgZGVmYXVsdC4KKwkgKi8KKwlhc29jLT5zdHJt
X3JlYWxvdXRzaXplID0gYXNvYy0+c3RyZWFtb3V0Y250ID0gYXNvYy0+cHJlX29wZW5fc3RyZWFt
cyA9CisJICAgIG9fc3RybXM7CisJU0NUUF9NQUxMT0MoYXNvYy0+c3RybW91dCwgc3RydWN0IHNj
dHBfc3RyZWFtX291dCAqLAorCQkgICAgYXNvYy0+c3RyZWFtb3V0Y250ICogc2l6ZW9mKHN0cnVj
dCBzY3RwX3N0cmVhbV9vdXQpLAorCQkgICAgU0NUUF9NX1NUUk1PKTsKKwlpZiAoYXNvYy0+c3Ry
bW91dCA9PSBOVUxMKSB7CisJCS8qIGJpZyB0cm91YmxlIG5vIG1lbW9yeSAqLworCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRU5PTUVN
KTsKKwkJcmV0dXJuIChFTk9NRU0pOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgYXNvYy0+c3RyZWFt
b3V0Y250OyBpKyspIHsKKwkJLyoKKwkJICogaW5ib3VuZCBzaWRlIG11c3QgYmUgc2V0IHRvIDB4
ZmZmZiwgYWxzbyBOT1RFIHdoZW4gd2UgZ2V0CisJCSAqIHRoZSBJTklULUFDSyBiYWNrIChmb3Ig
SU5JVCBzZW5kZXIpIHdlIE1VU1QgcmVkdWNlIHRoZQorCQkgKiBjb3VudCAoc3RyZWFtb3V0Y250
KSBidXQgZmlyc3QgY2hlY2sgaWYgd2Ugc2VudCB0byBhbnkgb2YKKwkJICogdGhlIHVwcGVyIHN0
cmVhbXMgdGhhdCB3ZXJlIGRyb3BwZWQgKGlmIHNvbWUgd2VyZSkuIFRob3NlCisJCSAqIHRoYXQg
d2VyZSBkcm9wcGVkIG11c3QgYmUgbm90aWZpZWQgdG8gdGhlIHVwcGVyIGxheWVyIGFzCisJCSAq
IGZhaWxlZCB0byBzZW5kLgorCQkgKi8KKwkJVEFJTFFfSU5JVCgmYXNvYy0+c3RybW91dFtpXS5v
dXRxdWV1ZSk7CisJCWFzb2MtPnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2luaXRfc3RyZWFtKHN0Y2Is
ICZhc29jLT5zdHJtb3V0W2ldLCBOVUxMKTsKKwkJYXNvYy0+c3RybW91dFtpXS5jaHVua3Nfb25f
cXVldWVzID0gMDsKKyNpZiBkZWZpbmVkKFNDVFBfREVUQUlMRURfU1RSX1NUQVRTKQorCQlmb3Ig
KGogPSAwOyBqIDwgU0NUUF9QUl9TQ1RQX01BWCArIDE7IGorKykgeworCQkJYXNvYy0+c3RybW91
dFtpXS5hYmFuZG9uZWRfc2VudFtqXSA9IDA7CisJCQlhc29jLT5zdHJtb3V0W2ldLmFiYW5kb25l
ZF91bnNlbnRbal0gPSAwOworCQl9CisjZWxzZQorCQlhc29jLT5zdHJtb3V0W2ldLmFiYW5kb25l
ZF9zZW50WzBdID0gMDsKKwkJYXNvYy0+c3RybW91dFtpXS5hYmFuZG9uZWRfdW5zZW50WzBdID0g
MDsKKyNlbmRpZgorCQlhc29jLT5zdHJtb3V0W2ldLm5leHRfbWlkX29yZGVyZWQgPSAwOworCQlh
c29jLT5zdHJtb3V0W2ldLm5leHRfbWlkX3Vub3JkZXJlZCA9IDA7CisJCWFzb2MtPnN0cm1vdXRb
aV0uc2lkID0gaTsKKwkJYXNvYy0+c3RybW91dFtpXS5sYXN0X21zZ19pbmNvbXBsZXRlID0gMDsK
KwkJYXNvYy0+c3RybW91dFtpXS5zdGF0ZSA9IFNDVFBfU1RSRUFNX09QRU5JTkc7CisJfQorCWFz
b2MtPnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2luaXQoc3RjYiwgYXNvYywgMCk7CisKKwkvKiBOb3cg
dGhlIG1hcHBpbmcgYXJyYXkgKi8KKwlhc29jLT5tYXBwaW5nX2FycmF5X3NpemUgPSBTQ1RQX0lO
SVRJQUxfTUFQUElOR19BUlJBWTsKKwlTQ1RQX01BTExPQyhhc29jLT5tYXBwaW5nX2FycmF5LCB1
aW50OF90ICosIGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6ZSwKKwkJICAgIFNDVFBfTV9NQVApOwor
CWlmIChhc29jLT5tYXBwaW5nX2FycmF5ID09IE5VTEwpIHsKKwkJU0NUUF9GUkVFKGFzb2MtPnN0
cm1vdXQsIFNDVFBfTV9TVFJNTyk7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFTk9NRU0pOworCQlyZXR1cm4gKEVOT01FTSk7CisJ
fQorCW1lbXNldChhc29jLT5tYXBwaW5nX2FycmF5LCAwLCBhc29jLT5tYXBwaW5nX2FycmF5X3Np
emUpOworCVNDVFBfTUFMTE9DKGFzb2MtPm5yX21hcHBpbmdfYXJyYXksIHVpbnQ4X3QgKiwgYXNv
Yy0+bWFwcGluZ19hcnJheV9zaXplLAorCSAgICBTQ1RQX01fTUFQKTsKKwlpZiAoYXNvYy0+bnJf
bWFwcGluZ19hcnJheSA9PSBOVUxMKSB7CisJCVNDVFBfRlJFRShhc29jLT5zdHJtb3V0LCBTQ1RQ
X01fU1RSTU8pOworCQlTQ1RQX0ZSRUUoYXNvYy0+bWFwcGluZ19hcnJheSwgU0NUUF9NX01BUCk7
CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBV
VElMLCBFTk9NRU0pOworCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCW1lbXNldChhc29jLT5ucl9t
YXBwaW5nX2FycmF5LCAwLCBhc29jLT5tYXBwaW5nX2FycmF5X3NpemUpOworCisJLyogTm93IHRo
ZSBpbml0IG9mIHRoZSBvdGhlciBvdXRxdWV1ZXMgKi8KKwlUQUlMUV9JTklUKCZhc29jLT5mcmVl
X2NodW5rcyk7CisJVEFJTFFfSU5JVCgmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlKTsKKwlUQUlM
UV9JTklUKCZhc29jLT5hc2NvbmZfc2VuZF9xdWV1ZSk7CisJVEFJTFFfSU5JVCgmYXNvYy0+c2Vu
ZF9xdWV1ZSk7CisJVEFJTFFfSU5JVCgmYXNvYy0+c2VudF9xdWV1ZSk7CisJVEFJTFFfSU5JVCgm
YXNvYy0+cmVzZXRIZWFkKTsKKwlhc29jLT5tYXhfaW5ib3VuZF9zdHJlYW1zID0gaW5wLT5zY3Rw
X2VwLm1heF9vcGVuX3N0cmVhbXNfaW50b21lOworCVRBSUxRX0lOSVQoJmFzb2MtPmFzY29uZl9x
dWV1ZSk7CisJLyogYXV0aGVudGljYXRpb24gZmllbGRzICovCisJYXNvYy0+YXV0aGluZm8ucmFu
ZG9tID0gTlVMTDsKKwlhc29jLT5hdXRoaW5mby5hY3RpdmVfa2V5aWQgPSAwOworCWFzb2MtPmF1
dGhpbmZvLmFzc29jX2tleSA9IE5VTEw7CisJYXNvYy0+YXV0aGluZm8uYXNzb2Nfa2V5aWQgPSAw
OworCWFzb2MtPmF1dGhpbmZvLnJlY3Zfa2V5ID0gTlVMTDsKKwlhc29jLT5hdXRoaW5mby5yZWN2
X2tleWlkID0gMDsKKwlMSVNUX0lOSVQoJmFzb2MtPnNoYXJlZF9rZXlzKTsKKwlhc29jLT5tYXJr
ZWRfcmV0cmFucyA9IDA7CisJYXNvYy0+cG9ydCA9IGlucC0+c2N0cF9lcC5wb3J0OworCWFzb2Mt
PnRpbW9pbml0ID0gMDsKKwlhc29jLT50aW1vZGF0YSA9IDA7CisJYXNvYy0+dGltb3NhY2sgPSAw
OworCWFzb2MtPnRpbW9zaHV0ZG93biA9IDA7CisJYXNvYy0+dGltb2hlYXJ0YmVhdCA9IDA7CisJ
YXNvYy0+dGltb2Nvb2tpZSA9IDA7CisJYXNvYy0+dGltb3NodXRkb3duYWNrID0gMDsKKwkodm9p
ZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmYXNvYy0+c3RhcnRfdGltZSk7CisJYXNvYy0+ZGlzY29u
dGludWl0eV90aW1lID0gYXNvYy0+c3RhcnRfdGltZTsKKwlmb3IgKGkgPSAwOyBpIDwgU0NUUF9Q
Ul9TQ1RQX01BWCArIDE7IGkrKykgeworCQlhc29jLT5hYmFuZG9uZWRfdW5zZW50W2ldID0gMDsK
KwkJYXNvYy0+YWJhbmRvbmVkX3NlbnRbaV0gPSAwOworCX0KKwkvKiBzYV9pZ25vcmUgTUVNTEVB
SyB7bWVtb3J5IGlzIHB1dCBpbiB0aGUgYXNzb2MgbWFwcGluZyBhcnJheSBhbmQgZnJlZWQgbGF0
ZXIgd2hlbgorCSAqIHRoZSBhc3NvY2lhdGlvbiBpcyBmcmVlZC4KKwkgKi8KKwlyZXR1cm4gKDAp
OworfQorCit2b2lkCitzY3RwX3ByaW50X21hcHBpbmdfYXJyYXkoc3RydWN0IHNjdHBfYXNzb2Np
YXRpb24gKmFzb2MpCit7CisJdW5zaWduZWQgaW50IGksIGxpbWl0OworCisJU0NUUF9QUklOVEYo
Ik1hcHBpbmcgYXJyYXkgc2l6ZTogJWQsIGJhc2VUU046ICU4Ljh4LCBjdW1BY2s6ICU4Ljh4LCBo
aWdoZXN0VFNOOiAoJTguOHgsICU4Ljh4KS5cbiIsCisJICAgICAgICAgICAgYXNvYy0+bWFwcGlu
Z19hcnJheV9zaXplLAorCSAgICAgICAgICAgIGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24s
CisJICAgICAgICAgICAgYXNvYy0+Y3VtdWxhdGl2ZV90c24sCisJICAgICAgICAgICAgYXNvYy0+
aGlnaGVzdF90c25faW5zaWRlX21hcCwKKwkgICAgICAgICAgICBhc29jLT5oaWdoZXN0X3Rzbl9p
bnNpZGVfbnJfbWFwKTsKKwlmb3IgKGxpbWl0ID0gYXNvYy0+bWFwcGluZ19hcnJheV9zaXplOyBs
aW1pdCA+IDE7IGxpbWl0LS0pIHsKKwkJaWYgKGFzb2MtPm1hcHBpbmdfYXJyYXlbbGltaXQgLSAx
XSAhPSAwKSB7CisJCQlicmVhazsKKwkJfQorCX0KKwlTQ1RQX1BSSU5URigiUmVuZWdhYmxlIG1h
cHBpbmcgYXJyYXkgKGxhc3QgJWQgZW50cmllcyBhcmUgemVybyk6XG4iLCBhc29jLT5tYXBwaW5n
X2FycmF5X3NpemUgLSBsaW1pdCk7CisJZm9yIChpID0gMDsgaSA8IGxpbWl0OyBpKyspIHsKKwkJ
U0NUUF9QUklOVEYoIiUyLjJ4JWMiLCBhc29jLT5tYXBwaW5nX2FycmF5W2ldLCAoKGkgKyAxKSAl
IDE2KSA/ICcgJyA6ICdcbicpOworCX0KKwlpZiAobGltaXQgJSAxNikKKwkJU0NUUF9QUklOVEYo
IlxuIik7CisJZm9yIChsaW1pdCA9IGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6ZTsgbGltaXQgPiAx
OyBsaW1pdC0tKSB7CisJCWlmIChhc29jLT5ucl9tYXBwaW5nX2FycmF5W2xpbWl0IC0gMV0pIHsK
KwkJCWJyZWFrOworCQl9CisJfQorCVNDVFBfUFJJTlRGKCJOb24gcmVuZWdhYmxlIG1hcHBpbmcg
YXJyYXkgKGxhc3QgJWQgZW50cmllcyBhcmUgemVybyk6XG4iLCBhc29jLT5tYXBwaW5nX2FycmF5
X3NpemUgLSBsaW1pdCk7CisJZm9yIChpID0gMDsgaSA8IGxpbWl0OyBpKyspIHsKKwkJU0NUUF9Q
UklOVEYoIiUyLjJ4JWMiLCBhc29jLT5ucl9tYXBwaW5nX2FycmF5W2ldLCAoKGkgKyAxKSAlIDE2
KSA/ICcgJzogJ1xuJyk7CisJfQorCWlmIChsaW1pdCAlIDE2KQorCQlTQ1RQX1BSSU5URigiXG4i
KTsKK30KKworaW50CitzY3RwX2V4cGFuZF9tYXBwaW5nX2FycmF5KHN0cnVjdCBzY3RwX2Fzc29j
aWF0aW9uICphc29jLCB1aW50MzJfdCBuZWVkZWQpCit7CisJLyogbWFwcGluZyBhcnJheSBuZWVk
cyB0byBncm93ICovCisJdWludDhfdCAqbmV3X2FycmF5MSwgKm5ld19hcnJheTI7CisJdWludDMy
X3QgbmV3X3NpemU7CisKKwluZXdfc2l6ZSA9IGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6ZSArICgo
bmVlZGVkKzcpLzggKyBTQ1RQX01BUFBJTkdfQVJSQVlfSU5DUik7CisJU0NUUF9NQUxMT0MobmV3
X2FycmF5MSwgdWludDhfdCAqLCBuZXdfc2l6ZSwgU0NUUF9NX01BUCk7CisJU0NUUF9NQUxMT0Mo
bmV3X2FycmF5MiwgdWludDhfdCAqLCBuZXdfc2l6ZSwgU0NUUF9NX01BUCk7CisJaWYgKChuZXdf
YXJyYXkxID09IE5VTEwpIHx8IChuZXdfYXJyYXkyID09IE5VTEwpKSB7CisJCS8qIGNhbid0IGdl
dCBtb3JlLCBmb3JnZXQgaXQgKi8KKwkJU0NUUF9QUklOVEYoIk5vIG1lbW9yeSBmb3IgZXhwYW5z
aW9uIG9mIFNDVFAgbWFwcGluZyBhcnJheSAlZFxuIiwgbmV3X3NpemUpOworCQlpZiAobmV3X2Fy
cmF5MSkgeworCQkJU0NUUF9GUkVFKG5ld19hcnJheTEsIFNDVFBfTV9NQVApOworCQl9CisJCWlm
IChuZXdfYXJyYXkyKSB7CisJCQlTQ1RQX0ZSRUUobmV3X2FycmF5MiwgU0NUUF9NX01BUCk7CisJ
CX0KKwkJcmV0dXJuICgtMSk7CisJfQorCW1lbXNldChuZXdfYXJyYXkxLCAwLCBuZXdfc2l6ZSk7
CisJbWVtc2V0KG5ld19hcnJheTIsIDAsIG5ld19zaXplKTsKKwltZW1jcHkobmV3X2FycmF5MSwg
YXNvYy0+bWFwcGluZ19hcnJheSwgYXNvYy0+bWFwcGluZ19hcnJheV9zaXplKTsKKwltZW1jcHko
bmV3X2FycmF5MiwgYXNvYy0+bnJfbWFwcGluZ19hcnJheSwgYXNvYy0+bWFwcGluZ19hcnJheV9z
aXplKTsKKwlTQ1RQX0ZSRUUoYXNvYy0+bWFwcGluZ19hcnJheSwgU0NUUF9NX01BUCk7CisJU0NU
UF9GUkVFKGFzb2MtPm5yX21hcHBpbmdfYXJyYXksIFNDVFBfTV9NQVApOworCWFzb2MtPm1hcHBp
bmdfYXJyYXkgPSBuZXdfYXJyYXkxOworCWFzb2MtPm5yX21hcHBpbmdfYXJyYXkgPSBuZXdfYXJy
YXkyOworCWFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6ZSA9IG5ld19zaXplOworCXJldHVybiAoMCk7
Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2l0ZXJhdG9yX3dvcmsoc3RydWN0IHNjdHBfaXRlcmF0
b3IgKml0KQoreworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisJc3RydWN0IGVwb2NoX3RyYWNrZXIgZXQ7CisjZW5kaWYKKwlzdHJ1Y3Qgc2N0cF9p
bnBjYiAqdGlucDsKKwlpbnQgaXRlcmF0aW9uX2NvdW50ID0gMDsKKwlpbnQgaW5wX3NraXAgPSAw
OworCWludCBmaXJzdF9pbiA9IDE7CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorCU5FVF9FUE9DSF9FTlRFUihldCk7CisjZW5kaWYKKwlTQ1RQ
X0lOUF9JTkZPX1JMT0NLKCk7CisJU0NUUF9JVEVSQVRPUl9MT0NLKCk7CisJc2N0cF9pdF9jdGwu
Y3VyX2l0ID0gaXQ7CisJaWYgKGl0LT5pbnApIHsKKwkJU0NUUF9JTlBfUkxPQ0soaXQtPmlucCk7
CisJCVNDVFBfSU5QX0RFQ1JfUkVGKGl0LT5pbnApOworCX0KKwlpZiAoaXQtPmlucCA9PSBOVUxM
KSB7CisJCS8qIGl0ZXJhdG9yIGlzIGNvbXBsZXRlICovCitkb25lX3dpdGhfaXRlcmF0b3I6CisJ
CXNjdHBfaXRfY3RsLmN1cl9pdCA9IE5VTEw7CisJCVNDVFBfSVRFUkFUT1JfVU5MT0NLKCk7CisJ
CVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOworCQlpZiAoaXQtPmZ1bmN0aW9uX2F0ZW5kICE9IE5V
TEwpIHsKKwkJCSgqaXQtPmZ1bmN0aW9uX2F0ZW5kKSAoaXQtPnBvaW50ZXIsIGl0LT52YWwpOwor
CQl9CisJCVNDVFBfRlJFRShpdCwgU0NUUF9NX0lURVIpOworI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCU5FVF9FUE9DSF9FWElUKGV0KTsKKyNl
bmRpZgorCQlyZXR1cm47CisJfQorc2VsZWN0X2FfbmV3X2VwOgorCWlmIChmaXJzdF9pbikgewor
CQlmaXJzdF9pbiA9IDA7CisJfSBlbHNlIHsKKwkJU0NUUF9JTlBfUkxPQ0soaXQtPmlucCk7CisJ
fQorCXdoaWxlICgoKGl0LT5wY2JfZmxhZ3MpICYmCisJICAgICAgICAoKGl0LT5pbnAtPnNjdHBf
ZmxhZ3MgJiBpdC0+cGNiX2ZsYWdzKSAhPSBpdC0+cGNiX2ZsYWdzKSkgfHwKKwkgICAgICAgKChp
dC0+cGNiX2ZlYXR1cmVzKSAmJgorCQkoKGl0LT5pbnAtPnNjdHBfZmVhdHVyZXMgJiBpdC0+cGNi
X2ZlYXR1cmVzKSAhPSBpdC0+cGNiX2ZlYXR1cmVzKSkpIHsKKwkJLyogZW5kcG9pbnQgZmxhZ3Mg
b3IgZmVhdHVyZXMgZG9uJ3QgbWF0Y2gsIHNvIGtlZXAgbG9va2luZyAqLworCQlpZiAoaXQtPml0
ZXJhdG9yX2ZsYWdzICYgU0NUUF9JVEVSQVRPUl9ET19TSU5HTEVfSU5QKSB7CisJCQlTQ1RQX0lO
UF9SVU5MT0NLKGl0LT5pbnApOworCQkJZ290byBkb25lX3dpdGhfaXRlcmF0b3I7CisJCX0KKwkJ
dGlucCA9IGl0LT5pbnA7CisJCWl0LT5pbnAgPSBMSVNUX05FWFQoaXQtPmlucCwgc2N0cF9saXN0
KTsKKwkJaXQtPnN0Y2IgPSBOVUxMOworCQlTQ1RQX0lOUF9SVU5MT0NLKHRpbnApOworCQlpZiAo
aXQtPmlucCA9PSBOVUxMKSB7CisJCQlnb3RvIGRvbmVfd2l0aF9pdGVyYXRvcjsKKwkJfQorCQlT
Q1RQX0lOUF9STE9DSyhpdC0+aW5wKTsKKwl9CisJLyogbm93IGdvIHRocm91Z2ggZWFjaCBhc3Nv
YyB3aGljaCBpcyBpbiB0aGUgZGVzaXJlZCBzdGF0ZSAqLworCWlmIChpdC0+ZG9uZV9jdXJyZW50
X2VwID09IDApIHsKKwkJaWYgKGl0LT5mdW5jdGlvbl9pbnAgIT0gTlVMTCkKKwkJCWlucF9za2lw
ID0gKCppdC0+ZnVuY3Rpb25faW5wKShpdC0+aW5wLCBpdC0+cG9pbnRlciwgaXQtPnZhbCk7CisJ
CWl0LT5kb25lX2N1cnJlbnRfZXAgPSAxOworCX0KKwlpZiAoaXQtPnN0Y2IgPT0gTlVMTCkgewor
CQkvKiBydW4gdGhlIHBlciBpbnN0YW5jZSBmdW5jdGlvbiAqLworCQlpdC0+c3RjYiA9IExJU1Rf
RklSU1QoJml0LT5pbnAtPnNjdHBfYXNvY19saXN0KTsKKwl9CisJaWYgKChpbnBfc2tpcCkgfHwg
aXQtPnN0Y2IgPT0gTlVMTCkgeworCQlpZiAoaXQtPmZ1bmN0aW9uX2lucF9lbmQgIT0gTlVMTCkg
eworCQkJaW5wX3NraXAgPSAoKml0LT5mdW5jdGlvbl9pbnBfZW5kKShpdC0+aW5wLAorCQkJCQkJ
CSAgIGl0LT5wb2ludGVyLAorCQkJCQkJCSAgIGl0LT52YWwpOworCQl9CisJCVNDVFBfSU5QX1JV
TkxPQ0soaXQtPmlucCk7CisJCWdvdG8gbm9fc3RjYjsKKwl9CisJd2hpbGUgKGl0LT5zdGNiKSB7
CisJCVNDVFBfVENCX0xPQ0soaXQtPnN0Y2IpOworCQlpZiAoaXQtPmFzb2Nfc3RhdGUgJiYgKChp
dC0+c3RjYi0+YXNvYy5zdGF0ZSAmIGl0LT5hc29jX3N0YXRlKSAhPSBpdC0+YXNvY19zdGF0ZSkp
IHsKKwkJCS8qIG5vdCBpbiB0aGUgcmlnaHQgc3RhdGUuLi4ga2VlcCBsb29raW5nICovCisJCQlT
Q1RQX1RDQl9VTkxPQ0soaXQtPnN0Y2IpOworCQkJZ290byBuZXh0X2Fzc29jOworCQl9CisJCS8q
IHNlZSBpZiB3ZSBoYXZlIGxpbWl0ZWQgb3V0IHRoZSBpdGVyYXRvciBsb29wICovCisJCWl0ZXJh
dGlvbl9jb3VudCsrOworCQlpZiAoaXRlcmF0aW9uX2NvdW50ID4gU0NUUF9JVEVSQVRPUl9NQVhf
QVRfT05DRSkgeworCQkJLyogUGF1c2UgdG8gbGV0IG90aGVycyBncmFiIHRoZSBsb2NrICovCisJ
CQlhdG9taWNfYWRkX2ludCgmaXQtPnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCVNDVFBfVENC
X1VOTE9DSyhpdC0+c3RjYik7CisJCQlTQ1RQX0lOUF9JTkNSX1JFRihpdC0+aW5wKTsKKwkJCVND
VFBfSU5QX1JVTkxPQ0soaXQtPmlucCk7CisJCQlTQ1RQX0lURVJBVE9SX1VOTE9DSygpOworCQkJ
U0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7CisJCQlTQ1RQX0lOUF9JTkZPX1JMT0NLKCk7CisJCQlT
Q1RQX0lURVJBVE9SX0xPQ0soKTsKKwkJCWlmIChzY3RwX2l0X2N0bC5pdGVyYXRvcl9mbGFncykg
eworCQkJCS8qIFdlIHdvbid0IGJlIHN0YXlpbmcgaGVyZSAqLworCQkJCVNDVFBfSU5QX0RFQ1Jf
UkVGKGl0LT5pbnApOworCQkJCWF0b21pY19hZGRfaW50KCZpdC0+c3RjYi0+YXNvYy5yZWZjbnQs
IC0xKTsKKyNpZiAhKGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNl
X18pKQorCQkJCWlmIChzY3RwX2l0X2N0bC5pdGVyYXRvcl9mbGFncyAmCisJCQkJICAgU0NUUF9J
VEVSQVRPUl9NVVNUX0VYSVQpIHsKKwkJCQkJZ290byBkb25lX3dpdGhfaXRlcmF0b3I7CisJCQkJ
fQorI2VuZGlmCisJCQkJaWYgKHNjdHBfaXRfY3RsLml0ZXJhdG9yX2ZsYWdzICYKKwkJCQkgICBT
Q1RQX0lURVJBVE9SX1NUT1BfQ1VSX0lUKSB7CisJCQkJCXNjdHBfaXRfY3RsLml0ZXJhdG9yX2Zs
YWdzICY9IH5TQ1RQX0lURVJBVE9SX1NUT1BfQ1VSX0lUOworCQkJCQlnb3RvIGRvbmVfd2l0aF9p
dGVyYXRvcjsKKwkJCQl9CisJCQkJaWYgKHNjdHBfaXRfY3RsLml0ZXJhdG9yX2ZsYWdzICYKKwkJ
CQkgICBTQ1RQX0lURVJBVE9SX1NUT1BfQ1VSX0lOUCkgeworCQkJCQlzY3RwX2l0X2N0bC5pdGVy
YXRvcl9mbGFncyAmPSB+U0NUUF9JVEVSQVRPUl9TVE9QX0NVUl9JTlA7CisJCQkJCWdvdG8gbm9f
c3RjYjsKKwkJCQl9CisJCQkJLyogSWYgd2UgcmVhY2ggaGVyZSBodWg/ICovCisJCQkJU0NUUF9Q
UklOVEYoIlVua25vd24gaXQgY3RsIGZsYWcgJXhcbiIsCisJCQkJCSAgICBzY3RwX2l0X2N0bC5p
dGVyYXRvcl9mbGFncyk7CisJCQkJc2N0cF9pdF9jdGwuaXRlcmF0b3JfZmxhZ3MgPSAwOworCQkJ
fQorCQkJU0NUUF9JTlBfUkxPQ0soaXQtPmlucCk7CisJCQlTQ1RQX0lOUF9ERUNSX1JFRihpdC0+
aW5wKTsKKwkJCVNDVFBfVENCX0xPQ0soaXQtPnN0Y2IpOworCQkJYXRvbWljX2FkZF9pbnQoJml0
LT5zdGNiLT5hc29jLnJlZmNudCwgLTEpOworCQkJaXRlcmF0aW9uX2NvdW50ID0gMDsKKwkJfQor
CQlLQVNTRVJUKGl0LT5pbnAgPT0gaXQtPnN0Y2ItPnNjdHBfZXAsCisJCSAgICAgICAgKCIlczog
c3RjYiAlcCBkb2VzIG5vdCBiZWxvbmcgdG8gaW5wICVwLCBidXQgaW5wICVwIiwKKwkJICAgICAg
ICAgX19mdW5jX18sIGl0LT5zdGNiLCBpdC0+aW5wLCBpdC0+c3RjYi0+c2N0cF9lcCkpOworCisJ
CS8qIHJ1biBmdW5jdGlvbiBvbiB0aGlzIG9uZSAqLworCQkoKml0LT5mdW5jdGlvbl9hc3NvYyko
aXQtPmlucCwgaXQtPnN0Y2IsIGl0LT5wb2ludGVyLCBpdC0+dmFsKTsKKworCQkvKgorCQkgKiB3
ZSBsaWUgaGVyZSwgaXQgcmVhbGx5IG5lZWRzIHRvIGhhdmUgaXRzIG93biB0eXBlIGJ1dAorCQkg
KiBmaXJzdCBJIG11c3QgdmVyaWZ5IHRoYXQgdGhpcyB3b24ndCBlZmZlY3QgdGhpbmdzIDotMAor
CQkgKi8KKwkJaWYgKGl0LT5ub19jaHVua19vdXRwdXQgPT0gMCkKKwkJCXNjdHBfY2h1bmtfb3V0
cHV0KGl0LT5pbnAsIGl0LT5zdGNiLCBTQ1RQX09VVFBVVF9GUk9NX1QzLCBTQ1RQX1NPX05PVF9M
T0NLRUQpOworCisJCVNDVFBfVENCX1VOTE9DSyhpdC0+c3RjYik7CisJbmV4dF9hc3NvYzoKKwkJ
aXQtPnN0Y2IgPSBMSVNUX05FWFQoaXQtPnN0Y2IsIHNjdHBfdGNibGlzdCk7CisJCWlmIChpdC0+
c3RjYiA9PSBOVUxMKSB7CisJCQkvKiBSdW4gbGFzdCBmdW5jdGlvbiAqLworCQkJaWYgKGl0LT5m
dW5jdGlvbl9pbnBfZW5kICE9IE5VTEwpIHsKKwkJCQlpbnBfc2tpcCA9ICgqaXQtPmZ1bmN0aW9u
X2lucF9lbmQpKGl0LT5pbnAsCisJCQkJCQkJCSAgIGl0LT5wb2ludGVyLAorCQkJCQkJCQkgICBp
dC0+dmFsKTsKKwkJCX0KKwkJfQorCX0KKwlTQ1RQX0lOUF9SVU5MT0NLKGl0LT5pbnApOworIG5v
X3N0Y2I6CisJLyogZG9uZSB3aXRoIGFsbCBhc3NvY3Mgb24gdGhpcyBlbmRwb2ludCwgbW92ZSBv
biB0byBuZXh0IGVuZHBvaW50ICovCisJaXQtPmRvbmVfY3VycmVudF9lcCA9IDA7CisJaWYgKGl0
LT5pdGVyYXRvcl9mbGFncyAmIFNDVFBfSVRFUkFUT1JfRE9fU0lOR0xFX0lOUCkgeworCQlpdC0+
aW5wID0gTlVMTDsKKwl9IGVsc2UgeworCQlpdC0+aW5wID0gTElTVF9ORVhUKGl0LT5pbnAsIHNj
dHBfbGlzdCk7CisJfQorCWl0LT5zdGNiID0gTlVMTDsKKwlpZiAoaXQtPmlucCA9PSBOVUxMKSB7
CisJCWdvdG8gZG9uZV93aXRoX2l0ZXJhdG9yOworCX0KKwlnb3RvIHNlbGVjdF9hX25ld19lcDsK
K30KKwordm9pZAorc2N0cF9pdGVyYXRvcl93b3JrZXIodm9pZCkKK3sKKwlzdHJ1Y3Qgc2N0cF9p
dGVyYXRvciAqaXQ7CisKKwkvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBXUSBs
b2NrIGluIHBsYWNlICovCisJc2N0cF9pdF9jdGwuaXRlcmF0b3JfcnVubmluZyA9IDE7CisJd2hp
bGUgKChpdCA9IFRBSUxRX0ZJUlNUKCZzY3RwX2l0X2N0bC5pdGVyYXRvcmhlYWQpKSAhPSBOVUxM
KSB7CisJCS8qIG5vdyBsZXRzIHdvcmsgb24gdGhpcyBvbmUgKi8KKwkJVEFJTFFfUkVNT1ZFKCZz
Y3RwX2l0X2N0bC5pdGVyYXRvcmhlYWQsIGl0LCBzY3RwX254dF9pdHIpOworCQlTQ1RQX0lQSV9J
VEVSQVRPUl9XUV9VTkxPQ0soKTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQorCQlDVVJWTkVUX1NFVChpdC0+dm4pOworI2VuZGlmCisJCXNjdHBf
aXRlcmF0b3Jfd29yayhpdCk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKKwkJQ1VSVk5FVF9SRVNUT1JFKCk7CisjZW5kaWYKKwkJU0NUUF9JUElf
SVRFUkFUT1JfV1FfTE9DSygpOworI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQorCQlpZiAoc2N0cF9pdF9jdGwuaXRlcmF0b3JfZmxhZ3MgJiBTQ1RQ
X0lURVJBVE9SX01VU1RfRVhJVCkgeworCQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCQkvKnNhX2ln
bm9yZSBGUkVFRF9NRU1PUlkqLworCX0KKwlzY3RwX2l0X2N0bC5pdGVyYXRvcl9ydW5uaW5nID0g
MDsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2hhbmRsZV9hZGRyX3dxKHZvaWQp
Cit7CisJLyogZGVhbCB3aXRoIHRoZSBBRERSIHdxIGZyb20gdGhlIHJ0c29jayBjYWxscyAqLwor
CXN0cnVjdCBzY3RwX2xhZGRyICp3aSwgKm53aTsKKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfaXRlcmF0
b3IgKmFzYzsKKworCVNDVFBfTUFMTE9DKGFzYywgc3RydWN0IHNjdHBfYXNjb25mX2l0ZXJhdG9y
ICosCisJCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2l0ZXJhdG9yKSwgU0NUUF9NX0FT
Q19JVCk7CisJaWYgKGFzYyA9PSBOVUxMKSB7CisJCS8qIFRyeSBsYXRlciwgbm8gbWVtb3J5ICov
CisJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0FERFJfV1EsCisJCQkJIChzdHJ1
Y3Qgc2N0cF9pbnBjYiAqKU5VTEwsCisJCQkJIChzdHJ1Y3Qgc2N0cF90Y2IgKilOVUxMLAorCQkJ
CSAoc3RydWN0IHNjdHBfbmV0cyAqKU5VTEwpOworCQlyZXR1cm47CisJfQorCUxJU1RfSU5JVCgm
YXNjLT5saXN0X29mX3dvcmspOworCWFzYy0+Y250ID0gMDsKKworCUxJU1RfRk9SRUFDSF9TQUZF
KHdpLCAmU0NUUF9CQVNFX0lORk8oYWRkcl93cSksIHNjdHBfbnh0X2FkZHIsIG53aSkgeworCQlM
SVNUX1JFTU9WRSh3aSwgc2N0cF9ueHRfYWRkcik7CisJCUxJU1RfSU5TRVJUX0hFQUQoJmFzYy0+
bGlzdF9vZl93b3JrLCB3aSwgc2N0cF9ueHRfYWRkcik7CisJCWFzYy0+Y250Kys7CisJfQorCisJ
aWYgKGFzYy0+Y250ID09IDApIHsKKwkJU0NUUF9GUkVFKGFzYywgU0NUUF9NX0FTQ19JVCk7CisJ
fSBlbHNlIHsKKwkJaW50IHJldDsKKworCQlyZXQgPSBzY3RwX2luaXRpYXRlX2l0ZXJhdG9yKHNj
dHBfYXNjb25mX2l0ZXJhdG9yX2VwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNj
dHBfYXNjb25mX2l0ZXJhdG9yX3N0Y2IsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TlVMTCwgLyogTm8gZXAgZW5kIGZvciBib3VuZGFsbCAqLworCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMLAorCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNDVFBfUENCX0FOWV9GRUFUVVJFUywKKwkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTQ1RQX0FTT0NfQU5ZX1NUQVRFLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICh2b2lkICopYXNjLCAwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjdHBf
YXNjb25mX2l0ZXJhdG9yX2VuZCwgTlVMTCwgMCk7CisJCWlmIChyZXQpIHsKKwkJCVNDVFBfUFJJ
TlRGKCJGYWlsZWQgdG8gaW5pdGlhdGUgaXRlcmF0b3IgZm9yIGhhbmRsZV9hZGRyX3dxXG4iKTsK
KwkJCS8qIEZyZWVpbmcgaWYgd2UgYXJlIHN0b3BwaW5nIG9yIHB1dCBiYWNrIG9uIHRoZSBhZGRy
X3dxLiAqLworCQkJaWYgKFNDVFBfQkFTRV9WQVIoc2N0cF9wY2JfaW5pdGlhbGl6ZWQpID09IDAp
IHsKKwkJCQlzY3RwX2FzY29uZl9pdGVyYXRvcl9lbmQoYXNjLCAwKTsKKwkJCX0gZWxzZSB7CisJ
CQkJTElTVF9GT1JFQUNIKHdpLCAmYXNjLT5saXN0X29mX3dvcmssIHNjdHBfbnh0X2FkZHIpIHsK
KwkJCQkJTElTVF9JTlNFUlRfSEVBRCgmU0NUUF9CQVNFX0lORk8oYWRkcl93cSksIHdpLCBzY3Rw
X254dF9hZGRyKTsKKwkJCQl9CisJCQkJU0NUUF9GUkVFKGFzYywgU0NUUF9NX0FTQ19JVCk7CisJ
CQl9CisJCX0KKwl9Cit9CisKKy8qLQorICogVGhlIGZvbGxvd2luZyB0YWJsZSBzaG93cyB3aGlj
aCBwb2ludGVycyBmb3IgdGhlIGlucCwgc3RjYiwgb3IgbmV0IGFyZQorICogc3RvcmVkIGZvciBl
YWNoIHRpbWVyIGFmdGVyIGl0IHdhcyBzdGFydGVkLgorICoKKyAqfE5hbWUgICAgICAgICAgICAg
ICAgICAgICAgICAgfFRpbWVyICAgICAgICAgICAgICAgICAgICAgICAgfGlucCB8c3RjYnxuZXQg
fAorICp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS18LS0tLXwtLS0tfC0tLS18CisgKnxTQ1RQX1RJTUVSX1RZUEVfU0VORCAgICAgICAg
IHxuZXQtPnJ4dF90aW1lciAgICAgICAgICAgICAgIHxZZXMgfFllcyB8WWVzIHwKKyAqfFNDVFBf
VElNRVJfVFlQRV9JTklUICAgICAgICAgfG5ldC0+cnh0X3RpbWVyICAgICAgICAgICAgICAgfFll
cyB8WWVzIHxZZXMgfAorICp8U0NUUF9USU1FUl9UWVBFX1JFQ1YgICAgICAgICB8c3RjYi0+YXNv
Yy5kYWNrX3RpbWVyICAgICAgICB8WWVzIHxZZXMgfE5vICB8CisgKnxTQ1RQX1RJTUVSX1RZUEVf
U0hVVERPV04gICAgIHxuZXQtPnJ4dF90aW1lciAgICAgICAgICAgICAgIHxZZXMgfFllcyB8WWVz
IHwKKyAqfFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQgICAgfG5ldC0+aGJfdGltZXIgICAgICAg
ICAgICAgICAgfFllcyB8WWVzIHxZZXMgfAorICp8U0NUUF9USU1FUl9UWVBFX0NPT0tJRSAgICAg
ICB8bmV0LT5yeHRfdGltZXIgICAgICAgICAgICAgICB8WWVzIHxZZXMgfFllcyB8CisgKnxTQ1RQ
X1RJTUVSX1RZUEVfTkVXQ09PS0lFICAgIHxpbnAtPnNjdHBfZXAuc2lnbmF0dXJlX2NoYW5nZXxZ
ZXMgfE5vICB8Tm8gIHwKKyAqfFNDVFBfVElNRVJfVFlQRV9QQVRITVRVUkFJU0UgfG5ldC0+cG10
dV90aW1lciAgICAgICAgICAgICAgfFllcyB8WWVzIHxZZXMgfAorICp8U0NUUF9USU1FUl9UWVBF
X1NIVVRET1dOQUNLICB8bmV0LT5yeHRfdGltZXIgICAgICAgICAgICAgICB8WWVzIHxZZXMgfFll
cyB8CisgKnxTQ1RQX1RJTUVSX1RZUEVfQVNDT05GICAgICAgIHxzdGNiLT5hc29jLmFzY29uZl90
aW1lciAgICAgIHxZZXMgfFllcyB8WWVzIHwKKyAqfFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdV
QVJEfHN0Y2ItPmFzb2Muc2h1dF9ndWFyZF90aW1lciAgfFllcyB8WWVzIHxObyAgfAorICp8U0NU
UF9USU1FUl9UWVBFX0FVVE9DTE9TRSAgICB8c3RjYi0+YXNvYy5hdXRvY2xvc2VfdGltZXIgICB8
WWVzIHxZZXMgfE5vICB8CisgKnxTQ1RQX1RJTUVSX1RZUEVfU1RSUkVTRVQgICAgIHxzdGNiLT5h
c29jLnN0cnJlc2V0X3RpbWVyICAgIHxZZXMgfFllcyB8Tm8gIHwKKyAqfFNDVFBfVElNRVJfVFlQ
RV9JTlBLSUxMICAgICAgfGlucC0+c2N0cF9lcC5zaWduYXR1cmVfY2hhbmdlfFllcyB8Tm8gIHxO
byAgfAorICp8U0NUUF9USU1FUl9UWVBFX0FTT0NLSUxMICAgICB8c3RjYi0+YXNvYy5zdHJyZXNl
dF90aW1lciAgICB8WWVzIHxZZXMgfE5vICB8CisgKnxTQ1RQX1RJTUVSX1RZUEVfQUREUl9XUSAg
ICAgIHxTQ1RQX0JBU0VfSU5GTyhhZGRyX3dxX3RpbWVyKXxObyAgfE5vICB8Tm8gIHwKKyAqfFND
VFBfVElNRVJfVFlQRV9QUklNX0RFTEVURUQgfHN0Y2ItPmFzb2MuZGVsZXRlX3ByaW1fdGltZXIg
fFllcyB8WWVzIHxObyAgfAorICovCisKK3ZvaWQKK3NjdHBfdGltZW91dF9oYW5kbGVyKHZvaWQg
KnQpCit7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwlzdHJ1Y3QgZXBvY2hfdHJhY2tlciBldDsKKyNlbmRpZgorCXN0cnVjdCB0aW1ldmFsIHR2
OworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCXN0
cnVjdCBzY3RwX25ldHMgKm5ldDsKKwlzdHJ1Y3Qgc2N0cF90aW1lciAqdG1yOworCXN0cnVjdCBt
YnVmICpvcF9lcnI7CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisJc3RydWN0IHNvY2tldCAqc287CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisJc3RydWN0IHNvY2tldCAqdXBjYWxsX3NvY2tldCA9IE5VTEw7CisjZW5kaWYKKwlp
bnQgdHlwZTsKKwlpbnQgaSwgc2VjcmV0OworCWJvb2wgZGlkX291dHB1dCwgcmVsZWFzZWRfYXNv
Y19yZWZlcmVuY2U7CisKKwkvKgorCSAqIElmIGlucCwgc3RjYiBvciBuZXQgYXJlIG5vdCBOVUxM
LCB0aGVuIHJlZmVyZW5jZXMgdG8gdGhlc2Ugd2VyZQorCSAqIGFkZGVkIHdoZW4gdGhlIHRpbWVy
IHdhcyBzdGFydGVkLCBhbmQgbXVzdCBiZSByZWxlYXNlZCBiZWZvcmUgdGhpcworCSAqIGZ1bmN0
aW9uIHJldHVybnMuCisJICovCisJdG1yID0gKHN0cnVjdCBzY3RwX3RpbWVyICopdDsKKwlpbnAg
PSAoc3RydWN0IHNjdHBfaW5wY2IgKil0bXItPmVwOworCXN0Y2IgPSAoc3RydWN0IHNjdHBfdGNi
ICopdG1yLT50Y2I7CisJbmV0ID0gKHN0cnVjdCBzY3RwX25ldHMgKil0bXItPm5ldDsKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCUNVUlZORVRf
U0VUKChzdHJ1Y3Qgdm5ldCAqKXRtci0+dm5ldCk7CisJTkVUX0VQT0NIX0VOVEVSKGV0KTsKKyNl
bmRpZgorCXJlbGVhc2VkX2Fzb2NfcmVmZXJlbmNlID0gZmFsc2U7CisKKyNpZmRlZiBTQ1RQX0FV
RElUSU5HX0VOQUJMRUQKKwlzY3RwX2F1ZGl0X2xvZygweEYwLCAodWludDhfdCkgdG1yLT50eXBl
KTsKKwlzY3RwX2F1ZGl0aW5nKDMsIGlucCwgc3RjYiwgbmV0KTsKKyNlbmRpZgorCisJLyogc2Fu
aXR5IGNoZWNrcy4uLiAqLworCUtBU1NFUlQodG1yLT5zZWxmID09IE5VTEwgfHwgdG1yLT5zZWxm
ID09IHRtciwKKwkgICAgICAgICgic2N0cF90aW1lb3V0X2hhbmRsZXI6IHRtci0+c2VsZiBjb3Jy
dXB0ZWQiKSk7CisJS0FTU0VSVChTQ1RQX0lTX1RJTUVSX1RZUEVfVkFMSUQodG1yLT50eXBlKSwK
KwkgICAgICAgICgic2N0cF90aW1lb3V0X2hhbmRsZXI6IGludmFsaWQgdGltZXIgdHlwZSAlZCIs
IHRtci0+dHlwZSkpOworCXR5cGUgPSB0bXItPnR5cGU7CisJS0FTU0VSVChzdGNiID09IE5VTEwg
fHwgc3RjYi0+c2N0cF9lcCA9PSBpbnAsCisJICAgICAgICAoInNjdHBfdGltZW91dF9oYW5kbGVy
IG9mIHR5cGUgJWQ6IGlucCA9ICVwLCBzdGNiLT5zY3RwX2VwICVwIiwKKwkgICAgICAgICB0eXBl
LCBzdGNiLCBzdGNiLT5zY3RwX2VwKSk7CisJdG1yLT5zdG9wcGVkX2Zyb20gPSAweGEwMDE7CisJ
aWYgKChzdGNiICE9IE5VTEwpICYmIChzdGNiLT5hc29jLnN0YXRlID09IFNDVFBfU1RBVEVfRU1Q
VFkpKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19USU1FUjIsCisJCSAgICAgICAgIlRpbWVyIHR5
cGUgJWQgaGFuZGxlciBleGl0aW5nIGR1ZSB0byBDTE9TRUQgYXNzb2NpYXRpb24uXG4iLAorCQkg
ICAgICAgIHR5cGUpOworCQlnb3RvIG91dF9kZWNyOworCX0KKwl0bXItPnN0b3BwZWRfZnJvbSA9
IDB4YTAwMjsKKwlTQ1RQREJHKFNDVFBfREVCVUdfVElNRVIyLCAiVGltZXIgdHlwZSAlZCBnb2Vz
IG9mZi5cbiIsIHR5cGUpOworCWlmICghU0NUUF9PU19USU1FUl9BQ1RJVkUoJnRtci0+dGltZXIp
KSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19USU1FUjIsCisJCQkiVGltZXIgdHlwZSAlZCBoYW5k
bGVyIGV4aXRpbmcgZHVlIHRvIG5vdCBiZWluZyBhY3RpdmUuXG4iLAorCQkJdHlwZSk7CisJCWdv
dG8gb3V0X2RlY3I7CisJfQorCisJdG1yLT5zdG9wcGVkX2Zyb20gPSAweGEwMDM7CisJaWYgKHN0
Y2IpIHsKKwkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJLyoKKwkJICogUmVsZWFzZSByZWZlcmVu
Y2Ugc28gdGhhdCBhc3NvY2lhdGlvbiBjYW4gYmUgZnJlZWQgaWYKKwkJICogbmVjZXNzYXJ5IGJl
bG93LgorCQkgKiBUaGlzIGlzIHNhZmUgbm93IHRoYXQgd2UgaGF2ZSBhY3F1aXJlZCB0aGUgbG9j
ay4KKwkJICovCisJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgLTEpOworCQly
ZWxlYXNlZF9hc29jX3JlZmVyZW5jZSA9IHRydWU7CisJCWlmICgodHlwZSAhPSBTQ1RQX1RJTUVS
X1RZUEVfQVNPQ0tJTEwpICYmCisJCSAgICAoKHN0Y2ItPmFzb2Muc3RhdGUgPT0gU0NUUF9TVEFU
RV9FTVBUWSkgfHwKKwkJICAgICAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRf
VE9fQkVfRlJFRUQpKSkgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1RJTUVSMiwKKwkJCSAgICAg
ICAgIlRpbWVyIHR5cGUgJWQgaGFuZGxlciBleGl0aW5nIGR1ZSB0byBDTE9TRUQgYXNzb2NpYXRp
b24uXG4iLAorCQkJICAgICAgICB0eXBlKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfSBlbHNlIGlm
IChpbnAgIT0gTlVMTCkgeworCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCX0gZWxzZSB7CisJCVND
VFBfV1FfQUREUl9MT0NLKCk7CisJfQorCisJLyogUmVjb3JkIGluIHN0b3BwZWRfZnJvbSB3aGlj
aCB0aW1lb3V0IG9jY3VycmVkLiAqLworCXRtci0+c3RvcHBlZF9mcm9tID0gdHlwZTsKKwkvKiBt
YXJrIGFzIGJlaW5nIHNlcnZpY2VkIG5vdyAqLworCWlmIChTQ1RQX09TX1RJTUVSX1BFTkRJTkco
JnRtci0+dGltZXIpKSB7CisJCS8qCisJCSAqIENhbGxvdXQgaGFzIGJlZW4gcmVzY2hlZHVsZWQu
CisJCSAqLworCQlnb3RvIG91dDsKKwl9CisJaWYgKCFTQ1RQX09TX1RJTUVSX0FDVElWRSgmdG1y
LT50aW1lcikpIHsKKwkJLyoKKwkJICogTm90IGFjdGl2ZSwgc28gbm8gYWN0aW9uLgorCQkgKi8K
KwkJZ290byBvdXQ7CisJfQorCVNDVFBfT1NfVElNRVJfREVBQ1RJVkFURSgmdG1yLT50aW1lcik7
CisKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaWYgKChzdGNiICE9IE5VTEwpICYmCisJ
ICAgICEoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9H
T05FKSAmJgorCSAgICAoc3RjYi0+c2N0cF9zb2NrZXQgIT0gTlVMTCkpIHsKKwkJdXBjYWxsX3Nv
Y2tldCA9IHN0Y2ItPnNjdHBfc29ja2V0OworCQlTT0NLX0xPQ0sodXBjYWxsX3NvY2tldCk7CisJ
CXNvcmVmKHVwY2FsbF9zb2NrZXQpOworCQlTT0NLX1VOTE9DSyh1cGNhbGxfc29ja2V0KTsKKwl9
CisjZW5kaWYKKwkvKiBjYWxsIHRoZSBoYW5kbGVyIGZvciB0aGUgYXBwcm9wcmlhdGUgdGltZXIg
dHlwZSAqLworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgU0NUUF9USU1FUl9UWVBFX1NFTkQ6CisJ
CUtBU1NFUlQoaW5wICE9IE5VTEwgJiYgc3RjYiAhPSBOVUxMICYmIG5ldCAhPSBOVUxMLAorCQkg
ICAgICAgICgidGltZW91dCBvZiB0eXBlICVkOiBpbnAgPSAlcCwgc3RjYiA9ICVwLCBuZXQgPSAl
cCIsCisJCSAgICAgICAgIHR5cGUsIGlucCwgc3RjYiwgbmV0KSk7CisJCVNDVFBfU1RBVF9JTkNS
KHNjdHBzX3RpbW9kYXRhKTsKKwkJc3RjYi0+YXNvYy50aW1vZGF0YSsrOworCQlzdGNiLT5hc29j
Lm51bV9zZW5kX3RpbWVyc191cC0tOworCQlpZiAoc3RjYi0+YXNvYy5udW1fc2VuZF90aW1lcnNf
dXAgPCAwKSB7CisJCQlzdGNiLT5hc29jLm51bV9zZW5kX3RpbWVyc191cCA9IDA7CisJCX0KKwkJ
U0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7CisJCWlmIChzY3RwX3Qzcnh0X3RpbWVyKGlucCwg
c3RjYiwgbmV0KSkgeworCQkJLyogbm8gbmVlZCB0byB1bmxvY2sgb24gdGNiIGl0cyBnb25lICov
CisKKwkJCWdvdG8gb3V0X2RlY3I7CisJCX0KKwkJU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7
CisjaWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVECisJCXNjdHBfYXVkaXRpbmcoNCwgaW5wLCBz
dGNiLCBuZXQpOworI2VuZGlmCisJCXNjdHBfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgU0NUUF9P
VVRQVVRfRlJPTV9UMywgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJZGlkX291dHB1dCA9IHRydWU7
CisJCWlmICgoc3RjYi0+YXNvYy5udW1fc2VuZF90aW1lcnNfdXAgPT0gMCkgJiYKKwkJICAgIChz
dGNiLT5hc29jLnNlbnRfcXVldWVfY250ID4gMCkpIHsKKwkJCXN0cnVjdCBzY3RwX3RtaXRfY2h1
bmsgKmNoazsKKworCQkJLyoKKwkJCSAqIFNhZmVndWFyZC4gSWYgdGhlcmUgb24gc29tZSBvbiB0
aGUgc2VudCBxdWV1ZQorCQkJICogc29tZXdoZXJlIGJ1dCBubyB0aW1lcnMgcnVubmluZyBzb21l
dGhpbmcgaXMKKwkJCSAqIHdyb25nLi4uIHNvIHdlIHN0YXJ0IGEgdGltZXIgb24gdGhlIGZpcnN0
IGNodW5rCisJCQkgKiBvbiB0aGUgc2VuZCBxdWV1ZSBvbiB3aGF0ZXZlciBuZXQgaXQgaXMgc2Vu
dCB0by4KKwkJCSAqLworCQkJVEFJTFFfRk9SRUFDSChjaGssICZzdGNiLT5hc29jLnNlbnRfcXVl
dWUsIHNjdHBfbmV4dCkgeworCQkJCWlmIChjaGstPndob1RvICE9IE5VTEwpIHsKKwkJCQkJYnJl
YWs7CisJCQkJfQorCQkJfQorCQkJaWYgKGNoayAhPSBOVUxMKSB7CisJCQkJc2N0cF90aW1lcl9z
dGFydChTQ1RQX1RJTUVSX1RZUEVfU0VORCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgY2hrLT53aG9U
byk7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1RJTUVSX1RZUEVfSU5JVDoKKwkJ
S0FTU0VSVChpbnAgIT0gTlVMTCAmJiBzdGNiICE9IE5VTEwgJiYgbmV0ICE9IE5VTEwsCisJCSAg
ICAgICAgKCJ0aW1lb3V0IG9mIHR5cGUgJWQ6IGlucCA9ICVwLCBzdGNiID0gJXAsIG5ldCA9ICVw
IiwKKwkJICAgICAgICAgdHlwZSwgaW5wLCBzdGNiLCBuZXQpKTsKKwkJU0NUUF9TVEFUX0lOQ1Io
c2N0cHNfdGltb2luaXQpOworCQlzdGNiLT5hc29jLnRpbW9pbml0Kys7CisJCWlmIChzY3RwX3Qx
aW5pdF90aW1lcihpbnAsIHN0Y2IsIG5ldCkpIHsKKwkJCS8qIG5vIG5lZWQgdG8gdW5sb2NrIG9u
IHRjYiBpdHMgZ29uZSAqLworCQkJZ290byBvdXRfZGVjcjsKKwkJfQorCQlkaWRfb3V0cHV0ID0g
ZmFsc2U7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX1JFQ1Y6CisJCUtBU1NFUlQo
aW5wICE9IE5VTEwgJiYgc3RjYiAhPSBOVUxMICYmIG5ldCA9PSBOVUxMLAorCQkgICAgICAgICgi
dGltZW91dCBvZiB0eXBlICVkOiBpbnAgPSAlcCwgc3RjYiA9ICVwLCBuZXQgPSAlcCIsCisJCSAg
ICAgICAgIHR5cGUsIGlucCwgc3RjYiwgbmV0KSk7CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Rp
bW9zYWNrKTsKKwkJc3RjYi0+YXNvYy50aW1vc2FjaysrOworCQlzY3RwX3NlbmRfc2FjayhzdGNi
LCBTQ1RQX1NPX05PVF9MT0NLRUQpOworI2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAorCQlz
Y3RwX2F1ZGl0aW5nKDQsIGlucCwgc3RjYiwgTlVMTCk7CisjZW5kaWYKKwkJc2N0cF9jaHVua19v
dXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX1NBQ0tfVE1SLCBTQ1RQX1NPX05PVF9M
T0NLRUQpOworCQlkaWRfb3V0cHV0ID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1RJTUVS
X1RZUEVfU0hVVERPV046CisJCUtBU1NFUlQoaW5wICE9IE5VTEwgJiYgc3RjYiAhPSBOVUxMICYm
IG5ldCAhPSBOVUxMLAorCQkgICAgICAgICgidGltZW91dCBvZiB0eXBlICVkOiBpbnAgPSAlcCwg
c3RjYiA9ICVwLCBuZXQgPSAlcCIsCisJCSAgICAgICAgIHR5cGUsIGlucCwgc3RjYiwgbmV0KSk7
CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3RpbW9zaHV0ZG93bik7CisJCXN0Y2ItPmFzb2MudGlt
b3NodXRkb3duKys7CisJCWlmIChzY3RwX3NodXRkb3duX3RpbWVyKGlucCwgc3RjYiwgbmV0KSkg
eworCQkJLyogbm8gbmVlZCB0byB1bmxvY2sgb24gdGNiIGl0cyBnb25lICovCisJCQlnb3RvIG91
dF9kZWNyOworCQl9CisjaWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVECisJCXNjdHBfYXVkaXRp
bmcoNCwgaW5wLCBzdGNiLCBuZXQpOworI2VuZGlmCisJCXNjdHBfY2h1bmtfb3V0cHV0KGlucCwg
c3RjYiwgU0NUUF9PVVRQVVRfRlJPTV9TSFVUX1RNUiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJ
ZGlkX291dHB1dCA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX0hFQVJU
QkVBVDoKKwkJS0FTU0VSVChpbnAgIT0gTlVMTCAmJiBzdGNiICE9IE5VTEwgJiYgbmV0ICE9IE5V
TEwsCisJCSAgICAgICAgKCJ0aW1lb3V0IG9mIHR5cGUgJWQ6IGlucCA9ICVwLCBzdGNiID0gJXAs
IG5ldCA9ICVwIiwKKwkJICAgICAgICAgdHlwZSwgaW5wLCBzdGNiLCBuZXQpKTsKKwkJU0NUUF9T
VEFUX0lOQ1Ioc2N0cHNfdGltb2hlYXJ0YmVhdCk7CisJCXN0Y2ItPmFzb2MudGltb2hlYXJ0YmVh
dCsrOworCQlpZiAoc2N0cF9oZWFydGJlYXRfdGltZXIoaW5wLCBzdGNiLCBuZXQpKSB7CisJCQkv
KiBubyBuZWVkIHRvIHVubG9jayBvbiB0Y2IgaXRzIGdvbmUgKi8KKwkJCWdvdG8gb3V0X2RlY3I7
CisJCX0KKyNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKKwkJc2N0cF9hdWRpdGluZyg0LCBp
bnAsIHN0Y2IsIG5ldCk7CisjZW5kaWYKKwkJaWYgKCEobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9B
RERSX05PSEIpKSB7CisJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9IRUFSVEJF
QVQsIGlucCwgc3RjYiwgbmV0KTsKKwkJCXNjdHBfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgU0NU
UF9PVVRQVVRfRlJPTV9IQl9UTVIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQlkaWRfb3V0cHV0
ID0gdHJ1ZTsKKwkJfSBlbHNlIHsKKwkJCWRpZF9vdXRwdXQgPSBmYWxzZTsKKwkJfQorCQlicmVh
azsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9DT09LSUU6CisJCUtBU1NFUlQoaW5wICE9IE5VTEwg
JiYgc3RjYiAhPSBOVUxMICYmIG5ldCAhPSBOVUxMLAorCQkgICAgICAgICgidGltZW91dCBvZiB0
eXBlICVkOiBpbnAgPSAlcCwgc3RjYiA9ICVwLCBuZXQgPSAlcCIsCisJCSAgICAgICAgIHR5cGUs
IGlucCwgc3RjYiwgbmV0KSk7CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3RpbW9jb29raWUpOwor
CQlzdGNiLT5hc29jLnRpbW9jb29raWUrKzsKKwkJaWYgKHNjdHBfY29va2llX3RpbWVyKGlucCwg
c3RjYiwgbmV0KSkgeworCQkJLyogbm8gbmVlZCB0byB1bmxvY2sgb24gdGNiIGl0cyBnb25lICov
CisJCQlnb3RvIG91dF9kZWNyOworCQl9CisjaWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVECisJ
CXNjdHBfYXVkaXRpbmcoNCwgaW5wLCBzdGNiLCBuZXQpOworI2VuZGlmCisJCS8qCisJCSAqIFdl
IGNvbnNpZGVyIFQzIGFuZCBDb29raWUgdGltZXIgcHJldHR5IG11Y2ggdGhlIHNhbWUgd2l0aAor
CQkgKiByZXNwZWN0IHRvIHdoZXJlIGZyb20gaW4gY2h1bmtfb3V0cHV0LgorCQkgKi8KKwkJc2N0
cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX1QzLCBTQ1RQX1NPX05P
VF9MT0NLRUQpOworCQlkaWRfb3V0cHV0ID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1RJ
TUVSX1RZUEVfTkVXQ09PS0lFOgorCQlLQVNTRVJUKGlucCAhPSBOVUxMICYmIHN0Y2IgPT0gTlVM
TCAmJiBuZXQgPT0gTlVMTCwKKwkJCSgidGltZW91dCBvZiB0eXBlICVkOiBpbnAgPSAlcCwgc3Rj
YiA9ICVwLCBuZXQgPSAlcCIsCisJCQkgdHlwZSwgaW5wLCBzdGNiLCBuZXQpKTsKKwkJU0NUUF9T
VEFUX0lOQ1Ioc2N0cHNfdGltb3NlY3JldCk7CisJCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFM
KCZ0dik7CisJCWlucC0+c2N0cF9lcC50aW1lX29mX3NlY3JldF9jaGFuZ2UgPSB0di50dl9zZWM7
CisJCWlucC0+c2N0cF9lcC5sYXN0X3NlY3JldF9udW1iZXIgPQorCQkgICAgaW5wLT5zY3RwX2Vw
LmN1cnJlbnRfc2VjcmV0X251bWJlcjsKKwkJaW5wLT5zY3RwX2VwLmN1cnJlbnRfc2VjcmV0X251
bWJlcisrOworCQlpZiAoaW5wLT5zY3RwX2VwLmN1cnJlbnRfc2VjcmV0X251bWJlciA+PQorCQkg
ICAgU0NUUF9IT1dfTUFOWV9TRUNSRVRTKSB7CisJCQlpbnAtPnNjdHBfZXAuY3VycmVudF9zZWNy
ZXRfbnVtYmVyID0gMDsKKwkJfQorCQlzZWNyZXQgPSAoaW50KWlucC0+c2N0cF9lcC5jdXJyZW50
X3NlY3JldF9udW1iZXI7CisJCWZvciAoaSA9IDA7IGkgPCBTQ1RQX05VTUJFUl9PRl9TRUNSRVRT
OyBpKyspIHsKKwkJCWlucC0+c2N0cF9lcC5zZWNyZXRfa2V5W3NlY3JldF1baV0gPQorCQkJICAg
IHNjdHBfc2VsZWN0X2luaXRpYWxfVFNOKCZpbnAtPnNjdHBfZXApOworCQl9CisJCXNjdHBfdGlt
ZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX05FV0NPT0tJRSwgaW5wLCBOVUxMLCBOVUxMKTsKKwkJ
ZGlkX291dHB1dCA9IGZhbHNlOworCQlicmVhazsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9QQVRI
TVRVUkFJU0U6CisJCUtBU1NFUlQoaW5wICE9IE5VTEwgJiYgc3RjYiAhPSBOVUxMICYmIG5ldCAh
PSBOVUxMLAorCQkgICAgICAgICgidGltZW91dCBvZiB0eXBlICVkOiBpbnAgPSAlcCwgc3RjYiA9
ICVwLCBuZXQgPSAlcCIsCisJCSAgICAgICAgIHR5cGUsIGlucCwgc3RjYiwgbmV0KSk7CisJCVND
VFBfU1RBVF9JTkNSKHNjdHBzX3RpbW9wYXRobXR1KTsKKwkJc2N0cF9wYXRobXR1X3RpbWVyKGlu
cCwgc3RjYiwgbmV0KTsKKwkJZGlkX291dHB1dCA9IGZhbHNlOworCQlicmVhazsKKwljYXNlIFND
VFBfVElNRVJfVFlQRV9TSFVURE9XTkFDSzoKKwkJS0FTU0VSVChpbnAgIT0gTlVMTCAmJiBzdGNi
ICE9IE5VTEwgJiYgbmV0ICE9IE5VTEwsCisJCSAgICAgICAgKCJ0aW1lb3V0IG9mIHR5cGUgJWQ6
IGlucCA9ICVwLCBzdGNiID0gJXAsIG5ldCA9ICVwIiwKKwkJICAgICAgICAgdHlwZSwgaW5wLCBz
dGNiLCBuZXQpKTsKKwkJaWYgKHNjdHBfc2h1dGRvd25hY2tfdGltZXIoaW5wLCBzdGNiLCBuZXQp
KSB7CisJCQkvKiBubyBuZWVkIHRvIHVubG9jayBvbiB0Y2IgaXRzIGdvbmUgKi8KKwkJCWdvdG8g
b3V0X2RlY3I7CisJCX0KKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfdGltb3NodXRkb3duYWNrKTsK
KwkJc3RjYi0+YXNvYy50aW1vc2h1dGRvd25hY2srKzsKKyNpZmRlZiBTQ1RQX0FVRElUSU5HX0VO
QUJMRUQKKwkJc2N0cF9hdWRpdGluZyg0LCBpbnAsIHN0Y2IsIG5ldCk7CisjZW5kaWYKKwkJc2N0
cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX1NIVVRfQUNLX1RNUiwg
U0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJZGlkX291dHB1dCA9IHRydWU7CisJCWJyZWFrOworCWNh
c2UgU0NUUF9USU1FUl9UWVBFX0FTQ09ORjoKKwkJS0FTU0VSVChpbnAgIT0gTlVMTCAmJiBzdGNi
ICE9IE5VTEwgJiYgbmV0ICE9IE5VTEwsCisJCSAgICAgICAgKCJ0aW1lb3V0IG9mIHR5cGUgJWQ6
IGlucCA9ICVwLCBzdGNiID0gJXAsIG5ldCA9ICVwIiwKKwkJICAgICAgICAgdHlwZSwgaW5wLCBz
dGNiLCBuZXQpKTsKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfdGltb2FzY29uZik7CisJCWlmIChz
Y3RwX2FzY29uZl90aW1lcihpbnAsIHN0Y2IsIG5ldCkpIHsKKwkJCS8qIG5vIG5lZWQgdG8gdW5s
b2NrIG9uIHRjYiBpdHMgZ29uZSAqLworCQkJZ290byBvdXRfZGVjcjsKKwkJfQorI2lmZGVmIFND
VFBfQVVESVRJTkdfRU5BQkxFRAorCQlzY3RwX2F1ZGl0aW5nKDQsIGlucCwgc3RjYiwgbmV0KTsK
KyNlbmRpZgorCQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01f
QVNDT05GX1RNUiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJZGlkX291dHB1dCA9IHRydWU7CisJ
CWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkQ6CisJCUtBU1NFUlQo
aW5wICE9IE5VTEwgJiYgc3RjYiAhPSBOVUxMICYmIG5ldCA9PSBOVUxMLAorCQkgICAgICAgICgi
dGltZW91dCBvZiB0eXBlICVkOiBpbnAgPSAlcCwgc3RjYiA9ICVwLCBuZXQgPSAlcCIsCisJCSAg
ICAgICAgIHR5cGUsIGlucCwgc3RjYiwgbmV0KSk7CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Rp
bW9zaHV0ZG93bmd1YXJkKTsKKwkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUpLAorCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJTaHV0ZG93biBndWFyZCB0aW1lciBleHBpcmVkIik7CisJCXNjdHBfYWJvcnRfYW5f
YXNzb2NpYXRpb24oaW5wLCBzdGNiLCBvcF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCS8q
IG5vIG5lZWQgdG8gdW5sb2NrIG9uIHRjYiBpdHMgZ29uZSAqLworCQlnb3RvIG91dF9kZWNyOwor
CWNhc2UgU0NUUF9USU1FUl9UWVBFX0FVVE9DTE9TRToKKwkJS0FTU0VSVChpbnAgIT0gTlVMTCAm
JiBzdGNiICE9IE5VTEwgJiYgbmV0ID09IE5VTEwsCisJCSAgICAgICAgKCJ0aW1lb3V0IG9mIHR5
cGUgJWQ6IGlucCA9ICVwLCBzdGNiID0gJXAsIG5ldCA9ICVwIiwKKwkJICAgICAgICAgdHlwZSwg
aW5wLCBzdGNiLCBuZXQpKTsKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfdGltb2F1dG9jbG9zZSk7
CisJCXNjdHBfYXV0b2Nsb3NlX3RpbWVyKGlucCwgc3RjYik7CisJCXNjdHBfY2h1bmtfb3V0cHV0
KGlucCwgc3RjYiwgU0NUUF9PVVRQVVRfRlJPTV9BVVRPQ0xPU0VfVE1SLCBTQ1RQX1NPX05PVF9M
T0NLRUQpOworCQlkaWRfb3V0cHV0ID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1RJTUVS
X1RZUEVfU1RSUkVTRVQ6CisJCUtBU1NFUlQoaW5wICE9IE5VTEwgJiYgc3RjYiAhPSBOVUxMICYm
IG5ldCA9PSBOVUxMLAorCQkgICAgICAgICgidGltZW91dCBvZiB0eXBlICVkOiBpbnAgPSAlcCwg
c3RjYiA9ICVwLCBuZXQgPSAlcCIsCisJCSAgICAgICAgIHR5cGUsIGlucCwgc3RjYiwgbmV0KSk7
CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3RpbW9zdHJtcnN0KTsKKwkJaWYgKHNjdHBfc3RycmVz
ZXRfdGltZXIoaW5wLCBzdGNiKSkgeworCQkJLyogbm8gbmVlZCB0byB1bmxvY2sgb24gdGNiIGl0
cyBnb25lICovCisJCQlnb3RvIG91dF9kZWNyOworCQl9CisJCXNjdHBfY2h1bmtfb3V0cHV0KGlu
cCwgc3RjYiwgU0NUUF9PVVRQVVRfRlJPTV9TVFJSU1RfVE1SLCBTQ1RQX1NPX05PVF9MT0NLRUQp
OworCQlkaWRfb3V0cHV0ID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1RJTUVSX1RZUEVf
SU5QS0lMTDoKKwkJS0FTU0VSVChpbnAgIT0gTlVMTCAmJiBzdGNiID09IE5VTEwgJiYgbmV0ID09
IE5VTEwsCisJCSAgICAgICAgKCJ0aW1lb3V0IG9mIHR5cGUgJWQ6IGlucCA9ICVwLCBzdGNiID0g
JXAsIG5ldCA9ICVwIiwKKwkJICAgICAgICAgdHlwZSwgaW5wLCBzdGNiLCBuZXQpKTsKKwkJU0NU
UF9TVEFUX0lOQ1Ioc2N0cHNfdGltb2lucGtpbGwpOworCQkvKgorCQkgKiBzcGVjaWFsIGNhc2Us
IHRha2UgYXdheSBvdXIgaW5jcmVtZW50IHNpbmNlIFdFIGFyZSB0aGUKKwkJICoga2lsbGVyCisJ
CSAqLworCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX0lOUEtJTEwsIGlucCwgTlVM
TCwgTlVMTCwKKwkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQVVRJTCArIFNDVFBfTE9D
XzMpOworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CQlTQ1RQX1NPQ0tFVF9MT0NLKFNDVFBfSU5QX1NPKGlucCksIDEpOworI2VuZGlmCisJCVNDVFBf
SU5QX0RFQ1JfUkVGKGlucCk7CisJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJc2N0cF9pbnBj
Yl9mcmVlKGlucCwgU0NUUF9GUkVFX1NIT1VMRF9VU0VfQUJPUlQsCisJCSAgICAgICAgICAgICAg
ICBTQ1RQX0NBTExFRF9GUk9NX0lOUEtJTExfVElNRVIpOworI2lmIGRlZmluZWQoX19BUFBMRV9f
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soU0NUUF9J
TlBfU08oaW5wKSwgMSk7CisjZW5kaWYKKwkJaW5wID0gTlVMTDsKKwkJZ290byBvdXRfZGVjcjsK
KwljYXNlIFNDVFBfVElNRVJfVFlQRV9BU09DS0lMTDoKKwkJS0FTU0VSVChpbnAgIT0gTlVMTCAm
JiBzdGNiICE9IE5VTEwgJiYgbmV0ID09IE5VTEwsCisJCSAgICAgICAgKCJ0aW1lb3V0IG9mIHR5
cGUgJWQ6IGlucCA9ICVwLCBzdGNiID0gJXAsIG5ldCA9ICVwIiwKKwkJICAgICAgICAgdHlwZSwg
aW5wLCBzdGNiLCBuZXQpKTsKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfdGltb2Fzc29ja2lsbCk7
CisJCS8qIENhbiB3ZSBmcmVlIGl0IHlldD8gKi8KKwkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElN
RVJfVFlQRV9BU09DS0lMTCwgaW5wLCBzdGNiLCBOVUxMLAorCQkgICAgICAgICAgICAgICAgU0NU
UF9GUk9NX1NDVFBVVElMICsgU0NUUF9MT0NfMSk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYm
ICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCXNvID0gU0NUUF9JTlBfU08oaW5wKTsKKwkJYXRv
bWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0
Y2IpOworCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKKwkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsK
KwkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworI2VuZGlmCisJ
CSh2b2lkKXNjdHBfZnJlZV9hc3NvYyhpbnAsIHN0Y2IsIFNDVFBfTk9STUFMX1BST0MsCisJCSAg
ICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUFVUSUwgKyBTQ1RQX0xPQ18yKTsKKyNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJU0NUUF9T
T0NLRVRfVU5MT0NLKHNvLCAxKTsKKyNlbmRpZgorCQkvKgorCQkgKiBmcmVlIGFzb2MsIGFsd2F5
cyB1bmxvY2tzIChvciBkZXN0cm95J3MpIHNvIHByZXZlbnQKKwkJICogZHVwbGljYXRlIHVubG9j
ayBvciB1bmxvY2sgb2YgYSBmcmVlIG10eCA6LTAKKwkJICovCisJCXN0Y2IgPSBOVUxMOworCQln
b3RvIG91dF9kZWNyOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX0FERFJfV1E6CisJCUtBU1NFUlQo
aW5wID09IE5VTEwgJiYgc3RjYiA9PSBOVUxMICYmIG5ldCA9PSBOVUxMLAorCQkgICAgICAgICgi
dGltZW91dCBvZiB0eXBlICVkOiBpbnAgPSAlcCwgc3RjYiA9ICVwLCBuZXQgPSAlcCIsCisJCSAg
ICAgICAgIHR5cGUsIGlucCwgc3RjYiwgbmV0KSk7CisJCXNjdHBfaGFuZGxlX2FkZHJfd3EoKTsK
KwkJZGlkX291dHB1dCA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX1BS
SU1fREVMRVRFRDoKKwkJS0FTU0VSVChpbnAgIT0gTlVMTCAmJiBzdGNiICE9IE5VTEwgJiYgbmV0
ID09IE5VTEwsCisJCSAgICAgICAgKCJ0aW1lb3V0IG9mIHR5cGUgJWQ6IGlucCA9ICVwLCBzdGNi
ID0gJXAsIG5ldCA9ICVwIiwKKwkJICAgICAgICAgdHlwZSwgaW5wLCBzdGNiLCBuZXQpKTsKKwkJ
U0NUUF9TVEFUX0lOQ1Ioc2N0cHNfdGltb2RlbHByaW0pOworCQlzY3RwX2RlbGV0ZV9wcmltX3Rp
bWVyKGlucCwgc3RjYik7CisJCWRpZF9vdXRwdXQgPSBmYWxzZTsKKwkJYnJlYWs7CisJZGVmYXVs
dDoKKyNpZmRlZiBJTlZBUklBTlRTCisJCXBhbmljKCJVbmtub3duIHRpbWVyIHR5cGUgJWQiLCB0
eXBlKTsKKyNlbHNlCisJCWdvdG8gb3V0OworI2VuZGlmCisJfQorI2lmZGVmIFNDVFBfQVVESVRJ
TkdfRU5BQkxFRAorCXNjdHBfYXVkaXRfbG9nKDB4RjEsICh1aW50OF90KSB0eXBlKTsKKwlpZiAo
aW5wICE9IE5VTEwpCisJCXNjdHBfYXVkaXRpbmcoNSwgaW5wLCBzdGNiLCBuZXQpOworI2VuZGlm
CisJaWYgKGRpZF9vdXRwdXQgJiYgKHN0Y2IgIT0gTlVMTCkpIHsKKwkJLyoKKwkJICogTm93IHdl
IG5lZWQgdG8gY2xlYW4gdXAgdGhlIGNvbnRyb2wgY2h1bmsgY2hhaW4gaWYgYW4KKwkJICogRUNO
RSBpcyBvbiBpdC4gSXQgbXVzdCBiZSBtYXJrZWQgYXMgVU5TRU5UIGFnYWluIHNvIG5leHQKKwkJ
ICogY2FsbCB3aWxsIGNvbnRpbnVlIHRvIHNlbmQgaXQgdW50aWwgc3VjaCB0aW1lIHRoYXQgd2Ug
Z2V0CisJCSAqIGEgQ1dSLCB0byByZW1vdmUgaXQuIEl0IGlzLCBob3dldmVyLCBsZXNzIGxpa2Vs
eSB0aGF0IHdlCisJCSAqIHdpbGwgZmluZCBhIGVjbiBlY2hvIG9uIHRoZSBjaGFpbiB0aG91Z2gu
CisJCSAqLworCQlzY3RwX2ZpeF9lY25fZWNobygmc3RjYi0+YXNvYyk7CisJfQorb3V0OgorCWlm
IChzdGNiICE9IE5VTEwpIHsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCX0gZWxzZSBpZiAo
aW5wICE9IE5VTEwpIHsKKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCX0gZWxzZSB7CisJCVND
VFBfV1FfQUREUl9VTkxPQ0soKTsKKwl9CisKK291dF9kZWNyOgorI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKwlpZiAodXBjYWxsX3NvY2tldCAhPSBOVUxMKSB7CisJCWlmICgodXBjYWxsX3Nv
Y2tldC0+c29fdXBjYWxsICE9IE5VTEwpICYmCisJCSAgICAodXBjYWxsX3NvY2tldC0+c29fZXJy
b3IgIT0gMCkpIHsKKwkJCSgqdXBjYWxsX3NvY2tldC0+c29fdXBjYWxsKSh1cGNhbGxfc29ja2V0
LCB1cGNhbGxfc29ja2V0LT5zb191cGNhbGxhcmcsIE1fTk9XQUlUKTsKKwkJfQorCQlBQ0NFUFRf
TE9DSygpOworCQlTT0NLX0xPQ0sodXBjYWxsX3NvY2tldCk7CisJCXNvcmVsZSh1cGNhbGxfc29j
a2V0KTsKKwl9CisjZW5kaWYKKwkvKiBUaGVzZSByZWZlcmVuY2UgY291bnRzIHdlcmUgaW5jcmVt
ZW50ZWQgaW4gc2N0cF90aW1lcl9zdGFydCgpLiAqLworCWlmIChpbnAgIT0gTlVMTCkgeworCQlT
Q1RQX0lOUF9ERUNSX1JFRihpbnApOworCX0KKwlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYgIXJlbGVh
c2VkX2Fzb2NfcmVmZXJlbmNlKSB7CisJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNu
dCwgLTEpOworCX0KKwlpZiAobmV0ICE9IE5VTEwpIHsKKwkJc2N0cF9mcmVlX3JlbW90ZV9hZGRy
KG5ldCk7CisJfQorCVNDVFBEQkcoU0NUUF9ERUJVR19USU1FUjIsICJUaW1lciB0eXBlICVkIGhh
bmRsZXIgZmluaXNoZWQuXG4iLCB0eXBlKTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCUNVUlZORVRfUkVTVE9SRSgpOworCU5FVF9FUE9DSF9F
WElUKGV0KTsKKyNlbmRpZgorfQorCisvKi0KKyAqIFRoZSBmb2xsb3dpbmcgdGFibGUgc2hvd3Mg
d2hpY2ggcGFyYW1ldGVycyBtdXN0IGJlIHByb3ZpZGVkCisgKiB3aGVuIGNhbGxpbmcgc2N0cF90
aW1lcl9zdGFydCgpLiBGb3IgcGFyYW1ldGVycyBub3QgYmVpbmcKKyAqIHByb3ZpZGVkLCBOVUxM
IG11c3QgYmUgdXNlZC4KKyAqCisgKiB8TmFtZSAgICAgICAgICAgICAgICAgICAgICAgICB8aW5w
IHxzdGNifG5ldCB8CisgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLXwtLS0t
fC0tLS18CisgKiB8U0NUUF9USU1FUl9UWVBFX1NFTkQgICAgICAgICB8WWVzIHxZZXMgfFllcyB8
CisgKiB8U0NUUF9USU1FUl9UWVBFX0lOSVQgICAgICAgICB8WWVzIHxZZXMgfFllcyB8CisgKiB8
U0NUUF9USU1FUl9UWVBFX1JFQ1YgICAgICAgICB8WWVzIHxZZXMgfE5vICB8CisgKiB8U0NUUF9U
SU1FUl9UWVBFX1NIVVRET1dOICAgICB8WWVzIHxZZXMgfFllcyB8CisgKiB8U0NUUF9USU1FUl9U
WVBFX0hFQVJUQkVBVCAgICB8WWVzIHxZZXMgfFllcyB8CisgKiB8U0NUUF9USU1FUl9UWVBFX0NP
T0tJRSAgICAgICB8WWVzIHxZZXMgfFllcyB8CisgKiB8U0NUUF9USU1FUl9UWVBFX05FV0NPT0tJ
RSAgICB8WWVzIHxObyAgfE5vICB8CisgKiB8U0NUUF9USU1FUl9UWVBFX1BBVEhNVFVSQUlTRSB8
WWVzIHxZZXMgfFllcyB8CisgKiB8U0NUUF9USU1FUl9UWVBFX1NIVVRET1dOQUNLICB8WWVzIHxZ
ZXMgfFllcyB8CisgKiB8U0NUUF9USU1FUl9UWVBFX0FTQ09ORiAgICAgICB8WWVzIHxZZXMgfFll
cyB8CisgKiB8U0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkR8WWVzIHxZZXMgfE5vICB8Cisg
KiB8U0NUUF9USU1FUl9UWVBFX0FVVE9DTE9TRSAgICB8WWVzIHxZZXMgfE5vICB8CisgKiB8U0NU
UF9USU1FUl9UWVBFX1NUUlJFU0VUICAgICB8WWVzIHxZZXMgfFllcyB8CisgKiB8U0NUUF9USU1F
Ul9UWVBFX0lOUEtJTEwgICAgICB8WWVzIHxObyAgfE5vICB8CisgKiB8U0NUUF9USU1FUl9UWVBF
X0FTT0NLSUxMICAgICB8WWVzIHxZZXMgfE5vICB8CisgKiB8U0NUUF9USU1FUl9UWVBFX0FERFJf
V1EgICAgICB8Tm8gIHxObyAgfE5vICB8CisgKiB8U0NUUF9USU1FUl9UWVBFX1BSSU1fREVMRVRF
RCB8WWVzIHxZZXMgfE5vICB8CisgKgorICovCisKK3ZvaWQKK3NjdHBfdGltZXJfc3RhcnQoaW50
IHRfdHlwZSwgc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLAor
ICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwlzdHJ1Y3Qgc2N0cF90aW1lciAqdG1yOwor
CXVpbnQzMl90IHRvX3RpY2tzOworCXVpbnQzMl90IHJuZHZhbCwgaml0dGVyOworCisJS0FTU0VS
VChzdGNiID09IE5VTEwgfHwgc3RjYi0+c2N0cF9lcCA9PSBpbnAsCisJICAgICAgICAoInNjdHBf
dGltZXJfc3RhcnQgb2YgdHlwZSAlZDogaW5wID0gJXAsIHN0Y2ItPnNjdHBfZXAgJXAiLAorCSAg
ICAgICAgIHRfdHlwZSwgc3RjYiwgc3RjYi0+c2N0cF9lcCkpOworCXRtciA9IE5VTEw7CisJaWYg
KHN0Y2IgIT0gTlVMTCkgeworCQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKwl9IGVsc2Ug
aWYgKGlucCAhPSBOVUxMKSB7CisJCVNDVFBfSU5QX1dMT0NLX0FTU0VSVChpbnApOworCX0gZWxz
ZSB7CisJCVNDVFBfV1FfQUREUl9MT0NLX0FTU0VSVCgpOworCX0KKwlpZiAoc3RjYiAhPSBOVUxM
KSB7CisJCS8qIERvbid0IHJlc3RhcnQgdGltZXIgb24gYXNzb2NpYXRpb24gdGhhdCdzIGFib3V0
IHRvIGJlIGtpbGxlZC4gKi8KKwkJaWYgKChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9B
Qk9VVF9UT19CRV9GUkVFRCkgJiYKKwkJICAgICh0X3R5cGUgIT0gU0NUUF9USU1FUl9UWVBFX0FT
T0NLSUxMKSkgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1RJTUVSMiwKKwkJCQkiVGltZXIgdHlw
ZSAlZCBub3Qgc3RhcnRlZDogaW5wPSVwLCBzdGNiPSVwLCBuZXQ9JXAgKHN0Y2IgZGVsZXRlZCku
XG4iLAorCQkJCXRfdHlwZSwgaW5wLCBzdGNiLCBuZXQpOworCQkJcmV0dXJuOworCQl9CisJCS8q
IERvbid0IHJlc3RhcnQgdGltZXIgb24gbmV0IHRoYXQncyBiZWVuIHJlbW92ZWQuICovCisJCWlm
IChuZXQgIT0gTlVMTCAmJiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX0JFSU5HX0RFTEVU
RUQpKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfVElNRVIyLAorCQkJCSJUaW1lciB0eXBlICVk
IG5vdCBzdGFydGVkOiBpbnA9JXAsIHN0Y2I9JXAsIG5ldD0lcCAobmV0IGRlbGV0ZWQpLlxuIiwK
KwkJCQl0X3R5cGUsIGlucCwgc3RjYiwgbmV0KTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlzd2l0
Y2ggKHRfdHlwZSkgeworCWNhc2UgU0NUUF9USU1FUl9UWVBFX1NFTkQ6CisJCS8qIEhlcmUgd2Ug
dXNlIHRoZSBSVE8gdGltZXIuICovCisJCWlmICgoaW5wID09IE5VTEwpIHx8IChzdGNiID09IE5V
TEwpIHx8IChuZXQgPT0gTlVMTCkpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQlwYW5pYygic2N0
cF90aW1lcl9zdGFydCBvZiB0eXBlICVkOiBpbnAgPSAlcCwgc3RjYiA9ICVwLCBuZXQgPSAlcCIs
CisJCQkgICAgICB0X3R5cGUsIGlucCwgc3RjYiwgbmV0KTsKKyNlbHNlCisJCQlyZXR1cm47Cisj
ZW5kaWYKKwkJfQorCQl0bXIgPSAmbmV0LT5yeHRfdGltZXI7CisJCWlmIChuZXQtPlJUTyA9PSAw
KSB7CisJCQl0b190aWNrcyA9IHNjdHBfbXNlY3NfdG9fdGlja3Moc3RjYi0+YXNvYy5pbml0aWFs
X3J0byk7CisJCX0gZWxzZSB7CisJCQl0b190aWNrcyA9IHNjdHBfbXNlY3NfdG9fdGlja3MobmV0
LT5SVE8pOworCQl9CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX0lOSVQ6CisJCS8q
CisJCSAqIEhlcmUgd2UgdXNlIHRoZSBJTklUIHRpbWVyIGRlZmF1bHQgdXN1YWxseSBhYm91dCAx
CisJCSAqIHNlY29uZC4KKwkJICovCisJCWlmICgoaW5wID09IE5VTEwpIHx8IChzdGNiID09IE5V
TEwpIHx8IChuZXQgPT0gTlVMTCkpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQlwYW5pYygic2N0
cF90aW1lcl9zdGFydCBvZiB0eXBlICVkOiBpbnAgPSAlcCwgc3RjYiA9ICVwLCBuZXQgPSAlcCIs
CisJCQkgICAgICB0X3R5cGUsIGlucCwgc3RjYiwgbmV0KTsKKyNlbHNlCisJCQlyZXR1cm47Cisj
ZW5kaWYKKwkJfQorCQl0bXIgPSAmbmV0LT5yeHRfdGltZXI7CisJCWlmIChuZXQtPlJUTyA9PSAw
KSB7CisJCQl0b190aWNrcyA9IHNjdHBfbXNlY3NfdG9fdGlja3Moc3RjYi0+YXNvYy5pbml0aWFs
X3J0byk7CisJCX0gZWxzZSB7CisJCQl0b190aWNrcyA9IHNjdHBfbXNlY3NfdG9fdGlja3MobmV0
LT5SVE8pOworCQl9CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX1JFQ1Y6CisJCS8q
CisJCSAqIEhlcmUgd2UgdXNlIHRoZSBEZWxheWVkLUFjayB0aW1lciB2YWx1ZSBmcm9tIHRoZSBp
bnAsCisJCSAqIHVzdXN1YWxseSBhYm91dCAyMDBtcy4KKwkJICovCisJCWlmICgoaW5wID09IE5V
TEwpIHx8IChzdGNiID09IE5VTEwpIHx8IChuZXQgIT0gTlVMTCkpIHsKKyNpZmRlZiBJTlZBUklB
TlRTCisJCQlwYW5pYygic2N0cF90aW1lcl9zdGFydCBvZiB0eXBlICVkOiBpbnAgPSAlcCwgc3Rj
YiA9ICVwLCBuZXQgPSAlcCIsCisJCQkgICAgICB0X3R5cGUsIGlucCwgc3RjYiwgbmV0KTsKKyNl
bHNlCisJCQlyZXR1cm47CisjZW5kaWYKKwkJfQorCQl0bXIgPSAmc3RjYi0+YXNvYy5kYWNrX3Rp
bWVyOworCQl0b190aWNrcyA9IHNjdHBfbXNlY3NfdG9fdGlja3Moc3RjYi0+YXNvYy5kZWxheWVk
X2Fjayk7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOOgorCQkvKiBI
ZXJlIHdlIHVzZSB0aGUgUlRPIG9mIHRoZSBkZXN0aW5hdGlvbi4gKi8KKwkJaWYgKChpbnAgPT0g
TlVMTCkgfHwgKHN0Y2IgPT0gTlVMTCkgfHwgKG5ldCA9PSBOVUxMKSkgeworI2lmZGVmIElOVkFS
SUFOVFMKKwkJCXBhbmljKCJzY3RwX3RpbWVyX3N0YXJ0IG9mIHR5cGUgJWQ6IGlucCA9ICVwLCBz
dGNiID0gJXAsIG5ldCA9ICVwIiwKKwkJCSAgICAgIHRfdHlwZSwgaW5wLCBzdGNiLCBuZXQpOwor
I2Vsc2UKKwkJCXJldHVybjsKKyNlbmRpZgorCQl9CisJCXRtciA9ICZuZXQtPnJ4dF90aW1lcjsK
KwkJaWYgKG5ldC0+UlRPID09IDApIHsKKwkJCXRvX3RpY2tzID0gc2N0cF9tc2Vjc190b190aWNr
cyhzdGNiLT5hc29jLmluaXRpYWxfcnRvKTsKKwkJfSBlbHNlIHsKKwkJCXRvX3RpY2tzID0gc2N0
cF9tc2Vjc190b190aWNrcyhuZXQtPlJUTyk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1RJ
TUVSX1RZUEVfSEVBUlRCRUFUOgorCQkvKgorCQkgKiBUaGUgbmV0IGlzIHVzZWQgaGVyZSBzbyB0
aGF0IHdlIGNhbiBhZGQgaW4gdGhlIFJUTy4gRXZlbgorCQkgKiB0aG91Z2ggd2UgdXNlIGEgZGlm
ZmVyZW50IHRpbWVyLiBXZSBhbHNvIGFkZCB0aGUgSEIgdGltZXIKKwkJICogUExVUyBhIHJhbmRv
bSBqaXR0ZXIuCisJCSAqLworCQlpZiAoKGlucCA9PSBOVUxMKSB8fCAoc3RjYiA9PSBOVUxMKSB8
fCAobmV0ID09IE5VTEwpKSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQkJcGFuaWMoInNjdHBfdGlt
ZXJfc3RhcnQgb2YgdHlwZSAlZDogaW5wID0gJXAsIHN0Y2IgPSAlcCwgbmV0ID0gJXAiLAorCQkJ
ICAgICAgdF90eXBlLCBpbnAsIHN0Y2IsIG5ldCk7CisjZWxzZQorCQkJcmV0dXJuOworI2VuZGlm
CisJCX0KKwkJaWYgKChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfTk9IQikgJiYKKwkJICAg
ICEobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1VOQ09ORklSTUVEKSkgeworCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX1RJTUVSMiwKKwkJCSAgICAgICAgIlRpbWVyIHR5cGUgJWQgbm90IHN0YXJ0
ZWQ6IGlucD0lcCwgc3RjYj0lcCwgbmV0PSVwLlxuIiwKKwkJCSAgICAgICAgdF90eXBlLCBpbnAs
IHN0Y2IsIG5ldCk7CisJCQlyZXR1cm47CisJCX0KKwkJdG1yID0gJm5ldC0+aGJfdGltZXI7CisJ
CWlmIChuZXQtPlJUTyA9PSAwKSB7CisJCQl0b190aWNrcyA9IHN0Y2ItPmFzb2MuaW5pdGlhbF9y
dG87CisJCX0gZWxzZSB7CisJCQl0b190aWNrcyA9IG5ldC0+UlRPOworCQl9CisJCXJuZHZhbCA9
IHNjdHBfc2VsZWN0X2luaXRpYWxfVFNOKCZpbnAtPnNjdHBfZXApOworCQlqaXR0ZXIgPSBybmR2
YWwgJSB0b190aWNrczsKKwkJaWYgKHRvX3RpY2tzID4gMSkgeworCQkJdG9fdGlja3MgPj49IDE7
CisJCX0KKwkJaWYgKGppdHRlciA8IChVSU5UMzJfTUFYIC0gdG9fdGlja3MpKSB7CisJCQl0b190
aWNrcyArPSBqaXR0ZXI7CisJCX0gZWxzZSB7CisJCQl0b190aWNrcyA9IFVJTlQzMl9NQVg7CisJ
CX0KKwkJaWYgKCEobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1VOQ09ORklSTUVEKSAmJgor
CQkgICAgIShuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYpKSB7CisJCQlpZiAobmV0LT5o
ZWFydF9iZWF0X2RlbGF5IDwgKFVJTlQzMl9NQVggLSB0b190aWNrcykpIHsKKwkJCQl0b190aWNr
cyArPSBuZXQtPmhlYXJ0X2JlYXRfZGVsYXk7CisJCQl9IGVsc2UgeworCQkJCXRvX3RpY2tzID0g
VUlOVDMyX01BWDsKKwkJCX0KKwkJfQorCQkvKgorCQkgKiBOb3cgd2UgbXVzdCBjb252ZXJ0IHRo
ZSB0b190aWNrcyB0aGF0IGFyZSBub3cgaW4KKwkJICogbXMgdG8gdGlja3MuCisJCSAqLworCQl0
b190aWNrcyA9IHNjdHBfbXNlY3NfdG9fdGlja3ModG9fdGlja3MpOworCQlicmVhazsKKwljYXNl
IFNDVFBfVElNRVJfVFlQRV9DT09LSUU6CisJCS8qCisJCSAqIEhlcmUgd2UgY2FuIHVzZSB0aGUg
UlRPIHRpbWVyIGZyb20gdGhlIG5ldHdvcmsgc2luY2Ugb25lCisJCSAqIFJUVCB3YXMgY29tcGxl
dGUuIElmIGEgcmV0cmFuc21pc3Npb24gaGFwcGVuZWQgdGhlbiB3ZSB3aWxsCisJCSAqIGJlIHVz
aW5nIHRoZSBSVE8gaW5pdGlhbCB2YWx1ZS4KKwkJICovCisJCWlmICgoaW5wID09IE5VTEwpIHx8
IChzdGNiID09IE5VTEwpIHx8IChuZXQgPT0gTlVMTCkpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJ
CQlwYW5pYygic2N0cF90aW1lcl9zdGFydCBvZiB0eXBlICVkOiBpbnAgPSAlcCwgc3RjYiA9ICVw
LCBuZXQgPSAlcCIsCisJCQkgICAgICB0X3R5cGUsIGlucCwgc3RjYiwgbmV0KTsKKyNlbHNlCisJ
CQlyZXR1cm47CisjZW5kaWYKKwkJfQorCQl0bXIgPSAmbmV0LT5yeHRfdGltZXI7CisJCWlmIChu
ZXQtPlJUTyA9PSAwKSB7CisJCQl0b190aWNrcyA9IHNjdHBfbXNlY3NfdG9fdGlja3Moc3RjYi0+
YXNvYy5pbml0aWFsX3J0byk7CisJCX0gZWxzZSB7CisJCQl0b190aWNrcyA9IHNjdHBfbXNlY3Nf
dG9fdGlja3MobmV0LT5SVE8pOworCQl9CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBF
X05FV0NPT0tJRToKKwkJLyoKKwkJICogTm90aGluZyBuZWVkZWQgYnV0IHRoZSBlbmRwb2ludCBo
ZXJlIHVzdXN1YWxseSBhYm91dCA2MAorCQkgKiBtaW51dGVzLgorCQkgKi8KKwkJaWYgKChpbnAg
PT0gTlVMTCkgfHwgKHN0Y2IgIT0gTlVMTCkgfHwgKG5ldCAhPSBOVUxMKSkgeworI2lmZGVmIElO
VkFSSUFOVFMKKwkJCXBhbmljKCJzY3RwX3RpbWVyX3N0YXJ0IG9mIHR5cGUgJWQ6IGlucCA9ICVw
LCBzdGNiID0gJXAsIG5ldCA9ICVwIiwKKwkJCSAgICAgIHRfdHlwZSwgaW5wLCBzdGNiLCBuZXQp
OworI2Vsc2UKKwkJCXJldHVybjsKKyNlbmRpZgorCQl9CisJCXRtciA9ICZpbnAtPnNjdHBfZXAu
c2lnbmF0dXJlX2NoYW5nZTsKKwkJdG9fdGlja3MgPSBpbnAtPnNjdHBfZXAuc2N0cF90aW1lb3V0
dGlja3NbU0NUUF9USU1FUl9TSUdOQVRVUkVdOworCQlicmVhazsKKwljYXNlIFNDVFBfVElNRVJf
VFlQRV9QQVRITVRVUkFJU0U6CisJCS8qCisJCSAqIEhlcmUgd2UgdXNlIHRoZSB2YWx1ZSBmb3Vu
ZCBpbiB0aGUgRVAgZm9yIFBNVFVELCB1c3VzdWFsbHkKKwkJICogYWJvdXQgMTAgbWludXRlcy4K
KwkJICovCisJCWlmICgoaW5wID09IE5VTEwpIHx8IChzdGNiID09IE5VTEwpIHx8IChuZXQgPT0g
TlVMTCkpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQlwYW5pYygic2N0cF90aW1lcl9zdGFydCBv
ZiB0eXBlICVkOiBpbnAgPSAlcCwgc3RjYiA9ICVwLCBuZXQgPSAlcCIsCisJCQkgICAgICB0X3R5
cGUsIGlucCwgc3RjYiwgbmV0KTsKKyNlbHNlCisJCQlyZXR1cm47CisjZW5kaWYKKwkJfQorCQlp
ZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX05PX1BNVFVEKSB7CisJCQlTQ1RQREJHKFND
VFBfREVCVUdfVElNRVIyLAorCQkJICAgICAgICAiVGltZXIgdHlwZSAlZCBub3Qgc3RhcnRlZDog
aW5wPSVwLCBzdGNiPSVwLCBuZXQ9JXAuXG4iLAorCQkJICAgICAgICB0X3R5cGUsIGlucCwgc3Rj
YiwgbmV0KTsKKwkJCXJldHVybjsKKwkJfQorCQl0bXIgPSAmbmV0LT5wbXR1X3RpbWVyOworCQl0
b190aWNrcyA9IGlucC0+c2N0cF9lcC5zY3RwX3RpbWVvdXR0aWNrc1tTQ1RQX1RJTUVSX1BNVFVd
OworCQlicmVhazsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkFDSzoKKwkJLyogSGVy
ZSB3ZSB1c2UgdGhlIFJUTyBvZiB0aGUgZGVzdGluYXRpb24uICovCisJCWlmICgoaW5wID09IE5V
TEwpIHx8IChzdGNiID09IE5VTEwpIHx8IChuZXQgPT0gTlVMTCkpIHsKKyNpZmRlZiBJTlZBUklB
TlRTCisJCQlwYW5pYygic2N0cF90aW1lcl9zdGFydCBvZiB0eXBlICVkOiBpbnAgPSAlcCwgc3Rj
YiA9ICVwLCBuZXQgPSAlcCIsCisJCQkgICAgICB0X3R5cGUsIGlucCwgc3RjYiwgbmV0KTsKKyNl
bHNlCisJCQlyZXR1cm47CisjZW5kaWYKKwkJfQorCQl0bXIgPSAmbmV0LT5yeHRfdGltZXI7CisJ
CWlmIChuZXQtPlJUTyA9PSAwKSB7CisJCQl0b190aWNrcyA9IHNjdHBfbXNlY3NfdG9fdGlja3Mo
c3RjYi0+YXNvYy5pbml0aWFsX3J0byk7CisJCX0gZWxzZSB7CisJCQl0b190aWNrcyA9IHNjdHBf
bXNlY3NfdG9fdGlja3MobmV0LT5SVE8pOworCQl9CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1F
Ul9UWVBFX0FTQ09ORjoKKwkJLyoKKwkJICogSGVyZSB0aGUgdGltZXIgY29tZXMgZnJvbSB0aGUg
c3RjYiBidXQgaXRzIHZhbHVlIGlzIGZyb20KKwkJICogdGhlIG5ldCdzIFJUTy4KKwkJICovCisJ
CWlmICgoaW5wID09IE5VTEwpIHx8IChzdGNiID09IE5VTEwpIHx8IChuZXQgPT0gTlVMTCkpIHsK
KyNpZmRlZiBJTlZBUklBTlRTCisJCQlwYW5pYygic2N0cF90aW1lcl9zdGFydCBvZiB0eXBlICVk
OiBpbnAgPSAlcCwgc3RjYiA9ICVwLCBuZXQgPSAlcCIsCisJCQkgICAgICB0X3R5cGUsIGlucCwg
c3RjYiwgbmV0KTsKKyNlbHNlCisJCQlyZXR1cm47CisjZW5kaWYKKwkJfQorCQl0bXIgPSAmc3Rj
Yi0+YXNvYy5hc2NvbmZfdGltZXI7CisJCWlmIChuZXQtPlJUTyA9PSAwKSB7CisJCQl0b190aWNr
cyA9IHNjdHBfbXNlY3NfdG9fdGlja3Moc3RjYi0+YXNvYy5pbml0aWFsX3J0byk7CisJCX0gZWxz
ZSB7CisJCQl0b190aWNrcyA9IHNjdHBfbXNlY3NfdG9fdGlja3MobmV0LT5SVE8pOworCQl9CisJ
CWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkQ6CisJCS8qCisJCSAq
IEhlcmUgd2UgdXNlIHRoZSBlbmRwb2ludHMgc2h1dGRvd24gZ3VhcmQgdGltZXIgdXN1YWxseQor
CQkgKiBhYm91dCAzIG1pbnV0ZXMuCisJCSAqLworCQlpZiAoKGlucCA9PSBOVUxMKSB8fCAoc3Rj
YiA9PSBOVUxMKSB8fCAobmV0ICE9IE5VTEwpKSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQkJcGFu
aWMoInNjdHBfdGltZXJfc3RhcnQgb2YgdHlwZSAlZDogaW5wID0gJXAsIHN0Y2IgPSAlcCwgbmV0
ID0gJXAiLAorCQkJICAgICAgdF90eXBlLCBpbnAsIHN0Y2IsIG5ldCk7CisjZWxzZQorCQkJcmV0
dXJuOworI2VuZGlmCisJCX0KKwkJdG1yID0gJnN0Y2ItPmFzb2Muc2h1dF9ndWFyZF90aW1lcjsK
KwkJaWYgKGlucC0+c2N0cF9lcC5zY3RwX3RpbWVvdXR0aWNrc1tTQ1RQX1RJTUVSX01BWFNIVVRE
T1dOXSA9PSAwKSB7CisJCQlpZiAoc3RjYi0+YXNvYy5tYXhydG8gPCBVSU5UMzJfTUFYIC8gNSkg
eworCQkJCXRvX3RpY2tzID0gc2N0cF9tc2Vjc190b190aWNrcyg1ICogc3RjYi0+YXNvYy5tYXhy
dG8pOworCQkJfSBlbHNlIHsKKwkJCQl0b190aWNrcyA9IHNjdHBfbXNlY3NfdG9fdGlja3MoVUlO
VDMyX01BWCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQl0b190aWNrcyA9IGlucC0+c2N0cF9lcC5z
Y3RwX3RpbWVvdXR0aWNrc1tTQ1RQX1RJTUVSX01BWFNIVVRET1dOXTsKKwkJfQorCQlicmVhazsK
KwljYXNlIFNDVFBfVElNRVJfVFlQRV9BVVRPQ0xPU0U6CisJCWlmICgoaW5wID09IE5VTEwpIHx8
IChzdGNiID09IE5VTEwpIHx8IChuZXQgIT0gTlVMTCkpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJ
CQlwYW5pYygic2N0cF90aW1lcl9zdGFydCBvZiB0eXBlICVkOiBpbnAgPSAlcCwgc3RjYiA9ICVw
LCBuZXQgPSAlcCIsCisJCQkgICAgICB0X3R5cGUsIGlucCwgc3RjYiwgbmV0KTsKKyNlbHNlCisJ
CQlyZXR1cm47CisjZW5kaWYKKwkJfQorCQl0bXIgPSAmc3RjYi0+YXNvYy5hdXRvY2xvc2VfdGlt
ZXI7CisJCXRvX3RpY2tzID0gc3RjYi0+YXNvYy5zY3RwX2F1dG9jbG9zZV90aWNrczsKKwkJYnJl
YWs7CisJY2FzZSBTQ1RQX1RJTUVSX1RZUEVfU1RSUkVTRVQ6CisJCS8qCisJCSAqIEhlcmUgdGhl
IHRpbWVyIGNvbWVzIGZyb20gdGhlIHN0Y2IgYnV0IGl0cyB2YWx1ZSBpcyBmcm9tCisJCSAqIHRo
ZSBuZXQncyBSVE8uCisJCSAqLworCQlpZiAoKGlucCA9PSBOVUxMKSB8fCAoc3RjYiA9PSBOVUxM
KSB8fCAobmV0ID09IE5VTEwpKSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQkJcGFuaWMoInNjdHBf
dGltZXJfc3RhcnQgb2YgdHlwZSAlZDogaW5wID0gJXAsIHN0Y2IgPSAlcCwgbmV0ID0gJXAiLAor
CQkJICAgICAgdF90eXBlLCBpbnAsIHN0Y2IsIG5ldCk7CisjZWxzZQorCQkJcmV0dXJuOworI2Vu
ZGlmCisJCX0KKwkJdG1yID0gJnN0Y2ItPmFzb2Muc3RycmVzZXRfdGltZXI7CisJCWlmIChuZXQt
PlJUTyA9PSAwKSB7CisJCQl0b190aWNrcyA9IHNjdHBfbXNlY3NfdG9fdGlja3Moc3RjYi0+YXNv
Yy5pbml0aWFsX3J0byk7CisJCX0gZWxzZSB7CisJCQl0b190aWNrcyA9IHNjdHBfbXNlY3NfdG9f
dGlja3MobmV0LT5SVE8pOworCQl9CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX0lO
UEtJTEw6CisJCS8qCisJCSAqIFRoZSBpbnAgaXMgc2V0dXAgdG8gZGllLiBXZSByZS11c2UgdGhl
IHNpZ25hdHVyZV9jaGFnZQorCQkgKiB0aW1lciBzaW5jZSB0aGF0IGhhcyBzdG9wcGVkIGFuZCB3
ZSBhcmUgaW4gdGhlIEdPTkUKKwkJICogc3RhdGUuCisJCSAqLworCQlpZiAoKGlucCA9PSBOVUxM
KSB8fCAoc3RjYiAhPSBOVUxMKSB8fCAobmV0ICE9IE5VTEwpKSB7CisjaWZkZWYgSU5WQVJJQU5U
UworCQkJcGFuaWMoInNjdHBfdGltZXJfc3RhcnQgb2YgdHlwZSAlZDogaW5wID0gJXAsIHN0Y2Ig
PSAlcCwgbmV0ID0gJXAiLAorCQkJICAgICAgdF90eXBlLCBpbnAsIHN0Y2IsIG5ldCk7CisjZWxz
ZQorCQkJcmV0dXJuOworI2VuZGlmCisJCX0KKwkJdG1yID0gJmlucC0+c2N0cF9lcC5zaWduYXR1
cmVfY2hhbmdlOworCQl0b190aWNrcyA9IHNjdHBfbXNlY3NfdG9fdGlja3MoU0NUUF9JTlBfS0lM
TF9USU1FT1VUKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1RJTUVSX1RZUEVfQVNPQ0tJTEw6CisJ
CWlmICgoaW5wID09IE5VTEwpIHx8IChzdGNiID09IE5VTEwpIHx8IChuZXQgIT0gTlVMTCkpIHsK
KyNpZmRlZiBJTlZBUklBTlRTCisJCQlwYW5pYygic2N0cF90aW1lcl9zdGFydCBvZiB0eXBlICVk
OiBpbnAgPSAlcCwgc3RjYiA9ICVwLCBuZXQgPSAlcCIsCisJCQkgICAgICB0X3R5cGUsIGlucCwg
c3RjYiwgbmV0KTsKKyNlbHNlCisJCQlyZXR1cm47CisjZW5kaWYKKwkJfQorCQl0bXIgPSAmc3Rj
Yi0+YXNvYy5zdHJyZXNldF90aW1lcjsKKwkJdG9fdGlja3MgPSBzY3RwX21zZWNzX3RvX3RpY2tz
KFNDVFBfQVNPQ19LSUxMX1RJTUVPVVQpOworCQlicmVhazsKKwljYXNlIFNDVFBfVElNRVJfVFlQ
RV9BRERSX1dROgorCQlpZiAoKGlucCAhPSBOVUxMKSB8fCAoc3RjYiAhPSBOVUxMKSB8fCAobmV0
ICE9IE5VTEwpKSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQkJcGFuaWMoInNjdHBfdGltZXJfc3Rh
cnQgb2YgdHlwZSAlZDogaW5wID0gJXAsIHN0Y2IgPSAlcCwgbmV0ID0gJXAiLAorCQkJICAgICAg
dF90eXBlLCBpbnAsIHN0Y2IsIG5ldCk7CisjZWxzZQorCQkJcmV0dXJuOworI2VuZGlmCisJCX0K
KwkJLyogT25seSAxIHRpY2sgYXdheSA6LSkgKi8KKwkJdG1yID0gJlNDVFBfQkFTRV9JTkZPKGFk
ZHJfd3FfdGltZXIpOworCQl0b190aWNrcyA9IFNDVFBfQUREUkVTU19USUNLX0RFTEFZOworCQli
cmVhazsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9QUklNX0RFTEVURUQ6CisJCWlmICgoaW5wID09
IE5VTEwpIHx8IChzdGNiID09IE5VTEwpIHx8IChuZXQgIT0gTlVMTCkpIHsKKyNpZmRlZiBJTlZB
UklBTlRTCisJCQlwYW5pYygic2N0cF90aW1lcl9zdGFydCBvZiB0eXBlICVkOiBpbnAgPSAlcCwg
c3RjYiA9ICVwLCBuZXQgPSAlcCIsCisJCQkgICAgICB0X3R5cGUsIGlucCwgc3RjYiwgbmV0KTsK
KyNlbHNlCisJCQlyZXR1cm47CisjZW5kaWYKKwkJfQorCQl0bXIgPSAmc3RjYi0+YXNvYy5kZWxl
dGVfcHJpbV90aW1lcjsKKwkJdG9fdGlja3MgPSBzY3RwX21zZWNzX3RvX3RpY2tzKHN0Y2ItPmFz
b2MuaW5pdGlhbF9ydG8pOworCQlicmVhazsKKwlkZWZhdWx0OgorI2lmZGVmIElOVkFSSUFOVFMK
KwkJcGFuaWMoIlVua25vd24gdGltZXIgdHlwZSAlZCIsIHRfdHlwZSk7CisjZWxzZQorCQlyZXR1
cm47CisjZW5kaWYKKwl9CisJS0FTU0VSVCh0bXIgIT0gTlVMTCwgKCJ0bXIgaXMgTlVMTCBmb3Ig
dGltZXIgdHlwZSAlZCIsIHRfdHlwZSkpOworCUtBU1NFUlQodG9fdGlja3MgPiAwLCAoInRvX3Rp
Y2tzID09IDAgZm9yIHRpbWVyIHR5cGUgJWQiLCB0X3R5cGUpKTsKKwlpZiAoU0NUUF9PU19USU1F
Ul9QRU5ESU5HKCZ0bXItPnRpbWVyKSkgeworCQkvKgorCQkgKiBXZSBkbyBOT1QgYWxsb3cgeW91
IHRvIGhhdmUgaXQgYWxyZWFkeSBydW5uaW5nLiBJZiBpdCBpcywKKwkJICogd2UgbGVhdmUgdGhl
IGN1cnJlbnQgb25lIHVwIHVuY2hhbmdlZC4KKwkJICovCisJCVNDVFBEQkcoU0NUUF9ERUJVR19U
SU1FUjIsCisJCSAgICAgICAgIlRpbWVyIHR5cGUgJWQgYWxyZWFkeSBydW5uaW5nOiBpbnA9JXAs
IHN0Y2I9JXAsIG5ldD0lcC5cbiIsCisJCSAgICAgICAgIHRfdHlwZSwgaW5wLCBzdGNiLCBuZXQp
OworCQlyZXR1cm47CisJfQorCS8qIEF0IHRoaXMgcG9pbnQgd2UgY2FuIHByb2NlZWQuICovCisJ
aWYgKHRfdHlwZSA9PSBTQ1RQX1RJTUVSX1RZUEVfU0VORCkgeworCQlzdGNiLT5hc29jLm51bV9z
ZW5kX3RpbWVyc191cCsrOworCX0KKwl0bXItPnN0b3BwZWRfZnJvbSA9IDA7CisJdG1yLT50eXBl
ID0gdF90eXBlOworCXRtci0+ZXAgPSAodm9pZCAqKWlucDsKKwl0bXItPnRjYiA9ICh2b2lkICop
c3RjYjsKKwlpZiAodF90eXBlID09IFNDVFBfVElNRVJfVFlQRV9TVFJSRVNFVCkgeworCQl0bXIt
Pm5ldCA9IE5VTEw7CisJfSBlbHNlIHsKKwkJdG1yLT5uZXQgPSAodm9pZCAqKW5ldDsKKwl9CisJ
dG1yLT5zZWxmID0gKHZvaWQgKil0bXI7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKKwl0bXItPnZuZXQgPSAodm9pZCAqKWN1cnZuZXQ7CisjZW5k
aWYKKwl0bXItPnRpY2tzID0gc2N0cF9nZXRfdGlja19jb3VudCgpOworCWlmIChTQ1RQX09TX1RJ
TUVSX1NUQVJUKCZ0bXItPnRpbWVyLCB0b190aWNrcywgc2N0cF90aW1lb3V0X2hhbmRsZXIsIHRt
cikgPT0gMCkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfVElNRVIyLAorCQkgICAgICAgICJUaW1l
ciB0eXBlICVkIHN0YXJ0ZWQ6IHRpY2tzPSV1LCBpbnA9JXAsIHN0Y2I9JXAsIG5ldD0lcC5cbiIs
CisJCSAgICAgICAgIHRfdHlwZSwgdG9fdGlja3MsIGlucCwgc3RjYiwgbmV0KTsKKwkJLyoKKwkJ
ICogSWYgdGhpcyBpcyBhIG5ld2x5IHNjaGVkdWxlZCBjYWxsb3V0LCBhcyBvcHBvc2VkIHRvIGEK
KwkJICogcmVzY2hlZHVsZWQgb25lLCBpbmNyZW1lbnQgcmVsZXZhbnQgcmVmZXJlbmNlIGNvdW50
cy4KKwkJICovCisJCWlmICh0bXItPmVwICE9IE5VTEwpIHsKKwkJCVNDVFBfSU5QX0lOQ1JfUkVG
KGlucCk7CisJCX0KKwkJaWYgKHRtci0+dGNiICE9IE5VTEwpIHsKKwkJCWF0b21pY19hZGRfaW50
KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCX0KKwkJaWYgKHRtci0+bmV0ICE9IE5VTEwpIHsK
KwkJCWF0b21pY19hZGRfaW50KCZuZXQtPnJlZl9jb3VudCwgMSk7CisJCX0KKwl9IGVsc2Ugewor
CQkvKgorCQkgKiBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBzaW5jZSB3ZSBjaGVja2VkIGZvciBw
ZW5kaW5nCisJCSAqIGFib3ZlLgorCQkgKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1RJTUVSMiwK
KwkJICAgICAgICAiVGltZXIgdHlwZSAlZCByZXN0YXJ0ZWQ6IHRpY2tzPSV1LCBpbnA9JXAsIHN0
Y2I9JXAsIG5ldD0lcC5cbiIsCisJCSAgICAgICAgIHRfdHlwZSwgdG9fdGlja3MsIGlucCwgc3Rj
YiwgbmV0KTsKKwl9CisJcmV0dXJuOworfQorCisvKi0KKyAqIFRoZSBmb2xsb3dpbmcgdGFibGUg
c2hvd3Mgd2hpY2ggcGFyYW1ldGVycyBtdXN0IGJlIHByb3ZpZGVkCisgKiB3aGVuIGNhbGxpbmcg
c2N0cF90aW1lcl9zdG9wKCkuIEZvciBwYXJhbWV0ZXJzIG5vdCBiZWluZworICogcHJvdmlkZWQs
IE5VTEwgbXVzdCBiZSB1c2VkLgorICoKKyAqIHxOYW1lICAgICAgICAgICAgICAgICAgICAgICAg
IHxpbnAgfHN0Y2J8bmV0IHwKKyAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0t
fC0tLS18LS0tLXwKKyAqIHxTQ1RQX1RJTUVSX1RZUEVfU0VORCAgICAgICAgIHxZZXMgfFllcyB8
WWVzIHwKKyAqIHxTQ1RQX1RJTUVSX1RZUEVfSU5JVCAgICAgICAgIHxZZXMgfFllcyB8WWVzIHwK
KyAqIHxTQ1RQX1RJTUVSX1RZUEVfUkVDViAgICAgICAgIHxZZXMgfFllcyB8Tm8gIHwKKyAqIHxT
Q1RQX1RJTUVSX1RZUEVfU0hVVERPV04gICAgIHxZZXMgfFllcyB8WWVzIHwKKyAqIHxTQ1RQX1RJ
TUVSX1RZUEVfSEVBUlRCRUFUICAgIHxZZXMgfFllcyB8WWVzIHwKKyAqIHxTQ1RQX1RJTUVSX1RZ
UEVfQ09PS0lFICAgICAgIHxZZXMgfFllcyB8WWVzIHwKKyAqIHxTQ1RQX1RJTUVSX1RZUEVfTkVX
Q09PS0lFICAgIHxZZXMgfE5vICB8Tm8gIHwKKyAqIHxTQ1RQX1RJTUVSX1RZUEVfUEFUSE1UVVJB
SVNFIHxZZXMgfFllcyB8WWVzIHwKKyAqIHxTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05BQ0sgIHxZ
ZXMgfFllcyB8WWVzIHwKKyAqIHxTQ1RQX1RJTUVSX1RZUEVfQVNDT05GICAgICAgIHxZZXMgfFll
cyB8Tm8gIHwKKyAqIHxTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05HVUFSRHxZZXMgfFllcyB8Tm8g
IHwKKyAqIHxTQ1RQX1RJTUVSX1RZUEVfQVVUT0NMT1NFICAgIHxZZXMgfFllcyB8Tm8gIHwKKyAq
IHxTQ1RQX1RJTUVSX1RZUEVfU1RSUkVTRVQgICAgIHxZZXMgfFllcyB8Tm8gIHwKKyAqIHxTQ1RQ
X1RJTUVSX1RZUEVfSU5QS0lMTCAgICAgIHxZZXMgfE5vICB8Tm8gIHwKKyAqIHxTQ1RQX1RJTUVS
X1RZUEVfQVNPQ0tJTEwgICAgIHxZZXMgfFllcyB8Tm8gIHwKKyAqIHxTQ1RQX1RJTUVSX1RZUEVf
QUREUl9XUSAgICAgIHxObyAgfE5vICB8Tm8gIHwKKyAqIHxTQ1RQX1RJTUVSX1RZUEVfUFJJTV9E
RUxFVEVEIHxZZXMgfFllcyB8Tm8gIHwKKyAqCisgKi8KKwordm9pZAorc2N0cF90aW1lcl9zdG9w
KGludCB0X3R5cGUsIHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAqc3Rj
YiwKKyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIHVpbnQzMl90IGZyb20pCit7CisJc3RydWN0
IHNjdHBfdGltZXIgKnRtcjsKKworCUtBU1NFUlQoc3RjYiA9PSBOVUxMIHx8IHN0Y2ItPnNjdHBf
ZXAgPT0gaW5wLAorCSAgICAgICAgKCJzY3RwX3RpbWVyX3N0b3Agb2YgdHlwZSAlZDogaW5wID0g
JXAsIHN0Y2ItPnNjdHBfZXAgJXAiLAorCSAgICAgICAgIHRfdHlwZSwgc3RjYiwgc3RjYi0+c2N0
cF9lcCkpOworCWlmIChzdGNiICE9IE5VTEwpIHsKKwkJU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3Rj
Yik7CisJfSBlbHNlIGlmIChpbnAgIT0gTlVMTCkgeworCQlTQ1RQX0lOUF9XTE9DS19BU1NFUlQo
aW5wKTsKKwl9IGVsc2UgeworCQlTQ1RQX1dRX0FERFJfTE9DS19BU1NFUlQoKTsKKwl9CisJdG1y
ID0gTlVMTDsKKwlzd2l0Y2ggKHRfdHlwZSkgeworCWNhc2UgU0NUUF9USU1FUl9UWVBFX1NFTkQ6
CisJCWlmICgoaW5wID09IE5VTEwpIHx8IChzdGNiID09IE5VTEwpIHx8IChuZXQgPT0gTlVMTCkp
IHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQlwYW5pYygic2N0cF90aW1lcl9zdG9wIG9mIHR5cGUg
JWQ6IGlucCA9ICVwLCBzdGNiID0gJXAsIG5ldCA9ICVwIiwKKwkJCSAgICAgIHRfdHlwZSwgaW5w
LCBzdGNiLCBuZXQpOworI2Vsc2UKKwkJCXJldHVybjsKKyNlbmRpZgorCQl9CisJCXRtciA9ICZu
ZXQtPnJ4dF90aW1lcjsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1RJTUVSX1RZUEVfSU5JVDoKKwkJ
aWYgKChpbnAgPT0gTlVMTCkgfHwgKHN0Y2IgPT0gTlVMTCkgfHwgKG5ldCA9PSBOVUxMKSkgewor
I2lmZGVmIElOVkFSSUFOVFMKKwkJCXBhbmljKCJzY3RwX3RpbWVyX3N0b3Agb2YgdHlwZSAlZDog
aW5wID0gJXAsIHN0Y2IgPSAlcCwgbmV0ID0gJXAiLAorCQkJICAgICAgdF90eXBlLCBpbnAsIHN0
Y2IsIG5ldCk7CisjZWxzZQorCQkJcmV0dXJuOworI2VuZGlmCisJCX0KKwkJdG1yID0gJm5ldC0+
cnh0X3RpbWVyOworCQlicmVhazsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9SRUNWOgorCQlpZiAo
KGlucCA9PSBOVUxMKSB8fCAoc3RjYiA9PSBOVUxMKSB8fCAobmV0ICE9IE5VTEwpKSB7CisjaWZk
ZWYgSU5WQVJJQU5UUworCQkJcGFuaWMoInNjdHBfdGltZXJfc3RvcCBvZiB0eXBlICVkOiBpbnAg
PSAlcCwgc3RjYiA9ICVwLCBuZXQgPSAlcCIsCisJCQkgICAgICB0X3R5cGUsIGlucCwgc3RjYiwg
bmV0KTsKKyNlbHNlCisJCQlyZXR1cm47CisjZW5kaWYKKwkJfQorCQl0bXIgPSAmc3RjYi0+YXNv
Yy5kYWNrX3RpbWVyOworCQlicmVhazsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTjoK
KwkJaWYgKChpbnAgPT0gTlVMTCkgfHwgKHN0Y2IgPT0gTlVMTCkgfHwgKG5ldCA9PSBOVUxMKSkg
eworI2lmZGVmIElOVkFSSUFOVFMKKwkJCXBhbmljKCJzY3RwX3RpbWVyX3N0b3Agb2YgdHlwZSAl
ZDogaW5wID0gJXAsIHN0Y2IgPSAlcCwgbmV0ID0gJXAiLAorCQkJICAgICAgdF90eXBlLCBpbnAs
IHN0Y2IsIG5ldCk7CisjZWxzZQorCQkJcmV0dXJuOworI2VuZGlmCisJCX0KKwkJdG1yID0gJm5l
dC0+cnh0X3RpbWVyOworCQlicmVhazsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQ6
CisJCWlmICgoaW5wID09IE5VTEwpIHx8IChzdGNiID09IE5VTEwpIHx8IChuZXQgPT0gTlVMTCkp
IHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQlwYW5pYygic2N0cF90aW1lcl9zdG9wIG9mIHR5cGUg
JWQ6IGlucCA9ICVwLCBzdGNiID0gJXAsIG5ldCA9ICVwIiwKKwkJCSAgICAgIHRfdHlwZSwgaW5w
LCBzdGNiLCBuZXQpOworI2Vsc2UKKwkJCXJldHVybjsKKyNlbmRpZgorCQl9CisJCXRtciA9ICZu
ZXQtPmhiX3RpbWVyOworCQlicmVhazsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9DT09LSUU6CisJ
CWlmICgoaW5wID09IE5VTEwpIHx8IChzdGNiID09IE5VTEwpIHx8IChuZXQgPT0gTlVMTCkpIHsK
KyNpZmRlZiBJTlZBUklBTlRTCisJCQlwYW5pYygic2N0cF90aW1lcl9zdG9wIG9mIHR5cGUgJWQ6
IGlucCA9ICVwLCBzdGNiID0gJXAsIG5ldCA9ICVwIiwKKwkJCSAgICAgIHRfdHlwZSwgaW5wLCBz
dGNiLCBuZXQpOworI2Vsc2UKKwkJCXJldHVybjsKKyNlbmRpZgorCQl9CisJCXRtciA9ICZuZXQt
PnJ4dF90aW1lcjsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1RJTUVSX1RZUEVfTkVXQ09PS0lFOgor
CQlpZiAoKGlucCA9PSBOVUxMKSB8fCAoc3RjYiAhPSBOVUxMKSB8fCAobmV0ICE9IE5VTEwpKSB7
CisjaWZkZWYgSU5WQVJJQU5UUworCQkJcGFuaWMoInNjdHBfdGltZXJfc3RvcCBvZiB0eXBlICVk
OiBpbnAgPSAlcCwgc3RjYiA9ICVwLCBuZXQgPSAlcCIsCisJCQkgICAgICB0X3R5cGUsIGlucCwg
c3RjYiwgbmV0KTsKKyNlbHNlCisJCQlyZXR1cm47CisjZW5kaWYKKwkJfQorCQl0bXIgPSAmaW5w
LT5zY3RwX2VwLnNpZ25hdHVyZV9jaGFuZ2U7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9U
WVBFX1BBVEhNVFVSQUlTRToKKwkJaWYgKChpbnAgPT0gTlVMTCkgfHwgKHN0Y2IgPT0gTlVMTCkg
fHwgKG5ldCA9PSBOVUxMKSkgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJCXBhbmljKCJzY3RwX3Rp
bWVyX3N0b3Agb2YgdHlwZSAlZDogaW5wID0gJXAsIHN0Y2IgPSAlcCwgbmV0ID0gJXAiLAorCQkJ
ICAgICAgdF90eXBlLCBpbnAsIHN0Y2IsIG5ldCk7CisjZWxzZQorCQkJcmV0dXJuOworI2VuZGlm
CisJCX0KKwkJdG1yID0gJm5ldC0+cG10dV90aW1lcjsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1RJ
TUVSX1RZUEVfU0hVVERPV05BQ0s6CisJCWlmICgoaW5wID09IE5VTEwpIHx8IChzdGNiID09IE5V
TEwpIHx8IChuZXQgPT0gTlVMTCkpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQlwYW5pYygic2N0
cF90aW1lcl9zdG9wIG9mIHR5cGUgJWQ6IGlucCA9ICVwLCBzdGNiID0gJXAsIG5ldCA9ICVwIiwK
KwkJCSAgICAgIHRfdHlwZSwgaW5wLCBzdGNiLCBuZXQpOworI2Vsc2UKKwkJCXJldHVybjsKKyNl
bmRpZgorCQl9CisJCXRtciA9ICZuZXQtPnJ4dF90aW1lcjsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQ
X1RJTUVSX1RZUEVfQVNDT05GOgorCQlpZiAoKGlucCA9PSBOVUxMKSB8fCAoc3RjYiA9PSBOVUxM
KSB8fCAobmV0ICE9IE5VTEwpKSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQkJcGFuaWMoInNjdHBf
dGltZXJfc3RvcCBvZiB0eXBlICVkOiBpbnAgPSAlcCwgc3RjYiA9ICVwLCBuZXQgPSAlcCIsCisJ
CQkgICAgICB0X3R5cGUsIGlucCwgc3RjYiwgbmV0KTsKKyNlbHNlCisJCQlyZXR1cm47CisjZW5k
aWYKKwkJfQorCQl0bXIgPSAmc3RjYi0+YXNvYy5hc2NvbmZfdGltZXI7CisJCWJyZWFrOworCWNh
c2UgU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkQ6CisJCWlmICgoaW5wID09IE5VTEwpIHx8
IChzdGNiID09IE5VTEwpIHx8IChuZXQgIT0gTlVMTCkpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJ
CQlwYW5pYygic2N0cF90aW1lcl9zdG9wIG9mIHR5cGUgJWQ6IGlucCA9ICVwLCBzdGNiID0gJXAs
IG5ldCA9ICVwIiwKKwkJCSAgICAgIHRfdHlwZSwgaW5wLCBzdGNiLCBuZXQpOworI2Vsc2UKKwkJ
CXJldHVybjsKKyNlbmRpZgorCQl9CisJCXRtciA9ICZzdGNiLT5hc29jLnNodXRfZ3VhcmRfdGlt
ZXI7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX0FVVE9DTE9TRToKKwkJaWYgKChp
bnAgPT0gTlVMTCkgfHwgKHN0Y2IgPT0gTlVMTCkgfHwgKG5ldCAhPSBOVUxMKSkgeworI2lmZGVm
IElOVkFSSUFOVFMKKwkJCXBhbmljKCJzY3RwX3RpbWVyX3N0b3Agb2YgdHlwZSAlZDogaW5wID0g
JXAsIHN0Y2IgPSAlcCwgbmV0ID0gJXAiLAorCQkJICAgICAgdF90eXBlLCBpbnAsIHN0Y2IsIG5l
dCk7CisjZWxzZQorCQkJcmV0dXJuOworI2VuZGlmCisJCX0KKwkJdG1yID0gJnN0Y2ItPmFzb2Mu
YXV0b2Nsb3NlX3RpbWVyOworCQlicmVhazsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9TVFJSRVNF
VDoKKwkJaWYgKChpbnAgPT0gTlVMTCkgfHwgKHN0Y2IgPT0gTlVMTCkgfHwgKG5ldCAhPSBOVUxM
KSkgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJCXBhbmljKCJzY3RwX3RpbWVyX3N0b3Agb2YgdHlw
ZSAlZDogaW5wID0gJXAsIHN0Y2IgPSAlcCwgbmV0ID0gJXAiLAorCQkJICAgICAgdF90eXBlLCBp
bnAsIHN0Y2IsIG5ldCk7CisjZWxzZQorCQkJcmV0dXJuOworI2VuZGlmCisJCX0KKwkJdG1yID0g
JnN0Y2ItPmFzb2Muc3RycmVzZXRfdGltZXI7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9U
WVBFX0lOUEtJTEw6CisJCS8qCisJCSAqIFRoZSBpbnAgaXMgc2V0dXAgdG8gZGllLiBXZSByZS11
c2UgdGhlIHNpZ25hdHVyZV9jaGFnZQorCQkgKiB0aW1lciBzaW5jZSB0aGF0IGhhcyBzdG9wcGVk
IGFuZCB3ZSBhcmUgaW4gdGhlIEdPTkUKKwkJICogc3RhdGUuCisJCSAqLworCQlpZiAoKGlucCA9
PSBOVUxMKSB8fCAoc3RjYiAhPSBOVUxMKSB8fCAobmV0ICE9IE5VTEwpKSB7CisjaWZkZWYgSU5W
QVJJQU5UUworCQkJcGFuaWMoInNjdHBfdGltZXJfc3RvcCBvZiB0eXBlICVkOiBpbnAgPSAlcCwg
c3RjYiA9ICVwLCBuZXQgPSAlcCIsCisJCQkgICAgICB0X3R5cGUsIGlucCwgc3RjYiwgbmV0KTsK
KyNlbHNlCisJCQlyZXR1cm47CisjZW5kaWYKKwkJfQorCQl0bXIgPSAmaW5wLT5zY3RwX2VwLnNp
Z25hdHVyZV9jaGFuZ2U7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX0FTT0NLSUxM
OgorCQlpZiAoKGlucCA9PSBOVUxMKSB8fCAoc3RjYiA9PSBOVUxMKSB8fCAobmV0ICE9IE5VTEwp
KSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQkJcGFuaWMoInNjdHBfdGltZXJfc3RvcCBvZiB0eXBl
ICVkOiBpbnAgPSAlcCwgc3RjYiA9ICVwLCBuZXQgPSAlcCIsCisJCQkgICAgICB0X3R5cGUsIGlu
cCwgc3RjYiwgbmV0KTsKKyNlbHNlCisJCQlyZXR1cm47CisjZW5kaWYKKwkJfQorCQl0bXIgPSAm
c3RjYi0+YXNvYy5zdHJyZXNldF90aW1lcjsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1RJTUVSX1RZ
UEVfQUREUl9XUToKKwkJaWYgKChpbnAgIT0gTlVMTCkgfHwgKHN0Y2IgIT0gTlVMTCkgfHwgKG5l
dCAhPSBOVUxMKSkgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJCXBhbmljKCJzY3RwX3RpbWVyX3N0
b3Agb2YgdHlwZSAlZDogaW5wID0gJXAsIHN0Y2IgPSAlcCwgbmV0ID0gJXAiLAorCQkJICAgICAg
dF90eXBlLCBpbnAsIHN0Y2IsIG5ldCk7CisjZWxzZQorCQkJcmV0dXJuOworI2VuZGlmCisJCX0K
KwkJdG1yID0gJlNDVFBfQkFTRV9JTkZPKGFkZHJfd3FfdGltZXIpOworCQlicmVhazsKKwljYXNl
IFNDVFBfVElNRVJfVFlQRV9QUklNX0RFTEVURUQ6CisJCWlmICgoaW5wID09IE5VTEwpIHx8IChz
dGNiID09IE5VTEwpIHx8IChuZXQgIT0gTlVMTCkpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQlw
YW5pYygic2N0cF90aW1lcl9zdG9wIG9mIHR5cGUgJWQ6IGlucCA9ICVwLCBzdGNiID0gJXAsIG5l
dCA9ICVwIiwKKwkJCSAgICAgIHRfdHlwZSwgaW5wLCBzdGNiLCBuZXQpOworI2Vsc2UKKwkJCXJl
dHVybjsKKyNlbmRpZgorCQl9CisJCXRtciA9ICZzdGNiLT5hc29jLmRlbGV0ZV9wcmltX3RpbWVy
OworCQlicmVhazsKKwlkZWZhdWx0OgorI2lmZGVmIElOVkFSSUFOVFMKKwkJcGFuaWMoIlVua25v
d24gdGltZXIgdHlwZSAlZCIsIHRfdHlwZSk7CisjZWxzZQorCQlyZXR1cm47CisjZW5kaWYKKwl9
CisJS0FTU0VSVCh0bXIgIT0gTlVMTCwgKCJ0bXIgaXMgTlVMTCBmb3IgdGltZXIgdHlwZSAlZCIs
IHRfdHlwZSkpOworCWlmICgodG1yLT50eXBlICE9IFNDVFBfVElNRVJfVFlQRV9OT05FKSAmJgor
CSAgICAodG1yLT50eXBlICE9IHRfdHlwZSkpIHsKKwkJLyoKKwkJICogT2sgd2UgaGF2ZSBhIHRp
bWVyIHRoYXQgaXMgdW5kZXIgam9pbnQgdXNlLiBDb29raWUgdGltZXIKKwkJICogcGVyIGNoYW5j
ZSB3aXRoIHRoZSBTRU5EIHRpbWVyLiBXZSB0aGVyZWZvcmUgYXJlIE5PVAorCQkgKiBydW5uaW5n
IHRoZSB0aW1lciB0aGF0IHRoZSBjYWxsZXIgd2FudHMgc3RvcHBlZC4gIFNvIGp1c3QKKwkJICog
cmV0dXJuLgorCQkgKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1RJTUVSMiwKKwkJICAgICAgICAi
U2hhcmVkIHRpbWVyIHR5cGUgJWQgbm90IHJ1bm5pbmc6IGlucD0lcCwgc3RjYj0lcCwgbmV0PSVw
LlxuIiwKKwkJICAgICAgICAgdF90eXBlLCBpbnAsIHN0Y2IsIG5ldCk7CisJCXJldHVybjsKKwl9
CisJaWYgKCh0X3R5cGUgPT0gU0NUUF9USU1FUl9UWVBFX1NFTkQpICYmIChzdGNiICE9IE5VTEwp
KSB7CisJCXN0Y2ItPmFzb2MubnVtX3NlbmRfdGltZXJzX3VwLS07CisJCWlmIChzdGNiLT5hc29j
Lm51bV9zZW5kX3RpbWVyc191cCA8IDApIHsKKwkJCXN0Y2ItPmFzb2MubnVtX3NlbmRfdGltZXJz
X3VwID0gMDsKKwkJfQorCX0KKwl0bXItPnNlbGYgPSBOVUxMOworCXRtci0+c3RvcHBlZF9mcm9t
ID0gZnJvbTsKKwlpZiAoU0NUUF9PU19USU1FUl9TVE9QKCZ0bXItPnRpbWVyKSA9PSAxKSB7CisJ
CUtBU1NFUlQodG1yLT5lcCA9PSBpbnAsCisJCSAgICAgICAgKCJzY3RwX3RpbWVyX3N0b3Agb2Yg
dHlwZSAlZDogaW5wID0gJXAsIHRtci0+aW5wID0gJXAiLAorCQkgICAgICAgICB0X3R5cGUsIGlu
cCwgdG1yLT5lcCkpOworCQlLQVNTRVJUKHRtci0+dGNiID09IHN0Y2IsCisJCSAgICAgICAgKCJz
Y3RwX3RpbWVyX3N0b3Agb2YgdHlwZSAlZDogc3RjYiA9ICVwLCB0bXItPnN0Y2IgPSAlcCIsCisJ
CSAgICAgICAgIHRfdHlwZSwgc3RjYiwgdG1yLT50Y2IpKTsKKwkJS0FTU0VSVCgoKHRfdHlwZSA9
PSBTQ1RQX1RJTUVSX1RZUEVfQVNDT05GKSAmJiAodG1yLT5uZXQgIT0gTlVMTCkpIHx8CisJCSAg
ICAgICAgKCh0X3R5cGUgIT0gU0NUUF9USU1FUl9UWVBFX0FTQ09ORikgJiYgKHRtci0+bmV0ID09
IG5ldCkpLAorCQkgICAgICAgICgic2N0cF90aW1lcl9zdG9wIG9mIHR5cGUgJWQ6IG5ldCA9ICVw
LCB0bXItPm5ldCA9ICVwIiwKKwkJICAgICAgICAgdF90eXBlLCBuZXQsIHRtci0+bmV0KSk7CisJ
CVNDVFBEQkcoU0NUUF9ERUJVR19USU1FUjIsCisJCSAgICAgICAgIlRpbWVyIHR5cGUgJWQgc3Rv
cHBlZDogaW5wPSVwLCBzdGNiPSVwLCBuZXQ9JXAuXG4iLAorCQkgICAgICAgIHRfdHlwZSwgaW5w
LCBzdGNiLCBuZXQpOworCQkvKgorCQkgKiBJZiB0aGUgdGltZXIgd2FzIGFjdHVhbGx5IHN0b3Bw
ZWQsIGRlY3JlbWVudCByZWZlcmVuY2UgY291bnRzCisJCSAqIHRoYXQgd2VyZSBpbmNyZW1lbnRl
ZCBpbiBzY3RwX3RpbWVyX3N0YXJ0KCkuCisJCSAqLworCQlpZiAodG1yLT5lcCAhPSBOVUxMKSB7
CisJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCQkJdG1yLT5lcCA9IE5VTEw7CisJCX0KKwkJ
aWYgKHRtci0+dGNiICE9IE5VTEwpIHsKKwkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJl
ZmNudCwgLTEpOworCQkJdG1yLT50Y2IgPSBOVUxMOworCQl9CisJCWlmICh0bXItPm5ldCAhPSBO
VUxMKSB7CisJCQkvKgorCQkJICogQ2FuJ3QgdXNlIG5ldCwgc2luY2UgaXQgZG9lc24ndCB3b3Jr
IGZvcgorCQkJICogU0NUUF9USU1FUl9UWVBFX0FTQ09ORi4KKwkJCSAqLworCQkJc2N0cF9mcmVl
X3JlbW90ZV9hZGRyKChzdHJ1Y3Qgc2N0cF9uZXRzICopdG1yLT5uZXQpOworCQkJdG1yLT5uZXQg
PSBOVUxMOworCQl9CisJfSBlbHNlIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1RJTUVSMiwKKwkJ
ICAgICAgICAiVGltZXIgdHlwZSAlZCBub3Qgc3RvcHBlZDogaW5wPSVwLCBzdGNiPSVwLCBuZXQ9
JXAuXG4iLAorCQkgICAgICAgICB0X3R5cGUsIGlucCwgc3RjYiwgbmV0KTsKKwl9CisJcmV0dXJu
OworfQorCit1aW50MzJfdAorc2N0cF9jYWxjdWxhdGVfbGVuKHN0cnVjdCBtYnVmICptKQorewor
CXVpbnQzMl90IHRsZW4gPSAwOworCXN0cnVjdCBtYnVmICphdDsKKworCWF0ID0gbTsKKwl3aGls
ZSAoYXQpIHsKKwkJdGxlbiArPSBTQ1RQX0JVRl9MRU4oYXQpOworCQlhdCA9IFNDVFBfQlVGX05F
WFQoYXQpOworCX0KKwlyZXR1cm4gKHRsZW4pOworfQorCit2b2lkCitzY3RwX210dV9zaXplX3Jl
c2V0KHN0cnVjdCBzY3RwX2lucGNiICppbnAsCisgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24g
KmFzb2MsIHVpbnQzMl90IG10dSkKK3sKKwkvKgorCSAqIFJlc2V0IHRoZSBQLU1UVSBzaXplIG9u
IHRoaXMgYXNzb2NpYXRpb24sIHRoaXMgaW52b2x2ZXMgY2hhbmdpbmcKKwkgKiB0aGUgYXNvYyBN
VFUsIGdvaW5nIHRocm91Z2ggQU5ZIGNodW5rK292ZXJoZWFkIGxhcmdlciB0aGFuIG10dSB0bwor
CSAqIGFsbG93IHRoZSBERiBmbGFnIHRvIGJlIGNsZWFyZWQuCisJICovCisJc3RydWN0IHNjdHBf
dG1pdF9jaHVuayAqY2hrOworCXVuc2lnbmVkIGludCBlZmZfbXR1LCBvdmg7CisKKwlhc29jLT5z
bWFsbGVzdF9tdHUgPSBtdHU7CisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0JPVU5EX1Y2KSB7CisJCW92aCA9IFNDVFBfTUlOX09WRVJIRUFEOworCX0gZWxzZSB7CisJCW92
aCA9IFNDVFBfTUlOX1Y0X09WRVJIRUFEOworCX0KKwllZmZfbXR1ID0gbXR1IC0gb3ZoOworCVRB
SUxRX0ZPUkVBQ0goY2hrLCAmYXNvYy0+c2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJCWlmIChj
aGstPnNlbmRfc2l6ZSA+IGVmZl9tdHUpIHsKKwkJCWNoay0+ZmxhZ3MgfD0gQ0hVTktfRkxBR1Nf
RlJBR01FTlRfT0s7CisJCX0KKwl9CisJVEFJTFFfRk9SRUFDSChjaGssICZhc29jLT5zZW50X3F1
ZXVlLCBzY3RwX25leHQpIHsKKwkJaWYgKGNoay0+c2VuZF9zaXplID4gZWZmX210dSkgeworCQkJ
Y2hrLT5mbGFncyB8PSBDSFVOS19GTEFHU19GUkFHTUVOVF9PSzsKKwkJfQorCX0KK30KKworLyoK
KyAqIEdpdmVuIGFuIGFzc29jaWF0aW9uIGFuZCBzdGFydGluZyB0aW1lIG9mIHRoZSBjdXJyZW50
IFJUVCBwZXJpb2QsIHVwZGF0ZQorICogUlRPIGluIG51bWJlciBvZiBtc2Vjcy4gbmV0IHNob3Vs
ZCBwb2ludCB0byB0aGUgY3VycmVudCBuZXR3b3JrLgorICogUmV0dXJuIDEsIGlmIGFuIFJUTyB1
cGRhdGUgd2FzIHBlcmZvcm1lZCwgcmV0dXJuIDAgaWYgbm8gdXBkYXRlIHdhcworICogcGVyZm9y
bWVkIGR1ZSB0byBpbnZhbGlkIHN0YXJ0aW5nIHBvaW50LgorICovCisKK2ludAorc2N0cF9jYWxj
dWxhdGVfcnRvKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKwkJICAgc3RydWN0IHNjdHBfYXNzb2Np
YXRpb24gKmFzb2MsCisJCSAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKKwkJICAgc3RydWN0IHRp
bWV2YWwgKm9sZCwKKwkJICAgaW50IHJ0dF9mcm9tX3NhY2spCit7CisJc3RydWN0IHRpbWV2YWwg
bm93OworCXVpbnQ2NF90IHJ0dF91czsJLyogUlRUIGluIHVzICovCisJaW50MzJfdCBydHQ7CQkv
KiBSVFQgaW4gbXMgKi8KKwl1aW50MzJfdCBuZXdfcnRvOworCWludCBmaXJzdF9tZWFzdXJlID0g
MDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogMS4gY2FsY3VsYXRlIG5ldyBS
VFQgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIGdldCB0aGUgY3VycmVudCB0
aW1lICovCisJaWYgKHN0Y2ItPmFzb2MudXNlX3ByZWNpc2VfdGltZSkgeworCQkodm9pZClTQ1RQ
X0dFVFBUSU1FX1RJTUVWQUwoJm5vdyk7CisJfSBlbHNlIHsKKwkJKHZvaWQpU0NUUF9HRVRUSU1F
X1RJTUVWQUwoJm5vdyk7CisJfQorCWlmICgob2xkLT50dl9zZWMgPiBub3cudHZfc2VjKSB8fAor
CSAgICAoKG9sZC0+dHZfc2VjID09IG5vdy50dl9zZWMpICYmIChvbGQtPnR2X3VzZWMgPiBub3cu
dHZfdXNlYykpKSB7CisJCS8qIFRoZSBzdGFydGluZyBwb2ludCBpcyBpbiB0aGUgZnV0dXJlLiAq
LworCQlyZXR1cm4gKDApOworCX0KKwl0aW1ldmFsc3ViKCZub3csIG9sZCk7CisJcnR0X3VzID0g
KHVpbnQ2NF90KTEwMDAwMDAgKiAodWludDY0X3Qpbm93LnR2X3NlYyArICh1aW50NjRfdClub3cu
dHZfdXNlYzsKKwlpZiAocnR0X3VzID4gU0NUUF9SVE9fVVBQRVJfQk9VTkQgKiAxMDAwKSB7CisJ
CS8qIFRoZSBSVFQgaXMgbGFyZ2VyIHRoYW4gYSBzYW5lIHZhbHVlLiAqLworCQlyZXR1cm4gKDAp
OworCX0KKwkvKiBzdG9yZSB0aGUgY3VycmVudCBSVFQgaW4gdXMgKi8KKwluZXQtPnJ0dCA9IHJ0
dF91czsKKwkvKiBjb21wdXRlIHJ0dCBpbiBtcyAqLworCXJ0dCA9IChpbnQzMl90KShuZXQtPnJ0
dCAvIDEwMDApOworCWlmICgoYXNvYy0+Y2NfZnVuY3Rpb25zLnNjdHBfcnR0X2NhbGN1bGF0ZWQp
ICYmIChydHRfZnJvbV9zYWNrID09IFNDVFBfUlRUX0ZST01fREFUQSkpIHsKKwkJLyogVGVsbCB0
aGUgQ0MgbW9kdWxlIHRoYXQgYSBuZXcgdXBkYXRlIGhhcyBqdXN0IG9jY3VycmVkIGZyb20gYSBz
YWNrICovCisJCSgqYXNvYy0+Y2NfZnVuY3Rpb25zLnNjdHBfcnR0X2NhbGN1bGF0ZWQpKHN0Y2Is
IG5ldCwgJm5vdyk7CisJfQorCS8qIERvIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBsYW4/IFdl
IGRvIHRoaXMgb25seQorCSAqIG9uIHNhY2tzIGkuZS4gUlRUIGJlaW5nIGRldGVybWluZWQgZnJv
bSBkYXRhIG5vdAorCSAqIG5vbi1kYXRhIChIQi9JTklULT5JTklUQUNLKS4KKwkgKi8KKwlpZiAo
KHJ0dF9mcm9tX3NhY2sgPT0gU0NUUF9SVFRfRlJPTV9EQVRBKSAmJgorCSAgICAobmV0LT5sYW5f
dHlwZSA9PSBTQ1RQX0xBTl9VTktOT1dOKSkgeworCQlpZiAobmV0LT5ydHQgPiBTQ1RQX0xPQ0FM
X0xBTl9SVFQpIHsKKwkJCW5ldC0+bGFuX3R5cGUgPSBTQ1RQX0xBTl9JTlRFUk5FVDsKKwkJfSBl
bHNlIHsKKwkJCW5ldC0+bGFuX3R5cGUgPSBTQ1RQX0xBTl9MT0NBTDsKKwkJfQorCX0KKworCS8q
KioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogMi4gdXBkYXRlIFJUVFZBUiAmIFNSVFQg
Ki8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qLQorCSAqIENvbXB1dGUgdGhl
IHNjYWxlZCBhdmVyYWdlIGxhc3RzYSBhbmQgdGhlCisJICogc2NhbGVkIHZhcmlhbmNlIGxhc3Rz
diBhcyBkZXNjcmliZWQgaW4gdmFuIEphY29ic29uCisJICogUGFwZXIgIkNvbmdlc3Rpb24gQXZv
aWRhbmNlIGFuZCBDb250cm9sIiwgQW5uZXggQS4KKwkgKgorCSAqIChuZXQtPmxhc3RzYSA+PiBT
Q1RQX1JUVF9TSElGVCkgaXMgdGhlIHNydHQKKwkgKiAobmV0LT5sYXN0c3YgPj4gU0NUUF9SVFRf
VkFSX1NISUZUKSBpcyB0aGUgcnR0dmFyCisJICovCisJaWYgKG5ldC0+UlRPX21lYXN1cmVkKSB7
CisJCXJ0dCAtPSAobmV0LT5sYXN0c2EgPj4gU0NUUF9SVFRfU0hJRlQpOworCQluZXQtPmxhc3Rz
YSArPSBydHQ7CisJCWlmIChydHQgPCAwKSB7CisJCQlydHQgPSAtcnR0OworCQl9CisJCXJ0dCAt
PSAobmV0LT5sYXN0c3YgPj4gU0NUUF9SVFRfVkFSX1NISUZUKTsKKwkJbmV0LT5sYXN0c3YgKz0g
cnR0OworCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9S
VFRWQVJfTE9HR0lOR19FTkFCTEUpIHsKKwkJCXJ0b19sb2dnaW5nKG5ldCwgU0NUUF9MT0dfUlRU
VkFSKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIEZpcnN0IFJUTyBtZWFzdXJtZW50ICovCisJCW5l
dC0+UlRPX21lYXN1cmVkID0gMTsKKwkJZmlyc3RfbWVhc3VyZSA9IDE7CisJCW5ldC0+bGFzdHNh
ID0gcnR0IDw8IFNDVFBfUlRUX1NISUZUOworCQluZXQtPmxhc3RzdiA9IChydHQgLyAyKSA8PCBT
Q1RQX1JUVF9WQVJfU0hJRlQ7CisJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19s
ZXZlbCkgJiBTQ1RQX1JUVFZBUl9MT0dHSU5HX0VOQUJMRSkgeworCQkJcnRvX2xvZ2dpbmcobmV0
LCBTQ1RQX0xPR19JTklUSUFMX1JUVCk7CisJCX0KKwl9CisJaWYgKG5ldC0+bGFzdHN2ID09IDAp
IHsKKwkJbmV0LT5sYXN0c3YgPSBTQ1RQX0NMT0NLX0dSQU5VTEFSSVRZOworCX0KKwluZXdfcnRv
ID0gKG5ldC0+bGFzdHNhID4+IFNDVFBfUlRUX1NISUZUKSArIG5ldC0+bGFzdHN2OworCWlmICgo
bmV3X3J0byA+IFNDVFBfU0FUX05FVFdPUktfTUlOKSAmJgorCSAgICAoc3RjYi0+YXNvYy5zYXRf
bmV0d29ya19sb2Nrb3V0ID09IDApKSB7CisJCXN0Y2ItPmFzb2Muc2F0X25ldHdvcmsgPSAxOwor
CX0gZWxzZSBpZiAoKCFmaXJzdF9tZWFzdXJlKSAmJiBzdGNiLT5hc29jLnNhdF9uZXR3b3JrKSB7
CisJCXN0Y2ItPmFzb2Muc2F0X25ldHdvcmsgPSAwOworCQlzdGNiLT5hc29jLnNhdF9uZXR3b3Jr
X2xvY2tvdXQgPSAxOworCX0KKwkvKiBib3VuZCBpdCwgcGVyIEM2L0M3IGluIFNlY3Rpb24gNS4z
LjEgKi8KKwlpZiAobmV3X3J0byA8IHN0Y2ItPmFzb2MubWlucnRvKSB7CisJCW5ld19ydG8gPSBz
dGNiLT5hc29jLm1pbnJ0bzsKKwl9CisJaWYgKG5ld19ydG8gPiBzdGNiLT5hc29jLm1heHJ0bykg
eworCQluZXdfcnRvID0gc3RjYi0+YXNvYy5tYXhydG87CisJfQorCW5ldC0+UlRPID0gbmV3X3J0
bzsKKwlyZXR1cm4gKDEpOworfQorCisvKgorICogcmV0dXJuIGEgcG9pbnRlciB0byBhIGNvbnRp
Z3VvdXMgcGllY2Ugb2YgZGF0YSBmcm9tIHRoZSBnaXZlbiBtYnVmIGNoYWluCisgKiBzdGFydGlu
ZyBhdCAnb2ZmJyBmb3IgJ2xlbicgYnl0ZXMuICBJZiB0aGUgZGVzaXJlZCBwaWVjZSBzcGFucyBt
b3JlIHRoYW4KKyAqIG9uZSBtYnVmLCBhIGNvcHkgaXMgbWFkZSBhdCAncHRyJy4gY2FsbGVyIG11
c3QgZW5zdXJlIHRoYXQgdGhlIGJ1ZmZlciBzaXplCisgKiBpcyA+PSAnbGVuJyByZXR1cm5zIE5V
TEwgaWYgdGhlcmUgdGhlcmUgaXNuJ3QgJ2xlbicgYnl0ZXMgaW4gdGhlIGNoYWluLgorICovCitj
YWRkcl90CitzY3RwX21fZ2V0cHRyKHN0cnVjdCBtYnVmICptLCBpbnQgb2ZmLCBpbnQgbGVuLCB1
aW50OF90ICogaW5fcHRyKQoreworCXVpbnQzMl90IGNvdW50OworCXVpbnQ4X3QgKnB0cjsKKwor
CXB0ciA9IGluX3B0cjsKKwlpZiAoKG9mZiA8IDApIHx8IChsZW4gPD0gMCkpCisJCXJldHVybiAo
TlVMTCk7CisKKwkvKiBmaW5kIHRoZSBkZXNpcmVkIHN0YXJ0IGxvY2F0aW9uICovCisJd2hpbGUg
KChtICE9IE5VTEwpICYmIChvZmYgPiAwKSkgeworCQlpZiAob2ZmIDwgU0NUUF9CVUZfTEVOKG0p
KQorCQkJYnJlYWs7CisJCW9mZiAtPSBTQ1RQX0JVRl9MRU4obSk7CisJCW0gPSBTQ1RQX0JVRl9O
RVhUKG0pOworCX0KKwlpZiAobSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCisJLyogaXMg
dGhlIGN1cnJlbnQgbWJ1ZiBsYXJnZSBlbm91Z2ggKGVnLiBjb250aWd1b3VzKT8gKi8KKwlpZiAo
KFNDVFBfQlVGX0xFTihtKSAtIG9mZikgPj0gbGVuKSB7CisJCXJldHVybiAobXRvZChtLCBjYWRk
cl90KSArIG9mZik7CisJfSBlbHNlIHsKKwkJLyogZWxzZSwgaXQgc3BhbnMgbW9yZSB0aGFuIG9u
ZSBtYnVmLCBzbyBzYXZlIGEgdGVtcCBjb3B5Li4uICovCisJCXdoaWxlICgobSAhPSBOVUxMKSAm
JiAobGVuID4gMCkpIHsKKwkJCWNvdW50ID0gbWluKFNDVFBfQlVGX0xFTihtKSAtIG9mZiwgbGVu
KTsKKwkJCW1lbWNweShwdHIsIG10b2QobSwgY2FkZHJfdCkgKyBvZmYsIGNvdW50KTsKKwkJCWxl
biAtPSBjb3VudDsKKwkJCXB0ciArPSBjb3VudDsKKwkJCW9mZiA9IDA7CisJCQltID0gU0NUUF9C
VUZfTkVYVChtKTsKKwkJfQorCQlpZiAoKG0gPT0gTlVMTCkgJiYgKGxlbiA+IDApKQorCQkJcmV0
dXJuIChOVUxMKTsKKwkJZWxzZQorCQkJcmV0dXJuICgoY2FkZHJfdClpbl9wdHIpOworCX0KK30K
Kworc3RydWN0IHNjdHBfcGFyYW1oZHIgKgorc2N0cF9nZXRfbmV4dF9wYXJhbShzdHJ1Y3QgbWJ1
ZiAqbSwKKyAgICBpbnQgb2Zmc2V0LAorICAgIHN0cnVjdCBzY3RwX3BhcmFtaGRyICpwdWxsLAor
ICAgIGludCBwdWxsX2xpbWl0KQoreworCS8qIFRoaXMganVzdCBwcm92aWRlcyBhIHR5cGVkIHNp
Z25hdHVyZSB0byBQZXRlcidzIFB1bGwgcm91dGluZSAqLworCXJldHVybiAoKHN0cnVjdCBzY3Rw
X3BhcmFtaGRyICopc2N0cF9tX2dldHB0cihtLCBvZmZzZXQsIHB1bGxfbGltaXQsCisJICAgICh1
aW50OF90ICopIHB1bGwpKTsKK30KKworc3RydWN0IG1idWYgKgorc2N0cF9hZGRfcGFkX3RvbWJ1
ZihzdHJ1Y3QgbWJ1ZiAqbSwgaW50IHBhZGxlbikKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbV9sYXN0Owor
CWNhZGRyX3QgZHA7CisKKwlpZiAocGFkbGVuID4gMykgeworCQlyZXR1cm4gKE5VTEwpOworCX0K
KwlpZiAocGFkbGVuIDw9IE1fVFJBSUxJTkdTUEFDRShtKSkgeworCQkvKgorCQkgKiBUaGUgZWFz
eSB3YXkuIFdlIGhvcGUgdGhlIG1ham9yaXR5IG9mIHRoZSB0aW1lIHdlIGhpdAorCQkgKiBoZXJl
IDopCisJCSAqLworCQltX2xhc3QgPSBtOworCX0gZWxzZSB7CisJCS8qIEhhcmQgd2F5IHdlIG11
c3QgZ3JvdyB0aGUgbWJ1ZiBjaGFpbiAqLworCQltX2xhc3QgPSBzY3RwX2dldF9tYnVmX2Zvcl9t
c2cocGFkbGVuLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJCWlmIChtX2xhc3QgPT0gTlVM
TCkgeworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQlTQ1RQX0JVRl9MRU4obV9sYXN0KSA9IDA7
CisJCVNDVFBfQlVGX05FWFQobV9sYXN0KSA9IE5VTEw7CisJCVNDVFBfQlVGX05FWFQobSkgPSBt
X2xhc3Q7CisJfQorCWRwID0gbXRvZChtX2xhc3QsIGNhZGRyX3QpICsgU0NUUF9CVUZfTEVOKG1f
bGFzdCk7CisJU0NUUF9CVUZfTEVOKG1fbGFzdCkgKz0gcGFkbGVuOworCW1lbXNldChkcCwgMCwg
cGFkbGVuKTsKKwlyZXR1cm4gKG1fbGFzdCk7Cit9CisKK3N0cnVjdCBtYnVmICoKK3NjdHBfcGFk
X2xhc3RtYnVmKHN0cnVjdCBtYnVmICptLCBpbnQgcGFkdmFsLCBzdHJ1Y3QgbWJ1ZiAqbGFzdF9t
YnVmKQoreworCS8qIGZpbmQgdGhlIGxhc3QgbWJ1ZiBpbiBjaGFpbiBhbmQgcGFkIGl0ICovCisJ
c3RydWN0IG1idWYgKm1fYXQ7CisKKwlpZiAobGFzdF9tYnVmICE9IE5VTEwpIHsKKwkJcmV0dXJu
IChzY3RwX2FkZF9wYWRfdG9tYnVmKGxhc3RfbWJ1ZiwgcGFkdmFsKSk7CisJfSBlbHNlIHsKKwkJ
Zm9yIChtX2F0ID0gbTsgbV9hdDsgbV9hdCA9IFNDVFBfQlVGX05FWFQobV9hdCkpIHsKKwkJCWlm
IChTQ1RQX0JVRl9ORVhUKG1fYXQpID09IE5VTEwpIHsKKwkJCQlyZXR1cm4gKHNjdHBfYWRkX3Bh
ZF90b21idWYobV9hdCwgcGFkdmFsKSk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIChOVUxMKTsK
K30KKworc3RhdGljIHZvaWQKK3NjdHBfbm90aWZ5X2Fzc29jX2NoYW5nZSh1aW50MTZfdCBzdGF0
ZSwgc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgIHVpbnQxNl90IGVycm9yLCBzdHJ1Y3Qgc2N0
cF9hYm9ydF9jaHVuayAqYWJvcnQsIHVpbnQ4X3QgZnJvbV9wZWVyLCBpbnQgc29fbG9ja2VkKQor
eworCXN0cnVjdCBtYnVmICptX25vdGlmeTsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UgKnNh
YzsKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbDsKKwl1bnNpZ25lZCBpbnQg
bm90aWZfbGVuOworCXVpbnQxNl90IGFib3J0X2xlbjsKKwl1bnNpZ25lZCBpbnQgaTsKKyNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlzdHJ1Y3Qgc29j
a2V0ICpzbzsKKyNlbmRpZgorCisJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQlyZXR1cm47CisJfQor
CWlmIChzY3RwX3N0Y2JfaXNfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1BD
Ql9GTEFHU19SRUNWQVNTT0NFVk5UKSkgeworCQlub3RpZl9sZW4gPSAodW5zaWduZWQgaW50KXNp
emVvZihzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UpOworCQlpZiAoYWJvcnQgIT0gTlVMTCkgewor
CQkJYWJvcnRfbGVuID0gbnRvaHMoYWJvcnQtPmNoLmNodW5rX2xlbmd0aCk7CisJCQkvKgorCQkJ
ICogT25seSBTQ1RQX0NIVU5LX0JVRkZFUl9TSVpFIGFyZSBndWFyYW50ZWVkIHRvIGJlCisJCQkg
KiBjb250aWd1b3VzLgorCQkJICovCisJCQlpZiAoYWJvcnRfbGVuID4gU0NUUF9DSFVOS19CVUZG
RVJfU0laRSkgeworCQkJCWFib3J0X2xlbiA9IFNDVFBfQ0hVTktfQlVGRkVSX1NJWkU7CisJCQl9
CisJCX0gZWxzZSB7CisJCQlhYm9ydF9sZW4gPSAwOworCQl9CisJCWlmICgoc3RhdGUgPT0gU0NU
UF9DT01NX1VQKSB8fCAoc3RhdGUgPT0gU0NUUF9SRVNUQVJUKSkgeworCQkJbm90aWZfbGVuICs9
IFNDVFBfQVNTT0NfU1VQUE9SVFNfTUFYOworCQl9IGVsc2UgaWYgKChzdGF0ZSA9PSBTQ1RQX0NP
TU1fTE9TVCkgfHwgKHN0YXRlID09IFNDVFBfQ0FOVF9TVFJfQVNTT0MpKSB7CisJCQlub3RpZl9s
ZW4gKz0gYWJvcnRfbGVuOworCQl9CisJCW1fbm90aWZ5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNn
KG5vdGlmX2xlbiwgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOworCQlpZiAobV9ub3RpZnkgPT0g
TlVMTCkgeworCQkJLyogUmV0cnkgd2l0aCBzbWFsbGVyIHZhbHVlLiAqLworCQkJbm90aWZfbGVu
ID0gKHVuc2lnbmVkIGludClzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfY2hhbmdlKTsKKwkJCW1f
bm90aWZ5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKG5vdGlmX2xlbiwgMCwgTV9OT1dBSVQsIDEs
IE1UX0RBVEEpOworCQkJaWYgKG1fbm90aWZ5ID09IE5VTEwpIHsKKwkJCQlnb3RvIHNldF9lcnJv
cjsKKwkJCX0KKwkJfQorCQlTQ1RQX0JVRl9ORVhUKG1fbm90aWZ5KSA9IE5VTEw7CisJCXNhYyA9
IG10b2QobV9ub3RpZnksIHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSAqKTsKKwkJbWVtc2V0KHNh
YywgMCwgbm90aWZfbGVuKTsKKwkJc2FjLT5zYWNfdHlwZSA9IFNDVFBfQVNTT0NfQ0hBTkdFOwor
CQlzYWMtPnNhY19mbGFncyA9IDA7CisJCXNhYy0+c2FjX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qg
c2N0cF9hc3NvY19jaGFuZ2UpOworCQlzYWMtPnNhY19zdGF0ZSA9IHN0YXRlOworCQlzYWMtPnNh
Y19lcnJvciA9IGVycm9yOworCQkvKiBYWFggdmVyaWZ5IHRoZXNlIHN0cmVhbSBjb3VudHMgKi8K
KwkJc2FjLT5zYWNfb3V0Ym91bmRfc3RyZWFtcyA9IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250Owor
CQlzYWMtPnNhY19pbmJvdW5kX3N0cmVhbXMgPSBzdGNiLT5hc29jLnN0cmVhbWluY250OworCQlz
YWMtPnNhY19hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7CisJCWlmIChub3RpZl9s
ZW4gPiBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfY2hhbmdlKSkgeworCQkJaWYgKChzdGF0ZSA9
PSBTQ1RQX0NPTU1fVVApIHx8IChzdGF0ZSA9PSBTQ1RQX1JFU1RBUlQpKSB7CisJCQkJaSA9IDA7
CisJCQkJaWYgKHN0Y2ItPmFzb2MucHJzY3RwX3N1cHBvcnRlZCA9PSAxKSB7CisJCQkJCXNhYy0+
c2FjX2luZm9baSsrXSA9IFNDVFBfQVNTT0NfU1VQUE9SVFNfUFI7CisJCQkJfQorCQkJCWlmIChz
dGNiLT5hc29jLmF1dGhfc3VwcG9ydGVkID09IDEpIHsKKwkJCQkJc2FjLT5zYWNfaW5mb1tpKytd
ID0gU0NUUF9BU1NPQ19TVVBQT1JUU19BVVRIOworCQkJCX0KKwkJCQlpZiAoc3RjYi0+YXNvYy5h
c2NvbmZfc3VwcG9ydGVkID09IDEpIHsKKwkJCQkJc2FjLT5zYWNfaW5mb1tpKytdID0gU0NUUF9B
U1NPQ19TVVBQT1JUU19BU0NPTkY7CisJCQkJfQorCQkJCWlmIChzdGNiLT5hc29jLmlkYXRhX3N1
cHBvcnRlZCA9PSAxKSB7CisJCQkJCXNhYy0+c2FjX2luZm9baSsrXSA9IFNDVFBfQVNTT0NfU1VQ
UE9SVFNfSU5URVJMRUFWSU5HOworCQkJCX0KKwkJCQlzYWMtPnNhY19pbmZvW2krK10gPSBTQ1RQ
X0FTU09DX1NVUFBPUlRTX01VTFRJQlVGOworCQkJCWlmIChzdGNiLT5hc29jLnJlY29uZmlnX3N1
cHBvcnRlZCA9PSAxKSB7CisJCQkJCXNhYy0+c2FjX2luZm9baSsrXSA9IFNDVFBfQVNTT0NfU1VQ
UE9SVFNfUkVfQ09ORklHOworCQkJCX0KKwkJCQlzYWMtPnNhY19sZW5ndGggKz0gaTsKKwkJCX0g
ZWxzZSBpZiAoKHN0YXRlID09IFNDVFBfQ09NTV9MT1NUKSB8fCAoc3RhdGUgPT0gU0NUUF9DQU5U
X1NUUl9BU1NPQykpIHsKKwkJCQltZW1jcHkoc2FjLT5zYWNfaW5mbywgYWJvcnQsIGFib3J0X2xl
bik7CisJCQkJc2FjLT5zYWNfbGVuZ3RoICs9IGFib3J0X2xlbjsKKwkJCX0KKwkJfQorCQlTQ1RQ
X0JVRl9MRU4obV9ub3RpZnkpID0gc2FjLT5zYWNfbGVuZ3RoOworCQljb250cm9sID0gc2N0cF9i
dWlsZF9yZWFkcV9lbnRyeShzdGNiLCBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24sCisJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHN0Y2ItPmFzb2MuY29udGV4
dCwgMCwgMCwgMCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ub3RpZnkp
OworCQlpZiAoY29udHJvbCAhPSBOVUxMKSB7CisJCQljb250cm9sLT5sZW5ndGggPSBTQ1RQX0JV
Rl9MRU4obV9ub3RpZnkpOworCQkJY29udHJvbC0+c3BlY19mbGFncyA9IE1fTk9USUZJQ0FUSU9O
OworCQkJLyogbm90IHRoYXQgd2UgbmVlZCB0aGlzICovCisJCQljb250cm9sLT50YWlsX21idWYg
PSBtX25vdGlmeTsKKwkJCXNjdHBfYWRkX3RvX3JlYWRxKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCisJ
CQkgICAgICAgICAgICAgICAgICBjb250cm9sLAorCQkJICAgICAgICAgICAgICAgICAgJnN0Y2It
PnNjdHBfc29ja2V0LT5zb19yY3YsIDEsIFNDVFBfUkVBRF9MT0NLX05PVF9IRUxELAorCQkJICAg
ICAgICAgICAgICAgICAgc29fbG9ja2VkKTsKKwkJfSBlbHNlIHsKKwkJCXNjdHBfbV9mcmVlbSht
X25vdGlmeSk7CisJCX0KKwl9CisJLyoKKwkgKiBGb3IgMS10by0xIHN0eWxlIHNvY2tldHMsIHdl
IHNlbmQgdXAgYW5kIGVycm9yIHdoZW4gYW4gQUJPUlQKKwkgKiBjb21lcyBpbi4KKwkgKi8KK3Nl
dF9lcnJvcjoKKwlpZiAoKChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfVENQVFlQRSkgfHwKKwkgICAgIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfSU5fVENQUE9PTCkpICYmCisJICAgICgoc3RhdGUgPT0gU0NUUF9DT01NX0xPU1Qp
IHx8IChzdGF0ZSA9PSBTQ1RQX0NBTlRfU1RSX0FTU09DKSkpIHsKKwkJU09DS19MT0NLKHN0Y2It
PnNjdHBfc29ja2V0KTsKKwkJaWYgKGZyb21fcGVlcikgeworCQkJaWYgKFNDVFBfR0VUX1NUQVRF
KHN0Y2IpID09IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUNPTk5SRUZVU0VEKTsK
KwkJCQlzdGNiLT5zY3RwX3NvY2tldC0+c29fZXJyb3IgPSBFQ09OTlJFRlVTRUQ7CisJCQl9IGVs
c2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBVVElMLCBFQ09OTlJFU0VUKTsKKwkJCQlzdGNiLT5zY3RwX3NvY2tldC0+c29fZXJyb3Ig
PSBFQ09OTlJFU0VUOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKChTQ1RQX0dFVF9TVEFURShz
dGNiKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKSB8fAorCQkJICAgIChTQ1RQX0dFVF9TVEFU
RShzdGNiKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQpKSB7CisJCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChOVUxMLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVUSU1FRE9VVCk7
CisJCQkJc3RjYi0+c2N0cF9zb2NrZXQtPnNvX2Vycm9yID0gRVRJTUVET1VUOworCQkJfSBlbHNl
IHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQVVRJTCwgRUNPTk5BQk9SVEVEKTsKKwkJCQlzdGNiLT5zY3RwX3NvY2tldC0+c29fZXJyb3Ig
PSBFQ09OTkFCT1JURUQ7CisJCQl9CisJCX0KKwkJU09DS19VTkxPQ0soc3RjYi0+c2N0cF9zb2Nr
ZXQpOworCX0KKwkvKiBXYWtlIEFOWSBzbGVlcGVycyAqLworI2lmIGRlZmluZWQoX19BUFBMRV9f
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXNvID0gU0NUUF9JTlBfU08oc3RjYi0+c2N0
cF9lcCk7CisJaWYgKCFzb19sb2NrZWQpIHsKKwkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2Mu
cmVmY250LCAxKTsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlTQ1RQX1NPQ0tFVF9MT0NL
KHNvLCAxKTsKKwkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJYXRvbWljX3N1YnRyYWN0X2ludCgm
c3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RB
VEVfQ0xPU0VEX1NPQ0tFVCkgeworCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKwkJCXJl
dHVybjsKKwkJfQorCX0KKyNlbmRpZgorCWlmICgoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCSAgICAgKHN0Y2ItPnNjdHBfZXAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSkgJiYKKwkgICAgKChzdGF0ZSA9PSBT
Q1RQX0NPTU1fTE9TVCkgfHwgKHN0YXRlID09IFNDVFBfQ0FOVF9TVFJfQVNTT0MpKSkgeworCQlz
b2NhbnRyY3Ztb3JlKHN0Y2ItPnNjdHBfc29ja2V0KTsKKwl9CisJc29yd2FrZXVwKHN0Y2ItPnNj
dHBfc29ja2V0KTsKKwlzb3d3YWtldXAoc3RjYi0+c2N0cF9zb2NrZXQpOworI2lmIGRlZmluZWQo
X19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWlmICghc29fbG9ja2VkKSB7
CisJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisJfQorI2VuZGlmCit9CisKK3N0YXRpYyB2
b2lkCitzY3RwX25vdGlmeV9wZWVyX2FkZHJfY2hhbmdlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwg
dWludDMyX3Qgc3RhdGUsCisgICAgc3RydWN0IHNvY2thZGRyICpzYSwgdWludDMyX3QgZXJyb3Is
IGludCBzb19sb2NrZWQpCit7CisJc3RydWN0IG1idWYgKm1fbm90aWZ5OworCXN0cnVjdCBzY3Rw
X3BhZGRyX2NoYW5nZSAqc3BjOworCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9s
OworCisJaWYgKChzdGNiID09IE5VTEwpIHx8CisJICAgIHNjdHBfc3RjYl9pc19mZWF0dXJlX29m
ZihzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19SRUNWUEFERFJFVk5UKSkgewor
CQkvKiBldmVudCBub3QgZW5hYmxlZCAqLworCQlyZXR1cm47CisJfQorCW1fbm90aWZ5ID0gc2N0
cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0cF9wYWRkcl9jaGFuZ2UpLCAwLCBN
X05PV0FJVCwgMSwgTVRfREFUQSk7CisJaWYgKG1fbm90aWZ5ID09IE5VTEwpCisJCXJldHVybjsK
KwlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gMDsKKwlzcGMgPSBtdG9kKG1fbm90aWZ5LCBzdHJ1
Y3Qgc2N0cF9wYWRkcl9jaGFuZ2UgKik7CisJbWVtc2V0KHNwYywgMCwgc2l6ZW9mKHN0cnVjdCBz
Y3RwX3BhZGRyX2NoYW5nZSkpOworCXNwYy0+c3BjX3R5cGUgPSBTQ1RQX1BFRVJfQUREUl9DSEFO
R0U7CisJc3BjLT5zcGNfZmxhZ3MgPSAwOworCXNwYy0+c3BjX2xlbmd0aCA9IHNpemVvZihzdHJ1
Y3Qgc2N0cF9wYWRkcl9jaGFuZ2UpOworCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgeworI2lmZGVm
IElORVQKKwljYXNlIEFGX0lORVQ6CisjaWZkZWYgSU5FVDYKKwkJaWYgKHNjdHBfaXNfZmVhdHVy
ZV9vbihzdGNiLT5zY3RwX2VwLCBTQ1RQX1BDQl9GTEFHU19ORUVEU19NQVBQRURfVjQpKSB7CisJ
CQlpbjZfc2luXzJfdjRtYXBzaW42KChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYSwKKwkJCSAgICAg
ICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmc3BjLT5zcGNfYWFkZHIpOwor
CQl9IGVsc2UgeworCQkJbWVtY3B5KCZzcGMtPnNwY19hYWRkciwgc2EsIHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW4pKTsKKwkJfQorI2Vsc2UKKwkJbWVtY3B5KCZzcGMtPnNwY19hYWRkciwgc2Es
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKyNlbmRpZgorCQlicmVhazsKKyNlbmRpZgor
I2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKwl7CisjaWZkZWYgU0NUUF9FTUJFRERFRF9W
Nl9TQ09QRQorCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworI2VuZGlmIC8qIFNDVFBfRU1C
RURERURfVjZfU0NPUEUgKi8KKwkJbWVtY3B5KCZzcGMtPnNwY19hYWRkciwgc2EsIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisKKyNpZmRlZiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFCisJ
CXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZzcGMtPnNwY19hYWRkcjsKKwkJaWYgKElO
Nl9JU19TQ09QRV9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCWlmIChzaW42LT5z
aW42X3Njb3BlX2lkID09IDApIHsKKwkJCQkvKiByZWNvdmVyIHNjb3BlX2lkIGZvciB1c2VyICov
CisjaWZkZWYgU0NUUF9LQU1FCisJCQkJKHZvaWQpc2E2X3JlY292ZXJzY29wZShzaW42KTsKKyNl
bHNlCisJCQkJKHZvaWQpaW42X3JlY292ZXJzY29wZShzaW42LCAmc2luNi0+c2luNl9hZGRyLAor
CQkJCQkJICAgICAgIE5VTEwpOworI2VuZGlmCisJCQl9IGVsc2UgeworCQkJCS8qIGNsZWFyIGVt
YmVkZGVkIHNjb3BlX2lkIGZvciB1c2VyICovCisJCQkJaW42X2NsZWFyc2NvcGUoJnNpbjYtPnNp
bjZfYWRkcik7CisJCQl9CisJCX0KKyNlbmRpZiAvKiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFICov
CisJCWJyZWFrOworCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwljYXNl
IEFGX0NPTk46CisJCW1lbWNweSgmc3BjLT5zcGNfYWFkZHIsIHNhLCBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2Nvbm4pKTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQkvKiBUU05IICov
CisJCWJyZWFrOworCX0KKwlzcGMtPnNwY19zdGF0ZSA9IHN0YXRlOworCXNwYy0+c3BjX2Vycm9y
ID0gZXJyb3I7CisJc3BjLT5zcGNfYXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOwor
CisJU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYWRkcl9jaGFu
Z2UpOworCVNDVFBfQlVGX05FWFQobV9ub3RpZnkpID0gTlVMTDsKKworCS8qIGFwcGVuZCB0byBz
b2NrZXQgKi8KKwljb250cm9sID0gc2N0cF9idWlsZF9yZWFkcV9lbnRyeShzdGNiLCBzdGNiLT5h
c29jLnByaW1hcnlfZGVzdGluYXRpb24sCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMCwgMCwgc3RjYi0+YXNvYy5jb250ZXh0LCAwLCAwLCAwLAorCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fbm90aWZ5KTsKKwlpZiAoY29udHJvbCA9PSBOVUxMKSB7CisJCS8q
IG5vIG1lbW9yeSAqLworCQlzY3RwX21fZnJlZW0obV9ub3RpZnkpOworCQlyZXR1cm47CisJfQor
CWNvbnRyb2wtPmxlbmd0aCA9IFNDVFBfQlVGX0xFTihtX25vdGlmeSk7CisJY29udHJvbC0+c3Bl
Y19mbGFncyA9IE1fTk9USUZJQ0FUSU9OOworCS8qIG5vdCB0aGF0IHdlIG5lZWQgdGhpcyAqLwor
CWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IG1fbm90aWZ5OworCXNjdHBfYWRkX3RvX3JlYWRxKHN0Y2It
PnNjdHBfZXAsIHN0Y2IsCisJICAgICAgICAgICAgICAgICAgY29udHJvbCwKKwkgICAgICAgICAg
ICAgICAgICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwgMSwKKwkgICAgICAgICAgICAgICAg
ICBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCwKKwkgICAgICAgICAgICAgICAgICBzb19sb2NrZWQp
OworfQorCitzdGF0aWMgdm9pZAorc2N0cF9ub3RpZnlfc2VuZF9mYWlsZWQoc3RydWN0IHNjdHBf
dGNiICpzdGNiLCB1aW50OF90IHNlbnQsIHVpbnQzMl90IGVycm9yLAorICAgIHN0cnVjdCBzY3Rw
X3RtaXRfY2h1bmsgKmNoaywgaW50IHNvX2xvY2tlZCkKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbV9ub3Rp
Znk7CisJc3RydWN0IHNjdHBfc2VuZF9mYWlsZWQgKnNzZjsKKwlzdHJ1Y3Qgc2N0cF9zZW5kX2Zh
aWxlZF9ldmVudCAqc3NmZTsKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbDsK
KwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2hraGRyOworCWludCBub3RpZmhkcl9sZW4sIGNoa19s
ZW4sIGNoa2hkcl9sZW4sIHBhZGRpbmdfbGVuLCBwYXlsb2FkX2xlbjsKKworCWlmICgoc3RjYiA9
PSBOVUxMKSB8fAorCSAgICAoc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb2ZmKHN0Y2ItPnNjdHBfZXAs
IHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZTRU5ERkFJTEVWTlQpICYmCisJICAgICBzY3RwX3N0
Y2JfaXNfZmVhdHVyZV9vZmYoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfUkVD
Vk5TRU5ERkFJTEVWTlQpKSkgeworCQkvKiBldmVudCBub3QgZW5hYmxlZCAqLworCQlyZXR1cm47
CisJfQorCisJaWYgKHNjdHBfc3RjYl9pc19mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
IFNDVFBfUENCX0ZMQUdTX1JFQ1ZOU0VOREZBSUxFVk5UKSkgeworCQlub3RpZmhkcl9sZW4gPSBz
aXplb2Yoc3RydWN0IHNjdHBfc2VuZF9mYWlsZWRfZXZlbnQpOworCX0gZWxzZSB7CisJCW5vdGlm
aGRyX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zZW5kX2ZhaWxlZCk7CisJfQorCW1fbm90aWZ5
ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKG5vdGlmaGRyX2xlbiwgMCwgTV9OT1dBSVQsIDEsIE1U
X0RBVEEpOworCWlmIChtX25vdGlmeSA9PSBOVUxMKQorCQkvKiBubyBzcGFjZSBsZWZ0ICovCisJ
CXJldHVybjsKKwlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gbm90aWZoZHJfbGVuOworCWlmIChz
dGNiLT5hc29jLmlkYXRhX3N1cHBvcnRlZCkgeworCQljaGtoZHJfbGVuID0gc2l6ZW9mKHN0cnVj
dCBzY3RwX2lkYXRhX2NodW5rKTsKKwl9IGVsc2UgeworCQljaGtoZHJfbGVuID0gc2l6ZW9mKHN0
cnVjdCBzY3RwX2RhdGFfY2h1bmspOworCX0KKwkvKiBVc2Ugc29tZSBkZWZhdWx0cyBpbiBjYXNl
IHdlIGNhbid0IGFjY2VzcyB0aGUgY2h1bmsgaGVhZGVyICovCisJaWYgKGNoay0+c2VuZF9zaXpl
ID49IGNoa2hkcl9sZW4pIHsKKwkJcGF5bG9hZF9sZW4gPSBjaGstPnNlbmRfc2l6ZSAtIGNoa2hk
cl9sZW47CisJfSBlbHNlIHsKKwkJcGF5bG9hZF9sZW4gPSAwOworCX0KKwlwYWRkaW5nX2xlbiA9
IDA7CisJaWYgKGNoay0+ZGF0YSAhPSBOVUxMKSB7CisJCWNoa2hkciA9IG10b2QoY2hrLT5kYXRh
LCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKTsKKwkJaWYgKGNoa2hkciAhPSBOVUxMKSB7CisJCQlj
aGtfbGVuID0gbnRvaHMoY2hraGRyLT5jaHVua19sZW5ndGgpOworCQkJaWYgKChjaGtfbGVuID49
IGNoa2hkcl9sZW4pICYmCisJCQkgICAgKGNoay0+c2VuZF9zaXplID49IGNoa19sZW4pICYmCisJ
CQkgICAgKGNoay0+c2VuZF9zaXplIC0gY2hrX2xlbiA8IDQpKSB7CisJCQkJcGFkZGluZ19sZW4g
PSBjaGstPnNlbmRfc2l6ZSAtIGNoa19sZW47CisJCQkJcGF5bG9hZF9sZW4gPSBjaGstPnNlbmRf
c2l6ZSAtIGNoa2hkcl9sZW4gLSBwYWRkaW5nX2xlbjsKKwkJCX0KKwkJfQorCX0KKwlpZiAoc2N0
cF9zdGNiX2lzX2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1Nf
UkVDVk5TRU5ERkFJTEVWTlQpKSB7CisJCXNzZmUgPSBtdG9kKG1fbm90aWZ5LCBzdHJ1Y3Qgc2N0
cF9zZW5kX2ZhaWxlZF9ldmVudCAqKTsKKwkJbWVtc2V0KHNzZmUsIDAsIG5vdGlmaGRyX2xlbik7
CisJCXNzZmUtPnNzZmVfdHlwZSA9IFNDVFBfU0VORF9GQUlMRURfRVZFTlQ7CisJCWlmIChzZW50
KSB7CisJCQlzc2ZlLT5zc2ZlX2ZsYWdzID0gU0NUUF9EQVRBX1NFTlQ7CisJCX0gZWxzZSB7CisJ
CQlzc2ZlLT5zc2ZlX2ZsYWdzID0gU0NUUF9EQVRBX1VOU0VOVDsKKwkJfQorCQlzc2ZlLT5zc2Zl
X2xlbmd0aCA9ICh1aW50MzJfdCkobm90aWZoZHJfbGVuICsgcGF5bG9hZF9sZW4pOworCQlzc2Zl
LT5zc2ZlX2Vycm9yID0gZXJyb3I7CisJCS8qIG5vdCBleGFjdGx5IHdoYXQgdGhlIHVzZXIgc2Vu
dCBpbiwgYnV0IHNob3VsZCBiZSBjbG9zZSA6KSAqLworCQlzc2ZlLT5zc2ZlX2luZm8uc25kX3Np
ZCA9IGNoay0+cmVjLmRhdGEuc2lkOworCQlzc2ZlLT5zc2ZlX2luZm8uc25kX2ZsYWdzID0gY2hr
LT5yZWMuZGF0YS5yY3ZfZmxhZ3M7CisJCXNzZmUtPnNzZmVfaW5mby5zbmRfcHBpZCA9IGNoay0+
cmVjLmRhdGEucHBpZDsKKwkJc3NmZS0+c3NmZV9pbmZvLnNuZF9jb250ZXh0ID0gY2hrLT5yZWMu
ZGF0YS5jb250ZXh0OworCQlzc2ZlLT5zc2ZlX2luZm8uc25kX2Fzc29jX2lkID0gc2N0cF9nZXRf
YXNzb2NpZChzdGNiKTsKKwkJc3NmZS0+c3NmZV9hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQo
c3RjYik7CisJfSBlbHNlIHsKKwkJc3NmID0gbXRvZChtX25vdGlmeSwgc3RydWN0IHNjdHBfc2Vu
ZF9mYWlsZWQgKik7CisJCW1lbXNldChzc2YsIDAsIG5vdGlmaGRyX2xlbik7CisJCXNzZi0+c3Nm
X3R5cGUgPSBTQ1RQX1NFTkRfRkFJTEVEOworCQlpZiAoc2VudCkgeworCQkJc3NmLT5zc2ZfZmxh
Z3MgPSBTQ1RQX0RBVEFfU0VOVDsKKwkJfSBlbHNlIHsKKwkJCXNzZi0+c3NmX2ZsYWdzID0gU0NU
UF9EQVRBX1VOU0VOVDsKKwkJfQorCQlzc2YtPnNzZl9sZW5ndGggPSAodWludDMyX3QpKG5vdGlm
aGRyX2xlbiArIHBheWxvYWRfbGVuKTsKKwkJc3NmLT5zc2ZfZXJyb3IgPSBlcnJvcjsKKwkJLyog
bm90IGV4YWN0bHkgd2hhdCB0aGUgdXNlciBzZW50IGluLCBidXQgc2hvdWxkIGJlIGNsb3NlIDop
ICovCisJCXNzZi0+c3NmX2luZm8uc2luZm9fc3RyZWFtID0gY2hrLT5yZWMuZGF0YS5zaWQ7CisJ
CXNzZi0+c3NmX2luZm8uc2luZm9fc3NuID0gKHVpbnQxNl90KWNoay0+cmVjLmRhdGEubWlkOwor
CQlzc2YtPnNzZl9pbmZvLnNpbmZvX2ZsYWdzID0gY2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3M7CisJ
CXNzZi0+c3NmX2luZm8uc2luZm9fcHBpZCA9IGNoay0+cmVjLmRhdGEucHBpZDsKKwkJc3NmLT5z
c2ZfaW5mby5zaW5mb19jb250ZXh0ID0gY2hrLT5yZWMuZGF0YS5jb250ZXh0OworCQlzc2YtPnNz
Zl9pbmZvLnNpbmZvX2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsKKwkJc3NmLT5z
c2ZfYXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOworCX0KKwlpZiAoY2hrLT5kYXRh
ICE9IE5VTEwpIHsKKwkJLyogVHJpbSBvZmYgdGhlIHNjdHAgY2h1bmsgaGVhZGVyIChpdCBzaG91
bGQgYmUgdGhlcmUpICovCisJCWlmIChjaGstPnNlbmRfc2l6ZSA9PSBjaGtoZHJfbGVuICsgcGF5
bG9hZF9sZW4gKyBwYWRkaW5nX2xlbikgeworCQkJbV9hZGooY2hrLT5kYXRhLCBjaGtoZHJfbGVu
KTsKKwkJCW1fYWRqKGNoay0+ZGF0YSwgLXBhZGRpbmdfbGVuKTsKKwkJCXNjdHBfbWJ1Zl9jcnVz
aChjaGstPmRhdGEpOworCQkJY2hrLT5zZW5kX3NpemUgLT0gKGNoa2hkcl9sZW4gKyBwYWRkaW5n
X2xlbik7CisJCX0KKwl9CisJU0NUUF9CVUZfTkVYVChtX25vdGlmeSkgPSBjaGstPmRhdGE7CisJ
LyogU3RlYWwgb2ZmIHRoZSBtYnVmICovCisJY2hrLT5kYXRhID0gTlVMTDsKKwkvKgorCSAqIEZv
ciB0aGlzIGNhc2UsIHdlIGNoZWNrIHRoZSBhY3R1YWwgc29ja2V0IGJ1ZmZlciwgc2luY2UgdGhl
IGFzc29jCisJICogaXMgZ29pbmcgYXdheSB3ZSBkb24ndCB3YW50IHRvIG92ZXJmaWxsIHRoZSBz
b2NrZXQgYnVmZmVyIGZvciBhCisJICogbm9uLXJlYWRlcgorCSAqLworCWlmIChzY3RwX3Nic3Bh
Y2VfZmFpbGVkbXNncygmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdikgPCBTQ1RQX0JVRl9MRU4o
bV9ub3RpZnkpKSB7CisJCXNjdHBfbV9mcmVlbShtX25vdGlmeSk7CisJCXJldHVybjsKKwl9CisJ
LyogYXBwZW5kIHRvIHNvY2tldCAqLworCWNvbnRyb2wgPSBzY3RwX2J1aWxkX3JlYWRxX2VudHJ5
KHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwKKwkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLCAwLCBzdGNiLT5hc29jLmNvbnRleHQsIDAsIDAsIDAsCisJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ub3RpZnkpOworCWlmIChjb250cm9sID09
IE5VTEwpIHsKKwkJLyogbm8gbWVtb3J5ICovCisJCXNjdHBfbV9mcmVlbShtX25vdGlmeSk7CisJ
CXJldHVybjsKKwl9CisJY29udHJvbC0+bGVuZ3RoID0gU0NUUF9CVUZfTEVOKG1fbm90aWZ5KTsK
Kwljb250cm9sLT5zcGVjX2ZsYWdzID0gTV9OT1RJRklDQVRJT047CisJLyogbm90IHRoYXQgd2Ug
bmVlZCB0aGlzICovCisJY29udHJvbC0+dGFpbF9tYnVmID0gbV9ub3RpZnk7CisJc2N0cF9hZGRf
dG9fcmVhZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkgICAgICAgICAgICAgICAgICBjb250cm9s
LAorCSAgICAgICAgICAgICAgICAgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCAxLAorCSAg
ICAgICAgICAgICAgICAgIFNDVFBfUkVBRF9MT0NLX05PVF9IRUxELAorCSAgICAgICAgICAgICAg
ICAgIHNvX2xvY2tlZCk7Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX25vdGlmeV9zZW5kX2ZhaWxl
ZDIoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBlcnJvciwKKwkJCSBzdHJ1Y3Qgc2N0
cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3AsIGludCBzb19sb2NrZWQpCit7CisJc3RydWN0IG1i
dWYgKm1fbm90aWZ5OworCXN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkICpzc2Y7CisJc3RydWN0IHNj
dHBfc2VuZF9mYWlsZWRfZXZlbnQgKnNzZmU7CisJc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQg
KmNvbnRyb2w7CisJaW50IG5vdGlmaGRyX2xlbjsKKworCWlmICgoc3RjYiA9PSBOVUxMKSB8fAor
CSAgICAoc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb2ZmKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBf
UENCX0ZMQUdTX1JFQ1ZTRU5ERkFJTEVWTlQpICYmCisJICAgICBzY3RwX3N0Y2JfaXNfZmVhdHVy
ZV9vZmYoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfUkVDVk5TRU5ERkFJTEVW
TlQpKSkgeworCQkvKiBldmVudCBub3QgZW5hYmxlZCAqLworCQlyZXR1cm47CisJfQorCWlmIChz
Y3RwX3N0Y2JfaXNfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1BDQl9GTEFH
U19SRUNWTlNFTkRGQUlMRVZOVCkpIHsKKwkJbm90aWZoZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBz
Y3RwX3NlbmRfZmFpbGVkX2V2ZW50KTsKKwl9IGVsc2UgeworCQlub3RpZmhkcl9sZW4gPSBzaXpl
b2Yoc3RydWN0IHNjdHBfc2VuZF9mYWlsZWQpOworCX0KKwltX25vdGlmeSA9IHNjdHBfZ2V0X21i
dWZfZm9yX21zZyhub3RpZmhkcl9sZW4sIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwlpZiAo
bV9ub3RpZnkgPT0gTlVMTCkgeworCQkvKiBubyBzcGFjZSBsZWZ0ICovCisJCXJldHVybjsKKwl9
CisJU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9IG5vdGlmaGRyX2xlbjsKKwlpZiAoc2N0cF9zdGNi
X2lzX2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfUkVDVk5T
RU5ERkFJTEVWTlQpKSB7CisJCXNzZmUgPSBtdG9kKG1fbm90aWZ5LCBzdHJ1Y3Qgc2N0cF9zZW5k
X2ZhaWxlZF9ldmVudCAqKTsKKwkJbWVtc2V0KHNzZmUsIDAsIG5vdGlmaGRyX2xlbik7CisJCXNz
ZmUtPnNzZmVfdHlwZSA9IFNDVFBfU0VORF9GQUlMRURfRVZFTlQ7CisJCXNzZmUtPnNzZmVfZmxh
Z3MgPSBTQ1RQX0RBVEFfVU5TRU5UOworCQlzc2ZlLT5zc2ZlX2xlbmd0aCA9ICh1aW50MzJfdCko
bm90aWZoZHJfbGVuICsgc3AtPmxlbmd0aCk7CisJCXNzZmUtPnNzZmVfZXJyb3IgPSBlcnJvcjsK
KwkJLyogbm90IGV4YWN0bHkgd2hhdCB0aGUgdXNlciBzZW50IGluLCBidXQgc2hvdWxkIGJlIGNs
b3NlIDopICovCisJCXNzZmUtPnNzZmVfaW5mby5zbmRfc2lkID0gc3AtPnNpZDsKKwkJaWYgKHNw
LT5zb21lX3Rha2VuKSB7CisJCQlzc2ZlLT5zc2ZlX2luZm8uc25kX2ZsYWdzID0gU0NUUF9EQVRB
X0xBU1RfRlJBRzsKKwkJfSBlbHNlIHsKKwkJCXNzZmUtPnNzZmVfaW5mby5zbmRfZmxhZ3MgPSBT
Q1RQX0RBVEFfTk9UX0ZSQUc7CisJCX0KKwkJc3NmZS0+c3NmZV9pbmZvLnNuZF9wcGlkID0gc3At
PnBwaWQ7CisJCXNzZmUtPnNzZmVfaW5mby5zbmRfY29udGV4dCA9IHNwLT5jb250ZXh0OworCQlz
c2ZlLT5zc2ZlX2luZm8uc25kX2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsKKwkJ
c3NmZS0+c3NmZV9hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7CisJfSBlbHNlIHsK
KwkJc3NmID0gbXRvZChtX25vdGlmeSwgc3RydWN0IHNjdHBfc2VuZF9mYWlsZWQgKik7CisJCW1l
bXNldChzc2YsIDAsIG5vdGlmaGRyX2xlbik7CisJCXNzZi0+c3NmX3R5cGUgPSBTQ1RQX1NFTkRf
RkFJTEVEOworCQlzc2YtPnNzZl9mbGFncyA9IFNDVFBfREFUQV9VTlNFTlQ7CisJCXNzZi0+c3Nm
X2xlbmd0aCA9ICh1aW50MzJfdCkobm90aWZoZHJfbGVuICsgc3AtPmxlbmd0aCk7CisJCXNzZi0+
c3NmX2Vycm9yID0gZXJyb3I7CisJCS8qIG5vdCBleGFjdGx5IHdoYXQgdGhlIHVzZXIgc2VudCBp
biwgYnV0IHNob3VsZCBiZSBjbG9zZSA6KSAqLworCQlzc2YtPnNzZl9pbmZvLnNpbmZvX3N0cmVh
bSA9IHNwLT5zaWQ7CisJCXNzZi0+c3NmX2luZm8uc2luZm9fc3NuID0gMDsKKwkJaWYgKHNwLT5z
b21lX3Rha2VuKSB7CisJCQlzc2YtPnNzZl9pbmZvLnNpbmZvX2ZsYWdzID0gU0NUUF9EQVRBX0xB
U1RfRlJBRzsKKwkJfSBlbHNlIHsKKwkJCXNzZi0+c3NmX2luZm8uc2luZm9fZmxhZ3MgPSBTQ1RQ
X0RBVEFfTk9UX0ZSQUc7CisJCX0KKwkJc3NmLT5zc2ZfaW5mby5zaW5mb19wcGlkID0gc3AtPnBw
aWQ7CisJCXNzZi0+c3NmX2luZm8uc2luZm9fY29udGV4dCA9IHNwLT5jb250ZXh0OworCQlzc2Yt
PnNzZl9pbmZvLnNpbmZvX2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsKKwkJc3Nm
LT5zc2ZfYXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOworCX0KKwlTQ1RQX0JVRl9O
RVhUKG1fbm90aWZ5KSA9IHNwLT5kYXRhOworCisJLyogU3RlYWwgb2ZmIHRoZSBtYnVmICovCisJ
c3AtPmRhdGEgPSBOVUxMOworCS8qCisJICogRm9yIHRoaXMgY2FzZSwgd2UgY2hlY2sgdGhlIGFj
dHVhbCBzb2NrZXQgYnVmZmVyLCBzaW5jZSB0aGUgYXNzb2MKKwkgKiBpcyBnb2luZyBhd2F5IHdl
IGRvbid0IHdhbnQgdG8gb3ZlcmZpbGwgdGhlIHNvY2tldCBidWZmZXIgZm9yIGEKKwkgKiBub24t
cmVhZGVyCisJICovCisJaWYgKHNjdHBfc2JzcGFjZV9mYWlsZWRtc2dzKCZzdGNiLT5zY3RwX3Nv
Y2tldC0+c29fcmN2KSA8IFNDVFBfQlVGX0xFTihtX25vdGlmeSkpIHsKKwkJc2N0cF9tX2ZyZWVt
KG1fbm90aWZ5KTsKKwkJcmV0dXJuOworCX0KKwkvKiBhcHBlbmQgdG8gc29ja2V0ICovCisJY29u
dHJvbCA9IHNjdHBfYnVpbGRfcmVhZHFfZW50cnkoc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rl
c3RpbmF0aW9uLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHN0Y2It
PmFzb2MuY29udGV4dCwgMCwgMCwgMCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX25vdGlmeSk7CisJaWYgKGNvbnRyb2wgPT0gTlVMTCkgeworCQkvKiBubyBtZW1vcnkgKi8K
KwkJc2N0cF9tX2ZyZWVtKG1fbm90aWZ5KTsKKwkJcmV0dXJuOworCX0KKwljb250cm9sLT5sZW5n
dGggPSBTQ1RQX0JVRl9MRU4obV9ub3RpZnkpOworCWNvbnRyb2wtPnNwZWNfZmxhZ3MgPSBNX05P
VElGSUNBVElPTjsKKwkvKiBub3QgdGhhdCB3ZSBuZWVkIHRoaXMgKi8KKwljb250cm9sLT50YWls
X21idWYgPSBtX25vdGlmeTsKKwlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNi
LAorCSAgICBjb250cm9sLAorCSAgICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwgMSwgU0NU
UF9SRUFEX0xPQ0tfTk9UX0hFTEQsIHNvX2xvY2tlZCk7Cit9CisKK3N0YXRpYyB2b2lkCitzY3Rw
X25vdGlmeV9hZGFwdGF0aW9uX2xheWVyKHN0cnVjdCBzY3RwX3RjYiAqc3RjYikKK3sKKwlzdHJ1
Y3QgbWJ1ZiAqbV9ub3RpZnk7CisJc3RydWN0IHNjdHBfYWRhcHRhdGlvbl9ldmVudCAqc2FpOwor
CXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sOworCisJaWYgKChzdGNiID09IE5V
TEwpIHx8CisJICAgIHNjdHBfc3RjYl9pc19mZWF0dXJlX29mZihzdGNiLT5zY3RwX2VwLCBzdGNi
LCBTQ1RQX1BDQl9GTEFHU19BREFQVEFUSU9ORVZOVCkpIHsKKwkJLyogZXZlbnQgbm90IGVuYWJs
ZWQgKi8KKwkJcmV0dXJuOworCX0KKworCW1fbm90aWZ5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNn
KHNpemVvZihzdHJ1Y3Qgc2N0cF9hZGFwdGlvbl9ldmVudCksIDAsIE1fTk9XQUlULCAxLCBNVF9E
QVRBKTsKKwlpZiAobV9ub3RpZnkgPT0gTlVMTCkKKwkJLyogbm8gc3BhY2UgbGVmdCAqLworCQly
ZXR1cm47CisJU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9IDA7CisJc2FpID0gbXRvZChtX25vdGlm
eSwgc3RydWN0IHNjdHBfYWRhcHRhdGlvbl9ldmVudCAqKTsKKwltZW1zZXQoc2FpLCAwLCBzaXpl
b2Yoc3RydWN0IHNjdHBfYWRhcHRhdGlvbl9ldmVudCkpOworCXNhaS0+c2FpX3R5cGUgPSBTQ1RQ
X0FEQVBUQVRJT05fSU5ESUNBVElPTjsKKwlzYWktPnNhaV9mbGFncyA9IDA7CisJc2FpLT5zYWlf
bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2FkYXB0YXRpb25fZXZlbnQpOworCXNhaS0+c2Fp
X2FkYXB0YXRpb25faW5kID0gc3RjYi0+YXNvYy5wZWVyc19hZGFwdGF0aW9uOworCXNhaS0+c2Fp
X2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsKKworCVNDVFBfQlVGX0xFTihtX25v
dGlmeSkgPSBzaXplb2Yoc3RydWN0IHNjdHBfYWRhcHRhdGlvbl9ldmVudCk7CisJU0NUUF9CVUZf
TkVYVChtX25vdGlmeSkgPSBOVUxMOworCisJLyogYXBwZW5kIHRvIHNvY2tldCAqLworCWNvbnRy
b2wgPSBzY3RwX2J1aWxkX3JlYWRxX2VudHJ5KHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0
aW5hdGlvbiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBzdGNiLT5h
c29jLmNvbnRleHQsIDAsIDAsIDAsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9ub3RpZnkpOworCWlmIChjb250cm9sID09IE5VTEwpIHsKKwkJLyogbm8gbWVtb3J5ICovCisJ
CXNjdHBfbV9mcmVlbShtX25vdGlmeSk7CisJCXJldHVybjsKKwl9CisJY29udHJvbC0+bGVuZ3Ro
ID0gU0NUUF9CVUZfTEVOKG1fbm90aWZ5KTsKKwljb250cm9sLT5zcGVjX2ZsYWdzID0gTV9OT1RJ
RklDQVRJT047CisJLyogbm90IHRoYXQgd2UgbmVlZCB0aGlzICovCisJY29udHJvbC0+dGFpbF9t
YnVmID0gbV9ub3RpZnk7CisJc2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwK
KwkgICAgY29udHJvbCwKKwkgICAgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIDEsIFNDVFBf
UkVBRF9MT0NLX05PVF9IRUxELCBTQ1RQX1NPX05PVF9MT0NLRUQpOworfQorCisvKiBUaGlzIGFs
d2F5cyBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSByZWFkLXF1ZXVlIExPQ0tFRCBpbiB0aGUgSU5Q
ICovCitzdGF0aWMgdm9pZAorc2N0cF9ub3RpZnlfcGFydGlhbF9kZWxpdmVyeV9pbmRpY2F0aW9u
KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDMyX3QgZXJyb3IsCisJCQkJCXVpbnQzMl90IHZh
bCwgaW50IHNvX2xvY2tlZCkKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbV9ub3RpZnk7CisJc3RydWN0IHNj
dHBfcGRhcGlfZXZlbnQgKnBkYXBpOworCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250
cm9sOworCXN0cnVjdCBzb2NrYnVmICpzYjsKKworCWlmICgoc3RjYiA9PSBOVUxMKSB8fAorCSAg
ICBzY3RwX3N0Y2JfaXNfZmVhdHVyZV9vZmYoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9QQ0Jf
RkxBR1NfUERBUElFVk5UKSkgeworCQkvKiBldmVudCBub3QgZW5hYmxlZCAqLworCQlyZXR1cm47
CisJfQorCWlmIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09D
S0VUX0NBTlRfUkVBRCkgeworCQlyZXR1cm47CisJfQorCisJbV9ub3RpZnkgPSBzY3RwX2dldF9t
YnVmX2Zvcl9tc2coc2l6ZW9mKHN0cnVjdCBzY3RwX3BkYXBpX2V2ZW50KSwgMCwgTV9OT1dBSVQs
IDEsIE1UX0RBVEEpOworCWlmIChtX25vdGlmeSA9PSBOVUxMKQorCQkvKiBubyBzcGFjZSBsZWZ0
ICovCisJCXJldHVybjsKKwlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gMDsKKwlwZGFwaSA9IG10
b2QobV9ub3RpZnksIHN0cnVjdCBzY3RwX3BkYXBpX2V2ZW50ICopOworCW1lbXNldChwZGFwaSwg
MCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3BkYXBpX2V2ZW50KSk7CisJcGRhcGktPnBkYXBpX3R5cGUg
PSBTQ1RQX1BBUlRJQUxfREVMSVZFUllfRVZFTlQ7CisJcGRhcGktPnBkYXBpX2ZsYWdzID0gMDsK
KwlwZGFwaS0+cGRhcGlfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BkYXBpX2V2ZW50KTsK
KwlwZGFwaS0+cGRhcGlfaW5kaWNhdGlvbiA9IGVycm9yOworCXBkYXBpLT5wZGFwaV9zdHJlYW0g
PSAodmFsID4+IDE2KTsKKwlwZGFwaS0+cGRhcGlfc2VxID0gKHZhbCAmIDB4MDAwMGZmZmYpOwor
CXBkYXBpLT5wZGFwaV9hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7CisKKwlTQ1RQ
X0JVRl9MRU4obV9ub3RpZnkpID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BkYXBpX2V2ZW50KTsKKwlT
Q1RQX0JVRl9ORVhUKG1fbm90aWZ5KSA9IE5VTEw7CisJY29udHJvbCA9IHNjdHBfYnVpbGRfcmVh
ZHFfZW50cnkoc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLAorCQkJCQkgMCwg
MCwgc3RjYi0+YXNvYy5jb250ZXh0LCAwLCAwLCAwLAorCQkJCQkgbV9ub3RpZnkpOworCWlmIChj
b250cm9sID09IE5VTEwpIHsKKwkJLyogbm8gbWVtb3J5ICovCisJCXNjdHBfbV9mcmVlbShtX25v
dGlmeSk7CisJCXJldHVybjsKKwl9CisJY29udHJvbC0+bGVuZ3RoID0gU0NUUF9CVUZfTEVOKG1f
bm90aWZ5KTsKKwljb250cm9sLT5zcGVjX2ZsYWdzID0gTV9OT1RJRklDQVRJT047CisJLyogbm90
IHRoYXQgd2UgbmVlZCB0aGlzICovCisJY29udHJvbC0+dGFpbF9tYnVmID0gbV9ub3RpZnk7CisJ
c2IgPSAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdjsKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TQl9MT0dHSU5HX0VOQUJMRSkgeworCQlzY3RwX3Ni
bG9nKHNiLCBjb250cm9sLT5kb19ub3RfcmVmX3N0Y2I/TlVMTDpzdGNiLCBTQ1RQX0xPR19TQkFM
TE9DLCBTQ1RQX0JVRl9MRU4obV9ub3RpZnkpKTsKKwl9CisJc2N0cF9zYmFsbG9jKHN0Y2IsIHNi
LCBtX25vdGlmeSk7CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAm
IFNDVFBfU0JfTE9HR0lOR19FTkFCTEUpIHsKKwkJc2N0cF9zYmxvZyhzYiwgY29udHJvbC0+ZG9f
bm90X3JlZl9zdGNiP05VTEw6c3RjYiwgU0NUUF9MT0dfU0JSRVNVTFQsIDApOworCX0KKwljb250
cm9sLT5lbmRfYWRkZWQgPSAxOworCWlmIChzdGNiLT5hc29jLmNvbnRyb2xfcGRhcGkpCisJCVRB
SUxRX0lOU0VSVF9BRlRFUigmc3RjYi0+c2N0cF9lcC0+cmVhZF9xdWV1ZSwgc3RjYi0+YXNvYy5j
b250cm9sX3BkYXBpLCAgY29udHJvbCwgbmV4dCk7CisJZWxzZSB7CisJCS8qIHdlIHJlYWxseSBz
aG91bGQgbm90IHNlZSB0aGlzIGNhc2UgKi8KKwkJVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2ItPnNj
dHBfZXAtPnJlYWRfcXVldWUsIGNvbnRyb2wsIG5leHQpOworCX0KKwlpZiAoc3RjYi0+c2N0cF9l
cCAmJiBzdGNiLT5zY3RwX3NvY2tldCkgeworCQkvKiBUaGlzIHNob3VsZCBhbHdheXMgYmUgdGhl
IGNhc2UgKi8KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwkJc3RydWN0IHNvY2tldCAqc287CisKKwkJc28gPSBTQ1RQX0lOUF9TTyhzdGNiLT5zY3Rw
X2VwKTsKKwkJaWYgKCFzb19sb2NrZWQpIHsKKwkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29j
LnJlZmNudCwgMSk7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQlTQ1RQX1NPQ0tFVF9M
T0NLKHNvLCAxKTsKKwkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQlhdG9taWNfc3VidHJhY3Rf
aW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB7CisJCQkJU0NUUF9TT0NLRVRfVU5M
T0NLKHNvLCAxKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKyNlbmRpZgorCQlzY3RwX3Nvcndh
a2V1cChzdGNiLT5zY3RwX2VwLCBzdGNiLT5zY3RwX3NvY2tldCk7CisjaWYgZGVmaW5lZChfX0FQ
UExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWlmICghc29fbG9ja2VkKSB7CisJ
CQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworCQl9CisjZW5kaWYKKwl9Cit9CisKK3N0YXRp
YyB2b2lkCitzY3RwX25vdGlmeV9zaHV0ZG93bl9ldmVudChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Ip
Cit7CisJc3RydWN0IG1idWYgKm1fbm90aWZ5OworCXN0cnVjdCBzY3RwX3NodXRkb3duX2V2ZW50
ICpzc2U7CisJc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2w7CisKKwkvKgorCSAq
IEZvciBUQ1AgbW9kZWwgQU5EIFVEUCBjb25uZWN0ZWQgc29ja2V0cyB3ZSB3aWxsIHNlbmQgYW4g
ZXJyb3IgdXAKKwkgKiB3aGVuIGFuIFNIVVRET1dOIGNvbXBsZXRlcworCSAqLworCWlmICgoc3Rj
Yi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJICAg
IChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkp
IHsKKwkJLyogbWFyayBzb2NrZXQgY2xvc2VkIGZvciByZWFkL3dyaXRlIGFuZCB3YWtldXAhICov
CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCXN0
cnVjdCBzb2NrZXQgKnNvOworCisJCXNvID0gU0NUUF9JTlBfU08oc3RjYi0+c2N0cF9lcCk7CisJ
CWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKKwkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisJCVNDVFBfVENCX0xPQ0soc3Rj
Yik7CisJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJaWYg
KHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQpIHsKKwkJCVNDVFBf
U09DS0VUX1VOTE9DSyhzbywgMSk7CisJCQlyZXR1cm47CisJCX0KKyNlbmRpZgorCQlzb2NhbnRz
ZW5kbW9yZShzdGNiLT5zY3RwX3NvY2tldCk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisjZW5k
aWYKKwl9CisJaWYgKHNjdHBfc3RjYl9pc19mZWF0dXJlX29mZihzdGNiLT5zY3RwX2VwLCBzdGNi
LCBTQ1RQX1BDQl9GTEFHU19SRUNWU0hVVERPV05FVk5UKSkgeworCQkvKiBldmVudCBub3QgZW5h
YmxlZCAqLworCQlyZXR1cm47CisJfQorCisJbV9ub3RpZnkgPSBzY3RwX2dldF9tYnVmX2Zvcl9t
c2coc2l6ZW9mKHN0cnVjdCBzY3RwX3NodXRkb3duX2V2ZW50KSwgMCwgTV9OT1dBSVQsIDEsIE1U
X0RBVEEpOworCWlmIChtX25vdGlmeSA9PSBOVUxMKQorCQkvKiBubyBzcGFjZSBsZWZ0ICovCisJ
CXJldHVybjsKKwlzc2UgPSBtdG9kKG1fbm90aWZ5LCBzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9ldmVu
dCAqKTsKKwltZW1zZXQoc3NlLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfc2h1dGRvd25fZXZlbnQp
KTsKKwlzc2UtPnNzZV90eXBlID0gU0NUUF9TSFVURE9XTl9FVkVOVDsKKwlzc2UtPnNzZV9mbGFn
cyA9IDA7CisJc3NlLT5zc2VfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3NodXRkb3duX2V2
ZW50KTsKKwlzc2UtPnNzZV9hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7CisKKwlT
Q1RQX0JVRl9MRU4obV9ub3RpZnkpID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3NodXRkb3duX2V2ZW50
KTsKKwlTQ1RQX0JVRl9ORVhUKG1fbm90aWZ5KSA9IE5VTEw7CisKKwkvKiBhcHBlbmQgdG8gc29j
a2V0ICovCisJY29udHJvbCA9IHNjdHBfYnVpbGRfcmVhZHFfZW50cnkoc3RjYiwgc3RjYi0+YXNv
Yy5wcmltYXJ5X2Rlc3RpbmF0aW9uLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsIDAsIHN0Y2ItPmFzb2MuY29udGV4dCwgMCwgMCwgMCwKKwkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX25vdGlmeSk7CisJaWYgKGNvbnRyb2wgPT0gTlVMTCkgeworCQkvKiBu
byBtZW1vcnkgKi8KKwkJc2N0cF9tX2ZyZWVtKG1fbm90aWZ5KTsKKwkJcmV0dXJuOworCX0KKwlj
b250cm9sLT5sZW5ndGggPSBTQ1RQX0JVRl9MRU4obV9ub3RpZnkpOworCWNvbnRyb2wtPnNwZWNf
ZmxhZ3MgPSBNX05PVElGSUNBVElPTjsKKwkvKiBub3QgdGhhdCB3ZSBuZWVkIHRoaXMgKi8KKwlj
b250cm9sLT50YWlsX21idWYgPSBtX25vdGlmeTsKKwlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5z
Y3RwX2VwLCBzdGNiLAorCSAgICBjb250cm9sLAorCSAgICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNv
X3JjdiwgMSwgU0NUUF9SRUFEX0xPQ0tfTk9UX0hFTEQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Cit9
CisKK3N0YXRpYyB2b2lkCitzY3RwX25vdGlmeV9zZW5kZXJfZHJ5X2V2ZW50KHN0cnVjdCBzY3Rw
X3RjYiAqc3RjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvX2xvY2tlZCkK
K3sKKwlzdHJ1Y3QgbWJ1ZiAqbV9ub3RpZnk7CisJc3RydWN0IHNjdHBfc2VuZGVyX2RyeV9ldmVu
dCAqZXZlbnQ7CisJc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2w7CisKKwlpZiAo
KHN0Y2IgPT0gTlVMTCkgfHwKKwkgICAgc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb2ZmKHN0Y2ItPnNj
dHBfZXAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX0RSWUVWTlQpKSB7CisJCS8qIGV2ZW50IG5vdCBl
bmFibGVkICovCisJCXJldHVybjsKKwl9CisKKwltX25vdGlmeSA9IHNjdHBfZ2V0X21idWZfZm9y
X21zZyhzaXplb2Yoc3RydWN0IHNjdHBfc2VuZGVyX2RyeV9ldmVudCksIDAsIE1fTk9XQUlULCAx
LCBNVF9EQVRBKTsKKwlpZiAobV9ub3RpZnkgPT0gTlVMTCkgeworCQkvKiBubyBzcGFjZSBsZWZ0
ICovCisJCXJldHVybjsKKwl9CisJU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9IDA7CisJZXZlbnQg
PSBtdG9kKG1fbm90aWZ5LCBzdHJ1Y3Qgc2N0cF9zZW5kZXJfZHJ5X2V2ZW50ICopOworCW1lbXNl
dChldmVudCwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3NlbmRlcl9kcnlfZXZlbnQpKTsKKwlldmVu
dC0+c2VuZGVyX2RyeV90eXBlID0gU0NUUF9TRU5ERVJfRFJZX0VWRU5UOworCWV2ZW50LT5zZW5k
ZXJfZHJ5X2ZsYWdzID0gMDsKKwlldmVudC0+c2VuZGVyX2RyeV9sZW5ndGggPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfc2VuZGVyX2RyeV9ldmVudCk7CisJZXZlbnQtPnNlbmRlcl9kcnlfYXNzb2NfaWQg
PSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOworCisJU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9IHNp
emVvZihzdHJ1Y3Qgc2N0cF9zZW5kZXJfZHJ5X2V2ZW50KTsKKwlTQ1RQX0JVRl9ORVhUKG1fbm90
aWZ5KSA9IE5VTEw7CisKKwkvKiBhcHBlbmQgdG8gc29ja2V0ICovCisJY29udHJvbCA9IHNjdHBf
YnVpbGRfcmVhZHFfZW50cnkoc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLAor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHN0Y2ItPmFzb2MuY29udGV4
dCwgMCwgMCwgMCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX25vdGlmeSk7
CisJaWYgKGNvbnRyb2wgPT0gTlVMTCkgeworCQkvKiBubyBtZW1vcnkgKi8KKwkJc2N0cF9tX2Zy
ZWVtKG1fbm90aWZ5KTsKKwkJcmV0dXJuOworCX0KKwljb250cm9sLT5sZW5ndGggPSBTQ1RQX0JV
Rl9MRU4obV9ub3RpZnkpOworCWNvbnRyb2wtPnNwZWNfZmxhZ3MgPSBNX05PVElGSUNBVElPTjsK
KwkvKiBub3QgdGhhdCB3ZSBuZWVkIHRoaXMgKi8KKwljb250cm9sLT50YWlsX21idWYgPSBtX25v
dGlmeTsKKwlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLCBjb250cm9sLAor
CSAgICAgICAgICAgICAgICAgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCAxLCBTQ1RQX1JF
QURfTE9DS19OT1RfSEVMRCwgc29fbG9ja2VkKTsKK30KKwordm9pZAorc2N0cF9ub3RpZnlfc3Ry
ZWFtX3Jlc2V0X2FkZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQxNl90IG51bWJlcmluLCB1
aW50MTZfdCBudW1iZXJvdXQsIGludCBmbGFnKQoreworCXN0cnVjdCBtYnVmICptX25vdGlmeTsK
KwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbDsKKwlzdHJ1Y3Qgc2N0cF9zdHJl
YW1fY2hhbmdlX2V2ZW50ICpzdHJhZGQ7CisKKwlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwKKwkgICAg
KHNjdHBfc3RjYl9pc19mZWF0dXJlX29mZihzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1BDQl9G
TEFHU19TVFJFQU1fQ0hBTkdFRVZOVCkpKSB7CisJCS8qIGV2ZW50IG5vdCBlbmFibGVkICovCisJ
CXJldHVybjsKKwl9CisJaWYgKChzdGNiLT5hc29jLnBlZXJfcmVxX291dCkgJiYgZmxhZykgewor
CQkvKiBQZWVyIG1hZGUgdGhlIHJlcXVlc3QsIGRvbid0IHRlbGwgdGhlIGxvY2FsIHVzZXIgKi8K
KwkJc3RjYi0+YXNvYy5wZWVyX3JlcV9vdXQgPSAwOworCQlyZXR1cm47CisJfQorCXN0Y2ItPmFz
b2MucGVlcl9yZXFfb3V0ID0gMDsKKwltX25vdGlmeSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhz
aXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX2NoYW5nZV9ldmVudCksIDAsIE1fTk9XQUlULCAxLCBN
VF9EQVRBKTsKKwlpZiAobV9ub3RpZnkgPT0gTlVMTCkKKwkJLyogbm8gc3BhY2UgbGVmdCAqLwor
CQlyZXR1cm47CisJU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9IDA7CisJc3RyYWRkID0gbXRvZCht
X25vdGlmeSwgc3RydWN0IHNjdHBfc3RyZWFtX2NoYW5nZV9ldmVudCAqKTsKKwltZW1zZXQoc3Ry
YWRkLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX2NoYW5nZV9ldmVudCkpOworCXN0cmFk
ZC0+c3RyY2hhbmdlX3R5cGUgPSBTQ1RQX1NUUkVBTV9DSEFOR0VfRVZFTlQ7CisJc3RyYWRkLT5z
dHJjaGFuZ2VfZmxhZ3MgPSBmbGFnOworCXN0cmFkZC0+c3RyY2hhbmdlX2xlbmd0aCA9IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fY2hhbmdlX2V2ZW50KTsKKwlzdHJhZGQtPnN0cmNoYW5nZV9h
c3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7CisJc3RyYWRkLT5zdHJjaGFuZ2VfaW5z
dHJtcyA9IG51bWJlcmluOworCXN0cmFkZC0+c3RyY2hhbmdlX291dHN0cm1zID0gbnVtYmVyb3V0
OworCVNDVFBfQlVGX0xFTihtX25vdGlmeSkgPSBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX2No
YW5nZV9ldmVudCk7CisJU0NUUF9CVUZfTkVYVChtX25vdGlmeSkgPSBOVUxMOworCWlmIChzY3Rw
X3Nic3BhY2UoJnN0Y2ItPmFzb2MsICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2KSA8IFNDVFBf
QlVGX0xFTihtX25vdGlmeSkpIHsKKwkJLyogbm8gc3BhY2UgKi8KKwkJc2N0cF9tX2ZyZWVtKG1f
bm90aWZ5KTsKKwkJcmV0dXJuOworCX0KKwkvKiBhcHBlbmQgdG8gc29ja2V0ICovCisJY29udHJv
bCA9IHNjdHBfYnVpbGRfcmVhZHFfZW50cnkoc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3Rp
bmF0aW9uLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHN0Y2ItPmFz
b2MuY29udGV4dCwgMCwgMCwgMCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X25vdGlmeSk7CisJaWYgKGNvbnRyb2wgPT0gTlVMTCkgeworCQkvKiBubyBtZW1vcnkgKi8KKwkJ
c2N0cF9tX2ZyZWVtKG1fbm90aWZ5KTsKKwkJcmV0dXJuOworCX0KKwljb250cm9sLT5sZW5ndGgg
PSBTQ1RQX0JVRl9MRU4obV9ub3RpZnkpOworCWNvbnRyb2wtPnNwZWNfZmxhZ3MgPSBNX05PVElG
SUNBVElPTjsKKwkvKiBub3QgdGhhdCB3ZSBuZWVkIHRoaXMgKi8KKwljb250cm9sLT50YWlsX21i
dWYgPSBtX25vdGlmeTsKKwlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLAor
CSAgICBjb250cm9sLAorCSAgICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwgMSwgU0NUUF9S
RUFEX0xPQ0tfTk9UX0hFTEQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Cit9CisKK3ZvaWQKK3NjdHBf
bm90aWZ5X3N0cmVhbV9yZXNldF90c24oc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBz
ZW5kaW5nX3RzbiwgdWludDMyX3QgcmVjdl90c24sIGludCBmbGFnKQoreworCXN0cnVjdCBtYnVm
ICptX25vdGlmeTsKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbDsKKwlzdHJ1
Y3Qgc2N0cF9hc3NvY19yZXNldF9ldmVudCAqc3RyYXNvYzsKKworCWlmICgoc3RjYiA9PSBOVUxM
KSB8fAorCSAgICAoc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb2ZmKHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
IFNDVFBfUENCX0ZMQUdTX0FTU09DX1JFU0VURVZOVCkpKSB7CisJCS8qIGV2ZW50IG5vdCBlbmFi
bGVkICovCisJCXJldHVybjsKKwl9CisJbV9ub3RpZnkgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2co
c2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3Jlc2V0X2V2ZW50KSwgMCwgTV9OT1dBSVQsIDEsIE1U
X0RBVEEpOworCWlmIChtX25vdGlmeSA9PSBOVUxMKQorCQkvKiBubyBzcGFjZSBsZWZ0ICovCisJ
CXJldHVybjsKKwlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gMDsKKwlzdHJhc29jID0gbXRvZCht
X25vdGlmeSwgc3RydWN0IHNjdHBfYXNzb2NfcmVzZXRfZXZlbnQgICopOworCW1lbXNldChzdHJh
c29jLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfcmVzZXRfZXZlbnQpKTsKKwlzdHJhc29j
LT5hc3NvY3Jlc2V0X3R5cGUgPSBTQ1RQX0FTU09DX1JFU0VUX0VWRU5UOworCXN0cmFzb2MtPmFz
c29jcmVzZXRfZmxhZ3MgPSBmbGFnOworCXN0cmFzb2MtPmFzc29jcmVzZXRfbGVuZ3RoID0gc2l6
ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3Jlc2V0X2V2ZW50KTsKKwlzdHJhc29jLT5hc3NvY3Jlc2V0
X2Fzc29jX2lkPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOworCXN0cmFzb2MtPmFzc29jcmVzZXRf
bG9jYWxfdHNuID0gc2VuZGluZ190c247CisJc3RyYXNvYy0+YXNzb2NyZXNldF9yZW1vdGVfdHNu
ID0gcmVjdl90c247CisJU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9IHNpemVvZihzdHJ1Y3Qgc2N0
cF9hc3NvY19yZXNldF9ldmVudCk7CisJU0NUUF9CVUZfTkVYVChtX25vdGlmeSkgPSBOVUxMOwor
CWlmIChzY3RwX3Nic3BhY2UoJnN0Y2ItPmFzb2MsICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2
KSA8IFNDVFBfQlVGX0xFTihtX25vdGlmeSkpIHsKKwkJLyogbm8gc3BhY2UgKi8KKwkJc2N0cF9t
X2ZyZWVtKG1fbm90aWZ5KTsKKwkJcmV0dXJuOworCX0KKwkvKiBhcHBlbmQgdG8gc29ja2V0ICov
CisJY29udHJvbCA9IHNjdHBfYnVpbGRfcmVhZHFfZW50cnkoc3RjYiwgc3RjYi0+YXNvYy5wcmlt
YXJ5X2Rlc3RpbmF0aW9uLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAs
IHN0Y2ItPmFzb2MuY29udGV4dCwgMCwgMCwgMCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX25vdGlmeSk7CisJaWYgKGNvbnRyb2wgPT0gTlVMTCkgeworCQkvKiBubyBtZW1v
cnkgKi8KKwkJc2N0cF9tX2ZyZWVtKG1fbm90aWZ5KTsKKwkJcmV0dXJuOworCX0KKwljb250cm9s
LT5sZW5ndGggPSBTQ1RQX0JVRl9MRU4obV9ub3RpZnkpOworCWNvbnRyb2wtPnNwZWNfZmxhZ3Mg
PSBNX05PVElGSUNBVElPTjsKKwkvKiBub3QgdGhhdCB3ZSBuZWVkIHRoaXMgKi8KKwljb250cm9s
LT50YWlsX21idWYgPSBtX25vdGlmeTsKKwlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2Vw
LCBzdGNiLAorCSAgICBjb250cm9sLAorCSAgICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3Jjdiwg
MSwgU0NUUF9SRUFEX0xPQ0tfTk9UX0hFTEQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Cit9CisKK3N0
YXRpYyB2b2lkCitzY3RwX25vdGlmeV9zdHJlYW1fcmVzZXQoc3RydWN0IHNjdHBfdGNiICpzdGNi
LAorICAgIGludCBudW1iZXJfZW50cmllcywgdWludDE2X3QgKiBsaXN0LCBpbnQgZmxhZykKK3sK
KwlzdHJ1Y3QgbWJ1ZiAqbV9ub3RpZnk7CisJc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNv
bnRyb2w7CisJc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2V2ZW50ICpzdHJyZXNldDsKKwlpbnQg
bGVuOworCisJaWYgKChzdGNiID09IE5VTEwpIHx8CisJICAgIChzY3RwX3N0Y2JfaXNfZmVhdHVy
ZV9vZmYoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfU1RSRUFNX1JFU0VURVZO
VCkpKSB7CisJCS8qIGV2ZW50IG5vdCBlbmFibGVkICovCisJCXJldHVybjsKKwl9CisKKwltX25v
dGlmeSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhNQ0xCWVRFUywgMCwgTV9OT1dBSVQsIDEsIE1U
X0RBVEEpOworCWlmIChtX25vdGlmeSA9PSBOVUxMKQorCQkvKiBubyBzcGFjZSBsZWZ0ICovCisJ
CXJldHVybjsKKwlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gMDsKKwlsZW4gPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2V2ZW50KSArIChudW1iZXJfZW50cmllcyAqIHNpemVvZih1
aW50MTZfdCkpOworCWlmIChsZW4gPiBNX1RSQUlMSU5HU1BBQ0UobV9ub3RpZnkpKSB7CisJCS8q
IG5ldmVyIGVub3VnaCByb29tICovCisJCXNjdHBfbV9mcmVlbShtX25vdGlmeSk7CisJCXJldHVy
bjsKKwl9CisJc3RycmVzZXQgPSBtdG9kKG1fbm90aWZ5LCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVz
ZXRfZXZlbnQgKik7CisJbWVtc2V0KHN0cnJlc2V0LCAwLCBsZW4pOworCXN0cnJlc2V0LT5zdHJy
ZXNldF90eXBlID0gU0NUUF9TVFJFQU1fUkVTRVRfRVZFTlQ7CisJc3RycmVzZXQtPnN0cnJlc2V0
X2ZsYWdzID0gZmxhZzsKKwlzdHJyZXNldC0+c3RycmVzZXRfbGVuZ3RoID0gbGVuOworCXN0cnJl
c2V0LT5zdHJyZXNldF9hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7CisJaWYgKG51
bWJlcl9lbnRyaWVzKSB7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBudW1iZXJfZW50
cmllczsgaSsrKSB7CisJCQlzdHJyZXNldC0+c3RycmVzZXRfc3RyZWFtX2xpc3RbaV0gPSBudG9o
cyhsaXN0W2ldKTsKKwkJfQorCX0KKwlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gbGVuOworCVND
VFBfQlVGX05FWFQobV9ub3RpZnkpID0gTlVMTDsKKwlpZiAoc2N0cF9zYnNwYWNlKCZzdGNiLT5h
c29jLCAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdikgPCBTQ1RQX0JVRl9MRU4obV9ub3RpZnkp
KSB7CisJCS8qIG5vIHNwYWNlICovCisJCXNjdHBfbV9mcmVlbShtX25vdGlmeSk7CisJCXJldHVy
bjsKKwl9CisJLyogYXBwZW5kIHRvIHNvY2tldCAqLworCWNvbnRyb2wgPSBzY3RwX2J1aWxkX3Jl
YWRxX2VudHJ5KHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwKKwkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBzdGNiLT5hc29jLmNvbnRleHQsIDAsIDAs
IDAsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ub3RpZnkpOworCWlmIChj
b250cm9sID09IE5VTEwpIHsKKwkJLyogbm8gbWVtb3J5ICovCisJCXNjdHBfbV9mcmVlbShtX25v
dGlmeSk7CisJCXJldHVybjsKKwl9CisJY29udHJvbC0+bGVuZ3RoID0gU0NUUF9CVUZfTEVOKG1f
bm90aWZ5KTsKKwljb250cm9sLT5zcGVjX2ZsYWdzID0gTV9OT1RJRklDQVRJT047CisJLyogbm90
IHRoYXQgd2UgbmVlZCB0aGlzICovCisJY29udHJvbC0+dGFpbF9tYnVmID0gbV9ub3RpZnk7CisJ
c2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkgICAgICAgICAgICAgICAg
ICBjb250cm9sLAorCSAgICAgICAgICAgICAgICAgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2
LCAxLCBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKK30KKwor
c3RhdGljIHZvaWQKK3NjdHBfbm90aWZ5X3JlbW90ZV9lcnJvcihzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsIHVpbnQxNl90IGVycm9yLCBzdHJ1Y3Qgc2N0cF9lcnJvcl9jaHVuayAqY2h1bmspCit7CisJ
c3RydWN0IG1idWYgKm1fbm90aWZ5OworCXN0cnVjdCBzY3RwX3JlbW90ZV9lcnJvciAqc3JlOwor
CXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sOworCXVuc2lnbmVkIGludCBub3Rp
Zl9sZW47CisJdWludDE2X3QgY2h1bmtfbGVuOworCisJaWYgKChzdGNiID09IE5VTEwpIHx8CisJ
ICAgIHNjdHBfc3RjYl9pc19mZWF0dXJlX29mZihzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1BD
Ql9GTEFHU19SRUNWUEVFUkVSUikpIHsKKwkJcmV0dXJuOworCX0KKwlpZiAoY2h1bmsgIT0gTlVM
TCkgeworCQljaHVua19sZW4gPSBudG9ocyhjaHVuay0+Y2guY2h1bmtfbGVuZ3RoKTsKKwkJLyoK
KwkJICogT25seSBTQ1RQX0NIVU5LX0JVRkZFUl9TSVpFIGFyZSBndWFyYW50ZWVkIHRvIGJlCisJ
CSAqIGNvbnRpZ3VvdXMuCisJCSAqLworCQlpZiAoY2h1bmtfbGVuID4gU0NUUF9DSFVOS19CVUZG
RVJfU0laRSkgeworCQkJY2h1bmtfbGVuID0gU0NUUF9DSFVOS19CVUZGRVJfU0laRTsKKwkJfQor
CX0gZWxzZSB7CisJCWNodW5rX2xlbiA9IDA7CisJfQorCW5vdGlmX2xlbiA9ICh1bnNpZ25lZCBp
bnQpKHNpemVvZihzdHJ1Y3Qgc2N0cF9yZW1vdGVfZXJyb3IpICsgY2h1bmtfbGVuKTsKKwltX25v
dGlmeSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhub3RpZl9sZW4sIDAsIE1fTk9XQUlULCAxLCBN
VF9EQVRBKTsKKwlpZiAobV9ub3RpZnkgPT0gTlVMTCkgeworCQkvKiBSZXRyeSB3aXRoIHNtYWxs
ZXIgdmFsdWUuICovCisJCW5vdGlmX2xlbiA9ICh1bnNpZ25lZCBpbnQpc2l6ZW9mKHN0cnVjdCBz
Y3RwX3JlbW90ZV9lcnJvcik7CisJCW1fbm90aWZ5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKG5v
dGlmX2xlbiwgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOworCQlpZiAobV9ub3RpZnkgPT0gTlVM
TCkgeworCQkJcmV0dXJuOworCQl9CisJfQorCVNDVFBfQlVGX05FWFQobV9ub3RpZnkpID0gTlVM
TDsKKwlzcmUgPSBtdG9kKG1fbm90aWZ5LCBzdHJ1Y3Qgc2N0cF9yZW1vdGVfZXJyb3IgKik7CisJ
bWVtc2V0KHNyZSwgMCwgbm90aWZfbGVuKTsKKwlzcmUtPnNyZV90eXBlID0gU0NUUF9SRU1PVEVf
RVJST1I7CisJc3JlLT5zcmVfZmxhZ3MgPSAwOworCXNyZS0+c3JlX2xlbmd0aCA9IHNpemVvZihz
dHJ1Y3Qgc2N0cF9yZW1vdGVfZXJyb3IpOworCXNyZS0+c3JlX2Vycm9yID0gZXJyb3I7CisJc3Jl
LT5zcmVfYXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOworCWlmIChub3RpZl9sZW4g
PiBzaXplb2Yoc3RydWN0IHNjdHBfcmVtb3RlX2Vycm9yKSkgeworCQltZW1jcHkoc3JlLT5zcmVf
ZGF0YSwgY2h1bmssIGNodW5rX2xlbik7CisJCXNyZS0+c3JlX2xlbmd0aCArPSBjaHVua19sZW47
CisJfQorCVNDVFBfQlVGX0xFTihtX25vdGlmeSkgPSBzcmUtPnNyZV9sZW5ndGg7CisJY29udHJv
bCA9IHNjdHBfYnVpbGRfcmVhZHFfZW50cnkoc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3Rp
bmF0aW9uLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHN0Y2ItPmFz
b2MuY29udGV4dCwgMCwgMCwgMCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X25vdGlmeSk7CisJaWYgKGNvbnRyb2wgIT0gTlVMTCkgeworCQljb250cm9sLT5sZW5ndGggPSBT
Q1RQX0JVRl9MRU4obV9ub3RpZnkpOworCQljb250cm9sLT5zcGVjX2ZsYWdzID0gTV9OT1RJRklD
QVRJT047CisJCS8qIG5vdCB0aGF0IHdlIG5lZWQgdGhpcyAqLworCQljb250cm9sLT50YWlsX21i
dWYgPSBtX25vdGlmeTsKKwkJc2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwK
KwkJICAgICAgICAgICAgICAgICAgY29udHJvbCwKKwkJICAgICAgICAgICAgICAgICAgJnN0Y2It
PnNjdHBfc29ja2V0LT5zb19yY3YsIDEsCisJCSAgICAgICAgICAgICAgICAgIFNDVFBfUkVBRF9M
T0NLX05PVF9IRUxELCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCX0gZWxzZSB7CisJCXNjdHBfbV9m
cmVlbShtX25vdGlmeSk7CisJfQorfQorCit2b2lkCitzY3RwX3VscF9ub3RpZnkodWludDMyX3Qg
bm90aWZpY2F0aW9uLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgdWludDMyX3QgZXJyb3Is
IHZvaWQgKmRhdGEsIGludCBzb19sb2NrZWQpCit7CisJaWYgKChzdGNiID09IE5VTEwpIHx8CisJ
ICAgIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dP
TkUpIHx8CisJICAgIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
U09DS0VUX0FMTEdPTkUpIHx8CisJICAgIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9D
TE9TRURfU09DS0VUKSkgeworCQkvKiBJZiB0aGUgc29ja2V0IGlzIGdvbmUgd2UgYXJlIG91dCBv
ZiBoZXJlICovCisJCXJldHVybjsKKwl9CisjaWYgKGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRl
ZmluZWQoX1dJTjMyKSkgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlpZiAoc3RjYi0+c2N0
cF9zb2NrZXQtPnNvX3Jjdi5zYl9zdGF0ZSAmIFNCU19DQU5UUkNWTU9SRSkgeworI2Vsc2UKKwlp
ZiAoc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3N0YXRlICYgU1NfQ0FOVFJDVk1PUkUpIHsKKyNlbmRp
ZgorCQlyZXR1cm47CisJfQorI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorCWlmIChzb19sb2NrZWQpIHsKKwkJc2N0cF9sb2NrX2Fzc2VydChTQ1RQX0lO
UF9TTyhzdGNiLT5zY3RwX2VwKSk7CisJfSBlbHNlIHsKKwkJc2N0cF91bmxvY2tfYXNzZXJ0KFND
VFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApKTsKKwl9CisjZW5kaWYKKwlpZiAoKFNDVFBfR0VUX1NU
QVRFKHN0Y2IpID09IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpIHx8CisJICAgIChTQ1RQX0dFVF9T
VEFURShzdGNiKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQpKSB7CisJCWlmICgobm90aWZp
Y2F0aW9uID09IFNDVFBfTk9USUZZX0lOVEVSRkFDRV9ET1dOKSB8fAorCQkgICAgKG5vdGlmaWNh
dGlvbiA9PSBTQ1RQX05PVElGWV9JTlRFUkZBQ0VfVVApIHx8CisJCSAgICAobm90aWZpY2F0aW9u
ID09IFNDVFBfTk9USUZZX0lOVEVSRkFDRV9DT05GSVJNRUQpKSB7CisJCQkvKiBEb24ndCByZXBv
cnQgdGhlc2UgaW4gZnJvbnQgc3RhdGVzICovCisJCQlyZXR1cm47CisJCX0KKwl9CisJc3dpdGNo
IChub3RpZmljYXRpb24pIHsKKwljYXNlIFNDVFBfTk9USUZZX0FTU09DX1VQOgorCQlpZiAoc3Rj
Yi0+YXNvYy5hc3NvY191cF9zZW50ID09IDApIHsKKwkJCXNjdHBfbm90aWZ5X2Fzc29jX2NoYW5n
ZShTQ1RQX0NPTU1fVVAsIHN0Y2IsIGVycm9yLCBOVUxMLCAwLCBzb19sb2NrZWQpOworCQkJc3Rj
Yi0+YXNvYy5hc3NvY191cF9zZW50ID0gMTsKKwkJfQorCQlpZiAoc3RjYi0+YXNvYy5hZGFwdGF0
aW9uX25lZWRlZCAmJiAoc3RjYi0+YXNvYy5hZGFwdGF0aW9uX3NlbnQgPT0gMCkpIHsKKwkJCXNj
dHBfbm90aWZ5X2FkYXB0YXRpb25fbGF5ZXIoc3RjYik7CisJCX0KKwkJaWYgKHN0Y2ItPmFzb2Mu
YXV0aF9zdXBwb3J0ZWQgPT0gMCkgeworCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX05P
X1BFRVJfQVVUSCwgc3RjYiwgMCwKKwkJCSAgICAgICAgICAgICAgICBOVUxMLCBzb19sb2NrZWQp
OworCQl9CisJCWJyZWFrOworCWNhc2UgU0NUUF9OT1RJRllfQVNTT0NfRE9XTjoKKwkJc2N0cF9u
b3RpZnlfYXNzb2NfY2hhbmdlKFNDVFBfU0hVVERPV05fQ09NUCwgc3RjYiwgZXJyb3IsIE5VTEws
IDAsIHNvX2xvY2tlZCk7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlpZiAoc3RjYi0+
c2N0cF9lcC0+cmVjdl9jYWxsYmFjaykgeworCQkJaWYgKHN0Y2ItPnNjdHBfc29ja2V0KSB7CisJ
CQkJdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkcjsKKwkJCQlzdHJ1Y3Qgc2N0cF9yY3ZpbmZvIHJj
djsKKworCQkJCW1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKHVuaW9uIHNjdHBfc29ja3N0b3JlKSk7
CisJCQkJbWVtc2V0KCZyY3YsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9yY3ZpbmZvKSk7CisJCQkJ
YXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCQlTQ1RQX1RDQl9VTkxP
Q0soc3RjYik7CisJCQkJc3RjYi0+c2N0cF9lcC0+cmVjdl9jYWxsYmFjayhzdGNiLT5zY3RwX3Nv
Y2tldCwgYWRkciwgTlVMTCwgMCwgcmN2LCAwLCBzdGNiLT5zY3RwX2VwLT51bHBfaW5mbyk7CisJ
CQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5h
c29jLnJlZmNudCwgMSk7CisJCQl9CisJCX0KKyNlbmRpZgorCQlicmVhazsKKwljYXNlIFNDVFBf
Tk9USUZZX0lOVEVSRkFDRV9ET1dOOgorCQl7CisJCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisK
KwkJCW5ldCA9IChzdHJ1Y3Qgc2N0cF9uZXRzICopZGF0YTsKKwkJCXNjdHBfbm90aWZ5X3BlZXJf
YWRkcl9jaGFuZ2Uoc3RjYiwgU0NUUF9BRERSX1VOUkVBQ0hBQkxFLAorCQkJICAgIChzdHJ1Y3Qg
c29ja2FkZHIgKikmbmV0LT5yby5fbF9hZGRyLCBlcnJvciwgc29fbG9ja2VkKTsKKwkJCWJyZWFr
OworCQl9CisJY2FzZSBTQ1RQX05PVElGWV9JTlRFUkZBQ0VfVVA6CisJCXsKKwkJCXN0cnVjdCBz
Y3RwX25ldHMgKm5ldDsKKworCQkJbmV0ID0gKHN0cnVjdCBzY3RwX25ldHMgKilkYXRhOworCQkJ
c2N0cF9ub3RpZnlfcGVlcl9hZGRyX2NoYW5nZShzdGNiLCBTQ1RQX0FERFJfQVZBSUxBQkxFLAor
CQkJICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbmV0LT5yby5fbF9hZGRyLCBlcnJvciwgc29fbG9j
a2VkKTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBTQ1RQX05PVElGWV9JTlRFUkZBQ0VfQ09ORklS
TUVEOgorCQl7CisJCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisKKwkJCW5ldCA9IChzdHJ1Y3Qg
c2N0cF9uZXRzICopZGF0YTsKKwkJCXNjdHBfbm90aWZ5X3BlZXJfYWRkcl9jaGFuZ2Uoc3RjYiwg
U0NUUF9BRERSX0NPTkZJUk1FRCwKKwkJCSAgICAoc3RydWN0IHNvY2thZGRyICopJm5ldC0+cm8u
X2xfYWRkciwgZXJyb3IsIHNvX2xvY2tlZCk7CisJCQlicmVhazsKKwkJfQorCWNhc2UgU0NUUF9O
T1RJRllfU1BFQ0lBTF9TUF9GQUlMOgorCQlzY3RwX25vdGlmeV9zZW5kX2ZhaWxlZDIoc3RjYiwg
ZXJyb3IsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNjdHBfc3RyZWFtX3F1
ZXVlX3BlbmRpbmcgKilkYXRhLCBzb19sb2NrZWQpOworCQlicmVhazsKKwljYXNlIFNDVFBfTk9U
SUZZX1NFTlRfREdfRkFJTDoKKwkJc2N0cF9ub3RpZnlfc2VuZF9mYWlsZWQoc3RjYiwgMSwgZXJy
b3IsCisJCSAgICAoc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqKWRhdGEsIHNvX2xvY2tlZCk7CisJ
CWJyZWFrOworCWNhc2UgU0NUUF9OT1RJRllfVU5TRU5UX0RHX0ZBSUw6CisJCXNjdHBfbm90aWZ5
X3NlbmRfZmFpbGVkKHN0Y2IsIDAsIGVycm9yLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAo
c3RydWN0IHNjdHBfdG1pdF9jaHVuayAqKWRhdGEsIHNvX2xvY2tlZCk7CisJCWJyZWFrOworCWNh
c2UgU0NUUF9OT1RJRllfUEFSVElBTF9ERUxWSUVSWV9JTkRJQ0FUSU9OOgorCQl7CisJCQl1aW50
MzJfdCB2YWw7CisJCQl2YWwgPSAqKCh1aW50MzJfdCAqKWRhdGEpOworCisJCQlzY3RwX25vdGlm
eV9wYXJ0aWFsX2RlbGl2ZXJ5X2luZGljYXRpb24oc3RjYiwgZXJyb3IsIHZhbCwgc29fbG9ja2Vk
KTsKKwkJYnJlYWs7CisJCX0KKwljYXNlIFNDVFBfTk9USUZZX0FTU09DX0xPQ19BQk9SVEVEOgor
CQlpZiAoKFNDVFBfR0VUX1NUQVRFKHN0Y2IpID09IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpIHx8
CisJCSAgICAoU0NUUF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9DT09LSUVfRUNIT0VE
KSkgeworCQkJc2N0cF9ub3RpZnlfYXNzb2NfY2hhbmdlKFNDVFBfQ0FOVF9TVFJfQVNTT0MsIHN0
Y2IsIGVycm9yLCBkYXRhLCAwLCBzb19sb2NrZWQpOworCQl9IGVsc2UgeworCQkJc2N0cF9ub3Rp
ZnlfYXNzb2NfY2hhbmdlKFNDVFBfQ09NTV9MT1NULCBzdGNiLCBlcnJvciwgZGF0YSwgMCwgc29f
bG9ja2VkKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFNDVFBfTk9USUZZX0FTU09DX1JFTV9BQk9S
VEVEOgorCQlpZiAoKFNDVFBfR0VUX1NUQVRFKHN0Y2IpID09IFNDVFBfU1RBVEVfQ09PS0lFX1dB
SVQpIHx8CisJCSAgICAoU0NUUF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9DT09LSUVf
RUNIT0VEKSkgeworCQkJc2N0cF9ub3RpZnlfYXNzb2NfY2hhbmdlKFNDVFBfQ0FOVF9TVFJfQVNT
T0MsIHN0Y2IsIGVycm9yLCBkYXRhLCAxLCBzb19sb2NrZWQpOworCQl9IGVsc2UgeworCQkJc2N0
cF9ub3RpZnlfYXNzb2NfY2hhbmdlKFNDVFBfQ09NTV9MT1NULCBzdGNiLCBlcnJvciwgZGF0YSwg
MSwgc29fbG9ja2VkKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFNDVFBfTk9USUZZX0FTU09DX1JF
U1RBUlQ6CisJCXNjdHBfbm90aWZ5X2Fzc29jX2NoYW5nZShTQ1RQX1JFU1RBUlQsIHN0Y2IsIGVy
cm9yLCBOVUxMLCAwLCBzb19sb2NrZWQpOworCQlpZiAoc3RjYi0+YXNvYy5hdXRoX3N1cHBvcnRl
ZCA9PSAwKSB7CisJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfTk9fUEVFUl9BVVRILCBz
dGNiLCAwLAorCQkJICAgICAgICAgICAgICAgIE5VTEwsIHNvX2xvY2tlZCk7CisJCX0KKwkJYnJl
YWs7CisJY2FzZSBTQ1RQX05PVElGWV9TVFJfUkVTRVRfU0VORDoKKwkJc2N0cF9ub3RpZnlfc3Ry
ZWFtX3Jlc2V0KHN0Y2IsIGVycm9yLCAoKHVpbnQxNl90ICopIGRhdGEpLCBTQ1RQX1NUUkVBTV9S
RVNFVF9PVVRHT0lOR19TU04pOworCQlicmVhazsKKwljYXNlIFNDVFBfTk9USUZZX1NUUl9SRVNF
VF9SRUNWOgorCQlzY3RwX25vdGlmeV9zdHJlYW1fcmVzZXQoc3RjYiwgZXJyb3IsICgodWludDE2
X3QgKikgZGF0YSksIFNDVFBfU1RSRUFNX1JFU0VUX0lOQ09NSU5HKTsKKwkJYnJlYWs7CisJY2Fz
ZSBTQ1RQX05PVElGWV9TVFJfUkVTRVRfRkFJTEVEX09VVDoKKwkJc2N0cF9ub3RpZnlfc3RyZWFt
X3Jlc2V0KHN0Y2IsIGVycm9yLCAoKHVpbnQxNl90ICopIGRhdGEpLAorCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgKFNDVFBfU1RSRUFNX1JFU0VUX09VVEdPSU5HX1NTTnxTQ1RQX1NUUkVBTV9S
RVNFVF9GQUlMRUQpKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX05PVElGWV9TVFJfUkVTRVRfREVO
SUVEX09VVDoKKwkJc2N0cF9ub3RpZnlfc3RyZWFtX3Jlc2V0KHN0Y2IsIGVycm9yLCAoKHVpbnQx
Nl90ICopIGRhdGEpLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgKFNDVFBfU1RSRUFNX1JF
U0VUX09VVEdPSU5HX1NTTnxTQ1RQX1NUUkVBTV9SRVNFVF9ERU5JRUQpKTsKKwkJYnJlYWs7CisJ
Y2FzZSBTQ1RQX05PVElGWV9TVFJfUkVTRVRfRkFJTEVEX0lOOgorCQlzY3RwX25vdGlmeV9zdHJl
YW1fcmVzZXQoc3RjYiwgZXJyb3IsICgodWludDE2X3QgKikgZGF0YSksCisJCSAgICAgICAgICAg
ICAgICAgICAgICAgICAoU0NUUF9TVFJFQU1fUkVTRVRfSU5DT01JTkd8U0NUUF9TVFJFQU1fUkVT
RVRfRkFJTEVEKSk7CisJCWJyZWFrOworCWNhc2UgU0NUUF9OT1RJRllfU1RSX1JFU0VUX0RFTklF
RF9JTjoKKwkJc2N0cF9ub3RpZnlfc3RyZWFtX3Jlc2V0KHN0Y2IsIGVycm9yLCAoKHVpbnQxNl90
ICopIGRhdGEpLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgKFNDVFBfU1RSRUFNX1JFU0VU
X0lOQ09NSU5HfFNDVFBfU1RSRUFNX1JFU0VUX0RFTklFRCkpOworCQlicmVhazsKKwljYXNlIFND
VFBfTk9USUZZX0FTQ09ORl9BRERfSVA6CisJCXNjdHBfbm90aWZ5X3BlZXJfYWRkcl9jaGFuZ2Uo
c3RjYiwgU0NUUF9BRERSX0FEREVELCBkYXRhLAorCQkgICAgZXJyb3IsIHNvX2xvY2tlZCk7CisJ
CWJyZWFrOworCWNhc2UgU0NUUF9OT1RJRllfQVNDT05GX0RFTEVURV9JUDoKKwkJc2N0cF9ub3Rp
ZnlfcGVlcl9hZGRyX2NoYW5nZShzdGNiLCBTQ1RQX0FERFJfUkVNT1ZFRCwgZGF0YSwKKwkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciwgc29fbG9ja2VkKTsKKwkJYnJlYWs7CisJ
Y2FzZSBTQ1RQX05PVElGWV9BU0NPTkZfU0VUX1BSSU1BUlk6CisJCXNjdHBfbm90aWZ5X3BlZXJf
YWRkcl9jaGFuZ2Uoc3RjYiwgU0NUUF9BRERSX01BREVfUFJJTSwgZGF0YSwKKwkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlcnJvciwgc29fbG9ja2VkKTsKKwkJYnJlYWs7CisJY2FzZSBT
Q1RQX05PVElGWV9QRUVSX1NIVVRET1dOOgorCQlzY3RwX25vdGlmeV9zaHV0ZG93bl9ldmVudChz
dGNiKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX05PVElGWV9BVVRIX05FV19LRVk6CisJCXNjdHBf
bm90aWZ5X2F1dGhlbnRpY2F0aW9uKHN0Y2IsIFNDVFBfQVVUSF9ORVdfS0VZLCBlcnJvciwKKwkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQxNl90KSh1aW50cHRyX3QpZGF0YSwKKwkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc29fbG9ja2VkKTsKKwkJYnJlYWs7CisJY2FzZSBT
Q1RQX05PVElGWV9BVVRIX0ZSRUVfS0VZOgorCQlzY3RwX25vdGlmeV9hdXRoZW50aWNhdGlvbihz
dGNiLCBTQ1RQX0FVVEhfRlJFRV9LRVksIGVycm9yLAorCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAodWludDE2X3QpKHVpbnRwdHJfdClkYXRhLAorCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzb19sb2NrZWQpOworCQlicmVhazsKKwljYXNlIFNDVFBfTk9USUZZX05PX1BFRVJfQVVU
SDoKKwkJc2N0cF9ub3RpZnlfYXV0aGVudGljYXRpb24oc3RjYiwgU0NUUF9BVVRIX05PX0FVVEgs
IGVycm9yLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDE2X3QpKHVpbnRwdHJf
dClkYXRhLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBzb19sb2NrZWQpOworCQlicmVh
azsKKwljYXNlIFNDVFBfTk9USUZZX1NFTkRFUl9EUlk6CisJCXNjdHBfbm90aWZ5X3NlbmRlcl9k
cnlfZXZlbnQoc3RjYiwgc29fbG9ja2VkKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX05PVElGWV9S
RU1PVEVfRVJST1I6CisJCXNjdHBfbm90aWZ5X3JlbW90ZV9lcnJvcihzdGNiLCBlcnJvciwgZGF0
YSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVNDVFBEQkcoU0NUUF9ERUJVR19VVElMMSwgIiVz
OiB1bmtub3duIG5vdGlmaWNhdGlvbiAleGggKCV1KVxuIiwKKwkJCV9fZnVuY19fLCBub3RpZmlj
YXRpb24sIG5vdGlmaWNhdGlvbik7CisJCWJyZWFrOworCX0JCQkvKiBlbmQgc3dpdGNoICovCit9
CisKK3ZvaWQKK3NjdHBfcmVwb3J0X2FsbF9vdXRib3VuZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Is
IHVpbnQxNl90IGVycm9yLCBpbnQgc29fbG9ja2VkKQoreworCXN0cnVjdCBzY3RwX2Fzc29jaWF0
aW9uICphc29jOworCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKm91dHM7CisJc3RydWN0IHNjdHBf
dG1pdF9jaHVuayAqY2hrLCAqbmNoazsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGlu
ZyAqc3AsICpuc3A7CisJaW50IGk7CisKKwlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCXJldHVybjsK
Kwl9CisJYXNvYyA9ICZzdGNiLT5hc29jOworCWlmIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVf
QUJPVVRfVE9fQkVfRlJFRUQpIHsKKwkJLyogYWxyZWFkeSBiZWluZyBmcmVlZCAqLworCQlyZXR1
cm47CisJfQorI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorCWlmIChzb19sb2NrZWQpIHsKKwkJc2N0cF9sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhzdGNi
LT5zY3RwX2VwKSk7CisJfSBlbHNlIHsKKwkJc2N0cF91bmxvY2tfYXNzZXJ0KFNDVFBfSU5QX1NP
KHN0Y2ItPnNjdHBfZXApKTsKKwl9CisjZW5kaWYKKwlpZiAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgfHwKKwkgICAgKHN0Y2ItPnNjdHBf
ZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkgfHwKKwkgICAg
KGFzb2MtPnN0YXRlICYgU0NUUF9TVEFURV9DTE9TRURfU09DS0VUKSkgeworCQlyZXR1cm47CisJ
fQorCS8qIG5vdyB0aHJvdWdoIGFsbCB0aGUgZ3VuayBmcmVlaW5nIGNodW5rcyAqLworCS8qIHNl
bnQgcXVldWUgU0hPVUxEIGJlIGVtcHR5ICovCisJVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJmFz
b2MtPnNlbnRfcXVldWUsIHNjdHBfbmV4dCwgbmNoaykgeworCQlUQUlMUV9SRU1PVkUoJmFzb2Mt
PnNlbnRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKKwkJYXNvYy0+c2VudF9xdWV1ZV9jbnQtLTsK
KwkJaWYgKGNoay0+c2VudCAhPSBTQ1RQX0RBVEFHUkFNX05SX0FDS0VEKSB7CisJCQlpZiAoYXNv
Yy0+c3RybW91dFtjaGstPnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcyA+IDApIHsKKwkJ
CQlhc29jLT5zdHJtb3V0W2Noay0+cmVjLmRhdGEuc2lkXS5jaHVua3Nfb25fcXVldWVzLS07Cisj
aWZkZWYgSU5WQVJJQU5UUworCQkJfSBlbHNlIHsKKwkJCQlwYW5pYygiTm8gY2h1bmtzIG9uIHRo
ZSBxdWV1ZXMgZm9yIHNpZCAldS4iLCBjaGstPnJlYy5kYXRhLnNpZCk7CisjZW5kaWYKKwkJCX0K
KwkJfQorCQlpZiAoY2hrLT5kYXRhICE9IE5VTEwpIHsKKwkJCXNjdHBfZnJlZV9idWZzcGFjZShz
dGNiLCBhc29jLCBjaGssIDEpOworCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1NFTlRf
REdfRkFJTCwgc3RjYiwKKwkJCSAgICAgICAgICAgICAgICBlcnJvciwgY2hrLCBzb19sb2NrZWQp
OworCQkJaWYgKGNoay0+ZGF0YSkgeworCQkJCXNjdHBfbV9mcmVlbShjaGstPmRhdGEpOworCQkJ
CWNoay0+ZGF0YSA9IE5VTEw7CisJCQl9CisJCX0KKwkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwg
Y2hrLCBzb19sb2NrZWQpOworCQkvKnNhX2lnbm9yZSBGUkVFRF9NRU1PUlkqLworCX0KKwkvKiBw
ZW5kaW5nIHNlbmQgcXVldWUgU0hPVUxEIGJlIGVtcHR5ICovCisJVEFJTFFfRk9SRUFDSF9TQUZF
KGNoaywgJmFzb2MtPnNlbmRfcXVldWUsIHNjdHBfbmV4dCwgbmNoaykgeworCQlUQUlMUV9SRU1P
VkUoJmFzb2MtPnNlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKKwkJYXNvYy0+c2VuZF9xdWV1
ZV9jbnQtLTsKKwkJaWYgKGFzb2MtPnN0cm1vdXRbY2hrLT5yZWMuZGF0YS5zaWRdLmNodW5rc19v
bl9xdWV1ZXMgPiAwKSB7CisJCQlhc29jLT5zdHJtb3V0W2Noay0+cmVjLmRhdGEuc2lkXS5jaHVu
a3Nfb25fcXVldWVzLS07CisjaWZkZWYgSU5WQVJJQU5UUworCQl9IGVsc2UgeworCQkJcGFuaWMo
Ik5vIGNodW5rcyBvbiB0aGUgcXVldWVzIGZvciBzaWQgJXUuIiwgY2hrLT5yZWMuZGF0YS5zaWQp
OworI2VuZGlmCisJCX0KKwkJaWYgKGNoay0+ZGF0YSAhPSBOVUxMKSB7CisJCQlzY3RwX2ZyZWVf
YnVmc3BhY2Uoc3RjYiwgYXNvYywgY2hrLCAxKTsKKwkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05P
VElGWV9VTlNFTlRfREdfRkFJTCwgc3RjYiwKKwkJCSAgICAgICAgICAgICAgICBlcnJvciwgY2hr
LCBzb19sb2NrZWQpOworCQkJaWYgKGNoay0+ZGF0YSkgeworCQkJCXNjdHBfbV9mcmVlbShjaGst
PmRhdGEpOworCQkJCWNoay0+ZGF0YSA9IE5VTEw7CisJCQl9CisJCX0KKwkJc2N0cF9mcmVlX2Ff
Y2h1bmsoc3RjYiwgY2hrLCBzb19sb2NrZWQpOworCQkvKnNhX2lnbm9yZSBGUkVFRF9NRU1PUlkq
LworCX0KKwlmb3IgKGkgPSAwOyBpIDwgYXNvYy0+c3RyZWFtb3V0Y250OyBpKyspIHsKKwkJLyog
Rm9yIGVhY2ggc3RyZWFtICovCisJCW91dHMgPSAmYXNvYy0+c3RybW91dFtpXTsKKwkJLyogY2xl
YW4gdXAgYW55IHNlbmRzIHRoZXJlICovCisJCVRBSUxRX0ZPUkVBQ0hfU0FGRShzcCwgJm91dHMt
Pm91dHF1ZXVlLCBuZXh0LCBuc3ApIHsKKwkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJmFzb2MtPnN0
cmVhbV9xdWV1ZV9jbnQsIDEpOworCQkJVEFJTFFfUkVNT1ZFKCZvdXRzLT5vdXRxdWV1ZSwgc3As
IG5leHQpOworCQkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19yZW1vdmVfZnJvbV9z
dHJlYW0oc3RjYiwgYXNvYywgb3V0cywgc3AsIDEpOworCQkJc2N0cF9mcmVlX3NwYnVmc3BhY2Uo
c3RjYiwgYXNvYywgc3ApOworCQkJaWYgKHNwLT5kYXRhKSB7CisJCQkJc2N0cF91bHBfbm90aWZ5
KFNDVFBfTk9USUZZX1NQRUNJQUxfU1BfRkFJTCwgc3RjYiwKKwkJCQkJCWVycm9yLCAodm9pZCAq
KXNwLCBzb19sb2NrZWQpOworCQkJCWlmIChzcC0+ZGF0YSkgeworCQkJCQlzY3RwX21fZnJlZW0o
c3AtPmRhdGEpOworCQkJCQlzcC0+ZGF0YSA9IE5VTEw7CisJCQkJCXNwLT50YWlsX21idWYgPSBO
VUxMOworCQkJCQlzcC0+bGVuZ3RoID0gMDsKKwkJCQl9CisJCQl9CisJCQlpZiAoc3AtPm5ldCkg
eworCQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihzcC0+bmV0KTsKKwkJCQlzcC0+bmV0ID0gTlVM
TDsKKwkJCX0KKwkJCS8qIEZyZWUgdGhlIGNodW5rICovCisJCQlzY3RwX2ZyZWVfYV9zdHJtb3Eo
c3RjYiwgc3AsIHNvX2xvY2tlZCk7CisJCQkvKnNhX2lnbm9yZSBGUkVFRF9NRU1PUlkqLworCQl9
CisJfQorfQorCit2b2lkCitzY3RwX2Fib3J0X25vdGlmaWNhdGlvbihzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsIHVpbnQ4X3QgZnJvbV9wZWVyLCB1aW50MTZfdCBlcnJvciwKKwkJCXN0cnVjdCBzY3Rw
X2Fib3J0X2NodW5rICphYm9ydCwgaW50IHNvX2xvY2tlZCkKK3sKKwlpZiAoc3RjYiA9PSBOVUxM
KSB7CisJCXJldHVybjsKKwl9CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisJaWYgKHNvX2xvY2tlZCkgeworCQlzY3RwX2xvY2tfYXNzZXJ0KFNDVFBf
SU5QX1NPKHN0Y2ItPnNjdHBfZXApKTsKKwl9IGVsc2UgeworCQlzY3RwX3VubG9ja19hc3NlcnQo
U0NUUF9JTlBfU08oc3RjYi0+c2N0cF9lcCkpOworCX0KKyNlbmRpZgorCWlmICgoc3RjYi0+c2N0
cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJICAgICgo
c3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpICYmCisJ
ICAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RF
RCkpKSB7CisJCXN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgfD0gU0NUUF9QQ0JfRkxBR1NfV0FT
X0FCT1JURUQ7CisJfQorCWlmICgoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX1NPQ0tFVF9HT05FKSB8fAorCSAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSB8fAorCSAgICAoc3RjYi0+YXNvYy5zdGF0
ZSAmIFNDVFBfU1RBVEVfQ0xPU0VEX1NPQ0tFVCkpIHsKKwkJcmV0dXJuOworCX0KKwlTQ1RQX1RD
Ql9TRU5EX0xPQ0soc3RjYik7CisJU0NUUF9BRERfU1VCU1RBVEUoc3RjYiwgU0NUUF9TVEFURV9X
QVNfQUJPUlRFRCk7CisJLyogVGVsbCB0aGVtIHdlIGxvc3QgdGhlIGFzb2MgKi8KKwlzY3RwX3Jl
cG9ydF9hbGxfb3V0Ym91bmQoc3RjYiwgZXJyb3IsIHNvX2xvY2tlZCk7CisJU0NUUF9UQ0JfU0VO
RF9VTkxPQ0soc3RjYik7CisJaWYgKGZyb21fcGVlcikgeworCQlzY3RwX3VscF9ub3RpZnkoU0NU
UF9OT1RJRllfQVNTT0NfUkVNX0FCT1JURUQsIHN0Y2IsIGVycm9yLCBhYm9ydCwgc29fbG9ja2Vk
KTsKKwl9IGVsc2UgeworCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfQVNTT0NfTE9DX0FC
T1JURUQsIHN0Y2IsIGVycm9yLCBhYm9ydCwgc29fbG9ja2VkKTsKKwl9Cit9CisKK3ZvaWQKK3Nj
dHBfYWJvcnRfYXNzb2NpYXRpb24oc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBf
dGNiICpzdGNiLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlw
aGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpzcmMsIHN0cnVj
dCBzb2NrYWRkciAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cGhkciAq
c2gsIHN0cnVjdCBtYnVmICpvcF9lcnIsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKKyAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBtZmxv
d3R5cGUsIHVpbnQzMl90IG1mbG93aWQsCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAg
dWludDMyX3QgdnJmX2lkLCB1aW50MTZfdCBwb3J0KQoreworCXVpbnQzMl90IHZ0YWc7CisjaWYg
ZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJc3RydWN0IHNv
Y2tldCAqc287CisjZW5kaWYKKworCXZ0YWcgPSAwOworCWlmIChzdGNiICE9IE5VTEwpIHsKKwkJ
dnRhZyA9IHN0Y2ItPmFzb2MucGVlcl92dGFnOworCQl2cmZfaWQgPSBzdGNiLT5hc29jLnZyZl9p
ZDsKKwl9CisJc2N0cF9zZW5kX2Fib3J0KG0sIGlwaGxlbiwgc3JjLCBkc3QsIHNoLCB2dGFnLCBv
cF9lcnIsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwkgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBpbnAtPmZpYm51bSwKKyNl
bmRpZgorCSAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOworCWlmIChzdGNiICE9IE5VTEwp
IHsKKwkJLyogV2UgaGF2ZSBhIFRDQiB0byBhYm9ydCwgc2VuZCBub3RpZmljYXRpb24gdG9vICov
CisJCXNjdHBfYWJvcnRfbm90aWZpY2F0aW9uKHN0Y2IsIDAsIDAsIE5VTEwsIFNDVFBfU09fTk9U
X0xPQ0tFRCk7CisJCS8qIE9rLCBub3cgbGV0cyBmcmVlIGl0ICovCisjaWYgZGVmaW5lZChfX0FQ
UExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCXNvID0gU0NUUF9JTlBfU08oaW5w
KTsKKwkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJU0NUUF9UQ0Jf
VU5MT0NLKHN0Y2IpOworCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKKwkJU0NUUF9UQ0JfTE9D
SyhzdGNiKTsKKwkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwor
I2VuZGlmCisJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVIzMihzY3Rwc19hYm9ydGVkKTsKKwkJaWYg
KChTQ1RQX0dFVF9TVEFURShzdGNiKSA9PSBTQ1RQX1NUQVRFX09QRU4pIHx8CisJCSAgICAoU0NU
UF9HRVRfU1RBVEUoc3RjYikgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkpIHsKKwkJ
CVNDVFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKKwkJfQorCQkodm9pZClz
Y3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAorCQkgICAgICAgICAg
ICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBVVElMICsgU0NUUF9MT0NfNCk7CisjaWYgZGVmaW5l
ZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCVNDVFBfU09DS0VUX1VO
TE9DSyhzbywgMSk7CisjZW5kaWYKKwl9Cit9CisjaWZkZWYgU0NUUF9BU09DTE9HX09GX1RTTlMK
K3ZvaWQKK3NjdHBfcHJpbnRfb3V0X3RyYWNrX2xvZyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCit7
CisjaWZkZWYgTk9TSVlfUFJJTlRTCisJaW50IGk7CisJU0NUUF9QUklOVEYoIkxhc3QgZXAgcmVh
c29uOiV4XG4iLCBzdGNiLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2NvZGUpOworCVNDVFBfUFJJTlRG
KCJJTiBib3VuZCBUU04gbG9nLWFhYVxuIik7CisJaWYgKChzdGNiLT5hc29jLnRzbl9pbl9hdCA9
PSAwKSAmJiAoc3RjYi0+YXNvYy50c25faW5fd3JhcHBlZCA9PSAwKSkgeworCQlTQ1RQX1BSSU5U
RigiTm9uZSByY3ZkXG4iKTsKKwkJZ290byBub25lX2luOworCX0KKwlpZiAoc3RjYi0+YXNvYy50
c25faW5fd3JhcHBlZCkgeworCQlmb3IgKGkgPSBzdGNiLT5hc29jLnRzbl9pbl9hdDsgaSA8IFND
VFBfVFNOX0xPR19TSVpFOyBpKyspIHsKKwkJCVNDVFBfUFJJTlRGKCJUU046JXggc3RybTolZCBz
ZXE6JWQgZmxhZ3M6JXggc3o6JWRcbiIsCisJCQkJICAgIHN0Y2ItPmFzb2MuaW5fdHNubG9nW2ld
LnRzbiwKKwkJCQkgICAgc3RjYi0+YXNvYy5pbl90c25sb2dbaV0uc3RybSwKKwkJCQkgICAgc3Rj
Yi0+YXNvYy5pbl90c25sb2dbaV0uc2VxLAorCQkJCSAgICBzdGNiLT5hc29jLmluX3RzbmxvZ1tp
XS5mbGdzLAorCQkJCSAgICBzdGNiLT5hc29jLmluX3RzbmxvZ1tpXS5zeik7CisJCX0KKwl9CisJ
aWYgKHN0Y2ItPmFzb2MudHNuX2luX2F0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBzdGNiLT5hc29j
LnRzbl9pbl9hdDsgaSsrKSB7CisJCQlTQ1RQX1BSSU5URigiVFNOOiV4IHN0cm06JWQgc2VxOiVk
IGZsYWdzOiV4IHN6OiVkXG4iLAorCQkJCSAgICBzdGNiLT5hc29jLmluX3RzbmxvZ1tpXS50c24s
CisJCQkJICAgIHN0Y2ItPmFzb2MuaW5fdHNubG9nW2ldLnN0cm0sCisJCQkJICAgIHN0Y2ItPmFz
b2MuaW5fdHNubG9nW2ldLnNlcSwKKwkJCQkgICAgc3RjYi0+YXNvYy5pbl90c25sb2dbaV0uZmxn
cywKKwkJCQkgICAgc3RjYi0+YXNvYy5pbl90c25sb2dbaV0uc3opOworCQl9CisJfQorIG5vbmVf
aW46CisJU0NUUF9QUklOVEYoIk9VVCBib3VuZCBUU04gbG9nLWFhYVxuIik7CisJaWYgKChzdGNi
LT5hc29jLnRzbl9vdXRfYXQgPT0gMCkgJiYKKwkgICAgKHN0Y2ItPmFzb2MudHNuX291dF93cmFw
cGVkID09IDApKSB7CisJCVNDVFBfUFJJTlRGKCJOb25lIHNlbnRcbiIpOworCX0KKwlpZiAoc3Rj
Yi0+YXNvYy50c25fb3V0X3dyYXBwZWQpIHsKKwkJZm9yIChpID0gc3RjYi0+YXNvYy50c25fb3V0
X2F0OyBpIDwgU0NUUF9UU05fTE9HX1NJWkU7IGkrKykgeworCQkJU0NUUF9QUklOVEYoIlRTTjol
eCBzdHJtOiVkIHNlcTolZCBmbGFnczoleCBzejolZFxuIiwKKwkJCQkgICAgc3RjYi0+YXNvYy5v
dXRfdHNubG9nW2ldLnRzbiwKKwkJCQkgICAgc3RjYi0+YXNvYy5vdXRfdHNubG9nW2ldLnN0cm0s
CisJCQkJICAgIHN0Y2ItPmFzb2Mub3V0X3RzbmxvZ1tpXS5zZXEsCisJCQkJICAgIHN0Y2ItPmFz
b2Mub3V0X3RzbmxvZ1tpXS5mbGdzLAorCQkJCSAgICBzdGNiLT5hc29jLm91dF90c25sb2dbaV0u
c3opOworCQl9CisJfQorCWlmIChzdGNiLT5hc29jLnRzbl9vdXRfYXQpIHsKKwkJZm9yIChpID0g
MDsgaSA8IHN0Y2ItPmFzb2MudHNuX291dF9hdDsgaSsrKSB7CisJCQlTQ1RQX1BSSU5URigiVFNO
OiV4IHN0cm06JWQgc2VxOiVkIGZsYWdzOiV4IHN6OiVkXG4iLAorCQkJCSAgICBzdGNiLT5hc29j
Lm91dF90c25sb2dbaV0udHNuLAorCQkJCSAgICBzdGNiLT5hc29jLm91dF90c25sb2dbaV0uc3Ry
bSwKKwkJCQkgICAgc3RjYi0+YXNvYy5vdXRfdHNubG9nW2ldLnNlcSwKKwkJCQkgICAgc3RjYi0+
YXNvYy5vdXRfdHNubG9nW2ldLmZsZ3MsCisJCQkJICAgIHN0Y2ItPmFzb2Mub3V0X3RzbmxvZ1tp
XS5zeik7CisJCX0KKwl9CisjZW5kaWYKK30KKyNlbmRpZgorCit2b2lkCitzY3RwX2Fib3J0X2Fu
X2Fzc29jaWF0aW9uKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAqc3Rj
YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1idWYgKm9wX2VyciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IHNvX2xvY2tlZCkKK3sKKyNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlzdHJ1Y3Qgc29ja2V0ICpzbzsKKyNl
bmRpZgorCisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisJc28gPSBTQ1RQX0lOUF9TTyhpbnApOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18p
ICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaWYgKHNvX2xvY2tlZCkgeworCQlzY3RwX2xv
Y2tfYXNzZXJ0KFNDVFBfSU5QX1NPKGlucCkpOworCX0gZWxzZSB7CisJCXNjdHBfdW5sb2NrX2Fz
c2VydChTQ1RQX0lOUF9TTyhpbnApKTsKKwl9CisjZW5kaWYKKwlpZiAoc3RjYiA9PSBOVUxMKSB7
CisJCS8qIEdvdCB0byBoYXZlIGEgVENCICovCisJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19TT0NLRVRfR09ORSkgeworCQkJaWYgKExJU1RfRU1QVFkoJmlucC0+c2N0cF9h
c29jX2xpc3QpKSB7CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisJCQkJaWYgKCFzb19sb2NrZWQpIHsKKwkJCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywg
MSk7CisJCQkJfQorI2VuZGlmCisJCQkJc2N0cF9pbnBjYl9mcmVlKGlucCwgU0NUUF9GUkVFX1NI
T1VMRF9VU0VfQUJPUlQsCisJCQkJCQlTQ1RQX0NBTExFRF9ESVJFQ1RMWV9OT0NNUFNFVCk7Cisj
aWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJaWYg
KCFzb19sb2NrZWQpIHsKKwkJCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKwkJCQl9Cisj
ZW5kaWYKKwkJCX0KKwkJfQorCQlyZXR1cm47CisJfQorCS8qIG5vdGlmeSB0aGUgcGVlciAqLwor
CXNjdHBfc2VuZF9hYm9ydF90Y2Ioc3RjYiwgb3BfZXJyLCBzb19sb2NrZWQpOworCVNDVFBfU1RB
VF9JTkNSX0NPVU5URVIzMihzY3Rwc19hYm9ydGVkKTsKKwlpZiAoKFNDVFBfR0VUX1NUQVRFKHN0
Y2IpID09IFNDVFBfU1RBVEVfT1BFTikgfHwKKwkgICAgKFNDVFBfR0VUX1NUQVRFKHN0Y2IpID09
IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpKSB7CisJCVNDVFBfU1RBVF9ERUNSX0dBVUdF
MzIoc2N0cHNfY3VycmVzdGFiKTsKKwl9CisJLyogbm90aWZ5IHRoZSB1bHAgKi8KKwlpZiAoKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSA9PSAwKSB7CisJCXNj
dHBfYWJvcnRfbm90aWZpY2F0aW9uKHN0Y2IsIDAsIDAsIE5VTEwsIHNvX2xvY2tlZCk7CisJfQor
CS8qIG5vdyBmcmVlIHRoZSBhc29jICovCisjaWZkZWYgU0NUUF9BU09DTE9HX09GX1RTTlMKKwlz
Y3RwX3ByaW50X291dF90cmFja19sb2coc3RjYik7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlpZiAoIXNvX2xvY2tlZCkgeworCQlh
dG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7CisJCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOworCQlTQ1RQX1RDQl9MT0NLKHN0Y2Ip
OworCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJfQorI2Vu
ZGlmCisJKHZvaWQpc2N0cF9mcmVlX2Fzc29jKGlucCwgc3RjYiwgU0NUUF9OT1JNQUxfUFJPQywK
KwkgICAgICAgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBVVElMICsgU0NUUF9MT0NfNSk7
CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaWYg
KCFzb19sb2NrZWQpIHsKKwkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKwl9CisjZW5kaWYK
K30KKwordm9pZAorc2N0cF9oYW5kbGVfb290YihzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwg
aW50IG9mZnNldCwKKyAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpzcmMsIHN0cnVj
dCBzb2NrYWRkciAqZHN0LAorICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cGhkciAqc2gsIHN0
cnVjdCBzY3RwX2lucGNiICppbnAsCisgICAgICAgICAgICAgICAgIHN0cnVjdCBtYnVmICpjYXVz
ZSwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
ICAgICAgICAgICAgICAgICB1aW50OF90IG1mbG93dHlwZSwgdWludDMyX3QgbWZsb3dpZCwgdWlu
dDE2X3QgZmlibnVtLAorI2VuZGlmCisgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZyZl9pZCwg
dWludDE2X3QgcG9ydCkKK3sKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2gsIGNodW5rX2J1ZjsK
Kwl1bnNpZ25lZCBpbnQgY2hrX2xlbmd0aDsKKwlpbnQgY29udGFpbnNfaW5pdF9jaHVuazsKKwor
CVNDVFBfU1RBVF9JTkNSX0NPVU5URVIzMihzY3Rwc19vdXRvZnRoZWJsdWUpOworCS8qIEdlbmVy
YXRlIGEgVE8gYWRkcmVzcyBmb3IgZnV0dXJlIHJlZmVyZW5jZSAqLworCWlmIChpbnAgJiYgKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSkgeworCQlpZiAoTElT
VF9FTVBUWSgmaW5wLT5zY3RwX2Fzb2NfbGlzdCkpIHsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykg
JiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCVNDVFBfU09DS0VUX0xPQ0soU0NUUF9JTlBf
U08oaW5wKSwgMSk7CisjZW5kaWYKKwkJCXNjdHBfaW5wY2JfZnJlZShpbnAsIFNDVFBfRlJFRV9T
SE9VTERfVVNFX0FCT1JULAorCQkJCQlTQ1RQX0NBTExFRF9ESVJFQ1RMWV9OT0NNUFNFVCk7Cisj
aWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQlTQ1RQ
X1NPQ0tFVF9VTkxPQ0soU0NUUF9JTlBfU08oaW5wKSwgMSk7CisjZW5kaWYKKwkJfQorCX0KKwlj
b250YWluc19pbml0X2NodW5rID0gMDsKKwljaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKXNj
dHBfbV9nZXRwdHIobSwgb2Zmc2V0LAorCSAgICBzaXplb2YoKmNoKSwgKHVpbnQ4X3QgKikgJiBj
aHVua19idWYpOworCXdoaWxlIChjaCAhPSBOVUxMKSB7CisJCWNoa19sZW5ndGggPSBudG9ocyhj
aC0+Y2h1bmtfbGVuZ3RoKTsKKwkJaWYgKGNoa19sZW5ndGggPCBzaXplb2YoKmNoKSkgeworCQkJ
LyogYnJlYWsgdG8gYWJvcnQgbGFuZCAqLworCQkJYnJlYWs7CisJCX0KKwkJc3dpdGNoIChjaC0+
Y2h1bmtfdHlwZSkgeworCQljYXNlIFNDVFBfSU5JVDoKKwkJCWNvbnRhaW5zX2luaXRfY2h1bmsg
PSAxOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9QQUNLRVRfRFJPUFBFRDoKKwkJCS8qIHdlIGRv
bid0IHJlc3BvbmQgdG8gcGt0LWRyb3BwZWQgKi8KKwkJCXJldHVybjsKKwkJY2FzZSBTQ1RQX0FC
T1JUX0FTU09DSUFUSU9OOgorCQkJLyogd2UgZG9uJ3QgcmVzcG9uZCB3aXRoIGFuIEFCT1JUIHRv
IGFuIEFCT1JUICovCisJCQlyZXR1cm47CisJCWNhc2UgU0NUUF9TSFVURE9XTl9DT01QTEVURToK
KwkJCS8qCisJCQkgKiB3ZSBpZ25vcmUgaXQgc2luY2Ugd2UgYXJlIG5vdCB3YWl0aW5nIGZvciBp
dCBhbmQKKwkJCSAqIHBlZXIgaXMgZ29uZQorCQkJICovCisJCQlyZXR1cm47CisJCWNhc2UgU0NU
UF9TSFVURE9XTl9BQ0s6CisJCQlzY3RwX3NlbmRfc2h1dGRvd25fY29tcGxldGUyKHNyYywgZHN0
LCBzaCwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGZp
Ym51bSwKKyNlbmRpZgorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIHBv
cnQpOworCQkJcmV0dXJuOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJb2Zmc2V0ICs9
IFNDVFBfU0laRTMyKGNoa19sZW5ndGgpOworCQljaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAq
KXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LAorCQkgICAgc2l6ZW9mKCpjaCksICh1aW50OF90ICop
ICYgY2h1bmtfYnVmKTsKKwl9CisJaWYgKChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYmxhY2tob2xl
KSA9PSAwKSB8fAorCSAgICAoKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ibGFja2hvbGUpID09IDEp
ICYmCisJICAgICAoY29udGFpbnNfaW5pdF9jaHVuayA9PSAwKSkpIHsKKwkJc2N0cF9zZW5kX2Fi
b3J0KG0sIGlwaGxlbiwgc3JjLCBkc3QsIHNoLCAwLCBjYXVzZSwKKyNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkgICAgICAgICAgICAgICAgbWZs
b3d0eXBlLCBtZmxvd2lkLCBmaWJudW0sCisjZW5kaWYKKwkJICAgICAgICAgICAgICAgIHZyZl9p
ZCwgcG9ydCk7CisJfQorfQorCisvKgorICogY2hlY2sgdGhlIGluYm91bmQgZGF0YWdyYW0gdG8g
bWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhbiBhYm9ydCBpbnNpZGUgaXQsCisgKiBpZiB0aGVyZSBp
cyByZXR1cm4gMSwgZWxzZSByZXR1cm4gMC4KKyAqLworaW50CitzY3RwX2lzX3RoZXJlX2FuX2Fi
b3J0X2hlcmUoc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIHVpbnQzMl90ICp2dGFnKQorewor
CXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKKwlzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICppbml0
X2NoaywgY2h1bmtfYnVmOworCWludCBvZmZzZXQ7CisJdW5zaWduZWQgaW50IGNoa19sZW5ndGg7
CisKKwlvZmZzZXQgPSBpcGhsZW4gKyBzaXplb2Yoc3RydWN0IHNjdHBoZHIpOworCWNoID0gKHN0
cnVjdCBzY3RwX2NodW5raGRyICopc2N0cF9tX2dldHB0cihtLCBvZmZzZXQsIHNpemVvZigqY2gp
LAorCSAgICAodWludDhfdCAqKSAmIGNodW5rX2J1Zik7CisJd2hpbGUgKGNoICE9IE5VTEwpIHsK
KwkJY2hrX2xlbmd0aCA9IG50b2hzKGNoLT5jaHVua19sZW5ndGgpOworCQlpZiAoY2hrX2xlbmd0
aCA8IHNpemVvZigqY2gpKSB7CisJCQkvKiBwYWNrZXQgaXMgcHJvYmFibHkgY29ycnVwdCAqLwor
CQkJYnJlYWs7CisJCX0KKwkJLyogd2Ugc2VlbSB0byBiZSBvaywgaXMgaXQgYW4gYWJvcnQ/ICov
CisJCWlmIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0FCT1JUX0FTU09DSUFUSU9OKSB7CisJCQkv
KiB5ZXAsIHRlbGwgdGhlbSAqLworCQkJcmV0dXJuICgxKTsKKwkJfQorCQlpZiAoKGNoLT5jaHVu
a190eXBlID09IFNDVFBfSU5JVElBVElPTikgfHwKKwkJICAgIChjaC0+Y2h1bmtfdHlwZSA9PSBT
Q1RQX0lOSVRJQVRJT05fQUNLKSkgeworCQkJLyogbmVlZCB0byB1cGRhdGUgdGhlIFZ0YWcgKi8K
KwkJCWluaXRfY2hrID0gKHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKilzY3RwX21fZ2V0cHRyKG0s
CisJCQkgICAgb2Zmc2V0LCBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9jaHVuayksICh1aW50OF90
ICopICYgY2h1bmtfYnVmKTsKKwkJCWlmIChpbml0X2NoayAhPSBOVUxMKSB7CisJCQkJKnZ0YWcg
PSBudG9obChpbml0X2Noay0+aW5pdC5pbml0aWF0ZV90YWcpOworCQkJfQorCQl9CisJCS8qIE5v
cGUsIG1vdmUgdG8gdGhlIG5leHQgY2h1bmsgKi8KKwkJb2Zmc2V0ICs9IFNDVFBfU0laRTMyKGNo
a19sZW5ndGgpOworCQljaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKXNjdHBfbV9nZXRwdHIo
bSwgb2Zmc2V0LAorCQkgICAgc2l6ZW9mKCpjaCksICh1aW50OF90ICopICYgY2h1bmtfYnVmKTsK
Kwl9CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIGN1cnJlbnRseSAoMi8wMiksIGlmYV9hZGRy
IGVtYmVkcyBzY29wZV9pZCdzIGFuZCBkb24ndCBoYXZlIHNpbjZfc2NvcGVfaWQKKyAqIHNldCAo
aS5lLiBpdCdzIDApIHNvLCBjcmVhdGUgdGhpcyBmdW5jdGlvbiB0byBjb21wYXJlIGxpbmsgbG9j
YWwgc2NvcGVzCisgKi8KKyNpZmRlZiBJTkVUNgordWludDMyX3QKK3NjdHBfaXNfc2FtZV9zY29w
ZShzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyMSwgc3RydWN0IHNvY2thZGRyX2luNiAqYWRkcjIp
Cit7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorICAgIC8qX19Vc2Vyc3BhY2VfXyBSZXR1
cm5pbmcgMSBoZXJlIGFsd2F5cyAqLworI2VuZGlmCisjaWYgZGVmaW5lZChTQ1RQX0VNQkVEREVE
X1Y2X1NDT1BFKQorCXN0cnVjdCBzb2NrYWRkcl9pbjYgYSwgYjsKKworCS8qIHNhdmUgY29waWVz
ICovCisJYSA9ICphZGRyMTsKKwliID0gKmFkZHIyOworCisJaWYgKGEuc2luNl9zY29wZV9pZCA9
PSAwKQorI2lmZGVmIFNDVFBfS0FNRQorCQlpZiAoc2E2X3JlY292ZXJzY29wZSgmYSkpIHsKKyNl
bHNlCisJCWlmIChpbjZfcmVjb3ZlcnNjb3BlKCZhLCAmYS5zaW42X2FkZHIsIE5VTEwpKSB7Cisj
ZW5kaWYJCQkJLyogU0NUUF9LQU1FICovCisJCQkvKiBjYW4ndCBnZXQgc2NvcGUsIHNvIGNhbid0
IG1hdGNoICovCisJCQlyZXR1cm4gKDApOworCQl9CisJaWYgKGIuc2luNl9zY29wZV9pZCA9PSAw
KQorI2lmZGVmIFNDVFBfS0FNRQorCQlpZiAoc2E2X3JlY292ZXJzY29wZSgmYikpIHsKKyNlbHNl
CisJCWlmIChpbjZfcmVjb3ZlcnNjb3BlKCZiLCAmYi5zaW42X2FkZHIsIE5VTEwpKSB7CisjZW5k
aWYJCQkJLyogU0NUUF9LQU1FICovCisJCQkvKiBjYW4ndCBnZXQgc2NvcGUsIHNvIGNhbid0IG1h
dGNoICovCisJCQlyZXR1cm4gKDApOworCQl9CisJaWYgKGEuc2luNl9zY29wZV9pZCAhPSBiLnNp
bjZfc2NvcGVfaWQpCisJCXJldHVybiAoMCk7CisjZWxzZQorCWlmIChhZGRyMS0+c2luNl9zY29w
ZV9pZCAhPSBhZGRyMi0+c2luNl9zY29wZV9pZCkKKwkJcmV0dXJuICgwKTsKKyNlbmRpZiAvKiBT
Q1RQX0VNQkVEREVEX1Y2X1NDT1BFICovCisKKwlyZXR1cm4gKDEpOworfQorCisjaWYgZGVmaW5l
ZChTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFKQorLyoKKyAqIHJldHVybnMgYSBzb2NrYWRkcl9pbjYg
d2l0aCBlbWJlZGRlZCBzY29wZSByZWNvdmVyZWQgYW5kIHJlbW92ZWQKKyAqLworc3RydWN0IHNv
Y2thZGRyX2luNiAqCitzY3RwX3JlY292ZXJfc2NvcGUoc3RydWN0IHNvY2thZGRyX2luNiAqYWRk
ciwgc3RydWN0IHNvY2thZGRyX2luNiAqc3RvcmUpCit7CisJLyogY2hlY2sgYW5kIHN0cmlwIGVt
YmVkZGVkIHNjb3BlIGp1bmsgKi8KKwlpZiAoYWRkci0+c2luNl9mYW1pbHkgPT0gQUZfSU5FVDYp
IHsKKwkJaWYgKElONl9JU19TQ09QRV9MSU5LTE9DQUwoJmFkZHItPnNpbjZfYWRkcikpIHsKKwkJ
CWlmIChhZGRyLT5zaW42X3Njb3BlX2lkID09IDApIHsKKwkJCQkqc3RvcmUgPSAqYWRkcjsKKyNp
ZmRlZiBTQ1RQX0tBTUUKKwkJCQlpZiAoIXNhNl9yZWNvdmVyc2NvcGUoc3RvcmUpKSB7CisjZWxz
ZQorCQkJCWlmICghaW42X3JlY292ZXJzY29wZShzdG9yZSwgJnN0b3JlLT5zaW42X2FkZHIsCisJ
CQkJICAgIE5VTEwpKSB7CisjZW5kaWYgLyogU0NUUF9LQU1FICovCisJCQkJCS8qIHVzZSB0aGUg
cmVjb3ZlcmVkIHNjb3BlICovCisJCQkJCWFkZHIgPSBzdG9yZTsKKwkJCQl9CisJCQl9IGVsc2Ug
eworCQkJCS8qIGVsc2UsIHJldHVybiB0aGUgb3JpZ2luYWwgInRvIiBhZGRyICovCisJCQkJaW42
X2NsZWFyc2NvcGUoJmFkZHItPnNpbjZfYWRkcik7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIChh
ZGRyKTsKK30KKyNlbmRpZiAvKiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFICovCisjZW5kaWYKKwor
LyoKKyAqIGFyZSB0aGUgdHdvIGFkZHJlc3NlcyB0aGUgc2FtZT8gIGN1cnJlbnRseSBhICJzY29w
ZWxlc3MiIGNoZWNrIHJldHVybnM6IDEKKyAqIGlmIHNhbWUsIDAgaWYgbm90CisgKi8KK2ludAor
c2N0cF9jbXBhZGRyKHN0cnVjdCBzb2NrYWRkciAqc2ExLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhMikK
K3sKKworCS8qIG11c3QgYmUgdmFsaWQgKi8KKwlpZiAoc2ExID09IE5VTEwgfHwgc2EyID09IE5V
TEwpCisJCXJldHVybiAoMCk7CisKKwkvKiBtdXN0IGJlIHRoZSBzYW1lIGZhbWlseSAqLworCWlm
IChzYTEtPnNhX2ZhbWlseSAhPSBzYTItPnNhX2ZhbWlseSkKKwkJcmV0dXJuICgwKTsKKworCXN3
aXRjaCAoc2ExLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJ
eworCQkvKiBJUHY2IGFkZHJlc3NlcyAqLworCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42XzEs
ICpzaW42XzI7CisKKwkJc2luNl8xID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYTE7CisJCXNp
bjZfMiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2EyOworCQlyZXR1cm4gKFNDVFA2X0FSRV9B
RERSX0VRVUFMKHNpbjZfMSwKKwkJICAgIHNpbjZfMikpOworCX0KKyNlbmRpZgorI2lmZGVmIElO
RVQKKwljYXNlIEFGX0lORVQ6CisJeworCQkvKiBJUHY0IGFkZHJlc3NlcyAqLworCQlzdHJ1Y3Qg
c29ja2FkZHJfaW4gKnNpbl8xLCAqc2luXzI7CisKKwkJc2luXzEgPSAoc3RydWN0IHNvY2thZGRy
X2luICopc2ExOworCQlzaW5fMiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTI7CisJCXJldHVy
biAoc2luXzEtPnNpbl9hZGRyLnNfYWRkciA9PSBzaW5fMi0+c2luX2FkZHIuc19hZGRyKTsKKwl9
CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJY2FzZSBBRl9DT05OOgorCXsK
KwkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uXzEsICpzY29ubl8yOworCisJCXNjb25uXzEg
PSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilzYTE7CisJCXNjb25uXzIgPSAoc3RydWN0IHNvY2th
ZGRyX2Nvbm4gKilzYTI7CisJCXJldHVybiAoc2Nvbm5fMS0+c2Nvbm5fYWRkciA9PSBzY29ubl8y
LT5zY29ubl9hZGRyKTsKKwl9CisjZW5kaWYKKwlkZWZhdWx0OgorCQkvKiB3ZSBkb24ndCBkbyB0
aGVzZS4uLiAqLworCQlyZXR1cm4gKDApOworCX0KK30KKwordm9pZAorc2N0cF9wcmludF9hZGRy
ZXNzKHN0cnVjdCBzb2NrYWRkciAqc2EpCit7CisjaWZkZWYgSU5FVDYKKyNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWNoYXIgaXA2YnVmW0lORVQ2
X0FERFJTVFJMRU5dOworI2VuZGlmCisjZW5kaWYKKworCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkg
eworI2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKwl7CisJCXN0cnVjdCBzb2NrYWRkcl9p
bjYgKnNpbjY7CisKKwkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2E7CisjaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorCQlTQ1RQX1BSSU5URigiSVB2NiBhZGRyZXNzOiAleDoleDol
eDoleDoleDoleDoleDoleDpwb3J0OiVkIHNjb3BlOiV1XG4iLAorCQkJICAgIG50b2hzKHNpbjYt
PnNpbjZfYWRkci5zNl9hZGRyMTZbMF0pLAorCQkJICAgIG50b2hzKHNpbjYtPnNpbjZfYWRkci5z
Nl9hZGRyMTZbMV0pLAorCQkJICAgIG50b2hzKHNpbjYtPnNpbjZfYWRkci5zNl9hZGRyMTZbMl0p
LAorCQkJICAgIG50b2hzKHNpbjYtPnNpbjZfYWRkci5zNl9hZGRyMTZbM10pLAorCQkJICAgIG50
b2hzKHNpbjYtPnNpbjZfYWRkci5zNl9hZGRyMTZbNF0pLAorCQkJICAgIG50b2hzKHNpbjYtPnNp
bjZfYWRkci5zNl9hZGRyMTZbNV0pLAorCQkJICAgIG50b2hzKHNpbjYtPnNpbjZfYWRkci5zNl9h
ZGRyMTZbNl0pLAorCQkJICAgIG50b2hzKHNpbjYtPnNpbjZfYWRkci5zNl9hZGRyMTZbN10pLAor
CQkJICAgIG50b2hzKHNpbjYtPnNpbjZfcG9ydCksCisJCQkgICAgc2luNi0+c2luNl9zY29wZV9p
ZCk7CisjZWxzZQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisJCVNDVFBfUFJJTlRGKCJJUHY2IGFkZHJlc3M6ICVzOnBvcnQ6JWQgc2NvcGU6JXVc
biIsCisJCQkgICAgaXA2X3NwcmludGYoaXA2YnVmLCAmc2luNi0+c2luNl9hZGRyKSwKKwkJCSAg
ICBudG9ocyhzaW42LT5zaW42X3BvcnQpLAorCQkJICAgIHNpbjYtPnNpbjZfc2NvcGVfaWQpOwor
I2Vsc2UKKwkJU0NUUF9QUklOVEYoIklQdjYgYWRkcmVzczogJXM6cG9ydDolZCBzY29wZToldVxu
IiwKKwkJCSAgICBpcDZfc3ByaW50Zigmc2luNi0+c2luNl9hZGRyKSwKKwkJCSAgICBudG9ocyhz
aW42LT5zaW42X3BvcnQpLAorCQkJICAgIHNpbjYtPnNpbjZfc2NvcGVfaWQpOworI2VuZGlmCisj
ZW5kaWYKKwkJYnJlYWs7CisJfQorI2VuZGlmCisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoK
Kwl7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCQl1bnNpZ25lZCBjaGFyICpwOworCisJ
CXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTsKKwkJcCA9ICh1bnNpZ25lZCBjaGFyICop
JnNpbi0+c2luX2FkZHI7CisJCVNDVFBfUFJJTlRGKCJJUHY0IGFkZHJlc3M6ICV1LiV1LiV1LiV1
OiVkXG4iLAorCQkJICAgIHBbMF0sIHBbMV0sIHBbMl0sIHBbM10sIG50b2hzKHNpbi0+c2luX3Bv
cnQpKTsKKwkJYnJlYWs7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CWNhc2UgQUZfQ09OTjoKKwl7CisJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsKKworCQlz
Y29ubiA9IChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKXNhOworCQlTQ1RQX1BSSU5URigiQUZfQ09O
TiBhZGRyZXNzOiAlcFxuIiwgc2Nvbm4tPnNjb25uX2FkZHIpOworCQlicmVhazsKKwl9CisjZW5k
aWYKKwlkZWZhdWx0OgorCQlTQ1RQX1BSSU5URigiP1xuIik7CisJCWJyZWFrOworCX0KK30KKwor
dm9pZAorc2N0cF9wdWxsX29mZl9jb250cm9sX3RvX25ld19pbnAoc3RydWN0IHNjdHBfaW5wY2Ig
Km9sZF9pbnAsCisgICAgc3RydWN0IHNjdHBfaW5wY2IgKm5ld19pbnAsCisgICAgc3RydWN0IHNj
dHBfdGNiICpzdGNiLAorICAgIGludCB3YWl0ZmxhZ3MpCit7CisJLyoKKwkgKiBnbyB0aHJvdWdo
IG91ciBvbGQgSU5QIGFuZCBwdWxsIG9mZiBhbnkgY29udHJvbCBzdHJ1Y3R1cmVzIHRoYXQKKwkg
KiBiZWxvbmcgdG8gc3RjYiBhbmQgbW92ZSB0aGVuIHRvIHRoZSBuZXcgaW5wLgorCSAqLworCXN0
cnVjdCBzb2NrZXQgKm9sZF9zbywgKm5ld19zbzsKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVh
ZCAqY29udHJvbCwgKm5jdGw7CisJc3RydWN0IHNjdHBfcmVhZGhlYWQgdG1wX3F1ZXVlOworCXN0
cnVjdCBtYnVmICptOworI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQ
TEVfXykpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaW50IGVycm9yID0gMDsKKyNlbmRp
ZgorCisJb2xkX3NvID0gb2xkX2lucC0+c2N0cF9zb2NrZXQ7CisJbmV3X3NvID0gbmV3X2lucC0+
c2N0cF9zb2NrZXQ7CisJVEFJTFFfSU5JVCgmdG1wX3F1ZXVlKTsKKyNpZiAoZGVmaW5lZChfX0Zy
ZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorCWVycm9yID0gc2Jsb2NrKCZvbGRfc28tPnNvX3Jjdiwgd2FpdGZsYWdzKTsKKwlpZiAoZXJy
b3IpIHsKKwkJLyogR2FrLCBjYW4ndCBnZXQgc2Jsb2NrLCB3ZSBoYXZlIGEgcHJvYmxlbS4KKwkJ
ICogZGF0YSB3aWxsIGJlIGxlZnQgc3RyYW5kZWQuLiBhbmQgd2UKKwkJICogZG9uJ3QgZGFyZSBs
b29rIGF0IGl0IHNpbmNlIHRoZQorCQkgKiBvdGhlciB0aHJlYWQgbWF5IGJlIHJlYWRpbmcgc29t
ZXRoaW5nLgorCQkgKiBPaCB3ZWxsLCBpdHMgYSBzY3Jld2VkIHVwIGFwcCB0aGF0IGRvZXMKKwkJ
ICogYSBwZWVsb2ZmIE9SIGEgYWNjZXB0IHdoaWxlIHJlYWRpbmcKKwkJICogZnJvbSB0aGUgbWFp
biBzb2NrZXQuLi4gYWN0dWFsbHkgaXRzCisJCSAqIG9ubHkgdGhlIHBlZWxvZmYoKSBjYXNlLCBz
aW5jZSBJIHRoaW5rCisJCSAqIHJlYWQgd2lsbCBmYWlsIG9uIGEgbGlzdGVuaW5nIHNvY2tldC4u
CisJCSAqLworCQlyZXR1cm47CisJfQorI2VuZGlmCisJLyogbG9jayB0aGUgc29ja2V0IGJ1ZmZl
cnMgKi8KKwlTQ1RQX0lOUF9SRUFEX0xPQ0sob2xkX2lucCk7CisJVEFJTFFfRk9SRUFDSF9TQUZF
KGNvbnRyb2wsICZvbGRfaW5wLT5yZWFkX3F1ZXVlLCBuZXh0LCBuY3RsKSB7CisJCS8qIFB1bGwg
b2ZmIGFsbCBmb3Igb3V0IHRhcmdldCBzdGNiICovCisJCWlmIChjb250cm9sLT5zdGNiID09IHN0
Y2IpIHsKKwkJCS8qIHJlbW92ZSBpdCB3ZSB3YW50IGl0ICovCisJCQlUQUlMUV9SRU1PVkUoJm9s
ZF9pbnAtPnJlYWRfcXVldWUsIGNvbnRyb2wsIG5leHQpOworCQkJVEFJTFFfSU5TRVJUX1RBSUwo
JnRtcF9xdWV1ZSwgY29udHJvbCwgbmV4dCk7CisJCQltID0gY29udHJvbC0+ZGF0YTsKKwkJCXdo
aWxlIChtKSB7CisJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAm
IFNDVFBfU0JfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQkJc2N0cF9zYmxvZygmb2xkX3NvLT5zb19y
Y3YsIGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYj9OVUxMOnN0Y2IsIFNDVFBfTE9HX1NCRlJFRSxT
Q1RQX0JVRl9MRU4obSkpOworCQkJCX0KKwkJCQlzY3RwX3NiZnJlZShjb250cm9sLCBzdGNiLCAm
b2xkX3NvLT5zb19yY3YsIG0pOworCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2lu
Z19sZXZlbCkgJiBTQ1RQX1NCX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCXNjdHBfc2Jsb2coJm9s
ZF9zby0+c29fcmN2LCBjb250cm9sLT5kb19ub3RfcmVmX3N0Y2I/TlVMTDpzdGNiLCBTQ1RQX0xP
R19TQlJFU1VMVCwgMCk7CisJCQkJfQorCQkJCW0gPSBTQ1RQX0JVRl9ORVhUKG0pOworCQkJfQor
CQl9CisJfQorCVNDVFBfSU5QX1JFQURfVU5MT0NLKG9sZF9pbnApOworCS8qIFJlbW92ZSB0aGUg
c2ItbG9jayBvbiB0aGUgb2xkIHNvY2tldCAqLworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXNidW5sb2NrKCZvbGRfc28tPnNvX3JjdiwgMSk7Cisj
ZW5kaWYKKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisJc2J1bmxvY2soJm9sZF9zby0+c29fcmN2KTsKKyNlbmRpZgorCS8qIE5vdyB3ZSBtb3Zl
IHRoZW0gb3ZlciB0byB0aGUgbmV3IHNvY2tldCBidWZmZXIgKi8KKwlTQ1RQX0lOUF9SRUFEX0xP
Q0sobmV3X2lucCk7CisJVEFJTFFfRk9SRUFDSF9TQUZFKGNvbnRyb2wsICZ0bXBfcXVldWUsIG5l
eHQsIG5jdGwpIHsKKwkJVEFJTFFfSU5TRVJUX1RBSUwoJm5ld19pbnAtPnJlYWRfcXVldWUsIGNv
bnRyb2wsIG5leHQpOworCQltID0gY29udHJvbC0+ZGF0YTsKKwkJd2hpbGUgKG0pIHsKKwkJCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NCX0xPR0dJTkdf
RU5BQkxFKSB7CisJCQkJc2N0cF9zYmxvZygmbmV3X3NvLT5zb19yY3YsIGNvbnRyb2wtPmRvX25v
dF9yZWZfc3RjYj9OVUxMOnN0Y2IsIFNDVFBfTE9HX1NCQUxMT0MsIFNDVFBfQlVGX0xFTihtKSk7
CisJCQl9CisJCQlzY3RwX3NiYWxsb2Moc3RjYiwgJm5ld19zby0+c29fcmN2LCBtKTsKKwkJCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NCX0xPR0dJTkdf
RU5BQkxFKSB7CisJCQkJc2N0cF9zYmxvZygmbmV3X3NvLT5zb19yY3YsIGNvbnRyb2wtPmRvX25v
dF9yZWZfc3RjYj9OVUxMOnN0Y2IsIFNDVFBfTE9HX1NCUkVTVUxULCAwKTsKKwkJCX0KKwkJCW0g
PSBTQ1RQX0JVRl9ORVhUKG0pOworCQl9CisJfQorCVNDVFBfSU5QX1JFQURfVU5MT0NLKG5ld19p
bnApOworfQorCit2b2lkCitzY3RwX3dha2V1cF90aGVfcmVhZF9zb2NrZXQoc3RydWN0IHNjdHBf
aW5wY2IgKmlucCwKKyAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgaW50IHNvX2xvY2tl
ZAorI2lmICEoZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQor
ICAgIFNDVFBfVU5VU0VECisjZW5kaWYKKykKK3sKKwlpZiAoKGlucCAhPSBOVUxMKSAmJiAoaW5w
LT5zY3RwX3NvY2tldCAhPSBOVUxMKSkgeworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorCQlzdHJ1Y3Qgc29ja2V0ICpzbzsKKworCQlzbyA9IFNDVFBf
SU5QX1NPKGlucCk7CisJCWlmICghc29fbG9ja2VkKSB7CisJCQlpZiAoc3RjYikgeworCQkJCWF0
b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJU0NUUF9UQ0JfVU5MT0NL
KHN0Y2IpOworCQkJfQorCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisJCQlpZiAoc3RjYikg
eworCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3Rj
Yi0+YXNvYy5yZWZjbnQsIDEpOworCQkJfQorCQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB7CisJCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsK
KwkJCQlyZXR1cm47CisJCQl9CisJCX0KKyNlbmRpZgorCQlzY3RwX3Nvcndha2V1cChpbnAsIGlu
cC0+c2N0cF9zb2NrZXQpOworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorCQlpZiAoIXNvX2xvY2tlZCkgeworCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNv
LCAxKTsKKwkJfQorI2VuZGlmCisJfQorfQorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwor
dm9pZAorc2N0cF9pbnZva2VfcmVjdl9jYWxsYmFjayhzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wX3JlYWRfbG9ja19oZWxkKQoreworCXVp
bnQzMl90IHBkX3BvaW50LCBsZW5ndGg7CisKKwlpZiAoKGlucC0+cmVjdl9jYWxsYmFjayA9PSBO
VUxMKSB8fAorCSAgICAoc3RjYiA9PSBOVUxMKSB8fAorCSAgICAoc3RjYi0+c2N0cF9zb2NrZXQg
PT0gTlVMTCkpIHsKKwkJcmV0dXJuOworCX0KKworCWxlbmd0aCA9IGNvbnRyb2wtPmxlbmd0aDsK
KwlpZiAoc3RjYiAhPSBOVUxMICYmIHN0Y2ItPnNjdHBfc29ja2V0ICE9IE5VTEwpIHsKKwkJcGRf
cG9pbnQgPSBtaW4oU0NUUF9TQl9MSU1JVF9SQ1Yoc3RjYi0+c2N0cF9zb2NrZXQpID4+IFNDVFBf
UEFSVElBTF9ERUxJVkVSWV9TSElGVCwKKwkJCSAgICAgICBzdGNiLT5zY3RwX2VwLT5wYXJ0aWFs
X2RlbGl2ZXJ5X3BvaW50KTsKKwl9IGVsc2UgeworCQlwZF9wb2ludCA9IGlucC0+cGFydGlhbF9k
ZWxpdmVyeV9wb2ludDsKKwl9CisJaWYgKChjb250cm9sLT5lbmRfYWRkZWQgPT0gMSkgfHwgKGxl
bmd0aCA+PSBwZF9wb2ludCkpIHsKKwkJc3RydWN0IHNvY2tldCAqc287CisJCXN0cnVjdCBtYnVm
ICptOworCQljaGFyICpidWZmZXI7CisJCXN0cnVjdCBzY3RwX3JjdmluZm8gcmN2OworCQl1bmlv
biBzY3RwX3NvY2tzdG9yZSBhZGRyOworCQlpbnQgZmxhZ3M7CisKKwkJaWYgKChidWZmZXIgPSBt
YWxsb2MobGVuZ3RoKSkgPT0gTlVMTCkgeworCQkJcmV0dXJuOworCQl9CisJCWlmIChpbnBfcmVh
ZF9sb2NrX2hlbGQgPT0gMCkgeworCQkJU0NUUF9JTlBfUkVBRF9MT0NLKGlucCk7CisJCX0KKwkJ
c28gPSBzdGNiLT5zY3RwX3NvY2tldDsKKwkJZm9yIChtID0gY29udHJvbC0+ZGF0YTsgbTsgbSA9
IFNDVFBfQlVGX05FWFQobSkpIHsKKwkJCXNjdHBfc2JmcmVlKGNvbnRyb2wsIGNvbnRyb2wtPnN0
Y2IsICZzby0+c29fcmN2LCBtKTsKKwkJfQorCQltX2NvcHlkYXRhKGNvbnRyb2wtPmRhdGEsIDAs
IGxlbmd0aCwgYnVmZmVyKTsKKwkJbWVtc2V0KCZyY3YsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9y
Y3ZpbmZvKSk7CisJCXJjdi5yY3Zfc2lkID0gY29udHJvbC0+c2luZm9fc3RyZWFtOworCQlyY3Yu
cmN2X3NzbiA9ICh1aW50MTZfdCljb250cm9sLT5taWQ7CisJCXJjdi5yY3ZfZmxhZ3MgPSBjb250
cm9sLT5zaW5mb19mbGFnczsKKwkJcmN2LnJjdl9wcGlkID0gY29udHJvbC0+c2luZm9fcHBpZDsK
KwkJcmN2LnJjdl90c24gPSBjb250cm9sLT5zaW5mb190c247CisJCXJjdi5yY3ZfY3VtdHNuID0g
Y29udHJvbC0+c2luZm9fY3VtdHNuOworCQlyY3YucmN2X2NvbnRleHQgPSBjb250cm9sLT5zaW5m
b19jb250ZXh0OworCQlyY3YucmN2X2Fzc29jX2lkID0gY29udHJvbC0+c2luZm9fYXNzb2NfaWQ7
CisJCW1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKHVuaW9uIHNjdHBfc29ja3N0b3JlKSk7CisJCXN3
aXRjaCAoY29udHJvbC0+d2hvRnJvbS0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkpIHsKKyNpZmRl
ZiBJTkVUCisJCWNhc2UgQUZfSU5FVDoKKwkJCWFkZHIuc2luID0gY29udHJvbC0+d2hvRnJvbS0+
cm8uX2xfYWRkci5zaW47CisJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCWNhc2Ug
QUZfSU5FVDY6CisJCQlhZGRyLnNpbjYgPSBjb250cm9sLT53aG9Gcm9tLT5yby5fbF9hZGRyLnNp
bjY7CisJCQlicmVhazsKKyNlbmRpZgorCQljYXNlIEFGX0NPTk46CisJCQlhZGRyLnNjb25uID0g
Y29udHJvbC0+d2hvRnJvbS0+cm8uX2xfYWRkci5zY29ubjsKKwkJCWJyZWFrOworCQlkZWZhdWx0
OgorCQkJYWRkci5zYSA9IGNvbnRyb2wtPndob0Zyb20tPnJvLl9sX2FkZHIuc2E7CisJCQlicmVh
azsKKwkJfQorCQlmbGFncyA9IDA7CisJCWlmIChjb250cm9sLT5lbmRfYWRkZWQgPT0gMSkgewor
CQkJZmxhZ3MgfD0gTVNHX0VPUjsKKwkJfQorCQlpZiAoY29udHJvbC0+c3BlY19mbGFncyAmIE1f
Tk9USUZJQ0FUSU9OKSB7CisJCQlmbGFncyB8PSBNU0dfTk9USUZJQ0FUSU9OOworCQl9CisJCXNj
dHBfbV9mcmVlbShjb250cm9sLT5kYXRhKTsKKwkJY29udHJvbC0+ZGF0YSA9IE5VTEw7CisJCWNv
bnRyb2wtPnRhaWxfbWJ1ZiA9IE5VTEw7CisJCWNvbnRyb2wtPmxlbmd0aCA9IDA7CisJCWlmIChj
b250cm9sLT5lbmRfYWRkZWQpIHsKKwkJCVRBSUxRX1JFTU9WRSgmc3RjYi0+c2N0cF9lcC0+cmVh
ZF9xdWV1ZSwgY29udHJvbCwgbmV4dCk7CisJCQljb250cm9sLT5vbl9yZWFkX3EgPSAwOworCQkJ
c2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNvbnRyb2wtPndob0Zyb20pOworCQkJY29udHJvbC0+d2hv
RnJvbSA9IE5VTEw7CisJCQlzY3RwX2ZyZWVfYV9yZWFkcShzdGNiLCBjb250cm9sKTsKKwkJfQor
CQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQlTQ1RQX1RDQl9VTkxP
Q0soc3RjYik7CisJCWlmIChpbnBfcmVhZF9sb2NrX2hlbGQgPT0gMCkgeworCQkJU0NUUF9JTlBf
UkVBRF9VTkxPQ0soaW5wKTsKKwkJfQorCQlpbnAtPnJlY3ZfY2FsbGJhY2soc28sIGFkZHIsIGJ1
ZmZlciwgbGVuZ3RoLCByY3YsIGZsYWdzLCBpbnAtPnVscF9pbmZvKTsKKwkJU0NUUF9UQ0JfTE9D
SyhzdGNiKTsKKwkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwor
CX0KK30KKyNlbmRpZgorCit2b2lkCitzY3RwX2FkZF90b19yZWFkcShzdHJ1Y3Qgc2N0cF9pbnBj
YiAqaW5wLAorICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICBzdHJ1Y3Qgc2N0cF9xdWV1
ZWRfdG9fcmVhZCAqY29udHJvbCwKKyAgICBzdHJ1Y3Qgc29ja2J1ZiAqc2IsCisgICAgaW50IGVu
ZCwKKyAgICBpbnQgaW5wX3JlYWRfbG9ja19oZWxkLAorICAgIGludCBzb19sb2NrZWQpCit7CisJ
LyoKKwkgKiBIZXJlIHdlIG11c3QgcGxhY2UgdGhlIGNvbnRyb2wgb24gdGhlIGVuZCBvZiB0aGUg
c29ja2V0IHJlYWQKKwkgKiBxdWV1ZSBBTkQgaW5jcmVtZW50IHNiX2NjIHNvIHRoYXQgc2VsZWN0
IHdpbGwgd29yayBwcm9wZXJseSBvbgorCSAqIHJlYWQuCisJICovCisJc3RydWN0IG1idWYgKm0s
ICpwcmV2ID0gTlVMTDsKKworCWlmIChpbnAgPT0gTlVMTCkgeworCQkvKiBHYWssIFRTTkghISAq
LworI2lmZGVmIElOVkFSSUFOVFMKKwkJcGFuaWMoIkdhaywgaW5wIE5VTEwgb24gYWRkX3RvX3Jl
YWRxIik7CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYg
IWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlpZiAoc29fbG9ja2VkKSB7CisJCXNjdHBfbG9ja19h
c3NlcnQoU0NUUF9JTlBfU08oaW5wKSk7CisJfSBlbHNlIHsKKwkJc2N0cF91bmxvY2tfYXNzZXJ0
KFNDVFBfSU5QX1NPKGlucCkpOworCX0KKyNlbmRpZgorCWlmIChpbnBfcmVhZF9sb2NrX2hlbGQg
PT0gMCkKKwkJU0NUUF9JTlBfUkVBRF9MT0NLKGlucCk7CisJaWYgKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9DQU5UX1JFQUQpIHsKKwkJaWYgKCFjb250cm9sLT5vbl9z
dHJtX3EpIHsKKwkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjb250cm9sLT53aG9Gcm9tKTsKKwkJ
CWlmIChjb250cm9sLT5kYXRhKSB7CisJCQkJc2N0cF9tX2ZyZWVtKGNvbnRyb2wtPmRhdGEpOwor
CQkJCWNvbnRyb2wtPmRhdGEgPSBOVUxMOworCQkJfQorCQkJc2N0cF9mcmVlX2FfcmVhZHEoc3Rj
YiwgY29udHJvbCk7CisJCX0KKwkJaWYgKGlucF9yZWFkX2xvY2tfaGVsZCA9PSAwKQorCQkJU0NU
UF9JTlBfUkVBRF9VTkxPQ0soaW5wKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoIShjb250cm9sLT5z
cGVjX2ZsYWdzICYgTV9OT1RJRklDQVRJT04pKSB7CisJCWF0b21pY19hZGRfaW50KCZpbnAtPnRv
dGFsX3JlY3ZzLCAxKTsKKwkJaWYgKCFjb250cm9sLT5kb19ub3RfcmVmX3N0Y2IpIHsKKwkJCWF0
b21pY19hZGRfaW50KCZzdGNiLT50b3RhbF9yZWN2cywgMSk7CisJCX0KKwl9CisJbSA9IGNvbnRy
b2wtPmRhdGE7CisJY29udHJvbC0+aGVsZF9sZW5ndGggPSAwOworCWNvbnRyb2wtPmxlbmd0aCA9
IDA7CisJd2hpbGUgKG0pIHsKKwkJaWYgKFNDVFBfQlVGX0xFTihtKSA9PSAwKSB7CisJCQkvKiBT
a2lwIG1idWZzIHdpdGggTk8gbGVuZ3RoICovCisJCQlpZiAocHJldiA9PSBOVUxMKSB7CisJCQkJ
LyogRmlyc3Qgb25lICovCisJCQkJY29udHJvbC0+ZGF0YSA9IHNjdHBfbV9mcmVlKG0pOworCQkJ
CW0gPSBjb250cm9sLT5kYXRhOworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0JVRl9ORVhUKHByZXYp
ID0gc2N0cF9tX2ZyZWUobSk7CisJCQkJbSA9IFNDVFBfQlVGX05FWFQocHJldik7CisJCQl9CisJ
CQlpZiAobSA9PSBOVUxMKSB7CisJCQkJY29udHJvbC0+dGFpbF9tYnVmID0gcHJldjsKKwkJCX0K
KwkJCWNvbnRpbnVlOworCQl9CisJCXByZXYgPSBtOworCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TQl9MT0dHSU5HX0VOQUJMRSkgeworCQkJc2N0cF9z
YmxvZyhzYiwgY29udHJvbC0+ZG9fbm90X3JlZl9zdGNiP05VTEw6c3RjYiwgU0NUUF9MT0dfU0JB
TExPQywgU0NUUF9CVUZfTEVOKG0pKTsKKwkJfQorCQlzY3RwX3NiYWxsb2Moc3RjYiwgc2IsIG0p
OworCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TQl9M
T0dHSU5HX0VOQUJMRSkgeworCQkJc2N0cF9zYmxvZyhzYiwgY29udHJvbC0+ZG9fbm90X3JlZl9z
dGNiP05VTEw6c3RjYiwgU0NUUF9MT0dfU0JSRVNVTFQsIDApOworCQl9CisJCWF0b21pY19hZGRf
aW50KCZjb250cm9sLT5sZW5ndGgsIFNDVFBfQlVGX0xFTihtKSk7CisJCW0gPSBTQ1RQX0JVRl9O
RVhUKG0pOworCX0KKwlpZiAocHJldiAhPSBOVUxMKSB7CisJCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9
IHByZXY7CisJfSBlbHNlIHsKKwkJLyogRXZlcnl0aGluZyBnb3QgY29sbGFwc2VkIG91dD8/ICov
CisJCWlmICghY29udHJvbC0+b25fc3RybV9xKSB7CisJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIo
Y29udHJvbC0+d2hvRnJvbSk7CisJCQlzY3RwX2ZyZWVfYV9yZWFkcShzdGNiLCBjb250cm9sKTsK
KwkJfQorCQlpZiAoaW5wX3JlYWRfbG9ja19oZWxkID09IDApCisJCQlTQ1RQX0lOUF9SRUFEX1VO
TE9DSyhpbnApOworCQlyZXR1cm47CisJfQorCWlmIChlbmQpIHsKKwkJY29udHJvbC0+ZW5kX2Fk
ZGVkID0gMTsKKwl9CisJVEFJTFFfSU5TRVJUX1RBSUwoJmlucC0+cmVhZF9xdWV1ZSwgY29udHJv
bCwgbmV4dCk7CisJY29udHJvbC0+b25fcmVhZF9xID0gMTsKKwlpZiAoaW5wX3JlYWRfbG9ja19o
ZWxkID09IDApCisJCVNDVFBfSU5QX1JFQURfVU5MT0NLKGlucCk7CisjaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorCXNjdHBfaW52b2tlX3JlY3ZfY2FsbGJhY2soaW5wLCBzdGNiLCBjb250cm9s
LCBpbnBfcmVhZF9sb2NrX2hlbGQpOworI2VuZGlmCisJaWYgKGlucCAmJiBpbnAtPnNjdHBfc29j
a2V0KSB7CisJCXNjdHBfd2FrZXVwX3RoZV9yZWFkX3NvY2tldChpbnAsIHN0Y2IsIHNvX2xvY2tl
ZCk7CisJfQorfQorCisvKioqKioqKioqKioqKkhPTEQgVEhJUyBDT01NRU5UIEZPUiBQQVRDSCBG
SUxFIE9GCisgKioqKioqKioqKioqKkFMVEVSTkFURSBST1VUSU5HIENPREUKKyAqLworCisvKioq
KioqKioqKioqKkhPTEQgVEhJUyBDT01NRU5UIEZPUiBFTkQgT0YgUEFUQ0ggRklMRSBPRgorICoq
KioqKioqKioqKipBTFRFUk5BVEUgUk9VVElORyBDT0RFCisgKi8KKworc3RydWN0IG1idWYgKgor
c2N0cF9nZW5lcmF0ZV9jYXVzZSh1aW50MTZfdCBjb2RlLCBjaGFyICppbmZvKQoreworCXN0cnVj
dCBtYnVmICptOworCXN0cnVjdCBzY3RwX2dlbl9lcnJvcl9jYXVzZSAqY2F1c2U7CisJc2l6ZV90
IGluZm9fbGVuOworCXVpbnQxNl90IGxlbjsKKworCWlmICgoY29kZSA9PSAwKSB8fCAoaW5mbyA9
PSBOVUxMKSkgeworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlpbmZvX2xlbiA9IHN0cmxlbihpbmZv
KTsKKwlpZiAoaW5mb19sZW4gPiAoU0NUUF9NQVhfQ0FVU0VfTEVOR1RIIC0gc2l6ZW9mKHN0cnVj
dCBzY3RwX3BhcmFtaGRyKSkpIHsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJbGVuID0gKHVpbnQx
Nl90KShzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpICsgaW5mb19sZW4pOworCW0gPSBzY3Rw
X2dldF9tYnVmX2Zvcl9tc2cobGVuLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJaWYgKG0g
IT0gTlVMTCkgeworCQlTQ1RQX0JVRl9MRU4obSkgPSBsZW47CisJCWNhdXNlID0gbXRvZChtLCBz
dHJ1Y3Qgc2N0cF9nZW5fZXJyb3JfY2F1c2UgKik7CisJCWNhdXNlLT5jb2RlID0gaHRvbnMoY29k
ZSk7CisJCWNhdXNlLT5sZW5ndGggPSBodG9ucyhsZW4pOworCQltZW1jcHkoY2F1c2UtPmluZm8s
IGluZm8sIGluZm9fbGVuKTsKKwl9CisJcmV0dXJuIChtKTsKK30KKworc3RydWN0IG1idWYgKgor
c2N0cF9nZW5lcmF0ZV9ub191c2VyX2RhdGFfY2F1c2UodWludDMyX3QgdHNuKQoreworCXN0cnVj
dCBtYnVmICptOworCXN0cnVjdCBzY3RwX2Vycm9yX25vX3VzZXJfZGF0YSAqbm9fdXNlcl9kYXRh
X2NhdXNlOworCXVpbnQxNl90IGxlbjsKKworCWxlbiA9ICh1aW50MTZfdClzaXplb2Yoc3RydWN0
IHNjdHBfZXJyb3Jfbm9fdXNlcl9kYXRhKTsKKwltID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGxl
biwgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOworCWlmIChtICE9IE5VTEwpIHsKKwkJU0NUUF9C
VUZfTEVOKG0pID0gbGVuOworCQlub191c2VyX2RhdGFfY2F1c2UgPSBtdG9kKG0sIHN0cnVjdCBz
Y3RwX2Vycm9yX25vX3VzZXJfZGF0YSAqKTsKKwkJbm9fdXNlcl9kYXRhX2NhdXNlLT5jYXVzZS5j
b2RlID0gaHRvbnMoU0NUUF9DQVVTRV9OT19VU0VSX0RBVEEpOworCQlub191c2VyX2RhdGFfY2F1
c2UtPmNhdXNlLmxlbmd0aCA9IGh0b25zKGxlbik7CisJCW5vX3VzZXJfZGF0YV9jYXVzZS0+dHNu
ID0gaHRvbmwodHNuKTsKKwl9CisJcmV0dXJuIChtKTsKK30KKworI2lmZGVmIFNDVFBfTUJDTlRf
TE9HR0lORwordm9pZAorc2N0cF9mcmVlX2J1ZnNwYWNlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwg
c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisgICAgc3RydWN0IHNjdHBfdG1pdF9jaHVu
ayAqdHAxLCBpbnQgY2hrX2NudCkKK3sKKwlpZiAodHAxLT5kYXRhID09IE5VTEwpIHsKKwkJcmV0
dXJuOworCX0KKwlhc29jLT5jaHVua3Nfb25fb3V0X3F1ZXVlIC09IGNoa19jbnQ7CisJaWYgKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUJDTlRfTE9HR0lOR19F
TkFCTEUpIHsKKwkJc2N0cF9sb2dfbWJjbnQoU0NUUF9MT0dfTUJDTlRfREVDUkVBU0UsCisJCQkg
ICAgICAgYXNvYy0+dG90YWxfb3V0cHV0X3F1ZXVlX3NpemUsCisJCQkgICAgICAgdHAxLT5ib29r
X3NpemUsCisJCQkgICAgICAgMCwKKwkJCSAgICAgICB0cDEtPm1iY250KTsKKwl9CisJaWYgKGFz
b2MtPnRvdGFsX291dHB1dF9xdWV1ZV9zaXplID49IHRwMS0+Ym9va19zaXplKSB7CisJCWF0b21p
Y19hZGRfaW50KCZhc29jLT50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSwgLXRwMS0+Ym9va19zaXpl
KTsKKwl9IGVsc2UgeworCQlhc29jLT50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSA9IDA7CisJfQor
CisJaWYgKHN0Y2ItPnNjdHBfc29ja2V0ICYmICgoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSkgfHwKKwkJCQkgICgoc3RjYi0+c2N0cF9lcC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpKSkpIHsKKwkJaWYgKHN0Y2ItPnNj
dHBfc29ja2V0LT5zb19zbmQuc2JfY2MgPj0gdHAxLT5ib29rX3NpemUpIHsKKwkJCXN0Y2ItPnNj
dHBfc29ja2V0LT5zb19zbmQuc2JfY2MgLT0gdHAxLT5ib29rX3NpemU7CisJCX0gZWxzZSB7CisJ
CQlzdGNiLT5zY3RwX3NvY2tldC0+c29fc25kLnNiX2NjID0gMDsKKwkJfQorCX0KK30KKworI2Vu
ZGlmCisKK2ludAorc2N0cF9yZWxlYXNlX3ByX3NjdHBfY2h1bmsoc3RydWN0IHNjdHBfdGNiICpz
dGNiLCBzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICp0cDEsCisJCQkgICB1aW50OF90IHNlbnQsIGlu
dCBzb19sb2NrZWQpCit7CisJc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycTsKKwlzdHJ1Y3Qg
c2N0cF90bWl0X2NodW5rICpjaGsgPSBOVUxMLCAqdHAyOworCXN0cnVjdCBzY3RwX3N0cmVhbV9x
dWV1ZV9wZW5kaW5nICpzcDsKKwl1aW50MzJfdCBtaWQ7CisJdWludDE2X3Qgc2lkOworCXVpbnQ4
X3QgZm91bmRlb20gPSAwOworCWludCByZXRfc3ogPSAwOworCWludCBub3Rkb25lOworCWludCBk
b193YWtldXBfcm91dGluZSA9IDA7CisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwlpZiAoc29fbG9ja2VkKSB7CisJCXNjdHBfbG9ja19hc3NlcnQo
U0NUUF9JTlBfU08oc3RjYi0+c2N0cF9lcCkpOworCX0gZWxzZSB7CisJCXNjdHBfdW5sb2NrX2Fz
c2VydChTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKSk7CisJfQorI2VuZGlmCisJc2lkID0gdHAx
LT5yZWMuZGF0YS5zaWQ7CisJbWlkID0gdHAxLT5yZWMuZGF0YS5taWQ7CisJaWYgKHNlbnQgfHwg
ISh0cDEtPnJlYy5kYXRhLnJjdl9mbGFncyAmIFNDVFBfREFUQV9GSVJTVF9GUkFHKSkgeworCQlz
dGNiLT5hc29jLmFiYW5kb25lZF9zZW50WzBdKys7CisJCXN0Y2ItPmFzb2MuYWJhbmRvbmVkX3Nl
bnRbUFJfU0NUUF9QT0xJQ1kodHAxLT5mbGFncyldKys7CisJCXN0Y2ItPmFzb2Muc3RybW91dFtz
aWRdLmFiYW5kb25lZF9zZW50WzBdKys7CisjaWYgZGVmaW5lZChTQ1RQX0RFVEFJTEVEX1NUUl9T
VEFUUykKKwkJc3RjYi0+YXNvYy5zdHJtb3V0W3NpZF0uYWJhbmRvbmVkX3NlbnRbUFJfU0NUUF9Q
T0xJQ1kodHAxLT5mbGFncyldKys7CisjZW5kaWYKKwl9IGVsc2UgeworCQlzdGNiLT5hc29jLmFi
YW5kb25lZF91bnNlbnRbMF0rKzsKKwkJc3RjYi0+YXNvYy5hYmFuZG9uZWRfdW5zZW50W1BSX1ND
VFBfUE9MSUNZKHRwMS0+ZmxhZ3MpXSsrOworCQlzdGNiLT5hc29jLnN0cm1vdXRbc2lkXS5hYmFu
ZG9uZWRfdW5zZW50WzBdKys7CisjaWYgZGVmaW5lZChTQ1RQX0RFVEFJTEVEX1NUUl9TVEFUUykK
KwkJc3RjYi0+YXNvYy5zdHJtb3V0W3NpZF0uYWJhbmRvbmVkX3Vuc2VudFtQUl9TQ1RQX1BPTElD
WSh0cDEtPmZsYWdzKV0rKzsKKyNlbmRpZgorCX0KKwlkbyB7CisJCXJldF9zeiArPSB0cDEtPmJv
b2tfc2l6ZTsKKwkJaWYgKHRwMS0+ZGF0YSAhPSBOVUxMKSB7CisJCQlpZiAodHAxLT5zZW50IDwg
U0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKKwkJCQlzY3RwX2ZsaWdodF9zaXplX2RlY3JlYXNlKHRw
MSk7CisJCQkJc2N0cF90b3RhbF9mbGlnaHRfZGVjcmVhc2Uoc3RjYiwgdHAxKTsKKwkJCX0KKwkJ
CXNjdHBfZnJlZV9idWZzcGFjZShzdGNiLCAmc3RjYi0+YXNvYywgdHAxLCAxKTsKKwkJCXN0Y2It
PmFzb2MucGVlcnNfcnduZCArPSB0cDEtPnNlbmRfc2l6ZTsKKwkJCXN0Y2ItPmFzb2MucGVlcnNf
cnduZCArPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcGVlcl9jaHVua19vaCk7CisJCQlpZiAoc2Vu
dCkgeworCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9TRU5UX0RHX0ZBSUwsIHN0Y2Is
IDAsIHRwMSwgc29fbG9ja2VkKTsKKwkJCX0gZWxzZSB7CisJCQkJc2N0cF91bHBfbm90aWZ5KFND
VFBfTk9USUZZX1VOU0VOVF9ER19GQUlMLCBzdGNiLCAwLCB0cDEsIHNvX2xvY2tlZCk7CisJCQl9
CisJCQlpZiAodHAxLT5kYXRhKSB7CisJCQkJc2N0cF9tX2ZyZWVtKHRwMS0+ZGF0YSk7CisJCQkJ
dHAxLT5kYXRhID0gTlVMTDsKKwkJCX0KKwkJCWRvX3dha2V1cF9yb3V0aW5lID0gMTsKKwkJCWlm
IChQUl9TQ1RQX0JVRl9FTkFCTEVEKHRwMS0+ZmxhZ3MpKSB7CisJCQkJc3RjYi0+YXNvYy5zZW50
X3F1ZXVlX2NudF9yZW1vdmVhYmxlLS07CisJCQl9CisJCX0KKwkJdHAxLT5zZW50ID0gU0NUUF9G
T1JXQVJEX1RTTl9TS0lQOworCQlpZiAoKHRwMS0+cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9E
QVRBX05PVF9GUkFHKSA9PQorCQkgICAgU0NUUF9EQVRBX05PVF9GUkFHKSB7CisJCQkvKiBub3Qg
ZnJhZydlZCB3ZSBhZSBkb25lICAgKi8KKwkJCW5vdGRvbmUgPSAwOworCQkJZm91bmRlb20gPSAx
OworCQl9IGVsc2UgaWYgKHRwMS0+cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX0xBU1Rf
RlJBRykgeworCQkJLyogZW5kIG9mIGZyYWcsIHdlIGFyZSBkb25lICovCisJCQlub3Rkb25lID0g
MDsKKwkJCWZvdW5kZW9tID0gMTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBJdHMgYSBiZWdp
biBvciBtaWRkbGUgcGllY2UsIHdlIG11c3QgbWFyayBhbGwgb2YKKwkJCSAqIGl0CisJCQkgKi8K
KwkJCW5vdGRvbmUgPSAxOworCQkJdHAxID0gVEFJTFFfTkVYVCh0cDEsIHNjdHBfbmV4dCk7CisJ
CX0KKwl9IHdoaWxlICh0cDEgJiYgbm90ZG9uZSk7CisJaWYgKGZvdW5kZW9tID09IDApIHsKKwkJ
LyoKKwkJICogVGhlIG11bHRpLXBhcnQgbWVzc2FnZSB3YXMgc2NhdHRlcmVkIGFjcm9zcyB0aGUg
c2VuZCBhbmQKKwkJICogc2VudCBxdWV1ZS4KKwkJICovCisJCVRBSUxRX0ZPUkVBQ0hfU0FGRSh0
cDEsICZzdGNiLT5hc29jLnNlbmRfcXVldWUsIHNjdHBfbmV4dCwgdHAyKSB7CisJCQlpZiAoKHRw
MS0+cmVjLmRhdGEuc2lkICE9IHNpZCkgfHwKKwkJCSAgICAoIVNDVFBfTUlEX0VRKHN0Y2ItPmFz
b2MuaWRhdGFfc3VwcG9ydGVkLCB0cDEtPnJlYy5kYXRhLm1pZCwgbWlkKSkpIHsKKwkJCQlicmVh
azsKKwkJCX0KKwkJCS8qIHNhdmUgdG8gY2hrIGluIGNhc2Ugd2UgaGF2ZSBzb21lIG9uIHN0cmVh
bSBvdXQKKwkJCSAqIHF1ZXVlLiBJZiBzbyBhbmQgd2UgaGF2ZSBhbiB1bi10cmFuc21pdHRlZCBv
bmUKKwkJCSAqIHdlIGRvbid0IGhhdmUgdG8gZnVkZ2UgdGhlIFRTTi4KKwkJCSAqLworCQkJY2hr
ID0gdHAxOworCQkJcmV0X3N6ICs9IHRwMS0+Ym9va19zaXplOworCQkJc2N0cF9mcmVlX2J1ZnNw
YWNlKHN0Y2IsICZzdGNiLT5hc29jLCB0cDEsIDEpOworCQkJaWYgKHNlbnQpIHsKKwkJCQlzY3Rw
X3VscF9ub3RpZnkoU0NUUF9OT1RJRllfU0VOVF9ER19GQUlMLCBzdGNiLCAwLCB0cDEsIHNvX2xv
Y2tlZCk7CisJCQl9IGVsc2UgeworCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9VTlNF
TlRfREdfRkFJTCwgc3RjYiwgMCwgdHAxLCBzb19sb2NrZWQpOworCQkJfQorCQkJaWYgKHRwMS0+
ZGF0YSkgeworCQkJCXNjdHBfbV9mcmVlbSh0cDEtPmRhdGEpOworCQkJCXRwMS0+ZGF0YSA9IE5V
TEw7CisJCQl9CisJCQkvKiBObyBmbGlnaHQgaW52b2x2ZWQgaGVyZSBib29rIHRoZSBzaXplIHRv
IDAgKi8KKwkJCXRwMS0+Ym9va19zaXplID0gMDsKKwkJCWlmICh0cDEtPnJlYy5kYXRhLnJjdl9m
bGFncyAmIFNDVFBfREFUQV9MQVNUX0ZSQUcpIHsKKwkJCQlmb3VuZGVvbSA9IDE7CisJCQl9CisJ
CQlkb193YWtldXBfcm91dGluZSA9IDE7CisJCQl0cDEtPnNlbnQgPSBTQ1RQX0ZPUldBUkRfVFNO
X1NLSVA7CisJCQlUQUlMUV9SRU1PVkUoJnN0Y2ItPmFzb2Muc2VuZF9xdWV1ZSwgdHAxLCBzY3Rw
X25leHQpOworCQkJLyogb24gdG8gdGhlIHNlbnQgcXVldWUgc28gd2UgY2FuIHdhaXQgZm9yIGl0
IHRvIGJlIHBhc3NlZCBieS4gKi8KKwkJCVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5hc29jLnNl
bnRfcXVldWUsIHRwMSwKKwkJCQkJICBzY3RwX25leHQpOworCQkJc3RjYi0+YXNvYy5zZW5kX3F1
ZXVlX2NudC0tOworCQkJc3RjYi0+YXNvYy5zZW50X3F1ZXVlX2NudCsrOworCQl9CisJfQorCWlm
IChmb3VuZGVvbSA9PSAwKSB7CisJCS8qCisJCSAqIFN0aWxsIG5vIGVvbSBmb3VuZC4gVGhhdCBt
ZWFucyB0aGVyZQorCQkgKiBpcyBzdHVmZiBsZWZ0IG9uIHRoZSBzdHJlYW0gb3V0IHF1ZXVlLi4g
eXVjay4KKwkJICovCisJCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKKwkJc3RycSA9ICZzdGNi
LT5hc29jLnN0cm1vdXRbc2lkXTsKKwkJc3AgPSBUQUlMUV9GSVJTVCgmc3RycS0+b3V0cXVldWUp
OworCQlpZiAoc3AgIT0gTlVMTCkgeworCQkJc3AtPmRpc2NhcmRfcmVzdCA9IDE7CisJCQkvKgor
CQkJICogV2UgbWF5IG5lZWQgdG8gcHV0IGEgY2h1bmsgb24gdGhlCisJCQkgKiBxdWV1ZSB0aGF0
IGhvbGRzIHRoZSBUU04gdGhhdAorCQkJICogd291bGQgaGF2ZSBiZWVuIHNlbnQgd2l0aCB0aGUg
TEFTVAorCQkJICogYml0LgorCQkJICovCisJCQlpZiAoY2hrID09IE5VTEwpIHsKKwkJCQkvKiBZ
ZXAsIHdlIGhhdmUgdG8gKi8KKwkJCQlzY3RwX2FsbG9jX2FfY2h1bmsoc3RjYiwgY2hrKTsKKwkJ
CQlpZiAoY2hrID09IE5VTEwpIHsKKwkJCQkJLyogd2UgYXJlIGhvc2VkLiBBbGwgd2UgY2FuCisJ
CQkJCSAqIGRvIGlzIG5vdGhpbmcuLiB3aGljaCB3aWxsCisJCQkJCSAqIGNhdXNlIGFuIGFib3J0
IGlmIHRoZSBwZWVyIGlzCisJCQkJCSAqIHBheWluZyBhdHRlbnRpb24uCisJCQkJCSAqLworCQkJ
CQlnb3RvIG9oX3dlbGw7CisJCQkJfQorCQkJCW1lbXNldChjaGssIDAsIHNpemVvZigqY2hrKSk7
CisJCQkJY2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3MgPSAwOworCQkJCWNoay0+c2VudCA9IFNDVFBf
Rk9SV0FSRF9UU05fU0tJUDsKKwkJCQljaGstPmFzb2MgPSAmc3RjYi0+YXNvYzsKKwkJCQlpZiAo
c3RjYi0+YXNvYy5pZGF0YV9zdXBwb3J0ZWQgPT0gMCkgeworCQkJCQlpZiAoc3AtPnNpbmZvX2Zs
YWdzICYgU0NUUF9VTk9SREVSRUQpIHsKKwkJCQkJCWNoay0+cmVjLmRhdGEubWlkID0gMDsKKwkJ
CQkJfSBlbHNlIHsKKwkJCQkJCWNoay0+cmVjLmRhdGEubWlkID0gc3RycS0+bmV4dF9taWRfb3Jk
ZXJlZDsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWlmIChzcC0+c2luZm9fZmxhZ3MgJiBT
Q1RQX1VOT1JERVJFRCkgeworCQkJCQkJY2hrLT5yZWMuZGF0YS5taWQgPSBzdHJxLT5uZXh0X21p
ZF91bm9yZGVyZWQ7CisJCQkJCX0gZWxzZSB7CisJCQkJCQljaGstPnJlYy5kYXRhLm1pZCA9IHN0
cnEtPm5leHRfbWlkX29yZGVyZWQ7CisJCQkJCX0KKwkJCQl9CisJCQkJY2hrLT5yZWMuZGF0YS5z
aWQgPSBzcC0+c2lkOworCQkJCWNoay0+cmVjLmRhdGEucHBpZCA9IHNwLT5wcGlkOworCQkJCWNo
ay0+cmVjLmRhdGEuY29udGV4dCA9IHNwLT5jb250ZXh0OworCQkJCWNoay0+ZmxhZ3MgPSBzcC0+
YWN0X2ZsYWdzOworCQkJCWNoay0+d2hvVG8gPSBOVUxMOworI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJY2hrLT5yZWMuZGF0YS50c24gPSBh
dG9taWNfZmV0Y2hhZGRfaW50KCZzdGNiLT5hc29jLnNlbmRpbmdfc2VxLCAxKTsKKyNlbHNlCisJ
CQkJY2hrLT5yZWMuZGF0YS50c24gPSBzdGNiLT5hc29jLnNlbmRpbmdfc2VxKys7CisjZW5kaWYK
KwkJCQlzdHJxLT5jaHVua3Nfb25fcXVldWVzKys7CisJCQkJVEFJTFFfSU5TRVJUX1RBSUwoJnN0
Y2ItPmFzb2Muc2VudF9xdWV1ZSwgY2hrLCBzY3RwX25leHQpOworCQkJCXN0Y2ItPmFzb2Muc2Vu
dF9xdWV1ZV9jbnQrKzsKKwkJCQlzdGNiLT5hc29jLnByX3NjdHBfY250Kys7CisJCQl9CisJCQlj
aGstPnJlYy5kYXRhLnJjdl9mbGFncyB8PSBTQ1RQX0RBVEFfTEFTVF9GUkFHOworCQkJaWYgKHNw
LT5zaW5mb19mbGFncyAmIFNDVFBfVU5PUkRFUkVEKSB7CisJCQkJY2hrLT5yZWMuZGF0YS5yY3Zf
ZmxhZ3MgfD0gU0NUUF9EQVRBX1VOT1JERVJFRDsKKwkJCX0KKwkJCWlmIChzdGNiLT5hc29jLmlk
YXRhX3N1cHBvcnRlZCA9PSAwKSB7CisJCQkJaWYgKChzcC0+c2luZm9fZmxhZ3MgJiBTQ1RQX1VO
T1JERVJFRCkgPT0gMCkgeworCQkJCQlzdHJxLT5uZXh0X21pZF9vcmRlcmVkKys7CisJCQkJfQor
CQkJfSBlbHNlIHsKKwkJCQlpZiAoc3AtPnNpbmZvX2ZsYWdzICYgU0NUUF9VTk9SREVSRUQpIHsK
KwkJCQkJc3RycS0+bmV4dF9taWRfdW5vcmRlcmVkKys7CisJCQkJfSBlbHNlIHsKKwkJCQkJc3Ry
cS0+bmV4dF9taWRfb3JkZXJlZCsrOworCQkJCX0KKwkJCX0KKwkJb2hfd2VsbDoKKwkJCWlmIChz
cC0+ZGF0YSkgeworCQkJCS8qIFB1bGwgYW55IGRhdGEgdG8gZnJlZSB1cCB0aGUgU0IgYW5kCisJ
CQkJICogYWxsb3cgc2VuZGVyIHRvICJhZGQgbW9yZSIgd2hpbGUgd2UKKwkJCQkgKiB3aWxsIHRo
cm93IGF3YXkgOi0pCisJCQkJICovCisJCQkJc2N0cF9mcmVlX3NwYnVmc3BhY2Uoc3RjYiwgJnN0
Y2ItPmFzb2MsIHNwKTsKKwkJCQlyZXRfc3ogKz0gc3AtPmxlbmd0aDsKKwkJCQlkb193YWtldXBf
cm91dGluZSA9IDE7CisJCQkJc3AtPnNvbWVfdGFrZW4gPSAxOworCQkJCXNjdHBfbV9mcmVlbShz
cC0+ZGF0YSk7CisJCQkJc3AtPmRhdGEgPSBOVUxMOworCQkJCXNwLT50YWlsX21idWYgPSBOVUxM
OworCQkJCXNwLT5sZW5ndGggPSAwOworCQkJfQorCQl9CisJCVNDVFBfVENCX1NFTkRfVU5MT0NL
KHN0Y2IpOworCX0KKwlpZiAoZG9fd2FrZXVwX3JvdXRpbmUpIHsKKyNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJc3RydWN0IHNvY2tldCAqc287CisK
KwkJc28gPSBTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKTsKKwkJaWYgKCFzb19sb2NrZWQpIHsK
KwkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQlTQ1RQX1RDQl9V
TkxPQ0soc3RjYik7CisJCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKKwkJCVNDVFBfVENCX0xP
Q0soc3RjYik7CisJCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7
CisJCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQ0xPU0VEX1NPQ0tFVCkgewor
CQkJCS8qIGFzc29jIHdhcyBmcmVlZCB3aGlsZSB3ZSB3ZXJlIHVubG9ja2VkICovCisJCQkJU0NU
UF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKwkJCQlyZXR1cm4gKHJldF9zeik7CisJCQl9CisJCX0K
KyNlbmRpZgorCQlzY3RwX3Nvd3dha2V1cChzdGNiLT5zY3RwX2VwLCBzdGNiLT5zY3RwX3NvY2tl
dCk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJ
CWlmICghc29fbG9ja2VkKSB7CisJCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworCQl9Cisj
ZW5kaWYKKwl9CisJcmV0dXJuIChyZXRfc3opOworfQorCisvKgorICogY2hlY2tzIHRvIHNlZSBp
ZiB0aGUgZ2l2ZW4gYWRkcmVzcywgc2EsIGlzIG9uZSB0aGF0IGlzIGN1cnJlbnRseSBrbm93biBi
eQorICogdGhlIGtlcm5lbCBub3RlOiBjYW4ndCBkaXN0aW5ndWlzaCB0aGUgc2FtZSBhZGRyZXNz
IG9uIG11bHRpcGxlIGludGVyZmFjZXMKKyAqIGFuZCBkb2Vzbid0IGhhbmRsZSBtdWx0aXBsZSBh
ZGRyZXNzZXMgd2l0aCBkaWZmZXJlbnQgem9uZS9zY29wZSBpZCdzIG5vdGU6CisgKiBpZmFfaWZ3
aXRoYWRkcigpIGNvbXBhcmVzIHRoZSBlbnRpcmUgc29ja2FkZHIgc3RydWN0CisgKi8KK3N0cnVj
dCBzY3RwX2lmYSAqCitzY3RwX2ZpbmRfaWZhX2luX2VwKHN0cnVjdCBzY3RwX2lucGNiICppbnAs
IHN0cnVjdCBzb2NrYWRkciAqYWRkciwKKwkJICAgIGludCBob2xkc19sb2NrKQoreworCXN0cnVj
dCBzY3RwX2xhZGRyICpsYWRkcjsKKworCWlmIChob2xkc19sb2NrID09IDApIHsKKwkJU0NUUF9J
TlBfUkxPQ0soaW5wKTsKKwl9CisKKwlMSVNUX0ZPUkVBQ0gobGFkZHIsICZpbnAtPnNjdHBfYWRk
cl9saXN0LCBzY3RwX254dF9hZGRyKSB7CisJCWlmIChsYWRkci0+aWZhID09IE5VTEwpCisJCQlj
b250aW51ZTsKKwkJaWYgKGFkZHItPnNhX2ZhbWlseSAhPSBsYWRkci0+aWZhLT5hZGRyZXNzLnNh
LnNhX2ZhbWlseSkKKwkJCWNvbnRpbnVlOworI2lmZGVmIElORVQKKwkJaWYgKGFkZHItPnNhX2Zh
bWlseSA9PSBBRl9JTkVUKSB7CisJCQlpZiAoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyKS0+
c2luX2FkZHIuc19hZGRyID09CisJCQkgICAgbGFkZHItPmlmYS0+YWRkcmVzcy5zaW4uc2luX2Fk
ZHIuc19hZGRyKSB7CisJCQkJLyogZm91bmQgaGltLiAqLworCQkJCWJyZWFrOworCQkJfQorCQl9
CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2
KSB7CisJCQlpZiAoU0NUUDZfQVJFX0FERFJfRVFVQUwoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilh
ZGRyLAorCQkJCQkJICZsYWRkci0+aWZhLT5hZGRyZXNzLnNpbjYpKSB7CisJCQkJLyogZm91bmQg
aGltLiAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisJCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfQ09OTikgeworCQkJaWYgKCgo
c3RydWN0IHNvY2thZGRyX2Nvbm4gKilhZGRyKS0+c2Nvbm5fYWRkciA9PSBsYWRkci0+aWZhLT5h
ZGRyZXNzLnNjb25uLnNjb25uX2FkZHIpIHsKKwkJCQkvKiBmb3VuZCBoaW0uICovCisJCQkJYnJl
YWs7CisJCQl9CisJCX0KKyNlbmRpZgorCX0KKwlpZiAoaG9sZHNfbG9jayA9PSAwKSB7CisJCVND
VFBfSU5QX1JVTkxPQ0soaW5wKTsKKwl9CisJaWYgKGxhZGRyICE9IE5VTEwpIHsKKwkJcmV0dXJu
IChsYWRkci0+aWZhKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gKE5VTEwpOworCX0KK30KKwordWlu
dDMyX3QKK3NjdHBfZ2V0X2lmYV9oYXNoX3ZhbChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCit7CisJ
c3dpdGNoIChhZGRyLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJY2FzZSBBRl9JTkVUOgor
CXsKKwkJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisKKwkJc2luID0gKHN0cnVjdCBzb2NrYWRk
cl9pbiAqKWFkZHI7CisJCXJldHVybiAoc2luLT5zaW5fYWRkci5zX2FkZHIgXiAoc2luLT5zaW5f
YWRkci5zX2FkZHIgPj4gMTYpKTsKKwl9CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZf
SU5FVDY6CisJeworCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCQl1aW50MzJfdCBoYXNo
X29mX2FkZHI7CisKKwkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKKyNpZiAh
ZGVmaW5lZChfV0lOMzIpICYmICEoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKSkgJiYgIWRlZmluZWQoX19BUFBMRV9fKQorCQloYXNoX29mX2FkZHIgPSAoc2lu
Ni0+c2luNl9hZGRyLnM2X2FkZHIzMlswXSArCisJCQkJc2luNi0+c2luNl9hZGRyLnM2X2FkZHIz
MlsxXSArCisJCQkJc2luNi0+c2luNl9hZGRyLnM2X2FkZHIzMlsyXSArCisJCQkJc2luNi0+c2lu
Nl9hZGRyLnM2X2FkZHIzMlszXSk7CisjZWxzZQorCQloYXNoX29mX2FkZHIgPSAoKCh1aW50MzJf
dCAqKSZzaW42LT5zaW42X2FkZHIpWzBdICsKKwkJCQkoKHVpbnQzMl90ICopJnNpbjYtPnNpbjZf
YWRkcilbMV0gKworCQkJCSgodWludDMyX3QgKikmc2luNi0+c2luNl9hZGRyKVsyXSArCisJCQkJ
KCh1aW50MzJfdCAqKSZzaW42LT5zaW42X2FkZHIpWzNdKTsKKyNlbmRpZgorCQloYXNoX29mX2Fk
ZHIgPSAoaGFzaF9vZl9hZGRyIF4gKGhhc2hfb2ZfYWRkciA+PiAxNikpOworCQlyZXR1cm4gKGhh
c2hfb2ZfYWRkcik7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWNh
c2UgQUZfQ09OTjoKKwl7CisJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsKKwkJdWludHB0
cl90IHRlbXA7CisKKwkJc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilhZGRyOworCQl0
ZW1wID0gKHVpbnRwdHJfdClzY29ubi0+c2Nvbm5fYWRkcjsKKwkJcmV0dXJuICgodWludDMyX3Qp
KHRlbXAgXiAodGVtcCA+PiAxNikpKTsKKwl9CisjZW5kaWYKKwlkZWZhdWx0OgorCQlicmVhazsK
Kwl9CisJcmV0dXJuICgwKTsKK30KKworc3RydWN0IHNjdHBfaWZhICoKK3NjdHBfZmluZF9pZmFf
YnlfYWRkcihzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHVpbnQzMl90IHZyZl9pZCwgaW50IGhvbGRz
X2xvY2spCit7CisJc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYXA7CisJc3RydWN0IHNjdHBfdnJm
ICp2cmY7CisJc3RydWN0IHNjdHBfaWZhbGlzdCAqaGFzaF9oZWFkOworCXVpbnQzMl90IGhhc2hf
b2ZfYWRkcjsKKworCWlmIChob2xkc19sb2NrID09IDApIHsKKwkJU0NUUF9JUElfQUREUl9STE9D
SygpOworCX0gZWxzZSB7CisJCVNDVFBfSVBJX0FERFJfTE9DS19BU1NFUlQoKTsKKwl9CisKKwl2
cmYgPSBzY3RwX2ZpbmRfdnJmKHZyZl9pZCk7CisJaWYgKHZyZiA9PSBOVUxMKSB7CisJCWlmICho
b2xkc19sb2NrID09IDApCisJCQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKKwkJcmV0dXJuIChO
VUxMKTsKKwl9CisKKwloYXNoX29mX2FkZHIgPSBzY3RwX2dldF9pZmFfaGFzaF92YWwoYWRkcik7
CisKKwloYXNoX2hlYWQgPSAmdnJmLT52cmZfYWRkcl9oYXNoWyhoYXNoX29mX2FkZHIgJiB2cmYt
PnZyZl9hZGRyX2hhc2htYXJrKV07CisJaWYgKGhhc2hfaGVhZCA9PSBOVUxMKSB7CisJCVNDVFBf
UFJJTlRGKCJoYXNoX29mX2FkZHI6JXggbWFzazoleCB0YWJsZToleCAtICIsCisJCQkgICAgaGFz
aF9vZl9hZGRyLCAodWludDMyX3QpdnJmLT52cmZfYWRkcl9oYXNobWFyaywKKwkJCSAgICAodWlu
dDMyX3QpKGhhc2hfb2ZfYWRkciAmIHZyZi0+dnJmX2FkZHJfaGFzaG1hcmspKTsKKwkJc2N0cF9w
cmludF9hZGRyZXNzKGFkZHIpOworCQlTQ1RQX1BSSU5URigiTm8gc3VjaCBidWNrZXQgZm9yIGFk
ZHJlc3NcbiIpOworCQlpZiAoaG9sZHNfbG9jayA9PSAwKQorCQkJU0NUUF9JUElfQUREUl9SVU5M
T0NLKCk7CisKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJTElTVF9GT1JFQUNIKHNjdHBfaWZhcCwg
aGFzaF9oZWFkLCBuZXh0X2J1Y2tldCkgeworCQlpZiAoYWRkci0+c2FfZmFtaWx5ICE9IHNjdHBf
aWZhcC0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpCisJCQljb250aW51ZTsKKyNpZmRlZiBJTkVUCisJ
CWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgeworCQkJaWYgKCgoc3RydWN0IHNvY2th
ZGRyX2luICopYWRkciktPnNpbl9hZGRyLnNfYWRkciA9PQorCQkJICAgIHNjdHBfaWZhcC0+YWRk
cmVzcy5zaW4uc2luX2FkZHIuc19hZGRyKSB7CisJCQkJLyogZm91bmQgaGltLiAqLworCQkJCWJy
ZWFrOworCQkJfQorCQl9CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQlpZiAoYWRkci0+c2FfZmFt
aWx5ID09IEFGX0lORVQ2KSB7CisJCQlpZiAoU0NUUDZfQVJFX0FERFJfRVFVQUwoKHN0cnVjdCBz
b2NrYWRkcl9pbjYgKilhZGRyLAorCQkJCQkJICZzY3RwX2lmYXAtPmFkZHJlc3Muc2luNikpIHsK
KwkJCQkvKiBmb3VuZCBoaW0uICovCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKyNlbmRpZgorI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9DT05O
KSB7CisJCQlpZiAoKChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKWFkZHIpLT5zY29ubl9hZGRyID09
IHNjdHBfaWZhcC0+YWRkcmVzcy5zY29ubi5zY29ubl9hZGRyKSB7CisJCQkJLyogZm91bmQgaGlt
LiAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisjZW5kaWYKKwl9CisJaWYgKGhvbGRzX2xvY2sg
PT0gMCkKKwkJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7CisJcmV0dXJuIChzY3RwX2lmYXApOwor
fQorCitzdGF0aWMgdm9pZAorc2N0cF91c2VyX3JjdmQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1
aW50MzJfdCAqZnJlZWRfc29fZmFyLCBpbnQgaG9sZF9ybG9jaywKKwkgICAgICAgdWludDMyX3Qg
cnduZF9yZXEpCit7CisJLyogVXNlciBwdWxsZWQgc29tZSBkYXRhLCBkbyB3ZSBuZWVkIGEgcndu
ZCB1cGRhdGU/ICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKwlzdHJ1Y3QgZXBvY2hfdHJhY2tlciBldDsKKyNlbmRpZgorCWludCByX3VubG9j
a2VkID0gMDsKKwl1aW50MzJfdCBkaWYsIHJ3bmQ7CisJc3RydWN0IHNvY2tldCAqc28gPSBOVUxM
OworCisJaWYgKHN0Y2IgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJYXRvbWljX2FkZF9pbnQoJnN0
Y2ItPmFzb2MucmVmY250LCAxKTsKKworCWlmICgoU0NUUF9HRVRfU1RBVEUoc3RjYikgPT0gU0NU
UF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkgfHwKKwkgICAgKHN0Y2ItPmFzb2Muc3RhdGUgJiAo
U0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCB8IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlW
RUQpKSkgeworCQkvKiBQcmUtY2hlY2sgSWYgd2UgYXJlIGZyZWVpbmcgbm8gdXBkYXRlICovCisJ
CWdvdG8gbm9fbG9jazsKKwl9CisJU0NUUF9JTlBfSU5DUl9SRUYoc3RjYi0+c2N0cF9lcCk7CisJ
aWYgKChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dP
TkUpIHx8CisJICAgIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
U09DS0VUX0FMTEdPTkUpKSB7CisJCWdvdG8gb3V0OworCX0KKwlzbyA9IHN0Y2ItPnNjdHBfc29j
a2V0OworCWlmIChzbyA9PSBOVUxMKSB7CisJCWdvdG8gb3V0OworCX0KKwlhdG9taWNfYWRkX2lu
dCgmc3RjYi0+ZnJlZWRfYnlfc29yY3Zfc2luY2VsYXN0LCAqZnJlZWRfc29fZmFyKTsKKwkvKiBI
YXZlIHlvdSBoYXZlIGZyZWVkIGVub3VnaCB0byBsb29rICovCisJKmZyZWVkX3NvX2ZhciA9IDA7
CisJLyogWWVwLCBpdHMgd29ydGggYSBsb29rIGFuZCB0aGUgbG9jayBvdmVyaGVhZCAqLworCisJ
LyogRmlndXJlIG91dCB3aGF0IHRoZSByd25kIHdvdWxkIGJlICovCisJcnduZCA9IHNjdHBfY2Fs
Y19yd25kKHN0Y2IsICZzdGNiLT5hc29jKTsKKwlpZiAocnduZCA+PSBzdGNiLT5hc29jLm15X2xh
c3RfcmVwb3J0ZWRfcnduZCkgeworCQlkaWYgPSByd25kIC0gc3RjYi0+YXNvYy5teV9sYXN0X3Jl
cG9ydGVkX3J3bmQ7CisJfSBlbHNlIHsKKwkJZGlmID0gMDsKKwl9CisJaWYgKGRpZiA+PSByd25k
X3JlcSkgeworCQlpZiAoaG9sZF9ybG9jaykgeworCQkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soc3Rj
Yi0+c2N0cF9lcCk7CisJCQlyX3VubG9ja2VkID0gMTsKKwkJfQorCQlpZiAoc3RjYi0+YXNvYy5z
dGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKKwkJCS8qCisJCQkgKiBPbmUg
bGFzdCBjaGVjayBiZWZvcmUgd2UgYWxsb3cgdGhlIGd1eSBwb3NzaWJseQorCQkJICogdG8gZ2V0
IGluLiBUaGVyZSBpcyBhIHJhY2UsIHdoZXJlIHRoZSBndXkgaGFzIG5vdAorCQkJICogcmVhY2hl
ZCB0aGUgZ2F0ZS4gSW4gdGhhdCBjYXNlCisJCQkgKi8KKwkJCWdvdG8gb3V0OworCQl9CisJCVND
VFBfVENCX0xPQ0soc3RjYik7CisJCWlmIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9B
Qk9VVF9UT19CRV9GUkVFRCkgeworCQkJLyogTm8gcmVwb3J0cyBoZXJlICovCisJCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlTQ1RQX1NUQVRfSU5DUihzY3Rw
c193dV9zYWNrc19zZW50KTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorCQlORVRfRVBPQ0hfRU5URVIoZXQpOworI2VuZGlmCisJCXNjdHBfc2Vu
ZF9zYWNrKHN0Y2IsIFNDVFBfU09fTE9DS0VEKTsKKworCQlzY3RwX2NodW5rX291dHB1dChzdGNi
LT5zY3RwX2VwLCBzdGNiLAorCQkJCSAgU0NUUF9PVVRQVVRfRlJPTV9VU1JfUkNWRCwgU0NUUF9T
T19MT0NLRUQpOworCQkvKiBtYWtlIHN1cmUgbm8gdGltZXIgaXMgcnVubmluZyAqLworI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCU5FVF9FUE9D
SF9FWElUKGV0KTsKKyNlbmRpZgorCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX1JF
Q1YsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIE5VTEwsCisJCSAgICAgICAgICAgICAgICBTQ1RQX0ZS
T01fU0NUUFVUSUwgKyBTQ1RQX0xPQ182KTsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCX0g
ZWxzZSB7CisJCS8qIFVwZGF0ZSBob3cgbXVjaCB3ZSBoYXZlIHBlbmRpbmcgKi8KKwkJc3RjYi0+
ZnJlZWRfYnlfc29yY3Zfc2luY2VsYXN0ID0gZGlmOworCX0KKyBvdXQ6CisJaWYgKHNvICYmIHJf
dW5sb2NrZWQgJiYgaG9sZF9ybG9jaykgeworCQlTQ1RQX0lOUF9SRUFEX0xPQ0soc3RjYi0+c2N0
cF9lcCk7CisJfQorCisJU0NUUF9JTlBfREVDUl9SRUYoc3RjYi0+c2N0cF9lcCk7Cisgbm9fbG9j
azoKKwlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsKKwlyZXR1cm47Cit9
CisKK2ludAorc2N0cF9zb3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc28sCisgICAgc3RydWN0IHVp
byAqdWlvLAorICAgIHN0cnVjdCBtYnVmICoqbXAsCisgICAgc3RydWN0IHNvY2thZGRyICpmcm9t
LAorICAgIGludCBmcm9tbGVuLAorICAgIGludCAqbXNnX2ZsYWdzLAorICAgIHN0cnVjdCBzY3Rw
X3NuZHJjdmluZm8gKnNpbmZvLAorICAgIGludCBmaWxsaW5nX3NpbmZvKQoreworCS8qCisJICog
TVNHIGZsYWdzIHdlIHdpbGwgbG9vayBhdCBNU0dfRE9OVFdBSVQgLSBub24tYmxvY2tpbmcgSU8u
CisJICogTVNHX1BFRUsgLSBMb29rIGRvbid0IHRvdWNoIDotRCAob25seSB2YWxpZCB3aXRoIE9V
VCBtYnVmIGNvcHkKKwkgKiBtcD1OVUxMIHRodXMgdWlvIGlzIHRoZSBjb3B5IG1ldGhvZCB0byB1
c2VybGFuZCkgTVNHX1dBSVRBTEwgLSA/PworCSAqIE9uIHRoZSB3YXkgb3V0IHdlIG1heSBzZW5k
IG91dCBhbnkgY29tYmluYXRpb24gb2Y6CisJICogTVNHX05PVElGSUNBVElPTiBNU0dfRU9SCisJ
ICoKKwkgKi8KKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wID0gTlVMTDsKKwlzc2l6ZV90IG15X2xl
biA9IDA7CisJc3NpemVfdCBjcF9sZW4gPSAwOworCWludCBlcnJvciA9IDA7CisJc3RydWN0IHNj
dHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2wgPSBOVUxMLCAqY3RsID0gTlVMTCwgKm54dCA9IE5V
TEw7CisJc3RydWN0IG1idWYgKm0gPSBOVUxMOworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYiA9IE5V
TEw7CisJaW50IHdha2V1cF9yZWFkX3NvY2tldCA9IDA7CisJaW50IGZyZWVjbnRfYXBwbGllZCA9
IDA7CisJaW50IG91dF9mbGFncyA9IDAsIGluX2ZsYWdzID0gMDsKKwlpbnQgYmxvY2tfYWxsb3dl
ZCA9IDE7CisJdWludDMyX3QgZnJlZWRfc29fZmFyID0gMDsKKwlzc2l6ZV90IGNvcGllZF9zb19m
YXIgPSAwOworCWludCBpbl9lZW9yX21vZGUgPSAwOworCWludCBub19yY3ZfbmVlZGVkID0gMDsK
Kwl1aW50MzJfdCByd25kX3JlcSA9IDA7CisJaW50IGhvbGRfc2Jsb2NrID0gMDsKKwlpbnQgaG9s
ZF9ybG9jayA9IDA7CisJc3NpemVfdCBzbGVuID0gMDsKKwl1aW50MzJfdCBoZWxkX2xlbmd0aCA9
IDA7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KwlpbnQgc29ja2J1Zl9sb2NrID0gMDsKKyNlbmRpZgorCisJaWYgKHVpbyA9PSBOVUxMKSB7CisJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUws
IEVJTlZBTCk7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisKKwlpZiAobXNnX2ZsYWdzKSB7CisJ
CWluX2ZsYWdzID0gKm1zZ19mbGFnczsKKwkJaWYgKGluX2ZsYWdzICYgTVNHX1BFRUspCisJCQlT
Q1RQX1NUQVRfSU5DUihzY3Rwc19yZWFkX3BlZWtzKTsKKwl9IGVsc2UgeworCQlpbl9mbGFncyA9
IDA7CisJfQorI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkKKwlzbGVuID0gdWlvLT51aW9fcmVzaWQ7Cisj
ZWxzZQorCXNsZW4gPSB1aW9fcmVzaWQodWlvKTsKKyNlbmRpZgorI2Vsc2UKKwlzbGVuID0gdWlv
LT51aW9fcmVzaWQ7CisjZW5kaWYKKworCS8qIFB1bGwgaW4gYW5kIHNldCB1cCBvdXIgaW50IGZs
YWdzICovCisJaWYgKGluX2ZsYWdzICYgTVNHX09PQikgeworCQkvKiBPdXQgb2YgYmFuZCdzIE5P
VCBzdXBwb3J0ZWQgKi8KKwkJcmV0dXJuIChFT1BOT1RTVVBQKTsKKwl9CisJaWYgKChpbl9mbGFn
cyAmIE1TR19QRUVLKSAmJiAobXAgIT0gTlVMTCkpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsKKwkJcmV0dXJuIChF
SU5WQUwpOworCX0KKwlpZiAoKGluX2ZsYWdzICYgKE1TR19ET05UV0FJVAorI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkgfCBNU0dfTkJJTwor
I2VuZGlmCisJCSAgICAgKSkgfHwKKwkgICAgU0NUUF9TT19JU19OQklPKHNvKSkgeworCQlibG9j
a19hbGxvd2VkID0gMDsKKwl9CisJLyogc2V0dXAgdGhlIGVuZHBvaW50ICovCisJaW5wID0gKHN0
cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKKwlpZiAoaW5wID09IE5VTEwpIHsKKwkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVG
QVVMVCk7CisJCXJldHVybiAoRUZBVUxUKTsKKwl9CisJcnduZF9yZXEgPSAoU0NUUF9TQl9MSU1J
VF9SQ1Yoc28pID4+IFNDVFBfUldORF9ISVdBVF9TSElGVCk7CisJLyogTXVzdCBiZSBhdCBsZWFz
dCBhIE1UVSdzIHdvcnRoICovCisJaWYgKHJ3bmRfcmVxIDwgU0NUUF9NSU5fUldORCkKKwkJcndu
ZF9yZXEgPSBTQ1RQX01JTl9SV05EOworCWluX2Vlb3JfbW9kZSA9IHNjdHBfaXNfZmVhdHVyZV9v
bihpbnAsIFNDVFBfUENCX0ZMQUdTX0VYUExJQ0lUX0VPUik7CisJaWYgKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfUkVDVl9SV05EX0xPR0dJTkdfRU5BQkxFKSB7
CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYg
ZGVmaW5lZChBUFBMRV9MRU9QQVJEKQorCQlzY3RwX21pc2NfaW50cyhTQ1RQX1NPUkVDVl9FTlRF
UiwKKwkJCSAgICAgICByd25kX3JlcSwgaW5fZWVvcl9tb2RlLCBzby0+c29fcmN2LnNiX2NjLCB1
aW8tPnVpb19yZXNpZCk7CisjZWxzZQorCQlzY3RwX21pc2NfaW50cyhTQ1RQX1NPUkVDVl9FTlRF
UiwKKwkJCSAgICAgICByd25kX3JlcSwgaW5fZWVvcl9tb2RlLCBzby0+c29fcmN2LnNiX2NjLCB1
aW9fcmVzaWQodWlvKSk7CisjZW5kaWYKKyNlbHNlCisJCXNjdHBfbWlzY19pbnRzKFNDVFBfU09S
RUNWX0VOVEVSLAorCQkJICAgICAgIHJ3bmRfcmVxLCBpbl9lZW9yX21vZGUsIHNvLT5zb19yY3Yu
c2JfY2MsICh1aW50MzJfdCl1aW8tPnVpb19yZXNpZCk7CisjZW5kaWYKKwl9CisjaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQorCVNPQ0tCVUZfTE9DSygmc28tPnNvX3Jjdik7CisJaG9sZF9zYmxv
Y2sgPSAxOworI2VuZGlmCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVs
KSAmU0NUUF9SRUNWX1JXTkRfTE9HR0lOR19FTkFCTEUpIHsKKyNpZiBkZWZpbmVkKF9fQVBQTEVf
XykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQp
CisJCXNjdHBfbWlzY19pbnRzKFNDVFBfU09SRUNWX0VOVEVSUEwsCisJCQkgICAgICAgcnduZF9y
ZXEsIGJsb2NrX2FsbG93ZWQsIHNvLT5zb19yY3Yuc2JfY2MsIHVpby0+dWlvX3Jlc2lkKTsKKyNl
bHNlCisJCXNjdHBfbWlzY19pbnRzKFNDVFBfU09SRUNWX0VOVEVSUEwsCisJCQkgICAgICAgcndu
ZF9yZXEsIGJsb2NrX2FsbG93ZWQsIHNvLT5zb19yY3Yuc2JfY2MsIHVpb19yZXNpZCh1aW8pKTsK
KyNlbmRpZgorI2Vsc2UKKwkJc2N0cF9taXNjX2ludHMoU0NUUF9TT1JFQ1ZfRU5URVJQTCwKKwkJ
CSAgICAgICByd25kX3JlcSwgYmxvY2tfYWxsb3dlZCwgc28tPnNvX3Jjdi5zYl9jYywgKHVpbnQz
Ml90KXVpby0+dWlvX3Jlc2lkKTsKKyNlbmRpZgorCX0KKworI2lmIGRlZmluZWQoX19BUFBMRV9f
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWVycm9yID0gc2Jsb2NrKCZzby0+c29fcmN2
LCBTQkxPQ0tXQUlUKGluX2ZsYWdzKSk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWVycm9yID0gc2Jsb2NrKCZzby0+c29fcmN2
LCAoYmxvY2tfYWxsb3dlZCA/IFNCTF9XQUlUIDogMCkpOworI2VuZGlmCisJaWYgKGVycm9yKSB7
CisJCWdvdG8gcmVsZWFzZV91bmxvY2tlZDsKKwl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlzb2NrYnVmX2xvY2sgPSAxOworI2VuZGlmCisg
cmVzdGFydDoKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaWYgKGhvbGRfc2Jsb2NrID09
IDApIHsKKwkJU09DS0JVRl9MT0NLKCZzby0+c29fcmN2KTsKKwkJaG9sZF9zYmxvY2sgPSAxOwor
CX0KKyNlbmRpZgorI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorCXNidW5sb2NrKCZzby0+c29fcmN2LCAxKTsKKyNlbmRpZgorCisgcmVzdGFydF9ub3Ni
bG9ja3M6CisJaWYgKGhvbGRfc2Jsb2NrID09IDApIHsKKwkJU09DS0JVRl9MT0NLKCZzby0+c29f
cmN2KTsKKwkJaG9sZF9zYmxvY2sgPSAxOworCX0KKwlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB8fAorCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpKSB7CisJCWdvdG8gb3V0OworCX0KKyNpZiAoZGVm
aW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfV0lOMzIpKSAmJiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorCWlmICgoc28tPnNvX3Jjdi5zYl9zdGF0ZSAmIFNCU19DQU5UUkNWTU9SRSkgJiYg
KHNvLT5zb19yY3Yuc2JfY2MgPT0gMCkpIHsKKyNlbHNlCisJaWYgKChzby0+c29fc3RhdGUgJiBT
U19DQU5UUkNWTU9SRSkgJiYgKHNvLT5zb19yY3Yuc2JfY2MgPT0gMCkpIHsKKyNlbmRpZgorCQlp
ZiAoc28tPnNvX2Vycm9yKSB7CisJCQllcnJvciA9IHNvLT5zb19lcnJvcjsKKwkJCWlmICgoaW5f
ZmxhZ3MgJiBNU0dfUEVFSykgPT0gMCkKKwkJCQlzby0+c29fZXJyb3IgPSAwOworCQkJZ290byBv
dXQ7CisJCX0gZWxzZSB7CisJCQlpZiAoc28tPnNvX3Jjdi5zYl9jYyA9PSAwKSB7CisJCQkJLyog
aW5kaWNhdGUgRU9GICovCisJCQkJZXJyb3IgPSAwOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9
CisJfQorCWlmIChzby0+c29fcmN2LnNiX2NjIDw9IGhlbGRfbGVuZ3RoKSB7CisJCWlmIChzby0+
c29fZXJyb3IpIHsKKwkJCWVycm9yID0gc28tPnNvX2Vycm9yOworCQkJaWYgKChpbl9mbGFncyAm
IE1TR19QRUVLKSA9PSAwKSB7CisJCQkJc28tPnNvX2Vycm9yID0gMDsKKwkJCX0KKwkJCWdvdG8g
b3V0OworCQl9CisJCWlmICgoc28tPnNvX3Jjdi5zYl9jYyA9PSAwKSAmJgorCQkgICAgKChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkgICAgIChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSkpIHsKKwkJCWlmICgoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEKSA9PSAwKSB7CisJCQkJLyogRm9y
IGFjdGl2ZSBvcGVuIHNpZGUgY2xlYXIgZmxhZ3MgZm9yIHJlLXVzZQorCQkJCSAqIHBhc3NpdmUg
b3BlbiBpcyBibG9ja2VkIGJ5IGNvbm5lY3QuCisJCQkJICovCisJCQkJaWYgKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX1dBU19BQk9SVEVEKSB7CisJCQkJCS8qIFlvdSB3ZXJlIGFi
b3J0ZWQsIHBhc3NpdmUgc2lkZSBhbHdheXMgaGl0cyBoZXJlICovCisJCQkJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVDT05OUkVTRVQp
OworCQkJCQllcnJvciA9IEVDT05OUkVTRVQ7CisJCQkJfQorCQkJCXNvLT5zb19zdGF0ZSAmPSB+
KFNTX0lTQ09OTkVDVElORyB8CisJCQkJCQkgIFNTX0lTRElTQ09OTkVDVElORyB8CisJCQkJCQkg
IFNTX0lTQ09ORklSTUlORyB8CisJCQkJCQkgIFNTX0lTQ09OTkVDVEVEKTsKKwkJCQlpZiAoZXJy
b3IgPT0gMCkgeworCQkJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1dB
U19DT05ORUNURUQpID09IDApIHsKKwkJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVOT1RDT05OKTsKKwkJCQkJCWVycm9yID0gRU5P
VENPTk47CisJCQkJCX0KKwkJCQl9CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKwkJaWYgKGJs
b2NrX2FsbG93ZWQpIHsKKwkJCWVycm9yID0gc2J3YWl0KCZzby0+c29fcmN2KTsKKwkJCWlmIChl
cnJvcikgeworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJaGVsZF9sZW5ndGggPSAwOworCQkJZ290
byByZXN0YXJ0X25vc2Jsb2NrczsKKwkJfSBlbHNlIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVXT1VMREJMT0NLKTsKKwkJCWVy
cm9yID0gRVdPVUxEQkxPQ0s7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwlpZiAoaG9sZF9zYmxv
Y2sgPT0gMSkgeworCQlTT0NLQlVGX1VOTE9DSygmc28tPnNvX3Jjdik7CisJCWhvbGRfc2Jsb2Nr
ID0gMDsKKwl9CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisJZXJyb3IgPSBzYmxvY2soJnNvLT5zb19yY3YsIFNCTE9DS1dBSVQoaW5fZmxhZ3MpKTsK
KyNlbmRpZgorCS8qIHdlIHBvc3NpYmx5IGhhdmUgZGF0YSB3ZSBjYW4gcmVhZCAqLworCS8qc2Ff
aWdub3JlIEZSRUVEX01FTU9SWSovCisJY29udHJvbCA9IFRBSUxRX0ZJUlNUKCZpbnAtPnJlYWRf
cXVldWUpOworCWlmIChjb250cm9sID09IE5VTEwpIHsKKwkJLyogVGhpcyBjb3VsZCBiZSBoYXBw
ZW5pbmcgc2luY2UKKwkJICogdGhlIGFwcGVuZGVyIGRpZCB0aGUgaW5jcmVtZW50IGJ1dCBhcyBu
b3QKKwkJICogeWV0IGRpZCB0aGUgdGFpbHEgaW5zZXJ0IG9udG8gdGhlIHJlYWRfcXVldWUKKwkJ
ICovCisJCWlmIChob2xkX3Jsb2NrID09IDApIHsKKwkJCVNDVFBfSU5QX1JFQURfTE9DSyhpbnAp
OworCQl9CisJCWNvbnRyb2wgPSBUQUlMUV9GSVJTVCgmaW5wLT5yZWFkX3F1ZXVlKTsKKwkJaWYg
KChjb250cm9sID09IE5VTEwpICYmIChzby0+c29fcmN2LnNiX2NjICE9IDApKSB7CisjaWZkZWYg
SU5WQVJJQU5UUworCQkJcGFuaWMoIkh1aCwgaXRzIG5vbiB6ZXJvIGFuZCBub3RoaW5nIG9uIGNv
bnRyb2w/Iik7CisjZW5kaWYKKwkJCXNvLT5zb19yY3Yuc2JfY2MgPSAwOworCQl9CisJCVNDVFBf
SU5QX1JFQURfVU5MT0NLKGlucCk7CisJCWhvbGRfcmxvY2sgPSAwOworCQlnb3RvIHJlc3RhcnQ7
CisJfQorCisJaWYgKChjb250cm9sLT5sZW5ndGggPT0gMCkgJiYKKwkgICAgKGNvbnRyb2wtPmRv
X25vdF9yZWZfc3RjYikpIHsKKwkJLyogQ2xlYW4gdXAgY29kZSBmb3IgZnJlZWluZyBhc3NvYyB0
aGF0IGxlZnQgYmVoaW5kIGEgcGRhcGkuLgorCQkgKiBtYXliZSBhIHBlZXIgaW4gRUVPUiB0aGF0
IGp1c3QgY2xvc2VkIGFmdGVyIHNlbmRpbmcgYW5kCisJCSAqIG5ldmVyIGluZGljYXRlZCBhIEVP
Ui4KKwkJICovCisJCWlmIChob2xkX3Jsb2NrID09IDApIHsKKwkJCWhvbGRfcmxvY2sgPSAxOwor
CQkJU0NUUF9JTlBfUkVBRF9MT0NLKGlucCk7CisJCX0KKwkJY29udHJvbC0+aGVsZF9sZW5ndGgg
PSAwOworCQlpZiAoY29udHJvbC0+ZGF0YSkgeworCQkJLyogSG1tIHRoZXJlIGlzIGRhdGEgaGVy
ZSAuLiBmaXggKi8KKwkJCXN0cnVjdCBtYnVmICptX3RtcDsKKwkJCWludCBjbnQgPSAwOworCQkJ
bV90bXAgPSBjb250cm9sLT5kYXRhOworCQkJd2hpbGUgKG1fdG1wKSB7CisJCQkJY250ICs9IFND
VFBfQlVGX0xFTihtX3RtcCk7CisJCQkJaWYgKFNDVFBfQlVGX05FWFQobV90bXApID09IE5VTEwp
IHsKKwkJCQkJY29udHJvbC0+dGFpbF9tYnVmID0gbV90bXA7CisJCQkJCWNvbnRyb2wtPmVuZF9h
ZGRlZCA9IDE7CisJCQkJfQorCQkJCW1fdG1wID0gU0NUUF9CVUZfTkVYVChtX3RtcCk7CisJCQl9
CisJCQljb250cm9sLT5sZW5ndGggPSBjbnQ7CisJCX0gZWxzZSB7CisJCQkvKiByZW1vdmUgaXQg
Ki8KKwkJCVRBSUxRX1JFTU9WRSgmaW5wLT5yZWFkX3F1ZXVlLCBjb250cm9sLCBuZXh0KTsKKwkJ
CS8qIEFkZCBiYWNrIGFueSBoaWRkZW5kIGRhdGEgKi8KKwkJCXNjdHBfZnJlZV9yZW1vdGVfYWRk
cihjb250cm9sLT53aG9Gcm9tKTsKKwkJCXNjdHBfZnJlZV9hX3JlYWRxKHN0Y2IsIGNvbnRyb2wp
OworCQl9CisJCWlmIChob2xkX3Jsb2NrKSB7CisJCQlob2xkX3Jsb2NrID0gMDsKKwkJCVNDVFBf
SU5QX1JFQURfVU5MT0NLKGlucCk7CisJCX0KKwkJZ290byByZXN0YXJ0OworCX0KKwlpZiAoKGNv
bnRyb2wtPmxlbmd0aCA9PSAwKSAmJgorCSAgICAoY29udHJvbC0+ZW5kX2FkZGVkID09IDEpKSB7
CisJCS8qIERvIHdlIGFsc28gbmVlZCB0byBjaGVjayBmb3IgKGNvbnRyb2wtPnBkYXBpX2Fib3J0
ZWQgPT0gMSk/ICovCisJCWlmIChob2xkX3Jsb2NrID09IDApIHsKKwkJCWhvbGRfcmxvY2sgPSAx
OworCQkJU0NUUF9JTlBfUkVBRF9MT0NLKGlucCk7CisJCX0KKwkJVEFJTFFfUkVNT1ZFKCZpbnAt
PnJlYWRfcXVldWUsIGNvbnRyb2wsIG5leHQpOworCQlpZiAoY29udHJvbC0+ZGF0YSkgeworI2lm
ZGVmIElOVkFSSUFOVFMKKwkJCXBhbmljKCJjb250cm9sLT5kYXRhIG5vdCBudWxsIGJ1dCBjb250
cm9sLT5sZW5ndGggPT0gMCIpOworI2Vsc2UKKwkJCVNDVFBfUFJJTlRGKCJTdHJhbmdlLCBkYXRh
IGxlZnQgaW4gdGhlIGNvbnRyb2wgYnVmZmVyLiBDbGVhbmluZyB1cC5cbiIpOworCQkJc2N0cF9t
X2ZyZWVtKGNvbnRyb2wtPmRhdGEpOworCQkJY29udHJvbC0+ZGF0YSA9IE5VTEw7CisjZW5kaWYK
KwkJfQorCQlpZiAoY29udHJvbC0+YXV4X2RhdGEpIHsKKwkJCXNjdHBfbV9mcmVlIChjb250cm9s
LT5hdXhfZGF0YSk7CisJCQljb250cm9sLT5hdXhfZGF0YSA9IE5VTEw7CisJCX0KKyNpZmRlZiBJ
TlZBUklBTlRTCisJCWlmIChjb250cm9sLT5vbl9zdHJtX3EpIHsKKwkJCXBhbmljKCJBYm91dCB0
byBmcmVlIGN0bDolcCBzbzolcCBhbmQgaXRzIGluICVkIiwKKwkJCSAgICAgIGNvbnRyb2wsIHNv
LCBjb250cm9sLT5vbl9zdHJtX3EpOworCQl9CisjZW5kaWYKKwkJc2N0cF9mcmVlX3JlbW90ZV9h
ZGRyKGNvbnRyb2wtPndob0Zyb20pOworCQlzY3RwX2ZyZWVfYV9yZWFkcShzdGNiLCBjb250cm9s
KTsKKwkJaWYgKGhvbGRfcmxvY2spIHsKKwkJCWhvbGRfcmxvY2sgPSAwOworCQkJU0NUUF9JTlBf
UkVBRF9VTkxPQ0soaW5wKTsKKwkJfQorCQlnb3RvIHJlc3RhcnQ7CisJfQorCWlmIChjb250cm9s
LT5sZW5ndGggPT0gMCkgeworCQlpZiAoKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENC
X0ZMQUdTX0ZSQUdfSU5URVJMRUFWRSkpICYmCisJCSAgICAoZmlsbGluZ19zaW5mbykpIHsKKwkJ
CS8qIGZpbmQgYSBtb3JlIHN1aXRhYmxlIG9uZSB0aGVuIHRoaXMgKi8KKwkJCWN0bCA9IFRBSUxR
X05FWFQoY29udHJvbCwgbmV4dCk7CisJCQl3aGlsZSAoY3RsKSB7CisJCQkJaWYgKChjdGwtPnN0
Y2IgIT0gY29udHJvbC0+c3RjYikgJiYgKGN0bC0+bGVuZ3RoKSAmJgorCQkJCSAgICAoY3RsLT5z
b21lX3Rha2VuIHx8CisJCQkJICAgICAoY3RsLT5zcGVjX2ZsYWdzICYgTV9OT1RJRklDQVRJT04p
IHx8CisJCQkJICAgICAoKGN0bC0+ZG9fbm90X3JlZl9zdGNiID09IDApICYmCisJCQkJICAgICAg
KGN0bC0+c3RjYi0+YXNvYy5zdHJtaW5bY3RsLT5zaW5mb19zdHJlYW1dLmRlbGl2ZXJ5X3N0YXJ0
ZWQgPT0gMCkpKQorCQkJCQkpIHsKKwkJCQkJLyotCisJCQkJCSAqIElmIHdlIGhhdmUgYSBkaWZm
ZXJlbnQgVENCIG5leHQsIGFuZCB0aGVyZSBpcyBkYXRhCisJCQkJCSAqIHByZXNlbnQuIElmIHdl
IGhhdmUgYWxyZWFkeSB0YWtlbiBzb21lIChwZGFwaSksIE9SIHdlIGNhbgorCQkJCQkgKiByZWYg
dGhlIHRjYiBhbmQgbm8gZGVsaXZlcnkgYXMgc3RhcnRlZCBvbiB0aGlzIHN0cmVhbSwgd2UKKwkJ
CQkJICogdGFrZSBpdC4gTm90ZSB3ZSBhbGxvdyBhIG5vdGlmaWNhdGlvbiBvbiBhIGRpZmZlcmVu
dAorCQkJCQkgKiBhc3NvYyB0byBiZSBkZWxpdmVyZWQuLgorCQkJCQkgKi8KKwkJCQkJY29udHJv
bCA9IGN0bDsKKwkJCQkJZ290byBmb3VuZF9vbmU7CisJCQkJfSBlbHNlIGlmICgoc2N0cF9pc19m
ZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfSU5URVJMRUFWRV9TVFJNUykpICYmCisJCQkJ
CSAgIChjdGwtPmxlbmd0aCkgJiYKKwkJCQkJICAgKChjdGwtPnNvbWVfdGFrZW4pIHx8CisJCQkJ
CSAgICAoKGN0bC0+ZG9fbm90X3JlZl9zdGNiID09IDApICYmCisJCQkJCSAgICAgKChjdGwtPnNw
ZWNfZmxhZ3MgJiBNX05PVElGSUNBVElPTikgPT0gMCkgJiYKKwkJCQkJICAgICAoY3RsLT5zdGNi
LT5hc29jLnN0cm1pbltjdGwtPnNpbmZvX3N0cmVhbV0uZGVsaXZlcnlfc3RhcnRlZCA9PSAwKSkp
KSB7CisJCQkJCS8qLQorCQkJCQkgKiBJZiB3ZSBoYXZlIHRoZSBzYW1lIHRjYiwgYW5kIHRoZXJl
IGlzIGRhdGEgcHJlc2VudCwgYW5kIHdlCisJCQkJCSAqIGhhdmUgdGhlIHN0cm0gaW50ZXJsZWF2
ZSBmZWF0dXJlIHByZXNlbnQuIFRoZW4gaWYgd2UgaGF2ZQorCQkJCQkgKiB0YWtlbiBzb21lIChw
ZGFwaSkgb3Igd2UgY2FuIHJlZmVyIHRvIHRodCB0Y2IgQU5EIHdlIGhhdmUKKwkJCQkJICogbm90
IHN0YXJ0ZWQgYSBkZWxpdmVyeSBmb3IgdGhpcyBzdHJlYW0sIHdlIGNhbiB0YWtlIGl0LgorCQkJ
CQkgKiBOb3RlIHdlIGRvIE5PVCBhbGxvdyBhIG5vdGlmaWNhaXRvbiBvbiB0aGUgc2FtZSBhc3Nv
YyB0bworCQkJCQkgKiBiZSBkZWxpdmVyZWQuCisJCQkJCSAqLworCQkJCQljb250cm9sID0gY3Rs
OworCQkJCQlnb3RvIGZvdW5kX29uZTsKKwkJCQl9CisJCQkJY3RsID0gVEFJTFFfTkVYVChjdGws
IG5leHQpOworCQkJfQorCQl9CisJCS8qCisJCSAqIGlmIHdlIHJlYWNoIGhlcmUsIG5vdCBzdWl0
YWJsZSByZXBsYWNlbWVudCBpcyBhdmFpbGFibGUKKwkJICogPG9yPiBmcmFnbWVudCBpbnRlcmxl
YXZlIGlzIE5PVCBvbi4gU28gc3R1ZmYgdGhlIHNiX2NjCisJCSAqIGludG8gdGhlIG91ciBoZWxk
IGNvdW50LCBhbmQgaXRzIHRpbWUgdG8gc2xlZXAgYWdhaW4uCisJCSAqLworCQloZWxkX2xlbmd0
aCA9IHNvLT5zb19yY3Yuc2JfY2M7CisJCWNvbnRyb2wtPmhlbGRfbGVuZ3RoID0gc28tPnNvX3Jj
di5zYl9jYzsKKwkJZ290byByZXN0YXJ0OworCX0KKwkvKiBDbGVhciB0aGUgaGVsZCBsZW5ndGgg
c2luY2UgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlYWQgKi8KKwljb250cm9sLT5oZWxkX2xlbmd0
aCA9IDA7CisgZm91bmRfb25lOgorCS8qCisJICogSWYgd2UgcmVhY2ggaGVyZSwgY29udHJvbCBo
YXMgYSBzb21lIGRhdGEgZm9yIHVzIHRvIHJlYWQgb2ZmLgorCSAqIE5vdGUgdGhhdCBzdGNiIENP
VUxEIGJlIE5VTEwuCisJICovCisJaWYgKGhvbGRfcmxvY2sgPT0gMCkgeworCQlob2xkX3Jsb2Nr
ID0gMTsKKwkJU0NUUF9JTlBfUkVBRF9MT0NLKGlucCk7CisJfQorCWNvbnRyb2wtPnNvbWVfdGFr
ZW4rKzsKKwlzdGNiID0gY29udHJvbC0+c3RjYjsKKwlpZiAoc3RjYikgeworCQlpZiAoKGNvbnRy
b2wtPmRvX25vdF9yZWZfc3RjYiA9PSAwKSAmJgorCQkgICAgKHN0Y2ItPmFzb2Muc3RhdGUgJiBT
Q1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEKSkgeworCQkJaWYgKGZyZWVjbnRfYXBwbGllZCA9
PSAwKQorCQkJCXN0Y2IgPSBOVUxMOworCQl9IGVsc2UgaWYgKGNvbnRyb2wtPmRvX25vdF9yZWZf
c3RjYiA9PSAwKSB7CisJCQkvKiB5b3UgY2FuJ3QgZnJlZSBpdCBvbiBtZSBwbGVhc2UgKi8KKwkJ
CS8qCisJCQkgKiBUaGUgbG9jayBvbiB0aGUgc29ja2V0IGJ1ZmZlciBwcm90ZWN0cyB1cyBzbyB0
aGUKKwkJCSAqIGZyZWUgY29kZSB3aWxsIHN0b3AuIEJ1dCBzaW5jZSB3ZSB1c2VkIHRoZSBzb2Nr
ZXRidWYKKwkJCSAqIGxvY2sgYW5kIHRoZSBzZW5kZXIgdXNlcyB0aGUgdGNiX2xvY2sgdG8gaW5j
cmVtZW50LAorCQkJICogd2UgbmVlZCB0byB1c2UgdGhlIGF0b21pYyBhZGQgdG8gdGhlIHJlZmNu
dAorCQkJICovCisJCQlpZiAoZnJlZWNudF9hcHBsaWVkKSB7CisjaWZkZWYgSU5WQVJJQU5UUwor
CQkJCXBhbmljKCJyZWZjbnQgYWxyZWFkeSBpbmNyZW1lbnRlZCIpOworI2Vsc2UKKwkJCQlTQ1RQ
X1BSSU5URigicmVmY250IGFscmVhZHkgaW5jcmVtZW50ZWQ/XG4iKTsKKyNlbmRpZgorCQkJfSBl
bHNlIHsKKwkJCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJCWZy
ZWVjbnRfYXBwbGllZCA9IDE7CisJCQl9CisJCQkvKgorCQkJICogU2V0dXAgdG8gcmVtZW1iZXIg
aG93IG11Y2ggd2UgaGF2ZSBub3QgeWV0IHRvbGQKKwkJCSAqIHRoZSBwZWVyIG91ciByd25kIGhh
cyBvcGVuZWQgdXAuIE5vdGUgd2UgZ3JhYgorCQkJICogdGhlIHZhbHVlIGZyb20gdGhlIHRjYiBm
cm9tIGxhc3QgdGltZS4KKwkJCSAqIE5vdGUgdG9vIHRoYXQgc2FjayBzZW5kaW5nIGNsZWFycyB0
aGlzIHdoZW4gYSBzYWNrCisJCQkgKiBpcyBzZW50LCB3aGljaCBpcyBmaW5lLiBPbmNlIHdlIGhp
dCB0aGUgcnduZF9yZXEsCisJCQkgKiB3ZSB0aGVuIHdpbGwgZ28gdG8gdGhlIHNjdHBfdXNlcl9y
Y3ZkKCkgdGhhdCB3aWxsCisJCQkgKiBub3QgbG9jayB1bnRpbCBpdCBLTk9XcyBpdCBNVVNUIHNl
bmQgYSBXVVAtU0FDSy4KKwkJCSAqLworCQkJZnJlZWRfc29fZmFyID0gKHVpbnQzMl90KXN0Y2It
PmZyZWVkX2J5X3NvcmN2X3NpbmNlbGFzdDsKKwkJCXN0Y2ItPmZyZWVkX2J5X3NvcmN2X3NpbmNl
bGFzdCA9IDA7CisJCX0KKwl9CisJaWYgKHN0Y2IgJiYKKwkgICAgKChjb250cm9sLT5zcGVjX2Zs
YWdzICYgTV9OT1RJRklDQVRJT04pID09IDApICYmCisJICAgIGNvbnRyb2wtPmRvX25vdF9yZWZf
c3RjYiA9PSAwKSB7CisJCXN0Y2ItPmFzb2Muc3RybWluW2NvbnRyb2wtPnNpbmZvX3N0cmVhbV0u
ZGVsaXZlcnlfc3RhcnRlZCA9IDE7CisJfQorCisJLyogRmlyc3QgbGV0cyBnZXQgb2ZmIHRoZSBz
aW5mbyBhbmQgc29ja2FkZHIgaW5mbyAqLworCWlmICgoc2luZm8gIT0gTlVMTCkgJiYgKGZpbGxp
bmdfc2luZm8gIT0gMCkpIHsKKwkJc2luZm8tPnNpbmZvX3N0cmVhbSA9IGNvbnRyb2wtPnNpbmZv
X3N0cmVhbTsKKwkJc2luZm8tPnNpbmZvX3NzbiA9ICh1aW50MTZfdCljb250cm9sLT5taWQ7CisJ
CXNpbmZvLT5zaW5mb19mbGFncyA9IGNvbnRyb2wtPnNpbmZvX2ZsYWdzOworCQlzaW5mby0+c2lu
Zm9fcHBpZCA9IGNvbnRyb2wtPnNpbmZvX3BwaWQ7CisJCXNpbmZvLT5zaW5mb19jb250ZXh0ID1j
b250cm9sLT5zaW5mb19jb250ZXh0OworCQlzaW5mby0+c2luZm9fdGltZXRvbGl2ZSA9IGNvbnRy
b2wtPnNpbmZvX3RpbWV0b2xpdmU7CisJCXNpbmZvLT5zaW5mb190c24gPSBjb250cm9sLT5zaW5m
b190c247CisJCXNpbmZvLT5zaW5mb19jdW10c24gPSBjb250cm9sLT5zaW5mb19jdW10c247CisJ
CXNpbmZvLT5zaW5mb19hc3NvY19pZCA9IGNvbnRyb2wtPnNpbmZvX2Fzc29jX2lkOworCQlueHQg
PSBUQUlMUV9ORVhUKGNvbnRyb2wsIG5leHQpOworCQlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlu
cCwgU0NUUF9QQ0JfRkxBR1NfRVhUX1JDVklORk8pIHx8CisJCSAgICBzY3RwX2lzX2ZlYXR1cmVf
b24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWTlhUSU5GTykpIHsKKwkJCXN0cnVjdCBzY3RwX2V4
dHJjdmluZm8gKnNfZXh0cmE7CisJCQlzX2V4dHJhID0gKHN0cnVjdCBzY3RwX2V4dHJjdmluZm8g
KilzaW5mbzsKKwkJCWlmICgobnh0KSAmJgorCQkJICAgIChueHQtPmxlbmd0aCkpIHsKKwkJCQlz
X2V4dHJhLT5zZXJpbmZvX25leHRfZmxhZ3MgPSBTQ1RQX05FWFRfTVNHX0FWQUlMOworCQkJCWlm
IChueHQtPnNpbmZvX2ZsYWdzICYgU0NUUF9VTk9SREVSRUQpIHsKKwkJCQkJc19leHRyYS0+c2Vy
aW5mb19uZXh0X2ZsYWdzIHw9IFNDVFBfTkVYVF9NU0dfSVNfVU5PUkRFUkVEOworCQkJCX0KKwkJ
CQlpZiAobnh0LT5zcGVjX2ZsYWdzICYgTV9OT1RJRklDQVRJT04pIHsKKwkJCQkJc19leHRyYS0+
c2VyaW5mb19uZXh0X2ZsYWdzIHw9IFNDVFBfTkVYVF9NU0dfSVNfTk9USUZJQ0FUSU9OOworCQkJ
CX0KKwkJCQlzX2V4dHJhLT5zZXJpbmZvX25leHRfYWlkID0gbnh0LT5zaW5mb19hc3NvY19pZDsK
KwkJCQlzX2V4dHJhLT5zZXJpbmZvX25leHRfbGVuZ3RoID0gbnh0LT5sZW5ndGg7CisJCQkJc19l
eHRyYS0+c2VyaW5mb19uZXh0X3BwaWQgPSBueHQtPnNpbmZvX3BwaWQ7CisJCQkJc19leHRyYS0+
c2VyaW5mb19uZXh0X3N0cmVhbSA9IG54dC0+c2luZm9fc3RyZWFtOworCQkJCWlmIChueHQtPnRh
aWxfbWJ1ZiAhPSBOVUxMKSB7CisJCQkJCWlmIChueHQtPmVuZF9hZGRlZCkgeworCQkJCQkJc19l
eHRyYS0+c2VyaW5mb19uZXh0X2ZsYWdzIHw9IFNDVFBfTkVYVF9NU0dfSVNDT01QTEVURTsKKwkJ
CQkJfQorCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogd2UgZXhwbGljaXRseSAwIHRoaXMsIHNp
bmNlIHRoZSBtZW1jcHkgZ290CisJCQkJICogc29tZSBvdGhlciB0aGluZ3MgYmV5b25kIHRoZSBv
bGRlciBzaW5mb18KKwkJCQkgKiB0aGF0IGlzIG9uIHRoZSBjb250cm9sJ3Mgc3RydWN0dXJlIDot
RAorCQkJCSAqLworCQkJCW54dCA9IE5VTEw7CisJCQkJc19leHRyYS0+c2VyaW5mb19uZXh0X2Zs
YWdzID0gU0NUUF9OT19ORVhUX01TRzsKKwkJCQlzX2V4dHJhLT5zZXJpbmZvX25leHRfYWlkID0g
MDsKKwkJCQlzX2V4dHJhLT5zZXJpbmZvX25leHRfbGVuZ3RoID0gMDsKKwkJCQlzX2V4dHJhLT5z
ZXJpbmZvX25leHRfcHBpZCA9IDA7CisJCQkJc19leHRyYS0+c2VyaW5mb19uZXh0X3N0cmVhbSA9
IDA7CisJCQl9CisJCX0KKwkJLyoKKwkJICogdXBkYXRlIG9mZiB0aGUgcmVhbCBjdXJyZW50IGN1
bS1hY2ssIGlmIHdlIGhhdmUgYW4gc3RjYi4KKwkJICovCisJCWlmICgoY29udHJvbC0+ZG9fbm90
X3JlZl9zdGNiID09IDApICYmIHN0Y2IpCisJCQlzaW5mby0+c2luZm9fY3VtdHNuID0gc3RjYi0+
YXNvYy5jdW11bGF0aXZlX3RzbjsKKwkJLyoKKwkJICogbWFzayBvZmYgdGhlIGhpZ2ggYml0cywg
d2Uga2VlcCB0aGUgYWN0dWFsIGNodW5rIGJpdHMgaW4KKwkJICogdGhlcmUuCisJCSAqLworCQlz
aW5mby0+c2luZm9fZmxhZ3MgJj0gMHgwMGZmOworCQlpZiAoKGNvbnRyb2wtPnNpbmZvX2ZsYWdz
ID4+IDgpICYgU0NUUF9EQVRBX1VOT1JERVJFRCkgeworCQkJc2luZm8tPnNpbmZvX2ZsYWdzIHw9
IFNDVFBfVU5PUkRFUkVEOworCQl9CisJfQorI2lmZGVmIFNDVFBfQVNPQ0xPR19PRl9UU05TCisJ
eworCQlpbnQgaW5kZXgsIG5ld2luZGV4OworCQlzdHJ1Y3Qgc2N0cF9wY2J0c25fcmxvZyAqZW50
cnk7CisJCWRvIHsKKwkJCWluZGV4ID0gaW5wLT5yZWFkbG9nX2luZGV4OworCQkJbmV3aW5kZXgg
PSBpbmRleCArIDE7CisJCQlpZiAobmV3aW5kZXggPj0gU0NUUF9SRUFEX0xPR19TSVpFKSB7CisJ
CQkJbmV3aW5kZXggPSAwOworCQkJfQorCQl9IHdoaWxlIChhdG9taWNfY21wc2V0X2ludCgmaW5w
LT5yZWFkbG9nX2luZGV4LCBpbmRleCwgbmV3aW5kZXgpID09IDApOworCQllbnRyeSA9ICZpbnAt
PnJlYWRsb2dbaW5kZXhdOworCQllbnRyeS0+dnRhZyA9IGNvbnRyb2wtPnNpbmZvX2Fzc29jX2lk
OworCQllbnRyeS0+c3RybSA9IGNvbnRyb2wtPnNpbmZvX3N0cmVhbTsKKwkJZW50cnktPnNlcSA9
ICh1aW50MTZfdCljb250cm9sLT5taWQ7CisJCWVudHJ5LT5zeiA9IGNvbnRyb2wtPmxlbmd0aDsK
KwkJZW50cnktPmZsZ3MgPSBjb250cm9sLT5zaW5mb19mbGFnczsKKwl9CisjZW5kaWYKKwlpZiAo
KGZyb21sZW4gPiAwKSAmJiAoZnJvbSAhPSBOVUxMKSkgeworCQl1bmlvbiBzY3RwX3NvY2tzdG9y
ZSBzdG9yZTsKKwkJc2l6ZV90IGxlbjsKKworCQlzd2l0Y2ggKGNvbnRyb2wtPndob0Zyb20tPnJv
Ll9sX2FkZHIuc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6
CisJCQkJbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQkJCXN0b3JlLnNpbjYg
PSBjb250cm9sLT53aG9Gcm9tLT5yby5fbF9hZGRyLnNpbjY7CisJCQkJc3RvcmUuc2luNi5zaW42
X3BvcnQgPSBjb250cm9sLT5wb3J0X2Zyb207CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJ
TkVUCisJCQljYXNlIEFGX0lORVQ6CisjaWZkZWYgSU5FVDYKKwkJCQlpZiAoc2N0cF9pc19mZWF0
dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfTkVFRFNfTUFQUEVEX1Y0KSkgeworCQkJCQlsZW4g
PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJCQkJCWluNl9zaW5fMl92NG1hcHNpbjYo
JmNvbnRyb2wtPndob0Zyb20tPnJvLl9sX2FkZHIuc2luLAorCQkJCQkJCSAgICAmc3RvcmUuc2lu
Nik7CisJCQkJCXN0b3JlLnNpbjYuc2luNl9wb3J0ID0gY29udHJvbC0+cG9ydF9mcm9tOworCQkJ
CX0gZWxzZSB7CisJCQkJCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworCQkJCQlz
dG9yZS5zaW4gPSBjb250cm9sLT53aG9Gcm9tLT5yby5fbF9hZGRyLnNpbjsKKwkJCQkJc3RvcmUu
c2luLnNpbl9wb3J0ID0gY29udHJvbC0+cG9ydF9mcm9tOworCQkJCX0KKyNlbHNlCisJCQkJbGVu
ID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisJCQkJc3RvcmUuc2luID0gY29udHJvbC0+
d2hvRnJvbS0+cm8uX2xfYWRkci5zaW47CisJCQkJc3RvcmUuc2luLnNpbl9wb3J0ID0gY29udHJv
bC0+cG9ydF9mcm9tOworI2VuZGlmCisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisJCQljYXNlIEFGX0NPTk46CisJCQkJbGVuID0gc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9jb25uKTsKKwkJCQlzdG9yZS5zY29ubiA9IGNvbnRyb2wtPndob0Zyb20tPnJvLl9s
X2FkZHIuc2Nvbm47CisJCQkJc3RvcmUuc2Nvbm4uc2Nvbm5fcG9ydCA9IGNvbnRyb2wtPnBvcnRf
ZnJvbTsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQlsZW4gPSAwOworCQkJ
CWJyZWFrOworCQl9CisJCW1lbWNweShmcm9tLCAmc3RvcmUsIG1pbigoc2l6ZV90KWZyb21sZW4s
IGxlbikpOworI2lmIGRlZmluZWQoU0NUUF9FTUJFRERFRF9WNl9TQ09QRSkKKyNpZmRlZiBJTkVU
NgorCQl7CisJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42IGxzYTYsICpmcm9tNjsKKworCQkJZnJvbTYg
PSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWZyb207CisJCQlzY3RwX3JlY292ZXJfc2NvcGVfbWFj
KGZyb202LCAoJmxzYTYpKTsKKwkJfQorI2VuZGlmCisjZW5kaWYKKwl9CisJaWYgKGhvbGRfcmxv
Y2spIHsKKwkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soaW5wKTsKKwkJaG9sZF9ybG9jayA9IDA7CisJ
fQorCWlmIChob2xkX3NibG9jaykgeworCQlTT0NLQlVGX1VOTE9DSygmc28tPnNvX3Jjdik7CisJ
CWhvbGRfc2Jsb2NrID0gMDsKKwl9CisJLyogbm93IGNvcHkgb3V0IHdoYXQgZGF0YSB3ZSBjYW4g
Ki8KKwlpZiAobXAgPT0gTlVMTCkgeworCQkvKiBjb3B5IG91dCBlYWNoIG1idWYgaW4gdGhlIGNo
YWluIHVwIHRvIGxlbmd0aCAqLworCWdldF9tb3JlX2RhdGE6CisJCW0gPSBjb250cm9sLT5kYXRh
OworCQl3aGlsZSAobSkgeworCQkJLyogTW92ZSBvdXQgYWxsIHdlIGNhbiAqLworI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRlZmluZWQoQVBQ
TEVfTEVPUEFSRCkKKwkJCWNwX2xlbiA9IHVpby0+dWlvX3Jlc2lkOworI2Vsc2UKKwkJCWNwX2xl
biA9IHVpb19yZXNpZCh1aW8pOworI2VuZGlmCisjZWxzZQorCQkJY3BfbGVuID0gdWlvLT51aW9f
cmVzaWQ7CisjZW5kaWYKKwkJCW15X2xlbiA9IFNDVFBfQlVGX0xFTihtKTsKKwkJCWlmIChjcF9s
ZW4gPiBteV9sZW4pIHsKKwkJCQkvKiBub3QgZW5vdWdoIGluIHRoaXMgYnVmICovCisJCQkJY3Bf
bGVuID0gbXlfbGVuOworCQkJfQorCQkJaWYgKGhvbGRfcmxvY2spIHsKKwkJCQlTQ1RQX0lOUF9S
RUFEX1VOTE9DSyhpbnApOworCQkJCWhvbGRfcmxvY2sgPSAwOworCQkJfQorI2lmIGRlZmluZWQo
X19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJU0NUUF9TT0NLRVRfVU5M
T0NLKHNvLCAwKTsKKyNlbmRpZgorCQkJaWYgKGNwX2xlbiA+IDApCisJCQkJZXJyb3IgPSB1aW9t
b3ZlKG10b2QobSwgY2hhciAqKSwgKGludCljcF9sZW4sIHVpbyk7CisjaWYgZGVmaW5lZChfX0FQ
UExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQlTQ1RQX1NPQ0tFVF9MT0NLKHNv
LCAwKTsKKyNlbmRpZgorCQkJLyogcmUtcmVhZCAqLworCQkJaWYgKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB7CisJCQkJZ290byByZWxlYXNlOworCQkJfQor
CisJCQlpZiAoKGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYiA9PSAwKSAmJiBzdGNiICYmCisJCQkg
ICAgc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKKwkJ
CQlub19yY3ZfbmVlZGVkID0gMTsKKwkJCX0KKwkJCWlmIChlcnJvcikgeworCQkJCS8qIGVycm9y
IHdlIGFyZSBvdXQgb2YgaGVyZSAqLworCQkJCWdvdG8gcmVsZWFzZTsKKwkJCX0KKwkJCVNDVFBf
SU5QX1JFQURfTE9DSyhpbnApOworCQkJaG9sZF9ybG9jayA9IDE7CisJCQlpZiAoY3BfbGVuID09
IFNDVFBfQlVGX0xFTihtKSkgeworCQkJCWlmICgoU0NUUF9CVUZfTkVYVChtKT09IE5VTEwpICYm
CisJCQkJICAgIChjb250cm9sLT5lbmRfYWRkZWQpKSB7CisJCQkJCW91dF9mbGFncyB8PSBNU0df
RU9SOworCQkJCQlpZiAoKGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYiA9PSAwKSAgJiYKKwkJCQkJ
ICAgIChjb250cm9sLT5zdGNiICE9IE5VTEwpICYmCisJCQkJCSAgICAoKGNvbnRyb2wtPnNwZWNf
ZmxhZ3MgJiBNX05PVElGSUNBVElPTikgPT0gMCkpCisJCQkJCQljb250cm9sLT5zdGNiLT5hc29j
LnN0cm1pbltjb250cm9sLT5zaW5mb19zdHJlYW1dLmRlbGl2ZXJ5X3N0YXJ0ZWQgPSAwOworCQkJ
CX0KKwkJCQlpZiAoY29udHJvbC0+c3BlY19mbGFncyAmIE1fTk9USUZJQ0FUSU9OKSB7CisJCQkJ
CW91dF9mbGFncyB8PSBNU0dfTk9USUZJQ0FUSU9OOworCQkJCX0KKwkJCQkvKiB3ZSBhdGUgdXAg
dGhlIG1idWYgKi8KKwkJCQlpZiAoaW5fZmxhZ3MgJiBNU0dfUEVFSykgeworCQkJCQkvKiBqdXN0
IGxvb2tpbmcgKi8KKwkJCQkJbSA9IFNDVFBfQlVGX05FWFQobSk7CisJCQkJCWNvcGllZF9zb19m
YXIgKz0gY3BfbGVuOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIGRpc3Bvc2Ugb2YgdGhlIG1idWYg
Ki8KKwkJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBf
U0JfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQkJCXNjdHBfc2Jsb2coJnNvLT5zb19yY3YsCisJCQkJ
CQkgICBjb250cm9sLT5kb19ub3RfcmVmX3N0Y2I/TlVMTDpzdGNiLCBTQ1RQX0xPR19TQkZSRUUs
IFNDVFBfQlVGX0xFTihtKSk7CisJCQkJCX0KKwkJCQkJc2N0cF9zYmZyZWUoY29udHJvbCwgc3Rj
YiwgJnNvLT5zb19yY3YsIG0pOworCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9TQl9MT0dHSU5HX0VOQUJMRSkgeworCQkJCQkJc2N0cF9zYmxvZygm
c28tPnNvX3JjdiwKKwkJCQkJCSAgIGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYj9OVUxMOnN0Y2Is
IFNDVFBfTE9HX1NCUkVTVUxULCAwKTsKKwkJCQkJfQorCQkJCQljb3BpZWRfc29fZmFyICs9IGNw
X2xlbjsKKwkJCQkJZnJlZWRfc29fZmFyICs9ICh1aW50MzJfdCljcF9sZW47CisJCQkJCWZyZWVk
X3NvX2ZhciArPSBNU0laRTsKKwkJCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmY29udHJvbC0+bGVu
Z3RoLCBjcF9sZW4pOworCQkJCQljb250cm9sLT5kYXRhID0gc2N0cF9tX2ZyZWUobSk7CisJCQkJ
CW0gPSBjb250cm9sLT5kYXRhOworCQkJCQkvKiBiZWVuIHRocm91Z2ggaXQgYWxsLCBtdXN0IGhv
bGQgc2IgbG9jayBvayB0byBudWxsIHRhaWwgKi8KKwkJCQkJaWYgKGNvbnRyb2wtPmRhdGEgPT0g
TlVMTCkgeworI2lmZGVmIElOVkFSSUFOVFMKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCQkJaWYgKChjb250cm9sLT5lbmRfYWRkZWQgPT0g
MCkgfHwKKwkJCQkJCSAgICAoVEFJTFFfTkVYVChjb250cm9sLCBuZXh0KSA9PSBOVUxMKSkgewor
CQkJCQkJCS8qIElmIHRoZSBlbmQgaXMgbm90IGFkZGVkLCBPUiB0aGUKKwkJCQkJCQkgKiBuZXh0
IGlzIE5PVCBudWxsIHdlIE1VU1QgaGF2ZSB0aGUgbG9jay4KKwkJCQkJCQkgKi8KKwkJCQkJCQlp
ZiAobXR4X293bmVkKCZpbnAtPmlucF9yZGF0YV9tdHgpID09IDApIHsKKwkJCQkJCQkJcGFuaWMo
IkhtbSB3ZSBkb24ndCBvd24gdGhlIGxvY2s/Iik7CisJCQkJCQkJfQorCQkJCQkJfQorI2VuZGlm
CisjZW5kaWYKKwkJCQkJCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IE5VTEw7CisjaWZkZWYgSU5WQVJJ
QU5UUworCQkJCQkJaWYgKChjb250cm9sLT5lbmRfYWRkZWQpICYmICgob3V0X2ZsYWdzICYgTVNH
X0VPUikgPT0gMCkpIHsKKwkJCQkJCQlwYW5pYygiZW5kX2FkZGVkLCBub3RoaW5nIGxlZnQgYW5k
IG5vIE1TR19FT1IiKTsKKwkJCQkJCX0KKyNlbmRpZgorCQkJCQl9CisJCQkJfQorCQkJfSBlbHNl
IHsKKwkJCQkvKiBEbyB3ZSBuZWVkIHRvIHRyaW0gdGhlIG1idWY/ICovCisJCQkJaWYgKGNvbnRy
b2wtPnNwZWNfZmxhZ3MgJiBNX05PVElGSUNBVElPTikgeworCQkJCQlvdXRfZmxhZ3MgfD0gTVNH
X05PVElGSUNBVElPTjsKKwkJCQl9CisJCQkJaWYgKChpbl9mbGFncyAmIE1TR19QRUVLKSA9PSAw
KSB7CisJCQkJCVNDVFBfQlVGX1JFU1ZfVUYobSwgY3BfbGVuKTsKKwkJCQkJU0NUUF9CVUZfTEVO
KG0pIC09IChpbnQpY3BfbGVuOworCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9TQl9MT0dHSU5HX0VOQUJMRSkgeworCQkJCQkJc2N0cF9zYmxvZygm
c28tPnNvX3JjdiwgY29udHJvbC0+ZG9fbm90X3JlZl9zdGNiP05VTEw6c3RjYiwgU0NUUF9MT0df
U0JGUkVFLCAoaW50KWNwX2xlbik7CisJCQkJCX0KKwkJCQkJYXRvbWljX3N1YnRyYWN0X2ludCgm
c28tPnNvX3Jjdi5zYl9jYywgY3BfbGVuKTsKKwkJCQkJaWYgKChjb250cm9sLT5kb19ub3RfcmVm
X3N0Y2IgPT0gMCkgJiYKKwkJCQkJICAgIHN0Y2IpIHsKKwkJCQkJCWF0b21pY19zdWJ0cmFjdF9p
bnQoJnN0Y2ItPmFzb2Muc2JfY2MsIGNwX2xlbik7CisJCQkJCX0KKwkJCQkJY29waWVkX3NvX2Zh
ciArPSBjcF9sZW47CisJCQkJCWZyZWVkX3NvX2ZhciArPSAodWludDMyX3QpY3BfbGVuOworCQkJ
CQlmcmVlZF9zb19mYXIgKz0gTVNJWkU7CisJCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NCX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCQlzY3RwX3Ni
bG9nKCZzby0+c29fcmN2LCBjb250cm9sLT5kb19ub3RfcmVmX3N0Y2I/TlVMTDpzdGNiLAorCQkJ
CQkJCSAgIFNDVFBfTE9HX1NCUkVTVUxULCAwKTsKKwkJCQkJfQorCQkJCQlhdG9taWNfc3VidHJh
Y3RfaW50KCZjb250cm9sLT5sZW5ndGgsIGNwX2xlbik7CisJCQkJfSBlbHNlIHsKKwkJCQkJY29w
aWVkX3NvX2ZhciArPSBjcF9sZW47CisJCQkJfQorCQkJfQorI2lmIGRlZmluZWQoX19BUFBMRV9f
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkK
KwkJCWlmICgob3V0X2ZsYWdzICYgTVNHX0VPUikgfHwgKHVpby0+dWlvX3Jlc2lkID09IDApKSB7
CisjZWxzZQorCQkJaWYgKChvdXRfZmxhZ3MgJiBNU0dfRU9SKSB8fCAodWlvX3Jlc2lkKHVpbykg
PT0gMCkpIHsKKyNlbmRpZgorI2Vsc2UKKwkJCWlmICgob3V0X2ZsYWdzICYgTVNHX0VPUikgfHwg
KHVpby0+dWlvX3Jlc2lkID09IDApKSB7CisjZW5kaWYKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlm
ICgoKHN0Y2IpICYmIChpbl9mbGFncyAmIE1TR19QRUVLKSA9PSAwKSAmJgorCQkJICAgIChjb250
cm9sLT5kb19ub3RfcmVmX3N0Y2IgPT0gMCkgJiYKKwkJCSAgICAoZnJlZWRfc29fZmFyID49IHJ3
bmRfcmVxKSkgeworCQkJCXNjdHBfdXNlcl9yY3ZkKHN0Y2IsICZmcmVlZF9zb19mYXIsIGhvbGRf
cmxvY2ssIHJ3bmRfcmVxKTsKKwkJCX0KKwkJfSAvKiBlbmQgd2hpbGUobSkgKi8KKwkJLyoKKwkJ
ICogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGxvb2tlZCBhdCBpdCBhbGwgYW5kIHdlIGVpdGhlciBo
YXZlCisJCSAqIGEgTVNHX0VPUi9vciByZWFkIGFsbCB0aGUgdXNlciB3YW50cy4uLiA8T1I+CisJ
CSAqIGNvbnRyb2wtPmxlbmd0aCA9PSAwLgorCQkgKi8KKwkJaWYgKChvdXRfZmxhZ3MgJiBNU0df
RU9SKSAmJiAoKGluX2ZsYWdzICYgTVNHX1BFRUspID09IDApKSB7CisJCQkvKiB3ZSBhcmUgZG9u
ZSB3aXRoIHRoaXMgY29udHJvbCAqLworCQkJaWYgKGNvbnRyb2wtPmxlbmd0aCA9PSAwKSB7CisJ
CQkJaWYgKGNvbnRyb2wtPmRhdGEpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQkJCXBhbmljKCJj
b250cm9sLT5kYXRhIG5vdCBudWxsIGF0IHJlYWQgZW9yPyIpOworI2Vsc2UKKwkJCQkJU0NUUF9Q
UklOVEYoIlN0cmFuZ2UsIGRhdGEgbGVmdCBpbiB0aGUgY29udHJvbCBidWZmZXIgLi4gaW52YXJp
ZW50cyB3b3VsZCBwYW5pYz9cbiIpOworCQkJCQlzY3RwX21fZnJlZW0oY29udHJvbC0+ZGF0YSk7
CisJCQkJCWNvbnRyb2wtPmRhdGEgPSBOVUxMOworI2VuZGlmCisJCQkJfQorCQkJZG9uZV93aXRo
X2NvbnRyb2w6CisJCQkJaWYgKGhvbGRfcmxvY2sgPT0gMCkgeworCQkJCQlTQ1RQX0lOUF9SRUFE
X0xPQ0soaW5wKTsKKwkJCQkJaG9sZF9ybG9jayA9IDE7CisJCQkJfQorCQkJCVRBSUxRX1JFTU9W
RSgmaW5wLT5yZWFkX3F1ZXVlLCBjb250cm9sLCBuZXh0KTsKKwkJCQkvKiBBZGQgYmFjayBhbnkg
aGlkZGVuZCBkYXRhICovCisJCQkJaWYgKGNvbnRyb2wtPmhlbGRfbGVuZ3RoKSB7CisJCQkJCWhl
bGRfbGVuZ3RoID0gMDsKKwkJCQkJY29udHJvbC0+aGVsZF9sZW5ndGggPSAwOworCQkJCQl3YWtl
dXBfcmVhZF9zb2NrZXQgPSAxOworCQkJCX0KKwkJCQlpZiAoY29udHJvbC0+YXV4X2RhdGEpIHsK
KwkJCQkJc2N0cF9tX2ZyZWUgKGNvbnRyb2wtPmF1eF9kYXRhKTsKKwkJCQkJY29udHJvbC0+YXV4
X2RhdGEgPSBOVUxMOworCQkJCX0KKwkJCQlub19yY3ZfbmVlZGVkID0gY29udHJvbC0+ZG9fbm90
X3JlZl9zdGNiOworCQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjb250cm9sLT53aG9Gcm9tKTsK
KwkJCQljb250cm9sLT5kYXRhID0gTlVMTDsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQkJaWYgKGNv
bnRyb2wtPm9uX3N0cm1fcSkgeworCQkJCQlwYW5pYygiQWJvdXQgdG8gZnJlZSBjdGw6JXAgc286
JXAgYW5kIGl0cyBpbiAlZCIsCisJCQkJCSAgICAgIGNvbnRyb2wsIHNvLCBjb250cm9sLT5vbl9z
dHJtX3EpOworCQkJCX0KKyNlbmRpZgorCQkJCXNjdHBfZnJlZV9hX3JlYWRxKHN0Y2IsIGNvbnRy
b2wpOworCQkJCWNvbnRyb2wgPSBOVUxMOworCQkJCWlmICgoZnJlZWRfc29fZmFyID49IHJ3bmRf
cmVxKSAmJgorCQkJCSAgICAobm9fcmN2X25lZWRlZCA9PSAwKSkKKwkJCQkJc2N0cF91c2VyX3Jj
dmQoc3RjYiwgJmZyZWVkX3NvX2ZhciwgaG9sZF9ybG9jaywgcnduZF9yZXEpOworCisJCQl9IGVs
c2UgeworCQkJCS8qCisJCQkJICogVGhlIHVzZXIgZGlkIG5vdCByZWFkIGFsbCBvZiB0aGlzCisJ
CQkJICogbWVzc2FnZSwgdHVybiBvZmYgdGhlIHJldHVybmVkIE1TR19FT1IKKwkJCQkgKiBzaW5j
ZSB3ZSBhcmUgbGVhdmluZyBtb3JlIGJlaGluZCBvbiB0aGUKKwkJCQkgKiBjb250cm9sIHRvIHJl
YWQuCisJCQkJICovCisjaWZkZWYgSU5WQVJJQU5UUworCQkJCWlmIChjb250cm9sLT5lbmRfYWRk
ZWQgJiYKKwkJCQkgICAgKGNvbnRyb2wtPmRhdGEgPT0gTlVMTCkgJiYKKwkJCQkgICAgKGNvbnRy
b2wtPnRhaWxfbWJ1ZiA9PSBOVUxMKSkgeworCQkJCQlwYW5pYygiR2FrLCBjb250cm9sLT5sZW5n
dGggaXMgY29ycnVwdD8iKTsKKwkJCQl9CisjZW5kaWYKKwkJCQlub19yY3ZfbmVlZGVkID0gY29u
dHJvbC0+ZG9fbm90X3JlZl9zdGNiOworCQkJCW91dF9mbGFncyAmPSB+TVNHX0VPUjsKKwkJCX0K
KwkJfQorCQlpZiAob3V0X2ZsYWdzICYgTVNHX0VPUikgeworCQkJZ290byByZWxlYXNlOworCQl9
CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYg
ZGVmaW5lZChBUFBMRV9MRU9QQVJEKQorCQlpZiAoKHVpby0+dWlvX3Jlc2lkID09IDApIHx8Cisj
ZWxzZQorCQlpZiAoKHVpb19yZXNpZCh1aW8pID09IDApIHx8CisjZW5kaWYKKyNlbHNlCisJCWlm
ICgodWlvLT51aW9fcmVzaWQgPT0gMCkgfHwKKyNlbmRpZgorCQkgICAgKChpbl9lZW9yX21vZGUp
ICYmCisJCSAgICAgKGNvcGllZF9zb19mYXIgPj0gbWF4KHNvLT5zb19yY3Yuc2JfbG93YXQsIDEp
KSkpIHsKKwkJCWdvdG8gcmVsZWFzZTsKKwkJfQorCQkvKgorCQkgKiBJZiBJIGhpdCBoZXJlIHRo
ZSByZWNlaXZlciB3YW50cyBtb3JlIGFuZCB0aGlzIG1lc3NhZ2UgaXMKKwkJICogTk9UIGRvbmUg
KHBkLWFwaSkuIFNvIHR3byBxdWVzdGlvbnMuIENhbiB3ZSBibG9jaz8gaWYgbm90CisJCSAqIHdl
IGFyZSBkb25lLiBEaWQgdGhlIHVzZXIgTk9UIHNldCBNU0dfV0FJVEFMTD8KKwkJICovCisJCWlm
IChibG9ja19hbGxvd2VkID09IDApIHsKKwkJCWdvdG8gcmVsZWFzZTsKKwkJfQorCQkvKgorCQkg
KiBXZSBuZWVkIHRvIHdhaXQgZm9yIG1vcmUgZGF0YSBhIGZldyB0aGluZ3M6IC0gV2UgZG9uJ3QK
KwkJICogc2J1bmxvY2soKSBzbyB3ZSBkb24ndCBnZXQgc29tZW9uZSBlbHNlIHJlYWRpbmcuIC0g
V2UKKwkJICogbXVzdCBiZSBzdXJlIHRvIGFjY291bnQgZm9yIHRoZSBjYXNlIHdoZXJlIHdoYXQg
aXMgYWRkZWQKKwkJICogaXMgTk9UIHRvIG91ciBjb250cm9sIHdoZW4gd2Ugd2FrZXVwLgorCQkg
Ki8KKworCQkvKiBEbyB3ZSBuZWVkIHRvIHRlbGwgdGhlIHRyYW5zcG9ydCBhIHJ3bmQgdXBkYXRl
IG1pZ2h0IGJlCisJCSAqIG5lZWRlZCBiZWZvcmUgd2UgZ28gdG8gc2xlZXA/CisJCSAqLworCQlp
ZiAoKChzdGNiKSAmJiAoaW5fZmxhZ3MgJiBNU0dfUEVFSykgPT0gMCkgJiYKKwkJICAgICgoZnJl
ZWRfc29fZmFyID49IHJ3bmRfcmVxKSAmJgorCQkgICAgIChjb250cm9sLT5kb19ub3RfcmVmX3N0
Y2IgPT0gMCkgJiYKKwkJICAgICAobm9fcmN2X25lZWRlZCA9PSAwKSkpIHsKKwkJCXNjdHBfdXNl
cl9yY3ZkKHN0Y2IsICZmcmVlZF9zb19mYXIsIGhvbGRfcmxvY2ssIHJ3bmRfcmVxKTsKKwkJfQor
CXdhaXRfc29tZV9tb3JlOgorI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9X
SU4zMikpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWlmIChzby0+c29fcmN2LnNiX3N0
YXRlICYgU0JTX0NBTlRSQ1ZNT1JFKSB7CisJCQlnb3RvIHJlbGVhc2U7CisJCX0KKyNlbHNlCisJ
CWlmIChzby0+c29fc3RhdGUgJiBTU19DQU5UUkNWTU9SRSkgeworCQkJZ290byByZWxlYXNlOwor
CQl9CisjZW5kaWYKKworCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09D
S0VUX0dPTkUpCisJCQlnb3RvIHJlbGVhc2U7CisKKwkJaWYgKGhvbGRfcmxvY2sgPT0gMSkgewor
CQkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soaW5wKTsKKwkJCWhvbGRfcmxvY2sgPSAwOworCQl9CisJ
CWlmIChob2xkX3NibG9jayA9PSAwKSB7CisJCQlTT0NLQlVGX0xPQ0soJnNvLT5zb19yY3YpOwor
CQkJaG9sZF9zYmxvY2sgPSAxOworCQl9CisJCWlmICgoY29waWVkX3NvX2ZhcikgJiYgKGNvbnRy
b2wtPmxlbmd0aCA9PSAwKSAmJgorCQkgICAgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBf
UENCX0ZMQUdTX0ZSQUdfSU5URVJMRUFWRSkpKSB7CisJCQlnb3RvIHJlbGVhc2U7CisJCX0KKyNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJc2J1bmxv
Y2soJnNvLT5zb19yY3YsIDEpOworI2VuZGlmCisJCWlmIChzby0+c29fcmN2LnNiX2NjIDw9IGNv
bnRyb2wtPmhlbGRfbGVuZ3RoKSB7CisJCQllcnJvciA9IHNid2FpdCgmc28tPnNvX3Jjdik7CisJ
CQlpZiAoZXJyb3IpIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorCQkJCWdvdG8gcmVsZWFzZTsKKyNlbHNlCisJCQkJZ290byByZWxlYXNlX3Vu
bG9ja2VkOworI2VuZGlmCisJCQl9CisJCQljb250cm9sLT5oZWxkX2xlbmd0aCA9IDA7CisJCX0K
KyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJZXJy
b3IgPSBzYmxvY2soJnNvLT5zb19yY3YsIFNCTE9DS1dBSVQoaW5fZmxhZ3MpKTsKKyNlbmRpZgor
CQlpZiAoaG9sZF9zYmxvY2spIHsKKwkJCVNPQ0tCVUZfVU5MT0NLKCZzby0+c29fcmN2KTsKKwkJ
CWhvbGRfc2Jsb2NrID0gMDsKKwkJfQorCQlpZiAoY29udHJvbC0+bGVuZ3RoID09IDApIHsKKwkJ
CS8qIHN0aWxsIG5vdGhpbmcgaGVyZSAqLworCQkJaWYgKGNvbnRyb2wtPmVuZF9hZGRlZCA9PSAx
KSB7CisJCQkJLyogaGUgYWJvcnRlZCwgb3IgaXMgZG9uZSBpLmUuZGlkIGEgc2h1dGRvd24gKi8K
KwkJCQlvdXRfZmxhZ3MgfD0gTVNHX0VPUjsKKwkJCQlpZiAoY29udHJvbC0+cGRhcGlfYWJvcnRl
ZCkgeworCQkJCQlpZiAoKGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYiA9PSAwKSAmJiAoKGNvbnRy
b2wtPnNwZWNfZmxhZ3MgJiBNX05PVElGSUNBVElPTikgPT0gMCkpCisJCQkJCQljb250cm9sLT5z
dGNiLT5hc29jLnN0cm1pbltjb250cm9sLT5zaW5mb19zdHJlYW1dLmRlbGl2ZXJ5X3N0YXJ0ZWQg
PSAwOworCisJCQkJCW91dF9mbGFncyB8PSBNU0dfVFJVTkM7CisJCQkJfSBlbHNlIHsKKwkJCQkJ
aWYgKChjb250cm9sLT5kb19ub3RfcmVmX3N0Y2IgPT0gMCkgJiYgKChjb250cm9sLT5zcGVjX2Zs
YWdzICYgTV9OT1RJRklDQVRJT04pID09IDApKQorCQkJCQkJY29udHJvbC0+c3RjYi0+YXNvYy5z
dHJtaW5bY29udHJvbC0+c2luZm9fc3RyZWFtXS5kZWxpdmVyeV9zdGFydGVkID0gMDsKKwkJCQl9
CisJCQkJZ290byBkb25lX3dpdGhfY29udHJvbDsKKwkJCX0KKwkJCWlmIChzby0+c29fcmN2LnNi
X2NjID4gaGVsZF9sZW5ndGgpIHsKKwkJCQljb250cm9sLT5oZWxkX2xlbmd0aCA9IHNvLT5zb19y
Y3Yuc2JfY2M7CisJCQkJaGVsZF9sZW5ndGggPSAwOworCQkJfQorCQkJZ290byB3YWl0X3NvbWVf
bW9yZTsKKwkJfSBlbHNlIGlmIChjb250cm9sLT5kYXRhID09IE5VTEwpIHsKKwkJCS8qIHdlIG11
c3QgcmUtc3luYyBzaW5jZSBkYXRhCisJCQkgKiBpcyBwcm9iYWJseSBiZWluZyBhZGRlZAorCQkJ
ICovCisJCQlTQ1RQX0lOUF9SRUFEX0xPQ0soaW5wKTsKKwkJCWlmICgoY29udHJvbC0+bGVuZ3Ro
ID4gMCkgJiYgKGNvbnRyb2wtPmRhdGEgPT0gTlVMTCkpIHsKKwkJCQkvKiBiaWcgdHJvdWJsZS4u
IHdlIGhhdmUgdGhlIGxvY2sgYW5kIGl0cyBjb3JydXB0PyAqLworI2lmZGVmIElOVkFSSUFOVFMK
KwkJCQlwYW5pYyAoIkltcG9zc2libGUgZGF0YT09TlVMTCBsZW5ndGggIT0wIik7CisjZW5kaWYK
KwkJCQlvdXRfZmxhZ3MgfD0gTVNHX0VPUjsKKwkJCQlvdXRfZmxhZ3MgfD0gTVNHX1RSVU5DOwor
CQkJCWNvbnRyb2wtPmxlbmd0aCA9IDA7CisJCQkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soaW5wKTsK
KwkJCQlnb3RvIGRvbmVfd2l0aF9jb250cm9sOworCQkJfQorCQkJU0NUUF9JTlBfUkVBRF9VTkxP
Q0soaW5wKTsKKwkJCS8qIFdlIHdpbGwgZmFsbCBhcm91bmQgdG8gZ2V0IG1vcmUgZGF0YSAqLwor
CQl9CisJCWdvdG8gZ2V0X21vcmVfZGF0YTsKKwl9IGVsc2UgeworCQkvKi0KKwkJICogR2l2ZSBj
YWxsZXIgYmFjayB0aGUgbWJ1ZiBjaGFpbiwKKwkJICogc3RvcmUgaW4gdWlvX3Jlc2lkIHRoZSBs
ZW5ndGgKKwkJICovCisJCXdha2V1cF9yZWFkX3NvY2tldCA9IDA7CisJCWlmICgoY29udHJvbC0+
ZW5kX2FkZGVkID09IDApIHx8CisJCSAgICAoVEFJTFFfTkVYVChjb250cm9sLCBuZXh0KSA9PSBO
VUxMKSkgeworCQkJLyogTmVlZCB0byBnZXQgcmxvY2sgKi8KKwkJCWlmIChob2xkX3Jsb2NrID09
IDApIHsKKwkJCQlTQ1RQX0lOUF9SRUFEX0xPQ0soaW5wKTsKKwkJCQlob2xkX3Jsb2NrID0gMTsK
KwkJCX0KKwkJfQorCQlpZiAoY29udHJvbC0+ZW5kX2FkZGVkKSB7CisJCQlvdXRfZmxhZ3MgfD0g
TVNHX0VPUjsKKwkJCWlmICgoY29udHJvbC0+ZG9fbm90X3JlZl9zdGNiID09IDApICYmCisJCQkg
ICAgKGNvbnRyb2wtPnN0Y2IgIT0gTlVMTCkgJiYKKwkJCSAgICAoKGNvbnRyb2wtPnNwZWNfZmxh
Z3MgJiBNX05PVElGSUNBVElPTikgPT0gMCkpCisJCQkJY29udHJvbC0+c3RjYi0+YXNvYy5zdHJt
aW5bY29udHJvbC0+c2luZm9fc3RyZWFtXS5kZWxpdmVyeV9zdGFydGVkID0gMDsKKwkJfQorCQlp
ZiAoY29udHJvbC0+c3BlY19mbGFncyAmIE1fTk9USUZJQ0FUSU9OKSB7CisJCQlvdXRfZmxhZ3Mg
fD0gTVNHX05PVElGSUNBVElPTjsKKwkJfQorI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkKKwkJdWlvLT51
aW9fcmVzaWQgPSBjb250cm9sLT5sZW5ndGg7CisjZWxzZQorCQl1aW9fc2V0cmVzaWQodWlvLCBj
b250cm9sLT5sZW5ndGgpOworI2VuZGlmCisjZWxzZQorCQl1aW8tPnVpb19yZXNpZCA9IGNvbnRy
b2wtPmxlbmd0aDsKKyNlbmRpZgorCQkqbXAgPSBjb250cm9sLT5kYXRhOworCQltID0gY29udHJv
bC0+ZGF0YTsKKwkJd2hpbGUgKG0pIHsKKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9n
Z2luZ19sZXZlbCkgJiBTQ1RQX1NCX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJc2N0cF9zYmxvZygm
c28tPnNvX3JjdiwKKwkJCQkgICBjb250cm9sLT5kb19ub3RfcmVmX3N0Y2I/TlVMTDpzdGNiLCBT
Q1RQX0xPR19TQkZSRUUsIFNDVFBfQlVGX0xFTihtKSk7CisJCQl9CisJCQlzY3RwX3NiZnJlZShj
b250cm9sLCBzdGNiLCAmc28tPnNvX3JjdiwgbSk7CisJCQlmcmVlZF9zb19mYXIgKz0gKHVpbnQz
Ml90KVNDVFBfQlVGX0xFTihtKTsKKwkJCWZyZWVkX3NvX2ZhciArPSBNU0laRTsKKwkJCWlmIChT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NCX0xPR0dJTkdfRU5B
QkxFKSB7CisJCQkJc2N0cF9zYmxvZygmc28tPnNvX3JjdiwKKwkJCQkgICBjb250cm9sLT5kb19u
b3RfcmVmX3N0Y2I/TlVMTDpzdGNiLCBTQ1RQX0xPR19TQlJFU1VMVCwgMCk7CisJCQl9CisJCQlt
ID0gU0NUUF9CVUZfTkVYVChtKTsKKwkJfQorCQljb250cm9sLT5kYXRhID0gY29udHJvbC0+dGFp
bF9tYnVmID0gTlVMTDsKKwkJY29udHJvbC0+bGVuZ3RoID0gMDsKKwkJaWYgKG91dF9mbGFncyAm
IE1TR19FT1IpIHsKKwkJCS8qIERvbmUgd2l0aCB0aGlzIGNvbnRyb2wgKi8KKwkJCWdvdG8gZG9u
ZV93aXRoX2NvbnRyb2w7CisJCX0KKwl9CisgcmVsZWFzZToKKwlpZiAoaG9sZF9ybG9jayA9PSAx
KSB7CisJCVNDVFBfSU5QX1JFQURfVU5MT0NLKGlucCk7CisJCWhvbGRfcmxvY2sgPSAwOworCX0K
KyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaWYgKGhvbGRfc2Jsb2NrID09IDApIHsKKwkJ
U09DS0JVRl9MT0NLKCZzby0+c29fcmN2KTsKKwkJaG9sZF9zYmxvY2sgPSAxOworCX0KKyNlbHNl
CisJaWYgKGhvbGRfc2Jsb2NrID09IDEpIHsKKwkJU09DS0JVRl9VTkxPQ0soJnNvLT5zb19yY3Yp
OworCQlob2xkX3NibG9jayA9IDA7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18p
ICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJc2J1bmxvY2soJnNvLT5zb19yY3YsIDEpOwor
I2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorCXNidW5sb2NrKCZzby0+c29fcmN2KTsKKwlzb2NrYnVmX2xvY2sgPSAwOworI2VuZGlm
CisKKyByZWxlYXNlX3VubG9ja2VkOgorCWlmIChob2xkX3NibG9jaykgeworCQlTT0NLQlVGX1VO
TE9DSygmc28tPnNvX3Jjdik7CisJCWhvbGRfc2Jsb2NrID0gMDsKKwl9CisJaWYgKChzdGNiKSAm
JiAoaW5fZmxhZ3MgJiBNU0dfUEVFSykgPT0gMCkgeworCQlpZiAoKGZyZWVkX3NvX2ZhciA+PSBy
d25kX3JlcSkgJiYKKwkJICAgIChjb250cm9sICYmIChjb250cm9sLT5kb19ub3RfcmVmX3N0Y2Ig
PT0gMCkpICYmCisJCSAgICAobm9fcmN2X25lZWRlZCA9PSAwKSkKKwkJCXNjdHBfdXNlcl9yY3Zk
KHN0Y2IsICZmcmVlZF9zb19mYXIsIGhvbGRfcmxvY2ssIHJ3bmRfcmVxKTsKKwl9Cisgb3V0Ogor
CWlmIChtc2dfZmxhZ3MpIHsKKwkJKm1zZ19mbGFncyA9IG91dF9mbGFnczsKKwl9CisJaWYgKCgo
b3V0X2ZsYWdzICYgTVNHX0VPUikgPT0gMCkgJiYKKwkgICAgKChpbl9mbGFncyAmIE1TR19QRUVL
KSA9PSAwKSAmJgorCSAgICAoc2luZm8pICYmCisJICAgIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5w
LCBTQ1RQX1BDQl9GTEFHU19FWFRfUkNWSU5GTykgfHwKKwkgICAgIHNjdHBfaXNfZmVhdHVyZV9v
bihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZOWFRJTkZPKSkpIHsKKwkJc3RydWN0IHNjdHBfZXh0
cmN2aW5mbyAqc19leHRyYTsKKwkJc19leHRyYSA9IChzdHJ1Y3Qgc2N0cF9leHRyY3ZpbmZvICop
c2luZm87CisJCXNfZXh0cmEtPnNlcmluZm9fbmV4dF9mbGFncyA9IFNDVFBfTk9fTkVYVF9NU0c7
CisJfQorCWlmIChob2xkX3Jsb2NrID09IDEpIHsKKwkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soaW5w
KTsKKwl9CisJaWYgKGhvbGRfc2Jsb2NrKSB7CisJCVNPQ0tCVUZfVU5MT0NLKCZzby0+c29fcmN2
KTsKKwl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwlpZiAoc29ja2J1Zl9sb2NrKSB7CisJCXNidW5sb2NrKCZzby0+c29fcmN2KTsKKwl9Cisj
ZW5kaWYKKworCWlmIChmcmVlY250X2FwcGxpZWQpIHsKKwkJLyoKKwkJICogVGhlIGxvY2sgb24g
dGhlIHNvY2tldCBidWZmZXIgcHJvdGVjdHMgdXMgc28gdGhlIGZyZWUKKwkJICogY29kZSB3aWxs
IHN0b3AuIEJ1dCBzaW5jZSB3ZSB1c2VkIHRoZSBzb2NrZXRidWYgbG9jayBhbmQKKwkJICogdGhl
IHNlbmRlciB1c2VzIHRoZSB0Y2JfbG9jayB0byBpbmNyZW1lbnQsIHdlIG5lZWQgdG8gdXNlCisJ
CSAqIHRoZSBhdG9taWMgYWRkIHRvIHRoZSByZWZjbnQuCisJCSAqLworCQlpZiAoc3RjYiA9PSBO
VUxMKSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQkJcGFuaWMoInN0Y2IgZm9yIHJlZmNudCBoYXMg
Z29uZSBOVUxMPyIpOworCQkJZ290byBzdGFnZV9sZWZ0OworI2Vsc2UKKwkJCWdvdG8gc3RhZ2Vf
bGVmdDsKKyNlbmRpZgorCQl9CisJCS8qIFNhdmUgdGhlIHZhbHVlIGJhY2sgZm9yIG5leHQgdGlt
ZSAqLworCQlzdGNiLT5mcmVlZF9ieV9zb3Jjdl9zaW5jZWxhc3QgPSBmcmVlZF9zb19mYXI7CisJ
CWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgLTEpOworCX0KKwlpZiAoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICZTQ1RQX1JFQ1ZfUldORF9MT0dHSU5HX0VO
QUJMRSkgeworCQlpZiAoc3RjYikgeworCQkJc2N0cF9taXNjX2ludHMoU0NUUF9TT1JFQ1ZfRE9O
RSwKKwkJCQkgICAgICAgZnJlZWRfc29fZmFyLAorI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkKKwkJCQkg
ICAgICAgKCh1aW8pID8gKHNsZW4gLSB1aW8tPnVpb19yZXNpZCkgOiBzbGVuKSwKKyNlbHNlCisJ
CQkJICAgICAgICgodWlvKSA/IChzbGVuIC0gdWlvX3Jlc2lkKHVpbykpIDogc2xlbiksCisjZW5k
aWYKKyNlbHNlCisJCQkJICAgICAgICh1aW50MzJfdCkoKHVpbykgPyAoc2xlbiAtIHVpby0+dWlv
X3Jlc2lkKSA6IHNsZW4pLAorI2VuZGlmCisJCQkJICAgICAgIHN0Y2ItPmFzb2MubXlfcnduZCwK
KwkJCQkgICAgICAgc28tPnNvX3Jjdi5zYl9jYyk7CisJCX0gZWxzZSB7CisJCQlzY3RwX21pc2Nf
aW50cyhTQ1RQX1NPUkVDVl9ET05FLAorCQkJCSAgICAgICBmcmVlZF9zb19mYXIsCisjaWYgZGVm
aW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYgZGVmaW5lZChB
UFBMRV9MRU9QQVJEKQorCQkJCSAgICAgICAoKHVpbykgPyAoc2xlbiAtIHVpby0+dWlvX3Jlc2lk
KSA6IHNsZW4pLAorI2Vsc2UKKwkJCQkgICAgICAgKCh1aW8pID8gKHNsZW4gLSB1aW9fcmVzaWQo
dWlvKSkgOiBzbGVuKSwKKyNlbmRpZgorI2Vsc2UKKwkJCQkgICAgICAgKHVpbnQzMl90KSgodWlv
KSA/IChzbGVuIC0gdWlvLT51aW9fcmVzaWQpIDogc2xlbiksCisjZW5kaWYKKwkJCQkgICAgICAg
MCwKKwkJCQkgICAgICAgc28tPnNvX3Jjdi5zYl9jYyk7CisJCX0KKwl9Cisgc3RhZ2VfbGVmdDoK
KwlpZiAod2FrZXVwX3JlYWRfc29ja2V0KSB7CisJCXNjdHBfc29yd2FrZXVwKGlucCwgc28pOwor
CX0KKwlyZXR1cm4gKGVycm9yKTsKK30KKworI2lmZGVmIFNDVFBfTUJVRl9MT0dHSU5HCitzdHJ1
Y3QgbWJ1ZiAqCitzY3RwX21fZnJlZShzdHJ1Y3QgbWJ1ZiAqbSkKK3sKKwlpZiAoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQlVGX0xPR0dJTkdfRU5BQkxFKSB7
CisJCXNjdHBfbG9nX21iKG0sIFNDVFBfTUJVRl9JRlJFRSk7CisJfQorCXJldHVybiAobV9mcmVl
KG0pKTsKK30KKwordm9pZAorc2N0cF9tX2ZyZWVtKHN0cnVjdCBtYnVmICptYikKK3sKKwl3aGls
ZSAobWIgIT0gTlVMTCkKKwkJbWIgPSBzY3RwX21fZnJlZShtYik7Cit9CisKKyNlbmRpZgorCitp
bnQKK3NjdHBfZHluYW1pY19zZXRfcHJpbWFyeShzdHJ1Y3Qgc29ja2FkZHIgKnNhLCB1aW50MzJf
dCB2cmZfaWQpCit7CisJLyogR2l2ZW4gYSBsb2NhbCBhZGRyZXNzLiBGb3IgYWxsIGFzc29jaWF0
aW9ucworCSAqIHRoYXQgaG9sZHMgdGhlIGFkZHJlc3MsIHJlcXVlc3QgYSBwZWVyLXNldC1wcmlt
YXJ5LgorCSAqLworCXN0cnVjdCBzY3RwX2lmYSAqaWZhOworCXN0cnVjdCBzY3RwX2xhZGRyICp3
aTsKKworCWlmYSA9IHNjdHBfZmluZF9pZmFfYnlfYWRkcihzYSwgdnJmX2lkLCBTQ1RQX0FERFJf
Tk9UX0xPQ0tFRCk7CisJaWYgKGlmYSA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
TlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFQUREUk5PVEFWQUlMKTsKKwkJ
cmV0dXJuIChFQUREUk5PVEFWQUlMKTsKKwl9CisJLyogTm93IHRoYXQgd2UgaGF2ZSB0aGUgaWZh
IHdlIG11c3QgYXdha2VuIHRoZQorCSAqIGl0ZXJhdG9yIHdpdGggdGhpcyBtZXNzYWdlLgorCSAq
LworCXdpID0gU0NUUF9aT05FX0dFVChTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9sYWRkciksIHN0
cnVjdCBzY3RwX2xhZGRyKTsKKwlpZiAod2kgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRU5PTUVNKTsKKwkJcmV0
dXJuIChFTk9NRU0pOworCX0KKwkvKiBOb3cgaW5jciB0aGUgY291bnQgYW5kIGludCB3aSBzdHJ1
Y3R1cmUgKi8KKwlTQ1RQX0lOQ1JfTEFERFJfQ09VTlQoKTsKKwltZW1zZXQod2ksIDAsIHNpemVv
Zigqd2kpKTsKKwkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmd2ktPnN0YXJ0X3RpbWUpOwor
CXdpLT5pZmEgPSBpZmE7CisJd2ktPmFjdGlvbiA9IFNDVFBfU0VUX1BSSU1fQUREUjsKKwlhdG9t
aWNfYWRkX2ludCgmaWZhLT5yZWZjb3VudCwgMSk7CisKKwkvKiBOb3cgYWRkIGl0IHRvIHRoZSB3
b3JrIHF1ZXVlICovCisJU0NUUF9XUV9BRERSX0xPQ0soKTsKKwkvKgorCSAqIFNob3VsZCB0aGlz
IHJlYWxseSBiZSBhIHRhaWxxPyBBcyBpdCBpcyB3ZSB3aWxsIHByb2Nlc3MgdGhlCisJICogbmV3
ZXN0IGZpcnN0IDotMAorCSAqLworCUxJU1RfSU5TRVJUX0hFQUQoJlNDVFBfQkFTRV9JTkZPKGFk
ZHJfd3EpLCB3aSwgc2N0cF9ueHRfYWRkcik7CisJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVS
X1RZUEVfQUREUl9XUSwKKwkJCSAoc3RydWN0IHNjdHBfaW5wY2IgKilOVUxMLAorCQkJIChzdHJ1
Y3Qgc2N0cF90Y2IgKilOVUxMLAorCQkJIChzdHJ1Y3Qgc2N0cF9uZXRzICopTlVMTCk7CisJU0NU
UF9XUV9BRERSX1VOTE9DSygpOworCXJldHVybiAoMCk7Cit9CisKKyNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisvKiBubyBzY3RwX3NvcmVjZWl2ZSBmb3IgX19Vc2Vyc3BhY2VfXyBub3cgKi8K
KyNlbmRpZgorI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitpbnQKK3NjdHBfc29yZWNlaXZl
KAlzdHJ1Y3Qgc29ja2V0ICpzbywKKwkJc3RydWN0IHNvY2thZGRyICoqcHNhLAorCQlzdHJ1Y3Qg
dWlvICp1aW8sCisJCXN0cnVjdCBtYnVmICoqbXAwLAorCQlzdHJ1Y3QgbWJ1ZiAqKmNvbnRyb2xw
LAorCQlpbnQgKmZsYWdzcCkKK3sKKwlpbnQgZXJyb3IsIGZyb21sZW47CisJdWludDhfdCBzb2Nr
YnVmWzI1Nl07CisJc3RydWN0IHNvY2thZGRyICpmcm9tOworCXN0cnVjdCBzY3RwX2V4dHJjdmlu
Zm8gc2luZm87CisJaW50IGZpbGxpbmdfc2luZm8gPSAxOworCWludCBmbGFnczsKKwlzdHJ1Y3Qg
c2N0cF9pbnBjYiAqaW5wOworCisJaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3Bj
YjsKKwkvKiBwaWNrdXAgdGhlIGFzc29jIHdlIGFyZSByZWFkaW5nIGZyb20gKi8KKwlpZiAoaW5w
ID09IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKwlpZiAoKHNj
dHBfaXNfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWREFUQUlPRVZOVCkgJiYK
KwkgICAgIHNjdHBfaXNfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWUkNWSU5G
TykgJiYKKwkgICAgIHNjdHBfaXNfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNW
TlhUSU5GTykpIHx8CisJICAgIChjb250cm9scCA9PSBOVUxMKSkgeworCQkvKiB1c2VyIGRvZXMg
bm90IHdhbnQgdGhlIHNuZHJjdiBjdGwgKi8KKwkJZmlsbGluZ19zaW5mbyA9IDA7CisJfQorCWlm
IChwc2EpIHsKKwkJZnJvbSA9IChzdHJ1Y3Qgc29ja2FkZHIgKilzb2NrYnVmOworCQlmcm9tbGVu
ID0gc2l6ZW9mKHNvY2tidWYpOworI2lmZGVmIEhBVkVfU0FfTEVOCisJCWZyb20tPnNhX2xlbiA9
IDA7CisjZW5kaWYKKwl9IGVsc2UgeworCQlmcm9tID0gTlVMTDsKKwkJZnJvbWxlbiA9IDA7CisJ
fQorCisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJ
U0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisjZW5kaWYKKwlpZiAoZmlsbGluZ19zaW5mbykgewor
CQltZW1zZXQoJnNpbmZvLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfZXh0cmN2aW5mbykpOworCX0K
KwlpZiAoZmxhZ3NwICE9IE5VTEwpIHsKKwkJZmxhZ3MgPSAqZmxhZ3NwOworCX0gZWxzZSB7CisJ
CWZsYWdzID0gMDsKKwl9CisJZXJyb3IgPSBzY3RwX3NvcmVjdm1zZyhzbywgdWlvLCBtcDAsIGZy
b20sIGZyb21sZW4sICZmbGFncywKKwkgICAgKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKikmc2lu
Zm8sIGZpbGxpbmdfc2luZm8pOworCWlmIChmbGFnc3AgIT0gTlVMTCkgeworCQkqZmxhZ3NwID0g
ZmxhZ3M7CisJfQorCWlmIChjb250cm9scCAhPSBOVUxMKSB7CisJCS8qIGNvcHkgYmFjayB0aGUg
c2luZm8gaW4gYSBDTVNHIGZvcm1hdCAqLworCQlpZiAoZmlsbGluZ19zaW5mbyAmJiAoKGZsYWdz
ICYgTVNHX05PVElGSUNBVElPTikgPT0gMCkpIHsKKwkJCSpjb250cm9scCA9IHNjdHBfYnVpbGRf
Y3RsX25jaHVuayhpbnAsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0
cnVjdCBzY3RwX3NuZHJjdmluZm8gKikmc2luZm8pOworCQl9IGVsc2UgeworCQkJKmNvbnRyb2xw
ID0gTlVMTDsKKwkJfQorCX0KKwlpZiAocHNhKSB7CisJCS8qIGNvcHkgYmFjayB0aGUgYWRkcmVz
cyBpbmZvICovCisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJaWYgKGZyb20gJiYgZnJvbS0+c2FfbGVu
KSB7CisjZWxzZQorCQlpZiAoZnJvbSkgeworI2VuZGlmCisjaWYgKGRlZmluZWQoX19GcmVlQlNE
X18pIHx8IGRlZmluZWQoX1dJTjMyKSkgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCSpw
c2EgPSBzb2R1cHNvY2thZGRyKGZyb20sIE1fTk9XQUlUKTsKKyNlbHNlCisJCQkqcHNhID0gZHVw
X3NvY2thZGRyKGZyb20sIG1wMCA9PSAwKTsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJKnBzYSA9
IE5VTEw7CisJCX0KKwl9CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKyNlbmRpZgorCXJldHVybiAo
ZXJyb3IpOworfQorCisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisvKgorICogR2VuZXJhbCByb3V0aW5lIHRvIGFsbG9jYXRlIGEgaGFzaCB0YWJsZSB3aXRo
IGNvbnRyb2wgb2YgbWVtb3J5IGZsYWdzLgorICogaXMgaW4gNy4wIGFuZCBiZXlvbmQgZm9yIHN1
cmUgOi0pCisgKi8KK3ZvaWQgKgorc2N0cF9oYXNoaW5pdF9mbGFncyhpbnQgZWxlbWVudHMsIHN0
cnVjdCBtYWxsb2NfdHlwZSAqdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgdV9sb25nICpoYXNo
bWFzaywgaW50IGZsYWdzKQoreworCWxvbmcgaGFzaHNpemU7CisJTElTVF9IRUFEKGdlbmVyaWMs
IGdlbmVyaWMpICpoYXNodGJsOworCWludCBpOworCisKKwlpZiAoZWxlbWVudHMgPD0gMCkgewor
I2lmZGVmIElOVkFSSUFOVFMKKwkJcGFuaWMoImhhc2hpbml0OiBiYWQgZWxlbWVudHMiKTsKKyNl
bHNlCisJCVNDVFBfUFJJTlRGKCJoYXNoaW5pdDogYmFkIGVsZW1lbnRzPyIpOworCQllbGVtZW50
cyA9IDE7CisjZW5kaWYKKwl9CisJZm9yIChoYXNoc2l6ZSA9IDE7IGhhc2hzaXplIDw9IGVsZW1l
bnRzOyBoYXNoc2l6ZSA8PD0gMSkKKwkJY29udGludWU7CisJaGFzaHNpemUgPj49IDE7CisJaWYg
KGZsYWdzICYgSEFTSF9XQUlUT0spCisJCWhhc2h0YmwgPSBtYWxsb2MoKHVfbG9uZyloYXNoc2l6
ZSAqIHNpemVvZigqaGFzaHRibCksIHR5cGUsIE1fV0FJVE9LKTsKKwllbHNlIGlmIChmbGFncyAm
IEhBU0hfTk9XQUlUKQorCQloYXNodGJsID0gbWFsbG9jKCh1X2xvbmcpaGFzaHNpemUgKiBzaXpl
b2YoKmhhc2h0YmwpLCB0eXBlLCBNX05PV0FJVCk7CisJZWxzZSB7CisjaWZkZWYgSU5WQVJJQU5U
UworCQlwYW5pYygiZmxhZyBpbmNvcnJlY3QgaW4gaGFzaGluaXRfZmxhZ3MiKTsKKyNlbHNlCisJ
CXJldHVybiAoTlVMTCk7CisjZW5kaWYKKwl9CisKKwkvKiBubyBtZW1vcnk/ICovCisJaWYgKGhh
c2h0YmwgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKworCWZvciAoaSA9IDA7IGkgPCBoYXNo
c2l6ZTsgaSsrKQorCQlMSVNUX0lOSVQoJmhhc2h0YmxbaV0pOworCSpoYXNobWFzayA9IGhhc2hz
aXplIC0gMTsKKwlyZXR1cm4gKGhhc2h0YmwpOworfQorI2VuZGlmCisjZWxzZSAvKiAgX19Vc2Vy
c3BhY2VfXyBpZmRlZiBhYm92ZSBzY3RwX3NvcmVjZWl2ZSAqLworLyoKKyAqIF9fVXNlcnNwYWNl
X18gRGVmaW5pbmcgc2N0cF9oYXNoaW5pdF9mbGFncygpIGFuZCBzY3RwX2hhc2hkZXN0cm95KCkg
Zm9yIHVzZXJsYW5kLgorICogTk9URTogV2UgZG9uJ3Qgd2FudCBtdWx0aXBsZSBkZWZpbml0aW9u
cyBoZXJlLiBTbyBzY3RwX2hhc2hpbml0X2ZsYWdzKCkgYWJvdmUgZm9yCisgKl9fRnJlZUJTRF9f
IG11c3QgYmUgZXhjbHVkZWQuCisgKgorICovCisKK3ZvaWQgKgorc2N0cF9oYXNoaW5pdF9mbGFn
cyhpbnQgZWxlbWVudHMsIHN0cnVjdCBtYWxsb2NfdHlwZSAqdHlwZSwKKyAgICAgICAgICAgICAg
ICAgICAgdV9sb25nICpoYXNobWFzaywgaW50IGZsYWdzKQoreworCWxvbmcgaGFzaHNpemU7CisJ
TElTVF9IRUFEKGdlbmVyaWMsIGdlbmVyaWMpICpoYXNodGJsOworCWludCBpOworCisJaWYgKGVs
ZW1lbnRzIDw9IDApIHsKKwkJU0NUUF9QUklOVEYoImhhc2hpbml0OiBiYWQgZWxlbWVudHM/Iik7
CisjaWZkZWYgSU5WQVJJQU5UUworCQlyZXR1cm4gKE5VTEwpOworI2Vsc2UKKwkJZWxlbWVudHMg
PSAxOworI2VuZGlmCisJfQorCWZvciAoaGFzaHNpemUgPSAxOyBoYXNoc2l6ZSA8PSBlbGVtZW50
czsgaGFzaHNpemUgPDw9IDEpCisJCWNvbnRpbnVlOworCWhhc2hzaXplID4+PSAxOworCS8qY2Fu
bm90IHVzZSBNQUxMT0MgaGVyZSBiZWNhdXNlIGl0IGhhcyB0byBiZSBkZWNsYXJlZCBvciBkZWZp
bmVkCisJICB1c2luZyBNQUxMT0NfREVDTEFSRSBvciBNQUxMT0NfREVGSU5FIGZpcnN0LiAqLwor
CWlmIChmbGFncyAmIEhBU0hfV0FJVE9LKQorCQloYXNodGJsID0gbWFsbG9jKCh1X2xvbmcpaGFz
aHNpemUgKiBzaXplb2YoKmhhc2h0YmwpKTsKKwllbHNlIGlmIChmbGFncyAmIEhBU0hfTk9XQUlU
KQorCQloYXNodGJsID0gbWFsbG9jKCh1X2xvbmcpaGFzaHNpemUgKiBzaXplb2YoKmhhc2h0Ymwp
KTsKKwllbHNlIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCVNDVFBfUFJJTlRGKCJmbGFnIGluY29y
cmVjdCBpbiBoYXNoaW5pdF9mbGFncy5cbiIpOworI2VuZGlmCisJCXJldHVybiAoTlVMTCk7CisJ
fQorCisJLyogbm8gbWVtb3J5PyAqLworCWlmIChoYXNodGJsID09IE5VTEwpCisJCXJldHVybiAo
TlVMTCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaGFzaHNpemU7IGkrKykKKwkJTElTVF9JTklUKCZo
YXNodGJsW2ldKTsKKwkqaGFzaG1hc2sgPSBoYXNoc2l6ZSAtIDE7CisJcmV0dXJuIChoYXNodGJs
KTsKK30KKwordm9pZAorc2N0cF9oYXNoZGVzdHJveSh2b2lkICp2aGFzaHRibCwgc3RydWN0IG1h
bGxvY190eXBlICp0eXBlLCB1X2xvbmcgaGFzaG1hc2spCit7CisJTElTVF9IRUFEKGdlbmVyaWMs
IGdlbmVyaWMpICpoYXNodGJsLCAqaHA7CisKKwloYXNodGJsID0gdmhhc2h0Ymw7CisJZm9yICho
cCA9IGhhc2h0Ymw7IGhwIDw9ICZoYXNodGJsW2hhc2htYXNrXTsgaHArKykKKwkJaWYgKCFMSVNU
X0VNUFRZKGhwKSkgeworCQkJU0NUUF9QUklOVEYoImhhc2hkZXN0cm95OiBoYXNoIG5vdCBlbXB0
eS5cbiIpOworCQkJcmV0dXJuOworCQl9CisJRlJFRShoYXNodGJsLCB0eXBlKTsKK30KKwordm9p
ZAorc2N0cF9oYXNoZnJlZWRlc3Ryb3kodm9pZCAqdmhhc2h0YmwsIHN0cnVjdCBtYWxsb2NfdHlw
ZSAqdHlwZSwgdV9sb25nIGhhc2htYXNrKQoreworCUxJU1RfSEVBRChnZW5lcmljLCBnZW5lcmlj
KSAqaGFzaHRibC8qLCAqaHAqLzsKKwkvKgorCUxJU1RfRU5UUlkodHlwZSkgKnN0YXJ0LCAqdGVt
cDsKKwkgKi8KKwloYXNodGJsID0gdmhhc2h0Ymw7CisJLyogQXBwYXJlbnRseSB0ZW1wIGlzIG5v
dCBkeW5hbWljYWxseSBhbGxvY2F0ZWQsIHNvIGF0dGVtcHRzIHRvCisJICAgZnJlZSBpdCByZXN1
bHRzIGluIGVycm9yLgorCWZvciAoaHAgPSBoYXNodGJsOyBocCA8PSAmaGFzaHRibFtoYXNobWFz
a107IGhwKyspCisJCWlmICghTElTVF9FTVBUWShocCkpIHsKKwkJCXN0YXJ0ID0gTElTVF9GSVJT
VChocCk7CisJCQl3aGlsZSAoc3RhcnQgIT0gTlVMTCkgeworCQkJCXRlbXAgPSBzdGFydDsKKwkJ
CQlzdGFydCA9IHN0YXJ0LT5sZV9uZXh0OworCQkJCVNDVFBfUFJJTlRGKCIlczogJXAgXG4iLCBf
X2Z1bmNfXywgKHZvaWQgKil0ZW1wKTsKKwkJCQlGUkVFKHRlbXAsIHR5cGUpOworCQkJfQorCQl9
CisJICovCisJRlJFRShoYXNodGJsLCB0eXBlKTsKK30KKworI2VuZGlmCitpbnQKK3NjdHBfY29u
bmVjdHhfaGVscGVyX2FkZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzb2NrYWRkciAq
YWRkciwKKwkJCSBpbnQgdG90YWRkciwgaW50ICplcnJvcikKK3sKKwlpbnQgYWRkZWQgPSAwOwor
CWludCBpOworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJc3RydWN0IHNvY2thZGRyICpzYTsK
KwlzaXplX3QgaW5jciA9IDA7CisjaWZkZWYgSU5FVAorCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2lu
OworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworI2Vu
ZGlmCisKKwlzYSA9IGFkZHI7CisJaW5wID0gc3RjYi0+c2N0cF9lcDsKKwkqZXJyb3IgPSAwOwor
CWZvciAoaSA9IDA7IGkgPCB0b3RhZGRyOyBpKyspIHsKKwkJc3dpdGNoIChzYS0+c2FfZmFtaWx5
KSB7CisjaWZkZWYgSU5FVAorCQljYXNlIEFGX0lORVQ6CisJCQlpbmNyID0gc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbik7CisJCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopc2E7CisJCQlp
ZiAoKHNpbi0+c2luX2FkZHIuc19hZGRyID09IElOQUREUl9BTlkpIHx8CisJCQkgICAgKHNpbi0+
c2luX2FkZHIuc19hZGRyID09IElOQUREUl9CUk9BRENBU1QpIHx8CisJCQkgICAgSU5fTVVMVElD
QVNUKG50b2hsKHNpbi0+c2luX2FkZHIuc19hZGRyKSkpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsKKwkJCQko
dm9pZClzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAorCQkJCSAg
ICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUFVUSUwgKyBTQ1RQX0xPQ183KTsKKwkJ
CQkqZXJyb3IgPSBFSU5WQUw7CisJCQkJZ290byBvdXRfbm93OworCQkJfQorCQkJaWYgKHNjdHBf
YWRkX3JlbW90ZV9hZGRyKHN0Y2IsIHNhLCBOVUxMLCBzdGNiLT5hc29jLnBvcnQsCisJCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgU0NUUF9ET05PVF9TRVRTQ09QRSwKKwkJCSAgICAgICAgICAg
ICAgICAgICAgICAgICBTQ1RQX0FERFJfSVNfQ09ORklSTUVEKSkgeworCQkJCS8qIGFzc29jIGdv
bmUgbm8gdW4tbG9jayAqLworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFTk9CVUZTKTsKKwkJCQkodm9pZClzY3RwX2ZyZWVfYXNz
b2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAorCQkJCSAgICAgICAgICAgICAgICAgICAg
ICBTQ1RQX0ZST01fU0NUUFVUSUwgKyBTQ1RQX0xPQ184KTsKKwkJCQkqZXJyb3IgPSBFTk9CVUZT
OworCQkJCWdvdG8gb3V0X25vdzsKKwkJCX0KKwkJCWFkZGVkKys7CisJCQlicmVhazsKKyNlbmRp
ZgorI2lmZGVmIElORVQ2CisJCWNhc2UgQUZfSU5FVDY6CisJCQlpbmNyID0gc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbjYpOworCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2E7CisJ
CQlpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRkcikgfHwKKwkJCSAg
ICBJTjZfSVNfQUREUl9NVUxUSUNBU1QoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFM
KTsKKwkJCQkodm9pZClzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9D
LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUFVUSUwgKyBTQ1RQX0xP
Q185KTsKKwkJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQkJZ290byBvdXRfbm93OworCQkJfQorCQkJ
aWYgKHNjdHBfYWRkX3JlbW90ZV9hZGRyKHN0Y2IsIHNhLCBOVUxMLCBzdGNiLT5hc29jLnBvcnQs
CisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9ET05PVF9TRVRTQ09QRSwKKwkJCSAg
ICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0FERFJfSVNfQ09ORklSTUVEKSkgeworCQkJCS8q
IGFzc29jIGdvbmUgbm8gdW4tbG9jayAqLworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwg
c3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFTk9CVUZTKTsKKwkJCQkodm9pZClzY3Rw
X2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAorCQkJCSAgICAgICAgICAg
ICAgICAgICAgICBTQ1RQX0ZST01fU0NUUFVUSUwgKyBTQ1RQX0xPQ18xMCk7CisJCQkJKmVycm9y
ID0gRU5PQlVGUzsKKwkJCQlnb3RvIG91dF9ub3c7CisJCQl9CisJCQlhZGRlZCsrOworCQkJYnJl
YWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWNhc2UgQUZfQ09OTjoK
KwkJCWluY3IgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOworCQkJaWYgKHNjdHBfYWRk
X3JlbW90ZV9hZGRyKHN0Y2IsIHNhLCBOVUxMLCBzdGNiLT5hc29jLnBvcnQsCisJCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgU0NUUF9ET05PVF9TRVRTQ09QRSwKKwkJCSAgICAgICAgICAgICAg
ICAgICAgICAgICBTQ1RQX0FERFJfSVNfQ09ORklSTUVEKSkgeworCQkJCS8qIGFzc29jIGdvbmUg
bm8gdW4tbG9jayAqLworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBVVElMLCBFTk9CVUZTKTsKKwkJCQkodm9pZClzY3RwX2ZyZWVfYXNzb2Mo
aW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICBT
Q1RQX0ZST01fU0NUUFVUSUwgKyBTQ1RQX0xPQ18xMSk7CisJCQkJKmVycm9yID0gRU5PQlVGUzsK
KwkJCQlnb3RvIG91dF9ub3c7CisJCQl9CisJCQlhZGRlZCsrOworCQkJYnJlYWs7CisjZW5kaWYK
KwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSgo
Y2FkZHJfdClzYSArIGluY3IpOworCX0KKyBvdXRfbm93OgorCXJldHVybiAoYWRkZWQpOworfQor
CitpbnQKK3NjdHBfY29ubmVjdHhfaGVscGVyX2ZpbmQoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwg
c3RydWN0IHNvY2thZGRyICphZGRyLAorCQkJICB1bnNpZ25lZCBpbnQgdG90YWRkciwKKwkJCSAg
dW5zaWduZWQgaW50ICpudW1fdjQsIHVuc2lnbmVkIGludCAqbnVtX3Y2LAorCQkJICB1bnNpZ25l
ZCBpbnQgbGltaXQpCit7CisJc3RydWN0IHNvY2thZGRyICpzYTsKKwlzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2I7CisJdW5zaWduZWQgaW50IGluY3IsIGF0LCBpOworCisJYXQgPSAwOworCXNhID0gYWRk
cjsKKwkqbnVtX3Y2ID0gKm51bV92NCA9IDA7CisJLyogYWNjb3VudCBhbmQgdmFsaWRhdGUgYWRk
cmVzc2VzICovCisJaWYgKHRvdGFkZHIgPT0gMCkgeworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQor
CWZvciAoaSA9IDA7IGkgPCB0b3RhZGRyOyBpKyspIHsKKwkJaWYgKGF0ICsgc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcikgPiBsaW1pdCkgeworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisJCXN3aXRj
aCAoc2EtPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJY2FzZSBBRl9JTkVUOgorCQkJaW5j
ciA9ICh1bnNpZ25lZCBpbnQpc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjaWZkZWYgSEFW
RV9TQV9MRU4KKwkJCWlmIChzYS0+c2FfbGVuICE9IGluY3IpIHsKKwkJCQlyZXR1cm4gKEVJTlZB
TCk7CisJCQl9CisjZW5kaWYKKwkJCSgqbnVtX3Y0KSArPSAxOworCQkJYnJlYWs7CisjZW5kaWYK
KyNpZmRlZiBJTkVUNgorCQljYXNlIEFGX0lORVQ2OgorCQl7CisJCQlzdHJ1Y3Qgc29ja2FkZHJf
aW42ICpzaW42OworCisJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYTsKKwkJCWlm
IChJTjZfSVNfQUREUl9WNE1BUFBFRCgmc2luNi0+c2luNl9hZGRyKSkgeworCQkJCS8qIE11c3Qg
YmUgbm9uLW1hcHBlZCBmb3IgY29ubmVjdHggKi8KKwkJCQlyZXR1cm4gKEVJTlZBTCk7CisJCQl9
CisJCQlpbmNyID0gKHVuc2lnbmVkIGludClzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Cisj
aWZkZWYgSEFWRV9TQV9MRU4KKwkJCWlmIChzYS0+c2FfbGVuICE9IGluY3IpIHsKKwkJCQlyZXR1
cm4gKEVJTlZBTCk7CisJCQl9CisjZW5kaWYKKwkJCSgqbnVtX3Y2KSArPSAxOworCQkJYnJlYWs7
CisJCX0KKyNlbmRpZgorCQlkZWZhdWx0OgorCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisJCWlm
ICgoYXQgKyBpbmNyKSA+IGxpbWl0KSB7CisJCQlyZXR1cm4gKEVJTlZBTCk7CisJCX0KKwkJU0NU
UF9JTlBfSU5DUl9SRUYoaW5wKTsKKwkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2Fk
ZHIoJmlucCwgc2EsIE5VTEwsIE5VTEwsIE5VTEwpOworCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJ
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQlyZXR1cm4gKEVBTFJFQURZKTsKKwkJfSBlbHNl
IHsKKwkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCX0KKwkJYXQgKz0gaW5jcjsKKwkJc2Eg
PSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KXNhICsgaW5jcik7CisJfQorCXJldHVybiAo
MCk7Cit9CisKKy8qCisgKiBzY3RwX2JpbmR4KEFERCkgZm9yIG9uZSBhZGRyZXNzLgorICogYXNz
dW1lcyBhbGwgYXJndW1lbnRzIGFyZSB2YWxpZC9jaGVja2VkIGJ5IGNhbGxlci4KKyAqLwordm9p
ZAorc2N0cF9iaW5keF9hZGRfYWRkcmVzcyhzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNjdHBf
aW5wY2IgKmlucCwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpzYSwg
dWludDMyX3QgdnJmX2lkLCBpbnQgKmVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICB2b2lk
ICpwKQoreworI2lmIGRlZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJTkVUNikKKwlzdHJ1Y3Qgc29j
a2FkZHJfaW4gc2luOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42
ICpzaW42OworI2VuZGlmCisjaWZkZWYgSU5FVAorCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2lucDsK
KyNlbmRpZgorCXN0cnVjdCBzb2NrYWRkciAqYWRkcl90b191c2U7CisJc3RydWN0IHNjdHBfaW5w
Y2IgKmxlcDsKKyNpZmRlZiBTQ1RQX01WUkYKKwlpbnQgaTsKKyNlbmRpZgorCXVpbnQxNl90IHBv
cnQ7CisKKwkvKiBzZWUgaWYgd2UncmUgYm91bmQgYWxsIGFscmVhZHkhICovCisJaWYgKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSB7CisJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7CisJCSpl
cnJvciA9IEVJTlZBTDsKKwkJcmV0dXJuOworCX0KKyNpZmRlZiBTQ1RQX01WUkYKKwkvKiBJcyB0
aGUgVlJGIG9uZSB3ZSBoYXZlICovCisJZm9yIChpID0gMDsgaSA8IGlucC0+bnVtX3ZyZnM7IGkr
KykgeworCQlpZiAodnJmX2lkID09IGlucC0+bV92cmZfaWRzW2ldKSB7CisJCQlicmVhazsKKwkJ
fQorCX0KKwlpZiAoaSA9PSBpbnAtPm51bV92cmZzKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7CisJCSplcnJvciA9
IEVJTlZBTDsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkg
eworI2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKyNpZmRlZiBIQVZFX1NBX0xFTgorCQlp
ZiAoc2EtPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIHsKKwkJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZB
TCk7CisJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQlyZXR1cm47CisJCX0KKyNlbmRpZgorCQlpZiAo
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSA9PSAwKSB7CisJCQkv
KiBjYW4gb25seSBiaW5kIHY2IG9uIFBGX0lORVQ2IHNvY2tldHMgKi8KKwkJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7CisJ
CQkqZXJyb3IgPSBFSU5WQUw7CisJCQlyZXR1cm47CisJCX0KKwkJc2luNiA9IChzdHJ1Y3Qgc29j
a2FkZHJfaW42ICopc2E7CisJCXBvcnQgPSBzaW42LT5zaW42X3BvcnQ7CisjaWZkZWYgSU5FVAor
CQlpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCWlmICgo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpICYmCisJCQkgICAgU0NU
UF9JUFY2X1Y2T05MWShpbnApKSB7CisJCQkJLyogY2FuJ3QgYmluZCB2NC1tYXBwZWQgb24gUEZf
SU5FVCBzb2NrZXRzICovCisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsKKwkJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQkJ
cmV0dXJuOworCQkJfQorCQkJaW42X3NpbjZfMl9zaW4oJnNpbiwgc2luNik7CisJCQlhZGRyX3Rv
X3VzZSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luOworCQl9IGVsc2UgeworCQkJYWRkcl90b191
c2UgPSBzYTsKKwkJfQorI2Vsc2UKKwkJYWRkcl90b191c2UgPSBzYTsKKyNlbmRpZgorCQlicmVh
azsKKyNlbmRpZgorI2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisjaWZkZWYgSEFWRV9TQV9M
RU4KKwkJaWYgKHNhLT5zYV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIHsKKwkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUws
IEVJTlZBTCk7CisJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQlyZXR1cm47CisJCX0KKyNlbmRpZgor
CQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSAmJgorCQkg
ICAgU0NUUF9JUFY2X1Y2T05MWShpbnApKSB7CisJCQkvKiBjYW4ndCBiaW5kIHY0IG9uIFBGX0lO
RVQgc29ja2V0cyAqLworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsKKwkJCSplcnJvciA9IEVJTlZBTDsKKwkJCXJldHVy
bjsKKwkJfQorCQlzaW5wID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhOworCQlwb3J0ID0gc2lu
cC0+c2luX3BvcnQ7CisJCWFkZHJfdG9fdXNlID0gc2E7CisJCWJyZWFrOworI2VuZGlmCisJZGVm
YXVsdDoKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQVVRJTCwgRUlOVkFMKTsKKwkJKmVycm9yID0gRUlOVkFMOworCQlyZXR1cm47CisJfQorCWlm
IChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VTkJPVU5EKSB7CisjaWYgIShkZWZp
bmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkKKwkJaWYgKHAgPT0gTlVMTCkg
eworCQkJLyogQ2FuJ3QgZ2V0IHByb2MgZm9yIE5ldC9PcGVuIEJTRCAqLworCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsK
KwkJCSplcnJvciA9IEVJTlZBTDsKKwkJCXJldHVybjsKKwkJfQorI2VuZGlmCisJCSplcnJvciA9
IHNjdHBfaW5wY2JfYmluZChzbywgYWRkcl90b191c2UsIE5VTEwsIHApOworCQlyZXR1cm47CisJ
fQorCS8qIFZhbGlkYXRlIHRoZSBpbmNvbWluZyBwb3J0LiAqLworCWlmICgocG9ydCAhPSAwKSAm
JiAocG9ydCAhPSBpbnAtPnNjdHBfbHBvcnQpKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7CisJCSplcnJvciA9IEVJ
TlZBTDsKKwkJcmV0dXJuOworCX0KKwlsZXAgPSBzY3RwX3BjYl9maW5kZXAoYWRkcl90b191c2Us
IDEsIDAsIHZyZl9pZCk7CisJaWYgKGxlcCA9PSBOVUxMKSB7CisJCS8qIGFkZCB0aGUgYWRkcmVz
cyAqLworCQkqZXJyb3IgPSBzY3RwX2FkZHJfbWdtdF9lcF9zYShpbnAsIGFkZHJfdG9fdXNlLAor
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0FERF9JUF9BRERSRVNTLCB2cmZf
aWQpOworCX0gZWxzZSB7CisJCWlmIChsZXAgIT0gaW5wKSB7CisJCQkqZXJyb3IgPSBFQUREUklO
VVNFOworCQl9CisJCVNDVFBfSU5QX0RFQ1JfUkVGKGxlcCk7CisJfQorfQorCisvKgorICogc2N0
cF9iaW5keChERUxFVEUpIGZvciBvbmUgYWRkcmVzcy4KKyAqIGFzc3VtZXMgYWxsIGFyZ3VtZW50
cyBhcmUgdmFsaWQvY2hlY2tlZCBieSBjYWxsZXIuCisgKi8KK3ZvaWQKK3NjdHBfYmluZHhfZGVs
ZXRlX2FkZHJlc3Moc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHNvY2thZGRyICpzYSwgdWludDMyX3QgdnJmX2lkLCBpbnQgKmVycm9yKQor
eworCXN0cnVjdCBzb2NrYWRkciAqYWRkcl90b191c2U7CisjaWYgZGVmaW5lZChJTkVUKSAmJiBk
ZWZpbmVkKElORVQ2KQorCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisJc3RydWN0IHNvY2th
ZGRyX2luIHNpbjsKKyNlbmRpZgorI2lmZGVmIFNDVFBfTVZSRgorCWludCBpOworI2VuZGlmCisK
KwkvKiBzZWUgaWYgd2UncmUgYm91bmQgYWxsIGFscmVhZHkhICovCisJaWYgKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7CisJCSplcnJvciA9
IEVJTlZBTDsKKwkJcmV0dXJuOworCX0KKyNpZmRlZiBTQ1RQX01WUkYKKwkvKiBJcyB0aGUgVlJG
IG9uZSB3ZSBoYXZlICovCisJZm9yIChpID0gMDsgaSA8IGlucC0+bnVtX3ZyZnM7IGkrKykgewor
CQlpZiAodnJmX2lkID09IGlucC0+bV92cmZfaWRzW2ldKSB7CisJCQlicmVhazsKKwkJfQorCX0K
KwlpZiAoaSA9PSBpbnAtPm51bV92cmZzKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7CisJCSplcnJvciA9IEVJTlZB
TDsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgeworI2lm
ZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKyNpZmRlZiBIQVZFX1NBX0xFTgorCQlpZiAoc2Et
PnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIHsKKwkJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7CisJ
CQkqZXJyb3IgPSBFSU5WQUw7CisJCQlyZXR1cm47CisJCX0KKyNlbmRpZgorCQlpZiAoKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSA9PSAwKSB7CisJCQkvKiBjYW4g
b25seSBiaW5kIHY2IG9uIFBGX0lORVQ2IHNvY2tldHMgKi8KKwkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7CisJCQkqZXJy
b3IgPSBFSU5WQUw7CisJCQlyZXR1cm47CisJCX0KKyNpZmRlZiBJTkVUCisJCXNpbjYgPSAoc3Ry
dWN0IHNvY2thZGRyX2luNiAqKXNhOworCQlpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJnNpbjYt
PnNpbjZfYWRkcikpIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
Qk9VTkRfVjYpICYmCisJCQkgICAgU0NUUF9JUFY2X1Y2T05MWShpbnApKSB7CisJCQkJLyogY2Fu
J3QgYmluZCBtYXBwZWQtdjQgb24gUEZfSU5FVCBzb2NrZXRzICovCisJCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsKKwkJ
CQkqZXJyb3IgPSBFSU5WQUw7CisJCQkJcmV0dXJuOworCQkJfQorCQkJaW42X3NpbjZfMl9zaW4o
JnNpbiwgc2luNik7CisJCQlhZGRyX3RvX3VzZSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luOwor
CQl9IGVsc2UgeworCQkJYWRkcl90b191c2UgPSBzYTsKKwkJfQorI2Vsc2UKKwkJYWRkcl90b191
c2UgPSBzYTsKKyNlbmRpZgorCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQKKwljYXNlIEFG
X0lORVQ6CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJaWYgKHNhLT5zYV9sZW4gIT0gc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbikpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7CisJCQkqZXJyb3IgPSBFSU5WQUw7CisJ
CQlyZXR1cm47CisJCX0KKyNlbmRpZgorCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX0JPVU5EX1Y2KSAmJgorCQkgICAgU0NUUF9JUFY2X1Y2T05MWShpbnApKSB7CisJCQkv
KiBjYW4ndCBiaW5kIHY0IG9uIFBGX0lORVQgc29ja2V0cyAqLworCQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsKKwkJCSpl
cnJvciA9IEVJTlZBTDsKKwkJCXJldHVybjsKKwkJfQorCQlhZGRyX3RvX3VzZSA9IHNhOworCQli
cmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7CisJCSplcnJvciA9IEVJTlZBTDsK
KwkJcmV0dXJuOworCX0KKwkvKiBObyBsb2NrIHJlcXVpcmVkIG1nbXRfZXBfc2EgZG9lcyBpdHMg
b3duIGxvY2tpbmcuICovCisJKmVycm9yID0gc2N0cF9hZGRyX21nbXRfZXBfc2EoaW5wLCBhZGRy
X3RvX3VzZSwgU0NUUF9ERUxfSVBfQUREUkVTUywKKwkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2cmZfaWQpOworfQorCisvKgorICogcmV0dXJucyB0aGUgdmFsaWQgbG9jYWwgYWRkcmVz
cyBjb3VudCBmb3IgYW4gYXNzb2MsIHRha2luZyBpbnRvIGFjY291bnQKKyAqIGFsbCBzY29waW5n
IHJ1bGVzCisgKi8KK2ludAorc2N0cF9sb2NhbF9hZGRyX2NvdW50KHN0cnVjdCBzY3RwX3RjYiAq
c3RjYikKK3sKKwlpbnQgbG9vcGJhY2tfc2NvcGU7CisjaWYgZGVmaW5lZChJTkVUKQorCWludCBp
cHY0X2xvY2FsX3Njb3BlLCBpcHY0X2FkZHJfbGVnYWw7CisjZW5kaWYKKyNpZiBkZWZpbmVkKElO
RVQ2KQorCWludCBsb2NhbF9zY29wZSwgc2l0ZV9zY29wZSwgaXB2Nl9hZGRyX2xlZ2FsOworI2Vu
ZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWludCBjb25uX2FkZHJfbGVnYWw7Cisj
ZW5kaWYKKwlzdHJ1Y3Qgc2N0cF92cmYgKnZyZjsKKwlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZu
OworCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmE7CisJaW50IGNvdW50ID0gMDsKKworCS8qIFR1
cm4gb24gYWxsIHRoZSBhcHByb3ByaWF0ZSBzY29wZXMgKi8KKwlsb29wYmFja19zY29wZSA9IHN0
Y2ItPmFzb2Muc2NvcGUubG9vcGJhY2tfc2NvcGU7CisjaWYgZGVmaW5lZChJTkVUKQorCWlwdjRf
bG9jYWxfc2NvcGUgPSBzdGNiLT5hc29jLnNjb3BlLmlwdjRfbG9jYWxfc2NvcGU7CisJaXB2NF9h
ZGRyX2xlZ2FsID0gc3RjYi0+YXNvYy5zY29wZS5pcHY0X2FkZHJfbGVnYWw7CisjZW5kaWYKKyNp
ZiBkZWZpbmVkKElORVQ2KQorCWxvY2FsX3Njb3BlID0gc3RjYi0+YXNvYy5zY29wZS5sb2NhbF9z
Y29wZTsKKwlzaXRlX3Njb3BlID0gc3RjYi0+YXNvYy5zY29wZS5zaXRlX3Njb3BlOworCWlwdjZf
YWRkcl9sZWdhbCA9IHN0Y2ItPmFzb2Muc2NvcGUuaXB2Nl9hZGRyX2xlZ2FsOworI2VuZGlmCisj
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWNvbm5fYWRkcl9sZWdhbCA9IHN0Y2ItPmFzb2Mu
c2NvcGUuY29ubl9hZGRyX2xlZ2FsOworI2VuZGlmCisJU0NUUF9JUElfQUREUl9STE9DSygpOwor
CXZyZiA9IHNjdHBfZmluZF92cmYoc3RjYi0+YXNvYy52cmZfaWQpOworCWlmICh2cmYgPT0gTlVM
TCkgeworCQkvKiBubyB2cmYsIG5vIGFkZHJlc3NlcyAqLworCQlTQ1RQX0lQSV9BRERSX1JVTkxP
Q0soKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSB7CisJCS8qCisJCSAqIGJvdW5kIGFsbCBjYXNl
OiBnbyB0aHJvdWdoIGFsbCBpZm5zIG9uIHRoZSB2cmYKKwkJICovCisJCUxJU1RfRk9SRUFDSChz
Y3RwX2lmbiwgJnZyZi0+aWZubGlzdCwgbmV4dF9pZm4pIHsKKwkJCWlmICgobG9vcGJhY2tfc2Nv
cGUgPT0gMCkgJiYKKwkJCSAgICBTQ1RQX0lGTl9JU19JRlRfTE9PUChzY3RwX2lmbikpIHsKKwkJ
CQljb250aW51ZTsKKwkJCX0KKwkJCUxJU1RfRk9SRUFDSChzY3RwX2lmYSwgJnNjdHBfaWZuLT5p
ZmFsaXN0LCBuZXh0X2lmYSkgeworCQkJCWlmIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNi
LCBzY3RwX2lmYSkpCisJCQkJCWNvbnRpbnVlOworCQkJCXN3aXRjaCAoc2N0cF9pZmEtPmFkZHJl
c3Muc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQkJCWNhc2UgQUZfSU5FVDoKKwkJCQkJ
aWYgKGlwdjRfYWRkcl9sZWdhbCkgeworCQkJCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisK
KwkJCQkJCXNpbiA9ICZzY3RwX2lmYS0+YWRkcmVzcy5zaW47CisJCQkJCQlpZiAoc2luLT5zaW5f
YWRkci5zX2FkZHIgPT0gMCkgeworCQkJCQkJCS8qIHNraXAgdW5zcGVjaWZpZWQgYWRkcnMgKi8K
KwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCQkJaWYgKHByaXNvbl9jaGVja19pcDQoc3RjYi0+
c2N0cF9lcC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKKwkJCQkJCSAgICAgICAgICAgICAgICAgICAg
ICZzaW4tPnNpbl9hZGRyKSAhPSAwKSB7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisjZW5k
aWYKKwkJCQkJCWlmICgoaXB2NF9sb2NhbF9zY29wZSA9PSAwKSAmJgorCQkJCQkJICAgIChJTjRf
SVNQUklWQVRFX0FERFJFU1MoJnNpbi0+c2luX2FkZHIpKSkgeworCQkJCQkJCWNvbnRpbnVlOwor
CQkJCQkJfQorCQkJCQkJLyogY291bnQgdGhpcyBvbmUgKi8KKwkJCQkJCWNvdW50Kys7CisJCQkJ
CX0gZWxzZSB7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlicmVhazsKKyNlbmRpZgor
I2lmZGVmIElORVQ2CisJCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQkJaWYgKGlwdjZfYWRkcl9sZWdh
bCkgeworCQkJCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKworI2lmIGRlZmluZWQoU0NU
UF9FTUJFRERFRF9WNl9TQ09QRSkgJiYgIWRlZmluZWQoU0NUUF9LQU1FKQorCQkJCQkJc3RydWN0
IHNvY2thZGRyX2luNiBsc2E2OworI2VuZGlmCisJCQkJCQlzaW42ID0gJnNjdHBfaWZhLT5hZGRy
ZXNzLnNpbjY7CisJCQkJCQlpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZf
YWRkcikpIHsKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCQkJaWYgKHByaXNvbl9jaGVja19p
cDYoc3RjYi0+c2N0cF9lcC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKKwkJCQkJCSAgICAgICAgICAg
ICAgICAgICAgICZzaW42LT5zaW42X2FkZHIpICE9IDApIHsKKwkJCQkJCQljb250aW51ZTsKKwkJ
CQkJCX0KKyNlbmRpZgorCQkJCQkJaWYgKElONl9JU19BRERSX0xJTktMT0NBTCgmc2luNi0+c2lu
Nl9hZGRyKSkgeworCQkJCQkJCWlmIChsb2NhbF9zY29wZSA9PSAwKQorCQkJCQkJCQljb250aW51
ZTsKKyNpZiBkZWZpbmVkKFNDVFBfRU1CRURERURfVjZfU0NPUEUpCisJCQkJCQkJaWYgKHNpbjYt
PnNpbjZfc2NvcGVfaWQgPT0gMCkgeworI2lmZGVmIFNDVFBfS0FNRQorCQkJCQkJCQlpZiAoc2E2
X3JlY292ZXJzY29wZShzaW42KSAhPSAwKQorCQkJCQkJCQkJLyoKKwkJCQkJCQkJCSAqIGJhZCBs
aW5rCisJCQkJCQkJCQkgKiBsb2NhbAorCQkJCQkJCQkJICogYWRkcmVzcworCQkJCQkJCQkJICov
CisJCQkJCQkJCQljb250aW51ZTsKKyNlbHNlCisJCQkJCQkJCWxzYTYgPSAqc2luNjsKKwkJCQkJ
CQkJaWYgKGluNl9yZWNvdmVyc2NvcGUoJmxzYTYsCisJCQkJCQkJCSAgICAgICAgICAgICAgICAg
ICAgICZsc2E2LnNpbjZfYWRkciwKKwkJCQkJCQkJICAgICAgICAgICAgICAgICAgICAgTlVMTCkp
CisJCQkJCQkJCQkvKgorCQkJCQkJCQkJICogYmFkIGxpbmsKKwkJCQkJCQkJCSAqIGxvY2FsCisJ
CQkJCQkJCQkgKiBhZGRyZXNzCisJCQkJCQkJCQkgKi8KKwkJCQkJCQkJCWNvbnRpbnVlOworCQkJ
CQkJCQlzaW42ID0gJmxzYTY7CisjZW5kaWYgLyogU0NUUF9LQU1FICovCisJCQkJCQkJfQorI2Vu
ZGlmIC8qIFNDVFBfRU1CRURERURfVjZfU0NPUEUgKi8KKwkJCQkJCX0KKwkJCQkJCWlmICgoc2l0
ZV9zY29wZSA9PSAwKSAmJgorCQkJCQkJICAgIChJTjZfSVNfQUREUl9TSVRFTE9DQUwoJnNpbjYt
PnNpbjZfYWRkcikpKSB7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisJCQkJCQkvKiBjb3Vu
dCB0aGlzIG9uZSAqLworCQkJCQkJY291bnQrKzsKKwkJCQkJfQorCQkJCQlicmVhazsKKyNlbmRp
ZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQljYXNlIEFGX0NPTk46CisJCQkJCWlm
IChjb25uX2FkZHJfbGVnYWwpIHsKKwkJCQkJCWNvdW50Kys7CisJCQkJCX0KKwkJCQkJYnJlYWs7
CisjZW5kaWYKKwkJCQlkZWZhdWx0OgorCQkJCQkvKiBUU05IICovCisJCQkJCWJyZWFrOworCQkJ
CX0KKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCS8qCisJCSAqIHN1YnNldCBib3VuZCBjYXNlCisJ
CSAqLworCQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7CisJCUxJU1RfRk9SRUFDSChsYWRkciwg
JnN0Y2ItPnNjdHBfZXAtPnNjdHBfYWRkcl9saXN0LAorCQkJICAgICBzY3RwX254dF9hZGRyKSB7
CisJCQlpZiAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgbGFkZHItPmlmYSkpIHsKKwkJ
CQljb250aW51ZTsKKwkJCX0KKwkJCS8qIGNvdW50IHRoaXMgb25lICovCisJCQljb3VudCsrOwor
CQl9CisJfQorCVNDVFBfSVBJX0FERFJfUlVOTE9DSygpOworCXJldHVybiAoY291bnQpOworfQor
CisjaWYgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKKwordm9pZAorc2N0cF9sb2dfdHJh
Y2UodWludDMyX3Qgc3Vic3lzLCBjb25zdCBjaGFyICpzdHIgU0NUUF9VTlVTRUQsIHVpbnQzMl90
IGEsIHVpbnQzMl90IGIsIHVpbnQzMl90IGMsIHVpbnQzMl90IGQsIHVpbnQzMl90IGUsIHVpbnQz
Ml90IGYpCit7CisJdWludDMyX3Qgc2F2ZWluZGV4LCBuZXdpbmRleDsKKworI2lmIGRlZmluZWQo
X1dJTjMyKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWlmIChTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfbG9nKSA9PSBOVUxMKSB7CisJCXJldHVybjsKKwl9CisJZG8geworCQlzYXZlaW5kZXgg
PSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKS0+aW5kZXg7CisJCWlmIChzYXZlaW5kZXggPj0g
U0NUUF9NQVhfTE9HR0lOR19TSVpFKSB7CisJCQluZXdpbmRleCA9IDE7CisJCX0gZWxzZSB7CisJ
CQluZXdpbmRleCA9IHNhdmVpbmRleCArIDE7CisJCX0KKwl9IHdoaWxlIChhdG9taWNfY21wc2V0
X2ludCgmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZyktPmluZGV4LCBzYXZlaW5kZXgsIG5ld2lu
ZGV4KSA9PSAwKTsKKwlpZiAoc2F2ZWluZGV4ID49IFNDVFBfTUFYX0xPR0dJTkdfU0laRSkgewor
CQlzYXZlaW5kZXggPSAwOworCX0KKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKS0+ZW50cnlb
c2F2ZWluZGV4XS50aW1lc3RhbXAgPSBTQ1RQX0dFVF9DWUNMRUNPVU5UOworCVNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9sb2cpLT5lbnRyeVtzYXZlaW5kZXhdLnN1YnN5cyA9IHN1YnN5czsKKwlTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbG9nKS0+ZW50cnlbc2F2ZWluZGV4XS5wYXJhbXNbMF0gPSBhOwor
CVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLT5lbnRyeVtzYXZlaW5kZXhdLnBhcmFtc1sxXSA9
IGI7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZyktPmVudHJ5W3NhdmVpbmRleF0ucGFyYW1z
WzJdID0gYzsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKS0+ZW50cnlbc2F2ZWluZGV4XS5w
YXJhbXNbM10gPSBkOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLT5lbnRyeVtzYXZlaW5k
ZXhdLnBhcmFtc1s0XSA9IGU7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZyktPmVudHJ5W3Nh
dmVpbmRleF0ucGFyYW1zWzVdID0gZjsKKyNlbHNlCisJZG8geworCQlzYXZlaW5kZXggPSBTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbG9nKS5pbmRleDsKKwkJaWYgKHNhdmVpbmRleCA+PSBTQ1RQX01B
WF9MT0dHSU5HX1NJWkUpIHsKKwkJCW5ld2luZGV4ID0gMTsKKwkJfSBlbHNlIHsKKwkJCW5ld2lu
ZGV4ID0gc2F2ZWluZGV4ICsgMTsKKwkJfQorCX0gd2hpbGUgKGF0b21pY19jbXBzZXRfaW50KCZT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKS5pbmRleCwgc2F2ZWluZGV4LCBuZXdpbmRleCkgPT0g
MCk7CisJaWYgKHNhdmVpbmRleCA+PSBTQ1RQX01BWF9MT0dHSU5HX1NJWkUpIHsKKwkJc2F2ZWlu
ZGV4ID0gMDsKKwl9CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZykuZW50cnlbc2F2ZWluZGV4
XS50aW1lc3RhbXAgPSBTQ1RQX0dFVF9DWUNMRUNPVU5UOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9sb2cpLmVudHJ5W3NhdmVpbmRleF0uc3Vic3lzID0gc3Vic3lzOworCVNDVFBfQkFTRV9TWVND
VEwoc2N0cF9sb2cpLmVudHJ5W3NhdmVpbmRleF0ucGFyYW1zWzBdID0gYTsKKwlTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfbG9nKS5lbnRyeVtzYXZlaW5kZXhdLnBhcmFtc1sxXSA9IGI7CisJU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2xvZykuZW50cnlbc2F2ZWluZGV4XS5wYXJhbXNbMl0gPSBjOworCVND
VFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLmVudHJ5W3NhdmVpbmRleF0ucGFyYW1zWzNdID0gZDsK
KwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKS5lbnRyeVtzYXZlaW5kZXhdLnBhcmFtc1s0XSA9
IGU7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZykuZW50cnlbc2F2ZWluZGV4XS5wYXJhbXNb
NV0gPSBmOworI2VuZGlmCit9CisKKyNlbmRpZgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYm
ICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitzdGF0aWMgdm9pZAorc2N0cF9yZWN2X3VkcF90dW5u
ZWxlZF9wYWNrZXQoc3RydWN0IG1idWYgKm0sIGludCBvZmYsIHN0cnVjdCBpbnBjYiAqaW5wLAor
ICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EgU0NUUF9VTlVTRUQsIHZvaWQgKmN0eCBTQ1RQ
X1VOVVNFRCkKK3sKKwlzdHJ1Y3QgaXAgKmlwaDsKKyNpZmRlZiBJTkVUNgorCXN0cnVjdCBpcDZf
aGRyICppcDY7CisjZW5kaWYKKwlzdHJ1Y3QgbWJ1ZiAqc3AsICpsYXN0OworCXN0cnVjdCB1ZHBo
ZHIgKnVoZHI7CisJdWludDE2X3QgcG9ydDsKKworCWlmICgobS0+bV9mbGFncyAmIE1fUEtUSERS
KSA9PSAwKSB7CisJCS8qIENhbid0IGhhbmRsZSBvbmUgdGhhdCBpcyBub3QgYSBwa3QgaGRyICov
CisJCWdvdG8gb3V0OworCX0KKwkvKiBQdWxsIHRoZSBzcmMgcG9ydCAqLworCWlwaCA9IG10b2Qo
bSwgc3RydWN0IGlwICopOworCXVoZHIgPSAoc3RydWN0IHVkcGhkciAqKSgoY2FkZHJfdClpcGgg
KyBvZmYpOworCXBvcnQgPSB1aGRyLT51aF9zcG9ydDsKKwkvKiBTcGxpdCBvdXQgdGhlIG1idWYg
Y2hhaW4uIExlYXZlIHRoZQorCSAqIElQIGhlYWRlciBpbiBtLCBwbGFjZSB0aGUKKwkgKiByZXN0
IGluIHRoZSBzcC4KKwkgKi8KKwlzcCA9IG1fc3BsaXQobSwgb2ZmLCBNX05PV0FJVCk7CisJaWYg
KHNwID09IE5VTEwpIHsKKwkJLyogR2FrLCBkcm9wIHBhY2tldCwgd2UgY2FuJ3QgZG8gYSBzcGxp
dCAqLworCQlnb3RvIG91dDsKKwl9CisJaWYgKHNwLT5tX3BrdGhkci5sZW4gPCBzaXplb2Yoc3Ry
dWN0IHVkcGhkcikgKyBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKSB7CisJCS8qIEdhaywgcGFja2V0
IGNhbid0IGhhdmUgYW4gU0NUUCBoZWFkZXIgaW4gaXQgLSB0b28gc21hbGwgKi8KKwkJbV9mcmVl
bShzcCk7CisJCWdvdG8gb3V0OworCX0KKwkvKiBOb3cgcHVsbCB1cCB0aGUgVURQIGhlYWRlciBh
bmQgU0NUUCBoZWFkZXIgdG9nZXRoZXIgKi8KKwlzcCA9IG1fcHVsbHVwKHNwLCBzaXplb2Yoc3Ry
dWN0IHVkcGhkcikgKyBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKTsKKwlpZiAoc3AgPT0gTlVMTCkg
eworCQkvKiBHYWsgcHVsbHVwIGZhaWxlZCAqLworCQlnb3RvIG91dDsKKwl9CisJLyogVHJpbSBv
dXQgdGhlIFVEUCBoZWFkZXIgKi8KKwltX2FkaihzcCwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsK
KworCS8qIE5vdyByZWNvbnN0cnVjdCB0aGUgbWJ1ZiBjaGFpbiAqLworCWZvciAobGFzdCA9IG07
IGxhc3QtPm1fbmV4dDsgbGFzdCA9IGxhc3QtPm1fbmV4dCk7CisJbGFzdC0+bV9uZXh0ID0gc3A7
CisJbS0+bV9wa3RoZHIubGVuICs9IHNwLT5tX3BrdGhkci5sZW47CisJLyoKKwkgKiBUaGUgQ1NV
TV9EQVRBX1ZBTElEIGZsYWdzIGluZGljYXRlcyB0aGF0IHRoZSBIVyBjaGVja2VkIHRoZQorCSAq
IFVEUCBjaGVja3N1bSBhbmQgaXQgd2FzIHZhbGlkLgorCSAqIFNpbmNlIENTVU1fREFUQV9WQUxJ
RCA9PSBDU1VNX1NDVFBfVkFMSUQgdGhpcyB3b3VsZCBpbXBseSB0aGF0CisJICogdGhlIEhXIGFs
c28gdmVyaWZpZWQgdGhlIFNDVFAgY2hlY2tzdW0uIFRoZXJlZm9yZSwgY2xlYXIgdGhlIGJpdC4K
KwkgKi8KKwlTQ1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZGTE9BRCwKKwkgICAgICAgICJzY3RwX3Jl
Y3ZfdWRwX3R1bm5lbGVkX3BhY2tldCgpOiBQYWNrZXQgb2YgbGVuZ3RoICVkIHJlY2VpdmVkIG9u
ICVzIHdpdGggY3N1bV9mbGFncyAweCViLlxuIiwKKwkgICAgICAgIG0tPm1fcGt0aGRyLmxlbiwK
KwkgICAgICAgIGlmX25hbWUobS0+bV9wa3RoZHIucmN2aWYpLAorCSAgICAgICAgKGludCltLT5t
X3BrdGhkci5jc3VtX2ZsYWdzLCBDU1VNX0JJVFMpOworCW0tPm1fcGt0aGRyLmNzdW1fZmxhZ3Mg
Jj0gfkNTVU1fREFUQV9WQUxJRDsKKwlpcGggPSBtdG9kKG0sIHN0cnVjdCBpcCAqKTsKKwlzd2l0
Y2ggKGlwaC0+aXBfdikgeworI2lmZGVmIElORVQKKwljYXNlIElQVkVSU0lPTjoKKwkJaXBoLT5p
cF9sZW4gPSBodG9ucyhudG9ocyhpcGgtPmlwX2xlbikgLSBzaXplb2Yoc3RydWN0IHVkcGhkcikp
OworCQlzY3RwX2lucHV0X3dpdGhfcG9ydChtLCBvZmYsIHBvcnQpOworCQlicmVhazsKKyNlbmRp
ZgorI2lmZGVmIElORVQ2CisJY2FzZSBJUFY2X1ZFUlNJT04gPj4gNDoKKwkJaXA2ID0gbXRvZCht
LCBzdHJ1Y3QgaXA2X2hkciAqKTsKKwkJaXA2LT5pcDZfcGxlbiA9IGh0b25zKG50b2hzKGlwNi0+
aXA2X3BsZW4pIC0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsKKwkJc2N0cDZfaW5wdXRfd2l0aF9w
b3J0KCZtLCAmb2ZmLCBwb3J0KTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlnb3Rv
IG91dDsKKwkJYnJlYWs7CisJfQorCXJldHVybjsKKyBvdXQ6CisJbV9mcmVlbShtKTsKK30KKwor
I2lmZGVmIElORVQKK3N0YXRpYyB2b2lkCitzY3RwX3JlY3ZfaWNtcF90dW5uZWxlZF9wYWNrZXQo
aW50IGNtZCwgc3RydWN0IHNvY2thZGRyICpzYSwgdm9pZCAqdmlwLCB2b2lkICpjdHggU0NUUF9V
TlVTRUQpCit7CisJc3RydWN0IGlwICpvdXRlcl9pcCwgKmlubmVyX2lwOworCXN0cnVjdCBzY3Rw
aGRyICpzaDsKKwlzdHJ1Y3QgaWNtcCAqaWNtcDsKKwlzdHJ1Y3QgdWRwaGRyICp1ZHA7CisJc3Ry
dWN0IHNjdHBfaW5wY2IgKmlucDsKKwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7CisJc3RydWN0IHNj
dHBfbmV0cyAqbmV0OworCXN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKmNoOworCXN0cnVjdCBzb2Nr
YWRkcl9pbiBzcmMsIGRzdDsKKwl1aW50OF90IHR5cGUsIGNvZGU7CisKKwlpbm5lcl9pcCA9IChz
dHJ1Y3QgaXAgKil2aXA7CisJaWNtcCA9IChzdHJ1Y3QgaWNtcCAqKSgoY2FkZHJfdClpbm5lcl9p
cCAtCisJICAgIChzaXplb2Yoc3RydWN0IGljbXApIC0gc2l6ZW9mKHN0cnVjdCBpcCkpKTsKKwlv
dXRlcl9pcCA9IChzdHJ1Y3QgaXAgKikoKGNhZGRyX3QpaWNtcCAtIHNpemVvZihzdHJ1Y3QgaXAp
KTsKKwlpZiAobnRvaHMob3V0ZXJfaXAtPmlwX2xlbikgPAorCSAgICBzaXplb2Yoc3RydWN0IGlw
KSArIDggKyAoaW5uZXJfaXAtPmlwX2hsIDw8IDIpICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICsg
OCkgeworCQlyZXR1cm47CisJfQorCXVkcCA9IChzdHJ1Y3QgdWRwaGRyICopKChjYWRkcl90KWlu
bmVyX2lwICsgKGlubmVyX2lwLT5pcF9obCA8PCAyKSk7CisJc2ggPSAoc3RydWN0IHNjdHBoZHIg
KikodWRwICsgMSk7CisJbWVtc2V0KCZzcmMsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4p
KTsKKwlzcmMuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJc3Jj
LnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCXNyYy5zaW5f
cG9ydCA9IHNoLT5zcmNfcG9ydDsKKwlzcmMuc2luX2FkZHIgPSBpbm5lcl9pcC0+aXBfc3JjOwor
CW1lbXNldCgmZHN0LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJZHN0LnNpbl9m
YW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCWRzdC5zaW5fbGVuID0gc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwlkc3Quc2luX3BvcnQgPSBzaC0+ZGVz
dF9wb3J0OworCWRzdC5zaW5fYWRkciA9IGlubmVyX2lwLT5pcF9kc3Q7CisJLyoKKwkgKiAnZHN0
JyBob2xkcyB0aGUgZGVzdCBvZiB0aGUgcGFja2V0IHRoYXQgZmFpbGVkIHRvIGJlIHNlbnQuCisJ
ICogJ3NyYycgaG9sZHMgb3VyIGxvY2FsIGVuZHBvaW50IGFkZHJlc3MuIFRodXMgd2UgcmV2ZXJz
ZQorCSAqIHRoZSBkc3QgYW5kIHRoZSBzcmMgaW4gdGhlIGxvb2t1cC4KKwkgKi8KKwlpbnAgPSBO
VUxMOworCW5ldCA9IE5VTEw7CisJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2FkZHJfc2Eo
KHN0cnVjdCBzb2NrYWRkciAqKSZkc3QsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzcmMsCisJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJmlucCwgJm5ldCwgMSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTQ1RQX0RFRkFVTFRfVlJGSUQpOworCWlmICgoc3RjYiAhPSBOVUxMKSAmJgorCSAg
ICAobmV0ICE9IE5VTEwpICYmCisJICAgIChpbnAgIT0gTlVMTCkpIHsKKwkJLyogQ2hlY2sgdGhl
IFVEUCBwb3J0IG51bWJlcnMgKi8KKwkJaWYgKCh1ZHAtPnVoX2Rwb3J0ICE9IG5ldC0+cG9ydCkg
fHwKKwkJICAgICh1ZHAtPnVoX3Nwb3J0ICE9IGh0b25zKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF91
ZHBfdHVubmVsaW5nX3BvcnQpKSkpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCXJl
dHVybjsKKwkJfQorCQkvKiBDaGVjayB0aGUgdmVyaWZpY2F0aW9uIHRhZyAqLworCQlpZiAobnRv
aGwoc2gtPnZfdGFnKSAhPSAwKSB7CisJCQkvKgorCQkJICogVGhpcyBtdXN0IGJlIHRoZSB2ZXJp
ZmljYXRpb24gdGFnIHVzZWQKKwkJCSAqIGZvciBzZW5kaW5nIG91dCBwYWNrZXRzLiBXZSBkb24n
dAorCQkJICogY29uc2lkZXIgcGFja2V0cyByZWZsZWN0aW5nIHRoZQorCQkJICogdmVyaWZpY2F0
aW9uIHRhZy4KKwkJCSAqLworCQkJaWYgKG50b2hsKHNoLT52X3RhZykgIT0gc3RjYi0+YXNvYy5w
ZWVyX3Z0YWcpIHsKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJcmV0dXJuOworCQkJ
fQorCQl9IGVsc2UgeworCQkJaWYgKG50b2hzKG91dGVyX2lwLT5pcF9sZW4pID49CisJCQkgICAg
c2l6ZW9mKHN0cnVjdCBpcCkgKworCQkJICAgIDggKyAoaW5uZXJfaXAtPmlwX2hsIDw8IDIpICsg
OCArIDIwKSB7CisJCQkJLyoKKwkJCQkgKiBJbiB0aGlzIGNhc2Ugd2UgY2FuIGNoZWNrIGlmIHdl
CisJCQkJICogZ290IGFuIElOSVQgY2h1bmsgYW5kIGlmIHRoZQorCQkJCSAqIGluaXRpYXRlIHRh
ZyBtYXRjaGVzLgorCQkJCSAqLworCQkJCWNoID0gKHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKiko
c2ggKyAxKTsKKwkJCQlpZiAoKGNoLT5jaC5jaHVua190eXBlICE9IFNDVFBfSU5JVElBVElPTikg
fHwKKwkJCQkgICAgKG50b2hsKGNoLT5pbml0LmluaXRpYXRlX3RhZykgIT0gc3RjYi0+YXNvYy5t
eV92dGFnKSkgeworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCXJldHVybjsKKwkJ
CQl9CisJCQl9IGVsc2UgeworCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQlyZXR1cm47
CisJCQl9CisJCX0KKwkJdHlwZSA9IGljbXAtPmljbXBfdHlwZTsKKwkJY29kZSA9IGljbXAtPmlj
bXBfY29kZTsKKwkJaWYgKCh0eXBlID09IElDTVBfVU5SRUFDSCkgJiYKKwkJICAgIChjb2RlID09
IElDTVBfVU5SRUFDSF9QT1JUKSkgeworCQkJY29kZSA9IElDTVBfVU5SRUFDSF9QUk9UT0NPTDsK
KwkJfQorCQlzY3RwX25vdGlmeShpbnAsIHN0Y2IsIG5ldCwgdHlwZSwgY29kZSwKKwkJICAgICAg
ICAgICAgbnRvaHMoaW5uZXJfaXAtPmlwX2xlbiksCisJCSAgICAgICAgICAgICh1aW50MzJfdClu
dG9ocyhpY21wLT5pY21wX25leHRtdHUpKTsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJ
CWlmICghKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRf
R09ORSkgJiYKKwkJICAgIChzdGNiLT5zY3RwX3NvY2tldCAhPSBOVUxMKSkgeworCQkJc3RydWN0
IHNvY2tldCAqdXBjYWxsX3NvY2tldDsKKworCQkJdXBjYWxsX3NvY2tldCA9IHN0Y2ItPnNjdHBf
c29ja2V0OworCQkJU09DS19MT0NLKHVwY2FsbF9zb2NrZXQpOworCQkJc29yZWYodXBjYWxsX3Nv
Y2tldCk7CisJCQlTT0NLX1VOTE9DSyh1cGNhbGxfc29ja2V0KTsKKwkJCWlmICgodXBjYWxsX3Nv
Y2tldC0+c29fdXBjYWxsICE9IE5VTEwpICYmCisJCQkgICAgKHVwY2FsbF9zb2NrZXQtPnNvX2Vy
cm9yICE9IDApKSB7CisJCQkJKCp1cGNhbGxfc29ja2V0LT5zb191cGNhbGwpKHVwY2FsbF9zb2Nr
ZXQsIHVwY2FsbF9zb2NrZXQtPnNvX3VwY2FsbGFyZywgTV9OT1dBSVQpOworCQkJfQorCQkJQUND
RVBUX0xPQ0soKTsKKwkJCVNPQ0tfTE9DSyh1cGNhbGxfc29ja2V0KTsKKwkJCXNvcmVsZSh1cGNh
bGxfc29ja2V0KTsKKwkJfQorI2VuZGlmCisJfSBlbHNlIHsKKwkJaWYgKChzdGNiID09IE5VTEwp
ICYmIChpbnAgIT0gTlVMTCkpIHsKKwkJCS8qIHJlZHVjZSByZWYtY291bnQgKi8KKwkJCVNDVFBf
SU5QX1dMT0NLKGlucCk7CisJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCQkJU0NUUF9JTlBf
V1VOTE9DSyhpbnApOworCQl9CisJCWlmIChzdGNiKSB7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7CisJCX0KKwl9CisJcmV0dXJuOworfQorI2VuZGlmCisKKyNpZmRlZiBJTkVUNgorc3RhdGlj
IHZvaWQKK3NjdHBfcmVjdl9pY21wNl90dW5uZWxlZF9wYWNrZXQoaW50IGNtZCwgc3RydWN0IHNv
Y2thZGRyICpzYSwgdm9pZCAqZCwgdm9pZCAqY3R4IFNDVFBfVU5VU0VEKQoreworCXN0cnVjdCBp
cDZjdGxwYXJhbSAqaXA2Y3A7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKwlzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2I7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCXN0cnVjdCBzY3RwaGRyIHNo
OworCXN0cnVjdCB1ZHBoZHIgdWRwOworCXN0cnVjdCBzb2NrYWRkcl9pbjYgc3JjLCBkc3Q7CisJ
dWludDhfdCB0eXBlLCBjb2RlOworCisJaXA2Y3AgPSAoc3RydWN0IGlwNmN0bHBhcmFtICopZDsK
KwkvKgorCSAqIFhYWDogV2UgYXNzdW1lIHRoYXQgd2hlbiBJUFY2IGlzIG5vbiBOVUxMLCBNIGFu
ZCBPRkYgYXJlCisJICogdmFsaWQuCisJICovCisJaWYgKGlwNmNwLT5pcDZjX20gPT0gTlVMTCkg
eworCQlyZXR1cm47CisJfQorCS8qIENoZWNrIGlmIHdlIGNhbiBzYWZlbHkgZXhhbWluZSB0aGUg
cG9ydHMgYW5kIHRoZQorCSAqIHZlcmlmaWNhdGlvbiB0YWcgb2YgdGhlIFNDVFAgY29tbW9uIGhl
YWRlci4KKwkgKi8KKwlpZiAoaXA2Y3AtPmlwNmNfbS0+bV9wa3RoZHIubGVuIDwKKwkgICAgaXA2
Y3AtPmlwNmNfb2ZmICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKyBvZmZzZXRvZihzdHJ1Y3Qgc2N0
cGhkciwgY2hlY2tzdW0pKSB7CisJCXJldHVybjsKKwl9CisJLyogQ29weSBvdXQgdGhlIFVEUCBo
ZWFkZXIuICovCisJbWVtc2V0KCZ1ZHAsIDAsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7CisJbV9j
b3B5ZGF0YShpcDZjcC0+aXA2Y19tLAorCQkgICBpcDZjcC0+aXA2Y19vZmYsCisJCSAgIHNpemVv
ZihzdHJ1Y3QgdWRwaGRyKSwKKwkJICAgKGNhZGRyX3QpJnVkcCk7CisJLyogQ29weSBvdXQgdGhl
IHBvcnQgbnVtYmVycyBhbmQgdGhlIHZlcmlmaWNhdGlvbiB0YWcuICovCisJbWVtc2V0KCZzaCwg
MCwgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSk7CisJbV9jb3B5ZGF0YShpcDZjcC0+aXA2Y19tLAor
CQkgICBpcDZjcC0+aXA2Y19vZmYgKyBzaXplb2Yoc3RydWN0IHVkcGhkciksCisJCSAgIHNpemVv
Zih1aW50MTZfdCkgKyBzaXplb2YodWludDE2X3QpICsgc2l6ZW9mKHVpbnQzMl90KSwKKwkJICAg
KGNhZGRyX3QpJnNoKTsKKwltZW1zZXQoJnNyYywgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bjYpKTsKKwlzcmMuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyNpZmRlZiBIQVZFX1NJTjZfTEVO
CisJc3JjLnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisJ
c3JjLnNpbjZfcG9ydCA9IHNoLnNyY19wb3J0OworCXNyYy5zaW42X2FkZHIgPSBpcDZjcC0+aXA2
Y19pcDYtPmlwNl9zcmM7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKwlpZiAoaW42X3NldHNjb3BlKCZzcmMuc2luNl9hZGRyLCBpcDZjcC0+aXA2
Y19tLT5tX3BrdGhkci5yY3ZpZiwgTlVMTCkgIT0gMCkgeworCQlyZXR1cm47CisJfQorI2VuZGlm
CisJbWVtc2V0KCZkc3QsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJZHN0LnNp
bjZfZmFtaWx5ID0gQUZfSU5FVDY7CisjaWZkZWYgSEFWRV9TSU42X0xFTgorCWRzdC5zaW42X2xl
biA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorCWRzdC5zaW42X3BvcnQg
PSBzaC5kZXN0X3BvcnQ7CisJZHN0LnNpbjZfYWRkciA9IGlwNmNwLT5pcDZjX2lwNi0+aXA2X2Rz
dDsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CWlmIChpbjZfc2V0c2NvcGUoJmRzdC5zaW42X2FkZHIsIGlwNmNwLT5pcDZjX20tPm1fcGt0aGRy
LnJjdmlmLCBOVUxMKSAhPSAwKSB7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKwlpbnAgPSBOVUxM
OworCW5ldCA9IE5VTEw7CisJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2FkZHJfc2EoKHN0
cnVjdCBzb2NrYWRkciAqKSZkc3QsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzcmMsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJmlucCwgJm5ldCwgMSwgU0NUUF9ERUZBVUxUX1ZSRklEKTsKKwlpZiAoKHN0Y2Ig
IT0gTlVMTCkgJiYKKwkgICAgKG5ldCAhPSBOVUxMKSAmJgorCSAgICAoaW5wICE9IE5VTEwpKSB7
CisJCS8qIENoZWNrIHRoZSBVRFAgcG9ydCBudW1iZXJzICovCisJCWlmICgodWRwLnVoX2Rwb3J0
ICE9IG5ldC0+cG9ydCkgfHwKKwkJICAgICh1ZHAudWhfc3BvcnQgIT0gaHRvbnMoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX3VkcF90dW5uZWxpbmdfcG9ydCkpKSkgeworCQkJU0NUUF9UQ0JfVU5MT0NL
KHN0Y2IpOworCQkJcmV0dXJuOworCQl9CisJCS8qIENoZWNrIHRoZSB2ZXJpZmljYXRpb24gdGFn
ICovCisJCWlmIChudG9obChzaC52X3RhZykgIT0gMCkgeworCQkJLyoKKwkJCSAqIFRoaXMgbXVz
dCBiZSB0aGUgdmVyaWZpY2F0aW9uIHRhZyB1c2VkIGZvcgorCQkJICogc2VuZGluZyBvdXQgcGFj
a2V0cy4gV2UgZG9uJ3QgY29uc2lkZXIKKwkJCSAqIHBhY2tldHMgcmVmbGVjdGluZyB0aGUgdmVy
aWZpY2F0aW9uIHRhZy4KKwkJCSAqLworCQkJaWYgKG50b2hsKHNoLnZfdGFnKSAhPSBzdGNiLT5h
c29jLnBlZXJfdnRhZykgeworCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQlyZXR1cm47
CisJCQl9CisJCX0gZWxzZSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKKwkJCWlmIChpcDZjcC0+aXA2Y19tLT5tX3BrdGhkci5sZW4gPj0KKwkJ
CSAgICBpcDZjcC0+aXA2Y19vZmYgKyBzaXplb2Yoc3RydWN0IHVkcGhkcikgKworCQkJICAgICAg
ICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKworCQkJICAgICAgICAgICAg
ICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikgKworCQkJICAgICAgICAgICAg
ICAgICAgICAgIG9mZnNldG9mKHN0cnVjdCBzY3RwX2luaXQsIGFfcnduZCkpIHsKKwkJCQkvKgor
CQkJCSAqIEluIHRoaXMgY2FzZSB3ZSBjYW4gY2hlY2sgaWYgd2UKKwkJCQkgKiBnb3QgYW4gSU5J
VCBjaHVuayBhbmQgaWYgdGhlCisJCQkJICogaW5pdGlhdGUgdGFnIG1hdGNoZXMuCisJCQkJICov
CisJCQkJdWludDMyX3QgaW5pdGlhdGVfdGFnOworCQkJCXVpbnQ4X3QgY2h1bmtfdHlwZTsKKwor
CQkJCW1fY29weWRhdGEoaXA2Y3AtPmlwNmNfbSwKKwkJCQkJICAgaXA2Y3AtPmlwNmNfb2ZmICsK
KwkJCQkJICAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICsKKwkJCQkJICAgc2l6ZW9mKHN0cnVjdCBz
Y3RwaGRyKSwKKwkJCQkJICAgc2l6ZW9mKHVpbnQ4X3QpLAorCQkJCQkgICAoY2FkZHJfdCkmY2h1
bmtfdHlwZSk7CisJCQkJbV9jb3B5ZGF0YShpcDZjcC0+aXA2Y19tLAorCQkJCQkgICBpcDZjcC0+
aXA2Y19vZmYgKworCQkJCQkgICBzaXplb2Yoc3RydWN0IHVkcGhkcikgKworCQkJCQkgICBzaXpl
b2Yoc3RydWN0IHNjdHBoZHIpICsKKwkJCQkJICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRy
KSwKKwkJCQkJICAgc2l6ZW9mKHVpbnQzMl90KSwKKwkJCQkJICAgKGNhZGRyX3QpJmluaXRpYXRl
X3RhZyk7CisJCQkJaWYgKChjaHVua190eXBlICE9IFNDVFBfSU5JVElBVElPTikgfHwKKwkJCQkg
ICAgKG50b2hsKGluaXRpYXRlX3RhZykgIT0gc3RjYi0+YXNvYy5teV92dGFnKSkgeworCQkJCQlT
Q1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQl9IGVsc2Ugewor
CQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQlyZXR1cm47CisJCQl9CisjZWxzZQorCQkJ
U0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJcmV0dXJuOworI2VuZGlmCisJCX0KKwkJdHlwZSA9
IGlwNmNwLT5pcDZjX2ljbXA2LT5pY21wNl90eXBlOworCQljb2RlID0gaXA2Y3AtPmlwNmNfaWNt
cDYtPmljbXA2X2NvZGU7CisJCWlmICgodHlwZSA9PSBJQ01QNl9EU1RfVU5SRUFDSCkgJiYKKwkJ
ICAgIChjb2RlID09IElDTVA2X0RTVF9VTlJFQUNIX05PUE9SVCkpIHsKKwkJCXR5cGUgPSBJQ01Q
Nl9QQVJBTV9QUk9COworCQkJY29kZSA9IElDTVA2X1BBUkFNUFJPQl9ORVhUSEVBREVSOworCQl9
CisJCXNjdHA2X25vdGlmeShpbnAsIHN0Y2IsIG5ldCwgdHlwZSwgY29kZSwKKwkJCSAgICAgbnRv
aGwoaXA2Y3AtPmlwNmNfaWNtcDYtPmljbXA2X210dSkpOworI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKKwkJaWYgKCEoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X1NPQ0tFVF9HT05FKSAmJgorCQkgICAgKHN0Y2ItPnNjdHBfc29ja2V0ICE9IE5VTEwpKSB7CisJ
CQlzdHJ1Y3Qgc29ja2V0ICp1cGNhbGxfc29ja2V0OworCisJCQl1cGNhbGxfc29ja2V0ID0gc3Rj
Yi0+c2N0cF9zb2NrZXQ7CisJCQlTT0NLX0xPQ0sodXBjYWxsX3NvY2tldCk7CisJCQlzb3JlZih1
cGNhbGxfc29ja2V0KTsKKwkJCVNPQ0tfVU5MT0NLKHVwY2FsbF9zb2NrZXQpOworCQkJaWYgKCh1
cGNhbGxfc29ja2V0LT5zb191cGNhbGwgIT0gTlVMTCkgJiYKKwkJCSAgICAodXBjYWxsX3NvY2tl
dC0+c29fZXJyb3IgIT0gMCkpIHsKKwkJCQkoKnVwY2FsbF9zb2NrZXQtPnNvX3VwY2FsbCkodXBj
YWxsX3NvY2tldCwgdXBjYWxsX3NvY2tldC0+c29fdXBjYWxsYXJnLCBNX05PV0FJVCk7CisJCQl9
CisJCQlBQ0NFUFRfTE9DSygpOworCQkJU09DS19MT0NLKHVwY2FsbF9zb2NrZXQpOworCQkJc29y
ZWxlKHVwY2FsbF9zb2NrZXQpOworCQl9CisjZW5kaWYKKwl9IGVsc2UgeworCQlpZiAoKHN0Y2Ig
PT0gTlVMTCkgJiYgKGlucCAhPSBOVUxMKSkgeworCQkJLyogcmVkdWNlIGlucCdzIHJlZi1jb3Vu
dCAqLworCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7
CisJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCX0KKwkJaWYgKHN0Y2IpIHsKKwkJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKKwkJfQorCX0KK30KKyNlbmRpZgorCit2b2lkCitzY3RwX292ZXJf
dWRwX3N0b3Aodm9pZCkKK3sKKwkvKgorCSAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyBzeXNjdGwg
Y2FsbGVyIGhvbGRzIHNjdHBfc3lzY3RsX2luZm9fbG9jaygpIGZvciB3cml0dGluZyEKKwkgKi8K
KyNpZmRlZiBJTkVUCisJaWYgKFNDVFBfQkFTRV9JTkZPKHVkcDRfdHVuX3NvY2tldCkgIT0gTlVM
TCkgeworCQlzb2Nsb3NlKFNDVFBfQkFTRV9JTkZPKHVkcDRfdHVuX3NvY2tldCkpOworCQlTQ1RQ
X0JBU0VfSU5GTyh1ZHA0X3R1bl9zb2NrZXQpID0gTlVMTDsKKwl9CisjZW5kaWYKKyNpZmRlZiBJ
TkVUNgorCWlmIChTQ1RQX0JBU0VfSU5GTyh1ZHA2X3R1bl9zb2NrZXQpICE9IE5VTEwpIHsKKwkJ
c29jbG9zZShTQ1RQX0JBU0VfSU5GTyh1ZHA2X3R1bl9zb2NrZXQpKTsKKwkJU0NUUF9CQVNFX0lO
Rk8odWRwNl90dW5fc29ja2V0KSA9IE5VTEw7CisJfQorI2VuZGlmCit9CisKK2ludAorc2N0cF9v
dmVyX3VkcF9zdGFydCh2b2lkKQoreworCXVpbnQxNl90IHBvcnQ7CisJaW50IHJldDsKKyNpZmRl
ZiBJTkVUCisJc3RydWN0IHNvY2thZGRyX2luIHNpbjsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJ
c3RydWN0IHNvY2thZGRyX2luNiBzaW42OworI2VuZGlmCisJLyoKKwkgKiBUaGlzIGZ1bmN0aW9u
IGFzc3VtZXMgc3lzY3RsIGNhbGxlciBob2xkcyBzY3RwX3N5c2N0bF9pbmZvX2xvY2soKSBmb3Ig
d3JpdHRpbmchCisJICovCisJcG9ydCA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF91ZHBfdHVubmVs
aW5nX3BvcnQpOworCWlmIChudG9ocyhwb3J0KSA9PSAwKSB7CisJCS8qIE11c3QgaGF2ZSBhIHBv
cnQgc2V0ICovCisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisjaWZkZWYgSU5FVAorCWlmIChTQ1RQ
X0JBU0VfSU5GTyh1ZHA0X3R1bl9zb2NrZXQpICE9IE5VTEwpIHsKKwkJLyogQWxyZWFkeSBydW5u
aW5nIC0tIG11c3Qgc3RvcCBmaXJzdCAqLworCQlyZXR1cm4gKEVBTFJFQURZKTsKKwl9CisjZW5k
aWYKKyNpZmRlZiBJTkVUNgorCWlmIChTQ1RQX0JBU0VfSU5GTyh1ZHA2X3R1bl9zb2NrZXQpICE9
IE5VTEwpIHsKKwkJLyogQWxyZWFkeSBydW5uaW5nIC0tIG11c3Qgc3RvcCBmaXJzdCAqLworCQly
ZXR1cm4gKEVBTFJFQURZKTsKKwl9CisjZW5kaWYKKyNpZmRlZiBJTkVUCisJaWYgKChyZXQgPSBz
b2NyZWF0ZShQRl9JTkVULCAmU0NUUF9CQVNFX0lORk8odWRwNF90dW5fc29ja2V0KSwKKwkgICAg
ICAgICAgICAgICAgICAgIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQLAorCSAgICAgICAgICAgICAg
ICAgICAgY3VydGhyZWFkLT50ZF91Y3JlZCwgY3VydGhyZWFkKSkpIHsKKwkJc2N0cF9vdmVyX3Vk
cF9zdG9wKCk7CisJCXJldHVybiAocmV0KTsKKwl9CisJLyogQ2FsbCB0aGUgc3BlY2lhbCBVRFAg
aG9vay4gKi8KKwlpZiAoKHJldCA9IHVkcF9zZXRfa2VybmVsX3R1bm5lbGluZyhTQ1RQX0JBU0Vf
SU5GTyh1ZHA0X3R1bl9zb2NrZXQpLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNjdHBfcmVjdl91ZHBfdHVubmVsZWRfcGFja2V0LAorCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNjdHBfcmVjdl9pY21wX3R1bm5lbGVkX3BhY2tldCwKKwkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSkpIHsKKwkJc2N0cF9vdmVyX3VkcF9z
dG9wKCk7CisJCXJldHVybiAocmV0KTsKKwl9CisJLyogT2ssIHdlIGhhdmUgYSBzb2NrZXQsIGJp
bmQgaXQgdG8gdGhlIHBvcnQuICovCisJbWVtc2V0KCZzaW4sIDAsIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pKTsKKwlzaW4uc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwor
CXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlzaW4uc2luX3BvcnQgPSBodG9ucyhwb3J0KTsK
KwlpZiAoKHJldCA9IHNvYmluZChTQ1RQX0JBU0VfSU5GTyh1ZHA0X3R1bl9zb2NrZXQpLAorCSAg
ICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBjdXJ0aHJlYWQpKSkgewor
CQlzY3RwX292ZXJfdWRwX3N0b3AoKTsKKwkJcmV0dXJuIChyZXQpOworCX0KKyNlbmRpZgorI2lm
ZGVmIElORVQ2CisJaWYgKChyZXQgPSBzb2NyZWF0ZShQRl9JTkVUNiwgJlNDVFBfQkFTRV9JTkZP
KHVkcDZfdHVuX3NvY2tldCksCisJICAgICAgICAgICAgICAgICAgICBTT0NLX0RHUkFNLCBJUFBS
T1RPX1VEUCwKKwkgICAgICAgICAgICAgICAgICAgIGN1cnRocmVhZC0+dGRfdWNyZWQsIGN1cnRo
cmVhZCkpKSB7CisJCXNjdHBfb3Zlcl91ZHBfc3RvcCgpOworCQlyZXR1cm4gKHJldCk7CisJfQor
CS8qIENhbGwgdGhlIHNwZWNpYWwgVURQIGhvb2suICovCisJaWYgKChyZXQgPSB1ZHBfc2V0X2tl
cm5lbF90dW5uZWxpbmcoU0NUUF9CQVNFX0lORk8odWRwNl90dW5fc29ja2V0KSwKKwkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3RwX3JlY3ZfdWRwX3R1bm5lbGVkX3BhY2tl
dCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3RwX3JlY3ZfaWNtcDZf
dHVubmVsZWRfcGFja2V0LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V
TEwpKSkgeworCQlzY3RwX292ZXJfdWRwX3N0b3AoKTsKKwkJcmV0dXJuIChyZXQpOworCX0KKwkv
KiBPaywgd2UgaGF2ZSBhIHNvY2tldCwgYmluZCBpdCB0byB0aGUgcG9ydC4gKi8KKwltZW1zZXQo
JnNpbjYsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJc2luNi5zaW42X2xlbiA9
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKwlzaW42LnNpbjZfZmFtaWx5ID0gQUZfSU5F
VDY7CisJc2luNi5zaW42X3BvcnQgPSBodG9ucyhwb3J0KTsKKwlpZiAoKHJldCA9IHNvYmluZChT
Q1RQX0JBU0VfSU5GTyh1ZHA2X3R1bl9zb2NrZXQpLAorCSAgICAgICAgICAgICAgICAgIChzdHJ1
Y3Qgc29ja2FkZHIgKikmc2luNiwgY3VydGhyZWFkKSkpIHsKKwkJc2N0cF9vdmVyX3VkcF9zdG9w
KCk7CisJCXJldHVybiAocmV0KTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gKDApOworfQorI2VuZGlm
CisKKy8qCisgKiBzY3RwX21pbl9tdHUgKClyZXR1cm5zIHRoZSBtaW5pbXVtIG9mIGFsbCBub24t
emVybyBhcmd1bWVudHMuCisgKiBJZiBhbGwgYXJndW1lbnRzIGFyZSB6ZXJvLCB6ZXJvIGlzIHJl
dHVybmVkLgorICovCit1aW50MzJfdAorc2N0cF9taW5fbXR1KHVpbnQzMl90IG10dTEsIHVpbnQz
Ml90IG10dTIsIHVpbnQzMl90IG10dTMpCit7CisJaWYgKG10dTEgPiAwKSB7CisJCWlmIChtdHUy
ID4gMCkgeworCQkJaWYgKG10dTMgPiAwKSB7CisJCQkJcmV0dXJuIChtaW4obXR1MSwgbWluKG10
dTIsIG10dTMpKSk7CisJCQl9IGVsc2UgeworCQkJCXJldHVybiAobWluKG10dTEsIG10dTIpKTsK
KwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChtdHUzID4gMCkgeworCQkJCXJldHVybiAobWluKG10
dTEsIG10dTMpKTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0dXJuIChtdHUxKTsKKwkJCX0KKwkJfQor
CX0gZWxzZSB7CisJCWlmIChtdHUyID4gMCkgeworCQkJaWYgKG10dTMgPiAwKSB7CisJCQkJcmV0
dXJuIChtaW4obXR1MiwgbXR1MykpOworCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gKG10dTIpOwor
CQkJfQorCQl9IGVsc2UgeworCQkJcmV0dXJuIChtdHUzKTsKKwkJfQorCX0KK30KKworI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCit2b2lkCitzY3Rw
X2hjX3NldF9tdHUodW5pb24gc2N0cF9zb2Nrc3RvcmUgKmFkZHIsIHVpbnQxNl90IGZpYm51bSwg
dWludDMyX3QgbXR1KQoreworCXN0cnVjdCBpbl9jb25uaW5mbyBpbmM7CisKKwltZW1zZXQoJmlu
YywgMCwgc2l6ZW9mKHN0cnVjdCBpbl9jb25uaW5mbykpOworCWluYy5pbmNfZmlibnVtID0gZmli
bnVtOworCXN3aXRjaCAoYWRkci0+c2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCWNhc2Ug
QUZfSU5FVDoKKwkJaW5jLmluY19mYWRkciA9IGFkZHItPnNpbi5zaW5fYWRkcjsKKwkJYnJlYWs7
CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJCWluYy5pbmNfZmxhZ3Mg
fD0gSU5DX0lTSVBWNjsKKwkJaW5jLmluYzZfZmFkZHIgPSBhZGRyLT5zaW42LnNpbjZfYWRkcjsK
KwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCXRjcF9oY191cGRh
dGVtdHUoJmluYywgKHVfbG9uZyltdHUpOworfQorCit1aW50MzJfdAorc2N0cF9oY19nZXRfbXR1
KHVuaW9uIHNjdHBfc29ja3N0b3JlICphZGRyLCB1aW50MTZfdCBmaWJudW0pCit7CisJc3RydWN0
IGluX2Nvbm5pbmZvIGluYzsKKworCW1lbXNldCgmaW5jLCAwLCBzaXplb2Yoc3RydWN0IGluX2Nv
bm5pbmZvKSk7CisJaW5jLmluY19maWJudW0gPSBmaWJudW07CisJc3dpdGNoIChhZGRyLT5zYS5z
YV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJY2FzZSBBRl9JTkVUOgorCQlpbmMuaW5jX2ZhZGRy
ID0gYWRkci0+c2luLnNpbl9hZGRyOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJ
Y2FzZSBBRl9JTkVUNjoKKwkJaW5jLmluY19mbGFncyB8PSBJTkNfSVNJUFY2OworCQlpbmMuaW5j
Nl9mYWRkciA9IGFkZHItPnNpbjYuc2luNl9hZGRyOworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1
bHQ6CisJCXJldHVybiAoMCk7CisJfQorCXJldHVybiAoKHVpbnQzMl90KXRjcF9oY19nZXRtdHUo
JmluYykpOworfQorI2VuZGlmCisKK3ZvaWQKK3NjdHBfc2V0X3N0YXRlKHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwgaW50IG5ld19zdGF0ZSkKK3sKKyNpZiBkZWZpbmVkKEtEVFJBQ0VfSE9PS1MpCisJ
aW50IG9sZF9zdGF0ZSA9IHN0Y2ItPmFzb2Muc3RhdGU7CisjZW5kaWYKKworCUtBU1NFUlQoKG5l
d19zdGF0ZSAmIH5TQ1RQX1NUQVRFX01BU0spID09IDAsCisJICAgICAgICAoInNjdHBfc2V0X3N0
YXRlOiBDYW4ndCBzZXQgc3Vic3RhdGUgKG5ld19zdGF0ZSA9ICV4KSIsCisJICAgICAgICBuZXdf
c3RhdGUpKTsKKwlzdGNiLT5hc29jLnN0YXRlID0gKHN0Y2ItPmFzb2Muc3RhdGUgJiB+U0NUUF9T
VEFURV9NQVNLKSB8IG5ld19zdGF0ZTsKKwlpZiAoKG5ld19zdGF0ZSA9PSBTQ1RQX1NUQVRFX1NI
VVRET1dOX1JFQ0VJVkVEKSB8fAorCSAgICAobmV3X3N0YXRlID09IFNDVFBfU1RBVEVfU0hVVERP
V05fU0VOVCkgfHwKKwkgICAgKG5ld19zdGF0ZSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19T
RU5UKSkgeworCQlTQ1RQX0NMRUFSX1NVQlNUQVRFKHN0Y2IsIFNDVFBfU1RBVEVfU0hVVERPV05f
UEVORElORyk7CisJfQorI2lmIGRlZmluZWQoS0RUUkFDRV9IT09LUykKKwlpZiAoKChvbGRfc3Rh
dGUgJiBTQ1RQX1NUQVRFX01BU0spICE9IG5ld19zdGF0ZSkgJiYKKwkgICAgISgoKG9sZF9zdGF0
ZSAmIFNDVFBfU1RBVEVfTUFTSykgPT0gU0NUUF9TVEFURV9FTVBUWSkgJiYKKwkgICAgICAobmV3
X3N0YXRlID09IFNDVFBfU1RBVEVfSU5VU0UpKSkgeworCQlTQ1RQX1BST0JFNihzdGF0ZV9fY2hh
bmdlLCBOVUxMLCBzdGNiLCBOVUxMLCBzdGNiLCBOVUxMLCBvbGRfc3RhdGUpOworCX0KKyNlbmRp
ZgorfQorCit2b2lkCitzY3RwX2FkZF9zdWJzdGF0ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGlu
dCBzdWJzdGF0ZSkKK3sKKyNpZiBkZWZpbmVkKEtEVFJBQ0VfSE9PS1MpCisJaW50IG9sZF9zdGF0
ZSA9IHN0Y2ItPmFzb2Muc3RhdGU7CisjZW5kaWYKKworCUtBU1NFUlQoKHN1YnN0YXRlICYgU0NU
UF9TVEFURV9NQVNLKSA9PSAwLAorCSAgICAgICAgKCJzY3RwX2FkZF9zdWJzdGF0ZTogQ2FuJ3Qg
c2V0IHN0YXRlIChzdWJzdGF0ZSA9ICV4KSIsCisJICAgICAgICBzdWJzdGF0ZSkpOworCXN0Y2It
PmFzb2Muc3RhdGUgfD0gc3Vic3RhdGU7CisjaWYgZGVmaW5lZChLRFRSQUNFX0hPT0tTKQorCWlm
ICgoKHN1YnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCkgJiYKKwkgICAgICgo
b2xkX3N0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCkgPT0gMCkpIHx8CisJICAg
ICgoc3Vic3RhdGUgJiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcpICYmCisJICAgICAoKG9s
ZF9zdGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykgPT0gMCkpKSB7CisJCVNDVFBf
UFJPQkU2KHN0YXRlX19jaGFuZ2UsIE5VTEwsIHN0Y2IsIE5VTEwsIHN0Y2IsIE5VTEwsIG9sZF9z
dGF0ZSk7CisJfQorI2VuZGlmCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIv
bmV0aW5ldC9zY3RwdXRpbC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHB1dGls
LmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwLi4xNGFhZjUzMGExNjcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cHV0aWwu
aApAQCAtMCwwICsxLDQxNyBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE
LTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3Rl
bXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEy
LCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBu
b3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMv
bmV0aW5ldC9zY3RwdXRpbC5oIDM2NTA3MSAyMDIwLTA5LTAxIDIxOjE5OjE0WiBtamcgJCIpOwor
I2VuZGlmCisKKyNpZm5kZWYgX05FVElORVRfU0NUUF9VVElMX0hfCisjZGVmaW5lIF9ORVRJTkVU
X1NDVFBfVVRJTF9IXworCisjaWYgZGVmaW5lZChfS0VSTkVMKSB8fCBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisKKyNkZWZpbmUgU0NUUF9SRUFEX0xPQ0tfSEVMRCAxCisjZGVmaW5lIFNDVFBfUkVB
RF9MT0NLX05PVF9IRUxEIDAKKworI2lmZGVmIFNDVFBfQVNPQ0xPR19PRl9UU05TCit2b2lkIHNj
dHBfcHJpbnRfb3V0X3RyYWNrX2xvZyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpOworI2VuZGlmCisK
KyNpZmRlZiBTQ1RQX01CVUZfTE9HR0lORworc3RydWN0IG1idWYgKnNjdHBfbV9mcmVlKHN0cnVj
dCBtYnVmICptKTsKK3ZvaWQgc2N0cF9tX2ZyZWVtKHN0cnVjdCBtYnVmICptKTsKKyNlbHNlCisj
ZGVmaW5lIHNjdHBfbV9mcmVlIG1fZnJlZQorI2RlZmluZSBzY3RwX21fZnJlZW0gbV9mcmVlbQor
I2VuZGlmCisKKyNpZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQordm9pZAorc2N0cF9s
b2dfdHJhY2UodWludDMyX3QgZnIsIGNvbnN0IGNoYXIgKnN0ciBTQ1RQX1VOVVNFRCwgdWludDMy
X3QgYSwgdWludDMyX3QgYiwgdWludDMyX3QgYywgdWludDMyX3QgZCwgdWludDMyX3QgZSwgdWlu
dDMyX3QgZik7CisjZW5kaWYKKworI2RlZmluZSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpICgoc2N0
cF9hc3NvY190KXN0Y2ItPmFzb2MuYXNzb2NfaWQpCisKKy8qCisgKiBGdW5jdGlvbiBwcm90b3R5
cGVzCisgKi8KK2ludDMyX3QKK3NjdHBfbWFwX2Fzc29jX3N0YXRlKGludCk7CisKK3VpbnQzMl90
CitzY3RwX2dldF9pZmFfaGFzaF92YWwoc3RydWN0IHNvY2thZGRyICphZGRyKTsKKworc3RydWN0
IHNjdHBfaWZhICoKK3NjdHBfZmluZF9pZmFfaW5fZXAoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwg
c3RydWN0IHNvY2thZGRyICphZGRyLCBpbnQgaG9sZF9sb2NrKTsKKworc3RydWN0IHNjdHBfaWZh
ICoKK3NjdHBfZmluZF9pZmFfYnlfYWRkcihzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHVpbnQzMl90
IHZyZl9pZCwgaW50IGhvbGRzX2xvY2spOworCit1aW50MzJfdCBzY3RwX3NlbGVjdF9pbml0aWFs
X1RTTihzdHJ1Y3Qgc2N0cF9wY2IgKik7CisKK3VpbnQzMl90IHNjdHBfc2VsZWN0X2FfdGFnKHN0
cnVjdCBzY3RwX2lucGNiICosIHVpbnQxNl90IGxwb3J0LCB1aW50MTZfdCBycG9ydCwgaW50KTsK
KworaW50IHNjdHBfaW5pdF9hc29jKHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX3Rj
YiAqLCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQxNl90KTsKKwordm9pZCBzY3RwX2ZpbGxfcmFu
ZG9tX3N0b3JlKHN0cnVjdCBzY3RwX3BjYiAqKTsKKwordm9pZAorc2N0cF9ub3RpZnlfc3RyZWFt
X3Jlc2V0X2FkZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQxNl90IG51bWJlcmluLAorCQkJ
ICAgICB1aW50MTZfdCBudW1iZXJvdXQsIGludCBmbGFnKTsKK3ZvaWQKK3NjdHBfbm90aWZ5X3N0
cmVhbV9yZXNldF90c24oc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBzZW5kaW5nX3Rz
biwgdWludDMyX3QgcmVjdl90c24sIGludCBmbGFnKTsKKworLyoKKyAqIE5PVEU6IHNjdHBfdGlt
ZXJfc3RhcnQoKSB3aWxsIGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIGFueSByZWxl
dmFudAorICogc3RydWN0dXJlIHRoZSB0aW1lciBpcyByZWZlcmVuY2luZywgaW4gb3JkZXIgdG8g
cHJldmVudCBhIHJhY2UgY29uZGl0aW9uCisgKiBiZXR3ZWVuIHRoZSB0aW1lciBleGVjdXRpbmcg
YW5kIHRoZSBzdHJ1Y3R1cmUgYmVpbmcgZnJlZWQuCisgKgorICogV2hlbiB0aGUgdGltZXIgZmly
ZXMgb3Igc2N0cF90aW1lcl9zdG9wKCkgaXMgY2FsbGVkLCB0aGVzZSByZWZlcmVuY2VzIGFyZQor
ICogcmVtb3ZlZC4KKyAqLwordm9pZAorc2N0cF90aW1lcl9zdGFydChpbnQsIHN0cnVjdCBzY3Rw
X2lucGNiICosIHN0cnVjdCBzY3RwX3RjYiAqLAorICAgIHN0cnVjdCBzY3RwX25ldHMgKik7CisK
K3ZvaWQKK3NjdHBfdGltZXJfc3RvcChpbnQsIHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBz
Y3RwX3RjYiAqLAorICAgIHN0cnVjdCBzY3RwX25ldHMgKiwgdWludDMyX3QpOworCitpbnQKK3Nj
dHBfZHluYW1pY19zZXRfcHJpbWFyeShzdHJ1Y3Qgc29ja2FkZHIgKnNhLCB1aW50MzJfdCB2cmZf
aWQpOworCit2b2lkCitzY3RwX210dV9zaXplX3Jlc2V0KHN0cnVjdCBzY3RwX2lucGNiICosIHN0
cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosIHVpbnQzMl90KTsKKwordm9pZAorc2N0cF93YWtldXBf
dGhlX3JlYWRfc29ja2V0KHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwKKyAgICBpbnQgc29fbG9ja2VkCisjaWYgIShkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykpCisgICAgU0NUUF9VTlVTRUQKKyNlbmRpZgorKTsKKworI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK3ZvaWQgc2N0cF9pbnZva2VfcmVjdl9jYWxsYmFjayhz
dHJ1Y3Qgc2N0cF9pbnBjYiAqLAorICAgIHN0cnVjdCBzY3RwX3RjYiAqLAorICAgIHN0cnVjdCBz
Y3RwX3F1ZXVlZF90b19yZWFkICosCisgICAgaW50KTsKKworI2VuZGlmCit2b2lkCitzY3RwX2Fk
ZF90b19yZWFkcShzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorICAgIHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwKKyAgICBzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCwKKyAgICBzdHJ1
Y3Qgc29ja2J1ZiAqc2IsCisgICAgaW50IGVuZCwKKyAgICBpbnQgaW5wcmVhZF9sb2NrZWQsCisg
ICAgaW50IHNvX2xvY2tlZCk7CisKK3ZvaWQgc2N0cF9pdGVyYXRvcl93b3JrZXIodm9pZCk7CisK
K3VpbnQzMl90IHNjdHBfZ2V0X3ByZXZfbXR1KHVpbnQzMl90KTsKK3VpbnQzMl90IHNjdHBfZ2V0
X25leHRfbXR1KHVpbnQzMl90KTsKKwordm9pZAorc2N0cF90aW1lb3V0X2hhbmRsZXIodm9pZCAq
KTsKKworaW50CitzY3RwX2NhbGN1bGF0ZV9ydG8oc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBz
Y3RwX2Fzc29jaWF0aW9uICosCisgICAgc3RydWN0IHNjdHBfbmV0cyAqLCBzdHJ1Y3QgdGltZXZh
bCAqLCBpbnQpOworCit1aW50MzJfdCBzY3RwX2NhbGN1bGF0ZV9sZW4oc3RydWN0IG1idWYgKik7
CisKK2NhZGRyX3Qgc2N0cF9tX2dldHB0cihzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCwgdWludDhf
dCAqKTsKKworc3RydWN0IHNjdHBfcGFyYW1oZHIgKgorc2N0cF9nZXRfbmV4dF9wYXJhbShzdHJ1
Y3QgbWJ1ZiAqLCBpbnQsCisgICAgc3RydWN0IHNjdHBfcGFyYW1oZHIgKiwgaW50KTsKKworc3Ry
dWN0IG1idWYgKgorc2N0cF9hZGRfcGFkX3RvbWJ1ZihzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOworCitz
dHJ1Y3QgbWJ1ZiAqCitzY3RwX3BhZF9sYXN0bWJ1ZihzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIHN0cnVj
dCBtYnVmICopOworCit2b2lkIHNjdHBfdWxwX25vdGlmeSh1aW50MzJfdCwgc3RydWN0IHNjdHBf
dGNiICosIHVpbnQzMl90LCB2b2lkICosIGludCk7CisKK3ZvaWQKK3NjdHBfcHVsbF9vZmZfY29u
dHJvbF90b19uZXdfaW5wKHN0cnVjdCBzY3RwX2lucGNiICpvbGRfaW5wLAorICAgIHN0cnVjdCBz
Y3RwX2lucGNiICpuZXdfaW5wLAorICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgaW50IHdhaXRm
bGFncyk7CisKK3ZvaWQgc2N0cF9zdG9wX3RpbWVyc19mb3Jfc2h1dGRvd24oc3RydWN0IHNjdHBf
dGNiICopOworCisvKiBTdG9wIGFsbCB0aW1lcnMgZm9yIGFzc29jaWF0aW9uIGFuZCByZW1vdGUg
YWRkcmVzc2VzLiAqLwordm9pZCBzY3RwX3N0b3BfYXNzb2NpYXRpb25fdGltZXJzKHN0cnVjdCBz
Y3RwX3RjYiAqLCBib29sKTsKKwordm9pZCBzY3RwX3JlcG9ydF9hbGxfb3V0Ym91bmQoc3RydWN0
IHNjdHBfdGNiICosIHVpbnQxNl90LCBpbnQpOworCitpbnQgc2N0cF9leHBhbmRfbWFwcGluZ19h
cnJheShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLCB1aW50MzJfdCk7CisKK3ZvaWQgc2N0cF9h
Ym9ydF9ub3RpZmljYXRpb24oc3RydWN0IHNjdHBfdGNiICosIHVpbnQ4X3QsIHVpbnQxNl90LAor
CQkJICAgICBzdHJ1Y3Qgc2N0cF9hYm9ydF9jaHVuayAqLCBpbnQpOworCisvKiBXZSBhYm9ydCBy
ZXNwb25kaW5nIHRvIGFuIElQIHBhY2tldCBmb3Igc29tZSByZWFzb24gKi8KK3ZvaWQKK3NjdHBf
YWJvcnRfYXNzb2NpYXRpb24oc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfdGNiICos
IHN0cnVjdCBtYnVmICosCisgICAgICAgICAgICAgICAgICAgICAgIGludCwgc3RydWN0IHNvY2th
ZGRyICosIHN0cnVjdCBzb2NrYWRkciAqLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
c2N0cGhkciAqLCBzdHJ1Y3QgbWJ1ZiAqLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QsIHVp
bnQzMl90LAorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90LCB1aW50MTZf
dCk7CisKKy8qIFdlIGNob29zZSB0byBhYm9ydCB2aWEgdXNlciBpbnB1dCAqLwordm9pZAorc2N0
cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90
Y2IgKiwKKyAgICBzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOworCit2b2lkIHNjdHBfaGFuZGxlX29vdGIo
c3RydWN0IG1idWYgKiwgaW50LCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNv
Y2thZGRyICosIHN0cnVjdCBzb2NrYWRkciAqLAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBzY3RwaGRyICosIHN0cnVjdCBzY3RwX2lucGNiICosCisgICAgICAgICAgICAgICAgICAgICAg
c3RydWN0IG1idWYgKiwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QsIHVpbnQzMl90LCB1aW50
MTZfdCwKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90LCB1aW50MTZfdCk7
CisKK2ludCBzY3RwX2Nvbm5lY3R4X2hlbHBlcl9hZGQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBz
dHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCisgICAgaW50IHRvdGFkZHIsIGludCAqZXJyb3IpOworCitp
bnQKK3NjdHBfY29ubmVjdHhfaGVscGVyX2ZpbmQoc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0
IHNvY2thZGRyICosCisgICAgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQgKiwgdW5zaWduZWQg
aW50ICosIHVuc2lnbmVkIGludCk7CisKK2ludCBzY3RwX2lzX3RoZXJlX2FuX2Fib3J0X2hlcmUo
c3RydWN0IG1idWYgKiwgaW50LCB1aW50MzJfdCAqKTsKKyNpZmRlZiBJTkVUNgordWludDMyX3Qg
c2N0cF9pc19zYW1lX3Njb3BlKHN0cnVjdCBzb2NrYWRkcl9pbjYgKiwgc3RydWN0IHNvY2thZGRy
X2luNiAqKTsKKworI2lmIGRlZmluZWQoU0NUUF9FTUJFRERFRF9WNl9TQ09QRSkKK3N0cnVjdCBz
b2NrYWRkcl9pbjYgKgorc2N0cF9yZWNvdmVyX3Njb3BlKHN0cnVjdCBzb2NrYWRkcl9pbjYgKiwg
c3RydWN0IHNvY2thZGRyX2luNiAqKTsKKworI2lmZGVmIFNDVFBfS0FNRQorI2RlZmluZSBzY3Rw
X3JlY292ZXJfc2NvcGVfbWFjKGFkZHIsIHN0b3JlKSBkbyB7IFwKKwkgaWYgKChhZGRyLT5zaW42
X2ZhbWlseSA9PSBBRl9JTkVUNikgJiYgXAorCSAgICAgKElONl9JU19TQ09QRV9MSU5LTE9DQUwo
JmFkZHItPnNpbjZfYWRkcikpKSB7IFwKKwkJKnN0b3JlID0gKmFkZHI7IFwKKwkJaWYgKGFkZHIt
PnNpbjZfc2NvcGVfaWQgPT0gMCkgeyBcCisJCQlpZiAoIXNhNl9yZWNvdmVyc2NvcGUoc3RvcmUp
KSB7IFwKKwkJCQlhZGRyID0gc3RvcmU7IFwKKwkJCX0gXAorCQl9IGVsc2UgeyBcCisJCQlpbjZf
Y2xlYXJzY29wZSgmYWRkci0+c2luNl9hZGRyKTsgXAorCQkJYWRkciA9IHN0b3JlOyBcCisJCX0g
XAorCSB9IFwKK30gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBzY3RwX3JlY292ZXJfc2NvcGVf
bWFjKGFkZHIsIHN0b3JlKSBkbyB7IFwKKwlpZiAoKGFkZHItPnNpbjZfZmFtaWx5ID09IEFGX0lO
RVQ2KSAmJiBcCisJICAgIChJTjZfSVNfU0NPUEVfTElOS0xPQ0FMKCZhZGRyLT5zaW42X2FkZHIp
KSkgeyBcCisJCSpzdG9yZSA9ICphZGRyOyBcCisJCWlmIChhZGRyLT5zaW42X3Njb3BlX2lkID09
IDApIHsgXAorCQkJaWYgKCFpbjZfcmVjb3ZlcnNjb3BlKHN0b3JlLCAmc3RvcmUtPnNpbjZfYWRk
ciwgXAorCQkJCQkgICAgICBOVUxMKSkgeyBcCisJCQkJYWRkciA9IHN0b3JlOyBcCisJCQl9IFwK
KwkJfSBlbHNlIHsgXAorCQkJaW42X2NsZWFyc2NvcGUoJmFkZHItPnNpbjZfYWRkcik7IFwKKwkJ
CWFkZHIgPSBzdG9yZTsgXAorCQl9IFwKKwl9IFwKK30gd2hpbGUgKDApCisjZW5kaWYKKyNlbmRp
ZgorI2VuZGlmCisKK2ludCBzY3RwX2NtcGFkZHIoc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCBz
b2NrYWRkciAqKTsKKwordm9pZCBzY3RwX3ByaW50X2FkZHJlc3Moc3RydWN0IHNvY2thZGRyICop
OworCitpbnQKK3NjdHBfcmVsZWFzZV9wcl9zY3RwX2NodW5rKHN0cnVjdCBzY3RwX3RjYiAqLCBz
dHJ1Y3Qgc2N0cF90bWl0X2NodW5rICosCisgICAgdWludDhfdCwgaW50KTsKKworc3RydWN0IG1i
dWYgKnNjdHBfZ2VuZXJhdGVfY2F1c2UodWludDE2X3QsIGNoYXIgKik7CitzdHJ1Y3QgbWJ1ZiAq
c2N0cF9nZW5lcmF0ZV9ub191c2VyX2RhdGFfY2F1c2UodWludDMyX3QpOworCit2b2lkIHNjdHBf
YmluZHhfYWRkX2FkZHJlc3Moc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzY3RwX2lucGNiICpp
bnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpzYSwgdWlu
dDMyX3QgdnJmX2lkLCBpbnQgKmVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQgKnApOwordm9pZCBzY3RwX2JpbmR4X2RlbGV0ZV9hZGRyZXNzKHN0cnVjdCBzY3RwX2lucGNi
ICppbnAsIHN0cnVjdCBzb2NrYWRkciAqc2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3QgdnJmX2lkLCBpbnQgKmVycm9yKTsKKworaW50IHNjdHBfbG9jYWxfYWRkcl9j
b3VudChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpOworCisjaWZkZWYgU0NUUF9NQkNOVF9MT0dHSU5H
Cit2b2lkCitzY3RwX2ZyZWVfYnVmc3BhY2Uoc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3Rw
X2Fzc29jaWF0aW9uICosCisgICAgc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqLCBpbnQpOworCisj
ZWxzZQorI2RlZmluZSBzY3RwX2ZyZWVfYnVmc3BhY2Uoc3RjYiwgYXNvYywgdHAxLCBjaGtfY250
KSAgXAorZG8geyBcCisJaWYgKHRwMS0+ZGF0YSAhPSBOVUxMKSB7IFwKKwkJYXRvbWljX3N1YnRy
YWN0X2ludCgmKChhc29jKS0+Y2h1bmtzX29uX291dF9xdWV1ZSksIGNoa19jbnQpOyBcCisJCWlm
ICgoYXNvYyktPnRvdGFsX291dHB1dF9xdWV1ZV9zaXplID49IHRwMS0+Ym9va19zaXplKSB7IFwK
KwkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJigoYXNvYyktPnRvdGFsX291dHB1dF9xdWV1ZV9zaXpl
KSwgdHAxLT5ib29rX3NpemUpOyBcCisJCX0gZWxzZSB7IFwKKwkJCShhc29jKS0+dG90YWxfb3V0
cHV0X3F1ZXVlX3NpemUgPSAwOyBcCisJCX0gXAorCQlpZiAoc3RjYi0+c2N0cF9zb2NrZXQgJiYg
KChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwg
XAorCQkgICAgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9U
Q1BQT09MKSkpIHsgXAorCQkJaWYgKHN0Y2ItPnNjdHBfc29ja2V0LT5zb19zbmQuc2JfY2MgPj0g
dHAxLT5ib29rX3NpemUpIHsgXAorCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJigoc3RjYiktPnNj
dHBfc29ja2V0LT5zb19zbmQuc2JfY2MpLCB0cDEtPmJvb2tfc2l6ZSk7IFwKKwkJCX0gZWxzZSB7
IFwKKwkJCQlzdGNiLT5zY3RwX3NvY2tldC0+c29fc25kLnNiX2NjID0gMDsgXAorCQkJfSBcCisJ
CX0gXAorCX0gXAorfSB3aGlsZSAoMCkKKworI2VuZGlmCisKKyNkZWZpbmUgc2N0cF9mcmVlX3Nw
YnVmc3BhY2Uoc3RjYiwgYXNvYywgc3ApICBcCitkbyB7IFwKKwlpZiAoc3AtPmRhdGEgIT0gTlVM
TCkgeyBcCisJCWlmICgoYXNvYyktPnRvdGFsX291dHB1dF9xdWV1ZV9zaXplID49IHNwLT5sZW5n
dGgpIHsgXAorCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmKGFzb2MpLT50b3RhbF9vdXRwdXRfcXVl
dWVfc2l6ZSwgc3AtPmxlbmd0aCk7IFwKKwkJfSBlbHNlIHsgXAorCQkJKGFzb2MpLT50b3RhbF9v
dXRwdXRfcXVldWVfc2l6ZSA9IDA7IFwKKwkJfSBcCisJCWlmIChzdGNiLT5zY3RwX3NvY2tldCAm
JiAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8
fCBcCisJCSAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lO
X1RDUFBPT0wpKSkgeyBcCisJCQlpZiAoc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3NuZC5zYl9jYyA+
PSBzcC0+bGVuZ3RoKSB7IFwKKwkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5zY3RwX3Nv
Y2tldC0+c29fc25kLnNiX2NjLHNwLT5sZW5ndGgpOyBcCisJCQl9IGVsc2UgeyBcCisJCQkJc3Rj
Yi0+c2N0cF9zb2NrZXQtPnNvX3NuZC5zYl9jYyA9IDA7IFwKKwkJCX0gXAorCQl9IFwKKwl9IFwK
K30gd2hpbGUgKDApCisKKyNkZWZpbmUgc2N0cF9zbmRfc2JfYWxsb2Moc3RjYiwgc3opICBcCitk
byB7IFwKKwlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6
ZSxzeik7IFwKKwlpZiAoKHN0Y2ItPnNjdHBfc29ja2V0ICE9IE5VTEwpICYmIFwKKwkgICAgKChz
dGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwgXAor
CSAgICAgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQ
T09MKSkpIHsgXAorCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3NuZC5z
Yl9jYyxzeik7IFwKKwl9IFwKK30gd2hpbGUgKDApCisKKy8qIGZ1bmN0aW9ucyB0byBzdGFydC9z
dG9wIHVkcCB0dW5uZWxpbmcgKi8KKyNpZiAoZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQo
X19GcmVlQlNEX18pKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQordm9pZCBzY3RwX292ZXJf
dWRwX3N0b3Aodm9pZCk7CitpbnQgc2N0cF9vdmVyX3VkcF9zdGFydCh2b2lkKTsKKyNlbmRpZgor
I2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQordm9pZCBzY3Rw
X292ZXJfdWRwX3Jlc3RhcnQodm9pZCk7CisjZW5kaWYKKworaW50CitzY3RwX3NvcmVjZWl2ZShz
dHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICoqcHNhLAorICAgIHN0cnVjdCB1aW8g
KnVpbywKKyAgICBzdHJ1Y3QgbWJ1ZiAqKm1wMCwKKyAgICBzdHJ1Y3QgbWJ1ZiAqKmNvbnRyb2xw
LAorICAgIGludCAqZmxhZ3NwKTsKKwordm9pZAorc2N0cF9taXNjX2ludHModWludDhfdCBmcm9t
LCB1aW50MzJfdCBhLCB1aW50MzJfdCBiLCB1aW50MzJfdCBjLCB1aW50MzJfdCBkKTsKKwordm9p
ZAorc2N0cF93YWtldXBfbG9nKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICB1aW50MzJfdCB3
YWtlX2NudCwgaW50IGZyb20pOworCit2b2lkIHNjdHBfbG9nX3N0cm1fZGVsX2FsdChzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IsIHVpbnQzMl90LCB1aW50MTZfdCwgdWludDE2X3QsIGludCk7CisKK3Zv
aWQgc2N0cF9sb2dfbmFnbGVfZXZlbnQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBpbnQgYWN0aW9u
KTsKKworI2lmZGVmIFNDVFBfTUJVRl9MT0dHSU5HCit2b2lkCitzY3RwX2xvZ19tYihzdHJ1Y3Qg
bWJ1ZiAqbSwgaW50IGZyb20pOworCit2b2lkCitzY3RwX2xvZ19tYmMoc3RydWN0IG1idWYgKm0s
IGludCBmcm9tKTsKKyNlbmRpZgorCit2b2lkCitzY3RwX3NibG9nKHN0cnVjdCBzb2NrYnVmICpz
YiwKKyAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCBmcm9tLCBpbnQgaW5jcik7CisKK3Zv
aWQKK3NjdHBfbG9nX3N0cm1fZGVsKHN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9s
LAorICAgIHN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpwb3NjaGssCisgICAgaW50IGZyb20p
Owordm9pZCBzY3RwX2xvZ19jd25kKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBf
bmV0cyAqLCBpbnQsIHVpbnQ4X3QpOwordm9pZCBydG9fbG9nZ2luZyhzdHJ1Y3Qgc2N0cF9uZXRz
ICpuZXQsIGludCBmcm9tKTsKKwordm9pZCBzY3RwX2xvZ19jbG9zaW5nKHN0cnVjdCBzY3RwX2lu
cGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgaW50MTZfdCBsb2MpOworCit2b2lkIHNj
dHBfbG9nX2xvY2soc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNi
LCB1aW50OF90IGZyb20pOwordm9pZCBzY3RwX2xvZ19tYXhidXJzdChzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKiwgaW50LCBpbnQsIHVpbnQ4X3QpOwordm9pZCBzY3Rw
X2xvZ19ibG9jayh1aW50OF90LCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLCBzc2l6ZV90KTsK
K3ZvaWQgc2N0cF9sb2dfcnduZCh1aW50OF90LCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90
KTsKK3ZvaWQgc2N0cF9sb2dfcnduZF9zZXQodWludDhfdCwgdWludDMyX3QsIHVpbnQzMl90LCB1
aW50MzJfdCwgdWludDMyX3QpOworaW50IHNjdHBfZmlsbF9zdGF0X2xvZyh2b2lkICosIHNpemVf
dCAqKTsKK3ZvaWQgc2N0cF9sb2dfZnIodWludDMyX3QsIHVpbnQzMl90LCB1aW50MzJfdCwgaW50
KTsKK3ZvaWQgc2N0cF9sb2dfc2Fjayh1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50
MTZfdCwgdWludDE2X3QsIGludCk7Cit2b2lkIHNjdHBfbG9nX21hcCh1aW50MzJfdCwgdWludDMy
X3QsIHVpbnQzMl90LCBpbnQpOwordm9pZCBzY3RwX3ByaW50X21hcHBpbmdfYXJyYXkoc3RydWN0
IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpOwordm9pZCBzY3RwX2Nscl9zdGF0X2xvZyh2b2lkKTsK
KworI2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAordm9pZAorc2N0cF9hdWRpdGluZyhpbnQs
IHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX3RjYiAqLAorICAgIHN0cnVjdCBzY3Rw
X25ldHMgKik7Cit2b2lkIHNjdHBfYXVkaXRfbG9nKHVpbnQ4X3QsIHVpbnQ4X3QpOworCisjZW5k
aWYKK3VpbnQzMl90IHNjdHBfbWluX210dSh1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90KTsK
KyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQordm9p
ZCBzY3RwX2hjX3NldF9tdHUodW5pb24gc2N0cF9zb2Nrc3RvcmUgKiwgdWludDE2X3QsIHVpbnQz
Ml90KTsKK3VpbnQzMl90IHNjdHBfaGNfZ2V0X210dSh1bmlvbiBzY3RwX3NvY2tzdG9yZSAqLCB1
aW50MTZfdCk7CisjZW5kaWYKK3ZvaWQgc2N0cF9zZXRfc3RhdGUoc3RydWN0IHNjdHBfdGNiICos
IGludCk7Cit2b2lkIHNjdHBfYWRkX3N1YnN0YXRlKHN0cnVjdCBzY3RwX3RjYiAqLCBpbnQpOwor
dWludDMyX3Qgc2N0cF90aWNrc190b19tc2Vjcyh1aW50MzJfdCk7Cit1aW50MzJfdCBzY3RwX21z
ZWNzX3RvX3RpY2tzKHVpbnQzMl90KTsKK3VpbnQzMl90IHNjdHBfdGlja3NfdG9fc2Vjcyh1aW50
MzJfdCk7Cit1aW50MzJfdCBzY3RwX3NlY3NfdG9fdGlja3ModWludDMyX3QpOworCisjZW5kaWYJ
CQkJLyogX0tFUk5FTCAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGli
L25ldGluZXQ2L21lc29uLmJ1aWxkIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0Ni9tZXNv
bi5idWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjA0MzA3ZGY1
OWUwNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldDYvbWVz
b24uYnVpbGQKQEAgLTAsMCArMSBAQAorc291cmNlcyArPSBmaWxlcygnc2N0cDZfdXNycmVxLmMn
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0Ni9zY3RwNl91c3JyZXEu
YyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldDYvc2N0cDZfdXNycmVxLmMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hYTBjMDA1MWE1ZTgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQ2L3NjdHA2X3VzcnJlcS5jCkBAIC0w
LDAgKzEsMTg1NCBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xh
dXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBS
YW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIw
MDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Us
CisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNp
bmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKyNlbmRpZgorCisj
aW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+CisjaWZkZWYgSU5FVDYKKyNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2luY2x1ZGUgPHN5cy9wcm9j
Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfcGNiLmg+CisjaW5jbHVkZSA8bmV0
aW5ldC9zY3RwX2hlYWRlci5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF92YXIuaD4KKyNpbmNs
dWRlIDxuZXRpbmV0Ni9zY3RwNl92YXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfc3lzY3Rs
Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX291dHB1dC5oPgorI2luY2x1ZGUgPG5ldGluZXQv
c2N0cF91aW8uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYXNjb25mLmg+CisjaW5jbHVkZSA8
bmV0aW5ldC9zY3RwdXRpbC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9pbmRhdGEuaD4KKyNp
bmNsdWRlIDxuZXRpbmV0L3NjdHBfdGltZXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYXV0
aC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9pbnB1dC5oPgorI2luY2x1ZGUgPG5ldGluZXQv
c2N0cF9vdXRwdXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYnNkX2FkZHIuaD4KKyNpbmNs
dWRlIDxuZXRpbmV0L3NjdHBfY3JjMzIuaD4KKyNpZiAhZGVmaW5lZChfV0lOMzIpCisjaW5jbHVk
ZSA8bmV0aW5ldC9pY21wNi5oPgorI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+CisjZW5kaWYKKyNp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitpbnQgaXA2X3Y2b25seT0wOworI2VuZGlmCisjaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmZGVmIElORVQKK3ZvaWQKK2luNl9zaW42XzJfc2lu
KHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luLCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42KQorewor
I2lmIGRlZmluZWQoX1dJTjMyKQorCXVpbnQzMl90IHRlbXA7CisjZW5kaWYKKwltZW1zZXQoc2lu
LCAwLCBzaXplb2YoKnNpbikpOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCXNpbi0+c2luX2xlbiA9
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJc2luLT5zaW5fZmFtaWx5ID0g
QUZfSU5FVDsKKwlzaW4tPnNpbl9wb3J0ID0gc2luNi0+c2luNl9wb3J0OworI2lmIGRlZmluZWQo
X1dJTjMyKQorCXRlbXAgPSBzaW42LT5zaW42X2FkZHIuczZfYWRkcjE2WzddOworCXRlbXAgPSB0
ZW1wIDw8IDE2OworCXRlbXAgPSB0ZW1wIHwgc2luNi0+c2luNl9hZGRyLnM2X2FkZHIxNls2XTsK
KwlzaW4tPnNpbl9hZGRyLnNfYWRkciA9IHRlbXA7CisjZWxzZQorCXNpbi0+c2luX2FkZHIuc19h
ZGRyID0gc2luNi0+c2luNl9hZGRyLnM2X2FkZHIzMlszXTsKKyNlbmRpZgorfQorCit2b2lkCitp
bjZfc2luNl8yX3Npbl9pbl9zb2NrKHN0cnVjdCBzb2NrYWRkciAqbmFtKQoreworCXN0cnVjdCBz
b2NrYWRkcl9pbiAqc2luX3A7CisJc3RydWN0IHNvY2thZGRyX2luNiBzaW42OworCisJLyogc2F2
ZSBvcmlnaW5hbCBzb2NrYWRkcl9pbjYgYWRkciBhbmQgY29udmVydCBpdCB0byBzb2NrYWRkcl9p
biAgKi8KKwlzaW42ID0gKihzdHJ1Y3Qgc29ja2FkZHJfaW42ICopbmFtOworCXNpbl9wID0gKHN0
cnVjdCBzb2NrYWRkcl9pbiAqKW5hbTsKKwlpbjZfc2luNl8yX3NpbihzaW5fcCwgJnNpbjYpOwor
fQorCit2b2lkCitpbjZfc2luXzJfdjRtYXBzaW42KGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAq
c2luLCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42KQoreworCW1lbXNldChzaW42LCAwLCBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworCXNpbjYtPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7
CisjaWZkZWYgSEFWRV9TSU42X0xFTgorCXNpbjYtPnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbjYpOworI2VuZGlmCisJc2luNi0+c2luNl9wb3J0ID0gc2luLT5zaW5fcG9ydDsK
KyNpZiBkZWZpbmVkKF9XSU4zMikKKwkoKHVpbnQzMl90ICopJnNpbjYtPnNpbjZfYWRkcilbMF0g
PSAwOworCSgodWludDMyX3QgKikmc2luNi0+c2luNl9hZGRyKVsxXSA9IDA7CisJKCh1aW50MzJf
dCAqKSZzaW42LT5zaW42X2FkZHIpWzJdID0gaHRvbmwoMHhmZmZmKTsKKwkoKHVpbnQzMl90ICop
JnNpbjYtPnNpbjZfYWRkcilbM10gPSBzaW4tPnNpbl9hZGRyLnNfYWRkcjsKKyNlbHNlCisJc2lu
Ni0+c2luNl9hZGRyLnM2X2FkZHIzMlswXSA9IDA7CisJc2luNi0+c2luNl9hZGRyLnM2X2FkZHIz
MlsxXSA9IDA7CisJc2luNi0+c2luNl9hZGRyLnM2X2FkZHIzMlsyXSA9IGh0b25sKDB4ZmZmZik7
CisJc2luNi0+c2luNl9hZGRyLnM2X2FkZHIzMlszXSA9IHNpbi0+c2luX2FkZHIuc19hZGRyOwor
I2VuZGlmCit9CisjZW5kaWYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
K2ludAorI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKQorc2N0
cDZfaW5wdXRfd2l0aF9wb3J0KHN0cnVjdCBtYnVmICoqaV9wYWssIGludCAqb2ZmcCwgdWludDE2
X3QgcG9ydCkKKyNlbHNlCitzY3RwNl9pbnB1dChzdHJ1Y3QgbWJ1ZiAqKmlfcGFrLCBpbnQgKm9m
ZnAsIGludCBwcm90bykKKyNlbmRpZgoreworCXN0cnVjdCBtYnVmICptOworCWludCBpcGhsZW47
CisJdWludDMyX3QgdnJmX2lkOworCXVpbnQ4X3QgZWNuX2JpdHM7CisJc3RydWN0IHNvY2thZGRy
X2luNiBzcmMsIGRzdDsKKwlzdHJ1Y3QgaXA2X2hkciAqaXA2OworCXN0cnVjdCBzY3RwaGRyICpz
aDsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2g7CisJaW50IGxlbmd0aCwgb2Zmc2V0OworCXVp
bnQ4X3QgY29tcHV0ZV9jcmM7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwl1aW50MzJfdCBt
Zmxvd2lkOworCXVpbnQ4X3QgbWZsb3d0eXBlOworCXVpbnQxNl90IGZpYm51bTsKKyNlbmRpZgor
I2lmICEoZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pKQorCXVpbnQx
Nl90IHBvcnQgPSAwOworI2VuZGlmCisKKwlpcGhsZW4gPSAqb2ZmcDsKKwlpZiAoU0NUUF9HRVRf
UEtUX1ZSRklEKCppX3BhaywgdnJmX2lkKSkgeworCQlTQ1RQX1JFTEVBU0VfUEtUKCppX3Bhayk7
CisJCXJldHVybiAoSVBQUk9UT19ET05FKTsKKwl9CisJbSA9IFNDVFBfSEVBREVSX1RPX0NIQUlO
KCppX3Bhayk7CisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKKwkvKiBMb2cgaW4gYW55IGlucHV0
IG1idWZzICovCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFND
VFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkgeworCQlzY3RwX2xvZ19tYmMobSwgU0NUUF9NQlVGX0lO
UFVUKTsKKwl9CisjZW5kaWYKKyNpZmRlZiBTQ1RQX1BBQ0tFVF9MT0dHSU5HCisJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTEFTVF9QQUNLRVRfVFJBQ0lO
RykgeworCQlzY3RwX3BhY2tldF9sb2cobSk7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykKKwlTQ1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZGTE9BRCwKKwkgICAgICAgICJzY3Rw
Nl9pbnB1dCgpOiBQYWNrZXQgb2YgbGVuZ3RoICVkIHJlY2VpdmVkIG9uICVzIHdpdGggY3N1bV9m
bGFncyAweCViLlxuIiwKKwkgICAgICAgIG0tPm1fcGt0aGRyLmxlbiwKKwkgICAgICAgIGlmX25h
bWUobS0+bV9wa3RoZHIucmN2aWYpLAorCSAgICAgICAgKGludCltLT5tX3BrdGhkci5jc3VtX2Zs
YWdzLCBDU1VNX0JJVFMpOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJU0NUUERC
RyhTQ1RQX0RFQlVHX0NSQ09GRkxPQUQsCisJICAgICAgICAic2N0cDZfaW5wdXQoKTogUGFja2V0
IG9mIGxlbmd0aCAlZCByZWNlaXZlZCBvbiAlcyVkIHdpdGggY3N1bV9mbGFncyAweCV4LlxuIiwK
KwkgICAgICAgIG0tPm1fcGt0aGRyLmxlbiwKKwkgICAgICAgIG0tPm1fcGt0aGRyLnJjdmlmLT5p
Zl9uYW1lLAorCSAgICAgICAgbS0+bV9wa3RoZHIucmN2aWYtPmlmX3VuaXQsCisJICAgICAgICBt
LT5tX3BrdGhkci5jc3VtX2ZsYWdzKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCVNDVFBEQkcoU0NUUF9ERUJVR19DUkNPRkZMT0FELAor
CSAgICAgICAgInNjdHA2X2lucHV0KCk6IFBhY2tldCBvZiBsZW5ndGggJWQgcmVjZWl2ZWQgb24g
JXMgd2l0aCBjc3VtX2ZsYWdzIDB4JXguXG4iLAorCSAgICAgICAgbS0+bV9wa3RoZHIubGVuLAor
CSAgICAgICAgbS0+bV9wa3RoZHIucmN2aWYtPmlmX3huYW1lLAorCSAgICAgICAgbS0+bV9wa3Ro
ZHIuY3N1bV9mbGFncyk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCW1mbG93
aWQgPSBtLT5tX3BrdGhkci5mbG93aWQ7CisJbWZsb3d0eXBlID0gTV9IQVNIVFlQRV9HRVQobSk7
CisJZmlibnVtID0gTV9HRVRGSUIobSk7CisjZW5kaWYKKwlTQ1RQX1NUQVRfSU5DUihzY3Rwc19y
ZWN2cGFja2V0cyk7CisJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX2lucGFja2V0cyk7
CisJLyogR2V0IElQLCBTQ1RQLCBhbmQgZmlyc3QgY2h1bmsgaGVhZGVyIHRvZ2V0aGVyIGluIHRo
ZSBmaXJzdCBtYnVmLiAqLworCW9mZnNldCA9IGlwaGxlbiArIHNpemVvZihzdHJ1Y3Qgc2N0cGhk
cikgKyBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpOworCWlmIChtLT5tX2xlbiA8IG9mZnNl
dCkgeworCQltID0gbV9wdWxsdXAobSwgb2Zmc2V0KTsKKwkJaWYgKG0gPT0gTlVMTCkgeworCQkJ
U0NUUF9TVEFUX0lOQ1Ioc2N0cHNfaGRyb3BzKTsKKwkJCXJldHVybiAoSVBQUk9UT19ET05FKTsK
KwkJfQorCX0KKwlpcDYgPSBtdG9kKG0sIHN0cnVjdCBpcDZfaGRyICopOworCXNoID0gKHN0cnVj
dCBzY3RwaGRyICopKG10b2QobSwgY2FkZHJfdCkgKyBpcGhsZW4pOworCWNoID0gKHN0cnVjdCBz
Y3RwX2NodW5raGRyICopKChjYWRkcl90KXNoICsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSk7CisJ
b2Zmc2V0IC09IHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7CisJbWVtc2V0KCZzcmMsIDAs
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJc3JjLnNpbjZfZmFtaWx5ID0gQUZfSU5F
VDY7CisjaWZkZWYgSEFWRV9TSU42X0xFTgorCXNyYy5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW42KTsKKyNlbmRpZgorCXNyYy5zaW42X3BvcnQgPSBzaC0+c3JjX3BvcnQ7CisJ
c3JjLnNpbjZfYWRkciA9IGlwNi0+aXA2X3NyYzsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQor
I2lmIGRlZmluZWQoX19BUFBMRV9fKQorCS8qIFhYWDogVGhpcyBjb2RlIHNob3VsZCBhbHNvIGJl
IHVzZWQgb24gQXBwbGUgKi8KKyNlbmRpZgorCWlmIChpbjZfc2V0c2NvcGUoJnNyYy5zaW42X2Fk
ZHIsIG0tPm1fcGt0aGRyLnJjdmlmLCBOVUxMKSAhPSAwKSB7CisJCWdvdG8gb3V0OworCX0KKyNl
bmRpZgorCW1lbXNldCgmZHN0LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworCWRz
dC5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworI2lmZGVmIEhBVkVfU0lONl9MRU4KKwlkc3Quc2lu
Nl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwlkc3Quc2luNl9w
b3J0ID0gc2gtPmRlc3RfcG9ydDsKKwlkc3Quc2luNl9hZGRyID0gaXA2LT5pcDZfZHN0OworI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJLyogWFhYOiBU
aGlzIGNvZGUgc2hvdWxkIGFsc28gYmUgdXNlZCBvbiBBcHBsZSAqLworI2VuZGlmCisJaWYgKGlu
Nl9zZXRzY29wZSgmZHN0LnNpbjZfYWRkciwgbS0+bV9wa3RoZHIucmN2aWYsIE5VTEwpICE9IDAp
IHsKKwkJZ290byBvdXQ7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisjaWYg
ZGVmaW5lZChORkFJVEgpICYmIDAgPCBORkFJVEgKKwlpZiAoZmFpdGhwcmVmaXgoJmRzdC5zaW42
X2FkZHIpKSB7CisJCWdvdG8gb3V0OworCX0KKyNlbmRpZgorI2VuZGlmCisJbGVuZ3RoID0gbnRv
aHMoaXA2LT5pcDZfcGxlbikgKyBpcGhsZW47CisJLyogVmFsaWRhdGUgbWJ1ZiBjaGFpbiBsZW5n
dGggd2l0aCBJUCBwYXlsb2FkIGxlbmd0aC4gKi8KKwlpZiAoU0NUUF9IRUFERVJfTEVOKG0pICE9
IGxlbmd0aCkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQxLAorCQkgICAgICAgICJzY3Rw
Nl9pbnB1dCgpIGxlbmd0aDolZCByZXBvcnRlZCBsZW5ndGg6JWRcbiIsIGxlbmd0aCwgU0NUUF9I
RUFERVJfTEVOKG0pKTsKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfaGRyb3BzKTsKKwkJZ290byBv
dXQ7CisJfQorCWlmIChJTjZfSVNfQUREUl9NVUxUSUNBU1QoJmlwNi0+aXA2X2RzdCkpIHsKKwkJ
Z290byBvdXQ7CisJfQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJZWNuX2JpdHMgPSBJUFY2
X1RSQUZGSUNfQ0xBU1MoaXA2KTsKKwlpZiAobS0+bV9wa3RoZHIuY3N1bV9mbGFncyAmIENTVU1f
U0NUUF9WQUxJRCkgeworCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2aHdjcmMpOworCQljb21w
dXRlX2NyYyA9IDA7CisJfSBlbHNlIHsKKyNlbHNlCisJZWNuX2JpdHMgPSAoKG50b2hsKGlwNi0+
aXA2X2Zsb3cpID4+IDIwKSAmIDB4MDAwMDAwZmYpOworCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbm9fY3N1bV9vbl9sb29wYmFjaykgJiYKKwkgICAgKElONl9BUkVfQUREUl9FUVVBTCgmc3Jj
LnNpbjZfYWRkciwgJmRzdC5zaW42X2FkZHIpKSkgeworCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19y
ZWN2aHdjcmMpOworCQljb21wdXRlX2NyYyA9IDA7CisJfSBlbHNlIHsKKyNlbmRpZgorCQlTQ1RQ
X1NUQVRfSU5DUihzY3Rwc19yZWN2c3djcmMpOworCQljb21wdXRlX2NyYyA9IDE7CisJfQorCXNj
dHBfY29tbW9uX2lucHV0X3Byb2Nlc3NpbmcoJm0sIGlwaGxlbiwgb2Zmc2V0LCBsZW5ndGgsCisJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJnNyYywKKwkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmZHN0LAorCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2gsIGNoLAorCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29tcHV0ZV9jcmMsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY25f
Yml0cywKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBmaWJudW0sCisjZW5kaWYKKwkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7Cisgb3V0OgorCWlmIChtKSB7CisJCXNjdHBf
bV9mcmVlbShtKTsKKwl9CisJcmV0dXJuIChJUFBST1RPX0RPTkUpOworfQorCisjaWYgZGVmaW5l
ZChfX0FQUExFX18pCitpbnQKK3NjdHA2X2lucHV0KHN0cnVjdCBtYnVmICoqaV9wYWssIGludCAq
b2ZmcCkKK3sKKwlyZXR1cm4gKHNjdHA2X2lucHV0X3dpdGhfcG9ydChpX3Bhaywgb2ZmcCwgMCkp
OworfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKK2ludAorc2N0cDZfaW5wdXQo
c3RydWN0IG1idWYgKippX3BhaywgaW50ICpvZmZwLCBpbnQgcHJvdG8gU0NUUF9VTlVTRUQpCit7
CisJcmV0dXJuIChzY3RwNl9pbnB1dF93aXRoX3BvcnQoaV9wYWssIG9mZnAsIDApKTsKK30KKyNl
bmRpZgorCit2b2lkCitzY3RwNl9ub3RpZnkoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKKyAgICAg
ICAgICAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAgc3RydWN0IHNjdHBf
bmV0cyAqbmV0LAorICAgICAgICAgICAgIHVpbnQ4X3QgaWNtcDZfdHlwZSwKKyAgICAgICAgICAg
ICB1aW50OF90IGljbXA2X2NvZGUsCisgICAgICAgICAgICAgdWludDMyX3QgbmV4dF9tdHUpCit7
CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJc3RydWN0IHNvY2tldCAqc287CisjZW5kaWYKKwlp
bnQgdGltZXJfc3RvcHBlZDsKKworCXN3aXRjaCAoaWNtcDZfdHlwZSkgeworCWNhc2UgSUNNUDZf
RFNUX1VOUkVBQ0g6CisJCWlmICgoaWNtcDZfY29kZSA9PSBJQ01QNl9EU1RfVU5SRUFDSF9OT1JP
VVRFKSB8fAorCQkgICAgKGljbXA2X2NvZGUgPT0gSUNNUDZfRFNUX1VOUkVBQ0hfQURNSU4pIHx8
CisJCSAgICAoaWNtcDZfY29kZSA9PSBJQ01QNl9EU1RfVU5SRUFDSF9CRVlPTkRTQ09QRSkgfHwK
KwkJICAgIChpY21wNl9jb2RlID09IElDTVA2X0RTVF9VTlJFQUNIX0FERFIpKSB7CisJCQkvKiBN
YXJrIHRoZSBuZXQgdW5yZWFjaGFibGUuICovCisJCQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NU
UF9BRERSX1JFQUNIQUJMRSkgeworCQkJCS8qIE9rIHRoYXQgZGVzdGluYXRpb24gaXMgbm90IHJl
YWNoYWJsZSAqLworCQkJCW5ldC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9BRERSX1JFQUNIQUJMRTsK
KwkJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9QRjsKKwkJCQlzY3RwX3VscF9ub3Rp
ZnkoU0NUUF9OT1RJRllfSU5URVJGQUNFX0RPV04sCisJCQkJICAgICAgICAgICAgICAgIHN0Y2Is
IDAsICh2b2lkICopbmV0LCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJfQorCQl9CisJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKKwkJYnJlYWs7CisJY2FzZSBJQ01QNl9QQVJBTV9QUk9COgorCQkv
KiBUcmVhdCBpdCBsaWtlIGFuIEFCT1JULiAqLworCQlpZiAoaWNtcDZfY29kZSA9PSBJQ01QNl9Q
QVJBTVBST0JfTkVYVEhFQURFUikgeworCQkJc2N0cF9hYm9ydF9ub3RpZmljYXRpb24oc3RjYiwg
MSwgMCwgTlVMTCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykK
KwkJCXNvID0gU0NUUF9JTlBfU08oaW5wKTsKKwkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29j
LnJlZmNudCwgMSk7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQlTQ1RQX1NPQ0tFVF9M
T0NLKHNvLCAxKTsKKwkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQlhdG9taWNfc3VidHJhY3Rf
aW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisjZW5kaWYKKwkJCSh2b2lkKXNjdHBfZnJlZV9h
c3NvYyhpbnAsIHN0Y2IsIFNDVFBfTk9STUFMX1BST0MsCisJCQkJCSAgICAgIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSArIFNDVFBfTE9DXzIpOworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCQkJU0NU
UF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJU0NUUF9UQ0Jf
VU5MT0NLKHN0Y2IpOworCQl9CisJCWJyZWFrOworCWNhc2UgSUNNUDZfUEFDS0VUX1RPT19CSUc6
CisJCWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfTk9fUE1UVUQpIHsKKwkJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChTQ1RQX09TX1RJTUVSX1BF
TkRJTkcoJm5ldC0+cG10dV90aW1lci50aW1lcikpIHsKKwkJCXRpbWVyX3N0b3BwZWQgPSAxOwor
CQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9QQVRITVRVUkFJU0UsIGlucCwgc3Rj
YiwgbmV0LAorCQkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSArIFNDVFBf
TE9DXzEpOworCQl9IGVsc2UgeworCQkJdGltZXJfc3RvcHBlZCA9IDA7CisJCX0KKwkJLyogVXBk
YXRlIHRoZSBwYXRoIE1UVS4gKi8KKwkJaWYgKG5ldC0+cG9ydCkgeworCQkJbmV4dF9tdHUgLT0g
c2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCQl9CisJCWlmIChuZXQtPm10dSA+IG5leHRfbXR1KSB7
CisJCQluZXQtPm10dSA9IG5leHRfbXR1OworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCQlp
ZiAobmV0LT5wb3J0KSB7CisJCQkJc2N0cF9oY19zZXRfbXR1KCZuZXQtPnJvLl9sX2FkZHIsIGlu
cC0+ZmlibnVtLCBuZXh0X210dSArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7CisJCQl9IGVsc2Ug
eworCQkJCXNjdHBfaGNfc2V0X210dSgmbmV0LT5yby5fbF9hZGRyLCBpbnAtPmZpYm51bSwgbmV4
dF9tdHUpOworCQkJfQorI2VuZGlmCisJCX0KKwkJLyogVXBkYXRlIHRoZSBhc3NvY2lhdGlvbiBN
VFUgKi8KKwkJaWYgKHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1ID4gbmV4dF9tdHUpIHsKKwkJCXNj
dHBfcGF0aG10dV9hZGp1c3RtZW50KHN0Y2IsIG5leHRfbXR1KTsKKwkJfQorCQkvKiBGaW5hbGx5
LCBzdGFydCB0aGUgUE1UVSB0aW1lciBpZiBpdCB3YXMgcnVubmluZyBiZWZvcmUuICovCisJCWlm
ICh0aW1lcl9zdG9wcGVkKSB7CisJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9Q
QVRITVRVUkFJU0UsIGlucCwgc3RjYiwgbmV0KTsKKwkJfQorCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJYnJl
YWs7CisJfQorfQorCit2b2lkCisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKEFQ
UExFX0xFT1BBUkQpICYmICFkZWZpbmVkKEFQUExFX1NOT1dMRU9QQVJEKSAmJiAhZGVmaW5lZChB
UFBMRV9MSU9OKSAmJiAhZGVmaW5lZChBUFBMRV9NT1VOVEFJTkxJT04pICYmICFkZWZpbmVkKEFQ
UExFX0VMQ0FQSVRBTikKK3NjdHA2X2N0bGlucHV0KGludCBjbWQsIHN0cnVjdCBzb2NrYWRkciAq
cGt0ZHN0LCB2b2lkICpkLCBzdHJ1Y3QgaWZuZXQgKmlmcCBTQ1RQX1VOVVNFRCkKKyNlbHNlCitz
Y3RwNl9jdGxpbnB1dChpbnQgY21kLCBzdHJ1Y3Qgc29ja2FkZHIgKnBrdGRzdCwgdm9pZCAqZCkK
KyNlbmRpZgoreworCXN0cnVjdCBpcDZjdGxwYXJhbSAqaXA2Y3A7CisJc3RydWN0IHNjdHBfaW5w
Y2IgKmlucDsKKwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0
OworCXN0cnVjdCBzY3RwaGRyIHNoOworCXN0cnVjdCBzb2NrYWRkcl9pbjYgc3JjLCBkc3Q7CisK
KyNpZmRlZiBIQVZFX1NBX0xFTgorCWlmIChwa3Rkc3QtPnNhX2ZhbWlseSAhPSBBRl9JTkVUNiB8
fAorCSAgICBwa3Rkc3QtPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIHsK
KyNlbHNlCisJaWYgKHBrdGRzdC0+c2FfZmFtaWx5ICE9IEFGX0lORVQ2KSB7CisjZW5kaWYKKwkJ
cmV0dXJuOworCX0KKworCWlmICgodW5zaWduZWQpY21kID49IFBSQ19OQ01EUykgeworCQlyZXR1
cm47CisJfQorCWlmIChQUkNfSVNfUkVESVJFQ1QoY21kKSkgeworCQlkID0gTlVMTDsKKwl9IGVs
c2UgaWYgKGluZXQ2Y3RsZXJybWFwW2NtZF0gPT0gMCkgeworCQlyZXR1cm47CisJfQorCS8qIElm
IHRoZSBwYXJhbWV0ZXIgaXMgZnJvbSBpY21wNiwgZGVjb2RlIGl0LiAqLworCWlmIChkICE9IE5V
TEwpIHsKKwkJaXA2Y3AgPSAoc3RydWN0IGlwNmN0bHBhcmFtICopZDsKKwl9IGVsc2UgeworCQlp
cDZjcCA9IChzdHJ1Y3QgaXA2Y3RscGFyYW0gKilOVUxMOworCX0KKworCWlmIChpcDZjcCAhPSBO
VUxMKSB7CisJCS8qCisJCSAqIFhYWDogV2UgYXNzdW1lIHRoYXQgd2hlbiBJUFY2IGlzIG5vbiBO
VUxMLCBNIGFuZCBPRkYgYXJlCisJCSAqIHZhbGlkLgorCQkgKi8KKwkJaWYgKGlwNmNwLT5pcDZj
X20gPT0gTlVMTCkgeworCQkJcmV0dXJuOworCQl9CisKKwkJLyogQ2hlY2sgaWYgd2UgY2FuIHNh
ZmVseSBleGFtaW5lIHRoZSBwb3J0cyBhbmQgdGhlCisJCSAqIHZlcmlmaWNhdGlvbiB0YWcgb2Yg
dGhlIFNDVFAgY29tbW9uIGhlYWRlci4KKwkJICovCisJCWlmIChpcDZjcC0+aXA2Y19tLT5tX3Br
dGhkci5sZW4gPAorCQkgICAgKGludDMyX3QpKGlwNmNwLT5pcDZjX29mZiArIG9mZnNldG9mKHN0
cnVjdCBzY3RwaGRyLCBjaGVja3N1bSkpKSB7CisJCQlyZXR1cm47CisJCX0KKworCQkvKiBDb3B5
IG91dCB0aGUgcG9ydCBudW1iZXJzIGFuZCB0aGUgdmVyaWZpY2F0aW9uIHRhZy4gKi8KKwkJbWVt
c2V0KCZzaCwgMCwgc2l6ZW9mKHNoKSk7CisJCW1fY29weWRhdGEoaXA2Y3AtPmlwNmNfbSwKKwkJ
ICAgICAgICAgICBpcDZjcC0+aXA2Y19vZmYsCisJCSAgICAgICAgICAgc2l6ZW9mKHVpbnQxNl90
KSArIHNpemVvZih1aW50MTZfdCkgKyBzaXplb2YodWludDMyX3QpLAorCQkgICAgICAgICAgIChj
YWRkcl90KSZzaCk7CisJCW1lbXNldCgmc3JjLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu
NikpOworCQlzcmMuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyNpZmRlZiBIQVZFX1NJTjZfTEVO
CisJCXNyYy5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgor
CQlzcmMuc2luNl9wb3J0ID0gc2guc3JjX3BvcnQ7CisJCXNyYy5zaW42X2FkZHIgPSBpcDZjcC0+
aXA2Y19pcDYtPmlwNl9zcmM7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJaWYgKGluNl9z
ZXRzY29wZSgmc3JjLnNpbjZfYWRkciwgaXA2Y3AtPmlwNmNfbS0+bV9wa3RoZHIucmN2aWYsIE5V
TEwpICE9IDApIHsKKwkJCXJldHVybjsKKwkJfQorI2VuZGlmCisJCW1lbXNldCgmZHN0LCAwLCBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworCQlkc3Quc2luNl9mYW1pbHkgPSBBRl9JTkVU
NjsKKyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJCWRzdC5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW42KTsKKyNlbmRpZgorCQlkc3Quc2luNl9wb3J0ID0gc2guZGVzdF9wb3J0Owor
CQlkc3Quc2luNl9hZGRyID0gaXA2Y3AtPmlwNmNfaXA2LT5pcDZfZHN0OworI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pCisJCWlmIChpbjZfc2V0c2NvcGUoJmRzdC5zaW42X2FkZHIsIGlwNmNwLT5p
cDZjX20tPm1fcGt0aGRyLnJjdmlmLCBOVUxMKSAhPSAwKSB7CisJCQlyZXR1cm47CisJCX0KKyNl
bmRpZgorCQlpbnAgPSBOVUxMOworCQluZXQgPSBOVUxMOworCQlzdGNiID0gc2N0cF9maW5kYXNz
b2NpYXRpb25fYWRkcl9zYSgoc3RydWN0IHNvY2thZGRyICopJmRzdCwKKwkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzcmMsCisJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnAsICZuZXQsIDEsIFNDVFBfREVGQVVM
VF9WUkZJRCk7CisJCWlmICgoc3RjYiAhPSBOVUxMKSAmJgorCQkgICAgKG5ldCAhPSBOVUxMKSAm
JgorCQkgICAgKGlucCAhPSBOVUxMKSkgeworCQkJLyogQ2hlY2sgdGhlIHZlcmlmaWNhdGlvbiB0
YWcgKi8KKwkJCWlmIChudG9obChzaC52X3RhZykgIT0gMCkgeworCQkJCS8qCisJCQkJICogVGhp
cyBtdXN0IGJlIHRoZSB2ZXJpZmljYXRpb24gdGFnIHVzZWQgZm9yCisJCQkJICogc2VuZGluZyBv
dXQgcGFja2V0cy4gV2UgZG9uJ3QgY29uc2lkZXIKKwkJCQkgKiBwYWNrZXRzIHJlZmxlY3Rpbmcg
dGhlIHZlcmlmaWNhdGlvbiB0YWcuCisJCQkJICovCisJCQkJaWYgKG50b2hsKHNoLnZfdGFnKSAh
PSBzdGNiLT5hc29jLnBlZXJfdnRhZykgeworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJ
CQkJCXJldHVybjsKKwkJCQl9CisJCQl9IGVsc2UgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
CisJCQkJaWYgKGlwNmNwLT5pcDZjX20tPm1fcGt0aGRyLmxlbiA+PQorCQkJCSAgICBpcDZjcC0+
aXA2Y19vZmYgKyBzaXplb2Yoc3RydWN0IHNjdHBoZHIpICsKKwkJCQkgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSArCisJCQkJICAgICAgICAgICAgICAg
ICAgICAgIG9mZnNldG9mKHN0cnVjdCBzY3RwX2luaXQsIGFfcnduZCkpIHsKKwkJCQkJLyoKKwkJ
CQkJICogSW4gdGhpcyBjYXNlIHdlIGNhbiBjaGVjayBpZiB3ZQorCQkJCQkgKiBnb3QgYW4gSU5J
VCBjaHVuayBhbmQgaWYgdGhlCisJCQkJCSAqIGluaXRpYXRlIHRhZyBtYXRjaGVzLgorCQkJCQkg
Ki8KKwkJCQkJdWludDMyX3QgaW5pdGlhdGVfdGFnOworCQkJCQl1aW50OF90IGNodW5rX3R5cGU7
CisKKwkJCQkJbV9jb3B5ZGF0YShpcDZjcC0+aXA2Y19tLAorCQkJCQkgICAgICAgICAgIGlwNmNw
LT5pcDZjX29mZiArCisJCQkJCSAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSwKKwkJ
CQkJICAgICAgICAgICBzaXplb2YodWludDhfdCksCisJCQkJCSAgICAgICAgICAgKGNhZGRyX3Qp
JmNodW5rX3R5cGUpOworCQkJCQltX2NvcHlkYXRhKGlwNmNwLT5pcDZjX20sCisJCQkJCSAgICAg
ICAgICAgaXA2Y3AtPmlwNmNfb2ZmICsKKwkJCQkJICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNj
dHBoZHIpICsKKwkJCQkJICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpLAor
CQkJCQkgICAgICAgICAgIHNpemVvZih1aW50MzJfdCksCisJCQkJCSAgICAgICAgICAgKGNhZGRy
X3QpJmluaXRpYXRlX3RhZyk7CisJCQkJCWlmICgoY2h1bmtfdHlwZSAhPSBTQ1RQX0lOSVRJQVRJ
T04pIHx8CisJCQkJCSAgICAobnRvaGwoaW5pdGlhdGVfdGFnKSAhPSBzdGNiLT5hc29jLm15X3Z0
YWcpKSB7CisJCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCQlyZXR1cm47CisJCQkJ
CX0KKwkJCQl9IGVsc2UgeworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCXJldHVy
bjsKKwkJCQl9CisjZWxzZQorCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQlyZXR1cm47
CisjZW5kaWYKKwkJCX0KKwkJCXNjdHA2X25vdGlmeShpbnAsIHN0Y2IsIG5ldCwKKwkJCSAgICAg
ICAgICAgICBpcDZjcC0+aXA2Y19pY21wNi0+aWNtcDZfdHlwZSwKKwkJCSAgICAgICAgICAgICBp
cDZjcC0+aXA2Y19pY21wNi0+aWNtcDZfY29kZSwKKwkJCSAgICAgICAgICAgICBudG9obChpcDZj
cC0+aXA2Y19pY21wNi0+aWNtcDZfbXR1KSk7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CQkJaWYgKCEoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tF
VF9HT05FKSAmJgorCQkJICAgIChzdGNiLT5zY3RwX3NvY2tldCAhPSBOVUxMKSB7CisJCQkJc3Ry
dWN0IHNvY2tldCAqdXBjYWxsX3NvY2tldDsKKworCQkJCXVwY2FsbF9zb2NrZXQgPSBzdGNiLT5z
Y3RwX3NvY2tldDsKKwkJCQlTT0NLX0xPQ0sodXBjYWxsX3NvY2tldCk7CisJCQkJc29yZWYodXBj
YWxsX3NvY2tldCk7CisJCQkJU09DS19VTkxPQ0sodXBjYWxsX3NvY2tldCk7CisJCQkJaWYgKCh1
cGNhbGxfc29ja2V0LT5zb191cGNhbGwgIT0gTlVMTCkgJiYKKwkJCQkgICAgKHVwY2FsbF9zb2Nr
ZXQtPnNvX2Vycm9yICE9IDApKSB7CisJCQkJCSgqdXBjYWxsX3NvY2tldC0+c29fdXBjYWxsKSh1
cGNhbGxfc29ja2V0LCB1cGNhbGxfc29ja2V0LT5zb191cGNhbGxhcmcsIE1fTk9XQUlUKTsKKwkJ
CQl9CisJCQkJQUNDRVBUX0xPQ0soKTsKKwkJCQlTT0NLX0xPQ0sodXBjYWxsX3NvY2tldCk7CisJ
CQkJc29yZWxlKHVwY2FsbF9zb2NrZXQpOworCQkJfQorI2VuZGlmCisJCX0gZWxzZSB7CisJCQlp
ZiAoKHN0Y2IgPT0gTlVMTCkgJiYgKGlucCAhPSBOVUxMKSkgeworCQkJCS8qIHJlZHVjZSBpbnAn
cyByZWYtY291bnQgKi8KKwkJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQkJCVNDVFBfSU5QX0RF
Q1JfUkVGKGlucCk7CisJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQkJfQorCQkJaWYgKHN0
Y2IpIHsKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQl9CisJCX0KKwl9Cit9CisjZW5k
aWYKKworLyoKKyAqIHRoaXMgcm91dGluZSBjYW4gcHJvYmFibHkgYmUgY29sbGFzcGVkIGludG8g
dGhlIG9uZSBpbiBzY3RwX3VzZXJyZXEuYworICogc2luY2UgdGhleSBkbyB0aGUgc2FtZSB0aGlu
ZyBhbmQgbm93IHdlIGxvb2t1cCB3aXRoIGEgc29ja2FkZHIKKyAqLworI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitzdGF0aWMgaW50CitzY3RwNl9n
ZXRjcmVkKFNZU0NUTF9IQU5ETEVSX0FSR1MpCit7CisJc3RydWN0IHh1Y3JlZCB4dWM7CisJc3Ry
dWN0IHNvY2thZGRyX2luNiBhZGRyc1syXTsKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCXN0
cnVjdCBzY3RwX25ldHMgKm5ldDsKKwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7CisJaW50IGVycm9y
OworCXVpbnQzMl90IHZyZl9pZDsKKworCXZyZl9pZCA9IFNDVFBfREVGQVVMVF9WUkZJRDsKKwor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJZXJy
b3IgPSBwcml2X2NoZWNrKHJlcS0+dGQsIFBSSVZfTkVUSU5FVF9HRVRDUkVEKTsKKyNlbHNlCisJ
ZXJyb3IgPSBzdXNlcihyZXEtPnApOworI2VuZGlmCisJaWYgKGVycm9yKQorCQlyZXR1cm4gKGVy
cm9yKTsKKworCWlmIChyZXEtPm5ld2xlbiAhPSBzaXplb2YoYWRkcnMpKSB7CisJCVNDVFBfTFRS
QUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUlO
VkFMKTsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKwlpZiAocmVxLT5vbGRsZW4gIT0gc2l6ZW9m
KHN0cnVjdCB1Y3JlZCkpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOworCQlyZXR1cm4gKEVJTlZBTCk7CisJ
fQorCWVycm9yID0gU1lTQ1RMX0lOKHJlcSwgYWRkcnMsIHNpemVvZihhZGRycykpOworCWlmIChl
cnJvcikKKwkJcmV0dXJuIChlcnJvcik7CisKKwlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25f
YWRkcl9zYShzaW42dG9zYSgmYWRkcnNbMV0pLAorCSAgICBzaW42dG9zYSgmYWRkcnNbMF0pLAor
CSAgICAmaW5wLCAmbmV0LCAxLCB2cmZfaWQpOworCWlmIChzdGNiID09IE5VTEwgfHwgaW5wID09
IE5VTEwgfHwgaW5wLT5zY3RwX3NvY2tldCA9PSBOVUxMKSB7CisJCWlmICgoaW5wICE9IE5VTEwp
ICYmIChzdGNiID09IE5VTEwpKSB7CisJCQkvKiByZWR1Y2UgcmVmLWNvdW50ICovCisJCQlTQ1RQ
X0lOUF9XTE9DSyhpbnApOworCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJCWdvdG8gY3Jl
ZF9jYW5fY29udDsKKwkJfQorCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRU5PRU5UKTsKKwkJZXJyb3IgPSBFTk9FTlQ7CisJCWdv
dG8gb3V0OworCX0KKwlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJLyogV2UgdXNlIHRoZSB3cml0
ZSBsb2NrIGhlcmUsIG9ubHkKKwkgKiBzaW5jZSBpbiB0aGUgZXJyb3IgbGVnIHdlIG5lZWQgaXQu
CisJICogSWYgd2UgdXNlZCBSTE9DSywgdGhlbiB3ZSB3b3VsZCBoYXZlCisJICogdG8gd2xvY2sv
ZGVjci91bmxvY2svcmxvY2suIFdoaWNoCisJICogaW4gdGhlb3J5IGNvdWxkIGNyZWF0ZSBhIGhv
bGUuIEJldHRlcgorCSAqIHRvIHVzZSBoaWdoZXIgd2xvY2suCisJICovCisJU0NUUF9JTlBfV0xP
Q0soaW5wKTsKKyBjcmVkX2Nhbl9jb250OgorCWVycm9yID0gY3JfY2Fuc2Vlc29ja2V0KHJlcS0+
dGQtPnRkX3VjcmVkLCBpbnAtPnNjdHBfc29ja2V0KTsKKwlpZiAoZXJyb3IpIHsKKwkJU0NUUF9J
TlBfV1VOTE9DSyhpbnApOworCQlnb3RvIG91dDsKKwl9CisJY3J1MngoaW5wLT5zY3RwX3NvY2tl
dC0+c29fY3JlZCwgJnh1Yyk7CisJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCWVycm9yID0gU1lT
Q1RMX09VVChyZXEsICZ4dWMsIHNpemVvZihzdHJ1Y3QgeHVjcmVkKSk7CitvdXQ6CisJcmV0dXJu
IChlcnJvcik7Cit9CisKK1NZU0NUTF9QUk9DKF9uZXRfaW5ldDZfc2N0cDYsIE9JRF9BVVRPLCBn
ZXRjcmVkLAorICAgIENUTFRZUEVfT1BBUVVFIHwgQ1RMRkxBR19SVyB8IENUTEZMQUdfTkVFREdJ
QU5ULAorICAgIDAsIDAsIHNjdHA2X2dldGNyZWQsICJTLHVjcmVkIiwKKyAgICAiR2V0IHRoZSB1
Y3JlZCBvZiBhIFNDVFA2IGNvbm5lY3Rpb24iKTsKKyNlbmRpZgorCisvKiBUaGlzIGlzIHRoZSBz
YW1lIGFzIHRoZSBzY3RwX2Fib3J0KCkgY291bGQgYmUgbWFkZSBjb21tb24gKi8KKyNpZiBkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCitpbnQKKyNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRl
ZmluZWQoX1dJTjMyKQorc3RhdGljIHZvaWQKKyNlbHNlCitzdGF0aWMgaW50CisjZW5kaWYKK3Nj
dHA2X2Fib3J0KHN0cnVjdCBzb2NrZXQgKnNvKQoreworI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJc3RydWN0IGVwb2NoX3RyYWNrZXIgZXQ7Cisj
ZW5kaWYKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCXVpbnQzMl90IGZsYWdzOworCisJaW5w
ID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKKwlpZiAoaW5wID09IE5VTEwpIHsK
KwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9V
U1JSRVEsIEVJTlZBTCk7CisjaWYgKGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX1dJ
TjMyKSkgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJcmV0dXJuOworI2Vsc2UKKwkJcmV0
dXJuIChFSU5WQUwpOworI2VuZGlmCisJfQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJTkVUX0VQT0NIX0VOVEVSKGV0KTsKKyNlbmRpZgorIHNj
dHBfbXVzdF90cnlfYWdhaW46CisJZmxhZ3MgPSBpbnAtPnNjdHBfZmxhZ3M7CisjaWZkZWYgU0NU
UF9MT0dfQ0xPU0lORworCXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBOVUxMLCAxNyk7CisjZW5kaWYK
KwlpZiAoKChmbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSA9PSAwKSAmJgorCSAg
ICAoYXRvbWljX2NtcHNldF9pbnQoJmlucC0+c2N0cF9mbGFncywgZmxhZ3MsIChmbGFncyB8IFND
VFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FIHwgU0NUUF9QQ0JfRkxBR1NfQ0xPU0VfSVApKSkpIHsK
KyNpZmRlZiBTQ1RQX0xPR19DTE9TSU5HCisJCXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBOVUxMLCAx
Nik7CisjZW5kaWYKKwkJc2N0cF9pbnBjYl9mcmVlKGlucCwgU0NUUF9GUkVFX1NIT1VMRF9VU0Vf
QUJPUlQsCisJCQkJU0NUUF9DQUxMRURfQUZURVJfQ01QU0VUX09GQ0xPU0UpOworCQlTT0NLX0xP
Q0soc28pOworCQlTQ1RQX1NCX0NMRUFSKHNvLT5zb19zbmQpOworCQkvKiBzYW1lIGZvciB0aGUg
cmN2IG9uZXMsIHRoZXkgYXJlIG9ubHkKKwkJICogaGVyZSBmb3IgdGhlIGFjY291bnRpbmcvc2Vs
ZWN0LgorCQkgKi8KKwkJU0NUUF9TQl9DTEVBUihzby0+c29fcmN2KTsKKyNpZiBkZWZpbmVkKF9f
QVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJc28tPnNvX3VzZWNvdW50LS07
CisjZWxzZQorCQkvKiBOb3cgbnVsbCBvdXQgdGhlIHJlZmVyZW5jZSwgd2UgYXJlIGNvbXBsZXRl
bHkgZGV0YWNoZWQuICovCisJCXNvLT5zb19wY2IgPSBOVUxMOworI2VuZGlmCisJCVNPQ0tfVU5M
T0NLKHNvKTsKKwl9IGVsc2UgeworCQlmbGFncyA9IGlucC0+c2N0cF9mbGFnczsKKwkJaWYgKChm
bGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSA9PSAwKSB7CisJCQlnb3RvIHNjdHBf
bXVzdF90cnlfYWdhaW47CisJCX0KKwl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlORVRfRVBPQ0hfRVhJVChldCk7CisJcmV0dXJuOworI2Vs
c2UKKwlyZXR1cm4gKDApOworI2VuZGlmCit9CisKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CitpbnQKK3NjdHA2X2F0dGFjaChzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IHByb3RvIFNDVFBfVU5V
U0VELCB1aW50MzJfdCB2cmZfaWQpCisjZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorc3RhdGlj
IGludAorc2N0cDZfYXR0YWNoKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgcHJvdG8gU0NUUF9VTlVT
RUQsIHN0cnVjdCB0aHJlYWQgKnAgU0NUUF9VTlVTRUQpCisjZWxpZiBkZWZpbmVkKF9XSU4zMikK
K3N0YXRpYyBpbnQKK3NjdHA2X2F0dGFjaChzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IHByb3RvIFND
VFBfVU5VU0VELCBQS1RIUkVBRCBwIFNDVFBfVU5VU0VEKQorI2Vsc2UKK3N0YXRpYyBpbnQKK3Nj
dHA2X2F0dGFjaChzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IHByb3RvIFNDVFBfVU5VU0VELCBzdHJ1
Y3QgcHJvYyAqcCBTQ1RQX1VOVVNFRCkKKyNlbmRpZgoreworCWludCBlcnJvcjsKKwlzdHJ1Y3Qg
c2N0cF9pbnBjYiAqaW5wOworI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJdWludDMyX3Qg
dnJmX2lkID0gU0NUUF9ERUZBVUxUX1ZSRklEOworI2VuZGlmCisKKwlpbnAgPSAoc3RydWN0IHNj
dHBfaW5wY2IgKilzby0+c29fcGNiOworCWlmIChpbnAgIT0gTlVMTCkgeworCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUlOVkFM
KTsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKworCWlmIChzby0+c29fc25kLnNiX2hpd2F0ID09
IDAgfHwgc28tPnNvX3Jjdi5zYl9oaXdhdCA9PSAwKSB7CisJCWVycm9yID0gU0NUUF9TT1JFU0VS
VkUoc28sIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zZW5kc3BhY2UpLCBTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfcmVjdnNwYWNlKSk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiAoZXJyb3IpOworCX0K
KwllcnJvciA9IHNjdHBfaW5wY2JfYWxsb2Moc28sIHZyZl9pZCk7CisJaWYgKGVycm9yKQorCQly
ZXR1cm4gKGVycm9yKTsKKwlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOwor
CVNDVFBfSU5QX1dMT0NLKGlucCk7CisJaW5wLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdT
X0JPVU5EX1Y2OwkvKiBJJ20gdjYhICovCisKKwlpbnAtPmlwX2lucC5pbnAuaW5wX3ZmbGFnIHw9
IElOUF9JUFY2OworCWlucC0+aXBfaW5wLmlucC5pbjZwX2hvcHMgPSAtMTsJLyogdXNlIGtlcm5l
bCBkZWZhdWx0ICovCisJaW5wLT5pcF9pbnAuaW5wLmluNnBfY2tzdW0gPSAtMTsJLyoganVzdCB0
byBiZSBzdXJlICovCisjaWZkZWYgSU5FVAorCS8qCisJICogWFhYOiB1Z2x5ISEgSVB2NCBUVEwg
aW5pdGlhbGl6YXRpb24gaXMgbmVjZXNzYXJ5IGZvciBhbiBJUHY2CisJICogc29ja2V0IGFzIHdl
bGwsIGJlY2F1c2UgdGhlIHNvY2tldCBtYXkgYmUgYm91bmQgdG8gYW4gSVB2NgorCSAqIHdpbGRj
YXJkIGFkZHJlc3MsIHdoaWNoIG1heSBtYXRjaCBhbiBJUHY0LW1hcHBlZCBJUHY2IGFkZHJlc3Mu
CisJICovCisJaW5wLT5pcF9pbnAuaW5wLmlucF9pcF90dGwgPSBNT0RVTEVfR0xPQkFMKGlwX2Rl
ZnR0bCk7CisjZW5kaWYKKwlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJcmV0dXJuICgwKTsKK30K
KworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK2ludAorc2N0cDZfYmluZChzdHJ1Y3Qgc29j
a2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyLCB2b2lkICogcCkKK3sKKyNlbGlmIGRlZmlu
ZWQoX19GcmVlQlNEX18pCitzdGF0aWMgaW50CitzY3RwNl9iaW5kKHN0cnVjdCBzb2NrZXQgKnNv
LCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHN0cnVjdCB0aHJlYWQgKnApCit7CisjZWxpZiBkZWZp
bmVkKF9fQVBQTEVfXykKK3N0YXRpYyBpbnQKK3NjdHA2X2JpbmQoc3RydWN0IHNvY2tldCAqc28s
IHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc3RydWN0IHByb2MgKnApCit7CisjZWxpZiBkZWZpbmVk
KF9XSU4zMikKK3N0YXRpYyBpbnQKK3NjdHA2X2JpbmQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVj
dCBzb2NrYWRkciAqYWRkciwgUEtUSFJFQUQgcCkKK3sKKyNlbHNlCitzdGF0aWMgaW50CitzY3Rw
Nl9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3QgbWJ1ZiAqbmFtLCBzdHJ1Y3QgcHJvYyAq
cCkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBuYW0gPyBtdG9kKG5hbSwgc3RydWN0IHNv
Y2thZGRyICopOiBOVUxMOworCisjZW5kaWYKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCWlu
dCBlcnJvcjsKKwl1X2NoYXIgdmZsYWdzYXY7CisKKwlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2Ig
Kilzby0+c29fcGNiOworCWlmIChpbnAgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUlOVkFMKTsKKwkJcmV0
dXJuIChFSU5WQUwpOworCX0KKworI2lmICEoZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9f
VXNlcnNwYWNlX18pKQorCWlmIChhZGRyKSB7CisJCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7
CisjaWZkZWYgSU5FVAorCQljYXNlIEFGX0lORVQ6CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJCWlm
IChhZGRyLT5zYV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIHsKKwkJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwg
RUlOVkFMKTsKKwkJCQlyZXR1cm4gKEVJTlZBTCk7CisJCQl9CisjZW5kaWYKKwkJCWJyZWFrOwor
I2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJY2FzZSBBRl9JTkVUNjoKKyNpZmRlZiBIQVZFX1NBX0xF
TgorCQkJaWYgKGFkZHItPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIHsK
KwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2
X1VTUlJFUSwgRUlOVkFMKTsKKwkJCQlyZXR1cm4gKEVJTlZBTCk7CisJCQl9CisjZW5kaWYKKwkJ
CWJyZWFrOworI2VuZGlmCisJCWRlZmF1bHQ6CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUlOVkFMKTsKKwkJCXJldHVybiAo
RUlOVkFMKTsKKwkJfQorCX0KKyNlbmRpZgorCXZmbGFnc2F2ID0gaW5wLT5pcF9pbnAuaW5wLmlu
cF92ZmxhZzsKKwlpbnAtPmlwX2lucC5pbnAuaW5wX3ZmbGFnICY9IH5JTlBfSVBWNDsKKwlpbnAt
PmlwX2lucC5pbnAuaW5wX3ZmbGFnIHw9IElOUF9JUFY2OworCWlmICgoYWRkciAhPSBOVUxMKSAm
JiAoU0NUUF9JUFY2X1Y2T05MWShpbnApID09IDApKSB7CisJCXN3aXRjaCAoYWRkci0+c2FfZmFt
aWx5KSB7CisjaWZkZWYgSU5FVAorCQljYXNlIEFGX0lORVQ6CisJCQkvKiBiaW5kaW5nIHY0IGFk
ZHIgdG8gdjYgc29ja2V0LCBzbyByZXNldCBmbGFncyAqLworCQkJaW5wLT5pcF9pbnAuaW5wLmlu
cF92ZmxhZyB8PSBJTlBfSVBWNDsKKwkJCWlucC0+aXBfaW5wLmlucC5pbnBfdmZsYWcgJj0gfklO
UF9JUFY2OworCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQljYXNlIEFGX0lORVQ2
OgorCQl7CisJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42X3A7CisKKwkJCXNpbjZfcCA9IChz
dHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKKworCQkJaWYgKElONl9JU19BRERSX1VOU1BFQ0lG
SUVEKCZzaW42X3AtPnNpbjZfYWRkcikpIHsKKwkJCQlpbnAtPmlwX2lucC5pbnAuaW5wX3ZmbGFn
IHw9IElOUF9JUFY0OworCQkJfQorI2lmZGVmIElORVQKKwkJCWlmIChJTjZfSVNfQUREUl9WNE1B
UFBFRCgmc2luNl9wLT5zaW42X2FkZHIpKSB7CisJCQkJc3RydWN0IHNvY2thZGRyX2luIHNpbjsK
KworCQkJCWluNl9zaW42XzJfc2luKCZzaW4sIHNpbjZfcCk7CisJCQkJaW5wLT5pcF9pbnAuaW5w
LmlucF92ZmxhZyB8PSBJTlBfSVBWNDsKKwkJCQlpbnAtPmlwX2lucC5pbnAuaW5wX3ZmbGFnICY9
IH5JTlBfSVBWNjsKKwkJCQllcnJvciA9IHNjdHBfaW5wY2JfYmluZChzbywgKHN0cnVjdCBzb2Nr
YWRkciAqKSZzaW4sIE5VTEwsIHApOworCQkJCWdvdG8gb3V0OworCQkJfQorI2VuZGlmCisJCQli
cmVhazsKKwkJfQorI2VuZGlmCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSBp
ZiAoYWRkciAhPSBOVUxMKSB7CisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjZfcDsKKworCQkv
KiBJUFY2X1Y2T05MWSBzb2NrZXQgKi8KKyNpZmRlZiBJTkVUCisJCWlmIChhZGRyLT5zYV9mYW1p
bHkgPT0gQUZfSU5FVCkgeworCQkJLyogY2FuJ3QgYmluZCB2NCBhZGRyIHRvIHY2IG9ubHkgc29j
a2V0ISAqLworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCWdvdG8gb3V0
OworCQl9CisjZW5kaWYKKwkJc2luNl9wID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyOwor
CisJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmc2luNl9wLT5zaW42X2FkZHIpKSB7CisJCQkv
KiBjYW4ndCBiaW5kIHY0LW1hcHBlZCBhZGRycyBlaXRoZXIhICovCisJCQkvKiBOT1RFOiB3ZSBk
b24ndCBzdXBwb3J0IFNJSVQgKi8KKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7
CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwllcnJvciA9IHNjdHBfaW5wY2JfYmluZChzbywgYWRk
ciwgTlVMTCwgcCk7CitvdXQ6CisJaWYgKGVycm9yICE9IDApCisJCWlucC0+aXBfaW5wLmlucC5p
bnBfdmZsYWcgPSB2ZmxhZ3NhdjsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pIHx8IGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK3N0YXRpYyB2b2lkCisjZWxzZQordm9pZAor
I2VuZGlmCitzY3RwNl9jbG9zZShzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlzY3RwX2Nsb3NlKHNv
KTsKK30KKworLyogVGhpcyBjb3VsZCBiZSBtYWRlIGNvbW1vbiB3aXRoIHNjdHBfZGV0YWNoKCkg
c2luY2UgdGhleSBhcmUgaWRlbnRpY2FsICovCisjZWxzZQorCitzdGF0aWMKK2ludAorc2N0cDZf
ZGV0YWNoKHN0cnVjdCBzb2NrZXQgKnNvKQoreworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KwlzY3RwX2Nsb3NlKHNvKTsKKwlyZXR1cm4gKDApOworI2Vsc2UKKwlyZXR1cm4gKHNjdHBfZGV0
YWNoKHNvKSk7CisjZW5kaWYKK30KKworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorc3RhdGljCisjZW5kaWYKK2ludAorc2N0cDZfZGlzY29ubmVjdChzdHJ1Y3Qgc29ja2V0
ICpzbykKK3sKKwlyZXR1cm4gKHNjdHBfZGlzY29ubmVjdChzbykpOworfQorCitpbnQKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorc2N0cF9zZW5k
bShzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGZsYWdzLCBzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IHNv
Y2thZGRyICphZGRyLAorICAgIHN0cnVjdCBtYnVmICpjb250cm9sLCBzdHJ1Y3QgdGhyZWFkICpw
KTsKKyNlbHNlCitzY3RwX3NlbmRtKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgZmxhZ3MsIHN0cnVj
dCBtYnVmICptLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCisgICAgc3RydWN0IG1idWYgKmNvbnRy
b2wsIHN0cnVjdCBwcm9jICpwKTsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX1dJTjMyKSAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCitzdGF0aWMg
aW50CitzY3RwNl9zZW5kKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgZmxhZ3MsIHN0cnVjdCBtYnVm
ICptLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCisgICAgc3RydWN0IG1idWYgKmNvbnRyb2wsIHN0
cnVjdCB0aHJlYWQgKnApCit7CisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKK3N0YXRpYyBpbnQK
K3NjdHA2X3NlbmQoc3RydWN0IHNvY2tldCAqc28sIGludCBmbGFncywgc3RydWN0IG1idWYgKm0s
IHN0cnVjdCBzb2NrYWRkciAqYWRkciwKKyAgICBzdHJ1Y3QgbWJ1ZiAqY29udHJvbCwgc3RydWN0
IHByb2MgKnApCit7CisjZWxzZQorc3RhdGljIGludAorc2N0cDZfc2VuZChzdHJ1Y3Qgc29ja2V0
ICpzbywgaW50IGZsYWdzLCBzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IG1idWYgKm5hbSwKKyAgICBz
dHJ1Y3QgbWJ1ZiAqY29udHJvbCwgc3RydWN0IHByb2MgKnApCit7CisJc3RydWN0IHNvY2thZGRy
ICphZGRyID0gbmFtID8gbXRvZChuYW0sIHN0cnVjdCBzb2NrYWRkciAqKTogTlVMTDsKKyNlbmRp
ZgorCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisKKyNpZmRlZiBJTkVUCisJc3RydWN0IHNvY2th
ZGRyX2luNiAqc2luNjsKKyNlbmRpZiAvKiBJTkVUICovCisJLyogTm8gU1BMIG5lZWRlZCBzaW5j
ZSBzY3RwX291dHB1dCBkb2VzIHRoaXMgKi8KKworCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAq
KXNvLT5zb19wY2I7CisJaWYgKGlucCA9PSBOVUxMKSB7CisJCWlmIChjb250cm9sKSB7CisJCQlT
Q1RQX1JFTEVBU0VfUEtUKGNvbnRyb2wpOworCQkJY29udHJvbCA9IE5VTEw7CisJCX0KKwkJU0NU
UF9SRUxFQVNFX1BLVChtKTsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9
CisJLyoKKwkgKiBGb3IgdGhlIFRDUCBtb2RlbCB3ZSBtYXkgZ2V0IGEgTlVMTCBhZGRyLCBpZiB3
ZSBhcmUgYSBjb25uZWN0ZWQKKwkgKiBzb2NrZXQgdGhhdHMgb2suCisJICovCisJaWYgKChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpICYmCisJICAgIChhZGRyID09
IE5VTEwpKSB7CisJCWdvdG8gY29ubmVjdGVkX3R5cGU7CisJfQorCWlmIChhZGRyID09IE5VTEwp
IHsKKwkJU0NUUF9SRUxFQVNFX1BLVChtKTsKKwkJaWYgKGNvbnRyb2wpIHsKKwkJCVNDVFBfUkVM
RUFTRV9QS1QoY29udHJvbCk7CisJCQljb250cm9sID0gTlVMTDsKKwkJfQorCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRURFU1RB
RERSUkVRKTsKKwkJcmV0dXJuIChFREVTVEFERFJSRVEpOworCX0KKwlzd2l0Y2ggKGFkZHItPnNh
X2ZhbWlseSkgeworI2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisjaWYgZGVmaW5lZChIQVZF
X1NBX0xFTikKKwkJaWYgKGFkZHItPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu
KSkgeworCQkJaWYgKGNvbnRyb2wpIHsKKwkJCQlTQ1RQX1JFTEVBU0VfUEtUKGNvbnRyb2wpOwor
CQkJCWNvbnRyb2wgPSBOVUxMOworCQkJfQorCQkJU0NUUF9SRUxFQVNFX1BLVChtKTsKKwkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVR
LCBFSU5WQUwpOworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisjZW5kaWYKKwkJYnJlYWs7Cisj
ZW5kaWYKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisjaWYgZGVmaW5lZChIQVZFX1NB
X0xFTikKKwkJaWYgKGFkZHItPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikp
IHsKKwkJCWlmIChjb250cm9sKSB7CisJCQkJU0NUUF9SRUxFQVNFX1BLVChjb250cm9sKTsKKwkJ
CQljb250cm9sID0gTlVMTDsKKwkJCX0KKwkJCVNDVFBfUkVMRUFTRV9QS1QobSk7CisJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwg
RUlOVkFMKTsKKwkJCXJldHVybiAoRUlOVkFMKTsKKwkJfQorI2VuZGlmCisJCWJyZWFrOworI2Vu
ZGlmCisJZGVmYXVsdDoKKwkJaWYgKGNvbnRyb2wpIHsKKwkJCVNDVFBfUkVMRUFTRV9QS1QoY29u
dHJvbCk7CisJCQljb250cm9sID0gTlVMTDsKKwkJfQorCQlTQ1RQX1JFTEVBU0VfUEtUKG0pOwor
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VT
UlJFUSwgRUlOVkFMKTsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKyNpZmRlZiBJTkVUCisJc2lu
NiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKKwlpZiAoU0NUUF9JUFY2X1Y2T05MWShp
bnApKSB7CisJCS8qCisJCSAqIGlmIElQVjZfVjZPTkxZIGZsYWcsIHdlIGRpc2NhcmQgZGF0YWdy
YW1zIGRlc3RpbmVkIHRvIGEKKwkJICogdjQgYWRkciBvciB2NC1tYXBwZWQgYWRkcgorCQkgKi8K
KwkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCQlpZiAoY29udHJvbCkgewor
CQkJCVNDVFBfUkVMRUFTRV9QS1QoY29udHJvbCk7CisJCQkJY29udHJvbCA9IE5VTEw7CisJCQl9
CisJCQlTQ1RQX1JFTEVBU0VfUEtUKG0pOworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7CisJCQlyZXR1cm4gKEVJ
TlZBTCk7CisJCX0KKwkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42LT5zaW42X2FkZHIp
KSB7CisJCQlpZiAoY29udHJvbCkgeworCQkJCVNDVFBfUkVMRUFTRV9QS1QoY29udHJvbCk7CisJ
CQkJY29udHJvbCA9IE5VTEw7CisJCQl9CisJCQlTQ1RQX1JFTEVBU0VfUEtUKG0pOworCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEs
IEVJTlZBTCk7CisJCQlyZXR1cm4gKEVJTlZBTCk7CisJCX0KKwl9CisJaWYgKElONl9JU19BRERS
X1Y0TUFQUEVEKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47
CisKKwkJLyogY29udmVydCB2NC1tYXBwZWQgaW50byB2NCBhZGRyIGFuZCBzZW5kICovCisJCWlu
Nl9zaW42XzJfc2luKCZzaW4sIHNpbjYpOworCQlyZXR1cm4gKHNjdHBfc2VuZG0oc28sIGZsYWdz
LCBtLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgY29udHJvbCwgcCkpOworCX0KKyNlbmRpZgkJ
CQkvKiBJTkVUICovCitjb25uZWN0ZWRfdHlwZToKKwkvKiBub3cgd2hhdCBhYm91dCBjb250cm9s
ICovCisJaWYgKGNvbnRyb2wpIHsKKwkJaWYgKGlucC0+Y29udHJvbCkgeworCQkJU0NUUF9QUklO
VEYoImh1aD8gY29udHJvbCBzZXQ/XG4iKTsKKwkJCVNDVFBfUkVMRUFTRV9QS1QoaW5wLT5jb250
cm9sKTsKKwkJCWlucC0+Y29udHJvbCA9IE5VTEw7CisJCX0KKwkJaW5wLT5jb250cm9sID0gY29u
dHJvbDsKKwl9CisJLyogUGxhY2UgdGhlIGRhdGEgKi8KKwlpZiAoaW5wLT5wa3QpIHsKKwkJU0NU
UF9CVUZfTkVYVChpbnAtPnBrdF9sYXN0KSA9IG07CisJCWlucC0+cGt0X2xhc3QgPSBtOworCX0g
ZWxzZSB7CisJCWlucC0+cGt0X2xhc3QgPSBpbnAtPnBrdCA9IG07CisJfQorCWlmICgKKyNpZiAo
ZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pKSAmJiAhZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorCS8qIEZyZWVCU0QgYW5kIE1hY09TWCB1c2VzIGEgZmxhZyBwYXNzZWQg
Ki8KKwkgICAgKChmbGFncyAmIFBSVVNfTU9SRVRPQ09NRSkgPT0gMCkKKyNlbHNlCisJICAgIDEJ
CQkvKiBPcGVuIEJTRCBkb2VzIG5vdCBoYXZlIGFueSAibW9yZSB0byBjb21lIgorCQkJCSAqIGlu
ZGljYXRpb24gKi8KKyNlbmRpZgorCSAgICApIHsKKwkJLyoKKwkJICogbm90ZSB3aXRoIHRoZSBj
dXJyZW50IHZlcnNpb24gdGhpcyBjb2RlIHdpbGwgb25seSBiZSB1c2VkCisJCSAqIGJ5IE9wZW5C
U0QsIE5ldEJTRCBhbmQgRnJlZUJTRCBoYXZlIG1ldGhvZHMgZm9yCisJCSAqIHJlLWRlZmluaW5n
IHNvc2VuZCgpIHRvIHVzZSBzY3RwX3Nvc2VuZCgpLiAgT25lIGNhbgorCQkgKiBvcHRpb25hbHkg
c3dpdGNoIGJhY2sgdG8gdGhpcyBjb2RlIChieSBjaGFuZ2luZyBiYWNrIHRoZQorCQkgKiBkZWZp
bmluaXRpb25zIGJ1dCB0aGlzIGlzIG5vdCBhZHZpc2FibGUuCisJCSAqLworI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCXN0cnVjdCBlcG9jaF90
cmFja2VyIGV0OworI2VuZGlmCisJCWludCByZXQ7CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCU5FVF9FUE9DSF9FTlRFUihldCk7CisjZW5k
aWYKKwkJcmV0ID0gc2N0cF9vdXRwdXQoaW5wLCBpbnAtPnBrdCwgYWRkciwgaW5wLT5jb250cm9s
LCBwLCBmbGFncyk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKwlORVRfRVBPQ0hfRVhJVChldCk7CisjZW5kaWYKKwkJaW5wLT5wa3QgPSBOVUxM
OworCQlpbnAtPmNvbnRyb2wgPSBOVUxMOworCQlyZXR1cm4gKHJldCk7CisJfSBlbHNlIHsKKwkJ
cmV0dXJuICgwKTsKKwl9Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
K2ludAorc2N0cDZfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICph
ZGRyKQoreworCXZvaWQgKnAgPSBOVUxMOworI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKK3N0
YXRpYyBpbnQKK3NjdHA2X2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRk
ciAqYWRkciwgc3RydWN0IHRocmVhZCAqcCkKK3sKKyNlbGlmIGRlZmluZWQoX19BUFBMRV9fKQor
c3RhdGljIGludAorc2N0cDZfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2th
ZGRyICphZGRyLCBzdHJ1Y3QgcHJvYyAqcCkKK3sKKyNlbGlmIGRlZmluZWQoX1dJTjMyKQorc3Rh
dGljIGludAorc2N0cDZfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRy
ICphZGRyLCBQS1RIUkVBRCBwKQoreworI2Vsc2UKK3N0YXRpYyBpbnQKK3NjdHA2X2Nvbm5lY3Qo
c3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBtYnVmICpuYW0sIHN0cnVjdCBwcm9jICpwKQorewor
CXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IG10b2QobmFtLCBzdHJ1Y3Qgc29ja2FkZHIgKik7Cisj
ZW5kaWYKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorCXN0cnVjdCBlcG9jaF90cmFja2VyIGV0OworI2VuZGlmCisJdWludDMyX3QgdnJmX2lkOwor
CWludCBlcnJvciA9IDA7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKwlzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2I7CisjaWZkZWYgSU5FVAorCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisJdW5p
b24gc2N0cF9zb2Nrc3RvcmUgc3RvcmU7CisjZW5kaWYKKworCWlucCA9IChzdHJ1Y3Qgc2N0cF9p
bnBjYiAqKXNvLT5zb19wY2I7CisJaWYgKGlucCA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFQ09OTlJFU0VU
KTsKKwkJcmV0dXJuIChFQ09OTlJFU0VUKTsJLyogSSBtYWRlIHRoZSBzYW1lIGFzIFRDUCBzaW5j
ZSB3ZSBhcmUKKwkJCQkJICogbm90IHNldHVwPyAqLworCX0KKwlpZiAoYWRkciA9PSBOVUxMKSB7
CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZf
VVNSUkVRLCBFSU5WQUwpOworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQorI2lmICEoZGVmaW5lZChf
V0lOMzIpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQorCXN3aXRjaCAoYWRkci0+c2FfZmFt
aWx5KSB7CisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKyNpZmRlZiBIQVZFX1NBX0xFTgor
CQlpZiAoYWRkci0+c2FfbGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSB7CisJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJF
USwgRUlOVkFMKTsKKwkJCXJldHVybiAoRUlOVkFMKTsKKwkJfQorI2VuZGlmCisJCWJyZWFrOwor
I2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorI2lmZGVmIEhBVkVfU0FfTEVO
CisJCWlmIChhZGRyLT5zYV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7CisJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VT
UlJFUSwgRUlOVkFMKTsKKwkJCXJldHVybiAoRUlOVkFMKTsKKwkJfQorI2VuZGlmCisJCWJyZWFr
OworI2VuZGlmCisJZGVmYXVsdDoKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7CisJCXJldHVybiAoRUlOVkFMKTsK
Kwl9CisjZW5kaWYKKworCXZyZl9pZCA9IGlucC0+ZGVmX3ZyZl9pZDsKKwlTQ1RQX0FTT0NfQ1JF
QVRFX0xPQ0soaW5wKTsKKwlTQ1RQX0lOUF9STE9DSyhpbnApOworCWlmICgoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfVU5CT1VORCkgPT0KKwkgICAgU0NUUF9QQ0JfRkxBR1NfVU5C
T1VORCkgeworCQkvKiBCaW5kIGEgZXBoZW1lcmFsIHBvcnQgKi8KKwkJU0NUUF9JTlBfUlVOTE9D
SyhpbnApOworCQllcnJvciA9IHNjdHA2X2JpbmQoc28sIE5VTEwsIHApOworCQlpZiAoZXJyb3Ip
IHsKKwkJCVNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKGlucCk7CisKKwkJCXJldHVybiAoZXJyb3Ip
OworCQl9CisJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJfQorCWlmICgoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgJiYKKwkgICAgKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCkpIHsKKwkJLyogV2UgYXJlIGFscmVhZHkgY29ubmVjdGVk
IEFORCB0aGUgVENQIG1vZGVsICovCisJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJU0NUUF9B
U09DX0NSRUFURV9VTkxPQ0soaW5wKTsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVBRERSSU5VU0UpOworCQlyZXR1cm4gKEVB
RERSSU5VU0UpOworCX0KKyNpZmRlZiBJTkVUCisJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42
ICopYWRkcjsKKwlpZiAoU0NUUF9JUFY2X1Y2T05MWShpbnApKSB7CisJCS8qCisJCSAqIGlmIElQ
VjZfVjZPTkxZIGZsYWcsIGlnbm9yZSBjb25uZWN0aW9ucyBkZXN0aW5lZCB0byBhIHY0CisJCSAq
IGFkZHIgb3IgdjQtbWFwcGVkIGFkZHIKKwkJICovCisJCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0g
QUZfSU5FVCkgeworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJU0NUUF9BU09DX0NSRUFU
RV9VTkxPQ0soaW5wKTsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9
CisJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmc2luNi0+c2luNl9hZGRyKSkgeworCQkJU0NU
UF9JTlBfUlVOTE9DSyhpbnApOworCQkJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soaW5wKTsKKwkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNS
UkVRLCBFSU5WQUwpOworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisJfQorCWlmIChJTjZfSVNf
QUREUl9WNE1BUFBFRCgmc2luNi0+c2luNl9hZGRyKSkgeworCQkvKiBjb252ZXJ0IHY0LW1hcHBl
ZCBpbnRvIHY0IGFkZHIgKi8KKwkJaW42X3NpbjZfMl9zaW4oJnN0b3JlLnNpbiwgc2luNik7CisJ
CWFkZHIgPSAmc3RvcmUuc2E7CisJfQorI2VuZGlmCQkJCS8qIElORVQgKi8KKwkvKiBOb3cgZG8g
d2UgY29ubmVjdD8gKi8KKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQ09O
TkVDVEVEKSB7CisJCXN0Y2IgPSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNvY19saXN0KTsKKwkJ
aWYgKHN0Y2IpIHsKKwkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCX0KKwkJU0NUUF9JTlBfUlVO
TE9DSyhpbnApOworCX0gZWxzZSB7CisJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJU0NUUF9J
TlBfV0xPQ0soaW5wKTsKKwkJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKKwkJU0NUUF9JTlBfV1VO
TE9DSyhpbnApOworCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigmaW5wLCBh
ZGRyLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJU0NUUF9J
TlBfV0xPQ0soaW5wKTsKKwkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQlTQ1RQX0lOUF9X
VU5MT0NLKGlucCk7CisJCX0KKwl9CisKKwlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCS8qIEFscmVh
ZHkgaGF2ZSBvciBhbSBicmluZyB1cCBhbiBhc3NvY2lhdGlvbiAqLworCQlTQ1RQX0FTT0NfQ1JF
QVRFX1VOTE9DSyhpbnApOworCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFQUxSRUFE
WSk7CisJCXJldHVybiAoRUFMUkVBRFkpOworCX0KKwkvKiBXZSBhcmUgR09PRCB0byBnbyAqLwor
CXN0Y2IgPSBzY3RwX2Fsb2NfYXNzb2MoaW5wLCBhZGRyLCAmZXJyb3IsIDAsIHZyZl9pZCwKKwkg
ICAgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0cF9lcC5wcmVfb3Blbl9zdHJlYW1fY291bnQs
CisJICAgICAgICAgICAgICAgICAgICAgICBpbnAtPnNjdHBfZXAucG9ydCwgcCwKKwkgICAgICAg
ICAgICAgICAgICAgICAgIFNDVFBfSU5JVElBTElaRV9BVVRIX1BBUkFNUyk7CisJU0NUUF9BU09D
X0NSRUFURV9VTkxPQ0soaW5wKTsKKwlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCS8qIEdhayEgbm8g
bWVtb3J5ICovCisJCXJldHVybiAoZXJyb3IpOworCX0KKwlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHsKKwkJc3RjYi0+c2N0cF9lcC0+c2N0
cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQ7CisJCS8qIFNldCB0aGUgY29ubmVj
dGVkIGZsYWcgc28gd2UgY2FuIHF1ZXVlIGRhdGEgKi8KKwkJc29pc2Nvbm5lY3Rpbmcoc28pOwor
CX0KKwlTQ1RQX1NFVF9TVEFURShzdGNiLCBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKTsKKwkodm9p
ZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmc3RjYi0+YXNvYy50aW1lX2VudGVyZWQpOworI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJTkVUX0VQT0NI
X0VOVEVSKGV0KTsKKyNlbmRpZgorCXNjdHBfc2VuZF9pbml0aWF0ZShpbnAsIHN0Y2IsIFNDVFBf
U09fTE9DS0VEKTsKKwlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlORVRfRVBPQ0hfRVhJVChldCk7Cisj
ZW5kaWYKKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3RhdGljIGludAorI2lmICFkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCitzY3RwNl9nZXRhZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29j
a2FkZHIgKiphZGRyKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisjZWxzZQorc2N0
cDZfZ2V0YWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm5hbSkKK3sKKwlzdHJ1
Y3Qgc29ja2FkZHJfaW42ICpzaW42ID0gbXRvZChuYW0sIHN0cnVjdCBzb2NrYWRkcl9pbjYgKik7
CisjZW5kaWYKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCXVpbnQzMl90IHZyZl9pZDsKKwlz
dHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhOworCisjaWYgZGVmaW5lZChTQ1RQX0tBTUUpICYmIGRl
ZmluZWQoU0NUUF9FTUJFRERFRF9WNl9TQ09QRSkKKwlpbnQgZXJyb3I7CisjZW5kaWYKKworCS8q
CisJICogRG8gdGhlIG1hbGxvYyBmaXJzdCBpbiBjYXNlIGl0IGJsb2Nrcy4KKwkgKi8KKyNpZiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCVNDVFBfTUFMTE9DX1NPTkFNRShzaW42LCBzdHJ1Y3Qg
c29ja2FkZHJfaW42ICosIHNpemVvZigqc2luNikpOworCWlmIChzaW42ID09IE5VTEwpCisJCXJl
dHVybiAoRU5PTUVNKTsKKyNlbHNlCisJU0NUUF9CVUZfTEVOKG5hbSkgPSBzaXplb2YoKnNpbjYp
OworCW1lbXNldChzaW42LCAwLCBzaXplb2YoKnNpbjYpKTsKKyNlbmRpZgorCXNpbjYtPnNpbjZf
ZmFtaWx5ID0gQUZfSU5FVDY7CisjaWZkZWYgSEFWRV9TSU42X0xFTgorCXNpbjYtPnNpbjZfbGVu
ID0gc2l6ZW9mKCpzaW42KTsKKyNlbmRpZgorCisJaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICop
c28tPnNvX3BjYjsKKwlpZiAoaW5wID09IE5VTEwpIHsKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorCQlTQ1RQX0ZSRUVfU09OQU1FKHNpbjYpOworI2VuZGlmCisJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFQ09OTlJFU0VU
KTsKKwkJcmV0dXJuIChFQ09OTlJFU0VUKTsKKwl9CisJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwlz
aW42LT5zaW42X3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7CisJaWYgKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSB7CisJCS8qIEZvciB0aGUgYm91bmQgYWxsIGNhc2Ug
eW91IGdldCBiYWNrIDAgKi8KKwkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0NPTk5FQ1RFRCkgeworCQkJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCQkJc3RydWN0IHNvY2th
ZGRyX2luNiAqc2luX2E2OworCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCQkJaW50IGZuZDsK
KwkJCXN0Y2IgPSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNvY19saXN0KTsKKwkJCWlmIChzdGNi
ID09IE5VTEwpIHsKKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisjaWYgIWRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKwkJCQlTQ1RQX0ZSRUVfU09OQU1FKHNpbjYpOworI2VuZGlmCisJCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEs
IEVOT0VOVCk7CisJCQkJcmV0dXJuIChFTk9FTlQpOworCQkJfQorCQkJZm5kID0gMDsKKwkJCXNp
bl9hNiA9IE5VTEw7CisJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0
cF9uZXh0KSB7CisJCQkJc2luX2E2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmbmV0LT5yby5f
bF9hZGRyOworCQkJCWlmIChzaW5fYTYgPT0gTlVMTCkKKwkJCQkJLyogdGhpcyB3aWxsIG1ha2Ug
Y292ZXJpdHkgaGFwcHkgKi8KKwkJCQkJY29udGludWU7CisKKwkJCQlpZiAoc2luX2E2LT5zaW42
X2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJCQlmbmQgPSAxOworCQkJCQlicmVhazsKKwkJCQl9
CisJCQl9CisJCQlpZiAoKCFmbmQpIHx8IChzaW5fYTYgPT0gTlVMTCkpIHsKKwkJCQkvKiBwdW50
ICovCisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisJCQkJU0NUUF9GUkVFX1NPTkFNRShzaW42KTsKKyNlbmRpZgorCQkJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFTk9FTlQp
OworCQkJCXJldHVybiAoRU5PRU5UKTsKKwkJCX0KKwkJCXZyZl9pZCA9IGlucC0+ZGVmX3ZyZl9p
ZDsKKwkJCXNjdHBfaWZhID0gc2N0cF9zb3VyY2VfYWRkcmVzc19zZWxlY3Rpb24oaW5wLCBzdGNi
LCAoc2N0cF9yb3V0ZV90ICopJm5ldC0+cm8sIG5ldCwgMCwgdnJmX2lkKTsKKwkJCWlmIChzY3Rw
X2lmYSkgeworCQkJCXNpbjYtPnNpbjZfYWRkciA9IHNjdHBfaWZhLT5hZGRyZXNzLnNpbjYuc2lu
Nl9hZGRyOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogRm9yIHRoZSBib3VuZCBhbGwgY2FzZSB5
b3UgZ2V0IGJhY2sgMCAqLworCQkJbWVtc2V0KCZzaW42LT5zaW42X2FkZHIsIDAsIHNpemVvZihz
aW42LT5zaW42X2FkZHIpKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFRha2UgdGhlIGZpcnN0IElQ
djYgYWRkcmVzcyBpbiB0aGUgbGlzdCAqLworCQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7CisJ
CWludCBmbmQgPSAwOworCisJCUxJU1RfRk9SRUFDSChsYWRkciwgJmlucC0+c2N0cF9hZGRyX2xp
c3QsIHNjdHBfbnh0X2FkZHIpIHsKKwkJCWlmIChsYWRkci0+aWZhLT5hZGRyZXNzLnNhLnNhX2Zh
bWlseSA9PSBBRl9JTkVUNikgeworCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbl9hOworCisJ
CQkJc2luX2EgPSAmbGFkZHItPmlmYS0+YWRkcmVzcy5zaW42OworCQkJCXNpbjYtPnNpbjZfYWRk
ciA9IHNpbl9hLT5zaW42X2FkZHI7CisJCQkJZm5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJ
fQorCQlpZiAoIWZuZCkgeworI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQlTQ1RQX0ZS
RUVfU09OQU1FKHNpbjYpOworI2VuZGlmCisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJF
USwgRU5PRU5UKTsKKwkJCXJldHVybiAoRU5PRU5UKTsKKwkJfQorCX0KKwlTQ1RQX0lOUF9SVU5M
T0NLKGlucCk7CisJLyogU2NvcGluZyB0aGluZ3MgZm9yIHY2ICovCisjaWZkZWYgU0NUUF9FTUJF
RERFRF9WNl9TQ09QRQorI2lmZGVmIFNDVFBfS0FNRQorCWlmICgoZXJyb3IgPSBzYTZfcmVjb3Zl
cnNjb3BlKHNpbjYpKSAhPSAwKSB7CisJCVNDVFBfRlJFRV9TT05BTUUoc2luNik7CisJCXJldHVy
biAoZXJyb3IpOworCX0KKyNlbHNlCisJaWYgKElONl9JU19TQ09QRV9MSU5LTE9DQUwoJnNpbjYt
PnNpbjZfYWRkcikpCisJCS8qIHNraXAgaWZwIGNoZWNrIGJlbG93ICovCisJCWluNl9yZWNvdmVy
c2NvcGUoc2luNiwgJnNpbjYtPnNpbjZfYWRkciwgTlVMTCk7CisJZWxzZQorCQlzaW42LT5zaW42
X3Njb3BlX2lkID0gMDsJLyogWFhYICovCisjZW5kaWYgLyogU0NUUF9LQU1FICovCisjZW5kaWYg
LyogU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLworI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisJKCphZGRyKSA9IChzdHJ1Y3Qgc29ja2FkZHIgKilzaW42OworI2VuZGlmCisJcmV0dXJuICgw
KTsKK30KKworc3RhdGljIGludAorI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitzY3RwNl9w
ZWVyYWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICoqYWRkcikKK3sKKwlz
dHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworI2Vsc2UKK3NjdHA2X3BlZXJhZGRyKHN0cnVjdCBz
b2NrZXQgKnNvLCBzdHJ1Y3QgbWJ1ZiAqbmFtKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNp
bjYgPSBtdG9kKG5hbSwgc3RydWN0IHNvY2thZGRyX2luNiAqKTsKKyNlbmRpZgorCWludCBmbmQ7
CisJc3RydWN0IHNvY2thZGRyX2luNiAqc2luX2E2OworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7
CisJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKyNpZmRl
ZiBTQ1RQX0tBTUUKKwlpbnQgZXJyb3I7CisjZW5kaWYKKworCS8qIERvIHRoZSBtYWxsb2MgZmly
c3QgaW4gY2FzZSBpdCBibG9ja3MuICovCisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlT
Q1RQX01BTExPQ19TT05BTUUoc2luNiwgc3RydWN0IHNvY2thZGRyX2luNiAqLCBzaXplb2YgKnNp
bjYpOworCWlmIChzaW42ID09IE5VTEwpCisJCXJldHVybiAoRU5PTUVNKTsKKyNlbHNlCisJU0NU
UF9CVUZfTEVOKG5hbSkgPSBzaXplb2YoKnNpbjYpOworCW1lbXNldChzaW42LCAwLCBzaXplb2Yo
KnNpbjYpKTsKKyNlbmRpZgorCXNpbjYtPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisjaWZkZWYg
SEFWRV9TSU42X0xFTgorCXNpbjYtPnNpbjZfbGVuID0gc2l6ZW9mKCpzaW42KTsKKyNlbmRpZgor
CisJaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKKwlpZiAoKGlucCA9PSBO
VUxMKSB8fAorCSAgICAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RF
RCkgPT0gMCkpIHsKKwkJLyogVURQIHR5cGUgYW5kIGxpc3RlbmVycyB3aWxsIGRyb3Agb3V0IGhl
cmUgKi8KKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlTQ1RQX0ZSRUVfU09OQU1FKHNp
bjYpOworI2VuZGlmCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUDZfVVNSUkVRLCBFTk9UQ09OTik7CisJCXJldHVybiAoRU5PVENPTk4pOworCX0K
KwlTQ1RQX0lOUF9STE9DSyhpbnApOworCXN0Y2IgPSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNv
Y19saXN0KTsKKwlpZiAoc3RjYikgeworCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCX0KKwlTQ1RQ
X0lOUF9SVU5MT0NLKGlucCk7CisJaWYgKHN0Y2IgPT0gTlVMTCkgeworI2lmICFkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisJCVNDVFBfRlJFRV9TT05BTUUoc2luNik7CisjZW5kaWYKKwkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVD
T05OUkVTRVQpOworCQlyZXR1cm4gKEVDT05OUkVTRVQpOworCX0KKwlmbmQgPSAwOworCVRBSUxR
X0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKwkJc2luX2E2ID0g
KHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmbmV0LT5yby5fbF9hZGRyOworCQlpZiAoc2luX2E2LT5z
aW42X2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJZm5kID0gMTsKKwkJCXNpbjYtPnNpbjZfcG9y
dCA9IHN0Y2ItPnJwb3J0OworCQkJc2luNi0+c2luNl9hZGRyID0gc2luX2E2LT5zaW42X2FkZHI7
CisJCQlicmVhazsKKwkJfQorCX0KKwlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJaWYgKCFmbmQp
IHsKKwkJLyogTm8gSVB2NCBhZGRyZXNzICovCisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KwkJU0NUUF9GUkVFX1NPTkFNRShzaW42KTsKKyNlbmRpZgorCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRU5PRU5UKTsKKwkJcmV0
dXJuIChFTk9FTlQpOworCX0KKyNpZmRlZiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFCisjaWZkZWYg
U0NUUF9LQU1FCisJaWYgKChlcnJvciA9IHNhNl9yZWNvdmVyc2NvcGUoc2luNikpICE9IDApIHsK
KyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlTQ1RQX0ZSRUVfU09OQU1FKHNpbjYpOwor
I2VuZGlmCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUDZfVVNSUkVRLCBlcnJvcik7CisJCXJldHVybiAoZXJyb3IpOworCX0KKyNlbHNlCisJaW42
X3JlY292ZXJzY29wZShzaW42LCAmc2luNi0+c2luNl9hZGRyLCBOVUxMKTsKKyNlbmRpZiAvKiBT
Q1RQX0tBTUUgKi8KKyNlbmRpZiAvKiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFICovCisjaWYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkqYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKilzaW42Owor
I2VuZGlmCisJcmV0dXJuICgwKTsKK30KKworI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitz
dGF0aWMgaW50CitzY3RwNl9pbjZnZXRhZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29j
a2FkZHIgKipuYW0pCit7CisjZWxpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitpbnQKK3NjdHA2
X2luNmdldGFkZHIoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBtYnVmICpuYW0pCit7CisjaWZk
ZWYgSU5FVAorCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IG10b2QobmFtLCBzdHJ1Y3Qgc29ja2Fk
ZHIgKik7CisjZW5kaWYKKyNlbHNlCitzdGF0aWMgaW50CitzY3RwNl9pbjZnZXRhZGRyKHN0cnVj
dCBzb2NrZXQgKnNvLCBzdHJ1Y3QgbWJ1ZiAqbmFtKQoreworI2lmZGVmIElORVQKKwlzdHJ1Y3Qg
c29ja2FkZHIgKmFkZHIgPSBtdG9kKG5hbSwgc3RydWN0IHNvY2thZGRyICopOworI2VuZGlmCisj
ZW5kaWYKKwlzdHJ1Y3QgaW5wY2IgKmlucCA9IHNvdG9pbnBjYihzbyk7CisJaW50IGVycm9yOwor
CisJaWYgKGlucCA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUlOVkFMKTsKKwkJcmV0dXJuIChFSU5WQUwp
OworCX0KKworCS8qIGFsbG93IHY2IGFkZHJlc3NlcyBwcmVjZWRlbmNlICovCisJZXJyb3IgPSBz
Y3RwNl9nZXRhZGRyKHNvLCBuYW0pOworI2lmZGVmIElORVQKKwlpZiAoZXJyb3IpIHsKKyNpZiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworI2Vs
c2UKKwkJc3RydWN0IHNvY2thZGRyX2luNiBzaW42OworI2VuZGlmCisKKwkJLyogdHJ5IHY0IG5l
eHQgaWYgdjYgZmFpbGVkICovCisJCWVycm9yID0gc2N0cF9pbmdldGFkZHIoc28sIG5hbSk7CisJ
CWlmIChlcnJvcikgeworCQkJcmV0dXJuIChlcnJvcik7CisJCX0KKyNpZiAhZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorCQlTQ1RQX01BTExPQ19TT05BTUUoc2luNiwgc3RydWN0IHNvY2thZGRyX2lu
NiAqLCBzaXplb2YgKnNpbjYpOworCQlpZiAoc2luNiA9PSBOVUxMKSB7CisJCQlTQ1RQX0ZSRUVf
U09OQU1FKCpuYW0pOworCQkJcmV0dXJuIChFTk9NRU0pOworCQl9CisJCWluNl9zaW5fMl92NG1h
cHNpbjYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSpuYW0sIHNpbjYpOworCQlTQ1RQX0ZSRUVfU09O
QU1FKCpuYW0pOworCQkqbmFtID0gKHN0cnVjdCBzb2NrYWRkciAqKXNpbjY7CisjZWxzZQorCQlp
bjZfc2luXzJfdjRtYXBzaW42KChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyLCAmc2luNik7CisJ
CVNDVFBfQlVGX0xFTihuYW0pID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQltZW1j
cHkoYWRkciwgJnNpbjYsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisjZW5kaWYKKwl9
CisjZW5kaWYKKwlyZXR1cm4gKGVycm9yKTsKK30KKworI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCitzdGF0aWMgaW50CitzY3RwNl9nZXRwZWVyYWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3Ry
dWN0IHNvY2thZGRyICoqbmFtKQoreworI2VsaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQoraW50
CitzY3RwNl9nZXRwZWVyYWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm5hbSkK
K3sKKyNpZmRlZiBJTkVUCisJc3RydWN0IHNvY2thZGRyICphZGRyID0gbXRvZChuYW0sIHN0cnVj
dCBzb2NrYWRkciAqKTsKKyNlbmRpZgorI2Vsc2UKK3N0YXRpYworaW50CitzY3RwNl9nZXRwZWVy
YWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm5hbSkKK3sKKyNpZmRlZiBJTkVU
CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gbXRvZChuYW0sIHN0cnVjdCBzb2NrYWRkciAqKTsK
KyNlbmRpZgorCisjZW5kaWYKKwlzdHJ1Y3QgaW5wY2IgKmlucCA9IHNvdG9pbnBjYihzbyk7CisJ
aW50IGVycm9yOworCisJaWYgKGlucCA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
TlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUlOVkFMKTsKKwkJcmV0
dXJuIChFSU5WQUwpOworCX0KKworCS8qIGFsbG93IHY2IGFkZHJlc3NlcyBwcmVjZWRlbmNlICov
CisJZXJyb3IgPSBzY3RwNl9wZWVyYWRkcihzbywgbmFtKTsKKyNpZmRlZiBJTkVUCisJaWYgKGVy
cm9yKSB7CisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJc3RydWN0IHNvY2thZGRyX2lu
NiAqc2luNjsKKyNlbHNlCisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNjsKKyNlbmRpZgorCisJ
CS8qIHRyeSB2NCBuZXh0IGlmIHY2IGZhaWxlZCAqLworCQllcnJvciA9IHNjdHBfcGVlcmFkZHIo
c28sIG5hbSk7CisJCWlmIChlcnJvcikgeworCQkJcmV0dXJuIChlcnJvcik7CisJCX0KKyNpZiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlTQ1RQX01BTExPQ19TT05BTUUoc2luNiwgc3RydWN0
IHNvY2thZGRyX2luNiAqLCBzaXplb2YgKnNpbjYpOworCQlpZiAoc2luNiA9PSBOVUxMKSB7CisJ
CQlTQ1RQX0ZSRUVfU09OQU1FKCpuYW0pOworCQkJcmV0dXJuIChFTk9NRU0pOworCQl9CisJCWlu
Nl9zaW5fMl92NG1hcHNpbjYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSpuYW0sIHNpbjYpOworCQlT
Q1RQX0ZSRUVfU09OQU1FKCpuYW0pOworCQkqbmFtID0gKHN0cnVjdCBzb2NrYWRkciAqKXNpbjY7
CisjZWxzZQorCQlpbjZfc2luXzJfdjRtYXBzaW42KChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRy
LCAmc2luNik7CisJCVNDVFBfQlVGX0xFTihuYW0pID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bjYpOworCQltZW1jcHkoYWRkciwgJnNpbjYsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7
CisjZW5kaWYKKwl9CisjZW5kaWYKKwlyZXR1cm4gKGVycm9yKTsKK30KKworI2lmICFkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCitzdHJ1Y3QgcHJfdXNycmVxcyBzY3RwNl91c3JyZXFzID0geworI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pCisJLnBydV9hYm9ydCA9IHNjdHA2X2Fib3J0LAorCS5wcnVf
YWNjZXB0ID0gc2N0cF9hY2NlcHQsCisJLnBydV9hdHRhY2ggPSBzY3RwNl9hdHRhY2gsCisJLnBy
dV9iaW5kID0gc2N0cDZfYmluZCwKKwkucHJ1X2Nvbm5lY3QgPSBzY3RwNl9jb25uZWN0LAorCS5w
cnVfY29udHJvbCA9IGluNl9jb250cm9sLAorCS5wcnVfY2xvc2UgPSBzY3RwNl9jbG9zZSwKKwku
cHJ1X2RldGFjaCA9IHNjdHA2X2Nsb3NlLAorCS5wcnVfc29wb2xsID0gc29wb2xsX2dlbmVyaWMs
CisJLnBydV9mbHVzaCA9IHNjdHBfZmx1c2gsCisJLnBydV9kaXNjb25uZWN0ID0gc2N0cDZfZGlz
Y29ubmVjdCwKKwkucHJ1X2xpc3RlbiA9IHNjdHBfbGlzdGVuLAorCS5wcnVfcGVlcmFkZHIgPSBz
Y3RwNl9nZXRwZWVyYWRkciwKKwkucHJ1X3NlbmQgPSBzY3RwNl9zZW5kLAorCS5wcnVfc2h1dGRv
d24gPSBzY3RwX3NodXRkb3duLAorCS5wcnVfc29ja2FkZHIgPSBzY3RwNl9pbjZnZXRhZGRyLAor
CS5wcnVfc29zZW5kID0gc2N0cF9zb3NlbmQsCisJLnBydV9zb3JlY2VpdmUgPSBzY3RwX3NvcmVj
ZWl2ZQorI2VsaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisJLnBydV9hYm9ydCA9IHNjdHA2X2Fib3J0LAorCS5wcnVfYWNjZXB0ID0gc2N0cF9hY2NlcHQs
CisJLnBydV9hdHRhY2ggPSBzY3RwNl9hdHRhY2gsCisJLnBydV9iaW5kID0gc2N0cDZfYmluZCwK
KwkucHJ1X2Nvbm5lY3QgPSBzY3RwNl9jb25uZWN0LAorCS5wcnVfY29ubmVjdDIgPSBwcnVfY29u
bmVjdDJfbm90c3VwcCwKKwkucHJ1X2NvbnRyb2wgPSBpbjZfY29udHJvbCwKKwkucHJ1X2RldGFj
aCA9IHNjdHA2X2RldGFjaCwKKwkucHJ1X2Rpc2Nvbm5lY3QgPSBzY3RwNl9kaXNjb25uZWN0LAor
CS5wcnVfbGlzdGVuID0gc2N0cF9saXN0ZW4sCisJLnBydV9wZWVyYWRkciA9IHNjdHA2X2dldHBl
ZXJhZGRyLAorCS5wcnVfcmN2ZCA9IE5VTEwsCisJLnBydV9yY3Zvb2IgPSBwcnVfcmN2b29iX25v
dHN1cHAsCisJLnBydV9zZW5kID0gc2N0cDZfc2VuZCwKKwkucHJ1X3NlbnNlID0gcHJ1X3NlbnNl
X251bGwsCisJLnBydV9zaHV0ZG93biA9IHNjdHBfc2h1dGRvd24sCisJLnBydV9zb2NrYWRkciA9
IHNjdHA2X2luNmdldGFkZHIsCisJLnBydV9zb3NlbmQgPSBzY3RwX3Nvc2VuZCwKKwkucHJ1X3Nv
cmVjZWl2ZSA9IHNjdHBfc29yZWNlaXZlLAorCS5wcnVfc29wb2xsID0gc29wb2xsCisjZWxpZiBk
ZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlzY3RwNl9hYm9ydCwK
KwlzY3RwX2FjY2VwdCwKKwlzY3RwNl9hdHRhY2gsCisJc2N0cDZfYmluZCwKKwlzY3RwNl9jb25u
ZWN0LAorCXBydV9jb25uZWN0Ml9ub3RzdXBwLAorCU5VTEwsCisJTlVMTCwKKwlzY3RwNl9kaXNj
b25uZWN0LAorCXNjdHBfbGlzdGVuLAorCXNjdHA2X2dldHBlZXJhZGRyLAorCU5VTEwsCisJcHJ1
X3Jjdm9vYl9ub3RzdXBwLAorCU5VTEwsCisJcHJ1X3NlbnNlX251bGwsCisJc2N0cF9zaHV0ZG93
biwKKwlzY3RwX2ZsdXNoLAorCXNjdHA2X2luNmdldGFkZHIsCisJc2N0cF9zb3NlbmQsCisJc2N0
cF9zb3JlY2VpdmUsCisJc29wb2xsX2dlbmVyaWMsCisJTlVMTCwKKwlzY3RwNl9jbG9zZQorI2Vu
ZGlmCit9OworCisjZWxpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQoraW50CitzY3RwNl91c3Jy
ZXEoc28sIHJlcSwgbSwgbmFtLCBjb250cm9sLCBwKQorCXN0cnVjdCBzb2NrZXQgKnNvOworCWlu
dCByZXE7CisJc3RydWN0IG1idWYgKm0sICpuYW0sICpjb250cm9sOworCXN0cnVjdCBwcm9jICpw
OworeworCWludCBlcnJvcjsKKwlpbnQgZmFtaWx5OworCisJZmFtaWx5ID0gc28tPnNvX3Byb3Rv
LT5wcl9kb21haW4tPmRvbV9mYW1pbHk7CisKKwlpZiAocmVxID09IFBSVV9DT05UUk9MKSB7CisJ
CXN3aXRjaCAoZmFtaWx5KSB7CisJCWNhc2UgUEZfSU5FVDoKKwkJCWVycm9yID0gaW5fY29udHJv
bChzbywgKGxvbmcpbSwgKGNhZGRyX3QpbmFtLAorCQkJICAgIChzdHJ1Y3QgaWZuZXQgKiljb250
cm9sKTsKKwkJCWJyZWFrOworI2lmZGVmIElORVQ2CisJCWNhc2UgUEZfSU5FVDY6CisJCQllcnJv
ciA9IGluNl9jb250cm9sKHNvLCAobG9uZyltLCAoY2FkZHJfdCluYW0sCisJCQkgICAgKHN0cnVj
dCBpZm5ldCAqKWNvbnRyb2wsIHApOworCQkJYnJlYWs7CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VT
UlJFUSwgRUFGTk9TVVBQT1JUKTsKKwkJCWVycm9yID0gRUFGTk9TVVBQT1JUOworCQl9CisJCXJl
dHVybiAoZXJyb3IpOworCX0KKwlzd2l0Y2ggKHJlcSkgeworCWNhc2UgUFJVX0FUVEFDSDoKKwkJ
ZXJyb3IgPSBzY3RwNl9hdHRhY2goc28sIGZhbWlseSwgcCk7CisJCWJyZWFrOworCWNhc2UgUFJV
X0RFVEFDSDoKKwkJZXJyb3IgPSBzY3RwNl9kZXRhY2goc28pOworCQlicmVhazsKKwljYXNlIFBS
VV9CSU5EOgorCQlpZiAobmFtID09IE5VTEwpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVM
TCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUlOVkFMKTsKKwkJCXJldHVy
biAoRUlOVkFMKTsKKwkJfQorCQllcnJvciA9IHNjdHA2X2JpbmQoc28sIG5hbSwgcCk7CisJCWJy
ZWFrOworCWNhc2UgUFJVX0xJU1RFTjoKKwkJZXJyb3IgPSBzY3RwX2xpc3RlbihzbywgcCk7CisJ
CWJyZWFrOworCWNhc2UgUFJVX0NPTk5FQ1Q6CisJCWlmIChuYW0gPT0gTlVMTCkgeworCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVR
LCBFSU5WQUwpOworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisJCWVycm9yID0gc2N0cDZfY29u
bmVjdChzbywgbmFtLCBwKTsKKwkJYnJlYWs7CisJY2FzZSBQUlVfRElTQ09OTkVDVDoKKwkJZXJy
b3IgPSBzY3RwNl9kaXNjb25uZWN0KHNvKTsKKwkJYnJlYWs7CisJY2FzZSBQUlVfQUNDRVBUOgor
CQlpZiAobmFtID09IE5VTEwpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUlOVkFMKTsKKwkJCXJldHVybiAoRUlOVkFM
KTsKKwkJfQorCQllcnJvciA9IHNjdHBfYWNjZXB0KHNvLCBuYW0pOworCQlicmVhazsKKwljYXNl
IFBSVV9TSFVURE9XTjoKKwkJZXJyb3IgPSBzY3RwX3NodXRkb3duKHNvKTsKKwkJYnJlYWs7CisK
KwljYXNlIFBSVV9SQ1ZEOgorCQkvKgorCQkgKiBGb3IgT3BlbkJTRCBhbmQgTmV0QlNELCB0aGlz
IGlzIHJlYWwgdWdseS4gVGhlIChtYnVmICopCisJCSAqIG5hbSB0aGF0IGlzIHBhc3NlZCAoYnkg
c29yZWNlaXZlKCkpIGlzIHRoZSBpbnQgZmxhZ3MgY2FzdAorCQkgKiBhcyBhIChtYnVmICopIHl1
Y2shCisJCSAqLworCQllcnJvciA9IHNjdHBfdXNyX3JlY3ZkKHNvLCAoaW50KSgobG9uZyluYW0p
KTsKKwkJYnJlYWs7CisKKwljYXNlIFBSVV9TRU5EOgorCQkvKiBGbGFncyBhcmUgaWdub3JlZCAq
LworCQllcnJvciA9IHNjdHA2X3NlbmQoc28sIDAsIG0sIG5hbSwgY29udHJvbCwgcCk7CisJCWJy
ZWFrOworCWNhc2UgUFJVX0FCT1JUOgorCQllcnJvciA9IHNjdHA2X2Fib3J0KHNvKTsKKwkJYnJl
YWs7CisKKwljYXNlIFBSVV9TRU5TRToKKwkJZXJyb3IgPSAwOworCQlicmVhazsKKwljYXNlIFBS
VV9SQ1ZPT0I6CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFA2X1VTUlJFUSwgRUFGTk9TVVBQT1JUKTsKKwkJZXJyb3IgPSBFQUZOT1NVUFBPUlQ7
CisJCWJyZWFrOworCWNhc2UgUFJVX1NFTkRPT0I6CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVM
TCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUFGTk9TVVBQT1JUKTsKKwkJ
ZXJyb3IgPSBFQUZOT1NVUFBPUlQ7CisJCWJyZWFrOworCWNhc2UgUFJVX1BFRVJBRERSOgorCQll
cnJvciA9IHNjdHA2X2dldHBlZXJhZGRyKHNvLCBuYW0pOworCQlicmVhazsKKwljYXNlIFBSVV9T
T0NLQUREUjoKKwkJZXJyb3IgPSBzY3RwNl9pbjZnZXRhZGRyKHNvLCBuYW0pOworCQlicmVhazsK
KwljYXNlIFBSVV9TTE9XVElNTzoKKwkJZXJyb3IgPSAwOworCQlicmVhazsKKwlkZWZhdWx0Ogor
CQllcnJvciA9IDA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gKGVycm9yKTsKK30KKyNlbmRpZgor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQ2L3NjdHA2X3Zh
ci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0Ni9zY3RwNl92YXIuaApuZXcgZmlsZSBt
b2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAuLjU2YTZjM2FmM2Q5YwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldDYvc2N0cDZfdmFyLmgKQEAgLTAsMCAr
MSw4MSBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisg
KgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxs
IFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAx
MiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAg
ICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICog
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpbmNsdWRl
IDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldDYvc2N0
cDZfdmFyLmggMzE3NDU3IDIwMTctMDQtMjYgMTk6MjY6NDBaIHR1ZXhlbiAkIik7CisjZW5kaWYK
KworI2lmbmRlZiBfTkVUSU5FVDZfU0NUUDZfVkFSX0hfCisjZGVmaW5lIF9ORVRJTkVUNl9TQ1RQ
Nl9WQVJfSF8KKworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpZmRlZiBJTkVUCitleHRl
cm4gdm9pZCBpbjZfc2luNl8yX3NpbihzdHJ1Y3Qgc29ja2FkZHJfaW4gKiwgc3RydWN0IHNvY2th
ZGRyX2luNiAqKTsKK2V4dGVybiB2b2lkIGluNl9zaW42XzJfc2luX2luX3NvY2soc3RydWN0IHNv
Y2thZGRyICopOworZXh0ZXJuIHZvaWQgaW42X3Npbl8yX3Y0bWFwc2luNihjb25zdCBzdHJ1Y3Qg
c29ja2FkZHJfaW4gKiwgc3RydWN0IHNvY2thZGRyX2luNiAqKTsKKyNlbmRpZgorI2VuZGlmCisj
aWYgZGVmaW5lZChfS0VSTkVMKQorCisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK1NZU0NU
TF9ERUNMKF9uZXRfaW5ldDZfc2N0cDYpOworZXh0ZXJuIHN0cnVjdCBwcl91c3JyZXFzIHNjdHA2
X3VzcnJlcXM7CisjZWxzZQoraW50IHNjdHA2X3VzcnJlcShzdHJ1Y3Qgc29ja2V0ICosIGludCwg
c3RydWN0IG1idWYgKiwgc3RydWN0IG1idWYgKiwgc3RydWN0IG1idWYgKik7CisjZW5kaWYKKwor
I2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQoraW50IHNj
dHA2X2lucHV0KHN0cnVjdCBtYnVmICoqLCBpbnQgKik7CitpbnQgc2N0cDZfaW5wdXRfd2l0aF9w
b3J0KHN0cnVjdCBtYnVmICoqLCBpbnQgKiwgdWludDE2X3QpOworI2Vsc2UKK2ludCBzY3RwNl9p
bnB1dChzdHJ1Y3QgbWJ1ZiAqKiwgaW50ICosIGludCk7CitpbnQgc2N0cDZfaW5wdXRfd2l0aF9w
b3J0KHN0cnVjdCBtYnVmICoqLCBpbnQgKiwgdWludDE2X3QpOworI2VuZGlmCitpbnQgc2N0cDZf
b3V0cHV0KHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBtYnVmICosIHN0cnVjdCBzb2NrYWRk
ciAqLAorICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWJ1ZiAqLCBzdHJ1Y3QgcHJvYyAqKTsKKyNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykgJiYgIWRlZmlu
ZWQoQVBQTEVfTEVPUEFSRCkgJiYgIWRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpICYmICFkZWZp
bmVkKEFQUExFX0xJT04pICYmICFkZWZpbmVkKEFQUExFX01PVU5UQUlOTElPTikgJiYgIWRlZmlu
ZWQoQVBQTEVfRUxDQVBJVEFOKQordm9pZCBzY3RwNl9jdGxpbnB1dChpbnQsIHN0cnVjdCBzb2Nr
YWRkciAqLCB2b2lkICosIHN0cnVjdCBpZm5ldCAqIFNDVFBfVU5VU0VEKTsKKyNlbHNlCit2b2lk
IHNjdHA2X2N0bGlucHV0KGludCwgc3RydWN0IHNvY2thZGRyICosIHZvaWQgKik7CisjZW5kaWYK
KyNpZiAhKChkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykpICAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkKK2V4dGVybiB2b2lkIGluNl9zaW5fMl92NG1hcHNpbjYo
c3RydWN0IHNvY2thZGRyX2luICosIHN0cnVjdCBzb2NrYWRkcl9pbjYgKik7CitleHRlcm4gdm9p
ZCBpbjZfc2luNl8yX3NpbihzdHJ1Y3Qgc29ja2FkZHJfaW4gKiwgc3RydWN0IHNvY2thZGRyX2lu
NiAqKTsKK2V4dGVybiB2b2lkIGluNl9zaW42XzJfc2luX2luX3NvY2soc3RydWN0IHNvY2thZGRy
ICopOworI2VuZGlmCit2b2lkIHNjdHA2X25vdGlmeShzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1
Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfbmV0cyAqLAorICAgICAgICAgICAgICAgICAgdWlu
dDhfdCwgdWludDhfdCwgdWludDMyX3QpOworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3VzcnNjdHBsaWIvdXNlcl9hdG9taWMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNl
cl9hdG9taWMuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAuLmIxNWFj
ZjVhMGIzYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9hdG9t
aWMuaApAQCAtMCwwICsxLDMxNiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBC
cmFkIFBlbm9mZgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgSHVtYWlyYSBLYW1hbAorICog
Q29weXJpZ2h0IChjKSAyMDExLTIwMTIgSXJlbmUgUnVlbmdlbGVyCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTEtMjAxMiBNaWNoYWVsIFR1ZXhlbgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFO
RCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVU
SE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICog
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBfVVNFUl9BVE9NSUNfSF8KKyNkZWZpbmUgX1VTRVJfQVRPTUlDX0hfCisKKy8q
IF9fVXNlcnNwYWNlX18gdmVyc2lvbiBvZiBzeXMvaTM4Ni9pbmNsdWRlL2F0b21pYy5oIGdvZXMg
aGVyZSAqLworCisvKiBUT0RPIEluIHRoZSBmdXR1cmUsIG1pZ2h0IHdhbnQgdG8gbm90IHVzZSBp
Mzg2IHNwZWNpZmljIGFzc2VtYmx5LgorICogICAgVGhlIG9wdGlvbnMgaW5jbHVkZToKKyAqICAg
ICAgIC0gaW1wbGVtZW50IHRoZW0gZ2VuZXJpY2FsbHkgKGJ1dCBtYXliZSBub3QgdHJ1bHkgYXRv
bWljPykgaW4gdXNlcnNwYWNlCisgKiAgICAgICAtIGhhdmUgaWZkZWYncyBmb3IgX19Vc2Vyc3Bh
Y2VfYXJjaF8gcGVyaGFwcyAoT1MgaXNuJ3QgZW5vdWdoLi4uKQorICovCisKKyNpbmNsdWRlIDxz
dGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaWYgZGVmaW5lZChfX0FQUExFX18p
IHx8IGRlZmluZWQoX1dJTjMyKQorI2lmIGRlZmluZWQoX1dJTjMyKQorI2RlZmluZSBhdG9taWNf
YWRkX2ludChhZGRyLCB2YWwpIEludGVybG9ja2VkRXhjaGFuZ2VBZGQoKExQTE9ORylhZGRyLCAo
TE9ORyl2YWwpCisjZGVmaW5lIGF0b21pY19mZXRjaGFkZF9pbnQoYWRkciwgdmFsKSBJbnRlcmxv
Y2tlZEV4Y2hhbmdlQWRkKChMUExPTkcpYWRkciwgKExPTkcpdmFsKQorI2RlZmluZSBhdG9taWNf
c3VidHJhY3RfaW50KGFkZHIsIHZhbCkgICBJbnRlcmxvY2tlZEV4Y2hhbmdlQWRkKChMUExPTkcp
YWRkciwtKChMT05HKXZhbCkpCisjZGVmaW5lIGF0b21pY19jbXBzZXRfaW50KGRzdCwgZXhwLCBz
cmMpIEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKChMUExPTkcpZHN0LCBzcmMsIGV4cCkKKyNk
ZWZpbmUgU0NUUF9ERUNSRU1FTlRfQU5EX0NIRUNLX1JFRkNPVU5UKGFkZHIpIChJbnRlcmxvY2tl
ZEV4Y2hhbmdlQWRkKChMUExPTkcpYWRkciwgKC0xTCkpID09IDEpCisjZWxzZQorI2luY2x1ZGUg
PGxpYmtlcm4vT1NBdG9taWMuaD4KKyNkZWZpbmUgYXRvbWljX2FkZF9pbnQoYWRkciwgdmFsKSBP
U0F0b21pY0FkZDMyQmFycmllcih2YWwsIChpbnQzMl90ICopYWRkcikKKyNkZWZpbmUgYXRvbWlj
X2ZldGNoYWRkX2ludChhZGRyLCB2YWwpIE9TQXRvbWljQWRkMzJCYXJyaWVyKHZhbCwgKGludDMy
X3QgKilhZGRyKQorI2RlZmluZSBhdG9taWNfc3VidHJhY3RfaW50KGFkZHIsIHZhbCkgT1NBdG9t
aWNBZGQzMkJhcnJpZXIoLXZhbCwgKGludDMyX3QgKilhZGRyKQorI2RlZmluZSBhdG9taWNfY21w
c2V0X2ludChkc3QsIGV4cCwgc3JjKSBPU0F0b21pY0NvbXBhcmVBbmRTd2FwSW50QmFycmllcihl
eHAsIHNyYywgKGludCAqKWRzdCkKKyNkZWZpbmUgU0NUUF9ERUNSRU1FTlRfQU5EX0NIRUNLX1JF
RkNPVU5UKGFkZHIpIChhdG9taWNfZmV0Y2hhZGRfaW50KGFkZHIsIC0xKSA9PSAwKQorI2VuZGlm
CisKKyNpZiBkZWZpbmVkKElOVkFSSUFOVFMpCisjZGVmaW5lIFNDVFBfU0FWRV9BVE9NSUNfREVD
UkVNRU5UKGFkZHIsIHZhbCkgXAoreyBcCisJaW50MzJfdCBuZXd2YWw7IFwKKwluZXd2YWwgPSBh
dG9taWNfZmV0Y2hhZGRfaW50KGFkZHIsIC12YWwpOyBcCisJaWYgKG5ld3ZhbCA8IDApIHsgXAor
CQlwYW5pYygiQ291bnRlciBnb2VzIG5lZ2F0aXZlIik7IFwKKwl9IFwKK30KKyNlbHNlCisjZGVm
aW5lIFNDVFBfU0FWRV9BVE9NSUNfREVDUkVNRU5UKGFkZHIsIHZhbCkgXAoreyBcCisJaW50MzJf
dCBuZXd2YWw7IFwKKwluZXd2YWwgPSBhdG9taWNfZmV0Y2hhZGRfaW50KGFkZHIsIC12YWwpOyBc
CisJaWYgKG5ld3ZhbCA8IDApIHsgXAorCQkqYWRkciA9IDA7IFwKKwl9IFwKK30KKyNlbmRpZgor
I2lmIGRlZmluZWQoX1dJTjMyKQorc3RhdGljIHZvaWQgYXRvbWljX2luaXQodm9pZCkge30gLyog
ZW1wdHkgd2hlbiB3ZSBhcmUgbm90IHVzaW5nIGF0b21pY19tdHggKi8KKyNlbHNlCisvLyBXZWJL
aXQgY2hhbmdlLCB0aGlzIGNvbmZsaWN0cyB3aXRoIGF0b21pY19pbml0CisvLyBzdGF0aWMgaW5s
aW5lIHZvaWQgYXRvbWljX2luaXQodm9pZCkge30gLyogZW1wdHkgd2hlbiB3ZSBhcmUgbm90IHVz
aW5nIGF0b21pY19tdHggKi8KKyNlbmRpZgorCisjZWxzZQorLyogVXNpbmcgZ2NjIGJ1aWx0LWlu
IGZ1bmN0aW9ucyBmb3IgYXRvbWljIG1lbW9yeSBvcGVyYXRpb25zCisgICBSZWZlcmVuY2U6IGh0
dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy00LjEuMC9nY2MvQXRvbWljLUJ1aWx0aW5z
Lmh0bWwKKyAgIFJlcXVpcmVzIGdjYyB2ZXJzaW9uIDQuMS4wCisgICBjb21waWxlIHdpdGggLW1h
cmNoPWk0ODYKKyAqLworCisvKkF0b21pY2FsbHkgYWRkIFYgdG8gKlAuKi8KKyNkZWZpbmUgYXRv
bWljX2FkZF9pbnQoUCwgVikJICh2b2lkKSBfX3N5bmNfZmV0Y2hfYW5kX2FkZChQLCBWKQorCisv
KkF0b21pY2FsbHkgc3VidHJhY2UgViBmcm9tICpQLiovCisjZGVmaW5lIGF0b21pY19zdWJ0cmFj
dF9pbnQoUCwgVikgKHZvaWQpIF9fc3luY19mZXRjaF9hbmRfc3ViKFAsIFYpCisKKy8qCisgKiBB
dG9taWNhbGx5IGFkZCB0aGUgdmFsdWUgb2YgdiB0byB0aGUgaW50ZWdlciBwb2ludGVkIHRvIGJ5
IHAgYW5kIHJldHVybgorICogdGhlIHByZXZpb3VzIHZhbHVlIG9mICpwLgorICovCisjZGVmaW5l
IGF0b21pY19mZXRjaGFkZF9pbnQocCwgdikgX19zeW5jX2ZldGNoX2FuZF9hZGQocCwgdikKKwor
LyogRm9sbG93aW5nIGV4cGxhbmF0aW9uIGZyb20gc3JjL3N5cy9pMzg2L2luY2x1ZGUvYXRvbWlj
LmgsCisgKiBmb3IgYXRvbWljIGNvbXBhcmUgYW5kIHNldAorICoKKyAqIGlmICgqZHN0ID09IGV4
cCkgKmRzdCA9IHNyYyAoYWxsIDMyIGJpdCB3b3JkcykKKyAqCisgKiBSZXR1cm5zIDAgb24gZmFp
bHVyZSwgbm9uLXplcm8gb24gc3VjY2VzcworICovCisKKyNkZWZpbmUgYXRvbWljX2NtcHNldF9p
bnQoZHN0LCBleHAsIHNyYykgX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcChkc3QsIGV4cCwg
c3JjKQorCisjZGVmaW5lIFNDVFBfREVDUkVNRU5UX0FORF9DSEVDS19SRUZDT1VOVChhZGRyKSAo
YXRvbWljX2ZldGNoYWRkX2ludChhZGRyLCAtMSkgPT0gMSkKKyNpZiBkZWZpbmVkKElOVkFSSUFO
VFMpCisjZGVmaW5lIFNDVFBfU0FWRV9BVE9NSUNfREVDUkVNRU5UKGFkZHIsIHZhbCkgXAoreyBc
CisJaW50MzJfdCBvbGR2YWw7IFwKKwlvbGR2YWwgPSBhdG9taWNfZmV0Y2hhZGRfaW50KGFkZHIs
IC12YWwpOyBcCisJaWYgKG9sZHZhbCA8IHZhbCkgeyBcCisJCXBhbmljKCJDb3VudGVyIGdvZXMg
bmVnYXRpdmUiKTsgXAorCX0gXAorfQorI2Vsc2UKKyNkZWZpbmUgU0NUUF9TQVZFX0FUT01JQ19E
RUNSRU1FTlQoYWRkciwgdmFsKSBcCit7IFwKKwlpbnQzMl90IG9sZHZhbDsgXAorCW9sZHZhbCA9
IGF0b21pY19mZXRjaGFkZF9pbnQoYWRkciwgLXZhbCk7IFwKKwlpZiAob2xkdmFsIDwgdmFsKSB7
IFwKKwkJKmFkZHIgPSAwOyBcCisJfSBcCit9CisjZW5kaWYKK3N0YXRpYyBpbmxpbmUgdm9pZCBh
dG9taWNfaW5pdCh2b2lkKSB7fSAvKiBlbXB0eSB3aGVuIHdlIGFyZSBub3QgdXNpbmcgYXRvbWlj
X210eCAqLworI2VuZGlmCisKKyNpZiAwIC8qIHVzaW5nIGxpYmF0b21pY19vcHMgKi8KKyNpbmNs
dWRlICJ1c2VyX2luY2x1ZGUvYXRvbWljX29wcy5oIgorCisvKkF0b21pY2FsbHkgYWRkIGluY3Ig
dG8gKlAsIGFuZCByZXR1cm4gdGhlIG9yaWdpbmFsIHZhbHVlIG9mICpQLiovCisjZGVmaW5lIGF0
b21pY19hZGRfaW50KFAsIFYpCSBBT19mZXRjaF9hbmRfYWRkKChBT190KilQLCBWKQorCisjZGVm
aW5lIGF0b21pY19zdWJ0cmFjdF9pbnQoUCwgVikgQU9fZmV0Y2hfYW5kX2FkZCgoQU9fdCopUCwg
LShWKSkKKworLyoKKyAqIEF0b21pY2FsbHkgYWRkIHRoZSB2YWx1ZSBvZiB2IHRvIHRoZSBpbnRl
Z2VyIHBvaW50ZWQgdG8gYnkgcCBhbmQgcmV0dXJuCisgKiB0aGUgcHJldmlvdXMgdmFsdWUgb2Yg
KnAuCisgKi8KKyNkZWZpbmUgYXRvbWljX2ZldGNoYWRkX2ludChwLCB2KSBBT19mZXRjaF9hbmRf
YWRkKChBT190KilwLCB2KQorCisvKiBBdG9taWNhbGx5IGNvbXBhcmUgKmFkZHIgdG8gb2xkX3Zh
bCwgYW5kIHJlcGxhY2UgKmFkZHIgYnkgbmV3X3ZhbAorICAgaWYgdGhlIGZpcnN0IGNvbXBhcmlz
b24gc3VjY2VlZHMuICBSZXR1cm5zIG5vbnplcm8gaWYgdGhlIGNvbXBhcmlzb24KKyAgIHN1Y2Nl
ZWRlZCBhbmQgKmFkZHIgd2FzIHVwZGF0ZWQuCisqLworLyogRm9sbG93aW5nIEV4cGxhbmF0aW9u
IGZyb20gc3JjL3N5cy9pMzg2L2luY2x1ZGUvYXRvbWljLmgsIHdoaWNoCisgICBtYXRjaGVzIHRo
YXQgb2YgQU9fY29tcGFyZV9hbmRfc3dhcCBhYm92ZS4KKyAqIEF0b21pYyBjb21wYXJlIGFuZCBz
ZXQsIHVzZWQgYnkgdGhlIG11dGV4IGZ1bmN0aW9ucworICoKKyAqIGlmICgqZHN0ID09IGV4cCkg
KmRzdCA9IHNyYyAoYWxsIDMyIGJpdCB3b3JkcykKKyAqCisgKiBSZXR1cm5zIDAgb24gZmFpbHVy
ZSwgbm9uLXplcm8gb24gc3VjY2VzcworICovCisKKyNkZWZpbmUgYXRvbWljX2NtcHNldF9pbnQo
ZHN0LCBleHAsIHNyYykgQU9fY29tcGFyZV9hbmRfc3dhcCgoQU9fdCopZHN0LCBleHAsIHNyYykK
Kworc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19pbml0KCkge30gLyogZW1wdHkgd2hlbiB3ZSBh
cmUgbm90IHVzaW5nIGF0b21pY19tdHggKi8KKyNlbmRpZiAvKiBjbG9zaW5nICNpZiBmb3IgbGli
YXRvbWljICovCisKKyNpZiAwIC8qIHVzaW5nIGF0b21pY19tdHggKi8KKworI2luY2x1ZGUgPHB0
aHJlYWQuaD4KKworZXh0ZXJuIHVzZXJsYW5kX211dGV4X3QgYXRvbWljX210eDsKKworI2lmIGRl
ZmluZWQoX1dJTjMyKQorc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19pbml0KCkgeworCUluaXRp
YWxpemVDcml0aWNhbFNlY3Rpb24oJmF0b21pY19tdHgpOworfQorc3RhdGljIGlubGluZSB2b2lk
IGF0b21pY19kZXN0cm95KCkgeworCURlbGV0ZUNyaXRpY2FsU2VjdGlvbigmYXRvbWljX210eCk7
Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2xvY2soKSB7CisJRW50ZXJDcml0aWNhbFNl
Y3Rpb24oJmF0b21pY19tdHgpOworfQorc3RhdGljIGlubGluZSB2b2lkIGF0b21pY191bmxvY2so
KSB7CisJTGVhdmVDcml0aWNhbFNlY3Rpb24oJmF0b21pY19tdHgpOworfQorI2Vsc2UKK3N0YXRp
YyBpbmxpbmUgdm9pZCBhdG9taWNfaW5pdCgpIHsKKwlwdGhyZWFkX211dGV4YXR0cl90IG11dGV4
X2F0dHI7CisKKwlwdGhyZWFkX211dGV4YXR0cl9pbml0KCZtdXRleF9hdHRyKTsKKyNpZmRlZiBJ
TlZBUklBTlRTCisJcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSgmbXV0ZXhfYXR0ciwgUFRIUkVB
RF9NVVRFWF9FUlJPUkNIRUNLKTsKKyNlbmRpZgorCXB0aHJlYWRfbXV0ZXhfaW5pdCgmYWNjZXB0
X210eCwgJm11dGV4X2F0dHIpOworCXB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3koJm11dGV4X2F0
dHIpOworfQorc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19kZXN0cm95KCkgeworCSh2b2lkKXB0
aHJlYWRfbXV0ZXhfZGVzdHJveSgmYXRvbWljX210eCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQg
YXRvbWljX2xvY2soKSB7CisjaWZkZWYgSU5WQVJJQU5UUworCUtBU1NFUlQocHRocmVhZF9tdXRl
eF9sb2NrKCZhdG9taWNfbXR4KSA9PSAwLCAoImF0b21pY19sb2NrOiBhdG9taWNfbXR4IGFscmVh
ZHkgbG9ja2VkIikpCisjZWxzZQorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfbG9jaygmYXRvbWljX210
eCk7CisjZW5kaWYKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfdW5sb2NrKCkgeworI2lm
ZGVmIElOVkFSSUFOVFMKKwlLQVNTRVJUKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZhdG9taWNfbXR4
KSA9PSAwLCAoImF0b21pY191bmxvY2s6IGF0b21pY19tdHggbm90IGxvY2tlZCIpKQorI2Vsc2UK
Kwkodm9pZClwdGhyZWFkX211dGV4X3VubG9jaygmYXRvbWljX210eCk7CisjZW5kaWYKK30KKyNl
bmRpZgorLyoKKyAqIEZvciB1c2VybGFuZCwgYWx3YXlzIHVzZSBsb2NrIHByZWZpeGVzIHNvIHRo
YXQgdGhlIGJpbmFyaWVzIHdpbGwgcnVuCisgKiBvbiBib3RoIFNNUCBhbmQgIVNNUCBzeXN0ZW1z
LgorICovCisKKyNkZWZpbmUJTVBMT0NLRUQJImxvY2sgOyAiCisKKy8qCisgKiBBdG9taWNhbGx5
IGFkZCB0aGUgdmFsdWUgb2YgdiB0byB0aGUgaW50ZWdlciBwb2ludGVkIHRvIGJ5IHAgYW5kIHJl
dHVybgorICogdGhlIHByZXZpb3VzIHZhbHVlIG9mICpwLgorICovCitzdGF0aWMgX19pbmxpbmUg
dV9pbnQKK2F0b21pY19mZXRjaGFkZF9pbnQodm9sYXRpbGUgdm9pZCAqbiwgdV9pbnQgdikKK3sK
KwlpbnQgKnAgPSAoaW50ICopIG47CisJYXRvbWljX2xvY2soKTsKKwlfX2FzbSBfX3ZvbGF0aWxl
KAorCSIJIiBNUExPQ0tFRCAiCQkiCisJIgl4YWRkbAklMCwgJTEgOwkiCisJIiMgYXRvbWljX2Zl
dGNoYWRkX2ludCIKKwk6ICIrciIgKHYpLAkJCS8qIDAgKHJlc3VsdCkgKi8KKwkgICI9bSIgKCpw
KQkJCS8qIDEgKi8KKwk6ICJtIiAoKnApKTsJCQkvKiAyICovCisJYXRvbWljX3VubG9jaygpOwor
CisJcmV0dXJuICh2KTsKK30KKworCisjaWZkZWYgQ1BVX0RJU0FCTEVfQ01QWENIRworCitzdGF0
aWMgX19pbmxpbmUgaW50CithdG9taWNfY21wc2V0X2ludCh2b2xhdGlsZSB1X2ludCAqZHN0LCB1
X2ludCBleHAsIHVfaW50IHNyYykKK3sKKwl1X2NoYXIgcmVzOworCisJYXRvbWljX2xvY2soKTsK
KwlfX2FzbSBfX3ZvbGF0aWxlKAorCSIJcHVzaGZsIDsJCSIKKwkiCWNsaSA7CQkJIgorCSIJY21w
bAklMywlNCA7CQkiCisJIglqbmUJMWYgOwkJIgorCSIJbW92bAklMiwlMSA7CQkiCisJIjE6CQkJ
CSIKKwkiICAgICAgIHNldGUJJTAgOwkJIgorCSIJcG9wZmwgOwkJCSIKKwkiIyBhdG9taWNfY21w
c2V0X2ludCIKKwk6ICI9cSIgKHJlcyksCQkJLyogMCAqLworCSAgIj1tIiAoKmRzdCkJCQkvKiAx
ICovCisJOiAiciIgKHNyYyksCQkJLyogMiAqLworCSAgInIiIChleHApLAkJCS8qIDMgKi8KKwkg
ICJtIiAoKmRzdCkJCQkvKiA0ICovCisJOiAibWVtb3J5Iik7CisJYXRvbWljX3VubG9jaygpOwor
CisJcmV0dXJuIChyZXMpOworfQorCisjZWxzZSAvKiAhQ1BVX0RJU0FCTEVfQ01QWENIRyAqLwor
CitzdGF0aWMgX19pbmxpbmUgaW50CithdG9taWNfY21wc2V0X2ludCh2b2xhdGlsZSB1X2ludCAq
ZHN0LCB1X2ludCBleHAsIHVfaW50IHNyYykKK3sKKwlhdG9taWNfbG9jaygpOworCXVfY2hhciBy
ZXM7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKAorCSIJIiBNUExPQ0tFRCAiCQkiCisJIgljbXB4Y2hn
bCAlMiwlMSA7CSIKKwkiCXNldGUJJTAgOwkJIgorCSIxOgkJCQkiCisJIiMgYXRvbWljX2NtcHNl
dF9pbnQiCisJOiAiPWEiIChyZXMpLAkJCS8qIDAgKi8KKwkgICI9bSIgKCpkc3QpCQkJLyogMSAq
LworCTogInIiIChzcmMpLAkJCS8qIDIgKi8KKwkgICJhIiAoZXhwKSwJCQkvKiAzICovCisJICAi
bSIgKCpkc3QpCQkJLyogNCAqLworCTogIm1lbW9yeSIpOworCWF0b21pY191bmxvY2soKTsKKwor
CXJldHVybiAocmVzKTsKK30KKworI2VuZGlmIC8qIENQVV9ESVNBQkxFX0NNUFhDSEcgKi8KKwor
I2RlZmluZSBhdG9taWNfYWRkX2ludChQLCBWKQkgZG8geyAgIFwKKwkJYXRvbWljX2xvY2soKTsg
ICAgICAgICAgXAorCQkoKih1X2ludCAqKShQKSArPSAoVikpOyBcCisJCWF0b21pY191bmxvY2so
KTsgICAgICAgIFwKK30gd2hpbGUoMCkKKyNkZWZpbmUgYXRvbWljX3N1YnRyYWN0X2ludChQLCBW
KSAgZG8geyAgIFwKKwkJYXRvbWljX2xvY2soKTsgICAgICAgICAgICBcCisJCSgqKHVfaW50ICop
KFApIC09IChWKSk7ICAgXAorCQlhdG9taWNfdW5sb2NrKCk7ICAgICAgICAgIFwKK30gd2hpbGUo
MCkKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNl
cl9lbnZpcm9ubWVudC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2Vudmlyb25tZW50LmMK
bmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwLi4xODg3NzE4OTExZTYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfZW52aXJvbm1lbnQuYwpA
QCAtMCwwICsxLDM4NCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBCcmFkIFBl
bm9mZgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgSHVtYWlyYSBLYW1hbAorICogQ29weXJp
Z2h0IChjKSAyMDExLTIwMTIgSXJlbmUgUnVlbmdlbGVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEt
MjAxMiBNaWNoYWVsIFR1ZXhlbgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyog
X19Vc2Vyc3BhY2VfXyAqLworCisjaWYgZGVmaW5lZChfV0lOMzIpCisjaWYgIWRlZmluZWQoX0NS
VF9SQU5EX1MpICYmICFkZWZpbmVkKEZVWlpJTkdfQlVJTERfTU9ERV9VTlNBRkVfRk9SX1BST0RV
Q1RJT04pCisjZGVmaW5lIF9DUlRfUkFORF9TCisjZW5kaWYKKyNlbHNlCisjaW5jbHVkZSA8c3Rk
aW50Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zX3VzZXJzcGFjZS5oPgorI2VuZGlmCisj
aWZkZWYgSU5WQVJJQU5UUworI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9wY2IuaD4KKyNlbmRpZgor
I2luY2x1ZGUgPHVzZXJfZW52aXJvbm1lbnQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy8q
ICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4gZGVmaW5lcyBNSU4gKi8KKyNpZiAhZGVmaW5lZChNSU4p
CisjZGVmaW5lIE1JTihhcmcxLGFyZzIpICgoYXJnMSkgPCAoYXJnMikgPyAoYXJnMSkgOiAoYXJn
MikpCisjZW5kaWYKKworI2RlZmluZSB1SFogMTAwMAorCisvKiBTZWUgdXNlcl9pbmNsdWRlL3Vz
ZXJfZW52aXJvbm1lbnQuaCBmb3IgY29tbWVudHMgYWJvdXQgdGhlc2UgdmFyaWFibGVzICovCitp
bnQgbWF4c29ja2V0cyA9IDI1NjAwOworaW50IGh6ID0gdUhaOworaW50IGlwX2RlZnR0bCA9IDY0
OworaW50IGlwcG9ydF9maXJzdGF1dG8gPSA0OTE1MiwgaXBwb3J0X2xhc3RhdXRvID0gNjU1MzU7
CitpbnQgbm1iY2x1c3RlcnMgPSA2NTUzNjsKKworLyogU291cmNlIGlwX291dHB1dC5jLiBleHRl
cm4nZCBpbiBpcF92YXIuaCAqLwordV9zaG9ydCBpcF9pZCA9IDA7IC8qX19Vc2Vyc3BhY2VfXyBU
T0RPIFNob3VsZCBpdCBiZSBpbml0aWFsaXplZCB0byB6ZXJvPyAqLworCisvKiB1c2VkIGluIHVz
ZXJfaW5jbHVkZS91c2VyX2F0b21pYy5oIGluIG9yZGVyIHRvIG1ha2UgdGhlIG9wZXJhdGlvbnMK
KyAqIGRlZmluZWQgdGhlcmUgdHJ1bHkgYXRvbWljCisgKi8KK3VzZXJsYW5kX211dGV4X3QgYXRv
bWljX210eDsKKworLyogSWYgdGhlIGVudHJvcHkgZGV2aWNlIGlzIG5vdCBsb2FkZWQsIG1ha2Ug
YSB0b2tlbiBlZmZvcnQgdG8KKyAqIHByb3ZpZGUgX3NvbWVfIGtpbmQgb2YgcmFuZG9tbmVzcy4g
VGhpcyBzaG91bGQgb25seSBiZSB1c2VkCisgKiBpbnNpZGUgb3RoZXIgUk5HJ3MsIGxpa2UgYXJj
NHJhbmRvbSg5KS4KKyAqLworI2lmIGRlZmluZWQoRlVaWklOR19CVUlMRF9NT0RFX1VOU0FGRV9G
T1JfUFJPRFVDVElPTikKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwordm9pZAoraW5pdF9yYW5kb20o
dm9pZCkKK3sKKwlyZXR1cm47Cit9CisKK3ZvaWQKK3JlYWRfcmFuZG9tKHZvaWQgKmJ1Ziwgc2l6
ZV90IHNpemUpCit7CisJbWVtc2V0KGJ1ZiwgJ0EnLCBzaXplKTsKKwlyZXR1cm47Cit9CisKK3Zv
aWQKK2ZpbmlzaF9yYW5kb20odm9pZCkKK3sKKwlyZXR1cm47Cit9CisvKiBUaGlzIGRlZmluZSBj
YW4gYmUgdXNlZCB0byBvcHRpb25hbGx5IHVzZSBPcGVuU1NMJ3MgcmFuZG9tIG51bWJlciB1dGls
aXR5LAorICogd2hpY2ggaXMgY2FwYWJsZSBvZiBieXBhc3NpbmcgdGhlIGNocm9taXVtIHNhbmRi
b3ggd2hpY2ggbm9ybWFsbHkgd291bGQKKyAqIHByZXZlbnQgb3BlbmluZyBmaWxlcywgaW5jbHVk
aW5nIC9kZXYvdXJhbmRvbS4KKyAqLworI2VsaWYgZGVmaW5lZChTQ1RQX1VTRV9PUEVOU1NMX1JB
TkQpCisjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisKKy8qIFJlcXVpcmluZyBCb3JpbmdTU0wg
YmVjYXVzZSBpdCBndWFyYW50ZWVzIHRoYXQgUkFORF9ieXRlcyB3aWxsIHN1Y2NlZWQuICovCisj
aWZuZGVmIE9QRU5TU0xfSVNfQk9SSU5HU1NMCisjZXJyb3IgT25seSBCb3JpbmdTU0wgaXMgc3Vw
cG9ydGVkIHdpdGggU0NUUF9VU0VfT1BFTlNTTF9SQU5ELgorI2VuZGlmCisKK3ZvaWQKK2luaXRf
cmFuZG9tKHZvaWQpCit7CisJcmV0dXJuOworfQorCit2b2lkCityZWFkX3JhbmRvbSh2b2lkICpi
dWYsIHNpemVfdCBzaXplKQoreworCVJBTkRfYnl0ZXMoKHVpbnQ4X3QgKilidWYsIHNpemUpOwor
CXJldHVybjsKK30KKwordm9pZAorZmluaXNoX3JhbmRvbSh2b2lkKQoreworCXJldHVybjsKK30K
KyNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19EcmFnb25GbHlfXykgfHwg
ZGVmaW5lZChfX09wZW5CU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9f
QVBQTEVfXykgfHwgZGVmaW5lZChfX0JpdHJpZ19fKQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCit2
b2lkCitpbml0X3JhbmRvbSh2b2lkKQoreworCXJldHVybjsKK30KKwordm9pZAorcmVhZF9yYW5k
b20odm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlhcmM0cmFuZG9tX2J1ZihidWYsIHNpemUp
OworCXJldHVybjsKK30KKwordm9pZAorZmluaXNoX3JhbmRvbSh2b2lkKQoreworCXJldHVybjsK
K30KKyNlbGlmIGRlZmluZWQoX1dJTjMyKQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCit2b2lkCitp
bml0X3JhbmRvbSh2b2lkKQoreworCXJldHVybjsKK30KKwordm9pZAorcmVhZF9yYW5kb20odm9p
ZCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgcmFuZHZhbDsKKwlzaXplX3Qg
cG9zaXRpb24sIHJlbWFpbmluZzsKKworCXBvc2l0aW9uID0gMDsKKwl3aGlsZSAocG9zaXRpb24g
PCBzaXplKSB7CisJCWlmIChyYW5kX3MoJnJhbmR2YWwpID09IDApIHsKKwkJCXJlbWFpbmluZyA9
IE1JTihzaXplIC0gcG9zaXRpb24sIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKKwkJCW1lbWNweSgo
Y2hhciAqKWJ1ZiArIHBvc2l0aW9uLCAmcmFuZHZhbCwgcmVtYWluaW5nKTsKKwkJCXBvc2l0aW9u
ICs9IHNpemVvZih1bnNpZ25lZCBpbnQpOworCQl9CisJfQorCXJldHVybjsKK30KKwordm9pZAor
ZmluaXNoX3JhbmRvbSh2b2lkKQoreworCXJldHVybjsKK30KKyNlbGlmIChkZWZpbmVkKF9fQU5E
Uk9JRF9fKSAmJiAoX19BTkRST0lEX0FQSV9fIDwgMjgpKSB8fCBkZWZpbmVkKF9fRU1TQ1JJUFRF
Tl9fKQorI2luY2x1ZGUgPGZjbnRsLmg+CisKK3N0YXRpYyBpbnQgZmQgPSAtMTsKKwordm9pZAor
aW5pdF9yYW5kb20odm9pZCkKK3sKKwlmZCA9IG9wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZ
KTsKKwlyZXR1cm47Cit9CisKK3ZvaWQKK3JlYWRfcmFuZG9tKHZvaWQgKmJ1Ziwgc2l6ZV90IHNp
emUpCit7CisJc2l6ZV90IHBvc2l0aW9uOworCXNzaXplX3QgbjsKKworCXBvc2l0aW9uID0gMDsK
Kwl3aGlsZSAocG9zaXRpb24gPCBzaXplKSB7CisJCW4gPSByZWFkKGZkLCAoY2hhciAqKWJ1ZiAr
IHBvc2l0aW9uLCBzaXplIC0gcG9zaXRpb24pOworCQlpZiAobiA+IDApIHsKKwkJCXBvc2l0aW9u
ICs9IG47CisJCX0KKwl9CisJcmV0dXJuOworfQorCit2b2lkCitmaW5pc2hfcmFuZG9tKHZvaWQp
Cit7CisJY2xvc2UoZmQpOworCXJldHVybjsKK30KKyNlbGlmIGRlZmluZWQoX19BTkRST0lEX18p
ICYmIChfX0FORFJPSURfQVBJX18gPj0gMjgpCisjaW5jbHVkZSA8c3lzL3JhbmRvbS5oPgorCit2
b2lkCitpbml0X3JhbmRvbSh2b2lkKQoreworCXJldHVybjsKK30KKwordm9pZAorcmVhZF9yYW5k
b20odm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzaXplX3QgcG9zaXRpb247CisJc3NpemVf
dCBuOworCisJcG9zaXRpb24gPSAwOworCXdoaWxlIChwb3NpdGlvbiA8IHNpemUpIHsKKwkJbiA9
IGdldHJhbmRvbSgoY2hhciAqKWJ1ZiArIHBvc2l0aW9uLCBzaXplIC0gcG9zaXRpb24sIDApOwor
CQlpZiAobiA+IDApIHsKKwkJCXBvc2l0aW9uICs9IG47CisJCX0KKwl9CisJcmV0dXJuOworfQor
Cit2b2lkCitmaW5pc2hfcmFuZG9tKHZvaWQpCit7CisJcmV0dXJuOworfQorI2VsaWYgZGVmaW5l
ZChfX2xpbnV4X18pCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNp
bmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorCisjaWYgZGVmaW5lZChfX2hhc19mZWF0dXJlKQorI2lm
IF9faGFzX2ZlYXR1cmUobWVtb3J5X3Nhbml0aXplcikKK3ZvaWQgX19tc2FuX3VucG9pc29uKHZv
aWQgKiwgc2l6ZV90KTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX05SX2dldHJhbmRvbQor
I2lmICFkZWZpbmVkKEdSTkRfTk9OQkxPQ0spCisjZGVmaW5lIEdSTkRfTk9OQkxPQ0sgMQorI2Vu
ZGlmCitzdGF0aWMgaW50IGdldHJhbmRvbV9hdmFpbGFibGUgPSAwOworI2VuZGlmCitzdGF0aWMg
aW50IGZkID0gLTE7CisKK3ZvaWQKK2luaXRfcmFuZG9tKHZvaWQpCit7CisjaWZkZWYgX19OUl9n
ZXRyYW5kb20KKwljaGFyIGR1bW15OworCXNzaXplX3QgbiA9IHN5c2NhbGwoX19OUl9nZXRyYW5k
b20sICZkdW1teSwgc2l6ZW9mKGR1bW15KSwgR1JORF9OT05CTE9DSyk7CisJaWYgKG4gPiAwIHx8
IGVycm5vID09IEVJTlRSIHx8IGVycm5vID09IEVBR0FJTikgeworCQkvKiBFaXRoZXIgZ2V0cmFu
ZG9tIHN1Y2NlZWRlZCwgd2FzIGludGVycnVwdGVkIG9yIGlzIHdhaXRpbmcgZm9yIGVudHJvcHk7
CisJCSAqIGFsbCBvZiB3aGljaCBtZWFuIHRoZSBzeXNjYWxsIGlzIGF2YWlsYWJsZS4KKwkJICov
CisJCWdldHJhbmRvbV9hdmFpbGFibGUgPSAxOworCX0gZWxzZSB7CisjaWZkZWYgSU5WQVJJQU5U
UworCQlpZiAoZXJybm8gIT0gRU5PU1lTKSB7CisJCQlwYW5pYygiZ2V0cmFuZG9tIHN5c2NhbGwg
cmV0dXJuZWQgdW5leHBlY3RlZCBlcnJvcjogJWQiLCBlcnJubyk7CisJCX0KKyNlbmRpZgorCQkv
KiBJZiB0aGUgc3lzY2FsbCBpc24ndCBhdmFpbGFibGUsIGZhbGwgYmFjayB0byAvZGV2L3VyYW5k
b20uICovCisjZW5kaWYKKwkJZmQgPSBvcGVuKCIvZGV2L3VyYW5kb20iLCBPX1JET05MWSk7Cisj
aWZkZWYgX19OUl9nZXRyYW5kb20KKwl9CisjZW5kaWYKKwlyZXR1cm47Cit9CisKK3ZvaWQKK3Jl
YWRfcmFuZG9tKHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc2l6ZV90IHBvc2l0aW9uOwor
CXNzaXplX3QgbjsKKworCXBvc2l0aW9uID0gMDsKKwl3aGlsZSAocG9zaXRpb24gPCBzaXplKSB7
CisjaWZkZWYgX19OUl9nZXRyYW5kb20KKwkJaWYgKGdldHJhbmRvbV9hdmFpbGFibGUpIHsKKwkJ
CS8qIFVzaW5nIHN5c2NhbGwgZGlyZWN0bHkgYmVjYXVzZSBnZXRyYW5kb20gaXNuJ3QgcHJlc2Vu
dCBpbiBnbGliYyA8IDIuMjUuCisJCQkgKi8KKwkJCW4gPSBzeXNjYWxsKF9fTlJfZ2V0cmFuZG9t
LCAoY2hhciAqKWJ1ZiArIHBvc2l0aW9uLCBzaXplIC0gcG9zaXRpb24sIDApOworCQkJaWYgKG4g
PiAwKSB7CisjaWYgZGVmaW5lZChfX2hhc19mZWF0dXJlKQorI2lmIF9faGFzX2ZlYXR1cmUobWVt
b3J5X3Nhbml0aXplcikKKwkJCQkvKiBOZWVkIHRvIGRvIHRoaXMgYmVjYXVzZSBNU2FuIGRvZXNu
J3QgcmVhbGl6ZSB0aGF0IHN5c2NhbGwgaGFzCisJCQkJICogaW5pdGlhbGl6ZWQgdGhlIG91dHB1
dCBidWZmZXIuCisJCQkJICovCisJCQkJX19tc2FuX3VucG9pc29uKGJ1ZiArIHBvc2l0aW9uLCBu
KTsKKyNlbmRpZgorI2VuZGlmCisJCQkJcG9zaXRpb24gKz0gbjsKKwkJCX0gZWxzZSBpZiAoZXJy
bm8gIT0gRUlOVFIgJiYgZXJybm8gIT0gRUFHQUlOKSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQkJ
CXBhbmljKCJnZXRyYW5kb20gc3lzY2FsbCByZXR1cm5lZCB1bmV4cGVjdGVkIGVycm9yOiAlZCIs
IGVycm5vKTsKKyNlbmRpZgorCQkJfQorCQl9IGVsc2UKKyNlbmRpZiAvKiBfX05SX2dldHJhbmRv
bSAqLworCQl7CisJCQluID0gcmVhZChmZCwgKGNoYXIgKilidWYgKyBwb3NpdGlvbiwgc2l6ZSAt
IHBvc2l0aW9uKTsKKwkJCWlmIChuID4gMCkgeworCQkJCXBvc2l0aW9uICs9IG47CisJCQl9CisJ
CX0KKwl9CisJcmV0dXJuOworfQorCit2b2lkCitmaW5pc2hfcmFuZG9tKHZvaWQpCit7CisJaWYg
KGZkICE9IC0xKSB7CisJCWNsb3NlKGZkKTsKKwl9CisJcmV0dXJuOworfQorI2VsaWYgZGVmaW5l
ZChfX0Z1Y2hzaWFfXykKKyNpbmNsdWRlIDx6aXJjb24vc3lzY2FsbHMuaD4KKwordm9pZAoraW5p
dF9yYW5kb20odm9pZCkKK3sKKwlyZXR1cm47Cit9CisKK3ZvaWQKK3JlYWRfcmFuZG9tKHZvaWQg
KmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJenhfY3BybmdfZHJhdyhidWYsIHNpemUpOworCXJldHVy
bjsKK30KKwordm9pZAorZmluaXNoX3JhbmRvbSh2b2lkKQoreworCXJldHVybjsKK30KKyNlbGlm
IGRlZmluZWQoX19uYXRpdmVfY2xpZW50X18pCisjaW5jbHVkZSA8bmFjbC9uYWNsX3JhbmRvbS5o
PgorCit2b2lkCitpbml0X3JhbmRvbSh2b2lkKQoreworCXJldHVybjsKK30KKwordm9pZAorcmVh
ZF9yYW5kb20odm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzaXplX3QgcG9zaXRpb247CisJ
c2l6ZV90IG47CisKKwlwb3NpdGlvbiA9IDA7CisJd2hpbGUgKHBvc2l0aW9uIDwgc2l6ZSkgewor
CQlpZiAobmFjbF9zZWN1cmVfcmFuZG9tKChjaGFyICopYnVmICsgcG9zaXRpb24sIHNpemUgLSBw
b3NpdGlvbiwgJm4pID09IDApCisJCQlwb3NpdGlvbiArPSBuOworCQl9CisJfQorCXJldHVybjsK
K30KKwordm9pZAorZmluaXNoX3JhbmRvbSh2b2lkKQoreworCXJldHVybjsKK30KKyNlbHNlCisj
ZXJyb3IgIlVua25vd24gcGxhdGZvcm0uIFBsZWFzZSBwcm92aWRlIHBsYXRmb3JtIHNwZWNpZmlj
IFJORy4iCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9lbnZp
cm9ubWVudC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2Vudmlyb25tZW50LmgKbmV3IGZp
bGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwLi5hNTQ1YWNjYmEwNzkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfZW52aXJvbm1lbnQuaApAQCAtMCww
ICsxLDEyMyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBCcmFkIFBlbm9mZgor
ICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgSHVtYWlyYSBLYW1hbAorICogQ29weXJpZ2h0IChj
KSAyMDExLTIwMTIgSXJlbmUgUnVlbmdlbGVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMiBN
aWNoYWVsIFR1ZXhlbgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor
ICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBf
VVNFUl9FTlZJUk9OTUVOVF9IXworI2RlZmluZSBfVVNFUl9FTlZJUk9OTUVOVF9IXworLyogX19V
c2Vyc3BhY2VfXyAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaWZkZWYgX19GcmVlQlNE
X18KKyNpZm5kZWYgX1NZU19NVVRFWF9IXworI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorI2VuZGlm
CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyNpbmNsdWRlICJuZXRpbmV0L3NjdHBfb3Nf
dXNlcnNwYWNlLmgiCisjZW5kaWYKKworLyogbWF4c29ja2V0cyBpcyB1c2VkIGluIFNDVFBfWk9O
RV9JTklUIGNhbGwuIEl0IHJlZmVycyB0bworICoga2Vybi5pcGMubWF4c29ja2V0cyBrZXJuZWwg
ZW52aXJvbm1lbnQgdmFyaWFibGUuCisgKi8KK2V4dGVybiBpbnQgbWF4c29ja2V0czsKKworLyog
aW50IGh6OyBpcyBkZWNsYXJlZCBpbiBzeXMva2Vybi9zdWJyX3BhcmFtLmMgYW5kIHJlZmVycyB0
byBrZXJuZWwgdGltZXIgZnJlcXVlbmN5LgorICogU2VlIGh0dHA6Ly9pdm9yYXMuc2hhcmFuZXQu
b3JnL2ZyZWVic2Qvdm13YXJlLmh0bWwgZm9yIGFkZGl0aW9uYWwgaW5mbyBhYm91dCBrZXJuLmh6
CisgKiBoeiBpcyBpbml0aWFsaXplZCBpbiB2b2lkIGluaXRfcGFyYW0xKHZvaWQpIGluIHRoYXQg
ZmlsZS4KKyAqLworZXh0ZXJuIGludCBoejsKKworCisvKiBUaGUgZm9sbG93aW5nIHR3byBpbnRz
IGRlZmluZSBhIHJhbmdlIG9mIGF2YWlsYWJsZSBlcGhlbWVyYWwgcG9ydHMuICovCitleHRlcm4g
aW50IGlwcG9ydF9maXJzdGF1dG8sIGlwcG9ydF9sYXN0YXV0bzsKKworLyogbm1iY2x1c3RlcnMg
aXMgdXNlZCBpbiBzY3RwX3VzcnJlcS5jIChlLmcuLCBzY3RwX2luaXQpLiBJbiB0aGUgRnJlZUJT
RCBrZXJuZWwsCisgKiAgdGhpcyBpcyAxMDI0ICsgbWF4dXNlcnMgKiA2NC4KKyAqLworZXh0ZXJu
IGludCBubWJjbHVzdGVyczsKKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChf
X01JTkdXMzJfXykKKyNkZWZpbmUgbWluKGEsYikgKCgoYSk+KGIpKT8oYik6KGEpKQorI2RlZmlu
ZSBtYXgoYSxiKSAoKChhKT4oYikpPyhhKTooYikpCisjZW5kaWYKKwordm9pZCBpbml0X3JhbmRv
bSh2b2lkKTsKK3ZvaWQgcmVhZF9yYW5kb20odm9pZCAqLCBzaXplX3QpOwordm9pZCBmaW5pc2hf
cmFuZG9tKHZvaWQpOworCisvKiBlcnJubydzIG1heSBkaWZmZXIgcGVyIE9TLiAgZXJybm8uaCBu
b3cgaW5jbHVkZWQgaW4gc2N0cF9vc191c2Vyc3BhY2UuaCAqLworLyogU291cmNlOiAvdXNyL3Ny
Yy9zeXMvc3lzL2Vycm5vLmggKi8KKy8qICNkZWZpbmUJRU5PU1BDCQkyOCAqLwkJLyogTm8gc3Bh
Y2UgbGVmdCBvbiBkZXZpY2UgKi8KKy8qICNkZWZpbmUJRU5PQlVGUwkJNTUgKi8JCS8qIE5vIGJ1
ZmZlciBzcGFjZSBhdmFpbGFibGUgKi8KKy8qICNkZWZpbmUJRU5PTUVNCQkxMiAqLwkJLyogQ2Fu
bm90IGFsbG9jYXRlIG1lbW9yeSAqLworLyogI2RlZmluZQlFQUNDRVMJCTEzICovCQkvKiBQZXJt
aXNzaW9uIGRlbmllZCAqLworLyogI2RlZmluZQlFRkFVTFQJCTE0ICovCQkvKiBCYWQgYWRkcmVz
cyAqLworLyogI2RlZmluZQlFSE9TVERPV04JNjQgKi8JCS8qIEhvc3QgaXMgZG93biAqLworLyog
I2RlZmluZQlFSE9TVFVOUkVBQ0gJNjUgKi8JCS8qIE5vIHJvdXRlIHRvIGhvc3QgKi8KKworLyog
U291cmNlIGlwX291dHB1dC5jLiBleHRlcm4nZCBpbiBpcF92YXIuaCAqLworZXh0ZXJuIHVfc2hv
cnQgaXBfaWQ7CisKKyNpZiBkZWZpbmVkKF9fbGludXhfXykKKyNkZWZpbmUgSVBWNl9WRVJTSU9O
ICAgICAgICAgICAgMHg2MAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKElOVkFSSUFOVFMpCisjaW5j
bHVkZSA8c3RkbGliLmg+CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKK3N0YXRpYyBpbmxpbmUgdm9p
ZCBfX2RlY2xzcGVjKG5vcmV0dXJuKQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2F0dHJp
YnV0ZV9fKChfX25vcmV0dXJuX18pKQorI2VuZGlmCit0ZXJtaW5hdGVfbm9uX2dyYWNlZnVsKHZv
aWQpIHsKKwlhYm9ydCgpOworfQorCisjZGVmaW5lIHBhbmljKC4uLikgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorCQlTQ1RQX1BSSU5URigiJXMoKTogIiwgX19mdW5jX18pOyAgICBcCisJCVND
VFBfUFJJTlRGKF9fVkFfQVJHU19fKTsgICAgICAgICAgIFwKKwkJU0NUUF9QUklOVEYoIlxuIik7
ICAgICAgICAgICAgICAgICAgXAorCQl0ZXJtaW5hdGVfbm9uX2dyYWNlZnVsKCk7ICAgICAgICAg
ICBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIEtBU1NFUlQoY29uZCwgYXJncykgICAgICAgICAg
XAorCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlpZiAoIShjb25kKSkgeyAgICAg
ICBcCisJCQlwYW5pYyBhcmdzIDsgXAorCQl9ICAgICAgICAgICAgICAgICAgICBcCisJfSB3aGls
ZSAoMCkKKyNlbHNlCisjZGVmaW5lIEtBU1NFUlQoY29uZCwgYXJncykKKyNlbmRpZgorCisvKiBu
ZWNlc3NhcnkgZm9yIHNjdHBfcGNiLmMgKi8KK2V4dGVybiBpbnQgaXBfZGVmdHRsOworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfaW5wY2IuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3VzcnNjdHBsaWIvdXNlcl9pbnBjYi5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAw
MDAwMDAwMC4uMmU2ZTkzMzRlYTViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0
cGxpYi91c2VyX2lucGNiLmgKQEAgLTAsMCArMSwzNzMgQEAKKy8qLQorICogQ29weXJpZ2h0IChj
KSAxOTgyLCAxOTg2LCAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0
eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5l
aXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29u
dHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICog
U1VDSCBEQU1BR0UuCisgKgorICoJQCgjKWluX3BjYi5oCTguMSAoQmVya2VsZXkpIDYvMTAvOTMK
KyAqICRGcmVlQlNEOiBzcmMvc3lzL25ldGluZXQvaW5fcGNiLmgsdiAxLjEwMC4yLjEgMjAwNy8x
Mi8wNyAwNTo0NjowOCBrbWFjeSBFeHAgJAorICovCisKKyNpZm5kZWYgX1VTRVJfSU5QQ0JfSF8K
KyNkZWZpbmUgX1VTRVJfSU5QQ0JfSF8KKworI2luY2x1ZGUgPHVzZXJfcm91dGUuaD4gLyogd2Fz
IDxuZXQvcm91dGUuaD4gKi8KKworc3RydWN0IGlucGNicG9saWN5OworCisvKgorICogU3RydWN0
IGlucGNiIGlzIHRoZSBvbW1vbiBzdHJ1Y3R1cmUgcGNiIGZvciB0aGUgSW50ZXJuZXQgUHJvdG9j
b2wKKyAqIGltcGxlbWVudGF0aW9uLgorICoKKyAqIFBvaW50ZXJzIHRvIGxvY2FsIGFuZCBmb3Jl
aWduIGhvc3QgdGFibGUgZW50cmllcywgbG9jYWwgYW5kIGZvcmVpZ24gc29ja2V0CisgKiBudW1i
ZXJzLCBhbmQgcG9pbnRlcnMgdXAgKHRvIGEgc29ja2V0IHN0cnVjdHVyZSkgYW5kIGRvd24gKHRv
IGEKKyAqIHByb3RvY29sLXNwZWNpZmljIGNvbnRyb2wgYmxvY2spIGFyZSBzdG9yZWQgaGVyZS4K
KyAqLworTElTVF9IRUFEKGlucGNiaGVhZCwgaW5wY2IpOworTElTVF9IRUFEKGlucGNicG9ydGhl
YWQsIGlucGNicG9ydCk7CisKKy8qCisgKiBQQ0Igd2l0aCBBRl9JTkVUNiBudWxsIGJpbmQnZWQg
bGFkZHIgY2FuIHJlY2VpdmUgQUZfSU5FVCBpbnB1dCBwYWNrZXQuCisgKiBTbywgQUZfSU5FVDYg
bnVsbCBsYWRkciBpcyBhbHNvIHVzZWQgYXMgQUZfSU5FVCBudWxsIGxhZGRyLCBieSB1dGlsaXpp
bmcKKyAqIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgaW5fYWRkcl80aW42
IHsKKwl1aW50MzJfdAlpYTQ2X3BhZDMyWzNdOworCXN0cnVjdAlpbl9hZGRyCWlhNDZfYWRkcjQ7
Cit9OworCisvKgorICogTk9URTogaXB2NiBhZGRycyBzaG91bGQgYmUgNjQtYml0IGFsaWduZWQs
IHBlciBSRkMgMjU1My4gIGluX2Nvbm5pbmZvIGhhcworICogc29tZSBleHRyYSBwYWRkaW5nIHRv
IGFjY29tcGxpc2ggdGhpcy4KKyAqLworc3RydWN0IGluX2VuZHBvaW50cyB7CisJdWludDE2X3QJ
aWVfZnBvcnQ7CQkvKiBmb3JlaWduIHBvcnQgKi8KKwl1aW50MTZfdAlpZV9scG9ydDsJCS8qIGxv
Y2FsIHBvcnQgKi8KKwkvKiBwcm90b2NvbCBkZXBlbmRlbnQgcGFydCwgbG9jYWwgYW5kIGZvcmVp
Z24gYWRkciAqLworCXVuaW9uIHsKKwkJLyogZm9yZWlnbiBob3N0IHRhYmxlIGVudHJ5ICovCisJ
CXN0cnVjdAlpbl9hZGRyXzRpbjYgaWU0Nl9mb3JlaWduOworCQlzdHJ1Y3QJaW42X2FkZHIgaWU2
X2ZvcmVpZ247CisJfSBpZV9kZXBlbmRmYWRkcjsKKwl1bmlvbiB7CisJCS8qIGxvY2FsIGhvc3Qg
dGFibGUgZW50cnkgKi8KKwkJc3RydWN0CWluX2FkZHJfNGluNiBpZTQ2X2xvY2FsOworCQlzdHJ1
Y3QJaW42X2FkZHIgaWU2X2xvY2FsOworCX0gaWVfZGVwZW5kbGFkZHI7CisjZGVmaW5lCWllX2Zh
ZGRyCWllX2RlcGVuZGZhZGRyLmllNDZfZm9yZWlnbi5pYTQ2X2FkZHI0CisjZGVmaW5lCWllX2xh
ZGRyCWllX2RlcGVuZGxhZGRyLmllNDZfbG9jYWwuaWE0Nl9hZGRyNAorI2RlZmluZQlpZTZfZmFk
ZHIJaWVfZGVwZW5kZmFkZHIuaWU2X2ZvcmVpZ24KKyNkZWZpbmUJaWU2X2xhZGRyCWllX2RlcGVu
ZGxhZGRyLmllNl9sb2NhbAorfTsKKworLyoKKyAqIFhYWCBUaGUgZGVmaW5lcyBmb3IgaW5jXyog
YXJlIGhhY2tzIGFuZCBzaG91bGQgYmUgY2hhbmdlZCB0byBkaXJlY3QKKyAqIHJlZmVyZW5jZXMu
CisgKi8KK3N0cnVjdCBpbl9jb25uaW5mbyB7CisJdWludDhfdAlpbmNfZmxhZ3M7CisJdWludDhf
dAlpbmNfbGVuOworCXVpbnQxNl90CWluY19wYWQ7CS8qIFhYWCBhbGlnbm1lbnQgZm9yIGluX2Vu
ZHBvaW50cyAqLworCS8qIHByb3RvY29sIGRlcGVuZGVudCBwYXJ0ICovCisJc3RydWN0CWluX2Vu
ZHBvaW50cyBpbmNfaWU7Cit9OworI2RlZmluZSBpbmNfaXNpcHY2CWluY19mbGFncwkvKiB0ZW1w
IGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUJaW5jX2Zwb3J0CWluY19pZS5pZV9mcG9ydAorI2Rl
ZmluZQlpbmNfbHBvcnQJaW5jX2llLmllX2xwb3J0CisjZGVmaW5lCWluY19mYWRkcglpbmNfaWUu
aWVfZmFkZHIKKyNkZWZpbmUJaW5jX2xhZGRyCWluY19pZS5pZV9sYWRkcgorI2RlZmluZQlpbmM2
X2ZhZGRyCWluY19pZS5pZTZfZmFkZHIKKyNkZWZpbmUJaW5jNl9sYWRkcglpbmNfaWUuaWU2X2xh
ZGRyCisKK3N0cnVjdAlpY21wNl9maWx0ZXI7CisKK3N0cnVjdCBpbnBjYiB7CisJTElTVF9FTlRS
WShpbnBjYikgaW5wX2hhc2g7CS8qIGhhc2ggbGlzdCAqLworCUxJU1RfRU5UUlkoaW5wY2IpIGlu
cF9saXN0OwkvKiBsaXN0IGZvciBhbGwgUENCcyBvZiB0aGlzIHByb3RvICovCisJdm9pZAkqaW5w
X3BwY2I7CQkvKiBwb2ludGVyIHRvIHBlci1wcm90b2NvbCBwY2IgKi8KKwlzdHJ1Y3QJaW5wY2Jp
bmZvICppbnBfcGNiaW5mbzsJLyogUENCIGxpc3QgaW5mbyAqLworCXN0cnVjdAlzb2NrZXQgKmlu
cF9zb2NrZXQ7CS8qIGJhY2sgcG9pbnRlciB0byBzb2NrZXQgKi8KKworCXVpbnQzMl90CWlucF9m
bG93OworCWludAlpbnBfZmxhZ3M7CQkvKiBnZW5lcmljIElQL2RhdGFncmFtIGZsYWdzICovCisK
Kwl1X2NoYXIJaW5wX3ZmbGFnOwkJLyogSVAgdmVyc2lvbiBmbGFnICh2NC92NikgKi8KKyNkZWZp
bmUJSU5QX0lQVjQJMHgxCisjZGVmaW5lCUlOUF9JUFY2CTB4MgorI2RlZmluZQlJTlBfSVBWNlBS
T1RPCTB4NAkJLyogb3BlbmVkIHVuZGVyIElQdjYgcHJvdG9jb2wgKi8KKyNkZWZpbmUJSU5QX1RJ
TUVXQUlUCTB4OAkJLyogLi4gcHJvYmFibHkgZG9lc24ndCBnbyBoZXJlICovCisjZGVmaW5lCUlO
UF9PTkVTQkNBU1QJMHgxMAkJLyogc2VuZCBhbGwtb25lcyBicm9hZGNhc3QgKi8KKyNkZWZpbmUJ
SU5QX0RST1BQRUQJMHgyMAkJLyogcHJvdG9jb2wgZHJvcCBmbGFnICovCisjZGVmaW5lCUlOUF9T
T0NLUkVGCTB4NDAJCS8qIHN0cm9uZyBzb2NrZXQgcmVmZXJlbmNlICovCisjZGVmaW5lIElOUF9D
T05OICAgICAgICAweDgwCisJdV9jaGFyCWlucF9pcF90dGw7CQkvKiB0aW1lIHRvIGxpdmUgcHJv
dG8gKi8KKwl1X2NoYXIJaW5wX2lwX3A7CQkvKiBwcm90b2NvbCBwcm90byAqLworCXVfY2hhcglp
bnBfaXBfbWludHRsOwkJLyogbWluaW11bSBUVEwgb3IgZHJvcCAqLworCXVpbnQzMl90IGlucF9p
c3BhcmUxOwkJLyogY29ubmVjdGlvbiBpZCAvIHF1ZXVlIGlkICovCisJdm9pZAkqaW5wX3BzcGFy
ZVsyXTsJCS8qIHJ0ZW50cnkgLyBnZW5lcmFsIHVzZSAqLworCisJLyogTG9jYWwgYW5kIGZvcmVp
Z24gcG9ydHMsIGxvY2FsIGFuZCBmb3JlaWduIGFkZHIuICovCisJc3RydWN0CWluX2Nvbm5pbmZv
IGlucF9pbmM7CisKKwkJCQkJLyogbGlzdCBmb3IgdGhpcyBQQ0IncyBsb2NhbCBwb3J0ICovCisJ
c3RydWN0CWxhYmVsICppbnBfbGFiZWw7CS8qIE1BQyBsYWJlbCAqLworCXN0cnVjdAlpbnBjYnBv
bGljeSAqaW5wX3NwOyAgICAvKiBmb3IgSVBTRUMgKi8KKworCS8qIFByb3RvY29sLWRlcGVuZGVu
dCBwYXJ0OyBvcHRpb25zLiAqLworCXN0cnVjdCB7CisJCXVfY2hhcglpbnA0X2lwX3RvczsJCS8q
IHR5cGUgb2Ygc2VydmljZSBwcm90byAqLworCQlzdHJ1Y3QJbWJ1ZiAqaW5wNF9vcHRpb25zOwkv
KiBJUCBvcHRpb25zICovCisJCXN0cnVjdAlpcF9tb3B0aW9ucyAqaW5wNF9tb3B0aW9uczsgLyog
SVAgbXVsdGljYXN0IG9wdGlvbnMgKi8KKwl9IGlucF9kZXBlbmQ0OworI2RlZmluZQlpbnBfZnBv
cnQJaW5wX2luYy5pbmNfZnBvcnQKKyNkZWZpbmUJaW5wX2xwb3J0CWlucF9pbmMuaW5jX2xwb3J0
CisjZGVmaW5lCWlucF9mYWRkcglpbnBfaW5jLmluY19mYWRkcgorI2RlZmluZQlpbnBfbGFkZHIJ
aW5wX2luYy5pbmNfbGFkZHIKKyNkZWZpbmUJaW5wX2lwX3RvcwlpbnBfZGVwZW5kNC5pbnA0X2lw
X3RvcworI2RlZmluZQlpbnBfb3B0aW9ucwlpbnBfZGVwZW5kNC5pbnA0X29wdGlvbnMKKyNkZWZp
bmUJaW5wX21vcHRpb25zCWlucF9kZXBlbmQ0LmlucDRfbW9wdGlvbnMKKwlzdHJ1Y3QgeworCQkv
KiBJUCBvcHRpb25zICovCisJCXN0cnVjdAltYnVmICppbnA2X29wdGlvbnM7CisJCS8qIElQNiBv
cHRpb25zIGZvciBvdXRnb2luZyBwYWNrZXRzICovCisJCXN0cnVjdAlpcDZfcGt0b3B0cyAqaW5w
Nl9vdXRwdXRvcHRzOworCQkvKiBJUCBtdWx0aWNhc3Qgb3B0aW9ucyAqLworI2lmIDAKKwkJc3Ry
dWN0CWlwNl9tb3B0aW9ucyAqaW5wNl9tb3B0aW9uczsKKyNlbmRpZgorCQkvKiBJQ01QdjYgY29k
ZSB0eXBlIGZpbHRlciAqLworCQlzdHJ1Y3QJaWNtcDZfZmlsdGVyICppbnA2X2ljbXA2ZmlsdDsK
KwkJLyogSVBWNl9DSEVDS1NVTSBzZXRzb2Nrb3B0ICovCisJCWludAlpbnA2X2Nrc3VtOworCQlz
aG9ydAlpbnA2X2hvcHM7CisJfSBpbnBfZGVwZW5kNjsKKwlMSVNUX0VOVFJZKGlucGNiKSBpbnBf
cG9ydGxpc3Q7CisJc3RydWN0CWlucGNicG9ydCAqaW5wX3BoZDsJLyogaGVhZCBvZiB0aGlzIGxp
c3QgKi8KKyNkZWZpbmUgaW5wX3plcm9fc2l6ZSBvZmZzZXRvZihzdHJ1Y3QgaW5wY2IsIGlucF9n
ZW5jbnQpCisJc3RydWN0IG10eAlpbnBfbXR4OworCisjZGVmaW5lCWluNnBfZmFkZHIJaW5wX2lu
Yy5pbmM2X2ZhZGRyCisjZGVmaW5lCWluNnBfbGFkZHIJaW5wX2luYy5pbmM2X2xhZGRyCisjZGVm
aW5lCWluNnBfaG9wcwlpbnBfZGVwZW5kNi5pbnA2X2hvcHMJLyogZGVmYXVsdCBob3AgbGltaXQg
Ki8KKyNkZWZpbmUJaW42cF9pcDZfbnh0CWlucF9pcF9wCisjZGVmaW5lCWluNnBfZmxvd2luZm8J
aW5wX2Zsb3cKKyNkZWZpbmUJaW42cF92ZmxhZwlpbnBfdmZsYWcKKyNkZWZpbmUJaW42cF9vcHRp
b25zCWlucF9kZXBlbmQ2LmlucDZfb3B0aW9ucworI2RlZmluZQlpbjZwX291dHB1dG9wdHMJaW5w
X2RlcGVuZDYuaW5wNl9vdXRwdXRvcHRzCisjaWYgMAorI2RlZmluZQlpbjZwX21vcHRpb25zCWlu
cF9kZXBlbmQ2LmlucDZfbW9wdGlvbnMKKyNlbmRpZgorI2RlZmluZQlpbjZwX2ljbXA2ZmlsdAlp
bnBfZGVwZW5kNi5pbnA2X2ljbXA2ZmlsdAorI2RlZmluZQlpbjZwX2Nrc3VtCWlucF9kZXBlbmQ2
LmlucDZfY2tzdW0KKyNkZWZpbmUJaW42cF9mbGFncwlpbnBfZmxhZ3MgIC8qIGZvciBLQU1FIHNy
YyBzeW5jIG92ZXIgQlNEKidzICovCisjZGVmaW5lCWluNnBfc29ja2V0CWlucF9zb2NrZXQgIC8q
IGZvciBLQU1FIHNyYyBzeW5jIG92ZXIgQlNEKidzICovCisjZGVmaW5lCWluNnBfbHBvcnQJaW5w
X2xwb3J0ICAvKiBmb3IgS0FNRSBzcmMgc3luYyBvdmVyIEJTRConcyAqLworI2RlZmluZQlpbjZw
X2Zwb3J0CWlucF9mcG9ydCAgLyogZm9yIEtBTUUgc3JjIHN5bmMgb3ZlciBCU0QqJ3MgKi8KKyNk
ZWZpbmUJaW42cF9wcGNiCWlucF9wcGNiICAvKiBmb3IgS0FNRSBzcmMgc3luYyBvdmVyIEJTRCon
cyAqLworfTsKKy8qCisgKiBUaGUgcmFuZ2Ugb2YgdGhlIGdlbmVyYXRpb24gY291bnQsIGFzIHVz
ZWQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwgaXMgOWUxOS4KKyAqIFdlIHdvdWxkIGhhdmUgdG8g
Y3JlYXRlIDMwMCBiaWxsaW9uIGNvbm5lY3Rpb25zIHBlciBzZWNvbmQgZm9yIHRoaXMgbnVtYmVy
CisgKiB0byByb2xsIG92ZXIgaW4gYSB5ZWFyLiAgVGhpcyBzZWVtcyBzdWZmaWNpZW50bHkgdW5s
aWtlbHkgdGhhdCB3ZSBzaW1wbHkKKyAqIGRvbid0IGNvbmNlcm4gb3Vyc2VsdmVzIHdpdGggdGhh
dCBwb3NzaWJpbGl0eS4KKyAqLworCitzdHJ1Y3QgaW5wY2Jwb3J0IHsKKwlMSVNUX0VOVFJZKGlu
cGNicG9ydCkgcGhkX2hhc2g7CisJc3RydWN0IGlucGNiaGVhZCBwaGRfcGNibGlzdDsKKwl1X3No
b3J0IHBoZF9wb3J0OworfTsKKworLyoKKyAqIEdsb2JhbCBkYXRhIHN0cnVjdHVyZSBmb3IgZWFj
aCBoaWdoLWxldmVsIHByb3RvY29sIChVRFAsIFRDUCwgLi4uKSBpbiBib3RoCisgKiBJUHY0IGFu
ZCBJUHY2LiAgSG9sZHMgaW5wY2IgbGlzdHMgYW5kIGluZm9ybWF0aW9uIGZvciBtYW5hZ2luZyB0
aGVtLgorICovCitzdHJ1Y3QgaW5wY2JpbmZvIHsKKwkvKgorCSAqIEdsb2JhbCBsaXN0IG9mIGlu
cGNicyBvbiB0aGUgcHJvdG9jb2wuCisJICovCisJc3RydWN0IGlucGNiaGVhZAkqaXBpX2xpc3Ro
ZWFkOworCXVfaW50CQkJIGlwaV9jb3VudDsKKworCS8qCisJICogR2xvYmFsIGhhc2ggb2YgaW5w
Y2JzLCBoYXNoZWQgYnkgbG9jYWwgYW5kIGZvcmVpZ24gYWRkcmVzc2VzIGFuZAorCSAqIHBvcnQg
bnVtYmVycy4KKwkgKi8KKwlzdHJ1Y3QgaW5wY2JoZWFkCSppcGlfaGFzaGJhc2U7CisJdV9sb25n
CQkJIGlwaV9oYXNobWFzazsKKworCS8qCisJICogR2xvYmFsIGhhc2ggb2YgaW5wY2JzLCBoYXNo
ZWQgYnkgb25seSBsb2NhbCBwb3J0IG51bWJlci4KKwkgKi8KKwlzdHJ1Y3QgaW5wY2Jwb3J0aGVh
ZAkqaXBpX3BvcnRoYXNoYmFzZTsKKwl1X2xvbmcJCQkgaXBpX3BvcnRoYXNobWFzazsKKworCS8q
CisJICogRmllbGRzIGFzc29jaWF0ZWQgd2l0aCBwb3J0IGxvb2t1cCBhbmQgYWxsb2NhdGlvbi4K
KwkgKi8KKwl1X3Nob3J0CQkJIGlwaV9sYXN0cG9ydDsKKwl1X3Nob3J0CQkJIGlwaV9sYXN0bG93
OworCXVfc2hvcnQJCQkgaXBpX2xhc3RoaTsKKworCS8qCisJICogVU1BIHpvbmUgZnJvbSB3aGlj
aCBpbnBjYnMgYXJlIGFsbG9jYXRlZCBmb3IgdGhpcyBwcm90b2NvbC4KKwkgKi8KKwlzdHJ1Y3QJ
dW1hX3pvbmUJKmlwaV96b25lOworCisJLyoKKwkgKiBHZW5lcmF0aW9uIGNvdW50LS1pbmNyZW1l
bnRlZCBlYWNoIHRpbWUgYSBjb25uZWN0aW9uIGlzIGFsbG9jYXRlZAorCSAqIG9yIGZyZWVkLgor
CSAqLworCXN0cnVjdCBtdHgJCSBpcGlfbXR4OworCisJLyoKKwkgKiB2aW1hZ2UgMQorCSAqIGdl
bmVyYWwgdXNlIDEKKwkgKi8KKwl2b2lkIAkJCSppcGlfcHNwYXJlWzJdOworfTsKKworI2RlZmlu
ZSBJTlBfTE9DS19JTklUKGlucCwgZCwgdCkgXAorCW10eF9pbml0KCYoaW5wKS0+aW5wX210eCwg
KGQpLCAodCksIE1UWF9ERUYgfCBNVFhfUkVDVVJTRSB8IE1UWF9EVVBPSykKKyNkZWZpbmUgSU5Q
X0xPQ0tfREVTVFJPWShpbnApCW10eF9kZXN0cm95KCYoaW5wKS0+aW5wX210eCkKKyNkZWZpbmUg
SU5QX0xPQ0soaW5wKQkJbXR4X2xvY2soJihpbnApLT5pbnBfbXR4KQorI2RlZmluZSBJTlBfVU5M
T0NLKGlucCkJCW10eF91bmxvY2soJihpbnApLT5pbnBfbXR4KQorI2RlZmluZSBJTlBfTE9DS19B
U1NFUlQoaW5wKQltdHhfYXNzZXJ0KCYoaW5wKS0+aW5wX210eCwgTUFfT1dORUQpCisjZGVmaW5l
CUlOUF9VTkxPQ0tfQVNTRVJUKGlucCkJbXR4X2Fzc2VydCgmKGlucCktPmlucF9tdHgsIE1BX05P
VE9XTkVEKQorCisjZGVmaW5lIElOUF9JTkZPX0xPQ0tfSU5JVChpcGksIGQpIFwKKwltdHhfaW5p
dCgmKGlwaSktPmlwaV9tdHgsIChkKSwgTlVMTCwgTVRYX0RFRiB8IE1UWF9SRUNVUlNFKQorI2Rl
ZmluZSBJTlBfSU5GT19MT0NLX0RFU1RST1koaXBpKSAgbXR4X2Rlc3Ryb3koJihpcGkpLT5pcGlf
bXR4KQorI2RlZmluZSBJTlBfSU5GT19STE9DSyhpcGkpCW10eF9sb2NrKCYoaXBpKS0+aXBpX210
eCkKKyNkZWZpbmUgSU5QX0lORk9fV0xPQ0soaXBpKQltdHhfbG9jaygmKGlwaSktPmlwaV9tdHgp
CisjZGVmaW5lIElOUF9JTkZPX1JVTkxPQ0soaXBpKQltdHhfdW5sb2NrKCYoaXBpKS0+aXBpX210
eCkKKyNkZWZpbmUgSU5QX0lORk9fV1VOTE9DSyhpcGkpCW10eF91bmxvY2soJihpcGkpLT5pcGlf
bXR4KQorI2RlZmluZSBJTlBfSU5GT19STE9DS19BU1NFUlQoaXBpKQltdHhfYXNzZXJ0KCYoaXBp
KS0+aXBpX210eCwgTUFfT1dORUQpCisjZGVmaW5lIElOUF9JTkZPX1dMT0NLX0FTU0VSVChpcGkp
CW10eF9hc3NlcnQoJihpcGkpLT5pcGlfbXR4LCBNQV9PV05FRCkKKyNkZWZpbmUgSU5QX0lORk9f
VU5MT0NLX0FTU0VSVChpcGkpCW10eF9hc3NlcnQoJihpcGkpLT5pcGlfbXR4LCBNQV9OT1RPV05F
RCkKKworI2RlZmluZSBJTlBfUENCSEFTSChmYWRkciwgbHBvcnQsIGZwb3J0LCBtYXNrKSBcCisJ
KCgoZmFkZHIpIF4gKChmYWRkcikgPj4gMTYpIF4gbnRvaHMoKGxwb3J0KSBeIChmcG9ydCkpKSAm
IChtYXNrKSkKKyNkZWZpbmUgSU5QX1BDQlBPUlRIQVNIKGxwb3J0LCBtYXNrKSBcCisJKG50b2hz
KChscG9ydCkpICYgKG1hc2spKQorCisvKiBmbGFncyBpbiBpbnBfZmxhZ3M6ICovCisjZGVmaW5l
CUlOUF9SRUNWT1BUUwkJMHgwMQkvKiByZWNlaXZlIGluY29taW5nIElQIG9wdGlvbnMgKi8KKyNk
ZWZpbmUJSU5QX1JFQ1ZSRVRPUFRTCQkweDAyCS8qIHJlY2VpdmUgSVAgb3B0aW9ucyBmb3IgcmVw
bHkgKi8KKyNkZWZpbmUJSU5QX1JFQ1ZEU1RBRERSCQkweDA0CS8qIHJlY2VpdmUgSVAgZHN0IGFk
ZHJlc3MgKi8KKyNkZWZpbmUJSU5QX0hEUklOQ0wJCTB4MDgJLyogdXNlciBzdXBwbGllcyBlbnRp
cmUgSVAgaGVhZGVyICovCisjZGVmaW5lCUlOUF9ISUdIUE9SVAkJMHgxMAkvKiB1c2VyIHdhbnRz
ICJoaWdoIiBwb3J0IGJpbmRpbmcgKi8KKyNkZWZpbmUJSU5QX0xPV1BPUlQJCTB4MjAJLyogdXNl
ciB3YW50cyAibG93IiBwb3J0IGJpbmRpbmcgKi8KKyNkZWZpbmUJSU5QX0FOT05QT1JUCQkweDQw
CS8qIHBvcnQgY2hvc2VuIGZvciB1c2VyICovCisjZGVmaW5lCUlOUF9SRUNWSUYJCTB4ODAJLyog
cmVjZWl2ZSBpbmNvbWluZyBpbnRlcmZhY2UgKi8KKyNkZWZpbmUJSU5QX01UVURJU0MJCTB4MTAw
CS8qIHVzZXIgY2FuIGRvIE1UVSBkaXNjb3ZlcnkgKi8KKyNkZWZpbmUJSU5QX0ZBSVRICQkweDIw
MAkvKiBhY2NlcHQgRkFJVEgnZWQgY29ubmVjdGlvbnMgKi8KKyNkZWZpbmUJSU5QX1JFQ1ZUVEwJ
CTB4NDAwCS8qIHJlY2VpdmUgaW5jb21pbmcgSVAgVFRMICovCisjZGVmaW5lCUlOUF9ET05URlJB
RwkJMHg4MDAJLyogZG9uJ3QgZnJhZ21lbnQgcGFja2V0ICovCisKKyNkZWZpbmUgSU42UF9JUFY2
X1Y2T05MWQkweDAwODAwMCAvKiByZXN0cmljdCBBRl9JTkVUNiBzb2NrZXQgZm9yIHY2ICovCisK
KyNkZWZpbmUJSU42UF9QS1RJTkZPCQkweDAxMDAwMCAvKiByZWNlaXZlIElQNiBkc3QgYW5kIEkv
RiAqLworI2RlZmluZQlJTjZQX0hPUExJTUlUCQkweDAyMDAwMCAvKiByZWNlaXZlIGhvcGxpbWl0
ICovCisjZGVmaW5lCUlONlBfSE9QT1BUUwkJMHgwNDAwMDAgLyogcmVjZWl2ZSBob3AtYnktaG9w
IG9wdGlvbnMgKi8KKyNkZWZpbmUJSU42UF9EU1RPUFRTCQkweDA4MDAwMCAvKiByZWNlaXZlIGRz
dCBvcHRpb25zIGFmdGVyIHJ0aGRyICovCisjZGVmaW5lCUlONlBfUlRIRFIJCTB4MTAwMDAwIC8q
IHJlY2VpdmUgcm91dGluZyBoZWFkZXIgKi8KKyNkZWZpbmUJSU42UF9SVEhEUkRTVE9QVFMJMHgy
MDAwMDAgLyogcmVjZWl2ZSBkc3RvcHRpb25zIGJlZm9yZSBydGhkciAqLworI2RlZmluZQlJTjZQ
X1RDTEFTUwkJMHg0MDAwMDAgLyogcmVjZWl2ZSB0cmFmZmljIGNsYXNzIHZhbHVlICovCisjZGVm
aW5lCUlONlBfQVVUT0ZMT1dMQUJFTAkweDgwMDAwMCAvKiBhdHRhY2ggZmxvd2xhYmVsIGF1dG9t
YXRpY2FsbHkgKi8KKyNkZWZpbmUJSU42UF9SRkMyMjkyCQkweDQwMDAwMDAwIC8qIHVzZWQgUkZD
MjI5MiBBUEkgb24gdGhlIHNvY2tldCAqLworI2RlZmluZQlJTjZQX01UVQkJMHg4MDAwMDAwMCAv
KiByZWNlaXZlIHBhdGggTVRVICovCisKKyNkZWZpbmUJSU5QX0NPTlRST0xPUFRTCQkoSU5QX1JF
Q1ZPUFRTfElOUF9SRUNWUkVUT1BUU3xJTlBfUkVDVkRTVEFERFJ8XAorCQkJCSBJTlBfUkVDVklG
fElOUF9SRUNWVFRMfFwKKwkJCQkgSU42UF9QS1RJTkZPfElONlBfSE9QTElNSVR8SU42UF9IT1BP
UFRTfFwKKwkJCQkgSU42UF9EU1RPUFRTfElONlBfUlRIRFJ8SU42UF9SVEhEUkRTVE9QVFN8XAor
CQkJCSBJTjZQX1RDTEFTU3xJTjZQX0FVVE9GTE9XTEFCRUx8SU42UF9SRkMyMjkyfFwKKwkJCQkg
SU42UF9NVFUpCisjZGVmaW5lCUlOUF9VTk1BUFBBQkxFT1BUUwkoSU42UF9IT1BPUFRTfElONlBf
RFNUT1BUU3xJTjZQX1JUSERSfFwKKwkJCQkgSU42UF9UQ0xBU1N8SU42UF9BVVRPRkxPV0xBQkVM
KQorCisgLyogZm9yIEtBTUUgc3JjIHN5bmMgb3ZlciBCU0QqJ3MgKi8KKyNkZWZpbmUJSU42UF9I
SUdIUE9SVAkJSU5QX0hJR0hQT1JUCisjZGVmaW5lCUlONlBfTE9XUE9SVAkJSU5QX0xPV1BPUlQK
KyNkZWZpbmUJSU42UF9BTk9OUE9SVAkJSU5QX0FOT05QT1JUCisjZGVmaW5lCUlONlBfUkVDVklG
CQlJTlBfUkVDVklGCisjZGVmaW5lCUlONlBfTVRVRElTQwkJSU5QX01UVURJU0MKKyNkZWZpbmUJ
SU42UF9GQUlUSAkJSU5QX0ZBSVRICisjZGVmaW5lCUlONlBfQ09OVFJPTE9QVFMgSU5QX0NPTlRS
T0xPUFRTCisJLyoKKwkgKiBzb2NrZXQgQUYgdmVyc2lvbiBpcyB7bmV3ZXIgdGhhbixvciBpbmNs
dWRlfQorCSAqIGFjdHVhbCBkYXRhZ3JhbSBBRiB2ZXJzaW9uCisJICovCisKKyNkZWZpbmUJSU5Q
TE9PS1VQX1dJTERDQVJECTEKKyNkZWZpbmUJc290b2lucGNiKHNvKQkoKHN0cnVjdCBpbnBjYiAq
KShzbyktPnNvX3BjYikKKworI2RlZmluZQlJTlBfU09DS0FGKHNvKSBzby0+c29fcHJvdG8tPnBy
X2RvbWFpbi0+ZG9tX2ZhbWlseQorCisjZGVmaW5lCUlOUF9DSEVDS19TT0NLQUYoc28sIGFmKQko
SU5QX1NPQ0tBRihzbykgPT0gYWYpCisKK2V4dGVybiBpbnQJaXBwb3J0X3Jlc2VydmVkaGlnaDsK
K2V4dGVybiBpbnQJaXBwb3J0X3Jlc2VydmVkbG93OworZXh0ZXJuIGludAlpcHBvcnRfbG93Zmly
c3RhdXRvOworZXh0ZXJuIGludAlpcHBvcnRfbG93bGFzdGF1dG87CitleHRlcm4gaW50CWlwcG9y
dF9maXJzdGF1dG87CitleHRlcm4gaW50CWlwcG9ydF9sYXN0YXV0bzsKK2V4dGVybiBpbnQJaXBw
b3J0X2hpZmlyc3RhdXRvOworZXh0ZXJuIGludAlpcHBvcnRfaGlsYXN0YXV0bzsKK2V4dGVybiBz
dHJ1Y3QgY2FsbG91dCBpcHBvcnRfdGlja19jYWxsb3V0OworCit2b2lkCWluX3BjYnB1cmdlaWYw
KHN0cnVjdCBpbnBjYmluZm8gKiwgc3RydWN0IGlmbmV0ICopOworaW50CWluX3BjYmFsbG9jKHN0
cnVjdCBzb2NrZXQgKiwgc3RydWN0IGlucGNiaW5mbyAqKTsKK2ludAlpbl9wY2JiaW5kKHN0cnVj
dCBpbnBjYiAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHVjcmVkICopOworaW50CWluX3Bj
YmNvbm5lY3Qoc3RydWN0IGlucGNiICosIHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3QgdWNyZWQg
Kik7Cit2b2lkCWluX3BjYmRldGFjaChzdHJ1Y3QgaW5wY2IgKik7Cit2b2lkCWluX3BjYmRpc2Nv
bm5lY3Qoc3RydWN0IGlucGNiICopOwordm9pZAlpbl9wY2Jkcm9wKHN0cnVjdCBpbnBjYiAqKTsK
K3ZvaWQJaW5fcGNiZnJlZShzdHJ1Y3QgaW5wY2IgKik7CitpbnQJaW5fcGNiaW5zaGFzaChzdHJ1
Y3QgaW5wY2IgKik7CitzdHJ1Y3QgaW5wY2IgKgorCWluX3BjYmxvb2t1cF9sb2NhbChzdHJ1Y3Qg
aW5wY2JpbmZvICosCisJICAgIHN0cnVjdCBpbl9hZGRyLCB1X2ludCwgaW50KTsKK3N0cnVjdCBp
bnBjYiAqCisJaW5fcGNibG9va3VwX2hhc2goc3RydWN0IGlucGNiaW5mbyAqLCBzdHJ1Y3QgaW5f
YWRkciwgdV9pbnQsCisJICAgIHN0cnVjdCBpbl9hZGRyLCB1X2ludCwgaW50LCBzdHJ1Y3QgaWZu
ZXQgKik7Cit2b2lkCWluX3BjYm5vdGlmeWFsbChzdHJ1Y3QgaW5wY2JpbmZvICpwY2JpbmZvLCBz
dHJ1Y3QgaW5fYWRkciwKKwkgICAgaW50LCBzdHJ1Y3QgaW5wY2IgKigqKShzdHJ1Y3QgaW5wY2Ig
KiwgaW50KSk7Cit2b2lkCWluX3BjYnJlaGFzaChzdHJ1Y3QgaW5wY2IgKik7Cit2b2lkCWluX3Bj
YnNldHNvbGFiZWwoc3RydWN0IHNvY2tldCAqc28pOworaW50CWluX2dldHBlZXJhZGRyKHN0cnVj
dCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKipuYW0pOworaW50CWluX2dldHNvY2thZGRy
KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKipuYW0pOwordm9pZAlpbl9wY2Jz
b3NldGxhYmVsKHN0cnVjdCBzb2NrZXQgKnNvKTsKK3ZvaWQJaW5fcGNicmVtbGlzdHMoc3RydWN0
IGlucGNiICppbnApOwordm9pZAlpcHBvcnRfdGljayh2b2lkICp4dHApOworCisvKgorICogRGVi
dWdnaW5nIHJvdXRpbmVzIGNvbXBpbGVkIGluIHdoZW4gRERCIGlzIHByZXNlbnQuCisgKi8KK3Zv
aWQJZGJfcHJpbnRfaW5wY2Ioc3RydWN0IGlucGNiICppbnAsIGNvbnN0IGNoYXIgKm5hbWUsIGlu
dCBpbmRlbnQpOworCisKKyNlbmRpZiAvKiAhX05FVElORVRfSU5fUENCX0hfICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfaXA2X3Zhci5oIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0
cGxpYi91c2VyX2lwNl92YXIuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAw
MDAuLmI5NzBmYjhmYTVkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIv
dXNlcl9pcDZfdmFyLmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qLQorICogQ29weXJpZ2h0IChDKSAx
OTk1LCAxOTk2LCAxOTk3LCBhbmQgMTk5OCBXSURFIFByb2plY3QuCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBu
b3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICog
ICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisg
KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
CisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKy8qLQorICogQ29w
eXJpZ2h0IChjKSAxOTgyLCAxOTg2LCAxOTkzCisgKiAgICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBV
bml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9m
IGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAq
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQor
ICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK
KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfVVNFUl9JUDZfVkFSX0hf
CisjZGVmaW5lIF9VU0VSX0lQNl9WQVJfSF8KKworI2lmIGRlZmluZWQoX1dJTjMyKQorc3RydWN0
IGlwNl9oZHIgeworCXVuaW9uIHsKKwkJc3RydWN0IGlwNl9oZHJjdGwgeworCQkJdWludDMyX3Qg
aXA2X3VuMV9mbG93OwkvKiAyMCBiaXRzIG9mIGZsb3ctSUQgKi8KKwkJCXVpbnQxNl90IGlwNl91
bjFfcGxlbjsJLyogcGF5bG9hZCBsZW5ndGggKi8KKwkJCXVpbnQ4X3QgIGlwNl91bjFfbnh0Owkv
KiBuZXh0IGhlYWRlciAqLworCQkJdWludDhfdCAgaXA2X3VuMV9obGltOwkvKiBob3AgbGltaXQg
Ki8KKwkJfSBpcDZfdW4xOworCQl1aW50OF90IGlwNl91bjJfdmZjOwkvKiA0IGJpdHMgdmVyc2lv
biwgdG9wIDQgYml0cyBjbGFzcyAqLworCX0gaXA2X2N0bHVuOworCXN0cnVjdCBpbjZfYWRkciBp
cDZfc3JjOwkvKiBzb3VyY2UgYWRkcmVzcyAqLworCXN0cnVjdCBpbjZfYWRkciBpcDZfZHN0Owkv
KiBkZXN0aW5hdGlvbiBhZGRyZXNzICovCit9OworI2RlZmluZSBpcDZfdmZjCQlpcDZfY3RsdW4u
aXA2X3VuMl92ZmMKKyNkZWZpbmUgaXA2X2Zsb3cJaXA2X2N0bHVuLmlwNl91bjEuaXA2X3VuMV9m
bG93CisjZGVmaW5lIGlwNl9wbGVuCWlwNl9jdGx1bi5pcDZfdW4xLmlwNl91bjFfcGxlbgorI2Rl
ZmluZSBpcDZfbnh0CQlpcDZfY3RsdW4uaXA2X3VuMS5pcDZfdW4xX254dAorI2RlZmluZSBpcDZf
aGxpbQlpcDZfY3RsdW4uaXA2X3VuMS5pcDZfdW4xX2hsaW0KKyNkZWZpbmUgaXA2X2hvcHMJaXA2
X2N0bHVuLmlwNl91bjEuaXA2X3VuMV9obGltCisKKyNkZWZpbmUgSVBWNl9WRVJTSU9OCQkweDYw
CisjZW5kaWYKKworI2lmIGRlZmluZWQoX1dJTjMyKQorI2RlZmluZSBzNl9hZGRyMTYgdS5Xb3Jk
CisjZW5kaWYKKyNpZiAhZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fbGludXhfXykgJiYg
IWRlZmluZWQoX19FTVNDUklQVEVOX18pCisjZGVmaW5lIHM2X2FkZHI4ICBfX3U2X2FkZHIuX191
Nl9hZGRyOAorI2RlZmluZSBzNl9hZGRyMTYgX191Nl9hZGRyLl9fdTZfYWRkcjE2CisjZGVmaW5l
IHM2X2FkZHIzMiBfX3U2X2FkZHIuX191Nl9hZGRyMzIKKyNlbmRpZgorCisjaWYgIWRlZmluZWQo
X19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fT3BlbkJTRF9fKSAmJiAhZGVmaW5lZChfX0RyYWdv
bkZseV9fKQorc3RydWN0IHJvdXRlX2luNiB7CisJc3RydWN0CXJ0ZW50cnkgKnJvX3J0OworCXN0
cnVjdAlsbGVudHJ5ICpyb19sbGU7CisJc3RydWN0CWluNl9hZGRyICpyb19pYTY7CisJaW50CQly
b19mbGFnczsKKwlzdHJ1Y3QJc29ja2FkZHJfaW42IHJvX2RzdDsKK307CisjZW5kaWYKKyNkZWZp
bmUgSVA2X0VYVEhEUl9HRVQodmFsLCB0eXAsIG0sIG9mZiwgbGVuKSBcCitkbyB7CQkJCQkJCQkJ
XAorCXN0cnVjdCBtYnVmICp0OwkJCQkJCQlcCisJaW50IHRtcDsJCQkJCQkJXAorCWlmICgobSkt
Pm1fbGVuID49IChvZmYpICsgKGxlbikpCQkJCVwKKwkJKHZhbCkgPSAodHlwKShtdG9kKChtKSwg
Y2FkZHJfdCkgKyAob2ZmKSk7CQlcCisJZWxzZSB7CQkJCQkJCQlcCisJCXQgPSBtX3B1bGxkb3du
KChtKSwgKG9mZiksIChsZW4pLCAmdG1wKTsJCVwKKwkJaWYgKHQpIHsJCQkJCQlcCisJCQlLQVNT
RVJUKHQtPm1fbGVuID49IHRtcCArIChsZW4pLAkJXAorCQkJICAgICAgICAoIm1fcHVsbGRvd24g
bWFsZnVuY3Rpb24iKSk7CQlcCisJCQkodmFsKSA9ICh0eXApKG10b2QodCwgY2FkZHJfdCkgKyB0
bXApOwkJXAorCQl9IGVsc2UgewkJCQkJCVwKKwkJCSh2YWwpID0gKHR5cClOVUxMOwkJCQlcCisJ
CQkobSkgPSBOVUxMOwkJCQkJXAorCQl9CQkJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgw
KQorCisjZW5kaWYgLyogIV9VU0VSX0lQNl9WQVJfSF8gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3VzcnNjdHBsaWIvdXNlcl9pcF9pY21wLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfaXBf
aWNtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMC4uYTk5MzQxMWEx
N2EyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2lwX2ljbXAu
aApAQCAtMCwwICsxLDIyNSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5ODIsIDE5ODYsIDE5
OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUg
VW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz
b2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKi8K
KworI2lmbmRlZiBfVVNFUl9JUF9JQ01QX0hfCisjZGVmaW5lIF9VU0VSX0lQX0lDTVBfSF8KKwor
LyoKKyAqIEludGVyZmFjZSBDb250cm9sIE1lc3NhZ2UgUHJvdG9jb2wgRGVmaW5pdGlvbnMuCisg
KiBQZXIgUkZDIDc5MiwgU2VwdGVtYmVyIDE5ODEuCisgKi8KKworLyoKKyAqIEludGVybmFsIG9m
IGFuIElDTVAgUm91dGVyIEFkdmVydGlzZW1lbnQKKyAqLworc3RydWN0IGljbXBfcmFfYWRkciB7
CisJdWludDMyX3QgaXJhX2FkZHI7CisJdWludDMyX3QgaXJhX3ByZWZlcmVuY2U7Cit9OworCisv
KgorICogU3RydWN0dXJlIG9mIGFuIGljbXAgaGVhZGVyLgorICovCitzdHJ1Y3QgaWNtcGhkciB7
CisJdV9jaGFyCWljbXBfdHlwZTsJCS8qIHR5cGUgb2YgbWVzc2FnZSwgc2VlIGJlbG93ICovCisJ
dV9jaGFyCWljbXBfY29kZTsJCS8qIHR5cGUgc3ViIGNvZGUgKi8KKwl1X3Nob3J0CWljbXBfY2tz
dW07CQkvKiBvbmVzIGNvbXBsZW1lbnQgY2tzdW0gb2Ygc3RydWN0ICovCit9OworCisjaWYgZGVm
aW5lZChfV0lOMzIpCisjcHJhZ21hIHBhY2sgKHB1c2gsIDEpCitzdHJ1Y3QgaWNtcDZfaGRyIHsK
Kwl1aW50OF90IGljbXA2X3R5cGU7CisJdWludDhfdCBpY21wNl9jb2RlOworCXVpbnQxNl90IGlj
bXA2X2Nrc3VtOworCXVuaW9uIHsKKwkJdWludDMyX3QgaWNtcDZfdW5fZGF0YTMyWzFdOworCQl1
aW50MTZfdCBpY21wNl91bl9kYXRhMTZbMl07CisJCXVpbnQ4X3QgaWNtcDZfdW5fZGF0YThbNF07
CisJfSBpY21wNl9kYXRhdW47Cit9OworI3ByYWdtYSBwYWNrKHBvcCkKKworI2RlZmluZSBpY21w
Nl9kYXRhMzIgaWNtcDZfZGF0YXVuLmljbXA2X3VuX2RhdGEzMgorI2RlZmluZSBpY21wNl9tdHUg
aWNtcDZfZGF0YTMyWzBdCisjZW5kaWYKKworLyoKKyAqIFN0cnVjdHVyZSBvZiBhbiBpY21wIHBh
Y2tldC4KKyAqCisgKiBYWFg6IHNob3VsZCBzdGFydCB3aXRoIGEgc3RydWN0IGljbXBoZHIuCisg
Ki8KK3N0cnVjdCBpY21wIHsKKwl1X2NoYXIJaWNtcF90eXBlOwkJLyogdHlwZSBvZiBtZXNzYWdl
LCBzZWUgYmVsb3cgKi8KKwl1X2NoYXIJaWNtcF9jb2RlOwkJLyogdHlwZSBzdWIgY29kZSAqLwor
CXVfc2hvcnQJaWNtcF9ja3N1bTsJCS8qIG9uZXMgY29tcGxlbWVudCBja3N1bSBvZiBzdHJ1Y3Qg
Ki8KKwl1bmlvbiB7CisJCXVfY2hhciBpaF9wcHRyOwkJCS8qIElDTVBfUEFSQU1QUk9CICovCisJ
CXN0cnVjdCBpbl9hZGRyIGloX2d3YWRkcjsJLyogSUNNUF9SRURJUkVDVCAqLworCQlzdHJ1Y3Qg
aWhfaWRzZXEgeworCQkJdWludDE2X3QJaWNkX2lkOwkvKiBuZXR3b3JrIGZvcm1hdCAqLworCQkJ
dWludDE2X3QJaWNkX3NlcTsgLyogbmV0d29yayBmb3JtYXQgKi8KKwkJfSBpaF9pZHNlcTsKKwkJ
aW50IGloX3ZvaWQ7CisKKwkJLyogSUNNUF9VTlJFQUNIX05FRURGUkFHIC0tIFBhdGggTVRVIERp
c2NvdmVyeSAoUkZDMTE5MSkgKi8KKwkJc3RydWN0IGloX3BtdHUgeworCQkJdWludDE2X3QgaXBt
X3ZvaWQ7CS8qIG5ldHdvcmsgZm9ybWF0ICovCisJCQl1aW50MTZfdCBpcG1fbmV4dG10dTsJLyog
bmV0d29yayBmb3JtYXQgKi8KKwkJfSBpaF9wbXR1OworCisJCXN0cnVjdCBpaF9ydHJhZHYgewor
CQkJdV9jaGFyIGlydF9udW1fYWRkcnM7CisJCQl1X2NoYXIgaXJ0X3dwYTsKKwkJCXVpbnQxNl90
IGlydF9saWZldGltZTsKKwkJfSBpaF9ydHJhZHY7CisJfSBpY21wX2h1bjsKKyNkZWZpbmUJaWNt
cF9wcHRyCWljbXBfaHVuLmloX3BwdHIKKyNkZWZpbmUJaWNtcF9nd2FkZHIJaWNtcF9odW4uaWhf
Z3dhZGRyCisjZGVmaW5lCWljbXBfaWQJCWljbXBfaHVuLmloX2lkc2VxLmljZF9pZAorI2RlZmlu
ZQlpY21wX3NlcQlpY21wX2h1bi5paF9pZHNlcS5pY2Rfc2VxCisjZGVmaW5lCWljbXBfdm9pZAlp
Y21wX2h1bi5paF92b2lkCisjZGVmaW5lCWljbXBfcG12b2lkCWljbXBfaHVuLmloX3BtdHUuaXBt
X3ZvaWQKKyNkZWZpbmUJaWNtcF9uZXh0bXR1CWljbXBfaHVuLmloX3BtdHUuaXBtX25leHRtdHUK
KyNkZWZpbmUJaWNtcF9udW1fYWRkcnMJaWNtcF9odW4uaWhfcnRyYWR2LmlydF9udW1fYWRkcnMK
KyNkZWZpbmUJaWNtcF93cGEJaWNtcF9odW4uaWhfcnRyYWR2LmlydF93cGEKKyNkZWZpbmUJaWNt
cF9saWZldGltZQlpY21wX2h1bi5paF9ydHJhZHYuaXJ0X2xpZmV0aW1lCisJdW5pb24geworCQlz
dHJ1Y3QgaWRfdHMgewkJCS8qIElDTVAgVGltZXN0YW1wICovCisJCQkvKgorCQkJICogVGhlIG5l
eHQgMyBmaWVsZHMgYXJlIGluIG5ldHdvcmsgZm9ybWF0LAorCQkJICogbWlsbGlzZWNvbmRzIHNp
bmNlIDAwOjAwIEdNVAorCQkJICovCisJCQl1aW50MzJfdCBpdHNfb3RpbWU7CS8qIE9yaWdpbmF0
ZSAqLworCQkJdWludDMyX3QgaXRzX3J0aW1lOwkvKiBSZWNlaXZlICovCisJCQl1aW50MzJfdCBp
dHNfdHRpbWU7CS8qIFRyYW5zbWl0ICovCisJCX0gaWRfdHM7CisJCXN0cnVjdCBpZF9pcCAgewor
CQkJc3RydWN0IGlwIGlkaV9pcDsKKwkJCS8qIG9wdGlvbnMgYW5kIHRoZW4gNjQgYml0cyBvZiBk
YXRhICovCisJCX0gaWRfaXA7CisJCXN0cnVjdCBpY21wX3JhX2FkZHIgaWRfcmFkdjsKKwkJdWlu
dDMyX3QgaWRfbWFzazsKKwkJY2hhcglpZF9kYXRhWzFdOworCX0gaWNtcF9kdW47CisjZGVmaW5l
CWljbXBfb3RpbWUJaWNtcF9kdW4uaWRfdHMuaXRzX290aW1lCisjZGVmaW5lCWljbXBfcnRpbWUJ
aWNtcF9kdW4uaWRfdHMuaXRzX3J0aW1lCisjZGVmaW5lCWljbXBfdHRpbWUJaWNtcF9kdW4uaWRf
dHMuaXRzX3R0aW1lCisjZGVmaW5lCWljbXBfaXAJCWljbXBfZHVuLmlkX2lwLmlkaV9pcAorI2Rl
ZmluZQlpY21wX3JhZHYJaWNtcF9kdW4uaWRfcmFkdgorI2RlZmluZQlpY21wX21hc2sJaWNtcF9k
dW4uaWRfbWFzaworI2RlZmluZQlpY21wX2RhdGEJaWNtcF9kdW4uaWRfZGF0YQorfTsKKworLyoK
KyAqIExvd2VyIGJvdW5kcyBvbiBwYWNrZXQgbGVuZ3RocyBmb3IgdmFyaW91cyB0eXBlcy4KKyAq
IEZvciB0aGUgZXJyb3IgYWR2aWNlIHBhY2tldHMgbXVzdCBmaXJzdCBpbnN1cmUgdGhhdCB0aGUK
KyAqIHBhY2tldCBpcyBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiB0aGUgcmV0dXJuZWQgaXAgaGVh
ZGVyLgorICogT25seSB0aGVuIGNhbiB3ZSBkbyB0aGUgY2hlY2sgdG8gc2VlIGlmIDY0IGJpdHMg
b2YgcGFja2V0CisgKiBkYXRhIGhhdmUgYmVlbiByZXR1cm5lZCwgc2luY2Ugd2UgbmVlZCB0byBj
aGVjayB0aGUgcmV0dXJuZWQKKyAqIGlwIGhlYWRlciBsZW5ndGguCisgKi8KKyNkZWZpbmUJSUNN
UF9NSU5MRU4JOAkJCQkvKiBhYnMgbWluaW11bSAqLworI2RlZmluZQlJQ01QX1RTTEVOCSg4ICsg
MyAqIHNpemVvZiAodWludDMyX3QpKQkvKiB0aW1lc3RhbXAgKi8KKyNkZWZpbmUJSUNNUF9NQVNL
TEVOCTEyCQkJCS8qIGFkZHJlc3MgbWFzayAqLworI2RlZmluZQlJQ01QX0FEVkxFTk1JTgkoOCAr
IHNpemVvZiAoc3RydWN0IGlwKSArIDgpCS8qIG1pbiAqLworI2RlZmluZQlJQ01QX0FEVkxFTihw
KQkoOCArICgocCktPmljbXBfaXAuaXBfaGwgPDwgMikgKyA4KQorCS8qIE4uQi46IG11c3Qgc2Vw
YXJhdGVseSBjaGVjayB0aGF0IGlwX2hsID49IDUgKi8KKworLyoKKyAqIERlZmluaXRpb24gb2Yg
dHlwZSBhbmQgY29kZSBmaWVsZCB2YWx1ZXMuCisgKi8KKyNkZWZpbmUJSUNNUF9FQ0hPUkVQTFkJ
CTAJCS8qIGVjaG8gcmVwbHkgKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNICQkzCQkvKiBkZXN0IHVu
cmVhY2hhYmxlLCBjb2RlczogKi8KKyNkZWZpbmUJCUlDTVBfVU5SRUFDSF9ORVQJMAkJLyogYmFk
IG5ldCAqLworI2RlZmluZQkJSUNNUF9VTlJFQUNIX0hPU1QJMQkJLyogYmFkIGhvc3QgKi8KKyNk
ZWZpbmUJCUlDTVBfVU5SRUFDSF9QUk9UT0NPTAkyCQkvKiBiYWQgcHJvdG9jb2wgKi8KKyNkZWZp
bmUJCUlDTVBfVU5SRUFDSF9QT1JUCTMJCS8qIGJhZCBwb3J0ICovCisjZGVmaW5lCQlJQ01QX1VO
UkVBQ0hfTkVFREZSQUcJNAkJLyogSVBfREYgY2F1c2VkIGRyb3AgKi8KKyNkZWZpbmUJCUlDTVBf
VU5SRUFDSF9TUkNGQUlMCTUJCS8qIHNyYyByb3V0ZSBmYWlsZWQgKi8KKyNkZWZpbmUJCUlDTVBf
VU5SRUFDSF9ORVRfVU5LTk9XTiA2CQkvKiB1bmtub3duIG5ldCAqLworI2RlZmluZQkJSUNNUF9V
TlJFQUNIX0hPU1RfVU5LTk9XTiA3CQkvKiB1bmtub3duIGhvc3QgKi8KKyNkZWZpbmUJCUlDTVBf
VU5SRUFDSF9JU09MQVRFRAk4CQkvKiBzcmMgaG9zdCBpc29sYXRlZCAqLworI2RlZmluZQkJSUNN
UF9VTlJFQUNIX05FVF9QUk9ISUIJOQkJLyogcHJvaGliaXRlZCBhY2Nlc3MgKi8KKyNkZWZpbmUJ
CUlDTVBfVU5SRUFDSF9IT1NUX1BST0hJQiAxMAkJLyogZGl0dG8gKi8KKyNkZWZpbmUJCUlDTVBf
VU5SRUFDSF9UT1NORVQJMTEJCS8qIGJhZCB0b3MgZm9yIG5ldCAqLworI2RlZmluZQkJSUNNUF9V
TlJFQUNIX1RPU0hPU1QJMTIJCS8qIGJhZCB0b3MgZm9yIGhvc3QgKi8KKyNkZWZpbmUJCUlDTVBf
VU5SRUFDSF9GSUxURVJfUFJPSElCIDEzCQkvKiBhZG1pbiBwcm9oaWIgKi8KKyNkZWZpbmUJCUlD
TVBfVU5SRUFDSF9IT1NUX1BSRUNFREVOQ0UgMTQJCS8qIGhvc3QgcHJlYyB2aW8uICovCisjZGVm
aW5lCQlJQ01QX1VOUkVBQ0hfUFJFQ0VERU5DRV9DVVRPRkYgMTUJLyogcHJlYyBjdXRvZmYgKi8K
KyNkZWZpbmUJSUNNUF9TT1VSQ0VRVUVOQ0gJNAkJLyogcGFja2V0IGxvc3QsIHNsb3cgZG93biAq
LworI2RlZmluZQlJQ01QX1JFRElSRUNUCQk1CQkvKiBzaG9ydGVyIHJvdXRlLCBjb2RlczogKi8K
KyNkZWZpbmUJCUlDTVBfUkVESVJFQ1RfTkVUCTAJCS8qIGZvciBuZXR3b3JrICovCisjZGVmaW5l
CQlJQ01QX1JFRElSRUNUX0hPU1QJMQkJLyogZm9yIGhvc3QgKi8KKyNkZWZpbmUJCUlDTVBfUkVE
SVJFQ1RfVE9TTkVUCTIJCS8qIGZvciB0b3MgYW5kIG5ldCAqLworI2RlZmluZQkJSUNNUF9SRURJ
UkVDVF9UT1NIT1NUCTMJCS8qIGZvciB0b3MgYW5kIGhvc3QgKi8KKyNkZWZpbmUJSUNNUF9BTFRI
T1NUQUREUgk2CQkvKiBhbHRlcm5hdGUgaG9zdCBhZGRyZXNzICovCisjZGVmaW5lCUlDTVBfRUNI
TwkJOAkJLyogZWNobyBzZXJ2aWNlICovCisjZGVmaW5lCUlDTVBfUk9VVEVSQURWRVJUCTkJCS8q
IHJvdXRlciBhZHZlcnRpc2VtZW50ICovCisjZGVmaW5lCQlJQ01QX1JPVVRFUkFEVkVSVF9OT1JN
QUwJCTAJLyogbm9ybWFsIGFkdmVydGlzZW1lbnQgKi8KKyNkZWZpbmUJCUlDTVBfUk9VVEVSQURW
RVJUX05PUk9VVEVfQ09NTU9OCTE2CS8qIHNlbGVjdGl2ZSByb3V0aW5nICovCisjZGVmaW5lCUlD
TVBfUk9VVEVSU09MSUNJVAkxMAkJLyogcm91dGVyIHNvbGljaXRhdGlvbiAqLworI2RlZmluZQlJ
Q01QX1RJTVhDRUVECQkxMQkJLyogdGltZSBleGNlZWRlZCwgY29kZTogKi8KKyNkZWZpbmUJCUlD
TVBfVElNWENFRURfSU5UUkFOUwkwCQkvKiB0dGw9PTAgaW4gdHJhbnNpdCAqLworI2RlZmluZQkJ
SUNNUF9USU1YQ0VFRF9SRUFTUwkxCQkvKiB0dGw9PTAgaW4gcmVhc3MgKi8KKyNkZWZpbmUJSUNN
UF9QQVJBTVBST0IJCTEyCQkvKiBpcCBoZWFkZXIgYmFkICovCisjZGVmaW5lCQlJQ01QX1BBUkFN
UFJPQl9FUlJBVFBUUiAwCQkvKiBlcnJvciBhdCBwYXJhbSBwdHIgKi8KKyNkZWZpbmUJCUlDTVBf
UEFSQU1QUk9CX09QVEFCU0VOVCAxCQkvKiByZXEuIG9wdC4gYWJzZW50ICovCisjZGVmaW5lCQlJ
Q01QX1BBUkFNUFJPQl9MRU5HVEggMgkJCS8qIGJhZCBsZW5ndGggKi8KKyNkZWZpbmUJSUNNUF9U
U1RBTVAJCTEzCQkvKiB0aW1lc3RhbXAgcmVxdWVzdCAqLworI2RlZmluZQlJQ01QX1RTVEFNUFJF
UExZCTE0CQkvKiB0aW1lc3RhbXAgcmVwbHkgKi8KKyNkZWZpbmUJSUNNUF9JUkVRCQkxNQkJLyog
aW5mb3JtYXRpb24gcmVxdWVzdCAqLworI2RlZmluZQlJQ01QX0lSRVFSRVBMWQkJMTYJCS8qIGlu
Zm9ybWF0aW9uIHJlcGx5ICovCisjZGVmaW5lCUlDTVBfTUFTS1JFUQkJMTcJCS8qIGFkZHJlc3Mg
bWFzayByZXF1ZXN0ICovCisjZGVmaW5lCUlDTVBfTUFTS1JFUExZCQkxOAkJLyogYWRkcmVzcyBt
YXNrIHJlcGx5ICovCisjZGVmaW5lCUlDTVBfVFJBQ0VST1VURQkJMzAJCS8qIHRyYWNlcm91dGUg
Ki8KKyNkZWZpbmUJSUNNUF9EQVRBQ09OVkVSUgkzMQkJLyogZGF0YSBjb252ZXJzaW9uIGVycm9y
ICovCisjZGVmaW5lCUlDTVBfTU9CSUxFX1JFRElSRUNUCTMyCQkvKiBtb2JpbGUgaG9zdCByZWRp
cmVjdCAqLworI2RlZmluZQlJQ01QX0lQVjZfV0hFUkVBUkVZT1UJMzMJCS8qIElQdjYgd2hlcmUt
YXJlLXlvdSAqLworI2RlZmluZQlJQ01QX0lQVjZfSUFNSEVSRQkzNAkJLyogSVB2NiBpLWFtLWhl
cmUgKi8KKyNkZWZpbmUJSUNNUF9NT0JJTEVfUkVHUkVRVUVTVAkzNQkJLyogbW9iaWxlIHJlZ2lz
dHJhdGlvbiByZXEgKi8KKyNkZWZpbmUJSUNNUF9NT0JJTEVfUkVHUkVQTFkJMzYJCS8qIG1vYmls
ZSByZWdpc3RyYXRpb24gcmVwbHkgKi8KKyNkZWZpbmUJSUNNUF9TS0lQCQkzOQkJLyogU0tJUCAq
LworI2RlZmluZQlJQ01QX1BIT1RVUklTCQk0MAkJLyogUGhvdHVyaXMgKi8KKyNkZWZpbmUJCUlD
TVBfUEhPVFVSSVNfVU5LTk9XTl9JTkRFWAkxCS8qIHVua25vd24gc2VjIGluZGV4ICovCisjZGVm
aW5lCQlJQ01QX1BIT1RVUklTX0FVVEhfRkFJTEVECTIJLyogYXV0aCBmYWlsZWQgKi8KKyNkZWZp
bmUJCUlDTVBfUEhPVFVSSVNfREVDUllQVF9GQUlMRUQJMwkvKiBkZWNyeXB0IGZhaWxlZCAqLwor
CisjZGVmaW5lCUlDTVBfTUFYVFlQRQkJNDAKKworI2RlZmluZQlJQ01QX0lORk9UWVBFKHR5cGUp
IFwKKwkoKHR5cGUpID09IElDTVBfRUNIT1JFUExZIHx8ICh0eXBlKSA9PSBJQ01QX0VDSE8gfHwg
XAorCSh0eXBlKSA9PSBJQ01QX1JPVVRFUkFEVkVSVCB8fCAodHlwZSkgPT0gSUNNUF9ST1VURVJT
T0xJQ0lUIHx8IFwKKwkodHlwZSkgPT0gSUNNUF9UU1RBTVAgfHwgKHR5cGUpID09IElDTVBfVFNU
QU1QUkVQTFkgfHwgXAorCSh0eXBlKSA9PSBJQ01QX0lSRVEgfHwgKHR5cGUpID09IElDTVBfSVJF
UVJFUExZIHx8IFwKKwkodHlwZSkgPT0gSUNNUF9NQVNLUkVRIHx8ICh0eXBlKSA9PSBJQ01QX01B
U0tSRVBMWSkKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNl
cl9tYWxsb2MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9tYWxsb2MuaApuZXcgZmlsZSBt
b2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAuLmM1ODhlMDk0YWZhYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9tYWxsb2MuaApAQCAtMCwwICsxLDIwMyBA
QAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5ODcsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRo
ZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgUm9iZXJ0
IE4uIE0uIFdhdHNvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5l
aXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29u
dHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICog
U1VDSCBEQU1BR0UuCisgKgorICovCisKKy8qIFRoaXMgZmlsZSBoYXMgYmVlbiByZW5hbWVkIHVz
ZXJfbWFsbG9jLmggZm9yIFVzZXJzcGFjZSAqLworI2lmbmRlZiBfVVNFUl9NQUxMT0NfSF8KKyNk
ZWZpbmUJX1VTRVJfTUFMTE9DX0hfCisKKy8qX19Vc2Vyc3BhY2VfXyovCisjaW5jbHVkZSA8c3Rk
bGliLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgIWRlZmluZWQoX1dJTjMyKQorI2lu
Y2x1ZGUgPHN0cmluZ3MuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbHNlCisjaWYgKGRlZmlu
ZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSID49IDE2MDApIHx8IChkZWZpbmVkKF9fTVNWQ1JUX1ZF
UlNJT05fXykgJiYgX19NU1ZDUlRfVkVSU0lPTl9fID49IDE0MDApCisjaW5jbHVkZSA8c3RkaW50
Lmg+CisjZWxpZiBkZWZpbmVkKFNDVFBfU1RESU5UX0lOQ0xVREUpCisjaW5jbHVkZSBTQ1RQX1NU
RElOVF9JTkNMVURFCisjZWxzZQorI2RlZmluZSB1aW50MzJfdCB1bnNpZ25lZCBfX2ludDMyCisj
ZGVmaW5lIHVpbnQ2NF90IHVuc2lnbmVkIF9faW50NjQKKyNlbmRpZgorI2luY2x1ZGUgPHdpbnNv
Y2syLmg+CisjZW5kaWYKKworI2RlZmluZQlNSU5BTExPQ1NJWkUJVU1BX1NNQUxMRVNUX1VOSVQK
KworLyoKKyAqIGZsYWdzIHRvIG1hbGxvYy4KKyAqLworI2RlZmluZQlNX05PV0FJVAkweDAwMDEJ
CS8qIGRvIG5vdCBibG9jayAqLworI2RlZmluZQlNX1dBSVRPSwkweDAwMDIJCS8qIG9rIHRvIGJs
b2NrICovCisjZGVmaW5lCU1fWkVSTwkJMHgwMTAwCQkvKiBiemVybyB0aGUgYWxsb2NhdGlvbiAq
LworI2RlZmluZQlNX05PVk0JCTB4MDIwMAkJLyogZG9uJ3QgYXNrIFZNIGZvciBwYWdlcyAqLwor
I2RlZmluZQlNX1VTRV9SRVNFUlZFCTB4MDQwMAkJLyogY2FuIGFsbG9jIG91dCBvZiByZXNlcnZl
IG1lbW9yeSAqLworCisjZGVmaW5lCU1fTUFHSUMJCTg3Nzk4Mzk3NwkvKiB0aW1lIHdoZW4gZmly
c3QgZGVmaW5lZCA6LSkgKi8KKworLyoKKyAqIFR3byBtYWxsb2MgdHlwZSBzdHJ1Y3R1cmVzIGFy
ZSBwcmVzZW50OiBtYWxsb2NfdHlwZSwgd2hpY2ggaXMgdXNlZCBieSBhCisgKiB0eXBlIG93bmVy
IHRvIGRlY2xhcmUgdGhlIHR5cGUsIGFuZCBtYWxsb2NfdHlwZV9pbnRlcm5hbCwgd2hpY2ggaG9s
ZHMKKyAqIG1hbGxvYy1vd25lZCBzdGF0aXN0aWNzIGFuZCBvdGhlciBBQkktc2Vuc2l0aXZlIGZp
ZWxkcywgc3VjaCBhcyB0aGUgc2V0IG9mCisgKiBtYWxsb2Mgc3RhdGlzdGljcyBpbmRleGVkIGJ5
IHRoZSBjb21waWxlLXRpbWUgTUFYQ1BVIGNvbnN0YW50LgorICogQXBwbGljYXRpb25zIHNob3Vs
ZCBhdm9pZCBpbnRyb2R1Y2luZyBkZXBlbmRlbmNlIG9uIHRoZSBhbGxvY2F0b3IgcHJpdmF0ZQor
ICogZGF0YSBsYXlvdXQgYW5kIHNpemUuCisgKgorICogVGhlIG1hbGxvY190eXBlIGtzX25leHQg
ZmllbGQgaXMgcHJvdGVjdGVkIGJ5IG1hbGxvY19tdHguICBPdGhlciBmaWVsZHMgaW4KKyAqIG1h
bGxvY190eXBlIGFyZSBzdGF0aWMgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gc28gdW5zeW5jaHJvbml6
ZWQuCisgKgorICogU3RhdGlzdGljcyBpbiBtYWxsb2NfdHlwZV9zdGF0cyBhcmUgd3JpdHRlbiBv
bmx5IHdoZW4gaG9sZGluZyBhIGNyaXRpY2FsCisgKiBzZWN0aW9uIGFuZCBydW5uaW5nIG9uIHRo
ZSBDUFUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbmRleCBpbnRvIHRoZSBzdGF0CisgKiBhcnJheSwg
YnV0IHJlYWQgbG9jay1mcmVlIHJlc3VsdGluZyBpbiBwb3NzaWJsZSAobWlub3IpIHJhY2VzLCB3
aGljaCB0aGUKKyAqIG1vbml0b3JpbmcgYXBwIHNob3VsZCB0YWtlIGludG8gYWNjb3VudC4KKyAq
Lworc3RydWN0IG1hbGxvY190eXBlX3N0YXRzIHsKKwl1aW50NjRfdAltdHNfbWVtYWxsb2NlZDsJ
LyogQnl0ZXMgYWxsb2NhdGVkIG9uIENQVS4gKi8KKwl1aW50NjRfdAltdHNfbWVtZnJlZWQ7CS8q
IEJ5dGVzIGZyZWVkIG9uIENQVS4gKi8KKwl1aW50NjRfdAltdHNfbnVtYWxsb2NzOwkvKiBOdW1i
ZXIgb2YgYWxsb2NhdGVzIG9uIENQVS4gKi8KKwl1aW50NjRfdAltdHNfbnVtZnJlZXM7CS8qIG51
bWJlciBvZiBmcmVlcyBvbiBDUFUuICovCisJdWludDY0X3QJbXRzX3NpemU7CS8qIEJpdG1hc2sg
b2Ygc2l6ZXMgYWxsb2NhdGVkIG9uIENQVS4gKi8KKwl1aW50NjRfdAlfbXRzX3Jlc2VydmVkMTsJ
LyogUmVzZXJ2ZWQgZmllbGQuICovCisJdWludDY0X3QJX210c19yZXNlcnZlZDI7CS8qIFJlc2Vy
dmVkIGZpZWxkLiAqLworCXVpbnQ2NF90CV9tdHNfcmVzZXJ2ZWQzOwkvKiBSZXNlcnZlZCBmaWVs
ZC4gKi8KK307CisKKyNpZm5kZWYgTUFYQ1BVIC8qIG5lY2Vzc2FyeSBvbiBMaW51eCAqLworI2Rl
ZmluZSBNQVhDUFUgNCAvKiBhcmJpdHJhcnk/ICovCisjZW5kaWYKKworc3RydWN0IG1hbGxvY190
eXBlX2ludGVybmFsIHsKKwlzdHJ1Y3QgbWFsbG9jX3R5cGVfc3RhdHMJbXRpX3N0YXRzW01BWENQ
VV07Cit9OworCisvKgorICogQUJJLWNvbXBhdGlibGUgdmVyc2lvbiBvZiB0aGUgb2xkICdzdHJ1
Y3QgbWFsbG9jX3R5cGUnLCBvbmx5IGFsbCBzdGF0cyBhcmUKKyAqIG5vdyBtYWxsb2MtbWFuYWdl
ZCBpbiBtYWxsb2Mtb3duZWQgbWVtb3J5IHJhdGhlciB0aGFuIGluIGNhbGxlciBtZW1vcnksIHNv
CisgKiBhcyB0byBhdm9pZCBBQkkgaXNzdWVzLiAgVGhlIGtzX25leHQgcG9pbnRlciBpcyByZXVz
ZWQgYXMgYSBwb2ludGVyIHRvIHRoZQorICogaW50ZXJuYWwgZGF0YSBoYW5kbGUuCisgKi8KK3N0
cnVjdCBtYWxsb2NfdHlwZSB7CisJc3RydWN0IG1hbGxvY190eXBlICprc19uZXh0OwkvKiBOZXh0
IGluIGdsb2JhbCBjaGFpbi4gKi8KKwl1X2xvbmcJCSBfa3NfbWVtdXNlOwkvKiBObyBsb25nZXIg
dXNlZC4gKi8KKwl1X2xvbmcJCSBfa3Nfc2l6ZTsJLyogTm8gbG9uZ2VyIHVzZWQuICovCisJdV9s
b25nCQkgX2tzX2ludXNlOwkvKiBObyBsb25nZXIgdXNlZC4gKi8KKwl1aW50NjRfdAkgX2tzX2Nh
bGxzOwkvKiBObyBsb25nZXIgdXNlZC4gKi8KKwl1X2xvbmcJCSBfa3NfbWF4dXNlZDsJLyogTm8g
bG9uZ2VyIHVzZWQuICovCisJdV9sb25nCQkga3NfbWFnaWM7CS8qIERldGVjdCBwcm9ncmFtbWVy
IGVycm9yLiAqLworCWNvbnN0IGNoYXIJKmtzX3Nob3J0ZGVzYzsJLyogUHJpbnRhYmxlIHR5cGUg
bmFtZS4gKi8KKworCS8qCisJICogc3RydWN0IG1hbGxvY190eXBlIHdhcyB0ZXJtaW5hdGVkIHdp
dGggYSBzdHJ1Y3QgbXR4LCB3aGljaCBpcyBubworCSAqIGxvbmdlciByZXF1aXJlZC4gIEZvciBB
QkkgcmVhc29ucywgY29udGludWUgdG8gZmxlc2ggb3V0IHRoZSBmdWxsCisJICogc2l6ZSBvZiB0
aGUgb2xkIHN0cnVjdHVyZSwgYnV0IHJldXNlIHRoZSBfbG9fY2xhc3MgZmllbGQgZm9yIG91cgor
CSAqIGludGVybmFsIGRhdGEgaGFuZGxlLgorCSAqLworCXZvaWQJCSprc19oYW5kbGU7CS8qIFBy
aXYuIGRhdGEsIHdhcyBsb19jbGFzcy4gKi8KKwljb25zdCBjaGFyCSpfbG9fbmFtZTsKKwljb25z
dCBjaGFyCSpfbG9fdHlwZTsKKwl1X2ludAkJIF9sb19mbGFnczsKKwl2b2lkCQkqX2xvX2xpc3Rf
bmV4dDsKKwlzdHJ1Y3Qgd2l0bmVzcwkqX2xvX3dpdG5lc3M7CisJdWludHB0cl90CSBfbXR4X2xv
Y2s7CisJdV9pbnQJCSBfbXR4X3JlY3Vyc2U7Cit9OworCisvKgorICogU3RhdGlzdGljcyBzdHJ1
Y3R1cmUgaGVhZGVycyBmb3IgdXNlciBzcGFjZS4gIFRoZSBrZXJuLm1hbGxvYyBzeXNjdGwKKyAq
IGV4cG9zZXMgYSBzdHJ1Y3R1cmUgc3RyZWFtIGNvbnNpc3Rpbmcgb2YgYSBzdHJlYW0gaGVhZGVy
LCB0aGVuIGEgc2VyaWVzIG9mCisgKiBtYWxsb2MgdHlwZSBoZWFkZXJzIGFuZCBzdGF0aXN0aWNz
IHN0cnVjdHVyZXMgKHF1YW50aXR5IG1heGNwdXMpLiAgRm9yCisgKiBjb252ZW5pZW5jZSwgdGhl
IGtlcm5lbCB3aWxsIHByb3ZpZGUgdGhlIGN1cnJlbnQgdmFsdWUgb2YgbWF4Y3B1cyBhdCB0aGUK
KyAqIGhlYWQgb2YgdGhlIHN0cmVhbS4KKyAqLworI2RlZmluZQlNQUxMT0NfVFlQRV9TVFJFQU1f
VkVSU0lPTgkweDAwMDAwMDAxCitzdHJ1Y3QgbWFsbG9jX3R5cGVfc3RyZWFtX2hlYWRlciB7CisJ
dWludDMyX3QJbXRzaF92ZXJzaW9uOwkvKiBTdHJlYW0gZm9ybWF0IHZlcnNpb24uICovCisJdWlu
dDMyX3QJbXRzaF9tYXhjcHVzOwkvKiBWYWx1ZSBvZiBNQVhDUFUgZm9yIHN0cmVhbS4gKi8KKwl1
aW50MzJfdAltdHNoX2NvdW50OwkvKiBOdW1iZXIgb2YgcmVjb3Jkcy4gKi8KKwl1aW50MzJfdAlf
bXRzaF9wYWQ7CS8qIFBhZC9yZXNlcnZlZCBmaWVsZC4gKi8KK307CisKKyNkZWZpbmUJTUFMTE9D
X01BWF9OQU1FCTMyCitzdHJ1Y3QgbWFsbG9jX3R5cGVfaGVhZGVyIHsKKwljaGFyCQkJCW10aF9u
YW1lW01BTExPQ19NQVhfTkFNRV07Cit9OworCisvKiBfX1VzZXJzcGFjZV9fCitOb3RpY2UgdGhh
dCBhdCBwbGFjZXMgaXQgdXNlcyBpZmRlZiBfS0VSTkVMLiBUaGF0IGxpbmUgY2Fubm90IGJlCity
ZW1vdmVkIGJlY2F1c2UgaXQgY2F1c2VzIGNvbmZsaWN0cyB3aXRoIG1hbGxvYyBkZWZpbml0aW9u
IGluCisvdXNyL2luY2x1ZGUvbWFsbG9jLmgsIHdoaWNoIGVzc2VudGlhbGx5IHNheXMgdGhhdCBt
YWxsb2MuaCBoYXMKK2JlZW4gb3ZlcnJpZGRlbiBieSBzdGRsaWIuaC4gV2Ugd2lsbCBuZWVkIHRv
IHVzZSBuYW1lcyBsaWtlCit1c2VyX21hbGxvYy5oIGZvciBpc29sYXRpbmcga2VybmVsIGludGVy
ZmFjZSBoZWFkZXJzLiB1c2luZworb3JpZ2luYWwgbmFtZXMgbGlrZSBtYWxsb2MuaCBpbiBhIHVz
ZXJfaW5jbHVkZSBoZWFkZXIgY2FuIGJlCitjb25mdXNpbmcsIEFsbCB1c2Vyc3BhY2UgaGVhZGVy
IGZpbGVzIGFyZSBiZWluZyBwbGFjZWQgaW4gLi91c2VyX2luY2x1ZGUKK0JldHRlciBzdGlsbCB0
byByZW1vdmUgZnJvbSB1c2VyX2luY2x1ZGUuaCBhbGwgaXJyZWxldmFudCBjb2RlIHN1Y2gKK2Fz
IHRoYXQgaW4gdGhlIGJsb2NrIHN0YXJ0aW5nIHdpdGggI2lmZGVmIF9LRVJORUwuIEkgYW0gb25s
eSBsZWF2aW5nCitpdCBpbiBmb3IgdGhlIHRpbWUgYmVpbmcgdG8gc2VlIHdoYXQgZnVuY3Rpb25h
bGl0eSBpcyBpbiB0aGlzIGZpbGUKK3RoYXQga2VybmVsIHVzZXMuCisKK1N0YXJ0IGNvcHk6IENv
cGllZCBjb2RlIGZvciBfX1VzZXJzcGFjZV9fICovCisjZGVmaW5lCU1BTExPQ19ERUZJTkUodHlw
ZSwgc2hvcnRkZXNjLCBsb25nZGVzYykJCQlcCisJc3RydWN0IG1hbGxvY190eXBlIHR5cGVbMV0g
PSB7CQkJCQlcCisJCXsgTlVMTCwgMCwgMCwgMCwgMCwgMCwgTV9NQUdJQywgc2hvcnRkZXNjLCBO
VUxMLCBOVUxMLAlcCisJCSAgICBOVUxMLCAwLCBOVUxMLCBOVUxMLCAwLCAwIH0JCQkJXAorCX0K
KworLyogUmVtb3ZlZCAiZXh0ZXJuIiBpbiBfX1VzZXJzcGFjZV9fIGNvZGUgKi8KKy8qIElmIHdl
IG5lZWQgdG8gdXNlIE1BTExPQ19ERUNMQVJFIGJlZm9yZSB1c2luZyBNQUxMT0MgdGhlbgorICAg
d2UgaGF2ZSB0byByZW1vdmUgZXh0ZXJuLgorICAgICBJbiAvdXNyL2luY2x1ZGUvc3lzL21hbGxv
Yy5oIHRoZXJlIGlzIHRoaXMgZGVmaW5pdGlvbjoKKyAgICAgI2RlZmluZSAgICBNQUxMT0NfREVD
TEFSRSh0eXBlKSBcCisgICAgICAgIGV4dGVybiBzdHJ1Y3QgbWFsbG9jX3R5cGUgdHlwZVsxXQor
ICAgICBhbmQgbG9hZGVyIGlzIHVuYWJsZSB0byBmaW5kIHRoZSBleHRlcm4gbWFsbG9jX3R5cGUg
YmVjYXVzZQorICAgICBpdCBtYXkgYmUgZGVmaW5lZCBpbiBvbmUgb2Yga2VybmVsIG9iamVjdCBm
aWxlcy4KKyAgICAgSXQgc2VlbXMgdGhhdCBNQUxMT0NfREVDTEFSRSBhbmQgTUFMTE9DX0RFRklO
RSBjYW5ub3QgYmUgdXNlZCBhdAorICAgICB0aGUgc2FtZSB0aW1lIGZvciBzYW1lICJ0eXBlIiB2
YXJpYWJsZS4gQWxzbywgaW4gUmFuZGFsbCdzIGFyY2hpdGVjdHVyZQorICAgICBkb2N1bWVudCwg
d2hlcmUgaXQgc3BlY2lmaWVzIE8vUyBzcGVjaWZpYyBtYWNyb3MgYW5kIGZ1bmN0aW9ucywgaXQg
c2F5cworICAgICB0aGF0IHRoZSBuYW1lIGluIFNDVFBfTUFMTE9DIGRvZXMgbm90IGhhdmUgdG8g
YmUgdXNlZC4KKyovCisjZGVmaW5lCU1BTExPQ19ERUNMQVJFKHR5cGUpIFwKKwlleHRlcm4gc3Ry
dWN0IG1hbGxvY190eXBlIHR5cGVbMV0KKworI2RlZmluZQlGUkVFKGFkZHIsIHR5cGUpIGZyZWUo
KGFkZHIpKQorCisvKiBjaGFuZ2VkIGRlZmluaXRpb25zIG9mIE1BTExPQyBhbmQgRlJFRSAqLwor
LyogVXNpbmcgbWVtc2V0IGlmIGZsYWcgTV9aRVJPIGlzIHNwZWNpZmllZC4gVG9kbzogTV9XQUlU
T0sgYW5kIE1fTk9XQUlUICovCisjZGVmaW5lCU1BTExPQyhzcGFjZSwgY2FzdCwgc2l6ZSwgdHlw
ZSwgZmxhZ3MpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKChzcGFjZSkgPSAoY2Fz
dCltYWxsb2MoKHVfbG9uZykoc2l6ZSkpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgZG8gewkJCQkJCQkJXAorICAgICAgICBpZiAoZmxhZ3MgJiBNX1pFUk8pIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgIG1lbXNldChzcGFjZSwwLHNp
emUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0JCQkJCQkJ
CVwKKyAgICB9IHdoaWxlICgwKTsKKworI2VuZGlmIC8qICFfU1lTX01BTExPQ19IXyAqLwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX21idWYuYyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNj
dHBsaWIvdXNlcl9tYnVmLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAw
Li41N2I1MzJiYjcxN2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3Vz
ZXJfbWJ1Zi5jCkBAIC0wLDAgKzEsMTU2NiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5ODIs
IDE5ODYsIDE5ODgsIDE5OTMKKyAqICAgICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkg
b2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNv
bnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAq
IFNVQ0ggREFNQUdFLgorICoKKyAqLworCisvKgorICogIF9fVXNlcnNwYWNlX18gdmVyc2lvbiBv
ZiAvdXNyL3NyYy9zeXMva2Vybi9rZXJuX21idWYuYworICogIFdlIGFyZSBpbml0aWFsaXppbmcg
dHdvIHpvbmVzIGZvciBNYnVmcyBhbmQgQ2x1c3RlcnMuCisgKgorICovCisKKyNpbmNsdWRlIDxz
dGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorLyogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPiBU
aGlzIGRlZmluZXMgTVNJWkUgMjU2ICovCisjaWYgIWRlZmluZWQoU0NUUF9TSU1QTEVfQUxMT0NB
VE9SKQorI2luY2x1ZGUgInVtZW0uaCIKKyNlbmRpZgorI2luY2x1ZGUgInVzZXJfbWJ1Zi5oIgor
I2luY2x1ZGUgInVzZXJfZW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJ1c2VyX2F0b21pYy5oIgor
I2luY2x1ZGUgIm5ldGluZXQvc2N0cF9wY2IuaCIKKworI2RlZmluZSBLSVBDX01BWF9MSU5LSERS
ICAgICAgICA0ICAgICAgIC8qIGludDogbWF4IGxlbmd0aCBvZiBsaW5rIGhlYWRlciAoc2VlIHN5
cy9zeXNjbHQuaCkgKi8KKyNkZWZpbmUgS0lQQ19NQVhfUFJPVE9IRFIJNQkvKiBpbnQ6IG1heCBs
ZW5ndGggb2YgbmV0d29yayBoZWFkZXIgKHNlZSBzeXMvc3lzY2x0LmgpKi8KK2ludCBtYXhfbGlu
a2hkciA9IEtJUENfTUFYX0xJTktIRFI7CitpbnQgbWF4X3Byb3RvaGRyID0gS0lQQ19NQVhfUFJP
VE9IRFI7IC8qIFNpemUgb2YgbGFyZ2VzdCBwcm90b2NvbCBsYXllciBoZWFkZXIuICovCisKKy8q
CisgKiBab25lcyBmcm9tIHdoaWNoIHdlIGFsbG9jYXRlLgorICovCitzY3RwX3pvbmVfdAl6b25l
X21idWY7CitzY3RwX3pvbmVfdAl6b25lX2NsdXN0Oworc2N0cF96b25lX3QJem9uZV9leHRfcmVm
Y250OworCisvKiBfX1VzZXJzcGFjZV9fIGNsdXN0X21iX2FyZ3Mgd2lsbCBiZSBwYXNzZWQgYXMg
Y2FsbGJhY2sgZGF0YSB0byBtYl9jdG9yX2NsdXN0CisgKiBhbmQgbWJfZHRvcl9jbHVzdC4KKyAq
IE5vdGU6IEkgaGFkIHRvIHVzZSBzdHJ1Y3QgY2x1c3RfYXJncyBhcyBhbiBlbmNhcHN1bGF0aW9u
IGZvciBhbiBtYnVmIHBvaW50ZXIuCisgKiBzdHJ1Y3QgbWJ1ZiAqIGNsdXN0X21iX2FyZ3M7IGRv
ZXMgbm90IHdvcmsuCisgKi8KK3N0cnVjdCBjbHVzdF9hcmdzIGNsdXN0X21iX2FyZ3M7CisKKwor
LyogX19Vc2Vyc3BhY2VfXworICogTG9jYWwgcHJvdG90eXBlcy4KKyAqLworc3RhdGljIGludAlt
Yl9jdG9yX21idWYodm9pZCAqLCB2b2lkICosIGludCk7CitzdGF0aWMgaW50ICAgICAgbWJfY3Rv
cl9jbHVzdCh2b2lkICosIHZvaWQgKiwgaW50KTsKK3N0YXRpYyB2b2lkCW1iX2R0b3JfbWJ1Zih2
b2lkICosICB2b2lkICopOworc3RhdGljIHZvaWQJbWJfZHRvcl9jbHVzdCh2b2lkICosIHZvaWQg
Kik7CisKKworLyoqKioqKioqKioqKioqKioqIEZ1bmN0aW9ucyB0YWtlbiBmcm9tIHVzZXJfbWJ1
Zi5oICoqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgbWJ1Zl9jb25zdHJ1Y3Rvcl9kdXAoc3Ry
dWN0IG1idWYgKm0sIGludCBwa3RoZHIsIHNob3J0IHR5cGUpCit7CisJaW50IGZsYWdzID0gcGt0
aGRyOworCWlmICh0eXBlID09IE1UX05PSU5JVCkKKwkJcmV0dXJuICgwKTsKKworCW0tPm1fbmV4
dCA9IE5VTEw7CisJbS0+bV9uZXh0cGt0ID0gTlVMTDsKKwltLT5tX2xlbiA9IDA7CisJbS0+bV9m
bGFncyA9IGZsYWdzOworCW0tPm1fdHlwZSA9IHR5cGU7CisJaWYgKGZsYWdzICYgTV9QS1RIRFIp
IHsKKwkJbS0+bV9kYXRhID0gbS0+bV9wa3RkYXQ7CisJCW0tPm1fcGt0aGRyLnJjdmlmID0gTlVM
TDsKKwkJbS0+bV9wa3RoZHIubGVuID0gMDsKKwkJbS0+bV9wa3RoZHIuaGVhZGVyID0gTlVMTDsK
KwkJbS0+bV9wa3RoZHIuY3N1bV9mbGFncyA9IDA7CisJCW0tPm1fcGt0aGRyLmNzdW1fZGF0YSA9
IDA7CisJCW0tPm1fcGt0aGRyLnRzb19zZWdzeiA9IDA7CisJCW0tPm1fcGt0aGRyLmV0aGVyX3Z0
YWcgPSAwOworCQlTTElTVF9JTklUKCZtLT5tX3BrdGhkci50YWdzKTsKKwl9IGVsc2UKKwkJbS0+
bV9kYXRhID0gbS0+bV9kYXQ7CisKKwlyZXR1cm4gKDApOworfQorCisvKiBfX1VzZXJzcGFjZV9f
ICovCitzdHJ1Y3QgbWJ1ZiAqCittX2dldChpbnQgaG93LCBzaG9ydCB0eXBlKQoreworCXN0cnVj
dCBtYnVmICptcmV0OworI2lmIGRlZmluZWQoU0NUUF9TSU1QTEVfQUxMT0NBVE9SKQorCXN0cnVj
dCBtYl9hcmdzIG1idWZfbWJfYXJnczsKKworCS8qIFRoZSBmb2xsb3dpbmcgc2V0dGVyIGZ1bmN0
aW9uIGlzIG5vdCB5ZXQgYmVpbmcgZW5jbG9zZWQgd2l0aGluCisJICogI2lmIFVTSU5HX01CVUZf
Q09OU1RSVUNUT1IgLSAjZW5kaWYsIHVudGlsIEkgaGF2ZSB0aG9yb3VnaGx5IHRlc3RlZAorCSAq
IG1iX2R0b3JfbWJ1Zi4gU2VlIGNvbW1lbnQgdGhlcmUKKwkgKi8KKwltYnVmX21iX2FyZ3MuZmxh
Z3MgPSAwOworCW1idWZfbWJfYXJncy50eXBlID0gdHlwZTsKKyNlbmRpZgorCS8qIE1idWYgbWFz
dGVyIHpvbmUsIHpvbmVfbWJ1ZiwgaGFzIGFscmVhZHkgYmVlbgorCSAqIGNyZWF0ZWQgaW4gbWJ1
Zl9pbml0aWFsaXplKCkgKi8KKwltcmV0ID0gU0NUUF9aT05FX0dFVCh6b25lX21idWYsIHN0cnVj
dCBtYnVmKTsKKyNpZiBkZWZpbmVkKFNDVFBfU0lNUExFX0FMTE9DQVRPUikKKwltYl9jdG9yX21i
dWYobXJldCwgJm1idWZfbWJfYXJncywgMCk7CisjZW5kaWYKKwkvKm1yZXQgPSAgKChzdHJ1Y3Qg
bWJ1ZiAqKXVtZW1fY2FjaGVfYWxsb2Moem9uZV9tYnVmLCBVTUVNX0RFRkFVTFQpKTsqLworCisJ
LyogVGhlcmUgYXJlIGNhc2VzIHdoZW4gYW4gb2JqZWN0IGF2YWlsYWJsZSBpbiB0aGUgY3VycmVu
dCBDUFUncworCSAqIGxvYWRlZCBtYWdhemluZSBhbmQgaW4gdGhvc2UgY2FzZXMgdGhlIG9iamVj
dCdzIGNvbnN0cnVjdG9yIGlzIG5vdCBhcHBsaWVkLgorCSAqIElmIHRoYXQgaXMgdGhlIGNhc2Us
IHRoZW4gd2UgYXJlIGR1cGxpY2F0aW5nIGNvbnN0cnVjdG9yIGluaXRpYWxpemF0aW9uIGhlcmUs
CisJICogc28gdGhhdCB0aGUgbWJ1ZiBpcyBwcm9wZXJseSBjb25zdHJ1Y3RlZCBiZWZvcmUgcmV0
dXJuaW5nIGl0LgorCSAqLworCWlmIChtcmV0KSB7CisjaWYgVVNJTkdfTUJVRl9DT05TVFJVQ1RP
UgorCQlpZiAoISAobXJldC0+bV90eXBlID09IHR5cGUpICkgeworCQkJbWJ1Zl9jb25zdHJ1Y3Rv
cl9kdXAobXJldCwgMCwgdHlwZSk7CisJCX0KKyNlbHNlCisJCW1idWZfY29uc3RydWN0b3JfZHVw
KG1yZXQsIDAsIHR5cGUpOworI2VuZGlmCisKKwl9CisJcmV0dXJuIG1yZXQ7Cit9CisKKworLyog
X19Vc2Vyc3BhY2VfXyAqLworc3RydWN0IG1idWYgKgorbV9nZXRoZHIoaW50IGhvdywgc2hvcnQg
dHlwZSkKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbXJldDsKKyNpZiBkZWZpbmVkKFNDVFBfU0lNUExFX0FM
TE9DQVRPUikKKwlzdHJ1Y3QgbWJfYXJncyBtYnVmX21iX2FyZ3M7CisKKwkvKiBUaGUgZm9sbG93
aW5nIHNldHRlciBmdW5jdGlvbiBpcyBub3QgeWV0IGJlaW5nIGVuY2xvc2VkIHdpdGhpbgorCSAq
ICNpZiBVU0lOR19NQlVGX0NPTlNUUlVDVE9SIC0gI2VuZGlmLCB1bnRpbCBJIGhhdmUgdGhvcm91
Z2hseSB0ZXN0ZWQKKwkgKiBtYl9kdG9yX21idWYuIFNlZSBjb21tZW50IHRoZXJlCisJICovCisJ
bWJ1Zl9tYl9hcmdzLmZsYWdzID0gTV9QS1RIRFI7CisJbWJ1Zl9tYl9hcmdzLnR5cGUgPSB0eXBl
OworI2VuZGlmCisJbXJldCA9IFNDVFBfWk9ORV9HRVQoem9uZV9tYnVmLCBzdHJ1Y3QgbWJ1Zik7
CisjaWYgZGVmaW5lZChTQ1RQX1NJTVBMRV9BTExPQ0FUT1IpCisJbWJfY3Rvcl9tYnVmKG1yZXQs
ICZtYnVmX21iX2FyZ3MsIDApOworI2VuZGlmCisJLyptcmV0ID0gKChzdHJ1Y3QgbWJ1ZiAqKXVt
ZW1fY2FjaGVfYWxsb2Moem9uZV9tYnVmLCBVTUVNX0RFRkFVTFQpKTsqLworCS8qIFRoZXJlIGFy
ZSBjYXNlcyB3aGVuIGFuIG9iamVjdCBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgQ1BVJ3MKKwkg
KiBsb2FkZWQgbWFnYXppbmUgYW5kIGluIHRob3NlIGNhc2VzIHRoZSBvYmplY3QncyBjb25zdHJ1
Y3RvciBpcyBub3QgYXBwbGllZC4KKwkgKiBJZiB0aGF0IGlzIHRoZSBjYXNlLCB0aGVuIHdlIGFy
ZSBkdXBsaWNhdGluZyBjb25zdHJ1Y3RvciBpbml0aWFsaXphdGlvbiBoZXJlLAorCSAqIHNvIHRo
YXQgdGhlIG1idWYgaXMgcHJvcGVybHkgY29uc3RydWN0ZWQgYmVmb3JlIHJldHVybmluZyBpdC4K
KwkgKi8KKwlpZiAobXJldCkgeworI2lmIFVTSU5HX01CVUZfQ09OU1RSVUNUT1IKKwkJaWYgKCEg
KChtcmV0LT5tX2ZsYWdzICYgTV9QS1RIRFIpICYmIChtcmV0LT5tX3R5cGUgPT0gdHlwZSkpICkg
eworCQkJbWJ1Zl9jb25zdHJ1Y3Rvcl9kdXAobXJldCwgTV9QS1RIRFIsIHR5cGUpOworCQl9Cisj
ZWxzZQorCQltYnVmX2NvbnN0cnVjdG9yX2R1cChtcmV0LCBNX1BLVEhEUiwgdHlwZSk7CisjZW5k
aWYKKwl9CisJcmV0dXJuIG1yZXQ7Cit9CisKKy8qIF9fVXNlcnNwYWNlX18gKi8KK3N0cnVjdCBt
YnVmICoKK21fZnJlZShzdHJ1Y3QgbWJ1ZiAqbSkKK3sKKworCXN0cnVjdCBtYnVmICpuID0gbS0+
bV9uZXh0OworCisJaWYgKG0tPm1fZmxhZ3MgJiBNX0VYVCkKKwkJbWJfZnJlZV9leHQobSk7CisJ
ZWxzZSBpZiAoKG0tPm1fZmxhZ3MgJiBNX05PRlJFRSkgPT0gMCkgeworI2lmIGRlZmluZWQoU0NU
UF9TSU1QTEVfQUxMT0NBVE9SKQorCQltYl9kdG9yX21idWYobSwgTlVMTCk7CisjZW5kaWYKKwkJ
U0NUUF9aT05FX0ZSRUUoem9uZV9tYnVmLCBtKTsKKwl9CisJCS8qdW1lbV9jYWNoZV9mcmVlKHpv
bmVfbWJ1ZiwgbSk7Ki8KKwlyZXR1cm4gKG4pOworfQorCisKK3N0YXRpYyB2b2lkCitjbHVzdF9j
b25zdHJ1Y3Rvcl9kdXAoY2FkZHJfdCBtX2NsdXN0LCBzdHJ1Y3QgbWJ1ZiogbSkKK3sKKwl1X2lu
dCAqcmVmY250OworCWludCB0eXBlLCBzaXplOworCisJaWYgKG0gPT0gTlVMTCkgeworCQlyZXR1
cm47CisJfQorCS8qIEFzc2lnbmluZyBjbHVzdGVyIG9mIE1DTEJZVEVTLiBUT0RPOiBBZGQganVt
Ym8gZnJhbWUgZnVuY3Rpb25hbGl0eSAqLworCXR5cGUgPSBFWFRfQ0xVU1RFUjsKKwlzaXplID0g
TUNMQllURVM7CisKKwlyZWZjbnQgPSBTQ1RQX1pPTkVfR0VUKHpvbmVfZXh0X3JlZmNudCwgdV9p
bnQpOworCS8qcmVmY250ID0gKHVfaW50ICopdW1lbV9jYWNoZV9hbGxvYyh6b25lX2V4dF9yZWZj
bnQsIFVNRU1fREVGQVVMVCk7Ki8KKyNpZiAhZGVmaW5lZChTQ1RQX1NJTVBMRV9BTExPQ0FUT1Ip
CisJaWYgKHJlZmNudCA9PSBOVUxMKSB7CisJCXVtZW1fcmVhcCgpOworCQlyZWZjbnQgPSBTQ1RQ
X1pPTkVfR0VUKHpvbmVfZXh0X3JlZmNudCwgdV9pbnQpOworCQkvKnJlZmNudCA9ICh1X2ludCAq
KXVtZW1fY2FjaGVfYWxsb2Moem9uZV9leHRfcmVmY250LCBVTUVNX0RFRkFVTFQpOyovCisJfQor
I2VuZGlmCisJKnJlZmNudCA9IDE7CisJbS0+bV9leHQuZXh0X2J1ZiA9IChjYWRkcl90KW1fY2x1
c3Q7CisJbS0+bV9kYXRhID0gbS0+bV9leHQuZXh0X2J1ZjsKKwltLT5tX2ZsYWdzIHw9IE1fRVhU
OworCW0tPm1fZXh0LmV4dF9mcmVlID0gTlVMTDsKKwltLT5tX2V4dC5leHRfYXJncyA9IE5VTEw7
CisJbS0+bV9leHQuZXh0X3NpemUgPSBzaXplOworCW0tPm1fZXh0LmV4dF90eXBlID0gdHlwZTsK
KwltLT5tX2V4dC5yZWZfY250ID0gcmVmY250OworCXJldHVybjsKK30KKworCisvKiBfX1VzZXJz
cGFjZV9fICovCit2b2lkCittX2NsZ2V0KHN0cnVjdCBtYnVmICptLCBpbnQgaG93KQoreworCWNh
ZGRyX3QgbWNsdXN0X3JldDsKKyNpZiBkZWZpbmVkKFNDVFBfU0lNUExFX0FMTE9DQVRPUikKKwlz
dHJ1Y3QgY2x1c3RfYXJncyBjbHVzdF9tYl9hcmdzX2w7CisjZW5kaWYKKwlpZiAobS0+bV9mbGFn
cyAmIE1fRVhUKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICIlczogJXAgbWJ1ZiBhbHJl
YWR5IGhhcyBjbHVzdGVyXG4iLCBfX2Z1bmNfXywgKHZvaWQgKiltKTsKKwl9CisJbS0+bV9leHQu
ZXh0X2J1ZiA9IChjaGFyICopTlVMTDsKKyNpZiBkZWZpbmVkKFNDVFBfU0lNUExFX0FMTE9DQVRP
UikKKwljbHVzdF9tYl9hcmdzX2wucGFyZW50X21idWYgPSBtOworI2VuZGlmCisJbWNsdXN0X3Jl
dCA9IFNDVFBfWk9ORV9HRVQoem9uZV9jbHVzdCwgY2hhcik7CisjaWYgZGVmaW5lZChTQ1RQX1NJ
TVBMRV9BTExPQ0FUT1IpCisJbWJfY3Rvcl9jbHVzdChtY2x1c3RfcmV0LCAmY2x1c3RfbWJfYXJn
c19sLCAwKTsKKyNlbmRpZgorCS8qbWNsdXN0X3JldCA9IHVtZW1fY2FjaGVfYWxsb2Moem9uZV9j
bHVzdCwgVU1FTV9ERUZBVUxUKTsqLworCS8qCisJIE9uIGEgY2x1c3RlciBhbGxvY2F0aW9uIGZh
aWx1cmUsIGNhbGwgdW1lbV9yZWFwKCkgYW5kIHJldHJ5LgorCSAqLworCisJaWYgKG1jbHVzdF9y
ZXQgPT0gTlVMTCkgeworI2lmICFkZWZpbmVkKFNDVFBfU0lNUExFX0FMTE9DQVRPUikKKwkvKglt
Y2x1c3RfcmV0ID0gU0NUUF9aT05FX0dFVCh6b25lX2NsdXN0LCBjaGFyKTsKKwkJbWJfY3Rvcl9j
bHVzdChtY2x1c3RfcmV0LCAmY2x1c3RfbWJfYXJncywgMCk7CisjZWxzZSovCisJCXVtZW1fcmVh
cCgpOworCQltY2x1c3RfcmV0ID0gU0NUUF9aT05FX0dFVCh6b25lX2NsdXN0LCBjaGFyKTsKKyNl
bmRpZgorCQkvKm1jbHVzdF9yZXQgPSB1bWVtX2NhY2hlX2FsbG9jKHpvbmVfY2x1c3QsIFVNRU1f
REVGQVVMVCk7Ki8KKwkJLyogaWYgKE5VTEwgPT0gbWNsdXN0X3JldCkgeyAqLworCQlTQ1RQREJH
KFNDVFBfREVCVUdfVVNSLCAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBpbiAlc1xuIiwgX19m
dW5jX18pOworCQkvKiB9ICovCisJfQorCisjaWYgVVNJTkdfTUJVRl9DT05TVFJVQ1RPUgorCWlm
ICgobS0+bV9leHQuZXh0X2J1ZiA9PSBOVUxMKSkgeworCQljbHVzdF9jb25zdHJ1Y3Rvcl9kdXAo
bWNsdXN0X3JldCwgbSk7CisJfQorI2Vsc2UKKwljbHVzdF9jb25zdHJ1Y3Rvcl9kdXAobWNsdXN0
X3JldCwgbSk7CisjZW5kaWYKK30KKworc3RydWN0IG1idWYgKgorbV9nZXRtMihzdHJ1Y3QgbWJ1
ZiAqbSwgaW50IGxlbiwgaW50IGhvdywgc2hvcnQgdHlwZSwgaW50IGZsYWdzLCBpbnQgYWxsb25l
YnVmKQoreworCXN0cnVjdCBtYnVmICptYiwgKm5tID0gTlVMTCwgKm10YWlsID0gTlVMTDsKKwlp
bnQgc2l6ZSwgbWJ1Zl90aHJlc2hvbGQsIHNwYWNlX25lZWRlZCA9IGxlbjsKKworCUtBU1NFUlQo
bGVuID49IDAsICgiJXM6IGxlbiBpcyA8IDAiLCBfX2Z1bmNfXykpOworCisJLyogVmFsaWRhdGUg
ZmxhZ3MuICovCisJZmxhZ3MgJj0gKE1fUEtUSERSIHwgTV9FT1IpOworCisJLyogUGFja2V0IGhl
YWRlciBtYnVmIG11c3QgYmUgZmlyc3QgaW4gY2hhaW4uICovCisJaWYgKChmbGFncyAmIE1fUEtU
SERSKSAmJiBtICE9IE5VTEwpIHsKKwkJZmxhZ3MgJj0gfk1fUEtUSERSOworCX0KKworCWlmIChh
bGxvbmVidWYgPT0gMCkKKwkJbWJ1Zl90aHJlc2hvbGQgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bWJ1Zl90aHJlc2hvbGRfY291bnQpOworCWVsc2UKKwkJbWJ1Zl90aHJlc2hvbGQgPSAxOworCisJ
LyogTG9vcCBhbmQgYXBwZW5kIG1heGltdW0gc2l6ZWQgbWJ1ZnMgdG8gdGhlIGNoYWluIHRhaWwu
ICovCisJd2hpbGUgKGxlbiA+IDApIHsKKwkJaWYgKCghYWxsb25lYnVmICYmIGxlbiA+PSBNQ0xC
WVRFUykgfHwgKGxlbiA+IChpbnQpKCgobWJ1Zl90aHJlc2hvbGQgLSAxKSAqIE1MRU4pICsgTUhM
RU4pKSkgeworCQkJbWIgPSBtX2dldGhkcihob3csIHR5cGUpOworCQkJTUNMR0VUKG1iLCBob3cp
OworCQkJc2l6ZSA9IE1DTEJZVEVTOworCQkJLyogU0NUUF9CVUZfTEVOKG1iKSA9IE1DTEJZVEVT
OyAqLworCQl9IGVsc2UgaWYgKGZsYWdzICYgTV9QS1RIRFIpIHsKKwkJCW1iID0gbV9nZXRoZHIo
aG93LCB0eXBlKTsKKwkJCWlmIChsZW4gPCBNSExFTikgeworCQkJCXNpemUgPSBsZW47CisJCQl9
IGVsc2UgeworCQkJCXNpemUgPSBNSExFTjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCW1iID0gbV9n
ZXQoaG93LCB0eXBlKTsKKwkJCWlmIChsZW4gPCBNTEVOKSB7CisJCQkJc2l6ZSA9IGxlbjsKKwkJ
CX0gZWxzZSB7CisJCQkJc2l6ZSA9IE1MRU47CisJCQl9CisJCX0KKworCQkvKiBGYWlsIHRoZSB3
aG9sZSBvcGVyYXRpb24gaWYgb25lIG1idWYgY2FuJ3QgYmUgYWxsb2NhdGVkLiAqLworCQlpZiAo
bWIgPT0gTlVMTCkgeworCQkJaWYgKG5tICE9IE5VTEwpCisJCQkJbV9mcmVlbShubSk7CisJCQly
ZXR1cm4gKE5VTEwpOworCQl9CisKKwkJaWYgKGFsbG9uZWJ1ZiAhPSAwICYmIHNpemUgPCBzcGFj
ZV9uZWVkZWQpIHsKKwkJCW1fZnJlZW0obWIpOworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCisJ
CS8qIEJvb2sga2VlcGluZy4gKi8KKwkJbGVuIC09IHNpemU7CisJCWlmIChtdGFpbCAhPSBOVUxM
KQorCQkJbXRhaWwtPm1fbmV4dCA9IG1iOworCQllbHNlCisJCQlubSA9IG1iOworCQltdGFpbCA9
IG1iOworCQlmbGFncyAmPSB+TV9QS1RIRFI7ICAgICAvKiBPbmx5IHZhbGlkIG9uIHRoZSBmaXJz
dCBtYnVmLiAqLworCX0KKwlpZiAoZmxhZ3MgJiBNX0VPUikgeworCQltdGFpbC0+bV9mbGFncyB8
PSBNX0VPUjsgIC8qIE9ubHkgdmFsaWQgb24gdGhlIGxhc3QgbWJ1Zi4gKi8KKwl9CisKKwkvKiBJ
ZiBtYnVmIHdhcyBzdXBwbGllZCwgYXBwZW5kIG5ldyBjaGFpbiB0byB0aGUgZW5kIG9mIGl0LiAq
LworCWlmIChtICE9IE5VTEwpIHsKKwkJZm9yIChtdGFpbCA9IG07IG10YWlsLT5tX25leHQgIT0g
TlVMTDsgbXRhaWwgPSBtdGFpbC0+bV9uZXh0KTsKKwkJbXRhaWwtPm1fbmV4dCA9IG5tOworCQlt
dGFpbC0+bV9mbGFncyAmPSB+TV9FT1I7CisJfSBlbHNlIHsKKwkJbSA9IG5tOworCX0KKworCXJl
dHVybiAobSk7Cit9CisKKy8qCisgKiBDb3B5IHRoZSBjb250ZW50cyBvZiB1aW8gaW50byBhIHBy
b3Blcmx5IHNpemVkIG1idWYgY2hhaW4uCisgKi8KK3N0cnVjdCBtYnVmICoKK21fdWlvdG9tYnVm
KHN0cnVjdCB1aW8gKnVpbywgaW50IGhvdywgaW50IGxlbiwgaW50IGFsaWduLCBpbnQgZmxhZ3Mp
Cit7CisJc3RydWN0IG1idWYgKm0sICptYjsKKwlpbnQgZXJyb3IsIGxlbmd0aDsKKwlzc2l6ZV90
IHRvdGFsOworCWludCBwcm9ncmVzcyA9IDA7CisKKwkvKgorCSAqIGxlbiBjYW4gYmUgemVybyBv
ciBhbiBhcmJpdHJhcnkgbGFyZ2UgdmFsdWUgYm91bmQgYnkKKwkgKiB0aGUgdG90YWwgZGF0YSBz
dXBwbGllZCBieSB0aGUgdWlvLgorCSAqLworCWlmIChsZW4gPiAwKQorCQl0b3RhbCA9IG1pbih1
aW8tPnVpb19yZXNpZCwgbGVuKTsKKwllbHNlCisJCXRvdGFsID0gdWlvLT51aW9fcmVzaWQ7CisJ
LyoKKwkgKiBUaGUgc21hbGxlc3QgdW5pdCByZXR1cm5lZCBieSBtX2dldG0yKCkgaXMgYSBzaW5n
bGUgbWJ1ZgorCSAqIHdpdGggcGt0aGRyLiAgV2UgY2FuJ3QgYWxpZ24gcGFzdCBpdC4KKwkgKi8K
KwlpZiAoYWxpZ24gPj0gTUhMRU4pCisJCXJldHVybiAoTlVMTCk7CisJLyoKKwkgKiBHaXZlIHVz
IHRoZSBmdWxsIGFsbG9jYXRpb24gb3Igbm90aGluZy4KKwkgKiBJZiBsZW4gaXMgemVybyByZXR1
cm4gdGhlIHNtYWxsZXN0IGVtcHR5IG1idWYuCisJICovCisJbSA9IG1fZ2V0bTIoTlVMTCwgKGlu
dCltYXgodG90YWwgKyBhbGlnbiwgMSksIGhvdywgTVRfREFUQSwgZmxhZ3MsIDApOworCWlmICht
ID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJbS0+bV9kYXRhICs9IGFsaWduOworCisJLyog
RmlsbCBhbGwgbWJ1ZnMgd2l0aCB1aW8gZGF0YSBhbmQgdXBkYXRlIGhlYWRlciBpbmZvcm1hdGlv
bi4gKi8KKwlmb3IgKG1iID0gbTsgbWIgIT0gTlVMTDsgbWIgPSBtYi0+bV9uZXh0KSB7CisJCWxl
bmd0aCA9IChpbnQpbWluKE1fVFJBSUxJTkdTUEFDRShtYiksIHRvdGFsIC0gcHJvZ3Jlc3MpOwor
CQllcnJvciA9IHVpb21vdmUobXRvZChtYiwgdm9pZCAqKSwgbGVuZ3RoLCB1aW8pOworCQlpZiAo
ZXJyb3IpIHsKKwkJCW1fZnJlZW0obSk7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisKKwkJbWIt
Pm1fbGVuID0gbGVuZ3RoOworCQlwcm9ncmVzcyArPSBsZW5ndGg7CisJCWlmIChmbGFncyAmIE1f
UEtUSERSKQorCQkJbS0+bV9wa3RoZHIubGVuICs9IGxlbmd0aDsKKwl9CisJS0FTU0VSVChwcm9n
cmVzcyA9PSB0b3RhbCwgKCIlczogcHJvZ3Jlc3MgIT0gdG90YWwiLCBfX2Z1bmNfXykpOworCisJ
cmV0dXJuIChtKTsKK30KKwordV9pbnQKK21fbGVuZ3RoKHN0cnVjdCBtYnVmICptMCwgc3RydWN0
IG1idWYgKipsYXN0KQoreworCXN0cnVjdCBtYnVmICptOworCXVfaW50IGxlbjsKKworCWxlbiA9
IDA7CisJZm9yIChtID0gbTA7IG0gIT0gTlVMTDsgbSA9IG0tPm1fbmV4dCkgeworCQlsZW4gKz0g
bS0+bV9sZW47CisJCWlmIChtLT5tX25leHQgPT0gTlVMTCkKKwkJCWJyZWFrOworCX0KKwlpZiAo
bGFzdCAhPSBOVUxMKQorCSpsYXN0ID0gbTsKKwlyZXR1cm4gKGxlbik7Cit9CisKK3N0cnVjdCBt
YnVmICoKK21fbGFzdChzdHJ1Y3QgbWJ1ZiAqbSkKK3sKKwl3aGlsZSAobS0+bV9uZXh0KSB7CisJ
CW0gPSBtLT5tX25leHQ7CisJfQorCXJldHVybiAobSk7Cit9CisKKy8qCisgKiBVbmxpbmsgYSB0
YWcgZnJvbSB0aGUgbGlzdCBvZiB0YWdzIGFzc29jaWF0ZWQgd2l0aCBhbiBtYnVmLgorICovCitz
dGF0aWMgX19pbmxpbmUgdm9pZAorbV90YWdfdW5saW5rKHN0cnVjdCBtYnVmICptLCBzdHJ1Y3Qg
bV90YWcgKnQpCit7CisKKwlTTElTVF9SRU1PVkUoJm0tPm1fcGt0aGRyLnRhZ3MsIHQsIG1fdGFn
LCBtX3RhZ19saW5rKTsKK30KKworLyoKKyAqIFJlY2xhaW0gcmVzb3VyY2VzIGFzc29jaWF0ZWQg
d2l0aCBhIHRhZy4KKyAqLworc3RhdGljIF9faW5saW5lIHZvaWQKK21fdGFnX2ZyZWUoc3RydWN0
IG1fdGFnICp0KQoreworCisJKCp0LT5tX3RhZ19mcmVlKSh0KTsKK30KKworLyoKKyAqIFNldCB1
cCB0aGUgY29udGVudHMgb2YgYSB0YWcuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBmaWxsIGlu
IHRoZSBmcmVlCisgKiBtZXRob2Q7IHRoZSBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gZG8gdGhhdC4K
KyAqCisgKiBYWFggcHJvYmFibHkgc2hvdWxkIGJlIGNhbGxlZCBtX3RhZ19pbml0LCBidXQgdGhh
dCB3YXMgYWxyZWFkeSB0YWtlbi4KKyAqLworc3RhdGljIF9faW5saW5lIHZvaWQKK21fdGFnX3Nl
dHVwKHN0cnVjdCBtX3RhZyAqdCwgdWludDMyX3QgY29va2llLCBpbnQgdHlwZSwgaW50IGxlbikK
K3sKKworCXQtPm1fdGFnX2lkID0gdHlwZTsKKwl0LT5tX3RhZ19sZW4gPSBsZW47CisJdC0+bV90
YWdfY29va2llID0gY29va2llOworfQorCisvKioqKioqKioqKioqIEVuZCBmdW5jdGlvbnMgZnJv
bSB1c2VyX21idWYuaCAgKioqKioqKioqKioqKioqKioqLworCisKKworLyoqKioqKioqKioqKiBF
bmQgZnVuY3Rpb25zIHRvIHN1YnN0aXR1dGUgdW1lbV9jYWNoZV9hbGxvYyBhbmQgdW1lbV9jYWNo
ZV9mcmVlICoqKioqKioqKioqKioqLworCit2b2lkCittYnVmX2luaXRpYWxpemUodm9pZCAqZHVt
bXkpCit7CisKKwkvKgorCSAqIF9fVXNlcnNwYWNlX19Db25maWd1cmUgVU1BIHpvbmVzIGZvciBN
YnVmcyBhbmQgQ2x1c3RlcnMuCisJICogKFRPRE86IG1fZ2V0Y2woKSAtIHVzaW5nIHBhY2tldCBz
ZWNvbmRhcnkgem9uZSkuCisJICogVGhlcmUgaXMgbm8gcHJvdmlzaW9uIGZvciB0cmFzaF9pbml0
IGFuZCB0cmFzaF9maW5pIGluIHVtZW0uCisJICoKKwkgKi8KKyAvKiB6b25lX21idWYgPSB1bWVt
X2NhY2hlX2NyZWF0ZShNQlVGX01FTV9OQU1FLCBNU0laRSwgMCwKKwkJCQltYl9jdG9yX21idWYs
IG1iX2R0b3JfbWJ1ZiwgTlVMTCwKKwkJCQkmbWJ1Zl9tYl9hcmdzLAorCQkJCU5VTEwsIDApOwor
CXpvbmVfbWJ1ZiA9IHVtZW1fY2FjaGVfY3JlYXRlKE1CVUZfTUVNX05BTUUsIE1TSVpFLCAwLCBO
VUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAwKTsqLworI2lmIGRlZmluZWQoU0NUUF9TSU1Q
TEVfQUxMT0NBVE9SKQorCVNDVFBfWk9ORV9JTklUKHpvbmVfbWJ1ZiwgTUJVRl9NRU1fTkFNRSwg
TVNJWkUsIDApOworI2Vsc2UKKwl6b25lX21idWYgPSB1bWVtX2NhY2hlX2NyZWF0ZShNQlVGX01F
TV9OQU1FLCBNU0laRSwgMCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYl9jdG9y
X21idWYsIG1iX2R0b3JfbWJ1ZiwgTlVMTCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOVUxMLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOworI2VuZGlm
CisJLyp6b25lX2V4dF9yZWZjbnQgPSB1bWVtX2NhY2hlX2NyZWF0ZShNQlVGX0VYVFJFRkNOVF9N
RU1fTkFNRSwgc2l6ZW9mKHVfaW50KSwgMCwKKwkJCQlOVUxMLCBOVUxMLCBOVUxMLAorCQkJCU5V
TEwsCisJCQkJTlVMTCwgMCk7Ki8KKwlTQ1RQX1pPTkVfSU5JVCh6b25lX2V4dF9yZWZjbnQsIE1C
VUZfRVhUUkVGQ05UX01FTV9OQU1FLCBzaXplb2YodV9pbnQpLCAwKTsKKworICAvKnpvbmVfY2x1
c3QgPSB1bWVtX2NhY2hlX2NyZWF0ZShNQlVGX0NMVVNURVJfTUVNX05BTUUsIE1DTEJZVEVTLCAw
LAorCQkJCSBtYl9jdG9yX2NsdXN0LCBtYl9kdG9yX2NsdXN0LCBOVUxMLAorCQkJCSAmY2x1c3Rf
bWJfYXJncywKKwkJCQkgTlVMTCwgMCk7CisJem9uZV9jbHVzdCA9IHVtZW1fY2FjaGVfY3JlYXRl
KE1CVUZfQ0xVU1RFUl9NRU1fTkFNRSwgTUNMQllURVMsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIE5V
TEwsIE5VTEwsMCk7Ki8KKyNpZiBkZWZpbmVkKFNDVFBfU0lNUExFX0FMTE9DQVRPUikKKwlTQ1RQ
X1pPTkVfSU5JVCh6b25lX2NsdXN0LCBNQlVGX0NMVVNURVJfTUVNX05BTUUsIE1DTEJZVEVTLCAw
KTsKKyNlbHNlCisJem9uZV9jbHVzdCA9IHVtZW1fY2FjaGVfY3JlYXRlKE1CVUZfQ0xVU1RFUl9N
RU1fTkFNRSwgTUNMQllURVMsIDAsCisJCQkJCQkJCSAgIG1iX2N0b3JfY2x1c3QsIG1iX2R0b3Jf
Y2x1c3QsIE5VTEwsCisJCQkJCQkJCSAgICZjbHVzdF9tYl9hcmdzLAorCQkJCQkJCQkgICBOVUxM
LCAwKTsKKyNlbmRpZgorCisJLyogdW1hX3ByZWFsbG9jKCkgZ29lcyBoZXJlLi4uICovCisKKwkv
KiBfX1VzZXJzcGFjZV9fIEFkZCB1bWVtX3JlYXAgaGVyZSBmb3IgbG93IG1lbW9yeSBzaXR1YXRp
b24/CisJICoKKwkgKi8KKworfQorCisKKworLyoKKyAqIF9fVXNlcnNwYWNlX18KKyAqCisgKiBD
b25zdHJ1Y3RvciBmb3IgTWJ1ZiBtYXN0ZXIgem9uZS4gV2UgaGF2ZSBhIGRpZmZlcmVudCBjb25z
dHJ1Y3RvcgorICogZm9yIGFsbG9jYXRpbmcgdGhlIGNsdXN0ZXIuCisgKgorICogVGhlICdhcmcn
IHBvaW50ZXIgcG9pbnRzIHRvIGEgbWJfYXJncyBzdHJ1Y3R1cmUgd2hpY2gKKyAqIGNvbnRhaW5z
IGNhbGwtc3BlY2lmaWMgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gc3VwcG9ydCB0aGUKKyAqIG1i
dWYgYWxsb2NhdGlvbiBBUEkuICBTZWUgdXNlcl9tYnVmLmguCisgKgorICogVGhlIGZsZ3MgcGFy
YW1ldGVyIGJlbG93IGNhbiBiZSBVTUVNX0RFRkFVTFQgb3IgVU1FTV9OT0ZBSUwgZGVwZW5kaW5n
IG9uIHdoYXQKKyAqIHdhcyBwYXNzZWQgd2hlbiB1bWVtX2NhY2hlX2FsbG9jIHdhcyBjYWxsZWQu
CisgKiBUT0RPOiBVc2UgVU1FTV9OT0ZBSUwgaW4gdW1lbV9jYWNoZV9hbGxvYyBhbmQgYWxzbyBk
ZWZpbmUgYSBmYWlsdXJlIGhhbmRsZXIKKyAqIGFuZCBjYWxsIHVtZW1fbm9mYWlsX2NhbGxiYWNr
KG15X2ZhaWx1cmVfaGFuZGxlcikgaW4gdGhlIHN0YWNrIGluaXRpYWxpemF0aW9uIHJvdXRpbmVz
CisgKiBUaGUgYWR2YW50YWdlIG9mIHVzaW5nIFVNRU1fTk9GQUlMIGlzIHRoYXQgd2UgZG9uJ3Qg
aGF2ZSB0byBjaGVjayBpZiB1bWVtX2NhY2hlX2FsbG9jCisgKiB3YXMgc3VjY2Vzc2Z1bCBvciBu
b3QuIFRoZSBmYWlsdXJlIGhhbmRsZXIgd291bGQgdGFrZSBjYXJlIG9mIGl0LCBpZiB3ZSB1c2Ug
dGhlIFVNRU1fTk9GQUlMCisgKiBmbGFnLgorICoKKyAqIE5PVEUgUmVmOiBodHRwOi8vZG9jcy5z
dW4uY29tL2FwcC9kb2NzL2RvYy84MTktMjI0My82bjRpMDk5cDI/bD1lbiZhPXZpZXcmcT11bWVt
X3phbGxvYykKKyAqIFRoZSB1bWVtX25vZmFpbF9jYWxsYmFjaygpIGZ1bmN0aW9uIHNldHMgdGhl
ICoqcHJvY2Vzcy13aWRlKiogVU1FTV9OT0ZBSUwgY2FsbGJhY2suCisgKiBJdCBhbHNvIG1lbnRp
b25zIHRoYXQgdW1lbV9ub2ZhaWxfY2FsbGJhY2sgaXMgRXZvbHZpbmcuCisgKgorICovCitzdGF0
aWMgaW50CittYl9jdG9yX21idWYodm9pZCAqbWVtLCB2b2lkICphcmcsIGludCBmbGdzKQorewor
I2lmIFVTSU5HX01CVUZfQ09OU1RSVUNUT1IKKwlzdHJ1Y3QgbWJ1ZiAqbTsKKwlzdHJ1Y3QgbWJf
YXJncyAqYXJnczsKKworCWludCBmbGFnczsKKwlzaG9ydCB0eXBlOworCisJbSA9IChzdHJ1Y3Qg
bWJ1ZiAqKW1lbTsKKwlhcmdzID0gKHN0cnVjdCBtYl9hcmdzICopYXJnOworCWZsYWdzID0gYXJn
cy0+ZmxhZ3M7CisJdHlwZSA9IGFyZ3MtPnR5cGU7CisKKwkvKgorCSAqIFRoZSBtYnVmIGlzIGlu
aXRpYWxpemVkIGxhdGVyLgorCSAqCisJICovCisJaWYgKHR5cGUgPT0gTVRfTk9JTklUKQorCQly
ZXR1cm4gKDApOworCisJbS0+bV9uZXh0ID0gTlVMTDsKKwltLT5tX25leHRwa3QgPSBOVUxMOwor
CW0tPm1fbGVuID0gMDsKKwltLT5tX2ZsYWdzID0gZmxhZ3M7CisJbS0+bV90eXBlID0gdHlwZTsK
KwlpZiAoZmxhZ3MgJiBNX1BLVEhEUikgeworCQltLT5tX2RhdGEgPSBtLT5tX3BrdGRhdDsKKwkJ
bS0+bV9wa3RoZHIucmN2aWYgPSBOVUxMOworCQltLT5tX3BrdGhkci5sZW4gPSAwOworCQltLT5t
X3BrdGhkci5oZWFkZXIgPSBOVUxMOworCQltLT5tX3BrdGhkci5jc3VtX2ZsYWdzID0gMDsKKwkJ
bS0+bV9wa3RoZHIuY3N1bV9kYXRhID0gMDsKKwkJbS0+bV9wa3RoZHIudHNvX3NlZ3N6ID0gMDsK
KwkJbS0+bV9wa3RoZHIuZXRoZXJfdnRhZyA9IDA7CisJCVNMSVNUX0lOSVQoJm0tPm1fcGt0aGRy
LnRhZ3MpOworCX0gZWxzZQorCQltLT5tX2RhdGEgPSBtLT5tX2RhdDsKKyNlbmRpZgorCXJldHVy
biAoMCk7Cit9CisKKworLyoKKyAqIF9fVXNlcnNwYWNlX18KKyAqIFRoZSBNYnVmIG1hc3RlciB6
b25lIGRlc3RydWN0b3IuCisgKiBUaGlzIHdvdWxkIGJlIGNhbGxlZCBpbiByZXNwb25zZSB0byB1
bWVtX2NhY2hlX2Rlc3Ryb3kKKyAqIFRPRE86IFJlY2hlY2sgaWYgdGhpcyBpcyB3aGF0IHdlIHdh
bnQgdG8gZG8gaW4gdGhpcyBkZXN0cnVjdG9yLgorICogKE5vdGU6IHRoZSBudW1iZXIgb2YgdGlt
ZXMgbWJfZHRvcl9tYnVmIGlzIGNhbGxlZCBpcyBlcXVhbCB0byB0aGUKKyAqIG51bWJlciBvZiBp
bmRpdmlkdWFsIG1idWZzIGFsbG9jYXRlZCBmcm9tIHpvbmVfbWJ1Zi4KKyAqLworc3RhdGljIHZv
aWQKK21iX2R0b3JfbWJ1Zih2b2lkICptZW0sIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbWJ1ZiAq
bTsKKworCW0gPSAoc3RydWN0IG1idWYgKiltZW07CisJaWYgKChtLT5tX2ZsYWdzICYgTV9QS1RI
RFIpICE9IDApIHsKKwkJbV90YWdfZGVsZXRlX2NoYWluKG0sIE5VTEwpOworCX0KK30KKworCisv
KiBfX1VzZXJzcGFjZV9fCisgKiBUaGUgQ2x1c3RlciB6b25lIGNvbnN0cnVjdG9yLgorICoKKyAq
IEhlcmUgdGhlICdhcmcnIHBvaW50ZXIgcG9pbnRzIHRvIHRoZSBNYnVmIHdoaWNoIHdlCisgKiBh
cmUgY29uZmlndXJpbmcgY2x1c3RlciBzdG9yYWdlIGZvci4gIElmICdhcmcnIGlzCisgKiBlbXB0
eSB3ZSBhbGxvY2F0ZSBqdXN0IHRoZSBjbHVzdGVyIHdpdGhvdXQgc2V0dGluZworICogdGhlIG1i
dWYgdG8gaXQuICBTZWUgbWJ1Zi5oLgorICovCitzdGF0aWMgaW50CittYl9jdG9yX2NsdXN0KHZv
aWQgKm1lbSwgdm9pZCAqYXJnLCBpbnQgZmxncykKK3sKKworI2lmIFVTSU5HX01CVUZfQ09OU1RS
VUNUT1IKKwlzdHJ1Y3QgbWJ1ZiAqbTsKKwlzdHJ1Y3QgY2x1c3RfYXJncyAqIGNsYTsKKwl1X2lu
dCAqcmVmY250OworCWludCB0eXBlLCBzaXplOworCXNjdHBfem9uZV90IHpvbmU7CisKKwkvKiBB
c3NpZ25pbmcgY2x1c3RlciBvZiBNQ0xCWVRFUy4gVE9ETzogQWRkIGp1bWJvIGZyYW1lIGZ1bmN0
aW9uYWxpdHkgKi8KKwl0eXBlID0gRVhUX0NMVVNURVI7CisJem9uZSA9IHpvbmVfY2x1c3Q7CisJ
c2l6ZSA9IE1DTEJZVEVTOworCisJY2xhID0gKHN0cnVjdCBjbHVzdF9hcmdzICopYXJnOworCW0g
PSBjbGEtPnBhcmVudF9tYnVmOworCisJcmVmY250ID0gU0NUUF9aT05FX0dFVCh6b25lX2V4dF9y
ZWZjbnQsIHVfaW50KTsKKwkvKnJlZmNudCA9ICh1X2ludCAqKXVtZW1fY2FjaGVfYWxsb2Moem9u
ZV9leHRfcmVmY250LCBVTUVNX0RFRkFVTFQpOyovCisJKnJlZmNudCA9IDE7CisKKwlpZiAobSAh
PSBOVUxMKSB7CisJCW0tPm1fZXh0LmV4dF9idWYgPSAoY2FkZHJfdCltZW07CisJCW0tPm1fZGF0
YSA9IG0tPm1fZXh0LmV4dF9idWY7CisJCW0tPm1fZmxhZ3MgfD0gTV9FWFQ7CisJCW0tPm1fZXh0
LmV4dF9mcmVlID0gTlVMTDsKKwkJbS0+bV9leHQuZXh0X2FyZ3MgPSBOVUxMOworCQltLT5tX2V4
dC5leHRfc2l6ZSA9IHNpemU7CisJCW0tPm1fZXh0LmV4dF90eXBlID0gdHlwZTsKKwkJbS0+bV9l
eHQucmVmX2NudCA9IHJlZmNudDsKKwl9CisjZW5kaWYKKwlyZXR1cm4gKDApOworfQorCisvKiBf
X1VzZXJzcGFjZV9fICovCitzdGF0aWMgdm9pZAorbWJfZHRvcl9jbHVzdCh2b2lkICptZW0sIHZv
aWQgKmFyZykKK3sKKworICAvKiBtZW0gaXMgb2YgdHlwZSBjYWRkcl90LiAgSW4gc3lzL3R5cGVz
Lmggd2UgaGF2ZSB0eXBlZGVmIGNoYXIgKiBjYWRkcl90OyAgKi8KKyAgLyogbWJfZHRvcl9jbHVz
dCBpcyBjYWxsZWQgYXQgdGltZSBvZiB1bWVtX2NhY2hlX2Rlc3Ryb3koKSAodGhlIG51bWJlciBv
ZiB0aW1lcworICAgKiBtYl9kdG9yX2NsdXN0IGlzIGNhbGxlZCBpcyBlcXVhbCB0byB0aGUgbnVt
YmVyIG9mIGluZGl2aWR1YWwgbWJ1ZnMgYWxsb2NhdGVkCisgICAqIGZyb20gem9uZV9jbHVzdC4g
U2ltaWxhcmx5IGZvciBtYl9kdG9yX21idWYpLgorICAgKiBBdCB0aGlzIHBvaW50IHRoZSBmb2xs
b3dpbmc6CisgICAqICBzdHJ1Y3QgbWJ1ZiAqbTsKKyAgICogICBtID0gKHN0cnVjdCBtYnVmICop
YXJnOworICAgKiAgYXNzZXJ0ICgqKG0tPm1fZXh0LnJlZl9jbnQpID09IDApOyBpcyBub3QgbWVh
bmluZ2Z1bCBzaW5jZSAgbS0+bV9leHQucmVmX2NudCA9IE5VTEw7CisgICAqICBoYXMgYmVlbiBk
b25lIGluIG1iX2ZyZWVfZXh0KCkuCisgICAqLworCit9CisKKworCisKKy8qIFVubGluayBhbmQg
ZnJlZSBhIHBhY2tldCB0YWcuICovCit2b2lkCittX3RhZ19kZWxldGUoc3RydWN0IG1idWYgKm0s
IHN0cnVjdCBtX3RhZyAqdCkKK3sKKwlLQVNTRVJUKG0gJiYgdCwgKCJtX3RhZ19kZWxldGU6IG51
bGwgYXJndW1lbnQsIG0gJXAgdCAlcCIsICh2b2lkICopbSwgKHZvaWQgKil0KSk7CisJbV90YWdf
dW5saW5rKG0sIHQpOworCW1fdGFnX2ZyZWUodCk7Cit9CisKKworLyogVW5saW5rIGFuZCBmcmVl
IGEgcGFja2V0IHRhZyBjaGFpbiwgc3RhcnRpbmcgZnJvbSBnaXZlbiB0YWcuICovCit2b2lkCitt
X3RhZ19kZWxldGVfY2hhaW4oc3RydWN0IG1idWYgKm0sIHN0cnVjdCBtX3RhZyAqdCkKK3sKKwor
CXN0cnVjdCBtX3RhZyAqcCwgKnE7CisKKwlLQVNTRVJUKG0sICgibV90YWdfZGVsZXRlX2NoYWlu
OiBudWxsIG1idWYiKSk7CisJaWYgKHQgIT0gTlVMTCkKKwkJcCA9IHQ7CisJZWxzZQorCQlwID0g
U0xJU1RfRklSU1QoJm0tPm1fcGt0aGRyLnRhZ3MpOworCWlmIChwID09IE5VTEwpCisJCXJldHVy
bjsKKwl3aGlsZSAoKHEgPSBTTElTVF9ORVhUKHAsIG1fdGFnX2xpbmspKSAhPSBOVUxMKQorCQlt
X3RhZ19kZWxldGUobSwgcSk7CisJbV90YWdfZGVsZXRlKG0sIHApOworfQorCisjaWYgMAorc3Rh
dGljIHZvaWQKK3NjdHBfcHJpbnRfbWJ1Zl9jaGFpbihzdHJ1Y3QgbWJ1ZiAqbSkKK3sKKwlTQ1RQ
X0RFQlVHX1VTUihTQ1RQX0RFQlVHX1VTUiwgIlByaW50aW5nIG1idWYgY2hhaW4gJXAuXG4iLCAo
dm9pZCAqKW0pOworCWZvcig7IG07IG09bS0+bV9uZXh0KSB7CisJCVNDVFBfREVCVUdfVVNSKFND
VFBfREVCVUdfVVNSLCAiJXA6IG1fbGVuID0gJWxkLCBtX3R5cGUgPSAleCwgbV9uZXh0ID0gJXAu
XG4iLCAodm9pZCAqKW0sIG0tPm1fbGVuLCBtLT5tX3R5cGUsICh2b2lkICopbS0+bV9uZXh0KTsK
KwkJaWYgKG0tPm1fZmxhZ3MgJiBNX0VYVCkKKwkJCVNDVFBfREVCVUdfVVNSKFNDVFBfREVCVUdf
VVNSLCAiJXA6IGV4dGVuZF9zaXplID0gJWQsIGV4dGVuZF9idWZmZXIgPSAlcCwgcmVmX2NudCA9
ICVkLlxuIiwgKHZvaWQgKiltLCBtLT5tX2V4dC5leHRfc2l6ZSwgKHZvaWQgKiltLT5tX2V4dC5l
eHRfYnVmLCAqKG0tPm1fZXh0LnJlZl9jbnQpKTsKKwl9Cit9CisjZW5kaWYKKworLyoKKyAqIEZy
ZWUgYW4gZW50aXJlIGNoYWluIG9mIG1idWZzIGFuZCBhc3NvY2lhdGVkIGV4dGVybmFsIGJ1ZmZl
cnMsIGlmCisgKiBhcHBsaWNhYmxlLgorICovCit2b2lkCittX2ZyZWVtKHN0cnVjdCBtYnVmICpt
YikKK3sKKwl3aGlsZSAobWIgIT0gTlVMTCkKKwkJbWIgPSBtX2ZyZWUobWIpOworfQorCisvKgor
ICogX19Vc2Vyc3BhY2VfXworICogY2xlYW4gbWJ1ZnMgd2l0aCBNX0VYVCBzdG9yYWdlIGF0dGFj
aGVkIHRvIHRoZW0KKyAqIGlmIHRoZSByZWZlcmVuY2UgY291bnQgaGl0cyAxLgorICovCit2b2lk
CittYl9mcmVlX2V4dChzdHJ1Y3QgbWJ1ZiAqbSkKK3sKKworCWludCBza2lwbWJ1ZjsKKworCUtB
U1NFUlQoKG0tPm1fZmxhZ3MgJiBNX0VYVCkgPT0gTV9FWFQsICgiJXM6IE1fRVhUIG5vdCBzZXQi
LCBfX2Z1bmNfXykpOworCUtBU1NFUlQobS0+bV9leHQucmVmX2NudCAhPSBOVUxMLCAoIiVzOiBy
ZWZfY250IG5vdCBzZXQiLCBfX2Z1bmNfXykpOworCisJLyoKKwkgKiBjaGVjayBpZiB0aGUgaGVh
ZGVyIGlzIGVtYmVkZGVkIGluIHRoZSBjbHVzdGVyCisJICovCisJc2tpcG1idWYgPSAobS0+bV9m
bGFncyAmIE1fTk9GUkVFKTsKKworCS8qIEZyZWUgdGhlIGV4dGVybmFsIGF0dGFjaGVkIHN0b3Jh
Z2UgaWYgdGhpcworCSAqIG1idWYgaXMgdGhlIG9ubHkgcmVmZXJlbmNlIHRvIGl0LgorCSAqX19V
c2Vyc3BhY2VfXyBUT0RPOiBqdW1ibyBmcmFtZXMKKwkgKgorCSovCisJLyogTk9URTogV2UgaGFk
IHRoZSBzYW1lIGNvZGUgdGhhdCBTQ1RQX0RFQ1JFTUVOVF9BTkRfQ0hFQ0tfUkVGQ09VTlQKKwkg
ICAgICAgICByZWR1Y2VzIHRvIGhlcmUgYmVmb3JlIGJ1dCB0aGUgSVBIT05FIG1hbGxvYyBjb21t
aXQgaGFkIGNoYW5nZWQKKwkgICAgICAgICB0aGlzIHRvIGNvbXBhcmUgdG8gMCBpbnN0ZWFkIG9m
IDEgKHNlZSBuZXh0IGxpbmUpLiAgV2h5PworCSAgICAgICAgLiAuLiB0aGlzIGNhdXNlZCBhIGh1
Z2UgbWVtb3J5IGxlYWsgaW4gTGludXguCisJKi8KKyNpZmRlZiBJUEhPTkUKKwlpZiAoYXRvbWlj
X2ZldGNoYWRkX2ludChtLT5tX2V4dC5yZWZfY250LCAtMSkgPT0gMCkKKyNlbHNlCisJaWYgKFND
VFBfREVDUkVNRU5UX0FORF9DSEVDS19SRUZDT1VOVChtLT5tX2V4dC5yZWZfY250KSkKKyNlbmRp
ZgorCXsKKwkJaWYgKG0tPm1fZXh0LmV4dF90eXBlID09IEVYVF9DTFVTVEVSKXsKKyNpZiBkZWZp
bmVkKFNDVFBfU0lNUExFX0FMTE9DQVRPUikKKwkJCW1iX2R0b3JfY2x1c3QobS0+bV9leHQuZXh0
X2J1ZiwgJmNsdXN0X21iX2FyZ3MpOworI2VuZGlmCisJCQlTQ1RQX1pPTkVfRlJFRSh6b25lX2Ns
dXN0LCBtLT5tX2V4dC5leHRfYnVmKTsKKwkJCVNDVFBfWk9ORV9GUkVFKHpvbmVfZXh0X3JlZmNu
dCwgKHVfaW50KiltLT5tX2V4dC5yZWZfY250KTsKKwkJCW0tPm1fZXh0LnJlZl9jbnQgPSBOVUxM
OworCQl9CisJfQorCisJaWYgKHNraXBtYnVmKQorCQlyZXR1cm47CisKKworCS8qIF9fVXNlcnNw
YWNlX18gQWxzbyBmcmVlaW5nIHRoZSBzdG9yYWdlIGZvciByZWZfY250CisJICogRnJlZSB0aGlz
IG1idWYgYmFjayB0byB0aGUgbWJ1ZiB6b25lIHdpdGggYWxsIG1fZXh0CisJICogaW5mb3JtYXRp
b24gcHVyZ2VkLgorCSAqLworCW0tPm1fZXh0LmV4dF9idWYgPSBOVUxMOworCW0tPm1fZXh0LmV4
dF9mcmVlID0gTlVMTDsKKwltLT5tX2V4dC5leHRfYXJncyA9IE5VTEw7CisJbS0+bV9leHQucmVm
X2NudCA9IE5VTEw7CisJbS0+bV9leHQuZXh0X3NpemUgPSAwOworCW0tPm1fZXh0LmV4dF90eXBl
ID0gMDsKKwltLT5tX2ZsYWdzICY9IH5NX0VYVDsKKyNpZiBkZWZpbmVkKFNDVFBfU0lNUExFX0FM
TE9DQVRPUikKKwltYl9kdG9yX21idWYobSwgTlVMTCk7CisjZW5kaWYKKwlTQ1RQX1pPTkVfRlJF
RSh6b25lX21idWYsIG0pOworCisJLyp1bWVtX2NhY2hlX2ZyZWUoem9uZV9tYnVmLCBtKTsqLwor
fQorCisvKgorICogIk1vdmUiIG1idWYgcGt0aGRyIGZyb20gImZyb20iIHRvICJ0byIuCisgKiAi
ZnJvbSIgbXVzdCBoYXZlIE1fUEtUSERSIHNldCwgYW5kICJ0byIgbXVzdCBiZSBlbXB0eS4KKyAq
Lwordm9pZAorbV9tb3ZlX3BrdGhkcihzdHJ1Y3QgbWJ1ZiAqdG8sIHN0cnVjdCBtYnVmICpmcm9t
KQoreworCisJdG8tPm1fZmxhZ3MgPSAoZnJvbS0+bV9mbGFncyAmIE1fQ09QWUZMQUdTKSB8ICh0
by0+bV9mbGFncyAmIE1fRVhUKTsKKwlpZiAoKHRvLT5tX2ZsYWdzICYgTV9FWFQpID09IDApCisJ
CXRvLT5tX2RhdGEgPSB0by0+bV9wa3RkYXQ7CisJdG8tPm1fcGt0aGRyID0gZnJvbS0+bV9wa3Ro
ZHI7CQkvKiBlc3BlY2lhbGx5IHRhZ3MgKi8KKwlTTElTVF9JTklUKCZmcm9tLT5tX3BrdGhkci50
YWdzKTsJLyogcHVyZ2UgdGFncyBmcm9tIHNyYyAqLworCWZyb20tPm1fZmxhZ3MgJj0gfk1fUEtU
SERSOworfQorCisKKy8qCisgKiBSZWFyYW5nZSBhbiBtYnVmIGNoYWluIHNvIHRoYXQgbGVuIGJ5
dGVzIGFyZSBjb250aWd1b3VzCisgKiBhbmQgaW4gdGhlIGRhdGEgYXJlYSBvZiBhbiBtYnVmIChz
byB0aGF0IG10b2QgYW5kIGR0b20KKyAqIHdpbGwgd29yayBmb3IgYSBzdHJ1Y3R1cmUgb2Ygc2l6
ZSBsZW4pLiAgUmV0dXJucyB0aGUgcmVzdWx0aW5nCisgKiBtYnVmIGNoYWluIG9uIHN1Y2Nlc3Ms
IGZyZWVzIGl0IGFuZCByZXR1cm5zIG51bGwgb24gZmFpbHVyZS4KKyAqIElmIHRoZXJlIGlzIHJv
b20sIGl0IHdpbGwgYWRkIHVwIHRvIG1heF9wcm90b2hkci1sZW4gZXh0cmEgYnl0ZXMgdG8gdGhl
CisgKiBjb250aWd1b3VzIHJlZ2lvbiBpbiBhbiBhdHRlbXB0IHRvIGF2b2lkIGJlaW5nIGNhbGxl
ZCBuZXh0IHRpbWUuCisgKi8KK3N0cnVjdCBtYnVmICoKK21fcHVsbHVwKHN0cnVjdCBtYnVmICpu
LCBpbnQgbGVuKQoreworCXN0cnVjdCBtYnVmICptOworCWludCBjb3VudDsKKwlpbnQgc3BhY2U7
CisKKwkvKgorCSAqIElmIGZpcnN0IG1idWYgaGFzIG5vIGNsdXN0ZXIsIGFuZCBoYXMgcm9vbSBm
b3IgbGVuIGJ5dGVzCisJICogd2l0aG91dCBzaGlmdGluZyBjdXJyZW50IGRhdGEsIHB1bGx1cCBp
bnRvIGl0LAorCSAqIG90aGVyd2lzZSBhbGxvY2F0ZSBhIG5ldyBtYnVmIHRvIHByZXBlbmQgdG8g
dGhlIGNoYWluLgorCSAqLworCWlmICgobi0+bV9mbGFncyAmIE1fRVhUKSA9PSAwICYmCisJICAg
IG4tPm1fZGF0YSArIGxlbiA8ICZuLT5tX2RhdFtNTEVOXSAmJiBuLT5tX25leHQpIHsKKwkJaWYg
KG4tPm1fbGVuID49IGxlbikKKwkJCXJldHVybiAobik7CisJCW0gPSBuOworCQluID0gbi0+bV9u
ZXh0OworCQlsZW4gLT0gbS0+bV9sZW47CisJfSBlbHNlIHsKKwkJaWYgKGxlbiA+IE1ITEVOKQor
CQkJZ290byBiYWQ7CisJCU1HRVQobSwgTV9OT1dBSVQsIG4tPm1fdHlwZSk7CisJCWlmIChtID09
IE5VTEwpCisJCQlnb3RvIGJhZDsKKwkJbS0+bV9sZW4gPSAwOworCQlpZiAobi0+bV9mbGFncyAm
IE1fUEtUSERSKQorCQkJTV9NT1ZFX1BLVEhEUihtLCBuKTsKKwl9CisJc3BhY2UgPSAoaW50KSgm
bS0+bV9kYXRbTUxFTl0gLSAobS0+bV9kYXRhICsgbS0+bV9sZW4pKTsKKwlkbyB7CisJCWNvdW50
ID0gbWluKG1pbihtYXgobGVuLCBtYXhfcHJvdG9oZHIpLCBzcGFjZSksIG4tPm1fbGVuKTsKKwkJ
bWVtY3B5KG10b2QobSwgY2FkZHJfdCkgKyBtLT5tX2xlbixtdG9kKG4sIGNhZGRyX3QpLCAodV9p
bnQpY291bnQpOworCQlsZW4gLT0gY291bnQ7CisJCW0tPm1fbGVuICs9IGNvdW50OworCQluLT5t
X2xlbiAtPSBjb3VudDsKKwkJc3BhY2UgLT0gY291bnQ7CisJCWlmIChuLT5tX2xlbikKKwkJCW4t
Pm1fZGF0YSArPSBjb3VudDsKKwkJZWxzZQorCQkJbiA9IG1fZnJlZShuKTsKKwl9IHdoaWxlIChs
ZW4gPiAwICYmIG4pOworCWlmIChsZW4gPiAwKSB7CisJCSh2b2lkKSBtX2ZyZWUobSk7CisJCWdv
dG8gYmFkOworCX0KKwltLT5tX25leHQgPSBuOworCXJldHVybiAobSk7CitiYWQ6CisJbV9mcmVl
bShuKTsKKwlyZXR1cm4gKE5VTEwpOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgbWJ1ZiAqCittX2R1
cDEoc3RydWN0IG1idWYgKm0sIGludCBvZmYsIGludCBsZW4sIGludCB3YWl0KQoreworCXN0cnVj
dCBtYnVmICpuID0gTlVMTDsKKwlpbnQgY29weWhkcjsKKworCWlmIChsZW4gPiBNQ0xCWVRFUykK
KwkJcmV0dXJuIE5VTEw7CisJaWYgKG9mZiA9PSAwICYmIChtLT5tX2ZsYWdzICYgTV9QS1RIRFIp
ICE9IDApCisJCWNvcHloZHIgPSAxOworCWVsc2UKKwkJY29weWhkciA9IDA7CisJaWYgKGxlbiA+
PSBNSU5DTFNJWkUpIHsKKwkJaWYgKGNvcHloZHIgPT0gMSkgeworCQkJbV9jbGdldChuLCB3YWl0
KTsgLyogVE9ETzogaW5jbHVkZSBjb2RlIGZvciBjb3B5aW5nIHRoZSBoZWFkZXIgKi8KKwkJCW1f
ZHVwX3BrdGhkcihuLCBtLCB3YWl0KTsKKwkJfSBlbHNlCisJCQltX2NsZ2V0KG4sIHdhaXQpOwor
CX0gZWxzZSB7CisJCWlmIChjb3B5aGRyID09IDEpCisJCQluID0gbV9nZXRoZHIod2FpdCwgbS0+
bV90eXBlKTsKKwkJZWxzZQorCQkJbiA9IG1fZ2V0KHdhaXQsIG0tPm1fdHlwZSk7CisJfQorCWlm
ICghbikKKwkJcmV0dXJuIE5VTEw7IC8qIEVOT0JVRlMgKi8KKworCWlmIChjb3B5aGRyICYmICFt
X2R1cF9wa3RoZHIobiwgbSwgd2FpdCkpIHsKKwkJbV9mcmVlKG4pOworCQlyZXR1cm4gTlVMTDsK
Kwl9CisJbV9jb3B5ZGF0YShtLCBvZmYsIGxlbiwgbXRvZChuLCBjYWRkcl90KSk7CisJbi0+bV9s
ZW4gPSBsZW47CisJcmV0dXJuIG47Cit9CisKKworLyogVGFrZW4gZnJvbSBzeXMva2Vybi91aXBj
X21idWYyLmMgKi8KK3N0cnVjdCBtYnVmICoKK21fcHVsbGRvd24oc3RydWN0IG1idWYgKm0sIGlu
dCBvZmYsIGludCBsZW4sIGludCAqb2ZmcCkKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbiwgKm87CisJaW50
IGhsZW4sIHRsZW4sIG9sZW47CisJaW50IHdyaXRhYmxlOworCisJLyogY2hlY2sgaW52YWxpZCBh
cmd1bWVudHMuICovCisJS0FTU0VSVChtLCAoIm0gPT0gTlVMTCBpbiBtX3B1bGxkb3duKCkiKSk7
CisJaWYgKGxlbiA+IE1DTEJZVEVTKSB7CisJCW1fZnJlZW0obSk7CisJCXJldHVybiBOVUxMOyAg
ICAvKiBpbXBvc3NpYmxlICovCisJfQorCisjaWZkZWYgUFVMTERPV05fREVCVUcKKwl7CisJCXN0
cnVjdCBtYnVmICp0OworCQlTQ1RQX0RFQlVHX1VTUihTQ1RQX0RFQlVHX1VTUiwgImJlZm9yZToi
KTsKKwkJZm9yICh0ID0gbTsgdDsgdCA9IHQtPm1fbmV4dCkKKwkJCVNDVFBfREVCVUdfVVNSKFND
VFBfREVCVUdfVVNSLCAiICVkIiwgdC0+bV9sZW4pOworCQlTQ1RQX0RFQlVHX1VTUihTQ1RQX0RF
QlVHX1VTUiwgIlxuIik7CisJfQorI2VuZGlmCisJbiA9IG07CisJd2hpbGUgKG4gIT0gTlVMTCAm
JiBvZmYgPiAwKSB7CisJCWlmIChuLT5tX2xlbiA+IG9mZikKKwkJCWJyZWFrOworCQlvZmYgLT0g
bi0+bV9sZW47CisJCW4gPSBuLT5tX25leHQ7CisJfQorCS8qIGJlIHN1cmUgdG8gcG9pbnQgbm9u
LWVtcHR5IG1idWYgKi8KKwl3aGlsZSAobiAhPSBOVUxMICYmIG4tPm1fbGVuID09IDApCisJCW4g
PSBuLT5tX25leHQ7CisJaWYgKCFuKSB7CisJCW1fZnJlZW0obSk7CisJCXJldHVybiBOVUxMOyAg
ICAvKiBtYnVmIGNoYWluIHRvbyBzaG9ydCAqLworCX0KKworCXdyaXRhYmxlID0gMDsKKwlpZiAo
KG4tPm1fZmxhZ3MgJiBNX0VYVCkgPT0gMCB8fAorCSAgICAobi0+bV9leHQuZXh0X3R5cGUgPT0g
RVhUX0NMVVNURVIgJiYgTV9XUklUQUJMRShuKSkpCisJCXdyaXRhYmxlID0gMTsKKworCS8qCisJ
ICogdGhlIHRhcmdldCBkYXRhIGlzIG9uIDxuLCBvZmY+LgorCSAqIGlmIHdlIGdvdCBlbm91Z2gg
ZGF0YSBvbiB0aGUgbWJ1ZiAibiIsIHdlJ3JlIGRvbmUuCisJICovCisJaWYgKChvZmYgPT0gMCB8
fCBvZmZwKSAmJiBsZW4gPD0gbi0+bV9sZW4gLSBvZmYgJiYgd3JpdGFibGUpCisJCWdvdG8gb2s7
CisKKwkvKgorCSAqIHdoZW4gbGVuIDw9IG4tPm1fbGVuIC0gb2ZmIGFuZCBvZmYgIT0gMCwgaXQg
aXMgYSBzcGVjaWFsIGNhc2UuCisJICogbGVuIGJ5dGVzIGZyb20gPG4sIG9mZj4gc2l0cyBpbiBz
aW5nbGUgbWJ1ZiwgYnV0IHRoZSBjYWxsZXIgZG9lcworCSAqIG5vdCBsaWtlIHRoZSBzdGFydGlu
ZyBwb3NpdGlvbiAob2ZmKS4KKwkgKiBjaG9wIHRoZSBjdXJyZW50IG1idWYgaW50byB0d28gcGll
Y2VzLCBzZXQgb2ZmIHRvIDAuCisJICovCisJaWYgKGxlbiA8PSBuLT5tX2xlbiAtIG9mZikgewor
CQlvID0gbV9kdXAxKG4sIG9mZiwgbi0+bV9sZW4gLSBvZmYsIE1fTk9XQUlUKTsKKwkJaWYgKG8g
PT0gTlVMTCkgeworCQkJbV9mcmVlbShtKTsKKwkJcmV0dXJuIE5VTEw7ICAgIC8qIEVOT0JVRlMg
Ki8KKwkJfQorCQluLT5tX2xlbiA9IG9mZjsKKwkJby0+bV9uZXh0ID0gbi0+bV9uZXh0OworCQlu
LT5tX25leHQgPSBvOworCQluID0gbi0+bV9uZXh0OworCQlvZmYgPSAwOworCQlnb3RvIG9rOwor
CX0KKwkvKgorCSAqIHdlIG5lZWQgdG8gdGFrZSBobGVuIGZyb20gPG4sIG9mZj4gYW5kIHRsZW4g
ZnJvbSA8bi0+bV9uZXh0LCAwPiwKKwkgKiBhbmQgY29uc3RydWN0IGNvbnRpZ3VvdXMgbWJ1ZiB3
aXRoIG1fbGVuID09IGxlbi4KKwkgKiBub3RlIHRoYXQgaGxlbiArIHRsZW4gPT0gbGVuLCBhbmQg
dGxlbiA+IDAuCisJICovCisJaGxlbiA9IG4tPm1fbGVuIC0gb2ZmOworCXRsZW4gPSBsZW4gLSBo
bGVuOworCisJLyoKKwkgKiBlbnN1cmUgdGhhdCB3ZSBoYXZlIGVub3VnaCB0cmFpbGluZyBkYXRh
IG9uIG1idWYgY2hhaW4uCisJICogaWYgbm90LCB3ZSBjYW4gZG8gbm90aGluZyBhYm91dCB0aGUg
Y2hhaW4uCisJICovCisJb2xlbiA9IDA7CisJZm9yIChvID0gbi0+bV9uZXh0OyBvICE9IE5VTEw7
IG8gPSBvLT5tX25leHQpCisJCW9sZW4gKz0gby0+bV9sZW47CisJaWYgKGhsZW4gKyBvbGVuIDwg
bGVuKSB7CisJCW1fZnJlZW0obSk7CisJCXJldHVybiBOVUxMOyAgICAvKiBtYnVmIGNoYWluIHRv
byBzaG9ydCAqLworCX0KKworCS8qCisJICogZWFzeSBjYXNlcyBmaXJzdC4KKwkgKiB3ZSBuZWVk
IHRvIHVzZSBtX2NvcHlkYXRhKCkgdG8gZ2V0IGRhdGEgZnJvbSA8bi0+bV9uZXh0LCAwPi4KKwkg
Ki8KKwlpZiAoKG9mZiA9PSAwIHx8IG9mZnApICYmIChNX1RSQUlMSU5HU1BBQ0UobikgPj0gdGxl
bikgJiYgd3JpdGFibGUpIHsKKwkJbV9jb3B5ZGF0YShuLT5tX25leHQsIDAsIHRsZW4sIG10b2Qo
biwgY2FkZHJfdCkgKyBuLT5tX2xlbik7CisJCW4tPm1fbGVuICs9IHRsZW47CisJCW1fYWRqKG4t
Pm1fbmV4dCwgdGxlbik7CisJCWdvdG8gb2s7CisJfQorCisJaWYgKChvZmYgPT0gMCB8fCBvZmZw
KSAmJiAoTV9MRUFESU5HU1BBQ0Uobi0+bV9uZXh0KSA+PSBobGVuKSAmJiB3cml0YWJsZSkgewor
CQluLT5tX25leHQtPm1fZGF0YSAtPSBobGVuOworCQluLT5tX25leHQtPm1fbGVuICs9IGhsZW47
CisJCW1lbWNweSggbXRvZChuLT5tX25leHQsIGNhZGRyX3QpLCBtdG9kKG4sIGNhZGRyX3QpICsg
b2ZmLGhsZW4pOworCQluLT5tX2xlbiAtPSBobGVuOworCQluID0gbi0+bV9uZXh0OworCQlvZmYg
PSAwOworCQlnb3RvIG9rOworCX0KKworCS8qCisJICogbm93LCB3ZSBuZWVkIHRvIGRvIHRoZSBo
YXJkIHdheS4gIGRvbid0IG1fY29weSBhcyB0aGVyZSdzIG5vIHJvb20KKwkgKiBvbiBib3RoIGVu
ZC4KKwkgKi8KKwlpZiAobGVuID4gTUxFTikKKwkJbV9jbGdldChvLCBNX05PV0FJVCk7CisJCS8q
IG8gPSBtX2dldGNsKE1fTk9XQUlULCBtLT5tX3R5cGUsIDApOyovCisJZWxzZQorCQlvID0gbV9n
ZXQoTV9OT1dBSVQsIG0tPm1fdHlwZSk7CisJaWYgKCFvKSB7CisJCW1fZnJlZW0obSk7CisJCXJl
dHVybiBOVUxMOyAgICAvKiBFTk9CVUZTICovCisJfQorCS8qIGdldCBobGVuIGZyb20gPG4sIG9m
Zj4gaW50byA8bywgMD4gKi8KKwlvLT5tX2xlbiA9IGhsZW47CisJbWVtY3B5KG10b2QobywgY2Fk
ZHJfdCksIG10b2QobiwgY2FkZHJfdCkgKyBvZmYsIGhsZW4pOworCW4tPm1fbGVuIC09IGhsZW47
CisJLyogZ2V0IHRsZW4gZnJvbSA8bi0+bV9uZXh0LCAwPiBpbnRvIDxvLCBobGVuPiAqLworCW1f
Y29weWRhdGEobi0+bV9uZXh0LCAwLCB0bGVuLCBtdG9kKG8sIGNhZGRyX3QpICsgby0+bV9sZW4p
OworCW8tPm1fbGVuICs9IHRsZW47CisJbV9hZGoobi0+bV9uZXh0LCB0bGVuKTsKKwlvLT5tX25l
eHQgPSBuLT5tX25leHQ7CisJbi0+bV9uZXh0ID0gbzsKKwluID0gbzsKKwlvZmYgPSAwOworb2s6
CisjaWZkZWYgUFVMTERPV05fREVCVUcKKwl7CisJCXN0cnVjdCBtYnVmICp0OworCQlTQ1RQX0RF
QlVHX1VTUihTQ1RQX0RFQlVHX1VTUiwgImFmdGVyOiIpOworCQlmb3IgKHQgPSBtOyB0OyB0ID0g
dC0+bV9uZXh0KQorCQkJU0NUUF9ERUJVR19VU1IoU0NUUF9ERUJVR19VU1IsICIlYyVkIiwgdCA9
PSBuID8gJyonIDogJyAnLCB0LT5tX2xlbik7CisJCVNDVFBfREVCVUdfVVNSKFNDVFBfREVCVUdf
VVNSLCAiIChvZmY9JWQpXG4iLCBvZmYpOworCX0KKyNlbmRpZgorCWlmIChvZmZwKQorCQkqb2Zm
cCA9IG9mZjsKKwlyZXR1cm4gbjsKK30KKworLyoKKyAqIEF0dGFjaCB0aGUgdGhlIGNsdXN0ZXIg
ZnJvbSAqbSB0byAqbiwgc2V0IHVwIG1fZXh0IGluICpuCisgKiBhbmQgYnVtcCB0aGUgcmVmY291
bnQgb2YgdGhlIGNsdXN0ZXIuCisgKi8KK3N0YXRpYyB2b2lkCittYl9kdXBjbChzdHJ1Y3QgbWJ1
ZiAqbiwgc3RydWN0IG1idWYgKm0pCit7CisJS0FTU0VSVCgobS0+bV9mbGFncyAmIE1fRVhUKSA9
PSBNX0VYVCwgKCIlczogTV9FWFQgbm90IHNldCIsIF9fZnVuY19fKSk7CisJS0FTU0VSVChtLT5t
X2V4dC5yZWZfY250ICE9IE5VTEwsICgiJXM6IHJlZl9jbnQgbm90IHNldCIsIF9fZnVuY19fKSk7
CisJS0FTU0VSVCgobi0+bV9mbGFncyAmIE1fRVhUKSA9PSAwLCAoIiVzOiBNX0VYVCBzZXQiLCBf
X2Z1bmNfXykpOworCisJaWYgKCoobS0+bV9leHQucmVmX2NudCkgPT0gMSkKKwkJKihtLT5tX2V4
dC5yZWZfY250KSArPSAxOworCWVsc2UKKwkJYXRvbWljX2FkZF9pbnQobS0+bV9leHQucmVmX2Nu
dCwgMSk7CisJbi0+bV9leHQuZXh0X2J1ZiA9IG0tPm1fZXh0LmV4dF9idWY7CisJbi0+bV9leHQu
ZXh0X2ZyZWUgPSBtLT5tX2V4dC5leHRfZnJlZTsKKwluLT5tX2V4dC5leHRfYXJncyA9IG0tPm1f
ZXh0LmV4dF9hcmdzOworCW4tPm1fZXh0LmV4dF9zaXplID0gbS0+bV9leHQuZXh0X3NpemU7CisJ
bi0+bV9leHQucmVmX2NudCA9IG0tPm1fZXh0LnJlZl9jbnQ7CisJbi0+bV9leHQuZXh0X3R5cGUg
PSBtLT5tX2V4dC5leHRfdHlwZTsKKwluLT5tX2ZsYWdzIHw9IE1fRVhUOworfQorCisKKy8qCisg
KiBNYWtlIGEgY29weSBvZiBhbiBtYnVmIGNoYWluIHN0YXJ0aW5nICJvZmYwIiBieXRlcyBmcm9t
IHRoZSBiZWdpbm5pbmcsCisgKiBjb250aW51aW5nIGZvciAibGVuIiBieXRlcy4gIElmIGxlbiBp
cyBNX0NPUFlBTEwsIGNvcHkgdG8gZW5kIG9mIG1idWYuCisgKiBUaGUgd2FpdCBwYXJhbWV0ZXIg
aXMgYSBjaG9pY2Ugb2YgTV9UUllXQUlUL01fTk9XQUlUIGZyb20gY2FsbGVyLgorICogTm90ZSB0
aGF0IHRoZSBjb3B5IGlzIHJlYWQtb25seSwgYmVjYXVzZSBjbHVzdGVycyBhcmUgbm90IGNvcGll
ZCwKKyAqIG9ubHkgdGhlaXIgcmVmZXJlbmNlIGNvdW50cyBhcmUgaW5jcmVtZW50ZWQuCisgKi8K
Kworc3RydWN0IG1idWYgKgorbV9jb3B5bShzdHJ1Y3QgbWJ1ZiAqbSwgaW50IG9mZjAsIGludCBs
ZW4sIGludCB3YWl0KQoreworCXN0cnVjdCBtYnVmICpuLCAqKm5wOworCWludCBvZmYgPSBvZmYw
OworCXN0cnVjdCBtYnVmICp0b3A7CisJaW50IGNvcHloZHIgPSAwOworCisJS0FTU0VSVChvZmYg
Pj0gMCwgKCJtX2NvcHltLCBuZWdhdGl2ZSBvZmYgJWQiLCBvZmYpKTsKKwlLQVNTRVJUKGxlbiA+
PSAwLCAoIm1fY29weW0sIG5lZ2F0aXZlIGxlbiAlZCIsIGxlbikpOworCUtBU1NFUlQobSAhPSBO
VUxMLCAoIm1fY29weW0sIG0gaXMgTlVMTCIpKTsKKworI2lmICFkZWZpbmVkKElOVkFSSUFOVFMp
CisJaWYgKG0gPT0gTlVMTCkgeworCQlyZXR1cm4gKE5VTEwpOworCX0KKyNlbmRpZgorCWlmIChv
ZmYgPT0gMCAmJiBtLT5tX2ZsYWdzICYgTV9QS1RIRFIpCisJCWNvcHloZHIgPSAxOworCXdoaWxl
IChvZmYgPiAwKSB7CisJCUtBU1NFUlQobSAhPSBOVUxMLCAoIm1fY29weW0sIG9mZnNldCA+IHNp
emUgb2YgbWJ1ZiBjaGFpbiIpKTsKKwkJaWYgKG9mZiA8IG0tPm1fbGVuKQorCQkJYnJlYWs7CisJ
CW9mZiAtPSBtLT5tX2xlbjsKKwkJbSA9IG0tPm1fbmV4dDsKKwl9CisJbnAgPSAmdG9wOworCXRv
cCA9IDA7CisJd2hpbGUgKGxlbiA+IDApIHsKKwkJaWYgKG0gPT0gTlVMTCkgeworCQkJS0FTU0VS
VChsZW4gPT0gTV9DT1BZQUxMLCAoIm1fY29weW0sIGxlbmd0aCA+IHNpemUgb2YgbWJ1ZiBjaGFp
biIpKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChjb3B5aGRyKQorCQkJTUdFVEhEUihuLCB3YWl0
LCBtLT5tX3R5cGUpOworCQllbHNlCisJCQlNR0VUKG4sIHdhaXQsIG0tPm1fdHlwZSk7CisJCSpu
cCA9IG47CisJCWlmIChuID09IE5VTEwpCisJCQlnb3RvIG5vc3BhY2U7CisJCWlmIChjb3B5aGRy
KSB7CisJCQlpZiAoIW1fZHVwX3BrdGhkcihuLCBtLCB3YWl0KSkKKwkJCQlnb3RvIG5vc3BhY2U7
CisJCQlpZiAobGVuID09IE1fQ09QWUFMTCkKKwkJCQluLT5tX3BrdGhkci5sZW4gLT0gb2ZmMDsK
KwkJCWVsc2UKKwkJCQluLT5tX3BrdGhkci5sZW4gPSBsZW47CisJCQljb3B5aGRyID0gMDsKKwkJ
fQorCQluLT5tX2xlbiA9IG1pbihsZW4sIG0tPm1fbGVuIC0gb2ZmKTsKKwkJaWYgKG0tPm1fZmxh
Z3MgJiBNX0VYVCkgeworCQkJbi0+bV9kYXRhID0gbS0+bV9kYXRhICsgb2ZmOworCQkJbWJfZHVw
Y2wobiwgbSk7CisJCX0gZWxzZQorCQkJbWVtY3B5KG10b2QobiwgY2FkZHJfdCksIG10b2QobSwg
Y2FkZHJfdCkgKyBvZmYsICh1X2ludCluLT5tX2xlbik7CisJCWlmIChsZW4gIT0gTV9DT1BZQUxM
KQorCQkJbGVuIC09IG4tPm1fbGVuOworCQlvZmYgPSAwOworCQltID0gbS0+bV9uZXh0OworCQlu
cCA9ICZuLT5tX25leHQ7CisJfQorCisJcmV0dXJuICh0b3ApOworbm9zcGFjZToKKwltX2ZyZWVt
KHRvcCk7CisJcmV0dXJuIChOVUxMKTsKK30KKworCitpbnQKK21fdGFnX2NvcHlfY2hhaW4oc3Ry
dWN0IG1idWYgKnRvLCBzdHJ1Y3QgbWJ1ZiAqZnJvbSwgaW50IGhvdykKK3sKKwlzdHJ1Y3QgbV90
YWcgKnAsICp0LCAqdHByZXYgPSBOVUxMOworCisJS0FTU0VSVCh0byAmJiBmcm9tLCAoIm1fdGFn
X2NvcHlfY2hhaW46IG51bGwgYXJndW1lbnQsIHRvICVwIGZyb20gJXAiLCAodm9pZCAqKXRvLCAo
dm9pZCAqKWZyb20pKTsKKwltX3RhZ19kZWxldGVfY2hhaW4odG8sIE5VTEwpOworCVNMSVNUX0ZP
UkVBQ0gocCwgJmZyb20tPm1fcGt0aGRyLnRhZ3MsIG1fdGFnX2xpbmspIHsKKwkJdCA9IG1fdGFn
X2NvcHkocCwgaG93KTsKKwkJaWYgKHQgPT0gTlVMTCkgeworCQkJbV90YWdfZGVsZXRlX2NoYWlu
KHRvLCBOVUxMKTsKKwkJCXJldHVybiAwOworCQl9CisJCWlmICh0cHJldiA9PSBOVUxMKQorCQkJ
U0xJU1RfSU5TRVJUX0hFQUQoJnRvLT5tX3BrdGhkci50YWdzLCB0LCBtX3RhZ19saW5rKTsKKwkJ
ZWxzZQorCQkJU0xJU1RfSU5TRVJUX0FGVEVSKHRwcmV2LCB0LCBtX3RhZ19saW5rKTsKKwkJdHBy
ZXYgPSB0OworCX0KKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIER1cGxpY2F0ZSAiZnJvbSIncyBt
YnVmIHBrdGhkciBpbiAidG8iLgorICogImZyb20iIG11c3QgaGF2ZSBNX1BLVEhEUiBzZXQsIGFu
ZCAidG8iIG11c3QgYmUgZW1wdHkuCisgKiBJbiBwYXJ0aWN1bGFyLCB0aGlzIGRvZXMgYSBkZWVw
IGNvcHkgb2YgdGhlIHBhY2tldCB0YWdzLgorICovCitpbnQKK21fZHVwX3BrdGhkcihzdHJ1Y3Qg
bWJ1ZiAqdG8sIHN0cnVjdCBtYnVmICpmcm9tLCBpbnQgaG93KQoreworCisJS0FTU0VSVCh0bywg
KCJtX2R1cF9wa3RoZHI6IHRvIGlzIE5VTEwiKSk7CisJS0FTU0VSVChmcm9tLCAoIm1fZHVwX3Br
dGhkcjogZnJvbSBpcyBOVUxMIikpOworCXRvLT5tX2ZsYWdzID0gKGZyb20tPm1fZmxhZ3MgJiBN
X0NPUFlGTEFHUykgfCAodG8tPm1fZmxhZ3MgJiBNX0VYVCk7CisJaWYgKCh0by0+bV9mbGFncyAm
IE1fRVhUKSA9PSAwKQorCQl0by0+bV9kYXRhID0gdG8tPm1fcGt0ZGF0OworCXRvLT5tX3BrdGhk
ciA9IGZyb20tPm1fcGt0aGRyOworCVNMSVNUX0lOSVQoJnRvLT5tX3BrdGhkci50YWdzKTsKKwly
ZXR1cm4gKG1fdGFnX2NvcHlfY2hhaW4odG8sIGZyb20sIE1CVE9NKGhvdykpKTsKK30KKworLyog
Q29weSBhIHNpbmdsZSB0YWcuICovCitzdHJ1Y3QgbV90YWcgKgorbV90YWdfY29weShzdHJ1Y3Qg
bV90YWcgKnQsIGludCBob3cpCit7CisJc3RydWN0IG1fdGFnICpwOworCisJS0FTU0VSVCh0LCAo
Im1fdGFnX2NvcHk6IG51bGwgdGFnIikpOworCXAgPSBtX3RhZ19hbGxvYyh0LT5tX3RhZ19jb29r
aWUsIHQtPm1fdGFnX2lkLCB0LT5tX3RhZ19sZW4sIGhvdyk7CisJaWYgKHAgPT0gTlVMTCkKKwkJ
cmV0dXJuIChOVUxMKTsKKwltZW1jcHkocCArIDEsIHQgKyAxLCB0LT5tX3RhZ19sZW4pOyAvKiBD
b3B5IHRoZSBkYXRhICovCisJcmV0dXJuIHA7Cit9CisKKy8qIEdldCBhIHBhY2tldCB0YWcgc3Ry
dWN0dXJlIGFsb25nIHdpdGggc3BlY2lmaWVkIGRhdGEgZm9sbG93aW5nLiAqLworc3RydWN0IG1f
dGFnICoKK21fdGFnX2FsbG9jKHVpbnQzMl90IGNvb2tpZSwgaW50IHR5cGUsIGludCBsZW4sIGlu
dCB3YWl0KQoreworCXN0cnVjdCBtX3RhZyAqdDsKKworCWlmIChsZW4gPCAwKQorCQlyZXR1cm4g
TlVMTDsKKwl0ID0gbWFsbG9jKGxlbiArIHNpemVvZihzdHJ1Y3QgbV90YWcpKTsKKwlpZiAodCA9
PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwltX3RhZ19zZXR1cCh0LCBjb29raWUsIHR5cGUsIGxl
bik7CisJdC0+bV90YWdfZnJlZSA9IG1fdGFnX2ZyZWVfZGVmYXVsdDsKKwlyZXR1cm4gdDsKK30K
KworLyogRnJlZSBhIHBhY2tldCB0YWcuICovCit2b2lkCittX3RhZ19mcmVlX2RlZmF1bHQoc3Ry
dWN0IG1fdGFnICp0KQoreworICBmcmVlKHQpOworfQorCisvKgorICogQ29weSBkYXRhIGZyb20g
YSBidWZmZXIgYmFjayBpbnRvIHRoZSBpbmRpY2F0ZWQgbWJ1ZiBjaGFpbiwKKyAqIHN0YXJ0aW5n
ICJvZmYiIGJ5dGVzIGZyb20gdGhlIGJlZ2lubmluZywgZXh0ZW5kaW5nIHRoZSBtYnVmCisgKiBj
aGFpbiBpZiBuZWNlc3NhcnkuCisgKi8KK3ZvaWQKK21fY29weWJhY2soc3RydWN0IG1idWYgKm0w
LCBpbnQgb2ZmLCBpbnQgbGVuLCBjYWRkcl90IGNwKQoreworCWludCBtbGVuOworCXN0cnVjdCBt
YnVmICptID0gbTAsICpuOworCWludCB0b3RsZW4gPSAwOworCisJaWYgKG0wID09IE5VTEwpCisJ
CXJldHVybjsKKwl3aGlsZSAob2ZmID4gKG1sZW4gPSBtLT5tX2xlbikpIHsKKwkJb2ZmIC09IG1s
ZW47CisJCXRvdGxlbiArPSBtbGVuOworCQlpZiAobS0+bV9uZXh0ID09IE5VTEwpIHsKKwkJCW4g
PSBtX2dldChNX05PV0FJVCwgbS0+bV90eXBlKTsKKwkJCWlmIChuID09IE5VTEwpCisJCQkJZ290
byBvdXQ7CisJCQltZW1zZXQobXRvZChuLCBjYWRkcl90KSwgMCwgTUxFTik7CisJCQluLT5tX2xl
biA9IG1pbihNTEVOLCBsZW4gKyBvZmYpOworCQkJbS0+bV9uZXh0ID0gbjsKKwkJfQorCQltID0g
bS0+bV9uZXh0OworCX0KKwl3aGlsZSAobGVuID4gMCkgeworCQltbGVuID0gbWluIChtLT5tX2xl
biAtIG9mZiwgbGVuKTsKKwkJbWVtY3B5KG9mZiArIG10b2QobSwgY2FkZHJfdCksIGNwLCAodV9p
bnQpbWxlbik7CisJCWNwICs9IG1sZW47CisJCWxlbiAtPSBtbGVuOworCQltbGVuICs9IG9mZjsK
KwkJb2ZmID0gMDsKKwkJdG90bGVuICs9IG1sZW47CisJCWlmIChsZW4gPT0gMCkKKwkJCWJyZWFr
OworCQlpZiAobS0+bV9uZXh0ID09IE5VTEwpIHsKKwkJCW4gPSBtX2dldChNX05PV0FJVCwgbS0+
bV90eXBlKTsKKwkJCWlmIChuID09IE5VTEwpCisJCQkJYnJlYWs7CisJCQluLT5tX2xlbiA9IG1p
bihNTEVOLCBsZW4pOworCQkJbS0+bV9uZXh0ID0gbjsKKwkJfQorCQltID0gbS0+bV9uZXh0Owor
CX0KK291dDoJaWYgKCgobSA9IG0wKS0+bV9mbGFncyAmIE1fUEtUSERSKSAmJiAobS0+bV9wa3Ro
ZHIubGVuIDwgdG90bGVuKSkKKwkJbS0+bV9wa3RoZHIubGVuID0gdG90bGVuOworfQorCisKKy8q
CisgKiBMZXNzZXItdXNlZCBwYXRoIGZvciBNX1BSRVBFTkQ6CisgKiBhbGxvY2F0ZSBuZXcgbWJ1
ZiB0byBwcmVwZW5kIHRvIGNoYWluLAorICogY29weSBqdW5rIGFsb25nLgorICovCitzdHJ1Y3Qg
bWJ1ZiAqCittX3ByZXBlbmQoc3RydWN0IG1idWYgKm0sIGludCBsZW4sIGludCBob3cpCit7CisJ
c3RydWN0IG1idWYgKm1uOworCisJaWYgKG0tPm1fZmxhZ3MgJiBNX1BLVEhEUikKKwkJTUdFVEhE
UihtbiwgaG93LCBtLT5tX3R5cGUpOworCWVsc2UKKwkJTUdFVChtbiwgaG93LCBtLT5tX3R5cGUp
OworCWlmIChtbiA9PSBOVUxMKSB7CisJCW1fZnJlZW0obSk7CisJCXJldHVybiAoTlVMTCk7CisJ
fQorCWlmIChtLT5tX2ZsYWdzICYgTV9QS1RIRFIpCisJCU1fTU9WRV9QS1RIRFIobW4sIG0pOwor
CW1uLT5tX25leHQgPSBtOworCW0gPSBtbjsKKwlpZiAobS0+bV9mbGFncyAmIE1fUEtUSERSKSB7
CisJCWlmIChsZW4gPCBNSExFTikKKwkJCU1IX0FMSUdOKG0sIGxlbik7CisJfSBlbHNlIHsKKwkJ
aWYgKGxlbiA8IE1MRU4pCisJCQlNX0FMSUdOKG0sIGxlbik7CisJfQorCW0tPm1fbGVuID0gbGVu
OworCXJldHVybiAobSk7Cit9CisKKy8qCisgKiBDb3B5IGRhdGEgZnJvbSBhbiBtYnVmIGNoYWlu
IHN0YXJ0aW5nICJvZmYiIGJ5dGVzIGZyb20gdGhlIGJlZ2lubmluZywKKyAqIGNvbnRpbnVpbmcg
Zm9yICJsZW4iIGJ5dGVzLCBpbnRvIHRoZSBpbmRpY2F0ZWQgYnVmZmVyLgorICovCit2b2lkCitt
X2NvcHlkYXRhKGNvbnN0IHN0cnVjdCBtYnVmICptLCBpbnQgb2ZmLCBpbnQgbGVuLCBjYWRkcl90
IGNwKQoreworCXVfaW50IGNvdW50OworCisJS0FTU0VSVChvZmYgPj0gMCwgKCJtX2NvcHlkYXRh
LCBuZWdhdGl2ZSBvZmYgJWQiLCBvZmYpKTsKKwlLQVNTRVJUKGxlbiA+PSAwLCAoIm1fY29weWRh
dGEsIG5lZ2F0aXZlIGxlbiAlZCIsIGxlbikpOworCXdoaWxlIChvZmYgPiAwKSB7CisJCUtBU1NF
UlQobSAhPSBOVUxMLCAoIm1fY29weWRhdGEsIG9mZnNldCA+IHNpemUgb2YgbWJ1ZiBjaGFpbiIp
KTsKKwkJaWYgKG9mZiA8IG0tPm1fbGVuKQorCQkJYnJlYWs7CisJCW9mZiAtPSBtLT5tX2xlbjsK
KwkJbSA9IG0tPm1fbmV4dDsKKwl9CisJd2hpbGUgKGxlbiA+IDApIHsKKwkJS0FTU0VSVChtICE9
IE5VTEwsICgibV9jb3B5ZGF0YSwgbGVuZ3RoID4gc2l6ZSBvZiBtYnVmIGNoYWluIikpOworCQlj
b3VudCA9IG1pbihtLT5tX2xlbiAtIG9mZiwgbGVuKTsKKwkJbWVtY3B5KGNwLCBtdG9kKG0sIGNh
ZGRyX3QpICsgb2ZmLCBjb3VudCk7CisJCWxlbiAtPSBjb3VudDsKKwkJY3AgKz0gY291bnQ7CisJ
CW9mZiA9IDA7CisJCW0gPSBtLT5tX25leHQ7CisJfQorfQorCisKKy8qCisgKiBDb25jYXRlbmF0
ZSBtYnVmIGNoYWluIG4gdG8gbS4KKyAqIEJvdGggY2hhaW5zIG11c3QgYmUgb2YgdGhlIHNhbWUg
dHlwZSAoZS5nLiBNVF9EQVRBKS4KKyAqIEFueSBtX3BrdGhkciBpcyBub3QgdXBkYXRlZC4KKyAq
Lwordm9pZAorbV9jYXQoc3RydWN0IG1idWYgKm0sIHN0cnVjdCBtYnVmICpuKQoreworCXdoaWxl
IChtLT5tX25leHQpCisJCW0gPSBtLT5tX25leHQ7CisJd2hpbGUgKG4pIHsKKwkJaWYgKG0tPm1f
ZmxhZ3MgJiBNX0VYVCB8fAorCQkgICAgbS0+bV9kYXRhICsgbS0+bV9sZW4gKyBuLT5tX2xlbiA+
PSAmbS0+bV9kYXRbTUxFTl0pIHsKKwkJCS8qIGp1c3Qgam9pbiB0aGUgdHdvIGNoYWlucyAqLwor
CQkJbS0+bV9uZXh0ID0gbjsKKwkJCXJldHVybjsKKwkJfQorCQkvKiBzcGxhdCB0aGUgZGF0YSBm
cm9tIG9uZSBpbnRvIHRoZSBvdGhlciAqLworCQltZW1jcHkobXRvZChtLCBjYWRkcl90KSArIG0t
Pm1fbGVuLCBtdG9kKG4sIGNhZGRyX3QpLCAodV9pbnQpbi0+bV9sZW4pOworCQltLT5tX2xlbiAr
PSBuLT5tX2xlbjsKKwkJbiA9IG1fZnJlZShuKTsKKwl9Cit9CisKKwordm9pZAorbV9hZGooc3Ry
dWN0IG1idWYgKm1wLCBpbnQgcmVxX2xlbikKK3sKKwlpbnQgbGVuID0gcmVxX2xlbjsKKwlzdHJ1
Y3QgbWJ1ZiAqbTsKKwlpbnQgY291bnQ7CisKKwlpZiAoKG0gPSBtcCkgPT0gTlVMTCkKKwkJcmV0
dXJuOworCWlmIChsZW4gPj0gMCkgeworCQkvKgorCQkgKiBUcmltIGZyb20gaGVhZC4KKwkJICov
CisJCXdoaWxlIChtICE9IE5VTEwgJiYgbGVuID4gMCkgeworCQkJaWYgKG0tPm1fbGVuIDw9IGxl
bikgeworCQkJCWxlbiAtPSBtLT5tX2xlbjsKKwkJCQltLT5tX2xlbiA9IDA7CisJCQkJbSA9IG0t
Pm1fbmV4dDsKKwkJCX0gZWxzZSB7CisJCQkJbS0+bV9sZW4gLT0gbGVuOworCQkJCW0tPm1fZGF0
YSArPSBsZW47CisJCQkJbGVuID0gMDsKKwkJCX0KKwkJfQorCQltID0gbXA7CisJCWlmIChtcC0+
bV9mbGFncyAmIE1fUEtUSERSKQorCQkJbS0+bV9wa3RoZHIubGVuIC09IChyZXFfbGVuIC0gbGVu
KTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBUcmltIGZyb20gdGFpbC4gIFNjYW4gdGhlIG1idWYg
Y2hhaW4sCisJCSAqIGNhbGN1bGF0aW5nIGl0cyBsZW5ndGggYW5kIGZpbmRpbmcgdGhlIGxhc3Qg
bWJ1Zi4KKwkJICogSWYgdGhlIGFkanVzdG1lbnQgb25seSBhZmZlY3RzIHRoaXMgbWJ1ZiwgdGhl
biBqdXN0CisJCSAqIGFkanVzdCBhbmQgcmV0dXJuLiAgT3RoZXJ3aXNlLCByZXNjYW4gYW5kIHRy
dW5jYXRlCisJCSAqIGFmdGVyIHRoZSByZW1haW5pbmcgc2l6ZS4KKwkJICovCisJCWxlbiA9IC1s
ZW47CisJCWNvdW50ID0gMDsKKwkJZm9yICg7OykgeworCQkJY291bnQgKz0gbS0+bV9sZW47CisJ
CQlpZiAobS0+bV9uZXh0ID09IChzdHJ1Y3QgbWJ1ZiAqKTApCisJCQkJYnJlYWs7CisJCQltID0g
bS0+bV9uZXh0OworCQl9CisJCWlmIChtLT5tX2xlbiA+PSBsZW4pIHsKKwkJCW0tPm1fbGVuIC09
IGxlbjsKKwkJCWlmIChtcC0+bV9mbGFncyAmIE1fUEtUSERSKQorCQkJCW1wLT5tX3BrdGhkci5s
ZW4gLT0gbGVuOworCQkJcmV0dXJuOworCQl9CisJCWNvdW50IC09IGxlbjsKKwkJaWYgKGNvdW50
IDwgMCkKKwkJCWNvdW50ID0gMDsKKwkJLyoKKwkJICogQ29ycmVjdCBsZW5ndGggZm9yIGNoYWlu
IGlzICJjb3VudCIuCisJCSAqIEZpbmQgdGhlIG1idWYgd2l0aCBsYXN0IGRhdGEsIGFkanVzdCBp
dHMgbGVuZ3RoLAorCQkgKiBhbmQgdG9zcyBkYXRhIGZyb20gcmVtYWluaW5nIG1idWZzIG9uIGNo
YWluLgorCQkgKi8KKwkJbSA9IG1wOworCQlpZiAobS0+bV9mbGFncyAmIE1fUEtUSERSKQorCQkJ
bS0+bV9wa3RoZHIubGVuID0gY291bnQ7CisJCWZvciAoOyBtOyBtID0gbS0+bV9uZXh0KSB7CisJ
CQlpZiAobS0+bV9sZW4gPj0gY291bnQpIHsKKwkJCQltLT5tX2xlbiA9IGNvdW50OworCQkJCWlm
IChtLT5tX25leHQgIT0gTlVMTCkgeworCQkJCQltX2ZyZWVtKG0tPm1fbmV4dCk7CisJCQkJCW0t
Pm1fbmV4dCA9IE5VTEw7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQkJY291bnQgLT0gbS0+
bV9sZW47CisJCX0KKwl9Cit9CisKKworLyogbV9zcGxpdCBpcyB1c2VkIHdpdGhpbiBzY3RwX2hh
bmRsZV9jb29raWVfZWNoby4gKi8KKworLyoKKyAqIFBhcnRpdGlvbiBhbiBtYnVmIGNoYWluIGlu
IHR3byBwaWVjZXMsIHJldHVybmluZyB0aGUgdGFpbCAtLQorICogYWxsIGJ1dCB0aGUgZmlyc3Qg
bGVuMCBieXRlcy4gIEluIGNhc2Ugb2YgZmFpbHVyZSwgaXQgcmV0dXJucyBOVUxMIGFuZAorICog
YXR0ZW1wdHMgdG8gcmVzdG9yZSB0aGUgY2hhaW4gdG8gaXRzIG9yaWdpbmFsIHN0YXRlLgorICoK
KyAqIE5vdGUgdGhhdCB0aGUgcmVzdWx0aW5nIG1idWZzIG1pZ2h0IGJlIHJlYWQtb25seSwgYmVj
YXVzZSB0aGUgbmV3CisgKiBtYnVmIGNhbiBlbmQgdXAgc2hhcmluZyBhbiBtYnVmIGNsdXN0ZXIg
d2l0aCB0aGUgb3JpZ2luYWwgbWJ1ZiBpZgorICogdGhlICJicmVha2luZyBwb2ludCIgaGFwcGVu
cyB0byBsaWUgd2l0aGluIGEgY2x1c3RlciBtYnVmLiBVc2UgdGhlCisgKiBNX1dSSVRBQkxFKCkg
bWFjcm8gdG8gY2hlY2sgZm9yIHRoaXMgY2FzZS4KKyAqLworc3RydWN0IG1idWYgKgorbV9zcGxp
dChzdHJ1Y3QgbWJ1ZiAqbTAsIGludCBsZW4wLCBpbnQgd2FpdCkKK3sKKwlzdHJ1Y3QgbWJ1ZiAq
bSwgKm47CisJdV9pbnQgbGVuID0gbGVuMCwgcmVtYWluOworCisJLyogTUJVRl9DSEVDS1NMRUVQ
KHdhaXQpOyAqLworCWZvciAobSA9IG0wOyBtICYmIChpbnQpbGVuID4gbS0+bV9sZW47IG0gPSBt
LT5tX25leHQpCisJCWxlbiAtPSBtLT5tX2xlbjsKKwlpZiAobSA9PSBOVUxMKQorCQlyZXR1cm4g
KE5VTEwpOworCXJlbWFpbiA9IG0tPm1fbGVuIC0gbGVuOworCWlmIChtMC0+bV9mbGFncyAmIE1f
UEtUSERSKSB7CisJCU1HRVRIRFIobiwgd2FpdCwgbTAtPm1fdHlwZSk7CisJCWlmIChuID09IE5V
TEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQluLT5tX3BrdGhkci5yY3ZpZiA9IG0wLT5tX3BrdGhk
ci5yY3ZpZjsKKwkJbi0+bV9wa3RoZHIubGVuID0gbTAtPm1fcGt0aGRyLmxlbiAtIGxlbjA7CisJ
CW0wLT5tX3BrdGhkci5sZW4gPSBsZW4wOworCQlpZiAobS0+bV9mbGFncyAmIE1fRVhUKQorCQkJ
Z290byBleHRwYWNrZXQ7CisJCWlmIChyZW1haW4gPiBNSExFTikgeworCQkJLyogbSBjYW4ndCBi
ZSB0aGUgbGVhZCBwYWNrZXQgKi8KKwkJCU1IX0FMSUdOKG4sIDApOworCQkJbi0+bV9uZXh0ID0g
bV9zcGxpdChtLCBsZW4sIHdhaXQpOworCQkJaWYgKG4tPm1fbmV4dCA9PSBOVUxMKSB7CisJCQkJ
KHZvaWQpIG1fZnJlZShuKTsKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfSBlbHNlIHsKKwkJCQlu
LT5tX2xlbiA9IDA7CisJCQkJcmV0dXJuIChuKTsKKwkJCX0KKwkJfSBlbHNlCisJCQlNSF9BTElH
TihuLCByZW1haW4pOworCX0gZWxzZSBpZiAocmVtYWluID09IDApIHsKKwkJbiA9IG0tPm1fbmV4
dDsKKwkJbS0+bV9uZXh0ID0gTlVMTDsKKwkJcmV0dXJuIChuKTsKKwl9IGVsc2UgeworCQlNR0VU
KG4sIHdhaXQsIG0tPm1fdHlwZSk7CisJCWlmIChuID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwp
OworCQlNX0FMSUdOKG4sIHJlbWFpbik7CisJfQorZXh0cGFja2V0OgorCWlmIChtLT5tX2ZsYWdz
ICYgTV9FWFQpIHsKKwkJbi0+bV9kYXRhID0gbS0+bV9kYXRhICsgbGVuOworCQltYl9kdXBjbChu
LCBtKTsKKwl9IGVsc2UgeworCQltZW1jcHkobXRvZChuLCBjYWRkcl90KSwgbXRvZChtLCBjYWRk
cl90KSArIGxlbiwgcmVtYWluKTsKKwl9CisJbi0+bV9sZW4gPSByZW1haW47CisJbS0+bV9sZW4g
PSBsZW47CisJbi0+bV9uZXh0ID0gbS0+bV9uZXh0OworCW0tPm1fbmV4dCA9IE5VTEw7CisJcmV0
dXJuIChuKTsKK30KKworCisKKworaW50CitwYWNrX3NlbmRfYnVmZmVyKGNhZGRyX3QgYnVmZmVy
LCBzdHJ1Y3QgbWJ1ZiogbWIpeworCisJaW50IGNvdW50X3RvX2NvcHk7CisJaW50IHRvdGFsX2Nv
dW50X2NvcGllZCA9IDA7CisJaW50IG9mZnNldCA9IDA7CisKKwlkbyB7CisJCWNvdW50X3RvX2Nv
cHkgPSBtYi0+bV9sZW47CisJCW1lbWNweShidWZmZXIrb2Zmc2V0LCBtdG9kKG1iLCBjYWRkcl90
KSwgY291bnRfdG9fY29weSk7CisJCW9mZnNldCArPSBjb3VudF90b19jb3B5OworCQl0b3RhbF9j
b3VudF9jb3BpZWQgKz0gY291bnRfdG9fY29weTsKKwkJbWIgPSBtYi0+bV9uZXh0OworCX0gd2hp
bGUobWIpOworCisJcmV0dXJuICh0b3RhbF9jb3VudF9jb3BpZWQpOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX21idWYuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNl
cl9tYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwLi5jMTFiMzhj
OWNiMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfbWJ1Zi5o
CkBAIC0wLDAgKzEsNDEzIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk4MiwgMTk4NiwgMTk4
OCwgMTk5MworICogICAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9y
bmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhl
IG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3Jz
CisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJF
R0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1B
R0UuCisgKgorICovCisKKyNpZm5kZWYgX1VTRVJfTUJVRl9IXworI2RlZmluZSBfVVNFUl9NQlVG
X0hfCisKKy8qIF9fVXNlcnNwYWNlX18gaGVhZGVyIGZpbGUgZm9yIG1idWZzICovCisjaW5jbHVk
ZSA8c3RkaW8uaD4KKyNpZiAhZGVmaW5lZChTQ1RQX1NJTVBMRV9BTExPQ0FUT1IpCisjaW5jbHVk
ZSAidW1lbS5oIgorI2VuZGlmCisjaW5jbHVkZSAidXNlcl9tYWxsb2MuaCIKKyNpbmNsdWRlICJu
ZXRpbmV0L3NjdHBfb3NfdXNlcnNwYWNlLmgiCisKKyNkZWZpbmUgVVNJTkdfTUJVRl9DT05TVFJV
Q1RPUiAwCisKKy8qIEZvciBMaW51eCAqLworI2lmbmRlZiBNU0laRQorI2RlZmluZSBNU0laRSAy
NTYKKy8qICNkZWZpbmUgTVNJWkUgMTAyNCAqLworI2VuZGlmCisjaWZuZGVmIE1DTEJZVEVTCisj
ZGVmaW5lIE1DTEJZVEVTIDIwNDgKKyNlbmRpZgorCitzdHJ1Y3QgbWJ1ZiAqIG1fZ2V0aGRyKGlu
dCBob3csIHNob3J0IHR5cGUpOworc3RydWN0IG1idWYgKiBtX2dldChpbnQgaG93LCBzaG9ydCB0
eXBlKTsKK3N0cnVjdCBtYnVmICogbV9mcmVlKHN0cnVjdCBtYnVmICptKTsKK3ZvaWQgbV9jbGdl
dChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGhvdyk7CitzdHJ1Y3QgbWJ1ZiAqIG1fZ2V0bTIoc3RydWN0
IG1idWYgKm0sIGludCBsZW4sIGludCBob3csIHNob3J0IHR5cGUsIGludCBmbGFncywgaW50IGFs
bG9uZWJ1Zik7CitzdHJ1Y3QgbWJ1ZiAqbV91aW90b21idWYoc3RydWN0IHVpbyAqdWlvLCBpbnQg
aG93LCBpbnQgbGVuLCBpbnQgYWxpZ24sIGludCBmbGFncyk7Cit1X2ludCBtX2xlbmd0aChzdHJ1
Y3QgbWJ1ZiAqbTAsIHN0cnVjdCBtYnVmICoqbGFzdCk7CitzdHJ1Y3QgbWJ1ZiAqbV9sYXN0KHN0
cnVjdCBtYnVmICptKTsKKworLyogbWJ1ZiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiAqLwordm9p
ZCBtYnVmX2luaXRpYWxpemUodm9pZCAqKTsKKworI2RlZmluZQlNX01PVkVfUEtUSERSKHRvLCBm
cm9tKQltX21vdmVfcGt0aGRyKCh0byksIChmcm9tKSkKKyNkZWZpbmUJTUdFVChtLCBob3csIHR5
cGUpCSgobSkgPSBtX2dldCgoaG93KSwgKHR5cGUpKSkKKyNkZWZpbmUJTUdFVEhEUihtLCBob3cs
IHR5cGUpCSgobSkgPSBtX2dldGhkcigoaG93KSwgKHR5cGUpKSkKKyNkZWZpbmUJTUNMR0VUKG0s
IGhvdykJCW1fY2xnZXQoKG0pLCAoaG93KSkKKworCisjZGVmaW5lIE1fSERSX1BBRCAoKHNpemVv
ZihpbnRwdHJfdCk9PTQpID8gMiA6IDYpIC8qIG1vZGlmaWVkIGZvciBfX1VzZXJzcGFjZV9fICov
CisKKy8qIExlbmd0aCB0byBtX2NvcHkgdG8gY29weSBhbGwuICovCisjZGVmaW5lCU1fQ09QWUFM
TAkxMDAwMDAwMDAwCisKKy8qIHVtZW1fY2FjaGVfdCBpcyBkZWZpbmVkIGluIHVzZXJfaW5jbHVk
ZS91bWVtLmggYXMKKyAqIHR5cGVkZWYgc3RydWN0IHVtZW1fY2FjaGUgdW1lbV9jYWNoZV90Owor
ICogTm90ZTp1bWVtX3pvbmVfdCBpcyBhIHBvaW50ZXIuCisgKi8KKyNpZiBkZWZpbmVkKFNDVFBf
U0lNUExFX0FMTE9DQVRPUikKK3R5cGVkZWYgc2l6ZV90IHNjdHBfem9uZV90OworI2Vsc2UKK3R5
cGVkZWYgdW1lbV9jYWNoZV90ICpzY3RwX3pvbmVfdDsKKyNlbmRpZgorCitleHRlcm4gc2N0cF96
b25lX3Qgem9uZV9tYnVmOworZXh0ZXJuIHNjdHBfem9uZV90IHpvbmVfY2x1c3Q7CitleHRlcm4g
c2N0cF96b25lX3Qgem9uZV9leHRfcmVmY250OworCisvKi0KKyAqIE1hY3JvcyBmb3IgdHlwZSBj
b252ZXJzaW9uOgorICogbXRvZChtLCB0KQktLSBDb252ZXJ0IG1idWYgcG9pbnRlciB0byBkYXRh
IHBvaW50ZXIgb2YgY29ycmVjdCB0eXBlLgorICogZHRvbSh4KQktLSBDb252ZXJ0IGRhdGEgcG9p
bnRlciB3aXRoaW4gbWJ1ZiB0byBtYnVmIHBvaW50ZXIgKFhYWCkuCisgKi8KKyNkZWZpbmUJbXRv
ZChtLCB0KQkoKHQpKChtKS0+bV9kYXRhKSkKKyNkZWZpbmUJZHRvbSh4KQkJKChzdHJ1Y3QgbWJ1
ZiAqKSgoaW50cHRyX3QpKHgpICYgfihNU0laRS0xKSkpCisKK3N0cnVjdCBtYl9hcmdzIHsKKwlp
bnQJZmxhZ3M7CS8qIEZsYWdzIGZvciBtYnVmIGJlaW5nIGFsbG9jYXRlZCAqLworCXNob3J0CXR5
cGU7CS8qIFR5cGUgb2YgbWJ1ZiBiZWluZyBhbGxvY2F0ZWQgKi8KK307CisKK3N0cnVjdCBjbHVz
dF9hcmdzIHsKKwlzdHJ1Y3QgbWJ1ZiAqIHBhcmVudF9tYnVmOworfTsKKworc3RydWN0IG1idWYg
KiAgICBtX3NwbGl0KHN0cnVjdCBtYnVmICosIGludCwgaW50KTsKK3ZvaWQgICAgICAgICAgICAg
bV9jYXQoc3RydWN0IG1idWYgKm0sIHN0cnVjdCBtYnVmICpuKTsKK3ZvaWQJCSBtX2FkaihzdHJ1
Y3QgbWJ1ZiAqLCBpbnQpOwordm9pZCAgbWJfZnJlZV9leHQoc3RydWN0IG1idWYgKik7Cit2b2lk
ICBtX2ZyZWVtKHN0cnVjdCBtYnVmICopOworc3RydWN0IG1fdGFnCSptX3RhZ19hbGxvYyh1aW50
MzJfdCwgaW50LCBpbnQsIGludCk7CitzdHJ1Y3QgbWJ1ZgkqbV9jb3B5bShzdHJ1Y3QgbWJ1ZiAq
LCBpbnQsIGludCwgaW50KTsKK3ZvaWQJCSBtX2NvcHliYWNrKHN0cnVjdCBtYnVmICosIGludCwg
aW50LCBjYWRkcl90KTsKK3N0cnVjdCBtYnVmCSptX3B1bGx1cChzdHJ1Y3QgbWJ1ZiAqLCBpbnQp
Oworc3RydWN0IG1idWYJKm1fcHVsbGRvd24oc3RydWN0IG1idWYgKiwgaW50IG9mZiwgaW50IGxl
biwgaW50ICpvZmZwKTsKK2ludAkJIG1fZHVwX3BrdGhkcihzdHJ1Y3QgbWJ1ZiAqLCBzdHJ1Y3Qg
bWJ1ZiAqLCBpbnQpOworc3RydWN0IG1fdGFnCSptX3RhZ19jb3B5KHN0cnVjdCBtX3RhZyAqLCBp
bnQpOworaW50CQkgbV90YWdfY29weV9jaGFpbihzdHJ1Y3QgbWJ1ZiAqLCBzdHJ1Y3QgbWJ1ZiAq
LCBpbnQpOworc3RydWN0IG1idWYJKm1fcHJlcGVuZChzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCk7
Cit2b2lkCQkgbV9jb3B5ZGF0YShjb25zdCBzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCwgY2FkZHJf
dCk7CisKKyNkZWZpbmUgTUJVRl9NRU1fTkFNRSAibWJ1ZiIKKyNkZWZpbmUgTUJVRl9DTFVTVEVS
X01FTV9OQU1FICJtYnVmX2NsdXN0ZXIiCisjZGVmaW5lCU1CVUZfRVhUUkVGQ05UX01FTV9OQU1F
CSJtYnVmX2V4dF9yZWZjbnQiCisKKyNkZWZpbmUJTVRfTk9JTklUCTI1NQkvKiBOb3QgYSB0eXBl
IGJ1dCBhIGZsYWcgdG8gYWxsb2NhdGUKKwkJCQkgICBhIG5vbi1pbml0aWFsaXplZCBtYnVmICov
CisKKy8qCisgKiBNYnVmcyBhcmUgb2YgYSBzaW5nbGUgc2l6ZSwgTVNJWkUgKHN5cy9wYXJhbS5o
KSwgd2hpY2ggaW5jbHVkZXMgb3ZlcmhlYWQuCisgKiBBbiBtYnVmIG1heSBhZGQgYSBzaW5nbGUg
Im1idWYgY2x1c3RlciIgb2Ygc2l6ZSBNQ0xCWVRFUyAoYWxzbyBpbgorICogc3lzL3BhcmFtLmgp
LCB3aGljaCBoYXMgbm8gYWRkaXRpb25hbCBvdmVyaGVhZCBhbmQgaXMgdXNlZCBpbnN0ZWFkIG9m
IHRoZQorICogaW50ZXJuYWwgZGF0YSBhcmVhOyB0aGlzIGlzIGRvbmUgd2hlbiBhdCBsZWFzdCBN
SU5DTFNJWkUgb2YgZGF0YSBtdXN0IGJlCisgKiBzdG9yZWQuICBBZGRpdGlvbmFsbHksIGl0IGlz
IHBvc3NpYmxlIHRvIGFsbG9jYXRlIGEgc2VwYXJhdGUgYnVmZmVyCisgKiBleHRlcm5hbGx5IGFu
ZCBhdHRhY2ggaXQgdG8gdGhlIG1idWYgaW4gYSB3YXkgc2ltaWxhciB0byB0aGF0IG9mIG1idWYK
KyAqIGNsdXN0ZXJzLgorICovCisjZGVmaW5lCU1MRU4JCSgoaW50KShNU0laRSAtIHNpemVvZihz
dHJ1Y3QgbV9oZHIpKSkJLyogbm9ybWFsIGRhdGEgbGVuICovCisjZGVmaW5lCU1ITEVOCQkoKGlu
dCkoTUxFTiAtIHNpemVvZihzdHJ1Y3QgcGt0aGRyKSkpCS8qIGRhdGEgbGVuIHcvcGt0aGRyICov
CisjZGVmaW5lCU1JTkNMU0laRQkoKGludCkoTUhMRU4gKyAxKSkJLyogc21hbGxlc3QgYW1vdW50
IHRvIHB1dCBpbiBjbHVzdGVyICovCisjZGVmaW5lCU1fTUFYQ09NUFJFU1MJKE1ITEVOIC8gMikJ
LyogbWF4IGFtb3VudCB0byBjb3B5IGZvciBjb21wcmVzc2lvbiAqLworCisKKy8qCisgKiBIZWFk
ZXIgcHJlc2VudCBhdCB0aGUgYmVnaW5uaW5nIG9mIGV2ZXJ5IG1idWYuCisgKi8KK3N0cnVjdCBt
X2hkciB7CisJc3RydWN0IG1idWYJKm1oX25leHQ7CS8qIG5leHQgYnVmZmVyIGluIGNoYWluICov
CisJc3RydWN0IG1idWYJKm1oX25leHRwa3Q7CS8qIG5leHQgY2hhaW4gaW4gcXVldWUvcmVjb3Jk
ICovCisJY2FkZHJfdAkJIG1oX2RhdGE7CS8qIGxvY2F0aW9uIG9mIGRhdGEgKi8KKwlpbnQJCSBt
aF9sZW47CS8qIGFtb3VudCBvZiBkYXRhIGluIHRoaXMgbWJ1ZiAqLworCWludAkJIG1oX2ZsYWdz
OwkvKiBmbGFnczsgc2VlIGJlbG93ICovCisJc2hvcnQJCSBtaF90eXBlOwkvKiB0eXBlIG9mIGRh
dGEgaW4gdGhpcyBtYnVmICovCisJdWludDhfdCAgICAgICAgICBwYWRbTV9IRFJfUEFEXTsvKiB3
b3JkIGFsaWduICAgICAgICAgICAgICAgICAgKi8KK307CisKKy8qCisgKiBQYWNrZXQgdGFnIHN0
cnVjdHVyZSAoc2VlIGJlbG93IGZvciBkZXRhaWxzKS4KKyAqLworc3RydWN0IG1fdGFnIHsKKwlT
TElTVF9FTlRSWShtX3RhZykJbV90YWdfbGluazsJLyogTGlzdCBvZiBwYWNrZXQgdGFncyAqLwor
CXVpbnQxNl90CQltX3RhZ19pZDsJLyogVGFnIElEICovCisJdWludDE2X3QJCW1fdGFnX2xlbjsJ
LyogTGVuZ3RoIG9mIGRhdGEgKi8KKwl1aW50MzJfdAkJbV90YWdfY29va2llOwkvKiBBQkkvTW9k
dWxlIElEICovCisJdm9pZAkJCSgqbV90YWdfZnJlZSkoc3RydWN0IG1fdGFnICopOworfTsKKwor
LyoKKyAqIFJlY29yZC9wYWNrZXQgaGVhZGVyIGluIGZpcnN0IG1idWYgb2YgY2hhaW47IHZhbGlk
IG9ubHkgaWYgTV9QS1RIRFIgaXMgc2V0LgorICovCitzdHJ1Y3QgcGt0aGRyIHsKKwlzdHJ1Y3Qg
aWZuZXQJKnJjdmlmOwkJLyogcmN2IGludGVyZmFjZSAqLworCS8qIHZhcmlhYmxlcyBmb3IgaXAg
YW5kIHRjcCByZWFzc2VtYmx5ICovCisJdm9pZAkJKmhlYWRlcjsJLyogcG9pbnRlciB0byBwYWNr
ZXQgaGVhZGVyICovCisJaW50CQkgbGVuOwkJLyogdG90YWwgcGFja2V0IGxlbmd0aCAqLworCS8q
IHZhcmlhYmxlcyBmb3IgaGFyZHdhcmUgY2hlY2tzdW0gKi8KKwlpbnQJCSBjc3VtX2ZsYWdzOwkv
KiBmbGFncyByZWdhcmRpbmcgY2hlY2tzdW0gKi8KKwlpbnQJCSBjc3VtX2RhdGE7CS8qIGRhdGEg
ZmllbGQgdXNlZCBieSBjc3VtIHJvdXRpbmVzICovCisJdWludDE2X3QJIHRzb19zZWdzejsJLyog
VFNPIHNlZ21lbnQgc2l6ZSAqLworCXVpbnQxNl90CSBldGhlcl92dGFnOwkvKiBFdGhlcm5ldCA4
MDIuMXArcSB2bGFuIHRhZyAqLworCVNMSVNUX0hFQUQocGFja2V0X3RhZ3MsIG1fdGFnKSB0YWdz
OyAvKiBsaXN0IG9mIHBhY2tldCB0YWdzICovCit9OworCisvKgorICogRGVzY3JpcHRpb24gb2Yg
ZXh0ZXJuYWwgc3RvcmFnZSBtYXBwZWQgaW50byBtYnVmOyB2YWxpZCBvbmx5IGlmIE1fRVhUIGlz
CisgKiBzZXQuCisgKi8KK3N0cnVjdCBtX2V4dCB7CisJY2FkZHJfdAkJIGV4dF9idWY7CS8qIHN0
YXJ0IG9mIGJ1ZmZlciAqLworCXZvaWQJCSgqZXh0X2ZyZWUpCS8qIGZyZWUgcm91dGluZSBpZiBu
b3QgdGhlIHVzdWFsICovCisJCQkgICAgKHZvaWQgKiwgdm9pZCAqKTsKKwl2b2lkCQkqZXh0X2Fy
Z3M7CS8qIG9wdGlvbmFsIGFyZ3VtZW50IHBvaW50ZXIgKi8KKwl1X2ludAkJIGV4dF9zaXplOwkv
KiBzaXplIG9mIGJ1ZmZlciwgZm9yIGV4dF9mcmVlICovCisJdm9sYXRpbGUgdV9pbnQJKnJlZl9j
bnQ7CS8qIHBvaW50ZXIgdG8gcmVmIGNvdW50IGluZm8gKi8KKwlpbnQJCSBleHRfdHlwZTsJLyog
dHlwZSBvZiBleHRlcm5hbCBzdG9yYWdlICovCit9OworCisKKy8qCisgKiBUaGUgY29yZSBvZiB0
aGUgbWJ1ZiBvYmplY3QgYWxvbmcgd2l0aCBzb21lIHNob3J0Y3V0IGRlZmluZWQgZm9yIHByYWN0
aWNhbAorICogcHVycG9zZXMuCisgKi8KK3N0cnVjdCBtYnVmIHsKKwlzdHJ1Y3QgbV9oZHIJbV9o
ZHI7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJc3RydWN0IHBrdGhkcglNSF9wa3RoZHI7CS8q
IE1fUEtUSERSIHNldCAqLworCQkJdW5pb24geworCQkJCXN0cnVjdCBtX2V4dAlNSF9leHQ7CS8q
IE1fRVhUIHNldCAqLworCQkJCWNoYXIJCU1IX2RhdGFidWZbTUhMRU5dOworCQkJfSBNSF9kYXQ7
CisJCX0gTUg7CisJCWNoYXIJTV9kYXRhYnVmW01MRU5dOwkJLyogIU1fUEtUSERSLCAhTV9FWFQg
Ki8KKwl9IE1fZGF0OworfTsKKworI2RlZmluZQltX25leHQJCW1faGRyLm1oX25leHQKKyNkZWZp
bmUJbV9sZW4JCW1faGRyLm1oX2xlbgorI2RlZmluZQltX2RhdGEJCW1faGRyLm1oX2RhdGEKKyNk
ZWZpbmUJbV90eXBlCQltX2hkci5taF90eXBlCisjZGVmaW5lCW1fZmxhZ3MJCW1faGRyLm1oX2Zs
YWdzCisjZGVmaW5lCW1fbmV4dHBrdAltX2hkci5taF9uZXh0cGt0CisjZGVmaW5lCW1fYWN0CQlt
X25leHRwa3QKKyNkZWZpbmUJbV9wa3RoZHIJTV9kYXQuTUguTUhfcGt0aGRyCisjZGVmaW5lCW1f
ZXh0CQlNX2RhdC5NSC5NSF9kYXQuTUhfZXh0CisjZGVmaW5lCW1fcGt0ZGF0CU1fZGF0Lk1ILk1I
X2RhdC5NSF9kYXRhYnVmCisjZGVmaW5lCW1fZGF0CQlNX2RhdC5NX2RhdGFidWYKKworCisvKgor
ICogbWJ1ZiBmbGFncy4KKyAqLworI2RlZmluZQlNX0VYVAkJMHgwMDAxCS8qIGhhcyBhc3NvY2lh
dGVkIGV4dGVybmFsIHN0b3JhZ2UgKi8KKyNkZWZpbmUJTV9QS1RIRFIJMHgwMDAyCS8qIHN0YXJ0
IG9mIHJlY29yZCAqLworI2RlZmluZQlNX0VPUgkJMHgwMDA0CS8qIGVuZCBvZiByZWNvcmQgKi8K
KyNkZWZpbmUJTV9SRE9OTFkJMHgwMDA4CS8qIGFzc29jaWF0ZWQgZGF0YSBpcyBtYXJrZWQgcmVh
ZC1vbmx5ICovCisjZGVmaW5lCU1fUFJPVE8xCTB4MDAxMAkvKiBwcm90b2NvbC1zcGVjaWZpYyAq
LworI2RlZmluZQlNX1BST1RPMgkweDAwMjAJLyogcHJvdG9jb2wtc3BlY2lmaWMgKi8KKyNkZWZp
bmUJTV9QUk9UTzMJMHgwMDQwCS8qIHByb3RvY29sLXNwZWNpZmljICovCisjZGVmaW5lCU1fUFJP
VE80CTB4MDA4MAkvKiBwcm90b2NvbC1zcGVjaWZpYyAqLworI2RlZmluZQlNX1BST1RPNQkweDAx
MDAJLyogcHJvdG9jb2wtc3BlY2lmaWMgKi8KKyNkZWZpbmUJTV9GUkVFTElTVAkweDgwMDAJLyog
bWJ1ZiBpcyBvbiB0aGUgZnJlZSBsaXN0ICovCisKKworLyoKKyAqIEZsYWdzIGNvcGllZCB3aGVu
IGNvcHlpbmcgbV9wa3RoZHIuCisgKi8KKyNkZWZpbmUJTV9DT1BZRkxBR1MJKE1fUEtUSERSfE1f
RU9SfE1fUkRPTkxZfE1fUFJPVE8xfE1fUFJPVE8xfE1fUFJPVE8yfFwKKwkJCSAgICBNX1BST1RP
M3xNX1BST1RPNHxNX1BST1RPNXxcCisJCQkgICAgTV9CQ0FTVHxNX01DQVNUfE1fRlJBR3xNX0ZJ
UlNURlJBR3xNX0xBU1RGUkFHfFwKKwkJCSAgICBNX1ZMQU5UQUd8TV9QUk9NSVNDKQorCisKKy8q
CisgKiBtYnVmIHBrdGhkciBmbGFncyAoYWxzbyBzdG9yZWQgaW4gbV9mbGFncykuCisgKi8KKyNk
ZWZpbmUJTV9CQ0FTVAkJMHgwMjAwCS8qIHNlbmQvcmVjZWl2ZWQgYXMgbGluay1sZXZlbCBicm9h
ZGNhc3QgKi8KKyNkZWZpbmUJTV9NQ0FTVAkJMHgwNDAwCS8qIHNlbmQvcmVjZWl2ZWQgYXMgbGlu
ay1sZXZlbCBtdWx0aWNhc3QgKi8KKyNkZWZpbmUJTV9GUkFHCQkweDA4MDAJLyogcGFja2V0IGlz
IGEgZnJhZ21lbnQgb2YgYSBsYXJnZXIgcGFja2V0ICovCisjZGVmaW5lCU1fRklSU1RGUkFHCTB4
MTAwMAkvKiBwYWNrZXQgaXMgZmlyc3QgZnJhZ21lbnQgKi8KKyNkZWZpbmUJTV9MQVNURlJBRwkw
eDIwMDAJLyogcGFja2V0IGlzIGxhc3QgZnJhZ21lbnQgKi8KKyNkZWZpbmUJTV9WTEFOVEFHCTB4
MTAwMDAJLyogZXRoZXJfdnRhZyBpcyB2YWxpZCAqLworI2RlZmluZQlNX1BST01JU0MJMHgyMDAw
MAkvKiBwYWNrZXQgd2FzIG5vdCBmb3IgdXMgKi8KKyNkZWZpbmUJTV9OT0ZSRUUJMHg0MDAwMAkv
KiBkbyBub3QgZnJlZSBtYnVmIC0gaXQgaXMgZW1iZWRkZWQgaW4gdGhlIGNsdXN0ZXIgKi8KKwor
CisvKgorICogRXh0ZXJuYWwgYnVmZmVyIHR5cGVzOiBpZGVudGlmeSBleHRfYnVmIHR5cGUuCisg
Ki8KKyNkZWZpbmUJRVhUX0NMVVNURVIJMQkvKiBtYnVmIGNsdXN0ZXIgKi8KKyNkZWZpbmUJRVhU
X1NGQlVGCTIJLyogc2VuZGZpbGUoMikncyBzZl9idWZzICovCisjZGVmaW5lCUVYVF9KVU1CT1AJ
MwkvKiBqdW1ibyBjbHVzdGVyIDQwOTYgYnl0ZXMgKi8KKyNkZWZpbmUJRVhUX0pVTUJPOQk0CS8q
IGp1bWJvIGNsdXN0ZXIgOTIxNiBieXRlcyAqLworI2RlZmluZQlFWFRfSlVNQk8xNgk1CS8qIGp1
bWJvIGNsdXN0ZXIgMTYxODQgYnl0ZXMgKi8KKyNkZWZpbmUJRVhUX1BBQ0tFVAk2CS8qIG1idWYr
Y2x1c3RlciBmcm9tIHBhY2tldCB6b25lICovCisjZGVmaW5lCUVYVF9NQlVGCTcJLyogZXh0ZXJu
YWwgbWJ1ZiByZWZlcmVuY2UgKE1fSU9WRUMpICovCisjZGVmaW5lCUVYVF9ORVRfRFJWCTEwMAkv
KiBjdXN0b20gZXh0X2J1ZiBwcm92aWRlZCBieSBuZXQgZHJpdmVyKHMpICovCisjZGVmaW5lCUVY
VF9NT0RfVFlQRQkyMDAJLyogY3VzdG9tIG1vZHVsZSdzIGV4dF9idWYgdHlwZSAqLworI2RlZmlu
ZQlFWFRfRElTUE9TQUJMRQkzMDAJLyogY2FuIHRocm93IHRoaXMgYnVmZmVyIGF3YXkgdy9wYWdl
IGZsaXBwaW5nICovCisjZGVmaW5lCUVYVF9FWFRSRUYJNDAwCS8qIGhhcyBleHRlcm5hbGx5IG1h
aW50YWluZWQgcmVmX2NudCBwdHIgKi8KKworCisvKgorICogbWJ1ZiB0eXBlcy4KKyAqLworI2Rl
ZmluZQlNVF9OT1RNQlVGCTAJLyogVVNFRCBJTlRFUk5BTExZIE9OTFkhIE9iamVjdCBpcyBub3Qg
bWJ1ZiAqLworI2RlZmluZQlNVF9EQVRBCQkxCS8qIGR5bmFtaWMgKGRhdGEpIGFsbG9jYXRpb24g
Ki8KKyNkZWZpbmUJTVRfSEVBREVSCU1UX0RBVEEJLyogcGFja2V0IGhlYWRlciwgdXNlIE1fUEtU
SERSIGluc3RlYWQgKi8KKyNkZWZpbmUJTVRfU09OQU1FCTgJLyogc29ja2V0IG5hbWUgKi8KKyNk
ZWZpbmUJTVRfQ09OVFJPTAkxNAkvKiBleHRyYS1kYXRhIHByb3RvY29sIG1lc3NhZ2UgKi8KKyNk
ZWZpbmUJTVRfT09CREFUQQkxNQkvKiBleHBlZGl0ZWQgZGF0YSAgKi8KKyNkZWZpbmUJTVRfTlRZ
UEVTCTE2CS8qIG51bWJlciBvZiBtYnVmIHR5cGVzIGZvciBtYnR5cGVzW10gKi8KKworI2RlZmlu
ZQlNVF9OT0lOSVQJMjU1CS8qIE5vdCBhIHR5cGUgYnV0IGEgZmxhZyB0byBhbGxvY2F0ZQorCQkJ
CSAgIGEgbm9uLWluaXRpYWxpemVkIG1idWYgKi8KKworLyoKKyAqIF9fVXNlcnNwYWNlX18gZmxh
Z3MgbGlrZSBNX05PV0FJVCBhcmUgZGVmaW5lZCBpbiBtYWxsb2MuaAorICogRmxhZ3MgbGlrZSB0
aGVzZSBhcmUgdXNlZCBpbiBmdW5jdGlvbnMgbGlrZSB1bWFfemFsbG9jKCkKKyAqIGJ1dCBkb24n
dCBoYXZlIGFuIGVxdWl2YWxlbnQgaW4gdXNlcmxhbmQgdW1lbQorICogRmxhZ3Mgc3BlY2lmeWlu
ZyBob3cgYW4gYWxsb2NhdGlvbiBzaG91bGQgYmUgbWFkZS4KKyAqCisgKiBUaGUgZmxhZyB0byB1
c2UgaXMgYXMgZm9sbG93czoKKyAqIC0gTV9ET05UV0FJVCBvciBNX05PV0FJVCBmcm9tIGFuIGlu
dGVycnVwdCBoYW5kbGVyIHRvIG5vdCBibG9jayBhbGxvY2F0aW9uLgorICogLSBNX1dBSVQgb3Ig
TV9XQUlUT0sgb3IgTV9UUllXQUlUIGZyb20gd2hlcmV2ZXIgaXQgaXMgc2FmZSB0byBibG9jay4K
KyAqCisgKiBNX0RPTlRXQUlUL01fTk9XQUlUIG1lYW5zIHRoYXQgd2Ugd2lsbCBub3QgYmxvY2sg
dGhlIHRocmVhZCBleHBsaWNpdGx5IGFuZAorICogaWYgd2UgY2Fubm90IGFsbG9jYXRlIGltbWVk
aWF0ZWx5IHdlIG1heSByZXR1cm4gTlVMTCwgd2hlcmVhcworICogTV9XQUlUL01fV0FJVE9LL01f
VFJZV0FJVCBtZWFucyB0aGF0IGlmIHdlIGNhbm5vdCBhbGxvY2F0ZSByZXNvdXJjZXMgd2UKKyAq
IHdpbGwgYmxvY2sgdW50aWwgdGhleSBhcmUgYXZhaWxhYmxlLCBhbmQgdGh1cyBuZXZlciByZXR1
cm4gTlVMTC4KKyAqCisgKiBYWFggRXZlbnR1YWxseSBqdXN0IHBoYXNlIHRoaXMgb3V0IHRvIHVz
ZSBNX1dBSVRPSy9NX05PV0FJVC4KKyAqLworI2RlZmluZQlNQlRPTShob3cpCShob3cpCisKK3Zv
aWQJCSBtX3RhZ19kZWxldGUoc3RydWN0IG1idWYgKiwgc3RydWN0IG1fdGFnICopOwordm9pZAkJ
IG1fdGFnX2RlbGV0ZV9jaGFpbihzdHJ1Y3QgbWJ1ZiAqLCBzdHJ1Y3QgbV90YWcgKik7Cit2b2lk
CQkgbV9tb3ZlX3BrdGhkcihzdHJ1Y3QgbWJ1ZiAqLCBzdHJ1Y3QgbWJ1ZiAqKTsKK3ZvaWQJCSBt
X3RhZ19mcmVlX2RlZmF1bHQoc3RydWN0IG1fdGFnICopOworCitleHRlcm4gaW50IG1heF9saW5r
aGRyOyAgICAvKiBMYXJnZXN0IGxpbmstbGV2ZWwgaGVhZGVyICovCitleHRlcm4gaW50IG1heF9w
cm90b2hkcjsgLyogU2l6ZSBvZiBsYXJnZXN0IHByb3RvY29sIGxheWVyIGhlYWRlci4gU2VlIHVz
ZXJfbWJ1Zi5jICovCisKKy8qCisgKiBFdmFsdWF0ZSBUUlVFIGlmIGl0J3Mgc2FmZSB0byB3cml0
ZSB0byB0aGUgbWJ1ZiBtJ3MgZGF0YSByZWdpb24gKHRoaXMgY2FuCisgKiBiZSBib3RoIHRoZSBs
b2NhbCBkYXRhIHBheWxvYWQsIG9yIGFuIGV4dGVybmFsIGJ1ZmZlciBhcmVhLCBkZXBlbmRpbmcg
b24KKyAqIHdoZXRoZXIgTV9FWFQgaXMgc2V0KS4KKyAqLworI2RlZmluZQlNX1dSSVRBQkxFKG0p
CSghKChtKS0+bV9mbGFncyAmIE1fUkRPTkxZKSAmJgkJCVwKKwkJCSAoISgoKG0pLT5tX2ZsYWdz
ICYgTV9FWFQpKSB8fAkJCVwKKwkJCSAoKigobSktPm1fZXh0LnJlZl9jbnQpID09IDEpKSApCQlc
CisKKworLyoKKyAqIENvbXB1dGUgdGhlIGFtb3VudCBvZiBzcGFjZSBhdmFpbGFibGUgYmVmb3Jl
IHRoZSBjdXJyZW50IHN0YXJ0IG9mIGRhdGEgaW4KKyAqIGFuIG1idWYuCisgKgorICogVGhlIE1f
V1JJVEFCTEUoKSBpcyBhIHRlbXBvcmFyeSwgY29uc2VydmF0aXZlIHNhZmV0eSBtZWFzdXJlOiB0
aGUgYnVyZGVuCisgKiBvZiBjaGVja2luZyB3cml0YWJpbGl0eSBvZiB0aGUgbWJ1ZiBkYXRhIGFy
ZWEgcmVzdHMgc29sZWx5IHdpdGggdGhlIGNhbGxlci4KKyAqLworI2RlZmluZQlNX0xFQURJTkdT
UEFDRShtKQkJCQkJCVwKKwkoKChtKS0+bV9mbGFncyAmIE1fRVhUKSA/CQkJCQlcCisJICAgIChN
X1dSSVRBQkxFKG0pID8gKG0pLT5tX2RhdGEgLSAobSktPm1fZXh0LmV4dF9idWYgOiAwKToJXAor
CSAgICAoKG0pLT5tX2ZsYWdzICYgTV9QS1RIRFIpPyAobSktPm1fZGF0YSAtIChtKS0+bV9wa3Rk
YXQgOglcCisJICAgIChtKS0+bV9kYXRhIC0gKG0pLT5tX2RhdCkKKworLyoKKyAqIENvbXB1dGUg
dGhlIGFtb3VudCBvZiBzcGFjZSBhdmFpbGFibGUgYWZ0ZXIgdGhlIGVuZCBvZiBkYXRhIGluIGFu
IG1idWYuCisgKgorICogVGhlIE1fV1JJVEFCTEUoKSBpcyBhIHRlbXBvcmFyeSwgY29uc2VydmF0
aXZlIHNhZmV0eSBtZWFzdXJlOiB0aGUgYnVyZGVuCisgKiBvZiBjaGVja2luZyB3cml0YWJpbGl0
eSBvZiB0aGUgbWJ1ZiBkYXRhIGFyZWEgcmVzdHMgc29sZWx5IHdpdGggdGhlIGNhbGxlci4KKyAq
LworI2RlZmluZQlNX1RSQUlMSU5HU1BBQ0UobSkJCQkJCQlcCisJKCgobSktPm1fZmxhZ3MgJiBN
X0VYVCkgPwkJCQkJXAorCSAgICAoTV9XUklUQUJMRShtKSA/IChtKS0+bV9leHQuZXh0X2J1ZiAr
IChtKS0+bV9leHQuZXh0X3NpemUJXAorCQktICgobSktPm1fZGF0YSArIChtKS0+bV9sZW4pIDog
MCkgOgkJCVwKKwkgICAgJihtKS0+bV9kYXRbTUxFTl0gLSAoKG0pLT5tX2RhdGEgKyAobSktPm1f
bGVuKSkKKworCisKKy8qCisgKiBBcnJhbmdlIHRvIHByZXBlbmQgc3BhY2Ugb2Ygc2l6ZSBwbGVu
IHRvIG1idWYgbS4gIElmIGEgbmV3IG1idWYgbXVzdCBiZQorICogYWxsb2NhdGVkLCBob3cgc3Bl
Y2lmaWVzIHdoZXRoZXIgdG8gd2FpdC4gIElmIHRoZSBhbGxvY2F0aW9uIGZhaWxzLCB0aGUKKyAq
IG9yaWdpbmFsIG1idWYgY2hhaW4gaXMgZnJlZWQgYW5kIG0gaXMgc2V0IHRvIE5VTEwuCisgKi8K
KyNkZWZpbmUJTV9QUkVQRU5EKG0sIHBsZW4sIGhvdykgZG8gewkJCQkJXAorCXN0cnVjdCBtYnVm
ICoqX21tcCA9ICYobSk7CQkJCQlcCisJc3RydWN0IG1idWYgKl9tbSA9ICpfbW1wOwkJCQkJXAor
CWludCBfbXBsZW4gPSAocGxlbik7CQkJCQkJXAorCWludCBfX21ob3cgPSAoaG93KTsJCQkJCQlc
CisJCQkJCQkJCQlcCisJaWYgKE1fTEVBRElOR1NQQUNFKF9tbSkgPj0gX21wbGVuKSB7CQkJCVwK
KwkJX21tLT5tX2RhdGEgLT0gX21wbGVuOwkJCQkJXAorCQlfbW0tPm1fbGVuICs9IF9tcGxlbjsJ
CQkJCVwKKwl9IGVsc2UJCQkJCQkJCVwKKwkJX21tID0gbV9wcmVwZW5kKF9tbSwgX21wbGVuLCBf
X21ob3cpOwkJCVwKKwlpZiAoX21tICE9IE5VTEwgJiYgX21tLT5tX2ZsYWdzICYgTV9QS1RIRFIp
CQkJXAorCQlfbW0tPm1fcGt0aGRyLmxlbiArPSBfbXBsZW47CQkJCVwKKwkqX21tcCA9IF9tbTsJ
CQkJCQkJXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIFNldCB0aGUgbV9kYXRhIHBvaW50ZXIgb2Yg
YSBuZXdseS1hbGxvY2F0ZWQgbWJ1ZiAobV9nZXQvTUdFVCkgdG8gcGxhY2UgYW4KKyAqIG9iamVj
dCBvZiB0aGUgc3BlY2lmaWVkIHNpemUgYXQgdGhlIGVuZCBvZiB0aGUgbWJ1ZiwgbG9uZ3dvcmQg
YWxpZ25lZC4KKyAqLworI2RlZmluZQlNX0FMSUdOKG0sIGxlbikgZG8gewkJCQkJCVwKKyAgICAg
ICAgS0FTU0VSVCghKChtKS0+bV9mbGFncyAmIChNX1BLVEhEUnxNX0VYVCkpLCAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoIiVzOiBNX0FMSUdOIG5vdCBub3JtYWwgbWJ1
ZiIsIF9fZnVuY19fKSk7ICAgICAgICAgICAgIFwKKyAgICAgICAgS0FTU0VSVCgobSktPm1fZGF0
YSA9PSAobSktPm1fZGF0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgICAgICAoIiVzOiBNX0FMSUdOIG5vdCBhIHZpcmdpbiBtYnVmIiwgX19mdW5jX18pKTsgICAg
ICAgICAgIFwKKwkobSktPm1fZGF0YSArPSAoTUxFTiAtIChsZW4pKSAmIH4oc2l6ZW9mKGxvbmcp
IC0gMSk7CQlcCit9IHdoaWxlICgwKQorCisvKgorICogQXMgYWJvdmUsIGZvciBtYnVmcyBhbGxv
Y2F0ZWQgd2l0aCBtX2dldGhkci9NR0VUSERSIG9yIGluaXRpYWxpemVkIGJ5CisgKiBNX0RVUC9N
T1ZFX1BLVEhEUi4KKyAqLworI2RlZmluZQlNSF9BTElHTihtLCBsZW4pIGRvIHsJCQkJCQlcCisg
ICAgICAgIEtBU1NFUlQoKG0pLT5tX2ZsYWdzICYgTV9QS1RIRFIgJiYgISgobSktPm1fZmxhZ3Mg
JiBNX0VYVCksICAgICBcCisgICAgICAgICAgICAgICAgKCIlczogTUhfQUxJR04gbm90IFBLVEhE
UiBtYnVmIiwgX19mdW5jX18pKTsgICAgICAgICAgICBcCisgICAgICAgIEtBU1NFUlQoKG0pLT5t
X2RhdGEgPT0gKG0pLT5tX3BrdGRhdCwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICAgICAgKCIlczogTUhfQUxJR04gbm90IGEgdmlyZ2luIG1idWYiLCBfX2Z1bmNfXykp
OyAgICAgICAgICBcCisJKG0pLT5tX2RhdGEgKz0gKE1ITEVOIC0gKGxlbikpICYgfihzaXplb2Yo
bG9uZykgLSAxKTsJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgTV9TSVpFKG0pCQkJCQkJXAor
CQkoKChtKS0+bV9mbGFncyAmIE1fRVhUKSA/IChtKS0+bV9leHQuZXh0X3NpemUgOglcCisJCSgo
bSktPm1fZmxhZ3MgJiBNX1BLVEhEUikgPyBNSExFTiA6CQlcCisJCU1MRU4pCisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX3F1ZXVlLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91
c3JzY3RwbGliL3VzZXJfcXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAw
MDAwMDAuLmZjZDM2OGJkZDI2NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBs
aWIvdXNlcl9xdWV1ZS5oCkBAIC0wLDAgKzEsNjM5IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykg
MTk5MSwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5p
YS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1l
IG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICog
ICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRT
IEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
UkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAor
ICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QK
KyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgor
ICoKKyAqLworCisjaWZuZGVmIF9VU0VSX1FVRVVFX0hfCisjZGVmaW5lCV9VU0VSX1FVRVVFX0hf
CisKKy8qCisgKiBUaGlzIGZpbGUgZGVmaW5lcyBmb3VyIHR5cGVzIG9mIGRhdGEgc3RydWN0dXJl
czogc2luZ2x5LWxpbmtlZCBsaXN0cywKKyAqIHNpbmdseS1saW5rZWQgdGFpbCBxdWV1ZXMsIGxp
c3RzIGFuZCB0YWlsIHF1ZXVlcy4KKyAqCisgKiBBIHNpbmdseS1saW5rZWQgbGlzdCBpcyBoZWFk
ZWQgYnkgYSBzaW5nbGUgZm9yd2FyZCBwb2ludGVyLiBUaGUgZWxlbWVudHMKKyAqIGFyZSBzaW5n
bHkgbGlua2VkIGZvciBtaW5pbXVtIHNwYWNlIGFuZCBwb2ludGVyIG1hbmlwdWxhdGlvbiBvdmVy
aGVhZCBhdAorICogdGhlIGV4cGVuc2Ugb2YgTyhuKSByZW1vdmFsIGZvciBhcmJpdHJhcnkgZWxl
bWVudHMuIE5ldyBlbGVtZW50cyBjYW4gYmUKKyAqIGFkZGVkIHRvIHRoZSBsaXN0IGFmdGVyIGFu
IGV4aXN0aW5nIGVsZW1lbnQgb3IgYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QuCisgKiBFbGVtZW50
cyBiZWluZyByZW1vdmVkIGZyb20gdGhlIGhlYWQgb2YgdGhlIGxpc3Qgc2hvdWxkIHVzZSB0aGUg
ZXhwbGljaXQKKyAqIG1hY3JvIGZvciB0aGlzIHB1cnBvc2UgZm9yIG9wdGltdW0gZWZmaWNpZW5j
eS4gQSBzaW5nbHktbGlua2VkIGxpc3QgbWF5CisgKiBvbmx5IGJlIHRyYXZlcnNlZCBpbiB0aGUg
Zm9yd2FyZCBkaXJlY3Rpb24uICBTaW5nbHktbGlua2VkIGxpc3RzIGFyZSBpZGVhbAorICogZm9y
IGFwcGxpY2F0aW9ucyB3aXRoIGxhcmdlIGRhdGFzZXRzIGFuZCBmZXcgb3Igbm8gcmVtb3ZhbHMg
b3IgZm9yCisgKiBpbXBsZW1lbnRpbmcgYSBMSUZPIHF1ZXVlLgorICoKKyAqIEEgc2luZ2x5LWxp
bmtlZCB0YWlsIHF1ZXVlIGlzIGhlYWRlZCBieSBhIHBhaXIgb2YgcG9pbnRlcnMsIG9uZSB0byB0
aGUKKyAqIGhlYWQgb2YgdGhlIGxpc3QgYW5kIHRoZSBvdGhlciB0byB0aGUgdGFpbCBvZiB0aGUg
bGlzdC4gVGhlIGVsZW1lbnRzIGFyZQorICogc2luZ2x5IGxpbmtlZCBmb3IgbWluaW11bSBzcGFj
ZSBhbmQgcG9pbnRlciBtYW5pcHVsYXRpb24gb3ZlcmhlYWQgYXQgdGhlCisgKiBleHBlbnNlIG9m
IE8obikgcmVtb3ZhbCBmb3IgYXJiaXRyYXJ5IGVsZW1lbnRzLiBOZXcgZWxlbWVudHMgY2FuIGJl
IGFkZGVkCisgKiB0byB0aGUgbGlzdCBhZnRlciBhbiBleGlzdGluZyBlbGVtZW50LCBhdCB0aGUg
aGVhZCBvZiB0aGUgbGlzdCwgb3IgYXQgdGhlCisgKiBlbmQgb2YgdGhlIGxpc3QuIEVsZW1lbnRz
IGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgaGVhZCBvZiB0aGUgdGFpbCBxdWV1ZQorICogc2hvdWxk
IHVzZSB0aGUgZXhwbGljaXQgbWFjcm8gZm9yIHRoaXMgcHVycG9zZSBmb3Igb3B0aW11bSBlZmZp
Y2llbmN5LgorICogQSBzaW5nbHktbGlua2VkIHRhaWwgcXVldWUgbWF5IG9ubHkgYmUgdHJhdmVy
c2VkIGluIHRoZSBmb3J3YXJkIGRpcmVjdGlvbi4KKyAqIFNpbmdseS1saW5rZWQgdGFpbCBxdWV1
ZXMgYXJlIGlkZWFsIGZvciBhcHBsaWNhdGlvbnMgd2l0aCBsYXJnZSBkYXRhc2V0cworICogYW5k
IGZldyBvciBubyByZW1vdmFscyBvciBmb3IgaW1wbGVtZW50aW5nIGEgRklGTyBxdWV1ZS4KKyAq
CisgKiBBIGxpc3QgaXMgaGVhZGVkIGJ5IGEgc2luZ2xlIGZvcndhcmQgcG9pbnRlciAob3IgYW4g
YXJyYXkgb2YgZm9yd2FyZAorICogcG9pbnRlcnMgZm9yIGEgaGFzaCB0YWJsZSBoZWFkZXIpLiBU
aGUgZWxlbWVudHMgYXJlIGRvdWJseSBsaW5rZWQKKyAqIHNvIHRoYXQgYW4gYXJiaXRyYXJ5IGVs
ZW1lbnQgY2FuIGJlIHJlbW92ZWQgd2l0aG91dCBhIG5lZWQgdG8KKyAqIHRyYXZlcnNlIHRoZSBs
aXN0LiBOZXcgZWxlbWVudHMgY2FuIGJlIGFkZGVkIHRvIHRoZSBsaXN0IGJlZm9yZQorICogb3Ig
YWZ0ZXIgYW4gZXhpc3RpbmcgZWxlbWVudCBvciBhdCB0aGUgaGVhZCBvZiB0aGUgbGlzdC4gQSBs
aXN0CisgKiBtYXkgb25seSBiZSB0cmF2ZXJzZWQgaW4gdGhlIGZvcndhcmQgZGlyZWN0aW9uLgor
ICoKKyAqIEEgdGFpbCBxdWV1ZSBpcyBoZWFkZWQgYnkgYSBwYWlyIG9mIHBvaW50ZXJzLCBvbmUg
dG8gdGhlIGhlYWQgb2YgdGhlCisgKiBsaXN0IGFuZCB0aGUgb3RoZXIgdG8gdGhlIHRhaWwgb2Yg
dGhlIGxpc3QuIFRoZSBlbGVtZW50cyBhcmUgZG91Ymx5CisgKiBsaW5rZWQgc28gdGhhdCBhbiBh
cmJpdHJhcnkgZWxlbWVudCBjYW4gYmUgcmVtb3ZlZCB3aXRob3V0IGEgbmVlZCB0bworICogdHJh
dmVyc2UgdGhlIGxpc3QuIE5ldyBlbGVtZW50cyBjYW4gYmUgYWRkZWQgdG8gdGhlIGxpc3QgYmVm
b3JlIG9yCisgKiBhZnRlciBhbiBleGlzdGluZyBlbGVtZW50LCBhdCB0aGUgaGVhZCBvZiB0aGUg
bGlzdCwgb3IgYXQgdGhlIGVuZCBvZgorICogdGhlIGxpc3QuIEEgdGFpbCBxdWV1ZSBtYXkgYmUg
dHJhdmVyc2VkIGluIGVpdGhlciBkaXJlY3Rpb24uCisgKgorICogRm9yIGRldGFpbHMgb24gdGhl
IHVzZSBvZiB0aGVzZSBtYWNyb3MsIHNlZSB0aGUgcXVldWUoMykgbWFudWFsIHBhZ2UuCisgKgor
ICoKKyAqCQkJCVNMSVNUCUxJU1QJU1RBSUxRCVRBSUxRCisgKiBfSEVBRAkJCSsJKwkrCSsKKyAq
IF9IRUFEX0lOSVRJQUxJWkVSCQkrCSsJKwkrCisgKiBfRU5UUlkJCQkrCSsJKwkrCisgKiBfSU5J
VAkJCSsJKwkrCSsKKyAqIF9FTVBUWQkJCSsJKwkrCSsKKyAqIF9GSVJTVAkJCSsJKwkrCSsKKyAq
IF9ORVhUCQkJKwkrCSsJKworICogX1BSRVYJCQktCS0JLQkrCisgKiBfTEFTVAkJCS0JLQkrCSsK
KyAqIF9GT1JFQUNICQkJKwkrCSsJKworICogX0ZPUkVBQ0hfU0FGRQkJKwkrCSsJKworICogX0ZP
UkVBQ0hfUkVWRVJTRQkJLQktCS0JKworICogX0ZPUkVBQ0hfUkVWRVJTRV9TQUZFCS0JLQktCSsK
KyAqIF9JTlNFUlRfSEVBRAkJCSsJKwkrCSsKKyAqIF9JTlNFUlRfQkVGT1JFCQktCSsJLQkrCisg
KiBfSU5TRVJUX0FGVEVSCQkrCSsJKwkrCisgKiBfSU5TRVJUX1RBSUwJCQktCS0JKwkrCisgKiBf
Q09OQ0FUCQkJLQktCSsJKworICogX1JFTU9WRV9BRlRFUgkJKwktCSsJLQorICogX1JFTU9WRV9I
RUFECQkJKwktCSsJLQorICogX1JFTU9WRQkJCSsJKwkrCSsKKyAqIF9TV0FQCQkJKwkrCSsJKwor
ICoKKyAqLworI2lmZGVmIFFVRVVFX01BQ1JPX0RFQlVHCisvKiBTdG9yZSB0aGUgbGFzdCAyIHBs
YWNlcyB0aGUgcXVldWUgZWxlbWVudCBvciBoZWFkIHdhcyBhbHRlcmVkICovCitzdHJ1Y3QgcW1f
dHJhY2UgeworCWNoYXIgKiBsYXN0ZmlsZTsKKwlpbnQgbGFzdGxpbmU7CisJY2hhciAqIHByZXZm
aWxlOworCWludCBwcmV2bGluZTsKK307CisKKyNkZWZpbmUJVFJBQ0VCVUYJc3RydWN0IHFtX3Ry
YWNlIHRyYWNlOworI2RlZmluZQlUUkFTSElUKHgpCWRvIHsoeCkgPSAodm9pZCAqKS0xO30gd2hp
bGUgKDApCisjZGVmaW5lCVFNRF9TQVZFTElOSyhuYW1lLCBsaW5rKQl2b2lkICoqbmFtZSA9ICh2
b2lkICopJihsaW5rKQorCisjZGVmaW5lCVFNRF9UUkFDRV9IRUFEKGhlYWQpIGRvIHsJCQkJCVwK
KwkoaGVhZCktPnRyYWNlLnByZXZsaW5lID0gKGhlYWQpLT50cmFjZS5sYXN0bGluZTsJCVwKKwko
aGVhZCktPnRyYWNlLnByZXZmaWxlID0gKGhlYWQpLT50cmFjZS5sYXN0ZmlsZTsJCVwKKwkoaGVh
ZCktPnRyYWNlLmxhc3RsaW5lID0gX19MSU5FX187CQkJCVwKKwkoaGVhZCktPnRyYWNlLmxhc3Rm
aWxlID0gX19GSUxFX187CQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJUU1EX1RSQUNFX0VM
RU0oZWxlbSkgZG8gewkJCQkJXAorCShlbGVtKS0+dHJhY2UucHJldmxpbmUgPSAoZWxlbSktPnRy
YWNlLmxhc3RsaW5lOwkJXAorCShlbGVtKS0+dHJhY2UucHJldmZpbGUgPSAoZWxlbSktPnRyYWNl
Lmxhc3RmaWxlOwkJXAorCShlbGVtKS0+dHJhY2UubGFzdGxpbmUgPSBfX0xJTkVfXzsJCQkJXAor
CShlbGVtKS0+dHJhY2UubGFzdGZpbGUgPSBfX0ZJTEVfXzsJCQkJXAorfSB3aGlsZSAoMCkKKwor
I2Vsc2UKKyNkZWZpbmUJUU1EX1RSQUNFX0VMRU0oZWxlbSkKKyNkZWZpbmUJUU1EX1RSQUNFX0hF
QUQoaGVhZCkKKyNkZWZpbmUJUU1EX1NBVkVMSU5LKG5hbWUsIGxpbmspCisjZGVmaW5lCVRSQUNF
QlVGCisjZGVmaW5lCVRSQVNISVQoeCkKKyNlbmRpZgkvKiBRVUVVRV9NQUNST19ERUJVRyAqLwor
CisvKgorICogU2luZ2x5LWxpbmtlZCBMaXN0IGRlY2xhcmF0aW9ucy4KKyAqLworI2RlZmluZQlT
TElTVF9IRUFEKG5hbWUsIHR5cGUpCQkJCQkJXAorc3RydWN0IG5hbWUgewkJCQkJCQkJXAorCXN0
cnVjdCB0eXBlICpzbGhfZmlyc3Q7CS8qIGZpcnN0IGVsZW1lbnQgKi8JCQlcCit9CisKKyNkZWZp
bmUJU0xJU1RfSEVBRF9JTklUSUFMSVpFUihoZWFkKQkJCQkJXAorCXsgTlVMTCB9CisKKyNpZiBk
ZWZpbmVkKF9XSU4zMikKKyNpZiBkZWZpbmVkKFNMSVNUX0VOVFJZKQorI3VuZGVmIFNMSVNUX0VO
VFJZCisjZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lCVNMSVNUX0VOVFJZKHR5cGUpCQkJCQkJXAor
c3RydWN0IHsJCQkJCQkJCVwKKwlzdHJ1Y3QgdHlwZSAqc2xlX25leHQ7CS8qIG5leHQgZWxlbWVu
dCAqLwkJCVwKK30KKworLyoKKyAqIFNpbmdseS1saW5rZWQgTGlzdCBmdW5jdGlvbnMuCisgKi8K
KyNkZWZpbmUJU0xJU1RfRU1QVFkoaGVhZCkJKChoZWFkKS0+c2xoX2ZpcnN0ID09IE5VTEwpCisK
KyNkZWZpbmUJU0xJU1RfRklSU1QoaGVhZCkJKChoZWFkKS0+c2xoX2ZpcnN0KQorCisjZGVmaW5l
CVNMSVNUX0ZPUkVBQ0godmFyLCBoZWFkLCBmaWVsZCkJCQkJCVwKKwlmb3IgKCh2YXIpID0gU0xJ
U1RfRklSU1QoKGhlYWQpKTsJCQkJXAorCSAgICAodmFyKTsJCQkJCQkJXAorCSAgICAodmFyKSA9
IFNMSVNUX05FWFQoKHZhciksIGZpZWxkKSkKKworI2RlZmluZQlTTElTVF9GT1JFQUNIX1NBRkUo
dmFyLCBoZWFkLCBmaWVsZCwgdHZhcikJCQlcCisJZm9yICgodmFyKSA9IFNMSVNUX0ZJUlNUKCho
ZWFkKSk7CQkJCVwKKwkgICAgKHZhcikgJiYgKCh0dmFyKSA9IFNMSVNUX05FWFQoKHZhciksIGZp
ZWxkKSwgMSk7CQlcCisJICAgICh2YXIpID0gKHR2YXIpKQorCisjZGVmaW5lCVNMSVNUX0ZPUkVB
Q0hfUFJFVlBUUih2YXIsIHZhcnAsIGhlYWQsIGZpZWxkKQkJCVwKKwlmb3IgKCh2YXJwKSA9ICZT
TElTVF9GSVJTVCgoaGVhZCkpOwkJCQlcCisJICAgICgodmFyKSA9ICoodmFycCkpICE9IE5VTEw7
CQkJCQlcCisJICAgICh2YXJwKSA9ICZTTElTVF9ORVhUKCh2YXIpLCBmaWVsZCkpCisKKyNkZWZp
bmUJU0xJU1RfSU5JVChoZWFkKSBkbyB7CQkJCQkJXAorCVNMSVNUX0ZJUlNUKChoZWFkKSkgPSBO
VUxMOwkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlTTElTVF9JTlNFUlRfQUZURVIoc2xp
c3RlbG0sIGVsbSwgZmllbGQpIGRvIHsJCQlcCisJU0xJU1RfTkVYVCgoZWxtKSwgZmllbGQpID0g
U0xJU1RfTkVYVCgoc2xpc3RlbG0pLCBmaWVsZCk7CVwKKwlTTElTVF9ORVhUKChzbGlzdGVsbSks
IGZpZWxkKSA9IChlbG0pOwkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCVNMSVNUX0lOU0VS
VF9IRUFEKGhlYWQsIGVsbSwgZmllbGQpIGRvIHsJCQlcCisJU0xJU1RfTkVYVCgoZWxtKSwgZmll
bGQpID0gU0xJU1RfRklSU1QoKGhlYWQpKTsJCQlcCisJU0xJU1RfRklSU1QoKGhlYWQpKSA9IChl
bG0pOwkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlTTElTVF9ORVhUKGVsbSwgZmllbGQp
CSgoZWxtKS0+ZmllbGQuc2xlX25leHQpCisKKyNkZWZpbmUJU0xJU1RfUkVNT1ZFKGhlYWQsIGVs
bSwgdHlwZSwgZmllbGQpIGRvIHsJCQlcCisJUU1EX1NBVkVMSU5LKG9sZG5leHQsIChlbG0pLT5m
aWVsZC5zbGVfbmV4dCk7CQkJXAorCWlmIChTTElTVF9GSVJTVCgoaGVhZCkpID09IChlbG0pKSB7
CQkJCVwKKwkJU0xJU1RfUkVNT1ZFX0hFQUQoKGhlYWQpLCBmaWVsZCk7CQkJXAorCX0JCQkJCQkJ
CVwKKwllbHNlIHsJCQkJCQkJCVwKKwkJc3RydWN0IHR5cGUgKmN1cmVsbSA9IFNMSVNUX0ZJUlNU
KChoZWFkKSk7CQlcCisJCXdoaWxlIChTTElTVF9ORVhUKGN1cmVsbSwgZmllbGQpICE9IChlbG0p
KQkJXAorCQkJY3VyZWxtID0gU0xJU1RfTkVYVChjdXJlbG0sIGZpZWxkKTsJCVwKKwkJU0xJU1Rf
UkVNT1ZFX0FGVEVSKGN1cmVsbSwgZmllbGQpOwkJCVwKKwl9CQkJCQkJCQlcCisJVFJBU0hJVCgq
b2xkbmV4dCk7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBTTElTVF9SRU1PVkVfQUZU
RVIoZWxtLCBmaWVsZCkgZG8gewkJCQlcCisJU0xJU1RfTkVYVChlbG0sIGZpZWxkKSA9CQkJCQlc
CisJICAgIFNMSVNUX05FWFQoU0xJU1RfTkVYVChlbG0sIGZpZWxkKSwgZmllbGQpOwkJCVwKK30g
d2hpbGUgKDApCisKKyNkZWZpbmUJU0xJU1RfUkVNT1ZFX0hFQUQoaGVhZCwgZmllbGQpIGRvIHsJ
CQkJXAorCVNMSVNUX0ZJUlNUKChoZWFkKSkgPSBTTElTVF9ORVhUKFNMSVNUX0ZJUlNUKChoZWFk
KSksIGZpZWxkKTsJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBTTElTVF9TV0FQKGhlYWQxLCBo
ZWFkMiwgdHlwZSkgZG8gewkJCQlcCisJc3RydWN0IHR5cGUgKnN3YXBfZmlyc3QgPSBTTElTVF9G
SVJTVChoZWFkMSk7CQkJXAorCVNMSVNUX0ZJUlNUKGhlYWQxKSA9IFNMSVNUX0ZJUlNUKGhlYWQy
KTsJCQlcCisJU0xJU1RfRklSU1QoaGVhZDIpID0gc3dhcF9maXJzdDsJCQkJXAorfSB3aGlsZSAo
MCkKKworLyoKKyAqIFNpbmdseS1saW5rZWQgVGFpbCBxdWV1ZSBkZWNsYXJhdGlvbnMuCisgKi8K
KyNkZWZpbmUJU1RBSUxRX0hFQUQobmFtZSwgdHlwZSkJCQkJCQlcCitzdHJ1Y3QgbmFtZSB7CQkJ
CQkJCQlcCisJc3RydWN0IHR5cGUgKnN0cWhfZmlyc3Q7LyogZmlyc3QgZWxlbWVudCAqLwkJCVwK
KwlzdHJ1Y3QgdHlwZSAqKnN0cWhfbGFzdDsvKiBhZGRyIG9mIGxhc3QgbmV4dCBlbGVtZW50ICov
CQlcCit9CisKKyNkZWZpbmUJU1RBSUxRX0hFQURfSU5JVElBTElaRVIoaGVhZCkJCQkJCVwKKwl7
IE5VTEwsICYoaGVhZCkuc3RxaF9maXJzdCB9CisKKyNkZWZpbmUJU1RBSUxRX0VOVFJZKHR5cGUp
CQkJCQkJXAorc3RydWN0IHsJCQkJCQkJCVwKKwlzdHJ1Y3QgdHlwZSAqc3RxZV9uZXh0OwkvKiBu
ZXh0IGVsZW1lbnQgKi8JCQlcCit9CisKKy8qCisgKiBTaW5nbHktbGlua2VkIFRhaWwgcXVldWUg
ZnVuY3Rpb25zLgorICovCisjZGVmaW5lCVNUQUlMUV9DT05DQVQoaGVhZDEsIGhlYWQyKSBkbyB7
CQkJCVwKKwlpZiAoIVNUQUlMUV9FTVBUWSgoaGVhZDIpKSkgewkJCQkJXAorCQkqKGhlYWQxKS0+
c3RxaF9sYXN0ID0gKGhlYWQyKS0+c3RxaF9maXJzdDsJCVwKKwkJKGhlYWQxKS0+c3RxaF9sYXN0
ID0gKGhlYWQyKS0+c3RxaF9sYXN0OwkJXAorCQlTVEFJTFFfSU5JVCgoaGVhZDIpKTsJCQkJCVwK
Kwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCVNUQUlMUV9FTVBUWShoZWFkKQko
KGhlYWQpLT5zdHFoX2ZpcnN0ID09IE5VTEwpCisKKyNkZWZpbmUJU1RBSUxRX0ZJUlNUKGhlYWQp
CSgoaGVhZCktPnN0cWhfZmlyc3QpCisKKyNkZWZpbmUJU1RBSUxRX0ZPUkVBQ0godmFyLCBoZWFk
LCBmaWVsZCkJCQkJXAorCWZvcigodmFyKSA9IFNUQUlMUV9GSVJTVCgoaGVhZCkpOwkJCQlcCisJ
ICAgKHZhcik7CQkJCQkJCVwKKwkgICAodmFyKSA9IFNUQUlMUV9ORVhUKCh2YXIpLCBmaWVsZCkp
CisKKworI2RlZmluZQlTVEFJTFFfRk9SRUFDSF9TQUZFKHZhciwgaGVhZCwgZmllbGQsIHR2YXIp
CQkJXAorCWZvciAoKHZhcikgPSBTVEFJTFFfRklSU1QoKGhlYWQpKTsJCQkJXAorCSAgICAodmFy
KSAmJiAoKHR2YXIpID0gU1RBSUxRX05FWFQoKHZhciksIGZpZWxkKSwgMSk7CQlcCisJICAgICh2
YXIpID0gKHR2YXIpKQorCisjZGVmaW5lCVNUQUlMUV9JTklUKGhlYWQpIGRvIHsJCQkJCQlcCisJ
U1RBSUxRX0ZJUlNUKChoZWFkKSkgPSBOVUxMOwkJCQkJXAorCShoZWFkKS0+c3RxaF9sYXN0ID0g
JlNUQUlMUV9GSVJTVCgoaGVhZCkpOwkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJU1RBSUxR
X0lOU0VSVF9BRlRFUihoZWFkLCB0cWVsbSwgZWxtLCBmaWVsZCkgZG8gewkJXAorCWlmICgoU1RB
SUxRX05FWFQoKGVsbSksIGZpZWxkKSA9IFNUQUlMUV9ORVhUKCh0cWVsbSksIGZpZWxkKSkgPT0g
TlVMTClcCisJCShoZWFkKS0+c3RxaF9sYXN0ID0gJlNUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCk7
CQlcCisJU1RBSUxRX05FWFQoKHRxZWxtKSwgZmllbGQpID0gKGVsbSk7CQkJCVwKK30gd2hpbGUg
KDApCisKKyNkZWZpbmUJU1RBSUxRX0lOU0VSVF9IRUFEKGhlYWQsIGVsbSwgZmllbGQpIGRvIHsJ
CQlcCisJaWYgKChTVEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpID0gU1RBSUxRX0ZJUlNUKChoZWFk
KSkpID09IE5VTEwpCVwKKwkJKGhlYWQpLT5zdHFoX2xhc3QgPSAmU1RBSUxRX05FWFQoKGVsbSks
IGZpZWxkKTsJCVwKKwlTVEFJTFFfRklSU1QoKGhlYWQpKSA9IChlbG0pOwkJCQkJXAorfSB3aGls
ZSAoMCkKKworI2RlZmluZQlTVEFJTFFfSU5TRVJUX1RBSUwoaGVhZCwgZWxtLCBmaWVsZCkgZG8g
ewkJCVwKKwlTVEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpID0gTlVMTDsJCQkJXAorCSooaGVhZCkt
PnN0cWhfbGFzdCA9IChlbG0pOwkJCQkJXAorCShoZWFkKS0+c3RxaF9sYXN0ID0gJlNUQUlMUV9O
RVhUKChlbG0pLCBmaWVsZCk7CQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlTVEFJTFFfTEFT
VChoZWFkLCB0eXBlLCBmaWVsZCkJCQkJCVwKKwkoU1RBSUxRX0VNUFRZKChoZWFkKSkgPwkJCQkJ
CVwKKwkJTlVMTCA6CQkJCQkJCVwKKwkgICAgICAgICgoc3RydWN0IHR5cGUgKikodm9pZCAqKQkJ
CQlcCisJCSgoY2hhciAqKSgoaGVhZCktPnN0cWhfbGFzdCkgLSBfX29mZnNldG9mKHN0cnVjdCB0
eXBlLCBmaWVsZCkpKSkKKworI2RlZmluZQlTVEFJTFFfTkVYVChlbG0sIGZpZWxkKQkoKGVsbSkt
PmZpZWxkLnN0cWVfbmV4dCkKKworI2RlZmluZQlTVEFJTFFfUkVNT1ZFKGhlYWQsIGVsbSwgdHlw
ZSwgZmllbGQpIGRvIHsJCQlcCisJUU1EX1NBVkVMSU5LKG9sZG5leHQsIChlbG0pLT5maWVsZC5z
dHFlX25leHQpOwkJCVwKKwlpZiAoU1RBSUxRX0ZJUlNUKChoZWFkKSkgPT0gKGVsbSkpIHsJCQkJ
XAorCQlTVEFJTFFfUkVNT1ZFX0hFQUQoKGhlYWQpLCBmaWVsZCk7CQkJXAorCX0JCQkJCQkJCVwK
KwllbHNlIHsJCQkJCQkJCVwKKwkJc3RydWN0IHR5cGUgKmN1cmVsbSA9IFNUQUlMUV9GSVJTVCgo
aGVhZCkpOwkJXAorCQl3aGlsZSAoU1RBSUxRX05FWFQoY3VyZWxtLCBmaWVsZCkgIT0gKGVsbSkp
CQlcCisJCQljdXJlbG0gPSBTVEFJTFFfTkVYVChjdXJlbG0sIGZpZWxkKTsJCVwKKwkJU1RBSUxR
X1JFTU9WRV9BRlRFUihoZWFkLCBjdXJlbG0sIGZpZWxkKTsJCVwKKwl9CQkJCQkJCQlcCisJVFJB
U0hJVCgqb2xkbmV4dCk7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBTVEFJTFFfUkVN
T1ZFX0FGVEVSKGhlYWQsIGVsbSwgZmllbGQpIGRvIHsJCQlcCisJaWYgKChTVEFJTFFfTkVYVChl
bG0sIGZpZWxkKSA9CQkJCQlcCisJICAgICBTVEFJTFFfTkVYVChTVEFJTFFfTkVYVChlbG0sIGZp
ZWxkKSwgZmllbGQpKSA9PSBOVUxMKQlcCisJCShoZWFkKS0+c3RxaF9sYXN0ID0gJlNUQUlMUV9O
RVhUKChlbG0pLCBmaWVsZCk7CQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCVNUQUlMUV9SRU1P
VkVfSEVBRChoZWFkLCBmaWVsZCkgZG8gewkJCQlcCisJaWYgKChTVEFJTFFfRklSU1QoKGhlYWQp
KSA9CQkJCQlcCisJICAgICBTVEFJTFFfTkVYVChTVEFJTFFfRklSU1QoKGhlYWQpKSwgZmllbGQp
KSA9PSBOVUxMKQkJXAorCQkoaGVhZCktPnN0cWhfbGFzdCA9ICZTVEFJTFFfRklSU1QoKGhlYWQp
KTsJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgU1RBSUxRX1NXQVAoaGVhZDEsIGhlYWQyLCB0
eXBlKSBkbyB7CQkJCVwKKwlzdHJ1Y3QgdHlwZSAqc3dhcF9maXJzdCA9IFNUQUlMUV9GSVJTVCho
ZWFkMSk7CQkJXAorCXN0cnVjdCB0eXBlICoqc3dhcF9sYXN0ID0gKGhlYWQxKS0+c3RxaF9sYXN0
OwkJCVwKKwlTVEFJTFFfRklSU1QoaGVhZDEpID0gU1RBSUxRX0ZJUlNUKGhlYWQyKTsJCQlcCisJ
KGhlYWQxKS0+c3RxaF9sYXN0ID0gKGhlYWQyKS0+c3RxaF9sYXN0OwkJCVwKKwlTVEFJTFFfRklS
U1QoaGVhZDIpID0gc3dhcF9maXJzdDsJCQkJXAorCShoZWFkMiktPnN0cWhfbGFzdCA9IHN3YXBf
bGFzdDsJCQkJCVwKKwlpZiAoU1RBSUxRX0VNUFRZKGhlYWQxKSkJCQkJCVwKKwkJKGhlYWQxKS0+
c3RxaF9sYXN0ID0gJlNUQUlMUV9GSVJTVChoZWFkMSk7CQlcCisJaWYgKFNUQUlMUV9FTVBUWSho
ZWFkMikpCQkJCQlcCisJCShoZWFkMiktPnN0cWhfbGFzdCA9ICZTVEFJTFFfRklSU1QoaGVhZDIp
OwkJXAorfSB3aGlsZSAoMCkKKworCisvKgorICogTGlzdCBkZWNsYXJhdGlvbnMuCisgKi8KKyNk
ZWZpbmUJTElTVF9IRUFEKG5hbWUsIHR5cGUpCQkJCQkJXAorc3RydWN0IG5hbWUgewkJCQkJCQkJ
XAorCXN0cnVjdCB0eXBlICpsaF9maXJzdDsJLyogZmlyc3QgZWxlbWVudCAqLwkJCVwKK30KKwor
I2RlZmluZQlMSVNUX0hFQURfSU5JVElBTElaRVIoaGVhZCkJCQkJCVwKKwl7IE5VTEwgfQorCisj
ZGVmaW5lCUxJU1RfRU5UUlkodHlwZSkJCQkJCQlcCitzdHJ1Y3QgewkJCQkJCQkJXAorCXN0cnVj
dCB0eXBlICpsZV9uZXh0OwkvKiBuZXh0IGVsZW1lbnQgKi8JCQlcCisJc3RydWN0IHR5cGUgKips
ZV9wcmV2OwkvKiBhZGRyZXNzIG9mIHByZXZpb3VzIG5leHQgZWxlbWVudCAqLwlcCit9CisKKy8q
CisgKiBMaXN0IGZ1bmN0aW9ucy4KKyAqLworCisjaWYgZGVmaW5lZChJTlZBUklBTlRTKQorI2Rl
ZmluZQlRTURfTElTVF9DSEVDS19IRUFEKGhlYWQsIGZpZWxkKSBkbyB7CQkJCQlcCisJaWYgKExJ
U1RfRklSU1QoKGhlYWQpKSAhPSBOVUxMICYmCQkJCQlcCisJICAgIExJU1RfRklSU1QoKGhlYWQp
KS0+ZmllbGQubGVfcHJldiAhPQkJCQlcCisJICAgICAmTElTVF9GSVJTVCgoaGVhZCkpKQkJCQkJ
CVwKKwkJcGFuaWMoIkJhZCBsaXN0IGhlYWQgJXAgZmlyc3QtPnByZXYgIT0gaGVhZCIsICh2b2lk
ICopKGhlYWQpKTsJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlRTURfTElTVF9DSEVDS19ORVhU
KGVsbSwgZmllbGQpIGRvIHsJCQkJCVwKKwlpZiAoTElTVF9ORVhUKChlbG0pLCBmaWVsZCkgIT0g
TlVMTCAmJgkJCQkJXAorCSAgICBMSVNUX05FWFQoKGVsbSksIGZpZWxkKS0+ZmllbGQubGVfcHJl
diAhPQkJCQlcCisJICAgICAmKChlbG0pLT5maWVsZC5sZV9uZXh0KSkJCQkJCQlcCisJICAgICAJ
cGFuaWMoIkJhZCBsaW5rIGVsbSAlcCBuZXh0LT5wcmV2ICE9IGVsbSIsICh2b2lkICopKGVsbSkp
OwlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCVFNRF9MSVNUX0NIRUNLX1BSRVYoZWxtLCBmaWVs
ZCkgZG8gewkJCQkJXAorCWlmICgqKGVsbSktPmZpZWxkLmxlX3ByZXYgIT0gKGVsbSkpCQkJCQlc
CisJCXBhbmljKCJCYWQgbGluayBlbG0gJXAgcHJldi0+bmV4dCAhPSBlbG0iLCAodm9pZCAqKShl
bG0pKTsJXAorfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lCVFNRF9MSVNUX0NIRUNLX0hFQUQo
aGVhZCwgZmllbGQpCisjZGVmaW5lCVFNRF9MSVNUX0NIRUNLX05FWFQoZWxtLCBmaWVsZCkKKyNk
ZWZpbmUJUU1EX0xJU1RfQ0hFQ0tfUFJFVihlbG0sIGZpZWxkKQorI2VuZGlmIC8qIChJTlZBUklB
TlRTKSAqLworCisjZGVmaW5lCUxJU1RfRU1QVFkoaGVhZCkJKChoZWFkKS0+bGhfZmlyc3QgPT0g
TlVMTCkKKworI2RlZmluZQlMSVNUX0ZJUlNUKGhlYWQpCSgoaGVhZCktPmxoX2ZpcnN0KQorCisj
ZGVmaW5lCUxJU1RfRk9SRUFDSCh2YXIsIGhlYWQsIGZpZWxkKQkJCQkJXAorCWZvciAoKHZhcikg
PSBMSVNUX0ZJUlNUKChoZWFkKSk7CQkJCVwKKwkgICAgKHZhcik7CQkJCQkJCVwKKwkgICAgKHZh
cikgPSBMSVNUX05FWFQoKHZhciksIGZpZWxkKSkKKworI2RlZmluZQlMSVNUX0ZPUkVBQ0hfU0FG
RSh2YXIsIGhlYWQsIGZpZWxkLCB0dmFyKQkJCVwKKwlmb3IgKCh2YXIpID0gTElTVF9GSVJTVCgo
aGVhZCkpOwkJCQlcCisJICAgICh2YXIpICYmICgodHZhcikgPSBMSVNUX05FWFQoKHZhciksIGZp
ZWxkKSwgMSk7CQlcCisJICAgICh2YXIpID0gKHR2YXIpKQorCisjZGVmaW5lCUxJU1RfSU5JVCho
ZWFkKSBkbyB7CQkJCQkJXAorCUxJU1RfRklSU1QoKGhlYWQpKSA9IE5VTEw7CQkJCQlcCit9IHdo
aWxlICgwKQorCisjZGVmaW5lCUxJU1RfSU5TRVJUX0FGVEVSKGxpc3RlbG0sIGVsbSwgZmllbGQp
IGRvIHsJCQlcCisJUU1EX0xJU1RfQ0hFQ0tfTkVYVChsaXN0ZWxtLCBmaWVsZCk7CQkJCVwKKwlp
ZiAoKExJU1RfTkVYVCgoZWxtKSwgZmllbGQpID0gTElTVF9ORVhUKChsaXN0ZWxtKSwgZmllbGQp
KSAhPSBOVUxMKVwKKwkJTElTVF9ORVhUKChsaXN0ZWxtKSwgZmllbGQpLT5maWVsZC5sZV9wcmV2
ID0JCVwKKwkJICAgICZMSVNUX05FWFQoKGVsbSksIGZpZWxkKTsJCQkJXAorCUxJU1RfTkVYVCgo
bGlzdGVsbSksIGZpZWxkKSA9IChlbG0pOwkJCQlcCisJKGVsbSktPmZpZWxkLmxlX3ByZXYgPSAm
TElTVF9ORVhUKChsaXN0ZWxtKSwgZmllbGQpOwkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlM
SVNUX0lOU0VSVF9CRUZPUkUobGlzdGVsbSwgZWxtLCBmaWVsZCkgZG8gewkJCVwKKwlRTURfTElT
VF9DSEVDS19QUkVWKGxpc3RlbG0sIGZpZWxkKTsJCQkJXAorCShlbG0pLT5maWVsZC5sZV9wcmV2
ID0gKGxpc3RlbG0pLT5maWVsZC5sZV9wcmV2OwkJXAorCUxJU1RfTkVYVCgoZWxtKSwgZmllbGQp
ID0gKGxpc3RlbG0pOwkJCQlcCisJKihsaXN0ZWxtKS0+ZmllbGQubGVfcHJldiA9IChlbG0pOwkJ
CQlcCisJKGxpc3RlbG0pLT5maWVsZC5sZV9wcmV2ID0gJkxJU1RfTkVYVCgoZWxtKSwgZmllbGQp
OwkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlMSVNUX0lOU0VSVF9IRUFEKGhlYWQsIGVsbSwg
ZmllbGQpIGRvIHsJCQkJXAorCVFNRF9MSVNUX0NIRUNLX0hFQUQoKGhlYWQpLCBmaWVsZCk7CQkJ
CVwKKwlpZiAoKExJU1RfTkVYVCgoZWxtKSwgZmllbGQpID0gTElTVF9GSVJTVCgoaGVhZCkpKSAh
PSBOVUxMKQlcCisJCUxJU1RfRklSU1QoKGhlYWQpKS0+ZmllbGQubGVfcHJldiA9ICZMSVNUX05F
WFQoKGVsbSksIGZpZWxkKTtcCisJTElTVF9GSVJTVCgoaGVhZCkpID0gKGVsbSk7CQkJCQlcCisJ
KGVsbSktPmZpZWxkLmxlX3ByZXYgPSAmTElTVF9GSVJTVCgoaGVhZCkpOwkJCVwKK30gd2hpbGUg
KDApCisKKyNkZWZpbmUJTElTVF9ORVhUKGVsbSwgZmllbGQpCSgoZWxtKS0+ZmllbGQubGVfbmV4
dCkKKworI2RlZmluZQlMSVNUX1JFTU9WRShlbG0sIGZpZWxkKSBkbyB7CQkJCQlcCisJUU1EX1NB
VkVMSU5LKG9sZG5leHQsIChlbG0pLT5maWVsZC5sZV9uZXh0KTsJCQlcCisJUU1EX1NBVkVMSU5L
KG9sZHByZXYsIChlbG0pLT5maWVsZC5sZV9wcmV2KTsJCQlcCisJUU1EX0xJU1RfQ0hFQ0tfTkVY
VChlbG0sIGZpZWxkKTsJCQkJXAorCVFNRF9MSVNUX0NIRUNLX1BSRVYoZWxtLCBmaWVsZCk7CQkJ
CVwKKwlpZiAoTElTVF9ORVhUKChlbG0pLCBmaWVsZCkgIT0gTlVMTCkJCQkJXAorCQlMSVNUX05F
WFQoKGVsbSksIGZpZWxkKS0+ZmllbGQubGVfcHJldiA9IAkJXAorCQkgICAgKGVsbSktPmZpZWxk
LmxlX3ByZXY7CQkJCVwKKwkqKGVsbSktPmZpZWxkLmxlX3ByZXYgPSBMSVNUX05FWFQoKGVsbSks
IGZpZWxkKTsJCVwKKwlUUkFTSElUKCpvbGRuZXh0KTsJCQkJCQlcCisJVFJBU0hJVCgqb2xkcHJl
dik7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBMSVNUX1NXQVAoaGVhZDEsIGhlYWQy
LCB0eXBlLCBmaWVsZCkgZG8gewkJCVwKKwlzdHJ1Y3QgdHlwZSAqc3dhcF90bXAgPSBMSVNUX0ZJ
UlNUKChoZWFkMSkpOwkJCVwKKwlMSVNUX0ZJUlNUKChoZWFkMSkpID0gTElTVF9GSVJTVCgoaGVh
ZDIpKTsJCQlcCisJTElTVF9GSVJTVCgoaGVhZDIpKSA9IHN3YXBfdG1wOwkJCQkJXAorCWlmICgo
c3dhcF90bXAgPSBMSVNUX0ZJUlNUKChoZWFkMSkpKSAhPSBOVUxMKQkJCVwKKwkJc3dhcF90bXAt
PmZpZWxkLmxlX3ByZXYgPSAmTElTVF9GSVJTVCgoaGVhZDEpKTsJCVwKKwlpZiAoKHN3YXBfdG1w
ID0gTElTVF9GSVJTVCgoaGVhZDIpKSkgIT0gTlVMTCkJCQlcCisJCXN3YXBfdG1wLT5maWVsZC5s
ZV9wcmV2ID0gJkxJU1RfRklSU1QoKGhlYWQyKSk7CQlcCit9IHdoaWxlICgwKQorCisvKgorICog
VGFpbCBxdWV1ZSBkZWNsYXJhdGlvbnMuCisgKi8KKyNkZWZpbmUJVEFJTFFfSEVBRChuYW1lLCB0
eXBlKQkJCQkJCVwKK3N0cnVjdCBuYW1lIHsJCQkJCQkJCVwKKwlzdHJ1Y3QgdHlwZSAqdHFoX2Zp
cnN0OwkvKiBmaXJzdCBlbGVtZW50ICovCQkJXAorCXN0cnVjdCB0eXBlICoqdHFoX2xhc3Q7CS8q
IGFkZHIgb2YgbGFzdCBuZXh0IGVsZW1lbnQgKi8JCVwKKwlUUkFDRUJVRgkJCQkJCQlcCit9CisK
KyNkZWZpbmUJVEFJTFFfSEVBRF9JTklUSUFMSVpFUihoZWFkKQkJCQkJXAorCXsgTlVMTCwgJiho
ZWFkKS50cWhfZmlyc3QgfQorCisjZGVmaW5lCVRBSUxRX0VOVFJZKHR5cGUpCQkJCQkJXAorc3Ry
dWN0IHsJCQkJCQkJCVwKKwlzdHJ1Y3QgdHlwZSAqdHFlX25leHQ7CS8qIG5leHQgZWxlbWVudCAq
LwkJCVwKKwlzdHJ1Y3QgdHlwZSAqKnRxZV9wcmV2OwkvKiBhZGRyZXNzIG9mIHByZXZpb3VzIG5l
eHQgZWxlbWVudCAqLwlcCisJVFJBQ0VCVUYJCQkJCQkJXAorfQorCisvKgorICogVGFpbCBxdWV1
ZSBmdW5jdGlvbnMuCisgKi8KKyNpZiBkZWZpbmVkKElOVkFSSUFOVFMpCisjZGVmaW5lCVFNRF9U
QUlMUV9DSEVDS19IRUFEKGhlYWQsIGZpZWxkKSBkbyB7CQkJCQlcCisJaWYgKCFUQUlMUV9FTVBU
WShoZWFkKSAmJgkJCQkJCVwKKwkgICAgVEFJTFFfRklSU1QoKGhlYWQpKS0+ZmllbGQudHFlX3By
ZXYgIT0JCQkJXAorCSAgICAgJlRBSUxRX0ZJUlNUKChoZWFkKSkpCQkJCQkJXAorCQlwYW5pYygi
QmFkIHRhaWxxIGhlYWQgJXAgZmlyc3QtPnByZXYgIT0gaGVhZCIsICh2b2lkICopKGhlYWQpKTsJ
XAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlRTURfVEFJTFFfQ0hFQ0tfVEFJTChoZWFkLCBmaWVs
ZCkgZG8gewkJCQkJXAorCWlmICgqKGhlYWQpLT50cWhfbGFzdCAhPSBOVUxMKQkJCQkJCVwKKwkg
ICAgCXBhbmljKCJCYWQgdGFpbHEgTkVYVCglcC0+dHFoX2xhc3QpICE9IE5VTEwiLCAodm9pZCAq
KShoZWFkKSk7IAlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCVFNRF9UQUlMUV9DSEVDS19ORVhU
KGVsbSwgZmllbGQpIGRvIHsJCQkJCVwKKwlpZiAoVEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpICE9
IE5VTEwgJiYJCQkJCVwKKwkgICAgVEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpLT5maWVsZC50cWVf
cHJldiAhPQkJCQlcCisJICAgICAmKChlbG0pLT5maWVsZC50cWVfbmV4dCkpCQkJCQkJXAorCQlw
YW5pYygiQmFkIGxpbmsgZWxtICVwIG5leHQtPnByZXYgIT0gZWxtIiwgKHZvaWQgKikoZWxtKSk7
CVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJUU1EX1RBSUxRX0NIRUNLX1BSRVYoZWxtLCBmaWVs
ZCkgZG8gewkJCQkJXAorCWlmICgqKGVsbSktPmZpZWxkLnRxZV9wcmV2ICE9IChlbG0pKQkJCQkJ
XAorCQlwYW5pYygiQmFkIGxpbmsgZWxtICVwIHByZXYtPm5leHQgIT0gZWxtIiwgKHZvaWQgKiko
ZWxtKSk7CVwKK30gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZQlRTURfVEFJTFFfQ0hFQ0tfSEVB
RChoZWFkLCBmaWVsZCkKKyNkZWZpbmUJUU1EX1RBSUxRX0NIRUNLX1RBSUwoaGVhZCwgaGVhZG5h
bWUpCisjZGVmaW5lCVFNRF9UQUlMUV9DSEVDS19ORVhUKGVsbSwgZmllbGQpCisjZGVmaW5lCVFN
RF9UQUlMUV9DSEVDS19QUkVWKGVsbSwgZmllbGQpCisjZW5kaWYgLyogKElOVkFSSUFOVFMpICov
CisKKyNkZWZpbmUJVEFJTFFfQ09OQ0FUKGhlYWQxLCBoZWFkMiwgZmllbGQpIGRvIHsJCQkJXAor
CWlmICghVEFJTFFfRU1QVFkoaGVhZDIpKSB7CQkJCQlcCisJCSooaGVhZDEpLT50cWhfbGFzdCA9
IChoZWFkMiktPnRxaF9maXJzdDsJCVwKKwkJKGhlYWQyKS0+dHFoX2ZpcnN0LT5maWVsZC50cWVf
cHJldiA9IChoZWFkMSktPnRxaF9sYXN0OwlcCisJCShoZWFkMSktPnRxaF9sYXN0ID0gKGhlYWQy
KS0+dHFoX2xhc3Q7CQkJXAorCQlUQUlMUV9JTklUKChoZWFkMikpOwkJCQkJXAorCQlRTURfVFJB
Q0VfSEVBRChoZWFkMSk7CQkJCQlcCisJCVFNRF9UUkFDRV9IRUFEKGhlYWQyKTsJCQkJCVwKKwl9
CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCVRBSUxRX0VNUFRZKGhlYWQpCSgoaGVh
ZCktPnRxaF9maXJzdCA9PSBOVUxMKQorCisjZGVmaW5lCVRBSUxRX0ZJUlNUKGhlYWQpCSgoaGVh
ZCktPnRxaF9maXJzdCkKKworI2RlZmluZQlUQUlMUV9GT1JFQUNIKHZhciwgaGVhZCwgZmllbGQp
CQkJCQlcCisJZm9yICgodmFyKSA9IFRBSUxRX0ZJUlNUKChoZWFkKSk7CQkJCVwKKwkgICAgKHZh
cik7CQkJCQkJCVwKKwkgICAgKHZhcikgPSBUQUlMUV9ORVhUKCh2YXIpLCBmaWVsZCkpCisKKyNk
ZWZpbmUJVEFJTFFfRk9SRUFDSF9TQUZFKHZhciwgaGVhZCwgZmllbGQsIHR2YXIpCQkJXAorCWZv
ciAoKHZhcikgPSBUQUlMUV9GSVJTVCgoaGVhZCkpOwkJCQlcCisJICAgICh2YXIpICYmICgodHZh
cikgPSBUQUlMUV9ORVhUKCh2YXIpLCBmaWVsZCksIDEpOwkJXAorCSAgICAodmFyKSA9ICh0dmFy
KSkKKworI2RlZmluZQlUQUlMUV9GT1JFQUNIX1JFVkVSU0UodmFyLCBoZWFkLCBoZWFkbmFtZSwg
ZmllbGQpCQlcCisJZm9yICgodmFyKSA9IFRBSUxRX0xBU1QoKGhlYWQpLCBoZWFkbmFtZSk7CQkJ
XAorCSAgICAodmFyKTsJCQkJCQkJXAorCSAgICAodmFyKSA9IFRBSUxRX1BSRVYoKHZhciksIGhl
YWRuYW1lLCBmaWVsZCkpCisKKyNkZWZpbmUJVEFJTFFfRk9SRUFDSF9SRVZFUlNFX1NBRkUodmFy
LCBoZWFkLCBoZWFkbmFtZSwgZmllbGQsIHR2YXIpCVwKKwlmb3IgKCh2YXIpID0gVEFJTFFfTEFT
VCgoaGVhZCksIGhlYWRuYW1lKTsJCQlcCisJICAgICh2YXIpICYmICgodHZhcikgPSBUQUlMUV9Q
UkVWKCh2YXIpLCBoZWFkbmFtZSwgZmllbGQpLCAxKTsJXAorCSAgICAodmFyKSA9ICh0dmFyKSkK
KworI2RlZmluZQlUQUlMUV9JTklUKGhlYWQpIGRvIHsJCQkJCQlcCisJVEFJTFFfRklSU1QoKGhl
YWQpKSA9IE5VTEw7CQkJCQlcCisJKGhlYWQpLT50cWhfbGFzdCA9ICZUQUlMUV9GSVJTVCgoaGVh
ZCkpOwkJCVwKKwlRTURfVFJBQ0VfSEVBRChoZWFkKTsJCQkJCQlcCit9IHdoaWxlICgwKQorCisj
ZGVmaW5lCVRBSUxRX0lOU0VSVF9BRlRFUihoZWFkLCBsaXN0ZWxtLCBlbG0sIGZpZWxkKSBkbyB7
CQlcCisJUU1EX1RBSUxRX0NIRUNLX05FWFQobGlzdGVsbSwgZmllbGQpOwkJCQlcCisJaWYgKChU
QUlMUV9ORVhUKChlbG0pLCBmaWVsZCkgPSBUQUlMUV9ORVhUKChsaXN0ZWxtKSwgZmllbGQpKSAh
PSBOVUxMKVwKKwkJVEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpLT5maWVsZC50cWVfcHJldiA9IAkJ
XAorCQkgICAgJlRBSUxRX05FWFQoKGVsbSksIGZpZWxkKTsJCQkJXAorCWVsc2UgewkJCQkJCQkJ
XAorCQkoaGVhZCktPnRxaF9sYXN0ID0gJlRBSUxRX05FWFQoKGVsbSksIGZpZWxkKTsJCVwKKwkJ
UU1EX1RSQUNFX0hFQUQoaGVhZCk7CQkJCQlcCisJfQkJCQkJCQkJXAorCVRBSUxRX05FWFQoKGxp
c3RlbG0pLCBmaWVsZCkgPSAoZWxtKTsJCQkJXAorCShlbG0pLT5maWVsZC50cWVfcHJldiA9ICZU
QUlMUV9ORVhUKChsaXN0ZWxtKSwgZmllbGQpOwkJXAorCVFNRF9UUkFDRV9FTEVNKCYoZWxtKS0+
ZmllbGQpOwkJCQkJXAorCVFNRF9UUkFDRV9FTEVNKCZsaXN0ZWxtLT5maWVsZCk7CQkJCVwKK30g
d2hpbGUgKDApCisKKyNkZWZpbmUJVEFJTFFfSU5TRVJUX0JFRk9SRShsaXN0ZWxtLCBlbG0sIGZp
ZWxkKSBkbyB7CQkJXAorCVFNRF9UQUlMUV9DSEVDS19QUkVWKGxpc3RlbG0sIGZpZWxkKTsJCQkJ
XAorCShlbG0pLT5maWVsZC50cWVfcHJldiA9IChsaXN0ZWxtKS0+ZmllbGQudHFlX3ByZXY7CQlc
CisJVEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpID0gKGxpc3RlbG0pOwkJCQlcCisJKihsaXN0ZWxt
KS0+ZmllbGQudHFlX3ByZXYgPSAoZWxtKTsJCQkJXAorCShsaXN0ZWxtKS0+ZmllbGQudHFlX3By
ZXYgPSAmVEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpOwkJXAorCVFNRF9UUkFDRV9FTEVNKCYoZWxt
KS0+ZmllbGQpOwkJCQkJXAorCVFNRF9UUkFDRV9FTEVNKCZsaXN0ZWxtLT5maWVsZCk7CQkJCVwK
K30gd2hpbGUgKDApCisKKyNkZWZpbmUJVEFJTFFfSU5TRVJUX0hFQUQoaGVhZCwgZWxtLCBmaWVs
ZCkgZG8gewkJCVwKKwlRTURfVEFJTFFfQ0hFQ0tfSEVBRChoZWFkLCBmaWVsZCk7CQkJCVwKKwlp
ZiAoKFRBSUxRX05FWFQoKGVsbSksIGZpZWxkKSA9IFRBSUxRX0ZJUlNUKChoZWFkKSkpICE9IE5V
TEwpCVwKKwkJVEFJTFFfRklSU1QoKGhlYWQpKS0+ZmllbGQudHFlX3ByZXYgPQkJCVwKKwkJICAg
ICZUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCk7CQkJCVwKKwllbHNlCQkJCQkJCQlcCisJCShoZWFk
KS0+dHFoX2xhc3QgPSAmVEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpOwkJXAorCVRBSUxRX0ZJUlNU
KChoZWFkKSkgPSAoZWxtKTsJCQkJCVwKKwkoZWxtKS0+ZmllbGQudHFlX3ByZXYgPSAmVEFJTFFf
RklSU1QoKGhlYWQpKTsJCQlcCisJUU1EX1RSQUNFX0hFQUQoaGVhZCk7CQkJCQkJXAorCVFNRF9U
UkFDRV9FTEVNKCYoZWxtKS0+ZmllbGQpOwkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlU
QUlMUV9JTlNFUlRfVEFJTChoZWFkLCBlbG0sIGZpZWxkKSBkbyB7CQkJXAorCVFNRF9UQUlMUV9D
SEVDS19UQUlMKGhlYWQsIGZpZWxkKTsJCQkJXAorCVRBSUxRX05FWFQoKGVsbSksIGZpZWxkKSA9
IE5VTEw7CQkJCVwKKwkoZWxtKS0+ZmllbGQudHFlX3ByZXYgPSAoaGVhZCktPnRxaF9sYXN0OwkJ
CVwKKwkqKGhlYWQpLT50cWhfbGFzdCA9IChlbG0pOwkJCQkJXAorCShoZWFkKS0+dHFoX2xhc3Qg
PSAmVEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpOwkJCVwKKwlRTURfVFJBQ0VfSEVBRChoZWFkKTsJ
CQkJCQlcCisJUU1EX1RSQUNFX0VMRU0oJihlbG0pLT5maWVsZCk7CQkJCQlcCit9IHdoaWxlICgw
KQorCisjZGVmaW5lCVRBSUxRX0xBU1QoaGVhZCwgaGVhZG5hbWUpCQkJCQlcCisJKCooKChzdHJ1
Y3QgaGVhZG5hbWUgKikoKGhlYWQpLT50cWhfbGFzdCkpLT50cWhfbGFzdCkpCisKKyNkZWZpbmUJ
VEFJTFFfTkVYVChlbG0sIGZpZWxkKSAoKGVsbSktPmZpZWxkLnRxZV9uZXh0KQorCisjZGVmaW5l
CVRBSUxRX1BSRVYoZWxtLCBoZWFkbmFtZSwgZmllbGQpCQkJCVwKKwkoKigoKHN0cnVjdCBoZWFk
bmFtZSAqKSgoZWxtKS0+ZmllbGQudHFlX3ByZXYpKS0+dHFoX2xhc3QpKQorCisjZGVmaW5lCVRB
SUxRX1JFTU9WRShoZWFkLCBlbG0sIGZpZWxkKSBkbyB7CQkJCVwKKwlRTURfU0FWRUxJTksob2xk
bmV4dCwgKGVsbSktPmZpZWxkLnRxZV9uZXh0KTsJCQlcCisJUU1EX1NBVkVMSU5LKG9sZHByZXYs
IChlbG0pLT5maWVsZC50cWVfcHJldik7CQkJXAorCVFNRF9UQUlMUV9DSEVDS19ORVhUKGVsbSwg
ZmllbGQpOwkJCQlcCisJUU1EX1RBSUxRX0NIRUNLX1BSRVYoZWxtLCBmaWVsZCk7CQkJCVwKKwlp
ZiAoKFRBSUxRX05FWFQoKGVsbSksIGZpZWxkKSkgIT0gTlVMTCkJCQkJXAorCQlUQUlMUV9ORVhU
KChlbG0pLCBmaWVsZCktPmZpZWxkLnRxZV9wcmV2ID0gCQlcCisJCSAgICAoZWxtKS0+ZmllbGQu
dHFlX3ByZXY7CQkJCVwKKwllbHNlIHsJCQkJCQkJCVwKKwkJKGhlYWQpLT50cWhfbGFzdCA9IChl
bG0pLT5maWVsZC50cWVfcHJldjsJCVwKKwkJUU1EX1RSQUNFX0hFQUQoaGVhZCk7CQkJCQlcCisJ
fQkJCQkJCQkJXAorCSooZWxtKS0+ZmllbGQudHFlX3ByZXYgPSBUQUlMUV9ORVhUKChlbG0pLCBm
aWVsZCk7CQlcCisJVFJBU0hJVCgqb2xkbmV4dCk7CQkJCQkJXAorCVRSQVNISVQoKm9sZHByZXYp
OwkJCQkJCVwKKwlRTURfVFJBQ0VfRUxFTSgmKGVsbSktPmZpZWxkKTsJCQkJCVwKK30gd2hpbGUg
KDApCisKKyNkZWZpbmUgVEFJTFFfU1dBUChoZWFkMSwgaGVhZDIsIHR5cGUsIGZpZWxkKSBkbyB7
CQkJXAorCXN0cnVjdCB0eXBlICpzd2FwX2ZpcnN0ID0gKGhlYWQxKS0+dHFoX2ZpcnN0OwkJCVwK
KwlzdHJ1Y3QgdHlwZSAqKnN3YXBfbGFzdCA9IChoZWFkMSktPnRxaF9sYXN0OwkJCVwKKwkoaGVh
ZDEpLT50cWhfZmlyc3QgPSAoaGVhZDIpLT50cWhfZmlyc3Q7CQkJXAorCShoZWFkMSktPnRxaF9s
YXN0ID0gKGhlYWQyKS0+dHFoX2xhc3Q7CQkJCVwKKwkoaGVhZDIpLT50cWhfZmlyc3QgPSBzd2Fw
X2ZpcnN0OwkJCQlcCisJKGhlYWQyKS0+dHFoX2xhc3QgPSBzd2FwX2xhc3Q7CQkJCQlcCisJaWYg
KChzd2FwX2ZpcnN0ID0gKGhlYWQxKS0+dHFoX2ZpcnN0KSAhPSBOVUxMKQkJCVwKKwkJc3dhcF9m
aXJzdC0+ZmllbGQudHFlX3ByZXYgPSAmKGhlYWQxKS0+dHFoX2ZpcnN0OwlcCisJZWxzZQkJCQkJ
CQkJXAorCQkoaGVhZDEpLT50cWhfbGFzdCA9ICYoaGVhZDEpLT50cWhfZmlyc3Q7CQlcCisJaWYg
KChzd2FwX2ZpcnN0ID0gKGhlYWQyKS0+dHFoX2ZpcnN0KSAhPSBOVUxMKQkJCVwKKwkJc3dhcF9m
aXJzdC0+ZmllbGQudHFlX3ByZXYgPSAmKGhlYWQyKS0+dHFoX2ZpcnN0OwlcCisJZWxzZQkJCQkJ
CQkJXAorCQkoaGVhZDIpLT50cWhfbGFzdCA9ICYoaGVhZDIpLT50cWhfZmlyc3Q7CQlcCit9IHdo
aWxlICgwKQorCisjZW5kaWYgLyogIV9TWVNfUVVFVUVfSF8gKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3VzcnNjdHBsaWIvdXNlcl9yZWN2X3RocmVhZC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91
c2VyX3JlY3ZfdGhyZWFkLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAw
Li5iYjQzNmNkMjBkOWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3Vz
ZXJfcmVjdl90aHJlYWQuYwpAQCAtMCwwICsxLDE1NDkgQEAKKy8qLQorICogQ29weXJpZ2h0IChj
KSAyMDA5LTIwMTAgQnJhZCBQZW5vZmYKKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIEh1bWFp
cmEgS2FtYWwKKyAqIENvcHlyaWdodCAoYykgMjAxMS0yMDEyIElyZW5lIFJ1ZW5nZWxlcgorICog
Q29weXJpZ2h0IChjKSAyMDExLTIwMTIgTWljaGFlbCBUdWV4ZW4KKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
QVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1B
R0UuCisgKgorICovCisKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisjaW5j
bHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgIWRlZmluZWQoX1dJTjMyKQorI2luY2x1ZGUgPHN5cy9z
b2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+Cisj
aW5jbHVkZSA8cHRocmVhZC5oPgorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pICYmICFkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX05ldEJTRF9fKQorI2luY2x1ZGUgPHN5cy91
aW8uaD4KKyNlbHNlCisjaW5jbHVkZSA8dXNlcl9pcDZfdmFyLmg+CisjZW5kaWYKKyNlbmRpZgor
I2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vcy5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF92YXIu
aD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfcGNiLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3Rw
X2lucHV0Lmg+CisjaWYgMAorI2lmIGRlZmluZWQoX19saW51eF9fKQorI2luY2x1ZGUgPGxpbnV4
L25ldGxpbmsuaD4KKyNpZmRlZiBIQVZFX0xJTlVYX0lGX0FERFJfSAorI2luY2x1ZGUgPGxpbnV4
L2lmX2FkZHIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTElOVVhfUlRORVRMSU5LX0gKKyNpbmNs
dWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZp
bmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX0RyYWdvbkZseV9fKSB8fCBkZWZpbmVkKF9fRnJl
ZUJTRF9fKQorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorI2VuZGlmCisvKiBsb2NhbCBtYWNyb3Mg
YW5kIGRhdGF0eXBlcyB1c2VkIHRvIGdldCBJUCBhZGRyZXNzZXMgc3lzdGVtIGluZGVwZW5kZW50
bHkgKi8KKyNpZiAhZGVmaW5lZChJUF9QS1RJTkZPKSAmJiAhZGVmaW5lZChJUF9SRUNWRFNUQURE
UikKKyMgZXJyb3IgIkNhbid0IGRldGVybWluZSBzb2NrZXQgb3B0aW9uIHRvIHVzZSB0byBnZXQg
VURQIElQIgorI2VuZGlmCisKK3ZvaWQgcmVjdl90aHJlYWRfZGVzdHJveSh2b2lkKTsKKworI2Rl
ZmluZSBNQVhMRU5fTUJVRl9DSEFJTiAxMjgKKworI2RlZmluZSBST1VORFVQKGEsIHNpemUpICgo
KGEpICYgKChzaXplKS0xKSkgPyAoMSArICgoYSkgfCAoKHNpemUpLTEpKSkgOiAoYSkpCisKKyNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX0RyYWdvbkZseV9fKSB8fCBkZWZpbmVk
KF9fRnJlZUJTRF9fKQorI2RlZmluZSBORVhUX1NBKGFwKSBhcCA9IChzdHJ1Y3Qgc29ja2FkZHIg
KikgXAorCSgoY2FkZHJfdCkgYXAgKyAoYXAtPnNhX2xlbiA/IFJPVU5EVVAoYXAtPnNhX2xlbiwg
c2l6ZW9mICh1aW50MzJfdCkpIDogc2l6ZW9mKHVpbnQzMl90KSkpCisjZW5kaWYKKworI2lmIGRl
ZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fRHJhZ29uRmx5X18pIHx8IGRlZmluZWQoX19G
cmVlQlNEX18pCitzdGF0aWMgdm9pZAorc2N0cF9nZXRfcnRhZGRycyhpbnQgYWRkcnMsIHN0cnVj
dCBzb2NrYWRkciAqc2EsIHN0cnVjdCBzb2NrYWRkciAqKnJ0aV9pbmZvKQoreworCWludCBpOwor
CisJZm9yIChpID0gMDsgaSA8IFJUQVhfTUFYOyBpKyspIHsKKwkJaWYgKGFkZHJzICYgKDEgPDwg
aSkpIHsKKwkJCXJ0aV9pbmZvW2ldID0gc2E7CisJCQlORVhUX1NBKHNhKTsKKwkJfSBlbHNlIHsK
KwkJCXJ0aV9pbmZvW2ldID0gTlVMTDsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQKK3NjdHBf
aGFuZGxlX2lmYW1zZyh1bnNpZ25lZCBjaGFyIHR5cGUsIHVuc2lnbmVkIHNob3J0IGluZGV4LCBz
dHJ1Y3Qgc29ja2FkZHIgKnNhKQoreworCWludCByYzsKKwlzdHJ1Y3QgaWZhZGRycyAqaWZhLCAq
aWZhczsKKworCS8qIGhhbmRsZSBvbmx5IHRoZSB0eXBlcyB3ZSB3YW50ICovCisJaWYgKCh0eXBl
ICE9IFJUTV9ORVdBRERSKSAmJiAodHlwZSAhPSBSVE1fREVMQUREUikpIHsKKwkJcmV0dXJuOwor
CX0KKworCXJjID0gZ2V0aWZhZGRycygmaWZhcyk7CisJaWYgKHJjICE9IDApIHsKKwkJcmV0dXJu
OworCX0KKwlmb3IgKGlmYSA9IGlmYXM7IGlmYTsgaWZhID0gaWZhLT5pZmFfbmV4dCkgeworCQlp
ZiAoaW5kZXggPT0gaWZfbmFtZXRvaW5kZXgoaWZhLT5pZmFfbmFtZSkpIHsKKwkJCWJyZWFrOwor
CQl9CisJfQorCWlmIChpZmEgPT0gTlVMTCkgeworCQlmcmVlaWZhZGRycyhpZmFzKTsKKwkJcmV0
dXJuOworCX0KKworCS8qIHJlbGF5IHRoZSBhcHByb3ByaWF0ZSBhZGRyZXNzIGNoYW5nZSB0byB0
aGUgYmFzZSBjb2RlICovCisJaWYgKHR5cGUgPT0gUlRNX05FV0FERFIpIHsKKwkJKHZvaWQpc2N0
cF9hZGRfYWRkcl90b192cmYoU0NUUF9ERUZBVUxUX1ZSRklELAorCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOVUxMLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBpZl9uYW1ldG9p
bmRleChpZmEtPmlmYV9uYW1lKSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKwkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhLT5pZmFfbmFtZSwKKwkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTlVMTCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgc2EsCisJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisJCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEpOworCX0gZWxzZSB7CisJCXNjdHBfZGVsX2FkZHJfZnJvbV92cmYoU0NUUF9ERUZBVUxU
X1ZSRklELCBpZmEtPmlmYV9hZGRyLAorCQkgICAgICAgICAgICAgICAgICAgICAgIGlmX25hbWV0
b2luZGV4KGlmYS0+aWZhX25hbWUpLAorCQkgICAgICAgICAgICAgICAgICAgICAgIGlmYS0+aWZh
X25hbWUpOworCX0KKwlmcmVlaWZhZGRycyhpZmFzKTsKK30KKworc3RhdGljIHZvaWQgKgorcmVj
dl9mdW5jdGlvbl9yb3V0ZSh2b2lkICphcmcpCit7CisJc3NpemVfdCByZXQ7CisJc3RydWN0IGlm
YV9tc2doZHIgKmlmYTsKKwljaGFyIHJ0X2J1ZmZlclsxMDI0XTsKKwlzdHJ1Y3Qgc29ja2FkZHIg
KnNhLCAqcnRpX2luZm9bUlRBWF9NQVhdOworCisJc2N0cF91c2Vyc3BhY2Vfc2V0X3RocmVhZG5h
bWUoIlNDVFAgYWRkciBtb24iKTsKKworCXdoaWxlICgxKSB7CisJCW1lbXNldChydF9idWZmZXIs
IDAsIHNpemVvZihydF9idWZmZXIpKTsKKwkJcmV0ID0gcmVjdihTQ1RQX0JBU0VfVkFSKHVzZXJz
cGFjZV9yb3V0ZSksIHJ0X2J1ZmZlciwgc2l6ZW9mKHJ0X2J1ZmZlciksIDApOworCisJCWlmIChy
ZXQgPiAwKSB7CisJCQlpZmEgPSAoc3RydWN0IGlmYV9tc2doZHIgKikgcnRfYnVmZmVyOworCQkJ
aWYgKGlmYS0+aWZhbV90eXBlICE9IFJUTV9ERUxBRERSICYmIGlmYS0+aWZhbV90eXBlICE9IFJU
TV9ORVdBRERSKSB7CisJCQkJY29udGludWU7CisJCQl9CisJCQlzYSA9IChzdHJ1Y3Qgc29ja2Fk
ZHIgKikgKGlmYSArIDEpOworCQkJc2N0cF9nZXRfcnRhZGRycyhpZmEtPmlmYW1fYWRkcnMsIHNh
LCBydGlfaW5mbyk7CisJCQlzd2l0Y2ggKGlmYS0+aWZhbV90eXBlKSB7CisJCQljYXNlIFJUTV9E
RUxBRERSOgorCQkJY2FzZSBSVE1fTkVXQUREUjoKKwkJCQlzY3RwX2hhbmRsZV9pZmFtc2coaWZh
LT5pZmFtX3R5cGUsIGlmYS0+aWZhbV9pbmRleCwgcnRpX2luZm9bUlRBWF9JRkFdKTsKKwkJCQli
cmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJLyogaWdub3JlIHRoaXMgcm91dGluZyBldmVudCAqLwor
CQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChyZXQgPCAwKSB7CisJCQlpZiAoZXJybm8gPT0g
RUFHQUlOIHx8IGVycm5vID09IEVJTlRSKSB7CisJCQkJY29udGludWU7CisJCQl9IGVsc2Ugewor
CQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXJldHVybiAoTlVMTCk7Cit9CisjZW5kaWYKKwor
I2lmIDAKKy8qIFRoaXMgZG9lcyBub3QgeWV0IHdvcmsgb24gTGludXggKi8KK3N0YXRpYyB2b2lk
ICoKK3JlY3ZfZnVuY3Rpb25fcm91dGUodm9pZCAqYXJnKQoreworCWludCBsZW47CisJY2hhciBi
dWZbNDA5Nl07CisJc3RydWN0IGlvdmVjIGlvdiA9IHsgYnVmLCBzaXplb2YoYnVmKSB9OworCXN0
cnVjdCBtc2doZHIgbXNnOworCXN0cnVjdCBubG1zZ2hkciAqbmg7CisJc3RydWN0IGlmYWRkcm1z
ZyAqcnRtc2c7CisJc3RydWN0IHJ0YXR0ciAqcnRhdHA7CisJc3RydWN0IGluX2FkZHIgKmlucDsK
KwlzdHJ1Y3Qgc29ja2FkZHJfbmwgc2FubDsKKyNpZmRlZiBJTkVUCisJc3RydWN0IHNvY2thZGRy
X2luICpzYTsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJc3RydWN0IHNvY2thZGRyX2luNiAqc2E2
OworI2VuZGlmCisKKwlmb3IgKDs7KSB7CisJCW1lbXNldCgmc2FubCwgMCwgc2l6ZW9mKHNhbmwp
KTsKKwkJc2FubC5ubF9mYW1pbHkgPSBBRl9ORVRMSU5LOworCQlzYW5sLm5sX2dyb3VwcyA9IFJU
TUdSUF9JUFY2X0lGQUREUiB8IFJUTUdSUF9JUFY0X0lGQUREUjsKKwkJbWVtc2V0KCZtc2csIDAs
IHNpemVvZihzdHJ1Y3QgbXNnaGRyKSk7CisJCW1zZy5tc2dfbmFtZSA9ICh2b2lkICopJnNhbmw7
CisJCW1zZy5tc2dfbmFtZWxlbiA9IHNpemVvZihzYW5sKTsKKwkJbXNnLm1zZ19pb3YgPSAmaW92
OworCQltc2cubXNnX2lvdmxlbiA9IDE7CisJCW1zZy5tc2dfY29udHJvbCA9IE5VTEw7CisJCW1z
Zy5tc2dfY29udHJvbGxlbiA9IDA7CisKKwkJbGVuID0gcmVjdm1zZyhTQ1RQX0JBU0VfVkFSKHVz
ZXJzcGFjZV9yb3V0ZSksICZtc2csIDApOworCisJCWlmIChsZW4gPCAwKSB7CisJCQlpZiAoZXJy
bm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVJTlRSKSB7CisJCQkJY29udGludWU7CisJCQl9IGVs
c2UgeworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWZvciAobmggPSAoc3RydWN0IG5sbXNnaGRy
ICopIGJ1ZjsgTkxNU0dfT0sgKG5oLCBsZW4pOworCQkJbmggPSBOTE1TR19ORVhUIChuaCwgbGVu
KSkgeworCQkJaWYgKG5oLT5ubG1zZ190eXBlID09IE5MTVNHX0RPTkUpCisJCQkJYnJlYWs7CisK
KwkJCWlmIChuaC0+bmxtc2dfdHlwZSA9PSBSVE1fTkVXQUREUiB8fCBuaC0+bmxtc2dfdHlwZSA9
PSBSVE1fREVMQUREUikgeworCQkJCXJ0bXNnID0gKHN0cnVjdCBpZmFkZHJtc2cgKilOTE1TR19E
QVRBKG5oKTsKKwkJCQlydGF0cCA9IChzdHJ1Y3QgcnRhdHRyICopSUZBX1JUQShydG1zZyk7CisJ
CQkJaWYgKHJ0YXRwLT5ydGFfdHlwZSA9PSBJRkFfQUREUkVTUykgeworCQkJCQlpbnAgPSAoc3Ry
dWN0IGluX2FkZHIgKilSVEFfREFUQShydGF0cCk7CisJCQkJCXN3aXRjaCAocnRtc2ctPmlmYV9m
YW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQkJCWNhc2UgQUZfSU5FVDoKKwkJCQkJCXNhID0gKHN0
cnVjdCBzb2NrYWRkcl9pbiAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJ
CQkJCQlzYS0+c2luX2ZhbWlseSA9IHJ0bXNnLT5pZmFfZmFtaWx5OworCQkJCQkJc2EtPnNpbl9w
b3J0ID0gMDsKKwkJCQkJCW1lbWNweSgmc2EtPnNpbl9hZGRyLCBpbnAsIHNpemVvZihzdHJ1Y3Qg
aW5fYWRkcikpOworCQkJCQkJc2N0cF9oYW5kbGVfaWZhbXNnKG5oLT5ubG1zZ190eXBlLCBydG1z
Zy0+aWZhX2luZGV4LCAoc3RydWN0IHNvY2thZGRyICopc2EpOworCQkJCQkJYnJlYWs7CisjZW5k
aWYKKyNpZmRlZiBJTkVUNgorCQkJCQljYXNlIEFGX0lORVQ2OgorCQkJCQkJc2E2ID0gKHN0cnVj
dCBzb2NrYWRkcl9pbjYgKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwkJ
CQkJCXNhNi0+c2luNl9mYW1pbHkgPSBydG1zZy0+aWZhX2ZhbWlseTsKKwkJCQkJCXNhNi0+c2lu
Nl9wb3J0ID0gMDsKKwkJCQkJCW1lbWNweSgmc2E2LT5zaW42X2FkZHIsIGlucCwgc2l6ZW9mKHN0
cnVjdCBpbjZfYWRkcikpOworCQkJCQkJc2N0cF9oYW5kbGVfaWZhbXNnKG5oLT5ubG1zZ190eXBl
LCBydG1zZy0+aWZhX2luZGV4LCAoc3RydWN0IHNvY2thZGRyICopc2E2KTsKKwkJCQkJCWJyZWFr
OworI2VuZGlmCisJCQkJCWRlZmF1bHQ6CisJCQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAi
QWRkcmVzcyBmYW1pbHkgJWQgbm90IHN1cHBvcnRlZC5cbiIsIHJ0bXNnLT5pZmFfZmFtaWx5KTsK
KwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCXJldHVybiAoTlVM
TCk7Cit9CisjZW5kaWYKKworI2lmZGVmIElORVQKK3N0YXRpYyB2b2lkICoKK3JlY3ZfZnVuY3Rp
b25fcmF3KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbWJ1ZiAqKnJlY3ZtYnVmOworCXN0cnVjdCBp
cCAqaXBoZHI7CisJc3RydWN0IHNjdHBoZHIgKnNoOworCXVpbnQxNl90IHBvcnQ7CisJaW50IG9m
ZnNldCwgZWNuID0gMDsKKwlpbnQgY29tcHV0ZV9jcmMgPSAxOworCXN0cnVjdCBzY3RwX2NodW5r
aGRyICpjaDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc3JjLCBkc3Q7CisjaWYgIWRlZmluZWQoX1dJ
TjMyKQorCXVuc2lnbmVkIGludCBuY291bnRlcjsKKwlzdHJ1Y3QgbXNnaGRyIG1zZzsKKwlzdHJ1
Y3QgaW92ZWMgcmVjdl9pb3ZlY1tNQVhMRU5fTUJVRl9DSEFJTl07CisjZWxzZQorCVdTQUJVRiBy
ZWN2X2lvdmVjW01BWExFTl9NQlVGX0NIQUlOXTsKKwlpbnQgblJlc3VsdCwgbV9FcnJvckNvZGU7
CisJRFdPUkQgZmxhZ3M7CisJRFdPUkQgbmNvdW50ZXI7CisJc3RydWN0IHNvY2thZGRyX2luIGZy
b207CisJaW50IGZyb21sZW47CisjZW5kaWYKKwkvKkluaXRpYWxseSB0aGUgZW50aXJlIHNldCBv
ZiBtYnVmcyBpcyB0byBiZSBhbGxvY2F0ZWQuCisJICB0b19maWxsIGluZGljYXRlcyB0aGlzIGFt
b3VudC4gKi8KKwlpbnQgdG9fZmlsbCA9IE1BWExFTl9NQlVGX0NIQUlOOworCS8qIGlvdmxlbiBp
cyB0aGUgc2l6ZSBvZiBlYWNoIG1idWYgaW4gdGhlIGNoYWluICovCisJaW50IGksIG47CisJdW5z
aWduZWQgaW50IGlvdmxlbiA9IE1DTEJZVEVTOworCWludCB3YW50X2V4dCA9IChpb3ZsZW4gPiBN
TEVOKT8gMSA6IDA7CisJaW50IHdhbnRfaGVhZGVyID0gMDsKKworCXNjdHBfdXNlcnNwYWNlX3Nl
dF90aHJlYWRuYW1lKCJTQ1RQL0lQNCByY3YiKTsKKworCW1lbXNldCgmc3JjLCAwLCBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luKSk7CisJbWVtc2V0KCZkc3QsIDAsIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pKTsKKworCXJlY3ZtYnVmID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWJ1ZiAqKSAq
IE1BWExFTl9NQlVGX0NIQUlOKTsKKworCXdoaWxlICgxKSB7CisJCWZvciAoaSA9IDA7IGkgPCB0
b19maWxsOyBpKyspIHsKKwkJCS8qIE5vdCBnZXR0aW5nIHRoZSBwYWNrZXQgaGVhZGVyLiBUZXN0
cyB3aXRoIGNoYWluIG9mIG9uZSBydW4KKwkJCSAgIGFzIHVzdWFsIHdpdGhvdXQgaGF2aW5nIHRo
ZSBwYWNrZXQgaGVhZGVyLgorCQkJICAgSGF2ZSB0cmllZCBib3RoIHNlbmRpbmcgYW5kIHJlY2Vp
dmluZworCQkJICovCisJCQlyZWN2bWJ1ZltpXSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhpb3Zs
ZW4sIHdhbnRfaGVhZGVyLCBNX05PV0FJVCwgd2FudF9leHQsIE1UX0RBVEEpOworI2lmICFkZWZp
bmVkKF9XSU4zMikKKwkJCXJlY3ZfaW92ZWNbaV0uaW92X2Jhc2UgPSAoY2FkZHJfdClyZWN2bWJ1
ZltpXS0+bV9kYXRhOworCQkJcmVjdl9pb3ZlY1tpXS5pb3ZfbGVuID0gaW92bGVuOworI2Vsc2UK
KwkJCXJlY3ZfaW92ZWNbaV0uYnVmID0gKGNhZGRyX3QpcmVjdm1idWZbaV0tPm1fZGF0YTsKKwkJ
CXJlY3ZfaW92ZWNbaV0ubGVuID0gaW92bGVuOworI2VuZGlmCisJCX0KKwkJdG9fZmlsbCA9IDA7
CisjaWYgZGVmaW5lZChfV0lOMzIpCisJCWZsYWdzID0gMDsKKwkJbmNvdW50ZXIgPSAwOworCQlm
cm9tbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisJCW1lbXNldCgmZnJvbSwgMCwg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCisJCW5SZXN1bHQgPSBXU0FSZWN2RnJvbShT
Q1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSwgcmVjdl9pb3ZlYywgTUFYTEVOX01CVUZf
Q0hBSU4sICZuY291bnRlciwgJmZsYWdzLCAoc3RydWN0IHNvY2thZGRyICopJmZyb20sICZmcm9t
bGVuLCBOVUxMLCBOVUxMKTsKKwkJaWYgKG5SZXN1bHQgIT0gMCkgeworCQkJbV9FcnJvckNvZGUg
PSBXU0FHZXRMYXN0RXJyb3IoKTsKKwkJCWlmICgobV9FcnJvckNvZGUgPT0gV1NBRU5PVFNPQ0sp
IHx8IChtX0Vycm9yQ29kZSA9PSBXU0FFSU5UUikpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNv
bnRpbnVlOworCQl9CisJCW4gPSBuY291bnRlcjsKKyNlbHNlCisJCW1lbXNldCgmbXNnLCAwLCBz
aXplb2Yoc3RydWN0IG1zZ2hkcikpOworCQltc2cubXNnX25hbWUgPSBOVUxMOworCQltc2cubXNn
X25hbWVsZW4gPSAwOworCQltc2cubXNnX2lvdiA9IHJlY3ZfaW92ZWM7CisJCW1zZy5tc2dfaW92
bGVuID0gTUFYTEVOX01CVUZfQ0hBSU47CisJCW1zZy5tc2dfY29udHJvbCA9IE5VTEw7CisJCW1z
Zy5tc2dfY29udHJvbGxlbiA9IDA7CisJCW5jb3VudGVyID0gbiA9IHJlY3Ztc2coU0NUUF9CQVNF
X1ZBUih1c2Vyc3BhY2VfcmF3c2N0cCksICZtc2csIDApOworCQlpZiAobiA8IDApIHsKKwkJCWlm
IChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRUlOVFIpIHsKKwkJCQljb250aW51ZTsKKwkJ
CX0gZWxzZSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKyNlbmRpZgorCQlTQ1RQX0hFQURFUl9M
RU4ocmVjdm1idWZbMF0pID0gbjsgLyogbGVuZ3RoIG9mIHRvdGFsIHBhY2tldCAqLworCQlTQ1RQ
X1NUQVRfSU5DUihzY3Rwc19yZWN2cGFja2V0cyk7CisJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2
NChzY3Rwc19pbnBhY2tldHMpOworCisJCWlmICgodW5zaWduZWQgaW50KW4gPD0gaW92bGVuKSB7
CisJCQlTQ1RQX0JVRl9MRU4ocmVjdm1idWZbMF0pID0gbjsKKwkJCSh0b19maWxsKSsrOworCQl9
IGVsc2UgeworCQkJaSA9IDA7CisJCQlTQ1RQX0JVRl9MRU4ocmVjdm1idWZbMF0pID0gaW92bGVu
OworCisJCQluY291bnRlciAtPSBtaW4obmNvdW50ZXIsIGlvdmxlbik7CisJCQkodG9fZmlsbCkr
KzsKKwkJCWRvIHsKKwkJCQlyZWN2bWJ1ZltpXS0+bV9uZXh0ID0gcmVjdm1idWZbaSsxXTsKKwkJ
CQlTQ1RQX0JVRl9MRU4ocmVjdm1idWZbaV0tPm1fbmV4dCkgPSBtaW4obmNvdW50ZXIsIGlvdmxl
bik7CisJCQkJaSsrOworCQkJCW5jb3VudGVyIC09IG1pbihuY291bnRlciwgaW92bGVuKTsKKwkJ
CQkodG9fZmlsbCkrKzsKKwkJCX0gd2hpbGUgKG5jb3VudGVyID4gMCk7CisJCX0KKworCQlvZmZz
ZXQgPSBzaXplb2Yoc3RydWN0IGlwKSArIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKyBzaXplb2Yo
c3RydWN0IHNjdHBfY2h1bmtoZHIpOworCQlpZiAoU0NUUF9CVUZfTEVOKHJlY3ZtYnVmWzBdKSA8
IG9mZnNldCkgeworCQkJCWlmICgocmVjdm1idWZbMF0gPSBtX3B1bGx1cChyZWN2bWJ1ZlswXSwg
b2Zmc2V0KSkgPT0gTlVMTCkgeworCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX2hkcm9wcyk7CisJ
CQkJY29udGludWU7CisJCQl9CisJCX0KKwkJaXBoZHIgPSBtdG9kKHJlY3ZtYnVmWzBdLCBzdHJ1
Y3QgaXAgKik7CisJCXNoID0gKHN0cnVjdCBzY3RwaGRyICopKChjYWRkcl90KWlwaGRyICsgc2l6
ZW9mKHN0cnVjdCBpcCkpOworCQljaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKSgoY2FkZHJf
dClzaCArIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpOworCQlvZmZzZXQgLT0gc2l6ZW9mKHN0cnVj
dCBzY3RwX2NodW5raGRyKTsKKworCQlpZiAoaXBoZHItPmlwX3RvcyAhPSAwKSB7CisJCQllY24g
PSBpcGhkci0+aXBfdG9zICYgMHgwMzsKKwkJfQorCisJCWRzdC5zaW5fZmFtaWx5ID0gQUZfSU5F
VDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwkJZHN0LnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luKTsKKyNlbmRpZgorCQlkc3Quc2luX2FkZHIgPSBpcGhkci0+aXBfZHN0OworCQlk
c3Quc2luX3BvcnQgPSBzaC0+ZGVzdF9wb3J0OworCisJCXNyYy5zaW5fZmFtaWx5ID0gQUZfSU5F
VDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwkJc3JjLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luKTsKKyNlbmRpZgorCQlzcmMuc2luX2FkZHIgPSBpcGhkci0+aXBfc3JjOworCQlz
cmMuc2luX3BvcnQgPSBzaC0+c3JjX3BvcnQ7CisKKwkJLyogU0NUUCBkb2VzIG5vdCBhbGxvdyBi
cm9hZGNhc3RzIG9yIG11bHRpY2FzdHMgKi8KKwkJaWYgKElOX01VTFRJQ0FTVChudG9obChkc3Qu
c2luX2FkZHIuc19hZGRyKSkpIHsKKwkJCW1fZnJlZW0ocmVjdm1idWZbMF0pOworCQkJY29udGlu
dWU7CisJCX0KKwkJaWYgKFNDVFBfSVNfSVRfQlJPQURDQVNUKGRzdC5zaW5fYWRkciwgcmVjdm1i
dWZbMF0pKSB7CisJCQltX2ZyZWVtKHJlY3ZtYnVmWzBdKTsKKwkJCWNvbnRpbnVlOworCQl9CisK
KwkJcG9ydCA9IDA7CisKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ub19jc3VtX29uX2xv
b3BiYWNrKSAmJgorCQkgICAgKChJTjRfSVNMT09QQkFDS19BRERSRVNTKCZzcmMuc2luX2FkZHIp
ICYmCisJCSAgICAgIElONF9JU0xPT1BCQUNLX0FERFJFU1MoJmRzdC5zaW5fYWRkcikpIHx8CisJ
CSAgICAgKHNyYy5zaW5fYWRkci5zX2FkZHIgPT0gZHN0LnNpbl9hZGRyLnNfYWRkcikpKSB7CisJ
CQljb21wdXRlX2NyYyA9IDA7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2aHdjcmMpOwor
CQl9IGVsc2UgeworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdnN3Y3JjKTsKKwkJfQorCQlT
Q1RQREJHKFNDVFBfREVCVUdfVVNSLCAiJXM6IFJlY2VpdmVkICVkIGJ5dGVzLiIsIF9fZnVuY19f
LCBuKTsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIiAtIGNhbGxpbmcgc2N0cF9jb21tb25f
aW5wdXRfcHJvY2Vzc2luZyB3aXRoIG9mZj0lZFxuIiwgb2Zmc2V0KTsKKwkJc2N0cF9jb21tb25f
aW5wdXRfcHJvY2Vzc2luZygmcmVjdm1idWZbMF0sIHNpemVvZihzdHJ1Y3QgaXApLCBvZmZzZXQs
IG4sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZz
cmMsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZk
c3QsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2gsIGNoLAorCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbXB1dGVfY3JjLAorCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVjbiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0RFRkFVTFRf
VlJGSUQsIHBvcnQpOworCQlpZiAocmVjdm1idWZbMF0pIHsKKwkJCW1fZnJlZW0ocmVjdm1idWZb
MF0pOworCQl9CisJfQorCWZvciAoaSA9IDA7IGkgPCBNQVhMRU5fTUJVRl9DSEFJTjsgaSsrKSB7
CisJCW1fZnJlZShyZWN2bWJ1ZltpXSk7CisJfQorCS8qIGZyZWUgdGhlIGFycmF5IGl0c2VsZiAq
LworCWZyZWUocmVjdm1idWYpOworCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICIlczogRXhpdGlu
ZyBTQ1RQL0lQNCByY3ZcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gKE5VTEwpOworfQorI2VuZGlm
CisKKyNpZiBkZWZpbmVkKElORVQ2KQorc3RhdGljIHZvaWQgKgorcmVjdl9mdW5jdGlvbl9yYXc2
KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbWJ1ZiAqKnJlY3ZtYnVmNjsKKyNpZiAhZGVmaW5lZChf
V0lOMzIpCisJdW5zaWduZWQgaW50IG5jb3VudGVyID0gMDsKKwlzdHJ1Y3QgaW92ZWMgcmVjdl9p
b3ZlY1tNQVhMRU5fTUJVRl9DSEFJTl07CisJc3RydWN0IG1zZ2hkciBtc2c7CisJc3RydWN0IGNt
c2doZHIgKmNtc2dwdHI7CisJY2hhciBjbXNnYnVmW0NNU0dfU1BBQ0Uoc2l6ZW9mIChzdHJ1Y3Qg
aW42X3BrdGluZm8pKV07CisjZWxzZQorCVdTQUJVRiByZWN2X2lvdmVjW01BWExFTl9NQlVGX0NI
QUlOXTsKKwlpbnQgblJlc3VsdCwgbV9FcnJvckNvZGU7CisJRFdPUkQgbmNvdW50ZXIgPSAwOwor
CXN0cnVjdCBzb2NrYWRkcl9pbjYgZnJvbTsKKwlHVUlEIFdTQVJlY3ZNc2dfR1VJRCA9IFdTQUlE
X1dTQVJFQ1ZNU0c7CisJTFBGTl9XU0FSRUNWTVNHIFdTQVJlY3ZNc2c7CisJV1NBQ01TR0hEUiAq
Y21zZ3B0cjsKKwlXU0FNU0cgbXNnOworCWNoYXIgQ29udHJvbEJ1ZmZlclsxMDI0XTsKKyNlbmRp
ZgorCXN0cnVjdCBzb2NrYWRkcl9pbjYgc3JjLCBkc3Q7CisJc3RydWN0IHNjdHBoZHIgKnNoOwor
CWludCBvZmZzZXQ7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOworCS8qSW5pdGlhbGx5IHRo
ZSBlbnRpcmUgc2V0IG9mIG1idWZzIGlzIHRvIGJlIGFsbG9jYXRlZC4KKwkgIHRvX2ZpbGwgaW5k
aWNhdGVzIHRoaXMgYW1vdW50LiAqLworCWludCB0b19maWxsID0gTUFYTEVOX01CVUZfQ0hBSU47
CisJLyogaW92bGVuIGlzIHRoZSBzaXplIG9mIGVhY2ggbWJ1ZiBpbiB0aGUgY2hhaW4gKi8KKwlp
bnQgaSwgbjsKKwlpbnQgY29tcHV0ZV9jcmMgPSAxOworCXVuc2lnbmVkIGludCBpb3ZsZW4gPSBN
Q0xCWVRFUzsKKwlpbnQgd2FudF9leHQgPSAoaW92bGVuID4gTUxFTik/IDEgOiAwOworCWludCB3
YW50X2hlYWRlciA9IDA7CisKKwlzY3RwX3VzZXJzcGFjZV9zZXRfdGhyZWFkbmFtZSgiU0NUUC9J
UDYgcmN2Iik7CisKKwlyZWN2bWJ1ZjYgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBtYnVmICopICog
TUFYTEVOX01CVUZfQ0hBSU4pOworCisJZm9yICg7OykgeworCQlmb3IgKGkgPSAwOyBpIDwgdG9f
ZmlsbDsgaSsrKSB7CisJCQkvKiBOb3QgZ2V0dGluZyB0aGUgcGFja2V0IGhlYWRlci4gVGVzdHMg
d2l0aCBjaGFpbiBvZiBvbmUgcnVuCisJCQkgICBhcyB1c3VhbCB3aXRob3V0IGhhdmluZyB0aGUg
cGFja2V0IGhlYWRlci4KKwkJCSAgIEhhdmUgdHJpZWQgYm90aCBzZW5kaW5nIGFuZCByZWNlaXZp
bmcKKwkJCSAqLworCQkJcmVjdm1idWY2W2ldID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGlvdmxl
biwgd2FudF9oZWFkZXIsIE1fTk9XQUlULCB3YW50X2V4dCwgTVRfREFUQSk7CisjaWYgIWRlZmlu
ZWQoX1dJTjMyKQorCQkJcmVjdl9pb3ZlY1tpXS5pb3ZfYmFzZSA9IChjYWRkcl90KXJlY3ZtYnVm
NltpXS0+bV9kYXRhOworCQkJcmVjdl9pb3ZlY1tpXS5pb3ZfbGVuID0gaW92bGVuOworI2Vsc2UK
KwkJCXJlY3ZfaW92ZWNbaV0uYnVmID0gKGNhZGRyX3QpcmVjdm1idWY2W2ldLT5tX2RhdGE7CisJ
CQlyZWN2X2lvdmVjW2ldLmxlbiA9IGlvdmxlbjsKKyNlbmRpZgorCQl9CisJCXRvX2ZpbGwgPSAw
OworI2lmIGRlZmluZWQoX1dJTjMyKQorCQluY291bnRlciA9IDA7CisJCW1lbXNldCgmZnJvbSwg
MCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwkJblJlc3VsdCA9IFdTQUlvY3RsKFND
VFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSwgU0lPX0dFVF9FWFRFTlNJT05fRlVOQ1RJ
T05fUE9JTlRFUiwKKwkJICAgICAgICAgICAgICAgICAgICZXU0FSZWN2TXNnX0dVSUQsIHNpemVv
ZiBXU0FSZWN2TXNnX0dVSUQsCisJCSAgICAgICAgICAgICAgICAgICAmV1NBUmVjdk1zZywgc2l6
ZW9mIFdTQVJlY3ZNc2csCisJCSAgICAgICAgICAgICAgICAgICAmbmNvdW50ZXIsIE5VTEwsIE5V
TEwpOworCQlpZiAoblJlc3VsdCA9PSAwKSB7CisJCQltc2cubmFtZSA9ICh2b2lkICopJnNyYzsK
KwkJCW1zZy5uYW1lbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQkJbXNnLmxw
QnVmZmVycyA9IHJlY3ZfaW92ZWM7CisJCQltc2cuZHdCdWZmZXJDb3VudCA9IE1BWExFTl9NQlVG
X0NIQUlOOworCQkJbXNnLkNvbnRyb2wubGVuID0gc2l6ZW9mIENvbnRyb2xCdWZmZXI7CisJCQlt
c2cuQ29udHJvbC5idWYgPSBDb250cm9sQnVmZmVyOworCQkJbXNnLmR3RmxhZ3MgPSAwOworCQkJ
blJlc3VsdCA9IFdTQVJlY3ZNc2coU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpLCAm
bXNnLCAmbmNvdW50ZXIsIE5VTEwsIE5VTEwpOworCQl9CisJCWlmIChuUmVzdWx0ICE9IDApIHsK
KwkJCW1fRXJyb3JDb2RlID0gV1NBR2V0TGFzdEVycm9yKCk7CisJCQlpZiAoKG1fRXJyb3JDb2Rl
ID09IFdTQUVOT1RTT0NLKSB8fCAobV9FcnJvckNvZGUgPT0gV1NBRUlOVFIpKSB7CisJCQkJYnJl
YWs7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCQluID0gbmNvdW50ZXI7CisjZWxzZQorCQlt
ZW1zZXQoJm1zZywgMCwgc2l6ZW9mKHN0cnVjdCBtc2doZHIpKTsKKwkJbWVtc2V0KCZzcmMsIDAs
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJCW1lbXNldCgmZHN0LCAwLCBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luNikpOworCQltZW1zZXQoY21zZ2J1ZiwgMCwgQ01TR19TUEFDRShz
aXplb2YgKHN0cnVjdCBpbjZfcGt0aW5mbykpKTsKKwkJbXNnLm1zZ19uYW1lID0gKHZvaWQgKikm
c3JjOworCQltc2cubXNnX25hbWVsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJ
CW1zZy5tc2dfaW92ID0gcmVjdl9pb3ZlYzsKKwkJbXNnLm1zZ19pb3ZsZW4gPSBNQVhMRU5fTUJV
Rl9DSEFJTjsKKwkJbXNnLm1zZ19jb250cm9sID0gKHZvaWQgKiljbXNnYnVmOworCQltc2cubXNn
X2NvbnRyb2xsZW4gPSAoc29ja2xlbl90KUNNU0dfU1BBQ0Uoc2l6ZW9mIChzdHJ1Y3QgaW42X3Br
dGluZm8pKTsKKwkJbXNnLm1zZ19mbGFncyA9IDA7CisKKwkJbmNvdW50ZXIgPSBuID0gcmVjdm1z
ZyhTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNiksICZtc2csIDApOworCQlpZiAobiA8
IDApIHsKKwkJCWlmIChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRUlOVFIpIHsKKwkJCQlj
b250aW51ZTsKKwkJCX0gZWxzZSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKyNlbmRpZgorCQlT
Q1RQX0hFQURFUl9MRU4ocmVjdm1idWY2WzBdKSA9IG47IC8qIGxlbmd0aCBvZiB0b3RhbCBwYWNr
ZXQgKi8KKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdnBhY2tldHMpOworCQlTQ1RQX1NUQVRf
SU5DUl9DT1VOVEVSNjQoc2N0cHNfaW5wYWNrZXRzKTsKKworCQlpZiAoKHVuc2lnbmVkIGludClu
IDw9IGlvdmxlbikgeworCQkJU0NUUF9CVUZfTEVOKHJlY3ZtYnVmNlswXSkgPSBuOworCQkJKHRv
X2ZpbGwpKys7CisJCX0gZWxzZSB7CisJCQlpID0gMDsKKwkJCVNDVFBfQlVGX0xFTihyZWN2bWJ1
ZjZbMF0pID0gaW92bGVuOworCisJCQluY291bnRlciAtPSBtaW4obmNvdW50ZXIsIGlvdmxlbik7
CisJCQkodG9fZmlsbCkrKzsKKwkJCWRvIHsKKwkJCQlyZWN2bWJ1ZjZbaV0tPm1fbmV4dCA9IHJl
Y3ZtYnVmNltpKzFdOworCQkJCVNDVFBfQlVGX0xFTihyZWN2bWJ1ZjZbaV0tPm1fbmV4dCkgPSBt
aW4obmNvdW50ZXIsIGlvdmxlbik7CisJCQkJaSsrOworCQkJCW5jb3VudGVyIC09IG1pbihuY291
bnRlciwgaW92bGVuKTsKKwkJCQkodG9fZmlsbCkrKzsKKwkJCX0gd2hpbGUgKG5jb3VudGVyID4g
MCk7CisJCX0KKworCQlmb3IgKGNtc2dwdHIgPSBDTVNHX0ZJUlNUSERSKCZtc2cpOyBjbXNncHRy
ICE9IE5VTEw7IGNtc2dwdHIgPSBDTVNHX05YVEhEUigmbXNnLCBjbXNncHRyKSkgeworCQkJaWYg
KChjbXNncHRyLT5jbXNnX2xldmVsID09IElQUFJPVE9fSVBWNikgJiYgKGNtc2dwdHItPmNtc2df
dHlwZSA9PSBJUFY2X1BLVElORk8pKSB7CisJCQkJc3RydWN0IGluNl9wa3RpbmZvICogaW5mbzsK
KworCQkJCWluZm8gPSAoc3RydWN0IGluNl9wa3RpbmZvICopQ01TR19EQVRBKGNtc2dwdHIpOwor
CQkJCW1lbWNweSgodm9pZCAqKSZkc3Quc2luNl9hZGRyLCAoY29uc3Qgdm9pZCAqKSAmKGluZm8t
PmlwaTZfYWRkciksIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKwkJCQlicmVhazsKKwkJCX0K
KwkJfQorCisJCS8qIFNDVFAgZG9lcyBub3QgYWxsb3cgYnJvYWRjYXN0cyBvciBtdWx0aWNhc3Rz
ICovCisJCWlmIChJTjZfSVNfQUREUl9NVUxUSUNBU1QoJmRzdC5zaW42X2FkZHIpKSB7CisJCQlt
X2ZyZWVtKHJlY3ZtYnVmNlswXSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCW9mZnNldCA9IHNp
emVvZihzdHJ1Y3Qgc2N0cGhkcikgKyBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpOworCQlp
ZiAoU0NUUF9CVUZfTEVOKHJlY3ZtYnVmNlswXSkgPCBvZmZzZXQpIHsKKwkJCWlmICgocmVjdm1i
dWY2WzBdID0gbV9wdWxsdXAocmVjdm1idWY2WzBdLCBvZmZzZXQpKSA9PSBOVUxMKSB7CisJCQkJ
U0NUUF9TVEFUX0lOQ1Ioc2N0cHNfaGRyb3BzKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQor
CQlzaCA9IG10b2QocmVjdm1idWY2WzBdLCBzdHJ1Y3Qgc2N0cGhkciAqKTsKKwkJY2ggPSAoc3Ry
dWN0IHNjdHBfY2h1bmtoZHIgKikoKGNhZGRyX3Qpc2ggKyBzaXplb2Yoc3RydWN0IHNjdHBoZHIp
KTsKKwkJb2Zmc2V0IC09IHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7CisKKwkJZHN0LnNp
bjZfZmFtaWx5ID0gQUZfSU5FVDY7CisjaWZkZWYgSEFWRV9TSU42X0xFTgorCQlkc3Quc2luNl9s
ZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwkJZHN0LnNpbjZfcG9y
dCA9IHNoLT5kZXN0X3BvcnQ7CisKKwkJc3JjLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisjaWZk
ZWYgSEFWRV9TSU42X0xFTgorCQlzcmMuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luNik7CisjZW5kaWYKKwkJc3JjLnNpbjZfcG9ydCA9IHNoLT5zcmNfcG9ydDsKKwkJaWYgKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9ub19jc3VtX29uX2xvb3BiYWNrKSAmJgorCQkgICAgKG1lbWNt
cCgmc3JjLnNpbjZfYWRkciwgJmRzdC5zaW42X2FkZHIsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIp
KSA9PSAwKSkgeworCQkJY29tcHV0ZV9jcmMgPSAwOworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNf
cmVjdmh3Y3JjKTsKKwkJfSBlbHNlIHsKKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3Zzd2Ny
Yyk7CisJCX0KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIiVzOiBSZWNlaXZlZCAlZCBieXRl
cy4iLCBfX2Z1bmNfXywgbik7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICIgLSBjYWxsaW5n
IHNjdHBfY29tbW9uX2lucHV0X3Byb2Nlc3Npbmcgd2l0aCBvZmY9JWRcbiIsIG9mZnNldCk7CisJ
CXNjdHBfY29tbW9uX2lucHV0X3Byb2Nlc3NpbmcoJnJlY3ZtYnVmNlswXSwgMCwgb2Zmc2V0LCBu
LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3Jj
LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmZHN0
LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoLCBjaCwKKwkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb21wdXRlX2NyYywKKwkJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfREVGQVVMVF9WUkZJ
RCwgMCk7CisJCWlmIChyZWN2bWJ1ZjZbMF0pIHsKKwkJCW1fZnJlZW0ocmVjdm1idWY2WzBdKTsK
KwkJfQorCX0KKwlmb3IgKGkgPSAwOyBpIDwgTUFYTEVOX01CVUZfQ0hBSU47IGkrKykgeworCQlt
X2ZyZWUocmVjdm1idWY2W2ldKTsKKwl9CisJLyogZnJlZSB0aGUgYXJyYXkgaXRzZWxmICovCisJ
ZnJlZShyZWN2bWJ1ZjYpOworCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICIlczogRXhpdGluZyBT
Q1RQL0lQNiByY3ZcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gKE5VTEwpOworfQorI2VuZGlmCisK
KyNpZmRlZiBJTkVUCitzdGF0aWMgdm9pZCAqCityZWN2X2Z1bmN0aW9uX3VkcCh2b2lkICphcmcp
Cit7CisJc3RydWN0IG1idWYgKip1ZHByZWN2bWJ1ZjsKKwkvKkluaXRpYWxseSB0aGUgZW50aXJl
IHNldCBvZiBtYnVmcyBpcyB0byBiZSBhbGxvY2F0ZWQuCisJICB0b19maWxsIGluZGljYXRlcyB0
aGlzIGFtb3VudC4gKi8KKwlpbnQgdG9fZmlsbCA9IE1BWExFTl9NQlVGX0NIQUlOOworCS8qIGlv
dmxlbiBpcyB0aGUgc2l6ZSBvZiBlYWNoIG1idWYgaW4gdGhlIGNoYWluICovCisJaW50IGksIG4s
IG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgaW92bGVuID0gTUNMQllURVM7CisJaW50IHdhbnRfZXh0
ID0gKGlvdmxlbiA+IE1MRU4pPyAxIDogMDsKKwlpbnQgd2FudF9oZWFkZXIgPSAwOworCXN0cnVj
dCBzY3RwaGRyICpzaDsKKwl1aW50MTZfdCBwb3J0OworCXN0cnVjdCBzY3RwX2NodW5raGRyICpj
aDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc3JjLCBkc3Q7CisjaWYgZGVmaW5lZChJUF9QS1RJTkZP
KQorCWNoYXIgY21zZ2J1ZltDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgaW5fcGt0aW5mbykpXTsK
KyNlbHNlCisJY2hhciBjbXNnYnVmW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSld
OworI2VuZGlmCisJaW50IGNvbXB1dGVfY3JjID0gMTsKKyNpZiAhZGVmaW5lZChfV0lOMzIpCisJ
dW5zaWduZWQgaW50IG5jb3VudGVyOworCXN0cnVjdCBpb3ZlYyBpb3ZbTUFYTEVOX01CVUZfQ0hB
SU5dOworCXN0cnVjdCBtc2doZHIgbXNnOworCXN0cnVjdCBjbXNnaGRyICpjbXNncHRyOworI2Vs
c2UKKwlHVUlEIFdTQVJlY3ZNc2dfR1VJRCA9IFdTQUlEX1dTQVJFQ1ZNU0c7CisJTFBGTl9XU0FS
RUNWTVNHIFdTQVJlY3ZNc2c7CisJY2hhciBDb250cm9sQnVmZmVyWzEwMjRdOworCVdTQUJVRiBp
b3ZbTUFYTEVOX01CVUZfQ0hBSU5dOworCVdTQU1TRyBtc2c7CisJaW50IG5SZXN1bHQsIG1fRXJy
b3JDb2RlOworCVdTQUNNU0dIRFIgKmNtc2dwdHI7CisJRFdPUkQgbmNvdW50ZXI7CisjZW5kaWYK
KworCXNjdHBfdXNlcnNwYWNlX3NldF90aHJlYWRuYW1lKCJTQ1RQL1VEUC9JUDQgcmN2Iik7CisK
Kwl1ZHByZWN2bWJ1ZiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IG1idWYgKikgKiBNQVhMRU5fTUJV
Rl9DSEFJTik7CisKKwl3aGlsZSAoMSkgeworCQlmb3IgKGkgPSAwOyBpIDwgdG9fZmlsbDsgaSsr
KSB7CisJCQkvKiBOb3QgZ2V0dGluZyB0aGUgcGFja2V0IGhlYWRlci4gVGVzdHMgd2l0aCBjaGFp
biBvZiBvbmUgcnVuCisJCQkgICBhcyB1c3VhbCB3aXRob3V0IGhhdmluZyB0aGUgcGFja2V0IGhl
YWRlci4KKwkJCSAgIEhhdmUgdHJpZWQgYm90aCBzZW5kaW5nIGFuZCByZWNlaXZpbmcKKwkJCSAq
LworCQkJdWRwcmVjdm1idWZbaV0gPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coaW92bGVuLCB3YW50
X2hlYWRlciwgTV9OT1dBSVQsIHdhbnRfZXh0LCBNVF9EQVRBKTsKKyNpZiAhZGVmaW5lZChfV0lO
MzIpCisJCQlpb3ZbaV0uaW92X2Jhc2UgPSAoY2FkZHJfdCl1ZHByZWN2bWJ1ZltpXS0+bV9kYXRh
OworCQkJaW92W2ldLmlvdl9sZW4gPSBpb3ZsZW47CisjZWxzZQorCQkJaW92W2ldLmJ1ZiA9IChj
YWRkcl90KXVkcHJlY3ZtYnVmW2ldLT5tX2RhdGE7CisJCQlpb3ZbaV0ubGVuID0gaW92bGVuOwor
I2VuZGlmCisJCX0KKwkJdG9fZmlsbCA9IDA7CisjaWYgIWRlZmluZWQoX1dJTjMyKQorCQltZW1z
ZXQoJm1zZywgMCwgc2l6ZW9mKHN0cnVjdCBtc2doZHIpKTsKKyNlbHNlCisJCW1lbXNldCgmbXNn
LCAwLCBzaXplb2YoV1NBTVNHKSk7CisjZW5kaWYKKwkJbWVtc2V0KCZzcmMsIDAsIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwkJbWVtc2V0KCZkc3QsIDAsIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pKTsKKwkJbWVtc2V0KGNtc2didWYsIDAsIHNpemVvZihjbXNnYnVmKSk7CisKKyNp
ZiAhZGVmaW5lZChfV0lOMzIpCisJCW1zZy5tc2dfbmFtZSA9ICh2b2lkICopJnNyYzsKKwkJbXNn
Lm1zZ19uYW1lbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisJCW1zZy5tc2dfaW92
ID0gaW92OworCQltc2cubXNnX2lvdmxlbiA9IE1BWExFTl9NQlVGX0NIQUlOOworCQltc2cubXNn
X2NvbnRyb2wgPSAodm9pZCAqKWNtc2didWY7CisJCW1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVv
ZihjbXNnYnVmKTsKKwkJbXNnLm1zZ19mbGFncyA9IDA7CisKKwkJbmNvdW50ZXIgPSBuID0gcmVj
dm1zZyhTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwKSwgJm1zZywgMCk7CisJCWlmIChu
IDwgMCkgeworCQkJaWYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFSU5UUikgeworCQkJ
CWNvbnRpbnVlOworCQkJfSBlbHNlIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorI2Vsc2UKKwkJ
blJlc3VsdCA9IFdTQUlvY3RsKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApLCBTSU9f
R0VUX0VYVEVOU0lPTl9GVU5DVElPTl9QT0lOVEVSLAorCQkgJldTQVJlY3ZNc2dfR1VJRCwgc2l6
ZW9mIFdTQVJlY3ZNc2dfR1VJRCwKKwkJICZXU0FSZWN2TXNnLCBzaXplb2YgV1NBUmVjdk1zZywK
KwkJICZuY291bnRlciwgTlVMTCwgTlVMTCk7CisJCWlmIChuUmVzdWx0ID09IDApIHsKKwkJCW1z
Zy5uYW1lID0gKHZvaWQgKikmc3JjOworCQkJbXNnLm5hbWVsZW4gPSBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luKTsKKwkJCW1zZy5scEJ1ZmZlcnMgPSBpb3Y7CisJCQltc2cuZHdCdWZmZXJDb3Vu
dCA9IE1BWExFTl9NQlVGX0NIQUlOOworCQkJbXNnLkNvbnRyb2wubGVuID0gc2l6ZW9mIENvbnRy
b2xCdWZmZXI7CisJCQltc2cuQ29udHJvbC5idWYgPSBDb250cm9sQnVmZmVyOworCQkJbXNnLmR3
RmxhZ3MgPSAwOworCQkJblJlc3VsdCA9IFdTQVJlY3ZNc2coU0NUUF9CQVNFX1ZBUih1c2Vyc3Bh
Y2VfdWRwc2N0cCksICZtc2csICZuY291bnRlciwgTlVMTCwgTlVMTCk7CisJCX0KKwkJaWYgKG5S
ZXN1bHQgIT0gMCkgeworCQkJbV9FcnJvckNvZGUgPSBXU0FHZXRMYXN0RXJyb3IoKTsKKwkJCWlm
ICgobV9FcnJvckNvZGUgPT0gV1NBRU5PVFNPQ0spIHx8IChtX0Vycm9yQ29kZSA9PSBXU0FFSU5U
UikpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCW4gPSBuY291bnRl
cjsKKyNlbmRpZgorCQlTQ1RQX0hFQURFUl9MRU4odWRwcmVjdm1idWZbMF0pID0gbjsgLyogbGVu
Z3RoIG9mIHRvdGFsIHBhY2tldCAqLworCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2cGFja2V0
cyk7CisJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19pbnBhY2tldHMpOworCisJCWlm
ICgodW5zaWduZWQgaW50KW4gPD0gaW92bGVuKSB7CisJCQlTQ1RQX0JVRl9MRU4odWRwcmVjdm1i
dWZbMF0pID0gbjsKKwkJCSh0b19maWxsKSsrOworCQl9IGVsc2UgeworCQkJaSA9IDA7CisJCQlT
Q1RQX0JVRl9MRU4odWRwcmVjdm1idWZbMF0pID0gaW92bGVuOworCisJCQluY291bnRlciAtPSBt
aW4obmNvdW50ZXIsIGlvdmxlbik7CisJCQkodG9fZmlsbCkrKzsKKwkJCWRvIHsKKwkJCQl1ZHBy
ZWN2bWJ1ZltpXS0+bV9uZXh0ID0gdWRwcmVjdm1idWZbaSsxXTsKKwkJCQlTQ1RQX0JVRl9MRU4o
dWRwcmVjdm1idWZbaV0tPm1fbmV4dCkgPSBtaW4obmNvdW50ZXIsIGlvdmxlbik7CisJCQkJaSsr
OworCQkJCW5jb3VudGVyIC09IG1pbihuY291bnRlciwgaW92bGVuKTsKKwkJCQkodG9fZmlsbCkr
KzsKKwkJCX0gd2hpbGUgKG5jb3VudGVyID4gMCk7CisJCX0KKworCQlmb3IgKGNtc2dwdHIgPSBD
TVNHX0ZJUlNUSERSKCZtc2cpOyBjbXNncHRyICE9IE5VTEw7IGNtc2dwdHIgPSBDTVNHX05YVEhE
UigmbXNnLCBjbXNncHRyKSkgeworI2lmIGRlZmluZWQoSVBfUEtUSU5GTykKKwkJCWlmICgoY21z
Z3B0ci0+Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQKSAmJiAoY21zZ3B0ci0+Y21zZ190eXBlID09
IElQX1BLVElORk8pKSB7CisJCQkJc3RydWN0IGluX3BrdGluZm8gKmluZm87CisKKwkJCQlkc3Qu
c2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJCQkJZHN0LnNpbl9s
ZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCQkJCWluZm8gPSAoc3Ry
dWN0IGluX3BrdGluZm8gKilDTVNHX0RBVEEoY21zZ3B0cik7CisJCQkJbWVtY3B5KCh2b2lkICop
JmRzdC5zaW5fYWRkciwgKGNvbnN0IHZvaWQgKikmKGluZm8tPmlwaV9hZGRyKSwgc2l6ZW9mKHN0
cnVjdCBpbl9hZGRyKSk7CisJCQkJYnJlYWs7CisJCQl9CisjZWxzZQorCQkJaWYgKChjbXNncHRy
LT5jbXNnX2xldmVsID09IElQUFJPVE9fSVApICYmIChjbXNncHRyLT5jbXNnX3R5cGUgPT0gSVBf
UkVDVkRTVEFERFIpKSB7CisJCQkJc3RydWN0IGluX2FkZHIgKmFkZHI7CisKKwkJCQlkc3Quc2lu
X2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJCQkJZHN0LnNpbl9sZW4g
PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCQkJCWFkZHIgPSAoc3RydWN0
IGluX2FkZHIgKilDTVNHX0RBVEEoY21zZ3B0cik7CisJCQkJbWVtY3B5KCh2b2lkICopJmRzdC5z
aW5fYWRkciwgKGNvbnN0IHZvaWQgKilhZGRyLCBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKKwkJ
CQlicmVhazsKKwkJCX0KKyNlbmRpZgorCQl9CisKKwkJLyogU0NUUCBkb2VzIG5vdCBhbGxvdyBi
cm9hZGNhc3RzIG9yIG11bHRpY2FzdHMgKi8KKwkJaWYgKElOX01VTFRJQ0FTVChudG9obChkc3Qu
c2luX2FkZHIuc19hZGRyKSkpIHsKKwkJCW1fZnJlZW0odWRwcmVjdm1idWZbMF0pOworCQkJY29u
dGludWU7CisJCX0KKwkJaWYgKFNDVFBfSVNfSVRfQlJPQURDQVNUKGRzdC5zaW5fYWRkciwgdWRw
cmVjdm1idWZbMF0pKSB7CisJCQltX2ZyZWVtKHVkcHJlY3ZtYnVmWzBdKTsKKwkJCWNvbnRpbnVl
OworCQl9CisKKwkJb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSArIHNpemVvZihzdHJ1
Y3Qgc2N0cF9jaHVua2hkcik7CisJCWlmIChTQ1RQX0JVRl9MRU4odWRwcmVjdm1idWZbMF0pIDwg
b2Zmc2V0KSB7CisJCQlpZiAoKHVkcHJlY3ZtYnVmWzBdID0gbV9wdWxsdXAodWRwcmVjdm1idWZb
MF0sIG9mZnNldCkpID09IE5VTEwpIHsKKwkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19oZHJvcHMp
OworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCXNoID0gbXRvZCh1ZHByZWN2bWJ1ZlswXSwg
c3RydWN0IHNjdHBoZHIgKik7CisJCWNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopKChjYWRk
cl90KXNoICsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSk7CisJCW9mZnNldCAtPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfY2h1bmtoZHIpOworCisJCXBvcnQgPSBzcmMuc2luX3BvcnQ7CisJCXNyYy5zaW5f
cG9ydCA9IHNoLT5zcmNfcG9ydDsKKwkJZHN0LnNpbl9wb3J0ID0gc2gtPmRlc3RfcG9ydDsKKwkJ
aWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ub19jc3VtX29uX2xvb3BiYWNrKSAmJgorCQkgICAg
KHNyYy5zaW5fYWRkci5zX2FkZHIgPT0gZHN0LnNpbl9hZGRyLnNfYWRkcikpIHsKKwkJCWNvbXB1
dGVfY3JjID0gMDsKKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3Zod2NyYyk7CisJCX0gZWxz
ZSB7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2c3djcmMpOworCQl9CisJCVNDVFBEQkco
U0NUUF9ERUJVR19VU1IsICIlczogUmVjZWl2ZWQgJWQgYnl0ZXMuIiwgX19mdW5jX18sIG4pOwor
CQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiIC0gY2FsbGluZyBzY3RwX2NvbW1vbl9pbnB1dF9w
cm9jZXNzaW5nIHdpdGggb2ZmPSVkXG4iLCBvZmZzZXQpOworCQlzY3RwX2NvbW1vbl9pbnB1dF9w
cm9jZXNzaW5nKCZ1ZHByZWN2bWJ1ZlswXSwgMCwgb2Zmc2V0LCBuLAorCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3JjLAorCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmZHN0LAorCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNoLCBjaCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b21wdXRlX2NyYywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNDVFBfREVGQVVMVF9WUkZJRCwgcG9ydCk7CisJCWlmICh1
ZHByZWN2bWJ1ZlswXSkgeworCQkJbV9mcmVlbSh1ZHByZWN2bWJ1ZlswXSk7CisJCX0KKwl9CisJ
Zm9yIChpID0gMDsgaSA8IE1BWExFTl9NQlVGX0NIQUlOOyBpKyspIHsKKwkJbV9mcmVlKHVkcHJl
Y3ZtYnVmW2ldKTsKKwl9CisJLyogZnJlZSB0aGUgYXJyYXkgaXRzZWxmICovCisJZnJlZSh1ZHBy
ZWN2bWJ1Zik7CisJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIiVzOiBFeGl0aW5nIFNDVFAvVURQ
L0lQNCByY3ZcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gKE5VTEwpOworfQorI2VuZGlmCisKKyNp
ZiBkZWZpbmVkKElORVQ2KQorc3RhdGljIHZvaWQgKgorcmVjdl9mdW5jdGlvbl91ZHA2KHZvaWQg
KmFyZykKK3sKKwlzdHJ1Y3QgbWJ1ZiAqKnVkcHJlY3ZtYnVmNjsKKwkvKkluaXRpYWxseSB0aGUg
ZW50aXJlIHNldCBvZiBtYnVmcyBpcyB0byBiZSBhbGxvY2F0ZWQuCisJICB0b19maWxsIGluZGlj
YXRlcyB0aGlzIGFtb3VudC4gKi8KKwlpbnQgdG9fZmlsbCA9IE1BWExFTl9NQlVGX0NIQUlOOwor
CS8qIGlvdmxlbiBpcyB0aGUgc2l6ZSBvZiBlYWNoIG1idWYgaW4gdGhlIGNoYWluICovCisJaW50
IGksIG4sIG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgaW92bGVuID0gTUNMQllURVM7CisJaW50IHdh
bnRfZXh0ID0gKGlvdmxlbiA+IE1MRU4pPyAxIDogMDsKKwlpbnQgd2FudF9oZWFkZXIgPSAwOwor
CXN0cnVjdCBzb2NrYWRkcl9pbjYgc3JjLCBkc3Q7CisJc3RydWN0IHNjdHBoZHIgKnNoOworCXVp
bnQxNl90IHBvcnQ7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOworCWNoYXIgY21zZ2J1ZltD
TVNHX1NQQUNFKHNpemVvZiAoc3RydWN0IGluNl9wa3RpbmZvKSldOworCWludCBjb21wdXRlX2Ny
YyA9IDE7CisjaWYgIWRlZmluZWQoX1dJTjMyKQorCXN0cnVjdCBpb3ZlYyBpb3ZbTUFYTEVOX01C
VUZfQ0hBSU5dOworCXN0cnVjdCBtc2doZHIgbXNnOworCXN0cnVjdCBjbXNnaGRyICpjbXNncHRy
OworCXVuc2lnbmVkIGludCBuY291bnRlcjsKKyNlbHNlCisJR1VJRCBXU0FSZWN2TXNnX0dVSUQg
PSBXU0FJRF9XU0FSRUNWTVNHOworCUxQRk5fV1NBUkVDVk1TRyBXU0FSZWN2TXNnOworCWNoYXIg
Q29udHJvbEJ1ZmZlclsxMDI0XTsKKwlXU0FCVUYgaW92W01BWExFTl9NQlVGX0NIQUlOXTsKKwlX
U0FNU0cgbXNnOworCWludCBuUmVzdWx0LCBtX0Vycm9yQ29kZTsKKwlXU0FDTVNHSERSICpjbXNn
cHRyOworCURXT1JEIG5jb3VudGVyOworI2VuZGlmCisKKwlzY3RwX3VzZXJzcGFjZV9zZXRfdGhy
ZWFkbmFtZSgiU0NUUC9VRFAvSVA2IHJjdiIpOworCisJdWRwcmVjdm1idWY2ID0gbWFsbG9jKHNp
emVvZihzdHJ1Y3QgbWJ1ZiAqKSAqIE1BWExFTl9NQlVGX0NIQUlOKTsKKwl3aGlsZSAoMSkgewor
CQlmb3IgKGkgPSAwOyBpIDwgdG9fZmlsbDsgaSsrKSB7CisJCQkvKiBOb3QgZ2V0dGluZyB0aGUg
cGFja2V0IGhlYWRlci4gVGVzdHMgd2l0aCBjaGFpbiBvZiBvbmUgcnVuCisJCQkgICBhcyB1c3Vh
bCB3aXRob3V0IGhhdmluZyB0aGUgcGFja2V0IGhlYWRlci4KKwkJCSAgIEhhdmUgdHJpZWQgYm90
aCBzZW5kaW5nIGFuZCByZWNlaXZpbmcKKwkJCSAqLworCQkJdWRwcmVjdm1idWY2W2ldID0gc2N0
cF9nZXRfbWJ1Zl9mb3JfbXNnKGlvdmxlbiwgd2FudF9oZWFkZXIsIE1fTk9XQUlULCB3YW50X2V4
dCwgTVRfREFUQSk7CisjaWYgIWRlZmluZWQoX1dJTjMyKQorCQkJaW92W2ldLmlvdl9iYXNlID0g
KGNhZGRyX3QpdWRwcmVjdm1idWY2W2ldLT5tX2RhdGE7CisJCQlpb3ZbaV0uaW92X2xlbiA9IGlv
dmxlbjsKKyNlbHNlCisJCQlpb3ZbaV0uYnVmID0gKGNhZGRyX3QpdWRwcmVjdm1idWY2W2ldLT5t
X2RhdGE7CisJCQlpb3ZbaV0ubGVuID0gaW92bGVuOworI2VuZGlmCisJCX0KKwkJdG9fZmlsbCA9
IDA7CisKKyNpZiAhZGVmaW5lZChfV0lOMzIpCisJCW1lbXNldCgmbXNnLCAwLCBzaXplb2Yoc3Ry
dWN0IG1zZ2hkcikpOworI2Vsc2UKKwkJbWVtc2V0KCZtc2csIDAsIHNpemVvZihXU0FNU0cpKTsK
KyNlbmRpZgorCQltZW1zZXQoJnNyYywgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsK
KwkJbWVtc2V0KCZkc3QsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJCW1lbXNl
dChjbXNnYnVmLCAwLCBDTVNHX1NQQUNFKHNpemVvZiAoc3RydWN0IGluNl9wa3RpbmZvKSkpOwor
CisjaWYgIWRlZmluZWQoX1dJTjMyKQorCQltc2cubXNnX25hbWUgPSAodm9pZCAqKSZzcmM7CisJ
CW1zZy5tc2dfbmFtZWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKwkJbXNnLm1z
Z19pb3YgPSBpb3Y7CisJCW1zZy5tc2dfaW92bGVuID0gTUFYTEVOX01CVUZfQ0hBSU47CisJCW1z
Zy5tc2dfY29udHJvbCA9ICh2b2lkICopY21zZ2J1ZjsKKwkJbXNnLm1zZ19jb250cm9sbGVuID0g
KHNvY2tsZW5fdClDTVNHX1NQQUNFKHNpemVvZiAoc3RydWN0IGluNl9wa3RpbmZvKSk7CisJCW1z
Zy5tc2dfZmxhZ3MgPSAwOworCisJCW5jb3VudGVyID0gbiA9IHJlY3Ztc2coU0NUUF9CQVNFX1ZB
Uih1c2Vyc3BhY2VfdWRwc2N0cDYpLCAmbXNnLCAwKTsKKwkJaWYgKG4gPCAwKSB7CisJCQlpZiAo
ZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVJTlRSKSB7CisJCQkJY29udGludWU7CisJCQl9
IGVsc2UgeworCQkJCWJyZWFrOworCQkJfQorCQl9CisjZWxzZQorCQluUmVzdWx0ID0gV1NBSW9j
dGwoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpLCBTSU9fR0VUX0VYVEVOU0lPTl9G
VU5DVElPTl9QT0lOVEVSLAorCQkgICAgICAgICAgICAgICAgICAgJldTQVJlY3ZNc2dfR1VJRCwg
c2l6ZW9mIFdTQVJlY3ZNc2dfR1VJRCwKKwkJICAgICAgICAgICAgICAgICAgICZXU0FSZWN2TXNn
LCBzaXplb2YgV1NBUmVjdk1zZywKKwkJICAgICAgICAgICAgICAgICAgICZuY291bnRlciwgTlVM
TCwgTlVMTCk7CisJCWlmIChuUmVzdWx0ID09IFNPQ0tFVF9FUlJPUikgeworCQkJbV9FcnJvckNv
ZGUgPSBXU0FHZXRMYXN0RXJyb3IoKTsKKwkJCVdTQVJlY3ZNc2cgPSBOVUxMOworCQl9CisJCWlm
IChuUmVzdWx0ID09IDApIHsKKwkJCW1zZy5uYW1lID0gKHZvaWQgKikmc3JjOworCQkJbXNnLm5h
bWVsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJCQltc2cubHBCdWZmZXJzID0g
aW92OworCQkJbXNnLmR3QnVmZmVyQ291bnQgPSBNQVhMRU5fTUJVRl9DSEFJTjsKKwkJCW1zZy5D
b250cm9sLmxlbiA9IHNpemVvZiBDb250cm9sQnVmZmVyOworCQkJbXNnLkNvbnRyb2wuYnVmID0g
Q29udHJvbEJ1ZmZlcjsKKwkJCW1zZy5kd0ZsYWdzID0gMDsKKwkJCW5SZXN1bHQgPSBXU0FSZWN2
TXNnKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSwgJm1zZywgJm5jb3VudGVyLCBO
VUxMLCBOVUxMKTsKKwkJfQorCQlpZiAoblJlc3VsdCAhPSAwKSB7CisJCQltX0Vycm9yQ29kZSA9
IFdTQUdldExhc3RFcnJvcigpOworCQkJaWYgKChtX0Vycm9yQ29kZSA9PSBXU0FFTk9UU09DSykg
fHwgKG1fRXJyb3JDb2RlID09IFdTQUVJTlRSKSkgeworCQkJCWJyZWFrOworCQkJfQorCQkJY29u
dGludWU7CisJCX0KKwkJbiA9IG5jb3VudGVyOworI2VuZGlmCisJCVNDVFBfSEVBREVSX0xFTih1
ZHByZWN2bWJ1ZjZbMF0pID0gbjsgLyogbGVuZ3RoIG9mIHRvdGFsIHBhY2tldCAqLworCQlTQ1RQ
X1NUQVRfSU5DUihzY3Rwc19yZWN2cGFja2V0cyk7CisJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2
NChzY3Rwc19pbnBhY2tldHMpOworCisJCWlmICgodW5zaWduZWQgaW50KW4gPD0gaW92bGVuKSB7
CisJCQlTQ1RQX0JVRl9MRU4odWRwcmVjdm1idWY2WzBdKSA9IG47CisJCQkodG9fZmlsbCkrKzsK
KwkJfSBlbHNlIHsKKwkJCWkgPSAwOworCQkJU0NUUF9CVUZfTEVOKHVkcHJlY3ZtYnVmNlswXSkg
PSBpb3ZsZW47CisKKwkJCW5jb3VudGVyIC09IG1pbihuY291bnRlciwgaW92bGVuKTsKKwkJCSh0
b19maWxsKSsrOworCQkJZG8geworCQkJCXVkcHJlY3ZtYnVmNltpXS0+bV9uZXh0ID0gdWRwcmVj
dm1idWY2W2krMV07CisJCQkJU0NUUF9CVUZfTEVOKHVkcHJlY3ZtYnVmNltpXS0+bV9uZXh0KSA9
IG1pbihuY291bnRlciwgaW92bGVuKTsKKwkJCQlpKys7CisJCQkJbmNvdW50ZXIgLT0gbWluKG5j
b3VudGVyLCBpb3ZsZW4pOworCQkJCSh0b19maWxsKSsrOworCQkJfSB3aGlsZSAobmNvdW50ZXIg
PiAwKTsKKwkJfQorCisJCWZvciAoY21zZ3B0ciA9IENNU0dfRklSU1RIRFIoJm1zZyk7IGNtc2dw
dHIgIT0gTlVMTDsgY21zZ3B0ciA9IENNU0dfTlhUSERSKCZtc2csIGNtc2dwdHIpKSB7CisJCQlp
ZiAoKGNtc2dwdHItPmNtc2dfbGV2ZWwgPT0gSVBQUk9UT19JUFY2KSAmJiAoY21zZ3B0ci0+Y21z
Z190eXBlID09IElQVjZfUEtUSU5GTykpIHsKKwkJCQlzdHJ1Y3QgaW42X3BrdGluZm8gKmluZm87
CisKKwkJCQlkc3Quc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyNpZmRlZiBIQVZFX1NJTjZfTEVO
CisJCQkJZHN0LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlm
CisJCQkJaW5mbyA9IChzdHJ1Y3QgaW42X3BrdGluZm8gKilDTVNHX0RBVEEoY21zZ3B0cik7CisJ
CQkJLypkc3Quc2luNl9wb3J0ID0gaHRvbnMoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3VkcF90dW5u
ZWxpbmdfcG9ydCkpOyovCisJCQkJbWVtY3B5KCh2b2lkICopJmRzdC5zaW42X2FkZHIsIChjb25z
dCB2b2lkICopJihpbmZvLT5pcGk2X2FkZHIpLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisJ
CQl9CisJCX0KKworCQkvKiBTQ1RQIGRvZXMgbm90IGFsbG93IGJyb2FkY2FzdHMgb3IgbXVsdGlj
YXN0cyAqLworCQlpZiAoSU42X0lTX0FERFJfTVVMVElDQVNUKCZkc3Quc2luNl9hZGRyKSkgewor
CQkJbV9mcmVlbSh1ZHByZWN2bWJ1ZjZbMF0pOworCQkJY29udGludWU7CisJCX0KKworCQlvZmZz
ZXQgPSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRy
KTsKKwkJaWYgKFNDVFBfQlVGX0xFTih1ZHByZWN2bWJ1ZjZbMF0pIDwgb2Zmc2V0KSB7CisJCQlp
ZiAoKHVkcHJlY3ZtYnVmNlswXSA9IG1fcHVsbHVwKHVkcHJlY3ZtYnVmNlswXSwgb2Zmc2V0KSkg
PT0gTlVMTCkgeworCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX2hkcm9wcyk7CisJCQkJY29udGlu
dWU7CisJCQl9CisJCX0KKwkJc2ggPSBtdG9kKHVkcHJlY3ZtYnVmNlswXSwgc3RydWN0IHNjdHBo
ZHIgKik7CisJCWNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopKChjYWRkcl90KXNoICsgc2l6
ZW9mKHN0cnVjdCBzY3RwaGRyKSk7CisJCW9mZnNldCAtPSBzaXplb2Yoc3RydWN0IHNjdHBfY2h1
bmtoZHIpOworCisJCXBvcnQgPSBzcmMuc2luNl9wb3J0OworCQlzcmMuc2luNl9wb3J0ID0gc2gt
PnNyY19wb3J0OworCQlkc3Quc2luNl9wb3J0ID0gc2gtPmRlc3RfcG9ydDsKKwkJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9ub19jc3VtX29uX2xvb3BiYWNrKSAmJgorCQkgICAgKG1lbWNtcCgm
c3JjLnNpbjZfYWRkciwgJmRzdC5zaW42X2FkZHIsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSA9
PSAwKSkgeworCQkJY29tcHV0ZV9jcmMgPSAwOworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVj
dmh3Y3JjKTsKKwkJfSBlbHNlIHsKKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3Zzd2NyYyk7
CisJCX0KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIiVzOiBSZWNlaXZlZCAlZCBieXRlcy4i
LCBfX2Z1bmNfXywgbik7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICIgLSBjYWxsaW5nIHNj
dHBfY29tbW9uX2lucHV0X3Byb2Nlc3Npbmcgd2l0aCBvZmY9JWRcbiIsIChpbnQpc2l6ZW9mKHN0
cnVjdCBzY3RwaGRyKSk7CisJCXNjdHBfY29tbW9uX2lucHV0X3Byb2Nlc3NpbmcoJnVkcHJlY3Zt
YnVmNlswXSwgMCwgb2Zmc2V0LCBuLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChz
dHJ1Y3Qgc29ja2FkZHIgKikmc3JjLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChz
dHJ1Y3Qgc29ja2FkZHIgKikmZHN0LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNo
LCBjaCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlX2NyYywKKwkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNDVFBfREVGQVVMVF9WUkZJRCwgcG9ydCk7CisJCWlmICh1ZHByZWN2bWJ1ZjZbMF0pIHsK
KwkJCW1fZnJlZW0odWRwcmVjdm1idWY2WzBdKTsKKwkJfQorCX0KKwlmb3IgKGkgPSAwOyBpIDwg
TUFYTEVOX01CVUZfQ0hBSU47IGkrKykgeworCQltX2ZyZWUodWRwcmVjdm1idWY2W2ldKTsKKwl9
CisJLyogZnJlZSB0aGUgYXJyYXkgaXRzZWxmICovCisJZnJlZSh1ZHByZWN2bWJ1ZjYpOworCVND
VFBEQkcoU0NUUF9ERUJVR19VU1IsICIlczogRXhpdGluZyBTQ1RQL1VEUC9JUDYgcmN2XG4iLCBf
X2Z1bmNfXyk7CisJcmV0dXJuIChOVUxMKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfV0lO
MzIpCitzdGF0aWMgdm9pZAorc2V0UmVjZWl2ZUJ1ZmZlclNpemUoU09DS0VUIHNmZCwgaW50IG5l
d19zaXplKQorI2Vsc2UKK3N0YXRpYyB2b2lkCitzZXRSZWNlaXZlQnVmZmVyU2l6ZShpbnQgc2Zk
LCBpbnQgbmV3X3NpemUpCisjZW5kaWYKK3sKKwlpbnQgY2ggPSBuZXdfc2l6ZTsKKworCWlmIChz
ZXRzb2Nrb3B0IChzZmQsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgKHZvaWQqKSZjaCwgc2l6ZW9m
KGNoKSkgPCAwKSB7CisjaWYgZGVmaW5lZChfV0lOMzIpCisJCVNDVFBEQkcoU0NUUF9ERUJVR19V
U1IsICJDYW4ndCBzZXQgcmVjdi1idWZmZXJzIHNpemUgKGVycm5vID0gJWQpLlxuIiwgV1NBR2V0
TGFzdEVycm9yKCkpOworI2Vsc2UKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNl
dCByZWN2LWJ1ZmZlcnMgc2l6ZSAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7CisjZW5kaWYKKwl9
CisJcmV0dXJuOworfQorCisjaWYgZGVmaW5lZChfV0lOMzIpCitzdGF0aWMgdm9pZAorc2V0U2Vu
ZEJ1ZmZlclNpemUoU09DS0VUIHNmZCwgaW50IG5ld19zaXplKQorI2Vsc2UKK3N0YXRpYyB2b2lk
CitzZXRTZW5kQnVmZmVyU2l6ZShpbnQgc2ZkLCBpbnQgbmV3X3NpemUpCisjZW5kaWYKK3sKKwlp
bnQgY2ggPSBuZXdfc2l6ZTsKKworCWlmIChzZXRzb2Nrb3B0IChzZmQsIFNPTF9TT0NLRVQsIFNP
X1NOREJVRiwgKHZvaWQqKSZjaCwgc2l6ZW9mKGNoKSkgPCAwKSB7CisjaWYgZGVmaW5lZChfV0lO
MzIpCisJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzZXQgc2VuZC1idWZmZXJzIHNp
emUgKGVycm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworI2Vsc2UKKwkJU0NUUERC
RyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBzZW5kLWJ1ZmZlcnMgc2l6ZSAoZXJybm8gPSAl
ZCkuXG4iLCBlcnJubyk7CisjZW5kaWYKKwl9CisJcmV0dXJuOworfQorCisjZGVmaW5lIFNPQ0tF
VF9USU1FT1VUIDEwMCAvKiBpbiBtcyAqLwordm9pZAorcmVjdl90aHJlYWRfaW5pdCh2b2lkKQor
eworI2lmIGRlZmluZWQoSU5FVCkKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcl9pcHY0OworCWNv
bnN0IGludCBoZHJpbmNsID0gMTsKKyNlbmRpZgorI2lmIGRlZmluZWQoSU5FVDYpCisJc3RydWN0
IHNvY2thZGRyX2luNiBhZGRyX2lwdjY7CisjZW5kaWYKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRl
ZmluZWQoSU5FVDYpCisJY29uc3QgaW50IG9uID0gMTsKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9X
SU4zMikKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OworCisJbWVtc2V0KCZ0aW1lb3V0LCAwLCBz
aXplb2Yoc3RydWN0IHRpbWV2YWwpKTsKKwl0aW1lb3V0LnR2X3NlYyAgPSAoU09DS0VUX1RJTUVP
VVQgLyAxMDAwKTsKKwl0aW1lb3V0LnR2X3VzZWMgPSAoU09DS0VUX1RJTUVPVVQgJSAxMDAwKSAq
IDEwMDA7CisjZWxzZQorCXVuc2lnbmVkIGludCB0aW1lb3V0ID0gU09DS0VUX1RJTUVPVVQ7IC8q
IFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVf
XykgfHwgZGVmaW5lZChfX0RyYWdvbkZseV9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCWlm
IChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yb3V0ZSkgPT0gLTEpIHsKKwkJaWYgKChTQ1RQX0JB
U0VfVkFSKHVzZXJzcGFjZV9yb3V0ZSkgPSBzb2NrZXQoQUZfUk9VVEUsIFNPQ0tfUkFXLCAwKSkg
PT0gLTEpIHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBjcmVhdGUgcm91dGlu
ZyBzb2NrZXQgKGVycm5vID0gJWQpLlxuIiwgZXJybm8pOworCQl9CisjaWYgMAorCQlzdHJ1Y3Qg
c29ja2FkZHJfbmwgc2FubDsKKworCQlpZiAoKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3JvdXRl
KSA9IHNvY2tldChBRl9ORVRMSU5LLCBTT0NLX1JBVywgTkVUTElOS19ST1VURSkpIDwgMCkgewor
CQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IGNyZWF0ZSByb3V0aW5nIHNvY2tldCAo
ZXJybm8gPSAlZC5cbiIsIGVycm5vKTsKKwkJfQorCQltZW1zZXQoJnNhbmwsIDAsIHNpemVvZihz
YW5sKSk7CisJCXNhbmwubmxfZmFtaWx5ID0gQUZfTkVUTElOSzsKKwkJc2FubC5ubF9ncm91cHMg
PSAwOworI2lmZGVmIElORVQKKwkJc2FubC5ubF9ncm91cHMgfD0gUlRNR1JQX0lQVjRfSUZBRERS
OworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJc2FubC5ubF9ncm91cHMgfD0gUlRNR1JQX0lQVjZf
SUZBRERSOworI2VuZGlmCisJCWlmIChiaW5kKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3JvdXRl
KSwgKHN0cnVjdCBzb2NrYWRkciAqKSAmc2FubCwgc2l6ZW9mKHNhbmwpKSA8IDApIHsKKwkJCVND
VFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBiaW5kIHJvdXRpbmcgc29ja2V0IChlcnJubyA9
ICVkKS5cbiIsIGVycm5vKTsKKwkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3JvdXRl
KSk7CisJCQlTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yb3V0ZSkgPSAtMTsKKwkJfQorI2VuZGlm
CisJCWlmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yb3V0ZSkgIT0gLTEpIHsKKwkJCWlmIChz
ZXRzb2Nrb3B0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3JvdXRlKSwgU09MX1NPQ0tFVCwgU09f
UkNWVElNRU8sKGNvbnN0IHZvaWQqKSZ0aW1lb3V0LCBzaXplb2Yoc3RydWN0IHRpbWV2YWwpKSA8
IDApIHsKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc2V0IHRpbWVvdXQgb24g
cm91dGluZyBzb2NrZXQgKGVycm5vID0gJWQpLlxuIiwgZXJybm8pOworI2lmIGRlZmluZWQoX1dJ
TjMyKQorCQkJCWNsb3Nlc29ja2V0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3JvdXRlKSk7Cisj
ZWxzZQorCQkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3JvdXRlKSk7CisjZW5kaWYK
KwkJCQlTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yb3V0ZSkgPSAtMTsKKwkJCX0KKwkJfQorCX0K
KyNlbmRpZgorI2lmIGRlZmluZWQoSU5FVCkKKwlpZiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
cmF3c2N0cCkgPT0gLTEpIHsKKwkJaWYgKChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3Rw
KSA9IHNvY2tldChBRl9JTkVULCBTT0NLX1JBVywgSVBQUk9UT19TQ1RQKSkgPT0gLTEpIHsKKyNp
ZiBkZWZpbmVkKF9XSU4zMikKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBjcmVh
dGUgcmF3IHNvY2tldCBmb3IgSVB2NCAoZXJybm8gPSAlZCkuXG4iLCBXU0FHZXRMYXN0RXJyb3Io
KSk7CisjZWxzZQorCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IGNyZWF0ZSByYXcg
c29ja2V0IGZvciBJUHY0IChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsKKyNlbmRpZgorCQl9IGVs
c2UgeworCQkJLyogY29tcGxldGUgc2V0dGluZyB1cCB0aGUgcmF3IFNDVFAgc29ja2V0ICovCisJ
CQlpZiAoc2V0c29ja29wdChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSwgSVBQUk9U
T19JUCwgSVBfSERSSU5DTCwoY29uc3Qgdm9pZCopJmhkcmluY2wsIHNpemVvZihpbnQpKSA8IDAp
IHsKKyNpZiBkZWZpbmVkKF9XSU4zMikKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2Fu
J3Qgc2V0IElQX0hEUklOQ0wgKGVycm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwor
CQkJCWNsb3Nlc29ja2V0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApKTsKKyNlbHNl
CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUF9IRFJJTkNMIChlcnJu
byA9ICVkKS5cbiIsIGVycm5vKTsKKwkJCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9y
YXdzY3RwKSk7CisjZW5kaWYKKwkJCQlTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSA9
IC0xOworCQkJfSBlbHNlIGlmIChzZXRzb2Nrb3B0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jh
d3NjdHApLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgKGNvbnN0IHZvaWQgKikmdGltZW91dCwg
c2l6ZW9mKHRpbWVvdXQpKSA8IDApIHsKKyNpZiBkZWZpbmVkKF9XSU4zMikKKwkJCQlTQ1RQREJH
KFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc2V0IHRpbWVvdXQgb24gc29ja2V0IGZvciBTQ1RQL0lQ
djQgKGVycm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQkJCWNsb3Nlc29ja2V0
KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApKTsKKyNlbHNlCisJCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCB0aW1lb3V0IG9uIHNvY2tldCBmb3IgU0NUUC9JUHY0
IChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsKKwkJCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJz
cGFjZV9yYXdzY3RwKSk7CisjZW5kaWYKKwkJCQlTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdz
Y3RwKSA9IC0xOworCQkJfSBlbHNlIHsKKwkJCQltZW1zZXQoKHZvaWQgKikmYWRkcl9pcHY0LCAw
LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJCQkJ
YWRkcl9pcHY0LnNpbl9sZW4gICAgICAgICA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwor
I2VuZGlmCisJCQkJYWRkcl9pcHY0LnNpbl9mYW1pbHkgICAgICA9IEFGX0lORVQ7CisJCQkJYWRk
cl9pcHY0LnNpbl9wb3J0ICAgICAgICA9IGh0b25zKDApOworCQkJCWFkZHJfaXB2NC5zaW5fYWRk
ci5zX2FkZHIgPSBodG9ubChJTkFERFJfQU5ZKTsKKwkJCQlpZiAoYmluZChTQ1RQX0JBU0VfVkFS
KHVzZXJzcGFjZV9yYXdzY3RwKSwgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyX2lwdjQs
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDApIHsKKyNpZiBkZWZpbmVkKF9XSU4zMikK
KwkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IGJpbmQgc29ja2V0IGZvciBTQ1RQ
L0lQdjQgKGVycm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQkJCQljbG9zZXNv
Y2tldChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSk7CisjZWxzZQorCQkJCQlTQ1RQ
REJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3QgYmluZCBzb2NrZXQgZm9yIFNDVFAvSVB2NCAoZXJy
bm8gPSAlZCkuXG4iLCBlcnJubyk7CisJCQkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNl
X3Jhd3NjdHApKTsKKyNlbmRpZgorCQkJCQlTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3Rw
KSA9IC0xOworCQkJCX0gZWxzZSB7CisJCQkJCXNldFJlY2VpdmVCdWZmZXJTaXplKFNDVFBfQkFT
RV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApLCBTQl9SQVcpOyAvKiAxMjhLICovCisJCQkJCXNldFNl
bmRCdWZmZXJTaXplKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApLCBTQl9SQVcpOyAv
KiAxMjhLIElzIHRoaXMgc2V0dGluZyBuZXQuaW5ldC5yYXcubWF4ZGdyYW0gdmFsdWU/IFNob3Vs
ZCBpdCBiZSBzZXQgdG8gNjRLPyAqLworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlpZiAoKFNDVFBf
QkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApID09IC0xKSAmJiAoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX3VkcF90dW5uZWxpbmdfcG9ydCkgIT0gMCkpIHsKKwkJaWYgKChTQ1RQX0JBU0VfVkFSKHVz
ZXJzcGFjZV91ZHBzY3RwKSA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VE
UCkpID09IC0xKSB7CisjaWYgZGVmaW5lZChfV0lOMzIpCisJCQlTQ1RQREJHKFNDVFBfREVCVUdf
VVNSLCAiQ2FuJ3QgY3JlYXRlIHNvY2tldCBmb3IgU0NUUC9VRFAvSVB2NCAoZXJybm8gPSAlZCku
XG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisjZWxzZQorCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VT
UiwgIkNhbid0IGNyZWF0ZSBzb2NrZXQgZm9yIFNDVFAvVURQL0lQdjQgKGVycm5vID0gJWQpLlxu
IiwgZXJybm8pOworI2VuZGlmCisJCX0gZWxzZSB7CisjaWYgZGVmaW5lZChJUF9QS1RJTkZPKQor
CQkJaWYgKHNldHNvY2tvcHQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCksIElQUFJP
VE9fSVAsIElQX1BLVElORk8sIChjb25zdCB2b2lkICopJm9uLCAoaW50KXNpemVvZihpbnQpKSA8
IDApIHsKKyNlbHNlCisJCQlpZiAoc2V0c29ja29wdChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91
ZHBzY3RwKSwgSVBQUk9UT19JUCwgSVBfUkVDVkRTVEFERFIsIChjb25zdCB2b2lkICopJm9uLCAo
aW50KXNpemVvZihpbnQpKSA8IDApIHsKKyNlbmRpZgorI2lmIGRlZmluZWQoX1dJTjMyKQorI2lm
IGRlZmluZWQoSVBfUEtUSU5GTykKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qg
c2V0IElQX1BLVElORk8gb24gc29ja2V0IGZvciBTQ1RQL1VEUC9JUHY0IChlcnJubyA9ICVkKS5c
biIsIFdTQUdldExhc3RFcnJvcigpKTsKKyNlbHNlCisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VT
UiwgIkNhbid0IHNldCBJUF9SRUNWRFNUQUREUiBvbiBzb2NrZXQgZm9yIFNDVFAvVURQL0lQdjQg
KGVycm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworI2VuZGlmCisJCQkJY2xvc2Vz
b2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkpOworI2Vsc2UKKyNpZiBkZWZp
bmVkKElQX1BLVElORk8pCisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBJ
UF9QS1RJTkZPIG9uIHNvY2tldCBmb3IgU0NUUC9VRFAvSVB2NCAoZXJybm8gPSAlZCkuXG4iLCBl
cnJubyk7CisjZWxzZQorCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzZXQgSVBf
UkVDVkRTVEFERFIgb24gc29ja2V0IGZvciBTQ1RQL1VEUC9JUHY0IChlcnJubyA9ICVkKS5cbiIs
IGVycm5vKTsKKyNlbmRpZgorCQkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNj
dHApKTsKKyNlbmRpZgorCQkJCVNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApID0gLTE7
CisJCQl9IGVsc2UgaWYgKHNldHNvY2tvcHQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0
cCksIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCAoY29uc3Qgdm9pZCAqKSZ0aW1lb3V0LCBzaXpl
b2YodGltZW91dCkpIDwgMCkgeworI2lmIGRlZmluZWQoX1dJTjMyKQorCQkJCVNDVFBEQkcoU0NU
UF9ERUJVR19VU1IsICJDYW4ndCBzZXQgdGltZW91dCBvbiBzb2NrZXQgZm9yIFNDVFAvVURQL0lQ
djQgKGVycm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQkJCWNsb3Nlc29ja2V0
KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApKTsKKyNlbHNlCisJCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCB0aW1lb3V0IG9uIHNvY2tldCBmb3IgU0NUUC9VRFAv
SVB2NCAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7CisJCQkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1
c2Vyc3BhY2VfdWRwc2N0cCkpOworI2VuZGlmCisJCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
dWRwc2N0cCkgPSAtMTsKKwkJCX0gZWxzZSB7CisJCQkJbWVtc2V0KCh2b2lkICopJmFkZHJfaXB2
NCwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworI2lmZGVmIEhBVkVfU0lOX0xFTgor
CQkJCWFkZHJfaXB2NC5zaW5fbGVuICAgICAgICAgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu
KTsKKyNlbmRpZgorCQkJCWFkZHJfaXB2NC5zaW5fZmFtaWx5ICAgICAgPSBBRl9JTkVUOworCQkJ
CWFkZHJfaXB2NC5zaW5fcG9ydCAgICAgICAgPSBodG9ucyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
dWRwX3R1bm5lbGluZ19wb3J0KSk7CisJCQkJYWRkcl9pcHY0LnNpbl9hZGRyLnNfYWRkciA9IGh0
b25sKElOQUREUl9BTlkpOworCQkJCWlmIChiaW5kKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Vk
cHNjdHApLCAoY29uc3Qgc3RydWN0IHNvY2thZGRyICopJmFkZHJfaXB2NCwgc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbikpIDwgMCkgeworI2lmIGRlZmluZWQoX1dJTjMyKQorCQkJCQlTQ1RQREJH
KFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3QgYmluZCBzb2NrZXQgZm9yIFNDVFAvVURQL0lQdjQgKGVy
cm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQkJCQljbG9zZXNvY2tldChTQ1RQ
X0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwKSk7CisjZWxzZQorCQkJCQlTQ1RQREJHKFNDVFBf
REVCVUdfVVNSLCAiQ2FuJ3QgYmluZCBzb2NrZXQgZm9yIFNDVFAvVURQL0lQdjQgKGVycm5vID0g
JWQpLlxuIiwgZXJybm8pOworCQkJCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBz
Y3RwKSk7CisjZW5kaWYKKwkJCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkgPSAt
MTsKKwkJCQl9IGVsc2UgeworCQkJCQlzZXRSZWNlaXZlQnVmZmVyU2l6ZShTQ1RQX0JBU0VfVkFS
KHVzZXJzcGFjZV91ZHBzY3RwKSwgU0JfUkFXKTsgLyogMTI4SyAqLworCQkJCQlzZXRTZW5kQnVm
ZmVyU2l6ZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwKSwgU0JfUkFXKTsgLyogMTI4
SyBJcyB0aGlzIHNldHRpbmcgbmV0LmluZXQucmF3Lm1heGRncmFtIHZhbHVlPyBTaG91bGQgaXQg
YmUgc2V0IHRvIDY0Sz8gKi8KKwkJCQl9CisJCQl9CisJCX0KKwl9CisjZW5kaWYKKyNpZiBkZWZp
bmVkKElORVQ2KQorCWlmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNikgPT0gLTEp
IHsKKwkJaWYgKChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNikgPSBzb2NrZXQoQUZf
SU5FVDYsIFNPQ0tfUkFXLCBJUFBST1RPX1NDVFApKSA9PSAtMSkgeworI2lmIGRlZmluZWQoX1dJ
TjMyKQorCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IGNyZWF0ZSBzb2NrZXQgZm9y
IFNDVFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisjZWxzZQor
CQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IGNyZWF0ZSBzb2NrZXQgZm9yIFNDVFAv
SVB2NiAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7CisjZW5kaWYKKwkJfSBlbHNlIHsKKwkJCS8q
IGNvbXBsZXRlIHNldHRpbmcgdXAgdGhlIHJhdyBTQ1RQIHNvY2tldCAqLworI2lmIGRlZmluZWQo
SVBWNl9SRUNWUEtUSU5GTykKKwkJCWlmIChzZXRzb2Nrb3B0KFNDVFBfQkFTRV9WQVIodXNlcnNw
YWNlX3Jhd3NjdHA2KSwgSVBQUk9UT19JUFY2LCBJUFY2X1JFQ1ZQS1RJTkZPLCAoY29uc3Qgdm9p
ZCAqKSZvbiwgc2l6ZW9mKG9uKSkgPCAwKSB7CisjaWYgZGVmaW5lZChfV0lOMzIpCisJCQkJU0NU
UERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUFY2X1JFQ1ZQS1RJTkZPIG9uIHNvY2tl
dCBmb3IgU0NUUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJ
CQljbG9zZXNvY2tldChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNikpOworI2Vsc2UK
KwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc2V0IElQVjZfUkVDVlBLVElORk8g
b24gc29ja2V0IGZvciBTQ1RQL0lQdjYgKGVycm5vID0gJWQpLlxuIiwgZXJybm8pOworCQkJCWNs
b3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSk7CisjZW5kaWYKKwkJCQlTQ1RQ
X0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNikgPSAtMTsKKwkJCX0gZWxzZSB7CisjZWxzZQor
CQkJaWYgKHNldHNvY2tvcHQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpLCBJUFBS
T1RPX0lQVjYsIElQVjZfUEtUSU5GTywoY29uc3Qgdm9pZCopJm9uLCBzaXplb2Yob24pKSA8IDAp
IHsKKyNpZiBkZWZpbmVkKF9XSU4zMikKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2Fu
J3Qgc2V0IElQVjZfUEtUSU5GTyBvbiBzb2NrZXQgZm9yIFNDVFAvSVB2NiAoZXJybm8gPSAlZCku
XG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCQkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1
c2Vyc3BhY2VfcmF3c2N0cDYpKTsKKyNlbHNlCisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwg
IkNhbid0IHNldCBJUFY2X1BLVElORk8gb24gc29ja2V0IGZvciBTQ1RQL0lQdjYgKGVycm5vID0g
JWQpLlxuIiwgZXJybm8pOworCQkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3Nj
dHA2KSk7CisjZW5kaWYKKwkJCQlTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNikgPSAt
MTsKKwkJCX0gZWxzZSB7CisjZW5kaWYKKwkJCQlpZiAoc2V0c29ja29wdChTQ1RQX0JBU0VfVkFS
KHVzZXJzcGFjZV9yYXdzY3RwNiksIElQUFJPVE9fSVBWNiwgSVBWNl9WNk9OTFksIChjb25zdCB2
b2lkKikmb24sIChzb2NrbGVuX3Qpc2l6ZW9mKG9uKSkgPCAwKSB7CisjaWYgZGVmaW5lZChfV0lO
MzIpCisJCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzZXQgSVBWNl9WNk9OTFkg
b24gc29ja2V0IGZvciBTQ1RQL0lQdjYgKGVycm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9y
KCkpOworI2Vsc2UKKwkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUFY2
X1Y2T05MWSBvbiBzb2NrZXQgZm9yIFNDVFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7
CisjZW5kaWYKKwkJCQl9CisJCQkJaWYgKHNldHNvY2tvcHQoU0NUUF9CQVNFX1ZBUih1c2Vyc3Bh
Y2VfcmF3c2N0cDYpLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgKGNvbnN0IHZvaWQgKikmdGlt
ZW91dCwgc2l6ZW9mKHRpbWVvdXQpKSA8IDApIHsKKyNpZiBkZWZpbmVkKF9XSU4zMikKKwkJCQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCB0aW1lb3V0IG9uIHNvY2tldCBmb3Ig
U0NUUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJCQkJY2xv
c2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpKTsKKyNlbHNlCisJCQkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzZXQgdGltZW91dCBvbiBzb2NrZXQgZm9y
IFNDVFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7CisJCQkJCWNsb3NlKFNDVFBfQkFT
RV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSk7CisjZW5kaWYKKwkJCQkJU0NUUF9CQVNFX1ZBUih1
c2Vyc3BhY2VfcmF3c2N0cDYpID0gLTE7CisJCQkJfSBlbHNlIHsKKwkJCQkJbWVtc2V0KCh2b2lk
ICopJmFkZHJfaXB2NiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyNpZmRlZiBI
QVZFX1NJTjZfTEVOCisJCQkJCWFkZHJfaXB2Ni5zaW42X2xlbiAgICAgICAgID0gc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisJCQkJCWFkZHJfaXB2Ni5zaW42X2ZhbWlseSAg
ICAgID0gQUZfSU5FVDY7CisJCQkJCWFkZHJfaXB2Ni5zaW42X3BvcnQgICAgICAgID0gaHRvbnMo
MCk7CisJCQkJCWFkZHJfaXB2Ni5zaW42X2FkZHIgICAgICAgID0gaW42YWRkcl9hbnk7CisJCQkJ
CWlmIChiaW5kKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSwgKGNvbnN0IHN0cnVj
dCBzb2NrYWRkciAqKSZhZGRyX2lwdjYsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgPCAw
KSB7CisjaWYgZGVmaW5lZChfV0lOMzIpCisJCQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAi
Q2FuJ3QgYmluZCBzb2NrZXQgZm9yIFNDVFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBXU0FHZXRM
YXN0RXJyb3IoKSk7CisJCQkJCQljbG9zZXNvY2tldChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9y
YXdzY3RwNikpOworI2Vsc2UKKwkJCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBi
aW5kIHNvY2tldCBmb3IgU0NUUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsKKwkJCQkJ
CWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSk7CisjZW5kaWYKKwkJCQkJ
CVNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSA9IC0xOworCQkJCQl9IGVsc2Ugewor
CQkJCQkJc2V0UmVjZWl2ZUJ1ZmZlclNpemUoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0
cDYpLCBTQl9SQVcpOyAvKiAxMjhLICovCisJCQkJCQlzZXRTZW5kQnVmZmVyU2l6ZShTQ1RQX0JB
U0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNiksIFNCX1JBVyk7IC8qIDEyOEsgSXMgdGhpcyBzZXR0
aW5nIG5ldC5pbmV0LnJhdy5tYXhkZ3JhbSB2YWx1ZT8gU2hvdWxkIGl0IGJlIHNldCB0byA2NEs/
ICovCisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisJaWYgKChTQ1RQX0JBU0VfVkFSKHVz
ZXJzcGFjZV91ZHBzY3RwNikgPT0gLTEpICYmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdWRwX3R1
bm5lbGluZ19wb3J0KSAhPSAwKSkgeworCQlpZiAoKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Vk
cHNjdHA2KSA9IHNvY2tldChBRl9JTkVUNiwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApKSA9PSAt
MSkgeworI2lmIGRlZmluZWQoX1dJTjMyKQorCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNh
bid0IGNyZWF0ZSBzb2NrZXQgZm9yIFNDVFAvVURQL0lQdjYgKGVycm5vID0gJWQpLlxuIiwgV1NB
R2V0TGFzdEVycm9yKCkpOworI2Vsc2UKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4n
dCBjcmVhdGUgc29ja2V0IGZvciBTQ1RQL1VEUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIGVycm5v
KTsKKyNlbmRpZgorCQl9CisjaWYgZGVmaW5lZChJUFY2X1JFQ1ZQS1RJTkZPKQorCQlpZiAoc2V0
c29ja29wdChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNiksIElQUFJPVE9fSVBWNiwg
SVBWNl9SRUNWUEtUSU5GTywgKGNvbnN0IHZvaWQgKikmb24sIChpbnQpc2l6ZW9mKGludCkpIDwg
MCkgeworI2lmIGRlZmluZWQoX1dJTjMyKQorCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNh
bid0IHNldCBJUFY2X1JFQ1ZQS1RJTkZPIG9uIHNvY2tldCBmb3IgU0NUUC9VRFAvSVB2NiAoZXJy
bm8gPSAlZCkuXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCQljbG9zZXNvY2tldChTQ1RQX0JB
U0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNikpOworI2Vsc2UKKwkJCVNDVFBEQkcoU0NUUF9ERUJV
R19VU1IsICJDYW4ndCBzZXQgSVBWNl9SRUNWUEtUSU5GTyBvbiBzb2NrZXQgZm9yIFNDVFAvVURQ
L0lQdjYgKGVycm5vID0gJWQpLlxuIiwgZXJybm8pOworCQkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1
c2Vyc3BhY2VfdWRwc2N0cDYpKTsKKyNlbmRpZgorCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
dWRwc2N0cDYpID0gLTE7CisJCX0gZWxzZSB7CisjZWxzZQorCQlpZiAoc2V0c29ja29wdChTQ1RQ
X0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNiksIElQUFJPVE9fSVBWNiwgSVBWNl9QS1RJTkZP
LCAoY29uc3Qgdm9pZCAqKSZvbiwgKGludClzaXplb2YoaW50KSkgPCAwKSB7CisjaWYgZGVmaW5l
ZChfV0lOMzIpCisJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc2V0IElQVjZfUEtU
SU5GTyBvbiBzb2NrZXQgZm9yIFNDVFAvVURQL0lQdjYgKGVycm5vID0gJWQpLlxuIiwgV1NBR2V0
TGFzdEVycm9yKCkpOworCQkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRw
c2N0cDYpKTsKKyNlbHNlCisJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc2V0IElQ
VjZfUEtUSU5GTyBvbiBzb2NrZXQgZm9yIFNDVFAvVURQL0lQdjYgKGVycm5vID0gJWQpLlxuIiwg
ZXJybm8pOworCQkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpKTsKKyNl
bmRpZgorCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpID0gLTE7CisJCX0gZWxz
ZSB7CisjZW5kaWYKKwkJCWlmIChzZXRzb2Nrb3B0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Vk
cHNjdHA2KSwgSVBQUk9UT19JUFY2LCBJUFY2X1Y2T05MWSwgKGNvbnN0IHZvaWQgKikmb24sIChz
b2NrbGVuX3Qpc2l6ZW9mKG9uKSkgPCAwKSB7CisjaWYgZGVmaW5lZChfV0lOMzIpCisJCQkJU0NU
UERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUFY2X1Y2T05MWSBvbiBzb2NrZXQgZm9y
IFNDVFAvVURQL0lQdjYgKGVycm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworI2Vs
c2UKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc2V0IElQVjZfVjZPTkxZIG9u
IHNvY2tldCBmb3IgU0NUUC9VRFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7CisjZW5k
aWYKKwkJCX0KKwkJCWlmIChzZXRzb2Nrb3B0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNj
dHA2KSwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIChjb25zdCB2b2lkICopJnRpbWVvdXQsIHNp
emVvZih0aW1lb3V0KSkgPCAwKSB7CisjaWYgZGVmaW5lZChfV0lOMzIpCisJCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCB0aW1lb3V0IG9uIHNvY2tldCBmb3IgU0NUUC9VRFAv
SVB2NiAoZXJybm8gPSAlZCkuXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCQkJY2xvc2Vzb2Nr
ZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpKTsKKyNlbHNlCisJCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCB0aW1lb3V0IG9uIHNvY2tldCBmb3IgU0NUUC9V
RFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7CisJCQkJY2xvc2UoU0NUUF9CQVNFX1ZB
Uih1c2Vyc3BhY2VfdWRwc2N0cDYpKTsKKyNlbmRpZgorCQkJCVNDVFBfQkFTRV9WQVIodXNlcnNw
YWNlX3VkcHNjdHA2KSA9IC0xOworCQkJfSBlbHNlIHsKKwkJCQltZW1zZXQoKHZvaWQgKikmYWRk
cl9pcHY2LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworI2lmZGVmIEhBVkVfU0lO
Nl9MRU4KKwkJCQlhZGRyX2lwdjYuc2luNl9sZW4gICAgICAgICA9IHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW42KTsKKyNlbmRpZgorCQkJCWFkZHJfaXB2Ni5zaW42X2ZhbWlseSAgICAgID0gQUZf
SU5FVDY7CisJCQkJYWRkcl9pcHY2LnNpbjZfcG9ydCAgICAgICAgPSBodG9ucyhTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfdWRwX3R1bm5lbGluZ19wb3J0KSk7CisJCQkJYWRkcl9pcHY2LnNpbjZfYWRk
ciAgICAgICAgPSBpbjZhZGRyX2FueTsKKwkJCQlpZiAoYmluZChTQ1RQX0JBU0VfVkFSKHVzZXJz
cGFjZV91ZHBzY3RwNiksIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcl9pcHY2LCBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luNikpIDwgMCkgeworI2lmIGRlZmluZWQoX1dJTjMyKQorCQkJ
CQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3QgYmluZCBzb2NrZXQgZm9yIFNDVFAvVURQ
L0lQdjYgKGVycm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQkJCQljbG9zZXNv
Y2tldChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNikpOworI2Vsc2UKKwkJCQkJU0NU
UERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IGJpbmQgc29ja2V0IGZvciBTQ1RQL1VEUC9JUHY2
IChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsKKwkJCQkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vy
c3BhY2VfdWRwc2N0cDYpKTsKKyNlbmRpZgorCQkJCQlTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91
ZHBzY3RwNikgPSAtMTsKKwkJCQl9IGVsc2UgeworCQkJCQlzZXRSZWNlaXZlQnVmZmVyU2l6ZShT
Q1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNiksIFNCX1JBVyk7IC8qIDEyOEsgKi8KKwkJ
CQkJc2V0U2VuZEJ1ZmZlclNpemUoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpLCBT
Ql9SQVcpOyAvKiAxMjhLIElzIHRoaXMgc2V0dGluZyBuZXQuaW5ldC5yYXcubWF4ZGdyYW0gdmFs
dWU/IFNob3VsZCBpdCBiZSBzZXQgdG8gNjRLPyAqLworCQkJCX0KKwkJCX0KKwkJfQorCX0KKyNl
bmRpZgorI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fRHJhZ29uRmx5X18pIHx8
IGRlZmluZWQoX19GcmVlQlNEX18pCisjaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2
KQorCWlmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yb3V0ZSkgIT0gLTEpIHsKKwkJaW50IHJj
OworCisJCWlmICgocmMgPSBzY3RwX3VzZXJzcGFjZV90aHJlYWRfY3JlYXRlKCZTQ1RQX0JBU0Vf
VkFSKHJlY3Z0aHJlYWRyb3V0ZSksICZyZWN2X2Z1bmN0aW9uX3JvdXRlKSkpIHsKKwkJCVNDVFBE
QkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzdGFydCByb3V0aW5nIHRocmVhZCAoJWQpLlxuIiwg
cmMpOworCQkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vfcm91dGUpKTsKKwkJCVNDVFBf
QkFTRV9WQVIodXNlcnNwYWNlX3JvdXRlKSA9IC0xOworCQl9CisJfQorI2VuZGlmCisjZW5kaWYK
KyNpZiBkZWZpbmVkKElORVQpCisJaWYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHAp
ICE9IC0xKSB7CisJCWludCByYzsKKworCQlpZiAoKHJjID0gc2N0cF91c2Vyc3BhY2VfdGhyZWFk
X2NyZWF0ZSgmU0NUUF9CQVNFX1ZBUihyZWN2dGhyZWFkcmF3KSwgJnJlY3ZfZnVuY3Rpb25fcmF3
KSkpIHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzdGFydCBTQ1RQL0lQdjQg
cmVjdiB0aHJlYWQgKCVkKS5cbiIsIHJjKTsKKyNpZiBkZWZpbmVkKF9XSU4zMikKKwkJCWNsb3Nl
c29ja2V0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApKTsKKyNlbHNlCisJCQljbG9z
ZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSk7CisjZW5kaWYKKwkJCVNDVFBfQkFT
RV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApID0gLTE7CisJCX0KKwl9CisJaWYgKFNDVFBfQkFTRV9W
QVIodXNlcnNwYWNlX3VkcHNjdHApICE9IC0xKSB7CisJCWludCByYzsKKworCQlpZiAoKHJjID0g
c2N0cF91c2Vyc3BhY2VfdGhyZWFkX2NyZWF0ZSgmU0NUUF9CQVNFX1ZBUihyZWN2dGhyZWFkdWRw
KSwgJnJlY3ZfZnVuY3Rpb25fdWRwKSkpIHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJD
YW4ndCBzdGFydCBTQ1RQL1VEUC9JUHY0IHJlY3YgdGhyZWFkICglZCkuXG4iLCByYyk7CisjaWYg
ZGVmaW5lZChfV0lOMzIpCisJCQljbG9zZXNvY2tldChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91
ZHBzY3RwKSk7CisjZWxzZQorCQkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0
cCkpOworI2VuZGlmCisJCQlTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwKSA9IC0xOwor
CQl9CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChJTkVUNikKKwlpZiAoU0NUUF9CQVNFX1ZBUih1
c2Vyc3BhY2VfcmF3c2N0cDYpICE9IC0xKSB7CisJCWludCByYzsKKworCQlpZiAoKHJjID0gc2N0
cF91c2Vyc3BhY2VfdGhyZWFkX2NyZWF0ZSgmU0NUUF9CQVNFX1ZBUihyZWN2dGhyZWFkcmF3Niks
ICZyZWN2X2Z1bmN0aW9uX3JhdzYpKSkgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNh
bid0IHN0YXJ0IFNDVFAvSVB2NiByZWN2IHRocmVhZCAoJWQpLlxuIiwgcmMpOworI2lmIGRlZmlu
ZWQoX1dJTjMyKQorCQkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0
cDYpKTsKKyNlbHNlCisJCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNikp
OworI2VuZGlmCisJCQlTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNikgPSAtMTsKKwkJ
fQorCX0KKwlpZiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpICE9IC0xKSB7CisJ
CWludCByYzsKKworCQlpZiAoKHJjID0gc2N0cF91c2Vyc3BhY2VfdGhyZWFkX2NyZWF0ZSgmU0NU
UF9CQVNFX1ZBUihyZWN2dGhyZWFkdWRwNiksICZyZWN2X2Z1bmN0aW9uX3VkcDYpKSkgeworCQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHN0YXJ0IFNDVFAvVURQL0lQdjYgcmVjdiB0
aHJlYWQgKCVkKS5cbiIsIHJjKTsKKyNpZiBkZWZpbmVkKF9XSU4zMikKKwkJCWNsb3Nlc29ja2V0
KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSk7CisjZWxzZQorCQkJY2xvc2UoU0NU
UF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpKTsKKyNlbmRpZgorCQkJU0NUUF9CQVNFX1ZB
Uih1c2Vyc3BhY2VfdWRwc2N0cDYpID0gLTE7CisJCX0KKwl9CisjZW5kaWYKK30KKwordm9pZAor
cmVjdl90aHJlYWRfZGVzdHJveSh2b2lkKQoreworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBk
ZWZpbmVkKF9fRHJhZ29uRmx5X18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pCisjaWYgZGVmaW5l
ZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQorCWlmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9y
b3V0ZSkgIT0gLTEpIHsKKwkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vfcm91dGUpKTsK
KwkJcHRocmVhZF9qb2luKFNDVFBfQkFTRV9WQVIocmVjdnRocmVhZHJvdXRlKSwgTlVMTCk7CisJ
fQorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKElORVQpCisJaWYgKFNDVFBfQkFTRV9WQVIo
dXNlcnNwYWNlX3Jhd3NjdHApICE9IC0xKSB7CisjaWYgZGVmaW5lZChfV0lOMzIpCisJCWNsb3Nl
c29ja2V0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApKTsKKwkJU0NUUF9CQVNFX1ZB
Uih1c2Vyc3BhY2VfcmF3c2N0cCkgPSAtMTsKKwkJV2FpdEZvclNpbmdsZU9iamVjdChTQ1RQX0JB
U0VfVkFSKHJlY3Z0aHJlYWRyYXcpLCBJTkZJTklURSk7CisJCUNsb3NlSGFuZGxlKFNDVFBfQkFT
RV9WQVIocmVjdnRocmVhZHJhdykpOworI2Vsc2UKKwkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vy
c3BhY2VfcmF3c2N0cCkpOworCQlTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSA9IC0x
OworCQlwdGhyZWFkX2pvaW4oU0NUUF9CQVNFX1ZBUihyZWN2dGhyZWFkcmF3KSwgTlVMTCk7Cisj
ZW5kaWYKKwl9CisJaWYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApICE9IC0xKSB7
CisjaWYgZGVmaW5lZChfV0lOMzIpCisJCWNsb3Nlc29ja2V0KFNDVFBfQkFTRV9WQVIodXNlcnNw
YWNlX3VkcHNjdHApKTsKKwkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkgPSAtMTsK
KwkJV2FpdEZvclNpbmdsZU9iamVjdChTQ1RQX0JBU0VfVkFSKHJlY3Z0aHJlYWR1ZHApLCBJTkZJ
TklURSk7CisJCUNsb3NlSGFuZGxlKFNDVFBfQkFTRV9WQVIocmVjdnRocmVhZHVkcCkpOworI2Vs
c2UKKwkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkpOworCQlTQ1RQX0JB
U0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwKSA9IC0xOworCQlwdGhyZWFkX2pvaW4oU0NUUF9CQVNF
X1ZBUihyZWN2dGhyZWFkdWRwKSwgTlVMTCk7CisjZW5kaWYKKwl9CisjZW5kaWYKKyNpZiBkZWZp
bmVkKElORVQ2KQorCWlmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNikgIT0gLTEp
IHsKKyNpZiBkZWZpbmVkKF9XSU4zMikKKwkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vy
c3BhY2VfcmF3c2N0cDYpKTsKKwkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpID0g
LTE7CisJCVdhaXRGb3JTaW5nbGVPYmplY3QoU0NUUF9CQVNFX1ZBUihyZWN2dGhyZWFkcmF3Niks
IElORklOSVRFKTsKKwkJQ2xvc2VIYW5kbGUoU0NUUF9CQVNFX1ZBUihyZWN2dGhyZWFkcmF3Nikp
OworI2Vsc2UKKwkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpKTsKKwkJ
U0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpID0gLTE7CisJCXB0aHJlYWRfam9pbihT
Q1RQX0JBU0VfVkFSKHJlY3Z0aHJlYWRyYXc2KSwgTlVMTCk7CisjZW5kaWYKKwl9CisJaWYgKFND
VFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSAhPSAtMSkgeworI2lmIGRlZmluZWQoX1dJ
TjMyKQorCQlTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNikgPSAtMTsKKwkJY2xvc2Vz
b2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpKTsKKwkJV2FpdEZvclNpbmds
ZU9iamVjdChTQ1RQX0JBU0VfVkFSKHJlY3Z0aHJlYWR1ZHA2KSwgSU5GSU5JVEUpOworCQlDbG9z
ZUhhbmRsZShTQ1RQX0JBU0VfVkFSKHJlY3Z0aHJlYWR1ZHA2KSk7CisjZWxzZQorCQljbG9zZShT
Q1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNikpOworCQlTQ1RQX0JBU0VfVkFSKHVzZXJz
cGFjZV91ZHBzY3RwNikgPSAtMTsKKwkJcHRocmVhZF9qb2luKFNDVFBfQkFTRV9WQVIocmVjdnRo
cmVhZHVkcDYpLCBOVUxMKTsKKyNlbmRpZgorCX0KKyNlbmRpZgorfQorI2Vsc2UKK2ludCBmb287
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9yZWN2X3RocmVh
ZC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX3JlY3ZfdGhyZWFkLmgKbmV3IGZpbGUgbW9k
ZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwLi42MWNkZjE3MjExMmMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfcmVjdl90aHJlYWQuaApAQCAtMCwwICsxLDM0
IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMiBNaWNoYWVsIFR1ZXhlbgorICogQ29weXJp
Z2h0IChjKSAyMDEyIElyZW5lIFJ1ZW5nZWxlcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5E
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI
T1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIF9VU0VSX1JFQ1ZfVEhSRUFEX0hfCisjZGVmaW5lCV9VU0VSX1JFQ1ZfVEhSRUFE
X0hfCisKK3ZvaWQgcmVjdl90aHJlYWRfaW5pdCh2b2lkKTsKK3ZvaWQgcmVjdl90aHJlYWRfZGVz
dHJveSh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3Vz
ZXJfcm91dGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9yb3V0ZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMC4uNGFiZjJlYWM5ODBmCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX3JvdXRlLmgKQEAgLTAsMCArMSwxMzAgQEAK
Ky8qLQorICogQ29weXJpZ2h0IChjKSAxOTgwLCAxOTg2LCAxOTkzCisgKglUaGUgUmVnZW50cyBv
ZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBu
YW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX1VTRVJfUk9V
VEVfSF8KKyNkZWZpbmUgX1VTRVJfUk9VVEVfSF8KKworLyoKKyAqIEtlcm5lbCByZXNpZGVudCBy
b3V0aW5nIHRhYmxlcy4KKyAqCisgKiBUaGUgcm91dGluZyB0YWJsZXMgYXJlIGluaXRpYWxpemVk
IHdoZW4gaW50ZXJmYWNlIGFkZHJlc3NlcworICogYXJlIHNldCBieSBtYWtpbmcgZW50cmllcyBm
b3IgYWxsIGRpcmVjdGx5IGNvbm5lY3RlZCBpbnRlcmZhY2VzLgorICovCisKKy8qCisgKiBBIHJv
dXRlIGNvbnNpc3RzIG9mIGEgZGVzdGluYXRpb24gYWRkcmVzcyBhbmQgYSByZWZlcmVuY2UKKyAq
IHRvIGEgcm91dGluZyBlbnRyeS4gIFRoZXNlIGFyZSBvZnRlbiBoZWxkIGJ5IHByb3RvY29scwor
ICogaW4gdGhlaXIgY29udHJvbCBibG9ja3MsIGUuZy4gaW5wY2IuCisgKi8KKworc3RydWN0IHNj
dHBfcm91dGUgeworCXN0cnVjdAlzY3RwX3J0ZW50cnkgKnJvX3J0OworCXN0cnVjdAlzb2NrYWRk
ciByb19kc3Q7Cit9OworCisvKgorICogVGhlc2UgbnVtYmVycyBhcmUgdXNlZCBieSByZWxpYWJs
ZSBwcm90b2NvbHMgZm9yIGRldGVybWluaW5nCisgKiByZXRyYW5zbWlzc2lvbiBiZWhhdmlvciBh
bmQgYXJlIGluY2x1ZGVkIGluIHRoZSByb3V0aW5nIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IHNj
dHBfcnRfbWV0cmljc19saXRlIHsKKwl1aW50MzJfdCBybXhfbXR1OwkvKiBNVFUgZm9yIHRoaXMg
cGF0aCAqLworI2lmIDAKKwl1X2xvbmcJcm14X2V4cGlyZTsJLyogbGlmZXRpbWUgZm9yIHJvdXRl
LCBlLmcuIHJlZGlyZWN0ICovCisJdV9sb25nCXJteF9wa3NlbnQ7CS8qIHBhY2tldHMgc2VudCB1
c2luZyB0aGlzIHJvdXRlICovCisjZW5kaWYKK307CisKKy8qCisgKiBXZSBkaXN0aW5ndWlzaCBi
ZXR3ZWVuIHJvdXRlcyB0byBob3N0cyBhbmQgcm91dGVzIHRvIG5ldHdvcmtzLAorICogcHJlZmVy
cmluZyB0aGUgZm9ybWVyIGlmIGF2YWlsYWJsZS4gIEZvciBlYWNoIHJvdXRlIHdlIGluZmVyCisg
KiB0aGUgaW50ZXJmYWNlIHRvIHVzZSBmcm9tIHRoZSBnYXRld2F5IGFkZHJlc3Mgc3VwcGxpZWQg
d2hlbgorICogdGhlIHJvdXRlIHdhcyBlbnRlcmVkLiAgUm91dGVzIHRoYXQgZm9yd2FyZCBwYWNr
ZXRzIHRocm91Z2gKKyAqIGdhdGV3YXlzIGFyZSBtYXJrZWQgc28gdGhhdCB0aGUgb3V0cHV0IHJv
dXRpbmVzIGtub3cgdG8gYWRkcmVzcyB0aGUKKyAqIGdhdGV3YXkgcmF0aGVyIHRoYW4gdGhlIHVs
dGltYXRlIGRlc3RpbmF0aW9uLgorICovCitzdHJ1Y3Qgc2N0cF9ydGVudHJ5IHsKKyNpZiAwCisJ
c3RydWN0CXJhZGl4X25vZGUgcnRfbm9kZXNbMl07CS8qIHRyZWUgZ2x1ZSwgYW5kIG90aGVyIHZh
bHVlcyAqLworCS8qCisJICogWFhYIHN0cnVjdCBydGVudHJ5IG11c3QgYmVnaW4gd2l0aCBhIHN0
cnVjdCByYWRpeF9ub2RlIChvciB0d28hKQorCSAqIGJlY2F1c2UgdGhlIGNvZGUgZG9lcyBzb21l
IGNhc3RzIG9mIGEgJ3N0cnVjdCByYWRpeF9ub2RlIConCisJICogdG8gYSAnc3RydWN0IHJ0ZW50
cnkgKicKKwkgKi8KKyNkZWZpbmUJcnRfa2V5KHIpCSgqKChzdHJ1Y3Qgc29ja2FkZHIgKiopKCYo
ciktPnJ0X25vZGVzLT5ybl9rZXkpKSkKKyNkZWZpbmUJcnRfbWFzayhyKQkoKigoc3RydWN0IHNv
Y2thZGRyICoqKSgmKHIpLT5ydF9ub2Rlcy0+cm5fbWFzaykpKQorCXN0cnVjdAlzb2NrYWRkciAq
cnRfZ2F0ZXdheTsJLyogdmFsdWUgKi8KKwl1X2xvbmcJcnRfZmxhZ3M7CQkvKiB1cC9kb3duPywg
aG9zdC9uZXQgKi8KKyNlbmRpZgorCXN0cnVjdAlpZm5ldCAqcnRfaWZwOwkJLyogdGhlIGFuc3dl
cjogaW50ZXJmYWNlIHRvIHVzZSAqLworCXN0cnVjdAlpZmFkZHIgKnJ0X2lmYTsJCS8qIHRoZSBh
bnN3ZXI6IGludGVyZmFjZSBhZGRyZXNzIHRvIHVzZSAqLworCXN0cnVjdAlzY3RwX3J0X21ldHJp
Y3NfbGl0ZSBydF9ybXg7CS8qIG1ldHJpY3MgdXNlZCBieSByeCdpbmcgcHJvdG9jb2xzICovCisJ
bG9uZwlydF9yZWZjbnQ7CQkvKiAjIGhlbGQgcmVmZXJlbmNlcyAqLworI2lmIDAKKwlzdHJ1Y3QJ
c29ja2FkZHIgKnJ0X2dlbm1hc2s7CS8qIGZvciBnZW5lcmF0aW9uIG9mIGNsb25lZCByb3V0ZXMg
Ki8KKwljYWRkcl90CXJ0X2xsaW5mbzsJCS8qIHBvaW50ZXIgdG8gbGluayBsZXZlbCBpbmZvIGNh
Y2hlICovCisJc3RydWN0CXJ0ZW50cnkgKnJ0X2d3cm91dGU7CS8qIGltcGxpZWQgZW50cnkgZm9y
IGdhdGV3YXllZCByb3V0ZXMgKi8KKwlzdHJ1Y3QJcnRlbnRyeSAqcnRfcGFyZW50OyAJLyogY2xv
bmluZyBwYXJlbnQgb2YgdGhpcyByb3V0ZSAqLworI2VuZGlmCisJc3RydWN0CW10eCBydF9tdHg7
CQkvKiBtdXRleCBmb3Igcm91dGluZyBlbnRyeSAqLworfTsKKworI2RlZmluZQlSVF9MT0NLX0lO
SVQoX3J0KQltdHhfaW5pdCgmKF9ydCktPnJ0X210eCwgInJ0ZW50cnkiLCBOVUxMLCBNVFhfREVG
IHwgTVRYX0RVUE9LKQorI2RlZmluZQlSVF9MT0NLKF9ydCkJCW10eF9sb2NrKCYoX3J0KS0+cnRf
bXR4KQorI2RlZmluZQlSVF9VTkxPQ0soX3J0KQkJbXR4X3VubG9jaygmKF9ydCktPnJ0X210eCkK
KyNkZWZpbmUJUlRfTE9DS19ERVNUUk9ZKF9ydCkJbXR4X2Rlc3Ryb3koJihfcnQpLT5ydF9tdHgp
CisjZGVmaW5lCVJUX0xPQ0tfQVNTRVJUKF9ydCkJbXR4X2Fzc2VydCgmKF9ydCktPnJ0X210eCwg
TUFfT1dORUQpCisKKyNkZWZpbmUJUlRfQUREUkVGKF9ydCkJZG8gewkJCQkJXAorCVJUX0xPQ0tf
QVNTRVJUKF9ydCk7CQkJCQlcCisJS0FTU0VSVCgoX3J0KS0+cnRfcmVmY250ID49IDAsCQkJCVwK
KwkJKCJuZWdhdGl2ZSByZWZjbnQgJWxkIiwgKF9ydCktPnJ0X3JlZmNudCkpOwlcCisJKF9ydCkt
PnJ0X3JlZmNudCsrOwkJCQkJXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUJUlRfUkVNUkVGKF9ydCkJ
ZG8gewkJCQkJXAorCVJUX0xPQ0tfQVNTRVJUKF9ydCk7CQkJCQlcCisJS0FTU0VSVCgoX3J0KS0+
cnRfcmVmY250ID4gMCwJCQkJXAorCQkoImJvZ3VzIHJlZmNudCAlbGQiLCAoX3J0KS0+cnRfcmVm
Y250KSk7CVwKKwkoX3J0KS0+cnRfcmVmY250LS07CQkJCQlcCit9IHdoaWxlICgwKQorI2RlZmlu
ZQlSVEZSRUVfTE9DS0VEKF9ydCkgZG8gewkJCQkJXAorCQlpZiAoKF9ydCktPnJ0X3JlZmNudCA8
PSAxKSB7CQkJXAorCQkJcnRmcmVlKF9ydCk7CQkJCVwKKwkJfSBlbHNlIHsJCQkJCVwKKwkJCVJU
X1JFTVJFRihfcnQpOwkJCQlcCisJCQlSVF9VTkxPQ0soX3J0KTsJCQkJXAorCQl9CQkJCQkJXAor
CQkvKiBndWFyZCBhZ2FpbnN0IGludmFsaWQgcmVmcyAqLwkJXAorCQlfcnQgPSBOVUxMOwkJCQkJ
XAorCX0gd2hpbGUgKDApCisjZGVmaW5lCVJURlJFRShfcnQpIGRvIHsJCQkJCVwKKwkJUlRfTE9D
SyhfcnQpOwkJCQkJXAorCQlSVEZSRUVfTE9DS0VEKF9ydCk7CQkJCVwKK30gd2hpbGUgKDApCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9zb2NrZXQuYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3VzcnNjdHBsaWIvdXNlcl9zb2NrZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRl
eCAwMDAwMDAwMDAwMDAuLjUxM2E1YTlhNDA1MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3VzcnNjdHBsaWIvdXNlcl9zb2NrZXQuYwpAQCAtMCwwICsxLDM1OTIgQEAKKy8qLQorICogQ29w
eXJpZ2h0IChjKSAxOTgyLCAxOTg2LCAxOTg4LCAxOTkwLCAxOTkzCisgKiAgICAgIFRoZSBSZWdl
bnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBDb3B5cmlnaHQgKGMpIDIw
MDQgVGhlIEZyZWVCU0QgRm91bmRhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDggUm9i
ZXJ0IE4uIE0uIFdhdHNvbgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgQnJhZCBQZW5vZmYK
KyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIEh1bWFpcmEgS2FtYWwKKyAqIENvcHlyaWdodCAo
YykgMjAxMS0yMDEyIElyZW5lIFJ1ZW5nZWxlcgorICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTIg
TWljaGFlbCBUdWV4ZW4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICog
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwor
ICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRl
IDxuZXRpbmV0L3NjdHBfb3MuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfcGNiLmg+CisjaW5j
bHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF92YXIuaD4K
KyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfc3lzY3RsLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3Rw
X2lucHV0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BlZWxvZmYuaD4KKyNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfY2FsbG91dC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9jcmMzMi5oPgor
I2lmZGVmIElORVQ2CisjaW5jbHVkZSA8bmV0aW5ldDYvc2N0cDZfdmFyLmg+CisjZW5kaWYKKyNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisj
aWYgZGVmaW5lZChfX2xpbnV4X18pCisjZGVmaW5lIF9fRkFWT1JfQlNEICAgIC8qIChvbiBVYnVu
dHUgYXQgbGVhc3QpIGVuYWJsZXMgVURQIGhlYWRlciBmaWVsZCBuYW1lcyBsaWtlIEJTRCBpbiBS
RkMgNzY4ICovCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfV0lOMzIpCisjaWYgZGVmaW5lZCBJTkVU
IHx8IGRlZmluZWQgSU5FVDYKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgorI2VuZGlmCisjaW5j
bHVkZSA8YXJwYS9pbmV0Lmg+CisjZWxzZQorI2luY2x1ZGUgPHVzZXJfc29ja2V0dmFyLmg+Cisj
ZW5kaWYKK3VzZXJsYW5kX211dGV4X3QgYWNjZXB0X210eDsKK3VzZXJsYW5kX2NvbmRfdCBhY2Nl
cHRfY29uZDsKKyNpZmRlZiBfV0lOMzIKKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3lz
L3RpbWViLmg+CisjZW5kaWYKKworTUFMTE9DX0RFRklORShNX1BDQiwgInNjdHBfcGNiIiwgInNj
dHAgcGNiIik7CitNQUxMT0NfREVGSU5FKE1fU09OQU1FLCAic2N0cF9zb25hbWUiLCAic2N0cCBz
b25hbWUiKTsKKyNkZWZpbmUgTUFYTEVOX01CVUZfQ0hBSU4gIDMyCisKKy8qIFByb3RvdHlwZXMg
Ki8KK2V4dGVybiBpbnQgc2N0cF9zb3NlbmQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2Nr
YWRkciAqYWRkciwgc3RydWN0IHVpbyAqdWlvLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3QgbWJ1ZiAqdG9wLCBzdHJ1Y3QgbWJ1ZiAqY29udHJvbCwgaW50IGZsYWdzLAorICAgICAgICAg
ICAgICAgICAgICAgICAvKiBwcm9jIGlzIGEgZHVtbXkgaW4gX19Vc2Vyc3BhY2VfXyBhbmQgd2ls
bCBub3QgYmUgcGFzc2VkIHRvIHNjdHBfbG93ZXJfc29zZW5kICovCisgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCBwcm9jICpwKTsKKworZXh0ZXJuIGludCBzY3RwX2F0dGFjaChzdHJ1Y3Qg
c29ja2V0ICpzbywgaW50IHByb3RvLCB1aW50MzJfdCB2cmZfaWQpOworZXh0ZXJuIGludCBzY3Rw
Y29ubl9hdHRhY2goc3RydWN0IHNvY2tldCAqc28sIGludCBwcm90bywgdWludDMyX3QgdnJmX2lk
KTsKKworc3RhdGljIHZvaWQgaW5pdF9zeW5jKHZvaWQpIHsKKyNpZiBkZWZpbmVkKF9XSU4zMikK
KyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisJV1NBREFUQSB3c2FEYXRhOwor
CisJaWYgKFdTQVN0YXJ0dXAoTUFLRVdPUkQoMiwyKSwgJndzYURhdGEpICE9IDApIHsKKwkJU0NU
UF9QUklOVEYoIldTQVN0YXJ0dXAgZmFpbGVkXG4iKTsKKwkJZXhpdCAoLTEpOworCX0KKyNlbmRp
ZgorCUluaXRpYWxpemVDb25kaXRpb25WYXJpYWJsZSgmYWNjZXB0X2NvbmQpOworCUluaXRpYWxp
emVDcml0aWNhbFNlY3Rpb24oJmFjY2VwdF9tdHgpOworI2Vsc2UKKwlwdGhyZWFkX211dGV4YXR0
cl90IG11dGV4X2F0dHI7CisKKwlwdGhyZWFkX211dGV4YXR0cl9pbml0KCZtdXRleF9hdHRyKTsK
KyNpZmRlZiBJTlZBUklBTlRTCisJcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSgmbXV0ZXhfYXR0
ciwgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLKTsKKyNlbmRpZgorCXB0aHJlYWRfbXV0ZXhfaW5p
dCgmYWNjZXB0X210eCwgJm11dGV4X2F0dHIpOworCXB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3ko
Jm11dGV4X2F0dHIpOworCXB0aHJlYWRfY29uZF9pbml0KCZhY2NlcHRfY29uZCwgTlVMTCk7Cisj
ZW5kaWYKK30KKwordm9pZAordXNyc2N0cF9pbml0KHVpbnQxNl90IHBvcnQsCisgICAgICAgICAg
ICAgaW50ICgqY29ubl9vdXRwdXQpKHZvaWQgKmFkZHIsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxl
bmd0aCwgdWludDhfdCB0b3MsIHVpbnQ4X3Qgc2V0X2RmKSwKKyAgICAgICAgICAgICB2b2lkICgq
ZGVidWdfcHJpbnRmKShjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpCit7CisJaW5pdF9zeW5jKCk7
CisJc2N0cF9pbml0KHBvcnQsIGNvbm5fb3V0cHV0LCBkZWJ1Z19wcmludGYsIDEpOworfQorCisK
K3ZvaWQKK3VzcnNjdHBfaW5pdF9ub3RocmVhZHModWludDE2X3QgcG9ydCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgaW50ICgqY29ubl9vdXRwdXQpKHZvaWQgKmFkZHIsIHZvaWQgKmJ1ZmZlciwg
c2l6ZV90IGxlbmd0aCwgdWludDhfdCB0b3MsIHVpbnQ4X3Qgc2V0X2RmKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCAoKmRlYnVnX3ByaW50ZikoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4p
KQoreworCWluaXRfc3luYygpOworCXNjdHBfaW5pdChwb3J0LCBjb25uX291dHB1dCwgZGVidWdf
cHJpbnRmLCAwKTsKK30KKworCisvKiBUYWtlbiBmcm9tICB1c3Ivc3JjL3N5cy9rZXJuL3VpcGNf
c29ja2J1Zi5jIGFuZCBtb2RpZmllZCBmb3IgX19Vc2Vyc3BhY2VfXyovCisvKgorICogU29jYW50
c2VuZG1vcmUgaW5kaWNhdGVzIHRoYXQgbm8gbW9yZSBkYXRhIHdpbGwgYmUgc2VudCBvbiB0aGUg
c29ja2V0OyBpdAorICogd291bGQgbm9ybWFsbHkgYmUgYXBwbGllZCB0byBhIHNvY2tldCB3aGVu
IHRoZSB1c2VyIGluZm9ybXMgdGhlIHN5c3RlbQorICogdGhhdCBubyBtb3JlIGRhdGEgaXMgdG8g
YmUgc2VudCwgYnkgdGhlIHByb3RvY29sIGNvZGUgKGluIGNhc2UKKyAqIFBSVV9TSFVURE9XTiku
ICBTb2NhbnRyY3Ztb3JlIGluZGljYXRlcyB0aGF0IG5vIG1vcmUgZGF0YSB3aWxsIGJlCisgKiBy
ZWNlaXZlZCwgYW5kIHdpbGwgbm9ybWFsbHkgYmUgYXBwbGllZCB0byB0aGUgc29ja2V0IGJ5IGEg
cHJvdG9jb2wgd2hlbiBpdAorICogZGV0ZWN0cyB0aGF0IHRoZSBwZWVyIHdpbGwgc2VuZCBubyBt
b3JlIGRhdGEuICBEYXRhIHF1ZXVlZCBmb3IgcmVhZGluZyBpbgorICogdGhlIHNvY2tldCBtYXkg
eWV0IGJlIHJlYWQuCisgKi8KKwordm9pZCBzb2NhbnRyY3Ztb3JlX2xvY2tlZChzdHJ1Y3Qgc29j
a2V0ICpzbykKK3sKKwlTT0NLQlVGX0xPQ0tfQVNTRVJUKCZzby0+c29fcmN2KTsKKwlzby0+c29f
cmN2LnNiX3N0YXRlIHw9IFNCU19DQU5UUkNWTU9SRTsKKwlzb3J3YWtldXBfbG9ja2VkKHNvKTsK
K30KKwordm9pZCBzb2NhbnRyY3Ztb3JlKHN0cnVjdCBzb2NrZXQgKnNvKQoreworCVNPQ0tCVUZf
TE9DSygmc28tPnNvX3Jjdik7CisJc29jYW50cmN2bW9yZV9sb2NrZWQoc28pOworfQorCit2b2lk
Citzb2NhbnRzZW5kbW9yZV9sb2NrZWQoc3RydWN0IHNvY2tldCAqc28pCit7CisJU09DS0JVRl9M
T0NLX0FTU0VSVCgmc28tPnNvX3NuZCk7CisJc28tPnNvX3NuZC5zYl9zdGF0ZSB8PSBTQlNfQ0FO
VFNFTkRNT1JFOworCXNvd3dha2V1cF9sb2NrZWQoc28pOworfQorCit2b2lkCitzb2NhbnRzZW5k
bW9yZShzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlTT0NLQlVGX0xPQ0soJnNvLT5zb19zbmQpOwor
CXNvY2FudHNlbmRtb3JlX2xvY2tlZChzbyk7Cit9CisKKworCisvKiBUYWtlbiBmcm9tICB1c3Iv
c3JjL3N5cy9rZXJuL3VpcGNfc29ja2J1Zi5jIGFuZCBjYWxsZWQgd2l0aGluIHNjdHBfbG93ZXJf
c29zZW5kLgorICovCitpbnQKK3Nid2FpdChzdHJ1Y3Qgc29ja2J1ZiAqc2IpCit7CisJU09DS0JV
Rl9MT0NLX0FTU0VSVChzYik7CisKKwlzYi0+c2JfZmxhZ3MgfD0gU0JfV0FJVDsKKyNpZiBkZWZp
bmVkKF9XSU4zMikKKwlpZiAoU2xlZXBDb25kaXRpb25WYXJpYWJsZUNTKCYoc2ItPnNiX2NvbmQp
LCAmKHNiLT5zYl9tdHgpLCBJTkZJTklURSkpCisJCXJldHVybiAoMCk7CisJZWxzZQorCQlyZXR1
cm4gKC0xKTsKKyNlbHNlCisJcmV0dXJuIChwdGhyZWFkX2NvbmRfd2FpdCgmKHNiLT5zYl9jb25k
KSwgJihzYi0+c2JfbXR4KSkpOworI2VuZGlmCit9CisKKworCisKKy8qIFRha2VuIGZyb20gIC9z
cmMvc3lzL2tlcm4vdWlwY19zb2NrZXQuYworICogYW5kIG1vZGlmaWVkIGZvciBfX1VzZXJzcGFj
ZV9fCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc29ja2V0ICoKK3NvYWxsb2Modm9pZCkKK3sKKwlzdHJ1
Y3Qgc29ja2V0ICpzbzsKKworCS8qCisJICogc29hbGxvYygpIHNldHMgb2Ygc29ja2V0IGxheWVy
IHN0YXRlIGZvciBhIHNvY2tldCwKKwkgKiBjYWxsZWQgb25seSBieSBzb2NyZWF0ZSgpIGFuZCBz
b25ld2Nvbm4oKS4KKwkgKgorCSAqIHNvZGVhbGxvYygpIHRlYXJzIGRvd24gc29ja2V0IGxheWVy
IHN0YXRlIGZvciBhIHNvY2tldCwKKwkgKiBjYWxsZWQgb25seSBieSBzb2ZyZWUoKSBhbmQgc29u
ZXdjb25uKCkuCisJICogX19Vc2Vyc3BhY2VfXyBUT0RPIDogTWFrZSBzdXJlIHNvIGlzIHByb3Bl
cmx5IGRlYWxsb2NhdGVkCisJICogd2hlbiB0ZWFyaW5nIGRvd24gdGhlIGNvbm5lY3Rpb24uCisJ
ICovCisKKwlzbyA9IChzdHJ1Y3Qgc29ja2V0ICopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc29ja2V0
KSk7CisKKwlpZiAoc28gPT0gTlVMTCkgeworCQlyZXR1cm4gKE5VTEwpOworCX0KKwltZW1zZXQo
c28sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2V0KSk7CisKKwkvKiBfX1VzZXJzcGFjZV9fIEluaXRp
YWxpemluZyB0aGUgc29ja2V0IGxvY2tzIGhlcmUgKi8KKwlTT0NLQlVGX0xPQ0tfSU5JVCgmc28t
PnNvX3NuZCwgInNvX3NuZCIpOworCVNPQ0tCVUZfTE9DS19JTklUKCZzby0+c29fcmN2LCAic29f
cmN2Iik7CisJU09DS0JVRl9DT05EX0lOSVQoJnNvLT5zb19zbmQpOworCVNPQ0tCVUZfQ09ORF9J
TklUKCZzby0+c29fcmN2KTsKKwlTT0NLX0NPTkRfSU5JVChzbyk7IC8qIHRpbWVvX2NvbmQgKi8K
KworCS8qIF9fVXNlcnNwYWNlX18gQW55IHJlZiBjb3VudGluZyByZXF1aXJlZCBoZXJlPyBXaWxs
IHdlIGhhdmUgYW55IHVzZSBmb3IgYWlvam9icT8KKwkgICBXaGF0IGFib3V0IGdlbmNudCBhbmQg
bnVtb3BlbnNvY2tldHM/Ki8KKwlUQUlMUV9JTklUKCZzby0+c29fYWlvam9icSk7CisJcmV0dXJu
IChzbyk7Cit9CisKK3N0YXRpYyB2b2lkCitzb2RlYWxsb2Moc3RydWN0IHNvY2tldCAqc28pCit7
CisKKwlLQVNTRVJUKHNvLT5zb19jb3VudCA9PSAwLCAoInNvZGVhbGxvYygpOiBzb19jb3VudCAl
ZCIsIHNvLT5zb19jb3VudCkpOworCUtBU1NFUlQoc28tPnNvX3BjYiA9PSBOVUxMLCAoInNvZGVh
bGxvYygpOiBzb19wY2IgIT0gTlVMTCIpKTsKKworCVNPQ0tCVUZfQ09ORF9ERVNUUk9ZKCZzby0+
c29fc25kKTsKKwlTT0NLQlVGX0NPTkRfREVTVFJPWSgmc28tPnNvX3Jjdik7CisKKwlTT0NLX0NP
TkRfREVTVFJPWShzbyk7CisKKwlTT0NLQlVGX0xPQ0tfREVTVFJPWSgmc28tPnNvX3NuZCk7CisJ
U09DS0JVRl9MT0NLX0RFU1RST1koJnNvLT5zb19yY3YpOworCisJZnJlZShzbyk7Cit9CisKKy8q
IFRha2VuIGZyb20gIC9zcmMvc3lzL2tlcm4vdWlwY19zb2NrZXQuYworICogYW5kIG1vZGlmaWVk
IGZvciBfX1VzZXJzcGFjZV9fCisgKi8KK3ZvaWQKK3NvZnJlZShzdHJ1Y3Qgc29ja2V0ICpzbykK
K3sKKwlzdHJ1Y3Qgc29ja2V0ICpoZWFkOworCisJQUNDRVBUX0xPQ0tfQVNTRVJUKCk7CisJU09D
S19MT0NLX0FTU0VSVChzbyk7CisJLyogU1NfTk9GRFJFRiB1bnNldCBpbiBhY2NlcHQgY2FsbC4g
IHRoaXMgY29uZGl0aW9uIHNlZW1zIGlycmVsZXZlbnQKKwkgKiAgZm9yIF9fVXNlcnNwYWNlX18u
Li4KKwkgKi8KKwlpZiAoc28tPnNvX2NvdW50ICE9IDAgfHwKKwkgICAgKHNvLT5zb19zdGF0ZSAm
IFNTX1BST1RPUkVGKSB8fCAoc28tPnNvX3FzdGF0ZSAmIFNRX0NPTVApKSB7CisJCVNPQ0tfVU5M
T0NLKHNvKTsKKwkJQUNDRVBUX1VOTE9DSygpOworCQlyZXR1cm47CisJfQorCWhlYWQgPSBzby0+
c29faGVhZDsKKwlpZiAoaGVhZCAhPSBOVUxMKSB7CisJCUtBU1NFUlQoKHNvLT5zb19xc3RhdGUg
JiBTUV9DT01QKSAhPSAwIHx8CisJCSAgICAoc28tPnNvX3FzdGF0ZSAmIFNRX0lOQ09NUCkgIT0g
MCwKKwkJICAgICgic29mcmVlOiBzb19oZWFkICE9IE5VTEwsIGJ1dCBuZWl0aGVyIFNRX0NPTVAg
bm9yICIKKwkJICAgICJTUV9JTkNPTVAiKSk7CisJCUtBU1NFUlQoKHNvLT5zb19xc3RhdGUgJiBT
UV9DT01QKSA9PSAwIHx8CisJCSAgICAoc28tPnNvX3FzdGF0ZSAmIFNRX0lOQ09NUCkgPT0gMCwK
KwkJICAgICgic29mcmVlOiBzby0+c29fcXN0YXRlIGlzIFNRX0NPTVAgYW5kIGFsc28gU1FfSU5D
T01QIikpOworCQlUQUlMUV9SRU1PVkUoJmhlYWQtPnNvX2luY29tcCwgc28sIHNvX2xpc3QpOwor
CQloZWFkLT5zb19pbmNxbGVuLS07CisJCXNvLT5zb19xc3RhdGUgJj0gflNRX0lOQ09NUDsKKwkJ
c28tPnNvX2hlYWQgPSBOVUxMOworCX0KKwlLQVNTRVJUKChzby0+c29fcXN0YXRlICYgU1FfQ09N
UCkgPT0gMCAmJgorCSAgICAoc28tPnNvX3FzdGF0ZSAmIFNRX0lOQ09NUCkgPT0gMCwKKwkgICAg
KCJzb2ZyZWU6IHNvX2hlYWQgPT0gTlVMTCwgYnV0IHN0aWxsIFNRX0NPTVAoJWQpIG9yIFNRX0lO
Q09NUCglZCkiLAorCSAgICBzby0+c29fcXN0YXRlICYgU1FfQ09NUCwgc28tPnNvX3FzdGF0ZSAm
IFNRX0lOQ09NUCkpOworCWlmIChzby0+c29fb3B0aW9ucyAmIFNDVFBfU09fQUNDRVBUQ09OTikg
eworCQlLQVNTRVJUKChUQUlMUV9FTVBUWSgmc28tPnNvX2NvbXApKSwgKCJzb2ZyZWU6IHNvX2Nv
bXAgcG9wdWxhdGVkIikpOworCQlLQVNTRVJUKChUQUlMUV9FTVBUWSgmc28tPnNvX2luY29tcCkp
LCAoInNvZnJlZTogc29fY29tcCBwb3B1bGF0ZWQiKSk7CisJfQorCVNPQ0tfVU5MT0NLKHNvKTsK
KwlBQ0NFUFRfVU5MT0NLKCk7CisJc2N0cF9jbG9zZShzbyk7IC8qIHdhcy4uLiAgICBzY3RwX2Rl
dGFjaChzbyk7ICovCisJLyoKKwkgKiBGcm9tIHRoaXMgcG9pbnQgb24sIHdlIGFzc3VtZSB0aGF0
IG5vIG90aGVyIHJlZmVyZW5jZXMgdG8gdGhpcworCSAqIHNvY2tldCBleGlzdCBhbnl3aGVyZSBl
bHNlIGluIHRoZSBzdGFjay4gIFRoZXJlZm9yZSwgbm8gbG9ja3MgbmVlZAorCSAqIHRvIGJlIGFj
cXVpcmVkIG9yIGhlbGQuCisJICoKKwkgKiBXZSB1c2VkIHRvIGRvIGEgbG90IG9mIHNvY2tldCBi
dWZmZXIgYW5kIHNvY2tldCBsb2NraW5nIGhlcmUsIGFzCisJICogd2VsbCBhcyBpbnZva2Ugc29y
Zmx1c2goKSBhbmQgcGVyZm9ybSB3YWtldXBzLiAgVGhlIGRpcmVjdCBjYWxsIHRvCisJICogZG9t
X2Rpc3Bvc2UoKSBhbmQgc2JyZWxlYXNlX2ludGVybmFsKCkgYXJlIGFuIGlubGluaW5nIG9mIHdo
YXQgd2FzCisJICogbmVjZXNzYXJ5IGZyb20gc29yZmx1c2goKS4KKwkgKgorCSAqIE5vdGljZSB0
aGF0IHRoZSBzb2NrZXQgYnVmZmVyIGFuZCBrcXVldWUgc3RhdGUgYXJlIHRvcm4gZG93bgorCSAq
IGJlZm9yZSBjYWxsaW5nIHBydV9kZXRhY2guICBUaGlzIG1lYW5zIHRoYXQgcHJvdG9jb2xzIHNo
b2xkIG5vdAorCSAqIGFzc3VtZSB0aGV5IGNhbiBwZXJmb3JtIHNvY2tldCB3YWtldXBzLCBldGMs
IGluIHRoZWlyIGRldGFjaCBjb2RlLgorCSAqLworCXNvZGVhbGxvYyhzbyk7Cit9CisKKworCisv
KiBUYWtlbiBmcm9tICAvc3JjL3N5cy9rZXJuL3VpcGNfc29ja2V0LmMgKi8KK3ZvaWQKK3NvYWJv
cnQoc3RydWN0IHNvY2tldCAqc28pCit7CisjaWYgZGVmaW5lZChJTkVUNikKKwlzdHJ1Y3Qgc2N0
cF9pbnBjYiAqaW5wOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKElORVQ2KQorCWlucCA9IChzdHJ1
Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7CisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX0JPVU5EX1Y2KSB7CisJCXNjdHA2X2Fib3J0KHNvKTsKKwl9IGVsc2UgeworI2lm
IGRlZmluZWQoSU5FVCkKKwkJc2N0cF9hYm9ydChzbyk7CisjZW5kaWYKKwl9CisjZWxpZiBkZWZp
bmVkKElORVQpCisJc2N0cF9hYm9ydChzbyk7CisjZW5kaWYKKwlBQ0NFUFRfTE9DSygpOworCVNP
Q0tfTE9DSyhzbyk7CisJc29mcmVlKHNvKTsKK30KKworCisvKiBUYWtlbiBmcm9tICB1c3Ivc3Jj
L3N5cy9rZXJuL3VpcGNfc29ja2V0LmMgYW5kIGNhbGxlZCB3aXRoaW4gc2N0cF9jb25uZWN0IChz
Y3RwX3VzcnJlcS5jKS4KKyAqICBXZSB1c2Ugc2N0cF9jb25uZWN0IGZvciBzZW5kX29uZV9pbml0
X3JlYWwgaW4gbXMxLgorICovCit2b2lkCitzb2lzY29ubmVjdGluZyhzdHJ1Y3Qgc29ja2V0ICpz
bykKK3sKKworCVNPQ0tfTE9DSyhzbyk7CisJc28tPnNvX3N0YXRlICY9IH4oU1NfSVNDT05ORUNU
RUR8U1NfSVNESVNDT05ORUNUSU5HKTsKKwlzby0+c29fc3RhdGUgfD0gU1NfSVNDT05ORUNUSU5H
OworCVNPQ0tfVU5MT0NLKHNvKTsKK30KKworLyogVGFrZW4gZnJvbSAgdXNyL3NyYy9zeXMva2Vy
bi91aXBjX3NvY2tldC5jIGFuZCBjYWxsZWQgd2l0aGluIHNjdHBfZGlzY29ubmVjdCAoc2N0cF91
c3JyZXEuYykuCisgKiAgVE9ETyBEbyB3ZSB1c2Ugc2N0cF9kaXNjb25uZWN0PworICovCit2b2lk
Citzb2lzZGlzY29ubmVjdGluZyhzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKworCS8qCisJICogTm90
ZTogVGhpcyBjb2RlIGFzc3VtZXMgdGhhdCBTT0NLX0xPQ0soc28pIGFuZAorCSAqIFNPQ0tCVUZf
TE9DSygmc28tPnNvX3JjdikgYXJlIHRoZSBzYW1lLgorCSAqLworCVNPQ0tCVUZfTE9DSygmc28t
PnNvX3Jjdik7CisJc28tPnNvX3N0YXRlICY9IH5TU19JU0NPTk5FQ1RJTkc7CisJc28tPnNvX3N0
YXRlIHw9IFNTX0lTRElTQ09OTkVDVElORzsKKwlzby0+c29fcmN2LnNiX3N0YXRlIHw9IFNCU19D
QU5UUkNWTU9SRTsKKwlzb3J3YWtldXBfbG9ja2VkKHNvKTsKKwlTT0NLQlVGX0xPQ0soJnNvLT5z
b19zbmQpOworCXNvLT5zb19zbmQuc2Jfc3RhdGUgfD0gU0JTX0NBTlRTRU5ETU9SRTsKKwlzb3d3
YWtldXBfbG9ja2VkKHNvKTsKKwl3YWtldXAoImR1bW15Iixzbyk7CisJLyogcmVxdWlyZXMgMiBh
cmdzIGJ1dCB0aGlzIHdhcyBpbiBvcmlnICovCisJLyogd2FrZXVwKCZzby0+c29fdGltZW8pOyAq
LworfQorCisKKy8qIFRha2VuIGZyb20gc3lzL2tlcm4va2Vybl9zeW5jaC5jIGFuZAorICAgbW9k
aWZpZWQgZm9yIF9fVXNlcnNwYWNlX18KKyovCisKKy8qCisgKiBNYWtlIGFsbCB0aHJlYWRzIHNs
ZWVwaW5nIG9uIHRoZSBzcGVjaWZpZWQgaWRlbnRpZmllciBydW5uYWJsZS4KKyAqIEFzc29jaWF0
aW5nIHdha2V1cCB3aXRoIHNvX3RpbWVvIGlkZW50aWZpZXIgYW5kIHRpbWVvX2NvbmQKKyAqIGNv
bmRpdGlvbiB2YXJpYWJsZS4gVE9ETy4gSWYgd2UgdXNlIGl0ZXJhdG9yIHRocmVhZCB0aGVuIHdl
IG5lZWQgdG8KKyAqIG1vZGlmeSB3YWtldXAgc28gaXQgY2FuIGRpc3Rpbmd1aXNoIGJldHdlZW4g
aXRlcmF0b3IgaWRlbnRpZmllciBhbmQKKyAqIHRpbWVvIGlkZW50aWZpZXIuCisgKi8KK3ZvaWQK
K3dha2V1cCh2b2lkICppZGVudCwgc3RydWN0IHNvY2tldCAqc28pCit7CisJU09DS19MT0NLKHNv
KTsKKyNpZiBkZWZpbmVkKF9XSU4zMikKKwlXYWtlQWxsQ29uZGl0aW9uVmFyaWFibGUoJihzbykt
PnRpbWVvX2NvbmQpOworI2Vsc2UKKwlwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KCYoc28pLT50aW1l
b19jb25kKTsKKyNlbmRpZgorCVNPQ0tfVU5MT0NLKHNvKTsKK30KKworCisvKgorICogTWFrZSBh
IHRocmVhZCBzbGVlcGluZyBvbiB0aGUgc3BlY2lmaWVkIGlkZW50aWZpZXIgcnVubmFibGUuCisg
KiBNYXkgd2FrZSBtb3JlIHRoYW4gb25lIHRocmVhZCBpZiBhIHRhcmdldCB0aHJlYWQgaXMgY3Vy
cmVudGx5CisgKiBzd2FwcGVkIG91dC4KKyAqLwordm9pZAord2FrZXVwX29uZSh2b2lkICppZGVu
dCkKK3sKKwkvKiBfX1VzZXJzcGFjZV9fIENoZWNrOiBXZSBhcmUgdXNpbmcgYWNjZXB0X2NvbmQg
Zm9yIHdha2V1cF9vbmUuCisJICBJdCBzZWVtcyB0aGF0IHdha2V1cF9vbmUgaXMgb25seSBjYWxs
ZWQgd2l0aGluCisJICBzb2lzY29ubmVjdGVkKCkgYW5kIHNvbmV3Y29ubigpIHdpdGggaWRlbnQg
JmhlYWQtPnNvX3RpbWVvCisJICBoZWFkIGlzIHNvLT5zb19oZWFkLCB3aGljaCBpcyBiYWNrIHBv
aW50ZXIgdG8gbGlzdGVuIHNvY2tldAorCSAgVGhpcyBzZWVtcyB0byBpbmRpY2F0ZSB0aGF0IHRo
ZSB1c2Ugb2YgYWNjZXB0X2NvbmQgaXMgY29ycmVjdAorCSAgc2luY2Ugc29ja2V0IHdoZXJlIGFj
Y2VwdHMgb2NjdXIgaXMgc29faGVhZCBpbiBhbGwKKwkgIHN1YnNpZGlhcnkgc29ja2V0cy4KKwkg
Ki8KKwlBQ0NFUFRfTE9DSygpOworI2lmIGRlZmluZWQoX1dJTjMyKQorCVdha2VBbGxDb25kaXRp
b25WYXJpYWJsZSgmYWNjZXB0X2NvbmQpOworI2Vsc2UKKwlwdGhyZWFkX2NvbmRfYnJvYWRjYXN0
KCZhY2NlcHRfY29uZCk7CisjZW5kaWYKKwlBQ0NFUFRfVU5MT0NLKCk7Cit9CisKKworLyogQ2Fs
bGVkIHdpdGhpbiBzY3RwX3Byb2Nlc3NfY29va2llX1tleGlzdGluZy9uZXddICovCit2b2lkCitz
b2lzY29ubmVjdGVkKHN0cnVjdCBzb2NrZXQgKnNvKQoreworCXN0cnVjdCBzb2NrZXQgKmhlYWQ7
CisKKwlBQ0NFUFRfTE9DSygpOworCVNPQ0tfTE9DSyhzbyk7CisJc28tPnNvX3N0YXRlICY9IH4o
U1NfSVNDT05ORUNUSU5HfFNTX0lTRElTQ09OTkVDVElOR3xTU19JU0NPTkZJUk1JTkcpOworCXNv
LT5zb19zdGF0ZSB8PSBTU19JU0NPTk5FQ1RFRDsKKwloZWFkID0gc28tPnNvX2hlYWQ7CisJaWYg
KGhlYWQgIT0gTlVMTCAmJiAoc28tPnNvX3FzdGF0ZSAmIFNRX0lOQ09NUCkpIHsKKwkJU09DS19V
TkxPQ0soc28pOworCQlUQUlMUV9SRU1PVkUoJmhlYWQtPnNvX2luY29tcCwgc28sIHNvX2xpc3Qp
OworCQloZWFkLT5zb19pbmNxbGVuLS07CisJCXNvLT5zb19xc3RhdGUgJj0gflNRX0lOQ09NUDsK
KwkJVEFJTFFfSU5TRVJUX1RBSUwoJmhlYWQtPnNvX2NvbXAsIHNvLCBzb19saXN0KTsKKwkJaGVh
ZC0+c29fcWxlbisrOworCQlzby0+c29fcXN0YXRlIHw9IFNRX0NPTVA7CisJCUFDQ0VQVF9VTkxP
Q0soKTsKKwkJc29yd2FrZXVwKGhlYWQpOworCQl3YWtldXBfb25lKCZoZWFkLT5zb190aW1lbyk7
CisJCXJldHVybjsKKwl9CisJU09DS19VTkxPQ0soc28pOworCUFDQ0VQVF9VTkxPQ0soKTsKKwl3
YWtldXAoJnNvLT5zb190aW1lbywgc28pOworCXNvcndha2V1cChzbyk7CisJc293d2FrZXVwKHNv
KTsKKworfQorCisvKiBjYWxsZWQgd2l0aGluIHNjdHBfaGFuZGxlX2Nvb2tpZV9lY2hvICovCisK
K3N0cnVjdCBzb2NrZXQgKgorc29uZXdjb25uKHN0cnVjdCBzb2NrZXQgKmhlYWQsIGludCBjb25u
c3RhdHVzKQoreworCXN0cnVjdCBzb2NrZXQgKnNvOworCWludCBvdmVyOworCisJQUNDRVBUX0xP
Q0soKTsKKwlvdmVyID0gKGhlYWQtPnNvX3FsZW4gPiAzICogaGVhZC0+c29fcWxpbWl0IC8gMik7
CisJQUNDRVBUX1VOTE9DSygpOworI2lmZGVmIFJFR1JFU1NJT04KKwlpZiAocmVncmVzc2lvbl9z
b25ld2Nvbm5fZWFybHl0ZXN0ICYmIG92ZXIpCisjZWxzZQorCWlmIChvdmVyKQorI2VuZGlmCisJ
CXJldHVybiAoTlVMTCk7CisJc28gPSBzb2FsbG9jKCk7CisJaWYgKHNvID09IE5VTEwpCisJCXJl
dHVybiAoTlVMTCk7CisJc28tPnNvX2hlYWQgPSBoZWFkOworCXNvLT5zb190eXBlID0gaGVhZC0+
c29fdHlwZTsKKwlzby0+c29fb3B0aW9ucyA9IGhlYWQtPnNvX29wdGlvbnMgJn4gU0NUUF9TT19B
Q0NFUFRDT05OOworCXNvLT5zb19saW5nZXIgPSBoZWFkLT5zb19saW5nZXI7CisJc28tPnNvX3N0
YXRlID0gaGVhZC0+c29fc3RhdGUgfCBTU19OT0ZEUkVGOworCXNvLT5zb19kb20gPSBoZWFkLT5z
b19kb207CisjaWZkZWYgTUFDCisJU09DS19MT0NLKGhlYWQpOworCW1hY19jcmVhdGVfc29ja2V0
X2Zyb21fc29ja2V0KGhlYWQsIHNvKTsKKwlTT0NLX1VOTE9DSyhoZWFkKTsKKyNlbmRpZgorCWlm
IChzb3Jlc2VydmUoc28sIGhlYWQtPnNvX3NuZC5zYl9oaXdhdCwgaGVhZC0+c29fcmN2LnNiX2hp
d2F0KSkgeworCQlzb2RlYWxsb2Moc28pOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlzd2l0Y2gg
KGhlYWQtPnNvX2RvbSkgeworI2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisJCWlmIChzY3Rw
X2F0dGFjaChzbywgSVBQUk9UT19TQ1RQLCBTQ1RQX0RFRkFVTFRfVlJGSUQpKSB7CisJCQlzb2Rl
YWxsb2Moc28pOworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQlicmVhazsKKyNlbmRpZgorI2lm
ZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKwkJaWYgKHNjdHA2X2F0dGFjaChzbywgSVBQUk9U
T19TQ1RQLCBTQ1RQX0RFRkFVTFRfVlJGSUQpKSB7CisJCQlzb2RlYWxsb2Moc28pOworCQkJcmV0
dXJuIChOVUxMKTsKKwkJfQorCQlicmVhazsKKyNlbmRpZgorCWNhc2UgQUZfQ09OTjoKKwkJaWYg
KHNjdHBjb25uX2F0dGFjaChzbywgSVBQUk9UT19TQ1RQLCBTQ1RQX0RFRkFVTFRfVlJGSUQpKSB7
CisJCQlzb2RlYWxsb2Moc28pOworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQlicmVhazsKKwlk
ZWZhdWx0OgorCQlzb2RlYWxsb2Moc28pOworCQlyZXR1cm4gKE5VTEwpOworCQlicmVhazsKKwl9
CisJc28tPnNvX3Jjdi5zYl9sb3dhdCA9IGhlYWQtPnNvX3Jjdi5zYl9sb3dhdDsKKwlzby0+c29f
c25kLnNiX2xvd2F0ID0gaGVhZC0+c29fc25kLnNiX2xvd2F0OworCXNvLT5zb19yY3Yuc2JfdGlt
ZW8gPSBoZWFkLT5zb19yY3Yuc2JfdGltZW87CisJc28tPnNvX3NuZC5zYl90aW1lbyA9IGhlYWQt
PnNvX3NuZC5zYl90aW1lbzsKKwlzby0+c29fcmN2LnNiX2ZsYWdzIHw9IGhlYWQtPnNvX3Jjdi5z
Yl9mbGFncyAmIFNCX0FVVE9TSVpFOworCXNvLT5zb19zbmQuc2JfZmxhZ3MgfD0gaGVhZC0+c29f
c25kLnNiX2ZsYWdzICYgU0JfQVVUT1NJWkU7CisJc28tPnNvX3N0YXRlIHw9IGNvbm5zdGF0dXM7
CisJQUNDRVBUX0xPQ0soKTsKKwlpZiAoY29ubnN0YXR1cykgeworCQlUQUlMUV9JTlNFUlRfVEFJ
TCgmaGVhZC0+c29fY29tcCwgc28sIHNvX2xpc3QpOworCQlzby0+c29fcXN0YXRlIHw9IFNRX0NP
TVA7CisJCWhlYWQtPnNvX3FsZW4rKzsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBLZWVwIHJlbW92
aW5nIHNvY2tldHMgZnJvbSB0aGUgaGVhZCB1bnRpbCB0aGVyZSdzIHJvb20gZm9yCisJCSAqIHVz
IHRvIGluc2VydCBvbiB0aGUgdGFpbC4gIEluIHByZS1sb2NraW5nIHJldmlzaW9ucywgdGhpcwor
CQkgKiB3YXMgYSBzaW1wbGUgaWYgKCksIGJ1dCBhcyB3ZSBjb3VsZCBiZSByYWNpbmcgd2l0aCBv
dGhlcgorCQkgKiB0aHJlYWRzIGFuZCBzb2Fib3J0KCkgcmVxdWlyZXMgZHJvcHBpbmcgbG9ja3Ms
IHdlIG11c3QKKwkJICogbG9vcCB3YWl0aW5nIGZvciB0aGUgY29uZGl0aW9uIHRvIGJlIHRydWUu
CisJCSAqLworCQl3aGlsZSAoaGVhZC0+c29faW5jcWxlbiA+IGhlYWQtPnNvX3FsaW1pdCkgewor
CQkJc3RydWN0IHNvY2tldCAqc3A7CisJCQlzcCA9IFRBSUxRX0ZJUlNUKCZoZWFkLT5zb19pbmNv
bXApOworCQkJVEFJTFFfUkVNT1ZFKCZoZWFkLT5zb19pbmNvbXAsIHNwLCBzb19saXN0KTsKKwkJ
CWhlYWQtPnNvX2luY3FsZW4tLTsKKwkJCXNwLT5zb19xc3RhdGUgJj0gflNRX0lOQ09NUDsKKwkJ
CXNwLT5zb19oZWFkID0gTlVMTDsKKwkJCUFDQ0VQVF9VTkxPQ0soKTsKKwkJCXNvYWJvcnQoc3Ap
OworCQkJQUNDRVBUX0xPQ0soKTsKKwkJfQorCQlUQUlMUV9JTlNFUlRfVEFJTCgmaGVhZC0+c29f
aW5jb21wLCBzbywgc29fbGlzdCk7CisJCXNvLT5zb19xc3RhdGUgfD0gU1FfSU5DT01QOworCQlo
ZWFkLT5zb19pbmNxbGVuKys7CisJfQorCUFDQ0VQVF9VTkxPQ0soKTsKKwlpZiAoY29ubnN0YXR1
cykgeworCQlzb3J3YWtldXAoaGVhZCk7CisJCXdha2V1cF9vbmUoJmhlYWQtPnNvX3RpbWVvKTsK
Kwl9CisJcmV0dXJuIChzbyk7CisKK30KKworIC8qCisgICBTb3VyY2U6IC9zcmMvc3lzL2dudS9m
cy94ZnMvRnJlZUJTRC94ZnNfaW9jdGwuYworICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKK2Nv
cHlfdG9fdXNlcih2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbikgeworCW1lbWNweShk
c3QsIHNyYywgbGVuKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50Citj
b3B5X2Zyb21fdXNlcih2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbikgeworCW1lbWNw
eShkc3QsIHNyYywgbGVuKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyBSZWZlcmVuY2VzOgorIHNy
Yy9zeXMvZGV2L2xtYy9pZl9sbWMuaDoKKyBzcmMvc3lzL3Bvd2VycGMvcG93ZXJwYy9jb3B5aW5v
dXQuYworIHNyYy9zeXMvc3lzL3N5c3RtLmgKKyovCisjIGRlZmluZSBjb3B5aW4odSwgaywgbGVu
KQljb3B5X2Zyb21fdXNlcihrLCB1LCBsZW4pCisKKy8qIFJlZmVyZW5jZXM6CisgICBzcmMvc3lz
L3Bvd2VycGMvcG93ZXJwYy9jb3B5aW5vdXQuYworICAgc3JjL3N5cy9zeXMvc3lzdG0uaAorKi8K
KyMgZGVmaW5lIGNvcHlvdXQoaywgdSwgbGVuKQljb3B5X3RvX3VzZXIodSwgaywgbGVuKQorCisK
Ky8qIGNvcHlpbmlvdiBkZWZpbml0aW9uIGNvcGllZC9tb2RpZmllZCBmcm9tIHNyYy9zeXMva2Vy
bi9rZXJuX3N1YnIuYyAqLworaW50Citjb3B5aW5pb3Yoc3RydWN0IGlvdmVjICppb3ZwLCB1X2lu
dCBpb3ZjbnQsIHN0cnVjdCBpb3ZlYyAqKmlvdiwgaW50IGVycm9yKQoreworCXVfaW50IGlvdmxl
bjsKKworCSppb3YgPSBOVUxMOworCWlmIChpb3ZjbnQgPiBVSU9fTUFYSU9WKQorCQlyZXR1cm4g
KGVycm9yKTsKKwlpb3ZsZW4gPSBpb3ZjbnQgKiBzaXplb2YgKHN0cnVjdCBpb3ZlYyk7CisJKmlv
diA9IG1hbGxvYyhpb3ZsZW4pOyAvKiwgTV9JT1YsIE1fV0FJVE9LKTsgKi8KKwllcnJvciA9IGNv
cHlpbihpb3ZwLCAqaW92LCBpb3ZsZW4pOworCWlmIChlcnJvcikgeworCQlmcmVlKCppb3YpOyAv
KiwgTV9JT1YpOyAqLworCQkqaW92ID0gTlVMTDsKKwl9CisJcmV0dXJuIChlcnJvcik7Cit9CisK
Ky8qIChfX1VzZXJzcGFjZV9fKSB2ZXJzaW9uIG9mIHVpb21vdmUgKi8KK2ludAordWlvbW92ZSh2
b2lkICpjcCwgaW50IG4sIHN0cnVjdCB1aW8gKnVpbykKK3sKKwlzdHJ1Y3QgaW92ZWMgKmlvdjsK
KwlzaXplX3QgY250OworCWludCBlcnJvciA9IDA7CisKKwlpZiAoKHVpby0+dWlvX3J3ICE9IFVJ
T19SRUFEKSAmJgorCSAgICAodWlvLT51aW9fcncgIT0gVUlPX1dSSVRFKSkgeworCQlyZXR1cm4g
KEVJTlZBTCk7CisJfQorCisJd2hpbGUgKG4gPiAwICYmIHVpby0+dWlvX3Jlc2lkKSB7CisJCWlv
diA9IHVpby0+dWlvX2lvdjsKKwkJY250ID0gaW92LT5pb3ZfbGVuOworCQlpZiAoY250ID09IDAp
IHsKKwkJCXVpby0+dWlvX2lvdisrOworCQkJdWlvLT51aW9faW92Y250LS07CisJCQljb250aW51
ZTsKKwkJfQorCQlpZiAoY250ID4gKHNpemVfdCluKQorCQkJY250ID0gbjsKKworCQlzd2l0Y2gg
KHVpby0+dWlvX3NlZ2ZsZykgeworCisJCWNhc2UgVUlPX1VTRVJTUEFDRToKKwkJCWlmICh1aW8t
PnVpb19ydyA9PSBVSU9fUkVBRCkKKwkJCQllcnJvciA9IGNvcHlvdXQoY3AsIGlvdi0+aW92X2Jh
c2UsIGNudCk7CisJCQllbHNlCisJCQkJZXJyb3IgPSBjb3B5aW4oaW92LT5pb3ZfYmFzZSwgY3As
IGNudCk7CisJCQlpZiAoZXJyb3IpCisJCQkJZ290byBvdXQ7CisJCQlicmVhazsKKworCQljYXNl
IFVJT19TWVNTUEFDRToKKwkJCWlmICh1aW8tPnVpb19ydyA9PSBVSU9fUkVBRCkKKwkJCQltZW1j
cHkoaW92LT5pb3ZfYmFzZSwgY3AsIGNudCk7CisJCQllbHNlCisJCQkJbWVtY3B5KGNwLCBpb3Yt
Pmlvdl9iYXNlLCBjbnQpOworCQkJYnJlYWs7CisJCX0KKwkJaW92LT5pb3ZfYmFzZSA9IChjaGFy
ICopaW92LT5pb3ZfYmFzZSArIGNudDsKKwkJaW92LT5pb3ZfbGVuIC09IGNudDsKKwkJdWlvLT51
aW9fcmVzaWQgLT0gY250OworCQl1aW8tPnVpb19vZmZzZXQgKz0gKG9mZl90KWNudDsKKwkJY3Ag
PSAoY2hhciAqKWNwICsgY250OworCQluIC09IChpbnQpY250OworCX0KK291dDoKKwlyZXR1cm4g
KGVycm9yKTsKK30KKworCisvKiBTb3VyY2U6IHNyYy9zeXMva2Vybi91aXBjX3N5c2NhbGxzLmMg
Ki8KK2ludAorZ2V0c29ja2FkZHIoc3RydWN0IHNvY2thZGRyICoqbmFtcCwgY2FkZHJfdCB1YWRk
ciwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgc29ja2FkZHIgKnNhOworCWludCBlcnJvcjsKKwor
CWlmIChsZW4gPiBTT0NLX01BWEFERFJMRU4pCisJCXJldHVybiAoRU5BTUVUT09MT05HKTsKKwlp
ZiAobGVuIDwgb2Zmc2V0b2Yoc3RydWN0IHNvY2thZGRyLCBzYV9kYXRhKSkKKwkJcmV0dXJuIChF
SU5WQUwpOworCU1BTExPQyhzYSwgc3RydWN0IHNvY2thZGRyICosIGxlbiwgTV9TT05BTUUsIE1f
V0FJVE9LKTsKKwllcnJvciA9IGNvcHlpbih1YWRkciwgc2EsIGxlbik7CisJaWYgKGVycm9yKSB7
CisJCUZSRUUoc2EsIE1fU09OQU1FKTsKKwl9IGVsc2UgeworI2lmZGVmIEhBVkVfU0FfTEVOCisJ
CXNhLT5zYV9sZW4gPSBsZW47CisjZW5kaWYKKwkJKm5hbXAgPSBzYTsKKwl9CisJcmV0dXJuIChl
cnJvcik7Cit9CisKK2ludAordXNyc2N0cF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvLCBp
bnQgbGV2ZWwsIGludCBvcHRpb25fbmFtZSwKKyAgICAgICAgICAgICAgICAgICB2b2lkICpvcHRp
b25fdmFsdWUsIHNvY2tsZW5fdCAqb3B0aW9uX2xlbik7CisKK3NjdHBfYXNzb2NfdAordXNyc2N0
cF9nZXRhc3NvY2lkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc2EpCit7
CisJc3RydWN0IHNjdHBfcGFkZHJpbmZvIHNwOworCXNvY2tsZW5fdCBzaXo7CisjaWZuZGVmIEhB
VkVfU0FfTEVOCisJc2l6ZV90IHNhX2xlbjsKKyNlbmRpZgorCisJLyogRmlyc3QgZ2V0IHRoZSBh
c3NvYyBpZCAqLworCXNpeiA9IHNpemVvZihzcCk7CisJbWVtc2V0KCZzcCwgMCwgc2l6ZW9mKHNw
KSk7CisjaWZkZWYgSEFWRV9TQV9MRU4KKwltZW1jcHkoKGNhZGRyX3QpJnNwLnNwaW5mb19hZGRy
ZXNzLCBzYSwgc2EtPnNhX2xlbik7CisjZWxzZQorCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgewor
I2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisJCXNhX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVU
NjoKKwkJc2FfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQlicmVhazsKKyNl
bmRpZgorCWNhc2UgQUZfQ09OTjoKKwkJc2FfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9j
b25uKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc2FfbGVuID0gMDsKKwkJYnJlYWs7CisJfQor
CW1lbWNweSgoY2FkZHJfdCkmc3Auc3BpbmZvX2FkZHJlc3MsIHNhLCBzYV9sZW4pOworI2VuZGlm
CisJaWYgKHVzcnNjdHBfZ2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfR0VUX1BF
RVJfQUREUl9JTkZPLCAmc3AsICZzaXopICE9IDApIHsKKwkJLyogV2UgZGVwZW5kIG9uIHRoZSBm
YWN0IHRoYXQgMCBjYW4gbmV2ZXIgYmUgcmV0dXJuZWQgKi8KKwkJcmV0dXJuICgoc2N0cF9hc3Nv
Y190KSAwKTsKKwl9CisJcmV0dXJuIChzcC5zcGluZm9fYXNzb2NfaWQpOworfQorCisKKy8qIFRh
a2VuIGZyb20gIC9zcmMvbGliL2xpYmMvbmV0L3NjdHBfc3lzX2NhbGxzLmMKKyAqIGFuZCBtb2Rp
ZmllZCBmb3IgX19Vc2Vyc3BhY2VfXworICogY2FsbGluZyBzY3RwX2dlbmVyaWNfc2VuZG1zZyBm
cm9tIHRoaXMgZnVuY3Rpb24KKyAqLworc3NpemVfdAordXNlcnNwYWNlX3NjdHBfc2VuZG1zZyhz
dHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZGF0
YSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHNvY2thZGRyICp0bywKKyAgICAgICAgICAgICAgICAgICAgICAgc29ja2xl
bl90IHRvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBwcGlkLAorICAgICAg
ICAgICAgICAgICAgICAgICB1aW50MzJfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAg
dWludDE2X3Qgc3RyZWFtX25vLAorICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0aW1l
dG9saXZlLAorICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBjb250ZXh0KQoreworCXN0
cnVjdCBzY3RwX3NuZHJjdmluZm8gc25kcmN2aW5mbywgKnNpbmZvID0gJnNuZHJjdmluZm87CisJ
c3RydWN0IHVpbyBhdWlvOworCXN0cnVjdCBpb3ZlYyBpb3ZbMV07CisKKwltZW1zZXQoc2luZm8s
IDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvKSk7CisJc2luZm8tPnNpbmZvX3BwaWQg
PSBwcGlkOworCXNpbmZvLT5zaW5mb19mbGFncyA9IGZsYWdzOworCXNpbmZvLT5zaW5mb19zdHJl
YW0gPSBzdHJlYW1fbm87CisJc2luZm8tPnNpbmZvX3RpbWV0b2xpdmUgPSB0aW1ldG9saXZlOwor
CXNpbmZvLT5zaW5mb19jb250ZXh0ID0gY29udGV4dDsKKwlzaW5mby0+c2luZm9fYXNzb2NfaWQg
PSAwOworCisKKwkvKiBQZXJmb3JtIGVycm9yIGNoZWNrcyBvbiBkZXN0aW5hdGlvbiAodG8pICov
CisJaWYgKHRvbGVuID4gU09DS19NQVhBRERSTEVOKSB7CisJCWVycm5vID0gRU5BTUVUT09MT05H
OworCQlyZXR1cm4gKC0xKTsKKwl9CisJaWYgKCh0b2xlbiA+IDApICYmCisJICAgICgodG8gPT0g
TlVMTCkgfHwgKHRvbGVuIDwgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNvY2thZGRyKSkpKSB7
CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKC0xKTsKKwl9CisJaWYgKGRhdGEgPT0gTlVM
TCkgeworCQllcnJubyA9IEVGQVVMVDsKKwkJcmV0dXJuICgtMSk7CisJfQorCS8qIEFkZGluZyB0
aGUgZm9sbG93aW5nIGFzIHBhcnQgb2YgZGVmZW5zaXZlIHByb2dyYW1taW5nLCBpbiBjYXNlIHRo
ZSBhcHBsaWNhdGlvbgorCSAgIGRvZXMgbm90IGRvIGl0IHdoZW4gcHJlcGFyaW5nIHRoZSBkZXN0
aW5hdGlvbiBhZGRyZXNzLiovCisjaWZkZWYgSEFWRV9TQV9MRU4KKwlpZiAodG8gIT0gTlVMTCkg
eworCQl0by0+c2FfbGVuID0gdG9sZW47CisJfQorI2VuZGlmCisKKwlpb3ZbMF0uaW92X2Jhc2Ug
PSAoY2FkZHJfdClkYXRhOworCWlvdlswXS5pb3ZfbGVuID0gbGVuOworCisJYXVpby51aW9faW92
ID0gIGlvdjsKKwlhdWlvLnVpb19pb3ZjbnQgPSAxOworCWF1aW8udWlvX3NlZ2ZsZyA9IFVJT19V
U0VSU1BBQ0U7CisJYXVpby51aW9fcncgPSBVSU9fV1JJVEU7CisJYXVpby51aW9fb2Zmc2V0ID0g
MDsJCQkvKiBYWFggKi8KKwlhdWlvLnVpb19yZXNpZCA9IGxlbjsKKwllcnJubyA9IHNjdHBfbG93
ZXJfc29zZW5kKHNvLCB0bywgJmF1aW8sIE5VTEwsIE5VTEwsIDAsIHNpbmZvKTsKKwlpZiAoZXJy
bm8gPT0gMCkgeworCQlyZXR1cm4gKGxlbiAtIGF1aW8udWlvX3Jlc2lkKTsKKwl9IGVsc2Ugewor
CQlyZXR1cm4gKC0xKTsKKwl9Cit9CisKKworc3NpemVfdAordXNyc2N0cF9zZW5kdihzdHJ1Y3Qg
c29ja2V0ICpzbywKKyAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwKKyAgICAgICAgICAg
ICAgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICp0bywKKyAgICAg
ICAgICAgICAgaW50IGFkZHJjbnQsCisgICAgICAgICAgICAgIHZvaWQgKmluZm8sCisgICAgICAg
ICAgICAgIHNvY2tsZW5fdCBpbmZvbGVuLAorICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5m
b3R5cGUsCisgICAgICAgICAgICAgIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc2N0cF9zbmRyY3Zp
bmZvIHNpbmZvOworCXN0cnVjdCB1aW8gYXVpbzsKKwlzdHJ1Y3QgaW92ZWMgaW92WzFdOworCWlu
dCB1c2Vfc2luZm87CisJc2N0cF9hc3NvY190ICphc3NvY19pZDsKKworCWlmIChzbyA9PSBOVUxM
KSB7CisJCWVycm5vID0gRUJBREY7CisJCXJldHVybiAoLTEpOworCX0KKwlpZiAoZGF0YSA9PSBO
VUxMKSB7CisJCWVycm5vID0gRUZBVUxUOworCQlyZXR1cm4gKC0xKTsKKwl9CisJbWVtc2V0KCZz
aW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8pKTsKKwlhc3NvY19pZCA9IE5V
TEw7CisJdXNlX3NpbmZvID0gMDsKKwlzd2l0Y2ggKGluZm90eXBlKSB7CisJY2FzZSBTQ1RQX1NF
TkRWX05PSU5GTzoKKwkJaWYgKChpbmZvbGVuICE9IDApIHx8IChpbmZvICE9IE5VTEwpKSB7CisJ
CQllcnJubyA9IEVJTlZBTDsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCWJyZWFrOworCWNhc2Ug
U0NUUF9TRU5EVl9TTkRJTkZPOgorCQlpZiAoKGluZm8gPT0gTlVMTCkgfHwgKGluZm9sZW4gIT0g
c2l6ZW9mKHN0cnVjdCBzY3RwX3NuZGluZm8pKSkgeworCQkJZXJybm8gPSBFSU5WQUw7CisJCQly
ZXR1cm4gKC0xKTsKKwkJfQorCQlzaW5mby5zaW5mb19zdHJlYW0gPSAoKHN0cnVjdCBzY3RwX3Nu
ZGluZm8gKilpbmZvKS0+c25kX3NpZDsKKwkJc2luZm8uc2luZm9fZmxhZ3MgPSAoKHN0cnVjdCBz
Y3RwX3NuZGluZm8gKilpbmZvKS0+c25kX2ZsYWdzOworCQlzaW5mby5zaW5mb19wcGlkID0gKChz
dHJ1Y3Qgc2N0cF9zbmRpbmZvICopaW5mbyktPnNuZF9wcGlkOworCQlzaW5mby5zaW5mb19jb250
ZXh0ID0gKChzdHJ1Y3Qgc2N0cF9zbmRpbmZvICopaW5mbyktPnNuZF9jb250ZXh0OworCQlzaW5m
by5zaW5mb19hc3NvY19pZCA9ICgoc3RydWN0IHNjdHBfc25kaW5mbyAqKWluZm8pLT5zbmRfYXNz
b2NfaWQ7CisJCWFzc29jX2lkID0gJigoKHN0cnVjdCBzY3RwX3NuZGluZm8gKilpbmZvKS0+c25k
X2Fzc29jX2lkKTsKKwkJdXNlX3NpbmZvID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NFTkRW
X1BSSU5GTzoKKwkJaWYgKChpbmZvID09IE5VTEwpIHx8IChpbmZvbGVuICE9IHNpemVvZihzdHJ1
Y3Qgc2N0cF9wcmluZm8pKSkgeworCQkJZXJybm8gPSBFSU5WQUw7CisJCQlyZXR1cm4gKC0xKTsK
KwkJfQorCQlzaW5mby5zaW5mb19zdHJlYW0gPSAwOworCQlzaW5mby5zaW5mb19mbGFncyA9IFBS
X1NDVFBfUE9MSUNZKCgoc3RydWN0IHNjdHBfcHJpbmZvICopaW5mbyktPnByX3BvbGljeSk7CisJ
CXNpbmZvLnNpbmZvX3RpbWV0b2xpdmUgPSAoKHN0cnVjdCBzY3RwX3ByaW5mbyAqKWluZm8pLT5w
cl92YWx1ZTsKKwkJdXNlX3NpbmZvID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NFTkRWX0FV
VEhJTkZPOgorCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJY2FzZSBTQ1RQX1NF
TkRWX1NQQToKKwkJaWYgKChpbmZvID09IE5VTEwpIHx8IChpbmZvbGVuICE9IHNpemVvZihzdHJ1
Y3Qgc2N0cF9zZW5kdl9zcGEpKSkgeworCQkJZXJybm8gPSBFSU5WQUw7CisJCQlyZXR1cm4gKC0x
KTsKKwkJfQorCQlpZiAoKChzdHJ1Y3Qgc2N0cF9zZW5kdl9zcGEgKilpbmZvKS0+c2VuZHZfZmxh
Z3MgJiBTQ1RQX1NFTkRfU05ESU5GT19WQUxJRCkgeworCQkJc2luZm8uc2luZm9fc3RyZWFtID0g
KChzdHJ1Y3Qgc2N0cF9zZW5kdl9zcGEgKilpbmZvKS0+c2VuZHZfc25kaW5mby5zbmRfc2lkOwor
CQkJc2luZm8uc2luZm9fZmxhZ3MgPSAoKHN0cnVjdCBzY3RwX3NlbmR2X3NwYSAqKWluZm8pLT5z
ZW5kdl9zbmRpbmZvLnNuZF9mbGFnczsKKwkJCXNpbmZvLnNpbmZvX3BwaWQgPSAoKHN0cnVjdCBz
Y3RwX3NlbmR2X3NwYSAqKWluZm8pLT5zZW5kdl9zbmRpbmZvLnNuZF9wcGlkOworCQkJc2luZm8u
c2luZm9fY29udGV4dCA9ICgoc3RydWN0IHNjdHBfc2VuZHZfc3BhICopaW5mbyktPnNlbmR2X3Nu
ZGluZm8uc25kX2NvbnRleHQ7CisJCQlzaW5mby5zaW5mb19hc3NvY19pZCA9ICgoc3RydWN0IHNj
dHBfc2VuZHZfc3BhICopaW5mbyktPnNlbmR2X3NuZGluZm8uc25kX2Fzc29jX2lkOworCQkJYXNz
b2NfaWQgPSAmKCgoc3RydWN0IHNjdHBfc2VuZHZfc3BhICopaW5mbyktPnNlbmR2X3NuZGluZm8u
c25kX2Fzc29jX2lkKTsKKwkJfSBlbHNlIHsKKwkJCXNpbmZvLnNpbmZvX2ZsYWdzID0gMDsKKwkJ
CXNpbmZvLnNpbmZvX3N0cmVhbSA9IDA7CisJCX0KKwkJaWYgKCgoc3RydWN0IHNjdHBfc2VuZHZf
c3BhICopaW5mbyktPnNlbmR2X2ZsYWdzICYgU0NUUF9TRU5EX1BSSU5GT19WQUxJRCkgeworCQkJ
c2luZm8uc2luZm9fZmxhZ3MgfD0gUFJfU0NUUF9QT0xJQ1koKChzdHJ1Y3Qgc2N0cF9zZW5kdl9z
cGEgKilpbmZvKS0+c2VuZHZfcHJpbmZvLnByX3BvbGljeSk7CisJCQlzaW5mby5zaW5mb190aW1l
dG9saXZlID0gKChzdHJ1Y3Qgc2N0cF9zZW5kdl9zcGEgKilpbmZvKS0+c2VuZHZfcHJpbmZvLnBy
X3ZhbHVlOworCQl9CisJCWlmICgoKHN0cnVjdCBzY3RwX3NlbmR2X3NwYSAqKWluZm8pLT5zZW5k
dl9mbGFncyAmIFNDVFBfU0VORF9BVVRISU5GT19WQUxJRCkgeworCQkJZXJybm8gPSBFSU5WQUw7
CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQl1c2Vfc2luZm8gPSAxOworCQlicmVhazsKKwlkZWZh
dWx0OgorCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJLyogUGVyZm9y
bSBlcnJvciBjaGVja3Mgb24gZGVzdGluYXRpb24gKHRvKSAqLworCWlmIChhZGRyY250ID4gMSkg
eworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJaW92WzBdLmlvdl9i
YXNlID0gKGNhZGRyX3QpZGF0YTsKKwlpb3ZbMF0uaW92X2xlbiA9IGxlbjsKKworCWF1aW8udWlv
X2lvdiA9ICBpb3Y7CisJYXVpby51aW9faW92Y250ID0gMTsKKwlhdWlvLnVpb19zZWdmbGcgPSBV
SU9fVVNFUlNQQUNFOworCWF1aW8udWlvX3J3ID0gVUlPX1dSSVRFOworCWF1aW8udWlvX29mZnNl
dCA9IDA7CQkJLyogWFhYICovCisJYXVpby51aW9fcmVzaWQgPSBsZW47CisJZXJybm8gPSBzY3Rw
X2xvd2VyX3Nvc2VuZChzbywgdG8sICZhdWlvLCBOVUxMLCBOVUxMLCBmbGFncywgdXNlX3NpbmZv
ID8gJnNpbmZvIDogTlVMTCk7CisJaWYgKGVycm5vID09IDApIHsKKwkJaWYgKCh0byAhPSBOVUxM
KSAmJiAoYXNzb2NfaWQgIT0gTlVMTCkpIHsKKwkJCSphc3NvY19pZCA9IHVzcnNjdHBfZ2V0YXNz
b2NpZChzbywgdG8pOworCQl9CisJCXJldHVybiAobGVuIC0gYXVpby51aW9fcmVzaWQpOworCX0g
ZWxzZSB7CisJCXJldHVybiAoLTEpOworCX0KK30KKworCitzc2l6ZV90Cit1c2Vyc3BhY2Vfc2N0
cF9zZW5kbWJ1ZihzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICBzdHJ1Y3QgbWJ1ZiogbWJ1ZmRhdGEs
CisgICAgc2l6ZV90IGxlbiwKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKnRvLAorICAgIHNvY2tsZW5f
dCB0b2xlbiwKKyAgICB1aW50MzJfdCBwcGlkLAorICAgIHVpbnQzMl90IGZsYWdzLAorICAgIHVp
bnQxNl90IHN0cmVhbV9ubywKKyAgICB1aW50MzJfdCB0aW1ldG9saXZlLAorICAgIHVpbnQzMl90
IGNvbnRleHQpCit7CisKKwlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvIHNuZHJjdmluZm8sICpzaW5m
byA9ICZzbmRyY3ZpbmZvOworCS8qICAgIHN0cnVjdCB1aW8gYXVpbzsKKwkgICAgICBzdHJ1Y3Qg
aW92ZWMgaW92WzFdOyAqLworCWludCBlcnJvciA9IDA7CisJaW50IHVmbGFncyA9IDA7CisJc3Np
emVfdCByZXR2YWw7CisKKwlzaW5mby0+c2luZm9fcHBpZCA9IHBwaWQ7CisJc2luZm8tPnNpbmZv
X2ZsYWdzID0gZmxhZ3M7CisJc2luZm8tPnNpbmZvX3N0cmVhbSA9IHN0cmVhbV9ubzsKKwlzaW5m
by0+c2luZm9fdGltZXRvbGl2ZSA9IHRpbWV0b2xpdmU7CisJc2luZm8tPnNpbmZvX2NvbnRleHQg
PSBjb250ZXh0OworCXNpbmZvLT5zaW5mb19hc3NvY19pZCA9IDA7CisKKwkvKiBQZXJmb3JtIGVy
cm9yIGNoZWNrcyBvbiBkZXN0aW5hdGlvbiAodG8pICovCisJaWYgKHRvbGVuID4gU09DS19NQVhB
RERSTEVOKXsKKwkJZXJyb3IgPSAoRU5BTUVUT09MT05HKTsKKwkJZ290byBzZW5kbXNnX3JldHVy
bjsKKwl9CisJaWYgKHRvbGVuIDwgKHNvY2tsZW5fdClvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHIs
IHNhX2RhdGEpKXsKKwkJZXJyb3IgPSAoRUlOVkFMKTsKKwkJZ290byBzZW5kbXNnX3JldHVybjsK
Kwl9CisJLyogQWRkaW5nIHRoZSBmb2xsb3dpbmcgYXMgcGFydCBvZiBkZWZlbnNpdmUgcHJvZ3Jh
bW1pbmcsIGluIGNhc2UgdGhlIGFwcGxpY2F0aW9uCisJICAgZG9lcyBub3QgZG8gaXQgd2hlbiBw
cmVwYXJpbmcgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MuKi8KKyNpZmRlZiBIQVZFX1NBX0xFTgor
CXRvLT5zYV9sZW4gPSB0b2xlbjsKKyNlbmRpZgorCisJZXJyb3IgPSBzY3RwX2xvd2VyX3Nvc2Vu
ZChzbywgdG8sIE5VTEwvKnVpbyovLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0
IG1idWYgKiltYnVmZGF0YSwgKHN0cnVjdCBtYnVmICopTlVMTCwKKwkgICAgICAgICAgICAgICAg
ICAgICAgICAgdWZsYWdzLCBzaW5mbyk7CitzZW5kbXNnX3JldHVybjoKKwkvKiBUT0RPOiBOZWVk
cyBhIGNvbmRpdGlvbiBmb3Igbm9uLWJsb2NraW5nIHdoZW4gZXJyb3IgaXMgRVdPVUxEQkxPQ0sg
Ki8KKwlpZiAoMCA9PSBlcnJvcikKKwkJcmV0dmFsID0gbGVuOworCWVsc2UgaWYgKGVycm9yID09
IEVXT1VMREJMT0NLKSB7CisJCWVycm5vID0gRVdPVUxEQkxPQ0s7CisJCXJldHZhbCA9IC0xOwor
CX0gZWxzZSB7CisJCVNDVFBfUFJJTlRGKCIlczogZXJyb3IgPSAlZFxuIiwgX19mdW5jX18sIGVy
cm9yKTsKKwkJZXJybm8gPSBlcnJvcjsKKwkJcmV0dmFsID0gLTE7CisJfQorCXJldHVybiAocmV0
dmFsKTsKK30KKworCisvKiB0YWtlbiBmcm9tIHVzci5saWIvc2N0cF9zeXNfY2FsbHMuYyBhbmQg
bmVlZGVkIGhlcmUgKi8KKyNkZWZpbmUgICAgICAgIFNDVFBfU01BTExfSU9WRUNfU0laRSAyCisK
Ky8qIFRha2VuIGZyb20gIC9zcmMvbGliL2xpYmMvbmV0L3NjdHBfc3lzX2NhbGxzLmMKKyAqIGFu
ZCBtb2RpZmllZCBmb3IgX19Vc2Vyc3BhY2VfXworICogY2FsbGluZyBzY3RwX2dlbmVyaWNfcmVj
dm1zZyBmcm9tIHRoaXMgZnVuY3Rpb24KKyAqLworc3NpemVfdAordXNlcnNwYWNlX3NjdHBfcmVj
dm1zZyhzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICB2b2lkICpkYnVmLAorICAgIHNpemVfdCBsZW4s
CisgICAgc3RydWN0IHNvY2thZGRyICpmcm9tLAorICAgIHNvY2tsZW5fdCAqZnJvbWxlbnAsCisg
ICAgc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqc2luZm8sCisgICAgaW50ICptc2dfZmxhZ3MpCit7
CisJc3RydWN0IHVpbyBhdWlvOworCXN0cnVjdCBpb3ZlYyBpb3ZbU0NUUF9TTUFMTF9JT1ZFQ19T
SVpFXTsKKwlzdHJ1Y3QgaW92ZWMgKnRpb3Y7CisJaW50IGlvdmxlbiA9IDE7CisJaW50IGVycm9y
ID0gMDsKKwlzc2l6ZV90IHVsZW47CisJaW50IGk7CisJc29ja2xlbl90IGZyb21sZW47CisKKwlp
b3ZbMF0uaW92X2Jhc2UgPSBkYnVmOworCWlvdlswXS5pb3ZfbGVuID0gbGVuOworCisJYXVpby51
aW9faW92ID0gaW92OworCWF1aW8udWlvX2lvdmNudCA9IGlvdmxlbjsKKwlhdWlvLnVpb19zZWdm
bGcgPSBVSU9fVVNFUlNQQUNFOworCWF1aW8udWlvX3J3ID0gVUlPX1JFQUQ7CisJYXVpby51aW9f
b2Zmc2V0ID0gMDsJCQkvKiBYWFggKi8KKwlhdWlvLnVpb19yZXNpZCA9IDA7CisJdGlvdiA9IGlv
djsKKwlmb3IgKGkgPSAwOyBpIDxpb3ZsZW47IGkrKywgdGlvdisrKSB7CisJCWlmICgoYXVpby51
aW9fcmVzaWQgKz0gdGlvdi0+aW92X2xlbikgPCAwKSB7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJ
CVNDVFBfUFJJTlRGKCIlczogZXJyb3IgPSAlZFxuIiwgX19mdW5jX18sIGVycm9yKTsKKwkJCXJl
dHVybiAoLTEpOworCQl9CisJfQorCXVsZW4gPSBhdWlvLnVpb19yZXNpZDsKKwlpZiAoZnJvbWxl
bnAgIT0gTlVMTCkgeworCQlmcm9tbGVuID0gKmZyb21sZW5wOworCX0gZWxzZSB7CisJCWZyb21s
ZW4gPSAwOworCX0KKwllcnJvciA9IHNjdHBfc29yZWN2bXNnKHNvLCAmYXVpbywgKHN0cnVjdCBt
YnVmICoqKU5VTEwsCisJCSAgICBmcm9tLCBmcm9tbGVuLCBtc2dfZmxhZ3MsCisJCSAgICAoc3Ry
dWN0IHNjdHBfc25kcmN2aW5mbyAqKXNpbmZvLCAxKTsKKworCWlmIChlcnJvcikgeworCQlpZiAo
KGF1aW8udWlvX3Jlc2lkICE9IHVsZW4pICYmCisJCSAgICAoZXJyb3IgPT0gRUlOVFIgfHwKKyNp
ZiAhZGVmaW5lZChfX05ldEJTRF9fKQorCQkgICAgIGVycm9yID09IEVSRVNUQVJUIHx8CisjZW5k
aWYKKwkJICAgICBlcnJvciA9PSBFV09VTERCTE9DSykpIHsKKwkJCWVycm9yID0gMDsKKwkJfQor
CX0KKwlpZiAoKGZyb21sZW5wICE9IE5VTEwpICYmIChmcm9tbGVuID4gMCkgJiYgKGZyb20gIT0g
TlVMTCkpIHsKKwkJc3dpdGNoIChmcm9tLT5zYV9mYW1pbHkpIHsKKyNpZiBkZWZpbmVkKElORVQp
CisJCWNhc2UgQUZfSU5FVDoKKwkJCSpmcm9tbGVucCA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW4pOworCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKElORVQ2KQorCQljYXNlIEFGX0lO
RVQ2OgorCQkJKmZyb21sZW5wID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQkJYnJl
YWs7CisjZW5kaWYKKwkJY2FzZSBBRl9DT05OOgorCQkJKmZyb21sZW5wID0gc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9jb25uKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJKmZyb21sZW5wID0g
MDsKKwkJCWJyZWFrOworCQl9CisJCWlmICgqZnJvbWxlbnAgPiBmcm9tbGVuKSB7CisJCQkqZnJv
bWxlbnAgPSBmcm9tbGVuOworCQl9CisJfQorCWlmIChlcnJvciA9PSAwKSB7CisJCS8qIHJlYWR5
IHJldHVybiB2YWx1ZSAqLworCQlyZXR1cm4gKHVsZW4gLSBhdWlvLnVpb19yZXNpZCk7CisJfSBl
bHNlIHsKKwkJU0NUUF9QUklOVEYoIiVzOiBlcnJvciA9ICVkXG4iLCBfX2Z1bmNfXywgZXJyb3Ip
OworCQlyZXR1cm4gKC0xKTsKKwl9Cit9CisKK3NzaXplX3QKK3VzcnNjdHBfcmVjdnYoc3RydWN0
IHNvY2tldCAqc28sCisgICAgdm9pZCAqZGJ1ZiwKKyAgICBzaXplX3QgbGVuLAorICAgIHN0cnVj
dCBzb2NrYWRkciAqZnJvbSwKKyAgICBzb2NrbGVuX3QgKmZyb21sZW5wLAorICAgIHZvaWQgKmlu
Zm8sCisgICAgc29ja2xlbl90ICppbmZvbGVuLAorICAgIHVuc2lnbmVkIGludCAqaW5mb3R5cGUs
CisgICAgaW50ICptc2dfZmxhZ3MpCit7CisJc3RydWN0IHVpbyBhdWlvOworCXN0cnVjdCBpb3Zl
YyBpb3ZbU0NUUF9TTUFMTF9JT1ZFQ19TSVpFXTsKKwlzdHJ1Y3QgaW92ZWMgKnRpb3Y7CisJaW50
IGlvdmxlbiA9IDE7CisJc3NpemVfdCB1bGVuOworCWludCBpOworCXNvY2tsZW5fdCBmcm9tbGVu
OworCXN0cnVjdCBzY3RwX3JjdmluZm8gKnJjdjsKKwlzdHJ1Y3Qgc2N0cF9yZWN2dl9ybiAqcm47
CisJc3RydWN0IHNjdHBfZXh0cmN2aW5mbyBzZWluZm87CisKKwlpZiAoc28gPT0gTlVMTCkgewor
CQllcnJubyA9IEVCQURGOworCQlyZXR1cm4gKC0xKTsKKwl9CisJaW92WzBdLmlvdl9iYXNlID0g
ZGJ1ZjsKKwlpb3ZbMF0uaW92X2xlbiA9IGxlbjsKKworCWF1aW8udWlvX2lvdiA9IGlvdjsKKwlh
dWlvLnVpb19pb3ZjbnQgPSBpb3ZsZW47CisJYXVpby51aW9fc2VnZmxnID0gVUlPX1VTRVJTUEFD
RTsKKwlhdWlvLnVpb19ydyA9IFVJT19SRUFEOworCWF1aW8udWlvX29mZnNldCA9IDA7CQkJLyog
WFhYICovCisJYXVpby51aW9fcmVzaWQgPSAwOworCXRpb3YgPSBpb3Y7CisJZm9yIChpID0gMDsg
aSA8aW92bGVuOyBpKyssIHRpb3YrKykgeworCQlpZiAoKGF1aW8udWlvX3Jlc2lkICs9IHRpb3Yt
Pmlvdl9sZW4pIDwgMCkgeworCQkJZXJybm8gPSBFSU5WQUw7CisJCQlyZXR1cm4gKC0xKTsKKwkJ
fQorCX0KKwl1bGVuID0gYXVpby51aW9fcmVzaWQ7CisJaWYgKGZyb21sZW5wICE9IE5VTEwpIHsK
KwkJZnJvbWxlbiA9ICpmcm9tbGVucDsKKwl9IGVsc2UgeworCQlmcm9tbGVuID0gMDsKKwl9CisJ
ZXJybm8gPSBzY3RwX3NvcmVjdm1zZyhzbywgJmF1aW8sIChzdHJ1Y3QgbWJ1ZiAqKilOVUxMLAor
CQkgICAgZnJvbSwgZnJvbWxlbiwgbXNnX2ZsYWdzLAorCQkgICAgKHN0cnVjdCBzY3RwX3NuZHJj
dmluZm8gKikmc2VpbmZvLCAxKTsKKwlpZiAoZXJybm8pIHsKKwkJaWYgKChhdWlvLnVpb19yZXNp
ZCAhPSB1bGVuKSAmJgorCQkgICAgKGVycm5vID09IEVJTlRSIHx8CisjaWYgIWRlZmluZWQoX19O
ZXRCU0RfXykKKwkJICAgICBlcnJubyA9PSBFUkVTVEFSVCB8fAorI2VuZGlmCisJCSAgICAgZXJy
bm8gPT0gRVdPVUxEQkxPQ0spKSB7CisJCQllcnJubyA9IDA7CisJCX0KKwl9CisJaWYgKGVycm5v
ICE9IDApIHsKKwkJZ290byBvdXQ7CisJfQorCWlmICgoKm1zZ19mbGFncyAmIE1TR19OT1RJRklD
QVRJT04pID09IDApIHsKKwkJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKworCQlpbnAgPSAoc3Ry
dWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOworCQlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlu
cCwgU0NUUF9QQ0JfRkxBR1NfUkVDVk5YVElORk8pICYmCisJCSAgICBzY3RwX2lzX2ZlYXR1cmVf
b24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWUkNWSU5GTykgJiYKKwkJICAgICppbmZvbGVuID49
IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3JlY3Z2X3JuKSAmJgorCQkgICAgc2VpbmZv
LnNyZWluZm9fbmV4dF9mbGFncyAmIFNDVFBfTkVYVF9NU0dfQVZBSUwpIHsKKwkJCXJuID0gKHN0
cnVjdCBzY3RwX3JlY3Z2X3JuICopaW5mbzsKKwkJCXJuLT5yZWN2dl9yY3ZpbmZvLnJjdl9zaWQg
PSBzZWluZm8uc2luZm9fc3RyZWFtOworCQkJcm4tPnJlY3Z2X3JjdmluZm8ucmN2X3NzbiA9IHNl
aW5mby5zaW5mb19zc247CisJCQlybi0+cmVjdnZfcmN2aW5mby5yY3ZfZmxhZ3MgPSBzZWluZm8u
c2luZm9fZmxhZ3M7CisJCQlybi0+cmVjdnZfcmN2aW5mby5yY3ZfcHBpZCA9IHNlaW5mby5zaW5m
b19wcGlkOworCQkJcm4tPnJlY3Z2X3JjdmluZm8ucmN2X2NvbnRleHQgPSBzZWluZm8uc2luZm9f
Y29udGV4dDsKKwkJCXJuLT5yZWN2dl9yY3ZpbmZvLnJjdl90c24gPSBzZWluZm8uc2luZm9fdHNu
OworCQkJcm4tPnJlY3Z2X3JjdmluZm8ucmN2X2N1bXRzbiA9IHNlaW5mby5zaW5mb19jdW10c247
CisJCQlybi0+cmVjdnZfcmN2aW5mby5yY3ZfYXNzb2NfaWQgPSBzZWluZm8uc2luZm9fYXNzb2Nf
aWQ7CisJCQlybi0+cmVjdnZfbnh0aW5mby5ueHRfc2lkID0gc2VpbmZvLnNyZWluZm9fbmV4dF9z
dHJlYW07CisJCQlybi0+cmVjdnZfbnh0aW5mby5ueHRfZmxhZ3MgPSAwOworCQkJaWYgKHNlaW5m
by5zcmVpbmZvX25leHRfZmxhZ3MgJiBTQ1RQX05FWFRfTVNHX0lTX1VOT1JERVJFRCkgeworCQkJ
CXJuLT5yZWN2dl9ueHRpbmZvLm54dF9mbGFncyB8PSBTQ1RQX1VOT1JERVJFRDsKKwkJCX0KKwkJ
CWlmIChzZWluZm8uc3JlaW5mb19uZXh0X2ZsYWdzICYgU0NUUF9ORVhUX01TR19JU19OT1RJRklD
QVRJT04pIHsKKwkJCQlybi0+cmVjdnZfbnh0aW5mby5ueHRfZmxhZ3MgfD0gU0NUUF9OT1RJRklD
QVRJT047CisJCQl9CisJCQlpZiAoc2VpbmZvLnNyZWluZm9fbmV4dF9mbGFncyAmIFNDVFBfTkVY
VF9NU0dfSVNDT01QTEVURSkgeworCQkJCXJuLT5yZWN2dl9ueHRpbmZvLm54dF9mbGFncyB8PSBT
Q1RQX0NPTVBMRVRFOworCQkJfQorCQkJcm4tPnJlY3Z2X254dGluZm8ubnh0X3BwaWQgPSBzZWlu
Zm8uc3JlaW5mb19uZXh0X3BwaWQ7CisJCQlybi0+cmVjdnZfbnh0aW5mby5ueHRfbGVuZ3RoID0g
c2VpbmZvLnNyZWluZm9fbmV4dF9sZW5ndGg7CisJCQlybi0+cmVjdnZfbnh0aW5mby5ueHRfYXNz
b2NfaWQgPSBzZWluZm8uc3JlaW5mb19uZXh0X2FpZDsKKwkJCSppbmZvbGVuID0gKHNvY2tsZW5f
dClzaXplb2Yoc3RydWN0IHNjdHBfcmVjdnZfcm4pOworCQkJKmluZm90eXBlID0gU0NUUF9SRUNW
Vl9STjsKKwkJfSBlbHNlIGlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFH
U19SRUNWUkNWSU5GTykgJiYKKwkJICAgICAgICAgICAqaW5mb2xlbiA+PSAoc29ja2xlbl90KXNp
emVvZihzdHJ1Y3Qgc2N0cF9yY3ZpbmZvKSkgeworCQkJcmN2ID0gKHN0cnVjdCBzY3RwX3Jjdmlu
Zm8gKilpbmZvOworCQkJcmN2LT5yY3Zfc2lkID0gc2VpbmZvLnNpbmZvX3N0cmVhbTsKKwkJCXJj
di0+cmN2X3NzbiA9IHNlaW5mby5zaW5mb19zc247CisJCQlyY3YtPnJjdl9mbGFncyA9IHNlaW5m
by5zaW5mb19mbGFnczsKKwkJCXJjdi0+cmN2X3BwaWQgPSBzZWluZm8uc2luZm9fcHBpZDsKKwkJ
CXJjdi0+cmN2X2NvbnRleHQgPSBzZWluZm8uc2luZm9fY29udGV4dDsKKwkJCXJjdi0+cmN2X3Rz
biA9IHNlaW5mby5zaW5mb190c247CisJCQlyY3YtPnJjdl9jdW10c24gPSBzZWluZm8uc2luZm9f
Y3VtdHNuOworCQkJcmN2LT5yY3ZfYXNzb2NfaWQgPSBzZWluZm8uc2luZm9fYXNzb2NfaWQ7CisJ
CQkqaW5mb2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3JjdmluZm8pOworCQkJ
KmluZm90eXBlID0gU0NUUF9SRUNWVl9SQ1ZJTkZPOworCQl9IGVsc2UgeworCQkJKmluZm90eXBl
ID0gU0NUUF9SRUNWVl9OT0lORk87CisJCQkqaW5mb2xlbiA9IDA7CisJCX0KKwl9CisJaWYgKChm
cm9tbGVucCAhPSBOVUxMKSAmJgorCSAgICAoZnJvbWxlbiA+IDApICYmCisJICAgIChmcm9tICE9
IE5VTEwpICYmCisJICAgICh1bGVuID4gYXVpby51aW9fcmVzaWQpKSB7CisJCXN3aXRjaCAoZnJv
bS0+c2FfZmFtaWx5KSB7CisjaWYgZGVmaW5lZChJTkVUKQorCQljYXNlIEFGX0lORVQ6CisJCQkq
ZnJvbWxlbnAgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKwkJCWJyZWFrOworI2VuZGlm
CisjaWYgZGVmaW5lZChJTkVUNikKKwkJY2FzZSBBRl9JTkVUNjoKKwkJCSpmcm9tbGVucCA9IHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKwkJCWJyZWFrOworI2VuZGlmCisJCWNhc2UgQUZf
Q09OTjoKKwkJCSpmcm9tbGVucCA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7CisJCQli
cmVhazsKKwkJZGVmYXVsdDoKKwkJCSpmcm9tbGVucCA9IDA7CisJCQlicmVhazsKKwkJfQorCQlp
ZiAoKmZyb21sZW5wID4gZnJvbWxlbikgeworCQkJKmZyb21sZW5wID0gZnJvbWxlbjsKKwkJfQor
CX0KK291dDoKKwlpZiAoZXJybm8gPT0gMCkgeworCQkvKiByZWFkeSByZXR1cm4gdmFsdWUgKi8K
KwkJcmV0dXJuICh1bGVuIC0gYXVpby51aW9fcmVzaWQpOworCX0gZWxzZSB7CisJCXJldHVybiAo
LTEpOworCX0KK30KKworCisKKworLyogVGFrZW4gZnJvbSAgL3NyYy9zeXMva2Vybi91aXBjX3Nv
Y2tldC5jCisgKiBhbmQgbW9kaWZpZWQgZm9yIF9fVXNlcnNwYWNlX18KKyAqIHNvY3JlYXRlIHJl
dHVybnMgYSBzb2NrZXQuICBUaGUgc29ja2V0IHNob3VsZCBiZQorICogY2xvc2VkIHdpdGggc29j
bG9zZSgpLgorICovCitpbnQKK3NvY3JlYXRlKGludCBkb20sIHN0cnVjdCBzb2NrZXQgKiphc28s
IGludCB0eXBlLCBpbnQgcHJvdG8pCit7CisJc3RydWN0IHNvY2tldCAqc287CisJaW50IGVycm9y
OworCisJaWYgKChkb20gIT0gQUZfQ09OTikgJiYgKGRvbSAhPSBBRl9JTkVUKSAmJiAoZG9tICE9
IEFGX0lORVQ2KSkgeworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQorCWlmICgodHlwZSAhPSBTT0NL
X1NUUkVBTSkgJiYgKHR5cGUgIT0gU09DS19TRVFQQUNLRVQpKSB7CisJCXJldHVybiAoRUlOVkFM
KTsKKwl9CisJaWYgKHByb3RvICE9IElQUFJPVE9fU0NUUCkgeworCQlyZXR1cm4gKEVJTlZBTCk7
CisJfQorCisJc28gPSBzb2FsbG9jKCk7CisJaWYgKHNvID09IE5VTEwpIHsKKwkJcmV0dXJuIChF
Tk9CVUZTKTsKKwl9CisKKwkvKgorCSAqIHNvX2luY29tcCByZXByZXNlbnRzIGEgcXVldWUgb2Yg
Y29ubmVjdGlvbnMgdGhhdAorCSAqIG11c3QgYmUgY29tcGxldGVkIGF0IHByb3RvY29sIGxldmVs
IGJlZm9yZSBiZWluZworCSAqIHJldHVybmVkLiBzb19jb21wIGZpZWxkIGhlYWRzIGEgbGlzdCBv
ZiBzb2NrZXRzCisJICogdGhhdCBhcmUgcmVhZHkgdG8gYmUgcmV0dXJuZWQgdG8gdGhlIGxpc3Rl
bmluZyBwcm9jZXNzCisJICpfX1VzZXJzcGFjZV9fIFRoZXNlIHF1ZXVlcyBhcmUgYmVpbmcgdXNl
ZCBhdCBhIG51bWJlciBvZiBwbGFjZXMgbGlrZSBhY2NlcHQgZXRjLgorCSAqLworCVRBSUxRX0lO
SVQoJnNvLT5zb19pbmNvbXApOworCVRBSUxRX0lOSVQoJnNvLT5zb19jb21wKTsKKwlzby0+c29f
dHlwZSA9IHR5cGU7CisJc28tPnNvX2NvdW50ID0gMTsKKwlzby0+c29fZG9tID0gZG9tOworCS8q
CisJICogQXV0by1zaXppbmcgb2Ygc29ja2V0IGJ1ZmZlcnMgaXMgbWFuYWdlZCBieSB0aGUgcHJv
dG9jb2xzIGFuZAorCSAqIHRoZSBhcHByb3ByaWF0ZSBmbGFncyBtdXN0IGJlIHNldCBpbiB0aGUg
cHJ1X2F0dGFjaCBmdW5jdGlvbi4KKwkgKiBGb3IgX19Vc2Vyc3BhY2VfXyBUaGUgcHJ1X2F0dGFj
aCBmdW5jdGlvbiBpbiB0aGlzIGNhc2UgaXMgc2N0cF9hdHRhY2guCisJICovCisJc3dpdGNoIChk
b20pIHsKKyNpZiBkZWZpbmVkKElORVQpCisJY2FzZSBBRl9JTkVUOgorCQllcnJvciA9IHNjdHBf
YXR0YWNoKHNvLCBwcm90bywgU0NUUF9ERUZBVUxUX1ZSRklEKTsKKwkJYnJlYWs7CisjZW5kaWYK
KyNpZiBkZWZpbmVkKElORVQ2KQorCWNhc2UgQUZfSU5FVDY6CisJCWVycm9yID0gc2N0cDZfYXR0
YWNoKHNvLCBwcm90bywgU0NUUF9ERUZBVUxUX1ZSRklEKTsKKwkJYnJlYWs7CisjZW5kaWYKKwlj
YXNlIEFGX0NPTk46CisJCWVycm9yID0gc2N0cGNvbm5fYXR0YWNoKHNvLCBwcm90bywgU0NUUF9E
RUZBVUxUX1ZSRklEKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyb3IgPSBFQUZOT1NVUFBP
UlQ7CisJCWJyZWFrOworCX0KKwlpZiAoZXJyb3IpIHsKKwkJS0FTU0VSVChzby0+c29fY291bnQg
PT0gMSwgKCJzb2NyZWF0ZTogc29fY291bnQgJWQiLCBzby0+c29fY291bnQpKTsKKwkJc28tPnNv
X2NvdW50ID0gMDsKKwkJc29kZWFsbG9jKHNvKTsKKwkJcmV0dXJuIChlcnJvcik7CisJfQorCSph
c28gPSBzbzsKKwlyZXR1cm4gKDApOworfQorCisKKy8qIFRha2VuIGZyb20gIC9zcmMvc3lzL2tl
cm4vdWlwY19zeXNjYWxscy5jCisgKiBhbmQgbW9kaWZpZWQgZm9yIF9fVXNlcnNwYWNlX18KKyAq
IFJlbW92aW5nIHN0cnVjdCB0aHJlYWQgdGQuCisgKi8KK3N0cnVjdCBzb2NrZXQgKgordXNlcnNw
YWNlX3NvY2tldChpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sKQoreworCXN0cnVj
dCBzb2NrZXQgKnNvID0gTlVMTDsKKworCWVycm5vID0gc29jcmVhdGUoZG9tYWluLCAmc28sIHR5
cGUsIHByb3RvY29sKTsKKwlpZiAoZXJybm8pIHsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJLyoK
KwkgKiBUaGUgb3JpZ2luYWwgc29ja2V0IGNhbGwgcmV0dXJucyB0aGUgZmlsZSBkZXNjcmlwdG9y
IGZkLgorCSAqIHRkLT50ZF9yZXR2YWxbMF0gPSBmZC4KKwkgKiBXZSBhcmUgcmV0dXJuaW5nIHN0
cnVjdCBzb2NrZXQgKnNvLgorCSAqLworCXJldHVybiAoc28pOworfQorCitzdHJ1Y3Qgc29ja2V0
ICoKK3VzcnNjdHBfc29ja2V0KGludCBkb21haW4sIGludCB0eXBlLCBpbnQgcHJvdG9jb2wsCisJ
ICAgICAgIGludCAoKnJlY2VpdmVfY2IpKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuaW9uIHNjdHBf
c29ja3N0b3JlIGFkZHIsIHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2aW5mbywgaW50IGZsYWdzLCB2b2lk
ICp1bHBfaW5mbyksCisJICAgICAgIGludCAoKnNlbmRfY2IpKHN0cnVjdCBzb2NrZXQgKnNvY2ss
IHVpbnQzMl90IHNiX2ZyZWUsIHZvaWQgKnVscF9pbmZvKSwKKwkgICAgICAgdWludDMyX3Qgc2Jf
dGhyZXNob2xkLAorCSAgICAgICB2b2lkICp1bHBfaW5mbykKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpz
byA9IE5VTEw7CisKKwlpZiAoKHByb3RvY29sID09IElQUFJPVE9fU0NUUCkgJiYgKFNDVFBfQkFT
RV9WQVIoc2N0cF9wY2JfaW5pdGlhbGl6ZWQpID09IDApKSB7CisJCWVycm5vID0gRVBST1RPTk9T
VVBQT1JUOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlpZiAoKHJlY2VpdmVfY2IgPT0gTlVMTCkg
JiYKKwkgICAgKChzZW5kX2NiICE9IE5VTEwpIHx8IChzYl90aHJlc2hvbGQgIT0gMCkgfHwgKHVs
cF9pbmZvICE9IE5VTEwpKSkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIChOVUxMKTsK
Kwl9CisJaWYgKChkb21haW4gPT0gQUZfQ09OTikgJiYgKFNDVFBfQkFTRV9WQVIoY29ubl9vdXRw
dXQpID09IE5VTEwpKSB7CisJCWVycm5vID0gRUFGTk9TVVBQT1JUOworCQlyZXR1cm4gKE5VTEwp
OworCX0KKwllcnJubyA9IHNvY3JlYXRlKGRvbWFpbiwgJnNvLCB0eXBlLCBwcm90b2NvbCk7CisJ
aWYgKGVycm5vKSB7CisJCXJldHVybiAoTlVMTCk7CisJfQorCS8qCisJICogVGhlIG9yaWdpbmFs
IHNvY2tldCBjYWxsIHJldHVybnMgdGhlIGZpbGUgZGVzY3JpcHRvciBmZC4KKwkgKiB0ZC0+dGRf
cmV0dmFsWzBdID0gZmQuCisJICogV2UgYXJlIHJldHVybmluZyBzdHJ1Y3Qgc29ja2V0ICpzby4K
KwkgKi8KKwlyZWdpc3Rlcl9yZWN2X2NiKHNvLCByZWNlaXZlX2NiKTsKKwlyZWdpc3Rlcl9zZW5k
X2NiKHNvLCBzYl90aHJlc2hvbGQsIHNlbmRfY2IpOworCXJlZ2lzdGVyX3VscF9pbmZvKHNvLCB1
bHBfaW5mbyk7CisJcmV0dXJuIChzbyk7Cit9CisKKwordV9sb25nCXNiX21heCA9IFNCX01BWDsK
K3VfbG9uZyBzYl9tYXhfYWRqID0KKyAgICAgICBTQl9NQVggKiBNQ0xCWVRFUyAvIChNU0laRSAr
IE1DTEJZVEVTKTsgLyogYWRqdXN0ZWQgc2JfbWF4ICovCisKK3N0YXRpYwl1X2xvbmcgc2JfZWZm
aWNpZW5jeSA9IDg7CS8qIHBhcmFtZXRlciBmb3Igc2JyZXNlcnZlKCkgKi8KKworLyoKKyAqIEFs
bG90IG1idWZzIHRvIGEgc29ja2J1Zi4gIEF0dGVtcHQgdG8gc2NhbGUgbWJtYXggc28gdGhhdCBt
YmNudCBkb2Vzbid0CisgKiBiZWNvbWUgbGltaXRpbmcgaWYgYnVmZmVyaW5nIGVmZmljaWVuY3kg
aXMgbmVhciB0aGUgbm9ybWFsIGNhc2UuCisgKi8KK2ludAorc2JyZXNlcnZlX2xvY2tlZChzdHJ1
Y3Qgc29ja2J1ZiAqc2IsIHVfbG9uZyBjYywgc3RydWN0IHNvY2tldCAqc28pCit7CisJU09DS0JV
Rl9MT0NLX0FTU0VSVChzYik7CisJc2ItPnNiX21ibWF4ID0gKHVfaW50KW1pbihjYyAqIHNiX2Vm
ZmljaWVuY3ksIHNiX21heCk7CisJc2ItPnNiX2hpd2F0ID0gKHVfaW50KWNjOworCWlmIChzYi0+
c2JfbG93YXQgPiAoaW50KXNiLT5zYl9oaXdhdCkKKwkJc2ItPnNiX2xvd2F0ID0gKGludClzYi0+
c2JfaGl3YXQ7CisJcmV0dXJuICgxKTsKK30KKworc3RhdGljIGludAorc2JyZXNlcnZlKHN0cnVj
dCBzb2NrYnVmICpzYiwgdV9sb25nIGNjLCBzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlpbnQgZXJy
b3I7CisKKwlTT0NLQlVGX0xPQ0soc2IpOworCWVycm9yID0gc2JyZXNlcnZlX2xvY2tlZChzYiwg
Y2MsIHNvKTsKKwlTT0NLQlVGX1VOTE9DSyhzYik7CisJcmV0dXJuIChlcnJvcik7Cit9CisKK2lu
dAorc29yZXNlcnZlKHN0cnVjdCBzb2NrZXQgKnNvLCB1X2xvbmcgc25kY2MsIHVfbG9uZyByY3Zj
YykKK3sKKwlTT0NLQlVGX0xPQ0soJnNvLT5zb19zbmQpOworCVNPQ0tCVUZfTE9DSygmc28tPnNv
X3Jjdik7CisJc28tPnNvX3NuZC5zYl9oaXdhdCA9ICh1aW50MzJfdClzbmRjYzsKKwlzby0+c29f
cmN2LnNiX2hpd2F0ID0gKHVpbnQzMl90KXJjdmNjOworCisJaWYgKHNicmVzZXJ2ZV9sb2NrZWQo
JnNvLT5zb19zbmQsIHNuZGNjLCBzbykgPT0gMCkgeworCQlnb3RvIGJhZDsKKwl9CisJaWYgKHNi
cmVzZXJ2ZV9sb2NrZWQoJnNvLT5zb19yY3YsIHJjdmNjLCBzbykgPT0gMCkgeworCQlnb3RvIGJh
ZDsKKwl9CisJaWYgKHNvLT5zb19yY3Yuc2JfbG93YXQgPT0gMCkKKwkJc28tPnNvX3Jjdi5zYl9s
b3dhdCA9IDE7CisJaWYgKHNvLT5zb19zbmQuc2JfbG93YXQgPT0gMCkKKwkJc28tPnNvX3NuZC5z
Yl9sb3dhdCA9IE1DTEJZVEVTOworCWlmIChzby0+c29fc25kLnNiX2xvd2F0ID4gKGludClzby0+
c29fc25kLnNiX2hpd2F0KQorCQlzby0+c29fc25kLnNiX2xvd2F0ID0gKGludClzby0+c29fc25k
LnNiX2hpd2F0OworCVNPQ0tCVUZfVU5MT0NLKCZzby0+c29fcmN2KTsKKwlTT0NLQlVGX1VOTE9D
Sygmc28tPnNvX3NuZCk7CisJcmV0dXJuICgwKTsKKworIGJhZDoKKwlTT0NLQlVGX1VOTE9DSygm
c28tPnNvX3Jjdik7CisJU09DS0JVRl9VTkxPQ0soJnNvLT5zb19zbmQpOworCXJldHVybiAoRU5P
QlVGUyk7Cit9CisKKworLyogVGFrZW4gZnJvbSAgL3NyYy9zeXMva2Vybi91aXBjX3NvY2tidWYu
YworICogYW5kIG1vZGlmaWVkIGZvciBfX1VzZXJzcGFjZV9fCisgKi8KKwordm9pZAorc293YWtl
dXAoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYnVmICpzYikKK3sKKworCVNPQ0tCVUZf
TE9DS19BU1NFUlQoc2IpOworCisJc2ItPnNiX2ZsYWdzICY9IH5TQl9TRUw7CisJaWYgKHNiLT5z
Yl9mbGFncyAmIFNCX1dBSVQpIHsKKwkJc2ItPnNiX2ZsYWdzICY9IH5TQl9XQUlUOworI2lmIGRl
ZmluZWQoX1dJTjMyKQorCQlXYWtlQWxsQ29uZGl0aW9uVmFyaWFibGUoJihzYiktPnNiX2NvbmQp
OworI2Vsc2UKKwkJcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmKHNiKS0+c2JfY29uZCk7CisjZW5k
aWYKKwl9CisJU09DS0JVRl9VTkxPQ0soc2IpOworfQorCisKKy8qIFRha2VuIGZyb20gIC9zcmMv
c3lzL2tlcm4vdWlwY19zb2NrZXQuYworICogYW5kIG1vZGlmaWVkIGZvciBfX1VzZXJzcGFjZV9f
CisgKi8KKworaW50Citzb2JpbmQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAq
bmFtKQoreworCXN3aXRjaCAobmFtLT5zYV9mYW1pbHkpIHsKKyNpZiBkZWZpbmVkKElORVQpCisJ
Y2FzZSBBRl9JTkVUOgorCQlyZXR1cm4gKHNjdHBfYmluZChzbywgbmFtKSk7CisjZW5kaWYKKyNp
ZiBkZWZpbmVkKElORVQ2KQorCWNhc2UgQUZfSU5FVDY6CisJCXJldHVybiAoc2N0cDZfYmluZChz
bywgbmFtLCBOVUxMKSk7CisjZW5kaWYKKwljYXNlIEFGX0NPTk46CisJCXJldHVybiAoc2N0cGNv
bm5fYmluZChzbywgbmFtKSk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIEVBRk5PU1VQUE9SVDsKKwl9
Cit9CisKKy8qIFRha2VuIGZyb20gIC9zcmMvc3lzL2tlcm4vdWlwY19zeXNjYWxscy5jCisgKiBh
bmQgbW9kaWZpZWQgZm9yIF9fVXNlcnNwYWNlX18KKyAqLworCitpbnQKK3VzcnNjdHBfYmluZChz
dHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICpuYW1lLCBpbnQgbmFtZWxlbikKK3sK
KwlzdHJ1Y3Qgc29ja2FkZHIgKnNhOworCisJaWYgKHNvID09IE5VTEwpIHsKKwkJZXJybm8gPSBF
QkFERjsKKwkJcmV0dXJuICgtMSk7CisJfQorCWlmICgoZXJybm8gPSBnZXRzb2NrYWRkcigmc2Es
IChjYWRkcl90KW5hbWUsIG5hbWVsZW4pKSAhPSAwKQorCQlyZXR1cm4gKC0xKTsKKworCWVycm5v
ID0gc29iaW5kKHNvLCBzYSk7CisJRlJFRShzYSwgTV9TT05BTUUpOworCWlmIChlcnJubykgewor
CQlyZXR1cm4gKC0xKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gKDApOworCX0KK30KKworaW50Cit1
c2Vyc3BhY2VfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICpuYW1lLCBp
bnQgbmFtZWxlbikKK3sKKwlyZXR1cm4gKHVzcnNjdHBfYmluZChzbywgbmFtZSwgbmFtZWxlbikp
OworfQorCisvKiBUYWtlbiBmcm9tICAvc3JjL3N5cy9rZXJuL3VpcGNfc29ja2V0LmMKKyAqIGFu
ZCBtb2RpZmllZCBmb3IgX19Vc2Vyc3BhY2VfXworICovCisKK2ludAorc29saXN0ZW4oc3RydWN0
IHNvY2tldCAqc28sIGludCBiYWNrbG9nKQoreworCWlmIChzbyA9PSBOVUxMKSB7CisJCXJldHVy
biAoRUJBREYpOworCX0gZWxzZSB7CisJCXJldHVybiAoc2N0cF9saXN0ZW4oc28sIGJhY2tsb2cs
IE5VTEwpKTsKKwl9Cit9CisKKworaW50Citzb2xpc3Rlbl9wcm90b19jaGVjayhzdHJ1Y3Qgc29j
a2V0ICpzbykKK3sKKworCVNPQ0tfTE9DS19BU1NFUlQoc28pOworCisJaWYgKHNvLT5zb19zdGF0
ZSAmIChTU19JU0NPTk5FQ1RFRCB8IFNTX0lTQ09OTkVDVElORyB8CisJICAgIFNTX0lTRElTQ09O
TkVDVElORykpCisJCXJldHVybiAoRUlOVkFMKTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMg
aW50IHNvbWF4Y29ubiA9IFNPTUFYQ09OTjsKKwordm9pZAorc29saXN0ZW5fcHJvdG8oc3RydWN0
IHNvY2tldCAqc28sIGludCBiYWNrbG9nKQoreworCisJU09DS19MT0NLX0FTU0VSVChzbyk7CisK
KwlpZiAoYmFja2xvZyA8IDAgfHwgYmFja2xvZyA+IHNvbWF4Y29ubikKKwkJYmFja2xvZyA9IHNv
bWF4Y29ubjsKKwlzby0+c29fcWxpbWl0ID0gYmFja2xvZzsKKwlzby0+c29fb3B0aW9ucyB8PSBT
Q1RQX1NPX0FDQ0VQVENPTk47Cit9CisKKworCisKKy8qIFRha2VuIGZyb20gIC9zcmMvc3lzL2tl
cm4vdWlwY19zeXNjYWxscy5jCisgKiBhbmQgbW9kaWZpZWQgZm9yIF9fVXNlcnNwYWNlX18KKyAq
LworCitpbnQKK3VzcnNjdHBfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgYmFja2xvZykK
K3sKKwllcnJubyA9IHNvbGlzdGVuKHNvLCBiYWNrbG9nKTsKKwlpZiAoZXJybm8pIHsKKwkJcmV0
dXJuICgtMSk7CisJfSBlbHNlIHsKKwkJcmV0dXJuICgwKTsKKwl9Cit9CisKK2ludAordXNlcnNw
YWNlX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGJhY2tsb2cpCit7CisJcmV0dXJuICh1
c3JzY3RwX2xpc3RlbihzbywgYmFja2xvZykpOworfQorCisvKiBUYWtlbiBmcm9tICAvc3JjL3N5
cy9rZXJuL3VpcGNfc29ja2V0LmMKKyAqIGFuZCBtb2RpZmllZCBmb3IgX19Vc2Vyc3BhY2VfXwor
ICovCisKK2ludAorc29hY2NlcHQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAq
Km5hbSkKK3sKKwlpbnQgZXJyb3I7CisKKwlTT0NLX0xPQ0soc28pOworCUtBU1NFUlQoKHNvLT5z
b19zdGF0ZSAmIFNTX05PRkRSRUYpICE9IDAsICgic29hY2NlcHQ6ICFOT0ZEUkVGIikpOworCXNv
LT5zb19zdGF0ZSAmPSB+U1NfTk9GRFJFRjsKKwlTT0NLX1VOTE9DSyhzbyk7CisJZXJyb3IgPSBz
Y3RwX2FjY2VwdChzbywgbmFtKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworCisKKy8qIFRha2Vu
IGZyb20gIC9zcmMvc3lzL2tlcm4vdWlwY19zeXNjYWxscy5jCisgKiBrZXJuX2FjY2VwdCBtb2Rp
ZmllZCBmb3IgX19Vc2Vyc3BhY2VfXworICovCitpbnQKK3VzZXJfYWNjZXB0KHN0cnVjdCBzb2Nr
ZXQgKmhlYWQsICBzdHJ1Y3Qgc29ja2FkZHIgKipuYW1lLCBzb2NrbGVuX3QgKm5hbWVsZW4sIHN0
cnVjdCBzb2NrZXQgKipwdHJfYWNjZXB0X3JldF9zb2NrKQoreworCXN0cnVjdCBzb2NrYWRkciAq
c2EgPSBOVUxMOworCWludCBlcnJvcjsKKwlzdHJ1Y3Qgc29ja2V0ICpzbyA9IE5VTEw7CisKKwor
CWlmIChuYW1lKSB7CisJCSpuYW1lID0gTlVMTDsKKwl9CisKKwlpZiAoKGhlYWQtPnNvX29wdGlv
bnMgJiBTQ1RQX1NPX0FDQ0VQVENPTk4pID09IDApIHsKKwkJZXJyb3IgPSBFSU5WQUw7CisJCWdv
dG8gZG9uZTsKKwl9CisKKwlBQ0NFUFRfTE9DSygpOworCWlmICgoaGVhZC0+c29fc3RhdGUgJiBT
U19OQklPKSAmJiBUQUlMUV9FTVBUWSgmaGVhZC0+c29fY29tcCkpIHsKKwkJQUNDRVBUX1VOTE9D
SygpOworCQllcnJvciA9IEVXT1VMREJMT0NLOworCQlnb3RvIG5vY29ubmVjdGlvbjsKKwl9CisJ
d2hpbGUgKFRBSUxRX0VNUFRZKCZoZWFkLT5zb19jb21wKSAmJiBoZWFkLT5zb19lcnJvciA9PSAw
KSB7CisJCWlmIChoZWFkLT5zb19yY3Yuc2Jfc3RhdGUgJiBTQlNfQ0FOVFJDVk1PUkUpIHsKKwkJ
CWhlYWQtPnNvX2Vycm9yID0gRUNPTk5BQk9SVEVEOworCQkJYnJlYWs7CisJCX0KKyNpZiBkZWZp
bmVkKF9XSU4zMikKKwkJaWYgKFNsZWVwQ29uZGl0aW9uVmFyaWFibGVDUygmYWNjZXB0X2NvbmQs
ICZhY2NlcHRfbXR4LCBJTkZJTklURSkpCisJCQllcnJvciA9IDA7CisJCWVsc2UKKwkJCWVycm9y
ID0gR2V0TGFzdEVycm9yKCk7CisjZWxzZQorCQllcnJvciA9IHB0aHJlYWRfY29uZF93YWl0KCZh
Y2NlcHRfY29uZCwgJmFjY2VwdF9tdHgpOworI2VuZGlmCisJCWlmIChlcnJvcikgeworCQkJQUND
RVBUX1VOTE9DSygpOworCQkJZ290byBub2Nvbm5lY3Rpb247CisJCX0KKwl9CisJaWYgKGhlYWQt
PnNvX2Vycm9yKSB7CisJCWVycm9yID0gaGVhZC0+c29fZXJyb3I7CisJCWhlYWQtPnNvX2Vycm9y
ID0gMDsKKwkJQUNDRVBUX1VOTE9DSygpOworCQlnb3RvIG5vY29ubmVjdGlvbjsKKwl9CisJc28g
PSBUQUlMUV9GSVJTVCgmaGVhZC0+c29fY29tcCk7CisJS0FTU0VSVCghKHNvLT5zb19xc3RhdGUg
JiBTUV9JTkNPTVApLCAoImFjY2VwdDE6IHNvIFNRX0lOQ09NUCIpKTsKKwlLQVNTRVJUKHNvLT5z
b19xc3RhdGUgJiBTUV9DT01QLCAoImFjY2VwdDE6IHNvIG5vdCBTUV9DT01QIikpOworCisJLyoK
KwkgKiBCZWZvcmUgY2hhbmdpbmcgdGhlIGZsYWdzIG9uIHRoZSBzb2NrZXQsIHdlIGhhdmUgdG8g
YnVtcCB0aGUKKwkgKiByZWZlcmVuY2UgY291bnQuICBPdGhlcndpc2UsIGlmIHRoZSBwcm90b2Nv
bCBjYWxscyBzb2ZyZWUoKSwKKwkgKiB0aGUgc29ja2V0IHdpbGwgYmUgcmVsZWFzZWQgZHVlIHRv
IGEgemVybyByZWZjb3VudC4KKwkgKi8KKwlTT0NLX0xPQ0soc28pOwkJCS8qIHNvcmVmKCkgYW5k
IHNvX3N0YXRlIHVwZGF0ZSAqLworCXNvcmVmKHNvKTsJCQkvKiBmaWxlIGRlc2NyaXB0b3IgcmVm
ZXJlbmNlICovCisKKwlUQUlMUV9SRU1PVkUoJmhlYWQtPnNvX2NvbXAsIHNvLCBzb19saXN0KTsK
KwloZWFkLT5zb19xbGVuLS07CisJc28tPnNvX3N0YXRlIHw9IChoZWFkLT5zb19zdGF0ZSAmIFNT
X05CSU8pOworCXNvLT5zb19xc3RhdGUgJj0gflNRX0NPTVA7CisJc28tPnNvX2hlYWQgPSBOVUxM
OworCVNPQ0tfVU5MT0NLKHNvKTsKKwlBQ0NFUFRfVU5MT0NLKCk7CisKKworCS8qCisJICogVGhl
IG9yaWdpbmFsIGFjY2VwdCByZXR1cm5zIGZkIHZhbHVlIHZpYSB0ZC0+dGRfcmV0dmFsWzBdID0g
ZmQ7CisJICogd2Ugd2lsbCByZXR1cm4gdGhlIHNvY2tldCBmb3IgYWNjZXB0ZWQgY29ubmVjdGlv
bi4KKwkgKi8KKworCWVycm9yID0gc29hY2NlcHQoc28sICZzYSk7CisJaWYgKGVycm9yKSB7CisJ
CS8qCisJCSAqIHJldHVybiBhIG5hbWVsZW4gb2YgemVybyBmb3Igb2xkZXIgY29kZSB3aGljaCBt
aWdodAorCQkgKiBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGFjY2VwdC4KKwkJICovCisJ
CWlmIChuYW1lKQorCQkJKm5hbWVsZW4gPSAwOworCQlnb3RvIG5vY29ubmVjdGlvbjsKKwl9CisJ
aWYgKHNhID09IE5VTEwpIHsKKwkJaWYgKG5hbWUpCisJCQkqbmFtZWxlbiA9IDA7CisJCWdvdG8g
ZG9uZTsKKwl9CisJaWYgKG5hbWUpIHsKKyNpZmRlZiBIQVZFX1NBX0xFTgorCQkvKiBjaGVjayBz
YV9sZW4gYmVmb3JlIGl0IGlzIGRlc3Ryb3llZCAqLworCQlpZiAoKm5hbWVsZW4gPiBzYS0+c2Ff
bGVuKSB7CisJCQkqbmFtZWxlbiA9IHNhLT5zYV9sZW47CisJCX0KKyNlbHNlCisJCXNvY2tsZW5f
dCBzYV9sZW47CisKKwkJc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQlj
YXNlIEFGX0lORVQ6CisJCQlzYV9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKwkJ
CWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJY2FzZSBBRl9JTkVUNjoKKwkJCXNhX2xl
biA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKwkJCWJyZWFrOworI2VuZGlmCisJCWNh
c2UgQUZfQ09OTjoKKwkJCXNhX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7CisJ
CQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNhX2xlbiA9IDA7CisJCQlicmVhazsKKwkJfQorCQlp
ZiAoKm5hbWVsZW4gPiBzYV9sZW4pIHsKKwkJCSpuYW1lbGVuID0gc2FfbGVuOworCQl9CisjZW5k
aWYKKwkJKm5hbWUgPSBzYTsKKwkJc2EgPSBOVUxMOworCX0KK25vY29ubmVjdGlvbjoKKwlpZiAo
c2EpIHsKKwkJRlJFRShzYSwgTV9TT05BTUUpOworCX0KKworZG9uZToKKwkqcHRyX2FjY2VwdF9y
ZXRfc29jayA9IHNvOworCXJldHVybiAoZXJyb3IpOworfQorCisKKworLyogVGFrZW4gZnJvbSAg
L3NyYy9zeXMva2Vybi91aXBjX3N5c2NhbGxzLmMKKyAqIGFuZCBtb2RpZmllZCBmb3IgX19Vc2Vy
c3BhY2VfXworICovCisvKgorICogYWNjZXB0MSgpCisgKi8KK3N0YXRpYyBpbnQKK2FjY2VwdDEo
c3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYW5hbWUsIHNvY2tsZW5fdCAqYW5h
bWVsZW4sIHN0cnVjdCBzb2NrZXQgKipwdHJfYWNjZXB0X3JldF9zb2NrKQoreworCXN0cnVjdCBz
b2NrYWRkciAqbmFtZTsKKwlzb2NrbGVuX3QgbmFtZWxlbjsKKwlpbnQgZXJyb3I7CisKKwlpZiAo
c28gPT0gTlVMTCkgeworCQlyZXR1cm4gKEVCQURGKTsKKwl9CisJaWYgKGFuYW1lID09IE5VTEwp
IHsKKwkJcmV0dXJuICh1c2VyX2FjY2VwdChzbywgTlVMTCwgTlVMTCwgcHRyX2FjY2VwdF9yZXRf
c29jaykpOworCX0KKworCWVycm9yID0gY29weWluKGFuYW1lbGVuLCAmbmFtZWxlbiwgc2l6ZW9m
IChuYW1lbGVuKSk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gKGVycm9yKTsKKworCWVycm9yID0g
dXNlcl9hY2NlcHQoc28sICZuYW1lLCAmbmFtZWxlbiwgcHRyX2FjY2VwdF9yZXRfc29jayk7CisK
KwkvKgorCSAqIHJldHVybiBhIG5hbWVsZW4gb2YgemVybyBmb3Igb2xkZXIgY29kZSB3aGljaCBt
aWdodAorCSAqIGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gYWNjZXB0LgorCSAqLworCWlm
IChlcnJvcikgeworCQkodm9pZCkgY29weW91dCgmbmFtZWxlbiwKKwkJICAgIGFuYW1lbGVuLCBz
aXplb2YoKmFuYW1lbGVuKSk7CisJCXJldHVybiAoZXJyb3IpOworCX0KKworCWlmIChlcnJvciA9
PSAwICYmIG5hbWUgIT0gTlVMTCkgeworCQllcnJvciA9IGNvcHlvdXQobmFtZSwgYW5hbWUsIG5h
bWVsZW4pOworCX0KKwlpZiAoZXJyb3IgPT0gMCkgeworCQllcnJvciA9IGNvcHlvdXQoJm5hbWVs
ZW4sIGFuYW1lbGVuLCBzaXplb2YobmFtZWxlbikpOworCX0KKworCWlmIChuYW1lKSB7CisJCUZS
RUUobmFtZSwgTV9TT05BTUUpOworCX0KKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3RydWN0IHNv
Y2tldCAqCit1c3JzY3RwX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRy
ICphbmFtZSwgc29ja2xlbl90ICphbmFtZWxlbikKK3sKKwlzdHJ1Y3Qgc29ja2V0ICphY2NlcHRf
cmV0dXJuX3NvY2sgPSBOVUxMOworCisJZXJybm8gPSBhY2NlcHQxKHNvLCBhbmFtZSwgYW5hbWVs
ZW4sICZhY2NlcHRfcmV0dXJuX3NvY2spOworCWlmIChlcnJubykgeworCQlyZXR1cm4gKE5VTEwp
OworCX0gZWxzZSB7CisJCXJldHVybiAoYWNjZXB0X3JldHVybl9zb2NrKTsKKwl9Cit9CisKK3N0
cnVjdCBzb2NrZXQgKgordXNlcnNwYWNlX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0
IHNvY2thZGRyICphbmFtZSwgc29ja2xlbl90ICphbmFtZWxlbikKK3sKKwlyZXR1cm4gKHVzcnNj
dHBfYWNjZXB0KHNvLCBhbmFtZSwgYW5hbWVsZW4pKTsKK30KKworc3RydWN0IHNvY2tldCAqCit1
c3JzY3RwX3BlZWxvZmYoc3RydWN0IHNvY2tldCAqaGVhZCwgc2N0cF9hc3NvY190IGlkKQorewor
CXN0cnVjdCBzb2NrZXQgKnNvOworCisJaWYgKChlcnJubyA9IHNjdHBfY2FuX3BlZWxfb2ZmKGhl
YWQsIGlkKSkgIT0gMCkgeworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlpZiAoKHNvID0gc29uZXdj
b25uKGhlYWQsIFNTX0lTQ09OTkVDVEVEKSkgPT0gTlVMTCkgeworCQlyZXR1cm4gKE5VTEwpOwor
CX0KKwlBQ0NFUFRfTE9DSygpOworCVNPQ0tfTE9DSyhzbyk7CisJc29yZWYoc28pOworCVRBSUxR
X1JFTU9WRSgmaGVhZC0+c29fY29tcCwgc28sIHNvX2xpc3QpOworCWhlYWQtPnNvX3FsZW4tLTsK
Kwlzby0+c29fc3RhdGUgfD0gKGhlYWQtPnNvX3N0YXRlICYgU1NfTkJJTyk7CisJc28tPnNvX3Fz
dGF0ZSAmPSB+U1FfQ09NUDsKKwlzby0+c29faGVhZCA9IE5VTEw7CisJU09DS19VTkxPQ0soc28p
OworCUFDQ0VQVF9VTkxPQ0soKTsKKwlpZiAoKGVycm5vID0gc2N0cF9kb19wZWVsb2ZmKGhlYWQs
IHNvLCBpZCkpICE9IDApIHsKKwkJc28tPnNvX2NvdW50ID0gMDsKKwkJc29kZWFsbG9jKHNvKTsK
KwkJcmV0dXJuIChOVUxMKTsKKwl9CisJcmV0dXJuIChzbyk7Cit9CisKK2ludAorc29kaXNjb25u
ZWN0KHN0cnVjdCBzb2NrZXQgKnNvKQoreworCWludCBlcnJvcjsKKworCWlmICgoc28tPnNvX3N0
YXRlICYgU1NfSVNDT05ORUNURUQpID09IDApCisJCXJldHVybiAoRU5PVENPTk4pOworCWlmIChz
by0+c29fc3RhdGUgJiBTU19JU0RJU0NPTk5FQ1RJTkcpCisJCXJldHVybiAoRUFMUkVBRFkpOwor
CWVycm9yID0gc2N0cF9kaXNjb25uZWN0KHNvKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50
Cit1c3JzY3RwX3NldF9ub25fYmxvY2tpbmcoc3RydWN0IHNvY2tldCAqc28sIGludCBvbm9mZikK
K3sKKwlpZiAoc28gPT0gTlVMTCkgeworCQllcnJubyA9IEVCQURGOworCQlyZXR1cm4gKC0xKTsK
Kwl9CisJU09DS19MT0NLKHNvKTsKKwlpZiAob25vZmYgIT0gMCkgeworCQlzby0+c29fc3RhdGUg
fD0gU1NfTkJJTzsKKwl9IGVsc2UgeworCQlzby0+c29fc3RhdGUgJj0gflNTX05CSU87CisJfQor
CVNPQ0tfVU5MT0NLKHNvKTsKKwlyZXR1cm4gKDApOworfQorCitpbnQKK3VzcnNjdHBfZ2V0X25v
bl9ibG9ja2luZyhzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlpbnQgcmVzdWx0OworCisJaWYgKHNv
ID09IE5VTEwpIHsKKwkJZXJybm8gPSBFQkFERjsKKwkJcmV0dXJuICgtMSk7CisJfQorCVNPQ0tf
TE9DSyhzbyk7CisJaWYgKHNvLT5zb19zdGF0ZSAmIFNTX05CSU8pIHsKKwkJcmVzdWx0ID0gMTsK
Kwl9IGVsc2UgeworCQlyZXN1bHQgPSAwOworCX0KKwlTT0NLX1VOTE9DSyhzbyk7CisJcmV0dXJu
IChyZXN1bHQpOworfQorCitpbnQKK3NvY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0
IHNvY2thZGRyICpuYW0pCit7CisJaW50IGVycm9yOworCisJaWYgKHNvLT5zb19vcHRpb25zICYg
U0NUUF9TT19BQ0NFUFRDT05OKQorCQlyZXR1cm4gKEVPUE5PVFNVUFApOworCS8qCisJICogSWYg
cHJvdG9jb2wgaXMgY29ubmVjdGlvbi1iYXNlZCwgY2FuIG9ubHkgY29ubmVjdCBvbmNlLgorCSAq
IE90aGVyd2lzZSwgaWYgY29ubmVjdGVkLCB0cnkgdG8gZGlzY29ubmVjdCBmaXJzdC4gIFRoaXMg
YWxsb3dzCisJICogdXNlciB0byBkaXNjb25uZWN0IGJ5IGNvbm5lY3RpbmcgdG8sIGUuZy4sIGEg
bnVsbCBhZGRyZXNzLgorCSAqLworCWlmIChzby0+c29fc3RhdGUgJiAoU1NfSVNDT05ORUNURUR8
U1NfSVNDT05ORUNUSU5HKSAmJiAoZXJyb3IgPSBzb2Rpc2Nvbm5lY3Qoc28pKSkgeworCQllcnJv
ciA9IEVJU0NPTk47CisJfSBlbHNlIHsKKwkJLyoKKwkJICogUHJldmVudCBhY2N1bXVsYXRlZCBl
cnJvciBmcm9tIHByZXZpb3VzIGNvbm5lY3Rpb24gZnJvbQorCQkgKiBiaXRpbmcgdXMuCisJCSAq
LworCQlzby0+c29fZXJyb3IgPSAwOworCQlzd2l0Y2ggKG5hbS0+c2FfZmFtaWx5KSB7CisjaWYg
ZGVmaW5lZChJTkVUKQorCQljYXNlIEFGX0lORVQ6CisJCQllcnJvciA9IHNjdHBfY29ubmVjdChz
bywgbmFtKTsKKwkJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChJTkVUNikKKwkJY2FzZSBB
Rl9JTkVUNjoKKwkJCWVycm9yID0gc2N0cDZfY29ubmVjdChzbywgbmFtKTsKKwkJCWJyZWFrOwor
I2VuZGlmCisJCWNhc2UgQUZfQ09OTjoKKwkJCWVycm9yID0gc2N0cGNvbm5fY29ubmVjdChzbywg
bmFtKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZXJyb3IgPSBFQUZOT1NVUFBPUlQ7CisJ
CX0KKwl9CisKKwlyZXR1cm4gKGVycm9yKTsKK30KKworCisKK2ludCB1c2VyX2Nvbm5lY3Qoc3Ry
dWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqc2EpCit7CisJaW50IGVycm9yOworCWlu
dCBpbnRlcnJ1cHRlZCA9IDA7CisKKwlpZiAoc28gPT0gTlVMTCkgeworCQllcnJvciA9IEVCQURG
OworCQlnb3RvIGRvbmUxOworCX0KKwlpZiAoc28tPnNvX3N0YXRlICYgU1NfSVNDT05ORUNUSU5H
KSB7CisJCWVycm9yID0gRUFMUkVBRFk7CisJCWdvdG8gZG9uZTE7CisJfQorCisJZXJyb3IgPSBz
b2Nvbm5lY3Qoc28sIHNhKTsKKwlpZiAoZXJyb3IpIHsKKwkJZ290byBiYWQ7CisJfQorCWlmICgo
c28tPnNvX3N0YXRlICYgU1NfTkJJTykgJiYgKHNvLT5zb19zdGF0ZSAmIFNTX0lTQ09OTkVDVElO
RykpIHsKKwkJZXJyb3IgPSBFSU5QUk9HUkVTUzsKKwkJZ290byBkb25lMTsKKwl9CisKKwlTT0NL
X0xPQ0soc28pOworCXdoaWxlICgoc28tPnNvX3N0YXRlICYgU1NfSVNDT05ORUNUSU5HKSAmJiBz
by0+c29fZXJyb3IgPT0gMCkgeworI2lmIGRlZmluZWQoX1dJTjMyKQorCQlpZiAoU2xlZXBDb25k
aXRpb25WYXJpYWJsZUNTKFNPQ0tfQ09ORChzbyksIFNPQ0tfTVRYKHNvKSwgSU5GSU5JVEUpKQor
CQkJZXJyb3IgPSAwOworCQllbHNlCisJCQllcnJvciA9IC0xOworI2Vsc2UKKwkJZXJyb3IgPSBw
dGhyZWFkX2NvbmRfd2FpdChTT0NLX0NPTkQoc28pLCBTT0NLX01UWChzbykpOworI2VuZGlmCisJ
CWlmIChlcnJvcikgeworI2lmIGRlZmluZWQoX19OZXRCU0RfXykKKwkJCWlmIChlcnJvciA9PSBF
SU5UUikgeworI2Vsc2UKKwkJCWlmIChlcnJvciA9PSBFSU5UUiB8fCBlcnJvciA9PSBFUkVTVEFS
VCkgeworI2VuZGlmCisJCQkJaW50ZXJydXB0ZWQgPSAxOworCQkJfQorCQkJYnJlYWs7CisJCX0K
Kwl9CisJaWYgKGVycm9yID09IDApIHsKKwkJZXJyb3IgPSBzby0+c29fZXJyb3I7CisJCXNvLT5z
b19lcnJvciA9IDA7CisJfQorCVNPQ0tfVU5MT0NLKHNvKTsKKworYmFkOgorCWlmICghaW50ZXJy
dXB0ZWQpIHsKKwkJc28tPnNvX3N0YXRlICY9IH5TU19JU0NPTk5FQ1RJTkc7CisJfQorI2lmICFk
ZWZpbmVkKF9fTmV0QlNEX18pCisJaWYgKGVycm9yID09IEVSRVNUQVJUKSB7CisJCWVycm9yID0g
RUlOVFI7CisJfQorI2VuZGlmCitkb25lMToKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50IHVz
cnNjdHBfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICpuYW1lLCBp
bnQgbmFtZWxlbikKK3sKKwlzdHJ1Y3Qgc29ja2FkZHIgKnNhID0gTlVMTDsKKworCWVycm5vID0g
Z2V0c29ja2FkZHIoJnNhLCAoY2FkZHJfdCluYW1lLCBuYW1lbGVuKTsKKwlpZiAoZXJybm8pCisJ
CXJldHVybiAoLTEpOworCisJZXJybm8gPSB1c2VyX2Nvbm5lY3Qoc28sIHNhKTsKKwlGUkVFKHNh
LCBNX1NPTkFNRSk7CisJaWYgKGVycm5vKSB7CisJCXJldHVybiAoLTEpOworCX0gZWxzZSB7CisJ
CXJldHVybiAoMCk7CisJfQorfQorCitpbnQgdXNlcnNwYWNlX2Nvbm5lY3Qoc3RydWN0IHNvY2tl
dCAqc28sIHN0cnVjdCBzb2NrYWRkciAqbmFtZSwgaW50IG5hbWVsZW4pCit7CisJcmV0dXJuICh1
c3JzY3RwX2Nvbm5lY3Qoc28sIG5hbWUsIG5hbWVsZW4pKTsKK30KKworI2RlZmluZSBTQ1RQX1NU
QUNLX0JVRl9TSVpFICAgICAgICAgMjA0OAorCit2b2lkCit1c3JzY3RwX2Nsb3NlKHN0cnVjdCBz
b2NrZXQgKnNvKSB7CisJaWYgKHNvICE9IE5VTEwpIHsKKwkJaWYgKHNvLT5zb19vcHRpb25zICYg
U0NUUF9TT19BQ0NFUFRDT05OKSB7CisJCQlzdHJ1Y3Qgc29ja2V0ICpzcDsKKworCQkJQUNDRVBU
X0xPQ0soKTsKKwkJCXdoaWxlICgoc3AgPSBUQUlMUV9GSVJTVCgmc28tPnNvX2NvbXApKSAhPSBO
VUxMKSB7CisJCQkJVEFJTFFfUkVNT1ZFKCZzby0+c29fY29tcCwgc3AsIHNvX2xpc3QpOworCQkJ
CXNvLT5zb19xbGVuLS07CisJCQkJc3AtPnNvX3FzdGF0ZSAmPSB+U1FfQ09NUDsKKwkJCQlzcC0+
c29faGVhZCA9IE5VTEw7CisJCQkJQUNDRVBUX1VOTE9DSygpOworCQkJCXNvYWJvcnQoc3ApOwor
CQkJCUFDQ0VQVF9MT0NLKCk7CisJCQl9CisJCQlBQ0NFUFRfVU5MT0NLKCk7CisJCX0KKwkJQUND
RVBUX0xPQ0soKTsKKwkJU09DS19MT0NLKHNvKTsKKwkJc29yZWxlKHNvKTsKKwl9Cit9CisKK3Zv
aWQKK3VzZXJzcGFjZV9jbG9zZShzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwl1c3JzY3RwX2Nsb3Nl
KHNvKTsKK30KKworaW50Cit1c3JzY3RwX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQg
aG93KQoreworCWlmICghKGhvdyA9PSBTSFVUX1JEIHx8IGhvdyA9PSBTSFVUX1dSIHx8IGhvdyA9
PSBTSFVUX1JEV1IpKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKC0xKTsKKwl9CisJ
aWYgKHNvID09IE5VTEwpIHsKKwkJZXJybm8gPSBFQkFERjsKKwkJcmV0dXJuICgtMSk7CisJfQor
CXNjdHBfZmx1c2goc28sIGhvdyk7CisJaWYgKGhvdyAhPSBTSFVUX1dSKQorCQkgc29jYW50cmN2
bW9yZShzbyk7CisJaWYgKGhvdyAhPSBTSFVUX1JEKSB7CisJCWVycm5vID0gc2N0cF9zaHV0ZG93
bihzbyk7CisJCWlmIChlcnJubykgeworCQkJcmV0dXJuICgtMSk7CisJCX0gZWxzZSB7CisJCQly
ZXR1cm4gKDApOworCQl9CisJfQorCXJldHVybiAoMCk7Cit9CisKK2ludAordXNlcnNwYWNlX3No
dXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgaG93KQoreworCXJldHVybiAodXNyc2N0cF9z
aHV0ZG93bihzbywgaG93KSk7Cit9CisKK2ludAordXNyc2N0cF9maW5pc2godm9pZCkKK3sKKwlp
ZiAoU0NUUF9CQVNFX1ZBUihzY3RwX3BjYl9pbml0aWFsaXplZCkgPT0gMCkgeworCQlyZXR1cm4g
KDApOworCX0KKwlpZiAoU0NUUF9JTlBfSU5GT19UUllMT0NLKCkpIHsKKwkJaWYgKCFMSVNUX0VN
UFRZKCZTQ1RQX0JBU0VfSU5GTyhsaXN0aGVhZCkpKSB7CisJCQlTQ1RQX0lOUF9JTkZPX1JVTkxP
Q0soKTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOwor
CX0gZWxzZSB7CisJCXJldHVybiAoLTEpOworCX0KKwlzY3RwX2ZpbmlzaCgpOworI2lmIGRlZmlu
ZWQoX1dJTjMyKQorCURlbGV0ZUNvbmRpdGlvblZhcmlhYmxlKCZhY2NlcHRfY29uZCk7CisJRGVs
ZXRlQ3JpdGljYWxTZWN0aW9uKCZhY2NlcHRfbXR4KTsKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRl
ZmluZWQoSU5FVDYpCisJV1NBQ2xlYW51cCgpOworI2VuZGlmCisjZWxzZQorCXB0aHJlYWRfY29u
ZF9kZXN0cm95KCZhY2NlcHRfY29uZCk7CisJcHRocmVhZF9tdXRleF9kZXN0cm95KCZhY2NlcHRf
bXR4KTsKKyNlbmRpZgorCXJldHVybiAoMCk7Cit9CisKK2ludAordXNlcnNwYWNlX2ZpbmlzaCh2
b2lkKQoreworCXJldHVybiAodXNyc2N0cF9maW5pc2goKSk7Cit9CisKKy8qIG5lZWRlZCBmcm9t
IHNjdHBfdXNycmVxLmMgKi8KK2ludAorc2N0cF9zZXRvcHQoc3RydWN0IHNvY2tldCAqc28sIGlu
dCBvcHRuYW1lLCB2b2lkICpvcHR2YWwsIHNpemVfdCBvcHRzaXplLCB2b2lkICpwKTsKKworaW50
Cit1c3JzY3RwX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc28sIGludCBsZXZlbCwgaW50IG9w
dGlvbl9uYW1lLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm9wdGlvbl92YWx1ZSwg
c29ja2xlbl90IG9wdGlvbl9sZW4pCit7CisJaWYgKHNvID09IE5VTEwpIHsKKwkJZXJybm8gPSBF
QkFERjsKKwkJcmV0dXJuICgtMSk7CisJfQorCXN3aXRjaCAobGV2ZWwpIHsKKwljYXNlIFNPTF9T
T0NLRVQ6CisJeworCQlzd2l0Y2ggKG9wdGlvbl9uYW1lKSB7CisJCWNhc2UgU09fUkNWQlVGOgor
CQkJaWYgKG9wdGlvbl9sZW4gPCAoc29ja2xlbl90KXNpemVvZihpbnQpKSB7CisJCQkJZXJybm8g
PSBFSU5WQUw7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9IGVsc2UgeworCQkJCWludCAqYnVmX3Np
emU7CisKKwkJCQlidWZfc2l6ZSA9IChpbnQgKilvcHRpb25fdmFsdWU7CisJCQkJaWYgKCpidWZf
c2l6ZSA8IDEpIHsKKwkJCQkJZXJybm8gPSBFSU5WQUw7CisJCQkJCXJldHVybiAoLTEpOworCQkJ
CX0KKwkJCQlzYnJlc2VydmUoJnNvLT5zb19yY3YsICh1X2xvbmcpKmJ1Zl9zaXplLCBzbyk7CisJ
CQkJcmV0dXJuICgwKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNPX1NOREJVRjoKKwkJCWlm
IChvcHRpb25fbGVuIDwgKHNvY2tsZW5fdClzaXplb2YoaW50KSkgeworCQkJCWVycm5vID0gRUlO
VkFMOworCQkJCXJldHVybiAoLTEpOworCQkJfSBlbHNlIHsKKwkJCQlpbnQgKmJ1Zl9zaXplOwor
CisJCQkJYnVmX3NpemUgPSAoaW50ICopb3B0aW9uX3ZhbHVlOworCQkJCWlmICgqYnVmX3NpemUg
PCAxKSB7CisJCQkJCWVycm5vID0gRUlOVkFMOworCQkJCQlyZXR1cm4gKC0xKTsKKwkJCQl9CisJ
CQkJc2JyZXNlcnZlKCZzby0+c29fc25kLCAodV9sb25nKSpidWZfc2l6ZSwgc28pOworCQkJCXJl
dHVybiAoMCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTT19MSU5HRVI6CisJCQlpZiAob3B0
aW9uX2xlbiA8IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBsaW5nZXIpKSB7CisJCQkJZXJybm8g
PSBFSU5WQUw7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9IGVsc2UgeworCQkJCXN0cnVjdCBsaW5n
ZXIgKmw7CisKKwkJCQlsID0gKHN0cnVjdCBsaW5nZXIgKilvcHRpb25fdmFsdWU7CisJCQkJc28t
PnNvX2xpbmdlciA9IGwtPmxfbGluZ2VyOworCQkJCWlmIChsLT5sX29ub2ZmKSB7CisJCQkJCXNv
LT5zb19vcHRpb25zIHw9IFNDVFBfU09fTElOR0VSOworCQkJCX0gZWxzZSB7CisJCQkJCXNvLT5z
b19vcHRpb25zICY9IH5TQ1RQX1NPX0xJTkdFUjsKKwkJCQl9CisJCQkJcmV0dXJuICgwKTsKKwkJ
CX0KKwkJZGVmYXVsdDoKKwkJCWVycm5vID0gRUlOVkFMOworCQkJcmV0dXJuICgtMSk7CisJCX0K
Kwl9CisJY2FzZSBJUFBST1RPX1NDVFA6CisJCWVycm5vID0gc2N0cF9zZXRvcHQoc28sIG9wdGlv
bl9uYW1lLCAodm9pZCAqKSBvcHRpb25fdmFsdWUsIChzaXplX3Qpb3B0aW9uX2xlbiwgTlVMTCk7
CisJCWlmIChlcnJubykgeworCQkJcmV0dXJuICgtMSk7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4g
KDApOworCQl9CisJZGVmYXVsdDoKKwkJZXJybm8gPSBFTk9QUk9UT09QVDsKKwkJcmV0dXJuICgt
MSk7CisJfQorfQorCitpbnQKK3VzZXJzcGFjZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNv
LCBpbnQgbGV2ZWwsIGludCBvcHRpb25fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHZvaWQgKm9wdGlvbl92YWx1ZSwgc29ja2xlbl90IG9wdGlvbl9sZW4pCit7CisJcmV0dXJuICh1
c3JzY3RwX3NldHNvY2tvcHQoc28sIGxldmVsLCBvcHRpb25fbmFtZSwgb3B0aW9uX3ZhbHVlLCBv
cHRpb25fbGVuKSk7Cit9CisKKy8qIG5lZWRlZCBmcm9tIHNjdHBfdXNycmVxLmMgKi8KK2ludAor
c2N0cF9nZXRvcHQoc3RydWN0IHNvY2tldCAqc28sIGludCBvcHRuYW1lLCB2b2lkICpvcHR2YWws
IHNpemVfdCAqb3B0c2l6ZSwKKwkgICAgdm9pZCAqcCk7CisKK2ludAordXNyc2N0cF9nZXRzb2Nr
b3B0KHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgbGV2ZWwsIGludCBvcHRpb25fbmFtZSwKKyAgICAg
ICAgICAgICAgICAgICB2b2lkICpvcHRpb25fdmFsdWUsIHNvY2tsZW5fdCAqb3B0aW9uX2xlbikK
K3sKKwlpZiAoc28gPT0gTlVMTCkgeworCQllcnJubyA9IEVCQURGOworCQlyZXR1cm4gKC0xKTsK
Kwl9CisJaWYgKG9wdGlvbl9sZW4gPT0gTlVMTCkgeworCQllcnJubyA9IEVGQVVMVDsKKwkJcmV0
dXJuICgtMSk7CisJfQorCXN3aXRjaCAobGV2ZWwpIHsKKwljYXNlIFNPTF9TT0NLRVQ6CisJCXN3
aXRjaCAob3B0aW9uX25hbWUpIHsKKwkJY2FzZSBTT19SQ1ZCVUY6CisJCQlpZiAoKm9wdGlvbl9s
ZW4gPCAoc29ja2xlbl90KXNpemVvZihpbnQpKSB7CisJCQkJZXJybm8gPSBFSU5WQUw7CisJCQkJ
cmV0dXJuICgtMSk7CisJCQl9IGVsc2UgeworCQkJCWludCAqYnVmX3NpemU7CisKKwkJCQlidWZf
c2l6ZSA9IChpbnQgKilvcHRpb25fdmFsdWU7CisJCQkJKmJ1Zl9zaXplID0gc28tPnNvX3Jjdi5z
Yl9oaXdhdDs7CisJCQkJKm9wdGlvbl9sZW4gPSAoc29ja2xlbl90KXNpemVvZihpbnQpOworCQkJ
CXJldHVybiAoMCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTT19TTkRCVUY6CisJCQlpZiAo
Km9wdGlvbl9sZW4gPCAoc29ja2xlbl90KXNpemVvZihpbnQpKSB7CisJCQkJZXJybm8gPSBFSU5W
QUw7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9IGVsc2UgeworCQkJCWludCAqYnVmX3NpemU7CisK
KwkJCQlidWZfc2l6ZSA9IChpbnQgKilvcHRpb25fdmFsdWU7CisJCQkJKmJ1Zl9zaXplID0gc28t
PnNvX3NuZC5zYl9oaXdhdDsKKwkJCQkqb3B0aW9uX2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKGlu
dCk7CisJCQkJcmV0dXJuICgwKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNPX0xJTkdFUjoK
KwkJCWlmICgqb3B0aW9uX2xlbiA8IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBsaW5nZXIpKSB7
CisJCQkJZXJybm8gPSBFSU5WQUw7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9IGVsc2UgeworCQkJ
CXN0cnVjdCBsaW5nZXIgKmw7CisKKwkJCQlsID0gKHN0cnVjdCBsaW5nZXIgKilvcHRpb25fdmFs
dWU7CisJCQkJbC0+bF9saW5nZXIgPSBzby0+c29fbGluZ2VyOworCQkJCWlmIChzby0+c29fb3B0
aW9ucyAmIFNDVFBfU09fTElOR0VSKSB7CisJCQkJCWwtPmxfb25vZmYgPSAxOworCQkJCX0gZWxz
ZSB7CisJCQkJCWwtPmxfb25vZmYgPSAwOworCQkJCX0KKwkJCQkqb3B0aW9uX2xlbiA9IChzb2Nr
bGVuX3Qpc2l6ZW9mKHN0cnVjdCBsaW5nZXIpOworCQkJCXJldHVybiAoMCk7CisJCQl9CisJCQli
cmVhazsKKwkJY2FzZSBTT19FUlJPUjoKKwkJCWlmICgqb3B0aW9uX2xlbiA8IChzb2NrbGVuX3Qp
c2l6ZW9mKGludCkpIHsKKwkJCQllcnJubyA9IEVJTlZBTDsKKwkJCQlyZXR1cm4gKC0xKTsKKwkJ
CX0gZWxzZSB7CisJCQkJaW50ICppbnR2YWw7CisKKwkJCQlpbnR2YWwgPSAoaW50ICopb3B0aW9u
X3ZhbHVlOworCQkJCSppbnR2YWwgPSBzby0+c29fZXJyb3I7CisJCQkJKm9wdGlvbl9sZW4gPSAo
c29ja2xlbl90KXNpemVvZihpbnQpOworCQkJCXJldHVybiAoMCk7CisJCQl9CisJCQlicmVhazsK
KwkJZGVmYXVsdDoKKwkJCWVycm5vID0gRUlOVkFMOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwlj
YXNlIElQUFJPVE9fU0NUUDoKKwl7CisJCXNpemVfdCBsZW47CisKKwkJbGVuID0gKHNpemVfdCkq
b3B0aW9uX2xlbjsKKwkJZXJybm8gPSBzY3RwX2dldG9wdChzbywgb3B0aW9uX25hbWUsIG9wdGlv
bl92YWx1ZSwgJmxlbiwgTlVMTCk7CisJCSpvcHRpb25fbGVuID0gKHNvY2tsZW5fdClsZW47CisJ
CWlmIChlcnJubykgeworCQkJcmV0dXJuICgtMSk7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gKDAp
OworCQl9CisJfQorCWRlZmF1bHQ6CisJCWVycm5vID0gRU5PUFJPVE9PUFQ7CisJCXJldHVybiAo
LTEpOworCX0KK30KKworaW50Cit1c2Vyc3BhY2VfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpz
bywgaW50IGxldmVsLCBpbnQgb3B0aW9uX25hbWUsCisgICAgICAgICAgICAgICAgICAgICB2b2lk
ICpvcHRpb25fdmFsdWUsIHNvY2tsZW5fdCAqb3B0aW9uX2xlbikKK3sKKwlyZXR1cm4gKHVzcnNj
dHBfZ2V0c29ja29wdChzbywgbGV2ZWwsIG9wdGlvbl9uYW1lLCBvcHRpb25fdmFsdWUsIG9wdGlv
bl9sZW4pKTsKK30KKworaW50Cit1c3JzY3RwX29wdF9pbmZvKHN0cnVjdCBzb2NrZXQgKnNvLCBz
Y3RwX2Fzc29jX3QgaWQsIGludCBvcHQsIHZvaWQgKmFyZywgc29ja2xlbl90ICpzaXplKQorewor
CWlmIChhcmcgPT0gTlVMTCkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJ
fQorCWlmICgoaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09DKSB8fAorCSAgICAoaWQgPT0gU0NUUF9B
TExfQVNTT0MpKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKC0xKTsKKwl9CisJc3dp
dGNoIChvcHQpIHsKKwljYXNlIFNDVFBfUlRPSU5GTzoKKwkJKChzdHJ1Y3Qgc2N0cF9ydG9pbmZv
ICopYXJnKS0+c3J0b19hc3NvY19pZCA9IGlkOworCQlicmVhazsKKwljYXNlIFNDVFBfQVNTT0NJ
TkZPOgorCQkoKHN0cnVjdCBzY3RwX2Fzc29jcGFyYW1zICopYXJnKS0+c2Fzb2NfYXNzb2NfaWQg
PSBpZDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0RFRkFVTFRfU0VORF9QQVJBTToKKwkJKChzdHJ1
Y3Qgc2N0cF9hc3NvY3BhcmFtcyAqKWFyZyktPnNhc29jX2Fzc29jX2lkID0gaWQ7CisJCWJyZWFr
OworCWNhc2UgU0NUUF9QUklNQVJZX0FERFI6CisJCSgoc3RydWN0IHNjdHBfc2V0cHJpbSAqKWFy
ZyktPnNzcF9hc3NvY19pZCA9IGlkOworCQlicmVhazsKKwljYXNlIFNDVFBfUEVFUl9BRERSX1BB
UkFNUzoKKwkJKChzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcyAqKWFyZyktPnNwcF9hc3NvY19pZCA9
IGlkOworCQlicmVhazsKKwljYXNlIFNDVFBfTUFYU0VHOgorCQkoKHN0cnVjdCBzY3RwX2Fzc29j
X3ZhbHVlICopYXJnKS0+YXNzb2NfaWQgPSBpZDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0FVVEhf
S0VZOgorCQkoKHN0cnVjdCBzY3RwX2F1dGhrZXkgKilhcmcpLT5zY2FfYXNzb2NfaWQgPSBpZDsK
KwkJYnJlYWs7CisJY2FzZSBTQ1RQX0FVVEhfQUNUSVZFX0tFWToKKwkJKChzdHJ1Y3Qgc2N0cF9h
dXRoa2V5aWQgKilhcmcpLT5zY2FjdF9hc3NvY19pZCA9IGlkOworCQlicmVhazsKKwljYXNlIFND
VFBfREVMQVlFRF9TQUNLOgorCQkoKHN0cnVjdCBzY3RwX3NhY2tfaW5mbyAqKWFyZyktPnNhY2tf
YXNzb2NfaWQgPSBpZDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0NPTlRFWFQ6CisJCSgoc3RydWN0
IHNjdHBfYXNzb2NfdmFsdWUgKilhcmcpLT5hc3NvY19pZCA9IGlkOworCQlicmVhazsKKwljYXNl
IFNDVFBfU1RBVFVTOgorCQkoKHN0cnVjdCBzY3RwX3N0YXR1cyAqKWFyZyktPnNzdGF0X2Fzc29j
X2lkID0gaWQ7CisJCWJyZWFrOworCWNhc2UgU0NUUF9HRVRfUEVFUl9BRERSX0lORk86CisJCSgo
c3RydWN0IHNjdHBfcGFkZHJpbmZvICopYXJnKS0+c3BpbmZvX2Fzc29jX2lkID0gaWQ7CisJCWJy
ZWFrOworCWNhc2UgU0NUUF9QRUVSX0FVVEhfQ0hVTktTOgorCQkoKHN0cnVjdCBzY3RwX2F1dGhj
aHVua3MgKilhcmcpLT5nYXV0aF9hc3NvY19pZCA9IGlkOworCQlicmVhazsKKwljYXNlIFNDVFBf
TE9DQUxfQVVUSF9DSFVOS1M6CisJCSgoc3RydWN0IHNjdHBfYXV0aGNodW5rcyAqKWFyZyktPmdh
dXRoX2Fzc29jX2lkID0gaWQ7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FT1VUUzoKKwkJKChz
dHJ1Y3Qgc2N0cF90aW1lb3V0cyAqKWFyZyktPnN0aW1vX2Fzc29jX2lkID0gaWQ7CisJCWJyZWFr
OworCWNhc2UgU0NUUF9FVkVOVDoKKwkJKChzdHJ1Y3Qgc2N0cF9ldmVudCAqKWFyZyktPnNlX2Fz
c29jX2lkID0gaWQ7CisJCWJyZWFrOworCWNhc2UgU0NUUF9ERUZBVUxUX1NORElORk86CisJCSgo
c3RydWN0IHNjdHBfc25kaW5mbyAqKWFyZyktPnNuZF9hc3NvY19pZCA9IGlkOworCQlicmVhazsK
KwljYXNlIFNDVFBfREVGQVVMVF9QUklORk86CisJCSgoc3RydWN0IHNjdHBfZGVmYXVsdF9wcmlu
Zm8gKilhcmcpLT5wcl9hc3NvY19pZCA9IGlkOworCQlicmVhazsKKwljYXNlIFNDVFBfUEVFUl9B
RERSX1RITERTOgorCQkoKHN0cnVjdCBzY3RwX3BhZGRydGhsZHMgKilhcmcpLT5zcHRfYXNzb2Nf
aWQgPSBpZDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1JFTU9URV9VRFBfRU5DQVBTX1BPUlQ6CisJ
CSgoc3RydWN0IHNjdHBfdWRwZW5jYXBzICopYXJnKS0+c3VlX2Fzc29jX2lkID0gaWQ7CisJCWJy
ZWFrOworCWNhc2UgU0NUUF9FQ05fU1VQUE9SVEVEOgorCQkoKHN0cnVjdCBzY3RwX2Fzc29jX3Zh
bHVlICopYXJnKS0+YXNzb2NfaWQgPSBpZDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1BSX1NVUFBP
UlRFRDoKKwkJKChzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqKWFyZyktPmFzc29jX2lkID0gaWQ7
CisJCWJyZWFrOworCWNhc2UgU0NUUF9BVVRIX1NVUFBPUlRFRDoKKwkJKChzdHJ1Y3Qgc2N0cF9h
c3NvY192YWx1ZSAqKWFyZyktPmFzc29jX2lkID0gaWQ7CisJCWJyZWFrOworCWNhc2UgU0NUUF9B
U0NPTkZfU1VQUE9SVEVEOgorCQkoKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICopYXJnKS0+YXNz
b2NfaWQgPSBpZDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1JFQ09ORklHX1NVUFBPUlRFRDoKKwkJ
KChzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqKWFyZyktPmFzc29jX2lkID0gaWQ7CisJCWJyZWFr
OworCWNhc2UgU0NUUF9OUlNBQ0tfU1VQUE9SVEVEOgorCQkoKHN0cnVjdCBzY3RwX2Fzc29jX3Zh
bHVlICopYXJnKS0+YXNzb2NfaWQgPSBpZDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1BLVERST1Bf
U1VQUE9SVEVEOgorCQkoKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICopYXJnKS0+YXNzb2NfaWQg
PSBpZDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX01BWF9CVVJTVDoKKwkJKChzdHJ1Y3Qgc2N0cF9h
c3NvY192YWx1ZSAqKWFyZyktPmFzc29jX2lkID0gaWQ7CisJCWJyZWFrOworCWNhc2UgU0NUUF9F
TkFCTEVfU1RSRUFNX1JFU0VUOgorCQkoKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICopYXJnKS0+
YXNzb2NfaWQgPSBpZDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1BSX1NUUkVBTV9TVEFUVVM6CisJ
CSgoc3RydWN0IHNjdHBfcHJzdGF0dXMgKilhcmcpLT5zcHJzdGF0X2Fzc29jX2lkID0gaWQ7CisJ
CWJyZWFrOworCWNhc2UgU0NUUF9QUl9BU1NPQ19TVEFUVVM6CisJCSgoc3RydWN0IHNjdHBfcHJz
dGF0dXMgKilhcmcpLT5zcHJzdGF0X2Fzc29jX2lkID0gaWQ7CisJCWJyZWFrOworCWNhc2UgU0NU
UF9NQVhfQ1dORDoKKwkJKChzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqKWFyZyktPmFzc29jX2lk
ID0gaWQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gKHVzcnNj
dHBfZ2V0c29ja29wdChzbywgSVBQUk9UT19TQ1RQLCBvcHQsIGFyZywgc2l6ZSkpOworfQorCitp
bnQKK3VzcnNjdHBfc2V0X3VscGluZm8oc3RydWN0IHNvY2tldCAqc28sIHZvaWQgKnVscF9pbmZv
KQoreworCXJldHVybiAocmVnaXN0ZXJfdWxwX2luZm8oc28sIHVscF9pbmZvKSk7Cit9CisKKwor
aW50Cit1c3JzY3RwX2dldF91bHBpbmZvKHN0cnVjdCBzb2NrZXQgKnNvLCB2b2lkICoqcHVscF9p
bmZvKQoreworCXJldHVybiAocmV0cmlldmVfdWxwX2luZm8oc28sIHB1bHBfaW5mbykpOworfQor
CitpbnQKK3VzcnNjdHBfYmluZHgoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAq
YWRkcnMsIGludCBhZGRyY250LCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHNvY2thZGRyICpzYTsK
KyNpZmRlZiBJTkVUCisJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisjZW5kaWYKKyNpZmRlZiBJ
TkVUNgorCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisjZW5kaWYKKwlpbnQgaTsKKyNpZiBk
ZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisJdWludDE2X3Qgc3BvcnQ7CisJYm9vbCBm
aXhfcG9ydDsKKyNlbmRpZgorCisJLyogdmFsaWRhdGUgdGhlIGZsYWdzICovCisJaWYgKChmbGFn
cyAhPSBTQ1RQX0JJTkRYX0FERF9BRERSKSAmJgorCSAgICAoZmxhZ3MgIT0gU0NUUF9CSU5EWF9S
RU1fQUREUikpIHsKKwkJZXJybm8gPSBFRkFVTFQ7CisJCXJldHVybiAoLTEpOworCX0KKwkvKiB2
YWxpZGF0ZSB0aGUgYWRkcmVzcyBjb3VudCBhbmQgbGlzdCAqLworCWlmICgoYWRkcmNudCA8PSAw
KSB8fCAoYWRkcnMgPT0gTlVMTCkpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoLTEp
OworCX0KKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisJc3BvcnQgPSAwOwor
CWZpeF9wb3J0ID0gZmFsc2U7CisjZW5kaWYKKwkvKiBGaXJzdCBwcmUtc2NyZWVuIHRoZSBhZGRy
ZXNzZXMgKi8KKwlzYSA9IGFkZHJzOworCWZvciAoaSA9IDA7IGkgPCBhZGRyY250OyBpKyspIHsK
KwkJc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQljYXNlIEFGX0lORVQ6
CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJCWlmIChzYS0+c2FfbGVuICE9IHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW4pKSB7CisJCQkJZXJybm8gPSBFSU5WQUw7CisJCQkJcmV0dXJuICgtMSk7CisJ
CQl9CisjZW5kaWYKKwkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTsKKwkJCWlmIChz
aW4tPnNpbl9wb3J0KSB7CisJCQkJLyogbm9uLXplcm8gcG9ydCwgY2hlY2sgb3Igc2F2ZSAqLwor
CQkJCWlmIChzcG9ydCkgeworCQkJCQkvKiBDaGVjayBhZ2FpbnN0IG91ciBwb3J0ICovCisJCQkJ
CWlmIChzcG9ydCAhPSBzaW4tPnNpbl9wb3J0KSB7CisJCQkJCQllcnJubyA9IEVJTlZBTDsKKwkJ
CQkJCXJldHVybiAoLTEpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogc2F2ZSBvZmYg
dGhlIHBvcnQgKi8KKwkJCQkJc3BvcnQgPSBzaW4tPnNpbl9wb3J0OworCQkJCQlmaXhfcG9ydCA9
IChpID4gMCk7CisJCQkJfQorCQkJfQorI2lmbmRlZiBIQVZFX1NBX0xFTgorCQkJc2EgPSAoc3Ry
dWN0IHNvY2thZGRyICopKChjYWRkcl90KXNhICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikp
OworI2VuZGlmCisJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCWNhc2UgQUZfSU5F
VDY6CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJCWlmIChzYS0+c2FfbGVuICE9IHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW42KSkgeworCQkJCWVycm5vID0gRUlOVkFMOworCQkJCXJldHVybiAoLTEp
OworCQkJfQorI2VuZGlmCisJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYTsKKwkJ
CWlmIChzaW42LT5zaW42X3BvcnQpIHsKKwkJCQkvKiBub24temVybyBwb3J0LCBjaGVjayBvciBz
YXZlICovCisJCQkJaWYgKHNwb3J0KSB7CisJCQkJCS8qIENoZWNrIGFnYWluc3Qgb3VyIHBvcnQg
Ki8KKwkJCQkJaWYgKHNwb3J0ICE9IHNpbjYtPnNpbjZfcG9ydCkgeworCQkJCQkJZXJybm8gPSBF
SU5WQUw7CisJCQkJCQlyZXR1cm4gKC0xKTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCS8q
IHNhdmUgb2ZmIHRoZSBwb3J0ICovCisJCQkJCXNwb3J0ID0gc2luNi0+c2luNl9wb3J0OworCQkJ
CQlmaXhfcG9ydCA9IChpID4gMCk7CisJCQkJfQorCQkJfQorI2lmbmRlZiBIQVZFX1NBX0xFTgor
CQkJc2EgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KXNhICsgc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbjYpKTsKKyNlbmRpZgorCQkJYnJlYWs7CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJ
CS8qIEludmFsaWQgYWRkcmVzcyBmYW1pbHkgc3BlY2lmaWVkLiAqLworCQkJZXJybm8gPSBFQUZO
T1NVUFBPUlQ7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorI2lmZGVmIEhBVkVfU0FfTEVOCisJCXNh
ID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClzYSArIHNhLT5zYV9sZW4pOworI2VuZGlm
CisJfQorCXNhID0gYWRkcnM7CisJZm9yIChpID0gMDsgaSA8IGFkZHJjbnQ7IGkrKykgeworI2lm
bmRlZiBIQVZFX1NBX0xFTgorCQlzaXplX3Qgc2FfbGVuOworCisjZW5kaWYKKyNpZmRlZiBIQVZF
X1NBX0xFTgorI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKwkJaWYgKGZpeF9w
b3J0KSB7CisJCQlzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQljYXNl
IEFGX0lORVQ6CisJCQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYSktPnNpbl9wb3J0ID0gc3Bv
cnQ7CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJY2FzZSBBRl9JTkVUNjoK
KwkJCQkoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYSktPnNpbjZfcG9ydCA9IHNwb3J0OworCQkJ
CWJyZWFrOworI2VuZGlmCisJCQl9CisJCX0KKyNlbmRpZgorCQlpZiAodXNyc2N0cF9zZXRzb2Nr
b3B0KHNvLCBJUFBST1RPX1NDVFAsIGZsYWdzLCBzYSwgc2EtPnNhX2xlbikgIT0gMCkgeworCQkJ
cmV0dXJuICgtMSk7CisJCX0KKwkJc2EgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KXNh
ICsgc2EtPnNhX2xlbik7CisjZWxzZQorCQlzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKKyNpZmRl
ZiBJTkVUCisJCWNhc2UgQUZfSU5FVDoKKwkJCXNhX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW4pOworCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQljYXNlIEFGX0lORVQ2
OgorCQkJc2FfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQkJYnJlYWs7Cisj
ZW5kaWYKKwkJZGVmYXVsdDoKKwkJCXNhX2xlbiA9IDA7CisJCQlicmVhazsKKwkJfQorCQkvKgor
CQkgKiBOb3csIGlmIHRoZXJlIHdhcyBhIHBvcnQgbWVudGlvbmVkLCBhc3N1cmUgdGhhdCB0aGUK
KwkJICogZmlyc3QgYWRkcmVzcyBoYXMgdGhhdCBwb3J0IHRvIG1ha2Ugc3VyZSBpdCBmYWlscyBv
cgorCQkgKiBzdWNjZWVkcyBjb3JyZWN0bHkuCisJCSAqLworI2lmIGRlZmluZWQoSU5FVCkgfHwg
ZGVmaW5lZChJTkVUNikKKwkJaWYgKGZpeF9wb3J0KSB7CisJCQlzd2l0Y2ggKHNhLT5zYV9mYW1p
bHkpIHsKKyNpZmRlZiBJTkVUCisJCQljYXNlIEFGX0lORVQ6CisJCQkJKChzdHJ1Y3Qgc29ja2Fk
ZHJfaW4gKilzYSktPnNpbl9wb3J0ID0gc3BvcnQ7CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRl
ZiBJTkVUNgorCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQkoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilz
YSktPnNpbjZfcG9ydCA9IHNwb3J0OworCQkJCWJyZWFrOworI2VuZGlmCisJCQl9CisJCX0KKyNl
bmRpZgorCQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvLCBJUFBST1RPX1NDVFAsIGZsYWdzLCBz
YSwgKHNvY2tsZW5fdClzYV9sZW4pICE9IDApIHsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCXNh
ID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClzYSArIHNhX2xlbik7CisjZW5kaWYKKwl9
CisJcmV0dXJuICgwKTsKK30KKworaW50Cit1c3JzY3RwX2Nvbm5lY3R4KHN0cnVjdCBzb2NrZXQg
KnNvLAorICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJzLCBpbnQg
YWRkcmNudCwKKyAgICAgICAgICAgICAgICAgc2N0cF9hc3NvY190ICppZCkKK3sKKyNpZiBkZWZp
bmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisJY2hhciBidWZbU0NUUF9TVEFDS19CVUZfU0la
RV07CisJaW50IGksIHJldCwgY250LCAqYWE7CisJY2hhciAqY3B0bzsKKwljb25zdCBzdHJ1Y3Qg
c29ja2FkZHIgKmF0OworCXNjdHBfYXNzb2NfdCAqcF9pZDsKKwlzaXplX3QgbGVuID0gc2l6ZW9m
KGludCk7CisKKwkvKiB2YWxpZGF0ZSB0aGUgYWRkcmVzcyBjb3VudCBhbmQgbGlzdCAqLworCWlm
ICgoYWRkcnMgPT0gTlVMTCkgfHwgKGFkZHJjbnQgPD0gMCkpIHsKKwkJZXJybm8gPSBFSU5WQUw7
CisJCXJldHVybiAoLTEpOworCX0KKwlhdCA9IGFkZHJzOworCWNudCA9IDA7CisJY3B0byA9ICgo
Y2FkZHJfdClidWYgKyBzaXplb2YoaW50KSk7CisJLyogdmFsaWRhdGUgYWxsIHRoZSBhZGRyZXNz
ZXMgYW5kIGdldCB0aGUgc2l6ZSAqLworCWZvciAoaSA9IDA7IGkgPCBhZGRyY250OyBpKyspIHsK
KwkJc3dpdGNoIChhdC0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQljYXNlIEFGX0lORVQ6
CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJCWlmIChhdC0+c2FfbGVuICE9IHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW4pKSB7CisJCQkJZXJybm8gPSBFSU5WQUw7CisJCQkJcmV0dXJuICgtMSk7CisJ
CQl9CisjZW5kaWYKKwkJCWxlbiArPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKwkJCWlm
IChsZW4gPiBTQ1RQX1NUQUNLX0JVRl9TSVpFKSB7CisJCQkJZXJybm8gPSBFTk9NRU07CisJCQkJ
cmV0dXJuICgtMSk7CisJCQl9CisJCQltZW1jcHkoY3B0bywgYXQsIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pKTsKKwkJCWNwdG8gPSAoKGNhZGRyX3QpY3B0byArIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pKTsKKwkJCWF0ID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClhdCArIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5F
VDYKKwkJY2FzZSBBRl9JTkVUNjoKKyNpZmRlZiBIQVZFX1NBX0xFTgorCQkJaWYgKGF0LT5zYV9s
ZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7CisJCQkJZXJybm8gPSBFSU5WQUw7
CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisjZW5kaWYKKyNpZmRlZiBJTkVUCisJCQlpZiAoSU42
X0lTX0FERFJfVjRNQVBQRUQoJigoc3RydWN0IHNvY2thZGRyX2luNiAqKWF0KS0+c2luNl9hZGRy
KSkgeworCQkJCWxlbiArPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKwkJCQlpZiAobGVu
ID4gU0NUUF9TVEFDS19CVUZfU0laRSkgeworCQkJCQllcnJubyA9IEVOT01FTTsKKwkJCQkJcmV0
dXJuICgtMSk7CisJCQkJfQorCQkJCWluNl9zaW42XzJfc2luKChzdHJ1Y3Qgc29ja2FkZHJfaW4g
KiljcHRvLCAoc3RydWN0IHNvY2thZGRyX2luNiAqKWF0KTsKKwkJCQljcHRvID0gKChjYWRkcl90
KWNwdG8gKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJCQl9IGVsc2UgeworCQkJCWxl
biArPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJCQkJaWYgKGxlbiA+IFNDVFBfU1RB
Q0tfQlVGX1NJWkUpIHsKKwkJCQkJZXJybm8gPSBFTk9NRU07CisJCQkJCXJldHVybiAoLTEpOwor
CQkJCX0KKwkJCQltZW1jcHkoY3B0bywgYXQsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7
CisJCQkJY3B0byA9ICgoY2FkZHJfdCljcHRvICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYp
KTsKKwkJCX0KKyNlbHNlCisJCQlsZW4gKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwor
CQkJaWYgKGxlbiA+IFNDVFBfU1RBQ0tfQlVGX1NJWkUpIHsKKwkJCQllcnJubyA9IEVOT01FTTsK
KwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJCW1lbWNweShjcHRvLCBhdCwgc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbjYpKTsKKwkJCWNwdG8gPSAoKGNhZGRyX3QpY3B0byArIHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW42KSk7CisjZW5kaWYKKwkJCWF0ID0gKHN0cnVjdCBzb2NrYWRkciAqKSgo
Y2FkZHJfdClhdCArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJCQlicmVhazsKKyNl
bmRpZgorCQlkZWZhdWx0OgorCQkJZXJybm8gPSBFSU5WQUw7CisJCQlyZXR1cm4gKC0xKTsKKwkJ
fQorCQljbnQrKzsKKwl9CisJYWEgPSAoaW50ICopYnVmOworCSphYSA9IGNudDsKKwlyZXQgPSB1
c3JzY3RwX3NldHNvY2tvcHQoc28sIElQUFJPVE9fU0NUUCwgU0NUUF9DT05ORUNUX1gsICh2b2lk
ICopYnVmLCAoc29ja2xlbl90KWxlbik7CisJaWYgKChyZXQgPT0gMCkgJiYgaWQpIHsKKwkJcF9p
ZCA9IChzY3RwX2Fzc29jX3QgKilidWY7CisJCSppZCA9ICpwX2lkOworCX0KKwlyZXR1cm4gKHJl
dCk7CisjZWxzZQorCWVycm5vID0gRUlOVkFMOworCXJldHVybiAoLTEpOworI2VuZGlmCit9CisK
K2ludAordXNyc2N0cF9nZXRwYWRkcnMoc3RydWN0IHNvY2tldCAqc28sIHNjdHBfYXNzb2NfdCBp
ZCwgc3RydWN0IHNvY2thZGRyICoqcmFkZHJzKQoreworCXN0cnVjdCBzY3RwX2dldGFkZHJlc3Nl
cyAqYWRkcnM7CisJc3RydWN0IHNvY2thZGRyICpzYTsKKwlzY3RwX2Fzc29jX3QgYXNvYzsKKwlj
YWRkcl90IGxpbTsKKwlzb2NrbGVuX3Qgb3B0X2xlbjsKKwlpbnQgY250OworCisJaWYgKHJhZGRy
cyA9PSBOVUxMKSB7CisJCWVycm5vID0gRUZBVUxUOworCQlyZXR1cm4gKC0xKTsKKwl9CisJYXNv
YyA9IGlkOworCW9wdF9sZW4gPSAoc29ja2xlbl90KXNpemVvZihzY3RwX2Fzc29jX3QpOworCWlm
ICh1c3JzY3RwX2dldHNvY2tvcHQoc28sIElQUFJPVE9fU0NUUCwgU0NUUF9HRVRfUkVNT1RFX0FE
RFJfU0laRSwgJmFzb2MsICZvcHRfbGVuKSAhPSAwKSB7CisJCXJldHVybiAoLTEpOworCX0KKwkv
KiBzaXplIHJlcXVpcmVkIGlzIHJldHVybmVkIGluICdhc29jJyAqLworCW9wdF9sZW4gPSAoc29j
a2xlbl90KSgoc2l6ZV90KWFzb2MgKyBzaXplb2Yoc3RydWN0IHNjdHBfZ2V0YWRkcmVzc2VzKSk7
CisJYWRkcnMgPSBjYWxsb2MoMSwgKHNpemVfdClvcHRfbGVuKTsKKwlpZiAoYWRkcnMgPT0gTlVM
TCkgeworCQllcnJubyA9IEVOT01FTTsKKwkJcmV0dXJuICgtMSk7CisJfQorCWFkZHJzLT5zZ2V0
X2Fzc29jX2lkID0gaWQ7CisJLyogTm93IGxldHMgZ2V0IHRoZSBhcnJheSBvZiBhZGRyZXNzZXMg
Ki8KKwlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHNvLCBJUFBST1RPX1NDVFAsIFNDVFBfR0VUX1BF
RVJfQUREUkVTU0VTLCBhZGRycywgJm9wdF9sZW4pICE9IDApIHsKKwkJZnJlZShhZGRycyk7CisJ
CXJldHVybiAoLTEpOworCX0KKwkqcmFkZHJzID0gJmFkZHJzLT5hZGRyWzBdLnNhOworCWNudCA9
IDA7CisJc2EgPSAmYWRkcnMtPmFkZHJbMF0uc2E7CisJbGltID0gKGNhZGRyX3QpYWRkcnMgKyBv
cHRfbGVuOworI2lmZGVmIEhBVkVfU0FfTEVOCisJd2hpbGUgKCgoY2FkZHJfdClzYSA8IGxpbSkg
JiYgKHNhLT5zYV9sZW4gPiAwKSkgeworCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRy
X3Qpc2EgKyBzYS0+c2FfbGVuKTsKKyNlbHNlCisJd2hpbGUgKChjYWRkcl90KXNhIDwgbGltKSB7
CisJCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJY2FzZSBBRl9JTkVU
OgorCQkJc2EgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KXNhICsgc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbikpOworCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQljYXNl
IEFGX0lORVQ2OgorCQkJc2EgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KXNhICsgc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwkJCWJyZWFrOworI2VuZGlmCisJCWNhc2UgQUZf
Q09OTjoKKwkJCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClzYSArIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4g
KGNudCk7CisJCQlicmVhazsKKwkJfQorI2VuZGlmCisJCWNudCsrOworCX0KKwlyZXR1cm4gKGNu
dCk7Cit9CisKK3ZvaWQKK3VzcnNjdHBfZnJlZXBhZGRycyhzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJz
KQoreworCS8qIFRha2UgYXdheSB0aGUgaGlkZGVuIGFzc29jaWF0aW9uIGlkICovCisJdm9pZCAq
ZnJfYWRkcjsKKworCWZyX2FkZHIgPSAodm9pZCAqKSgoY2FkZHJfdClhZGRycyAtIG9mZnNldG9m
KHN0cnVjdCBzY3RwX2dldGFkZHJlc3NlcywgYWRkcikpOworCS8qIE5vdyBmcmVlIGl0ICovCisJ
ZnJlZShmcl9hZGRyKTsKK30KKworaW50Cit1c3JzY3RwX2dldGxhZGRycyhzdHJ1Y3Qgc29ja2V0
ICpzbywgc2N0cF9hc3NvY190IGlkLCBzdHJ1Y3Qgc29ja2FkZHIgKipyYWRkcnMpCit7CisJc3Ry
dWN0IHNjdHBfZ2V0YWRkcmVzc2VzICphZGRyczsKKwljYWRkcl90IGxpbTsKKwlzdHJ1Y3Qgc29j
a2FkZHIgKnNhOworCXNpemVfdCBzaXplX29mX2FkZHJlc3NlczsKKwlzb2NrbGVuX3Qgb3B0X2xl
bjsKKwlpbnQgY250OworCisJaWYgKHJhZGRycyA9PSBOVUxMKSB7CisJCWVycm5vID0gRUZBVUxU
OworCQlyZXR1cm4gKC0xKTsKKwl9CisJc2l6ZV9vZl9hZGRyZXNzZXMgPSAwOworCW9wdF9sZW4g
PSAoc29ja2xlbl90KXNpemVvZihpbnQpOworCWlmICh1c3JzY3RwX2dldHNvY2tvcHQoc28sIElQ
UFJPVE9fU0NUUCwgU0NUUF9HRVRfTE9DQUxfQUREUl9TSVpFLCAmc2l6ZV9vZl9hZGRyZXNzZXMs
ICZvcHRfbGVuKSAhPSAwKSB7CisJCWVycm5vID0gRU5PTUVNOworCQlyZXR1cm4gKC0xKTsKKwl9
CisJaWYgKHNpemVfb2ZfYWRkcmVzc2VzID09IDApIHsKKwkJZXJybm8gPSBFTk9UQ09OTjsKKwkJ
cmV0dXJuICgtMSk7CisJfQorCW9wdF9sZW4gPSAoc29ja2xlbl90KShzaXplX29mX2FkZHJlc3Nl
cyArIHNpemVvZihzdHJ1Y3Qgc2N0cF9nZXRhZGRyZXNzZXMpKTsKKwlhZGRycyA9IGNhbGxvYygx
LCAoc2l6ZV90KW9wdF9sZW4pOworCWlmIChhZGRycyA9PSBOVUxMKSB7CisJCWVycm5vID0gRU5P
TUVNOworCQlyZXR1cm4gKC0xKTsKKwl9CisJYWRkcnMtPnNnZXRfYXNzb2NfaWQgPSBpZDsKKwkv
KiBOb3cgbGV0cyBnZXQgdGhlIGFycmF5IG9mIGFkZHJlc3NlcyAqLworCWlmICh1c3JzY3RwX2dl
dHNvY2tvcHQoc28sIElQUFJPVE9fU0NUUCwgU0NUUF9HRVRfTE9DQUxfQUREUkVTU0VTLCBhZGRy
cywgJm9wdF9sZW4pICE9IDApIHsKKwkJZnJlZShhZGRycyk7CisJCWVycm5vID0gRU5PTUVNOwor
CQlyZXR1cm4gKC0xKTsKKwl9CisJKnJhZGRycyA9ICZhZGRycy0+YWRkclswXS5zYTsKKwljbnQg
PSAwOworCXNhID0gJmFkZHJzLT5hZGRyWzBdLnNhOworCWxpbSA9IChjYWRkcl90KWFkZHJzICsg
b3B0X2xlbjsKKyNpZmRlZiBIQVZFX1NBX0xFTgorCXdoaWxlICgoKGNhZGRyX3Qpc2EgPCBsaW0p
ICYmIChzYS0+c2FfbGVuID4gMCkpIHsKKwkJc2EgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRk
cl90KXNhICsgc2EtPnNhX2xlbik7CisjZWxzZQorCXdoaWxlICgoY2FkZHJfdClzYSA8IGxpbSkg
eworCQlzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCWNhc2UgQUZfSU5F
VDoKKwkJCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClzYSArIHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW4pKTsKKwkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJY2Fz
ZSBBRl9JTkVUNjoKKwkJCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClzYSArIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJCQlicmVhazsKKyNlbmRpZgorCQljYXNlIEFG
X0NPTk46CisJCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3Qpc2EgKyBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJu
IChjbnQpOworCQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCQljbnQrKzsKKwl9CisJcmV0dXJuIChj
bnQpOworfQorCit2b2lkCit1c3JzY3RwX2ZyZWVsYWRkcnMoc3RydWN0IHNvY2thZGRyICphZGRy
cykKK3sKKwkvKiBUYWtlIGF3YXkgdGhlIGhpZGRlbiBhc3NvY2lhdGlvbiBpZCAqLworCXZvaWQg
KmZyX2FkZHI7CisKKwlmcl9hZGRyID0gKHZvaWQgKikoKGNhZGRyX3QpYWRkcnMgLSBvZmZzZXRv
ZihzdHJ1Y3Qgc2N0cF9nZXRhZGRyZXNzZXMsIGFkZHIpKTsKKwkvKiBOb3cgZnJlZSBpdCAqLwor
CWZyZWUoZnJfYWRkcik7Cit9CisKKyNpZmRlZiBJTkVUCit2b2lkCitzY3RwX3VzZXJzcGFjZV9p
cF9vdXRwdXQoaW50ICpyZXN1bHQsIHN0cnVjdCBtYnVmICpvX3BhaywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBzY3RwX3JvdXRlX3QgKnJvLCB2b2lkICpzdGNiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMl90IHZyZl9pZCkKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbTsKKwlzdHJ1Y3Qg
bWJ1ZiAqbV9vcmlnOworCWludCBpb3ZjbnQ7CisJaW50IGxlbjsKKwlpbnQgc2VuZF9jb3VudDsK
KwlzdHJ1Y3QgaXAgKmlwOworCXN0cnVjdCB1ZHBoZHIgKnVkcDsKKwlzdHJ1Y3Qgc29ja2FkZHJf
aW4gZHN0OworI2lmIGRlZmluZWQoX1dJTjMyKQorCVdTQU1TRyB3aW5fbXNnX2hkcjsKKwlEV09S
RCB3aW5fc2VudF9sZW47CisJV1NBQlVGIHNlbmRfaW92ZWNbTUFYTEVOX01CVUZfQ0hBSU5dOwor
CVdTQUJVRiB3aW5idWY7CisjZWxzZQorCXN0cnVjdCBpb3ZlYyBzZW5kX2lvdmVjW01BWExFTl9N
QlVGX0NIQUlOXTsKKwlzdHJ1Y3QgbXNnaGRyIG1zZ19oZHI7CisjZW5kaWYKKwlpbnQgdXNlX3Vk
cF90dW5uZWxpbmc7CisKKwkqcmVzdWx0ID0gMDsKKworCW0gPSBTQ1RQX0hFQURFUl9UT19DSEFJ
TihvX3Bhayk7CisJbV9vcmlnID0gbTsKKworCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXApOworCWlm
IChTQ1RQX0JVRl9MRU4obSkgPCBsZW4pIHsKKwkJaWYgKChtID0gbV9wdWxsdXAobSwgbGVuKSkg
PT0gMCkgeworCQkJU0NUUF9QUklOVEYoIkNhbiBub3QgZ2V0IHRoZSBJUCBoZWFkZXIgaW4gdGhl
IGZpcnN0IG1idWYuXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlpcCA9IG10b2QobSwgc3Ry
dWN0IGlwICopOworCXVzZV91ZHBfdHVubmVsaW5nID0gKGlwLT5pcF9wID09IElQUFJPVE9fVURQ
KTsKKworCWlmICh1c2VfdWRwX3R1bm5lbGluZykgeworCQlsZW4gPSBzaXplb2Yoc3RydWN0IGlw
KSArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKKwkJaWYgKFNDVFBfQlVGX0xFTihtKSA8IGxlbikg
eworCQkJaWYgKChtID0gbV9wdWxsdXAobSwgbGVuKSkgPT0gMCkgeworCQkJCVNDVFBfUFJJTlRG
KCJDYW4gbm90IGdldCB0aGUgVURQL0lQIGhlYWRlciBpbiB0aGUgZmlyc3QgbWJ1Zi5cbiIpOwor
CQkJCXJldHVybjsKKwkJCX0KKwkJCWlwID0gbXRvZChtLCBzdHJ1Y3QgaXAgKik7CisJCX0KKwkJ
dWRwID0gKHN0cnVjdCB1ZHBoZHIgKikoaXAgKyAxKTsKKwl9IGVsc2UgeworCQl1ZHAgPSBOVUxM
OworCX0KKworCWlmICghdXNlX3VkcF90dW5uZWxpbmcpIHsKKwkJaWYgKGlwLT5pcF9zcmMuc19h
ZGRyID09IElOQUREUl9BTlkpIHsKKwkJCS8qIFRPRE8gZ2V0IGFkZHIgb2Ygb3V0Z29pbmcgaW50
ZXJmYWNlICovCisJCQlTQ1RQX1BSSU5URigiV2h5IGRpZCB0aGUgU0NUUCBpbXBsZW1lbnRhdGlv
biBkaWQgbm90IGNob29zZSBhIHNvdXJjZSBhZGRyZXNzP1xuIik7CisJCX0KKwkJLyogVE9ETyBu
ZWVkIHRvIHdvcnJ5IGFib3V0IHJvLT5yb19kc3QgYXMgaW4gaXBfb3V0cHV0PyAqLworI2lmIGRl
ZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9XSU4zMikgfHwgKGRlZmluZWQoX19GcmVlQlNE
X18pICYmIChfX0ZyZWVCU0RfdmVyc2lvbiA+PSAxMTAwMDMwKSkKKwkJLyogbmVlZCB0byBwdXQg
Y2VydGFpbiBmaWVsZHMgaW50byBuZXR3b3JrIG9yZGVyIGZvciBMaW51eCAqLworCQlpcC0+aXBf
bGVuID0gaHRvbnMoaXAtPmlwX2xlbik7CisjZW5kaWYKKwl9CisKKwltZW1zZXQoKHZvaWQgKikm
ZHN0LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJZHN0LnNpbl9mYW1pbHkgPSBB
Rl9JTkVUOworCWRzdC5zaW5fYWRkci5zX2FkZHIgPSBpcC0+aXBfZHN0LnNfYWRkcjsKKyNpZmRl
ZiBIQVZFX1NJTl9MRU4KKwlkc3Quc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4p
OworI2VuZGlmCisJaWYgKHVzZV91ZHBfdHVubmVsaW5nKSB7CisJCWRzdC5zaW5fcG9ydCA9IHVk
cC0+dWhfZHBvcnQ7CisJfSBlbHNlIHsKKwkJZHN0LnNpbl9wb3J0ID0gMDsKKwl9CisKKwkvKiB0
d2VhayB0aGUgbWJ1ZiBjaGFpbiAqLworCWlmICh1c2VfdWRwX3R1bm5lbGluZykgeworCQltX2Fk
aihtLCBzaXplb2Yoc3RydWN0IGlwKSArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7CisJfQorCisJ
c2VuZF9jb3VudCA9IDA7CisJZm9yIChpb3ZjbnQgPSAwOyBtICE9IE5VTEwgJiYgaW92Y250IDwg
TUFYTEVOX01CVUZfQ0hBSU47IG0gPSBtLT5tX25leHQsIGlvdmNudCsrKSB7CisjaWYgIWRlZmlu
ZWQoX1dJTjMyKQorCQlzZW5kX2lvdmVjW2lvdmNudF0uaW92X2Jhc2UgPSAoY2FkZHJfdCltLT5t
X2RhdGE7CisJCXNlbmRfaW92ZWNbaW92Y250XS5pb3ZfbGVuID0gU0NUUF9CVUZfTEVOKG0pOwor
CQlzZW5kX2NvdW50ICs9IHNlbmRfaW92ZWNbaW92Y250XS5pb3ZfbGVuOworI2Vsc2UKKwkJc2Vu
ZF9pb3ZlY1tpb3ZjbnRdLmJ1ZiA9IChjYWRkcl90KW0tPm1fZGF0YTsKKwkJc2VuZF9pb3ZlY1tp
b3ZjbnRdLmxlbiA9IFNDVFBfQlVGX0xFTihtKTsKKwkJc2VuZF9jb3VudCArPSBzZW5kX2lvdmVj
W2lvdmNudF0ubGVuOworI2VuZGlmCisJfQorCisJaWYgKG0gIT0gTlVMTCkgeworCQlTQ1RQX1BS
SU5URigibWJ1ZiBjaGFpbiBjb3VsZG4ndCBiZSBjb3BpZWQgY29tcGxldGVseVxuIik7CisJCWdv
dG8gZnJlZV9tYnVmOworCX0KKworI2lmICFkZWZpbmVkKF9XSU4zMikKKwltc2dfaGRyLm1zZ19u
YW1lID0gKHN0cnVjdCBzb2NrYWRkciAqKSAmZHN0OworCW1zZ19oZHIubXNnX25hbWVsZW4gPSBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKwltc2dfaGRyLm1zZ19pb3YgPSBzZW5kX2lvdmVj
OworCW1zZ19oZHIubXNnX2lvdmxlbiA9IGlvdmNudDsKKwltc2dfaGRyLm1zZ19jb250cm9sID0g
TlVMTDsKKwltc2dfaGRyLm1zZ19jb250cm9sbGVuID0gMDsKKwltc2dfaGRyLm1zZ19mbGFncyA9
IDA7CisKKwlpZiAoKCF1c2VfdWRwX3R1bm5lbGluZykgJiYgKFNDVFBfQkFTRV9WQVIodXNlcnNw
YWNlX3Jhd3NjdHApICE9IC0xKSkgeworCQlpZiAoc2VuZG1zZyhTQ1RQX0JBU0VfVkFSKHVzZXJz
cGFjZV9yYXdzY3RwKSwgJm1zZ19oZHIsIE1TR19ET05UV0FJVCkgPCAwKSB7CisJCQkqcmVzdWx0
ID0gZXJybm87CisJCX0KKwl9CisJaWYgKCh1c2VfdWRwX3R1bm5lbGluZykgJiYgKFNDVFBfQkFT
RV9WQVIodXNlcnNwYWNlX3VkcHNjdHApICE9IC0xKSkgeworCQlpZiAoc2VuZG1zZyhTQ1RQX0JB
U0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwKSwgJm1zZ19oZHIsIE1TR19ET05UV0FJVCkgPCAwKSB7
CisJCQkqcmVzdWx0ID0gZXJybm87CisJCX0KKwl9CisjZWxzZQorCXdpbl9tc2dfaGRyLm5hbWUg
PSAoc3RydWN0IHNvY2thZGRyICopICZkc3Q7CisJd2luX21zZ19oZHIubmFtZWxlbiA9IHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworCXdpbl9tc2dfaGRyLmxwQnVmZmVycyA9IChMUFdTQUJV
RilzZW5kX2lvdmVjOworCXdpbl9tc2dfaGRyLmR3QnVmZmVyQ291bnQgPSBpb3ZjbnQ7CisJd2lu
YnVmLmxlbiA9IDA7CisJd2luYnVmLmJ1ZiA9IE5VTEw7CisJd2luX21zZ19oZHIuQ29udHJvbCA9
IHdpbmJ1ZjsKKwl3aW5fbXNnX2hkci5kd0ZsYWdzID0gMDsKKworCWlmICgoIXVzZV91ZHBfdHVu
bmVsaW5nKSAmJiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cCkgIT0gLTEpKSB7CisJ
CWlmIChXU0FTZW5kVG8oU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cCksIChMUFdTQUJV
Rikgc2VuZF9pb3ZlYywgaW92Y250LCAmd2luX3NlbnRfbGVuLCB3aW5fbXNnX2hkci5kd0ZsYWdz
LCB3aW5fbXNnX2hkci5uYW1lLCAoaW50KSB3aW5fbXNnX2hkci5uYW1lbGVuLCBOVUxMLCBOVUxM
KSAhPSAwKSB7CisJCQkqcmVzdWx0ID0gV1NBR2V0TGFzdEVycm9yKCk7CisJCX0KKwl9CisJaWYg
KCh1c2VfdWRwX3R1bm5lbGluZykgJiYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHAp
ICE9IC0xKSkgeworCQlpZiAoV1NBU2VuZFRvKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNj
dHApLCAoTFBXU0FCVUYpIHNlbmRfaW92ZWMsIGlvdmNudCwgJndpbl9zZW50X2xlbiwgd2luX21z
Z19oZHIuZHdGbGFncywgd2luX21zZ19oZHIubmFtZSwgKGludCkgd2luX21zZ19oZHIubmFtZWxl
biwgTlVMTCwgTlVMTCkgIT0gMCkgeworCQkJKnJlc3VsdCA9IFdTQUdldExhc3RFcnJvcigpOwor
CQl9CisJfQorI2VuZGlmCitmcmVlX21idWY6CisJc2N0cF9tX2ZyZWVtKG1fb3JpZyk7Cit9Cisj
ZW5kaWYKKworI2lmIGRlZmluZWQoSU5FVDYpCit2b2lkIHNjdHBfdXNlcnNwYWNlX2lwNl9vdXRw
dXQoaW50ICpyZXN1bHQsIHN0cnVjdCBtYnVmICpvX3BhaywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJvdXRlX2luNiAqcm8sIHZvaWQgKnN0Y2Is
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZy
Zl9pZCkKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbTsKKwlzdHJ1Y3QgbWJ1ZiAqbV9vcmlnOworCWludCBp
b3ZjbnQ7CisJaW50IGxlbjsKKwlpbnQgc2VuZF9jb3VudDsKKwlzdHJ1Y3QgaXA2X2hkciAqaXA2
OworCXN0cnVjdCB1ZHBoZHIgKnVkcDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IGRzdDsKKyNpZiBk
ZWZpbmVkKF9XSU4zMikKKwlXU0FNU0cgd2luX21zZ19oZHI7CisJRFdPUkQgd2luX3NlbnRfbGVu
OworCVdTQUJVRiBzZW5kX2lvdmVjW01BWExFTl9NQlVGX0NIQUlOXTsKKwlXU0FCVUYgd2luYnVm
OworI2Vsc2UKKwlzdHJ1Y3QgaW92ZWMgc2VuZF9pb3ZlY1tNQVhMRU5fTUJVRl9DSEFJTl07CisJ
c3RydWN0IG1zZ2hkciBtc2dfaGRyOworI2VuZGlmCisJaW50IHVzZV91ZHBfdHVubmVsaW5nOwor
CisJKnJlc3VsdCA9IDA7CisKKwltID0gU0NUUF9IRUFERVJfVE9fQ0hBSU4ob19wYWspOworCW1f
b3JpZyA9IG07CisKKwlsZW4gPSBzaXplb2Yoc3RydWN0IGlwNl9oZHIpOworCisJaWYgKFNDVFBf
QlVGX0xFTihtKSA8IGxlbikgeworCQlpZiAoKG0gPSBtX3B1bGx1cChtLCBsZW4pKSA9PSAwKSB7
CisJCQlTQ1RQX1BSSU5URigiQ2FuIG5vdCBnZXQgdGhlIElQIGhlYWRlciBpbiB0aGUgZmlyc3Qg
bWJ1Zi5cbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJaXA2ID0gbXRvZChtLCBzdHJ1Y3Qg
aXA2X2hkciAqKTsKKwl1c2VfdWRwX3R1bm5lbGluZyA9IChpcDYtPmlwNl9ueHQgPT0gSVBQUk9U
T19VRFApOworCisJaWYgKHVzZV91ZHBfdHVubmVsaW5nKSB7CisJCWxlbiA9IHNpemVvZihzdHJ1
Y3QgaXA2X2hkcikgKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7CisJCWlmIChTQ1RQX0JVRl9MRU4o
bSkgPCBsZW4pIHsKKwkJCWlmICgobSA9IG1fcHVsbHVwKG0sIGxlbikpID09IDApIHsKKwkJCQlT
Q1RQX1BSSU5URigiQ2FuIG5vdCBnZXQgdGhlIFVEUC9JUCBoZWFkZXIgaW4gdGhlIGZpcnN0IG1i
dWYuXG4iKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlpcDYgPSBtdG9kKG0sIHN0cnVjdCBpcDZf
aGRyICopOworCQl9CisJCXVkcCA9IChzdHJ1Y3QgdWRwaGRyICopKGlwNiArIDEpOworCX0gZWxz
ZSB7CisJCXVkcCA9IE5VTEw7CisJfQorCisJaWYgKCF1c2VfdWRwX3R1bm5lbGluZykgeworCQlp
ZiAoaXA2LT5pcDZfc3JjLnM2X2FkZHIgPT0gaW42YWRkcl9hbnkuczZfYWRkcikgeworCQkJLyog
VE9ETyBnZXQgYWRkciBvZiBvdXRnb2luZyBpbnRlcmZhY2UgKi8KKwkJCVNDVFBfUFJJTlRGKCJX
aHkgZGlkIHRoZSBTQ1RQIGltcGxlbWVudGF0aW9uIGRpZCBub3QgY2hvb3NlIGEgc291cmNlIGFk
ZHJlc3M/XG4iKTsKKwkJfQorCQkvKiBUT0RPIG5lZWQgdG8gd29ycnkgYWJvdXQgcm8tPnJvX2Rz
dCBhcyBpbiBpcF9vdXRwdXQ/ICovCisJfQorCisJbWVtc2V0KCh2b2lkICopJmRzdCwgMCwgc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwlkc3Quc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsK
Kwlkc3Quc2luNl9hZGRyID0gaXA2LT5pcDZfZHN0OworI2lmZGVmIEhBVkVfU0lONl9MRU4KKwlk
c3Quc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKworCWlm
ICh1c2VfdWRwX3R1bm5lbGluZykgeworCQlkc3Quc2luNl9wb3J0ID0gdWRwLT51aF9kcG9ydDsK
Kwl9IGVsc2UgeworCQlkc3Quc2luNl9wb3J0ID0gMDsKKwl9CisKKwkvKiB0d2VhayB0aGUgbWJ1
ZiBjaGFpbiAqLworCWlmICh1c2VfdWRwX3R1bm5lbGluZykgeworCQltX2FkaihtLCBzaXplb2Yo
c3RydWN0IGlwNl9oZHIpICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsKKwl9IGVsc2UgeworCSAg
bV9hZGoobSwgc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSk7CisJfQorCisJc2VuZF9jb3VudCA9IDA7
CisJZm9yIChpb3ZjbnQgPSAwOyBtICE9IE5VTEwgJiYgaW92Y250IDwgTUFYTEVOX01CVUZfQ0hB
SU47IG0gPSBtLT5tX25leHQsIGlvdmNudCsrKSB7CisjaWYgIWRlZmluZWQoX1dJTjMyKQorCQlz
ZW5kX2lvdmVjW2lvdmNudF0uaW92X2Jhc2UgPSAoY2FkZHJfdCltLT5tX2RhdGE7CisJCXNlbmRf
aW92ZWNbaW92Y250XS5pb3ZfbGVuID0gU0NUUF9CVUZfTEVOKG0pOworCQlzZW5kX2NvdW50ICs9
IHNlbmRfaW92ZWNbaW92Y250XS5pb3ZfbGVuOworI2Vsc2UKKwkJc2VuZF9pb3ZlY1tpb3ZjbnRd
LmJ1ZiA9IChjYWRkcl90KW0tPm1fZGF0YTsKKwkJc2VuZF9pb3ZlY1tpb3ZjbnRdLmxlbiA9IFND
VFBfQlVGX0xFTihtKTsKKwkJc2VuZF9jb3VudCArPSBzZW5kX2lvdmVjW2lvdmNudF0ubGVuOwor
I2VuZGlmCisJfQorCWlmIChtICE9IE5VTEwpIHsKKwkJU0NUUF9QUklOVEYoIm1idWYgY2hhaW4g
Y291bGRuJ3QgYmUgY29waWVkIGNvbXBsZXRlbHlcbiIpOworCQlnb3RvIGZyZWVfbWJ1ZjsKKwl9
CisKKyNpZiAhZGVmaW5lZChfV0lOMzIpCisJbXNnX2hkci5tc2dfbmFtZSA9IChzdHJ1Y3Qgc29j
a2FkZHIgKikgJmRzdDsKKwltc2dfaGRyLm1zZ19uYW1lbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbjYpOworCW1zZ19oZHIubXNnX2lvdiA9IHNlbmRfaW92ZWM7CisJbXNnX2hkci5tc2df
aW92bGVuID0gaW92Y250OworCW1zZ19oZHIubXNnX2NvbnRyb2wgPSBOVUxMOworCW1zZ19oZHIu
bXNnX2NvbnRyb2xsZW4gPSAwOworCW1zZ19oZHIubXNnX2ZsYWdzID0gMDsKKworCWlmICgoIXVz
ZV91ZHBfdHVubmVsaW5nKSAmJiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpICE9
IC0xKSkgeworCQlpZiAoc2VuZG1zZyhTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNiks
ICZtc2dfaGRyLCBNU0dfRE9OVFdBSVQpPCAwKSB7CisJCQkqcmVzdWx0ID0gZXJybm87CisJCX0K
Kwl9CisJaWYgKCh1c2VfdWRwX3R1bm5lbGluZykgJiYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNl
X3VkcHNjdHA2KSAhPSAtMSkpIHsKKwkJaWYgKHNlbmRtc2coU0NUUF9CQVNFX1ZBUih1c2Vyc3Bh
Y2VfdWRwc2N0cDYpLCAmbXNnX2hkciwgTVNHX0RPTlRXQUlUKSA8IDApIHsKKwkJCSpyZXN1bHQg
PSBlcnJubzsKKwkJfQorCX0KKyNlbHNlCisJd2luX21zZ19oZHIubmFtZSA9IChzdHJ1Y3Qgc29j
a2FkZHIgKikgJmRzdDsKKwl3aW5fbXNnX2hkci5uYW1lbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbjYpOworCXdpbl9tc2dfaGRyLmxwQnVmZmVycyA9IChMUFdTQUJVRilzZW5kX2lvdmVj
OworCXdpbl9tc2dfaGRyLmR3QnVmZmVyQ291bnQgPSBpb3ZjbnQ7CisJd2luYnVmLmxlbiA9IDA7
CisJd2luYnVmLmJ1ZiA9IE5VTEw7CisJd2luX21zZ19oZHIuQ29udHJvbCA9IHdpbmJ1ZjsKKwl3
aW5fbXNnX2hkci5kd0ZsYWdzID0gMDsKKworCWlmICgoIXVzZV91ZHBfdHVubmVsaW5nKSAmJiAo
U0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpICE9IC0xKSkgeworCQlpZiAoV1NBU2Vu
ZFRvKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSwgKExQV1NBQlVGKSBzZW5kX2lv
dmVjLCBpb3ZjbnQsICZ3aW5fc2VudF9sZW4sIHdpbl9tc2dfaGRyLmR3RmxhZ3MsIHdpbl9tc2df
aGRyLm5hbWUsIChpbnQpIHdpbl9tc2dfaGRyLm5hbWVsZW4sIE5VTEwsIE5VTEwpICE9IDApIHsK
KwkJCSpyZXN1bHQgPSBXU0FHZXRMYXN0RXJyb3IoKTsKKwkJfQorCX0KKwlpZiAoKHVzZV91ZHBf
dHVubmVsaW5nKSAmJiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpICE9IC0xKSkg
eworCQlpZiAoV1NBU2VuZFRvKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSwgKExQ
V1NBQlVGKSBzZW5kX2lvdmVjLCBpb3ZjbnQsICZ3aW5fc2VudF9sZW4sIHdpbl9tc2dfaGRyLmR3
RmxhZ3MsIHdpbl9tc2dfaGRyLm5hbWUsIChpbnQpIHdpbl9tc2dfaGRyLm5hbWVsZW4sIE5VTEws
IE5VTEwpICE9IDApIHsKKwkJCSpyZXN1bHQgPSBXU0FHZXRMYXN0RXJyb3IoKTsKKwkJfQorCX0K
KyNlbmRpZgorZnJlZV9tYnVmOgorCXNjdHBfbV9mcmVlbShtX29yaWcpOworfQorI2VuZGlmCisK
K3ZvaWQKK3VzcnNjdHBfcmVnaXN0ZXJfYWRkcmVzcyh2b2lkICphZGRyKQoreworCXN0cnVjdCBz
b2NrYWRkcl9jb25uIHNjb25uOworCisJbWVtc2V0KCZzY29ubiwgMCwgc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9jb25uKSk7CisJc2Nvbm4uc2Nvbm5fZmFtaWx5ID0gQUZfQ09OTjsKKyNpZmRlZiBI
QVZFX1NDT05OX0xFTgorCXNjb25uLnNjb25uX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
Y29ubik7CisjZW5kaWYKKwlzY29ubi5zY29ubl9wb3J0ID0gMDsKKwlzY29ubi5zY29ubl9hZGRy
ID0gYWRkcjsKKwlzY3RwX2FkZF9hZGRyX3RvX3ZyZihTQ1RQX0RFRkFVTFRfVlJGSUQsCisJICAg
ICAgICAgICAgICAgICAgICAgTlVMTCwKKwkgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZm
LAorCSAgICAgICAgICAgICAgICAgICAgIDAsCisJICAgICAgICAgICAgICAgICAgICAgImNvbm4i
LAorCSAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisJICAgICAgICAgICAgICAgICAgICAgKHN0
cnVjdCBzb2NrYWRkciAqKSZzY29ubiwKKwkgICAgICAgICAgICAgICAgICAgICAwLAorCSAgICAg
ICAgICAgICAgICAgICAgIDApOworfQorCit2b2lkCit1c3JzY3RwX2RlcmVnaXN0ZXJfYWRkcmVz
cyh2b2lkICphZGRyKQoreworCXN0cnVjdCBzb2NrYWRkcl9jb25uIHNjb25uOworCisJbWVtc2V0
KCZzY29ubiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7CisJc2Nvbm4uc2Nvbm5f
ZmFtaWx5ID0gQUZfQ09OTjsKKyNpZmRlZiBIQVZFX1NDT05OX0xFTgorCXNjb25uLnNjb25uX2xl
biA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7CisjZW5kaWYKKwlzY29ubi5zY29ubl9w
b3J0ID0gMDsKKwlzY29ubi5zY29ubl9hZGRyID0gYWRkcjsKKwlzY3RwX2RlbF9hZGRyX2Zyb21f
dnJmKFNDVFBfREVGQVVMVF9WUkZJRCwKKwkgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qg
c29ja2FkZHIgKikmc2Nvbm4sCisJICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmLAor
CSAgICAgICAgICAgICAgICAgICAgICAgImNvbm4iKTsKK30KKworI2RlZmluZSBQUkVBTUJMRV9G
T1JNQVQgIlxuJWMgJTAyZDolMDJkOiUwMmQuJTA2bGQgIgorI2RlZmluZSBQUkVBTUJMRV9MRU5H
VEggMTkKKyNkZWZpbmUgSEVBREVSICIwMDAwICIKKyNkZWZpbmUgVFJBSUxFUiAiIyBTQ1RQX1BB
Q0tFVFxuIgorCitjaGFyICoKK3VzcnNjdHBfZHVtcHBhY2tldChjb25zdCB2b2lkICpidWYsIHNp
emVfdCBsZW4sIGludCBvdXRib3VuZCkKK3sKKwlzaXplX3QgaSwgcG9zOworCWNoYXIgKmR1bXBf
YnVmLCAqcGFja2V0OworCXN0cnVjdCB0bSB0OworI2lmZGVmIF9XSU4zMgorCXN0cnVjdCB0aW1l
YiB0YjsKKyNlbHNlCisJc3RydWN0IHRpbWV2YWwgdHY7CisJdGltZV90IHNlYzsKKyNlbmRpZgor
CisJaWYgKChsZW4gPT0gMCkgfHwgKGJ1ZiA9PSBOVUxMKSkgeworCQlyZXR1cm4gKE5VTEwpOwor
CX0KKwlpZiAoKGR1bXBfYnVmID0gbWFsbG9jKFBSRUFNQkxFX0xFTkdUSCArIHN0cmxlbihIRUFE
RVIpICsgMyAqIGxlbiArIHN0cmxlbihUUkFJTEVSKSArIDEpKSA9PSBOVUxMKSB7CisJCXJldHVy
biAoTlVMTCk7CisJfQorCXBvcyA9IDA7CisjaWZkZWYgX1dJTjMyCisJZnRpbWUoJnRiKTsKKwls
b2NhbHRpbWVfcygmdCwgJnRiLnRpbWUpOworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pCisJaWYg
KHNucHJpbnRmKGR1bXBfYnVmLCBQUkVBTUJMRV9MRU5HVEggKyAxLCBQUkVBTUJMRV9GT1JNQVQs
CisJICAgICAgICAgICAgIG91dGJvdW5kID8gJ08nIDogJ0knLAorCSAgICAgICAgICAgICB0LnRt
X2hvdXIsIHQudG1fbWluLCB0LnRtX3NlYywgKGxvbmcpKDEwMDAgKiB0Yi5taWxsaXRtKSkgPCAw
KSB7CisJCWZyZWUoZHVtcF9idWYpOworCQlyZXR1cm4gKE5VTEwpOworCX0KKyNlbHNlCisJaWYg
KF9zbnByaW50Zl9zKGR1bXBfYnVmLCBQUkVBTUJMRV9MRU5HVEggKyAxLCBQUkVBTUJMRV9MRU5H
VEgsIFBSRUFNQkxFX0ZPUk1BVCwKKwkgICAgICAgICAgICAgICAgb3V0Ym91bmQgPyAnTycgOiAn
SScsCisJICAgICAgICAgICAgICAgIHQudG1faG91ciwgdC50bV9taW4sIHQudG1fc2VjLCAobG9u
ZykoMTAwMCAqIHRiLm1pbGxpdG0pKSA8IDApIHsKKwkJZnJlZShkdW1wX2J1Zik7CisJCXJldHVy
biAoTlVMTCk7CisJfQorI2VuZGlmCisjZWxzZQorCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOwor
CXNlYyA9ICh0aW1lX3QpdHYudHZfc2VjOworCWxvY2FsdGltZV9yKChjb25zdCB0aW1lX3QgKikm
c2VjLCAmdCk7CisJaWYgKHNucHJpbnRmKGR1bXBfYnVmLCBQUkVBTUJMRV9MRU5HVEggKyAxLCBQ
UkVBTUJMRV9GT1JNQVQsCisJICAgICAgICAgICAgIG91dGJvdW5kID8gJ08nIDogJ0knLAorCSAg
ICAgICAgICAgICB0LnRtX2hvdXIsIHQudG1fbWluLCB0LnRtX3NlYywgKGxvbmcpdHYudHZfdXNl
YykgPCAwKSB7CisJCWZyZWUoZHVtcF9idWYpOworCQlyZXR1cm4gKE5VTEwpOworCX0KKyNlbmRp
ZgorCXBvcyArPSBQUkVBTUJMRV9MRU5HVEg7CisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZp
bmVkKF9fTUlOR1czMl9fKQorCXN0cm5jcHlfcyhkdW1wX2J1ZiArIHBvcywgc3RybGVuKEhFQURF
UikgKyAxLCBIRUFERVIsIHN0cmxlbihIRUFERVIpKTsKKyNlbHNlCisJc3RyY3B5KGR1bXBfYnVm
ICsgcG9zLCBIRUFERVIpOworI2VuZGlmCisJcG9zICs9IHN0cmxlbihIRUFERVIpOworCXBhY2tl
dCA9IChjaGFyICopYnVmOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQl1aW50OF90
IGJ5dGUsIGxvdywgaGlnaDsKKworCQlieXRlID0gKHVpbnQ4X3QpcGFja2V0W2ldOworCQloaWdo
ID0gYnl0ZSAvIDE2OworCQlsb3cgPSBieXRlICUgMTY7CisJCWR1bXBfYnVmW3BvcysrXSA9IGhp
Z2ggPCAxMCA/ICcwJyArIGhpZ2ggOiAnYScgKyAoaGlnaCAtIDEwKTsKKwkJZHVtcF9idWZbcG9z
KytdID0gbG93IDwgMTAgPyAnMCcgKyBsb3cgOiAnYScgKyAobG93IC0gMTApOworCQlkdW1wX2J1
Zltwb3MrK10gPSAnICc7CisJfQorI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX01J
TkdXMzJfXykKKwlzdHJuY3B5X3MoZHVtcF9idWYgKyBwb3MsIHN0cmxlbihUUkFJTEVSKSArIDEs
IFRSQUlMRVIsIHN0cmxlbihUUkFJTEVSKSk7CisjZWxzZQorCXN0cmNweShkdW1wX2J1ZiArIHBv
cywgVFJBSUxFUik7CisjZW5kaWYKKwlwb3MgKz0gc3RybGVuKFRSQUlMRVIpOworCWR1bXBfYnVm
W3BvcysrXSA9ICdcMCc7CisJcmV0dXJuIChkdW1wX2J1Zik7Cit9CisKK3ZvaWQKK3VzcnNjdHBf
ZnJlZWR1bXBidWZmZXIoY2hhciAqYnVmKQoreworCWZyZWUoYnVmKTsKK30KKwordm9pZAordXNy
c2N0cF9lbmFibGVfY3JjMzJjX29mZmxvYWQodm9pZCkKK3sKKwlTQ1RQX0JBU0VfVkFSKGNyYzMy
Y19vZmZsb2FkZWQpID0gMTsKK30KKwordm9pZAordXNyc2N0cF9kaXNhYmxlX2NyYzMyY19vZmZs
b2FkKHZvaWQpCit7CisJU0NUUF9CQVNFX1ZBUihjcmMzMmNfb2ZmbG9hZGVkKSA9IDA7Cit9CisK
Ky8qIENvbXB1dGUgdGhlIENSQzMyQyBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgKi8KK3VpbnQzMl90
Cit1c3JzY3RwX2NyYzMyYyh2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgpCit7CisJdWludDMy
X3QgYmFzZSA9IDB4ZmZmZmZmZmY7CisKKwliYXNlID0gY2FsY3VsYXRlX2NyYzMyYygweGZmZmZm
ZmZmLCAodW5zaWduZWQgY2hhciAqKWJ1ZmZlciwgKHVuc2lnbmVkIGludCkgbGVuZ3RoKTsKKwli
YXNlID0gc2N0cF9maW5hbGl6ZV9jcmMzMmMoYmFzZSk7CisJcmV0dXJuIChiYXNlKTsKK30KKwor
dm9pZAordXNyc2N0cF9jb25uaW5wdXQodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqYnVmZmVyLCBz
aXplX3QgbGVuZ3RoLCB1aW50OF90IGVjbl9iaXRzKQoreworCXN0cnVjdCBzb2NrYWRkcl9jb25u
IHNyYywgZHN0OworCXN0cnVjdCBtYnVmICptLCAqbW07CisJc3RydWN0IHNjdHBoZHIgKnNoOwor
CXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKKwlpbnQgcmVtYWluaW5nLCBvZmZzZXQ7CisKKwlT
Q1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2cGFja2V0cyk7CisJU0NUUF9TVEFUX0lOQ1JfQ09VTlRF
UjY0KHNjdHBzX2lucGFja2V0cyk7CisJbWVtc2V0KCZzcmMsIDAsIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfY29ubikpOworCXNyYy5zY29ubl9mYW1pbHkgPSBBRl9DT05OOworI2lmZGVmIEhBVkVf
U0NPTk5fTEVOCisJc3JjLnNjb25uX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7
CisjZW5kaWYKKwlzcmMuc2Nvbm5fYWRkciA9IGFkZHI7CisJbWVtc2V0KCZkc3QsIDAsIHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCWRzdC5zY29ubl9mYW1pbHkgPSBBRl9DT05OOwor
I2lmZGVmIEhBVkVfU0NPTk5fTEVOCisJZHN0LnNjb25uX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfY29ubik7CisjZW5kaWYKKwlkc3Quc2Nvbm5fYWRkciA9IGFkZHI7CisJaWYgKChtID0g
c2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKCh1bnNpZ25lZCBpbnQpbGVuZ3RoLCAxLCBNX05PV0FJVCwg
MCwgTVRfREFUQSkpID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKwkvKiBTZXQgdGhlIGxlbmd0
aHMgZmllbGRzIG9mIHRoZSBtYnVmIGNoYWluLgorCSAqIFRoaXMgaXMgZXhwZWN0ZWQgYnkgbV9j
b3B5YmFjaygpLgorCSAqLworCXJlbWFpbmluZyA9IChpbnQpbGVuZ3RoOworCWZvciAobW0gPSBt
OyBtbSAhPSBOVUxMOyBtbSA9IG1tLT5tX25leHQpIHsKKwkJbW0tPm1fbGVuID0gbWluKChpbnQp
TV9TSVpFKG1tKSwgcmVtYWluaW5nKTsKKwkJbS0+bV9wa3RoZHIubGVuICs9IG1tLT5tX2xlbjsK
KwkJcmVtYWluaW5nIC09IG1tLT5tX2xlbjsKKwl9CisJS0FTU0VSVChyZW1haW5pbmcgPT0gMCwg
KCJ1c3JzY3RwX2Nvbm5pbnB1dDogJXp1IGJ5dGVzIGxlZnQiLCByZW1haW5pbmcpKTsKKwltX2Nv
cHliYWNrKG0sIDAsIChpbnQpbGVuZ3RoLCAoY2FkZHJfdClidWZmZXIpOworCW9mZnNldCA9IHNp
emVvZihzdHJ1Y3Qgc2N0cGhkcikgKyBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpOworCWlm
IChTQ1RQX0JVRl9MRU4obSkgPCBvZmZzZXQpIHsKKwkJaWYgKChtID0gbV9wdWxsdXAobSwgb2Zm
c2V0KSkgPT0gTlVMTCkgeworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfaGRyb3BzKTsKKwkJCXJl
dHVybjsKKwkJfQorCX0KKwlzaCA9IG10b2QobSwgc3RydWN0IHNjdHBoZHIgKik7CisJY2ggPSAo
c3RydWN0IHNjdHBfY2h1bmtoZHIgKikoKGNhZGRyX3Qpc2ggKyBzaXplb2Yoc3RydWN0IHNjdHBo
ZHIpKTsKKwlvZmZzZXQgLT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKTsKKwlzcmMuc2Nv
bm5fcG9ydCA9IHNoLT5zcmNfcG9ydDsKKwlkc3Quc2Nvbm5fcG9ydCA9IHNoLT5kZXN0X3BvcnQ7
CisJc2N0cF9jb21tb25faW5wdXRfcHJvY2Vzc2luZygmbSwgMCwgb2Zmc2V0LCAoaW50KWxlbmd0
aCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3Jj
LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZkc3Qs
CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaCwgY2gsCisJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTQ1RQX0JBU0VfVkFSKGNyYzMyY19vZmZsb2FkZWQpID09IDEgPyAwIDog
MSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjbl9iaXRzLAorCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU0NUUF9ERUZBVUxUX1ZSRklELCAwKTsKKwlpZiAobSkgeworCQlz
Y3RwX21fZnJlZW0obSk7CisJfQorCXJldHVybjsKK30KKwordm9pZCB1c3JzY3RwX2hhbmRsZV90
aW1lcnModWludDMyX3QgZWxhcHNlZF9taWxsaXNlY29uZHMpCit7CisJc2N0cF9oYW5kbGVfdGlj
ayhzY3RwX21zZWNzX3RvX3RpY2tzKGVsYXBzZWRfbWlsbGlzZWNvbmRzKSk7Cit9CisKK2ludAor
dXNyc2N0cF9nZXRfZXZlbnRzKHN0cnVjdCBzb2NrZXQgKnNvKQoreworCWludCBldmVudHMgPSAw
OworCisJaWYgKHNvID09IE5VTEwpIHsKKwkJZXJybm8gPSBFQkFERjsKKwkJcmV0dXJuIC0xOwor
CX0KKworCVNPQ0tfTE9DSyhzbyk7CisJaWYgKHNvcmVhZGFibGUoc28pKSB7CisJCWV2ZW50cyB8
PSBTQ1RQX0VWRU5UX1JFQUQ7CisJfQorCWlmIChzb3dyaXRlYWJsZShzbykpIHsKKwkJZXZlbnRz
IHw9IFNDVFBfRVZFTlRfV1JJVEU7CisJfQorCWlmIChzby0+c29fZXJyb3IpIHsKKwkJZXZlbnRz
IHw9IFNDVFBfRVZFTlRfRVJST1I7CisJfQorCVNPQ0tfVU5MT0NLKHNvKTsKKworCXJldHVybiBl
dmVudHM7Cit9CisKK2ludAordXNyc2N0cF9zZXRfdXBjYWxsKHN0cnVjdCBzb2NrZXQgKnNvLCB2
b2lkICgqdXBjYWxsKShzdHJ1Y3Qgc29ja2V0ICosIHZvaWQgKiwgaW50KSwgdm9pZCAqYXJnKQor
eworCWlmIChzbyA9PSBOVUxMKSB7CisJCWVycm5vID0gRUJBREY7CisJCXJldHVybiAoLTEpOwor
CX0KKworCVNPQ0tfTE9DSyhzbyk7CisJc28tPnNvX3VwY2FsbCA9IHVwY2FsbDsKKwlzby0+c29f
dXBjYWxsYXJnID0gYXJnOworCXNvLT5zb19zbmQuc2JfZmxhZ3MgfD0gU0JfVVBDQUxMOworCXNv
LT5zb19yY3Yuc2JfZmxhZ3MgfD0gU0JfVVBDQUxMOworCVNPQ0tfVU5MT0NLKHNvKTsKKworCXJl
dHVybiAoMCk7Cit9CisKKyNkZWZpbmUgVVNSU0NUUF9UVU5BQkxFX1NFVF9ERUYoX19maWVsZCwg
X19wcmVmaXgpICAgXAoraW50IHVzcnNjdHBfdHVuYWJsZV9zZXRfICMjIF9fZmllbGQodWludDMy
X3QgdmFsdWUpICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKwlpZiAoKHZhbHVlIDwgX19wcmVmaXgjI19NSU4pIHx8ICAgICAgICAgICAg
ICBcCisJICAgICh2YWx1ZSA+IF9fcHJlZml4IyNfTUFYKSkgeyAgICAgICAgICAgICAgXAorCQll
cnJubyA9IEVJTlZBTDsgICAgICAgICAgICAgICAgICAgICAgXAorCQlyZXR1cm4gKC0xKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorCX0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKwkJU0NUUF9CQVNFX1NZU0NUTChfX2ZpZWxkKSA9IHZhbHVlOyAgIFwK
KwkJcmV0dXJuICgwKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKK1VTUlNDVFBfVFVOQUJMRV9T
RVRfREVGKHNjdHBfaGFzaHRibHNpemUsIFNDVFBDVExfVENCSEFTSFNJWkUpCitVU1JTQ1RQX1RV
TkFCTEVfU0VUX0RFRihzY3RwX3BjYnRibHNpemUsIFNDVFBDVExfUENCSEFTSFNJWkUpCitVU1JT
Q1RQX1RVTkFCTEVfU0VUX0RFRihzY3RwX2NodW5rc2NhbGUsIFNDVFBDVExfQ0hVTktTQ0FMRSkK
KworI2RlZmluZSBVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKF9fZmllbGQsIF9fcHJlZml4KSAgICBc
CitpbnQgdXNyc2N0cF9zeXNjdGxfc2V0XyAjIyBfX2ZpZWxkKHVpbnQzMl90IHZhbHVlKSAgIFwK
K3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
CWlmICgodmFsdWUgPCBfX3ByZWZpeCMjX01JTikgfHwgICAgICAgICAgICAgIFwKKwkgICAgKHZh
bHVlID4gX19wcmVmaXgjI19NQVgpKSB7ICAgICAgICAgICAgICBcCisJCWVycm5vID0gRUlOVkFM
OyAgICAgICAgICAgICAgICAgICAgICBcCisJCXJldHVybiAoLTEpOyAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisJfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorCQlTQ1RQX0JBU0VfU1lTQ1RMKF9fZmllbGQpID0gdmFsdWU7ICAgXAorCQlyZXR1cm4gKDAp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKK30KKworI2lmIF9fR05VQ19fID49IDUgfHwgKF9fR05VQ19f
ID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNikgfHwgZGVmaW5lZChfX2NsYW5nX18pCisjcHJh
Z21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAi
LVd0eXBlLWxpbWl0cyIKKyNlbmRpZgorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3NlbmRz
cGFjZSwgU0NUUENUTF9NQVhER1JBTSkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9yZWN2
c3BhY2UsIFNDVFBDVExfUkVDVlNQQUNFKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2F1
dG9fYXNjb25mLCBTQ1RQQ1RMX0FVVE9BU0NPTkYpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNj
dHBfZWNuX2VuYWJsZSwgU0NUUENUTF9FQ05fRU5BQkxFKQorVVNSU0NUUF9TWVNDVExfU0VUX0RF
RihzY3RwX3ByX2VuYWJsZSwgU0NUUENUTF9QUl9FTkFCTEUpCitVU1JTQ1RQX1NZU0NUTF9TRVRf
REVGKHNjdHBfYXV0aF9lbmFibGUsIFNDVFBDVExfQVVUSF9FTkFCTEUpCitVU1JTQ1RQX1NZU0NU
TF9TRVRfREVGKHNjdHBfYXNjb25mX2VuYWJsZSwgU0NUUENUTF9BU0NPTkZfRU5BQkxFKQorVVNS
U0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3JlY29uZmlnX2VuYWJsZSwgU0NUUENUTF9SRUNPTkZJ
R19FTkFCTEUpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfbnJzYWNrX2VuYWJsZSwgU0NU
UENUTF9OUlNBQ0tfRU5BQkxFKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3BrdGRyb3Bf
ZW5hYmxlLCBTQ1RQQ1RMX1BLVERST1BfRU5BQkxFKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihz
Y3RwX25vX2NzdW1fb25fbG9vcGJhY2ssIFNDVFBDVExfTE9PUEJBQ0tfTk9DU1VNKQorVVNSU0NU
UF9TWVNDVExfU0VUX0RFRihzY3RwX3BlZXJfY2h1bmtfb2gsIFNDVFBDVExfUEVFUl9DSEtPSCkK
K1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9tYXhfYnVyc3RfZGVmYXVsdCwgU0NUUENUTF9N
QVhCVVJTVCkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9tYXhfY2h1bmtzX29uX3F1ZXVl
LCBTQ1RQQ1RMX01BWENIVU5LUykKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9taW5fc3Bs
aXRfcG9pbnQsIFNDVFBDVExfTUlOX1NQTElUX1BPSU5UKQorVVNSU0NUUF9TWVNDVExfU0VUX0RF
RihzY3RwX2RlbGF5ZWRfc2Fja190aW1lX2RlZmF1bHQsIFNDVFBDVExfREVMQVlFRF9TQUNLX1RJ
TUUpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfc2Fja19mcmVxX2RlZmF1bHQsIFNDVFBD
VExfU0FDS19GUkVRKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3N5c3RlbV9mcmVlX3Jl
c2NfbGltaXQsIFNDVFBDVExfU1lTX1JFU09VUkNFKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihz
Y3RwX2Fzb2NfZnJlZV9yZXNjX2xpbWl0LCBTQ1RQQ1RMX0FTT0NfUkVTT1VSQ0UpCitVU1JTQ1RQ
X1NZU0NUTF9TRVRfREVGKHNjdHBfaGVhcnRiZWF0X2ludGVydmFsX2RlZmF1bHQsIFNDVFBDVExf
SEVBUlRCRUFUX0lOVEVSVkFMKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3BtdHVfcmFp
c2VfdGltZV9kZWZhdWx0LCBTQ1RQQ1RMX1BNVFVfUkFJU0VfVElNRSkKK1VTUlNDVFBfU1lTQ1RM
X1NFVF9ERUYoc2N0cF9zaHV0ZG93bl9ndWFyZF90aW1lX2RlZmF1bHQsIFNDVFBDVExfU0hVVERP
V05fR1VBUkRfVElNRSkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9zZWNyZXRfbGlmZXRp
bWVfZGVmYXVsdCwgU0NUUENUTF9TRUNSRVRfTElGRVRJTUUpCitVU1JTQ1RQX1NZU0NUTF9TRVRf
REVGKHNjdHBfcnRvX21heF9kZWZhdWx0LCBTQ1RQQ1RMX1JUT19NQVgpCitVU1JTQ1RQX1NZU0NU
TF9TRVRfREVGKHNjdHBfcnRvX21pbl9kZWZhdWx0LCBTQ1RQQ1RMX1JUT19NSU4pCitVU1JTQ1RQ
X1NZU0NUTF9TRVRfREVGKHNjdHBfcnRvX2luaXRpYWxfZGVmYXVsdCwgU0NUUENUTF9SVE9fSU5J
VElBTCkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9pbml0X3J0b19tYXhfZGVmYXVsdCwg
U0NUUENUTF9JTklUX1JUT19NQVgpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfdmFsaWRf
Y29va2llX2xpZmVfZGVmYXVsdCwgU0NUUENUTF9WQUxJRF9DT09LSUVfTElGRSkKK1VTUlNDVFBf
U1lTQ1RMX1NFVF9ERUYoc2N0cF9pbml0X3J0eF9tYXhfZGVmYXVsdCwgU0NUUENUTF9JTklUX1JU
WF9NQVgpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfYXNzb2NfcnR4X21heF9kZWZhdWx0
LCBTQ1RQQ1RMX0FTU09DX1JUWF9NQVgpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfcGF0
aF9ydHhfbWF4X2RlZmF1bHQsIFNDVFBDVExfUEFUSF9SVFhfTUFYKQorVVNSU0NUUF9TWVNDVExf
U0VUX0RFRihzY3RwX2FkZF9tb3JlX3RocmVzaG9sZCwgU0NUUENUTF9BRERfTU9SRV9PTl9PVVRQ
VVQpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfbnJfaW5jb21pbmdfc3RyZWFtc19kZWZh
dWx0LCBTQ1RQQ1RMX0lOQ09NSU5HX1NUUkVBTVMpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNj
dHBfbnJfb3V0Z29pbmdfc3RyZWFtc19kZWZhdWx0LCBTQ1RQQ1RMX09VVEdPSU5HX1NUUkVBTVMp
CitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfY210X29uX29mZiwgU0NUUENUTF9DTVRfT05f
T0ZGKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2NtdF91c2VfZGFjLCBTQ1RQQ1RMX0NN
VF9VU0VfREFDKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3VzZV9jd25kX2Jhc2VkX21h
eGJ1cnN0LCBTQ1RQQ1RMX0NXTkRfTUFYQlVSU1QpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNj
dHBfbmF0X2ZyaWVuZGx5LCBTQ1RQQ1RMX05BVF9GUklFTkRMWSkKK1VTUlNDVFBfU1lTQ1RMX1NF
VF9ERUYoc2N0cF9MMl9hYmNfdmFyaWFibGUsIFNDVFBDVExfQUJDX0xfVkFSKQorVVNSU0NUUF9T
WVNDVExfU0VUX0RFRihzY3RwX21idWZfdGhyZXNob2xkX2NvdW50LCBTQ1RQQ1RMX01BWF9DSEFJ
TkVEX01CVUZTKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2RvX2RyYWluLCBTQ1RQQ1RM
X0RPX1NDVFBfRFJBSU4pCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfaGJfbWF4YnVyc3Qs
IFNDVFBDVExfSEJfTUFYX0JVUlNUKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2Fib3J0
X2lmX29uZV8yX29uZV9oaXRzX2xpbWl0LCBTQ1RQQ1RMX0FCT1JUX0FUX0xJTUlUKQorVVNSU0NU
UF9TWVNDVExfU0VUX0RFRihzY3RwX21pbl9yZXNpZHVhbCwgU0NUUENUTF9NSU5fUkVTSURVQUwp
CitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfbWF4X3JldHJhbl9jaHVuaywgU0NUUENUTF9N
QVhfUkVUUkFOX0NIVU5LKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2xvZ2dpbmdfbGV2
ZWwsIFNDVFBDVExfTE9HR0lOR19MRVZFTCkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9k
ZWZhdWx0X2NjX21vZHVsZSwgU0NUUENUTF9ERUZBVUxUX0NDX01PRFVMRSkKK1VTUlNDVFBfU1lT
Q1RMX1NFVF9ERUYoc2N0cF9kZWZhdWx0X2ZyYWdfaW50ZXJsZWF2ZSwgU0NUUENUTF9ERUZBVUxU
X0ZSQUdfSU5URVJMRUFWRSkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9tb2JpbGl0eV9i
YXNlLCBTQ1RQQ1RMX01PQklMSVRZX0JBU0UpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBf
bW9iaWxpdHlfZmFzdGhhbmRvZmYsIFNDVFBDVExfTU9CSUxJVFlfRkFTVEhBTkRPRkYpCitVU1JT
Q1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfaW5pdHNfaW5jbHVkZV9uYXRfZnJpZW5kbHksIFNDVFBD
VExfTkFUX0ZSSUVORExZX0lOSVRTKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3VkcF90
dW5uZWxpbmdfcG9ydCwgU0NUUENUTF9VRFBfVFVOTkVMSU5HX1BPUlQpCitVU1JTQ1RQX1NZU0NU
TF9TRVRfREVGKHNjdHBfZW5hYmxlX3NhY2tfaW1tZWRpYXRlbHksIFNDVFBDVExfU0FDS19JTU1F
RElBVEVMWV9FTkFCTEUpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfdnRhZ190aW1lX3dh
aXQsIFNDVFBDVExfVElNRV9XQUlUKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2JsYWNr
aG9sZSwgU0NUUENUTF9CTEFDS0hPTEUpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfZGlh
Z19pbmZvX2NvZGUsIFNDVFBDVExfRElBR19JTkZPX0NPREUpCitVU1JTQ1RQX1NZU0NUTF9TRVRf
REVGKHNjdHBfZnJfbWF4X2J1cnN0X2RlZmF1bHQsIFNDVFBDVExfRlJNQVhCVVJTVCkKK1VTUlND
VFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9wYXRoX3BmX3RocmVzaG9sZCwgU0NUUENUTF9QQVRIX1BG
X1RIUkVTSE9MRCkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9kZWZhdWx0X3NzX21vZHVs
ZSwgU0NUUENUTF9ERUZBVUxUX1NTX01PRFVMRSkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0
cF9ydHR2YXJfYncsIFNDVFBDVExfUlRUVkFSX0JXKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihz
Y3RwX3J0dHZhcl9ydHQsIFNDVFBDVExfUlRUVkFSX1JUVCkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9E
RUYoc2N0cF9ydHR2YXJfZXFyZXQsIFNDVFBDVExfUlRUVkFSX0VRUkVUKQorVVNSU0NUUF9TWVND
VExfU0VUX0RFRihzY3RwX3N0ZWFkeV9zdGVwLCBTQ1RQQ1RMX1JUVFZBUl9TVEVBRFlTKQorVVNS
U0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3VzZV9kY2NjX2VjbiwgU0NUUENUTF9SVFRWQVJfREND
Q0VDTikKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9idWZmZXJfc3BsaXR0aW5nLCBTQ1RQ
Q1RMX0JVRkZFUl9TUExJVFRJTkcpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfaW5pdGlh
bF9jd25kLCBTQ1RQQ1RMX0lOSVRJQUxfQ1dORCkKKyNpZmRlZiBTQ1RQX0RFQlVHCitVU1JTQ1RQ
X1NZU0NUTF9TRVRfREVGKHNjdHBfZGVidWdfb24sIFNDVFBDVExfREVCVUcpCisjZW5kaWYKKyNp
ZiBfX0dOVUNfXyA+PSA1IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDYp
IHx8IGRlZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyNlbmRp
ZgorCisjZGVmaW5lIFVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoX19maWVsZCkgXAordWludDMyX3Qg
dXNyc2N0cF9zeXNjdGxfZ2V0XyAjIyBfX2ZpZWxkKHZvaWQpIHsgXAorCXJldHVybiBTQ1RQX0JB
U0VfU1lTQ1RMKF9fZmllbGQpOyBcCit9CisKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9z
ZW5kc3BhY2UpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfcmVjdnNwYWNlKQorVVNSU0NU
UF9TWVNDVExfR0VUX0RFRihzY3RwX2F1dG9fYXNjb25mKQorVVNSU0NUUF9TWVNDVExfR0VUX0RF
RihzY3RwX211bHRpcGxlX2FzY29uZnMpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfZWNu
X2VuYWJsZSkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9wcl9lbmFibGUpCitVU1JTQ1RQ
X1NZU0NUTF9HRVRfREVGKHNjdHBfYXV0aF9lbmFibGUpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVG
KHNjdHBfYXNjb25mX2VuYWJsZSkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9yZWNvbmZp
Z19lbmFibGUpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfbnJzYWNrX2VuYWJsZSkKK1VT
UlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9wa3Rkcm9wX2VuYWJsZSkKK1VTUlNDVFBfU1lTQ1RM
X0dFVF9ERUYoc2N0cF9ub19jc3VtX29uX2xvb3BiYWNrKQorVVNSU0NUUF9TWVNDVExfR0VUX0RF
RihzY3RwX3BlZXJfY2h1bmtfb2gpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfbWF4X2J1
cnN0X2RlZmF1bHQpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfbWF4X2NodW5rc19vbl9x
dWV1ZSkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9oYXNodGJsc2l6ZSkKK1VTUlNDVFBf
U1lTQ1RMX0dFVF9ERUYoc2N0cF9wY2J0YmxzaXplKQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihz
Y3RwX21pbl9zcGxpdF9wb2ludCkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9jaHVua3Nj
YWxlKQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2RlbGF5ZWRfc2Fja190aW1lX2RlZmF1
bHQpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfc2Fja19mcmVxX2RlZmF1bHQpCitVU1JT
Q1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfc3lzdGVtX2ZyZWVfcmVzY19saW1pdCkKK1VTUlNDVFBf
U1lTQ1RMX0dFVF9ERUYoc2N0cF9hc29jX2ZyZWVfcmVzY19saW1pdCkKK1VTUlNDVFBfU1lTQ1RM
X0dFVF9ERUYoc2N0cF9oZWFydGJlYXRfaW50ZXJ2YWxfZGVmYXVsdCkKK1VTUlNDVFBfU1lTQ1RM
X0dFVF9ERUYoc2N0cF9wbXR1X3JhaXNlX3RpbWVfZGVmYXVsdCkKK1VTUlNDVFBfU1lTQ1RMX0dF
VF9ERUYoc2N0cF9zaHV0ZG93bl9ndWFyZF90aW1lX2RlZmF1bHQpCitVU1JTQ1RQX1NZU0NUTF9H
RVRfREVGKHNjdHBfc2VjcmV0X2xpZmV0aW1lX2RlZmF1bHQpCitVU1JTQ1RQX1NZU0NUTF9HRVRf
REVGKHNjdHBfcnRvX21heF9kZWZhdWx0KQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX3J0
b19taW5fZGVmYXVsdCkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9ydG9faW5pdGlhbF9k
ZWZhdWx0KQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2luaXRfcnRvX21heF9kZWZhdWx0
KQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX3ZhbGlkX2Nvb2tpZV9saWZlX2RlZmF1bHQp
CitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfaW5pdF9ydHhfbWF4X2RlZmF1bHQpCitVU1JT
Q1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfYXNzb2NfcnR4X21heF9kZWZhdWx0KQorVVNSU0NUUF9T
WVNDVExfR0VUX0RFRihzY3RwX3BhdGhfcnR4X21heF9kZWZhdWx0KQorVVNSU0NUUF9TWVNDVExf
R0VUX0RFRihzY3RwX2FkZF9tb3JlX3RocmVzaG9sZCkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYo
c2N0cF9ucl9pbmNvbWluZ19zdHJlYW1zX2RlZmF1bHQpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVG
KHNjdHBfbnJfb3V0Z29pbmdfc3RyZWFtc19kZWZhdWx0KQorVVNSU0NUUF9TWVNDVExfR0VUX0RF
RihzY3RwX2NtdF9vbl9vZmYpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfY210X3VzZV9k
YWMpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfdXNlX2N3bmRfYmFzZWRfbWF4YnVyc3Qp
CitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfbmF0X2ZyaWVuZGx5KQorVVNSU0NUUF9TWVND
VExfR0VUX0RFRihzY3RwX0wyX2FiY192YXJpYWJsZSkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYo
c2N0cF9tYnVmX3RocmVzaG9sZF9jb3VudCkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9k
b19kcmFpbikKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9oYl9tYXhidXJzdCkKK1VTUlND
VFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9hYm9ydF9pZl9vbmVfMl9vbmVfaGl0c19saW1pdCkKK1VT
UlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9taW5fcmVzaWR1YWwpCitVU1JTQ1RQX1NZU0NUTF9H
RVRfREVGKHNjdHBfbWF4X3JldHJhbl9jaHVuaykKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0
cF9sb2dnaW5nX2xldmVsKQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2RlZmF1bHRfY2Nf
bW9kdWxlKQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2RlZmF1bHRfZnJhZ19pbnRlcmxl
YXZlKQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX21vYmlsaXR5X2Jhc2UpCitVU1JTQ1RQ
X1NZU0NUTF9HRVRfREVGKHNjdHBfbW9iaWxpdHlfZmFzdGhhbmRvZmYpCitVU1JTQ1RQX1NZU0NU
TF9HRVRfREVGKHNjdHBfaW5pdHNfaW5jbHVkZV9uYXRfZnJpZW5kbHkpCitVU1JTQ1RQX1NZU0NU
TF9HRVRfREVGKHNjdHBfdWRwX3R1bm5lbGluZ19wb3J0KQorVVNSU0NUUF9TWVNDVExfR0VUX0RF
RihzY3RwX2VuYWJsZV9zYWNrX2ltbWVkaWF0ZWx5KQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihz
Y3RwX3Z0YWdfdGltZV93YWl0KQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2JsYWNraG9s
ZSkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9kaWFnX2luZm9fY29kZSkKK1VTUlNDVFBf
U1lTQ1RMX0dFVF9ERUYoc2N0cF9mcl9tYXhfYnVyc3RfZGVmYXVsdCkKK1VTUlNDVFBfU1lTQ1RM
X0dFVF9ERUYoc2N0cF9wYXRoX3BmX3RocmVzaG9sZCkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYo
c2N0cF9kZWZhdWx0X3NzX21vZHVsZSkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9ydHR2
YXJfYncpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfcnR0dmFyX3J0dCkKK1VTUlNDVFBf
U1lTQ1RMX0dFVF9ERUYoc2N0cF9ydHR2YXJfZXFyZXQpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVG
KHNjdHBfc3RlYWR5X3N0ZXApCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfdXNlX2RjY2Nf
ZWNuKQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2J1ZmZlcl9zcGxpdHRpbmcpCitVU1JT
Q1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfaW5pdGlhbF9jd25kKQorI2lmZGVmIFNDVFBfREVCVUcK
K1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9kZWJ1Z19vbikKKyNlbmRpZgorCit2b2lkIHVz
cnNjdHBfZ2V0X3N0YXQoc3RydWN0IHNjdHBzdGF0ICpzdGF0KQoreworCSpzdGF0ID0gU0NUUF9C
QVNFX1NUQVRTOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX3NvY2tl
dHZhci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX3NvY2tldHZhci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMC4uZThlY2NjN2ZiMTA0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX3NvY2tldHZhci5oCkBAIC0wLDAgKzEsNTI3
IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk4MiwgMTk4NiwgMTk5MCwgMTk5MworICoJVGhl
IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5
IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisg
KiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICog
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMK
KyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisvKiBfX1Vz
ZXJzcGFjZV9fIHZlcnNpb24gb2YgPHN5cy9zb2NrZXR2YXIuaD4gZ29lcyBoZXJlLiovCisKKyNp
Zm5kZWYgX1VTRVJfU09DS0VUVkFSX0hfCisjZGVmaW5lIF9VU0VSX1NPQ0tFVFZBUl9IXworCisj
aWYgZGVmaW5lZChfX0FQUExFX18pCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8
dW5pc3RkLmg+CisjZW5kaWYKKworLyogI2luY2x1ZGUgPHN5cy9zZWxpbmZvLmg+ICovIC8qX19V
c2Vyc3BhY2VfXyBhbHRlcm5hdGl2ZT8qLwkvKiBmb3Igc3RydWN0IHNlbGluZm8gKi8KKy8qICNp
bmNsdWRlIDxzeXMvX2xvY2suaD4gIHdhcyAwIGJ5dGUgZmlsZSAqLworLyogI2luY2x1ZGUgPHN5
cy9fbXV0ZXguaD4gd2FzIDAgYnl0ZSBmaWxlICovCisvKiAjaW5jbHVkZSA8c3lzL19zeC5oPiAq
LyAvKl9fVXNlcnNwYWNlX18gYWx0ZXJuYXRpdmU/Ki8KKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZs
eV9fKSAmJiAhZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19OZXRCU0RfXykgJiYg
IWRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX25hdGl2ZV9jbGllbnRfXykKKyNpbmNsdWRl
IDxzeXMvdWlvLmg+CisjZW5kaWYKKyNkZWZpbmUgU09DS19NQVhBRERSTEVOIDI1NQorI2lmICFk
ZWZpbmVkKE1TR19OT1RJRklDQVRJT04pCisjZGVmaW5lIE1TR19OT1RJRklDQVRJT04gMHgyMDAw
ICAgICAgICAgLyogU0NUUCBub3RpZmljYXRpb24gKi8KKyNlbmRpZgorI2RlZmluZSBTQ1RQX1NP
X0xJTkdFUiAgICAgMHgwMDAxCisjZGVmaW5lIFNDVFBfU09fQUNDRVBUQ09OTiAweDAwMDIKKyNk
ZWZpbmUgU1NfQ0FOVFJDVk1PUkUgMHgwMjAKKyNkZWZpbmUgU1NfQ0FOVFNFTkRNT1JFIDB4MDEw
CisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX0RyYWdvbkZseV9fKSB8fCBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9X
SU4zMikgfHwgZGVmaW5lZChfX25hdGl2ZV9jbGllbnRfXykKKyNkZWZpbmUgVUlPX01BWElPViAx
MDI0CisjZGVmaW5lIEVSRVNUQVJUICgtMSkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX19BUFBM
RV9fKSAmJiAhZGVmaW5lZChfX05ldEJTRF9fKSAmJiAhZGVmaW5lZChfX09wZW5CU0RfXykKK2Vu
dW0JdWlvX3J3IHsgVUlPX1JFQUQsIFVJT19XUklURSB9OworI2VuZGlmCisKKyNpZiAhZGVmaW5l
ZChfX05ldEJTRF9fKSAmJiAhZGVmaW5lZChfX09wZW5CU0RfXykKKy8qIFNlZ21lbnQgZmxhZyB2
YWx1ZXMuICovCitlbnVtIHVpb19zZWcgeworCVVJT19VU0VSU1BBQ0UsCQkvKiBmcm9tIHVzZXIg
ZGF0YSBzcGFjZSAqLworCVVJT19TWVNTUEFDRQkJLyogZnJvbSBzeXN0ZW0gc3BhY2UgKi8KK307
CisjZW5kaWYKKworc3RydWN0IHByb2MgeworCWludCBzdHViOyAvKiBzdHJ1Y3QgcHJvYyBpcyBh
IGR1bW15IGZvciBfX1VzZXJzcGFjZV9fICovCit9OworCitNQUxMT0NfREVDTEFSRShNX0FDQ0Yp
OworTUFMTE9DX0RFQ0xBUkUoTV9QQ0IpOworTUFMTE9DX0RFQ0xBUkUoTV9TT05BTUUpOworCisv
KiBfX1VzZXJzcGFjZV9fIEFyZSB0aGVzZSBhbGwgdGhlIGZpZWxkcyB3ZSBuZWVkPworICogUmVt
b3Zpbmcgc3RydWN0IHRocmVhZCAqdWlvX3RkOyAgICBvd25lciBmaWVsZAorKi8KK3N0cnVjdCB1
aW8geworCXN0cnVjdAlpb3ZlYyAqdWlvX2lvdjsJCS8qIHNjYXR0ZXIvZ2F0aGVyIGxpc3QgKi8K
KwlpbnQJCXVpb19pb3ZjbnQ7CQkvKiBsZW5ndGggb2Ygc2NhdHRlci9nYXRoZXIgbGlzdCAqLwor
CW9mZl90CXVpb19vZmZzZXQ7CQkvKiBvZmZzZXQgaW4gdGFyZ2V0IG9iamVjdCAqLworCXNzaXpl
X3QgCXVpb19yZXNpZDsJCS8qIHJlbWFpbmluZyBieXRlcyB0byBwcm9jZXNzICovCisJZW51bQl1
aW9fc2VnIHVpb19zZWdmbGc7CS8qIGFkZHJlc3Mgc3BhY2UgKi8KKwllbnVtCXVpb19ydyB1aW9f
cnc7CQkvKiBvcGVyYXRpb24gKi8KK307CisKKworLyogX19Vc2Vyc3BhY2VfXyAqLworCisvKgor
ICogS2VybmVsIHN0cnVjdHVyZSBwZXIgc29ja2V0LgorICogQ29udGFpbnMgc2VuZCBhbmQgcmVj
ZWl2ZSBidWZmZXIgcXVldWVzLAorICogaGFuZGxlIG9uIHByb3RvY29sIGFuZCBwb2ludGVyIHRv
IHByb3RvY29sCisgKiBwcml2YXRlIGRhdGEgYW5kIGVycm9yIGluZm9ybWF0aW9uLgorICovCisj
aWYgZGVmaW5lZChfV0lOMzIpCisjZGVmaW5lIEFGX1JPVVRFICAxNworI2lmICFkZWZpbmVkKF9f
TUlOR1czMl9fKQordHlwZWRlZiBfX2ludDMyIHBpZF90OworI2VuZGlmCit0eXBlZGVmIHVuc2ln
bmVkIF9faW50MzIgdWlkX3Q7CitlbnVtIHNpZ1R5cGUgeworCVNJR05BTCA9IDAsCisJQlJPQURD
QVNUID0gMSwKKwlNQVhfRVZFTlRTID0gMgorfTsKKyNlbmRpZgorCisvKi0KKyAqIExvY2tpbmcg
a2V5IHRvIHN0cnVjdCBzb2NrZXQ6CisgKiAoYSkgY29uc3RhbnQgYWZ0ZXIgYWxsb2NhdGlvbiwg
bm8gbG9ja2luZyByZXF1aXJlZC4KKyAqIChiKSBsb2NrZWQgYnkgU09DS19MT0NLKHNvKS4KKyAq
IChjKSBsb2NrZWQgYnkgU09DS0JVRl9MT0NLKCZzby0+c29fcmN2KS4KKyAqIChkKSBsb2NrZWQg
YnkgU09DS0JVRl9MT0NLKCZzby0+c29fc25kKS4KKyAqIChlKSBsb2NrZWQgYnkgQUNDRVBUX0xP
Q0soKS4KKyAqIChmKSBub3QgbG9ja2VkIHNpbmNlIGludGVnZXIgcmVhZHMvd3JpdGVzIGFyZSBh
dG9taWMuCisgKiAoZykgdXNlZCBvbmx5IGFzIGEgc2xlZXAvd2FrZXVwIGFkZHJlc3MsIG5vIHZh
bHVlLgorICogKGgpIGxvY2tlZCBieSBnbG9iYWwgbXV0ZXggc29fZ2xvYmFsX210eC4KKyAqLwor
c3RydWN0IHNvY2tldCB7CisJaW50CXNvX2NvdW50OwkJLyogKGIpIHJlZmVyZW5jZSBjb3VudCAq
LworCXNob3J0CXNvX3R5cGU7CQkvKiAoYSkgZ2VuZXJpYyB0eXBlLCBzZWUgc29ja2V0LmggKi8K
KwlzaG9ydAlzb19vcHRpb25zOwkJLyogZnJvbSBzb2NrZXQgY2FsbCwgc2VlIHNvY2tldC5oICov
CisJc2hvcnQJc29fbGluZ2VyOwkJLyogdGltZSB0byBsaW5nZXIgd2hpbGUgY2xvc2luZyAqLwor
CXNob3J0CXNvX3N0YXRlOwkJLyogKGIpIGludGVybmFsIHN0YXRlIGZsYWdzIFNTXyogKi8KKwlp
bnQJc29fcXN0YXRlOwkJLyogKGUpIGludGVybmFsIHN0YXRlIGZsYWdzIFNRXyogKi8KKwl2b2lk
CSpzb19wY2I7CQkvKiBwcm90b2NvbCBjb250cm9sIGJsb2NrICovCisJaW50CXNvX2RvbTsKKy8q
CisgKiBWYXJpYWJsZXMgZm9yIGNvbm5lY3Rpb24gcXVldWluZy4KKyAqIFNvY2tldCB3aGVyZSBh
Y2NlcHRzIG9jY3VyIGlzIHNvX2hlYWQgaW4gYWxsIHN1YnNpZGlhcnkgc29ja2V0cy4KKyAqIElm
IHNvX2hlYWQgaXMgMCwgc29ja2V0IGlzIG5vdCByZWxhdGVkIHRvIGFuIGFjY2VwdC4KKyAqIEZv
ciBoZWFkIHNvY2tldCBzb19pbmNvbXAgcXVldWVzIHBhcnRpYWxseSBjb21wbGV0ZWQgY29ubmVj
dGlvbnMsCisgKiB3aGlsZSBzb19jb21wIGlzIGEgcXVldWUgb2YgY29ubmVjdGlvbnMgcmVhZHkg
dG8gYmUgYWNjZXB0ZWQuCisgKiBJZiBhIGNvbm5lY3Rpb24gaXMgYWJvcnRlZCBhbmQgaXQgaGFz
IHNvX2hlYWQgc2V0LCB0aGVuCisgKiBpdCBoYXMgdG8gYmUgcHVsbGVkIG91dCBvZiBlaXRoZXIg
c29faW5jb21wIG9yIHNvX2NvbXAuCisgKiBXZSBhbGxvdyBjb25uZWN0aW9ucyB0byBxdWV1ZSB1
cCBiYXNlZCBvbiBjdXJyZW50IHF1ZXVlIGxlbmd0aHMKKyAqIGFuZCBsaW1pdCBvbiBudW1iZXIg
b2YgcXVldWVkIGNvbm5lY3Rpb25zIGZvciB0aGlzIHNvY2tldC4KKyAqLworCXN0cnVjdAlzb2Nr
ZXQgKnNvX2hlYWQ7CS8qIChlKSBiYWNrIHBvaW50ZXIgdG8gbGlzdGVuIHNvY2tldCAqLworCVRB
SUxRX0hFQUQoLCBzb2NrZXQpIHNvX2luY29tcDsJLyogKGUpIHF1ZXVlIG9mIHBhcnRpYWwgdW5h
Y2NlcHRlZCBjb25uZWN0aW9ucyAqLworCVRBSUxRX0hFQUQoLCBzb2NrZXQpIHNvX2NvbXA7CS8q
IChlKSBxdWV1ZSBvZiBjb21wbGV0ZSB1bmFjY2VwdGVkIGNvbm5lY3Rpb25zICovCisJVEFJTFFf
RU5UUlkoc29ja2V0KSBzb19saXN0OwkvKiAoZSkgbGlzdCBvZiB1bmFjY2VwdGVkIGNvbm5lY3Rp
b25zICovCisJdV9zaG9ydAlzb19xbGVuOwkJLyogKGUpIG51bWJlciBvZiB1bmFjY2VwdGVkIGNv
bm5lY3Rpb25zICovCisJdV9zaG9ydAlzb19pbmNxbGVuOwkJLyogKGUpIG51bWJlciBvZiB1bmFj
Y2VwdGVkIGluY29tcGxldGUKKwkJCQkJICAgY29ubmVjdGlvbnMgKi8KKwl1X3Nob3J0CXNvX3Fs
aW1pdDsJCS8qIChlKSBtYXggbnVtYmVyIHF1ZXVlZCBjb25uZWN0aW9ucyAqLworCXNob3J0CXNv
X3RpbWVvOwkJLyogKGcpIGNvbm5lY3Rpb24gdGltZW91dCAqLworCXVzZXJsYW5kX2NvbmRfdCB0
aW1lb19jb25kOyAgICAgIC8qIHRpbWVvX2NvbmQgY29uZGl0aW9uIHZhcmlhYmxlIGJlaW5nIHVz
ZWQgaW4gd2FrZXVwICovCisKKwl1X3Nob3J0CXNvX2Vycm9yOwkJLyogKGYpIGVycm9yIGFmZmVj
dGluZyBjb25uZWN0aW9uICovCisJc3RydWN0CXNpZ2lvICpzb19zaWdpbzsJLyogW3NnXSBpbmZv
cm1hdGlvbiBmb3IgYXN5bmMgSS9PIG9yCisJCQkJCSAgIG91dCBvZiBiYW5kIGRhdGEgKFNJR1VS
RykgKi8KKwl1X2xvbmcJc29fb29ibWFyazsJCS8qIChjKSBjaGFycyB0byBvb2IgbWFyayAqLwor
CVRBSUxRX0hFQUQoLCBhaW9jYmxpc3QpIHNvX2Fpb2pvYnE7IC8qIEFJTyBvcHMgd2FpdGluZyBv
biBzb2NrZXQgKi8KKy8qCisgKiBWYXJpYWJsZXMgZm9yIHNvY2tldCBidWZmZXJpbmcuCisgKi8K
KwlzdHJ1Y3Qgc29ja2J1ZiB7CisJCS8qIF9fVXNlcnNwYWNlX18gTWFueSBvZiB0aGVzZSBmaWVs
ZHMgbWF5CisJCSAqIG5vdCBiZSByZXF1aXJlZCBmb3IgdGhlIHNjdHAgc3RhY2suCisJCSAqIENv
bW1lbnRpbmcgb3V0IHRoZSBmb2xsb3dpbmcuCisJCSAqIEluY2x1ZGluZyBwdGhyZWFkIG11dGV4
IGFuZCBjb25kaXRpb24gdmFyaWFibGUgdG8gYmUKKwkJICogdXNlZCBieSBzYndhaXQsIHNvcndh
a2V1cCBhbmQgc293d2FrZXVwLgorCQkqLworCQkvKiBzdHJ1Y3QJc2VsaW5mbyBzYl9zZWw7Ki8g
LyogcHJvY2VzcyBzZWxlY3RpbmcgcmVhZC93cml0ZSAqLworCQkvKiBzdHJ1Y3QJbXR4IHNiX210
eDsqLwkvKiBzb2NrYnVmIGxvY2sgKi8KKwkJLyogc3RydWN0CXN4IHNiX3N4OyovCS8qIHByZXZl
bnQgSS9PIGludGVybGFjaW5nICovCisJCXVzZXJsYW5kX2NvbmRfdCBzYl9jb25kOyAvKiBzb2Nr
YnVmIGNvbmRpdGlvbiB2YXJpYWJsZSAqLworCQl1c2VybGFuZF9tdXRleF90IHNiX210eDsgLyog
c29ja2J1ZiBsb2NrIGFzc29jaWF0ZWQgd2l0aCBzYl9jb25kICovCisJCXNob3J0CXNiX3N0YXRl
OwkvKiAoYy9kKSBzb2NrZXQgc3RhdGUgb24gc29ja2J1ZiAqLworI2RlZmluZQlzYl9zdGFydHpl
cm8Jc2JfbWIKKwkJc3RydWN0CW1idWYgKnNiX21iOwkvKiAoYy9kKSB0aGUgbWJ1ZiBjaGFpbiAq
LworCQlzdHJ1Y3QJbWJ1ZiAqc2JfbWJ0YWlsOyAvKiAoYy9kKSB0aGUgbGFzdCBtYnVmIGluIHRo
ZSBjaGFpbiAqLworCQlzdHJ1Y3QJbWJ1ZiAqc2JfbGFzdHJlY29yZDsJLyogKGMvZCkgZmlyc3Qg
bWJ1ZiBvZiBsYXN0CisJCQkJCQkgKiByZWNvcmQgaW4gc29ja2V0IGJ1ZmZlciAqLworCQlzdHJ1
Y3QJbWJ1ZiAqc2Jfc25kcHRyOyAvKiAoYy9kKSBwb2ludGVyIGludG8gbWJ1ZiBjaGFpbiAqLwor
CQl1X2ludAlzYl9zbmRwdHJvZmY7CS8qIChjL2QpIGJ5dGUgb2Zmc2V0IG9mIHB0ciBpbnRvIGNo
YWluICovCisJCXVfaW50CXNiX2NjOwkJLyogKGMvZCkgYWN0dWFsIGNoYXJzIGluIGJ1ZmZlciAq
LworCQl1X2ludAlzYl9oaXdhdDsJLyogKGMvZCkgbWF4IGFjdHVhbCBjaGFyIGNvdW50ICovCisJ
CXVfaW50CXNiX21iY250OwkvKiAoYy9kKSBjaGFycyBvZiBtYnVmcyB1c2VkICovCisJCXVfaW50
CXNiX21ibWF4OwkvKiAoYy9kKSBtYXggY2hhcnMgb2YgbWJ1ZnMgdG8gdXNlICovCisJCXVfaW50
CXNiX2N0bDsJCS8qIChjL2QpIG5vbi1kYXRhIGNoYXJzIGluIGJ1ZmZlciAqLworCQlpbnQJc2Jf
bG93YXQ7CS8qIChjL2QpIGxvdyB3YXRlciBtYXJrICovCisJCWludAlzYl90aW1lbzsJLyogKGMv
ZCkgdGltZW91dCBmb3IgcmVhZC93cml0ZSAqLworCQlzaG9ydAlzYl9mbGFnczsJLyogKGMvZCkg
ZmxhZ3MsIHNlZSBiZWxvdyAqLworCX0gc29fcmN2LCBzb19zbmQ7CisvKgorICogQ29uc3RhbnRz
IGZvciBzYl9mbGFncyBmaWVsZCBvZiBzdHJ1Y3Qgc29ja2J1Zi4KKyAqLworI2RlZmluZQlTQl9N
QVgJCSgyNTYqMTAyNCkJLyogZGVmYXVsdCBmb3IgbWF4IGNoYXJzIGluIHNvY2tidWYgKi8KKyNk
ZWZpbmUgU0JfUkFXICAgICAgICAgICg2NCoxMDI0KjIpICAgIC8qQWxpZ25pbmcgc28tPnNvX3Jj
di5zYl9oaXdhdCB3aXRoIHRoZSByZWNlaXZlIGJ1ZmZlciBzaXplIG9mIHJhdyBzb2NrZXQqLwor
LyoKKyAqIENvbnN0YW50cyBmb3Igc2JfZmxhZ3MgZmllbGQgb2Ygc3RydWN0IHNvY2tidWYuCisg
Ki8KKyNkZWZpbmUJU0JfV0FJVAkJMHgwNAkJLyogc29tZW9uZSBpcyB3YWl0aW5nIGZvciBkYXRh
L3NwYWNlICovCisjZGVmaW5lCVNCX1NFTAkJMHgwOAkJLyogc29tZW9uZSBpcyBzZWxlY3Rpbmcg
Ki8KKyNkZWZpbmUJU0JfQVNZTkMJMHgxMAkJLyogQVNZTkMgSS9PLCBuZWVkIHNpZ25hbHMgKi8K
KyNkZWZpbmUJU0JfVVBDQUxMCTB4MjAJCS8qIHNvbWVvbmUgd2FudHMgYW4gdXBjYWxsICovCisj
ZGVmaW5lCVNCX05PSU5UUgkweDQwCQkvKiBvcGVyYXRpb25zIG5vdCBpbnRlcnJ1cHRpYmxlICov
CisjZGVmaW5lCVNCX0FJTwkJMHg4MAkJLyogQUlPIG9wZXJhdGlvbnMgcXVldWVkICovCisjZGVm
aW5lCVNCX0tOT1RFCTB4MTAwCQkvKiBrZXJuZWwgbm90ZSBhdHRhY2hlZCAqLworI2RlZmluZQlT
Ql9BVVRPU0laRQkweDgwMAkJLyogYXV0b21hdGljYWxseSBzaXplIHNvY2tldCBidWZmZXIgKi8K
KworCXZvaWQJKCpzb191cGNhbGwpKHN0cnVjdCBzb2NrZXQgKiwgdm9pZCAqLCBpbnQpOworCXZv
aWQJKnNvX3VwY2FsbGFyZzsKKwlzdHJ1Y3QJdWNyZWQgKnNvX2NyZWQ7CQkvKiAoYSkgdXNlciBj
cmVkZW50aWFscyAqLworCXN0cnVjdAlsYWJlbCAqc29fbGFiZWw7CS8qIChiKSBNQUMgbGFiZWwg
Zm9yIHNvY2tldCAqLworCXN0cnVjdAlsYWJlbCAqc29fcGVlcmxhYmVsOwkvKiAoYikgY2FjaGVk
IE1BQyBsYWJlbCBmb3IgcGVlciAqLworCS8qIE5COiBnZW5lcmF0aW9uIGNvdW50IG11c3Qgbm90
IGJlIGZpcnN0LiAqLworCXVpbnQzMl90IHNvX2dlbmNudDsJCS8qIChoKSBnZW5lcmF0aW9uIGNv
dW50ICovCisJdm9pZAkqc29fZW11bGRhdGE7CQkvKiAoYikgcHJpdmF0ZSBkYXRhIGZvciBlbXVs
YXRvcnMgKi8KKyAJc3RydWN0IHNvX2FjY2YgeworCQlzdHJ1Y3QJYWNjZXB0X2ZpbHRlciAqc29f
YWNjZXB0X2ZpbHRlcjsKKwkJdm9pZAkqc29fYWNjZXB0X2ZpbHRlcl9hcmc7CS8qIHNhdmVkIGZp
bHRlciBhcmdzICovCisJCWNoYXIJKnNvX2FjY2VwdF9maWx0ZXJfc3RyOwkvKiBzYXZlZCB1c2Vy
IGFyZ3MgKi8KKwl9ICpzb19hY2NmOworfTsKKworI2RlZmluZSBTQl9FTVBUWV9GSVhVUChzYikg
ZG8gewkJCQkJCVwKKwlpZiAoKHNiKS0+c2JfbWIgPT0gTlVMTCkgewkJCQkJXAorCQkoc2IpLT5z
Yl9tYnRhaWwgPSBOVUxMOwkJCQkJXAorCQkoc2IpLT5zYl9sYXN0cmVjb3JkID0gTlVMTDsJCQkJ
XAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisvKgorICogR2xvYmFs
IGFjY2VwdCBtdXRleCB0byBzZXJpYWxpemUgYWNjZXNzIHRvIGFjY2VwdCBxdWV1ZXMgYW5kCisg
KiBmaWVsZHMgYXNzb2NpYXRlZCB3aXRoIG11bHRpcGxlIHNvY2tldHMuICBUaGlzIGFsbG93cyB1
cyB0bworICogYXZvaWQgZGVmaW5pbmcgYSBsb2NrIG9yZGVyIGJldHdlZW4gbGlzdGVuIGFuZCBh
Y2NlcHQgc29ja2V0cworICogdW50aWwgc3VjaCB0aW1lIGFzIGl0IHByb3ZlcyB0byBiZSBhIGdv
b2QgaWRlYS4KKyAqLworI2lmIGRlZmluZWQoX1dJTjMyKQorZXh0ZXJuIHVzZXJsYW5kX211dGV4
X3QgYWNjZXB0X210eDsKK2V4dGVybiB1c2VybGFuZF9jb25kX3QgYWNjZXB0X2NvbmQ7CisjZGVm
aW5lIEFDQ0VQVF9MT0NLX0FTU0VSVCgpCisjZGVmaW5lCUFDQ0VQVF9MT0NLKCkgZG8geyBcCisJ
RW50ZXJDcml0aWNhbFNlY3Rpb24oJmFjY2VwdF9tdHgpOyBcCit9IHdoaWxlICgwKQorI2RlZmlu
ZQlBQ0NFUFRfVU5MT0NLKCkJZG8geyBcCisJTGVhdmVDcml0aWNhbFNlY3Rpb24oJmFjY2VwdF9t
dHgpOyBcCit9IHdoaWxlICgwKQorI2RlZmluZQlBQ0NFUFRfVU5MT0NLX0FTU0VSVCgpCisjZWxz
ZQorZXh0ZXJuIHVzZXJsYW5kX211dGV4X3QgYWNjZXB0X210eDsKKworZXh0ZXJuIHVzZXJsYW5k
X2NvbmRfdCBhY2NlcHRfY29uZDsKKyNpZmRlZiBJTlZBUklBTlRTCisjZGVmaW5lCUFDQ0VQVF9M
T0NLKCkJS0FTU0VSVChwdGhyZWFkX211dGV4X2xvY2soJmFjY2VwdF9tdHgpID09IDAsICgiJXM6
IGFjY2VwdF9tdHggYWxyZWFkeSBsb2NrZWQiLCBfX2Z1bmNfXykpCisjZGVmaW5lCUFDQ0VQVF9V
TkxPQ0soKQlLQVNTRVJUKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZhY2NlcHRfbXR4KSA9PSAwLCAo
IiVzOiBhY2NlcHRfbXR4IG5vdCBsb2NrZWQiLCBfX2Z1bmNfXykpCisjZWxzZQorI2RlZmluZQlB
Q0NFUFRfTE9DSygpICAgKHZvaWQpcHRocmVhZF9tdXRleF9sb2NrKCZhY2NlcHRfbXR4KQorI2Rl
ZmluZQlBQ0NFUFRfVU5MT0NLKCkgKHZvaWQpcHRocmVhZF9tdXRleF91bmxvY2soJmFjY2VwdF9t
dHgpCisjZW5kaWYKKyNkZWZpbmUJQUNDRVBUX0xPQ0tfQVNTRVJUKCkgXAorICAgICAgICAgIEtB
U1NFUlQocHRocmVhZF9tdXRleF90cnlsb2NrKCZhY2NlcHRfbXR4KSA9PSBFQlVTWSwgKCIlczog
YWNjZXB0X210eCBub3QgbG9ja2VkIiwgX19mdW5jX18pKQorI2RlZmluZQlBQ0NFUFRfVU5MT0NL
X0FTU0VSVCgpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisJICBLQVNTRVJUKHB0aHJlYWRfbXV0ZXhfdHJ5bG9jaygm
YWNjZXB0X210eCkgPT0gMCwgKCIlczogYWNjZXB0X210eCAgbG9ja2VkIiwgX19mdW5jX18pKTsg
XAorCSAgKHZvaWQpcHRocmVhZF9tdXRleF91bmxvY2soJmFjY2VwdF9tdHgpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSB3aGlsZSAo
MCkKKyNlbmRpZgorCisvKgorICogUGVyLXNvY2tldCBidWZmZXIgbXV0ZXggdXNlZCB0byBwcm90
ZWN0IG1vc3QgZmllbGRzIGluIHRoZSBzb2NrZXQKKyAqIGJ1ZmZlci4KKyAqLworI2RlZmluZQlT
T0NLQlVGX01UWChfc2IpICgmKF9zYiktPnNiX210eCkKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyNk
ZWZpbmUgU09DS0JVRl9MT0NLX0lOSVQoX3NiLCBfbmFtZSkgXAorCUluaXRpYWxpemVDcml0aWNh
bFNlY3Rpb24oU09DS0JVRl9NVFgoX3NiKSkKKyNkZWZpbmUgU09DS0JVRl9MT0NLX0RFU1RST1ko
X3NiKSBEZWxldGVDcml0aWNhbFNlY3Rpb24oU09DS0JVRl9NVFgoX3NiKSkKKyNkZWZpbmUgU09D
S0JVRl9DT05EX0lOSVQoX3NiKSBJbml0aWFsaXplQ29uZGl0aW9uVmFyaWFibGUoKCYoX3NiKS0+
c2JfY29uZCkpCisjZGVmaW5lIFNPQ0tCVUZfQ09ORF9ERVNUUk9ZKF9zYikgRGVsZXRlQ29uZGl0
aW9uVmFyaWFibGUoKCYoX3NiKS0+c2JfY29uZCkpCisjZGVmaW5lIFNPQ0tfQ09ORF9JTklUKF9z
bykgSW5pdGlhbGl6ZUNvbmRpdGlvblZhcmlhYmxlKCgmKF9zbyktPnRpbWVvX2NvbmQpKQorI2Rl
ZmluZSBTT0NLX0NPTkRfREVTVFJPWShfc28pIERlbGV0ZUNvbmRpdGlvblZhcmlhYmxlKCgmKF9z
byktPnRpbWVvX2NvbmQpKQorI2RlZmluZSBTT0NLX0NPTkQoX3NvKSAoJihfc28pLT50aW1lb19j
b25kKQorI2Vsc2UKKyNpZmRlZiBJTlZBUklBTlRTCisjZGVmaW5lIFNPQ0tCVUZfTE9DS19JTklU
KF9zYiwgX25hbWUpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJcHRo
cmVhZF9tdXRleGF0dHJfdCBtdXRleF9hdHRyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorCXB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJm11dGV4X2F0
dHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJcHRocmVhZF9tdXRleGF0dHJf
c2V0dHlwZSgmbXV0ZXhfYXR0ciwgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLKTsgIFwKKwlwdGhy
ZWFkX211dGV4X2luaXQoU09DS0JVRl9NVFgoX3NiKSwgJm11dGV4X2F0dHIpOyAgICAgICAgICAg
ICAgICAgXAorCXB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3koJm11dGV4X2F0dHIpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgU09DS0JV
Rl9MT0NLX0lOSVQoX3NiLCBfbmFtZSkgXAorCXB0aHJlYWRfbXV0ZXhfaW5pdChTT0NLQlVGX01U
WChfc2IpLCBOVUxMKQorI2VuZGlmCisjZGVmaW5lIFNPQ0tCVUZfTE9DS19ERVNUUk9ZKF9zYikg
cHRocmVhZF9tdXRleF9kZXN0cm95KFNPQ0tCVUZfTVRYKF9zYikpCisjZGVmaW5lIFNPQ0tCVUZf
Q09ORF9JTklUKF9zYikgcHRocmVhZF9jb25kX2luaXQoKCYoX3NiKS0+c2JfY29uZCksIE5VTEwp
CisjZGVmaW5lIFNPQ0tCVUZfQ09ORF9ERVNUUk9ZKF9zYikgcHRocmVhZF9jb25kX2Rlc3Ryb3ko
KCYoX3NiKS0+c2JfY29uZCkpCisjZGVmaW5lIFNPQ0tfQ09ORF9JTklUKF9zbykgcHRocmVhZF9j
b25kX2luaXQoKCYoX3NvKS0+dGltZW9fY29uZCksIE5VTEwpCisjZGVmaW5lIFNPQ0tfQ09ORF9E
RVNUUk9ZKF9zbykgcHRocmVhZF9jb25kX2Rlc3Ryb3koKCYoX3NvKS0+dGltZW9fY29uZCkpCisj
ZGVmaW5lIFNPQ0tfQ09ORChfc28pICgmKF9zbyktPnRpbWVvX2NvbmQpCisjZW5kaWYKKy8qX19V
c2Vyc3BhY2VfXyBTT0NLQlVGX0xPQ0soX3NiKSBpcyBub3cgZGVmaW5lZCBpbiBuZXRpbmV0L3Nj
dHBfcHJvY2Vzc19sb2NrLmggKi8KKworLyogI2RlZmluZQlTT0NLQlVGX09XTkVEKF9zYikJCW10
eF9vd25lZChTT0NLQlVGX01UWChfc2IpKSB1bnVzZWQgKi8KKy8qX19Vc2Vyc3BhY2VfXyBTT0NL
QlVGX1VOTE9DSyhfc2IpIGlzIG5vdyBkZWZpbmVkIGluIG5ldGluZXQvc2N0cF9wcm9jZXNzX2xv
Y2suaCAqLworCisvKl9fVXNlcnNwYWNlX18gU09DS0JVRl9MT0NLX0FTU0VSVChfc2IpIGlzIG5v
dyBkZWZpbmVkIGluIG5ldGluZXQvc2N0cF9wcm9jZXNzX2xvY2suaCAqLworCisvKiAjZGVmaW5l
CVNPQ0tCVUZfVU5MT0NLX0FTU0VSVChfc2IpCW10eF9hc3NlcnQoU09DS0JVRl9NVFgoX3NiKSwg
TUFfTk9UT1dORUQpICAgdW51c2VkICovCisKKy8qCisgKiBQZXItc29ja2V0IG11dGV4OiB3ZSBy
ZXVzZSB0aGUgcmVjZWl2ZSBzb2NrZXQgYnVmZmVyIG11dGV4IGZvciBzcGFjZQorICogZWZmaWNp
ZW5jeS4gIFRoaXMgZGVjaXNpb24gc2hvdWxkIHByb2JhYmx5IGJlIHJldmlzaXRlZCBhcyB3ZSBv
cHRpbWl6ZQorICogbG9ja2luZyBmb3IgdGhlIHNvY2tldCBjb2RlLgorICovCisjZGVmaW5lCVNP
Q0tfTVRYKF9zbykJCQlTT0NLQlVGX01UWCgmKF9zbyktPnNvX3JjdikKKy8qX19Vc2Vyc3BhY2Vf
XyBTT0NLX0xPQ0soX3NvKSBpcyBub3cgZGVmaW5lZCBpbiBuZXRpbmV0L3NjdHBfcHJvY2Vzc19s
b2NrLmggKi8KKworLyogI2RlZmluZQlTT0NLX09XTkVEKF9zbykJCQlTT0NLQlVGX09XTkVEKCYo
X3NvKS0+c29fcmN2KSB1bnVzZWQgKi8KKy8qX19Vc2Vyc3BhY2VfXyBTT0NLX1VOTE9DSyhfc28p
IGlzIG5vdyBkZWZpbmVkIGluIG5ldGluZXQvc2N0cF9wcm9jZXNzX2xvY2suaCAqLworCisjZGVm
aW5lCVNPQ0tfTE9DS19BU1NFUlQoX3NvKQkJU09DS0JVRl9MT0NLX0FTU0VSVCgmKF9zbyktPnNv
X3JjdikKKworLyoKKyAqIFNvY2tldCBzdGF0ZSBiaXRzLgorICoKKyAqIEhpc3RvcmljYWxseSwg
dGhpcyBiaXRzIHdlcmUgYWxsIGtlcHQgaW4gdGhlIHNvX3N0YXRlIGZpZWxkLiAgRm9yCisgKiBs
b2NraW5nIHJlYXNvbnMsIHRoZXkgYXJlIG5vdyBpbiBtdWx0aXBsZSBmaWVsZHMsIGFzIHRoZXkg
YXJlCisgKiBsb2NrZWQgZGlmZmVyZW50bHkuICBzb19zdGF0ZSBtYWludGFpbnMgYmFzaWMgc29j
a2V0IHN0YXRlIHByb3RlY3RlZAorICogYnkgdGhlIHNvY2tldCBsb2NrLiAgc29fcXN0YXRlIGhv
bGRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzb2NrZXQKKyAqIGFjY2VwdCBxdWV1ZXMuICBFYWNo
IHNvY2tldCBidWZmZXIgYWxzbyBoYXMgYSBzdGF0ZSBmaWVsZCBob2xkaW5nCisgKiBpbmZvcm1h
dGlvbiByZWxldmFudCB0byB0aGF0IHNvY2tldCBidWZmZXIgKGNhbid0IHNlbmQsIHJjdikuICBN
YW55CisgKiBmaWVsZHMgd2lsbCBiZSByZWFkIHdpdGhvdXQgbG9ja3MgdG8gaW1wcm92ZSBwZXJm
b3JtYW5jZSBhbmQgYXZvaWQKKyAqIGxvY2sgb3JkZXIgaXNzdWVzLiAgSG93ZXZlciwgdGhpcyBh
cHByb2FjaCBtdXN0IGJlIHVzZWQgd2l0aCBjYXV0aW9uLgorICovCisjZGVmaW5lCVNTX05PRkRS
RUYJCTB4MDAwMQkvKiBubyBmaWxlIHRhYmxlIHJlZiBhbnkgbW9yZSAqLworI2RlZmluZQlTU19J
U0NPTk5FQ1RFRAkJMHgwMDAyCS8qIHNvY2tldCBjb25uZWN0ZWQgdG8gYSBwZWVyICovCisjZGVm
aW5lCVNTX0lTQ09OTkVDVElORwkJMHgwMDA0CS8qIGluIHByb2Nlc3Mgb2YgY29ubmVjdGluZyB0
byBwZWVyICovCisjZGVmaW5lCVNTX0lTRElTQ09OTkVDVElORwkweDAwMDgJLyogaW4gcHJvY2Vz
cyBvZiBkaXNjb25uZWN0aW5nICovCisjZGVmaW5lCVNTX05CSU8JCQkweDAxMDAJLyogbm9uLWJs
b2NraW5nIG9wcyAqLworI2RlZmluZQlTU19BU1lOQwkJMHgwMjAwCS8qIGFzeW5jIGkvbyBub3Rp
ZnkgKi8KKyNkZWZpbmUJU1NfSVNDT05GSVJNSU5HCQkweDA0MDAJLyogZGVjaWRpbmcgdG8gYWNj
ZXB0IGNvbm5lY3Rpb24gcmVxICovCisjZGVmaW5lCVNTX0lTRElTQ09OTkVDVEVECTB4MjAwMAkv
KiBzb2NrZXQgZGlzY29ubmVjdGVkIGZyb20gcGVlciAqLworLyoKKyAqIFByb3RvY29scyBjYW4g
bWFyayBhIHNvY2tldCBhcyBTU19QUk9UT1JFRiB0byBpbmRpY2F0ZSB0aGF0LCBmb2xsb3dpbmcK
KyAqIHBydV9kZXRhY2gsIHRoZXkgc3RpbGwgd2FudCB0aGUgc29ja2V0IHRvIHBlcnNpc3QsIGFu
ZCB3aWxsIGZyZWUgaXQKKyAqIHRoZW1zZWx2ZXMgd2hlbiB0aGV5IGFyZSBkb25lLiAgUHJvdG9j
b2xzIHNob3VsZCBvbmx5IGV2ZXIgY2FsbCBzb2ZyZWUoKQorICogZm9sbG93aW5nIHNldHRpbmcg
dGhpcyBmbGFnIGluIHBydV9kZXRhY2goKSwgYW5kIG5ldmVyIG90aGVyd2lzZSwgYXMKKyAqIHNv
ZnJlZSgpIGJ5cGFzc2VzIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcuCisgKi8KKyNkZWZpbmUJ
U1NfUFJPVE9SRUYJCTB4NDAwMAkvKiBzdHJvbmcgcHJvdG9jb2wgcmVmZXJlbmNlICovCisKKy8q
CisgKiBTb2NrZXQgc3RhdGUgYml0cyBub3cgc3RvcmVkIGluIHRoZSBzb2NrZXQgYnVmZmVyIHN0
YXRlIGZpZWxkLgorICovCisjZGVmaW5lCVNCU19DQU5UU0VORE1PUkUJMHgwMDEwCS8qIGNhbid0
IHNlbmQgbW9yZSBkYXRhIHRvIHBlZXIgKi8KKyNkZWZpbmUJU0JTX0NBTlRSQ1ZNT1JFCQkweDAw
MjAJLyogY2FuJ3QgcmVjZWl2ZSBtb3JlIGRhdGEgZnJvbSBwZWVyICovCisjZGVmaW5lCVNCU19S
Q1ZBVE1BUksJCTB4MDA0MAkvKiBhdCBtYXJrIG9uIGlucHV0ICovCisKKy8qCisgKiBTb2NrZXQg
c3RhdGUgYml0cyBzdG9yZWQgaW4gc29fcXN0YXRlLgorICovCisjZGVmaW5lCVNRX0lOQ09NUAkJ
MHgwODAwCS8qIHVuYWNjZXB0ZWQsIGluY29tcGxldGUgY29ubmVjdGlvbiAqLworI2RlZmluZQlT
UV9DT01QCQkJMHgxMDAwCS8qIHVuYWNjZXB0ZWQsIGNvbXBsZXRlIGNvbm5lY3Rpb24gKi8KKwor
LyoKKyAqIFNvY2tldCBldmVudCBmbGFncworICovCisjZGVmaW5lIFNDVFBfRVZFTlRfUkVBRAkJ
MHgwMDAxCS8qIHNvY2tldCBpcyByZWFkYWJsZSAqLworI2RlZmluZSBTQ1RQX0VWRU5UX1dSSVRF
CTB4MDAwMgkvKiBzb2NrZXQgaXMgd3JpdGVhYmxlICovCisjZGVmaW5lIFNDVFBfRVZFTlRfRVJS
T1IJMHgwMDA0CS8qIHNvY2tldCBoYXMgYW4gZXJyb3Igc3RhdGUgKi8KKworCisvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwor
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KKy8qICAgICAgICAgICAgICAgICAgIF9fVXNlcnNwYWNlX18gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHRoaXMgbmV3IF9fVXNl
cnNwYWNlX18gc2VjdGlvbiBpcyB0byBjb3B5IHBvcnRpb25zIG9mIHRoZSBfS0VSTkVMIGJsb2Nr
CisgKiAgYWJvdmUgaW50bywgYXZvaWRpbmcgaGF2aW5nIHRvIHBvcnQgdGhlIGVudGlyZSB0aGlu
ZyBhdCBvbmNlLi4uCisgKiAgRm9yIGZ1bmN0aW9uIHByb3RvdHlwZXMsIHRoZSBmdWxsIGJvZGll
cyBhcmUgaW4gdXNlcl9zb2NrZXQuYyAuCisgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tIGZ1bmN0aW9u
IHByb3RvdHlwZXMgKGltcGxlbWVudGVkIGluIHVzZXJfc29ja2V0LmMpIC0tLSAqLworLyogLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq
Lwordm9pZAlzb2lzY29ubmVjdGluZyhzdHJ1Y3Qgc29ja2V0ICpzbyk7Cit2b2lkCXNvaXNkaXNj
b25uZWN0aW5nKHN0cnVjdCBzb2NrZXQgKnNvKTsKK3ZvaWQJc29pc2Nvbm5lY3RlZChzdHJ1Y3Qg
c29ja2V0ICpzbyk7CitzdHJ1Y3Qgc29ja2V0ICogc29uZXdjb25uKHN0cnVjdCBzb2NrZXQgKmhl
YWQsIGludCBjb25uc3RhdHVzKTsKK3ZvaWQJc29jYW50cmN2bW9yZShzdHJ1Y3Qgc29ja2V0ICpz
byk7Cit2b2lkCXNvY2FudHNlbmRtb3JlKHN0cnVjdCBzb2NrZXQgKnNvKTsKK3ZvaWQJc29mcmVl
KHN0cnVjdCBzb2NrZXQgKnNvKTsKKworCisKKy8qIC0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0g
bWFjcm9zIC0tLSAqLworLyogLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZQlzb3JlZihzbykg
ZG8gewkJCQkJCQlcCisJU09DS19MT0NLX0FTU0VSVChzbyk7CQkJCQkJXAorCSsrKHNvKS0+c29f
Y291bnQ7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlzb3JlbGUoc28pIGRvIHsJCQkJ
CQkJXAorCUFDQ0VQVF9MT0NLX0FTU0VSVCgpOwkJCQkJCVwKKwlTT0NLX0xPQ0tfQVNTRVJUKHNv
KTsJCQkJCQlcCisJS0FTU0VSVCgoc28pLT5zb19jb3VudCA+IDAsICgic29yZWxlIikpOwkJCVwK
KwlpZiAoLS0oc28pLT5zb19jb3VudCA9PSAwKQkJCQkJXAorCQlzb2ZyZWUoc28pOwkJCQkJCVwK
KwllbHNlIHsJCQkJCQkJCVwKKwkJU09DS19VTkxPQ0soc28pOwkJCQkJXAorCQlBQ0NFUFRfVU5M
T0NLKCk7CQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworCisvKiByZXBsYWNpbmcg
aW1pbiB3aXRoIG1pbiAodXNlcl9lbnZpcm9ubWVudC5oKSAqLworI2RlZmluZQlzYnNwYWNlKHNi
KSBcCisgICAgKChsb25nKSBtaW4oKGludCkoKHNiKS0+c2JfaGl3YXQgLSAoc2IpLT5zYl9jYyks
IFwKKwkgKGludCkoKHNiKS0+c2JfbWJtYXggLSAoc2IpLT5zYl9tYmNudCkpKQorCisvKiBkbyB3
ZSBoYXZlIHRvIHNlbmQgYWxsIGF0IG9uY2Ugb24gYSBzb2NrZXQ/ICovCisjZGVmaW5lCXNvc2Vu
ZGFsbGF0b25jZShzbykgXAorICAgICgoc28pLT5zb19wcm90by0+cHJfZmxhZ3MgJiBQUl9BVE9N
SUMpCisKKy8qIGNhbiB3ZSByZWFkIHNvbWV0aGluZyBmcm9tIHNvPyAqLworI2RlZmluZQlzb3Jl
YWRhYmxlKHNvKSBcCisgICAgKChpbnQpKChzbyktPnNvX3Jjdi5zYl9jYykgPj0gKHNvKS0+c29f
cmN2LnNiX2xvd2F0IHx8IFwKKwkoKHNvKS0+c29fcmN2LnNiX3N0YXRlICYgU0JTX0NBTlRSQ1ZN
T1JFKSB8fCBcCisJIVRBSUxRX0VNUFRZKCYoc28pLT5zb19jb21wKSB8fCAoc28pLT5zb19lcnJv
cikKKworI2lmIDAgIC8qICBvcmlnaW5hbCAqLworI2RlZmluZSBQUl9DT05OUkVRVUlSRUQgMHgw
NCAgLyogZnJvbSBzeXMvcHJvdG9zdy5oICJuZWVkZWQiIGZvciBzb3dyaXRlYWJsZSAqLworI2Rl
ZmluZQlzb3dyaXRlYWJsZShzbykgXAorICAgICgoc2JzcGFjZSgmKHNvKS0+c29fc25kKSA+PSAo
c28pLT5zb19zbmQuc2JfbG93YXQgJiYgXAorCSgoKHNvKS0+c29fc3RhdGUmU1NfSVNDT05ORUNU
RUQpIHx8IFwKKwkgICgoc28pLT5zb19wcm90by0+cHJfZmxhZ3MmUFJfQ09OTlJFUVVJUkVEKT09
MCkpIHx8IFwKKyAgICAgKChzbyktPnNvX3NuZC5zYl9zdGF0ZSAmIFNCU19DQU5UU0VORE1PUkUp
IHx8IFwKKyAgICAgKHNvKS0+c29fZXJyb3IpCisjZWxzZSAgLyogbGluZSB3aXRoIFBSX0NPTk5S
RVFVSVJFRCByZW1vdmVkICovCisvKiBjYW4gd2Ugd3JpdGUgc29tZXRoaW5nIHRvIHNvPyAqLwor
I2RlZmluZQlzb3dyaXRlYWJsZShzbykgXAorICAgICgoc2JzcGFjZSgmKHNvKS0+c29fc25kKSA+
PSAoc28pLT5zb19zbmQuc2JfbG93YXQgJiYgXAorICAgICAgKCgoc28pLT5zb19zdGF0ZSZTU19J
U0NPTk5FQ1RFRCkpKSB8fCAgICAgICAgICAgICAgXAorICAgICAoKHNvKS0+c29fc25kLnNiX3N0
YXRlICYgU0JTX0NBTlRTRU5ETU9SRSkgfHwgXAorICAgICAoc28pLT5zb19lcnJvcikKKyNlbmRp
ZgorCitleHRlcm4gdm9pZCBzb2xpc3Rlbl9wcm90byhzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGJh
Y2tsb2cpOworZXh0ZXJuIGludCBzb2xpc3Rlbl9wcm90b19jaGVjayhzdHJ1Y3Qgc29ja2V0ICpz
byk7CitleHRlcm4gaW50IHNjdHBfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgYmFja2xv
Zywgc3RydWN0IHByb2MgKnApOworZXh0ZXJuIHZvaWQgc29jYW50cmN2bW9yZV9sb2NrZWQoc3Ry
dWN0IHNvY2tldCAqc28pOworZXh0ZXJuIGludCBzY3RwX2JpbmQoc3RydWN0IHNvY2tldCAqc28s
IHN0cnVjdCBzb2NrYWRkciAqYWRkcik7CitleHRlcm4gaW50IHNjdHA2X2JpbmQoc3RydWN0IHNv
Y2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgdm9pZCAqcHJvYyk7CitleHRlcm4gaW50
IHNjdHBjb25uX2JpbmQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkcik7
CitleHRlcm4gaW50IHNjdHBfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2Fk
ZHIgKiphZGRyKTsKK2V4dGVybiBpbnQgc2N0cF9hdHRhY2goc3RydWN0IHNvY2tldCAqc28sIGlu
dCBwcm90bywgdWludDMyX3QgdnJmX2lkKTsKK2V4dGVybiBpbnQgc2N0cDZfYXR0YWNoKHN0cnVj
dCBzb2NrZXQgKnNvLCBpbnQgcHJvdG8sIHVpbnQzMl90IHZyZl9pZCk7CitleHRlcm4gaW50IHNj
dHBfYWJvcnQoc3RydWN0IHNvY2tldCAqc28pOworZXh0ZXJuIGludCBzY3RwNl9hYm9ydChzdHJ1
Y3Qgc29ja2V0ICpzbyk7CitleHRlcm4gdm9pZCBzY3RwX2Nsb3NlKHN0cnVjdCBzb2NrZXQgKnNv
KTsKK2V4dGVybiBpbnQgc29hY2NlcHQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRk
ciAqKm5hbSk7CitleHRlcm4gaW50IHNvbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgYmFj
a2xvZyk7CitleHRlcm4gaW50ICBzb3Jlc2VydmUoc3RydWN0IHNvY2tldCAqc28sIHVfbG9uZyBz
bmRjYywgdV9sb25nIHJjdmNjKTsKK2V4dGVybiB2b2lkIHNvd2FrZXVwKHN0cnVjdCBzb2NrZXQg
KnNvLCBzdHJ1Y3Qgc29ja2J1ZiAqc2IpOworZXh0ZXJuIHZvaWQgd2FrZXVwKHZvaWQgKmlkZW50
LCBzdHJ1Y3Qgc29ja2V0ICpzbyk7IC8qX19Vc2Vyc3BhY2VfXyAqLworZXh0ZXJuIGludCB1aW9t
b3ZlKHZvaWQgKmNwLCBpbnQgbiwgc3RydWN0IHVpbyAqdWlvKTsKK2V4dGVybiBpbnQgc2J3YWl0
KHN0cnVjdCBzb2NrYnVmICpzYik7CitleHRlcm4gaW50IHNvZGlzY29ubmVjdChzdHJ1Y3Qgc29j
a2V0ICpzbyk7CitleHRlcm4gaW50IHNvY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0
IHNvY2thZGRyICpuYW0pOworZXh0ZXJuIGludCBzY3RwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2tl
dCAqc28pOworZXh0ZXJuIGludCBzY3RwX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVj
dCBzb2NrYWRkciAqYWRkcik7CitleHRlcm4gaW50IHNjdHA2X2Nvbm5lY3Qoc3RydWN0IHNvY2tl
dCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkcik7CitleHRlcm4gaW50IHNjdHBjb25uX2Nvbm5l
Y3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkcik7CitleHRlcm4gdm9p
ZCBzY3RwX2ZpbmlzaCh2b2lkKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tLSAgbWFjcm9zIGNvcGllZCBmcm9tIGFib3Zl
IC0tLS0gKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAqLworCisvKgorICogRG8gd2UgbmVlZCB0byBub3RpZnkgdGhlIG90aGVyIHNpZGUgd2hl
biBJL08gaXMgcG9zc2libGU/CisgKi8KKyNkZWZpbmUJc2Jfbm90aWZ5KHNiKQkoKChzYiktPnNi
X2ZsYWdzICYgKFNCX1dBSVQgfCBTQl9TRUwgfCBTQl9BU1lOQyB8IFwKKyAgICBTQl9VUENBTEwg
fCBTQl9BSU8gfCBTQl9LTk9URSkpICE9IDApCisKKworLyoKKyAqIEluIHNvcndha2V1cCgpIGFu
ZCBzb3d3YWtldXAoKSwgYWNxdWlyZSB0aGUgc29ja2V0IGJ1ZmZlciBsb2NrIHRvCisgKiBhdm9p
ZCBhIG5vbi1hdG9taWMgdGVzdC1hbmQtd2FrZXVwLiAgSG93ZXZlciwgc293YWtldXAgaXMKKyAq
IHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgdGhlIGxvY2sgaWYgaXQgaXMgY2FsbGVkLiAgV2Ug
dW5sb2NrIG9ubHkKKyAqIGlmIHdlIGRvbid0IGNhbGwgaW50byBzb3dha2V1cC4gIElmIGFueSBj
b2RlIGlzIGludHJvZHVjZWQgdGhhdAorICogZGlyZWN0bHkgaW52b2tlcyB0aGUgdW5kZXJseWlu
ZyBzb3dha2V1cCgpIHByaW1pdGl2ZXMsIGl0IG11c3QKKyAqIG1haW50YWluIHRoZSBzYW1lIHNl
bWFudGljcy4KKyAqLworI2RlZmluZQlzb3J3YWtldXBfbG9ja2VkKHNvKSBkbyB7CQkJCQlcCisJ
U09DS0JVRl9MT0NLX0FTU0VSVCgmKHNvKS0+c29fcmN2KTsJCQkJXAorCWlmIChzYl9ub3RpZnko
JihzbyktPnNvX3JjdikpCQkJCQlcCisJCXNvd2FrZXVwKChzbyksICYoc28pLT5zb19yY3YpOwkg
CQkJXAorCWVsc2UJCQkJCQkJCVwKKwkJU09DS0JVRl9VTkxPQ0soJihzbyktPnNvX3Jjdik7CQkJ
CVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJc29yd2FrZXVwKHNvKSBkbyB7CQkJCQkJXAorCVNP
Q0tCVUZfTE9DSygmKHNvKS0+c29fcmN2KTsJCQkJCVwKKwlzb3J3YWtldXBfbG9ja2VkKHNvKTsJ
CQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCXNvd3dha2V1cF9sb2NrZWQoc28pIGRvIHsJ
CQkJCVwKKwlTT0NLQlVGX0xPQ0tfQVNTRVJUKCYoc28pLT5zb19zbmQpOwkJCQlcCisJaWYgKHNi
X25vdGlmeSgmKHNvKS0+c29fc25kKSkJCQkJCVwKKwkJc293YWtldXAoKHNvKSwgJihzbyktPnNv
X3NuZCk7IAkJCQlcCisJZWxzZQkJCQkJCQkJXAorCQlTT0NLQlVGX1VOTE9DSygmKHNvKS0+c29f
c25kKTsJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlzb3d3YWtldXAoc28pIGRvIHsJCQkJ
CQlcCisJU09DS0JVRl9MT0NLKCYoc28pLT5zb19zbmQpOwkJCQkJXAorCXNvd3dha2V1cF9sb2Nr
ZWQoc28pOwkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNlbmRpZiAvKiAhX1NZU19TT0NLRVRWQVJf
SF8gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl91bWEuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3VzcnNjdHBsaWIvdXNlcl91bWEuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAw
MDAwMDAwMDAuLjU5ZDcxZmZmNDJjMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNj
dHBsaWIvdXNlcl91bWEuaApAQCAtMCwwICsxLDk2IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykg
MjAwOS0yMDEwIEJyYWQgUGVub2ZmCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBIdW1haXJh
IEthbWFsCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMiBJcmVuZSBSdWVuZ2VsZXIKKyAqIENv
cHlyaWdodCAoYykgMjAxMS0yMDEyIE1pY2hhZWwgVHVleGVuCisgKgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIF9VU0VSX1VNQV9IXworI2RlZmluZSBfVVNFUl9VTUFfSF8K
KworI2RlZmluZSBVTUFfWkZMQUdfRlVMTAkJMHg0MDAwMDAwMAkvKiBSZWFjaGVkIHV6X21heHBh
Z2VzICovCisjZGVmaW5lIFVNQV9BTElHTl9QVFIJKHNpemVvZih2b2lkICopIC0gMSkJLyogQWxp
Z25tZW50IGZpdCBmb3IgcHRyICovCisKKy8qIF9fVXNlcnNwYWNlX18gQWxsIHRoZXNlIGRlZmlu
aXRpb25zIHdpbGwgY2hhbmdlIGZvcgordXNlcnNwYWNlIFVuaXZlcnNhbCBNZW1vcnkgQWxsb2Nh
dG9yIChVTUEpLiBUaGVzZSBhcmUgaW5jbHVkZWQKK2ZvciByZWZlcmVuY2UgcHVycG9zZXMgYW5k
IHRvIGF2b2lkIGNvbXBpbGUgZXJyb3JzIGZvciB0aGUgdGltZSBiZWluZy4KKyovCit0eXBlZGVm
IGludCAoKnVtYV9jdG9yKSh2b2lkICptZW0sIGludCBzaXplLCB2b2lkICphcmcsIGludCBmbGFn
cyk7Cit0eXBlZGVmIHZvaWQgKCp1bWFfZHRvcikodm9pZCAqbWVtLCBpbnQgc2l6ZSwgdm9pZCAq
YXJnKTsKK3R5cGVkZWYgaW50ICgqdW1hX2luaXQpKHZvaWQgKm1lbSwgaW50IHNpemUsIGludCBm
bGFncyk7Cit0eXBlZGVmIHZvaWQgKCp1bWFfZmluaSkodm9pZCAqbWVtLCBpbnQgc2l6ZSk7Cit0
eXBlZGVmIHN0cnVjdCB1bWFfem9uZSAqIHVtYV96b25lX3Q7Cit0eXBlZGVmIHN0cnVjdCB1bWFf
a2VnICogdW1hX2tlZ190OworCitzdHJ1Y3QgdW1hX2NhY2hlIHsKKwlpbnQgc3R1YjsgLyogVE9E
TyBfX1VzZXJzcGFjZV9fICovCit9OworCitzdHJ1Y3QgdW1hX2tlZyB7CisJaW50IHN0dWI7IC8q
IFRPRE8gX19Vc2Vyc3BhY2VfXyAqLworfTsKKworc3RydWN0IHVtYV96b25lIHsKKwljaGFyCQkq
dXpfbmFtZTsJLyogVGV4dCBuYW1lIG9mIHRoZSB6b25lICovCisJc3RydWN0IG10eAkqdXpfbG9j
azsJLyogTG9jayBmb3IgdGhlIHpvbmUgKGtlZydzIGxvY2spICovCisJdW1hX2tlZ190CXV6X2tl
ZzsJCS8qIE91ciB1bmRlcmx5aW5nIEtlZyAqLworCisJTElTVF9FTlRSWSh1bWFfem9uZSkJdXpf
bGluazsJLyogTGlzdCBvZiBhbGwgem9uZXMgaW4ga2VnICovCisJTElTVF9IRUFEKCx1bWFfYnVj
a2V0KQl1el9mdWxsX2J1Y2tldDsJLyogZnVsbCBidWNrZXRzICovCisJTElTVF9IRUFEKCx1bWFf
YnVja2V0KQl1el9mcmVlX2J1Y2tldDsJLyogQnVja2V0cyBmb3IgZnJlZXMgKi8KKworCXVtYV9j
dG9yCXV6X2N0b3I7CS8qIENvbnN0cnVjdG9yIGZvciBlYWNoIGFsbG9jYXRpb24gKi8KKwl1bWFf
ZHRvcgl1el9kdG9yOwkvKiBEZXN0cnVjdG9yICovCisJdW1hX2luaXQJdXpfaW5pdDsJLyogSW5p
dGlhbGl6ZXIgZm9yIGVhY2ggaXRlbSAqLworCXVtYV9maW5pCXV6X2Zpbmk7CS8qIERpc2NhcmRz
IG1lbW9yeSAqLworCisJdV9pbnQ2NF90CXV6X2FsbG9jczsJLyogVG90YWwgbnVtYmVyIG9mIGFs
bG9jYXRpb25zICovCisJdV9pbnQ2NF90CXV6X2ZyZWVzOwkvKiBUb3RhbCBudW1iZXIgb2YgZnJl
ZXMgKi8KKwl1X2ludDY0X3QJdXpfZmFpbHM7CS8qIFRvdGFsIG51bWJlciBvZiBhbGxvYyBmYWls
dXJlcyAqLworCXVpbnQxNl90CXV6X2ZpbGxzOwkvKiBPdXRzdGFuZGluZyBidWNrZXQgZmlsbHMg
Ki8KKwl1aW50MTZfdAl1el9jb3VudDsJLyogSGlnaGVzdCB2YWx1ZSB1Yl9wdHIgY2FuIGhhdmUg
Ki8KKworCS8qCisJICogVGhpcyBIQVMgdG8gYmUgdGhlIGxhc3QgaXRlbSBiZWNhdXNlIHdlIGFk
anVzdCB0aGUgem9uZSBzaXplCisJICogYmFzZWQgb24gTkNQVSBhbmQgdGhlbiBhbGxvY2F0ZSB0
aGUgc3BhY2UgZm9yIHRoZSB6b25lcy4KKwkgKi8KKwlzdHJ1Y3QgdW1hX2NhY2hlCXV6X2NwdVsx
XTsJLyogUGVyIGNwdSBjYWNoZXMgKi8KK307CisKKy8qIFByb3RvdHlwZSAqLwordW1hX3pvbmVf
dAordW1hX3pjcmVhdGUoY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsIHVtYV9jdG9yIGN0b3IsIHVt
YV9kdG9yIGR0b3IsCisJICAgIHVtYV9pbml0IHVtaW5pdCwgdW1hX2ZpbmkgZmluaSwgaW50IGFs
aWduLCB1aW50MzJfdCBmbGFncyk7CisKKworI2RlZmluZSB1bWFfem9uZV9zZXRfbWF4KHpvbmUs
IG51bWJlcikgLyogc3R1YiBUT0RPIF9fVXNlcnNwYWNlX18gKi8KKwordW1hX3pvbmVfdAordW1h
X3pjcmVhdGUoY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsIHVtYV9jdG9yIGN0b3IsIHVtYV9kdG9y
IGR0b3IsCisJICAgIHVtYV9pbml0IHVtaW5pdCwgdW1hX2ZpbmkgZmluaSwgaW50IGFsaWduLCB1
aW50MzJfdCBmbGFncykgeworCXJldHVybiBOVUxMOyAvKiBzdHViIFRPRE8gX19Vc2Vyc3BhY2Vf
Xy4gQWxzbyBwbGFjZSBpbXBsZW1lbnRhdGlvbiBpbiBhIHNlcGFyYXRlIC5jIGZpbGUgKi8KK30K
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c3JzY3RwLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c3JzY3RwbGliL3VzcnNjdHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAuLmI3MTkyOTA0ZTQ2NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNj
dHBsaWIvdXNyc2N0cC5oCkBAIC0wLDAgKzEsMTMyMSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMp
IDIwMDktMjAxMCBCcmFkIFBlbm9mZgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgSHVtYWly
YSBLYW1hbAorICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTIgSXJlbmUgUnVlbmdlbGVyCisgKiBD
b3B5cmlnaHQgKGMpIDIwMTEtMjAxMiBNaWNoYWVsIFR1ZXhlbgorICoKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBfX1VTUlNDVFBfSF9fCisjZGVmaW5lIF9fVVNSU0NUUF9I
X18KKworI2lmZGVmICBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1
ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgX1dJTjMyCisjaWZk
ZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MjAwKQorI2VuZGlmCisjaW5j
bHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2Vsc2UKKyNpbmNsdWRl
IDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisKKyNpZm5k
ZWYgTVNHX05PVElGSUNBVElPTgorLyogVGhpcyBkZWZpbml0aW9uIE1VU1QgYmUgaW4gc3luYyB3
aXRoIHVzcnNjdHBsaWIvdXNlcl9zb2NrZXR2YXIuaCAqLworI2RlZmluZSBNU0dfTk9USUZJQ0FU
SU9OIDB4MjAwMAorI2VuZGlmCisKKyNpZm5kZWYgSVBQUk9UT19TQ1RQCisvKiBUaGlzIGlzIHRo
ZSBJQU5BIGFzc2lnbmVkIHByb3RvY29sIG51bWJlciBvZiBTQ1RQLiAqLworI2RlZmluZSBJUFBS
T1RPX1NDVFAgMTMyCisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgorI2lmIGRlZmluZWQoX01TQ19W
RVIpICYmIF9NU0NfVkVSID49IDE2MDAKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbGlmIGRlZmlu
ZWQoU0NUUF9TVERJTlRfSU5DTFVERSkKKyNpbmNsdWRlIFNDVFBfU1RESU5UX0lOQ0xVREUKKyNl
bHNlCisjZGVmaW5lIHVpbnQ4X3QgICB1bnNpZ25lZCBfX2ludDgKKyNkZWZpbmUgdWludDE2X3Qg
IHVuc2lnbmVkIF9faW50MTYKKyNkZWZpbmUgdWludDMyX3QgIHVuc2lnbmVkIF9faW50MzIKKyNk
ZWZpbmUgdWludDY0X3QgIHVuc2lnbmVkIF9faW50NjQKKyNkZWZpbmUgaW50MTZfdCAgIF9faW50
MTYKKyNkZWZpbmUgaW50MzJfdCAgIF9faW50MzIKKyNlbmRpZgorCisjaWZuZGVmIHNzaXplX3QK
KyNpZmRlZiBfV0lONjQKKyNkZWZpbmUgc3NpemVfdCBfX2ludDY0CisjZWxpZiBkZWZpbmVkIF9X
SU4zMgorI2RlZmluZSBzc2l6ZV90IGludAorI2Vsc2UKKyNlcnJvciAiVW5rbm93biBwbGF0Zm9y
bSEiCisjZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIE1TR19FT1IgICAweDgKKyNpZm5kZWYgRVdP
VUxEQkxPQ0sKKyNkZWZpbmUgRVdPVUxEQkxPQ0sgIFdTQUVXT1VMREJMT0NLCisjZW5kaWYKKyNp
Zm5kZWYgRUlOUFJPR1JFU1MKKyNkZWZpbmUgRUlOUFJPR1JFU1MgIFdTQUVJTlBST0dSRVNTCisj
ZW5kaWYKKyNkZWZpbmUgU0hVVF9SRCAgICAxCisjZGVmaW5lIFNIVVRfV1IgICAgMgorI2RlZmlu
ZSBTSFVUX1JEV1IgIDMKKyNlbmRpZgorCit0eXBlZGVmIHVpbnQzMl90IHNjdHBfYXNzb2NfdDsK
KworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSBwYWNr
IChwdXNoLCAxKQorI2RlZmluZSBTQ1RQX1BBQ0tFRAorI2Vsc2UKKyNkZWZpbmUgU0NUUF9QQUNL
RUQgX19hdHRyaWJ1dGVfXygocGFja2VkKSkKKyNlbmRpZgorCitzdHJ1Y3Qgc2N0cF9jb21tb25f
aGVhZGVyIHsKKwl1aW50MTZfdCBzb3VyY2VfcG9ydDsKKwl1aW50MTZfdCBkZXN0aW5hdGlvbl9w
b3J0OworCXVpbnQzMl90IHZlcmlmaWNhdGlvbl90YWc7CisJdWludDMyX3QgY3JjMzJjOworfSBT
Q1RQX1BBQ0tFRDsKKworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiBkZWZpbmVkKF9NU0NfVkVSKQor
I3ByYWdtYSBwYWNrKHBvcCkKKyNlbmRpZgorI3VuZGVmIFNDVFBfUEFDS0VECisKKyNkZWZpbmUg
QUZfQ09OTiAxMjMKKy8qIFRoZSBkZWZpbml0aW9uIG9mIHN0cnVjdCBzb2NrYWRkcl9jb25uIE1V
U1QgYmUgaW4KKyAqIHR1bmUgd2l0aCBvdGhlciBzb2NrYWRkcl8qIHN0cnVjdHVyZXMuCisgKi8K
KyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX0JpdHJpZ19fKSB8fCBkZWZpbmVk
KF9fRHJhZ29uRmx5X18pIHx8IFwKKyAgICBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVk
KF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pCitzdHJ1Y3Qgc29ja2FkZHJfY29u
biB7CisJdWludDhfdCBzY29ubl9sZW47CisJdWludDhfdCBzY29ubl9mYW1pbHk7CisJdWludDE2
X3Qgc2Nvbm5fcG9ydDsKKwl2b2lkICpzY29ubl9hZGRyOworfTsKKyNlbHNlCitzdHJ1Y3Qgc29j
a2FkZHJfY29ubiB7CisJdWludDE2X3Qgc2Nvbm5fZmFtaWx5OworCXVpbnQxNl90IHNjb25uX3Bv
cnQ7CisJdm9pZCAqc2Nvbm5fYWRkcjsKK307CisjZW5kaWYKKwordW5pb24gc2N0cF9zb2Nrc3Rv
cmUgeworCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisJc3RydWN0IHNvY2thZGRyX2luNiBzaW42
OworCXN0cnVjdCBzb2NrYWRkcl9jb25uIHNjb25uOworCXN0cnVjdCBzb2NrYWRkciBzYTsKK307
CisKKyNkZWZpbmUgU0NUUF9GVVRVUkVfQVNTT0MgIDAKKyNkZWZpbmUgU0NUUF9DVVJSRU5UX0FT
U09DIDEKKyNkZWZpbmUgU0NUUF9BTExfQVNTT0MgICAgIDIKKworI2RlZmluZSBTQ1RQX0VWRU5U
X1JFQUQgICAgMHgwMDAxCisjZGVmaW5lIFNDVFBfRVZFTlRfV1JJVEUgICAweDAwMDIKKyNkZWZp
bmUgU0NUUF9FVkVOVF9FUlJPUiAgIDB4MDAwNAorCisvKioqICBTdHJ1Y3R1cmVzIGFuZCBkZWZp
bml0aW9ucyB0byB1c2UgdGhlIHNvY2tldCBBUEkgICoqKi8KKworI2RlZmluZSBTQ1RQX0FMSUdO
X1JFU1ZfUEFEIDkyCisjZGVmaW5lIFNDVFBfQUxJR05fUkVTVl9QQURfU0hPUlQgNzYKKworc3Ry
dWN0IHNjdHBfcmN2aW5mbyB7CisJdWludDE2X3QgcmN2X3NpZDsKKwl1aW50MTZfdCByY3Zfc3Nu
OworCXVpbnQxNl90IHJjdl9mbGFnczsKKwl1aW50MzJfdCByY3ZfcHBpZDsKKwl1aW50MzJfdCBy
Y3ZfdHNuOworCXVpbnQzMl90IHJjdl9jdW10c247CisJdWludDMyX3QgcmN2X2NvbnRleHQ7CisJ
c2N0cF9hc3NvY190IHJjdl9hc3NvY19pZDsKK307CisKK3N0cnVjdCBzY3RwX254dGluZm8gewor
CXVpbnQxNl90IG54dF9zaWQ7CisJdWludDE2X3Qgbnh0X2ZsYWdzOworCXVpbnQzMl90IG54dF9w
cGlkOworCXVpbnQzMl90IG54dF9sZW5ndGg7CisJc2N0cF9hc3NvY190IG54dF9hc3NvY19pZDsK
K307CisKKyNkZWZpbmUgU0NUUF9OT19ORVhUX01TRyAgICAgICAgICAgMHgwMDAwCisjZGVmaW5l
IFNDVFBfTkVYVF9NU0dfQVZBSUwgICAgICAgIDB4MDAwMQorI2RlZmluZSBTQ1RQX05FWFRfTVNH
X0lTQ09NUExFVEUgICAweDAwMDIKKyNkZWZpbmUgU0NUUF9ORVhUX01TR19JU19VTk9SREVSRUQg
MHgwMDA0CisjZGVmaW5lIFNDVFBfTkVYVF9NU0dfSVNfTk9USUZJQ0FUSU9OIDB4MDAwOAorCitz
dHJ1Y3Qgc2N0cF9yZWN2dl9ybiB7CisJc3RydWN0IHNjdHBfcmN2aW5mbyByZWN2dl9yY3ZpbmZv
OworCXN0cnVjdCBzY3RwX254dGluZm8gcmVjdnZfbnh0aW5mbzsKK307CisKKyNkZWZpbmUgU0NU
UF9SRUNWVl9OT0lORk8gIDAKKyNkZWZpbmUgU0NUUF9SRUNWVl9SQ1ZJTkZPIDEKKyNkZWZpbmUg
U0NUUF9SRUNWVl9OWFRJTkZPIDIKKyNkZWZpbmUgU0NUUF9SRUNWVl9STiAgICAgIDMKKworI2Rl
ZmluZSBTQ1RQX1NFTkRWX05PSU5GTyAgIDAKKyNkZWZpbmUgU0NUUF9TRU5EVl9TTkRJTkZPICAx
CisjZGVmaW5lIFNDVFBfU0VORFZfUFJJTkZPICAgMgorI2RlZmluZSBTQ1RQX1NFTkRWX0FVVEhJ
TkZPIDMKKyNkZWZpbmUgU0NUUF9TRU5EVl9TUEEgICAgICA0CisKKyNkZWZpbmUgU0NUUF9TRU5E
X1NORElORk9fVkFMSUQgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU0NUUF9TRU5EX1BSSU5GT19WQUxJ
RCAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU0NUUF9TRU5EX0FVVEhJTkZPX1ZBTElEIDB4MDAwMDAw
MDQKKworc3RydWN0IHNjdHBfc25kX2FsbF9jb21wbGV0ZXMgeworCXVpbnQxNl90IHNhbGxfc3Ry
ZWFtOworCXVpbnQxNl90IHNhbGxfZmxhZ3M7CisJdWludDMyX3Qgc2FsbF9wcGlkOworCXVpbnQz
Ml90IHNhbGxfY29udGV4dDsKKwl1aW50MzJfdCBzYWxsX251bV9zZW50OworCXVpbnQzMl90IHNh
bGxfbnVtX2ZhaWxlZDsKK307CisKK3N0cnVjdCBzY3RwX3NuZGluZm8geworCXVpbnQxNl90IHNu
ZF9zaWQ7CisJdWludDE2X3Qgc25kX2ZsYWdzOworCXVpbnQzMl90IHNuZF9wcGlkOworCXVpbnQz
Ml90IHNuZF9jb250ZXh0OworCXNjdHBfYXNzb2NfdCBzbmRfYXNzb2NfaWQ7Cit9OworCitzdHJ1
Y3Qgc2N0cF9wcmluZm8geworCXVpbnQxNl90IHByX3BvbGljeTsKKwl1aW50MzJfdCBwcl92YWx1
ZTsKK307CisKK3N0cnVjdCBzY3RwX2F1dGhpbmZvIHsKKwl1aW50MTZfdCBhdXRoX2tleW51bWJl
cjsKK307CisKK3N0cnVjdCBzY3RwX3NlbmR2X3NwYSB7CisJdWludDMyX3Qgc2VuZHZfZmxhZ3M7
CisJc3RydWN0IHNjdHBfc25kaW5mbyBzZW5kdl9zbmRpbmZvOworCXN0cnVjdCBzY3RwX3ByaW5m
byBzZW5kdl9wcmluZm87CisJc3RydWN0IHNjdHBfYXV0aGluZm8gc2VuZHZfYXV0aGluZm87Cit9
OworCitzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMgeworCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHN1
ZV9hZGRyZXNzOworCXVpbnQzMl90IHN1ZV9hc3NvY19pZDsKKwl1aW50MTZfdCBzdWVfcG9ydDsK
K307CisKKy8qKioqKioqKiAgTm90aWZpY2F0aW9ucyAgKioqKioqKioqKioqKiovCisKKy8qIG5v
dGlmaWNhdGlvbiB0eXBlcyAqLworI2RlZmluZSBTQ1RQX0FTU09DX0NIQU5HRSAgICAgICAgICAg
ICAgICAgMHgwMDAxCisjZGVmaW5lIFNDVFBfUEVFUl9BRERSX0NIQU5HRSAgICAgICAgICAgICAw
eDAwMDIKKyNkZWZpbmUgU0NUUF9SRU1PVEVfRVJST1IgICAgICAgICAgICAgICAgIDB4MDAwMwor
I2RlZmluZSBTQ1RQX1NFTkRfRkFJTEVEICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5l
IFNDVFBfU0hVVERPV05fRVZFTlQgICAgICAgICAgICAgICAweDAwMDUKKyNkZWZpbmUgU0NUUF9B
REFQVEFUSU9OX0lORElDQVRJT04gICAgICAgIDB4MDAwNgorI2RlZmluZSBTQ1RQX1BBUlRJQUxf
REVMSVZFUllfRVZFTlQgICAgICAgMHgwMDA3CisjZGVmaW5lIFNDVFBfQVVUSEVOVElDQVRJT05f
RVZFTlQgICAgICAgICAweDAwMDgKKyNkZWZpbmUgU0NUUF9TVFJFQU1fUkVTRVRfRVZFTlQgICAg
ICAgICAgIDB4MDAwOQorI2RlZmluZSBTQ1RQX1NFTkRFUl9EUllfRVZFTlQgICAgICAgICAgICAg
MHgwMDBhCisjZGVmaW5lIFNDVFBfTk9USUZJQ0FUSU9OU19TVE9QUEVEX0VWRU5UICAweDAwMGIK
KyNkZWZpbmUgU0NUUF9BU1NPQ19SRVNFVF9FVkVOVCAgICAgICAgICAgIDB4MDAwYworI2RlZmlu
ZSBTQ1RQX1NUUkVBTV9DSEFOR0VfRVZFTlQgICAgICAgICAgMHgwMDBkCisjZGVmaW5lIFNDVFBf
U0VORF9GQUlMRURfRVZFTlQgICAgICAgICAgICAweDAwMGUKKworLyogbm90aWZpY2F0aW9uIGV2
ZW50IHN0cnVjdHVyZXMgKi8KKworCisvKiBhc3NvY2lhdGlvbiBjaGFuZ2UgZXZlbnQgKi8KK3N0
cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSB7CisJdWludDE2X3Qgc2FjX3R5cGU7CisJdWludDE2X3Qg
c2FjX2ZsYWdzOworCXVpbnQzMl90IHNhY19sZW5ndGg7CisJdWludDE2X3Qgc2FjX3N0YXRlOwor
CXVpbnQxNl90IHNhY19lcnJvcjsKKwl1aW50MTZfdCBzYWNfb3V0Ym91bmRfc3RyZWFtczsKKwl1
aW50MTZfdCBzYWNfaW5ib3VuZF9zdHJlYW1zOworCXNjdHBfYXNzb2NfdCBzYWNfYXNzb2NfaWQ7
CisJdWludDhfdCBzYWNfaW5mb1tdOyAvKiBub3QgYXZhaWxhYmxlIHlldCAqLworfTsKKworLyog
c2FjX3N0YXRlIHZhbHVlcyAqLworI2RlZmluZSBTQ1RQX0NPTU1fVVAgICAgICAgIDB4MDAwMQor
I2RlZmluZSBTQ1RQX0NPTU1fTE9TVCAgICAgIDB4MDAwMgorI2RlZmluZSBTQ1RQX1JFU1RBUlQg
ICAgICAgIDB4MDAwMworI2RlZmluZSBTQ1RQX1NIVVRET1dOX0NPTVAgIDB4MDAwNAorI2RlZmlu
ZSBTQ1RQX0NBTlRfU1RSX0FTU09DIDB4MDAwNQorCisvKiBzYWNfaW5mbyB2YWx1ZXMgKi8KKyNk
ZWZpbmUgU0NUUF9BU1NPQ19TVVBQT1JUU19QUiAgICAgICAgICAgMHgwMQorI2RlZmluZSBTQ1RQ
X0FTU09DX1NVUFBPUlRTX0FVVEggICAgICAgICAweDAyCisjZGVmaW5lIFNDVFBfQVNTT0NfU1VQ
UE9SVFNfQVNDT05GICAgICAgIDB4MDMKKyNkZWZpbmUgU0NUUF9BU1NPQ19TVVBQT1JUU19NVUxU
SUJVRiAgICAgMHgwNAorI2RlZmluZSBTQ1RQX0FTU09DX1NVUFBPUlRTX1JFX0NPTkZJRyAgICAw
eDA1CisjZGVmaW5lIFNDVFBfQVNTT0NfU1VQUE9SVFNfSU5URVJMRUFWSU5HIDB4MDYKKyNkZWZp
bmUgU0NUUF9BU1NPQ19TVVBQT1JUU19NQVggICAgICAgICAgMHgwNgorCisvKiBBZGRyZXNzIGV2
ZW50ICovCitzdHJ1Y3Qgc2N0cF9wYWRkcl9jaGFuZ2UgeworCXVpbnQxNl90IHNwY190eXBlOwor
CXVpbnQxNl90IHNwY19mbGFnczsKKwl1aW50MzJfdCBzcGNfbGVuZ3RoOworCXN0cnVjdCBzb2Nr
YWRkcl9zdG9yYWdlIHNwY19hYWRkcjsKKwl1aW50MzJfdCBzcGNfc3RhdGU7CisJdWludDMyX3Qg
c3BjX2Vycm9yOworCXNjdHBfYXNzb2NfdCBzcGNfYXNzb2NfaWQ7CisJdWludDhfdCBzcGNfcGFk
ZGluZ1s0XTsKK307CisKKy8qIHBhZGRyIHN0YXRlIHZhbHVlcyAqLworI2RlZmluZSBTQ1RQX0FE
RFJfQVZBSUxBQkxFICAgMHgwMDAxCisjZGVmaW5lIFNDVFBfQUREUl9VTlJFQUNIQUJMRSAweDAw
MDIKKyNkZWZpbmUgU0NUUF9BRERSX1JFTU9WRUQgICAgIDB4MDAwMworI2RlZmluZSBTQ1RQX0FE
RFJfQURERUQgICAgICAgMHgwMDA0CisjZGVmaW5lIFNDVFBfQUREUl9NQURFX1BSSU0gICAweDAw
MDUKKyNkZWZpbmUgU0NUUF9BRERSX0NPTkZJUk1FRCAgIDB4MDAwNgorCisvKiByZW1vdGUgZXJy
b3IgZXZlbnRzICovCitzdHJ1Y3Qgc2N0cF9yZW1vdGVfZXJyb3IgeworCXVpbnQxNl90IHNyZV90
eXBlOworCXVpbnQxNl90IHNyZV9mbGFnczsKKwl1aW50MzJfdCBzcmVfbGVuZ3RoOworCXVpbnQx
Nl90IHNyZV9lcnJvcjsKKwlzY3RwX2Fzc29jX3Qgc3JlX2Fzc29jX2lkOworCXVpbnQ4X3Qgc3Jl
X2RhdGFbXTsKK307CisKKy8qIHNodXRkb3duIGV2ZW50ICovCitzdHJ1Y3Qgc2N0cF9zaHV0ZG93
bl9ldmVudCB7CisJdWludDE2X3Qgc3NlX3R5cGU7CisJdWludDE2X3Qgc3NlX2ZsYWdzOworCXVp
bnQzMl90IHNzZV9sZW5ndGg7CisJc2N0cF9hc3NvY190IHNzZV9hc3NvY19pZDsKK307CisKKy8q
IEFkYXB0YXRpb24gbGF5ZXIgaW5kaWNhdGlvbiAqLworc3RydWN0IHNjdHBfYWRhcHRhdGlvbl9l
dmVudCB7CisJdWludDE2X3Qgc2FpX3R5cGU7CisJdWludDE2X3Qgc2FpX2ZsYWdzOworCXVpbnQz
Ml90IHNhaV9sZW5ndGg7CisJdWludDMyX3Qgc2FpX2FkYXB0YXRpb25faW5kOworCXNjdHBfYXNz
b2NfdCBzYWlfYXNzb2NfaWQ7Cit9OworCisvKiBQYXJ0aWFsIGRlbGl2ZXJ5IGV2ZW50ICovCitz
dHJ1Y3Qgc2N0cF9wZGFwaV9ldmVudCB7CisJdWludDE2X3QgcGRhcGlfdHlwZTsKKwl1aW50MTZf
dCBwZGFwaV9mbGFnczsKKwl1aW50MzJfdCBwZGFwaV9sZW5ndGg7CisJdWludDMyX3QgcGRhcGlf
aW5kaWNhdGlvbjsKKwl1aW50MzJfdCBwZGFwaV9zdHJlYW07CisJdWludDMyX3QgcGRhcGlfc2Vx
OworCXNjdHBfYXNzb2NfdCBwZGFwaV9hc3NvY19pZDsKK307CisKKy8qIGluZGljYXRpb24gdmFs
dWVzICovCisjZGVmaW5lIFNDVFBfUEFSVElBTF9ERUxJVkVSWV9BQk9SVEVEICAweDAwMDEKKwor
LyogU0NUUCBhdXRoZW50aWNhdGlvbiBldmVudCAqLworc3RydWN0IHNjdHBfYXV0aGtleV9ldmVu
dCB7CisJdWludDE2X3QgYXV0aF90eXBlOworCXVpbnQxNl90IGF1dGhfZmxhZ3M7CisJdWludDMy
X3QgYXV0aF9sZW5ndGg7CisJdWludDE2X3QgYXV0aF9rZXludW1iZXI7CisJdWludDMyX3QgYXV0
aF9pbmRpY2F0aW9uOworCXNjdHBfYXNzb2NfdCBhdXRoX2Fzc29jX2lkOworfTsKKworLyogaW5k
aWNhdGlvbiB2YWx1ZXMgKi8KKyNkZWZpbmUgU0NUUF9BVVRIX05FV19LRVkgICAweDAwMDEKKyNk
ZWZpbmUgU0NUUF9BVVRIX05PX0FVVEggICAweDAwMDIKKyNkZWZpbmUgU0NUUF9BVVRIX0ZSRUVf
S0VZICAweDAwMDMKKworLyogU0NUUCBzZW5kZXIgZHJ5IGV2ZW50ICovCitzdHJ1Y3Qgc2N0cF9z
ZW5kZXJfZHJ5X2V2ZW50IHsKKwl1aW50MTZfdCBzZW5kZXJfZHJ5X3R5cGU7CisJdWludDE2X3Qg
c2VuZGVyX2RyeV9mbGFnczsKKwl1aW50MzJfdCBzZW5kZXJfZHJ5X2xlbmd0aDsKKwlzY3RwX2Fz
c29jX3Qgc2VuZGVyX2RyeV9hc3NvY19pZDsKK307CisKKworLyogU3RyZWFtIHJlc2V0IGV2ZW50
IC0gc3Vic2NyaWJlIHRvIFNDVFBfU1RSRUFNX1JFU0VUX0VWRU5UICovCitzdHJ1Y3Qgc2N0cF9z
dHJlYW1fcmVzZXRfZXZlbnQgeworCXVpbnQxNl90IHN0cnJlc2V0X3R5cGU7CisJdWludDE2X3Qg
c3RycmVzZXRfZmxhZ3M7CisJdWludDMyX3Qgc3RycmVzZXRfbGVuZ3RoOworCXNjdHBfYXNzb2Nf
dCBzdHJyZXNldF9hc3NvY19pZDsKKwl1aW50MTZfdCBzdHJyZXNldF9zdHJlYW1fbGlzdFtdOwor
fTsKKworLyogZmxhZ3MgaW4gc3RyZWFtX3Jlc2V0X2V2ZW50IChzdHJyZXNldF9mbGFncykgKi8K
KyNkZWZpbmUgU0NUUF9TVFJFQU1fUkVTRVRfSU5DT01JTkdfU1NOICAweDAwMDEKKyNkZWZpbmUg
U0NUUF9TVFJFQU1fUkVTRVRfT1VUR09JTkdfU1NOICAweDAwMDIKKyNkZWZpbmUgU0NUUF9TVFJF
QU1fUkVTRVRfREVOSUVEICAgICAgICAweDAwMDQgLyogU0NUUF9TVFJSRVNFVF9GQUlMRUQgKi8K
KyNkZWZpbmUgU0NUUF9TVFJFQU1fUkVTRVRfRkFJTEVEICAgICAgICAweDAwMDggLyogU0NUUF9T
VFJSRVNFVF9GQUlMRUQgKi8KKyNkZWZpbmUgU0NUUF9TVFJFQU1fQ0hBTkdFRF9ERU5JRUQgICAg
ICAweDAwMTAKKworI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9JTkNPTUlORyAgICAgIDB4MDAw
MDAwMDEKKyNkZWZpbmUgU0NUUF9TVFJFQU1fUkVTRVRfT1VUR09JTkcgICAgICAweDAwMDAwMDAy
CisKKworLyogQXNzb2MgcmVzZXQgZXZlbnQgLSBzdWJzY3JpYmUgdG8gU0NUUF9BU1NPQ19SRVNF
VF9FVkVOVCAqLworc3RydWN0IHNjdHBfYXNzb2NfcmVzZXRfZXZlbnQgeworCXVpbnQxNl90IGFz
c29jcmVzZXRfdHlwZTsKKwl1aW50MTZfdCBhc3NvY3Jlc2V0X2ZsYWdzOworCXVpbnQzMl90IGFz
c29jcmVzZXRfbGVuZ3RoOworCXNjdHBfYXNzb2NfdCBhc3NvY3Jlc2V0X2Fzc29jX2lkOworCXVp
bnQzMl90IGFzc29jcmVzZXRfbG9jYWxfdHNuOworCXVpbnQzMl90IGFzc29jcmVzZXRfcmVtb3Rl
X3RzbjsKK307CisKKyNkZWZpbmUgU0NUUF9BU1NPQ19SRVNFVF9ERU5JRUQgICAgICAgIDB4MDAw
NAorI2RlZmluZSBTQ1RQX0FTU09DX1JFU0VUX0ZBSUxFRCAgICAgICAgMHgwMDA4CisKKworLyog
U3RyZWFtIGNoYW5nZSBldmVudCAtIHN1YnNjcmliZSB0byBTQ1RQX1NUUkVBTV9DSEFOR0VfRVZF
TlQgKi8KK3N0cnVjdCBzY3RwX3N0cmVhbV9jaGFuZ2VfZXZlbnQgeworCXVpbnQxNl90IHN0cmNo
YW5nZV90eXBlOworCXVpbnQxNl90IHN0cmNoYW5nZV9mbGFnczsKKwl1aW50MzJfdCBzdHJjaGFu
Z2VfbGVuZ3RoOworCXNjdHBfYXNzb2NfdCBzdHJjaGFuZ2VfYXNzb2NfaWQ7CisJdWludDE2X3Qg
c3RyY2hhbmdlX2luc3RybXM7CisJdWludDE2X3Qgc3RyY2hhbmdlX291dHN0cm1zOworfTsKKwor
I2RlZmluZSBTQ1RQX1NUUkVBTV9DSEFOR0VfREVOSUVECTB4MDAwNAorI2RlZmluZSBTQ1RQX1NU
UkVBTV9DSEFOR0VfRkFJTEVECTB4MDAwOAorCisKKy8qIFNDVFAgc2VuZCBmYWlsZWQgZXZlbnQg
Ki8KK3N0cnVjdCBzY3RwX3NlbmRfZmFpbGVkX2V2ZW50IHsKKwl1aW50MTZfdCBzc2ZlX3R5cGU7
CisJdWludDE2X3Qgc3NmZV9mbGFnczsKKwl1aW50MzJfdCBzc2ZlX2xlbmd0aDsKKwl1aW50MzJf
dCBzc2ZlX2Vycm9yOworCXN0cnVjdCBzY3RwX3NuZGluZm8gc3NmZV9pbmZvOworCXNjdHBfYXNz
b2NfdCBzc2ZlX2Fzc29jX2lkOworCXVpbnQ4X3QgIHNzZmVfZGF0YVtdOworfTsKKworLyogZmxh
ZyB0aGF0IGluZGljYXRlcyBzdGF0ZSBvZiBkYXRhICovCisjZGVmaW5lIFNDVFBfREFUQV9VTlNF
TlQgIDB4MDAwMQkvKiBpbnF1ZXVlIG5ldmVyIG9uIHdpcmUgKi8KKyNkZWZpbmUgU0NUUF9EQVRB
X1NFTlQgICAgMHgwMDAyCS8qIG9uIHdpcmUgYXQgZmFpbHVyZSAqLworCisvKiBTQ1RQIGV2ZW50
IG9wdGlvbiAqLworc3RydWN0IHNjdHBfZXZlbnQgeworCXNjdHBfYXNzb2NfdCAgIHNlX2Fzc29j
X2lkOworCXVpbnQxNl90ICAgICAgIHNlX3R5cGU7CisJdWludDhfdCAgICAgICAgc2Vfb247Cit9
OworCit1bmlvbiBzY3RwX25vdGlmaWNhdGlvbiB7CisJc3RydWN0IHNjdHBfdGx2IHsKKwkJdWlu
dDE2X3Qgc25fdHlwZTsKKwkJdWludDE2X3Qgc25fZmxhZ3M7CisJCXVpbnQzMl90IHNuX2xlbmd0
aDsKKwl9IHNuX2hlYWRlcjsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2Ugc25fYXNzb2NfY2hh
bmdlOworCXN0cnVjdCBzY3RwX3BhZGRyX2NoYW5nZSBzbl9wYWRkcl9jaGFuZ2U7CisJc3RydWN0
IHNjdHBfcmVtb3RlX2Vycm9yIHNuX3JlbW90ZV9lcnJvcjsKKwlzdHJ1Y3Qgc2N0cF9zaHV0ZG93
bl9ldmVudCBzbl9zaHV0ZG93bl9ldmVudDsKKwlzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2V2ZW50
IHNuX2FkYXB0YXRpb25fZXZlbnQ7CisJc3RydWN0IHNjdHBfcGRhcGlfZXZlbnQgc25fcGRhcGlf
ZXZlbnQ7CisJc3RydWN0IHNjdHBfYXV0aGtleV9ldmVudCBzbl9hdXRoX2V2ZW50OworCXN0cnVj
dCBzY3RwX3NlbmRlcl9kcnlfZXZlbnQgc25fc2VuZGVyX2RyeV9ldmVudDsKKwlzdHJ1Y3Qgc2N0
cF9zZW5kX2ZhaWxlZF9ldmVudCBzbl9zZW5kX2ZhaWxlZF9ldmVudDsKKwlzdHJ1Y3Qgc2N0cF9z
dHJlYW1fcmVzZXRfZXZlbnQgc25fc3RycmVzZXRfZXZlbnQ7CisJc3RydWN0IHNjdHBfYXNzb2Nf
cmVzZXRfZXZlbnQgIHNuX2Fzc29jcmVzZXRfZXZlbnQ7CisJc3RydWN0IHNjdHBfc3RyZWFtX2No
YW5nZV9ldmVudCBzbl9zdHJjaGFuZ2VfZXZlbnQ7Cit9OworCitzdHJ1Y3Qgc2N0cF9ldmVudF9z
dWJzY3JpYmUgeworCXVpbnQ4X3Qgc2N0cF9kYXRhX2lvX2V2ZW50OworCXVpbnQ4X3Qgc2N0cF9h
c3NvY2lhdGlvbl9ldmVudDsKKwl1aW50OF90IHNjdHBfYWRkcmVzc19ldmVudDsKKwl1aW50OF90
IHNjdHBfc2VuZF9mYWlsdXJlX2V2ZW50OworCXVpbnQ4X3Qgc2N0cF9wZWVyX2Vycm9yX2V2ZW50
OworCXVpbnQ4X3Qgc2N0cF9zaHV0ZG93bl9ldmVudDsKKwl1aW50OF90IHNjdHBfcGFydGlhbF9k
ZWxpdmVyeV9ldmVudDsKKwl1aW50OF90IHNjdHBfYWRhcHRhdGlvbl9sYXllcl9ldmVudDsKKwl1
aW50OF90IHNjdHBfYXV0aGVudGljYXRpb25fZXZlbnQ7CisJdWludDhfdCBzY3RwX3NlbmRlcl9k
cnlfZXZlbnQ7CisJdWludDhfdCBzY3RwX3N0cmVhbV9yZXNldF9ldmVudDsKK307CisKKworCisv
KiBGbGFncyB0aGF0IGdvIGludG8gdGhlIHNpbmZvLT5zaW5mb19mbGFncyBmaWVsZCAqLworI2Rl
ZmluZSBTQ1RQX0RBVEFfTEFTVF9GUkFHICAgMHgwMDAxIC8qIHRhaWwgcGFydCBvZiB0aGUgbWVz
c2FnZSBjb3VsZCBub3QgYmUgc2VudCAqLworI2RlZmluZSBTQ1RQX0RBVEFfTk9UX0ZSQUcgICAg
MHgwMDAzIC8qIGNvbXBsZXRlIG1lc3NhZ2UgY291bGQgbm90IGJlIHNlbnQgKi8KKyNkZWZpbmUg
U0NUUF9OT1RJRklDQVRJT04gICAgIDB4MDAxMCAvKiBuZXh0IG1lc3NhZ2UgaXMgYSBub3RpZmlj
YXRpb24gKi8KKyNkZWZpbmUgU0NUUF9DT01QTEVURSAgICAgICAgIDB4MDAyMCAvKiBuZXh0IG1l
c3NhZ2UgaXMgY29tcGxldGUgKi8KKyNkZWZpbmUgU0NUUF9FT0YgICAgICAgICAgICAgIDB4MDEw
MCAvKiBTdGFydCBzaHV0ZG93biBwcm9jZWR1cmVzICovCisjZGVmaW5lIFNDVFBfQUJPUlQgICAg
ICAgICAgICAweDAyMDAgLyogU2VuZCBhbiBBQk9SVCB0byBwZWVyICovCisjZGVmaW5lIFNDVFBf
VU5PUkRFUkVEICAgICAgICAweDA0MDAgLyogTWVzc2FnZSBpcyB1bi1vcmRlcmVkICovCisjZGVm
aW5lIFNDVFBfQUREUl9PVkVSICAgICAgICAweDA4MDAgLyogT3ZlcnJpZGUgdGhlIHByaW1hcnkt
YWRkcmVzcyAqLworI2RlZmluZSBTQ1RQX1NFTkRBTEwgICAgICAgICAgMHgxMDAwIC8qIFNlbmQg
dGhpcyBvbiBhbGwgYXNzb2NpYXRpb25zICovCisjZGVmaW5lIFNDVFBfRU9SICAgICAgICAgICAg
ICAweDIwMDAgLyogZW5kIG9mIG1lc3NhZ2Ugc2lnbmFsICovCisjZGVmaW5lIFNDVFBfU0FDS19J
TU1FRElBVEVMWSAweDQwMDAgLyogU2V0IEktQml0ICovCisKKyNkZWZpbmUgSU5WQUxJRF9TSU5G
T19GTEFHKHgpICgoKHgpICYgMHhmZmZmZmZmMCBcCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmIH4oU0NUUF9FT0YgfCBTQ1RQX0FCT1JUIHwgU0NUUF9VTk9SREVSRUQgfFwK
KwkJCQkgICAgICAgIFNDVFBfQUREUl9PVkVSIHwgU0NUUF9TRU5EQUxMIHwgU0NUUF9FT1IgfFwK
KwkJCQkJU0NUUF9TQUNLX0lNTUVESUFURUxZKSkgIT0gMCkKKy8qIGZvciB0aGUgZW5kcG9pbnQg
Ki8KKworLyogVGhlIGxvd2VyIGJ5dGUgaXMgYW4gZW51bWVyYXRpb24gb2YgUFItU0NUUCBwb2xp
Y2llcyAqLworI2RlZmluZSBTQ1RQX1BSX1NDVFBfTk9ORSAweDAwMDAgLyogUmVsaWFibGUgdHJh
bnNmZXIgKi8KKyNkZWZpbmUgU0NUUF9QUl9TQ1RQX1RUTCAgMHgwMDAxIC8qIFRpbWUgYmFzZWQg
UFItU0NUUCAqLworI2RlZmluZSBTQ1RQX1BSX1NDVFBfQlVGICAweDAwMDIgLyogQnVmZmVyIGJh
c2VkIFBSLVNDVFAgKi8KKyNkZWZpbmUgU0NUUF9QUl9TQ1RQX1JUWCAgMHgwMDAzIC8qIE51bWJl
ciBvZiByZXRyYW5zbWlzc2lvbnMgYmFzZWQgUFItU0NUUCAqLworCisjZGVmaW5lIFBSX1NDVFBf
UE9MSUNZKHgpICAgICAgICAgKCh4KSAmIDB4MGYpCisjZGVmaW5lIFBSX1NDVFBfRU5BQkxFRCh4
KSAgICAgICAgKFBSX1NDVFBfUE9MSUNZKHgpICE9IFNDVFBfUFJfU0NUUF9OT05FKQorI2RlZmlu
ZSBQUl9TQ1RQX1RUTF9FTkFCTEVEKHgpICAgIChQUl9TQ1RQX1BPTElDWSh4KSA9PSBTQ1RQX1BS
X1NDVFBfVFRMKQorI2RlZmluZSBQUl9TQ1RQX0JVRl9FTkFCTEVEKHgpICAgIChQUl9TQ1RQX1BP
TElDWSh4KSA9PSBTQ1RQX1BSX1NDVFBfQlVGKQorI2RlZmluZSBQUl9TQ1RQX1JUWF9FTkFCTEVE
KHgpICAgIChQUl9TQ1RQX1BPTElDWSh4KSA9PSBTQ1RQX1BSX1NDVFBfUlRYKQorI2RlZmluZSBQ
Ul9TQ1RQX0lOVkFMSURfUE9MSUNZKHgpIChQUl9TQ1RQX1BPTElDWSh4KSA+IFNDVFBfUFJfU0NU
UF9SVFgpCisKKworLyoKKyAqIHVzZXIgc29ja2V0IG9wdGlvbnM6IHNvY2tldCBBUEkgZGVmaW5l
ZAorICovCisvKgorICogcmVhZC13cml0ZSBvcHRpb25zCisgKi8KKyNkZWZpbmUgU0NUUF9SVE9J
TkZPICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNDVFBfQVNTT0NJTkZP
ICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBTQ1RQX0lOSVRNU0cgICAgICAg
ICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgU0NUUF9OT0RFTEFZICAgICAgICAgICAg
ICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFNDVFBfQVVUT0NMT1NFICAgICAgICAgICAgICAg
ICAgMHgwMDAwMDAwNQorI2RlZmluZSBTQ1RQX1BSSU1BUllfQUREUiAgICAgICAgICAgICAgIDB4
MDAwMDAwMDcKKyNkZWZpbmUgU0NUUF9BREFQVEFUSU9OX0xBWUVSICAgICAgICAgICAweDAwMDAw
MDA4CisjZGVmaW5lIFNDVFBfRElTQUJMRV9GUkFHTUVOVFMgICAgICAgICAgMHgwMDAwMDAwOQor
I2RlZmluZSBTQ1RQX1BFRVJfQUREUl9QQVJBTVMgICAgICAgICAgIDB4MDAwMDAwMGEKKy8qIGFu
Y2lsbGFyeSBkYXRhL25vdGlmaWNhdGlvbiBpbnRlcmVzdCBvcHRpb25zICovCisvKiBXaXRob3V0
IHRoaXMgYXBwbGllZCB3ZSB3aWxsIGdpdmUgVjQgYW5kIFY2IGFkZHJlc3NlcyBvbiBhIFY2IHNv
Y2tldCAqLworI2RlZmluZSBTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQUREUiAgICAgIDB4MDAwMDAw
MGQKKyNkZWZpbmUgU0NUUF9NQVhTRUcgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBlCisj
ZGVmaW5lIFNDVFBfREVMQVlFRF9TQUNLICAgICAgICAgICAgICAgMHgwMDAwMDAwZgorI2RlZmlu
ZSBTQ1RQX0ZSQUdNRU5UX0lOVEVSTEVBVkUgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgU0NU
UF9QQVJUSUFMX0RFTElWRVJZX1BPSU5UICAgICAweDAwMDAwMDExCisvKiBhdXRoZW50aWNhdGlv
biBzdXBwb3J0ICovCisjZGVmaW5lIFNDVFBfSE1BQ19JREVOVCAgICAgICAgICAgICAgICAgMHgw
MDAwMDAxNAorI2RlZmluZSBTQ1RQX0FVVEhfQUNUSVZFX0tFWSAgICAgICAgICAgIDB4MDAwMDAw
MTUKKyNkZWZpbmUgU0NUUF9BVVRPX0FTQ09ORiAgICAgICAgICAgICAgICAweDAwMDAwMDE4Cisj
ZGVmaW5lIFNDVFBfTUFYX0JVUlNUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorLyogYXNz
b2MgbGV2ZWwgY29udGV4dCAqLworI2RlZmluZSBTQ1RQX0NPTlRFWFQgICAgICAgICAgICAgICAg
ICAgIDB4MDAwMDAwMWEKKy8qIGV4cGxpY2l0IEVPUiBzaWduYWxsaW5nICovCisjZGVmaW5lIFND
VFBfRVhQTElDSVRfRU9SICAgICAgICAgICAgICAgMHgwMDAwMDAxYgorI2RlZmluZSBTQ1RQX1JF
VVNFX1BPUlQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWMKKworI2RlZmluZSBTQ1RQX0VWRU5U
ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWUKKyNkZWZpbmUgU0NUUF9SRUNWUkNWSU5G
TyAgICAgICAgICAgICAgICAweDAwMDAwMDFmCisjZGVmaW5lIFNDVFBfUkVDVk5YVElORk8gICAg
ICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBTQ1RQX0RFRkFVTFRfU05ESU5GTyAgICAg
ICAgICAgIDB4MDAwMDAwMjEKKyNkZWZpbmUgU0NUUF9ERUZBVUxUX1BSSU5GTyAgICAgICAgICAg
ICAweDAwMDAwMDIyCisjZGVmaW5lIFNDVFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVCAgICAgMHgw
MDAwMDAyNAorI2RlZmluZSBTQ1RQX0VDTl9TVVBQT1JURUQgICAgICAgICAgICAgIDB4MDAwMDAw
MjUKKyNkZWZpbmUgU0NUUF9QUl9TVVBQT1JURUQgICAgICAgICAgICAgICAweDAwMDAwMDI2Cisj
ZGVmaW5lIFNDVFBfQVVUSF9TVVBQT1JURUQgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmlu
ZSBTQ1RQX0FTQ09ORl9TVVBQT1JURUQgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgU0NU
UF9SRUNPTkZJR19TVVBQT1JURUQgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIFNDVFBfTlJT
QUNLX1NVUFBPUlRFRCAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBTQ1RQX1BLVERST1Bf
U1VQUE9SVEVEICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgU0NUUF9NQVhfQ1dORCAgICAg
ICAgICAgICAgICAgICAweDAwMDAwMDMyCisKKyNkZWZpbmUgU0NUUF9FTkFCTEVfU1RSRUFNX1JF
U0VUICAgICAgICAweDAwMDAwOTAwIC8qIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICovCisKKy8q
IFBsdWdnYWJsZSBTdHJlYW0gU2NoZWR1bGluZyBTb2NrZXQgb3B0aW9uICovCisjZGVmaW5lIFND
VFBfUExVR0dBQkxFX1NTICAgICAgICAgICAgICAgMHgwMDAwMTIwMworI2RlZmluZSBTQ1RQX1NT
X1ZBTFVFICAgICAgICAgICAgICAgICAgIDB4MDAwMDEyMDQKKworLyoKKyAqIHJlYWQtb25seSBv
cHRpb25zCisgKi8KKyNkZWZpbmUgU0NUUF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAweDAw
MDAwMTAwCisjZGVmaW5lIFNDVFBfR0VUX1BFRVJfQUREUl9JTkZPICAgICAgICAgMHgwMDAwMDEw
MQorLyogYXV0aGVudGljYXRpb24gc3VwcG9ydCAqLworI2RlZmluZSBTQ1RQX1BFRVJfQVVUSF9D
SFVOS1MgICAgICAgICAgIDB4MDAwMDAxMDIKKyNkZWZpbmUgU0NUUF9MT0NBTF9BVVRIX0NIVU5L
UyAgICAgICAgICAweDAwMDAwMTAzCisjZGVmaW5lIFNDVFBfR0VUX0FTU09DX05VTUJFUiAgICAg
ICAgICAgMHgwMDAwMDEwNAorI2RlZmluZSBTQ1RQX0dFVF9BU1NPQ19JRF9MSVNUICAgICAgICAg
IDB4MDAwMDAxMDUKKyNkZWZpbmUgU0NUUF9USU1FT1VUUyAgICAgICAgICAgICAgICAgICAweDAw
MDAwMTA2CisjZGVmaW5lIFNDVFBfUFJfU1RSRUFNX1NUQVRVUyAgICAgICAgICAgMHgwMDAwMDEw
NworI2RlZmluZSBTQ1RQX1BSX0FTU09DX1NUQVRVUyAgICAgICAgICAgIDB4MDAwMDAxMDgKKwor
LyoKKyAqIHdyaXRlLW9ubHkgb3B0aW9ucworICovCisjZGVmaW5lIFNDVFBfU0VUX1BFRVJfUFJJ
TUFSWV9BRERSICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBTQ1RQX0FVVEhfQ0hVTksgICAgICAg
ICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgU0NUUF9BVVRIX0tFWSAgICAgICAgICAgICAg
ICAgICAweDAwMDAwMDEzCisjZGVmaW5lIFNDVFBfQVVUSF9ERUFDVElWQVRFX0tFWSAgICAgICAg
MHgwMDAwMDAxZAorI2RlZmluZSBTQ1RQX0FVVEhfREVMRVRFX0tFWSAgICAgICAgICAgIDB4MDAw
MDAwMTYKKyNkZWZpbmUgU0NUUF9SRVNFVF9TVFJFQU1TICAgICAgICAgICAgICAweDAwMDAwOTAx
IC8qIHN0cnVjdCBzY3RwX3Jlc2V0X3N0cmVhbXMgKi8KKyNkZWZpbmUgU0NUUF9SRVNFVF9BU1NP
QyAgICAgICAgICAgICAgICAweDAwMDAwOTAyIC8qIHNjdHBfYXNzb2NfdCAqLworI2RlZmluZSBT
Q1RQX0FERF9TVFJFQU1TICAgICAgICAgICAgICAgIDB4MDAwMDA5MDMgLyogc3RydWN0IHNjdHBf
YWRkX3N0cmVhbXMgKi8KKworc3RydWN0IHNjdHBfaW5pdG1zZyB7CisJdWludDE2X3Qgc2luaXRf
bnVtX29zdHJlYW1zOworCXVpbnQxNl90IHNpbml0X21heF9pbnN0cmVhbXM7CisJdWludDE2X3Qg
c2luaXRfbWF4X2F0dGVtcHRzOworCXVpbnQxNl90IHNpbml0X21heF9pbml0X3RpbWVvOworfTsK
Kworc3RydWN0IHNjdHBfcnRvaW5mbyB7CisJc2N0cF9hc3NvY190IHNydG9fYXNzb2NfaWQ7CisJ
dWludDMyX3Qgc3J0b19pbml0aWFsOworCXVpbnQzMl90IHNydG9fbWF4OworCXVpbnQzMl90IHNy
dG9fbWluOworfTsKKworc3RydWN0IHNjdHBfYXNzb2NwYXJhbXMgeworCXNjdHBfYXNzb2NfdCBz
YXNvY19hc3NvY19pZDsKKwl1aW50MzJfdCBzYXNvY19wZWVyX3J3bmQ7CisJdWludDMyX3Qgc2Fz
b2NfbG9jYWxfcnduZDsKKwl1aW50MzJfdCBzYXNvY19jb29raWVfbGlmZTsKKwl1aW50MTZfdCBz
YXNvY19hc29jbWF4cnh0OworCXVpbnQxNl90IHNhc29jX251bWJlcl9wZWVyX2Rlc3RpbmF0aW9u
czsKK307CisKK3N0cnVjdCBzY3RwX3NldHByaW0geworCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdl
IHNzcF9hZGRyOworCXNjdHBfYXNzb2NfdCBzc3BfYXNzb2NfaWQ7CisJdWludDhfdCBzc3BfcGFk
ZGluZ1s0XTsKK307CisKK3N0cnVjdCBzY3RwX3NldGFkYXB0YXRpb24geworCXVpbnQzMl90ICAg
c3NiX2FkYXB0YXRpb25faW5kOworfTsKKworc3RydWN0IHNjdHBfcGFkZHJwYXJhbXMgeworCXN0
cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNwcF9hZGRyZXNzOworCXNjdHBfYXNzb2NfdCBzcHBfYXNz
b2NfaWQ7CisJdWludDMyX3Qgc3BwX2hiaW50ZXJ2YWw7CisJdWludDMyX3Qgc3BwX3BhdGhtdHU7
CisJdWludDMyX3Qgc3BwX2ZsYWdzOworCXVpbnQzMl90IHNwcF9pcHY2X2Zsb3dsYWJlbDsKKwl1
aW50MTZfdCBzcHBfcGF0aG1heHJ4dDsKKwl1aW50OF90IHNwcF9kc2NwOworfTsKKworI2RlZmlu
ZSBTUFBfSEJfRU5BQkxFICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU1BQX0hCX0RJU0FCTEUg
ICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFNQUF9IQl9ERU1BTkQgICAgICAgMHgwMDAwMDAwNAor
I2RlZmluZSBTUFBfUE1UVURfRU5BQkxFICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgU1BQX1BNVFVE
X0RJU0FCTEUgICAweDAwMDAwMDEwCisjZGVmaW5lIFNQUF9IQl9USU1FX0lTX1pFUk8gMHgwMDAw
MDA4MAorI2RlZmluZSBTUFBfSVBWNl9GTE9XTEFCRUwgIDB4MDAwMDAxMDAKKyNkZWZpbmUgU1BQ
X0RTQ1AgICAgICAgICAgICAweDAwMDAwMjAwCisKKy8qIFVzZWQgZm9yIFNDVFBfTUFYU0VHLCBT
Q1RQX01BWF9CVVJTVCwgU0NUUF9FTkFCTEVfU1RSRUFNX1JFU0VULCBhbmQgU0NUUF9DT05URVhU
ICovCitzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSB7CisJc2N0cF9hc3NvY190IGFzc29jX2lkOwor
CXVpbnQzMl90IGFzc29jX3ZhbHVlOworfTsKKworLyogVG8gZW5hYmxlIHN0cmVhbSByZXNldCAq
LworI2RlZmluZSBTQ1RQX0VOQUJMRV9SRVNFVF9TVFJFQU1fUkVRICAweDAwMDAwMDAxCisjZGVm
aW5lIFNDVFBfRU5BQkxFX1JFU0VUX0FTU09DX1JFUSAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU0NU
UF9FTkFCTEVfQ0hBTkdFX0FTU09DX1JFUSAgMHgwMDAwMDAwNAorI2RlZmluZSBTQ1RQX0VOQUJM
RV9WQUxVRV9NQVNLICAgICAgICAweDAwMDAwMDA3CisKK3N0cnVjdCBzY3RwX3Jlc2V0X3N0cmVh
bXMgeworCXNjdHBfYXNzb2NfdCBzcnNfYXNzb2NfaWQ7CisJdWludDE2X3Qgc3JzX2ZsYWdzOwor
CXVpbnQxNl90IHNyc19udW1iZXJfc3RyZWFtczsgIC8qIDAgPT0gQUxMICovCisJdWludDE2X3Qg
c3JzX3N0cmVhbV9saXN0W107ICAgLyogbGlzdCBpZiBzdHJyc3RfbnVtX3N0cmVhbXMgaXMgbm90
IDAgKi8KK307CisKK3N0cnVjdCBzY3RwX2FkZF9zdHJlYW1zIHsKKwlzY3RwX2Fzc29jX3QJc2Fz
X2Fzc29jX2lkOworCXVpbnQxNl90CXNhc19pbnN0cm1zOworCXVpbnQxNl90CXNhc19vdXRzdHJt
czsKK307CisKK3N0cnVjdCBzY3RwX2htYWNhbGdvIHsKKwl1aW50MzJfdCBzaG1hY19udW1iZXJf
b2ZfaWRlbnRzOworCXVpbnQxNl90IHNobWFjX2lkZW50c1tdOworfTsKKworLyogQVVUSCBobWFj
X2lkICovCisjZGVmaW5lIFNDVFBfQVVUSF9ITUFDX0lEX1JTVkQgICAgMHgwMDAwCisjZGVmaW5l
IFNDVFBfQVVUSF9ITUFDX0lEX1NIQTEgICAgMHgwMDAxCS8qIGRlZmF1bHQsIG1hbmRhdG9yeSAq
LworI2RlZmluZSBTQ1RQX0FVVEhfSE1BQ19JRF9TSEEyNTYgIDB4MDAwMworI2RlZmluZSBTQ1RQ
X0FVVEhfSE1BQ19JRF9TSEEyMjQgIDB4MDAwNAorI2RlZmluZSBTQ1RQX0FVVEhfSE1BQ19JRF9T
SEEzODQgIDB4MDAwNQorI2RlZmluZSBTQ1RQX0FVVEhfSE1BQ19JRF9TSEE1MTIgIDB4MDAwNgor
CisKK3N0cnVjdCBzY3RwX3NhY2tfaW5mbyB7CisJc2N0cF9hc3NvY190IHNhY2tfYXNzb2NfaWQ7
CisJdWludDMyX3Qgc2Fja19kZWxheTsKKwl1aW50MzJfdCBzYWNrX2ZyZXE7Cit9OworCitzdHJ1
Y3Qgc2N0cF9kZWZhdWx0X3ByaW5mbyB7CisJdWludDE2X3QgcHJfcG9saWN5OworCXVpbnQzMl90
IHByX3ZhbHVlOworCXNjdHBfYXNzb2NfdCBwcl9hc3NvY19pZDsKK307CisKK3N0cnVjdCBzY3Rw
X3BhZGRyaW5mbyB7CisJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3BpbmZvX2FkZHJlc3M7CisJ
c2N0cF9hc3NvY190IHNwaW5mb19hc3NvY19pZDsKKwlpbnQzMl90IHNwaW5mb19zdGF0ZTsKKwl1
aW50MzJfdCBzcGluZm9fY3duZDsKKwl1aW50MzJfdCBzcGluZm9fc3J0dDsKKwl1aW50MzJfdCBz
cGluZm9fcnRvOworCXVpbnQzMl90IHNwaW5mb19tdHU7Cit9OworCitzdHJ1Y3Qgc2N0cF9zdGF0
dXMgeworCXNjdHBfYXNzb2NfdCBzc3RhdF9hc3NvY19pZDsKKwlpbnQzMl90ICBzc3RhdF9zdGF0
ZTsKKwl1aW50MzJfdCBzc3RhdF9yd25kOworCXVpbnQxNl90IHNzdGF0X3VuYWNrZGF0YTsKKwl1
aW50MTZfdCBzc3RhdF9wZW5kZGF0YTsKKwl1aW50MTZfdCBzc3RhdF9pbnN0cm1zOworCXVpbnQx
Nl90IHNzdGF0X291dHN0cm1zOworCXVpbnQzMl90IHNzdGF0X2ZyYWdtZW50YXRpb25fcG9pbnQ7
CisJc3RydWN0IHNjdHBfcGFkZHJpbmZvIHNzdGF0X3ByaW1hcnk7Cit9OworCisvKgorICogdXNl
ciBzdGF0ZSB2YWx1ZXMKKyAqLworI2RlZmluZSBTQ1RQX0NMT1NFRCAgICAgICAgICAgICAweDAw
MDAKKyNkZWZpbmUgU0NUUF9CT1VORCAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFNDVFBf
TElTVEVOICAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBTQ1RQX0NPT0tJRV9XQUlUICAgICAg
ICAweDAwMDIKKyNkZWZpbmUgU0NUUF9DT09LSUVfRUNIT0VEICAgICAgMHgwMDA0CisjZGVmaW5l
IFNDVFBfRVNUQUJMSVNIRUQgICAgICAgIDB4MDAwOAorI2RlZmluZSBTQ1RQX1NIVVRET1dOX1NF
TlQgICAgICAweDAwMTAKKyNkZWZpbmUgU0NUUF9TSFVURE9XTl9SRUNFSVZFRCAgMHgwMDIwCisj
ZGVmaW5lIFNDVFBfU0hVVERPV05fQUNLX1NFTlQgIDB4MDA0MAorI2RlZmluZSBTQ1RQX1NIVVRE
T1dOX1BFTkRJTkcgICAweDAwODAKKworCisjZGVmaW5lIFNDVFBfQUNUSVZFICAgICAgIDB4MDAw
MSAgLyogU0NUUF9BRERSX1JFQUNIQUJMRSAqLworI2RlZmluZSBTQ1RQX0lOQUNUSVZFICAgICAw
eDAwMDIgIC8qIG5laXRoZXIgU0NUUF9BRERSX1JFQUNIQUJMRQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vciBTQ1RQX0FERFJfVU5DT05GSVJNRUQgKi8KKyNkZWZpbmUg
U0NUUF9VTkNPTkZJUk1FRCAgMHgwMjAwICAvKiBTQ1RQX0FERFJfVU5DT05GSVJNRUQgKi8KKwor
c3RydWN0IHNjdHBfYXV0aGNodW5rcyB7CisJc2N0cF9hc3NvY190IGdhdXRoX2Fzc29jX2lkOwor
LyoJdWludDMyX3QgZ2F1dGhfbnVtYmVyX29mX2NodW5rczsgbm90IGF2YWlsYWJsZSAqLworCXVp
bnQ4X3QgIGdhdXRoX2NodW5rc1tdOworfTsKKworc3RydWN0IHNjdHBfYXNzb2NfaWRzIHsKKwl1
aW50MzJfdCBnYWlkc19udW1iZXJfb2ZfaWRzOworCXNjdHBfYXNzb2NfdCBnYWlkc19hc3NvY19p
ZFtdOworfTsKKworc3RydWN0IHNjdHBfc2V0cGVlcnByaW0geworCXN0cnVjdCBzb2NrYWRkcl9z
dG9yYWdlIHNzcHBfYWRkcjsKKwlzY3RwX2Fzc29jX3Qgc3NwcF9hc3NvY19pZDsKKwl1aW50OF90
IHNzcHBfcGFkZGluZ1s0XTsKK307CisKK3N0cnVjdCBzY3RwX2F1dGhjaHVuayB7CisJdWludDhf
dCBzYXV0aF9jaHVuazsKK307CisKKworc3RydWN0IHNjdHBfZ2V0X25vbmNlX3ZhbHVlcyB7CisJ
c2N0cF9hc3NvY190IGduX2Fzc29jX2lkOworCXVpbnQzMl90IGduX3BlZXJzX3RhZzsKKwl1aW50
MzJfdCBnbl9sb2NhbF90YWc7Cit9OworCisKKy8qCisgKiBNYWluIFNDVFAgY2h1bmsgdHlwZXMK
KyAqLworLyoqKioqKioqKioqKjB4MDAgc2VyaWVzICoqKioqKioqKioqLworI2RlZmluZSBTQ1RQ
X0RBVEEgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIFNDVFBfSU5JVElBVElPTiAgICAgICAg
IDB4MDEKKyNkZWZpbmUgU0NUUF9JTklUSUFUSU9OX0FDSyAgICAgMHgwMgorI2RlZmluZSBTQ1RQ
X1NFTEVDVElWRV9BQ0sgICAgICAweDAzCisjZGVmaW5lIFNDVFBfSEVBUlRCRUFUX1JFUVVFU1Qg
IDB4MDQKKyNkZWZpbmUgU0NUUF9IRUFSVEJFQVRfQUNLICAgICAgMHgwNQorI2RlZmluZSBTQ1RQ
X0FCT1JUX0FTU09DSUFUSU9OICAweDA2CisjZGVmaW5lIFNDVFBfU0hVVERPV04gICAgICAgICAg
IDB4MDcKKyNkZWZpbmUgU0NUUF9TSFVURE9XTl9BQ0sgICAgICAgMHgwOAorI2RlZmluZSBTQ1RQ
X09QRVJBVElPTl9FUlJPUiAgICAweDA5CisjZGVmaW5lIFNDVFBfQ09PS0lFX0VDSE8gICAgICAg
IDB4MGEKKyNkZWZpbmUgU0NUUF9DT09LSUVfQUNLICAgICAgICAgMHgwYgorI2RlZmluZSBTQ1RQ
X0VDTl9FQ0hPICAgICAgICAgICAweDBjCisjZGVmaW5lIFNDVFBfRUNOX0NXUiAgICAgICAgICAg
IDB4MGQKKyNkZWZpbmUgU0NUUF9TSFVURE9XTl9DT01QTEVURSAgMHgwZQorLyogUkZDNDg5NSAq
LworI2RlZmluZSBTQ1RQX0FVVEhFTlRJQ0FUSU9OICAgICAweDBmCisvKiBFWSBucl9zYWNrIGNo
dW5rIGlkKi8KKyNkZWZpbmUgU0NUUF9OUl9TRUxFQ1RJVkVfQUNLICAgMHgxMAorLyoqKioqKioq
KioqKjB4NDAgc2VyaWVzICoqKioqKioqKioqLworLyoqKioqKioqKioqKjB4ODAgc2VyaWVzICoq
KioqKioqKioqLworLyogUkZDNTA2MSAqLworI2RlZmluZQlTQ1RQX0FTQ09ORl9BQ0sgICAgICAg
ICAweDgwCisvKiBkcmFmdC1pZXRmLXN0ZXdhcnQtcGt0ZHJwc2N0cCAqLworI2RlZmluZSBTQ1RQ
X1BBQ0tFVF9EUk9QUEVEICAgICAweDgxCisvKiBkcmFmdC1pZXRmLXN0ZXdhcnQtc3RycmVzZXQt
eHh4ICovCisjZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUICAgICAgIDB4ODIKKworLyogUkZDNDgy
MCAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTQ1RQX1BBRF9DSFVOSyAgICAg
ICAgICAweDg0CisvKioqKioqKioqKioqMHhjMCBzZXJpZXMgKioqKioqKioqKiovCisvKiBSRkMz
NzU4ICovCisjZGVmaW5lIFNDVFBfRk9SV0FSRF9DVU1fVFNOICAgIDB4YzAKKy8qIFJGQzUwNjEg
Ki8KKyNkZWZpbmUgU0NUUF9BU0NPTkYgICAgICAgICAgICAgMHhjMQorCitzdHJ1Y3Qgc2N0cF9h
dXRoa2V5IHsKKwlzY3RwX2Fzc29jX3Qgc2NhX2Fzc29jX2lkOworCXVpbnQxNl90IHNjYV9rZXlu
dW1iZXI7CisJdWludDE2X3Qgc2NhX2tleWxlbmd0aDsKKwl1aW50OF90ICBzY2Ffa2V5W107Cit9
OworCitzdHJ1Y3Qgc2N0cF9hdXRoa2V5aWQgeworCXNjdHBfYXNzb2NfdCBzY2FjdF9hc3NvY19p
ZDsKKwl1aW50MTZfdCBzY2FjdF9rZXludW1iZXI7Cit9OworCitzdHJ1Y3Qgc2N0cF9jY19vcHRp
b24geworCWludCBvcHRpb247CisJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgYWlkX3ZhbHVlOwor
fTsKKworc3RydWN0IHNjdHBfc3RyZWFtX3ZhbHVlIHsKKwlzY3RwX2Fzc29jX3QgYXNzb2NfaWQ7
CisJdWludDE2X3Qgc3RyZWFtX2lkOworCXVpbnQxNl90IHN0cmVhbV92YWx1ZTsKK307CisKK3N0
cnVjdCBzY3RwX3RpbWVvdXRzIHsKKwlzY3RwX2Fzc29jX3Qgc3RpbW9fYXNzb2NfaWQ7CisJdWlu
dDMyX3Qgc3RpbW9faW5pdDsKKwl1aW50MzJfdCBzdGltb19kYXRhOworCXVpbnQzMl90IHN0aW1v
X3NhY2s7CisJdWludDMyX3Qgc3RpbW9fc2h1dGRvd247CisJdWludDMyX3Qgc3RpbW9faGVhcnRi
ZWF0OworCXVpbnQzMl90IHN0aW1vX2Nvb2tpZTsKKwl1aW50MzJfdCBzdGltb19zaHV0ZG93bmFj
azsKK307CisKK3N0cnVjdCBzY3RwX3Byc3RhdHVzIHsKKwlzY3RwX2Fzc29jX3Qgc3Byc3RhdF9h
c3NvY19pZDsKKwl1aW50MTZfdCBzcHJzdGF0X3NpZDsKKwl1aW50MTZfdCBzcHJzdGF0X3BvbGlj
eTsKKwl1aW50NjRfdCBzcHJzdGF0X2FiYW5kb25lZF91bnNlbnQ7CisJdWludDY0X3Qgc3Byc3Rh
dF9hYmFuZG9uZWRfc2VudDsKK307CisKKy8qIFN0YW5kYXJkIFRDUCBDb25nZXN0aW9uIENvbnRy
b2wgKi8KKyNkZWZpbmUgU0NUUF9DQ19SRkMyNTgxICAgICAgICAgMHgwMDAwMDAwMAorLyogSGln
aCBTcGVlZCBUQ1AgQ29uZ2VzdGlvbiBDb250cm9sIChGbG95ZCkgKi8KKyNkZWZpbmUgU0NUUF9D
Q19IU1RDUCAgICAgICAgICAgMHgwMDAwMDAwMQorLyogSFRDUCBDb25nZXN0aW9uIENvbnRyb2wg
Ki8KKyNkZWZpbmUgU0NUUF9DQ19IVENQICAgICAgICAgICAgMHgwMDAwMDAwMgorLyogUlRDQyBD
b25nZXN0aW9uIENvbnRyb2wgLSBSRkMyNTgxIHBsdXMgKi8KKyNkZWZpbmUgU0NUUF9DQ19SVEND
ICAgICAgICAgICAgMHgwMDAwMDAwMworCisjZGVmaW5lIFNDVFBfQ0NfT1BUX1JUQ0NfU0VUTU9E
RSAweDAwMDAyMDAwCisjZGVmaW5lIFNDVFBfQ0NfT1BUX1VTRV9EQ0NDX0VDICAweDAwMDAyMDAx
CisjZGVmaW5lIFNDVFBfQ0NfT1BUX1NURUFEWV9TVEVQICAweDAwMDAyMDAyCisKKyNkZWZpbmUg
U0NUUF9DTVRfT0ZGICAgICAgICAgICAgMAorI2RlZmluZSBTQ1RQX0NNVF9CQVNFICAgICAgICAg
ICAxCisjZGVmaW5lIFNDVFBfQ01UX1JQVjEgICAgICAgICAgIDIKKyNkZWZpbmUgU0NUUF9DTVRf
UlBWMiAgICAgICAgICAgMworI2RlZmluZSBTQ1RQX0NNVF9NUFRDUCAgICAgICAgICA0CisjZGVm
aW5lIFNDVFBfQ01UX01BWCAgICAgICAgICAgIFNDVFBfQ01UX01QVENQCisKKy8qIFJTIC0gU3Vw
cG9ydGVkIHN0cmVhbSBzY2hlZHVsaW5nIG1vZHVsZXMgZm9yIHBsdWdnYWJsZQorICogc3RyZWFt
IHNjaGVkdWxpbmcKKyAqLworLyogRGVmYXVsdCBzaW1wbGUgcm91bmQtcm9iaW4gKi8KKyNkZWZp
bmUgU0NUUF9TU19ERUZBVUxUICAgICAgICAgICAgIDB4MDAwMDAwMDAKKy8qIFJlYWwgcm91bmQt
cm9iaW4gKi8KKyNkZWZpbmUgU0NUUF9TU19ST1VORF9ST0JJTiAgICAgICAgIDB4MDAwMDAwMDEK
Ky8qIFJlYWwgcm91bmQtcm9iaW4gcGVyIHBhY2tldCAqLworI2RlZmluZSBTQ1RQX1NTX1JPVU5E
X1JPQklOX1BBQ0tFVCAgMHgwMDAwMDAwMgorLyogUHJpb3JpdHkgKi8KKyNkZWZpbmUgU0NUUF9T
U19QUklPUklUWSAgICAgICAgICAgIDB4MDAwMDAwMDMKKy8qIEZhaXIgQmFuZHdpZHRoICovCisj
ZGVmaW5lIFNDVFBfU1NfRkFJUl9CQU5EV0lUSCAgICAgICAweDAwMDAwMDA0CisvKiBGaXJzdC1j
b21lLCBmaXJzdC1zZXJ2ZSAqLworI2RlZmluZSBTQ1RQX1NTX0ZJUlNUX0NPTUUgICAgICAgICAg
MHgwMDAwMDAwNQorCisvKioqKioqKioqKioqKioqKioqKiogU3lzdGVtIGNhbGxzICoqKioqKioq
KioqKiovCisKK3N0cnVjdCBzb2NrZXQ7CisKK3ZvaWQKK3VzcnNjdHBfaW5pdCh1aW50MTZfdCwK
KyAgICAgICAgICAgICBpbnQgKCopKHZvaWQgKmFkZHIsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxl
bmd0aCwgdWludDhfdCB0b3MsIHVpbnQ4X3Qgc2V0X2RmKSwKKyAgICAgICAgICAgICB2b2lkICgq
KShjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworCit2b2lkCit1c3JzY3RwX2luaXRfbm90aHJl
YWRzKHVpbnQxNl90LAorCQkgICAgICAgaW50ICgqKSh2b2lkICphZGRyLCB2b2lkICpidWZmZXIs
IHNpemVfdCBsZW5ndGgsIHVpbnQ4X3QgdG9zLCB1aW50OF90IHNldF9kZiksCisJCSAgICAgICB2
b2lkICgqKShjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworCitzdHJ1Y3Qgc29ja2V0ICoKK3Vz
cnNjdHBfc29ja2V0KGludCBkb21haW4sIGludCB0eXBlLCBpbnQgcHJvdG9jb2wsCisgICAgICAg
ICAgICAgICBpbnQgKCpyZWNlaXZlX2NiKShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bmlvbiBzY3Rw
X3NvY2tzdG9yZSBhZGRyLCB2b2lkICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IGRhdGFsZW4sIHN0cnVjdCBzY3RwX3JjdmluZm8sIGludCBmbGFncywgdm9p
ZCAqdWxwX2luZm8pLAorICAgICAgICAgICAgICAgaW50ICgqc2VuZF9jYikoc3RydWN0IHNvY2tl
dCAqc29jaywgdWludDMyX3Qgc2JfZnJlZSwgdm9pZCAqdWxwX2luZm8pLAorICAgICAgICAgICAg
ICAgdWludDMyX3Qgc2JfdGhyZXNob2xkLAorICAgICAgICAgICAgICAgdm9pZCAqdWxwX2luZm8p
OworCitpbnQKK3VzcnNjdHBfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAg
ICAgICAgICAgICBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgaW50IG9wdGlvbl9uYW1l
LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm9wdGlvbl92YWx1ZSwKKyAgICAgICAg
ICAgICAgICAgICBzb2NrbGVuX3Qgb3B0aW9uX2xlbik7CisKK2ludAordXNyc2N0cF9nZXRzb2Nr
b3B0KHN0cnVjdCBzb2NrZXQgKnNvLAorICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCwKKyAg
ICAgICAgICAgICAgICAgICBpbnQgb3B0aW9uX25hbWUsCisgICAgICAgICAgICAgICAgICAgdm9p
ZCAqb3B0aW9uX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCAqb3B0aW9uX2xl
bik7CisKK2ludAordXNyc2N0cF9vcHRfaW5mbyhzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAg
ICAgICAgICAgc2N0cF9hc3NvY190IGlkLAorICAgICAgICAgICAgICAgICBpbnQgb3B0LAorICAg
ICAgICAgICAgICAgICB2b2lkICphcmcsCisgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCAqc2l6
ZSk7CisKK2ludAordXNyc2N0cF9nZXRwYWRkcnMoc3RydWN0IHNvY2tldCAqc28sCisgICAgICAg
ICAgICAgICAgICBzY3RwX2Fzc29jX3QgaWQsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29j
a2FkZHIgKipyYWRkcnMpOworCit2b2lkCit1c3JzY3RwX2ZyZWVwYWRkcnMoc3RydWN0IHNvY2th
ZGRyICphZGRycyk7CisKK2ludAordXNyc2N0cF9nZXRsYWRkcnMoc3RydWN0IHNvY2tldCAqc28s
CisgICAgICAgICAgICAgICAgICBzY3RwX2Fzc29jX3QgaWQsCisgICAgICAgICAgICAgICAgICBz
dHJ1Y3Qgc29ja2FkZHIgKipyYWRkcnMpOworCit2b2lkCit1c3JzY3RwX2ZyZWVsYWRkcnMoc3Ry
dWN0IHNvY2thZGRyICphZGRycyk7CisKK3NzaXplX3QKK3VzcnNjdHBfc2VuZHYoc3RydWN0IHNv
Y2tldCAqc28sCisgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmRhdGEsCisgICAgICAgICAgICAg
IHNpemVfdCBsZW4sCisgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqdG8sCisgICAgICAg
ICAgICAgIGludCBhZGRyY250LAorICAgICAgICAgICAgICB2b2lkICppbmZvLAorICAgICAgICAg
ICAgICBzb2NrbGVuX3QgaW5mb2xlbiwKKyAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluZm90
eXBlLAorICAgICAgICAgICAgICBpbnQgZmxhZ3MpOworCitzc2l6ZV90Cit1c3JzY3RwX3JlY3Z2
KHN0cnVjdCBzb2NrZXQgKnNvLAorICAgICAgICAgICAgICB2b2lkICpkYnVmLAorICAgICAgICAg
ICAgICBzaXplX3QgbGVuLAorICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmZyb20sCisg
ICAgICAgICAgICAgIHNvY2tsZW5fdCAqIGZyb21sZW4sCisgICAgICAgICAgICAgIHZvaWQgKmlu
Zm8sCisgICAgICAgICAgICAgIHNvY2tsZW5fdCAqaW5mb2xlbiwKKyAgICAgICAgICAgICAgdW5z
aWduZWQgaW50ICppbmZvdHlwZSwKKyAgICAgICAgICAgICAgaW50ICptc2dfZmxhZ3MpOworCitp
bnQKK3VzcnNjdHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICBzdHJ1Y3Qg
c29ja2FkZHIgKm5hbWUsCisgICAgICAgICAgICAgc29ja2xlbl90IG5hbWVsZW4pOworCisjZGVm
aW5lIFNDVFBfQklORFhfQUREX0FERFIgMHgwMDAwODAwMQorI2RlZmluZSBTQ1RQX0JJTkRYX1JF
TV9BRERSIDB4MDAwMDgwMDIKKworaW50Cit1c3JzY3RwX2JpbmR4KHN0cnVjdCBzb2NrZXQgKnNv
LAorICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJzLAorICAgICAgICAgICAgICBp
bnQgYWRkcmNudCwKKyAgICAgICAgICAgICAgaW50IGZsYWdzKTsKKworaW50Cit1c3JzY3RwX2xp
c3RlbihzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICAgIGludCBiYWNrbG9nKTsKKwor
c3RydWN0IHNvY2tldCAqCit1c3JzY3RwX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAg
ICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqIGFuYW1lLAorICAgICAgICAgICAgICAgc29ja2xl
bl90ICogYW5hbWVsZW4pOworCitzdHJ1Y3Qgc29ja2V0ICoKK3VzcnNjdHBfcGVlbG9mZihzdHJ1
Y3Qgc29ja2V0ICosIHNjdHBfYXNzb2NfdCk7CisKK2ludAordXNyc2N0cF9jb25uZWN0KHN0cnVj
dCBzb2NrZXQgKnNvLAorICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqbmFtZSwKKyAg
ICAgICAgICAgICAgICBzb2NrbGVuX3QgbmFtZWxlbik7CisKK2ludAordXNyc2N0cF9jb25uZWN0
eChzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNvY2th
ZGRyICphZGRycywgaW50IGFkZHJjbnQsCisgICAgICAgICAgICAgICAgIHNjdHBfYXNzb2NfdCAq
aWQpOworCit2b2lkCit1c3JzY3RwX2Nsb3NlKHN0cnVjdCBzb2NrZXQgKnNvKTsKKworc2N0cF9h
c3NvY190Cit1c3JzY3RwX2dldGFzc29jaWQoc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3Qgc29ja2Fk
ZHIgKik7CisKK2ludAordXNyc2N0cF9maW5pc2godm9pZCk7CisKK2ludAordXNyc2N0cF9zaHV0
ZG93bihzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGhvdyk7CisKK3ZvaWQKK3VzcnNjdHBfY29ubmlu
cHV0KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIHVpbnQ4X3QpOworCitpbnQKK3VzcnNj
dHBfc2V0X25vbl9ibG9ja2luZyhzdHJ1Y3Qgc29ja2V0ICosIGludCk7CisKK2ludAordXNyc2N0
cF9nZXRfbm9uX2Jsb2NraW5nKHN0cnVjdCBzb2NrZXQgKik7CisKK3ZvaWQKK3VzcnNjdHBfcmVn
aXN0ZXJfYWRkcmVzcyh2b2lkICopOworCit2b2lkCit1c3JzY3RwX2RlcmVnaXN0ZXJfYWRkcmVz
cyh2b2lkICopOworCitpbnQKK3VzcnNjdHBfc2V0X3VscGluZm8oc3RydWN0IHNvY2tldCAqLCB2
b2lkICopOworCitpbnQKK3VzcnNjdHBfZ2V0X3VscGluZm8oc3RydWN0IHNvY2tldCAqLCB2b2lk
ICoqKTsKKworaW50Cit1c3JzY3RwX3NldF91cGNhbGwoc3RydWN0IHNvY2tldCAqc28sCisgICAg
ICAgICAgICAgICAgICAgdm9pZCAoKnVwY2FsbCkoc3RydWN0IHNvY2tldCAqLCB2b2lkICosIGlu
dCksCisgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnKTsKKworaW50Cit1c3JzY3RwX2dldF9l
dmVudHMoc3RydWN0IHNvY2tldCAqc28pOworCisKK3ZvaWQKK3VzcnNjdHBfaGFuZGxlX3RpbWVy
cyh1aW50MzJfdCBlbGFwc2VkX21pbGxpc2Vjb25kcyk7CisKKyNkZWZpbmUgU0NUUF9EVU1QX09V
VEJPVU5EIDEKKyNkZWZpbmUgU0NUUF9EVU1QX0lOQk9VTkQgIDAKKworY2hhciAqCit1c3JzY3Rw
X2R1bXBwYWNrZXQoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CisKK3ZvaWQKK3VzcnNjdHBf
ZnJlZWR1bXBidWZmZXIoY2hhciAqKTsKKwordm9pZAordXNyc2N0cF9lbmFibGVfY3JjMzJjX29m
ZmxvYWQodm9pZCk7CisKK3ZvaWQKK3VzcnNjdHBfZGlzYWJsZV9jcmMzMmNfb2ZmbG9hZCh2b2lk
KTsKKwordWludDMyX3QKK3VzcnNjdHBfY3JjMzJjKHZvaWQgKiwgc2l6ZV90KTsKKworI2RlZmlu
ZSBVU1JTQ1RQX1RVTkFCTEVfREVDTChfX2ZpZWxkKSAgICAgICAgICAgICAgIFwKK2ludCB1c3Jz
Y3RwX3R1bmFibGVfc2V0XyAjIyBfX2ZpZWxkKHVpbnQzMl90IHZhbHVlKTtcCit1aW50MzJfdCB1
c3JzY3RwX3N5c2N0bF9nZXRfICMjIF9fZmllbGQodm9pZCk7CisKK1VTUlNDVFBfVFVOQUJMRV9E
RUNMKHNjdHBfaGFzaHRibHNpemUpCitVU1JTQ1RQX1RVTkFCTEVfREVDTChzY3RwX3BjYnRibHNp
emUpCitVU1JTQ1RQX1RVTkFCTEVfREVDTChzY3RwX2NodW5rc2NhbGUpCisKKyNkZWZpbmUgVVNS
U0NUUF9TWVNDVExfREVDTChfX2ZpZWxkKSAgICAgICAgICAgICAgIFwKK2ludCB1c3JzY3RwX3N5
c2N0bF9zZXRfICMjIF9fZmllbGQodWludDMyX3QgdmFsdWUpO1wKK3VpbnQzMl90IHVzcnNjdHBf
c3lzY3RsX2dldF8gIyMgX19maWVsZCh2b2lkKTsKKworVVNSU0NUUF9TWVNDVExfREVDTChzY3Rw
X3NlbmRzcGFjZSkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9yZWN2c3BhY2UpCitVU1JTQ1RQ
X1NZU0NUTF9ERUNMKHNjdHBfYXV0b19hc2NvbmYpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBf
bXVsdGlwbGVfYXNjb25mcykKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9lY25fZW5hYmxlKQor
VVNSU0NUUF9TWVNDVExfREVDTChzY3RwX3ByX2VuYWJsZSkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0wo
c2N0cF9hdXRoX2VuYWJsZSkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9hc2NvbmZfZW5hYmxl
KQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX3JlY29uZmlnX2VuYWJsZSkKK1VTUlNDVFBfU1lT
Q1RMX0RFQ0woc2N0cF9ucnNhY2tfZW5hYmxlKQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX3Br
dGRyb3BfZW5hYmxlKQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX25vX2NzdW1fb25fbG9vcGJh
Y2spCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfcGVlcl9jaHVua19vaCkKK1VTUlNDVFBfU1lT
Q1RMX0RFQ0woc2N0cF9tYXhfYnVyc3RfZGVmYXVsdCkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0
cF9tYXhfY2h1bmtzX29uX3F1ZXVlKQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX21pbl9zcGxp
dF9wb2ludCkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9kZWxheWVkX3NhY2tfdGltZV9kZWZh
dWx0KQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX3NhY2tfZnJlcV9kZWZhdWx0KQorVVNSU0NU
UF9TWVNDVExfREVDTChzY3RwX3N5c3RlbV9mcmVlX3Jlc2NfbGltaXQpCitVU1JTQ1RQX1NZU0NU
TF9ERUNMKHNjdHBfYXNvY19mcmVlX3Jlc2NfbGltaXQpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNj
dHBfaGVhcnRiZWF0X2ludGVydmFsX2RlZmF1bHQpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBf
cG10dV9yYWlzZV90aW1lX2RlZmF1bHQpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfc2h1dGRv
d25fZ3VhcmRfdGltZV9kZWZhdWx0KQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX3NlY3JldF9s
aWZldGltZV9kZWZhdWx0KQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX3J0b19tYXhfZGVmYXVs
dCkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9ydG9fbWluX2RlZmF1bHQpCitVU1JTQ1RQX1NZ
U0NUTF9ERUNMKHNjdHBfcnRvX2luaXRpYWxfZGVmYXVsdCkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0wo
c2N0cF9pbml0X3J0b19tYXhfZGVmYXVsdCkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF92YWxp
ZF9jb29raWVfbGlmZV9kZWZhdWx0KQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2luaXRfcnR4
X21heF9kZWZhdWx0KQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2Fzc29jX3J0eF9tYXhfZGVm
YXVsdCkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9wYXRoX3J0eF9tYXhfZGVmYXVsdCkKK1VT
UlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9hZGRfbW9yZV90aHJlc2hvbGQpCitVU1JTQ1RQX1NZU0NU
TF9ERUNMKHNjdHBfbnJfaW5jb21pbmdfc3RyZWFtc19kZWZhdWx0KQorVVNSU0NUUF9TWVNDVExf
REVDTChzY3RwX25yX291dGdvaW5nX3N0cmVhbXNfZGVmYXVsdCkKK1VTUlNDVFBfU1lTQ1RMX0RF
Q0woc2N0cF9jbXRfb25fb2ZmKQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2NtdF91c2VfZGFj
KQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX3VzZV9jd25kX2Jhc2VkX21heGJ1cnN0KQorVVNS
U0NUUF9TWVNDVExfREVDTChzY3RwX25hdF9mcmllbmRseSkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0wo
c2N0cF9MMl9hYmNfdmFyaWFibGUpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfbWJ1Zl90aHJl
c2hvbGRfY291bnQpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfZG9fZHJhaW4pCitVU1JTQ1RQ
X1NZU0NUTF9ERUNMKHNjdHBfaGJfbWF4YnVyc3QpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBf
YWJvcnRfaWZfb25lXzJfb25lX2hpdHNfbGltaXQpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBf
bWluX3Jlc2lkdWFsKQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX21heF9yZXRyYW5fY2h1bmsp
CitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfbG9nZ2luZ19sZXZlbCkKK1VTUlNDVFBfU1lTQ1RM
X0RFQ0woc2N0cF9kZWZhdWx0X2NjX21vZHVsZSkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9k
ZWZhdWx0X2ZyYWdfaW50ZXJsZWF2ZSkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9tb2JpbGl0
eV9iYXNlKQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX21vYmlsaXR5X2Zhc3RoYW5kb2ZmKQor
VVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2luaXRzX2luY2x1ZGVfbmF0X2ZyaWVuZGx5KQorVVNS
U0NUUF9TWVNDVExfREVDTChzY3RwX3VkcF90dW5uZWxpbmdfcG9ydCkKK1VTUlNDVFBfU1lTQ1RM
X0RFQ0woc2N0cF9lbmFibGVfc2Fja19pbW1lZGlhdGVseSkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0wo
c2N0cF92dGFnX3RpbWVfd2FpdCkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9ibGFja2hvbGUp
CitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfc2VuZGFsbF9saW1pdCkKK1VTUlNDVFBfU1lTQ1RM
X0RFQ0woc2N0cF9kaWFnX2luZm9fY29kZSkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9mcl9t
YXhfYnVyc3RfZGVmYXVsdCkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9wYXRoX3BmX3RocmVz
aG9sZCkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9kZWZhdWx0X3NzX21vZHVsZSkKK1VTUlND
VFBfU1lTQ1RMX0RFQ0woc2N0cF9ydHR2YXJfYncpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBf
cnR0dmFyX3J0dCkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9ydHR2YXJfZXFyZXQpCitVU1JT
Q1RQX1NZU0NUTF9ERUNMKHNjdHBfc3RlYWR5X3N0ZXApCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNj
dHBfdXNlX2RjY2NfZWNuKQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2J1ZmZlcl9zcGxpdHRp
bmcpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfaW5pdGlhbF9jd25kKQorI2lmZGVmIFNDVFBf
REVCVUcKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9kZWJ1Z19vbikKKy8qIE1vcmUgc3BlY2lm
aWMgdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiBzY3RwX2NvbnN0YW50cywgYnV0CisgKiBhcmUgbm90
IGNvbnNpZGVyZWQgdG8gYmUgcGFydCBvZiB0aGUgQVBJLgorICovCisjZGVmaW5lIFNDVFBfREVC
VUdfTk9ORSAweDAwMDAwMDAwCisjZGVmaW5lIFNDVFBfREVCVUdfQUxMICAweGZmZmZmZmZmCisj
ZW5kaWYKKyN1bmRlZiBVU1JTQ1RQX1NZU0NUTF9ERUNMCitzdHJ1Y3Qgc2N0cF90aW1ldmFsIHsK
Kwl1aW50MzJfdCB0dl9zZWM7CisJdWludDMyX3QgdHZfdXNlYzsKK307CisKK3N0cnVjdCBzY3Rw
c3RhdCB7CisJc3RydWN0IHNjdHBfdGltZXZhbCBzY3Rwc19kaXNjb250aW51aXR5dGltZTsgLyog
c2N0cFN0YXRzIDE4IChUaW1lU3RhbXApICovCisJLyogTUlCIGFjY29yZGluZyB0byBSRkMgMzg3
MyAqLworCXVpbnQzMl90ICBzY3Rwc19jdXJyZXN0YWI7ICAgICAgICAgICAvKiBzY3RwU3RhdHMg
IDEgICAoR2F1Z2UzMikgKi8KKwl1aW50MzJfdCAgc2N0cHNfYWN0aXZlZXN0YWI7ICAgICAgICAg
Lyogc2N0cFN0YXRzICAyIChDb3VudGVyMzIpICovCisJdWludDMyX3QgIHNjdHBzX3Jlc3RhcnRl
c3RhYjsKKwl1aW50MzJfdCAgc2N0cHNfY29sbGlzaW9uZXN0YWI7CisJdWludDMyX3QgIHNjdHBz
X3Bhc3NpdmVlc3RhYjsgICAgICAgIC8qIHNjdHBTdGF0cyAgMyAoQ291bnRlcjMyKSAqLworCXVp
bnQzMl90ICBzY3Rwc19hYm9ydGVkOyAgICAgICAgICAgICAvKiBzY3RwU3RhdHMgIDQgKENvdW50
ZXIzMikgKi8KKwl1aW50MzJfdCAgc2N0cHNfc2h1dGRvd247ICAgICAgICAgICAgLyogc2N0cFN0
YXRzICA1IChDb3VudGVyMzIpICovCisJdWludDMyX3QgIHNjdHBzX291dG9mdGhlYmx1ZTsgICAg
ICAgIC8qIHNjdHBTdGF0cyAgNiAoQ291bnRlcjMyKSAqLworCXVpbnQzMl90ICBzY3Rwc19jaGVj
a3N1bWVycm9yczsgICAgICAvKiBzY3RwU3RhdHMgIDcgKENvdW50ZXIzMikgKi8KKwl1aW50MzJf
dCAgc2N0cHNfb3V0Y29udHJvbGNodW5rczsgICAgLyogc2N0cFN0YXRzICA4IChDb3VudGVyNjQp
ICovCisJdWludDMyX3QgIHNjdHBzX291dG9yZGVyY2h1bmtzOyAgICAgIC8qIHNjdHBTdGF0cyAg
OSAoQ291bnRlcjY0KSAqLworCXVpbnQzMl90ICBzY3Rwc19vdXR1bm9yZGVyY2h1bmtzOyAgICAv
KiBzY3RwU3RhdHMgMTAgKENvdW50ZXI2NCkgKi8KKwl1aW50MzJfdCAgc2N0cHNfaW5jb250cm9s
Y2h1bmtzOyAgICAgLyogc2N0cFN0YXRzIDExIChDb3VudGVyNjQpICovCisJdWludDMyX3QgIHNj
dHBzX2lub3JkZXJjaHVua3M7ICAgICAgIC8qIHNjdHBTdGF0cyAxMiAoQ291bnRlcjY0KSAqLwor
CXVpbnQzMl90ICBzY3Rwc19pbnVub3JkZXJjaHVua3M7ICAgICAvKiBzY3RwU3RhdHMgMTMgKENv
dW50ZXI2NCkgKi8KKwl1aW50MzJfdCAgc2N0cHNfZnJhZ3Vzcm1zZ3M7ICAgICAgICAgLyogc2N0
cFN0YXRzIDE0IChDb3VudGVyNjQpICovCisJdWludDMyX3QgIHNjdHBzX3JlYXNtdXNybXNnczsg
ICAgICAgIC8qIHNjdHBTdGF0cyAxNSAoQ291bnRlcjY0KSAqLworCXVpbnQzMl90ICBzY3Rwc19v
dXRwYWNrZXRzOyAgICAgICAgICAvKiBzY3RwU3RhdHMgMTYgKENvdW50ZXI2NCkgKi8KKwl1aW50
MzJfdCAgc2N0cHNfaW5wYWNrZXRzOyAgICAgICAgICAgLyogc2N0cFN0YXRzIDE3IChDb3VudGVy
NjQpICovCisKKwkvKiBpbnB1dCBzdGF0aXN0aWNzOiAqLworCXVpbnQzMl90ICBzY3Rwc19yZWN2
cGFja2V0czsgICAgICAgICAvKiB0b3RhbCBpbnB1dCBwYWNrZXRzICAgICAgICAqLworCXVpbnQz
Ml90ICBzY3Rwc19yZWN2ZGF0YWdyYW1zOyAgICAgICAvKiB0b3RhbCBpbnB1dCBkYXRhZ3JhbXMg
ICAgICAqLworCXVpbnQzMl90ICBzY3Rwc19yZWN2cGt0d2l0aGRhdGE7ICAgICAvKiB0b3RhbCBw
YWNrZXRzIHRoYXQgaGFkIGRhdGEgKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVjdnNhY2tzOyAgICAg
ICAgICAgLyogdG90YWwgaW5wdXQgU0FDSyBjaHVua3MgICAgKi8KKwl1aW50MzJfdCAgc2N0cHNf
cmVjdmRhdGE7ICAgICAgICAgICAgLyogdG90YWwgaW5wdXQgREFUQSBjaHVua3MgICAgKi8KKwl1
aW50MzJfdCAgc2N0cHNfcmVjdmR1cGRhdGE7ICAgICAgICAgLyogdG90YWwgaW5wdXQgZHVwbGlj
YXRlIERBVEEgY2h1bmtzICovCisJdWludDMyX3QgIHNjdHBzX3JlY3ZoZWFydGJlYXQ7ICAgICAg
IC8qIHRvdGFsIGlucHV0IEhCIGNodW5rcyAgICAgICovCisJdWludDMyX3QgIHNjdHBzX3JlY3Zo
ZWFydGJlYXRhY2s7ICAgIC8qIHRvdGFsIGlucHV0IEhCLUFDSyBjaHVua3MgICovCisJdWludDMy
X3QgIHNjdHBzX3JlY3ZlY25lOyAgICAgICAgICAgIC8qIHRvdGFsIGlucHV0IEVDTkUgY2h1bmtz
ICAgICovCisJdWludDMyX3QgIHNjdHBzX3JlY3ZhdXRoOyAgICAgICAgICAgIC8qIHRvdGFsIGlu
cHV0IEFVVEggY2h1bmtzICAgICovCisJdWludDMyX3QgIHNjdHBzX3JlY3ZhdXRobWlzc2luZzsg
ICAgIC8qIHRvdGFsIGlucHV0IGNodW5rcyBtaXNzaW5nIEFVVEggKi8KKwl1aW50MzJfdCAgc2N0
cHNfcmVjdml2YWxobWFjaWQ7ICAgICAgLyogdG90YWwgbnVtYmVyIG9mIGludmFsaWQgSE1BQyBp
ZHMgcmVjZWl2ZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVjdml2YWxrZXlpZDsgICAgICAgLyog
dG90YWwgbnVtYmVyIG9mIGludmFsaWQgc2VjcmV0IGlkcyByZWNlaXZlZCAqLworCXVpbnQzMl90
ICBzY3Rwc19yZWN2YXV0aGZhaWxlZDsgICAgICAvKiB0b3RhbCBudW1iZXIgb2YgYXV0aCBmYWls
ZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVjdmV4cHJlc3M7ICAgICAgICAgLyogdG90YWwgZmFz
dCBwYXRoIHJlY2VpdmVzIGFsbCBvbmUgY2h1bmsgKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVjdmV4
cHJlc3NtOyAgICAgICAgLyogdG90YWwgZmFzdCBwYXRoIG11bHRpLXBhcnQgZGF0YSAqLworCXVp
bnQzMl90ICBzY3Rwc19yZWN2X3NwYXJlOyAgICAgICAgICAvKiBmb3JtZXJseSBzY3Rwc19yZWN2
bm9jcmMgKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVjdnN3Y3JjOworCXVpbnQzMl90ICBzY3Rwc19y
ZWN2aHdjcmM7CisKKwkvKiBvdXRwdXQgc3RhdGlzdGljczogKi8KKwl1aW50MzJfdCAgc2N0cHNf
c2VuZHBhY2tldHM7ICAgICAgICAgLyogdG90YWwgb3V0cHV0IHBhY2tldHMgICAgICAgKi8KKwl1
aW50MzJfdCAgc2N0cHNfc2VuZHNhY2tzOyAgICAgICAgICAgLyogdG90YWwgb3V0cHV0IFNBQ0tz
ICAgICAgICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfc2VuZGRhdGE7ICAgICAgICAgICAgLyogdG90
YWwgb3V0cHV0IERBVEEgY2h1bmtzICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfc2VuZHJldHJhbnNk
YXRhOyAgICAgLyogdG90YWwgb3V0cHV0IHJldHJhbnNtaXR0ZWQgREFUQSBjaHVua3MgKi8KKwl1
aW50MzJfdCAgc2N0cHNfc2VuZGZhc3RyZXRyYW5zOyAgICAgLyogdG90YWwgb3V0cHV0IGZhc3Qg
cmV0cmFuc21pdHRlZCBEQVRBIGNodW5rcyAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kbXVsdGZh
c3RyZXRyYW5zOyAvKiB0b3RhbCBGUidzIHRoYXQgaGFwcGVuZWQgbW9yZSB0aGFuIG9uY2UKKwkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdG8gc2FtZSBjaHVuayAodS1k
ZWwgbXVsdGktZnIgYWxnbykuCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kaGVhcnRiZWF0OyAgICAgICAvKiB0b3RhbCBvdXRw
dXQgSEIgY2h1bmtzICAgICAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kZWNuZTsgICAgICAgICAg
ICAvKiB0b3RhbCBvdXRwdXQgRUNORSBjaHVua3MgICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfc2Vu
ZGF1dGg7ICAgICAgICAgICAgLyogdG90YWwgb3V0cHV0IEFVVEggY2h1bmtzIEZJWE1FICAgKi8K
Kwl1aW50MzJfdCAgc2N0cHNfc2VuZGVycm9yczsgICAgICAgICAgLyogaXBfb3V0cHV0IGVycm9y
IGNvdW50ZXIgKi8KKwl1aW50MzJfdCAgc2N0cHNfc2VuZF9zcGFyZTsgICAgICAgICAgLyogZm9y
bWVybHkgc2N0cHNfc2VuZG5vY3JjICovCisJdWludDMyX3QgIHNjdHBzX3NlbmRzd2NyYzsKKwl1
aW50MzJfdCAgc2N0cHNfc2VuZGh3Y3JjOworCS8qIFBDS0RST1BSRVAgc3RhdGlzdGljczogKi8K
Kwl1aW50MzJfdCAgc2N0cHNfcGRycGZtYm94OyAgICAgICAgICAgLyogUGFja2V0IGRyb3AgZnJv
bSBtaWRkbGUgYm94ICovCisJdWludDMyX3QgIHNjdHBzX3BkcnBmZWhvczsgICAgICAgICAgIC8q
IFAtZHJvcCBmcm9tIGVuZCBob3N0ICovCisJdWludDMyX3QgIHNjdHBzX3BkcnBtYmRhOyAgICAg
ICAgICAgIC8qIFAtZHJvcHMgd2l0aCBkYXRhICovCisJdWludDMyX3QgIHNjdHBzX3BkcnBtYmN0
OyAgICAgICAgICAgIC8qIFAtZHJvcHMsIG5vbi1kYXRhLCBub24tZW5kaG9zdCAqLworCXVpbnQz
Ml90ICBzY3Rwc19wZHJwYndycHQ7ICAgICAgICAgICAvKiBQLWRyb3AsIG5vbi1lbmRob3N0LCBi
YW5kd2lkdGggcmVwIG9ubHkgKi8KKwl1aW50MzJfdCAgc2N0cHNfcGRycGNydXB0OyAgICAgICAg
ICAgLyogUC1kcm9wLCBub3QgZW5vdWdoIGZvciBjaHVuayBoZWFkZXIgKi8KKwl1aW50MzJfdCAg
c2N0cHNfcGRycG5lZGF0OyAgICAgICAgICAgLyogUC1kcm9wLCBub3QgZW5vdWdoIGRhdGEgdG8g
Y29uZmlybSAqLworCXVpbnQzMl90ICBzY3Rwc19wZHJwcGRicms7ICAgICAgICAgICAvKiBQLWRy
b3AsIHdoZXJlIHByb2Nlc3NfY2h1bmtfZHJvcCBzYWlkIGJyZWFrICovCisJdWludDMyX3QgIHNj
dHBzX3BkcnB0c25uZjsgICAgICAgICAgIC8qIFAtZHJvcCwgY291bGQgbm90IGZpbmQgVFNOICov
CisJdWludDMyX3QgIHNjdHBzX3BkcnBkbmZuZDsgICAgICAgICAgIC8qIFAtZHJvcCwgYXR0ZW1w
dCByZXZlcnNlIFRTTiBsb29rdXAgKi8KKwl1aW50MzJfdCAgc2N0cHNfcGRycGRpd25wOyAgICAg
ICAgICAgLyogUC1kcm9wLCBlLWhvc3QgY29uZmlybXMgemVyby1yd25kICovCisJdWludDMyX3Qg
IHNjdHBzX3BkcnBkaXpydzsgICAgICAgICAgIC8qIFAtZHJvcCwgbWlkYm94IGNvbmZpcm1zIG5v
IHNwYWNlICovCisJdWludDMyX3QgIHNjdHBzX3BkcnBiYWRkOyAgICAgICAgICAgIC8qIFAtZHJv
cCwgZGF0YSBkaWQgbm90IG1hdGNoIFRTTiAqLworCXVpbnQzMl90ICBzY3Rwc19wZHJwbWFyazsg
ICAgICAgICAgICAvKiBQLWRyb3AsIFRTTidzIG1hcmtlZCBmb3IgRmFzdCBSZXRyYW4gKi8KKwkv
KiB0aW1lb3V0cyAqLworCXVpbnQzMl90ICBzY3Rwc190aW1vaXRlcmF0b3I7ICAgICAgICAvKiBO
dW1iZXIgb2YgaXRlcmF0b3IgdGltZXJzIHRoYXQgZmlyZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNf
dGltb2RhdGE7ICAgICAgICAgICAgLyogTnVtYmVyIG9mIFQzIGRhdGEgdGltZSBvdXRzICovCisJ
dWludDMyX3QgIHNjdHBzX3RpbW93aW5kb3dwcm9iZTsgICAgIC8qIE51bWJlciBvZiB3aW5kb3cg
cHJvYmUgKFQzKSB0aW1lcnMgdGhhdCBmaXJlZCAqLworCXVpbnQzMl90ICBzY3Rwc190aW1vaW5p
dDsgICAgICAgICAgICAvKiBOdW1iZXIgb2YgSU5JVCB0aW1lcnMgdGhhdCBmaXJlZCAqLworCXVp
bnQzMl90ICBzY3Rwc190aW1vc2FjazsgICAgICAgICAgICAvKiBOdW1iZXIgb2Ygc2FjayB0aW1l
cnMgdGhhdCBmaXJlZCAqLworCXVpbnQzMl90ICBzY3Rwc190aW1vc2h1dGRvd247ICAgICAgICAv
KiBOdW1iZXIgb2Ygc2h1dGRvd24gdGltZXJzIHRoYXQgZmlyZWQgKi8KKwl1aW50MzJfdCAgc2N0
cHNfdGltb2hlYXJ0YmVhdDsgICAgICAgLyogTnVtYmVyIG9mIGhlYXJ0YmVhdCB0aW1lcnMgdGhh
dCBmaXJlZCAqLworCXVpbnQzMl90ICBzY3Rwc190aW1vY29va2llOyAgICAgICAgICAvKiBOdW1i
ZXIgb2YgdGltZXMgYSBjb29raWUgdGltZW91dCBmaXJlZCAqLworCXVpbnQzMl90ICBzY3Rwc190
aW1vc2VjcmV0OyAgICAgICAgICAvKiBOdW1iZXIgb2YgdGltZXMgYW4gZW5kcG9pbnQgY2hhbmdl
ZCBpdHMgY29va2llIHNlY3JldCovCisJdWludDMyX3QgIHNjdHBzX3RpbW9wYXRobXR1OyAgICAg
ICAgIC8qIE51bWJlciBvZiBQTVRVIHRpbWVycyB0aGF0IGZpcmVkICovCisJdWludDMyX3QgIHNj
dHBzX3RpbW9zaHV0ZG93bmFjazsgICAgIC8qIE51bWJlciBvZiBzaHV0ZG93biBhY2sgdGltZXJz
IHRoYXQgZmlyZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfdGltb3NodXRkb3duZ3VhcmQ7ICAgLyog
TnVtYmVyIG9mIHNodXRkb3duIGd1YXJkIHRpbWVycyB0aGF0IGZpcmVkICovCisJdWludDMyX3Qg
IHNjdHBzX3RpbW9zdHJtcnN0OyAgICAgICAgIC8qIE51bWJlciBvZiBzdHJlYW0gcmVzZXQgdGlt
ZXJzIHRoYXQgZmlyZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfdGltb2Vhcmx5ZnI7ICAgICAgICAg
LyogTnVtYmVyIG9mIGVhcmx5IEZSIHRpbWVycyB0aGF0IGZpcmVkICovCisJdWludDMyX3QgIHNj
dHBzX3RpbW9hc2NvbmY7ICAgICAgICAgIC8qIE51bWJlciBvZiB0aW1lcyBhbiBhc2NvbmYgdGlt
ZXIgZmlyZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfdGltb2RlbHByaW07CSAgICAgLyogTnVtYmVy
IG9mIHRpbWVzIGEgcHJpbV9kZWxldGVkIHRpbWVyIGZpcmVkICovCisJdWludDMyX3QgIHNjdHBz
X3RpbW9hdXRvY2xvc2U7ICAgICAgIC8qIE51bWJlciBvZiB0aW1lcyBhdXRvIGNsb3NlIHRpbWVy
IGZpcmVkICovCisJdWludDMyX3QgIHNjdHBzX3RpbW9hc3NvY2tpbGw7ICAgICAgIC8qIE51bWJl
ciBvZiBhc29jIGZyZWUgdGltZXJzIGV4cGlyZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfdGltb2lu
cGtpbGw7ICAgICAgICAgLyogTnVtYmVyIG9mIGlucCBmcmVlIHRpbWVycyBleHBpcmVkICovCisJ
LyogZm9ybWVyIGVhcmx5IEZSIGNvdW50ZXJzICovCisJdWludDMyX3QgIHNjdHBzX3NwYXJlWzEx
XTsKKwkvKiBvdGhlcnMgKi8KKwl1aW50MzJfdCAgc2N0cHNfaGRyb3BzOyAgICAgICAgICAgICAg
LyogcGFja2V0IHNob3J0ZXIgdGhhbiBoZWFkZXIgKi8KKwl1aW50MzJfdCAgc2N0cHNfYmFkc3Vt
OyAgICAgICAgICAgICAgLyogY2hlY2tzdW0gZXJyb3IgICAgICAgICAgICAgKi8KKwl1aW50MzJf
dCAgc2N0cHNfbm9wb3J0OyAgICAgICAgICAgICAgLyogbm8gZW5kcG9pbnQgZm9yIHBvcnQgICAg
ICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfYmFkdnRhZzsgICAgICAgICAgICAgLyogYmFkIHYtdGFn
ICAgICAgICAgICAgICAgICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfYmFkc2lkOyAgICAgICAgICAg
ICAgLyogYmFkIFNJRCAgICAgICAgICAgICAgICAgICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfbm9t
ZW07ICAgICAgICAgICAgICAgLyogbm8gbWVtb3J5ICAgICAgICAgICAgICAgICAgKi8KKwl1aW50
MzJfdCAgc2N0cHNfZmFzdHJldHJhbnNpbnJ0dDsgICAgLyogbnVtYmVyIG9mIG11bHRpcGxlIEZS
IGluIGEgUlRUIHdpbmRvdyAqLworCXVpbnQzMl90ICBzY3Rwc19tYXJrZWRyZXRyYW5zOworCXVp
bnQzMl90ICBzY3Rwc19uYWdsZXNlbnQ7ICAgICAgICAgICAvKiBuYWdsZSBhbGxvd2VkIHNlbmRp
bmcgICAgICAqLworCXVpbnQzMl90ICBzY3Rwc19uYWdsZXF1ZXVlZDsgICAgICAgICAvKiBuYWds
ZSBkb2Vzbid0IGFsbG93IHNlbmRpbmcgKi8KKwl1aW50MzJfdCAgc2N0cHNfbWF4YnVyc3RxdWV1
ZWQ7ICAgICAgLyogbWF4IGJ1cnN0IGRvZXNuJ3QgYWxsb3cgc2VuZGluZyAqLworCXVpbnQzMl90
ICBzY3Rwc19pZm5vbWVtcXVldWVkOyAgICAgICAvKiBsb29rIGFoZWFkIHRlbGxzIHVzIG5vIG1l
bW9yeSBpbgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbnRlcmZh
Y2UgcmluZyBidWZmZXIgT1Igd2UgaGFkIGEKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICogc2VuZCBlcnJvciBhbmQgYXJlIHF1ZXVpbmcgb25lIHNlbmQuCisJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVpbnQzMl90ICBzY3Rwc193aW5k
b3dwcm9iZWQ7ICAgICAgICAvKiB0b3RhbCBudW1iZXIgb2Ygd2luZG93IHByb2JlcyBzZW50ICov
CisJdWludDMyX3QgIHNjdHBzX2xvd2xldmVsZXJyOyAgICAgICAgIC8qIHRvdGFsIHRpbWVzIGFu
IG91dHB1dCBlcnJvciBjYXVzZXMgdXMKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICogdG8gY2xhbXAgZG93biBvbiBuZXh0IHVzZXIgc2VuZC4KKwkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdWludDMyX3QgIHNjdHBzX2xvd2xldmVsZXJy
dXNyOyAgICAgIC8qIHRvdGFsIHRpbWVzIHNjdHBfc2VuZGVycm9ycyB3ZXJlIGNhdXNlZCBmcm9t
CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGEgdXNlciBzZW5kIGZy
b20gYSB1c2VyIGludm9rZWQgc2VuZCBub3QKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICogYSBzYWNrIHJlc3BvbnNlCisJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqLworCXVpbnQzMl90ICBzY3Rwc19kYXRhZHJvcGNoa2xtdDsgICAgICAvKiBO
dW1iZXIgb2YgaW4gZGF0YSBkcm9wcyBkdWUgdG8gY2h1bmsgbGltaXQgcmVhY2hlZCAqLworCXVp
bnQzMl90ICBzY3Rwc19kYXRhZHJvcHJ3bmQ7ICAgICAgICAvKiBOdW1iZXIgb2YgaW4gZGF0YSBk
cm9wcyBkdWUgdG8gcnduZCBsaW1pdCByZWFjaGVkICovCisJdWludDMyX3QgIHNjdHBzX2VjbmVy
ZWR1Y2VkY3duZDsgICAgIC8qIE51bWJlciBvZiB0aW1lcyBhIEVDTiByZWR1Y2VkIHRoZSBjd25k
ICovCisJdWludDMyX3QgIHNjdHBzX3Z0YWdleHByZXNzOyAgICAgICAgIC8qIFVzZWQgZXhwcmVz
cyBsb29rdXAgdmlhIHZ0YWcgKi8KKwl1aW50MzJfdCAgc2N0cHNfdnRhZ2JvZ3VzOyAgICAgICAg
ICAgLyogQ29sbGlzaW9uIGluIGV4cHJlc3MgbG9va3VwLiAqLworCXVpbnQzMl90ICBzY3Rwc19w
cmltYXJ5X3JhbmRyeTsgICAgICAvKiBOdW1iZXIgb2YgdGltZXMgdGhlIHNlbmRlciByYW4gZHJ5
IG9mIHVzZXIgZGF0YSBvbiBwcmltYXJ5ICovCisJdWludDMyX3QgIHNjdHBzX2NtdF9yYW5kcnk7
ICAgICAgICAgIC8qIFNhbWUgZm9yIGFib3ZlICovCisJdWludDMyX3QgIHNjdHBzX3Nsb3dwYXRo
X3NhY2s7ICAgICAgIC8qIFNhY2tzIHRoZSBzbG93IHdheSAqLworCXVpbnQzMl90ICBzY3Rwc193
dV9zYWNrc19zZW50OyAgICAgICAvKiBXaW5kb3cgVXBkYXRlIG9ubHkgc2Fja3Mgc2VudCAqLwor
CXVpbnQzMl90ICBzY3Rwc19zZW5kc193aXRoX2ZsYWdzOyAgICAvKiBudW1iZXIgb2Ygc2VuZHMg
d2l0aCBzaW5mb19mbGFncyAhPTAgKi8KKwl1aW50MzJfdCAgc2N0cHNfc2VuZHNfd2l0aF91bm9y
ZDsgICAgLyogbnVtYmVyIG9mIHVub3JkZXJlZCBzZW5kcyAqLworCXVpbnQzMl90ICBzY3Rwc19z
ZW5kc193aXRoX2VvZjsgICAgICAvKiBudW1iZXIgb2Ygc2VuZHMgd2l0aCBFT0YgZmxhZyBzZXQg
Ki8KKwl1aW50MzJfdCAgc2N0cHNfc2VuZHNfd2l0aF9hYm9ydDsgICAgLyogbnVtYmVyIG9mIHNl
bmRzIHdpdGggQUJPUlQgZmxhZyBzZXQgKi8KKwl1aW50MzJfdCAgc2N0cHNfcHJvdG9jb2xfZHJh
aW5fY2FsbHM7LyogbnVtYmVyIG9mIHRpbWVzIHByb3RvY29sIGRyYWluIGNhbGxlZCAqLworCXVp
bnQzMl90ICBzY3Rwc19wcm90b2NvbF9kcmFpbnNfZG9uZTsvKiBudW1iZXIgb2YgdGltZXMgd2Ug
ZGlkIGEgcHJvdG9jb2wgZHJhaW4gKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVhZF9wZWVrczsgICAg
ICAgICAgLyogTnVtYmVyIG9mIHRpbWVzIHJlY3Ygd2FzIGNhbGxlZCB3aXRoIHBlZWsgKi8KKwl1
aW50MzJfdCAgc2N0cHNfY2FjaGVkX2NoazsgICAgICAgICAgLyogTnVtYmVyIG9mIGNhY2hlZCBj
aHVua3MgdXNlZCAqLworCXVpbnQzMl90ICBzY3Rwc19jYWNoZWRfc3RybW9xOyAgICAgICAvKiBO
dW1iZXIgb2YgY2FjaGVkIHN0cmVhbSBvcSdzIHVzZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfbGVm
dF9hYmFuZG9uOyAgICAgICAgLyogTnVtYmVyIG9mIHVucmVhZCBtZXNzYWdlcyBhYmFuZG9uZWQg
YnkgY2xvc2UgKi8KKwl1aW50MzJfdCAgc2N0cHNfc2VuZF9idXJzdF9hdm9pZDsgICAgLyogVW51
c2VkICovCisJdWludDMyX3QgIHNjdHBzX3NlbmRfY3duZF9hdm9pZDsgICAgIC8qIFNlbmQgY3du
ZCBmdWxsICBhdm9pZGFuY2UsIGFscmVhZHkgbWF4IGJ1cnN0IGluZmxpZ2h0IHRvIG5ldCAqLwor
CXVpbnQzMl90ICBzY3Rwc19md2R0c25fbWFwX292ZXI7ICAgICAvKiBudW1iZXIgb2YgbWFwIGFy
cmF5IG92ZXItcnVucyB2aWEgZndkLXRzbidzICovCisJdWludDMyX3QgIHNjdHBzX3F1ZXVlX3Vw
ZF9lY25lOyAgICAgIC8qIE51bWJlciBvZiB0aW1lcyB3ZSBxdWV1ZWQgb3IgdXBkYXRlZCBhbiBF
Q04gY2h1bmsgb24gc2VuZCBxdWV1ZSAqLworCXVpbnQzMl90ICBzY3Rwc19yZXNlcnZlZFszMV07
ICAgICAgICAvKiBGdXR1cmUgQUJJIGNvbXBhdCAtIHJlbW92ZSBpbnQncyBmcm9tIGhlcmUgd2hl
biBhZGRpbmcgbmV3ICovCit9OworCit2b2lkCit1c3JzY3RwX2dldF9zdGF0KHN0cnVjdCBzY3Rw
c3RhdCAqKTsKKworI2lmZGVmIF9XSU4zMgorI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5p
bmcoZGVmYXVsdDogNDIwMCkKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgIF9fY3BsdXNwbHVzCit9
CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvbmV0L2Rjc2N0cC9wYWNrZXQvY3JjMzJjLmNjIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbmV0L2Rjc2N0cC9wYWNrZXQvY3JjMzJjLmNj
CmluZGV4IDU2ZDcwMzNiOTAzOC4uMmZlNTgwZmJiZDMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9uZXQvZGNzY3RwL3BhY2tldC9jcmMzMmMu
Y2MKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbmV0L2Rj
c2N0cC9wYWNrZXQvY3JjMzJjLmNjCkBAIC0xNCw4ICsxNCw3IEBACiAjaWYgIWRlZmluZWQoV0VC
UlRDX1dFQktJVF9CVUlMRCkKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jcmMzMmMvc3JjL2luY2x1
ZGUvY3JjMzJjL2NyYzMyYy5oIgogI2Vsc2UKLWV4dGVybiAiQyIgdWludDMyX3QgY2FsY3VsYXRl
X2NyYzMyYyh1aW50MzJfdCwgY29uc3QgdW5zaWduZWQgY2hhciosIHVuc2lnbmVkIGludCk7Ci1l
eHRlcm4gIkMiIHVpbnQzMl90IHNjdHBfZmluYWxpemVfY3JjMzJjKHVpbnQzMl90KTsKKyNpbmNs
dWRlICJ0aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c3JzY3RwLmgi
CiAjZW5kaWYKIAogbmFtZXNwYWNlIGRjc2N0cCB7CkBAIC0yNCw4ICsyMyw3IEBAIHVpbnQzMl90
IEdlbmVyYXRlQ3JjMzJDKHJ0Yzo6QXJyYXlWaWV3PGNvbnN0IHVpbnQ4X3Q+IGRhdGEpIHsKICNp
ZiAhZGVmaW5lZChXRUJSVENfV0VCS0lUX0JVSUxEKQogICB1aW50MzJfdCBjcmMzMmMgPSBjcmMz
MmNfdmFsdWUoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKICNlbHNlCi0gIHVpbnQzMl90IGNy
YzMyYyA9IGNhbGN1bGF0ZV9jcmMzMmMoMHhmZmZmZmZmZiwgY29uc3RfY2FzdDx1aW50OF90Kj4o
ZGF0YS5kYXRhKCkpLCAodW5zaWduZWQgaW50KWRhdGEuc2l6ZSgpKTsKLSAgY3JjMzJjID0gc2N0
cF9maW5hbGl6ZV9jcmMzMmMoY3JjMzJjKTsKKyAgdWludDMyX3QgY3JjMzJjID0gdXNyc2N0cF9j
cmMzMmMoY29uc3RfY2FzdDx1aW50OF90Kj4oZGF0YS5kYXRhKCkpLCBkYXRhLnNpemUoKSk7CiAj
ZW5kaWYKIAogICAvLyBCeXRlIHN3YXBwaW5nIGZvciBsaXR0bGUgZW5kaWFuIGJ5dGUgb3JkZXI6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9u
ZXQvZGNzY3RwL3BhY2tldC9zY3RwX2NyYzMyLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9uZXQvZGNzY3RwL3BhY2tldC9zY3RwX2NyYzMyLmMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNzU1CmluZGV4IDg3ZTc2ODJiYTg1Mi4uMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL25ldC9kY3NjdHAvcGFja2V0
L3NjdHBfY3JjMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDczMiArMCwwIEBACi0vKi0KLSAqIFNQ
RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKLSAqCi0gKiBDb3B5cmlnaHQgKGMp
IDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhl
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUgbWV0OgotICoKLSAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAqICAgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiBiKSBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluCi0gKiAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIGMpIE5laXRoZXIgdGhl
IG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCi0gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCi0gKiBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0KLS8q
KgotICoKLSAqIFJvdXRpbmUgRGVzY3JpcHRpb246Ci0gKgotICogQ29tcHV0ZXMgdGhlIENSQzMy
YyBjaGVja3N1bSBmb3IgdGhlIHNwZWNpZmllZCBidWZmZXIgdXNpbmcgdGhlIHNsaWNpbmcgYnkg
OAotICogYWxnb3JpdGhtIG92ZXIgNjQgYml0IHF1YW50aXRpZXMuCi0gKgotICogQXJndW1lbnRz
OgotICoKLSAqCQlwX3J1bm5pbmdfY3JjIC0gcG9pbnRlciB0byB0aGUgaW5pdGlhbCBvciBmaW5h
bCByZW1haW5kZXIgdmFsdWUKLSAqCQkJCXVzZWQgaW4gQ1JDIGNvbXB1dGF0aW9ucy4gSXQgc2hv
dWxkIGJlIHNldCB0bwotICoJCQkJbm9uLU5VTEwgaWYgdGhlIG1vZGUgYXJndW1lbnQgaXMgZXF1
YWwgdG8gQ09OVCBvciBFTkQKLSAqCQlwX2J1ZiAtIHRoZSBwYWNrZXQgYnVmZmVyIHdoZXJlIGNy
YyBjb21wdXRhdGlvbnMgYXJlIGJlaW5nIHBlcmZvcm1lZAotICoJCWxlbmd0aCAtIHRoZSBsZW5n
dGggb2YgcF9idWYgaW4gYnl0ZXMKLSAqCQlpbml0X2J5dGVzIC0gdGhlIG51bWJlciBvZiBpbml0
aWFsIGJ5dGVzIHRoYXQgbmVlZCB0byBiZSBwcm9jZXNlZCBiZWZvcmUKLSAqCQkJCQkgYWxpZ25p
bmcgcF9idWYgdG8gbXVsdGlwbGVzIG9mIDQgYnl0ZXMKLSAqCQltb2RlIC0gY2FuIGJlIGFueSBv
ZiB0aGUgZm9sbG93aW5nOiBCRUdJTiwgQ09OVCwgRU5ELCBCT0RZLCBBTElHTgotICoKLSAqIFJl
dHVybiB2YWx1ZToKLSAqCi0gKgkJVGhlIGNvbXB1dGVkIENSQzMyYyB2YWx1ZQotICovCi0KLQot
LyoKLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA2IEludGVsIENvcnBvcmF0aW9uIC0gQWxsIFJp
Z2h0cyBSZXNlcnZlZAotICoKLSAqCi0gKiBUaGlzIHNvZnR3YXJlIHByb2dyYW0gaXMgbGljZW5z
ZWQgc3ViamVjdCB0byB0aGUgQlNEIExpY2Vuc2UsIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3
dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5odG1sLgotICoKLSAqIEFic3Ry
YWN0OgotICoKLSAqIFRhYmxlcyBmb3Igc29mdHdhcmUgQ1JDIGdlbmVyYXRpb24KLSAqLwotCi0v
KgotICogVGhlIGZvbGxvd2luZyBDUkMgbG9va3VwIHRhYmxlIHdhcyBnZW5lcmF0ZWQgYXV0b21h
Z2ljYWxseSB1c2luZyB0aGUKLSAqIGZvbGxvd2luZyBtb2RlbCBwYXJhbWV0ZXJzOgotICoKLSAq
IEdlbmVyYXRvciBQb2x5bm9taWFsID0gLi4uLi4uLi4uLi4uLi4uLi4gMHgxRURDNkY0MQotICog
R2VuZXJhdG9yIFBvbHlub21pYWwgTGVuZ3RoID0gLi4uLi4uLi4uLiAzMiBiaXRzCi0gKiBSZWZs
ZWN0ZWQgQml0cyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIFRSVUUKLSAqIFRhYmxlIEdlbmVy
YXRpb24gT2Zmc2V0ID0gLi4uLi4uLi4uLi4uLi4gMzIgYml0cwotICogTnVtYmVyIG9mIFNsaWNl
cyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4IHNsaWNlcwotICogU2xpY2UgTGVuZ3RocyA9IC4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4IDggOCA4IDggOCA4IDgKLSAqIERpcmVjdG9yeSBOYW1l
ID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLlwKLSAqIEZpbGUgTmFtZSA9IC4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4gOHgyNTZfdGFibGVzLmMKLSAqLwotCi1zdGF0aWMgY29uc3QgdWlu
dDMyX3Qgc2N0cF9jcmNfdGFibGVpbDhfbzMyWzI1Nl0gPQotewotCTB4MDAwMDAwMDAsIDB4RjI2
QjgzMDMsIDB4RTEzQjcwRjcsIDB4MTM1MEYzRjQsIDB4Qzc5QTk3MUYsIDB4MzVGMTE0MUMsIDB4
MjZBMUU3RTgsIDB4RDRDQTY0RUIsCi0JMHg4QUQ5NThDRiwgMHg3OEIyREJDQywgMHg2QkUyMjgz
OCwgMHg5OTg5QUIzQiwgMHg0RDQzQ0ZEMCwgMHhCRjI4NENEMywgMHhBQzc4QkYyNywgMHg1RTEz
M0MyNCwKLQkweDEwNUVDNzZGLCAweEUyMzU0NDZDLCAweEYxNjVCNzk4LCAweDAzMEUzNDlCLCAw
eEQ3QzQ1MDcwLCAweDI1QUZEMzczLCAweDM2RkYyMDg3LCAweEM0OTRBMzg0LAotCTB4OUE4NzlG
QTAsIDB4NjhFQzFDQTMsIDB4N0JCQ0VGNTcsIDB4ODlENzZDNTQsIDB4NUQxRDA4QkYsIDB4QUY3
NjhCQkMsIDB4QkMyNjc4NDgsIDB4NEU0REZCNEIsCi0JMHgyMEJEOEVERSwgMHhEMkQ2MERERCwg
MHhDMTg2RkUyOSwgMHgzM0VEN0QyQSwgMHhFNzI3MTlDMSwgMHgxNTRDOUFDMiwgMHgwNjFDNjkz
NiwgMHhGNDc3RUEzNSwKLQkweEFBNjRENjExLCAweDU4MEY1NTEyLCAweDRCNUZBNkU2LCAweEI5
MzQyNUU1LCAweDZERkU0MTBFLCAweDlGOTVDMjBELCAweDhDQzUzMUY5LCAweDdFQUVCMkZBLAot
CTB4MzBFMzQ5QjEsIDB4QzI4OENBQjIsIDB4RDFEODM5NDYsIDB4MjNCM0JBNDUsIDB4Rjc3OURF
QUUsIDB4MDUxMjVEQUQsIDB4MTY0MkFFNTksIDB4RTQyOTJENUEsCi0JMHhCQTNBMTE3RSwgMHg0
ODUxOTI3RCwgMHg1QjAxNjE4OSwgMHhBOTZBRTI4QSwgMHg3REEwODY2MSwgMHg4RkNCMDU2Miwg
MHg5QzlCRjY5NiwgMHg2RUYwNzU5NSwKLQkweDQxN0IxREJDLCAweEIzMTA5RUJGLCAweEEwNDA2
RDRCLCAweDUyMkJFRTQ4LCAweDg2RTE4QUEzLCAweDc0OEEwOUEwLCAweDY3REFGQTU0LCAweDk1
QjE3OTU3LAotCTB4Q0JBMjQ1NzMsIDB4MzlDOUM2NzAsIDB4MkE5OTM1ODQsIDB4RDhGMkI2ODcs
IDB4MEMzOEQyNkMsIDB4RkU1MzUxNkYsIDB4RUQwM0EyOUIsIDB4MUY2ODIxOTgsCi0JMHg1MTI1
REFEMywgMHhBMzRFNTlEMCwgMHhCMDFFQUEyNCwgMHg0Mjc1MjkyNywgMHg5NkJGNERDQywgMHg2
NEQ0Q0VDRiwgMHg3Nzg0M0QzQiwgMHg4NUVGQkUzOCwKLQkweERCRkM4MjFDLCAweDI5OTcwMTFG
LCAweDNBQzdGMkVCLCAweEM4QUM3MUU4LCAweDFDNjYxNTAzLCAweEVFMEQ5NjAwLCAweEZENUQ2
NUY0LCAweDBGMzZFNkY3LAotCTB4NjFDNjkzNjIsIDB4OTNBRDEwNjEsIDB4ODBGREUzOTUsIDB4
NzI5NjYwOTYsIDB4QTY1QzA0N0QsIDB4NTQzNzg3N0UsIDB4NDc2Nzc0OEEsIDB4QjUwQ0Y3ODks
Ci0JMHhFQjFGQ0JBRCwgMHgxOTc0NDhBRSwgMHgwQTI0QkI1QSwgMHhGODRGMzg1OSwgMHgyQzg1
NUNCMiwgMHhERUVFREZCMSwgMHhDREJFMkM0NSwgMHgzRkQ1QUY0NiwKLQkweDcxOTg1NDBELCAw
eDgzRjNENzBFLCAweDkwQTMyNEZBLCAweDYyQzhBN0Y5LCAweEI2MDJDMzEyLCAweDQ0Njk0MDEx
LCAweDU3MzlCM0U1LCAweEE1NTIzMEU2LAotCTB4RkI0MTBDQzIsIDB4MDkyQThGQzEsIDB4MUE3
QTdDMzUsIDB4RTgxMUZGMzYsIDB4M0NEQjlCREQsIDB4Q0VCMDE4REUsIDB4RERFMEVCMkEsIDB4
MkY4QjY4MjksCi0JMHg4MkY2M0I3OCwgMHg3MDlEQjg3QiwgMHg2M0NENEI4RiwgMHg5MUE2Qzg4
QywgMHg0NTZDQUM2NywgMHhCNzA3MkY2NCwgMHhBNDU3REM5MCwgMHg1NjNDNUY5MywKLQkweDA4
MkY2M0I3LCAweEZBNDRFMEI0LCAweEU5MTQxMzQwLCAweDFCN0Y5MDQzLCAweENGQjVGNEE4LCAw
eDNEREU3N0FCLCAweDJFOEU4NDVGLCAweERDRTUwNzVDLAotCTB4OTJBOEZDMTcsIDB4NjBDMzdG
MTQsIDB4NzM5MzhDRTAsIDB4ODFGODBGRTMsIDB4NTUzMjZCMDgsIDB4QTc1OUU4MEIsIDB4QjQw
OTFCRkYsIDB4NDY2Mjk4RkMsCi0JMHgxODcxQTREOCwgMHhFQTFBMjdEQiwgMHhGOTRBRDQyRiwg
MHgwQjIxNTcyQywgMHhERkVCMzNDNywgMHgyRDgwQjBDNCwgMHgzRUQwNDMzMCwgMHhDQ0JCQzAz
MywKLQkweEEyNEJCNUE2LCAweDUwMjAzNkE1LCAweDQzNzBDNTUxLCAweEIxMUI0NjUyLCAweDY1
RDEyMkI5LCAweDk3QkFBMUJBLCAweDg0RUE1MjRFLCAweDc2ODFEMTRELAotCTB4Mjg5MkVENjks
IDB4REFGOTZFNkEsIDB4QzlBOTlEOUUsIDB4M0JDMjFFOUQsIDB4RUYwODdBNzYsIDB4MUQ2M0Y5
NzUsIDB4MEUzMzBBODEsIDB4RkM1ODg5ODIsCi0JMHhCMjE1NzJDOSwgMHg0MDdFRjFDQSwgMHg1
MzJFMDIzRSwgMHhBMTQ1ODEzRCwgMHg3NThGRTVENiwgMHg4N0U0NjZENSwgMHg5NEI0OTUyMSwg
MHg2NkRGMTYyMiwKLQkweDM4Q0MyQTA2LCAweENBQTdBOTA1LCAweEQ5Rjc1QUYxLCAweDJCOUNE
OUYyLCAweEZGNTZCRDE5LCAweDBEM0QzRTFBLCAweDFFNkRDREVFLCAweEVDMDY0RUVELAotCTB4
QzM4RDI2QzQsIDB4MzFFNkE1QzcsIDB4MjJCNjU2MzMsIDB4RDBEREQ1MzAsIDB4MDQxN0IxREIs
IDB4RjY3QzMyRDgsIDB4RTUyQ0MxMkMsIDB4MTc0NzQyMkYsCi0JMHg0OTU0N0UwQiwgMHhCQjNG
RkQwOCwgMHhBODZGMEVGQywgMHg1QTA0OERGRiwgMHg4RUNFRTkxNCwgMHg3Q0E1NkExNywgMHg2
RkY1OTlFMywgMHg5RDlFMUFFMCwKLQkweEQzRDNFMUFCLCAweDIxQjg2MkE4LCAweDMyRTg5MTVD
LCAweEMwODMxMjVGLCAweDE0NDk3NkI0LCAweEU2MjJGNUI3LCAweEY1NzIwNjQzLCAweDA3MTk4
NTQwLAotCTB4NTkwQUI5NjQsIDB4QUI2MTNBNjcsIDB4QjgzMUM5OTMsIDB4NEE1QTRBOTAsIDB4
OUU5MDJFN0IsIDB4NkNGQkFENzgsIDB4N0ZBQjVFOEMsIDB4OERDMEREOEYsCi0JMHhFMzMwQTgx
QSwgMHgxMTVCMkIxOSwgMHgwMjBCRDhFRCwgMHhGMDYwNUJFRSwgMHgyNEFBM0YwNSwgMHhENkMx
QkMwNiwgMHhDNTkxNEZGMiwgMHgzN0ZBQ0NGMSwKLQkweDY5RTlGMEQ1LCAweDlCODI3M0Q2LCAw
eDg4RDI4MDIyLCAweDdBQjkwMzIxLCAweEFFNzM2N0NBLCAweDVDMThFNEM5LCAweDRGNDgxNzNE
LCAweEJEMjM5NDNFLAotCTB4RjM2RTZGNzUsIDB4MDEwNUVDNzYsIDB4MTI1NTFGODIsIDB4RTAz
RTlDODEsIDB4MzRGNEY4NkEsIDB4QzY5RjdCNjksIDB4RDVDRjg4OUQsIDB4MjdBNDBCOUUsCi0J
MHg3OUI3MzdCQSwgMHg4QkRDQjRCOSwgMHg5ODhDNDc0RCwgMHg2QUU3QzQ0RSwgMHhCRTJEQTBB
NSwgMHg0QzQ2MjNBNiwgMHg1RjE2RDA1MiwgMHhBRDdENTM1MQotfTsKLQotLyoKLSAqIGVuZCBv
ZiB0aGUgQ1JDIGxvb2t1cCB0YWJsZSBjcmNfdGFibGVpbDhfbzMyCi0gKi8KLQotCi0KLS8qCi0g
KiBUaGUgZm9sbG93aW5nIENSQyBsb29rdXAgdGFibGUgd2FzIGdlbmVyYXRlZCBhdXRvbWFnaWNh
bGx5IHVzaW5nIHRoZQotICogZm9sbG93aW5nIG1vZGVsIHBhcmFtZXRlcnM6Ci0gKgotICogR2Vu
ZXJhdG9yIFBvbHlub21pYWwgPSAuLi4uLi4uLi4uLi4uLi4uLiAweDFFREM2RjQxCi0gKiBHZW5l
cmF0b3IgUG9seW5vbWlhbCBMZW5ndGggPSAuLi4uLi4uLi4uIDMyIGJpdHMKLSAqIFJlZmxlY3Rl
ZCBCaXRzID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gVFJVRQotICogVGFibGUgR2VuZXJhdGlv
biBPZmZzZXQgPSAuLi4uLi4uLi4uLi4uLiAzMiBiaXRzCi0gKiBOdW1iZXIgb2YgU2xpY2VzID0g
Li4uLi4uLi4uLi4uLi4uLi4uLi4uIDggc2xpY2VzCi0gKiBTbGljZSBMZW5ndGhzID0gLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uIDggOCA4IDggOCA4IDggOAotICogRGlyZWN0b3J5IE5hbWUgPSAu
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLiAuXAotICogRmlsZSBOYW1lID0gLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLiA4eDI1Nl90YWJsZXMuYwotICovCi0KLXN0YXRpYyBjb25zdCB1aW50MzJf
dCBzY3RwX2NyY190YWJsZWlsOF9vNDBbMjU2XSA9Ci17Ci0JMHgwMDAwMDAwMCwgMHgxM0EyOTg3
NywgMHgyNzQ1MzBFRSwgMHgzNEU3QTg5OSwgMHg0RThBNjFEQywgMHg1RDI4RjlBQiwgMHg2OUNG
NTEzMiwgMHg3QTZEQzk0NSwKLQkweDlEMTRDM0I4LCAweDhFQjY1QkNGLCAweEJBNTFGMzU2LCAw
eEE5RjM2QjIxLCAweEQzOUVBMjY0LCAweEMwM0MzQTEzLCAweEY0REI5MjhBLCAweEU3NzkwQUZE
LAotCTB4M0ZDNUYxODEsIDB4MkM2NzY5RjYsIDB4MTg4MEMxNkYsIDB4MEIyMjU5MTgsIDB4NzE0
RjkwNUQsIDB4NjJFRDA4MkEsIDB4NTYwQUEwQjMsIDB4NDVBODM4QzQsCi0JMHhBMkQxMzIzOSwg
MHhCMTczQUE0RSwgMHg4NTk0MDJENywgMHg5NjM2OUFBMCwgMHhFQzVCNTNFNSwgMHhGRkY5Q0I5
MiwgMHhDQjFFNjMwQiwgMHhEOEJDRkI3QywKLQkweDdGOEJFMzAyLCAweDZDMjk3Qjc1LCAweDU4
Q0VEM0VDLCAweDRCNkM0QjlCLCAweDMxMDE4MkRFLCAweDIyQTMxQUE5LCAweDE2NDRCMjMwLCAw
eDA1RTYyQTQ3LAotCTB4RTI5RjIwQkEsIDB4RjEzREI4Q0QsIDB4QzVEQTEwNTQsIDB4RDY3ODg4
MjMsIDB4QUMxNTQxNjYsIDB4QkZCN0Q5MTEsIDB4OEI1MDcxODgsIDB4OThGMkU5RkYsCi0JMHg0
MDRFMTI4MywgMHg1M0VDOEFGNCwgMHg2NzBCMjI2RCwgMHg3NEE5QkExQSwgMHgwRUM0NzM1Riwg
MHgxRDY2RUIyOCwgMHgyOTgxNDNCMSwgMHgzQTIzREJDNiwKLQkweERENUFEMTNCLCAweENFRjg0
OTRDLCAweEZBMUZFMUQ1LCAweEU5QkQ3OUEyLCAweDkzRDBCMEU3LCAweDgwNzIyODkwLCAweEI0
OTU4MDA5LCAweEE3MzcxODdFLAotCTB4RkYxN0M2MDQsIDB4RUNCNTVFNzMsIDB4RDg1MkY2RUEs
IDB4Q0JGMDZFOUQsIDB4QjE5REE3RDgsIDB4QTIzRjNGQUYsIDB4OTZEODk3MzYsIDB4ODU3QTBG
NDEsCi0JMHg2MjAzMDVCQywgMHg3MUExOURDQiwgMHg0NTQ2MzU1MiwgMHg1NkU0QUQyNSwgMHgy
Qzg5NjQ2MCwgMHgzRjJCRkMxNywgMHgwQkNDNTQ4RSwgMHgxODZFQ0NGOSwKLQkweEMwRDIzNzg1
LCAweEQzNzBBRkYyLCAweEU3OTcwNzZCLCAweEY0MzU5RjFDLCAweDhFNTg1NjU5LCAweDlERkFD
RTJFLCAweEE5MUQ2NkI3LCAweEJBQkZGRUMwLAotCTB4NURDNkY0M0QsIDB4NEU2NDZDNEEsIDB4
N0E4M0M0RDMsIDB4NjkyMTVDQTQsIDB4MTM0Qzk1RTEsIDB4MDBFRTBEOTYsIDB4MzQwOUE1MEYs
IDB4MjdBQjNENzgsCi0JMHg4MDlDMjUwNiwgMHg5MzNFQkQ3MSwgMHhBN0Q5MTVFOCwgMHhCNDdC
OEQ5RiwgMHhDRTE2NDREQSwgMHhEREI0RENBRCwgMHhFOTUzNzQzNCwgMHhGQUYxRUM0MywKLQkw
eDFEODhFNkJFLCAweDBFMkE3RUM5LCAweDNBQ0RENjUwLCAweDI5NkY0RTI3LCAweDUzMDI4NzYy
LCAweDQwQTAxRjE1LCAweDc0NDdCNzhDLCAweDY3RTUyRkZCLAotCTB4QkY1OUQ0ODcsIDB4QUNG
QjRDRjAsIDB4OTgxQ0U0NjksIDB4OEJCRTdDMUUsIDB4RjFEM0I1NUIsIDB4RTI3MTJEMkMsIDB4
RDY5Njg1QjUsIDB4QzUzNDFEQzIsCi0JMHgyMjREMTczRiwgMHgzMUVGOEY0OCwgMHgwNTA4MjdE
MSwgMHgxNkFBQkZBNiwgMHg2Q0M3NzZFMywgMHg3RjY1RUU5NCwgMHg0QjgyNDYwRCwgMHg1ODIw
REU3QSwKLQkweEZCQzNGQUY5LCAweEU4NjE2MjhFLCAweERDODZDQTE3LCAweENGMjQ1MjYwLCAw
eEI1NDk5QjI1LCAweEE2RUIwMzUyLCAweDkyMENBQkNCLCAweDgxQUUzM0JDLAotCTB4NjZENzM5
NDEsIDB4NzU3NUExMzYsIDB4NDE5MjA5QUYsIDB4NTIzMDkxRDgsIDB4Mjg1RDU4OUQsIDB4M0JG
RkMwRUEsIDB4MEYxODY4NzMsIDB4MUNCQUYwMDQsCi0JMHhDNDA2MEI3OCwgMHhEN0E0OTMwRiwg
MHhFMzQzM0I5NiwgMHhGMEUxQTNFMSwgMHg4QThDNkFBNCwgMHg5OTJFRjJEMywgMHhBREM5NUE0
QSwgMHhCRTZCQzIzRCwKLQkweDU5MTJDOEMwLCAweDRBQjA1MEI3LCAweDdFNTdGODJFLCAweDZE
RjU2MDU5LCAweDE3OThBOTFDLCAweDA0M0EzMTZCLCAweDMwREQ5OUYyLCAweDIzN0YwMTg1LAot
CTB4ODQ0ODE5RkIsIDB4OTdFQTgxOEMsIDB4QTMwRDI5MTUsIDB4QjBBRkIxNjIsIDB4Q0FDMjc4
MjcsIDB4RDk2MEUwNTAsIDB4RUQ4NzQ4QzksIDB4RkUyNUQwQkUsCi0JMHgxOTVDREE0MywgMHgw
QUZFNDIzNCwgMHgzRTE5RUFBRCwgMHgyREJCNzJEQSwgMHg1N0Q2QkI5RiwgMHg0NDc0MjNFOCwg
MHg3MDkzOEI3MSwgMHg2MzMxMTMwNiwKLQkweEJCOERFODdBLCAweEE4MkY3MDBELCAweDlDQzhE
ODk0LCAweDhGNkE0MEUzLCAweEY1MDc4OUE2LCAweEU2QTUxMUQxLCAweEQyNDJCOTQ4LCAweEMx
RTAyMTNGLAotCTB4MjY5OTJCQzIsIDB4MzUzQkIzQjUsIDB4MDFEQzFCMkMsIDB4MTI3RTgzNUIs
IDB4NjgxMzRBMUUsIDB4N0JCMUQyNjksIDB4NEY1NjdBRjAsIDB4NUNGNEUyODcsCi0JMHgwNEQ0
M0NGRCwgMHgxNzc2QTQ4QSwgMHgyMzkxMEMxMywgMHgzMDMzOTQ2NCwgMHg0QTVFNUQyMSwgMHg1
OUZDQzU1NiwgMHg2RDFCNkRDRiwgMHg3RUI5RjVCOCwKLQkweDk5QzBGRjQ1LCAweDhBNjI2NzMy
LCAweEJFODVDRkFCLCAweEFEMjc1N0RDLCAweEQ3NEE5RTk5LCAweEM0RTgwNkVFLCAweEYwMEZB
RTc3LCAweEUzQUQzNjAwLAotCTB4M0IxMUNEN0MsIDB4MjhCMzU1MEIsIDB4MUM1NEZEOTIsIDB4
MEZGNjY1RTUsIDB4NzU5QkFDQTAsIDB4NjYzOTM0RDcsIDB4NTJERTlDNEUsIDB4NDE3QzA0Mzks
Ci0JMHhBNjA1MEVDNCwgMHhCNUE3OTZCMywgMHg4MTQwM0UyQSwgMHg5MkUyQTY1RCwgMHhFODhG
NkYxOCwgMHhGQjJERjc2RiwgMHhDRkNBNUZGNiwgMHhEQzY4Qzc4MSwKLQkweDdCNUZERkZGLCAw
eDY4RkQ0Nzg4LCAweDVDMUFFRjExLCAweDRGQjg3NzY2LCAweDM1RDVCRTIzLCAweDI2NzcyNjU0
LCAweDEyOTA4RUNELCAweDAxMzIxNkJBLAotCTB4RTY0QjFDNDcsIDB4RjVFOTg0MzAsIDB4QzEw
RTJDQTksIDB4RDJBQ0I0REUsIDB4QThDMTdEOUIsIDB4QkI2M0U1RUMsIDB4OEY4NDRENzUsIDB4
OUMyNkQ1MDIsCi0JMHg0NDlBMkU3RSwgMHg1NzM4QjYwOSwgMHg2M0RGMUU5MCwgMHg3MDdEODZF
NywgMHgwQTEwNEZBMiwgMHgxOUIyRDdENSwgMHgyRDU1N0Y0QywgMHgzRUY3RTczQiwKLQkweEQ5
OEVFREM2LCAweENBMkM3NUIxLCAweEZFQ0JERDI4LCAweEVENjk0NTVGLCAweDk3MDQ4QzFBLCAw
eDg0QTYxNDZELCAweEIwNDFCQ0Y0LCAweEEzRTMyNDgzCi19OwotCi0vKgotICogZW5kIG9mIHRo
ZSBDUkMgbG9va3VwIHRhYmxlIGNyY190YWJsZWlsOF9vNDAKLSAqLwotCi0KLQotLyoKLSAqIFRo
ZSBmb2xsb3dpbmcgQ1JDIGxvb2t1cCB0YWJsZSB3YXMgZ2VuZXJhdGVkIGF1dG9tYWdpY2FsbHkg
dXNpbmcgdGhlCi0gKiBmb2xsb3dpbmcgbW9kZWwgcGFyYW1ldGVyczoKLSAqCi0gKiBHZW5lcmF0
b3IgUG9seW5vbWlhbCA9IC4uLi4uLi4uLi4uLi4uLi4uIDB4MUVEQzZGNDEKLSAqIEdlbmVyYXRv
ciBQb2x5bm9taWFsIExlbmd0aCA9IC4uLi4uLi4uLi4gMzIgYml0cwotICogUmVmbGVjdGVkIEJp
dHMgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiBUUlVFCi0gKiBUYWJsZSBHZW5lcmF0aW9uIE9m
ZnNldCA9IC4uLi4uLi4uLi4uLi4uIDMyIGJpdHMKLSAqIE51bWJlciBvZiBTbGljZXMgPSAuLi4u
Li4uLi4uLi4uLi4uLi4uLi4gOCBzbGljZXMKLSAqIFNsaWNlIExlbmd0aHMgPSAuLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4gOCA4IDggOCA4IDggOCA4Ci0gKiBEaXJlY3RvcnkgTmFtZSA9IC4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uIC5cCi0gKiBGaWxlIE5hbWUgPSAuLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uIDh4MjU2X3RhYmxlcy5jCi0gKi8KLQotc3RhdGljIGNvbnN0IHVpbnQzMl90IHNj
dHBfY3JjX3RhYmxlaWw4X280OFsyNTZdID0KLXsKLQkweDAwMDAwMDAwLCAweEE1NDE5MjdFLCAw
eDRGNkY1MjBELCAweEVBMkVDMDczLCAweDlFREVBNDFBLCAweDNCOUYzNjY0LCAweEQxQjFGNjE3
LCAweDc0RjA2NDY5LAotCTB4Mzg1MTNFQzUsIDB4OUQxMEFDQkIsIDB4NzczRTZDQzgsIDB4RDI3
RkZFQjYsIDB4QTY4RjlBREYsIDB4MDNDRTA4QTEsIDB4RTlFMEM4RDIsIDB4NENBMTVBQUMsCi0J
MHg3MEEyN0Q4QSwgMHhENUUzRUZGNCwgMHgzRkNEMkY4NywgMHg5QThDQkRGOSwgMHhFRTdDRDk5
MCwgMHg0QjNENEJFRSwgMHhBMTEzOEI5RCwgMHgwNDUyMTlFMywKLQkweDQ4RjM0MzRGLCAweEVE
QjJEMTMxLCAweDA3OUMxMTQyLCAweEEyREQ4MzNDLCAweEQ2MkRFNzU1LCAweDczNkM3NTJCLCAw
eDk5NDJCNTU4LCAweDNDMDMyNzI2LAotCTB4RTE0NEZCMTQsIDB4NDQwNTY5NkEsIDB4QUUyQkE5
MTksIDB4MEI2QTNCNjcsIDB4N0Y5QTVGMEUsIDB4REFEQkNENzAsIDB4MzBGNTBEMDMsIDB4OTVC
NDlGN0QsCi0JMHhEOTE1QzVEMSwgMHg3QzU0NTdBRiwgMHg5NjdBOTdEQywgMHgzMzNCMDVBMiwg
MHg0N0NCNjFDQiwgMHhFMjhBRjNCNSwgMHgwOEE0MzNDNiwgMHhBREU1QTFCOCwKLQkweDkxRTY4
NjlFLCAweDM0QTcxNEUwLCAweERFODlENDkzLCAweDdCQzg0NkVELCAweDBGMzgyMjg0LCAweEFB
NzlCMEZBLCAweDQwNTc3MDg5LCAweEU1MTZFMkY3LAotCTB4QTlCN0I4NUIsIDB4MENGNjJBMjUs
IDB4RTZEOEVBNTYsIDB4NDM5OTc4MjgsIDB4Mzc2OTFDNDEsIDB4OTIyODhFM0YsIDB4NzgwNjRF
NEMsIDB4REQ0N0RDMzIsCi0JMHhDNzY1ODBEOSwgMHg2MjI0MTJBNywgMHg4ODBBRDJENCwgMHgy
RDRCNDBBQSwgMHg1OUJCMjRDMywgMHhGQ0ZBQjZCRCwgMHgxNkQ0NzZDRSwgMHhCMzk1RTRCMCwK
LQkweEZGMzRCRTFDLCAweDVBNzUyQzYyLCAweEIwNUJFQzExLCAweDE1MUE3RTZGLCAweDYxRUEx
QTA2LCAweEM0QUI4ODc4LCAweDJFODU0ODBCLCAweDhCQzREQTc1LAotCTB4QjdDN0ZENTMsIDB4
MTI4NjZGMkQsIDB4RjhBOEFGNUUsIDB4NURFOTNEMjAsIDB4MjkxOTU5NDksIDB4OEM1OENCMzcs
IDB4NjY3NjBCNDQsIDB4QzMzNzk5M0EsCi0JMHg4Rjk2QzM5NiwgMHgyQUQ3NTFFOCwgMHhDMEY5
OTE5QiwgMHg2NUI4MDNFNSwgMHgxMTQ4Njc4QywgMHhCNDA5RjVGMiwgMHg1RTI3MzU4MSwgMHhG
QjY2QTdGRiwKLQkweDI2MjE3QkNELCAweDgzNjBFOUIzLCAweDY5NEUyOUMwLCAweENDMEZCQkJF
LCAweEI4RkZERkQ3LCAweDFEQkU0REE5LCAweEY3OTA4RERBLCAweDUyRDExRkE0LAotCTB4MUU3
MDQ1MDgsIDB4QkIzMUQ3NzYsIDB4NTExRjE3MDUsIDB4RjQ1RTg1N0IsIDB4ODBBRUUxMTIsIDB4
MjVFRjczNkMsIDB4Q0ZDMUIzMUYsIDB4NkE4MDIxNjEsCi0JMHg1NjgzMDY0NywgMHhGM0MyOTQz
OSwgMHgxOUVDNTQ0QSwgMHhCQ0FEQzYzNCwgMHhDODVEQTI1RCwgMHg2RDFDMzAyMywgMHg4NzMy
RjA1MCwgMHgyMjczNjIyRSwKLQkweDZFRDIzODgyLCAweENCOTNBQUZDLCAweDIxQkQ2QThGLCAw
eDg0RkNGOEYxLCAweEYwMEM5Qzk4LCAweDU1NEQwRUU2LCAweEJGNjNDRTk1LCAweDFBMjI1Q0VC
LAotCTB4OEIyNzc3NDMsIDB4MkU2NkU1M0QsIDB4QzQ0ODI1NEUsIDB4NjEwOUI3MzAsIDB4MTVG
OUQzNTksIDB4QjBCODQxMjcsIDB4NUE5NjgxNTQsIDB4RkZENzEzMkEsCi0JMHhCMzc2NDk4Niwg
MHgxNjM3REJGOCwgMHhGQzE5MUI4QiwgMHg1OTU4ODlGNSwgMHgyREE4RUQ5QywgMHg4OEU5N0ZF
MiwgMHg2MkM3QkY5MSwgMHhDNzg2MkRFRiwKLQkweEZCODUwQUM5LCAweDVFQzQ5OEI3LCAweEI0
RUE1OEM0LCAweDExQUJDQUJBLCAweDY1NUJBRUQzLCAweEMwMUEzQ0FELCAweDJBMzRGQ0RFLCAw
eDhGNzU2RUEwLAotCTB4QzNENDM0MEMsIDB4NjY5NUE2NzIsIDB4OENCQjY2MDEsIDB4MjlGQUY0
N0YsIDB4NUQwQTkwMTYsIDB4Rjg0QjAyNjgsIDB4MTI2NUMyMUIsIDB4QjcyNDUwNjUsCi0JMHg2
QTYzOEM1NywgMHhDRjIyMUUyOSwgMHgyNTBDREU1QSwgMHg4MDRENEMyNCwgMHhGNEJEMjg0RCwg
MHg1MUZDQkEzMywgMHhCQkQyN0E0MCwgMHgxRTkzRTgzRSwKLQkweDUyMzJCMjkyLCAweEY3NzMy
MEVDLCAweDFENURFMDlGLCAweEI4MUM3MkUxLCAweENDRUMxNjg4LCAweDY5QUQ4NEY2LCAweDgz
ODM0NDg1LCAweDI2QzJENkZCLAotCTB4MUFDMUYxREQsIDB4QkY4MDYzQTMsIDB4NTVBRUEzRDAs
IDB4RjBFRjMxQUUsIDB4ODQxRjU1QzcsIDB4MjE1RUM3QjksIDB4Q0I3MDA3Q0EsIDB4NkUzMTk1
QjQsCi0JMHgyMjkwQ0YxOCwgMHg4N0QxNUQ2NiwgMHg2REZGOUQxNSwgMHhDOEJFMEY2QiwgMHhC
QzRFNkIwMiwgMHgxOTBGRjk3QywgMHhGMzIxMzkwRiwgMHg1NjYwQUI3MSwKLQkweDRDNDJGNzlB
LCAweEU5MDM2NUU0LCAweDAzMkRBNTk3LCAweEE2NkMzN0U5LCAweEQyOUM1MzgwLCAweDc3RERD
MUZFLCAweDlERjMwMThELCAweDM4QjI5M0YzLAotCTB4NzQxM0M5NUYsIDB4RDE1MjVCMjEsIDB4
M0I3QzlCNTIsIDB4OUUzRDA5MkMsIDB4RUFDRDZENDUsIDB4NEY4Q0ZGM0IsIDB4QTVBMjNGNDgs
IDB4MDBFM0FEMzYsCi0JMHgzQ0UwOEExMCwgMHg5OUExMTg2RSwgMHg3MzhGRDgxRCwgMHhENkNF
NEE2MywgMHhBMjNFMkUwQSwgMHgwNzdGQkM3NCwgMHhFRDUxN0MwNywgMHg0ODEwRUU3OSwKLQkw
eDA0QjFCNEQ1LCAweEExRjAyNkFCLCAweDRCREVFNkQ4LCAweEVFOUY3NEE2LCAweDlBNkYxMENG
LCAweDNGMkU4MkIxLCAweEQ1MDA0MkMyLCAweDcwNDFEMEJDLAotCTB4QUQwNjBDOEUsIDB4MDg0
NzlFRjAsIDB4RTI2OTVFODMsIDB4NDcyOENDRkQsIDB4MzNEOEE4OTQsIDB4OTY5OTNBRUEsIDB4
N0NCN0ZBOTksIDB4RDlGNjY4RTcsCi0JMHg5NTU3MzI0QiwgMHgzMDE2QTAzNSwgMHhEQTM4NjA0
NiwgMHg3Rjc5RjIzOCwgMHgwQjg5OTY1MSwgMHhBRUM4MDQyRiwgMHg0NEU2QzQ1QywgMHhFMUE3
NTYyMiwKLQkweEREQTQ3MTA0LCAweDc4RTVFMzdBLCAweDkyQ0IyMzA5LCAweDM3OEFCMTc3LCAw
eDQzN0FENTFFLCAweEU2M0I0NzYwLCAweDBDMTU4NzEzLCAweEE5NTQxNTZELAotCTB4RTVGNTRG
QzEsIDB4NDBCNEREQkYsIDB4QUE5QTFEQ0MsIDB4MEZEQjhGQjIsIDB4N0IyQkVCREIsIDB4REU2
QTc5QTUsIDB4MzQ0NEI5RDYsIDB4OTEwNTJCQTgKLX07Ci0KLS8qCi0gKiBlbmQgb2YgdGhlIENS
QyBsb29rdXAgdGFibGUgY3JjX3RhYmxlaWw4X280OAotICovCi0KLQotCi0vKgotICogVGhlIGZv
bGxvd2luZyBDUkMgbG9va3VwIHRhYmxlIHdhcyBnZW5lcmF0ZWQgYXV0b21hZ2ljYWxseSB1c2lu
ZyB0aGUKLSAqIGZvbGxvd2luZyBtb2RlbCBwYXJhbWV0ZXJzOgotICoKLSAqIEdlbmVyYXRvciBQ
b2x5bm9taWFsID0gLi4uLi4uLi4uLi4uLi4uLi4gMHgxRURDNkY0MQotICogR2VuZXJhdG9yIFBv
bHlub21pYWwgTGVuZ3RoID0gLi4uLi4uLi4uLiAzMiBiaXRzCi0gKiBSZWZsZWN0ZWQgQml0cyA9
IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIFRSVUUKLSAqIFRhYmxlIEdlbmVyYXRpb24gT2Zmc2V0
ID0gLi4uLi4uLi4uLi4uLi4gMzIgYml0cwotICogTnVtYmVyIG9mIFNsaWNlcyA9IC4uLi4uLi4u
Li4uLi4uLi4uLi4uLiA4IHNsaWNlcwotICogU2xpY2UgTGVuZ3RocyA9IC4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLiA4IDggOCA4IDggOCA4IDgKLSAqIERpcmVjdG9yeSBOYW1lID0gLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4gLlwKLSAqIEZpbGUgTmFtZSA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4gOHgyNTZfdGFibGVzLmMKLSAqLwotCi1zdGF0aWMgY29uc3QgdWludDMyX3Qgc2N0cF9j
cmNfdGFibGVpbDhfbzU2WzI1Nl0gPQotewotCTB4MDAwMDAwMDAsIDB4REQ0NUFBQjgsIDB4QkY2
NzIzODEsIDB4NjIyMjg5MzksIDB4N0IyMjMxRjMsIDB4QTY2NzlCNEIsIDB4QzQ0NTEyNzIsIDB4
MTkwMEI4Q0EsCi0JMHhGNjQ0NjNFNiwgMHgyQjAxQzk1RSwgMHg0OTIzNDA2NywgMHg5NDY2RUFE
RiwgMHg4RDY2NTIxNSwgMHg1MDIzRjhBRCwgMHgzMjAxNzE5NCwgMHhFRjQ0REIyQywKLQkweEU5
NjRCMTNELCAweDM0MjExQjg1LCAweDU2MDM5MkJDLCAweDhCNDYzODA0LCAweDkyNDY4MENFLCAw
eDRGMDMyQTc2LCAweDJEMjFBMzRGLCAweEYwNjQwOUY3LAotCTB4MUYyMEQyREIsIDB4QzI2NTc4
NjMsIDB4QTA0N0YxNUEsIDB4N0QwMjVCRTIsIDB4NjQwMkUzMjgsIDB4Qjk0NzQ5OTAsIDB4REI2
NUMwQTksIDB4MDYyMDZBMTEsCi0JMHhENzI1MTQ4QiwgMHgwQTYwQkUzMywgMHg2ODQyMzcwQSwg
MHhCNTA3OURCMiwgMHhBQzA3MjU3OCwgMHg3MTQyOEZDMCwgMHgxMzYwMDZGOSwgMHhDRTI1QUM0
MSwKLQkweDIxNjE3NzZELCAweEZDMjREREQ1LCAweDlFMDY1NEVDLCAweDQzNDNGRTU0LCAweDVB
NDM0NjlFLCAweDg3MDZFQzI2LCAweEU1MjQ2NTFGLCAweDM4NjFDRkE3LAotCTB4M0U0MUE1QjYs
IDB4RTMwNDBGMEUsIDB4ODEyNjg2MzcsIDB4NUM2MzJDOEYsIDB4NDU2Mzk0NDUsIDB4OTgyNjNF
RkQsIDB4RkEwNEI3QzQsIDB4Mjc0MTFEN0MsCi0JMHhDODA1QzY1MCwgMHgxNTQwNkNFOCwgMHg3
NzYyRTVEMSwgMHhBQTI3NEY2OSwgMHhCMzI3RjdBMywgMHg2RTYyNUQxQiwgMHgwQzQwRDQyMiwg
MHhEMTA1N0U5QSwKLQkweEFCQTY1RkU3LCAweDc2RTNGNTVGLCAweDE0QzE3QzY2LCAweEM5ODRE
NkRFLCAweEQwODQ2RTE0LCAweDBEQzFDNEFDLCAweDZGRTM0RDk1LCAweEIyQTZFNzJELAotCTB4
NURFMjNDMDEsIDB4ODBBNzk2QjksIDB4RTI4NTFGODAsIDB4M0ZDMEI1MzgsIDB4MjZDMDBERjIs
IDB4RkI4NUE3NEEsIDB4OTlBNzJFNzMsIDB4NDRFMjg0Q0IsCi0JMHg0MkMyRUVEQSwgMHg5Rjg3
NDQ2MiwgMHhGREE1Q0Q1QiwgMHgyMEUwNjdFMywgMHgzOUUwREYyOSwgMHhFNEE1NzU5MSwgMHg4
Njg3RkNBOCwgMHg1QkMyNTYxMCwKLQkweEI0ODY4RDNDLCAweDY5QzMyNzg0LCAweDBCRTFBRUJE
LCAweEQ2QTQwNDA1LCAweENGQTRCQ0NGLCAweDEyRTExNjc3LCAweDcwQzM5RjRFLCAweEFEODYz
NUY2LAotCTB4N0M4MzRCNkMsIDB4QTFDNkUxRDQsIDB4QzNFNDY4RUQsIDB4MUVBMUMyNTUsIDB4
MDdBMTdBOUYsIDB4REFFNEQwMjcsIDB4QjhDNjU5MUUsIDB4NjU4M0YzQTYsCi0JMHg4QUM3Mjg4
QSwgMHg1NzgyODIzMiwgMHgzNUEwMEIwQiwgMHhFOEU1QTFCMywgMHhGMUU1MTk3OSwgMHgyQ0Ew
QjNDMSwgMHg0RTgyM0FGOCwgMHg5M0M3OTA0MCwKLQkweDk1RTdGQTUxLCAweDQ4QTI1MEU5LCAw
eDJBODBEOUQwLCAweEY3QzU3MzY4LCAweEVFQzVDQkEyLCAweDMzODA2MTFBLCAweDUxQTJFODIz
LCAweDhDRTc0MjlCLAotCTB4NjNBMzk5QjcsIDB4QkVFNjMzMEYsIDB4RENDNEJBMzYsIDB4MDE4
MTEwOEUsIDB4MTg4MUE4NDQsIDB4QzVDNDAyRkMsIDB4QTdFNjhCQzUsIDB4N0FBMzIxN0QsCi0J
MHg1MkEwQzkzRiwgMHg4RkU1NjM4NywgMHhFREM3RUFCRSwgMHgzMDgyNDAwNiwgMHgyOTgyRjhD
QywgMHhGNEM3NTI3NCwgMHg5NkU1REI0RCwgMHg0QkEwNzFGNSwKLQkweEE0RTRBQUQ5LCAweDc5
QTEwMDYxLCAweDFCODM4OTU4LCAweEM2QzYyM0UwLCAweERGQzY5QjJBLCAweDAyODMzMTkyLCAw
eDYwQTFCOEFCLCAweEJERTQxMjEzLAotCTB4QkJDNDc4MDIsIDB4NjY4MUQyQkEsIDB4MDRBMzVC
ODMsIDB4RDlFNkYxM0IsIDB4QzBFNjQ5RjEsIDB4MURBM0UzNDksIDB4N0Y4MTZBNzAsIDB4QTJD
NEMwQzgsCi0JMHg0RDgwMUJFNCwgMHg5MEM1QjE1QywgMHhGMkU3Mzg2NSwgMHgyRkEyOTJERCwg
MHgzNkEyMkExNywgMHhFQkU3ODBBRiwgMHg4OUM1MDk5NiwgMHg1NDgwQTMyRSwKLQkweDg1ODVE
REI0LCAweDU4QzA3NzBDLCAweDNBRTJGRTM1LCAweEU3QTc1NDhELCAweEZFQTdFQzQ3LCAweDIz
RTI0NkZGLCAweDQxQzBDRkM2LCAweDlDODU2NTdFLAotCTB4NzNDMUJFNTIsIDB4QUU4NDE0RUEs
IDB4Q0NBNjlERDMsIDB4MTFFMzM3NkIsIDB4MDhFMzhGQTEsIDB4RDVBNjI1MTksIDB4Qjc4NEFD
MjAsIDB4NkFDMTA2OTgsCi0JMHg2Q0UxNkM4OSwgMHhCMUE0QzYzMSwgMHhEMzg2NEYwOCwgMHgw
RUMzRTVCMCwgMHgxN0MzNUQ3QSwgMHhDQTg2RjdDMiwgMHhBOEE0N0VGQiwgMHg3NUUxRDQ0MywK
LQkweDlBQTUwRjZGLCAweDQ3RTBBNUQ3LCAweDI1QzIyQ0VFLCAweEY4ODc4NjU2LCAweEUxODcz
RTlDLCAweDNDQzI5NDI0LCAweDVFRTAxRDFELCAweDgzQTVCN0E1LAotCTB4RjkwNjk2RDgsIDB4
MjQ0MzNDNjAsIDB4NDY2MUI1NTksIDB4OUIyNDFGRTEsIDB4ODIyNEE3MkIsIDB4NUY2MTBEOTMs
IDB4M0Q0Mzg0QUEsIDB4RTAwNjJFMTIsCi0JMHgwRjQyRjUzRSwgMHhEMjA3NUY4NiwgMHhCMDI1
RDZCRiwgMHg2RDYwN0MwNywgMHg3NDYwQzRDRCwgMHhBOTI1NkU3NSwgMHhDQjA3RTc0QywgMHgx
NjQyNERGNCwKLQkweDEwNjIyN0U1LCAweENEMjc4RDVELCAweEFGMDUwNDY0LCAweDcyNDBBRURD
LCAweDZCNDAxNjE2LCAweEI2MDVCQ0FFLCAweEQ0MjczNTk3LCAweDA5NjI5RjJGLAotCTB4RTYy
NjQ0MDMsIDB4M0I2M0VFQkIsIDB4NTk0MTY3ODIsIDB4ODQwNENEM0EsIDB4OUQwNDc1RjAsIDB4
NDA0MURGNDgsIDB4MjI2MzU2NzEsIDB4RkYyNkZDQzksCi0JMHgyRTIzODI1MywgMHhGMzY2MjhF
QiwgMHg5MTQ0QTFEMiwgMHg0QzAxMEI2QSwgMHg1NTAxQjNBMCwgMHg4ODQ0MTkxOCwgMHhFQTY2
OTAyMSwgMHgzNzIzM0E5OSwKLQkweEQ4NjdFMUI1LCAweDA1MjI0QjBELCAweDY3MDBDMjM0LCAw
eEJBNDU2ODhDLCAweEEzNDVEMDQ2LCAweDdFMDA3QUZFLCAweDFDMjJGM0M3LCAweEMxNjc1OTdG
LAotCTB4Qzc0NzMzNkUsIDB4MUEwMjk5RDYsIDB4NzgyMDEwRUYsIDB4QTU2NUJBNTcsIDB4QkM2
NTAyOUQsIDB4NjEyMEE4MjUsIDB4MDMwMjIxMUMsIDB4REU0NzhCQTQsCi0JMHgzMTAzNTA4OCwg
MHhFQzQ2RkEzMCwgMHg4RTY0NzMwOSwgMHg1MzIxRDlCMSwgMHg0QTIxNjE3QiwgMHg5NzY0Q0JD
MywgMHhGNTQ2NDJGQSwgMHgyODAzRTg0MgotfTsKLQotLyoKLSAqIGVuZCBvZiB0aGUgQ1JDIGxv
b2t1cCB0YWJsZSBjcmNfdGFibGVpbDhfbzU2Ci0gKi8KLQotCi0KLS8qCi0gKiBUaGUgZm9sbG93
aW5nIENSQyBsb29rdXAgdGFibGUgd2FzIGdlbmVyYXRlZCBhdXRvbWFnaWNhbGx5IHVzaW5nIHRo
ZQotICogZm9sbG93aW5nIG1vZGVsIHBhcmFtZXRlcnM6Ci0gKgotICogR2VuZXJhdG9yIFBvbHlu
b21pYWwgPSAuLi4uLi4uLi4uLi4uLi4uLiAweDFFREM2RjQxCi0gKiBHZW5lcmF0b3IgUG9seW5v
bWlhbCBMZW5ndGggPSAuLi4uLi4uLi4uIDMyIGJpdHMKLSAqIFJlZmxlY3RlZCBCaXRzID0gLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4gVFJVRQotICogVGFibGUgR2VuZXJhdGlvbiBPZmZzZXQgPSAu
Li4uLi4uLi4uLi4uLiAzMiBiaXRzCi0gKiBOdW1iZXIgb2YgU2xpY2VzID0gLi4uLi4uLi4uLi4u
Li4uLi4uLi4uIDggc2xpY2VzCi0gKiBTbGljZSBMZW5ndGhzID0gLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uIDggOCA4IDggOCA4IDggOAotICogRGlyZWN0b3J5IE5hbWUgPSAuLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLiAuXAotICogRmlsZSBOYW1lID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
LiA4eDI1Nl90YWJsZXMuYwotICovCi0KLXN0YXRpYyBjb25zdCB1aW50MzJfdCBzY3RwX2NyY190
YWJsZWlsOF9vNjRbMjU2XSA9Ci17Ci0JMHgwMDAwMDAwMCwgMHgzODExNkZBQywgMHg3MDIyREY1
OCwgMHg0ODMzQjBGNCwgMHhFMDQ1QkVCMCwgMHhEODU0RDExQywgMHg5MDY3NjFFOCwgMHhBODc2
MEU0NCwKLQkweEM1NjcwQjkxLCAweEZENzY2NDNELCAweEI1NDVENEM5LCAweDhENTRCQjY1LCAw
eDI1MjJCNTIxLCAweDFEMzNEQThELCAweDU1MDA2QTc5LCAweDZEMTEwNUQ1LAotCTB4OEYyMjYx
RDMsIDB4QjczMzBFN0YsIDB4RkYwMEJFOEIsIDB4QzcxMUQxMjcsIDB4NkY2N0RGNjMsIDB4NTc3
NkIwQ0YsIDB4MUY0NTAwM0IsIDB4Mjc1NDZGOTcsCi0JMHg0QTQ1NkE0MiwgMHg3MjU0MDVFRSwg
MHgzQTY3QjUxQSwgMHgwMjc2REFCNiwgMHhBQTAwRDRGMiwgMHg5MjExQkI1RSwgMHhEQTIyMEJB
QSwgMHhFMjMzNjQwNiwKLQkweDFCQThCNTU3LCAweDIzQjlEQUZCLCAweDZCOEE2QTBGLCAweDUz
OUIwNUEzLCAweEZCRUQwQkU3LCAweEMzRkM2NDRCLCAweDhCQ0ZENEJGLCAweEIzREVCQjEzLAot
CTB4REVDRkJFQzYsIDB4RTZERUQxNkEsIDB4QUVFRDYxOUUsIDB4OTZGQzBFMzIsIDB4M0U4QTAw
NzYsIDB4MDY5QjZGREEsIDB4NEVBOERGMkUsIDB4NzZCOUIwODIsCi0JMHg5NDhBRDQ4NCwgMHhB
QzlCQkIyOCwgMHhFNEE4MEJEQywgMHhEQ0I5NjQ3MCwgMHg3NENGNkEzNCwgMHg0Q0RFMDU5OCwg
MHgwNEVEQjU2QywgMHgzQ0ZDREFDMCwKLQkweDUxRURERjE1LCAweDY5RkNCMEI5LCAweDIxQ0Yw
MDRELCAweDE5REU2RkUxLCAweEIxQTg2MUE1LCAweDg5QjkwRTA5LCAweEMxOEFCRUZELCAweEY5
OUJEMTUxLAotCTB4Mzc1MTZBQUUsIDB4MEY0MDA1MDIsIDB4NDc3M0I1RjYsIDB4N0Y2MkRBNUEs
IDB4RDcxNEQ0MUUsIDB4RUYwNUJCQjIsIDB4QTczNjBCNDYsIDB4OUYyNzY0RUEsCi0JMHhGMjM2
NjEzRiwgMHhDQTI3MEU5MywgMHg4MjE0QkU2NywgMHhCQTA1RDFDQiwgMHgxMjczREY4RiwgMHgy
QTYyQjAyMywgMHg2MjUxMDBENywgMHg1QTQwNkY3QiwKLQkweEI4NzMwQjdELCAweDgwNjI2NEQx
LCAweEM4NTFENDI1LCAweEYwNDBCQjg5LCAweDU4MzZCNUNELCAweDYwMjdEQTYxLCAweDI4MTQ2
QTk1LCAweDEwMDUwNTM5LAotCTB4N0QxNDAwRUMsIDB4NDUwNTZGNDAsIDB4MEQzNkRGQjQsIDB4
MzUyN0IwMTgsIDB4OUQ1MUJFNUMsIDB4QTU0MEQxRjAsIDB4RUQ3MzYxMDQsIDB4RDU2MjBFQTgs
Ci0JMHgyQ0Y5REZGOSwgMHgxNEU4QjA1NSwgMHg1Q0RCMDBBMSwgMHg2NENBNkYwRCwgMHhDQ0JD
NjE0OSwgMHhGNEFEMEVFNSwgMHhCQzlFQkUxMSwgMHg4NDhGRDFCRCwKLQkweEU5OUVENDY4LCAw
eEQxOEZCQkM0LCAweDk5QkMwQjMwLCAweEExQUQ2NDlDLCAweDA5REI2QUQ4LCAweDMxQ0EwNTc0
LCAweDc5RjlCNTgwLCAweDQxRThEQTJDLAotCTB4QTNEQkJFMkEsIDB4OUJDQUQxODYsIDB4RDNG
OTYxNzIsIDB4RUJFODBFREUsIDB4NDM5RTAwOUEsIDB4N0I4RjZGMzYsIDB4MzNCQ0RGQzIsIDB4
MEJBREIwNkUsCi0JMHg2NkJDQjVCQiwgMHg1RUFEREExNywgMHgxNjlFNkFFMywgMHgyRThGMDU0
RiwgMHg4NkY5MEIwQiwgMHhCRUU4NjRBNywgMHhGNkRCRDQ1MywgMHhDRUNBQkJGRiwKLQkweDZF
QTJENTVDLCAweDU2QjNCQUYwLCAweDFFODAwQTA0LCAweDI2OTE2NUE4LCAweDhFRTc2QkVDLCAw
eEI2RjYwNDQwLCAweEZFQzVCNEI0LCAweEM2RDREQjE4LAotCTB4QUJDNURFQ0QsIDB4OTNENEIx
NjEsIDB4REJFNzAxOTUsIDB4RTNGNjZFMzksIDB4NEI4MDYwN0QsIDB4NzM5MTBGRDEsIDB4M0JB
MkJGMjUsIDB4MDNCM0QwODksCi0JMHhFMTgwQjQ4RiwgMHhEOTkxREIyMywgMHg5MUEyNkJENywg
MHhBOUIzMDQ3QiwgMHgwMUM1MEEzRiwgMHgzOUQ0NjU5MywgMHg3MUU3RDU2NywgMHg0OUY2QkFD
QiwKLQkweDI0RTdCRjFFLCAweDFDRjZEMEIyLCAweDU0QzU2MDQ2LCAweDZDRDQwRkVBLCAweEM0
QTIwMUFFLCAweEZDQjM2RTAyLCAweEI0ODBERUY2LCAweDhDOTFCMTVBLAotCTB4NzUwQTYwMEIs
IDB4NEQxQjBGQTcsIDB4MDUyOEJGNTMsIDB4M0QzOUQwRkYsIDB4OTU0RkRFQkIsIDB4QUQ1RUIx
MTcsIDB4RTU2RDAxRTMsIDB4REQ3QzZFNEYsCi0JMHhCMDZENkI5QSwgMHg4ODdDMDQzNiwgMHhD
MDRGQjRDMiwgMHhGODVFREI2RSwgMHg1MDI4RDUyQSwgMHg2ODM5QkE4NiwgMHgyMDBBMEE3Miwg
MHgxODFCNjVERSwKLQkweEZBMjgwMUQ4LCAweEMyMzk2RTc0LCAweDhBMEFERTgwLCAweEIyMUJC
MTJDLCAweDFBNkRCRjY4LCAweDIyN0NEMEM0LCAweDZBNEY2MDMwLCAweDUyNUUwRjlDLAotCTB4
M0Y0RjBBNDksIDB4MDc1RTY1RTUsIDB4NEY2REQ1MTEsIDB4Nzc3Q0JBQkQsIDB4REYwQUI0Rjks
IDB4RTcxQkRCNTUsIDB4QUYyODZCQTEsIDB4OTczOTA0MEQsCi0JMHg1OUYzQkZGMiwgMHg2MUUy
RDA1RSwgMHgyOUQxNjBBQSwgMHgxMUMwMEYwNiwgMHhCOUI2MDE0MiwgMHg4MUE3NkVFRSwgMHhD
OTk0REUxQSwgMHhGMTg1QjFCNiwKLQkweDlDOTRCNDYzLCAweEE0ODVEQkNGLCAweEVDQjY2QjNC
LCAweEQ0QTcwNDk3LCAweDdDRDEwQUQzLCAweDQ0QzA2NTdGLCAweDBDRjNENThCLCAweDM0RTJC
QTI3LAotCTB4RDZEMURFMjEsIDB4RUVDMEIxOEQsIDB4QTZGMzAxNzksIDB4OUVFMjZFRDUsIDB4
MzY5NDYwOTEsIDB4MEU4NTBGM0QsIDB4NDZCNkJGQzksIDB4N0VBN0QwNjUsCi0JMHgxM0I2RDVC
MCwgMHgyQkE3QkExQywgMHg2Mzk0MEFFOCwgMHg1Qjg1NjU0NCwgMHhGM0YzNkIwMCwgMHhDQkUy
MDRBQywgMHg4M0QxQjQ1OCwgMHhCQkMwREJGNCwKLQkweDQyNUIwQUE1LCAweDdBNEE2NTA5LCAw
eDMyNzlENUZELCAweDBBNjhCQTUxLCAweEEyMUVCNDE1LCAweDlBMEZEQkI5LCAweEQyM0M2QjRE
LCAweEVBMkQwNEUxLAotCTB4ODczQzAxMzQsIDB4QkYyRDZFOTgsIDB4RjcxRURFNkMsIDB4Q0Yw
RkIxQzAsIDB4Njc3OUJGODQsIDB4NUY2OEQwMjgsIDB4MTc1QjYwREMsIDB4MkY0QTBGNzAsCi0J
MHhDRDc5NkI3NiwgMHhGNTY4MDREQSwgMHhCRDVCQjQyRSwgMHg4NTRBREI4MiwgMHgyRDNDRDVD
NiwgMHgxNTJEQkE2QSwgMHg1RDFFMEE5RSwgMHg2NTBGNjUzMiwKLQkweDA4MUU2MEU3LCAweDMw
MEYwRjRCLCAweDc4M0NCRkJGLCAweDQwMkREMDEzLCAweEU4NUJERTU3LCAweEQwNEFCMUZCLCAw
eDk4NzkwMTBGLCAweEEwNjg2RUEzCi19OwotCi0vKgotICogZW5kIG9mIHRoZSBDUkMgbG9va3Vw
IHRhYmxlIGNyY190YWJsZWlsOF9vNjQKLSAqLwotCi0KLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcg
Q1JDIGxvb2t1cCB0YWJsZSB3YXMgZ2VuZXJhdGVkIGF1dG9tYWdpY2FsbHkgdXNpbmcgdGhlCi0g
KiBmb2xsb3dpbmcgbW9kZWwgcGFyYW1ldGVyczoKLSAqCi0gKiBHZW5lcmF0b3IgUG9seW5vbWlh
bCA9IC4uLi4uLi4uLi4uLi4uLi4uIDB4MUVEQzZGNDEKLSAqIEdlbmVyYXRvciBQb2x5bm9taWFs
IExlbmd0aCA9IC4uLi4uLi4uLi4gMzIgYml0cwotICogUmVmbGVjdGVkIEJpdHMgPSAuLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLiBUUlVFCi0gKiBUYWJsZSBHZW5lcmF0aW9uIE9mZnNldCA9IC4uLi4u
Li4uLi4uLi4uIDMyIGJpdHMKLSAqIE51bWJlciBvZiBTbGljZXMgPSAuLi4uLi4uLi4uLi4uLi4u
Li4uLi4gOCBzbGljZXMKLSAqIFNsaWNlIExlbmd0aHMgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4gOCA4IDggOCA4IDggOCA4Ci0gKiBEaXJlY3RvcnkgTmFtZSA9IC4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uIC5cCi0gKiBGaWxlIE5hbWUgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDh4
MjU2X3RhYmxlcy5jCi0gKi8KLQotc3RhdGljIGNvbnN0IHVpbnQzMl90IHNjdHBfY3JjX3RhYmxl
aWw4X283MlsyNTZdID0KLXsKLQkweDAwMDAwMDAwLCAweEVGMzA2QjE5LCAweERCOENBMEMzLCAw
eDM0QkNDQkRBLCAweEIyRjUzNzc3LCAweDVEQzU1QzZFLCAweDY5Nzk5N0I0LCAweDg2NDlGQ0FE
LAotCTB4NjAwNjE4MUYsIDB4OEYzNjczMDYsIDB4QkI4QUI4REMsIDB4NTRCQUQzQzUsIDB4RDJG
MzJGNjgsIDB4M0RDMzQ0NzEsIDB4MDk3RjhGQUIsIDB4RTY0RkU0QjIsCi0JMHhDMDBDMzAzRSwg
MHgyRjNDNUIyNywgMHgxQjgwOTBGRCwgMHhGNEIwRkJFNCwgMHg3MkY5MDc0OSwgMHg5REM5NkM1
MCwgMHhBOTc1QTc4QSwgMHg0NjQ1Q0M5MywKLQkweEEwMEEyODIxLCAweDRGM0E0MzM4LCAweDdC
ODY4OEUyLCAweDk0QjZFM0ZCLCAweDEyRkYxRjU2LCAweEZEQ0Y3NDRGLCAweEM5NzNCRjk1LCAw
eDI2NDNENDhDLAotCTB4ODVGNDE2OEQsIDB4NkFDNDdEOTQsIDB4NUU3OEI2NEUsIDB4QjE0OERE
NTcsIDB4MzcwMTIxRkEsIDB4RDgzMTRBRTMsIDB4RUM4RDgxMzksIDB4MDNCREVBMjAsCi0JMHhF
NUYyMEU5MiwgMHgwQUMyNjU4QiwgMHgzRTdFQUU1MSwgMHhEMTRFQzU0OCwgMHg1NzA3MzlFNSwg
MHhCODM3NTJGQywgMHg4QzhCOTkyNiwgMHg2M0JCRjIzRiwKLQkweDQ1RjgyNkIzLCAweEFBQzg0
REFBLCAweDlFNzQ4NjcwLCAweDcxNDRFRDY5LCAweEY3MEQxMUM0LCAweDE4M0Q3QURELCAweDJD
ODFCMTA3LCAweEMzQjFEQTFFLAotCTB4MjVGRTNFQUMsIDB4Q0FDRTU1QjUsIDB4RkU3MjlFNkYs
IDB4MTE0MkY1NzYsIDB4OTcwQjA5REIsIDB4NzgzQjYyQzIsIDB4NEM4N0E5MTgsIDB4QTNCN0My
MDEsCi0JMHgwRTA0NUJFQiwgMHhFMTM0MzBGMiwgMHhENTg4RkIyOCwgMHgzQUI4OTAzMSwgMHhC
Q0YxNkM5QywgMHg1M0MxMDc4NSwgMHg2NzdEQ0M1RiwgMHg4ODREQTc0NiwKLQkweDZFMDI0M0Y0
LCAweDgxMzIyOEVELCAweEI1OEVFMzM3LCAweDVBQkU4ODJFLCAweERDRjc3NDgzLCAweDMzQzcx
RjlBLCAweDA3N0JENDQwLCAweEU4NEJCRjU5LAotCTB4Q0UwODZCRDUsIDB4MjEzODAwQ0MsIDB4
MTU4NENCMTYsIDB4RkFCNEEwMEYsIDB4N0NGRDVDQTIsIDB4OTNDRDM3QkIsIDB4QTc3MUZDNjEs
IDB4NDg0MTk3NzgsCi0JMHhBRTBFNzNDQSwgMHg0MTNFMThEMywgMHg3NTgyRDMwOSwgMHg5QUIy
QjgxMCwgMHgxQ0ZCNDRCRCwgMHhGM0NCMkZBNCwgMHhDNzc3RTQ3RSwgMHgyODQ3OEY2NywKLQkw
eDhCRjA0RDY2LCAweDY0QzAyNjdGLCAweDUwN0NFREE1LCAweEJGNEM4NkJDLCAweDM5MDU3QTEx
LCAweEQ2MzUxMTA4LCAweEUyODlEQUQyLCAweDBEQjlCMUNCLAotCTB4RUJGNjU1NzksIDB4MDRD
NjNFNjAsIDB4MzA3QUY1QkEsIDB4REY0QTlFQTMsIDB4NTkwMzYyMEUsIDB4QjYzMzA5MTcsIDB4
ODI4RkMyQ0QsIDB4NkRCRkE5RDQsCi0JMHg0QkZDN0Q1OCwgMHhBNENDMTY0MSwgMHg5MDcwREQ5
QiwgMHg3RjQwQjY4MiwgMHhGOTA5NEEyRiwgMHgxNjM5MjEzNiwgMHgyMjg1RUFFQywgMHhDREI1
ODFGNSwKLQkweDJCRkE2NTQ3LCAweEM0Q0EwRTVFLCAweEYwNzZDNTg0LCAweDFGNDZBRTlELCAw
eDk5MEY1MjMwLCAweDc2M0YzOTI5LCAweDQyODNGMkYzLCAweEFEQjM5OUVBLAotCTB4MUMwOEI3
RDYsIDB4RjMzOERDQ0YsIDB4Qzc4NDE3MTUsIDB4MjhCNDdDMEMsIDB4QUVGRDgwQTEsIDB4NDFD
REVCQjgsIDB4NzU3MTIwNjIsIDB4OUE0MTRCN0IsCi0JMHg3QzBFQUZDOSwgMHg5MzNFQzREMCwg
MHhBNzgyMEYwQSwgMHg0OEIyNjQxMywgMHhDRUZCOThCRSwgMHgyMUNCRjNBNywgMHgxNTc3Mzg3
RCwgMHhGQTQ3NTM2NCwKLQkweERDMDQ4N0U4LCAweDMzMzRFQ0YxLCAweDA3ODgyNzJCLCAweEU4
Qjg0QzMyLCAweDZFRjFCMDlGLCAweDgxQzFEQjg2LCAweEI1N0QxMDVDLCAweDVBNEQ3QjQ1LAot
CTB4QkMwMjlGRjcsIDB4NTMzMkY0RUUsIDB4Njc4RTNGMzQsIDB4ODhCRTU0MkQsIDB4MEVGN0E4
ODAsIDB4RTFDN0MzOTksIDB4RDU3QjA4NDMsIDB4M0E0QjYzNUEsCi0JMHg5OUZDQTE1QiwgMHg3
NkNDQ0E0MiwgMHg0MjcwMDE5OCwgMHhBRDQwNkE4MSwgMHgyQjA5OTYyQywgMHhDNDM5RkQzNSwg
MHhGMDg1MzZFRiwgMHgxRkI1NURGNiwKLQkweEY5RkFCOTQ0LCAweDE2Q0FEMjVELCAweDIyNzYx
OTg3LCAweENENDY3MjlFLCAweDRCMEY4RTMzLCAweEE0M0ZFNTJBLCAweDkwODMyRUYwLCAweDdG
QjM0NUU5LAotCTB4NTlGMDkxNjUsIDB4QjZDMEZBN0MsIDB4ODI3QzMxQTYsIDB4NkQ0QzVBQkYs
IDB4RUIwNUE2MTIsIDB4MDQzNUNEMEIsIDB4MzA4OTA2RDEsIDB4REZCOTZEQzgsCi0JMHgzOUY2
ODk3QSwgMHhENkM2RTI2MywgMHhFMjdBMjlCOSwgMHgwRDRBNDJBMCwgMHg4QjAzQkUwRCwgMHg2
NDMzRDUxNCwgMHg1MDhGMUVDRSwgMHhCRkJGNzVENywKLQkweDEyMENFQzNELCAweEZEM0M4NzI0
LCAweEM5ODA0Q0ZFLCAweDI2QjAyN0U3LCAweEEwRjlEQjRBLCAweDRGQzlCMDUzLCAweDdCNzU3
Qjg5LCAweDk0NDUxMDkwLAotCTB4NzIwQUY0MjIsIDB4OUQzQTlGM0IsIDB4QTk4NjU0RTEsIDB4
NDZCNjNGRjgsIDB4QzBGRkMzNTUsIDB4MkZDRkE4NEMsIDB4MUI3MzYzOTYsIDB4RjQ0MzA4OEYs
Ci0JMHhEMjAwREMwMywgMHgzRDMwQjcxQSwgMHgwOThDN0NDMCwgMHhFNkJDMTdEOSwgMHg2MEY1
RUI3NCwgMHg4RkM1ODA2RCwgMHhCQjc5NEJCNywgMHg1NDQ5MjBBRSwKLQkweEIyMDZDNDFDLCAw
eDVEMzZBRjA1LCAweDY5OEE2NERGLCAweDg2QkEwRkM2LCAweDAwRjNGMzZCLCAweEVGQzM5ODcy
LCAweERCN0Y1M0E4LCAweDM0NEYzOEIxLAotCTB4OTdGOEZBQjAsIDB4NzhDODkxQTksIDB4NEM3
NDVBNzMsIDB4QTM0NDMxNkEsIDB4MjUwRENEQzcsIDB4Q0EzREE2REUsIDB4RkU4MTZEMDQsIDB4
MTFCMTA2MUQsCi0JMHhGN0ZFRTJBRiwgMHgxOENFODlCNiwgMHgyQzcyNDI2QywgMHhDMzQyMjk3
NSwgMHg0NTBCRDVEOCwgMHhBQTNCQkVDMSwgMHg5RTg3NzUxQiwgMHg3MUI3MUUwMiwKLQkweDU3
RjRDQThFLCAweEI4QzRBMTk3LCAweDhDNzg2QTRELCAweDYzNDgwMTU0LCAweEU1MDFGREY5LCAw
eDBBMzE5NkUwLCAweDNFOEQ1RDNBLCAweEQxQkQzNjIzLAotCTB4MzdGMkQyOTEsIDB4RDhDMkI5
ODgsIDB4RUM3RTcyNTIsIDB4MDM0RTE5NEIsIDB4ODUwN0U1RTYsIDB4NkEzNzhFRkYsIDB4NUU4
QjQ1MjUsIDB4QjFCQjJFM0MKLX07Ci0KLS8qCi0gKiBlbmQgb2YgdGhlIENSQyBsb29rdXAgdGFi
bGUgY3JjX3RhYmxlaWw4X283MgotICovCi0KLQotCi0vKgotICogVGhlIGZvbGxvd2luZyBDUkMg
bG9va3VwIHRhYmxlIHdhcyBnZW5lcmF0ZWQgYXV0b21hZ2ljYWxseSB1c2luZyB0aGUKLSAqIGZv
bGxvd2luZyBtb2RlbCBwYXJhbWV0ZXJzOgotICoKLSAqIEdlbmVyYXRvciBQb2x5bm9taWFsID0g
Li4uLi4uLi4uLi4uLi4uLi4gMHgxRURDNkY0MQotICogR2VuZXJhdG9yIFBvbHlub21pYWwgTGVu
Z3RoID0gLi4uLi4uLi4uLiAzMiBiaXRzCi0gKiBSZWZsZWN0ZWQgQml0cyA9IC4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uIFRSVUUKLSAqIFRhYmxlIEdlbmVyYXRpb24gT2Zmc2V0ID0gLi4uLi4uLi4u
Li4uLi4gMzIgYml0cwotICogTnVtYmVyIG9mIFNsaWNlcyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4u
LiA4IHNsaWNlcwotICogU2xpY2UgTGVuZ3RocyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4
IDggOCA4IDggOCA4IDgKLSAqIERpcmVjdG9yeSBOYW1lID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4gLlwKLSAqIEZpbGUgTmFtZSA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gOHgyNTZf
dGFibGVzLmMKLSAqLwotCi1zdGF0aWMgY29uc3QgdWludDMyX3Qgc2N0cF9jcmNfdGFibGVpbDhf
bzgwWzI1Nl0gPQotewotCTB4MDAwMDAwMDAsIDB4NjgwMzJDQzgsIDB4RDAwNjU5OTAsIDB4Qjgw
NTc1NTgsIDB4QTVFMEM1RDEsIDB4Q0RFM0U5MTksIDB4NzVFNjlDNDEsIDB4MURFNUIwODksCi0J
MHg0RTJERkQ1MywgMHgyNjJFRDE5QiwgMHg5RTJCQTRDMywgMHhGNjI4ODgwQiwgMHhFQkNEMzg4
MiwgMHg4M0NFMTQ0QSwgMHgzQkNCNjExMiwgMHg1M0M4NEREQSwKLQkweDlDNUJGQUE2LCAweEY0
NThENjZFLCAweDRDNURBMzM2LCAweDI0NUU4RkZFLCAweDM5QkIzRjc3LCAweDUxQjgxM0JGLCAw
eEU5QkQ2NkU3LCAweDgxQkU0QTJGLAotCTB4RDI3NjA3RjUsIDB4QkE3NTJCM0QsIDB4MDI3MDVF
NjUsIDB4NkE3MzcyQUQsIDB4Nzc5NkMyMjQsIDB4MUY5NUVFRUMsIDB4QTc5MDlCQjQsIDB4Q0Y5
M0I3N0MsCi0JMHgzRDVCODNCRCwgMHg1NTU4QUY3NSwgMHhFRDVEREEyRCwgMHg4NTVFRjZFNSwg
MHg5OEJCNDY2QywgMHhGMEI4NkFBNCwgMHg0OEJEMUZGQywgMHgyMEJFMzMzNCwKLQkweDczNzY3
RUVFLCAweDFCNzU1MjI2LCAweEEzNzAyNzdFLCAweENCNzMwQkI2LCAweEQ2OTZCQjNGLCAweEJF
OTU5N0Y3LCAweDA2OTBFMkFGLCAweDZFOTNDRTY3LAotCTB4QTEwMDc5MUIsIDB4QzkwMzU1RDMs
IDB4NzEwNjIwOEIsIDB4MTkwNTBDNDMsIDB4MDRFMEJDQ0EsIDB4NkNFMzkwMDIsIDB4RDRFNkU1
NUEsIDB4QkNFNUM5OTIsCi0JMHhFRjJEODQ0OCwgMHg4NzJFQTg4MCwgMHgzRjJCREREOCwgMHg1
NzI4RjExMCwgMHg0QUNENDE5OSwgMHgyMkNFNkQ1MSwgMHg5QUNCMTgwOSwgMHhGMkM4MzRDMSwK
LQkweDdBQjcwNzdBLCAweDEyQjQyQkIyLCAweEFBQjE1RUVBLCAweEMyQjI3MjIyLCAweERGNTdD
MkFCLCAweEI3NTRFRTYzLCAweDBGNTE5QjNCLCAweDY3NTJCN0YzLAotCTB4MzQ5QUZBMjksIDB4
NUM5OUQ2RTEsIDB4RTQ5Q0EzQjksIDB4OEM5RjhGNzEsIDB4OTE3QTNGRjgsIDB4Rjk3OTEzMzAs
IDB4NDE3QzY2NjgsIDB4Mjk3RjRBQTAsCi0JMHhFNkVDRkREQywgMHg4RUVGRDExNCwgMHgzNkVB
QTQ0QywgMHg1RUU5ODg4NCwgMHg0MzBDMzgwRCwgMHgyQjBGMTRDNSwgMHg5MzBBNjE5RCwgMHhG
QjA5NEQ1NSwKLQkweEE4QzEwMDhGLCAweEMwQzIyQzQ3LCAweDc4Qzc1OTFGLCAweDEwQzQ3NUQ3
LCAweDBEMjFDNTVFLCAweDY1MjJFOTk2LCAweEREMjc5Q0NFLCAweEI1MjRCMDA2LAotCTB4NDdF
Qzg0QzcsIDB4MkZFRkE4MEYsIDB4OTdFQURENTcsIDB4RkZFOUYxOUYsIDB4RTIwQzQxMTYsIDB4
OEEwRjZEREUsIDB4MzIwQTE4ODYsIDB4NUEwOTM0NEUsCi0JMHgwOUMxNzk5NCwgMHg2MUMyNTU1
QywgMHhEOUM3MjAwNCwgMHhCMUM0MENDQywgMHhBQzIxQkM0NSwgMHhDNDIyOTA4RCwgMHg3QzI3
RTVENSwgMHgxNDI0QzkxRCwKLQkweERCQjc3RTYxLCAweEIzQjQ1MkE5LCAweDBCQjEyN0YxLCAw
eDYzQjIwQjM5LCAweDdFNTdCQkIwLCAweDE2NTQ5Nzc4LCAweEFFNTFFMjIwLCAweEM2NTJDRUU4
LAotCTB4OTU5QTgzMzIsIDB4RkQ5OUFGRkEsIDB4NDU5Q0RBQTIsIDB4MkQ5RkY2NkEsIDB4MzA3
QTQ2RTMsIDB4NTg3OTZBMkIsIDB4RTA3QzFGNzMsIDB4ODg3RjMzQkIsCi0JMHhGNTZFMEVGNCwg
MHg5RDZEMjIzQywgMHgyNTY4NTc2NCwgMHg0RDZCN0JBQywgMHg1MDhFQ0IyNSwgMHgzODhERTdF
RCwgMHg4MDg4OTJCNSwgMHhFODhCQkU3RCwKLQkweEJCNDNGM0E3LCAweEQzNDBERjZGLCAweDZC
NDVBQTM3LCAweDAzNDY4NkZGLCAweDFFQTMzNjc2LCAweDc2QTAxQUJFLCAweENFQTU2RkU2LCAw
eEE2QTY0MzJFLAotCTB4NjkzNUY0NTIsIDB4MDEzNkQ4OUEsIDB4QjkzM0FEQzIsIDB4RDEzMDgx
MEEsIDB4Q0NENTMxODMsIDB4QTRENjFENEIsIDB4MUNEMzY4MTMsIDB4NzREMDQ0REIsCi0JMHgy
NzE4MDkwMSwgMHg0RjFCMjVDOSwgMHhGNzFFNTA5MSwgMHg5RjFEN0M1OSwgMHg4MkY4Q0NEMCwg
MHhFQUZCRTAxOCwgMHg1MkZFOTU0MCwgMHgzQUZEQjk4OCwKLQkweEM4MzU4RDQ5LCAweEEwMzZB
MTgxLCAweDE4MzNENEQ5LCAweDcwMzBGODExLCAweDZERDU0ODk4LCAweDA1RDY2NDUwLCAweEJE
RDMxMTA4LCAweEQ1RDAzREMwLAotCTB4ODYxODcwMUEsIDB4RUUxQjVDRDIsIDB4NTYxRTI5OEEs
IDB4M0UxRDA1NDIsIDB4MjNGOEI1Q0IsIDB4NEJGQjk5MDMsIDB4RjNGRUVDNUIsIDB4OUJGREMw
OTMsCi0JMHg1NDZFNzdFRiwgMHgzQzZENUIyNywgMHg4NDY4MkU3RiwgMHhFQzZCMDJCNywgMHhG
MThFQjIzRSwgMHg5OThEOUVGNiwgMHgyMTg4RUJBRSwgMHg0OThCQzc2NiwKLQkweDFBNDM4QUJD
LCAweDcyNDBBNjc0LCAweENBNDVEMzJDLCAweEEyNDZGRkU0LCAweEJGQTM0RjZELCAweEQ3QTA2
M0E1LCAweDZGQTUxNkZELCAweDA3QTYzQTM1LAotCTB4OEZEOTA5OEUsIDB4RTdEQTI1NDYsIDB4
NUZERjUwMUUsIDB4MzdEQzdDRDYsIDB4MkEzOUNDNUYsIDB4NDIzQUUwOTcsIDB4RkEzRjk1Q0Ys
IDB4OTIzQ0I5MDcsCi0JMHhDMUY0RjRERCwgMHhBOUY3RDgxNSwgMHgxMUYyQUQ0RCwgMHg3OUYx
ODE4NSwgMHg2NDE0MzEwQywgMHgwQzE3MURDNCwgMHhCNDEyNjg5QywgMHhEQzExNDQ1NCwKLQkw
eDEzODJGMzI4LCAweDdCODFERkUwLCAweEMzODRBQUI4LCAweEFCODc4NjcwLCAweEI2NjIzNkY5
LCAweERFNjExQTMxLCAweDY2NjQ2RjY5LCAweDBFNjc0M0ExLAotCTB4NURBRjBFN0IsIDB4MzVB
QzIyQjMsIDB4OERBOTU3RUIsIDB4RTVBQTdCMjMsIDB4Rjg0RkNCQUEsIDB4OTA0Q0U3NjIsIDB4
Mjg0OTkyM0EsIDB4NDA0QUJFRjIsCi0JMHhCMjgyOEEzMywgMHhEQTgxQTZGQiwgMHg2Mjg0RDNB
MywgMHgwQTg3RkY2QiwgMHgxNzYyNEZFMiwgMHg3RjYxNjMyQSwgMHhDNzY0MTY3MiwgMHhBRjY3
M0FCQSwKLQkweEZDQUY3NzYwLCAweDk0QUM1QkE4LCAweDJDQTkyRUYwLCAweDQ0QUEwMjM4LCAw
eDU5NEZCMkIxLCAweDMxNEM5RTc5LCAweDg5NDlFQjIxLCAweEUxNEFDN0U5LAotCTB4MkVEOTcw
OTUsIDB4NDZEQTVDNUQsIDB4RkVERjI5MDUsIDB4OTZEQzA1Q0QsIDB4OEIzOUI1NDQsIDB4RTMz
QTk5OEMsIDB4NUIzRkVDRDQsIDB4MzMzQ0MwMUMsCi0JMHg2MEY0OERDNiwgMHgwOEY3QTEwRSwg
MHhCMEYyRDQ1NiwgMHhEOEYxRjg5RSwgMHhDNTE0NDgxNywgMHhBRDE3NjRERiwgMHgxNTEyMTE4
NywgMHg3RDExM0Q0RgotfTsKLQotLyoKLSAqIGVuZCBvZiB0aGUgQ1JDIGxvb2t1cCB0YWJsZSBj
cmNfdGFibGVpbDhfbzgwCi0gKi8KLQotCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIENSQyBsb29r
dXAgdGFibGUgd2FzIGdlbmVyYXRlZCBhdXRvbWFnaWNhbGx5IHVzaW5nIHRoZQotICogZm9sbG93
aW5nIG1vZGVsIHBhcmFtZXRlcnM6Ci0gKgotICogR2VuZXJhdG9yIFBvbHlub21pYWwgPSAuLi4u
Li4uLi4uLi4uLi4uLiAweDFFREM2RjQxCi0gKiBHZW5lcmF0b3IgUG9seW5vbWlhbCBMZW5ndGgg
PSAuLi4uLi4uLi4uIDMyIGJpdHMKLSAqIFJlZmxlY3RlZCBCaXRzID0gLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4gVFJVRQotICogVGFibGUgR2VuZXJhdGlvbiBPZmZzZXQgPSAuLi4uLi4uLi4uLi4u
LiAzMiBiaXRzCi0gKiBOdW1iZXIgb2YgU2xpY2VzID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDgg
c2xpY2VzCi0gKiBTbGljZSBMZW5ndGhzID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDggOCA4
IDggOCA4IDggOAotICogRGlyZWN0b3J5IE5hbWUgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAu
XAotICogRmlsZSBOYW1lID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4eDI1Nl90YWJs
ZXMuYwotICovCi0KLXN0YXRpYyBjb25zdCB1aW50MzJfdCBzY3RwX2NyY190YWJsZWlsOF9vODhb
MjU2XSA9Ci17Ci0JMHgwMDAwMDAwMCwgMHg0OTNDN0QyNywgMHg5Mjc4RkE0RSwgMHhEQjQ0ODc2
OSwgMHgyMTFEODI2RCwgMHg2ODIxRkY0QSwgMHhCMzY1NzgyMywgMHhGQTU5MDUwNCwKLQkweDQy
M0IwNERBLCAweDBCMDc3OUZELCAweEQwNDNGRTk0LCAweDk5N0Y4M0IzLCAweDYzMjY4NkI3LCAw
eDJBMUFGQjkwLCAweEYxNUU3Q0Y5LCAweEI4NjIwMURFLAotCTB4ODQ3NjA5QjQsIDB4Q0Q0QTc0
OTMsIDB4MTYwRUYzRkEsIDB4NUYzMjhFREQsIDB4QTU2QjhCRDksIDB4RUM1N0Y2RkUsIDB4Mzcx
MzcxOTcsIDB4N0UyRjBDQjAsCi0JMHhDNjREMEQ2RSwgMHg4RjcxNzA0OSwgMHg1NDM1RjcyMCwg
MHgxRDA5OEEwNywgMHhFNzUwOEYwMywgMHhBRTZDRjIyNCwgMHg3NTI4NzU0RCwgMHgzQzE0MDg2
QSwKLQkweDBEMDA2NTk5LCAweDQ0M0MxOEJFLCAweDlGNzg5RkQ3LCAweEQ2NDRFMkYwLCAweDJD
MURFN0Y0LCAweDY1MjE5QUQzLCAweEJFNjUxREJBLCAweEY3NTk2MDlELAotCTB4NEYzQjYxNDMs
IDB4MDYwNzFDNjQsIDB4REQ0MzlCMEQsIDB4OTQ3RkU2MkEsIDB4NkUyNkUzMkUsIDB4MjcxQTlF
MDksIDB4RkM1RTE5NjAsIDB4QjU2MjY0NDcsCi0JMHg4OTc2NkMyRCwgMHhDMDRBMTEwQSwgMHgx
QjBFOTY2MywgMHg1MjMyRUI0NCwgMHhBODZCRUU0MCwgMHhFMTU3OTM2NywgMHgzQTEzMTQwRSwg
MHg3MzJGNjkyOSwKLQkweENCNEQ2OEY3LCAweDgyNzExNUQwLCAweDU5MzU5MkI5LCAweDEwMDlF
RjlFLCAweEVBNTBFQTlBLCAweEEzNkM5N0JELCAweDc4MjgxMEQ0LCAweDMxMTQ2REYzLAotCTB4
MUEwMENCMzIsIDB4NTMzQ0I2MTUsIDB4ODg3ODMxN0MsIDB4QzE0NDRDNUIsIDB4M0IxRDQ5NUYs
IDB4NzIyMTM0NzgsIDB4QTk2NUIzMTEsIDB4RTA1OUNFMzYsCi0JMHg1ODNCQ0ZFOCwgMHgxMTA3
QjJDRiwgMHhDQTQzMzVBNiwgMHg4MzdGNDg4MSwgMHg3OTI2NEQ4NSwgMHgzMDFBMzBBMiwgMHhF
QjVFQjdDQiwgMHhBMjYyQ0FFQywKLQkweDlFNzZDMjg2LCAweEQ3NEFCRkExLCAweDBDMEUzOEM4
LCAweDQ1MzI0NUVGLCAweEJGNkI0MEVCLCAweEY2NTczRENDLCAweDJEMTNCQUE1LCAweDY0MkZD
NzgyLAotCTB4REM0REM2NUMsIDB4OTU3MUJCN0IsIDB4NEUzNTNDMTIsIDB4MDcwOTQxMzUsIDB4
RkQ1MDQ0MzEsIDB4QjQ2QzM5MTYsIDB4NkYyOEJFN0YsIDB4MjYxNEMzNTgsCi0JMHgxNzAwQUVB
QiwgMHg1RTNDRDM4QywgMHg4NTc4NTRFNSwgMHhDQzQ0MjlDMiwgMHgzNjFEMkNDNiwgMHg3RjIx
NTFFMSwgMHhBNDY1RDY4OCwgMHhFRDU5QUJBRiwKLQkweDU1M0JBQTcxLCAweDFDMDdENzU2LCAw
eEM3NDM1MDNGLCAweDhFN0YyRDE4LCAweDc0MjYyODFDLCAweDNEMUE1NTNCLCAweEU2NUVEMjUy
LCAweEFGNjJBRjc1LAotCTB4OTM3NkE3MUYsIDB4REE0QURBMzgsIDB4MDEwRTVENTEsIDB4NDgz
MjIwNzYsIDB4QjI2QjI1NzIsIDB4RkI1NzU4NTUsIDB4MjAxM0RGM0MsIDB4NjkyRkEyMUIsCi0J
MHhEMTREQTNDNSwgMHg5ODcxREVFMiwgMHg0MzM1NTk4QiwgMHgwQTA5MjRBQywgMHhGMDUwMjFB
OCwgMHhCOTZDNUM4RiwgMHg2MjI4REJFNiwgMHgyQjE0QTZDMSwKLQkweDM0MDE5NjY0LCAweDdE
M0RFQjQzLCAweEE2Nzk2QzJBLCAweEVGNDUxMTBELCAweDE1MUMxNDA5LCAweDVDMjA2OTJFLCAw
eDg3NjRFRTQ3LCAweENFNTg5MzYwLAotCTB4NzYzQTkyQkUsIDB4M0YwNkVGOTksIDB4RTQ0MjY4
RjAsIDB4QUQ3RTE1RDcsIDB4NTcyNzEwRDMsIDB4MUUxQjZERjQsIDB4QzU1RkVBOUQsIDB4OEM2
Mzk3QkEsCi0JMHhCMDc3OUZEMCwgMHhGOTRCRTJGNywgMHgyMjBGNjU5RSwgMHg2QjMzMThCOSwg
MHg5MTZBMURCRCwgMHhEODU2NjA5QSwgMHgwMzEyRTdGMywgMHg0QTJFOUFENCwKLQkweEYyNEM5
QjBBLCAweEJCNzBFNjJELCAweDYwMzQ2MTQ0LCAweDI5MDgxQzYzLCAweEQzNTExOTY3LCAweDlB
NkQ2NDQwLCAweDQxMjlFMzI5LCAweDA4MTU5RTBFLAotCTB4MzkwMUYzRkQsIDB4NzAzRDhFREEs
IDB4QUI3OTA5QjMsIDB4RTI0NTc0OTQsIDB4MTgxQzcxOTAsIDB4NTEyMDBDQjcsIDB4OEE2NDhC
REUsIDB4QzM1OEY2RjksCi0JMHg3QjNBRjcyNywgMHgzMjA2OEEwMCwgMHhFOTQyMEQ2OSwgMHhB
MDdFNzA0RSwgMHg1QTI3NzU0QSwgMHgxMzFCMDg2RCwgMHhDODVGOEYwNCwgMHg4MTYzRjIyMywK
LQkweEJENzdGQTQ5LCAweEY0NEI4NzZFLCAweDJGMEYwMDA3LCAweDY2MzM3RDIwLCAweDlDNkE3
ODI0LCAweEQ1NTYwNTAzLCAweDBFMTI4MjZBLCAweDQ3MkVGRjRELAotCTB4RkY0Q0ZFOTMsIDB4
QjY3MDgzQjQsIDB4NkQzNDA0REQsIDB4MjQwODc5RkEsIDB4REU1MTdDRkUsIDB4OTc2RDAxRDks
IDB4NEMyOTg2QjAsIDB4MDUxNUZCOTcsCi0JMHgyRTAxNUQ1NiwgMHg2NzNEMjA3MSwgMHhCQzc5
QTcxOCwgMHhGNTQ1REEzRiwgMHgwRjFDREYzQiwgMHg0NjIwQTIxQywgMHg5RDY0MjU3NSwgMHhE
NDU4NTg1MiwKLQkweDZDM0E1OThDLCAweDI1MDYyNEFCLCAweEZFNDJBM0MyLCAweEI3N0VERUU1
LCAweDREMjdEQkUxLCAweDA0MUJBNkM2LCAweERGNUYyMUFGLCAweDk2NjM1Qzg4LAotCTB4QUE3
NzU0RTIsIDB4RTM0QjI5QzUsIDB4MzgwRkFFQUMsIDB4NzEzM0QzOEIsIDB4OEI2QUQ2OEYsIDB4
QzI1NkFCQTgsIDB4MTkxMjJDQzEsIDB4NTAyRTUxRTYsCi0JMHhFODRDNTAzOCwgMHhBMTcwMkQx
RiwgMHg3QTM0QUE3NiwgMHgzMzA4RDc1MSwgMHhDOTUxRDI1NSwgMHg4MDZEQUY3MiwgMHg1QjI5
MjgxQiwgMHgxMjE1NTUzQywKLQkweDIzMDEzOENGLCAweDZBM0Q0NUU4LCAweEIxNzlDMjgxLCAw
eEY4NDVCRkE2LCAweDAyMUNCQUEyLCAweDRCMjBDNzg1LCAweDkwNjQ0MEVDLCAweEQ5NTgzRENC
LAotCTB4NjEzQTNDMTUsIDB4MjgwNjQxMzIsIDB4RjM0MkM2NUIsIDB4QkE3RUJCN0MsIDB4NDAy
N0JFNzgsIDB4MDkxQkMzNUYsIDB4RDI1RjQ0MzYsIDB4OUI2MzM5MTEsCi0JMHhBNzc3MzE3Qiwg
MHhFRTRCNEM1QywgMHgzNTBGQ0IzNSwgMHg3QzMzQjYxMiwgMHg4NjZBQjMxNiwgMHhDRjU2Q0Uz
MSwgMHgxNDEyNDk1OCwgMHg1RDJFMzQ3RiwKLQkweEU1NEMzNUExLCAweEFDNzA0ODg2LCAweDc3
MzRDRkVGLCAweDNFMDhCMkM4LCAweEM0NTFCN0NDLCAweDhENkRDQUVCLCAweDU2Mjk0RDgyLCAw
eDFGMTUzMEE1Ci19OwotCi0vKgotICogZW5kIG9mIHRoZSBDUkMgbG9va3VwIHRhYmxlIGNyY190
YWJsZWlsOF9vODgKLSAqLwotCi0KLXN0YXRpYyB1aW50MzJfdAotc2N0cF9jcmMzMmNfc2I4XzY0
X2JpdCh1aW50MzJfdCBjcmMsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIgKnBfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsZW5ndGgsCi0g
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluaXRfYnl0ZXMpCi17Ci0JdWludDMyX3Qg
bGk7Ci0JdWludDMyX3QgdGVybTEsIHRlcm0yOwotCXVpbnQzMl90IHJ1bm5pbmdfbGVuZ3RoOwot
CXVpbnQzMl90IGVuZF9ieXRlczsKLQotCXJ1bm5pbmdfbGVuZ3RoID0gKChsZW5ndGggLSBpbml0
X2J5dGVzKSAvIDgpICogODsKLQllbmRfYnl0ZXMgPSBsZW5ndGggLSBpbml0X2J5dGVzIC0gcnVu
bmluZ19sZW5ndGg7Ci0KLQlmb3IgKGxpID0gMDsgbGkgPCBpbml0X2J5dGVzOyBsaSsrKQotCQlj
cmMgPSBzY3RwX2NyY190YWJsZWlsOF9vMzJbKGNyYyBeICpwX2J1ZisrKSAmIDB4MDAwMDAwRkZd
IF4KLQkJICAgIChjcmMgPj4gOCk7Ci0JZm9yIChsaSA9IDA7IGxpIDwgcnVubmluZ19sZW5ndGgg
LyA4OyBsaSsrKSB7Ci0jaWYgQllURV9PUkRFUiA9PSBCSUdfRU5ESUFOCi0JCWNyYyBePSAqcF9i
dWYrKzsKLQkJY3JjIF49ICgqcF9idWYrKykgPDwgODsKLQkJY3JjIF49ICgqcF9idWYrKykgPDwg
MTY7Ci0JCWNyYyBePSAoKnBfYnVmKyspIDw8IDI0OwotI2Vsc2UKLQkJY3JjIF49ICooY29uc3Qg
dWludDMyX3QgKikgcF9idWY7Ci0JCXBfYnVmICs9IDQ7Ci0jZW5kaWYKLQkJdGVybTEgPSBzY3Rw
X2NyY190YWJsZWlsOF9vODhbY3JjICYgMHgwMDAwMDBGRl0gXgotCQkgICAgc2N0cF9jcmNfdGFi
bGVpbDhfbzgwWyhjcmMgPj4gOCkgJiAweDAwMDAwMEZGXTsKLQkJdGVybTIgPSBjcmMgPj4gMTY7
Ci0JCWNyYyA9IHRlcm0xIF4KLQkJICAgIHNjdHBfY3JjX3RhYmxlaWw4X283Mlt0ZXJtMiAmIDB4
MDAwMDAwRkZdIF4KLQkJICAgIHNjdHBfY3JjX3RhYmxlaWw4X282NFsodGVybTIgPj4gOCkgJiAw
eDAwMDAwMEZGXTsKLQotI2lmIEJZVEVfT1JERVIgPT0gQklHX0VORElBTgotCQljcmMgXj0gc2N0
cF9jcmNfdGFibGVpbDhfbzU2WypwX2J1ZisrXTsKLQkJY3JjIF49IHNjdHBfY3JjX3RhYmxlaWw4
X280OFsqcF9idWYrK107Ci0JCWNyYyBePSBzY3RwX2NyY190YWJsZWlsOF9vNDBbKnBfYnVmKytd
OwotCQljcmMgXj0gc2N0cF9jcmNfdGFibGVpbDhfbzMyWypwX2J1ZisrXTsKLSNlbHNlCi0JCXRl
cm0xID0gc2N0cF9jcmNfdGFibGVpbDhfbzU2WygqKGNvbnN0IHVpbnQzMl90ICopIHBfYnVmKSAm
IDB4MDAwMDAwRkZdIF4KLQkJICAgIHNjdHBfY3JjX3RhYmxlaWw4X280OFsoKCooY29uc3QgdWlu
dDMyX3QgKikgcF9idWYpID4+IDgpICYgMHgwMDAwMDBGRl07Ci0KLQkJdGVybTIgPSAoKihjb25z
dCB1aW50MzJfdCAqKSBwX2J1ZikgPj4gMTY7Ci0JCWNyYyA9IGNyYyBeCi0JCSAgICB0ZXJtMSBe
Ci0JCSAgICBzY3RwX2NyY190YWJsZWlsOF9vNDBbdGVybTIgJiAweDAwMDAwMEZGXSBeCi0JCSAg
ICBzY3RwX2NyY190YWJsZWlsOF9vMzJbKHRlcm0yID4+IDgpICYgMHgwMDAwMDBGRl07Ci0JCXBf
YnVmICs9IDQ7Ci0jZW5kaWYKLQl9Ci0JZm9yIChsaSA9IDA7IGxpIDwgZW5kX2J5dGVzOyBsaSsr
KQotCQljcmMgPSBzY3RwX2NyY190YWJsZWlsOF9vMzJbKGNyYyBeICpwX2J1ZisrKSAmIDB4MDAw
MDAwRkZdIF4KLQkJICAgIChjcmMgPj4gOCk7Ci0JcmV0dXJuIChjcmMpOwotfQotCi0KLS8qKgot
ICoKLSAqIFJvdXRpbmUgRGVzY3JpcHRpb246Ci0gKgotICogd2FybXMgdGhlIHRhYmxlcwotICoK
LSAqIEFyZ3VtZW50czoKLSAqCi0gKgkJbm9uZQotICoKLSAqIFJldHVybiB2YWx1ZToKLSAqCi0g
KgkJbm9uZQotICovCi1zdGF0aWMgdWludDMyX3QKLW11bHRpdGFibGVfY3JjMzJjKHVpbnQzMl90
IGNyYzMyYywKLSAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwK
LSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW5ndGgpCi17Ci0JdWludDMyX3QgdG9f
ZXZlbl93b3JkOwotCi0JaWYgKGxlbmd0aCA9PSAwKSB7Ci0JCXJldHVybiAoY3JjMzJjKTsKLQl9
Ci0JdG9fZXZlbl93b3JkID0gKDQgLSAoKCh1aW50cHRyX3QpIGJ1ZmZlcikgJiAweDMpKTsKLQly
ZXR1cm4gKHNjdHBfY3JjMzJjX3NiOF82NF9iaXQoY3JjMzJjLCBidWZmZXIsIGxlbmd0aCwgdG9f
ZXZlbl93b3JkKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCB1aW50MzJfdCBzY3RwX2NyY19jWzI1Nl0g
PSB7Ci0JMHgwMDAwMDAwMCwgMHhGMjZCODMwMywgMHhFMTNCNzBGNywgMHgxMzUwRjNGNCwKLQkw
eEM3OUE5NzFGLCAweDM1RjExNDFDLCAweDI2QTFFN0U4LCAweEQ0Q0E2NEVCLAotCTB4OEFEOTU4
Q0YsIDB4NzhCMkRCQ0MsIDB4NkJFMjI4MzgsIDB4OTk4OUFCM0IsCi0JMHg0RDQzQ0ZEMCwgMHhC
RjI4NENEMywgMHhBQzc4QkYyNywgMHg1RTEzM0MyNCwKLQkweDEwNUVDNzZGLCAweEUyMzU0NDZD
LCAweEYxNjVCNzk4LCAweDAzMEUzNDlCLAotCTB4RDdDNDUwNzAsIDB4MjVBRkQzNzMsIDB4MzZG
RjIwODcsIDB4QzQ5NEEzODQsCi0JMHg5QTg3OUZBMCwgMHg2OEVDMUNBMywgMHg3QkJDRUY1Nywg
MHg4OUQ3NkM1NCwKLQkweDVEMUQwOEJGLCAweEFGNzY4QkJDLCAweEJDMjY3ODQ4LCAweDRFNERG
QjRCLAotCTB4MjBCRDhFREUsIDB4RDJENjBEREQsIDB4QzE4NkZFMjksIDB4MzNFRDdEMkEsCi0J
MHhFNzI3MTlDMSwgMHgxNTRDOUFDMiwgMHgwNjFDNjkzNiwgMHhGNDc3RUEzNSwKLQkweEFBNjRE
NjExLCAweDU4MEY1NTEyLCAweDRCNUZBNkU2LCAweEI5MzQyNUU1LAotCTB4NkRGRTQxMEUsIDB4
OUY5NUMyMEQsIDB4OENDNTMxRjksIDB4N0VBRUIyRkEsCi0JMHgzMEUzNDlCMSwgMHhDMjg4Q0FC
MiwgMHhEMUQ4Mzk0NiwgMHgyM0IzQkE0NSwKLQkweEY3NzlERUFFLCAweDA1MTI1REFELCAweDE2
NDJBRTU5LCAweEU0MjkyRDVBLAotCTB4QkEzQTExN0UsIDB4NDg1MTkyN0QsIDB4NUIwMTYxODks
IDB4QTk2QUUyOEEsCi0JMHg3REEwODY2MSwgMHg4RkNCMDU2MiwgMHg5QzlCRjY5NiwgMHg2RUYw
NzU5NSwKLQkweDQxN0IxREJDLCAweEIzMTA5RUJGLCAweEEwNDA2RDRCLCAweDUyMkJFRTQ4LAot
CTB4ODZFMThBQTMsIDB4NzQ4QTA5QTAsIDB4NjdEQUZBNTQsIDB4OTVCMTc5NTcsCi0JMHhDQkEy
NDU3MywgMHgzOUM5QzY3MCwgMHgyQTk5MzU4NCwgMHhEOEYyQjY4NywKLQkweDBDMzhEMjZDLCAw
eEZFNTM1MTZGLCAweEVEMDNBMjlCLCAweDFGNjgyMTk4LAotCTB4NTEyNURBRDMsIDB4QTM0RTU5
RDAsIDB4QjAxRUFBMjQsIDB4NDI3NTI5MjcsCi0JMHg5NkJGNERDQywgMHg2NEQ0Q0VDRiwgMHg3
Nzg0M0QzQiwgMHg4NUVGQkUzOCwKLQkweERCRkM4MjFDLCAweDI5OTcwMTFGLCAweDNBQzdGMkVC
LCAweEM4QUM3MUU4LAotCTB4MUM2NjE1MDMsIDB4RUUwRDk2MDAsIDB4RkQ1RDY1RjQsIDB4MEYz
NkU2RjcsCi0JMHg2MUM2OTM2MiwgMHg5M0FEMTA2MSwgMHg4MEZERTM5NSwgMHg3Mjk2NjA5NiwK
LQkweEE2NUMwNDdELCAweDU0Mzc4NzdFLCAweDQ3Njc3NDhBLCAweEI1MENGNzg5LAotCTB4RUIx
RkNCQUQsIDB4MTk3NDQ4QUUsIDB4MEEyNEJCNUEsIDB4Rjg0RjM4NTksCi0JMHgyQzg1NUNCMiwg
MHhERUVFREZCMSwgMHhDREJFMkM0NSwgMHgzRkQ1QUY0NiwKLQkweDcxOTg1NDBELCAweDgzRjNE
NzBFLCAweDkwQTMyNEZBLCAweDYyQzhBN0Y5LAotCTB4QjYwMkMzMTIsIDB4NDQ2OTQwMTEsIDB4
NTczOUIzRTUsIDB4QTU1MjMwRTYsCi0JMHhGQjQxMENDMiwgMHgwOTJBOEZDMSwgMHgxQTdBN0Mz
NSwgMHhFODExRkYzNiwKLQkweDNDREI5QkRELCAweENFQjAxOERFLCAweERERTBFQjJBLCAweDJG
OEI2ODI5LAotCTB4ODJGNjNCNzgsIDB4NzA5REI4N0IsIDB4NjNDRDRCOEYsIDB4OTFBNkM4OEMs
Ci0JMHg0NTZDQUM2NywgMHhCNzA3MkY2NCwgMHhBNDU3REM5MCwgMHg1NjNDNUY5MywKLQkweDA4
MkY2M0I3LCAweEZBNDRFMEI0LCAweEU5MTQxMzQwLCAweDFCN0Y5MDQzLAotCTB4Q0ZCNUY0QTgs
IDB4M0RERTc3QUIsIDB4MkU4RTg0NUYsIDB4RENFNTA3NUMsCi0JMHg5MkE4RkMxNywgMHg2MEMz
N0YxNCwgMHg3MzkzOENFMCwgMHg4MUY4MEZFMywKLQkweDU1MzI2QjA4LCAweEE3NTlFODBCLCAw
eEI0MDkxQkZGLCAweDQ2NjI5OEZDLAotCTB4MTg3MUE0RDgsIDB4RUExQTI3REIsIDB4Rjk0QUQ0
MkYsIDB4MEIyMTU3MkMsCi0JMHhERkVCMzNDNywgMHgyRDgwQjBDNCwgMHgzRUQwNDMzMCwgMHhD
Q0JCQzAzMywKLQkweEEyNEJCNUE2LCAweDUwMjAzNkE1LCAweDQzNzBDNTUxLCAweEIxMUI0NjUy
LAotCTB4NjVEMTIyQjksIDB4OTdCQUExQkEsIDB4ODRFQTUyNEUsIDB4NzY4MUQxNEQsCi0JMHgy
ODkyRUQ2OSwgMHhEQUY5NkU2QSwgMHhDOUE5OUQ5RSwgMHgzQkMyMUU5RCwKLQkweEVGMDg3QTc2
LCAweDFENjNGOTc1LCAweDBFMzMwQTgxLCAweEZDNTg4OTgyLAotCTB4QjIxNTcyQzksIDB4NDA3
RUYxQ0EsIDB4NTMyRTAyM0UsIDB4QTE0NTgxM0QsCi0JMHg3NThGRTVENiwgMHg4N0U0NjZENSwg
MHg5NEI0OTUyMSwgMHg2NkRGMTYyMiwKLQkweDM4Q0MyQTA2LCAweENBQTdBOTA1LCAweEQ5Rjc1
QUYxLCAweDJCOUNEOUYyLAotCTB4RkY1NkJEMTksIDB4MEQzRDNFMUEsIDB4MUU2RENERUUsIDB4
RUMwNjRFRUQsCi0JMHhDMzhEMjZDNCwgMHgzMUU2QTVDNywgMHgyMkI2NTYzMywgMHhEMERERDUz
MCwKLQkweDA0MTdCMURCLCAweEY2N0MzMkQ4LCAweEU1MkNDMTJDLCAweDE3NDc0MjJGLAotCTB4
NDk1NDdFMEIsIDB4QkIzRkZEMDgsIDB4QTg2RjBFRkMsIDB4NUEwNDhERkYsCi0JMHg4RUNFRTkx
NCwgMHg3Q0E1NkExNywgMHg2RkY1OTlFMywgMHg5RDlFMUFFMCwKLQkweEQzRDNFMUFCLCAweDIx
Qjg2MkE4LCAweDMyRTg5MTVDLCAweEMwODMxMjVGLAotCTB4MTQ0OTc2QjQsIDB4RTYyMkY1Qjcs
IDB4RjU3MjA2NDMsIDB4MDcxOTg1NDAsCi0JMHg1OTBBQjk2NCwgMHhBQjYxM0E2NywgMHhCODMx
Qzk5MywgMHg0QTVBNEE5MCwKLQkweDlFOTAyRTdCLCAweDZDRkJBRDc4LCAweDdGQUI1RThDLCAw
eDhEQzBERDhGLAotCTB4RTMzMEE4MUEsIDB4MTE1QjJCMTksIDB4MDIwQkQ4RUQsIDB4RjA2MDVC
RUUsCi0JMHgyNEFBM0YwNSwgMHhENkMxQkMwNiwgMHhDNTkxNEZGMiwgMHgzN0ZBQ0NGMSwKLQkw
eDY5RTlGMEQ1LCAweDlCODI3M0Q2LCAweDg4RDI4MDIyLCAweDdBQjkwMzIxLAotCTB4QUU3MzY3
Q0EsIDB4NUMxOEU0QzksIDB4NEY0ODE3M0QsIDB4QkQyMzk0M0UsCi0JMHhGMzZFNkY3NSwgMHgw
MTA1RUM3NiwgMHgxMjU1MUY4MiwgMHhFMDNFOUM4MSwKLQkweDM0RjRGODZBLCAweEM2OUY3QjY5
LCAweEQ1Q0Y4ODlELCAweDI3QTQwQjlFLAotCTB4NzlCNzM3QkEsIDB4OEJEQ0I0QjksIDB4OTg4
QzQ3NEQsIDB4NkFFN0M0NEUsCi0JMHhCRTJEQTBBNSwgMHg0QzQ2MjNBNiwgMHg1RjE2RDA1Miwg
MHhBRDdENTM1MSwKLX07Ci0KLQotI2RlZmluZSBTQ1RQX0NSQzMyQyhjLGQpIChjPShjPj44KV5z
Y3RwX2NyY19jWyhjXihkKSkmMHhGRl0pCi0KLXN0YXRpYyB1aW50MzJfdAotc2luZ2xldGFibGVf
Y3JjMzJjKHVpbnQzMl90IGNyYzMyYywKLSAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyICpidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0aCkK
LXsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewot
CQlTQ1RQX0NSQzMyQyhjcmMzMmMsIGJ1ZmZlcltpXSk7Ci0JfQotCXJldHVybiAoY3JjMzJjKTsK
LX0KLQotdWludDMyX3QgY2FsY3VsYXRlX2NyYzMyYyh1aW50MzJfdCBjcmMzMmMsCi0gICAgICAg
ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKLSAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IGxlbmd0aCk7Ci0KLXVpbnQzMl90IGNhbGN1bGF0ZV9jcmMzMmModWludDMy
X3QgY3JjMzJjLAotICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIs
Ci0gICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW5ndGgpCi17Ci0JaWYgKGxlbmd0aCA8
IDQpIHsKLQkJcmV0dXJuIChzaW5nbGV0YWJsZV9jcmMzMmMoY3JjMzJjLCBidWZmZXIsIGxlbmd0
aCkpOwotCX0gZWxzZSB7Ci0JCXJldHVybiAobXVsdGl0YWJsZV9jcmMzMmMoY3JjMzJjLCBidWZm
ZXIsIGxlbmd0aCkpOwotCX0KLX0KLQotdWludDMyX3Qgc2N0cF9maW5hbGl6ZV9jcmMzMmModWlu
dDMyX3QgY3JjMzJjKTsKLXVpbnQzMl90IHNjdHBfZmluYWxpemVfY3JjMzJjKHVpbnQzMl90IGNy
YzMyYykKLXsKLQl1aW50MzJfdCByZXN1bHQ7Ci0jaWYgQllURV9PUkRFUiA9PSBCSUdfRU5ESUFO
Ci0JdWludDhfdCBieXRlMCwgYnl0ZTEsIGJ5dGUyLCBieXRlMzsKLSNlbmRpZgotCi0JLyogQ29t
cGxlbWVudCB0aGUgcmVzdWx0ICovCi0JcmVzdWx0ID0gfmNyYzMyYzsKLSNpZiBCWVRFX09SREVS
ID09IEJJR19FTkRJQU4KLQkvKgotCSAqIEZvciBCSUctRU5ESUFOIHBsYXRmb3JtcyB0aGUgcmVz
dWx0IGlzIGluIGxpdHRsZS1lbmRpYW4gZm9ybS4gU28gd2UKLQkgKiBtdXN0IHN3YXAgdGhlIGJ5
dGVzIHRvIHJldHVybiB0aGUgcmVzdWx0IGluIG5ldHdvcmsgYnl0ZSBvcmRlci4KLQkgKi8KLQli
eXRlMCA9IHJlc3VsdCAmIDB4MDAwMDAwZmY7Ci0JYnl0ZTEgPSAocmVzdWx0ID4+IDgpICYgMHgw
MDAwMDBmZjsKLQlieXRlMiA9IChyZXN1bHQgPj4gMTYpICYgMHgwMDAwMDBmZjsKLQlieXRlMyA9
IChyZXN1bHQgPj4gMjQpICYgMHgwMDAwMDBmZjsKLQljcmMzMmMgPSAoKGJ5dGUwIDw8IDI0KSB8
IChieXRlMSA8PCAxNikgfCAoYnl0ZTIgPDwgOCkgfCBieXRlMyk7Ci0jZWxzZQotCS8qCi0JICog
Rm9yIExJVFRMRSBFTkRJQU4gcGxhdGZvcm1zIHRoZSByZXN1bHQgaXMgaW4gYWxyZWFkeSBpbiBu
ZXR3b3JrCi0JICogYnl0ZSBvcmRlci4KLQkgKi8KLQljcmMzMmMgPSByZXN1bHQ7Ci0jZW5kaWYK
LQlyZXR1cm4gKGNyYzMyYyk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9wYXRjaDEuMSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL3BhdGNoMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMC4uNDBhZTM0YTc5MTg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvcGF0Y2gxLjEKQEAgLTAsMCArMSw5MiBAQAorZGlm
ZiAtLWdpdCBhL21lZGlhL3NjdHAvc2N0cF90cmFuc3BvcnQuY2MgYi9tZWRpYS9zY3RwL3NjdHBf
dHJhbnNwb3J0LmNjCitpbmRleCA2ZGJjZTEzNjlmLi4yM2M4N2RlYmY4IDEwMDY0NAorLS0tIGEv
bWVkaWEvc2N0cC9zY3RwX3RyYW5zcG9ydC5jYworKysrIGIvbWVkaWEvc2N0cC9zY3RwX3RyYW5z
cG9ydC5jYworQEAgLTM5MywxMSArMzkzLDE2IEBAIGNsYXNzIFNjdHBUcmFuc3BvcnQ6OlVzclNj
dHBXcmFwcGVyIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0
cF9yY3ZpbmZvIHJjdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxh
Z3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogdWxwX2luZm8pIHsK
KysgICAgU2N0cFRyYW5zcG9ydCogdHJhbnNwb3J0ID0gR2V0VHJhbnNwb3J0RnJvbVNvY2tldChz
b2NrKTsKKysgICAgaWYgKCF0cmFuc3BvcnQpIHsKKysgICAgICBSVENfTE9HKExTX0VSUk9SKQor
KyAgICAgICAgICA8PCAiT25TY3RwSW5ib3VuZFBhY2tldDogRmFpbGVkIHRvIGdldCB0cmFuc3Bv
cnQgZm9yIHNvY2tldCAiIDw8IHNvY2sKKysgICAgICAgICAgPDwgIjsgcG9zc2libHkgd2FzIGFs
cmVhZHkgZGVzdHJveWVkLiI7CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKyAgICAgLy8gU2Fu
aXR5IGNoZWNrIHRoYXQgYm90aCBtZXRob2RzIG9mIGdldHRpbmcgdGhlIFNjdHBUcmFuc3BvcnQg
cG9pbnRlcgorICAgICAvLyB5aWVsZCB0aGUgc2FtZSByZXN1bHQuCistICAgIFJUQ19DSEVDS19F
UShzdGF0aWNfY2FzdDxTY3RwVHJhbnNwb3J0Kj4odWxwX2luZm8pLAorLSAgICAgICAgICAgICAg
ICAgR2V0VHJhbnNwb3J0RnJvbVNvY2tldChzb2NrKSk7CistICAgIFNjdHBUcmFuc3BvcnQqIHRy
YW5zcG9ydCA9IHN0YXRpY19jYXN0PFNjdHBUcmFuc3BvcnQqPih1bHBfaW5mbyk7CisrICAgIFJU
Q19DSEVDS19FUSh0cmFuc3BvcnQsIHN0YXRpY19jYXN0PFNjdHBUcmFuc3BvcnQqPih1bHBfaW5m
bykpOworICAgICBpbnQgcmVzdWx0ID0KKyAgICAgICAgIHRyYW5zcG9ydC0+T25EYXRhT3JOb3Rp
ZmljYXRpb25Gcm9tU2N0cChkYXRhLCBsZW5ndGgsIHJjdiwgZmxhZ3MpOworICAgICBmcmVlKGRh
dGEpOworQEAgLTQ0MCw3ICs0NDUsNyBAQCBjbGFzcyBTY3RwVHJhbnNwb3J0OjpVc3JTY3RwV3Jh
cHBlciB7CisgICAgIGlmICghdHJhbnNwb3J0KSB7CisgICAgICAgUlRDX0xPRyhMU19FUlJPUikK
KyAgICAgICAgICAgPDwgIlNlbmRUaHJlc2hvbGRDYWxsYmFjazogRmFpbGVkIHRvIGdldCB0cmFu
c3BvcnQgZm9yIHNvY2tldCAiCistICAgICAgICAgIDw8IHNvY2s7CisrICAgICAgICAgIDw8IHNv
Y2sgPDwgIjsgcG9zc2libHkgd2FzIGFscmVhZHkgZGVzdHJveWVkLiI7CisgICAgICAgcmV0dXJu
IDA7CisgICAgIH0KKyAgICAgdHJhbnNwb3J0LT5PblNlbmRUaHJlc2hvbGRDYWxsYmFjaygpOwor
QEAgLTQ1MCwxNCArNDU1LDE5IEBAIGNsYXNzIFNjdHBUcmFuc3BvcnQ6OlVzclNjdHBXcmFwcGVy
IHsKKyAgIHN0YXRpYyBpbnQgU2VuZFRocmVzaG9sZENhbGxiYWNrKHN0cnVjdCBzb2NrZXQqIHNv
Y2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzYl9mcmVl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogdWxwX2luZm8pIHsK
Ky0gICAgLy8gU2FuaXR5IGNoZWNrIHRoYXQgYm90aCBtZXRob2RzIG9mIGdldHRpbmcgdGhlIFNj
dHBUcmFuc3BvcnQgcG9pbnRlcgorLSAgICAvLyB5aWVsZCB0aGUgc2FtZSByZXN1bHQuCistICAg
IFJUQ19DSEVDS19FUShzdGF0aWNfY2FzdDxTY3RwVHJhbnNwb3J0Kj4odWxwX2luZm8pLAorLSAg
ICAgICAgICAgICAgICAgR2V0VHJhbnNwb3J0RnJvbVNvY2tldChzb2NrKSk7CisgICAgIC8vIEZp
cmVkIG9uIG91ciBJL08gdGhyZWFkLiBTY3RwVHJhbnNwb3J0OjpPblBhY2tldFJlY2VpdmVkKCkg
Z2V0cworICAgICAvLyBhIHBhY2tldCBjb250YWluaW5nIGFja25vd2xlZGdtZW50cywgd2hpY2gg
Z29lcyBpbnRvIHVzcnNjdHBfY29ubmlucHV0LAorICAgICAvLyBhbmQgdGhlbiBiYWNrIGhlcmUu
CistICAgIFNjdHBUcmFuc3BvcnQqIHRyYW5zcG9ydCA9IHN0YXRpY19jYXN0PFNjdHBUcmFuc3Bv
cnQqPih1bHBfaW5mbyk7CisrICAgIFNjdHBUcmFuc3BvcnQqIHRyYW5zcG9ydCA9IEdldFRyYW5z
cG9ydEZyb21Tb2NrZXQoc29jayk7CisrICAgIGlmICghdHJhbnNwb3J0KSB7CisrICAgICAgUlRD
X0xPRyhMU19FUlJPUikKKysgICAgICAgICAgPDwgIlNlbmRUaHJlc2hvbGRDYWxsYmFjazogRmFp
bGVkIHRvIGdldCB0cmFuc3BvcnQgZm9yIHNvY2tldCAiCisrICAgICAgICAgIDw8IHNvY2sgPDwg
IjsgcG9zc2libHkgd2FzIGFscmVhZHkgZGVzdHJveWVkLiI7CisrICAgICAgcmV0dXJuIDA7Cisr
ICAgIH0KKysgICAgLy8gU2FuaXR5IGNoZWNrIHRoYXQgYm90aCBtZXRob2RzIG9mIGdldHRpbmcg
dGhlIFNjdHBUcmFuc3BvcnQgcG9pbnRlcgorKyAgICAvLyB5aWVsZCB0aGUgc2FtZSByZXN1bHQu
CisrICAgIFJUQ19DSEVDS19FUSh0cmFuc3BvcnQsIHN0YXRpY19jYXN0PFNjdHBUcmFuc3BvcnQq
Pih1bHBfaW5mbykpOworICAgICB0cmFuc3BvcnQtPk9uU2VuZFRocmVzaG9sZENhbGxiYWNrKCk7
CisgICAgIHJldHVybiAwOworICAgfQorQEAgLTExMjIsOCArMTEzMiw4IEBAIGludCBTY3RwVHJh
bnNwb3J0OjpPbkRhdGFPck5vdGlmaWNhdGlvbkZyb21TY3RwKHZvaWQqIGRhdGEsCisgICAvLyBJ
ZiBkYXRhIGlzIE5VTEwsIHRoZSBTQ1RQIGFzc29jaWF0aW9uIGhhcyBiZWVuIGNsb3NlZC4KKyAg
IGlmICghZGF0YSkgeworICAgICBSVENfTE9HKExTX0lORk8pIDw8IGRlYnVnX25hbWVfCistICAg
ICAgICAgICAgICAgICAgICAgPDwgIi0+T25TY3RwSW5ib3VuZFBhY2tldCguLi4pOiAiCistICAg
ICAgICAgICAgICAgICAgICAgICAgIk5vIGRhdGEsIGNsb3NpbmcuIjsKKysgICAgICAgICAgICAg
ICAgICAgICA8PCAiLT5PbkRhdGFPck5vdGlmaWNhdGlvbkZyb21TY3RwKC4uLik6ICIKKysgICAg
ICAgICAgICAgICAgICAgICAgICAiTm8gZGF0YTsgYXNzb2NpYXRpb24gY2xvc2VkLiI7CisgICAg
IHJldHVybiBrU2N0cFN1Y2Nlc3NSZXR1cm47CisgICB9CisgCitAQCAtMTEzMiw5ICsxMTQyLDEw
IEBAIGludCBTY3RwVHJhbnNwb3J0OjpPbkRhdGFPck5vdGlmaWNhdGlvbkZyb21TY3RwKHZvaWQq
IGRhdGEsCisgICAvLyAgICAgICBiZSBoYW5kbGVkIGVhcmx5IGFuZCBlbnRpcmVseSBzZXBhcmF0
ZSBmcm9tIHRoZSByZWFzc2VtYmx5CisgICAvLyAgICAgICBwcm9jZXNzLgorICAgaWYgKGZsYWdz
ICYgTVNHX05PVElGSUNBVElPTikgeworLSAgICBSVENfTE9HKExTX1ZFUkJPU0UpIDw8IGRlYnVn
X25hbWVfCistICAgICAgICAgICAgICAgICAgICAgICAgPDwgIi0+T25TY3RwSW5ib3VuZFBhY2tl
dCguLi4pOiBTQ1RQIG5vdGlmaWNhdGlvbiIKKy0gICAgICAgICAgICAgICAgICAgICAgICA8PCAi
IGxlbmd0aD0iIDw8IGxlbmd0aDsKKysgICAgUlRDX0xPRyhMU19WRVJCT1NFKQorKyAgICAgICAg
PDwgZGVidWdfbmFtZV8KKysgICAgICAgIDw8ICItPk9uRGF0YU9yTm90aWZpY2F0aW9uRnJvbVNj
dHAoLi4uKTogU0NUUCBub3RpZmljYXRpb24iCisrICAgICAgICA8PCAiIGxlbmd0aD0iIDw8IGxl
bmd0aDsKKyAKKyAgICAgLy8gQ29weSBhbmQgZGlzcGF0Y2ggYXN5bmNocm9ub3VzbHkKKyAgICAg
cnRjOjpDb3B5T25Xcml0ZUJ1ZmZlciBub3RpZmljYXRpb24ocmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oZGF0YSksCitAQCAtMTE0OCw3ICsxMTU5LDcgQEAgaW50IFNjdHBUcmFuc3BvcnQ6Ok9u
RGF0YU9yTm90aWZpY2F0aW9uRnJvbVNjdHAodm9pZCogZGF0YSwKKyAgIC8vIExvZyBkYXRhIGNo
dW5rCisgICBjb25zdCB1aW50MzJfdCBwcGlkID0gcnRjOjpOZXR3b3JrVG9Ib3N0MzIocmN2LnJj
dl9wcGlkKTsKKyAgIFJUQ19MT0coTFNfVkVSQk9TRSkgPDwgZGVidWdfbmFtZV8KKy0gICAgICAg
ICAgICAgICAgICAgICAgPDwgIi0+T25TY3RwSW5ib3VuZFBhY2tldCguLi4pOiBTQ1RQIGRhdGEg
Y2h1bmsiCisrICAgICAgICAgICAgICAgICAgICAgIDw8ICItPk9uRGF0YU9yTm90aWZpY2F0aW9u
RnJvbVNjdHAoLi4uKTogU0NUUCBkYXRhIGNodW5rIgorICAgICAgICAgICAgICAgICAgICAgICA8
PCAiIGxlbmd0aD0iIDw8IGxlbmd0aCA8PCAiLCBzaWQ9IiA8PCByY3YucmN2X3NpZAorICAgICAg
ICAgICAgICAgICAgICAgICA8PCAiLCBwcGlkPSIgPDwgcHBpZCA8PCAiLCBzc249IiA8PCByY3Yu
cmN2X3NzbgorICAgICAgICAgICAgICAgICAgICAgICA8PCAiLCBjdW0tdHNuPSIgPDwgcmN2LnJj
dl9jdW10c24KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9XZWJLaXQv
MDAwMi1GaXhpbmctdXNyY3RwLWxpYnJhcnktY29tcGlsYXRpb24tZXJyb3JzLnBhdGNoIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1dlYktpdC8wMDAyLUZpeGluZy11c3JjdHAtbGlicmFy
eS1jb21waWxhdGlvbi1lcnJvcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwLi5kYTUwOTI3ZGU5YjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvV2ViS2l0LzAwMDItRml4aW5nLXVzcmN0cC1saWJyYXJ5LWNvbXBpbGF0
aW9uLWVycm9ycy5wYXRjaApAQCAtMCwwICsxLDExOSBAQAorZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3BjYi5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRp
bmV0L3NjdHBfcGNiLmMKK2luZGV4IDZlZmNiYWI5MWU4Li5mOGRkMDI0MGFmMyAxMDA3NTUKKy0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3BjYi5jCisrKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wY2IuYworQEAgLTY4NTIsNyArNjg1Miw2IEBAIHNj
dHBfcGNiX2luaXQoKQorICNlbmRpZgorICNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisgCW1i
dWZfaW5pdGlhbGl6ZShOVUxMKTsKKy0JYXRvbWljX2luaXQoKTsKKyAjaWYgZGVmaW5lZChJTkVU
KSB8fCBkZWZpbmVkKElORVQ2KQorIAlyZWN2X3RocmVhZF9pbml0KCk7CisgI2VuZGlmCitkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2F0b21pYy5oIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNy
c2N0cGxpYi91c2VyX2F0b21pYy5oCitpbmRleCA3N2VhNzdiNjcxYS4uODk3MzljNGU5MDggMTAw
NzU1CistLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfYXRvbWljLmgKKysrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3VzcnNjdHBsaWIvdXNlcl9hdG9taWMuaAorQEAgLTgwLDcgKzgwLDggQEAKKyAjaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorIHN0YXRpYyB2b2lkIGF0b21pY19pbml0KHZv
aWQpIHt9IC8qIGVtcHR5IHdoZW4gd2UgYXJlIG5vdCB1c2luZyBhdG9taWNfbXR4ICovCisgI2Vs
c2UKKy1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2luaXQodm9pZCkge30gLyogZW1wdHkgd2hl
biB3ZSBhcmUgbm90IHVzaW5nIGF0b21pY19tdHggKi8KKysvLyBXZWJLaXQgY2hhbmdlLCB0aGlz
IGNvbmZsaWN0cyB3aXRoIGF0b21pY19pbml0CisrLy8gc3RhdGljIGlubGluZSB2b2lkIGF0b21p
Y19pbml0KHZvaWQpIHt9IC8qIGVtcHR5IHdoZW4gd2UgYXJlIG5vdCB1c2luZyBhdG9taWNfbXR4
ICovCisgI2VuZGlmCisgCisgI2Vsc2UKK2RpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvV2ViS2l0LzAwMDItRml4aW5nLXVzcmN0cC1saWJyYXJ5LWNvbXBpbGF0aW9uLWVy
cm9ycy5wYXRjaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9XZWJLaXQvMDAwMi1GaXhp
bmctdXNyY3RwLWxpYnJhcnktY29tcGlsYXRpb24tZXJyb3JzLnBhdGNoCitpbmRleCA5MzY0NzEx
NTRhNS4uZTY5ZGUyOWJiMmQgMTAwNjQ0CistLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvV2ViS2l0LzAwMDItRml4aW5nLXVzcmN0cC1saWJyYXJ5LWNvbXBpbGF0aW9uLWVycm9ycy5w
YXRjaAorKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1dlYktpdC8wMDAyLUZpeGlu
Zy11c3JjdHAtbGlicmFyeS1jb21waWxhdGlvbi1lcnJvcnMucGF0Y2gKK0BAIC0xLDg4ICswLDAg
QEAKKy1Gcm9tIGJlNzFhNTRkYTliMGFlN2YzNzllZmYwMzc3MzUzNzljOWU4NWU5Y2IgTW9uIFNl
cCAxNyAwMDowMDowMCAyMDAxCistRnJvbTogWW91ZW5uIEZhYmxldCA8eW91ZW5uQGFwcGxlLmNv
bT4KKy1EYXRlOiBUaHUsIDE0IERlYyAyMDE3IDEzOjQ0OjQxIC0wODAwCistU3ViamVjdDogW1BB
VENIIDIvOF0gRml4aW5nIHVzcmN0cCBsaWJyYXJ5IGNvbXBpbGF0aW9uIGVycm9ycworLQorLS0t
LQorLSAuLi4vU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfaW5wdXQuYyAgICB8IDggKysrKysrLS0KKy0gLi4uL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX291dHB1dC5jICAgfCA1ICsrKy0tCistIC4uLi9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wY2IuYyAg
ICAgIHwgMSAtCistIC4uLi9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi91c2VyX2F0b21pYy5oIHwgMyArKy0KKy0gNCBmaWxlcyBjaGFuZ2VkLCAxMSBpbnNl
cnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorLQorLWRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRp
bmV0L3NjdHBfaW5wdXQuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9pbnB1dC5jCistaW5kZXgg
MDY0OWVjMmUzMjUuLmU0YmI1MTM3OGRjIDEwMDc1NQorLS0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQv
c2N0cF9pbnB1dC5jCistKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2lucHV0LmMKKy1AQCAt
MTcyOCwxMCArMTcyOCwxMiBAQCBzY3RwX3Byb2Nlc3NfY29va2llX2V4aXN0aW5nKHN0cnVjdCBt
YnVmICptLCBpbnQgaXBobGVuLCBpbnQgb2Zmc2V0LAorLSAJCQkJICogZG9uJ3QgZG91YmxlIHRo
aW5ncworLSAJCQkJICovCistIAkJCQluZXQtPmhiX3Jlc3BvbmRlZCA9IDE7CistKwkJCQlzdHJ1
Y3QgdGltZXZhbCB0aW1lX2VudGVyZWQ7CistIAkJCQluZXQtPlJUTyA9IHNjdHBfY2FsY3VsYXRl
X3J0byhzdGNiLCBhc29jLCBuZXQsCistLQkJCQkJCQkgICAgICAmY29va2llLT50aW1lX2VudGVy
ZWQsCistKwkJCQkJCQkgICAgICAmdGltZV9lbnRlcmVkLAorLSAJCQkJCQkJICAgICAgc2N0cF9h
bGlnbl91bnNhZmVfbWFrZWNvcHksCistIAkJCQkJCQkgICAgICBTQ1RQX1JUVF9GUk9NX05PTl9E
QVRBKTsKKy0rCQkJCWNvb2tpZS0+dGltZV9lbnRlcmVkID0gdGltZV9lbnRlcmVkOworLSAKKy0g
CQkJCWlmIChzdGNiLT5hc29jLnNjdHBfYXV0b2Nsb3NlX3RpY2tzICYmCistIAkJCQkgICAgKHNj
dHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0FVVE9DTE9TRSkpKSB7CistQEAg
LTI0ODEsOSArMjQ4MywxMSBAQCBzY3RwX3Byb2Nlc3NfY29va2llX25ldyhzdHJ1Y3QgbWJ1ZiAq
bSwgaW50IGlwaGxlbiwgaW50IG9mZnNldCwKKy0gCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFM
KCZzdGNiLT5hc29jLnRpbWVfZW50ZXJlZCk7CistIAlpZiAoKG5ldHAgIT0gTlVMTCkgJiYgKCpu
ZXRwICE9IE5VTEwpKSB7CistIAkJLyogY2FsY3VsYXRlIHRoZSBSVFQgYW5kIHNldCB0aGUgZW5j
YXBzIHBvcnQgKi8KKy0rCQlzdHJ1Y3QgdGltZXZhbCB0aW1lX2VudGVyZWQ7CistIAkJKCpuZXRw
KS0+UlRPID0gc2N0cF9jYWxjdWxhdGVfcnRvKHN0Y2IsIGFzb2MsICpuZXRwLAorLS0JCQkJCQkg
ICZjb29raWUtPnRpbWVfZW50ZXJlZCwgc2N0cF9hbGlnbl91bnNhZmVfbWFrZWNvcHksCistKwkJ
CQkJCSAgJnRpbWVfZW50ZXJlZCwgc2N0cF9hbGlnbl91bnNhZmVfbWFrZWNvcHksCistIAkJCQkJ
CSAgU0NUUF9SVFRfRlJPTV9OT05fREFUQSk7CistKwkJY29va2llLT50aW1lX2VudGVyZWQgPSB0
aW1lX2VudGVyZWQ7CistIAl9CistIAkvKiByZXNwb25kIHdpdGggYSBDT09LSUUtQUNLICovCist
IAlzY3RwX3NlbmRfY29va2llX2FjayhzdGNiKTsKKy1kaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX291dHB1dC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX291dHB1dC5jCistaW5k
ZXggOTBiMGJmM2Q2MzYuLmY2NDZjYTNhM2M2IDEwMDc1NQorLS0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGlu
ZXQvc2N0cF9vdXRwdXQuYworLSsrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vdXRwdXQuYwor
LUBAIC02MDI0LDggKzYwMjQsOSBAQCBzY3RwX3NlbmRfaW5pdGlhdGVfYWNrKHN0cnVjdCBzY3Rw
X2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKy0gCW1lbXNldCgmc3RjLCAwLCBz
aXplb2Yoc3RydWN0IHNjdHBfc3RhdGVfY29va2llKSk7CistIAorLSAJLyogdGhlIHRpbWUgSSBi
dWlsdCBjb29raWUgKi8KKy0tCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZzdGMudGltZV9l
bnRlcmVkKTsKKy0tCistKwlzdHJ1Y3QgdGltZXZhbCB0aW1lX2VudGVyZWQ7CistKwkodm9pZClT
Q1RQX0dFVFRJTUVfVElNRVZBTCgmdGltZV9lbnRlcmVkKTsKKy0rCXN0Yy50aW1lX2VudGVyZWQg
PSB0aW1lX2VudGVyZWQ7CistIAkvKiBwb3B1bGF0ZSBhbnkgdGllIHRhZ3MgKi8KKy0gCWlmIChh
c29jICE9IE5VTEwpIHsKKy0gCQkvKiB1bmxvY2sgYmVmb3JlIHRhZyBzZWxlY3Rpb25zICovCist
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wY2IuYyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGlu
ZXQvc2N0cF9wY2IuYworLWluZGV4IDllOWZjYTA2YzRkLi5kMGM3NzBlMzA3OCAxMDA3NTUKKy0t
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcGNiLmMKKy0rKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfcGNiLmMKKy1AQCAtNjgwOSw3ICs2ODA5LDYgQEAgc2N0cF9wY2JfaW5pdCgpCistICNl
bmRpZgorLSAjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorLSAJbWJ1Zl9pbml0aWFsaXplKE5V
TEwpOworLS0JYXRvbWljX2luaXQoKTsKKy0gI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJ
TkVUNikKKy0gCXJlY3ZfdGhyZWFkX2luaXQoKTsKKy0gI2VuZGlmCistZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3VzZXJfYXRvbWljLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2VyX2F0b21pYy5oCistaW5kZXggYjg0
MTVjNjA0N2UuLmYzNDQwNTVkYzViIDEwMDc1NQorLS0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJfYXRvbWlj
LmgKKy0rKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi91c2VyX2F0b21pYy5oCistQEAgLTgwLDcgKzgwLDggQEAKKy0g
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKy0gc3RhdGljIHZvaWQgYXRvbWlj
X2luaXQoKSB7fSAvKiBlbXB0eSB3aGVuIHdlIGFyZSBub3QgdXNpbmcgYXRvbWljX210eCAqLwor
LSAjZWxzZQorLS1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2luaXQoKSB7fSAvKiBlbXB0eSB3
aGVuIHdlIGFyZSBub3QgdXNpbmcgYXRvbWljX210eCAqLworLSsvLyBXZWJLaXQgY2hhbmdlLCB0
aGlzIGNvbmZsaWN0cyB3aXRoIGF0b21pY19pbml0IE1hY09TIG1hY3JvLgorLSsvLyBzdGF0aWMg
aW5saW5lIHZvaWQgYXRvbWljX2luaXQoKSB7fSAvKiBlbXB0eSB3aGVuIHdlIGFyZSBub3QgdXNp
bmcgYXRvbWljX210eCAqLworLSAjZW5kaWYKKy0gCistICNlbHNlCistLS0gCistMi4xMy41IChB
cHBsZSBHaXQtOTQpCistCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
V2ViS2l0L3BhdGNoLXVzcnNjdHAuZGlmZiBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9X
ZWJLaXQvcGF0Y2gtdXNyc2N0cC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMC4uYTE4YThmNWM2NDU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1dlYktpdC9wYXRjaC11c3JzY3RwLmRpZmYKQEAgLTAsMCArMSw0NSBAQAor
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJfbWJ1Zi5jIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9tYnVmLmMK
K2luZGV4IDdhMWFhYmE4NTVlLi4zZWJkOGEyN2I2YiAxMDA2NDQKKy0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Vz
ZXJfbWJ1Zi5jCisrKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2VyX21idWYuYworQEAgLTIzMiw3ICsyMzIsOCBA
QCBzdGF0aWMgaW50IGNsdXN0X2NvbnN0cnVjdG9yX2R1cChjYWRkcl90IG1fY2x1c3QsIHN0cnVj
dCBtYnVmKiBtKQorIAkJbS0+bV9leHQuZXh0X3NpemUgPSBzaXplOworIAkJbS0+bV9leHQuZXh0
X3R5cGUgPSB0eXBlOworIAkJbS0+bV9leHQucmVmX2NudCA9IHJlZmNudDsKKy0JfQorKwl9IGVs
c2UKKysJCVNDVFBfWk9ORV9GUkVFKHpvbmVfZXh0X3JlZmNudCwgcmVmY250KTsKKyAKKyAJcmV0
dXJuICgwKTsKKyB9CitAQCAtNTI3LDcgKzUyOCw4IEBAIG1iX2N0b3JfY2x1c3Qodm9pZCAqbWVt
LCB2b2lkICphcmcsIGludCBmbGdzKQorIAkJbS0+bV9leHQuZXh0X3NpemUgPSBzaXplOworIAkJ
bS0+bV9leHQuZXh0X3R5cGUgPSB0eXBlOworIAkJbS0+bV9leHQucmVmX2NudCA9IHJlZmNudDsK
Ky0JfQorKwl9IGVsc2UKKysJCVNDVFBfWk9ORV9GUkVFKHpvbmVfZXh0X3JlZmNudCwgcmVmY250
KTsKKyAjZW5kaWYKKyAJcmV0dXJuICgwKTsKKyB9CitkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNl
cl9zb2NrZXQuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJfc29ja2V0LmMKK2luZGV4IGE1NDk5NmVmZGQ4Li5i
OTRlMWU1YzI0YSAxMDA2NDQKKy0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJfc29ja2V0LmMKKysrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3VzZXJfc29ja2V0LmMKK0BAIC0yMTMxLDExICsyMTMxLDE0IEBAIGRvbmUxOgorIAor
IGludCB1c3JzY3RwX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAq
bmFtZSwgaW50IG5hbWVsZW4pCisgeworLQlzdHJ1Y3Qgc29ja2FkZHIgKnNhOworKwlzdHJ1Y3Qg
c29ja2FkZHIgKnNhID0gTlVMTDsKKyAKKyAJZXJybm8gPSBnZXRzb2NrYWRkcigmc2EsIChjYWRk
cl90KW5hbWUsIG5hbWVsZW4pOworLQlpZiAoZXJybm8pCisrCWlmIChlcnJubykgeworKwkJaWYg
KHNhKQorKwkJCUZSRUUoc2EsIE1fU09OQU1FKTsKKyAJCXJldHVybiAoLTEpOworKwl9CisgCisg
CWVycm5vID0gdXNlcl9jb25uZWN0KHNvLCBzYSk7CisgCUZSRUUoc2EsIE1fU09OQU1FKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9saWJ3ZWJydGMueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9saWJ3ZWJydGMu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkNjJhOThlYTA2ZWMuLjQ3ZDVhOTZhYzc3
MSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL2xpYndlYnJ0Yy54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9s
aWJ3ZWJydGMueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQyNyw2ICsxNDI3LDkgQEAK
IAkJNDE0NUY2MUUxRkUxRjM4RDAwRUI5Q0FGIC8qIHZpZGVvX2RlY29kZXJfZmFjdG9yeS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE0NUY2MUExRkUx
RjM4QzAwRUI5Q0FGIC8qIHZpZGVvX2RlY29kZXJfZmFjdG9yeS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJNDE0NUY2MUYxRkUxRjM4RDAwRUI5Q0FG
IC8qIHZpZGVvX2VuY29kZXJfZmFjdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDE0NUY2MUIxRkUxRjM4RDAwRUI5Q0FGIC8qIHZpZGVvX2VuY29k
ZXJfZmFjdG9yeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsg
fTsKIAkJNDE0NUY2MjAxRkUxRjM4RDAwRUI5Q0FGIC8qIHZpZGVvX2VuY29kZXIuY2MgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTQ1RjYxQzFGRTFGMzhE
MDBFQjlDQUYgLyogdmlkZW9fZW5jb2Rlci5jYyAqLzsgfTsKKwkJNDE0RDcxMTQxRTRBRTk4QzAw
MjNFNTI2IC8qIHVzZXJfc29ja2V0LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0MTRENzExMjFFNEFFOTgyMDAyM0U1MjYgLyogdXNlcl9zb2NrZXQuYyAq
LzsgfTsKKwkJNDE0RDcxMTcxRTRBRUFGQjAwMjNFNTI2IC8qIHNjdHBfaW5kYXRhLmMgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTRENzExNTFFNEFFQUNE
MDAyM0U1MjYgLyogc2N0cF9pbmRhdGEuYyAqLzsgfTsKKwkJNDE0RDcxMTkxRTRBRUIxMTAwMjNF
NTI2IC8qIHNjdHBfdXNlcnNwYWNlLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0MTRENzExODFFNEFFQjExMDAyM0U1MjYgLyogc2N0cF91c2Vyc3BhY2Uu
YyAqLzsgfTsKIAkJNDE1M0NEMjcyMUNDNjYxMDAwQzNFMTg4IC8qIExQQ19maXQuYyBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMDBDREU1MjFDQUNGRDAw
MEY5Qjg3RCAvKiBMUENfZml0LmMgKi87IH07CiAJCTQxNTNDRDI4MjFDQzY2NDgwMEMzRTE4OCAv
KiB2cV9zc2UyLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MTAwQ0RFRDIxQ0FEMUY1MDBGOUI4N0QgLyogdnFfc3NlMi5jICovOyB9OwogCQk0MTU0NDlB
MDIxQ0FDMzMwMDAxQzBBNTUgLyogZWNkaC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDE1NDQ5OUYyMUNBQzMzMDAwMUMwQTU1IC8qIGVjZGguYyAqLzsg
fTsKQEAgLTI2NzcsNyArMjY4MCw2IEBACiAJCTQxRjc3RDM1MjE1QkU3MkIwMEU3Mjk2NyAvKiB5
YXNtLW9wdGlvbnMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQxRjc3RDMwMjE1QkU3MkEwMEU3Mjk2NyAvKiB5YXNtLW9wdGlvbnMuYyAqLzsgfTsKIAkJ
NDFGNzdEMzYyMTVCRTcyQjAwRTcyOTY3IC8qIHlhc20uYyBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjc3RDMyMjE1QkU3MkEwMEU3Mjk2NyAvKiB5YXNt
LmMgKi87IH07CiAJCTQxRjc3RDM3MjE1QkU3MkIwMEU3Mjk2NyAvKiB5YXNtLXBsdWdpbi5jIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGNzdEMzQyMTVC
RTcyQjAwRTcyOTY3IC8qIHlhc20tcGx1Z2luLmMgKi87IH07Ci0JCTQxRjg5OTRDMjhGM0U5MDAw
MDcwNTQ5QyAvKiBzY3RwX2NyYzMyLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0MUY4OTk0QjI4RjNFOEZGMDA3MDU0OUMgLyogc2N0cF9jcmMzMi5jICov
OyB9OwogCQk0MUY5QkY5NjIwNTFDODIxMDBBQkYwQjkgLyogYXVkaW9fZW5jb2Rlcl9mYWN0b3J5
X3RlbXBsYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MUY5QkY5MzIwNTFDODIwMDBBQkYwQjkgLyogYXVkaW9fZW5jb2Rlcl9mYWN0b3J5X3RlbXBs
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQk0
MUY5QkY5NzIwNTFDODIxMDBBQkYwQjkgLyogYXVkaW9fZW5jb2Rlcl9mYWN0b3J5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUY5QkY5NDIwNTFDODIw
MDBBQkYwQjkgLyogYXVkaW9fZW5jb2Rlcl9mYWN0b3J5LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQk0MUY5QkY5ODIwNTFDODIxMDBBQkYwQjkgLyog
YXVkaW9fZGVjb2Rlcl9mYWN0b3J5X3RlbXBsYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUY5QkY5NTIwNTFDODIxMDBBQkYwQjkgLyogYXVkaW9f
ZGVjb2Rlcl9mYWN0b3J5X3RlbXBsYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHVibGljLCApOyB9OyB9OwpAQCAtMjczMiw2ICsyNzM0LDcgQEAKIAkJNUMwMDczMDMxRTU1MTNF
NzAwNDIyMTVBIC8qIGxpYmJvcmluZ3NzbC5hIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUM2M0ZDNjAxRTQxODQxMTAwMkNBNTMxIC8qIGxpYmJvcmlu
Z3NzbC5hICovOyB9OwogCQk1QzAwNzMwNDFFNTUxM0U3MDA0MjIxNUEgLyogbGlib3B1cy5hIGlu
IEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM0QjRBOEUx
RTQyQzMzNjAwMjY1MUM4IC8qIGxpYm9wdXMuYSAqLzsgfTsKIAkJNUMwMDczMDUxRTU1MTNFNzAw
NDIyMTVBIC8qIGxpYnNydHAuYSBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVDMDg4NEQxMUU0QTk3RTMwMDQwMzk5NSAvKiBsaWJzcnRwLmEgKi87IH07
CisJCTVDMDA3MzA2MUU1NTEzRTcwMDQyMjE1QSAvKiBsaWJ1c3JzY3RwLmEgaW4gRnJhbWV3b3Jr
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzExQTEyRDFFNDU3N0UxMDA0
RjA5ODcgLyogbGlidXNyc2N0cC5hICovOyB9OwogCQk1QzAwNzMwODFFNTUxM0U3MDA0MjIxNUEg
LyogbGlieXV2LmEgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1QzA4ODRERTFFNEE5ODAxMDA0MDM5OTUgLyogbGlieXV2LmEgKi87IH07CiAJCTVDMDA3
MzExMUU1NTEzRTcwMDQyMjE1QSAvKiBDb3JlTWVkaWEuZnJhbWV3b3JrIGluIEZyYW1ld29ya3Mg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMwMDczMEMxRTU1MTNFNzAwNDIy
MTVBIC8qIENvcmVNZWRpYS5mcmFtZXdvcmsgKi87IH07CiAJCTVDMDA3MzEyMUU1NTEzRTcwMDQy
MjE1QSAvKiBDb3JlVmlkZW8uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUMwMDczMEQxRTU1MTNFNzAwNDIyMTVBIC8qIENvcmVWaWRl
by5mcmFtZXdvcmsgKi87IH07CkBAIC0zMDQ0LDYgKzMwNDcsNjQgQEAKIAkJNUM0QjRDRTUxRTQz
MjBBOTAwMjY1MUM4IC8qIHNsZWVwLmNjIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUM0QjRDQjQxRTQzMjBBOTAwMjY1MUM4IC8qIHNsZWVwLmNjICovOyB9
OwogCQk1QzRCNEQwMjFFNDMyMTg1MDAyNjUxQzggLyogc3Bha2UyNTUxOS5jIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM0QjRDRjYxRTQzMjE2ODAwMjY1
MUM4IC8qIHNwYWtlMjU1MTkuYyAqLzsgfTsKIAkJNUM1RjQwOTkxRTk3OEZEQjAwRDk0Mjc5IC8q
IFNpZ1Byb2NfRklYX3NzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUM1RjQwOEYxRTk3OEZEMjAwRDk0Mjc5IC8qIFNpZ1Byb2NfRklYX3NzZS5oICov
OyB9OworCQk1QzYwMjQ1RjFFNDk0REI4MDA4OEYwQjIgLyogdXNlcl9hdG9taWMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNEI0QUNCMUU0MkM5RDYw
MDI2NTFDOCAvKiB1c2VyX2F0b21pYy5oICovOyB9OworCQk1QzYwMjQ2MDFFNDk0REI4MDA4OEYw
QjIgLyogdXNlcl9lbnZpcm9ubWVudC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUM0QjRBQ0MxRTQyQzlENjAwMjY1MUM4IC8qIHVzZXJfZW52aXJvbm1l
bnQuYyAqLzsgfTsKKwkJNUM2MDI0NjExRTQ5NERCODAwODhGMEIyIC8qIHVzZXJfZW52aXJvbm1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNEI0
QUNEMUU0MkM5RDYwMDI2NTFDOCAvKiB1c2VyX2Vudmlyb25tZW50LmggKi87IH07CisJCTVDNjAy
NDYyMUU0OTREQjgwMDg4RjBCMiAvKiB1c2VyX2lucGNiLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzRCNEFDRTFFNDJDOUQ2MDAyNjUxQzggLyogdXNl
cl9pbnBjYi5oICovOyB9OworCQk1QzYwMjQ2MzFFNDk0REI4MDA4OEYwQjIgLyogdXNlcl9pcDZf
dmFyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzRC
NEFEMDFFNDJDOUQ2MDAyNjUxQzggLyogdXNlcl9pcDZfdmFyLmggKi87IH07CisJCTVDNjAyNDY0
MUU0OTREQjgwMDg4RjBCMiAvKiB1c2VyX2lwX2ljbXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNEI0QUNGMUU0MkM5RDYwMDI2NTFDOCAvKiB1c2Vy
X2lwX2ljbXAuaCAqLzsgfTsKKwkJNUM2MDI0NjUxRTQ5NERCODAwODhGMEIyIC8qIHVzZXJfbWFs
bG9jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzRC
NEFEMTFFNDJDOUQ2MDAyNjUxQzggLyogdXNlcl9tYWxsb2MuaCAqLzsgfTsKKwkJNUM2MDI0NjYx
RTQ5NERCODAwODhGMEIyIC8qIHVzZXJfbWJ1Zi5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUM0QjRBRDIxRTQyQzlENjAwMjY1MUM4IC8qIHVzZXJfbWJ1
Zi5jICovOyB9OworCQk1QzYwMjQ2NzFFNDk0REI4MDA4OEYwQjIgLyogdXNlcl9tYnVmLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzRCNEFEMzFFNDJD
OUQ2MDAyNjUxQzggLyogdXNlcl9tYnVmLmggKi87IH07CisJCTVDNjAyNDY4MUU0OTREQjgwMDg4
RjBCMiAvKiB1c2VyX3F1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1QzRCNEFENDFFNDJDOUQ2MDAyNjUxQzggLyogdXNlcl9xdWV1ZS5oICovOyB9
OworCQk1QzYwMjQ2OTFFNDk0REI4MDA4OEYwQjIgLyogdXNlcl9yZWN2X3RocmVhZC5jIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM0QjRBRDUxRTQyQzlE
NjAwMjY1MUM4IC8qIHVzZXJfcmVjdl90aHJlYWQuYyAqLzsgfTsKKwkJNUM2MDI0NkExRTQ5NERC
ODAwODhGMEIyIC8qIHVzZXJfcmVjdl90aHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNEI0QUQ2MUU0MkM5RDYwMDI2NTFDOCAvKiB1c2VyX3Jl
Y3ZfdGhyZWFkLmggKi87IH07CisJCTVDNjAyNDZCMUU0OTREQjgwMDg4RjBCMiAvKiB1c2VyX3Jv
dXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzRC
NEFENzFFNDJDOUQ2MDAyNjUxQzggLyogdXNlcl9yb3V0ZS5oICovOyB9OworCQk1QzYwMjQ2QzFF
NDk0REI4MDA4OEYwQjIgLyogdXNlcl9zb2NrZXR2YXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNEI0QUQ5MUU0MkM5RDYwMDI2NTFDOCAvKiB1c2Vy
X3NvY2tldHZhci5oICovOyB9OworCQk1QzYwMjQ2RDFFNDk0REI4MDA4OEYwQjIgLyogdXNlcl91
bWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNEI0
QURBMUU0MkM5RDYwMDI2NTFDOCAvKiB1c2VyX3VtYS5oICovOyB9OworCQk1QzYwMjQ2RTFFNDk0
REI4MDA4OEYwQjIgLyogdXNyc2N0cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUM0QjRBREIxRTQyQzlENjAwMjY1MUM4IC8qIHVzcnNjdHAuaCAqLzsg
fTsKKwkJNUM2MDI0NkYxRTQ5NTBBMDAwODhGMEIyIC8qIHNjdHAuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNEI0QjE1MUU0MkM5RUYwMDI2NTFDOCAv
KiBzY3RwLmggKi87IH07CisJCTVDNjAyNDcwMUU0OTUwQTAwMDg4RjBCMiAvKiBzY3RwX2FzY29u
Zi5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM0QjRB
RUUxRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHBfYXNjb25mLmMgKi87IH07CisJCTVDNjAyNDcxMUU0
OTUwQTAwMDg4RjBCMiAvKiBzY3RwX2FzY29uZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUM0QjRBRUYxRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHBfYXNj
b25mLmggKi87IH07CisJCTVDNjAyNDcyMUU0OTUwQTAwMDg4RjBCMiAvKiBzY3RwX2F1dGguYyBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNEI0QUYwMUU0
MkM5RUYwMDI2NTFDOCAvKiBzY3RwX2F1dGguYyAqLzsgfTsKKwkJNUM2MDI0NzMxRTQ5NTBBMDAw
ODhGMEIyIC8qIHNjdHBfYXV0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUM0QjRBRjExRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHBfYXV0aC5oICovOyB9
OworCQk1QzYwMjQ3NDFFNDk1MEEwMDA4OEYwQjIgLyogc2N0cF9ic2RfYWRkci5jIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM0QjRBRjIxRTQyQzlFRjAw
MjY1MUM4IC8qIHNjdHBfYnNkX2FkZHIuYyAqLzsgfTsKKwkJNUM2MDI0NzUxRTQ5NTBBMDAwODhG
MEIyIC8qIHNjdHBfYnNkX2FkZHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVDNEI0QUYzMUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX2JzZF9hZGRyLmgg
Ki87IH07CisJCTVDNjAyNDc2MUU0OTUwQTAwMDg4RjBCMiAvKiBzY3RwX2NhbGxvdXQuYyBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNEI0QUY0MUU0MkM5
RUYwMDI2NTFDOCAvKiBzY3RwX2NhbGxvdXQuYyAqLzsgfTsKKwkJNUM2MDI0NzcxRTQ5NTBBMDAw
ODhGMEIyIC8qIHNjdHBfY2FsbG91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUM0QjRBRjUxRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHBfY2FsbG91dC5o
ICovOyB9OworCQk1QzYwMjQ3ODFFNDk1MEEwMDA4OEYwQjIgLyogc2N0cF9jY19mdW5jdGlvbnMu
YyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNEI0QUY2
MUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX2NjX2Z1bmN0aW9ucy5jICovOyB9OworCQk1QzYwMjQ3
OTFFNDk1MEEwMDA4OEYwQjIgLyogc2N0cF9jb25zdGFudHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNEI0QUY3MUU0MkM5RUYwMDI2NTFDOCAvKiBz
Y3RwX2NvbnN0YW50cy5oICovOyB9OworCQk1QzYwMjQ3QTFFNDk1MEEwMDA4OEYwQjIgLyogc2N0
cF9jcmMzMi5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUM0QjRBRjgxRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHBfY3JjMzIuYyAqLzsgfTsKKwkJNUM2MDI0
N0IxRTQ5NTBBMDAwODhGMEIyIC8qIHNjdHBfY3JjMzIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNEI0QUY5MUU0MkM5RUYwMDI2NTFDOCAvKiBzY3Rw
X2NyYzMyLmggKi87IH07CisJCTVDNjAyNDdDMUU0OTUwQTAwMDg4RjBCMiAvKiBzY3RwX2hlYWRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM0QjRB
RkExRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHBfaGVhZGVyLmggKi87IH07CisJCTVDNjAyNDdEMUU0
OTUwQTAwMDg4RjBCMiAvKiBzY3RwX2luZGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUM0QjRBRkMxRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHBfaW5k
YXRhLmggKi87IH07CisJCTVDNjAyNDdFMUU0OTUwQTAwMDg4RjBCMiAvKiBzY3RwX2lucHV0LmMg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzRCNEFGRDFF
NDJDOUVGMDAyNjUxQzggLyogc2N0cF9pbnB1dC5jICovOyB9OworCQk1QzYwMjQ3RjFFNDk1MEEw
MDA4OEYwQjIgLyogc2N0cF9pbnB1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUM0QjRBRkUxRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHBfaW5wdXQuaCAq
LzsgfTsKKwkJNUM2MDI0ODAxRTQ5NTBBMDAwODhGMEIyIC8qIHNjdHBfbG9ja191c2Vyc3BhY2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNEI0QUZG
MUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX2xvY2tfdXNlcnNwYWNlLmggKi87IH07CisJCTVDNjAy
NDgxMUU0OTUwQTAwMDg4RjBCMiAvKiBzY3RwX29zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzRCNEIwMTFFNDJDOUVGMDAyNjUxQzggLyogc2N0cF9v
cy5oICovOyB9OworCQk1QzYwMjQ4MjFFNDk1MEEwMDA4OEYwQjIgLyogc2N0cF9vc191c2Vyc3Bh
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNEI0
QjAwMUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX29zX3VzZXJzcGFjZS5oICovOyB9OworCQk1QzYw
MjQ4MzFFNDk1MEEwMDA4OEYwQjIgLyogc2N0cF9vdXRwdXQuYyBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNEI0QjAyMUU0MkM5RUYwMDI2NTFDOCAvKiBz
Y3RwX291dHB1dC5jICovOyB9OworCQk1QzYwMjQ4NDFFNDk1MEEwMDA4OEYwQjIgLyogc2N0cF9v
dXRwdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
NEI0QjAzMUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX291dHB1dC5oICovOyB9OworCQk1QzYwMjQ4
NjFFNDk1MEEwMDA4OEYwQjIgLyogc2N0cF9wY2IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNEI0QjA1MUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX3Bj
Yi5oICovOyB9OworCQk1QzYwMjQ4NzFFNDk1MEEwMDA4OEYwQjIgLyogc2N0cF9wZWVsb2ZmLmMg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzRCNEIwNjFF
NDJDOUVGMDAyNjUxQzggLyogc2N0cF9wZWVsb2ZmLmMgKi87IH07CisJCTVDNjAyNDg4MUU0OTUw
QTAwMDg4RjBCMiAvKiBzY3RwX3BlZWxvZmYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVDNEI0QjA3MUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX3BlZWxv
ZmYuaCAqLzsgfTsKKwkJNUM2MDI0ODkxRTQ5NTBBMDAwODhGMEIyIC8qIHNjdHBfcHJvY2Vzc19s
b2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzRC
NEIwODFFNDJDOUVGMDAyNjUxQzggLyogc2N0cF9wcm9jZXNzX2xvY2suaCAqLzsgfTsKKwkJNUM2
MDI0OEExRTQ5NTBBMDAwODhGMEIyIC8qIHNjdHBfc2hhMS5jIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM0QjRCMDkxRTQyQzlFRjAwMjY1MUM4IC8qIHNj
dHBfc2hhMS5jICovOyB9OworCQk1QzYwMjQ4QjFFNDk1MEEwMDA4OEYwQjIgLyogc2N0cF9zaGEx
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzRCNEIw
QTFFNDJDOUVGMDAyNjUxQzggLyogc2N0cF9zaGExLmggKi87IH07CisJCTVDNjAyNDhDMUU0OTUw
QTAwMDg4RjBCMiAvKiBzY3RwX3NzX2Z1bmN0aW9ucy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM0QjRCMEIxRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHBf
c3NfZnVuY3Rpb25zLmMgKi87IH07CisJCTVDNjAyNDhEMUU0OTUwQTAwMDg4RjBCMiAvKiBzY3Rw
X3N0cnVjdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVDNEI0QjBDMUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX3N0cnVjdHMuaCAqLzsgfTsKKwkJNUM2
MDI0OEUxRTQ5NTBBMDAwODhGMEIyIC8qIHNjdHBfc3lzY3RsLmMgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzRCNEIwRDFFNDJDOUVGMDAyNjUxQzggLyog
c2N0cF9zeXNjdGwuYyAqLzsgfTsKKwkJNUM2MDI0OEYxRTQ5NTBBMDAwODhGMEIyIC8qIHNjdHBf
c3lzY3RsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
QzRCNEIwRTFFNDJDOUVGMDAyNjUxQzggLyogc2N0cF9zeXNjdGwuaCAqLzsgfTsKKwkJNUM2MDI0
OTAxRTQ5NTBBMDAwODhGMEIyIC8qIHNjdHBfdGltZXIuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNEI0QjBGMUU0MkM5RUYwMDI2NTFDOCAvKiBzY3Rw
X3RpbWVyLmMgKi87IH07CisJCTVDNjAyNDkxMUU0OTUwQTAwMDg4RjBCMiAvKiBzY3RwX3RpbWVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzRCNEIx
MDFFNDJDOUVGMDAyNjUxQzggLyogc2N0cF90aW1lci5oICovOyB9OworCQk1QzYwMjQ5MjFFNDk1
MEEwMDA4OEYwQjIgLyogc2N0cF91aW8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVDNEI0QjExMUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX3Vpby5oICov
OyB9OworCQk1QzYwMjQ5MzFFNDk1MEEwMDA4OEYwQjIgLyogc2N0cF91c3JyZXEuYyBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNEI0QjEzMUU0MkM5RUYw
MDI2NTFDOCAvKiBzY3RwX3VzcnJlcS5jICovOyB9OworCQk1QzYwMjQ5NDFFNDk1MEEwMDA4OEYw
QjIgLyogc2N0cF92YXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDVDNEI0QjE0MUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX3Zhci5oICovOyB9OworCQk1
QzYwMjQ5NTFFNDk1MEEwMDA4OEYwQjIgLyogc2N0cHV0aWwuYyBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNEI0QjE2MUU0MkM5RUYwMDI2NTFDOCAvKiBz
Y3RwdXRpbC5jICovOyB9OworCQk1QzYwMjQ5NjFFNDk1MEEwMDA4OEYwQjIgLyogc2N0cHV0aWwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNEI0QjE3
MUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwdXRpbC5oICovOyB9OworCQk1QzYwMjQ5NzFFNDk1MEE1
MDA4OEYwQjIgLyogc2N0cDZfdXNycmVxLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1QzRCNEI0MzFFNDJDQTAwMDAyNjUxQzggLyogc2N0cDZfdXNycmVx
LmMgKi87IH07CisJCTVDNjAyNDk4MUU0OTUwQTUwMDg4RjBCMiAvKiBzY3RwNl92YXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNEI0QjQ0MUU0MkNB
MDAwMDI2NTFDOCAvKiBzY3RwNl92YXIuaCAqLzsgfTsKKwkJNUM2MDI0OTkxRTQ5NTE2MTAwODhG
MEIyIC8qIHNjdHBfcGNiLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1QzRCNEIwNDFFNDJDOUVGMDAyNjUxQzggLyogc2N0cF9wY2IuYyAqLzsgfTsKIAkJ
NUNEMjg0NjcxRTZBNTdGNDAwOTRGREM4IC8qIGk0MjBfYnVmZmVyLmNjIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNEMjg0NjExRTZBNTdGNDAwOTRGREM4
IC8qIGk0MjBfYnVmZmVyLmNjICovOyB9OwogCQk1Q0QyODQ2ODFFNkE1N0Y0MDA5NEZEQzggLyog
aTQyMF9idWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDVDRDI4NDYyMUU2QTU3RjQwMDk0RkRDOCAvKiBpNDIwX2J1ZmZlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJNUNEMjg0NjkxRTZBNTdGNDAw
OTRGREM4IC8qIHZpZGVvX2ZyYW1lX2J1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUNEMjg0NjMxRTZBNTdGNDAwOTRGREM4IC8qIHZpZGVvX2Zy
YW1lX2J1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsg
fTsKQEAgLTQ4NzAsNiArNDkzMSwxMyBAQAogCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSA1QzA4
ODREMjFFNEE5ODAxMDA0MDM5OTU7CiAJCQlyZW1vdGVJbmZvID0gbGlieXV2OwogCQl9OworCQk1
QzExQTEzRTFFNDU3ODNBMDA0RjA5ODcgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0gewor
CQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0gRkIz
OUQwNzAxMjAwRUQ5MjAwMDg4RTY5IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlUeXBl
ID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gNUMxMUEwMzQxRTQ1NzdFMTAwNEYwOTg3
OworCQkJcmVtb3RlSW5mbyA9IHVzcnNjdHA7CisJCX07CiAJCTVDNEI0QUM2MUU0MkM1OEIwMDI2
NTFDOCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb250YWlu
ZXJJdGVtUHJveHk7CiAJCQljb250YWluZXJQb3J0YWwgPSBGQjM5RDA3MDEyMDBFRDkyMDAwODhF
NjkgLyogUHJvamVjdCBvYmplY3QgKi87CkBAIC00OTgyLDYgKzUwNTAsMjQgQEAKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMTsKIAkJfTsKKwkJNUMxMUEx
MjcxRTQ1NzdFMTAwNEYwOTg3IC8qIENvcHlGaWxlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWENvcHlG
aWxlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSA4OworCQkJZHN0UGF0aCA9ICIk
KElOU1RBTExfUEFUSF9QUkVGSVgpL3Vzci9sb2NhbC9PcGVuU291cmNlVmVyc2lvbnMiOworCQkJ
ZHN0U3ViZm9sZGVyU3BlYyA9IDA7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMTsKKwkJfTsKKwkJNUMxMUExMjgxRTQ1NzdFMTAw
NEYwOTg3IC8qIENvcHlGaWxlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWENvcHlGaWxlc0J1aWxkUGhh
c2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSA4OworCQkJZHN0UGF0aCA9ICIkKElOU1RBTExfUEFU
SF9QUkVGSVgpL3Vzci9sb2NhbC9PcGVuU291cmNlTGljZW5zZXMiOworCQkJZHN0U3ViZm9sZGVy
U3BlYyA9IDA7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMTsKKwkJfTsKIAkJNUM0QjRBODgxRTQyQzMzNjAwMjY1MUM4IC8qIENv
cHlGaWxlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWENvcHlGaWxlc0J1aWxkUGhhc2U7CiAJCQlidWls
ZEFjdGlvbk1hc2sgPSA4OwpAQCAtNjU1NSw2ICs2NjQxLDkgQEAKIAkJNDE0NUY2MUExRkUxRjM4
QzAwRUI5Q0FGIC8qIHZpZGVvX2RlY29kZXJfZmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSB2aWRlb19kZWNvZGVyX2ZhY3RvcnkuaDsgcGF0aCA9IHZpZGVvX2NvZGVj
cy92aWRlb19kZWNvZGVyX2ZhY3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDE0NUY2MUIxRkUxRjM4RDAwRUI5Q0FGIC8qIHZpZGVvX2VuY29kZXJfZmFjdG9yeS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSB2aWRlb19lbmNvZGVyX2ZhY3RvcnkuaDsgcGF0
aCA9IHZpZGVvX2NvZGVjcy92aWRlb19lbmNvZGVyX2ZhY3RvcnkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDE0NUY2MUMxRkUxRjM4RDAwRUI5Q0FGIC8qIHZpZGVvX2VuY29kZXIu
Y2MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSB2aWRlb19lbmNvZGVyLmNj
OyBwYXRoID0gdmlkZW9fY29kZWNzL3ZpZGVvX2VuY29kZXIuY2M7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTQxNEQ3MTEyMUU0QUU5ODIwMDIzRTUyNiAvKiB1c2VyX3NvY2tldC5jICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSB1c2VyX3NvY2tldC5jOyBwYXRoID0gdXNy
c2N0cGxpYi91c2VyX3NvY2tldC5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTRE
NzExNTFFNEFFQUNEMDAyM0U1MjYgLyogc2N0cF9pbmRhdGEuYyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5jOyBwYXRoID0gc2N0cF9pbmRhdGEuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNDE0RDcxMTgxRTRBRUIxMTAwMjNFNTI2IC8qIHNjdHBfdXNlcnNwYWNlLmMgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHNjdHBfdXNlcnNwYWNlLmM7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQxNEZCODY5MjE2QkI3NjcwMDFGNTQ5MiAvKiBSVENSdHBFbmNvZGlu
Z1BhcmFtZXRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlRDUnRwRW5jb2RpbmdQYXJhbWV0ZXJzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNEZCODZBMjE2QkI3NjgwMDFGNTQ5MiAv
KiBSVENSdHBFbmNvZGluZ1BhcmFtZXRlcnMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSVENS
dHBFbmNvZGluZ1BhcmFtZXRlcnMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQx
NTQ0OTlGMjFDQUMzMzAwMDFDMEE1NSAvKiBlY2RoLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
YzsgbmFtZSA9IGVjZGguYzsgcGF0aCA9IGVjZGgvZWNkaC5jOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNzk3Niw3ICs4MDY1LDYgQEAKIAkJNDFGNzdENDMyMTVCRTc0QTAwRTcyOTY3
IC8qIGJjLWRhdGEuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gImJjLWRhdGEuYyI7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQxRjc3RDQ0MjE1QkU3NEIwMEU3Mjk2NyAvKiB4c3RyZHVwLmMgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuYzsgcGF0aCA9IHhzdHJkdXAuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFG
NzdENDUyMTVCRTc0QjAwRTcyOTY3IC8qIGluc24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gaW5zbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MUY4OTk0QjI4RjNFOEZGMDA3MDU0OUMgLyog
c2N0cF9jcmMzMi5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBzY3RwX2NyYzMy
LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRjlCRjkzMjA1MUM4MjAwMEFCRjBC
OSAvKiBhdWRpb19lbmNvZGVyX2ZhY3RvcnlfdGVtcGxhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gYXVkaW9fZW5jb2Rlcl9mYWN0b3J5X3RlbXBsYXRlLmg7IHBhdGggPSBh
dWRpb19jb2RlY3MvYXVkaW9fZW5jb2Rlcl9mYWN0b3J5X3RlbXBsYXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQxRjlCRjk0MjA1MUM4MjAwMEFCRjBCOSAvKiBhdWRpb19lbmNv
ZGVyX2ZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gYXVkaW9fZW5j
b2Rlcl9mYWN0b3J5Lmg7IHBhdGggPSBhdWRpb19jb2RlY3MvYXVkaW9fZW5jb2Rlcl9mYWN0b3J5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRjlCRjk1MjA1MUM4MjEwMEFCRjBC
OSAvKiBhdWRpb19kZWNvZGVyX2ZhY3RvcnlfdGVtcGxhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gYXVkaW9fZGVjb2Rlcl9mYWN0b3J5X3RlbXBsYXRlLmg7IHBhdGggPSBh
dWRpb19jb2RlY3MvYXVkaW9fZGVjb2Rlcl9mYWN0b3J5X3RlbXBsYXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC04MDkwLDYgKzgxNzgsOCBAQAogCQk1QzExQTAxQTFFNDU3NTc4
MDA0RjA5ODcgLyogZmlsZV9hdWRpb19kZXZpY2VfZmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBmaWxlX2F1ZGlvX2RldmljZV9mYWN0b3J5Lmg7IHBhdGggPSBkdW1t
eS9maWxlX2F1ZGlvX2RldmljZV9mYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTVDMTFBMDFCMUU0NTc1NzgwMDRGMDk4NyAvKiBmaWxlX2F1ZGlvX2RldmljZS5jYyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IGZpbGVfYXVkaW9fZGV2aWNlLmNjOyBw
YXRoID0gZHVtbXkvZmlsZV9hdWRpb19kZXZpY2UuY2M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTVDMTFBMDFDMUU0NTc1NzgwMDRGMDk4NyAvKiBmaWxlX2F1ZGlvX2RldmljZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBmaWxlX2F1ZGlvX2RldmljZS5oOyBwYXRo
ID0gZHVtbXkvZmlsZV9hdWRpb19kZXZpY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNUMxMUEwMzMxRTQ1NzZBOTAwNEYwOTg3IC8qIHVzcnNjdHAueGNjb25maWcgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gdXNyc2N0cC54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNUMxMUExMkQxRTQ1NzdFMTAwNEYwOTg3IC8qIGxpYnVzcnNjdHAuYSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5h
cjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGlidXNyc2N0cC5hOyBzb3VyY2VUcmVlID0g
QlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk1QzMxNkQ4ODFFNjYzMjNGMDA4QkU2NEQgLyogQ29y
ZUZvdW5kYXRpb24uZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBDb3JlRm91bmRhdGlvbi5m
cmFtZXdvcms7IHBhdGggPSBTeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVGb3VuZGF0aW9u
LmZyYW1ld29yazsgc291cmNlVHJlZSA9IFNES1JPT1Q7IH07CiAJCTVDMzE2RDhBMUU2NjMzM0Mw
MDhCRTY0RCAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gRm91bmRh
dGlvbi5mcmFtZXdvcms7IHBhdGggPSBTeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0ZvdW5kYXRp
b24uZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsKIAkJNUM0QjQzQjAxRTQyODc3
QTAwMjY1MUM4IC8qIGJvcmluZ3NzbC54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7
IHBhdGggPSBib3Jpbmdzc2wueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC04Mjk3LDYgKzgzODcsNjQgQEAKIAkJNUM0QjRBQTExRTQyQzUyRDAwMjY1MUM4IC8qIHJlcGFj
a2V0aXplcl9kZW1vLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHJlcGFja2V0
aXplcl9kZW1vLmM7IHBhdGggPSBzcmMvcmVwYWNrZXRpemVyX2RlbW8uYzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUM0QjRBQTIxRTQyQzUyRDAwMjY1MUM4IC8qIHJlcGFja2V0aXpl
ci5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSByZXBhY2tldGl6ZXIuYzsgcGF0
aCA9IHNyYy9yZXBhY2tldGl6ZXIuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM0
QjRBQTMxRTQyQzUyRDAwMjY1MUM4IC8qIHRhbnNpZ190YWJsZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSB0YW5zaWdfdGFibGUuaDsgcGF0aCA9IHNyYy90YW5zaWdfdGFibGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QjRBQ0IxRTQyQzlENjAwMjY1MUM4
IC8qIHVzZXJfYXRvbWljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHVzZXJf
YXRvbWljLmg7IHBhdGggPSB1c3JzY3RwbGliL3VzZXJfYXRvbWljLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTVDNEI0QUNDMUU0MkM5RDYwMDI2NTFDOCAvKiB1c2VyX2Vudmlyb25t
ZW50LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHVzZXJfZW52aXJvbm1lbnQu
YzsgcGF0aCA9IHVzcnNjdHBsaWIvdXNlcl9lbnZpcm9ubWVudC5jOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1QzRCNEFDRDFFNDJDOUQ2MDAyNjUxQzggLyogdXNlcl9lbnZpcm9ubWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSB1c2VyX2Vudmlyb25tZW50Lmg7
IHBhdGggPSB1c3JzY3RwbGliL3VzZXJfZW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNUM0QjRBQ0UxRTQyQzlENjAwMjY1MUM4IC8qIHVzZXJfaW5wY2IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gdXNlcl9pbnBjYi5oOyBwYXRoID0gdXNyc2N0
cGxpYi91c2VyX2lucGNiLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEI0QUNG
MUU0MkM5RDYwMDI2NTFDOCAvKiB1c2VyX2lwX2ljbXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gdXNlcl9pcF9pY21wLmg7IHBhdGggPSB1c3JzY3RwbGliL3VzZXJfaXBfaWNt
cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzRCNEFEMDFFNDJDOUQ2MDAyNjUx
QzggLyogdXNlcl9pcDZfdmFyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHVz
ZXJfaXA2X3Zhci5oOyBwYXRoID0gdXNyc2N0cGxpYi91c2VyX2lwNl92YXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QjRBRDExRTQyQzlENjAwMjY1MUM4IC8qIHVzZXJfbWFs
bG9jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHVzZXJfbWFsbG9jLmg7IHBh
dGggPSB1c3JzY3RwbGliL3VzZXJfbWFsbG9jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTVDNEI0QUQyMUU0MkM5RDYwMDI2NTFDOCAvKiB1c2VyX21idWYuYyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5jOyBuYW1lID0gdXNlcl9tYnVmLmM7IHBhdGggPSB1c3JzY3RwbGliL3VzZXJf
bWJ1Zi5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzRCNEFEMzFFNDJDOUQ2MDAy
NjUxQzggLyogdXNlcl9tYnVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHVz
ZXJfbWJ1Zi5oOyBwYXRoID0gdXNyc2N0cGxpYi91c2VyX21idWYuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNUM0QjRBRDQxRTQyQzlENjAwMjY1MUM4IC8qIHVzZXJfcXVldWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gdXNlcl9xdWV1ZS5oOyBwYXRoID0gdXNy
c2N0cGxpYi91c2VyX3F1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEI0
QUQ1MUU0MkM5RDYwMDI2NTFDOCAvKiB1c2VyX3JlY3ZfdGhyZWFkLmMgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuYzsgbmFtZSA9IHVzZXJfcmVjdl90aHJlYWQuYzsgcGF0aCA9IHVzcnNjdHBsaWIv
dXNlcl9yZWN2X3RocmVhZC5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzRCNEFE
NjFFNDJDOUQ2MDAyNjUxQzggLyogdXNlcl9yZWN2X3RocmVhZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSB1c2VyX3JlY3ZfdGhyZWFkLmg7IHBhdGggPSB1c3JzY3RwbGliL3Vz
ZXJfcmVjdl90aHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QjRBRDcx
RTQyQzlENjAwMjY1MUM4IC8qIHVzZXJfcm91dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gdXNlcl9yb3V0ZS5oOyBwYXRoID0gdXNyc2N0cGxpYi91c2VyX3JvdXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEI0QUQ5MUU0MkM5RDYwMDI2NTFDOCAvKiB1
c2VyX3NvY2tldHZhci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSB1c2VyX3Nv
Y2tldHZhci5oOyBwYXRoID0gdXNyc2N0cGxpYi91c2VyX3NvY2tldHZhci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1QzRCNEFEQTFFNDJDOUQ2MDAyNjUxQzggLyogdXNlcl91bWEu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gdXNlcl91bWEuaDsgcGF0aCA9IHVz
cnNjdHBsaWIvdXNlcl91bWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QjRB
REIxRTQyQzlENjAwMjY1MUM4IC8qIHVzcnNjdHAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gdXNyc2N0cC5oOyBwYXRoID0gdXNyc2N0cGxpYi91c3JzY3RwLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEI0QUVFMUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX2Fz
Y29uZi5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBzY3RwX2FzY29uZi5jOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzRCNEFFRjFFNDJDOUVGMDAyNjUxQzggLyog
c2N0cF9hc2NvbmYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc2N0cF9hc2Nv
bmYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QjRBRjAxRTQyQzlFRjAwMjY1
MUM4IC8qIHNjdHBfYXV0aC5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBzY3Rw
X2F1dGguYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QjRBRjExRTQyQzlFRjAw
MjY1MUM4IC8qIHNjdHBfYXV0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBz
Y3RwX2F1dGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QjRBRjIxRTQyQzlF
RjAwMjY1MUM4IC8qIHNjdHBfYnNkX2FkZHIuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBw
YXRoID0gc2N0cF9ic2RfYWRkci5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzRC
NEFGMzFFNDJDOUVGMDAyNjUxQzggLyogc2N0cF9ic2RfYWRkci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBzY3RwX2JzZF9hZGRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTVDNEI0QUY0MUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX2NhbGxvdXQuYyAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gc2N0cF9jYWxsb3V0LmM7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTVDNEI0QUY1MUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX2NhbGxvdXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc2N0cF9jYWxsb3V0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEI0QUY2MUU0MkM5RUYwMDI2NTFDOCAvKiBzY3Rw
X2NjX2Z1bmN0aW9ucy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBzY3RwX2Nj
X2Z1bmN0aW9ucy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzRCNEFGNzFFNDJD
OUVGMDAyNjUxQzggLyogc2N0cF9jb25zdGFudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gc2N0cF9jb25zdGFudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NUM0QjRBRjgxRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHBfY3JjMzIuYyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5jOyBwYXRoID0gc2N0cF9jcmMzMi5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1QzRCNEFGOTFFNDJDOUVGMDAyNjUxQzggLyogc2N0cF9jcmMzMi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBzY3RwX2NyYzMyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTVDNEI0QUZBMUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX2hlYWRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzY3RwX2hlYWRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1QzRCNEFGQzFFNDJDOUVGMDAyNjUxQzggLyogc2N0cF9pbmRhdGEu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc2N0cF9pbmRhdGEuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QjRBRkQxRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHBf
aW5wdXQuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gc2N0cF9pbnB1dC5jOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzRCNEFGRTFFNDJDOUVGMDAyNjUxQzggLyog
c2N0cF9pbnB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzY3RwX2lucHV0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEI0QUZGMUU0MkM5RUYwMDI2NTFD
OCAvKiBzY3RwX2xvY2tfdXNlcnNwYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IHNjdHBfbG9ja191c2Vyc3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NUM0QjRCMDAxRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHBfb3NfdXNlcnNwYWNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHNjdHBfb3NfdXNlcnNwYWNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTVDNEI0QjAxMUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX29zLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHNjdHBfb3MuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QjRCMDIxRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHBfb3V0cHV0
LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHNjdHBfb3V0cHV0LmM7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEI0QjAzMUU0MkM5RUYwMDI2NTFDOCAvKiBzY3Rw
X291dHB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzY3RwX291dHB1dC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzRCNEIwNDFFNDJDOUVGMDAyNjUxQzgg
Lyogc2N0cF9wY2IuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gc2N0cF9wY2Iu
Yzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QjRCMDUxRTQyQzlFRjAwMjY1MUM4
IC8qIHNjdHBfcGNiLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHNjdHBfcGNi
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEI0QjA2MUU0MkM5RUYwMDI2NTFD
OCAvKiBzY3RwX3BlZWxvZmYuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gc2N0
cF9wZWVsb2ZmLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEI0QjA3MUU0MkM5
RUYwMDI2NTFDOCAvKiBzY3RwX3BlZWxvZmYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gc2N0cF9wZWVsb2ZmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEI0
QjA4MUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX3Byb2Nlc3NfbG9jay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBzY3RwX3Byb2Nlc3NfbG9jay5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1QzRCNEIwOTFFNDJDOUVGMDAyNjUxQzggLyogc2N0cF9zaGExLmMgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHNjdHBfc2hhMS5jOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1QzRCNEIwQTFFNDJDOUVGMDAyNjUxQzggLyogc2N0cF9zaGExLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHNjdHBfc2hhMS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1QzRCNEIwQjFFNDJDOUVGMDAyNjUxQzggLyogc2N0cF9zc19m
dW5jdGlvbnMuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gc2N0cF9zc19mdW5j
dGlvbnMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QjRCMEMxRTQyQzlFRjAw
MjY1MUM4IC8qIHNjdHBfc3RydWN0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBzY3RwX3N0cnVjdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QjRCMEQx
RTQyQzlFRjAwMjY1MUM4IC8qIHNjdHBfc3lzY3RsLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
YzsgcGF0aCA9IHNjdHBfc3lzY3RsLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVD
NEI0QjBFMUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX3N5c2N0bC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBzY3RwX3N5c2N0bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1QzRCNEIwRjFFNDJDOUVGMDAyNjUxQzggLyogc2N0cF90aW1lci5jICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmM7IHBhdGggPSBzY3RwX3RpbWVyLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTVDNEI0QjEwMUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX3RpbWVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHNjdHBfdGltZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNUM0QjRCMTExRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHBfdWlvLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHNjdHBfdWlvLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTVDNEI0QjEzMUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX3VzcnJlcS5j
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBzY3RwX3VzcnJlcS5jOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1QzRCNEIxNDFFNDJDOUVGMDAyNjUxQzggLyogc2N0cF92
YXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc2N0cF92YXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QjRCMTUxRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHAu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc2N0cC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1QzRCNEIxNjFFNDJDOUVGMDAyNjUxQzggLyogc2N0cHV0aWwuYyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gc2N0cHV0aWwuYzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QjRCMTcxRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHB1dGlsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHNjdHB1dGlsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTVDNEI0QjQzMUU0MkNBMDAwMDI2NTFDOCAvKiBzY3RwNl91c3Jy
ZXEuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gc2N0cDZfdXNycmVxLmM7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEI0QjQ0MUU0MkNBMDAwMDI2NTFDOCAvKiBz
Y3RwNl92YXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc2N0cDZfdmFyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDNEI0QzEwMUU0MzFGNzUwMDI2NTFDOCAv
KiBiaXRyYXRlX2FkanVzdGVyLmNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gYml0cmF0ZV9hZGp1c3Rlci5jYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM0
QjRDMTMxRTQzMUY3NTAwMjY1MUM4IC8qIGluY29taW5nX3ZpZGVvX3N0cmVhbS5jYyAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGluY29taW5nX3ZpZGVvX3N0cmVhbS5jYzsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM0QjRDMTUxRTQzMUY3NTAwMjY1MUM4IC8q
IHZpZGVvX2ZyYW1lX2J1ZmZlci5jYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IHZpZGVvX2ZyYW1lX2J1ZmZlci5jYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTk4MjAsNiArOTk2OCwxMyBAQAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OworCQk1QzExQTEyNjFFNDU3N0UxMDA0RjA5ODcgLyogRnJhbWV3
b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOworCQkJYnVpbGRB
Y3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OwogCQk1QzRCNEE4NzFFNDJDMzM2
MDAyNjUxQzggLyogRnJhbWV3b3JrcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWls
ZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTk4NTksNiArMTAw
MTQsNyBAQAogCQkJCTVDMDA3MzAzMUU1NTEzRTcwMDQyMjE1QSAvKiBsaWJib3Jpbmdzc2wuYSBp
biBGcmFtZXdvcmtzICovLAogCQkJCTVDMDA3MzA0MUU1NTEzRTcwMDQyMjE1QSAvKiBsaWJvcHVz
LmEgaW4gRnJhbWV3b3JrcyAqLywKIAkJCQk1QzAwNzMwNTFFNTUxM0U3MDA0MjIxNUEgLyogbGli
c3J0cC5hIGluIEZyYW1ld29ya3MgKi8sCisJCQkJNUMwMDczMDYxRTU1MTNFNzAwNDIyMTVBIC8q
IGxpYnVzcnNjdHAuYSBpbiBGcmFtZXdvcmtzICovLAogCQkJCTQxMjk0MDhEMjEyRTBEMTgwMEFE
OTVFNyAvKiBsaWJ2cHguYSBpbiBGcmFtZXdvcmtzICovLAogCQkJCUNERUJCNENBMjRDMDFBMEQw
MEFEQkQ0NCAvKiBsaWJ3ZWJtLmEgaW4gRnJhbWV3b3JrcyAqLywKIAkJCQk1QzAwNzMwODFFNTUx
M0U3MDA0MjIxNUEgLyogbGlieXV2LmEgaW4gRnJhbWV3b3JrcyAqLywKQEAgLTEzMDYxLDcgKzEz
MjE3LDYgQEAKIAkJCQk0MUI4RDg2RTI4Q0I4NEZBMDBFNUZBMzcgLyogY3JjMzJjLmNjICovLAog
CQkJCTQxQjhEODczMjhDQjg0RkIwMEU1RkEzNyAvKiBjcmMzMmMuaCAqLywKIAkJCQk0MUI4RDg3
MDI4Q0I4NEZBMDBFNUZBMzcgLyogZGF0YS5oICovLAotCQkJCTQxRjg5OTRCMjhGM0U4RkYwMDcw
NTQ5QyAvKiBzY3RwX2NyYzMyLmMgKi8sCiAJCQkJNDFCOEQ4NzUyOENCODRGQzAwRTVGQTM3IC8q
IHNjdHBfcGFja2V0LmNjICovLAogCQkJCTQxQjhEODcxMjhDQjg0RkIwMEU1RkEzNyAvKiBzY3Rw
X3BhY2tldC5oICovLAogCQkJCTQxQjhEODcyMjhDQjg0RkIwMEU1RkEzNyAvKiB0bHZfdHJhaXQu
Y2MgKi8sCkBAIC0xNDY4Myw2ICsxNDgzOCwxMDAgQEAKIAkJCW5hbWUgPSBzcmM7CiAJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk1QzRCNEFDODFFNDJDOTgwMDAyNjUxQzggLyog
dXNyc2N0cCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJ
NUM0QjRBQ0ExRTQyQzlCRTAwMjY1MUM4IC8qIHVzcnNjdHBsaWIgKi8sCisJCQkpOworCQkJcGF0
aCA9IHVzcnNjdHA7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk1QzRCNEFD
QTFFNDJDOUJFMDAyNjUxQzggLyogdXNyc2N0cGxpYiAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3Vw
OworCQkJY2hpbGRyZW4gPSAoCisJCQkJNUM0QjRBRUQxRTQyQzlFMzAwMjY1MUM4IC8qIG5ldGlu
ZXQgKi8sCisJCQkJNUM0QjRCNDIxRTQyQzlGNjAwMjY1MUM4IC8qIG5ldGluZXQ2ICovLAorCQkJ
CTVDNEI0QUNCMUU0MkM5RDYwMDI2NTFDOCAvKiB1c2VyX2F0b21pYy5oICovLAorCQkJCTVDNEI0
QUNDMUU0MkM5RDYwMDI2NTFDOCAvKiB1c2VyX2Vudmlyb25tZW50LmMgKi8sCisJCQkJNUM0QjRB
Q0QxRTQyQzlENjAwMjY1MUM4IC8qIHVzZXJfZW52aXJvbm1lbnQuaCAqLywKKwkJCQk1QzRCNEFD
RTFFNDJDOUQ2MDAyNjUxQzggLyogdXNlcl9pbnBjYi5oICovLAorCQkJCTVDNEI0QUQwMUU0MkM5
RDYwMDI2NTFDOCAvKiB1c2VyX2lwNl92YXIuaCAqLywKKwkJCQk1QzRCNEFDRjFFNDJDOUQ2MDAy
NjUxQzggLyogdXNlcl9pcF9pY21wLmggKi8sCisJCQkJNUM0QjRBRDExRTQyQzlENjAwMjY1MUM4
IC8qIHVzZXJfbWFsbG9jLmggKi8sCisJCQkJNUM0QjRBRDIxRTQyQzlENjAwMjY1MUM4IC8qIHVz
ZXJfbWJ1Zi5jICovLAorCQkJCTVDNEI0QUQzMUU0MkM5RDYwMDI2NTFDOCAvKiB1c2VyX21idWYu
aCAqLywKKwkJCQk1QzRCNEFENDFFNDJDOUQ2MDAyNjUxQzggLyogdXNlcl9xdWV1ZS5oICovLAor
CQkJCTVDNEI0QUQ1MUU0MkM5RDYwMDI2NTFDOCAvKiB1c2VyX3JlY3ZfdGhyZWFkLmMgKi8sCisJ
CQkJNUM0QjRBRDYxRTQyQzlENjAwMjY1MUM4IC8qIHVzZXJfcmVjdl90aHJlYWQuaCAqLywKKwkJ
CQk1QzRCNEFENzFFNDJDOUQ2MDAyNjUxQzggLyogdXNlcl9yb3V0ZS5oICovLAorCQkJCTQxNEQ3
MTEyMUU0QUU5ODIwMDIzRTUyNiAvKiB1c2VyX3NvY2tldC5jICovLAorCQkJCTVDNEI0QUQ5MUU0
MkM5RDYwMDI2NTFDOCAvKiB1c2VyX3NvY2tldHZhci5oICovLAorCQkJCTVDNEI0QURBMUU0MkM5
RDYwMDI2NTFDOCAvKiB1c2VyX3VtYS5oICovLAorCQkJCTVDNEI0QURCMUU0MkM5RDYwMDI2NTFD
OCAvKiB1c3JzY3RwLmggKi8sCisJCQkpOworCQkJcGF0aCA9IHVzcnNjdHBsaWI7CisJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk1QzRCNEFFRDFFNDJDOUUzMDAyNjUxQzggLyog
bmV0aW5ldCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJ
NUM0QjRCMTUxRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHAuaCAqLywKKwkJCQk1QzRCNEFFRTFFNDJD
OUVGMDAyNjUxQzggLyogc2N0cF9hc2NvbmYuYyAqLywKKwkJCQk1QzRCNEFFRjFFNDJDOUVGMDAy
NjUxQzggLyogc2N0cF9hc2NvbmYuaCAqLywKKwkJCQk1QzRCNEFGMDFFNDJDOUVGMDAyNjUxQzgg
Lyogc2N0cF9hdXRoLmMgKi8sCisJCQkJNUM0QjRBRjExRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHBf
YXV0aC5oICovLAorCQkJCTVDNEI0QUYyMUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX2JzZF9hZGRy
LmMgKi8sCisJCQkJNUM0QjRBRjMxRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHBfYnNkX2FkZHIuaCAq
LywKKwkJCQk1QzRCNEFGNDFFNDJDOUVGMDAyNjUxQzggLyogc2N0cF9jYWxsb3V0LmMgKi8sCisJ
CQkJNUM0QjRBRjUxRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHBfY2FsbG91dC5oICovLAorCQkJCTVD
NEI0QUY2MUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX2NjX2Z1bmN0aW9ucy5jICovLAorCQkJCTVD
NEI0QUY3MUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX2NvbnN0YW50cy5oICovLAorCQkJCTVDNEI0
QUY4MUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX2NyYzMyLmMgKi8sCisJCQkJNUM0QjRBRjkxRTQy
QzlFRjAwMjY1MUM4IC8qIHNjdHBfY3JjMzIuaCAqLywKKwkJCQk1QzRCNEFGQTFFNDJDOUVGMDAy
NjUxQzggLyogc2N0cF9oZWFkZXIuaCAqLywKKwkJCQk0MTRENzExNTFFNEFFQUNEMDAyM0U1MjYg
Lyogc2N0cF9pbmRhdGEuYyAqLywKKwkJCQk1QzRCNEFGQzFFNDJDOUVGMDAyNjUxQzggLyogc2N0
cF9pbmRhdGEuaCAqLywKKwkJCQk1QzRCNEFGRDFFNDJDOUVGMDAyNjUxQzggLyogc2N0cF9pbnB1
dC5jICovLAorCQkJCTVDNEI0QUZFMUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX2lucHV0LmggKi8s
CisJCQkJNUM0QjRBRkYxRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHBfbG9ja191c2Vyc3BhY2UuaCAq
LywKKwkJCQk1QzRCNEIwMTFFNDJDOUVGMDAyNjUxQzggLyogc2N0cF9vcy5oICovLAorCQkJCTVD
NEI0QjAwMUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX29zX3VzZXJzcGFjZS5oICovLAorCQkJCTVD
NEI0QjAyMUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX291dHB1dC5jICovLAorCQkJCTVDNEI0QjAz
MUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX291dHB1dC5oICovLAorCQkJCTVDNEI0QjA0MUU0MkM5
RUYwMDI2NTFDOCAvKiBzY3RwX3BjYi5jICovLAorCQkJCTVDNEI0QjA1MUU0MkM5RUYwMDI2NTFD
OCAvKiBzY3RwX3BjYi5oICovLAorCQkJCTVDNEI0QjA2MUU0MkM5RUYwMDI2NTFDOCAvKiBzY3Rw
X3BlZWxvZmYuYyAqLywKKwkJCQk1QzRCNEIwNzFFNDJDOUVGMDAyNjUxQzggLyogc2N0cF9wZWVs
b2ZmLmggKi8sCisJCQkJNUM0QjRCMDgxRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHBfcHJvY2Vzc19s
b2NrLmggKi8sCisJCQkJNUM0QjRCMDkxRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHBfc2hhMS5jICov
LAorCQkJCTVDNEI0QjBBMUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX3NoYTEuaCAqLywKKwkJCQk1
QzRCNEIwQjFFNDJDOUVGMDAyNjUxQzggLyogc2N0cF9zc19mdW5jdGlvbnMuYyAqLywKKwkJCQk1
QzRCNEIwQzFFNDJDOUVGMDAyNjUxQzggLyogc2N0cF9zdHJ1Y3RzLmggKi8sCisJCQkJNUM0QjRC
MEQxRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHBfc3lzY3RsLmMgKi8sCisJCQkJNUM0QjRCMEUxRTQy
QzlFRjAwMjY1MUM4IC8qIHNjdHBfc3lzY3RsLmggKi8sCisJCQkJNUM0QjRCMEYxRTQyQzlFRjAw
MjY1MUM4IC8qIHNjdHBfdGltZXIuYyAqLywKKwkJCQk1QzRCNEIxMDFFNDJDOUVGMDAyNjUxQzgg
Lyogc2N0cF90aW1lci5oICovLAorCQkJCTVDNEI0QjExMUU0MkM5RUYwMDI2NTFDOCAvKiBzY3Rw
X3Vpby5oICovLAorCQkJCTQxNEQ3MTE4MUU0QUVCMTEwMDIzRTUyNiAvKiBzY3RwX3VzZXJzcGFj
ZS5jICovLAorCQkJCTVDNEI0QjEzMUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX3VzcnJlcS5jICov
LAorCQkJCTVDNEI0QjE0MUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX3Zhci5oICovLAorCQkJCTVD
NEI0QjE2MUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwdXRpbC5jICovLAorCQkJCTVDNEI0QjE3MUU0
MkM5RUYwMDI2NTFDOCAvKiBzY3RwdXRpbC5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBuZXRpbmV0
OworCQkJcGF0aCA9IHVzcnNjdHBsaWIvbmV0aW5ldDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CisJCX07CisJCTVDNEI0QjQyMUU0MkM5RjYwMDI2NTFDOCAvKiBuZXRpbmV0NiAqLyA9IHsK
KwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNUM0QjRCNDMxRTQyQ0Ew
MDAwMjY1MUM4IC8qIHNjdHA2X3VzcnJlcS5jICovLAorCQkJCTVDNEI0QjQ0MUU0MkNBMDAwMDI2
NTFDOCAvKiBzY3RwNl92YXIuaCAqLywKKwkJCSk7CisJCQluYW1lID0gbmV0aW5ldDY7CisJCQlw
YXRoID0gdXNyc2N0cGxpYi9uZXRpbmV0NjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJ
CX07CiAJCTVDNEI0QjU3MUU0MzFDMjAwMDI2NTFDOCAvKiBzZGsgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMTQ4OTEsNiArMTUxNDAsNyBAQAogCQkJCTVD
NEI0QTkwMUU0MkM0QzgwMDI2NTFDOCAvKiBvcHVzICovLAogCQkJCTQxMzFDNDMzMjM0QzdFMDQw
MDI4QTYxNSAvKiBwZmZmdCAqLywKIAkJCQk0MTkyNDE5MTIxMjc1ODM5MDA2MzRGQ0YgLyogcm5u
bm9pc2UgKi8sCisJCQkJNUM0QjRBQzgxRTQyQzk4MDAwMjY1MUM4IC8qIHVzcnNjdHAgKi8sCiAJ
CQkJNDFGNzczRkUyMTVCRTMzMzAwRTcyOTY3IC8qIHlhc20gKi8sCiAJCQkpOwogCQkJcGF0aCA9
IHRoaXJkX3BhcnR5OwpAQCAtMTczMDcsNiArMTc1NTcsNyBAQAogCQkJCTVEN0M1OUM1MTIwOEM2
OEIwMDFDODczRSAvKiBsaWJ3ZWJydGMueGNjb25maWcgKi8sCiAJCQkJNUMwODg0OEExRTRBOTc4
QzAwNDAzOTk1IC8qIGxpYnl1di54Y2NvbmZpZyAqLywKIAkJCQk1QzRCNEE4RjFFNDJDNDMxMDAy
NjUxQzggLyogb3B1cy54Y2NvbmZpZyAqLywKKwkJCQk1QzExQTAzMzFFNDU3NkE5MDA0RjA5ODcg
LyogdXNyc2N0cC54Y2NvbmZpZyAqLywKIAkJCQk0MUY3N0QxRTIxNUJFNEFEMDBFNzI5NjcgLyog
eWFzbS54Y2NvbmZpZyAqLywKIAkJCSk7CiAJCQlwYXRoID0gQ29uZmlndXJhdGlvbnM7CkBAIC0x
NzgxMCw2ICsxODA2MSw3IEBACiAJCQkJNUM2M0ZDNjAxRTQxODQxMTAwMkNBNTMxIC8qIGxpYmJv
cmluZ3NzbC5hICovLAogCQkJCTVDNEI0QThFMUU0MkMzMzYwMDI2NTFDOCAvKiBsaWJvcHVzLmEg
Ki8sCiAJCQkJNUMwODg0RDExRTRBOTdFMzAwNDAzOTk1IC8qIGxpYnNydHAuYSAqLywKKwkJCQk1
QzExQTEyRDFFNDU3N0UxMDA0RjA5ODcgLyogbGlidXNyc2N0cC5hICovLAogCQkJCTQxMDVFQjgz
MjEyRTAxRDIwMDhDMEMyMCAvKiBsaWJ2cHguYSAqLywKIAkJCQlDREVCQjExOTI0QzAxODc0MDBB
REJENDQgLyogbGlid2VibS5hICovLAogCQkJCUZCMzlEMEQxMTIwMEYwRTMwMDA4OEU2OSAvKiBs
aWJ3ZWJydGMuZHlsaWIgKi8sCkBAIC0xNzk4OCw2ICsxODI0MCw1MSBAQAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OworCQk1QzExQTAzNzFF
NDU3N0UxMDA0RjA5ODcgLyogSGVhZGVycyAqLyA9IHsKKwkJCWlzYSA9IFBCWEhlYWRlcnNCdWls
ZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAor
CQkJCTVDNjAyNDZGMUU0OTUwQTAwMDg4RjBCMiAvKiBzY3RwLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk1QzYwMjQ5ODFFNDk1MEE1MDA4OEYwQjIgLyogc2N0cDZfdmFyLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1QzYwMjQ3MTFFNDk1MEEwMDA4OEYwQjIgLyogc2N0cF9hc2NvbmYuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTVDNjAyNDczMUU0OTUwQTAwMDg4RjBCMiAvKiBzY3RwX2F1dGguaCBpbiBIZWFk
ZXJzICovLAorCQkJCTVDNjAyNDc1MUU0OTUwQTAwMDg4RjBCMiAvKiBzY3RwX2JzZF9hZGRyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk1QzYwMjQ3NzFFNDk1MEEwMDA4OEYwQjIgLyogc2N0cF9jYWxs
b3V0LmggaW4gSGVhZGVycyAqLywKKwkJCQk1QzYwMjQ3OTFFNDk1MEEwMDA4OEYwQjIgLyogc2N0
cF9jb25zdGFudHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDNjAyNDdCMUU0OTUwQTAwMDg4RjBC
MiAvKiBzY3RwX2NyYzMyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1QzYwMjQ3QzFFNDk1MEEwMDA4
OEYwQjIgLyogc2N0cF9oZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDNjAyNDdEMUU0OTUw
QTAwMDg4RjBCMiAvKiBzY3RwX2luZGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUM2MDI0N0Yx
RTQ5NTBBMDAwODhGMEIyIC8qIHNjdHBfaW5wdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDNjAy
NDgwMUU0OTUwQTAwMDg4RjBCMiAvKiBzY3RwX2xvY2tfdXNlcnNwYWNlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1QzYwMjQ4MTFFNDk1MEEwMDA4OEYwQjIgLyogc2N0cF9vcy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNUM2MDI0ODIxRTQ5NTBBMDAwODhGMEIyIC8qIHNjdHBfb3NfdXNlcnNwYWNlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk1QzYwMjQ4NDFFNDk1MEEwMDA4OEYwQjIgLyogc2N0cF9vdXRw
dXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDNjAyNDg2MUU0OTUwQTAwMDg4RjBCMiAvKiBzY3Rw
X3BjYi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUM2MDI0ODgxRTQ5NTBBMDAwODhGMEIyIC8qIHNj
dHBfcGVlbG9mZi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUM2MDI0ODkxRTQ5NTBBMDAwODhGMEIy
IC8qIHNjdHBfcHJvY2Vzc19sb2NrLmggaW4gSGVhZGVycyAqLywKKwkJCQk1QzYwMjQ4QjFFNDk1
MEEwMDA4OEYwQjIgLyogc2N0cF9zaGExLmggaW4gSGVhZGVycyAqLywKKwkJCQk1QzYwMjQ4RDFF
NDk1MEEwMDA4OEYwQjIgLyogc2N0cF9zdHJ1Y3RzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1QzYw
MjQ4RjFFNDk1MEEwMDA4OEYwQjIgLyogc2N0cF9zeXNjdGwuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTVDNjAyNDkxMUU0OTUwQTAwMDg4RjBCMiAvKiBzY3RwX3RpbWVyLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1QzYwMjQ5MjFFNDk1MEEwMDA4OEYwQjIgLyogc2N0cF91aW8uaCBpbiBIZWFkZXJzICov
LAorCQkJCTVDNjAyNDk0MUU0OTUwQTAwMDg4RjBCMiAvKiBzY3RwX3Zhci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNUM2MDI0OTYxRTQ5NTBBMDAwODhGMEIyIC8qIHNjdHB1dGlsLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1QzYwMjQ1RjFFNDk0REI4MDA4OEYwQjIgLyogdXNlcl9hdG9taWMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTVDNjAyNDYxMUU0OTREQjgwMDg4RjBCMiAvKiB1c2VyX2Vudmlyb25t
ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1QzYwMjQ2MjFFNDk0REI4MDA4OEYwQjIgLyogdXNl
cl9pbnBjYi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUM2MDI0NjMxRTQ5NERCODAwODhGMEIyIC8q
IHVzZXJfaXA2X3Zhci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUM2MDI0NjQxRTQ5NERCODAwODhG
MEIyIC8qIHVzZXJfaXBfaWNtcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUM2MDI0NjUxRTQ5NERC
ODAwODhGMEIyIC8qIHVzZXJfbWFsbG9jLmggaW4gSGVhZGVycyAqLywKKwkJCQk1QzYwMjQ2NzFF
NDk0REI4MDA4OEYwQjIgLyogdXNlcl9tYnVmLmggaW4gSGVhZGVycyAqLywKKwkJCQk1QzYwMjQ2
ODFFNDk0REI4MDA4OEYwQjIgLyogdXNlcl9xdWV1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUM2
MDI0NkExRTQ5NERCODAwODhGMEIyIC8qIHVzZXJfcmVjdl90aHJlYWQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTVDNjAyNDZCMUU0OTREQjgwMDg4RjBCMiAvKiB1c2VyX3JvdXRlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1QzYwMjQ2QzFFNDk0REI4MDA4OEYwQjIgLyogdXNlcl9zb2NrZXR2YXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTVDNjAyNDZEMUU0OTREQjgwMDg4RjBCMiAvKiB1c2VyX3VtYS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNUM2MDI0NkUxRTQ5NERCODAwODhGMEIyIC8qIHVzcnNjdHAu
aCBpbiBIZWFkZXJzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOworCQl9OwogCQk1QzRCNDkxMTFFNDJDMzM2MDAyNjUxQzggLyogSGVhZGVycyAq
LyA9IHsKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKQEAgLTIwMzk5LDYgKzIwNjk2LDI1IEBACiAJCQlwcm9kdWN0UmVmZXJl
bmNlID0gNUMwODg0REUxRTRBOTgwMTAwNDAzOTk1IC8qIGxpYnl1di5hICovOwogCQkJcHJvZHVj
dFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYyI7CiAJCX07CisJ
CTVDMTFBMDM0MUU0NTc3RTEwMDRGMDk4NyAvKiB1c3JzY3RwICovID0geworCQkJaXNhID0gUEJY
TmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDVDMTFBMTI5MUU0NTc3
RTEwMDRGMDk4NyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdl
dCAidXNyc2N0cCIgKi87CisJCQlidWlsZFBoYXNlcyA9ICgKKwkJCQk1QzExQTAzNzFFNDU3N0Ux
MDA0RjA5ODcgLyogSGVhZGVycyAqLywKKwkJCQk1QzExQTA3NzFFNDU3N0UxMDA0RjA5ODcgLyog
U291cmNlcyAqLywKKwkJCQk1QzExQTEyNjFFNDU3N0UxMDA0RjA5ODcgLyogRnJhbWV3b3JrcyAq
LywKKwkJCQk1QzExQTEyNzFFNDU3N0UxMDA0RjA5ODcgLyogQ29weUZpbGVzICovLAorCQkJCTVD
MTFBMTI4MUU0NTc3RTEwMDRGMDk4NyAvKiBDb3B5RmlsZXMgKi8sCisJCQkpOworCQkJYnVpbGRS
dWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJbmFtZSA9IHVz
cnNjdHA7CisJCQlwcm9kdWN0TmFtZSA9IGJvcmluZ3NzbDsKKwkJCXByb2R1Y3RSZWZlcmVuY2Ug
PSA1QzExQTEyRDFFNDU3N0UxMDA0RjA5ODcgLyogbGlidXNyc2N0cC5hICovOworCQkJcHJvZHVj
dFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYyI7CisJCX07CiAJ
CTVDNEI0OTBFMUU0MkMzMzYwMDI2NTFDOCAvKiBvcHVzICovID0gewogCQkJaXNhID0gUEJYTmF0
aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDVDNEI0QThBMUU0MkMzMzYw
MDI2NTFDOCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAi
b3B1cyIgKi87CkBAIC0yMDUwNyw2ICsyMDgyMyw3IEBACiAJCQkJNDExRUQwNDAyMTJFMDgxMTAw
NDMyMEJBIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJNUMwODg0RTAxRTRBOTgyMDAw
NDAzOTk1IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJNUMwODg0RTIxRTRBOTgyMDAw
NDAzOTk1IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCisJCQkJNUMxMUExM0YxRTQ1NzgzQTAw
NEYwOTg3IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJNUM0QjRBQzcxRTQyQzU4QjAw
MjY1MUM4IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJNUM2M0ZDNjIxRTQxODQ0OTAw
MkNBNTMxIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkpOwpAQCAtMjA1NTQsNiArMjA4
NzEsNyBAQAogCQkJCUZCMzlEMEQwMTIwMEYwRTMwMDA4OEU2OSAvKiBsaWJ3ZWJydGMgKi8sCiAJ
CQkJNUM2M0ZBN0ExRTQxODQxMTAwMkNBNTMxIC8qIGJvcmluZ3NzbCAqLywKIAkJCQk1QzRCNDkw
RTFFNDJDMzM2MDAyNjUxQzggLyogb3B1cyAqLywKKwkJCQk1QzExQTAzNDFFNDU3N0UxMDA0RjA5
ODcgLyogdXNyc2N0cCAqLywKIAkJCQk1QzA4ODQ4QjFFNEE5N0UzMDA0MDM5OTUgLyogc3J0cCAq
LywKIAkJCQk1QzA4ODREMjFFNEE5ODAxMDA0MDM5OTUgLyogeXV2ICovLAogCQkJCTQxMDVFQjY5
MjEyRTAxRDIwMDhDMEMyMCAvKiB2cHggKi8sCkBAIC0yMTE2NSw2ICsyMTQ4MywzNiBAQAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OworCQk1
QzExQTA3NzFFNDU3N0UxMDA0RjA5ODcgLyogU291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWFNv
dXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZp
bGVzID0gKAorCQkJCTVDNjAyNDk3MUU0OTUwQTUwMDg4RjBCMiAvKiBzY3RwNl91c3JyZXEuYyBp
biBTb3VyY2VzICovLAorCQkJCTVDNjAyNDcwMUU0OTUwQTAwMDg4RjBCMiAvKiBzY3RwX2FzY29u
Zi5jIGluIFNvdXJjZXMgKi8sCisJCQkJNUM2MDI0NzIxRTQ5NTBBMDAwODhGMEIyIC8qIHNjdHBf
YXV0aC5jIGluIFNvdXJjZXMgKi8sCisJCQkJNUM2MDI0NzQxRTQ5NTBBMDAwODhGMEIyIC8qIHNj
dHBfYnNkX2FkZHIuYyBpbiBTb3VyY2VzICovLAorCQkJCTVDNjAyNDc2MUU0OTUwQTAwMDg4RjBC
MiAvKiBzY3RwX2NhbGxvdXQuYyBpbiBTb3VyY2VzICovLAorCQkJCTVDNjAyNDc4MUU0OTUwQTAw
MDg4RjBCMiAvKiBzY3RwX2NjX2Z1bmN0aW9ucy5jIGluIFNvdXJjZXMgKi8sCisJCQkJNUM2MDI0
N0ExRTQ5NTBBMDAwODhGMEIyIC8qIHNjdHBfY3JjMzIuYyBpbiBTb3VyY2VzICovLAorCQkJCTQx
NEQ3MTE3MUU0QUVBRkIwMDIzRTUyNiAvKiBzY3RwX2luZGF0YS5jIGluIFNvdXJjZXMgKi8sCisJ
CQkJNUM2MDI0N0UxRTQ5NTBBMDAwODhGMEIyIC8qIHNjdHBfaW5wdXQuYyBpbiBTb3VyY2VzICov
LAorCQkJCTVDNjAyNDgzMUU0OTUwQTAwMDg4RjBCMiAvKiBzY3RwX291dHB1dC5jIGluIFNvdXJj
ZXMgKi8sCisJCQkJNUM2MDI0OTkxRTQ5NTE2MTAwODhGMEIyIC8qIHNjdHBfcGNiLmMgaW4gU291
cmNlcyAqLywKKwkJCQk1QzYwMjQ4NzFFNDk1MEEwMDA4OEYwQjIgLyogc2N0cF9wZWVsb2ZmLmMg
aW4gU291cmNlcyAqLywKKwkJCQk1QzYwMjQ4QTFFNDk1MEEwMDA4OEYwQjIgLyogc2N0cF9zaGEx
LmMgaW4gU291cmNlcyAqLywKKwkJCQk1QzYwMjQ4QzFFNDk1MEEwMDA4OEYwQjIgLyogc2N0cF9z
c19mdW5jdGlvbnMuYyBpbiBTb3VyY2VzICovLAorCQkJCTVDNjAyNDhFMUU0OTUwQTAwMDg4RjBC
MiAvKiBzY3RwX3N5c2N0bC5jIGluIFNvdXJjZXMgKi8sCisJCQkJNUM2MDI0OTAxRTQ5NTBBMDAw
ODhGMEIyIC8qIHNjdHBfdGltZXIuYyBpbiBTb3VyY2VzICovLAorCQkJCTQxNEQ3MTE5MUU0QUVC
MTEwMDIzRTUyNiAvKiBzY3RwX3VzZXJzcGFjZS5jIGluIFNvdXJjZXMgKi8sCisJCQkJNUM2MDI0
OTMxRTQ5NTBBMDAwODhGMEIyIC8qIHNjdHBfdXNycmVxLmMgaW4gU291cmNlcyAqLywKKwkJCQk1
QzYwMjQ5NTFFNDk1MEEwMDA4OEYwQjIgLyogc2N0cHV0aWwuYyBpbiBTb3VyY2VzICovLAorCQkJ
CTVDNjAyNDYwMUU0OTREQjgwMDg4RjBCMiAvKiB1c2VyX2Vudmlyb25tZW50LmMgaW4gU291cmNl
cyAqLywKKwkJCQk1QzYwMjQ2NjFFNDk0REI4MDA4OEYwQjIgLyogdXNlcl9tYnVmLmMgaW4gU291
cmNlcyAqLywKKwkJCQk1QzYwMjQ2OTFFNDk0REI4MDA4OEYwQjIgLyogdXNlcl9yZWN2X3RocmVh
ZC5jIGluIFNvdXJjZXMgKi8sCisJCQkJNDE0RDcxMTQxRTRBRTk4QzAwMjNFNTI2IC8qIHVzZXJf
c29ja2V0LmMgaW4gU291cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJNUM0QjQ5MkYxRTQyQzMzNjAwMjY1MUM4IC8qIFNv
dXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0
aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC0yMjY2Miw3ICsyMzAxMCw2IEBACiAJCQkJNUNGRDUz
OTMxRTRCRDNBMzAwNDgyOTA4IC8qIHNjYWxlX25lb24uY2MgaW4gU291cmNlcyAqLywKIAkJCQk1
Q0ZENTM5NDFFNEJEM0EzMDA0ODI5MDggLyogc2NhbGVfbmVvbjY0LmNjIGluIFNvdXJjZXMgKi8s
CiAJCQkJNDEyMzlCM0YyMTQ3NkRDNDAwMzk2RjgxIC8qIHNjcmVlbnNoYXJlX2xheWVycy5jYyBp
biBTb3VyY2VzICovLAotCQkJCTQxRjg5OTRDMjhGM0U5MDAwMDcwNTQ5QyAvKiBzY3RwX2NyYzMy
LmMgaW4gU291cmNlcyAqLywKIAkJCQk0MTJGRjk4MTI1NEIzQ0E2MDAxREYwMzYgLyogc2N0cF9k
YXRhX2NoYW5uZWwuY2MgaW4gU291cmNlcyAqLywKIAkJCQk0MTg5MzlFNTI0MkE3MzM3MDA3RkRD
NDEgLyogc2N0cF9kYXRhX2NoYW5uZWxfdHJhbnNwb3J0LmNjIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NDFCOEQ4N0YyOENCODRGRDAwRTVGQTM3IC8qIHNjdHBfcGFja2V0LmNjIGluIFNvdXJjZXMgKi8s
CkBAIC0yMjk3Nyw2ICsyMzMyNCwxMSBAQAogCQkJdGFyZ2V0ID0gNUMwODg0RDIxRTRBOTgwMTAw
NDAzOTk1IC8qIHl1diAqLzsKIAkJCXRhcmdldFByb3h5ID0gNUMwODg0RTExRTRBOTgyMDAwNDAz
OTk1IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKIAkJfTsKKwkJNUMxMUExM0YxRTQ1Nzgz
QTAwNEYwOTg3IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CisJCQlpc2EgPSBQQlhUYXJn
ZXREZXBlbmRlbmN5OworCQkJdGFyZ2V0ID0gNUMxMUEwMzQxRTQ1NzdFMTAwNEYwOTg3IC8qIHVz
cnNjdHAgKi87CisJCQl0YXJnZXRQcm94eSA9IDVDMTFBMTNFMUU0NTc4M0EwMDRGMDk4NyAvKiBQ
QlhDb250YWluZXJJdGVtUHJveHkgKi87CisJCX07CiAJCTVDNEI0QUM3MUU0MkM1OEIwMDI2NTFD
OCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0gewogCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5k
ZW5jeTsKIAkJCXRhcmdldCA9IDVDNEI0OTBFMUU0MkMzMzYwMDI2NTFDOCAvKiBvcHVzICovOwpA
QCAtMjMxMDAsNiArMjM0NTIsNDggQEAKIAkJCX07CiAJCQluYW1lID0gUHJvZHVjdGlvbjsKIAkJ
fTsKKwkJNUMxMUExMkExRTQ1NzdFMTAwNEYwOTg3IC8qIERlYnVnICovID0geworCQkJaXNhID0g
WENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDVD
MTFBMDMzMUU0NTc2QTkwMDRGMDk4NyAvKiB1c3JzY3RwLnhjY29uZmlnICovOworCQkJYnVpbGRT
ZXR0aW5ncyA9IHsKKwkJCQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAorCQkJCQlTb3VyY2UvLAor
CQkJCQlTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvLAorCQkJ
CQlTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliLywKKwkJCQkJU291cmNlL3Ro
aXJkX3BhcnR5L2JvcmluZ3NzbC9zcmMvaW5jbHVkZS8sCisJCQkJCVNvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi8sCisJCQkJKTsKKwkJCX07CisJCQluYW1l
ID0gRGVidWc7CisJCX07CisJCTVDMTFBMTJCMUU0NTc3RTEwMDRGMDk4NyAvKiBSZWxlYXNlICov
ID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlv
blJlZmVyZW5jZSA9IDVDMTFBMDMzMUU0NTc2QTkwMDRGMDk4NyAvKiB1c3JzY3RwLnhjY29uZmln
ICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAor
CQkJCQlTb3VyY2UvLAorCQkJCQlTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L25ldGluZXQvLAorCQkJCQlTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliLywK
KwkJCQkJU291cmNlL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9zcmMvaW5jbHVkZS8sCisJCQkJCVNv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi8sCisJCQkJKTsK
KwkJCX07CisJCQluYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJNUMxMUExMkMxRTQ1NzdFMTAwNEYw
OTg3IC8qIFByb2R1Y3Rpb24gKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsK
KwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gNUMxMUEwMzMxRTQ1NzZBOTAwNEYwOTg3
IC8qIHVzcnNjdHAueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUhFQURF
Ul9TRUFSQ0hfUEFUSFMgPSAoCisJCQkJCVNvdXJjZS8sCisJCQkJCVNvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC8sCisJCQkJCVNvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvLAorCQkJCQlTb3VyY2UvdGhpcmRfcGFydHkvYm9yaW5nc3NsL3Ny
Yy9pbmNsdWRlLywKKwkJCQkJU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91
c3JzY3RwbGliLywKKwkJCQkpOworCQkJfTsKKwkJCW5hbWUgPSBQcm9kdWN0aW9uOworCQl9Owog
CQk1QzRCNEE4QjFFNDJDMzM2MDAyNjUxQzggLyogRGVidWcgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1
aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gNUM0QjRB
OEYxRTQyQzQzMTAwMjY1MUM4IC8qIG9wdXMueGNjb25maWcgKi87CkBAIC0yMzI4NSw2ICsyMzY3
OSwxNiBAQAogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwogCQkJZGVmYXVs
dENvbmZpZ3VyYXRpb25OYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsKKwkJNUMxMUExMjkxRTQ1NzdF
MTAwNEYwOTg3IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0
ICJ1c3JzY3RwIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWls
ZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCTVDMTFBMTJBMUU0NTc3RTEwMDRGMDk4NyAvKiBEZWJ1
ZyAqLywKKwkJCQk1QzExQTEyQjFFNDU3N0UxMDA0RjA5ODcgLyogUmVsZWFzZSAqLywKKwkJCQk1
QzExQTEyQzFFNDU3N0UxMDA0RjA5ODcgLyogUHJvZHVjdGlvbiAqLywKKwkJCSk7CisJCQlkZWZh
dWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5h
bWUgPSBQcm9kdWN0aW9uOworCQl9OwogCQk1QzRCNEE4QTFFNDJDMzM2MDAyNjUxQzggLyogQnVp
bGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIm9wdXMiICovID0gewog
CQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAo
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IDM4ZGNkYTVhMjJmZi4uN2UxZWFkMWNiZGFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtNTgsNiArNTgsNyBAQCBsaXN0KEFQUEVO
RCBXZWJDb3JlX0xJQlJBUklFUwogICAgICR7VklERU9UT09MQk9YX0xJQlJBUll9CiAgICAgJHtY
TUwyX0xJQlJBUll9CiAgICAgb3B1cworICAgIHVzcnNjdHAKICAgICB2cHgKICAgICB3ZWJtCiAg
ICAgeXV2Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>