Re: nano: make configuring key bindings easier for users

Steef Boerrigter <[email protected]> Sun, 10 May 2026 17:02:08 -0400
Newsgroups gmane.editors.nano.devel
Message-ID <CAFe6kZuG8Gi4noTzoBqgE8vPH6e5ueY6mew9Lb61xLqZw6VfwQ@mail.gmail.com>
--000000000000b373c506517cf1f1
Content-Type: multipart/alternative; boundary="000000000000b373c506517cf1ef"

--000000000000b373c506517cf1ef
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

All,

In response to Benno's curiosity of how extensive my changes to the nano
keybindings are, please see the attached file.
I am a long-term cooledit user, so configured most keys to closely resemble
its keybindings.

If you want a fresh start and not have remnants of the built-in
keybindings, it takes a lot of unbind commands.

Benno asked if the manual isn't enough.
Although it does provide the key between the description of the functions
in the online help and how to access them in the nanorc files, it means you
have to navigate between three documents. The manual does not well describe
the different keybindings in all of the special menus.


Best,
Steef


On Thu, May 7, 2026 at 4:43=E2=80=AFAM Benno Schulenberg <bensberg@telfort.=
nl>
wrote:

>
> Op 05-05-2026 om 19:37 schreef Steef Boerrigter:
> > I spent a significant amount of time figuring out how to configure nano
> key
> > bindings to fit them to my needs.
>
> Were the built-in help (^G/^H) and the man pages not enough documentation=
?
> If so, what was missing?
>
> It would also be helpful to see how you have actually configured your nan=
o,
> what rebindings you made.  I'm curious to see how extensive the rebinding=
s
> are.
>
>
> Benno
>
>

--000000000000b373c506517cf1ef
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>All,</div><div><br></div><div>In response=C2=A0to Ben=
no&#39;s curiosity of how extensive my changes to the nano keybindings are,=
 please see the attached file.</div><div>I am a long-term cooledit user, so=
 configured most keys to closely=C2=A0resemble its keybindings.</div><div><=
br></div><div>If you want a fresh start and not have remnants of the built-=
in keybindings, it takes a lot of unbind commands.</div><div><br></div><div=
>Benno asked if the manual isn&#39;t enough.</div><div>Although it does pro=
vide the key between the description of the functions in the online help an=
d how to access them in the nanorc files, it means you have to navigate bet=
ween three documents. The manual does not well describe the different keybi=
ndings in all of the special menus.</div><div><br></div><div><br></div><div=
>Best,</div><div>Steef</div><div><br></div></div><br><div class=3D"gmail_qu=
ote gmail_quote_container"><div dir=3D"ltr" class=3D"gmail_attr">On Thu, Ma=
y 7, 2026 at 4:43=E2=80=AFAM Benno Schulenberg &lt;<a href=3D"mailto:bensbe=
[email protected]">[email protected]</a>&gt; wrote:<br></div><blockquote clas=
s=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid r=
gb(204,204,204);padding-left:1ex"><br>
Op 05-05-2026 om 19:37 schreef Steef Boerrigter:<br>
&gt; I spent a significant amount of time figuring out how to configure nan=
o key <br>
&gt; bindings to fit them to my needs.<br>
<br>
Were the built-in help (^G/^H) and the man pages not enough documentation?<=
br>
If so, what was missing?<br>
<br>
It would also be helpful to see how you have actually configured your nano,=
<br>
what rebindings you made.=C2=A0 I&#39;m curious to see how extensive the re=
bindings<br>
are.<br>
<br>
<br>
Benno<br>
<br>
</blockquote></div>

--000000000000b373c506517cf1ef--

--000000000000b373c506517cf1f1
Content-Type: application/octet-stream; name="nanorc.steef"
Content-Disposition: attachment; filename="nanorc.steef"
Content-Transfer-Encoding: base64
Content-ID: <f_mp091qbp0>
X-Attachment-Id: f_mp091qbp0

IyMgU3RlZWYgc2V0dGluZ3MgdG8gcmVzZW1ibGUgY29vbGVkaXQKCiMjIE1ha2UgJ25leHR3b3Jk
JyAoQ3RybCtSaWdodCkgYW5kICdjaG9wd29yZHJpZ2h0JyAoQ3RybCtEZWxldGUpCiMjIHN0b3Ag
YXQgd29yZCBlbmRzIGluc3RlYWQgb2YgYXQgYmVnaW5uaW5ncy4KIyBzZXQgYWZ0ZXJlbmRzCgoj
IyBXaGVuIHNvZnQgbGluZSB3cmFwcGluZyBpcyBlbmFibGVkLCBtYWtlIGl0IHdyYXAgbGluZXMg
YXQgYmxhbmtzCiMjICh0YWJzIGFuZCBzcGFjZXMpIGluc3RlYWQgb2YgYWx3YXlzIGF0IHRoZSBl
ZGdlIG9mIHRoZSBzY3JlZW4uCiMgc2V0IGF0YmxhbmtzCgojIyBBdXRvbWF0aWNhbGx5IGluZGVu
dCBhIG5ld2x5IGNyZWF0ZWQgbGluZSB0byB0aGUgc2FtZSBudW1iZXIgb2YKIyMgdGFicyBhbmQv
b3Igc3BhY2VzIGFzIHRoZSBwcmVjZWRpbmcgbGluZSAtLSBvciBhcyB0aGUgbmV4dCBsaW5lCiMj
IGlmIHRoZSBwcmVjZWRpbmcgbGluZSBpcyB0aGUgYmVnaW5uaW5nIG9mIGEgcGFyYWdyYXBoLgoj
IHNldCBhdXRvaW5kZW50CgojIyBCYWNrIHVwIGZpbGVzIHRvIHRoZSBjdXJyZW50IGZpbGVuYW1l
IHBsdXMgYSB0aWxkZS4KIyBzZXQgYmFja3VwCgojIyBUaGUgZGlyZWN0b3J5IHRvIHB1dCB1bmlx
dWUgYmFja3VwIGZpbGVzIGluLgojIHNldCBiYWNrdXBkaXIgIiIKCiMjIFVzZSBib2xkIHRleHQg
aW5zdGVhZCBvZiByZXZlcnNlIHZpZGVvIHRleHQuCiMgc2V0IGJvbGR0ZXh0CgojIyBUcmVhdCBh
bnkgbGluZSB3aXRoIGxlYWRpbmcgd2hpdGVzcGFjZSBhcyB0aGUgYmVnaW5uaW5nIG9mIGEgcGFy
YWdyYXBoLgojIHNldCBib29rc3R5bGUKCiMjIFRoZSBjaGFyYWN0ZXJzIHRyZWF0ZWQgYXMgY2xv
c2luZyBicmFja2V0cyB3aGVuIGp1c3RpZnlpbmcgcGFyYWdyYXBocy4KIyMgVGhpcyBtYXkgbm90
IGluY2x1ZGUgYW55IGJsYW5rIGNoYXJhY3RlcnMuICBPbmx5IGNsb3NpbmcgcHVuY3R1YXRpb24s
CiMjIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgdGhlc2UgY2xvc2luZyBicmFja2V0cywgY2FuIGVu
ZCBzZW50ZW5jZXMuCiMgc2V0IGJyYWNrZXRzICIiJyk+XX0iCgojIyBBdXRvbWF0aWNhbGx5IGhh
cmQtd3JhcCB0aGUgY3VycmVudCBsaW5lIHdoZW4gaXQgYmVjb21lcyBvdmVybG9uZy4KIyBzZXQg
YnJlYWtsb25nbGluZXMKCiMjIERvIGNhc2Utc2Vuc2l0aXZlIHNlYXJjaGVzIGJ5IGRlZmF1bHQu
CiMgc2V0IGNhc2VzZW5zaXRpdmUKCiMjIEludGVycHJldCBkaWdpdHMgYWZ0ZXIgYSBjb2xvbiBh
ZnRlciBhIGZpbGVuYW1lIChvbiB0aGUgY29tbWFuZCBsaW5lKQojIyBhcyB0aGUgbGluZSBudW1i
ZXIgdG8gZ28gdG8gaW4gdGhhdCBmaWxlLgpzZXQgY29sb25wYXJzaW5nCgojIyBDb25zdGFudGx5
IHJlcG9ydCB0aGUgY3Vyc29yIHBvc2l0aW9uLCBpbiB0aGUgc3RhdHVzIGJhciBvciBtaW5pYmFy
LgpzZXQgY29uc3RhbnRzaG93CgojIyBVc2UgY3V0LWZyb20tY3Vyc29yLXRvLWVuZC1vZi1saW5l
IGJ5IGRlZmF1bHQuCiMgc2V0IGN1dGZyb21jdXJzb3IKCiMjIERvIG5vdCB1c2UgdGhlIGxpbmUg
YmVsb3cgdGhlIHRpdGxlIGJhciwgbGVhdmluZyBpdCBlbnRpcmVseSBibGFuay4KIyBzZXQgZW1w
dHlsaW5lCgojIyBTZXQgdGhlIHRhcmdldCB3aWR0aCBmb3IgYXV0b21hdGljIGhhcmQtd3JhcHBp
bmcgYW5kIGZvciBqdXN0aWZ5aW5nCiMjIHBhcmFncmFwaHMuICBJZiB0aGUgc3BlY2lmaWVkIHZh
bHVlIGlzIDAgb3IgbGVzcywgdGhlIHdyYXBwaW5nIHBvaW50CiMjIHdpbGwgYmUgdGhlIHRlcm1p
bmFsJ3Mgd2lkdGggbWludXMgdGhpcyBudW1iZXIuCiMgc2V0IGZpbGwgLTgKCiMjIERyYXcgYSB2
ZXJ0aWNhbCBzdHJpcGUgYXQgdGhlIGdpdmVuIGNvbHVtbiwgdG8gaGVscCBqdWRnZSB0ZXh0IHdp
ZHRoLgojIyAoVGhpcyBvcHRpb24gZG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUuKQojIHNl
dCBndWlkZXN0cmlwZSA3NQoKIyMgUmVtZW1iZXIgdGhlIHVzZWQgc2VhcmNoL3JlcGxhY2UvY29t
bWFuZCBzdHJpbmdzIGZvciB0aGUgbmV4dCBzZXNzaW9uLgojIHNldCBoaXN0b3J5bG9nCgojIyBE
aXNwbGF5IGEgInNjcm9sbGJhciIgb24gdGhlIHJpZ2h0aGFuZCBzaWRlIG9mIHRoZSBlZGl0IHdp
bmRvdy4KIyBzZXQgaW5kaWNhdG9yCgojIyBTY3JvbGwgdGhlIGJ1ZmZlciBjb250ZW50cyBwZXIg
aGFsZi1zY3JlZW4gaW5zdGVhZCBvZiBwZXIgbGluZS4KIyBzZXQganVtcHlzY3JvbGxpbmcKCiMj
IERpc3BsYXkgbGluZSBudW1iZXJzIHRvIHRoZSBsZWZ0IChhbmQgYW55IGFuY2hvcnMgaW4gdGhl
IG1hcmdpbikuCiMgc2V0IGxpbmVudW1iZXJzCgojIyBMZXQgb3RoZXIgdXNlcnMgKG9mIG5hbm8g
b3IgdmltKSBrbm93IHRoYXQgeW91IGFyZSBlZGl0aW5nIHRoZSBmaWxlCiMjIHRoZXkgYXJlIHRy
eWluZyB0byBlZGl0LCBhbmQgdGhlIG90aGVyIHdheSBhcm91bmQuCnNldCBsb2NraW5nCgojIyBG
YWxsIGJhY2sgdG8gc2xvdyBsaWJtYWdpYyB0byB0cnkgYW5kIGRldGVybWluZSBhbiBhcHBsaWNh
YmxlIHN5bnRheC4KIyBzZXQgbWFnaWMKCiMjIFRoZSBvcGVuaW5nIGFuZCBjbG9zaW5nIGJyYWNr
ZXRzIHRoYXQgYXJlIGZvdW5kIGJ5IGEgbWF0Y2hpbmctYnJhY2tldAojIyBzZWFyY2guICBUaGlz
IG1heSBub3QgY29udGFpbiBibGFuayBjaGFyYWN0ZXJzLiAgVGhlIG9wZW5pbmcgYnJhY2tldHMK
IyMgbXVzdCBjb21lIGJlZm9yZSB0aGUgY2xvc2luZyBvbmVzLCBhbmQgdGhleSBtdXN0IGJlIGlu
IHRoZSBzYW1lIG9yZGVyLgojIHNldCBtYXRjaGJyYWNrZXRzICIoPFt7KT5dfSIKCiMjIFN1cHBy
ZXNzIHRoZSB0aXRsZSBiYXIgYW5kIHNob3cgdGhlIGZpbGVuYW1lIHBsdXMgYSBjdXJzb3ItcG9z
aXRpb24KIyMgcGVyY2VudGFnZSBpbiB0aGUgc3BhY2Ugb2YgdGhlIHN0YXR1cyBiYXIuCnNldCBt
aW5pYmFyCgojIyBFbmFibGUgbW91c2Ugc3VwcG9ydCwgaWYgYXZhaWxhYmxlIGZvciB5b3VyIHN5
c3RlbS4gIFdoZW4gZW5hYmxlZCwKIyMgbW91c2UgY2xpY2tzIGNhbiBiZSB1c2VkIHRvIHBsYWNl
IHRoZSBjdXJzb3IsIHNldCB0aGUgbWFyayAod2l0aAojIyB0d28gY2xpY2tzKSwgYW5kIGV4ZWN1
dGUgc2hvcnRjdXRzLiAgVGhlIG1vdXNlIHdpbGwgd29yayBpbiB0aGUKIyMgWCBXaW5kb3cgU3lz
dGVtLCBhbmQgb24gdGhlIGNvbnNvbGUgd2hlbiBncG0gaXMgcnVubmluZy4Kc2V0IG1vdXNlCgoj
IyBTd2l0Y2ggb24gbXVsdGlwbGUgZmlsZSBidWZmZXJzIChpbnNlcnRpbmcgYSBmaWxlIHdpbGwg
cHV0IGl0IGludG8KIyMgYSBzZXBhcmF0ZSBidWZmZXIpLgojIHNldCBtdWx0aWJ1ZmZlcgoKIyMg
RG9uJ3QgY29udmVydCBmaWxlcyBmcm9tIERPUyBmb3JtYXQuCiMgc2V0IG5vY29udmVydAoKIyMg
RG9uJ3QgZGlzcGxheSB0aGUgaGVscGZ1bCBzaG9ydGN1dCBsaXN0cyBhdCB0aGUgYm90dG9tIG9m
IHRoZSBzY3JlZW4uCnNldCBub2hlbHAKCiMjIERvbid0IGF1dG9tYXRpY2FsbHkgYWRkIGEgbmV3
bGluZSB3aGVuIGEgZmlsZSBkb2VzIG5vdCBlbmQgd2l0aCBvbmUuCiMgc2V0IG5vbmV3bGluZXMK
CiMjIFNldCBvcGVyYXRpbmcgZGlyZWN0b3J5LiAgbmFubyB3aWxsIG5vdCByZWFkIG9yIHdyaXRl
IGZpbGVzIG91dHNpZGUKIyMgdGhpcyBkaXJlY3RvcnkgYW5kIGl0cyBzdWJkaXJlY3Rvcmllcy4g
IEFsc28sIHRoZSBjdXJyZW50IGRpcmVjdG9yeQojIyBpcyBjaGFuZ2VkIHRvIGhlcmUsIHNvIGFu
eSBmaWxlcyBhcmUgaW5zZXJ0ZWQgZnJvbSB0aGlzIGRpci4gIEEgYmxhbmsKIyMgc3RyaW5nIG1l
YW5zIHRoZSBvcGVyYXRpbmctZGlyZWN0b3J5IGZlYXR1cmUgaXMgdHVybmVkIG9mZi4KIyBzZXQg
b3BlcmF0aW5nZGlyICIiCgojIyBSZW1lbWJlciB0aGUgcG9zaXRpb24gb2YgY3Vyc29yIGFuZCBh
bmNob3JzIGZvciB0aGUgbmV4dCBlZGl0aW5nIHNlc3Npb24uCiMgc2V0IHBvc2l0aW9ubG9nCgoj
IyBQcmVzZXJ2ZSB0aGUgWE9OIGFuZCBYT0ZGIGtleXMgKF5RIGFuZCBeUykuCiMgc2V0IHByZXNl
cnZlCgojIyBUaGUgY2hhcmFjdGVycyB0cmVhdGVkIGFzIGNsb3NpbmcgcHVuY3R1YXRpb24gd2hl
biBqdXN0aWZ5aW5nIHBhcmFncmFwaHMuCiMjIFRoaXMgbWF5IG5vdCBjb250YWluIGJsYW5rIGNo
YXJhY3RlcnMuICBPbmx5IHRoZXNlIHRlcm1pbmF0aW5nIGNoYXJhY3RlcnMsCiMjIG9wdGlvbmFs
bHkgZm9sbG93ZWQgYnkgY2xvc2luZyBicmFja2V0cywgY2FuIGVuZCBzZW50ZW5jZXMuCiMgc2V0
IHB1bmN0ICIhLj8iCgojIyBNYWtlIHN0YXR1cy1iYXIgbWVzc2FnZXMgZGlzYXBwZWFyIGFmdGVy
IDEga2V5c3Ryb2tlIGluc3RlYWQgb2YgYWZ0ZXIgMjAuCiMgc2V0IHF1aWNrYmxhbmsKCiMjIFRo
ZSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBtYXRjaGVzIHF1b3RpbmcgY2hhcmFjdGVycyBpbiBl
bWFpbAojIyBvciBsaW5lLWNvbW1lbnQgaW50cm9kdWNlcnMgaW4gc291cmNlIGNvZGUuICBUaGUg
ZGVmYXVsdCBpczoKIyBzZXQgcXVvdGVzdHIgIl4oWyAJXSooWyEjJTo7Pnx9XXwvLykpKyIKCiMj
IFRyeSB0byB3b3JrIGFyb3VuZCBhIG1pc21hdGNoaW5nIHRlcm1pbmZvIHRlcm1pbmFsIGRlc2Ny
aXB0aW9uLgojIHNldCByYXdzZXF1ZW5jZXMKCiMjIEZpeCBCYWNrc3BhY2UvRGVsZXRlIGNvbmZ1
c2lvbiBwcm9ibGVtLgojIHNldCByZWJpbmRkZWxldGUKCiMjIERvIHJlZ3VsYXItZXhwcmVzc2lv
biBzZWFyY2hlcyBieSBkZWZhdWx0LgojIyBSZWd1bGFyIGV4cHJlc3Npb25zIGFyZSBvZiB0aGUg
ZXh0ZW5kZWQgdHlwZSAoRVJFKS4KIyBzZXQgcmVnZXhwCgojIyBTYXZlIGEgY2hhbmdlZCBidWZm
ZXIgYXV0b21hdGljYWxseSBvbiBleGl0OyBkb24ndCBwcm9tcHQuCiMgc2V0IHNhdmVvbmV4aXQK
CiMjIFB1dCB0aGUgY3Vyc29yIG9uIHRoZSBoaWdobGlnaHRlZCBpdGVtIGluIHRoZSBmaWxlIGJy
b3dzZXIsIGFuZAojIyBzaG93IHRoZSBjdXJzb3IgaW4gdGhlIGhlbHAgdmlld2VyOyB1c2VmdWwg
Zm9yIHBlb3BsZSB3aG8gdXNlIGEKIyMgYnJhaWxsZSBkaXNwbGF5IGFuZCBwZW9wbGUgd2l0aCBw
b29yIHZpc2lvbi4KIyBzZXQgc2hvd2N1cnNvcgoKIyMgTWFrZSB0aGUgSG9tZSBrZXkgc21hcnRl
cjogd2hlbiBIb21lIGlzIHByZXNzZWQgYW55d2hlcmUgYnV0IGF0IHRoZQojIyB2ZXJ5IGJlZ2lu
bmluZyBvZiBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIG9uIGEgbGluZSwgdGhlIGN1cnNvcgoj
IyB3aWxsIGp1bXAgdG8gdGhhdCBiZWdpbm5pbmcgKGVpdGhlciBmb3J3YXJkcyBvciBiYWNrd2Fy
ZHMpLiAgSWYgdGhlCiMjIGN1cnNvciBpcyBhbHJlYWR5IGF0IHRoYXQgcG9zaXRpb24sIGl0IHdp
bGwganVtcCB0byB0aGUgdHJ1ZSBzdGFydAojIyBvZiB0aGUgbGluZSAodGhlIGxlZnQgZWRnZSku
CnNldCBzbWFydGhvbWUKCiMjIFNwcmVhZCBvdmVybG9uZyBsaW5lcyBvdmVyIG11bHRpcGxlIHNj
cmVlbiBsaW5lcy4KIyBzZXQgc29mdHdyYXAKCiMjIFNjcm9sbCBvbmx5IHRoZSBjdXJyZW50IGxp
bmUgc2lkZXdheXMgKGluc3RlYWQgb2YgYWxsIGxpbmVzKS4Kc2V0IHNvbG9zaWRlc2Nyb2xsCgoj
IyBVc2UgdGhpcyBzcGVsbGluZyBjaGVja2VyIGluc3RlYWQgb2YgdGhlIGludGVybmFsIG9uZS4g
IFRoaXMgb3B0aW9uCiMjIGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVlLgojIHNldCBzcGVs
bGVyICJhc3BlbGwgLXggLWMiCgojIyBVc2UgdGhlIGVuZCBvZiB0aGUgdGl0bGUgYmFyIGZvciBz
b21lIHN0YXRlIGZsYWdzOiBJID0gYXV0by1pbmRlbnRpbmcsCiMjIE0gPSBtYXJrLCBMID0gaGFy
ZC13cmFwcGluZyBsb25nIGxpbmVzLCBSID0gcmVjb3JkaW5nLCBTID0gc29mdC13cmFwcGluZy4K
c2V0IHN0YXRlZmxhZ3MKCiMjIFVzZSB0aGlzIHRhYiBzaXplIGluc3RlYWQgb2YgdGhlIGRlZmF1
bHQ7IGl0IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuCiMgc2V0IHRhYnNpemUgOAoKIyMgQ29udmVy
dCBlYWNoIHR5cGVkIHRhYiB0byB0aGUgZml0dGluZyBudW1iZXIgb2Ygc3BhY2VzLgojIHNldCB0
YWJzdG9zcGFjZXMKCiMjIFNuaXAgd2hpdGVzcGFjZSBhdCB0aGUgZW5kIG9mIGxpbmVzIHdoZW4g
anVzdGlmeWluZyBvciBoYXJkLXdyYXBwaW5nLgojIHNldCB0cmltYmxhbmtzCgojIyBTYXZlIGZp
bGVzIGFsd2F5cyBpbiBVbml4IGZvcm1hdCAoYWxzbyB3aGVuIHRoZXkgd2VyZSBET1MpLgojIHNl
dCB1bml4CgojIyBUaGUgdHdvIHNpbmdsZS1jb2x1bW4gY2hhcmFjdGVycyB1c2VkIHRvIGRpc3Bs
YXkgdGhlIGZpcnN0IGNoYXJhY3RlcnMKIyMgb2YgdGFicyBhbmQgc3BhY2VzLiAgMTg3IGluIElT
TyA4ODU5LTEgKDAwMDBCQiBpbiBVbmljb2RlKSBhbmQgMTgzIGluCiMjIElTTy04ODU5LTEgKDAw
MDBCNyBpbiBVbmljb2RlKSBzZWVtIHRvIGJlIGdvb2QgdmFsdWVzIGZvciB0aGVzZS4KIyMgVGhl
IGRlZmF1bHQgd2hlbiBpbiBhIFVURi04IGxvY2FsZToKIyBzZXQgd2hpdGVzcGFjZSAiwrvCtyIK
IyMgVGhlIGRlZmF1bHQgb3RoZXJ3aXNlOgojIHNldCB3aGl0ZXNwYWNlICI+LiIKCiMjIERldGVj
dCB3b3JkIGJvdW5kYXJpZXMgZGlmZmVyZW50bHkgYnkgdHJlYXRpbmcgcHVuY3R1YXRpb24KIyMg
Y2hhcmFjdGVycyBhcyBwYXJ0cyBvZiB3b3Jkcy4KIyBzZXQgd29yZGJvdW5kcwoKIyMgVGhlIGNo
YXJhY3RlcnMgKGJlc2lkZXMgYWxwaGFudW1lcmljIG9uZXMpIHRoYXQgc2hvdWxkIGJlIGNvbnNp
ZGVyZWQKIyMgYXMgcGFydHMgb2Ygd29yZHMuICBUaGlzIG9wdGlvbiBkb2VzIG5vdCBoYXZlIGEg
ZGVmYXVsdCB2YWx1ZS4gIFdoZW4KIyMgc2V0LCBpdCBvdmVycmlkZXMgb3B0aW9uICdzZXQgd29y
ZGJvdW5kcycuCiMgc2V0IHdvcmRjaGFycyAiPF8+LiIKCiMjIExldCBhbiB1bm1vZGlmaWVkIEJh
Y2tzcGFjZSBvciBEZWxldGUgZXJhc2UgdGhlIG1hcmtlZCByZWdpb24gKGluc3RlYWQKIyMgb2Yg
YSBzaW5nbGUgY2hhcmFjdGVyLCBhbmQgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGN1dGJ1ZmZlciku
CnNldCB6YXAKCiMjIEhpZGUgdGhlIGJhcnMgcGx1cyBoZWxwIGxpbmVzIGFuZCB1c2UgdGhlIHdo
b2xlIHRlcm1pbmFsIGFzIGVkaXQgYXJlYS4KIyBzZXQgemVybwoKCiMjIFBhaW50IHRoZSBpbnRl
cmZhY2UgZWxlbWVudHMgb2YgbmFuby4gIFRoZXNlIGFyZSBleGFtcGxlczsgdGhlcmUgYXJlCiMj
IG5vIGNvbG9ycyBieSBkZWZhdWx0LCBleGNlcHQgZm9yIGVycm9yY29sb3IgYW5kIHNwb3RsaWdo
dGNvbG9yLgojIHNldCB0aXRsZWNvbG9yIGJvbGQsd2hpdGUsYmx1ZQojIHNldCBwcm9tcHRjb2xv
ciBsaWdodHdoaXRlLGdyZXkKIyBzZXQgc3RhdHVzY29sb3IgYm9sZCx3aGl0ZSxncmVlbgojIHNl
dCBlcnJvcmNvbG9yIGJvbGQsd2hpdGUscmVkCiMgc2V0IHNwb3RsaWdodGNvbG9yIGJsYWNrLGxp
Z2h0eWVsbG93CiMgc2V0IHNlbGVjdGVkY29sb3IgbGlnaHR3aGl0ZSwjODA0CiMgc2V0IHN0cmlw
ZWNvbG9yICwjNDQ0CiMgc2V0IHNjcm9sbGVyY29sb3Igc2xhdGUsIzIyMgojIHNldCBudW1iZXJj
b2xvciBjeWFuCiMgc2V0IGtleWNvbG9yIGN5YW4KIyBzZXQgZnVuY3Rpb25jb2xvciBncmVlbgoK
IyMgSW4gcm9vdCdzIC5uYW5vcmMgeW91IG1pZ2h0IHdhbnQgdG8gdXNlOgojIHNldCB0aXRsZWNv
bG9yIGJvbGQsd2hpdGUsbWFnZW50YQojIHNldCBwcm9tcHRjb2xvciBibGFjayx5ZWxsb3cKIyBz
ZXQgc3RhdHVzY29sb3IgYm9sZCx3aGl0ZSxtYWdlbnRhCiMgc2V0IGVycm9yY29sb3IgYm9sZCx3
aGl0ZSxyZWQKIyBzZXQgc3BvdGxpZ2h0Y29sb3IgYmxhY2ssb3JhbmdlCiMgc2V0IHNlbGVjdGVk
Y29sb3IgbGlnaHR3aGl0ZSxjeWFuCiMgc2V0IHN0cmlwZWNvbG9yICx5ZWxsb3cKIyBzZXQgc2Ny
b2xsZXJjb2xvciBtYWdlbnRhCiMgc2V0IG51bWJlcmNvbG9yIG1hZ2VudGEKIyBzZXQga2V5Y29s
b3IgbGlnaHRtYWdlbnRhCiMgc2V0IGZ1bmN0aW9uY29sb3IgbWFnZW50YQoKCiMjID09PSBTeW50
YXggY29sb3JpbmcgPT09CiMjIEZvciBhbGwgZGV0YWlscywgc2VlICdtYW4gbmFub3JjJywgc2Vj
dGlvbiBTWU5UQVggSElHSExJR0hUSU5HLgoKIyMgTW9zdCBvZiB0aGUgZXhpc3Rpbmcgc3ludGF4
IGRlZmluaXRpb25zIGFyZSBpbmNsdWRlZCBieSBkZWZhdWx0OgppbmNsdWRlIC91c3IvbG9jYWwv
c2hhcmUvbmFuby8qLm5hbm9yYwojaW5jbHVkZSAvaG9tZS9zdGVlZi8uY29uZmlnL25hbm8vZC5u
YW5vcmMKCiMjIE9yIHlvdSBjYW4gc2VsZWN0IGp1c3QgdGhlIG9uZXMgeW91IG5lZWQuICBGb3Ig
ZXhhbXBsZToKIyBpbmNsdWRlIC91c3IvbG9jYWwvc2hhcmUvbmFuby9odG1sLm5hbm9yYwojIGlu
Y2x1ZGUgL3Vzci9sb2NhbC9zaGFyZS9uYW5vL3B5dGhvbi5uYW5vcmMKIyBpbmNsdWRlIC91c3Iv
bG9jYWwvc2hhcmUvbmFuby9zaC5uYW5vcmMKCiMjIEluIC91c3IvbG9jYWwvc2hhcmUvbmFuby9l
eHRyYS8geW91IGNhbiBmaW5kIHNvbWUgc3ludGF4ZXMgdGhhdCBhcmUKIyMgc3BlY2lmaWMgZm9y
IGNlcnRhaW4gZGlzdHJvcyBvciBmb3Igc29tZSBsZXNzIGNvbW1vbiBsYW5ndWFnZXMuCgoKIyMg
SWYgPFRhYj4gc2hvdWxkIGFsd2F5cyBwcm9kdWNlIGZvdXIgc3BhY2VzIHdoZW4gZWRpdGluZyBh
IFB5dGhvbiBmaWxlLAojIyBpbmRlcGVuZGVudCBvZiB0aGUgc2V0dGluZ3Mgb2YgJ3RhYnNpemUn
IGFuZCAndGFic3Rvc3BhY2VzJzoKIyBleHRlbmRzeW50YXggcHl0aG9uIHRhYmdpdmVzICIgICAg
IgoKCiMjID09PSBLZXkgYmluZGluZ3MgPT09CiMjIEZvciBhbGwgZGV0YWlscywgc2VlICdtYW4g
bmFub3JjJywgc2VjdGlvbiBSRUJJTkRJTkcgS0VZUy4KIyMKIyMgQWxsIG9mIG5hbm8ncyBkZWZh
dWx0IGtleSBiaW5kaW5ncyBhcmUgZGVmaW5lZCBoZXJlLiAgU2luY2Ugbm8gYmluZGluZ3MKIyMg
YXJlIGNvbXBpbGVkIGluLCB0aGlzIGZpbGUgKG9yIHlvdXIgb3duIG5hbm9yYykgbXVzdCBiZSBw
cmVzZW50IGZvciB0aGUKIyMgZWRpdG9yIHRvIHdvcmsuICBOYW5vIHdpbGwgcmVmdXNlIHRvIHN0
YXJ0IGlmIG5vIGtleSBpcyBib3VuZCB0byAiZXhpdCIKIyMgaW4gdGhlIG1haW4gbWVudS4KIyMK
IyMgVG8gY2hhbmdlIGEgYmluZGluZywgZWRpdCB0aGUga2V5IHN0cmluZyBvbiBpdHMgbGluZS4K
IyMgVG8gZGlzYWJsZSBhIGJpbmRpbmcsIGNvbW1lbnQgb3V0IG9yIGRlbGV0ZSBpdHMgbGluZS4K
IyMgVGhlcmUgaXMgbm8gbmVlZCB0byB1c2UgJ3VuYmluZCcgYmVmb3JlIGFzc2lnbmluZyBhIGtl
eTsgYSBuZXcgYXNzaWdubWVudAojIyBhdXRvbWF0aWNhbGx5IHNoYWRvd3MgYW55IGVhcmxpZXIg
b25lIGZvciB0aGUgc2FtZSBrZXkgaW4gdGhlIHNhbWUgbWVudS4KIyMKIyMgRWFjaCAnYmluZCcg
bGluZSBhY2NlcHRzIGV4YWN0bHkgb25lIG1lbnUgbmFtZS4gIFZhbGlkIG1lbnUgbmFtZXMgYXJl
OgojIyAgIG1haW4gIHNlYXJjaCAgcmVwbGFjZSAgcmVwbGFjZXdpdGggIHllc25vICBnb3RvbGlu
ZSAgd3JpdGVvdXQgIGluc2VydAojIyAgIGV4ZWN1dGUgIGhlbHAgIHNwZWxsICBsaW50ZXIgIGJy
b3dzZXIgIHdoZXJlaXNmaWxlICBnb3RvZGlyICBhbGwKIyMgImFsbCIgY292ZXJzIGV2ZXJ5IG1l
bnUuICBMYXRlciBsaW5lcyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBlYXJsaWVyIG9uZXMKIyMgZm9y
IHRoZSBzYW1lIGtleSBhbmQgbWVudSwgc28gZ2VuZXJhbCBiaW5kaW5ncyBjb21lIGZpcnN0IGhl
cmUgYW5kCiMjIG1lbnUtc3BlY2lmaWMgb3ZlcnJpZGVzIGNvbWUgYWZ0ZXIuCiMjCiMjIEZvciB0
aGUgY29tcGxldGUgbGlzdCBvZiBmdW5jdGlvbiBuYW1lcywgc2VlICdtYW4gbmFub3JjJy4KCgoj
IyMjIyBNZW51OiBhbGwKCiMjIC0tIFRleHQgZW50cnkgYW5kIGRlbGV0aW9uIC0tCmJpbmQgRW50
ZXIgICAgZW50ZXIgICAgICBhbGwKYmluZCBeTSAgICAgICBlbnRlciAgICAgIGFsbApiaW5kIFRh
YiAgICAgIHRhYiAgICAgICAgYWxsCgojIyBCYWNrc3BhY2UgYW5kIERlbGV0ZSB3b3JrIHRoZSBz
YW1lIGluIGFsbCBwcm9tcHQgbWVudXM6CmJpbmQgQnNwICAgICAgYmFja3NwYWNlICBhbGwKYmlu
ZCBEZWwgICAgICBkZWxldGUgICAgIGFsbAoKIyMgLS0gQ3Vyc29yIG1vdmVtZW50IC0tCmJpbmQg
TGVmdCAgICAgYmFjayAgICAgICBhbGwKYmluZCBSaWdodCAgICBmb3J3YXJkICAgIGFsbApiaW5k
IFVwICAgICAgIHByZXZsaW5lICAgYWxsCmJpbmQgRG93biAgICAgbmV4dGxpbmUgICBhbGwKCiMj
IFdvcmQtbGV2ZWwgbW92ZW1lbnQ6CmJpbmQgXkxlZnQgICAgcHJldndvcmQgICBhbGwKYmluZCBe
UmlnaHQgICBuZXh0d29yZCAgIGFsbAoKIyMgQmVnaW5uaW5nIGFuZCBlbmQgb2YgbGluZToKYmlu
ZCBIb21lICAgICBob21lICAgICAgIGFsbApiaW5kIEVuZCAgICAgIGVuZCAgICAgICAgYWxsCgoj
IyBQYWdlIHVwL2Rvd246CmJpbmQgUGdVcCAgICAgcGFnZXVwICAgICBhbGwKYmluZCBQZ0RuICAg
ICBwYWdlZG93biAgIGFsbAoKIyMgUmVmcmVzaCB0aGUgc2NyZWVuOyBpbiBtYWluLCBhbHNvIGNl
bnRlcnMgdGhlIGN1cnNvciBsaW5lOgpiaW5kIF5MICAgICAgIHJlZnJlc2ggICAgYWxsCgojIyAt
LSBIZWxwLCB3b3JrcyBpbiBhbGwgbWVudXMgLS0KYmluZCBGMSAgICAgICBoZWxwICAgICAgIGFs
bAoKIyMgXkMgY2FuY2VscyBpbiBwcm9tcHRzLCByZXBvcnRzIHBvc2l0aW9uIGluIG1haW4sIGFu
ZCBleGl0cyBpbiBicm93c2VyL2hlbHA6CiNtYXliZSBvdmVycmlkZSBpbiBtYWluICAgICBiaW5k
IF5DICAgICAgIGNhbmNlbCAgICAgYWxsCgojIyAtLSBFZGl0aW5nIC0tCmJpbmQgXlggICAgICAg
Y3V0ICAgICAgICBhbGwKYmluZCBeQyAgICAgICBjb3B5ICAgICAgIGFsbApiaW5kIF5WICAgICAg
IHBhc3RlICAgICAgYWxsCgojIyBFbnRlciBhIGNoYXJhY3RlciBieSBpdHMga2V5Y29kZToKYmlu
ZCBeUSAgICAgICB2ZXJiYXRpbSAgIGFsbAoKIyMgLS0gU2VhcmNoaW5nIC0tCmJpbmQgRjcgICAg
ICAgd2hlcmVpcyAgICBhbGwKYmluZCBGMTcgICAgICBmaW5kbmV4dCAgIGFsbApiaW5kIEY2ICAg
ICAgIHdoZXJld2FzICAgYWxsCmJpbmQgRjE2ICAgICAgZmluZHByZXZpb3VzICBhbGwKCiMjIC0t
IFRvZ2dsZXMgKE1ldGEgKyBsZXR0ZXIpIC0tCmJpbmQgTS1YICAgICAgbm9oZWxwICAgICAgICAg
ICAgIGFsbAoKYmluZCBGMTAgICAgICBleGl0ICAgICAgIGFsbAoKIyMjIyMgIE1lbnU6IG1haW4K
CiMjIEp1bXAgdG8gdGhlIHZlcnkgZmlyc3Qgb3IgbGFzdCBsaW5lIG9mIHRoZSBmaWxlOgpiaW5k
IF5Ib21lICAgIGZpcnN0bGluZSAgbWFpbgpiaW5kIF5FbmQgICAgIGxhc3RsaW5lICAgbWFpbgoK
IyMgQmxvY2sgbmF2aWdhdGlvbiAoYmxhbmstbGluZS1zZXBhcmF0ZWQgYmxvY2tzIC8gcGFyYWdy
YXBocyk6CmJpbmQgXlVwICAgICAgcHJldmJsb2NrICBtYWluCmJpbmQgXkRvd24gICAgbmV4dGJs
b2NrICBtYWluCiNiaW5kIE0tKCAgICAgIGJlZ2lucGFyYSAgbWFpbgojYmluZCBNLSkgICAgICBl
bmRwYXJhICAgIG1haW4KCiMjIEdvIHRvIGZpcnN0IG9yIGxhc3QgdmlzaWJsZSByb3cgaW4gdGhl
IHZpZXdwb3J0OgojYmluZCBeUGdVcCAgICB0b3Byb3cgICAgIG1haW4gIGtleS1jb2RlIG5vdCBr
bm93bgojYmluZCBeUGdEbiAgICBib3R0b21yb3cgIG1haW4gIGtleS1jb2RlIG5vdCBrbm93bgoK
IyMgU2Nyb2xsIHRoZSB2aWV3cG9ydCB3aXRob3V0IG1vdmluZyB0aGUgY3Vyc29yIHRleHR1YWxs
eToKI2JpbmQgTS1VcCAgICAgc2Nyb2xsdXAgICBtYWluICBrZXkgbm90IHJlY29nbml6ZWQKI2Jp
bmQgTS1Eb3duICAgc2Nyb2xsZG93biBtYWluICBrZXkgbm90IHJlY29nbml6ZWQKI2JpbmQgTS0t
ICAgICAgc2Nyb2xsdXAgICBtYWluCiNiaW5kIE0tXyAgICAgIHNjcm9sbHVwICAgbWFpbgojYmlu
ZCBNLSsgICAgICBzY3JvbGxkb3duIG1haW4KI2JpbmQgTS09ICAgICAgc2Nyb2xsZG93biBtYWlu
CgojIyBTY3JvbGwgc2lkZXdheXMgKHVzZWZ1bCB3aGVuIHNvZnR3cmFwIGlzIG9mZik6CiNiaW5k
IE0tPCAgICAgIHNjcm9sbGxlZnQgIG1haW4KI2JpbmQgTS0+ICAgICAgc2Nyb2xscmlnaHQgbWFp
bgoKIyMgUmVmcmVzaCB0aGUgc2NyZWVuOyBpbiBtYWluLCBhbHNvIGNlbnRlcnMgdGhlIGN1cnNv
ciBsaW5lOgpiaW5kIF5MICAgICAgIGNlbnRlciAgICAgbWFpbgpiaW5kIE0tJSAgICAgIGN5Y2xl
ICAgICAgbWFpbgoKIyMgLS0gRmlsZSBvcGVyYXRpb25zIC0tCmJpbmQgRjIgICAgICAgc2F2ZWZp
bGUgICBtYWluCmJpbmQgRjEyICAgICAgd3JpdGVvdXQgICBtYWluCmJpbmQgRjE1ICAgICAgaW5z
ZXJ0ICAgICBtYWluCgojIyAtLSBFZGl0aW5nIC0tCmJpbmQgRjMgICAgICAgbWFyayAgICAgICBt
YWluCgpiaW5kIE0tfSAgICAgIGluZGVudCAgICAgbWFpbgpiaW5kIE0teyAgICAgIHVuaW5kZW50
ICAgbWFpbgpiaW5kIFNoLVRhYiAgIHVuaW5kZW50ICAgbWFpbgoKYmluZCBeVSAgICAgICB1bmRv
ICAgICAgIG1haW4KYmluZCBeWiAgICAgICB1bmRvICAgICAgIG1haW4KYmluZCBeWSAgICAgICBy
ZWRvICAgICAgIG1haW4KCiMjIyBeQnNwIGRvZXMgbm90IGV4aXN0cywgYnV0IHNlbmRzIF5IIG9u
IG1vc3QgdGVybWluYWxzCmJpbmQgXkggICAgICAgY2hvcHdvcmRsZWZ0ICAgbWFpbgpiaW5kIF5E
ZWwgICAgIGNob3B3b3JkcmlnaHQgIG1haW4KYmluZCBGOCAgICAgICB6YXAgICAgICAgICAgICBt
YWluCiNiaW5kIF5LICAgInttYXJrfXtlbmR9e3phcH0iIG1haW4KI2JpbmQgXlUgICJ7bWFya317
aG9tZX17emFwfSIgbWFpbgoKI2JpbmQgXl0gICAgICAgY29tcGxldGUgICBtYWluCmJpbmQgTS0z
ICAgICAgY29tbWVudCAgICBtYWluCgpiaW5kIE0tOiAgICAgIHJlY29yZG1hY3JvICBtYWluCmJp
bmQgTS07ICAgICAgcnVubWFjcm8gICAgIG1haW4KCmJpbmQgTS1cICAgICAgYW5jaG9yICAgICBt
YWluIApiaW5kIE0tXSAgICAgIG5leHRhbmNob3IgbWFpbgpiaW5kIE0tWyAgICAgIHByZXZhbmNo
b3IgbWFpbgoKIyMgU3dpdGNoIGJldHdlZW4gb3BlbiBidWZmZXJzOgpiaW5kIE0tLCAgICAgIHBy
ZXZidWYgICAgbWFpbgpiaW5kIE0tLiAgICAgIG5leHRidWYgICAgbWFpbgoKYmluZCBGNCAgICAg
ICByZXBsYWNlICAgIG1haW4KCmJpbmQgTS1CICAgICAgZmluZGJyYWNrZXQgIG1haW4KCiMjIEdv
IHRvIGEgc3BlY2lmaWMgbGluZSBhbmQgY29sdW1uIG51bWJlcjoKYmluZCBeRyAgICAgICBnb3Rv
bGluZSAgIG1haW4KCiMjIC0tIEp1c3RpZnkgLS0KYmluZCBeSiAgICAgICBqdXN0aWZ5ICAgIG1h
aW4KIyMjYmluZCBNLUogICAgICBmdWxsanVzdGlmeSAgbWFpbgoKIyMgLS0gU3BlbGwgY2hlY2tp
bmcsIGxpbnRpbmcsIGFuZCBmb3JtYXR0aW5nIC0tCmJpbmQgXkUgICAgICAgZXhlY3V0ZSAgICBt
YWluCiNiaW5kIEYxMiAgICAgIHNwZWxsZXIgICAgbWFpbiAgCgojIyAtLSBDdXJzb3IgcG9zaXRp
b24gYW5kIHdvcmQgY291bnQgLS0KYmluZCBGMTEgICAgICBsb2NhdGlvbiAgIG1haW4KYmluZCBe
UCAgICAgICBsb2NhdGlvbiAgIG1haW4KYmluZCBNLUQgICAgICB3b3JkY291bnQgIG1haW4KCiMj
IC0tIFRvZ2dsZXMgKE1ldGEgKyBsZXR0ZXIpIC0tCmJpbmQgTS1aICAgICAgemVybyAgICAgICAg
ICAgICAgIG1haW4KYmluZCBNLUMgICAgICBjb25zdGFudHNob3cgICAgICAgbWFpbgpiaW5kIE0t
UyAgICAgIHNvZnR3cmFwICAgICAgICAgICBtYWluCmJpbmQgTS1OICAgICAgbGluZW51bWJlcnMg
ICAgICAgIG1haW4KYmluZCBNLVAgICAgICB3aGl0ZXNwYWNlZGlzcGxheSAgbWFpbgpiaW5kIE0t
WSAgICAgIG5vc3ludGF4ICAgICAgICAgICBtYWluCmJpbmQgTS1IICAgICAgc21hcnRob21lICAg
ICAgICAgIG1haW4KYmluZCBNLUkgICAgICBhdXRvaW5kZW50ICAgICAgICAgbWFpbgpiaW5kIE0t
SyAgICAgIGN1dGZyb21jdXJzb3IgICAgICBtYWluCmJpbmQgTS1MICAgICAgYnJlYWtsb25nbGlu
ZXMgICAgIG1haW4KYmluZCBNLU8gICAgICB0YWJzdG9zcGFjZXMgICAgICAgbWFpbgpiaW5kIE0t
TSAgICAgIG1vdXNlICAgICAgICAgICAgICBtYWluCgojIyAtLSBGLWtleSBzaG9ydGN1dHMgLS0K
YmluZCBGMTEgICAgICBsb2NhdGlvbiAgIG1haW4KI2JpbmQgRjEyICAgICAgc3BlbGxlciAgICBt
YWluICAgIyMjIHNhdmUgYXMuLi4KCiMjID09PSBVc2VmdWwgY3VzdG9taXphdGlvbnMgKGNvbW1l
bnRlZCBvdXQpID09PQojIyBTdXNwZW5kIG5hbm8gd2l0aCBhIHNpbmdsZSBrZXlzdHJva2UgaW5z
dGVhZCBvZiB2aWEgXlQgXlo6CiMgYmluZCBeWiBzdXNwZW5kIG1haW4KCiMjIE1ha2UgQ3RybCtC
YWNrc3BhY2UgZGVsZXRlIHRoZSB3b3JkIHRvIHRoZSBsZWZ0IChpZiBeSCBpcyBmcmVlKToKIyBi
aW5kIF5IIGNob3B3b3JkbGVmdCBtYWluCgojIyBJZiB5b3Ugd2FudCBeTCB0byBvbmx5IHJlZnJl
c2ggdGhlIHNjcmVlbiwgbm90IGNlbnRlciB0aGUgY3Vyc29yOgojIGJpbmQgXkwgcmVmcmVzaCBt
YWluCgojIyBGb3IgcXVpY2tseSB1cHBlcmNhc2luZyBvciBsb3dlcmNhc2luZyB0aGUgd29yZCB1
bmRlciB0aGUgY3Vyc29yOgojIGJpbmQgU2gtTS1VICJ7bmV4dHdvcmR9e21hcmt9e3ByZXZ3b3Jk
fXtleGVjdXRlfXwgc2VkICdzLy4qL1xVJi8nIHtlbnRlcn0iIG1haW4KIyBiaW5kIFNoLU0tTCAi
e25leHR3b3JkfXttYXJrfXtwcmV2d29yZH17ZXhlY3V0ZX18IHNlZCAncy8uKi9cTCYvJyB7ZW50
ZXJ9IiBtYWluCgojIyBDb3B5IHRoZSBtYXJrZWQgcmVnaW9uIHRvIHRoZSBzeXN0ZW0gY2xpcGJv
YXJkIChyZXF1aXJlcyB4c2VsKToKIyBiaW5kIFNoLU0tQyAie2V4ZWN1dGV9fCB4c2VsIC1pYiB7
ZW50ZXJ9e3VuZG99IiBtYWluCgojIyBGb3Igc25pcHBpbmcgdHJhaWxpbmcgd2hpdGVzcGFjZSB3
aGVuIHNhdmluZzoKIyBiaW5kIF5TICJ7ZXhlY3V0ZX18IHNlZCAncy9bWzpzcGFjZTpdXVwrJC8v
JyB7ZW50ZXJ9e3NhdmVmaWxlfSIgbWFpbgoKCgojIyMjIyAgTWVudTogc2VhcmNoCgojIyBJbiBo
aXN0b3J5LWNhcGFibGUgcHJvbXB0cywgVXAvRG93biBuYXZpZ2F0ZSB0aGUgaGlzdG9yeSBsaXN0
IGluc3RlYWQ6CmJpbmQgVXAgICAgICAgb2xkZXIgICAgICBzZWFyY2gKYmluZCBEb3duICAgICBu
ZXdlciAgICAgIHNlYXJjaAoKIyMgVG9nZ2xlcyBpbiB0aGUgc2VhcmNoIGFuZCByZXBsYWNlIHBy
b21wdHM6CmJpbmQgTS1DICAgICAgY2FzZXNlbnMgICBzZWFyY2gKYmluZCBNLVIgICAgICByZWdl
eHAgICAgIHNlYXJjaApiaW5kIE0tQiAgICAgIGJhY2t3YXJkcyAgc2VhcmNoCmJpbmQgXlIgICAg
ICAgZmxpcHJlcGxhY2UgIHNlYXJjaApiaW5kIF5HICAgICAgIGZsaXBnb3RvICAgc2VhcmNoCgoK
IyMjIyMgIE1lbnU6IHJlcGxhY2UKCiMjIEluIGhpc3RvcnktY2FwYWJsZSBwcm9tcHRzLCBVcC9E
b3duIG5hdmlnYXRlIHRoZSBoaXN0b3J5IGxpc3QgaW5zdGVhZDoKYmluZCBVcCAgICAgICBvbGRl
ciAgICAgIHJlcGxhY2UKYmluZCBEb3duICAgICBuZXdlciAgICAgIHJlcGxhY2UKCiMjIFRvZ2ds
ZXMgaW4gdGhlIHNlYXJjaCBhbmQgcmVwbGFjZSBwcm9tcHRzOgpiaW5kIE0tQyAgICAgIGNhc2Vz
ZW5zICAgICByZXBsYWNlCmJpbmQgTS1SICAgICAgcmVnZXhwICAgICAgIHJlcGxhY2UKYmluZCBN
LUIgICAgICBiYWNrd2FyZHMgICAgcmVwbGFjZQpiaW5kIF5SICAgICAgIGZsaXByZXBsYWNlICBy
ZXBsYWNlCgoKIyMjIyMgIE1lbnU6IHJlcGxhY2V3aXRoCgojIyBJbiBoaXN0b3J5LWNhcGFibGUg
cHJvbXB0cywgVXAvRG93biBuYXZpZ2F0ZSB0aGUgaGlzdG9yeSBsaXN0IGluc3RlYWQ6CmJpbmQg
VXAgICAgICAgb2xkZXIgICAgICByZXBsYWNld2l0aApiaW5kIERvd24gICAgIG5ld2VyICAgICAg
cmVwbGFjZXdpdGgKCiMjIyMjICBNZW51OiB5ZXNubwpiaW5kIF5DICAgICAgIGNhbmNlbCAgICAg
IHllc25vCiMjI2RvZXMgbm90IHJlY29nbml6ZSAneWVzJyBhcyBhIGNvbW1hbmQgICAgYmluZCBF
bnRlciAgICB5ZXMgICAgICAgICB5ZXNubwoKIyMjIyMgIE1lbnU6IGdvdG9saW5lCgojIyBJbiB0
aGUgZ290b2xpbmUgYW5kIHNlYXJjaCBwcm9tcHRzLCBeWS9eViBqdW1wIHRvIGZpcnN0L2xhc3Qg
bGluZToKIyMjYmluZCBeWSAgICAgICBmaXJzdGxpbmUgIGdvdG9saW5lCiMjI2JpbmQgXlYgICAg
ICAgbGFzdGxpbmUgICBnb3RvbGluZQoKIyMgVG9nZ2xlcyBpbiB0aGUgc2VhcmNoIGFuZCByZXBs
YWNlIHByb21wdHM6CmJpbmQgXkcgICAgICAgZmxpcGdvdG8gICBnb3RvbGluZQoKIyMgSW4gdGhl
IGdvdG9saW5lIHByb21wdCwgbmF2aWdhdGUgYnkgcGFyYWdyYXBoOgpiaW5kIF5XICAgICAgIGJl
Z2lucGFyYSAgZ290b2xpbmUKYmluZCBeTyAgICAgICBlbmRwYXJhICAgIGdvdG9saW5lCgojIyMj
IyAgTWVudTogd3JpdGVvdXQKCiMjIE9wZW4gdGhlIGZpbGUgYnJvd3NlciBmcm9tIHRoZSB3cml0
ZW91dCBvciBpbnNlcnQgcHJvbXB0OgpiaW5kIF5UICAgICAgIHRvZmlsZXMgICAgd3JpdGVvdXQK
CiMjIE9wdGlvbnMgaW4gdGhlIHdyaXRlLW91dCBwcm9tcHQ6CmJpbmQgXlEgICAgICAgZGlzY2Fy
ZGJ1ZmZlciAgd3JpdGVvdXQKYmluZCBNLUQgICAgICBkb3Nmb3JtYXQgICAgICB3cml0ZW91dApi
aW5kIE0tQiAgICAgIGJhY2t1cCAgICAgICAgIHdyaXRlb3V0CmJpbmQgTS1BICAgICAgYXBwZW5k
ICAgICAgICAgd3JpdGVvdXQKYmluZCBNLVAgICAgICBwcmVwZW5kICAgICAgICB3cml0ZW91dAoK
IyMjIyMgIE1lbnU6IGluc2VydAoKIyMgT3BlbiB0aGUgZmlsZSBicm93c2VyIGZyb20gdGhlIHdy
aXRlb3V0IG9yIGluc2VydCBwcm9tcHQ6CmJpbmQgXlQgICAgICAgdG9maWxlcyAgICBpbnNlcnQK
CiMjIE9wdGlvbnMgaW4gdGhlIGluc2VydCBhbmQgZXhlY3V0ZSBwcm9tcHRzOgpiaW5kIF5YICAg
ICAgIGZsaXBleGVjdXRlICAgIGluc2VydApiaW5kIE0tTiAgICAgIGZsaXBjb252ZXJ0ICAgIGlu
c2VydApiaW5kIE0tRiAgICAgIGZsaXBuZXdidWZmZXIgIGluc2VydAoKIyMjIyMgIE1lbnU6IGV4
ZWN1dGUKCiMjIEluIGhpc3RvcnktY2FwYWJsZSBwcm9tcHRzLCBVcC9Eb3duIG5hdmlnYXRlIHRo
ZSBoaXN0b3J5IGxpc3QgaW5zdGVhZDoKYmluZCBVcCAgICAgICBvbGRlciAgICAgIGV4ZWN1dGUK
YmluZCBEb3duICAgICBuZXdlciAgICAgIGV4ZWN1dGUKCiMjIE9wdGlvbnMgaW4gdGhlIGluc2Vy
dCBhbmQgZXhlY3V0ZSBwcm9tcHRzOgpiaW5kIE0tRiAgICAgIGZsaXBuZXdidWZmZXIgIGV4ZWN1
dGUKYmluZCBNLVwgICAgICBmbGlwcGlwZSAgICAgICBleGVjdXRlCmJpbmQgXlQgICAgICAgY3V0
cmVzdG9mZmlsZSAgZXhlY3V0ZQoKIyMgU3VzcGVuZCB0byB0aGUgYmFja2dyb3VuZCAodmlhIHRo
ZSBleGVjdXRlIG1lbnU6IF5UIHRoZW4gXlopOgpiaW5kIF5aICAgICAgIHN1c3BlbmQgICAgZXhl
Y3V0ZQoKIyMgLS0gSnVzdGlmeSAtLQpiaW5kIF5KICAgICAgIGZ1bGxqdXN0aWZ5ICBleGVjdXRl
CgojIyAtLSBTcGVsbCBjaGVja2luZywgbGludGluZywgYW5kIGZvcm1hdHRpbmcgLS0KYmluZCBe
UyAgICAgICBzcGVsbGVyICAgIGV4ZWN1dGUKYmluZCBeTCAgICAgICBsaW50ZXIgICAgIGV4ZWN1
dGUKYmluZCBeTyAgICAgICBmb3JtYXR0ZXIgIGV4ZWN1dGUKCgojIyMjIyAgTWVudTogaGVscAoK
IyMgSW4gdGhlIGhlbHAgdmlld2VyLCBIb21lL0VuZCBqdW1wIHRvIHRoZSBmaXJzdC9sYXN0IGxp
bmU6CmJpbmQgSG9tZSAgICAgZmlyc3RsaW5lICBoZWxwCmJpbmQgRW5kICAgICAgbGFzdGxpbmUg
ICBoZWxwCgojIyAtLSBIZWxwLCBleGl0LCBhbmQgY2FuY2VsIC0tCmJpbmQgRjEgICAgICAgZXhp
dCAgICAgICBoZWxwCgojIyMjIyAgTWVudTogc3BlbGwKCgojIyMjIyAgTWVudTogbGludGVyCmJp
bmQgXlggICAgICAgY2FuY2VsICAgICBsaW50ZXIKCgojIyMjIyAgTWVudTogYnJvd3NlcgoKIyMg
SW4gdGhlIGJyb3dzZXIsIEhvbWUvRW5kIGp1bXAgdG8gdGhlIGZpcnN0L2xhc3QgZmlsZToKYmlu
ZCBIb21lICAgICBmaXJzdGZpbGUgIGJyb3dzZXIKYmluZCBFbmQgICAgICBsYXN0ZmlsZSAgIGJy
b3dzZXIKCiMjIC0tIEZpbGUgYnJvd3NlciBuYXZpZ2F0aW9uIC0tCmJpbmQgXkcgICAgICAgZ290
b2RpciAgICBicm93c2VyCgoKIyMjIyMgIE1lbnU6IHdoZXJlaXNmaWxlCgojIyBJbiBoaXN0b3J5
LWNhcGFibGUgcHJvbXB0cywgVXAvRG93biBuYXZpZ2F0ZSB0aGUgaGlzdG9yeSBsaXN0IGluc3Rl
YWQ6CmJpbmQgVXAgICAgICAgb2xkZXIgICAgICB3aGVyZWlzZmlsZQpiaW5kIERvd24gICAgIG5l
d2VyICAgICAgd2hlcmVpc2ZpbGUKCiMjIEluIHRoZSBmaWxlIGJyb3dzZXIncyBzZWFyY2ggcHJv
bXB0LCBeWS9eViBqdW1wIHRvIGZpcnN0L2xhc3QgZmlsZToKIyMjYmluZCBeWSAgICAgICBmaXJz
dGZpbGUgIHdoZXJlaXNmaWxlCiMjI2JpbmQgXlYgICAgICAgbGFzdGZpbGUgICB3aGVyZWlzZmls
ZQoKCiMjIyMjICBNZW51OiBnb3RvZGlyCgo=
--000000000000b373c506517cf1f1--