From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Dmitry Gutov Newsgroups: gmane.emacs.bugs Subject: bug#72705: 31.0.50; eglot--dumb-tryc Filters out too much Date: Sun, 25 Aug 2024 05:49:59 +0300 Message-ID: References: <54dacc71-4395-431f-abc4-c60dc070cb03@gutov.dev> <0ff5f767-be87-4d64-964c-0a20fa776acf@gutov.dev> <0632f40f-98fd-4388-aba0-629a32d415eb@gutov.dev> <87ed6hyg1o.fsf@gmail.com> <06cfce49-33ff-41a2-b999-469c4a0009c0@gutov.dev> <87o75kwl2i.fsf@gmail.com> <87h6bbwn9l.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------arPiFn5kgdzYr0C0twxovAcZ" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="6998"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla Thunderbird Cc: 72705@debbugs.gnu.org To: =?UTF-8?Q?Jo=C3=A3o_?= =?UTF-8?Q?T=C3=A1vora?= Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sun Aug 25 04:51:34 2024 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 1si3Lp-0001hx-Gg for geb-bug-gnu-emacs@m.gmane-mx.org; Sun, 25 Aug 2024 04:51:34 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1si3LX-0003Ov-8v; Sat, 24 Aug 2024 22:51:15 -0400 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 1si3LV-0003Mz-F6 for bug-gnu-emacs@gnu.org; Sat, 24 Aug 2024 22:51:13 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1si3LU-0004b5-SR for bug-gnu-emacs@gnu.org; Sat, 24 Aug 2024 22:51:12 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=In-Reply-To:From:References:MIME-Version:Date:To:Subject; bh=UYa4tbMk/GJqMudeGLUy0uXeE5tdAupyo6wPQyja400=; b=YzcpDco6IOK3NiwDAOGROtFhFRooi4gQH/qTaa/eo6f0OaGSeN3vm2Pwj9VM2pE6psFp+nq8wrLsosivqLpxKCkA5mOv8zB1zk7BANsIeJUOg7Hr6k/+oUwE5lg8CzQCy0ifqC8Wxn8ld612jjPn72uNtnr7XM/mmM9/k5TRzVzs3Ve7pJAQovA1bfISjnIIbBoI4HhZcP9nWJSXKeFEjRvuIBsCh/9eA4DoSW82uxlb4UMhWmWQPNvxWcTEa0xSDIvmmcUx1F9ZU9ToQgiqhU0z25Bbd/ScXn8ZWhYYoJUaRYX0ZhNWwmIZ6kk+Mm5Gp2Pvb9bwmxWgvbKJehbLTw==; Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1si3MH-0004P2-NU for bug-gnu-emacs@gnu.org; Sat, 24 Aug 2024 22:52:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Dmitry Gutov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 25 Aug 2024 02:52:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 72705 X-GNU-PR-Package: emacs Original-Received: via spool by 72705-submit@debbugs.gnu.org id=B72705.172455426316838 (code B ref 72705); Sun, 25 Aug 2024 02:52:01 +0000 Original-Received: (at 72705) by debbugs.gnu.org; 25 Aug 2024 02:51:03 +0000 Original-Received: from localhost ([127.0.0.1]:42044 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1si3LK-0004NU-Qp for submit@debbugs.gnu.org; Sat, 24 Aug 2024 22:51:03 -0400 Original-Received: from fhigh4-smtp.messagingengine.com ([103.168.172.155]:46501) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1si3LH-0004Mx-8U for 72705@debbugs.gnu.org; Sat, 24 Aug 2024 22:51:01 -0400 Original-Received: from phl-compute-02.internal (phl-compute-02.nyi.internal [10.202.2.42]) by mailfhigh.nyi.internal (Postfix) with ESMTP id 2D6F31152A9D; Sat, 24 Aug 2024 22:50:04 -0400 (EDT) Original-Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-02.internal (MEProxy); Sat, 24 Aug 2024 22:50:04 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gutov.dev; h=cc :cc:content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm2; t=1724554204; x=1724640604; bh=UYa4tbMk/G JqMudeGLUy0uXeE5tdAupyo6wPQyja400=; b=K+hopUHAuSqCBZ10GOVHVbyVqq W20q9sCb7yLV6KPuJVdibrFygoG+AnKowom/YmtfGte3QCVdaC3+KfSxogzfHFcW 1NxnSw1V4x4dKbpNeq6oC8+6MTPuAJ6DYv0eEimZed5vwd8qBAY5tvQAhtXe/0Wl oQ78sZa0HFOuTOjkazuQMrE41EKoJBt+FdMuWdk2hlhM14mzBFCgLjhyFiUybhxZ be0ZZmty+QXjdmlazY8g80h+puzCl/3a3vToktGxmpTYhs+xLKWeNSOFVDGGghII /2HTAXGKrAVRywCe2klsIuE5bq7YcuTlMhLN/hBN9KxbXVaSS8whDCNnZx2g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm1; t=1724554204; x=1724640604; bh=UYa4tbMk/GJqMudeGLUy0uXeE5td Aupyo6wPQyja400=; b=kdCiiTKFZQgHZCmZChi//jgECOQBIQtFGP6xF6/dOLj6 JN4kwXqsnmupYfkedCJtF5MV5OWWc2pO2rXOP0k1UoHNFPmbpsbj+iXO3NSTa0cS khgezSV7isGI2UqlHcarGWtWYHkZbx9wmK7KkRNctjQp824bHy6Jl5SNt6m/pofN WPTHeg7E/NMT7V7gpdvij2/dnD2VfiCLE+RNLbM8EITHhKB1j9wozT/xukBmNnd4 r3ndUeYN7zHkjXivbPlF3vtmcqU7V0mh4VVak9PnmpHnpccyc0xC7EbXnrjyPVUy Nu1V1GM/GcmbvqBoeXpyfDfWgsEFuAYb5qX90hlK7A== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeftddruddvhedgieegucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnh htshculddquddttddmnecujfgurheptgfkffggfgfuvfevfhfhjgesmhdtreertddvjeen ucfhrhhomhepffhmihhtrhihucfiuhhtohhvuceoughmihhtrhihsehguhhtohhvrdguvg hvqeenucggtffrrghtthgvrhhnpeehleefudekudduveekieelgfeiffdvkefhkeeljeeu jeegueekveffkeejjeevheenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmh grihhlfhhrohhmpegumhhithhrhiesghhuthhovhdruggvvhdpnhgspghrtghpthhtohep vddpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepjhhorghothgrvhhorhgrsehgmh grihhlrdgtohhmpdhrtghpthhtohepjedvjedtheesuggvsggsuhhgshdrghhnuhdrohhr gh X-ME-Proxy: Feedback-ID: i0e71465a:Fastmail Original-Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sat, 24 Aug 2024 22:50:02 -0400 (EDT) Content-Language: en-US In-Reply-To: <87h6bbwn9l.fsf@gmail.com> 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:290709 Archived-At: This is a multi-part message in MIME format. --------------arPiFn5kgdzYr0C0twxovAcZ Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 23/08/2024 13:23, João Távora wrote: >> Great! Bump it to 1.17.60? > > No, keep it at 1.17.30. That's the 1.17-ish version of Eglot that will > ship with Emacs 30, just as 1.12.29 is the 1.12-ish version of Eglot > that shipped with Emacs 29. > > The change you're proposing will eventually also be merged to master > and be part of the 1.18 GNU Elpa release (earlier I wrote 1.17 GNU Elpa > by mistake). Perfect, thanks. > Foreign as it might seem to Emacs devs and users, LSP doesn't want any > concept of "prefix" (or suffix or commonality). In general, two very > closely related completions in the final insertion result can have two > wildly different labels displayed to the user. In this sense, the > "completions" popup in LSP is less like our all-too-familiar listing of > strings that can help complete the thing at point and more akin to a > specialized context menu for "things to _do_ at point". There's not > even an LSP mandate that this thing to _do_ must include something to > insert at point. Currently it could be just tidying up imports > elsewhere in the LSP document. In future LSP versions, it could be just > running an arbitrary server action, or sending an email. I see what you're saying, but insofar that current completion is mostly working out well, adding the special logic for parens would improve a lot of cases, and keep others the same degree of broken (the email-sending ones, for sure). So it might be worth a try. Anyway, stopping any partial completion (at first I didn't understand that you meant a more general notion that the partial-completion c-style) should be similarly easy to what the current patch does. You would just drop the second clause in eglot--dumb-tryc, I think. Or maybe both the first and the second. > The other "fix" is to lobby with the LSP spec people, but they're very > VSCode-inclined. From what I've seen, even other editors which are more > popular than Emacs have very little sway there. It seems we only have our hacks to help. They got pretty advanced, though. >> Yeah, it'd be great to have C-M-i stop before the paren. > > No, it wouldn't. It'd fix this particular case, but it could break in > some other future version of LSP where the LSP label isn't a prefix of > the thing that selecting that label would insert. Quite possibly, yes. Though reverting to the simpler behavior at that point would just require a 3-4 lines diff, as discussed. >>>> An alternative might be to use a completion-all-completions call, to >>>> assert the full list of completions. Or some completions that are in >>>> it anyway. >>> Yes, I generally prefer "end-to-end" tests using interactive >>> interfaces. >>> So unless you're duplicating the test I think this part should be >>> skipped. But your call. >> >> It's a different test (albeit with the same result as an existing >> one). I don't mind rewriting it in a different style, if you >> prefer. The result is kind of messy either way. > > My suggestion is just test that *Completions* pops up. Alas, this check does not succeed: (should (get-buffer-window "*Completions")) This works: (when (buffer-live-p "*Completions*") (kill-buffer "*Completions*")) (completion-at-point) (should (looking-back "foo")) (should (looking-at "123")) (should (get-buffer "*Completions*")) Is that better? >>>> It's the same case as '("foo123" . 3) in the test above, isn't it? >>> I don't think so. In a rust-analyzer hello world (which you can >>> make >>> with cargo init, if I'm not mistaken), both >>> v.c1234.12345676890 >>> v.count_on1234.12345676890 >>> should expand to >>> v.count_ones().1234567890 >>> In the first case, you'll have to manually select "count_ones" from >>> the >>> completions buffer. The expansion and removal of the 1234 happens via >>> LSP text edits, which are enacte by the :exit-function. >> >> Okay, I am seeing a difference too: C-M-i does eat the suffix in the >> Rust example (the "1234"). But completion with Company does not :-/ > > I can't even get Company to appear in those situations. You might have an older version installed? > But I wouldn't bother about it. The bug report was about C-M-i > originally. The important thing is that the LSP textEdit is run (via > exit-function) with the correct LSP document state that the server > expects. As far as I can tell, this is happening right now, so I'd be > nice to have a test to shore it up. Okay, see the attached patch with the added test. It took way longer than expected. Seems pretty brittle (note how eglot--wait-for-rust-analyzer is defined), but should be better than nothing. I also checked how VS Code behaves in such completions, since we were talking about what LSP's authors designed for or not. Works differently: 1) Completions are not filtered by suffix, ever. 2) Completing count_ones() does not delete the suffix ("1234" remains). It might mean that either behavior is okay, though. --------------arPiFn5kgdzYr0C0twxovAcZ Content-Type: text/x-patch; charset=UTF-8; name="eglot--dumb-tryc-more-checks-v3.diff" Content-Disposition: attachment; filename="eglot--dumb-tryc-more-checks-v3.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpc3AvcHJvZ21vZGVzL2VnbG90LmVsIGIvbGlzcC9wcm9nbW9kZXMv ZWdsb3QuZWwKaW5kZXggMzUzODc3ZjYwYzIuLjU5ZDljMzQ2NDI0IDEwMDY0NAotLS0gYS9s aXNwL3Byb2dtb2Rlcy9lZ2xvdC5lbAorKysgYi9saXNwL3Byb2dtb2Rlcy9lZ2xvdC5lbApA QCAtMzE0Miw4ICszMTQyLDE4IEBAIGVnbG90LS1kdW1iLWFsbGMKIChkZWZ1biBlZ2xvdC0t ZHVtYi10cnljIChwYXQgdGFibGUgcHJlZCBwb2ludCkKICAgKGxldCAoKHByb2JlIChmdW5j YWxsIHRhYmxlIHBhdCBwcmVkIG5pbCkpKQogICAgIChjb25kICgoZXEgcHJvYmUgdCkgdCkK LSAgICAgICAgICAocHJvYmUgKGNvbnMgcHJvYmUgKGxlbmd0aCBwcm9iZSkpKQotICAgICAg ICAgICh0IChjb25zIHBhdCBwb2ludCkpKSkpCisgICAgICAgICAgKHByb2JlCisgICAgICAg ICAgIChpZiAoYW5kIChub3QgKGVxdWFsIHByb2JlIHBhdCkpCisgICAgICAgICAgICAgICAg ICAgIChjbC1ldmVyeQorICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAocykgKHN0cmlu Zy1wcmVmaXgtcCBwcm9iZSBzIGNvbXBsZXRpb24taWdub3JlLWNhc2UpKQorICAgICAgICAg ICAgICAgICAgICAgKGZ1bmNhbGwgdGFibGUgcGF0IHByZWQgdCkpKQorICAgICAgICAgICAg ICAgKGNvbnMgcHJvYmUgKGxlbmd0aCBwcm9iZSkpCisgICAgICAgICAgICAgKGNvbnMgcGF0 IHBvaW50KSkpCisgICAgICAgICAgKHQKKyAgICAgICAgICAgOzsgTWF0Y2ggaWdub3Jpbmcg c3VmZml4OiBpZiB0aGVyZSBhcmUgYW55IGNvbXBsZXRpb25zIGZvcgorICAgICAgICAgICA7 OyB0aGUgY3VycmVudCBwcmVmaXggYXQgbGVhc3QsIGtlZXAgdGhlIGN1cnJlbnQgaW5wdXQu CisgICAgICAgICAgIChhbmQgKGZ1bmNhbGwgdGFibGUgKHN1YnN0cmluZyBwYXQgMCBwb2lu dCkgcHJlZCB0KQorICAgICAgICAgICAgICAgIChjb25zIHBhdCBwb2ludCkpKSkpKQogCiAo YWRkLXRvLWxpc3QgJ2NvbXBsZXRpb24tY2F0ZWdvcnktZGVmYXVsdHMgJyhlZ2xvdC1jYXBm IChzdHlsZXMgZWdsb3QtLWR1bWItZmxleCkpKQogKGFkZC10by1saXN0ICdjb21wbGV0aW9u LXN0eWxlcy1hbGlzdCAnKGVnbG90LS1kdW1iLWZsZXggZWdsb3QtLWR1bWItdHJ5YyBlZ2xv dC0tZHVtYi1hbGxjKSkKZGlmZiAtLWdpdCBhL3Rlc3QvbGlzcC9wcm9nbW9kZXMvZWdsb3Qt dGVzdHMuZWwgYi90ZXN0L2xpc3AvcHJvZ21vZGVzL2VnbG90LXRlc3RzLmVsCmluZGV4IDUz NGM0N2IyNjQ2Li40MTgyNGY0NzdiOCAxMDA2NDQKLS0tIGEvdGVzdC9saXNwL3Byb2dtb2Rl cy9lZ2xvdC10ZXN0cy5lbAorKysgYi90ZXN0L2xpc3AvcHJvZ21vZGVzL2VnbG90LXRlc3Rz LmVsCkBAIC01ODcsNiArNTg3LDE4IEBAIGVnbG90LS13YWl0LWZvci1jbGFuZ2QKICAgICAo ZWdsb3QtLXdhaXQtZm9yIChzLW5vdGlmcyAyMCkgKCZrZXkgbWV0aG9kICZhbGxvdy1vdGhl ci1rZXlzKQogICAgICAgKHN0cmluZz0gbWV0aG9kICJ0ZXh0RG9jdW1lbnQvcHVibGlzaERp YWdub3N0aWNzIikpKSkKIAorKGRlZnVuIGVnbG90LS13YWl0LWZvci1ydXN0LWFuYWx5emVy ICgpCisgIChlZ2xvdC0tc25pZmZpbmcgKDpzZXJ2ZXItbm90aWZpY2F0aW9ucyBzLW5vdGlm cykKKyAgICAoc2hvdWxkIChlZ2xvdC0tdGVzdHMtY29ubmVjdCkpCisgICAgKGVnbG90LS13 YWl0LWZvciAocy1ub3RpZnMgMjApICgma2V5IG1ldGhvZCBwYXJhbXMgJmFsbG93LW90aGVy LWtleXMpCisgICAgICAoYW5kCisgICAgICAgKHN0cmluZz0gbWV0aG9kICIkL3Byb2dyZXNz IikKKyAgICAgICAicnVzdEFuYWx5emVyL0luZGV4aW5nIgorICAgICAgIChlcXVhbCBwYXJh bXMKKyAgICAgICAgICAgICAgJyg6dG9rZW4gInJ1c3RBbmFseXplci9JbmRleGluZyIgOnZh bHVlCisgICAgICAgICAgICAgICAgICAgICAgIDs7IENvdWxkIHdhaXQgZm9yIDpraW5kICJl bmQiIGluc3RlYWQsIGJ1dCBpdCdzIDIgbW9yZSBzZWNvbmRzLgorICAgICAgICAgICAgICAg ICAgICAgICAoOmtpbmQgImJlZ2luIiA6dGl0bGUgIkluZGV4aW5nIiA6Y2FuY2VsbGFibGUg Ompzb24tZmFsc2UgOnBlcmNlbnRhZ2UgMCkpKSkpKSkKKwogKGVydC1kZWZ0ZXN0IGVnbG90 LXRlc3QtYmFzaWMtY29tcGxldGlvbnMgKCkKICAgIlRlc3QgYmFzaWMgYXV0b2NvbXBsZXRp b24gaW4gYSBjbGFuZ2QgTFNQLiIKICAgKHNraXAtdW5sZXNzIChleGVjdXRhYmxlLWZpbmQg ImNsYW5nZCIpKQpAQCAtNjAwLDYgKzYxMiwyMCBAQCBlZ2xvdC10ZXN0LWJhc2ljLWNvbXBs ZXRpb25zCiAgICAgICAobWVzc2FnZSAoYnVmZmVyLXN0cmluZykpCiAgICAgICAoc2hvdWxk IChsb29raW5nLWJhY2sgImZwcmludGYuPyIpKSkpKQogCisoZXJ0LWRlZnRlc3QgZWdsb3Qt dGVzdC1jb21tb24tcHJlZml4LWNvbXBsZXRpb24gKCkKKyAgIlRlc3QgY29tcGxldGlvbiBh cHBlbmRpbmcgdGhlIGNvbW1vbiBwcmVmaXguIgorICAoc2tpcC11bmxlc3MgKGV4ZWN1dGFi bGUtZmluZCAiY2xhbmdkIikpCisgIChlZ2xvdC0td2l0aC1maXh0dXJlCisgICAgICBgKCgi cHJvamVjdCIgLiAoKCJjb2lzby5jIiAuCisgICAgICAgICAgICAgICAgICAgICAgICwoY29u Y2F0ICJpbnQgZm9vX2JhcjsgaW50IGZvb19iYXJfYmF6OyIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgImludCBtYWluKCkge2ZvbyIpKSkpKQorICAgICh3aXRoLWN1cnJl bnQtYnVmZmVyCisgICAgICAgIChlZ2xvdC0tZmluZC1maWxlLW5vc2VsZWN0ICJwcm9qZWN0 L2NvaXNvLmMiKQorICAgICAgKGVnbG90LS13YWl0LWZvci1jbGFuZ2QpCisgICAgICAoZ290 by1jaGFyIChwb2ludC1tYXgpKQorICAgICAgKGNvbXBsZXRpb24tYXQtcG9pbnQpCisgICAg ICAoc2hvdWxkIChsb29raW5nLWJhY2sgIntmb29fYmFyIikpKSkpCisKIChlcnQtZGVmdGVz dCBlZ2xvdC10ZXN0LW5vbi11bmlxdWUtY29tcGxldGlvbnMgKCkKICAgIlRlc3QgY29tcGxl dGlvbiByZXN1bHRpbmcgaW4gJ0NvbXBsZXRlLCBidXQgbm90IHVuaXF1ZScuIgogICAoc2tp cC11bmxlc3MgKGV4ZWN1dGFibGUtZmluZCAiY2xhbmdkIikpCkBAIC02MTksMTkgKzY0NSw5 OSBAQCBlZ2xvdC10ZXN0LW5vbi11bmlxdWUtY29tcGxldGlvbnMKICAgICAgICAgKGZvcndh cmQtbGluZSAtMSkKICAgICAgICAgKHNob3VsZCAobG9va2luZy1hdCAiQ29tcGxldGUsIGJ1 dCBub3QgdW5pcXVlIikpKSkpKSkKIAotKGVydC1kZWZ0ZXN0IGVnbG90LXRlc3QtYmFzaWMt eHJlZiAoKQotICAiVGVzdCBiYXNpYyB4cmVmIGZ1bmN0aW9uYWxpdHkgaW4gYSBjbGFuZ2Qg TFNQLiIKKyhlcnQtZGVmdGVzdCBlZ2xvdC10ZXN0LXN0b3AtY29tcGxldGlvbi1vbi1ub25w cmVmaXggKCkKKyAgIlRlc3QgY29tcGxldGlvbiBhbHNvIHJlc3VsdGluZyBpbiAnQ29tcGxl dGUsIGJ1dCBub3QgdW5pcXVlJy4iCisgIChza2lwLXVubGVzcyAoZXhlY3V0YWJsZS1maW5k ICJjbGFuZ2QiKSkKKyAgKGVnbG90LS13aXRoLWZpeHR1cmUKKyAgICAgIGAoKCJwcm9qZWN0 IiAuICgoImNvaXNvLmMiIC4KKyAgICAgICAgICAgICAgICAgICAgICAgLChjb25jYXQgImlu dCBmb290OyBpbnQgZm9vdGVyOyBpbnQgZm9fb2JhcjsiCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJpbnQgbWFpbigpIHtmb28iKSkpKSkKKyAgICAod2l0aC1jdXJyZW50 LWJ1ZmZlcgorICAgICAgICAoZWdsb3QtLWZpbmQtZmlsZS1ub3NlbGVjdCAicHJvamVjdC9j b2lzby5jIikKKyAgICAgIChlZ2xvdC0td2FpdC1mb3ItY2xhbmdkKQorICAgICAgKGdvdG8t Y2hhciAocG9pbnQtbWF4KSkKKyAgICAgIChjb21wbGV0aW9uLWF0LXBvaW50KQorICAgICAg KHNob3VsZCAobG9va2luZy1iYWNrICJmb28iKSkpKSkKKworKGVydC1kZWZ0ZXN0IGVnbG90 LXRlc3QtdHJ5LWNvbXBsZXRpb24tbm9tYXRjaCAoKQorICAiVGVzdCBjb21wbGV0aW9uIHRh YmxlIHdpdGggbm9uLW1hdGNoaW5nIGlucHV0LCByZXR1cm5pbmcgbmlsLiIKKyAgKHNraXAt dW5sZXNzIChleGVjdXRhYmxlLWZpbmQgImNsYW5nZCIpKQorICAoZWdsb3QtLXdpdGgtZml4 dHVyZQorICAgICAgYCgoInByb2plY3QiIC4gKCgiY29pc28uYyIgLgorICAgICAgICAgICAg ICAgICAgICAgICAsKGNvbmNhdCAiaW50IG1haW4oKSB7YWJjIikpKSkpCisgICAgKHdpdGgt Y3VycmVudC1idWZmZXIKKyAgICAgICAgKGVnbG90LS1maW5kLWZpbGUtbm9zZWxlY3QgInBy b2plY3QvY29pc28uYyIpCisgICAgICAoZWdsb3QtLXdhaXQtZm9yLWNsYW5nZCkKKyAgICAg IChnb3RvLWNoYXIgKHBvaW50LW1heCkpCisgICAgICAoc2hvdWxkCisgICAgICAgKG51bGwK KyAgICAgICAgKGNvbXBsZXRpb24tdHJ5LWNvbXBsZXRpb24KKyAgICAgICAgICJhYmMiCisg ICAgICAgICAobnRoIDIgKGVnbG90LWNvbXBsZXRpb24tYXQtcG9pbnQpKSBuaWwgMykpKSkp KQorCisoZXJ0LWRlZnRlc3QgZWdsb3QtdGVzdC10cnktY29tcGxldGlvbi1pbnNpZGUtc3lt Ym9sICgpCisgICJUZXN0IGNvbXBsZXRpb24gdGFibGUgaW5zaWRlIHN5bWJvbCwgd2l0aCBv bmx5IHByZWZpeCBtYXRjaGluZy4iCiAgIChza2lwLXVubGVzcyAoZXhlY3V0YWJsZS1maW5k ICJjbGFuZ2QiKSkKICAgKGVnbG90LS13aXRoLWZpeHR1cmUKICAgICAgIGAoKCJwcm9qZWN0 IiAuICgoImNvaXNvLmMiIC4KLSAgICAgICAgICAgICAgICAgICAgICAgLChjb25jYXQgImlu dCBmb289NDI7IGludCBmb29leTsiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJpbnQgbWFpbigpIHtmb289ODI7fSIpKSkpKQorICAgICAgICAgICAgICAgICAgICAgICAs KGNvbmNhdAorICAgICAgICAgICAgICAgICAgICAgICAgICJpbnQgZm9vYmFyOyIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAiaW50IG1haW4oKSB7Zm9vMTIzIikpKSkpCiAgICAgKHdp dGgtY3VycmVudC1idWZmZXIKICAgICAgICAgKGVnbG90LS1maW5kLWZpbGUtbm9zZWxlY3Qg InByb2plY3QvY29pc28uYyIpCi0gICAgICAoc2hvdWxkIChlZ2xvdC0tdGVzdHMtY29ubmVj dCkpCi0gICAgICAoc2VhcmNoLWZvcndhcmQgIntmb28iKQotICAgICAgKGNhbGwtaW50ZXJh Y3RpdmVseSAneHJlZi1maW5kLWRlZmluaXRpb25zKQotICAgICAgKHNob3VsZCAobG9va2lu Zy1hdCAiZm9vPTQyIikpKSkpCisgICAgICAoZWdsb3QtLXdhaXQtZm9yLWNsYW5nZCkKKyAg ICAgIChnb3RvLWNoYXIgKC0gKHBvaW50LW1heCkgMykpCisgICAgICAod2hlbiAoYnVmZmVy LWxpdmUtcCAiKkNvbXBsZXRpb25zKiIpCisgICAgICAgIChraWxsLWJ1ZmZlciAiKkNvbXBs ZXRpb25zKiIpKQorICAgICAgKGNvbXBsZXRpb24tYXQtcG9pbnQpCisgICAgICAoc2hvdWxk IChsb29raW5nLWJhY2sgImZvbyIpKQorICAgICAgKHNob3VsZCAobG9va2luZy1hdCAiMTIz IikpCisgICAgICAoc2hvdWxkIChnZXQtYnVmZmVyICIqQ29tcGxldGlvbnMqIikpCisgICAg ICApKSkKKworKGVydC1kZWZ0ZXN0IGVnbG90LXRlc3QtcnVzdC1jb21wbGV0aW9uLWV4aXQt ZnVuY3Rpb24gKCkKKyAgIkhvdmVyIGFuZCBoaWdobGlnaHRDaGFuZ2VzLiIKKyAgKHNraXAt dW5sZXNzIChleGVjdXRhYmxlLWZpbmQgInJ1c3QtYW5hbHl6ZXIiKSkKKyAgKHNraXAtdW5s ZXNzIChleGVjdXRhYmxlLWZpbmQgImNhcmdvIikpCisgIChlZ2xvdC0td2l0aC1maXh0dXJl CisgICAgICAnKCgiY21wbC1wcm9qZWN0IiAuCisgICAgICAgICAoKCJtYWluLnJzIiAuCisg ICAgICAgICAgICJmbiB0ZXN0KCkgLT4gaTMyIHsgbGV0IHY6IHVzaXplID0gMTsgdi5jb3Vu dF9vbjEyMzQuMTIzNDU2Nzg5MDsiKSkpKQorICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyCisg ICAgICAgIChlZ2xvdC0tZmluZC1maWxlLW5vc2VsZWN0ICJjbXBsLXByb2plY3QvbWFpbi5y cyIpCisgICAgICAoc2hvdWxkICh6ZXJvcCAoc2hlbGwtY29tbWFuZCAiY2FyZ28gaW5pdCIp KSkKKyAgICAgIChlZ2xvdC0tdGVzdHMtY29ubmVjdCkKKyAgICAgIChnb3RvLWNoYXIgKHBv aW50LW1pbikpCisgICAgICAoc2VhcmNoLWZvcndhcmQgInYuY291bnRfb24iKQorICAgICAg KGxldCAoKG1pbmlidWZmZXItbWVzc2FnZS10aW1lb3V0IDApCisgICAgICAgICAgICA7OyBG YWlsIGF0IChkaW5nKSBpZiBjb21wbGV0aW9uIGZhaWxzLgorICAgICAgICAgICAgKGV4ZWN1 dGluZy1rYmQtbWFjcm8gdCkpCisgICAgICAgICh3aGVuIChidWZmZXItbGl2ZS1wICIqQ29t cGxldGlvbnMqIikKKyAgICAgICAgICAoa2lsbC1idWZmZXIgIipDb21wbGV0aW9ucyoiKSkK KyAgICAgICAgKGVnbG90LS13YWl0LWZvci1ydXN0LWFuYWx5emVyKQorICAgICAgICAoY29t cGxldGlvbi1hdC1wb2ludCkKKyAgICAgICAgKHNob3VsZCAobG9va2luZy1iYWNrICJcXC5j b3VudF9vbiIpKQorICAgICAgICAoc2hvdWxkIChnZXQtYnVmZmVyICIqQ29tcGxldGlvbnMq IikpCisgICAgICAgIChtaW5pYnVmZmVyLW5leHQtY29tcGxldGlvbiAxKQorICAgICAgICAo bWluaWJ1ZmZlci1jaG9vc2UtY29tcGxldGlvbiB0KSkKKyAgICAgIChzaG91bGQKKyAgICAg ICAoZXF1YWwKKyAgICAgICAgImZuIHRlc3QoKSAtPiBpMzIgeyBsZXQgdjogdXNpemUgPSAx OyB2LmNvdW50X29uZXMoKS4xMjM0NTY3ODkwOyIKKyAgICAgICAgKGJ1ZmZlci1zdHJpbmcp KSkpKSkKKworKGVydC1kZWZ0ZXN0IGVnbG90LXRlc3QtYmFzaWMteHJlZiAoKQorICAiVGVz dCBiYXNpYyB4cmVmIGZ1bmN0aW9uYWxpdHkgaW4gYSBjbGFuZ2QgTFNQLiIKKyAgKHNraXAt dW5sZXNzIChleGVjdXRhYmxlLWZpbmQgImNsYW5nZCIpKQorICAoZWdsb3QtLXdpdGgtZml4 dHVyZQorICAgYCgoInByb2plY3QiIC4gKCgiY29pc28uYyIgLgorICAgICAgICAgICAgICAg ICAgICAsKGNvbmNhdCAiaW50IGZvbz00MjsgaW50IGZvb2V5OyIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgImludCBtYWluKCkge2Zvbz04Mjt9IikpKSkpCisgICAod2l0aC1j dXJyZW50LWJ1ZmZlcgorICAgICAgIChlZ2xvdC0tZmluZC1maWxlLW5vc2VsZWN0ICJwcm9q ZWN0L2NvaXNvLmMiKQorICAgICAoc2hvdWxkIChlZ2xvdC0tdGVzdHMtY29ubmVjdCkpCisg ICAgIChzZWFyY2gtZm9yd2FyZCAie2ZvbyIpCisgICAgIChjYWxsLWludGVyYWN0aXZlbHkg J3hyZWYtZmluZC1kZWZpbml0aW9ucykKKyAgICAgKHNob3VsZCAobG9va2luZy1hdCAiZm9v PTQyIikpKSkpCiAKIChkZWZ2YXIgZWdsb3QtLXRlc3QtYy1idWZmZXIKICAgIlwK --------------arPiFn5kgdzYr0C0twxovAcZ--