From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Dimitri Belopopsky Newsgroups: gmane.emacs.bugs Subject: bug#61066: [PATCH] Add inlay hint support to eglot Date: Wed, 25 Jan 2023 23:34:02 +0100 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="0000000000004f94d105f31e3b0b" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="24254"; mail-complaints-to="usenet@ciao.gmane.io" To: 61066@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Wed Jan 25 23:35:25 2023 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pKoMX-00069G-PU for geb-bug-gnu-emacs@m.gmane-mx.org; Wed, 25 Jan 2023 23:35:25 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pKoMD-00025z-6c; Wed, 25 Jan 2023 17:35:05 -0500 Original-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 1pKoMA-00025a-TP for bug-gnu-emacs@gnu.org; Wed, 25 Jan 2023 17:35:02 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pKoMA-0000uq-KM for bug-gnu-emacs@gnu.org; Wed, 25 Jan 2023 17:35:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1pKoMA-00081J-1y for bug-gnu-emacs@gnu.org; Wed, 25 Jan 2023 17:35:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Dimitri Belopopsky Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 25 Jan 2023 22:35:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 61066 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.167468607430786 (code B ref -1); Wed, 25 Jan 2023 22:35:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 25 Jan 2023 22:34:34 +0000 Original-Received: from localhost ([127.0.0.1]:60160 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pKoLi-00080T-BS for submit@debbugs.gnu.org; Wed, 25 Jan 2023 17:34:34 -0500 Original-Received: from lists.gnu.org ([209.51.188.17]:60080) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pKoLe-00080J-Da for submit@debbugs.gnu.org; Wed, 25 Jan 2023 17:34:32 -0500 Original-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 1pKoLS-00021R-M5 for bug-gnu-emacs@gnu.org; Wed, 25 Jan 2023 17:34:25 -0500 Original-Received: from mail-qk1-f171.google.com ([209.85.222.171]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pKoLO-0000gs-Tt for bug-gnu-emacs@gnu.org; Wed, 25 Jan 2023 17:34:16 -0500 Original-Received: by mail-qk1-f171.google.com with SMTP id l1so74547qkg.11 for ; Wed, 25 Jan 2023 14:34:14 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=QNtLsymABkjYRq0aYCtV5R7pDJw8aez+nUUEqDYznyI=; b=McA565CuiixwHYJ8qcqWs2wR2jtEjl9sXgfRRkcklEQiyrgq0HjZuM+N8px5YxN/EB tTJEa2jtCGux+qBtoMQiAGxpeC7Uik3DXJ7kz4B0R454lN96P1KlZz8kov7XYBlFLX83 Pk/6SiyMScL6CXOflpNpca3DrLhZw+BnUif9mcCiiX6G0GDZp3cADKodHzobF75dqv15 3NoGnM/Ib5vU2SE3sOcxGv4m/ZtOIfDlzJjB1wvGcNmVvDuOO/nAFrKst+LSjy1Y0FW2 jJZ8NUa/dCUZOUua18Qo5EyUvhg3QMS0XlMlZ5msNZ2ANq1WJjE9+BeGvAkcq0n8l1R3 g9CA== X-Gm-Message-State: AO0yUKVatlkJlri+Yxd0qjuplrFxBbwcn8Mf8SfH8XCL6bBq2dNoGJ+5 ZugSYJCyBqMELb+7BnItqVqhmKTajJQS9va6rsf+RKDg X-Google-Smtp-Source: AK7set/K3dOBEnuUC+3D/Ux0/7Vl9jwQuAmN5Tsbbk7iS3dbTwcQnTcX9LjrmEm+lNDVJnFDY2AqWHGlKhQJLfZIm+Q= X-Received: by 2002:a05:620a:1332:b0:710:2b0c:9f68 with SMTP id p18-20020a05620a133200b007102b0c9f68mr335561qkj.520.1674686053172; Wed, 25 Jan 2023 14:34:13 -0800 (PST) Received-SPF: pass client-ip=209.85.222.171; envelope-from=dimitribelo@gmail.com; helo=mail-qk1-f171.google.com X-Spam_score_int: -15 X-Spam_score: -1.6 X-Spam_bar: - X-Spam_report: (-1.6 / 5.0 requ) BAYES_00=-1.9, FREEMAIL_FORGED_FROMDOMAIN=0.091, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:254158 Archived-At: --0000000000004f94d105f31e3b0b Content-Type: multipart/alternative; boundary="0000000000004f94ce05f31e3b09" --0000000000004f94ce05f31e3b09 Content-Type: text/plain; charset="UTF-8" Hello, I've been working on adding support for inlay hints inside eglot using overlays. Here is a working patch, but I'm still missing a few things: - I can't figure out a way to show the hints on a document without causing lags or timeouts from the lsp server - I'm currently updating the hints by sending the whole file each time (to make sure all hints get updated correctly). I'm not sure on how to make this more efficient (or if it even necessary). On the implementation side: - implemented with overlays as a minor model, enabled by default - shows all hints supported by the protocol - there is a customisation to disable the minor mode if the user doesn't want the feature I'd love to get a few points to finish this patch, and of course any ideas and feedbacks are welcome! Kind regards, Dimitri Belopopsky --0000000000004f94ce05f31e3b09 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello,

I've been working o= n adding support for inlay hints inside eglot using overlays.
Here= is a working patch, but I'm still missing a few things:

<= div>- I can't figure out a way to show the hints on a document without = causing lags or timeouts from the lsp server
- I'm currently = updating the hints by sending the whole file each time (to make sure all hi= nts get updated correctly). I'm not sure on how to make this more effic= ient (or if it even necessary).

On the implementation sid= e:
- implemented with overlays as a minor model, enabled by defau= lt
- shows all hints supported by the protocol
- th= ere is a customisation to disable the minor mode if the user doesn't wa= nt the feature

I'd love to get a few points to finish= this patch, and of course any ideas and feedbacks are welcome!

Kind regards,

Dimitri Belopopsky
--0000000000004f94ce05f31e3b09-- --0000000000004f94d105f31e3b0b Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Add-inlay-hints-to-eglot.patch" Content-Disposition: attachment; filename="0001-Add-inlay-hints-to-eglot.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ldc8nf7x0 RnJvbSA4NDhmYTE2ZWI2MjU3Y2U0NTRjMTgxMGY4MWJlOGVkOGVkMTQwMTY0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEaW1pdHJpIEJlbG9wb3Bza3kgPGRpbWl0cmlAYmVsb3BvcHNr eS5jb20+CkRhdGU6IFdlZCwgMjUgSmFuIDIwMjMgMjM6MjQ6MTMgKzAxMDAKU3ViamVjdDogW1BB VENIXSBBZGQgaW5sYXkgaGludHMgdG8gZWdsb3QKCi0tLQogbGlzcC9wcm9nbW9kZXMvZWdsb3Qu ZWwgfCA4OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogMSBmaWxl IGNoYW5nZWQsIDg3IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9s aXNwL3Byb2dtb2Rlcy9lZ2xvdC5lbCBiL2xpc3AvcHJvZ21vZGVzL2VnbG90LmVsCmluZGV4IDhj ZTFhOGI3YmFmLi4yZDk0N2MzNzdhNCAxMDA2NDQKLS0tIGEvbGlzcC9wcm9nbW9kZXMvZWdsb3Qu ZWwKKysrIGIvbGlzcC9wcm9nbW9kZXMvZWdsb3QuZWwKQEAgLTQwNCw2ICs0MDQsMTEgQEAgZWds b3Qtd2l0aGhvbGQtcHJvY2Vzcy1pZAogKHdoZW4gKGFzc29jICdmbGV4IGNvbXBsZXRpb24tc3R5 bGVzLWFsaXN0KQogICAoYWRkLXRvLWxpc3QgJ2NvbXBsZXRpb24tY2F0ZWdvcnktZGVmYXVsdHMg JyhlZ2xvdCAoc3R5bGVzIGZsZXggYmFzaWMpKSkpCiAKKyhkZWZjdXN0b20gZWdsb3QtaW5sYXkt aGludHMgdAorICAiSWYgbm9uLW5pbCwgYWN0aXZhdGUgaW5sYXkgaGludHMgaW5zaWRlIHRoZSBi dWZmZXIuIgorICA6dHlwZSAnYm9vbGVhbikKKworCiAMCiA7OzsgQ29uc3RhbnRzCiA7OzsKQEAg LTE2MjQsNyArMTYyOSw4IEBAIGVnbG90LWlnbm9yZWQtc2VydmVyLWNhcGFiaWxpdGllcwogICAg ICAgICAgIChjb25zdCA6dGFnICJIaWdobGlnaHQgbGlua3MgaW4gZG9jdW1lbnQiIDpkb2N1bWVu dExpbmtQcm92aWRlcikKICAgICAgICAgICAoY29uc3QgOnRhZyAiRGVjb3JhdGUgY29sb3IgcmVm ZXJlbmNlcyIgOmNvbG9yUHJvdmlkZXIpCiAgICAgICAgICAgKGNvbnN0IDp0YWcgIkZvbGQgcmVn aW9ucyBvZiBidWZmZXIiIDpmb2xkaW5nUmFuZ2VQcm92aWRlcikKLSAgICAgICAgICAoY29uc3Qg OnRhZyAiRXhlY3V0ZSBjdXN0b20gY29tbWFuZHMiIDpleGVjdXRlQ29tbWFuZFByb3ZpZGVyKSkp CisgICAgICAgICAgIChjb25zdCA6dGFnICJFeGVjdXRlIGN1c3RvbSBjb21tYW5kcyIgOmV4ZWN1 dGVDb21tYW5kUHJvdmlkZXIpCisgICAgICAgICAgIChjb25zdCA6dGFnICJJbmxheSBIaW50IiA6 aW5sYXlIaW50UHJvdmlkZXIpKSkKIAogKGRlZnVuIGVnbG90LS1zZXJ2ZXItY2FwYWJsZSAoJnJl c3QgZmVhdHMpCiAgICJEZXRlcm1pbmUgaWYgY3VycmVudCBzZXJ2ZXIgaXMgY2FwYWJsZSBvZiBG RUFUUy4iCkBAIC0xODQ1LDYgKzE4NTEsOSBAQCBlZ2xvdC0tbWF5YmUtYWN0aXZhdGUtZWRpdGlu Zy1tb2RlCiAgICAgKHdoZW4gKGFuZCBidWZmZXItZmlsZS1uYW1lIChlZ2xvdC1jdXJyZW50LXNl cnZlcikpCiAgICAgICAoc2V0cSBlZ2xvdC0tZGlhZ25vc3RpY3MgbmlsKQogICAgICAgKGVnbG90 LS1tYW5hZ2VkLW1vZGUpCisgICAgICAodW5sZXNzIChub3QgZWdsb3QtaW5sYXktaGludHMpCisg ICAgICAgIChlZ2xvdC1pbmxheS1tb2RlKQorICAgICAgICApCiAgICAgICAoZWdsb3QtLXNpZ25h bC10ZXh0RG9jdW1lbnQvZGlkT3BlbikpKSkKIAogKGFkZC1ob29rICdmaW5kLWZpbGUtaG9vayAn ZWdsb3QtLW1heWJlLWFjdGl2YXRlLWVkaXRpbmctbW9kZSkKQEAgLTM0NTMsNiArMzQ2Miw4MyBA QCBlZ2xvdC1saXN0LWNvbm5lY3Rpb25zCiAgICAgICAocmV2ZXJ0LWJ1ZmZlcikKICAgICAgIChw b3AtdG8tYnVmZmVyIChjdXJyZW50LWJ1ZmZlcikpKSkpCiAKKyhkZWZmYWNlIGVnbG90LWlubGF5 LWhpbnQKKyAgJygodCAoOmhlaWdodCAwLjggOmluaGVyaXQgc2hhZG93KSkpCisgICJGYWNlIHVz ZWQgZm9yIGlubGF5IGhpbnQgb3ZlcmxheXMuIikKKworKGRlZmluZS1taW5vci1tb2RlIGVnbG90 LWlubGF5LW1vZGUKKyAgIk1vZGUgZm9yIGRpc3BsYXlpbmcgaW5sYXkgaGludC4iCisgIDpsaWdo dGVyICIgaW5sYXkiCisgIChjb25kCisgICAgKGVnbG90LS1tYW5hZ2VkLW1vZGUKKyAgICAgIChh ZGQtaG9vayAnYWZ0ZXItc2F2ZS1ob29rICdlZ2xvdC0tdXBkYXRlLWhpbnRzIG5pbCB0KSkKKyAg ICAodAorICAgICAgKHJlbW92ZS1ob29rICdhZnRlci1zYXZlLWhvb2sgJ2VnbG90LS11cGRhdGUt aGludHMgdCkpCisgICAgKQorICA7OyBOb3RlOiB0aGUgcHVibGljIGhvb2sgcnVucyBiZWZvcmUg dGhlIGludGVybmFsIGVnbG90LS1tYW5hZ2VkLW1vZGUtaG9vay4KKyAgKHJ1bi1ob29rcyAnZWds b3QtbWFuYWdlZC1tb2RlLWhvb2spCisgICkKKworKGRlZnVuIGVnbG90LS11cGRhdGUtaGludHMo KQorICAiUmVmcmVzaCBpbmxheSBoaW50cyBmcm9tIExTUCBzZXJ2ZXIuIgorICAodW5sZXNzIChl Z2xvdC0tc2VydmVyLWNhcGFibGUgOmlubGF5SGludFByb3ZpZGVyKQorICAgIChlcnJvciAiU2Vy dmVyIGRvZXMgbm90IHN1cHBvcnQgaW5sYXkgaGludC4iKSkKKyAgKG1hcGMgIydkZWxldGUtb3Zl cmxheSAob3ZlcmxheXMtaW4gKHBvaW50LW1pbikgKHBvaW50LW1heCkpKQorICAobGV0ICgocmVh ZC1vbmx5LXAgYnVmZmVyLXJlYWQtb25seSkKKwkgICAgICAgb3ZlcmxheXMpCisJICAgIChsZXQg KChsZW5zLXRhYmxlIChtYWtlLWhhc2gtdGFibGUpKSkKKwkgICAgICA7OyBHZXQgdGhlIGlubGF5 IGhpbnQgb2JqZWN0cy4KKwkgICAgICAobWFwYyAobGFtYmRhIChpbmxheUhpbnQpCisJCSAgICAg ICAgICAgICh3aGVuIChlZ2xvdC0tc2VydmVyLWNhcGFibGUKKwkJCSAgICAgICAgICAgICAgICAg ICAgICAgOmlubGF5SGludFByb3ZpZGVyIDpyZXNvbHZlUHJvdmlkZXIpCisJCSAgICAgICAgICAg ICAgKHNldHEgaW5sYXlIaW50CisJCQkgICAgICAgICAgICAgIChqc29ucnBjLXJlcXVlc3QgKGVn bG90LS1jdXJyZW50LXNlcnZlci1vci1sb3NlKQorCQkJCQkgICAgICAgICAgICA6aW5sYXlIaW50 L3Jlc29sdmUgaW5sYXlIaW50KSkpCisJCSAgICAgICAgICAgIChsZXQgKChsaW5lICh0aHJlYWQt Zmlyc3QgaW5sYXlIaW50CisJCQkJCSAgICAgICAgICAgICAgICAgICAgKHBsaXN0LWdldCA6cG9z aXRpb24pCisJCQkJCSAgICAgICAgICAgICAgICAgICAgKHBsaXN0LWdldCA6bGluZSkpKSkKKwkJ ICAgICAgICAgICAgICAocHV0aGFzaCBsaW5lCisJCQkgICAgICAgICAgICAgIChhcHBlbmQgKGdl dGhhc2ggbGluZSBsZW5zLXRhYmxlKSAobGlzdCBpbmxheUhpbnQpKQorCQkJICAgICAgICAgICAg ICBsZW5zLXRhYmxlKSkpCisJCSAgICAgIChqc29ucnBjLXJlcXVlc3QKKwkJICAgICAgICAoZWds b3QtLWN1cnJlbnQtc2VydmVyLW9yLWxvc2UpCisJCSAgICAgICAgOnRleHREb2N1bWVudC9pbmxh eUhpbnQKKyAgICAgICAgICAgIChsaXN0IDp0ZXh0RG9jdW1lbnQgKGVnbG90LS1UZXh0RG9jdW1l bnRJZGVudGlmaWVyKSA6cmFuZ2UgKGxpc3QgOnN0YXJ0IChsaXN0IDpsaW5lIDAgOmNoYXJhY3Rl ciAwKSA6ZW5kIChsaXN0IDpsaW5lIChjb3VudC1saW5lcyAocG9pbnQtbWluKSAocG9pbnQtbWF4 KSkgOmNoYXJhY3RlciAwKSkpCisJCSAgICAgICAgOmRlZmVycmVkIHQpKQorCisJICAgICAgOzsg TWFrZSBvdmVybGF5cyBmb3IgdGhlbS4KKwkgICAgICAobWFwaGFzaAorCSAgICAgICAgKGxhbWJk YSAobGluZSB2YWx1ZXMpCisgICAgICAgICAgICAoY2wtbG9vcCBmb3IgdmFsdWUgaW4gdmFsdWVz CisgICAgICAgICAgICAgIGRvCisgICAgICAgICAgICAgIChjbC1sb29wIGZvciB2YWwgYmVpbmcg dGhlIGVsZW1lbnRzIG9mCisgICAgICAgICAgICAgICAgKGlmIChzdHJpbmdwIChwbGlzdC1nZXQg dmFsdWUgOmxhYmVsKSkKKyAgICAgICAgICAgICAgICAgIChsaXN0IChwbGlzdC1nZXQgdmFsdWUg OmxhYmVsKSkKKyAgICAgICAgICAgICAgICAgIChwbGlzdC1nZXQgdmFsdWUgOmxhYmVsKSkKKyAg ICAgICAgICAgICAgICBkbworCSAgICAgICAgICAgICAgKGVnbG90LS13aWRlbmluZworCSAgICAg ICAgICAgICAgICAobGV0ICgoYyAocGxpc3QtZ2V0IChwbGlzdC1nZXQgdmFsdWUgOnBvc2l0aW9u KSA6Y2hhcmFjdGVyKSkKKwkJICAgICAgICAgICAgICAgICAgICAgKHRleHQgKHByb3BlcnRpemUK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25jYXQKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGlmIChwbGlzdC1nZXQgdmFsdWUgOnBhZGRpbmdMZWZ0KSAi ICIgIiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoc3RyaW5ncCB2 YWwpIHZhbCAocGxpc3QtZ2V0IHZhbCA6dmFsdWUpKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoaWYgKHBsaXN0LWdldCB2YWx1ZSA6cGFkZGluZ1JpZ2h0KSAiICIgIiIpKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21vdXNlLWZhY2UgJ2hpZ2hsaWdodCkpCisgICAg ICAgICAgICAgICAgICAgICAgICAgKQorCSAgICAgICAgICAgICAgKGdvdG8tY2hhciAocG9pbnQt bWluKSkKKwkgICAgICAgICAgICAgIChmb3J3YXJkLWxpbmUgbGluZSkKKwkgICAgICAgICAgICAg IChlZ2xvdC1tb3ZlLXRvLWNvbHVtbiBjKQorCSAgICAgICAgICAgICAgKGxldCAoKG92IChtYWtl LW92ZXJsYXkgKHBvaW50KSAocG9pbnQpKSkpCisJCSAgICAgICAgICAgICAgKHB1c2ggb3Ygb3Zl cmxheXMpCisJCSAgICAgICAgICAgICAgKG92ZXJsYXktcHV0IG92ICdlZ2xvdC1pbmxheS1oaW50 IHZhbHVlcykKKwkJICAgICAgICAgICAgICAob3ZlcmxheS1wdXQgb3YgJ2JlZm9yZS1zdHJpbmcg KHByb3BlcnRpemUgdGV4dCAnZmFjZSAnZWdsb3QtaW5sYXktaGludCkpCisgICAgICAgICAgICAg ICAgICApKSkKKyAgICAgICAgICAgICAgICApKSkKKwkgICAgICAgIGxlbnMtdGFibGUpCisgICAg ICAgICkKKyAgICApKQorCisKIAwKIDs7OyBIYWNrcwogOzs7Ci0tIAoyLjM0LjEKCg== --0000000000004f94d105f31e3b0b--