From debbugs-submit-bounces@debbugs.gnu.org Wed Jun 18 18:33:38 2025 Received: (at submit) by debbugs.gnu.org; 18 Jun 2025 22:33:38 +0000 Received: from localhost ([127.0.0.1]:57810 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uS1Ld-00032n-Qc for submit@debbugs.gnu.org; Wed, 18 Jun 2025 18:33:38 -0400 Received: from lists.gnu.org ([2001:470:142::17]:45990) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uS1Lb-000328-G6 for submit@debbugs.gnu.org; Wed, 18 Jun 2025 18:33:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uS1LV-0001Ib-SL for bug-gnu-emacs@gnu.org; Wed, 18 Jun 2025 18:33:30 -0400 Received: from mail-westeuropeazolkn19011035.outbound.protection.outlook.com ([52.103.33.35] helo=AS8PR04CU009.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uS1LT-00086G-OM for bug-gnu-emacs@gnu.org; Wed, 18 Jun 2025 18:33:29 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SsJasF2HojzEKxdY0Eb9J1o9ltOVdAEJZbIGtcbqNVNnTz/GjhHDP7OR3Zw6WGqeNfBknRnkfsqfTqA24IIX1/3k82Hwwd1zQJP/oDLibCUjGM66vtV8G/r+7q+MUtuznWXNCpTmUEZjD6e5k6bDw3jqtWwWEeBAt4rHoQ1n+ajkedWpBji8jEDMAzv/w77swkeFE02OJz5kht8FMwU4nWhkal3T8cktWdHiOMoCC6IwNO0LBkFBswNm+EBqtmR7TuGZPJ9IYL30us8PbgtzTUZnyIkm9kNsDDcLztmtQY61G4IsDTaoYAT+t1jCh6Dqj9vzyp6ra/wZGD3sxuwqww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=UEqqRUU6NPtWiCzR+jF5Nw74JeHDccRbK8uZ2WtNdNE=; b=DIvsQYpvrV0oxiHq7bx+CFl3DVrycTjCwrdDQIKbjJ91YeBqienFIZBYLqjIPV0lm74mQ7f3aIAEp6ytl6ldmya9RRCXoNQ+jN/Q14vYPB9fYi5JTcZgqgbu4mxwMXJdpJnDQTaE6cfhSuQyeBD4QTAxF99tegX8MxaI4M7xxrrnH1SNR4UV73AqbKt4uHrF61u7LyvyJCSmWLQlnEibEi+wXiOSY/ExcPhsxpbLffHiBwAKmZBRXpuoiwMOVCpzPywSR71UsoH89xy0+/H2jJpynAm58g6ytKtY6cYdydSvmBPAFZj5vtIB8uP6t9Wwl/pQAHqx720YMZvQNIX6DQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=live.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UEqqRUU6NPtWiCzR+jF5Nw74JeHDccRbK8uZ2WtNdNE=; b=UZu8iN54qsfyA3xZ1CVNyrGP+Jw4XMzAF2UJf4Md/6e8y9Dh74+SsMNKUHPH6s2mJ+ucuMxwWzf+UE5hPj+eZ+HlDYVw+q36bwNes6ReRI1NJZgk+sworE/AvcEJotJ80ogVWS5ksg7yB8E2xXxrvSLWMlcx/UwWKu2yLfL/heogoVHHCny+9pscFDDWeeE7CFvbvl6T4KqKgFl7XK5uz/URLnogYfWC+lwLmsu2EnJFOinPeSbVqxthtNoah9WFH5NMaWWmFBrIPAGP3FE1eVAYdiK33atV4bTeeOyRsdlpZdg+WexGkr+HTb6G4LOn6yfzRwcsqHsUbKDp4DT3Ew== Received: from DU2PR02MB10109.eurprd02.prod.outlook.com (2603:10a6:10:497::14) by GV1PR02MB10528.eurprd02.prod.outlook.com (2603:10a6:150:15e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.29; Wed, 18 Jun 2025 22:33:25 +0000 Received: from DU2PR02MB10109.eurprd02.prod.outlook.com ([fe80::f3c9:d4cb:290:d487]) by DU2PR02MB10109.eurprd02.prod.outlook.com ([fe80::f3c9:d4cb:290:d487%7]) with mapi id 15.20.8835.027; Wed, 18 Jun 2025 22:33:24 +0000 From: arthur miller To: "bug-gnu-emacs@gnu.org" Subject: Feature request: make keymapp dereference symbol value slot Thread-Topic: Feature request: make keymapp dereference symbol value slot Thread-Index: AQHb4KA2qx0GnvB6oEC/IZb2t+FLyw== Date: Wed, 18 Jun 2025 22:33:24 +0000 Message-ID: Accept-Language: sv-SE, en-US Content-Language: sv-SE X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DU2PR02MB10109:EE_|GV1PR02MB10528:EE_ x-ms-office365-filtering-correlation-id: 1aa36127-71c2-4936-3d29-08ddaeb8232e x-microsoft-antispam: BCL:0; ARA:14566002|461199028|41001999006|6092099012|7092599006|8060799009|19110799006|8062599006|15080799009|15030799003|13095399003|3412199025|440099028|102099032|51005399003|39105399003|40105399003; x-microsoft-antispam-message-info: =?iso-8859-1?Q?waY9mcSN9qU49IjAjFo1ON7bpOXbOV13UPfqIIdisDD1hEAInh7ywA8Al0?= =?iso-8859-1?Q?sqjQsoWnO3HjAfjG5I1hcyP7tTyuiUI7R3/xMhjuCay2fiOPl0e8hgxEcg?= =?iso-8859-1?Q?t+5eqEXpQkeUDYEA7h0R590JRjclE+e8UC8wR2qU7UBRfrhB5N4c8dbx/p?= =?iso-8859-1?Q?VZ51BmXvQHqi+sJQIAiqQixBOzG50dDVnkxlrsH38+CwsqETxYc0JjDut4?= =?iso-8859-1?Q?CCfR3i9QkX5DkuyxyWHeD+jbfkGC+eFVM4e0ZJpTBYt9495WTSxyOlazL1?= =?iso-8859-1?Q?oW+cMMeyhEakKC72Xz+fOS6sOzPSf8fxE+g2ufd4YtkcIMM4pkOQrg1R3Z?= =?iso-8859-1?Q?1MfT7nR/rfHdyAvookAModORtLwadAc5xjC43fFRA4Bt5jRpVRLndNYnIg?= =?iso-8859-1?Q?fxFCaf3eYshO4ntrlifAFGeqpHeqP4xLbhFEK7eoTU85bnYgFgHsVDUSnq?= =?iso-8859-1?Q?GPKWrsCQDkhzMt/zlBAGqSpib0l0iNTbJpjiQ4UsJHPH8z2/85KHLe0sah?= =?iso-8859-1?Q?2VuS2HXaf/MRS/8ZKEVFyX02dJKh++bApCP2J0or0oLc+jX0547VTmB7Wj?= =?iso-8859-1?Q?gu4MMR1kh5J3CkWLT5XRkb+OBouhRQYJ8dMKz1zEvcDZFTzjOdxZUiDvxT?= =?iso-8859-1?Q?junIV8EhwXFCneEkUqzbyyAY0tRv9qpC+JQYQsnkoqeaodwhbRW+/Lz8g3?= =?iso-8859-1?Q?kGB6O5gIWC4T5EM/UNP+5FDR+oQ48tD8Iizb3xOLF+Y8xo1FAK1bFuFU44?= =?iso-8859-1?Q?M5g8ZaW5HBfYBLneMyLdKTaHV3wX/gbCrAq5WJBF1r79TPFopYsq7qvqGk?= =?iso-8859-1?Q?rexUsl9V/u175Tb2fNI54ljj3l0FwfNK9YG1Vzz5xpvKjkhAOs0Spy49He?= =?iso-8859-1?Q?IWH0fUAktygi/4dmebCjMSCxGIITBCAEJl1AIH1gXYZCaHMVlOtN4YE5Qu?= =?iso-8859-1?Q?pWaX37OqJ7hPu0Lqi0i0zZXHq12lmXwX7smug3mOjZpJ0pLs/7LdNrkbYi?= =?iso-8859-1?Q?w34FgtU+0wfIa3VOJqJLxWi1NY6pRlNRhTaYT5i7bDoHrKpkFZGHGWS27+?= =?iso-8859-1?Q?ZnQjaQwwo1CJV774otLUNosguLfDMW0LpcD2MehKeD5EMdkgtBTgcXpzaK?= =?iso-8859-1?Q?jN5PgVytSGaDXMWe21OTTx8ynOtyP2/362m2/44+BHpmZwLUvEZMP+nUy1?= =?iso-8859-1?Q?fYf5G69Yllizi273/eTRZNPWPDhHb7ALDG/n8dTdamzqCfBNGKb/xb18Ez?= =?iso-8859-1?Q?MNvho3Db/YJpcuzGEjUmZqml582KhOsdbRNJtgja2BG438EKDwS36cX8Za?= =?iso-8859-1?Q?z/atlNitIQLndmbXsPQ+dfQvEDAymOr6a6GoMziJE9MsBC2Devd6iEnTHX?= =?iso-8859-1?Q?LKeAPNhauYHrbRvlUzyxSvEyJhstFgMg=3D=3D?= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?z3QsyR3d0xM7RgBMuXKZ5/mBE0V4yS/aH2AXaorcdXpLPQz0Ii16/G6D+2?= =?iso-8859-1?Q?1nDK72lyMrsSvUOuTrZ+JIAnNiuH13sJ+zU7pD41yP3+IuqZTKuH3EfbuY?= =?iso-8859-1?Q?ctsWwwanFHuKVUIYSCQ1HdnfWKIYx4Ne2w0f6Su1zcH4tNkxTlod9+t1Ko?= =?iso-8859-1?Q?gY6dHXmOslLUceY/0WUM/dJUOwUxZ50YCS8Ai2GVZj0TMcjsncDNiIIFJF?= =?iso-8859-1?Q?Cyc0EBY4gPF466BqgKZP5+OcdyImePOG/mNpuqCwekIAlzbKkNW3uyLwyJ?= =?iso-8859-1?Q?rslZh8yrZJ83Qqdcj+WPQqTLDivZ80nB6pkMkGml5H6yfRSrcIy1Xxb54u?= =?iso-8859-1?Q?OdGNDwPalr0i/5eKy2tCQqfGxIqyP+c48/IKDiOespOC4VF17oSvGZB/y5?= =?iso-8859-1?Q?IBYXM1MyNXyBZmYTrv5WBv2anSnjV5QcFpVCnCR0kzAqmkklBl084oZMoq?= =?iso-8859-1?Q?I3UJW+OWtHI44NcbcAOlxTOUwGNWMWm3Qdlekm5k1WiI0MjBvPyGYnuFDC?= =?iso-8859-1?Q?yOHVkoos2Bah1JUMe1qndBFpKWD/qD2JqXHUgsf72iQS7yfYWkAYkIerP+?= =?iso-8859-1?Q?2vs5fuKL8Bfs89el6jzXVWo+gO0wfjvZT6HSGNLeo/GLSNxwoN/up+vjuc?= =?iso-8859-1?Q?CxQyYT4rrvbaONVpXGRbTSMNSuL35+SsVeYV3ZkDIMglGLHbWvu87FOqNP?= =?iso-8859-1?Q?5i4KFZ/6fEhjIYerdGqLdYj6sLxnELY9/FUh8mGXumv09tk4DNRGJEmSeU?= =?iso-8859-1?Q?87+8eoeGEGX6s9Ka0Dw82wgEykxL91CYb7S5KZfThNDY16Y+3IEkyXTMpY?= =?iso-8859-1?Q?vt3dI0FBVuHGA8HHxVy+PsQMz9LtmWxaecD1MZwd2UYI0+DgYeVaD85V21?= =?iso-8859-1?Q?DX1jQQ+gywfChpRG6zoM9vK6BOqQhwIFfvEMIA8j5xoxjr2JVUY8H7DNcG?= =?iso-8859-1?Q?NaeRvKD5xN+3HBoOOCSH74PJMqFPH7EghYOvyk1f6gyctmt8PoE9/U8Ex2?= =?iso-8859-1?Q?n/BZ2/oqsCAoHHHw7t0ihP3DXbJWHKui4MGEH6nDVSlvcwNtLB6SX9nkDu?= =?iso-8859-1?Q?MZOUwtbYqye0yt8fWpi8xGhfQpYxjPXd+Fz07Q9N8EL7UbkvWFpGXk8rie?= =?iso-8859-1?Q?CNAWo5/uxbuxqkYwN79S/R/u+wp/AGs66us0pAgzs1FfPgIRr3Z1oU+n3p?= =?iso-8859-1?Q?D7aUFsGoNCAs7gwAspSSVuhU6oVpjxIw8hnY/bXXJVCn9V+DsN7Hl9enz5?= =?iso-8859-1?Q?foRALxXiOkYbitbI4GIh4q/48PRW53p85QsxZvH1ytgMjblNLobmBuCDde?= =?iso-8859-1?Q?U7KvG70CD1usDZKR6seOcwoH4VANMjXaoSdXyrgTeb7zUis=3D?= Content-Type: multipart/mixed; boundary="_004_DU2PR02MB10109626D30BBA0BC66ACAF8B9672ADU2PR02MB10109eu_" MIME-Version: 1.0 X-OriginatorOrg: sct-15-20-8534-20-msonline-outlook-5faa0.templateTenant X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DU2PR02MB10109.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: 1aa36127-71c2-4936-3d29-08ddaeb8232e X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Jun 2025 22:33:24.3653 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR02MB10528 Received-SPF: pass client-ip=52.103.33.35; envelope-from=arthur.miller@live.com; helo=AS8PR04CU009.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.0 (/) --_004_DU2PR02MB10109626D30BBA0BC66ACAF8B9672ADU2PR02MB10109eu_ Content-Type: multipart/alternative; boundary="_000_DU2PR02MB10109626D30BBA0BC66ACAF8B9672ADU2PR02MB10109eu_" --_000_DU2PR02MB10109626D30BBA0BC66ACAF8B9672ADU2PR02MB10109eu_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Currently keymapp returns nil, when passed a symbol if a keymap object is only in a symbol's value slot, but not fbound: (keymapp emacs-lisp-mode-map) =3D> t (keymapp 'emacs-lisp-mode-map) =3D> nil (boundp 'emacs-lisp-mode-map) =3D> t (fboundp 'emacs-lisp-mode-map) =3D> nil Keymapp uses internally get_keymap to check if an object is a keymap, and get_keymap does not check value slot of symbols. However, the comment above says: "Check that OBJECT is a keymap (after dereferencing through any symbols). If it is, return it." Now, I don't know why is it the case, why the value slot is not derefenced. I guess it is by design; after all this time this function is in existence, that must be known. I don't understand the reason though, by just looking at it at the moment, so I do wonder why is it so? Anyway, that leaves me in a bit awkward situation where I can ask a question: (keymapp some-symbol) and get two different answers: (keymapp 'emacs-lisp-mode-map) =3D> nil (keymapp 'vc-mode-map) =3D> t because one is fbound and the other is not. The background for this is that I want to collect all loaded keymaps in the system: (defun collect-keymaps () (cl-loop for k being the symbol when (keymapp k) collect k)) But I don't get them all, since keymapp won't recognize those that are not fbound. That makes the whole thing quite less effective, since I have to additionally check if a symbol is bound and if its symbol value is a keymap. As a suggestion, the attached patch dereferences symbol value slots as well. If it is not a wrong thing to do for some reason I am not aware of, I would like to suggest it as a "fix" or a "feature request", whichever is best describing the issue. --_000_DU2PR02MB10109626D30BBA0BC66ACAF8B9672ADU2PR02MB10109eu_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
Currently keymapp returns nil, when passed a symbol if a keymap=  
object is only in a symbol's value slot, but not fbound:

(keymapp emacs-lisp-mode-map) =3D> t
(keymapp 'emacs-lisp-mode-map) =3D> nil

(boundp 'emacs-lisp-mode-map) =3D> t
(fboundp 'emacs-lisp-mode-map) =3D> nil

Keymapp uses internally get_keymap to check if an object is a keymap,
and get_keymap does not check value slot of symbols. However, the
comment above says:

"Check that OBJECT is a keymap (after dereferencing through any
   symbols).  If it is, return it."

Now, I don't know why is it the case, why the value slot is not
derefenced. I guess it is by design; after all this time this function
is in existence, that must be known. I don't understand the reason
though, by just looking at it at the moment, so I do wonder why is it
so?

Anyway, that leaves me in a bit awkward situation where I can ask a
question: (keymapp some-symbol) and get two different answers:

(keymapp 'emacs-lisp-mode-map) =3D> nil
(keymapp 'vc-mode-map) =3D> t

because one is fbound and the other is not. The background for this is
that I want to collect all loaded keymaps in the system:

(defun collect-keymaps ()
  (cl-loop for k being the symbol when (keymapp k) collect k))

But I don't get them all, since keymapp won't recognize those that are
not fbound. That makes the whole thing quite less effective, since I
have to additionally check if a symbol is bound and if its symbol value
is a keymap.

As a suggestion, the attached patch dereferences symbol value slots as
well. If it is not a wrong thing to do for some reason I am not aware
of, I would like to suggest it as a "fix" or a "feature requ= est",
whichever is best describing the issue.
--_000_DU2PR02MB10109626D30BBA0BC66ACAF8B9672ADU2PR02MB10109eu_-- --_004_DU2PR02MB10109626D30BBA0BC66ACAF8B9672ADU2PR02MB10109eu_ Content-Type: application/octet-stream; name="0001-Make-get_keymap-dereference-symbol-value-slot.patch" Content-Description: 0001-Make-get_keymap-dereference-symbol-value-slot.patch Content-Disposition: attachment; filename="0001-Make-get_keymap-dereference-symbol-value-slot.patch"; size=1001; creation-date="Wed, 18 Jun 2025 22:29:18 GMT"; modification-date="Wed, 18 Jun 2025 22:29:44 GMT" Content-Transfer-Encoding: base64 RnJvbSBjMjljOGFjYzc1Y2JkNTk2ZmU0MmY1YzI2MmZkN2QwZTgyODVlODdjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBcnRodXIgTWlsbGVyIDxhcnRodXIubWlsbGVyQGxpdmUuY29t PgpEYXRlOiBUaHUsIDE5IEp1biAyMDI1IDAwOjAyOjU5ICswMjAwClN1YmplY3Q6IFtQQVRDSF0g TWFrZSBnZXRfa2V5bWFwIGRlcmVmZXJlbmNlIHN5bWJvbC12YWx1ZSBzbG90CgoqIHNyYy9rZXlt YXAuYyAoZ2V0X2tleW1hcCk6CkRlcmVmZXJlbmNlIHN5bWJvbCBzbG90IGFuZCBjaGVjayBmb3Ig YSB2YWxpZCBrZXltYXAuCi0tLQogc3JjL2tleW1hcC5jIHwgMTAgKysrKysrKysrLQogMSBmaWxl IGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9rZXltYXAuYyBiL3NyYy9rZXltYXAuYwppbmRleCAyYzI1MDU3OGIwMC4uM2ExYjY4YTIxMTMg MTAwNjQ0Ci0tLSBhL3NyYy9rZXltYXAuYworKysgYi9zcmMva2V5bWFwLmMKQEAgLTE5Nyw3ICsx OTcsMTUgQEAgZ2V0X2tleW1hcCAoTGlzcF9PYmplY3Qgb2JqZWN0LCBib29sIGVycm9yX2lmX25v dF9rZXltYXAsIGJvb2wgYXV0b2xvYWQpCiAgIGlmIChDT05TUCAob2JqZWN0KSAmJiBFUSAoWENB UiAob2JqZWN0KSwgUWtleW1hcCkpCiAgICAgcmV0dXJuIG9iamVjdDsKIAotICBMaXNwX09iamVj dCB0ZW0gPSBpbmRpcmVjdF9mdW5jdGlvbiAob2JqZWN0KTsKKyAgTGlzcF9PYmplY3QgdGVtOwor ICBpZiAoU1lNQk9MUCAob2JqZWN0KSkKKyAgICB7CisgICAgICB0ZW0gPSBmaW5kX3N5bWJvbF92 YWx1ZSAob2JqZWN0KTsKKyAgICAgIGlmIChDT05TUCAodGVtKSAmJiBFUSAoWENBUiAodGVtKSwg UWtleW1hcCkpCisJcmV0dXJuIHRlbTsKKyAgICB9CisKKyAgdGVtID0gaW5kaXJlY3RfZnVuY3Rp b24gKG9iamVjdCk7CiAgIGlmIChDT05TUCAodGVtKSkKICAgICB7CiAgICAgICBpZiAoRVEgKFhD QVIgKHRlbSksIFFrZXltYXApKQotLSAKMi41MC4wCgo= --_004_DU2PR02MB10109626D30BBA0BC66ACAF8B9672ADU2PR02MB10109eu_-- From debbugs-submit-bounces@debbugs.gnu.org Thu Jun 19 02:16:30 2025 Received: (at 78834) by debbugs.gnu.org; 19 Jun 2025 06:16:31 +0000 Received: from localhost ([127.0.0.1]:59831 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uS8ZZ-0003nv-Mb for submit@debbugs.gnu.org; Thu, 19 Jun 2025 02:16:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60158) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uS8ZV-0003mS-Vm for 78834@debbugs.gnu.org; Thu, 19 Jun 2025 02:16:27 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uS8ZN-0004wN-I7; Thu, 19 Jun 2025 02:16:18 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=Yf3Q1BsVfYi43ZEyHsdroKFAN1edYoZE2vq2WiJFzQg=; b=Zj2Q0mksIanaBoXIz+lb 5MhNvXFAA0va5ISEO1/gMTAN3BH8MdcuSHHCEQ8w6jzGqyYh8L40c1jQvg43LcJdk/LS6StMvApPE tZo1jE+daI8OV00yF9pGUbXsLUthjuIR331ebWXPMR9V6YoIzcbaI6SlQ8e75whwHxeiBiHErCZAZ 7kPzluF9y38P3bCkW65+cT3dSfxDd4CKBVQUgV8s9nrO7jBNUeygzfTwmT2WOWh9V49UazHEprIgu /e8X81z5BNaeGVVf8tDt0x/+8R26bcGaNtHyy7bDo+QJh/EdoqaAOwLW4wdNH+e+W1LHqn7rkrx7v 2Wy7mQy/enY16A==; Date: Thu, 19 Jun 2025 09:15:49 +0300 Message-Id: <86wm98l0iy.fsf@gnu.org> From: Eli Zaretskii To: arthur miller , Stefan Monnier In-Reply-To: (message from arthur miller on Wed, 18 Jun 2025 22:33:24 +0000) Subject: Re: bug#78834: Feature request: make keymapp dereference symbol value slot References: MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 78834 Cc: 78834@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: arthur miller > Date: Wed, 18 Jun 2025 22:33:24 +0000 > > Currently keymapp returns nil, when passed a symbol if a keymap > object is only in a symbol's value slot, but not fbound: > > (keymapp emacs-lisp-mode-map) => t > (keymapp 'emacs-lisp-mode-map) => nil > > (boundp 'emacs-lisp-mode-map) => t > (fboundp 'emacs-lisp-mode-map) => nil > > Keymapp uses internally get_keymap to check if an object is a keymap, > and get_keymap does not check value slot of symbols. However, the > comment above says: > > "Check that OBJECT is a keymap (after dereferencing through any > symbols). If it is, return it." > > Now, I don't know why is it the case, why the value slot is not > derefenced. I guess it is by design; after all this time this function > is in existence, that must be known. I don't understand the reason > though, by just looking at it at the moment, so I do wonder why is it > so? > > Anyway, that leaves me in a bit awkward situation where I can ask a > question: (keymapp some-symbol) and get two different answers: > > (keymapp 'emacs-lisp-mode-map) => nil > (keymapp 'vc-mode-map) => t > > because one is fbound and the other is not. The background for this is > that I want to collect all loaded keymaps in the system: > > (defun collect-keymaps () > (cl-loop for k being the symbol when (keymapp k) collect k)) > > But I don't get them all, since keymapp won't recognize those that are > not fbound. That makes the whole thing quite less effective, since I > have to additionally check if a symbol is bound and if its symbol value > is a keymap. > > As a suggestion, the attached patch dereferences symbol value slots as > well. If it is not a wrong thing to do for some reason I am not aware > of, I would like to suggest it as a "fix" or a "feature request", > whichever is best describing the issue. > > From c29c8acc75cbd596fe42f5c262fd7d0e8285e87c Mon Sep 17 00:00:00 2001 > From: Arthur Miller > Date: Thu, 19 Jun 2025 00:02:59 +0200 > Subject: [PATCH] Make get_keymap dereference symbol-value slot > > * src/keymap.c (get_keymap): > Dereference symbol slot and check for a valid keymap. > --- > src/keymap.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/src/keymap.c b/src/keymap.c > index 2c250578b00..3a1b68a2113 100644 > --- a/src/keymap.c > +++ b/src/keymap.c > @@ -197,7 +197,15 @@ get_keymap (Lisp_Object object, bool error_if_not_keymap, bool autoload) > if (CONSP (object) && EQ (XCAR (object), Qkeymap)) > return object; > > - Lisp_Object tem = indirect_function (object); > + Lisp_Object tem; > + if (SYMBOLP (object)) > + { > + tem = find_symbol_value (object); > + if (CONSP (tem) && EQ (XCAR (tem), Qkeymap)) > + return tem; > + } > + > + tem = indirect_function (object); > if (CONSP (tem)) > { > if (EQ (XCAR (tem), Qkeymap)) > -- > 2.50.0 Stefan, any comments? FWIW, the ELisp manual says explicitly: -- Function: keymapp object This function returns ‘t’ if OBJECT is a keymap, ‘nil’ otherwise. More precisely, this function tests for a list whose CAR is ‘keymap’, or for a symbol whose function definition satisfies ‘keymapp’. So, unless I'm missing something, the current behavior seems to match the documentation? From debbugs-submit-bounces@debbugs.gnu.org Thu Jun 19 11:19:05 2025 Received: (at 78834) by debbugs.gnu.org; 19 Jun 2025 15:19:05 +0000 Received: from localhost ([127.0.0.1]:35679 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uSH2d-00051u-O4 for submit@debbugs.gnu.org; Thu, 19 Jun 2025 11:19:05 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:34658) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uSH2a-00050l-2g for 78834@debbugs.gnu.org; Thu, 19 Jun 2025 11:19:01 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 0686380735; Thu, 19 Jun 2025 11:18:54 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1750346329; bh=GmmoXQ4ERVZVie0dw4cpM5wyCpCUHr1+jJRKRYDQRV0=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=S5JlR0PgkTiZANl02e/WH8llyNEtMt3r+iB2IKcRo43Az7f+Zhc0ucutmqTUKBdti kcmnK8jrMKeWmAGbp+XBolSxbe/NX4mAmpZfuF2ZhG7p4Ih6LumoEm/o8arhNwzAAV yRtjqGaN/27EFl1m8GavnXrDKOsTYzwscqnS5DBTUxKppvDQ+law41w31Uj99Ob0Nx /zqzhcnTvf/twIvOL5ZKsBbFNO+96PCxjKsTLBIH23hsB4rt/JcBos4DXawgklr54/ nAIRUemRH6dArULRGuyHBzl2wt6oASffUD0s89tHuDQiKHHtFIAAc5FwTwtonQSHQ7 DL44NI4oo3RVQ== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 086FA801E8; Thu, 19 Jun 2025 11:18:49 -0400 (EDT) Received: from pastel (unknown [104.247.225.139]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id D352012018B; Thu, 19 Jun 2025 11:18:48 -0400 (EDT) From: Stefan Monnier To: arthur miller Subject: Re: bug#78834: Feature request: make keymapp dereference symbol value slot In-Reply-To: Message-ID: References: Date: Thu, 19 Jun 2025 11:18:47 -0400 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.336 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 78834 Cc: 78834@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > because one is fbound and the other is not. The background for this is > that I want to collect all loaded keymaps in the system: > > (defun collect-keymaps () > (cl-loop for k being the symbol when (keymapp k) collect k)) The fix here is to always check the `(symbol-value k)` never `k`. IOW think of it "I'm looking for all the loaded strings" except that you're looking for keymaps instead of strings. You wouldn't do `(stringp k)` but `(stringp (symbol-value k))`, right? It is rue that keymaps (contrary to strings) can *also* be represented by symbols (where it works much like it does for functions). I don't know why this was done, but I consider as an historical accident and don't recommend making use of that "feature". It's mostly used in very old code that uses the weird `define-prefix-command` function, such as the code that sets up some of the "core" keymaps like `ctl-x-5-prefix` `ESC-prefix` `ctl-x-4-prefix`, `Control-X-prefix`. > As a suggestion, the attached patch dereferences symbol value slots > as well. It's simpler to fix *your* code rather than the rest of the world's. =F0= =9F=99=82 > If it is not a wrong thing to do for some reason I am not aware > of, I would like to suggest it as a "fix" or a "feature request", > whichever is best describing the issue. It would break existing uses when the symbol has both a `symbol-function` value and a `symbol-value` value. We could consider adding it as a fallback (i.e. use the `symbol-value` slot only *after* checking the `symbol-function` slot), but that would be a somewhat weird/unreliable feature, so we'd need a compelling use-case (the only advantage I can see of using `symbol-value` over `symbol-function` is that it can be made buffer-local, so you could e.g. make a keymap whose parent changes dynamically depending on the current-buffer, but I don't know what would be the corresponding "compelling use-case"). Stefan From debbugs-submit-bounces@debbugs.gnu.org Thu Jun 19 17:53:09 2025 Received: (at 78834) by debbugs.gnu.org; 19 Jun 2025 21:53:09 +0000 Received: from localhost ([127.0.0.1]:38728 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uSNBw-0002ii-6J for submit@debbugs.gnu.org; Thu, 19 Jun 2025 17:53:08 -0400 Received: from mail-francesouthazolkn19011029.outbound.protection.outlook.com ([52.103.39.29]:39756 helo=MRWPR03CU001.outbound.protection.outlook.com) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uSNBo-0002gb-Ct for 78834@debbugs.gnu.org; Thu, 19 Jun 2025 17:53:01 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=aadLIJJwFSJ5/VKjOae/7YpDU3Ns+wMRXv2iIjulVKSDApy4ZHz1+Uwz325zFI++cICt/tR3bncU3Z2E0Y4jpHT4KZiTMHUrzV1hTgAfGg9ZSgx4sCRK8RAyuy+5C3FFRNkanMZxl6mTKG+g9WVMK0pAKEYOGdQn7g+3YiwGIlnS714XiLrn4Xu4KSzXbJnFmkmRWTv4rYf3VBeNW9lSKN6mznCQPgYnBauATCJCUGtaff+187h7pjU4me9g7OA4ZKuPlpILYIoDL0lVvIgrzGq/7J6ydk5pq1nf6MuxHKb8hxIm7fZwkHWT4ijgLtszSOf1I9QzQeS8uTsM1QeLrQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ZX9leXosOMUhD02YbtVuzXkmNTYEcIvcZZrGE2EWRIk=; b=a742kCg4JR36ZzmHz7x0vqBCRkXGYpJBrAijGtHzjESxLs5pCVyctsV9JOBjtqaseYGAYPYLWLbKwR7xfINGVBHnR/Lc70NQoz9926XFMvGkt4XIy/3MJ8x8RHer4fjJdIKizauxFXrAiXLNlU/jnqj6bqE1V5US1EVvJh966c6ftydZZFnJnIXejpxWBETvZA07c3aO/JC24rR2kTvDgAcEc9MLOwCa1A/UwyVyYA422DgUqDdD5ZN7olCGWtrURZTM3qCYnSG+FrvRrLiAkGA09mhjgEVEN2VK6oqVBSBOvDAqNcnNTbCmL5Fmoan75PjvuuHZHJr5T4qS+9wLQg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=live.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZX9leXosOMUhD02YbtVuzXkmNTYEcIvcZZrGE2EWRIk=; b=nriPeBAmYK04M8kI3Z52uh3lRQyi9KNlaDWx+cKmpZlVW9NttgmFXgbfU2cT8bGxQ3MMwOwImq9Bc6kaiCSEM1A0xiEWa/Dkz608Z636NckaOwnfZagut2Rupursxgv7Udg6GJOwlYVheewCVcFu/5d8NuQSckG88EEAYR1EizKNB1t6Wg6hdtttk7lVD2M8a8ivXg/ocv1AcEx38Cw7NFrIYz5OuFMyZU71azRsMEFYAoV7cmeCIaYslGumB+rxlsP9YikTxV0ZYkUtmc/trzOAkJe7ty+u8pZA4G8Y/aDVGNzv0nk0rddnZJddoY1ZXG2NxyH1ycGhTznYqB7r2w== Received: from DU2PR02MB10109.eurprd02.prod.outlook.com (2603:10a6:10:497::14) by VI0PR02MB10588.eurprd02.prod.outlook.com (2603:10a6:800:204::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8857.22; Thu, 19 Jun 2025 21:52:49 +0000 Received: from DU2PR02MB10109.eurprd02.prod.outlook.com ([fe80::f3c9:d4cb:290:d487]) by DU2PR02MB10109.eurprd02.prod.outlook.com ([fe80::f3c9:d4cb:290:d487%7]) with mapi id 15.20.8857.021; Thu, 19 Jun 2025 21:52:49 +0000 From: arthur miller To: Stefan Monnier Subject: Sv: bug#78834: Feature request: make keymapp dereference symbol value slot Thread-Topic: bug#78834: Feature request: make keymapp dereference symbol value slot Thread-Index: AQHb4KA2qx0GnvB6oEC/IZb2t+FLy7QKmaeAgABtyM0= Date: Thu, 19 Jun 2025 21:52:48 +0000 Message-ID: References: In-Reply-To: Accept-Language: sv-SE, en-US Content-Language: sv-SE X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DU2PR02MB10109:EE_|VI0PR02MB10588:EE_ x-ms-office365-filtering-correlation-id: 940e45d4-277d-4e98-79b0-08ddaf7ba1f0 x-microsoft-antispam: BCL:0; ARA:14566002|7092599006|461199028|15030799003|41001999006|19110799006|8062599006|8060799009|15080799009|102099032|40105399003|3412199025|52005399003|440099028; x-microsoft-antispam-message-info: =?utf-8?B?VG5iTHJrb1dCcVhnLzE2cFlIYW1YMkRnR2wrSHVkQlJ3WjZUMTU2SmJyY2dZ?= =?utf-8?B?L2V0TW1JcGRTZjYzVnN5OXhobXB5WG1FQ09UQ01kbFV0MmVHdEVHU2JZN2Yv?= =?utf-8?B?RUMwRG4wc2FUQ2x3WXpjcXNONy9WUmZXdytFZnZWUnZEOGpZK05mNjNPN0xa?= =?utf-8?B?dHFENWh4MkZCanFUWVNoSDEvWU5yY2dvTTVsSnJKZ1RralBjWTY4ZnZQRTky?= =?utf-8?B?S1BMSnIzckpLVGJnT0laUmNuSmxubGpZOFFLM04zUEU3ajBKTGVuVVpZSVEr?= =?utf-8?B?ZDl3b1NvZUE1ejg0WHZsMlNTWFJxclhYc2piRDhpeXhpbHJGa2RiV0FIM0Q2?= =?utf-8?B?L2xXcHBzVGhMZ1gveUZ2SGFTOTNNRS9JSHdGdDg3dlh3MFcxdjZNRWpQMnI4?= =?utf-8?B?TFlxZ3FSaWJBdStRZmhUQTdXQkE2U3F2dTJaWUdKVU42Mjk3Y1doL0hwZ0xw?= =?utf-8?B?QWRSMHNyT0VWdm5rVGFvRDhXOGxvL3BrdWZER0dwM3RDMllvUnFHNjRhdEg5?= =?utf-8?B?RHIvSG1yK25HcmE4aXlpc3lzcVRTT0l5bEZka0VtdmRlYWdWdlpuN0xyRmYx?= =?utf-8?B?d1lOLzB2THBsYmdNMmJVNjVNaW9BR0dlQzJwMTUyWW5JZ2c2aDBGYUo0c29h?= =?utf-8?B?WnpmcEs5YVMzWlZLck9XTGU2dDBhTHRpR2lOZUJKMHpPNEhRYlRXbEYvZ2hC?= =?utf-8?B?b24xalp1dndkcUNmNXFwVmlNRG8zZUpJaDhxMU9XUkp0VlFWMVlHUGxsNUdI?= =?utf-8?B?dUxJM0RUdEx5OERXL28rNlpxbXY2MzRuR3MvVXYrWGxIeTBYWmVTajA2OHBs?= =?utf-8?B?cjJqWFpSdjhjbUZLUnZheVFDemhreDg5SGl5OWlaVUZGYThDQVlZMlFxNEtF?= =?utf-8?B?V0drTDJKRnNGeE1UVGpYUG5ZVmFPMFJTZkhTM2FKTCs2TCtscWszcmJBbS80?= =?utf-8?B?RDZQV1RDVVVHWjJUTDFscGRRK0RxRTZzMzR0a1JlUWRqblJFQmFGL0ZJdFJH?= =?utf-8?B?UXlNS3d5YlllSld0aUVkcC93TStLcHZZeVVteWp1ZVhJZnhWR3BFQkU3czha?= =?utf-8?B?ekdHV285Yk9za01XbVJTUzI1QmFvaHVuaURlL3NMNUNrTGMyOWdGSG82NGJq?= =?utf-8?B?bUQ4LzJwWnQyd3dIY0pvVXJNNkJROW12REFQZ3JXOG5LQTZzMUhUaWpkdXlq?= =?utf-8?B?bzFFVmYwQi93a1Z4T1NHVDMxcjdkcnBuMTU5MStlYTdjQytsOS9TSXphM0Z0?= =?utf-8?B?WFZZcDVCNXcvWW5namZvTDhZSHRLWkNmNEZpWE1IM0tiVGZGaUk5YmlCdStP?= =?utf-8?B?OXZiRHFaVHlnYUtWZUFLbnV2ZVV2RzRYZS9hS3BnZythZjJDRWdTNlZtbzEy?= =?utf-8?B?RW5hdThaMmpYV0ZWRWlwOUV3ZTYya1c3R01UOVFWcDNNTzllZ2tkdVQxbnpn?= =?utf-8?B?Sk82Y3FhNzJpSXNtN1pnakFtamRBZUMvc1NrSjlOWS8yd2ttRWRvemNnajJK?= =?utf-8?B?Wi9sejQybVIxNjZ5MmdUWFlRdVBDVjdVQ0cxWjkvT01SV0hSZ1kvNGVha0pL?= =?utf-8?B?Z25VZ3dWTHBQcXBNbzRab0hqS0tlUTZxaW9udUF4b2ZoWUJjQXZoM2EyY3Va?= =?utf-8?Q?ojVdSGjqnT8ZeSXy4qyFZNjJCGiphowzRjJG5+TDCDFk=3D?= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?cEtRaGwyL0hoczMzcnNteGVEdFNzcXpmWWN5bHdJVEJUdE5yWWNEbHdXbTBZ?= =?utf-8?B?WWpLTWppSmhxOWMwakc4QXY1S1B0aFoxVjV6eWtxQVdKTFF0TC9tN0RIN3Rp?= =?utf-8?B?UmMyWmpHYlkzMStWNGxvN0pMRUE4ZXpxcXBtVGwvaEx5YXVnV2hQYmY1NUF1?= =?utf-8?B?QVFnNGFyRXprNTdSTlp1UjlYMktxK1lXdWQ3QTYyMmZMVGJNOTJyVEhxR1Nj?= =?utf-8?B?L09WdDg1SFh3TlhPelNOemFsRjJvSy9sSzN3dmRlMEF4QTlmSFkxRDNFVU5N?= =?utf-8?B?VUNOYldUYTJuV3hVdVJYdlJFLzlTWklRWkZRZTg2ckxCQndkb2EzT2k3Z0ps?= =?utf-8?B?OW5LTElQRFZodFkzL2htOGpUUFcxUkE2djBuWXU1bnZON0JBZDZBcmoxZFlL?= =?utf-8?B?RW5Oc0RTcEthVytLRlhjZzlFbTdyOU9LWW52RStVOWh1NEg2clRpK29iaFpP?= =?utf-8?B?Y1F3anBPeXVnOC92THBZWU1zT0sxN1pNSEhFYjUxenFuK0t6MWRYbUlja0lr?= =?utf-8?B?NlF0eVlNVUtIS0M1MGE5QlBySXpTMzU1MzVHU3pxSkNNN0JjUVZNZytwZ0Nu?= =?utf-8?B?S3IrTGFSUTE4WFZEQ1RnZEU2UktsV0lzRjZhNm5CNlpOcU01K2pZemtDdW9m?= =?utf-8?B?cGRuUnRJYWg5SWtBZ3FPaTQ3VnhjbmJLMnpJUjBxV3AxckZqblRTOWVVbGJZ?= =?utf-8?B?b3hyay8xVlpBdEJoOXUrYzgwTkdMR0tqUmkxZm9jZXY2L0xPVzlVUmNqOHMw?= =?utf-8?B?dWxObkc2Ny9Ud2ErQmthalFnVVJmcExFRkRsc3haaUozUFdQMUVqbnMyTi9z?= =?utf-8?B?YlFWZHoydVNoOVJSeWlZZE1zM0lLYk4vdkwwcFBITk1LS0RXZUtBakRBOE9o?= =?utf-8?B?T2hZVkJkaDA0aDdJTmpxa1ZXQU5xcGkxWEZTZWZhcU9HeEY1a0JZT09GV1VI?= =?utf-8?B?aS9TSmdXd1pxNDZ5cVF2SkREK3BUOTA2UmduajZnN3FXdXBnc1NwbTFBR0dm?= =?utf-8?B?SlBKVVZtQUZsbmx0NEZEc0tYbUFLcHBhV0kxL2lDUW5wSVUzTTBXOHdvV0h2?= =?utf-8?B?U1VFK0VkMDZKN00wL3JPeEVwTER4K2N1VVhvNnliSGRhdmNIU0dmeVJZWGdZ?= =?utf-8?B?K0dhMG41L1JLUGxaNEl2Ym1CT2hsbS9vNlpwb2RXc00wNFZrYVhCeGFUV0l4?= =?utf-8?B?alkzcFRycXBvcmtDVGdjNEZER3NxM3R0ZFlmbVhZczIzS2t3NHp2TytRb0RE?= =?utf-8?B?aWN0MlVGYmJidWMxV1VURlRXZ0tRODJLNmZYbnkvMlVaL2V1VjZpYW4xdmhv?= =?utf-8?B?VENWV1N6dys3WC9OaFNoKzNjbnZhekdUL1VLdXFHVnVGWXkyMFJKMjZ3K2M5?= =?utf-8?B?M0cvV1JCU0hVbXBuNTBSb1dSRmZLaTZCSVVpUUtHdmRWOTNWcTVMejE3MWVl?= =?utf-8?B?VXBxYUdIMXpHcUQ2U3BOZEVTQVdDcHg2TzJrR0pqYlhzTk1IRFVQOGlQYVBL?= =?utf-8?B?czFiZjdKWm9WVjVweCtzd2tlWGRGNmxTQ3kxOFpZdC94OXh6bjNXNXU0NHJY?= =?utf-8?B?K2dxM2NUZnIrdllmdndETnpZQmtPdUtpQXp0SXVieXFKbGJnNUVINEt4SDFt?= =?utf-8?B?LzBtcWJvOFJjOEFtcVp4aDcyVkVFTmRQNCtQTEtoR2JpUXFWK2s4ZHMraHVC?= =?utf-8?B?cnlEUzdBWW1MQzhQLzNYbm5OaDVKUmMvSCtTTm5WNSt3b0tsc2hVZ2Y1cUto?= =?utf-8?Q?L1fPSDrlr7Fvts/dnM=3D?= Content-Type: multipart/alternative; boundary="_000_DU2PR02MB10109500793B66801151DCABD967DADU2PR02MB10109eu_" MIME-Version: 1.0 X-OriginatorOrg: sct-15-20-8534-20-msonline-outlook-5faa0.templateTenant X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DU2PR02MB10109.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: 940e45d4-277d-4e98-79b0-08ddaf7ba1f0 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Jun 2025 21:52:48.8853 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR02MB10588 X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78834 Cc: "78834@debbugs.gnu.org" <78834@debbugs.gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --_000_DU2PR02MB10109500793B66801151DCABD967DADU2PR02MB10109eu_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 PiA+IGJlY2F1c2Ugb25lIGlzIGZib3VuZCBhbmQgdGhlIG90aGVyIGlzIG5vdC4gVGhlIGJhY2tn cm91bmQgZm9yIHRoaXMgaXMNCj4gPiB0aGF0IEkgd2FudCB0byBjb2xsZWN0IGFsbCBsb2FkZWQg a2V5bWFwcyBpbiB0aGUgc3lzdGVtOg0KPiA+DQo+ID4gKGRlZnVuIGNvbGxlY3Qta2V5bWFwcyAo KQ0KPiA+ICAgKGNsLWxvb3AgZm9yIGsgYmVpbmcgdGhlIHN5bWJvbCB3aGVuIChrZXltYXBwIGsp IGNvbGxlY3QgaykpDQo+DQo+IFRoZSBmaXggaGVyZSBpcyB0byBhbHdheXMgY2hlY2sgdGhlIGAo c3ltYm9sLXZhbHVlIGspYCBuZXZlciBga2AuDQo+IElPVyB0aGluayBvZiBpdCAiSSdtIGxvb2tp bmcgZm9yIGFsbCB0aGUgbG9hZGVkIHN0cmluZ3MiIGV4Y2VwdCB0aGF0DQo+IHlvdSdyZSBsb29r aW5nIGZvciBrZXltYXBzIGluc3RlYWQgb2Ygc3RyaW5ncy4NCg0KSSByZWFsaXplZCB0aGF0IGFu ZCB3YXMgZG9pbmcgc29tZXRoaW5nIHNpbWlsYXIsIGFkbWl0dGVkbHkgbGVzcw0KZWZmZWNpZW50 bHkgYmVjYXVzZSBJIGRpZG4ndCBrbm93IEkgY2FuIHRydXN0IHRoYXQgYWxsIGtleW1hcHMgaGF2 ZSB0aGUNCnZhbHVlIHNsb3Qgc2V0LiBJIHRob3VnaHQsIHRoYXQgc29tZSBoYWQgZnVuY3Rpb24g c2xvdCBzZXQsIGFuZCBvdGhlcg0KdmFsdWUgc2xvdCwgYW5kIHNvbWUgYm90aC4NCg0KSSB3YXMg d29uZGVyaW5nIHdoeSBpdCB3YXMgZG9uZSB0aGlzIHdheSwgdGhhdCBrZXltYXAgaXMgc3RvcmVk IGludG8gdGhlDQpmdW5jdGlvbiBzbG90LCBidXQgSSBhc3N1bWVkIGl0IHdhcyBzb21lIG9wdGlt aXphdGlvbg0Kc29tZXdoZXJlLiBTZWNvbmRseSwgSSB3YXMgYWxzbyBpbiBkb3VidCBzaW5jZSBr ZXltYW1wIGRvZXMgdGhlIHNwZWNpYWwNCnRoaW5nIGFuZCBhY2NlcHRzIHRoZSBzeW1ib2wgZm9y IGZib3VuZGVkIG9uZXMuIEkgdGhvdWdodCB0aGVyZSBtdXN0IGJlDQpzb21lIHJlYXNvbiB3aHkg aXQgd2FzIGRvbmUgdGhhdCB3YXksIGFuZCB3b25kZXJlZCB3aHkgZGVyZWZlcmVuY2luZw0Kc3lt Ym9sIHdhcyBkb25lIG9ubHkgZm9yIGZib3VuZGVkIHN5bWJvbHMuIEkgYXNzdW1lZCB0aGF0IHNv bWUga2V5bWFwcw0KZG9uJ3QgaGF2ZSB2YWx1ZSBzbG90IHNldC4NCg0KPiB5b3UncmUgbG9va2lu ZyBmb3Iga2V5bWFwcyBpbnN0ZWFkIG9mIHN0cmluZ3MuICBZb3Ugd291bGRuJ3QgZG8NCj4gYChz dHJpbmdwIGspYCBidXQgYChzdHJpbmdwIChzeW1ib2wtdmFsdWUgaykpYCwgcmlnaHQ/DQoNCk9y IHdpdGggYnVmZmVycCwgb3Igc29tZSBvdGhlciAidHlwZXAiLiBNb3N0IChhbGw/KSB3b3JrIG9u IG9iamVjdHMgYW5kDQpub3Qgb24gc3ltYm9scy4gSSBhbSBhd2FyZSBvZiB0aGF0IG9uZS4gQnV0 IGFzIGV4cGxhaW5lZCBhYm92ZSwgSSB3YXMNCm5vdCBzdXJlIHdoYXQgcmVhbGx5IHRvIGV4cGVj dCBpbiB0aGUgY2FzZSBvZiBrZXltYXBwLg0KDQo+IEl0IGlzIHJ1ZSB0aGF0IGtleW1hcHMgKGNv bnRyYXJ5IHRvIHN0cmluZ3MpIGNhbiAqYWxzbyogYmUgcmVwcmVzZW50ZWQNCj4gYnkgc3ltYm9s cyAod2hlcmUgaXQgd29ya3MgbXVjaCBsaWtlIGl0IGRvZXMgZm9yIGZ1bmN0aW9ucykuICBJIGRv bid0DQo+IGtub3cgd2h5IHRoaXMgd2FzIGRvbmUsIGJ1dCBJIGNvbnNpZGVyIGFzIGFuIGhpc3Rv cmljYWwgYWNjaWRlbnQgYW5kDQo+IGRvbid0IHJlY29tbWVuZCBtYWtpbmcgdXNlIG9mIHRoYXQg ImZlYXR1cmUiLg0KDQpObywgbm8sIEkgYW0gbm90IHRyeWluZyB0byBtYWtlIHVzZSBvZiBpdCBh bGw7IG9uIHRoZSBjb250cmFyeSA6LSkuIEkNCmp1c3Qgd2FudGVkIHRvIGZpbmQgKmFsbCogcHJl Zml4IGtleXMgaW4gYWxsIG1hcHMsIGFuZCB3YXMgYSBiaXQNCmNvbmZ1c2VkIHdoeSBzb21lIG1h cHMgd2hlcmUgbm90IGZvdW5kIHdoZW4gSSBrbmV3IHRoZXkgc2hvdWxkIGJlLg0KDQo+IEl0J3Mg bW9zdGx5IHVzZWQgaW4gdmVyeSBvbGQgY29kZSB0aGF0IHVzZXMgdGhlIHdlaXJkDQo+IGBkZWZp bmUtcHJlZml4LWNvbW1hbmRgIGZ1bmN0aW9uLCBzdWNoIGFzIHRoZSBjb2RlIHRoYXQgc2V0cyB1 cCBzb21lIG9mDQo+IHRoZSAiY29yZSIga2V5bWFwcyBsaWtlIGBjdGwteC01LXByZWZpeGAgYEVT Qy1wcmVmaXhgIGBjdGwteC00LXByZWZpeGAsDQo+IGBDb250cm9sLVgtcHJlZml4YC4NCg0KSSB3 YXMgYWN0dWFsbHkgd29uZGVyaW5nIHdoeSB0aGlzIHdhcyBkb25lLCBpZiBpdCBpcyBqdXN0IGFu DQpvcHRpbWl6YXRpb24gb3IgaWYgdGhlcmUgaXMgc29tZSBvdGhlciByZWFzb24/IEkgYW0ganVz dCBjdXJpb3VzLCBJDQpkb24ndCByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaWRlYSBiZWhpbmQuIEl0 IHdvdWxkIGJlIGludGVyZXN0aW5nIHRvDQpsZWFybiwgaWYgc29tZWJvZHkga25vd3MgYW5kIGlz IHdpbGxpbmcgdG8gZXhwbGFpbiwgc2luY2UgaXQgaXMgYXR5cGljYWwNCnRvIHN0b3JlIHZhbHVl IGRhdGEgaW4gZnVuY3Rpb24gc2xvdC4NCg0KPiA+IEFzIGEgc3VnZ2VzdGlvbiwgdGhlIGF0dGFj aGVkIHBhdGNoIGRlcmVmZXJlbmNlcyBzeW1ib2wgdmFsdWUgc2xvdHMNCj4gPiBhcyB3ZWxsLg0K Pg0KPiBJdCdzIHNpbXBsZXIgdG8gZml4ICp5b3VyKiBjb2RlIHJhdGhlciB0aGFuIHRoZSByZXN0 IG9mIHRoZSB3b3JsZCdzLiAg8J+Zgg0KDQpZZWFoLCBJIHVuZGVyc3RhbmQgdGhhdCA6KS4NCg0K UGFydGlhbGx5LCBhcyBzYWlkIGFib3ZlLCBJIGRpZG4ndCBrbm93IEkgY2FuIHJlbHkgdGhhdCAq YWxsKiBrZXltYXBzDQpoYXZlIHZhbHVlIHNsb3Qgc2V0LCBhbmQgdGJoIEkgZGlkbid0IGtub3cg SSBjYW4gc2tpcHAgdGhlIGJvdW5kcA0KY2hlY2suIFRoZSBjb2RlIEkgdXNlZCBhY3R1YWxseSBs b29rZWQgbGlrZSB0aGlzOg0KDQooZGVmdW4gY29sbGVjdC1rZXltYXBzICgpDQogICJDb2xsZWN0 IGFsbCBrZXltYXBzIGluIHRoZSBzeXN0ZW0iDQogIChsZXQgKGtleW1hcHMpDQogICAgKG1hcGF0 b21zDQogICAgIChsYW1iZGEgKHMpDQogICAgICAgKGlmIChrZXltYXBwIHMpDQogICAgICAgICAg IChwdXNoIHMga2V5bWFwcykNCiAgICAgICAgIChhbmQgKGJvdW5kcCBzKSAoa2V5bWFwcCAoc3lt Ym9sLXZhbHVlIHMpKQ0KICAgICAgICAgICAgICAocHVzaCBzIGtleW1hcHMpKSkpKQ0KICAgIGtl eW1hcHMpKQ0KDQp3aGljaCBpcyBxdWl0ZSBiYWQgYW5kIGlubmVmZmljaWVudC4gSSBzZWUgbm93 IEkgY2FuIGRvOg0KDQooZGVmdW4geGN2LWNvbGxlY3Qta2V5bWFwcyAoKQ0KICAoY2wtbG9vcCBm b3IgcyBiZWluZyB0aGUgc3ltYm9sIHdoZW4gKGtleW1hcHAgKHN5bWJvbC12YWx1ZSBzKSkgY29s bGVjdCBzKSkNCg0KV2hlbiBJIGNoZWNrIHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdCBsaXN0LCBp dCBzZWVtcyB0byBmaW5kIGFsbCBtYXBzLg0KDQo+ID4gSWYgaXQgaXMgbm90IGEgd3JvbmcgdGhp bmcgdG8gZG8gZm9yIHNvbWUgcmVhc29uIEkgYW0gbm90IGF3YXJlDQo+ID4gb2YsIEkgd291bGQg bGlrZSB0byBzdWdnZXN0IGl0IGFzIGEgImZpeCIgb3IgYSAiZmVhdHVyZSByZXF1ZXN0IiwNCj4g PiB3aGljaGV2ZXIgaXMgYmVzdCBkZXNjcmliaW5nIHRoZSBpc3N1ZS4NCj4NCj4gSXQgd291bGQg YnJlYWsgZXhpc3RpbmcgdXNlcyB3aGVuIHRoZSBzeW1ib2wgaGFzIGJvdGgNCj4gYSBgc3ltYm9s LWZ1bmN0aW9uYCB2YWx1ZSBhbmQgYSBgc3ltYm9sLXZhbHVlYCB2YWx1ZS4gIFdlIGNvdWxkIGNv bnNpZGVyDQoNCkkgc2F3IHRoZSBvdGhlciBmdW5jdGlvbnMgdXNpbmcgZ2V0X2tleW1hcCwgc28g SSB3YXNuJ3Qgc3VyZSBpZiB0aGV5DQp3b3VsZCBjb21wbGFpbiBvciBub3QuIEkgaGF2ZSBydW4g RW1hY3MgdG9kYXksIHRoZSBlbnRpcmUgZGF5LCB3aXRoIHRoYXQNCnBhdGNoLCBJIGhhdmVuJ3Qg bm90aWNlZCBhbnl0aGluZyB3ZWlyZC4gQnV0IEkgYW0gbm90IGFuIGFkdmFuY2VkDQp1c2VyLiBJ IHByb2JhYmx5IGRvbid0IGhpdCBhbnkgZnVuY3Rpb25zIHRoYXQgbWlnaHQgdG91Y2ggdGhhdA0K ZnVuY3Rpb25hbGl0eSBhbmQgSSBkb24ndCBoYXZlIGFueSB0ZXN0cyBuZWl0aGVyLg0KDQpOb3Qg cHVzaGluZyBmb3IgaXQsIG1vcmUgYXMgYSBjdXJpb3NhOiB3aGF0IGRvIHlvdSB0aGluayBhYm91 dCBub3QNCnRvdWNoaW5nIGdldF9rZXltYXAgYXQgYWxsLCBhbmQgcmVmYWN0b3Jpbmcgb3V0IGtl eW1tYXBwIGxpa2UgdGhpczoNCg0KREVGVU4gKCJrZXltYXBwIiwgRmtleW1hcHAsIFNrZXltYXBw LCAxLCAxLCAwLA0KICAoTGlzcF9PYmplY3Qgb2JqZWN0KQ0Kew0KICBpZiAoTklMUCAob2JqZWN0 KSkNCiAgICByZXR1cm4gUW5pbDsNCiAgaWYgKENPTlNQIChvYmplY3QpICYmIEVRIChYQ0FSIChv YmplY3QpLCBRa2V5bWFwKSkNCiAgICByZXR1cm4gb2JqZWN0Ow0KDQogIGlmIChTWU1CT0xQIChv YmplY3QpKQ0KICAgIHsNCiAgICAgIExpc3BfT2JqZWN0IHRlbSA9IGluZGlyZWN0X2Z1bmN0aW9u IChvYmplY3QpOw0KICAgICAgaWYgKENPTlNQICh0ZW0pICYmIEVRIChYQ0FSICh0ZW0pLCBRa2V5 bWFwKSkNCuKAguKAguKAguKAguKAguKAgnJldHVybiB0ZW07DQoNCiAgICAgIHRlbSA9IGZpbmRf c3ltYm9sX3ZhbHVlIChvYmplY3QpOw0KICAgICAgaWYgKENPTlNQICh0ZW0pICYmIEVRIChYQ0FS ICh0ZW0pLCBRa2V5bWFwKSkNCuKAguKAguKAguKAguKAguKAgnJldHVybiB0ZW07DQogICAgfQ0K DQogIHJldHVybiBRbmlsOw0KfQ0KDQpJIGRvbid0IHNlZSBhbnkgdXNlIG9mIEZrZXltYXBwIGZy b20gQyBjb2RlLCBidXQgaXQgaXMgdXNlZCBxdWl0ZSBhIGxvdA0KaW4gTGlzcCBjb2RlLiBJIGRv IHJ1biB0aGF0IGtleW1hcHAgdmVyc2lvbiBub3cgaW4gbXkgRW1hY3Mgd2hlbiBJIHdyaXRlDQp0 aGlzLCBidXQgdGhhdCBkb2VzIG5vdCBtZWFuIGl0IGlzIGFsd2F5cyByaWdodC4NCg0KPiBhZGRp bmcgaXQgYXMgYSBmYWxsYmFjayAoaS5lLiB1c2UgdGhlIGBzeW1ib2wtdmFsdWVgIHNsb3Qgb25s eSAqYWZ0ZXIqDQo+IGNoZWNraW5nIHRoZSBgc3ltYm9sLWZ1bmN0aW9uYCBzbG90KSwgYnV0IHRo YXQgd291bGQgYmUNCj4gYSBzb21ld2hhdCB3ZWlyZC91bnJlbGlhYmxlIGZlYXR1cmUsIHNvIHdl J2QgbmVlZCBhIGNvbXBlbGxpbmcgdXNlLWNhc2UNCj4gKHRoZSBvbmx5IGFkdmFudGFnZSBJIGNh biBzZWUgb2YgdXNpbmcgYHN5bWJvbC12YWx1ZWAgb3Zlcg0KPiBgc3ltYm9sLWZ1bmN0aW9uYCBp cyB0aGF0IGl0IGNhbiBiZSBtYWRlIGJ1ZmZlci1sb2NhbCwgc28geW91IGNvdWxkDQo+IGUuZy4g bWFrZSBhIGtleW1hcCB3aG9zZSBwYXJlbnQgY2hhbmdlcyBkeW5hbWljYWxseSBkZXBlbmRpbmcg b24gdGhlDQo+IGN1cnJlbnQtYnVmZmVyLCBidXQgSSBkb24ndCBrbm93IHdoYXQgd291bGQgYmUg dGhlIGNvcnJlc3BvbmRpbmcNCj4gImNvbXBlbGxpbmcgdXNlLWNhc2UiKS4NCg0KSSBhbSBub3Qg c3VyZSBJIGhhdmUgYSBjb21wZWxsaW5nIHJlYXNvbi4gSXQgd291bGQgYmUganVzdCBzbGlnaHRs eSBtb3JlDQplZmZpY2llbnQgYW5kIHNsaWdodGx5IG1vcmUgZWxlZ2FudCB0byBqdXN0IGNoZWNr IGZvciB0aGUga2V5bW1hcHAgYW5kDQpub3QgaGF2ZSB0byB0YWtlIHN5bWJvbC12YWx1ZSwgYnV0 IG15IGJpZ2dlc3QgbW90aXZhdGlvbiBmb3IgdGhlDQpzdWdnZXN0aW9uIHdhcyB0aGUgY29uZnVz aW9uIHdoZW4gSSBkaXNjb3ZlcmVkIHdoYXQgd2FzIGhhcGVuaW5nLiBJdA0Kd2Fzbid0IGNsZWFy IHdoeSBvbmUgc3ltYm9sIHdvcmtlZCBidXQgb3RoZXIgZGlkbid0LiBOb3csIHdoZW4gSSBrbm93 DQp0aGF0IHRoZSB2YWx1ZSBzbG90IGNhbiBhbHdheXMgYmUgdXNlZCwgaXQgaXMgbm90IGFuIGlz c3VlLiAgSSBhbQ0KYWZmcmFpZCB0aGF0IGlzIHRoZSBiZXN0IEkgY2FuIGNvbWUgdXAgd2l0aC4g QnVmZmVyIGxvY2FsIGtleW1hcHMgY2FuIGJlDQphY2hpZXZlZCB3aXRoIGEgYnVmZmVyLWxvY2Fs IHZhcmlhYmxlLCB3aG9zZSB2YWx1ZSBpcyBzd2l0Y2hlZCBiZXR3ZWVuDQp0d28gZGlmZmVyZW50 IGtleW1hcHMgdG9vLCBidXQgaXQgd291bGQgYmUgbW9yZSBlbGVnYW50IGlmIHRoZXkgY291bGQg YmUNCmJ1ZmZlciBsb2NhbC4gSSBkb24ndCBzZWUgbXlzZWxmIGEgdXNlLWNhc2UgZm9yIG5laXRo ZXIsIGJ1dCB3aGF0IGRvIEkNCmtub3c7IHNvbWVvbmUgZWxzZSBtaWdodCBoYXZlIG9uZS4NCg0K VGhhbmtzIGZvciBsb29raW5nIGF0IGl0IGFuZCBmb3IgdGhlIGRldGFpbGVkIGFuc3dlci4NCg0K YmVzdCByZWdhcmRzDQovYQ0K --_000_DU2PR02MB10109500793B66801151DCABD967DADU2PR02MB10109eu_ Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: base64 PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0i dGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgc3R5bGU9 ImRpc3BsYXk6bm9uZTsiPiBQIHttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO30gPC9zdHls ZT4NCjwvaGVhZD4NCjxib2R5IGRpcj0ibHRyIj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29m IiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9u dC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7ICZndDsgYmVjYXVzZSBv bmUgaXMgZmJvdW5kIGFuZCB0aGUgb3RoZXIgaXMgbm90LiBUaGUgYmFja2dyb3VuZCBmb3IgdGhp cyBpczwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWls eTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9y OiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsgJmd0OyB0aGF0IEkgd2FudCB0byBjb2xsZWN0IGFsbCBs b2FkZWQga2V5bWFwcyBpbiB0aGUgc3lzdGVtOjwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRv UHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlm OyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsgJmd0OzwvZGl2 Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJy aSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwg MCwgMCk7Ij4NCiZndDsgJmd0OyAoZGVmdW4gY29sbGVjdC1rZXltYXBzICgpPC9kaXY+DQo8ZGl2 IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2 ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsi Pg0KJmd0OyAmZ3Q7ICZuYnNwOyAoY2wtbG9vcCBmb3IgayBiZWluZyB0aGUgc3ltYm9sIHdoZW4g KGtleW1hcHAgaykgY29sbGVjdCBrKSk8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29m IiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9u dC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7PC9kaXY+DQo8ZGl2IGNs YXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRp Y2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0K Jmd0OyBUaGUgZml4IGhlcmUgaXMgdG8gYWx3YXlzIGNoZWNrIHRoZSBgKHN5bWJvbC12YWx1ZSBr KWAgbmV2ZXIgYGtgLjwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJm b250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEy cHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsgSU9XIHRoaW5rIG9mIGl0ICZxdW90O0kn bSBsb29raW5nIGZvciBhbGwgdGhlIGxvYWRlZCBzdHJpbmdzJnF1b3Q7IGV4Y2VwdCB0aGF0PC9k aXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxp YnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigw LCAwLCAwKTsiPg0KJmd0OyB5b3UncmUgbG9va2luZyBmb3Iga2V5bWFwcyBpbnN0ZWFkIG9mIHN0 cmluZ3MuPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFt aWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29s b3I6IHJnYigwLCAwLCAwKTsiPg0KPGJyPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Q cm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7 IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KSSByZWFsaXplZCB0aGF0 IGFuZCB3YXMgZG9pbmcgc29tZXRoaW5nIHNpbWlsYXIsIGFkbWl0dGVkbHkgbGVzczwvZGl2Pg0K PGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwg SGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwg MCk7Ij4NCmVmZmVjaWVudGx5IGJlY2F1c2UgSSBkaWRuJ3Qga25vdyBJIGNhbiB0cnVzdCB0aGF0 IGFsbCBrZXltYXBzIGhhdmUgdGhlPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIg c3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQt c2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KdmFsdWUgc2xvdCBzZXQuIEkgdGhv dWdodCwgdGhhdCBzb21lIGhhZCBmdW5jdGlvbiBzbG90IHNldCwgYW5kIG90aGVyPC9kaXY+DQo8 ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBI ZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAw KTsiPg0KdmFsdWUgc2xvdCwgYW5kIHNvbWUgYm90aC48L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1l bnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1z ZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQo8YnI+DQo8L2Rp dj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGli cmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAs IDAsIDApOyI+DQpJIHdhcyB3b25kZXJpbmcgd2h5IGl0IHdhcyBkb25lIHRoaXMgd2F5LCB0aGF0 IGtleW1hcCBpcyBzdG9yZWQgaW50byB0aGU8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1By b29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsg Zm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQpmdW5jdGlvbiBzbG90LCBi dXQgSSBhc3N1bWVkIGl0IHdhcyBzb21lIG9wdGltaXphdGlvbjwvZGl2Pg0KPGRpdiBjbGFzcz0i ZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBz YW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCnNvbWV3 aGVyZS4gU2Vjb25kbHksIEkgd2FzIGFsc28gaW4gZG91YnQgc2luY2Uga2V5bWFtcCBkb2VzIHRo ZSBzcGVjaWFsPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQt ZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsg Y29sb3I6IHJnYigwLCAwLCAwKTsiPg0KdGhpbmcgYW5kIGFjY2VwdHMgdGhlIHN5bWJvbCBmb3Ig ZmJvdW5kZWQgb25lcy4gSSB0aG91Z2h0IHRoZXJlIG11c3QgYmU8L2Rpdj4NCjxkaXYgY2xhc3M9 ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwg c2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQpzb21l IHJlYXNvbiB3aHkgaXQgd2FzIGRvbmUgdGhhdCB3YXksIGFuZCB3b25kZXJlZCB3aHkgZGVyZWZl cmVuY2luZzwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZh bWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNv bG9yOiByZ2IoMCwgMCwgMCk7Ij4NCnN5bWJvbCB3YXMgZG9uZSBvbmx5IGZvciBmYm91bmRlZCBz eW1ib2xzLiBJIGFzc3VtZWQgdGhhdCBzb21lIGtleW1hcHM8L2Rpdj4NCjxkaXYgY2xhc3M9ImVs ZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fu cy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQpkb24ndCBo YXZlIHZhbHVlIHNsb3Qgc2V0LjwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0 eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNp emU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCjxicj4NCjwvZGl2Pg0KPGRpdiBjbGFz cz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNh LCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZn dDsgeW91J3JlIGxvb2tpbmcgZm9yIGtleW1hcHMgaW5zdGVhZCBvZiBzdHJpbmdzLiAmbmJzcDtZ b3Ugd291bGRuJ3QgZG88L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0i Zm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAx MnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7IGAoc3RyaW5ncCBrKWAgYnV0IGAoc3Ry aW5ncCAoc3ltYm9sLXZhbHVlIGspKWAsIHJpZ2h0PzwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVu dFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNl cmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCjxicj4NCjwvZGl2 Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJy aSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwg MCwgMCk7Ij4NCk9yIHdpdGggYnVmZmVycCwgb3Igc29tZSBvdGhlciAmcXVvdDt0eXBlcCZxdW90 Oy4gTW9zdCAoYWxsPykgd29yayBvbiBvYmplY3RzIGFuZDwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxl bWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5z LXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCm5vdCBvbiBz eW1ib2xzLiBJIGFtIGF3YXJlIG9mIHRoYXQgb25lLiBCdXQgYXMgZXhwbGFpbmVkIGFib3ZlLCBJ IHdhczwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWls eTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9y OiByZ2IoMCwgMCwgMCk7Ij4NCm5vdCBzdXJlIHdoYXQgcmVhbGx5IHRvIGV4cGVjdCBpbiB0aGUg Y2FzZSBvZiBrZXltYXBwLjwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxl PSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6 IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCjxicj4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0i ZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBz YW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsg SXQgaXMgcnVlIHRoYXQga2V5bWFwcyAoY29udHJhcnkgdG8gc3RyaW5ncykgY2FuICphbHNvKiBi ZSByZXByZXNlbnRlZDwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJm b250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEy cHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsgYnkgc3ltYm9scyAod2hlcmUgaXQgd29y a3MgbXVjaCBsaWtlIGl0IGRvZXMgZm9yIGZ1bmN0aW9ucykuICZuYnNwO0kgZG9uJ3Q8L2Rpdj4N CjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmks IEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAs IDApOyI+DQomZ3Q7IGtub3cgd2h5IHRoaXMgd2FzIGRvbmUsIGJ1dCBJIGNvbnNpZGVyIGFzIGFu IGhpc3RvcmljYWwgYWNjaWRlbnQgYW5kPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9v ZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZv bnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KJmd0OyBkb24ndCByZWNvbW1l bmQgbWFraW5nIHVzZSBvZiB0aGF0ICZxdW90O2ZlYXR1cmUmcXVvdDsuPC9kaXY+DQo8ZGl2IGNs YXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRp Y2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0K PGJyPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFt aWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29s b3I6IHJnYigwLCAwLCAwKTsiPg0KTm8sIG5vLCBJIGFtIG5vdCB0cnlpbmcgdG8gbWFrZSB1c2Ug b2YgaXQgYWxsOyBvbiB0aGUgY29udHJhcnkgOi0pLiBJPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVt ZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMt c2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KanVzdCB3YW50 ZWQgdG8gZmluZCAqYWxsKiBwcmVmaXgga2V5cyBpbiBhbGwgbWFwcywgYW5kIHdhcyBhIGJpdDwv ZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2Fs aWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2Io MCwgMCwgMCk7Ij4NCmNvbmZ1c2VkIHdoeSBzb21lIG1hcHMgd2hlcmUgbm90IGZvdW5kIHdoZW4g SSBrbmV3IHRoZXkgc2hvdWxkIGJlLjwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2Yi IHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250 LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCjxicj4NCjwvZGl2Pg0KPGRpdiBj bGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0 aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4N CiZndDsgSXQncyBtb3N0bHkgdXNlZCBpbiB2ZXJ5IG9sZCBjb2RlIHRoYXQgdXNlcyB0aGUgd2Vp cmQ8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6 IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjog cmdiKDAsIDAsIDApOyI+DQomZ3Q7IGBkZWZpbmUtcHJlZml4LWNvbW1hbmRgIGZ1bmN0aW9uLCBz dWNoIGFzIHRoZSBjb2RlIHRoYXQgc2V0cyB1cCBzb21lIG9mPC9kaXY+DQo8ZGl2IGNsYXNzPSJl bGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNh bnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KJmd0OyB0 aGUgJnF1b3Q7Y29yZSZxdW90OyBrZXltYXBzIGxpa2UgYGN0bC14LTUtcHJlZml4YCBgRVNDLXBy ZWZpeGAgYGN0bC14LTQtcHJlZml4YCw8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29m IiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9u dC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7IGBDb250cm9sLVgtcHJl Zml4YC48L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1p bHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xv cjogcmdiKDAsIDAsIDApOyI+DQo8YnI+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1By b29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsg Zm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQpJIHdhcyBhY3R1YWxseSB3 b25kZXJpbmcgd2h5IHRoaXMgd2FzIGRvbmUsIGlmIGl0IGlzIGp1c3QgYW48L2Rpdj4NCjxkaXYg Y2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZl dGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+ DQpvcHRpbWl6YXRpb24gb3IgaWYgdGhlcmUgaXMgc29tZSBvdGhlciByZWFzb24/IEkgYW0ganVz dCBjdXJpb3VzLCBJPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZv bnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJw dDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KZG9uJ3QgcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGlk ZWEgYmVoaW5kLiBJdCB3b3VsZCBiZSBpbnRlcmVzdGluZyB0bzwvZGl2Pg0KPGRpdiBjbGFzcz0i ZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBz YW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCmxlYXJu LCBpZiBzb21lYm9keSBrbm93cyBhbmQgaXMgd2lsbGluZyB0byBleHBsYWluLCBzaW5jZSBpdCBp cyBhdHlwaWNhbDwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250 LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7 IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCnRvIHN0b3JlIHZhbHVlIGRhdGEgaW4gZnVuY3Rpb24g c2xvdC48L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1p bHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xv cjogcmdiKDAsIDAsIDApOyI+DQo8YnI+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1By b29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsg Zm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7ICZndDsgQXMgYSBz dWdnZXN0aW9uLCB0aGUgYXR0YWNoZWQgcGF0Y2ggZGVyZWZlcmVuY2VzIHN5bWJvbCB2YWx1ZSBz bG90czwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWls eTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9y OiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsgJmd0OyBhcyB3ZWxsLjwvZGl2Pg0KPGRpdiBjbGFzcz0i ZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBz YW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZndDs8 L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENh bGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdi KDAsIDAsIDApOyI+DQomZ3Q7IEl0J3Mgc2ltcGxlciB0byBmaXggKnlvdXIqIGNvZGUgcmF0aGVy IHRoYW4gdGhlIHJlc3Qgb2YgdGhlIHdvcmxkJ3MuICZuYnNwO/CfmYI8L2Rpdj4NCjxkaXYgY2xh c3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGlj YSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQo8 YnI+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1p bHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xv cjogcmdiKDAsIDAsIDApOyI+DQpZZWFoLCBJIHVuZGVyc3RhbmQgdGhhdCA6KS48L2Rpdj4NCjxk aXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhl bHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDAp OyI+DQo8YnI+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9u dC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0 OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQpQYXJ0aWFsbHksIGFzIHNhaWQgYWJvdmUsIEkgZGlk bid0IGtub3cgSSBjYW4gcmVseSB0aGF0ICphbGwqIGtleW1hcHM8L2Rpdj4NCjxkaXYgY2xhc3M9 ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwg c2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQpoYXZl IHZhbHVlIHNsb3Qgc2V0LCBhbmQgdGJoIEkgZGlkbid0IGtub3cgSSBjYW4gc2tpcHAgdGhlIGJv dW5kcDwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWls eTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9y OiByZ2IoMCwgMCwgMCk7Ij4NCmNoZWNrLiBUaGUgY29kZSBJIHVzZWQgYWN0dWFsbHkgbG9va2Vk IGxpa2UgdGhpczo8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9u dC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0 OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQo8YnI+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1l bnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1z ZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQooZGVmdW4gY29s bGVjdC1rZXltYXBzICgpPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9 ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTog MTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KJm5ic3A7ICZxdW90O0NvbGxlY3QgYWxsIGtl eW1hcHMgaW4gdGhlIHN5c3RlbSZxdW90OzwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJv b2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBm b250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZuYnNwOyAobGV0IChrZXlt YXBzKTwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWls eTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9y OiByZ2IoMCwgMCwgMCk7Ij4NCiZuYnNwOyAmbmJzcDsgKG1hcGF0b21zPC9kaXY+DQo8ZGl2IGNs YXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRp Y2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0K Jm5ic3A7ICZuYnNwOyAmbmJzcDsobGFtYmRhIChzKTwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVu dFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNl cmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyhpZiAoa2V5bWFwcCBzKTwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVu dFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNl cmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7KHB1c2ggcyBrZXltYXBzKTwvZGl2Pg0KPGRp diBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVs dmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7 Ij4NCiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsoYW5kIChib3VuZHAgcykgKGtl eW1hcHAgKHN5bWJvbC12YWx1ZSBzKSk8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29m IiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9u dC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQombmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgKHB1c2ggcyBrZXltYXBzKSkpKSk8L2Rpdj4N CjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmks IEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAs IDApOyI+DQombmJzcDsgJm5ic3A7IGtleW1hcHMpKTwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVu dFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNl cmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCjxicj4NCjwvZGl2 Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJy aSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwg MCwgMCk7Ij4NCndoaWNoIGlzIHF1aXRlIGJhZCBhbmQgaW5uZWZmaWNpZW50LiBJIHNlZSBub3cg SSBjYW4gZG86PC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQt ZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsg Y29sb3I6IHJnYigwLCAwLCAwKTsiPg0KPGJyPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50 VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2Vy aWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KKGRlZnVuIHhjdi1j b2xsZWN0LWtleW1hcHMgKCk8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHls ZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXpl OiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQombmJzcDsgKGNsLWxvb3AgZm9yIHMgYmVp bmcgdGhlIHN5bWJvbCB3aGVuIChrZXltYXBwIChzeW1ib2wtdmFsdWUgcykpIGNvbGxlY3Qgcykp PC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBD YWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJn YigwLCAwLCAwKTsiPg0KPGJyPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIg c3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQt c2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KV2hlbiBJIGNoZWNrIHRoZSBsZW5n dGggb2YgdGhlIHJlc3VsdCBsaXN0LCBpdCBzZWVtcyB0byBmaW5kIGFsbCBtYXBzLjwvZGl2Pg0K PGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwg SGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwg MCk7Ij4NCjxicj4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJm b250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEy cHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsgJmd0OyBJZiBpdCBpcyBub3QgYSB3cm9u ZyB0aGluZyB0byBkbyBmb3Igc29tZSByZWFzb24gSSBhbSBub3QgYXdhcmU8L2Rpdj4NCjxkaXYg Y2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZl dGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+ DQomZ3Q7ICZndDsgb2YsIEkgd291bGQgbGlrZSB0byBzdWdnZXN0IGl0IGFzIGEgJnF1b3Q7Zml4 JnF1b3Q7IG9yIGEgJnF1b3Q7ZmVhdHVyZSByZXF1ZXN0JnF1b3Q7LDwvZGl2Pg0KPGRpdiBjbGFz cz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNh LCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZn dDsgJmd0OyB3aGljaGV2ZXIgaXMgYmVzdCBkZXNjcmliaW5nIHRoZSBpc3N1ZS48L2Rpdj4NCjxk aXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhl bHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDAp OyI+DQomZ3Q7PC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQt ZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsg Y29sb3I6IHJnYigwLCAwLCAwKTsiPg0KJmd0OyBJdCB3b3VsZCBicmVhayBleGlzdGluZyB1c2Vz IHdoZW4gdGhlIHN5bWJvbCBoYXMgYm90aDwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJv b2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBm b250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsgYSBgc3ltYm9sLWZ1 bmN0aW9uYCB2YWx1ZSBhbmQgYSBgc3ltYm9sLXZhbHVlYCB2YWx1ZS4gJm5ic3A7V2UgY291bGQg Y29uc2lkZXI8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1m YW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBj b2xvcjogcmdiKDAsIDAsIDApOyI+DQo8YnI+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRU b1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJp ZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQpJIHNhdyB0aGUgb3Ro ZXIgZnVuY3Rpb25zIHVzaW5nIGdldF9rZXltYXAsIHNvIEkgd2Fzbid0IHN1cmUgaWYgdGhleTwv ZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2Fs aWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2Io MCwgMCwgMCk7Ij4NCndvdWxkIGNvbXBsYWluIG9yIG5vdC4gSSBoYXZlIHJ1biBFbWFjcyB0b2Rh eSwgdGhlIGVudGlyZSBkYXksIHdpdGggdGhhdDwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRv UHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlm OyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCnBhdGNoLCBJIGhhdmVu J3Qgbm90aWNlZCBhbnl0aGluZyB3ZWlyZC4gQnV0IEkgYW0gbm90IGFuIGFkdmFuY2VkPC9kaXY+ DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJp LCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAw LCAwKTsiPg0KdXNlci4gSSBwcm9iYWJseSBkb24ndCBoaXQgYW55IGZ1bmN0aW9ucyB0aGF0IG1p Z2h0IHRvdWNoIHRoYXQ8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0i Zm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAx MnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQpmdW5jdGlvbmFsaXR5IGFuZCBJIGRvbid0IGhh dmUgYW55IHRlc3RzIG5laXRoZXIuPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIg c3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQt c2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KPGJyPg0KPC9kaXY+DQo8ZGl2IGNs YXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRp Y2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0K Tm90IHB1c2hpbmcgZm9yIGl0LCBtb3JlIGFzIGEgY3VyaW9zYTogd2hhdCBkbyB5b3UgdGhpbmsg YWJvdXQgbm90PC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQt ZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsg Y29sb3I6IHJnYigwLCAwLCAwKTsiPg0KdG91Y2hpbmcgZ2V0X2tleW1hcCBhdCBhbGwsIGFuZCBy ZWZhY3RvcmluZyBvdXQga2V5bW1hcHAgbGlrZSB0aGlzOjwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxl bWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5z LXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCjxicj4NCjwv ZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2Fs aWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2Io MCwgMCwgMCk7Ij4NCkRFRlVOICgmcXVvdDtrZXltYXBwJnF1b3Q7LCBGa2V5bWFwcCwgU2tleW1h cHAsIDEsIDEsIDAsPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZv bnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJw dDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KJm5ic3A7IChMaXNwX09iamVjdCBvYmplY3QpPC9k aXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxp YnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigw LCAwLCAwKTsiPg0KezwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJm b250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEy cHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZuYnNwOyBpZiAoTklMUCAob2JqZWN0KSk8L2Rp dj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGli cmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAs IDAsIDApOyI+DQombmJzcDsgJm5ic3A7IHJldHVybiBRbmlsOzwvZGl2Pg0KPGRpdiBjbGFzcz0i ZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBz YW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZuYnNw OyBpZiAoQ09OU1AgKG9iamVjdCkgJmFtcDsmYW1wOyBFUSAoWENBUiAob2JqZWN0KSwgUWtleW1h cCkpPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5 OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6 IHJnYigwLCAwLCAwKTsiPg0KJm5ic3A7ICZuYnNwOyByZXR1cm4gb2JqZWN0OzwvZGl2Pg0KPGRp diBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVs dmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7 Ij4NCjxicj4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250 LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7 IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZuYnNwOyBpZiAoU1lNQk9MUCAob2JqZWN0KSk8L2Rp dj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGli cmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAs IDAsIDApOyI+DQombmJzcDsgJm5ic3A7IHs8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1By b29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsg Zm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQombmJzcDsgJm5ic3A7ICZu YnNwOyBMaXNwX09iamVjdCB0ZW0gPSBpbmRpcmVjdF9mdW5jdGlvbiAob2JqZWN0KTs8L2Rpdj4N CjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmks IEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAs IDApOyI+DQombmJzcDsgJm5ic3A7ICZuYnNwOyBpZiAoQ09OU1AgKHRlbSkgJmFtcDsmYW1wOyBF USAoWENBUiAodGVtKSwgUWtleW1hcCkpPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9v ZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZv bnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0K4oCC4oCC4oCC4oCC4oCC4oCC cmV0dXJuIHRlbTs8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9u dC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0 OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQombmJzcDs8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1l bnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1z ZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQombmJzcDsgJm5i c3A7ICZuYnNwOyB0ZW0gPSBmaW5kX3N5bWJvbF92YWx1ZSAob2JqZWN0KTs8L2Rpdj4NCjxkaXYg Y2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZl dGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+ DQombmJzcDsgJm5ic3A7ICZuYnNwOyBpZiAoQ09OU1AgKHRlbSkgJmFtcDsmYW1wOyBFUSAoWENB UiAodGVtKSwgUWtleW1hcCkpPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5 bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6 ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0K4oCC4oCC4oCC4oCC4oCC4oCCcmV0dXJu IHRlbTs8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1p bHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xv cjogcmdiKDAsIDAsIDApOyI+DQombmJzcDsgJm5ic3A7IH08L2Rpdj4NCjxkaXYgY2xhc3M9ImVs ZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fu cy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQo8YnI+DQo8 L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENh bGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdi KDAsIDAsIDApOyI+DQombmJzcDsgcmV0dXJuIFFuaWw7PC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVt ZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMt c2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KfTwvZGl2Pg0K PGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwg SGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwg MCk7Ij4NCjxicj4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJm b250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEy cHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCkkgZG9uJ3Qgc2VlIGFueSB1c2Ugb2YgRmtleW1h cHAgZnJvbSBDIGNvZGUsIGJ1dCBpdCBpcyB1c2VkIHF1aXRlIGEgbG90PC9kaXY+DQo8ZGl2IGNs YXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRp Y2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0K aW4gTGlzcCBjb2RlLiBJIGRvIHJ1biB0aGF0IGtleW1hcHAgdmVyc2lvbiBub3cgaW4gbXkgRW1h Y3Mgd2hlbiBJIHdyaXRlPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9 ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTog MTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KdGhpcywgYnV0IHRoYXQgZG9lcyBub3QgbWVh biBpdCBpcyBhbHdheXMgcmlnaHQuPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIg c3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQt c2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KPGJyPg0KPC9kaXY+DQo8ZGl2IGNs YXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRp Y2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0K Jmd0OyBhZGRpbmcgaXQgYXMgYSBmYWxsYmFjayAoaS5lLiB1c2UgdGhlIGBzeW1ib2wtdmFsdWVg IHNsb3Qgb25seSAqYWZ0ZXIqPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5 bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6 ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KJmd0OyBjaGVja2luZyB0aGUgYHN5bWJv bC1mdW5jdGlvbmAgc2xvdCksIGJ1dCB0aGF0IHdvdWxkIGJlPC9kaXY+DQo8ZGl2IGNsYXNzPSJl bGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNh bnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KJmd0OyBh IHNvbWV3aGF0IHdlaXJkL3VucmVsaWFibGUgZmVhdHVyZSwgc28gd2UnZCBuZWVkIGEgY29tcGVs bGluZyB1c2UtY2FzZTwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJm b250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEy cHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsgKHRoZSBvbmx5IGFkdmFudGFnZSBJIGNh biBzZWUgb2YgdXNpbmcgYHN5bWJvbC12YWx1ZWAgb3ZlcjwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxl bWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5z LXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsgYHN5 bWJvbC1mdW5jdGlvbmAgaXMgdGhhdCBpdCBjYW4gYmUgbWFkZSBidWZmZXItbG9jYWwsIHNvIHlv dSBjb3VsZDwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZh bWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNv bG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsgZS5nLiBtYWtlIGEga2V5bWFwIHdob3NlIHBhcmVu dCBjaGFuZ2VzIGR5bmFtaWNhbGx5IGRlcGVuZGluZyBvbiB0aGU8L2Rpdj4NCjxkaXYgY2xhc3M9 ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwg c2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7 IGN1cnJlbnQtYnVmZmVyLCBidXQgSSBkb24ndCBrbm93IHdoYXQgd291bGQgYmUgdGhlIGNvcnJl c3BvbmRpbmc8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1m YW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBj b2xvcjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7ICZxdW90O2NvbXBlbGxpbmcgdXNlLWNhc2UmcXVv dDspLjwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWls eTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9y OiByZ2IoMCwgMCwgMCk7Ij4NCjxicj4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJv b2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBm b250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCkkgYW0gbm90IHN1cmUgSSBo YXZlIGEgY29tcGVsbGluZyByZWFzb24uIEl0IHdvdWxkIGJlIGp1c3Qgc2xpZ2h0bHkgbW9yZTwv ZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2Fs aWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2Io MCwgMCwgMCk7Ij4NCmVmZmljaWVudCBhbmQgc2xpZ2h0bHkgbW9yZSBlbGVnYW50IHRvIGp1c3Qg Y2hlY2sgZm9yIHRoZSBrZXltbWFwcCBhbmQ8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1By b29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsg Zm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQpub3QgaGF2ZSB0byB0YWtl IHN5bWJvbC12YWx1ZSwgYnV0IG15IGJpZ2dlc3QgbW90aXZhdGlvbiBmb3IgdGhlPC9kaXY+DQo8 ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBI ZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAw KTsiPg0Kc3VnZ2VzdGlvbiB3YXMgdGhlIGNvbmZ1c2lvbiB3aGVuIEkgZGlzY292ZXJlZCB3aGF0 IHdhcyBoYXBlbmluZy4gSXQ8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHls ZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXpl OiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQp3YXNuJ3QgY2xlYXIgd2h5IG9uZSBzeW1i b2wgd29ya2VkIGJ1dCBvdGhlciBkaWRuJ3QuIE5vdywgd2hlbiBJIGtub3c8L2Rpdj4NCjxkaXYg Y2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZl dGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+ DQp0aGF0IHRoZSB2YWx1ZSBzbG90IGNhbiBhbHdheXMgYmUgdXNlZCwgaXQgaXMgbm90IGFuIGlz c3VlLiAmbmJzcDtJIGFtPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9 ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTog MTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KYWZmcmFpZCB0aGF0IGlzIHRoZSBiZXN0IEkg Y2FuIGNvbWUgdXAgd2l0aC4gQnVmZmVyIGxvY2FsIGtleW1hcHMgY2FuIGJlPC9kaXY+DQo8ZGl2 IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2 ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsi Pg0KYWNoaWV2ZWQgd2l0aCBhIGJ1ZmZlci1sb2NhbCB2YXJpYWJsZSwgd2hvc2UgdmFsdWUgaXMg c3dpdGNoZWQgYmV0d2VlbjwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxl PSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6 IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCnR3byBkaWZmZXJlbnQga2V5bWFwcyB0b28s IGJ1dCBpdCB3b3VsZCBiZSBtb3JlIGVsZWdhbnQgaWYgdGhleSBjb3VsZCBiZTwvZGl2Pg0KPGRp diBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVs dmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7 Ij4NCmJ1ZmZlciBsb2NhbC4gSSBkb24ndCBzZWUgbXlzZWxmIGEgdXNlLWNhc2UgZm9yIG5laXRo ZXIsIGJ1dCB3aGF0IGRvIEk8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHls ZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXpl OiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQprbm93OyBzb21lb25lIGVsc2UgbWlnaHQg aGF2ZSBvbmUuPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQt ZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsg Y29sb3I6IHJnYigwLCAwLCAwKTsiPg0KPGJyPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50 VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2Vy aWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KVGhhbmtzIGZvciBs b29raW5nIGF0IGl0IGFuZCBmb3IgdGhlIGRldGFpbGVkIGFuc3dlci48L2Rpdj4NCjxkaXYgY2xh c3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGlj YSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQo8 YnI+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1p bHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xv cjogcmdiKDAsIDAsIDApOyI+DQpiZXN0IHJlZ2FyZHM8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1l bnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1z ZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQovYTwvZGl2Pg0K PC9ib2R5Pg0KPC9odG1sPg0K --_000_DU2PR02MB10109500793B66801151DCABD967DADU2PR02MB10109eu_-- From debbugs-submit-bounces@debbugs.gnu.org Thu Jun 19 18:39:17 2025 Received: (at 78834) by debbugs.gnu.org; 19 Jun 2025 22:39:17 +0000 Received: from localhost ([127.0.0.1]:39145 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uSNuf-0000ek-91 for submit@debbugs.gnu.org; Thu, 19 Jun 2025 18:39:17 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:7943) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uSNuc-0000eR-8T for 78834@debbugs.gnu.org; Thu, 19 Jun 2025 18:39:14 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id B33954426C9; Thu, 19 Jun 2025 18:39:07 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1750372746; bh=8c87s5edryWFL8zRBoHUU5X26eJNe/qxbCiwzHLnFuo=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=QWRjorHn7Q4VywSZO4KemvtfQTezUlSJWFSv9y79QyGACzg9l4sxOhZj2cGiKTkv8 jbCiXnjcXz1Ggni0r0cQVaHgLrQmf13H5pguNEh4e8HNQAEOUf0HRu80tzaoKUF+la ibqDPalHPSzkRJQVU/aIE0jBGmGPrjqtJwc6YsNisUMeXKZM6/nJ5+k343fz2JZ8VS HsRF01UbGeq9jyM5SplLP7BolayvHNMEeCtsWRarSoRx4TMH5HHzkLgW9dcJZqlXNU IRp4rlOYSktM52xc00T/ewJ4Qu3eVre7U6FGcVT2wsDgrd+AKXXIn09aaP9GE/hl8K 3fyYACmTHDF0w== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 604444426C3; Thu, 19 Jun 2025 18:39:06 -0400 (EDT) Received: from lechazo (lechon.iro.umontreal.ca [132.204.27.242]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 4C81A120495; Thu, 19 Jun 2025 18:39:06 -0400 (EDT) From: Stefan Monnier To: arthur miller Subject: Re: bug#78834: Feature request: make keymapp dereference symbol value slot In-Reply-To: Message-ID: References: Date: Thu, 19 Jun 2025 18:39:05 -0400 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.162 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 78834 Cc: "78834@debbugs.gnu.org" <78834@debbugs.gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > I realized that and was doing something similar, admittedly less > effeciently because I didn't know I can trust that all keymaps have the > value slot set. Your mental model is a bit off. Keymaps don't have a "value slot". IOW, your old loop was looking for "symbols that are keymaps" (which is only those whose function slot contains a keymap), but your new function looks for "variables which *contain* a keymap". Most useful/important keymaps are stored in variables, so yes that loop will find almost all of the keymaps. Not all, because some keymaps are produced dynamically or are stored only elsewhere (such as inside one of the sublists of `minor-mode-map-alist`). >> It's mostly used in very old code that uses the weird >> `define-prefix-command` function, such as the code that sets up some of >> the "core" keymaps like `ctl-x-5-prefix` `ESC-prefix` `ctl-x-4-prefix`, >> `Control-X-prefix`. > I was actually wondering why this was done, if it is just an > optimization or if there is some other reason? I am just curious, I > don't really understand the idea behind. You'd have to ask Richard. IIUC one of the benefit is that you can refer (by name) to a keymap before it's defined. E.g. you can do (global-set-key [?\C-z] 'my-z-keymap) and then have `my-z-keymap` autoloaded from some library the first time you hit `C-z`. I can't remember the last time I've seen this used successfully (I tried to use it a few times, but the keymap always ended up being "accidentally" autoloaded much too eagerly). Maybe it was done simply because Richard thought of keymaps as kinds of commands? > It would be interesting to learn, if somebody knows and is willing to > explain, since it is atypical to store value data in function slot. Indeed. >> It would break existing uses when the symbol has both >> a `symbol-function` value and a `symbol-value` value. We could >> consider > I saw the other functions using get_keymap, so I wasn't sure if they > would complain or not. I have run Emacs today, the entire day, with that > patch, I haven't noticed anything weird. I wouldn't expect otherwise. The affected cases would be corner cases. > DEFUN ("keymapp", Fkeymapp, Skeymapp, 1, 1, 0, > (Lisp_Object object) > { > if (NILP (object)) > return Qnil; > if (CONSP (object) && EQ (XCAR (object), Qkeymap)) > return object; > > if (SYMBOLP (object)) > { > Lisp_Object tem =3D indirect_function (object); > if (CONSP (tem) && EQ (XCAR (tem), Qkeymap)) > =E2=80=82=E2=80=82=E2=80=82=E2=80=82=E2=80=82=E2=80=82return tem; > > tem =3D find_symbol_value (object); > if (CONSP (tem) && EQ (XCAR (tem), Qkeymap)) > =E2=80=82=E2=80=82=E2=80=82=E2=80=82=E2=80=82=E2=80=82return tem; > } > > return Qnil; > } That would be wrong. Code can expect that if `keymapp` returns non-nil, then you do have a keymap and you can use functions like `set-keymap-parent`, `lookup-key`, `map-keymap`, ... on it. So if you change `keymapp` to return non-nil for some symbols, you need to adjust the other operations as well. Stefan From debbugs-submit-bounces@debbugs.gnu.org Thu Jun 19 18:45:47 2025 Received: (at 78834) by debbugs.gnu.org; 19 Jun 2025 22:45:47 +0000 Received: from localhost ([127.0.0.1]:39286 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uSO0w-0001NH-Ni for submit@debbugs.gnu.org; Thu, 19 Jun 2025 18:45:47 -0400 Received: from server.qxqx.de ([2a01:4f8:c012:9177::1]:48031 helo=mail.qxqx.de) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uSO0t-0001Ml-QC for 78834@debbugs.gnu.org; Thu, 19 Jun 2025 18:45:45 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=daniel-mendler.de; s=key; h=Content-Type:MIME-Version:Message-ID:Date: References:In-Reply-To:Subject:Cc:To:From:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=aUJJO6V6HvepDU2Eljdzh/71liocog24EwSVNN0r6U0=; b=CVZJNdi5SdK+B0Xiw/1QBI44vE rchJSjobJTMvaDF4oYtoGisMiEOfTNLg2Ou+82+B/KEbDjv9WGy5RuhO61ki4exurZNPRq7jlUAhr USRmvmOItSSNR0DDZCcQ5kg3pFLFN0czoimsfjYs49I6wsR6fHf4cY+7JqygBZavOQYM=; From: Daniel Mendler To: Stefan Monnier via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Subject: Re: bug#78834: Feature request: make keymapp dereference symbol value slot In-Reply-To: References: Date: Fri, 20 Jun 2025 00:45:35 +0200 Message-ID: <875xgr1hbk.fsf@daniel-mendler.de> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 78834 Cc: "78834@debbugs.gnu.org" <78834@debbugs.gnu.org>, Stefan Monnier , arthur miller X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) Stefan Monnier via "Bug reports for GNU Emacs, the Swiss army knife of text editors" writes: >>> It's mostly used in very old code that uses the weird >>> `define-prefix-command` function, such as the code that sets up some of >>> the "core" keymaps like `ctl-x-5-prefix` `ESC-prefix` `ctl-x-4-prefix`, >>> `Control-X-prefix`. >> I was actually wondering why this was done, if it is just an >> optimization or if there is some other reason? I am just curious, I >> don't really understand the idea behind. > > You'd have to ask Richard. IIUC one of the benefit is that you can > refer (by name) to a keymap before it's defined. E.g. you can do > > (global-set-key [?\C-z] 'my-z-keymap) > > and then have `my-z-keymap` autoloaded from some library the first time > you hit `C-z`. I can't remember the last time I've seen this used > successfully (I tried to use it a few times, but the keymap always > ended up being "accidentally" autoloaded much too eagerly). In a bunch of my packages I use the prefix keymap autoloading functionality successfully. See for example `cape-prefix-map' or `osm-prefix-map'. I bind `osm-prefix-map' to `s-m', such that I can invoke `osm-home' via `s-m h'. I've not observed that osm.el gets loaded too eagerly. > Maybe it was done simply because Richard thought of keymaps as kinds of > commands? I'd suspect it was done like this because of autoloading. Daniel From debbugs-submit-bounces@debbugs.gnu.org Thu Jun 19 20:15:42 2025 Received: (at 78834) by debbugs.gnu.org; 20 Jun 2025 00:15:42 +0000 Received: from localhost ([127.0.0.1]:40261 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uSPPx-0005fb-H9 for submit@debbugs.gnu.org; Thu, 19 Jun 2025 20:15:42 -0400 Received: from mail-northeuropeazolkn190110001.outbound.protection.outlook.com ([2a01:111:f403:d200::1]:14252 helo=DU2PR03CU002.outbound.protection.outlook.com) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uSPPs-0005en-NV for 78834@debbugs.gnu.org; Thu, 19 Jun 2025 20:15:39 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Tx+dcrWomhJrlXB2ukMRGCRB6YwA/WGtIW1b5/lqeUuX505QbElhlYTgjp9ZJb1du6mWn3IhTvE2ab0kAgzXH7LNP5JLeVO9IIx3v2XCtl94WBkOyzY/gIAoyZAJhAkZS63FiqY85euWwHO4ZgIM6WgATjVM6Tp0cWjViA7tje2wE7d1dXUNXihayqPSiH9nCKDP6lIWUKep9S5WyU36KsF1npSgUwSraz90K4UGn8tcUxDDU/5rcXFNsryiSruMLa0ezv5cF3f13eeMWALmwbXr/PwqUY65wXzEK42KPX+piuuiKA78GooHheh57pOSrEolJj41yHXmJ5Tns52SRw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Hqz0OfADUslOprZ/eIgl/ezW7W5AtGq0nLMmpwTzX74=; b=Bcb5pGLdP0rf/mX01KbNihm7hDXPeshzIZmtuVTyTmzlsVQT39K7ty+AyKX9KW0e/QV7E8R/+KXjqE+DgoWGIv4Viu3ZcZkx9U4rZ68THYpplVa49mTJlzRtFwS86hC8X58g3xlL209EtwNsAWpygY8tth7JkMSOSzUf6umKHLfRCdzUkbRKEQyCXsCG+7/6LEB5/+Dam1BKBG5Eu4Rk7uHBEcuiGv3cEQjlQ3z46ra9DNHo8o7NalaoqekCVuROVcX0cX5pW1pHDOPpMIyyBDwGX2g4m5rIc0z91jhOtmh3ZEuVQJPDPZJ2vihx4p6MvNKTFBrdDMBaeX+jj25KtA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=live.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Hqz0OfADUslOprZ/eIgl/ezW7W5AtGq0nLMmpwTzX74=; b=QcBuY8AEfTqVJAsCx0V80FLd/IL8a4UfKSkvyQKj0EUJIp7Vi+/3tnZ9rws8+p4OxwqVm9hwnfoCz87nL783EEWerT3VqJid14ykH5cTHeoo7ePH4KGA5FAh6GfbjXD+oviVTTWmLoaiATVGmvlOIhCGF5uEhvu9zmwyzimX5PQU0UhJWZ62+Z/SB7rDGeUBwes05iAv8lBKuo2vUwll1gsYqIoy6/5dTTrWhXsfe0aL124NtC3KFcDTFnfJrgz1+oB6y8marEQ944rc8xVctb2rLw4zKXrX0Oc+5wyueptktb8G/lwuqcc/dhXq6BlNSxtofC32Yj4h2GO1KIzLSg== Received: from DU2PR02MB10109.eurprd02.prod.outlook.com (2603:10a6:10:497::14) by AS2PR02MB9238.eurprd02.prod.outlook.com (2603:10a6:20b:5fc::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.29; Fri, 20 Jun 2025 00:15:29 +0000 Received: from DU2PR02MB10109.eurprd02.prod.outlook.com ([fe80::f3c9:d4cb:290:d487]) by DU2PR02MB10109.eurprd02.prod.outlook.com ([fe80::f3c9:d4cb:290:d487%7]) with mapi id 15.20.8857.021; Fri, 20 Jun 2025 00:15:29 +0000 From: arthur miller To: Stefan Monnier Subject: Sv: bug#78834: Feature request: make keymapp dereference symbol value slot Thread-Topic: bug#78834: Feature request: make keymapp dereference symbol value slot Thread-Index: AQHb4KA2qx0GnvB6oEC/IZb2t+FLy7QKmaeAgABtyM2AAA08gIAAGq0Y Date: Fri, 20 Jun 2025 00:15:29 +0000 Message-ID: References: In-Reply-To: Accept-Language: sv-SE, en-US Content-Language: sv-SE X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DU2PR02MB10109:EE_|AS2PR02MB9238:EE_ x-ms-office365-filtering-correlation-id: 2628d3d7-3505-4802-80e4-08ddaf8f9047 x-ms-exchange-slblob-mailprops: WaIXnCbdHrOwhXVdeGZL7x+zrXvKetSljm8xI3FlUfmS8XToNCqZtcim6q5j3vDO+VBi0T3pY0Musrq8IjABPlyqObl5xf6ORHfO0u4jBBOSaswMkMy/g2pmLBRUN0cBCOtwp37oJ9e5ijQsEr9oeDodyqx292703YisOBDKLLAvQTxM1WAnXv6dy0mXuZVjGMNYGJMk+RCOQRwnYOWPSAXn6suQOYeSjjrnK1kgJzt+QPyAaRdp54So+RRVJAehI0XXXM6DaGbFAKIQKEbfepj1s0SPeWen9WmEV7X2miFulgr187fW5SS1uJXh9IgZyNm95J7CVo3Q5CvR56ucdZLV8F79RrZCH9VPPZvOeWu1W5+bm4c0sBtbRDMT/SESLngBApYafCTR2/Yxjx7cHQ951O8a/60uNMwCH7crRf/TKEgVS1RXyyaC1DdO0CU0wKBZWHt9/5MEjgNSoe/TJJKVrdzD5kuTFanYwCr+hzU5nCvc6z7u+2kTv48z2yoP2ruArL4GXqd3GvD1/QJhLohSd3AlUpUmocyw0U20Bt/ZHRoFWfeR1aXT0HpGJcevuoLKE1zstXdiQwqhcpveMGn6NF4BjhIQkp8rE3jAzqXDvqV+z5Mx6EfMYxvm+s/VTVJQxQsMCDg283cQevPt8F1UiJarGKibYwQZOk+OIAa9d2eFksvb5CJOGAWoJTuBCitc9lhxDEOHa7Xc+6GNEMRGK7XNl8FfxAKt3egmjV+lYa7fGhsSctzd16+Uf3Hs/AXtHU0spso= x-microsoft-antispam: BCL:0; ARA:14566002|461199028|15080799009|8060799009|8062599006|19110799006|7092599006|41001999006|15030799003|40105399003|440099028|3412199025|102099032; x-microsoft-antispam-message-info: =?utf-8?B?cmlTSEdXS0kxRDFHR0QwbDFIS2RFdHZTM0xQbFNuMVA1ZXI5Z0pXR0wzUFJI?= =?utf-8?B?R2t6Q2ZoWk4vbjl0ZkUyRDFMeGpmdGZLeWhKN3Vvb1M1UlE0NXNtbTJGRk9S?= =?utf-8?B?bVNhVmZWb0R1UWhETHMzVWpvdTdTT25vNkRjTFA3eGlEVVBEanlqMWJlbytK?= =?utf-8?B?UnZPMDhFZ2xMUm8zMUwyV3hQN2hBRFVsV1U2ajROalFkVjBzTnREK0ErSHpy?= =?utf-8?B?aXdhZVVIQkY4ejg3WDNVRlhuU3ZUamlvempCU2w5NTBxdmdYWkZaVnVQQmN6?= =?utf-8?B?enpnamVzUlZZVHhRU0Vmd01mSzllRmRDUkh2eE1jZnZuTzlITCtFbmlxenNl?= =?utf-8?B?ZmVtNFBkM2Izb1RoRjNHMXNlUUZYLzZPUEFOVU5xOU1qdkdJQlVleXU1Tytw?= =?utf-8?B?ayt6VjlmYkQ5cjBxK0JwZjJ4MksxVXFuMmdvZm51NG1lQm1ia3hkKzZSVmZp?= =?utf-8?B?dmJ3MGY1U00vSUNMY0x1MCtNRlJwOE1WbXAxWi94ZlBreVZiblVvWFRtQWRH?= =?utf-8?B?WE5pMWVlN3IxSUs3cWc3UlRad3E3b1hhQjNtcGtLdlQwWll0dU1GbjFyTnVE?= =?utf-8?B?RnVVVWRLT0ZMdUoyUzE1Nk0rTFl2dHptV2JsUHFCak5EV3pHS3oyV1JkN3ZF?= =?utf-8?B?WW5idUhRbzBZSVJ2L2ZwUjdlZGlodzVkRjdodThxekZTRlBuZnBkVVJ2aEJN?= =?utf-8?B?Q1kvQ1h4ajR4bnRUbzBRRmo1ZWozSHFaK2hOU1RGd05IaCtZVWhteTdDblNz?= =?utf-8?B?T3BIMGZaOHBpWXZ3L20xZnFhOTFkeEI1NWNnK0xOaUlqRGRMQXg5cjNmWExy?= =?utf-8?B?Y3VmdS9CUTd2Y3Vlc3NDUXlPb0l6M3p6Q0c5bHZheC94K1h0K1VrTTFuWEQv?= =?utf-8?B?MWIxaDlBSjJ6YnFGOTlDVDAzUXFOS1dVWVJxWHZGRlY0ZFpCUzRFVmVvK09X?= =?utf-8?B?c3RYNkwxQ1JqOWpXWFZwU2ZpMXhNNllTN0hEN0ovZXFnNmpvTms2bDRJZmVi?= =?utf-8?B?VndualNjVk51U2JaRTdyNlF1Zk4vU2hWMkkwNUIxenhlcUtIQ3JqeExGQ3lE?= =?utf-8?B?azdrRnEvSzFPSExJTmF5WS80TnJNaGhWVFNzQkE5THd0WGw2TEc4RktLMVE4?= =?utf-8?B?Z29VcDhaQ0MvN0VCWm5RMEY4MnhFaURyemZaOFhaZ2JjcFVlVnRMTFBYakRY?= =?utf-8?B?SVJ4WkEycjlEcDNZTlFsL2dmbmc5NzVhcUhrSGxveFk0Q05kSHRMSUYzQVJz?= =?utf-8?B?ajVMekR2VkNxWkthUm1lcStuM1RHVmFTcmRjY3lxa2xMbjdRQVIrWUJyaVBY?= =?utf-8?B?bmRQN25YRjMyTmR4U1NuRWM0QWtnc1d6bGJKL2F0ZFBlem1NVGlKL0ZhYS8z?= =?utf-8?B?MjVrNm11ZXZHZXcraitETGJyWEE5QlV6dmRhK3oyVk1XalZrL3RIc084TitY?= =?utf-8?B?L1dZTHFEK0dQNHZQTmQ0a2dkdm1DOFhJclhNMjhyQkVaU1NSdXR4QURDNWZ0?= =?utf-8?B?M01FL0FMOEFwVDRIMnBvQ0x6anpaejd4UXdBeERWbHE3TnRyQ1dpdG5TUVFX?= =?utf-8?B?UjI5MFdKQ1ptQ2ZaUGphbGxzMk1MMG5SdGJNRlBWTzFINk5ydlUxZmZ0aTVp?= =?utf-8?B?Tk1OclgvenRXcFQxdzFlVCtzNUNXZkE9PQ==?= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?clRyL09kSm1kRG1aZnMwei9tb2pNbVpFZkd4ZFRNVC84SVdFNWtHUitkcll1?= =?utf-8?B?dHAyZExTcVk4ekhEa0FoaUdURWVhMjdlQjRXTEF4MGRCREt6ZFp6NmJRcTl5?= =?utf-8?B?eU93d01qTkhGRXE5eUJzNllCQzdJMG5WTTNoa1VmN0F0S1RwMlF6Q1gzMDh4?= =?utf-8?B?UUpxanh5djVGbmRUNkxtYUU3MW5sZWRwUVZqVmx5TlVCalUyT0VoaTNKTjl5?= =?utf-8?B?VEx2Skd5N3hVZzU5d1poaXRrMGpsUHNBMG1Wa2pQMHB1QjBMMzljTElCMHp3?= =?utf-8?B?Z2VvNHV0QTVOTWV3clRETXJ6L2o5OFJDcE5NUno4dFJmY3RiM3B1WksrVkp4?= =?utf-8?B?ZGhyRDA3MHQ0QTBGeG0yVUoxUy9JOXVWSksxVEoycDZQTWxqa2xaWHZLRU50?= =?utf-8?B?U0ZlYlhZejhvVFUrWVR2bHB2dmk0R2ZtSnpRa3ZYM3hkOGZteVBGVE83bGFy?= =?utf-8?B?bGRGOU9mOFc2M0ZIbGVSWHErVkdaT1lZUERxV0UvSFc1YVNqamY3V0l4ZW43?= =?utf-8?B?cHRFSjlYVkRIZUZzM2xTN2hKcjl0Z0FoWW5qMGthYnlhdGQ5ZU84N2ZtNksr?= =?utf-8?B?dWwxODdMTkRzbDMwNnFiaEJDZTZYaGNaYWEzdllUdFJMTDFBVEV0MW84T1dY?= =?utf-8?B?bnpqRkV2MG1hU3g2QlRqUFg5MnlkdWRPQXl3SmkrakJLMGpoWTgrSkRldzgz?= =?utf-8?B?MUtkMFJMcFdqWnZzaW5nN2dsZVJXU20ycGhNVElaRUw3eGlsYVJyVkFFNnBs?= =?utf-8?B?dVNwWnFRdDMybnRSdWZVcENiVkpXanF1TVZ6a2pIQmliVENxMHc1TmJ2amVX?= =?utf-8?B?a04wMWIyT24xV3kyMVQxdDNIWnNuSmMvMUR6VGJmWHZsejExQ1ZXRUVrUW1Z?= =?utf-8?B?VVRJaDllOE1RK1k3RVVDMzYwOHJsM0FNZGgwaDdWV3pqUHFMeVJQQUFxMG1E?= =?utf-8?B?NUo0WGR2M3QvdGpkTlpYeEdCTlZFcUxCVWFxUXFEdVltNituS0VFN1hxYlpx?= =?utf-8?B?NnM4M25OcEJBNEpNQVI5WXErTDgwbVQ5MTNybDVuendya1BIcVRpRHdjKzVz?= =?utf-8?B?K3pwYXYzTTFYWTNPNHVzY09LaUZjdFdpcUlXZEp4cWtYRUVLNXNjZkVCY1Yr?= =?utf-8?B?Q1B0THBIMUFwbithWDRiV0FueWJBc0kvZExnWVNVUUd2VDVtSkdrM0hqV25U?= =?utf-8?B?NVJ4QU51NVJtdUEvaUg5TUg1Nmk2Z3B5STZnUU4rREVTNFp0SHZMbko5TWEx?= =?utf-8?B?MC85QWw4YVJoVTN1OHorQzl5a0JYTXR5c0JjWUdCNGZQM0lqc1BDOGlGTTMw?= =?utf-8?B?dEJISmdrUFZ5TW1GdDVPeUlZTDlSNUdMcEhsNU1DbUFReXdXT0JwMDhoWFV0?= =?utf-8?B?czRvN1I1Qk5wTW5EaUR0cU8wWDVZdmt0TkV1cDByYTBYeUlrZnVDOElrbWdM?= =?utf-8?B?Zm5lMGl0MmdjOHJ6TW1LQ0ZOc0FhWWVSNXErWFZ1eGJoQkFsendGckVEakZH?= =?utf-8?B?aElyUGFsZUJCVERmVWxqbE5QaXFOZmdHcXRDVGhBaVd4RFBQOXM5WlV4Q3dr?= =?utf-8?B?dUhYU2FmNWg5MHFpOE5XbEF2ZFA1RmFEeVkyNlVSSXYwUGdjUkFMaGFOWlNM?= =?utf-8?B?T1N4UDJGcWppeGdVYUROU1VuTENwTjNia1NDK3RWQUpzVEVtS25mRFhRS2xS?= =?utf-8?B?Uk50L3BIK1R6aFpoQVI2ZVpaTk9xYjhwTlZsV3B3UWpMa3JnUlZSQTgvd1Ez?= =?utf-8?Q?vJLSjKH91KphXBGeGY=3D?= Content-Type: multipart/alternative; boundary="_000_DU2PR02MB10109C8D1B96D7F7F72C8C33D967CADU2PR02MB10109eu_" MIME-Version: 1.0 X-OriginatorOrg: sct-15-20-8534-20-msonline-outlook-5faa0.templateTenant X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DU2PR02MB10109.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: 2628d3d7-3505-4802-80e4-08ddaf8f9047 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jun 2025 00:15:29.1702 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR02MB9238 X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78834 Cc: "78834@debbugs.gnu.org" <78834@debbugs.gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --_000_DU2PR02MB10109C8D1B96D7F7F72C8C33D967CADU2PR02MB10109eu_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 PiA+IEkgcmVhbGl6ZWQgdGhhdCBhbmQgd2FzIGRvaW5nIHNvbWV0aGluZyBzaW1pbGFyLCBhZG1p dHRlZGx5IGxlc3MNCj4gPiBlZmZlY2llbnRseSBiZWNhdXNlIEkgZGlkbid0IGtub3cgSSBjYW4g dHJ1c3QgdGhhdCBhbGwga2V5bWFwcyBoYXZlIHRoZQ0KPiA+IHZhbHVlIHNsb3Qgc2V0Lg0KPg0K PiBZb3VyIG1lbnRhbCBtb2RlbCBpcyBhIGJpdCBvZmYuICBLZXltYXBzIGRvbid0IGhhdmUgYSAi dmFsdWUgc2xvdCIuDQo+IElPVywgeW91ciBvbGQgbG9vcCB3YXMgbG9va2luZyBmb3IgInN5bWJv bHMgdGhhdCBhcmUga2V5bWFwcyIgKHdoaWNoIGlzDQo+IG9ubHkgdGhvc2Ugd2hvc2UgZnVuY3Rp b24gc2xvdCBjb250YWlucyBhIGtleW1hcCksIGJ1dCB5b3VyIG5ldyBmdW5jdGlvbg0KPiBsb29r cyBmb3IgInZhcmlhYmxlcyB3aGljaCAqY29udGFpbiogYSBrZXltYXAiLg0KDQpBaGEuIFllcyBp dCB3YXMuIEkgZGlkbid0IGdldCBpdCB0aGF0IGtleW1hcHMgYXJlICpleGNsdXNpdmVseSogc3lt Ym9scw0Kd2l0aCBhIGtleW1hcCBpbiBmdW5jdGlvbiBzbG90LiBUaGUgZG9jIHNheXMgaXQsIGJ1 dCBzaW5jZSB0aGV5IGFyZSBhbHNvDQpzdG9yZWQgaW4gdmFyaWFibGVzLCBJIHdhcyBhIGJpdCBv ZmYgdGhlcmUuDQoNCj4gTW9zdCB1c2VmdWwvaW1wb3J0YW50IGtleW1hcHMgYXJlIHN0b3JlZCBp biB2YXJpYWJsZXMsIHNvIHllcyB0aGF0IGxvb3ANCj4gd2lsbCBmaW5kIGFsbW9zdCBhbGwgb2Yg dGhlIGtleW1hcHMuICBOb3QgYWxsLCBiZWNhdXNlIHNvbWUga2V5bWFwcyBhcmUNCj4gcHJvZHVj ZWQgZHluYW1pY2FsbHkgb3IgYXJlIHN0b3JlZCBvbmx5IGVsc2V3aGVyZSAoc3VjaCBhcyBpbnNp ZGUgb25lDQo+IG9mIHRoZSBzdWJsaXN0cyBvZiBgbWlub3ItbW9kZS1tYXAtYWxpc3RgKS4NCg0K WWVzLiBJIHNlZS4gU29tZSBvdGhlciBkZWZpbmVkIGluIGtleW1hcC5jIGFyZSBhbHNvIG5vdCBm b3VuZC4NCg0KVGhlIGZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgd29yayBmb3IgbWUsIGlzIHByb2Nl c3NpbmcgZWFjaCBrZXltYXANCnJlY3Vyc2l2ZWx5LiBNYXBzIHN0b3JlZCBpbiB0aG9zZSBsaXN0 cyB3aWxsIGhvcGVmdWxseSBhbHNvIGJlIGRlZmluZWQNCmVsc2V3aGVyZSwgb3RoZXJ3aXNlLCBJ IHdpbGwgaGF2ZSB0byBpdGVyYXRlIHRob3NlIGxpc3RzIGFzIHNwZWNpYWwNCmNhc2VzLiBJIGRv bid0IHNlZSBvdGhlcndpc2UgaG93IHRvIGFzayBmb3IgYWxsIHRoZSBrZXltYXBzIGluIHRoZQ0K c3lzdGVtLiBIb3BlZnVsbHkgaXQgaXMgb25seSB0aG9zZSBhbGlzdHMgZGVmaW5lZCBpbg0Ka2V5 bWFwLmMuIER5bmFtaWNhbGx5IGdlbmVyYXRlZCBvbmVzIGFyZSBvZiB0aGUgcmVhY2gsIHVubGVz cyB0aGV5IGFyZQ0Kc3RvcmVkIGluIHNvbWUgcGFyZW50IGtleW1hcCByZWFjaGFibGUgZnJvbSBh IHZhcmlhYmxlIGluIG9iYXJyYXkuDQoNCj4gPj4gSXQncyBtb3N0bHkgdXNlZCBpbiB2ZXJ5IG9s ZCBjb2RlIHRoYXQgdXNlcyB0aGUgd2VpcmQNCj4gPj4gYGRlZmluZS1wcmVmaXgtY29tbWFuZGAg ZnVuY3Rpb24sIHN1Y2ggYXMgdGhlIGNvZGUgdGhhdCBzZXRzIHVwIHNvbWUgb2YNCj4gPj4gdGhl ICJjb3JlIiBrZXltYXBzIGxpa2UgYGN0bC14LTUtcHJlZml4YCBgRVNDLXByZWZpeGAgYGN0bC14 LTQtcHJlZml4YCwNCj4gPj4gYENvbnRyb2wtWC1wcmVmaXhgLg0KPiA+IEkgd2FzIGFjdHVhbGx5 IHdvbmRlcmluZyB3aHkgdGhpcyB3YXMgZG9uZSwgaWYgaXQgaXMganVzdCBhbg0KPiA+IG9wdGlt aXphdGlvbiBvciBpZiB0aGVyZSBpcyBzb21lIG90aGVyIHJlYXNvbj8gIEkgYW0ganVzdCBjdXJp b3VzLCBJDQo+ID4gZG9uJ3QgcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGlkZWEgYmVoaW5kLg0KPg0K PiBZb3UnZCBoYXZlIHRvIGFzayBSaWNoYXJkLiAgSUlVQyBvbmUgb2YgdGhlIGJlbmVmaXQgaXMg dGhhdCB5b3UgY2FuDQo+IHJlZmVyIChieSBuYW1lKSB0byBhIGtleW1hcCBiZWZvcmUgaXQncyBk ZWZpbmVkLiAgRS5nLiB5b3UgY2FuIGRvDQo+DQo+ICAgICAoZ2xvYmFsLXNldC1rZXkgWz9cQy16 XSAnbXktei1rZXltYXApDQo+DQo+IGFuZCB0aGVuIGhhdmUgYG15LXota2V5bWFwYCBhdXRvbG9h ZGVkIGZyb20gc29tZSBsaWJyYXJ5IHRoZSBmaXJzdCB0aW1lDQo+IHlvdSBoaXQgYEMtemAuICBJ IGNhbid0IHJlbWVtYmVyIHRoZSBsYXN0IHRpbWUgSSd2ZSBzZWVuIHRoaXMgdXNlZA0KPiBzdWNj ZXNzZnVsbHkgKEkgdHJpZWQgdG8gdXNlIGl0IGEgZmV3IHRpbWVzLCBidXQgdGhlIGtleW1hcCBh bHdheXMNCj4gZW5kZWQgdXAgYmVpbmcgImFjY2lkZW50YWxseSIgYXV0b2xvYWRlZCBtdWNoIHRv byBlYWdlcmx5KS4NCj4NCj4gTWF5YmUgaXQgd2FzIGRvbmUgc2ltcGx5IGJlY2F1c2UgUmljaGFy ZCB0aG91Z2h0IG9mIGtleW1hcHMgYXMga2luZHMgb2YNCj4gY29tbWFuZHM/DQoNCkl0IHNlZW1z IHNvIGZyb20gdGhlIGRvY3MsIGJ1dCBob3cgZG9lcyBpdCB3b3JrPyBTcGVjaWFsIGNvZGUgdGhh dA0KaGFuZGxlcyBrZXltYXBzIHdoZW4gZXZhbHVhdGlvbiBpcyBkb25lPyBJIGFtIG5vdCBmYW1p bGlhciB3aXRoIEVtYWNzDQpldmFsIGFuZCBob3cgaXQgaGFuZGxlcyBjb21tYW5kcyB5ZXQuDQoN Cj4gPiBJdCB3b3VsZCBiZSBpbnRlcmVzdGluZyB0byBsZWFybiwgaWYgc29tZWJvZHkga25vd3Mg YW5kIGlzIHdpbGxpbmcgdG8NCj4gPiBleHBsYWluLCBzaW5jZSBpdCBpcyBhdHlwaWNhbCB0byBz dG9yZSB2YWx1ZSBkYXRhIGluIGZ1bmN0aW9uIHNsb3QuDQo+DQo+IEluZGVlZC4NCj4NCj4gPj4g SXQgd291bGQgYnJlYWsgZXhpc3RpbmcgdXNlcyB3aGVuIHRoZSBzeW1ib2wgaGFzIGJvdGgNCj4g Pj4gYSBgc3ltYm9sLWZ1bmN0aW9uYCB2YWx1ZSBhbmQgYSBgc3ltYm9sLXZhbHVlYCB2YWx1ZS4g IFdlIGNvdWxkDQo+ID4+IGNvbnNpZGVyDQo+ID4gSSBzYXcgdGhlIG90aGVyIGZ1bmN0aW9ucyB1 c2luZyBnZXRfa2V5bWFwLCBzbyBJIHdhc24ndCBzdXJlIGlmIHRoZXkNCj4gPiB3b3VsZCBjb21w bGFpbiBvciBub3QuIEkgaGF2ZSBydW4gRW1hY3MgdG9kYXksIHRoZSBlbnRpcmUgZGF5LCB3aXRo IHRoYXQNCj4gPiBwYXRjaCwgSSBoYXZlbid0IG5vdGljZWQgYW55dGhpbmcgd2VpcmQuDQo+DQo+ IEkgd291bGRuJ3QgZXhwZWN0IG90aGVyd2lzZS4gIFRoZSBhZmZlY3RlZCBjYXNlcyB3b3VsZCBi ZSBjb3JuZXIgY2FzZXMuDQo+DQo+ID4gREVGVU4gKCJrZXltYXBwIiwgRmtleW1hcHAsIFNrZXlt YXBwLCAxLCAxLCAwLA0KPiA+ICAgKExpc3BfT2JqZWN0IG9iamVjdCkNCj4gPiB7DQo+ID4gICBp ZiAoTklMUCAob2JqZWN0KSkNCj4gPiAgICAgcmV0dXJuIFFuaWw7DQo+ID4gICBpZiAoQ09OU1Ag KG9iamVjdCkgJiYgRVEgKFhDQVIgKG9iamVjdCksIFFrZXltYXApKQ0KPiA+ICAgICByZXR1cm4g b2JqZWN0Ow0KPiA+DQo+ID4gICBpZiAoU1lNQk9MUCAob2JqZWN0KSkNCj4gPiAgICAgew0KPiA+ ICAgICAgIExpc3BfT2JqZWN0IHRlbSA9IGluZGlyZWN0X2Z1bmN0aW9uIChvYmplY3QpOw0KPiA+ ICAgICAgIGlmIChDT05TUCAodGVtKSAmJiBFUSAoWENBUiAodGVtKSwgUWtleW1hcCkpDQo+ID4g 4oCC4oCC4oCC4oCC4oCC4oCCcmV0dXJuIHRlbTsNCj4gPg0KPiA+ICAgICAgIHRlbSA9IGZpbmRf c3ltYm9sX3ZhbHVlIChvYmplY3QpOw0KPiA+ICAgICAgIGlmIChDT05TUCAodGVtKSAmJiBFUSAo WENBUiAodGVtKSwgUWtleW1hcCkpDQo+ID4g4oCC4oCC4oCC4oCC4oCC4oCCcmV0dXJuIHRlbTsN Cj4gPiAgICAgfQ0KPiA+DQo+ID4gICByZXR1cm4gUW5pbDsNCj4gPiB9DQo+DQo+IFRoYXQgd291 bGQgYmUgd3JvbmcuICBDb2RlIGNhbiBleHBlY3QgdGhhdCBpZiBga2V5bWFwcGAgcmV0dXJucyBu b24tbmlsLA0KPiB0aGVuIHlvdSBkbyBoYXZlIGEga2V5bWFwIGFuZCB5b3UgY2FuIHVzZSBmdW5j dGlvbnMgbGlrZQ0KPiBgc2V0LWtleW1hcC1wYXJlbnRgLCBgbG9va3VwLWtleWAsIGBtYXAta2V5 bWFwYCwgLi4uIG9uIGl0LiAgU28gaWYgeW91DQo+IGNoYW5nZSBga2V5bWFwcGAgdG8gcmV0dXJu IG5vbi1uaWwgZm9yIHNvbWUgc3ltYm9scywgeW91IG5lZWQgdG8gYWRqdXN0DQo+IHRoZSBvdGhl ciBvcGVyYXRpb25zIGFzIHdlbGwuDQoNCkluZGVlZCwgYnV0IHRoZXkgd2lsbCBnZXQgYSBrZXlt YXAsIHdvbid0IHRoZXk/IEJlY2F1c2UgdGhlIG9iamVjdA0Kc3RvcmVkIGluIHRoZSBzeW1ib2wg c2xvdCBpcyBhIGtleW1hcC4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyBmcm9tIHdoaWNoDQpzbG90 IHRoZSBrZXltYXAgaXMgcmV0dXJuZWQuIEJ1dCwgSSBjYW4gaW1hZ2luZSBzb21lIGNvZGUgd3Jp dHRlbiB0bw0KZXhwZWN0IG5pbCBpbiBzb21lIGNhc2VzLCBub3cgZG9lcyBub3QgZ2V0IG5pbCwg YW5kIHBlcmhhcHMgZG9lcyBhIHdyb25nDQp0aGluZy4NCg0KQW55d2F5LCB0aGF0IGlzIGEgYml0 IHVuZm9ydHVuYXRlLCBiZWNhdXNlIEkganVzdCBmb3VuZCBJIHN0aWxsIGRvIGhhdmUNCnRvIGNo ZWNrIGlmIHRoZSB2YXJpYWJsZSBpcyBib3VuZCBiZWZvcmUgSSB0YWtlIHRoZSBzeW1ib2wtZnVu Y3Rpb24sIHNvDQpJIGhhdmUgdG8gdHlwZSBpdCBsaWtlIHRoaXM6DQoNCihkZWZ1biBjb2xsZWN0 LWtleW1hcHMgKCkNCiAgKGNsLWxvb3AgZm9yIHMgYmVpbmcgdGhlIHN5bWJvbHMNCiAgICAgICAg ICAgd2hlbg0KICAgICAgICAgICAob3IgKGtleW1hcHAgcykNCiAgICAgICAgICAgICAgIChhbmQg KGJvdW5kcCBzKSAoa2V5bWFwcCAoc3ltYm9sLXZhbHVlIHMpKSkpDQogICAgICAgICAgIGNvbGxl Y3QgcykpDQoNCldpdGggdGhlIGFib3ZlIGZ1bmN0aW9uLCBJIGNvdWxkIHR5cGU6DQoNCihkZWZ1 biBjb2xsZWN0LWtleW1hcHMgKCkNCiAgKGNsLWxvb3AgZm9yIHMgYmVpbmcgdGhlIHN5bWJvbHMN CiAgICAgICAgICAgd2hlbiAoa2V5bWFwcCBzKQ0KICAgICAgICAgICBjb2xsZWN0IHMpKQ0KDQpI b3dldmVyLCB0aGUgc2Vjb25kIG9uZSB3aXRoIHRoZSBwYXRjaCBmaW5kcyBvbmUga2V5bWFwIGxl c3MsIDU4OCB2cyA1ODcsDQppbiBteSBFbWFjcyA6KS4gSSBndWVzcyBJJ2xsIGJldHRlciBnbyB3 aXRoIHRoZSBvbGQgb25lIGFueXdheS4NCg== --_000_DU2PR02MB10109C8D1B96D7F7F72C8C33D967CADU2PR02MB10109eu_ Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: base64 PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0i dGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgc3R5bGU9 ImRpc3BsYXk6bm9uZTsiPiBQIHttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO30gPC9zdHls ZT4NCjwvaGVhZD4NCjxib2R5IGRpcj0ibHRyIj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29m IiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9u dC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7ICZndDsgSSByZWFsaXpl ZCB0aGF0IGFuZCB3YXMgZG9pbmcgc29tZXRoaW5nIHNpbWlsYXIsIGFkbWl0dGVkbHkgbGVzczwv ZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2Fs aWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2Io MCwgMCwgMCk7Ij4NCiZndDsgJmd0OyBlZmZlY2llbnRseSBiZWNhdXNlIEkgZGlkbid0IGtub3cg SSBjYW4gdHJ1c3QgdGhhdCBhbGwga2V5bWFwcyBoYXZlIHRoZTwvZGl2Pg0KPGRpdiBjbGFzcz0i ZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBz YW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsg Jmd0OyB2YWx1ZSBzbG90IHNldC48L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBz dHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1z aXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7PC9kaXY+DQo8ZGl2IGNsYXNz PSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2Es IHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KJmd0 OyBZb3VyIG1lbnRhbCBtb2RlbCBpcyBhIGJpdCBvZmYuICZuYnNwO0tleW1hcHMgZG9uJ3QgaGF2 ZSBhICZxdW90O3ZhbHVlIHNsb3QmcXVvdDsuPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Q cm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7 IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KJmd0OyBJT1csIHlvdXIg b2xkIGxvb3Agd2FzIGxvb2tpbmcgZm9yICZxdW90O3N5bWJvbHMgdGhhdCBhcmUga2V5bWFwcyZx dW90OyAod2hpY2ggaXM8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0i Zm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAx MnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7IG9ubHkgdGhvc2Ugd2hvc2UgZnVuY3Rp b24gc2xvdCBjb250YWlucyBhIGtleW1hcCksIGJ1dCB5b3VyIG5ldyBmdW5jdGlvbjwvZGl2Pg0K PGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwg SGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwg MCk7Ij4NCiZndDsgbG9va3MgZm9yICZxdW90O3ZhcmlhYmxlcyB3aGljaCAqY29udGFpbiogYSBr ZXltYXAmcXVvdDsuPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZv bnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJw dDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KPGJyPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVt ZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMt c2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KQWhhLiBZZXMg aXQgd2FzLiBJIGRpZG4ndCBnZXQgaXQgdGhhdCBrZXltYXBzIGFyZSAqZXhjbHVzaXZlbHkqIHN5 bWJvbHM8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1p bHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xv cjogcmdiKDAsIDAsIDApOyI+DQp3aXRoIGEga2V5bWFwIGluIGZ1bmN0aW9uIHNsb3QuIFRoZSBk b2Mgc2F5cyBpdCwgYnV0IHNpbmNlIHRoZXkgYXJlIGFsc288L2Rpdj4NCjxkaXYgY2xhc3M9ImVs ZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fu cy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQpzdG9yZWQg aW4gdmFyaWFibGVzLCBJIHdhcyBhIGJpdCBvZmYgdGhlcmUuPC9kaXY+DQo8ZGl2IGNsYXNzPSJl bGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNh bnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KPGJyPg0K PC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBD YWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJn YigwLCAwLCAwKTsiPg0KJmd0OyBNb3N0IHVzZWZ1bC9pbXBvcnRhbnQga2V5bWFwcyBhcmUgc3Rv cmVkIGluIHZhcmlhYmxlcywgc28geWVzIHRoYXQgbG9vcDwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxl bWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5z LXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsgd2ls bCBmaW5kIGFsbW9zdCBhbGwgb2YgdGhlIGtleW1hcHMuICZuYnNwO05vdCBhbGwsIGJlY2F1c2Ug c29tZSBrZXltYXBzIGFyZTwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxl PSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6 IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsgcHJvZHVjZWQgZHluYW1pY2FsbHkg b3IgYXJlIHN0b3JlZCBvbmx5IGVsc2V3aGVyZSAoc3VjaCBhcyBpbnNpZGUgb25lPC9kaXY+DQo8 ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBI ZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAw KTsiPg0KJmd0OyBvZiB0aGUgc3VibGlzdHMgb2YgYG1pbm9yLW1vZGUtbWFwLWFsaXN0YCkuPC9k aXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxp YnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigw LCAwLCAwKTsiPg0KPGJyPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5 bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6 ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KWWVzLiBJIHNlZS4gU29tZSBvdGhlciBk ZWZpbmVkIGluIGtleW1hcC5jIGFyZSBhbHNvIG5vdCBmb3VuZC48L2Rpdj4NCjxkaXYgY2xhc3M9 ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwg c2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQo8YnI+ DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6 IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjog cmdiKDAsIDAsIDApOyI+DQpUaGUgZnVuY3Rpb24gdGhhdCBkb2VzIHRoZSB3b3JrIGZvciBtZSwg aXMgcHJvY2Vzc2luZyBlYWNoIGtleW1hcDwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJv b2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBm b250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCnJlY3Vyc2l2ZWx5LiBNYXBz IHN0b3JlZCBpbiB0aG9zZSBsaXN0cyB3aWxsIGhvcGVmdWxseSBhbHNvIGJlIGRlZmluZWQ8L2Rp dj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGli cmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAs IDAsIDApOyI+DQplbHNld2hlcmUsIG90aGVyd2lzZSwgSSB3aWxsIGhhdmUgdG8gaXRlcmF0ZSB0 aG9zZSBsaXN0cyBhcyBzcGVjaWFsPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIg c3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQt c2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KY2FzZXMuIEkgZG9uJ3Qgc2VlIG90 aGVyd2lzZSBob3cgdG8gYXNrIGZvciBhbGwgdGhlIGtleW1hcHMgaW4gdGhlPC9kaXY+DQo8ZGl2 IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2 ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsi Pg0Kc3lzdGVtLiBIb3BlZnVsbHkgaXQgaXMgb25seSB0aG9zZSBhbGlzdHMgZGVmaW5lZCBpbjwv ZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2Fs aWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2Io MCwgMCwgMCk7Ij4NCmtleW1hcC5jLiBEeW5hbWljYWxseSBnZW5lcmF0ZWQgb25lcyBhcmUgb2Yg dGhlIHJlYWNoLCB1bmxlc3MgdGhleSBhcmU8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1By b29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsg Zm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQpzdG9yZWQgaW4gc29tZSBw YXJlbnQga2V5bWFwIHJlYWNoYWJsZSBmcm9tIGEgdmFyaWFibGUgaW4gb2JhcnJheS48L2Rpdj4N CjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmks IEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAs IDApOyI+DQo8YnI+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0i Zm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAx MnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7ICZndDsmZ3Q7IEl0J3MgbW9zdGx5IHVz ZWQgaW4gdmVyeSBvbGQgY29kZSB0aGF0IHVzZXMgdGhlIHdlaXJkPC9kaXY+DQo8ZGl2IGNsYXNz PSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2Es IHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KJmd0 OyAmZ3Q7Jmd0OyBgZGVmaW5lLXByZWZpeC1jb21tYW5kYCBmdW5jdGlvbiwgc3VjaCBhcyB0aGUg Y29kZSB0aGF0IHNldHMgdXAgc29tZSBvZjwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJv b2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBm b250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsgJmd0OyZndDsgdGhl ICZxdW90O2NvcmUmcXVvdDsga2V5bWFwcyBsaWtlIGBjdGwteC01LXByZWZpeGAgYEVTQy1wcmVm aXhgIGBjdGwteC00LXByZWZpeGAsPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIg c3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQt c2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KJmd0OyAmZ3Q7Jmd0OyBgQ29udHJv bC1YLXByZWZpeGAuPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZv bnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJw dDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KJmd0OyAmZ3Q7IEkgd2FzIGFjdHVhbGx5IHdvbmRl cmluZyB3aHkgdGhpcyB3YXMgZG9uZSwgaWYgaXQgaXMganVzdCBhbjwvZGl2Pg0KPGRpdiBjbGFz cz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNh LCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZn dDsgJmd0OyBvcHRpbWl6YXRpb24gb3IgaWYgdGhlcmUgaXMgc29tZSBvdGhlciByZWFzb24/ICZu YnNwO0kgYW0ganVzdCBjdXJpb3VzLCBJPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9v ZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZv bnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KJmd0OyAmZ3Q7IGRvbid0IHJl YWxseSB1bmRlcnN0YW5kIHRoZSBpZGVhIGJlaGluZC48L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1l bnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1z ZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7PC9kaXY+ DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJp LCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAw LCAwKTsiPg0KJmd0OyBZb3UnZCBoYXZlIHRvIGFzayBSaWNoYXJkLiAmbmJzcDtJSVVDIG9uZSBv ZiB0aGUgYmVuZWZpdCBpcyB0aGF0IHlvdSBjYW48L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRU b1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJp ZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7IHJlZmVyIChi eSBuYW1lKSB0byBhIGtleW1hcCBiZWZvcmUgaXQncyBkZWZpbmVkLiAmbmJzcDtFLmcuIHlvdSBj YW4gZG88L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1p bHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xv cjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7PC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9v ZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZv bnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KJmd0OyAmbmJzcDsgJm5ic3A7 IChnbG9iYWwtc2V0LWtleSBbP1xDLXpdICdteS16LWtleW1hcCk8L2Rpdj4NCjxkaXYgY2xhc3M9 ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwg c2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7 PC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBD YWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJn YigwLCAwLCAwKTsiPg0KJmd0OyBhbmQgdGhlbiBoYXZlIGBteS16LWtleW1hcGAgYXV0b2xvYWRl ZCBmcm9tIHNvbWUgbGlicmFyeSB0aGUgZmlyc3QgdGltZTwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxl bWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5z LXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsgeW91 IGhpdCBgQy16YC4gJm5ic3A7SSBjYW4ndCByZW1lbWJlciB0aGUgbGFzdCB0aW1lIEkndmUgc2Vl biB0aGlzIHVzZWQ8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9u dC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0 OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7IHN1Y2Nlc3NmdWxseSAoSSB0cmllZCB0byB1 c2UgaXQgYSBmZXcgdGltZXMsIGJ1dCB0aGUga2V5bWFwIGFsd2F5czwvZGl2Pg0KPGRpdiBjbGFz cz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNh LCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZn dDsgZW5kZWQgdXAgYmVpbmcgJnF1b3Q7YWNjaWRlbnRhbGx5JnF1b3Q7IGF1dG9sb2FkZWQgbXVj aCB0b28gZWFnZXJseSkuPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9 ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTog MTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KJmd0OzwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxl bWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5z LXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsgTWF5 YmUgaXQgd2FzIGRvbmUgc2ltcGx5IGJlY2F1c2UgUmljaGFyZCB0aG91Z2h0IG9mIGtleW1hcHMg YXMga2luZHMgb2Y8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9u dC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0 OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7IGNvbW1hbmRzPzwvZGl2Pg0KPGRpdiBjbGFz cz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNh LCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCjxi cj4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWls eTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9y OiByZ2IoMCwgMCwgMCk7Ij4NCkl0IHNlZW1zIHNvIGZyb20gdGhlIGRvY3MsIGJ1dCBob3cgZG9l cyBpdCB3b3JrPyBTcGVjaWFsIGNvZGUgdGhhdDwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRv UHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlm OyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCmhhbmRsZXMga2V5bWFw cyB3aGVuIGV2YWx1YXRpb24gaXMgZG9uZT8gSSBhbSBub3QgZmFtaWxpYXIgd2l0aCBFbWFjczwv ZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2Fs aWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2Io MCwgMCwgMCk7Ij4NCmV2YWwgYW5kIGhvdyBpdCBoYW5kbGVzIGNvbW1hbmRzIHlldC48L2Rpdj4N CjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmks IEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAs IDApOyI+DQo8YnI+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0i Zm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAx MnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7ICZndDsgSXQgd291bGQgYmUgaW50ZXJl c3RpbmcgdG8gbGVhcm4sIGlmIHNvbWVib2R5IGtub3dzIGFuZCBpcyB3aWxsaW5nIHRvPC9kaXY+ DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJp LCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAw LCAwKTsiPg0KJmd0OyAmZ3Q7IGV4cGxhaW4sIHNpbmNlIGl0IGlzIGF0eXBpY2FsIHRvIHN0b3Jl IHZhbHVlIGRhdGEgaW4gZnVuY3Rpb24gc2xvdC48L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRU b1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJp ZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7PC9kaXY+DQo8 ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBI ZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAw KTsiPg0KJmd0OyBJbmRlZWQuPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5 bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6 ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KJmd0OzwvZGl2Pg0KPGRpdiBjbGFzcz0i ZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBz YW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsg Jmd0OyZndDsgSXQgd291bGQgYnJlYWsgZXhpc3RpbmcgdXNlcyB3aGVuIHRoZSBzeW1ib2wgaGFz IGJvdGg8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1p bHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xv cjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7ICZndDsmZ3Q7IGEgYHN5bWJvbC1mdW5jdGlvbmAgdmFs dWUgYW5kIGEgYHN5bWJvbC12YWx1ZWAgdmFsdWUuICZuYnNwO1dlIGNvdWxkPC9kaXY+DQo8ZGl2 IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2 ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsi Pg0KJmd0OyAmZ3Q7Jmd0OyBjb25zaWRlcjwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJv b2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBm b250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsgJmd0OyBJIHNhdyB0 aGUgb3RoZXIgZnVuY3Rpb25zIHVzaW5nIGdldF9rZXltYXAsIHNvIEkgd2Fzbid0IHN1cmUgaWYg dGhleTwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWls eTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9y OiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsgJmd0OyB3b3VsZCBjb21wbGFpbiBvciBub3QuIEkgaGF2 ZSBydW4gRW1hY3MgdG9kYXksIHRoZSBlbnRpcmUgZGF5LCB3aXRoIHRoYXQ8L2Rpdj4NCjxkaXYg Y2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZl dGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+ DQomZ3Q7ICZndDsgcGF0Y2gsIEkgaGF2ZW4ndCBub3RpY2VkIGFueXRoaW5nIHdlaXJkLjwvZGl2 Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJy aSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwg MCwgMCk7Ij4NCiZndDs8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0i Zm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAx MnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7IEkgd291bGRuJ3QgZXhwZWN0IG90aGVy d2lzZS4gJm5ic3A7VGhlIGFmZmVjdGVkIGNhc2VzIHdvdWxkIGJlIGNvcm5lciBjYXNlcy48L2Rp dj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGli cmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAs IDAsIDApOyI+DQomZ3Q7PC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9 ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTog MTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KJmd0OyAmZ3Q7IERFRlVOICgmcXVvdDtrZXlt YXBwJnF1b3Q7LCBGa2V5bWFwcCwgU2tleW1hcHAsIDEsIDEsIDAsPC9kaXY+DQo8ZGl2IGNsYXNz PSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2Es IHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KJmd0 OyAmZ3Q7ICZuYnNwOyAoTGlzcF9PYmplY3Qgb2JqZWN0KTwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxl bWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5z LXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsgJmd0 OyB7PC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5 OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6 IHJnYigwLCAwLCAwKTsiPg0KJmd0OyAmZ3Q7ICZuYnNwOyBpZiAoTklMUCAob2JqZWN0KSk8L2Rp dj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGli cmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAs IDAsIDApOyI+DQomZ3Q7ICZndDsgJm5ic3A7ICZuYnNwOyByZXR1cm4gUW5pbDs8L2Rpdj4NCjxk aXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhl bHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDAp OyI+DQomZ3Q7ICZndDsgJm5ic3A7IGlmIChDT05TUCAob2JqZWN0KSAmYW1wOyZhbXA7IEVRIChY Q0FSIChvYmplY3QpLCBRa2V5bWFwKSk8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29m IiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9u dC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7ICZndDsgJm5ic3A7ICZu YnNwOyByZXR1cm4gb2JqZWN0OzwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0 eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNp emU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsgJmd0OzwvZGl2Pg0KPGRpdiBj bGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0 aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4N CiZndDsgJmd0OyAmbmJzcDsgaWYgKFNZTUJPTFAgKG9iamVjdCkpPC9kaXY+DQo8ZGl2IGNsYXNz PSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2Es IHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KJmd0 OyAmZ3Q7ICZuYnNwOyAmbmJzcDsgezwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2Yi IHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250 LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsgJmd0OyAmbmJzcDsgJm5i c3A7ICZuYnNwOyBMaXNwX09iamVjdCB0ZW0gPSBpbmRpcmVjdF9mdW5jdGlvbiAob2JqZWN0KTs8 L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENh bGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdi KDAsIDAsIDApOyI+DQomZ3Q7ICZndDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgaWYgKENPTlNQICh0 ZW0pICZhbXA7JmFtcDsgRVEgKFhDQVIgKHRlbSksIFFrZXltYXApKTwvZGl2Pg0KPGRpdiBjbGFz cz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNh LCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZn dDsgJmd0OyDigILigILigILigILigILigIJyZXR1cm4gdGVtOzwvZGl2Pg0KPGRpdiBjbGFzcz0i ZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBz YW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsg Jmd0OzwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWls eTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9y OiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsgJmd0OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB0ZW0gPSBm aW5kX3N5bWJvbF92YWx1ZSAob2JqZWN0KTs8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1By b29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsg Zm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7ICZndDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgaWYgKENPTlNQICh0ZW0pICZhbXA7JmFtcDsgRVEgKFhDQVIgKHRlbSks IFFrZXltYXApKTwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250 LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7 IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsgJmd0OyDigILigILigILigILigILigIJyZXR1 cm4gdGVtOzwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZh bWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNv bG9yOiByZ2IoMCwgMCwgMCk7Ij4NCiZndDsgJmd0OyAmbmJzcDsgJm5ic3A7IH08L2Rpdj4NCjxk aXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhl bHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDAp OyI+DQomZ3Q7ICZndDs8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0i Zm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAx MnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7ICZndDsgJm5ic3A7IHJldHVybiBRbmls OzwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTog Q2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiBy Z2IoMCwgMCwgMCk7Ij4NCiZndDsgJmd0OyB9PC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Q cm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7 IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KJmd0OzwvZGl2Pg0KPGRp diBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVs dmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7 Ij4NCiZndDsgVGhhdCB3b3VsZCBiZSB3cm9uZy4gJm5ic3A7Q29kZSBjYW4gZXhwZWN0IHRoYXQg aWYgYGtleW1hcHBgIHJldHVybnMgbm9uLW5pbCw8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRU b1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJp ZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7IHRoZW4geW91 IGRvIGhhdmUgYSBrZXltYXAgYW5kIHlvdSBjYW4gdXNlIGZ1bmN0aW9ucyBsaWtlPC9kaXY+DQo8 ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBI ZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAw KTsiPg0KJmd0OyBgc2V0LWtleW1hcC1wYXJlbnRgLCBgbG9va3VwLWtleWAsIGBtYXAta2V5bWFw YCwgLi4uIG9uIGl0LiAmbmJzcDtTbyBpZiB5b3U8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRU b1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJp ZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQomZ3Q7IGNoYW5nZSBg a2V5bWFwcGAgdG8gcmV0dXJuIG5vbi1uaWwgZm9yIHNvbWUgc3ltYm9scywgeW91IG5lZWQgdG8g YWRqdXN0PC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFt aWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29s b3I6IHJnYigwLCAwLCAwKTsiPg0KJmd0OyB0aGUgb3RoZXIgb3BlcmF0aW9ucyBhcyB3ZWxsLjwv ZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2Fs aWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2Io MCwgMCwgMCk7Ij4NCjxicj4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0 eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNp emU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCkluZGVlZCwgYnV0IHRoZXkgd2lsbCBn ZXQgYSBrZXltYXAsIHdvbid0IHRoZXk/IEJlY2F1c2UgdGhlIG9iamVjdDwvZGl2Pg0KPGRpdiBj bGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0 aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4N CnN0b3JlZCBpbiB0aGUgc3ltYm9sIHNsb3QgaXMgYSBrZXltYXAuIFRoZSBvbmx5IGRpZmZlcmVu Y2UgaXMgZnJvbSB3aGljaDwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxl PSJmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6 IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCnNsb3QgdGhlIGtleW1hcCBpcyByZXR1cm5l ZC4gQnV0LCBJIGNhbiBpbWFnaW5lIHNvbWUgY29kZSB3cml0dGVuIHRvPC9kaXY+DQo8ZGl2IGNs YXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRp Y2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0K ZXhwZWN0IG5pbCBpbiBzb21lIGNhc2VzLCBub3cgZG9lcyBub3QgZ2V0IG5pbCwgYW5kIHBlcmhh cHMgZG9lcyBhIHdyb25nPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9 ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTog MTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KdGhpbmcuPC9kaXY+DQo8ZGl2IGNsYXNzPSJl bGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNh bnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KPGJyPg0K PC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBD YWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJn YigwLCAwLCAwKTsiPg0KQW55d2F5LCB0aGF0IGlzIGEgYml0IHVuZm9ydHVuYXRlLCBiZWNhdXNl IEkganVzdCBmb3VuZCBJIHN0aWxsIGRvIGhhdmU8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRU b1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJp ZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQp0byBjaGVjayBpZiB0 aGUgdmFyaWFibGUgaXMgYm91bmQgYmVmb3JlIEkgdGFrZSB0aGUgc3ltYm9sLWZ1bmN0aW9uLCBz bzwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250LWZhbWlseTog Q2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IGNvbG9yOiBy Z2IoMCwgMCwgMCk7Ij4NCkkgaGF2ZSB0byB0eXBlIGl0IGxpa2UgdGhpczo8L2Rpdj4NCjxkaXYg Y2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZl dGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+ DQo8YnI+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1m YW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBj b2xvcjogcmdiKDAsIDAsIDApOyI+DQooZGVmdW4gY29sbGVjdC1rZXltYXBzICgpPC9kaXY+DQo8 ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBI ZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAw KTsiPg0KJm5ic3A7IChjbC1sb29wIGZvciBzIGJlaW5nIHRoZSBzeW1ib2xzPC9kaXY+DQo8ZGl2 IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2 ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsi Pg0KJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDt3aGVuPC9kaXY+DQo8 ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBI ZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAw KTsiPg0KJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsob3IgKGtleW1h cHAgcyk8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1p bHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xv cjogcmdiKDAsIDAsIDApOyI+DQombmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7KGFuZCAoYm91bmRwIHMpIChrZXltYXBwIChzeW1ib2wtdmFsdWUg cykpKSk8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1p bHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xv cjogcmdiKDAsIDAsIDApOyI+DQombmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwO2NvbGxlY3QgcykpPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9 ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTog MTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KPGJyPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJl bGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNh bnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KV2l0aCB0 aGUgYWJvdmUgZnVuY3Rpb24sIEkgY291bGQgdHlwZTo8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1l bnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1z ZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAsIDAsIDApOyI+DQo8YnI+DQo8L2Rp dj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1pbHk6IENhbGli cmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogcmdiKDAs IDAsIDApOyI+DQooZGVmdW4gY29sbGVjdC1rZXltYXBzICgpPC9kaXY+DQo8ZGl2IGNsYXNzPSJl bGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNh bnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KJm5ic3A7 IChjbC1sb29wIGZvciBzIGJlaW5nIHRoZSBzeW1ib2xzPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVt ZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMt c2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDt3aGVuIChrZXltYXBwIHMpICZuYnNwOyAm bmJzcDs8L2Rpdj4NCjxkaXYgY2xhc3M9ImVsZW1lbnRUb1Byb29mIiBzdHlsZT0iZm9udC1mYW1p bHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xv cjogcmdiKDAsIDAsIDApOyI+DQombmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwO2NvbGxlY3QgcykpPC9kaXY+DQo8ZGl2IGNsYXNzPSJlbGVtZW50VG9Qcm9vZiIgc3R5bGU9 ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTog MTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KPGJyPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJl bGVtZW50VG9Qcm9vZiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNh bnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KSG93ZXZl ciwgdGhlIHNlY29uZCBvbmUgd2l0aCB0aGUgcGF0Y2ggZmluZHMgb25lIGtleW1hcCBsZXNzLCA1 ODggdnMgNTg3LDwvZGl2Pg0KPGRpdiBjbGFzcz0iZWxlbWVudFRvUHJvb2YiIHN0eWxlPSJmb250 LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7 IGNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4NCmluIG15IEVtYWNzIDopLiBJIGd1ZXNzIEknbGwgYmV0 dGVyIGdvIHdpdGggdGhlIG9sZCBvbmUgYW55d2F5LjwvZGl2Pg0KPGRpdiBpZD0iZGl2UnBseUZ3 ZE1zZyI+PC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+DQo= --_000_DU2PR02MB10109C8D1B96D7F7F72C8C33D967CADU2PR02MB10109eu_-- From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 05 03:25:26 2025 Received: (at 78834-done) by debbugs.gnu.org; 5 Jul 2025 07:25:27 +0000 Received: from localhost ([127.0.0.1]:39023 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uXxH1-0000i3-U5 for submit@debbugs.gnu.org; Sat, 05 Jul 2025 03:25:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36984) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uXxGy-0000e0-1i for 78834-done@debbugs.gnu.org; Sat, 05 Jul 2025 03:25:22 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uXxGs-0006aG-BQ; Sat, 05 Jul 2025 03:25:14 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=uXbgFPqFF4jX0s6UCfTrHFUTCgMIme82i9FQpDQFNAc=; b=WdXwY0gKVBS68w+77LBY g27wpIiamZEkaecF+Cur91q9cMCCxDn2WOdxTwkFonv9WE9ctR9aaV5xoTdniXyr0e23SwSzZNEl2 1l2TbE/Z+qGozl08JL9UldbYexCw8M0w1sAl2aWBA5q49DNUJHrktPfAJzTWbY26GqGAx2oRCt8+s Fq+j9JTRwNDGfUeMuEhPxZCaekRyBBP17MsoT2WwWUTSWlimNuN07VW7i4OHgk6KD0Gd3okuIR5In +D9aklpBjSOz3a2jmfdxpX4ALLBD7JZGuBFA98oyzHtO4k815TYGY51WzG7CwiaDmyEjZDyQYsd7p C7D0Y2XWTLkaQQ==; Date: Sat, 05 Jul 2025 10:25:12 +0300 Message-Id: <865xg7xfon.fsf@gnu.org> From: Eli Zaretskii To: arthur miller In-Reply-To: (message from arthur miller on Fri, 20 Jun 2025 00:15:29 +0000) Subject: Re: bug#78834: Sv: bug#78834: Feature request: make keymapp dereference symbol value slot References: MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 78834-done Cc: 78834-done@debbugs.gnu.org, monnier@iro.umontreal.ca X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: "78834@debbugs.gnu.org" <78834@debbugs.gnu.org> > From: arthur miller > Date: Fri, 20 Jun 2025 00:15:29 +0000 > > > > I realized that and was doing something similar, admittedly less > > > effeciently because I didn't know I can trust that all keymaps have the > > > value slot set. > > > > Your mental model is a bit off. Keymaps don't have a "value slot". > > IOW, your old loop was looking for "symbols that are keymaps" (which is > > only those whose function slot contains a keymap), but your new function > > looks for "variables which *contain* a keymap". > > Aha. Yes it was. I didn't get it that keymaps are *exclusively* symbols > with a keymap in function slot. The doc says it, but since they are also > stored in variables, I was a bit off there. > > > Most useful/important keymaps are stored in variables, so yes that loop > > will find almost all of the keymaps. Not all, because some keymaps are > > produced dynamically or are stored only elsewhere (such as inside one > > of the sublists of `minor-mode-map-alist`). > > Yes. I see. Some other defined in keymap.c are also not found. > > The function that does the work for me, is processing each keymap > recursively. Maps stored in those lists will hopefully also be defined > elsewhere, otherwise, I will have to iterate those lists as special > cases. I don't see otherwise how to ask for all the keymaps in the > system. Hopefully it is only those alists defined in > keymap.c. Dynamically generated ones are of the reach, unless they are > stored in some parent keymap reachable from a variable in obarray. > > > >> It's mostly used in very old code that uses the weird > > >> `define-prefix-command` function, such as the code that sets up some of > > >> the "core" keymaps like `ctl-x-5-prefix` `ESC-prefix` `ctl-x-4-prefix`, > > >> `Control-X-prefix`. > > > I was actually wondering why this was done, if it is just an > > > optimization or if there is some other reason? I am just curious, I > > > don't really understand the idea behind. > > > > You'd have to ask Richard. IIUC one of the benefit is that you can > > refer (by name) to a keymap before it's defined. E.g. you can do > > > > (global-set-key [?\C-z] 'my-z-keymap) > > > > and then have `my-z-keymap` autoloaded from some library the first time > > you hit `C-z`. I can't remember the last time I've seen this used > > successfully (I tried to use it a few times, but the keymap always > > ended up being "accidentally" autoloaded much too eagerly). > > > > Maybe it was done simply because Richard thought of keymaps as kinds of > > commands? > > It seems so from the docs, but how does it work? Special code that > handles keymaps when evaluation is done? I am not familiar with Emacs > eval and how it handles commands yet. > > > > It would be interesting to learn, if somebody knows and is willing to > > > explain, since it is atypical to store value data in function slot. > > > > Indeed. > > > > >> It would break existing uses when the symbol has both > > >> a `symbol-function` value and a `symbol-value` value. We could > > >> consider > > > I saw the other functions using get_keymap, so I wasn't sure if they > > > would complain or not. I have run Emacs today, the entire day, with that > > > patch, I haven't noticed anything weird. > > > > I wouldn't expect otherwise. The affected cases would be corner cases. > > > > > DEFUN ("keymapp", Fkeymapp, Skeymapp, 1, 1, 0, > > > (Lisp_Object object) > > > { > > > if (NILP (object)) > > > return Qnil; > > > if (CONSP (object) && EQ (XCAR (object), Qkeymap)) > > > return object; > > > > > > if (SYMBOLP (object)) > > > { > > > Lisp_Object tem = indirect_function (object); > > > if (CONSP (tem) && EQ (XCAR (tem), Qkeymap)) > > >       return tem; > > > > > > tem = find_symbol_value (object); > > > if (CONSP (tem) && EQ (XCAR (tem), Qkeymap)) > > >       return tem; > > > } > > > > > > return Qnil; > > > } > > > > That would be wrong. Code can expect that if `keymapp` returns non-nil, > > then you do have a keymap and you can use functions like > > `set-keymap-parent`, `lookup-key`, `map-keymap`, ... on it. So if you > > change `keymapp` to return non-nil for some symbols, you need to adjust > > the other operations as well. > > Indeed, but they will get a keymap, won't they? Because the object > stored in the symbol slot is a keymap. The only difference is from which > slot the keymap is returned. But, I can imagine some code written to > expect nil in some cases, now does not get nil, and perhaps does a wrong > thing. > > Anyway, that is a bit unfortunate, because I just found I still do have > to check if the variable is bound before I take the symbol-function, so > I have to type it like this: > > (defun collect-keymaps () > (cl-loop for s being the symbols > when > (or (keymapp s) > (and (boundp s) (keymapp (symbol-value s)))) > collect s)) > > With the above function, I could type: > > (defun collect-keymaps () > (cl-loop for s being the symbols > when (keymapp s) > collect s)) > > However, the second one with the patch finds one keymap less, 588 vs 587, > in my Emacs :). I guess I'll better go with the old one anyway. No further comments, so I'm closing this bug. From unknown Thu Aug 14 17:29:22 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Sat, 02 Aug 2025 11:24:08 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator